0byt3m1n1
Path:
C:
/
Program Files
/
RStudio
/
resources
/
app
/
www
/
js
/
panmirror
/
[
Home
]
File: panmirror.js
(function(){"use strict";try{if(typeof document!="undefined"){var e=document.createElement("style");e.appendChild(document.createTextNode('.ProseMirror{position:relative}.ProseMirror{word-wrap:break-word;white-space:pre-wrap;white-space:break-spaces;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;font-feature-settings:"liga" 0}.ProseMirror pre{white-space:pre-wrap}.ProseMirror li{position:relative}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}img.ProseMirror-separator{display:inline!important;border:none!important;margin:0!important}.pm-omni-insert-completion{line-height:normal;table-layout:fixed;width:100%}.pm-omni-insert-icon{width:42px;height:42px}.pm-omni-insert-icon>img{width:24px;height:24px;border:1px solid;border-radius:2px;padding:4px;margin-top:1px;margin-right:5px;filter:opacity(80%)}.pm-dark-mode .pm-omni-insert-icon>img{filter:none}.pm-omni-insert-name{font-weight:700;opacity:80%}.pm-dark-mode .pm-omni-insert-name{opacity:none}.pm-omni-insert-description{font-size:.9em;opacity:50%}.pm-completion-popup{padding:0!important}.pm-completion-list{overflow-y:auto;overflow-x:hidden}.pm-completion-list>table{table-layout:fixed;border-spacing:0;width:100%;padding:4px}.pm-completion-list-horizontal>table{width:auto}.pm-completion-list>table>thead>tr>th{vertical-align:middle}.pm-completion-list>table td{padding:0 4px}.pm-completion-list-item{vertical-align:middle;border:1px solid transparent}.pm-completion-no-results{vertical-align:middle;text-align:center}.pm-completion-list-item-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ProseMirror{position:relative;height:100%;width:100%;outline:none;-webkit-user-select:text;user-select:text}.ProseMirror:focus{outline:none}.pm-editing-root-node{padding:0 10px}.pm-content{position:relative;padding-bottom:100px}.pm-content p{margin-top:0;margin-bottom:1em;line-height:1.5}.pm-content>p:first-child,.pm-content>p:nth-child(2),.pm-content>.pm-div:nth-child(1),.pm-content>.pm-div:nth-child(2){margin-top:1em}.pm-content .pm-heading{line-height:1.2}h3.pm-heading{font-size:1.25em!important}h4.pm-heading{font-size:1.1em!important}.pm-heading .pm-fixedwidth-font{font-size:inherit!important}.pm-link{text-decoration:underline}.pm-code-block{white-space:pre-wrap;margin-block-end:1em}.pm-blockquote{background-color:transparent;padding-left:.75em;border-left:.25em solid;margin-left:0;margin-right:0}.pm-figure{margin:0;margin-block-end:1em}.pm-img,.pm-image-preview img{max-width:100%}.pm-code,.pm-span{padding:0 1px}.pm-code{border:1px solid}.pm-div{padding:1em;margin-block-end:1em}.pm-div>*:last-child{margin-bottom:.2em}.pm-div>ul:last-child{margin-bottom:.4em}.pm-div .pm-div{border:1px solid}.pm-list{padding-inline-start:25px}.pm-list li:last-child *:last-child{margin-bottom:.1em}.pm-figcaption{margin-top:3px}.pm-table-container{margin-block-end:1.5em}.pm-table-container th{font-weight:700;text-align:left}.pm-table-cell{border:1px solid;padding:7px 5px 0}.pm-table-cell>p:last-of-type{margin-bottom:.5rem}.pm-code-editor{border:1px solid;margin-block-end:1.5em;margin-top:10px;clear:both}.pm-definition-list{margin-block-end:1.5em}.pm-definition-term{font-weight:600;margin-bottom:.5rem;padding:.2rem;display:block}.pm-definition-description{margin-left:.7rem}.pm-line-block{margin-block-end:1em}.pm-line-block>p{margin-top:0;margin-bottom:2px}.pm-yaml-metadata-block{border-radius:4px}.pm-footnote{font-size:75%;top:-.45em}.pm-footnote-body{font-size:.9rem}.pm-footnote-body p{margin-bottom:.5em;margin-top:.5em}.pm-node-caption{text-align:left;font-size:.85rem;cursor:text;min-height:1.28581em}.pm-margin-bordered{border-left:.1em solid;padding-left:.9em}.pm-raw-block-border{border-style:dotted}.pm-image-preview{border:1px dotted;padding:15px;margin-block-end:1em}.pm-popup{border-radius:4px;border-style:solid;border-width:1px;padding:10px}p.ProseMirror-selectednode{outline:none}.pm-annotations{position:absolute;top:0;right:24px;bottom:0;width:232px;overflow:hidden}a.pm-insert-user-comment-button,a.pm-insert-user-comment-button:hover{display:inline-block;position:absolute;right:12px;user-select:none;text-decoration:none;cursor:pointer;font-size:1.3rem;font-style:normal;font-weight:400}.pm-user-comment-view,.pm-annotations{transition-property:transform,margin-left;transition-duration:.75s}.pm-user-comment-view{width:220px;margin-left:12px}.pm-user-comment-view.pm-user-comment-active{margin-left:0}.pm-user-comment-thread{width:100%;font-size:.75rem;color:#394b59}.pm-user-comment-item{width:100%;background-color:#fff;box-shadow:#3c404326 0 1px 3px 1px;margin-bottom:8px}.pm-user-comment-header{padding:.3rem .6rem;background-color:#a7b6c24d;display:flex;align-items:baseline}.pm-user-comment-item:focus-within .pm-user-comment-header{padding:.3rem .6rem;background-color:#a7b6c299;display:flex;align-items:baseline}.pm-user-comment-meta{flex:1}.pm-user-comment-author{font-weight:500}.pm-user-comment-created{flex:1;opacity:.58}.pm-user-comment-actions{padding:0;text-align:center;float:right;margin-right:-3px}.pm-user-comment-actions>button{padding:1px 3px}.pm-user-comment-delete{margin-left:3px}.pm-user-comment-delete:before{content:"\\2715"}.pm-user-comment-edit:before{content:"\\270e"}.pm-user-comment-edit.active{color:#777;cursor:default}.pm-user-comment-content{display:block;padding:.6rem;max-height:200px;white-space:pre-wrap;overflow-x:hidden;overflow-y:hidden;resize:none;width:100%;outline-width:0px!important;border:none;margin:0;background-color:inherit}.pm-user-comment-footer{padding:.3rem .6rem}.pm-user-comment-footer button{margin-right:6px}.pm-user-comment-add{float:right}.pm-user-comment-add:before{content:"Reply\\2026"}.pm-user-comment-content:not([disabled]){background-color:#ffd;border-bottom:1px solid #DDD}.pm-user-comment-content:not([disabled]):empty:not(:focus):before{content:"(Empty)"}.pm-user-comment-content:not([disabled]):empty{font-style:italic;color:#888}.pm-user-comment-content[disabled]:empty:not(:focus):before{content:"(Empty comment)"}.pm-user-comment-content[disabled]:empty{color:#888}.pm-input-text{border:1px;border-style:solid;border-radius:3px}.pm-placeholder-icon{height:12px;width:12px;padding-left:4px;padding-right:3px;display:inline-block;vertical-align:middle}.pm-placeholder-text{padding-right:4px;font-size:9pt}.pm-spelling-error{border-bottom:1px dotted #e51400}.pm-solarized-mode .pm-spelling-error{border-color:#d27600}.pm-dark-mode .pm-spelling-error{border-color:#f48771}.pm-nbsp:before{content:"\\b7";position:relative;left:2px}.ProseMirror .pm-div{position:relative}.ProseMirror .pm-div[class*=callout-] .pm-heading,.ProseMirror .pm-div[class*=panel-tabset] .pm-heading{font-size:1.2em!important}.ProseMirror .pm-div[class*=callout-] .pm-heading{margin-top:.25em;margin-bottom:.5em}.ProseMirror li>.list-item-container{display:flex}.ProseMirror li .list-item-checkbox{flex:0 1 auto;margin-top:3px;margin-right:7px}.ProseMirror li .list-item-content{flex:1 1 auto}.ProseMirror li ul,.ProseMirror li ol{margin-bottom:1em}.ProseMirror ol[data-tight] li ul,.ProseMirror ol[data-tight] li ol,.ProseMirror ul[data-tight] li ul,.ProseMirror ul[data-tight] li ol{margin-bottom:0}.ProseMirror li>.list-item-container>.list-item-content>p{margin-top:0}.ProseMirror ul[data-tight]>li>.list-item-container>.list-item-content>p,.ProseMirror ol[data-tight]>li>.list-item-container>.list-item-content>p{margin-top:0;margin-bottom:.3rem}.ProseMirror ol[data-example]{list-style:none;padding-inline-start:20px}.ProseMirror ol[data-example] ol,.ProseMirror ol[data-example] ul{padding-inline-start:20px}.ProseMirror ol[data-example]>li{display:flex}.ProseMirror ol[data-example]>li:before{content:"(@) "}.pm-popup{font-weight:400}.pm-horizontal-panel{display:table}.pm-horizontal-panel-cell{display:table-cell;vertical-align:middle}.pm-image-button{border:none;padding:0;vertical-align:middle;background-color:transparent}.pm-image-button img{width:20px;height:18px}.pm-text-button{border-width:1px;border-style:solid;border-radius:3px;padding:4px}.pm-outline-button{border-width:1px;border-style:solid;border-radius:3px;padding-top:4px;padding-bottom:4px;opacity:.6}.pm-input-text,.pm-input-select{border-width:1px;border-style:solid;border-radius:3px}.pm-input-select{height:27px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){span.emoji{font-size:1.2em;margin-right:-3px}}.ProseMirror .pm-image-resize-container.pm-image-resize-active{outline:2px solid}.ProseMirror .pm-image-text-selection{outline:1px solid}.ProseMirror .pm-image-resize-handle{border:2px solid;border-radius:7px;width:7px;height:7px}.ProseMirror hr{padding:1px 0;border:none;margin:1.2em 0}.ProseMirror div.null-block{display:none}.ProseMirror .tlite{background:#111;color:#fff;font-family:sans-serif;font-size:.8rem;font-weight:400;text-decoration:none;text-align:left;padding:.6em .75rem;border-radius:4px;position:absolute;opacity:0;visibility:hidden;transition:opacity .4s;white-space:nowrap;box-shadow:0 .5rem 1rem -.5rem #000;z-index:900;backface-visibility:hidden;-webkit-backface-visibility:hidden}.ProseMirror .tlite-table td,.ProseMirror .tlite-table th{position:relative}.ProseMirror .tlite-visible{visibility:visible;opacity:.9}.ProseMirror .tlite:before{content:" ";display:block;background:inherit;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.ProseMirror .tlite-n:before{top:-3px;left:50%;margin-left:-5px}.ProseMirror .tlite-nw:before{top:-3px;left:10px}.ProseMirror .tlite-ne:before{top:-3px;right:10px}.ProseMirror .tlite-s:before{bottom:-3px;left:50%;margin-left:-5px}.ProseMirror .tlite-se:before{bottom:-3px;right:10px}.ProseMirror .tlite-sw:before{bottom:-3px;left:10px}.ProseMirror .tlite-w:before{left:-3px;top:50%;margin-top:-5px}.ProseMirror .tlite-e:before{right:-3px;top:50%;margin-top:-5px}.ProseMirror a:hover{cursor:text}.ProseMirror .pm-popup-link>*{vertical-align:middle;display:inline-block}.ProseMirror .pm-popup-link a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;margin-right:4px;padding-left:2px}.ProseMirror .pm-popup-link .pm-image-button{margin-left:10px}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProseMirror-gapcursor:after{top:-4px}.pm-textinput-container{display:inline-flex;position:relative;padding:0;margin:0;box-sizing:content-box}.pm-textinput-icon{position:absolute;top:8px;left:4px;width:12px;height:12px}.pm-textinput-input{padding:4px}.pm-textinput-input-with-icon{text-indent:16px}.pm-symbol-grid-container{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:1px}.pm-symbol-grid-cell{font-size:20px;display:flex;justify-content:center;align-items:center;height:100%;width:100%;margin:1px}.pm-symbol-grid{overflow:hidden;display:flex;justify-content:space-evenly}.pm-popup-insert-symbol{padding:0!important;text-align:center}.pm-popup-insert-symbol-search-container{box-sizing:border-box;display:flex;padding:10px}.pm-popup-insert-symbol-search-textbox{margin-right:10px;height:17px}.pm-popup-insert-symbol-select-category{width:100%;height:27px}.pm-popup-insert-symbol-separator{padding:0;margin-top:0;margin-bottom:1px;border:none;height:1px}.pm-popup-insert-symbol-grid-container{position:relative}.pm-popup-insert-symbol-no-matching{font-style:italic;display:none;margin:auto;position:absolute;top:45px;left:0;right:0}.pm-popup-insert-symbol-preview-container{display:flex;justify-content:space-between}.pm-popup-insert-symbol-preview-thumbnail{display:flex;align-items:center;padding-left:10px}.pm-popup-insert-symbol-preview-summary{display:flex;flex-direction:column;align-items:left;padding-left:10px}.pm-popup-insert-symbol-preview-name{font-weight:400;font-size:13px;text-align:left;text-transform:lowercase;text-overflow:ellipsis;white-space:nowrap}.pm-popup-insert-symbol-preview-markdown{font-weight:lighter;font-size:12px;text-align:left}.pm-popup-insert-symbol-preview-action{padding-right:10px;display:flex;align-items:center}.pm-completion-emoji-cell-header{float:left;font-weight:400;font-size:12px;margin-top:-2px;padding-bottom:2px}.pm-completion-emoji-cell{font-size:24px;text-align:center;width:100%}.pm-emoji-skintone-picker-container{display:flex;flex-direction:column;align-items:right}.pm-emoji-skintone-picker{display:flex}.pm-emoji-skintone-picker-item{padding:4px;cursor:pointer;font-size:13px}.pm-emoji-skintone-picker-item-selected{padding:4px;cursor:pointer;border-style:solid;border-width:1px;border-radius:3px}.pm-emoji-skintone-picker-label{padding-top:2px;font-size:10px}.pm-emoji-skintone-picker-button{padding:4px;font-size:13px}.ProseMirror .smallcaps{font-variant:small-caps}.ProseMirror .underline{text-decoration:underline}.pm-attr-edit-decoration{position:absolute;right:5px;z-index:9;background-color:transparent;font-size:10px}.pm-div .pm-attr-edit-decoration{margin-top:10px;right:10px}.pm-attr-edit-decoration .attr-edit-widget{padding:2px;height:18px;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.pm-attr-edit-decoration .attr-edit-tag{border-radius:20px;margin-right:6px;padding-left:7px;padding-right:7px;font-weight:400;white-space:nowrap}.pm-attr-edit-decoration .attr-edit-button{margin-top:1px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.pm-attr-edit-decoration .attr-edit-button img{width:18px;height:18px}.ProseMirror .math{display:inline-block}.ProseMirror .math[data-type=DisplayMath]{white-space:pre-wrap;margin:.5em}.ProseMirror .math[data-type=DisplayMath],.ProseMirror .math[data-type=DisplayMath] .pm-math-mathjax{width:100%}.pm-math-mathjax{display:inline-block;cursor:text}.pm-math-mathjax .MJXc-display{margin:0}.pm-completion-item{display:flex;align-items:center;height:52px}.pm-completion-item-type{margin-left:6px;margin-right:6px;display:flex;align-items:center;position:relative}.pm-completion-item-icon{border:solid 1px;border-radius:2px;padding:4px;height:24px;width:24px;margin-top:1px;margin-right:6px;filter:opacity(.8)}.pm-completion-image-adorn{border:solid 1px;border-radius:2px;height:6px;width:6px;padding:2px;position:absolute;bottom:-3px;right:1px;filter:opacity(1)!important;z-index:900}.pm-completion-item-summary{display:flex;flex-direction:column;padding:6px 4px 4px 0;line-height:20px;font-size:14px}.pm-completion-item-id{display:flex;width:100%;justify-content:space-between;flex-direction:row}.pm-completion-item-primary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.pm-completion-item-title{margin-right:8px;font-weight:500;font-size:10pt;opacity:.8}.pm-completion-item-subTitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:18px;font-size:9pt;opacity:.6}.pm-completion-item-detail{font-size:9pt;opacity:.6}.pm-completion-cite-warning{background:#fdf5e0;margin:-5px -5px 5px;border-bottom:solid 1px;padding:4px 4px 4px 16px;text-align:left;font-size:8pt;font-weight:1;opacity:.8}.pm-dark-mode .pm-completion-cite-warning{color:#000}.pm-xref-completion-item .pm-completion-item-id{justify-content:stretch;align-items:flex-start}.pm-xref-completion-item .pm-completion-item-id>*:first-child{flex:2}.pm-xref-completion-item .pm-completion-item-id>*:last-child{flex:1;align-self:flex-end;text-align:right}.pm-completion-detailed-item{display:flex;align-items:flex-start;height:120px}.pm-completion-detailed-item-type{margin-top:24px;margin-left:6px;margin-right:6px;display:flex;align-items:center}.pm-completion-item-detailed-type img{border:solid 1px;border-radius:2px;padding:4px;height:24px;width:24px;margin-top:1px;margin-right:6px;filter:opacity(.8)}.pm-completion-item-detailed-summary{display:flex;flex-direction:column;padding:6px 4px 4px 0;line-height:20px;font-size:14px;max-width:calc(100% - 70px)}.pm-completion-item-detailed-heading{margin-right:8px;font-weight:500;font-size:8pt;opacity:.6;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pm-completion-item-detailed-title{margin-right:8px;font-weight:520;font-size:11pt;opacity:.8;width:100%;max-height:60px;overflow:hidden;text-overflow:ellipsis}.pm-completion-item-detailed-subTitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;line-height:18px;padding-top:8px;font-size:11pt;opacity:.6}.pm-cite-popup{max-width:400px;display:flex;align-content:flex-start;flex-direction:column}.pm-cite-popup p{font-size:.9em;margin-bottom:0!important}.pm-cite-popup a{cursor:pointer!important}.pm-cite-popup-link{margin-left:6px}.pm-cite-popup-preview{width:100%;opacity:.8}.hanging-indent p{padding-left:12px;text-indent:-12px}.smallcaps{font-variant:small-caps}.nocase{text-transform:none}.pm-tag-input-container{display:flex;flex-wrap:wrap;align-items:flex-start;height:37px;align-content:center}.pm-tag-input-placeholder{height:27px;margin-left:2px;padding:4px;display:flex;align-items:center}.pm-tag-input-tag{display:flex;align-items:center;padding:4px;margin:4px;border:solid 1px;border-radius:50em}.pm-tag-input-delete-image{height:14px;width:24px;padding-left:4px;padding-right:6px;cursor:pointer}.pm-tag-input-edit-image{height:14px;width:14px;padding-right:4px;cursor:pointer}.pm-tag-input-text{font-size:10pt;opacity:.8;padding:0}.pm-tag-input-text-edittable{cursor:pointer}.pm-tag-input-text-raw{display:inline-block;padding-top:0;padding-bottom:1px;padding-right:6px}.pm-tag-input-text-edit{border:0px;font-size:10pt;padding:0;margin:0;box-sizing:border-box}.pm-navigation-tree{margin-bottom:2px}.pm-navigation-tree-node{padding-top:2px;padding-bottom:2px;display:flex;align-items:center;margin-top:2px}.pm-navigation-tree-node-image{width:20px;height:20px;padding-right:4px;padding-left:2px;vertical-align:middle;max-width:none}.pm-navigation-tree-node-label-div{font-size:1.1em;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pm-dialog-buttons-panel{display:flex}.pm-dialog-buttons-button{background:none;height:26px;min-width:76px;border-radius:7px;font-size:12px;font-family:Lucida Sans,DejaVu Sans,Lucida Grande,Segoe UI,Verdana,Helvetica,"sans-serif","serif";opacity:.8;margin-left:6px}.pm-insert-citation-panel-search{width:100%;border:solid 1px;border-radius:3px}.pm-insert-citation-panel-search-textbox-container{width:100%}.pm-insert-citation-panel-search-textbox{width:100%;border:solid 1px;box-sizing:border-box;height:28px!important;margin-bottom:2px}.pm-insert-citation-source-panel-list-noresults{width:100%}.pm-insert-citation-source-panel-list-noresults-text{text-align:center;font-size:10pt;font-style:italic;opacity:.8;padding-top:40px}.pm-insert-citation-source-panel-list-progress{height:24px;width:24px;padding-right:2px;vertical-align:middle}.pm-insert-citation-source-panel-item{width:100%}.pm-insert-citation-source-panel-item-border{display:flex;flex-direction:column;margin:3px 4px;width:calc(100% - 8px);height:calc(100% - 6px)}.pm-insert-citation-source-panel-item-type{margin-left:6px;margin-right:6px;display:flex;align-items:center;position:relative;flex-shrink:0}.pm-insert-citation-source-panel-item-container{display:flex;flex-grow:1;flex-shrink:0;min-width:0;align-items:center;padding:0}.pm-insert-citation-source-panel-item-summary{display:flex;flex-direction:column;min-width:0;flex-grow:1;padding-right:4px;padding-left:0;line-height:20px;font-size:14px;overflow:hidden}.pm-insert-citation-source-panel-item-button{flex-shrink:0;padding-right:20px;padding-left:20px;opacity:.8}.pm-insert-citation-source-panel-item-button-selected{border-width:2px}.pm-insert-citation-source-panel-item-separator{margin-left:50px;border-bottom:solid 1px;height:1px}.pm-insert-citation-source-panel-item-noseparator{margin-left:50px;height:2px}.pm-insert-citation-source-panel-item-icon{border:solid 1px;border-radius:2px;padding:4px;height:24px;width:24px;margin-top:1px;margin-right:6px;filter:opacity(.8)}.pm-insert-citation-source-panel-item-adorn{border:solid 1px;border-radius:2px;height:6px;width:6px;padding:2px;position:absolute;bottom:-3px;right:1px;filter:opacity(1)!important;z-index:900}.pm-insert-citation-source-panel-item-id{display:flex;justify-content:space-between;flex-direction:row;white-space:nowrap}.pm-insert-citation-source-panel-item-title{padding-left:1px;margin-right:8px;font-weight:500;font-size:11pt;opacity:.8}.pm-insert-citation-source-panel-item-detail{font-size:10pt;opacity:.6}.pm-insert-citation-source-panel-item-subtitle-text{flex-shrink:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;min-width:0;line-height:18px;font-size:10pt;opacity:.6}.pm-insert-bibliography-source-panel-warning{background:#fdf5e0;border:solid 1px;border-radius:3px;padding:4px;text-align:center;margin-bottom:4px;font-size:8pt;font-weight:1;opacity:.8}.pm-insert-citation-panel-latent-search{width:100%}.pm-insert-citation-panel-latent-search-textbox-container{display:flex;width:100%}.pm-insert-citation-panel-latent-search-textbox{width:100%;border:solid 1px;box-sizing:border-box;height:28px!important;margin-bottom:10px}.pm-insert-citation-panel-latent-search-button{margin-bottom:10px;margin-left:10px;min-width:76px}.pm-insert-citation-panel-latent-search-list-container{position:relative}.pm-insert-citation-panel-latent-search-list{border:solid 1px;border-radius:3px;height:calc(100% - 38px)}.pm-insert-citation-source-panel-item-detailed{width:100%}.pm-insert-citation-source-panel-item-detailed-border{display:flex;flex-direction:column;margin:3px 4px;width:calc(100% - 8px);height:calc(100% - 6px)}.pm-insert-citation-source-panel-item-detailed-type{margin-left:6px;margin-right:6px;display:flex;align-items:top;position:relative;flex-shrink:0}.pm-insert-citation-source-panel-item-detailed-container{display:flex;flex-grow:1;flex-shrink:0;min-width:0;align-items:flex-start;padding:10px 0}.pm-insert-citation-source-panel-item-detailed-summary{display:flex;flex-direction:column;min-width:0;flex-grow:1;padding-right:4px;padding-left:0;line-height:20px;font-size:14px;overflow:hidden}.pm-insert-citation-source-panel-item-detailed-button{flex-shrink:0;padding-right:20px;padding-left:20px;opacity:.8}.pm-insert-citation-source-panel-item-detailed-button-selected{border-width:2px}.pm-insert-citation-source-panel-item-detailed-separator{margin-left:50px;border-bottom:solid 1px;height:1px}.pm-insert-citation-source-panel-item-detailed-noseparator{margin-left:50px;height:2px}.pm-insert-citation-source-panel-item-detailed-icon{border:solid 1px;border-radius:2px;padding:4px;height:24px;width:24px;margin-top:1px;margin-right:6px;filter:opacity(.8)}.pm-insert-citation-source-panel-item-detailed-adorn{border:solid 1px;border-radius:2px;height:6px;width:6px;padding:2px;position:absolute;bottom:-3px;right:1px;filter:opacity(1)!important;z-index:900}.pm-insert-citation-source-panel-item-detailed-id{display:flex;justify-content:space-between;flex-direction:row;white-space:nowrap}.pm-insert-citation-source-panel-item-detailed-title{padding-left:1px;margin-right:8px;font-weight:500;font-size:11pt;opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pm-insert-citation-source-panel-item-detailed-detail{font-size:10pt;opacity:.6}.pm-insert-citation-source-panel-item-detailed-subtitle-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;min-width:0;line-height:18px;font-size:10pt;opacity:.6}.pm-insert-doi-source-panel{width:100%}.pm-insert-doi-source-panel-textbox-container{display:flex;width:100%}.pm-insert-doi-source-panel-textbox{width:100%;border:solid 1px;box-sizing:border-box;height:28px!important;margin-bottom:10px}.pm-insert-doi-source-panel-results{border:solid 1px;border-radius:3px;height:calc(100% - 38px)}.pm-insert-doi-source-panel-heading{padding-top:10px}.pm-insert-doi-source-panel-fields{padding-top:8px;padding-left:50px;padding-right:10px}.pm-insert-doi-source-panel-fields-name{padding-right:20px;opacity:.6}.pm-insert-doi-source-panel-fields-value{opacity:.8}.pm-insert-doi-source-panel-no-result{width:100%}.pm-insert-doi-source-panel-no-result-text{text-align:center;font-size:10pt;font-style:italic;opacity:.8;padding-top:20px}.pm-citation-bibliography-picker-container{display:flex;flex-direction:row;align-items:center}.pm-citation-bibliography-picker-select-file{width:100%}.pm-citation-bibliography-picker-label{margin-right:6px}.pm-citation-bibliography-format-label{padding-left:4px;margin-right:6px}.pm-citation-bibliography-picker-textbox{margin-right:8px}.pm-citation-bibliography-picker-create-controls{display:flex;flex-direction:row;align-items:center}.pm-cite-panel-container{width:100%;display:flex;flex-direction:column}.pm-cite-panel-cite-selection{width:100%;display:flex;flex-direction:row}.pm-cite-panel-cite-selection-sources{width:25%;border:solid 1px;border-radius:3px;margin-right:10px}.pm-cite-panel-cite-selection-items{width:75%}.pm-cite-panel-selected-cites{margin-top:10px;border:solid 1px;border-radius:3px}.pm-cite-panel-insert-inputs{width:100%;display:flex;justify-content:space-between;margin-top:10px;align-items:flex-end}.pm-cite-panel-insert-options,.pm-cite-panel-button-panel{display:flex}.pm-cite-panel-checkbox-group{padding-left:16px;padding-top:6px}.pm-cite-panel-checkbox-label{padding-left:4px}.pm-cite-xref-popup{max-width:350px}.pm-cite-xref-popup-key{cursor:pointer!important;white-space:nowrap;overflow:hidden;text-overflow:wrap}.pm-cite-xref-popup-text{opacity:.9;font-size:.9em;margin-top:3px}.pm-cite-xref-popup-file{opacity:.6;font-size:.9em;margin-top:3px}.pm-xref-popup{max-width:350px}.pm-xref-popup>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pm-xref-popup-key{cursor:pointer!important}.pm-xref-popup-file{opacity:.6;font-size:.9em;margin-top:3px}.pm-insert-xref-list{border:solid 1px;border-radius:3px;margin-bottom:12px}.pm-insert-xref-container{display:flex}.pm-insert-xref-list-container{padding-left:8px;width:100%}.pm-xref-item{width:calc(100% - 4px)!important;display:flex;align-items:center;margin:2px}.pm-xref-item-image-container{flex-grow:0;padding-left:10px;padding-right:4px}.pm-xref-item-body{flex-grow:1;padding-right:8px;padding-top:12px;padding-bottom:8px;min-width:0}.pm-xref-item-title{display:flex;justify-content:space-between}.pm-xref-item-primary{font-weight:500;font-size:10pt;opacity:.8}.pm-xref-item-secondary{font-size:10pt;opacity:.8}.pm-xref-item-detail{flex-shrink:1;font-size:10pt;opacity:.8;padding-top:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.pm-insert-xref .pm-dialog-buttons-panel{justify-content:flex-end}.pm-insert-xref-search-container{display:flex;justify-content:space-between;padding-left:10px;padding-right:10px;padding-bottom:10px}.pm-insert-xref-search-textbox{width:100%}.pm-insert-xref-list-container .pm-textinput-container{width:100%;margin-bottom:6px}.pm-insert-xref-list-placeholder{border:solid 1px;border-radius:3px;margin-bottom:12px;display:flex;justify-content:center;width:"100%"}.pm-insert-xref-list-placeholder div{padding-top:40px;font-weight:500;font-size:10pt;opacity:.8;font-style:italic}.pm-insert-xref-insert-options{display:flex;justify-content:space-between;padding-left:4px}.pm-insert-xref-prefix{display:flex;align-items:center}.pm-insert-xref-prefix select{margin-left:10px;margin-right:8px;width:100px}.pm-insert-xref-type-container{border:solid 1px;border-radius:3px;margin-bottom:12px;width:188px}.ProseMirror .pm-comment-hidden{display:none}.ProseMirror .footnote{vertical-align:baseline;position:relative;cursor:default}.ProseMirror>.body,.ProseMirror>.notes{position:absolute;left:0;right:0;bottom:0;overflow-y:auto}.ProseMirror>.body{top:0}.ProseMirror>.notes{height:0}.ProseMirror>.body.editing-footnote{bottom:160px;border-bottom:1px solid}.ProseMirror>.notes.editing-footnote{height:150px;padding-top:10px;z-index:5}.ProseMirror .note{display:none}.ProseMirror .note.active{display:flex}.ProseMirror .footnote.active{outline:2px solid}.ProseMirror .note .note-label{flex:none;padding-right:8px}.ProseMirror .note .note-content{flex:1}.pm-image-preview img.pm-image-centered{display:block;margin-left:auto;margin-right:auto}.ProseMirror div.line-block>p{white-space:pre-wrap}.ProseMirror .tableWrapper{overflow-x:auto}.ProseMirror table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}.ProseMirror td,.ProseMirror th{vertical-align:top;box-sizing:border-box;position:relative}.ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}.ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}.ProseMirror .selectedCell:after{z-index:2;position:absolute;content:"";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,.4);pointer-events:none}.ProseMirror table{width:auto}.ProseMirror .table-container table{margin:0;width:100%}.ProseMirror .table-container th,.ProseMirror .table-container td{min-width:1em}.ProseMirror .table-container .tableWrapper{margin:1em 0}.ProseMirror .table-container .table-caption-inactive{display:none}.ProseMirror dt{display:block}.pm-user-comment-thread:focus-within .pm-user-comment-add,.pm-user-comment-view.pm-user-comment-active .pm-user-comment-add{display:block}.pm-user-comment-thread.active .pm-user-comment-add,.pm-user-comment-add{display:none}.pm-ace-editor{position:relative;padding-top:3px;padding-bottom:3px}.pm-ace-editor.pm-ace-has-output{padding-bottom:0}.ProseMirror .pm-ace-toolbar{position:absolute;right:0;top:0;z-index:10}.ProseMirror .pm-image-button{margin-left:5px}.ProseMirror .pm-ace-toolbar .pm-run-previous-chunks-button img{width:13px;height:13px}.ProseMirror .pm-ace-toolbar .pm-run-chunk-button img{width:20px;height:13px}.pm-ace-editor .ace_hidden-cursors .ace_cursor{visibility:hidden}.pm-ace-editor-inactive .ace_marker-layer .ace_bracket,.pm-ace-editor-inactive .ace_marker-layer .ace_selection,.pm-ace-editor-inactive .ace_marker-layer .ace_selected-word{display:none}.ProseMirror .pm-ace-editor .ace_editor{background-color:transparent}.pm-ace-editor .pm-find-text{position:absolute}.pm-ace-editor pre.ace_editor{margin-top:0;margin-bottom:0;margin-left:4px;line-height:145%}')),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})(); var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; (function(global2, factory) { typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.Panmirror = factory()); })(this, function() { "use strict"; function _mergeNamespaces(n2, m2) { for (var i2 = 0; i2 < m2.length; i2++) { const e2 = m2[i2]; if (typeof e2 !== "string" && !Array.isArray(e2)) { for (const k2 in e2) { if (k2 !== "default" && !(k2 in n2)) { const d2 = Object.getOwnPropertyDescriptor(e2, k2); if (d2) { Object.defineProperty(n2, k2, d2.get ? d2 : { enumerable: true, get: () => e2[k2] }); } } } } } return Object.freeze(Object.defineProperty(n2, Symbol.toStringTag, { value: "Module" })); } var LinkType = /* @__PURE__ */ ((LinkType2) => { LinkType2[LinkType2["URL"] = 0] = "URL"; LinkType2[LinkType2["Heading"] = 1] = "Heading"; LinkType2[LinkType2["ID"] = 2] = "ID"; return LinkType2; })(LinkType || {}); var ListType = /* @__PURE__ */ ((ListType2) => { ListType2["Ordered"] = "OrderedList"; ListType2["Bullet"] = "BulletList"; return ListType2; })(ListType || {}); var ListNumberStyle = /* @__PURE__ */ ((ListNumberStyle2) => { ListNumberStyle2["DefaultStyle"] = "DefaultStyle"; ListNumberStyle2["Decimal"] = "Decimal"; ListNumberStyle2["LowerRoman"] = "LowerRoman"; ListNumberStyle2["UpperRoman"] = "UpperRoman"; ListNumberStyle2["LowerAlpha"] = "LowerAlpha"; ListNumberStyle2["UpperAlpha"] = "UpperAlpha"; ListNumberStyle2["Example"] = "Example"; return ListNumberStyle2; })(ListNumberStyle || {}); var ListNumberDelim = /* @__PURE__ */ ((ListNumberDelim2) => { ListNumberDelim2["DefaultDelim"] = "DefaultDelim"; ListNumberDelim2["Period"] = "Period"; ListNumberDelim2["OneParen"] = "OneParen"; ListNumberDelim2["TwoParens"] = "TwoParens"; return ListNumberDelim2; })(ListNumberDelim || {}); const kAlertTypeWarning = 2; const kAlertTypeError = 3; const kHeadingOutlineItemType = "heading"; const kRmdchunkOutlineItemType = "rmd_chunk"; const kYamlMetadataOutlineItemType = "yaml_metadata"; const emjois = [ { "emojiRaw": "\u{1F600}", "description": "grinning face", "category": "Smileys & Emotion", "aliases": [ "grinning" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F603}", "description": "grinning face with big eyes", "category": "Smileys & Emotion", "aliases": [ "smiley" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F604}", "description": "grinning face with smiling eyes", "category": "Smileys & Emotion", "aliases": [ "smile" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F601}", "description": "beaming face with smiling eyes", "category": "Smileys & Emotion", "aliases": [ "grin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F606}", "description": "grinning squinting face", "category": "Smileys & Emotion", "aliases": [ "laughing", "satisfied" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F605}", "description": "grinning face with sweat", "category": "Smileys & Emotion", "aliases": [ "sweat_smile" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F923}", "description": "rolling on the floor laughing", "category": "Smileys & Emotion", "aliases": [ "rofl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F602}", "description": "face with tears of joy", "category": "Smileys & Emotion", "aliases": [ "joy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F642}", "description": "slightly smiling face", "category": "Smileys & Emotion", "aliases": [ "slightly_smiling_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F643}", "description": "upside-down face", "category": "Smileys & Emotion", "aliases": [ "upside_down_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F609}", "description": "winking face", "category": "Smileys & Emotion", "aliases": [ "wink" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F60A}", "description": "smiling face with smiling eyes", "category": "Smileys & Emotion", "aliases": [ "blush" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F607}", "description": "smiling face with halo", "category": "Smileys & Emotion", "aliases": [ "innocent" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F970}", "description": "smiling face with hearts", "category": "Smileys & Emotion", "aliases": [ "smiling_face_with_three_hearts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F60D}", "description": "smiling face with heart-eyes", "category": "Smileys & Emotion", "aliases": [ "heart_eyes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F929}", "description": "star-struck", "category": "Smileys & Emotion", "aliases": [ "star_struck" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F618}", "description": "face blowing a kiss", "category": "Smileys & Emotion", "aliases": [ "kissing_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F617}", "description": "kissing face", "category": "Smileys & Emotion", "aliases": [ "kissing" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F61A}", "description": "kissing face with closed eyes", "category": "Smileys & Emotion", "aliases": [ "kissing_closed_eyes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F619}", "description": "kissing face with smiling eyes", "category": "Smileys & Emotion", "aliases": [ "kissing_smiling_eyes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F60B}", "description": "face savoring food", "category": "Smileys & Emotion", "aliases": [ "yum" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F61B}", "description": "face with tongue", "category": "Smileys & Emotion", "aliases": [ "stuck_out_tongue" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F61C}", "description": "winking face with tongue", "category": "Smileys & Emotion", "aliases": [ "stuck_out_tongue_winking_eye" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F92A}", "description": "zany face", "category": "Smileys & Emotion", "aliases": [ "zany_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F61D}", "description": "squinting face with tongue", "category": "Smileys & Emotion", "aliases": [ "stuck_out_tongue_closed_eyes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F911}", "description": "money-mouth face", "category": "Smileys & Emotion", "aliases": [ "money_mouth_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F917}", "description": "hugging face", "category": "Smileys & Emotion", "aliases": [ "hugs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F92D}", "description": "face with hand over mouth", "category": "Smileys & Emotion", "aliases": [ "hand_over_mouth" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F92B}", "description": "shushing face", "category": "Smileys & Emotion", "aliases": [ "shushing_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F914}", "description": "thinking face", "category": "Smileys & Emotion", "aliases": [ "thinking" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F910}", "description": "zipper-mouth face", "category": "Smileys & Emotion", "aliases": [ "zipper_mouth_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F928}", "description": "face with raised eyebrow", "category": "Smileys & Emotion", "aliases": [ "raised_eyebrow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F610}", "description": "neutral face", "category": "Smileys & Emotion", "aliases": [ "neutral_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F611}", "description": "expressionless face", "category": "Smileys & Emotion", "aliases": [ "expressionless" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F636}", "description": "face without mouth", "category": "Smileys & Emotion", "aliases": [ "no_mouth" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F60F}", "description": "smirking face", "category": "Smileys & Emotion", "aliases": [ "smirk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F612}", "description": "unamused face", "category": "Smileys & Emotion", "aliases": [ "unamused" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F644}", "description": "face with rolling eyes", "category": "Smileys & Emotion", "aliases": [ "roll_eyes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F62C}", "description": "grimacing face", "category": "Smileys & Emotion", "aliases": [ "grimacing" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F925}", "description": "lying face", "category": "Smileys & Emotion", "aliases": [ "lying_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F60C}", "description": "relieved face", "category": "Smileys & Emotion", "aliases": [ "relieved" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F614}", "description": "pensive face", "category": "Smileys & Emotion", "aliases": [ "pensive" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F62A}", "description": "sleepy face", "category": "Smileys & Emotion", "aliases": [ "sleepy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F924}", "description": "drooling face", "category": "Smileys & Emotion", "aliases": [ "drooling_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F634}", "description": "sleeping face", "category": "Smileys & Emotion", "aliases": [ "sleeping" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F637}", "description": "face with medical mask", "category": "Smileys & Emotion", "aliases": [ "mask" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F912}", "description": "face with thermometer", "category": "Smileys & Emotion", "aliases": [ "face_with_thermometer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F915}", "description": "face with head-bandage", "category": "Smileys & Emotion", "aliases": [ "face_with_head_bandage" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F922}", "description": "nauseated face", "category": "Smileys & Emotion", "aliases": [ "nauseated_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F92E}", "description": "face vomiting", "category": "Smileys & Emotion", "aliases": [ "vomiting_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F927}", "description": "sneezing face", "category": "Smileys & Emotion", "aliases": [ "sneezing_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F975}", "description": "hot face", "category": "Smileys & Emotion", "aliases": [ "hot_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F976}", "description": "cold face", "category": "Smileys & Emotion", "aliases": [ "cold_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F974}", "description": "woozy face", "category": "Smileys & Emotion", "aliases": [ "woozy_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F635}", "description": "dizzy face", "category": "Smileys & Emotion", "aliases": [ "dizzy_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F92F}", "description": "exploding head", "category": "Smileys & Emotion", "aliases": [ "exploding_head" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F920}", "description": "cowboy hat face", "category": "Smileys & Emotion", "aliases": [ "cowboy_hat_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F973}", "description": "partying face", "category": "Smileys & Emotion", "aliases": [ "partying_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F60E}", "description": "smiling face with sunglasses", "category": "Smileys & Emotion", "aliases": [ "sunglasses" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F913}", "description": "nerd face", "category": "Smileys & Emotion", "aliases": [ "nerd_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D0}", "description": "face with monocle", "category": "Smileys & Emotion", "aliases": [ "monocle_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F615}", "description": "confused face", "category": "Smileys & Emotion", "aliases": [ "confused" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F61F}", "description": "worried face", "category": "Smileys & Emotion", "aliases": [ "worried" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F641}", "description": "slightly frowning face", "category": "Smileys & Emotion", "aliases": [ "slightly_frowning_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F62E}", "description": "face with open mouth", "category": "Smileys & Emotion", "aliases": [ "open_mouth" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F62F}", "description": "hushed face", "category": "Smileys & Emotion", "aliases": [ "hushed" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F632}", "description": "astonished face", "category": "Smileys & Emotion", "aliases": [ "astonished" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F633}", "description": "flushed face", "category": "Smileys & Emotion", "aliases": [ "flushed" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F97A}", "description": "pleading face", "category": "Smileys & Emotion", "aliases": [ "pleading_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F626}", "description": "frowning face with open mouth", "category": "Smileys & Emotion", "aliases": [ "frowning" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F627}", "description": "anguished face", "category": "Smileys & Emotion", "aliases": [ "anguished" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F628}", "description": "fearful face", "category": "Smileys & Emotion", "aliases": [ "fearful" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F630}", "description": "anxious face with sweat", "category": "Smileys & Emotion", "aliases": [ "cold_sweat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F625}", "description": "sad but relieved face", "category": "Smileys & Emotion", "aliases": [ "disappointed_relieved" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F622}", "description": "crying face", "category": "Smileys & Emotion", "aliases": [ "cry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F62D}", "description": "loudly crying face", "category": "Smileys & Emotion", "aliases": [ "sob" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F631}", "description": "face screaming in fear", "category": "Smileys & Emotion", "aliases": [ "scream" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F616}", "description": "confounded face", "category": "Smileys & Emotion", "aliases": [ "confounded" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F623}", "description": "persevering face", "category": "Smileys & Emotion", "aliases": [ "persevere" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F61E}", "description": "disappointed face", "category": "Smileys & Emotion", "aliases": [ "disappointed" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F613}", "description": "downcast face with sweat", "category": "Smileys & Emotion", "aliases": [ "sweat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F629}", "description": "weary face", "category": "Smileys & Emotion", "aliases": [ "weary" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F62B}", "description": "tired face", "category": "Smileys & Emotion", "aliases": [ "tired_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F971}", "description": "yawning face", "category": "Smileys & Emotion", "aliases": [ "yawning_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F624}", "description": "face with steam from nose", "category": "Smileys & Emotion", "aliases": [ "triumph" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F621}", "description": "pouting face", "category": "Smileys & Emotion", "aliases": [ "rage", "pout" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F620}", "description": "angry face", "category": "Smileys & Emotion", "aliases": [ "angry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F92C}", "description": "face with symbols on mouth", "category": "Smileys & Emotion", "aliases": [ "cursing_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F608}", "description": "smiling face with horns", "category": "Smileys & Emotion", "aliases": [ "smiling_imp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F47F}", "description": "angry face with horns", "category": "Smileys & Emotion", "aliases": [ "imp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F480}", "description": "skull", "category": "Smileys & Emotion", "aliases": [ "skull" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2620\uFE0F", "description": "skull and crossbones", "category": "Smileys & Emotion", "aliases": [ "skull_and_crossbones" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A9}", "description": "pile of poo", "category": "Smileys & Emotion", "aliases": [ "hankey", "poop", "shit" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F921}", "description": "clown face", "category": "Smileys & Emotion", "aliases": [ "clown_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F479}", "description": "ogre", "category": "Smileys & Emotion", "aliases": [ "japanese_ogre" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F47A}", "description": "goblin", "category": "Smileys & Emotion", "aliases": [ "japanese_goblin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F47B}", "description": "ghost", "category": "Smileys & Emotion", "aliases": [ "ghost" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F47D}", "description": "alien", "category": "Smileys & Emotion", "aliases": [ "alien" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F47E}", "description": "alien monster", "category": "Smileys & Emotion", "aliases": [ "space_invader" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F916}", "description": "robot", "category": "Smileys & Emotion", "aliases": [ "robot" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F63A}", "description": "grinning cat", "category": "Smileys & Emotion", "aliases": [ "smiley_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F638}", "description": "grinning cat with smiling eyes", "category": "Smileys & Emotion", "aliases": [ "smile_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F639}", "description": "cat with tears of joy", "category": "Smileys & Emotion", "aliases": [ "joy_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F63B}", "description": "smiling cat with heart-eyes", "category": "Smileys & Emotion", "aliases": [ "heart_eyes_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F63C}", "description": "cat with wry smile", "category": "Smileys & Emotion", "aliases": [ "smirk_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F63D}", "description": "kissing cat", "category": "Smileys & Emotion", "aliases": [ "kissing_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F640}", "description": "weary cat", "category": "Smileys & Emotion", "aliases": [ "scream_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F63F}", "description": "crying cat", "category": "Smileys & Emotion", "aliases": [ "crying_cat_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F63E}", "description": "pouting cat", "category": "Smileys & Emotion", "aliases": [ "pouting_cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F648}", "description": "see-no-evil monkey", "category": "Smileys & Emotion", "aliases": [ "see_no_evil" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F649}", "description": "hear-no-evil monkey", "category": "Smileys & Emotion", "aliases": [ "hear_no_evil" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64A}", "description": "speak-no-evil monkey", "category": "Smileys & Emotion", "aliases": [ "speak_no_evil" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F48B}", "description": "kiss mark", "category": "Smileys & Emotion", "aliases": [ "kiss" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F48C}", "description": "love letter", "category": "Smileys & Emotion", "aliases": [ "love_letter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F498}", "description": "heart with arrow", "category": "Smileys & Emotion", "aliases": [ "cupid" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F49D}", "description": "heart with ribbon", "category": "Smileys & Emotion", "aliases": [ "gift_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F496}", "description": "sparkling heart", "category": "Smileys & Emotion", "aliases": [ "sparkling_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F497}", "description": "growing heart", "category": "Smileys & Emotion", "aliases": [ "heartpulse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F493}", "description": "beating heart", "category": "Smileys & Emotion", "aliases": [ "heartbeat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F49E}", "description": "revolving hearts", "category": "Smileys & Emotion", "aliases": [ "revolving_hearts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F495}", "description": "two hearts", "category": "Smileys & Emotion", "aliases": [ "two_hearts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F49F}", "description": "heart decoration", "category": "Smileys & Emotion", "aliases": [ "heart_decoration" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2763\uFE0F", "description": "heart exclamation", "category": "Smileys & Emotion", "aliases": [ "heavy_heart_exclamation" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F494}", "description": "broken heart", "category": "Smileys & Emotion", "aliases": [ "broken_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2764\uFE0F", "description": "red heart", "category": "Smileys & Emotion", "aliases": [ "heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E1}", "description": "orange heart", "category": "Smileys & Emotion", "aliases": [ "orange_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F49B}", "description": "yellow heart", "category": "Smileys & Emotion", "aliases": [ "yellow_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F49A}", "description": "green heart", "category": "Smileys & Emotion", "aliases": [ "green_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F499}", "description": "blue heart", "category": "Smileys & Emotion", "aliases": [ "blue_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F49C}", "description": "purple heart", "category": "Smileys & Emotion", "aliases": [ "purple_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F90E}", "description": "brown heart", "category": "Smileys & Emotion", "aliases": [ "brown_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5A4}", "description": "black heart", "category": "Smileys & Emotion", "aliases": [ "black_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F90D}", "description": "white heart", "category": "Smileys & Emotion", "aliases": [ "white_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4AF}", "description": "hundred points", "category": "Smileys & Emotion", "aliases": [ "100" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A2}", "description": "anger symbol", "category": "Smileys & Emotion", "aliases": [ "anger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A5}", "description": "collision", "category": "Smileys & Emotion", "aliases": [ "boom", "collision" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4AB}", "description": "dizzy", "category": "Smileys & Emotion", "aliases": [ "dizzy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A6}", "description": "sweat droplets", "category": "Smileys & Emotion", "aliases": [ "sweat_drops" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A8}", "description": "dashing away", "category": "Smileys & Emotion", "aliases": [ "dash" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F573}\uFE0F", "description": "hole", "category": "Smileys & Emotion", "aliases": [ "hole" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A3}", "description": "bomb", "category": "Smileys & Emotion", "aliases": [ "bomb" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4AC}", "description": "speech balloon", "category": "Smileys & Emotion", "aliases": [ "speech_balloon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F", "description": "eye in speech bubble", "category": "Smileys & Emotion", "aliases": [ "eye_speech_bubble" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5E8}\uFE0F", "description": "left speech bubble", "category": "Smileys & Emotion", "aliases": [ "left_speech_bubble" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5EF}\uFE0F", "description": "right anger bubble", "category": "Smileys & Emotion", "aliases": [ "right_anger_bubble" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4AD}", "description": "thought balloon", "category": "Smileys & Emotion", "aliases": [ "thought_balloon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A4}", "description": "zzz", "category": "Smileys & Emotion", "aliases": [ "zzz" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F44B}", "description": "waving hand", "category": "People & Body", "aliases": [ "wave" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F91A}", "description": "raised back of hand", "category": "People & Body", "aliases": [ "raised_back_of_hand" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F590}\uFE0F", "description": "hand with fingers splayed", "category": "People & Body", "aliases": [ "raised_hand_with_fingers_splayed" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u270B", "description": "raised hand", "category": "People & Body", "aliases": [ "hand", "raised_hand" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F596}", "description": "vulcan salute", "category": "People & Body", "aliases": [ "vulcan_salute" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F44C}", "description": "OK hand", "category": "People & Body", "aliases": [ "ok_hand" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F90F}", "description": "pinching hand", "category": "People & Body", "aliases": [ "pinching_hand" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u270C\uFE0F", "description": "victory hand", "category": "People & Body", "aliases": [ "v" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F91E}", "description": "crossed fingers", "category": "People & Body", "aliases": [ "crossed_fingers" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F91F}", "description": "love-you gesture", "category": "People & Body", "aliases": [ "love_you_gesture" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F918}", "description": "sign of the horns", "category": "People & Body", "aliases": [ "metal" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F919}", "description": "call me hand", "category": "People & Body", "aliases": [ "call_me_hand" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F448}", "description": "backhand index pointing left", "category": "People & Body", "aliases": [ "point_left" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F449}", "description": "backhand index pointing right", "category": "People & Body", "aliases": [ "point_right" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F446}", "description": "backhand index pointing up", "category": "People & Body", "aliases": [ "point_up_2" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F595}", "description": "middle finger", "category": "People & Body", "aliases": [ "middle_finger", "fu" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F447}", "description": "backhand index pointing down", "category": "People & Body", "aliases": [ "point_down" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u261D\uFE0F", "description": "index pointing up", "category": "People & Body", "aliases": [ "point_up" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F44D}", "description": "thumbs up", "category": "People & Body", "aliases": [ "+1", "thumbsup" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F44E}", "description": "thumbs down", "category": "People & Body", "aliases": [ "-1", "thumbsdown" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u270A", "description": "raised fist", "category": "People & Body", "aliases": [ "fist_raised", "fist" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F44A}", "description": "oncoming fist", "category": "People & Body", "aliases": [ "fist_oncoming", "facepunch", "punch" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F91B}", "description": "left-facing fist", "category": "People & Body", "aliases": [ "fist_left" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F91C}", "description": "right-facing fist", "category": "People & Body", "aliases": [ "fist_right" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F44F}", "description": "clapping hands", "category": "People & Body", "aliases": [ "clap" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64C}", "description": "raising hands", "category": "People & Body", "aliases": [ "raised_hands" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F450}", "description": "open hands", "category": "People & Body", "aliases": [ "open_hands" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F932}", "description": "palms up together", "category": "People & Body", "aliases": [ "palms_up_together" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F91D}", "description": "handshake", "category": "People & Body", "aliases": [ "handshake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64F}", "description": "folded hands", "category": "People & Body", "aliases": [ "pray" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u270D\uFE0F", "description": "writing hand", "category": "People & Body", "aliases": [ "writing_hand" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F485}", "description": "nail polish", "category": "People & Body", "aliases": [ "nail_care" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F933}", "description": "selfie", "category": "People & Body", "aliases": [ "selfie" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4AA}", "description": "flexed biceps", "category": "People & Body", "aliases": [ "muscle" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9BE}", "description": "mechanical arm", "category": "People & Body", "aliases": [ "mechanical_arm" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9BF}", "description": "mechanical leg", "category": "People & Body", "aliases": [ "mechanical_leg" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B5}", "description": "leg", "category": "People & Body", "aliases": [ "leg" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B6}", "description": "foot", "category": "People & Body", "aliases": [ "foot" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F442}", "description": "ear", "category": "People & Body", "aliases": [ "ear" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9BB}", "description": "ear with hearing aid", "category": "People & Body", "aliases": [ "ear_with_hearing_aid" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F443}", "description": "nose", "category": "People & Body", "aliases": [ "nose" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E0}", "description": "brain", "category": "People & Body", "aliases": [ "brain" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B7}", "description": "tooth", "category": "People & Body", "aliases": [ "tooth" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B4}", "description": "bone", "category": "People & Body", "aliases": [ "bone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F440}", "description": "eyes", "category": "People & Body", "aliases": [ "eyes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F441}\uFE0F", "description": "eye", "category": "People & Body", "aliases": [ "eye" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F445}", "description": "tongue", "category": "People & Body", "aliases": [ "tongue" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F444}", "description": "mouth", "category": "People & Body", "aliases": [ "lips" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F476}", "description": "baby", "category": "People & Body", "aliases": [ "baby" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D2}", "description": "child", "category": "People & Body", "aliases": [ "child" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F466}", "description": "boy", "category": "People & Body", "aliases": [ "boy" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F467}", "description": "girl", "category": "People & Body", "aliases": [ "girl" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}", "description": "person", "category": "People & Body", "aliases": [ "adult" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F471}", "description": "person: blond hair", "category": "People & Body", "aliases": [ "blond_haired_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}", "description": "man", "category": "People & Body", "aliases": [ "man" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D4}", "description": "man: beard", "category": "People & Body", "aliases": [ "bearded_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9B0}", "description": "man: red hair", "category": "People & Body", "aliases": [ "red_haired_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9B1}", "description": "man: curly hair", "category": "People & Body", "aliases": [ "curly_haired_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9B3}", "description": "man: white hair", "category": "People & Body", "aliases": [ "white_haired_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9B2}", "description": "man: bald", "category": "People & Body", "aliases": [ "bald_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}", "description": "woman", "category": "People & Body", "aliases": [ "woman" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9B0}", "description": "woman: red hair", "category": "People & Body", "aliases": [ "red_haired_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9B0}", "description": "person: red hair", "category": "People & Body", "aliases": [ "person_red_hair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9B1}", "description": "woman: curly hair", "category": "People & Body", "aliases": [ "curly_haired_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9B1}", "description": "person: curly hair", "category": "People & Body", "aliases": [ "person_curly_hair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9B3}", "description": "woman: white hair", "category": "People & Body", "aliases": [ "white_haired_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9B3}", "description": "person: white hair", "category": "People & Body", "aliases": [ "person_white_hair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9B2}", "description": "woman: bald", "category": "People & Body", "aliases": [ "bald_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9B2}", "description": "person: bald", "category": "People & Body", "aliases": [ "person_bald" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F471}\u200D\u2640\uFE0F", "description": "woman: blond hair", "category": "People & Body", "aliases": [ "blond_haired_woman", "blonde_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F471}\u200D\u2642\uFE0F", "description": "man: blond hair", "category": "People & Body", "aliases": [ "blond_haired_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D3}", "description": "older person", "category": "People & Body", "aliases": [ "older_adult" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F474}", "description": "old man", "category": "People & Body", "aliases": [ "older_man" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F475}", "description": "old woman", "category": "People & Body", "aliases": [ "older_woman" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64D}", "description": "person frowning", "category": "People & Body", "aliases": [ "frowning_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64D}\u200D\u2642\uFE0F", "description": "man frowning", "category": "People & Body", "aliases": [ "frowning_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64D}\u200D\u2640\uFE0F", "description": "woman frowning", "category": "People & Body", "aliases": [ "frowning_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64E}", "description": "person pouting", "category": "People & Body", "aliases": [ "pouting_face" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64E}\u200D\u2642\uFE0F", "description": "man pouting", "category": "People & Body", "aliases": [ "pouting_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64E}\u200D\u2640\uFE0F", "description": "woman pouting", "category": "People & Body", "aliases": [ "pouting_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F645}", "description": "person gesturing NO", "category": "People & Body", "aliases": [ "no_good" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F645}\u200D\u2642\uFE0F", "description": "man gesturing NO", "category": "People & Body", "aliases": [ "no_good_man", "ng_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F645}\u200D\u2640\uFE0F", "description": "woman gesturing NO", "category": "People & Body", "aliases": [ "no_good_woman", "ng_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F646}", "description": "person gesturing OK", "category": "People & Body", "aliases": [ "ok_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F646}\u200D\u2642\uFE0F", "description": "man gesturing OK", "category": "People & Body", "aliases": [ "ok_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F646}\u200D\u2640\uFE0F", "description": "woman gesturing OK", "category": "People & Body", "aliases": [ "ok_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F481}", "description": "person tipping hand", "category": "People & Body", "aliases": [ "tipping_hand_person", "information_desk_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F481}\u200D\u2642\uFE0F", "description": "man tipping hand", "category": "People & Body", "aliases": [ "tipping_hand_man", "sassy_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F481}\u200D\u2640\uFE0F", "description": "woman tipping hand", "category": "People & Body", "aliases": [ "tipping_hand_woman", "sassy_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64B}", "description": "person raising hand", "category": "People & Body", "aliases": [ "raising_hand" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64B}\u200D\u2642\uFE0F", "description": "man raising hand", "category": "People & Body", "aliases": [ "raising_hand_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F64B}\u200D\u2640\uFE0F", "description": "woman raising hand", "category": "People & Body", "aliases": [ "raising_hand_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CF}", "description": "deaf person", "category": "People & Body", "aliases": [ "deaf_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CF}\u200D\u2642\uFE0F", "description": "deaf man", "category": "People & Body", "aliases": [ "deaf_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CF}\u200D\u2640\uFE0F", "description": "deaf woman", "category": "People & Body", "aliases": [ "deaf_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F647}", "description": "person bowing", "category": "People & Body", "aliases": [ "bow" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F647}\u200D\u2642\uFE0F", "description": "man bowing", "category": "People & Body", "aliases": [ "bowing_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F647}\u200D\u2640\uFE0F", "description": "woman bowing", "category": "People & Body", "aliases": [ "bowing_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F926}", "description": "person facepalming", "category": "People & Body", "aliases": [ "facepalm" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F926}\u200D\u2642\uFE0F", "description": "man facepalming", "category": "People & Body", "aliases": [ "man_facepalming" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F926}\u200D\u2640\uFE0F", "description": "woman facepalming", "category": "People & Body", "aliases": [ "woman_facepalming" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F937}", "description": "person shrugging", "category": "People & Body", "aliases": [ "shrug" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F937}\u200D\u2642\uFE0F", "description": "man shrugging", "category": "People & Body", "aliases": [ "man_shrugging" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F937}\u200D\u2640\uFE0F", "description": "woman shrugging", "category": "People & Body", "aliases": [ "woman_shrugging" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u2695\uFE0F", "description": "health worker", "category": "People & Body", "aliases": [ "health_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u2695\uFE0F", "description": "man health worker", "category": "People & Body", "aliases": [ "man_health_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2695\uFE0F", "description": "woman health worker", "category": "People & Body", "aliases": [ "woman_health_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F393}", "description": "student", "category": "People & Body", "aliases": [ "student" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F393}", "description": "man student", "category": "People & Body", "aliases": [ "man_student" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F393}", "description": "woman student", "category": "People & Body", "aliases": [ "woman_student" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F3EB}", "description": "teacher", "category": "People & Body", "aliases": [ "teacher" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F3EB}", "description": "man teacher", "category": "People & Body", "aliases": [ "man_teacher" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F3EB}", "description": "woman teacher", "category": "People & Body", "aliases": [ "woman_teacher" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u2696\uFE0F", "description": "judge", "category": "People & Body", "aliases": [ "judge" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u2696\uFE0F", "description": "man judge", "category": "People & Body", "aliases": [ "man_judge" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2696\uFE0F", "description": "woman judge", "category": "People & Body", "aliases": [ "woman_judge" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F33E}", "description": "farmer", "category": "People & Body", "aliases": [ "farmer" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F33E}", "description": "man farmer", "category": "People & Body", "aliases": [ "man_farmer" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F33E}", "description": "woman farmer", "category": "People & Body", "aliases": [ "woman_farmer" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F373}", "description": "cook", "category": "People & Body", "aliases": [ "cook" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F373}", "description": "man cook", "category": "People & Body", "aliases": [ "man_cook" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F373}", "description": "woman cook", "category": "People & Body", "aliases": [ "woman_cook" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F527}", "description": "mechanic", "category": "People & Body", "aliases": [ "mechanic" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F527}", "description": "man mechanic", "category": "People & Body", "aliases": [ "man_mechanic" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F527}", "description": "woman mechanic", "category": "People & Body", "aliases": [ "woman_mechanic" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F3ED}", "description": "factory worker", "category": "People & Body", "aliases": [ "factory_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F3ED}", "description": "man factory worker", "category": "People & Body", "aliases": [ "man_factory_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F3ED}", "description": "woman factory worker", "category": "People & Body", "aliases": [ "woman_factory_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F4BC}", "description": "office worker", "category": "People & Body", "aliases": [ "office_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F4BC}", "description": "man office worker", "category": "People & Body", "aliases": [ "man_office_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F4BC}", "description": "woman office worker", "category": "People & Body", "aliases": [ "woman_office_worker" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F52C}", "description": "scientist", "category": "People & Body", "aliases": [ "scientist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F52C}", "description": "man scientist", "category": "People & Body", "aliases": [ "man_scientist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F52C}", "description": "woman scientist", "category": "People & Body", "aliases": [ "woman_scientist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F4BB}", "description": "technologist", "category": "People & Body", "aliases": [ "technologist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F4BB}", "description": "man technologist", "category": "People & Body", "aliases": [ "man_technologist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F4BB}", "description": "woman technologist", "category": "People & Body", "aliases": [ "woman_technologist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F3A4}", "description": "singer", "category": "People & Body", "aliases": [ "singer" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F3A4}", "description": "man singer", "category": "People & Body", "aliases": [ "man_singer" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F3A4}", "description": "woman singer", "category": "People & Body", "aliases": [ "woman_singer" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F3A8}", "description": "artist", "category": "People & Body", "aliases": [ "artist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F3A8}", "description": "man artist", "category": "People & Body", "aliases": [ "man_artist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F3A8}", "description": "woman artist", "category": "People & Body", "aliases": [ "woman_artist" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u2708\uFE0F", "description": "pilot", "category": "People & Body", "aliases": [ "pilot" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u2708\uFE0F", "description": "man pilot", "category": "People & Body", "aliases": [ "man_pilot" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2708\uFE0F", "description": "woman pilot", "category": "People & Body", "aliases": [ "woman_pilot" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F680}", "description": "astronaut", "category": "People & Body", "aliases": [ "astronaut" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F680}", "description": "man astronaut", "category": "People & Body", "aliases": [ "man_astronaut" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F680}", "description": "woman astronaut", "category": "People & Body", "aliases": [ "woman_astronaut" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F692}", "description": "firefighter", "category": "People & Body", "aliases": [ "firefighter" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F692}", "description": "man firefighter", "category": "People & Body", "aliases": [ "man_firefighter" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F692}", "description": "woman firefighter", "category": "People & Body", "aliases": [ "woman_firefighter" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46E}", "description": "police officer", "category": "People & Body", "aliases": [ "police_officer", "cop" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46E}\u200D\u2642\uFE0F", "description": "man police officer", "category": "People & Body", "aliases": [ "policeman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46E}\u200D\u2640\uFE0F", "description": "woman police officer", "category": "People & Body", "aliases": [ "policewoman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F575}\uFE0F", "description": "detective", "category": "People & Body", "aliases": [ "detective" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F575}\uFE0F\u200D\u2642\uFE0F", "description": "man detective", "category": "People & Body", "aliases": [ "male_detective" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F575}\uFE0F\u200D\u2640\uFE0F", "description": "woman detective", "category": "People & Body", "aliases": [ "female_detective" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F482}", "description": "guard", "category": "People & Body", "aliases": [ "guard" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F482}\u200D\u2642\uFE0F", "description": "man guard", "category": "People & Body", "aliases": [ "guardsman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F482}\u200D\u2640\uFE0F", "description": "woman guard", "category": "People & Body", "aliases": [ "guardswoman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F477}", "description": "construction worker", "category": "People & Body", "aliases": [ "construction_worker" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F477}\u200D\u2642\uFE0F", "description": "man construction worker", "category": "People & Body", "aliases": [ "construction_worker_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F477}\u200D\u2640\uFE0F", "description": "woman construction worker", "category": "People & Body", "aliases": [ "construction_worker_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F934}", "description": "prince", "category": "People & Body", "aliases": [ "prince" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F478}", "description": "princess", "category": "People & Body", "aliases": [ "princess" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F473}", "description": "person wearing turban", "category": "People & Body", "aliases": [ "person_with_turban" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F473}\u200D\u2642\uFE0F", "description": "man wearing turban", "category": "People & Body", "aliases": [ "man_with_turban" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F473}\u200D\u2640\uFE0F", "description": "woman wearing turban", "category": "People & Body", "aliases": [ "woman_with_turban" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F472}", "description": "person with skullcap", "category": "People & Body", "aliases": [ "man_with_gua_pi_mao" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D5}", "description": "woman with headscarf", "category": "People & Body", "aliases": [ "woman_with_headscarf" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F935}", "description": "person in tuxedo", "category": "People & Body", "aliases": [ "person_in_tuxedo" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F470}", "description": "person with veil", "category": "People & Body", "aliases": [ "person_with_veil" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F930}", "description": "pregnant woman", "category": "People & Body", "aliases": [ "pregnant_woman" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F931}", "description": "breast-feeding", "category": "People & Body", "aliases": [ "breast_feeding" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F47C}", "description": "baby angel", "category": "People & Body", "aliases": [ "angel" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F385}", "description": "Santa Claus", "category": "People & Body", "aliases": [ "santa" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F936}", "description": "Mrs. Claus", "category": "People & Body", "aliases": [ "mrs_claus" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F384}", "description": "mx claus", "category": "People & Body", "aliases": [ "mx_claus" ], "supportsSkinTone": false, "hasMarkdownRepresentation": false }, { "emojiRaw": "\u{1F9B8}", "description": "superhero", "category": "People & Body", "aliases": [ "superhero" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B8}\u200D\u2642\uFE0F", "description": "man superhero", "category": "People & Body", "aliases": [ "superhero_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B8}\u200D\u2640\uFE0F", "description": "woman superhero", "category": "People & Body", "aliases": [ "superhero_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B9}", "description": "supervillain", "category": "People & Body", "aliases": [ "supervillain" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B9}\u200D\u2642\uFE0F", "description": "man supervillain", "category": "People & Body", "aliases": [ "supervillain_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9B9}\u200D\u2640\uFE0F", "description": "woman supervillain", "category": "People & Body", "aliases": [ "supervillain_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D9}", "description": "mage", "category": "People & Body", "aliases": [ "mage" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D9}\u200D\u2642\uFE0F", "description": "man mage", "category": "People & Body", "aliases": [ "mage_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D9}\u200D\u2640\uFE0F", "description": "woman mage", "category": "People & Body", "aliases": [ "mage_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DA}", "description": "fairy", "category": "People & Body", "aliases": [ "fairy" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DA}\u200D\u2642\uFE0F", "description": "man fairy", "category": "People & Body", "aliases": [ "fairy_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DA}\u200D\u2640\uFE0F", "description": "woman fairy", "category": "People & Body", "aliases": [ "fairy_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DB}", "description": "vampire", "category": "People & Body", "aliases": [ "vampire" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DB}\u200D\u2642\uFE0F", "description": "man vampire", "category": "People & Body", "aliases": [ "vampire_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DB}\u200D\u2640\uFE0F", "description": "woman vampire", "category": "People & Body", "aliases": [ "vampire_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DC}", "description": "merperson", "category": "People & Body", "aliases": [ "merperson" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DC}\u200D\u2642\uFE0F", "description": "merman", "category": "People & Body", "aliases": [ "merman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DC}\u200D\u2640\uFE0F", "description": "mermaid", "category": "People & Body", "aliases": [ "mermaid" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DD}", "description": "elf", "category": "People & Body", "aliases": [ "elf" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DD}\u200D\u2642\uFE0F", "description": "man elf", "category": "People & Body", "aliases": [ "elf_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DD}\u200D\u2640\uFE0F", "description": "woman elf", "category": "People & Body", "aliases": [ "elf_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DE}", "description": "genie", "category": "People & Body", "aliases": [ "genie" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DE}\u200D\u2642\uFE0F", "description": "man genie", "category": "People & Body", "aliases": [ "genie_man" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DE}\u200D\u2640\uFE0F", "description": "woman genie", "category": "People & Body", "aliases": [ "genie_woman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DF}", "description": "zombie", "category": "People & Body", "aliases": [ "zombie" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DF}\u200D\u2642\uFE0F", "description": "man zombie", "category": "People & Body", "aliases": [ "zombie_man" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9DF}\u200D\u2640\uFE0F", "description": "woman zombie", "category": "People & Body", "aliases": [ "zombie_woman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F486}", "description": "person getting massage", "category": "People & Body", "aliases": [ "massage" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F486}\u200D\u2642\uFE0F", "description": "man getting massage", "category": "People & Body", "aliases": [ "massage_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F486}\u200D\u2640\uFE0F", "description": "woman getting massage", "category": "People & Body", "aliases": [ "massage_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F487}", "description": "person getting haircut", "category": "People & Body", "aliases": [ "haircut" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F487}\u200D\u2642\uFE0F", "description": "man getting haircut", "category": "People & Body", "aliases": [ "haircut_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F487}\u200D\u2640\uFE0F", "description": "woman getting haircut", "category": "People & Body", "aliases": [ "haircut_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B6}", "description": "person walking", "category": "People & Body", "aliases": [ "walking" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B6}\u200D\u2642\uFE0F", "description": "man walking", "category": "People & Body", "aliases": [ "walking_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B6}\u200D\u2640\uFE0F", "description": "woman walking", "category": "People & Body", "aliases": [ "walking_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CD}", "description": "person standing", "category": "People & Body", "aliases": [ "standing_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CD}\u200D\u2642\uFE0F", "description": "man standing", "category": "People & Body", "aliases": [ "standing_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CD}\u200D\u2640\uFE0F", "description": "woman standing", "category": "People & Body", "aliases": [ "standing_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CE}", "description": "person kneeling", "category": "People & Body", "aliases": [ "kneeling_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CE}\u200D\u2642\uFE0F", "description": "man kneeling", "category": "People & Body", "aliases": [ "kneeling_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CE}\u200D\u2640\uFE0F", "description": "woman kneeling", "category": "People & Body", "aliases": [ "kneeling_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9AF}", "description": "person with white cane", "category": "People & Body", "aliases": [ "person_with_probing_cane" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9AF}", "description": "man with white cane", "category": "People & Body", "aliases": [ "man_with_probing_cane" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9AF}", "description": "woman with white cane", "category": "People & Body", "aliases": [ "woman_with_probing_cane" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9BC}", "description": "person in motorized wheelchair", "category": "People & Body", "aliases": [ "person_in_motorized_wheelchair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9BC}", "description": "man in motorized wheelchair", "category": "People & Body", "aliases": [ "man_in_motorized_wheelchair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9BC}", "description": "woman in motorized wheelchair", "category": "People & Body", "aliases": [ "woman_in_motorized_wheelchair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F9BD}", "description": "person in manual wheelchair", "category": "People & Body", "aliases": [ "person_in_manual_wheelchair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F9BD}", "description": "man in manual wheelchair", "category": "People & Body", "aliases": [ "man_in_manual_wheelchair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F9BD}", "description": "woman in manual wheelchair", "category": "People & Body", "aliases": [ "woman_in_manual_wheelchair" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C3}", "description": "person running", "category": "People & Body", "aliases": [ "runner", "running" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C3}\u200D\u2642\uFE0F", "description": "man running", "category": "People & Body", "aliases": [ "running_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C3}\u200D\u2640\uFE0F", "description": "woman running", "category": "People & Body", "aliases": [ "running_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F483}", "description": "woman dancing", "category": "People & Body", "aliases": [ "woman_dancing", "dancer" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F57A}", "description": "man dancing", "category": "People & Body", "aliases": [ "man_dancing" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F574}\uFE0F", "description": "person in suit levitating", "category": "People & Body", "aliases": [ "business_suit_levitating" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46F}", "description": "people with bunny ears", "category": "People & Body", "aliases": [ "dancers" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46F}\u200D\u2642\uFE0F", "description": "men with bunny ears", "category": "People & Body", "aliases": [ "dancing_men" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46F}\u200D\u2640\uFE0F", "description": "women with bunny ears", "category": "People & Body", "aliases": [ "dancing_women" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D6}", "description": "person in steamy room", "category": "People & Body", "aliases": [ "sauna_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D6}\u200D\u2642\uFE0F", "description": "man in steamy room", "category": "People & Body", "aliases": [ "sauna_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D6}\u200D\u2640\uFE0F", "description": "woman in steamy room", "category": "People & Body", "aliases": [ "sauna_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D7}", "description": "person climbing", "category": "People & Body", "aliases": [ "climbing" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D7}\u200D\u2642\uFE0F", "description": "man climbing", "category": "People & Body", "aliases": [ "climbing_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D7}\u200D\u2640\uFE0F", "description": "woman climbing", "category": "People & Body", "aliases": [ "climbing_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93A}", "description": "person fencing", "category": "People & Body", "aliases": [ "person_fencing" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C7}", "description": "horse racing", "category": "People & Body", "aliases": [ "horse_racing" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F7\uFE0F", "description": "skier", "category": "People & Body", "aliases": [ "skier" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C2}", "description": "snowboarder", "category": "People & Body", "aliases": [ "snowboarder" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CC}\uFE0F", "description": "person golfing", "category": "People & Body", "aliases": [ "golfing" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CC}\uFE0F\u200D\u2642\uFE0F", "description": "man golfing", "category": "People & Body", "aliases": [ "golfing_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CC}\uFE0F\u200D\u2640\uFE0F", "description": "woman golfing", "category": "People & Body", "aliases": [ "golfing_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C4}", "description": "person surfing", "category": "People & Body", "aliases": [ "surfer" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C4}\u200D\u2642\uFE0F", "description": "man surfing", "category": "People & Body", "aliases": [ "surfing_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C4}\u200D\u2640\uFE0F", "description": "woman surfing", "category": "People & Body", "aliases": [ "surfing_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A3}", "description": "person rowing boat", "category": "People & Body", "aliases": [ "rowboat" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A3}\u200D\u2642\uFE0F", "description": "man rowing boat", "category": "People & Body", "aliases": [ "rowing_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A3}\u200D\u2640\uFE0F", "description": "woman rowing boat", "category": "People & Body", "aliases": [ "rowing_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CA}", "description": "person swimming", "category": "People & Body", "aliases": [ "swimmer" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CA}\u200D\u2642\uFE0F", "description": "man swimming", "category": "People & Body", "aliases": [ "swimming_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CA}\u200D\u2640\uFE0F", "description": "woman swimming", "category": "People & Body", "aliases": [ "swimming_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F9\uFE0F", "description": "person bouncing ball", "category": "People & Body", "aliases": [ "bouncing_ball_person" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F9\uFE0F\u200D\u2642\uFE0F", "description": "man bouncing ball", "category": "People & Body", "aliases": [ "bouncing_ball_man", "basketball_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F9\uFE0F\u200D\u2640\uFE0F", "description": "woman bouncing ball", "category": "People & Body", "aliases": [ "bouncing_ball_woman", "basketball_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CB}\uFE0F", "description": "person lifting weights", "category": "People & Body", "aliases": [ "weight_lifting" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CB}\uFE0F\u200D\u2642\uFE0F", "description": "man lifting weights", "category": "People & Body", "aliases": [ "weight_lifting_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CB}\uFE0F\u200D\u2640\uFE0F", "description": "woman lifting weights", "category": "People & Body", "aliases": [ "weight_lifting_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B4}", "description": "person biking", "category": "People & Body", "aliases": [ "bicyclist" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B4}\u200D\u2642\uFE0F", "description": "man biking", "category": "People & Body", "aliases": [ "biking_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B4}\u200D\u2640\uFE0F", "description": "woman biking", "category": "People & Body", "aliases": [ "biking_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B5}", "description": "person mountain biking", "category": "People & Body", "aliases": [ "mountain_bicyclist" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B5}\u200D\u2642\uFE0F", "description": "man mountain biking", "category": "People & Body", "aliases": [ "mountain_biking_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B5}\u200D\u2640\uFE0F", "description": "woman mountain biking", "category": "People & Body", "aliases": [ "mountain_biking_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F938}", "description": "person cartwheeling", "category": "People & Body", "aliases": [ "cartwheeling" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F938}\u200D\u2642\uFE0F", "description": "man cartwheeling", "category": "People & Body", "aliases": [ "man_cartwheeling" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F938}\u200D\u2640\uFE0F", "description": "woman cartwheeling", "category": "People & Body", "aliases": [ "woman_cartwheeling" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93C}", "description": "people wrestling", "category": "People & Body", "aliases": [ "wrestling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93C}\u200D\u2642\uFE0F", "description": "men wrestling", "category": "People & Body", "aliases": [ "men_wrestling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93C}\u200D\u2640\uFE0F", "description": "women wrestling", "category": "People & Body", "aliases": [ "women_wrestling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93D}", "description": "person playing water polo", "category": "People & Body", "aliases": [ "water_polo" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93D}\u200D\u2642\uFE0F", "description": "man playing water polo", "category": "People & Body", "aliases": [ "man_playing_water_polo" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93D}\u200D\u2640\uFE0F", "description": "woman playing water polo", "category": "People & Body", "aliases": [ "woman_playing_water_polo" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93E}", "description": "person playing handball", "category": "People & Body", "aliases": [ "handball_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93E}\u200D\u2642\uFE0F", "description": "man playing handball", "category": "People & Body", "aliases": [ "man_playing_handball" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93E}\u200D\u2640\uFE0F", "description": "woman playing handball", "category": "People & Body", "aliases": [ "woman_playing_handball" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F939}", "description": "person juggling", "category": "People & Body", "aliases": [ "juggling_person" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F939}\u200D\u2642\uFE0F", "description": "man juggling", "category": "People & Body", "aliases": [ "man_juggling" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F939}\u200D\u2640\uFE0F", "description": "woman juggling", "category": "People & Body", "aliases": [ "woman_juggling" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D8}", "description": "person in lotus position", "category": "People & Body", "aliases": [ "lotus_position" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D8}\u200D\u2642\uFE0F", "description": "man in lotus position", "category": "People & Body", "aliases": [ "lotus_position_man" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D8}\u200D\u2640\uFE0F", "description": "woman in lotus position", "category": "People & Body", "aliases": [ "lotus_position_woman" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6C0}", "description": "person taking bath", "category": "People & Body", "aliases": [ "bath" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6CC}", "description": "person in bed", "category": "People & Body", "aliases": [ "sleeping_bed" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}", "description": "people holding hands", "category": "People & Body", "aliases": [ "people_holding_hands" ], "supportsSkinTone": false, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46D}", "description": "women holding hands", "category": "People & Body", "aliases": [ "two_women_holding_hands" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46B}", "description": "woman and man holding hands", "category": "People & Body", "aliases": [ "couple" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46C}", "description": "men holding hands", "category": "People & Body", "aliases": [ "two_men_holding_hands" ], "supportsSkinTone": true, "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F48F}", "description": "kiss", "category": "People & Body", "aliases": [ "couplekiss" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}", "description": "kiss: woman, man", "category": "People & Body", "aliases": [ "couplekiss_man_woman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}", "description": "kiss: man, man", "category": "People & Body", "aliases": [ "couplekiss_man_man" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}", "description": "kiss: woman, woman", "category": "People & Body", "aliases": [ "couplekiss_woman_woman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F491}", "description": "couple with heart", "category": "People & Body", "aliases": [ "couple_with_heart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F468}", "description": "couple with heart: woman, man", "category": "People & Body", "aliases": [ "couple_with_heart_woman_man" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F468}", "description": "couple with heart: man, man", "category": "People & Body", "aliases": [ "couple_with_heart_man_man" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F469}", "description": "couple with heart: woman, woman", "category": "People & Body", "aliases": [ "couple_with_heart_woman_woman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F46A}", "description": "family", "category": "People & Body", "aliases": [ "family" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}", "description": "family: man, woman, boy", "category": "People & Body", "aliases": [ "family_man_woman_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}", "description": "family: man, woman, girl", "category": "People & Body", "aliases": [ "family_man_woman_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}", "description": "family: man, woman, girl, boy", "category": "People & Body", "aliases": [ "family_man_woman_girl_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}", "description": "family: man, woman, boy, boy", "category": "People & Body", "aliases": [ "family_man_woman_boy_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}", "description": "family: man, woman, girl, girl", "category": "People & Body", "aliases": [ "family_man_woman_girl_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F468}\u200D\u{1F466}", "description": "family: man, man, boy", "category": "People & Body", "aliases": [ "family_man_man_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}", "description": "family: man, man, girl", "category": "People & Body", "aliases": [ "family_man_man_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F466}", "description": "family: man, man, girl, boy", "category": "People & Body", "aliases": [ "family_man_man_girl_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F468}\u200D\u{1F466}\u200D\u{1F466}", "description": "family: man, man, boy, boy", "category": "People & Body", "aliases": [ "family_man_man_boy_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F467}", "description": "family: man, man, girl, girl", "category": "People & Body", "aliases": [ "family_man_man_girl_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F469}\u200D\u{1F466}", "description": "family: woman, woman, boy", "category": "People & Body", "aliases": [ "family_woman_woman_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}", "description": "family: woman, woman, girl", "category": "People & Body", "aliases": [ "family_woman_woman_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}", "description": "family: woman, woman, girl, boy", "category": "People & Body", "aliases": [ "family_woman_woman_girl_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}", "description": "family: woman, woman, boy, boy", "category": "People & Body", "aliases": [ "family_woman_woman_boy_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}", "description": "family: woman, woman, girl, girl", "category": "People & Body", "aliases": [ "family_woman_woman_girl_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F466}", "description": "family: man, boy", "category": "People & Body", "aliases": [ "family_man_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F466}\u200D\u{1F466}", "description": "family: man, boy, boy", "category": "People & Body", "aliases": [ "family_man_boy_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F467}", "description": "family: man, girl", "category": "People & Body", "aliases": [ "family_man_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F467}\u200D\u{1F466}", "description": "family: man, girl, boy", "category": "People & Body", "aliases": [ "family_man_girl_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F468}\u200D\u{1F467}\u200D\u{1F467}", "description": "family: man, girl, girl", "category": "People & Body", "aliases": [ "family_man_girl_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F466}", "description": "family: woman, boy", "category": "People & Body", "aliases": [ "family_woman_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F466}\u200D\u{1F466}", "description": "family: woman, boy, boy", "category": "People & Body", "aliases": [ "family_woman_boy_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F467}", "description": "family: woman, girl", "category": "People & Body", "aliases": [ "family_woman_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F467}\u200D\u{1F466}", "description": "family: woman, girl, boy", "category": "People & Body", "aliases": [ "family_woman_girl_boy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F469}\u200D\u{1F467}\u200D\u{1F467}", "description": "family: woman, girl, girl", "category": "People & Body", "aliases": [ "family_woman_girl_girl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5E3}\uFE0F", "description": "speaking head", "category": "People & Body", "aliases": [ "speaking_head" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F464}", "description": "bust in silhouette", "category": "People & Body", "aliases": [ "bust_in_silhouette" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F465}", "description": "busts in silhouette", "category": "People & Body", "aliases": [ "busts_in_silhouette" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F463}", "description": "footprints", "category": "People & Body", "aliases": [ "footprints" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F435}", "description": "monkey face", "category": "Animals & Nature", "aliases": [ "monkey_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F412}", "description": "monkey", "category": "Animals & Nature", "aliases": [ "monkey" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F98D}", "description": "gorilla", "category": "Animals & Nature", "aliases": [ "gorilla" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A7}", "description": "orangutan", "category": "Animals & Nature", "aliases": [ "orangutan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F436}", "description": "dog face", "category": "Animals & Nature", "aliases": [ "dog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F415}", "description": "dog", "category": "Animals & Nature", "aliases": [ "dog2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9AE}", "description": "guide dog", "category": "Animals & Nature", "aliases": [ "guide_dog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F415}\u200D\u{1F9BA}", "description": "service dog", "category": "Animals & Nature", "aliases": [ "service_dog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F429}", "description": "poodle", "category": "Animals & Nature", "aliases": [ "poodle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43A}", "description": "wolf", "category": "Animals & Nature", "aliases": [ "wolf" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F98A}", "description": "fox", "category": "Animals & Nature", "aliases": [ "fox_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F99D}", "description": "raccoon", "category": "Animals & Nature", "aliases": [ "raccoon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F431}", "description": "cat face", "category": "Animals & Nature", "aliases": [ "cat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F408}", "description": "cat", "category": "Animals & Nature", "aliases": [ "cat2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F981}", "description": "lion", "category": "Animals & Nature", "aliases": [ "lion" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F42F}", "description": "tiger face", "category": "Animals & Nature", "aliases": [ "tiger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F405}", "description": "tiger", "category": "Animals & Nature", "aliases": [ "tiger2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F406}", "description": "leopard", "category": "Animals & Nature", "aliases": [ "leopard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F434}", "description": "horse face", "category": "Animals & Nature", "aliases": [ "horse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F40E}", "description": "horse", "category": "Animals & Nature", "aliases": [ "racehorse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F984}", "description": "unicorn", "category": "Animals & Nature", "aliases": [ "unicorn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F993}", "description": "zebra", "category": "Animals & Nature", "aliases": [ "zebra" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F98C}", "description": "deer", "category": "Animals & Nature", "aliases": [ "deer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F42E}", "description": "cow face", "category": "Animals & Nature", "aliases": [ "cow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F402}", "description": "ox", "category": "Animals & Nature", "aliases": [ "ox" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F403}", "description": "water buffalo", "category": "Animals & Nature", "aliases": [ "water_buffalo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F404}", "description": "cow", "category": "Animals & Nature", "aliases": [ "cow2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F437}", "description": "pig face", "category": "Animals & Nature", "aliases": [ "pig" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F416}", "description": "pig", "category": "Animals & Nature", "aliases": [ "pig2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F417}", "description": "boar", "category": "Animals & Nature", "aliases": [ "boar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43D}", "description": "pig nose", "category": "Animals & Nature", "aliases": [ "pig_nose" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F40F}", "description": "ram", "category": "Animals & Nature", "aliases": [ "ram" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F411}", "description": "ewe", "category": "Animals & Nature", "aliases": [ "sheep" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F410}", "description": "goat", "category": "Animals & Nature", "aliases": [ "goat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F42A}", "description": "camel", "category": "Animals & Nature", "aliases": [ "dromedary_camel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F42B}", "description": "two-hump camel", "category": "Animals & Nature", "aliases": [ "camel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F999}", "description": "llama", "category": "Animals & Nature", "aliases": [ "llama" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F992}", "description": "giraffe", "category": "Animals & Nature", "aliases": [ "giraffe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F418}", "description": "elephant", "category": "Animals & Nature", "aliases": [ "elephant" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F98F}", "description": "rhinoceros", "category": "Animals & Nature", "aliases": [ "rhinoceros" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F99B}", "description": "hippopotamus", "category": "Animals & Nature", "aliases": [ "hippopotamus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F42D}", "description": "mouse face", "category": "Animals & Nature", "aliases": [ "mouse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F401}", "description": "mouse", "category": "Animals & Nature", "aliases": [ "mouse2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F400}", "description": "rat", "category": "Animals & Nature", "aliases": [ "rat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F439}", "description": "hamster", "category": "Animals & Nature", "aliases": [ "hamster" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F430}", "description": "rabbit face", "category": "Animals & Nature", "aliases": [ "rabbit" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F407}", "description": "rabbit", "category": "Animals & Nature", "aliases": [ "rabbit2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43F}\uFE0F", "description": "chipmunk", "category": "Animals & Nature", "aliases": [ "chipmunk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F994}", "description": "hedgehog", "category": "Animals & Nature", "aliases": [ "hedgehog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F987}", "description": "bat", "category": "Animals & Nature", "aliases": [ "bat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43B}", "description": "bear", "category": "Animals & Nature", "aliases": [ "bear" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43B}\u200D\u2744\uFE0F", "description": "polar bear", "category": "Animals & Nature", "aliases": [ "polar_bear" ], "hasMarkdownRepresentation": false }, { "emojiRaw": "\u{1F428}", "description": "koala", "category": "Animals & Nature", "aliases": [ "koala" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43C}", "description": "panda", "category": "Animals & Nature", "aliases": [ "panda_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A5}", "description": "sloth", "category": "Animals & Nature", "aliases": [ "sloth" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A6}", "description": "otter", "category": "Animals & Nature", "aliases": [ "otter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A8}", "description": "skunk", "category": "Animals & Nature", "aliases": [ "skunk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F998}", "description": "kangaroo", "category": "Animals & Nature", "aliases": [ "kangaroo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A1}", "description": "badger", "category": "Animals & Nature", "aliases": [ "badger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F43E}", "description": "paw prints", "category": "Animals & Nature", "aliases": [ "feet", "paw_prints" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F983}", "description": "turkey", "category": "Animals & Nature", "aliases": [ "turkey" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F414}", "description": "chicken", "category": "Animals & Nature", "aliases": [ "chicken" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F413}", "description": "rooster", "category": "Animals & Nature", "aliases": [ "rooster" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F423}", "description": "hatching chick", "category": "Animals & Nature", "aliases": [ "hatching_chick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F424}", "description": "baby chick", "category": "Animals & Nature", "aliases": [ "baby_chick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F425}", "description": "front-facing baby chick", "category": "Animals & Nature", "aliases": [ "hatched_chick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F426}", "description": "bird", "category": "Animals & Nature", "aliases": [ "bird" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F427}", "description": "penguin", "category": "Animals & Nature", "aliases": [ "penguin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F54A}\uFE0F", "description": "dove", "category": "Animals & Nature", "aliases": [ "dove" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F985}", "description": "eagle", "category": "Animals & Nature", "aliases": [ "eagle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F986}", "description": "duck", "category": "Animals & Nature", "aliases": [ "duck" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A2}", "description": "swan", "category": "Animals & Nature", "aliases": [ "swan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F989}", "description": "owl", "category": "Animals & Nature", "aliases": [ "owl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A9}", "description": "flamingo", "category": "Animals & Nature", "aliases": [ "flamingo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F99A}", "description": "peacock", "category": "Animals & Nature", "aliases": [ "peacock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F99C}", "description": "parrot", "category": "Animals & Nature", "aliases": [ "parrot" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F438}", "description": "frog", "category": "Animals & Nature", "aliases": [ "frog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F40A}", "description": "crocodile", "category": "Animals & Nature", "aliases": [ "crocodile" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F422}", "description": "turtle", "category": "Animals & Nature", "aliases": [ "turtle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F98E}", "description": "lizard", "category": "Animals & Nature", "aliases": [ "lizard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F40D}", "description": "snake", "category": "Animals & Nature", "aliases": [ "snake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F432}", "description": "dragon face", "category": "Animals & Nature", "aliases": [ "dragon_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F409}", "description": "dragon", "category": "Animals & Nature", "aliases": [ "dragon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F995}", "description": "sauropod", "category": "Animals & Nature", "aliases": [ "sauropod" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F996}", "description": "T-Rex", "category": "Animals & Nature", "aliases": [ "t-rex" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F433}", "description": "spouting whale", "category": "Animals & Nature", "aliases": [ "whale" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F40B}", "description": "whale", "category": "Animals & Nature", "aliases": [ "whale2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F42C}", "description": "dolphin", "category": "Animals & Nature", "aliases": [ "dolphin", "flipper" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F41F}", "description": "fish", "category": "Animals & Nature", "aliases": [ "fish" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F420}", "description": "tropical fish", "category": "Animals & Nature", "aliases": [ "tropical_fish" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F421}", "description": "blowfish", "category": "Animals & Nature", "aliases": [ "blowfish" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F988}", "description": "shark", "category": "Animals & Nature", "aliases": [ "shark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F419}", "description": "octopus", "category": "Animals & Nature", "aliases": [ "octopus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F41A}", "description": "spiral shell", "category": "Animals & Nature", "aliases": [ "shell" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F40C}", "description": "snail", "category": "Animals & Nature", "aliases": [ "snail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F98B}", "description": "butterfly", "category": "Animals & Nature", "aliases": [ "butterfly" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F41B}", "description": "bug", "category": "Animals & Nature", "aliases": [ "bug" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F41C}", "description": "ant", "category": "Animals & Nature", "aliases": [ "ant" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F41D}", "description": "honeybee", "category": "Animals & Nature", "aliases": [ "bee", "honeybee" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F41E}", "description": "lady beetle", "category": "Animals & Nature", "aliases": [ "lady_beetle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F997}", "description": "cricket", "category": "Animals & Nature", "aliases": [ "cricket" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F577}\uFE0F", "description": "spider", "category": "Animals & Nature", "aliases": [ "spider" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F578}\uFE0F", "description": "spider web", "category": "Animals & Nature", "aliases": [ "spider_web" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F982}", "description": "scorpion", "category": "Animals & Nature", "aliases": [ "scorpion" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F99F}", "description": "mosquito", "category": "Animals & Nature", "aliases": [ "mosquito" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9A0}", "description": "microbe", "category": "Animals & Nature", "aliases": [ "microbe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F490}", "description": "bouquet", "category": "Animals & Nature", "aliases": [ "bouquet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F338}", "description": "cherry blossom", "category": "Animals & Nature", "aliases": [ "cherry_blossom" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4AE}", "description": "white flower", "category": "Animals & Nature", "aliases": [ "white_flower" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F5}\uFE0F", "description": "rosette", "category": "Animals & Nature", "aliases": [ "rosette" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F339}", "description": "rose", "category": "Animals & Nature", "aliases": [ "rose" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F940}", "description": "wilted flower", "category": "Animals & Nature", "aliases": [ "wilted_flower" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F33A}", "description": "hibiscus", "category": "Animals & Nature", "aliases": [ "hibiscus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F33B}", "description": "sunflower", "category": "Animals & Nature", "aliases": [ "sunflower" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F33C}", "description": "blossom", "category": "Animals & Nature", "aliases": [ "blossom" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F337}", "description": "tulip", "category": "Animals & Nature", "aliases": [ "tulip" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F331}", "description": "seedling", "category": "Animals & Nature", "aliases": [ "seedling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F332}", "description": "evergreen tree", "category": "Animals & Nature", "aliases": [ "evergreen_tree" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F333}", "description": "deciduous tree", "category": "Animals & Nature", "aliases": [ "deciduous_tree" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F334}", "description": "palm tree", "category": "Animals & Nature", "aliases": [ "palm_tree" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F335}", "description": "cactus", "category": "Animals & Nature", "aliases": [ "cactus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F33E}", "description": "sheaf of rice", "category": "Animals & Nature", "aliases": [ "ear_of_rice" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F33F}", "description": "herb", "category": "Animals & Nature", "aliases": [ "herb" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2618\uFE0F", "description": "shamrock", "category": "Animals & Nature", "aliases": [ "shamrock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F340}", "description": "four leaf clover", "category": "Animals & Nature", "aliases": [ "four_leaf_clover" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F341}", "description": "maple leaf", "category": "Animals & Nature", "aliases": [ "maple_leaf" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F342}", "description": "fallen leaf", "category": "Animals & Nature", "aliases": [ "fallen_leaf" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F343}", "description": "leaf fluttering in wind", "category": "Animals & Nature", "aliases": [ "leaves" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F347}", "description": "grapes", "category": "Food & Drink", "aliases": [ "grapes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F348}", "description": "melon", "category": "Food & Drink", "aliases": [ "melon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F349}", "description": "watermelon", "category": "Food & Drink", "aliases": [ "watermelon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F34A}", "description": "tangerine", "category": "Food & Drink", "aliases": [ "tangerine", "orange", "mandarin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F34B}", "description": "lemon", "category": "Food & Drink", "aliases": [ "lemon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F34C}", "description": "banana", "category": "Food & Drink", "aliases": [ "banana" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F34D}", "description": "pineapple", "category": "Food & Drink", "aliases": [ "pineapple" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F96D}", "description": "mango", "category": "Food & Drink", "aliases": [ "mango" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F34E}", "description": "red apple", "category": "Food & Drink", "aliases": [ "apple" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F34F}", "description": "green apple", "category": "Food & Drink", "aliases": [ "green_apple" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F350}", "description": "pear", "category": "Food & Drink", "aliases": [ "pear" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F351}", "description": "peach", "category": "Food & Drink", "aliases": [ "peach" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F352}", "description": "cherries", "category": "Food & Drink", "aliases": [ "cherries" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F353}", "description": "strawberry", "category": "Food & Drink", "aliases": [ "strawberry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F95D}", "description": "kiwi fruit", "category": "Food & Drink", "aliases": [ "kiwi_fruit" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F345}", "description": "tomato", "category": "Food & Drink", "aliases": [ "tomato" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F965}", "description": "coconut", "category": "Food & Drink", "aliases": [ "coconut" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F951}", "description": "avocado", "category": "Food & Drink", "aliases": [ "avocado" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F346}", "description": "eggplant", "category": "Food & Drink", "aliases": [ "eggplant" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F954}", "description": "potato", "category": "Food & Drink", "aliases": [ "potato" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F955}", "description": "carrot", "category": "Food & Drink", "aliases": [ "carrot" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F33D}", "description": "ear of corn", "category": "Food & Drink", "aliases": [ "corn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F336}\uFE0F", "description": "hot pepper", "category": "Food & Drink", "aliases": [ "hot_pepper" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F952}", "description": "cucumber", "category": "Food & Drink", "aliases": [ "cucumber" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F96C}", "description": "leafy green", "category": "Food & Drink", "aliases": [ "leafy_green" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F966}", "description": "broccoli", "category": "Food & Drink", "aliases": [ "broccoli" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C4}", "description": "garlic", "category": "Food & Drink", "aliases": [ "garlic" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C5}", "description": "onion", "category": "Food & Drink", "aliases": [ "onion" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F344}", "description": "mushroom", "category": "Food & Drink", "aliases": [ "mushroom" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F95C}", "description": "peanuts", "category": "Food & Drink", "aliases": [ "peanuts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F330}", "description": "chestnut", "category": "Food & Drink", "aliases": [ "chestnut" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F35E}", "description": "bread", "category": "Food & Drink", "aliases": [ "bread" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F950}", "description": "croissant", "category": "Food & Drink", "aliases": [ "croissant" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F956}", "description": "baguette bread", "category": "Food & Drink", "aliases": [ "baguette_bread" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F968}", "description": "pretzel", "category": "Food & Drink", "aliases": [ "pretzel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F96F}", "description": "bagel", "category": "Food & Drink", "aliases": [ "bagel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F95E}", "description": "pancakes", "category": "Food & Drink", "aliases": [ "pancakes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C7}", "description": "waffle", "category": "Food & Drink", "aliases": [ "waffle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C0}", "description": "cheese wedge", "category": "Food & Drink", "aliases": [ "cheese" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F356}", "description": "meat on bone", "category": "Food & Drink", "aliases": [ "meat_on_bone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F357}", "description": "poultry leg", "category": "Food & Drink", "aliases": [ "poultry_leg" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F969}", "description": "cut of meat", "category": "Food & Drink", "aliases": [ "cut_of_meat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F953}", "description": "bacon", "category": "Food & Drink", "aliases": [ "bacon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F354}", "description": "hamburger", "category": "Food & Drink", "aliases": [ "hamburger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F35F}", "description": "french fries", "category": "Food & Drink", "aliases": [ "fries" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F355}", "description": "pizza", "category": "Food & Drink", "aliases": [ "pizza" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F32D}", "description": "hot dog", "category": "Food & Drink", "aliases": [ "hotdog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F96A}", "description": "sandwich", "category": "Food & Drink", "aliases": [ "sandwich" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F32E}", "description": "taco", "category": "Food & Drink", "aliases": [ "taco" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F32F}", "description": "burrito", "category": "Food & Drink", "aliases": [ "burrito" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F959}", "description": "stuffed flatbread", "category": "Food & Drink", "aliases": [ "stuffed_flatbread" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C6}", "description": "falafel", "category": "Food & Drink", "aliases": [ "falafel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F95A}", "description": "egg", "category": "Food & Drink", "aliases": [ "egg" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F373}", "description": "cooking", "category": "Food & Drink", "aliases": [ "fried_egg" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F958}", "description": "shallow pan of food", "category": "Food & Drink", "aliases": [ "shallow_pan_of_food" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F372}", "description": "pot of food", "category": "Food & Drink", "aliases": [ "stew" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F963}", "description": "bowl with spoon", "category": "Food & Drink", "aliases": [ "bowl_with_spoon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F957}", "description": "green salad", "category": "Food & Drink", "aliases": [ "green_salad" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F37F}", "description": "popcorn", "category": "Food & Drink", "aliases": [ "popcorn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C8}", "description": "butter", "category": "Food & Drink", "aliases": [ "butter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C2}", "description": "salt", "category": "Food & Drink", "aliases": [ "salt" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F96B}", "description": "canned food", "category": "Food & Drink", "aliases": [ "canned_food" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F371}", "description": "bento box", "category": "Food & Drink", "aliases": [ "bento" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F358}", "description": "rice cracker", "category": "Food & Drink", "aliases": [ "rice_cracker" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F359}", "description": "rice ball", "category": "Food & Drink", "aliases": [ "rice_ball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F35A}", "description": "cooked rice", "category": "Food & Drink", "aliases": [ "rice" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F35B}", "description": "curry rice", "category": "Food & Drink", "aliases": [ "curry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F35C}", "description": "steaming bowl", "category": "Food & Drink", "aliases": [ "ramen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F35D}", "description": "spaghetti", "category": "Food & Drink", "aliases": [ "spaghetti" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F360}", "description": "roasted sweet potato", "category": "Food & Drink", "aliases": [ "sweet_potato" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F362}", "description": "oden", "category": "Food & Drink", "aliases": [ "oden" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F363}", "description": "sushi", "category": "Food & Drink", "aliases": [ "sushi" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F364}", "description": "fried shrimp", "category": "Food & Drink", "aliases": [ "fried_shrimp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F365}", "description": "fish cake with swirl", "category": "Food & Drink", "aliases": [ "fish_cake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F96E}", "description": "moon cake", "category": "Food & Drink", "aliases": [ "moon_cake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F361}", "description": "dango", "category": "Food & Drink", "aliases": [ "dango" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F95F}", "description": "dumpling", "category": "Food & Drink", "aliases": [ "dumpling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F960}", "description": "fortune cookie", "category": "Food & Drink", "aliases": [ "fortune_cookie" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F961}", "description": "takeout box", "category": "Food & Drink", "aliases": [ "takeout_box" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F980}", "description": "crab", "category": "Food & Drink", "aliases": [ "crab" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F99E}", "description": "lobster", "category": "Food & Drink", "aliases": [ "lobster" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F990}", "description": "shrimp", "category": "Food & Drink", "aliases": [ "shrimp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F991}", "description": "squid", "category": "Food & Drink", "aliases": [ "squid" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9AA}", "description": "oyster", "category": "Food & Drink", "aliases": [ "oyster" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F366}", "description": "soft ice cream", "category": "Food & Drink", "aliases": [ "icecream" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F367}", "description": "shaved ice", "category": "Food & Drink", "aliases": [ "shaved_ice" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F368}", "description": "ice cream", "category": "Food & Drink", "aliases": [ "ice_cream" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F369}", "description": "doughnut", "category": "Food & Drink", "aliases": [ "doughnut" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F36A}", "description": "cookie", "category": "Food & Drink", "aliases": [ "cookie" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F382}", "description": "birthday cake", "category": "Food & Drink", "aliases": [ "birthday" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F370}", "description": "shortcake", "category": "Food & Drink", "aliases": [ "cake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C1}", "description": "cupcake", "category": "Food & Drink", "aliases": [ "cupcake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F967}", "description": "pie", "category": "Food & Drink", "aliases": [ "pie" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F36B}", "description": "chocolate bar", "category": "Food & Drink", "aliases": [ "chocolate_bar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F36C}", "description": "candy", "category": "Food & Drink", "aliases": [ "candy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F36D}", "description": "lollipop", "category": "Food & Drink", "aliases": [ "lollipop" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F36E}", "description": "custard", "category": "Food & Drink", "aliases": [ "custard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F36F}", "description": "honey pot", "category": "Food & Drink", "aliases": [ "honey_pot" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F37C}", "description": "baby bottle", "category": "Food & Drink", "aliases": [ "baby_bottle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F95B}", "description": "glass of milk", "category": "Food & Drink", "aliases": [ "milk_glass" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2615", "description": "hot beverage", "category": "Food & Drink", "aliases": [ "coffee" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F375}", "description": "teacup without handle", "category": "Food & Drink", "aliases": [ "tea" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F376}", "description": "sake", "category": "Food & Drink", "aliases": [ "sake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F37E}", "description": "bottle with popping cork", "category": "Food & Drink", "aliases": [ "champagne" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F377}", "description": "wine glass", "category": "Food & Drink", "aliases": [ "wine_glass" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F378}", "description": "cocktail glass", "category": "Food & Drink", "aliases": [ "cocktail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F379}", "description": "tropical drink", "category": "Food & Drink", "aliases": [ "tropical_drink" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F37A}", "description": "beer mug", "category": "Food & Drink", "aliases": [ "beer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F37B}", "description": "clinking beer mugs", "category": "Food & Drink", "aliases": [ "beers" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F942}", "description": "clinking glasses", "category": "Food & Drink", "aliases": [ "clinking_glasses" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F943}", "description": "tumbler glass", "category": "Food & Drink", "aliases": [ "tumbler_glass" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F964}", "description": "cup with straw", "category": "Food & Drink", "aliases": [ "cup_with_straw" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C3}", "description": "beverage box", "category": "Food & Drink", "aliases": [ "beverage_box" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9C9}", "description": "mate", "category": "Food & Drink", "aliases": [ "mate" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9CA}", "description": "ice", "category": "Food & Drink", "aliases": [ "ice_cube" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F962}", "description": "chopsticks", "category": "Food & Drink", "aliases": [ "chopsticks" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F37D}\uFE0F", "description": "fork and knife with plate", "category": "Food & Drink", "aliases": [ "plate_with_cutlery" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F374}", "description": "fork and knife", "category": "Food & Drink", "aliases": [ "fork_and_knife" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F944}", "description": "spoon", "category": "Food & Drink", "aliases": [ "spoon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F52A}", "description": "kitchen knife", "category": "Food & Drink", "aliases": [ "hocho", "knife" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3FA}", "description": "amphora", "category": "Food & Drink", "aliases": [ "amphora" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F30D}", "description": "globe showing Europe-Africa", "category": "Travel & Places", "aliases": [ "earth_africa" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F30E}", "description": "globe showing Americas", "category": "Travel & Places", "aliases": [ "earth_americas" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F30F}", "description": "globe showing Asia-Australia", "category": "Travel & Places", "aliases": [ "earth_asia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F310}", "description": "globe with meridians", "category": "Travel & Places", "aliases": [ "globe_with_meridians" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5FA}\uFE0F", "description": "world map", "category": "Travel & Places", "aliases": [ "world_map" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5FE}", "description": "map of Japan", "category": "Travel & Places", "aliases": [ "japan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9ED}", "description": "compass", "category": "Travel & Places", "aliases": [ "compass" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D4}\uFE0F", "description": "snow-capped mountain", "category": "Travel & Places", "aliases": [ "mountain_snow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F0\uFE0F", "description": "mountain", "category": "Travel & Places", "aliases": [ "mountain" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F30B}", "description": "volcano", "category": "Travel & Places", "aliases": [ "volcano" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5FB}", "description": "mount fuji", "category": "Travel & Places", "aliases": [ "mount_fuji" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D5}\uFE0F", "description": "camping", "category": "Travel & Places", "aliases": [ "camping" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D6}\uFE0F", "description": "beach with umbrella", "category": "Travel & Places", "aliases": [ "beach_umbrella" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3DC}\uFE0F", "description": "desert", "category": "Travel & Places", "aliases": [ "desert" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3DD}\uFE0F", "description": "desert island", "category": "Travel & Places", "aliases": [ "desert_island" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3DE}\uFE0F", "description": "national park", "category": "Travel & Places", "aliases": [ "national_park" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3DF}\uFE0F", "description": "stadium", "category": "Travel & Places", "aliases": [ "stadium" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3DB}\uFE0F", "description": "classical building", "category": "Travel & Places", "aliases": [ "classical_building" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D7}\uFE0F", "description": "building construction", "category": "Travel & Places", "aliases": [ "building_construction" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F1}", "description": "brick", "category": "Travel & Places", "aliases": [ "bricks" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D8}\uFE0F", "description": "houses", "category": "Travel & Places", "aliases": [ "houses" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3DA}\uFE0F", "description": "derelict house", "category": "Travel & Places", "aliases": [ "derelict_house" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E0}", "description": "house", "category": "Travel & Places", "aliases": [ "house" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E1}", "description": "house with garden", "category": "Travel & Places", "aliases": [ "house_with_garden" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E2}", "description": "office building", "category": "Travel & Places", "aliases": [ "office" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E3}", "description": "Japanese post office", "category": "Travel & Places", "aliases": [ "post_office" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E4}", "description": "post office", "category": "Travel & Places", "aliases": [ "european_post_office" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E5}", "description": "hospital", "category": "Travel & Places", "aliases": [ "hospital" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E6}", "description": "bank", "category": "Travel & Places", "aliases": [ "bank" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E8}", "description": "hotel", "category": "Travel & Places", "aliases": [ "hotel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E9}", "description": "love hotel", "category": "Travel & Places", "aliases": [ "love_hotel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3EA}", "description": "convenience store", "category": "Travel & Places", "aliases": [ "convenience_store" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3EB}", "description": "school", "category": "Travel & Places", "aliases": [ "school" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3EC}", "description": "department store", "category": "Travel & Places", "aliases": [ "department_store" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3ED}", "description": "factory", "category": "Travel & Places", "aliases": [ "factory" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3EF}", "description": "Japanese castle", "category": "Travel & Places", "aliases": [ "japanese_castle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F0}", "description": "castle", "category": "Travel & Places", "aliases": [ "european_castle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F492}", "description": "wedding", "category": "Travel & Places", "aliases": [ "wedding" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5FC}", "description": "Tokyo tower", "category": "Travel & Places", "aliases": [ "tokyo_tower" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5FD}", "description": "Statue of Liberty", "category": "Travel & Places", "aliases": [ "statue_of_liberty" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26EA", "description": "church", "category": "Travel & Places", "aliases": [ "church" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F54C}", "description": "mosque", "category": "Travel & Places", "aliases": [ "mosque" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6D5}", "description": "hindu temple", "category": "Travel & Places", "aliases": [ "hindu_temple" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F54D}", "description": "synagogue", "category": "Travel & Places", "aliases": [ "synagogue" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26E9\uFE0F", "description": "shinto shrine", "category": "Travel & Places", "aliases": [ "shinto_shrine" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F54B}", "description": "kaaba", "category": "Travel & Places", "aliases": [ "kaaba" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F2", "description": "fountain", "category": "Travel & Places", "aliases": [ "fountain" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26FA", "description": "tent", "category": "Travel & Places", "aliases": [ "tent" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F301}", "description": "foggy", "category": "Travel & Places", "aliases": [ "foggy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F303}", "description": "night with stars", "category": "Travel & Places", "aliases": [ "night_with_stars" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D9}\uFE0F", "description": "cityscape", "category": "Travel & Places", "aliases": [ "cityscape" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F304}", "description": "sunrise over mountains", "category": "Travel & Places", "aliases": [ "sunrise_over_mountains" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F305}", "description": "sunrise", "category": "Travel & Places", "aliases": [ "sunrise" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F306}", "description": "cityscape at dusk", "category": "Travel & Places", "aliases": [ "city_sunset" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F307}", "description": "sunset", "category": "Travel & Places", "aliases": [ "city_sunrise" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F309}", "description": "bridge at night", "category": "Travel & Places", "aliases": [ "bridge_at_night" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2668\uFE0F", "description": "hot springs", "category": "Travel & Places", "aliases": [ "hotsprings" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A0}", "description": "carousel horse", "category": "Travel & Places", "aliases": [ "carousel_horse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A1}", "description": "ferris wheel", "category": "Travel & Places", "aliases": [ "ferris_wheel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A2}", "description": "roller coaster", "category": "Travel & Places", "aliases": [ "roller_coaster" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F488}", "description": "barber pole", "category": "Travel & Places", "aliases": [ "barber" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3AA}", "description": "circus tent", "category": "Travel & Places", "aliases": [ "circus_tent" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F682}", "description": "locomotive", "category": "Travel & Places", "aliases": [ "steam_locomotive" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F683}", "description": "railway car", "category": "Travel & Places", "aliases": [ "railway_car" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F684}", "description": "high-speed train", "category": "Travel & Places", "aliases": [ "bullettrain_side" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F685}", "description": "bullet train", "category": "Travel & Places", "aliases": [ "bullettrain_front" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F686}", "description": "train", "category": "Travel & Places", "aliases": [ "train2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F687}", "description": "metro", "category": "Travel & Places", "aliases": [ "metro" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F688}", "description": "light rail", "category": "Travel & Places", "aliases": [ "light_rail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F689}", "description": "station", "category": "Travel & Places", "aliases": [ "station" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F68A}", "description": "tram", "category": "Travel & Places", "aliases": [ "tram" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F69D}", "description": "monorail", "category": "Travel & Places", "aliases": [ "monorail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F69E}", "description": "mountain railway", "category": "Travel & Places", "aliases": [ "mountain_railway" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F68B}", "description": "tram car", "category": "Travel & Places", "aliases": [ "train" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F68C}", "description": "bus", "category": "Travel & Places", "aliases": [ "bus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F68D}", "description": "oncoming bus", "category": "Travel & Places", "aliases": [ "oncoming_bus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F68E}", "description": "trolleybus", "category": "Travel & Places", "aliases": [ "trolleybus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F690}", "description": "minibus", "category": "Travel & Places", "aliases": [ "minibus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F691}", "description": "ambulance", "category": "Travel & Places", "aliases": [ "ambulance" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F692}", "description": "fire engine", "category": "Travel & Places", "aliases": [ "fire_engine" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F693}", "description": "police car", "category": "Travel & Places", "aliases": [ "police_car" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F694}", "description": "oncoming police car", "category": "Travel & Places", "aliases": [ "oncoming_police_car" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F695}", "description": "taxi", "category": "Travel & Places", "aliases": [ "taxi" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F696}", "description": "oncoming taxi", "category": "Travel & Places", "aliases": [ "oncoming_taxi" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F697}", "description": "automobile", "category": "Travel & Places", "aliases": [ "car", "red_car" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F698}", "description": "oncoming automobile", "category": "Travel & Places", "aliases": [ "oncoming_automobile" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F699}", "description": "sport utility vehicle", "category": "Travel & Places", "aliases": [ "blue_car" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F69A}", "description": "delivery truck", "category": "Travel & Places", "aliases": [ "truck" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F69B}", "description": "articulated lorry", "category": "Travel & Places", "aliases": [ "articulated_lorry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F69C}", "description": "tractor", "category": "Travel & Places", "aliases": [ "tractor" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CE}\uFE0F", "description": "racing car", "category": "Travel & Places", "aliases": [ "racing_car" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CD}\uFE0F", "description": "motorcycle", "category": "Travel & Places", "aliases": [ "motorcycle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F5}", "description": "motor scooter", "category": "Travel & Places", "aliases": [ "motor_scooter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9BD}", "description": "manual wheelchair", "category": "Travel & Places", "aliases": [ "manual_wheelchair" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9BC}", "description": "motorized wheelchair", "category": "Travel & Places", "aliases": [ "motorized_wheelchair" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6FA}", "description": "auto rickshaw", "category": "Travel & Places", "aliases": [ "auto_rickshaw" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B2}", "description": "bicycle", "category": "Travel & Places", "aliases": [ "bike" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F4}", "description": "kick scooter", "category": "Travel & Places", "aliases": [ "kick_scooter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F9}", "description": "skateboard", "category": "Travel & Places", "aliases": [ "skateboard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F68F}", "description": "bus stop", "category": "Travel & Places", "aliases": [ "busstop" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E3}\uFE0F", "description": "motorway", "category": "Travel & Places", "aliases": [ "motorway" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E4}\uFE0F", "description": "railway track", "category": "Travel & Places", "aliases": [ "railway_track" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E2}\uFE0F", "description": "oil drum", "category": "Travel & Places", "aliases": [ "oil_drum" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26FD", "description": "fuel pump", "category": "Travel & Places", "aliases": [ "fuelpump" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A8}", "description": "police car light", "category": "Travel & Places", "aliases": [ "rotating_light" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A5}", "description": "horizontal traffic light", "category": "Travel & Places", "aliases": [ "traffic_light" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A6}", "description": "vertical traffic light", "category": "Travel & Places", "aliases": [ "vertical_traffic_light" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6D1}", "description": "stop sign", "category": "Travel & Places", "aliases": [ "stop_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A7}", "description": "construction", "category": "Travel & Places", "aliases": [ "construction" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2693", "description": "anchor", "category": "Travel & Places", "aliases": [ "anchor" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F5", "description": "sailboat", "category": "Travel & Places", "aliases": [ "boat", "sailboat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F6}", "description": "canoe", "category": "Travel & Places", "aliases": [ "canoe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A4}", "description": "speedboat", "category": "Travel & Places", "aliases": [ "speedboat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F3}\uFE0F", "description": "passenger ship", "category": "Travel & Places", "aliases": [ "passenger_ship" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F4\uFE0F", "description": "ferry", "category": "Travel & Places", "aliases": [ "ferry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E5}\uFE0F", "description": "motor boat", "category": "Travel & Places", "aliases": [ "motor_boat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A2}", "description": "ship", "category": "Travel & Places", "aliases": [ "ship" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2708\uFE0F", "description": "airplane", "category": "Travel & Places", "aliases": [ "airplane" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E9}\uFE0F", "description": "small airplane", "category": "Travel & Places", "aliases": [ "small_airplane" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6EB}", "description": "airplane departure", "category": "Travel & Places", "aliases": [ "flight_departure" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6EC}", "description": "airplane arrival", "category": "Travel & Places", "aliases": [ "flight_arrival" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA82}", "description": "parachute", "category": "Travel & Places", "aliases": [ "parachute" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4BA}", "description": "seat", "category": "Travel & Places", "aliases": [ "seat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F681}", "description": "helicopter", "category": "Travel & Places", "aliases": [ "helicopter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F69F}", "description": "suspension railway", "category": "Travel & Places", "aliases": [ "suspension_railway" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A0}", "description": "mountain cableway", "category": "Travel & Places", "aliases": [ "mountain_cableway" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A1}", "description": "aerial tramway", "category": "Travel & Places", "aliases": [ "aerial_tramway" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F0}\uFE0F", "description": "satellite", "category": "Travel & Places", "aliases": [ "artificial_satellite" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F680}", "description": "rocket", "category": "Travel & Places", "aliases": [ "rocket" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F8}", "description": "flying saucer", "category": "Travel & Places", "aliases": [ "flying_saucer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6CE}\uFE0F", "description": "bellhop bell", "category": "Travel & Places", "aliases": [ "bellhop_bell" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F3}", "description": "luggage", "category": "Travel & Places", "aliases": [ "luggage" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u231B", "description": "hourglass done", "category": "Travel & Places", "aliases": [ "hourglass" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23F3", "description": "hourglass not done", "category": "Travel & Places", "aliases": [ "hourglass_flowing_sand" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u231A", "description": "watch", "category": "Travel & Places", "aliases": [ "watch" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23F0", "description": "alarm clock", "category": "Travel & Places", "aliases": [ "alarm_clock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23F1\uFE0F", "description": "stopwatch", "category": "Travel & Places", "aliases": [ "stopwatch" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23F2\uFE0F", "description": "timer clock", "category": "Travel & Places", "aliases": [ "timer_clock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F570}\uFE0F", "description": "mantelpiece clock", "category": "Travel & Places", "aliases": [ "mantelpiece_clock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F55B}", "description": "twelve o\u2019clock", "category": "Travel & Places", "aliases": [ "clock12" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F567}", "description": "twelve-thirty", "category": "Travel & Places", "aliases": [ "clock1230" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F550}", "description": "one o\u2019clock", "category": "Travel & Places", "aliases": [ "clock1" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F55C}", "description": "one-thirty", "category": "Travel & Places", "aliases": [ "clock130" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F551}", "description": "two o\u2019clock", "category": "Travel & Places", "aliases": [ "clock2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F55D}", "description": "two-thirty", "category": "Travel & Places", "aliases": [ "clock230" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F552}", "description": "three o\u2019clock", "category": "Travel & Places", "aliases": [ "clock3" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F55E}", "description": "three-thirty", "category": "Travel & Places", "aliases": [ "clock330" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F553}", "description": "four o\u2019clock", "category": "Travel & Places", "aliases": [ "clock4" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F55F}", "description": "four-thirty", "category": "Travel & Places", "aliases": [ "clock430" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F554}", "description": "five o\u2019clock", "category": "Travel & Places", "aliases": [ "clock5" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F560}", "description": "five-thirty", "category": "Travel & Places", "aliases": [ "clock530" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F555}", "description": "six o\u2019clock", "category": "Travel & Places", "aliases": [ "clock6" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F561}", "description": "six-thirty", "category": "Travel & Places", "aliases": [ "clock630" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F556}", "description": "seven o\u2019clock", "category": "Travel & Places", "aliases": [ "clock7" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F562}", "description": "seven-thirty", "category": "Travel & Places", "aliases": [ "clock730" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F557}", "description": "eight o\u2019clock", "category": "Travel & Places", "aliases": [ "clock8" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F563}", "description": "eight-thirty", "category": "Travel & Places", "aliases": [ "clock830" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F558}", "description": "nine o\u2019clock", "category": "Travel & Places", "aliases": [ "clock9" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F564}", "description": "nine-thirty", "category": "Travel & Places", "aliases": [ "clock930" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F559}", "description": "ten o\u2019clock", "category": "Travel & Places", "aliases": [ "clock10" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F565}", "description": "ten-thirty", "category": "Travel & Places", "aliases": [ "clock1030" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F55A}", "description": "eleven o\u2019clock", "category": "Travel & Places", "aliases": [ "clock11" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F566}", "description": "eleven-thirty", "category": "Travel & Places", "aliases": [ "clock1130" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F311}", "description": "new moon", "category": "Travel & Places", "aliases": [ "new_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F312}", "description": "waxing crescent moon", "category": "Travel & Places", "aliases": [ "waxing_crescent_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F313}", "description": "first quarter moon", "category": "Travel & Places", "aliases": [ "first_quarter_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F314}", "description": "waxing gibbous moon", "category": "Travel & Places", "aliases": [ "moon", "waxing_gibbous_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F315}", "description": "full moon", "category": "Travel & Places", "aliases": [ "full_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F316}", "description": "waning gibbous moon", "category": "Travel & Places", "aliases": [ "waning_gibbous_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F317}", "description": "last quarter moon", "category": "Travel & Places", "aliases": [ "last_quarter_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F318}", "description": "waning crescent moon", "category": "Travel & Places", "aliases": [ "waning_crescent_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F319}", "description": "crescent moon", "category": "Travel & Places", "aliases": [ "crescent_moon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F31A}", "description": "new moon face", "category": "Travel & Places", "aliases": [ "new_moon_with_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F31B}", "description": "first quarter moon face", "category": "Travel & Places", "aliases": [ "first_quarter_moon_with_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F31C}", "description": "last quarter moon face", "category": "Travel & Places", "aliases": [ "last_quarter_moon_with_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F321}\uFE0F", "description": "thermometer", "category": "Travel & Places", "aliases": [ "thermometer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2600\uFE0F", "description": "sun", "category": "Travel & Places", "aliases": [ "sunny" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F31D}", "description": "full moon face", "category": "Travel & Places", "aliases": [ "full_moon_with_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F31E}", "description": "sun with face", "category": "Travel & Places", "aliases": [ "sun_with_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA90}", "description": "ringed planet", "category": "Travel & Places", "aliases": [ "ringed_planet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B50", "description": "star", "category": "Travel & Places", "aliases": [ "star" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F31F}", "description": "glowing star", "category": "Travel & Places", "aliases": [ "star2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F320}", "description": "shooting star", "category": "Travel & Places", "aliases": [ "stars" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F30C}", "description": "milky way", "category": "Travel & Places", "aliases": [ "milky_way" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2601\uFE0F", "description": "cloud", "category": "Travel & Places", "aliases": [ "cloud" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26C5", "description": "sun behind cloud", "category": "Travel & Places", "aliases": [ "partly_sunny" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26C8\uFE0F", "description": "cloud with lightning and rain", "category": "Travel & Places", "aliases": [ "cloud_with_lightning_and_rain" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F324}\uFE0F", "description": "sun behind small cloud", "category": "Travel & Places", "aliases": [ "sun_behind_small_cloud" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F325}\uFE0F", "description": "sun behind large cloud", "category": "Travel & Places", "aliases": [ "sun_behind_large_cloud" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F326}\uFE0F", "description": "sun behind rain cloud", "category": "Travel & Places", "aliases": [ "sun_behind_rain_cloud" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F327}\uFE0F", "description": "cloud with rain", "category": "Travel & Places", "aliases": [ "cloud_with_rain" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F328}\uFE0F", "description": "cloud with snow", "category": "Travel & Places", "aliases": [ "cloud_with_snow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F329}\uFE0F", "description": "cloud with lightning", "category": "Travel & Places", "aliases": [ "cloud_with_lightning" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F32A}\uFE0F", "description": "tornado", "category": "Travel & Places", "aliases": [ "tornado" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F32B}\uFE0F", "description": "fog", "category": "Travel & Places", "aliases": [ "fog" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F32C}\uFE0F", "description": "wind face", "category": "Travel & Places", "aliases": [ "wind_face" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F300}", "description": "cyclone", "category": "Travel & Places", "aliases": [ "cyclone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F308}", "description": "rainbow", "category": "Travel & Places", "aliases": [ "rainbow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F302}", "description": "closed umbrella", "category": "Travel & Places", "aliases": [ "closed_umbrella" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2602\uFE0F", "description": "umbrella", "category": "Travel & Places", "aliases": [ "open_umbrella" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2614", "description": "umbrella with rain drops", "category": "Travel & Places", "aliases": [ "umbrella" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F1\uFE0F", "description": "umbrella on ground", "category": "Travel & Places", "aliases": [ "parasol_on_ground" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26A1", "description": "high voltage", "category": "Travel & Places", "aliases": [ "zap" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2744\uFE0F", "description": "snowflake", "category": "Travel & Places", "aliases": [ "snowflake" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2603\uFE0F", "description": "snowman", "category": "Travel & Places", "aliases": [ "snowman_with_snow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26C4", "description": "snowman without snow", "category": "Travel & Places", "aliases": [ "snowman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2604\uFE0F", "description": "comet", "category": "Travel & Places", "aliases": [ "comet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F525}", "description": "fire", "category": "Travel & Places", "aliases": [ "fire" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A7}", "description": "droplet", "category": "Travel & Places", "aliases": [ "droplet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F30A}", "description": "water wave", "category": "Travel & Places", "aliases": [ "ocean" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F383}", "description": "jack-o-lantern", "category": "Activities", "aliases": [ "jack_o_lantern" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F384}", "description": "Christmas tree", "category": "Activities", "aliases": [ "christmas_tree" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F386}", "description": "fireworks", "category": "Activities", "aliases": [ "fireworks" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F387}", "description": "sparkler", "category": "Activities", "aliases": [ "sparkler" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E8}", "description": "firecracker", "category": "Activities", "aliases": [ "firecracker" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2728", "description": "sparkles", "category": "Activities", "aliases": [ "sparkles" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F388}", "description": "balloon", "category": "Activities", "aliases": [ "balloon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F389}", "description": "party popper", "category": "Activities", "aliases": [ "tada" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F38A}", "description": "confetti ball", "category": "Activities", "aliases": [ "confetti_ball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F38B}", "description": "tanabata tree", "category": "Activities", "aliases": [ "tanabata_tree" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F38D}", "description": "pine decoration", "category": "Activities", "aliases": [ "bamboo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F38E}", "description": "Japanese dolls", "category": "Activities", "aliases": [ "dolls" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F38F}", "description": "carp streamer", "category": "Activities", "aliases": [ "flags" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F390}", "description": "wind chime", "category": "Activities", "aliases": [ "wind_chime" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F391}", "description": "moon viewing ceremony", "category": "Activities", "aliases": [ "rice_scene" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E7}", "description": "red envelope", "category": "Activities", "aliases": [ "red_envelope" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F380}", "description": "ribbon", "category": "Activities", "aliases": [ "ribbon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F381}", "description": "wrapped gift", "category": "Activities", "aliases": [ "gift" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F397}\uFE0F", "description": "reminder ribbon", "category": "Activities", "aliases": [ "reminder_ribbon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F39F}\uFE0F", "description": "admission tickets", "category": "Activities", "aliases": [ "tickets" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3AB}", "description": "ticket", "category": "Activities", "aliases": [ "ticket" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F396}\uFE0F", "description": "military medal", "category": "Activities", "aliases": [ "medal_military" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C6}", "description": "trophy", "category": "Activities", "aliases": [ "trophy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C5}", "description": "sports medal", "category": "Activities", "aliases": [ "medal_sports" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F947}", "description": "1st place medal", "category": "Activities", "aliases": [ "1st_place_medal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F948}", "description": "2nd place medal", "category": "Activities", "aliases": [ "2nd_place_medal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F949}", "description": "3rd place medal", "category": "Activities", "aliases": [ "3rd_place_medal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26BD", "description": "soccer ball", "category": "Activities", "aliases": [ "soccer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26BE", "description": "baseball", "category": "Activities", "aliases": [ "baseball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F94E}", "description": "softball", "category": "Activities", "aliases": [ "softball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C0}", "description": "basketball", "category": "Activities", "aliases": [ "basketball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D0}", "description": "volleyball", "category": "Activities", "aliases": [ "volleyball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C8}", "description": "american football", "category": "Activities", "aliases": [ "football" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C9}", "description": "rugby football", "category": "Activities", "aliases": [ "rugby_football" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3BE}", "description": "tennis", "category": "Activities", "aliases": [ "tennis" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F94F}", "description": "flying disc", "category": "Activities", "aliases": [ "flying_disc" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B3}", "description": "bowling", "category": "Activities", "aliases": [ "bowling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3CF}", "description": "cricket game", "category": "Activities", "aliases": [ "cricket_game" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D1}", "description": "field hockey", "category": "Activities", "aliases": [ "field_hockey" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D2}", "description": "ice hockey", "category": "Activities", "aliases": [ "ice_hockey" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F94D}", "description": "lacrosse", "category": "Activities", "aliases": [ "lacrosse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3D3}", "description": "ping pong", "category": "Activities", "aliases": [ "ping_pong" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F8}", "description": "badminton", "category": "Activities", "aliases": [ "badminton" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F94A}", "description": "boxing glove", "category": "Activities", "aliases": [ "boxing_glove" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F94B}", "description": "martial arts uniform", "category": "Activities", "aliases": [ "martial_arts_uniform" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F945}", "description": "goal net", "category": "Activities", "aliases": [ "goal_net" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F3", "description": "flag in hole", "category": "Activities", "aliases": [ "golf" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26F8\uFE0F", "description": "ice skate", "category": "Activities", "aliases": [ "ice_skate" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A3}", "description": "fishing pole", "category": "Activities", "aliases": [ "fishing_pole_and_fish" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F93F}", "description": "diving mask", "category": "Activities", "aliases": [ "diving_mask" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3BD}", "description": "running shirt", "category": "Activities", "aliases": [ "running_shirt_with_sash" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3BF}", "description": "skis", "category": "Activities", "aliases": [ "ski" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6F7}", "description": "sled", "category": "Activities", "aliases": [ "sled" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F94C}", "description": "curling stone", "category": "Activities", "aliases": [ "curling_stone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3AF}", "description": "direct hit", "category": "Activities", "aliases": [ "dart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA80}", "description": "yo-yo", "category": "Activities", "aliases": [ "yo_yo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA81}", "description": "kite", "category": "Activities", "aliases": [ "kite" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B1}", "description": "pool 8 ball", "category": "Activities", "aliases": [ "8ball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F52E}", "description": "crystal ball", "category": "Activities", "aliases": [ "crystal_ball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9FF}", "description": "nazar amulet", "category": "Activities", "aliases": [ "nazar_amulet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3AE}", "description": "video game", "category": "Activities", "aliases": [ "video_game" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F579}\uFE0F", "description": "joystick", "category": "Activities", "aliases": [ "joystick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B0}", "description": "slot machine", "category": "Activities", "aliases": [ "slot_machine" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B2}", "description": "game die", "category": "Activities", "aliases": [ "game_die" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E9}", "description": "puzzle piece", "category": "Activities", "aliases": [ "jigsaw" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F8}", "description": "teddy bear", "category": "Activities", "aliases": [ "teddy_bear" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA85}", "description": "pi\xF1ata", "category": "Activities", "aliases": [ "pinata" ], "hasMarkdownRepresentation": false }, { "emojiRaw": "\u2660\uFE0F", "description": "spade suit", "category": "Activities", "aliases": [ "spades" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2665\uFE0F", "description": "heart suit", "category": "Activities", "aliases": [ "hearts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2666\uFE0F", "description": "diamond suit", "category": "Activities", "aliases": [ "diamonds" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2663\uFE0F", "description": "club suit", "category": "Activities", "aliases": [ "clubs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u265F\uFE0F", "description": "chess pawn", "category": "Activities", "aliases": [ "chess_pawn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F0CF}", "description": "joker", "category": "Activities", "aliases": [ "black_joker" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F004}", "description": "mahjong red dragon", "category": "Activities", "aliases": [ "mahjong" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B4}", "description": "flower playing cards", "category": "Activities", "aliases": [ "flower_playing_cards" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3AD}", "description": "performing arts", "category": "Activities", "aliases": [ "performing_arts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5BC}\uFE0F", "description": "framed picture", "category": "Activities", "aliases": [ "framed_picture" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A8}", "description": "artist palette", "category": "Activities", "aliases": [ "art" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F5}", "description": "thread", "category": "Activities", "aliases": [ "thread" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F6}", "description": "yarn", "category": "Activities", "aliases": [ "yarn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F453}", "description": "glasses", "category": "Objects", "aliases": [ "eyeglasses" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F576}\uFE0F", "description": "sunglasses", "category": "Objects", "aliases": [ "dark_sunglasses" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F97D}", "description": "goggles", "category": "Objects", "aliases": [ "goggles" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F97C}", "description": "lab coat", "category": "Objects", "aliases": [ "lab_coat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9BA}", "description": "safety vest", "category": "Objects", "aliases": [ "safety_vest" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F454}", "description": "necktie", "category": "Objects", "aliases": [ "necktie" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F455}", "description": "t-shirt", "category": "Objects", "aliases": [ "shirt", "tshirt" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F456}", "description": "jeans", "category": "Objects", "aliases": [ "jeans" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E3}", "description": "scarf", "category": "Objects", "aliases": [ "scarf" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E4}", "description": "gloves", "category": "Objects", "aliases": [ "gloves" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E5}", "description": "coat", "category": "Objects", "aliases": [ "coat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E6}", "description": "socks", "category": "Objects", "aliases": [ "socks" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F457}", "description": "dress", "category": "Objects", "aliases": [ "dress" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F458}", "description": "kimono", "category": "Objects", "aliases": [ "kimono" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F97B}", "description": "sari", "category": "Objects", "aliases": [ "sari" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA71}", "description": "one-piece swimsuit", "category": "Objects", "aliases": [ "one_piece_swimsuit" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA72}", "description": "briefs", "category": "Objects", "aliases": [ "swim_brief" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA73}", "description": "shorts", "category": "Objects", "aliases": [ "shorts" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F459}", "description": "bikini", "category": "Objects", "aliases": [ "bikini" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F45A}", "description": "woman\u2019s clothes", "category": "Objects", "aliases": [ "womans_clothes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F45B}", "description": "purse", "category": "Objects", "aliases": [ "purse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F45C}", "description": "handbag", "category": "Objects", "aliases": [ "handbag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F45D}", "description": "clutch bag", "category": "Objects", "aliases": [ "pouch" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6CD}\uFE0F", "description": "shopping bags", "category": "Objects", "aliases": [ "shopping" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F392}", "description": "backpack", "category": "Objects", "aliases": [ "school_satchel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F45E}", "description": "man\u2019s shoe", "category": "Objects", "aliases": [ "mans_shoe", "shoe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F45F}", "description": "running shoe", "category": "Objects", "aliases": [ "athletic_shoe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F97E}", "description": "hiking boot", "category": "Objects", "aliases": [ "hiking_boot" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F97F}", "description": "flat shoe", "category": "Objects", "aliases": [ "flat_shoe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F460}", "description": "high-heeled shoe", "category": "Objects", "aliases": [ "high_heel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F461}", "description": "woman\u2019s sandal", "category": "Objects", "aliases": [ "sandal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA70}", "description": "ballet shoes", "category": "Objects", "aliases": [ "ballet_shoes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F462}", "description": "woman\u2019s boot", "category": "Objects", "aliases": [ "boot" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F451}", "description": "crown", "category": "Objects", "aliases": [ "crown" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F452}", "description": "woman\u2019s hat", "category": "Objects", "aliases": [ "womans_hat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A9}", "description": "top hat", "category": "Objects", "aliases": [ "tophat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F393}", "description": "graduation cap", "category": "Objects", "aliases": [ "mortar_board" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9E2}", "description": "billed cap", "category": "Objects", "aliases": [ "billed_cap" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26D1\uFE0F", "description": "rescue worker\u2019s helmet", "category": "Objects", "aliases": [ "rescue_worker_helmet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4FF}", "description": "prayer beads", "category": "Objects", "aliases": [ "prayer_beads" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F484}", "description": "lipstick", "category": "Objects", "aliases": [ "lipstick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F48D}", "description": "ring", "category": "Objects", "aliases": [ "ring" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F48E}", "description": "gem stone", "category": "Objects", "aliases": [ "gem" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F507}", "description": "muted speaker", "category": "Objects", "aliases": [ "mute" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F508}", "description": "speaker low volume", "category": "Objects", "aliases": [ "speaker" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F509}", "description": "speaker medium volume", "category": "Objects", "aliases": [ "sound" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F50A}", "description": "speaker high volume", "category": "Objects", "aliases": [ "loud_sound" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E2}", "description": "loudspeaker", "category": "Objects", "aliases": [ "loudspeaker" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E3}", "description": "megaphone", "category": "Objects", "aliases": [ "mega" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4EF}", "description": "postal horn", "category": "Objects", "aliases": [ "postal_horn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F514}", "description": "bell", "category": "Objects", "aliases": [ "bell" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F515}", "description": "bell with slash", "category": "Objects", "aliases": [ "no_bell" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3BC}", "description": "musical score", "category": "Objects", "aliases": [ "musical_score" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B5}", "description": "musical note", "category": "Objects", "aliases": [ "musical_note" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B6}", "description": "musical notes", "category": "Objects", "aliases": [ "notes" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F399}\uFE0F", "description": "studio microphone", "category": "Objects", "aliases": [ "studio_microphone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F39A}\uFE0F", "description": "level slider", "category": "Objects", "aliases": [ "level_slider" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F39B}\uFE0F", "description": "control knobs", "category": "Objects", "aliases": [ "control_knobs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A4}", "description": "microphone", "category": "Objects", "aliases": [ "microphone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A7}", "description": "headphone", "category": "Objects", "aliases": [ "headphones" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4FB}", "description": "radio", "category": "Objects", "aliases": [ "radio" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B7}", "description": "saxophone", "category": "Objects", "aliases": [ "saxophone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B8}", "description": "guitar", "category": "Objects", "aliases": [ "guitar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3B9}", "description": "musical keyboard", "category": "Objects", "aliases": [ "musical_keyboard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3BA}", "description": "trumpet", "category": "Objects", "aliases": [ "trumpet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3BB}", "description": "violin", "category": "Objects", "aliases": [ "violin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA95}", "description": "banjo", "category": "Objects", "aliases": [ "banjo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F941}", "description": "drum", "category": "Objects", "aliases": [ "drum" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA98}", "description": "long drum", "category": "Objects", "aliases": [ "long_drum" ], "hasMarkdownRepresentation": false }, { "emojiRaw": "\u{1F4F1}", "description": "mobile phone", "category": "Objects", "aliases": [ "iphone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F2}", "description": "mobile phone with arrow", "category": "Objects", "aliases": [ "calling" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u260E\uFE0F", "description": "telephone", "category": "Objects", "aliases": [ "phone", "telephone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4DE}", "description": "telephone receiver", "category": "Objects", "aliases": [ "telephone_receiver" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4DF}", "description": "pager", "category": "Objects", "aliases": [ "pager" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E0}", "description": "fax machine", "category": "Objects", "aliases": [ "fax" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F50B}", "description": "battery", "category": "Objects", "aliases": [ "battery" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F50C}", "description": "electric plug", "category": "Objects", "aliases": [ "electric_plug" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4BB}", "description": "laptop", "category": "Objects", "aliases": [ "computer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5A5}\uFE0F", "description": "desktop computer", "category": "Objects", "aliases": [ "desktop_computer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5A8}\uFE0F", "description": "printer", "category": "Objects", "aliases": [ "printer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2328\uFE0F", "description": "keyboard", "category": "Objects", "aliases": [ "keyboard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5B1}\uFE0F", "description": "computer mouse", "category": "Objects", "aliases": [ "computer_mouse" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5B2}\uFE0F", "description": "trackball", "category": "Objects", "aliases": [ "trackball" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4BD}", "description": "computer disk", "category": "Objects", "aliases": [ "minidisc" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4BE}", "description": "floppy disk", "category": "Objects", "aliases": [ "floppy_disk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4BF}", "description": "optical disk", "category": "Objects", "aliases": [ "cd" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C0}", "description": "dvd", "category": "Objects", "aliases": [ "dvd" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9EE}", "description": "abacus", "category": "Objects", "aliases": [ "abacus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A5}", "description": "movie camera", "category": "Objects", "aliases": [ "movie_camera" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F39E}\uFE0F", "description": "film frames", "category": "Objects", "aliases": [ "film_strip" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4FD}\uFE0F", "description": "film projector", "category": "Objects", "aliases": [ "film_projector" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3AC}", "description": "clapper board", "category": "Objects", "aliases": [ "clapper" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4FA}", "description": "television", "category": "Objects", "aliases": [ "tv" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F7}", "description": "camera", "category": "Objects", "aliases": [ "camera" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F8}", "description": "camera with flash", "category": "Objects", "aliases": [ "camera_flash" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F9}", "description": "video camera", "category": "Objects", "aliases": [ "video_camera" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4FC}", "description": "videocassette", "category": "Objects", "aliases": [ "vhs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F50D}", "description": "magnifying glass tilted left", "category": "Objects", "aliases": [ "mag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F50E}", "description": "magnifying glass tilted right", "category": "Objects", "aliases": [ "mag_right" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F56F}\uFE0F", "description": "candle", "category": "Objects", "aliases": [ "candle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A1}", "description": "light bulb", "category": "Objects", "aliases": [ "bulb" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F526}", "description": "flashlight", "category": "Objects", "aliases": [ "flashlight" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3EE}", "description": "red paper lantern", "category": "Objects", "aliases": [ "izakaya_lantern", "lantern" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA94}", "description": "diya lamp", "category": "Objects", "aliases": [ "diya_lamp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D4}", "description": "notebook with decorative cover", "category": "Objects", "aliases": [ "notebook_with_decorative_cover" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D5}", "description": "closed book", "category": "Objects", "aliases": [ "closed_book" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D6}", "description": "open book", "category": "Objects", "aliases": [ "book", "open_book" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D7}", "description": "green book", "category": "Objects", "aliases": [ "green_book" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D8}", "description": "blue book", "category": "Objects", "aliases": [ "blue_book" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D9}", "description": "orange book", "category": "Objects", "aliases": [ "orange_book" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4DA}", "description": "books", "category": "Objects", "aliases": [ "books" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D3}", "description": "notebook", "category": "Objects", "aliases": [ "notebook" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D2}", "description": "ledger", "category": "Objects", "aliases": [ "ledger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C3}", "description": "page with curl", "category": "Objects", "aliases": [ "page_with_curl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4DC}", "description": "scroll", "category": "Objects", "aliases": [ "scroll" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C4}", "description": "page facing up", "category": "Objects", "aliases": [ "page_facing_up" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F0}", "description": "newspaper", "category": "Objects", "aliases": [ "newspaper" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5DE}\uFE0F", "description": "rolled-up newspaper", "category": "Objects", "aliases": [ "newspaper_roll" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D1}", "description": "bookmark tabs", "category": "Objects", "aliases": [ "bookmark_tabs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F516}", "description": "bookmark", "category": "Objects", "aliases": [ "bookmark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F7}\uFE0F", "description": "label", "category": "Objects", "aliases": [ "label" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B0}", "description": "money bag", "category": "Objects", "aliases": [ "moneybag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B4}", "description": "yen banknote", "category": "Objects", "aliases": [ "yen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B5}", "description": "dollar banknote", "category": "Objects", "aliases": [ "dollar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B6}", "description": "euro banknote", "category": "Objects", "aliases": [ "euro" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B7}", "description": "pound banknote", "category": "Objects", "aliases": [ "pound" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B8}", "description": "money with wings", "category": "Objects", "aliases": [ "money_with_wings" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B3}", "description": "credit card", "category": "Objects", "aliases": [ "credit_card" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9FE}", "description": "receipt", "category": "Objects", "aliases": [ "receipt" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B9}", "description": "chart increasing with yen", "category": "Objects", "aliases": [ "chart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2709\uFE0F", "description": "envelope", "category": "Objects", "aliases": [ "envelope" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E7}", "description": "e-mail", "category": "Objects", "aliases": [ "email", "e-mail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E8}", "description": "incoming envelope", "category": "Objects", "aliases": [ "incoming_envelope" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E9}", "description": "envelope with arrow", "category": "Objects", "aliases": [ "envelope_with_arrow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E4}", "description": "outbox tray", "category": "Objects", "aliases": [ "outbox_tray" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E5}", "description": "inbox tray", "category": "Objects", "aliases": [ "inbox_tray" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E6}", "description": "package", "category": "Objects", "aliases": [ "package" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4EB}", "description": "closed mailbox with raised flag", "category": "Objects", "aliases": [ "mailbox" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4EA}", "description": "closed mailbox with lowered flag", "category": "Objects", "aliases": [ "mailbox_closed" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4EC}", "description": "open mailbox with raised flag", "category": "Objects", "aliases": [ "mailbox_with_mail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4ED}", "description": "open mailbox with lowered flag", "category": "Objects", "aliases": [ "mailbox_with_no_mail" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4EE}", "description": "postbox", "category": "Objects", "aliases": [ "postbox" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5F3}\uFE0F", "description": "ballot box with ballot", "category": "Objects", "aliases": [ "ballot_box" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u270F\uFE0F", "description": "pencil", "category": "Objects", "aliases": [ "pencil2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2712\uFE0F", "description": "black nib", "category": "Objects", "aliases": [ "black_nib" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F58B}\uFE0F", "description": "fountain pen", "category": "Objects", "aliases": [ "fountain_pen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F58A}\uFE0F", "description": "pen", "category": "Objects", "aliases": [ "pen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F58C}\uFE0F", "description": "paintbrush", "category": "Objects", "aliases": [ "paintbrush" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F58D}\uFE0F", "description": "crayon", "category": "Objects", "aliases": [ "crayon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4DD}", "description": "memo", "category": "Objects", "aliases": [ "memo", "pencil" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4BC}", "description": "briefcase", "category": "Objects", "aliases": [ "briefcase" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C1}", "description": "file folder", "category": "Objects", "aliases": [ "file_folder" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C2}", "description": "open file folder", "category": "Objects", "aliases": [ "open_file_folder" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5C2}\uFE0F", "description": "card index dividers", "category": "Objects", "aliases": [ "card_index_dividers" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C5}", "description": "calendar", "category": "Objects", "aliases": [ "date" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C6}", "description": "tear-off calendar", "category": "Objects", "aliases": [ "calendar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5D2}\uFE0F", "description": "spiral notepad", "category": "Objects", "aliases": [ "spiral_notepad" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5D3}\uFE0F", "description": "spiral calendar", "category": "Objects", "aliases": [ "spiral_calendar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C7}", "description": "card index", "category": "Objects", "aliases": [ "card_index" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C8}", "description": "chart increasing", "category": "Objects", "aliases": [ "chart_with_upwards_trend" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4C9}", "description": "chart decreasing", "category": "Objects", "aliases": [ "chart_with_downwards_trend" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4CA}", "description": "bar chart", "category": "Objects", "aliases": [ "bar_chart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4CB}", "description": "clipboard", "category": "Objects", "aliases": [ "clipboard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4CC}", "description": "pushpin", "category": "Objects", "aliases": [ "pushpin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4CD}", "description": "round pushpin", "category": "Objects", "aliases": [ "round_pushpin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4CE}", "description": "paperclip", "category": "Objects", "aliases": [ "paperclip" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F587}\uFE0F", "description": "linked paperclips", "category": "Objects", "aliases": [ "paperclips" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4CF}", "description": "straight ruler", "category": "Objects", "aliases": [ "straight_ruler" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4D0}", "description": "triangular ruler", "category": "Objects", "aliases": [ "triangular_ruler" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2702\uFE0F", "description": "scissors", "category": "Objects", "aliases": [ "scissors" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5C3}\uFE0F", "description": "card file box", "category": "Objects", "aliases": [ "card_file_box" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5C4}\uFE0F", "description": "file cabinet", "category": "Objects", "aliases": [ "file_cabinet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5D1}\uFE0F", "description": "wastebasket", "category": "Objects", "aliases": [ "wastebasket" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F512}", "description": "locked", "category": "Objects", "aliases": [ "lock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F513}", "description": "unlocked", "category": "Objects", "aliases": [ "unlock" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F50F}", "description": "locked with pen", "category": "Objects", "aliases": [ "lock_with_ink_pen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F510}", "description": "locked with key", "category": "Objects", "aliases": [ "closed_lock_with_key" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F511}", "description": "key", "category": "Objects", "aliases": [ "key" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5DD}\uFE0F", "description": "old key", "category": "Objects", "aliases": [ "old_key" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F528}", "description": "hammer", "category": "Objects", "aliases": [ "hammer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA93}", "description": "axe", "category": "Objects", "aliases": [ "axe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26CF\uFE0F", "description": "pick", "category": "Objects", "aliases": [ "pick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2692\uFE0F", "description": "hammer and pick", "category": "Objects", "aliases": [ "hammer_and_pick" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E0}\uFE0F", "description": "hammer and wrench", "category": "Objects", "aliases": [ "hammer_and_wrench" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5E1}\uFE0F", "description": "dagger", "category": "Objects", "aliases": [ "dagger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2694\uFE0F", "description": "crossed swords", "category": "Objects", "aliases": [ "crossed_swords" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F52B}", "description": "pistol", "category": "Objects", "aliases": [ "gun" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F9}", "description": "bow and arrow", "category": "Objects", "aliases": [ "bow_and_arrow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6E1}\uFE0F", "description": "shield", "category": "Objects", "aliases": [ "shield" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F527}", "description": "wrench", "category": "Objects", "aliases": [ "wrench" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F529}", "description": "nut and bolt", "category": "Objects", "aliases": [ "nut_and_bolt" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2699\uFE0F", "description": "gear", "category": "Objects", "aliases": [ "gear" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5DC}\uFE0F", "description": "clamp", "category": "Objects", "aliases": [ "clamp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2696\uFE0F", "description": "balance scale", "category": "Objects", "aliases": [ "balance_scale" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9AF}", "description": "white cane", "category": "Objects", "aliases": [ "probing_cane" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F517}", "description": "link", "category": "Objects", "aliases": [ "link" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26D3\uFE0F", "description": "chains", "category": "Objects", "aliases": [ "chains" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F0}", "description": "toolbox", "category": "Objects", "aliases": [ "toolbox" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F2}", "description": "magnet", "category": "Objects", "aliases": [ "magnet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2697\uFE0F", "description": "alembic", "category": "Objects", "aliases": [ "alembic" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9EA}", "description": "test tube", "category": "Objects", "aliases": [ "test_tube" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9EB}", "description": "petri dish", "category": "Objects", "aliases": [ "petri_dish" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9EC}", "description": "dna", "category": "Objects", "aliases": [ "dna" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F52C}", "description": "microscope", "category": "Objects", "aliases": [ "microscope" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F52D}", "description": "telescope", "category": "Objects", "aliases": [ "telescope" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4E1}", "description": "satellite antenna", "category": "Objects", "aliases": [ "satellite" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F489}", "description": "syringe", "category": "Objects", "aliases": [ "syringe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA78}", "description": "drop of blood", "category": "Objects", "aliases": [ "drop_of_blood" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F48A}", "description": "pill", "category": "Objects", "aliases": [ "pill" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA79}", "description": "adhesive bandage", "category": "Objects", "aliases": [ "adhesive_bandage" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA7A}", "description": "stethoscope", "category": "Objects", "aliases": [ "stethoscope" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6AA}", "description": "door", "category": "Objects", "aliases": [ "door" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6CF}\uFE0F", "description": "bed", "category": "Objects", "aliases": [ "bed" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6CB}\uFE0F", "description": "couch and lamp", "category": "Objects", "aliases": [ "couch_and_lamp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA91}", "description": "chair", "category": "Objects", "aliases": [ "chair" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6BD}", "description": "toilet", "category": "Objects", "aliases": [ "toilet" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6BF}", "description": "shower", "category": "Objects", "aliases": [ "shower" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6C1}", "description": "bathtub", "category": "Objects", "aliases": [ "bathtub" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1FA92}", "description": "razor", "category": "Objects", "aliases": [ "razor" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F4}", "description": "lotion bottle", "category": "Objects", "aliases": [ "lotion_bottle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F7}", "description": "safety pin", "category": "Objects", "aliases": [ "safety_pin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9F9}", "description": "broom", "category": "Objects", "aliases": [ "broom" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9FA}", "description": "basket", "category": "Objects", "aliases": [ "basket" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9FB}", "description": "roll of paper", "category": "Objects", "aliases": [ "roll_of_paper" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9FC}", "description": "soap", "category": "Objects", "aliases": [ "soap" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9FD}", "description": "sponge", "category": "Objects", "aliases": [ "sponge" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F9EF}", "description": "fire extinguisher", "category": "Objects", "aliases": [ "fire_extinguisher" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6D2}", "description": "shopping cart", "category": "Objects", "aliases": [ "shopping_cart" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6AC}", "description": "cigarette", "category": "Objects", "aliases": [ "smoking" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26B0\uFE0F", "description": "coffin", "category": "Objects", "aliases": [ "coffin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26B1\uFE0F", "description": "funeral urn", "category": "Objects", "aliases": [ "funeral_urn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F5FF}", "description": "moai", "category": "Objects", "aliases": [ "moyai" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3E7}", "description": "ATM sign", "category": "Symbols", "aliases": [ "atm" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6AE}", "description": "litter in bin sign", "category": "Symbols", "aliases": [ "put_litter_in_its_place" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B0}", "description": "potable water", "category": "Symbols", "aliases": [ "potable_water" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u267F", "description": "wheelchair symbol", "category": "Symbols", "aliases": [ "wheelchair" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B9}", "description": "men\u2019s room", "category": "Symbols", "aliases": [ "mens" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6BA}", "description": "women\u2019s room", "category": "Symbols", "aliases": [ "womens" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6BB}", "description": "restroom", "category": "Symbols", "aliases": [ "restroom" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6BC}", "description": "baby symbol", "category": "Symbols", "aliases": [ "baby_symbol" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6BE}", "description": "water closet", "category": "Symbols", "aliases": [ "wc" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6C2}", "description": "passport control", "category": "Symbols", "aliases": [ "passport_control" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6C3}", "description": "customs", "category": "Symbols", "aliases": [ "customs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6C4}", "description": "baggage claim", "category": "Symbols", "aliases": [ "baggage_claim" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6C5}", "description": "left luggage", "category": "Symbols", "aliases": [ "left_luggage" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26A0\uFE0F", "description": "warning", "category": "Symbols", "aliases": [ "warning" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B8}", "description": "children crossing", "category": "Symbols", "aliases": [ "children_crossing" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26D4", "description": "no entry", "category": "Symbols", "aliases": [ "no_entry" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6AB}", "description": "prohibited", "category": "Symbols", "aliases": [ "no_entry_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B3}", "description": "no bicycles", "category": "Symbols", "aliases": [ "no_bicycles" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6AD}", "description": "no smoking", "category": "Symbols", "aliases": [ "no_smoking" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6AF}", "description": "no littering", "category": "Symbols", "aliases": [ "do_not_litter" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B1}", "description": "non-potable water", "category": "Symbols", "aliases": [ "non-potable_water" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6B7}", "description": "no pedestrians", "category": "Symbols", "aliases": [ "no_pedestrians" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F5}", "description": "no mobile phones", "category": "Symbols", "aliases": [ "no_mobile_phones" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F51E}", "description": "no one under eighteen", "category": "Symbols", "aliases": [ "underage" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2622\uFE0F", "description": "radioactive", "category": "Symbols", "aliases": [ "radioactive" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2623\uFE0F", "description": "biohazard", "category": "Symbols", "aliases": [ "biohazard" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B06\uFE0F", "description": "up arrow", "category": "Symbols", "aliases": [ "arrow_up" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2197\uFE0F", "description": "up-right arrow", "category": "Symbols", "aliases": [ "arrow_upper_right" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u27A1\uFE0F", "description": "right arrow", "category": "Symbols", "aliases": [ "arrow_right" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2198\uFE0F", "description": "down-right arrow", "category": "Symbols", "aliases": [ "arrow_lower_right" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B07\uFE0F", "description": "down arrow", "category": "Symbols", "aliases": [ "arrow_down" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2199\uFE0F", "description": "down-left arrow", "category": "Symbols", "aliases": [ "arrow_lower_left" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B05\uFE0F", "description": "left arrow", "category": "Symbols", "aliases": [ "arrow_left" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2196\uFE0F", "description": "up-left arrow", "category": "Symbols", "aliases": [ "arrow_upper_left" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2195\uFE0F", "description": "up-down arrow", "category": "Symbols", "aliases": [ "arrow_up_down" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2194\uFE0F", "description": "left-right arrow", "category": "Symbols", "aliases": [ "left_right_arrow" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u21A9\uFE0F", "description": "right arrow curving left", "category": "Symbols", "aliases": [ "leftwards_arrow_with_hook" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u21AA\uFE0F", "description": "left arrow curving right", "category": "Symbols", "aliases": [ "arrow_right_hook" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2934\uFE0F", "description": "right arrow curving up", "category": "Symbols", "aliases": [ "arrow_heading_up" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2935\uFE0F", "description": "right arrow curving down", "category": "Symbols", "aliases": [ "arrow_heading_down" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F503}", "description": "clockwise vertical arrows", "category": "Symbols", "aliases": [ "arrows_clockwise" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F504}", "description": "counterclockwise arrows button", "category": "Symbols", "aliases": [ "arrows_counterclockwise" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F519}", "description": "BACK arrow", "category": "Symbols", "aliases": [ "back" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F51A}", "description": "END arrow", "category": "Symbols", "aliases": [ "end" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F51B}", "description": "ON! arrow", "category": "Symbols", "aliases": [ "on" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F51C}", "description": "SOON arrow", "category": "Symbols", "aliases": [ "soon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F51D}", "description": "TOP arrow", "category": "Symbols", "aliases": [ "top" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6D0}", "description": "place of worship", "category": "Symbols", "aliases": [ "place_of_worship" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u269B\uFE0F", "description": "atom symbol", "category": "Symbols", "aliases": [ "atom_symbol" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F549}\uFE0F", "description": "om", "category": "Symbols", "aliases": [ "om" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2721\uFE0F", "description": "star of David", "category": "Symbols", "aliases": [ "star_of_david" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2638\uFE0F", "description": "wheel of dharma", "category": "Symbols", "aliases": [ "wheel_of_dharma" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u262F\uFE0F", "description": "yin yang", "category": "Symbols", "aliases": [ "yin_yang" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u271D\uFE0F", "description": "latin cross", "category": "Symbols", "aliases": [ "latin_cross" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2626\uFE0F", "description": "orthodox cross", "category": "Symbols", "aliases": [ "orthodox_cross" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u262A\uFE0F", "description": "star and crescent", "category": "Symbols", "aliases": [ "star_and_crescent" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u262E\uFE0F", "description": "peace symbol", "category": "Symbols", "aliases": [ "peace_symbol" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F54E}", "description": "menorah", "category": "Symbols", "aliases": [ "menorah" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F52F}", "description": "dotted six-pointed star", "category": "Symbols", "aliases": [ "six_pointed_star" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2648", "description": "Aries", "category": "Symbols", "aliases": [ "aries" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2649", "description": "Taurus", "category": "Symbols", "aliases": [ "taurus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u264A", "description": "Gemini", "category": "Symbols", "aliases": [ "gemini" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u264B", "description": "Cancer", "category": "Symbols", "aliases": [ "cancer" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u264C", "description": "Leo", "category": "Symbols", "aliases": [ "leo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u264D", "description": "Virgo", "category": "Symbols", "aliases": [ "virgo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u264E", "description": "Libra", "category": "Symbols", "aliases": [ "libra" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u264F", "description": "Scorpio", "category": "Symbols", "aliases": [ "scorpius" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2650", "description": "Sagittarius", "category": "Symbols", "aliases": [ "sagittarius" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2651", "description": "Capricorn", "category": "Symbols", "aliases": [ "capricorn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2652", "description": "Aquarius", "category": "Symbols", "aliases": [ "aquarius" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2653", "description": "Pisces", "category": "Symbols", "aliases": [ "pisces" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26CE", "description": "Ophiuchus", "category": "Symbols", "aliases": [ "ophiuchus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F500}", "description": "shuffle tracks button", "category": "Symbols", "aliases": [ "twisted_rightwards_arrows" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F501}", "description": "repeat button", "category": "Symbols", "aliases": [ "repeat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F502}", "description": "repeat single button", "category": "Symbols", "aliases": [ "repeat_one" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25B6\uFE0F", "description": "play button", "category": "Symbols", "aliases": [ "arrow_forward" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23E9", "description": "fast-forward button", "category": "Symbols", "aliases": [ "fast_forward" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23ED\uFE0F", "description": "next track button", "category": "Symbols", "aliases": [ "next_track_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23EF\uFE0F", "description": "play or pause button", "category": "Symbols", "aliases": [ "play_or_pause_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25C0\uFE0F", "description": "reverse button", "category": "Symbols", "aliases": [ "arrow_backward" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23EA", "description": "fast reverse button", "category": "Symbols", "aliases": [ "rewind" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23EE\uFE0F", "description": "last track button", "category": "Symbols", "aliases": [ "previous_track_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F53C}", "description": "upwards button", "category": "Symbols", "aliases": [ "arrow_up_small" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23EB", "description": "fast up button", "category": "Symbols", "aliases": [ "arrow_double_up" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F53D}", "description": "downwards button", "category": "Symbols", "aliases": [ "arrow_down_small" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23EC", "description": "fast down button", "category": "Symbols", "aliases": [ "arrow_double_down" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23F8\uFE0F", "description": "pause button", "category": "Symbols", "aliases": [ "pause_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23F9\uFE0F", "description": "stop button", "category": "Symbols", "aliases": [ "stop_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23FA\uFE0F", "description": "record button", "category": "Symbols", "aliases": [ "record_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u23CF\uFE0F", "description": "eject button", "category": "Symbols", "aliases": [ "eject_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3A6}", "description": "cinema", "category": "Symbols", "aliases": [ "cinema" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F505}", "description": "dim button", "category": "Symbols", "aliases": [ "low_brightness" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F506}", "description": "bright button", "category": "Symbols", "aliases": [ "high_brightness" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F6}", "description": "antenna bars", "category": "Symbols", "aliases": [ "signal_strength" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F3}", "description": "vibration mode", "category": "Symbols", "aliases": [ "vibration_mode" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4F4}", "description": "mobile phone off", "category": "Symbols", "aliases": [ "mobile_phone_off" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2640\uFE0F", "description": "female sign", "category": "Symbols", "aliases": [ "female_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2642\uFE0F", "description": "male sign", "category": "Symbols", "aliases": [ "male_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26A7\uFE0F", "description": "transgender symbol", "category": "Symbols", "aliases": [ "transgender_symbol" ], "hasMarkdownRepresentation": false }, { "emojiRaw": "\u2716\uFE0F", "description": "multiply", "category": "Symbols", "aliases": [ "heavy_multiplication_x" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2795", "description": "plus", "category": "Symbols", "aliases": [ "heavy_plus_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2796", "description": "minus", "category": "Symbols", "aliases": [ "heavy_minus_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2797", "description": "divide", "category": "Symbols", "aliases": [ "heavy_division_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u267E\uFE0F", "description": "infinity", "category": "Symbols", "aliases": [ "infinity" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u203C\uFE0F", "description": "double exclamation mark", "category": "Symbols", "aliases": [ "bangbang" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2049\uFE0F", "description": "exclamation question mark", "category": "Symbols", "aliases": [ "interrobang" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2753", "description": "question mark", "category": "Symbols", "aliases": [ "question" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2754", "description": "white question mark", "category": "Symbols", "aliases": [ "grey_question" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2755", "description": "white exclamation mark", "category": "Symbols", "aliases": [ "grey_exclamation" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2757", "description": "exclamation mark", "category": "Symbols", "aliases": [ "exclamation", "heavy_exclamation_mark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u3030\uFE0F", "description": "wavy dash", "category": "Symbols", "aliases": [ "wavy_dash" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B1}", "description": "currency exchange", "category": "Symbols", "aliases": [ "currency_exchange" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4B2}", "description": "heavy dollar sign", "category": "Symbols", "aliases": [ "heavy_dollar_sign" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2695\uFE0F", "description": "medical symbol", "category": "Symbols", "aliases": [ "medical_symbol" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u267B\uFE0F", "description": "recycling symbol", "category": "Symbols", "aliases": [ "recycle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u269C\uFE0F", "description": "fleur-de-lis", "category": "Symbols", "aliases": [ "fleur_de_lis" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F531}", "description": "trident emblem", "category": "Symbols", "aliases": [ "trident" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4DB}", "description": "name badge", "category": "Symbols", "aliases": [ "name_badge" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F530}", "description": "Japanese symbol for beginner", "category": "Symbols", "aliases": [ "beginner" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B55", "description": "hollow red circle", "category": "Symbols", "aliases": [ "o" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2705", "description": "check mark button", "category": "Symbols", "aliases": [ "white_check_mark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2611\uFE0F", "description": "check box with check", "category": "Symbols", "aliases": [ "ballot_box_with_check" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2714\uFE0F", "description": "check mark", "category": "Symbols", "aliases": [ "heavy_check_mark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u274C", "description": "cross mark", "category": "Symbols", "aliases": [ "x" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u274E", "description": "cross mark button", "category": "Symbols", "aliases": [ "negative_squared_cross_mark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u27B0", "description": "curly loop", "category": "Symbols", "aliases": [ "curly_loop" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u27BF", "description": "double curly loop", "category": "Symbols", "aliases": [ "loop" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u303D\uFE0F", "description": "part alternation mark", "category": "Symbols", "aliases": [ "part_alternation_mark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2733\uFE0F", "description": "eight-spoked asterisk", "category": "Symbols", "aliases": [ "eight_spoked_asterisk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2734\uFE0F", "description": "eight-pointed star", "category": "Symbols", "aliases": [ "eight_pointed_black_star" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2747\uFE0F", "description": "sparkle", "category": "Symbols", "aliases": [ "sparkle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\xA9\uFE0F", "description": "copyright", "category": "Symbols", "aliases": [ "copyright" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\xAE\uFE0F", "description": "registered", "category": "Symbols", "aliases": [ "registered" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2122\uFE0F", "description": "trade mark", "category": "Symbols", "aliases": [ "tm" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "#\uFE0F\u20E3", "description": "keycap: #", "category": "Symbols", "aliases": [ "hash" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "*\uFE0F\u20E3", "description": "keycap: *", "category": "Symbols", "aliases": [ "asterisk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "0\uFE0F\u20E3", "description": "keycap: 0", "category": "Symbols", "aliases": [ "zero" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "1\uFE0F\u20E3", "description": "keycap: 1", "category": "Symbols", "aliases": [ "one" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "2\uFE0F\u20E3", "description": "keycap: 2", "category": "Symbols", "aliases": [ "two" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "3\uFE0F\u20E3", "description": "keycap: 3", "category": "Symbols", "aliases": [ "three" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "4\uFE0F\u20E3", "description": "keycap: 4", "category": "Symbols", "aliases": [ "four" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "5\uFE0F\u20E3", "description": "keycap: 5", "category": "Symbols", "aliases": [ "five" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "6\uFE0F\u20E3", "description": "keycap: 6", "category": "Symbols", "aliases": [ "six" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "7\uFE0F\u20E3", "description": "keycap: 7", "category": "Symbols", "aliases": [ "seven" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "8\uFE0F\u20E3", "description": "keycap: 8", "category": "Symbols", "aliases": [ "eight" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "9\uFE0F\u20E3", "description": "keycap: 9", "category": "Symbols", "aliases": [ "nine" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F51F}", "description": "keycap: 10", "category": "Symbols", "aliases": [ "keycap_ten" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F520}", "description": "input latin uppercase", "category": "Symbols", "aliases": [ "capital_abcd" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F521}", "description": "input latin lowercase", "category": "Symbols", "aliases": [ "abcd" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F522}", "description": "input numbers", "category": "Symbols", "aliases": [ "1234" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F523}", "description": "input symbols", "category": "Symbols", "aliases": [ "symbols" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F524}", "description": "input latin letters", "category": "Symbols", "aliases": [ "abc" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F170}\uFE0F", "description": "A button (blood type)", "category": "Symbols", "aliases": [ "a" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F18E}", "description": "AB button (blood type)", "category": "Symbols", "aliases": [ "ab" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F171}\uFE0F", "description": "B button (blood type)", "category": "Symbols", "aliases": [ "b" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F191}", "description": "CL button", "category": "Symbols", "aliases": [ "cl" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F192}", "description": "COOL button", "category": "Symbols", "aliases": [ "cool" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F193}", "description": "FREE button", "category": "Symbols", "aliases": [ "free" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2139\uFE0F", "description": "information", "category": "Symbols", "aliases": [ "information_source" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F194}", "description": "ID button", "category": "Symbols", "aliases": [ "id" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u24C2\uFE0F", "description": "circled M", "category": "Symbols", "aliases": [ "m" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F195}", "description": "NEW button", "category": "Symbols", "aliases": [ "new" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F196}", "description": "NG button", "category": "Symbols", "aliases": [ "ng" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F17E}\uFE0F", "description": "O button (blood type)", "category": "Symbols", "aliases": [ "o2" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F197}", "description": "OK button", "category": "Symbols", "aliases": [ "ok" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F17F}\uFE0F", "description": "P button", "category": "Symbols", "aliases": [ "parking" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F198}", "description": "SOS button", "category": "Symbols", "aliases": [ "sos" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F199}", "description": "UP! button", "category": "Symbols", "aliases": [ "up" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F19A}", "description": "VS button", "category": "Symbols", "aliases": [ "vs" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F201}", "description": "Japanese \u201Chere\u201D button", "category": "Symbols", "aliases": [ "koko" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F202}\uFE0F", "description": "Japanese \u201Cservice charge\u201D button", "category": "Symbols", "aliases": [ "sa" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F237}\uFE0F", "description": "Japanese \u201Cmonthly amount\u201D button", "category": "Symbols", "aliases": [ "u6708" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F236}", "description": "Japanese \u201Cnot free of charge\u201D button", "category": "Symbols", "aliases": [ "u6709" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F22F}", "description": "Japanese \u201Creserved\u201D button", "category": "Symbols", "aliases": [ "u6307" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F250}", "description": "Japanese \u201Cbargain\u201D button", "category": "Symbols", "aliases": [ "ideograph_advantage" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F239}", "description": "Japanese \u201Cdiscount\u201D button", "category": "Symbols", "aliases": [ "u5272" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F21A}", "description": "Japanese \u201Cfree of charge\u201D button", "category": "Symbols", "aliases": [ "u7121" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F232}", "description": "Japanese \u201Cprohibited\u201D button", "category": "Symbols", "aliases": [ "u7981" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F251}", "description": "Japanese \u201Cacceptable\u201D button", "category": "Symbols", "aliases": [ "accept" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F238}", "description": "Japanese \u201Capplication\u201D button", "category": "Symbols", "aliases": [ "u7533" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F234}", "description": "Japanese \u201Cpassing grade\u201D button", "category": "Symbols", "aliases": [ "u5408" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F233}", "description": "Japanese \u201Cvacancy\u201D button", "category": "Symbols", "aliases": [ "u7a7a" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u3297\uFE0F", "description": "Japanese \u201Ccongratulations\u201D button", "category": "Symbols", "aliases": [ "congratulations" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u3299\uFE0F", "description": "Japanese \u201Csecret\u201D button", "category": "Symbols", "aliases": [ "secret" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F23A}", "description": "Japanese \u201Copen for business\u201D button", "category": "Symbols", "aliases": [ "u55b6" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F235}", "description": "Japanese \u201Cno vacancy\u201D button", "category": "Symbols", "aliases": [ "u6e80" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F534}", "description": "red circle", "category": "Symbols", "aliases": [ "red_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E0}", "description": "orange circle", "category": "Symbols", "aliases": [ "orange_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E1}", "description": "yellow circle", "category": "Symbols", "aliases": [ "yellow_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E2}", "description": "green circle", "category": "Symbols", "aliases": [ "green_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F535}", "description": "blue circle", "category": "Symbols", "aliases": [ "large_blue_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E3}", "description": "purple circle", "category": "Symbols", "aliases": [ "purple_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E4}", "description": "brown circle", "category": "Symbols", "aliases": [ "brown_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26AB", "description": "black circle", "category": "Symbols", "aliases": [ "black_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u26AA", "description": "white circle", "category": "Symbols", "aliases": [ "white_circle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E5}", "description": "red square", "category": "Symbols", "aliases": [ "red_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E7}", "description": "orange square", "category": "Symbols", "aliases": [ "orange_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E8}", "description": "yellow square", "category": "Symbols", "aliases": [ "yellow_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E9}", "description": "green square", "category": "Symbols", "aliases": [ "green_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7E6}", "description": "blue square", "category": "Symbols", "aliases": [ "blue_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7EA}", "description": "purple square", "category": "Symbols", "aliases": [ "purple_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F7EB}", "description": "brown square", "category": "Symbols", "aliases": [ "brown_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B1B", "description": "black large square", "category": "Symbols", "aliases": [ "black_large_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u2B1C", "description": "white large square", "category": "Symbols", "aliases": [ "white_large_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25FC\uFE0F", "description": "black medium square", "category": "Symbols", "aliases": [ "black_medium_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25FB\uFE0F", "description": "white medium square", "category": "Symbols", "aliases": [ "white_medium_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25FE", "description": "black medium-small square", "category": "Symbols", "aliases": [ "black_medium_small_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25FD", "description": "white medium-small square", "category": "Symbols", "aliases": [ "white_medium_small_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25AA\uFE0F", "description": "black small square", "category": "Symbols", "aliases": [ "black_small_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u25AB\uFE0F", "description": "white small square", "category": "Symbols", "aliases": [ "white_small_square" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F536}", "description": "large orange diamond", "category": "Symbols", "aliases": [ "large_orange_diamond" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F537}", "description": "large blue diamond", "category": "Symbols", "aliases": [ "large_blue_diamond" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F538}", "description": "small orange diamond", "category": "Symbols", "aliases": [ "small_orange_diamond" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F539}", "description": "small blue diamond", "category": "Symbols", "aliases": [ "small_blue_diamond" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F53A}", "description": "red triangle pointed up", "category": "Symbols", "aliases": [ "small_red_triangle" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F53B}", "description": "red triangle pointed down", "category": "Symbols", "aliases": [ "small_red_triangle_down" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F4A0}", "description": "diamond with a dot", "category": "Symbols", "aliases": [ "diamond_shape_with_a_dot_inside" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F518}", "description": "radio button", "category": "Symbols", "aliases": [ "radio_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F533}", "description": "white square button", "category": "Symbols", "aliases": [ "white_square_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F532}", "description": "black square button", "category": "Symbols", "aliases": [ "black_square_button" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3C1}", "description": "chequered flag", "category": "Flags", "aliases": [ "checkered_flag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F6A9}", "description": "triangular flag", "category": "Flags", "aliases": [ "triangular_flag_on_post" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F38C}", "description": "crossed flags", "category": "Flags", "aliases": [ "crossed_flags" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F4}", "description": "black flag", "category": "Flags", "aliases": [ "black_flag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F3}\uFE0F", "description": "white flag", "category": "Flags", "aliases": [ "white_flag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F3}\uFE0F\u200D\u{1F308}", "description": "rainbow flag", "category": "Flags", "aliases": [ "rainbow_flag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F", "description": "transgender flag", "category": "Flags", "aliases": [ "transgender_flag" ], "hasMarkdownRepresentation": false }, { "emojiRaw": "\u{1F3F4}\u200D\u2620\uFE0F", "description": "pirate flag", "category": "Flags", "aliases": [ "pirate_flag" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1E8}", "description": "flag: Ascension Island", "category": "Flags", "aliases": [ "ascension_island" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1E9}", "description": "flag: Andorra", "category": "Flags", "aliases": [ "andorra" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1EA}", "description": "flag: United Arab Emirates", "category": "Flags", "aliases": [ "united_arab_emirates" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1EB}", "description": "flag: Afghanistan", "category": "Flags", "aliases": [ "afghanistan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1EC}", "description": "flag: Antigua & Barbuda", "category": "Flags", "aliases": [ "antigua_barbuda" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1EE}", "description": "flag: Anguilla", "category": "Flags", "aliases": [ "anguilla" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F1}", "description": "flag: Albania", "category": "Flags", "aliases": [ "albania" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F2}", "description": "flag: Armenia", "category": "Flags", "aliases": [ "armenia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F4}", "description": "flag: Angola", "category": "Flags", "aliases": [ "angola" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F6}", "description": "flag: Antarctica", "category": "Flags", "aliases": [ "antarctica" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F7}", "description": "flag: Argentina", "category": "Flags", "aliases": [ "argentina" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F8}", "description": "flag: American Samoa", "category": "Flags", "aliases": [ "american_samoa" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1F9}", "description": "flag: Austria", "category": "Flags", "aliases": [ "austria" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1FA}", "description": "flag: Australia", "category": "Flags", "aliases": [ "australia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1FC}", "description": "flag: Aruba", "category": "Flags", "aliases": [ "aruba" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1FD}", "description": "flag: \xC5land Islands", "category": "Flags", "aliases": [ "aland_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E6}\u{1F1FF}", "description": "flag: Azerbaijan", "category": "Flags", "aliases": [ "azerbaijan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1E6}", "description": "flag: Bosnia & Herzegovina", "category": "Flags", "aliases": [ "bosnia_herzegovina" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1E7}", "description": "flag: Barbados", "category": "Flags", "aliases": [ "barbados" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1E9}", "description": "flag: Bangladesh", "category": "Flags", "aliases": [ "bangladesh" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1EA}", "description": "flag: Belgium", "category": "Flags", "aliases": [ "belgium" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1EB}", "description": "flag: Burkina Faso", "category": "Flags", "aliases": [ "burkina_faso" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1EC}", "description": "flag: Bulgaria", "category": "Flags", "aliases": [ "bulgaria" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1ED}", "description": "flag: Bahrain", "category": "Flags", "aliases": [ "bahrain" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1EE}", "description": "flag: Burundi", "category": "Flags", "aliases": [ "burundi" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1EF}", "description": "flag: Benin", "category": "Flags", "aliases": [ "benin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F1}", "description": "flag: St. Barth\xE9lemy", "category": "Flags", "aliases": [ "st_barthelemy" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F2}", "description": "flag: Bermuda", "category": "Flags", "aliases": [ "bermuda" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F3}", "description": "flag: Brunei", "category": "Flags", "aliases": [ "brunei" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F4}", "description": "flag: Bolivia", "category": "Flags", "aliases": [ "bolivia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F6}", "description": "flag: Caribbean Netherlands", "category": "Flags", "aliases": [ "caribbean_netherlands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F7}", "description": "flag: Brazil", "category": "Flags", "aliases": [ "brazil" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F8}", "description": "flag: Bahamas", "category": "Flags", "aliases": [ "bahamas" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1F9}", "description": "flag: Bhutan", "category": "Flags", "aliases": [ "bhutan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1FB}", "description": "flag: Bouvet Island", "category": "Flags", "aliases": [ "bouvet_island" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1FC}", "description": "flag: Botswana", "category": "Flags", "aliases": [ "botswana" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1FE}", "description": "flag: Belarus", "category": "Flags", "aliases": [ "belarus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E7}\u{1F1FF}", "description": "flag: Belize", "category": "Flags", "aliases": [ "belize" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1E6}", "description": "flag: Canada", "category": "Flags", "aliases": [ "canada" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1E8}", "description": "flag: Cocos (Keeling) Islands", "category": "Flags", "aliases": [ "cocos_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1E9}", "description": "flag: Congo - Kinshasa", "category": "Flags", "aliases": [ "congo_kinshasa" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1EB}", "description": "flag: Central African Republic", "category": "Flags", "aliases": [ "central_african_republic" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1EC}", "description": "flag: Congo - Brazzaville", "category": "Flags", "aliases": [ "congo_brazzaville" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1ED}", "description": "flag: Switzerland", "category": "Flags", "aliases": [ "switzerland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1EE}", "description": "flag: C\xF4te d\u2019Ivoire", "category": "Flags", "aliases": [ "cote_divoire" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F0}", "description": "flag: Cook Islands", "category": "Flags", "aliases": [ "cook_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F1}", "description": "flag: Chile", "category": "Flags", "aliases": [ "chile" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F2}", "description": "flag: Cameroon", "category": "Flags", "aliases": [ "cameroon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F3}", "description": "flag: China", "category": "Flags", "aliases": [ "cn" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F4}", "description": "flag: Colombia", "category": "Flags", "aliases": [ "colombia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F5}", "description": "flag: Clipperton Island", "category": "Flags", "aliases": [ "clipperton_island" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1F7}", "description": "flag: Costa Rica", "category": "Flags", "aliases": [ "costa_rica" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1FA}", "description": "flag: Cuba", "category": "Flags", "aliases": [ "cuba" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1FB}", "description": "flag: Cape Verde", "category": "Flags", "aliases": [ "cape_verde" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1FC}", "description": "flag: Cura\xE7ao", "category": "Flags", "aliases": [ "curacao" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1FD}", "description": "flag: Christmas Island", "category": "Flags", "aliases": [ "christmas_island" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1FE}", "description": "flag: Cyprus", "category": "Flags", "aliases": [ "cyprus" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E8}\u{1F1FF}", "description": "flag: Czechia", "category": "Flags", "aliases": [ "czech_republic" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1EA}", "description": "flag: Germany", "category": "Flags", "aliases": [ "de" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1EC}", "description": "flag: Diego Garcia", "category": "Flags", "aliases": [ "diego_garcia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1EF}", "description": "flag: Djibouti", "category": "Flags", "aliases": [ "djibouti" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1F0}", "description": "flag: Denmark", "category": "Flags", "aliases": [ "denmark" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1F2}", "description": "flag: Dominica", "category": "Flags", "aliases": [ "dominica" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1F4}", "description": "flag: Dominican Republic", "category": "Flags", "aliases": [ "dominican_republic" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1E9}\u{1F1FF}", "description": "flag: Algeria", "category": "Flags", "aliases": [ "algeria" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1E6}", "description": "flag: Ceuta & Melilla", "category": "Flags", "aliases": [ "ceuta_melilla" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1E8}", "description": "flag: Ecuador", "category": "Flags", "aliases": [ "ecuador" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1EA}", "description": "flag: Estonia", "category": "Flags", "aliases": [ "estonia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1EC}", "description": "flag: Egypt", "category": "Flags", "aliases": [ "egypt" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1ED}", "description": "flag: Western Sahara", "category": "Flags", "aliases": [ "western_sahara" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1F7}", "description": "flag: Eritrea", "category": "Flags", "aliases": [ "eritrea" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1F8}", "description": "flag: Spain", "category": "Flags", "aliases": [ "es" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1F9}", "description": "flag: Ethiopia", "category": "Flags", "aliases": [ "ethiopia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EA}\u{1F1FA}", "description": "flag: European Union", "category": "Flags", "aliases": [ "eu", "european_union" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EB}\u{1F1EE}", "description": "flag: Finland", "category": "Flags", "aliases": [ "finland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EB}\u{1F1EF}", "description": "flag: Fiji", "category": "Flags", "aliases": [ "fiji" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EB}\u{1F1F0}", "description": "flag: Falkland Islands", "category": "Flags", "aliases": [ "falkland_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EB}\u{1F1F2}", "description": "flag: Micronesia", "category": "Flags", "aliases": [ "micronesia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EB}\u{1F1F4}", "description": "flag: Faroe Islands", "category": "Flags", "aliases": [ "faroe_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EB}\u{1F1F7}", "description": "flag: France", "category": "Flags", "aliases": [ "fr" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1E6}", "description": "flag: Gabon", "category": "Flags", "aliases": [ "gabon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1E7}", "description": "flag: United Kingdom", "category": "Flags", "aliases": [ "gb", "uk" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1E9}", "description": "flag: Grenada", "category": "Flags", "aliases": [ "grenada" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1EA}", "description": "flag: Georgia", "category": "Flags", "aliases": [ "georgia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1EB}", "description": "flag: French Guiana", "category": "Flags", "aliases": [ "french_guiana" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1EC}", "description": "flag: Guernsey", "category": "Flags", "aliases": [ "guernsey" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1ED}", "description": "flag: Ghana", "category": "Flags", "aliases": [ "ghana" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1EE}", "description": "flag: Gibraltar", "category": "Flags", "aliases": [ "gibraltar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F1}", "description": "flag: Greenland", "category": "Flags", "aliases": [ "greenland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F2}", "description": "flag: Gambia", "category": "Flags", "aliases": [ "gambia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F3}", "description": "flag: Guinea", "category": "Flags", "aliases": [ "guinea" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F5}", "description": "flag: Guadeloupe", "category": "Flags", "aliases": [ "guadeloupe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F6}", "description": "flag: Equatorial Guinea", "category": "Flags", "aliases": [ "equatorial_guinea" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F7}", "description": "flag: Greece", "category": "Flags", "aliases": [ "greece" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F8}", "description": "flag: South Georgia & South Sandwich Islands", "category": "Flags", "aliases": [ "south_georgia_south_sandwich_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1F9}", "description": "flag: Guatemala", "category": "Flags", "aliases": [ "guatemala" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1FA}", "description": "flag: Guam", "category": "Flags", "aliases": [ "guam" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1FC}", "description": "flag: Guinea-Bissau", "category": "Flags", "aliases": [ "guinea_bissau" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EC}\u{1F1FE}", "description": "flag: Guyana", "category": "Flags", "aliases": [ "guyana" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1ED}\u{1F1F0}", "description": "flag: Hong Kong SAR China", "category": "Flags", "aliases": [ "hong_kong" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1ED}\u{1F1F2}", "description": "flag: Heard & McDonald Islands", "category": "Flags", "aliases": [ "heard_mcdonald_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1ED}\u{1F1F3}", "description": "flag: Honduras", "category": "Flags", "aliases": [ "honduras" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1ED}\u{1F1F7}", "description": "flag: Croatia", "category": "Flags", "aliases": [ "croatia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1ED}\u{1F1F9}", "description": "flag: Haiti", "category": "Flags", "aliases": [ "haiti" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1ED}\u{1F1FA}", "description": "flag: Hungary", "category": "Flags", "aliases": [ "hungary" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1E8}", "description": "flag: Canary Islands", "category": "Flags", "aliases": [ "canary_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1E9}", "description": "flag: Indonesia", "category": "Flags", "aliases": [ "indonesia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1EA}", "description": "flag: Ireland", "category": "Flags", "aliases": [ "ireland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F1}", "description": "flag: Israel", "category": "Flags", "aliases": [ "israel" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F2}", "description": "flag: Isle of Man", "category": "Flags", "aliases": [ "isle_of_man" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F3}", "description": "flag: India", "category": "Flags", "aliases": [ "india" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F4}", "description": "flag: British Indian Ocean Territory", "category": "Flags", "aliases": [ "british_indian_ocean_territory" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F6}", "description": "flag: Iraq", "category": "Flags", "aliases": [ "iraq" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F7}", "description": "flag: Iran", "category": "Flags", "aliases": [ "iran" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F8}", "description": "flag: Iceland", "category": "Flags", "aliases": [ "iceland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EE}\u{1F1F9}", "description": "flag: Italy", "category": "Flags", "aliases": [ "it" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EF}\u{1F1EA}", "description": "flag: Jersey", "category": "Flags", "aliases": [ "jersey" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EF}\u{1F1F2}", "description": "flag: Jamaica", "category": "Flags", "aliases": [ "jamaica" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EF}\u{1F1F4}", "description": "flag: Jordan", "category": "Flags", "aliases": [ "jordan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1EF}\u{1F1F5}", "description": "flag: Japan", "category": "Flags", "aliases": [ "jp" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1EA}", "description": "flag: Kenya", "category": "Flags", "aliases": [ "kenya" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1EC}", "description": "flag: Kyrgyzstan", "category": "Flags", "aliases": [ "kyrgyzstan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1ED}", "description": "flag: Cambodia", "category": "Flags", "aliases": [ "cambodia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1EE}", "description": "flag: Kiribati", "category": "Flags", "aliases": [ "kiribati" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1F2}", "description": "flag: Comoros", "category": "Flags", "aliases": [ "comoros" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1F3}", "description": "flag: St. Kitts & Nevis", "category": "Flags", "aliases": [ "st_kitts_nevis" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1F5}", "description": "flag: North Korea", "category": "Flags", "aliases": [ "north_korea" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1F7}", "description": "flag: South Korea", "category": "Flags", "aliases": [ "kr" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1FC}", "description": "flag: Kuwait", "category": "Flags", "aliases": [ "kuwait" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1FE}", "description": "flag: Cayman Islands", "category": "Flags", "aliases": [ "cayman_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F0}\u{1F1FF}", "description": "flag: Kazakhstan", "category": "Flags", "aliases": [ "kazakhstan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1E6}", "description": "flag: Laos", "category": "Flags", "aliases": [ "laos" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1E7}", "description": "flag: Lebanon", "category": "Flags", "aliases": [ "lebanon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1E8}", "description": "flag: St. Lucia", "category": "Flags", "aliases": [ "st_lucia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1EE}", "description": "flag: Liechtenstein", "category": "Flags", "aliases": [ "liechtenstein" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1F0}", "description": "flag: Sri Lanka", "category": "Flags", "aliases": [ "sri_lanka" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1F7}", "description": "flag: Liberia", "category": "Flags", "aliases": [ "liberia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1F8}", "description": "flag: Lesotho", "category": "Flags", "aliases": [ "lesotho" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1F9}", "description": "flag: Lithuania", "category": "Flags", "aliases": [ "lithuania" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1FA}", "description": "flag: Luxembourg", "category": "Flags", "aliases": [ "luxembourg" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1FB}", "description": "flag: Latvia", "category": "Flags", "aliases": [ "latvia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F1}\u{1F1FE}", "description": "flag: Libya", "category": "Flags", "aliases": [ "libya" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1E6}", "description": "flag: Morocco", "category": "Flags", "aliases": [ "morocco" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1E8}", "description": "flag: Monaco", "category": "Flags", "aliases": [ "monaco" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1E9}", "description": "flag: Moldova", "category": "Flags", "aliases": [ "moldova" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1EA}", "description": "flag: Montenegro", "category": "Flags", "aliases": [ "montenegro" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1EB}", "description": "flag: St. Martin", "category": "Flags", "aliases": [ "st_martin" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1EC}", "description": "flag: Madagascar", "category": "Flags", "aliases": [ "madagascar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1ED}", "description": "flag: Marshall Islands", "category": "Flags", "aliases": [ "marshall_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F0}", "description": "flag: North Macedonia", "category": "Flags", "aliases": [ "macedonia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F1}", "description": "flag: Mali", "category": "Flags", "aliases": [ "mali" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F2}", "description": "flag: Myanmar (Burma)", "category": "Flags", "aliases": [ "myanmar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F3}", "description": "flag: Mongolia", "category": "Flags", "aliases": [ "mongolia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F4}", "description": "flag: Macao SAR China", "category": "Flags", "aliases": [ "macau" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F5}", "description": "flag: Northern Mariana Islands", "category": "Flags", "aliases": [ "northern_mariana_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F6}", "description": "flag: Martinique", "category": "Flags", "aliases": [ "martinique" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F7}", "description": "flag: Mauritania", "category": "Flags", "aliases": [ "mauritania" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F8}", "description": "flag: Montserrat", "category": "Flags", "aliases": [ "montserrat" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1F9}", "description": "flag: Malta", "category": "Flags", "aliases": [ "malta" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1FA}", "description": "flag: Mauritius", "category": "Flags", "aliases": [ "mauritius" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1FB}", "description": "flag: Maldives", "category": "Flags", "aliases": [ "maldives" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1FC}", "description": "flag: Malawi", "category": "Flags", "aliases": [ "malawi" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1FD}", "description": "flag: Mexico", "category": "Flags", "aliases": [ "mexico" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1FE}", "description": "flag: Malaysia", "category": "Flags", "aliases": [ "malaysia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F2}\u{1F1FF}", "description": "flag: Mozambique", "category": "Flags", "aliases": [ "mozambique" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1E6}", "description": "flag: Namibia", "category": "Flags", "aliases": [ "namibia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1E8}", "description": "flag: New Caledonia", "category": "Flags", "aliases": [ "new_caledonia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1EA}", "description": "flag: Niger", "category": "Flags", "aliases": [ "niger" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1EB}", "description": "flag: Norfolk Island", "category": "Flags", "aliases": [ "norfolk_island" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1EC}", "description": "flag: Nigeria", "category": "Flags", "aliases": [ "nigeria" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1EE}", "description": "flag: Nicaragua", "category": "Flags", "aliases": [ "nicaragua" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1F1}", "description": "flag: Netherlands", "category": "Flags", "aliases": [ "netherlands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1F4}", "description": "flag: Norway", "category": "Flags", "aliases": [ "norway" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1F5}", "description": "flag: Nepal", "category": "Flags", "aliases": [ "nepal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1F7}", "description": "flag: Nauru", "category": "Flags", "aliases": [ "nauru" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1FA}", "description": "flag: Niue", "category": "Flags", "aliases": [ "niue" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F3}\u{1F1FF}", "description": "flag: New Zealand", "category": "Flags", "aliases": [ "new_zealand" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F4}\u{1F1F2}", "description": "flag: Oman", "category": "Flags", "aliases": [ "oman" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1E6}", "description": "flag: Panama", "category": "Flags", "aliases": [ "panama" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1EA}", "description": "flag: Peru", "category": "Flags", "aliases": [ "peru" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1EB}", "description": "flag: French Polynesia", "category": "Flags", "aliases": [ "french_polynesia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1EC}", "description": "flag: Papua New Guinea", "category": "Flags", "aliases": [ "papua_new_guinea" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1ED}", "description": "flag: Philippines", "category": "Flags", "aliases": [ "philippines" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F0}", "description": "flag: Pakistan", "category": "Flags", "aliases": [ "pakistan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F1}", "description": "flag: Poland", "category": "Flags", "aliases": [ "poland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F2}", "description": "flag: St. Pierre & Miquelon", "category": "Flags", "aliases": [ "st_pierre_miquelon" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F3}", "description": "flag: Pitcairn Islands", "category": "Flags", "aliases": [ "pitcairn_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F7}", "description": "flag: Puerto Rico", "category": "Flags", "aliases": [ "puerto_rico" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F8}", "description": "flag: Palestinian Territories", "category": "Flags", "aliases": [ "palestinian_territories" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1F9}", "description": "flag: Portugal", "category": "Flags", "aliases": [ "portugal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1FC}", "description": "flag: Palau", "category": "Flags", "aliases": [ "palau" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F5}\u{1F1FE}", "description": "flag: Paraguay", "category": "Flags", "aliases": [ "paraguay" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F6}\u{1F1E6}", "description": "flag: Qatar", "category": "Flags", "aliases": [ "qatar" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F7}\u{1F1EA}", "description": "flag: R\xE9union", "category": "Flags", "aliases": [ "reunion" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F7}\u{1F1F4}", "description": "flag: Romania", "category": "Flags", "aliases": [ "romania" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F7}\u{1F1F8}", "description": "flag: Serbia", "category": "Flags", "aliases": [ "serbia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F7}\u{1F1FA}", "description": "flag: Russia", "category": "Flags", "aliases": [ "ru" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F7}\u{1F1FC}", "description": "flag: Rwanda", "category": "Flags", "aliases": [ "rwanda" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1E6}", "description": "flag: Saudi Arabia", "category": "Flags", "aliases": [ "saudi_arabia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1E7}", "description": "flag: Solomon Islands", "category": "Flags", "aliases": [ "solomon_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1E8}", "description": "flag: Seychelles", "category": "Flags", "aliases": [ "seychelles" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1E9}", "description": "flag: Sudan", "category": "Flags", "aliases": [ "sudan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1EA}", "description": "flag: Sweden", "category": "Flags", "aliases": [ "sweden" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1EC}", "description": "flag: Singapore", "category": "Flags", "aliases": [ "singapore" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1ED}", "description": "flag: St. Helena", "category": "Flags", "aliases": [ "st_helena" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1EE}", "description": "flag: Slovenia", "category": "Flags", "aliases": [ "slovenia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1EF}", "description": "flag: Svalbard & Jan Mayen", "category": "Flags", "aliases": [ "svalbard_jan_mayen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F0}", "description": "flag: Slovakia", "category": "Flags", "aliases": [ "slovakia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F1}", "description": "flag: Sierra Leone", "category": "Flags", "aliases": [ "sierra_leone" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F2}", "description": "flag: San Marino", "category": "Flags", "aliases": [ "san_marino" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F3}", "description": "flag: Senegal", "category": "Flags", "aliases": [ "senegal" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F4}", "description": "flag: Somalia", "category": "Flags", "aliases": [ "somalia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F7}", "description": "flag: Suriname", "category": "Flags", "aliases": [ "suriname" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F8}", "description": "flag: South Sudan", "category": "Flags", "aliases": [ "south_sudan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1F9}", "description": "flag: S\xE3o Tom\xE9 & Pr\xEDncipe", "category": "Flags", "aliases": [ "sao_tome_principe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1FB}", "description": "flag: El Salvador", "category": "Flags", "aliases": [ "el_salvador" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1FD}", "description": "flag: Sint Maarten", "category": "Flags", "aliases": [ "sint_maarten" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1FE}", "description": "flag: Syria", "category": "Flags", "aliases": [ "syria" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F8}\u{1F1FF}", "description": "flag: Eswatini", "category": "Flags", "aliases": [ "swaziland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1E6}", "description": "flag: Tristan da Cunha", "category": "Flags", "aliases": [ "tristan_da_cunha" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1E8}", "description": "flag: Turks & Caicos Islands", "category": "Flags", "aliases": [ "turks_caicos_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1E9}", "description": "flag: Chad", "category": "Flags", "aliases": [ "chad" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1EB}", "description": "flag: French Southern Territories", "category": "Flags", "aliases": [ "french_southern_territories" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1EC}", "description": "flag: Togo", "category": "Flags", "aliases": [ "togo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1ED}", "description": "flag: Thailand", "category": "Flags", "aliases": [ "thailand" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1EF}", "description": "flag: Tajikistan", "category": "Flags", "aliases": [ "tajikistan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F0}", "description": "flag: Tokelau", "category": "Flags", "aliases": [ "tokelau" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F1}", "description": "flag: Timor-Leste", "category": "Flags", "aliases": [ "timor_leste" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F2}", "description": "flag: Turkmenistan", "category": "Flags", "aliases": [ "turkmenistan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F3}", "description": "flag: Tunisia", "category": "Flags", "aliases": [ "tunisia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F4}", "description": "flag: Tonga", "category": "Flags", "aliases": [ "tonga" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F7}", "description": "flag: Turkey", "category": "Flags", "aliases": [ "tr" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1F9}", "description": "flag: Trinidad & Tobago", "category": "Flags", "aliases": [ "trinidad_tobago" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1FB}", "description": "flag: Tuvalu", "category": "Flags", "aliases": [ "tuvalu" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1FC}", "description": "flag: Taiwan", "category": "Flags", "aliases": [ "taiwan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1F9}\u{1F1FF}", "description": "flag: Tanzania", "category": "Flags", "aliases": [ "tanzania" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1E6}", "description": "flag: Ukraine", "category": "Flags", "aliases": [ "ukraine" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1EC}", "description": "flag: Uganda", "category": "Flags", "aliases": [ "uganda" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1F2}", "description": "flag: U.S. Outlying Islands", "category": "Flags", "aliases": [ "us_outlying_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1F3}", "description": "flag: United Nations", "category": "Flags", "aliases": [ "united_nations" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1F8}", "description": "flag: United States", "category": "Flags", "aliases": [ "us" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1FE}", "description": "flag: Uruguay", "category": "Flags", "aliases": [ "uruguay" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FA}\u{1F1FF}", "description": "flag: Uzbekistan", "category": "Flags", "aliases": [ "uzbekistan" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1E6}", "description": "flag: Vatican City", "category": "Flags", "aliases": [ "vatican_city" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1E8}", "description": "flag: St. Vincent & Grenadines", "category": "Flags", "aliases": [ "st_vincent_grenadines" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1EA}", "description": "flag: Venezuela", "category": "Flags", "aliases": [ "venezuela" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1EC}", "description": "flag: British Virgin Islands", "category": "Flags", "aliases": [ "british_virgin_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1EE}", "description": "flag: U.S. Virgin Islands", "category": "Flags", "aliases": [ "us_virgin_islands" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1F3}", "description": "flag: Vietnam", "category": "Flags", "aliases": [ "vietnam" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FB}\u{1F1FA}", "description": "flag: Vanuatu", "category": "Flags", "aliases": [ "vanuatu" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FC}\u{1F1EB}", "description": "flag: Wallis & Futuna", "category": "Flags", "aliases": [ "wallis_futuna" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FC}\u{1F1F8}", "description": "flag: Samoa", "category": "Flags", "aliases": [ "samoa" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FD}\u{1F1F0}", "description": "flag: Kosovo", "category": "Flags", "aliases": [ "kosovo" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FE}\u{1F1EA}", "description": "flag: Yemen", "category": "Flags", "aliases": [ "yemen" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FE}\u{1F1F9}", "description": "flag: Mayotte", "category": "Flags", "aliases": [ "mayotte" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FF}\u{1F1E6}", "description": "flag: South Africa", "category": "Flags", "aliases": [ "south_africa" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FF}\u{1F1F2}", "description": "flag: Zambia", "category": "Flags", "aliases": [ "zambia" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F1FF}\u{1F1FC}", "description": "flag: Zimbabwe", "category": "Flags", "aliases": [ "zimbabwe" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}", "description": "flag: England", "category": "Flags", "aliases": [ "england" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}", "description": "flag: Scotland", "category": "Flags", "aliases": [ "scotland" ], "hasMarkdownRepresentation": true }, { "emojiRaw": "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}", "description": "flag: Wales", "category": "Flags", "aliases": [ "wales" ], "hasMarkdownRepresentation": true } ]; const kEmojiAttr = 0; const kEmojiContent = 1; var SkinTone = /* @__PURE__ */ ((SkinTone2) => { SkinTone2[SkinTone2["None"] = -1] = "None"; SkinTone2[SkinTone2["Default"] = 0] = "Default"; SkinTone2[SkinTone2["Light"] = 127995] = "Light"; SkinTone2[SkinTone2["MediumLight"] = 127996] = "MediumLight"; SkinTone2[SkinTone2["Medium"] = 127997] = "Medium"; SkinTone2[SkinTone2["MediumDark"] = 127998] = "MediumDark"; SkinTone2[SkinTone2["Dark"] = 127999] = "Dark"; return SkinTone2; })(SkinTone || {}); function hasSkinTone(skinTone) { return skinTone !== -1 && skinTone !== 0; } function emojis(skinTone) { return emjois.map((emoji) => emojiWithSkinTone(emoji, skinTone)); } function emojiCategories() { return emjois.map((emoji) => emoji.category).filter((catgegory, index2, categories) => categories.indexOf(catgegory) === index2); } function emojiFromString(emojiString, skinTone) { return emojis(skinTone).find((em) => em.emoji === emojiString); } function emojiWithSkinTonePreference(emoji, skinTone) { return emojiWithSkinTone(emoji, skinTone); } function emojiFromChar(emojiString) { return emjois.find((emoji) => emoji.emojiRaw === emojiString); } function emojiFromAlias(emojiAlias) { for (const emoji of emjois) { if (emoji.aliases.includes(emojiAlias)) { return emoji; } } return void 0; } function emojiForAllSkinTones(emoji) { if (emoji.supportsSkinTone) { return [ emojiWithSkinTone(emoji, 0), emojiWithSkinTone(emoji, 127995), emojiWithSkinTone(emoji, 127996), emojiWithSkinTone(emoji, 127997), emojiWithSkinTone(emoji, 127998), emojiWithSkinTone(emoji, 127999) ]; } else { return [emojiWithSkinTone(emoji, 0)]; } } function emojiWithSkinTone(emoji, skinTone) { if (!emoji.supportsSkinTone) { return { ...emoji, emoji: emoji.emojiRaw, skinTone: 0 }; } const skinToneEmoji = { emojiRaw: emoji.emojiRaw, aliases: emoji.aliases, category: emoji.category, description: emoji.description, supportsSkinTone: emoji.supportsSkinTone, hasMarkdownRepresentation: emoji.hasMarkdownRepresentation, emoji: emoji.emojiRaw + characterForSkinTone(skinTone), skinTone }; return skinToneEmoji; } function characterForSkinTone(skinTone) { return hasSkinTone(skinTone) ? String.fromCodePoint(skinTone) : ""; } const kListSpacingTight = "tight"; const kBookdownDocType = "bookdown"; const kHugoDocType = "hugo"; const kQuartoDocType = "quarto"; const kPresentationDocType = "presentation"; var EditorCommandId = /* @__PURE__ */ ((EditorCommandId2) => { EditorCommandId2["Undo"] = "201CA961-829E-4708-8FBC-8896FDE85A10"; EditorCommandId2["Redo"] = "B6272475-04E0-48C0-86E3-DAFA763BDF7B"; EditorCommandId2["SelectAll"] = "E42BF0DA-8A02-4FCE-A202-7EA8A4833FC5"; EditorCommandId2["ClearFormatting"] = "C22D8CC4-0A9F-41D5-B540-7DAAAB80F344"; EditorCommandId2["PasteRaw"] = "228322A2-3679-401A-AC31-AC21540C72F3"; EditorCommandId2["Strong"] = "83B04020-1195-4A65-8A8E-7C173C87F439"; EditorCommandId2["Em"] = "9E1B73E4-8140-43C3-92E4-A5E2583F40E6"; EditorCommandId2["Code"] = "32621150-F829-4B8F-B5BD-627FABBBCF53"; EditorCommandId2["Strikeout"] = "D5F0225B-EC73-4600-A1F3-01F418EE8CB4"; EditorCommandId2["Superscript"] = "0200D2FC-B5AF-423B-8B7A-4A7FC3DAA6AF"; EditorCommandId2["Subscript"] = "3150428F-E468-4E6E-BF53-A2713E59B4A0"; EditorCommandId2["Smallcaps"] = "41D8030F-5E8B-48F2-B1EE-6BC40FD502E4"; EditorCommandId2["Underline"] = "7F0E6AE2-08F4-4594-9BA2-E6B8B27FA8F7"; EditorCommandId2["Paragraph"] = "20EC2695-75CE-4DCD-A644-266E9F5F5913"; EditorCommandId2["Heading1"] = "5B77642B-923D-4440-B85D-1A27C9CF9D77"; EditorCommandId2["Heading2"] = "42985A4B-6BF2-4EEF-AA30-3E84A8B9111C"; EditorCommandId2["Heading3"] = "3F84D9DF-5EF6-484C-8615-BAAE2AC9ECE2"; EditorCommandId2["Heading4"] = "DA76731D-1D84-4DBA-9BEF-A6F73536F0B9"; EditorCommandId2["Heading5"] = "59E24247-A140-466A-BC96-3C8ADABB57A5"; EditorCommandId2["Heading6"] = "DB495DF5-8501-43C7-AE07-59CE9D9C373D"; EditorCommandId2["CodeBlock"] = "3BA12A49-3E29-4ABC-9A49-436A3B49B880"; EditorCommandId2["CodeBlockFormat"] = "07A6F2AA-01DC-41D7-9F01-AA91EAD856EE"; EditorCommandId2["Blockquote"] = "AF0717E7-E4BA-4909-9F10-17EB757CDD0F"; EditorCommandId2["LineBlock"] = "F401687C-B995-49AF-B2B0-59C158174FD5"; EditorCommandId2["AttrEdit"] = "0F8A254D-9272-46BF-904D-3A9D68B91032"; EditorCommandId2["Span"] = "852CF3E3-8A2B-420D-BD95-F79C54118E7E"; EditorCommandId2["Div"] = "15EDB8F1-6015-4DA9-AE50-5987B24C1D96"; EditorCommandId2["InsertDiv"] = "ACA1521B-8875-4113-9D43-B47F0038B19F"; EditorCommandId2["BulletList"] = "D897FD2B-D6A4-44A7-A404-57B5251FBF64"; EditorCommandId2["OrderedList"] = "3B8B82D5-7B6C-4480-B7DD-CF79C6817980"; EditorCommandId2["TightList"] = "A32B668F-74F3-43D7-8759-6576DDE1D603"; EditorCommandId2["ListItemSink"] = "7B503FA6-6576-4397-89EF-37887A1B2EED"; EditorCommandId2["ListItemLift"] = "53F89F57-22E2-4FCC-AF71-3E382EC10FC8"; EditorCommandId2["ListItemSplit"] = "19BBD87F-96D6-4276-B7B8-470652CF4106"; EditorCommandId2["ListItemCheck"] = "2F6DA9D8-EE57-418C-9459-50B6FD84137F"; EditorCommandId2["ListItemCheckToggle"] = "34D30F3D-8441-44AD-B75A-415DA8AC740B"; EditorCommandId2["EditListProperties"] = "E006A68C-EA39-4954-91B9-DDB07D1CBDA2"; EditorCommandId2["TableInsertTable"] = "FBE39613-2DAA-445D-9E92-E1EABFB33E2C"; EditorCommandId2["TableToggleHeader"] = "A5EDA226-A3CA-4C1B-8D4D-C2675EF51AFF"; EditorCommandId2["TableToggleCaption"] = "C598D85C-E15C-4E10-9850-95882AEC7E60"; EditorCommandId2["TableNextCell"] = "14299819-3E19-4A27-8D0B-8035315CF0B4"; EditorCommandId2["TablePreviousCell"] = "0F041FB5-0203-4FF1-9D13-B16606A80F3E"; EditorCommandId2["TableAddColumnBefore"] = "2447B81F-E07A-4C7D-8026-F2B148D5FF4A"; EditorCommandId2["TableAddColumnAfter"] = "ED86CFAF-D0B3-4B1F-9BB8-89987A939C8C"; EditorCommandId2["TableDeleteColumn"] = "B3D077BC-DD51-4E3A-8AD4-DE5DE686F7C4"; EditorCommandId2["TableAddRowBefore"] = "E97FB318-4052-41E5-A2F5-55B64E9826A5"; EditorCommandId2["TableAddRowAfter"] = "3F28FA24-4BDD-4C13-84FF-9C5E1D4B04D6"; EditorCommandId2["TableDeleteRow"] = "5F3B4DCD-5006-43A5-A069-405A946CAC68"; EditorCommandId2["TableDeleteTable"] = "116D1E68-9315-4FEB-B6A0-AD25B3B9C881"; EditorCommandId2["TableAlignColumnLeft"] = "0CD6A2A4-06F9-435D-B8C9-070B22B19D8"; EditorCommandId2["TableAlignColumnRight"] = "86D90C12-BB12-4A9D-802F-D00EB7CEF2C5"; EditorCommandId2["TableAlignColumnCenter"] = "63333996-2F65-4586-8494-EA9CAB5A7751"; EditorCommandId2["TableAlignColumnDefault"] = "7860A9C1-60AF-40AD-9EB8-A10F6ADF25C5"; EditorCommandId2["OmniInsert"] = "12F96C13-38C1-4266-A0A1-E871D8C709FB"; EditorCommandId2["Table"] = "CBD3ACC6-B2A3-457D-885C-EDA600F6FC67"; EditorCommandId2["Link"] = "842FCB9A-CA61-4C5F-A0A0-43507B4B3FA9"; EditorCommandId2["RemoveLink"] = "072D2084-218D-4A34-AF1F-7E196AF684B2"; EditorCommandId2["Image"] = "808220A3-2B83-4CB6-BCC1-46565D54FA47"; EditorCommandId2["Footnote"] = "1D1A73C0-F0E1-4A0F-BEBC-08398DE14A4D"; EditorCommandId2["ParagraphInsert"] = "4E68830A-3E68-450A-B3F3-2591F4EB6B9A"; EditorCommandId2["HorizontalRule"] = "EAA7115B-181C-49EC-BDB1-F0FF10369278"; EditorCommandId2["YamlMetadata"] = "431B5A45-1B25-4A55-9BAF-C0FE95D9B2B6"; EditorCommandId2["Shortcode"] = "0FDDA7E8-419D-4A5D-A1F5-74061466655D"; EditorCommandId2["InlineMath"] = "A35C562A-0BD6-4B14-93D5-6FF3BE1A0C8A"; EditorCommandId2["DisplayMath"] = "3E36BA99-2AE9-47C3-8C85-7CC5314A88DF"; EditorCommandId2["InlineRCode"] = "E7F3B2ED-7C45-4B1F-A2C6-C549C2913025"; EditorCommandId2["Citation"] = "EFFCFC81-F2E7-441E-B7FA-C693146B4185"; EditorCommandId2["CrossReference"] = "48CEED4F-1D18-4AF9-8686-9FEB5DF6BCC8"; EditorCommandId2["DefinitionList"] = "CFAB8F4D-3350-4398-9754-8DE0FB95167B"; EditorCommandId2["DefinitionTerm"] = "204D1A8F-8EE6-424A-8E69-99768C85B39E"; EditorCommandId2["DefinitionDescription"] = "F0738D83-8E11-4CB5-B958-390190A2D7DD"; EditorCommandId2["Symbol"] = "1419765F-6E4A-4A4C-8670-D9E8578EA996"; EditorCommandId2["Emoji"] = "F73896A2-02CC-4E5D-A596-78444A1D2A37"; EditorCommandId2["EmDash"] = "5B0DD33B-6209-4713-B8BB-60B5CA0BC3B3"; EditorCommandId2["EnDash"] = "C32AFE32-0E57-4A16-9C39-88EB1D82B8B4"; EditorCommandId2["NonBreakingSpace"] = "CF6428AB-F36E-446C-8661-2781B2CD1169"; EditorCommandId2["HardLineBreak"] = "3606FF87-866C-4729-8F3F-D065388FC339"; EditorCommandId2["Tabset"] = "7327AF95-3EA7-42C8-8C42-D4CB0D15CAE4"; EditorCommandId2["Callout"] = "DC86C28A-0140-4EB5-A745-2C1EFA55C94D"; EditorCommandId2["TexInline"] = "CFE8E9E5-93BA-4FFA-9A77-BA7EFC373864"; EditorCommandId2["TexBlock"] = "BD11A6A7-E528-40A2-8139-3F8F5F556ED2"; EditorCommandId2["HTMLComment"] = "F973CBA4-2882-4AC5-A642-47F4733EBDD4"; EditorCommandId2["HTMLInline"] = "C682C6B5-E58D-498C-A38F-FB07BEC3A82D"; EditorCommandId2["HTMLBlock"] = "6F9F64AF-711F-4F91-8642-B51C41717F31"; EditorCommandId2["RawInline"] = "984167C8-8582-469C-97D8-42CB12773657"; EditorCommandId2["RawBlock"] = "F5757992-4D33-45E6-86DC-F7D7B174B1EC"; EditorCommandId2["UserComment"] = "201FA139-4C86-4A5D-AF98-DE9EFB1A867C"; EditorCommandId2["RCodeChunk"] = "EBFD21FF-4A6E-4D88-A2E0-B38470B00BB9"; EditorCommandId2["BashCodeChunk"] = "5FBB7283-E8AB-450C-9359-A4658CBCD136"; EditorCommandId2["D3CodeChunk"] = "C73CA46C-B56F-40B6-AEFA-DDBB30CA8C08"; EditorCommandId2["PythonCodeChunk"] = "42A7A138-421A-4DCF-8A88-FE2F8EC5B8F6"; EditorCommandId2["JuliaCodeChunk"] = "84386434-EE31-4F0D-BBE9-55F5199FAF04"; EditorCommandId2["RcppCodeChunk"] = "6BD2810B-6B20-4358-8AA4-74BBFFC92AC3"; EditorCommandId2["SQLCodeChunk"] = "41D61FD2-B56B-48A7-99BC-2F60BC0D9F78"; EditorCommandId2["StanCodeChunk"] = "65D33344-CBE9-438C-B337-A538F8D7FCE5"; EditorCommandId2["MermaidCodeChunk"] = "FCA99491-2FCA-44BC-8349-A9AE2AE940DE"; EditorCommandId2["GraphVizCodeChunk"] = "29970A38-2921-4F32-8363-F78CFE3FEBB4"; EditorCommandId2["ExecuteCurentRmdChunk"] = "31C799F3-EF18-4F3A-92E6-51F7A3193A1B"; EditorCommandId2["ExecuteCurrentPreviousRmdChunks"] = "D3FDE96-0264-4364-ADFF-E87A75405B0B"; EditorCommandId2["ExpandChunk"] = "0226518C-559A-4BFC-A5BD-244BEE8175AA"; EditorCommandId2["CollapseChunk"] = "4AFBBC0C-A6DA-4019-B85F-374636E349C3"; EditorCommandId2["ExpandAllChunks"] = "B217913B-67C9-457F-B766-7FCCB502F611"; EditorCommandId2["CollapseAllChunks"] = "9907A864-D707-4410-93A4-07871A8C43A6"; EditorCommandId2["GoToNextSection"] = "AE827BDA-96F8-4E84-8030-298D98386765"; EditorCommandId2["GoToPreviousSection"] = "E6AA728C-2B75-4939-9123-0F082837ACDF"; EditorCommandId2["GoToNextChunk"] = "50DD6E51-13B5-4F1E-A46B-6A33EB1609D9"; EditorCommandId2["GoToPreviousChunk"] = "8D105D33-78FE-4A98-8195-6B71361424C5"; EditorCommandId2["InsertSlidePause"] = "FCA8BF2E-2668-4919-92FC-02083EB48246"; EditorCommandId2["InsertSlideNotes"] = "9C709915-02BE-4F4F-9CEB-50E17973C9BE"; EditorCommandId2["InsertSlideColumns"] = "AE62D05F-1415-4E1F-84AE-753EE2393002"; return EditorCommandId2; })(EditorCommandId || {}); var BaseKey = /* @__PURE__ */ ((BaseKey2) => { BaseKey2["Home"] = "Home"; BaseKey2["End"] = "End"; BaseKey2["Enter"] = "Enter"; BaseKey2["ModEnter"] = "Mod-Enter"; BaseKey2["ShiftEnter"] = "Shift-Enter"; BaseKey2["Backspace"] = "Backspace"; BaseKey2["Delete"] = "Delete|Mod-Delete"; BaseKey2["Tab"] = "Tab"; BaseKey2["ShiftTab"] = "Shift-Tab"; BaseKey2["ArrowUp"] = "Up|ArrowUp"; BaseKey2["ArrowDown"] = "Down|ArrowDown"; BaseKey2["ArrowLeft"] = "Left|ArrowLeft"; BaseKey2["ArrowRight"] = "Right|ArrowRight"; BaseKey2["ModArrowUp"] = "Mod-Up|Mod-ArrowUp"; BaseKey2["ModArrowDown"] = "Mod-Down|Mod-ArrowDown"; BaseKey2["CtrlHome"] = "Ctrl-Home"; BaseKey2["CtrlEnd"] = "Ctrl-End"; BaseKey2["ShiftArrowLeft"] = "Shift-Left|Shift-ArrowLeft"; BaseKey2["ShiftArrowRight"] = "Shift-Right|Shift-ArrowRight"; BaseKey2["AltArrowLeft"] = "Alt-Left|Alt-ArrowLeft"; BaseKey2["AltArrowRight"] = "Alt-Right|Alt-ArrowRight"; BaseKey2["CtrlArrowLeft"] = "Ctrl-Left|Ctrl-ArrowLeft"; BaseKey2["CtrlArrowRight"] = "Ctrl-Right|Ctrl-ArrowRight"; BaseKey2["CtrlShiftArrowLeft"] = "Ctrl-Shift-Left|Ctrl-Shift-ArrowLeft"; BaseKey2["CtrlShiftArrowRight"] = "Ctrl-Shift-Right|Ctrl-Shift-ArrowRight"; return BaseKey2; })(BaseKey || {}); var NavigationType = /* @__PURE__ */ ((NavigationType2) => { NavigationType2["Pos"] = "pos"; NavigationType2["Id"] = "id"; NavigationType2["Href"] = "href"; NavigationType2["Heading"] = "heading"; NavigationType2["XRef"] = "xref"; return NavigationType2; })(NavigationType || {}); function makeEventType(eventName) { return { eventName: `panmirror${eventName}` }; } class DOMEditorEvents { constructor(el2) { __publicField(this, "el"); this.el = el2; } emit(eventType, detail) { const event = new CustomEvent(eventType.eventName, { detail }); return this.el.dispatchEvent(event); } subscribe(eventType, handler) { const listener = function(evt) { const detail = evt.detail; handler.call(this, detail); }; this.el.addEventListener(eventType.eventName, listener); return () => { this.el.removeEventListener(eventType.eventName, listener); }; } } const UpdateEvent = makeEventType("Update"); const OutlineChangeEvent = makeEventType("OutlineChange"); const StateChangeEvent = makeEventType("StateChange"); const ResizeEvent = makeEventType("Resize"); const LayoutEvent = makeEventType("Layout"); const ScrollEvent = makeEventType("Scroll"); const BlurEvent = makeEventType("Blur"); const FocusEvent = makeEventType("Focus"); const DispatchEvent = makeEventType("Dispatch"); const NavigateEvent = makeEventType("Navigate"); const PrefsChangedEvent = makeEventType("PrefsChanged"); const ThemeChangedEvent = makeEventType("ThemeChanged"); function OrderedMap(content) { this.content = content; } OrderedMap.prototype = { constructor: OrderedMap, find: function(key2) { for (var i2 = 0; i2 < this.content.length; i2 += 2) if (this.content[i2] === key2) return i2; return -1; }, get: function(key2) { var found2 = this.find(key2); return found2 == -1 ? void 0 : this.content[found2 + 1]; }, update: function(key2, value, newKey) { var self2 = newKey && newKey != key2 ? this.remove(newKey) : this; var found2 = self2.find(key2), content = self2.content.slice(); if (found2 == -1) { content.push(newKey || key2, value); } else { content[found2 + 1] = value; if (newKey) content[found2] = newKey; } return new OrderedMap(content); }, remove: function(key2) { var found2 = this.find(key2); if (found2 == -1) return this; var content = this.content.slice(); content.splice(found2, 2); return new OrderedMap(content); }, addToStart: function(key2, value) { return new OrderedMap([key2, value].concat(this.remove(key2).content)); }, addToEnd: function(key2, value) { var content = this.remove(key2).content.slice(); content.push(key2, value); return new OrderedMap(content); }, addBefore: function(place, key2, value) { var without = this.remove(key2), content = without.content.slice(); var found2 = without.find(place); content.splice(found2 == -1 ? content.length : found2, 0, key2, value); return new OrderedMap(content); }, forEach: function(f2) { for (var i2 = 0; i2 < this.content.length; i2 += 2) f2(this.content[i2], this.content[i2 + 1]); }, prepend: function(map2) { map2 = OrderedMap.from(map2); if (!map2.size) return this; return new OrderedMap(map2.content.concat(this.subtract(map2).content)); }, append: function(map2) { map2 = OrderedMap.from(map2); if (!map2.size) return this; return new OrderedMap(this.subtract(map2).content.concat(map2.content)); }, subtract: function(map2) { var result = this; map2 = OrderedMap.from(map2); for (var i2 = 0; i2 < map2.content.length; i2 += 2) result = result.remove(map2.content[i2]); return result; }, toObject: function() { var result = {}; this.forEach(function(key2, value) { result[key2] = value; }); return result; }, get size() { return this.content.length >> 1; } }; OrderedMap.from = function(value) { if (value instanceof OrderedMap) return value; var content = []; if (value) for (var prop2 in value) content.push(prop2, value[prop2]); return new OrderedMap(content); }; function findDiffStart(a2, b2, pos) { for (let i2 = 0; ; i2++) { if (i2 == a2.childCount || i2 == b2.childCount) return a2.childCount == b2.childCount ? null : pos; let childA = a2.child(i2), childB = b2.child(i2); if (childA == childB) { pos += childA.nodeSize; continue; } if (!childA.sameMarkup(childB)) return pos; if (childA.isText && childA.text != childB.text) { for (let j2 = 0; childA.text[j2] == childB.text[j2]; j2++) pos++; return pos; } if (childA.content.size || childB.content.size) { let inner = findDiffStart(childA.content, childB.content, pos + 1); if (inner != null) return inner; } pos += childA.nodeSize; } } function findDiffEnd(a2, b2, posA, posB) { for (let iA = a2.childCount, iB = b2.childCount; ; ) { if (iA == 0 || iB == 0) return iA == iB ? null : { a: posA, b: posB }; let childA = a2.child(--iA), childB = b2.child(--iB), size2 = childA.nodeSize; if (childA == childB) { posA -= size2; posB -= size2; continue; } if (!childA.sameMarkup(childB)) return { a: posA, b: posB }; if (childA.isText && childA.text != childB.text) { let same = 0, minSize = Math.min(childA.text.length, childB.text.length); while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) { same++; posA--; posB--; } return { a: posA, b: posB }; } if (childA.content.size || childB.content.size) { let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1); if (inner) return inner; } posA -= size2; posB -= size2; } } class Fragment { constructor(content, size2) { this.content = content; this.size = size2 || 0; if (size2 == null) for (let i2 = 0; i2 < content.length; i2++) this.size += content[i2].nodeSize; } nodesBetween(from2, to, f2, nodeStart = 0, parent) { for (let i2 = 0, pos = 0; pos < to; i2++) { let child = this.content[i2], end = pos + child.nodeSize; if (end > from2 && f2(child, nodeStart + pos, parent || null, i2) !== false && child.content.size) { let start = pos + 1; child.nodesBetween(Math.max(0, from2 - start), Math.min(child.content.size, to - start), f2, nodeStart + start); } pos = end; } } descendants(f2) { this.nodesBetween(0, this.size, f2); } textBetween(from2, to, blockSeparator, leafText) { let text2 = "", separated = true; this.nodesBetween(from2, to, (node2, pos) => { if (node2.isText) { text2 += node2.text.slice(Math.max(from2, pos) - pos, to - pos); separated = !blockSeparator; } else if (node2.isLeaf) { if (leafText) { text2 += typeof leafText === "function" ? leafText(node2) : leafText; } else if (node2.type.spec.leafText) { text2 += node2.type.spec.leafText(node2); } separated = !blockSeparator; } else if (!separated && node2.isBlock) { text2 += blockSeparator; separated = true; } }, 0); return text2; } append(other) { if (!other.size) return this; if (!this.size) return other; let last2 = this.lastChild, first = other.firstChild, content = this.content.slice(), i2 = 0; if (last2.isText && last2.sameMarkup(first)) { content[content.length - 1] = last2.withText(last2.text + first.text); i2 = 1; } for (; i2 < other.content.length; i2++) content.push(other.content[i2]); return new Fragment(content, this.size + other.size); } cut(from2, to = this.size) { if (from2 == 0 && to == this.size) return this; let result = [], size2 = 0; if (to > from2) for (let i2 = 0, pos = 0; pos < to; i2++) { let child = this.content[i2], end = pos + child.nodeSize; if (end > from2) { if (pos < from2 || end > to) { if (child.isText) child = child.cut(Math.max(0, from2 - pos), Math.min(child.text.length, to - pos)); else child = child.cut(Math.max(0, from2 - pos - 1), Math.min(child.content.size, to - pos - 1)); } result.push(child); size2 += child.nodeSize; } pos = end; } return new Fragment(result, size2); } cutByIndex(from2, to) { if (from2 == to) return Fragment.empty; if (from2 == 0 && to == this.content.length) return this; return new Fragment(this.content.slice(from2, to)); } replaceChild(index2, node2) { let current = this.content[index2]; if (current == node2) return this; let copy2 = this.content.slice(); let size2 = this.size + node2.nodeSize - current.nodeSize; copy2[index2] = node2; return new Fragment(copy2, size2); } addToStart(node2) { return new Fragment([node2].concat(this.content), this.size + node2.nodeSize); } addToEnd(node2) { return new Fragment(this.content.concat(node2), this.size + node2.nodeSize); } eq(other) { if (this.content.length != other.content.length) return false; for (let i2 = 0; i2 < this.content.length; i2++) if (!this.content[i2].eq(other.content[i2])) return false; return true; } get firstChild() { return this.content.length ? this.content[0] : null; } get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; } get childCount() { return this.content.length; } child(index2) { let found2 = this.content[index2]; if (!found2) throw new RangeError("Index " + index2 + " out of range for " + this); return found2; } maybeChild(index2) { return this.content[index2] || null; } forEach(f2) { for (let i2 = 0, p2 = 0; i2 < this.content.length; i2++) { let child = this.content[i2]; f2(child, p2, i2); p2 += child.nodeSize; } } findDiffStart(other, pos = 0) { return findDiffStart(this, other, pos); } findDiffEnd(other, pos = this.size, otherPos = other.size) { return findDiffEnd(this, other, pos, otherPos); } findIndex(pos, round = -1) { if (pos == 0) return retIndex(0, pos); if (pos == this.size) return retIndex(this.content.length, pos); if (pos > this.size || pos < 0) throw new RangeError(`Position ${pos} outside of fragment (${this})`); for (let i2 = 0, curPos = 0; ; i2++) { let cur = this.child(i2), end = curPos + cur.nodeSize; if (end >= pos) { if (end == pos || round > 0) return retIndex(i2 + 1, end); return retIndex(i2, curPos); } curPos = end; } } toString() { return "<" + this.toStringInner() + ">"; } toStringInner() { return this.content.join(", "); } toJSON() { return this.content.length ? this.content.map((n2) => n2.toJSON()) : null; } static fromJSON(schema2, value) { if (!value) return Fragment.empty; if (!Array.isArray(value)) throw new RangeError("Invalid input for Fragment.fromJSON"); return new Fragment(value.map(schema2.nodeFromJSON)); } static fromArray(array) { if (!array.length) return Fragment.empty; let joined, size2 = 0; for (let i2 = 0; i2 < array.length; i2++) { let node2 = array[i2]; size2 += node2.nodeSize; if (i2 && node2.isText && array[i2 - 1].sameMarkup(node2)) { if (!joined) joined = array.slice(0, i2); joined[joined.length - 1] = node2.withText(joined[joined.length - 1].text + node2.text); } else if (joined) { joined.push(node2); } } return new Fragment(joined || array, size2); } static from(nodes2) { if (!nodes2) return Fragment.empty; if (nodes2 instanceof Fragment) return nodes2; if (Array.isArray(nodes2)) return this.fromArray(nodes2); if (nodes2.attrs) return new Fragment([nodes2], nodes2.nodeSize); throw new RangeError("Can not convert " + nodes2 + " to a Fragment" + (nodes2.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : "")); } } Fragment.empty = new Fragment([], 0); const found = { index: 0, offset: 0 }; function retIndex(index2, offset) { found.index = index2; found.offset = offset; return found; } function compareDeep(a2, b2) { if (a2 === b2) return true; if (!(a2 && typeof a2 == "object") || !(b2 && typeof b2 == "object")) return false; let array = Array.isArray(a2); if (Array.isArray(b2) != array) return false; if (array) { if (a2.length != b2.length) return false; for (let i2 = 0; i2 < a2.length; i2++) if (!compareDeep(a2[i2], b2[i2])) return false; } else { for (let p2 in a2) if (!(p2 in b2) || !compareDeep(a2[p2], b2[p2])) return false; for (let p2 in b2) if (!(p2 in a2)) return false; } return true; } class Mark { constructor(type2, attrs) { this.type = type2; this.attrs = attrs; } addToSet(set2) { let copy2, placed = false; for (let i2 = 0; i2 < set2.length; i2++) { let other = set2[i2]; if (this.eq(other)) return set2; if (this.type.excludes(other.type)) { if (!copy2) copy2 = set2.slice(0, i2); } else if (other.type.excludes(this.type)) { return set2; } else { if (!placed && other.type.rank > this.type.rank) { if (!copy2) copy2 = set2.slice(0, i2); copy2.push(this); placed = true; } if (copy2) copy2.push(other); } } if (!copy2) copy2 = set2.slice(); if (!placed) copy2.push(this); return copy2; } removeFromSet(set2) { for (let i2 = 0; i2 < set2.length; i2++) if (this.eq(set2[i2])) return set2.slice(0, i2).concat(set2.slice(i2 + 1)); return set2; } isInSet(set2) { for (let i2 = 0; i2 < set2.length; i2++) if (this.eq(set2[i2])) return true; return false; } eq(other) { return this == other || this.type == other.type && compareDeep(this.attrs, other.attrs); } toJSON() { let obj = { type: this.type.name }; for (let _2 in this.attrs) { obj.attrs = this.attrs; break; } return obj; } static fromJSON(schema2, json2) { if (!json2) throw new RangeError("Invalid input for Mark.fromJSON"); let type2 = schema2.marks[json2.type]; if (!type2) throw new RangeError(`There is no mark type ${json2.type} in this schema`); return type2.create(json2.attrs); } static sameSet(a2, b2) { if (a2 == b2) return true; if (a2.length != b2.length) return false; for (let i2 = 0; i2 < a2.length; i2++) if (!a2[i2].eq(b2[i2])) return false; return true; } static setFrom(marks) { if (!marks || Array.isArray(marks) && marks.length == 0) return Mark.none; if (marks instanceof Mark) return [marks]; let copy2 = marks.slice(); copy2.sort((a2, b2) => a2.type.rank - b2.type.rank); return copy2; } } Mark.none = []; class ReplaceError extends Error { } class Slice { constructor(content, openStart, openEnd) { this.content = content; this.openStart = openStart; this.openEnd = openEnd; } get size() { return this.content.size - this.openStart - this.openEnd; } insertAt(pos, fragment) { let content = insertInto(this.content, pos + this.openStart, fragment); return content && new Slice(content, this.openStart, this.openEnd); } removeBetween(from2, to) { return new Slice(removeRange(this.content, from2 + this.openStart, to + this.openStart), this.openStart, this.openEnd); } eq(other) { return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd; } toString() { return this.content + "(" + this.openStart + "," + this.openEnd + ")"; } toJSON() { if (!this.content.size) return null; let json2 = { content: this.content.toJSON() }; if (this.openStart > 0) json2.openStart = this.openStart; if (this.openEnd > 0) json2.openEnd = this.openEnd; return json2; } static fromJSON(schema2, json2) { if (!json2) return Slice.empty; let openStart = json2.openStart || 0, openEnd = json2.openEnd || 0; if (typeof openStart != "number" || typeof openEnd != "number") throw new RangeError("Invalid input for Slice.fromJSON"); return new Slice(Fragment.fromJSON(schema2, json2.content), openStart, openEnd); } static maxOpen(fragment, openIsolating = true) { let openStart = 0, openEnd = 0; for (let n2 = fragment.firstChild; n2 && !n2.isLeaf && (openIsolating || !n2.type.spec.isolating); n2 = n2.firstChild) openStart++; for (let n2 = fragment.lastChild; n2 && !n2.isLeaf && (openIsolating || !n2.type.spec.isolating); n2 = n2.lastChild) openEnd++; return new Slice(fragment, openStart, openEnd); } } Slice.empty = new Slice(Fragment.empty, 0, 0); function removeRange(content, from2, to) { let { index: index2, offset } = content.findIndex(from2), child = content.maybeChild(index2); let { index: indexTo, offset: offsetTo } = content.findIndex(to); if (offset == from2 || child.isText) { if (offsetTo != to && !content.child(indexTo).isText) throw new RangeError("Removing non-flat range"); return content.cut(0, from2).append(content.cut(to)); } if (index2 != indexTo) throw new RangeError("Removing non-flat range"); return content.replaceChild(index2, child.copy(removeRange(child.content, from2 - offset - 1, to - offset - 1))); } function insertInto(content, dist2, insert2, parent) { let { index: index2, offset } = content.findIndex(dist2), child = content.maybeChild(index2); if (offset == dist2 || child.isText) { if (parent && !parent.canReplace(index2, index2, insert2)) return null; return content.cut(0, dist2).append(insert2).append(content.cut(dist2)); } let inner = insertInto(child.content, dist2 - offset - 1, insert2); return inner && content.replaceChild(index2, child.copy(inner)); } function replace$2($from, $to, slice2) { if (slice2.openStart > $from.depth) throw new ReplaceError("Inserted content deeper than insertion position"); if ($from.depth - slice2.openStart != $to.depth - slice2.openEnd) throw new ReplaceError("Inconsistent open depths"); return replaceOuter($from, $to, slice2, 0); } function replaceOuter($from, $to, slice2, depth) { let index2 = $from.index(depth), node2 = $from.node(depth); if (index2 == $to.index(depth) && depth < $from.depth - slice2.openStart) { let inner = replaceOuter($from, $to, slice2, depth + 1); return node2.copy(node2.content.replaceChild(index2, inner)); } else if (!slice2.content.size) { return close(node2, replaceTwoWay($from, $to, depth)); } else if (!slice2.openStart && !slice2.openEnd && $from.depth == depth && $to.depth == depth) { let parent = $from.parent, content = parent.content; return close(parent, content.cut(0, $from.parentOffset).append(slice2.content).append(content.cut($to.parentOffset))); } else { let { start, end } = prepareSliceForReplace(slice2, $from); return close(node2, replaceThreeWay($from, start, end, $to, depth)); } } function checkJoin(main, sub2) { if (!sub2.type.compatibleContent(main.type)) throw new ReplaceError("Cannot join " + sub2.type.name + " onto " + main.type.name); } function joinable$1($before, $after, depth) { let node2 = $before.node(depth); checkJoin(node2, $after.node(depth)); return node2; } function addNode(child, target2) { let last2 = target2.length - 1; if (last2 >= 0 && child.isText && child.sameMarkup(target2[last2])) target2[last2] = child.withText(target2[last2].text + child.text); else target2.push(child); } function addRange($start, $end, depth, target2) { let node2 = ($end || $start).node(depth); let startIndex = 0, endIndex = $end ? $end.index(depth) : node2.childCount; if ($start) { startIndex = $start.index(depth); if ($start.depth > depth) { startIndex++; } else if ($start.textOffset) { addNode($start.nodeAfter, target2); startIndex++; } } for (let i2 = startIndex; i2 < endIndex; i2++) addNode(node2.child(i2), target2); if ($end && $end.depth == depth && $end.textOffset) addNode($end.nodeBefore, target2); } function close(node2, content) { node2.type.checkContent(content); return node2.copy(content); } function replaceThreeWay($from, $start, $end, $to, depth) { let openStart = $from.depth > depth && joinable$1($from, $start, depth + 1); let openEnd = $to.depth > depth && joinable$1($end, $to, depth + 1); let content = []; addRange(null, $from, depth, content); if (openStart && openEnd && $start.index(depth) == $end.index(depth)) { checkJoin(openStart, openEnd); addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content); } else { if (openStart) addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content); addRange($start, $end, depth, content); if (openEnd) addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content); } addRange($to, null, depth, content); return new Fragment(content); } function replaceTwoWay($from, $to, depth) { let content = []; addRange(null, $from, depth, content); if ($from.depth > depth) { let type2 = joinable$1($from, $to, depth + 1); addNode(close(type2, replaceTwoWay($from, $to, depth + 1)), content); } addRange($to, null, depth, content); return new Fragment(content); } function prepareSliceForReplace(slice2, $along) { let extra = $along.depth - slice2.openStart, parent = $along.node(extra); let node2 = parent.copy(slice2.content); for (let i2 = extra - 1; i2 >= 0; i2--) node2 = $along.node(i2).copy(Fragment.from(node2)); return { start: node2.resolveNoCache(slice2.openStart + extra), end: node2.resolveNoCache(node2.content.size - slice2.openEnd - extra) }; } class ResolvedPos { constructor(pos, path, parentOffset) { this.pos = pos; this.path = path; this.parentOffset = parentOffset; this.depth = path.length / 3 - 1; } resolveDepth(val) { if (val == null) return this.depth; if (val < 0) return this.depth + val; return val; } get parent() { return this.node(this.depth); } get doc() { return this.node(0); } node(depth) { return this.path[this.resolveDepth(depth) * 3]; } index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; } indexAfter(depth) { depth = this.resolveDepth(depth); return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1); } start(depth) { depth = this.resolveDepth(depth); return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1; } end(depth) { depth = this.resolveDepth(depth); return this.start(depth) + this.node(depth).content.size; } before(depth) { depth = this.resolveDepth(depth); if (!depth) throw new RangeError("There is no position before the top-level node"); return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1]; } after(depth) { depth = this.resolveDepth(depth); if (!depth) throw new RangeError("There is no position after the top-level node"); return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize; } get textOffset() { return this.pos - this.path[this.path.length - 1]; } get nodeAfter() { let parent = this.parent, index2 = this.index(this.depth); if (index2 == parent.childCount) return null; let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index2); return dOff ? parent.child(index2).cut(dOff) : child; } get nodeBefore() { let index2 = this.index(this.depth); let dOff = this.pos - this.path[this.path.length - 1]; if (dOff) return this.parent.child(index2).cut(0, dOff); return index2 == 0 ? null : this.parent.child(index2 - 1); } posAtIndex(index2, depth) { depth = this.resolveDepth(depth); let node2 = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1; for (let i2 = 0; i2 < index2; i2++) pos += node2.child(i2).nodeSize; return pos; } marks() { let parent = this.parent, index2 = this.index(); if (parent.content.size == 0) return Mark.none; if (this.textOffset) return parent.child(index2).marks; let main = parent.maybeChild(index2 - 1), other = parent.maybeChild(index2); if (!main) { let tmp = main; main = other; other = tmp; } let marks = main.marks; for (var i2 = 0; i2 < marks.length; i2++) if (marks[i2].type.spec.inclusive === false && (!other || !marks[i2].isInSet(other.marks))) marks = marks[i2--].removeFromSet(marks); return marks; } marksAcross($end) { let after = this.parent.maybeChild(this.index()); if (!after || !after.isInline) return null; let marks = after.marks, next2 = $end.parent.maybeChild($end.index()); for (var i2 = 0; i2 < marks.length; i2++) if (marks[i2].type.spec.inclusive === false && (!next2 || !marks[i2].isInSet(next2.marks))) marks = marks[i2--].removeFromSet(marks); return marks; } sharedDepth(pos) { for (let depth = this.depth; depth > 0; depth--) if (this.start(depth) <= pos && this.end(depth) >= pos) return depth; return 0; } blockRange(other = this, pred) { if (other.pos < this.pos) return other.blockRange(this); for (let d2 = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d2 >= 0; d2--) if (other.pos <= this.end(d2) && (!pred || pred(this.node(d2)))) return new NodeRange(this, other, d2); return null; } sameParent(other) { return this.pos - this.parentOffset == other.pos - other.parentOffset; } max(other) { return other.pos > this.pos ? other : this; } min(other) { return other.pos < this.pos ? other : this; } toString() { let str2 = ""; for (let i2 = 1; i2 <= this.depth; i2++) str2 += (str2 ? "/" : "") + this.node(i2).type.name + "_" + this.index(i2 - 1); return str2 + ":" + this.parentOffset; } static resolve(doc2, pos) { if (!(pos >= 0 && pos <= doc2.content.size)) throw new RangeError("Position " + pos + " out of range"); let path = []; let start = 0, parentOffset = pos; for (let node2 = doc2; ; ) { let { index: index2, offset } = node2.content.findIndex(parentOffset); let rem = parentOffset - offset; path.push(node2, index2, start + offset); if (!rem) break; node2 = node2.child(index2); if (node2.isText) break; parentOffset = rem - 1; start += offset + 1; } return new ResolvedPos(pos, path, parentOffset); } static resolveCached(doc2, pos) { for (let i2 = 0; i2 < resolveCache.length; i2++) { let cached = resolveCache[i2]; if (cached.pos == pos && cached.doc == doc2) return cached; } let result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc2, pos); resolveCachePos = (resolveCachePos + 1) % resolveCacheSize; return result; } } let resolveCache = [], resolveCachePos = 0, resolveCacheSize = 12; class NodeRange { constructor($from, $to, depth) { this.$from = $from; this.$to = $to; this.depth = depth; } get start() { return this.$from.before(this.depth + 1); } get end() { return this.$to.after(this.depth + 1); } get parent() { return this.$from.node(this.depth); } get startIndex() { return this.$from.index(this.depth); } get endIndex() { return this.$to.indexAfter(this.depth); } } const emptyAttrs = /* @__PURE__ */ Object.create(null); class Node$2 { constructor(type2, attrs, content, marks = Mark.none) { this.type = type2; this.attrs = attrs; this.marks = marks; this.content = content || Fragment.empty; } get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; } get childCount() { return this.content.childCount; } child(index2) { return this.content.child(index2); } maybeChild(index2) { return this.content.maybeChild(index2); } forEach(f2) { this.content.forEach(f2); } nodesBetween(from2, to, f2, startPos = 0) { this.content.nodesBetween(from2, to, f2, startPos, this); } descendants(f2) { this.nodesBetween(0, this.content.size, f2); } get textContent() { return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, ""); } textBetween(from2, to, blockSeparator, leafText) { return this.content.textBetween(from2, to, blockSeparator, leafText); } get firstChild() { return this.content.firstChild; } get lastChild() { return this.content.lastChild; } eq(other) { return this == other || this.sameMarkup(other) && this.content.eq(other.content); } sameMarkup(other) { return this.hasMarkup(other.type, other.attrs, other.marks); } hasMarkup(type2, attrs, marks) { return this.type == type2 && compareDeep(this.attrs, attrs || type2.defaultAttrs || emptyAttrs) && Mark.sameSet(this.marks, marks || Mark.none); } copy(content = null) { if (content == this.content) return this; return new Node$2(this.type, this.attrs, content, this.marks); } mark(marks) { return marks == this.marks ? this : new Node$2(this.type, this.attrs, this.content, marks); } cut(from2, to = this.content.size) { if (from2 == 0 && to == this.content.size) return this; return this.copy(this.content.cut(from2, to)); } slice(from2, to = this.content.size, includeParents = false) { if (from2 == to) return Slice.empty; let $from = this.resolve(from2), $to = this.resolve(to); let depth = includeParents ? 0 : $from.sharedDepth(to); let start = $from.start(depth), node2 = $from.node(depth); let content = node2.content.cut($from.pos - start, $to.pos - start); return new Slice(content, $from.depth - depth, $to.depth - depth); } replace(from2, to, slice2) { return replace$2(this.resolve(from2), this.resolve(to), slice2); } nodeAt(pos) { for (let node2 = this; ; ) { let { index: index2, offset } = node2.content.findIndex(pos); node2 = node2.maybeChild(index2); if (!node2) return null; if (offset == pos || node2.isText) return node2; pos -= offset + 1; } } childAfter(pos) { let { index: index2, offset } = this.content.findIndex(pos); return { node: this.content.maybeChild(index2), index: index2, offset }; } childBefore(pos) { if (pos == 0) return { node: null, index: 0, offset: 0 }; let { index: index2, offset } = this.content.findIndex(pos); if (offset < pos) return { node: this.content.child(index2), index: index2, offset }; let node2 = this.content.child(index2 - 1); return { node: node2, index: index2 - 1, offset: offset - node2.nodeSize }; } resolve(pos) { return ResolvedPos.resolveCached(this, pos); } resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); } rangeHasMark(from2, to, type2) { let found2 = false; if (to > from2) this.nodesBetween(from2, to, (node2) => { if (type2.isInSet(node2.marks)) found2 = true; return !found2; }); return found2; } get isBlock() { return this.type.isBlock; } get isTextblock() { return this.type.isTextblock; } get inlineContent() { return this.type.inlineContent; } get isInline() { return this.type.isInline; } get isText() { return this.type.isText; } get isLeaf() { return this.type.isLeaf; } get isAtom() { return this.type.isAtom; } toString() { if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this); let name = this.type.name; if (this.content.size) name += "(" + this.content.toStringInner() + ")"; return wrapMarks(this.marks, name); } contentMatchAt(index2) { let match2 = this.type.contentMatch.matchFragment(this.content, 0, index2); if (!match2) throw new Error("Called contentMatchAt on a node with invalid content"); return match2; } canReplace(from2, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) { let one = this.contentMatchAt(from2).matchFragment(replacement, start, end); let two = one && one.matchFragment(this.content, to); if (!two || !two.validEnd) return false; for (let i2 = start; i2 < end; i2++) if (!this.type.allowsMarks(replacement.child(i2).marks)) return false; return true; } canReplaceWith(from2, to, type2, marks) { if (marks && !this.type.allowsMarks(marks)) return false; let start = this.contentMatchAt(from2).matchType(type2); let end = start && start.matchFragment(this.content, to); return end ? end.validEnd : false; } canAppend(other) { if (other.content.size) return this.canReplace(this.childCount, this.childCount, other.content); else return this.type.compatibleContent(other.type); } check() { this.type.checkContent(this.content); let copy2 = Mark.none; for (let i2 = 0; i2 < this.marks.length; i2++) copy2 = this.marks[i2].addToSet(copy2); if (!Mark.sameSet(copy2, this.marks)) throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map((m2) => m2.type.name)}`); this.content.forEach((node2) => node2.check()); } toJSON() { let obj = { type: this.type.name }; for (let _2 in this.attrs) { obj.attrs = this.attrs; break; } if (this.content.size) obj.content = this.content.toJSON(); if (this.marks.length) obj.marks = this.marks.map((n2) => n2.toJSON()); return obj; } static fromJSON(schema2, json2) { if (!json2) throw new RangeError("Invalid input for Node.fromJSON"); let marks = null; if (json2.marks) { if (!Array.isArray(json2.marks)) throw new RangeError("Invalid mark data for Node.fromJSON"); marks = json2.marks.map(schema2.markFromJSON); } if (json2.type == "text") { if (typeof json2.text != "string") throw new RangeError("Invalid text node in JSON"); return schema2.text(json2.text, marks); } let content = Fragment.fromJSON(schema2, json2.content); return schema2.nodeType(json2.type).create(json2.attrs, content, marks); } } Node$2.prototype.text = void 0; class TextNode extends Node$2 { constructor(type2, attrs, content, marks) { super(type2, attrs, null, marks); if (!content) throw new RangeError("Empty text nodes are not allowed"); this.text = content; } toString() { if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this); return wrapMarks(this.marks, JSON.stringify(this.text)); } get textContent() { return this.text; } textBetween(from2, to) { return this.text.slice(from2, to); } get nodeSize() { return this.text.length; } mark(marks) { return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks); } withText(text2) { if (text2 == this.text) return this; return new TextNode(this.type, this.attrs, text2, this.marks); } cut(from2 = 0, to = this.text.length) { if (from2 == 0 && to == this.text.length) return this; return this.withText(this.text.slice(from2, to)); } eq(other) { return this.sameMarkup(other) && this.text == other.text; } toJSON() { let base2 = super.toJSON(); base2.text = this.text; return base2; } } function wrapMarks(marks, str2) { for (let i2 = marks.length - 1; i2 >= 0; i2--) str2 = marks[i2].type.name + "(" + str2 + ")"; return str2; } class ContentMatch { constructor(validEnd) { this.validEnd = validEnd; this.next = []; this.wrapCache = []; } static parse(string, nodeTypes) { let stream = new TokenStream(string, nodeTypes); if (stream.next == null) return ContentMatch.empty; let expr = parseExpr(stream); if (stream.next) stream.err("Unexpected trailing text"); let match2 = dfa(nfa(expr)); checkForDeadEnds(match2, stream); return match2; } matchType(type2) { for (let i2 = 0; i2 < this.next.length; i2++) if (this.next[i2].type == type2) return this.next[i2].next; return null; } matchFragment(frag, start = 0, end = frag.childCount) { let cur = this; for (let i2 = start; cur && i2 < end; i2++) cur = cur.matchType(frag.child(i2).type); return cur; } get inlineContent() { return this.next.length != 0 && this.next[0].type.isInline; } get defaultType() { for (let i2 = 0; i2 < this.next.length; i2++) { let { type: type2 } = this.next[i2]; if (!(type2.isText || type2.hasRequiredAttrs())) return type2; } return null; } compatible(other) { for (let i2 = 0; i2 < this.next.length; i2++) for (let j2 = 0; j2 < other.next.length; j2++) if (this.next[i2].type == other.next[j2].type) return true; return false; } fillBefore(after, toEnd = false, startIndex = 0) { let seen = [this]; function search2(match2, types2) { let finished = match2.matchFragment(after, startIndex); if (finished && (!toEnd || finished.validEnd)) return Fragment.from(types2.map((tp) => tp.createAndFill())); for (let i2 = 0; i2 < match2.next.length; i2++) { let { type: type2, next: next2 } = match2.next[i2]; if (!(type2.isText || type2.hasRequiredAttrs()) && seen.indexOf(next2) == -1) { seen.push(next2); let found2 = search2(next2, types2.concat(type2)); if (found2) return found2; } } return null; } return search2(this, []); } findWrapping(target2) { for (let i2 = 0; i2 < this.wrapCache.length; i2 += 2) if (this.wrapCache[i2] == target2) return this.wrapCache[i2 + 1]; let computed = this.computeWrapping(target2); this.wrapCache.push(target2, computed); return computed; } computeWrapping(target2) { let seen = /* @__PURE__ */ Object.create(null), active = [{ match: this, type: null, via: null }]; while (active.length) { let current = active.shift(), match2 = current.match; if (match2.matchType(target2)) { let result = []; for (let obj = current; obj.type; obj = obj.via) result.push(obj.type); return result.reverse(); } for (let i2 = 0; i2 < match2.next.length; i2++) { let { type: type2, next: next2 } = match2.next[i2]; if (!type2.isLeaf && !type2.hasRequiredAttrs() && !(type2.name in seen) && (!current.type || next2.validEnd)) { active.push({ match: type2.contentMatch, type: type2, via: current }); seen[type2.name] = true; } } } return null; } get edgeCount() { return this.next.length; } edge(n2) { if (n2 >= this.next.length) throw new RangeError(`There's no ${n2}th edge in this content match`); return this.next[n2]; } toString() { let seen = []; function scan(m2) { seen.push(m2); for (let i2 = 0; i2 < m2.next.length; i2++) if (seen.indexOf(m2.next[i2].next) == -1) scan(m2.next[i2].next); } scan(this); return seen.map((m2, i2) => { let out = i2 + (m2.validEnd ? "*" : " ") + " "; for (let i3 = 0; i3 < m2.next.length; i3++) out += (i3 ? ", " : "") + m2.next[i3].type.name + "->" + seen.indexOf(m2.next[i3].next); return out; }).join("\n"); } } ContentMatch.empty = new ContentMatch(true); class TokenStream { constructor(string, nodeTypes) { this.string = string; this.nodeTypes = nodeTypes; this.inline = null; this.pos = 0; this.tokens = string.split(/\s*(?=\b|\W|$)/); if (this.tokens[this.tokens.length - 1] == "") this.tokens.pop(); if (this.tokens[0] == "") this.tokens.shift(); } get next() { return this.tokens[this.pos]; } eat(tok) { return this.next == tok && (this.pos++ || true); } err(str2) { throw new SyntaxError(str2 + " (in content expression '" + this.string + "')"); } } function parseExpr(stream) { let exprs = []; do { exprs.push(parseExprSeq(stream)); } while (stream.eat("|")); return exprs.length == 1 ? exprs[0] : { type: "choice", exprs }; } function parseExprSeq(stream) { let exprs = []; do { exprs.push(parseExprSubscript(stream)); } while (stream.next && stream.next != ")" && stream.next != "|"); return exprs.length == 1 ? exprs[0] : { type: "seq", exprs }; } function parseExprSubscript(stream) { let expr = parseExprAtom(stream); for (; ; ) { if (stream.eat("+")) expr = { type: "plus", expr }; else if (stream.eat("*")) expr = { type: "star", expr }; else if (stream.eat("?")) expr = { type: "opt", expr }; else if (stream.eat("{")) expr = parseExprRange(stream, expr); else break; } return expr; } function parseNum(stream) { if (/\D/.test(stream.next)) stream.err("Expected number, got '" + stream.next + "'"); let result = Number(stream.next); stream.pos++; return result; } function parseExprRange(stream, expr) { let min2 = parseNum(stream), max2 = min2; if (stream.eat(",")) { if (stream.next != "}") max2 = parseNum(stream); else max2 = -1; } if (!stream.eat("}")) stream.err("Unclosed braced range"); return { type: "range", min: min2, max: max2, expr }; } function resolveName(stream, name) { let types2 = stream.nodeTypes, type2 = types2[name]; if (type2) return [type2]; let result = []; for (let typeName in types2) { let type3 = types2[typeName]; if (type3.groups.indexOf(name) > -1) result.push(type3); } if (result.length == 0) stream.err("No node type or group '" + name + "' found"); return result; } function parseExprAtom(stream) { if (stream.eat("(")) { let expr = parseExpr(stream); if (!stream.eat(")")) stream.err("Missing closing paren"); return expr; } else if (!/\W/.test(stream.next)) { let exprs = resolveName(stream, stream.next).map((type2) => { if (stream.inline == null) stream.inline = type2.isInline; else if (stream.inline != type2.isInline) stream.err("Mixing inline and block content"); return { type: "name", value: type2 }; }); stream.pos++; return exprs.length == 1 ? exprs[0] : { type: "choice", exprs }; } else { stream.err("Unexpected token '" + stream.next + "'"); } } function nfa(expr) { let nfa2 = [[]]; connect(compile2(expr, 0), node2()); return nfa2; function node2() { return nfa2.push([]) - 1; } function edge(from2, to, term) { let edge2 = { term, to }; nfa2[from2].push(edge2); return edge2; } function connect(edges, to) { edges.forEach((edge2) => edge2.to = to); } function compile2(expr2, from2) { if (expr2.type == "choice") { return expr2.exprs.reduce((out, expr3) => out.concat(compile2(expr3, from2)), []); } else if (expr2.type == "seq") { for (let i2 = 0; ; i2++) { let next2 = compile2(expr2.exprs[i2], from2); if (i2 == expr2.exprs.length - 1) return next2; connect(next2, from2 = node2()); } } else if (expr2.type == "star") { let loop = node2(); edge(from2, loop); connect(compile2(expr2.expr, loop), loop); return [edge(loop)]; } else if (expr2.type == "plus") { let loop = node2(); connect(compile2(expr2.expr, from2), loop); connect(compile2(expr2.expr, loop), loop); return [edge(loop)]; } else if (expr2.type == "opt") { return [edge(from2)].concat(compile2(expr2.expr, from2)); } else if (expr2.type == "range") { let cur = from2; for (let i2 = 0; i2 < expr2.min; i2++) { let next2 = node2(); connect(compile2(expr2.expr, cur), next2); cur = next2; } if (expr2.max == -1) { connect(compile2(expr2.expr, cur), cur); } else { for (let i2 = expr2.min; i2 < expr2.max; i2++) { let next2 = node2(); edge(cur, next2); connect(compile2(expr2.expr, cur), next2); cur = next2; } } return [edge(cur)]; } else if (expr2.type == "name") { return [edge(from2, void 0, expr2.value)]; } else { throw new Error("Unknown expr type"); } } } function cmp$2(a2, b2) { return b2 - a2; } function nullFrom(nfa2, node2) { let result = []; scan(node2); return result.sort(cmp$2); function scan(node3) { let edges = nfa2[node3]; if (edges.length == 1 && !edges[0].term) return scan(edges[0].to); result.push(node3); for (let i2 = 0; i2 < edges.length; i2++) { let { term, to } = edges[i2]; if (!term && result.indexOf(to) == -1) scan(to); } } } function dfa(nfa2) { let labeled = /* @__PURE__ */ Object.create(null); return explore(nullFrom(nfa2, 0)); function explore(states) { let out = []; states.forEach((node2) => { nfa2[node2].forEach(({ term, to }) => { if (!term) return; let set2; for (let i2 = 0; i2 < out.length; i2++) if (out[i2][0] == term) set2 = out[i2][1]; nullFrom(nfa2, to).forEach((node3) => { if (!set2) out.push([term, set2 = []]); if (set2.indexOf(node3) == -1) set2.push(node3); }); }); }); let state = labeled[states.join(",")] = new ContentMatch(states.indexOf(nfa2.length - 1) > -1); for (let i2 = 0; i2 < out.length; i2++) { let states2 = out[i2][1].sort(cmp$2); state.next.push({ type: out[i2][0], next: labeled[states2.join(",")] || explore(states2) }); } return state; } } function checkForDeadEnds(match2, stream) { for (let i2 = 0, work = [match2]; i2 < work.length; i2++) { let state = work[i2], dead = !state.validEnd, nodes2 = []; for (let j2 = 0; j2 < state.next.length; j2++) { let { type: type2, next: next2 } = state.next[j2]; nodes2.push(type2.name); if (dead && !(type2.isText || type2.hasRequiredAttrs())) dead = false; if (work.indexOf(next2) == -1) work.push(next2); } if (dead) stream.err("Only non-generatable nodes (" + nodes2.join(", ") + ") in a required position (see https://prosemirror.net/docs/guide/#generatable)"); } } function defaultAttrs(attrs) { let defaults2 = /* @__PURE__ */ Object.create(null); for (let attrName in attrs) { let attr = attrs[attrName]; if (!attr.hasDefault) return null; defaults2[attrName] = attr.default; } return defaults2; } function computeAttrs(attrs, value) { let built = /* @__PURE__ */ Object.create(null); for (let name in attrs) { let given = value && value[name]; if (given === void 0) { let attr = attrs[name]; if (attr.hasDefault) given = attr.default; else throw new RangeError("No value supplied for attribute " + name); } built[name] = given; } return built; } function initAttrs(attrs) { let result = /* @__PURE__ */ Object.create(null); if (attrs) for (let name in attrs) result[name] = new Attribute(attrs[name]); return result; } class NodeType$1 { constructor(name, schema2, spec) { this.name = name; this.schema = schema2; this.spec = spec; this.markSet = null; this.groups = spec.group ? spec.group.split(" ") : []; this.attrs = initAttrs(spec.attrs); this.defaultAttrs = defaultAttrs(this.attrs); this.contentMatch = null; this.inlineContent = null; this.isBlock = !(spec.inline || name == "text"); this.isText = name == "text"; } get isInline() { return !this.isBlock; } get isTextblock() { return this.isBlock && this.inlineContent; } get isLeaf() { return this.contentMatch == ContentMatch.empty; } get isAtom() { return this.isLeaf || !!this.spec.atom; } get whitespace() { return this.spec.whitespace || (this.spec.code ? "pre" : "normal"); } hasRequiredAttrs() { for (let n2 in this.attrs) if (this.attrs[n2].isRequired) return true; return false; } compatibleContent(other) { return this == other || this.contentMatch.compatible(other.contentMatch); } computeAttrs(attrs) { if (!attrs && this.defaultAttrs) return this.defaultAttrs; else return computeAttrs(this.attrs, attrs); } create(attrs = null, content, marks) { if (this.isText) throw new Error("NodeType.create can't construct text nodes"); return new Node$2(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks)); } createChecked(attrs = null, content, marks) { content = Fragment.from(content); this.checkContent(content); return new Node$2(this, this.computeAttrs(attrs), content, Mark.setFrom(marks)); } createAndFill(attrs = null, content, marks) { attrs = this.computeAttrs(attrs); content = Fragment.from(content); if (content.size) { let before = this.contentMatch.fillBefore(content); if (!before) return null; content = before.append(content); } let matched = this.contentMatch.matchFragment(content); let after = matched && matched.fillBefore(Fragment.empty, true); if (!after) return null; return new Node$2(this, attrs, content.append(after), Mark.setFrom(marks)); } validContent(content) { let result = this.contentMatch.matchFragment(content); if (!result || !result.validEnd) return false; for (let i2 = 0; i2 < content.childCount; i2++) if (!this.allowsMarks(content.child(i2).marks)) return false; return true; } checkContent(content) { if (!this.validContent(content)) throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`); } allowsMarkType(markType) { return this.markSet == null || this.markSet.indexOf(markType) > -1; } allowsMarks(marks) { if (this.markSet == null) return true; for (let i2 = 0; i2 < marks.length; i2++) if (!this.allowsMarkType(marks[i2].type)) return false; return true; } allowedMarks(marks) { if (this.markSet == null) return marks; let copy2; for (let i2 = 0; i2 < marks.length; i2++) { if (!this.allowsMarkType(marks[i2].type)) { if (!copy2) copy2 = marks.slice(0, i2); } else if (copy2) { copy2.push(marks[i2]); } } return !copy2 ? marks : copy2.length ? copy2 : Mark.none; } static compile(nodes2, schema2) { let result = /* @__PURE__ */ Object.create(null); nodes2.forEach((name, spec) => result[name] = new NodeType$1(name, schema2, spec)); let topType = schema2.spec.topNode || "doc"; if (!result[topType]) throw new RangeError("Schema is missing its top node type ('" + topType + "')"); if (!result.text) throw new RangeError("Every schema needs a 'text' type"); for (let _2 in result.text.attrs) throw new RangeError("The text node type should not have attributes"); return result; } } class Attribute { constructor(options) { this.hasDefault = Object.prototype.hasOwnProperty.call(options, "default"); this.default = options.default; } get isRequired() { return !this.hasDefault; } } class MarkType { constructor(name, rank, schema2, spec) { this.name = name; this.rank = rank; this.schema = schema2; this.spec = spec; this.attrs = initAttrs(spec.attrs); this.excluded = null; let defaults2 = defaultAttrs(this.attrs); this.instance = defaults2 ? new Mark(this, defaults2) : null; } create(attrs = null) { if (!attrs && this.instance) return this.instance; return new Mark(this, computeAttrs(this.attrs, attrs)); } static compile(marks, schema2) { let result = /* @__PURE__ */ Object.create(null), rank = 0; marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema2, spec)); return result; } removeFromSet(set2) { for (var i2 = 0; i2 < set2.length; i2++) if (set2[i2].type == this) { set2 = set2.slice(0, i2).concat(set2.slice(i2 + 1)); i2--; } return set2; } isInSet(set2) { for (let i2 = 0; i2 < set2.length; i2++) if (set2[i2].type == this) return set2[i2]; } excludes(other) { return this.excluded.indexOf(other) > -1; } } class Schema$2 { constructor(spec) { this.cached = /* @__PURE__ */ Object.create(null); let instanceSpec = this.spec = {}; for (let prop2 in spec) instanceSpec[prop2] = spec[prop2]; instanceSpec.nodes = OrderedMap.from(spec.nodes), instanceSpec.marks = OrderedMap.from(spec.marks || {}), this.nodes = NodeType$1.compile(this.spec.nodes, this); this.marks = MarkType.compile(this.spec.marks, this); let contentExprCache = /* @__PURE__ */ Object.create(null); for (let prop2 in this.nodes) { if (prop2 in this.marks) throw new RangeError(prop2 + " can not be both a node and a mark"); let type2 = this.nodes[prop2], contentExpr = type2.spec.content || "", markExpr = type2.spec.marks; type2.contentMatch = contentExprCache[contentExpr] || (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes)); type2.inlineContent = type2.contentMatch.inlineContent; type2.markSet = markExpr == "_" ? null : markExpr ? gatherMarks(this, markExpr.split(" ")) : markExpr == "" || !type2.inlineContent ? [] : null; } for (let prop2 in this.marks) { let type2 = this.marks[prop2], excl2 = type2.spec.excludes; type2.excluded = excl2 == null ? [type2] : excl2 == "" ? [] : gatherMarks(this, excl2.split(" ")); } this.nodeFromJSON = this.nodeFromJSON.bind(this); this.markFromJSON = this.markFromJSON.bind(this); this.topNodeType = this.nodes[this.spec.topNode || "doc"]; this.cached.wrappings = /* @__PURE__ */ Object.create(null); } node(type2, attrs = null, content, marks) { if (typeof type2 == "string") type2 = this.nodeType(type2); else if (!(type2 instanceof NodeType$1)) throw new RangeError("Invalid node type: " + type2); else if (type2.schema != this) throw new RangeError("Node type from different schema used (" + type2.name + ")"); return type2.createChecked(attrs, content, marks); } text(text2, marks) { let type2 = this.nodes.text; return new TextNode(type2, type2.defaultAttrs, text2, Mark.setFrom(marks)); } mark(type2, attrs) { if (typeof type2 == "string") type2 = this.marks[type2]; return type2.create(attrs); } nodeFromJSON(json2) { return Node$2.fromJSON(this, json2); } markFromJSON(json2) { return Mark.fromJSON(this, json2); } nodeType(name) { let found2 = this.nodes[name]; if (!found2) throw new RangeError("Unknown node type: " + name); return found2; } } function gatherMarks(schema2, marks) { let found2 = []; for (let i2 = 0; i2 < marks.length; i2++) { let name = marks[i2], mark = schema2.marks[name], ok2 = mark; if (mark) { found2.push(mark); } else { for (let prop2 in schema2.marks) { let mark2 = schema2.marks[prop2]; if (name == "_" || mark2.spec.group && mark2.spec.group.split(" ").indexOf(name) > -1) found2.push(ok2 = mark2); } } if (!ok2) throw new SyntaxError("Unknown mark type: '" + marks[i2] + "'"); } return found2; } class DOMParser$1 { constructor(schema2, rules) { this.schema = schema2; this.rules = rules; this.tags = []; this.styles = []; rules.forEach((rule) => { if (rule.tag) this.tags.push(rule); else if (rule.style) this.styles.push(rule); }); this.normalizeLists = !this.tags.some((r2) => { if (!/^(ul|ol)\b/.test(r2.tag) || !r2.node) return false; let node2 = schema2.nodes[r2.node]; return node2.contentMatch.matchType(node2); }); } parse(dom, options = {}) { let context = new ParseContext(this, options, false); context.addAll(dom, options.from, options.to); return context.finish(); } parseSlice(dom, options = {}) { let context = new ParseContext(this, options, true); context.addAll(dom, options.from, options.to); return Slice.maxOpen(context.finish()); } matchTag(dom, context, after) { for (let i2 = after ? this.tags.indexOf(after) + 1 : 0; i2 < this.tags.length; i2++) { let rule = this.tags[i2]; if (matches(dom, rule.tag) && (rule.namespace === void 0 || dom.namespaceURI == rule.namespace) && (!rule.context || context.matchesContext(rule.context))) { if (rule.getAttrs) { let result = rule.getAttrs(dom); if (result === false) continue; rule.attrs = result || void 0; } return rule; } } } matchStyle(prop2, value, context, after) { for (let i2 = after ? this.styles.indexOf(after) + 1 : 0; i2 < this.styles.length; i2++) { let rule = this.styles[i2], style = rule.style; if (style.indexOf(prop2) != 0 || rule.context && !context.matchesContext(rule.context) || style.length > prop2.length && (style.charCodeAt(prop2.length) != 61 || style.slice(prop2.length + 1) != value)) continue; if (rule.getAttrs) { let result = rule.getAttrs(value); if (result === false) continue; rule.attrs = result || void 0; } return rule; } } static schemaRules(schema2) { let result = []; function insert2(rule) { let priority = rule.priority == null ? 50 : rule.priority, i2 = 0; for (; i2 < result.length; i2++) { let next2 = result[i2], nextPriority = next2.priority == null ? 50 : next2.priority; if (nextPriority < priority) break; } result.splice(i2, 0, rule); } for (let name in schema2.marks) { let rules = schema2.marks[name].spec.parseDOM; if (rules) rules.forEach((rule) => { insert2(rule = copy$2(rule)); rule.mark = name; }); } for (let name in schema2.nodes) { let rules = schema2.nodes[name].spec.parseDOM; if (rules) rules.forEach((rule) => { insert2(rule = copy$2(rule)); rule.node = name; }); } return result; } static fromSchema(schema2) { return schema2.cached.domParser || (schema2.cached.domParser = new DOMParser$1(schema2, DOMParser$1.schemaRules(schema2))); } } const blockTags = { address: true, article: true, aside: true, blockquote: true, canvas: true, dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true, footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true, h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true, output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true }; const ignoreTags = { head: true, noscript: true, object: true, script: true, style: true, title: true }; const listTags = { ol: true, ul: true }; const OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4; function wsOptionsFor(type2, preserveWhitespace, base2) { if (preserveWhitespace != null) return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === "full" ? OPT_PRESERVE_WS_FULL : 0); return type2 && type2.whitespace == "pre" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base2 & ~OPT_OPEN_LEFT; } class NodeContext { constructor(type2, attrs, marks, pendingMarks, solid, match2, options) { this.type = type2; this.attrs = attrs; this.marks = marks; this.pendingMarks = pendingMarks; this.solid = solid; this.options = options; this.content = []; this.activeMarks = Mark.none; this.stashMarks = []; this.match = match2 || (options & OPT_OPEN_LEFT ? null : type2.contentMatch); } findWrapping(node2) { if (!this.match) { if (!this.type) return []; let fill = this.type.contentMatch.fillBefore(Fragment.from(node2)); if (fill) { this.match = this.type.contentMatch.matchFragment(fill); } else { let start = this.type.contentMatch, wrap2; if (wrap2 = start.findWrapping(node2.type)) { this.match = start; return wrap2; } else { return null; } } } return this.match.findWrapping(node2.type); } finish(openEnd) { if (!(this.options & OPT_PRESERVE_WS)) { let last2 = this.content[this.content.length - 1], m2; if (last2 && last2.isText && (m2 = /[ \t\r\n\u000c]+$/.exec(last2.text))) { let text2 = last2; if (last2.text.length == m2[0].length) this.content.pop(); else this.content[this.content.length - 1] = text2.withText(text2.text.slice(0, text2.text.length - m2[0].length)); } } let content = Fragment.from(this.content); if (!openEnd && this.match) content = content.append(this.match.fillBefore(Fragment.empty, true)); return this.type ? this.type.create(this.attrs, content, this.marks) : content; } popFromStashMark(mark) { for (let i2 = this.stashMarks.length - 1; i2 >= 0; i2--) if (mark.eq(this.stashMarks[i2])) return this.stashMarks.splice(i2, 1)[0]; } applyPending(nextType) { for (let i2 = 0, pending = this.pendingMarks; i2 < pending.length; i2++) { let mark = pending[i2]; if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) && !mark.isInSet(this.activeMarks)) { this.activeMarks = mark.addToSet(this.activeMarks); this.pendingMarks = mark.removeFromSet(this.pendingMarks); } } } inlineContext(node2) { if (this.type) return this.type.inlineContent; if (this.content.length) return this.content[0].isInline; return node2.parentNode && !blockTags.hasOwnProperty(node2.parentNode.nodeName.toLowerCase()); } } class ParseContext { constructor(parser, options, isOpen) { this.parser = parser; this.options = options; this.isOpen = isOpen; this.open = 0; let topNode = options.topNode, topContext; let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0); if (topNode) topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions); else if (isOpen) topContext = new NodeContext(null, null, Mark.none, Mark.none, true, null, topOptions); else topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, Mark.none, true, null, topOptions); this.nodes = [topContext]; this.find = options.findPositions; this.needsBlock = false; } get top() { return this.nodes[this.open]; } addDOM(dom) { if (dom.nodeType == 3) { this.addTextNode(dom); } else if (dom.nodeType == 1) { let style = dom.getAttribute("style"); let marks = style ? this.readStyles(parseStyles(style)) : null, top2 = this.top; if (marks != null) for (let i2 = 0; i2 < marks.length; i2++) this.addPendingMark(marks[i2]); this.addElement(dom); if (marks != null) for (let i2 = 0; i2 < marks.length; i2++) this.removePendingMark(marks[i2], top2); } } addTextNode(dom) { let value = dom.nodeValue; let top2 = this.top; if (top2.options & OPT_PRESERVE_WS_FULL || top2.inlineContext(dom) || /[^ \t\r\n\u000c]/.test(value)) { if (!(top2.options & OPT_PRESERVE_WS)) { value = value.replace(/[ \t\r\n\u000c]+/g, " "); if (/^[ \t\r\n\u000c]/.test(value) && this.open == this.nodes.length - 1) { let nodeBefore = top2.content[top2.content.length - 1]; let domNodeBefore = dom.previousSibling; if (!nodeBefore || domNodeBefore && domNodeBefore.nodeName == "BR" || nodeBefore.isText && /[ \t\r\n\u000c]$/.test(nodeBefore.text)) value = value.slice(1); } } else if (!(top2.options & OPT_PRESERVE_WS_FULL)) { value = value.replace(/\r?\n|\r/g, " "); } else { value = value.replace(/\r\n?/g, "\n"); } if (value) this.insertNode(this.parser.schema.text(value)); this.findInText(dom); } else { this.findInside(dom); } } addElement(dom, matchAfter) { let name = dom.nodeName.toLowerCase(), ruleID; if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) normalizeList(dom); let rule = this.options.ruleFromNode && this.options.ruleFromNode(dom) || (ruleID = this.parser.matchTag(dom, this, matchAfter)); if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) { this.findInside(dom); this.ignoreFallback(dom); } else if (!rule || rule.skip || rule.closeParent) { if (rule && rule.closeParent) this.open = Math.max(0, this.open - 1); else if (rule && rule.skip.nodeType) dom = rule.skip; let sync, top2 = this.top, oldNeedsBlock = this.needsBlock; if (blockTags.hasOwnProperty(name)) { if (top2.content.length && top2.content[0].isInline && this.open) { this.open--; top2 = this.top; } sync = true; if (!top2.type) this.needsBlock = true; } else if (!dom.firstChild) { this.leafFallback(dom); return; } this.addAll(dom); if (sync) this.sync(top2); this.needsBlock = oldNeedsBlock; } else { this.addElementByRule(dom, rule, rule.consuming === false ? ruleID : void 0); } } leafFallback(dom) { if (dom.nodeName == "BR" && this.top.type && this.top.type.inlineContent) this.addTextNode(dom.ownerDocument.createTextNode("\n")); } ignoreFallback(dom) { if (dom.nodeName == "BR" && (!this.top.type || !this.top.type.inlineContent)) this.findPlace(this.parser.schema.text("-")); } readStyles(styles2) { let marks = Mark.none; style: for (let i2 = 0; i2 < styles2.length; i2 += 2) { for (let after = void 0; ; ) { let rule = this.parser.matchStyle(styles2[i2], styles2[i2 + 1], this, after); if (!rule) continue style; if (rule.ignore) return null; marks = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(marks); if (rule.consuming === false) after = rule; else break; } } return marks; } addElementByRule(dom, rule, continueAfter) { let sync, nodeType, mark; if (rule.node) { nodeType = this.parser.schema.nodes[rule.node]; if (!nodeType.isLeaf) { sync = this.enter(nodeType, rule.attrs || null, rule.preserveWhitespace); } else if (!this.insertNode(nodeType.create(rule.attrs))) { this.leafFallback(dom); } } else { let markType = this.parser.schema.marks[rule.mark]; mark = markType.create(rule.attrs); this.addPendingMark(mark); } let startIn = this.top; if (nodeType && nodeType.isLeaf) { this.findInside(dom); } else if (continueAfter) { this.addElement(dom, continueAfter); } else if (rule.getContent) { this.findInside(dom); rule.getContent(dom, this.parser.schema).forEach((node2) => this.insertNode(node2)); } else { let contentDOM = dom; if (typeof rule.contentElement == "string") contentDOM = dom.querySelector(rule.contentElement); else if (typeof rule.contentElement == "function") contentDOM = rule.contentElement(dom); else if (rule.contentElement) contentDOM = rule.contentElement; this.findAround(dom, contentDOM, true); this.addAll(contentDOM); } if (sync && this.sync(startIn)) this.open--; if (mark) this.removePendingMark(mark, startIn); } addAll(parent, startIndex, endIndex) { let index2 = startIndex || 0; for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index2) { this.findAtPoint(parent, index2); this.addDOM(dom); } this.findAtPoint(parent, index2); } findPlace(node2) { let route2, sync; for (let depth = this.open; depth >= 0; depth--) { let cx = this.nodes[depth]; let found2 = cx.findWrapping(node2); if (found2 && (!route2 || route2.length > found2.length)) { route2 = found2; sync = cx; if (!found2.length) break; } if (cx.solid) break; } if (!route2) return false; this.sync(sync); for (let i2 = 0; i2 < route2.length; i2++) this.enterInner(route2[i2], null, false); return true; } insertNode(node2) { if (node2.isInline && this.needsBlock && !this.top.type) { let block2 = this.textblockFromContext(); if (block2) this.enterInner(block2); } if (this.findPlace(node2)) { this.closeExtra(); let top2 = this.top; top2.applyPending(node2.type); if (top2.match) top2.match = top2.match.matchType(node2.type); let marks = top2.activeMarks; for (let i2 = 0; i2 < node2.marks.length; i2++) if (!top2.type || top2.type.allowsMarkType(node2.marks[i2].type)) marks = node2.marks[i2].addToSet(marks); top2.content.push(node2.mark(marks)); return true; } return false; } enter(type2, attrs, preserveWS) { let ok2 = this.findPlace(type2.create(attrs)); if (ok2) this.enterInner(type2, attrs, true, preserveWS); return ok2; } enterInner(type2, attrs = null, solid = false, preserveWS) { this.closeExtra(); let top2 = this.top; top2.applyPending(type2); top2.match = top2.match && top2.match.matchType(type2); let options = wsOptionsFor(type2, preserveWS, top2.options); if (top2.options & OPT_OPEN_LEFT && top2.content.length == 0) options |= OPT_OPEN_LEFT; this.nodes.push(new NodeContext(type2, attrs, top2.activeMarks, top2.pendingMarks, solid, null, options)); this.open++; } closeExtra(openEnd = false) { let i2 = this.nodes.length - 1; if (i2 > this.open) { for (; i2 > this.open; i2--) this.nodes[i2 - 1].content.push(this.nodes[i2].finish(openEnd)); this.nodes.length = this.open + 1; } } finish() { this.open = 0; this.closeExtra(this.isOpen); return this.nodes[0].finish(this.isOpen || this.options.topOpen); } sync(to) { for (let i2 = this.open; i2 >= 0; i2--) if (this.nodes[i2] == to) { this.open = i2; return true; } return false; } get currentPos() { this.closeExtra(); let pos = 0; for (let i2 = this.open; i2 >= 0; i2--) { let content = this.nodes[i2].content; for (let j2 = content.length - 1; j2 >= 0; j2--) pos += content[j2].nodeSize; if (i2) pos++; } return pos; } findAtPoint(parent, offset) { if (this.find) for (let i2 = 0; i2 < this.find.length; i2++) { if (this.find[i2].node == parent && this.find[i2].offset == offset) this.find[i2].pos = this.currentPos; } } findInside(parent) { if (this.find) for (let i2 = 0; i2 < this.find.length; i2++) { if (this.find[i2].pos == null && parent.nodeType == 1 && parent.contains(this.find[i2].node)) this.find[i2].pos = this.currentPos; } } findAround(parent, content, before) { if (parent != content && this.find) for (let i2 = 0; i2 < this.find.length; i2++) { if (this.find[i2].pos == null && parent.nodeType == 1 && parent.contains(this.find[i2].node)) { let pos = content.compareDocumentPosition(this.find[i2].node); if (pos & (before ? 2 : 4)) this.find[i2].pos = this.currentPos; } } } findInText(textNode) { if (this.find) for (let i2 = 0; i2 < this.find.length; i2++) { if (this.find[i2].node == textNode) this.find[i2].pos = this.currentPos - (textNode.nodeValue.length - this.find[i2].offset); } } matchesContext(context) { if (context.indexOf("|") > -1) return context.split(/\s*\|\s*/).some(this.matchesContext, this); let parts = context.split("/"); let option = this.options.context; let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type); let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1); let match2 = (i2, depth) => { for (; i2 >= 0; i2--) { let part2 = parts[i2]; if (part2 == "") { if (i2 == parts.length - 1 || i2 == 0) continue; for (; depth >= minDepth; depth--) if (match2(i2 - 1, depth)) return true; return false; } else { let next2 = depth > 0 || depth == 0 && useRoot ? this.nodes[depth].type : option && depth >= minDepth ? option.node(depth - minDepth).type : null; if (!next2 || next2.name != part2 && next2.groups.indexOf(part2) == -1) return false; depth--; } } return true; }; return match2(parts.length - 1, this.open); } textblockFromContext() { let $context = this.options.context; if ($context) for (let d2 = $context.depth; d2 >= 0; d2--) { let deflt = $context.node(d2).contentMatchAt($context.indexAfter(d2)).defaultType; if (deflt && deflt.isTextblock && deflt.defaultAttrs) return deflt; } for (let name in this.parser.schema.nodes) { let type2 = this.parser.schema.nodes[name]; if (type2.isTextblock && type2.defaultAttrs) return type2; } } addPendingMark(mark) { let found2 = findSameMarkInSet(mark, this.top.pendingMarks); if (found2) this.top.stashMarks.push(found2); this.top.pendingMarks = mark.addToSet(this.top.pendingMarks); } removePendingMark(mark, upto) { for (let depth = this.open; depth >= 0; depth--) { let level = this.nodes[depth]; let found2 = level.pendingMarks.lastIndexOf(mark); if (found2 > -1) { level.pendingMarks = mark.removeFromSet(level.pendingMarks); } else { level.activeMarks = mark.removeFromSet(level.activeMarks); let stashMark = level.popFromStashMark(mark); if (stashMark && level.type && level.type.allowsMarkType(stashMark.type)) level.activeMarks = stashMark.addToSet(level.activeMarks); } if (level == upto) break; } } } function normalizeList(dom) { for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) { let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null; if (name && listTags.hasOwnProperty(name) && prevItem) { prevItem.appendChild(child); child = prevItem; } else if (name == "li") { prevItem = child; } else if (name) { prevItem = null; } } } function matches(dom, selector) { return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector); } function parseStyles(style) { let re2 = /\s*([\w-]+)\s*:\s*([^;]+)/g, m2, result = []; while (m2 = re2.exec(style)) result.push(m2[1], m2[2].trim()); return result; } function copy$2(obj) { let copy2 = {}; for (let prop2 in obj) copy2[prop2] = obj[prop2]; return copy2; } function markMayApply(markType, nodeType) { let nodes2 = nodeType.schema.nodes; for (let name in nodes2) { let parent = nodes2[name]; if (!parent.allowsMarkType(markType)) continue; let seen = [], scan = (match2) => { seen.push(match2); for (let i2 = 0; i2 < match2.edgeCount; i2++) { let { type: type2, next: next2 } = match2.edge(i2); if (type2 == nodeType) return true; if (seen.indexOf(next2) < 0 && scan(next2)) return true; } }; if (scan(parent.contentMatch)) return true; } } function findSameMarkInSet(mark, set2) { for (let i2 = 0; i2 < set2.length; i2++) { if (mark.eq(set2[i2])) return set2[i2]; } } class DOMSerializer { constructor(nodes2, marks) { this.nodes = nodes2; this.marks = marks; } serializeFragment(fragment, options = {}, target2) { if (!target2) target2 = doc$1(options).createDocumentFragment(); let top2 = target2, active = []; fragment.forEach((node2) => { if (active.length || node2.marks.length) { let keep = 0, rendered = 0; while (keep < active.length && rendered < node2.marks.length) { let next2 = node2.marks[rendered]; if (!this.marks[next2.type.name]) { rendered++; continue; } if (!next2.eq(active[keep][0]) || next2.type.spec.spanning === false) break; keep++; rendered++; } while (keep < active.length) top2 = active.pop()[1]; while (rendered < node2.marks.length) { let add = node2.marks[rendered++]; let markDOM = this.serializeMark(add, node2.isInline, options); if (markDOM) { active.push([add, top2]); top2.appendChild(markDOM.dom); top2 = markDOM.contentDOM || markDOM.dom; } } } top2.appendChild(this.serializeNodeInner(node2, options)); }); return target2; } serializeNodeInner(node2, options) { let { dom, contentDOM } = DOMSerializer.renderSpec(doc$1(options), this.nodes[node2.type.name](node2)); if (contentDOM) { if (node2.isLeaf) throw new RangeError("Content hole not allowed in a leaf node spec"); this.serializeFragment(node2.content, options, contentDOM); } return dom; } serializeNode(node2, options = {}) { let dom = this.serializeNodeInner(node2, options); for (let i2 = node2.marks.length - 1; i2 >= 0; i2--) { let wrap2 = this.serializeMark(node2.marks[i2], node2.isInline, options); if (wrap2) { (wrap2.contentDOM || wrap2.dom).appendChild(dom); dom = wrap2.dom; } } return dom; } serializeMark(mark, inline, options = {}) { let toDOM = this.marks[mark.type.name]; return toDOM && DOMSerializer.renderSpec(doc$1(options), toDOM(mark, inline)); } static renderSpec(doc2, structure, xmlNS = null) { if (typeof structure == "string") return { dom: doc2.createTextNode(structure) }; if (structure.nodeType != null) return { dom: structure }; if (structure.dom && structure.dom.nodeType != null) return structure; let tagName = structure[0], space = tagName.indexOf(" "); if (space > 0) { xmlNS = tagName.slice(0, space); tagName = tagName.slice(space + 1); } let contentDOM; let dom = xmlNS ? doc2.createElementNS(xmlNS, tagName) : doc2.createElement(tagName); let attrs = structure[1], start = 1; if (attrs && typeof attrs == "object" && attrs.nodeType == null && !Array.isArray(attrs)) { start = 2; for (let name in attrs) if (attrs[name] != null) { let space2 = name.indexOf(" "); if (space2 > 0) dom.setAttributeNS(name.slice(0, space2), name.slice(space2 + 1), attrs[name]); else dom.setAttribute(name, attrs[name]); } } for (let i2 = start; i2 < structure.length; i2++) { let child = structure[i2]; if (child === 0) { if (i2 < structure.length - 1 || i2 > start) throw new RangeError("Content hole must be the only child of its parent node"); return { dom, contentDOM: dom }; } else { let { dom: inner, contentDOM: innerContent } = DOMSerializer.renderSpec(doc2, child, xmlNS); dom.appendChild(inner); if (innerContent) { if (contentDOM) throw new RangeError("Multiple content holes"); contentDOM = innerContent; } } } return { dom, contentDOM }; } static fromSchema(schema2) { return schema2.cached.domSerializer || (schema2.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema2), this.marksFromSchema(schema2))); } static nodesFromSchema(schema2) { let result = gatherToDOM(schema2.nodes); if (!result.text) result.text = (node2) => node2.text; return result; } static marksFromSchema(schema2) { return gatherToDOM(schema2.marks); } } function gatherToDOM(obj) { let result = {}; for (let name in obj) { let toDOM = obj[name].spec.toDOM; if (toDOM) result[name] = toDOM; } return result; } function doc$1(options) { return options.document || window.document; } const dist$6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, ContentMatch, DOMParser: DOMParser$1, DOMSerializer, Fragment, Mark, MarkType, Node: Node$2, NodeRange, NodeType: NodeType$1, ReplaceError, ResolvedPos, Schema: Schema$2, Slice }, Symbol.toStringTag, { value: "Module" })); const lower16 = 65535; const factor16 = Math.pow(2, 16); function makeRecover(index2, offset) { return index2 + offset * factor16; } function recoverIndex(value) { return value & lower16; } function recoverOffset(value) { return (value - (value & lower16)) / factor16; } const DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8; class MapResult { constructor(pos, delInfo, recover) { this.pos = pos; this.delInfo = delInfo; this.recover = recover; } get deleted() { return (this.delInfo & DEL_SIDE) > 0; } get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; } get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; } get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; } } class StepMap { constructor(ranges, inverted = false) { this.ranges = ranges; this.inverted = inverted; if (!ranges.length && StepMap.empty) return StepMap.empty; } recover(value) { let diff2 = 0, index2 = recoverIndex(value); if (!this.inverted) for (let i2 = 0; i2 < index2; i2++) diff2 += this.ranges[i2 * 3 + 2] - this.ranges[i2 * 3 + 1]; return this.ranges[index2 * 3] + diff2 + recoverOffset(value); } mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); } map(pos, assoc = 1) { return this._map(pos, assoc, true); } _map(pos, assoc, simple) { let diff2 = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2; for (let i2 = 0; i2 < this.ranges.length; i2 += 3) { let start = this.ranges[i2] - (this.inverted ? diff2 : 0); if (start > pos) break; let oldSize = this.ranges[i2 + oldIndex], newSize = this.ranges[i2 + newIndex], end = start + oldSize; if (pos <= end) { let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc; let result = start + diff2 + (side < 0 ? 0 : newSize); if (simple) return result; let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i2 / 3, pos - start); let del2 = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS; if (assoc < 0 ? pos != start : pos != end) del2 |= DEL_SIDE; return new MapResult(result, del2, recover); } diff2 += newSize - oldSize; } return simple ? pos + diff2 : new MapResult(pos + diff2, 0, null); } touches(pos, recover) { let diff2 = 0, index2 = recoverIndex(recover); let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2; for (let i2 = 0; i2 < this.ranges.length; i2 += 3) { let start = this.ranges[i2] - (this.inverted ? diff2 : 0); if (start > pos) break; let oldSize = this.ranges[i2 + oldIndex], end = start + oldSize; if (pos <= end && i2 == index2 * 3) return true; diff2 += this.ranges[i2 + newIndex] - oldSize; } return false; } forEach(f2) { let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2; for (let i2 = 0, diff2 = 0; i2 < this.ranges.length; i2 += 3) { let start = this.ranges[i2], oldStart = start - (this.inverted ? diff2 : 0), newStart = start + (this.inverted ? 0 : diff2); let oldSize = this.ranges[i2 + oldIndex], newSize = this.ranges[i2 + newIndex]; f2(oldStart, oldStart + oldSize, newStart, newStart + newSize); diff2 += newSize - oldSize; } } invert() { return new StepMap(this.ranges, !this.inverted); } toString() { return (this.inverted ? "-" : "") + JSON.stringify(this.ranges); } static offset(n2) { return n2 == 0 ? StepMap.empty : new StepMap(n2 < 0 ? [0, -n2, 0] : [0, 0, n2]); } } StepMap.empty = new StepMap([]); class Mapping { constructor(maps = [], mirror, from2 = 0, to = maps.length) { this.maps = maps; this.mirror = mirror; this.from = from2; this.to = to; } slice(from2 = 0, to = this.maps.length) { return new Mapping(this.maps, this.mirror, from2, to); } copy() { return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to); } appendMap(map2, mirrors) { this.to = this.maps.push(map2); if (mirrors != null) this.setMirror(this.maps.length - 1, mirrors); } appendMapping(mapping) { for (let i2 = 0, startSize = this.maps.length; i2 < mapping.maps.length; i2++) { let mirr = mapping.getMirror(i2); this.appendMap(mapping.maps[i2], mirr != null && mirr < i2 ? startSize + mirr : void 0); } } getMirror(n2) { if (this.mirror) { for (let i2 = 0; i2 < this.mirror.length; i2++) if (this.mirror[i2] == n2) return this.mirror[i2 + (i2 % 2 ? -1 : 1)]; } } setMirror(n2, m2) { if (!this.mirror) this.mirror = []; this.mirror.push(n2, m2); } appendMappingInverted(mapping) { for (let i2 = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i2 >= 0; i2--) { let mirr = mapping.getMirror(i2); this.appendMap(mapping.maps[i2].invert(), mirr != null && mirr > i2 ? totalSize - mirr - 1 : void 0); } } invert() { let inverse = new Mapping(); inverse.appendMappingInverted(this); return inverse; } map(pos, assoc = 1) { if (this.mirror) return this._map(pos, assoc, true); for (let i2 = this.from; i2 < this.to; i2++) pos = this.maps[i2].map(pos, assoc); return pos; } mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); } _map(pos, assoc, simple) { let delInfo = 0; for (let i2 = this.from; i2 < this.to; i2++) { let map2 = this.maps[i2], result = map2.mapResult(pos, assoc); if (result.recover != null) { let corr = this.getMirror(i2); if (corr != null && corr > i2 && corr < this.to) { i2 = corr; pos = this.maps[corr].recover(result.recover); continue; } } delInfo |= result.delInfo; pos = result.pos; } return simple ? pos : new MapResult(pos, delInfo, null); } } const stepsByID = /* @__PURE__ */ Object.create(null); class Step { getMap() { return StepMap.empty; } merge(other) { return null; } static fromJSON(schema2, json2) { if (!json2 || !json2.stepType) throw new RangeError("Invalid input for Step.fromJSON"); let type2 = stepsByID[json2.stepType]; if (!type2) throw new RangeError(`No step type ${json2.stepType} defined`); return type2.fromJSON(schema2, json2); } static jsonID(id2, stepClass) { if (id2 in stepsByID) throw new RangeError("Duplicate use of step JSON ID " + id2); stepsByID[id2] = stepClass; stepClass.prototype.jsonID = id2; return stepClass; } } class StepResult { constructor(doc2, failed) { this.doc = doc2; this.failed = failed; } static ok(doc2) { return new StepResult(doc2, null); } static fail(message) { return new StepResult(null, message); } static fromReplace(doc2, from2, to, slice2) { try { return StepResult.ok(doc2.replace(from2, to, slice2)); } catch (e2) { if (e2 instanceof ReplaceError) return StepResult.fail(e2.message); throw e2; } } } function mapFragment$1(fragment, f2, parent) { let mapped = []; for (let i2 = 0; i2 < fragment.childCount; i2++) { let child = fragment.child(i2); if (child.content.size) child = child.copy(mapFragment$1(child.content, f2, child)); if (child.isInline) child = f2(child, parent, i2); mapped.push(child); } return Fragment.fromArray(mapped); } class AddMarkStep extends Step { constructor(from2, to, mark) { super(); this.from = from2; this.to = to; this.mark = mark; } apply(doc2) { let oldSlice = doc2.slice(this.from, this.to), $from = doc2.resolve(this.from); let parent = $from.node($from.sharedDepth(this.to)); let slice2 = new Slice(mapFragment$1(oldSlice.content, (node2, parent2) => { if (!node2.isAtom || !parent2.type.allowsMarkType(this.mark.type)) return node2; return node2.mark(this.mark.addToSet(node2.marks)); }, parent), oldSlice.openStart, oldSlice.openEnd); return StepResult.fromReplace(doc2, this.from, this.to, slice2); } invert() { return new RemoveMarkStep(this.from, this.to, this.mark); } map(mapping) { let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); if (from2.deleted && to.deleted || from2.pos >= to.pos) return null; return new AddMarkStep(from2.pos, to.pos, this.mark); } merge(other) { if (other instanceof AddMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark); return null; } toJSON() { return { stepType: "addMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } static fromJSON(schema2, json2) { if (typeof json2.from != "number" || typeof json2.to != "number") throw new RangeError("Invalid input for AddMarkStep.fromJSON"); return new AddMarkStep(json2.from, json2.to, schema2.markFromJSON(json2.mark)); } } Step.jsonID("addMark", AddMarkStep); class RemoveMarkStep extends Step { constructor(from2, to, mark) { super(); this.from = from2; this.to = to; this.mark = mark; } apply(doc2) { let oldSlice = doc2.slice(this.from, this.to); let slice2 = new Slice(mapFragment$1(oldSlice.content, (node2) => { return node2.mark(this.mark.removeFromSet(node2.marks)); }, doc2), oldSlice.openStart, oldSlice.openEnd); return StepResult.fromReplace(doc2, this.from, this.to, slice2); } invert() { return new AddMarkStep(this.from, this.to, this.mark); } map(mapping) { let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); if (from2.deleted && to.deleted || from2.pos >= to.pos) return null; return new RemoveMarkStep(from2.pos, to.pos, this.mark); } merge(other) { if (other instanceof RemoveMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark); return null; } toJSON() { return { stepType: "removeMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } static fromJSON(schema2, json2) { if (typeof json2.from != "number" || typeof json2.to != "number") throw new RangeError("Invalid input for RemoveMarkStep.fromJSON"); return new RemoveMarkStep(json2.from, json2.to, schema2.markFromJSON(json2.mark)); } } Step.jsonID("removeMark", RemoveMarkStep); class AddNodeMarkStep extends Step { constructor(pos, mark) { super(); this.pos = pos; this.mark = mark; } apply(doc2) { let node2 = doc2.nodeAt(this.pos); if (!node2) return StepResult.fail("No node at mark step's position"); let updated = node2.type.create(node2.attrs, null, this.mark.addToSet(node2.marks)); return StepResult.fromReplace(doc2, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node2.isLeaf ? 0 : 1)); } invert(doc2) { let node2 = doc2.nodeAt(this.pos); if (node2) { let newSet = this.mark.addToSet(node2.marks); if (newSet.length == node2.marks.length) { for (let i2 = 0; i2 < node2.marks.length; i2++) if (!node2.marks[i2].isInSet(newSet)) return new AddNodeMarkStep(this.pos, node2.marks[i2]); return new AddNodeMarkStep(this.pos, this.mark); } } return new RemoveNodeMarkStep(this.pos, this.mark); } map(mapping) { let pos = mapping.mapResult(this.pos, 1); return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark); } toJSON() { return { stepType: "addNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } static fromJSON(schema2, json2) { if (typeof json2.pos != "number") throw new RangeError("Invalid input for AddNodeMarkStep.fromJSON"); return new AddNodeMarkStep(json2.pos, schema2.markFromJSON(json2.mark)); } } Step.jsonID("addNodeMark", AddNodeMarkStep); class RemoveNodeMarkStep extends Step { constructor(pos, mark) { super(); this.pos = pos; this.mark = mark; } apply(doc2) { let node2 = doc2.nodeAt(this.pos); if (!node2) return StepResult.fail("No node at mark step's position"); let updated = node2.type.create(node2.attrs, null, this.mark.removeFromSet(node2.marks)); return StepResult.fromReplace(doc2, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node2.isLeaf ? 0 : 1)); } invert(doc2) { let node2 = doc2.nodeAt(this.pos); if (!node2 || !this.mark.isInSet(node2.marks)) return this; return new AddNodeMarkStep(this.pos, this.mark); } map(mapping) { let pos = mapping.mapResult(this.pos, 1); return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark); } toJSON() { return { stepType: "removeNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } static fromJSON(schema2, json2) { if (typeof json2.pos != "number") throw new RangeError("Invalid input for RemoveNodeMarkStep.fromJSON"); return new RemoveNodeMarkStep(json2.pos, schema2.markFromJSON(json2.mark)); } } Step.jsonID("removeNodeMark", RemoveNodeMarkStep); class ReplaceStep extends Step { constructor(from2, to, slice2, structure = false) { super(); this.from = from2; this.to = to; this.slice = slice2; this.structure = structure; } apply(doc2) { if (this.structure && contentBetween(doc2, this.from, this.to)) return StepResult.fail("Structure replace would overwrite content"); return StepResult.fromReplace(doc2, this.from, this.to, this.slice); } getMap() { return new StepMap([this.from, this.to - this.from, this.slice.size]); } invert(doc2) { return new ReplaceStep(this.from, this.from + this.slice.size, doc2.slice(this.from, this.to)); } map(mapping) { let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); if (from2.deletedAcross && to.deletedAcross) return null; return new ReplaceStep(from2.pos, Math.max(from2.pos, to.pos), this.slice); } merge(other) { if (!(other instanceof ReplaceStep) || other.structure || this.structure) return null; if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) { let slice2 = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd); return new ReplaceStep(this.from, this.to + (other.to - other.from), slice2, this.structure); } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) { let slice2 = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd); return new ReplaceStep(other.from, this.to, slice2, this.structure); } else { return null; } } toJSON() { let json2 = { stepType: "replace", from: this.from, to: this.to }; if (this.slice.size) json2.slice = this.slice.toJSON(); if (this.structure) json2.structure = true; return json2; } static fromJSON(schema2, json2) { if (typeof json2.from != "number" || typeof json2.to != "number") throw new RangeError("Invalid input for ReplaceStep.fromJSON"); return new ReplaceStep(json2.from, json2.to, Slice.fromJSON(schema2, json2.slice), !!json2.structure); } } Step.jsonID("replace", ReplaceStep); class ReplaceAroundStep extends Step { constructor(from2, to, gapFrom, gapTo, slice2, insert2, structure = false) { super(); this.from = from2; this.to = to; this.gapFrom = gapFrom; this.gapTo = gapTo; this.slice = slice2; this.insert = insert2; this.structure = structure; } apply(doc2) { if (this.structure && (contentBetween(doc2, this.from, this.gapFrom) || contentBetween(doc2, this.gapTo, this.to))) return StepResult.fail("Structure gap-replace would overwrite content"); let gap2 = doc2.slice(this.gapFrom, this.gapTo); if (gap2.openStart || gap2.openEnd) return StepResult.fail("Gap is not a flat range"); let inserted = this.slice.insertAt(this.insert, gap2.content); if (!inserted) return StepResult.fail("Content does not fit in gap"); return StepResult.fromReplace(doc2, this.from, this.to, inserted); } getMap() { return new StepMap([ this.from, this.gapFrom - this.from, this.insert, this.gapTo, this.to - this.gapTo, this.slice.size - this.insert ]); } invert(doc2) { let gap2 = this.gapTo - this.gapFrom; return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap2, this.from + this.insert, this.from + this.insert + gap2, doc2.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure); } map(mapping) { let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); let gapFrom = mapping.map(this.gapFrom, -1), gapTo = mapping.map(this.gapTo, 1); if (from2.deletedAcross && to.deletedAcross || gapFrom < from2.pos || gapTo > to.pos) return null; return new ReplaceAroundStep(from2.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure); } toJSON() { let json2 = { stepType: "replaceAround", from: this.from, to: this.to, gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert }; if (this.slice.size) json2.slice = this.slice.toJSON(); if (this.structure) json2.structure = true; return json2; } static fromJSON(schema2, json2) { if (typeof json2.from != "number" || typeof json2.to != "number" || typeof json2.gapFrom != "number" || typeof json2.gapTo != "number" || typeof json2.insert != "number") throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON"); return new ReplaceAroundStep(json2.from, json2.to, json2.gapFrom, json2.gapTo, Slice.fromJSON(schema2, json2.slice), json2.insert, !!json2.structure); } } Step.jsonID("replaceAround", ReplaceAroundStep); function contentBetween(doc2, from2, to) { let $from = doc2.resolve(from2), dist2 = to - from2, depth = $from.depth; while (dist2 > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) { depth--; dist2--; } if (dist2 > 0) { let next2 = $from.node(depth).maybeChild($from.indexAfter(depth)); while (dist2 > 0) { if (!next2 || next2.isLeaf) return true; next2 = next2.firstChild; dist2--; } } return false; } function addMark(tr, from2, to, mark) { let removed = [], added = []; let removing, adding; tr.doc.nodesBetween(from2, to, (node2, pos, parent) => { if (!node2.isInline) return; let marks = node2.marks; if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) { let start = Math.max(pos, from2), end = Math.min(pos + node2.nodeSize, to); let newSet = mark.addToSet(marks); for (let i2 = 0; i2 < marks.length; i2++) { if (!marks[i2].isInSet(newSet)) { if (removing && removing.to == start && removing.mark.eq(marks[i2])) removing.to = end; else removed.push(removing = new RemoveMarkStep(start, end, marks[i2])); } } if (adding && adding.to == start) adding.to = end; else added.push(adding = new AddMarkStep(start, end, mark)); } }); removed.forEach((s2) => tr.step(s2)); added.forEach((s2) => tr.step(s2)); } function removeMark(tr, from2, to, mark) { let matched = [], step2 = 0; tr.doc.nodesBetween(from2, to, (node2, pos) => { if (!node2.isInline) return; step2++; let toRemove = null; if (mark instanceof MarkType) { let set2 = node2.marks, found2; while (found2 = mark.isInSet(set2)) { (toRemove || (toRemove = [])).push(found2); set2 = found2.removeFromSet(set2); } } else if (mark) { if (mark.isInSet(node2.marks)) toRemove = [mark]; } else { toRemove = node2.marks; } if (toRemove && toRemove.length) { let end = Math.min(pos + node2.nodeSize, to); for (let i2 = 0; i2 < toRemove.length; i2++) { let style = toRemove[i2], found2; for (let j2 = 0; j2 < matched.length; j2++) { let m2 = matched[j2]; if (m2.step == step2 - 1 && style.eq(matched[j2].style)) found2 = m2; } if (found2) { found2.to = end; found2.step = step2; } else { matched.push({ style, from: Math.max(pos, from2), to: end, step: step2 }); } } } }); matched.forEach((m2) => tr.step(new RemoveMarkStep(m2.from, m2.to, m2.style))); } function clearIncompatible(tr, pos, parentType, match2 = parentType.contentMatch) { let node2 = tr.doc.nodeAt(pos); let delSteps = [], cur = pos + 1; for (let i2 = 0; i2 < node2.childCount; i2++) { let child = node2.child(i2), end = cur + child.nodeSize; let allowed = match2.matchType(child.type); if (!allowed) { delSteps.push(new ReplaceStep(cur, end, Slice.empty)); } else { match2 = allowed; for (let j2 = 0; j2 < child.marks.length; j2++) if (!parentType.allowsMarkType(child.marks[j2].type)) tr.step(new RemoveMarkStep(cur, end, child.marks[j2])); } cur = end; } if (!match2.validEnd) { let fill = match2.fillBefore(Fragment.empty, true); tr.replace(cur, cur, new Slice(fill, 0, 0)); } for (let i2 = delSteps.length - 1; i2 >= 0; i2--) tr.step(delSteps[i2]); } function canCut(node2, start, end) { return (start == 0 || node2.canReplace(start, node2.childCount)) && (end == node2.childCount || node2.canReplace(0, end)); } function liftTarget(range2) { let parent = range2.parent; let content = parent.content.cutByIndex(range2.startIndex, range2.endIndex); for (let depth = range2.depth; ; --depth) { let node2 = range2.$from.node(depth); let index2 = range2.$from.index(depth), endIndex = range2.$to.indexAfter(depth); if (depth < range2.depth && node2.canReplace(index2, endIndex, content)) return depth; if (depth == 0 || node2.type.spec.isolating || !canCut(node2, index2, endIndex)) break; } return null; } function lift$1(tr, range2, target2) { let { $from, $to, depth } = range2; let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1); let start = gapStart, end = gapEnd; let before = Fragment.empty, openStart = 0; for (let d2 = depth, splitting = false; d2 > target2; d2--) if (splitting || $from.index(d2) > 0) { splitting = true; before = Fragment.from($from.node(d2).copy(before)); openStart++; } else { start--; } let after = Fragment.empty, openEnd = 0; for (let d2 = depth, splitting = false; d2 > target2; d2--) if (splitting || $to.after(d2 + 1) < $to.end(d2)) { splitting = true; after = Fragment.from($to.node(d2).copy(after)); openEnd++; } else { end++; } tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true)); } function findWrapping(range2, nodeType, attrs = null, innerRange = range2) { let around = findWrappingOutside(range2, nodeType); let inner = around && findWrappingInside(innerRange, nodeType); if (!inner) return null; return around.map(withAttrs).concat({ type: nodeType, attrs }).concat(inner.map(withAttrs)); } function withAttrs(type2) { return { type: type2, attrs: null }; } function findWrappingOutside(range2, type2) { let { parent, startIndex, endIndex } = range2; let around = parent.contentMatchAt(startIndex).findWrapping(type2); if (!around) return null; let outer = around.length ? around[0] : type2; return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null; } function findWrappingInside(range2, type2) { let { parent, startIndex, endIndex } = range2; let inner = parent.child(startIndex); let inside = type2.contentMatch.findWrapping(inner.type); if (!inside) return null; let lastType = inside.length ? inside[inside.length - 1] : type2; let innerMatch = lastType.contentMatch; for (let i2 = startIndex; innerMatch && i2 < endIndex; i2++) innerMatch = innerMatch.matchType(parent.child(i2).type); if (!innerMatch || !innerMatch.validEnd) return null; return inside; } function wrap$1(tr, range2, wrappers) { let content = Fragment.empty; for (let i2 = wrappers.length - 1; i2 >= 0; i2--) { if (content.size) { let match2 = wrappers[i2].type.contentMatch.matchFragment(content); if (!match2 || !match2.validEnd) throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper"); } content = Fragment.from(wrappers[i2].type.create(wrappers[i2].attrs, content)); } let start = range2.start, end = range2.end; tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true)); } function setBlockType$1(tr, from2, to, type2, attrs) { if (!type2.isTextblock) throw new RangeError("Type given to setBlockType should be a textblock"); let mapFrom = tr.steps.length; tr.doc.nodesBetween(from2, to, (node2, pos) => { if (node2.isTextblock && !node2.hasMarkup(type2, attrs) && canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type2)) { tr.clearIncompatible(tr.mapping.slice(mapFrom).map(pos, 1), type2); let mapping = tr.mapping.slice(mapFrom); let startM = mapping.map(pos, 1), endM = mapping.map(pos + node2.nodeSize, 1); tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type2.create(attrs, null, node2.marks)), 0, 0), 1, true)); return false; } }); } function canChangeType(doc2, pos, type2) { let $pos = doc2.resolve(pos), index2 = $pos.index(); return $pos.parent.canReplaceWith(index2, index2 + 1, type2); } function setNodeMarkup(tr, pos, type2, attrs, marks) { let node2 = tr.doc.nodeAt(pos); if (!node2) throw new RangeError("No node at given position"); if (!type2) type2 = node2.type; let newNode = type2.create(attrs, null, marks || node2.marks); if (node2.isLeaf) return tr.replaceWith(pos, pos + node2.nodeSize, newNode); if (!type2.validContent(node2.content)) throw new RangeError("Invalid content for node type " + type2.name); tr.step(new ReplaceAroundStep(pos, pos + node2.nodeSize, pos + 1, pos + node2.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true)); } function canSplit(doc2, pos, depth = 1, typesAfter) { let $pos = doc2.resolve(pos), base2 = $pos.depth - depth; let innerType = typesAfter && typesAfter[typesAfter.length - 1] || $pos.parent; if (base2 < 0 || $pos.parent.type.spec.isolating || !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) || !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount))) return false; for (let d2 = $pos.depth - 1, i2 = depth - 2; d2 > base2; d2--, i2--) { let node2 = $pos.node(d2), index3 = $pos.index(d2); if (node2.type.spec.isolating) return false; let rest = node2.content.cutByIndex(index3, node2.childCount); let after = typesAfter && typesAfter[i2] || node2; if (after != node2) rest = rest.replaceChild(0, after.type.create(after.attrs)); if (!node2.canReplace(index3 + 1, node2.childCount) || !after.type.validContent(rest)) return false; } let index2 = $pos.indexAfter(base2); let baseType = typesAfter && typesAfter[0]; return $pos.node(base2).canReplaceWith(index2, index2, baseType ? baseType.type : $pos.node(base2 + 1).type); } function split$1(tr, pos, depth = 1, typesAfter) { let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty; for (let d2 = $pos.depth, e2 = $pos.depth - depth, i2 = depth - 1; d2 > e2; d2--, i2--) { before = Fragment.from($pos.node(d2).copy(before)); let typeAfter = typesAfter && typesAfter[i2]; after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d2).copy(after)); } tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true)); } function canJoin(doc2, pos) { let $pos = doc2.resolve(pos), index2 = $pos.index(); return joinable($pos.nodeBefore, $pos.nodeAfter) && $pos.parent.canReplace(index2, index2 + 1); } function joinable(a2, b2) { return !!(a2 && b2 && !a2.isLeaf && a2.canAppend(b2)); } function joinPoint(doc2, pos, dir = -1) { let $pos = doc2.resolve(pos); for (let d2 = $pos.depth; ; d2--) { let before, after, index2 = $pos.index(d2); if (d2 == $pos.depth) { before = $pos.nodeBefore; after = $pos.nodeAfter; } else if (dir > 0) { before = $pos.node(d2 + 1); index2++; after = $pos.node(d2).maybeChild(index2); } else { before = $pos.node(d2).maybeChild(index2 - 1); after = $pos.node(d2 + 1); } if (before && !before.isTextblock && joinable(before, after) && $pos.node(d2).canReplace(index2, index2 + 1)) return pos; if (d2 == 0) break; pos = dir < 0 ? $pos.before(d2) : $pos.after(d2); } } function join(tr, pos, depth) { let step2 = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true); tr.step(step2); } function insertPoint(doc2, pos, nodeType) { let $pos = doc2.resolve(pos); if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType)) return pos; if ($pos.parentOffset == 0) for (let d2 = $pos.depth - 1; d2 >= 0; d2--) { let index2 = $pos.index(d2); if ($pos.node(d2).canReplaceWith(index2, index2, nodeType)) return $pos.before(d2 + 1); if (index2 > 0) return null; } if ($pos.parentOffset == $pos.parent.content.size) for (let d2 = $pos.depth - 1; d2 >= 0; d2--) { let index2 = $pos.indexAfter(d2); if ($pos.node(d2).canReplaceWith(index2, index2, nodeType)) return $pos.after(d2 + 1); if (index2 < $pos.node(d2).childCount) return null; } return null; } function dropPoint(doc2, pos, slice2) { let $pos = doc2.resolve(pos); if (!slice2.content.size) return pos; let content = slice2.content; for (let i2 = 0; i2 < slice2.openStart; i2++) content = content.firstChild.content; for (let pass = 1; pass <= (slice2.openStart == 0 && slice2.size ? 2 : 1); pass++) { for (let d2 = $pos.depth; d2 >= 0; d2--) { let bias = d2 == $pos.depth ? 0 : $pos.pos <= ($pos.start(d2 + 1) + $pos.end(d2 + 1)) / 2 ? -1 : 1; let insertPos = $pos.index(d2) + (bias > 0 ? 1 : 0); let parent = $pos.node(d2), fits = false; if (pass == 1) { fits = parent.canReplace(insertPos, insertPos, content); } else { let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type); fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]); } if (fits) return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d2 + 1) : $pos.after(d2 + 1); } } return null; } function replaceStep(doc2, from2, to = from2, slice2 = Slice.empty) { if (from2 == to && !slice2.size) return null; let $from = doc2.resolve(from2), $to = doc2.resolve(to); if (fitsTrivially($from, $to, slice2)) return new ReplaceStep(from2, to, slice2); return new Fitter($from, $to, slice2).fit(); } function fitsTrivially($from, $to, slice2) { return !slice2.openStart && !slice2.openEnd && $from.start() == $to.start() && $from.parent.canReplace($from.index(), $to.index(), slice2.content); } class Fitter { constructor($from, $to, unplaced) { this.$from = $from; this.$to = $to; this.unplaced = unplaced; this.frontier = []; this.placed = Fragment.empty; for (let i2 = 0; i2 <= $from.depth; i2++) { let node2 = $from.node(i2); this.frontier.push({ type: node2.type, match: node2.contentMatchAt($from.indexAfter(i2)) }); } for (let i2 = $from.depth; i2 > 0; i2--) this.placed = Fragment.from($from.node(i2).copy(this.placed)); } get depth() { return this.frontier.length - 1; } fit() { while (this.unplaced.size) { let fit = this.findFittable(); if (fit) this.placeNodes(fit); else this.openMore() || this.dropNode(); } let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth; let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline)); if (!$to) return null; let content = this.placed, openStart = $from.depth, openEnd = $to.depth; while (openStart && openEnd && content.childCount == 1) { content = content.firstChild.content; openStart--; openEnd--; } let slice2 = new Slice(content, openStart, openEnd); if (moveInline > -1) return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice2, placedSize); if (slice2.size || $from.pos != this.$to.pos) return new ReplaceStep($from.pos, $to.pos, slice2); return null; } findFittable() { for (let pass = 1; pass <= 2; pass++) { for (let sliceDepth = this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) { let fragment, parent = null; if (sliceDepth) { parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild; fragment = parent.content; } else { fragment = this.unplaced.content; } let first = fragment.firstChild; for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) { let { type: type2, match: match2 } = this.frontier[frontierDepth], wrap2, inject = null; if (pass == 1 && (first ? match2.matchType(first.type) || (inject = match2.fillBefore(Fragment.from(first), false)) : parent && type2.compatibleContent(parent.type))) return { sliceDepth, frontierDepth, parent, inject }; else if (pass == 2 && first && (wrap2 = match2.findWrapping(first.type))) return { sliceDepth, frontierDepth, parent, wrap: wrap2 }; if (parent && match2.matchType(parent.type)) break; } } } } openMore() { let { content, openStart, openEnd } = this.unplaced; let inner = contentAt(content, openStart); if (!inner.childCount || inner.firstChild.isLeaf) return false; this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0)); return true; } dropNode() { let { content, openStart, openEnd } = this.unplaced; let inner = contentAt(content, openStart); if (inner.childCount <= 1 && openStart > 0) { let openAtEnd = content.size - openStart <= openStart + inner.size; this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd); } else { this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd); } } placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap: wrap2 }) { while (this.depth > frontierDepth) this.closeFrontierNode(); if (wrap2) for (let i2 = 0; i2 < wrap2.length; i2++) this.openFrontierNode(wrap2[i2]); let slice2 = this.unplaced, fragment = parent ? parent.content : slice2.content; let openStart = slice2.openStart - sliceDepth; let taken = 0, add = []; let { match: match2, type: type2 } = this.frontier[frontierDepth]; if (inject) { for (let i2 = 0; i2 < inject.childCount; i2++) add.push(inject.child(i2)); match2 = match2.matchFragment(inject); } let openEndCount = fragment.size + sliceDepth - (slice2.content.size - slice2.openEnd); while (taken < fragment.childCount) { let next2 = fragment.child(taken), matches2 = match2.matchType(next2.type); if (!matches2) break; taken++; if (taken > 1 || openStart == 0 || next2.content.size) { match2 = matches2; add.push(closeNodeStart(next2.mark(type2.allowedMarks(next2.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1)); } } let toEnd = taken == fragment.childCount; if (!toEnd) openEndCount = -1; this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add)); this.frontier[frontierDepth].match = match2; if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1) this.closeFrontierNode(); for (let i2 = 0, cur = fragment; i2 < openEndCount; i2++) { let node2 = cur.lastChild; this.frontier.push({ type: node2.type, match: node2.contentMatchAt(node2.childCount) }); cur = node2.content; } this.unplaced = !toEnd ? new Slice(dropFromFragment(slice2.content, sliceDepth, taken), slice2.openStart, slice2.openEnd) : sliceDepth == 0 ? Slice.empty : new Slice(dropFromFragment(slice2.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice2.openEnd : sliceDepth - 1); } mustMoveInline() { if (!this.$to.parent.isTextblock) return -1; let top2 = this.frontier[this.depth], level; if (!top2.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top2.type, top2.match, false) || this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth) return -1; let { depth } = this.$to, after = this.$to.after(depth); while (depth > 1 && after == this.$to.end(--depth)) ++after; return after; } findCloseLevel($to) { scan: for (let i2 = Math.min(this.depth, $to.depth); i2 >= 0; i2--) { let { match: match2, type: type2 } = this.frontier[i2]; let dropInner = i2 < $to.depth && $to.end(i2 + 1) == $to.pos + ($to.depth - (i2 + 1)); let fit = contentAfterFits($to, i2, type2, match2, dropInner); if (!fit) continue; for (let d2 = i2 - 1; d2 >= 0; d2--) { let { match: match3, type: type3 } = this.frontier[d2]; let matches2 = contentAfterFits($to, d2, type3, match3, true); if (!matches2 || matches2.childCount) continue scan; } return { depth: i2, fit, move: dropInner ? $to.doc.resolve($to.after(i2 + 1)) : $to }; } } close($to) { let close2 = this.findCloseLevel($to); if (!close2) return null; while (this.depth > close2.depth) this.closeFrontierNode(); if (close2.fit.childCount) this.placed = addToFragment(this.placed, close2.depth, close2.fit); $to = close2.move; for (let d2 = close2.depth + 1; d2 <= $to.depth; d2++) { let node2 = $to.node(d2), add = node2.type.contentMatch.fillBefore(node2.content, true, $to.index(d2)); this.openFrontierNode(node2.type, node2.attrs, add); } return $to; } openFrontierNode(type2, attrs = null, content) { let top2 = this.frontier[this.depth]; top2.match = top2.match.matchType(type2); this.placed = addToFragment(this.placed, this.depth, Fragment.from(type2.create(attrs, content))); this.frontier.push({ type: type2, match: type2.contentMatch }); } closeFrontierNode() { let open = this.frontier.pop(); let add = open.match.fillBefore(Fragment.empty, true); if (add.childCount) this.placed = addToFragment(this.placed, this.frontier.length, add); } } function dropFromFragment(fragment, depth, count) { if (depth == 0) return fragment.cutByIndex(count, fragment.childCount); return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count))); } function addToFragment(fragment, depth, content) { if (depth == 0) return fragment.append(content); return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content))); } function contentAt(fragment, depth) { for (let i2 = 0; i2 < depth; i2++) fragment = fragment.firstChild.content; return fragment; } function closeNodeStart(node2, openStart, openEnd) { if (openStart <= 0) return node2; let frag = node2.content; if (openStart > 1) frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0)); if (openStart > 0) { frag = node2.type.contentMatch.fillBefore(frag).append(frag); if (openEnd <= 0) frag = frag.append(node2.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true)); } return node2.copy(frag); } function contentAfterFits($to, depth, type2, match2, open) { let node2 = $to.node(depth), index2 = open ? $to.indexAfter(depth) : $to.index(depth); if (index2 == node2.childCount && !type2.compatibleContent(node2.type)) return null; let fit = match2.fillBefore(node2.content, true, index2); return fit && !invalidMarks(type2, node2.content, index2) ? fit : null; } function invalidMarks(type2, fragment, start) { for (let i2 = start; i2 < fragment.childCount; i2++) if (!type2.allowsMarks(fragment.child(i2).marks)) return true; return false; } function definesContent(type2) { return type2.spec.defining || type2.spec.definingForContent; } function replaceRange(tr, from2, to, slice2) { if (!slice2.size) return tr.deleteRange(from2, to); let $from = tr.doc.resolve(from2), $to = tr.doc.resolve(to); if (fitsTrivially($from, $to, slice2)) return tr.step(new ReplaceStep(from2, to, slice2)); let targetDepths = coveredDepths($from, tr.doc.resolve(to)); if (targetDepths[targetDepths.length - 1] == 0) targetDepths.pop(); let preferredTarget = -($from.depth + 1); targetDepths.unshift(preferredTarget); for (let d2 = $from.depth, pos = $from.pos - 1; d2 > 0; d2--, pos--) { let spec = $from.node(d2).type.spec; if (spec.defining || spec.definingAsContext || spec.isolating) break; if (targetDepths.indexOf(d2) > -1) preferredTarget = d2; else if ($from.before(d2) == pos) targetDepths.splice(1, 0, -d2); } let preferredTargetIndex = targetDepths.indexOf(preferredTarget); let leftNodes = [], preferredDepth = slice2.openStart; for (let content = slice2.content, i2 = 0; ; i2++) { let node2 = content.firstChild; leftNodes.push(node2); if (i2 == slice2.openStart) break; content = node2.content; } for (let d2 = preferredDepth - 1; d2 >= 0; d2--) { let type2 = leftNodes[d2].type, def2 = definesContent(type2); if (def2 && $from.node(preferredTargetIndex).type != type2) preferredDepth = d2; else if (def2 || !type2.isTextblock) break; } for (let j2 = slice2.openStart; j2 >= 0; j2--) { let openDepth = (j2 + preferredDepth + 1) % (slice2.openStart + 1); let insert2 = leftNodes[openDepth]; if (!insert2) continue; for (let i2 = 0; i2 < targetDepths.length; i2++) { let targetDepth = targetDepths[(i2 + preferredTargetIndex) % targetDepths.length], expand2 = true; if (targetDepth < 0) { expand2 = false; targetDepth = -targetDepth; } let parent = $from.node(targetDepth - 1), index2 = $from.index(targetDepth - 1); if (parent.canReplaceWith(index2, index2, insert2.type, insert2.marks)) return tr.replace($from.before(targetDepth), expand2 ? $to.after(targetDepth) : to, new Slice(closeFragment(slice2.content, 0, slice2.openStart, openDepth), openDepth, slice2.openEnd)); } } let startSteps = tr.steps.length; for (let i2 = targetDepths.length - 1; i2 >= 0; i2--) { tr.replace(from2, to, slice2); if (tr.steps.length > startSteps) break; let depth = targetDepths[i2]; if (depth < 0) continue; from2 = $from.before(depth); to = $to.after(depth); } } function closeFragment(fragment, depth, oldOpen, newOpen, parent) { if (depth < oldOpen) { let first = fragment.firstChild; fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first))); } if (depth > newOpen) { let match2 = parent.contentMatchAt(0); let start = match2.fillBefore(fragment).append(fragment); fragment = start.append(match2.matchFragment(start).fillBefore(Fragment.empty, true)); } return fragment; } function replaceRangeWith(tr, from2, to, node2) { if (!node2.isInline && from2 == to && tr.doc.resolve(from2).parent.content.size) { let point = insertPoint(tr.doc, from2, node2.type); if (point != null) from2 = to = point; } tr.replaceRange(from2, to, new Slice(Fragment.from(node2), 0, 0)); } function deleteRange(tr, from2, to) { let $from = tr.doc.resolve(from2), $to = tr.doc.resolve(to); let covered = coveredDepths($from, $to); for (let i2 = 0; i2 < covered.length; i2++) { let depth = covered[i2], last2 = i2 == covered.length - 1; if (last2 && depth == 0 || $from.node(depth).type.contentMatch.validEnd) return tr.delete($from.start(depth), $to.end(depth)); if (depth > 0 && (last2 || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1)))) return tr.delete($from.before(depth), $to.after(depth)); } for (let d2 = 1; d2 <= $from.depth && d2 <= $to.depth; d2++) { if (from2 - $from.start(d2) == $from.depth - d2 && to > $from.end(d2) && $to.end(d2) - to != $to.depth - d2) return tr.delete($from.before(d2), to); } tr.delete(from2, to); } function coveredDepths($from, $to) { let result = [], minDepth = Math.min($from.depth, $to.depth); for (let d2 = minDepth; d2 >= 0; d2--) { let start = $from.start(d2); if (start < $from.pos - ($from.depth - d2) || $to.end(d2) > $to.pos + ($to.depth - d2) || $from.node(d2).type.spec.isolating || $to.node(d2).type.spec.isolating) break; if (start == $to.start(d2) || d2 == $from.depth && d2 == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent && d2 && $to.start(d2 - 1) == start - 1) result.push(d2); } return result; } class AttrStep extends Step { constructor(pos, attr, value) { super(); this.pos = pos; this.attr = attr; this.value = value; } apply(doc2) { let node2 = doc2.nodeAt(this.pos); if (!node2) return StepResult.fail("No node at attribute step's position"); let attrs = /* @__PURE__ */ Object.create(null); for (let name in node2.attrs) attrs[name] = node2.attrs[name]; attrs[this.attr] = this.value; let updated = node2.type.create(attrs, null, node2.marks); return StepResult.fromReplace(doc2, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node2.isLeaf ? 0 : 1)); } getMap() { return StepMap.empty; } invert(doc2) { return new AttrStep(this.pos, this.attr, doc2.nodeAt(this.pos).attrs[this.attr]); } map(mapping) { let pos = mapping.mapResult(this.pos, 1); return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value); } toJSON() { return { stepType: "attr", pos: this.pos, attr: this.attr, value: this.value }; } static fromJSON(schema2, json2) { if (typeof json2.pos != "number" || typeof json2.attr != "string") throw new RangeError("Invalid input for AttrStep.fromJSON"); return new AttrStep(json2.pos, json2.attr, json2.value); } } Step.jsonID("attr", AttrStep); let TransformError = class extends Error { }; TransformError = function TransformError2(message) { let err = Error.call(this, message); err.__proto__ = TransformError2.prototype; return err; }; TransformError.prototype = Object.create(Error.prototype); TransformError.prototype.constructor = TransformError; TransformError.prototype.name = "TransformError"; class Transform { constructor(doc2) { this.doc = doc2; this.steps = []; this.docs = []; this.mapping = new Mapping(); } get before() { return this.docs.length ? this.docs[0] : this.doc; } step(step2) { let result = this.maybeStep(step2); if (result.failed) throw new TransformError(result.failed); return this; } maybeStep(step2) { let result = step2.apply(this.doc); if (!result.failed) this.addStep(step2, result.doc); return result; } get docChanged() { return this.steps.length > 0; } addStep(step2, doc2) { this.docs.push(this.doc); this.steps.push(step2); this.mapping.appendMap(step2.getMap()); this.doc = doc2; } replace(from2, to = from2, slice2 = Slice.empty) { let step2 = replaceStep(this.doc, from2, to, slice2); if (step2) this.step(step2); return this; } replaceWith(from2, to, content) { return this.replace(from2, to, new Slice(Fragment.from(content), 0, 0)); } delete(from2, to) { return this.replace(from2, to, Slice.empty); } insert(pos, content) { return this.replaceWith(pos, pos, content); } replaceRange(from2, to, slice2) { replaceRange(this, from2, to, slice2); return this; } replaceRangeWith(from2, to, node2) { replaceRangeWith(this, from2, to, node2); return this; } deleteRange(from2, to) { deleteRange(this, from2, to); return this; } lift(range2, target2) { lift$1(this, range2, target2); return this; } join(pos, depth = 1) { join(this, pos, depth); return this; } wrap(range2, wrappers) { wrap$1(this, range2, wrappers); return this; } setBlockType(from2, to = from2, type2, attrs = null) { setBlockType$1(this, from2, to, type2, attrs); return this; } setNodeMarkup(pos, type2, attrs = null, marks = []) { setNodeMarkup(this, pos, type2, attrs, marks); return this; } setNodeAttribute(pos, attr, value) { this.step(new AttrStep(pos, attr, value)); return this; } addNodeMark(pos, mark) { this.step(new AddNodeMarkStep(pos, mark)); return this; } removeNodeMark(pos, mark) { if (!(mark instanceof Mark)) { let node2 = this.doc.nodeAt(pos); if (!node2) throw new RangeError("No node at position " + pos); mark = mark.isInSet(node2.marks); if (!mark) return this; } this.step(new RemoveNodeMarkStep(pos, mark)); return this; } split(pos, depth = 1, typesAfter) { split$1(this, pos, depth, typesAfter); return this; } addMark(from2, to, mark) { addMark(this, from2, to, mark); return this; } removeMark(from2, to, mark) { removeMark(this, from2, to, mark); return this; } clearIncompatible(pos, parentType, match2) { clearIncompatible(this, pos, parentType, match2); return this; } } const dist$5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, AddMarkStep, AddNodeMarkStep, AttrStep, MapResult, Mapping, RemoveMarkStep, RemoveNodeMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, get TransformError() { return TransformError; }, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep }, Symbol.toStringTag, { value: "Module" })); const classesById = /* @__PURE__ */ Object.create(null); class Selection { constructor($anchor, $head, ranges) { this.$anchor = $anchor; this.$head = $head; this.ranges = ranges || [new SelectionRange$1($anchor.min($head), $anchor.max($head))]; } get anchor() { return this.$anchor.pos; } get head() { return this.$head.pos; } get from() { return this.$from.pos; } get to() { return this.$to.pos; } get $from() { return this.ranges[0].$from; } get $to() { return this.ranges[0].$to; } get empty() { let ranges = this.ranges; for (let i2 = 0; i2 < ranges.length; i2++) if (ranges[i2].$from.pos != ranges[i2].$to.pos) return false; return true; } content() { return this.$from.doc.slice(this.from, this.to, true); } replace(tr, content = Slice.empty) { let lastNode2 = content.content.lastChild, lastParent = null; for (let i2 = 0; i2 < content.openEnd; i2++) { lastParent = lastNode2; lastNode2 = lastNode2.lastChild; } let mapFrom = tr.steps.length, ranges = this.ranges; for (let i2 = 0; i2 < ranges.length; i2++) { let { $from, $to } = ranges[i2], mapping = tr.mapping.slice(mapFrom); tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i2 ? Slice.empty : content); if (i2 == 0) selectionToInsertionEnd(tr, mapFrom, (lastNode2 ? lastNode2.isInline : lastParent && lastParent.isTextblock) ? -1 : 1); } } replaceWith(tr, node2) { let mapFrom = tr.steps.length, ranges = this.ranges; for (let i2 = 0; i2 < ranges.length; i2++) { let { $from, $to } = ranges[i2], mapping = tr.mapping.slice(mapFrom); let from2 = mapping.map($from.pos), to = mapping.map($to.pos); if (i2) { tr.deleteRange(from2, to); } else { tr.replaceRangeWith(from2, to, node2); selectionToInsertionEnd(tr, mapFrom, node2.isInline ? -1 : 1); } } } static findFrom($pos, dir, textOnly = false) { let inner = $pos.parent.inlineContent ? new TextSelection($pos) : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly); if (inner) return inner; for (let depth = $pos.depth - 1; depth >= 0; depth--) { let found2 = dir < 0 ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly) : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly); if (found2) return found2; } return null; } static near($pos, bias = 1) { return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0)); } static atStart(doc2) { return findSelectionIn(doc2, doc2, 0, 0, 1) || new AllSelection(doc2); } static atEnd(doc2) { return findSelectionIn(doc2, doc2, doc2.content.size, doc2.childCount, -1) || new AllSelection(doc2); } static fromJSON(doc2, json2) { if (!json2 || !json2.type) throw new RangeError("Invalid input for Selection.fromJSON"); let cls = classesById[json2.type]; if (!cls) throw new RangeError(`No selection type ${json2.type} defined`); return cls.fromJSON(doc2, json2); } static jsonID(id2, selectionClass) { if (id2 in classesById) throw new RangeError("Duplicate use of selection JSON ID " + id2); classesById[id2] = selectionClass; selectionClass.prototype.jsonID = id2; return selectionClass; } getBookmark() { return TextSelection.between(this.$anchor, this.$head).getBookmark(); } } Selection.prototype.visible = true; class SelectionRange$1 { constructor($from, $to) { this.$from = $from; this.$to = $to; } } let warnedAboutTextSelection = false; function checkTextSelection($pos) { if (!warnedAboutTextSelection && !$pos.parent.inlineContent) { warnedAboutTextSelection = true; console["warn"]("TextSelection endpoint not pointing into a node with inline content (" + $pos.parent.type.name + ")"); } } class TextSelection extends Selection { constructor($anchor, $head = $anchor) { checkTextSelection($anchor); checkTextSelection($head); super($anchor, $head); } get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; } map(doc2, mapping) { let $head = doc2.resolve(mapping.map(this.head)); if (!$head.parent.inlineContent) return Selection.near($head); let $anchor = doc2.resolve(mapping.map(this.anchor)); return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head); } replace(tr, content = Slice.empty) { super.replace(tr, content); if (content == Slice.empty) { let marks = this.$from.marksAcross(this.$to); if (marks) tr.ensureMarks(marks); } } eq(other) { return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head; } getBookmark() { return new TextBookmark(this.anchor, this.head); } toJSON() { return { type: "text", anchor: this.anchor, head: this.head }; } static fromJSON(doc2, json2) { if (typeof json2.anchor != "number" || typeof json2.head != "number") throw new RangeError("Invalid input for TextSelection.fromJSON"); return new TextSelection(doc2.resolve(json2.anchor), doc2.resolve(json2.head)); } static create(doc2, anchor, head = anchor) { let $anchor = doc2.resolve(anchor); return new this($anchor, head == anchor ? $anchor : doc2.resolve(head)); } static between($anchor, $head, bias) { let dPos = $anchor.pos - $head.pos; if (!bias || dPos) bias = dPos >= 0 ? 1 : -1; if (!$head.parent.inlineContent) { let found2 = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true); if (found2) $head = found2.$head; else return Selection.near($head, bias); } if (!$anchor.parent.inlineContent) { if (dPos == 0) { $anchor = $head; } else { $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor; if ($anchor.pos < $head.pos != dPos < 0) $anchor = $head; } } return new TextSelection($anchor, $head); } } Selection.jsonID("text", TextSelection); class TextBookmark { constructor(anchor, head) { this.anchor = anchor; this.head = head; } map(mapping) { return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head)); } resolve(doc2) { return TextSelection.between(doc2.resolve(this.anchor), doc2.resolve(this.head)); } } class NodeSelection extends Selection { constructor($pos) { let node2 = $pos.nodeAfter; let $end = $pos.node(0).resolve($pos.pos + node2.nodeSize); super($pos, $end); this.node = node2; } map(doc2, mapping) { let { deleted, pos } = mapping.mapResult(this.anchor); let $pos = doc2.resolve(pos); if (deleted) return Selection.near($pos); return new NodeSelection($pos); } content() { return new Slice(Fragment.from(this.node), 0, 0); } eq(other) { return other instanceof NodeSelection && other.anchor == this.anchor; } toJSON() { return { type: "node", anchor: this.anchor }; } getBookmark() { return new NodeBookmark(this.anchor); } static fromJSON(doc2, json2) { if (typeof json2.anchor != "number") throw new RangeError("Invalid input for NodeSelection.fromJSON"); return new NodeSelection(doc2.resolve(json2.anchor)); } static create(doc2, from2) { return new NodeSelection(doc2.resolve(from2)); } static isSelectable(node2) { return !node2.isText && node2.type.spec.selectable !== false; } } NodeSelection.prototype.visible = false; Selection.jsonID("node", NodeSelection); class NodeBookmark { constructor(anchor) { this.anchor = anchor; } map(mapping) { let { deleted, pos } = mapping.mapResult(this.anchor); return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos); } resolve(doc2) { let $pos = doc2.resolve(this.anchor), node2 = $pos.nodeAfter; if (node2 && NodeSelection.isSelectable(node2)) return new NodeSelection($pos); return Selection.near($pos); } } class AllSelection extends Selection { constructor(doc2) { super(doc2.resolve(0), doc2.resolve(doc2.content.size)); } replace(tr, content = Slice.empty) { if (content == Slice.empty) { tr.delete(0, tr.doc.content.size); let sel = Selection.atStart(tr.doc); if (!sel.eq(tr.selection)) tr.setSelection(sel); } else { super.replace(tr, content); } } toJSON() { return { type: "all" }; } static fromJSON(doc2) { return new AllSelection(doc2); } map(doc2) { return new AllSelection(doc2); } eq(other) { return other instanceof AllSelection; } getBookmark() { return AllBookmark; } } Selection.jsonID("all", AllSelection); const AllBookmark = { map() { return this; }, resolve(doc2) { return new AllSelection(doc2); } }; function findSelectionIn(doc2, node2, pos, index2, dir, text2 = false) { if (node2.inlineContent) return TextSelection.create(doc2, pos); for (let i2 = index2 - (dir > 0 ? 0 : 1); dir > 0 ? i2 < node2.childCount : i2 >= 0; i2 += dir) { let child = node2.child(i2); if (!child.isAtom) { let inner = findSelectionIn(doc2, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text2); if (inner) return inner; } else if (!text2 && NodeSelection.isSelectable(child)) { return NodeSelection.create(doc2, pos - (dir < 0 ? child.nodeSize : 0)); } pos += child.nodeSize * dir; } return null; } function selectionToInsertionEnd(tr, startLen, bias) { let last2 = tr.steps.length - 1; if (last2 < startLen) return; let step2 = tr.steps[last2]; if (!(step2 instanceof ReplaceStep || step2 instanceof ReplaceAroundStep)) return; let map2 = tr.mapping.maps[last2], end; map2.forEach((_from, _to, _newFrom, newTo) => { if (end == null) end = newTo; }); tr.setSelection(Selection.near(tr.doc.resolve(end), bias)); } const UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4; class Transaction extends Transform { constructor(state) { super(state.doc); this.curSelectionFor = 0; this.updated = 0; this.meta = /* @__PURE__ */ Object.create(null); this.time = Date.now(); this.curSelection = state.selection; this.storedMarks = state.storedMarks; } get selection() { if (this.curSelectionFor < this.steps.length) { this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor)); this.curSelectionFor = this.steps.length; } return this.curSelection; } setSelection(selection) { if (selection.$from.doc != this.doc) throw new RangeError("Selection passed to setSelection must point at the current document"); this.curSelection = selection; this.curSelectionFor = this.steps.length; this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS; this.storedMarks = null; return this; } get selectionSet() { return (this.updated & UPDATED_SEL) > 0; } setStoredMarks(marks) { this.storedMarks = marks; this.updated |= UPDATED_MARKS; return this; } ensureMarks(marks) { if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks)) this.setStoredMarks(marks); return this; } addStoredMark(mark) { return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks())); } removeStoredMark(mark) { return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks())); } get storedMarksSet() { return (this.updated & UPDATED_MARKS) > 0; } addStep(step2, doc2) { super.addStep(step2, doc2); this.updated = this.updated & ~UPDATED_MARKS; this.storedMarks = null; } setTime(time) { this.time = time; return this; } replaceSelection(slice2) { this.selection.replace(this, slice2); return this; } replaceSelectionWith(node2, inheritMarks = true) { let selection = this.selection; if (inheritMarks) node2 = node2.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : selection.$from.marksAcross(selection.$to) || Mark.none)); selection.replaceWith(this, node2); return this; } deleteSelection() { this.selection.replace(this); return this; } insertText(text2, from2, to) { let schema2 = this.doc.type.schema; if (from2 == null) { if (!text2) return this.deleteSelection(); return this.replaceSelectionWith(schema2.text(text2), true); } else { if (to == null) to = from2; to = to == null ? from2 : to; if (!text2) return this.deleteRange(from2, to); let marks = this.storedMarks; if (!marks) { let $from = this.doc.resolve(from2); marks = to == from2 ? $from.marks() : $from.marksAcross(this.doc.resolve(to)); } this.replaceRangeWith(from2, to, schema2.text(text2, marks)); if (!this.selection.empty) this.setSelection(Selection.near(this.selection.$to)); return this; } } setMeta(key2, value) { this.meta[typeof key2 == "string" ? key2 : key2.key] = value; return this; } getMeta(key2) { return this.meta[typeof key2 == "string" ? key2 : key2.key]; } get isGeneric() { for (let _2 in this.meta) return false; return true; } scrollIntoView() { this.updated |= UPDATED_SCROLL; return this; } get scrolledIntoView() { return (this.updated & UPDATED_SCROLL) > 0; } } function bind(f2, self2) { return !self2 || !f2 ? f2 : f2.bind(self2); } class FieldDesc { constructor(name, desc, self2) { this.name = name; this.init = bind(desc.init, self2); this.apply = bind(desc.apply, self2); } } const baseFields = [ new FieldDesc("doc", { init(config) { return config.doc || config.schema.topNodeType.createAndFill(); }, apply(tr) { return tr.doc; } }), new FieldDesc("selection", { init(config, instance) { return config.selection || Selection.atStart(instance.doc); }, apply(tr) { return tr.selection; } }), new FieldDesc("storedMarks", { init(config) { return config.storedMarks || null; }, apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; } }), new FieldDesc("scrollToSelection", { init() { return 0; }, apply(tr, prev2) { return tr.scrolledIntoView ? prev2 + 1 : prev2; } }) ]; class Configuration { constructor(schema2, plugins) { this.schema = schema2; this.plugins = []; this.pluginsByKey = /* @__PURE__ */ Object.create(null); this.fields = baseFields.slice(); if (plugins) plugins.forEach((plugin2) => { if (this.pluginsByKey[plugin2.key]) throw new RangeError("Adding different instances of a keyed plugin (" + plugin2.key + ")"); this.plugins.push(plugin2); this.pluginsByKey[plugin2.key] = plugin2; if (plugin2.spec.state) this.fields.push(new FieldDesc(plugin2.key, plugin2.spec.state, plugin2)); }); } } class EditorState { constructor(config) { this.config = config; } get schema() { return this.config.schema; } get plugins() { return this.config.plugins; } apply(tr) { return this.applyTransaction(tr).state; } filterTransaction(tr, ignore = -1) { for (let i2 = 0; i2 < this.config.plugins.length; i2++) if (i2 != ignore) { let plugin2 = this.config.plugins[i2]; if (plugin2.spec.filterTransaction && !plugin2.spec.filterTransaction.call(plugin2, tr, this)) return false; } return true; } applyTransaction(rootTr) { if (!this.filterTransaction(rootTr)) return { state: this, transactions: [] }; let trs = [rootTr], newState = this.applyInner(rootTr), seen = null; for (; ; ) { let haveNew = false; for (let i2 = 0; i2 < this.config.plugins.length; i2++) { let plugin2 = this.config.plugins[i2]; if (plugin2.spec.appendTransaction) { let n2 = seen ? seen[i2].n : 0, oldState = seen ? seen[i2].state : this; let tr = n2 < trs.length && plugin2.spec.appendTransaction.call(plugin2, n2 ? trs.slice(n2) : trs, oldState, newState); if (tr && newState.filterTransaction(tr, i2)) { tr.setMeta("appendedTransaction", rootTr); if (!seen) { seen = []; for (let j2 = 0; j2 < this.config.plugins.length; j2++) seen.push(j2 < i2 ? { state: newState, n: trs.length } : { state: this, n: 0 }); } trs.push(tr); newState = newState.applyInner(tr); haveNew = true; } if (seen) seen[i2] = { state: newState, n: trs.length }; } } if (!haveNew) return { state: newState, transactions: trs }; } } applyInner(tr) { if (!tr.before.eq(this.doc)) throw new RangeError("Applying a mismatched transaction"); let newInstance = new EditorState(this.config), fields = this.config.fields; for (let i2 = 0; i2 < fields.length; i2++) { let field = fields[i2]; newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance); } return newInstance; } get tr() { return new Transaction(this); } static create(config) { let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins); let instance = new EditorState($config); for (let i2 = 0; i2 < $config.fields.length; i2++) instance[$config.fields[i2].name] = $config.fields[i2].init(config, instance); return instance; } reconfigure(config) { let $config = new Configuration(this.schema, config.plugins); let fields = $config.fields, instance = new EditorState($config); for (let i2 = 0; i2 < fields.length; i2++) { let name = fields[i2].name; instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i2].init(config, instance); } return instance; } toJSON(pluginFields) { let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() }; if (this.storedMarks) result.storedMarks = this.storedMarks.map((m2) => m2.toJSON()); if (pluginFields && typeof pluginFields == "object") for (let prop2 in pluginFields) { if (prop2 == "doc" || prop2 == "selection") throw new RangeError("The JSON fields `doc` and `selection` are reserved"); let plugin2 = pluginFields[prop2], state = plugin2.spec.state; if (state && state.toJSON) result[prop2] = state.toJSON.call(plugin2, this[plugin2.key]); } return result; } static fromJSON(config, json2, pluginFields) { if (!json2) throw new RangeError("Invalid input for EditorState.fromJSON"); if (!config.schema) throw new RangeError("Required config field 'schema' missing"); let $config = new Configuration(config.schema, config.plugins); let instance = new EditorState($config); $config.fields.forEach((field) => { if (field.name == "doc") { instance.doc = Node$2.fromJSON(config.schema, json2.doc); } else if (field.name == "selection") { instance.selection = Selection.fromJSON(instance.doc, json2.selection); } else if (field.name == "storedMarks") { if (json2.storedMarks) instance.storedMarks = json2.storedMarks.map(config.schema.markFromJSON); } else { if (pluginFields) for (let prop2 in pluginFields) { let plugin2 = pluginFields[prop2], state = plugin2.spec.state; if (plugin2.key == field.name && state && state.fromJSON && Object.prototype.hasOwnProperty.call(json2, prop2)) { instance[field.name] = state.fromJSON.call(plugin2, config, json2[prop2], instance); return; } } instance[field.name] = field.init(config, instance); } }); return instance; } } function bindProps(obj, self2, target2) { for (let prop2 in obj) { let val = obj[prop2]; if (val instanceof Function) val = val.bind(self2); else if (prop2 == "handleDOMEvents") val = bindProps(val, self2, {}); target2[prop2] = val; } return target2; } class Plugin { constructor(spec) { this.spec = spec; this.props = {}; if (spec.props) bindProps(spec.props, this, this.props); this.key = spec.key ? spec.key.key : createKey$1("plugin"); } getState(state) { return state[this.key]; } } const keys$2 = /* @__PURE__ */ Object.create(null); function createKey$1(name) { if (name in keys$2) return name + "$" + ++keys$2[name]; keys$2[name] = 0; return name + "$"; } class PluginKey { constructor(name = "key") { this.key = createKey$1(name); } get(state) { return state.config.pluginsByKey[this.key]; } getState(state) { return state[this.key]; } } const dist$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange: SelectionRange$1, TextSelection, Transaction }, Symbol.toStringTag, { value: "Module" })); var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs(x2) { return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2; } function getAugmentedNamespace(n2) { var f2 = n2.default; if (typeof f2 == "function") { var a2 = function() { return f2.apply(this, arguments); }; a2.prototype = f2.prototype; } else a2 = {}; Object.defineProperty(a2, "__esModule", { value: true }); Object.keys(n2).forEach(function(k2) { var d2 = Object.getOwnPropertyDescriptor(n2, k2); Object.defineProperty(a2, k2, d2.get ? d2 : { enumerable: true, get: function() { return n2[k2]; } }); }); return a2; } var dist$3 = {}; const require$$0$3 = /* @__PURE__ */ getAugmentedNamespace(dist$4); const require$$1 = /* @__PURE__ */ getAugmentedNamespace(dist$6); const domIndex = function(node2) { for (var index2 = 0; ; index2++) { node2 = node2.previousSibling; if (!node2) return index2; } }; const parentNode = function(node2) { let parent = node2.assignedSlot || node2.parentNode; return parent && parent.nodeType == 11 ? parent.host : parent; }; let reusedRange = null; const textRange = function(node2, from2, to) { let range2 = reusedRange || (reusedRange = document.createRange()); range2.setEnd(node2, to == null ? node2.nodeValue.length : to); range2.setStart(node2, from2 || 0); return range2; }; const isEquivalentPosition = function(node2, off, targetNode, targetOff) { return targetNode && (scanFor(node2, off, targetNode, targetOff, -1) || scanFor(node2, off, targetNode, targetOff, 1)); }; const atomElements = /^(img|br|input|textarea|hr)$/i; function scanFor(node2, off, targetNode, targetOff, dir) { for (; ; ) { if (node2 == targetNode && off == targetOff) return true; if (off == (dir < 0 ? 0 : nodeSize(node2))) { let parent = node2.parentNode; if (!parent || parent.nodeType != 1 || hasBlockDesc(node2) || atomElements.test(node2.nodeName) || node2.contentEditable == "false") return false; off = domIndex(node2) + (dir < 0 ? 0 : 1); node2 = parent; } else if (node2.nodeType == 1) { node2 = node2.childNodes[off + (dir < 0 ? -1 : 0)]; if (node2.contentEditable == "false") return false; off = dir < 0 ? nodeSize(node2) : 0; } else { return false; } } } function nodeSize(node2) { return node2.nodeType == 3 ? node2.nodeValue.length : node2.childNodes.length; } function isOnEdge(node2, offset, parent) { for (let atStart = offset == 0, atEnd = offset == nodeSize(node2); atStart || atEnd; ) { if (node2 == parent) return true; let index2 = domIndex(node2); node2 = node2.parentNode; if (!node2) return false; atStart = atStart && index2 == 0; atEnd = atEnd && index2 == nodeSize(node2); } } function hasBlockDesc(dom) { let desc; for (let cur = dom; cur; cur = cur.parentNode) if (desc = cur.pmViewDesc) break; return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom); } const selectionCollapsed = function(domSel) { return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset); }; function keyEvent(keyCode, key2) { let event = document.createEvent("Event"); event.initEvent("keydown", true, true); event.keyCode = keyCode; event.key = event.code = key2; return event; } function deepActiveElement(doc2) { let elt = doc2.activeElement; while (elt && elt.shadowRoot) elt = elt.shadowRoot.activeElement; return elt; } const nav = typeof navigator != "undefined" ? navigator : null; const doc = typeof document != "undefined" ? document : null; const agent = nav && nav.userAgent || ""; const ie_edge = /Edge\/(\d+)/.exec(agent); const ie_upto10 = /MSIE \d/.exec(agent); const ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(agent); const ie$2 = !!(ie_upto10 || ie_11up || ie_edge); const ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0; const gecko = !ie$2 && /gecko\/(\d+)/i.test(agent); gecko && +(/Firefox\/(\d+)/.exec(agent) || [0, 0])[1]; const _chrome = !ie$2 && /Chrome\/(\d+)/.exec(agent); const chrome$1 = !!_chrome; const chrome_version = _chrome ? +_chrome[1] : 0; const safari = !ie$2 && !!nav && /Apple Computer/.test(nav.vendor); const ios = safari && (/Mobile\/\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2); const mac$2 = ios || (nav ? /Mac/.test(nav.platform) : false); const android = /Android \d/.test(agent); const webkit = !!doc && "webkitFontSmoothing" in doc.documentElement.style; const webkit_version = webkit ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0; function windowRect(doc2) { return { left: 0, right: doc2.documentElement.clientWidth, top: 0, bottom: doc2.documentElement.clientHeight }; } function getSide(value, side) { return typeof value == "number" ? value : value[side]; } function clientRect(node2) { let rect2 = node2.getBoundingClientRect(); let scaleX = rect2.width / node2.offsetWidth || 1; let scaleY = rect2.height / node2.offsetHeight || 1; return { left: rect2.left, right: rect2.left + node2.clientWidth * scaleX, top: rect2.top, bottom: rect2.top + node2.clientHeight * scaleY }; } function scrollRectIntoView(view, rect2, startDOM) { let scrollThreshold = view.someProp("scrollThreshold") || 0, scrollMargin = view.someProp("scrollMargin") || 5; let doc2 = view.dom.ownerDocument; for (let parent = startDOM || view.dom; ; parent = parentNode(parent)) { if (!parent) break; if (parent.nodeType != 1) continue; let elt = parent; let atTop = elt == doc2.body; let bounding = atTop ? windowRect(doc2) : clientRect(elt); let moveX = 0, moveY = 0; if (rect2.top < bounding.top + getSide(scrollThreshold, "top")) moveY = -(bounding.top - rect2.top + getSide(scrollMargin, "top")); else if (rect2.bottom > bounding.bottom - getSide(scrollThreshold, "bottom")) moveY = rect2.bottom - bounding.bottom + getSide(scrollMargin, "bottom"); if (rect2.left < bounding.left + getSide(scrollThreshold, "left")) moveX = -(bounding.left - rect2.left + getSide(scrollMargin, "left")); else if (rect2.right > bounding.right - getSide(scrollThreshold, "right")) moveX = rect2.right - bounding.right + getSide(scrollMargin, "right"); if (moveX || moveY) { if (atTop) { doc2.defaultView.scrollBy(moveX, moveY); } else { let startX = elt.scrollLeft, startY = elt.scrollTop; if (moveY) elt.scrollTop += moveY; if (moveX) elt.scrollLeft += moveX; let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY; rect2 = { left: rect2.left - dX, top: rect2.top - dY, right: rect2.right - dX, bottom: rect2.bottom - dY }; } } if (atTop) break; } } function storeScrollPos(view) { let rect2 = view.dom.getBoundingClientRect(), startY = Math.max(0, rect2.top); let refDOM, refTop; for (let x2 = (rect2.left + rect2.right) / 2, y2 = startY + 1; y2 < Math.min(innerHeight, rect2.bottom); y2 += 5) { let dom = view.root.elementFromPoint(x2, y2); if (!dom || dom == view.dom || !view.dom.contains(dom)) continue; let localRect = dom.getBoundingClientRect(); if (localRect.top >= startY - 20) { refDOM = dom; refTop = localRect.top; break; } } return { refDOM, refTop, stack: scrollStack(view.dom) }; } function scrollStack(dom) { let stack = [], doc2 = dom.ownerDocument; for (let cur = dom; cur; cur = parentNode(cur)) { stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft }); if (dom == doc2) break; } return stack; } function resetScrollPos({ refDOM, refTop, stack }) { let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0; restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop); } function restoreScrollStack(stack, dTop) { for (let i2 = 0; i2 < stack.length; i2++) { let { dom, top: top2, left } = stack[i2]; if (dom.scrollTop != top2 + dTop) dom.scrollTop = top2 + dTop; if (dom.scrollLeft != left) dom.scrollLeft = left; } } let preventScrollSupported = null; function focusPreventScroll(dom) { if (dom.setActive) return dom.setActive(); if (preventScrollSupported) return dom.focus(preventScrollSupported); let stored = scrollStack(dom); dom.focus(preventScrollSupported == null ? { get preventScroll() { preventScrollSupported = { preventScroll: true }; return true; } } : void 0); if (!preventScrollSupported) { preventScrollSupported = false; restoreScrollStack(stored, 0); } } function findOffsetInNode(node2, coords) { let closest, dxClosest = 2e8, coordsClosest, offset = 0; let rowBot = coords.top, rowTop = coords.top; for (let child = node2.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) { let rects; if (child.nodeType == 1) rects = child.getClientRects(); else if (child.nodeType == 3) rects = textRange(child).getClientRects(); else continue; for (let i2 = 0; i2 < rects.length; i2++) { let rect2 = rects[i2]; if (rect2.top <= rowBot && rect2.bottom >= rowTop) { rowBot = Math.max(rect2.bottom, rowBot); rowTop = Math.min(rect2.top, rowTop); let dx = rect2.left > coords.left ? rect2.left - coords.left : rect2.right < coords.left ? coords.left - rect2.right : 0; if (dx < dxClosest) { closest = child; dxClosest = dx; coordsClosest = dx && closest.nodeType == 3 ? { left: rect2.right < coords.left ? rect2.right : rect2.left, top: coords.top } : coords; if (child.nodeType == 1 && dx) offset = childIndex + (coords.left >= (rect2.left + rect2.right) / 2 ? 1 : 0); continue; } } if (!closest && (coords.left >= rect2.right && coords.top >= rect2.top || coords.left >= rect2.left && coords.top >= rect2.bottom)) offset = childIndex + 1; } } if (closest && closest.nodeType == 3) return findOffsetInText(closest, coordsClosest); if (!closest || dxClosest && closest.nodeType == 1) return { node: node2, offset }; return findOffsetInNode(closest, coordsClosest); } function findOffsetInText(node2, coords) { let len = node2.nodeValue.length; let range2 = document.createRange(); for (let i2 = 0; i2 < len; i2++) { range2.setEnd(node2, i2 + 1); range2.setStart(node2, i2); let rect2 = singleRect(range2, 1); if (rect2.top == rect2.bottom) continue; if (inRect(coords, rect2)) return { node: node2, offset: i2 + (coords.left >= (rect2.left + rect2.right) / 2 ? 1 : 0) }; } return { node: node2, offset: 0 }; } function inRect(coords, rect2) { return coords.left >= rect2.left - 1 && coords.left <= rect2.right + 1 && coords.top >= rect2.top - 1 && coords.top <= rect2.bottom + 1; } function targetKludge(dom, coords) { let parent = dom.parentNode; if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left) return parent; return dom; } function posFromElement(view, elt, coords) { let { node: node2, offset } = findOffsetInNode(elt, coords), bias = -1; if (node2.nodeType == 1 && !node2.firstChild) { let rect2 = node2.getBoundingClientRect(); bias = rect2.left != rect2.right && coords.left > (rect2.left + rect2.right) / 2 ? 1 : -1; } return view.docView.posFromDOM(node2, offset, bias); } function posFromCaret(view, node2, offset, coords) { let outside2 = -1; for (let cur = node2; ; ) { if (cur == view.dom) break; let desc = view.docView.nearestDesc(cur, true); if (!desc) return null; if (desc.node.isBlock && desc.parent) { let rect2 = desc.dom.getBoundingClientRect(); if (rect2.left > coords.left || rect2.top > coords.top) outside2 = desc.posBefore; else if (rect2.right < coords.left || rect2.bottom < coords.top) outside2 = desc.posAfter; else break; } cur = desc.dom.parentNode; } return outside2 > -1 ? outside2 : view.docView.posFromDOM(node2, offset, 1); } function elementFromPoint(element, coords, box) { let len = element.childNodes.length; if (len && box.top < box.bottom) { for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i2 = startI; ; ) { let child = element.childNodes[i2]; if (child.nodeType == 1) { let rects = child.getClientRects(); for (let j2 = 0; j2 < rects.length; j2++) { let rect2 = rects[j2]; if (inRect(coords, rect2)) return elementFromPoint(child, coords, rect2); } } if ((i2 = (i2 + 1) % len) == startI) break; } } return element; } function posAtCoords(view, coords) { let doc2 = view.dom.ownerDocument, node2, offset = 0; if (doc2.caretPositionFromPoint) { try { let pos2 = doc2.caretPositionFromPoint(coords.left, coords.top); if (pos2) ({ offsetNode: node2, offset } = pos2); } catch (_2) { } } if (!node2 && doc2.caretRangeFromPoint) { let range2 = doc2.caretRangeFromPoint(coords.left, coords.top); if (range2) ({ startContainer: node2, startOffset: offset } = range2); } let elt = (view.root.elementFromPoint ? view.root : doc2).elementFromPoint(coords.left, coords.top); let pos; if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) { let box = view.dom.getBoundingClientRect(); if (!inRect(coords, box)) return null; elt = elementFromPoint(view.dom, coords, box); if (!elt) return null; } if (safari) { for (let p2 = elt; node2 && p2; p2 = parentNode(p2)) if (p2.draggable) node2 = void 0; } elt = targetKludge(elt, coords); if (node2) { if (gecko && node2.nodeType == 1) { offset = Math.min(offset, node2.childNodes.length); if (offset < node2.childNodes.length) { let next2 = node2.childNodes[offset], box; if (next2.nodeName == "IMG" && (box = next2.getBoundingClientRect()).right <= coords.left && box.bottom > coords.top) offset++; } } if (node2 == view.dom && offset == node2.childNodes.length - 1 && node2.lastChild.nodeType == 1 && coords.top > node2.lastChild.getBoundingClientRect().bottom) pos = view.state.doc.content.size; else if (offset == 0 || node2.nodeType != 1 || node2.childNodes[offset - 1].nodeName != "BR") pos = posFromCaret(view, node2, offset, coords); } if (pos == null) pos = posFromElement(view, elt, coords); let desc = view.docView.nearestDesc(elt, true); return { pos, inside: desc ? desc.posAtStart - desc.border : -1 }; } function singleRect(target2, bias) { let rects = target2.getClientRects(); return !rects.length ? target2.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1]; } const BIDI = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; function coordsAtPos(view, pos, side) { let { node: node2, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1); let supportEmptyRange = webkit || gecko; if (node2.nodeType == 3) { if (supportEmptyRange && (BIDI.test(node2.nodeValue) || (side < 0 ? !offset : offset == node2.nodeValue.length))) { let rect2 = singleRect(textRange(node2, offset, offset), side); if (gecko && offset && /\s/.test(node2.nodeValue[offset - 1]) && offset < node2.nodeValue.length) { let rectBefore = singleRect(textRange(node2, offset - 1, offset - 1), -1); if (rectBefore.top == rect2.top) { let rectAfter = singleRect(textRange(node2, offset, offset + 1), -1); if (rectAfter.top != rect2.top) return flattenV(rectAfter, rectAfter.left < rectBefore.left); } } return rect2; } else { let from2 = offset, to = offset, takeSide = side < 0 ? 1 : -1; if (side < 0 && !offset) { to++; takeSide = -1; } else if (side >= 0 && offset == node2.nodeValue.length) { from2--; takeSide = 1; } else if (side < 0) { from2--; } else { to++; } return flattenV(singleRect(textRange(node2, from2, to), 1), takeSide < 0); } } let $dom = view.state.doc.resolve(pos - (atom || 0)); if (!$dom.parent.inlineContent) { if (atom == null && offset && (side < 0 || offset == nodeSize(node2))) { let before = node2.childNodes[offset - 1]; if (before.nodeType == 1) return flattenH(before.getBoundingClientRect(), false); } if (atom == null && offset < nodeSize(node2)) { let after = node2.childNodes[offset]; if (after.nodeType == 1) return flattenH(after.getBoundingClientRect(), true); } return flattenH(node2.getBoundingClientRect(), side >= 0); } if (atom == null && offset && (side < 0 || offset == nodeSize(node2))) { let before = node2.childNodes[offset - 1]; let target2 = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1)) : before.nodeType == 1 && (before.nodeName != "BR" || !before.nextSibling) ? before : null; if (target2) return flattenV(singleRect(target2, 1), false); } if (atom == null && offset < nodeSize(node2)) { let after = node2.childNodes[offset]; while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords) after = after.nextSibling; let target2 = !after ? null : after.nodeType == 3 ? textRange(after, 0, supportEmptyRange ? 0 : 1) : after.nodeType == 1 ? after : null; if (target2) return flattenV(singleRect(target2, -1), true); } return flattenV(singleRect(node2.nodeType == 3 ? textRange(node2) : node2, -side), side >= 0); } function flattenV(rect2, left) { if (rect2.width == 0) return rect2; let x2 = left ? rect2.left : rect2.right; return { top: rect2.top, bottom: rect2.bottom, left: x2, right: x2 }; } function flattenH(rect2, top2) { if (rect2.height == 0) return rect2; let y2 = top2 ? rect2.top : rect2.bottom; return { top: y2, bottom: y2, left: rect2.left, right: rect2.right }; } function withFlushedState(view, state, f2) { let viewState = view.state, active = view.root.activeElement; if (viewState != state) view.updateState(state); if (active != view.dom) view.focus(); try { return f2(); } finally { if (viewState != state) view.updateState(viewState); if (active != view.dom && active) active.focus(); } } function endOfTextblockVertical(view, state, dir) { let sel = state.selection; let $pos = dir == "up" ? sel.$from : sel.$to; return withFlushedState(view, state, () => { let { node: dom } = view.docView.domFromPos($pos.pos, dir == "up" ? -1 : 1); for (; ; ) { let nearest = view.docView.nearestDesc(dom, true); if (!nearest) break; if (nearest.node.isBlock) { dom = nearest.dom; break; } dom = nearest.dom.parentNode; } let coords = coordsAtPos(view, $pos.pos, 1); for (let child = dom.firstChild; child; child = child.nextSibling) { let boxes; if (child.nodeType == 1) boxes = child.getClientRects(); else if (child.nodeType == 3) boxes = textRange(child, 0, child.nodeValue.length).getClientRects(); else continue; for (let i2 = 0; i2 < boxes.length; i2++) { let box = boxes[i2]; if (box.bottom > box.top + 1 && (dir == "up" ? coords.top - box.top > (box.bottom - coords.top) * 2 : box.bottom - coords.bottom > (coords.bottom - box.top) * 2)) return false; } } return true; }); } const maybeRTL = /[\u0590-\u08ac]/; function endOfTextblockHorizontal(view, state, dir) { let { $head } = state.selection; if (!$head.parent.isTextblock) return false; let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size; let sel = view.domSelection(); if (!maybeRTL.test($head.parent.textContent) || !sel.modify) return dir == "left" || dir == "backward" ? atStart : atEnd; return withFlushedState(view, state, () => { let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange(); let oldBidiLevel = sel.caretBidiLevel; sel.modify("move", dir, "character"); let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom; let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange(); let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) || oldNode == newNode && oldOff == newOff; try { sel.collapse(anchorNode, anchorOffset); if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend) sel.extend(oldNode, oldOff); } catch (_2) { } if (oldBidiLevel != null) sel.caretBidiLevel = oldBidiLevel; return result; }); } let cachedState = null; let cachedDir = null; let cachedResult = false; function endOfTextblock(view, state, dir) { if (cachedState == state && cachedDir == dir) return cachedResult; cachedState = state; cachedDir = dir; return cachedResult = dir == "up" || dir == "down" ? endOfTextblockVertical(view, state, dir) : endOfTextblockHorizontal(view, state, dir); } const NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3; class ViewDesc { constructor(parent, children, dom, contentDOM) { this.parent = parent; this.children = children; this.dom = dom; this.contentDOM = contentDOM; this.dirty = NOT_DIRTY; dom.pmViewDesc = this; } matchesWidget(widget) { return false; } matchesMark(mark) { return false; } matchesNode(node2, outerDeco, innerDeco) { return false; } matchesHack(nodeName) { return false; } parseRule() { return null; } stopEvent(event) { return false; } get size() { let size2 = 0; for (let i2 = 0; i2 < this.children.length; i2++) size2 += this.children[i2].size; return size2; } get border() { return 0; } destroy() { this.parent = void 0; if (this.dom.pmViewDesc == this) this.dom.pmViewDesc = void 0; for (let i2 = 0; i2 < this.children.length; i2++) this.children[i2].destroy(); } posBeforeChild(child) { for (let i2 = 0, pos = this.posAtStart; ; i2++) { let cur = this.children[i2]; if (cur == child) return pos; pos += cur.size; } } get posBefore() { return this.parent.posBeforeChild(this); } get posAtStart() { return this.parent ? this.parent.posBeforeChild(this) + this.border : 0; } get posAfter() { return this.posBefore + this.size; } get posAtEnd() { return this.posAtStart + this.size - 2 * this.border; } localPosFromDOM(dom, offset, bias) { if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) { if (bias < 0) { let domBefore, desc; if (dom == this.contentDOM) { domBefore = dom.childNodes[offset - 1]; } else { while (dom.parentNode != this.contentDOM) dom = dom.parentNode; domBefore = dom.previousSibling; } while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this)) domBefore = domBefore.previousSibling; return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart; } else { let domAfter, desc; if (dom == this.contentDOM) { domAfter = dom.childNodes[offset]; } else { while (dom.parentNode != this.contentDOM) dom = dom.parentNode; domAfter = dom.nextSibling; } while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this)) domAfter = domAfter.nextSibling; return domAfter ? this.posBeforeChild(desc) : this.posAtEnd; } } let atEnd; if (dom == this.dom && this.contentDOM) { atEnd = offset > domIndex(this.contentDOM); } else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) { atEnd = dom.compareDocumentPosition(this.contentDOM) & 2; } else if (this.dom.firstChild) { if (offset == 0) for (let search2 = dom; ; search2 = search2.parentNode) { if (search2 == this.dom) { atEnd = false; break; } if (search2.previousSibling) break; } if (atEnd == null && offset == dom.childNodes.length) for (let search2 = dom; ; search2 = search2.parentNode) { if (search2 == this.dom) { atEnd = true; break; } if (search2.nextSibling) break; } } return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart; } nearestDesc(dom, onlyNodes = false) { for (let first = true, cur = dom; cur; cur = cur.parentNode) { let desc = this.getDesc(cur), nodeDOM; if (desc && (!onlyNodes || desc.node)) { if (first && (nodeDOM = desc.nodeDOM) && !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom)) first = false; else return desc; } } } getDesc(dom) { let desc = dom.pmViewDesc; for (let cur = desc; cur; cur = cur.parent) if (cur == this) return desc; } posFromDOM(dom, offset, bias) { for (let scan = dom; scan; scan = scan.parentNode) { let desc = this.getDesc(scan); if (desc) return desc.localPosFromDOM(dom, offset, bias); } return -1; } descAt(pos) { for (let i2 = 0, offset = 0; i2 < this.children.length; i2++) { let child = this.children[i2], end = offset + child.size; if (offset == pos && end != offset) { while (!child.border && child.children.length) child = child.children[0]; return child; } if (pos < end) return child.descAt(pos - offset - child.border); offset = end; } } domFromPos(pos, side) { if (!this.contentDOM) return { node: this.dom, offset: 0, atom: pos + 1 }; let i2 = 0, offset = 0; for (let curPos = 0; i2 < this.children.length; i2++) { let child = this.children[i2], end = curPos + child.size; if (end > pos || child instanceof TrailingHackViewDesc) { offset = pos - curPos; break; } curPos = end; } if (offset) return this.children[i2].domFromPos(offset - this.children[i2].border, side); for (let prev2; i2 && !(prev2 = this.children[i2 - 1]).size && prev2 instanceof WidgetViewDesc && prev2.side >= 0; i2--) { } if (side <= 0) { let prev2, enter = true; for (; ; i2--, enter = false) { prev2 = i2 ? this.children[i2 - 1] : null; if (!prev2 || prev2.dom.parentNode == this.contentDOM) break; } if (prev2 && side && enter && !prev2.border && !prev2.domAtom) return prev2.domFromPos(prev2.size, side); return { node: this.contentDOM, offset: prev2 ? domIndex(prev2.dom) + 1 : 0 }; } else { let next2, enter = true; for (; ; i2++, enter = false) { next2 = i2 < this.children.length ? this.children[i2] : null; if (!next2 || next2.dom.parentNode == this.contentDOM) break; } if (next2 && enter && !next2.border && !next2.domAtom) return next2.domFromPos(0, side); return { node: this.contentDOM, offset: next2 ? domIndex(next2.dom) : this.contentDOM.childNodes.length }; } } parseRange(from2, to, base2 = 0) { if (this.children.length == 0) return { node: this.contentDOM, from: from2, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length }; let fromOffset = -1, toOffset = -1; for (let offset = base2, i2 = 0; ; i2++) { let child = this.children[i2], end = offset + child.size; if (fromOffset == -1 && from2 <= end) { let childBase = offset + child.border; if (from2 >= childBase && to <= end - child.border && child.node && child.contentDOM && this.contentDOM.contains(child.contentDOM)) return child.parseRange(from2, to, childBase); from2 = offset; for (let j2 = i2; j2 > 0; j2--) { let prev2 = this.children[j2 - 1]; if (prev2.size && prev2.dom.parentNode == this.contentDOM && !prev2.emptyChildAt(1)) { fromOffset = domIndex(prev2.dom) + 1; break; } from2 -= prev2.size; } if (fromOffset == -1) fromOffset = 0; } if (fromOffset > -1 && (end > to || i2 == this.children.length - 1)) { to = end; for (let j2 = i2 + 1; j2 < this.children.length; j2++) { let next2 = this.children[j2]; if (next2.size && next2.dom.parentNode == this.contentDOM && !next2.emptyChildAt(-1)) { toOffset = domIndex(next2.dom); break; } to += next2.size; } if (toOffset == -1) toOffset = this.contentDOM.childNodes.length; break; } offset = end; } return { node: this.contentDOM, from: from2, to, fromOffset, toOffset }; } emptyChildAt(side) { if (this.border || !this.contentDOM || !this.children.length) return false; let child = this.children[side < 0 ? 0 : this.children.length - 1]; return child.size == 0 || child.emptyChildAt(side); } domAfterPos(pos) { let { node: node2, offset } = this.domFromPos(pos, 0); if (node2.nodeType != 1 || offset == node2.childNodes.length) throw new RangeError("No node after pos " + pos); return node2.childNodes[offset]; } setSelection(anchor, head, root2, force = false) { let from2 = Math.min(anchor, head), to = Math.max(anchor, head); for (let i2 = 0, offset = 0; i2 < this.children.length; i2++) { let child = this.children[i2], end = offset + child.size; if (from2 > offset && to < end) return child.setSelection(anchor - offset - child.border, head - offset - child.border, root2, force); offset = end; } let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1); let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1); let domSel = root2.getSelection(); let brKludge = false; if ((gecko || safari) && anchor == head) { let { node: node2, offset } = anchorDOM; if (node2.nodeType == 3) { brKludge = !!(offset && node2.nodeValue[offset - 1] == "\n"); if (brKludge && offset == node2.nodeValue.length) { for (let scan = node2, after; scan; scan = scan.parentNode) { if (after = scan.nextSibling) { if (after.nodeName == "BR") anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 }; break; } let desc = scan.pmViewDesc; if (desc && desc.node && desc.node.isBlock) break; } } } else { let prev2 = node2.childNodes[offset - 1]; brKludge = prev2 && (prev2.nodeName == "BR" || prev2.contentEditable == "false"); } } if (gecko && domSel.focusNode && domSel.focusNode != headDOM.node && domSel.focusNode.nodeType == 1) { let after = domSel.focusNode.childNodes[domSel.focusOffset]; if (after && after.contentEditable == "false") force = true; } if (!(force || brKludge && safari) && isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) && isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset)) return; let domSelExtended = false; if ((domSel.extend || anchor == head) && !brKludge) { domSel.collapse(anchorDOM.node, anchorDOM.offset); try { if (anchor != head) domSel.extend(headDOM.node, headDOM.offset); domSelExtended = true; } catch (_2) { } } if (!domSelExtended) { if (anchor > head) { let tmp = anchorDOM; anchorDOM = headDOM; headDOM = tmp; } let range2 = document.createRange(); range2.setEnd(headDOM.node, headDOM.offset); range2.setStart(anchorDOM.node, anchorDOM.offset); domSel.removeAllRanges(); domSel.addRange(range2); } } ignoreMutation(mutation) { return !this.contentDOM && mutation.type != "selection"; } get contentLost() { return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM); } markDirty(from2, to) { for (let offset = 0, i2 = 0; i2 < this.children.length; i2++) { let child = this.children[i2], end = offset + child.size; if (offset == end ? from2 <= end && to >= offset : from2 < end && to > offset) { let startInside = offset + child.border, endInside = end - child.border; if (from2 >= startInside && to <= endInside) { this.dirty = from2 == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY; if (from2 == startInside && to == endInside && (child.contentLost || child.dom.parentNode != this.contentDOM)) child.dirty = NODE_DIRTY; else child.markDirty(from2 - startInside, to - startInside); return; } else { child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length ? CONTENT_DIRTY : NODE_DIRTY; } } offset = end; } this.dirty = CONTENT_DIRTY; } markParentsDirty() { let level = 1; for (let node2 = this.parent; node2; node2 = node2.parent, level++) { let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY; if (node2.dirty < dirty) node2.dirty = dirty; } } get domAtom() { return false; } get ignoreForCoords() { return false; } } class WidgetViewDesc extends ViewDesc { constructor(parent, widget, view, pos) { let self2, dom = widget.type.toDOM; if (typeof dom == "function") dom = dom(view, () => { if (!self2) return pos; if (self2.parent) return self2.parent.posBeforeChild(self2); }); if (!widget.type.spec.raw) { if (dom.nodeType != 1) { let wrap2 = document.createElement("span"); wrap2.appendChild(dom); dom = wrap2; } dom.contentEditable = "false"; dom.classList.add("ProseMirror-widget"); } super(parent, [], dom, null); this.widget = widget; this.widget = widget; self2 = this; } matchesWidget(widget) { return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type); } parseRule() { return { ignore: true }; } stopEvent(event) { let stop = this.widget.spec.stopEvent; return stop ? stop(event) : false; } ignoreMutation(mutation) { return mutation.type != "selection" || this.widget.spec.ignoreSelection; } destroy() { this.widget.type.destroy(this.dom); super.destroy(); } get domAtom() { return true; } get side() { return this.widget.type.side; } } class CompositionViewDesc extends ViewDesc { constructor(parent, dom, textDOM, text2) { super(parent, [], dom, null); this.textDOM = textDOM; this.text = text2; } get size() { return this.text.length; } localPosFromDOM(dom, offset) { if (dom != this.textDOM) return this.posAtStart + (offset ? this.size : 0); return this.posAtStart + offset; } domFromPos(pos) { return { node: this.textDOM, offset: pos }; } ignoreMutation(mut) { return mut.type === "characterData" && mut.target.nodeValue == mut.oldValue; } } class MarkViewDesc extends ViewDesc { constructor(parent, mark, dom, contentDOM) { super(parent, [], dom, contentDOM); this.mark = mark; } static create(parent, mark, inline, view) { let custom = view.nodeViews[mark.type.name]; let spec = custom && custom(mark, view, inline); if (!spec || !spec.dom) spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline)); return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom); } parseRule() { if (this.dirty & NODE_DIRTY || this.mark.type.spec.reparseInView) return null; return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM || void 0 }; } matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); } markDirty(from2, to) { super.markDirty(from2, to); if (this.dirty != NOT_DIRTY) { let parent = this.parent; while (!parent.node) parent = parent.parent; if (parent.dirty < this.dirty) parent.dirty = this.dirty; this.dirty = NOT_DIRTY; } } slice(from2, to, view) { let copy2 = MarkViewDesc.create(this.parent, this.mark, true, view); let nodes2 = this.children, size2 = this.size; if (to < size2) nodes2 = replaceNodes(nodes2, to, size2, view); if (from2 > 0) nodes2 = replaceNodes(nodes2, 0, from2, view); for (let i2 = 0; i2 < nodes2.length; i2++) nodes2[i2].parent = copy2; copy2.children = nodes2; return copy2; } } class NodeViewDesc extends ViewDesc { constructor(parent, node2, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) { super(parent, [], dom, contentDOM); this.node = node2; this.outerDeco = outerDeco; this.innerDeco = innerDeco; this.nodeDOM = nodeDOM; if (contentDOM) this.updateChildren(view, pos); } static create(parent, node2, outerDeco, innerDeco, view, pos) { let custom = view.nodeViews[node2.type.name], descObj; let spec = custom && custom(node2, view, () => { if (!descObj) return pos; if (descObj.parent) return descObj.parent.posBeforeChild(descObj); }, outerDeco, innerDeco); let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM; if (node2.isText) { if (!dom) dom = document.createTextNode(node2.text); else if (dom.nodeType != 3) throw new RangeError("Text must be rendered as a DOM text node"); } else if (!dom) { ({ dom, contentDOM } = DOMSerializer.renderSpec(document, node2.type.spec.toDOM(node2))); } if (!contentDOM && !node2.isText && dom.nodeName != "BR") { if (!dom.hasAttribute("contenteditable")) dom.contentEditable = "false"; if (node2.type.spec.draggable) dom.draggable = true; } let nodeDOM = dom; dom = applyOuterDeco(dom, outerDeco, node2); if (spec) return descObj = new CustomNodeViewDesc(parent, node2, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1); else if (node2.isText) return new TextViewDesc(parent, node2, outerDeco, innerDeco, dom, nodeDOM, view); else return new NodeViewDesc(parent, node2, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1); } parseRule() { if (this.node.type.spec.reparseInView) return null; let rule = { node: this.node.type.name, attrs: this.node.attrs }; if (this.node.type.whitespace == "pre") rule.preserveWhitespace = "full"; if (!this.contentDOM) { rule.getContent = () => this.node.content; } else if (!this.contentLost) { rule.contentElement = this.contentDOM; } else { for (let i2 = this.children.length - 1; i2 >= 0; i2--) { let child = this.children[i2]; if (this.dom.contains(child.dom.parentNode)) { rule.contentElement = child.dom.parentNode; break; } } if (!rule.contentElement) rule.getContent = () => Fragment.empty; } return rule; } matchesNode(node2, outerDeco, innerDeco) { return this.dirty == NOT_DIRTY && node2.eq(this.node) && sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco); } get size() { return this.node.nodeSize; } get border() { return this.node.isLeaf ? 0 : 1; } updateChildren(view, pos) { let inline = this.node.inlineContent, off = pos; let composition = view.composing ? this.localCompositionInfo(view, pos) : null; let localComposition = composition && composition.pos > -1 ? composition : null; let compositionInChild = composition && composition.pos < 0; let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view); iterDeco(this.node, this.innerDeco, (widget, i2, insideNode) => { if (widget.spec.marks) updater.syncToMarks(widget.spec.marks, inline, view); else if (widget.type.side >= 0 && !insideNode) updater.syncToMarks(i2 == this.node.childCount ? Mark.none : this.node.child(i2).marks, inline, view); updater.placeWidget(widget, view, off); }, (child, outerDeco, innerDeco, i2) => { updater.syncToMarks(child.marks, inline, view); let compIndex; if (updater.findNodeMatch(child, outerDeco, innerDeco, i2)) ; else if (compositionInChild && view.state.selection.from > off && view.state.selection.to < off + child.nodeSize && (compIndex = updater.findIndexWithChild(composition.node)) > -1 && updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ; else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i2)) ; else { updater.addNode(child, outerDeco, innerDeco, view, off); } off += child.nodeSize; }); updater.syncToMarks([], inline, view); if (this.node.isTextblock) updater.addTextblockHacks(); updater.destroyRest(); if (updater.changed || this.dirty == CONTENT_DIRTY) { if (localComposition) this.protectLocalComposition(view, localComposition); renderDescs(this.contentDOM, this.children, view); if (ios) iosHacks(this.dom); } } localCompositionInfo(view, pos) { let { from: from2, to } = view.state.selection; if (!(view.state.selection instanceof TextSelection) || from2 < pos || to > pos + this.node.content.size) return null; let sel = view.domSelectionRange(); let textNode = nearbyTextNode(sel.focusNode, sel.focusOffset); if (!textNode || !this.dom.contains(textNode.parentNode)) return null; if (this.node.inlineContent) { let text2 = textNode.nodeValue; let textPos = findTextInFragment(this.node.content, text2, from2 - pos, to - pos); return textPos < 0 ? null : { node: textNode, pos: textPos, text: text2 }; } else { return { node: textNode, pos: -1, text: "" }; } } protectLocalComposition(view, { node: node2, pos, text: text2 }) { if (this.getDesc(node2)) return; let topNode = node2; for (; ; topNode = topNode.parentNode) { if (topNode.parentNode == this.contentDOM) break; while (topNode.previousSibling) topNode.parentNode.removeChild(topNode.previousSibling); while (topNode.nextSibling) topNode.parentNode.removeChild(topNode.nextSibling); if (topNode.pmViewDesc) topNode.pmViewDesc = void 0; } let desc = new CompositionViewDesc(this, topNode, node2, text2); view.input.compositionNodes.push(desc); this.children = replaceNodes(this.children, pos, pos + text2.length, view, desc); } update(node2, outerDeco, innerDeco, view) { if (this.dirty == NODE_DIRTY || !node2.sameMarkup(this.node)) return false; this.updateInner(node2, outerDeco, innerDeco, view); return true; } updateInner(node2, outerDeco, innerDeco, view) { this.updateOuterDeco(outerDeco); this.node = node2; this.innerDeco = innerDeco; if (this.contentDOM) this.updateChildren(view, this.posAtStart); this.dirty = NOT_DIRTY; } updateOuterDeco(outerDeco) { if (sameOuterDeco(outerDeco, this.outerDeco)) return; let needsWrap = this.nodeDOM.nodeType != 1; let oldDOM = this.dom; this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap)); if (this.dom != oldDOM) { oldDOM.pmViewDesc = void 0; this.dom.pmViewDesc = this; } this.outerDeco = outerDeco; } selectNode() { if (this.nodeDOM.nodeType == 1) this.nodeDOM.classList.add("ProseMirror-selectednode"); if (this.contentDOM || !this.node.type.spec.draggable) this.dom.draggable = true; } deselectNode() { if (this.nodeDOM.nodeType == 1) this.nodeDOM.classList.remove("ProseMirror-selectednode"); if (this.contentDOM || !this.node.type.spec.draggable) this.dom.removeAttribute("draggable"); } get domAtom() { return this.node.isAtom; } } function docViewDesc(doc2, outerDeco, innerDeco, dom, view) { applyOuterDeco(dom, outerDeco, doc2); return new NodeViewDesc(void 0, doc2, outerDeco, innerDeco, dom, dom, dom, view, 0); } class TextViewDesc extends NodeViewDesc { constructor(parent, node2, outerDeco, innerDeco, dom, nodeDOM, view) { super(parent, node2, outerDeco, innerDeco, dom, null, nodeDOM, view, 0); } parseRule() { let skip = this.nodeDOM.parentNode; while (skip && skip != this.dom && !skip.pmIsDeco) skip = skip.parentNode; return { skip: skip || true }; } update(node2, outerDeco, innerDeco, view) { if (this.dirty == NODE_DIRTY || this.dirty != NOT_DIRTY && !this.inParent() || !node2.sameMarkup(this.node)) return false; this.updateOuterDeco(outerDeco); if ((this.dirty != NOT_DIRTY || node2.text != this.node.text) && node2.text != this.nodeDOM.nodeValue) { this.nodeDOM.nodeValue = node2.text; if (view.trackWrites == this.nodeDOM) view.trackWrites = null; } this.node = node2; this.dirty = NOT_DIRTY; return true; } inParent() { let parentDOM = this.parent.contentDOM; for (let n2 = this.nodeDOM; n2; n2 = n2.parentNode) if (n2 == parentDOM) return true; return false; } domFromPos(pos) { return { node: this.nodeDOM, offset: pos }; } localPosFromDOM(dom, offset, bias) { if (dom == this.nodeDOM) return this.posAtStart + Math.min(offset, this.node.text.length); return super.localPosFromDOM(dom, offset, bias); } ignoreMutation(mutation) { return mutation.type != "characterData" && mutation.type != "selection"; } slice(from2, to, view) { let node2 = this.node.cut(from2, to), dom = document.createTextNode(node2.text); return new TextViewDesc(this.parent, node2, this.outerDeco, this.innerDeco, dom, dom, view); } markDirty(from2, to) { super.markDirty(from2, to); if (this.dom != this.nodeDOM && (from2 == 0 || to == this.nodeDOM.nodeValue.length)) this.dirty = NODE_DIRTY; } get domAtom() { return false; } } class TrailingHackViewDesc extends ViewDesc { parseRule() { return { ignore: true }; } matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; } get domAtom() { return true; } get ignoreForCoords() { return this.dom.nodeName == "IMG"; } } class CustomNodeViewDesc extends NodeViewDesc { constructor(parent, node2, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) { super(parent, node2, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos); this.spec = spec; } update(node2, outerDeco, innerDeco, view) { if (this.dirty == NODE_DIRTY) return false; if (this.spec.update) { let result = this.spec.update(node2, outerDeco, innerDeco); if (result) this.updateInner(node2, outerDeco, innerDeco, view); return result; } else if (!this.contentDOM && !node2.isLeaf) { return false; } else { return super.update(node2, outerDeco, innerDeco, view); } } selectNode() { this.spec.selectNode ? this.spec.selectNode() : super.selectNode(); } deselectNode() { this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode(); } setSelection(anchor, head, root2, force) { this.spec.setSelection ? this.spec.setSelection(anchor, head, root2) : super.setSelection(anchor, head, root2, force); } destroy() { if (this.spec.destroy) this.spec.destroy(); super.destroy(); } stopEvent(event) { return this.spec.stopEvent ? this.spec.stopEvent(event) : false; } ignoreMutation(mutation) { return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation); } } function renderDescs(parentDOM, descs, view) { let dom = parentDOM.firstChild, written = false; for (let i2 = 0; i2 < descs.length; i2++) { let desc = descs[i2], childDOM = desc.dom; if (childDOM.parentNode == parentDOM) { while (childDOM != dom) { dom = rm(dom); written = true; } dom = dom.nextSibling; } else { written = true; parentDOM.insertBefore(childDOM, dom); } if (desc instanceof MarkViewDesc) { let pos = dom ? dom.previousSibling : parentDOM.lastChild; renderDescs(desc.contentDOM, desc.children, view); dom = pos ? pos.nextSibling : parentDOM.firstChild; } } while (dom) { dom = rm(dom); written = true; } if (written && view.trackWrites == parentDOM) view.trackWrites = null; } const OuterDecoLevel = function(nodeName) { if (nodeName) this.nodeName = nodeName; }; OuterDecoLevel.prototype = /* @__PURE__ */ Object.create(null); const noDeco = [new OuterDecoLevel()]; function computeOuterDeco(outerDeco, node2, needsWrap) { if (outerDeco.length == 0) return noDeco; let top2 = needsWrap ? noDeco[0] : new OuterDecoLevel(), result = [top2]; for (let i2 = 0; i2 < outerDeco.length; i2++) { let attrs = outerDeco[i2].type.attrs; if (!attrs) continue; if (attrs.nodeName) result.push(top2 = new OuterDecoLevel(attrs.nodeName)); for (let name in attrs) { let val = attrs[name]; if (val == null) continue; if (needsWrap && result.length == 1) result.push(top2 = new OuterDecoLevel(node2.isInline ? "span" : "div")); if (name == "class") top2.class = (top2.class ? top2.class + " " : "") + val; else if (name == "style") top2.style = (top2.style ? top2.style + ";" : "") + val; else if (name != "nodeName") top2[name] = val; } } return result; } function patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) { if (prevComputed == noDeco && curComputed == noDeco) return nodeDOM; let curDOM = nodeDOM; for (let i2 = 0; i2 < curComputed.length; i2++) { let deco = curComputed[i2], prev2 = prevComputed[i2]; if (i2) { let parent; if (prev2 && prev2.nodeName == deco.nodeName && curDOM != outerDOM && (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) { curDOM = parent; } else { parent = document.createElement(deco.nodeName); parent.pmIsDeco = true; parent.appendChild(curDOM); prev2 = noDeco[0]; curDOM = parent; } } patchAttributes(curDOM, prev2 || noDeco[0], deco); } return curDOM; } function patchAttributes(dom, prev2, cur) { for (let name in prev2) if (name != "class" && name != "style" && name != "nodeName" && !(name in cur)) dom.removeAttribute(name); for (let name in cur) if (name != "class" && name != "style" && name != "nodeName" && cur[name] != prev2[name]) dom.setAttribute(name, cur[name]); if (prev2.class != cur.class) { let prevList = prev2.class ? prev2.class.split(" ").filter(Boolean) : []; let curList = cur.class ? cur.class.split(" ").filter(Boolean) : []; for (let i2 = 0; i2 < prevList.length; i2++) if (curList.indexOf(prevList[i2]) == -1) dom.classList.remove(prevList[i2]); for (let i2 = 0; i2 < curList.length; i2++) if (prevList.indexOf(curList[i2]) == -1) dom.classList.add(curList[i2]); if (dom.classList.length == 0) dom.removeAttribute("class"); } if (prev2.style != cur.style) { if (prev2.style) { let prop2 = /\s*([\w\-\xa1-\uffff]+)\s*:(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|\(.*?\)|[^;])*/g, m2; while (m2 = prop2.exec(prev2.style)) dom.style.removeProperty(m2[1]); } if (cur.style) dom.style.cssText += cur.style; } } function applyOuterDeco(dom, deco, node2) { return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node2, dom.nodeType != 1)); } function sameOuterDeco(a2, b2) { if (a2.length != b2.length) return false; for (let i2 = 0; i2 < a2.length; i2++) if (!a2[i2].type.eq(b2[i2].type)) return false; return true; } function rm(dom) { let next2 = dom.nextSibling; dom.parentNode.removeChild(dom); return next2; } class ViewTreeUpdater { constructor(top2, lock, view) { this.lock = lock; this.view = view; this.index = 0; this.stack = []; this.changed = false; this.top = top2; this.preMatch = preMatch(top2.node.content, top2); } destroyBetween(start, end) { if (start == end) return; for (let i2 = start; i2 < end; i2++) this.top.children[i2].destroy(); this.top.children.splice(start, end - start); this.changed = true; } destroyRest() { this.destroyBetween(this.index, this.top.children.length); } syncToMarks(marks, inline, view) { let keep = 0, depth = this.stack.length >> 1; let maxKeep = Math.min(depth, marks.length); while (keep < maxKeep && (keep == depth - 1 ? this.top : this.stack[keep + 1 << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false) keep++; while (keep < depth) { this.destroyRest(); this.top.dirty = NOT_DIRTY; this.index = this.stack.pop(); this.top = this.stack.pop(); depth--; } while (depth < marks.length) { this.stack.push(this.top, this.index + 1); let found2 = -1; for (let i2 = this.index; i2 < Math.min(this.index + 3, this.top.children.length); i2++) { if (this.top.children[i2].matchesMark(marks[depth])) { found2 = i2; break; } } if (found2 > -1) { if (found2 > this.index) { this.changed = true; this.destroyBetween(this.index, found2); } this.top = this.top.children[this.index]; } else { let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view); this.top.children.splice(this.index, 0, markDesc); this.top = markDesc; this.changed = true; } this.index = 0; depth++; } } findNodeMatch(node2, outerDeco, innerDeco, index2) { let found2 = -1, targetDesc; if (index2 >= this.preMatch.index && (targetDesc = this.preMatch.matches[index2 - this.preMatch.index]).parent == this.top && targetDesc.matchesNode(node2, outerDeco, innerDeco)) { found2 = this.top.children.indexOf(targetDesc, this.index); } else { for (let i2 = this.index, e2 = Math.min(this.top.children.length, i2 + 5); i2 < e2; i2++) { let child = this.top.children[i2]; if (child.matchesNode(node2, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) { found2 = i2; break; } } } if (found2 < 0) return false; this.destroyBetween(this.index, found2); this.index++; return true; } updateNodeAt(node2, outerDeco, innerDeco, index2, view) { let child = this.top.children[index2]; if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM) child.dirty = CONTENT_DIRTY; if (!child.update(node2, outerDeco, innerDeco, view)) return false; this.destroyBetween(this.index, index2); this.index++; return true; } findIndexWithChild(domNode) { for (; ; ) { let parent = domNode.parentNode; if (!parent) return -1; if (parent == this.top.contentDOM) { let desc = domNode.pmViewDesc; if (desc) for (let i2 = this.index; i2 < this.top.children.length; i2++) { if (this.top.children[i2] == desc) return i2; } return -1; } domNode = parent; } } updateNextNode(node2, outerDeco, innerDeco, view, index2) { for (let i2 = this.index; i2 < this.top.children.length; i2++) { let next2 = this.top.children[i2]; if (next2 instanceof NodeViewDesc) { let preMatch2 = this.preMatch.matched.get(next2); if (preMatch2 != null && preMatch2 != index2) return false; let nextDOM = next2.dom; let locked = this.lock && (nextDOM == this.lock || nextDOM.nodeType == 1 && nextDOM.contains(this.lock.parentNode)) && !(node2.isText && next2.node && next2.node.isText && next2.nodeDOM.nodeValue == node2.text && next2.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next2.outerDeco)); if (!locked && next2.update(node2, outerDeco, innerDeco, view)) { this.destroyBetween(this.index, i2); if (next2.dom != nextDOM) this.changed = true; this.index++; return true; } break; } } return false; } addNode(node2, outerDeco, innerDeco, view, pos) { this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node2, outerDeco, innerDeco, view, pos)); this.changed = true; } placeWidget(widget, view, pos) { let next2 = this.index < this.top.children.length ? this.top.children[this.index] : null; if (next2 && next2.matchesWidget(widget) && (widget == next2.widget || !next2.widget.type.toDOM.parentNode)) { this.index++; } else { let desc = new WidgetViewDesc(this.top, widget, view, pos); this.top.children.splice(this.index++, 0, desc); this.changed = true; } } addTextblockHacks() { let lastChild = this.top.children[this.index - 1], parent = this.top; while (lastChild instanceof MarkViewDesc) { parent = lastChild; lastChild = parent.children[parent.children.length - 1]; } if (!lastChild || !(lastChild instanceof TextViewDesc) || /\n$/.test(lastChild.node.text) || this.view.requiresGeckoHackNode && /\s$/.test(lastChild.node.text)) { if ((safari || chrome$1) && lastChild && lastChild.dom.contentEditable == "false") this.addHackNode("IMG", parent); this.addHackNode("BR", this.top); } } addHackNode(nodeName, parent) { if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) { this.index++; } else { let dom = document.createElement(nodeName); if (nodeName == "IMG") { dom.className = "ProseMirror-separator"; dom.alt = ""; } if (nodeName == "BR") dom.className = "ProseMirror-trailingBreak"; let hack = new TrailingHackViewDesc(this.top, [], dom, null); if (parent != this.top) parent.children.push(hack); else parent.children.splice(this.index++, 0, hack); this.changed = true; } } } function preMatch(frag, parentDesc) { let curDesc = parentDesc, descI = curDesc.children.length; let fI = frag.childCount, matched = /* @__PURE__ */ new Map(), matches2 = []; outer: while (fI > 0) { let desc; for (; ; ) { if (descI) { let next2 = curDesc.children[descI - 1]; if (next2 instanceof MarkViewDesc) { curDesc = next2; descI = next2.children.length; } else { desc = next2; descI--; break; } } else if (curDesc == parentDesc) { break outer; } else { descI = curDesc.parent.children.indexOf(curDesc); curDesc = curDesc.parent; } } let node2 = desc.node; if (!node2) continue; if (node2 != frag.child(fI - 1)) break; --fI; matched.set(desc, fI); matches2.push(desc); } return { index: fI, matched, matches: matches2.reverse() }; } function compareSide(a2, b2) { return a2.type.side - b2.type.side; } function iterDeco(parent, deco, onWidget, onNode) { let locals = deco.locals(parent), offset = 0; if (locals.length == 0) { for (let i2 = 0; i2 < parent.childCount; i2++) { let child = parent.child(i2); onNode(child, locals, deco.forChild(offset, child), i2); offset += child.nodeSize; } return; } let decoIndex = 0, active = [], restNode = null; for (let parentIndex = 0; ; ) { if (decoIndex < locals.length && locals[decoIndex].to == offset) { let widget = locals[decoIndex++], widgets2; while (decoIndex < locals.length && locals[decoIndex].to == offset) (widgets2 || (widgets2 = [widget])).push(locals[decoIndex++]); if (widgets2) { widgets2.sort(compareSide); for (let i2 = 0; i2 < widgets2.length; i2++) onWidget(widgets2[i2], parentIndex, !!restNode); } else { onWidget(widget, parentIndex, !!restNode); } } let child, index2; if (restNode) { index2 = -1; child = restNode; restNode = null; } else if (parentIndex < parent.childCount) { index2 = parentIndex; child = parent.child(parentIndex++); } else { break; } for (let i2 = 0; i2 < active.length; i2++) if (active[i2].to <= offset) active.splice(i2--, 1); while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset) active.push(locals[decoIndex++]); let end = offset + child.nodeSize; if (child.isText) { let cutAt = end; if (decoIndex < locals.length && locals[decoIndex].from < cutAt) cutAt = locals[decoIndex].from; for (let i2 = 0; i2 < active.length; i2++) if (active[i2].to < cutAt) cutAt = active[i2].to; if (cutAt < end) { restNode = child.cut(cutAt - offset); child = child.cut(0, cutAt - offset); end = cutAt; index2 = -1; } } let outerDeco = child.isInline && !child.isLeaf ? active.filter((d2) => !d2.inline) : active.slice(); onNode(child, outerDeco, deco.forChild(offset, child), index2); offset = end; } } function iosHacks(dom) { if (dom.nodeName == "UL" || dom.nodeName == "OL") { let oldCSS = dom.style.cssText; dom.style.cssText = oldCSS + "; list-style: square !important"; window.getComputedStyle(dom).listStyle; dom.style.cssText = oldCSS; } } function nearbyTextNode(node2, offset) { for (; ; ) { if (node2.nodeType == 3) return node2; if (node2.nodeType == 1 && offset > 0) { if (node2.childNodes.length > offset && node2.childNodes[offset].nodeType == 3) return node2.childNodes[offset]; node2 = node2.childNodes[offset - 1]; offset = nodeSize(node2); } else if (node2.nodeType == 1 && offset < node2.childNodes.length) { node2 = node2.childNodes[offset]; offset = 0; } else { return null; } } } function findTextInFragment(frag, text2, from2, to) { for (let i2 = 0, pos = 0; i2 < frag.childCount && pos <= to; ) { let child = frag.child(i2++), childStart = pos; pos += child.nodeSize; if (!child.isText) continue; let str2 = child.text; while (i2 < frag.childCount) { let next2 = frag.child(i2++); pos += next2.nodeSize; if (!next2.isText) break; str2 += next2.text; } if (pos >= from2) { let found2 = childStart < to ? str2.lastIndexOf(text2, to - childStart - 1) : -1; if (found2 >= 0 && found2 + text2.length + childStart >= from2) return childStart + found2; if (from2 == to && str2.length >= to + text2.length - childStart && str2.slice(to - childStart, to - childStart + text2.length) == text2) return to; } } return -1; } function replaceNodes(nodes2, from2, to, view, replacement) { let result = []; for (let i2 = 0, off = 0; i2 < nodes2.length; i2++) { let child = nodes2[i2], start = off, end = off += child.size; if (start >= to || end <= from2) { result.push(child); } else { if (start < from2) result.push(child.slice(0, from2 - start, view)); if (replacement) { result.push(replacement); replacement = void 0; } if (end > to) result.push(child.slice(to - start, child.size, view)); } } return result; } function selectionFromDOM(view, origin = null) { let domSel = view.domSelectionRange(), doc2 = view.state.doc; if (!domSel.focusNode) return null; let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0; let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1); if (head < 0) return null; let $head = doc2.resolve(head), $anchor, selection; if (selectionCollapsed(domSel)) { $anchor = $head; while (nearestDesc && !nearestDesc.node) nearestDesc = nearestDesc.parent; let nearestDescNode = nearestDesc.node; if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) { let pos = nearestDesc.posBefore; selection = new NodeSelection(head == pos ? $head : doc2.resolve(pos)); } } else { let anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1); if (anchor < 0) return null; $anchor = doc2.resolve(anchor); } if (!selection) { let bias = origin == "pointer" || view.state.selection.head < $head.pos && !inWidget ? 1 : -1; selection = selectionBetween(view, $anchor, $head, bias); } return selection; } function editorOwnsSelection(view) { return view.editable ? view.hasFocus() : hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom); } function selectionToDOM(view, force = false) { let sel = view.state.selection; syncNodeSelection(view, sel); if (!editorOwnsSelection(view)) return; if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome$1) { let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection; if (domSel.anchorNode && curSel.anchorNode && isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) { view.input.mouseDown.delayedSelectionSync = true; view.domObserver.setCurSelection(); return; } } view.domObserver.disconnectSelection(); if (view.cursorWrapper) { selectCursorWrapper(view); } else { let { anchor, head } = sel, resetEditableFrom, resetEditableTo; if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) { if (!sel.$from.parent.inlineContent) resetEditableFrom = temporarilyEditableNear(view, sel.from); if (!sel.empty && !sel.$from.parent.inlineContent) resetEditableTo = temporarilyEditableNear(view, sel.to); } view.docView.setSelection(anchor, head, view.root, force); if (brokenSelectBetweenUneditable) { if (resetEditableFrom) resetEditable(resetEditableFrom); if (resetEditableTo) resetEditable(resetEditableTo); } if (sel.visible) { view.dom.classList.remove("ProseMirror-hideselection"); } else { view.dom.classList.add("ProseMirror-hideselection"); if ("onselectionchange" in document) removeClassOnSelectionChange(view); } } view.domObserver.setCurSelection(); view.domObserver.connectSelection(); } const brokenSelectBetweenUneditable = safari || chrome$1 && chrome_version < 63; function temporarilyEditableNear(view, pos) { let { node: node2, offset } = view.docView.domFromPos(pos, 0); let after = offset < node2.childNodes.length ? node2.childNodes[offset] : null; let before = offset ? node2.childNodes[offset - 1] : null; if (safari && after && after.contentEditable == "false") return setEditable(after); if ((!after || after.contentEditable == "false") && (!before || before.contentEditable == "false")) { if (after) return setEditable(after); else if (before) return setEditable(before); } } function setEditable(element) { element.contentEditable = "true"; if (safari && element.draggable) { element.draggable = false; element.wasDraggable = true; } return element; } function resetEditable(element) { element.contentEditable = "false"; if (element.wasDraggable) { element.draggable = true; element.wasDraggable = null; } } function removeClassOnSelectionChange(view) { let doc2 = view.dom.ownerDocument; doc2.removeEventListener("selectionchange", view.input.hideSelectionGuard); let domSel = view.domSelectionRange(); let node2 = domSel.anchorNode, offset = domSel.anchorOffset; doc2.addEventListener("selectionchange", view.input.hideSelectionGuard = () => { if (domSel.anchorNode != node2 || domSel.anchorOffset != offset) { doc2.removeEventListener("selectionchange", view.input.hideSelectionGuard); setTimeout(() => { if (!editorOwnsSelection(view) || view.state.selection.visible) view.dom.classList.remove("ProseMirror-hideselection"); }, 20); } }); } function selectCursorWrapper(view) { let domSel = view.domSelection(), range2 = document.createRange(); let node2 = view.cursorWrapper.dom, img = node2.nodeName == "IMG"; if (img) range2.setEnd(node2.parentNode, domIndex(node2) + 1); else range2.setEnd(node2, 0); range2.collapse(false); domSel.removeAllRanges(); domSel.addRange(range2); if (!img && !view.state.selection.visible && ie$2 && ie_version <= 11) { node2.disabled = true; node2.disabled = false; } } function syncNodeSelection(view, sel) { if (sel instanceof NodeSelection) { let desc = view.docView.descAt(sel.from); if (desc != view.lastSelectedViewDesc) { clearNodeSelection(view); if (desc) desc.selectNode(); view.lastSelectedViewDesc = desc; } } else { clearNodeSelection(view); } } function clearNodeSelection(view) { if (view.lastSelectedViewDesc) { if (view.lastSelectedViewDesc.parent) view.lastSelectedViewDesc.deselectNode(); view.lastSelectedViewDesc = void 0; } } function selectionBetween(view, $anchor, $head, bias) { return view.someProp("createSelectionBetween", (f2) => f2(view, $anchor, $head)) || TextSelection.between($anchor, $head, bias); } function hasFocusAndSelection(view) { if (view.editable && !view.hasFocus()) return false; return hasSelection(view); } function hasSelection(view) { let sel = view.domSelectionRange(); if (!sel.anchorNode) return false; try { return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) && (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode)); } catch (_2) { return false; } } function anchorInRightPlace(view) { let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0); let domSel = view.domSelectionRange(); return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset); } function moveSelectionBlock(state, dir) { let { $anchor, $head } = state.selection; let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head); let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null; return $start && Selection.findFrom($start, dir); } function apply$2(view, sel) { view.dispatch(view.state.tr.setSelection(sel).scrollIntoView()); return true; } function selectHorizontally(view, dir, mods) { let sel = view.state.selection; if (sel instanceof TextSelection) { if (!sel.empty || mods.indexOf("s") > -1) { return false; } else if (view.endOfTextblock(dir > 0 ? "right" : "left")) { let next2 = moveSelectionBlock(view.state, dir); if (next2 && next2 instanceof NodeSelection) return apply$2(view, next2); return false; } else if (!(mac$2 && mods.indexOf("m") > -1)) { let $head = sel.$head, node2 = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc; if (!node2 || node2.isText) return false; let nodePos = dir < 0 ? $head.pos - node2.nodeSize : $head.pos; if (!(node2.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM)) return false; if (NodeSelection.isSelectable(node2)) { return apply$2(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node2.nodeSize) : $head)); } else if (webkit) { return apply$2(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node2.nodeSize))); } else { return false; } } } else if (sel instanceof NodeSelection && sel.node.isInline) { return apply$2(view, new TextSelection(dir > 0 ? sel.$to : sel.$from)); } else { let next2 = moveSelectionBlock(view.state, dir); if (next2) return apply$2(view, next2); return false; } } function nodeLen(node2) { return node2.nodeType == 3 ? node2.nodeValue.length : node2.childNodes.length; } function isIgnorable(dom) { let desc = dom.pmViewDesc; return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != "BR"); } function skipIgnoredNodesLeft(view) { let sel = view.domSelectionRange(); let node2 = sel.focusNode, offset = sel.focusOffset; if (!node2) return; let moveNode, moveOffset, force = false; if (gecko && node2.nodeType == 1 && offset < nodeLen(node2) && isIgnorable(node2.childNodes[offset])) force = true; for (; ; ) { if (offset > 0) { if (node2.nodeType != 1) { break; } else { let before = node2.childNodes[offset - 1]; if (isIgnorable(before)) { moveNode = node2; moveOffset = --offset; } else if (before.nodeType == 3) { node2 = before; offset = node2.nodeValue.length; } else break; } } else if (isBlockNode(node2)) { break; } else { let prev2 = node2.previousSibling; while (prev2 && isIgnorable(prev2)) { moveNode = node2.parentNode; moveOffset = domIndex(prev2); prev2 = prev2.previousSibling; } if (!prev2) { node2 = node2.parentNode; if (node2 == view.dom) break; offset = 0; } else { node2 = prev2; offset = nodeLen(node2); } } } if (force) setSelFocus(view, node2, offset); else if (moveNode) setSelFocus(view, moveNode, moveOffset); } function skipIgnoredNodesRight(view) { let sel = view.domSelectionRange(); let node2 = sel.focusNode, offset = sel.focusOffset; if (!node2) return; let len = nodeLen(node2); let moveNode, moveOffset; for (; ; ) { if (offset < len) { if (node2.nodeType != 1) break; let after = node2.childNodes[offset]; if (isIgnorable(after)) { moveNode = node2; moveOffset = ++offset; } else break; } else if (isBlockNode(node2)) { break; } else { let next2 = node2.nextSibling; while (next2 && isIgnorable(next2)) { moveNode = next2.parentNode; moveOffset = domIndex(next2) + 1; next2 = next2.nextSibling; } if (!next2) { node2 = node2.parentNode; if (node2 == view.dom) break; offset = len = 0; } else { node2 = next2; offset = 0; len = nodeLen(node2); } } } if (moveNode) setSelFocus(view, moveNode, moveOffset); } function isBlockNode(dom) { let desc = dom.pmViewDesc; return desc && desc.node && desc.node.isBlock; } function setSelFocus(view, node2, offset) { let sel = view.domSelection(); if (selectionCollapsed(sel)) { let range2 = document.createRange(); range2.setEnd(node2, offset); range2.setStart(node2, offset); sel.removeAllRanges(); sel.addRange(range2); } else if (sel.extend) { sel.extend(node2, offset); } view.domObserver.setCurSelection(); let { state } = view; setTimeout(() => { if (view.state == state) selectionToDOM(view); }, 50); } function selectVertically(view, dir, mods) { let sel = view.state.selection; if (sel instanceof TextSelection && !sel.empty || mods.indexOf("s") > -1) return false; if (mac$2 && mods.indexOf("m") > -1) return false; let { $from, $to } = sel; if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? "up" : "down")) { let next2 = moveSelectionBlock(view.state, dir); if (next2 && next2 instanceof NodeSelection) return apply$2(view, next2); } if (!$from.parent.inlineContent) { let side = dir < 0 ? $from : $to; let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir); return beyond ? apply$2(view, beyond) : false; } return false; } function stopNativeHorizontalDelete(view, dir) { if (!(view.state.selection instanceof TextSelection)) return true; let { $head, $anchor, empty: empty2 } = view.state.selection; if (!$head.sameParent($anchor)) return true; if (!empty2) return false; if (view.endOfTextblock(dir > 0 ? "forward" : "backward")) return true; let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter); if (nextNode && !nextNode.isText) { let tr = view.state.tr; if (dir < 0) tr.delete($head.pos - nextNode.nodeSize, $head.pos); else tr.delete($head.pos, $head.pos + nextNode.nodeSize); view.dispatch(tr); return true; } return false; } function switchEditable(view, node2, state) { view.domObserver.stop(); node2.contentEditable = state; view.domObserver.start(); } function safariDownArrowBug(view) { if (!safari || view.state.selection.$head.parentOffset > 0) return false; let { focusNode, focusOffset } = view.domSelectionRange(); if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 && focusNode.firstChild && focusNode.firstChild.contentEditable == "false") { let child = focusNode.firstChild; switchEditable(view, child, "true"); setTimeout(() => switchEditable(view, child, "false"), 20); } return false; } function getMods(event) { let result = ""; if (event.ctrlKey) result += "c"; if (event.metaKey) result += "m"; if (event.altKey) result += "a"; if (event.shiftKey) result += "s"; return result; } function captureKeyDown(view, event) { let code2 = event.keyCode, mods = getMods(event); if (code2 == 8 || mac$2 && code2 == 72 && mods == "c") { return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view); } else if (code2 == 46 || mac$2 && code2 == 68 && mods == "c") { return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view); } else if (code2 == 13 || code2 == 27) { return true; } else if (code2 == 37 || mac$2 && code2 == 66 && mods == "c") { return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view); } else if (code2 == 39 || mac$2 && code2 == 70 && mods == "c") { return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view); } else if (code2 == 38 || mac$2 && code2 == 80 && mods == "c") { return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view); } else if (code2 == 40 || mac$2 && code2 == 78 && mods == "c") { return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view); } else if (mods == (mac$2 ? "m" : "c") && (code2 == 66 || code2 == 73 || code2 == 89 || code2 == 90)) { return true; } return false; } function serializeForClipboard(view, slice2) { view.someProp("transformCopied", (f2) => { slice2 = f2(slice2, view); }); let context = [], { content, openStart, openEnd } = slice2; while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) { openStart--; openEnd--; let node2 = content.firstChild; context.push(node2.type.name, node2.attrs != node2.type.defaultAttrs ? node2.attrs : null); content = node2.content; } let serializer = view.someProp("clipboardSerializer") || DOMSerializer.fromSchema(view.state.schema); let doc2 = detachedDoc(), wrap2 = doc2.createElement("div"); wrap2.appendChild(serializer.serializeFragment(content, { document: doc2 })); let firstChild = wrap2.firstChild, needsWrap, wrappers = 0; while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) { for (let i2 = needsWrap.length - 1; i2 >= 0; i2--) { let wrapper = doc2.createElement(needsWrap[i2]); while (wrap2.firstChild) wrapper.appendChild(wrap2.firstChild); wrap2.appendChild(wrapper); wrappers++; } firstChild = wrap2.firstChild; } if (firstChild && firstChild.nodeType == 1) firstChild.setAttribute("data-pm-slice", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`); let text2 = view.someProp("clipboardTextSerializer", (f2) => f2(slice2, view)) || slice2.content.textBetween(0, slice2.content.size, "\n\n"); return { dom: wrap2, text: text2 }; } function parseFromClipboard(view, text2, html2, plainText, $context) { let inCode = $context.parent.type.spec.code; let dom, slice2; if (!html2 && !text2) return null; let asText = text2 && (plainText || inCode || !html2); if (asText) { view.someProp("transformPastedText", (f2) => { text2 = f2(text2, inCode || plainText, view); }); if (inCode) return text2 ? new Slice(Fragment.from(view.state.schema.text(text2.replace(/\r\n?/g, "\n"))), 0, 0) : Slice.empty; let parsed = view.someProp("clipboardTextParser", (f2) => f2(text2, $context, plainText, view)); if (parsed) { slice2 = parsed; } else { let marks = $context.marks(); let { schema: schema2 } = view.state, serializer = DOMSerializer.fromSchema(schema2); dom = document.createElement("div"); text2.split(/(?:\r\n?|\n)+/).forEach((block2) => { let p2 = dom.appendChild(document.createElement("p")); if (block2) p2.appendChild(serializer.serializeNode(schema2.text(block2, marks))); }); } } else { view.someProp("transformPastedHTML", (f2) => { html2 = f2(html2, view); }); dom = readHTML(html2); if (webkit) restoreReplacedSpaces(dom); } let contextNode = dom && dom.querySelector("[data-pm-slice]"); let sliceData = contextNode && /^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(contextNode.getAttribute("data-pm-slice") || ""); if (sliceData && sliceData[3]) for (let i2 = +sliceData[3]; i2 > 0; i2--) { let child = dom.firstChild; while (child && child.nodeType != 1) child = child.nextSibling; if (!child) break; dom = child; } if (!slice2) { let parser = view.someProp("clipboardParser") || view.someProp("domParser") || DOMParser$1.fromSchema(view.state.schema); slice2 = parser.parseSlice(dom, { preserveWhitespace: !!(asText || sliceData), context: $context, ruleFromNode(dom2) { if (dom2.nodeName == "BR" && !dom2.nextSibling && dom2.parentNode && !inlineParents.test(dom2.parentNode.nodeName)) return { ignore: true }; return null; } }); } if (sliceData) { slice2 = addContext(closeSlice(slice2, +sliceData[1], +sliceData[2]), sliceData[4]); } else { slice2 = Slice.maxOpen(normalizeSiblings(slice2.content, $context), true); if (slice2.openStart || slice2.openEnd) { let openStart = 0, openEnd = 0; for (let node2 = slice2.content.firstChild; openStart < slice2.openStart && !node2.type.spec.isolating; openStart++, node2 = node2.firstChild) { } for (let node2 = slice2.content.lastChild; openEnd < slice2.openEnd && !node2.type.spec.isolating; openEnd++, node2 = node2.lastChild) { } slice2 = closeSlice(slice2, openStart, openEnd); } } view.someProp("transformPasted", (f2) => { slice2 = f2(slice2, view); }); return slice2; } const inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i; function normalizeSiblings(fragment, $context) { if (fragment.childCount < 2) return fragment; for (let d2 = $context.depth; d2 >= 0; d2--) { let parent = $context.node(d2); let match2 = parent.contentMatchAt($context.index(d2)); let lastWrap, result = []; fragment.forEach((node2) => { if (!result) return; let wrap2 = match2.findWrapping(node2.type), inLast; if (!wrap2) return result = null; if (inLast = result.length && lastWrap.length && addToSibling(wrap2, lastWrap, node2, result[result.length - 1], 0)) { result[result.length - 1] = inLast; } else { if (result.length) result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length); let wrapped = withWrappers(node2, wrap2); result.push(wrapped); match2 = match2.matchType(wrapped.type); lastWrap = wrap2; } }); if (result) return Fragment.from(result); } return fragment; } function withWrappers(node2, wrap2, from2 = 0) { for (let i2 = wrap2.length - 1; i2 >= from2; i2--) node2 = wrap2[i2].create(null, Fragment.from(node2)); return node2; } function addToSibling(wrap2, lastWrap, node2, sibling, depth) { if (depth < wrap2.length && depth < lastWrap.length && wrap2[depth] == lastWrap[depth]) { let inner = addToSibling(wrap2, lastWrap, node2, sibling.lastChild, depth + 1); if (inner) return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner)); let match2 = sibling.contentMatchAt(sibling.childCount); if (match2.matchType(depth == wrap2.length - 1 ? node2.type : wrap2[depth + 1])) return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node2, wrap2, depth + 1)))); } } function closeRight(node2, depth) { if (depth == 0) return node2; let fragment = node2.content.replaceChild(node2.childCount - 1, closeRight(node2.lastChild, depth - 1)); let fill = node2.contentMatchAt(node2.childCount).fillBefore(Fragment.empty, true); return node2.copy(fragment.append(fill)); } function closeRange(fragment, side, from2, to, depth, openEnd) { let node2 = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node2.content; if (depth < to - 1) inner = closeRange(inner, side, from2, to, depth + 1, openEnd); if (depth >= from2) inner = side < 0 ? node2.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner) : inner.append(node2.contentMatchAt(node2.childCount).fillBefore(Fragment.empty, true)); return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node2.copy(inner)); } function closeSlice(slice2, openStart, openEnd) { if (openStart < slice2.openStart) slice2 = new Slice(closeRange(slice2.content, -1, openStart, slice2.openStart, 0, slice2.openEnd), openStart, slice2.openEnd); if (openEnd < slice2.openEnd) slice2 = new Slice(closeRange(slice2.content, 1, openEnd, slice2.openEnd, 0, 0), slice2.openStart, openEnd); return slice2; } const wrapMap = { thead: ["table"], tbody: ["table"], tfoot: ["table"], caption: ["table"], colgroup: ["table"], col: ["table", "colgroup"], tr: ["table", "tbody"], td: ["table", "tbody", "tr"], th: ["table", "tbody", "tr"] }; let _detachedDoc = null; function detachedDoc() { return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument("title")); } function readHTML(html2) { let metas = /^(\s*<meta [^>]*>)*/.exec(html2); if (metas) html2 = html2.slice(metas[0].length); let elt = detachedDoc().createElement("div"); let firstTag = /<([a-z][^>\s]+)/i.exec(html2), wrap2; if (wrap2 = firstTag && wrapMap[firstTag[1].toLowerCase()]) html2 = wrap2.map((n2) => "<" + n2 + ">").join("") + html2 + wrap2.map((n2) => "</" + n2 + ">").reverse().join(""); elt.innerHTML = html2; if (wrap2) for (let i2 = 0; i2 < wrap2.length; i2++) elt = elt.querySelector(wrap2[i2]) || elt; return elt; } function restoreReplacedSpaces(dom) { let nodes2 = dom.querySelectorAll(chrome$1 ? "span:not([class]):not([style])" : "span.Apple-converted-space"); for (let i2 = 0; i2 < nodes2.length; i2++) { let node2 = nodes2[i2]; if (node2.childNodes.length == 1 && node2.textContent == "\xA0" && node2.parentNode) node2.parentNode.replaceChild(dom.ownerDocument.createTextNode(" "), node2); } } function addContext(slice2, context) { if (!slice2.size) return slice2; let schema2 = slice2.content.firstChild.type.schema, array; try { array = JSON.parse(context); } catch (e2) { return slice2; } let { content, openStart, openEnd } = slice2; for (let i2 = array.length - 2; i2 >= 0; i2 -= 2) { let type2 = schema2.nodes[array[i2]]; if (!type2 || type2.hasRequiredAttrs()) break; content = Fragment.from(type2.create(array[i2 + 1], content)); openStart++; openEnd++; } return new Slice(content, openStart, openEnd); } const handlers = {}; const editHandlers = {}; const passiveHandlers = { touchstart: true, touchmove: true }; class InputState { constructor() { this.shiftKey = false; this.mouseDown = null; this.lastKeyCode = null; this.lastKeyCodeTime = 0; this.lastClick = { time: 0, x: 0, y: 0, type: "" }; this.lastSelectionOrigin = null; this.lastSelectionTime = 0; this.lastIOSEnter = 0; this.lastIOSEnterFallbackTimeout = -1; this.lastFocus = 0; this.lastTouch = 0; this.lastAndroidDelete = 0; this.composing = false; this.composingTimeout = -1; this.compositionNodes = []; this.compositionEndedAt = -2e8; this.domChangeCount = 0; this.eventHandlers = /* @__PURE__ */ Object.create(null); this.hideSelectionGuard = null; } } function initInput(view) { for (let event in handlers) { let handler = handlers[event]; view.dom.addEventListener(event, view.input.eventHandlers[event] = (event2) => { if (eventBelongsToView(view, event2) && !runCustomHandler(view, event2) && (view.editable || !(event2.type in editHandlers))) handler(view, event2); }, passiveHandlers[event] ? { passive: true } : void 0); } if (safari) view.dom.addEventListener("input", () => null); ensureListeners(view); } function setSelectionOrigin(view, origin) { view.input.lastSelectionOrigin = origin; view.input.lastSelectionTime = Date.now(); } function destroyInput(view) { view.domObserver.stop(); for (let type2 in view.input.eventHandlers) view.dom.removeEventListener(type2, view.input.eventHandlers[type2]); clearTimeout(view.input.composingTimeout); clearTimeout(view.input.lastIOSEnterFallbackTimeout); } function ensureListeners(view) { view.someProp("handleDOMEvents", (currentHandlers) => { for (let type2 in currentHandlers) if (!view.input.eventHandlers[type2]) view.dom.addEventListener(type2, view.input.eventHandlers[type2] = (event) => runCustomHandler(view, event)); }); } function runCustomHandler(view, event) { return view.someProp("handleDOMEvents", (handlers2) => { let handler = handlers2[event.type]; return handler ? handler(view, event) || event.defaultPrevented : false; }); } function eventBelongsToView(view, event) { if (!event.bubbles) return true; if (event.defaultPrevented) return false; for (let node2 = event.target; node2 != view.dom; node2 = node2.parentNode) if (!node2 || node2.nodeType == 11 || node2.pmViewDesc && node2.pmViewDesc.stopEvent(event)) return false; return true; } function dispatchEvent(view, event) { if (!runCustomHandler(view, event) && handlers[event.type] && (view.editable || !(event.type in editHandlers))) handlers[event.type](view, event); } editHandlers.keydown = (view, _event) => { let event = _event; view.input.shiftKey = event.keyCode == 16 || event.shiftKey; if (inOrNearComposition(view, event)) return; view.input.lastKeyCode = event.keyCode; view.input.lastKeyCodeTime = Date.now(); if (android && chrome$1 && event.keyCode == 13) return; if (event.keyCode != 229) view.domObserver.forceFlush(); if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) { let now2 = Date.now(); view.input.lastIOSEnter = now2; view.input.lastIOSEnterFallbackTimeout = setTimeout(() => { if (view.input.lastIOSEnter == now2) { view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter"))); view.input.lastIOSEnter = 0; } }, 200); } else if (view.someProp("handleKeyDown", (f2) => f2(view, event)) || captureKeyDown(view, event)) { event.preventDefault(); } else { setSelectionOrigin(view, "key"); } }; editHandlers.keyup = (view, event) => { if (event.keyCode == 16) view.input.shiftKey = false; }; editHandlers.keypress = (view, _event) => { let event = _event; if (inOrNearComposition(view, event) || !event.charCode || event.ctrlKey && !event.altKey || mac$2 && event.metaKey) return; if (view.someProp("handleKeyPress", (f2) => f2(view, event))) { event.preventDefault(); return; } let sel = view.state.selection; if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) { let text2 = String.fromCharCode(event.charCode); if (!view.someProp("handleTextInput", (f2) => f2(view, sel.$from.pos, sel.$to.pos, text2))) view.dispatch(view.state.tr.insertText(text2).scrollIntoView()); event.preventDefault(); } }; function eventCoords(event) { return { left: event.clientX, top: event.clientY }; } function isNear(event, click) { let dx = click.x - event.clientX, dy = click.y - event.clientY; return dx * dx + dy * dy < 100; } function runHandlerOnContext(view, propName, pos, inside, event) { if (inside == -1) return false; let $pos = view.state.doc.resolve(inside); for (let i2 = $pos.depth + 1; i2 > 0; i2--) { if (view.someProp(propName, (f2) => i2 > $pos.depth ? f2(view, pos, $pos.nodeAfter, $pos.before(i2), event, true) : f2(view, pos, $pos.node(i2), $pos.before(i2), event, false))) return true; } return false; } function updateSelection(view, selection, origin) { if (!view.focused) view.focus(); let tr = view.state.tr.setSelection(selection); if (origin == "pointer") tr.setMeta("pointer", true); view.dispatch(tr); } function selectClickedLeaf(view, inside) { if (inside == -1) return false; let $pos = view.state.doc.resolve(inside), node2 = $pos.nodeAfter; if (node2 && node2.isAtom && NodeSelection.isSelectable(node2)) { updateSelection(view, new NodeSelection($pos), "pointer"); return true; } return false; } function selectClickedNode(view, inside) { if (inside == -1) return false; let sel = view.state.selection, selectedNode, selectAt; if (sel instanceof NodeSelection) selectedNode = sel.node; let $pos = view.state.doc.resolve(inside); for (let i2 = $pos.depth + 1; i2 > 0; i2--) { let node2 = i2 > $pos.depth ? $pos.nodeAfter : $pos.node(i2); if (NodeSelection.isSelectable(node2)) { if (selectedNode && sel.$from.depth > 0 && i2 >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos) selectAt = $pos.before(sel.$from.depth); else selectAt = $pos.before(i2); break; } } if (selectAt != null) { updateSelection(view, NodeSelection.create(view.state.doc, selectAt), "pointer"); return true; } else { return false; } } function handleSingleClick(view, pos, inside, event, selectNode) { return runHandlerOnContext(view, "handleClickOn", pos, inside, event) || view.someProp("handleClick", (f2) => f2(view, pos, event)) || (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside)); } function handleDoubleClick(view, pos, inside, event) { return runHandlerOnContext(view, "handleDoubleClickOn", pos, inside, event) || view.someProp("handleDoubleClick", (f2) => f2(view, pos, event)); } function handleTripleClick$1(view, pos, inside, event) { return runHandlerOnContext(view, "handleTripleClickOn", pos, inside, event) || view.someProp("handleTripleClick", (f2) => f2(view, pos, event)) || defaultTripleClick(view, inside, event); } function defaultTripleClick(view, inside, event) { if (event.button != 0) return false; let doc2 = view.state.doc; if (inside == -1) { if (doc2.inlineContent) { updateSelection(view, TextSelection.create(doc2, 0, doc2.content.size), "pointer"); return true; } return false; } let $pos = doc2.resolve(inside); for (let i2 = $pos.depth + 1; i2 > 0; i2--) { let node2 = i2 > $pos.depth ? $pos.nodeAfter : $pos.node(i2); let nodePos = $pos.before(i2); if (node2.inlineContent) updateSelection(view, TextSelection.create(doc2, nodePos + 1, nodePos + 1 + node2.content.size), "pointer"); else if (NodeSelection.isSelectable(node2)) updateSelection(view, NodeSelection.create(doc2, nodePos), "pointer"); else continue; return true; } } function forceDOMFlush(view) { return endComposition(view); } const selectNodeModifier = mac$2 ? "metaKey" : "ctrlKey"; handlers.mousedown = (view, _event) => { let event = _event; view.input.shiftKey = event.shiftKey; let flushed = forceDOMFlush(view); let now2 = Date.now(), type2 = "singleClick"; if (now2 - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier]) { if (view.input.lastClick.type == "singleClick") type2 = "doubleClick"; else if (view.input.lastClick.type == "doubleClick") type2 = "tripleClick"; } view.input.lastClick = { time: now2, x: event.clientX, y: event.clientY, type: type2 }; let pos = view.posAtCoords(eventCoords(event)); if (!pos) return; if (type2 == "singleClick") { if (view.input.mouseDown) view.input.mouseDown.done(); view.input.mouseDown = new MouseDown(view, pos, event, !!flushed); } else if ((type2 == "doubleClick" ? handleDoubleClick : handleTripleClick$1)(view, pos.pos, pos.inside, event)) { event.preventDefault(); } else { setSelectionOrigin(view, "pointer"); } }; class MouseDown { constructor(view, pos, event, flushed) { this.view = view; this.pos = pos; this.event = event; this.flushed = flushed; this.delayedSelectionSync = false; this.mightDrag = null; this.startDoc = view.state.doc; this.selectNode = !!event[selectNodeModifier]; this.allowDefault = event.shiftKey; let targetNode, targetPos; if (pos.inside > -1) { targetNode = view.state.doc.nodeAt(pos.inside); targetPos = pos.inside; } else { let $pos = view.state.doc.resolve(pos.pos); targetNode = $pos.parent; targetPos = $pos.depth ? $pos.before() : 0; } const target2 = flushed ? null : event.target; const targetDesc = target2 ? view.docView.nearestDesc(target2, true) : null; this.target = targetDesc ? targetDesc.dom : null; let { selection } = view.state; if (event.button == 0 && targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false || selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos) this.mightDrag = { node: targetNode, pos: targetPos, addAttr: !!(this.target && !this.target.draggable), setUneditable: !!(this.target && gecko && !this.target.hasAttribute("contentEditable")) }; if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) { this.view.domObserver.stop(); if (this.mightDrag.addAttr) this.target.draggable = true; if (this.mightDrag.setUneditable) setTimeout(() => { if (this.view.input.mouseDown == this) this.target.setAttribute("contentEditable", "false"); }, 20); this.view.domObserver.start(); } view.root.addEventListener("mouseup", this.up = this.up.bind(this)); view.root.addEventListener("mousemove", this.move = this.move.bind(this)); setSelectionOrigin(view, "pointer"); } done() { this.view.root.removeEventListener("mouseup", this.up); this.view.root.removeEventListener("mousemove", this.move); if (this.mightDrag && this.target) { this.view.domObserver.stop(); if (this.mightDrag.addAttr) this.target.removeAttribute("draggable"); if (this.mightDrag.setUneditable) this.target.removeAttribute("contentEditable"); this.view.domObserver.start(); } if (this.delayedSelectionSync) setTimeout(() => selectionToDOM(this.view)); this.view.input.mouseDown = null; } up(event) { this.done(); if (!this.view.dom.contains(event.target)) return; let pos = this.pos; if (this.view.state.doc != this.startDoc) pos = this.view.posAtCoords(eventCoords(event)); this.updateAllowDefault(event); if (this.allowDefault || !pos) { setSelectionOrigin(this.view, "pointer"); } else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) { event.preventDefault(); } else if (event.button == 0 && (this.flushed || safari && this.mightDrag && !this.mightDrag.node.isAtom || chrome$1 && !this.view.state.selection.visible && Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2)) { updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), "pointer"); event.preventDefault(); } else { setSelectionOrigin(this.view, "pointer"); } } move(event) { this.updateAllowDefault(event); setSelectionOrigin(this.view, "pointer"); if (event.buttons == 0) this.done(); } updateAllowDefault(event) { if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 || Math.abs(this.event.y - event.clientY) > 4)) this.allowDefault = true; } } handlers.touchstart = (view) => { view.input.lastTouch = Date.now(); forceDOMFlush(view); setSelectionOrigin(view, "pointer"); }; handlers.touchmove = (view) => { view.input.lastTouch = Date.now(); setSelectionOrigin(view, "pointer"); }; handlers.contextmenu = (view) => forceDOMFlush(view); function inOrNearComposition(view, event) { if (view.composing) return true; if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) { view.input.compositionEndedAt = -2e8; return true; } return false; } const timeoutComposition = android ? 5e3 : -1; editHandlers.compositionstart = editHandlers.compositionupdate = (view) => { if (!view.composing) { view.domObserver.flush(); let { state } = view, $pos = state.selection.$from; if (state.selection.empty && (state.storedMarks || !$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some((m2) => m2.type.spec.inclusive === false))) { view.markCursor = view.state.storedMarks || $pos.marks(); endComposition(view, true); view.markCursor = null; } else { endComposition(view); if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) { let sel = view.domSelectionRange(); for (let node2 = sel.focusNode, offset = sel.focusOffset; node2 && node2.nodeType == 1 && offset != 0; ) { let before = offset < 0 ? node2.lastChild : node2.childNodes[offset - 1]; if (!before) break; if (before.nodeType == 3) { view.domSelection().collapse(before, before.nodeValue.length); break; } else { node2 = before; offset = -1; } } } } view.input.composing = true; } scheduleComposeEnd(view, timeoutComposition); }; editHandlers.compositionend = (view, event) => { if (view.composing) { view.input.composing = false; view.input.compositionEndedAt = event.timeStamp; scheduleComposeEnd(view, 20); } }; function scheduleComposeEnd(view, delay) { clearTimeout(view.input.composingTimeout); if (delay > -1) view.input.composingTimeout = setTimeout(() => endComposition(view), delay); } function clearComposition(view) { if (view.composing) { view.input.composing = false; view.input.compositionEndedAt = timestampFromCustomEvent(); } while (view.input.compositionNodes.length > 0) view.input.compositionNodes.pop().markParentsDirty(); } function timestampFromCustomEvent() { let event = document.createEvent("Event"); event.initEvent("event", true, true); return event.timeStamp; } function endComposition(view, forceUpdate = false) { if (android && view.domObserver.flushingSoon >= 0) return; view.domObserver.forceFlush(); clearComposition(view); if (forceUpdate || view.docView && view.docView.dirty) { let sel = selectionFromDOM(view); if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel)); else view.updateState(view.state); return true; } return false; } function captureCopy(view, dom) { if (!view.dom.parentNode) return; let wrap2 = view.dom.parentNode.appendChild(document.createElement("div")); wrap2.appendChild(dom); wrap2.style.cssText = "position: fixed; left: -10000px; top: 10px"; let sel = getSelection(), range2 = document.createRange(); range2.selectNodeContents(dom); view.dom.blur(); sel.removeAllRanges(); sel.addRange(range2); setTimeout(() => { if (wrap2.parentNode) wrap2.parentNode.removeChild(wrap2); view.focus(); }, 50); } const brokenClipboardAPI = ie$2 && ie_version < 15 || ios && webkit_version < 604; handlers.copy = editHandlers.cut = (view, _event) => { let event = _event; let sel = view.state.selection, cut = event.type == "cut"; if (sel.empty) return; let data = brokenClipboardAPI ? null : event.clipboardData; let slice2 = sel.content(), { dom, text: text2 } = serializeForClipboard(view, slice2); if (data) { event.preventDefault(); data.clearData(); data.setData("text/html", dom.innerHTML); data.setData("text/plain", text2); } else { captureCopy(view, dom); } if (cut) view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent", "cut")); }; function sliceSingleNode(slice2) { return slice2.openStart == 0 && slice2.openEnd == 0 && slice2.content.childCount == 1 ? slice2.content.firstChild : null; } function capturePaste(view, event) { if (!view.dom.parentNode) return; let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code; let target2 = view.dom.parentNode.appendChild(document.createElement(plainText ? "textarea" : "div")); if (!plainText) target2.contentEditable = "true"; target2.style.cssText = "position: fixed; left: -10000px; top: 10px"; target2.focus(); setTimeout(() => { view.focus(); if (target2.parentNode) target2.parentNode.removeChild(target2); if (plainText) doPaste(view, target2.value, null, event); else doPaste(view, target2.textContent, target2.innerHTML, event); }, 50); } function doPaste(view, text2, html2, event) { let slice2 = parseFromClipboard(view, text2, html2, view.input.shiftKey, view.state.selection.$from); if (view.someProp("handlePaste", (f2) => f2(view, event, slice2 || Slice.empty))) return true; if (!slice2) return false; let singleNode = sliceSingleNode(slice2); let tr = singleNode ? view.state.tr.replaceSelectionWith(singleNode, view.input.shiftKey) : view.state.tr.replaceSelection(slice2); view.dispatch(tr.scrollIntoView().setMeta("paste", true).setMeta("uiEvent", "paste")); return true; } editHandlers.paste = (view, _event) => { let event = _event; if (view.composing && !android) return; let data = brokenClipboardAPI ? null : event.clipboardData; if (data && doPaste(view, data.getData("text/plain"), data.getData("text/html"), event)) event.preventDefault(); else capturePaste(view, event); }; class Dragging { constructor(slice2, move) { this.slice = slice2; this.move = move; } } const dragCopyModifier = mac$2 ? "altKey" : "ctrlKey"; handlers.dragstart = (view, _event) => { let event = _event; let mouseDown = view.input.mouseDown; if (mouseDown) mouseDown.done(); if (!event.dataTransfer) return; let sel = view.state.selection; let pos = sel.empty ? null : view.posAtCoords(eventCoords(event)); if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ; else if (mouseDown && mouseDown.mightDrag) { view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos))); } else if (event.target && event.target.nodeType == 1) { let desc = view.docView.nearestDesc(event.target, true); if (desc && desc.node.type.spec.draggable && desc != view.docView) view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, desc.posBefore))); } let slice2 = view.state.selection.content(), { dom, text: text2 } = serializeForClipboard(view, slice2); event.dataTransfer.clearData(); event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML); event.dataTransfer.effectAllowed = "copyMove"; if (!brokenClipboardAPI) event.dataTransfer.setData("text/plain", text2); view.dragging = new Dragging(slice2, !event[dragCopyModifier]); }; handlers.dragend = (view) => { let dragging = view.dragging; window.setTimeout(() => { if (view.dragging == dragging) view.dragging = null; }, 50); }; editHandlers.dragover = editHandlers.dragenter = (_2, e2) => e2.preventDefault(); editHandlers.drop = (view, _event) => { let event = _event; let dragging = view.dragging; view.dragging = null; if (!event.dataTransfer) return; let eventPos = view.posAtCoords(eventCoords(event)); if (!eventPos) return; let $mouse = view.state.doc.resolve(eventPos.pos); let slice2 = dragging && dragging.slice; if (slice2) { view.someProp("transformPasted", (f2) => { slice2 = f2(slice2, view); }); } else { slice2 = parseFromClipboard(view, event.dataTransfer.getData(brokenClipboardAPI ? "Text" : "text/plain"), brokenClipboardAPI ? null : event.dataTransfer.getData("text/html"), false, $mouse); } let move = !!(dragging && !event[dragCopyModifier]); if (view.someProp("handleDrop", (f2) => f2(view, event, slice2 || Slice.empty, move))) { event.preventDefault(); return; } if (!slice2) return; event.preventDefault(); let insertPos = slice2 ? dropPoint(view.state.doc, $mouse.pos, slice2) : $mouse.pos; if (insertPos == null) insertPos = $mouse.pos; let tr = view.state.tr; if (move) tr.deleteSelection(); let pos = tr.mapping.map(insertPos); let isNode2 = slice2.openStart == 0 && slice2.openEnd == 0 && slice2.content.childCount == 1; let beforeInsert = tr.doc; if (isNode2) tr.replaceRangeWith(pos, pos, slice2.content.firstChild); else tr.replaceRange(pos, pos, slice2); if (tr.doc.eq(beforeInsert)) return; let $pos = tr.doc.resolve(pos); if (isNode2 && NodeSelection.isSelectable(slice2.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice2.content.firstChild)) { tr.setSelection(new NodeSelection($pos)); } else { let end = tr.mapping.map(insertPos); tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo); tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end))); } view.focus(); view.dispatch(tr.setMeta("uiEvent", "drop")); }; handlers.focus = (view) => { view.input.lastFocus = Date.now(); if (!view.focused) { view.domObserver.stop(); view.dom.classList.add("ProseMirror-focused"); view.domObserver.start(); view.focused = true; setTimeout(() => { if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange())) selectionToDOM(view); }, 20); } }; handlers.blur = (view, _event) => { let event = _event; if (view.focused) { view.domObserver.stop(); view.dom.classList.remove("ProseMirror-focused"); view.domObserver.start(); if (event.relatedTarget && view.dom.contains(event.relatedTarget)) view.domObserver.currentSelection.clear(); view.focused = false; } }; handlers.beforeinput = (view, _event) => { let event = _event; if (chrome$1 && android && event.inputType == "deleteContentBackward") { view.domObserver.flushSoon(); let { domChangeCount } = view.input; setTimeout(() => { if (view.input.domChangeCount != domChangeCount) return; view.dom.blur(); view.focus(); if (view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(8, "Backspace")))) return; let { $cursor } = view.state.selection; if ($cursor && $cursor.pos > 0) view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView()); }, 50); } }; for (let prop2 in editHandlers) handlers[prop2] = editHandlers[prop2]; function compareObjs(a2, b2) { if (a2 == b2) return true; for (let p2 in a2) if (a2[p2] !== b2[p2]) return false; for (let p2 in b2) if (!(p2 in a2)) return false; return true; } class WidgetType { constructor(toDOM, spec) { this.toDOM = toDOM; this.spec = spec || noSpec; this.side = this.spec.side || 0; } map(mapping, span, offset, oldOffset) { let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1); return deleted ? null : new Decoration(pos - offset, pos - offset, this); } valid() { return true; } eq(other) { return this == other || other instanceof WidgetType && (this.spec.key && this.spec.key == other.spec.key || this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)); } destroy(node2) { if (this.spec.destroy) this.spec.destroy(node2); } } class InlineType { constructor(attrs, spec) { this.attrs = attrs; this.spec = spec || noSpec; } map(mapping, span, offset, oldOffset) { let from2 = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset; let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset; return from2 >= to ? null : new Decoration(from2, to, this); } valid(_2, span) { return span.from < span.to; } eq(other) { return this == other || other instanceof InlineType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec); } static is(span) { return span.type instanceof InlineType; } destroy() { } } class NodeType { constructor(attrs, spec) { this.attrs = attrs; this.spec = spec || noSpec; } map(mapping, span, offset, oldOffset) { let from2 = mapping.mapResult(span.from + oldOffset, 1); if (from2.deleted) return null; let to = mapping.mapResult(span.to + oldOffset, -1); if (to.deleted || to.pos <= from2.pos) return null; return new Decoration(from2.pos - offset, to.pos - offset, this); } valid(node2, span) { let { index: index2, offset } = node2.content.findIndex(span.from), child; return offset == span.from && !(child = node2.child(index2)).isText && offset + child.nodeSize == span.to; } eq(other) { return this == other || other instanceof NodeType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec); } destroy() { } } class Decoration { constructor(from2, to, type2) { this.from = from2; this.to = to; this.type = type2; } copy(from2, to) { return new Decoration(from2, to, this.type); } eq(other, offset = 0) { return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to; } map(mapping, offset, oldOffset) { return this.type.map(mapping, this, offset, oldOffset); } static widget(pos, toDOM, spec) { return new Decoration(pos, pos, new WidgetType(toDOM, spec)); } static inline(from2, to, attrs, spec) { return new Decoration(from2, to, new InlineType(attrs, spec)); } static node(from2, to, attrs, spec) { return new Decoration(from2, to, new NodeType(attrs, spec)); } get spec() { return this.type.spec; } get inline() { return this.type instanceof InlineType; } } const none = [], noSpec = {}; class DecorationSet { constructor(local, children) { this.local = local.length ? local : none; this.children = children.length ? children : none; } static create(doc2, decorations) { return decorations.length ? buildTree(decorations, doc2, 0, noSpec) : empty$1; } find(start, end, predicate) { let result = []; this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate); return result; } findInner(start, end, result, offset, predicate) { for (let i2 = 0; i2 < this.local.length; i2++) { let span = this.local[i2]; if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec))) result.push(span.copy(span.from + offset, span.to + offset)); } for (let i2 = 0; i2 < this.children.length; i2 += 3) { if (this.children[i2] < end && this.children[i2 + 1] > start) { let childOff = this.children[i2] + 1; this.children[i2 + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate); } } } map(mapping, doc2, options) { if (this == empty$1 || mapping.maps.length == 0) return this; return this.mapInner(mapping, doc2, 0, 0, options || noSpec); } mapInner(mapping, node2, offset, oldOffset, options) { let newLocal; for (let i2 = 0; i2 < this.local.length; i2++) { let mapped = this.local[i2].map(mapping, offset, oldOffset); if (mapped && mapped.type.valid(node2, mapped)) (newLocal || (newLocal = [])).push(mapped); else if (options.onRemove) options.onRemove(this.local[i2].spec); } if (this.children.length) return mapChildren(this.children, newLocal || [], mapping, node2, offset, oldOffset, options); else return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty$1; } add(doc2, decorations) { if (!decorations.length) return this; if (this == empty$1) return DecorationSet.create(doc2, decorations); return this.addInner(doc2, decorations, 0); } addInner(doc2, decorations, offset) { let children, childIndex = 0; doc2.forEach((childNode, childOffset) => { let baseOffset = childOffset + offset, found2; if (!(found2 = takeSpansForNode(decorations, childNode, baseOffset))) return; if (!children) children = this.children.slice(); while (childIndex < children.length && children[childIndex] < childOffset) childIndex += 3; if (children[childIndex] == childOffset) children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found2, baseOffset + 1); else children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found2, childNode, baseOffset + 1, noSpec)); childIndex += 3; }); let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset); for (let i2 = 0; i2 < local.length; i2++) if (!local[i2].type.valid(doc2, local[i2])) local.splice(i2--, 1); return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children); } remove(decorations) { if (decorations.length == 0 || this == empty$1) return this; return this.removeInner(decorations, 0); } removeInner(decorations, offset) { let children = this.children, local = this.local; for (let i2 = 0; i2 < children.length; i2 += 3) { let found2; let from2 = children[i2] + offset, to = children[i2 + 1] + offset; for (let j2 = 0, span; j2 < decorations.length; j2++) if (span = decorations[j2]) { if (span.from > from2 && span.to < to) { decorations[j2] = null; (found2 || (found2 = [])).push(span); } } if (!found2) continue; if (children == this.children) children = this.children.slice(); let removed = children[i2 + 2].removeInner(found2, from2 + 1); if (removed != empty$1) { children[i2 + 2] = removed; } else { children.splice(i2, 3); i2 -= 3; } } if (local.length) { for (let i2 = 0, span; i2 < decorations.length; i2++) if (span = decorations[i2]) { for (let j2 = 0; j2 < local.length; j2++) if (local[j2].eq(span, offset)) { if (local == this.local) local = this.local.slice(); local.splice(j2--, 1); } } } if (children == this.children && local == this.local) return this; return local.length || children.length ? new DecorationSet(local, children) : empty$1; } forChild(offset, node2) { if (this == empty$1) return this; if (node2.isLeaf) return DecorationSet.empty; let child, local; for (let i2 = 0; i2 < this.children.length; i2 += 3) if (this.children[i2] >= offset) { if (this.children[i2] == offset) child = this.children[i2 + 2]; break; } let start = offset + 1, end = start + node2.content.size; for (let i2 = 0; i2 < this.local.length; i2++) { let dec = this.local[i2]; if (dec.from < end && dec.to > start && dec.type instanceof InlineType) { let from2 = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start; if (from2 < to) (local || (local = [])).push(dec.copy(from2, to)); } } if (local) { let localSet = new DecorationSet(local.sort(byPos), none); return child ? new DecorationGroup([localSet, child]) : localSet; } return child || empty$1; } eq(other) { if (this == other) return true; if (!(other instanceof DecorationSet) || this.local.length != other.local.length || this.children.length != other.children.length) return false; for (let i2 = 0; i2 < this.local.length; i2++) if (!this.local[i2].eq(other.local[i2])) return false; for (let i2 = 0; i2 < this.children.length; i2 += 3) if (this.children[i2] != other.children[i2] || this.children[i2 + 1] != other.children[i2 + 1] || !this.children[i2 + 2].eq(other.children[i2 + 2])) return false; return true; } locals(node2) { return removeOverlap(this.localsInner(node2)); } localsInner(node2) { if (this == empty$1) return none; if (node2.inlineContent || !this.local.some(InlineType.is)) return this.local; let result = []; for (let i2 = 0; i2 < this.local.length; i2++) { if (!(this.local[i2].type instanceof InlineType)) result.push(this.local[i2]); } return result; } } DecorationSet.empty = new DecorationSet([], []); DecorationSet.removeOverlap = removeOverlap; const empty$1 = DecorationSet.empty; class DecorationGroup { constructor(members) { this.members = members; } map(mapping, doc2) { const mappedDecos = this.members.map((member) => member.map(mapping, doc2, noSpec)); return DecorationGroup.from(mappedDecos); } forChild(offset, child) { if (child.isLeaf) return DecorationSet.empty; let found2 = []; for (let i2 = 0; i2 < this.members.length; i2++) { let result = this.members[i2].forChild(offset, child); if (result == empty$1) continue; if (result instanceof DecorationGroup) found2 = found2.concat(result.members); else found2.push(result); } return DecorationGroup.from(found2); } eq(other) { if (!(other instanceof DecorationGroup) || other.members.length != this.members.length) return false; for (let i2 = 0; i2 < this.members.length; i2++) if (!this.members[i2].eq(other.members[i2])) return false; return true; } locals(node2) { let result, sorted = true; for (let i2 = 0; i2 < this.members.length; i2++) { let locals = this.members[i2].localsInner(node2); if (!locals.length) continue; if (!result) { result = locals; } else { if (sorted) { result = result.slice(); sorted = false; } for (let j2 = 0; j2 < locals.length; j2++) result.push(locals[j2]); } } return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none; } static from(members) { switch (members.length) { case 0: return empty$1; case 1: return members[0]; default: return new DecorationGroup(members.every((m2) => m2 instanceof DecorationSet) ? members : members.reduce((r2, m2) => r2.concat(m2 instanceof DecorationSet ? m2 : m2.members), [])); } } } function mapChildren(oldChildren, newLocal, mapping, node2, offset, oldOffset, options) { let children = oldChildren.slice(); for (let i2 = 0, baseOffset = oldOffset; i2 < mapping.maps.length; i2++) { let moved = 0; mapping.maps[i2].forEach((oldStart, oldEnd, newStart, newEnd) => { let dSize = newEnd - newStart - (oldEnd - oldStart); for (let i3 = 0; i3 < children.length; i3 += 3) { let end = children[i3 + 1]; if (end < 0 || oldStart > end + baseOffset - moved) continue; let start = children[i3] + baseOffset - moved; if (oldEnd >= start) { children[i3 + 1] = oldStart <= start ? -2 : -1; } else if (newStart >= offset && dSize) { children[i3] += dSize; children[i3 + 1] += dSize; } } moved += dSize; }); baseOffset = mapping.maps[i2].map(baseOffset, -1); } let mustRebuild = false; for (let i2 = 0; i2 < children.length; i2 += 3) if (children[i2 + 1] < 0) { if (children[i2 + 1] == -2) { mustRebuild = true; children[i2 + 1] = -1; continue; } let from2 = mapping.map(oldChildren[i2] + oldOffset), fromLocal = from2 - offset; if (fromLocal < 0 || fromLocal >= node2.content.size) { mustRebuild = true; continue; } let to = mapping.map(oldChildren[i2 + 1] + oldOffset, -1), toLocal = to - offset; let { index: index2, offset: childOffset } = node2.content.findIndex(fromLocal); let childNode = node2.maybeChild(index2); if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) { let mapped = children[i2 + 2].mapInner(mapping, childNode, from2 + 1, oldChildren[i2] + oldOffset + 1, options); if (mapped != empty$1) { children[i2] = fromLocal; children[i2 + 1] = toLocal; children[i2 + 2] = mapped; } else { children[i2 + 1] = -2; mustRebuild = true; } } else { mustRebuild = true; } } if (mustRebuild) { let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options); let built = buildTree(decorations, node2, 0, options); newLocal = built.local; for (let i2 = 0; i2 < children.length; i2 += 3) if (children[i2 + 1] < 0) { children.splice(i2, 3); i2 -= 3; } for (let i2 = 0, j2 = 0; i2 < built.children.length; i2 += 3) { let from2 = built.children[i2]; while (j2 < children.length && children[j2] < from2) j2 += 3; children.splice(j2, 0, built.children[i2], built.children[i2 + 1], built.children[i2 + 2]); } } return new DecorationSet(newLocal.sort(byPos), children); } function moveSpans(spans, offset) { if (!offset || !spans.length) return spans; let result = []; for (let i2 = 0; i2 < spans.length; i2++) { let span = spans[i2]; result.push(new Decoration(span.from + offset, span.to + offset, span.type)); } return result; } function mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) { function gather(set2, oldOffset2) { for (let i2 = 0; i2 < set2.local.length; i2++) { let mapped = set2.local[i2].map(mapping, offset, oldOffset2); if (mapped) decorations.push(mapped); else if (options.onRemove) options.onRemove(set2.local[i2].spec); } for (let i2 = 0; i2 < set2.children.length; i2 += 3) gather(set2.children[i2 + 2], set2.children[i2] + oldOffset2 + 1); } for (let i2 = 0; i2 < children.length; i2 += 3) if (children[i2 + 1] == -1) gather(children[i2 + 2], oldChildren[i2] + oldOffset + 1); return decorations; } function takeSpansForNode(spans, node2, offset) { if (node2.isLeaf) return null; let end = offset + node2.nodeSize, found2 = null; for (let i2 = 0, span; i2 < spans.length; i2++) { if ((span = spans[i2]) && span.from > offset && span.to < end) { (found2 || (found2 = [])).push(span); spans[i2] = null; } } return found2; } function withoutNulls(array) { let result = []; for (let i2 = 0; i2 < array.length; i2++) if (array[i2] != null) result.push(array[i2]); return result; } function buildTree(spans, node2, offset, options) { let children = [], hasNulls = false; node2.forEach((childNode, localStart) => { let found2 = takeSpansForNode(spans, childNode, localStart + offset); if (found2) { hasNulls = true; let subtree = buildTree(found2, childNode, offset + localStart + 1, options); if (subtree != empty$1) children.push(localStart, localStart + childNode.nodeSize, subtree); } }); let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos); for (let i2 = 0; i2 < locals.length; i2++) if (!locals[i2].type.valid(node2, locals[i2])) { if (options.onRemove) options.onRemove(locals[i2].spec); locals.splice(i2--, 1); } return locals.length || children.length ? new DecorationSet(locals, children) : empty$1; } function byPos(a2, b2) { return a2.from - b2.from || a2.to - b2.to; } function removeOverlap(spans) { let working = spans; for (let i2 = 0; i2 < working.length - 1; i2++) { let span = working[i2]; if (span.from != span.to) for (let j2 = i2 + 1; j2 < working.length; j2++) { let next2 = working[j2]; if (next2.from == span.from) { if (next2.to != span.to) { if (working == spans) working = spans.slice(); working[j2] = next2.copy(next2.from, span.to); insertAhead(working, j2 + 1, next2.copy(span.to, next2.to)); } continue; } else { if (next2.from < span.to) { if (working == spans) working = spans.slice(); working[i2] = span.copy(span.from, next2.from); insertAhead(working, j2, span.copy(next2.from, span.to)); } break; } } } return working; } function insertAhead(array, i2, deco) { while (i2 < array.length && byPos(deco, array[i2]) > 0) i2++; array.splice(i2, 0, deco); } function viewDecorations(view) { let found2 = []; view.someProp("decorations", (f2) => { let result = f2(view.state); if (result && result != empty$1) found2.push(result); }); if (view.cursorWrapper) found2.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco])); return DecorationGroup.from(found2); } const observeOptions = { childList: true, characterData: true, characterDataOldValue: true, attributes: true, attributeOldValue: true, subtree: true }; const useCharData = ie$2 && ie_version <= 11; class SelectionState { constructor() { this.anchorNode = null; this.anchorOffset = 0; this.focusNode = null; this.focusOffset = 0; } set(sel) { this.anchorNode = sel.anchorNode; this.anchorOffset = sel.anchorOffset; this.focusNode = sel.focusNode; this.focusOffset = sel.focusOffset; } clear() { this.anchorNode = this.focusNode = null; } eq(sel) { return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset && sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset; } } class DOMObserver { constructor(view, handleDOMChange) { this.view = view; this.handleDOMChange = handleDOMChange; this.queue = []; this.flushingSoon = -1; this.observer = null; this.currentSelection = new SelectionState(); this.onCharData = null; this.suppressingSelectionUpdates = false; this.observer = window.MutationObserver && new window.MutationObserver((mutations) => { for (let i2 = 0; i2 < mutations.length; i2++) this.queue.push(mutations[i2]); if (ie$2 && ie_version <= 11 && mutations.some((m2) => m2.type == "childList" && m2.removedNodes.length || m2.type == "characterData" && m2.oldValue.length > m2.target.nodeValue.length)) this.flushSoon(); else this.flush(); }); if (useCharData) { this.onCharData = (e2) => { this.queue.push({ target: e2.target, type: "characterData", oldValue: e2.prevValue }); this.flushSoon(); }; } this.onSelectionChange = this.onSelectionChange.bind(this); } flushSoon() { if (this.flushingSoon < 0) this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20); } forceFlush() { if (this.flushingSoon > -1) { window.clearTimeout(this.flushingSoon); this.flushingSoon = -1; this.flush(); } } start() { if (this.observer) { this.observer.takeRecords(); this.observer.observe(this.view.dom, observeOptions); } if (this.onCharData) this.view.dom.addEventListener("DOMCharacterDataModified", this.onCharData); this.connectSelection(); } stop() { if (this.observer) { let take = this.observer.takeRecords(); if (take.length) { for (let i2 = 0; i2 < take.length; i2++) this.queue.push(take[i2]); window.setTimeout(() => this.flush(), 20); } this.observer.disconnect(); } if (this.onCharData) this.view.dom.removeEventListener("DOMCharacterDataModified", this.onCharData); this.disconnectSelection(); } connectSelection() { this.view.dom.ownerDocument.addEventListener("selectionchange", this.onSelectionChange); } disconnectSelection() { this.view.dom.ownerDocument.removeEventListener("selectionchange", this.onSelectionChange); } suppressSelectionUpdates() { this.suppressingSelectionUpdates = true; setTimeout(() => this.suppressingSelectionUpdates = false, 50); } onSelectionChange() { if (!hasFocusAndSelection(this.view)) return; if (this.suppressingSelectionUpdates) return selectionToDOM(this.view); if (ie$2 && ie_version <= 11 && !this.view.state.selection.empty) { let sel = this.view.domSelectionRange(); if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset)) return this.flushSoon(); } this.flush(); } setCurSelection() { this.currentSelection.set(this.view.domSelectionRange()); } ignoreSelectionChange(sel) { if (!sel.focusNode) return true; let ancestors = /* @__PURE__ */ new Set(), container; for (let scan = sel.focusNode; scan; scan = parentNode(scan)) ancestors.add(scan); for (let scan = sel.anchorNode; scan; scan = parentNode(scan)) if (ancestors.has(scan)) { container = scan; break; } let desc = container && this.view.docView.nearestDesc(container); if (desc && desc.ignoreMutation({ type: "selection", target: container.nodeType == 3 ? container.parentNode : container })) { this.setCurSelection(); return true; } } flush() { let { view } = this; if (!view.docView || this.flushingSoon > -1) return; let mutations = this.observer ? this.observer.takeRecords() : []; if (this.queue.length) { mutations = this.queue.concat(mutations); this.queue.length = 0; } let sel = view.domSelectionRange(); let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel); let from2 = -1, to = -1, typeOver = false, added = []; if (view.editable) { for (let i2 = 0; i2 < mutations.length; i2++) { let result = this.registerMutation(mutations[i2], added); if (result) { from2 = from2 < 0 ? result.from : Math.min(result.from, from2); to = to < 0 ? result.to : Math.max(result.to, to); if (result.typeOver) typeOver = true; } } } if (gecko && added.length > 1) { let brs = added.filter((n2) => n2.nodeName == "BR"); if (brs.length == 2) { let a2 = brs[0], b2 = brs[1]; if (a2.parentNode && a2.parentNode.parentNode == b2.parentNode) b2.remove(); else a2.remove(); } } let readSel = null; if (from2 < 0 && newSel && view.input.lastFocus > Date.now() - 200 && view.input.lastTouch < Date.now() - 300 && selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) && readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) { view.input.lastFocus = 0; selectionToDOM(view); this.currentSelection.set(sel); view.scrollToSelection(); } else if (from2 > -1 || newSel) { if (from2 > -1) { view.docView.markDirty(from2, to); checkCSS(view); } this.handleDOMChange(from2, to, typeOver, added); if (view.docView && view.docView.dirty) view.updateState(view.state); else if (!this.currentSelection.eq(sel)) selectionToDOM(view); this.currentSelection.set(sel); } } registerMutation(mut, added) { if (added.indexOf(mut.target) > -1) return null; let desc = this.view.docView.nearestDesc(mut.target); if (mut.type == "attributes" && (desc == this.view.docView || mut.attributeName == "contenteditable" || mut.attributeName == "style" && !mut.oldValue && !mut.target.getAttribute("style"))) return null; if (!desc || desc.ignoreMutation(mut)) return null; if (mut.type == "childList") { for (let i2 = 0; i2 < mut.addedNodes.length; i2++) added.push(mut.addedNodes[i2]); if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target)) return { from: desc.posBefore, to: desc.posAfter }; let prev2 = mut.previousSibling, next2 = mut.nextSibling; if (ie$2 && ie_version <= 11 && mut.addedNodes.length) { for (let i2 = 0; i2 < mut.addedNodes.length; i2++) { let { previousSibling, nextSibling } = mut.addedNodes[i2]; if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0) prev2 = previousSibling; if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0) next2 = nextSibling; } } let fromOffset = prev2 && prev2.parentNode == mut.target ? domIndex(prev2) + 1 : 0; let from2 = desc.localPosFromDOM(mut.target, fromOffset, -1); let toOffset = next2 && next2.parentNode == mut.target ? domIndex(next2) : mut.target.childNodes.length; let to = desc.localPosFromDOM(mut.target, toOffset, 1); return { from: from2, to }; } else if (mut.type == "attributes") { return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border }; } else { return { from: desc.posAtStart, to: desc.posAtEnd, typeOver: mut.target.nodeValue == mut.oldValue }; } } } let cssChecked = /* @__PURE__ */ new WeakMap(); let cssCheckWarned = false; function checkCSS(view) { if (cssChecked.has(view)) return; cssChecked.set(view, null); if (["normal", "nowrap", "pre-line"].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) { view.requiresGeckoHackNode = gecko; if (cssCheckWarned) return; console["warn"]("ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package."); cssCheckWarned = true; } } function safariShadowSelectionRange(view) { let found2; function read(event) { event.preventDefault(); event.stopImmediatePropagation(); found2 = event.getTargetRanges()[0]; } view.dom.addEventListener("beforeinput", read, true); document.execCommand("indent"); view.dom.removeEventListener("beforeinput", read, true); let anchorNode = found2.startContainer, anchorOffset = found2.startOffset; let focusNode = found2.endContainer, focusOffset = found2.endOffset; let currentAnchor = view.domAtPos(view.state.selection.anchor); if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset)) [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset]; return { anchorNode, anchorOffset, focusNode, focusOffset }; } function parseBetween(view, from_, to_) { let { node: parent, fromOffset, toOffset, from: from2, to } = view.docView.parseRange(from_, to_); let domSel = view.domSelectionRange(); let find2; let anchor = domSel.anchorNode; if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) { find2 = [{ node: anchor, offset: domSel.anchorOffset }]; if (!selectionCollapsed(domSel)) find2.push({ node: domSel.focusNode, offset: domSel.focusOffset }); } if (chrome$1 && view.input.lastKeyCode === 8) { for (let off = toOffset; off > fromOffset; off--) { let node2 = parent.childNodes[off - 1], desc = node2.pmViewDesc; if (node2.nodeName == "BR" && !desc) { toOffset = off; break; } if (!desc || desc.size) break; } } let startDoc = view.state.doc; let parser = view.someProp("domParser") || DOMParser$1.fromSchema(view.state.schema); let $from = startDoc.resolve(from2); let sel = null, doc2 = parser.parse(parent, { topNode: $from.parent, topMatch: $from.parent.contentMatchAt($from.index()), topOpen: true, from: fromOffset, to: toOffset, preserveWhitespace: $from.parent.type.whitespace == "pre" ? "full" : true, findPositions: find2, ruleFromNode, context: $from }); if (find2 && find2[0].pos != null) { let anchor2 = find2[0].pos, head = find2[1] && find2[1].pos; if (head == null) head = anchor2; sel = { anchor: anchor2 + from2, head: head + from2 }; } return { doc: doc2, sel, from: from2, to }; } function ruleFromNode(dom) { let desc = dom.pmViewDesc; if (desc) { return desc.parseRule(); } else if (dom.nodeName == "BR" && dom.parentNode) { if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) { let skip = document.createElement("div"); skip.appendChild(document.createElement("li")); return { skip }; } else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) { return { ignore: true }; } } else if (dom.nodeName == "IMG" && dom.getAttribute("mark-placeholder")) { return { ignore: true }; } return null; } function readDOMChange(view, from2, to, typeOver, addedNodes) { if (from2 < 0) { let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null; let newSel = selectionFromDOM(view, origin); if (newSel && !view.state.selection.eq(newSel)) { let tr2 = view.state.tr.setSelection(newSel); if (origin == "pointer") tr2.setMeta("pointer", true); else if (origin == "key") tr2.scrollIntoView(); view.dispatch(tr2); } return; } let $before = view.state.doc.resolve(from2); let shared2 = $before.sharedDepth(to); from2 = $before.before(shared2 + 1); to = view.state.doc.resolve(to).after(shared2 + 1); let sel = view.state.selection; let parse2 = parseBetween(view, from2, to); let doc2 = view.state.doc, compare2 = doc2.slice(parse2.from, parse2.to); let preferredPos, preferredSide; if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) { preferredPos = view.state.selection.to; preferredSide = "end"; } else { preferredPos = view.state.selection.from; preferredSide = "start"; } view.input.lastKeyCode = null; let change = findDiff(compare2.content, parse2.doc.content, parse2.from, preferredPos, preferredSide); if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) && addedNodes.some((n2) => n2.nodeName == "DIV" || n2.nodeName == "P" || n2.nodeName == "LI") && (!change || change.endA >= change.endB) && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter")))) { view.input.lastIOSEnter = 0; return; } if (!change) { if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) && !view.composing && !(parse2.sel && parse2.sel.anchor != parse2.sel.head)) { change = { start: sel.from, endA: sel.to, endB: sel.to }; } else { if (parse2.sel) { let sel2 = resolveSelection(view, view.state.doc, parse2.sel); if (sel2 && !sel2.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel2)); } return; } } if (chrome$1 && view.cursorWrapper && parse2.sel && parse2.sel.anchor == view.cursorWrapper.deco.from && parse2.sel.head == parse2.sel.anchor) { let size2 = change.endB - change.start; parse2.sel = { anchor: parse2.sel.anchor + size2, head: parse2.sel.anchor + size2 }; } view.input.domChangeCount++; if (view.state.selection.from < view.state.selection.to && change.start == change.endB && view.state.selection instanceof TextSelection) { if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 && view.state.selection.from >= parse2.from) { change.start = view.state.selection.from; } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 && view.state.selection.to <= parse2.to) { change.endB += view.state.selection.to - change.endA; change.endA = view.state.selection.to; } } if (ie$2 && ie_version <= 11 && change.endB == change.start + 1 && change.endA == change.start && change.start > parse2.from && parse2.doc.textBetween(change.start - parse2.from - 1, change.start - parse2.from + 1) == " \xA0") { change.start--; change.endA--; change.endB--; } let $from = parse2.doc.resolveNoCache(change.start - parse2.from); let $to = parse2.doc.resolveNoCache(change.endB - parse2.from); let $fromA = doc2.resolve(change.start); let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA; let nextSel; if ((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some((n2) => n2.nodeName == "DIV" || n2.nodeName == "P")) || !inlineChange && $from.pos < parse2.doc.content.size && (nextSel = Selection.findFrom(parse2.doc.resolve($from.pos + 1), 1, true)) && nextSel.head == $to.pos) && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter")))) { view.input.lastIOSEnter = 0; return; } if (view.state.selection.anchor > change.start && looksLikeJoin(doc2, change.start, change.endA, $from, $to) && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(8, "Backspace")))) { if (android && chrome$1) view.domObserver.suppressSelectionUpdates(); return; } if (chrome$1 && android && change.endB == change.start) view.input.lastAndroidDelete = Date.now(); if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth && parse2.sel && parse2.sel.anchor == parse2.sel.head && parse2.sel.head == change.endA) { change.endB -= 2; $to = parse2.doc.resolveNoCache(change.endB - parse2.from); setTimeout(() => { view.someProp("handleKeyDown", function(f2) { return f2(view, keyEvent(13, "Enter")); }); }, 20); } let chFrom = change.start, chTo = change.endA; let tr, storedMarks, markChange; if (inlineChange) { if ($from.pos == $to.pos) { if (ie$2 && ie_version <= 11 && $from.parentOffset == 0) { view.domObserver.suppressSelectionUpdates(); setTimeout(() => selectionToDOM(view), 20); } tr = view.state.tr.delete(chFrom, chTo); storedMarks = doc2.resolve(change.start).marksAcross(doc2.resolve(change.endA)); } else if (change.endA == change.endB && (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) { tr = view.state.tr; if (markChange.type == "add") tr.addMark(chFrom, chTo, markChange.mark); else tr.removeMark(chFrom, chTo, markChange.mark); } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) { let text2 = $from.parent.textBetween($from.parentOffset, $to.parentOffset); if (view.someProp("handleTextInput", (f2) => f2(view, chFrom, chTo, text2))) return; tr = view.state.tr.insertText(text2, chFrom, chTo); } } if (!tr) tr = view.state.tr.replace(chFrom, chTo, parse2.doc.slice(change.start - parse2.from, change.endB - parse2.from)); if (parse2.sel) { let sel2 = resolveSelection(view, tr.doc, parse2.sel); if (sel2 && !(chrome$1 && android && view.composing && sel2.empty && (change.start != change.endB || view.input.lastAndroidDelete < Date.now() - 100) && (sel2.head == chFrom || sel2.head == tr.mapping.map(chTo) - 1) || ie$2 && sel2.empty && sel2.head == chFrom)) tr.setSelection(sel2); } if (storedMarks) tr.ensureMarks(storedMarks); view.dispatch(tr.scrollIntoView()); } function resolveSelection(view, doc2, parsedSel) { if (Math.max(parsedSel.anchor, parsedSel.head) > doc2.content.size) return null; return selectionBetween(view, doc2.resolve(parsedSel.anchor), doc2.resolve(parsedSel.head)); } function isMarkChange(cur, prev2) { let curMarks = cur.firstChild.marks, prevMarks = prev2.firstChild.marks; let added = curMarks, removed = prevMarks, type2, mark, update; for (let i2 = 0; i2 < prevMarks.length; i2++) added = prevMarks[i2].removeFromSet(added); for (let i2 = 0; i2 < curMarks.length; i2++) removed = curMarks[i2].removeFromSet(removed); if (added.length == 1 && removed.length == 0) { mark = added[0]; type2 = "add"; update = (node2) => node2.mark(mark.addToSet(node2.marks)); } else if (added.length == 0 && removed.length == 1) { mark = removed[0]; type2 = "remove"; update = (node2) => node2.mark(mark.removeFromSet(node2.marks)); } else { return null; } let updated = []; for (let i2 = 0; i2 < prev2.childCount; i2++) updated.push(update(prev2.child(i2))); if (Fragment.from(updated).eq(cur)) return { mark, type: type2 }; } function looksLikeJoin(old, start, end, $newStart, $newEnd) { if (!$newStart.parent.isTextblock || end - start <= $newEnd.pos - $newStart.pos || skipClosingAndOpening($newStart, true, false) < $newEnd.pos) return false; let $start = old.resolve(start); if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock) return false; let $next = old.resolve(skipClosingAndOpening($start, true, true)); if (!$next.parent.isTextblock || $next.pos > end || skipClosingAndOpening($next, true, false) < end) return false; return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content); } function skipClosingAndOpening($pos, fromEnd, mayOpen) { let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos; while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) { depth--; end++; fromEnd = false; } if (mayOpen) { let next2 = $pos.node(depth).maybeChild($pos.indexAfter(depth)); while (next2 && !next2.isLeaf) { next2 = next2.firstChild; end++; } } return end; } function findDiff(a2, b2, pos, preferredPos, preferredSide) { let start = a2.findDiffStart(b2, pos); if (start == null) return null; let { a: endA, b: endB } = a2.findDiffEnd(b2, pos + a2.size, pos + b2.size); if (preferredSide == "end") { let adjust = Math.max(0, start - Math.min(endA, endB)); preferredPos -= endA + adjust - start; } if (endA < start && a2.size < b2.size) { let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0; start -= move; endB = start + (endB - endA); endA = start; } else if (endB < start) { let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0; start -= move; endA = start + (endA - endB); endB = start; } return { start, endA, endB }; } const __serializeForClipboard = serializeForClipboard; const __parseFromClipboard = parseFromClipboard; const __endComposition = endComposition; class EditorView { constructor(place, props) { this._root = null; this.focused = false; this.trackWrites = null; this.mounted = false; this.markCursor = null; this.cursorWrapper = null; this.lastSelectedViewDesc = void 0; this.input = new InputState(); this.prevDirectPlugins = []; this.pluginViews = []; this.requiresGeckoHackNode = false; this.dragging = null; this._props = props; this.state = props.state; this.directPlugins = props.plugins || []; this.directPlugins.forEach(checkStateComponent); this.dispatch = this.dispatch.bind(this); this.dom = place && place.mount || document.createElement("div"); if (place) { if (place.appendChild) place.appendChild(this.dom); else if (typeof place == "function") place(this.dom); else if (place.mount) this.mounted = true; } this.editable = getEditable(this); updateCursorWrapper(this); this.nodeViews = buildNodeViews(this); this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this); this.domObserver = new DOMObserver(this, (from2, to, typeOver, added) => readDOMChange(this, from2, to, typeOver, added)); this.domObserver.start(); initInput(this); this.updatePluginViews(); } get composing() { return this.input.composing; } get props() { if (this._props.state != this.state) { let prev2 = this._props; this._props = {}; for (let name in prev2) this._props[name] = prev2[name]; this._props.state = this.state; } return this._props; } update(props) { if (props.handleDOMEvents != this._props.handleDOMEvents) ensureListeners(this); let prevProps = this._props; this._props = props; if (props.plugins) { props.plugins.forEach(checkStateComponent); this.directPlugins = props.plugins; } this.updateStateInner(props.state, prevProps); } setProps(props) { let updated = {}; for (let name in this._props) updated[name] = this._props[name]; updated.state = this.state; for (let name in props) updated[name] = props[name]; this.update(updated); } updateState(state) { this.updateStateInner(state, this._props); } updateStateInner(state, prevProps) { let prev2 = this.state, redraw = false, updateSel = false; if (state.storedMarks && this.composing) { clearComposition(this); updateSel = true; } this.state = state; let pluginsChanged = prev2.plugins != state.plugins || this._props.plugins != prevProps.plugins; if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) { let nodeViews = buildNodeViews(this); if (changedNodeViews(nodeViews, this.nodeViews)) { this.nodeViews = nodeViews; redraw = true; } } if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) { ensureListeners(this); } this.editable = getEditable(this); updateCursorWrapper(this); let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this); let scroll = prev2.plugins != state.plugins && !prev2.doc.eq(state.doc) ? "reset" : state.scrollToSelection > prev2.scrollToSelection ? "to selection" : "preserve"; let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco); if (updateDoc || !state.selection.eq(prev2.selection)) updateSel = true; let oldScrollPos = scroll == "preserve" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this); if (updateSel) { this.domObserver.stop(); let forceSelUpdate = updateDoc && (ie$2 || chrome$1) && !this.composing && !prev2.selection.empty && !state.selection.empty && selectionContextChanged(prev2.selection, state.selection); if (updateDoc) { let chromeKludge = chrome$1 ? this.trackWrites = this.domSelectionRange().focusNode : null; if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) { this.docView.updateOuterDeco([]); this.docView.destroy(); this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this); } if (chromeKludge && !this.trackWrites) forceSelUpdate = true; } if (forceSelUpdate || !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) && anchorInRightPlace(this))) { selectionToDOM(this, forceSelUpdate); } else { syncNodeSelection(this, state.selection); this.domObserver.setCurSelection(); } this.domObserver.start(); } this.updatePluginViews(prev2); if (scroll == "reset") { this.dom.scrollTop = 0; } else if (scroll == "to selection") { this.scrollToSelection(); } else if (oldScrollPos) { resetScrollPos(oldScrollPos); } } scrollToSelection() { let startDOM = this.domSelectionRange().focusNode; if (this.someProp("handleScrollToSelection", (f2) => f2(this))) ; else if (this.state.selection instanceof NodeSelection) { let target2 = this.docView.domAfterPos(this.state.selection.from); if (target2.nodeType == 1) scrollRectIntoView(this, target2.getBoundingClientRect(), startDOM); } else { scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM); } } destroyPluginViews() { let view; while (view = this.pluginViews.pop()) if (view.destroy) view.destroy(); } updatePluginViews(prevState) { if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) { this.prevDirectPlugins = this.directPlugins; this.destroyPluginViews(); for (let i2 = 0; i2 < this.directPlugins.length; i2++) { let plugin2 = this.directPlugins[i2]; if (plugin2.spec.view) this.pluginViews.push(plugin2.spec.view(this)); } for (let i2 = 0; i2 < this.state.plugins.length; i2++) { let plugin2 = this.state.plugins[i2]; if (plugin2.spec.view) this.pluginViews.push(plugin2.spec.view(this)); } } else { for (let i2 = 0; i2 < this.pluginViews.length; i2++) { let pluginView = this.pluginViews[i2]; if (pluginView.update) pluginView.update(this, prevState); } } } someProp(propName, f2) { let prop2 = this._props && this._props[propName], value; if (prop2 != null && (value = f2 ? f2(prop2) : prop2)) return value; for (let i2 = 0; i2 < this.directPlugins.length; i2++) { let prop3 = this.directPlugins[i2].props[propName]; if (prop3 != null && (value = f2 ? f2(prop3) : prop3)) return value; } let plugins = this.state.plugins; if (plugins) for (let i2 = 0; i2 < plugins.length; i2++) { let prop3 = plugins[i2].props[propName]; if (prop3 != null && (value = f2 ? f2(prop3) : prop3)) return value; } } hasFocus() { if (ie$2) { let node2 = this.root.activeElement; if (node2 == this.dom) return true; if (!node2 || !this.dom.contains(node2)) return false; while (node2 && this.dom != node2 && this.dom.contains(node2)) { if (node2.contentEditable == "false") return false; node2 = node2.parentElement; } return true; } return this.root.activeElement == this.dom; } focus() { this.domObserver.stop(); if (this.editable) focusPreventScroll(this.dom); selectionToDOM(this); this.domObserver.start(); } get root() { let cached = this._root; if (cached == null) for (let search2 = this.dom.parentNode; search2; search2 = search2.parentNode) { if (search2.nodeType == 9 || search2.nodeType == 11 && search2.host) { if (!search2.getSelection) Object.getPrototypeOf(search2).getSelection = () => search2.ownerDocument.getSelection(); return this._root = search2; } } return cached || document; } posAtCoords(coords) { return posAtCoords(this, coords); } coordsAtPos(pos, side = 1) { return coordsAtPos(this, pos, side); } domAtPos(pos, side = 0) { return this.docView.domFromPos(pos, side); } nodeDOM(pos) { let desc = this.docView.descAt(pos); return desc ? desc.nodeDOM : null; } posAtDOM(node2, offset, bias = -1) { let pos = this.docView.posFromDOM(node2, offset, bias); if (pos == null) throw new RangeError("DOM position not inside the editor"); return pos; } endOfTextblock(dir, state) { return endOfTextblock(this, state || this.state, dir); } destroy() { if (!this.docView) return; destroyInput(this); this.destroyPluginViews(); if (this.mounted) { this.docView.update(this.state.doc, [], viewDecorations(this), this); this.dom.textContent = ""; } else if (this.dom.parentNode) { this.dom.parentNode.removeChild(this.dom); } this.docView.destroy(); this.docView = null; } get isDestroyed() { return this.docView == null; } dispatchEvent(event) { return dispatchEvent(this, event); } dispatch(tr) { let dispatchTransaction = this._props.dispatchTransaction; if (dispatchTransaction) dispatchTransaction.call(this, tr); else this.updateState(this.state.apply(tr)); } domSelectionRange() { return safari && this.root.nodeType === 11 && deepActiveElement(this.dom.ownerDocument) == this.dom ? safariShadowSelectionRange(this) : this.domSelection(); } domSelection() { return this.root.getSelection(); } } function computeDocDeco(view) { let attrs = /* @__PURE__ */ Object.create(null); attrs.class = "ProseMirror"; attrs.contenteditable = String(view.editable); attrs.translate = "no"; view.someProp("attributes", (value) => { if (typeof value == "function") value = value(view.state); if (value) for (let attr in value) { if (attr == "class") attrs.class += " " + value[attr]; if (attr == "style") { attrs.style = (attrs.style ? attrs.style + ";" : "") + value[attr]; } else if (!attrs[attr] && attr != "contenteditable" && attr != "nodeName") attrs[attr] = String(value[attr]); } }); return [Decoration.node(0, view.state.doc.content.size, attrs)]; } function updateCursorWrapper(view) { if (view.markCursor) { let dom = document.createElement("img"); dom.className = "ProseMirror-separator"; dom.setAttribute("mark-placeholder", "true"); dom.setAttribute("alt", ""); view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.head, dom, { raw: true, marks: view.markCursor }) }; } else { view.cursorWrapper = null; } } function getEditable(view) { return !view.someProp("editable", (value) => value(view.state) === false); } function selectionContextChanged(sel1, sel2) { let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head)); return sel1.$anchor.start(depth) != sel2.$anchor.start(depth); } function buildNodeViews(view) { let result = /* @__PURE__ */ Object.create(null); function add(obj) { for (let prop2 in obj) if (!Object.prototype.hasOwnProperty.call(result, prop2)) result[prop2] = obj[prop2]; } view.someProp("nodeViews", add); view.someProp("markViews", add); return result; } function changedNodeViews(a2, b2) { let nA = 0, nB = 0; for (let prop2 in a2) { if (a2[prop2] != b2[prop2]) return true; nA++; } for (let _2 in b2) nB++; return nA != nB; } function checkStateComponent(plugin2) { if (plugin2.spec.state || plugin2.spec.filterTransaction || plugin2.spec.appendTransaction) throw new RangeError("Plugins passed directly to the view must not have a state component"); } const dist$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, Decoration, DecorationSet, EditorView, __endComposition, __parseFromClipboard, __serializeForClipboard }, Symbol.toStringTag, { value: "Module" })); const require$$2 = /* @__PURE__ */ getAugmentedNamespace(dist$2); var base$1 = { 8: "Backspace", 9: "Tab", 10: "Enter", 12: "NumLock", 13: "Enter", 16: "Shift", 17: "Control", 18: "Alt", 20: "CapsLock", 27: "Escape", 32: " ", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "ArrowLeft", 38: "ArrowUp", 39: "ArrowRight", 40: "ArrowDown", 44: "PrintScreen", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Meta", 92: "Meta", 106: "*", 107: "+", 108: ",", 109: "-", 110: ".", 111: "/", 144: "NumLock", 145: "ScrollLock", 160: "Shift", 161: "Shift", 162: "Control", 163: "Control", 164: "Alt", 165: "Alt", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'" }; var shift = { 48: ")", 49: "!", 50: "@", 51: "#", 52: "$", 53: "%", 54: "^", 55: "&", 56: "*", 57: "(", 59: ":", 61: "+", 173: "_", 186: ":", 187: "+", 188: "<", 189: "_", 190: ">", 191: "?", 192: "~", 219: "{", 220: "|", 221: "}", 222: '"' }; var chrome = typeof navigator != "undefined" && /Chrome\/(\d+)/.exec(navigator.userAgent); typeof navigator != "undefined" && /Gecko\/\d+/.test(navigator.userAgent); var mac$1 = typeof navigator != "undefined" && /Mac/.test(navigator.platform); var ie$1 = typeof navigator != "undefined" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); var brokenModifierNames = mac$1 || chrome && +chrome[1] < 57; for (var i$5 = 0; i$5 < 10; i$5++) base$1[48 + i$5] = base$1[96 + i$5] = String(i$5); for (var i$5 = 1; i$5 <= 24; i$5++) base$1[i$5 + 111] = "F" + i$5; for (var i$5 = 65; i$5 <= 90; i$5++) { base$1[i$5] = String.fromCharCode(i$5 + 32); shift[i$5] = String.fromCharCode(i$5); } for (var code in base$1) if (!shift.hasOwnProperty(code)) shift[code] = base$1[code]; function keyName(event) { var ignoreKey2 = brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey) || ie$1 && event.shiftKey && event.key && event.key.length == 1 || event.key == "Unidentified"; var name = !ignoreKey2 && event.key || (event.shiftKey ? shift : base$1)[event.keyCode] || event.key || "Unidentified"; if (name == "Esc") name = "Escape"; if (name == "Del") name = "Delete"; if (name == "Left") name = "ArrowLeft"; if (name == "Up") name = "ArrowUp"; if (name == "Right") name = "ArrowRight"; if (name == "Down") name = "ArrowDown"; return name; } const mac = typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false; function normalizeKeyName(name) { let parts = name.split(/-(?!$)/), result = parts[parts.length - 1]; if (result == "Space") result = " "; let alt, ctrl, shift2, meta2; for (let i2 = 0; i2 < parts.length - 1; i2++) { let mod = parts[i2]; if (/^(cmd|meta|m)$/i.test(mod)) meta2 = true; else if (/^a(lt)?$/i.test(mod)) alt = true; else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; else if (/^s(hift)?$/i.test(mod)) shift2 = true; else if (/^mod$/i.test(mod)) { if (mac) meta2 = true; else ctrl = true; } else throw new Error("Unrecognized modifier name: " + mod); } if (alt) result = "Alt-" + result; if (ctrl) result = "Ctrl-" + result; if (meta2) result = "Meta-" + result; if (shift2) result = "Shift-" + result; return result; } function normalize(map2) { let copy2 = /* @__PURE__ */ Object.create(null); for (let prop2 in map2) copy2[normalizeKeyName(prop2)] = map2[prop2]; return copy2; } function modifiers(name, event, shift2) { if (event.altKey) name = "Alt-" + name; if (event.ctrlKey) name = "Ctrl-" + name; if (event.metaKey) name = "Meta-" + name; if (shift2 !== false && event.shiftKey) name = "Shift-" + name; return name; } function keymap(bindings) { return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } }); } function keydownHandler(bindings) { let map2 = normalize(bindings); return function(view, event) { let name = keyName(event), isChar = name.length == 1 && name != " ", baseName; let direct = map2[modifiers(name, event, !isChar)]; if (direct && direct(view.state, view.dispatch, view)) return true; if (isChar && (event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) && (baseName = base$1[event.keyCode]) && baseName != name) { let fromCode = map2[modifiers(baseName, event, true)]; if (fromCode && fromCode(view.state, view.dispatch, view)) return true; } else if (isChar && event.shiftKey) { let withShift = map2[modifiers(name, event, true)]; if (withShift && withShift(view.state, view.dispatch, view)) return true; } return false; }; } const dist$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, keydownHandler, keymap }, Symbol.toStringTag, { value: "Module" })); const require$$3 = /* @__PURE__ */ getAugmentedNamespace(dist$1); const require$$4 = /* @__PURE__ */ getAugmentedNamespace(dist$5); var __defProp2 = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target2, all) => { for (var name in all) __defProp2(target2, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from2, except, desc) => { if (from2 && typeof from2 === "object" || typeof from2 === "function") { for (let key2 of __getOwnPropNames(from2)) if (!__hasOwnProp.call(to, key2) && key2 !== except) __defProp2(to, key2, { get: () => from2[key2], enumerable: !(desc = __getOwnPropDesc(from2, key2)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); var src_exports = {}; __export(src_exports, { CellBookmark: () => CellBookmark, CellSelection: () => CellSelection, ResizeState: () => ResizeState, TableMap: () => TableMap, TableView: () => TableView, __clipCells: () => clipCells, __insertCells: () => insertCells, __pastedCells: () => pastedCells, addColSpan: () => addColSpan, addColumn: () => addColumn, addColumnAfter: () => addColumnAfter, addColumnBefore: () => addColumnBefore, addRow: () => addRow, addRowAfter: () => addRowAfter, addRowBefore: () => addRowBefore, cellAround: () => cellAround, colCount: () => colCount, columnIsHeader: () => columnIsHeader, columnResizing: () => columnResizing, columnResizingPluginKey: () => columnResizingPluginKey, deleteColumn: () => deleteColumn, deleteRow: () => deleteRow, deleteTable: () => deleteTable$1, findCell: () => findCell, fixTables: () => fixTables, fixTablesKey: () => fixTablesKey, goToNextCell: () => goToNextCell, handlePaste: () => handlePaste$1, inSameTable: () => inSameTable, isInTable: () => isInTable, mergeCells: () => mergeCells, moveCellForward: () => moveCellForward, nextCell: () => nextCell, pointsAtCell: () => pointsAtCell, removeColSpan: () => removeColSpan, removeColumn: () => removeColumn, removeRow: () => removeRow, rowIsHeader: () => rowIsHeader, selectedRect: () => selectedRect$1, selectionCell: () => selectionCell, setCellAttr: () => setCellAttr, splitCell: () => splitCell, splitCellWithType: () => splitCellWithType, tableEditing: () => tableEditing, tableEditingKey: () => tableEditingKey, tableNodeTypes: () => tableNodeTypes$1, tableNodes: () => tableNodes, toggleHeader: () => toggleHeader, toggleHeaderCell: () => toggleHeaderCell, toggleHeaderColumn: () => toggleHeaderColumn, toggleHeaderRow: () => toggleHeaderRow, updateColumnsOnResize: () => updateColumnsOnResize }); var dist = __toCommonJS(src_exports); var import_prosemirror_state7 = require$$0$3; var import_prosemirror_model = require$$1; var import_prosemirror_state2 = require$$0$3; var import_prosemirror_view = require$$2; var readFromCache; var addToCache; if (typeof WeakMap != "undefined") { let cache = /* @__PURE__ */ new WeakMap(); readFromCache = (key2) => cache.get(key2); addToCache = (key2, value) => { cache.set(key2, value); return value; }; } else { const cache = []; const cacheSize = 10; let cachePos = 0; readFromCache = (key2) => { for (let i2 = 0; i2 < cache.length; i2 += 2) if (cache[i2] == key2) return cache[i2 + 1]; }; addToCache = (key2, value) => { if (cachePos == cacheSize) cachePos = 0; cache[cachePos++] = key2; return cache[cachePos++] = value; }; } var TableMap = class { constructor(width, height, map2, problems) { this.width = width; this.height = height; this.map = map2; this.problems = problems; } findCell(pos) { for (let i2 = 0; i2 < this.map.length; i2++) { const curPos = this.map[i2]; if (curPos != pos) continue; const left = i2 % this.width; const top2 = i2 / this.width | 0; let right = left + 1; let bottom2 = top2 + 1; for (let j2 = 1; right < this.width && this.map[i2 + j2] == curPos; j2++) { right++; } for (let j2 = 1; bottom2 < this.height && this.map[i2 + this.width * j2] == curPos; j2++) { bottom2++; } return { left, top: top2, right, bottom: bottom2 }; } throw new RangeError(`No cell with offset ${pos} found`); } colCount(pos) { for (let i2 = 0; i2 < this.map.length; i2++) { if (this.map[i2] == pos) { return i2 % this.width; } } throw new RangeError(`No cell with offset ${pos} found`); } nextCell(pos, axis, dir) { const { left, right, top: top2, bottom: bottom2 } = this.findCell(pos); if (axis == "horiz") { if (dir < 0 ? left == 0 : right == this.width) return null; return this.map[top2 * this.width + (dir < 0 ? left - 1 : right)]; } else { if (dir < 0 ? top2 == 0 : bottom2 == this.height) return null; return this.map[left + this.width * (dir < 0 ? top2 - 1 : bottom2)]; } } rectBetween(a2, b2) { const { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a2); const { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b2); return { left: Math.min(leftA, leftB), top: Math.min(topA, topB), right: Math.max(rightA, rightB), bottom: Math.max(bottomA, bottomB) }; } cellsInRect(rect2) { const result = []; const seen = {}; for (let row = rect2.top; row < rect2.bottom; row++) { for (let col = rect2.left; col < rect2.right; col++) { const index2 = row * this.width + col; const pos = this.map[index2]; if (seen[pos]) continue; seen[pos] = true; if (col == rect2.left && col && this.map[index2 - 1] == pos || row == rect2.top && row && this.map[index2 - this.width] == pos) { continue; } result.push(pos); } } return result; } positionAt(row, col, table) { for (let i2 = 0, rowStart = 0; ; i2++) { const rowEnd = rowStart + table.child(i2).nodeSize; if (i2 == row) { let index2 = col + row * this.width; const rowEndIndex = (row + 1) * this.width; while (index2 < rowEndIndex && this.map[index2] < rowStart) index2++; return index2 == rowEndIndex ? rowEnd - 1 : this.map[index2]; } rowStart = rowEnd; } } static get(table) { return readFromCache(table) || addToCache(table, computeMap(table)); } }; function computeMap(table) { if (table.type.spec.tableRole != "table") throw new RangeError("Not a table node: " + table.type.name); const width = findWidth(table), height = table.childCount; const map2 = []; let mapPos = 0; let problems = null; const colWidths = []; for (let i2 = 0, e2 = width * height; i2 < e2; i2++) map2[i2] = 0; for (let row = 0, pos = 0; row < height; row++) { const rowNode = table.child(row); pos++; for (let i2 = 0; ; i2++) { while (mapPos < map2.length && map2[mapPos] != 0) mapPos++; if (i2 == rowNode.childCount) break; const cellNode = rowNode.child(i2); const { colspan, rowspan, colwidth } = cellNode.attrs; for (let h2 = 0; h2 < rowspan; h2++) { if (h2 + row >= height) { (problems || (problems = [])).push({ type: "overlong_rowspan", pos, n: rowspan - h2 }); break; } const start = mapPos + h2 * width; for (let w2 = 0; w2 < colspan; w2++) { if (map2[start + w2] == 0) map2[start + w2] = pos; else (problems || (problems = [])).push({ type: "collision", row, pos, n: colspan - w2 }); const colW = colwidth && colwidth[w2]; if (colW) { const widthIndex = (start + w2) % width * 2, prev2 = colWidths[widthIndex]; if (prev2 == null || prev2 != colW && colWidths[widthIndex + 1] == 1) { colWidths[widthIndex] = colW; colWidths[widthIndex + 1] = 1; } else if (prev2 == colW) { colWidths[widthIndex + 1]++; } } } } mapPos += colspan; pos += cellNode.nodeSize; } const expectedPos = (row + 1) * width; let missing = 0; while (mapPos < expectedPos) if (map2[mapPos++] == 0) missing++; if (missing) (problems || (problems = [])).push({ type: "missing", row, n: missing }); pos++; } const tableMap = new TableMap(width, height, map2, problems); let badWidths = false; for (let i2 = 0; !badWidths && i2 < colWidths.length; i2 += 2) if (colWidths[i2] != null && colWidths[i2 + 1] < height) badWidths = true; if (badWidths) findBadColWidths(tableMap, colWidths, table); return tableMap; } function findWidth(table) { let width = -1; let hasRowSpan = false; for (let row = 0; row < table.childCount; row++) { const rowNode = table.child(row); let rowWidth = 0; if (hasRowSpan) for (let j2 = 0; j2 < row; j2++) { const prevRow2 = table.child(j2); for (let i2 = 0; i2 < prevRow2.childCount; i2++) { const cell = prevRow2.child(i2); if (j2 + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan; } } for (let i2 = 0; i2 < rowNode.childCount; i2++) { const cell = rowNode.child(i2); rowWidth += cell.attrs.colspan; if (cell.attrs.rowspan > 1) hasRowSpan = true; } if (width == -1) width = rowWidth; else if (width != rowWidth) width = Math.max(width, rowWidth); } return width; } function findBadColWidths(map2, colWidths, table) { if (!map2.problems) map2.problems = []; const seen = {}; for (let i2 = 0; i2 < map2.map.length; i2++) { const pos = map2.map[i2]; if (seen[pos]) continue; seen[pos] = true; const node2 = table.nodeAt(pos); if (!node2) { throw new RangeError(`No cell with offset ${pos} found`); } let updated = null; const attrs = node2.attrs; for (let j2 = 0; j2 < attrs.colspan; j2++) { const col = (i2 + j2) % map2.width; const colWidth = colWidths[col * 2]; if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j2] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j2] = colWidth; } if (updated) map2.problems.unshift({ type: "colwidth mismatch", pos, colwidth: updated }); } } function freshColWidth(attrs) { if (attrs.colwidth) return attrs.colwidth.slice(); const result = []; for (let i2 = 0; i2 < attrs.colspan; i2++) result.push(0); return result; } var import_prosemirror_state = require$$0$3; function getCellAttrs(dom, extraAttrs) { if (typeof dom === "string") { return {}; } const widthAttr = dom.getAttribute("data-colwidth"); const widths = widthAttr && /^\d+(,\d+)*$/.test(widthAttr) ? widthAttr.split(",").map((s2) => Number(s2)) : null; const colspan = Number(dom.getAttribute("colspan") || 1); const result = { colspan, rowspan: Number(dom.getAttribute("rowspan") || 1), colwidth: widths && widths.length == colspan ? widths : null }; for (const prop2 in extraAttrs) { const getter = extraAttrs[prop2].getFromDOM; const value = getter && getter(dom); if (value != null) { result[prop2] = value; } } return result; } function setCellAttrs$1(node2, extraAttrs) { const attrs = {}; if (node2.attrs.colspan != 1) attrs.colspan = node2.attrs.colspan; if (node2.attrs.rowspan != 1) attrs.rowspan = node2.attrs.rowspan; if (node2.attrs.colwidth) attrs["data-colwidth"] = node2.attrs.colwidth.join(","); for (const prop2 in extraAttrs) { const setter2 = extraAttrs[prop2].setDOMAttr; if (setter2) setter2(node2.attrs[prop2], attrs); } return attrs; } function tableNodes(options) { const extraAttrs = options.cellAttributes || {}; const cellAttrs = { colspan: { default: 1 }, rowspan: { default: 1 }, colwidth: { default: null } }; for (const prop2 in extraAttrs) cellAttrs[prop2] = { default: extraAttrs[prop2].default }; return { table: { content: "table_row+", tableRole: "table", isolating: true, group: options.tableGroup, parseDOM: [{ tag: "table" }], toDOM() { return ["table", ["tbody", 0]]; } }, table_row: { content: "(table_cell | table_header)*", tableRole: "row", parseDOM: [{ tag: "tr" }], toDOM() { return ["tr", 0]; } }, table_cell: { content: options.cellContent, attrs: cellAttrs, tableRole: "cell", isolating: true, parseDOM: [ { tag: "td", getAttrs: (dom) => getCellAttrs(dom, extraAttrs) } ], toDOM(node2) { return ["td", setCellAttrs$1(node2, extraAttrs), 0]; } }, table_header: { content: options.cellContent, attrs: cellAttrs, tableRole: "header_cell", isolating: true, parseDOM: [ { tag: "th", getAttrs: (dom) => getCellAttrs(dom, extraAttrs) } ], toDOM(node2) { return ["th", setCellAttrs$1(node2, extraAttrs), 0]; } } }; } function tableNodeTypes$1(schema2) { let result = schema2.cached.tableNodeTypes; if (!result) { result = schema2.cached.tableNodeTypes = {}; for (const name in schema2.nodes) { const type2 = schema2.nodes[name], role = type2.spec.tableRole; if (role) result[role] = type2; } } return result; } var tableEditingKey = new import_prosemirror_state.PluginKey("selectingCells"); function cellAround($pos) { for (let d2 = $pos.depth - 1; d2 > 0; d2--) if ($pos.node(d2).type.spec.tableRole == "row") return $pos.node(0).resolve($pos.before(d2 + 1)); return null; } function cellWrapping($pos) { for (let d2 = $pos.depth; d2 > 0; d2--) { const role = $pos.node(d2).type.spec.tableRole; if (role === "cell" || role === "header_cell") return $pos.node(d2); } return null; } function isInTable(state) { const $head = state.selection.$head; for (let d2 = $head.depth; d2 > 0; d2--) if ($head.node(d2).type.spec.tableRole == "row") return true; return false; } function selectionCell(state) { const sel = state.selection; if ("$anchorCell" in sel && sel.$anchorCell) { return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell; } else if ("node" in sel && sel.node && sel.node.type.spec.tableRole == "cell") { return sel.$anchor; } const $cell = cellAround(sel.$head) || cellNear(sel.$head); if ($cell) { return $cell; } throw new RangeError(`No cell found around position ${sel.head}`); } function cellNear($pos) { for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) { const role = after.type.spec.tableRole; if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos); } for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) { const role = before.type.spec.tableRole; if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos - before.nodeSize); } } function pointsAtCell($pos) { return $pos.parent.type.spec.tableRole == "row" && !!$pos.nodeAfter; } function moveCellForward($pos) { return $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize); } function inSameTable($cellA, $cellB) { return $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1); } function findCell($pos) { return TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1)); } function colCount($pos) { return TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1)); } function nextCell($pos, axis, dir) { const table = $pos.node(-1); const map2 = TableMap.get(table); const tableStart = $pos.start(-1); const moved = map2.nextCell($pos.pos - tableStart, axis, dir); return moved == null ? null : $pos.node(0).resolve(tableStart + moved); } function removeColSpan(attrs, pos, n2 = 1) { const result = { ...attrs, colspan: attrs.colspan - n2 }; if (result.colwidth) { result.colwidth = result.colwidth.slice(); result.colwidth.splice(pos, n2); if (!result.colwidth.some((w2) => w2 > 0)) result.colwidth = null; } return result; } function addColSpan(attrs, pos, n2 = 1) { const result = { ...attrs, colspan: attrs.colspan + n2 }; if (result.colwidth) { result.colwidth = result.colwidth.slice(); for (let i2 = 0; i2 < n2; i2++) result.colwidth.splice(pos, 0, 0); } return result; } function columnIsHeader(map2, table, col) { const headerCell = tableNodeTypes$1(table.type.schema).header_cell; for (let row = 0; row < map2.height; row++) if (table.nodeAt(map2.map[col + row * map2.width]).type != headerCell) return false; return true; } var CellSelection = class extends import_prosemirror_state2.Selection { constructor($anchorCell, $headCell = $anchorCell) { const table = $anchorCell.node(-1); const map2 = TableMap.get(table); const tableStart = $anchorCell.start(-1); const rect2 = map2.rectBetween( $anchorCell.pos - tableStart, $headCell.pos - tableStart ); const doc2 = $anchorCell.node(0); const cells = map2.cellsInRect(rect2).filter((p2) => p2 != $headCell.pos - tableStart); cells.unshift($headCell.pos - tableStart); const ranges = cells.map((pos) => { const cell = table.nodeAt(pos); if (!cell) { throw RangeError(`No cell with offset ${pos} found`); } const from2 = tableStart + pos + 1; return new import_prosemirror_state2.SelectionRange( doc2.resolve(from2), doc2.resolve(from2 + cell.content.size) ); }); super(ranges[0].$from, ranges[0].$to, ranges); this.$anchorCell = $anchorCell; this.$headCell = $headCell; } map(doc2, mapping) { const $anchorCell = doc2.resolve(mapping.map(this.$anchorCell.pos)); const $headCell = doc2.resolve(mapping.map(this.$headCell.pos)); if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) { const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1); if (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell); else if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell); else return new CellSelection($anchorCell, $headCell); } return import_prosemirror_state2.TextSelection.between($anchorCell, $headCell); } content() { const table = this.$anchorCell.node(-1); const map2 = TableMap.get(table); const tableStart = this.$anchorCell.start(-1); const rect2 = map2.rectBetween( this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart ); const seen = {}; const rows = []; for (let row = rect2.top; row < rect2.bottom; row++) { const rowContent = []; for (let index2 = row * map2.width + rect2.left, col = rect2.left; col < rect2.right; col++, index2++) { const pos = map2.map[index2]; if (seen[pos]) continue; seen[pos] = true; const cellRect = map2.findCell(pos); let cell = table.nodeAt(pos); if (!cell) { throw RangeError(`No cell with offset ${pos} found`); } const extraLeft = rect2.left - cellRect.left; const extraRight = cellRect.right - rect2.right; if (extraLeft > 0 || extraRight > 0) { let attrs = cell.attrs; if (extraLeft > 0) { attrs = removeColSpan(attrs, 0, extraLeft); } if (extraRight > 0) { attrs = removeColSpan( attrs, attrs.colspan - extraRight, extraRight ); } if (cellRect.left < rect2.left) { cell = cell.type.createAndFill(attrs); if (!cell) { throw RangeError( `Could not create cell with attrs ${JSON.stringify(attrs)}` ); } } else { cell = cell.type.create(attrs, cell.content); } } if (cellRect.top < rect2.top || cellRect.bottom > rect2.bottom) { const attrs = { ...cell.attrs, rowspan: Math.min(cellRect.bottom, rect2.bottom) - Math.max(cellRect.top, rect2.top) }; if (cellRect.top < rect2.top) { cell = cell.type.createAndFill(attrs); } else { cell = cell.type.create(attrs, cell.content); } } rowContent.push(cell); } rows.push(table.child(row).copy(import_prosemirror_model.Fragment.from(rowContent))); } const fragment = this.isColSelection() && this.isRowSelection() ? table : rows; return new import_prosemirror_model.Slice(import_prosemirror_model.Fragment.from(fragment), 1, 1); } replace(tr, content = import_prosemirror_model.Slice.empty) { const mapFrom = tr.steps.length, ranges = this.ranges; for (let i2 = 0; i2 < ranges.length; i2++) { const { $from, $to } = ranges[i2], mapping = tr.mapping.slice(mapFrom); tr.replace( mapping.map($from.pos), mapping.map($to.pos), i2 ? import_prosemirror_model.Slice.empty : content ); } const sel = import_prosemirror_state2.Selection.findFrom( tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1 ); if (sel) tr.setSelection(sel); } replaceWith(tr, node2) { this.replace(tr, new import_prosemirror_model.Slice(import_prosemirror_model.Fragment.from(node2), 0, 0)); } forEachCell(f2) { const table = this.$anchorCell.node(-1); const map2 = TableMap.get(table); const tableStart = this.$anchorCell.start(-1); const cells = map2.cellsInRect( map2.rectBetween( this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart ) ); for (let i2 = 0; i2 < cells.length; i2++) { f2(table.nodeAt(cells[i2]), tableStart + cells[i2]); } } isColSelection() { const anchorTop = this.$anchorCell.index(-1); const headTop = this.$headCell.index(-1); if (Math.min(anchorTop, headTop) > 0) return false; const anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan; const headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan; return Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount; } static colSelection($anchorCell, $headCell = $anchorCell) { const table = $anchorCell.node(-1); const map2 = TableMap.get(table); const tableStart = $anchorCell.start(-1); const anchorRect = map2.findCell($anchorCell.pos - tableStart); const headRect = map2.findCell($headCell.pos - tableStart); const doc2 = $anchorCell.node(0); if (anchorRect.top <= headRect.top) { if (anchorRect.top > 0) $anchorCell = doc2.resolve(tableStart + map2.map[anchorRect.left]); if (headRect.bottom < map2.height) $headCell = doc2.resolve( tableStart + map2.map[map2.width * (map2.height - 1) + headRect.right - 1] ); } else { if (headRect.top > 0) $headCell = doc2.resolve(tableStart + map2.map[headRect.left]); if (anchorRect.bottom < map2.height) $anchorCell = doc2.resolve( tableStart + map2.map[map2.width * (map2.height - 1) + anchorRect.right - 1] ); } return new CellSelection($anchorCell, $headCell); } isRowSelection() { const table = this.$anchorCell.node(-1); const map2 = TableMap.get(table); const tableStart = this.$anchorCell.start(-1); const anchorLeft = map2.colCount(this.$anchorCell.pos - tableStart); const headLeft = map2.colCount(this.$headCell.pos - tableStart); if (Math.min(anchorLeft, headLeft) > 0) return false; const anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan; const headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan; return Math.max(anchorRight, headRight) == map2.width; } eq(other) { return other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos; } static rowSelection($anchorCell, $headCell = $anchorCell) { const table = $anchorCell.node(-1); const map2 = TableMap.get(table); const tableStart = $anchorCell.start(-1); const anchorRect = map2.findCell($anchorCell.pos - tableStart); const headRect = map2.findCell($headCell.pos - tableStart); const doc2 = $anchorCell.node(0); if (anchorRect.left <= headRect.left) { if (anchorRect.left > 0) $anchorCell = doc2.resolve( tableStart + map2.map[anchorRect.top * map2.width] ); if (headRect.right < map2.width) $headCell = doc2.resolve( tableStart + map2.map[map2.width * (headRect.top + 1) - 1] ); } else { if (headRect.left > 0) $headCell = doc2.resolve(tableStart + map2.map[headRect.top * map2.width]); if (anchorRect.right < map2.width) $anchorCell = doc2.resolve( tableStart + map2.map[map2.width * (anchorRect.top + 1) - 1] ); } return new CellSelection($anchorCell, $headCell); } toJSON() { return { type: "cell", anchor: this.$anchorCell.pos, head: this.$headCell.pos }; } static fromJSON(doc2, json2) { return new CellSelection(doc2.resolve(json2.anchor), doc2.resolve(json2.head)); } static create(doc2, anchorCell, headCell = anchorCell) { return new CellSelection(doc2.resolve(anchorCell), doc2.resolve(headCell)); } getBookmark() { return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos); } }; CellSelection.prototype.visible = false; import_prosemirror_state2.Selection.jsonID("cell", CellSelection); var CellBookmark = class { constructor(anchor, head) { this.anchor = anchor; this.head = head; } map(mapping) { return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head)); } resolve(doc2) { const $anchorCell = doc2.resolve(this.anchor), $headCell = doc2.resolve(this.head); if ($anchorCell.parent.type.spec.tableRole == "row" && $headCell.parent.type.spec.tableRole == "row" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell); else return import_prosemirror_state2.Selection.near($headCell, 1); } }; function drawCellSelection(state) { if (!(state.selection instanceof CellSelection)) return null; const cells = []; state.selection.forEachCell((node2, pos) => { cells.push( import_prosemirror_view.Decoration.node(pos, pos + node2.nodeSize, { class: "selectedCell" }) ); }); return import_prosemirror_view.DecorationSet.create(state.doc, cells); } function isCellBoundarySelection({ $from, $to }) { if ($from.pos == $to.pos || $from.pos < $from.pos - 6) return false; let afterFrom = $from.pos; let beforeTo = $to.pos; let depth = $from.depth; for (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break; for (let d2 = $to.depth; d2 >= 0; d2--, beforeTo--) if ($to.before(d2 + 1) > $to.start(d2)) break; return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole); } function isTextSelectionAcrossCells({ $from, $to }) { let fromCellBoundaryNode; let toCellBoundaryNode; for (let i2 = $from.depth; i2 > 0; i2--) { const node2 = $from.node(i2); if (node2.type.spec.tableRole === "cell" || node2.type.spec.tableRole === "header_cell") { fromCellBoundaryNode = node2; break; } } for (let i2 = $to.depth; i2 > 0; i2--) { const node2 = $to.node(i2); if (node2.type.spec.tableRole === "cell" || node2.type.spec.tableRole === "header_cell") { toCellBoundaryNode = node2; break; } } return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0; } function normalizeSelection(state, tr, allowTableNodeSelection) { const sel = (tr || state).selection; const doc2 = (tr || state).doc; let normalize2; let role; if (sel instanceof import_prosemirror_state2.NodeSelection && (role = sel.node.type.spec.tableRole)) { if (role == "cell" || role == "header_cell") { normalize2 = CellSelection.create(doc2, sel.from); } else if (role == "row") { const $cell = doc2.resolve(sel.from + 1); normalize2 = CellSelection.rowSelection($cell, $cell); } else if (!allowTableNodeSelection) { const map2 = TableMap.get(sel.node); const start = sel.from + 1; const lastCell = start + map2.map[map2.width * map2.height - 1]; normalize2 = CellSelection.create(doc2, start + 1, lastCell); } } else if (sel instanceof import_prosemirror_state2.TextSelection && isCellBoundarySelection(sel)) { normalize2 = import_prosemirror_state2.TextSelection.create(doc2, sel.from); } else if (sel instanceof import_prosemirror_state2.TextSelection && isTextSelectionAcrossCells(sel)) { normalize2 = import_prosemirror_state2.TextSelection.create(doc2, sel.$from.start(), sel.$from.end()); } if (normalize2) (tr || (tr = state.tr)).setSelection(normalize2); return tr; } var import_prosemirror_state3 = require$$0$3; var fixTablesKey = new import_prosemirror_state3.PluginKey("fix-tables"); function changedDescendants$1(old, cur, offset, f2) { const oldSize = old.childCount, curSize = cur.childCount; outer: for (let i2 = 0, j2 = 0; i2 < curSize; i2++) { const child = cur.child(i2); for (let scan = j2, e2 = Math.min(oldSize, i2 + 3); scan < e2; scan++) { if (old.child(scan) == child) { j2 = scan + 1; offset += child.nodeSize; continue outer; } } f2(child, offset); if (j2 < oldSize && old.child(j2).sameMarkup(child)) changedDescendants$1(old.child(j2), child, offset + 1, f2); else child.nodesBetween(0, child.content.size, f2, offset + 1); offset += child.nodeSize; } } function fixTables(state, oldState) { let tr; const check2 = (node2, pos) => { if (node2.type.spec.tableRole == "table") tr = fixTable(state, node2, pos, tr); }; if (!oldState) state.doc.descendants(check2); else if (oldState.doc != state.doc) changedDescendants$1(oldState.doc, state.doc, 0, check2); return tr; } function fixTable(state, table, tablePos, tr) { const map2 = TableMap.get(table); if (!map2.problems) return tr; if (!tr) tr = state.tr; const mustAdd = []; for (let i2 = 0; i2 < map2.height; i2++) mustAdd.push(0); for (let i2 = 0; i2 < map2.problems.length; i2++) { const prob = map2.problems[i2]; if (prob.type == "collision") { const cell = table.nodeAt(prob.pos); if (!cell) continue; const attrs = cell.attrs; for (let j2 = 0; j2 < attrs.rowspan; j2++) mustAdd[prob.row + j2] += prob.n; tr.setNodeMarkup( tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n) ); } else if (prob.type == "missing") { mustAdd[prob.row] += prob.n; } else if (prob.type == "overlong_rowspan") { const cell = table.nodeAt(prob.pos); if (!cell) continue; tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, { ...cell.attrs, rowspan: cell.attrs.rowspan - prob.n }); } else if (prob.type == "colwidth mismatch") { const cell = table.nodeAt(prob.pos); if (!cell) continue; tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, { ...cell.attrs, colwidth: prob.colwidth }); } } let first, last2; for (let i2 = 0; i2 < mustAdd.length; i2++) if (mustAdd[i2]) { if (first == null) first = i2; last2 = i2; } for (let i2 = 0, pos = tablePos + 1; i2 < map2.height; i2++) { const row = table.child(i2); const end = pos + row.nodeSize; const add = mustAdd[i2]; if (add > 0) { let role = "cell"; if (row.firstChild) { role = row.firstChild.type.spec.tableRole; } const nodes2 = []; for (let j2 = 0; j2 < add; j2++) { const node2 = tableNodeTypes$1(state.schema)[role].createAndFill(); if (node2) nodes2.push(node2); } const side = (i2 == 0 || first == i2 - 1) && last2 == i2 ? pos + 1 : end - 1; tr.insert(tr.mapping.map(side), nodes2); } pos = end; } return tr.setMeta(fixTablesKey, { fixTables: true }); } var import_prosemirror_model3 = require$$1; var import_prosemirror_state4 = require$$0$3; var import_prosemirror_keymap = require$$3; var import_prosemirror_model2 = require$$1; var import_prosemirror_transform = require$$4; function pastedCells(slice2) { if (!slice2.size) return null; let { content, openStart, openEnd } = slice2; while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == "table")) { openStart--; openEnd--; content = content.child(0).content; } const first = content.child(0); const role = first.type.spec.tableRole; const schema2 = first.type.schema, rows = []; if (role == "row") { for (let i2 = 0; i2 < content.childCount; i2++) { let cells = content.child(i2).content; const left = i2 ? 0 : Math.max(0, openStart - 1); const right = i2 < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1); if (left || right) cells = fitSlice( tableNodeTypes$1(schema2).row, new import_prosemirror_model2.Slice(cells, left, right) ).content; rows.push(cells); } } else if (role == "cell" || role == "header_cell") { rows.push( openStart || openEnd ? fitSlice( tableNodeTypes$1(schema2).row, new import_prosemirror_model2.Slice(content, openStart, openEnd) ).content : content ); } else { return null; } return ensureRectangular(schema2, rows); } function ensureRectangular(schema2, rows) { const widths = []; for (let i2 = 0; i2 < rows.length; i2++) { const row = rows[i2]; for (let j2 = row.childCount - 1; j2 >= 0; j2--) { const { rowspan, colspan } = row.child(j2).attrs; for (let r2 = i2; r2 < i2 + rowspan; r2++) widths[r2] = (widths[r2] || 0) + colspan; } } let width = 0; for (let r2 = 0; r2 < widths.length; r2++) width = Math.max(width, widths[r2]); for (let r2 = 0; r2 < widths.length; r2++) { if (r2 >= rows.length) rows.push(import_prosemirror_model2.Fragment.empty); if (widths[r2] < width) { const empty2 = tableNodeTypes$1(schema2).cell.createAndFill(); const cells = []; for (let i2 = widths[r2]; i2 < width; i2++) { cells.push(empty2); } rows[r2] = rows[r2].append(import_prosemirror_model2.Fragment.from(cells)); } } return { height: rows.length, width, rows }; } function fitSlice(nodeType, slice2) { const node2 = nodeType.createAndFill(); const tr = new import_prosemirror_transform.Transform(node2).replace(0, node2.content.size, slice2); return tr.doc; } function clipCells({ width, height, rows }, newWidth, newHeight) { if (width != newWidth) { const added = []; const newRows = []; for (let row = 0; row < rows.length; row++) { const frag = rows[row], cells = []; for (let col = added[row] || 0, i2 = 0; col < newWidth; i2++) { let cell = frag.child(i2 % frag.childCount); if (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked( removeColSpan( cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth ), cell.content ); cells.push(cell); col += cell.attrs.colspan; for (let j2 = 1; j2 < cell.attrs.rowspan; j2++) added[row + j2] = (added[row + j2] || 0) + cell.attrs.colspan; } newRows.push(import_prosemirror_model2.Fragment.from(cells)); } rows = newRows; width = newWidth; } if (height != newHeight) { const newRows = []; for (let row = 0, i2 = 0; row < newHeight; row++, i2++) { const cells = [], source = rows[i2 % height]; for (let j2 = 0; j2 < source.childCount; j2++) { let cell = source.child(j2); if (row + cell.attrs.rowspan > newHeight) cell = cell.type.create( { ...cell.attrs, rowspan: Math.max(1, newHeight - cell.attrs.rowspan) }, cell.content ); cells.push(cell); } newRows.push(import_prosemirror_model2.Fragment.from(cells)); } rows = newRows; height = newHeight; } return { width, height, rows }; } function growTable(tr, map2, table, start, width, height, mapFrom) { const schema2 = tr.doc.type.schema; const types2 = tableNodeTypes$1(schema2); let empty2; let emptyHead; if (width > map2.width) { for (let row = 0, rowEnd = 0; row < map2.height; row++) { const rowNode = table.child(row); rowEnd += rowNode.nodeSize; const cells = []; let add; if (rowNode.lastChild == null || rowNode.lastChild.type == types2.cell) add = empty2 || (empty2 = types2.cell.createAndFill()); else add = emptyHead || (emptyHead = types2.header_cell.createAndFill()); for (let i2 = map2.width; i2 < width; i2++) cells.push(add); tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells); } } if (height > map2.height) { const cells = []; for (let i2 = 0, start2 = (map2.height - 1) * map2.width; i2 < Math.max(map2.width, width); i2++) { const header = i2 >= map2.width ? false : table.nodeAt(map2.map[start2 + i2]).type == types2.header_cell; cells.push( header ? emptyHead || (emptyHead = types2.header_cell.createAndFill()) : empty2 || (empty2 = types2.cell.createAndFill()) ); } const emptyRow = types2.row.create(null, import_prosemirror_model2.Fragment.from(cells)), rows = []; for (let i2 = map2.height; i2 < height; i2++) rows.push(emptyRow); tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows); } return !!(empty2 || emptyHead); } function isolateHorizontal(tr, map2, table, start, left, right, top2, mapFrom) { if (top2 == 0 || top2 == map2.height) return false; let found2 = false; for (let col = left; col < right; col++) { const index2 = top2 * map2.width + col, pos = map2.map[index2]; if (map2.map[index2 - map2.width] == pos) { found2 = true; const cell = table.nodeAt(pos); const { top: cellTop, left: cellLeft } = map2.findCell(pos); tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, { ...cell.attrs, rowspan: top2 - cellTop }); tr.insert( tr.mapping.slice(mapFrom).map(map2.positionAt(top2, cellLeft, table)), cell.type.createAndFill({ ...cell.attrs, rowspan: cellTop + cell.attrs.rowspan - top2 }) ); col += cell.attrs.colspan - 1; } } return found2; } function isolateVertical(tr, map2, table, start, top2, bottom2, left, mapFrom) { if (left == 0 || left == map2.width) return false; let found2 = false; for (let row = top2; row < bottom2; row++) { const index2 = row * map2.width + left, pos = map2.map[index2]; if (map2.map[index2 - 1] == pos) { found2 = true; const cell = table.nodeAt(pos); const cellLeft = map2.colCount(pos); const updatePos = tr.mapping.slice(mapFrom).map(pos + start); tr.setNodeMarkup( updatePos, null, removeColSpan( cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft) ) ); tr.insert( updatePos + cell.nodeSize, cell.type.createAndFill( removeColSpan(cell.attrs, 0, left - cellLeft) ) ); row += cell.attrs.rowspan - 1; } } return found2; } function insertCells(state, dispatch, tableStart, rect2, cells) { let table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc; if (!table) { throw new Error("No table found"); } let map2 = TableMap.get(table); const { top: top2, left } = rect2; const right = left + cells.width, bottom2 = top2 + cells.height; const tr = state.tr; let mapFrom = 0; function recomp() { table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc; if (!table) { throw new Error("No table found"); } map2 = TableMap.get(table); mapFrom = tr.mapping.maps.length; } if (growTable(tr, map2, table, tableStart, right, bottom2, mapFrom)) recomp(); if (isolateHorizontal(tr, map2, table, tableStart, left, right, top2, mapFrom)) recomp(); if (isolateHorizontal(tr, map2, table, tableStart, left, right, bottom2, mapFrom)) recomp(); if (isolateVertical(tr, map2, table, tableStart, top2, bottom2, left, mapFrom)) recomp(); if (isolateVertical(tr, map2, table, tableStart, top2, bottom2, right, mapFrom)) recomp(); for (let row = top2; row < bottom2; row++) { const from2 = map2.positionAt(row, left, table), to = map2.positionAt(row, right, table); tr.replace( tr.mapping.slice(mapFrom).map(from2 + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new import_prosemirror_model2.Slice(cells.rows[row - top2], 0, 0) ); } recomp(); tr.setSelection( new CellSelection( tr.doc.resolve(tableStart + map2.positionAt(top2, left, table)), tr.doc.resolve(tableStart + map2.positionAt(bottom2 - 1, right - 1, table)) ) ); dispatch(tr); } var handleKeyDown$1 = (0, import_prosemirror_keymap.keydownHandler)({ ArrowLeft: arrow$1("horiz", -1), ArrowRight: arrow$1("horiz", 1), ArrowUp: arrow$1("vert", -1), ArrowDown: arrow$1("vert", 1), "Shift-ArrowLeft": shiftArrow("horiz", -1), "Shift-ArrowRight": shiftArrow("horiz", 1), "Shift-ArrowUp": shiftArrow("vert", -1), "Shift-ArrowDown": shiftArrow("vert", 1), Backspace: deleteCellSelection, "Mod-Backspace": deleteCellSelection, Delete: deleteCellSelection, "Mod-Delete": deleteCellSelection }); function maybeSetSelection(state, dispatch, selection) { if (selection.eq(state.selection)) return false; if (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView()); return true; } function arrow$1(axis, dir) { return (state, dispatch, view) => { if (!view) return false; const sel = state.selection; if (sel instanceof CellSelection) { return maybeSetSelection( state, dispatch, import_prosemirror_state4.Selection.near(sel.$headCell, dir) ); } if (axis != "horiz" && !sel.empty) return false; const end = atEndOfCell(view, axis, dir); if (end == null) return false; if (axis == "horiz") { return maybeSetSelection( state, dispatch, import_prosemirror_state4.Selection.near(state.doc.resolve(sel.head + dir), dir) ); } else { const $cell = state.doc.resolve(end); const $next = nextCell($cell, axis, dir); let newSel; if ($next) newSel = import_prosemirror_state4.Selection.near($next, 1); else if (dir < 0) newSel = import_prosemirror_state4.Selection.near(state.doc.resolve($cell.before(-1)), -1); else newSel = import_prosemirror_state4.Selection.near(state.doc.resolve($cell.after(-1)), 1); return maybeSetSelection(state, dispatch, newSel); } }; } function shiftArrow(axis, dir) { return (state, dispatch, view) => { if (!view) return false; const sel = state.selection; let cellSel; if (sel instanceof CellSelection) { cellSel = sel; } else { const end = atEndOfCell(view, axis, dir); if (end == null) return false; cellSel = new CellSelection(state.doc.resolve(end)); } const $head = nextCell(cellSel.$headCell, axis, dir); if (!$head) return false; return maybeSetSelection( state, dispatch, new CellSelection(cellSel.$anchorCell, $head) ); }; } function deleteCellSelection(state, dispatch) { const sel = state.selection; if (!(sel instanceof CellSelection)) return false; if (dispatch) { const tr = state.tr; const baseContent = tableNodeTypes$1(state.schema).cell.createAndFill().content; sel.forEachCell((cell, pos) => { if (!cell.content.eq(baseContent)) tr.replace( tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new import_prosemirror_model3.Slice(baseContent, 0, 0) ); }); if (tr.docChanged) dispatch(tr); } return true; } function handleTripleClick(view, pos) { const doc2 = view.state.doc, $cell = cellAround(doc2.resolve(pos)); if (!$cell) return false; view.dispatch(view.state.tr.setSelection(new CellSelection($cell))); return true; } function handlePaste$1(view, _2, slice2) { if (!isInTable(view.state)) return false; let cells = pastedCells(slice2); const sel = view.state.selection; if (sel instanceof CellSelection) { if (!cells) cells = { width: 1, height: 1, rows: [ import_prosemirror_model3.Fragment.from( fitSlice(tableNodeTypes$1(view.state.schema).cell, slice2) ) ] }; const table = sel.$anchorCell.node(-1); const start = sel.$anchorCell.start(-1); const rect2 = TableMap.get(table).rectBetween( sel.$anchorCell.pos - start, sel.$headCell.pos - start ); cells = clipCells(cells, rect2.right - rect2.left, rect2.bottom - rect2.top); insertCells(view.state, view.dispatch, start, rect2, cells); return true; } else if (cells) { const $cell = selectionCell(view.state); const start = $cell.start(-1); insertCells( view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells ); return true; } else { return false; } } function handleMouseDown(view, startEvent) { var _a; if (startEvent.ctrlKey || startEvent.metaKey) return; const startDOMCell = domInCell(view, startEvent.target); let $anchor; if (startEvent.shiftKey && view.state.selection instanceof CellSelection) { setCellSelection(view.state.selection.$anchorCell, startEvent); startEvent.preventDefault(); } else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_a = cellUnderMouse(view, startEvent)) == null ? void 0 : _a.pos) != $anchor.pos) { setCellSelection($anchor, startEvent); startEvent.preventDefault(); } else if (!startDOMCell) { return; } function setCellSelection($anchor2, event) { let $head = cellUnderMouse(view, event); const starting = tableEditingKey.getState(view.state) == null; if (!$head || !inSameTable($anchor2, $head)) { if (starting) $head = $anchor2; else return; } const selection = new CellSelection($anchor2, $head); if (starting || !view.state.selection.eq(selection)) { const tr = view.state.tr.setSelection(selection); if (starting) tr.setMeta(tableEditingKey, $anchor2.pos); view.dispatch(tr); } } function stop() { view.root.removeEventListener("mouseup", stop); view.root.removeEventListener("dragstart", stop); view.root.removeEventListener("mousemove", move); if (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1)); } function move(_event) { const event = _event; const anchor = tableEditingKey.getState(view.state); let $anchor2; if (anchor != null) { $anchor2 = view.state.doc.resolve(anchor); } else if (domInCell(view, event.target) != startDOMCell) { $anchor2 = cellUnderMouse(view, startEvent); if (!$anchor2) return stop(); } if ($anchor2) setCellSelection($anchor2, event); } view.root.addEventListener("mouseup", stop); view.root.addEventListener("dragstart", stop); view.root.addEventListener("mousemove", move); } function atEndOfCell(view, axis, dir) { if (!(view.state.selection instanceof import_prosemirror_state4.TextSelection)) return null; const { $head } = view.state.selection; for (let d2 = $head.depth - 1; d2 >= 0; d2--) { const parent = $head.node(d2), index2 = dir < 0 ? $head.index(d2) : $head.indexAfter(d2); if (index2 != (dir < 0 ? 0 : parent.childCount)) return null; if (parent.type.spec.tableRole == "cell" || parent.type.spec.tableRole == "header_cell") { const cellPos = $head.before(d2); const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left"; return view.endOfTextblock(dirStr) ? cellPos : null; } } return null; } function domInCell(view, dom) { for (; dom && dom != view.dom; dom = dom.parentNode) { if (dom.nodeName == "TD" || dom.nodeName == "TH") { return dom; } } return null; } function cellUnderMouse(view, event) { const mousePos = view.posAtCoords({ left: event.clientX, top: event.clientY }); if (!mousePos) return null; return mousePos ? cellAround(view.state.doc.resolve(mousePos.pos)) : null; } var import_prosemirror_state5 = require$$0$3; var import_prosemirror_view2 = require$$2; var TableView = class { constructor(node2, cellMinWidth) { this.node = node2; this.cellMinWidth = cellMinWidth; this.dom = document.createElement("div"); this.dom.className = "tableWrapper"; this.table = this.dom.appendChild(document.createElement("table")); this.colgroup = this.table.appendChild(document.createElement("colgroup")); updateColumnsOnResize(node2, this.colgroup, this.table, cellMinWidth); this.contentDOM = this.table.appendChild(document.createElement("tbody")); } update(node2) { if (node2.type != this.node.type) return false; this.node = node2; updateColumnsOnResize(node2, this.colgroup, this.table, this.cellMinWidth); return true; } ignoreMutation(record) { return record.type == "attributes" && (record.target == this.table || this.colgroup.contains(record.target)); } }; function updateColumnsOnResize(node2, colgroup, table, cellMinWidth, overrideCol, overrideValue) { var _a; let totalWidth = 0; let fixedWidth = true; let nextDOM = colgroup.firstChild; const row = node2.firstChild; if (!row) return; for (let i2 = 0, col = 0; i2 < row.childCount; i2++) { const { colspan, colwidth } = row.child(i2).attrs; for (let j2 = 0; j2 < colspan; j2++, col++) { const hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j2]; const cssWidth = hasWidth ? hasWidth + "px" : ""; totalWidth += hasWidth || cellMinWidth; if (!hasWidth) fixedWidth = false; if (!nextDOM) { colgroup.appendChild(document.createElement("col")).style.width = cssWidth; } else { if (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth; nextDOM = nextDOM.nextSibling; } } } while (nextDOM) { const after = nextDOM.nextSibling; (_a = nextDOM.parentNode) == null ? void 0 : _a.removeChild(nextDOM); nextDOM = after; } if (fixedWidth) { table.style.width = totalWidth + "px"; table.style.minWidth = ""; } else { table.style.width = ""; table.style.minWidth = totalWidth + "px"; } } var columnResizingPluginKey = new import_prosemirror_state5.PluginKey( "tableColumnResizing" ); function columnResizing({ handleWidth = 5, cellMinWidth = 25, View = TableView, lastColumnResizable = true } = {}) { const plugin2 = new import_prosemirror_state5.Plugin({ key: columnResizingPluginKey, state: { init(_2, state) { plugin2.spec.props.nodeViews[tableNodeTypes$1(state.schema).table.name] = (node2, view) => new View(node2, cellMinWidth, view); return new ResizeState(-1, false); }, apply(tr, prev2) { return prev2.apply(tr); } }, props: { attributes: (state) => { const pluginState = columnResizingPluginKey.getState(state); return pluginState && pluginState.activeHandle > -1 ? { class: "resize-cursor" } : {}; }, handleDOMEvents: { mousemove: (view, event) => { handleMouseMove( view, event, handleWidth, cellMinWidth, lastColumnResizable ); }, mouseleave: (view) => { handleMouseLeave(view); }, mousedown: (view, event) => { handleMouseDown2(view, event, cellMinWidth); } }, decorations: (state) => { const pluginState = columnResizingPluginKey.getState(state); if (pluginState && pluginState.activeHandle > -1) { return handleDecorations(state, pluginState.activeHandle); } }, nodeViews: {} } }); return plugin2; } var ResizeState = class { constructor(activeHandle, dragging) { this.activeHandle = activeHandle; this.dragging = dragging; } apply(tr) { const state = this; const action = tr.getMeta(columnResizingPluginKey); if (action && action.setHandle != null) return new ResizeState(action.setHandle, false); if (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging); if (state.activeHandle > -1 && tr.docChanged) { let handle = tr.mapping.map(state.activeHandle, -1); if (!pointsAtCell(tr.doc.resolve(handle))) { handle = -1; } return new ResizeState(handle, state.dragging); } return state; } }; function handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable) { const pluginState = columnResizingPluginKey.getState(view.state); if (!pluginState) return; if (!pluginState.dragging) { const target2 = domCellAround(event.target); let cell = -1; if (target2) { const { left, right } = target2.getBoundingClientRect(); if (event.clientX - left <= handleWidth) cell = edgeCell(view, event, "left"); else if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, "right"); } if (cell != pluginState.activeHandle) { if (!lastColumnResizable && cell !== -1) { const $cell = view.state.doc.resolve(cell); const table = $cell.node(-1); const map2 = TableMap.get(table); const tableStart = $cell.start(-1); const col = map2.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1; if (col == map2.width - 1) { return; } } updateHandle(view, cell); } } } function handleMouseLeave(view) { const pluginState = columnResizingPluginKey.getState(view.state); if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1); } function handleMouseDown2(view, event, cellMinWidth) { const pluginState = columnResizingPluginKey.getState(view.state); if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false; const cell = view.state.doc.nodeAt(pluginState.activeHandle); const width = currentColWidth(view, pluginState.activeHandle, cell.attrs); view.dispatch( view.state.tr.setMeta(columnResizingPluginKey, { setDragging: { startX: event.clientX, startWidth: width } }) ); function finish(event2) { window.removeEventListener("mouseup", finish); window.removeEventListener("mousemove", move); const pluginState2 = columnResizingPluginKey.getState(view.state); if (pluginState2 == null ? void 0 : pluginState2.dragging) { updateColumnWidth( view, pluginState2.activeHandle, draggedWidth(pluginState2.dragging, event2, cellMinWidth) ); view.dispatch( view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }) ); } } function move(event2) { if (!event2.which) return finish(event2); const pluginState2 = columnResizingPluginKey.getState(view.state); if (!pluginState2) return; if (pluginState2.dragging) { const dragged = draggedWidth(pluginState2.dragging, event2, cellMinWidth); displayColumnWidth(view, pluginState2.activeHandle, dragged, cellMinWidth); } } window.addEventListener("mouseup", finish); window.addEventListener("mousemove", move); event.preventDefault(); return true; } function currentColWidth(view, cellPos, { colspan, colwidth }) { const width = colwidth && colwidth[colwidth.length - 1]; if (width) return width; const dom = view.domAtPos(cellPos); const node2 = dom.node.childNodes[dom.offset]; let domWidth = node2.offsetWidth, parts = colspan; if (colwidth) { for (let i2 = 0; i2 < colspan; i2++) if (colwidth[i2]) { domWidth -= colwidth[i2]; parts--; } } return domWidth / parts; } function domCellAround(target2) { while (target2 && target2.nodeName != "TD" && target2.nodeName != "TH") target2 = target2.classList && target2.classList.contains("ProseMirror") ? null : target2.parentNode; return target2; } function edgeCell(view, event, side) { const found2 = view.posAtCoords({ left: event.clientX, top: event.clientY }); if (!found2) return -1; const { pos } = found2; const $cell = cellAround(view.state.doc.resolve(pos)); if (!$cell) return -1; if (side == "right") return $cell.pos; const map2 = TableMap.get($cell.node(-1)), start = $cell.start(-1); const index2 = map2.map.indexOf($cell.pos - start); return index2 % map2.width == 0 ? -1 : start + map2.map[index2 - 1]; } function draggedWidth(dragging, event, cellMinWidth) { const offset = event.clientX - dragging.startX; return Math.max(cellMinWidth, dragging.startWidth + offset); } function updateHandle(view, value) { view.dispatch( view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }) ); } function updateColumnWidth(view, cell, width) { const $cell = view.state.doc.resolve(cell); const table = $cell.node(-1), map2 = TableMap.get(table), start = $cell.start(-1); const col = map2.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1; const tr = view.state.tr; for (let row = 0; row < map2.height; row++) { const mapIndex = row * map2.width + col; if (row && map2.map[mapIndex] == map2.map[mapIndex - map2.width]) continue; const pos = map2.map[mapIndex]; const attrs = table.nodeAt(pos).attrs; const index2 = attrs.colspan == 1 ? 0 : col - map2.colCount(pos); if (attrs.colwidth && attrs.colwidth[index2] == width) continue; const colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan); colwidth[index2] = width; tr.setNodeMarkup(start + pos, null, { ...attrs, colwidth }); } if (tr.docChanged) view.dispatch(tr); } function displayColumnWidth(view, cell, width, cellMinWidth) { const $cell = view.state.doc.resolve(cell); const table = $cell.node(-1), start = $cell.start(-1); const col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1; let dom = view.domAtPos($cell.start(-1)).node; while (dom && dom.nodeName != "TABLE") { dom = dom.parentNode; } if (!dom) return; updateColumnsOnResize( table, dom.firstChild, dom, cellMinWidth, col, width ); } function zeroes(n2) { return Array(n2).fill(0); } function handleDecorations(state, cell) { const decorations = []; const $cell = state.doc.resolve(cell); const table = $cell.node(-1); if (!table) { return import_prosemirror_view2.DecorationSet.empty; } const map2 = TableMap.get(table); const start = $cell.start(-1); const col = map2.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan; for (let row = 0; row < map2.height; row++) { const index2 = col + row * map2.width - 1; if ((col == map2.width || map2.map[index2] != map2.map[index2 + 1]) && (row == 0 || map2.map[index2 - 1] != map2.map[index2 - 1 - map2.width])) { const cellPos = map2.map[index2]; const pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1; const dom = document.createElement("div"); dom.className = "column-resize-handle"; decorations.push(import_prosemirror_view2.Decoration.widget(pos, dom)); } } return import_prosemirror_view2.DecorationSet.create(state.doc, decorations); } var import_prosemirror_model4 = require$$1; var import_prosemirror_state6 = require$$0$3; function selectedRect$1(state) { const sel = state.selection; const $pos = selectionCell(state); const table = $pos.node(-1); const tableStart = $pos.start(-1); const map2 = TableMap.get(table); const rect2 = sel instanceof CellSelection ? map2.rectBetween( sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart ) : map2.findCell($pos.pos - tableStart); return { ...rect2, tableStart, map: map2, table }; } function addColumn(tr, { map: map2, tableStart, table }, col) { let refColumn = col > 0 ? -1 : 0; if (columnIsHeader(map2, table, col + refColumn)) { refColumn = col == 0 || col == map2.width ? null : 0; } for (let row = 0; row < map2.height; row++) { const index2 = row * map2.width + col; if (col > 0 && col < map2.width && map2.map[index2 - 1] == map2.map[index2]) { const pos = map2.map[index2]; const cell = table.nodeAt(pos); tr.setNodeMarkup( tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map2.colCount(pos)) ); row += cell.attrs.rowspan - 1; } else { const type2 = refColumn == null ? tableNodeTypes$1(table.type.schema).cell : table.nodeAt(map2.map[index2 + refColumn]).type; const pos = map2.positionAt(row, col, table); tr.insert(tr.mapping.map(tableStart + pos), type2.createAndFill()); } } return tr; } function addColumnBefore(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect2 = selectedRect$1(state); dispatch(addColumn(state.tr, rect2, rect2.left)); } return true; } function addColumnAfter(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect2 = selectedRect$1(state); dispatch(addColumn(state.tr, rect2, rect2.right)); } return true; } function removeColumn(tr, { map: map2, table, tableStart }, col) { const mapStart = tr.mapping.maps.length; for (let row = 0; row < map2.height; ) { const index2 = row * map2.width + col; const pos = map2.map[index2]; const cell = table.nodeAt(pos); const attrs = cell.attrs; if (col > 0 && map2.map[index2 - 1] == pos || col < map2.width - 1 && map2.map[index2 + 1] == pos) { tr.setNodeMarkup( tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map2.colCount(pos)) ); } else { const start = tr.mapping.slice(mapStart).map(tableStart + pos); tr.delete(start, start + cell.nodeSize); } row += attrs.rowspan; } } function deleteColumn(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect2 = selectedRect$1(state); const tr = state.tr; if (rect2.left == 0 && rect2.right == rect2.map.width) return false; for (let i2 = rect2.right - 1; ; i2--) { removeColumn(tr, rect2, i2); if (i2 == rect2.left) break; const table = rect2.tableStart ? tr.doc.nodeAt(rect2.tableStart - 1) : tr.doc; if (!table) { throw RangeError("No table found"); } rect2.table = table; rect2.map = TableMap.get(table); } dispatch(tr); } return true; } function rowIsHeader(map2, table, row) { var _a; const headerCell = tableNodeTypes$1(table.type.schema).header_cell; for (let col = 0; col < map2.width; col++) if (((_a = table.nodeAt(map2.map[col + row * map2.width])) == null ? void 0 : _a.type) != headerCell) return false; return true; } function addRow(tr, { map: map2, tableStart, table }, row) { var _a; let rowPos = tableStart; for (let i2 = 0; i2 < row; i2++) rowPos += table.child(i2).nodeSize; const cells = []; let refRow = row > 0 ? -1 : 0; if (rowIsHeader(map2, table, row + refRow)) refRow = row == 0 || row == map2.height ? null : 0; for (let col = 0, index2 = map2.width * row; col < map2.width; col++, index2++) { if (row > 0 && row < map2.height && map2.map[index2] == map2.map[index2 - map2.width]) { const pos = map2.map[index2]; const attrs = table.nodeAt(pos).attrs; tr.setNodeMarkup(tableStart + pos, null, { ...attrs, rowspan: attrs.rowspan + 1 }); col += attrs.colspan - 1; } else { const type2 = refRow == null ? tableNodeTypes$1(table.type.schema).cell : (_a = table.nodeAt(map2.map[index2 + refRow * map2.width])) == null ? void 0 : _a.type; const node2 = type2 == null ? void 0 : type2.createAndFill(); if (node2) cells.push(node2); } } tr.insert(rowPos, tableNodeTypes$1(table.type.schema).row.create(null, cells)); return tr; } function addRowBefore(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect2 = selectedRect$1(state); dispatch(addRow(state.tr, rect2, rect2.top)); } return true; } function addRowAfter(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect2 = selectedRect$1(state); dispatch(addRow(state.tr, rect2, rect2.bottom)); } return true; } function removeRow(tr, { map: map2, table, tableStart }, row) { let rowPos = 0; for (let i2 = 0; i2 < row; i2++) rowPos += table.child(i2).nodeSize; const nextRow2 = rowPos + table.child(row).nodeSize; const mapFrom = tr.mapping.maps.length; tr.delete(rowPos + tableStart, nextRow2 + tableStart); for (let col = 0, index2 = row * map2.width; col < map2.width; col++, index2++) { const pos = map2.map[index2]; if (row > 0 && pos == map2.map[index2 - map2.width]) { const attrs = table.nodeAt(pos).attrs; tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, { ...attrs, rowspan: attrs.rowspan - 1 }); col += attrs.colspan - 1; } else if (row < map2.width && pos == map2.map[index2 + map2.width]) { const cell = table.nodeAt(pos); const attrs = cell.attrs; const copy2 = cell.type.create( { ...attrs, rowspan: cell.attrs.rowspan - 1 }, cell.content ); const newPos = map2.positionAt(row + 1, col, table); tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy2); col += attrs.colspan - 1; } } } function deleteRow(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect2 = selectedRect$1(state), tr = state.tr; if (rect2.top == 0 && rect2.bottom == rect2.map.height) return false; for (let i2 = rect2.bottom - 1; ; i2--) { removeRow(tr, rect2, i2); if (i2 == rect2.top) break; const table = rect2.tableStart ? tr.doc.nodeAt(rect2.tableStart - 1) : tr.doc; if (!table) { throw RangeError("No table found"); } rect2.table = table; rect2.map = TableMap.get(rect2.table); } dispatch(tr); } return true; } function isEmpty(cell) { const c = cell.content; return c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0; } function cellsOverlapRectangle({ width, height, map: map2 }, rect2) { let indexTop = rect2.top * width + rect2.left, indexLeft = indexTop; let indexBottom = (rect2.bottom - 1) * width + rect2.left, indexRight = indexTop + (rect2.right - rect2.left - 1); for (let i2 = rect2.top; i2 < rect2.bottom; i2++) { if (rect2.left > 0 && map2[indexLeft] == map2[indexLeft - 1] || rect2.right < width && map2[indexRight] == map2[indexRight + 1]) return true; indexLeft += width; indexRight += width; } for (let i2 = rect2.left; i2 < rect2.right; i2++) { if (rect2.top > 0 && map2[indexTop] == map2[indexTop - width] || rect2.bottom < height && map2[indexBottom] == map2[indexBottom + width]) return true; indexTop++; indexBottom++; } return false; } function mergeCells(state, dispatch) { const sel = state.selection; if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false; const rect2 = selectedRect$1(state), { map: map2 } = rect2; if (cellsOverlapRectangle(map2, rect2)) return false; if (dispatch) { const tr = state.tr; const seen = {}; let content = import_prosemirror_model4.Fragment.empty; let mergedPos; let mergedCell; for (let row = rect2.top; row < rect2.bottom; row++) { for (let col = rect2.left; col < rect2.right; col++) { const cellPos = map2.map[row * map2.width + col]; const cell = rect2.table.nodeAt(cellPos); if (seen[cellPos] || !cell) continue; seen[cellPos] = true; if (mergedPos == null) { mergedPos = cellPos; mergedCell = cell; } else { if (!isEmpty(cell)) content = content.append(cell.content); const mapped = tr.mapping.map(cellPos + rect2.tableStart); tr.delete(mapped, mapped + cell.nodeSize); } } } if (mergedPos == null || mergedCell == null) { return true; } tr.setNodeMarkup(mergedPos + rect2.tableStart, null, { ...addColSpan( mergedCell.attrs, mergedCell.attrs.colspan, rect2.right - rect2.left - mergedCell.attrs.colspan ), rowspan: rect2.bottom - rect2.top }); if (content.size) { const end = mergedPos + 1 + mergedCell.content.size; const start = isEmpty(mergedCell) ? mergedPos + 1 : end; tr.replaceWith(start + rect2.tableStart, end + rect2.tableStart, content); } tr.setSelection( new CellSelection(tr.doc.resolve(mergedPos + rect2.tableStart)) ); dispatch(tr); } return true; } function splitCell(state, dispatch) { const nodeTypes = tableNodeTypes$1(state.schema); return splitCellWithType(({ node: node2 }) => { return nodeTypes[node2.type.spec.tableRole]; })(state, dispatch); } function splitCellWithType(getCellType) { return (state, dispatch) => { var _a; const sel = state.selection; let cellNode; let cellPos; if (!(sel instanceof CellSelection)) { cellNode = cellWrapping(sel.$from); if (!cellNode) return false; cellPos = (_a = cellAround(sel.$from)) == null ? void 0 : _a.pos; } else { if (sel.$anchorCell.pos != sel.$headCell.pos) return false; cellNode = sel.$anchorCell.nodeAfter; cellPos = sel.$anchorCell.pos; } if (cellNode == null || cellPos == null) { return false; } if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) { return false; } if (dispatch) { let baseAttrs = cellNode.attrs; const attrs = []; const colwidth = baseAttrs.colwidth; if (baseAttrs.rowspan > 1) baseAttrs = { ...baseAttrs, rowspan: 1 }; if (baseAttrs.colspan > 1) baseAttrs = { ...baseAttrs, colspan: 1 }; const rect2 = selectedRect$1(state), tr = state.tr; for (let i2 = 0; i2 < rect2.right - rect2.left; i2++) attrs.push( colwidth ? { ...baseAttrs, colwidth: colwidth && colwidth[i2] ? [colwidth[i2]] : null } : baseAttrs ); let lastCell; for (let row = rect2.top; row < rect2.bottom; row++) { let pos = rect2.map.positionAt(row, rect2.left, rect2.table); if (row == rect2.top) pos += cellNode.nodeSize; for (let col = rect2.left, i2 = 0; col < rect2.right; col++, i2++) { if (col == rect2.left && row == rect2.top) continue; tr.insert( lastCell = tr.mapping.map(pos + rect2.tableStart, 1), getCellType({ node: cellNode, row, col }).createAndFill(attrs[i2]) ); } } tr.setNodeMarkup( cellPos, getCellType({ node: cellNode, row: rect2.top, col: rect2.left }), attrs[0] ); if (sel instanceof CellSelection) tr.setSelection( new CellSelection( tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0 ) ); dispatch(tr); } return true; }; } function setCellAttr(name, value) { return function(state, dispatch) { if (!isInTable(state)) return false; const $cell = selectionCell(state); if ($cell.nodeAfter.attrs[name] === value) return false; if (dispatch) { const tr = state.tr; if (state.selection instanceof CellSelection) state.selection.forEachCell((node2, pos) => { if (node2.attrs[name] !== value) tr.setNodeMarkup(pos, null, { ...node2.attrs, [name]: value }); }); else tr.setNodeMarkup($cell.pos, null, { ...$cell.nodeAfter.attrs, [name]: value }); dispatch(tr); } return true; }; } function deprecated_toggleHeader(type2) { return function(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const types2 = tableNodeTypes$1(state.schema); const rect2 = selectedRect$1(state), tr = state.tr; const cells = rect2.map.cellsInRect( type2 == "column" ? { left: rect2.left, top: 0, right: rect2.right, bottom: rect2.map.height } : type2 == "row" ? { left: 0, top: rect2.top, right: rect2.map.width, bottom: rect2.bottom } : rect2 ); const nodes2 = cells.map((pos) => rect2.table.nodeAt(pos)); for (let i2 = 0; i2 < cells.length; i2++) if (nodes2[i2].type == types2.header_cell) tr.setNodeMarkup( rect2.tableStart + cells[i2], types2.cell, nodes2[i2].attrs ); if (tr.steps.length == 0) for (let i2 = 0; i2 < cells.length; i2++) tr.setNodeMarkup( rect2.tableStart + cells[i2], types2.header_cell, nodes2[i2].attrs ); dispatch(tr); } return true; }; } function isHeaderEnabledByType(type2, rect2, types2) { const cellPositions = rect2.map.cellsInRect({ left: 0, top: 0, right: type2 == "row" ? rect2.map.width : 1, bottom: type2 == "column" ? rect2.map.height : 1 }); for (let i2 = 0; i2 < cellPositions.length; i2++) { const cell = rect2.table.nodeAt(cellPositions[i2]); if (cell && cell.type !== types2.header_cell) { return false; } } return true; } function toggleHeader(type2, options) { options = options || { useDeprecatedLogic: false }; if (options.useDeprecatedLogic) return deprecated_toggleHeader(type2); return function(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const types2 = tableNodeTypes$1(state.schema); const rect2 = selectedRect$1(state), tr = state.tr; const isHeaderRowEnabled = isHeaderEnabledByType("row", rect2, types2); const isHeaderColumnEnabled = isHeaderEnabledByType( "column", rect2, types2 ); const isHeaderEnabled = type2 === "column" ? isHeaderRowEnabled : type2 === "row" ? isHeaderColumnEnabled : false; const selectionStartsAt = isHeaderEnabled ? 1 : 0; const cellsRect = type2 == "column" ? { left: 0, top: selectionStartsAt, right: 1, bottom: rect2.map.height } : type2 == "row" ? { left: selectionStartsAt, top: 0, right: rect2.map.width, bottom: 1 } : rect2; const newType = type2 == "column" ? isHeaderColumnEnabled ? types2.cell : types2.header_cell : type2 == "row" ? isHeaderRowEnabled ? types2.cell : types2.header_cell : types2.cell; rect2.map.cellsInRect(cellsRect).forEach((relativeCellPos) => { const cellPos = relativeCellPos + rect2.tableStart; const cell = tr.doc.nodeAt(cellPos); if (cell) { tr.setNodeMarkup(cellPos, newType, cell.attrs); } }); dispatch(tr); } return true; }; } var toggleHeaderRow = toggleHeader("row", { useDeprecatedLogic: true }); var toggleHeaderColumn = toggleHeader("column", { useDeprecatedLogic: true }); var toggleHeaderCell = toggleHeader("cell", { useDeprecatedLogic: true }); function findNextCell($cell, dir) { if (dir < 0) { const before = $cell.nodeBefore; if (before) return $cell.pos - before.nodeSize; for (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) { const rowNode = $cell.node(-1).child(row); const lastChild = rowNode.lastChild; if (lastChild) { return rowEnd - 1 - lastChild.nodeSize; } rowEnd -= rowNode.nodeSize; } } else { if ($cell.index() < $cell.parent.childCount - 1) { return $cell.pos + $cell.nodeAfter.nodeSize; } const table = $cell.node(-1); for (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) { const rowNode = table.child(row); if (rowNode.childCount) return rowStart + 1; rowStart += rowNode.nodeSize; } } return null; } function goToNextCell(direction) { return function(state, dispatch) { if (!isInTable(state)) return false; const cell = findNextCell(selectionCell(state), direction); if (cell == null) return false; if (dispatch) { const $cell = state.doc.resolve(cell); dispatch( state.tr.setSelection(import_prosemirror_state6.TextSelection.between($cell, moveCellForward($cell))).scrollIntoView() ); } return true; }; } function deleteTable$1(state, dispatch) { const $pos = state.selection.$anchor; for (let d2 = $pos.depth; d2 > 0; d2--) { const node2 = $pos.node(d2); if (node2.type.spec.tableRole == "table") { if (dispatch) dispatch( state.tr.delete($pos.before(d2), $pos.after(d2)).scrollIntoView() ); return true; } } return false; } function tableEditing({ allowTableNodeSelection = false } = {}) { return new import_prosemirror_state7.Plugin({ key: tableEditingKey, state: { init() { return null; }, apply(tr, cur) { const set2 = tr.getMeta(tableEditingKey); if (set2 != null) return set2 == -1 ? null : set2; if (cur == null || !tr.docChanged) return cur; const { deleted, pos } = tr.mapping.mapResult(cur); return deleted ? null : pos; } }, props: { decorations: drawCellSelection, handleDOMEvents: { mousedown: handleMouseDown }, createSelectionBetween(view) { return tableEditingKey.getState(view.state) != null ? view.state.selection : null; }, handleTripleClick, handleKeyDown: handleKeyDown$1, handlePaste: handlePaste$1 }, appendTransaction(_2, oldState, state) { return normalizeSelection( state, fixTables(state, oldState), allowTableNodeSelection ); } }); } Object.defineProperty(dist$3, "__esModule", { value: true }); var prosemirrorState = require$$0$3; var prosemirrorModel = require$$1; var prosemirrorTables = dist; var removeParentNodeOfType = function removeParentNodeOfType2(nodeType) { return function(tr) { var parent = findParentNodeOfType(nodeType)(tr.selection); if (parent) { return removeNodeAtPos(parent.pos)(tr); } return tr; }; }; var replaceParentNodeOfType = function replaceParentNodeOfType2(nodeType, content) { return function(tr) { if (!Array.isArray(nodeType)) { nodeType = [nodeType]; } for (var i2 = 0, count = nodeType.length; i2 < count; i2++) { var parent = findParentNodeOfType(nodeType[i2])(tr.selection); if (parent) { var newTr = replaceNodeAtPos(parent.pos, content)(tr); if (newTr !== tr) { return newTr; } } } return tr; }; }; var removeSelectedNode = function removeSelectedNode2(tr) { if (isNodeSelection(tr.selection)) { var from2 = tr.selection.$from.pos; var to = tr.selection.$to.pos; return cloneTr(tr.delete(from2, to)); } return tr; }; var replaceSelectedNode = function replaceSelectedNode2(content) { return function(tr) { if (isNodeSelection(tr.selection)) { var _tr$selection = tr.selection, $from = _tr$selection.$from, $to = _tr$selection.$to; if (content instanceof prosemirrorModel.Fragment && $from.parent.canReplace($from.index(), $from.indexAfter(), content) || $from.parent.canReplaceWith($from.index(), $from.indexAfter(), content.type)) { return cloneTr(tr.replaceWith($from.pos, $to.pos, content).setSelection(new prosemirrorState.NodeSelection(tr.doc.resolve($from.pos)))); } } return tr; }; }; var setTextSelection = function setTextSelection2(position2) { var dir = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; return function(tr) { var nextSelection = prosemirrorState.Selection.findFrom(tr.doc.resolve(position2), dir, true); if (nextSelection) { return tr.setSelection(nextSelection); } return tr; }; }; var isSelectableNode = function isSelectableNode2(node2) { return node2.type && node2.type.spec.selectable; }; var shouldSelectNode = function shouldSelectNode2(node2) { return isSelectableNode(node2) && node2.type.isLeaf; }; var setSelection = function setSelection2(node2, pos, tr) { if (shouldSelectNode(node2)) { return tr.setSelection(new prosemirrorState.NodeSelection(tr.doc.resolve(pos))); } return setTextSelection(pos)(tr); }; var safeInsert = function safeInsert2(content, position2, tryToReplace) { return function(tr) { var hasPosition = typeof position2 === "number"; var $from = tr.selection.$from; var $insertPos = hasPosition ? tr.doc.resolve(position2) : isNodeSelection(tr.selection) ? tr.doc.resolve($from.pos + 1) : $from; var parent = $insertPos.parent; if (isNodeSelection(tr.selection) && tryToReplace) { var oldTr = tr; tr = replaceSelectedNode(content)(tr); if (oldTr !== tr) { return tr; } } if (isEmptyParagraph(parent)) { var _oldTr = tr; tr = replaceParentNodeOfType(parent.type, content)(tr); if (_oldTr !== tr) { var pos = isSelectableNode(content) ? $insertPos.before($insertPos.depth) : $insertPos.pos; return setSelection(content, pos, tr); } } if (canInsert($insertPos, content)) { tr.insert($insertPos.pos, content); var _pos = hasPosition ? $insertPos.pos : isSelectableNode(content) ? tr.selection.$anchor.pos - 1 : tr.selection.$anchor.pos; return cloneTr(setSelection(content, _pos, tr)); } for (var i2 = $insertPos.depth; i2 > 0; i2--) { var _pos2 = $insertPos.after(i2); var $pos = tr.doc.resolve(_pos2); if (canInsert($pos, content)) { tr.insert(_pos2, content); return cloneTr(setSelection(content, _pos2, tr)); } } return tr; }; }; var setParentNodeMarkup = function setParentNodeMarkup2(nodeType, type2, attrs, marks) { return function(tr) { var parent = findParentNodeOfType(nodeType)(tr.selection); if (parent) { return cloneTr(tr.setNodeMarkup(parent.pos, type2, Object.assign({}, parent.node.attrs, attrs), marks)); } return tr; }; }; var selectParentNodeOfType = function selectParentNodeOfType2(nodeType) { return function(tr) { if (!isNodeSelection(tr.selection)) { var parent = findParentNodeOfType(nodeType)(tr.selection); if (parent) { return cloneTr(tr.setSelection(prosemirrorState.NodeSelection.create(tr.doc, parent.pos))); } } return tr; }; }; var removeNodeBefore = function removeNodeBefore2(tr) { var position2 = findPositionOfNodeBefore(tr.selection); if (typeof position2 === "number") { return removeNodeAtPos(position2)(tr); } return tr; }; var isNodeSelection = function isNodeSelection2(selection) { return selection instanceof prosemirrorState.NodeSelection; }; var equalNodeType = function equalNodeType2(nodeType, node2) { return Array.isArray(nodeType) && nodeType.indexOf(node2.type) > -1 || node2.type === nodeType; }; var cloneTr = function cloneTr2(tr) { return Object.assign(Object.create(tr), tr).setTime(Date.now()); }; var replaceNodeAtPos = function replaceNodeAtPos2(position2, content) { return function(tr) { var node2 = tr.doc.nodeAt(position2); var $pos = tr.doc.resolve(position2); if (canReplace($pos, content)) { tr = tr.replaceWith(position2, position2 + node2.nodeSize, content); var start = tr.selection.$from.pos - 1; tr = setTextSelection(Math.max(start, 0), -1)(tr); tr = setTextSelection(tr.selection.$from.start())(tr); return cloneTr(tr); } return tr; }; }; var canReplace = function canReplace2($pos, content) { var node2 = $pos.node($pos.depth); return node2 && node2.type.validContent(content instanceof prosemirrorModel.Fragment ? content : prosemirrorModel.Fragment.from(content)); }; var removeNodeAtPos = function removeNodeAtPos2(position2) { return function(tr) { var node2 = tr.doc.nodeAt(position2); return cloneTr(tr.delete(position2, position2 + node2.nodeSize)); }; }; var tableNodeTypes = function tableNodeTypes2(schema2) { if (schema2.cached.tableNodeTypes) { return schema2.cached.tableNodeTypes; } var roles = {}; Object.keys(schema2.nodes).forEach(function(type2) { var nodeType = schema2.nodes[type2]; if (nodeType.spec.tableRole) { roles[nodeType.spec.tableRole] = nodeType; } }); schema2.cached.tableNodeTypes = roles; return roles; }; var canInsert = function canInsert2($pos, content) { var index2 = $pos.index(); if (content instanceof prosemirrorModel.Fragment) { return $pos.parent.canReplace(index2, index2, content); } else if (content instanceof prosemirrorModel.Node) { return $pos.parent.canReplaceWith(index2, index2, content.type); } return false; }; var isEmptyParagraph = function isEmptyParagraph2(node2) { return !node2 || node2.type.name === "paragraph" && node2.nodeSize === 2; }; var findTableClosestToPos = function findTableClosestToPos2($pos) { var predicate = function predicate2(node2) { return node2.type.spec.tableRole && /table/i.test(node2.type.spec.tableRole); }; return findParentNodeClosestToPos($pos, predicate); }; var createCell = function createCell2(cellType) { var cellContent = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; if (cellContent) { return cellType.createChecked(null, cellContent); } return cellType.createAndFill(); }; var isRectSelected = function isRectSelected2(rect2) { return function(selection) { var map2 = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1)); var start = selection.$anchorCell.start(-1); var cells = map2.cellsInRect(rect2); var selectedCells = map2.cellsInRect(map2.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start)); for (var i2 = 0, count = cells.length; i2 < count; i2++) { if (selectedCells.indexOf(cells[i2]) === -1) { return false; } } return true; }; }; var transpose = function transpose2(array) { return array[0].map(function(_2, i2) { return array.map(function(column2) { return column2[i2]; }); }); }; var convertTableNodeToArrayOfRows = function convertTableNodeToArrayOfRows2(tableNode2) { var map2 = prosemirrorTables.TableMap.get(tableNode2); var rows = []; for (var rowIndex = 0; rowIndex < map2.height; rowIndex++) { var rowCells = []; var seen = {}; for (var colIndex = 0; colIndex < map2.width; colIndex++) { var cellPos = map2.map[rowIndex * map2.width + colIndex]; var cell = tableNode2.nodeAt(cellPos); var rect2 = map2.findCell(cellPos); if (seen[cellPos] || rect2.top !== rowIndex) { rowCells.push(null); continue; } seen[cellPos] = true; rowCells.push(cell); } rows.push(rowCells); } return rows; }; var convertArrayOfRowsToTableNode = function convertArrayOfRowsToTableNode2(tableNode2, arrayOfNodes) { var rowsPM = []; var map2 = prosemirrorTables.TableMap.get(tableNode2); for (var rowIndex = 0; rowIndex < map2.height; rowIndex++) { var row = tableNode2.child(rowIndex); var rowCells = []; for (var colIndex = 0; colIndex < map2.width; colIndex++) { if (!arrayOfNodes[rowIndex][colIndex]) { continue; } var cellPos = map2.map[rowIndex * map2.width + colIndex]; var cell = arrayOfNodes[rowIndex][colIndex]; var oldCell = tableNode2.nodeAt(cellPos); var newCell = oldCell.type.createChecked(Object.assign({}, cell.attrs), cell.content, cell.marks); rowCells.push(newCell); } rowsPM.push(row.type.createChecked(row.attrs, rowCells, row.marks)); } var newTable = tableNode2.type.createChecked(tableNode2.attrs, rowsPM, tableNode2.marks); return newTable; }; var moveTableColumn = function moveTableColumn2(table, indexesOrigin, indexesTarget, direction) { var rows = transpose(convertTableNodeToArrayOfRows(table.node)); rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction); rows = transpose(rows); return convertArrayOfRowsToTableNode(table.node, rows); }; var moveTableRow = function moveTableRow2(table, indexesOrigin, indexesTarget, direction) { var rows = convertTableNodeToArrayOfRows(table.node); rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction); return convertArrayOfRowsToTableNode(table.node, rows); }; var moveRowInArrayOfRows = function moveRowInArrayOfRows2(rows, indexesOrigin, indexesTarget, directionOverride) { var direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1; var rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length); var positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0; var target2 = void 0; if (directionOverride === -1 && direction === 1) { target2 = indexesTarget[0] - 1; } else if (directionOverride === 1 && direction === -1) { target2 = indexesTarget[indexesTarget.length - 1] - positionOffset + 1; } else { target2 = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset; } rows.splice.apply(rows, [target2, 0].concat(rowsExtracted)); return rows; }; var checkInvalidMovements = function checkInvalidMovements2(originIndex, targetIndex, targets, type2) { var direction = originIndex > targetIndex ? -1 : 1; var errorMessage = "Target position is invalid, you can't move the " + type2 + " " + originIndex + " to " + targetIndex + ", the target can't be split. You could use tryToFit option."; if (direction === 1) { if (targets.slice(0, targets.length - 1).indexOf(targetIndex) !== -1) { throw new Error(errorMessage); } } else { if (targets.slice(1).indexOf(targetIndex) !== -1) { throw new Error(errorMessage); } } return true; }; var findParentNode = function findParentNode2(predicate) { return function(_ref) { var $from = _ref.$from; return findParentNodeClosestToPos($from, predicate); }; }; var findParentNodeClosestToPos = function findParentNodeClosestToPos2($pos, predicate) { for (var i2 = $pos.depth; i2 > 0; i2--) { var node2 = $pos.node(i2); if (predicate(node2)) { return { pos: i2 > 0 ? $pos.before(i2) : 0, start: $pos.start(i2), depth: i2, node: node2 }; } } }; var findParentDomRef = function findParentDomRef2(predicate, domAtPos) { return function(selection) { var parent = findParentNode(predicate)(selection); if (parent) { return findDomRefAtPos(parent.pos, domAtPos); } }; }; var hasParentNode = function hasParentNode2(predicate) { return function(selection) { return !!findParentNode(predicate)(selection); }; }; var findParentNodeOfType = function findParentNodeOfType2(nodeType) { return function(selection) { return findParentNode(function(node2) { return equalNodeType(nodeType, node2); })(selection); }; }; var findParentNodeOfTypeClosestToPos = function findParentNodeOfTypeClosestToPos2($pos, nodeType) { return findParentNodeClosestToPos($pos, function(node2) { return equalNodeType(nodeType, node2); }); }; var hasParentNodeOfType = function hasParentNodeOfType2(nodeType) { return function(selection) { return hasParentNode(function(node2) { return equalNodeType(nodeType, node2); })(selection); }; }; var findParentDomRefOfType = function findParentDomRefOfType2(nodeType, domAtPos) { return function(selection) { return findParentDomRef(function(node2) { return equalNodeType(nodeType, node2); }, domAtPos)(selection); }; }; var findSelectedNodeOfType$1 = function findSelectedNodeOfType2(nodeType) { return function(selection) { if (isNodeSelection(selection)) { var node2 = selection.node, $from = selection.$from; if (equalNodeType(nodeType, node2)) { return { node: node2, pos: $from.pos, depth: $from.depth }; } } }; }; var findPositionOfNodeBefore = function findPositionOfNodeBefore2(selection) { var nodeBefore = selection.$from.nodeBefore; var maybeSelection = prosemirrorState.Selection.findFrom(selection.$from, -1); if (maybeSelection && nodeBefore) { var parent = findParentNodeOfType(nodeBefore.type)(maybeSelection); if (parent) { return parent.pos; } return maybeSelection.$from.pos; } }; var findDomRefAtPos = function findDomRefAtPos2(position2, domAtPos) { var dom = domAtPos(position2); var node2 = dom.node.childNodes[dom.offset]; if (dom.node.nodeType === Node.TEXT_NODE) { return dom.node.parentNode; } if (!node2 || node2.nodeType === Node.TEXT_NODE) { return dom.node; } return node2; }; var flatten = function flatten2(node2) { var descend = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; if (!node2) { throw new Error('Invalid "node" parameter'); } var result = []; node2.descendants(function(child, pos) { result.push({ node: child, pos }); if (!descend) { return false; } }); return result; }; var findChildren = function findChildren2(node2, predicate, descend) { if (!node2) { throw new Error('Invalid "node" parameter'); } else if (!predicate) { throw new Error('Invalid "predicate" parameter'); } return flatten(node2, descend).filter(function(child) { return predicate(child.node); }); }; var findTextNodes = function findTextNodes2(node2, descend) { return findChildren(node2, function(child) { return child.isText; }, descend); }; var findInlineNodes = function findInlineNodes2(node2, descend) { return findChildren(node2, function(child) { return child.isInline; }, descend); }; var findBlockNodes = function findBlockNodes2(node2, descend) { return findChildren(node2, function(child) { return child.isBlock; }, descend); }; var findChildrenByAttr = function findChildrenByAttr2(node2, predicate, descend) { return findChildren(node2, function(child) { return !!predicate(child.attrs); }, descend); }; var findChildrenByType = function findChildrenByType2(node2, nodeType, descend) { return findChildren(node2, function(child) { return child.type === nodeType; }, descend); }; var findChildrenByMark = function findChildrenByMark2(node2, markType, descend) { return findChildren(node2, function(child) { return markType.isInSet(child.marks); }, descend); }; var contains = function contains2(node2, nodeType) { return !!findChildrenByType(node2, nodeType).length; }; function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } var findTable = function findTable2(selection) { return findParentNode(function(node2) { return node2.type.spec.tableRole && node2.type.spec.tableRole === "table"; })(selection); }; var isCellSelection = function isCellSelection2(selection) { return selection instanceof prosemirrorTables.CellSelection; }; var getSelectionRect = function getSelectionRect2(selection) { if (!isCellSelection(selection)) { return; } var start = selection.$anchorCell.start(-1); var map2 = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1)); return map2.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start); }; var isColumnSelected = function isColumnSelected2(columnIndex) { return function(selection) { if (isCellSelection(selection)) { var map2 = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1)); return isRectSelected({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map2.height })(selection); } return false; }; }; var isRowSelected = function isRowSelected2(rowIndex) { return function(selection) { if (isCellSelection(selection)) { var map2 = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1)); return isRectSelected({ left: 0, right: map2.width, top: rowIndex, bottom: rowIndex + 1 })(selection); } return false; }; }; var isTableSelected = function isTableSelected2(selection) { if (isCellSelection(selection)) { var map2 = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1)); return isRectSelected({ left: 0, right: map2.width, top: 0, bottom: map2.height })(selection); } return false; }; var getCellsInColumn = function getCellsInColumn2(columnIndex) { return function(selection) { var table = findTable(selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); var indexes = Array.isArray(columnIndex) ? columnIndex : Array.from([columnIndex]); return indexes.reduce(function(acc, index2) { if (index2 >= 0 && index2 <= map2.width - 1) { var cells = map2.cellsInRect({ left: index2, right: index2 + 1, top: 0, bottom: map2.height }); return acc.concat(cells.map(function(nodePos) { var node2 = table.node.nodeAt(nodePos); var pos = nodePos + table.start; return { pos, start: pos + 1, node: node2 }; })); } }, []); } }; }; var getCellsInRow = function getCellsInRow2(rowIndex) { return function(selection) { var table = findTable(selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); var indexes = Array.isArray(rowIndex) ? rowIndex : Array.from([rowIndex]); return indexes.reduce(function(acc, index2) { if (index2 >= 0 && index2 <= map2.height - 1) { var cells = map2.cellsInRect({ left: 0, right: map2.width, top: index2, bottom: index2 + 1 }); return acc.concat(cells.map(function(nodePos) { var node2 = table.node.nodeAt(nodePos); var pos = nodePos + table.start; return { pos, start: pos + 1, node: node2 }; })); } }, []); } }; }; var getCellsInTable = function getCellsInTable2(selection) { var table = findTable(selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); var cells = map2.cellsInRect({ left: 0, right: map2.width, top: 0, bottom: map2.height }); return cells.map(function(nodePos) { var node2 = table.node.nodeAt(nodePos); var pos = nodePos + table.start; return { pos, start: pos + 1, node: node2 }; }); } }; var select = function select2(type2) { return function(index2, expand2) { return function(tr) { var table = findTable(tr.selection); var isRowSelection = type2 === "row"; if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); if (index2 >= 0 && index2 < (isRowSelection ? map2.height : map2.width)) { var left = isRowSelection ? 0 : index2; var top2 = isRowSelection ? index2 : 0; var right = isRowSelection ? map2.width : index2 + 1; var bottom2 = isRowSelection ? index2 + 1 : map2.height; if (expand2) { var cell = findCellClosestToPos(tr.selection.$from); if (!cell) { return tr; } var selRect = map2.findCell(cell.pos - table.start); if (isRowSelection) { top2 = Math.min(top2, selRect.top); bottom2 = Math.max(bottom2, selRect.bottom); } else { left = Math.min(left, selRect.left); right = Math.max(right, selRect.right); } } var cellsInFirstRow = map2.cellsInRect({ left, top: top2, right: isRowSelection ? right : left + 1, bottom: isRowSelection ? top2 + 1 : bottom2 }); var cellsInLastRow = bottom2 - top2 === 1 ? cellsInFirstRow : map2.cellsInRect({ left: isRowSelection ? left : right - 1, top: isRowSelection ? bottom2 - 1 : top2, right, bottom: bottom2 }); var head = table.start + cellsInFirstRow[0]; var anchor = table.start + cellsInLastRow[cellsInLastRow.length - 1]; var $head = tr.doc.resolve(head); var $anchor = tr.doc.resolve(anchor); return cloneTr(tr.setSelection(new prosemirrorTables.CellSelection($anchor, $head))); } } return tr; }; }; }; var selectColumn = select("column"); var selectRow = select("row"); var selectTable = function selectTable2(tr) { var table = findTable(tr.selection); if (table) { var _TableMap$get = prosemirrorTables.TableMap.get(table.node), map2 = _TableMap$get.map; if (map2 && map2.length) { var head = table.start + map2[0]; var anchor = table.start + map2[map2.length - 1]; var $head = tr.doc.resolve(head); var $anchor = tr.doc.resolve(anchor); return cloneTr(tr.setSelection(new prosemirrorTables.CellSelection($anchor, $head))); } } return tr; }; var emptyCell = function emptyCell2(cell, schema2) { return function(tr) { if (cell) { var _tableNodeTypes$cell$ = tableNodeTypes(schema2).cell.createAndFill(), content = _tableNodeTypes$cell$.content; if (!cell.node.content.eq(content)) { tr.replaceWith(cell.pos + 1, cell.pos + cell.node.nodeSize, content); return cloneTr(tr); } } return tr; }; }; var addColumnAt = function addColumnAt2(columnIndex) { return function(tr) { var table = findTable(tr.selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); if (columnIndex >= 0 && columnIndex <= map2.width) { return cloneTr(prosemirrorTables.addColumn(tr, { map: map2, tableStart: table.start, table: table.node }, columnIndex)); } } return tr; }; }; var moveRow = function moveRow2(originRowIndex, targetRowIndex, opts2) { return function(tr) { var defaultOptions = { tryToFit: false, direction: 0 }; var options = Object.assign(defaultOptions, opts2); var table = findTable(tr.selection); if (!table) { return tr; } var _getSelectionRangeInR = getSelectionRangeInRow(originRowIndex)(tr), indexesOriginRow = _getSelectionRangeInR.indexes; var _getSelectionRangeInR2 = getSelectionRangeInRow(targetRowIndex)(tr), indexesTargetRow = _getSelectionRangeInR2.indexes; if (indexesOriginRow.indexOf(targetRowIndex) > -1) { return tr; } if (!options.tryToFit && indexesTargetRow.length > 1) { checkInvalidMovements(originRowIndex, targetRowIndex, indexesTargetRow, "row"); } var newTable = moveTableRow(table, indexesOriginRow, indexesTargetRow, options.direction); return cloneTr(tr).replaceWith(table.pos, table.pos + table.node.nodeSize, newTable); }; }; var moveColumn = function moveColumn2(originColumnIndex, targetColumnIndex, opts2) { return function(tr) { var defaultOptions = { tryToFit: false, direction: 0 }; var options = Object.assign(defaultOptions, opts2); var table = findTable(tr.selection); if (!table) { return tr; } var _getSelectionRangeInC = getSelectionRangeInColumn(originColumnIndex)(tr), indexesOriginColumn = _getSelectionRangeInC.indexes; var _getSelectionRangeInC2 = getSelectionRangeInColumn(targetColumnIndex)(tr), indexesTargetColumn = _getSelectionRangeInC2.indexes; if (indexesOriginColumn.indexOf(targetColumnIndex) > -1) { return tr; } if (!options.tryToFit && indexesTargetColumn.length > 1) { checkInvalidMovements(originColumnIndex, targetColumnIndex, indexesTargetColumn, "column"); } var newTable = moveTableColumn(table, indexesOriginColumn, indexesTargetColumn, options.direction); return cloneTr(tr).replaceWith(table.pos, table.pos + table.node.nodeSize, newTable); }; }; var addRowAt = function addRowAt2(rowIndex, clonePreviousRow) { return function(tr) { var table = findTable(tr.selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); var cloneRowIndex = rowIndex - 1; if (clonePreviousRow && cloneRowIndex >= 0) { return cloneTr(cloneRowAt(cloneRowIndex)(tr)); } if (rowIndex >= 0 && rowIndex <= map2.height) { return cloneTr(prosemirrorTables.addRow(tr, { map: map2, tableStart: table.start, table: table.node }, rowIndex)); } } return tr; }; }; var cloneRowAt = function cloneRowAt2(rowIndex) { return function(tr) { var table = findTable(tr.selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); if (rowIndex >= 0 && rowIndex <= map2.height) { var tableNode2 = table.node; var tableNodes2 = tableNodeTypes(tableNode2.type.schema); var rowPos = table.start; for (var i2 = 0; i2 < rowIndex + 1; i2++) { rowPos += tableNode2.child(i2).nodeSize; } var cloneRow = tableNode2.child(rowIndex); var cells = []; var rowWidth = 0; cloneRow.forEach(function(cell) { if (cell.attrs.rowspan === 1) { rowWidth += cell.attrs.colspan; cells.push(tableNodes2[cell.type.spec.tableRole].createAndFill(cell.attrs, cell.marks)); } }); if (rowWidth < map2.width) { var rowSpanCells = []; var _loop = function _loop2(_i2) { var foundCells = filterCellsInRow(_i2, function(cell, tr2) { var rowspan = cell.node.attrs.rowspan; var spanRange = _i2 + rowspan; return rowspan > 1 && spanRange > rowIndex; })(tr); rowSpanCells.push.apply(rowSpanCells, _toConsumableArray$1(foundCells)); }; for (var _i = rowIndex; _i >= 0; _i--) { _loop(_i); } if (rowSpanCells.length) { rowSpanCells.forEach(function(cell) { tr = setCellAttrs(cell, { rowspan: cell.node.attrs.rowspan + 1 })(tr); }); } } return safeInsert(tableNodes2.row.create(cloneRow.attrs, cells), rowPos)(tr); } } return tr; }; }; var removeColumnAt = function removeColumnAt2(columnIndex) { return function(tr) { var table = findTable(tr.selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); if (columnIndex === 0 && map2.width === 1) { return removeTable(tr); } else if (columnIndex >= 0 && columnIndex <= map2.width) { prosemirrorTables.removeColumn(tr, { map: map2, tableStart: table.start, table: table.node }, columnIndex); return cloneTr(tr); } } return tr; }; }; var removeRowAt = function removeRowAt2(rowIndex) { return function(tr) { var table = findTable(tr.selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); if (rowIndex === 0 && map2.height === 1) { return removeTable(tr); } else if (rowIndex >= 0 && rowIndex <= map2.height) { prosemirrorTables.removeRow(tr, { map: map2, tableStart: table.start, table: table.node }, rowIndex); return cloneTr(tr); } } return tr; }; }; var removeTable = function removeTable2(tr) { var $from = tr.selection.$from; for (var depth = $from.depth; depth > 0; depth--) { var node2 = $from.node(depth); if (node2.type.spec.tableRole === "table") { return cloneTr(tr.delete($from.before(depth), $from.after(depth))); } } return tr; }; var removeSelectedColumns = function removeSelectedColumns2(tr) { var selection = tr.selection; if (isTableSelected(selection)) { return removeTable(tr); } if (isCellSelection(selection)) { var table = findTable(selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); var rect2 = map2.rectBetween(selection.$anchorCell.pos - table.start, selection.$headCell.pos - table.start); if (rect2.left == 0 && rect2.right == map2.width) { return false; } var pmTableRect = Object.assign({}, rect2, { map: map2, table: table.node, tableStart: table.start }); for (var i2 = pmTableRect.right - 1; ; i2--) { prosemirrorTables.removeColumn(tr, pmTableRect, i2); if (i2 === pmTableRect.left) { break; } pmTableRect.table = pmTableRect.tableStart ? tr.doc.nodeAt(pmTableRect.tableStart - 1) : tr.doc; pmTableRect.map = prosemirrorTables.TableMap.get(pmTableRect.table); } return cloneTr(tr); } } return tr; }; var removeSelectedRows = function removeSelectedRows2(tr) { var selection = tr.selection; if (isTableSelected(selection)) { return removeTable(tr); } if (isCellSelection(selection)) { var table = findTable(selection); if (table) { var map2 = prosemirrorTables.TableMap.get(table.node); var rect2 = map2.rectBetween(selection.$anchorCell.pos - table.start, selection.$headCell.pos - table.start); if (rect2.top == 0 && rect2.bottom == map2.height) { return false; } var pmTableRect = Object.assign({}, rect2, { map: map2, table: table.node, tableStart: table.start }); for (var i2 = pmTableRect.bottom - 1; ; i2--) { prosemirrorTables.removeRow(tr, pmTableRect, i2); if (i2 === pmTableRect.top) { break; } pmTableRect.table = pmTableRect.tableStart ? tr.doc.nodeAt(pmTableRect.tableStart - 1) : tr.doc; pmTableRect.map = prosemirrorTables.TableMap.get(pmTableRect.table); } return cloneTr(tr); } } return tr; }; var removeColumnClosestToPos = function removeColumnClosestToPos2($pos) { return function(tr) { var rect2 = findCellRectClosestToPos($pos); if (rect2) { return removeColumnAt(rect2.left)(setTextSelection($pos.pos)(tr)); } return tr; }; }; var removeRowClosestToPos = function removeRowClosestToPos2($pos) { return function(tr) { var rect2 = findCellRectClosestToPos($pos); if (rect2) { return removeRowAt(rect2.top)(setTextSelection($pos.pos)(tr)); } return tr; }; }; var forEachCellInColumn = function forEachCellInColumn2(columnIndex, cellTransform, setCursorToLastCell) { return function(tr) { var cells = getCellsInColumn(columnIndex)(tr.selection); if (cells) { for (var i2 = cells.length - 1; i2 >= 0; i2--) { tr = cellTransform(cells[i2], tr); } if (setCursorToLastCell) { var $pos = tr.doc.resolve(tr.mapping.map(cells[cells.length - 1].pos)); tr.setSelection(prosemirrorState.Selection.near($pos)); } return cloneTr(tr); } return tr; }; }; var forEachCellInRow = function forEachCellInRow2(rowIndex, cellTransform, setCursorToLastCell) { return function(tr) { var cells = getCellsInRow(rowIndex)(tr.selection); if (cells) { for (var i2 = cells.length - 1; i2 >= 0; i2--) { tr = cellTransform(cells[i2], tr); } if (setCursorToLastCell) { var $pos = tr.doc.resolve(tr.mapping.map(cells[cells.length - 1].pos)); tr.setSelection(prosemirrorState.Selection.near($pos)); } } return tr; }; }; var setCellAttrs = function setCellAttrs2(cell, attrs) { return function(tr) { if (cell) { tr.setNodeMarkup(cell.pos, null, Object.assign({}, cell.node.attrs, attrs)); return cloneTr(tr); } return tr; }; }; var createTable = function createTable2(schema2) { var rowsCount = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 3; var colsCount = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 3; var withHeaderRow = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true; var cellContent = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : null; var _tableNodeTypes = tableNodeTypes(schema2), tableCell = _tableNodeTypes.cell, tableHeader = _tableNodeTypes.header_cell, tableRow = _tableNodeTypes.row, table = _tableNodeTypes.table; var cells = []; var headerCells = []; for (var i2 = 0; i2 < colsCount; i2++) { cells.push(createCell(tableCell, cellContent)); if (withHeaderRow) { headerCells.push(createCell(tableHeader, cellContent)); } } var rows = []; for (var _i2 = 0; _i2 < rowsCount; _i2++) { rows.push(tableRow.createChecked(null, withHeaderRow && _i2 === 0 ? headerCells : cells)); } return table.createChecked(null, rows); }; var findCellClosestToPos = function findCellClosestToPos2($pos) { var predicate = function predicate2(node2) { return node2.type.spec.tableRole && /cell/i.test(node2.type.spec.tableRole); }; return findParentNodeClosestToPos($pos, predicate); }; var findCellRectClosestToPos = function findCellRectClosestToPos2($pos) { var cell = findCellClosestToPos($pos); if (cell) { var table = findTableClosestToPos($pos); var map2 = prosemirrorTables.TableMap.get(table.node); var cellPos = cell.pos - table.start; return map2.rectBetween(cellPos, cellPos); } }; var filterCellsInRow = function filterCellsInRow2(rowIndex, predicate) { return function(tr) { var foundCells = []; var cells = getCellsInRow(rowIndex)(tr.selection); if (cells) { for (var j2 = cells.length - 1; j2 >= 0; j2--) { if (predicate(cells[j2], tr)) { foundCells.push(cells[j2]); } } } return foundCells; }; }; var getSelectionRangeInColumn = function getSelectionRangeInColumn2(columnIndex) { return function(tr) { var startIndex = columnIndex; var endIndex = columnIndex; var _loop2 = function _loop22(i3) { var cells = getCellsInColumn(i3)(tr.selection); if (cells) { cells.forEach(function(cell) { var maybeEndIndex = cell.node.attrs.colspan + i3 - 1; if (maybeEndIndex >= startIndex) { startIndex = i3; } if (maybeEndIndex > endIndex) { endIndex = maybeEndIndex; } }); } }; for (var i2 = columnIndex; i2 >= 0; i2--) { _loop2(i2); } var _loop3 = function _loop32(i3) { var cells = getCellsInColumn(i3)(tr.selection); if (cells) { cells.forEach(function(cell) { var maybeEndIndex = cell.node.attrs.colspan + i3 - 1; if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) { endIndex = maybeEndIndex; } }); } }; for (var i2 = columnIndex; i2 <= endIndex; i2++) { _loop3(i2); } var indexes = []; for (var i2 = startIndex; i2 <= endIndex; i2++) { var maybeCells = getCellsInColumn(i2)(tr.selection); if (maybeCells && maybeCells.length) { indexes.push(i2); } } startIndex = indexes[0]; endIndex = indexes[indexes.length - 1]; var firstSelectedColumnCells = getCellsInColumn(startIndex)(tr.selection); var firstRowCells = getCellsInRow(0)(tr.selection); var $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos); var headCell = void 0; for (var _i3 = endIndex; _i3 >= startIndex; _i3--) { var columnCells = getCellsInColumn(_i3)(tr.selection); if (columnCells && columnCells.length) { for (var j2 = firstRowCells.length - 1; j2 >= 0; j2--) { if (firstRowCells[j2].pos === columnCells[0].pos) { headCell = columnCells[0]; break; } } if (headCell) { break; } } } var $head = tr.doc.resolve(headCell.pos); return { $anchor, $head, indexes }; }; }; var getSelectionRangeInRow = function getSelectionRangeInRow2(rowIndex) { return function(tr) { var startIndex = rowIndex; var endIndex = rowIndex; var _loop4 = function _loop42(i3) { var cells = getCellsInRow(i3)(tr.selection); cells.forEach(function(cell) { var maybeEndIndex = cell.node.attrs.rowspan + i3 - 1; if (maybeEndIndex >= startIndex) { startIndex = i3; } if (maybeEndIndex > endIndex) { endIndex = maybeEndIndex; } }); }; for (var i2 = rowIndex; i2 >= 0; i2--) { _loop4(i2); } var _loop5 = function _loop52(i3) { var cells = getCellsInRow(i3)(tr.selection); cells.forEach(function(cell) { var maybeEndIndex = cell.node.attrs.rowspan + i3 - 1; if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) { endIndex = maybeEndIndex; } }); }; for (var i2 = rowIndex; i2 <= endIndex; i2++) { _loop5(i2); } var indexes = []; for (var i2 = startIndex; i2 <= endIndex; i2++) { var maybeCells = getCellsInRow(i2)(tr.selection); if (maybeCells && maybeCells.length) { indexes.push(i2); } } startIndex = indexes[0]; endIndex = indexes[indexes.length - 1]; var firstSelectedRowCells = getCellsInRow(startIndex)(tr.selection); var firstColumnCells = getCellsInColumn(0)(tr.selection); var $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos); var headCell = void 0; for (var _i4 = endIndex; _i4 >= startIndex; _i4--) { var rowCells = getCellsInRow(_i4)(tr.selection); if (rowCells && rowCells.length) { for (var j2 = firstColumnCells.length - 1; j2 >= 0; j2--) { if (firstColumnCells[j2].pos === rowCells[0].pos) { headCell = rowCells[0]; break; } } if (headCell) { break; } } } var $head = tr.doc.resolve(headCell.pos); return { $anchor, $head, indexes }; }; }; dist$3.isNodeSelection = isNodeSelection; dist$3.canInsert = canInsert; dist$3.convertTableNodeToArrayOfRows = convertTableNodeToArrayOfRows; dist$3.convertArrayOfRowsToTableNode = convertArrayOfRowsToTableNode; var findParentNode_1 = dist$3.findParentNode = findParentNode; var findParentNodeClosestToPos_1 = dist$3.findParentNodeClosestToPos = findParentNodeClosestToPos; dist$3.findParentDomRef = findParentDomRef; dist$3.hasParentNode = hasParentNode; var findParentNodeOfType_1 = dist$3.findParentNodeOfType = findParentNodeOfType; var findParentNodeOfTypeClosestToPos_1 = dist$3.findParentNodeOfTypeClosestToPos = findParentNodeOfTypeClosestToPos; dist$3.hasParentNodeOfType = hasParentNodeOfType; dist$3.findParentDomRefOfType = findParentDomRefOfType; dist$3.findSelectedNodeOfType = findSelectedNodeOfType$1; dist$3.findPositionOfNodeBefore = findPositionOfNodeBefore; var findDomRefAtPos_1 = dist$3.findDomRefAtPos = findDomRefAtPos; dist$3.flatten = flatten; var findChildren_1 = dist$3.findChildren = findChildren; dist$3.findTextNodes = findTextNodes; dist$3.findInlineNodes = findInlineNodes; var findBlockNodes_1 = dist$3.findBlockNodes = findBlockNodes; dist$3.findChildrenByAttr = findChildrenByAttr; var findChildrenByType_1 = dist$3.findChildrenByType = findChildrenByType; var findChildrenByMark_1 = dist$3.findChildrenByMark = findChildrenByMark; dist$3.contains = contains; dist$3.findTable = findTable; dist$3.isCellSelection = isCellSelection; dist$3.getSelectionRect = getSelectionRect; dist$3.isColumnSelected = isColumnSelected; dist$3.isRowSelected = isRowSelected; dist$3.isTableSelected = isTableSelected; dist$3.getCellsInColumn = getCellsInColumn; dist$3.getCellsInRow = getCellsInRow; dist$3.getCellsInTable = getCellsInTable; dist$3.selectColumn = selectColumn; dist$3.selectRow = selectRow; dist$3.selectTable = selectTable; dist$3.emptyCell = emptyCell; dist$3.addColumnAt = addColumnAt; dist$3.moveRow = moveRow; dist$3.moveColumn = moveColumn; dist$3.addRowAt = addRowAt; dist$3.cloneRowAt = cloneRowAt; dist$3.removeColumnAt = removeColumnAt; dist$3.removeRowAt = removeRowAt; dist$3.removeTable = removeTable; dist$3.removeSelectedColumns = removeSelectedColumns; dist$3.removeSelectedRows = removeSelectedRows; dist$3.removeColumnClosestToPos = removeColumnClosestToPos; dist$3.removeRowClosestToPos = removeRowClosestToPos; dist$3.forEachCellInColumn = forEachCellInColumn; dist$3.forEachCellInRow = forEachCellInRow; dist$3.setCellAttrs = setCellAttrs; dist$3.createTable = createTable; dist$3.findCellClosestToPos = findCellClosestToPos; dist$3.findCellRectClosestToPos = findCellRectClosestToPos; dist$3.getSelectionRangeInColumn = getSelectionRangeInColumn; dist$3.getSelectionRangeInRow = getSelectionRangeInRow; dist$3.removeParentNodeOfType = removeParentNodeOfType; dist$3.replaceParentNodeOfType = replaceParentNodeOfType; dist$3.removeSelectedNode = removeSelectedNode; dist$3.replaceSelectedNode = replaceSelectedNode; var setTextSelection_1 = dist$3.setTextSelection = setTextSelection; dist$3.safeInsert = safeInsert; dist$3.setParentNodeMarkup = setParentNodeMarkup; dist$3.selectParentNodeOfType = selectParentNodeOfType; dist$3.removeNodeBefore = removeNodeBefore; var TraverseResult = /* @__PURE__ */ ((TraverseResult2) => { TraverseResult2[TraverseResult2["Descend"] = 0] = "Descend"; TraverseResult2[TraverseResult2["Next"] = 1] = "Next"; TraverseResult2[TraverseResult2["Up"] = 2] = "Up"; TraverseResult2[TraverseResult2["End"] = 3] = "End"; return TraverseResult2; })(TraverseResult || {}); function traverseNodes(node2, from2, to, fn, debug2 = false) { if (debug2) { console.log(`Traversing ${node2.type.name} in the range [${from2}-${to}]`); } traverseNodesImpl(node2, from2, to, fn, 0, null, debug2); } function traverseNodesImpl(node2, from2, to, fn, offset, _parent, debug2) { let pos = 0; for (let i2 = 0; i2 < node2.content.childCount; i2++) { const child = node2.content.child(i2); const endPos = pos + child.nodeSize; if (debug2) { console.log(`${child.type.name} [${offset + pos}-${offset + endPos}]`); console.log(`offset: ${offset}, condition: ${pos} < ${to} && ${endPos} > ${from2}`); } if (pos < to && endPos > from2) { const result = fn(child, offset + pos, node2, i2) || 0; if (result === 0) { if (child.content.childCount) { const childContentPos = pos + 1; if (!traverseNodesImpl(child, from2 - childContentPos, to - childContentPos, fn, offset + childContentPos, node2, debug2)) { return false; } } } else if (result === 1) ; else if (result === 2) { return true; } else if (result === 3) { return false; } else { throw new Error("Unexpected TraverseResult value"); } } pos = endPos; } return true; } function findTopLevelBodyNodes(doc2, predicate) { const body = findChildrenByType_1(doc2, doc2.type.schema.nodes.body, false)[0]; const offset = body.pos + 1; const nodes2 = findChildren_1(body.node, predicate, true); return nodes2.map((value) => ({ ...value, pos: value.pos + offset })); } function firstNode(parent, predicate) { let foundNode; parent.node.descendants((node2, pos) => { if (!foundNode) { if (predicate(node2)) { foundNode = { node: node2, pos: parent.pos + 1 + pos }; return false; } else { return true; } } else { return false; } }); return foundNode; } function lastNode(parent, predicate) { let last2; parent.node.descendants((node2, pos) => { if (predicate(node2)) { last2 = { node: node2, pos: parent.pos + 1 + pos }; } }); return last2; } function nodeIsActive(state, type2, attrs = {}) { const predicate = (n2) => n2.type === type2; const node2 = findSelectedNodeOfType(type2, state.selection) || findParentNode_1(predicate)(state.selection); if (!Object.keys(attrs).length || !node2) { return !!node2; } return node2.node.hasMarkup(type2, attrs); } function canInsertNode(context, nodeType) { const selection = asSelection(context); const $from = selection.$from; return canInsertNodeAtPos($from, nodeType); } function canInsertNodeAtPos($pos, nodeType) { for (let d2 = $pos.depth; d2 >= 0; d2--) { const index2 = $pos.index(d2); if ($pos.node(d2).canReplaceWith(index2, index2, nodeType)) { return true; } } return false; } function insertAndSelectNode(view, node2) { const tr = view.state.tr; tr.ensureMarks(node2.marks); tr.replaceSelectionWith(node2); const selectionPos = tr.doc.resolve(tr.mapping.map(view.state.selection.from, -1)); const selectionNode = tr.doc.nodeAt(selectionPos.pos); if (selectionNode && selectionNode.type === node2.type) { tr.setSelection(new NodeSelection(selectionPos)); } view.dispatch(tr); } function editingRootNode(selection) { const schema2 = selection.$head.node().type.schema; return findParentNodeOfType_1(schema2.nodes.body)(selection) || findParentNodeOfType_1(schema2.nodes.note)(selection); } function editingRootNodeClosestToPos($pos) { const schema2 = $pos.node().type.schema; return findParentNodeOfTypeClosestToPos_1($pos, schema2.nodes.body) || findParentNodeOfTypeClosestToPos_1($pos, schema2.nodes.note); } function editingRootScrollContainerElement(view) { const editingNode = editingRootNode(view.state.selection); if (editingNode) { const editingEl = view.domAtPos(editingNode.pos + 1).node; return editingEl.parentElement; } else { return void 0; } } function setNodeAttrs(tr, { pos, node: node2 }, attrs) { return tr.setNodeMarkup( pos, node2.type, Object.assign({}, node2.attrs, attrs), node2.marks ); } function findOneNode(node2, from2, to, predicate) { let result = null; traverseNodes(node2, from2, to, (x2) => { if (predicate(x2)) { result = x2; return TraverseResult.End; } else { return void 0; } }); return result; } function findSelectedNodeOfType(nodeType, selection) { if (selection instanceof NodeSelection && nodeType === selection.node.type) { const { node: node2, $from } = selection; return { node: node2, pos: $from.pos }; } else { return void 0; } } function asSelection(context) { return context instanceof EditorState ? context.selection : context; } /*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ function isNothing(subject) { return typeof subject === "undefined" || subject === null; } function isObject$b(subject) { return typeof subject === "object" && subject !== null; } function toArray(sequence) { if (Array.isArray(sequence)) return sequence; else if (isNothing(sequence)) return []; return [sequence]; } function extend(target2, source) { var index2, length2, key2, sourceKeys; if (source) { sourceKeys = Object.keys(source); for (index2 = 0, length2 = sourceKeys.length; index2 < length2; index2 += 1) { key2 = sourceKeys[index2]; target2[key2] = source[key2]; } } return target2; } function repeat(string, count) { var result = "", cycle; for (cycle = 0; cycle < count; cycle += 1) { result += string; } return result; } function isNegativeZero(number) { return number === 0 && Number.NEGATIVE_INFINITY === 1 / number; } var isNothing_1 = isNothing; var isObject_1 = isObject$b; var toArray_1 = toArray; var repeat_1 = repeat; var isNegativeZero_1 = isNegativeZero; var extend_1 = extend; var common = { isNothing: isNothing_1, isObject: isObject_1, toArray: toArray_1, repeat: repeat_1, isNegativeZero: isNegativeZero_1, extend: extend_1 }; function formatError(exception2, compact2) { var where = "", message = exception2.reason || "(unknown reason)"; if (!exception2.mark) return message; if (exception2.mark.name) { where += 'in "' + exception2.mark.name + '" '; } where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")"; if (!compact2 && exception2.mark.snippet) { where += "\n\n" + exception2.mark.snippet; } return message + " " + where; } function YAMLException$1(reason, mark) { Error.call(this); this.name = "YAMLException"; this.reason = reason; this.mark = mark; this.message = formatError(this, false); if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } else { this.stack = new Error().stack || ""; } } YAMLException$1.prototype = Object.create(Error.prototype); YAMLException$1.prototype.constructor = YAMLException$1; YAMLException$1.prototype.toString = function toString2(compact2) { return this.name + ": " + formatError(this, compact2); }; var exception = YAMLException$1; function getLine(buffer, lineStart, lineEnd, position2, maxLineLength) { var head = ""; var tail = ""; var maxHalfLength = Math.floor(maxLineLength / 2) - 1; if (position2 - lineStart > maxHalfLength) { head = " ... "; lineStart = position2 - maxHalfLength + head.length; } if (lineEnd - position2 > maxHalfLength) { tail = " ..."; lineEnd = position2 + maxHalfLength - tail.length; } return { str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, "\u2192") + tail, pos: position2 - lineStart + head.length }; } function padStart(string, max2) { return common.repeat(" ", max2 - string.length) + string; } function makeSnippet(mark, options) { options = Object.create(options || null); if (!mark.buffer) return null; if (!options.maxLength) options.maxLength = 79; if (typeof options.indent !== "number") options.indent = 1; if (typeof options.linesBefore !== "number") options.linesBefore = 3; if (typeof options.linesAfter !== "number") options.linesAfter = 2; var re2 = /\r?\n|\r|\0/g; var lineStarts = [0]; var lineEnds = []; var match2; var foundLineNo = -1; while (match2 = re2.exec(mark.buffer)) { lineEnds.push(match2.index); lineStarts.push(match2.index + match2[0].length); if (mark.position <= match2.index && foundLineNo < 0) { foundLineNo = lineStarts.length - 2; } } if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; var result = "", i2, line2; var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); for (i2 = 1; i2 <= options.linesBefore; i2++) { if (foundLineNo - i2 < 0) break; line2 = getLine( mark.buffer, lineStarts[foundLineNo - i2], lineEnds[foundLineNo - i2], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i2]), maxLineLength ); result = common.repeat(" ", options.indent) + padStart((mark.line - i2 + 1).toString(), lineNoLength) + " | " + line2.str + "\n" + result; } line2 = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); result += common.repeat(" ", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line2.str + "\n"; result += common.repeat("-", options.indent + lineNoLength + 3 + line2.pos) + "^\n"; for (i2 = 1; i2 <= options.linesAfter; i2++) { if (foundLineNo + i2 >= lineEnds.length) break; line2 = getLine( mark.buffer, lineStarts[foundLineNo + i2], lineEnds[foundLineNo + i2], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i2]), maxLineLength ); result += common.repeat(" ", options.indent) + padStart((mark.line + i2 + 1).toString(), lineNoLength) + " | " + line2.str + "\n"; } return result.replace(/\n$/, ""); } var snippet = makeSnippet; var TYPE_CONSTRUCTOR_OPTIONS = [ "kind", "multi", "resolve", "construct", "instanceOf", "predicate", "represent", "representName", "defaultStyle", "styleAliases" ]; var YAML_NODE_KINDS = [ "scalar", "sequence", "mapping" ]; function compileStyleAliases(map2) { var result = {}; if (map2 !== null) { Object.keys(map2).forEach(function(style) { map2[style].forEach(function(alias) { result[String(alias)] = style; }); }); } return result; } function Type$1(tag, options) { options = options || {}; Object.keys(options).forEach(function(name) { if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); } }); this.options = options; this.tag = tag; this.kind = options["kind"] || null; this.resolve = options["resolve"] || function() { return true; }; this.construct = options["construct"] || function(data) { return data; }; this.instanceOf = options["instanceOf"] || null; this.predicate = options["predicate"] || null; this.represent = options["represent"] || null; this.representName = options["representName"] || null; this.defaultStyle = options["defaultStyle"] || null; this.multi = options["multi"] || false; this.styleAliases = compileStyleAliases(options["styleAliases"] || null); if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); } } var type = Type$1; function compileList(schema2, name) { var result = []; schema2[name].forEach(function(currentType) { var newIndex = result.length; result.forEach(function(previousType, previousIndex) { if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) { newIndex = previousIndex; } }); result[newIndex] = currentType; }); return result; } function compileMap() { var result = { scalar: {}, sequence: {}, mapping: {}, fallback: {}, multi: { scalar: [], sequence: [], mapping: [], fallback: [] } }, index2, length2; function collectType(type2) { if (type2.multi) { result.multi[type2.kind].push(type2); result.multi["fallback"].push(type2); } else { result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2; } } for (index2 = 0, length2 = arguments.length; index2 < length2; index2 += 1) { arguments[index2].forEach(collectType); } return result; } function Schema$1(definition) { return this.extend(definition); } Schema$1.prototype.extend = function extend2(definition) { var implicit = []; var explicit = []; if (definition instanceof type) { explicit.push(definition); } else if (Array.isArray(definition)) { explicit = explicit.concat(definition); } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { if (definition.implicit) implicit = implicit.concat(definition.implicit); if (definition.explicit) explicit = explicit.concat(definition.explicit); } else { throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })"); } implicit.forEach(function(type$1) { if (!(type$1 instanceof type)) { throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object."); } if (type$1.loadKind && type$1.loadKind !== "scalar") { throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported."); } if (type$1.multi) { throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit."); } }); explicit.forEach(function(type$1) { if (!(type$1 instanceof type)) { throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object."); } }); var result = Object.create(Schema$1.prototype); result.implicit = (this.implicit || []).concat(implicit); result.explicit = (this.explicit || []).concat(explicit); result.compiledImplicit = compileList(result, "implicit"); result.compiledExplicit = compileList(result, "explicit"); result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); return result; }; var schema = Schema$1; var str = new type("tag:yaml.org,2002:str", { kind: "scalar", construct: function(data) { return data !== null ? data : ""; } }); var seq = new type("tag:yaml.org,2002:seq", { kind: "sequence", construct: function(data) { return data !== null ? data : []; } }); var map$1 = new type("tag:yaml.org,2002:map", { kind: "mapping", construct: function(data) { return data !== null ? data : {}; } }); var failsafe = new schema({ explicit: [ str, seq, map$1 ] }); function resolveYamlNull(data) { if (data === null) return true; var max2 = data.length; return max2 === 1 && data === "~" || max2 === 4 && (data === "null" || data === "Null" || data === "NULL"); } function constructYamlNull() { return null; } function isNull(object) { return object === null; } var _null = new type("tag:yaml.org,2002:null", { kind: "scalar", resolve: resolveYamlNull, construct: constructYamlNull, predicate: isNull, represent: { canonical: function() { return "~"; }, lowercase: function() { return "null"; }, uppercase: function() { return "NULL"; }, camelcase: function() { return "Null"; }, empty: function() { return ""; } }, defaultStyle: "lowercase" }); function resolveYamlBoolean(data) { if (data === null) return false; var max2 = data.length; return max2 === 4 && (data === "true" || data === "True" || data === "TRUE") || max2 === 5 && (data === "false" || data === "False" || data === "FALSE"); } function constructYamlBoolean(data) { return data === "true" || data === "True" || data === "TRUE"; } function isBoolean$1(object) { return Object.prototype.toString.call(object) === "[object Boolean]"; } var bool = new type("tag:yaml.org,2002:bool", { kind: "scalar", resolve: resolveYamlBoolean, construct: constructYamlBoolean, predicate: isBoolean$1, represent: { lowercase: function(object) { return object ? "true" : "false"; }, uppercase: function(object) { return object ? "TRUE" : "FALSE"; }, camelcase: function(object) { return object ? "True" : "False"; } }, defaultStyle: "lowercase" }); function isHexCode(c) { return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102; } function isOctCode(c) { return 48 <= c && c <= 55; } function isDecCode(c) { return 48 <= c && c <= 57; } function resolveYamlInteger(data) { if (data === null) return false; var max2 = data.length, index2 = 0, hasDigits = false, ch2; if (!max2) return false; ch2 = data[index2]; if (ch2 === "-" || ch2 === "+") { ch2 = data[++index2]; } if (ch2 === "0") { if (index2 + 1 === max2) return true; ch2 = data[++index2]; if (ch2 === "b") { index2++; for (; index2 < max2; index2++) { ch2 = data[index2]; if (ch2 === "_") continue; if (ch2 !== "0" && ch2 !== "1") return false; hasDigits = true; } return hasDigits && ch2 !== "_"; } if (ch2 === "x") { index2++; for (; index2 < max2; index2++) { ch2 = data[index2]; if (ch2 === "_") continue; if (!isHexCode(data.charCodeAt(index2))) return false; hasDigits = true; } return hasDigits && ch2 !== "_"; } if (ch2 === "o") { index2++; for (; index2 < max2; index2++) { ch2 = data[index2]; if (ch2 === "_") continue; if (!isOctCode(data.charCodeAt(index2))) return false; hasDigits = true; } return hasDigits && ch2 !== "_"; } } if (ch2 === "_") return false; for (; index2 < max2; index2++) { ch2 = data[index2]; if (ch2 === "_") continue; if (!isDecCode(data.charCodeAt(index2))) { return false; } hasDigits = true; } if (!hasDigits || ch2 === "_") return false; return true; } function constructYamlInteger(data) { var value = data, sign = 1, ch2; if (value.indexOf("_") !== -1) { value = value.replace(/_/g, ""); } ch2 = value[0]; if (ch2 === "-" || ch2 === "+") { if (ch2 === "-") sign = -1; value = value.slice(1); ch2 = value[0]; } if (value === "0") return 0; if (ch2 === "0") { if (value[1] === "b") return sign * parseInt(value.slice(2), 2); if (value[1] === "x") return sign * parseInt(value.slice(2), 16); if (value[1] === "o") return sign * parseInt(value.slice(2), 8); } return sign * parseInt(value, 10); } function isInteger$1(object) { return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 === 0 && !common.isNegativeZero(object)); } var int$1 = new type("tag:yaml.org,2002:int", { kind: "scalar", resolve: resolveYamlInteger, construct: constructYamlInteger, predicate: isInteger$1, represent: { binary: function(obj) { return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1); }, octal: function(obj) { return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1); }, decimal: function(obj) { return obj.toString(10); }, hexadecimal: function(obj) { return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1); } }, defaultStyle: "decimal", styleAliases: { binary: [2, "bin"], octal: [8, "oct"], decimal: [10, "dec"], hexadecimal: [16, "hex"] } }); var YAML_FLOAT_PATTERN = new RegExp( "^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$" ); function resolveYamlFloat(data) { if (data === null) return false; if (!YAML_FLOAT_PATTERN.test(data) || data[data.length - 1] === "_") { return false; } return true; } function constructYamlFloat(data) { var value, sign; value = data.replace(/_/g, "").toLowerCase(); sign = value[0] === "-" ? -1 : 1; if ("+-".indexOf(value[0]) >= 0) { value = value.slice(1); } if (value === ".inf") { return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; } else if (value === ".nan") { return NaN; } return sign * parseFloat(value, 10); } var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; function representYamlFloat(object, style) { var res; if (isNaN(object)) { switch (style) { case "lowercase": return ".nan"; case "uppercase": return ".NAN"; case "camelcase": return ".NaN"; } } else if (Number.POSITIVE_INFINITY === object) { switch (style) { case "lowercase": return ".inf"; case "uppercase": return ".INF"; case "camelcase": return ".Inf"; } } else if (Number.NEGATIVE_INFINITY === object) { switch (style) { case "lowercase": return "-.inf"; case "uppercase": return "-.INF"; case "camelcase": return "-.Inf"; } } else if (common.isNegativeZero(object)) { return "-0.0"; } res = object.toString(10); return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res; } function isFloat(object) { return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object)); } var float = new type("tag:yaml.org,2002:float", { kind: "scalar", resolve: resolveYamlFloat, construct: constructYamlFloat, predicate: isFloat, represent: representYamlFloat, defaultStyle: "lowercase" }); var json = failsafe.extend({ implicit: [ _null, bool, int$1, float ] }); var core$5 = json; var YAML_DATE_REGEXP = new RegExp( "^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$" ); var YAML_TIMESTAMP_REGEXP = new RegExp( "^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$" ); function resolveYamlTimestamp(data) { if (data === null) return false; if (YAML_DATE_REGEXP.exec(data) !== null) return true; if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; return false; } function constructYamlTimestamp(data) { var match2, year, month, day, hour, minute, second, fraction = 0, delta2 = null, tz_hour, tz_minute, date; match2 = YAML_DATE_REGEXP.exec(data); if (match2 === null) match2 = YAML_TIMESTAMP_REGEXP.exec(data); if (match2 === null) throw new Error("Date resolve error"); year = +match2[1]; month = +match2[2] - 1; day = +match2[3]; if (!match2[4]) { return new Date(Date.UTC(year, month, day)); } hour = +match2[4]; minute = +match2[5]; second = +match2[6]; if (match2[7]) { fraction = match2[7].slice(0, 3); while (fraction.length < 3) { fraction += "0"; } fraction = +fraction; } if (match2[9]) { tz_hour = +match2[10]; tz_minute = +(match2[11] || 0); delta2 = (tz_hour * 60 + tz_minute) * 6e4; if (match2[9] === "-") delta2 = -delta2; } date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); if (delta2) date.setTime(date.getTime() - delta2); return date; } function representYamlTimestamp(object) { return object.toISOString(); } var timestamp = new type("tag:yaml.org,2002:timestamp", { kind: "scalar", resolve: resolveYamlTimestamp, construct: constructYamlTimestamp, instanceOf: Date, represent: representYamlTimestamp }); function resolveYamlMerge(data) { return data === "<<" || data === null; } var merge = new type("tag:yaml.org,2002:merge", { kind: "scalar", resolve: resolveYamlMerge }); var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r"; function resolveYamlBinary(data) { if (data === null) return false; var code2, idx, bitlen = 0, max2 = data.length, map2 = BASE64_MAP; for (idx = 0; idx < max2; idx++) { code2 = map2.indexOf(data.charAt(idx)); if (code2 > 64) continue; if (code2 < 0) return false; bitlen += 6; } return bitlen % 8 === 0; } function constructYamlBinary(data) { var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max2 = input.length, map2 = BASE64_MAP, bits = 0, result = []; for (idx = 0; idx < max2; idx++) { if (idx % 4 === 0 && idx) { result.push(bits >> 16 & 255); result.push(bits >> 8 & 255); result.push(bits & 255); } bits = bits << 6 | map2.indexOf(input.charAt(idx)); } tailbits = max2 % 4 * 6; if (tailbits === 0) { result.push(bits >> 16 & 255); result.push(bits >> 8 & 255); result.push(bits & 255); } else if (tailbits === 18) { result.push(bits >> 10 & 255); result.push(bits >> 2 & 255); } else if (tailbits === 12) { result.push(bits >> 4 & 255); } return new Uint8Array(result); } function representYamlBinary(object) { var result = "", bits = 0, idx, tail, max2 = object.length, map2 = BASE64_MAP; for (idx = 0; idx < max2; idx++) { if (idx % 3 === 0 && idx) { result += map2[bits >> 18 & 63]; result += map2[bits >> 12 & 63]; result += map2[bits >> 6 & 63]; result += map2[bits & 63]; } bits = (bits << 8) + object[idx]; } tail = max2 % 3; if (tail === 0) { result += map2[bits >> 18 & 63]; result += map2[bits >> 12 & 63]; result += map2[bits >> 6 & 63]; result += map2[bits & 63]; } else if (tail === 2) { result += map2[bits >> 10 & 63]; result += map2[bits >> 4 & 63]; result += map2[bits << 2 & 63]; result += map2[64]; } else if (tail === 1) { result += map2[bits >> 2 & 63]; result += map2[bits << 4 & 63]; result += map2[64]; result += map2[64]; } return result; } function isBinary(obj) { return Object.prototype.toString.call(obj) === "[object Uint8Array]"; } var binary = new type("tag:yaml.org,2002:binary", { kind: "scalar", resolve: resolveYamlBinary, construct: constructYamlBinary, predicate: isBinary, represent: representYamlBinary }); var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; var _toString$2 = Object.prototype.toString; function resolveYamlOmap(data) { if (data === null) return true; var objectKeys = [], index2, length2, pair, pairKey, pairHasKey, object = data; for (index2 = 0, length2 = object.length; index2 < length2; index2 += 1) { pair = object[index2]; pairHasKey = false; if (_toString$2.call(pair) !== "[object Object]") return false; for (pairKey in pair) { if (_hasOwnProperty$3.call(pair, pairKey)) { if (!pairHasKey) pairHasKey = true; else return false; } } if (!pairHasKey) return false; if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); else return false; } return true; } function constructYamlOmap(data) { return data !== null ? data : []; } var omap = new type("tag:yaml.org,2002:omap", { kind: "sequence", resolve: resolveYamlOmap, construct: constructYamlOmap }); var _toString$1 = Object.prototype.toString; function resolveYamlPairs(data) { if (data === null) return true; var index2, length2, pair, keys2, result, object = data; result = new Array(object.length); for (index2 = 0, length2 = object.length; index2 < length2; index2 += 1) { pair = object[index2]; if (_toString$1.call(pair) !== "[object Object]") return false; keys2 = Object.keys(pair); if (keys2.length !== 1) return false; result[index2] = [keys2[0], pair[keys2[0]]]; } return true; } function constructYamlPairs(data) { if (data === null) return []; var index2, length2, pair, keys2, result, object = data; result = new Array(object.length); for (index2 = 0, length2 = object.length; index2 < length2; index2 += 1) { pair = object[index2]; keys2 = Object.keys(pair); result[index2] = [keys2[0], pair[keys2[0]]]; } return result; } var pairs = new type("tag:yaml.org,2002:pairs", { kind: "sequence", resolve: resolveYamlPairs, construct: constructYamlPairs }); var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; function resolveYamlSet(data) { if (data === null) return true; var key2, object = data; for (key2 in object) { if (_hasOwnProperty$2.call(object, key2)) { if (object[key2] !== null) return false; } } return true; } function constructYamlSet(data) { return data !== null ? data : {}; } var set = new type("tag:yaml.org,2002:set", { kind: "mapping", resolve: resolveYamlSet, construct: constructYamlSet }); var _default$2 = core$5.extend({ implicit: [ timestamp, merge ], explicit: [ binary, omap, pairs, set ] }); var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; var CONTEXT_FLOW_IN = 1; var CONTEXT_FLOW_OUT = 2; var CONTEXT_BLOCK_IN = 3; var CONTEXT_BLOCK_OUT = 4; var CHOMPING_CLIP = 1; var CHOMPING_STRIP = 2; var CHOMPING_KEEP = 3; var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; function _class$1(obj) { return Object.prototype.toString.call(obj); } function is_EOL(c) { return c === 10 || c === 13; } function is_WHITE_SPACE(c) { return c === 9 || c === 32; } function is_WS_OR_EOL(c) { return c === 9 || c === 32 || c === 10 || c === 13; } function is_FLOW_INDICATOR(c) { return c === 44 || c === 91 || c === 93 || c === 123 || c === 125; } function fromHexCode(c) { var lc2; if (48 <= c && c <= 57) { return c - 48; } lc2 = c | 32; if (97 <= lc2 && lc2 <= 102) { return lc2 - 97 + 10; } return -1; } function escapedHexLen(c) { if (c === 120) { return 2; } if (c === 117) { return 4; } if (c === 85) { return 8; } return 0; } function fromDecimalCode(c) { if (48 <= c && c <= 57) { return c - 48; } return -1; } function simpleEscapeSequence(c) { return c === 48 ? "\0" : c === 97 ? "\x07" : c === 98 ? "\b" : c === 116 ? " " : c === 9 ? " " : c === 110 ? "\n" : c === 118 ? "\v" : c === 102 ? "\f" : c === 114 ? "\r" : c === 101 ? "\x1B" : c === 32 ? " " : c === 34 ? '"' : c === 47 ? "/" : c === 92 ? "\\" : c === 78 ? "\x85" : c === 95 ? "\xA0" : c === 76 ? "\u2028" : c === 80 ? "\u2029" : ""; } function charFromCodepoint(c) { if (c <= 65535) { return String.fromCharCode(c); } return String.fromCharCode( (c - 65536 >> 10) + 55296, (c - 65536 & 1023) + 56320 ); } var simpleEscapeCheck = new Array(256); var simpleEscapeMap = new Array(256); for (var i$4 = 0; i$4 < 256; i$4++) { simpleEscapeCheck[i$4] = simpleEscapeSequence(i$4) ? 1 : 0; simpleEscapeMap[i$4] = simpleEscapeSequence(i$4); } function State$1(input, options) { this.input = input; this.filename = options["filename"] || null; this.schema = options["schema"] || _default$2; this.onWarning = options["onWarning"] || null; this.legacy = options["legacy"] || false; this.json = options["json"] || false; this.listener = options["listener"] || null; this.implicitTypes = this.schema.compiledImplicit; this.typeMap = this.schema.compiledTypeMap; this.length = input.length; this.position = 0; this.line = 0; this.lineStart = 0; this.lineIndent = 0; this.firstTabInLine = -1; this.documents = []; } function generateError(state, message) { var mark = { name: state.filename, buffer: state.input.slice(0, -1), position: state.position, line: state.line, column: state.position - state.lineStart }; mark.snippet = snippet(mark); return new exception(message, mark); } function throwError(state, message) { throw generateError(state, message); } function throwWarning(state, message) { if (state.onWarning) { state.onWarning.call(null, generateError(state, message)); } } var directiveHandlers = { YAML: function handleYamlDirective(state, name, args) { var match2, major2, minor2; if (state.version !== null) { throwError(state, "duplication of %YAML directive"); } if (args.length !== 1) { throwError(state, "YAML directive accepts exactly one argument"); } match2 = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); if (match2 === null) { throwError(state, "ill-formed argument of the YAML directive"); } major2 = parseInt(match2[1], 10); minor2 = parseInt(match2[2], 10); if (major2 !== 1) { throwError(state, "unacceptable YAML version of the document"); } state.version = args[0]; state.checkLineBreaks = minor2 < 2; if (minor2 !== 1 && minor2 !== 2) { throwWarning(state, "unsupported YAML version of the document"); } }, TAG: function handleTagDirective(state, name, args) { var handle, prefix2; if (args.length !== 2) { throwError(state, "TAG directive accepts exactly two arguments"); } handle = args[0]; prefix2 = args[1]; if (!PATTERN_TAG_HANDLE.test(handle)) { throwError(state, "ill-formed tag handle (first argument) of the TAG directive"); } if (_hasOwnProperty$1.call(state.tagMap, handle)) { throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); } if (!PATTERN_TAG_URI.test(prefix2)) { throwError(state, "ill-formed tag prefix (second argument) of the TAG directive"); } try { prefix2 = decodeURIComponent(prefix2); } catch (err) { throwError(state, "tag prefix is malformed: " + prefix2); } state.tagMap[handle] = prefix2; } }; function captureSegment(state, start, end, checkJson) { var _position, _length, _character, _result; if (start < end) { _result = state.input.slice(start, end); if (checkJson) { for (_position = 0, _length = _result.length; _position < _length; _position += 1) { _character = _result.charCodeAt(_position); if (!(_character === 9 || 32 <= _character && _character <= 1114111)) { throwError(state, "expected valid JSON character"); } } } else if (PATTERN_NON_PRINTABLE.test(_result)) { throwError(state, "the stream contains non-printable characters"); } state.result += _result; } } function mergeMappings(state, destination, source, overridableKeys) { var sourceKeys, key2, index2, quantity; if (!common.isObject(source)) { throwError(state, "cannot merge mappings; the provided source object is unacceptable"); } sourceKeys = Object.keys(source); for (index2 = 0, quantity = sourceKeys.length; index2 < quantity; index2 += 1) { key2 = sourceKeys[index2]; if (!_hasOwnProperty$1.call(destination, key2)) { destination[key2] = source[key2]; overridableKeys[key2] = true; } } } function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) { var index2, quantity; if (Array.isArray(keyNode)) { keyNode = Array.prototype.slice.call(keyNode); for (index2 = 0, quantity = keyNode.length; index2 < quantity; index2 += 1) { if (Array.isArray(keyNode[index2])) { throwError(state, "nested arrays are not supported inside keys"); } if (typeof keyNode === "object" && _class$1(keyNode[index2]) === "[object Object]") { keyNode[index2] = "[object Object]"; } } } if (typeof keyNode === "object" && _class$1(keyNode) === "[object Object]") { keyNode = "[object Object]"; } keyNode = String(keyNode); if (_result === null) { _result = {}; } if (keyTag === "tag:yaml.org,2002:merge") { if (Array.isArray(valueNode)) { for (index2 = 0, quantity = valueNode.length; index2 < quantity; index2 += 1) { mergeMappings(state, _result, valueNode[index2], overridableKeys); } } else { mergeMappings(state, _result, valueNode, overridableKeys); } } else { if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) { state.line = startLine || state.line; state.lineStart = startLineStart || state.lineStart; state.position = startPos || state.position; throwError(state, "duplicated mapping key"); } if (keyNode === "__proto__") { Object.defineProperty(_result, keyNode, { configurable: true, enumerable: true, writable: true, value: valueNode }); } else { _result[keyNode] = valueNode; } delete overridableKeys[keyNode]; } return _result; } function readLineBreak(state) { var ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 === 10) { state.position++; } else if (ch2 === 13) { state.position++; if (state.input.charCodeAt(state.position) === 10) { state.position++; } } else { throwError(state, "a line break is expected"); } state.line += 1; state.lineStart = state.position; state.firstTabInLine = -1; } function skipSeparationSpace(state, allowComments, checkIndent) { var lineBreaks = 0, ch2 = state.input.charCodeAt(state.position); while (ch2 !== 0) { while (is_WHITE_SPACE(ch2)) { if (ch2 === 9 && state.firstTabInLine === -1) { state.firstTabInLine = state.position; } ch2 = state.input.charCodeAt(++state.position); } if (allowComments && ch2 === 35) { do { ch2 = state.input.charCodeAt(++state.position); } while (ch2 !== 10 && ch2 !== 13 && ch2 !== 0); } if (is_EOL(ch2)) { readLineBreak(state); ch2 = state.input.charCodeAt(state.position); lineBreaks++; state.lineIndent = 0; while (ch2 === 32) { state.lineIndent++; ch2 = state.input.charCodeAt(++state.position); } } else { break; } } if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { throwWarning(state, "deficient indentation"); } return lineBreaks; } function testDocumentSeparator(state) { var _position = state.position, ch2; ch2 = state.input.charCodeAt(_position); if ((ch2 === 45 || ch2 === 46) && ch2 === state.input.charCodeAt(_position + 1) && ch2 === state.input.charCodeAt(_position + 2)) { _position += 3; ch2 = state.input.charCodeAt(_position); if (ch2 === 0 || is_WS_OR_EOL(ch2)) { return true; } } return false; } function writeFoldedLines(state, count) { if (count === 1) { state.result += " "; } else if (count > 1) { state.result += common.repeat("\n", count - 1); } } function readPlainScalar(state, nodeIndent, withinFlowCollection) { var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch2; ch2 = state.input.charCodeAt(state.position); if (is_WS_OR_EOL(ch2) || is_FLOW_INDICATOR(ch2) || ch2 === 35 || ch2 === 38 || ch2 === 42 || ch2 === 33 || ch2 === 124 || ch2 === 62 || ch2 === 39 || ch2 === 34 || ch2 === 37 || ch2 === 64 || ch2 === 96) { return false; } if (ch2 === 63 || ch2 === 45) { following = state.input.charCodeAt(state.position + 1); if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { return false; } } state.kind = "scalar"; state.result = ""; captureStart = captureEnd = state.position; hasPendingContent = false; while (ch2 !== 0) { if (ch2 === 58) { following = state.input.charCodeAt(state.position + 1); if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { break; } } else if (ch2 === 35) { preceding = state.input.charCodeAt(state.position - 1); if (is_WS_OR_EOL(preceding)) { break; } } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch2)) { break; } else if (is_EOL(ch2)) { _line = state.line; _lineStart = state.lineStart; _lineIndent = state.lineIndent; skipSeparationSpace(state, false, -1); if (state.lineIndent >= nodeIndent) { hasPendingContent = true; ch2 = state.input.charCodeAt(state.position); continue; } else { state.position = captureEnd; state.line = _line; state.lineStart = _lineStart; state.lineIndent = _lineIndent; break; } } if (hasPendingContent) { captureSegment(state, captureStart, captureEnd, false); writeFoldedLines(state, state.line - _line); captureStart = captureEnd = state.position; hasPendingContent = false; } if (!is_WHITE_SPACE(ch2)) { captureEnd = state.position + 1; } ch2 = state.input.charCodeAt(++state.position); } captureSegment(state, captureStart, captureEnd, false); if (state.result) { return true; } state.kind = _kind; state.result = _result; return false; } function readSingleQuotedScalar(state, nodeIndent) { var ch2, captureStart, captureEnd; ch2 = state.input.charCodeAt(state.position); if (ch2 !== 39) { return false; } state.kind = "scalar"; state.result = ""; state.position++; captureStart = captureEnd = state.position; while ((ch2 = state.input.charCodeAt(state.position)) !== 0) { if (ch2 === 39) { captureSegment(state, captureStart, state.position, true); ch2 = state.input.charCodeAt(++state.position); if (ch2 === 39) { captureStart = state.position; state.position++; captureEnd = state.position; } else { return true; } } else if (is_EOL(ch2)) { captureSegment(state, captureStart, captureEnd, true); writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); captureStart = captureEnd = state.position; } else if (state.position === state.lineStart && testDocumentSeparator(state)) { throwError(state, "unexpected end of the document within a single quoted scalar"); } else { state.position++; captureEnd = state.position; } } throwError(state, "unexpected end of the stream within a single quoted scalar"); } function readDoubleQuotedScalar(state, nodeIndent) { var captureStart, captureEnd, hexLength, hexResult, tmp, ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 !== 34) { return false; } state.kind = "scalar"; state.result = ""; state.position++; captureStart = captureEnd = state.position; while ((ch2 = state.input.charCodeAt(state.position)) !== 0) { if (ch2 === 34) { captureSegment(state, captureStart, state.position, true); state.position++; return true; } else if (ch2 === 92) { captureSegment(state, captureStart, state.position, true); ch2 = state.input.charCodeAt(++state.position); if (is_EOL(ch2)) { skipSeparationSpace(state, false, nodeIndent); } else if (ch2 < 256 && simpleEscapeCheck[ch2]) { state.result += simpleEscapeMap[ch2]; state.position++; } else if ((tmp = escapedHexLen(ch2)) > 0) { hexLength = tmp; hexResult = 0; for (; hexLength > 0; hexLength--) { ch2 = state.input.charCodeAt(++state.position); if ((tmp = fromHexCode(ch2)) >= 0) { hexResult = (hexResult << 4) + tmp; } else { throwError(state, "expected hexadecimal character"); } } state.result += charFromCodepoint(hexResult); state.position++; } else { throwError(state, "unknown escape sequence"); } captureStart = captureEnd = state.position; } else if (is_EOL(ch2)) { captureSegment(state, captureStart, captureEnd, true); writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); captureStart = captureEnd = state.position; } else if (state.position === state.lineStart && testDocumentSeparator(state)) { throwError(state, "unexpected end of the document within a double quoted scalar"); } else { state.position++; captureEnd = state.position; } } throwError(state, "unexpected end of the stream within a double quoted scalar"); } function readFlowCollection(state, nodeIndent) { var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 === 91) { terminator = 93; isMapping = false; _result = []; } else if (ch2 === 123) { terminator = 125; isMapping = true; _result = {}; } else { return false; } if (state.anchor !== null) { state.anchorMap[state.anchor] = _result; } ch2 = state.input.charCodeAt(++state.position); while (ch2 !== 0) { skipSeparationSpace(state, true, nodeIndent); ch2 = state.input.charCodeAt(state.position); if (ch2 === terminator) { state.position++; state.tag = _tag; state.anchor = _anchor; state.kind = isMapping ? "mapping" : "sequence"; state.result = _result; return true; } else if (!readNext) { throwError(state, "missed comma between flow collection entries"); } else if (ch2 === 44) { throwError(state, "expected the node content, but found ','"); } keyTag = keyNode = valueNode = null; isPair = isExplicitPair = false; if (ch2 === 63) { following = state.input.charCodeAt(state.position + 1); if (is_WS_OR_EOL(following)) { isPair = isExplicitPair = true; state.position++; skipSeparationSpace(state, true, nodeIndent); } } _line = state.line; _lineStart = state.lineStart; _pos = state.position; composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); keyTag = state.tag; keyNode = state.result; skipSeparationSpace(state, true, nodeIndent); ch2 = state.input.charCodeAt(state.position); if ((isExplicitPair || state.line === _line) && ch2 === 58) { isPair = true; ch2 = state.input.charCodeAt(++state.position); skipSeparationSpace(state, true, nodeIndent); composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); valueNode = state.result; } if (isMapping) { storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); } else if (isPair) { _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); } else { _result.push(keyNode); } skipSeparationSpace(state, true, nodeIndent); ch2 = state.input.charCodeAt(state.position); if (ch2 === 44) { readNext = true; ch2 = state.input.charCodeAt(++state.position); } else { readNext = false; } } throwError(state, "unexpected end of the stream within a flow collection"); } function readBlockScalar(state, nodeIndent) { var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 === 124) { folding = false; } else if (ch2 === 62) { folding = true; } else { return false; } state.kind = "scalar"; state.result = ""; while (ch2 !== 0) { ch2 = state.input.charCodeAt(++state.position); if (ch2 === 43 || ch2 === 45) { if (CHOMPING_CLIP === chomping) { chomping = ch2 === 43 ? CHOMPING_KEEP : CHOMPING_STRIP; } else { throwError(state, "repeat of a chomping mode identifier"); } } else if ((tmp = fromDecimalCode(ch2)) >= 0) { if (tmp === 0) { throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one"); } else if (!detectedIndent) { textIndent = nodeIndent + tmp - 1; detectedIndent = true; } else { throwError(state, "repeat of an indentation width identifier"); } } else { break; } } if (is_WHITE_SPACE(ch2)) { do { ch2 = state.input.charCodeAt(++state.position); } while (is_WHITE_SPACE(ch2)); if (ch2 === 35) { do { ch2 = state.input.charCodeAt(++state.position); } while (!is_EOL(ch2) && ch2 !== 0); } } while (ch2 !== 0) { readLineBreak(state); state.lineIndent = 0; ch2 = state.input.charCodeAt(state.position); while ((!detectedIndent || state.lineIndent < textIndent) && ch2 === 32) { state.lineIndent++; ch2 = state.input.charCodeAt(++state.position); } if (!detectedIndent && state.lineIndent > textIndent) { textIndent = state.lineIndent; } if (is_EOL(ch2)) { emptyLines++; continue; } if (state.lineIndent < textIndent) { if (chomping === CHOMPING_KEEP) { state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); } else if (chomping === CHOMPING_CLIP) { if (didReadContent) { state.result += "\n"; } } break; } if (folding) { if (is_WHITE_SPACE(ch2)) { atMoreIndented = true; state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); } else if (atMoreIndented) { atMoreIndented = false; state.result += common.repeat("\n", emptyLines + 1); } else if (emptyLines === 0) { if (didReadContent) { state.result += " "; } } else { state.result += common.repeat("\n", emptyLines); } } else { state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); } didReadContent = true; detectedIndent = true; emptyLines = 0; captureStart = state.position; while (!is_EOL(ch2) && ch2 !== 0) { ch2 = state.input.charCodeAt(++state.position); } captureSegment(state, captureStart, state.position, false); } return true; } function readBlockSequence(state, nodeIndent) { var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch2; if (state.firstTabInLine !== -1) return false; if (state.anchor !== null) { state.anchorMap[state.anchor] = _result; } ch2 = state.input.charCodeAt(state.position); while (ch2 !== 0) { if (state.firstTabInLine !== -1) { state.position = state.firstTabInLine; throwError(state, "tab characters must not be used in indentation"); } if (ch2 !== 45) { break; } following = state.input.charCodeAt(state.position + 1); if (!is_WS_OR_EOL(following)) { break; } detected = true; state.position++; if (skipSeparationSpace(state, true, -1)) { if (state.lineIndent <= nodeIndent) { _result.push(null); ch2 = state.input.charCodeAt(state.position); continue; } } _line = state.line; composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); _result.push(state.result); skipSeparationSpace(state, true, -1); ch2 = state.input.charCodeAt(state.position); if ((state.line === _line || state.lineIndent > nodeIndent) && ch2 !== 0) { throwError(state, "bad indentation of a sequence entry"); } else if (state.lineIndent < nodeIndent) { break; } } if (detected) { state.tag = _tag; state.anchor = _anchor; state.kind = "sequence"; state.result = _result; return true; } return false; } function readBlockMapping(state, nodeIndent, flowIndent) { var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch2; if (state.firstTabInLine !== -1) return false; if (state.anchor !== null) { state.anchorMap[state.anchor] = _result; } ch2 = state.input.charCodeAt(state.position); while (ch2 !== 0) { if (!atExplicitKey && state.firstTabInLine !== -1) { state.position = state.firstTabInLine; throwError(state, "tab characters must not be used in indentation"); } following = state.input.charCodeAt(state.position + 1); _line = state.line; if ((ch2 === 63 || ch2 === 58) && is_WS_OR_EOL(following)) { if (ch2 === 63) { if (atExplicitKey) { storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); keyTag = keyNode = valueNode = null; } detected = true; atExplicitKey = true; allowCompact = true; } else if (atExplicitKey) { atExplicitKey = false; allowCompact = true; } else { throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"); } state.position += 1; ch2 = following; } else { _keyLine = state.line; _keyLineStart = state.lineStart; _keyPos = state.position; if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { break; } if (state.line === _line) { ch2 = state.input.charCodeAt(state.position); while (is_WHITE_SPACE(ch2)) { ch2 = state.input.charCodeAt(++state.position); } if (ch2 === 58) { ch2 = state.input.charCodeAt(++state.position); if (!is_WS_OR_EOL(ch2)) { throwError(state, "a whitespace character is expected after the key-value separator within a block mapping"); } if (atExplicitKey) { storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); keyTag = keyNode = valueNode = null; } detected = true; atExplicitKey = false; allowCompact = false; keyTag = state.tag; keyNode = state.result; } else if (detected) { throwError(state, "can not read an implicit mapping pair; a colon is missed"); } else { state.tag = _tag; state.anchor = _anchor; return true; } } else if (detected) { throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key"); } else { state.tag = _tag; state.anchor = _anchor; return true; } } if (state.line === _line || state.lineIndent > nodeIndent) { if (atExplicitKey) { _keyLine = state.line; _keyLineStart = state.lineStart; _keyPos = state.position; } if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { if (atExplicitKey) { keyNode = state.result; } else { valueNode = state.result; } } if (!atExplicitKey) { storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); keyTag = keyNode = valueNode = null; } skipSeparationSpace(state, true, -1); ch2 = state.input.charCodeAt(state.position); } if ((state.line === _line || state.lineIndent > nodeIndent) && ch2 !== 0) { throwError(state, "bad indentation of a mapping entry"); } else if (state.lineIndent < nodeIndent) { break; } } if (atExplicitKey) { storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); } if (detected) { state.tag = _tag; state.anchor = _anchor; state.kind = "mapping"; state.result = _result; } return detected; } function readTagProperty(state) { var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 !== 33) return false; if (state.tag !== null) { throwError(state, "duplication of a tag property"); } ch2 = state.input.charCodeAt(++state.position); if (ch2 === 60) { isVerbatim = true; ch2 = state.input.charCodeAt(++state.position); } else if (ch2 === 33) { isNamed = true; tagHandle = "!!"; ch2 = state.input.charCodeAt(++state.position); } else { tagHandle = "!"; } _position = state.position; if (isVerbatim) { do { ch2 = state.input.charCodeAt(++state.position); } while (ch2 !== 0 && ch2 !== 62); if (state.position < state.length) { tagName = state.input.slice(_position, state.position); ch2 = state.input.charCodeAt(++state.position); } else { throwError(state, "unexpected end of the stream within a verbatim tag"); } } else { while (ch2 !== 0 && !is_WS_OR_EOL(ch2)) { if (ch2 === 33) { if (!isNamed) { tagHandle = state.input.slice(_position - 1, state.position + 1); if (!PATTERN_TAG_HANDLE.test(tagHandle)) { throwError(state, "named tag handle cannot contain such characters"); } isNamed = true; _position = state.position + 1; } else { throwError(state, "tag suffix cannot contain exclamation marks"); } } ch2 = state.input.charCodeAt(++state.position); } tagName = state.input.slice(_position, state.position); if (PATTERN_FLOW_INDICATORS.test(tagName)) { throwError(state, "tag suffix cannot contain flow indicator characters"); } } if (tagName && !PATTERN_TAG_URI.test(tagName)) { throwError(state, "tag name cannot contain such characters: " + tagName); } try { tagName = decodeURIComponent(tagName); } catch (err) { throwError(state, "tag name is malformed: " + tagName); } if (isVerbatim) { state.tag = tagName; } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { state.tag = state.tagMap[tagHandle] + tagName; } else if (tagHandle === "!") { state.tag = "!" + tagName; } else if (tagHandle === "!!") { state.tag = "tag:yaml.org,2002:" + tagName; } else { throwError(state, 'undeclared tag handle "' + tagHandle + '"'); } return true; } function readAnchorProperty(state) { var _position, ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 !== 38) return false; if (state.anchor !== null) { throwError(state, "duplication of an anchor property"); } ch2 = state.input.charCodeAt(++state.position); _position = state.position; while (ch2 !== 0 && !is_WS_OR_EOL(ch2) && !is_FLOW_INDICATOR(ch2)) { ch2 = state.input.charCodeAt(++state.position); } if (state.position === _position) { throwError(state, "name of an anchor node must contain at least one character"); } state.anchor = state.input.slice(_position, state.position); return true; } function readAlias(state) { var _position, alias, ch2; ch2 = state.input.charCodeAt(state.position); if (ch2 !== 42) return false; ch2 = state.input.charCodeAt(++state.position); _position = state.position; while (ch2 !== 0 && !is_WS_OR_EOL(ch2) && !is_FLOW_INDICATOR(ch2)) { ch2 = state.input.charCodeAt(++state.position); } if (state.position === _position) { throwError(state, "name of an alias node must contain at least one character"); } alias = state.input.slice(_position, state.position); if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { throwError(state, 'unidentified alias "' + alias + '"'); } state.result = state.anchorMap[alias]; skipSeparationSpace(state, true, -1); return true; } function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent; if (state.listener !== null) { state.listener("open", state); } state.tag = null; state.anchor = null; state.kind = null; state.result = null; allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext; if (allowToSeek) { if (skipSeparationSpace(state, true, -1)) { atNewLine = true; if (state.lineIndent > parentIndent) { indentStatus = 1; } else if (state.lineIndent === parentIndent) { indentStatus = 0; } else if (state.lineIndent < parentIndent) { indentStatus = -1; } } } if (indentStatus === 1) { while (readTagProperty(state) || readAnchorProperty(state)) { if (skipSeparationSpace(state, true, -1)) { atNewLine = true; allowBlockCollections = allowBlockStyles; if (state.lineIndent > parentIndent) { indentStatus = 1; } else if (state.lineIndent === parentIndent) { indentStatus = 0; } else if (state.lineIndent < parentIndent) { indentStatus = -1; } } else { allowBlockCollections = false; } } } if (allowBlockCollections) { allowBlockCollections = atNewLine || allowCompact; } if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { flowIndent = parentIndent; } else { flowIndent = parentIndent + 1; } blockIndent = state.position - state.lineStart; if (indentStatus === 1) { if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) { hasContent = true; } else { if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) { hasContent = true; } else if (readAlias(state)) { hasContent = true; if (state.tag !== null || state.anchor !== null) { throwError(state, "alias node should not have any properties"); } } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { hasContent = true; if (state.tag === null) { state.tag = "?"; } } if (state.anchor !== null) { state.anchorMap[state.anchor] = state.result; } } } else if (indentStatus === 0) { hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); } } if (state.tag === null) { if (state.anchor !== null) { state.anchorMap[state.anchor] = state.result; } } else if (state.tag === "?") { if (state.result !== null && state.kind !== "scalar") { throwError(state, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"'); } for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { type2 = state.implicitTypes[typeIndex]; if (type2.resolve(state.result)) { state.result = type2.construct(state.result); state.tag = type2.tag; if (state.anchor !== null) { state.anchorMap[state.anchor] = state.result; } break; } } } else if (state.tag !== "!") { if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) { type2 = state.typeMap[state.kind || "fallback"][state.tag]; } else { type2 = null; typeList = state.typeMap.multi[state.kind || "fallback"]; for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { type2 = typeList[typeIndex]; break; } } } if (!type2) { throwError(state, "unknown tag !<" + state.tag + ">"); } if (state.result !== null && type2.kind !== state.kind) { throwError(state, "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type2.kind + '", not "' + state.kind + '"'); } if (!type2.resolve(state.result, state.tag)) { throwError(state, "cannot resolve a node with !<" + state.tag + "> explicit tag"); } else { state.result = type2.construct(state.result, state.tag); if (state.anchor !== null) { state.anchorMap[state.anchor] = state.result; } } } if (state.listener !== null) { state.listener("close", state); } return state.tag !== null || state.anchor !== null || hasContent; } function readDocument(state) { var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch2; state.version = null; state.checkLineBreaks = state.legacy; state.tagMap = /* @__PURE__ */ Object.create(null); state.anchorMap = /* @__PURE__ */ Object.create(null); while ((ch2 = state.input.charCodeAt(state.position)) !== 0) { skipSeparationSpace(state, true, -1); ch2 = state.input.charCodeAt(state.position); if (state.lineIndent > 0 || ch2 !== 37) { break; } hasDirectives = true; ch2 = state.input.charCodeAt(++state.position); _position = state.position; while (ch2 !== 0 && !is_WS_OR_EOL(ch2)) { ch2 = state.input.charCodeAt(++state.position); } directiveName = state.input.slice(_position, state.position); directiveArgs = []; if (directiveName.length < 1) { throwError(state, "directive name must not be less than one character in length"); } while (ch2 !== 0) { while (is_WHITE_SPACE(ch2)) { ch2 = state.input.charCodeAt(++state.position); } if (ch2 === 35) { do { ch2 = state.input.charCodeAt(++state.position); } while (ch2 !== 0 && !is_EOL(ch2)); break; } if (is_EOL(ch2)) break; _position = state.position; while (ch2 !== 0 && !is_WS_OR_EOL(ch2)) { ch2 = state.input.charCodeAt(++state.position); } directiveArgs.push(state.input.slice(_position, state.position)); } if (ch2 !== 0) readLineBreak(state); if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { directiveHandlers[directiveName](state, directiveName, directiveArgs); } else { throwWarning(state, 'unknown document directive "' + directiveName + '"'); } } skipSeparationSpace(state, true, -1); if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) { state.position += 3; skipSeparationSpace(state, true, -1); } else if (hasDirectives) { throwError(state, "directives end mark is expected"); } composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); skipSeparationSpace(state, true, -1); if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { throwWarning(state, "non-ASCII line breaks are interpreted as content"); } state.documents.push(state.result); if (state.position === state.lineStart && testDocumentSeparator(state)) { if (state.input.charCodeAt(state.position) === 46) { state.position += 3; skipSeparationSpace(state, true, -1); } return; } if (state.position < state.length - 1) { throwError(state, "end of the stream or a document separator is expected"); } else { return; } } function loadDocuments(input, options) { input = String(input); options = options || {}; if (input.length !== 0) { if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) { input += "\n"; } if (input.charCodeAt(0) === 65279) { input = input.slice(1); } } var state = new State$1(input, options); var nullpos = input.indexOf("\0"); if (nullpos !== -1) { state.position = nullpos; throwError(state, "null byte is not allowed in input"); } state.input += "\0"; while (state.input.charCodeAt(state.position) === 32) { state.lineIndent += 1; state.position += 1; } while (state.position < state.length - 1) { readDocument(state); } return state.documents; } function loadAll$1(input, iterator2, options) { if (iterator2 !== null && typeof iterator2 === "object" && typeof options === "undefined") { options = iterator2; iterator2 = null; } var documents = loadDocuments(input, options); if (typeof iterator2 !== "function") { return documents; } for (var index2 = 0, length2 = documents.length; index2 < length2; index2 += 1) { iterator2(documents[index2]); } } function load$1(input, options) { var documents = loadDocuments(input, options); if (documents.length === 0) { return void 0; } else if (documents.length === 1) { return documents[0]; } throw new exception("expected a single document in the stream, but found more"); } var loadAll_1 = loadAll$1; var load_1 = load$1; var loader = { loadAll: loadAll_1, load: load_1 }; var _toString = Object.prototype.toString; var _hasOwnProperty = Object.prototype.hasOwnProperty; var CHAR_BOM = 65279; var CHAR_TAB = 9; var CHAR_LINE_FEED = 10; var CHAR_CARRIAGE_RETURN = 13; var CHAR_SPACE = 32; var CHAR_EXCLAMATION = 33; var CHAR_DOUBLE_QUOTE = 34; var CHAR_SHARP = 35; var CHAR_PERCENT = 37; var CHAR_AMPERSAND = 38; var CHAR_SINGLE_QUOTE = 39; var CHAR_ASTERISK = 42; var CHAR_COMMA = 44; var CHAR_MINUS = 45; var CHAR_COLON$1 = 58; var CHAR_EQUALS = 61; var CHAR_GREATER_THAN = 62; var CHAR_QUESTION = 63; var CHAR_COMMERCIAL_AT = 64; var CHAR_LEFT_SQUARE_BRACKET = 91; var CHAR_RIGHT_SQUARE_BRACKET = 93; var CHAR_GRAVE_ACCENT = 96; var CHAR_LEFT_CURLY_BRACKET = 123; var CHAR_VERTICAL_LINE = 124; var CHAR_RIGHT_CURLY_BRACKET = 125; var ESCAPE_SEQUENCES = {}; ESCAPE_SEQUENCES[0] = "\\0"; ESCAPE_SEQUENCES[7] = "\\a"; ESCAPE_SEQUENCES[8] = "\\b"; ESCAPE_SEQUENCES[9] = "\\t"; ESCAPE_SEQUENCES[10] = "\\n"; ESCAPE_SEQUENCES[11] = "\\v"; ESCAPE_SEQUENCES[12] = "\\f"; ESCAPE_SEQUENCES[13] = "\\r"; ESCAPE_SEQUENCES[27] = "\\e"; ESCAPE_SEQUENCES[34] = '\\"'; ESCAPE_SEQUENCES[92] = "\\\\"; ESCAPE_SEQUENCES[133] = "\\N"; ESCAPE_SEQUENCES[160] = "\\_"; ESCAPE_SEQUENCES[8232] = "\\L"; ESCAPE_SEQUENCES[8233] = "\\P"; var DEPRECATED_BOOLEANS_SYNTAX = [ "y", "Y", "yes", "Yes", "YES", "on", "On", "ON", "n", "N", "no", "No", "NO", "off", "Off", "OFF" ]; var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; function compileStyleMap(schema2, map2) { var result, keys2, index2, length2, tag, style, type2; if (map2 === null) return {}; result = {}; keys2 = Object.keys(map2); for (index2 = 0, length2 = keys2.length; index2 < length2; index2 += 1) { tag = keys2[index2]; style = String(map2[tag]); if (tag.slice(0, 2) === "!!") { tag = "tag:yaml.org,2002:" + tag.slice(2); } type2 = schema2.compiledTypeMap["fallback"][tag]; if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) { style = type2.styleAliases[style]; } result[tag] = style; } return result; } function encodeHex(character2) { var string, handle, length2; string = character2.toString(16).toUpperCase(); if (character2 <= 255) { handle = "x"; length2 = 2; } else if (character2 <= 65535) { handle = "u"; length2 = 4; } else if (character2 <= 4294967295) { handle = "U"; length2 = 8; } else { throw new exception("code point within a string may not be greater than 0xFFFFFFFF"); } return "\\" + handle + common.repeat("0", length2 - string.length) + string; } var QUOTING_TYPE_SINGLE = 1, QUOTING_TYPE_DOUBLE = 2; function State(options) { this.schema = options["schema"] || _default$2; this.indent = Math.max(1, options["indent"] || 2); this.noArrayIndent = options["noArrayIndent"] || false; this.skipInvalid = options["skipInvalid"] || false; this.flowLevel = common.isNothing(options["flowLevel"]) ? -1 : options["flowLevel"]; this.styleMap = compileStyleMap(this.schema, options["styles"] || null); this.sortKeys = options["sortKeys"] || false; this.lineWidth = options["lineWidth"] || 80; this.noRefs = options["noRefs"] || false; this.noCompatMode = options["noCompatMode"] || false; this.condenseFlow = options["condenseFlow"] || false; this.quotingType = options["quotingType"] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; this.forceQuotes = options["forceQuotes"] || false; this.replacer = typeof options["replacer"] === "function" ? options["replacer"] : null; this.implicitTypes = this.schema.compiledImplicit; this.explicitTypes = this.schema.compiledExplicit; this.tag = null; this.result = ""; this.duplicates = []; this.usedDuplicates = null; } function indentString(string, spaces) { var ind = common.repeat(" ", spaces), position2 = 0, next2 = -1, result = "", line2, length2 = string.length; while (position2 < length2) { next2 = string.indexOf("\n", position2); if (next2 === -1) { line2 = string.slice(position2); position2 = length2; } else { line2 = string.slice(position2, next2 + 1); position2 = next2 + 1; } if (line2.length && line2 !== "\n") result += ind; result += line2; } return result; } function generateNextLine(state, level) { return "\n" + common.repeat(" ", state.indent * level); } function testImplicitResolving(state, str2) { var index2, length2, type2; for (index2 = 0, length2 = state.implicitTypes.length; index2 < length2; index2 += 1) { type2 = state.implicitTypes[index2]; if (type2.resolve(str2)) { return true; } } return false; } function isWhitespace(c) { return c === CHAR_SPACE || c === CHAR_TAB; } function isPrintable(c) { return 32 <= c && c <= 126 || 161 <= c && c <= 55295 && c !== 8232 && c !== 8233 || 57344 <= c && c <= 65533 && c !== CHAR_BOM || 65536 <= c && c <= 1114111; } function isNsCharOrWhitespace(c) { return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED; } function isPlainSafe(c, prev2, inblock) { var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); return (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev2 === CHAR_COLON$1 && !cIsNsChar) || isNsCharOrWhitespace(prev2) && !isWhitespace(prev2) && c === CHAR_SHARP || prev2 === CHAR_COLON$1 && cIsNsChar; } function isPlainSafeFirst(c) { return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON$1 && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT; } function isPlainSafeLast(c) { return !isWhitespace(c) && c !== CHAR_COLON$1; } function codePointAt(string, pos) { var first = string.charCodeAt(pos), second; if (first >= 55296 && first <= 56319 && pos + 1 < string.length) { second = string.charCodeAt(pos + 1); if (second >= 56320 && second <= 57343) { return (first - 55296) * 1024 + second - 56320 + 65536; } } return first; } function needIndentIndicator(string) { var leadingSpaceRe = /^\n* /; return leadingSpaceRe.test(string); } var STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5; function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) { var i2; var char2 = 0; var prevChar = null; var hasLineBreak = false; var hasFoldableLine = false; var shouldTrackWidth = lineWidth !== -1; var previousLineBreak = -1; var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1)); if (singleLineOnly || forceQuotes) { for (i2 = 0; i2 < string.length; char2 >= 65536 ? i2 += 2 : i2++) { char2 = codePointAt(string, i2); if (!isPrintable(char2)) { return STYLE_DOUBLE; } plain = plain && isPlainSafe(char2, prevChar, inblock); prevChar = char2; } } else { for (i2 = 0; i2 < string.length; char2 >= 65536 ? i2 += 2 : i2++) { char2 = codePointAt(string, i2); if (char2 === CHAR_LINE_FEED) { hasLineBreak = true; if (shouldTrackWidth) { hasFoldableLine = hasFoldableLine || i2 - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " "; previousLineBreak = i2; } } else if (!isPrintable(char2)) { return STYLE_DOUBLE; } plain = plain && isPlainSafe(char2, prevChar, inblock); prevChar = char2; } hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i2 - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " "); } if (!hasLineBreak && !hasFoldableLine) { if (plain && !forceQuotes && !testAmbiguousType(string)) { return STYLE_PLAIN; } return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; } if (indentPerLevel > 9 && needIndentIndicator(string)) { return STYLE_DOUBLE; } if (!forceQuotes) { return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; } return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; } function writeScalar(state, string, level, iskey, inblock) { state.dump = function() { if (string.length === 0) { return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; } if (!state.noCompatMode) { if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { return state.quotingType === QUOTING_TYPE_DOUBLE ? '"' + string + '"' : "'" + string + "'"; } } var indent = state.indent * Math.max(1, level); var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel; function testAmbiguity(string2) { return testImplicitResolving(state, string2); } switch (chooseScalarStyle( string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock )) { case STYLE_PLAIN: return string; case STYLE_SINGLE: return "'" + string.replace(/'/g, "''") + "'"; case STYLE_LITERAL: return "|" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent)); case STYLE_FOLDED: return ">" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); case STYLE_DOUBLE: return '"' + escapeString(string) + '"'; default: throw new exception("impossible error: invalid scalar style"); } }(); } function blockHeader(string, indentPerLevel) { var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ""; var clip = string[string.length - 1] === "\n"; var keep = clip && (string[string.length - 2] === "\n" || string === "\n"); var chomp = keep ? "+" : clip ? "" : "-"; return indentIndicator + chomp + "\n"; } function dropEndingNewline(string) { return string[string.length - 1] === "\n" ? string.slice(0, -1) : string; } function foldString(string, width) { var lineRe = /(\n+)([^\n]*)/g; var result = function() { var nextLF = string.indexOf("\n"); nextLF = nextLF !== -1 ? nextLF : string.length; lineRe.lastIndex = nextLF; return foldLine(string.slice(0, nextLF), width); }(); var prevMoreIndented = string[0] === "\n" || string[0] === " "; var moreIndented; var match2; while (match2 = lineRe.exec(string)) { var prefix2 = match2[1], line2 = match2[2]; moreIndented = line2[0] === " "; result += prefix2 + (!prevMoreIndented && !moreIndented && line2 !== "" ? "\n" : "") + foldLine(line2, width); prevMoreIndented = moreIndented; } return result; } function foldLine(line2, width) { if (line2 === "" || line2[0] === " ") return line2; var breakRe = / [^ ]/g; var match2; var start = 0, end, curr = 0, next2 = 0; var result = ""; while (match2 = breakRe.exec(line2)) { next2 = match2.index; if (next2 - start > width) { end = curr > start ? curr : next2; result += "\n" + line2.slice(start, end); start = end + 1; } curr = next2; } result += "\n"; if (line2.length - start > width && curr > start) { result += line2.slice(start, curr) + "\n" + line2.slice(curr + 1); } else { result += line2.slice(start); } return result.slice(1); } function escapeString(string) { var result = ""; var char2 = 0; var escapeSeq; for (var i2 = 0; i2 < string.length; char2 >= 65536 ? i2 += 2 : i2++) { char2 = codePointAt(string, i2); escapeSeq = ESCAPE_SEQUENCES[char2]; if (!escapeSeq && isPrintable(char2)) { result += string[i2]; if (char2 >= 65536) result += string[i2 + 1]; } else { result += escapeSeq || encodeHex(char2); } } return result; } function writeFlowSequence(state, level, object) { var _result = "", _tag = state.tag, index2, length2, value; for (index2 = 0, length2 = object.length; index2 < length2; index2 += 1) { value = object[index2]; if (state.replacer) { value = state.replacer.call(object, String(index2), value); } if (writeNode(state, level, value, false, false) || typeof value === "undefined" && writeNode(state, level, null, false, false)) { if (_result !== "") _result += "," + (!state.condenseFlow ? " " : ""); _result += state.dump; } } state.tag = _tag; state.dump = "[" + _result + "]"; } function writeBlockSequence(state, level, object, compact2) { var _result = "", _tag = state.tag, index2, length2, value; for (index2 = 0, length2 = object.length; index2 < length2; index2 += 1) { value = object[index2]; if (state.replacer) { value = state.replacer.call(object, String(index2), value); } if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === "undefined" && writeNode(state, level + 1, null, true, true, false, true)) { if (!compact2 || _result !== "") { _result += generateNextLine(state, level); } if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { _result += "-"; } else { _result += "- "; } _result += state.dump; } } state.tag = _tag; state.dump = _result || "[]"; } function writeFlowMapping(state, level, object) { var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index2, length2, objectKey, objectValue, pairBuffer; for (index2 = 0, length2 = objectKeyList.length; index2 < length2; index2 += 1) { pairBuffer = ""; if (_result !== "") pairBuffer += ", "; if (state.condenseFlow) pairBuffer += '"'; objectKey = objectKeyList[index2]; objectValue = object[objectKey]; if (state.replacer) { objectValue = state.replacer.call(object, objectKey, objectValue); } if (!writeNode(state, level, objectKey, false, false)) { continue; } if (state.dump.length > 1024) pairBuffer += "? "; pairBuffer += state.dump + (state.condenseFlow ? '"' : "") + ":" + (state.condenseFlow ? "" : " "); if (!writeNode(state, level, objectValue, false, false)) { continue; } pairBuffer += state.dump; _result += pairBuffer; } state.tag = _tag; state.dump = "{" + _result + "}"; } function writeBlockMapping(state, level, object, compact2) { var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index2, length2, objectKey, objectValue, explicitPair, pairBuffer; if (state.sortKeys === true) { objectKeyList.sort(); } else if (typeof state.sortKeys === "function") { objectKeyList.sort(state.sortKeys); } else if (state.sortKeys) { throw new exception("sortKeys must be a boolean or a function"); } for (index2 = 0, length2 = objectKeyList.length; index2 < length2; index2 += 1) { pairBuffer = ""; if (!compact2 || _result !== "") { pairBuffer += generateNextLine(state, level); } objectKey = objectKeyList[index2]; objectValue = object[objectKey]; if (state.replacer) { objectValue = state.replacer.call(object, objectKey, objectValue); } if (!writeNode(state, level + 1, objectKey, true, true, true)) { continue; } explicitPair = state.tag !== null && state.tag !== "?" || state.dump && state.dump.length > 1024; if (explicitPair) { if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { pairBuffer += "?"; } else { pairBuffer += "? "; } } pairBuffer += state.dump; if (explicitPair) { pairBuffer += generateNextLine(state, level); } if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { continue; } if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { pairBuffer += ":"; } else { pairBuffer += ": "; } pairBuffer += state.dump; _result += pairBuffer; } state.tag = _tag; state.dump = _result || "{}"; } function detectType(state, object, explicit) { var _result, typeList, index2, length2, type2, style; typeList = explicit ? state.explicitTypes : state.implicitTypes; for (index2 = 0, length2 = typeList.length; index2 < length2; index2 += 1) { type2 = typeList[index2]; if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === "object" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) { if (explicit) { if (type2.multi && type2.representName) { state.tag = type2.representName(object); } else { state.tag = type2.tag; } } else { state.tag = "?"; } if (type2.represent) { style = state.styleMap[type2.tag] || type2.defaultStyle; if (_toString.call(type2.represent) === "[object Function]") { _result = type2.represent(object, style); } else if (_hasOwnProperty.call(type2.represent, style)) { _result = type2.represent[style](object, style); } else { throw new exception("!<" + type2.tag + '> tag resolver accepts not "' + style + '" style'); } state.dump = _result; } return true; } } return false; } function writeNode(state, level, object, block2, compact2, iskey, isblockseq) { state.tag = null; state.dump = object; if (!detectType(state, object, false)) { detectType(state, object, true); } var type2 = _toString.call(state.dump); var inblock = block2; var tagStr; if (block2) { block2 = state.flowLevel < 0 || state.flowLevel > level; } var objectOrArray = type2 === "[object Object]" || type2 === "[object Array]", duplicateIndex, duplicate; if (objectOrArray) { duplicateIndex = state.duplicates.indexOf(object); duplicate = duplicateIndex !== -1; } if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) { compact2 = false; } if (duplicate && state.usedDuplicates[duplicateIndex]) { state.dump = "*ref_" + duplicateIndex; } else { if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { state.usedDuplicates[duplicateIndex] = true; } if (type2 === "[object Object]") { if (block2 && Object.keys(state.dump).length !== 0) { writeBlockMapping(state, level, state.dump, compact2); if (duplicate) { state.dump = "&ref_" + duplicateIndex + state.dump; } } else { writeFlowMapping(state, level, state.dump); if (duplicate) { state.dump = "&ref_" + duplicateIndex + " " + state.dump; } } } else if (type2 === "[object Array]") { if (block2 && state.dump.length !== 0) { if (state.noArrayIndent && !isblockseq && level > 0) { writeBlockSequence(state, level - 1, state.dump, compact2); } else { writeBlockSequence(state, level, state.dump, compact2); } if (duplicate) { state.dump = "&ref_" + duplicateIndex + state.dump; } } else { writeFlowSequence(state, level, state.dump); if (duplicate) { state.dump = "&ref_" + duplicateIndex + " " + state.dump; } } } else if (type2 === "[object String]") { if (state.tag !== "?") { writeScalar(state, state.dump, level, iskey, inblock); } } else if (type2 === "[object Undefined]") { return false; } else { if (state.skipInvalid) return false; throw new exception("unacceptable kind of an object to dump " + type2); } if (state.tag !== null && state.tag !== "?") { tagStr = encodeURI( state.tag[0] === "!" ? state.tag.slice(1) : state.tag ).replace(/!/g, "%21"); if (state.tag[0] === "!") { tagStr = "!" + tagStr; } else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") { tagStr = "!!" + tagStr.slice(18); } else { tagStr = "!<" + tagStr + ">"; } state.dump = tagStr + " " + state.dump; } } return true; } function getDuplicateReferences(object, state) { var objects = [], duplicatesIndexes = [], index2, length2; inspectNode(object, objects, duplicatesIndexes); for (index2 = 0, length2 = duplicatesIndexes.length; index2 < length2; index2 += 1) { state.duplicates.push(objects[duplicatesIndexes[index2]]); } state.usedDuplicates = new Array(length2); } function inspectNode(object, objects, duplicatesIndexes) { var objectKeyList, index2, length2; if (object !== null && typeof object === "object") { index2 = objects.indexOf(object); if (index2 !== -1) { if (duplicatesIndexes.indexOf(index2) === -1) { duplicatesIndexes.push(index2); } } else { objects.push(object); if (Array.isArray(object)) { for (index2 = 0, length2 = object.length; index2 < length2; index2 += 1) { inspectNode(object[index2], objects, duplicatesIndexes); } } else { objectKeyList = Object.keys(object); for (index2 = 0, length2 = objectKeyList.length; index2 < length2; index2 += 1) { inspectNode(object[objectKeyList[index2]], objects, duplicatesIndexes); } } } } } function dump$1(input, options) { options = options || {}; var state = new State(options); if (!state.noRefs) getDuplicateReferences(input, state); var value = input; if (state.replacer) { value = state.replacer.call({ "": value }, "", value); } if (writeNode(state, 0, value, true, true)) return state.dump + "\n"; return ""; } var dump_1 = dump$1; var dumper = { dump: dump_1 }; function renamed(from2, to) { return function() { throw new Error("Function yaml." + from2 + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default."); }; } var Type = type; var Schema = schema; var FAILSAFE_SCHEMA = failsafe; var JSON_SCHEMA = json; var CORE_SCHEMA = core$5; var DEFAULT_SCHEMA = _default$2; var load = loader.load; var loadAll = loader.loadAll; var dump = dumper.dump; var YAMLException = exception; var types = { binary, float, map: map$1, null: _null, pairs, set, timestamp, bool, int: int$1, merge, omap, seq, str }; var safeLoad = renamed("safeLoad", "load"); var safeLoadAll = renamed("safeLoadAll", "loadAll"); var safeDump = renamed("safeDump", "dump"); var jsYaml = { Type, Schema, FAILSAFE_SCHEMA, JSON_SCHEMA, CORE_SCHEMA, DEFAULT_SCHEMA, load, loadAll, dump, YAMLException, types, safeLoad, safeLoadAll, safeDump }; function logException(e2) { } const kYamlMetadataTitleRegex = /\ntitle:(.*)\n/; function yamlFrontMatter(doc2) { const firstYaml = firstYamlNode(doc2); if (firstYaml) { return stripYamlDelimeters(firstYaml.node.textContent); } else { return ""; } } function applyYamlFrontMatter(view, yamlText) { const schema2 = view.state.schema; const updatedYaml = `--- ${yamlText}---`; const updatedYamlNode = schema2.nodes.yaml_metadata.createAndFill({}, schema2.text(updatedYaml)); if (updatedYamlNode) { const tr = view.state.tr; const firstYaml = firstYamlNode(view.state.doc); if (firstYaml) { tr.replaceRangeWith(firstYaml.pos, firstYaml.pos + firstYaml.node.nodeSize, updatedYamlNode); } else { tr.insert(1, updatedYamlNode); } view.dispatch(tr); } } function yamlMetadataNodes(doc2) { return findTopLevelBodyNodes(doc2, isYamlMetadataNode); } function isYamlMetadataNode(node2) { return node2.type === node2.type.schema.nodes.yaml_metadata; } function titleFromState(state) { const yamlNodes = yamlMetadataNodes(state.doc); for (const yamlNode of yamlNodes) { const title = titleFromYamlMetadataNode(yamlNode.node); if (title) { return title; } } return ""; } function titleFromYamlMetadataNode(node2) { const titleMatch = node2.textContent.match(kYamlMetadataTitleRegex); if (titleMatch) { let title = titleMatch[1].trim(); title = title.replace(/^["']|["']$/g, ""); title = title.replace(/\\"/g, '"'); title = title.replace(/''/g, "'"); return title; } else { return null; } } function valueFromYamlText(name, yamlText) { const yamlMetadataNameValueRegex = new RegExp(`(?:\\n|^)\\s*${name}:(.*)(?:\\n|$)`); const valueMatch = yamlText.match(yamlMetadataNameValueRegex); if (valueMatch) { const valueStr = valueMatch[1].trim(); const value = parseYaml(valueStr); return value; } else { return null; } } const kFirstYamlBlockRegex = /\s*---[ \t]*\n(?![ \t]*\n)([\W\w]*?)\n[\t >]*(?:---|\.\.\.)[ \t]*/m; function firstYamlBlock(code2) { const match2 = code2.match(kFirstYamlBlockRegex); if (match2 && match2.index === 0) { const yamlCode = match2[1]; const yamlParsed = parseYaml(yamlCode); if (typeof yamlParsed === "object") { return yamlParsed; } else { return null; } } else { return null; } } function parseYaml(yamlCode) { try { const yamlParsed = jsYaml.load(yamlCode, { onWarning: logException }); return yamlParsed; } catch (e2) { return null; } } function stripYamlDelimeters(yamlCode) { return yamlCode.replace(/^[ \t-]+\n/, "").replace(/\n[ \t-.]+$/, ""); } function parseYamlNodes(doc2) { const yamlNodes = yamlMetadataNodes(doc2); const parsedYamlNodes = yamlNodes.map((node2) => { const yamlText = node2.node.textContent; const yamlCode = stripYamlDelimeters(yamlText); return { yamlCode, yaml: parseYaml(yamlCode), node: node2 }; }); return parsedYamlNodes; } function firstYamlNode(doc2) { const yamlNodes = yamlMetadataNodes(doc2); if (yamlNodes && yamlNodes.length > 0) { return yamlNodes[0]; } else { return ""; } } const kPresentationEditorLocationTitle = "title"; const kPresentationEditorLocationHeading = "heading"; const kPresentationEditorLocationHr = "hr"; const kPresentationEditorLocationCursor = "cursor"; function getPresentationEditorLocation(state) { const cursorPos = state.selection.from; let autoSlideLevel = Number.MAX_VALUE; const items = []; const schema2 = state.schema; const bodyNodes = findTopLevelBodyNodes(state.doc, () => true); if (bodyNodes.length === 0) { return { items, auto_slide_level: 0, toc: false }; } const title = titleFromState(state); if (title) { items.push({ type: kPresentationEditorLocationTitle, level: 0, pos: bodyNodes[0].pos }); } const toc = !!valueFromYamlText("toc", yamlFrontMatter(state.doc)); let pendingAutoSlideLevel = 0; let foundCursor = false; for (const nodeWithPos of bodyNodes) { if (!foundCursor && nodeWithPos.pos > cursorPos) { foundCursor = true; items.push({ type: kPresentationEditorLocationCursor, level: 0, pos: nodeWithPos.pos }); } const node2 = nodeWithPos.node; if (node2.type === schema2.nodes.heading) { const level = node2.attrs.level || 0; if (level < autoSlideLevel) { pendingAutoSlideLevel = level; } else { pendingAutoSlideLevel = 0; } items.push({ type: kPresentationEditorLocationHeading, level, pos: nodeWithPos.pos }); } else if (node2.type === schema2.nodes.horizontal_rule) { items.push({ type: kPresentationEditorLocationHr, level: 0, pos: nodeWithPos.pos }); pendingAutoSlideLevel = 0; } else if (pendingAutoSlideLevel > 0) { autoSlideLevel = pendingAutoSlideLevel; pendingAutoSlideLevel = 0; } } if (!foundCursor && items.length > 0) { items.push({ type: kPresentationEditorLocationCursor, level: 0, pos: items[items.length - 1].pos }); } if (pendingAutoSlideLevel > 0) { autoSlideLevel = pendingAutoSlideLevel; } if (autoSlideLevel === Number.MAX_VALUE) { autoSlideLevel = 0; } return { items, auto_slide_level: autoSlideLevel, toc }; } function positionForPresentationEditorLocation(state, location) { const editorItems = getPresentationEditorLocation(state).items.filter((item) => item.type !== kPresentationEditorLocationCursor); const cursorIdx = location.items.findIndex( (item) => item.type === kPresentationEditorLocationCursor ); if (cursorIdx >= 0) { const locationItem = editorItems[cursorIdx]; return locationItem.pos; } return -1; } class GapCursor extends Selection { constructor($pos) { super($pos, $pos); } map(doc2, mapping) { let $pos = doc2.resolve(mapping.map(this.head)); return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos); } content() { return Slice.empty; } eq(other) { return other instanceof GapCursor && other.head == this.head; } toJSON() { return { type: "gapcursor", pos: this.head }; } static fromJSON(doc2, json2) { if (typeof json2.pos != "number") throw new RangeError("Invalid input for GapCursor.fromJSON"); return new GapCursor(doc2.resolve(json2.pos)); } getBookmark() { return new GapBookmark(this.anchor); } static valid($pos) { let parent = $pos.parent; if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos)) return false; let override = parent.type.spec.allowGapCursor; if (override != null) return override; let deflt = parent.contentMatchAt($pos.index()).defaultType; return deflt && deflt.isTextblock; } static findGapCursorFrom($pos, dir, mustMove = false) { search: for (; ; ) { if (!mustMove && GapCursor.valid($pos)) return $pos; let pos = $pos.pos, next2 = null; for (let d2 = $pos.depth; ; d2--) { let parent = $pos.node(d2); if (dir > 0 ? $pos.indexAfter(d2) < parent.childCount : $pos.index(d2) > 0) { next2 = parent.child(dir > 0 ? $pos.indexAfter(d2) : $pos.index(d2) - 1); break; } else if (d2 == 0) { return null; } pos += dir; let $cur = $pos.doc.resolve(pos); if (GapCursor.valid($cur)) return $cur; } for (; ; ) { let inside = dir > 0 ? next2.firstChild : next2.lastChild; if (!inside) { if (next2.isAtom && !next2.isText && !NodeSelection.isSelectable(next2)) { $pos = $pos.doc.resolve(pos + next2.nodeSize * dir); mustMove = false; continue search; } break; } next2 = inside; pos += dir; let $cur = $pos.doc.resolve(pos); if (GapCursor.valid($cur)) return $cur; } return null; } } } GapCursor.prototype.visible = false; GapCursor.findFrom = GapCursor.findGapCursorFrom; Selection.jsonID("gapcursor", GapCursor); class GapBookmark { constructor(pos) { this.pos = pos; } map(mapping) { return new GapBookmark(mapping.map(this.pos)); } resolve(doc2) { let $pos = doc2.resolve(this.pos); return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos); } } function closedBefore($pos) { for (let d2 = $pos.depth; d2 >= 0; d2--) { let index2 = $pos.index(d2), parent = $pos.node(d2); if (index2 == 0) { if (parent.type.spec.isolating) return true; continue; } for (let before = parent.child(index2 - 1); ; before = before.lastChild) { if (before.childCount == 0 && !before.inlineContent || before.isAtom || before.type.spec.isolating) return true; if (before.inlineContent) return false; } } return true; } function closedAfter($pos) { for (let d2 = $pos.depth; d2 >= 0; d2--) { let index2 = $pos.indexAfter(d2), parent = $pos.node(d2); if (index2 == parent.childCount) { if (parent.type.spec.isolating) return true; continue; } for (let after = parent.child(index2); ; after = after.firstChild) { if (after.childCount == 0 && !after.inlineContent || after.isAtom || after.type.spec.isolating) return true; if (after.inlineContent) return false; } } return true; } function gapCursor() { return new Plugin({ props: { decorations: drawGapCursor, createSelectionBetween(_view, $anchor, $head) { return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null; }, handleClick, handleKeyDown, handleDOMEvents: { beforeinput } } }); } const handleKeyDown = keydownHandler({ "ArrowLeft": arrow("horiz", -1), "ArrowRight": arrow("horiz", 1), "ArrowUp": arrow("vert", -1), "ArrowDown": arrow("vert", 1) }); function arrow(axis, dir) { const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left"; return function(state, dispatch, view) { let sel = state.selection; let $start = dir > 0 ? sel.$to : sel.$from, mustMove = sel.empty; if (sel instanceof TextSelection) { if (!view.endOfTextblock(dirStr) || $start.depth == 0) return false; mustMove = false; $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before()); } let $found = GapCursor.findGapCursorFrom($start, dir, mustMove); if (!$found) return false; if (dispatch) dispatch(state.tr.setSelection(new GapCursor($found))); return true; }; } function handleClick(view, pos, event) { if (!view || !view.editable) return false; let $pos = view.state.doc.resolve(pos); if (!GapCursor.valid($pos)) return false; let clickPos = view.posAtCoords({ left: event.clientX, top: event.clientY }); if (clickPos && clickPos.inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside))) return false; view.dispatch(view.state.tr.setSelection(new GapCursor($pos))); return true; } function beforeinput(view, event) { if (event.inputType != "insertCompositionText" || !(view.state.selection instanceof GapCursor)) return false; let { $from } = view.state.selection; let insert2 = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text); if (!insert2) return false; let frag = Fragment.empty; for (let i2 = insert2.length - 1; i2 >= 0; i2--) frag = Fragment.from(insert2[i2].createAndFill(null, frag)); let tr = view.state.tr.replace($from.pos, $from.pos, new Slice(frag, 0, 0)); tr.setSelection(TextSelection.near(tr.doc.resolve($from.pos + 1))); view.dispatch(tr); return false; } function drawGapCursor(state) { if (!(state.selection instanceof GapCursor)) return null; let node2 = document.createElement("div"); node2.className = "ProseMirror-gapcursor"; return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node2, { key: "gapcursor" })]); } function codeViewArrowHandler(dir, codeViewNodeTypes) { return (state, dispatch, view) => { if (state.selection.empty && !(state.selection instanceof GapCursor) && view && view.endOfTextblock(dir)) { const side = dir === "left" || dir === "up" ? -1 : 1; const $head = state.selection.$head; const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side); if (nextPos.$head && codeViewNodeTypes.includes(nextPos.$head.parent.type.name)) { if ((dir === "up" || dir === "down") && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) { return false; } if (dispatch) { dispatch(state.tr.setSelection(nextPos)); } return true; } } return false; }; } function verticalArrowCanAdvanceWithinTextBlock(selection, dir) { const $head = selection.$head; const node2 = $head.node(); if (node2.isTextblock) { const cursorOffset = $head.parentOffset; const nodeText = node2.textContent; if (dir === "down" && nodeText.substr(cursorOffset).includes("\n")) { return true; } if (dir === "up" && nodeText.substr(0, cursorOffset).includes("\n")) { return true; } } return false; } function handleArrowToAdjacentNode(nodePos, dir, state, dispatch) { const node2 = state.doc.nodeAt(nodePos); if (!node2) { return false; } const $pos = state.doc.resolve(nodePos); const prevNodeSelectable = () => { return $pos.nodeBefore && $pos.nodeBefore.type.spec.selectable; }; const nextNodeSelectable = () => { const nextNode = state.doc.nodeAt(nodePos + node2.nodeSize); return nextNode == null ? void 0 : nextNode.type.spec.selectable; }; const prevNodeTextBlock = () => { return $pos.nodeBefore && $pos.nodeBefore.isTextblock; }; const nextNodeTextBlock = () => { const nextNode = state.doc.nodeAt(nodePos + node2.nodeSize); return nextNode == null ? void 0 : nextNode.isTextblock; }; const prevNodeCode = () => { return $pos.nodeBefore && !!$pos.nodeBefore.type.spec.code; }; const nextNodeCode = () => { const nextNode = state.doc.nodeAt(nodePos + node2.nodeSize); return !!(nextNode == null ? void 0 : nextNode.type.spec.code); }; const tr = state.tr; let selection; if (dir < 0 && !$pos.nodeBefore) { selection = new GapCursor(tr.doc.resolve(nodePos)); } else if (dir > 0 && !$pos.nodeAfter) { const cursorPos = nodePos + node2.nodeSize; selection = new GapCursor(tr.doc.resolve(cursorPos)); } else if (dir < 0 && prevNodeSelectable()) { const prevNodePos = nodePos - $pos.nodeBefore.nodeSize; selection = NodeSelection.create(tr.doc, prevNodePos); } else if (dir >= 0 && nextNodeSelectable()) { const nextNodePos = nodePos + node2.nodeSize; selection = NodeSelection.create(tr.doc, nextNodePos); } else if (dir < 0 && (!prevNodeTextBlock() || prevNodeCode())) { selection = new GapCursor(tr.doc.resolve(nodePos)); } else if (dir >= 0 && (!nextNodeTextBlock() || nextNodeCode())) { const endPos = nodePos + node2.nodeSize; selection = new GapCursor(tr.doc.resolve(endPos)); } else { const targetPos = nodePos + (dir < 0 ? 0 : node2.nodeSize); const targetNode = tr.doc.nodeAt(targetPos); if (targetNode) { selection = Selection.near(tr.doc.resolve(targetPos), dir); } } if (selection) { if (dispatch) { tr.setSelection(selection); dispatch(tr); } return true; } else { return false; } } var DocumentUri; (function(DocumentUri2) { function is(value) { return typeof value === "string"; } DocumentUri2.is = is; })(DocumentUri || (DocumentUri = {})); var URI; (function(URI2) { function is(value) { return typeof value === "string"; } URI2.is = is; })(URI || (URI = {})); var integer; (function(integer2) { integer2.MIN_VALUE = -2147483648; integer2.MAX_VALUE = 2147483647; function is(value) { return typeof value === "number" && integer2.MIN_VALUE <= value && value <= integer2.MAX_VALUE; } integer2.is = is; })(integer || (integer = {})); var uinteger; (function(uinteger2) { uinteger2.MIN_VALUE = 0; uinteger2.MAX_VALUE = 2147483647; function is(value) { return typeof value === "number" && uinteger2.MIN_VALUE <= value && value <= uinteger2.MAX_VALUE; } uinteger2.is = is; })(uinteger || (uinteger = {})); var Position; (function(Position2) { function create2(line2, character2) { if (line2 === Number.MAX_VALUE) { line2 = uinteger.MAX_VALUE; } if (character2 === Number.MAX_VALUE) { character2 = uinteger.MAX_VALUE; } return { line: line2, character: character2 }; } Position2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character); } Position2.is = is; })(Position || (Position = {})); var Range$a; (function(Range2) { function create2(one, two, three, four) { if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) { return { start: Position.create(one, two), end: Position.create(three, four) }; } else if (Position.is(one) && Position.is(two)) { return { start: one, end: two }; } else { throw new Error("Range#create called with invalid arguments[".concat(one, ", ").concat(two, ", ").concat(three, ", ").concat(four, "]")); } } Range2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end); } Range2.is = is; })(Range$a || (Range$a = {})); var Location; (function(Location2) { function create2(uri, range2) { return { uri, range: range2 }; } Location2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Range$a.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri)); } Location2.is = is; })(Location || (Location = {})); var LocationLink; (function(LocationLink2) { function create2(targetUri, targetRange, targetSelectionRange, originSelectionRange) { return { targetUri, targetRange, targetSelectionRange, originSelectionRange }; } LocationLink2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Range$a.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range$a.is(candidate.targetSelectionRange) && (Range$a.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange)); } LocationLink2.is = is; })(LocationLink || (LocationLink = {})); var Color; (function(Color2) { function create2(red, green, blue, alpha2) { return { red, green, blue, alpha: alpha2 }; } Color2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1); } Color2.is = is; })(Color || (Color = {})); var ColorInformation; (function(ColorInformation2) { function create2(range2, color) { return { range: range2, color }; } ColorInformation2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Range$a.is(candidate.range) && Color.is(candidate.color); } ColorInformation2.is = is; })(ColorInformation || (ColorInformation = {})); var ColorPresentation; (function(ColorPresentation2) { function create2(label, textEdit, additionalTextEdits) { return { label, textEdit, additionalTextEdits }; } ColorPresentation2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is)); } ColorPresentation2.is = is; })(ColorPresentation || (ColorPresentation = {})); var FoldingRangeKind; (function(FoldingRangeKind2) { FoldingRangeKind2.Comment = "comment"; FoldingRangeKind2.Imports = "imports"; FoldingRangeKind2.Region = "region"; })(FoldingRangeKind || (FoldingRangeKind = {})); var FoldingRange; (function(FoldingRange2) { function create2(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) { var result = { startLine, endLine }; if (Is.defined(startCharacter)) { result.startCharacter = startCharacter; } if (Is.defined(endCharacter)) { result.endCharacter = endCharacter; } if (Is.defined(kind)) { result.kind = kind; } if (Is.defined(collapsedText)) { result.collapsedText = collapsedText; } return result; } FoldingRange2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind)); } FoldingRange2.is = is; })(FoldingRange || (FoldingRange = {})); var DiagnosticRelatedInformation; (function(DiagnosticRelatedInformation2) { function create2(location, message) { return { location, message }; } DiagnosticRelatedInformation2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message); } DiagnosticRelatedInformation2.is = is; })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {})); var DiagnosticSeverity; (function(DiagnosticSeverity2) { DiagnosticSeverity2.Error = 1; DiagnosticSeverity2.Warning = 2; DiagnosticSeverity2.Information = 3; DiagnosticSeverity2.Hint = 4; })(DiagnosticSeverity || (DiagnosticSeverity = {})); var DiagnosticTag; (function(DiagnosticTag2) { DiagnosticTag2.Unnecessary = 1; DiagnosticTag2.Deprecated = 2; })(DiagnosticTag || (DiagnosticTag = {})); var CodeDescription; (function(CodeDescription2) { function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.string(candidate.href); } CodeDescription2.is = is; })(CodeDescription || (CodeDescription = {})); var Diagnostic; (function(Diagnostic2) { function create2(range2, message, severity, code2, source, relatedInformation) { var result = { range: range2, message }; if (Is.defined(severity)) { result.severity = severity; } if (Is.defined(code2)) { result.code = code2; } if (Is.defined(source)) { result.source = source; } if (Is.defined(relatedInformation)) { result.relatedInformation = relatedInformation; } return result; } Diagnostic2.create = create2; function is(value) { var _a; var candidate = value; return Is.defined(candidate) && Range$a.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is)); } Diagnostic2.is = is; })(Diagnostic || (Diagnostic = {})); var Command; (function(Command2) { function create2(title, command) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } var result = { title, command }; if (Is.defined(args) && args.length > 0) { result.arguments = args; } return result; } Command2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command); } Command2.is = is; })(Command || (Command = {})); var TextEdit; (function(TextEdit2) { function replace2(range2, newText) { return { range: range2, newText }; } TextEdit2.replace = replace2; function insert2(position2, newText) { return { range: { start: position2, end: position2 }, newText }; } TextEdit2.insert = insert2; function del2(range2) { return { range: range2, newText: "" }; } TextEdit2.del = del2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range$a.is(candidate.range); } TextEdit2.is = is; })(TextEdit || (TextEdit = {})); var ChangeAnnotation; (function(ChangeAnnotation2) { function create2(label, needsConfirmation, description) { var result = { label }; if (needsConfirmation !== void 0) { result.needsConfirmation = needsConfirmation; } if (description !== void 0) { result.description = description; } return result; } ChangeAnnotation2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0); } ChangeAnnotation2.is = is; })(ChangeAnnotation || (ChangeAnnotation = {})); var ChangeAnnotationIdentifier; (function(ChangeAnnotationIdentifier2) { function is(value) { var candidate = value; return Is.string(candidate); } ChangeAnnotationIdentifier2.is = is; })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {})); var AnnotatedTextEdit; (function(AnnotatedTextEdit2) { function replace2(range2, newText, annotation) { return { range: range2, newText, annotationId: annotation }; } AnnotatedTextEdit2.replace = replace2; function insert2(position2, newText, annotation) { return { range: { start: position2, end: position2 }, newText, annotationId: annotation }; } AnnotatedTextEdit2.insert = insert2; function del2(range2, annotation) { return { range: range2, newText: "", annotationId: annotation }; } AnnotatedTextEdit2.del = del2; function is(value) { var candidate = value; return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId)); } AnnotatedTextEdit2.is = is; })(AnnotatedTextEdit || (AnnotatedTextEdit = {})); var TextDocumentEdit; (function(TextDocumentEdit2) { function create2(textDocument, edits) { return { textDocument, edits }; } TextDocumentEdit2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits); } TextDocumentEdit2.is = is; })(TextDocumentEdit || (TextDocumentEdit = {})); var CreateFile; (function(CreateFile2) { function create2(uri, options, annotation) { var result = { kind: "create", uri }; if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) { result.options = options; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } CreateFile2.create = create2; function is(value) { var candidate = value; return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId)); } CreateFile2.is = is; })(CreateFile || (CreateFile = {})); var RenameFile; (function(RenameFile2) { function create2(oldUri, newUri, options, annotation) { var result = { kind: "rename", oldUri, newUri }; if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) { result.options = options; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } RenameFile2.create = create2; function is(value) { var candidate = value; return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId)); } RenameFile2.is = is; })(RenameFile || (RenameFile = {})); var DeleteFile; (function(DeleteFile2) { function create2(uri, options, annotation) { var result = { kind: "delete", uri }; if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) { result.options = options; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } DeleteFile2.create = create2; function is(value) { var candidate = value; return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId)); } DeleteFile2.is = is; })(DeleteFile || (DeleteFile = {})); var WorkspaceEdit; (function(WorkspaceEdit2) { function is(value) { var candidate = value; return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every(function(change) { if (Is.string(change.kind)) { return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change); } else { return TextDocumentEdit.is(change); } })); } WorkspaceEdit2.is = is; })(WorkspaceEdit || (WorkspaceEdit = {})); var TextEditChangeImpl = function() { function TextEditChangeImpl2(edits, changeAnnotations) { this.edits = edits; this.changeAnnotations = changeAnnotations; } TextEditChangeImpl2.prototype.insert = function(position2, newText, annotation) { var edit; var id2; if (annotation === void 0) { edit = TextEdit.insert(position2, newText); } else if (ChangeAnnotationIdentifier.is(annotation)) { id2 = annotation; edit = AnnotatedTextEdit.insert(position2, newText, annotation); } else { this.assertChangeAnnotations(this.changeAnnotations); id2 = this.changeAnnotations.manage(annotation); edit = AnnotatedTextEdit.insert(position2, newText, id2); } this.edits.push(edit); if (id2 !== void 0) { return id2; } }; TextEditChangeImpl2.prototype.replace = function(range2, newText, annotation) { var edit; var id2; if (annotation === void 0) { edit = TextEdit.replace(range2, newText); } else if (ChangeAnnotationIdentifier.is(annotation)) { id2 = annotation; edit = AnnotatedTextEdit.replace(range2, newText, annotation); } else { this.assertChangeAnnotations(this.changeAnnotations); id2 = this.changeAnnotations.manage(annotation); edit = AnnotatedTextEdit.replace(range2, newText, id2); } this.edits.push(edit); if (id2 !== void 0) { return id2; } }; TextEditChangeImpl2.prototype.delete = function(range2, annotation) { var edit; var id2; if (annotation === void 0) { edit = TextEdit.del(range2); } else if (ChangeAnnotationIdentifier.is(annotation)) { id2 = annotation; edit = AnnotatedTextEdit.del(range2, annotation); } else { this.assertChangeAnnotations(this.changeAnnotations); id2 = this.changeAnnotations.manage(annotation); edit = AnnotatedTextEdit.del(range2, id2); } this.edits.push(edit); if (id2 !== void 0) { return id2; } }; TextEditChangeImpl2.prototype.add = function(edit) { this.edits.push(edit); }; TextEditChangeImpl2.prototype.all = function() { return this.edits; }; TextEditChangeImpl2.prototype.clear = function() { this.edits.splice(0, this.edits.length); }; TextEditChangeImpl2.prototype.assertChangeAnnotations = function(value) { if (value === void 0) { throw new Error("Text edit change is not configured to manage change annotations."); } }; return TextEditChangeImpl2; }(); var ChangeAnnotations = function() { function ChangeAnnotations2(annotations) { this._annotations = annotations === void 0 ? /* @__PURE__ */ Object.create(null) : annotations; this._counter = 0; this._size = 0; } ChangeAnnotations2.prototype.all = function() { return this._annotations; }; Object.defineProperty(ChangeAnnotations2.prototype, "size", { get: function() { return this._size; }, enumerable: false, configurable: true }); ChangeAnnotations2.prototype.manage = function(idOrAnnotation, annotation) { var id2; if (ChangeAnnotationIdentifier.is(idOrAnnotation)) { id2 = idOrAnnotation; } else { id2 = this.nextId(); annotation = idOrAnnotation; } if (this._annotations[id2] !== void 0) { throw new Error("Id ".concat(id2, " is already in use.")); } if (annotation === void 0) { throw new Error("No annotation provided for id ".concat(id2)); } this._annotations[id2] = annotation; this._size++; return id2; }; ChangeAnnotations2.prototype.nextId = function() { this._counter++; return this._counter.toString(); }; return ChangeAnnotations2; }(); (function() { function WorkspaceChange(workspaceEdit) { var _this = this; this._textEditChanges = /* @__PURE__ */ Object.create(null); if (workspaceEdit !== void 0) { this._workspaceEdit = workspaceEdit; if (workspaceEdit.documentChanges) { this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations); workspaceEdit.changeAnnotations = this._changeAnnotations.all(); workspaceEdit.documentChanges.forEach(function(change) { if (TextDocumentEdit.is(change)) { var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations); _this._textEditChanges[change.textDocument.uri] = textEditChange; } }); } else if (workspaceEdit.changes) { Object.keys(workspaceEdit.changes).forEach(function(key2) { var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key2]); _this._textEditChanges[key2] = textEditChange; }); } } else { this._workspaceEdit = {}; } } Object.defineProperty(WorkspaceChange.prototype, "edit", { get: function() { this.initDocumentChanges(); if (this._changeAnnotations !== void 0) { if (this._changeAnnotations.size === 0) { this._workspaceEdit.changeAnnotations = void 0; } else { this._workspaceEdit.changeAnnotations = this._changeAnnotations.all(); } } return this._workspaceEdit; }, enumerable: false, configurable: true }); WorkspaceChange.prototype.getTextEditChange = function(key2) { if (OptionalVersionedTextDocumentIdentifier.is(key2)) { this.initDocumentChanges(); if (this._workspaceEdit.documentChanges === void 0) { throw new Error("Workspace edit is not configured for document changes."); } var textDocument = { uri: key2.uri, version: key2.version }; var result = this._textEditChanges[textDocument.uri]; if (!result) { var edits = []; var textDocumentEdit = { textDocument, edits }; this._workspaceEdit.documentChanges.push(textDocumentEdit); result = new TextEditChangeImpl(edits, this._changeAnnotations); this._textEditChanges[textDocument.uri] = result; } return result; } else { this.initChanges(); if (this._workspaceEdit.changes === void 0) { throw new Error("Workspace edit is not configured for normal text edit changes."); } var result = this._textEditChanges[key2]; if (!result) { var edits = []; this._workspaceEdit.changes[key2] = edits; result = new TextEditChangeImpl(edits); this._textEditChanges[key2] = result; } return result; } }; WorkspaceChange.prototype.initDocumentChanges = function() { if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) { this._changeAnnotations = new ChangeAnnotations(); this._workspaceEdit.documentChanges = []; this._workspaceEdit.changeAnnotations = this._changeAnnotations.all(); } }; WorkspaceChange.prototype.initChanges = function() { if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) { this._workspaceEdit.changes = /* @__PURE__ */ Object.create(null); } }; WorkspaceChange.prototype.createFile = function(uri, optionsOrAnnotation, options) { this.initDocumentChanges(); if (this._workspaceEdit.documentChanges === void 0) { throw new Error("Workspace edit is not configured for document changes."); } var annotation; if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) { annotation = optionsOrAnnotation; } else { options = optionsOrAnnotation; } var operation; var id2; if (annotation === void 0) { operation = CreateFile.create(uri, options); } else { id2 = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation); operation = CreateFile.create(uri, options, id2); } this._workspaceEdit.documentChanges.push(operation); if (id2 !== void 0) { return id2; } }; WorkspaceChange.prototype.renameFile = function(oldUri, newUri, optionsOrAnnotation, options) { this.initDocumentChanges(); if (this._workspaceEdit.documentChanges === void 0) { throw new Error("Workspace edit is not configured for document changes."); } var annotation; if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) { annotation = optionsOrAnnotation; } else { options = optionsOrAnnotation; } var operation; var id2; if (annotation === void 0) { operation = RenameFile.create(oldUri, newUri, options); } else { id2 = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation); operation = RenameFile.create(oldUri, newUri, options, id2); } this._workspaceEdit.documentChanges.push(operation); if (id2 !== void 0) { return id2; } }; WorkspaceChange.prototype.deleteFile = function(uri, optionsOrAnnotation, options) { this.initDocumentChanges(); if (this._workspaceEdit.documentChanges === void 0) { throw new Error("Workspace edit is not configured for document changes."); } var annotation; if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) { annotation = optionsOrAnnotation; } else { options = optionsOrAnnotation; } var operation; var id2; if (annotation === void 0) { operation = DeleteFile.create(uri, options); } else { id2 = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation); operation = DeleteFile.create(uri, options, id2); } this._workspaceEdit.documentChanges.push(operation); if (id2 !== void 0) { return id2; } }; return WorkspaceChange; })(); var TextDocumentIdentifier; (function(TextDocumentIdentifier2) { function create2(uri) { return { uri }; } TextDocumentIdentifier2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.string(candidate.uri); } TextDocumentIdentifier2.is = is; })(TextDocumentIdentifier || (TextDocumentIdentifier = {})); var VersionedTextDocumentIdentifier; (function(VersionedTextDocumentIdentifier2) { function create2(uri, version2) { return { uri, version: version2 }; } VersionedTextDocumentIdentifier2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version); } VersionedTextDocumentIdentifier2.is = is; })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {})); var OptionalVersionedTextDocumentIdentifier; (function(OptionalVersionedTextDocumentIdentifier2) { function create2(uri, version2) { return { uri, version: version2 }; } OptionalVersionedTextDocumentIdentifier2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version)); } OptionalVersionedTextDocumentIdentifier2.is = is; })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {})); var TextDocumentItem; (function(TextDocumentItem2) { function create2(uri, languageId, version2, text2) { return { uri, languageId, version: version2, text: text2 }; } TextDocumentItem2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text); } TextDocumentItem2.is = is; })(TextDocumentItem || (TextDocumentItem = {})); var MarkupKind; (function(MarkupKind2) { MarkupKind2.PlainText = "plaintext"; MarkupKind2.Markdown = "markdown"; function is(value) { var candidate = value; return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown; } MarkupKind2.is = is; })(MarkupKind || (MarkupKind = {})); var MarkupContent; (function(MarkupContent2) { function is(value) { var candidate = value; return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value); } MarkupContent2.is = is; })(MarkupContent || (MarkupContent = {})); var CompletionItemKind; (function(CompletionItemKind2) { CompletionItemKind2.Text = 1; CompletionItemKind2.Method = 2; CompletionItemKind2.Function = 3; CompletionItemKind2.Constructor = 4; CompletionItemKind2.Field = 5; CompletionItemKind2.Variable = 6; CompletionItemKind2.Class = 7; CompletionItemKind2.Interface = 8; CompletionItemKind2.Module = 9; CompletionItemKind2.Property = 10; CompletionItemKind2.Unit = 11; CompletionItemKind2.Value = 12; CompletionItemKind2.Enum = 13; CompletionItemKind2.Keyword = 14; CompletionItemKind2.Snippet = 15; CompletionItemKind2.Color = 16; CompletionItemKind2.File = 17; CompletionItemKind2.Reference = 18; CompletionItemKind2.Folder = 19; CompletionItemKind2.EnumMember = 20; CompletionItemKind2.Constant = 21; CompletionItemKind2.Struct = 22; CompletionItemKind2.Event = 23; CompletionItemKind2.Operator = 24; CompletionItemKind2.TypeParameter = 25; })(CompletionItemKind || (CompletionItemKind = {})); var InsertTextFormat; (function(InsertTextFormat2) { InsertTextFormat2.PlainText = 1; InsertTextFormat2.Snippet = 2; })(InsertTextFormat || (InsertTextFormat = {})); var CompletionItemTag; (function(CompletionItemTag2) { CompletionItemTag2.Deprecated = 1; })(CompletionItemTag || (CompletionItemTag = {})); var InsertReplaceEdit; (function(InsertReplaceEdit2) { function create2(newText, insert2, replace2) { return { newText, insert: insert2, replace: replace2 }; } InsertReplaceEdit2.create = create2; function is(value) { var candidate = value; return candidate && Is.string(candidate.newText) && Range$a.is(candidate.insert) && Range$a.is(candidate.replace); } InsertReplaceEdit2.is = is; })(InsertReplaceEdit || (InsertReplaceEdit = {})); var InsertTextMode; (function(InsertTextMode2) { InsertTextMode2.asIs = 1; InsertTextMode2.adjustIndentation = 2; })(InsertTextMode || (InsertTextMode = {})); var CompletionItemLabelDetails; (function(CompletionItemLabelDetails2) { function is(value) { var candidate = value; return candidate && (Is.string(candidate.detail) || candidate.detail === void 0) && (Is.string(candidate.description) || candidate.description === void 0); } CompletionItemLabelDetails2.is = is; })(CompletionItemLabelDetails || (CompletionItemLabelDetails = {})); var CompletionItem; (function(CompletionItem2) { function create2(label) { return { label }; } CompletionItem2.create = create2; })(CompletionItem || (CompletionItem = {})); var CompletionList$1; (function(CompletionList2) { function create2(items, isIncomplete) { return { items: items ? items : [], isIncomplete: !!isIncomplete }; } CompletionList2.create = create2; })(CompletionList$1 || (CompletionList$1 = {})); var MarkedString; (function(MarkedString2) { function fromPlainText(plainText) { return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&"); } MarkedString2.fromPlainText = fromPlainText; function is(value) { var candidate = value; return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value); } MarkedString2.is = is; })(MarkedString || (MarkedString = {})); var Hover; (function(Hover2) { function is(value) { var candidate = value; return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range$a.is(value.range)); } Hover2.is = is; })(Hover || (Hover = {})); var ParameterInformation; (function(ParameterInformation2) { function create2(label, documentation) { return documentation ? { label, documentation } : { label }; } ParameterInformation2.create = create2; })(ParameterInformation || (ParameterInformation = {})); var SignatureInformation; (function(SignatureInformation2) { function create2(label, documentation) { var parameters = []; for (var _i = 2; _i < arguments.length; _i++) { parameters[_i - 2] = arguments[_i]; } var result = { label }; if (Is.defined(documentation)) { result.documentation = documentation; } if (Is.defined(parameters)) { result.parameters = parameters; } else { result.parameters = []; } return result; } SignatureInformation2.create = create2; })(SignatureInformation || (SignatureInformation = {})); var DocumentHighlightKind; (function(DocumentHighlightKind2) { DocumentHighlightKind2.Text = 1; DocumentHighlightKind2.Read = 2; DocumentHighlightKind2.Write = 3; })(DocumentHighlightKind || (DocumentHighlightKind = {})); var DocumentHighlight; (function(DocumentHighlight2) { function create2(range2, kind) { var result = { range: range2 }; if (Is.number(kind)) { result.kind = kind; } return result; } DocumentHighlight2.create = create2; })(DocumentHighlight || (DocumentHighlight = {})); var SymbolKind; (function(SymbolKind2) { SymbolKind2.File = 1; SymbolKind2.Module = 2; SymbolKind2.Namespace = 3; SymbolKind2.Package = 4; SymbolKind2.Class = 5; SymbolKind2.Method = 6; SymbolKind2.Property = 7; SymbolKind2.Field = 8; SymbolKind2.Constructor = 9; SymbolKind2.Enum = 10; SymbolKind2.Interface = 11; SymbolKind2.Function = 12; SymbolKind2.Variable = 13; SymbolKind2.Constant = 14; SymbolKind2.String = 15; SymbolKind2.Number = 16; SymbolKind2.Boolean = 17; SymbolKind2.Array = 18; SymbolKind2.Object = 19; SymbolKind2.Key = 20; SymbolKind2.Null = 21; SymbolKind2.EnumMember = 22; SymbolKind2.Struct = 23; SymbolKind2.Event = 24; SymbolKind2.Operator = 25; SymbolKind2.TypeParameter = 26; })(SymbolKind || (SymbolKind = {})); var SymbolTag; (function(SymbolTag2) { SymbolTag2.Deprecated = 1; })(SymbolTag || (SymbolTag = {})); var SymbolInformation; (function(SymbolInformation2) { function create2(name, kind, range2, uri, containerName) { var result = { name, kind, location: { uri, range: range2 } }; if (containerName) { result.containerName = containerName; } return result; } SymbolInformation2.create = create2; })(SymbolInformation || (SymbolInformation = {})); var WorkspaceSymbol; (function(WorkspaceSymbol2) { function create2(name, kind, uri, range2) { return range2 !== void 0 ? { name, kind, location: { uri, range: range2 } } : { name, kind, location: { uri } }; } WorkspaceSymbol2.create = create2; })(WorkspaceSymbol || (WorkspaceSymbol = {})); var DocumentSymbol; (function(DocumentSymbol2) { function create2(name, detail, kind, range2, selectionRange, children) { var result = { name, detail, kind, range: range2, selectionRange }; if (children !== void 0) { result.children = children; } return result; } DocumentSymbol2.create = create2; function is(value) { var candidate = value; return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range$a.is(candidate.range) && Range$a.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags)); } DocumentSymbol2.is = is; })(DocumentSymbol || (DocumentSymbol = {})); var CodeActionKind; (function(CodeActionKind2) { CodeActionKind2.Empty = ""; CodeActionKind2.QuickFix = "quickfix"; CodeActionKind2.Refactor = "refactor"; CodeActionKind2.RefactorExtract = "refactor.extract"; CodeActionKind2.RefactorInline = "refactor.inline"; CodeActionKind2.RefactorRewrite = "refactor.rewrite"; CodeActionKind2.Source = "source"; CodeActionKind2.SourceOrganizeImports = "source.organizeImports"; CodeActionKind2.SourceFixAll = "source.fixAll"; })(CodeActionKind || (CodeActionKind = {})); var CodeActionTriggerKind; (function(CodeActionTriggerKind2) { CodeActionTriggerKind2.Invoked = 1; CodeActionTriggerKind2.Automatic = 2; })(CodeActionTriggerKind || (CodeActionTriggerKind = {})); var CodeActionContext; (function(CodeActionContext2) { function create2(diagnostics, only, triggerKind) { var result = { diagnostics }; if (only !== void 0 && only !== null) { result.only = only; } if (triggerKind !== void 0 && triggerKind !== null) { result.triggerKind = triggerKind; } return result; } CodeActionContext2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === void 0 || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic); } CodeActionContext2.is = is; })(CodeActionContext || (CodeActionContext = {})); var CodeAction; (function(CodeAction2) { function create2(title, kindOrCommandOrEdit, kind) { var result = { title }; var checkKind = true; if (typeof kindOrCommandOrEdit === "string") { checkKind = false; result.kind = kindOrCommandOrEdit; } else if (Command.is(kindOrCommandOrEdit)) { result.command = kindOrCommandOrEdit; } else { result.edit = kindOrCommandOrEdit; } if (checkKind && kind !== void 0) { result.kind = kind; } return result; } CodeAction2.create = create2; function is(value) { var candidate = value; return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit)); } CodeAction2.is = is; })(CodeAction || (CodeAction = {})); var CodeLens; (function(CodeLens2) { function create2(range2, data) { var result = { range: range2 }; if (Is.defined(data)) { result.data = data; } return result; } CodeLens2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Range$a.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command)); } CodeLens2.is = is; })(CodeLens || (CodeLens = {})); var FormattingOptions; (function(FormattingOptions2) { function create2(tabSize, insertSpaces) { return { tabSize, insertSpaces }; } FormattingOptions2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces); } FormattingOptions2.is = is; })(FormattingOptions || (FormattingOptions = {})); var DocumentLink; (function(DocumentLink2) { function create2(range2, target2, data) { return { range: range2, target: target2, data }; } DocumentLink2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Range$a.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target)); } DocumentLink2.is = is; })(DocumentLink || (DocumentLink = {})); var SelectionRange; (function(SelectionRange2) { function create2(range2, parent) { return { range: range2, parent }; } SelectionRange2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Range$a.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent)); } SelectionRange2.is = is; })(SelectionRange || (SelectionRange = {})); var SemanticTokenTypes; (function(SemanticTokenTypes2) { SemanticTokenTypes2["namespace"] = "namespace"; SemanticTokenTypes2["type"] = "type"; SemanticTokenTypes2["class"] = "class"; SemanticTokenTypes2["enum"] = "enum"; SemanticTokenTypes2["interface"] = "interface"; SemanticTokenTypes2["struct"] = "struct"; SemanticTokenTypes2["typeParameter"] = "typeParameter"; SemanticTokenTypes2["parameter"] = "parameter"; SemanticTokenTypes2["variable"] = "variable"; SemanticTokenTypes2["property"] = "property"; SemanticTokenTypes2["enumMember"] = "enumMember"; SemanticTokenTypes2["event"] = "event"; SemanticTokenTypes2["function"] = "function"; SemanticTokenTypes2["method"] = "method"; SemanticTokenTypes2["macro"] = "macro"; SemanticTokenTypes2["keyword"] = "keyword"; SemanticTokenTypes2["modifier"] = "modifier"; SemanticTokenTypes2["comment"] = "comment"; SemanticTokenTypes2["string"] = "string"; SemanticTokenTypes2["number"] = "number"; SemanticTokenTypes2["regexp"] = "regexp"; SemanticTokenTypes2["operator"] = "operator"; SemanticTokenTypes2["decorator"] = "decorator"; })(SemanticTokenTypes || (SemanticTokenTypes = {})); var SemanticTokenModifiers; (function(SemanticTokenModifiers2) { SemanticTokenModifiers2["declaration"] = "declaration"; SemanticTokenModifiers2["definition"] = "definition"; SemanticTokenModifiers2["readonly"] = "readonly"; SemanticTokenModifiers2["static"] = "static"; SemanticTokenModifiers2["deprecated"] = "deprecated"; SemanticTokenModifiers2["abstract"] = "abstract"; SemanticTokenModifiers2["async"] = "async"; SemanticTokenModifiers2["modification"] = "modification"; SemanticTokenModifiers2["documentation"] = "documentation"; SemanticTokenModifiers2["defaultLibrary"] = "defaultLibrary"; })(SemanticTokenModifiers || (SemanticTokenModifiers = {})); var SemanticTokens; (function(SemanticTokens2) { function is(value) { var candidate = value; return Is.objectLiteral(candidate) && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number"); } SemanticTokens2.is = is; })(SemanticTokens || (SemanticTokens = {})); var InlineValueText; (function(InlineValueText2) { function create2(range2, text2) { return { range: range2, text: text2 }; } InlineValueText2.create = create2; function is(value) { var candidate = value; return candidate !== void 0 && candidate !== null && Range$a.is(candidate.range) && Is.string(candidate.text); } InlineValueText2.is = is; })(InlineValueText || (InlineValueText = {})); var InlineValueVariableLookup; (function(InlineValueVariableLookup2) { function create2(range2, variableName, caseSensitiveLookup) { return { range: range2, variableName, caseSensitiveLookup }; } InlineValueVariableLookup2.create = create2; function is(value) { var candidate = value; return candidate !== void 0 && candidate !== null && Range$a.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === void 0); } InlineValueVariableLookup2.is = is; })(InlineValueVariableLookup || (InlineValueVariableLookup = {})); var InlineValueEvaluatableExpression; (function(InlineValueEvaluatableExpression2) { function create2(range2, expression) { return { range: range2, expression }; } InlineValueEvaluatableExpression2.create = create2; function is(value) { var candidate = value; return candidate !== void 0 && candidate !== null && Range$a.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === void 0); } InlineValueEvaluatableExpression2.is = is; })(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {})); var InlineValueContext; (function(InlineValueContext2) { function create2(frameId, stoppedLocation) { return { frameId, stoppedLocation }; } InlineValueContext2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Range$a.is(value.stoppedLocation); } InlineValueContext2.is = is; })(InlineValueContext || (InlineValueContext = {})); var InlayHintKind; (function(InlayHintKind2) { InlayHintKind2.Type = 1; InlayHintKind2.Parameter = 2; function is(value) { return value === 1 || value === 2; } InlayHintKind2.is = is; })(InlayHintKind || (InlayHintKind = {})); var InlayHintLabelPart; (function(InlayHintLabelPart2) { function create2(value) { return { value }; } InlayHintLabelPart2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === void 0 || Location.is(candidate.location)) && (candidate.command === void 0 || Command.is(candidate.command)); } InlayHintLabelPart2.is = is; })(InlayHintLabelPart || (InlayHintLabelPart = {})); var InlayHint; (function(InlayHint2) { function create2(position2, label, kind) { var result = { position: position2, label }; if (kind !== void 0) { result.kind = kind; } return result; } InlayHint2.create = create2; function is(value) { var candidate = value; return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === void 0 || InlayHintKind.is(candidate.kind)) && candidate.textEdits === void 0 || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === void 0 || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === void 0 || Is.boolean(candidate.paddingRight)); } InlayHint2.is = is; })(InlayHint || (InlayHint = {})); var WorkspaceFolder; (function(WorkspaceFolder2) { function is(value) { var candidate = value; return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name); } WorkspaceFolder2.is = is; })(WorkspaceFolder || (WorkspaceFolder = {})); var TextDocument; (function(TextDocument2) { function create2(uri, languageId, version2, content) { return new FullTextDocument(uri, languageId, version2, content); } TextDocument2.create = create2; function is(value) { var candidate = value; return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false; } TextDocument2.is = is; function applyEdits(document2, edits) { var text2 = document2.getText(); var sortedEdits = mergeSort(edits, function(a2, b2) { var diff2 = a2.range.start.line - b2.range.start.line; if (diff2 === 0) { return a2.range.start.character - b2.range.start.character; } return diff2; }); var lastModifiedOffset = text2.length; for (var i2 = sortedEdits.length - 1; i2 >= 0; i2--) { var e2 = sortedEdits[i2]; var startOffset = document2.offsetAt(e2.range.start); var endOffset = document2.offsetAt(e2.range.end); if (endOffset <= lastModifiedOffset) { text2 = text2.substring(0, startOffset) + e2.newText + text2.substring(endOffset, text2.length); } else { throw new Error("Overlapping edit"); } lastModifiedOffset = startOffset; } return text2; } TextDocument2.applyEdits = applyEdits; function mergeSort(data, compare2) { if (data.length <= 1) { return data; } var p2 = data.length / 2 | 0; var left = data.slice(0, p2); var right = data.slice(p2); mergeSort(left, compare2); mergeSort(right, compare2); var leftIdx = 0; var rightIdx = 0; var i2 = 0; while (leftIdx < left.length && rightIdx < right.length) { var ret = compare2(left[leftIdx], right[rightIdx]); if (ret <= 0) { data[i2++] = left[leftIdx++]; } else { data[i2++] = right[rightIdx++]; } } while (leftIdx < left.length) { data[i2++] = left[leftIdx++]; } while (rightIdx < right.length) { data[i2++] = right[rightIdx++]; } return data; } })(TextDocument || (TextDocument = {})); var FullTextDocument = function() { function FullTextDocument2(uri, languageId, version2, content) { this._uri = uri; this._languageId = languageId; this._version = version2; this._content = content; this._lineOffsets = void 0; } Object.defineProperty(FullTextDocument2.prototype, "uri", { get: function() { return this._uri; }, enumerable: false, configurable: true }); Object.defineProperty(FullTextDocument2.prototype, "languageId", { get: function() { return this._languageId; }, enumerable: false, configurable: true }); Object.defineProperty(FullTextDocument2.prototype, "version", { get: function() { return this._version; }, enumerable: false, configurable: true }); FullTextDocument2.prototype.getText = function(range2) { if (range2) { var start = this.offsetAt(range2.start); var end = this.offsetAt(range2.end); return this._content.substring(start, end); } return this._content; }; FullTextDocument2.prototype.update = function(event, version2) { this._content = event.text; this._version = version2; this._lineOffsets = void 0; }; FullTextDocument2.prototype.getLineOffsets = function() { if (this._lineOffsets === void 0) { var lineOffsets = []; var text2 = this._content; var isLineStart = true; for (var i2 = 0; i2 < text2.length; i2++) { if (isLineStart) { lineOffsets.push(i2); isLineStart = false; } var ch2 = text2.charAt(i2); isLineStart = ch2 === "\r" || ch2 === "\n"; if (ch2 === "\r" && i2 + 1 < text2.length && text2.charAt(i2 + 1) === "\n") { i2++; } } if (isLineStart && text2.length > 0) { lineOffsets.push(text2.length); } this._lineOffsets = lineOffsets; } return this._lineOffsets; }; FullTextDocument2.prototype.positionAt = function(offset) { offset = Math.max(Math.min(offset, this._content.length), 0); var lineOffsets = this.getLineOffsets(); var low = 0, high = lineOffsets.length; if (high === 0) { return Position.create(0, offset); } while (low < high) { var mid2 = Math.floor((low + high) / 2); if (lineOffsets[mid2] > offset) { high = mid2; } else { low = mid2 + 1; } } var line2 = low - 1; return Position.create(line2, offset - lineOffsets[line2]); }; FullTextDocument2.prototype.offsetAt = function(position2) { var lineOffsets = this.getLineOffsets(); if (position2.line >= lineOffsets.length) { return this._content.length; } else if (position2.line < 0) { return 0; } var lineOffset = lineOffsets[position2.line]; var nextLineOffset = position2.line + 1 < lineOffsets.length ? lineOffsets[position2.line + 1] : this._content.length; return Math.max(Math.min(lineOffset + position2.character, nextLineOffset), lineOffset); }; Object.defineProperty(FullTextDocument2.prototype, "lineCount", { get: function() { return this.getLineOffsets().length; }, enumerable: false, configurable: true }); return FullTextDocument2; }(); var Is; (function(Is2) { var toString2 = Object.prototype.toString; function defined2(value) { return typeof value !== "undefined"; } Is2.defined = defined2; function undefined$1(value) { return typeof value === "undefined"; } Is2.undefined = undefined$1; function boolean(value) { return value === true || value === false; } Is2.boolean = boolean; function string(value) { return toString2.call(value) === "[object String]"; } Is2.string = string; function number(value) { return toString2.call(value) === "[object Number]"; } Is2.number = number; function numberRange(value, min2, max2) { return toString2.call(value) === "[object Number]" && min2 <= value && value <= max2; } Is2.numberRange = numberRange; function integer2(value) { return toString2.call(value) === "[object Number]" && -2147483648 <= value && value <= 2147483647; } Is2.integer = integer2; function uinteger2(value) { return toString2.call(value) === "[object Number]" && 0 <= value && value <= 2147483647; } Is2.uinteger = uinteger2; function func(value) { return toString2.call(value) === "[object Function]"; } Is2.func = func; function objectLiteral(value) { return value !== null && typeof value === "object"; } Is2.objectLiteral = objectLiteral; function typedArray(value, check2) { return Array.isArray(value) && value.every(check2); } Is2.typedArray = typedArray; })(Is || (Is = {})); var zenscroll$1 = { exports: {} }; (function(module3) { (function(root2, factory) { if (module3.exports) { module3.exports = factory(); } else { (function install() { if (document && document.body) { root2.zenscroll = factory(); } else { setTimeout(install, 9); } })(); } })(commonjsGlobal, function() { var isNativeSmoothScrollEnabledOn = function(elem) { return elem && "getComputedStyle" in window && window.getComputedStyle(elem)["scroll-behavior"] === "smooth"; }; if (typeof window === "undefined" || !("document" in window)) { return {}; } var makeScroller = function(container, defaultDuration, edgeOffset) { defaultDuration = defaultDuration || 999; if (!edgeOffset && edgeOffset !== 0) { edgeOffset = 9; } var scrollTimeoutId; var setScrollTimeoutId = function(newValue) { scrollTimeoutId = newValue; }; var stopScroll = function() { clearTimeout(scrollTimeoutId); setScrollTimeoutId(0); }; var getTopWithEdgeOffset = function(elem) { return Math.max(0, container.getTopOf(elem) - edgeOffset); }; var scrollToY = function(targetY, duration, onDone) { stopScroll(); if (duration === 0 || duration && duration < 0 || isNativeSmoothScrollEnabledOn(container.body)) { container.toY(targetY); if (onDone) { onDone(); } } else { var startY = container.getY(); var distance = Math.max(0, targetY) - startY; var startTime = new Date().getTime(); duration = duration || Math.min(Math.abs(distance), defaultDuration); (function loopScroll() { setScrollTimeoutId(setTimeout(function() { var p2 = Math.min(1, (new Date().getTime() - startTime) / duration); var y2 = Math.max(0, Math.floor(startY + distance * (p2 < 0.5 ? 2 * p2 * p2 : p2 * (4 - p2 * 2) - 1))); container.toY(y2); if (p2 < 1 && container.getHeight() + y2 < container.body.scrollHeight) { loopScroll(); } else { setTimeout(stopScroll, 99); if (onDone) { onDone(); } } }, 9)); })(); } }; var scrollToElem = function(elem, duration, onDone) { scrollToY(getTopWithEdgeOffset(elem), duration, onDone); }; var scrollIntoView2 = function(elem, duration, onDone) { var elemHeight = elem.getBoundingClientRect().height; var elemBottom = container.getTopOf(elem) + elemHeight; var containerHeight = container.getHeight(); var y2 = container.getY(); var containerBottom = y2 + containerHeight; if (getTopWithEdgeOffset(elem) < y2 || elemHeight + edgeOffset > containerHeight) { scrollToElem(elem, duration, onDone); } else if (elemBottom + edgeOffset > containerBottom) { scrollToY(elemBottom - containerHeight + edgeOffset, duration, onDone); } else if (onDone) { onDone(); } }; var scrollToCenterOf = function(elem, duration, offset, onDone) { scrollToY(Math.max(0, container.getTopOf(elem) - container.getHeight() / 2 + (offset || elem.getBoundingClientRect().height / 2)), duration, onDone); }; var setup = function(newDefaultDuration, newEdgeOffset) { if (newDefaultDuration === 0 || newDefaultDuration) { defaultDuration = newDefaultDuration; } if (newEdgeOffset === 0 || newEdgeOffset) { edgeOffset = newEdgeOffset; } return { defaultDuration, edgeOffset }; }; return { setup, to: scrollToElem, toY: scrollToY, intoView: scrollIntoView2, center: scrollToCenterOf, stop: stopScroll, moving: function() { return !!scrollTimeoutId; }, getY: container.getY, getTopOf: container.getTopOf }; }; var docElem = document.documentElement; var getDocY = function() { return window.scrollY || docElem.scrollTop; }; var zenscroll2 = makeScroller({ body: document.scrollingElement || document.body, toY: function(y2) { window.scrollTo(0, y2); }, getY: getDocY, getHeight: function() { return window.innerHeight || docElem.clientHeight; }, getTopOf: function(elem) { return elem.getBoundingClientRect().top + getDocY() - docElem.offsetTop; } }); zenscroll2.createScroller = function(scrollContainer, defaultDuration, edgeOffset) { return makeScroller({ body: scrollContainer, toY: function(y2) { scrollContainer.scrollTop = y2; }, getY: function() { return scrollContainer.scrollTop; }, getHeight: function() { return Math.min(scrollContainer.clientHeight, window.innerHeight || docElem.clientHeight); }, getTopOf: function(elem) { return elem.offsetTop; } }, defaultDuration, edgeOffset); }; if ("addEventListener" in window && !window.noZensmooth && !isNativeSmoothScrollEnabledOn(document.body)) { var isHistorySupported = "history" in window && "pushState" in history; var isScrollRestorationSupported = isHistorySupported && "scrollRestoration" in history; if (isScrollRestorationSupported) { history.scrollRestoration = "auto"; } window.addEventListener("load", function() { if (isScrollRestorationSupported) { setTimeout(function() { history.scrollRestoration = "manual"; }, 9); window.addEventListener("popstate", function(event) { if (event.state && "zenscrollY" in event.state) { zenscroll2.toY(event.state.zenscrollY); } }, false); } if (window.location.hash) { setTimeout(function() { var edgeOffset = zenscroll2.setup().edgeOffset; if (edgeOffset) { var targetElem = document.getElementById(window.location.href.split("#")[1]); if (targetElem) { var targetY = Math.max(0, zenscroll2.getTopOf(targetElem) - edgeOffset); var diff2 = zenscroll2.getY() - targetY; if (0 <= diff2 && diff2 < 9) { window.scrollTo(0, targetY); } } } }, 9); } }, false); var RE_noZensmooth = new RegExp("(^|\\s)noZensmooth(\\s|$)"); window.addEventListener("click", function(event) { var anchor = event.target; while (anchor && anchor.tagName !== "A") { anchor = anchor.parentNode; } if (!anchor || event.which !== 1 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) { return; } if (isScrollRestorationSupported) { var historyState = history.state && typeof history.state === "object" ? history.state : {}; historyState.zenscrollY = zenscroll2.getY(); try { history.replaceState(historyState, ""); } catch (e2) { } } var href = anchor.getAttribute("href") || ""; if (href.indexOf("#") === 0 && !RE_noZensmooth.test(anchor.className)) { var targetY = 0; var targetElem = document.getElementById(href.substring(1)); if (href !== "#") { if (!targetElem) { return; } targetY = zenscroll2.getTopOf(targetElem); } event.preventDefault(); var onDone = function() { window.location = href; }; var edgeOffset = zenscroll2.setup().edgeOffset; if (edgeOffset) { targetY = Math.max(0, targetY - edgeOffset); if (isHistorySupported) { onDone = function() { history.pushState({}, "", href); }; } } zenscroll2.toY(targetY, null, onDone); } }, false); } return zenscroll2; }); })(zenscroll$1); const zenscroll = zenscroll$1.exports; class PromiseQueue { constructor() { __publicField(this, "queue", new Array()); __publicField(this, "running", false); } enqueue(promise) { return new Promise((resolve, reject) => { this.queue.push({ promise, resolve, reject }); this.dequeue(); }); } dequeue() { if (this.running) { return false; } const item = this.queue.shift(); if (!item) { return false; } try { this.running = true; item.promise().then((value) => { this.running = false; item.resolve(value); this.dequeue(); }).catch((err) => { this.running = false; item.reject(err); this.dequeue(); }); } catch (err) { this.running = false; item.reject(err); this.dequeue(); } return true; } } const DATA = "AZaz\xAA\xAA\xB5\xB5\xBA\xBA\xC0\xD6\xD8\xF6\xF8\u0241\u0250\u02C1\u02C6\u02D1\u02E0\u02E4\u02EE\u02EE\u0300\u036F\u037A\u037A\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03F5\u03F7\u0481\u0483\u0486\u048A\u04CE\u04D0\u04F9\u0500\u050F\u0531\u0556\u0559\u0559\u0561\u0587\u0591\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05C7\u05D0\u05EA\u05F0\u05F2\u0610\u0615\u0621\u063A\u0640\u065E\u066E\u06D3\u06D5\u06DC\u06DF\u06E8\u06EA\u06EF\u06FA\u06FC\u06FF\u06FF\u0710\u074A\u074D\u076D\u0780\u07B1\u0901\u0902\u0904\u0939\u093C\u093D\u0941\u0948\u094D\u094D\u0950\u0954\u0958\u0963\u097D\u097D\u0981\u0981\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BD\u09C1\u09C4\u09CD\u09CE\u09DC\u09DD\u09DF\u09E3\u09F0\u09F1\u0A01\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A70\u0A74\u0A81\u0A82\u0A85\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0ABD\u0AC1\u0AC5\u0AC7\u0AC8\u0ACD\u0ACD\u0AD0\u0AD0\u0AE0\u0AE3\u0B01\u0B01\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B35\u0B39\u0B3C\u0B3D\u0B3F\u0B3F\u0B41\u0B43\u0B4D\u0B4D\u0B56\u0B56\u0B5C\u0B5D\u0B5F\u0B61\u0B71\u0B71\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB9\u0BC0\u0BC0\u0BCD\u0BCD\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C40\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBC\u0CBD\u0CBF\u0CBF\u0CC6\u0CC6\u0CCC\u0CCD\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D41\u0D43\u0D4D\u0D4D\u0D60\u0D61\u0D85\u0D96\u0D9A\u0DB1\u0DB3\u0DBB\u0DBD\u0DBD\u0DC0\u0DC6\u0DCA\u0DCA\u0DD2\u0DD4\u0DD6\u0DD6\u0E01\u0E3A\u0E40\u0E4E\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0EDC\u0EDD\u0F00\u0F00\u0F18\u0F19\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F40\u0F47\u0F49\u0F6A\u0F71\u0F7E\u0F80\u0F84\u0F86\u0F8B\u0F90\u0F97\u0F99\u0FBC\u0FC6\u0FC6\u1000\u1021\u1023\u1027\u1029\u102A\u102D\u1030\u1032\u1032\u1036\u1037\u1039\u1039\u1050\u1055\u1058\u1059\u10A0\u10C5\u10D0\u10FA\u10FC\u10FC\u1100\u1159\u115F\u11A2\u11A8\u11F9\u1200\u1248\u124A\u124D\u1250\u1256\u1258\u1258\u125A\u125D\u1260\u1288\u128A\u128D\u1290\u12B0\u12B2\u12B5\u12B8\u12BE\u12C0\u12C0\u12C2\u12C5\u12C8\u12D6\u12D8\u1310\u1312\u1315\u1318\u135A\u135F\u135F\u1380\u138F\u13A0\u13F4\u1401\u166C\u166F\u1676\u1681\u169A\u16A0\u16EA\u1700\u170C\u170E\u1714\u1720\u1734\u1740\u1753\u1760\u176C\u176E\u1770\u1772\u1773\u1780\u17B3\u17B7\u17BD\u17C6\u17C6\u17C9\u17D3\u17D7\u17D7\u17DC\u17DD\u180B\u180D\u1820\u1877\u1880\u18A9\u1900\u191C\u1920\u1922\u1927\u1928\u1932\u1932\u1939\u193B\u1950\u196D\u1970\u1974\u1980\u19A9\u19C1\u19C7\u1A00\u1A18\u1D00\u1DC3\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2071\u2071\u207F\u207F\u2090\u2094\u20D0\u20DC\u20E1\u20E1\u20E5\u20EB\u2102\u2102\u2107\u2107\u210A\u2113\u2115\u2115\u2119\u211D\u2124\u2124\u2126\u2126\u2128\u2128\u212A\u212D\u212F\u2131\u2133\u2139\u213C\u213F\u2145\u2149\u2C00\u2C2E\u2C30\u2C5E\u2C80\u2CE4\u2D00\u2D25\u2D30\u2D65\u2D6F\u2D6F\u2D80\u2D96\u2DA0\u2DA6\u2DA8\u2DAE\u2DB0\u2DB6\u2DB8\u2DBE\u2DC0\u2DC6\u2DC8\u2DCE\u2DD0\u2DD6\u2DD8\u2DDE\u3005\u3006\u302A\u302F\u3031\u3035\u303B\u303C\u3041\u3096\u3099\u309A\u309D\u309F\u30A1\u30FA\u30FC\u30FF\u3105\u312C\u3131\u318E\u31A0\u31B7\u31F0\u31FF\u3400\u3400\u4DB5\u4DB5\u4E00\u4E00\u9FBB\u9FBB\uA000\uA48C\uA800\uA801\uA803\uA822\uA825\uA826\uAC00\uD7A3\uF900\uFA2D\uFA30\uFA6A\uFA70\uFAD9\uFB00\uFB06\uFB13\uFB17\uFB1D\uFB28\uFB2A\uFB36\uFB38\uFB3C\uFB3E\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46\uFBB1\uFBD3\uFD3D\uFD50\uFD8F\uFD92\uFDC7\uFDF0\uFDFB\uFE00\uFE0F\uFE20\uFE23\uFE70\uFE74\uFE76\uFEFC\uFF21\uFF3A\uFF41\uFF5A\uFF66\uFFBE\uFFC2\uFFC7\uFFCA\uFFCF\uFFD2\uFFD7\uFFDA\uFFDC"; const kSingleQuote = 39; const kFancySingleQuote = 8217; const kCharClassWord = 0; const kCharClassBoundary = 1; const kCharClassNonWord = 2; function wordBreaker() { const CACHE2 = /* @__PURE__ */ new Map(); const compareToRange = (c, rangeIndex) => { if (c < DATA.charCodeAt(rangeIndex * 2)) { return -1; } if (c > DATA.charCodeAt(rangeIndex * 2 + 1)) { return 1; } return 0; }; const binarySearchLetters = (c) => { let fromIndex = 0; let toIndex = DATA.length / 2; while (fromIndex < toIndex) { const testIndex = -Math.round(-((fromIndex + toIndex) / 2)); const testResult = compareToRange(c, testIndex); if (testResult < 0) toIndex = testIndex; else if (testResult > 0) fromIndex = testIndex + 1; else return true; } return false; }; const isLetter2 = (c) => { const cached = CACHE2.get(c); if (cached !== void 0) { return cached; } const result = binarySearchLetters(c); CACHE2.set(c, result); return result; }; return { classifyCharacter(ch2) { if (isLetter2(ch2)) { return kCharClassWord; } else if (ch2 === kSingleQuote || ch2 === kFancySingleQuote) { return kCharClassBoundary; } else { return kCharClassNonWord; } }, breakWords(text2) { const words = new Array(); let pos = 0; while (pos < text2.length) { while (pos < text2.length && this.classifyCharacter(text2.charCodeAt(pos)) !== kCharClassWord) { pos++; } if (pos == text2.length) { break; } const wordStart = pos++; while (pos < text2.length && this.classifyCharacter(text2.charCodeAt(pos)) !== kCharClassNonWord) { pos++; } while (this.classifyCharacter(text2.charCodeAt(pos - 1)) === kCharClassBoundary) { pos--; } words.push({ start: wordStart, end: pos }); } return words; } }; } function lines(text2) { return text2.split(/\r?\n/); } function normalizeNewlines(text2) { return lines(text2).join("\n"); } function stripQuotes(text2) { return text2.replace(/["']/g, ""); } function equalsIgnoreCase(str1, str2) { if (!str1 && !!str2) { return false; } else if (!!str1 && !str2) { return false; } else if (str1 === str2) { return true; } else { return str1.localeCompare(str2, void 0, { sensitivity: "accent" }) === 0; } } function escapeRegExpCharacters(value) { return value.replace(/[\\{}*+?|^$.[\]()]/g, "\\$&"); } function tryDecodeUri(str2) { try { return decodeURI(str2); } catch { return str2; } } const kImageExtensions = [ "png", "svg", "jpg", "jpeg", "apng", "bmp", "gif", "ico", "cur", "jfif", "pjpeg", "pjp", "tif", "tiff", "webp" ]; var wcwidth$1 = { exports: {} }; var clone$2 = { exports: {} }; (function(module3) { var clone2 = function() { function clone3(parent, circular, depth, prototype) { if (typeof circular === "object") { depth = circular.depth; prototype = circular.prototype; circular.filter; circular = circular.circular; } var allParents = []; var allChildren = []; var useBuffer = typeof Buffer != "undefined"; if (typeof circular == "undefined") circular = true; if (typeof depth == "undefined") depth = Infinity; function _clone(parent2, depth2) { if (parent2 === null) return null; if (depth2 == 0) return parent2; var child; var proto2; if (typeof parent2 != "object") { return parent2; } if (clone3.__isArray(parent2)) { child = []; } else if (clone3.__isRegExp(parent2)) { child = new RegExp(parent2.source, __getRegExpFlags(parent2)); if (parent2.lastIndex) child.lastIndex = parent2.lastIndex; } else if (clone3.__isDate(parent2)) { child = new Date(parent2.getTime()); } else if (useBuffer && Buffer.isBuffer(parent2)) { if (Buffer.allocUnsafe) { child = Buffer.allocUnsafe(parent2.length); } else { child = new Buffer(parent2.length); } parent2.copy(child); return child; } else { if (typeof prototype == "undefined") { proto2 = Object.getPrototypeOf(parent2); child = Object.create(proto2); } else { child = Object.create(prototype); proto2 = prototype; } } if (circular) { var index2 = allParents.indexOf(parent2); if (index2 != -1) { return allChildren[index2]; } allParents.push(parent2); allChildren.push(child); } for (var i2 in parent2) { var attrs; if (proto2) { attrs = Object.getOwnPropertyDescriptor(proto2, i2); } if (attrs && attrs.set == null) { continue; } child[i2] = _clone(parent2[i2], depth2 - 1); } return child; } return _clone(parent, depth); } clone3.clonePrototype = function clonePrototype(parent) { if (parent === null) return null; var c = function() { }; c.prototype = parent; return new c(); }; function __objToStr(o2) { return Object.prototype.toString.call(o2); } clone3.__objToStr = __objToStr; function __isDate(o2) { return typeof o2 === "object" && __objToStr(o2) === "[object Date]"; } clone3.__isDate = __isDate; function __isArray(o2) { return typeof o2 === "object" && __objToStr(o2) === "[object Array]"; } clone3.__isArray = __isArray; function __isRegExp(o2) { return typeof o2 === "object" && __objToStr(o2) === "[object RegExp]"; } clone3.__isRegExp = __isRegExp; function __getRegExpFlags(re2) { var flags = ""; if (re2.global) flags += "g"; if (re2.ignoreCase) flags += "i"; if (re2.multiline) flags += "m"; return flags; } clone3.__getRegExpFlags = __getRegExpFlags; return clone3; }(); if (module3.exports) { module3.exports = clone2; } })(clone$2); var clone$1 = clone$2.exports; var defaults$1 = function(options, defaults2) { options = options || {}; Object.keys(defaults2).forEach(function(key2) { if (typeof options[key2] === "undefined") { options[key2] = clone$1(defaults2[key2]); } }); return options; }; var combining$1 = [ [768, 879], [1155, 1158], [1160, 1161], [1425, 1469], [1471, 1471], [1473, 1474], [1476, 1477], [1479, 1479], [1536, 1539], [1552, 1557], [1611, 1630], [1648, 1648], [1750, 1764], [1767, 1768], [1770, 1773], [1807, 1807], [1809, 1809], [1840, 1866], [1958, 1968], [2027, 2035], [2305, 2306], [2364, 2364], [2369, 2376], [2381, 2381], [2385, 2388], [2402, 2403], [2433, 2433], [2492, 2492], [2497, 2500], [2509, 2509], [2530, 2531], [2561, 2562], [2620, 2620], [2625, 2626], [2631, 2632], [2635, 2637], [2672, 2673], [2689, 2690], [2748, 2748], [2753, 2757], [2759, 2760], [2765, 2765], [2786, 2787], [2817, 2817], [2876, 2876], [2879, 2879], [2881, 2883], [2893, 2893], [2902, 2902], [2946, 2946], [3008, 3008], [3021, 3021], [3134, 3136], [3142, 3144], [3146, 3149], [3157, 3158], [3260, 3260], [3263, 3263], [3270, 3270], [3276, 3277], [3298, 3299], [3393, 3395], [3405, 3405], [3530, 3530], [3538, 3540], [3542, 3542], [3633, 3633], [3636, 3642], [3655, 3662], [3761, 3761], [3764, 3769], [3771, 3772], [3784, 3789], [3864, 3865], [3893, 3893], [3895, 3895], [3897, 3897], [3953, 3966], [3968, 3972], [3974, 3975], [3984, 3991], [3993, 4028], [4038, 4038], [4141, 4144], [4146, 4146], [4150, 4151], [4153, 4153], [4184, 4185], [4448, 4607], [4959, 4959], [5906, 5908], [5938, 5940], [5970, 5971], [6002, 6003], [6068, 6069], [6071, 6077], [6086, 6086], [6089, 6099], [6109, 6109], [6155, 6157], [6313, 6313], [6432, 6434], [6439, 6440], [6450, 6450], [6457, 6459], [6679, 6680], [6912, 6915], [6964, 6964], [6966, 6970], [6972, 6972], [6978, 6978], [7019, 7027], [7616, 7626], [7678, 7679], [8203, 8207], [8234, 8238], [8288, 8291], [8298, 8303], [8400, 8431], [12330, 12335], [12441, 12442], [43014, 43014], [43019, 43019], [43045, 43046], [64286, 64286], [65024, 65039], [65056, 65059], [65279, 65279], [65529, 65531], [68097, 68099], [68101, 68102], [68108, 68111], [68152, 68154], [68159, 68159], [119143, 119145], [119155, 119170], [119173, 119179], [119210, 119213], [119362, 119364], [917505, 917505], [917536, 917631], [917760, 917999] ]; var defaults = defaults$1; var combining = combining$1; var DEFAULTS = { nul: 0, control: 0 }; wcwidth$1.exports = function wcwidth2(str2) { return wcswidth(str2, DEFAULTS); }; wcwidth$1.exports.config = function(opts2) { opts2 = defaults(opts2 || {}, DEFAULTS); return function wcwidth2(str2) { return wcswidth(str2, opts2); }; }; function wcswidth(str2, opts2) { if (typeof str2 !== "string") return wcwidth(str2, opts2); var s2 = 0; for (var i2 = 0; i2 < str2.length; i2++) { var n2 = wcwidth(str2.charCodeAt(i2), opts2); if (n2 < 0) return -1; s2 += n2; } return s2; } function wcwidth(ucs, opts2) { if (ucs === 0) return opts2.nul; if (ucs < 32 || ucs >= 127 && ucs < 160) return opts2.control; if (bisearch(ucs)) return 0; return 1 + (ucs >= 4352 && (ucs <= 4447 || ucs == 9001 || ucs == 9002 || ucs >= 11904 && ucs <= 42191 && ucs != 12351 || ucs >= 44032 && ucs <= 55203 || ucs >= 63744 && ucs <= 64255 || ucs >= 65040 && ucs <= 65049 || ucs >= 65072 && ucs <= 65135 || ucs >= 65280 && ucs <= 65376 || ucs >= 65504 && ucs <= 65510 || ucs >= 131072 && ucs <= 196605 || ucs >= 196608 && ucs <= 262141)); } function bisearch(ucs) { var min2 = 0; var max2 = combining.length - 1; var mid2; if (ucs < combining[0][0] || ucs > combining[max2][1]) return false; while (max2 >= min2) { mid2 = Math.floor((min2 + max2) / 2); if (ucs > combining[mid2][1]) min2 = mid2 + 1; else if (ucs < combining[mid2][0]) max2 = mid2 - 1; else return true; } return false; } var MS = "-ms-"; var MOZ = "-moz-"; var WEBKIT = "-webkit-"; var COMMENT = "comm"; var RULESET = "rule"; var DECLARATION = "decl"; var IMPORT = "@import"; var KEYFRAMES = "@keyframes"; var abs$1 = Math.abs; var from = String.fromCharCode; var assign$3 = Object.assign; function hash(value, length2) { return charat(value, 0) ^ 45 ? (((length2 << 2 ^ charat(value, 0)) << 2 ^ charat(value, 1)) << 2 ^ charat(value, 2)) << 2 ^ charat(value, 3) : 0; } function trim$1(value) { return value.trim(); } function match(value, pattern) { return (value = pattern.exec(value)) ? value[0] : value; } function replace$1(value, pattern, replacement) { return value.replace(pattern, replacement); } function indexof(value, search2) { return value.indexOf(search2); } function charat(value, index2) { return value.charCodeAt(index2) | 0; } function substr(value, begin, end) { return value.slice(begin, end); } function strlen(value) { return value.length; } function sizeof(value) { return value.length; } function append(value, array) { return array.push(value), value; } function combine(array, callback) { return array.map(callback).join(""); } var line = 1; var column = 1; var length = 0; var position = 0; var character = 0; var characters$1 = ""; function node(value, root2, parent, type2, props, children, length2) { return { value, root: root2, parent, type: type2, props, children, line, column, length: length2, return: "" }; } function copy$1(root2, props) { return assign$3(node("", null, null, "", null, null, 0), root2, { length: -root2.length }, props); } function char() { return character; } function prev() { character = position > 0 ? charat(characters$1, --position) : 0; if (column--, character === 10) column = 1, line--; return character; } function next$1() { character = position < length ? charat(characters$1, position++) : 0; if (column++, character === 10) column = 1, line++; return character; } function peek() { return charat(characters$1, position); } function caret$1() { return position; } function slice(begin, end) { return substr(characters$1, begin, end); } function token(type2) { switch (type2) { case 0: case 9: case 10: case 13: case 32: return 5; case 33: case 43: case 44: case 47: case 62: case 64: case 126: case 59: case 123: case 125: return 4; case 58: return 3; case 34: case 39: case 40: case 91: return 2; case 41: case 93: return 1; } return 0; } function alloc(value) { return line = column = 1, length = strlen(characters$1 = value), position = 0, []; } function dealloc(value) { return characters$1 = "", value; } function delimit(type2) { return trim$1(slice(position - 1, delimiter(type2 === 91 ? type2 + 2 : type2 === 40 ? type2 + 1 : type2))); } function whitespace(type2) { while (character = peek()) if (character < 33) next$1(); else break; return token(type2) > 2 || token(character) > 3 ? "" : " "; } function escaping(index2, count) { while (--count && next$1()) if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break; return slice(index2, caret$1() + (count < 6 && peek() == 32 && next$1() == 32)); } function delimiter(type2) { while (next$1()) switch (character) { case type2: return position; case 34: case 39: if (type2 !== 34 && type2 !== 39) delimiter(character); break; case 40: if (type2 === 41) delimiter(type2); break; case 92: next$1(); break; } return position; } function commenter(type2, index2) { while (next$1()) if (type2 + character === 47 + 10) break; else if (type2 + character === 42 + 42 && peek() === 47) break; return "/*" + slice(index2, position - 1) + "*" + from(type2 === 47 ? type2 : next$1()); } function identifier(index2) { while (!token(peek())) next$1(); return slice(index2, position); } function compile(value) { return dealloc(parse$b("", null, null, null, [""], value = alloc(value), 0, [0], value)); } function parse$b(value, root2, parent, rule, rules, rulesets, pseudo, points, declarations) { var index2 = 0; var offset = 0; var length2 = pseudo; var atrule = 0; var property = 0; var previous2 = 0; var variable = 1; var scanning = 1; var ampersand = 1; var character2 = 0; var type2 = ""; var props = rules; var children = rulesets; var reference = rule; var characters2 = type2; while (scanning) switch (previous2 = character2, character2 = next$1()) { case 40: if (previous2 != 108 && charat(characters2, length2 - 1) == 58) { if (indexof(characters2 += replace$1(delimit(character2), "&", "&\f"), "&\f") != -1) ampersand = -1; break; } case 34: case 39: case 91: characters2 += delimit(character2); break; case 9: case 10: case 13: case 32: characters2 += whitespace(previous2); break; case 92: characters2 += escaping(caret$1() - 1, 7); continue; case 47: switch (peek()) { case 42: case 47: append(comment(commenter(next$1(), caret$1()), root2, parent), declarations); break; default: characters2 += "/"; } break; case 123 * variable: points[index2++] = strlen(characters2) * ampersand; case 125 * variable: case 59: case 0: switch (character2) { case 0: case 125: scanning = 0; case 59 + offset: if (property > 0 && strlen(characters2) - length2) append(property > 32 ? declaration(characters2 + ";", rule, parent, length2 - 1) : declaration(replace$1(characters2, " ", "") + ";", rule, parent, length2 - 2), declarations); break; case 59: characters2 += ";"; default: append(reference = ruleset(characters2, root2, parent, index2, offset, rules, points, type2, props = [], children = [], length2), rulesets); if (character2 === 123) if (offset === 0) parse$b(characters2, root2, reference, reference, props, rulesets, length2, points, children); else switch (atrule === 99 && charat(characters2, 3) === 110 ? 100 : atrule) { case 100: case 109: case 115: parse$b(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type2, rules, props = [], length2), children), rules, children, length2, points, rule ? props : children); break; default: parse$b(characters2, reference, reference, reference, [""], children, 0, points, children); } } index2 = offset = property = 0, variable = ampersand = 1, type2 = characters2 = "", length2 = pseudo; break; case 58: length2 = 1 + strlen(characters2), property = previous2; default: if (variable < 1) { if (character2 == 123) --variable; else if (character2 == 125 && variable++ == 0 && prev() == 125) continue; } switch (characters2 += from(character2), character2 * variable) { case 38: ampersand = offset > 0 ? 1 : (characters2 += "\f", -1); break; case 44: points[index2++] = (strlen(characters2) - 1) * ampersand, ampersand = 1; break; case 64: if (peek() === 45) characters2 += delimit(next$1()); atrule = peek(), offset = length2 = strlen(type2 = characters2 += identifier(caret$1())), character2++; break; case 45: if (previous2 === 45 && strlen(characters2) == 2) variable = 0; } } return rulesets; } function ruleset(value, root2, parent, index2, offset, rules, points, type2, props, children, length2) { var post = offset - 1; var rule = offset === 0 ? rules : [""]; var size2 = sizeof(rule); for (var i2 = 0, j2 = 0, k2 = 0; i2 < index2; ++i2) for (var x2 = 0, y2 = substr(value, post + 1, post = abs$1(j2 = points[i2])), z2 = value; x2 < size2; ++x2) if (z2 = trim$1(j2 > 0 ? rule[x2] + " " + y2 : replace$1(y2, /&\f/g, rule[x2]))) props[k2++] = z2; return node(value, root2, parent, offset === 0 ? RULESET : type2, props, children, length2); } function comment(value, root2, parent) { return node(value, root2, parent, COMMENT, from(char()), substr(value, 2, -2), 0); } function declaration(value, root2, parent, length2) { return node(value, root2, parent, DECLARATION, substr(value, 0, length2), substr(value, length2 + 1, -1), length2); } function serialize(children, callback) { var output = ""; var length2 = sizeof(children); for (var i2 = 0; i2 < length2; i2++) output += callback(children[i2], i2, children, callback) || ""; return output; } function stringify$1(element, index2, children, callback) { switch (element.type) { case IMPORT: case DECLARATION: return element.return = element.return || element.value; case COMMENT: return ""; case KEYFRAMES: return element.return = element.value + "{" + serialize(element.children, callback) + "}"; case RULESET: element.value = element.props.join(","); } return strlen(children = serialize(element.children, callback)) ? element.return = element.value + "{" + children + "}" : ""; } function middleware(collection) { var length2 = sizeof(collection); return function(element, index2, children, callback) { var output = ""; for (var i2 = 0; i2 < length2; i2++) output += collection[i2](element, index2, children, callback) || ""; return output; }; } function rulesheet(callback) { return function(element) { if (!element.root) { if (element = element.return) callback(element); } }; } var utils = {}; var entities = { exports: {} }; const Aacute = "\xC1"; const aacute = "\xE1"; const Abreve = "\u0102"; const abreve = "\u0103"; const ac$1 = "\u223E"; const acd = "\u223F"; const acE = "\u223E\u0333"; const Acirc = "\xC2"; const acirc = "\xE2"; const acute = "\xB4"; const Acy = "\u0410"; const acy = "\u0430"; const AElig = "\xC6"; const aelig = "\xE6"; const af$1 = "\u2061"; const Afr = "\u{1D504}"; const afr = "\u{1D51E}"; const Agrave = "\xC0"; const agrave = "\xE0"; const alefsym = "\u2135"; const aleph = "\u2135"; const Alpha = "\u0391"; const alpha = "\u03B1"; const Amacr = "\u0100"; const amacr = "\u0101"; const amalg = "\u2A3F"; const amp = "&"; const AMP = "&"; const andand = "\u2A55"; const And = "\u2A53"; const and = "\u2227"; const andd = "\u2A5C"; const andslope = "\u2A58"; const andv = "\u2A5A"; const ang = "\u2220"; const ange = "\u29A4"; const angle = "\u2220"; const angmsdaa = "\u29A8"; const angmsdab = "\u29A9"; const angmsdac = "\u29AA"; const angmsdad = "\u29AB"; const angmsdae = "\u29AC"; const angmsdaf = "\u29AD"; const angmsdag = "\u29AE"; const angmsdah = "\u29AF"; const angmsd = "\u2221"; const angrt = "\u221F"; const angrtvb = "\u22BE"; const angrtvbd = "\u299D"; const angsph = "\u2222"; const angst = "\xC5"; const angzarr = "\u237C"; const Aogon = "\u0104"; const aogon = "\u0105"; const Aopf = "\u{1D538}"; const aopf = "\u{1D552}"; const apacir = "\u2A6F"; const ap = "\u2248"; const apE = "\u2A70"; const ape = "\u224A"; const apid = "\u224B"; const apos = "'"; const ApplyFunction = "\u2061"; const approx = "\u2248"; const approxeq = "\u224A"; const Aring = "\xC5"; const aring = "\xE5"; const Ascr = "\u{1D49C}"; const ascr = "\u{1D4B6}"; const Assign = "\u2254"; const ast = "*"; const asymp = "\u2248"; const asympeq = "\u224D"; const Atilde = "\xC3"; const atilde = "\xE3"; const Auml = "\xC4"; const auml = "\xE4"; const awconint = "\u2233"; const awint = "\u2A11"; const backcong = "\u224C"; const backepsilon = "\u03F6"; const backprime = "\u2035"; const backsim = "\u223D"; const backsimeq = "\u22CD"; const Backslash = "\u2216"; const Barv = "\u2AE7"; const barvee = "\u22BD"; const barwed = "\u2305"; const Barwed = "\u2306"; const barwedge = "\u2305"; const bbrk = "\u23B5"; const bbrktbrk = "\u23B6"; const bcong = "\u224C"; const Bcy = "\u0411"; const bcy = "\u0431"; const bdquo = "\u201E"; const becaus = "\u2235"; const because = "\u2235"; const Because = "\u2235"; const bemptyv = "\u29B0"; const bepsi = "\u03F6"; const bernou = "\u212C"; const Bernoullis = "\u212C"; const Beta = "\u0392"; const beta = "\u03B2"; const beth = "\u2136"; const between = "\u226C"; const Bfr = "\u{1D505}"; const bfr = "\u{1D51F}"; const bigcap = "\u22C2"; const bigcirc = "\u25EF"; const bigcup = "\u22C3"; const bigodot = "\u2A00"; const bigoplus = "\u2A01"; const bigotimes = "\u2A02"; const bigsqcup = "\u2A06"; const bigstar = "\u2605"; const bigtriangledown = "\u25BD"; const bigtriangleup = "\u25B3"; const biguplus = "\u2A04"; const bigvee = "\u22C1"; const bigwedge = "\u22C0"; const bkarow = "\u290D"; const blacklozenge = "\u29EB"; const blacksquare = "\u25AA"; const blacktriangle = "\u25B4"; const blacktriangledown = "\u25BE"; const blacktriangleleft = "\u25C2"; const blacktriangleright = "\u25B8"; const blank = "\u2423"; const blk12 = "\u2592"; const blk14 = "\u2591"; const blk34 = "\u2593"; const block = "\u2588"; const bne = "=\u20E5"; const bnequiv = "\u2261\u20E5"; const bNot = "\u2AED"; const bnot = "\u2310"; const Bopf = "\u{1D539}"; const bopf = "\u{1D553}"; const bot = "\u22A5"; const bottom = "\u22A5"; const bowtie = "\u22C8"; const boxbox = "\u29C9"; const boxdl = "\u2510"; const boxdL = "\u2555"; const boxDl = "\u2556"; const boxDL = "\u2557"; const boxdr = "\u250C"; const boxdR = "\u2552"; const boxDr = "\u2553"; const boxDR = "\u2554"; const boxh = "\u2500"; const boxH = "\u2550"; const boxhd = "\u252C"; const boxHd = "\u2564"; const boxhD = "\u2565"; const boxHD = "\u2566"; const boxhu = "\u2534"; const boxHu = "\u2567"; const boxhU = "\u2568"; const boxHU = "\u2569"; const boxminus = "\u229F"; const boxplus = "\u229E"; const boxtimes = "\u22A0"; const boxul = "\u2518"; const boxuL = "\u255B"; const boxUl = "\u255C"; const boxUL = "\u255D"; const boxur = "\u2514"; const boxuR = "\u2558"; const boxUr = "\u2559"; const boxUR = "\u255A"; const boxv = "\u2502"; const boxV = "\u2551"; const boxvh = "\u253C"; const boxvH = "\u256A"; const boxVh = "\u256B"; const boxVH = "\u256C"; const boxvl = "\u2524"; const boxvL = "\u2561"; const boxVl = "\u2562"; const boxVL = "\u2563"; const boxvr = "\u251C"; const boxvR = "\u255E"; const boxVr = "\u255F"; const boxVR = "\u2560"; const bprime = "\u2035"; const breve = "\u02D8"; const Breve = "\u02D8"; const brvbar = "\xA6"; const bscr = "\u{1D4B7}"; const Bscr = "\u212C"; const bsemi = "\u204F"; const bsim = "\u223D"; const bsime = "\u22CD"; const bsolb = "\u29C5"; const bsol = "\\"; const bsolhsub = "\u27C8"; const bull = "\u2022"; const bullet = "\u2022"; const bump = "\u224E"; const bumpE = "\u2AAE"; const bumpe = "\u224F"; const Bumpeq = "\u224E"; const bumpeq = "\u224F"; const Cacute = "\u0106"; const cacute = "\u0107"; const capand = "\u2A44"; const capbrcup = "\u2A49"; const capcap = "\u2A4B"; const cap = "\u2229"; const Cap = "\u22D2"; const capcup = "\u2A47"; const capdot = "\u2A40"; const CapitalDifferentialD = "\u2145"; const caps = "\u2229\uFE00"; const caret = "\u2041"; const caron = "\u02C7"; const Cayleys = "\u212D"; const ccaps = "\u2A4D"; const Ccaron = "\u010C"; const ccaron = "\u010D"; const Ccedil = "\xC7"; const ccedil = "\xE7"; const Ccirc = "\u0108"; const ccirc = "\u0109"; const Cconint = "\u2230"; const ccups = "\u2A4C"; const ccupssm = "\u2A50"; const Cdot = "\u010A"; const cdot = "\u010B"; const cedil = "\xB8"; const Cedilla = "\xB8"; const cemptyv = "\u29B2"; const cent = "\xA2"; const centerdot = "\xB7"; const CenterDot = "\xB7"; const cfr = "\u{1D520}"; const Cfr = "\u212D"; const CHcy = "\u0427"; const chcy = "\u0447"; const check = "\u2713"; const checkmark = "\u2713"; const Chi = "\u03A7"; const chi = "\u03C7"; const circ = "\u02C6"; const circeq = "\u2257"; const circlearrowleft = "\u21BA"; const circlearrowright = "\u21BB"; const circledast = "\u229B"; const circledcirc = "\u229A"; const circleddash = "\u229D"; const CircleDot = "\u2299"; const circledR = "\xAE"; const circledS = "\u24C8"; const CircleMinus = "\u2296"; const CirclePlus = "\u2295"; const CircleTimes = "\u2297"; const cir = "\u25CB"; const cirE = "\u29C3"; const cire = "\u2257"; const cirfnint = "\u2A10"; const cirmid = "\u2AEF"; const cirscir = "\u29C2"; const ClockwiseContourIntegral = "\u2232"; const CloseCurlyDoubleQuote = "\u201D"; const CloseCurlyQuote = "\u2019"; const clubs = "\u2663"; const clubsuit = "\u2663"; const colon = ":"; const Colon = "\u2237"; const Colone = "\u2A74"; const colone = "\u2254"; const coloneq = "\u2254"; const comma = ","; const commat = "@"; const comp = "\u2201"; const compfn = "\u2218"; const complement = "\u2201"; const complexes = "\u2102"; const cong = "\u2245"; const congdot = "\u2A6D"; const Congruent = "\u2261"; const conint = "\u222E"; const Conint = "\u222F"; const ContourIntegral = "\u222E"; const copf = "\u{1D554}"; const Copf = "\u2102"; const coprod = "\u2210"; const Coproduct = "\u2210"; const copy = "\xA9"; const COPY = "\xA9"; const copysr = "\u2117"; const CounterClockwiseContourIntegral = "\u2233"; const crarr = "\u21B5"; const cross = "\u2717"; const Cross = "\u2A2F"; const Cscr = "\u{1D49E}"; const cscr = "\u{1D4B8}"; const csub = "\u2ACF"; const csube = "\u2AD1"; const csup = "\u2AD0"; const csupe = "\u2AD2"; const ctdot = "\u22EF"; const cudarrl = "\u2938"; const cudarrr = "\u2935"; const cuepr = "\u22DE"; const cuesc = "\u22DF"; const cularr = "\u21B6"; const cularrp = "\u293D"; const cupbrcap = "\u2A48"; const cupcap = "\u2A46"; const CupCap = "\u224D"; const cup = "\u222A"; const Cup = "\u22D3"; const cupcup = "\u2A4A"; const cupdot = "\u228D"; const cupor = "\u2A45"; const cups = "\u222A\uFE00"; const curarr = "\u21B7"; const curarrm = "\u293C"; const curlyeqprec = "\u22DE"; const curlyeqsucc = "\u22DF"; const curlyvee = "\u22CE"; const curlywedge = "\u22CF"; const curren = "\xA4"; const curvearrowleft = "\u21B6"; const curvearrowright = "\u21B7"; const cuvee = "\u22CE"; const cuwed = "\u22CF"; const cwconint = "\u2232"; const cwint = "\u2231"; const cylcty = "\u232D"; const dagger = "\u2020"; const Dagger = "\u2021"; const daleth = "\u2138"; const darr = "\u2193"; const Darr = "\u21A1"; const dArr = "\u21D3"; const dash = "\u2010"; const Dashv = "\u2AE4"; const dashv = "\u22A3"; const dbkarow = "\u290F"; const dblac = "\u02DD"; const Dcaron = "\u010E"; const dcaron = "\u010F"; const Dcy = "\u0414"; const dcy = "\u0434"; const ddagger = "\u2021"; const ddarr = "\u21CA"; const DD = "\u2145"; const dd$1 = "\u2146"; const DDotrahd = "\u2911"; const ddotseq = "\u2A77"; const deg = "\xB0"; const Del = "\u2207"; const Delta = "\u0394"; const delta = "\u03B4"; const demptyv = "\u29B1"; const dfisht = "\u297F"; const Dfr = "\u{1D507}"; const dfr = "\u{1D521}"; const dHar = "\u2965"; const dharl = "\u21C3"; const dharr = "\u21C2"; const DiacriticalAcute = "\xB4"; const DiacriticalDot = "\u02D9"; const DiacriticalDoubleAcute = "\u02DD"; const DiacriticalGrave = "`"; const DiacriticalTilde = "\u02DC"; const diam = "\u22C4"; const diamond = "\u22C4"; const Diamond = "\u22C4"; const diamondsuit = "\u2666"; const diams = "\u2666"; const die = "\xA8"; const DifferentialD = "\u2146"; const digamma = "\u03DD"; const disin = "\u22F2"; const div = "\xF7"; const divide = "\xF7"; const divideontimes = "\u22C7"; const divonx = "\u22C7"; const DJcy = "\u0402"; const djcy = "\u0452"; const dlcorn = "\u231E"; const dlcrop = "\u230D"; const dollar = "$"; const Dopf = "\u{1D53B}"; const dopf = "\u{1D555}"; const Dot = "\xA8"; const dot = "\u02D9"; const DotDot = "\u20DC"; const doteq = "\u2250"; const doteqdot = "\u2251"; const DotEqual = "\u2250"; const dotminus = "\u2238"; const dotplus = "\u2214"; const dotsquare = "\u22A1"; const doublebarwedge = "\u2306"; const DoubleContourIntegral = "\u222F"; const DoubleDot = "\xA8"; const DoubleDownArrow = "\u21D3"; const DoubleLeftArrow = "\u21D0"; const DoubleLeftRightArrow = "\u21D4"; const DoubleLeftTee = "\u2AE4"; const DoubleLongLeftArrow = "\u27F8"; const DoubleLongLeftRightArrow = "\u27FA"; const DoubleLongRightArrow = "\u27F9"; const DoubleRightArrow = "\u21D2"; const DoubleRightTee = "\u22A8"; const DoubleUpArrow = "\u21D1"; const DoubleUpDownArrow = "\u21D5"; const DoubleVerticalBar = "\u2225"; const DownArrowBar = "\u2913"; const downarrow = "\u2193"; const DownArrow = "\u2193"; const Downarrow = "\u21D3"; const DownArrowUpArrow = "\u21F5"; const DownBreve = "\u0311"; const downdownarrows = "\u21CA"; const downharpoonleft = "\u21C3"; const downharpoonright = "\u21C2"; const DownLeftRightVector = "\u2950"; const DownLeftTeeVector = "\u295E"; const DownLeftVectorBar = "\u2956"; const DownLeftVector = "\u21BD"; const DownRightTeeVector = "\u295F"; const DownRightVectorBar = "\u2957"; const DownRightVector = "\u21C1"; const DownTeeArrow = "\u21A7"; const DownTee = "\u22A4"; const drbkarow = "\u2910"; const drcorn = "\u231F"; const drcrop = "\u230C"; const Dscr = "\u{1D49F}"; const dscr = "\u{1D4B9}"; const DScy = "\u0405"; const dscy = "\u0455"; const dsol = "\u29F6"; const Dstrok = "\u0110"; const dstrok = "\u0111"; const dtdot = "\u22F1"; const dtri = "\u25BF"; const dtrif = "\u25BE"; const duarr = "\u21F5"; const duhar = "\u296F"; const dwangle = "\u29A6"; const DZcy = "\u040F"; const dzcy = "\u045F"; const dzigrarr = "\u27FF"; const Eacute = "\xC9"; const eacute = "\xE9"; const easter = "\u2A6E"; const Ecaron = "\u011A"; const ecaron = "\u011B"; const Ecirc = "\xCA"; const ecirc = "\xEA"; const ecir = "\u2256"; const ecolon = "\u2255"; const Ecy = "\u042D"; const ecy = "\u044D"; const eDDot = "\u2A77"; const Edot = "\u0116"; const edot = "\u0117"; const eDot = "\u2251"; const ee$2 = "\u2147"; const efDot = "\u2252"; const Efr = "\u{1D508}"; const efr = "\u{1D522}"; const eg$1 = "\u2A9A"; const Egrave = "\xC8"; const egrave = "\xE8"; const egs = "\u2A96"; const egsdot = "\u2A98"; const el$1 = "\u2A99"; const Element$1 = "\u2208"; const elinters = "\u23E7"; const ell = "\u2113"; const els = "\u2A95"; const elsdot = "\u2A97"; const Emacr = "\u0112"; const emacr = "\u0113"; const empty = "\u2205"; const emptyset = "\u2205"; const EmptySmallSquare = "\u25FB"; const emptyv = "\u2205"; const EmptyVerySmallSquare = "\u25AB"; const emsp13 = "\u2004"; const emsp14 = "\u2005"; const emsp = "\u2003"; const ENG = "\u014A"; const eng = "\u014B"; const ensp = "\u2002"; const Eogon = "\u0118"; const eogon = "\u0119"; const Eopf = "\u{1D53C}"; const eopf = "\u{1D556}"; const epar = "\u22D5"; const eparsl = "\u29E3"; const eplus = "\u2A71"; const epsi = "\u03B5"; const Epsilon = "\u0395"; const epsilon = "\u03B5"; const epsiv = "\u03F5"; const eqcirc = "\u2256"; const eqcolon = "\u2255"; const eqsim = "\u2242"; const eqslantgtr = "\u2A96"; const eqslantless = "\u2A95"; const Equal = "\u2A75"; const equals = "="; const EqualTilde = "\u2242"; const equest = "\u225F"; const Equilibrium = "\u21CC"; const equiv = "\u2261"; const equivDD = "\u2A78"; const eqvparsl = "\u29E5"; const erarr = "\u2971"; const erDot = "\u2253"; const escr = "\u212F"; const Escr = "\u2130"; const esdot = "\u2250"; const Esim = "\u2A73"; const esim = "\u2242"; const Eta = "\u0397"; const eta = "\u03B7"; const ETH = "\xD0"; const eth = "\xF0"; const Euml = "\xCB"; const euml = "\xEB"; const euro = "\u20AC"; const excl = "!"; const exist = "\u2203"; const Exists = "\u2203"; const expectation = "\u2130"; const exponentiale = "\u2147"; const ExponentialE = "\u2147"; const fallingdotseq = "\u2252"; const Fcy = "\u0424"; const fcy = "\u0444"; const female = "\u2640"; const ffilig = "\uFB03"; const fflig = "\uFB00"; const ffllig = "\uFB04"; const Ffr = "\u{1D509}"; const ffr = "\u{1D523}"; const filig = "\uFB01"; const FilledSmallSquare = "\u25FC"; const FilledVerySmallSquare = "\u25AA"; const fjlig = "fj"; const flat$1 = "\u266D"; const fllig = "\uFB02"; const fltns = "\u25B1"; const fnof = "\u0192"; const Fopf = "\u{1D53D}"; const fopf = "\u{1D557}"; const forall = "\u2200"; const ForAll = "\u2200"; const fork = "\u22D4"; const forkv = "\u2AD9"; const Fouriertrf = "\u2131"; const fpartint = "\u2A0D"; const frac12 = "\xBD"; const frac13 = "\u2153"; const frac14 = "\xBC"; const frac15 = "\u2155"; const frac16 = "\u2159"; const frac18 = "\u215B"; const frac23 = "\u2154"; const frac25 = "\u2156"; const frac34 = "\xBE"; const frac35 = "\u2157"; const frac38 = "\u215C"; const frac45 = "\u2158"; const frac56 = "\u215A"; const frac58 = "\u215D"; const frac78 = "\u215E"; const frasl = "\u2044"; const frown = "\u2322"; const fscr = "\u{1D4BB}"; const Fscr = "\u2131"; const gacute = "\u01F5"; const Gamma = "\u0393"; const gamma = "\u03B3"; const Gammad = "\u03DC"; const gammad = "\u03DD"; const gap = "\u2A86"; const Gbreve = "\u011E"; const gbreve = "\u011F"; const Gcedil = "\u0122"; const Gcirc = "\u011C"; const gcirc = "\u011D"; const Gcy = "\u0413"; const gcy = "\u0433"; const Gdot = "\u0120"; const gdot = "\u0121"; const ge$1 = "\u2265"; const gE = "\u2267"; const gEl = "\u2A8C"; const gel = "\u22DB"; const geq = "\u2265"; const geqq = "\u2267"; const geqslant = "\u2A7E"; const gescc = "\u2AA9"; const ges = "\u2A7E"; const gesdot = "\u2A80"; const gesdoto = "\u2A82"; const gesdotol = "\u2A84"; const gesl = "\u22DB\uFE00"; const gesles = "\u2A94"; const Gfr = "\u{1D50A}"; const gfr = "\u{1D524}"; const gg$1 = "\u226B"; const Gg$1 = "\u22D9"; const ggg = "\u22D9"; const gimel = "\u2137"; const GJcy = "\u0403"; const gjcy = "\u0453"; const gla = "\u2AA5"; const gl$1 = "\u2277"; const glE = "\u2A92"; const glj = "\u2AA4"; const gnap = "\u2A8A"; const gnapprox = "\u2A8A"; const gne = "\u2A88"; const gnE = "\u2269"; const gneq = "\u2A88"; const gneqq = "\u2269"; const gnsim = "\u22E7"; const Gopf = "\u{1D53E}"; const gopf = "\u{1D558}"; const grave = "`"; const GreaterEqual = "\u2265"; const GreaterEqualLess = "\u22DB"; const GreaterFullEqual = "\u2267"; const GreaterGreater = "\u2AA2"; const GreaterLess = "\u2277"; const GreaterSlantEqual = "\u2A7E"; const GreaterTilde = "\u2273"; const Gscr = "\u{1D4A2}"; const gscr = "\u210A"; const gsim = "\u2273"; const gsime = "\u2A8E"; const gsiml = "\u2A90"; const gtcc = "\u2AA7"; const gtcir = "\u2A7A"; const gt$5 = ">"; const GT = ">"; const Gt = "\u226B"; const gtdot = "\u22D7"; const gtlPar = "\u2995"; const gtquest = "\u2A7C"; const gtrapprox = "\u2A86"; const gtrarr = "\u2978"; const gtrdot = "\u22D7"; const gtreqless = "\u22DB"; const gtreqqless = "\u2A8C"; const gtrless = "\u2277"; const gtrsim = "\u2273"; const gvertneqq = "\u2269\uFE00"; const gvnE = "\u2269\uFE00"; const Hacek = "\u02C7"; const hairsp = "\u200A"; const half = "\xBD"; const hamilt = "\u210B"; const HARDcy = "\u042A"; const hardcy = "\u044A"; const harrcir = "\u2948"; const harr = "\u2194"; const hArr = "\u21D4"; const harrw = "\u21AD"; const Hat = "^"; const hbar = "\u210F"; const Hcirc = "\u0124"; const hcirc = "\u0125"; const hearts = "\u2665"; const heartsuit = "\u2665"; const hellip = "\u2026"; const hercon = "\u22B9"; const hfr = "\u{1D525}"; const Hfr = "\u210C"; const HilbertSpace = "\u210B"; const hksearow = "\u2925"; const hkswarow = "\u2926"; const hoarr = "\u21FF"; const homtht = "\u223B"; const hookleftarrow = "\u21A9"; const hookrightarrow = "\u21AA"; const hopf = "\u{1D559}"; const Hopf = "\u210D"; const horbar = "\u2015"; const HorizontalLine = "\u2500"; const hscr = "\u{1D4BD}"; const Hscr = "\u210B"; const hslash = "\u210F"; const Hstrok = "\u0126"; const hstrok = "\u0127"; const HumpDownHump = "\u224E"; const HumpEqual = "\u224F"; const hybull = "\u2043"; const hyphen = "\u2010"; const Iacute = "\xCD"; const iacute = "\xED"; const ic$1 = "\u2063"; const Icirc = "\xCE"; const icirc = "\xEE"; const Icy = "\u0418"; const icy = "\u0438"; const Idot = "\u0130"; const IEcy = "\u0415"; const iecy = "\u0435"; const iexcl = "\xA1"; const iff = "\u21D4"; const ifr = "\u{1D526}"; const Ifr = "\u2111"; const Igrave = "\xCC"; const igrave = "\xEC"; const ii$1 = "\u2148"; const iiiint = "\u2A0C"; const iiint = "\u222D"; const iinfin = "\u29DC"; const iiota = "\u2129"; const IJlig = "\u0132"; const ijlig = "\u0133"; const Imacr = "\u012A"; const imacr = "\u012B"; const image = "\u2111"; const ImaginaryI = "\u2148"; const imagline = "\u2110"; const imagpart = "\u2111"; const imath = "\u0131"; const Im = "\u2111"; const imof = "\u22B7"; const imped = "\u01B5"; const Implies = "\u21D2"; const incare = "\u2105"; const infin = "\u221E"; const infintie = "\u29DD"; const inodot = "\u0131"; const intcal = "\u22BA"; const int = "\u222B"; const Int = "\u222C"; const integers = "\u2124"; const Integral = "\u222B"; const intercal = "\u22BA"; const Intersection = "\u22C2"; const intlarhk = "\u2A17"; const intprod = "\u2A3C"; const InvisibleComma = "\u2063"; const InvisibleTimes = "\u2062"; const IOcy = "\u0401"; const iocy = "\u0451"; const Iogon = "\u012E"; const iogon = "\u012F"; const Iopf = "\u{1D540}"; const iopf = "\u{1D55A}"; const Iota = "\u0399"; const iota = "\u03B9"; const iprod = "\u2A3C"; const iquest = "\xBF"; const iscr = "\u{1D4BE}"; const Iscr = "\u2110"; const isin = "\u2208"; const isindot = "\u22F5"; const isinE = "\u22F9"; const isins = "\u22F4"; const isinsv = "\u22F3"; const isinv = "\u2208"; const it = "\u2062"; const Itilde = "\u0128"; const itilde = "\u0129"; const Iukcy = "\u0406"; const iukcy = "\u0456"; const Iuml = "\xCF"; const iuml = "\xEF"; const Jcirc = "\u0134"; const jcirc = "\u0135"; const Jcy = "\u0419"; const jcy = "\u0439"; const Jfr = "\u{1D50D}"; const jfr = "\u{1D527}"; const jmath = "\u0237"; const Jopf = "\u{1D541}"; const jopf = "\u{1D55B}"; const Jscr = "\u{1D4A5}"; const jscr = "\u{1D4BF}"; const Jsercy = "\u0408"; const jsercy = "\u0458"; const Jukcy = "\u0404"; const jukcy = "\u0454"; const Kappa = "\u039A"; const kappa = "\u03BA"; const kappav = "\u03F0"; const Kcedil = "\u0136"; const kcedil = "\u0137"; const Kcy = "\u041A"; const kcy = "\u043A"; const Kfr = "\u{1D50E}"; const kfr = "\u{1D528}"; const kgreen = "\u0138"; const KHcy = "\u0425"; const khcy = "\u0445"; const KJcy = "\u040C"; const kjcy = "\u045C"; const Kopf = "\u{1D542}"; const kopf = "\u{1D55C}"; const Kscr = "\u{1D4A6}"; const kscr = "\u{1D4C0}"; const lAarr = "\u21DA"; const Lacute = "\u0139"; const lacute = "\u013A"; const laemptyv = "\u29B4"; const lagran = "\u2112"; const Lambda = "\u039B"; const lambda = "\u03BB"; const lang = "\u27E8"; const Lang = "\u27EA"; const langd = "\u2991"; const langle = "\u27E8"; const lap = "\u2A85"; const Laplacetrf = "\u2112"; const laquo = "\xAB"; const larrb = "\u21E4"; const larrbfs = "\u291F"; const larr = "\u2190"; const Larr = "\u219E"; const lArr = "\u21D0"; const larrfs = "\u291D"; const larrhk = "\u21A9"; const larrlp = "\u21AB"; const larrpl = "\u2939"; const larrsim = "\u2973"; const larrtl = "\u21A2"; const latail = "\u2919"; const lAtail = "\u291B"; const lat = "\u2AAB"; const late = "\u2AAD"; const lates = "\u2AAD\uFE00"; const lbarr = "\u290C"; const lBarr = "\u290E"; const lbbrk = "\u2772"; const lbrace = "{"; const lbrack = "["; const lbrke = "\u298B"; const lbrksld = "\u298F"; const lbrkslu = "\u298D"; const Lcaron = "\u013D"; const lcaron = "\u013E"; const Lcedil = "\u013B"; const lcedil = "\u013C"; const lceil = "\u2308"; const lcub = "{"; const Lcy = "\u041B"; const lcy = "\u043B"; const ldca = "\u2936"; const ldquo = "\u201C"; const ldquor = "\u201E"; const ldrdhar = "\u2967"; const ldrushar = "\u294B"; const ldsh = "\u21B2"; const le$1 = "\u2264"; const lE = "\u2266"; const LeftAngleBracket = "\u27E8"; const LeftArrowBar = "\u21E4"; const leftarrow = "\u2190"; const LeftArrow = "\u2190"; const Leftarrow = "\u21D0"; const LeftArrowRightArrow = "\u21C6"; const leftarrowtail = "\u21A2"; const LeftCeiling = "\u2308"; const LeftDoubleBracket = "\u27E6"; const LeftDownTeeVector = "\u2961"; const LeftDownVectorBar = "\u2959"; const LeftDownVector = "\u21C3"; const LeftFloor = "\u230A"; const leftharpoondown = "\u21BD"; const leftharpoonup = "\u21BC"; const leftleftarrows = "\u21C7"; const leftrightarrow = "\u2194"; const LeftRightArrow = "\u2194"; const Leftrightarrow = "\u21D4"; const leftrightarrows = "\u21C6"; const leftrightharpoons = "\u21CB"; const leftrightsquigarrow = "\u21AD"; const LeftRightVector = "\u294E"; const LeftTeeArrow = "\u21A4"; const LeftTee = "\u22A3"; const LeftTeeVector = "\u295A"; const leftthreetimes = "\u22CB"; const LeftTriangleBar = "\u29CF"; const LeftTriangle = "\u22B2"; const LeftTriangleEqual = "\u22B4"; const LeftUpDownVector = "\u2951"; const LeftUpTeeVector = "\u2960"; const LeftUpVectorBar = "\u2958"; const LeftUpVector = "\u21BF"; const LeftVectorBar = "\u2952"; const LeftVector = "\u21BC"; const lEg = "\u2A8B"; const leg = "\u22DA"; const leq = "\u2264"; const leqq = "\u2266"; const leqslant = "\u2A7D"; const lescc = "\u2AA8"; const les = "\u2A7D"; const lesdot = "\u2A7F"; const lesdoto = "\u2A81"; const lesdotor = "\u2A83"; const lesg = "\u22DA\uFE00"; const lesges = "\u2A93"; const lessapprox = "\u2A85"; const lessdot = "\u22D6"; const lesseqgtr = "\u22DA"; const lesseqqgtr = "\u2A8B"; const LessEqualGreater = "\u22DA"; const LessFullEqual = "\u2266"; const LessGreater = "\u2276"; const lessgtr = "\u2276"; const LessLess = "\u2AA1"; const lesssim = "\u2272"; const LessSlantEqual = "\u2A7D"; const LessTilde = "\u2272"; const lfisht = "\u297C"; const lfloor = "\u230A"; const Lfr = "\u{1D50F}"; const lfr = "\u{1D529}"; const lg$1 = "\u2276"; const lgE = "\u2A91"; const lHar = "\u2962"; const lhard = "\u21BD"; const lharu = "\u21BC"; const lharul = "\u296A"; const lhblk = "\u2584"; const LJcy = "\u0409"; const ljcy = "\u0459"; const llarr = "\u21C7"; const ll$1 = "\u226A"; const Ll = "\u22D8"; const llcorner = "\u231E"; const Lleftarrow = "\u21DA"; const llhard = "\u296B"; const lltri = "\u25FA"; const Lmidot = "\u013F"; const lmidot = "\u0140"; const lmoustache = "\u23B0"; const lmoust = "\u23B0"; const lnap = "\u2A89"; const lnapprox = "\u2A89"; const lne = "\u2A87"; const lnE = "\u2268"; const lneq = "\u2A87"; const lneqq = "\u2268"; const lnsim = "\u22E6"; const loang = "\u27EC"; const loarr = "\u21FD"; const lobrk = "\u27E6"; const longleftarrow = "\u27F5"; const LongLeftArrow = "\u27F5"; const Longleftarrow = "\u27F8"; const longleftrightarrow = "\u27F7"; const LongLeftRightArrow = "\u27F7"; const Longleftrightarrow = "\u27FA"; const longmapsto = "\u27FC"; const longrightarrow = "\u27F6"; const LongRightArrow = "\u27F6"; const Longrightarrow = "\u27F9"; const looparrowleft = "\u21AB"; const looparrowright = "\u21AC"; const lopar = "\u2985"; const Lopf = "\u{1D543}"; const lopf = "\u{1D55D}"; const loplus = "\u2A2D"; const lotimes = "\u2A34"; const lowast = "\u2217"; const lowbar = "_"; const LowerLeftArrow = "\u2199"; const LowerRightArrow = "\u2198"; const loz = "\u25CA"; const lozenge = "\u25CA"; const lozf = "\u29EB"; const lpar = "("; const lparlt = "\u2993"; const lrarr = "\u21C6"; const lrcorner = "\u231F"; const lrhar = "\u21CB"; const lrhard = "\u296D"; const lrm = "\u200E"; const lrtri = "\u22BF"; const lsaquo = "\u2039"; const lscr = "\u{1D4C1}"; const Lscr = "\u2112"; const lsh = "\u21B0"; const Lsh = "\u21B0"; const lsim = "\u2272"; const lsime = "\u2A8D"; const lsimg = "\u2A8F"; const lsqb = "["; const lsquo = "\u2018"; const lsquor = "\u201A"; const Lstrok = "\u0141"; const lstrok = "\u0142"; const ltcc = "\u2AA6"; const ltcir = "\u2A79"; const lt$4 = "<"; const LT = "<"; const Lt = "\u226A"; const ltdot = "\u22D6"; const lthree = "\u22CB"; const ltimes = "\u22C9"; const ltlarr = "\u2976"; const ltquest = "\u2A7B"; const ltri = "\u25C3"; const ltrie = "\u22B4"; const ltrif = "\u25C2"; const ltrPar = "\u2996"; const lurdshar = "\u294A"; const luruhar = "\u2966"; const lvertneqq = "\u2268\uFE00"; const lvnE = "\u2268\uFE00"; const macr = "\xAF"; const male = "\u2642"; const malt = "\u2720"; const maltese = "\u2720"; const map = "\u21A6"; const mapsto = "\u21A6"; const mapstodown = "\u21A7"; const mapstoleft = "\u21A4"; const mapstoup = "\u21A5"; const marker = "\u25AE"; const mcomma = "\u2A29"; const Mcy = "\u041C"; const mcy = "\u043C"; const mdash = "\u2014"; const mDDot = "\u223A"; const measuredangle = "\u2221"; const MediumSpace = "\u205F"; const Mellintrf = "\u2133"; const Mfr = "\u{1D510}"; const mfr = "\u{1D52A}"; const mho = "\u2127"; const micro = "\xB5"; const midast = "*"; const midcir = "\u2AF0"; const mid = "\u2223"; const middot = "\xB7"; const minusb = "\u229F"; const minus = "\u2212"; const minusd = "\u2238"; const minusdu = "\u2A2A"; const MinusPlus = "\u2213"; const mlcp = "\u2ADB"; const mldr = "\u2026"; const mnplus = "\u2213"; const models$1 = "\u22A7"; const Mopf = "\u{1D544}"; const mopf = "\u{1D55E}"; const mp = "\u2213"; const mscr = "\u{1D4C2}"; const Mscr = "\u2133"; const mstpos = "\u223E"; const Mu = "\u039C"; const mu = "\u03BC"; const multimap = "\u22B8"; const mumap = "\u22B8"; const nabla = "\u2207"; const Nacute = "\u0143"; const nacute = "\u0144"; const nang = "\u2220\u20D2"; const nap = "\u2249"; const napE = "\u2A70\u0338"; const napid = "\u224B\u0338"; const napos = "\u0149"; const napprox = "\u2249"; const natural = "\u266E"; const naturals = "\u2115"; const natur = "\u266E"; const nbsp = "\xA0"; const nbump = "\u224E\u0338"; const nbumpe = "\u224F\u0338"; const ncap = "\u2A43"; const Ncaron = "\u0147"; const ncaron = "\u0148"; const Ncedil = "\u0145"; const ncedil = "\u0146"; const ncong = "\u2247"; const ncongdot = "\u2A6D\u0338"; const ncup = "\u2A42"; const Ncy = "\u041D"; const ncy = "\u043D"; const ndash = "\u2013"; const nearhk = "\u2924"; const nearr = "\u2197"; const neArr = "\u21D7"; const nearrow = "\u2197"; const ne$1 = "\u2260"; const nedot = "\u2250\u0338"; const NegativeMediumSpace = "\u200B"; const NegativeThickSpace = "\u200B"; const NegativeThinSpace = "\u200B"; const NegativeVeryThinSpace = "\u200B"; const nequiv = "\u2262"; const nesear = "\u2928"; const nesim = "\u2242\u0338"; const NestedGreaterGreater = "\u226B"; const NestedLessLess = "\u226A"; const NewLine = "\n"; const nexist = "\u2204"; const nexists = "\u2204"; const Nfr = "\u{1D511}"; const nfr = "\u{1D52B}"; const ngE = "\u2267\u0338"; const nge = "\u2271"; const ngeq = "\u2271"; const ngeqq = "\u2267\u0338"; const ngeqslant = "\u2A7E\u0338"; const nges = "\u2A7E\u0338"; const nGg = "\u22D9\u0338"; const ngsim = "\u2275"; const nGt = "\u226B\u20D2"; const ngt = "\u226F"; const ngtr = "\u226F"; const nGtv = "\u226B\u0338"; const nharr = "\u21AE"; const nhArr = "\u21CE"; const nhpar = "\u2AF2"; const ni$1 = "\u220B"; const nis = "\u22FC"; const nisd = "\u22FA"; const niv = "\u220B"; const NJcy = "\u040A"; const njcy = "\u045A"; const nlarr = "\u219A"; const nlArr = "\u21CD"; const nldr = "\u2025"; const nlE = "\u2266\u0338"; const nle = "\u2270"; const nleftarrow = "\u219A"; const nLeftarrow = "\u21CD"; const nleftrightarrow = "\u21AE"; const nLeftrightarrow = "\u21CE"; const nleq = "\u2270"; const nleqq = "\u2266\u0338"; const nleqslant = "\u2A7D\u0338"; const nles = "\u2A7D\u0338"; const nless = "\u226E"; const nLl = "\u22D8\u0338"; const nlsim = "\u2274"; const nLt = "\u226A\u20D2"; const nlt = "\u226E"; const nltri = "\u22EA"; const nltrie = "\u22EC"; const nLtv = "\u226A\u0338"; const nmid = "\u2224"; const NoBreak = "\u2060"; const NonBreakingSpace = "\xA0"; const nopf = "\u{1D55F}"; const Nopf = "\u2115"; const Not = "\u2AEC"; const not = "\xAC"; const NotCongruent = "\u2262"; const NotCupCap = "\u226D"; const NotDoubleVerticalBar = "\u2226"; const NotElement = "\u2209"; const NotEqual = "\u2260"; const NotEqualTilde = "\u2242\u0338"; const NotExists = "\u2204"; const NotGreater = "\u226F"; const NotGreaterEqual = "\u2271"; const NotGreaterFullEqual = "\u2267\u0338"; const NotGreaterGreater = "\u226B\u0338"; const NotGreaterLess = "\u2279"; const NotGreaterSlantEqual = "\u2A7E\u0338"; const NotGreaterTilde = "\u2275"; const NotHumpDownHump = "\u224E\u0338"; const NotHumpEqual = "\u224F\u0338"; const notin = "\u2209"; const notindot = "\u22F5\u0338"; const notinE = "\u22F9\u0338"; const notinva = "\u2209"; const notinvb = "\u22F7"; const notinvc = "\u22F6"; const NotLeftTriangleBar = "\u29CF\u0338"; const NotLeftTriangle = "\u22EA"; const NotLeftTriangleEqual = "\u22EC"; const NotLess = "\u226E"; const NotLessEqual = "\u2270"; const NotLessGreater = "\u2278"; const NotLessLess = "\u226A\u0338"; const NotLessSlantEqual = "\u2A7D\u0338"; const NotLessTilde = "\u2274"; const NotNestedGreaterGreater = "\u2AA2\u0338"; const NotNestedLessLess = "\u2AA1\u0338"; const notni = "\u220C"; const notniva = "\u220C"; const notnivb = "\u22FE"; const notnivc = "\u22FD"; const NotPrecedes = "\u2280"; const NotPrecedesEqual = "\u2AAF\u0338"; const NotPrecedesSlantEqual = "\u22E0"; const NotReverseElement = "\u220C"; const NotRightTriangleBar = "\u29D0\u0338"; const NotRightTriangle = "\u22EB"; const NotRightTriangleEqual = "\u22ED"; const NotSquareSubset = "\u228F\u0338"; const NotSquareSubsetEqual = "\u22E2"; const NotSquareSuperset = "\u2290\u0338"; const NotSquareSupersetEqual = "\u22E3"; const NotSubset = "\u2282\u20D2"; const NotSubsetEqual = "\u2288"; const NotSucceeds = "\u2281"; const NotSucceedsEqual = "\u2AB0\u0338"; const NotSucceedsSlantEqual = "\u22E1"; const NotSucceedsTilde = "\u227F\u0338"; const NotSuperset = "\u2283\u20D2"; const NotSupersetEqual = "\u2289"; const NotTilde = "\u2241"; const NotTildeEqual = "\u2244"; const NotTildeFullEqual = "\u2247"; const NotTildeTilde = "\u2249"; const NotVerticalBar = "\u2224"; const nparallel = "\u2226"; const npar = "\u2226"; const nparsl = "\u2AFD\u20E5"; const npart = "\u2202\u0338"; const npolint = "\u2A14"; const npr = "\u2280"; const nprcue = "\u22E0"; const nprec = "\u2280"; const npreceq = "\u2AAF\u0338"; const npre = "\u2AAF\u0338"; const nrarrc = "\u2933\u0338"; const nrarr = "\u219B"; const nrArr = "\u21CF"; const nrarrw = "\u219D\u0338"; const nrightarrow = "\u219B"; const nRightarrow = "\u21CF"; const nrtri = "\u22EB"; const nrtrie = "\u22ED"; const nsc = "\u2281"; const nsccue = "\u22E1"; const nsce = "\u2AB0\u0338"; const Nscr = "\u{1D4A9}"; const nscr = "\u{1D4C3}"; const nshortmid = "\u2224"; const nshortparallel = "\u2226"; const nsim = "\u2241"; const nsime = "\u2244"; const nsimeq = "\u2244"; const nsmid = "\u2224"; const nspar = "\u2226"; const nsqsube = "\u22E2"; const nsqsupe = "\u22E3"; const nsub = "\u2284"; const nsubE = "\u2AC5\u0338"; const nsube = "\u2288"; const nsubset = "\u2282\u20D2"; const nsubseteq = "\u2288"; const nsubseteqq = "\u2AC5\u0338"; const nsucc = "\u2281"; const nsucceq = "\u2AB0\u0338"; const nsup = "\u2285"; const nsupE = "\u2AC6\u0338"; const nsupe = "\u2289"; const nsupset = "\u2283\u20D2"; const nsupseteq = "\u2289"; const nsupseteqq = "\u2AC6\u0338"; const ntgl = "\u2279"; const Ntilde = "\xD1"; const ntilde = "\xF1"; const ntlg = "\u2278"; const ntriangleleft = "\u22EA"; const ntrianglelefteq = "\u22EC"; const ntriangleright = "\u22EB"; const ntrianglerighteq = "\u22ED"; const Nu = "\u039D"; const nu = "\u03BD"; const num = "#"; const numero = "\u2116"; const numsp = "\u2007"; const nvap = "\u224D\u20D2"; const nvdash = "\u22AC"; const nvDash = "\u22AD"; const nVdash = "\u22AE"; const nVDash = "\u22AF"; const nvge = "\u2265\u20D2"; const nvgt = ">\u20D2"; const nvHarr = "\u2904"; const nvinfin = "\u29DE"; const nvlArr = "\u2902"; const nvle = "\u2264\u20D2"; const nvlt = "<\u20D2"; const nvltrie = "\u22B4\u20D2"; const nvrArr = "\u2903"; const nvrtrie = "\u22B5\u20D2"; const nvsim = "\u223C\u20D2"; const nwarhk = "\u2923"; const nwarr = "\u2196"; const nwArr = "\u21D6"; const nwarrow = "\u2196"; const nwnear = "\u2927"; const Oacute = "\xD3"; const oacute = "\xF3"; const oast = "\u229B"; const Ocirc = "\xD4"; const ocirc = "\xF4"; const ocir = "\u229A"; const Ocy = "\u041E"; const ocy = "\u043E"; const odash = "\u229D"; const Odblac = "\u0150"; const odblac = "\u0151"; const odiv = "\u2A38"; const odot = "\u2299"; const odsold = "\u29BC"; const OElig = "\u0152"; const oelig = "\u0153"; const ofcir = "\u29BF"; const Ofr = "\u{1D512}"; const ofr = "\u{1D52C}"; const ogon = "\u02DB"; const Ograve = "\xD2"; const ograve = "\xF2"; const ogt = "\u29C1"; const ohbar = "\u29B5"; const ohm = "\u03A9"; const oint = "\u222E"; const olarr = "\u21BA"; const olcir = "\u29BE"; const olcross = "\u29BB"; const oline = "\u203E"; const olt = "\u29C0"; const Omacr = "\u014C"; const omacr = "\u014D"; const Omega = "\u03A9"; const omega = "\u03C9"; const Omicron = "\u039F"; const omicron = "\u03BF"; const omid = "\u29B6"; const ominus = "\u2296"; const Oopf = "\u{1D546}"; const oopf = "\u{1D560}"; const opar = "\u29B7"; const OpenCurlyDoubleQuote = "\u201C"; const OpenCurlyQuote = "\u2018"; const operp = "\u29B9"; const oplus = "\u2295"; const orarr = "\u21BB"; const Or = "\u2A54"; const or = "\u2228"; const ord = "\u2A5D"; const order = "\u2134"; const orderof = "\u2134"; const ordf = "\xAA"; const ordm = "\xBA"; const origof = "\u22B6"; const oror = "\u2A56"; const orslope = "\u2A57"; const orv = "\u2A5B"; const oS = "\u24C8"; const Oscr = "\u{1D4AA}"; const oscr = "\u2134"; const Oslash = "\xD8"; const oslash = "\xF8"; const osol = "\u2298"; const Otilde = "\xD5"; const otilde = "\xF5"; const otimesas = "\u2A36"; const Otimes = "\u2A37"; const otimes = "\u2297"; const Ouml = "\xD6"; const ouml = "\xF6"; const ovbar = "\u233D"; const OverBar = "\u203E"; const OverBrace = "\u23DE"; const OverBracket = "\u23B4"; const OverParenthesis = "\u23DC"; const para = "\xB6"; const parallel = "\u2225"; const par = "\u2225"; const parsim = "\u2AF3"; const parsl = "\u2AFD"; const part = "\u2202"; const PartialD = "\u2202"; const Pcy = "\u041F"; const pcy = "\u043F"; const percnt = "%"; const period = "."; const permil = "\u2030"; const perp = "\u22A5"; const pertenk = "\u2031"; const Pfr = "\u{1D513}"; const pfr = "\u{1D52D}"; const Phi = "\u03A6"; const phi = "\u03C6"; const phiv = "\u03D5"; const phmmat = "\u2133"; const phone = "\u260E"; const Pi$1 = "\u03A0"; const pi$1 = "\u03C0"; const pitchfork = "\u22D4"; const piv = "\u03D6"; const planck = "\u210F"; const planckh = "\u210E"; const plankv = "\u210F"; const plusacir = "\u2A23"; const plusb = "\u229E"; const pluscir = "\u2A22"; const plus = "+"; const plusdo = "\u2214"; const plusdu = "\u2A25"; const pluse = "\u2A72"; const PlusMinus = "\xB1"; const plusmn = "\xB1"; const plussim = "\u2A26"; const plustwo = "\u2A27"; const pm = "\xB1"; const Poincareplane = "\u210C"; const pointint = "\u2A15"; const popf = "\u{1D561}"; const Popf = "\u2119"; const pound = "\xA3"; const prap = "\u2AB7"; const Pr = "\u2ABB"; const pr = "\u227A"; const prcue = "\u227C"; const precapprox = "\u2AB7"; const prec = "\u227A"; const preccurlyeq = "\u227C"; const Precedes = "\u227A"; const PrecedesEqual = "\u2AAF"; const PrecedesSlantEqual = "\u227C"; const PrecedesTilde = "\u227E"; const preceq = "\u2AAF"; const precnapprox = "\u2AB9"; const precneqq = "\u2AB5"; const precnsim = "\u22E8"; const pre = "\u2AAF"; const prE = "\u2AB3"; const precsim = "\u227E"; const prime = "\u2032"; const Prime = "\u2033"; const primes = "\u2119"; const prnap = "\u2AB9"; const prnE = "\u2AB5"; const prnsim = "\u22E8"; const prod = "\u220F"; const Product = "\u220F"; const profalar = "\u232E"; const profline = "\u2312"; const profsurf = "\u2313"; const prop = "\u221D"; const Proportional = "\u221D"; const Proportion = "\u2237"; const propto = "\u221D"; const prsim = "\u227E"; const prurel = "\u22B0"; const Pscr = "\u{1D4AB}"; const pscr = "\u{1D4C5}"; const Psi = "\u03A8"; const psi = "\u03C8"; const puncsp = "\u2008"; const Qfr = "\u{1D514}"; const qfr = "\u{1D52E}"; const qint = "\u2A0C"; const qopf = "\u{1D562}"; const Qopf = "\u211A"; const qprime = "\u2057"; const Qscr = "\u{1D4AC}"; const qscr = "\u{1D4C6}"; const quaternions = "\u210D"; const quatint = "\u2A16"; const quest = "?"; const questeq = "\u225F"; const quot = '"'; const QUOT = '"'; const rAarr = "\u21DB"; const race = "\u223D\u0331"; const Racute = "\u0154"; const racute = "\u0155"; const radic = "\u221A"; const raemptyv = "\u29B3"; const rang = "\u27E9"; const Rang = "\u27EB"; const rangd = "\u2992"; const range$1 = "\u29A5"; const rangle = "\u27E9"; const raquo = "\xBB"; const rarrap = "\u2975"; const rarrb = "\u21E5"; const rarrbfs = "\u2920"; const rarrc = "\u2933"; const rarr = "\u2192"; const Rarr = "\u21A0"; const rArr = "\u21D2"; const rarrfs = "\u291E"; const rarrhk = "\u21AA"; const rarrlp = "\u21AC"; const rarrpl = "\u2945"; const rarrsim = "\u2974"; const Rarrtl = "\u2916"; const rarrtl = "\u21A3"; const rarrw = "\u219D"; const ratail = "\u291A"; const rAtail = "\u291C"; const ratio = "\u2236"; const rationals = "\u211A"; const rbarr = "\u290D"; const rBarr = "\u290F"; const RBarr = "\u2910"; const rbbrk = "\u2773"; const rbrace = "}"; const rbrack = "]"; const rbrke = "\u298C"; const rbrksld = "\u298E"; const rbrkslu = "\u2990"; const Rcaron = "\u0158"; const rcaron = "\u0159"; const Rcedil = "\u0156"; const rcedil = "\u0157"; const rceil = "\u2309"; const rcub = "}"; const Rcy = "\u0420"; const rcy = "\u0440"; const rdca = "\u2937"; const rdldhar = "\u2969"; const rdquo = "\u201D"; const rdquor = "\u201D"; const rdsh = "\u21B3"; const real = "\u211C"; const realine = "\u211B"; const realpart = "\u211C"; const reals = "\u211D"; const Re$1 = "\u211C"; const rect = "\u25AD"; const reg = "\xAE"; const REG = "\xAE"; const ReverseElement = "\u220B"; const ReverseEquilibrium = "\u21CB"; const ReverseUpEquilibrium = "\u296F"; const rfisht = "\u297D"; const rfloor = "\u230B"; const rfr = "\u{1D52F}"; const Rfr = "\u211C"; const rHar = "\u2964"; const rhard = "\u21C1"; const rharu = "\u21C0"; const rharul = "\u296C"; const Rho = "\u03A1"; const rho = "\u03C1"; const rhov = "\u03F1"; const RightAngleBracket = "\u27E9"; const RightArrowBar = "\u21E5"; const rightarrow = "\u2192"; const RightArrow = "\u2192"; const Rightarrow = "\u21D2"; const RightArrowLeftArrow = "\u21C4"; const rightarrowtail = "\u21A3"; const RightCeiling = "\u2309"; const RightDoubleBracket = "\u27E7"; const RightDownTeeVector = "\u295D"; const RightDownVectorBar = "\u2955"; const RightDownVector = "\u21C2"; const RightFloor = "\u230B"; const rightharpoondown = "\u21C1"; const rightharpoonup = "\u21C0"; const rightleftarrows = "\u21C4"; const rightleftharpoons = "\u21CC"; const rightrightarrows = "\u21C9"; const rightsquigarrow = "\u219D"; const RightTeeArrow = "\u21A6"; const RightTee = "\u22A2"; const RightTeeVector = "\u295B"; const rightthreetimes = "\u22CC"; const RightTriangleBar = "\u29D0"; const RightTriangle = "\u22B3"; const RightTriangleEqual = "\u22B5"; const RightUpDownVector = "\u294F"; const RightUpTeeVector = "\u295C"; const RightUpVectorBar = "\u2954"; const RightUpVector = "\u21BE"; const RightVectorBar = "\u2953"; const RightVector = "\u21C0"; const ring = "\u02DA"; const risingdotseq = "\u2253"; const rlarr = "\u21C4"; const rlhar = "\u21CC"; const rlm = "\u200F"; const rmoustache = "\u23B1"; const rmoust = "\u23B1"; const rnmid = "\u2AEE"; const roang = "\u27ED"; const roarr = "\u21FE"; const robrk = "\u27E7"; const ropar = "\u2986"; const ropf = "\u{1D563}"; const Ropf = "\u211D"; const roplus = "\u2A2E"; const rotimes = "\u2A35"; const RoundImplies = "\u2970"; const rpar = ")"; const rpargt = "\u2994"; const rppolint = "\u2A12"; const rrarr = "\u21C9"; const Rrightarrow = "\u21DB"; const rsaquo = "\u203A"; const rscr = "\u{1D4C7}"; const Rscr = "\u211B"; const rsh = "\u21B1"; const Rsh = "\u21B1"; const rsqb = "]"; const rsquo = "\u2019"; const rsquor = "\u2019"; const rthree = "\u22CC"; const rtimes = "\u22CA"; const rtri = "\u25B9"; const rtrie = "\u22B5"; const rtrif = "\u25B8"; const rtriltri = "\u29CE"; const RuleDelayed = "\u29F4"; const ruluhar = "\u2968"; const rx = "\u211E"; const Sacute = "\u015A"; const sacute = "\u015B"; const sbquo = "\u201A"; const scap = "\u2AB8"; const Scaron = "\u0160"; const scaron = "\u0161"; const Sc$1 = "\u2ABC"; const sc$1 = "\u227B"; const sccue = "\u227D"; const sce = "\u2AB0"; const scE = "\u2AB4"; const Scedil = "\u015E"; const scedil = "\u015F"; const Scirc = "\u015C"; const scirc = "\u015D"; const scnap = "\u2ABA"; const scnE = "\u2AB6"; const scnsim = "\u22E9"; const scpolint = "\u2A13"; const scsim = "\u227F"; const Scy = "\u0421"; const scy = "\u0441"; const sdotb = "\u22A1"; const sdot = "\u22C5"; const sdote = "\u2A66"; const searhk = "\u2925"; const searr = "\u2198"; const seArr = "\u21D8"; const searrow = "\u2198"; const sect = "\xA7"; const semi = ";"; const seswar = "\u2929"; const setminus = "\u2216"; const setmn = "\u2216"; const sext = "\u2736"; const Sfr = "\u{1D516}"; const sfr = "\u{1D530}"; const sfrown = "\u2322"; const sharp = "\u266F"; const SHCHcy = "\u0429"; const shchcy = "\u0449"; const SHcy = "\u0428"; const shcy = "\u0448"; const ShortDownArrow = "\u2193"; const ShortLeftArrow = "\u2190"; const shortmid = "\u2223"; const shortparallel = "\u2225"; const ShortRightArrow = "\u2192"; const ShortUpArrow = "\u2191"; const shy = "\xAD"; const Sigma = "\u03A3"; const sigma = "\u03C3"; const sigmaf = "\u03C2"; const sigmav = "\u03C2"; const sim = "\u223C"; const simdot = "\u2A6A"; const sime = "\u2243"; const simeq = "\u2243"; const simg = "\u2A9E"; const simgE = "\u2AA0"; const siml = "\u2A9D"; const simlE = "\u2A9F"; const simne = "\u2246"; const simplus = "\u2A24"; const simrarr = "\u2972"; const slarr = "\u2190"; const SmallCircle = "\u2218"; const smallsetminus = "\u2216"; const smashp = "\u2A33"; const smeparsl = "\u29E4"; const smid = "\u2223"; const smile = "\u2323"; const smt = "\u2AAA"; const smte = "\u2AAC"; const smtes = "\u2AAC\uFE00"; const SOFTcy = "\u042C"; const softcy = "\u044C"; const solbar = "\u233F"; const solb = "\u29C4"; const sol = "/"; const Sopf = "\u{1D54A}"; const sopf = "\u{1D564}"; const spades = "\u2660"; const spadesuit = "\u2660"; const spar = "\u2225"; const sqcap = "\u2293"; const sqcaps = "\u2293\uFE00"; const sqcup = "\u2294"; const sqcups = "\u2294\uFE00"; const Sqrt = "\u221A"; const sqsub = "\u228F"; const sqsube = "\u2291"; const sqsubset = "\u228F"; const sqsubseteq = "\u2291"; const sqsup = "\u2290"; const sqsupe = "\u2292"; const sqsupset = "\u2290"; const sqsupseteq = "\u2292"; const square = "\u25A1"; const Square = "\u25A1"; const SquareIntersection = "\u2293"; const SquareSubset = "\u228F"; const SquareSubsetEqual = "\u2291"; const SquareSuperset = "\u2290"; const SquareSupersetEqual = "\u2292"; const SquareUnion = "\u2294"; const squarf = "\u25AA"; const squ = "\u25A1"; const squf = "\u25AA"; const srarr = "\u2192"; const Sscr = "\u{1D4AE}"; const sscr = "\u{1D4C8}"; const ssetmn = "\u2216"; const ssmile = "\u2323"; const sstarf = "\u22C6"; const Star = "\u22C6"; const star = "\u2606"; const starf = "\u2605"; const straightepsilon = "\u03F5"; const straightphi = "\u03D5"; const strns = "\xAF"; const sub = "\u2282"; const Sub = "\u22D0"; const subdot = "\u2ABD"; const subE = "\u2AC5"; const sube = "\u2286"; const subedot = "\u2AC3"; const submult = "\u2AC1"; const subnE = "\u2ACB"; const subne = "\u228A"; const subplus = "\u2ABF"; const subrarr = "\u2979"; const subset$2 = "\u2282"; const Subset = "\u22D0"; const subseteq = "\u2286"; const subseteqq = "\u2AC5"; const SubsetEqual = "\u2286"; const subsetneq = "\u228A"; const subsetneqq = "\u2ACB"; const subsim = "\u2AC7"; const subsub = "\u2AD5"; const subsup = "\u2AD3"; const succapprox = "\u2AB8"; const succ = "\u227B"; const succcurlyeq = "\u227D"; const Succeeds = "\u227B"; const SucceedsEqual = "\u2AB0"; const SucceedsSlantEqual = "\u227D"; const SucceedsTilde = "\u227F"; const succeq = "\u2AB0"; const succnapprox = "\u2ABA"; const succneqq = "\u2AB6"; const succnsim = "\u22E9"; const succsim = "\u227F"; const SuchThat = "\u220B"; const sum = "\u2211"; const Sum = "\u2211"; const sung = "\u266A"; const sup1 = "\xB9"; const sup2 = "\xB2"; const sup3 = "\xB3"; const sup = "\u2283"; const Sup = "\u22D1"; const supdot = "\u2ABE"; const supdsub = "\u2AD8"; const supE = "\u2AC6"; const supe = "\u2287"; const supedot = "\u2AC4"; const Superset = "\u2283"; const SupersetEqual = "\u2287"; const suphsol = "\u27C9"; const suphsub = "\u2AD7"; const suplarr = "\u297B"; const supmult = "\u2AC2"; const supnE = "\u2ACC"; const supne = "\u228B"; const supplus = "\u2AC0"; const supset = "\u2283"; const Supset = "\u22D1"; const supseteq = "\u2287"; const supseteqq = "\u2AC6"; const supsetneq = "\u228B"; const supsetneqq = "\u2ACC"; const supsim = "\u2AC8"; const supsub = "\u2AD4"; const supsup = "\u2AD6"; const swarhk = "\u2926"; const swarr = "\u2199"; const swArr = "\u21D9"; const swarrow = "\u2199"; const swnwar = "\u292A"; const szlig = "\xDF"; const Tab$1 = " "; const target = "\u2316"; const Tau = "\u03A4"; const tau = "\u03C4"; const tbrk = "\u23B4"; const Tcaron = "\u0164"; const tcaron = "\u0165"; const Tcedil = "\u0162"; const tcedil = "\u0163"; const Tcy = "\u0422"; const tcy = "\u0442"; const tdot = "\u20DB"; const telrec = "\u2315"; const Tfr = "\u{1D517}"; const tfr = "\u{1D531}"; const there4 = "\u2234"; const therefore = "\u2234"; const Therefore = "\u2234"; const Theta = "\u0398"; const theta = "\u03B8"; const thetasym = "\u03D1"; const thetav = "\u03D1"; const thickapprox = "\u2248"; const thicksim = "\u223C"; const ThickSpace = "\u205F\u200A"; const ThinSpace = "\u2009"; const thinsp = "\u2009"; const thkap = "\u2248"; const thksim = "\u223C"; const THORN = "\xDE"; const thorn = "\xFE"; const tilde = "\u02DC"; const Tilde = "\u223C"; const TildeEqual = "\u2243"; const TildeFullEqual = "\u2245"; const TildeTilde = "\u2248"; const timesbar = "\u2A31"; const timesb = "\u22A0"; const times = "\xD7"; const timesd = "\u2A30"; const tint = "\u222D"; const toea = "\u2928"; const topbot = "\u2336"; const topcir = "\u2AF1"; const top = "\u22A4"; const Topf = "\u{1D54B}"; const topf = "\u{1D565}"; const topfork = "\u2ADA"; const tosa = "\u2929"; const tprime = "\u2034"; const trade = "\u2122"; const TRADE = "\u2122"; const triangle = "\u25B5"; const triangledown = "\u25BF"; const triangleleft = "\u25C3"; const trianglelefteq = "\u22B4"; const triangleq = "\u225C"; const triangleright = "\u25B9"; const trianglerighteq = "\u22B5"; const tridot = "\u25EC"; const trie = "\u225C"; const triminus = "\u2A3A"; const TripleDot = "\u20DB"; const triplus = "\u2A39"; const trisb = "\u29CD"; const tritime = "\u2A3B"; const trpezium = "\u23E2"; const Tscr = "\u{1D4AF}"; const tscr = "\u{1D4C9}"; const TScy = "\u0426"; const tscy = "\u0446"; const TSHcy = "\u040B"; const tshcy = "\u045B"; const Tstrok = "\u0166"; const tstrok = "\u0167"; const twixt = "\u226C"; const twoheadleftarrow = "\u219E"; const twoheadrightarrow = "\u21A0"; const Uacute = "\xDA"; const uacute = "\xFA"; const uarr = "\u2191"; const Uarr = "\u219F"; const uArr = "\u21D1"; const Uarrocir = "\u2949"; const Ubrcy = "\u040E"; const ubrcy = "\u045E"; const Ubreve = "\u016C"; const ubreve = "\u016D"; const Ucirc = "\xDB"; const ucirc = "\xFB"; const Ucy = "\u0423"; const ucy = "\u0443"; const udarr = "\u21C5"; const Udblac = "\u0170"; const udblac = "\u0171"; const udhar = "\u296E"; const ufisht = "\u297E"; const Ufr = "\u{1D518}"; const ufr = "\u{1D532}"; const Ugrave = "\xD9"; const ugrave = "\xF9"; const uHar = "\u2963"; const uharl = "\u21BF"; const uharr = "\u21BE"; const uhblk = "\u2580"; const ulcorn = "\u231C"; const ulcorner = "\u231C"; const ulcrop = "\u230F"; const ultri = "\u25F8"; const Umacr = "\u016A"; const umacr = "\u016B"; const uml = "\xA8"; const UnderBar = "_"; const UnderBrace = "\u23DF"; const UnderBracket = "\u23B5"; const UnderParenthesis = "\u23DD"; const Union = "\u22C3"; const UnionPlus = "\u228E"; const Uogon = "\u0172"; const uogon = "\u0173"; const Uopf = "\u{1D54C}"; const uopf = "\u{1D566}"; const UpArrowBar = "\u2912"; const uparrow = "\u2191"; const UpArrow = "\u2191"; const Uparrow = "\u21D1"; const UpArrowDownArrow = "\u21C5"; const updownarrow = "\u2195"; const UpDownArrow = "\u2195"; const Updownarrow = "\u21D5"; const UpEquilibrium = "\u296E"; const upharpoonleft = "\u21BF"; const upharpoonright = "\u21BE"; const uplus = "\u228E"; const UpperLeftArrow = "\u2196"; const UpperRightArrow = "\u2197"; const upsi = "\u03C5"; const Upsi = "\u03D2"; const upsih = "\u03D2"; const Upsilon = "\u03A5"; const upsilon = "\u03C5"; const UpTeeArrow = "\u21A5"; const UpTee = "\u22A5"; const upuparrows = "\u21C8"; const urcorn = "\u231D"; const urcorner = "\u231D"; const urcrop = "\u230E"; const Uring = "\u016E"; const uring = "\u016F"; const urtri = "\u25F9"; const Uscr = "\u{1D4B0}"; const uscr = "\u{1D4CA}"; const utdot = "\u22F0"; const Utilde = "\u0168"; const utilde = "\u0169"; const utri = "\u25B5"; const utrif = "\u25B4"; const uuarr = "\u21C8"; const Uuml = "\xDC"; const uuml = "\xFC"; const uwangle = "\u29A7"; const vangrt = "\u299C"; const varepsilon = "\u03F5"; const varkappa = "\u03F0"; const varnothing = "\u2205"; const varphi = "\u03D5"; const varpi = "\u03D6"; const varpropto = "\u221D"; const varr = "\u2195"; const vArr = "\u21D5"; const varrho = "\u03F1"; const varsigma = "\u03C2"; const varsubsetneq = "\u228A\uFE00"; const varsubsetneqq = "\u2ACB\uFE00"; const varsupsetneq = "\u228B\uFE00"; const varsupsetneqq = "\u2ACC\uFE00"; const vartheta = "\u03D1"; const vartriangleleft = "\u22B2"; const vartriangleright = "\u22B3"; const vBar = "\u2AE8"; const Vbar = "\u2AEB"; const vBarv = "\u2AE9"; const Vcy = "\u0412"; const vcy = "\u0432"; const vdash = "\u22A2"; const vDash = "\u22A8"; const Vdash = "\u22A9"; const VDash = "\u22AB"; const Vdashl = "\u2AE6"; const veebar = "\u22BB"; const vee = "\u2228"; const Vee = "\u22C1"; const veeeq = "\u225A"; const vellip = "\u22EE"; const verbar = "|"; const Verbar = "\u2016"; const vert = "|"; const Vert = "\u2016"; const VerticalBar = "\u2223"; const VerticalLine = "|"; const VerticalSeparator = "\u2758"; const VerticalTilde = "\u2240"; const VeryThinSpace = "\u200A"; const Vfr = "\u{1D519}"; const vfr = "\u{1D533}"; const vltri = "\u22B2"; const vnsub = "\u2282\u20D2"; const vnsup = "\u2283\u20D2"; const Vopf = "\u{1D54D}"; const vopf = "\u{1D567}"; const vprop = "\u221D"; const vrtri = "\u22B3"; const Vscr = "\u{1D4B1}"; const vscr = "\u{1D4CB}"; const vsubnE = "\u2ACB\uFE00"; const vsubne = "\u228A\uFE00"; const vsupnE = "\u2ACC\uFE00"; const vsupne = "\u228B\uFE00"; const Vvdash = "\u22AA"; const vzigzag = "\u299A"; const Wcirc = "\u0174"; const wcirc = "\u0175"; const wedbar = "\u2A5F"; const wedge = "\u2227"; const Wedge = "\u22C0"; const wedgeq = "\u2259"; const weierp = "\u2118"; const Wfr = "\u{1D51A}"; const wfr = "\u{1D534}"; const Wopf = "\u{1D54E}"; const wopf = "\u{1D568}"; const wp = "\u2118"; const wr = "\u2240"; const wreath = "\u2240"; const Wscr = "\u{1D4B2}"; const wscr = "\u{1D4CC}"; const xcap = "\u22C2"; const xcirc = "\u25EF"; const xcup = "\u22C3"; const xdtri = "\u25BD"; const Xfr = "\u{1D51B}"; const xfr = "\u{1D535}"; const xharr = "\u27F7"; const xhArr = "\u27FA"; const Xi$1 = "\u039E"; const xi$1 = "\u03BE"; const xlarr = "\u27F5"; const xlArr = "\u27F8"; const xmap = "\u27FC"; const xnis = "\u22FB"; const xodot = "\u2A00"; const Xopf = "\u{1D54F}"; const xopf = "\u{1D569}"; const xoplus = "\u2A01"; const xotime = "\u2A02"; const xrarr = "\u27F6"; const xrArr = "\u27F9"; const Xscr = "\u{1D4B3}"; const xscr = "\u{1D4CD}"; const xsqcup = "\u2A06"; const xuplus = "\u2A04"; const xutri = "\u25B3"; const xvee = "\u22C1"; const xwedge = "\u22C0"; const Yacute = "\xDD"; const yacute = "\xFD"; const YAcy = "\u042F"; const yacy = "\u044F"; const Ycirc = "\u0176"; const ycirc = "\u0177"; const Ycy = "\u042B"; const ycy = "\u044B"; const yen = "\xA5"; const Yfr = "\u{1D51C}"; const yfr = "\u{1D536}"; const YIcy = "\u0407"; const yicy = "\u0457"; const Yopf = "\u{1D550}"; const yopf = "\u{1D56A}"; const Yscr = "\u{1D4B4}"; const yscr = "\u{1D4CE}"; const YUcy = "\u042E"; const yucy = "\u044E"; const yuml = "\xFF"; const Yuml = "\u0178"; const Zacute = "\u0179"; const zacute = "\u017A"; const Zcaron = "\u017D"; const zcaron = "\u017E"; const Zcy = "\u0417"; const zcy = "\u0437"; const Zdot = "\u017B"; const zdot = "\u017C"; const zeetrf = "\u2128"; const ZeroWidthSpace = "\u200B"; const Zeta = "\u0396"; const zeta = "\u03B6"; const zfr = "\u{1D537}"; const Zfr = "\u2128"; const ZHcy = "\u0416"; const zhcy = "\u0436"; const zigrarr = "\u21DD"; const zopf = "\u{1D56B}"; const Zopf = "\u2124"; const Zscr = "\u{1D4B5}"; const zscr = "\u{1D4CF}"; const zwj = "\u200D"; const zwnj = "\u200C"; const require$$0$2 = { Aacute, aacute, Abreve, abreve, ac: ac$1, acd, acE, Acirc, acirc, acute, Acy, acy, AElig, aelig, af: af$1, Afr, afr, Agrave, agrave, alefsym, aleph, Alpha, alpha, Amacr, amacr, amalg, amp, AMP, andand, And, and, andd, andslope, andv, ang, ange, angle, angmsdaa, angmsdab, angmsdac, angmsdad, angmsdae, angmsdaf, angmsdag, angmsdah, angmsd, angrt, angrtvb, angrtvbd, angsph, angst, angzarr, Aogon, aogon, Aopf, aopf, apacir, ap, apE, ape, apid, apos, ApplyFunction, approx, approxeq, Aring, aring, Ascr, ascr, Assign, ast, asymp, asympeq, Atilde, atilde, Auml, auml, awconint, awint, backcong, backepsilon, backprime, backsim, backsimeq, Backslash, Barv, barvee, barwed, Barwed, barwedge, bbrk, bbrktbrk, bcong, Bcy, bcy, bdquo, becaus, because, Because, bemptyv, bepsi, bernou, Bernoullis, Beta, beta, beth, between, Bfr, bfr, bigcap, bigcirc, bigcup, bigodot, bigoplus, bigotimes, bigsqcup, bigstar, bigtriangledown, bigtriangleup, biguplus, bigvee, bigwedge, bkarow, blacklozenge, blacksquare, blacktriangle, blacktriangledown, blacktriangleleft, blacktriangleright, blank, blk12, blk14, blk34, block, bne, bnequiv, bNot, bnot, Bopf, bopf, bot, bottom, bowtie, boxbox, boxdl, boxdL, boxDl, boxDL, boxdr, boxdR, boxDr, boxDR, boxh, boxH, boxhd, boxHd, boxhD, boxHD, boxhu, boxHu, boxhU, boxHU, boxminus, boxplus, boxtimes, boxul, boxuL, boxUl, boxUL, boxur, boxuR, boxUr, boxUR, boxv, boxV, boxvh, boxvH, boxVh, boxVH, boxvl, boxvL, boxVl, boxVL, boxvr, boxvR, boxVr, boxVR, bprime, breve, Breve, brvbar, bscr, Bscr, bsemi, bsim, bsime, bsolb, bsol, bsolhsub, bull, bullet, bump, bumpE, bumpe, Bumpeq, bumpeq, Cacute, cacute, capand, capbrcup, capcap, cap, Cap, capcup, capdot, CapitalDifferentialD, caps, caret, caron, Cayleys, ccaps, Ccaron, ccaron, Ccedil, ccedil, Ccirc, ccirc, Cconint, ccups, ccupssm, Cdot, cdot, cedil, Cedilla, cemptyv, cent, centerdot, CenterDot, cfr, Cfr, CHcy, chcy, check, checkmark, Chi, chi, circ, circeq, circlearrowleft, circlearrowright, circledast, circledcirc, circleddash, CircleDot, circledR, circledS, CircleMinus, CirclePlus, CircleTimes, cir, cirE, cire, cirfnint, cirmid, cirscir, ClockwiseContourIntegral, CloseCurlyDoubleQuote, CloseCurlyQuote, clubs, clubsuit, colon, Colon, Colone, colone, coloneq, comma, commat, comp, compfn, complement, complexes, cong, congdot, Congruent, conint, Conint, ContourIntegral, copf, Copf, coprod, Coproduct, copy, COPY, copysr, CounterClockwiseContourIntegral, crarr, cross, Cross, Cscr, cscr, csub, csube, csup, csupe, ctdot, cudarrl, cudarrr, cuepr, cuesc, cularr, cularrp, cupbrcap, cupcap, CupCap, cup, Cup, cupcup, cupdot, cupor, cups, curarr, curarrm, curlyeqprec, curlyeqsucc, curlyvee, curlywedge, curren, curvearrowleft, curvearrowright, cuvee, cuwed, cwconint, cwint, cylcty, dagger, Dagger, daleth, darr, Darr, dArr, dash, Dashv, dashv, dbkarow, dblac, Dcaron, dcaron, Dcy, dcy, ddagger, ddarr, DD, dd: dd$1, DDotrahd, ddotseq, deg, Del, Delta, delta, demptyv, dfisht, Dfr, dfr, dHar, dharl, dharr, DiacriticalAcute, DiacriticalDot, DiacriticalDoubleAcute, DiacriticalGrave, DiacriticalTilde, diam, diamond, Diamond, diamondsuit, diams, die, DifferentialD, digamma, disin, div, divide, divideontimes, divonx, DJcy, djcy, dlcorn, dlcrop, dollar, Dopf, dopf, Dot, dot, DotDot, doteq, doteqdot, DotEqual, dotminus, dotplus, dotsquare, doublebarwedge, DoubleContourIntegral, DoubleDot, DoubleDownArrow, DoubleLeftArrow, DoubleLeftRightArrow, DoubleLeftTee, DoubleLongLeftArrow, DoubleLongLeftRightArrow, DoubleLongRightArrow, DoubleRightArrow, DoubleRightTee, DoubleUpArrow, DoubleUpDownArrow, DoubleVerticalBar, DownArrowBar, downarrow, DownArrow, Downarrow, DownArrowUpArrow, DownBreve, downdownarrows, downharpoonleft, downharpoonright, DownLeftRightVector, DownLeftTeeVector, DownLeftVectorBar, DownLeftVector, DownRightTeeVector, DownRightVectorBar, DownRightVector, DownTeeArrow, DownTee, drbkarow, drcorn, drcrop, Dscr, dscr, DScy, dscy, dsol, Dstrok, dstrok, dtdot, dtri, dtrif, duarr, duhar, dwangle, DZcy, dzcy, dzigrarr, Eacute, eacute, easter, Ecaron, ecaron, Ecirc, ecirc, ecir, ecolon, Ecy, ecy, eDDot, Edot, edot, eDot, ee: ee$2, efDot, Efr, efr, eg: eg$1, Egrave, egrave, egs, egsdot, el: el$1, Element: Element$1, elinters, ell, els, elsdot, Emacr, emacr, empty, emptyset, EmptySmallSquare, emptyv, EmptyVerySmallSquare, emsp13, emsp14, emsp, ENG, eng, ensp, Eogon, eogon, Eopf, eopf, epar, eparsl, eplus, epsi, Epsilon, epsilon, epsiv, eqcirc, eqcolon, eqsim, eqslantgtr, eqslantless, Equal, equals, EqualTilde, equest, Equilibrium, equiv, equivDD, eqvparsl, erarr, erDot, escr, Escr, esdot, Esim, esim, Eta, eta, ETH, eth, Euml, euml, euro, excl, exist, Exists, expectation, exponentiale, ExponentialE, fallingdotseq, Fcy, fcy, female, ffilig, fflig, ffllig, Ffr, ffr, filig, FilledSmallSquare, FilledVerySmallSquare, fjlig, flat: flat$1, fllig, fltns, fnof, Fopf, fopf, forall, ForAll, fork, forkv, Fouriertrf, fpartint, frac12, frac13, frac14, frac15, frac16, frac18, frac23, frac25, frac34, frac35, frac38, frac45, frac56, frac58, frac78, frasl, frown, fscr, Fscr, gacute, Gamma, gamma, Gammad, gammad, gap, Gbreve, gbreve, Gcedil, Gcirc, gcirc, Gcy, gcy, Gdot, gdot, ge: ge$1, gE, gEl, gel, geq, geqq, geqslant, gescc, ges, gesdot, gesdoto, gesdotol, gesl, gesles, Gfr, gfr, gg: gg$1, Gg: Gg$1, ggg, gimel, GJcy, gjcy, gla, gl: gl$1, glE, glj, gnap, gnapprox, gne, gnE, gneq, gneqq, gnsim, Gopf, gopf, grave, GreaterEqual, GreaterEqualLess, GreaterFullEqual, GreaterGreater, GreaterLess, GreaterSlantEqual, GreaterTilde, Gscr, gscr, gsim, gsime, gsiml, gtcc, gtcir, gt: gt$5, GT, Gt, gtdot, gtlPar, gtquest, gtrapprox, gtrarr, gtrdot, gtreqless, gtreqqless, gtrless, gtrsim, gvertneqq, gvnE, Hacek, hairsp, half, hamilt, HARDcy, hardcy, harrcir, harr, hArr, harrw, Hat, hbar, Hcirc, hcirc, hearts, heartsuit, hellip, hercon, hfr, Hfr, HilbertSpace, hksearow, hkswarow, hoarr, homtht, hookleftarrow, hookrightarrow, hopf, Hopf, horbar, HorizontalLine, hscr, Hscr, hslash, Hstrok, hstrok, HumpDownHump, HumpEqual, hybull, hyphen, Iacute, iacute, ic: ic$1, Icirc, icirc, Icy, icy, Idot, IEcy, iecy, iexcl, iff, ifr, Ifr, Igrave, igrave, ii: ii$1, iiiint, iiint, iinfin, iiota, IJlig, ijlig, Imacr, imacr, image, ImaginaryI, imagline, imagpart, imath, Im, imof, imped, Implies, incare, "in": "\u2208", infin, infintie, inodot, intcal, int, Int, integers, Integral, intercal, Intersection, intlarhk, intprod, InvisibleComma, InvisibleTimes, IOcy, iocy, Iogon, iogon, Iopf, iopf, Iota, iota, iprod, iquest, iscr, Iscr, isin, isindot, isinE, isins, isinsv, isinv, it, Itilde, itilde, Iukcy, iukcy, Iuml, iuml, Jcirc, jcirc, Jcy, jcy, Jfr, jfr, jmath, Jopf, jopf, Jscr, jscr, Jsercy, jsercy, Jukcy, jukcy, Kappa, kappa, kappav, Kcedil, kcedil, Kcy, kcy, Kfr, kfr, kgreen, KHcy, khcy, KJcy, kjcy, Kopf, kopf, Kscr, kscr, lAarr, Lacute, lacute, laemptyv, lagran, Lambda, lambda, lang, Lang, langd, langle, lap, Laplacetrf, laquo, larrb, larrbfs, larr, Larr, lArr, larrfs, larrhk, larrlp, larrpl, larrsim, larrtl, latail, lAtail, lat, late, lates, lbarr, lBarr, lbbrk, lbrace, lbrack, lbrke, lbrksld, lbrkslu, Lcaron, lcaron, Lcedil, lcedil, lceil, lcub, Lcy, lcy, ldca, ldquo, ldquor, ldrdhar, ldrushar, ldsh, le: le$1, lE, LeftAngleBracket, LeftArrowBar, leftarrow, LeftArrow, Leftarrow, LeftArrowRightArrow, leftarrowtail, LeftCeiling, LeftDoubleBracket, LeftDownTeeVector, LeftDownVectorBar, LeftDownVector, LeftFloor, leftharpoondown, leftharpoonup, leftleftarrows, leftrightarrow, LeftRightArrow, Leftrightarrow, leftrightarrows, leftrightharpoons, leftrightsquigarrow, LeftRightVector, LeftTeeArrow, LeftTee, LeftTeeVector, leftthreetimes, LeftTriangleBar, LeftTriangle, LeftTriangleEqual, LeftUpDownVector, LeftUpTeeVector, LeftUpVectorBar, LeftUpVector, LeftVectorBar, LeftVector, lEg, leg, leq, leqq, leqslant, lescc, les, lesdot, lesdoto, lesdotor, lesg, lesges, lessapprox, lessdot, lesseqgtr, lesseqqgtr, LessEqualGreater, LessFullEqual, LessGreater, lessgtr, LessLess, lesssim, LessSlantEqual, LessTilde, lfisht, lfloor, Lfr, lfr, lg: lg$1, lgE, lHar, lhard, lharu, lharul, lhblk, LJcy, ljcy, llarr, ll: ll$1, Ll, llcorner, Lleftarrow, llhard, lltri, Lmidot, lmidot, lmoustache, lmoust, lnap, lnapprox, lne, lnE, lneq, lneqq, lnsim, loang, loarr, lobrk, longleftarrow, LongLeftArrow, Longleftarrow, longleftrightarrow, LongLeftRightArrow, Longleftrightarrow, longmapsto, longrightarrow, LongRightArrow, Longrightarrow, looparrowleft, looparrowright, lopar, Lopf, lopf, loplus, lotimes, lowast, lowbar, LowerLeftArrow, LowerRightArrow, loz, lozenge, lozf, lpar, lparlt, lrarr, lrcorner, lrhar, lrhard, lrm, lrtri, lsaquo, lscr, Lscr, lsh, Lsh, lsim, lsime, lsimg, lsqb, lsquo, lsquor, Lstrok, lstrok, ltcc, ltcir, lt: lt$4, LT, Lt, ltdot, lthree, ltimes, ltlarr, ltquest, ltri, ltrie, ltrif, ltrPar, lurdshar, luruhar, lvertneqq, lvnE, macr, male, malt, maltese, "Map": "\u2905", map, mapsto, mapstodown, mapstoleft, mapstoup, marker, mcomma, Mcy, mcy, mdash, mDDot, measuredangle, MediumSpace, Mellintrf, Mfr, mfr, mho, micro, midast, midcir, mid, middot, minusb, minus, minusd, minusdu, MinusPlus, mlcp, mldr, mnplus, models: models$1, Mopf, mopf, mp, mscr, Mscr, mstpos, Mu, mu, multimap, mumap, nabla, Nacute, nacute, nang, nap, napE, napid, napos, napprox, natural, naturals, natur, nbsp, nbump, nbumpe, ncap, Ncaron, ncaron, Ncedil, ncedil, ncong, ncongdot, ncup, Ncy, ncy, ndash, nearhk, nearr, neArr, nearrow, ne: ne$1, nedot, NegativeMediumSpace, NegativeThickSpace, NegativeThinSpace, NegativeVeryThinSpace, nequiv, nesear, nesim, NestedGreaterGreater, NestedLessLess, NewLine, nexist, nexists, Nfr, nfr, ngE, nge, ngeq, ngeqq, ngeqslant, nges, nGg, ngsim, nGt, ngt, ngtr, nGtv, nharr, nhArr, nhpar, ni: ni$1, nis, nisd, niv, NJcy, njcy, nlarr, nlArr, nldr, nlE, nle, nleftarrow, nLeftarrow, nleftrightarrow, nLeftrightarrow, nleq, nleqq, nleqslant, nles, nless, nLl, nlsim, nLt, nlt, nltri, nltrie, nLtv, nmid, NoBreak, NonBreakingSpace, nopf, Nopf, Not, not, NotCongruent, NotCupCap, NotDoubleVerticalBar, NotElement, NotEqual, NotEqualTilde, NotExists, NotGreater, NotGreaterEqual, NotGreaterFullEqual, NotGreaterGreater, NotGreaterLess, NotGreaterSlantEqual, NotGreaterTilde, NotHumpDownHump, NotHumpEqual, notin, notindot, notinE, notinva, notinvb, notinvc, NotLeftTriangleBar, NotLeftTriangle, NotLeftTriangleEqual, NotLess, NotLessEqual, NotLessGreater, NotLessLess, NotLessSlantEqual, NotLessTilde, NotNestedGreaterGreater, NotNestedLessLess, notni, notniva, notnivb, notnivc, NotPrecedes, NotPrecedesEqual, NotPrecedesSlantEqual, NotReverseElement, NotRightTriangleBar, NotRightTriangle, NotRightTriangleEqual, NotSquareSubset, NotSquareSubsetEqual, NotSquareSuperset, NotSquareSupersetEqual, NotSubset, NotSubsetEqual, NotSucceeds, NotSucceedsEqual, NotSucceedsSlantEqual, NotSucceedsTilde, NotSuperset, NotSupersetEqual, NotTilde, NotTildeEqual, NotTildeFullEqual, NotTildeTilde, NotVerticalBar, nparallel, npar, nparsl, npart, npolint, npr, nprcue, nprec, npreceq, npre, nrarrc, nrarr, nrArr, nrarrw, nrightarrow, nRightarrow, nrtri, nrtrie, nsc, nsccue, nsce, Nscr, nscr, nshortmid, nshortparallel, nsim, nsime, nsimeq, nsmid, nspar, nsqsube, nsqsupe, nsub, nsubE, nsube, nsubset, nsubseteq, nsubseteqq, nsucc, nsucceq, nsup, nsupE, nsupe, nsupset, nsupseteq, nsupseteqq, ntgl, Ntilde, ntilde, ntlg, ntriangleleft, ntrianglelefteq, ntriangleright, ntrianglerighteq, Nu, nu, num, numero, numsp, nvap, nvdash, nvDash, nVdash, nVDash, nvge, nvgt, nvHarr, nvinfin, nvlArr, nvle, nvlt, nvltrie, nvrArr, nvrtrie, nvsim, nwarhk, nwarr, nwArr, nwarrow, nwnear, Oacute, oacute, oast, Ocirc, ocirc, ocir, Ocy, ocy, odash, Odblac, odblac, odiv, odot, odsold, OElig, oelig, ofcir, Ofr, ofr, ogon, Ograve, ograve, ogt, ohbar, ohm, oint, olarr, olcir, olcross, oline, olt, Omacr, omacr, Omega, omega, Omicron, omicron, omid, ominus, Oopf, oopf, opar, OpenCurlyDoubleQuote, OpenCurlyQuote, operp, oplus, orarr, Or, or, ord, order, orderof, ordf, ordm, origof, oror, orslope, orv, oS, Oscr, oscr, Oslash, oslash, osol, Otilde, otilde, otimesas, Otimes, otimes, Ouml, ouml, ovbar, OverBar, OverBrace, OverBracket, OverParenthesis, para, parallel, par, parsim, parsl, part, PartialD, Pcy, pcy, percnt, period, permil, perp, pertenk, Pfr, pfr, Phi, phi, phiv, phmmat, phone, Pi: Pi$1, pi: pi$1, pitchfork, piv, planck, planckh, plankv, plusacir, plusb, pluscir, plus, plusdo, plusdu, pluse, PlusMinus, plusmn, plussim, plustwo, pm, Poincareplane, pointint, popf, Popf, pound, prap, Pr, pr, prcue, precapprox, prec, preccurlyeq, Precedes, PrecedesEqual, PrecedesSlantEqual, PrecedesTilde, preceq, precnapprox, precneqq, precnsim, pre, prE, precsim, prime, Prime, primes, prnap, prnE, prnsim, prod, Product, profalar, profline, profsurf, prop, Proportional, Proportion, propto, prsim, prurel, Pscr, pscr, Psi, psi, puncsp, Qfr, qfr, qint, qopf, Qopf, qprime, Qscr, qscr, quaternions, quatint, quest, questeq, quot, QUOT, rAarr, race, Racute, racute, radic, raemptyv, rang, Rang, rangd, range: range$1, rangle, raquo, rarrap, rarrb, rarrbfs, rarrc, rarr, Rarr, rArr, rarrfs, rarrhk, rarrlp, rarrpl, rarrsim, Rarrtl, rarrtl, rarrw, ratail, rAtail, ratio, rationals, rbarr, rBarr, RBarr, rbbrk, rbrace, rbrack, rbrke, rbrksld, rbrkslu, Rcaron, rcaron, Rcedil, rcedil, rceil, rcub, Rcy, rcy, rdca, rdldhar, rdquo, rdquor, rdsh, real, realine, realpart, reals, Re: Re$1, rect, reg, REG, ReverseElement, ReverseEquilibrium, ReverseUpEquilibrium, rfisht, rfloor, rfr, Rfr, rHar, rhard, rharu, rharul, Rho, rho, rhov, RightAngleBracket, RightArrowBar, rightarrow, RightArrow, Rightarrow, RightArrowLeftArrow, rightarrowtail, RightCeiling, RightDoubleBracket, RightDownTeeVector, RightDownVectorBar, RightDownVector, RightFloor, rightharpoondown, rightharpoonup, rightleftarrows, rightleftharpoons, rightrightarrows, rightsquigarrow, RightTeeArrow, RightTee, RightTeeVector, rightthreetimes, RightTriangleBar, RightTriangle, RightTriangleEqual, RightUpDownVector, RightUpTeeVector, RightUpVectorBar, RightUpVector, RightVectorBar, RightVector, ring, risingdotseq, rlarr, rlhar, rlm, rmoustache, rmoust, rnmid, roang, roarr, robrk, ropar, ropf, Ropf, roplus, rotimes, RoundImplies, rpar, rpargt, rppolint, rrarr, Rrightarrow, rsaquo, rscr, Rscr, rsh, Rsh, rsqb, rsquo, rsquor, rthree, rtimes, rtri, rtrie, rtrif, rtriltri, RuleDelayed, ruluhar, rx, Sacute, sacute, sbquo, scap, Scaron, scaron, Sc: Sc$1, sc: sc$1, sccue, sce, scE, Scedil, scedil, Scirc, scirc, scnap, scnE, scnsim, scpolint, scsim, Scy, scy, sdotb, sdot, sdote, searhk, searr, seArr, searrow, sect, semi, seswar, setminus, setmn, sext, Sfr, sfr, sfrown, sharp, SHCHcy, shchcy, SHcy, shcy, ShortDownArrow, ShortLeftArrow, shortmid, shortparallel, ShortRightArrow, ShortUpArrow, shy, Sigma, sigma, sigmaf, sigmav, sim, simdot, sime, simeq, simg, simgE, siml, simlE, simne, simplus, simrarr, slarr, SmallCircle, smallsetminus, smashp, smeparsl, smid, smile, smt, smte, smtes, SOFTcy, softcy, solbar, solb, sol, Sopf, sopf, spades, spadesuit, spar, sqcap, sqcaps, sqcup, sqcups, Sqrt, sqsub, sqsube, sqsubset, sqsubseteq, sqsup, sqsupe, sqsupset, sqsupseteq, square, Square, SquareIntersection, SquareSubset, SquareSubsetEqual, SquareSuperset, SquareSupersetEqual, SquareUnion, squarf, squ, squf, srarr, Sscr, sscr, ssetmn, ssmile, sstarf, Star, star, starf, straightepsilon, straightphi, strns, sub, Sub, subdot, subE, sube, subedot, submult, subnE, subne, subplus, subrarr, subset: subset$2, Subset, subseteq, subseteqq, SubsetEqual, subsetneq, subsetneqq, subsim, subsub, subsup, succapprox, succ, succcurlyeq, Succeeds, SucceedsEqual, SucceedsSlantEqual, SucceedsTilde, succeq, succnapprox, succneqq, succnsim, succsim, SuchThat, sum, Sum, sung, sup1, sup2, sup3, sup, Sup, supdot, supdsub, supE, supe, supedot, Superset, SupersetEqual, suphsol, suphsub, suplarr, supmult, supnE, supne, supplus, supset, Supset, supseteq, supseteqq, supsetneq, supsetneqq, supsim, supsub, supsup, swarhk, swarr, swArr, swarrow, swnwar, szlig, Tab: Tab$1, target, Tau, tau, tbrk, Tcaron, tcaron, Tcedil, tcedil, Tcy, tcy, tdot, telrec, Tfr, tfr, there4, therefore, Therefore, Theta, theta, thetasym, thetav, thickapprox, thicksim, ThickSpace, ThinSpace, thinsp, thkap, thksim, THORN, thorn, tilde, Tilde, TildeEqual, TildeFullEqual, TildeTilde, timesbar, timesb, times, timesd, tint, toea, topbot, topcir, top, Topf, topf, topfork, tosa, tprime, trade, TRADE, triangle, triangledown, triangleleft, trianglelefteq, triangleq, triangleright, trianglerighteq, tridot, trie, triminus, TripleDot, triplus, trisb, tritime, trpezium, Tscr, tscr, TScy, tscy, TSHcy, tshcy, Tstrok, tstrok, twixt, twoheadleftarrow, twoheadrightarrow, Uacute, uacute, uarr, Uarr, uArr, Uarrocir, Ubrcy, ubrcy, Ubreve, ubreve, Ucirc, ucirc, Ucy, ucy, udarr, Udblac, udblac, udhar, ufisht, Ufr, ufr, Ugrave, ugrave, uHar, uharl, uharr, uhblk, ulcorn, ulcorner, ulcrop, ultri, Umacr, umacr, uml, UnderBar, UnderBrace, UnderBracket, UnderParenthesis, Union, UnionPlus, Uogon, uogon, Uopf, uopf, UpArrowBar, uparrow, UpArrow, Uparrow, UpArrowDownArrow, updownarrow, UpDownArrow, Updownarrow, UpEquilibrium, upharpoonleft, upharpoonright, uplus, UpperLeftArrow, UpperRightArrow, upsi, Upsi, upsih, Upsilon, upsilon, UpTeeArrow, UpTee, upuparrows, urcorn, urcorner, urcrop, Uring, uring, urtri, Uscr, uscr, utdot, Utilde, utilde, utri, utrif, uuarr, Uuml, uuml, uwangle, vangrt, varepsilon, varkappa, varnothing, varphi, varpi, varpropto, varr, vArr, varrho, varsigma, varsubsetneq, varsubsetneqq, varsupsetneq, varsupsetneqq, vartheta, vartriangleleft, vartriangleright, vBar, Vbar, vBarv, Vcy, vcy, vdash, vDash, Vdash, VDash, Vdashl, veebar, vee, Vee, veeeq, vellip, verbar, Verbar, vert, Vert, VerticalBar, VerticalLine, VerticalSeparator, VerticalTilde, VeryThinSpace, Vfr, vfr, vltri, vnsub, vnsup, Vopf, vopf, vprop, vrtri, Vscr, vscr, vsubnE, vsubne, vsupnE, vsupne, Vvdash, vzigzag, Wcirc, wcirc, wedbar, wedge, Wedge, wedgeq, weierp, Wfr, wfr, Wopf, wopf, wp, wr, wreath, Wscr, wscr, xcap, xcirc, xcup, xdtri, Xfr, xfr, xharr, xhArr, Xi: Xi$1, xi: xi$1, xlarr, xlArr, xmap, xnis, xodot, Xopf, xopf, xoplus, xotime, xrarr, xrArr, Xscr, xscr, xsqcup, xuplus, xutri, xvee, xwedge, Yacute, yacute, YAcy, yacy, Ycirc, ycirc, Ycy, ycy, yen, Yfr, yfr, YIcy, yicy, Yopf, yopf, Yscr, yscr, YUcy, yucy, yuml, Yuml, Zacute, zacute, Zcaron, zcaron, Zcy, zcy, Zdot, zdot, zeetrf, ZeroWidthSpace, Zeta, zeta, zfr, Zfr, ZHcy, zhcy, zigrarr, zopf, Zopf, Zscr, zscr, zwj, zwnj }; (function(module3) { module3.exports = require$$0$2; })(entities); var regex$4 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/; var mdurl = {}; var encode_1; var hasRequiredEncode; function requireEncode() { if (hasRequiredEncode) return encode_1; hasRequiredEncode = 1; var encodeCache = {}; function getEncodeCache(exclude) { var i2, ch2, cache = encodeCache[exclude]; if (cache) { return cache; } cache = encodeCache[exclude] = []; for (i2 = 0; i2 < 128; i2++) { ch2 = String.fromCharCode(i2); if (/^[0-9a-z]$/i.test(ch2)) { cache.push(ch2); } else { cache.push("%" + ("0" + i2.toString(16).toUpperCase()).slice(-2)); } } for (i2 = 0; i2 < exclude.length; i2++) { cache[exclude.charCodeAt(i2)] = exclude[i2]; } return cache; } function encode(string, exclude, keepEscaped) { var i2, l2, code2, nextCode, cache, result = ""; if (typeof exclude !== "string") { keepEscaped = exclude; exclude = encode.defaultChars; } if (typeof keepEscaped === "undefined") { keepEscaped = true; } cache = getEncodeCache(exclude); for (i2 = 0, l2 = string.length; i2 < l2; i2++) { code2 = string.charCodeAt(i2); if (keepEscaped && code2 === 37 && i2 + 2 < l2) { if (/^[0-9a-f]{2}$/i.test(string.slice(i2 + 1, i2 + 3))) { result += string.slice(i2, i2 + 3); i2 += 2; continue; } } if (code2 < 128) { result += cache[code2]; continue; } if (code2 >= 55296 && code2 <= 57343) { if (code2 >= 55296 && code2 <= 56319 && i2 + 1 < l2) { nextCode = string.charCodeAt(i2 + 1); if (nextCode >= 56320 && nextCode <= 57343) { result += encodeURIComponent(string[i2] + string[i2 + 1]); i2++; continue; } } result += "%EF%BF%BD"; continue; } result += encodeURIComponent(string[i2]); } return result; } encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; encode.componentChars = "-_.!~*'()"; encode_1 = encode; return encode_1; } var decode_1; var hasRequiredDecode; function requireDecode() { if (hasRequiredDecode) return decode_1; hasRequiredDecode = 1; var decodeCache = {}; function getDecodeCache(exclude) { var i2, ch2, cache = decodeCache[exclude]; if (cache) { return cache; } cache = decodeCache[exclude] = []; for (i2 = 0; i2 < 128; i2++) { ch2 = String.fromCharCode(i2); cache.push(ch2); } for (i2 = 0; i2 < exclude.length; i2++) { ch2 = exclude.charCodeAt(i2); cache[ch2] = "%" + ("0" + ch2.toString(16).toUpperCase()).slice(-2); } return cache; } function decode(string, exclude) { var cache; if (typeof exclude !== "string") { exclude = decode.defaultChars; } cache = getDecodeCache(exclude); return string.replace(/(%[a-f0-9]{2})+/gi, function(seq2) { var i2, l2, b1, b2, b3, b4, chr, result = ""; for (i2 = 0, l2 = seq2.length; i2 < l2; i2 += 3) { b1 = parseInt(seq2.slice(i2 + 1, i2 + 3), 16); if (b1 < 128) { result += cache[b1]; continue; } if ((b1 & 224) === 192 && i2 + 3 < l2) { b2 = parseInt(seq2.slice(i2 + 4, i2 + 6), 16); if ((b2 & 192) === 128) { chr = b1 << 6 & 1984 | b2 & 63; if (chr < 128) { result += "\uFFFD\uFFFD"; } else { result += String.fromCharCode(chr); } i2 += 3; continue; } } if ((b1 & 240) === 224 && i2 + 6 < l2) { b2 = parseInt(seq2.slice(i2 + 4, i2 + 6), 16); b3 = parseInt(seq2.slice(i2 + 7, i2 + 9), 16); if ((b2 & 192) === 128 && (b3 & 192) === 128) { chr = b1 << 12 & 61440 | b2 << 6 & 4032 | b3 & 63; if (chr < 2048 || chr >= 55296 && chr <= 57343) { result += "\uFFFD\uFFFD\uFFFD"; } else { result += String.fromCharCode(chr); } i2 += 6; continue; } } if ((b1 & 248) === 240 && i2 + 9 < l2) { b2 = parseInt(seq2.slice(i2 + 4, i2 + 6), 16); b3 = parseInt(seq2.slice(i2 + 7, i2 + 9), 16); b4 = parseInt(seq2.slice(i2 + 10, i2 + 12), 16); if ((b2 & 192) === 128 && (b3 & 192) === 128 && (b4 & 192) === 128) { chr = b1 << 18 & 1835008 | b2 << 12 & 258048 | b3 << 6 & 4032 | b4 & 63; if (chr < 65536 || chr > 1114111) { result += "\uFFFD\uFFFD\uFFFD\uFFFD"; } else { chr -= 65536; result += String.fromCharCode(55296 + (chr >> 10), 56320 + (chr & 1023)); } i2 += 9; continue; } } result += "\uFFFD"; } return result; }); } decode.defaultChars = ";/?:@&=+$,#"; decode.componentChars = ""; decode_1 = decode; return decode_1; } var format$5; var hasRequiredFormat; function requireFormat() { if (hasRequiredFormat) return format$5; hasRequiredFormat = 1; format$5 = function format2(url2) { var result = ""; result += url2.protocol || ""; result += url2.slashes ? "//" : ""; result += url2.auth ? url2.auth + "@" : ""; if (url2.hostname && url2.hostname.indexOf(":") !== -1) { result += "[" + url2.hostname + "]"; } else { result += url2.hostname || ""; } result += url2.port ? ":" + url2.port : ""; result += url2.pathname || ""; result += url2.search || ""; result += url2.hash || ""; return result; }; return format$5; } var parse$a; var hasRequiredParse; function requireParse() { if (hasRequiredParse) return parse$a; hasRequiredParse = 1; function Url() { this.protocol = null; this.slashes = null; this.auth = null; this.port = null; this.hostname = null; this.hash = null; this.search = null; this.pathname = null; } var protocolPattern = /^([a-z0-9.+-]+:)/i, portPattern = /:[0-9]*$/, simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, delims = ["<", ">", '"', "`", " ", "\r", "\n", " "], unwise = ["{", "}", "|", "\\", "^", "`"].concat(delims), autoEscape = ["'"].concat(unwise), nonHostChars = ["%", "/", "?", ";", "#"].concat(autoEscape), hostEndingChars = ["/", "?", "#"], hostnameMaxLen = 255, hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, hostlessProtocol = { "javascript": true, "javascript:": true }, slashedProtocol = { "http": true, "https": true, "ftp": true, "gopher": true, "file": true, "http:": true, "https:": true, "ftp:": true, "gopher:": true, "file:": true }; function urlParse(url2, slashesDenoteHost) { if (url2 && url2 instanceof Url) { return url2; } var u2 = new Url(); u2.parse(url2, slashesDenoteHost); return u2; } Url.prototype.parse = function(url2, slashesDenoteHost) { var i2, l2, lowerProto, hec, slashes, rest = url2; rest = rest.trim(); if (!slashesDenoteHost && url2.split("#").length === 1) { var simplePath = simplePathPattern.exec(rest); if (simplePath) { this.pathname = simplePath[1]; if (simplePath[2]) { this.search = simplePath[2]; } return this; } } var proto2 = protocolPattern.exec(rest); if (proto2) { proto2 = proto2[0]; lowerProto = proto2.toLowerCase(); this.protocol = proto2; rest = rest.substr(proto2.length); } if (slashesDenoteHost || proto2 || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { slashes = rest.substr(0, 2) === "//"; if (slashes && !(proto2 && hostlessProtocol[proto2])) { rest = rest.substr(2); this.slashes = true; } } if (!hostlessProtocol[proto2] && (slashes || proto2 && !slashedProtocol[proto2])) { var hostEnd = -1; for (i2 = 0; i2 < hostEndingChars.length; i2++) { hec = rest.indexOf(hostEndingChars[i2]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; } } var auth, atSign; if (hostEnd === -1) { atSign = rest.lastIndexOf("@"); } else { atSign = rest.lastIndexOf("@", hostEnd); } if (atSign !== -1) { auth = rest.slice(0, atSign); rest = rest.slice(atSign + 1); this.auth = auth; } hostEnd = -1; for (i2 = 0; i2 < nonHostChars.length; i2++) { hec = rest.indexOf(nonHostChars[i2]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; } } if (hostEnd === -1) { hostEnd = rest.length; } if (rest[hostEnd - 1] === ":") { hostEnd--; } var host = rest.slice(0, hostEnd); rest = rest.slice(hostEnd); this.parseHost(host); this.hostname = this.hostname || ""; var ipv6Hostname = this.hostname[0] === "[" && this.hostname[this.hostname.length - 1] === "]"; if (!ipv6Hostname) { var hostparts = this.hostname.split(/\./); for (i2 = 0, l2 = hostparts.length; i2 < l2; i2++) { var part2 = hostparts[i2]; if (!part2) { continue; } if (!part2.match(hostnamePartPattern)) { var newpart = ""; for (var j2 = 0, k2 = part2.length; j2 < k2; j2++) { if (part2.charCodeAt(j2) > 127) { newpart += "x"; } else { newpart += part2[j2]; } } if (!newpart.match(hostnamePartPattern)) { var validParts = hostparts.slice(0, i2); var notHost = hostparts.slice(i2 + 1); var bit = part2.match(hostnamePartStart); if (bit) { validParts.push(bit[1]); notHost.unshift(bit[2]); } if (notHost.length) { rest = notHost.join(".") + rest; } this.hostname = validParts.join("."); break; } } } } if (this.hostname.length > hostnameMaxLen) { this.hostname = ""; } if (ipv6Hostname) { this.hostname = this.hostname.substr(1, this.hostname.length - 2); } } var hash2 = rest.indexOf("#"); if (hash2 !== -1) { this.hash = rest.substr(hash2); rest = rest.slice(0, hash2); } var qm = rest.indexOf("?"); if (qm !== -1) { this.search = rest.substr(qm); rest = rest.slice(0, qm); } if (rest) { this.pathname = rest; } if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { this.pathname = ""; } return this; }; Url.prototype.parseHost = function(host) { var port = portPattern.exec(host); if (port) { port = port[0]; if (port !== ":") { this.port = port.substr(1); } host = host.substr(0, host.length - port.length); } if (host) { this.hostname = host; } }; parse$a = urlParse; return parse$a; } var hasRequiredMdurl; function requireMdurl() { if (hasRequiredMdurl) return mdurl; hasRequiredMdurl = 1; mdurl.encode = requireEncode(); mdurl.decode = requireDecode(); mdurl.format = requireFormat(); mdurl.parse = requireParse(); return mdurl; } var uc_micro = {}; var regex$3; var hasRequiredRegex$3; function requireRegex$3() { if (hasRequiredRegex$3) return regex$3; hasRequiredRegex$3 = 1; regex$3 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; return regex$3; } var regex$2; var hasRequiredRegex$2; function requireRegex$2() { if (hasRequiredRegex$2) return regex$2; hasRequiredRegex$2 = 1; regex$2 = /[\0-\x1F\x7F-\x9F]/; return regex$2; } var regex$1; var hasRequiredRegex$1; function requireRegex$1() { if (hasRequiredRegex$1) return regex$1; hasRequiredRegex$1 = 1; regex$1 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/; return regex$1; } var regex; var hasRequiredRegex; function requireRegex() { if (hasRequiredRegex) return regex; hasRequiredRegex = 1; regex = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/; return regex; } var hasRequiredUc_micro; function requireUc_micro() { if (hasRequiredUc_micro) return uc_micro; hasRequiredUc_micro = 1; uc_micro.Any = requireRegex$3(); uc_micro.Cc = requireRegex$2(); uc_micro.Cf = requireRegex$1(); uc_micro.P = regex$4; uc_micro.Z = requireRegex(); return uc_micro; } (function(exports2) { function _class2(obj) { return Object.prototype.toString.call(obj); } function isString2(obj) { return _class2(obj) === "[object String]"; } var _hasOwnProperty2 = Object.prototype.hasOwnProperty; function has2(object, key2) { return _hasOwnProperty2.call(object, key2); } function assign2(obj) { var sources = Array.prototype.slice.call(arguments, 1); sources.forEach(function(source) { if (!source) { return; } if (typeof source !== "object") { throw new TypeError(source + "must be object"); } Object.keys(source).forEach(function(key2) { obj[key2] = source[key2]; }); }); return obj; } function arrayReplaceAt(src2, pos, newElements) { return [].concat(src2.slice(0, pos), newElements, src2.slice(pos + 1)); } function isValidEntityCode(c) { if (c >= 55296 && c <= 57343) { return false; } if (c >= 64976 && c <= 65007) { return false; } if ((c & 65535) === 65535 || (c & 65535) === 65534) { return false; } if (c >= 0 && c <= 8) { return false; } if (c === 11) { return false; } if (c >= 14 && c <= 31) { return false; } if (c >= 127 && c <= 159) { return false; } if (c > 1114111) { return false; } return true; } function fromCodePoint(c) { if (c > 65535) { c -= 65536; var surrogate1 = 55296 + (c >> 10), surrogate2 = 56320 + (c & 1023); return String.fromCharCode(surrogate1, surrogate2); } return String.fromCharCode(c); } var UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g; var ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi; var UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + "|" + ENTITY_RE.source, "gi"); var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i; var entities$1 = entities.exports; function replaceEntityPattern(match2, name) { var code2 = 0; if (has2(entities$1, name)) { return entities$1[name]; } if (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) { code2 = name[1].toLowerCase() === "x" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10); if (isValidEntityCode(code2)) { return fromCodePoint(code2); } } return match2; } function unescapeMd(str2) { if (str2.indexOf("\\") < 0) { return str2; } return str2.replace(UNESCAPE_MD_RE, "$1"); } function unescapeAll(str2) { if (str2.indexOf("\\") < 0 && str2.indexOf("&") < 0) { return str2; } return str2.replace(UNESCAPE_ALL_RE, function(match2, escaped, entity) { if (escaped) { return escaped; } return replaceEntityPattern(match2, entity); }); } var HTML_ESCAPE_TEST_RE = /[&<>"]/; var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g; var HTML_REPLACEMENTS = { "&": "&", "<": "<", ">": ">", '"': """ }; function replaceUnsafeChar(ch2) { return HTML_REPLACEMENTS[ch2]; } function escapeHtml(str2) { if (HTML_ESCAPE_TEST_RE.test(str2)) { return str2.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar); } return str2; } var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g; function escapeRE(str2) { return str2.replace(REGEXP_ESCAPE_RE, "\\$&"); } function isSpace(code2) { switch (code2) { case 9: case 32: return true; } return false; } function isWhiteSpace(code2) { if (code2 >= 8192 && code2 <= 8202) { return true; } switch (code2) { case 9: case 10: case 11: case 12: case 13: case 32: case 160: case 5760: case 8239: case 8287: case 12288: return true; } return false; } var UNICODE_PUNCT_RE = regex$4; function isPunctChar(ch2) { return UNICODE_PUNCT_RE.test(ch2); } function isMdAsciiPunct(ch2) { switch (ch2) { case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 91: case 92: case 93: case 94: case 95: case 96: case 123: case 124: case 125: case 126: return true; default: return false; } } function normalizeReference(str2) { str2 = str2.trim().replace(/\s+/g, " "); if ("\u1E9E".toLowerCase() === "\u1E7E") { str2 = str2.replace(/ẞ/g, "\xDF"); } return str2.toLowerCase().toUpperCase(); } exports2.lib = {}; exports2.lib.mdurl = requireMdurl(); exports2.lib.ucmicro = requireUc_micro(); exports2.assign = assign2; exports2.isString = isString2; exports2.has = has2; exports2.unescapeMd = unescapeMd; exports2.unescapeAll = unescapeAll; exports2.isValidEntityCode = isValidEntityCode; exports2.fromCodePoint = fromCodePoint; exports2.escapeHtml = escapeHtml; exports2.arrayReplaceAt = arrayReplaceAt; exports2.isSpace = isSpace; exports2.isWhiteSpace = isWhiteSpace; exports2.isMdAsciiPunct = isMdAsciiPunct; exports2.isPunctChar = isPunctChar; exports2.escapeRE = escapeRE; exports2.normalizeReference = normalizeReference; })(utils); function scrollIntoView(view, pos, center = true, duration, offset, onDone) { const $pos = view.state.doc.resolve(pos); const container = editingRootNodeClosestToPos($pos); if (container) { const schema2 = view.state.schema; const containerEl = view.nodeDOM(container.pos); const parentList = findParentNodeOfTypeClosestToPos_1($pos, [schema2.nodes.ordered_list, schema2.nodes.bullet_list]); const parentDiv = schema2.nodes.div ? findParentNodeOfTypeClosestToPos_1($pos, schema2.nodes.div) : void 0; const resultPos = parentList || parentDiv ? $pos.before(2) : pos; const resultNode = findDomRefAtPos_1(resultPos, view.domAtPos.bind(view)); if (resultNode) { const scrollNode = resultNode instanceof HTMLElement ? resultNode : resultNode.parentElement; if (scrollNode) { const scroller = zenscroll.createScroller(editorScrollContainer(containerEl), duration, offset); if (center) { scroller.center(scrollNode, duration, offset, onDone); } else { scroller.intoView(scrollNode, duration, onDone); } } } } } function scrollToPos(view, pos, duration, offset, onDone) { const node2 = view.nodeDOM(pos); const scrollNode = node2 instanceof HTMLElement ? node2 : node2 == null ? void 0 : node2.parentElement; if (scrollNode) { const editingRoot = editingRootNode(view.state.selection); const container = view.nodeDOM(editingRoot.pos); const scroller = zenscroll.createScroller(editorScrollContainer(container), duration, offset); if (duration) { scroller.to(scrollNode, duration, onDone); } else { scroller.to(scrollNode, 0, onDone); } } } const kPmScrollContainer = "pm-scroll-container"; function editorScrollContainer(container) { return container.closest(`.${kPmScrollContainer}`) || container; } function mergedTextNodes(doc2, filter) { const textNodes2 = []; let nodeIndex = 0; doc2.descendants((node2, pos, parentNode2) => { if (node2.isText) { if (filter && !filter(node2, pos, parentNode2)) { return false; } if (textNodes2[nodeIndex]) { textNodes2[nodeIndex] = { text: textNodes2[nodeIndex].text + node2.text, pos: textNodes2[nodeIndex].pos }; } else { textNodes2[nodeIndex] = { text: node2.text || "", pos }; } } else { nodeIndex += 1; } return true; }); return textNodes2; } function domAttrNoSpelling(attrs) { return { ...attrs, spellcheck: "false" }; } function markIsActive(context, type2) { const { from: from2, $from, to, empty: empty2 } = context.selection; if (empty2) { return type2 && !!type2.isInSet(context.storedMarks || $from.marks()); } return !!context.doc.rangeHasMark(from2, to, type2); } function getMarkAttrs(doc2, range2, type2) { const { from: from2, to } = range2; let marks = []; doc2.nodesBetween(from2, to, (node2) => { marks = [...marks, ...node2.marks]; }); const mark = marks.find((markItem) => markItem.type.name === type2.name); if (mark) { return mark.attrs; } return {}; } function getMarkRange($pos, type2) { if (!$pos || !type2) { return false; } const start = $pos.parent.childAfter($pos.parentOffset); if (!start.node) { return false; } const link2 = start.node.marks.find((mark) => mark.type === type2); if (!link2) { return false; } let startIndex = $pos.index(); let startPos = $pos.start() + start.offset; let endIndex = startIndex + 1; let endPos = startPos + start.node.nodeSize; while (startIndex > 0 && link2.isInSet($pos.parent.child(startIndex - 1).marks)) { startIndex -= 1; startPos -= $pos.parent.child(startIndex).nodeSize; } while (endIndex < $pos.parent.childCount && link2.isInSet($pos.parent.child(endIndex).marks)) { endPos += $pos.parent.child(endIndex).nodeSize; endIndex += 1; } return { from: startPos, to: endPos }; } function getSelectionMarkRange(selection, markType) { let range2; if (selection.empty) { range2 = getMarkRange(selection.$head, markType); } else { range2 = { from: selection.from, to: selection.to }; } return range2; } function removeInvalidatedMarks(tr, node2, pos, re2, markType) { re2.lastIndex = 0; const markedNodes = findChildrenByMark_1(node2, markType, true); markedNodes.forEach((markedNode) => { const from2 = pos + 1 + markedNode.pos; const markedRange = getMarkRange(tr.doc.resolve(from2), markType); if (markedRange) { const text2 = tr.doc.textBetween(markedRange.from, markedRange.to); if (!text2.match(re2)) { tr.removeMark(markedRange.from, markedRange.to, markType); tr.removeStoredMark(markType); } } }); re2.lastIndex = 0; } function splitInvalidatedMarks(tr, node2, pos, validLength, markType, removeMark2) { const hasMarkType = (nd2) => markType.isInSet(nd2.marks); const markedNodes = findChildrenByMark_1(node2, markType, true); const remove = (from2, to, type2) => { if (removeMark2) { removeMark2(from2, to); } else { tr.removeMark(from2, to, type2); } }; markedNodes.forEach((markedNode) => { const mark = hasMarkType(markedNode.node); if (mark) { const from2 = pos + 1 + markedNode.pos; const markRange = getMarkRange(tr.doc.resolve(from2), markType); if (markRange) { const text2 = tr.doc.textBetween(markRange.from, markRange.to); const trimmedText = text2.trimStart(); const countSpace = text2.length - trimmedText.length; if (countSpace > 0) { remove(markRange.from, markRange.from + countSpace, markType); } const length2 = validLength(trimmedText); if (length2 > -1 && length2 !== text2.length) { remove(markRange.from + length2 + countSpace, markRange.to, markType); } } } }); } function detectAndApplyMarks(tr, node2, pos, re2, markType, attrs, filter, text2) { re2.lastIndex = 0; const textNodes2 = mergedTextNodes( node2, (_node, _pos, parentNode2) => !!(parentNode2 && parentNode2.type.allowsMarkType(markType)) ); textNodes2.forEach((textNode) => { re2.lastIndex = 0; let match2 = re2.exec(textNode.text); while (match2 !== null) { const refText = text2 ? text2(match2) : match2[0]; const from2 = pos + 1 + textNode.pos + match2.index + (match2[0].length - refText.length); const to = from2 + refText.length; const range2 = getMarkRange(tr.doc.resolve(to), markType); if ((!range2 || range2.from !== from2 || range2.to !== to) && !tr.doc.rangeHasMark(from2, to, markType.schema.marks.code)) { if (!filter || filter(from2, to)) { const mark = markType.create(attrs instanceof Function ? attrs(match2) : attrs); tr.addMark(from2, to, mark); if (tr.selection.anchor === to) { tr.removeStoredMark(mark.type); } } } match2 = re2.lastIndex !== 0 ? re2.exec(textNode.text) : null; } }); re2.lastIndex = 0; } function isList(node2) { if (node2) { const schema2 = node2.type.schema; return node2.type === schema2.nodes.bullet_list || node2.type === schema2.nodes.ordered_list; } else { return false; } } function precedingListItemInsertPos(doc2, selection) { if (!selection.empty) { return null; } const schema2 = doc2.type.schema; const $head = selection.$head; const parentListItem = findParentNodeOfType_1(schema2.nodes.list_item)(selection); if (parentListItem) { const $liPos = doc2.resolve(parentListItem.pos); const listIndex = $liPos.index(); const parentIndex = $head.index($head.depth - 1); const parentOffset = $head.parentOffset; if (listIndex > 0 && parentIndex === 0 && parentOffset === 0) { const pos = $liPos.pos - 1; return pos; } else { return null; } } else { return null; } } function precedingListItemInsert(tr, pos, node2) { tr.deleteRange(tr.selection.from, tr.selection.from + 1); tr.insert(pos, node2); setTextSelection_1(tr.mapping.map(pos), -1)(tr); return tr; } const deleteSelection = (state, dispatch) => { if (state.selection.empty) return false; if (dispatch) dispatch(state.tr.deleteSelection().scrollIntoView()); return true; }; function atBlockStart(state, view) { let { $cursor } = state.selection; if (!$cursor || (view ? !view.endOfTextblock("backward", state) : $cursor.parentOffset > 0)) return null; return $cursor; } const joinBackward = (state, dispatch, view) => { let $cursor = atBlockStart(state, view); if (!$cursor) return false; let $cut = findCutBefore($cursor); if (!$cut) { let range2 = $cursor.blockRange(), target2 = range2 && liftTarget(range2); if (target2 == null) return false; if (dispatch) dispatch(state.tr.lift(range2, target2).scrollIntoView()); return true; } let before = $cut.nodeBefore; if (!before.type.spec.isolating && deleteBarrier(state, $cut, dispatch)) return true; if ($cursor.parent.content.size == 0 && (textblockAt(before, "end") || NodeSelection.isSelectable(before))) { let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty); if (delStep && delStep.slice.size < delStep.to - delStep.from) { if (dispatch) { let tr = state.tr.step(delStep); tr.setSelection(textblockAt(before, "end") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1) : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize)); dispatch(tr.scrollIntoView()); } return true; } } if (before.isAtom && $cut.depth == $cursor.depth - 1) { if (dispatch) dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView()); return true; } return false; }; function textblockAt(node2, side, only = false) { for (let scan = node2; scan; scan = side == "start" ? scan.firstChild : scan.lastChild) { if (scan.isTextblock) return true; if (only && scan.childCount != 1) return false; } return false; } const selectNodeBackward = (state, dispatch, view) => { let { $head, empty: empty2 } = state.selection, $cut = $head; if (!empty2) return false; if ($head.parent.isTextblock) { if (view ? !view.endOfTextblock("backward", state) : $head.parentOffset > 0) return false; $cut = findCutBefore($head); } let node2 = $cut && $cut.nodeBefore; if (!node2 || !NodeSelection.isSelectable(node2)) return false; if (dispatch) dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node2.nodeSize)).scrollIntoView()); return true; }; function findCutBefore($pos) { if (!$pos.parent.type.spec.isolating) for (let i2 = $pos.depth - 1; i2 >= 0; i2--) { if ($pos.index(i2) > 0) return $pos.doc.resolve($pos.before(i2 + 1)); if ($pos.node(i2).type.spec.isolating) break; } return null; } function atBlockEnd(state, view) { let { $cursor } = state.selection; if (!$cursor || (view ? !view.endOfTextblock("forward", state) : $cursor.parentOffset < $cursor.parent.content.size)) return null; return $cursor; } const joinForward = (state, dispatch, view) => { let $cursor = atBlockEnd(state, view); if (!$cursor) return false; let $cut = findCutAfter($cursor); if (!$cut) return false; let after = $cut.nodeAfter; if (deleteBarrier(state, $cut, dispatch)) return true; if ($cursor.parent.content.size == 0 && (textblockAt(after, "start") || NodeSelection.isSelectable(after))) { let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty); if (delStep && delStep.slice.size < delStep.to - delStep.from) { if (dispatch) { let tr = state.tr.step(delStep); tr.setSelection(textblockAt(after, "start") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1) : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos))); dispatch(tr.scrollIntoView()); } return true; } } if (after.isAtom && $cut.depth == $cursor.depth - 1) { if (dispatch) dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView()); return true; } return false; }; const selectNodeForward = (state, dispatch, view) => { let { $head, empty: empty2 } = state.selection, $cut = $head; if (!empty2) return false; if ($head.parent.isTextblock) { if (view ? !view.endOfTextblock("forward", state) : $head.parentOffset < $head.parent.content.size) return false; $cut = findCutAfter($head); } let node2 = $cut && $cut.nodeAfter; if (!node2 || !NodeSelection.isSelectable(node2)) return false; if (dispatch) dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView()); return true; }; function findCutAfter($pos) { if (!$pos.parent.type.spec.isolating) for (let i2 = $pos.depth - 1; i2 >= 0; i2--) { let parent = $pos.node(i2); if ($pos.index(i2) + 1 < parent.childCount) return $pos.doc.resolve($pos.after(i2 + 1)); if (parent.type.spec.isolating) break; } return null; } const lift = (state, dispatch) => { let { $from, $to } = state.selection; let range2 = $from.blockRange($to), target2 = range2 && liftTarget(range2); if (target2 == null) return false; if (dispatch) dispatch(state.tr.lift(range2, target2).scrollIntoView()); return true; }; const newlineInCode = (state, dispatch) => { let { $head, $anchor } = state.selection; if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false; if (dispatch) dispatch(state.tr.insertText("\n").scrollIntoView()); return true; }; function defaultBlockAt(match2) { for (let i2 = 0; i2 < match2.edgeCount; i2++) { let { type: type2 } = match2.edge(i2); if (type2.isTextblock && !type2.hasRequiredAttrs()) return type2; } return null; } const exitCode = (state, dispatch) => { let { $head, $anchor } = state.selection; if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false; let above = $head.node(-1), after = $head.indexAfter(-1), type2 = defaultBlockAt(above.contentMatchAt(after)); if (!type2 || !above.canReplaceWith(after, after, type2)) return false; if (dispatch) { let pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type2.createAndFill()); tr.setSelection(Selection.near(tr.doc.resolve(pos), 1)); dispatch(tr.scrollIntoView()); } return true; }; const createParagraphNear = (state, dispatch) => { let sel = state.selection, { $from, $to } = sel; if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent) return false; let type2 = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter())); if (!type2 || !type2.isTextblock) return false; if (dispatch) { let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos; let tr = state.tr.insert(side, type2.createAndFill()); tr.setSelection(TextSelection.create(tr.doc, side + 1)); dispatch(tr.scrollIntoView()); } return true; }; const liftEmptyBlock = (state, dispatch) => { let { $cursor } = state.selection; if (!$cursor || $cursor.parent.content.size) return false; if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) { let before = $cursor.before(); if (canSplit(state.doc, before)) { if (dispatch) dispatch(state.tr.split(before).scrollIntoView()); return true; } } let range2 = $cursor.blockRange(), target2 = range2 && liftTarget(range2); if (target2 == null) return false; if (dispatch) dispatch(state.tr.lift(range2, target2).scrollIntoView()); return true; }; function splitBlockAs(splitNode) { return (state, dispatch) => { let { $from, $to } = state.selection; if (state.selection instanceof NodeSelection && state.selection.node.isBlock) { if (!$from.parentOffset || !canSplit(state.doc, $from.pos)) return false; if (dispatch) dispatch(state.tr.split($from.pos).scrollIntoView()); return true; } if (!$from.parent.isBlock) return false; if (dispatch) { let atEnd = $to.parentOffset == $to.parent.content.size; let tr = state.tr; if (state.selection instanceof TextSelection || state.selection instanceof AllSelection) tr.deleteSelection(); let deflt = $from.depth == 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1))); let splitType = splitNode && splitNode($to.parent, atEnd); let types2 = splitType ? [splitType] : atEnd && deflt ? [{ type: deflt }] : void 0; let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types2); if (!types2 && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : void 0)) { if (deflt) types2 = [{ type: deflt }]; can = true; } if (can) { tr.split(tr.mapping.map($from.pos), 1, types2); if (!atEnd && !$from.parentOffset && $from.parent.type != deflt) { let first = tr.mapping.map($from.before()), $first = tr.doc.resolve(first); if (deflt && $from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) tr.setNodeMarkup(tr.mapping.map($from.before()), deflt); } } dispatch(tr.scrollIntoView()); } return true; }; } const splitBlock = splitBlockAs(); function joinMaybeClear(state, $pos, dispatch) { let before = $pos.nodeBefore, after = $pos.nodeAfter, index2 = $pos.index(); if (!before || !after || !before.type.compatibleContent(after.type)) return false; if (!before.content.size && $pos.parent.canReplace(index2 - 1, index2)) { if (dispatch) dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView()); return true; } if (!$pos.parent.canReplace(index2, index2 + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos))) return false; if (dispatch) dispatch(state.tr.clearIncompatible($pos.pos, before.type, before.contentMatchAt(before.childCount)).join($pos.pos).scrollIntoView()); return true; } function deleteBarrier(state, $cut, dispatch) { let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match2; if (before.type.spec.isolating || after.type.spec.isolating) return false; if (joinMaybeClear(state, $cut, dispatch)) return true; let canDelAfter = $cut.parent.canReplace($cut.index(), $cut.index() + 1); if (canDelAfter && (conn = (match2 = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match2.matchType(conn[0] || after.type).validEnd) { if (dispatch) { let end = $cut.pos + after.nodeSize, wrap2 = Fragment.empty; for (let i2 = conn.length - 1; i2 >= 0; i2--) wrap2 = Fragment.from(conn[i2].create(null, wrap2)); wrap2 = Fragment.from(before.copy(wrap2)); let tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap2, 1, 0), conn.length, true)); let joinAt = end + 2 * conn.length; if (canJoin(tr.doc, joinAt)) tr.join(joinAt); dispatch(tr.scrollIntoView()); } return true; } let selAfter = Selection.findFrom($cut, 1); let range2 = selAfter && selAfter.$from.blockRange(selAfter.$to), target2 = range2 && liftTarget(range2); if (target2 != null && target2 >= $cut.depth) { if (dispatch) dispatch(state.tr.lift(range2, target2).scrollIntoView()); return true; } if (canDelAfter && textblockAt(after, "start", true) && textblockAt(before, "end")) { let at = before, wrap2 = []; for (; ; ) { wrap2.push(at); if (at.isTextblock) break; at = at.lastChild; } let afterText = after, afterDepth = 1; for (; !afterText.isTextblock; afterText = afterText.firstChild) afterDepth++; if (at.canReplace(at.childCount, at.childCount, afterText.content)) { if (dispatch) { let end = Fragment.empty; for (let i2 = wrap2.length - 1; i2 >= 0; i2--) end = Fragment.from(wrap2[i2].copy(end)); let tr = state.tr.step(new ReplaceAroundStep($cut.pos - wrap2.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap2.length, 0), 0, true)); dispatch(tr.scrollIntoView()); } return true; } } return false; } function wrapIn(nodeType, attrs = null) { return function(state, dispatch) { let { $from, $to } = state.selection; let range2 = $from.blockRange($to), wrapping = range2 && findWrapping(range2, nodeType, attrs); if (!wrapping) return false; if (dispatch) dispatch(state.tr.wrap(range2, wrapping).scrollIntoView()); return true; }; } function setBlockType(nodeType, attrs = null) { return function(state, dispatch) { let applicable = false; for (let i2 = 0; i2 < state.selection.ranges.length && !applicable; i2++) { let { $from: { pos: from2 }, $to: { pos: to } } = state.selection.ranges[i2]; state.doc.nodesBetween(from2, to, (node2, pos) => { if (applicable) return false; if (!node2.isTextblock || node2.hasMarkup(nodeType, attrs)) return; if (node2.type == nodeType) { applicable = true; } else { let $pos = state.doc.resolve(pos), index2 = $pos.index(); applicable = $pos.parent.canReplaceWith(index2, index2 + 1, nodeType); } }); } if (!applicable) return false; if (dispatch) { let tr = state.tr; for (let i2 = 0; i2 < state.selection.ranges.length; i2++) { let { $from: { pos: from2 }, $to: { pos: to } } = state.selection.ranges[i2]; tr.setBlockType(from2, to, nodeType, attrs); } dispatch(tr.scrollIntoView()); } return true; }; } function markApplies(doc2, ranges, type2) { for (let i2 = 0; i2 < ranges.length; i2++) { let { $from, $to } = ranges[i2]; let can = $from.depth == 0 ? doc2.inlineContent && doc2.type.allowsMarkType(type2) : false; doc2.nodesBetween($from.pos, $to.pos, (node2) => { if (can) return false; can = node2.inlineContent && node2.type.allowsMarkType(type2); }); if (can) return true; } return false; } function toggleMark(markType, attrs = null) { return function(state, dispatch) { let { empty: empty2, $cursor, ranges } = state.selection; if (empty2 && !$cursor || !markApplies(state.doc, ranges, markType)) return false; if (dispatch) { if ($cursor) { if (markType.isInSet(state.storedMarks || $cursor.marks())) dispatch(state.tr.removeStoredMark(markType)); else dispatch(state.tr.addStoredMark(markType.create(attrs))); } else { let has2 = false, tr = state.tr; for (let i2 = 0; !has2 && i2 < ranges.length; i2++) { let { $from, $to } = ranges[i2]; has2 = state.doc.rangeHasMark($from.pos, $to.pos, markType); } for (let i2 = 0; i2 < ranges.length; i2++) { let { $from, $to } = ranges[i2]; if (has2) { tr.removeMark($from.pos, $to.pos, markType); } else { let from2 = $from.pos, to = $to.pos, start = $from.nodeAfter, end = $to.nodeBefore; let spaceStart = start && start.isText ? /^\s*/.exec(start.text)[0].length : 0; let spaceEnd = end && end.isText ? /\s*$/.exec(end.text)[0].length : 0; if (from2 + spaceStart < to) { from2 += spaceStart; to -= spaceEnd; } tr.addMark(from2, to, markType.create(attrs)); } } dispatch(tr.scrollIntoView()); } } return true; }; } function wrapDispatchForJoin(dispatch, isJoinable) { return (tr) => { if (!tr.isGeneric) return dispatch(tr); let ranges = []; for (let i2 = 0; i2 < tr.mapping.maps.length; i2++) { let map2 = tr.mapping.maps[i2]; for (let j2 = 0; j2 < ranges.length; j2++) ranges[j2] = map2.map(ranges[j2]); map2.forEach((_s, _e, from2, to) => ranges.push(from2, to)); } let joinable2 = []; for (let i2 = 0; i2 < ranges.length; i2 += 2) { let from2 = ranges[i2], to = ranges[i2 + 1]; let $from = tr.doc.resolve(from2), depth = $from.sharedDepth(to), parent = $from.node(depth); for (let index2 = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index2) { let after = parent.maybeChild(index2); if (!after) break; if (index2 && joinable2.indexOf(pos) == -1) { let before = parent.child(index2 - 1); if (before.type == after.type && isJoinable(before, after)) joinable2.push(pos); } pos += after.nodeSize; } } joinable2.sort((a2, b2) => a2 - b2); for (let i2 = joinable2.length - 1; i2 >= 0; i2--) { if (canJoin(tr.doc, joinable2[i2])) tr.join(joinable2[i2]); } dispatch(tr); }; } function autoJoin(command, isJoinable) { let canJoin2 = Array.isArray(isJoinable) ? (node2) => isJoinable.indexOf(node2.type.name) > -1 : isJoinable; return (state, dispatch, view) => command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin2), view); } function chainCommands(...commands) { return function(state, dispatch, view) { for (let i2 = 0; i2 < commands.length; i2++) if (commands[i2](state, dispatch, view)) return true; return false; }; } typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os != "undefined" && os.platform ? os.platform() == "darwin" : false; function wrapInList(listType, attrs = null) { return function(state, dispatch) { let { $from, $to } = state.selection; let range2 = $from.blockRange($to), doJoin = false, outerRange = range2; if (!range2) return false; if (range2.depth >= 2 && $from.node(range2.depth - 1).type.compatibleContent(listType) && range2.startIndex == 0) { if ($from.index(range2.depth - 1) == 0) return false; let $insert = state.doc.resolve(range2.start - 2); outerRange = new NodeRange($insert, $insert, range2.depth); if (range2.endIndex < range2.parent.childCount) range2 = new NodeRange($from, state.doc.resolve($to.end(range2.depth)), range2.depth); doJoin = true; } let wrap2 = findWrapping(outerRange, listType, attrs, range2); if (!wrap2) return false; if (dispatch) dispatch(doWrapInList(state.tr, range2, wrap2, doJoin, listType).scrollIntoView()); return true; }; } function doWrapInList(tr, range2, wrappers, joinBefore, listType) { let content = Fragment.empty; for (let i2 = wrappers.length - 1; i2 >= 0; i2--) content = Fragment.from(wrappers[i2].type.create(wrappers[i2].attrs, content)); tr.step(new ReplaceAroundStep(range2.start - (joinBefore ? 2 : 0), range2.end, range2.start, range2.end, new Slice(content, 0, 0), wrappers.length, true)); let found2 = 0; for (let i2 = 0; i2 < wrappers.length; i2++) if (wrappers[i2].type == listType) found2 = i2 + 1; let splitDepth = wrappers.length - found2; let splitPos = range2.start + wrappers.length - (joinBefore ? 2 : 0), parent = range2.parent; for (let i2 = range2.startIndex, e2 = range2.endIndex, first = true; i2 < e2; i2++, first = false) { if (!first && canSplit(tr.doc, splitPos, splitDepth)) { tr.split(splitPos, splitDepth); splitPos += 2 * splitDepth; } splitPos += parent.child(i2).nodeSize; } return tr; } function splitListItem(itemType) { return function(state, dispatch) { let { $from, $to, node: node2 } = state.selection; if (node2 && node2.isBlock || $from.depth < 2 || !$from.sameParent($to)) return false; let grandParent = $from.node(-1); if (grandParent.type != itemType) return false; if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) { if ($from.depth == 3 || $from.node(-3).type != itemType || $from.index(-2) != $from.node(-2).childCount - 1) return false; if (dispatch) { let wrap2 = Fragment.empty; let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3; for (let d2 = $from.depth - depthBefore; d2 >= $from.depth - 3; d2--) wrap2 = Fragment.from($from.node(d2).copy(wrap2)); let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3; wrap2 = wrap2.append(Fragment.from(itemType.createAndFill())); let start = $from.before($from.depth - (depthBefore - 1)); let tr2 = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap2, 4 - depthBefore, 0)); let sel = -1; tr2.doc.nodesBetween(start, tr2.doc.content.size, (node3, pos) => { if (sel > -1) return false; if (node3.isTextblock && node3.content.size == 0) sel = pos + 1; }); if (sel > -1) tr2.setSelection(Selection.near(tr2.doc.resolve(sel))); dispatch(tr2.scrollIntoView()); } return true; } let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null; let tr = state.tr.delete($from.pos, $to.pos); let types2 = nextType ? [null, { type: nextType }] : void 0; if (!canSplit(tr.doc, $from.pos, 2, types2)) return false; if (dispatch) dispatch(tr.split($from.pos, 2, types2).scrollIntoView()); return true; }; } function liftListItem$1(itemType) { return function(state, dispatch) { let { $from, $to } = state.selection; let range2 = $from.blockRange($to, (node2) => node2.childCount > 0 && node2.firstChild.type == itemType); if (!range2) return false; if (!dispatch) return true; if ($from.node(range2.depth - 1).type == itemType) return liftToOuterList$1(state, dispatch, itemType, range2); else return liftOutOfList$1(state, dispatch, range2); }; } function liftToOuterList$1(state, dispatch, itemType, range2) { let tr = state.tr, end = range2.end, endOfList = range2.$to.end(range2.depth); if (end < endOfList) { tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range2.parent.copy())), 1, 0), 1, true)); range2 = new NodeRange(tr.doc.resolve(range2.$from.pos), tr.doc.resolve(endOfList), range2.depth); } const target2 = liftTarget(range2); if (target2 == null) return false; tr.lift(range2, target2); let after = tr.mapping.map(end, -1) - 1; if (canJoin(tr.doc, after)) tr.join(after); dispatch(tr.scrollIntoView()); return true; } function liftOutOfList$1(state, dispatch, range2) { let tr = state.tr, list = range2.parent; for (let pos = range2.end, i2 = range2.endIndex - 1, e2 = range2.startIndex; i2 > e2; i2--) { pos -= list.child(i2).nodeSize; tr.delete(pos - 1, pos + 1); } let $start = tr.doc.resolve(range2.start), item = $start.nodeAfter; if (tr.mapping.map(range2.end) != range2.start + $start.nodeAfter.nodeSize) return false; let atStart = range2.startIndex == 0, atEnd = range2.endIndex == list.childCount; let parent = $start.node(-1), indexBefore = $start.index(-1); if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list)))) return false; let start = $start.pos, end = start + item.nodeSize; tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))).append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1)); dispatch(tr.scrollIntoView()); return true; } function sinkListItem$1(itemType) { return function(state, dispatch) { let { $from, $to } = state.selection; let range2 = $from.blockRange($to, (node2) => node2.childCount > 0 && node2.firstChild.type == itemType); if (!range2) return false; let startIndex = range2.startIndex; if (startIndex == 0) return false; let parent = range2.parent, nodeBefore = parent.child(startIndex - 1); if (nodeBefore.type != itemType) return false; if (dispatch) { let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type; let inner = Fragment.from(nestedBefore ? itemType.create() : null); let slice2 = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0); let before = range2.start, after = range2.end; dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice2, 1, true)).scrollIntoView()); } return true; }; } function extensionIfEnabled(extension2, name) { return (context) => { if (extensionEnabled(context.pandocExtensions, name)) { return extension2; } else { return null; } }; } function extensionEnabled(pandocExtensions, name) { if (typeof name === "string") { if (pandocExtensions[name]) { return true; } } else if (Array.isArray(name)) { for (const nm of name) { if (pandocExtensions[nm]) { return true; } } } return false; } const kPandocAttrId = 0; const kPandocAttrClasses = 1; const kPandocAttrKeyvalue = 2; const kDataPmPandocAttr = "data-pm-pandoc-attr"; const kWidthAttrib = "width"; const kHeightAttrib = "height"; const kStyleAttrib = "style"; const kAlignAttrib = "align"; const kFigAltAttrib = "fig-alt"; const kFigAlignAttrib = "fig-align"; const kFigEnvAttrib = "fig-env"; const kCodeBlockAttr = 0; const kCodeBlockText = 1; const kSpanAttr = 0; const kSpanChildren = 1; const pandocAttrSpec = { id: { default: null }, classes: { default: [] }, keyvalue: { default: [] } }; function pandocAttrAvailable(attrs, keyvalue = true) { return !!attrs.id || attrs.classes && attrs.classes.length > 0 || keyvalue && attrs.keyvalue && attrs.keyvalue.length > 0; } function pandocAttrFrom(attrs) { const pandocAttr = { id: "", classes: [], keyvalue: [] }; if (attrs.id) { pandocAttr.id = attrs.id; } if (attrs.classes) { pandocAttr.classes = attrs.classes; } if (attrs.keyvalue) { pandocAttr.keyvalue = attrs.keyvalue; } return pandocAttr; } function pandocAttrEnsureClass(attr, name) { attr.classes = [name].concat((attr.classes || []).filter((clz) => clz !== name)); } function pandocAttrRemoveClass(attr, predicate) { let foundClass; if (Array.isArray(attr.classes)) { const classes = []; for (const clz of attr.classes) { if (predicate(clz)) { foundClass = clz; } else { classes.push(clz); } } attr.classes = classes; return foundClass; } else { return void 0; } } function pandocAttrHasClass(attrs, predicate) { if (Array.isArray(attrs.classes)) { const classes = attrs.classes; return classes.some((clz) => predicate(clz)); } else { return false; } } function pandocAttrGetKeyvalue(attr, key2) { if (attr.keyvalue) { const entry = attr.keyvalue.find((keyval) => keyval[0] === key2); if (entry) { return entry[1]; } else { return void 0; } } else { return void 0; } } function pandocAttrSetKeyvalue(attr, key2, value) { const keyvalue = [...attr.keyvalue || []]; let add = true; for (const entry of keyvalue) { if (entry[0] === key2) { entry[1] = value; add = false; break; } } if (add) { keyvalue.push([key2, value]); } attr.keyvalue = keyvalue; } function pandocAttrRemoveKeyvalue(attr, key2) { if (attr.keyvalue) { attr.keyvalue = attr.keyvalue.filter((entry) => entry[0] !== key2); } } function pandocAttrInSpec(spec) { const keys2 = Object.keys(spec.attrs || {}); return keys2.includes("id") && keys2.includes("classes") && keys2.includes("keyvalue"); } function pandocAttrReadAST(tok, index2) { const pandocAttr = tok.c[index2]; return { id: pandocAttr[kPandocAttrId] || void 0, classes: (pandocAttr[kPandocAttrClasses] || []).map((clz) => clz.replace(/^\.+/, "")), keyvalue: pandocAttr[kPandocAttrKeyvalue] }; } function pandocAttrToDomAttr(attrs, marker2 = true) { const domAttr = {}; if (attrs.id) { domAttr.id = attrs.id; } if (attrs.classes && attrs.classes.length > 0) { domAttr.class = attrs.classes.join(" "); } attrs.keyvalue.forEach((keyvalue) => { domAttr[keyvalue[0]] = keyvalue[1]; }); if (marker2) { domAttr[kDataPmPandocAttr] = "1"; } return domAttr; } function pandocAttrParseDom(el2, attrs, forceAttrs = false) { const excludedNames = [...Object.keys(attrs), "spellcheck"]; const includedNames = []; if (!forceAttrs && !el2.hasAttribute(kDataPmPandocAttr)) { includedNames.push("src", "alt"); } const attr = { id: "", classes: [], keyvalue: [] }; el2.getAttributeNames().forEach((name) => { const value = el2.getAttribute(name); if (excludedNames.indexOf(name) === -1 && !name.startsWith("data-pm")) { if (!includedNames.length || includedNames.includes(name)) { if (name === "id") { attr.id = value; } else if (name === "class") { attr.classes = value.split(/\s+/).filter((val) => !!val.length).filter((val) => !val.startsWith("pm-")); } else { attr.keyvalue.push([name, value]); } } } }); return attr; } function pandocAttrParseText(attr) { attr = attr.trim(); let id2 = ""; const classes = []; let remainder = ""; let current = ""; const resolveCurrent = () => { const resolve = current; current = ""; if (resolve.length === 0) { return true; } else if (resolve.startsWith("#")) { if (id2.length === 0 && resolve.length > 1) { id2 = resolve.substr(1); return true; } else { return false; } } else if (resolve.startsWith(".")) { if (resolve.length > 1) { classes.push(resolve.substr(1)); return true; } else { return false; } } else { remainder = resolve; return true; } }; for (let i2 = 0; i2 < attr.length; i2++) { let inQuotes = false; const ch2 = attr[i2]; inQuotes = ch2 === '"' ? !inQuotes : inQuotes; if (ch2 !== " " && !inQuotes) { current += ch2; } else if (resolveCurrent()) { if (remainder.length > 0) { remainder = remainder + attr.substr(i2); break; } } else { return null; } } if (resolveCurrent()) { if (id2.length === 0 && classes.length === 0) { remainder = attr; } return { id: id2, classes, keyvalue: remainder.length > 0 ? pandocAttrKeyvalueFromText(remainder, " ") : [] }; } else { return null; } } function pandocAttrKeyvalueFromText(text2, separator) { if (separator === " ") { let convertedText = ""; let inQuotes = false; for (let i2 = 0; i2 < text2.length; i2++) { let ch2 = text2.charAt(i2); if (ch2 === '"') { inQuotes = !inQuotes; } else if (ch2 === " " && !inQuotes) { ch2 = "\n"; } convertedText += ch2; } text2 = convertedText; } const lines2 = text2.trim().split("\n"); return lines2.map((line2) => { const parts = line2.trim().split("="); return [parts[0], (parts[1] || "").replace(/^"/, "").replace(/"$/, "")]; }); } function attrPartitionKeyvalue(partition, keyvalue) { const base2 = new Array(); const partitioned = new Array(); keyvalue.forEach((kv) => { if (partition.includes(kv[0])) { partitioned.push(kv); } else { base2.push(kv); } }); return { base: base2, partitioned }; } function extensionIfPandocAttrEnabled(extension2) { return extensionIfEnabled(extension2, kPandocAttrExtensions); } function pandocAttrEnabled(pandocExtensions) { return extensionEnabled(pandocExtensions, kPandocAttrExtensions); } const kPandocAttrExtensions = [ "link_attributes", "mmd_link_attributes", "mmd_header_identifiers", "header_attributes", "fenced_code_attributes", "inline_code_attributes", "bracketed_spans", "native_spans", "fenced_divs", "native_divs" ]; function tokens(frag, start, end, target2) { for (let i2 = 0, off = 0; i2 < frag.childCount; i2++) { let child = frag.child(i2), endOff = off + child.nodeSize; let from2 = Math.max(off, start), to = Math.min(endOff, end); if (from2 < to) { if (child.isText) { for (let j2 = from2; j2 < to; j2++) target2.push(child.text.charCodeAt(j2 - off)); } else if (child.isLeaf) { target2.push(child.type.name); } else { if (from2 == off) target2.push(child.type.name); tokens(child.content, Math.max(off + 1, from2) - off - 1, Math.min(endOff - 1, to) - off - 1, target2); if (to == endOff) target2.push(-1); } } off = endOff; } return target2; } const MAX_DIFF_SIZE = 5e3; function minUnchanged(sizeA, sizeB) { return Math.min(15, Math.max(2, Math.floor(Math.max(sizeA, sizeB) / 10))); } function computeDiff(fragA, fragB, range2) { let tokA = tokens(fragA, range2.fromA, range2.toA, []); let tokB = tokens(fragB, range2.fromB, range2.toB, []); let start = 0, endA = tokA.length, endB = tokB.length; while (start < tokA.length && start < tokB.length && tokA[start] === tokB[start]) start++; if (start == tokA.length && start == tokB.length) return []; while (endA > start && endB > start && tokA[endA - 1] === tokB[endB - 1]) endA--, endB--; if (endA == start || endB == start || endA == endB && endA == start + 1) return [range2.slice(start, endA, start, endB)]; let lenA = endA - start, lenB = endB - start; let max2 = Math.min(MAX_DIFF_SIZE, lenA + lenB), off = max2 + 1; let history2 = []; let frontier = []; for (let len = off * 2, i2 = 0; i2 < len; i2++) frontier[i2] = -1; for (let size2 = 0; size2 <= max2; size2++) { for (let diag = -size2; diag <= size2; diag += 2) { let next2 = frontier[diag + 1 + max2], prev2 = frontier[diag - 1 + max2]; let x2 = next2 < prev2 ? prev2 : next2 + 1, y2 = x2 + diag; while (x2 < lenA && y2 < lenB && tokA[start + x2] === tokB[start + y2]) x2++, y2++; frontier[diag + max2] = x2; if (x2 >= lenA && y2 >= lenB) { let diff2 = [], minSpan = minUnchanged(endA - start, endB - start); let fromA = -1, toA = -1, fromB = -1, toB = -1; let add = (fA, tA, fB, tB) => { if (fromA > -1 && fromA < tA + minSpan) { fromA = fA; fromB = fB; } else { if (fromA > -1) diff2.push(range2.slice(fromA, toA, fromB, toB)); fromA = fA; toA = tA; fromB = fB; toB = tB; } }; for (let i2 = size2 - 1; i2 >= 0; i2--) { let next3 = frontier[diag + 1 + max2], prev3 = frontier[diag - 1 + max2]; if (next3 < prev3) { diag--; x2 = prev3 + start; y2 = x2 + diag; add(x2, x2, y2, y2 + 1); } else { diag++; x2 = next3 + start; y2 = x2 + diag; add(x2, x2 + 1, y2, y2); } frontier = history2[i2 >> 1]; } if (fromA > -1) diff2.push(range2.slice(fromA, toA, fromB, toB)); return diff2.reverse(); } } if (size2 % 2 == 0) history2.push(frontier.slice()); } return [range2.slice(start, endA, start, endB)]; } class Span { constructor(length2, data) { this.length = length2; this.data = data; } cut(length2) { return length2 == this.length ? this : new Span(length2, this.data); } static slice(spans, from2, to) { if (from2 == to) return Span.none; if (from2 == 0 && to == Span.len(spans)) return spans; let result = []; for (let i2 = 0, off = 0; off < to; i2++) { let span = spans[i2], end = off + span.length; let overlap = Math.min(to, end) - Math.max(from2, off); if (overlap > 0) result.push(span.cut(overlap)); off = end; } return result; } static join(a2, b2, combine2) { if (a2.length == 0) return b2; if (b2.length == 0) return a2; let combined = combine2(a2[a2.length - 1].data, b2[0].data); if (combined == null) return a2.concat(b2); let result = a2.slice(0, a2.length - 1); result.push(new Span(a2[a2.length - 1].length + b2[0].length, combined)); for (let i2 = 1; i2 < b2.length; i2++) result.push(b2[i2]); return result; } static len(spans) { let len = 0; for (let i2 = 0; i2 < spans.length; i2++) len += spans[i2].length; return len; } } Span.none = []; class Change { constructor(fromA, toA, fromB, toB, deleted, inserted) { this.fromA = fromA; this.toA = toA; this.fromB = fromB; this.toB = toB; this.deleted = deleted; this.inserted = inserted; } get lenA() { return this.toA - this.fromA; } get lenB() { return this.toB - this.fromB; } slice(startA, endA, startB, endB) { if (startA == 0 && startB == 0 && endA == this.toA - this.fromA && endB == this.toB - this.fromB) return this; return new Change(this.fromA + startA, this.fromA + endA, this.fromB + startB, this.fromB + endB, Span.slice(this.deleted, startA, endA), Span.slice(this.inserted, startB, endB)); } static merge(x2, y2, combine2) { if (x2.length == 0) return y2; if (y2.length == 0) return x2; let result = []; for (let iX = 0, iY = 0, curX = x2[0], curY = y2[0]; ; ) { if (!curX && !curY) { return result; } else if (curX && (!curY || curX.toB < curY.fromA)) { let off = iY ? y2[iY - 1].toB - y2[iY - 1].toA : 0; result.push(off == 0 ? curX : new Change(curX.fromA, curX.toA, curX.fromB + off, curX.toB + off, curX.deleted, curX.inserted)); curX = iX++ == x2.length ? null : x2[iX]; } else if (curY && (!curX || curY.toA < curX.fromB)) { let off = iX ? x2[iX - 1].toB - x2[iX - 1].toA : 0; result.push(off == 0 ? curY : new Change(curY.fromA - off, curY.toA - off, curY.fromB, curY.toB, curY.deleted, curY.inserted)); curY = iY++ == y2.length ? null : y2[iY]; } else { let pos = Math.min(curX.fromB, curY.fromA); let fromA = Math.min(curX.fromA, curY.fromA - (iX ? x2[iX - 1].toB - x2[iX - 1].toA : 0)), toA = fromA; let fromB = Math.min(curY.fromB, curX.fromB + (iY ? y2[iY - 1].toB - y2[iY - 1].toA : 0)), toB = fromB; let deleted = Span.none, inserted = Span.none; let enteredX = false, enteredY = false; for (; ; ) { let nextX = !curX ? 2e8 : pos >= curX.fromB ? curX.toB : curX.fromB; let nextY = !curY ? 2e8 : pos >= curY.fromA ? curY.toA : curY.fromA; let next2 = Math.min(nextX, nextY); let inX = curX && pos >= curX.fromB, inY = curY && pos >= curY.fromA; if (!inX && !inY) break; if (inX && pos == curX.fromB && !enteredX) { deleted = Span.join(deleted, curX.deleted, combine2); toA += curX.lenA; enteredX = true; } if (inX && !inY) { inserted = Span.join(inserted, Span.slice(curX.inserted, pos - curX.fromB, next2 - curX.fromB), combine2); toB += next2 - pos; } if (inY && pos == curY.fromA && !enteredY) { inserted = Span.join(inserted, curY.inserted, combine2); toB += curY.lenB; enteredY = true; } if (inY && !inX) { deleted = Span.join(deleted, Span.slice(curY.deleted, pos - curY.fromA, next2 - curY.fromA), combine2); toA += next2 - pos; } if (inX && next2 == curX.toB) { curX = iX++ == x2.length ? null : x2[iX]; enteredX = false; } if (inY && next2 == curY.toA) { curY = iY++ == y2.length ? null : y2[iY]; enteredY = false; } pos = next2; } if (fromA < toA || fromB < toB) result.push(new Change(fromA, toA, fromB, toB, deleted, inserted)); } } } } let letter; try { letter = new RegExp("[\\p{Alphabetic}_]", "u"); } catch (_2) { } class ChangeSet { constructor(config, changes) { this.config = config; this.changes = changes; } addSteps(newDoc, maps, data) { let stepChanges = []; for (let i2 = 0; i2 < maps.length; i2++) { let d2 = Array.isArray(data) ? data[i2] : data; let off = 0; maps[i2].forEach((fromA, toA, fromB, toB) => { stepChanges.push(new Change(fromA + off, toA + off, fromB, toB, fromA == toA ? Span.none : [new Span(toA - fromA, d2)], fromB == toB ? Span.none : [new Span(toB - fromB, d2)])); off = toB - fromB - (toA - fromA); }); } if (stepChanges.length == 0) return this; let newChanges = mergeAll(stepChanges, this.config.combine); let changes = Change.merge(this.changes, newChanges, this.config.combine); let updated = changes; for (let i2 = 0; i2 < updated.length; i2++) { let change = updated[i2]; if (change.fromA == change.toA || change.fromB == change.toB || !newChanges.some((r2) => r2.toB > change.fromB && r2.fromB < change.toB)) continue; let diff2 = computeDiff(this.config.doc.content, newDoc.content, change); if (diff2.length == 1 && diff2[0].fromB == 0 && diff2[0].toB == change.toB - change.fromB) continue; if (updated == changes) updated = changes.slice(); if (diff2.length == 1) { updated[i2] = diff2[0]; } else { updated.splice(i2, 1, ...diff2); i2 += diff2.length - 1; } } return new ChangeSet(this.config, updated); } get startDoc() { return this.config.doc; } map(f2) { let mapSpan = (span) => { let newData = f2(span); return newData === span.data ? span : new Span(span.length, newData); }; return new ChangeSet(this.config, this.changes.map((ch2) => { return new Change(ch2.fromA, ch2.toA, ch2.fromB, ch2.toB, ch2.deleted.map(mapSpan), ch2.inserted.map(mapSpan)); })); } changedRange(b2, maps) { if (b2 == this) return null; let touched = maps && touchedRange(maps); let moved = touched ? touched.toB - touched.fromB - (touched.toA - touched.fromA) : 0; function map2(p2) { return !touched || p2 <= touched.fromA ? p2 : p2 + moved; } let from2 = touched ? touched.fromB : 2e8, to = touched ? touched.toB : -2e8; function add(start, end = start) { from2 = Math.min(start, from2); to = Math.max(end, to); } let rA = this.changes, rB = b2.changes; for (let iA = 0, iB = 0; iA < rA.length && iB < rB.length; ) { let rangeA = rA[iA], rangeB = rB[iB]; if (rangeA && rangeB && sameRanges(rangeA, rangeB, map2)) { iA++; iB++; } else if (rangeB && (!rangeA || map2(rangeA.fromB) >= rangeB.fromB)) { add(rangeB.fromB, rangeB.toB); iB++; } else { add(map2(rangeA.fromB), map2(rangeA.toB)); iA++; } } return from2 <= to ? { from: from2, to } : null; } static create(doc2, combine2 = (a2, b2) => a2 === b2 ? a2 : null) { return new ChangeSet({ combine: combine2, doc: doc2 }, []); } } ChangeSet.computeDiff = computeDiff; function mergeAll(ranges, combine2, start = 0, end = ranges.length) { if (end == start + 1) return [ranges[start]]; let mid2 = start + end >> 1; return Change.merge(mergeAll(ranges, combine2, start, mid2), mergeAll(ranges, combine2, mid2, end), combine2); } function endRange(maps) { let from2 = 2e8, to = -2e8; for (let i2 = 0; i2 < maps.length; i2++) { let map2 = maps[i2]; if (from2 != 2e8) { from2 = map2.map(from2, -1); to = map2.map(to, 1); } map2.forEach((_s, _e, start, end) => { from2 = Math.min(from2, start); to = Math.max(to, end); }); } return from2 == 2e8 ? null : { from: from2, to }; } function touchedRange(maps) { let b2 = endRange(maps); if (!b2) return null; let a2 = endRange(maps.map((m2) => m2.invert()).reverse()); return { fromA: a2.from, toA: a2.to, fromB: b2.from, toB: b2.to }; } function sameRanges(a2, b2, map2) { return map2(a2.fromB) == b2.fromB && map2(a2.toB) == b2.toB && sameSpans(a2.deleted, b2.deleted) && sameSpans(a2.inserted, b2.inserted); } function sameSpans(a2, b2) { if (a2.length != b2.length) return false; for (let i2 = 0; i2 < a2.length; i2++) if (a2[i2].length != b2[i2].length || a2[i2].data !== b2[i2].data) return false; return true; } function fragmentText(fragment, unemoji = false) { let text2 = ""; fragment.forEach((node2) => { const emjojiMark = node2.marks.find((mark) => mark.type === node2.type.schema.marks.emoji); if (unemoji && emjojiMark) { return text2 = text2 + (emjojiMark.attrs.emojihint || node2.textContent); } else { return text2 = text2 + node2.textContent; } }); return text2; } const mapFragment = (fragment, map2) => { let mappedFragment = Fragment.from(fragment); fragment.forEach((node2, _offset, index2) => { const mappedNode = map2(node2); if (mappedNode !== null) { mappedFragment = mappedFragment.replaceChild(index2, mappedNode); } node2 = mappedNode || node2; if (node2.content.childCount > 0) { mappedFragment = mappedFragment.replaceChild( index2, node2.type.create(node2.attrs, mapFragment(node2.content, map2)) ); } }); return mappedFragment; }; function sliceContentLength(slice2) { let length2 = 0; for (let i2 = 0; i2 < slice2.content.childCount; i2++) { length2 += slice2.content.child(i2).textContent.length; } return length2; } function sliceHasNode(slice2, predicate) { let hasNode = false; slice2.content.descendants((node2) => { if (predicate(node2)) { hasNode = true; return false; } else { return true; } }); return hasNode; } const mapSlice = (slice2, map2) => { const fragment = mapFragment(slice2.content, map2); return new Slice(fragment, slice2.openStart, slice2.openEnd); }; const kPasteTransaction = "paste"; const kSetMarkdownTransaction = "setMarkdown"; const kNoUpdateTransaction = "noUpdateTransaction"; const kAddToHistoryTransaction = "addToHistory"; const kFixupTransaction = "docFixup"; const kRestoreLocationTransaction = "restoreLocation"; const kNavigationTransaction = "navigationTransaction"; const kInsertCompletionTransaction = "insertCompletion"; const kThemeChangedTransaction = "themeChnaged"; class MarkTransaction { constructor(tr) { __publicField(this, "tr"); this.tr = tr; } get doc() { return this.tr.doc; } get selection() { return this.tr.selection; } addMark(from2, to, mark) { this.tr.addMark(from2, to, mark); return this; } removeMark(from2, to, mark) { this.tr.removeMark(from2, to, mark); return this; } removeStoredMark(mark) { this.tr.removeStoredMark(mark); return this; } insertText(text2, from2) { this.tr.insertText(text2, from2, from2 + text2.length); return this; } } function appendMarkTransactionsPlugin(handlers2) { return new Plugin({ key: new PluginKey("appendMarkTransactions"), appendTransaction: (transactions, oldState, newState) => { if (!transactionsDocChanged(transactions)) { return; } const tr = newState.tr; const markTr = new MarkTransaction(tr); forChangedNodes( oldState, newState, () => true, (node2, pos) => { for (const handler of handlers2) { node2 = tr.doc.nodeAt(pos); if (handler.filter(node2, transactions)) { handler.append(markTr, node2, pos, newState); } } } ); if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) { return tr; } else { return void 0; } } }); } function appendTransactionsPlugin(handlers2) { return new Plugin({ key: new PluginKey("appendTransactions"), appendTransaction: (transactions, oldState, newState) => { if (!transactionsDocChanged(transactions)) { return; } const tr = newState.tr; if (transactionsAreTypingChange(transactions)) { const changeSet = transactionsChangeSet(transactions, oldState, newState); for (const handler of handlers2) { let haveChange = false; if (handler.filter || handler.nodeFilter) { if (handler.filter) { haveChange = handler.filter(transactions, oldState, newState); } if (!haveChange && handler.nodeFilter) { const checkForChange = (node2, pos, parent, index2) => { if (handler.nodeFilter(node2, pos, parent, index2)) { haveChange = true; return false; } else { return true; } }; for (const change of changeSet.changes) { oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange); newState.doc.nodesBetween(change.fromB, change.toB, checkForChange); } } } else { haveChange = true; } if (haveChange) { handler.append(tr, transactions, oldState, newState); } } } else { handlers2.forEach((handler) => handler.append(tr, transactions, oldState, newState)); } if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) { return tr; } else { return void 0; } } }); } function transactionsDocChanged(transactions) { return transactions.some((transaction) => transaction.docChanged); } function transactionsChangeSet(transactions, oldState, newState) { let changeSet = ChangeSet.create(oldState.doc); for (const transaction of transactions) { changeSet = changeSet.addSteps(newState.doc, transaction.mapping.maps, {}); } return changeSet; } function trTransform(tr, f2) { const newActions = new Transform(tr.doc); f2(newActions); for (const step2 of newActions.steps) { tr.step(step2); } return tr; } function transactionsHaveChange(transactions, oldState, newState, predicate) { if (!transactionsDocChanged(transactions)) { return false; } let haveChange = false; const checkForChange = (node2, pos, parent, index2) => { if (predicate(node2, pos, parent, index2)) { haveChange = true; return false; } else { return true; } }; const changeSet = transactionsChangeSet(transactions, oldState, newState); for (const change of changeSet.changes) { oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange); newState.doc.nodesBetween(change.fromB, change.toB, checkForChange); if (haveChange) { break; } } return haveChange; } function forChangedNodes(oldState, newState, predicate, f2) { let complete = false; const handler = (node2, pos) => { if (complete) { return; } if (!predicate || predicate(node2)) { if (f2(node2, pos) === false) { complete = true; } } }; if (!oldState) { newState.doc.descendants(handler); } else if (oldState.doc !== newState.doc) { changedDescendants(oldState.doc, newState.doc, 0, handler); } } function changedDescendants(old, cur, offset, f2) { const oldSize = old.childCount; const curSize = cur.childCount; outer: for (let i2 = 0, j2 = 0; i2 < curSize; i2++) { const child = cur.child(i2); for (let scan = j2, e2 = Math.min(oldSize, i2 + 3); scan < e2; scan++) { if (old.child(scan) === child) { j2 = scan + 1; offset += child.nodeSize; continue outer; } } f2(child, offset); if (j2 < oldSize && old.child(j2).sameMarkup(child)) { changedDescendants(old.child(j2), child, offset + 1, f2); } else { child.nodesBetween(0, child.content.size, f2, offset + 1); } offset += child.nodeSize; } } function isEffectTransaction(tr) { return !tr.docChanged && !tr.selectionSet && !tr.storedMarksSet; } function transactionsAreTypingChange(transactions) { if (transactions.length === 1 && transactions[0].steps.length === 1 && transactions[0].steps[0] instanceof ReplaceStep) { const step2 = transactions[0].steps[0]; if (step2.from === step2.to && sliceContentLength(step2.slice) <= 1) { return true; } if (Math.abs(step2.from - step2.to) === 1 && step2.slice.content.size === 0) { return true; } } return false; } function selectionIsWithin(selection, nodeWithPos) { const from2 = nodeWithPos.pos + 1; const to = from2 + nodeWithPos.node.nodeSize; return selectionIsWithinRange(selection, { from: from2, to }); } function selectionHasRange(selection, range2) { return selection.from === range2.from && selection.to === range2.to; } function selectionIsWithinRange(selection, range2) { return selection.anchor >= range2.from && selection.anchor <= range2.to; } function selectionIsBodyTopLevel(selection) { const { $head } = selection; const parentNode2 = $head.node($head.depth - 1); return parentNode2 && (parentNode2.type === parentNode2.type.schema.nodes.body || selection instanceof GapCursor && parentNode2.type === parentNode2.type.schema.nodes.doc); } function selectionIsImageNode(schema2, selection) { return selection instanceof NodeSelection && [schema2.nodes.image, schema2.nodes.figure].includes(selection.node.type); } function selectionIsEmptyParagraph(schema2, selection) { const { $head } = selection; return $head.parent.type === schema2.nodes.paragraph && $head.parent.childCount === 0; } function selectionWithinLastBodyParagraph(selection) { if (selectionIsBodyTopLevel(selection)) { const editingRoot = editingRootNode(selection); if (editingRoot) { const node2 = selection.$head.node(); return node2 === editingRoot.node.lastChild && node2.type === node2.type.schema.nodes.paragraph; } } return false; } function restoreSelection(view, pos) { const tr = view.state.tr; if (pos < view.state.doc.nodeSize) { setTextSelection_1(pos)(tr); tr.setMeta(kAddToHistoryTransaction, false); tr.setMeta(kRestoreLocationTransaction, true); view.dispatch(tr); } } function insertParagraph(state, dispatch) { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.paragraph)) { return false; } if (dispatch) { const tr = state.tr; tr.replaceSelectionWith(schema2.nodes.paragraph.create()); setTextSelection_1(state.selection.from + 1, 1)(tr); dispatch(tr); } return true; } function isParagraphNode(node2) { if (node2) { const schema2 = node2.type.schema; return node2.type === schema2.nodes.paragraph; } else { return false; } } function insertTrailingP(tr) { const editingNode = editingRootNode(tr.selection); if (editingNode) { trTransform(tr, insertTrailingPTransform(editingNode)); } } function requiresTrailingP(selection) { const editingRoot = editingRootNode(selection); if (editingRoot) { return !isParagraphNode(editingRoot.node.lastChild) || isDisplayMathNode(editingRoot.node.lastChild); } else { return false; } } function insertTrailingPTransform(editingNode) { return (tr) => { const schema2 = editingNode.node.type.schema; tr.insert(editingNode.pos + editingNode.node.nodeSize - 1, schema2.nodes.paragraph.create()); }; } function isDisplayMathNode(node2) { var _a; if (node2 && node2.firstChild) { return node2.childCount === 1 && ((_a = node2.type.schema.marks.math) == null ? void 0 : _a.isInSet(node2.firstChild.marks)); } else { return false; } } class ProsemirrorCommand { constructor(id2, keymap2, execute, omniInsert, keepFocus) { __publicField(this, "id"); __publicField(this, "keymap"); __publicField(this, "execute"); __publicField(this, "omniInsert"); __publicField(this, "keepFocus"); this.id = id2; this.keymap = keymap2; this.execute = execute; this.omniInsert = omniInsert; this.keepFocus = !(keepFocus === false); } isEnabled(state) { return this.execute(state); } isActive(_state) { return false; } plural(_state) { return 1; } } class MarkCommand extends ProsemirrorCommand { constructor(id2, keymap2, markType, attrs = {}) { super(id2, keymap2, toggleMarkType(markType, attrs)); __publicField(this, "markType"); __publicField(this, "attrs"); this.markType = markType; this.attrs = attrs; } isActive(state) { return markIsActive(state, this.markType); } } class NodeCommand extends ProsemirrorCommand { constructor(id2, keymap2, nodeType, attrs, execute, omniInsert) { super(id2, keymap2, execute, omniInsert); __publicField(this, "nodeType"); __publicField(this, "attrs"); this.nodeType = nodeType; this.attrs = attrs; } isActive(state) { return nodeIsActive(state, this.nodeType, this.attrs); } } class BlockCommand extends NodeCommand { constructor(id2, keymap2, blockType, toggleType, attrs = {}, omniInsert) { super(id2, keymap2, blockType, attrs, toggleBlockType(blockType, toggleType, attrs), omniInsert); } } class WrapCommand extends NodeCommand { constructor(id2, keymap2, wrapType, attrs = {}, omniInsert) { super(id2, keymap2, wrapType, attrs, toggleWrap(wrapType, attrs), omniInsert); } } class InsertCharacterCommand extends ProsemirrorCommand { constructor(id2, ch2, keymap2) { super(id2, keymap2, (state, dispatch) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.text)) { return false; } if (dispatch) { const tr = state.tr; tr.replaceSelectionWith(schema2.text(ch2), true).scrollIntoView(); dispatch(tr); } return true; }); } } function toggleMarkType(markType, attrs) { const defaultToggleMark = toggleMark(markType, attrs); return (state, dispatch) => { if (markType !== state.schema.marks.code) { if (markIsActive(state, state.schema.marks.code)) { const codeRange = getMarkRange(state.selection.$anchor, state.schema.marks.code); if (codeRange && selectionIsWithinRange(state.selection, codeRange) && !selectionHasRange(state.selection, codeRange)) { return false; } } } return defaultToggleMark(state, dispatch); }; } function toggleList(listType, itemType, prefs) { return (state, dispatch) => { const { selection } = state; const { $from, $to } = selection; const range2 = $from.blockRange($to); if (!range2) { return false; } const parentList = findParentNode_1(isList)(selection); if (range2.depth >= 1 && parentList && range2.depth - parentList.depth <= 1) { if (isList(parentList.node) && listType.validContent(parentList.node.content)) { if (parentList.node.type !== listType) { if (dispatch) { const tr = state.tr; const attrs = {}; if (parentList.node.attrs.tight) { attrs.tight = true; } tr.setNodeMarkup(parentList.pos, listType, attrs); dispatch(tr); } return true; } else { return liftListItem$1(itemType)(state, dispatch); } } } if (findParentNodeOfType_1(state.schema.nodes.heading)(state.selection)) { return false; } const tight = prefs.listSpacing() === kListSpacingTight; return wrapInList(listType, { tight })(state, dispatch); }; } function toggleBlockType(type2, toggletype, attrs = {}) { return (state, dispatch) => { if (!dispatch) { return type2 === toggletype || setBlockType(type2, { ...attrs })(state, dispatch); } let pandocAttr = {}; if (pandocAttrInSpec(type2.spec)) { const parentNode2 = state.selection.$anchor.node(); if (parentNode2 && pandocAttrAvailable(parentNode2.attrs)) { pandocAttr = pandocAttrFrom(parentNode2.attrs); } } return setBlockType(type2, { ...attrs, ...pandocAttr })(state, dispatch); }; } function toggleWrap(type2, attrs) { return (state, dispatch) => { const isActive = nodeIsActive(state, type2, attrs); if (isActive) { return lift(state, dispatch); } return wrapIn(type2, attrs)(state, dispatch); }; } function insertNode(nodeType, attrs = {}, selectAfter = false) { return (state, dispatch) => { if (!canInsertNode(state, nodeType)) { return false; } if (dispatch) { const tr = state.tr; tr.replaceSelectionWith(nodeType.create(attrs)); if (selectAfter) { if (requiresTrailingP(tr.selection)) { insertTrailingP(tr); setTextSelection_1(tr.selection.to + 1, 1)(tr); } } dispatch(tr); } return true; }; } function exitNode(nodeType, depth, allowKey, filter = () => true) { return (state, dispatch) => { const { $head, $anchor } = state.selection; if ($head.parent.type !== nodeType || !filter($head.parent)) { return false; } if (!$head.sameParent($anchor) || !state.selection.empty) { return !allowKey; } const node2 = findParentNodeOfType_1(nodeType)(state.selection); const endCaptionPos = node2.pos + node2.node.nodeSize - 1; if (state.selection.from !== endCaptionPos) { return !allowKey; } const above = $head.node(depth); const after = $head.indexAfter(depth); const type2 = above.contentMatchAt(after).defaultType; if (!above.canReplaceWith(after, after, type2)) { return !allowKey; } if (dispatch) { const tr = state.tr; const pos = node2.pos + node2.node.nodeSize + (Math.abs(depth) - 1); tr.insert(pos, type2.create()); setTextSelection_1(pos, 1)(tr); dispatch(tr.scrollIntoView()); } return true; }; } function uuidv4() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { const r2 = Math.random() * 16 | 0; const v2 = c === "x" ? r2 : r2 & 3 | 8; return v2.toString(16); }); } function randomAlphanumeric(len, includeLower = true, includeUpper = true) { const pool = "0123456789" + (includeLower ? "abcdefghijklmnopqrstuvwxyz" : "") + (includeUpper ? "ABCDEFGHIJKLMNOPQRSTUVWXYZ" : ""); return " ".repeat(len).replace(/./g, () => { return pool.charAt(Math.floor(Math.random() * pool.length)); }); } function canInsertRmdChunk(state) { const schema2 = state.schema; const within = (nodeType) => !!findParentNodeOfType_1(nodeType)(state.selection); if (within(schema2.nodes.table)) { return false; } if (!selectionIsBodyTopLevel(state.selection) && !within(schema2.nodes.list_item) && !within(schema2.nodes.blockquote) && schema2.nodes.div && !within(schema2.nodes.div)) { return false; } return true; } function insertRmdChunk(chunkPlaceholder) { return (state, dispatch) => { const schema2 = state.schema; if (!(state.selection instanceof GapCursor) && !toggleBlockType(schema2.nodes.rmd_chunk, schema2.nodes.paragraph)(state) && !precedingListItemInsertPos(state.doc, state.selection)) { return false; } if (!canInsertRmdChunk(state)) { return false; } if (dispatch) { const tr = state.tr; const rmdText = schema2.text(chunkPlaceholder); const rmdNode = schema2.nodes.rmd_chunk.create({ navigation_id: uuidv4() }, rmdText); const prevListItemPos = precedingListItemInsertPos(tr.doc, tr.selection); if (prevListItemPos) { precedingListItemInsert(tr, prevListItemPos, rmdNode); } else { const emptyNode = findParentNode_1((node2) => node2.type === state.schema.nodes.paragraph && node2.childCount === 0)(tr.selection); if (emptyNode && selectionWithinLastBodyParagraph(tr.selection)) { tr.insert(tr.selection.from - 1, rmdNode); } else { tr.replaceSelectionWith(rmdNode); } setTextSelection_1(tr.selection.from - 2)(tr); } dispatch(tr); } return true; }; } function rmdChunk(code2) { let lines2 = code2.trimLeft().split("\n"); if (lines2.length > 0) { const meta2 = lines2[0].replace(/^[\s`{]*(.*?)\}?\s*$/, "$1"); const matchLang = meta2.match(/[\w_-]+/); const lang2 = matchLang ? matchLang[0] : ""; const isContainerChunk = ["verbatim", "asis", "comment"].includes(lang2); const delimiter2 = isContainerChunk ? lines2.reduce((ticks, line2) => { const match2 = line2.match(/^```+/); if (match2 && match2[0].length >= ticks.length) { ticks = match2[0] + "`"; } return ticks; }, "```") : "```"; if (!isContainerChunk) { lines2 = lines2.filter((line2, idx) => { if (idx === 0) { return true; } return !line2.startsWith("```"); }); } const chunkCode = lines2.length > 1 ? lines2.slice(1).join("\n") + "\n" : ""; return { lang: lang2, meta: meta2, code: chunkCode, delimiter: delimiter2 }; } else { return null; } } function rmdChunkEngineAndLabel(text2) { const match2 = text2.match(/^\{([a-zA-Z0-9_-]+)[\s,]*([a-zA-Z0-9/._='"-]*)/); if (match2) { const engine = match2[1]; if (match2[2].length && match2[2].indexOf("=") == -1) { return { engine, label: match2[2] }; } for (const line2 of text2.split("\n")) { const labelMatch = line2.match(/^#\|\s*label:\s+(.*)$/); if (labelMatch) { return { engine, label: labelMatch[1] }; } } } return null; } function haveTableCellsWithInlineRcode(doc2) { const schema2 = doc2.type.schema; const haveRCode = !!doc2.type.schema.nodes.rmd_chunk; if (haveRCode) { const isTableCell = (node2) => node2.type === schema2.nodes.table_cell || node2.type === schema2.nodes.table_header; return findChildren_1(doc2, isTableCell).some((cell) => { if (doc2.rangeHasMark(cell.pos, cell.pos + cell.node.nodeSize, schema2.marks.code)) { const markedNodes = findChildrenByMark_1(cell.node, schema2.marks.code, true); return markedNodes.some((markedNode) => { const from2 = cell.pos + 1 + markedNode.pos; const markedRange = getMarkRange(doc2.resolve(from2), schema2.marks.code); if (markedRange) { const text2 = doc2.textBetween(markedRange.from, markedRange.to); return /^r[ #].+$/.test(text2); } else { return false; } }); } else { return false; } }); } else { return false; } } function pandocAutoIdentifier(text2, asciify) { if (asciify) { text2 = pandocAsciify(text2); } return text2.replace(/[!"#$%&')*+,/:;<=>?@[\\\]^`{|}~]/g, "").replace(/\s/g, "-").toLowerCase().replace(/^[^A-Za-z]+/, ""); } function gfmAutoIdentifier(text2, asciify) { if (asciify) { text2 = pandocAsciify(text2); } return text2.replace(/[!"#$%&')*+,./:;<=>?@[\\\]^`{|}~]/g, "").replace(/\s/g, "-").toLowerCase(); } function pandocAsciify(text2) { const chars = []; const len = text2.length; let newch; for (let i2 = 0; i2 < len; i2++) { newch = ""; const ch2 = text2.charCodeAt(i2); switch (ch2) { case 192: case 193: case 194: case 195: case 196: case 197: case 256: case 258: case 260: case 461: case 512: case 514: case 550: case 7680: case 7840: case 7842: newch = "A"; break; case 7682: case 7684: case 7686: newch = "B"; break; case 199: case 262: case 264: case 266: case 268: newch = "C"; break; case 270: case 7690: case 7692: case 7694: case 7696: case 7698: newch = "D"; break; case 200: case 201: case 203: case 274: case 276: case 278: case 280: case 282: case 516: case 518: case 552: case 7704: case 7706: case 7864: case 7866: case 7868: newch = "E"; break; case 7710: newch = "F"; break; case 284: case 286: case 288: case 290: case 486: case 500: case 7712: newch = "G"; break; case 292: case 542: case 7714: case 7716: case 7718: case 7720: case 7722: newch = "H"; break; case 204: case 205: case 206: case 207: case 296: case 298: case 300: case 302: case 304: case 463: case 520: case 522: case 7724: case 7880: case 7882: newch = "I"; break; case 308: newch = "J"; break; case 310: case 488: case 7728: case 7730: case 7732: case 8490: newch = "K"; break; case 313: case 315: case 317: case 7734: case 7738: case 7740: newch = "L"; break; case 7742: case 7744: case 7746: newch = "M"; break; case 209: case 323: case 325: case 327: case 504: case 7748: case 7750: case 7752: case 7754: newch = "N"; break; case 210: case 211: case 212: case 213: case 214: case 332: case 334: case 336: case 416: case 465: case 490: case 524: case 526: case 558: case 7884: case 7886: newch = "O"; break; case 7764: case 7766: newch = "P"; break; case 340: case 342: case 344: case 528: case 530: case 7768: case 7770: case 7774: newch = "R"; break; case 346: case 348: case 350: case 352: case 536: case 7776: case 7778: newch = "S"; break; case 354: case 356: case 538: case 7786: case 7788: case 7790: case 7792: newch = "T"; break; case 217: case 218: case 219: case 220: case 360: case 362: case 364: case 366: case 368: case 370: case 431: case 467: case 532: case 534: case 7794: case 7796: case 7798: case 7908: case 7910: newch = "U"; break; case 7804: case 7806: newch = "V"; break; case 372: case 7808: case 7810: case 7812: case 7814: case 7816: newch = "W"; break; case 7818: case 7820: newch = "X"; break; case 221: case 374: case 376: case 562: case 7822: case 7922: case 7924: case 7926: case 7928: newch = "Y"; break; case 377: case 379: case 381: case 7824: case 7826: case 7828: newch = "Z"; break; case 224: case 225: case 226: case 227: case 228: case 229: case 257: case 259: case 261: case 462: case 513: case 515: case 551: case 553: case 7681: case 7841: case 7843: newch = "a"; break; case 7683: case 7685: case 7687: newch = "b"; break; case 231: case 263: case 265: case 267: case 269: newch = "c"; break; case 271: case 7691: case 7693: case 7695: case 7697: case 7699: newch = "d"; break; case 232: case 233: case 234: case 235: case 275: case 277: case 279: case 281: case 283: case 517: case 519: case 7705: case 7707: case 7865: case 7867: case 7869: newch = "e"; break; case 7711: newch = "f"; break; case 285: case 287: case 289: case 291: case 487: case 501: case 7713: newch = "g"; break; case 293: case 543: case 7715: case 7717: case 7719: case 7721: case 7723: case 7830: newch = "h"; break; case 236: case 237: case 238: case 239: case 297: case 299: case 301: case 303: case 305: case 464: case 521: case 523: case 7725: case 7881: case 7883: newch = "i"; break; case 309: case 496: newch = "j"; break; case 311: case 489: case 7729: case 7731: case 7733: newch = "k"; break; case 314: case 316: case 318: case 7735: case 7739: case 7741: newch = "l"; break; case 7743: case 7745: case 7747: newch = "m"; break; case 241: case 324: case 326: case 328: case 505: case 7749: case 7751: case 7753: case 7755: newch = "n"; break; case 242: case 243: case 244: case 245: case 246: case 333: case 335: case 337: case 417: case 432: case 466: case 491: case 525: case 527: case 559: case 7885: case 7887: newch = "o"; break; case 7765: case 7767: newch = "p"; break; case 341: case 343: case 345: case 529: case 531: case 7769: case 7771: case 7775: newch = "r"; break; case 347: case 349: case 351: case 353: case 537: case 7777: case 7779: newch = "s"; break; case 355: case 357: case 539: case 7787: case 7789: case 7791: case 7793: case 7831: newch = "t"; break; case 249: case 250: case 251: case 252: case 361: case 363: case 365: case 367: case 369: case 371: case 468: case 533: case 535: case 7795: case 7797: case 7799: case 7909: case 7911: newch = "u"; break; case 7805: case 7807: newch = "v"; break; case 373: case 7809: case 7811: case 7813: case 7815: case 7817: case 7832: newch = "w"; break; case 7819: case 7821: newch = "x"; break; case 253: case 255: case 375: case 563: case 7833: case 7923: case 7925: case 7927: case 7929: newch = "y"; break; case 378: case 380: case 382: case 7825: case 7827: case 7829: newch = "z"; break; case 894: newch = ";"; break; case 8175: newch = "`"; break; case 8800: newch = "="; break; case 8814: newch = "<"; break; case 8815: newch = ">"; break; } if (newch) { chars.push(newch.charCodeAt(0)); } else if (ch2 < 128) { chars.push(ch2); } } return String.fromCharCode(...chars); } const kTexFormat = "tex"; const kHTMLFormat = "html"; const kHTML4Format = "html4"; const kHTML5Format = "html5"; function isRawHTMLFormat(format2) { return [kHTMLFormat, kHTML4Format, kHTML5Format].includes(format2); } function editRawBlockCommand(ui2, outputFormats) { return (state, dispatch, view) => { const schema2 = state.schema; const rawBlock = findParentNodeOfType_1(schema2.nodes.raw_block)(state.selection); if (!rawBlock && !setBlockType(schema2.nodes.raw_block, { format: "html" })(state)) { return false; } async function asyncEditRawBlock() { if (dispatch) { const raw = { format: "", content: "" }; if (rawBlock) { raw.format = rawBlock.node.attrs.format; } const result = await ui2.dialogs.editRawBlock(raw, outputFormats); if (result) { const tr = state.tr; if (rawBlock) { const range2 = { from: rawBlock.pos, to: rawBlock.pos + rawBlock.node.nodeSize }; if (result.action === "remove") { tr.setBlockType(range2.from, range2.to, schema2.nodes.paragraph); } else if (result.action === "edit") { tr.setNodeMarkup(range2.from, rawBlock.node.type, { format: result.raw.format }); setTextSelection_1(tr.selection.from - 1, -1)(tr); } } else { insertRawNode(tr, result.raw.format); } dispatch(tr); } } if (view) { view.focus(); } } asyncEditRawBlock(); return true; }; } function createRawNode(schema2, format2) { return schema2.nodes.raw_block.create({ format: format2 }); } function insertRawNode(tr, format2) { const schema2 = tr.doc.type.schema; const prevSel = tr.selection; tr.replaceSelectionWith(createRawNode(schema2, format2), false); setTextSelection_1(tr.mapping.map(prevSel.from), -1)(tr); } function xrefKey(xref, xrefType) { if (xrefType === "quarto") { if (xref.suffix) { return `${xref.type}-${xref.id}${xref.suffix}`; } else { return `${xref.type}-${xref.id}`; } } else { const key2 = /^h\d$/.test(xref.type) ? xref.id : xref.type.length > 0 ? `${xref.type}:${xref.id}` : xref.id; return key2 + xref.suffix; } } function parseQuartoXRef(xref) { const dashPos = xref.indexOf("-"); if (dashPos !== -1) { return { type: xref.substring(0, dashPos), id: xref.substring(dashPos + 1) }; } else { return null; } } function xrefPosition(doc2, xref, xrefType) { if (xrefType === "quarto") { return xrefPositionLocate(doc2, xref, quartoXrefPositionLocators); } else { return xrefPositionLocate(doc2, xref, bookdownXrefPositionLocators); } } function xrefPositionLocate(doc2, xref, locators) { let xrefPos = -1; const xrefInfo = parseBookdownXRef(xref); if (xrefInfo) { const { type: type2, id: id2 } = xrefInfo; const locator = locators[type2]; if (locator) { if (locator.markType) { const schema2 = doc2.type.schema; const markType = schema2.marks[locator.markType]; const markedNodes = findChildrenByMark_1(doc2, markType, true); markedNodes.forEach((markedNode) => { if (xrefPos !== -1) { return; } if (locator.hasXRef(markedNode.node, id2, markType)) { xrefPos = markedNode.pos; } }); } if (xrefPos === -1 && locator.nodeTypes) { doc2.descendants((node2, pos) => { if (xrefPos !== -1) { return false; } if (locator.nodeTypes.includes(node2.type.name) && locator.hasXRef(node2, id2)) { xrefPos = pos; return false; } return true; }); } } } return xrefPos; } function parseBookdownXRef(xref) { const colonPos = xref.indexOf(":"); if (colonPos !== -1) { return { type: xref.substring(0, colonPos), id: xref.substring(colonPos + 1) }; } else { return null; } } const quartoXrefPositionLocators = { sec: quartoHeadingLocator(), fig: quartoFigureLocator(), tbl: quartoTableLocator(), eq: quartoMathLocator(), lst: quartoListingLocator(), thm: quartoDivLocator("thm"), lem: quartoDivLocator("lem"), cor: quartoDivLocator("cor"), prp: quartoDivLocator("prp"), cnj: quartoDivLocator("cnj"), def: quartoDivLocator("def"), exm: quartoDivLocator("exm"), exr: quartoDivLocator("exr") }; function quartoMathLocator() { return { nodeTypes: ["paragraph"], hasXRef: (node2) => { const mathType = node2.type.schema.marks.math; let prevNodeMath = false; for (let i2 = 0; i2 < node2.childCount; i2++) { const childNode = node2.child(i2); if (prevNodeMath) { const text2 = childNode.textContent; if (text2.match(/^\s*\{#eq-.*\}/)) { return true; } } prevNodeMath = !!childNode.marks.find( (mark) => mark.type === mathType && mark.attrs.type === "DisplayMath" ); } return false; } }; } function quartoFigureLocator() { return { nodeTypes: ["figure"], hasXRef: (node2, id2) => { return node2.attrs.id === `fig-${id2}`; } }; } function quartoHeadingLocator() { return { nodeTypes: ["heading"], hasXRef: (node2, id2) => { return node2.attrs.id === `sec-${id2}`; } }; } function quartoTableLocator() { return { nodeTypes: ["table_container"], hasXRef: (node2) => { const captions = findChildrenByType_1(node2, node2.type.schema.nodes.table_caption); if (captions.length) { return !!captions[0].node.textContent.match(/\{#tbl-.*\}/); } return false; } }; } function quartoDivLocator(type2) { return { nodeTypes: ["div"], hasXRef: (node2, id2) => { return node2.attrs.id === `${type2}-${id2}`; } }; } function quartoListingLocator() { return { nodeTypes: ["code_block"], hasXRef: (node2, id2) => { const attrs = node2.attrs; return attrs.id === `lst-${id2}`; } }; } const bookdownXrefPositionLocators = { h1: headingLocator(), h2: headingLocator(), h3: headingLocator(), h4: headingLocator(), h5: headingLocator(), h6: headingLocator(), fig: { nodeTypes: ["rmd_chunk"], hasXRef: (node2, id2) => rmdChunkHasXRef(node2, "r", id2, /^\{.*[ ,].*fig\.cap\s*=.*\}\s*\n/m) }, tab: { nodeTypes: ["rmd_chunk", "table_container"], hasXRef: (node2, id2) => { if (node2.type.name === "rmd_chunk") { return rmdChunkHasXRef(node2, "r", id2, /kable\s*\([\s\S]*caption/); } else if (node2.type.name === "table_container") { const caption = node2.child(1); const match2 = caption.textContent.match(/^\s*\(#tab:([a-zA-Z0-9/-]+)\)\s*(.*)$/); return !!match2 && match2[1].localeCompare(id2, void 0, { sensitivity: "accent" }) === 0; } else { return false; } } }, eq: { nodeTypes: ["raw_block"], markType: "math", hasXRef: (node2, id2, markType) => { if (!markType && node2.attrs.format !== kTexFormat) { return false; } const match2 = node2.textContent.match(/^.*\(\\#eq:([a-zA-Z0-9/-]+)\).*$/m); return !!match2 && match2[1].localeCompare(id2, void 0, { sensitivity: "accent" }) === 0; } }, thm: thereomLocator("theorem"), lem: thereomLocator("lemma"), cor: thereomLocator("corollary"), prp: thereomLocator("proposition"), cnj: thereomLocator("conjecture"), def: thereomLocator("definition"), exr: thereomLocator("exercise") }; function rmdChunkHasXRef(node2, engine, label, pattern) { const chunk = rmdChunkEngineAndLabel(node2.textContent); if (chunk) { return chunk.engine.localeCompare(engine, void 0, { sensitivity: "accent" }) === 0 && chunk.label === label && (!pattern || !!node2.textContent.match(pattern)); } else { return false; } } function headingLocator() { return { nodeTypes: ["heading"], hasXRef: (node2, id2) => { return node2.attrs.id === id2 || pandocAutoIdentifier(node2.textContent, false) === id2; } }; } function thereomLocator(engine) { return { nodeTypes: ["rmd_chunk"], hasXRef: (node2, id2) => { if (rmdChunkHasXRef(node2, engine, id2)) { return true; } else { const match2 = node2.textContent.match(/^\{([a-zA-Z0-9_-]+)[\s,]+label\s*=\s*['"]([^"']+)['"].*\}/); return !!match2 && match2[1].localeCompare(engine, void 0, { sensitivity: "accent" }) === 0 && match2[2] === id2; } } }; } function navigateTo(view, format2, type2, location, animate = true) { switch (type2) { case NavigationType.Pos: return navigateToPos(view, parseInt(location, 10), animate); case NavigationType.Id: return navigateToId(view, location, animate); case NavigationType.Href: return navigateToHref(view, location, animate); case NavigationType.Heading: return navigateToHeading(view, location, animate); case NavigationType.XRef: return navigateToXRef(view, format2, location, animate); default: return null; } } function navigateToId(view, id2, animate = true) { return navigate(view, (node2) => id2 === node2.attrs.navigation_id, animate); } function navigateToHref(view, href, animate = true) { return navigate(view, (node2) => node2.attrs.id === href, animate); } function navigateToHeading(view, heading, animate = true) { return navigate( view, (node2) => { return node2.type === view.state.schema.nodes.heading && node2.textContent.localeCompare(heading, void 0, { sensitivity: "accent" }) === 0; }, animate ); } function navigateToXRef(view, editorFormat, xref, animate = true) { const xrefType = editorFormat.docTypes.includes(kQuartoDocType) ? "quarto" : "bookdown"; const xrefPos = xrefPosition(view.state.doc, xref, xrefType); if (xrefPos !== -1) { return navigateToPos(view, xrefPos, animate); } else { return null; } } function navigateToPos(view, pos, animate = true) { const prevPos = view.state.selection.from; pos = Math.max(pos, 2); const tr = view.state.tr; const pmNode = view.state.doc.nodeAt(pos); if (pmNode == null ? void 0 : pmNode.type.spec.selectable) { tr.setSelection(new NodeSelection(tr.doc.resolve(pos))); } else { setTextSelection_1(pos)(tr); } tr.setMeta(kNavigationTransaction, true); view.dispatch(tr); const node2 = findDomRefAtPos_1(pos, view.domAtPos.bind(view)); if (node2 instanceof HTMLElement) { setTimeout(() => { view.focus(); const $pos = view.state.doc.resolve(pos); const container = editingRootNodeClosestToPos($pos); if (container) { const schema2 = view.state.schema; const containerEl = view.nodeDOM(container.pos); const parentList = findParentNodeOfTypeClosestToPos_1($pos, [schema2.nodes.ordered_list, schema2.nodes.bullet_list]); const parentDiv = schema2.nodes.div ? findParentNodeOfTypeClosestToPos_1($pos, schema2.nodes.div) : void 0; const resultPos = parentList || parentDiv ? $pos.before(2) : pos; const resultNode = view.nodeDOM(resultPos); if (resultNode) { const scrollNode = resultNode instanceof HTMLElement ? resultNode : resultNode.parentElement; if (scrollNode) { const scroller = zenscroll.createScroller(editorScrollContainer(containerEl), 700, 20); if (animate) { scroller.to(scrollNode); } else { scroller.to(scrollNode, 0); } } } } }, 200); return { pos, prevPos }; } else { return null; } } function navigate(view, predicate, animate = true) { const result = findChildren_1(view.state.doc, predicate); if (result.length) { const pos = result[0].pos + 1; return navigateToPos(view, pos, animate); } else { return null; } } const kCodeViewNextLineTransaction = "codeViewNextLine"; class CodeEditorNodeViews { constructor() { __publicField(this, "nodeViews"); this.nodeViews = []; } add(nodeView) { this.nodeViews.push(nodeView); } remove(nodeView) { const index2 = this.nodeViews.indexOf(nodeView); if (index2 >= 0) { this.nodeViews.splice(index2, 1); } } activeNodeView() { return this.nodeViews.find((view) => view.isFocused()); } handleClick(view, event) { const mouseEvent = event; for (const nodeView of this.nodeViews) { let gapCursor2 = null; const pos = nodeView.getPos(); const $pos = view.state.doc.resolve(pos); if ($pos.nodeBefore && $pos.nodeBefore.type.spec.code) { const dom = nodeView.dom; const nodeViewRect = dom.getBoundingClientRect(); const prevNodePos = pos - $pos.nodeBefore.nodeSize; const prevNodeView = this.nodeViews.find((nv) => nv.getPos() === prevNodePos); if (prevNodeView) { const prevNodeRect = prevNodeView.dom.getBoundingClientRect(); const mouseY = mouseEvent.clientY; if (mouseY > prevNodeRect.top + prevNodeRect.height && mouseY < nodeViewRect.top) { gapCursor2 = new GapCursor($pos); } } } else if (!$pos.nodeBefore && $pos.depth === 1 && mouseEvent.clientY < nodeView.dom.getBoundingClientRect().top && Math.abs(mouseEvent.clientX - nodeView.dom.getBoundingClientRect().left) < 150) { gapCursor2 = new GapCursor($pos); } if (gapCursor2) { const tr = view.state.tr; this.nodeViews.forEach((ndView) => ndView.setGapCursorPending(true)); view.focus(); tr.setSelection(gapCursor2); view.dispatch(tr); this.nodeViews.forEach((ndView) => ndView.setGapCursorPending(false)); event.preventDefault(); event.stopImmediatePropagation(); return true; } } return false; } } function scrollCodeViewElementIntoView(ele, codeViewDom, view) { const editingRoot = editingRootNode(view.state.selection); if (editingRoot) { const container = view.nodeDOM(editingRoot.pos); const scroller = zenscroll.createScroller(editorScrollContainer(container)); let top2 = 0; let scrollParent = codeViewDom; while (scrollParent.offsetParent != null && !scrollParent.offsetParent.classList.contains("pm-content")) { top2 += scrollParent.offsetTop; scrollParent = scrollParent.offsetParent; } top2 += ele.offsetTop + scrollParent.offsetTop; const bottom2 = top2 + ele.offsetHeight; const viewTop = container.scrollTop; const viewBottom = container.scrollTop + container.offsetHeight; if (top2 > viewTop && bottom2 < viewBottom) { return; } else if (ele.offsetHeight > container.offsetHeight) { scroller.toY(top2); } else if (top2 < viewTop) { scroller.toY(top2); } else if (bottom2 > viewBottom) { scroller.toY(container.scrollTop - (viewBottom - bottom2)); } } } function codeViewSetBlockSelection(view, context, action) { var _a, _b; const activeIndex = context.blocks.findIndex((block2) => block2.active); if (activeIndex !== -1) { if (action === "nextline") { const tr = view.state.tr; tr.setMeta(kCodeViewNextLineTransaction, true); view.dispatch(tr); } else { let navigatePos; if (action === "nextblock") { navigatePos = (_a = context.blocks[activeIndex + 1]) == null ? void 0 : _a.pos; } else if (action === "prevblock") { navigatePos = (_b = context.blocks[activeIndex - 1]) == null ? void 0 : _b.pos; } if (navigatePos) { navigateToPos(view, navigatePos, false); } } } } function codeViewActiveBlockContext(state) { return codeViewBlockContext(state, false, [state.schema.nodes.rmd_chunk]); } function codeViewBlockContext(state, activeLanguageOnly = false, nodeTypes) { const schema2 = state.schema; nodeTypes = nodeTypes || [schema2.nodes.yaml_metadata, schema2.nodes.rmd_chunk, schema2.nodes.raw_block]; const nodeAsLanguageCodeBlock = (node2, pos2) => { const languageCodeBlock = (language, code2, metaLine) => { return { language, pos: pos2, code: code2 || node2.textContent, metaLine }; }; if (nodeTypes == null ? void 0 : nodeTypes.includes(node2.type)) { if (node2.type === schema2.nodes.yaml_metadata) { return languageCodeBlock("yaml"); } else if (node2.type === schema2.nodes.rmd_chunk) { const parts = rmdChunk(node2.textContent); if (parts) { return languageCodeBlock(parts.lang, parts.code, true); } else { return void 0; } } else if (node2.type === schema2.nodes.raw_block) { return languageCodeBlock(node2.attrs.format); } else { return void 0; } } else { return void 0; } }; const { parent, parentOffset, pos } = state.selection.$from; const { parentOffset: toParentOffset } = state.selection.$to; const activeBlock = nodeAsLanguageCodeBlock(parent, pos - parentOffset); if (activeBlock) { const startIndex = activeBlock.metaLine ? lines(parent.textContent)[0].length + 1 : 0; const positionForOffset = (offset) => { let line2 = 0, character2 = 0; for (let i2 = startIndex; i2 < offset; i2++) { const ch2 = parent.textContent.at(i2); if (!ch2) { break; } if (ch2 === "\n") { line2++; character2 = 0; } else { character2++; } } return Position.create(line2, character2); }; const blocks = []; state.doc.descendants((node2, pos2) => { const languageBlock = nodeAsLanguageCodeBlock(node2, pos2 + 1); if (languageBlock) { if (!activeLanguageOnly || languageBlock.language === activeBlock.language) { blocks.push({ ...languageBlock, active: languageBlock.pos === activeBlock.pos }); } } }); return { activeLanguage: activeBlock.language, blocks, selection: { start: positionForOffset(parentOffset), end: positionForOffset(toParentOffset) }, selectedText: state.doc.textBetween( activeBlock.pos + Math.max(parentOffset, startIndex), activeBlock.pos + toParentOffset ) }; } else { return void 0; } } class InputRule { constructor(match2, handler) { this.match = match2; this.match = match2; this.handler = typeof handler == "string" ? stringHandler(handler) : handler; } } function stringHandler(string) { return function(state, match2, start, end) { let insert2 = string; if (match2[1]) { let offset = match2[0].lastIndexOf(match2[1]); insert2 += match2[0].slice(offset + match2[1].length); start += offset; let cutOff = start - end; if (cutOff > 0) { insert2 = match2[0].slice(offset - cutOff, offset) + insert2; start = end; } } return state.tr.insertText(insert2, start, end); }; } const MAX_MATCH = 500; function inputRules({ rules }) { let plugin2 = new Plugin({ state: { init() { return null; }, apply(tr, prev2) { let stored = tr.getMeta(this); if (stored) return stored; return tr.selectionSet || tr.docChanged ? null : prev2; } }, props: { handleTextInput(view, from2, to, text2) { return run(view, from2, to, text2, rules, plugin2); }, handleDOMEvents: { compositionend: (view) => { setTimeout(() => { let { $cursor } = view.state.selection; if ($cursor) run(view, $cursor.pos, $cursor.pos, "", rules, plugin2); }); } } }, isInputRules: true }); return plugin2; } function run(view, from2, to, text2, rules, plugin2) { if (view.composing) return false; let state = view.state, $from = state.doc.resolve(from2); if ($from.parent.type.spec.code) return false; let textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset, null, "\uFFFC") + text2; for (let i2 = 0; i2 < rules.length; i2++) { let match2 = rules[i2].match.exec(textBefore); let tr = match2 && rules[i2].handler(state, match2, from2 - (match2[0].length - text2.length), to); if (!tr) continue; view.dispatch(tr.setMeta(plugin2, { transform: tr, from: from2, to, text: text2 })); return true; } return false; } const undoInputRule = (state, dispatch) => { let plugins = state.plugins; for (let i2 = 0; i2 < plugins.length; i2++) { let plugin2 = plugins[i2], undoable; if (plugin2.spec.isInputRules && (undoable = plugin2.getState(state))) { if (dispatch) { let tr = state.tr, toUndo = undoable.transform; for (let j2 = toUndo.steps.length - 1; j2 >= 0; j2--) tr.step(toUndo.steps[j2].invert(toUndo.docs[j2])); if (undoable.text) { let marks = tr.doc.resolve(undoable.from).marks(); tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks)); } else { tr.delete(undoable.from, undoable.to); } dispatch(tr); } return true; } } return false; }; new InputRule(/--$/, "\u2014"); new InputRule(/\.\.\.$/, "\u2026"); new InputRule(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/, "\u201C"); new InputRule(/"$/, "\u201D"); new InputRule(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/, "\u2018"); new InputRule(/'$/, "\u2019"); function wrappingInputRule(regexp2, nodeType, getAttrs = null, joinPredicate) { return new InputRule(regexp2, (state, match2, start, end) => { let attrs = getAttrs instanceof Function ? getAttrs(match2) : getAttrs; let tr = state.tr.delete(start, end); let $start = tr.doc.resolve(start), range2 = $start.blockRange(), wrapping = range2 && findWrapping(range2, nodeType, attrs); if (!wrapping) return null; tr.wrap(range2, wrapping); let before = tr.doc.resolve(start - 1).nodeBefore; if (before && before.type == nodeType && canJoin(tr.doc, start - 1) && (!joinPredicate || joinPredicate(match2, before))) tr.join(start - 1); return tr; }); } function textblockTypeInputRule(regexp2, nodeType, getAttrs = null) { return new InputRule(regexp2, (state, match2, start, end) => { let $start = state.doc.resolve(start); let attrs = getAttrs instanceof Function ? getAttrs(match2) : getAttrs; if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType)) return null; return state.tr.delete(start, end).setBlockType(start, start, nodeType, attrs); }); } const prosemirror = ""; var react = { exports: {} }; var react_production_min = {}; /** * @license React * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var l$1 = Symbol.for("react.element"), n$1 = Symbol.for("react.portal"), p$1 = Symbol.for("react.fragment"), q$1 = Symbol.for("react.strict_mode"), r = Symbol.for("react.profiler"), t$4 = Symbol.for("react.provider"), u$1 = Symbol.for("react.context"), v$1 = Symbol.for("react.forward_ref"), w$1 = Symbol.for("react.suspense"), x = Symbol.for("react.memo"), y$1 = Symbol.for("react.lazy"), z$2 = Symbol.iterator; function A$2(a2) { if (null === a2 || "object" !== typeof a2) return null; a2 = z$2 && a2[z$2] || a2["@@iterator"]; return "function" === typeof a2 ? a2 : null; } var B$2 = { isMounted: function() { return false; }, enqueueForceUpdate: function() { }, enqueueReplaceState: function() { }, enqueueSetState: function() { } }, C$2 = Object.assign, D$2 = {}; function E$2(a2, b2, e2) { this.props = a2; this.context = b2; this.refs = D$2; this.updater = e2 || B$2; } E$2.prototype.isReactComponent = {}; E$2.prototype.setState = function(a2, b2) { if ("object" !== typeof a2 && "function" !== typeof a2 && null != a2) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); this.updater.enqueueSetState(this, a2, b2, "setState"); }; E$2.prototype.forceUpdate = function(a2) { this.updater.enqueueForceUpdate(this, a2, "forceUpdate"); }; function F$1() { } F$1.prototype = E$2.prototype; function G$2(a2, b2, e2) { this.props = a2; this.context = b2; this.refs = D$2; this.updater = e2 || B$2; } var H$2 = G$2.prototype = new F$1(); H$2.constructor = G$2; C$2(H$2, E$2.prototype); H$2.isPureReactComponent = true; var I$2 = Array.isArray, J$1 = Object.prototype.hasOwnProperty, K$2 = { current: null }, L$2 = { key: true, ref: true, __self: true, __source: true }; function M$2(a2, b2, e2) { var d2, c = {}, k2 = null, h2 = null; if (null != b2) for (d2 in void 0 !== b2.ref && (h2 = b2.ref), void 0 !== b2.key && (k2 = "" + b2.key), b2) J$1.call(b2, d2) && !L$2.hasOwnProperty(d2) && (c[d2] = b2[d2]); var g2 = arguments.length - 2; if (1 === g2) c.children = e2; else if (1 < g2) { for (var f2 = Array(g2), m2 = 0; m2 < g2; m2++) f2[m2] = arguments[m2 + 2]; c.children = f2; } if (a2 && a2.defaultProps) for (d2 in g2 = a2.defaultProps, g2) void 0 === c[d2] && (c[d2] = g2[d2]); return { $$typeof: l$1, type: a2, key: k2, ref: h2, props: c, _owner: K$2.current }; } function N$2(a2, b2) { return { $$typeof: l$1, type: a2.type, key: b2, ref: a2.ref, props: a2.props, _owner: a2._owner }; } function O$2(a2) { return "object" === typeof a2 && null !== a2 && a2.$$typeof === l$1; } function escape(a2) { var b2 = { "=": "=0", ":": "=2" }; return "$" + a2.replace(/[=:]/g, function(a3) { return b2[a3]; }); } var P$2 = /\/+/g; function Q$2(a2, b2) { return "object" === typeof a2 && null !== a2 && null != a2.key ? escape("" + a2.key) : b2.toString(36); } function R$2(a2, b2, e2, d2, c) { var k2 = typeof a2; if ("undefined" === k2 || "boolean" === k2) a2 = null; var h2 = false; if (null === a2) h2 = true; else switch (k2) { case "string": case "number": h2 = true; break; case "object": switch (a2.$$typeof) { case l$1: case n$1: h2 = true; } } if (h2) return h2 = a2, c = c(h2), a2 = "" === d2 ? "." + Q$2(h2, 0) : d2, I$2(c) ? (e2 = "", null != a2 && (e2 = a2.replace(P$2, "$&/") + "/"), R$2(c, b2, e2, "", function(a3) { return a3; })) : null != c && (O$2(c) && (c = N$2(c, e2 + (!c.key || h2 && h2.key === c.key ? "" : ("" + c.key).replace(P$2, "$&/") + "/") + a2)), b2.push(c)), 1; h2 = 0; d2 = "" === d2 ? "." : d2 + ":"; if (I$2(a2)) for (var g2 = 0; g2 < a2.length; g2++) { k2 = a2[g2]; var f2 = d2 + Q$2(k2, g2); h2 += R$2(k2, b2, e2, f2, c); } else if (f2 = A$2(a2), "function" === typeof f2) for (a2 = f2.call(a2), g2 = 0; !(k2 = a2.next()).done; ) k2 = k2.value, f2 = d2 + Q$2(k2, g2++), h2 += R$2(k2, b2, e2, f2, c); else if ("object" === k2) throw b2 = String(a2), Error("Objects are not valid as a React child (found: " + ("[object Object]" === b2 ? "object with keys {" + Object.keys(a2).join(", ") + "}" : b2) + "). If you meant to render a collection of children, use an array instead."); return h2; } function S$2(a2, b2, e2) { if (null == a2) return a2; var d2 = [], c = 0; R$2(a2, d2, "", "", function(a3) { return b2.call(e2, a3, c++); }); return d2; } function T$2(a2) { if (-1 === a2._status) { var b2 = a2._result; b2 = b2(); b2.then(function(b3) { if (0 === a2._status || -1 === a2._status) a2._status = 1, a2._result = b3; }, function(b3) { if (0 === a2._status || -1 === a2._status) a2._status = 2, a2._result = b3; }); -1 === a2._status && (a2._status = 0, a2._result = b2); } if (1 === a2._status) return a2._result.default; throw a2._result; } var U$2 = { current: null }, V$2 = { transition: null }, W$2 = { ReactCurrentDispatcher: U$2, ReactCurrentBatchConfig: V$2, ReactCurrentOwner: K$2 }; react_production_min.Children = { map: S$2, forEach: function(a2, b2, e2) { S$2(a2, function() { b2.apply(this, arguments); }, e2); }, count: function(a2) { var b2 = 0; S$2(a2, function() { b2++; }); return b2; }, toArray: function(a2) { return S$2(a2, function(a3) { return a3; }) || []; }, only: function(a2) { if (!O$2(a2)) throw Error("React.Children.only expected to receive a single React element child."); return a2; } }; react_production_min.Component = E$2; react_production_min.Fragment = p$1; react_production_min.Profiler = r; react_production_min.PureComponent = G$2; react_production_min.StrictMode = q$1; react_production_min.Suspense = w$1; react_production_min.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = W$2; react_production_min.cloneElement = function(a2, b2, e2) { if (null === a2 || void 0 === a2) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + a2 + "."); var d2 = C$2({}, a2.props), c = a2.key, k2 = a2.ref, h2 = a2._owner; if (null != b2) { void 0 !== b2.ref && (k2 = b2.ref, h2 = K$2.current); void 0 !== b2.key && (c = "" + b2.key); if (a2.type && a2.type.defaultProps) var g2 = a2.type.defaultProps; for (f2 in b2) J$1.call(b2, f2) && !L$2.hasOwnProperty(f2) && (d2[f2] = void 0 === b2[f2] && void 0 !== g2 ? g2[f2] : b2[f2]); } var f2 = arguments.length - 2; if (1 === f2) d2.children = e2; else if (1 < f2) { g2 = Array(f2); for (var m2 = 0; m2 < f2; m2++) g2[m2] = arguments[m2 + 2]; d2.children = g2; } return { $$typeof: l$1, type: a2.type, key: c, ref: k2, props: d2, _owner: h2 }; }; react_production_min.createContext = function(a2) { a2 = { $$typeof: u$1, _currentValue: a2, _currentValue2: a2, _threadCount: 0, Provider: null, Consumer: null, _defaultValue: null, _globalName: null }; a2.Provider = { $$typeof: t$4, _context: a2 }; return a2.Consumer = a2; }; react_production_min.createElement = M$2; react_production_min.createFactory = function(a2) { var b2 = M$2.bind(null, a2); b2.type = a2; return b2; }; react_production_min.createRef = function() { return { current: null }; }; react_production_min.forwardRef = function(a2) { return { $$typeof: v$1, render: a2 }; }; react_production_min.isValidElement = O$2; react_production_min.lazy = function(a2) { return { $$typeof: y$1, _payload: { _status: -1, _result: a2 }, _init: T$2 }; }; react_production_min.memo = function(a2, b2) { return { $$typeof: x, type: a2, compare: void 0 === b2 ? null : b2 }; }; react_production_min.startTransition = function(a2) { var b2 = V$2.transition; V$2.transition = {}; try { a2(); } finally { V$2.transition = b2; } }; react_production_min.unstable_act = function() { throw Error("act(...) is not supported in production builds of React."); }; react_production_min.useCallback = function(a2, b2) { return U$2.current.useCallback(a2, b2); }; react_production_min.useContext = function(a2) { return U$2.current.useContext(a2); }; react_production_min.useDebugValue = function() { }; react_production_min.useDeferredValue = function(a2) { return U$2.current.useDeferredValue(a2); }; react_production_min.useEffect = function(a2, b2) { return U$2.current.useEffect(a2, b2); }; react_production_min.useId = function() { return U$2.current.useId(); }; react_production_min.useImperativeHandle = function(a2, b2, e2) { return U$2.current.useImperativeHandle(a2, b2, e2); }; react_production_min.useInsertionEffect = function(a2, b2) { return U$2.current.useInsertionEffect(a2, b2); }; react_production_min.useLayoutEffect = function(a2, b2) { return U$2.current.useLayoutEffect(a2, b2); }; react_production_min.useMemo = function(a2, b2) { return U$2.current.useMemo(a2, b2); }; react_production_min.useReducer = function(a2, b2, e2) { return U$2.current.useReducer(a2, b2, e2); }; react_production_min.useRef = function(a2) { return U$2.current.useRef(a2); }; react_production_min.useState = function(a2) { return U$2.current.useState(a2); }; react_production_min.useSyncExternalStore = function(a2, b2, e2) { return U$2.current.useSyncExternalStore(a2, b2, e2); }; react_production_min.useTransition = function() { return U$2.current.useTransition(); }; react_production_min.version = "18.2.0"; (function(module3) { { module3.exports = react_production_min; } })(react); const React = /* @__PURE__ */ getDefaultExportFromCjs(react.exports); const React$1 = /* @__PURE__ */ _mergeNamespaces({ __proto__: null, default: React }, [react.exports]); var reactDom = { exports: {} }; var reactDom_production_min = {}; var scheduler = { exports: {} }; var scheduler_production_min = {}; /** * @license React * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ (function(exports2) { function f2(a2, b2) { var c = a2.length; a2.push(b2); a: for (; 0 < c; ) { var d2 = c - 1 >>> 1, e2 = a2[d2]; if (0 < g2(e2, b2)) a2[d2] = b2, a2[c] = e2, c = d2; else break a; } } function h2(a2) { return 0 === a2.length ? null : a2[0]; } function k2(a2) { if (0 === a2.length) return null; var b2 = a2[0], c = a2.pop(); if (c !== b2) { a2[0] = c; a: for (var d2 = 0, e2 = a2.length, w2 = e2 >>> 1; d2 < w2; ) { var m2 = 2 * (d2 + 1) - 1, C2 = a2[m2], n2 = m2 + 1, x2 = a2[n2]; if (0 > g2(C2, c)) n2 < e2 && 0 > g2(x2, C2) ? (a2[d2] = x2, a2[n2] = c, d2 = n2) : (a2[d2] = C2, a2[m2] = c, d2 = m2); else if (n2 < e2 && 0 > g2(x2, c)) a2[d2] = x2, a2[n2] = c, d2 = n2; else break a; } } return b2; } function g2(a2, b2) { var c = a2.sortIndex - b2.sortIndex; return 0 !== c ? c : a2.id - b2.id; } if ("object" === typeof performance && "function" === typeof performance.now) { var l2 = performance; exports2.unstable_now = function() { return l2.now(); }; } else { var p2 = Date, q2 = p2.now(); exports2.unstable_now = function() { return p2.now() - q2; }; } var r2 = [], t2 = [], u2 = 1, v2 = null, y2 = 3, z2 = false, A2 = false, B2 = false, D2 = "function" === typeof setTimeout ? setTimeout : null, E2 = "function" === typeof clearTimeout ? clearTimeout : null, F2 = "undefined" !== typeof setImmediate ? setImmediate : null; "undefined" !== typeof navigator && void 0 !== navigator.scheduling && void 0 !== navigator.scheduling.isInputPending && navigator.scheduling.isInputPending.bind(navigator.scheduling); function G2(a2) { for (var b2 = h2(t2); null !== b2; ) { if (null === b2.callback) k2(t2); else if (b2.startTime <= a2) k2(t2), b2.sortIndex = b2.expirationTime, f2(r2, b2); else break; b2 = h2(t2); } } function H2(a2) { B2 = false; G2(a2); if (!A2) if (null !== h2(r2)) A2 = true, I2(J2); else { var b2 = h2(t2); null !== b2 && K2(H2, b2.startTime - a2); } } function J2(a2, b2) { A2 = false; B2 && (B2 = false, E2(L2), L2 = -1); z2 = true; var c = y2; try { G2(b2); for (v2 = h2(r2); null !== v2 && (!(v2.expirationTime > b2) || a2 && !M2()); ) { var d2 = v2.callback; if ("function" === typeof d2) { v2.callback = null; y2 = v2.priorityLevel; var e2 = d2(v2.expirationTime <= b2); b2 = exports2.unstable_now(); "function" === typeof e2 ? v2.callback = e2 : v2 === h2(r2) && k2(r2); G2(b2); } else k2(r2); v2 = h2(r2); } if (null !== v2) var w2 = true; else { var m2 = h2(t2); null !== m2 && K2(H2, m2.startTime - b2); w2 = false; } return w2; } finally { v2 = null, y2 = c, z2 = false; } } var N2 = false, O2 = null, L2 = -1, P2 = 5, Q2 = -1; function M2() { return exports2.unstable_now() - Q2 < P2 ? false : true; } function R2() { if (null !== O2) { var a2 = exports2.unstable_now(); Q2 = a2; var b2 = true; try { b2 = O2(true, a2); } finally { b2 ? S2() : (N2 = false, O2 = null); } } else N2 = false; } var S2; if ("function" === typeof F2) S2 = function() { F2(R2); }; else if ("undefined" !== typeof MessageChannel) { var T2 = new MessageChannel(), U2 = T2.port2; T2.port1.onmessage = R2; S2 = function() { U2.postMessage(null); }; } else S2 = function() { D2(R2, 0); }; function I2(a2) { O2 = a2; N2 || (N2 = true, S2()); } function K2(a2, b2) { L2 = D2(function() { a2(exports2.unstable_now()); }, b2); } exports2.unstable_IdlePriority = 5; exports2.unstable_ImmediatePriority = 1; exports2.unstable_LowPriority = 4; exports2.unstable_NormalPriority = 3; exports2.unstable_Profiling = null; exports2.unstable_UserBlockingPriority = 2; exports2.unstable_cancelCallback = function(a2) { a2.callback = null; }; exports2.unstable_continueExecution = function() { A2 || z2 || (A2 = true, I2(J2)); }; exports2.unstable_forceFrameRate = function(a2) { 0 > a2 || 125 < a2 ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : P2 = 0 < a2 ? Math.floor(1e3 / a2) : 5; }; exports2.unstable_getCurrentPriorityLevel = function() { return y2; }; exports2.unstable_getFirstCallbackNode = function() { return h2(r2); }; exports2.unstable_next = function(a2) { switch (y2) { case 1: case 2: case 3: var b2 = 3; break; default: b2 = y2; } var c = y2; y2 = b2; try { return a2(); } finally { y2 = c; } }; exports2.unstable_pauseExecution = function() { }; exports2.unstable_requestPaint = function() { }; exports2.unstable_runWithPriority = function(a2, b2) { switch (a2) { case 1: case 2: case 3: case 4: case 5: break; default: a2 = 3; } var c = y2; y2 = a2; try { return b2(); } finally { y2 = c; } }; exports2.unstable_scheduleCallback = function(a2, b2, c) { var d2 = exports2.unstable_now(); "object" === typeof c && null !== c ? (c = c.delay, c = "number" === typeof c && 0 < c ? d2 + c : d2) : c = d2; switch (a2) { case 1: var e2 = -1; break; case 2: e2 = 250; break; case 5: e2 = 1073741823; break; case 4: e2 = 1e4; break; default: e2 = 5e3; } e2 = c + e2; a2 = { id: u2++, callback: b2, priorityLevel: a2, startTime: c, expirationTime: e2, sortIndex: -1 }; c > d2 ? (a2.sortIndex = c, f2(t2, a2), null === h2(r2) && a2 === h2(t2) && (B2 ? (E2(L2), L2 = -1) : B2 = true, K2(H2, c - d2))) : (a2.sortIndex = e2, f2(r2, a2), A2 || z2 || (A2 = true, I2(J2))); return a2; }; exports2.unstable_shouldYield = M2; exports2.unstable_wrapCallback = function(a2) { var b2 = y2; return function() { var c = y2; y2 = b2; try { return a2.apply(this, arguments); } finally { y2 = c; } }; }; })(scheduler_production_min); (function(module3) { { module3.exports = scheduler_production_min; } })(scheduler); /** * @license React * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var aa = react.exports, ca = scheduler.exports; function p(a2) { for (var b2 = "https://reactjs.org/docs/error-decoder.html?invariant=" + a2, c = 1; c < arguments.length; c++) b2 += "&args[]=" + encodeURIComponent(arguments[c]); return "Minified React error #" + a2 + "; visit " + b2 + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."; } var da = /* @__PURE__ */ new Set(), ea = {}; function fa(a2, b2) { ha(a2, b2); ha(a2 + "Capture", b2); } function ha(a2, b2) { ea[a2] = b2; for (a2 = 0; a2 < b2.length; a2++) da.add(b2[a2]); } var ia = !("undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement), ja = Object.prototype.hasOwnProperty, ka = /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, la = {}, ma = {}; function oa(a2) { if (ja.call(ma, a2)) return true; if (ja.call(la, a2)) return false; if (ka.test(a2)) return ma[a2] = true; la[a2] = true; return false; } function pa(a2, b2, c, d2) { if (null !== c && 0 === c.type) return false; switch (typeof b2) { case "function": case "symbol": return true; case "boolean": if (d2) return false; if (null !== c) return !c.acceptsBooleans; a2 = a2.toLowerCase().slice(0, 5); return "data-" !== a2 && "aria-" !== a2; default: return false; } } function qa(a2, b2, c, d2) { if (null === b2 || "undefined" === typeof b2 || pa(a2, b2, c, d2)) return true; if (d2) return false; if (null !== c) switch (c.type) { case 3: return !b2; case 4: return false === b2; case 5: return isNaN(b2); case 6: return isNaN(b2) || 1 > b2; } return false; } function v(a2, b2, c, d2, e2, f2, g2) { this.acceptsBooleans = 2 === b2 || 3 === b2 || 4 === b2; this.attributeName = d2; this.attributeNamespace = e2; this.mustUseProperty = c; this.propertyName = a2; this.type = b2; this.sanitizeURL = f2; this.removeEmptyString = g2; } var z$1 = {}; "children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a2) { z$1[a2] = new v(a2, 0, false, a2, null, false, false); }); [["acceptCharset", "accept-charset"], ["className", "class"], ["htmlFor", "for"], ["httpEquiv", "http-equiv"]].forEach(function(a2) { var b2 = a2[0]; z$1[b2] = new v(b2, 1, false, a2[1], null, false, false); }); ["contentEditable", "draggable", "spellCheck", "value"].forEach(function(a2) { z$1[a2] = new v(a2, 2, false, a2.toLowerCase(), null, false, false); }); ["autoReverse", "externalResourcesRequired", "focusable", "preserveAlpha"].forEach(function(a2) { z$1[a2] = new v(a2, 2, false, a2, null, false, false); }); "allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a2) { z$1[a2] = new v(a2, 3, false, a2.toLowerCase(), null, false, false); }); ["checked", "multiple", "muted", "selected"].forEach(function(a2) { z$1[a2] = new v(a2, 3, true, a2, null, false, false); }); ["capture", "download"].forEach(function(a2) { z$1[a2] = new v(a2, 4, false, a2, null, false, false); }); ["cols", "rows", "size", "span"].forEach(function(a2) { z$1[a2] = new v(a2, 6, false, a2, null, false, false); }); ["rowSpan", "start"].forEach(function(a2) { z$1[a2] = new v(a2, 5, false, a2.toLowerCase(), null, false, false); }); var ra = /[\-:]([a-z])/g; function sa(a2) { return a2[1].toUpperCase(); } "accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a2) { var b2 = a2.replace( ra, sa ); z$1[b2] = new v(b2, 1, false, a2, null, false, false); }); "xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a2) { var b2 = a2.replace(ra, sa); z$1[b2] = new v(b2, 1, false, a2, "http://www.w3.org/1999/xlink", false, false); }); ["xml:base", "xml:lang", "xml:space"].forEach(function(a2) { var b2 = a2.replace(ra, sa); z$1[b2] = new v(b2, 1, false, a2, "http://www.w3.org/XML/1998/namespace", false, false); }); ["tabIndex", "crossOrigin"].forEach(function(a2) { z$1[a2] = new v(a2, 1, false, a2.toLowerCase(), null, false, false); }); z$1.xlinkHref = new v("xlinkHref", 1, false, "xlink:href", "http://www.w3.org/1999/xlink", true, false); ["src", "href", "action", "formAction"].forEach(function(a2) { z$1[a2] = new v(a2, 1, false, a2.toLowerCase(), null, true, true); }); function ta(a2, b2, c, d2) { var e2 = z$1.hasOwnProperty(b2) ? z$1[b2] : null; if (null !== e2 ? 0 !== e2.type : d2 || !(2 < b2.length) || "o" !== b2[0] && "O" !== b2[0] || "n" !== b2[1] && "N" !== b2[1]) qa(b2, c, e2, d2) && (c = null), d2 || null === e2 ? oa(b2) && (null === c ? a2.removeAttribute(b2) : a2.setAttribute(b2, "" + c)) : e2.mustUseProperty ? a2[e2.propertyName] = null === c ? 3 === e2.type ? false : "" : c : (b2 = e2.attributeName, d2 = e2.attributeNamespace, null === c ? a2.removeAttribute(b2) : (e2 = e2.type, c = 3 === e2 || 4 === e2 && true === c ? "" : "" + c, d2 ? a2.setAttributeNS(d2, b2, c) : a2.setAttribute(b2, c))); } var ua = aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, va = Symbol.for("react.element"), wa = Symbol.for("react.portal"), ya = Symbol.for("react.fragment"), za = Symbol.for("react.strict_mode"), Aa = Symbol.for("react.profiler"), Ba = Symbol.for("react.provider"), Ca = Symbol.for("react.context"), Da = Symbol.for("react.forward_ref"), Ea = Symbol.for("react.suspense"), Fa = Symbol.for("react.suspense_list"), Ga = Symbol.for("react.memo"), Ha = Symbol.for("react.lazy"); var Ia = Symbol.for("react.offscreen"); var Ja = Symbol.iterator; function Ka(a2) { if (null === a2 || "object" !== typeof a2) return null; a2 = Ja && a2[Ja] || a2["@@iterator"]; return "function" === typeof a2 ? a2 : null; } var A$1 = Object.assign, La; function Ma(a2) { if (void 0 === La) try { throw Error(); } catch (c) { var b2 = c.stack.trim().match(/\n( *(at )?)/); La = b2 && b2[1] || ""; } return "\n" + La + a2; } var Na = false; function Oa(a2, b2) { if (!a2 || Na) return ""; Na = true; var c = Error.prepareStackTrace; Error.prepareStackTrace = void 0; try { if (b2) if (b2 = function() { throw Error(); }, Object.defineProperty(b2.prototype, "props", { set: function() { throw Error(); } }), "object" === typeof Reflect && Reflect.construct) { try { Reflect.construct(b2, []); } catch (l2) { var d2 = l2; } Reflect.construct(a2, [], b2); } else { try { b2.call(); } catch (l2) { d2 = l2; } a2.call(b2.prototype); } else { try { throw Error(); } catch (l2) { d2 = l2; } a2(); } } catch (l2) { if (l2 && d2 && "string" === typeof l2.stack) { for (var e2 = l2.stack.split("\n"), f2 = d2.stack.split("\n"), g2 = e2.length - 1, h2 = f2.length - 1; 1 <= g2 && 0 <= h2 && e2[g2] !== f2[h2]; ) h2--; for (; 1 <= g2 && 0 <= h2; g2--, h2--) if (e2[g2] !== f2[h2]) { if (1 !== g2 || 1 !== h2) { do if (g2--, h2--, 0 > h2 || e2[g2] !== f2[h2]) { var k2 = "\n" + e2[g2].replace(" at new ", " at "); a2.displayName && k2.includes("<anonymous>") && (k2 = k2.replace("<anonymous>", a2.displayName)); return k2; } while (1 <= g2 && 0 <= h2); } break; } } } finally { Na = false, Error.prepareStackTrace = c; } return (a2 = a2 ? a2.displayName || a2.name : "") ? Ma(a2) : ""; } function Pa(a2) { switch (a2.tag) { case 5: return Ma(a2.type); case 16: return Ma("Lazy"); case 13: return Ma("Suspense"); case 19: return Ma("SuspenseList"); case 0: case 2: case 15: return a2 = Oa(a2.type, false), a2; case 11: return a2 = Oa(a2.type.render, false), a2; case 1: return a2 = Oa(a2.type, true), a2; default: return ""; } } function Qa(a2) { if (null == a2) return null; if ("function" === typeof a2) return a2.displayName || a2.name || null; if ("string" === typeof a2) return a2; switch (a2) { case ya: return "Fragment"; case wa: return "Portal"; case Aa: return "Profiler"; case za: return "StrictMode"; case Ea: return "Suspense"; case Fa: return "SuspenseList"; } if ("object" === typeof a2) switch (a2.$$typeof) { case Ca: return (a2.displayName || "Context") + ".Consumer"; case Ba: return (a2._context.displayName || "Context") + ".Provider"; case Da: var b2 = a2.render; a2 = a2.displayName; a2 || (a2 = b2.displayName || b2.name || "", a2 = "" !== a2 ? "ForwardRef(" + a2 + ")" : "ForwardRef"); return a2; case Ga: return b2 = a2.displayName || null, null !== b2 ? b2 : Qa(a2.type) || "Memo"; case Ha: b2 = a2._payload; a2 = a2._init; try { return Qa(a2(b2)); } catch (c) { } } return null; } function Ra(a2) { var b2 = a2.type; switch (a2.tag) { case 24: return "Cache"; case 9: return (b2.displayName || "Context") + ".Consumer"; case 10: return (b2._context.displayName || "Context") + ".Provider"; case 18: return "DehydratedFragment"; case 11: return a2 = b2.render, a2 = a2.displayName || a2.name || "", b2.displayName || ("" !== a2 ? "ForwardRef(" + a2 + ")" : "ForwardRef"); case 7: return "Fragment"; case 5: return b2; case 4: return "Portal"; case 3: return "Root"; case 6: return "Text"; case 16: return Qa(b2); case 8: return b2 === za ? "StrictMode" : "Mode"; case 22: return "Offscreen"; case 12: return "Profiler"; case 21: return "Scope"; case 13: return "Suspense"; case 19: return "SuspenseList"; case 25: return "TracingMarker"; case 1: case 0: case 17: case 2: case 14: case 15: if ("function" === typeof b2) return b2.displayName || b2.name || null; if ("string" === typeof b2) return b2; } return null; } function Sa(a2) { switch (typeof a2) { case "boolean": case "number": case "string": case "undefined": return a2; case "object": return a2; default: return ""; } } function Ta(a2) { var b2 = a2.type; return (a2 = a2.nodeName) && "input" === a2.toLowerCase() && ("checkbox" === b2 || "radio" === b2); } function Ua(a2) { var b2 = Ta(a2) ? "checked" : "value", c = Object.getOwnPropertyDescriptor(a2.constructor.prototype, b2), d2 = "" + a2[b2]; if (!a2.hasOwnProperty(b2) && "undefined" !== typeof c && "function" === typeof c.get && "function" === typeof c.set) { var e2 = c.get, f2 = c.set; Object.defineProperty(a2, b2, { configurable: true, get: function() { return e2.call(this); }, set: function(a3) { d2 = "" + a3; f2.call(this, a3); } }); Object.defineProperty(a2, b2, { enumerable: c.enumerable }); return { getValue: function() { return d2; }, setValue: function(a3) { d2 = "" + a3; }, stopTracking: function() { a2._valueTracker = null; delete a2[b2]; } }; } } function Va(a2) { a2._valueTracker || (a2._valueTracker = Ua(a2)); } function Wa(a2) { if (!a2) return false; var b2 = a2._valueTracker; if (!b2) return true; var c = b2.getValue(); var d2 = ""; a2 && (d2 = Ta(a2) ? a2.checked ? "true" : "false" : a2.value); a2 = d2; return a2 !== c ? (b2.setValue(a2), true) : false; } function Xa(a2) { a2 = a2 || ("undefined" !== typeof document ? document : void 0); if ("undefined" === typeof a2) return null; try { return a2.activeElement || a2.body; } catch (b2) { return a2.body; } } function Ya(a2, b2) { var c = b2.checked; return A$1({}, b2, { defaultChecked: void 0, defaultValue: void 0, value: void 0, checked: null != c ? c : a2._wrapperState.initialChecked }); } function Za(a2, b2) { var c = null == b2.defaultValue ? "" : b2.defaultValue, d2 = null != b2.checked ? b2.checked : b2.defaultChecked; c = Sa(null != b2.value ? b2.value : c); a2._wrapperState = { initialChecked: d2, initialValue: c, controlled: "checkbox" === b2.type || "radio" === b2.type ? null != b2.checked : null != b2.value }; } function ab(a2, b2) { b2 = b2.checked; null != b2 && ta(a2, "checked", b2, false); } function bb(a2, b2) { ab(a2, b2); var c = Sa(b2.value), d2 = b2.type; if (null != c) if ("number" === d2) { if (0 === c && "" === a2.value || a2.value != c) a2.value = "" + c; } else a2.value !== "" + c && (a2.value = "" + c); else if ("submit" === d2 || "reset" === d2) { a2.removeAttribute("value"); return; } b2.hasOwnProperty("value") ? cb(a2, b2.type, c) : b2.hasOwnProperty("defaultValue") && cb(a2, b2.type, Sa(b2.defaultValue)); null == b2.checked && null != b2.defaultChecked && (a2.defaultChecked = !!b2.defaultChecked); } function db(a2, b2, c) { if (b2.hasOwnProperty("value") || b2.hasOwnProperty("defaultValue")) { var d2 = b2.type; if (!("submit" !== d2 && "reset" !== d2 || void 0 !== b2.value && null !== b2.value)) return; b2 = "" + a2._wrapperState.initialValue; c || b2 === a2.value || (a2.value = b2); a2.defaultValue = b2; } c = a2.name; "" !== c && (a2.name = ""); a2.defaultChecked = !!a2._wrapperState.initialChecked; "" !== c && (a2.name = c); } function cb(a2, b2, c) { if ("number" !== b2 || Xa(a2.ownerDocument) !== a2) null == c ? a2.defaultValue = "" + a2._wrapperState.initialValue : a2.defaultValue !== "" + c && (a2.defaultValue = "" + c); } var eb = Array.isArray; function fb(a2, b2, c, d2) { a2 = a2.options; if (b2) { b2 = {}; for (var e2 = 0; e2 < c.length; e2++) b2["$" + c[e2]] = true; for (c = 0; c < a2.length; c++) e2 = b2.hasOwnProperty("$" + a2[c].value), a2[c].selected !== e2 && (a2[c].selected = e2), e2 && d2 && (a2[c].defaultSelected = true); } else { c = "" + Sa(c); b2 = null; for (e2 = 0; e2 < a2.length; e2++) { if (a2[e2].value === c) { a2[e2].selected = true; d2 && (a2[e2].defaultSelected = true); return; } null !== b2 || a2[e2].disabled || (b2 = a2[e2]); } null !== b2 && (b2.selected = true); } } function gb(a2, b2) { if (null != b2.dangerouslySetInnerHTML) throw Error(p(91)); return A$1({}, b2, { value: void 0, defaultValue: void 0, children: "" + a2._wrapperState.initialValue }); } function hb(a2, b2) { var c = b2.value; if (null == c) { c = b2.children; b2 = b2.defaultValue; if (null != c) { if (null != b2) throw Error(p(92)); if (eb(c)) { if (1 < c.length) throw Error(p(93)); c = c[0]; } b2 = c; } null == b2 && (b2 = ""); c = b2; } a2._wrapperState = { initialValue: Sa(c) }; } function ib(a2, b2) { var c = Sa(b2.value), d2 = Sa(b2.defaultValue); null != c && (c = "" + c, c !== a2.value && (a2.value = c), null == b2.defaultValue && a2.defaultValue !== c && (a2.defaultValue = c)); null != d2 && (a2.defaultValue = "" + d2); } function jb(a2) { var b2 = a2.textContent; b2 === a2._wrapperState.initialValue && "" !== b2 && null !== b2 && (a2.value = b2); } function kb(a2) { switch (a2) { case "svg": return "http://www.w3.org/2000/svg"; case "math": return "http://www.w3.org/1998/Math/MathML"; default: return "http://www.w3.org/1999/xhtml"; } } function lb(a2, b2) { return null == a2 || "http://www.w3.org/1999/xhtml" === a2 ? kb(b2) : "http://www.w3.org/2000/svg" === a2 && "foreignObject" === b2 ? "http://www.w3.org/1999/xhtml" : a2; } var mb, nb = function(a2) { return "undefined" !== typeof MSApp && MSApp.execUnsafeLocalFunction ? function(b2, c, d2, e2) { MSApp.execUnsafeLocalFunction(function() { return a2(b2, c, d2, e2); }); } : a2; }(function(a2, b2) { if ("http://www.w3.org/2000/svg" !== a2.namespaceURI || "innerHTML" in a2) a2.innerHTML = b2; else { mb = mb || document.createElement("div"); mb.innerHTML = "<svg>" + b2.valueOf().toString() + "</svg>"; for (b2 = mb.firstChild; a2.firstChild; ) a2.removeChild(a2.firstChild); for (; b2.firstChild; ) a2.appendChild(b2.firstChild); } }); function ob(a2, b2) { if (b2) { var c = a2.firstChild; if (c && c === a2.lastChild && 3 === c.nodeType) { c.nodeValue = b2; return; } } a2.textContent = b2; } var pb = { animationIterationCount: true, aspectRatio: true, borderImageOutset: true, borderImageSlice: true, borderImageWidth: true, boxFlex: true, boxFlexGroup: true, boxOrdinalGroup: true, columnCount: true, columns: true, flex: true, flexGrow: true, flexPositive: true, flexShrink: true, flexNegative: true, flexOrder: true, gridArea: true, gridRow: true, gridRowEnd: true, gridRowSpan: true, gridRowStart: true, gridColumn: true, gridColumnEnd: true, gridColumnSpan: true, gridColumnStart: true, fontWeight: true, lineClamp: true, lineHeight: true, opacity: true, order: true, orphans: true, tabSize: true, widows: true, zIndex: true, zoom: true, fillOpacity: true, floodOpacity: true, stopOpacity: true, strokeDasharray: true, strokeDashoffset: true, strokeMiterlimit: true, strokeOpacity: true, strokeWidth: true }, qb = ["Webkit", "ms", "Moz", "O"]; Object.keys(pb).forEach(function(a2) { qb.forEach(function(b2) { b2 = b2 + a2.charAt(0).toUpperCase() + a2.substring(1); pb[b2] = pb[a2]; }); }); function rb(a2, b2, c) { return null == b2 || "boolean" === typeof b2 || "" === b2 ? "" : c || "number" !== typeof b2 || 0 === b2 || pb.hasOwnProperty(a2) && pb[a2] ? ("" + b2).trim() : b2 + "px"; } function sb(a2, b2) { a2 = a2.style; for (var c in b2) if (b2.hasOwnProperty(c)) { var d2 = 0 === c.indexOf("--"), e2 = rb(c, b2[c], d2); "float" === c && (c = "cssFloat"); d2 ? a2.setProperty(c, e2) : a2[c] = e2; } } var tb = A$1({ menuitem: true }, { area: true, base: true, br: true, col: true, embed: true, hr: true, img: true, input: true, keygen: true, link: true, meta: true, param: true, source: true, track: true, wbr: true }); function ub(a2, b2) { if (b2) { if (tb[a2] && (null != b2.children || null != b2.dangerouslySetInnerHTML)) throw Error(p(137, a2)); if (null != b2.dangerouslySetInnerHTML) { if (null != b2.children) throw Error(p(60)); if ("object" !== typeof b2.dangerouslySetInnerHTML || !("__html" in b2.dangerouslySetInnerHTML)) throw Error(p(61)); } if (null != b2.style && "object" !== typeof b2.style) throw Error(p(62)); } } function vb(a2, b2) { if (-1 === a2.indexOf("-")) return "string" === typeof b2.is; switch (a2) { case "annotation-xml": case "color-profile": case "font-face": case "font-face-src": case "font-face-uri": case "font-face-format": case "font-face-name": case "missing-glyph": return false; default: return true; } } var wb = null; function xb(a2) { a2 = a2.target || a2.srcElement || window; a2.correspondingUseElement && (a2 = a2.correspondingUseElement); return 3 === a2.nodeType ? a2.parentNode : a2; } var yb = null, zb = null, Ab = null; function Bb(a2) { if (a2 = Cb(a2)) { if ("function" !== typeof yb) throw Error(p(280)); var b2 = a2.stateNode; b2 && (b2 = Db(b2), yb(a2.stateNode, a2.type, b2)); } } function Eb(a2) { zb ? Ab ? Ab.push(a2) : Ab = [a2] : zb = a2; } function Fb() { if (zb) { var a2 = zb, b2 = Ab; Ab = zb = null; Bb(a2); if (b2) for (a2 = 0; a2 < b2.length; a2++) Bb(b2[a2]); } } function Gb(a2, b2) { return a2(b2); } function Hb() { } var Ib = false; function Jb(a2, b2, c) { if (Ib) return a2(b2, c); Ib = true; try { return Gb(a2, b2, c); } finally { if (Ib = false, null !== zb || null !== Ab) Hb(), Fb(); } } function Kb(a2, b2) { var c = a2.stateNode; if (null === c) return null; var d2 = Db(c); if (null === d2) return null; c = d2[b2]; a: switch (b2) { case "onClick": case "onClickCapture": case "onDoubleClick": case "onDoubleClickCapture": case "onMouseDown": case "onMouseDownCapture": case "onMouseMove": case "onMouseMoveCapture": case "onMouseUp": case "onMouseUpCapture": case "onMouseEnter": (d2 = !d2.disabled) || (a2 = a2.type, d2 = !("button" === a2 || "input" === a2 || "select" === a2 || "textarea" === a2)); a2 = !d2; break a; default: a2 = false; } if (a2) return null; if (c && "function" !== typeof c) throw Error(p(231, b2, typeof c)); return c; } var Lb = false; if (ia) try { var Mb = {}; Object.defineProperty(Mb, "passive", { get: function() { Lb = true; } }); window.addEventListener("test", Mb, Mb); window.removeEventListener("test", Mb, Mb); } catch (a2) { Lb = false; } function Nb(a2, b2, c, d2, e2, f2, g2, h2, k2) { var l2 = Array.prototype.slice.call(arguments, 3); try { b2.apply(c, l2); } catch (m2) { this.onError(m2); } } var Ob = false, Pb = null, Qb = false, Rb = null, Sb = { onError: function(a2) { Ob = true; Pb = a2; } }; function Tb(a2, b2, c, d2, e2, f2, g2, h2, k2) { Ob = false; Pb = null; Nb.apply(Sb, arguments); } function Ub(a2, b2, c, d2, e2, f2, g2, h2, k2) { Tb.apply(this, arguments); if (Ob) { if (Ob) { var l2 = Pb; Ob = false; Pb = null; } else throw Error(p(198)); Qb || (Qb = true, Rb = l2); } } function Vb(a2) { var b2 = a2, c = a2; if (a2.alternate) for (; b2.return; ) b2 = b2.return; else { a2 = b2; do b2 = a2, 0 !== (b2.flags & 4098) && (c = b2.return), a2 = b2.return; while (a2); } return 3 === b2.tag ? c : null; } function Wb(a2) { if (13 === a2.tag) { var b2 = a2.memoizedState; null === b2 && (a2 = a2.alternate, null !== a2 && (b2 = a2.memoizedState)); if (null !== b2) return b2.dehydrated; } return null; } function Xb(a2) { if (Vb(a2) !== a2) throw Error(p(188)); } function Yb(a2) { var b2 = a2.alternate; if (!b2) { b2 = Vb(a2); if (null === b2) throw Error(p(188)); return b2 !== a2 ? null : a2; } for (var c = a2, d2 = b2; ; ) { var e2 = c.return; if (null === e2) break; var f2 = e2.alternate; if (null === f2) { d2 = e2.return; if (null !== d2) { c = d2; continue; } break; } if (e2.child === f2.child) { for (f2 = e2.child; f2; ) { if (f2 === c) return Xb(e2), a2; if (f2 === d2) return Xb(e2), b2; f2 = f2.sibling; } throw Error(p(188)); } if (c.return !== d2.return) c = e2, d2 = f2; else { for (var g2 = false, h2 = e2.child; h2; ) { if (h2 === c) { g2 = true; c = e2; d2 = f2; break; } if (h2 === d2) { g2 = true; d2 = e2; c = f2; break; } h2 = h2.sibling; } if (!g2) { for (h2 = f2.child; h2; ) { if (h2 === c) { g2 = true; c = f2; d2 = e2; break; } if (h2 === d2) { g2 = true; d2 = f2; c = e2; break; } h2 = h2.sibling; } if (!g2) throw Error(p(189)); } } if (c.alternate !== d2) throw Error(p(190)); } if (3 !== c.tag) throw Error(p(188)); return c.stateNode.current === c ? a2 : b2; } function Zb(a2) { a2 = Yb(a2); return null !== a2 ? $b(a2) : null; } function $b(a2) { if (5 === a2.tag || 6 === a2.tag) return a2; for (a2 = a2.child; null !== a2; ) { var b2 = $b(a2); if (null !== b2) return b2; a2 = a2.sibling; } return null; } var ac = ca.unstable_scheduleCallback, bc = ca.unstable_cancelCallback, cc = ca.unstable_shouldYield, dc = ca.unstable_requestPaint, B$1 = ca.unstable_now, ec = ca.unstable_getCurrentPriorityLevel, fc = ca.unstable_ImmediatePriority, gc = ca.unstable_UserBlockingPriority, hc = ca.unstable_NormalPriority, ic = ca.unstable_LowPriority, jc = ca.unstable_IdlePriority, kc = null, lc = null; function mc(a2) { if (lc && "function" === typeof lc.onCommitFiberRoot) try { lc.onCommitFiberRoot(kc, a2, void 0, 128 === (a2.current.flags & 128)); } catch (b2) { } } var oc = Math.clz32 ? Math.clz32 : nc, pc = Math.log, qc = Math.LN2; function nc(a2) { a2 >>>= 0; return 0 === a2 ? 32 : 31 - (pc(a2) / qc | 0) | 0; } var rc = 64, sc = 4194304; function tc(a2) { switch (a2 & -a2) { case 1: return 1; case 2: return 2; case 4: return 4; case 8: return 8; case 16: return 16; case 32: return 32; case 64: case 128: case 256: case 512: case 1024: case 2048: case 4096: case 8192: case 16384: case 32768: case 65536: case 131072: case 262144: case 524288: case 1048576: case 2097152: return a2 & 4194240; case 4194304: case 8388608: case 16777216: case 33554432: case 67108864: return a2 & 130023424; case 134217728: return 134217728; case 268435456: return 268435456; case 536870912: return 536870912; case 1073741824: return 1073741824; default: return a2; } } function uc(a2, b2) { var c = a2.pendingLanes; if (0 === c) return 0; var d2 = 0, e2 = a2.suspendedLanes, f2 = a2.pingedLanes, g2 = c & 268435455; if (0 !== g2) { var h2 = g2 & ~e2; 0 !== h2 ? d2 = tc(h2) : (f2 &= g2, 0 !== f2 && (d2 = tc(f2))); } else g2 = c & ~e2, 0 !== g2 ? d2 = tc(g2) : 0 !== f2 && (d2 = tc(f2)); if (0 === d2) return 0; if (0 !== b2 && b2 !== d2 && 0 === (b2 & e2) && (e2 = d2 & -d2, f2 = b2 & -b2, e2 >= f2 || 16 === e2 && 0 !== (f2 & 4194240))) return b2; 0 !== (d2 & 4) && (d2 |= c & 16); b2 = a2.entangledLanes; if (0 !== b2) for (a2 = a2.entanglements, b2 &= d2; 0 < b2; ) c = 31 - oc(b2), e2 = 1 << c, d2 |= a2[c], b2 &= ~e2; return d2; } function vc(a2, b2) { switch (a2) { case 1: case 2: case 4: return b2 + 250; case 8: case 16: case 32: case 64: case 128: case 256: case 512: case 1024: case 2048: case 4096: case 8192: case 16384: case 32768: case 65536: case 131072: case 262144: case 524288: case 1048576: case 2097152: return b2 + 5e3; case 4194304: case 8388608: case 16777216: case 33554432: case 67108864: return -1; case 134217728: case 268435456: case 536870912: case 1073741824: return -1; default: return -1; } } function wc(a2, b2) { for (var c = a2.suspendedLanes, d2 = a2.pingedLanes, e2 = a2.expirationTimes, f2 = a2.pendingLanes; 0 < f2; ) { var g2 = 31 - oc(f2), h2 = 1 << g2, k2 = e2[g2]; if (-1 === k2) { if (0 === (h2 & c) || 0 !== (h2 & d2)) e2[g2] = vc(h2, b2); } else k2 <= b2 && (a2.expiredLanes |= h2); f2 &= ~h2; } } function xc(a2) { a2 = a2.pendingLanes & -1073741825; return 0 !== a2 ? a2 : a2 & 1073741824 ? 1073741824 : 0; } function yc() { var a2 = rc; rc <<= 1; 0 === (rc & 4194240) && (rc = 64); return a2; } function zc(a2) { for (var b2 = [], c = 0; 31 > c; c++) b2.push(a2); return b2; } function Ac(a2, b2, c) { a2.pendingLanes |= b2; 536870912 !== b2 && (a2.suspendedLanes = 0, a2.pingedLanes = 0); a2 = a2.eventTimes; b2 = 31 - oc(b2); a2[b2] = c; } function Bc(a2, b2) { var c = a2.pendingLanes & ~b2; a2.pendingLanes = b2; a2.suspendedLanes = 0; a2.pingedLanes = 0; a2.expiredLanes &= b2; a2.mutableReadLanes &= b2; a2.entangledLanes &= b2; b2 = a2.entanglements; var d2 = a2.eventTimes; for (a2 = a2.expirationTimes; 0 < c; ) { var e2 = 31 - oc(c), f2 = 1 << e2; b2[e2] = 0; d2[e2] = -1; a2[e2] = -1; c &= ~f2; } } function Cc(a2, b2) { var c = a2.entangledLanes |= b2; for (a2 = a2.entanglements; c; ) { var d2 = 31 - oc(c), e2 = 1 << d2; e2 & b2 | a2[d2] & b2 && (a2[d2] |= b2); c &= ~e2; } } var C$1 = 0; function Dc(a2) { a2 &= -a2; return 1 < a2 ? 4 < a2 ? 0 !== (a2 & 268435455) ? 16 : 536870912 : 4 : 1; } var Ec, Fc, Gc, Hc, Ic, Jc = false, Kc = [], Lc = null, Mc = null, Nc = null, Oc = /* @__PURE__ */ new Map(), Pc = /* @__PURE__ */ new Map(), Qc = [], Rc = "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" "); function Sc(a2, b2) { switch (a2) { case "focusin": case "focusout": Lc = null; break; case "dragenter": case "dragleave": Mc = null; break; case "mouseover": case "mouseout": Nc = null; break; case "pointerover": case "pointerout": Oc.delete(b2.pointerId); break; case "gotpointercapture": case "lostpointercapture": Pc.delete(b2.pointerId); } } function Tc(a2, b2, c, d2, e2, f2) { if (null === a2 || a2.nativeEvent !== f2) return a2 = { blockedOn: b2, domEventName: c, eventSystemFlags: d2, nativeEvent: f2, targetContainers: [e2] }, null !== b2 && (b2 = Cb(b2), null !== b2 && Fc(b2)), a2; a2.eventSystemFlags |= d2; b2 = a2.targetContainers; null !== e2 && -1 === b2.indexOf(e2) && b2.push(e2); return a2; } function Uc(a2, b2, c, d2, e2) { switch (b2) { case "focusin": return Lc = Tc(Lc, a2, b2, c, d2, e2), true; case "dragenter": return Mc = Tc(Mc, a2, b2, c, d2, e2), true; case "mouseover": return Nc = Tc(Nc, a2, b2, c, d2, e2), true; case "pointerover": var f2 = e2.pointerId; Oc.set(f2, Tc(Oc.get(f2) || null, a2, b2, c, d2, e2)); return true; case "gotpointercapture": return f2 = e2.pointerId, Pc.set(f2, Tc(Pc.get(f2) || null, a2, b2, c, d2, e2)), true; } return false; } function Vc(a2) { var b2 = Wc(a2.target); if (null !== b2) { var c = Vb(b2); if (null !== c) { if (b2 = c.tag, 13 === b2) { if (b2 = Wb(c), null !== b2) { a2.blockedOn = b2; Ic(a2.priority, function() { Gc(c); }); return; } } else if (3 === b2 && c.stateNode.current.memoizedState.isDehydrated) { a2.blockedOn = 3 === c.tag ? c.stateNode.containerInfo : null; return; } } } a2.blockedOn = null; } function Xc(a2) { if (null !== a2.blockedOn) return false; for (var b2 = a2.targetContainers; 0 < b2.length; ) { var c = Yc(a2.domEventName, a2.eventSystemFlags, b2[0], a2.nativeEvent); if (null === c) { c = a2.nativeEvent; var d2 = new c.constructor(c.type, c); wb = d2; c.target.dispatchEvent(d2); wb = null; } else return b2 = Cb(c), null !== b2 && Fc(b2), a2.blockedOn = c, false; b2.shift(); } return true; } function Zc(a2, b2, c) { Xc(a2) && c.delete(b2); } function $c() { Jc = false; null !== Lc && Xc(Lc) && (Lc = null); null !== Mc && Xc(Mc) && (Mc = null); null !== Nc && Xc(Nc) && (Nc = null); Oc.forEach(Zc); Pc.forEach(Zc); } function ad(a2, b2) { a2.blockedOn === b2 && (a2.blockedOn = null, Jc || (Jc = true, ca.unstable_scheduleCallback(ca.unstable_NormalPriority, $c))); } function bd(a2) { function b2(b3) { return ad(b3, a2); } if (0 < Kc.length) { ad(Kc[0], a2); for (var c = 1; c < Kc.length; c++) { var d2 = Kc[c]; d2.blockedOn === a2 && (d2.blockedOn = null); } } null !== Lc && ad(Lc, a2); null !== Mc && ad(Mc, a2); null !== Nc && ad(Nc, a2); Oc.forEach(b2); Pc.forEach(b2); for (c = 0; c < Qc.length; c++) d2 = Qc[c], d2.blockedOn === a2 && (d2.blockedOn = null); for (; 0 < Qc.length && (c = Qc[0], null === c.blockedOn); ) Vc(c), null === c.blockedOn && Qc.shift(); } var cd = ua.ReactCurrentBatchConfig, dd = true; function ed(a2, b2, c, d2) { var e2 = C$1, f2 = cd.transition; cd.transition = null; try { C$1 = 1, fd(a2, b2, c, d2); } finally { C$1 = e2, cd.transition = f2; } } function gd(a2, b2, c, d2) { var e2 = C$1, f2 = cd.transition; cd.transition = null; try { C$1 = 4, fd(a2, b2, c, d2); } finally { C$1 = e2, cd.transition = f2; } } function fd(a2, b2, c, d2) { if (dd) { var e2 = Yc(a2, b2, c, d2); if (null === e2) hd(a2, b2, d2, id$2, c), Sc(a2, d2); else if (Uc(e2, a2, b2, c, d2)) d2.stopPropagation(); else if (Sc(a2, d2), b2 & 4 && -1 < Rc.indexOf(a2)) { for (; null !== e2; ) { var f2 = Cb(e2); null !== f2 && Ec(f2); f2 = Yc(a2, b2, c, d2); null === f2 && hd(a2, b2, d2, id$2, c); if (f2 === e2) break; e2 = f2; } null !== e2 && d2.stopPropagation(); } else hd(a2, b2, d2, null, c); } } var id$2 = null; function Yc(a2, b2, c, d2) { id$2 = null; a2 = xb(d2); a2 = Wc(a2); if (null !== a2) if (b2 = Vb(a2), null === b2) a2 = null; else if (c = b2.tag, 13 === c) { a2 = Wb(b2); if (null !== a2) return a2; a2 = null; } else if (3 === c) { if (b2.stateNode.current.memoizedState.isDehydrated) return 3 === b2.tag ? b2.stateNode.containerInfo : null; a2 = null; } else b2 !== a2 && (a2 = null); id$2 = a2; return null; } function jd(a2) { switch (a2) { case "cancel": case "click": case "close": case "contextmenu": case "copy": case "cut": case "auxclick": case "dblclick": case "dragend": case "dragstart": case "drop": case "focusin": case "focusout": case "input": case "invalid": case "keydown": case "keypress": case "keyup": case "mousedown": case "mouseup": case "paste": case "pause": case "play": case "pointercancel": case "pointerdown": case "pointerup": case "ratechange": case "reset": case "resize": case "seeked": case "submit": case "touchcancel": case "touchend": case "touchstart": case "volumechange": case "change": case "selectionchange": case "textInput": case "compositionstart": case "compositionend": case "compositionupdate": case "beforeblur": case "afterblur": case "beforeinput": case "blur": case "fullscreenchange": case "focus": case "hashchange": case "popstate": case "select": case "selectstart": return 1; case "drag": case "dragenter": case "dragexit": case "dragleave": case "dragover": case "mousemove": case "mouseout": case "mouseover": case "pointermove": case "pointerout": case "pointerover": case "scroll": case "toggle": case "touchmove": case "wheel": case "mouseenter": case "mouseleave": case "pointerenter": case "pointerleave": return 4; case "message": switch (ec()) { case fc: return 1; case gc: return 4; case hc: case ic: return 16; case jc: return 536870912; default: return 16; } default: return 16; } } var kd = null, ld = null, md = null; function nd() { if (md) return md; var a2, b2 = ld, c = b2.length, d2, e2 = "value" in kd ? kd.value : kd.textContent, f2 = e2.length; for (a2 = 0; a2 < c && b2[a2] === e2[a2]; a2++) ; var g2 = c - a2; for (d2 = 1; d2 <= g2 && b2[c - d2] === e2[f2 - d2]; d2++) ; return md = e2.slice(a2, 1 < d2 ? 1 - d2 : void 0); } function od(a2) { var b2 = a2.keyCode; "charCode" in a2 ? (a2 = a2.charCode, 0 === a2 && 13 === b2 && (a2 = 13)) : a2 = b2; 10 === a2 && (a2 = 13); return 32 <= a2 || 13 === a2 ? a2 : 0; } function pd() { return true; } function qd() { return false; } function rd(a2) { function b2(b3, d2, e2, f2, g2) { this._reactName = b3; this._targetInst = e2; this.type = d2; this.nativeEvent = f2; this.target = g2; this.currentTarget = null; for (var c in a2) a2.hasOwnProperty(c) && (b3 = a2[c], this[c] = b3 ? b3(f2) : f2[c]); this.isDefaultPrevented = (null != f2.defaultPrevented ? f2.defaultPrevented : false === f2.returnValue) ? pd : qd; this.isPropagationStopped = qd; return this; } A$1(b2.prototype, { preventDefault: function() { this.defaultPrevented = true; var a3 = this.nativeEvent; a3 && (a3.preventDefault ? a3.preventDefault() : "unknown" !== typeof a3.returnValue && (a3.returnValue = false), this.isDefaultPrevented = pd); }, stopPropagation: function() { var a3 = this.nativeEvent; a3 && (a3.stopPropagation ? a3.stopPropagation() : "unknown" !== typeof a3.cancelBubble && (a3.cancelBubble = true), this.isPropagationStopped = pd); }, persist: function() { }, isPersistent: pd }); return b2; } var sd = { eventPhase: 0, bubbles: 0, cancelable: 0, timeStamp: function(a2) { return a2.timeStamp || Date.now(); }, defaultPrevented: 0, isTrusted: 0 }, td = rd(sd), ud = A$1({}, sd, { view: 0, detail: 0 }), vd = rd(ud), wd, xd, yd, Ad = A$1({}, ud, { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, getModifierState: zd, button: 0, buttons: 0, relatedTarget: function(a2) { return void 0 === a2.relatedTarget ? a2.fromElement === a2.srcElement ? a2.toElement : a2.fromElement : a2.relatedTarget; }, movementX: function(a2) { if ("movementX" in a2) return a2.movementX; a2 !== yd && (yd && "mousemove" === a2.type ? (wd = a2.screenX - yd.screenX, xd = a2.screenY - yd.screenY) : xd = wd = 0, yd = a2); return wd; }, movementY: function(a2) { return "movementY" in a2 ? a2.movementY : xd; } }), Bd = rd(Ad), Cd = A$1({}, Ad, { dataTransfer: 0 }), Dd = rd(Cd), Ed = A$1({}, ud, { relatedTarget: 0 }), Fd = rd(Ed), Gd = A$1({}, sd, { animationName: 0, elapsedTime: 0, pseudoElement: 0 }), Hd = rd(Gd), Id = A$1({}, sd, { clipboardData: function(a2) { return "clipboardData" in a2 ? a2.clipboardData : window.clipboardData; } }), Jd = rd(Id), Kd = A$1({}, sd, { data: 0 }), Ld = rd(Kd), Md = { Esc: "Escape", Spacebar: " ", Left: "ArrowLeft", Up: "ArrowUp", Right: "ArrowRight", Down: "ArrowDown", Del: "Delete", Win: "OS", Menu: "ContextMenu", Apps: "ContextMenu", Scroll: "ScrollLock", MozPrintableKey: "Unidentified" }, Nd = { 8: "Backspace", 9: "Tab", 12: "Clear", 13: "Enter", 16: "Shift", 17: "Control", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Escape", 32: " ", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "ArrowLeft", 38: "ArrowUp", 39: "ArrowRight", 40: "ArrowDown", 45: "Insert", 46: "Delete", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "NumLock", 145: "ScrollLock", 224: "Meta" }, Od = { Alt: "altKey", Control: "ctrlKey", Meta: "metaKey", Shift: "shiftKey" }; function Pd(a2) { var b2 = this.nativeEvent; return b2.getModifierState ? b2.getModifierState(a2) : (a2 = Od[a2]) ? !!b2[a2] : false; } function zd() { return Pd; } var Qd = A$1({}, ud, { key: function(a2) { if (a2.key) { var b2 = Md[a2.key] || a2.key; if ("Unidentified" !== b2) return b2; } return "keypress" === a2.type ? (a2 = od(a2), 13 === a2 ? "Enter" : String.fromCharCode(a2)) : "keydown" === a2.type || "keyup" === a2.type ? Nd[a2.keyCode] || "Unidentified" : ""; }, code: 0, location: 0, ctrlKey: 0, shiftKey: 0, altKey: 0, metaKey: 0, repeat: 0, locale: 0, getModifierState: zd, charCode: function(a2) { return "keypress" === a2.type ? od(a2) : 0; }, keyCode: function(a2) { return "keydown" === a2.type || "keyup" === a2.type ? a2.keyCode : 0; }, which: function(a2) { return "keypress" === a2.type ? od(a2) : "keydown" === a2.type || "keyup" === a2.type ? a2.keyCode : 0; } }), Rd = rd(Qd), Sd = A$1({}, Ad, { pointerId: 0, width: 0, height: 0, pressure: 0, tangentialPressure: 0, tiltX: 0, tiltY: 0, twist: 0, pointerType: 0, isPrimary: 0 }), Td = rd(Sd), Ud = A$1({}, ud, { touches: 0, targetTouches: 0, changedTouches: 0, altKey: 0, metaKey: 0, ctrlKey: 0, shiftKey: 0, getModifierState: zd }), Vd = rd(Ud), Wd = A$1({}, sd, { propertyName: 0, elapsedTime: 0, pseudoElement: 0 }), Xd = rd(Wd), Yd = A$1({}, Ad, { deltaX: function(a2) { return "deltaX" in a2 ? a2.deltaX : "wheelDeltaX" in a2 ? -a2.wheelDeltaX : 0; }, deltaY: function(a2) { return "deltaY" in a2 ? a2.deltaY : "wheelDeltaY" in a2 ? -a2.wheelDeltaY : "wheelDelta" in a2 ? -a2.wheelDelta : 0; }, deltaZ: 0, deltaMode: 0 }), Zd = rd(Yd), $d = [9, 13, 27, 32], ae = ia && "CompositionEvent" in window, be = null; ia && "documentMode" in document && (be = document.documentMode); var ce = ia && "TextEvent" in window && !be, de$1 = ia && (!ae || be && 8 < be && 11 >= be), ee$1 = String.fromCharCode(32), fe = false; function ge(a2, b2) { switch (a2) { case "keyup": return -1 !== $d.indexOf(b2.keyCode); case "keydown": return 229 !== b2.keyCode; case "keypress": case "mousedown": case "focusout": return true; default: return false; } } function he(a2) { a2 = a2.detail; return "object" === typeof a2 && "data" in a2 ? a2.data : null; } var ie = false; function je(a2, b2) { switch (a2) { case "compositionend": return he(b2); case "keypress": if (32 !== b2.which) return null; fe = true; return ee$1; case "textInput": return a2 = b2.data, a2 === ee$1 && fe ? null : a2; default: return null; } } function ke(a2, b2) { if (ie) return "compositionend" === a2 || !ae && ge(a2, b2) ? (a2 = nd(), md = ld = kd = null, ie = false, a2) : null; switch (a2) { case "paste": return null; case "keypress": if (!(b2.ctrlKey || b2.altKey || b2.metaKey) || b2.ctrlKey && b2.altKey) { if (b2.char && 1 < b2.char.length) return b2.char; if (b2.which) return String.fromCharCode(b2.which); } return null; case "compositionend": return de$1 && "ko" !== b2.locale ? null : b2.data; default: return null; } } var le = { color: true, date: true, datetime: true, "datetime-local": true, email: true, month: true, number: true, password: true, range: true, search: true, tel: true, text: true, time: true, url: true, week: true }; function me(a2) { var b2 = a2 && a2.nodeName && a2.nodeName.toLowerCase(); return "input" === b2 ? !!le[a2.type] : "textarea" === b2 ? true : false; } function ne(a2, b2, c, d2) { Eb(d2); b2 = oe(b2, "onChange"); 0 < b2.length && (c = new td("onChange", "change", null, c, d2), a2.push({ event: c, listeners: b2 })); } var pe = null, qe = null; function re$4(a2) { se(a2, 0); } function te$1(a2) { var b2 = ue(a2); if (Wa(b2)) return a2; } function ve(a2, b2) { if ("change" === a2) return b2; } var we = false; if (ia) { var xe; if (ia) { var ye = "oninput" in document; if (!ye) { var ze = document.createElement("div"); ze.setAttribute("oninput", "return;"); ye = "function" === typeof ze.oninput; } xe = ye; } else xe = false; we = xe && (!document.documentMode || 9 < document.documentMode); } function Ae() { pe && (pe.detachEvent("onpropertychange", Be), qe = pe = null); } function Be(a2) { if ("value" === a2.propertyName && te$1(qe)) { var b2 = []; ne(b2, qe, a2, xb(a2)); Jb(re$4, b2); } } function Ce(a2, b2, c) { "focusin" === a2 ? (Ae(), pe = b2, qe = c, pe.attachEvent("onpropertychange", Be)) : "focusout" === a2 && Ae(); } function De(a2) { if ("selectionchange" === a2 || "keyup" === a2 || "keydown" === a2) return te$1(qe); } function Ee(a2, b2) { if ("click" === a2) return te$1(b2); } function Fe(a2, b2) { if ("input" === a2 || "change" === a2) return te$1(b2); } function Ge(a2, b2) { return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2; } var He = "function" === typeof Object.is ? Object.is : Ge; function Ie(a2, b2) { if (He(a2, b2)) return true; if ("object" !== typeof a2 || null === a2 || "object" !== typeof b2 || null === b2) return false; var c = Object.keys(a2), d2 = Object.keys(b2); if (c.length !== d2.length) return false; for (d2 = 0; d2 < c.length; d2++) { var e2 = c[d2]; if (!ja.call(b2, e2) || !He(a2[e2], b2[e2])) return false; } return true; } function Je(a2) { for (; a2 && a2.firstChild; ) a2 = a2.firstChild; return a2; } function Ke(a2, b2) { var c = Je(a2); a2 = 0; for (var d2; c; ) { if (3 === c.nodeType) { d2 = a2 + c.textContent.length; if (a2 <= b2 && d2 >= b2) return { node: c, offset: b2 - a2 }; a2 = d2; } a: { for (; c; ) { if (c.nextSibling) { c = c.nextSibling; break a; } c = c.parentNode; } c = void 0; } c = Je(c); } } function Le(a2, b2) { return a2 && b2 ? a2 === b2 ? true : a2 && 3 === a2.nodeType ? false : b2 && 3 === b2.nodeType ? Le(a2, b2.parentNode) : "contains" in a2 ? a2.contains(b2) : a2.compareDocumentPosition ? !!(a2.compareDocumentPosition(b2) & 16) : false : false; } function Me() { for (var a2 = window, b2 = Xa(); b2 instanceof a2.HTMLIFrameElement; ) { try { var c = "string" === typeof b2.contentWindow.location.href; } catch (d2) { c = false; } if (c) a2 = b2.contentWindow; else break; b2 = Xa(a2.document); } return b2; } function Ne(a2) { var b2 = a2 && a2.nodeName && a2.nodeName.toLowerCase(); return b2 && ("input" === b2 && ("text" === a2.type || "search" === a2.type || "tel" === a2.type || "url" === a2.type || "password" === a2.type) || "textarea" === b2 || "true" === a2.contentEditable); } function Oe(a2) { var b2 = Me(), c = a2.focusedElem, d2 = a2.selectionRange; if (b2 !== c && c && c.ownerDocument && Le(c.ownerDocument.documentElement, c)) { if (null !== d2 && Ne(c)) { if (b2 = d2.start, a2 = d2.end, void 0 === a2 && (a2 = b2), "selectionStart" in c) c.selectionStart = b2, c.selectionEnd = Math.min(a2, c.value.length); else if (a2 = (b2 = c.ownerDocument || document) && b2.defaultView || window, a2.getSelection) { a2 = a2.getSelection(); var e2 = c.textContent.length, f2 = Math.min(d2.start, e2); d2 = void 0 === d2.end ? f2 : Math.min(d2.end, e2); !a2.extend && f2 > d2 && (e2 = d2, d2 = f2, f2 = e2); e2 = Ke(c, f2); var g2 = Ke( c, d2 ); e2 && g2 && (1 !== a2.rangeCount || a2.anchorNode !== e2.node || a2.anchorOffset !== e2.offset || a2.focusNode !== g2.node || a2.focusOffset !== g2.offset) && (b2 = b2.createRange(), b2.setStart(e2.node, e2.offset), a2.removeAllRanges(), f2 > d2 ? (a2.addRange(b2), a2.extend(g2.node, g2.offset)) : (b2.setEnd(g2.node, g2.offset), a2.addRange(b2))); } } b2 = []; for (a2 = c; a2 = a2.parentNode; ) 1 === a2.nodeType && b2.push({ element: a2, left: a2.scrollLeft, top: a2.scrollTop }); "function" === typeof c.focus && c.focus(); for (c = 0; c < b2.length; c++) a2 = b2[c], a2.element.scrollLeft = a2.left, a2.element.scrollTop = a2.top; } } var Pe = ia && "documentMode" in document && 11 >= document.documentMode, Qe = null, Re = null, Se = null, Te = false; function Ue(a2, b2, c) { var d2 = c.window === c ? c.document : 9 === c.nodeType ? c : c.ownerDocument; Te || null == Qe || Qe !== Xa(d2) || (d2 = Qe, "selectionStart" in d2 && Ne(d2) ? d2 = { start: d2.selectionStart, end: d2.selectionEnd } : (d2 = (d2.ownerDocument && d2.ownerDocument.defaultView || window).getSelection(), d2 = { anchorNode: d2.anchorNode, anchorOffset: d2.anchorOffset, focusNode: d2.focusNode, focusOffset: d2.focusOffset }), Se && Ie(Se, d2) || (Se = d2, d2 = oe(Re, "onSelect"), 0 < d2.length && (b2 = new td("onSelect", "select", null, b2, c), a2.push({ event: b2, listeners: d2 }), b2.target = Qe))); } function Ve(a2, b2) { var c = {}; c[a2.toLowerCase()] = b2.toLowerCase(); c["Webkit" + a2] = "webkit" + b2; c["Moz" + a2] = "moz" + b2; return c; } var We = { animationend: Ve("Animation", "AnimationEnd"), animationiteration: Ve("Animation", "AnimationIteration"), animationstart: Ve("Animation", "AnimationStart"), transitionend: Ve("Transition", "TransitionEnd") }, Xe = {}, Ye = {}; ia && (Ye = document.createElement("div").style, "AnimationEvent" in window || (delete We.animationend.animation, delete We.animationiteration.animation, delete We.animationstart.animation), "TransitionEvent" in window || delete We.transitionend.transition); function Ze(a2) { if (Xe[a2]) return Xe[a2]; if (!We[a2]) return a2; var b2 = We[a2], c; for (c in b2) if (b2.hasOwnProperty(c) && c in Ye) return Xe[a2] = b2[c]; return a2; } var $e = Ze("animationend"), af = Ze("animationiteration"), bf = Ze("animationstart"), cf = Ze("transitionend"), df = /* @__PURE__ */ new Map(), ef = "abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" "); function ff(a2, b2) { df.set(a2, b2); fa(b2, [a2]); } for (var gf = 0; gf < ef.length; gf++) { var hf = ef[gf], jf = hf.toLowerCase(), kf = hf[0].toUpperCase() + hf.slice(1); ff(jf, "on" + kf); } ff($e, "onAnimationEnd"); ff(af, "onAnimationIteration"); ff(bf, "onAnimationStart"); ff("dblclick", "onDoubleClick"); ff("focusin", "onFocus"); ff("focusout", "onBlur"); ff(cf, "onTransitionEnd"); ha("onMouseEnter", ["mouseout", "mouseover"]); ha("onMouseLeave", ["mouseout", "mouseover"]); ha("onPointerEnter", ["pointerout", "pointerover"]); ha("onPointerLeave", ["pointerout", "pointerover"]); fa("onChange", "change click focusin focusout input keydown keyup selectionchange".split(" ")); fa("onSelect", "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")); fa("onBeforeInput", ["compositionend", "keypress", "textInput", "paste"]); fa("onCompositionEnd", "compositionend focusout keydown keypress keyup mousedown".split(" ")); fa("onCompositionStart", "compositionstart focusout keydown keypress keyup mousedown".split(" ")); fa("onCompositionUpdate", "compositionupdate focusout keydown keypress keyup mousedown".split(" ")); var lf = "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "), mf = new Set("cancel close invalid load scroll toggle".split(" ").concat(lf)); function nf(a2, b2, c) { var d2 = a2.type || "unknown-event"; a2.currentTarget = c; Ub(d2, b2, void 0, a2); a2.currentTarget = null; } function se(a2, b2) { b2 = 0 !== (b2 & 4); for (var c = 0; c < a2.length; c++) { var d2 = a2[c], e2 = d2.event; d2 = d2.listeners; a: { var f2 = void 0; if (b2) for (var g2 = d2.length - 1; 0 <= g2; g2--) { var h2 = d2[g2], k2 = h2.instance, l2 = h2.currentTarget; h2 = h2.listener; if (k2 !== f2 && e2.isPropagationStopped()) break a; nf(e2, h2, l2); f2 = k2; } else for (g2 = 0; g2 < d2.length; g2++) { h2 = d2[g2]; k2 = h2.instance; l2 = h2.currentTarget; h2 = h2.listener; if (k2 !== f2 && e2.isPropagationStopped()) break a; nf(e2, h2, l2); f2 = k2; } } } if (Qb) throw a2 = Rb, Qb = false, Rb = null, a2; } function D$1(a2, b2) { var c = b2[of]; void 0 === c && (c = b2[of] = /* @__PURE__ */ new Set()); var d2 = a2 + "__bubble"; c.has(d2) || (pf(b2, a2, 2, false), c.add(d2)); } function qf(a2, b2, c) { var d2 = 0; b2 && (d2 |= 4); pf(c, a2, d2, b2); } var rf = "_reactListening" + Math.random().toString(36).slice(2); function sf(a2) { if (!a2[rf]) { a2[rf] = true; da.forEach(function(b3) { "selectionchange" !== b3 && (mf.has(b3) || qf(b3, false, a2), qf(b3, true, a2)); }); var b2 = 9 === a2.nodeType ? a2 : a2.ownerDocument; null === b2 || b2[rf] || (b2[rf] = true, qf("selectionchange", false, b2)); } } function pf(a2, b2, c, d2) { switch (jd(b2)) { case 1: var e2 = ed; break; case 4: e2 = gd; break; default: e2 = fd; } c = e2.bind(null, b2, c, a2); e2 = void 0; !Lb || "touchstart" !== b2 && "touchmove" !== b2 && "wheel" !== b2 || (e2 = true); d2 ? void 0 !== e2 ? a2.addEventListener(b2, c, { capture: true, passive: e2 }) : a2.addEventListener(b2, c, true) : void 0 !== e2 ? a2.addEventListener(b2, c, { passive: e2 }) : a2.addEventListener(b2, c, false); } function hd(a2, b2, c, d2, e2) { var f2 = d2; if (0 === (b2 & 1) && 0 === (b2 & 2) && null !== d2) a: for (; ; ) { if (null === d2) return; var g2 = d2.tag; if (3 === g2 || 4 === g2) { var h2 = d2.stateNode.containerInfo; if (h2 === e2 || 8 === h2.nodeType && h2.parentNode === e2) break; if (4 === g2) for (g2 = d2.return; null !== g2; ) { var k2 = g2.tag; if (3 === k2 || 4 === k2) { if (k2 = g2.stateNode.containerInfo, k2 === e2 || 8 === k2.nodeType && k2.parentNode === e2) return; } g2 = g2.return; } for (; null !== h2; ) { g2 = Wc(h2); if (null === g2) return; k2 = g2.tag; if (5 === k2 || 6 === k2) { d2 = f2 = g2; continue a; } h2 = h2.parentNode; } } d2 = d2.return; } Jb(function() { var d3 = f2, e3 = xb(c), g3 = []; a: { var h3 = df.get(a2); if (void 0 !== h3) { var k3 = td, n2 = a2; switch (a2) { case "keypress": if (0 === od(c)) break a; case "keydown": case "keyup": k3 = Rd; break; case "focusin": n2 = "focus"; k3 = Fd; break; case "focusout": n2 = "blur"; k3 = Fd; break; case "beforeblur": case "afterblur": k3 = Fd; break; case "click": if (2 === c.button) break a; case "auxclick": case "dblclick": case "mousedown": case "mousemove": case "mouseup": case "mouseout": case "mouseover": case "contextmenu": k3 = Bd; break; case "drag": case "dragend": case "dragenter": case "dragexit": case "dragleave": case "dragover": case "dragstart": case "drop": k3 = Dd; break; case "touchcancel": case "touchend": case "touchmove": case "touchstart": k3 = Vd; break; case $e: case af: case bf: k3 = Hd; break; case cf: k3 = Xd; break; case "scroll": k3 = vd; break; case "wheel": k3 = Zd; break; case "copy": case "cut": case "paste": k3 = Jd; break; case "gotpointercapture": case "lostpointercapture": case "pointercancel": case "pointerdown": case "pointermove": case "pointerout": case "pointerover": case "pointerup": k3 = Td; } var t2 = 0 !== (b2 & 4), J2 = !t2 && "scroll" === a2, x2 = t2 ? null !== h3 ? h3 + "Capture" : null : h3; t2 = []; for (var w2 = d3, u2; null !== w2; ) { u2 = w2; var F2 = u2.stateNode; 5 === u2.tag && null !== F2 && (u2 = F2, null !== x2 && (F2 = Kb(w2, x2), null != F2 && t2.push(tf(w2, F2, u2)))); if (J2) break; w2 = w2.return; } 0 < t2.length && (h3 = new k3(h3, n2, null, c, e3), g3.push({ event: h3, listeners: t2 })); } } if (0 === (b2 & 7)) { a: { h3 = "mouseover" === a2 || "pointerover" === a2; k3 = "mouseout" === a2 || "pointerout" === a2; if (h3 && c !== wb && (n2 = c.relatedTarget || c.fromElement) && (Wc(n2) || n2[uf])) break a; if (k3 || h3) { h3 = e3.window === e3 ? e3 : (h3 = e3.ownerDocument) ? h3.defaultView || h3.parentWindow : window; if (k3) { if (n2 = c.relatedTarget || c.toElement, k3 = d3, n2 = n2 ? Wc(n2) : null, null !== n2 && (J2 = Vb(n2), n2 !== J2 || 5 !== n2.tag && 6 !== n2.tag)) n2 = null; } else k3 = null, n2 = d3; if (k3 !== n2) { t2 = Bd; F2 = "onMouseLeave"; x2 = "onMouseEnter"; w2 = "mouse"; if ("pointerout" === a2 || "pointerover" === a2) t2 = Td, F2 = "onPointerLeave", x2 = "onPointerEnter", w2 = "pointer"; J2 = null == k3 ? h3 : ue(k3); u2 = null == n2 ? h3 : ue(n2); h3 = new t2(F2, w2 + "leave", k3, c, e3); h3.target = J2; h3.relatedTarget = u2; F2 = null; Wc(e3) === d3 && (t2 = new t2(x2, w2 + "enter", n2, c, e3), t2.target = u2, t2.relatedTarget = J2, F2 = t2); J2 = F2; if (k3 && n2) b: { t2 = k3; x2 = n2; w2 = 0; for (u2 = t2; u2; u2 = vf(u2)) w2++; u2 = 0; for (F2 = x2; F2; F2 = vf(F2)) u2++; for (; 0 < w2 - u2; ) t2 = vf(t2), w2--; for (; 0 < u2 - w2; ) x2 = vf(x2), u2--; for (; w2--; ) { if (t2 === x2 || null !== x2 && t2 === x2.alternate) break b; t2 = vf(t2); x2 = vf(x2); } t2 = null; } else t2 = null; null !== k3 && wf(g3, h3, k3, t2, false); null !== n2 && null !== J2 && wf(g3, J2, n2, t2, true); } } } a: { h3 = d3 ? ue(d3) : window; k3 = h3.nodeName && h3.nodeName.toLowerCase(); if ("select" === k3 || "input" === k3 && "file" === h3.type) var na = ve; else if (me(h3)) if (we) na = Fe; else { na = De; var xa = Ce; } else (k3 = h3.nodeName) && "input" === k3.toLowerCase() && ("checkbox" === h3.type || "radio" === h3.type) && (na = Ee); if (na && (na = na(a2, d3))) { ne(g3, na, c, e3); break a; } xa && xa(a2, h3, d3); "focusout" === a2 && (xa = h3._wrapperState) && xa.controlled && "number" === h3.type && cb(h3, "number", h3.value); } xa = d3 ? ue(d3) : window; switch (a2) { case "focusin": if (me(xa) || "true" === xa.contentEditable) Qe = xa, Re = d3, Se = null; break; case "focusout": Se = Re = Qe = null; break; case "mousedown": Te = true; break; case "contextmenu": case "mouseup": case "dragend": Te = false; Ue(g3, c, e3); break; case "selectionchange": if (Pe) break; case "keydown": case "keyup": Ue(g3, c, e3); } var $a; if (ae) b: { switch (a2) { case "compositionstart": var ba = "onCompositionStart"; break b; case "compositionend": ba = "onCompositionEnd"; break b; case "compositionupdate": ba = "onCompositionUpdate"; break b; } ba = void 0; } else ie ? ge(a2, c) && (ba = "onCompositionEnd") : "keydown" === a2 && 229 === c.keyCode && (ba = "onCompositionStart"); ba && (de$1 && "ko" !== c.locale && (ie || "onCompositionStart" !== ba ? "onCompositionEnd" === ba && ie && ($a = nd()) : (kd = e3, ld = "value" in kd ? kd.value : kd.textContent, ie = true)), xa = oe(d3, ba), 0 < xa.length && (ba = new Ld(ba, a2, null, c, e3), g3.push({ event: ba, listeners: xa }), $a ? ba.data = $a : ($a = he(c), null !== $a && (ba.data = $a)))); if ($a = ce ? je(a2, c) : ke(a2, c)) d3 = oe(d3, "onBeforeInput"), 0 < d3.length && (e3 = new Ld("onBeforeInput", "beforeinput", null, c, e3), g3.push({ event: e3, listeners: d3 }), e3.data = $a); } se(g3, b2); }); } function tf(a2, b2, c) { return { instance: a2, listener: b2, currentTarget: c }; } function oe(a2, b2) { for (var c = b2 + "Capture", d2 = []; null !== a2; ) { var e2 = a2, f2 = e2.stateNode; 5 === e2.tag && null !== f2 && (e2 = f2, f2 = Kb(a2, c), null != f2 && d2.unshift(tf(a2, f2, e2)), f2 = Kb(a2, b2), null != f2 && d2.push(tf(a2, f2, e2))); a2 = a2.return; } return d2; } function vf(a2) { if (null === a2) return null; do a2 = a2.return; while (a2 && 5 !== a2.tag); return a2 ? a2 : null; } function wf(a2, b2, c, d2, e2) { for (var f2 = b2._reactName, g2 = []; null !== c && c !== d2; ) { var h2 = c, k2 = h2.alternate, l2 = h2.stateNode; if (null !== k2 && k2 === d2) break; 5 === h2.tag && null !== l2 && (h2 = l2, e2 ? (k2 = Kb(c, f2), null != k2 && g2.unshift(tf(c, k2, h2))) : e2 || (k2 = Kb(c, f2), null != k2 && g2.push(tf(c, k2, h2)))); c = c.return; } 0 !== g2.length && a2.push({ event: b2, listeners: g2 }); } var xf = /\r\n?/g, yf = /\u0000|\uFFFD/g; function zf(a2) { return ("string" === typeof a2 ? a2 : "" + a2).replace(xf, "\n").replace(yf, ""); } function Af(a2, b2, c) { b2 = zf(b2); if (zf(a2) !== b2 && c) throw Error(p(425)); } function Bf() { } var Cf = null, Df = null; function Ef(a2, b2) { return "textarea" === a2 || "noscript" === a2 || "string" === typeof b2.children || "number" === typeof b2.children || "object" === typeof b2.dangerouslySetInnerHTML && null !== b2.dangerouslySetInnerHTML && null != b2.dangerouslySetInnerHTML.__html; } var Ff = "function" === typeof setTimeout ? setTimeout : void 0, Gf = "function" === typeof clearTimeout ? clearTimeout : void 0, Hf = "function" === typeof Promise ? Promise : void 0, Jf = "function" === typeof queueMicrotask ? queueMicrotask : "undefined" !== typeof Hf ? function(a2) { return Hf.resolve(null).then(a2).catch(If); } : Ff; function If(a2) { setTimeout(function() { throw a2; }); } function Kf(a2, b2) { var c = b2, d2 = 0; do { var e2 = c.nextSibling; a2.removeChild(c); if (e2 && 8 === e2.nodeType) if (c = e2.data, "/$" === c) { if (0 === d2) { a2.removeChild(e2); bd(b2); return; } d2--; } else "$" !== c && "$?" !== c && "$!" !== c || d2++; c = e2; } while (c); bd(b2); } function Lf(a2) { for (; null != a2; a2 = a2.nextSibling) { var b2 = a2.nodeType; if (1 === b2 || 3 === b2) break; if (8 === b2) { b2 = a2.data; if ("$" === b2 || "$!" === b2 || "$?" === b2) break; if ("/$" === b2) return null; } } return a2; } function Mf(a2) { a2 = a2.previousSibling; for (var b2 = 0; a2; ) { if (8 === a2.nodeType) { var c = a2.data; if ("$" === c || "$!" === c || "$?" === c) { if (0 === b2) return a2; b2--; } else "/$" === c && b2++; } a2 = a2.previousSibling; } return null; } var Nf = Math.random().toString(36).slice(2), Of = "__reactFiber$" + Nf, Pf = "__reactProps$" + Nf, uf = "__reactContainer$" + Nf, of = "__reactEvents$" + Nf, Qf = "__reactListeners$" + Nf, Rf = "__reactHandles$" + Nf; function Wc(a2) { var b2 = a2[Of]; if (b2) return b2; for (var c = a2.parentNode; c; ) { if (b2 = c[uf] || c[Of]) { c = b2.alternate; if (null !== b2.child || null !== c && null !== c.child) for (a2 = Mf(a2); null !== a2; ) { if (c = a2[Of]) return c; a2 = Mf(a2); } return b2; } a2 = c; c = a2.parentNode; } return null; } function Cb(a2) { a2 = a2[Of] || a2[uf]; return !a2 || 5 !== a2.tag && 6 !== a2.tag && 13 !== a2.tag && 3 !== a2.tag ? null : a2; } function ue(a2) { if (5 === a2.tag || 6 === a2.tag) return a2.stateNode; throw Error(p(33)); } function Db(a2) { return a2[Pf] || null; } var Sf = [], Tf = -1; function Uf(a2) { return { current: a2 }; } function E$1(a2) { 0 > Tf || (a2.current = Sf[Tf], Sf[Tf] = null, Tf--); } function G$1(a2, b2) { Tf++; Sf[Tf] = a2.current; a2.current = b2; } var Vf = {}, H$1 = Uf(Vf), Wf = Uf(false), Xf = Vf; function Yf(a2, b2) { var c = a2.type.contextTypes; if (!c) return Vf; var d2 = a2.stateNode; if (d2 && d2.__reactInternalMemoizedUnmaskedChildContext === b2) return d2.__reactInternalMemoizedMaskedChildContext; var e2 = {}, f2; for (f2 in c) e2[f2] = b2[f2]; d2 && (a2 = a2.stateNode, a2.__reactInternalMemoizedUnmaskedChildContext = b2, a2.__reactInternalMemoizedMaskedChildContext = e2); return e2; } function Zf(a2) { a2 = a2.childContextTypes; return null !== a2 && void 0 !== a2; } function $f() { E$1(Wf); E$1(H$1); } function ag(a2, b2, c) { if (H$1.current !== Vf) throw Error(p(168)); G$1(H$1, b2); G$1(Wf, c); } function bg(a2, b2, c) { var d2 = a2.stateNode; b2 = b2.childContextTypes; if ("function" !== typeof d2.getChildContext) return c; d2 = d2.getChildContext(); for (var e2 in d2) if (!(e2 in b2)) throw Error(p(108, Ra(a2) || "Unknown", e2)); return A$1({}, c, d2); } function cg(a2) { a2 = (a2 = a2.stateNode) && a2.__reactInternalMemoizedMergedChildContext || Vf; Xf = H$1.current; G$1(H$1, a2); G$1(Wf, Wf.current); return true; } function dg(a2, b2, c) { var d2 = a2.stateNode; if (!d2) throw Error(p(169)); c ? (a2 = bg(a2, b2, Xf), d2.__reactInternalMemoizedMergedChildContext = a2, E$1(Wf), E$1(H$1), G$1(H$1, a2)) : E$1(Wf); G$1(Wf, c); } var eg = null, fg = false, gg = false; function hg(a2) { null === eg ? eg = [a2] : eg.push(a2); } function ig(a2) { fg = true; hg(a2); } function jg() { if (!gg && null !== eg) { gg = true; var a2 = 0, b2 = C$1; try { var c = eg; for (C$1 = 1; a2 < c.length; a2++) { var d2 = c[a2]; do d2 = d2(true); while (null !== d2); } eg = null; fg = false; } catch (e2) { throw null !== eg && (eg = eg.slice(a2 + 1)), ac(fc, jg), e2; } finally { C$1 = b2, gg = false; } } return null; } var kg = [], lg = 0, mg = null, ng = 0, og = [], pg = 0, qg = null, rg = 1, sg = ""; function tg(a2, b2) { kg[lg++] = ng; kg[lg++] = mg; mg = a2; ng = b2; } function ug(a2, b2, c) { og[pg++] = rg; og[pg++] = sg; og[pg++] = qg; qg = a2; var d2 = rg; a2 = sg; var e2 = 32 - oc(d2) - 1; d2 &= ~(1 << e2); c += 1; var f2 = 32 - oc(b2) + e2; if (30 < f2) { var g2 = e2 - e2 % 5; f2 = (d2 & (1 << g2) - 1).toString(32); d2 >>= g2; e2 -= g2; rg = 1 << 32 - oc(b2) + e2 | c << e2 | d2; sg = f2 + a2; } else rg = 1 << f2 | c << e2 | d2, sg = a2; } function vg(a2) { null !== a2.return && (tg(a2, 1), ug(a2, 1, 0)); } function wg(a2) { for (; a2 === mg; ) mg = kg[--lg], kg[lg] = null, ng = kg[--lg], kg[lg] = null; for (; a2 === qg; ) qg = og[--pg], og[pg] = null, sg = og[--pg], og[pg] = null, rg = og[--pg], og[pg] = null; } var xg = null, yg = null, I$1 = false, zg = null; function Ag(a2, b2) { var c = Bg(5, null, null, 0); c.elementType = "DELETED"; c.stateNode = b2; c.return = a2; b2 = a2.deletions; null === b2 ? (a2.deletions = [c], a2.flags |= 16) : b2.push(c); } function Cg(a2, b2) { switch (a2.tag) { case 5: var c = a2.type; b2 = 1 !== b2.nodeType || c.toLowerCase() !== b2.nodeName.toLowerCase() ? null : b2; return null !== b2 ? (a2.stateNode = b2, xg = a2, yg = Lf(b2.firstChild), true) : false; case 6: return b2 = "" === a2.pendingProps || 3 !== b2.nodeType ? null : b2, null !== b2 ? (a2.stateNode = b2, xg = a2, yg = null, true) : false; case 13: return b2 = 8 !== b2.nodeType ? null : b2, null !== b2 ? (c = null !== qg ? { id: rg, overflow: sg } : null, a2.memoizedState = { dehydrated: b2, treeContext: c, retryLane: 1073741824 }, c = Bg(18, null, null, 0), c.stateNode = b2, c.return = a2, a2.child = c, xg = a2, yg = null, true) : false; default: return false; } } function Dg(a2) { return 0 !== (a2.mode & 1) && 0 === (a2.flags & 128); } function Eg(a2) { if (I$1) { var b2 = yg; if (b2) { var c = b2; if (!Cg(a2, b2)) { if (Dg(a2)) throw Error(p(418)); b2 = Lf(c.nextSibling); var d2 = xg; b2 && Cg(a2, b2) ? Ag(d2, c) : (a2.flags = a2.flags & -4097 | 2, I$1 = false, xg = a2); } } else { if (Dg(a2)) throw Error(p(418)); a2.flags = a2.flags & -4097 | 2; I$1 = false; xg = a2; } } } function Fg(a2) { for (a2 = a2.return; null !== a2 && 5 !== a2.tag && 3 !== a2.tag && 13 !== a2.tag; ) a2 = a2.return; xg = a2; } function Gg(a2) { if (a2 !== xg) return false; if (!I$1) return Fg(a2), I$1 = true, false; var b2; (b2 = 3 !== a2.tag) && !(b2 = 5 !== a2.tag) && (b2 = a2.type, b2 = "head" !== b2 && "body" !== b2 && !Ef(a2.type, a2.memoizedProps)); if (b2 && (b2 = yg)) { if (Dg(a2)) throw Hg(), Error(p(418)); for (; b2; ) Ag(a2, b2), b2 = Lf(b2.nextSibling); } Fg(a2); if (13 === a2.tag) { a2 = a2.memoizedState; a2 = null !== a2 ? a2.dehydrated : null; if (!a2) throw Error(p(317)); a: { a2 = a2.nextSibling; for (b2 = 0; a2; ) { if (8 === a2.nodeType) { var c = a2.data; if ("/$" === c) { if (0 === b2) { yg = Lf(a2.nextSibling); break a; } b2--; } else "$" !== c && "$!" !== c && "$?" !== c || b2++; } a2 = a2.nextSibling; } yg = null; } } else yg = xg ? Lf(a2.stateNode.nextSibling) : null; return true; } function Hg() { for (var a2 = yg; a2; ) a2 = Lf(a2.nextSibling); } function Ig() { yg = xg = null; I$1 = false; } function Jg(a2) { null === zg ? zg = [a2] : zg.push(a2); } var Kg = ua.ReactCurrentBatchConfig; function Lg(a2, b2) { if (a2 && a2.defaultProps) { b2 = A$1({}, b2); a2 = a2.defaultProps; for (var c in a2) void 0 === b2[c] && (b2[c] = a2[c]); return b2; } return b2; } var Mg = Uf(null), Ng = null, Og = null, Pg = null; function Qg() { Pg = Og = Ng = null; } function Rg(a2) { var b2 = Mg.current; E$1(Mg); a2._currentValue = b2; } function Sg(a2, b2, c) { for (; null !== a2; ) { var d2 = a2.alternate; (a2.childLanes & b2) !== b2 ? (a2.childLanes |= b2, null !== d2 && (d2.childLanes |= b2)) : null !== d2 && (d2.childLanes & b2) !== b2 && (d2.childLanes |= b2); if (a2 === c) break; a2 = a2.return; } } function Tg(a2, b2) { Ng = a2; Pg = Og = null; a2 = a2.dependencies; null !== a2 && null !== a2.firstContext && (0 !== (a2.lanes & b2) && (Ug = true), a2.firstContext = null); } function Vg(a2) { var b2 = a2._currentValue; if (Pg !== a2) if (a2 = { context: a2, memoizedValue: b2, next: null }, null === Og) { if (null === Ng) throw Error(p(308)); Og = a2; Ng.dependencies = { lanes: 0, firstContext: a2 }; } else Og = Og.next = a2; return b2; } var Wg = null; function Xg(a2) { null === Wg ? Wg = [a2] : Wg.push(a2); } function Yg(a2, b2, c, d2) { var e2 = b2.interleaved; null === e2 ? (c.next = c, Xg(b2)) : (c.next = e2.next, e2.next = c); b2.interleaved = c; return Zg(a2, d2); } function Zg(a2, b2) { a2.lanes |= b2; var c = a2.alternate; null !== c && (c.lanes |= b2); c = a2; for (a2 = a2.return; null !== a2; ) a2.childLanes |= b2, c = a2.alternate, null !== c && (c.childLanes |= b2), c = a2, a2 = a2.return; return 3 === c.tag ? c.stateNode : null; } var $g = false; function ah(a2) { a2.updateQueue = { baseState: a2.memoizedState, firstBaseUpdate: null, lastBaseUpdate: null, shared: { pending: null, interleaved: null, lanes: 0 }, effects: null }; } function bh(a2, b2) { a2 = a2.updateQueue; b2.updateQueue === a2 && (b2.updateQueue = { baseState: a2.baseState, firstBaseUpdate: a2.firstBaseUpdate, lastBaseUpdate: a2.lastBaseUpdate, shared: a2.shared, effects: a2.effects }); } function ch(a2, b2) { return { eventTime: a2, lane: b2, tag: 0, payload: null, callback: null, next: null }; } function dh(a2, b2, c) { var d2 = a2.updateQueue; if (null === d2) return null; d2 = d2.shared; if (0 !== (K$1 & 2)) { var e2 = d2.pending; null === e2 ? b2.next = b2 : (b2.next = e2.next, e2.next = b2); d2.pending = b2; return Zg(a2, c); } e2 = d2.interleaved; null === e2 ? (b2.next = b2, Xg(d2)) : (b2.next = e2.next, e2.next = b2); d2.interleaved = b2; return Zg(a2, c); } function eh(a2, b2, c) { b2 = b2.updateQueue; if (null !== b2 && (b2 = b2.shared, 0 !== (c & 4194240))) { var d2 = b2.lanes; d2 &= a2.pendingLanes; c |= d2; b2.lanes = c; Cc(a2, c); } } function fh(a2, b2) { var c = a2.updateQueue, d2 = a2.alternate; if (null !== d2 && (d2 = d2.updateQueue, c === d2)) { var e2 = null, f2 = null; c = c.firstBaseUpdate; if (null !== c) { do { var g2 = { eventTime: c.eventTime, lane: c.lane, tag: c.tag, payload: c.payload, callback: c.callback, next: null }; null === f2 ? e2 = f2 = g2 : f2 = f2.next = g2; c = c.next; } while (null !== c); null === f2 ? e2 = f2 = b2 : f2 = f2.next = b2; } else e2 = f2 = b2; c = { baseState: d2.baseState, firstBaseUpdate: e2, lastBaseUpdate: f2, shared: d2.shared, effects: d2.effects }; a2.updateQueue = c; return; } a2 = c.lastBaseUpdate; null === a2 ? c.firstBaseUpdate = b2 : a2.next = b2; c.lastBaseUpdate = b2; } function gh(a2, b2, c, d2) { var e2 = a2.updateQueue; $g = false; var f2 = e2.firstBaseUpdate, g2 = e2.lastBaseUpdate, h2 = e2.shared.pending; if (null !== h2) { e2.shared.pending = null; var k2 = h2, l2 = k2.next; k2.next = null; null === g2 ? f2 = l2 : g2.next = l2; g2 = k2; var m2 = a2.alternate; null !== m2 && (m2 = m2.updateQueue, h2 = m2.lastBaseUpdate, h2 !== g2 && (null === h2 ? m2.firstBaseUpdate = l2 : h2.next = l2, m2.lastBaseUpdate = k2)); } if (null !== f2) { var q2 = e2.baseState; g2 = 0; m2 = l2 = k2 = null; h2 = f2; do { var r2 = h2.lane, y2 = h2.eventTime; if ((d2 & r2) === r2) { null !== m2 && (m2 = m2.next = { eventTime: y2, lane: 0, tag: h2.tag, payload: h2.payload, callback: h2.callback, next: null }); a: { var n2 = a2, t2 = h2; r2 = b2; y2 = c; switch (t2.tag) { case 1: n2 = t2.payload; if ("function" === typeof n2) { q2 = n2.call(y2, q2, r2); break a; } q2 = n2; break a; case 3: n2.flags = n2.flags & -65537 | 128; case 0: n2 = t2.payload; r2 = "function" === typeof n2 ? n2.call(y2, q2, r2) : n2; if (null === r2 || void 0 === r2) break a; q2 = A$1({}, q2, r2); break a; case 2: $g = true; } } null !== h2.callback && 0 !== h2.lane && (a2.flags |= 64, r2 = e2.effects, null === r2 ? e2.effects = [h2] : r2.push(h2)); } else y2 = { eventTime: y2, lane: r2, tag: h2.tag, payload: h2.payload, callback: h2.callback, next: null }, null === m2 ? (l2 = m2 = y2, k2 = q2) : m2 = m2.next = y2, g2 |= r2; h2 = h2.next; if (null === h2) if (h2 = e2.shared.pending, null === h2) break; else r2 = h2, h2 = r2.next, r2.next = null, e2.lastBaseUpdate = r2, e2.shared.pending = null; } while (1); null === m2 && (k2 = q2); e2.baseState = k2; e2.firstBaseUpdate = l2; e2.lastBaseUpdate = m2; b2 = e2.shared.interleaved; if (null !== b2) { e2 = b2; do g2 |= e2.lane, e2 = e2.next; while (e2 !== b2); } else null === f2 && (e2.shared.lanes = 0); hh |= g2; a2.lanes = g2; a2.memoizedState = q2; } } function ih(a2, b2, c) { a2 = b2.effects; b2.effects = null; if (null !== a2) for (b2 = 0; b2 < a2.length; b2++) { var d2 = a2[b2], e2 = d2.callback; if (null !== e2) { d2.callback = null; d2 = c; if ("function" !== typeof e2) throw Error(p(191, e2)); e2.call(d2); } } } var jh = new aa.Component().refs; function kh(a2, b2, c, d2) { b2 = a2.memoizedState; c = c(d2, b2); c = null === c || void 0 === c ? b2 : A$1({}, b2, c); a2.memoizedState = c; 0 === a2.lanes && (a2.updateQueue.baseState = c); } var nh = { isMounted: function(a2) { return (a2 = a2._reactInternals) ? Vb(a2) === a2 : false; }, enqueueSetState: function(a2, b2, c) { a2 = a2._reactInternals; var d2 = L$1(), e2 = lh(a2), f2 = ch(d2, e2); f2.payload = b2; void 0 !== c && null !== c && (f2.callback = c); b2 = dh(a2, f2, e2); null !== b2 && (mh(b2, a2, e2, d2), eh(b2, a2, e2)); }, enqueueReplaceState: function(a2, b2, c) { a2 = a2._reactInternals; var d2 = L$1(), e2 = lh(a2), f2 = ch(d2, e2); f2.tag = 1; f2.payload = b2; void 0 !== c && null !== c && (f2.callback = c); b2 = dh(a2, f2, e2); null !== b2 && (mh(b2, a2, e2, d2), eh(b2, a2, e2)); }, enqueueForceUpdate: function(a2, b2) { a2 = a2._reactInternals; var c = L$1(), d2 = lh(a2), e2 = ch(c, d2); e2.tag = 2; void 0 !== b2 && null !== b2 && (e2.callback = b2); b2 = dh(a2, e2, d2); null !== b2 && (mh(b2, a2, d2, c), eh(b2, a2, d2)); } }; function oh(a2, b2, c, d2, e2, f2, g2) { a2 = a2.stateNode; return "function" === typeof a2.shouldComponentUpdate ? a2.shouldComponentUpdate(d2, f2, g2) : b2.prototype && b2.prototype.isPureReactComponent ? !Ie(c, d2) || !Ie(e2, f2) : true; } function ph(a2, b2, c) { var d2 = false, e2 = Vf; var f2 = b2.contextType; "object" === typeof f2 && null !== f2 ? f2 = Vg(f2) : (e2 = Zf(b2) ? Xf : H$1.current, d2 = b2.contextTypes, f2 = (d2 = null !== d2 && void 0 !== d2) ? Yf(a2, e2) : Vf); b2 = new b2(c, f2); a2.memoizedState = null !== b2.state && void 0 !== b2.state ? b2.state : null; b2.updater = nh; a2.stateNode = b2; b2._reactInternals = a2; d2 && (a2 = a2.stateNode, a2.__reactInternalMemoizedUnmaskedChildContext = e2, a2.__reactInternalMemoizedMaskedChildContext = f2); return b2; } function qh(a2, b2, c, d2) { a2 = b2.state; "function" === typeof b2.componentWillReceiveProps && b2.componentWillReceiveProps(c, d2); "function" === typeof b2.UNSAFE_componentWillReceiveProps && b2.UNSAFE_componentWillReceiveProps(c, d2); b2.state !== a2 && nh.enqueueReplaceState(b2, b2.state, null); } function rh(a2, b2, c, d2) { var e2 = a2.stateNode; e2.props = c; e2.state = a2.memoizedState; e2.refs = jh; ah(a2); var f2 = b2.contextType; "object" === typeof f2 && null !== f2 ? e2.context = Vg(f2) : (f2 = Zf(b2) ? Xf : H$1.current, e2.context = Yf(a2, f2)); e2.state = a2.memoizedState; f2 = b2.getDerivedStateFromProps; "function" === typeof f2 && (kh(a2, b2, f2, c), e2.state = a2.memoizedState); "function" === typeof b2.getDerivedStateFromProps || "function" === typeof e2.getSnapshotBeforeUpdate || "function" !== typeof e2.UNSAFE_componentWillMount && "function" !== typeof e2.componentWillMount || (b2 = e2.state, "function" === typeof e2.componentWillMount && e2.componentWillMount(), "function" === typeof e2.UNSAFE_componentWillMount && e2.UNSAFE_componentWillMount(), b2 !== e2.state && nh.enqueueReplaceState(e2, e2.state, null), gh(a2, c, e2, d2), e2.state = a2.memoizedState); "function" === typeof e2.componentDidMount && (a2.flags |= 4194308); } function sh(a2, b2, c) { a2 = c.ref; if (null !== a2 && "function" !== typeof a2 && "object" !== typeof a2) { if (c._owner) { c = c._owner; if (c) { if (1 !== c.tag) throw Error(p(309)); var d2 = c.stateNode; } if (!d2) throw Error(p(147, a2)); var e2 = d2, f2 = "" + a2; if (null !== b2 && null !== b2.ref && "function" === typeof b2.ref && b2.ref._stringRef === f2) return b2.ref; b2 = function(a3) { var b3 = e2.refs; b3 === jh && (b3 = e2.refs = {}); null === a3 ? delete b3[f2] : b3[f2] = a3; }; b2._stringRef = f2; return b2; } if ("string" !== typeof a2) throw Error(p(284)); if (!c._owner) throw Error(p(290, a2)); } return a2; } function th(a2, b2) { a2 = Object.prototype.toString.call(b2); throw Error(p(31, "[object Object]" === a2 ? "object with keys {" + Object.keys(b2).join(", ") + "}" : a2)); } function uh(a2) { var b2 = a2._init; return b2(a2._payload); } function vh(a2) { function b2(b3, c2) { if (a2) { var d3 = b3.deletions; null === d3 ? (b3.deletions = [c2], b3.flags |= 16) : d3.push(c2); } } function c(c2, d3) { if (!a2) return null; for (; null !== d3; ) b2(c2, d3), d3 = d3.sibling; return null; } function d2(a3, b3) { for (a3 = /* @__PURE__ */ new Map(); null !== b3; ) null !== b3.key ? a3.set(b3.key, b3) : a3.set(b3.index, b3), b3 = b3.sibling; return a3; } function e2(a3, b3) { a3 = wh(a3, b3); a3.index = 0; a3.sibling = null; return a3; } function f2(b3, c2, d3) { b3.index = d3; if (!a2) return b3.flags |= 1048576, c2; d3 = b3.alternate; if (null !== d3) return d3 = d3.index, d3 < c2 ? (b3.flags |= 2, c2) : d3; b3.flags |= 2; return c2; } function g2(b3) { a2 && null === b3.alternate && (b3.flags |= 2); return b3; } function h2(a3, b3, c2, d3) { if (null === b3 || 6 !== b3.tag) return b3 = xh(c2, a3.mode, d3), b3.return = a3, b3; b3 = e2(b3, c2); b3.return = a3; return b3; } function k2(a3, b3, c2, d3) { var f3 = c2.type; if (f3 === ya) return m2(a3, b3, c2.props.children, d3, c2.key); if (null !== b3 && (b3.elementType === f3 || "object" === typeof f3 && null !== f3 && f3.$$typeof === Ha && uh(f3) === b3.type)) return d3 = e2(b3, c2.props), d3.ref = sh(a3, b3, c2), d3.return = a3, d3; d3 = yh(c2.type, c2.key, c2.props, null, a3.mode, d3); d3.ref = sh(a3, b3, c2); d3.return = a3; return d3; } function l2(a3, b3, c2, d3) { if (null === b3 || 4 !== b3.tag || b3.stateNode.containerInfo !== c2.containerInfo || b3.stateNode.implementation !== c2.implementation) return b3 = zh(c2, a3.mode, d3), b3.return = a3, b3; b3 = e2(b3, c2.children || []); b3.return = a3; return b3; } function m2(a3, b3, c2, d3, f3) { if (null === b3 || 7 !== b3.tag) return b3 = Ah(c2, a3.mode, d3, f3), b3.return = a3, b3; b3 = e2(b3, c2); b3.return = a3; return b3; } function q2(a3, b3, c2) { if ("string" === typeof b3 && "" !== b3 || "number" === typeof b3) return b3 = xh("" + b3, a3.mode, c2), b3.return = a3, b3; if ("object" === typeof b3 && null !== b3) { switch (b3.$$typeof) { case va: return c2 = yh(b3.type, b3.key, b3.props, null, a3.mode, c2), c2.ref = sh(a3, null, b3), c2.return = a3, c2; case wa: return b3 = zh(b3, a3.mode, c2), b3.return = a3, b3; case Ha: var d3 = b3._init; return q2(a3, d3(b3._payload), c2); } if (eb(b3) || Ka(b3)) return b3 = Ah(b3, a3.mode, c2, null), b3.return = a3, b3; th(a3, b3); } return null; } function r2(a3, b3, c2, d3) { var e3 = null !== b3 ? b3.key : null; if ("string" === typeof c2 && "" !== c2 || "number" === typeof c2) return null !== e3 ? null : h2(a3, b3, "" + c2, d3); if ("object" === typeof c2 && null !== c2) { switch (c2.$$typeof) { case va: return c2.key === e3 ? k2(a3, b3, c2, d3) : null; case wa: return c2.key === e3 ? l2(a3, b3, c2, d3) : null; case Ha: return e3 = c2._init, r2( a3, b3, e3(c2._payload), d3 ); } if (eb(c2) || Ka(c2)) return null !== e3 ? null : m2(a3, b3, c2, d3, null); th(a3, c2); } return null; } function y2(a3, b3, c2, d3, e3) { if ("string" === typeof d3 && "" !== d3 || "number" === typeof d3) return a3 = a3.get(c2) || null, h2(b3, a3, "" + d3, e3); if ("object" === typeof d3 && null !== d3) { switch (d3.$$typeof) { case va: return a3 = a3.get(null === d3.key ? c2 : d3.key) || null, k2(b3, a3, d3, e3); case wa: return a3 = a3.get(null === d3.key ? c2 : d3.key) || null, l2(b3, a3, d3, e3); case Ha: var f3 = d3._init; return y2(a3, b3, c2, f3(d3._payload), e3); } if (eb(d3) || Ka(d3)) return a3 = a3.get(c2) || null, m2(b3, a3, d3, e3, null); th(b3, d3); } return null; } function n2(e3, g3, h3, k3) { for (var l3 = null, m3 = null, u2 = g3, w2 = g3 = 0, x2 = null; null !== u2 && w2 < h3.length; w2++) { u2.index > w2 ? (x2 = u2, u2 = null) : x2 = u2.sibling; var n3 = r2(e3, u2, h3[w2], k3); if (null === n3) { null === u2 && (u2 = x2); break; } a2 && u2 && null === n3.alternate && b2(e3, u2); g3 = f2(n3, g3, w2); null === m3 ? l3 = n3 : m3.sibling = n3; m3 = n3; u2 = x2; } if (w2 === h3.length) return c(e3, u2), I$1 && tg(e3, w2), l3; if (null === u2) { for (; w2 < h3.length; w2++) u2 = q2(e3, h3[w2], k3), null !== u2 && (g3 = f2(u2, g3, w2), null === m3 ? l3 = u2 : m3.sibling = u2, m3 = u2); I$1 && tg(e3, w2); return l3; } for (u2 = d2(e3, u2); w2 < h3.length; w2++) x2 = y2(u2, e3, w2, h3[w2], k3), null !== x2 && (a2 && null !== x2.alternate && u2.delete(null === x2.key ? w2 : x2.key), g3 = f2(x2, g3, w2), null === m3 ? l3 = x2 : m3.sibling = x2, m3 = x2); a2 && u2.forEach(function(a3) { return b2(e3, a3); }); I$1 && tg(e3, w2); return l3; } function t2(e3, g3, h3, k3) { var l3 = Ka(h3); if ("function" !== typeof l3) throw Error(p(150)); h3 = l3.call(h3); if (null == h3) throw Error(p(151)); for (var u2 = l3 = null, m3 = g3, w2 = g3 = 0, x2 = null, n3 = h3.next(); null !== m3 && !n3.done; w2++, n3 = h3.next()) { m3.index > w2 ? (x2 = m3, m3 = null) : x2 = m3.sibling; var t3 = r2(e3, m3, n3.value, k3); if (null === t3) { null === m3 && (m3 = x2); break; } a2 && m3 && null === t3.alternate && b2(e3, m3); g3 = f2(t3, g3, w2); null === u2 ? l3 = t3 : u2.sibling = t3; u2 = t3; m3 = x2; } if (n3.done) return c( e3, m3 ), I$1 && tg(e3, w2), l3; if (null === m3) { for (; !n3.done; w2++, n3 = h3.next()) n3 = q2(e3, n3.value, k3), null !== n3 && (g3 = f2(n3, g3, w2), null === u2 ? l3 = n3 : u2.sibling = n3, u2 = n3); I$1 && tg(e3, w2); return l3; } for (m3 = d2(e3, m3); !n3.done; w2++, n3 = h3.next()) n3 = y2(m3, e3, w2, n3.value, k3), null !== n3 && (a2 && null !== n3.alternate && m3.delete(null === n3.key ? w2 : n3.key), g3 = f2(n3, g3, w2), null === u2 ? l3 = n3 : u2.sibling = n3, u2 = n3); a2 && m3.forEach(function(a3) { return b2(e3, a3); }); I$1 && tg(e3, w2); return l3; } function J2(a3, d3, f3, h3) { "object" === typeof f3 && null !== f3 && f3.type === ya && null === f3.key && (f3 = f3.props.children); if ("object" === typeof f3 && null !== f3) { switch (f3.$$typeof) { case va: a: { for (var k3 = f3.key, l3 = d3; null !== l3; ) { if (l3.key === k3) { k3 = f3.type; if (k3 === ya) { if (7 === l3.tag) { c(a3, l3.sibling); d3 = e2(l3, f3.props.children); d3.return = a3; a3 = d3; break a; } } else if (l3.elementType === k3 || "object" === typeof k3 && null !== k3 && k3.$$typeof === Ha && uh(k3) === l3.type) { c(a3, l3.sibling); d3 = e2(l3, f3.props); d3.ref = sh(a3, l3, f3); d3.return = a3; a3 = d3; break a; } c(a3, l3); break; } else b2(a3, l3); l3 = l3.sibling; } f3.type === ya ? (d3 = Ah(f3.props.children, a3.mode, h3, f3.key), d3.return = a3, a3 = d3) : (h3 = yh(f3.type, f3.key, f3.props, null, a3.mode, h3), h3.ref = sh(a3, d3, f3), h3.return = a3, a3 = h3); } return g2(a3); case wa: a: { for (l3 = f3.key; null !== d3; ) { if (d3.key === l3) if (4 === d3.tag && d3.stateNode.containerInfo === f3.containerInfo && d3.stateNode.implementation === f3.implementation) { c(a3, d3.sibling); d3 = e2(d3, f3.children || []); d3.return = a3; a3 = d3; break a; } else { c(a3, d3); break; } else b2(a3, d3); d3 = d3.sibling; } d3 = zh(f3, a3.mode, h3); d3.return = a3; a3 = d3; } return g2(a3); case Ha: return l3 = f3._init, J2(a3, d3, l3(f3._payload), h3); } if (eb(f3)) return n2(a3, d3, f3, h3); if (Ka(f3)) return t2(a3, d3, f3, h3); th(a3, f3); } return "string" === typeof f3 && "" !== f3 || "number" === typeof f3 ? (f3 = "" + f3, null !== d3 && 6 === d3.tag ? (c(a3, d3.sibling), d3 = e2(d3, f3), d3.return = a3, a3 = d3) : (c(a3, d3), d3 = xh(f3, a3.mode, h3), d3.return = a3, a3 = d3), g2(a3)) : c(a3, d3); } return J2; } var Bh = vh(true), Ch = vh(false), Dh = {}, Eh = Uf(Dh), Fh = Uf(Dh), Gh = Uf(Dh); function Hh(a2) { if (a2 === Dh) throw Error(p(174)); return a2; } function Ih(a2, b2) { G$1(Gh, b2); G$1(Fh, a2); G$1(Eh, Dh); a2 = b2.nodeType; switch (a2) { case 9: case 11: b2 = (b2 = b2.documentElement) ? b2.namespaceURI : lb(null, ""); break; default: a2 = 8 === a2 ? b2.parentNode : b2, b2 = a2.namespaceURI || null, a2 = a2.tagName, b2 = lb(b2, a2); } E$1(Eh); G$1(Eh, b2); } function Jh() { E$1(Eh); E$1(Fh); E$1(Gh); } function Kh(a2) { Hh(Gh.current); var b2 = Hh(Eh.current); var c = lb(b2, a2.type); b2 !== c && (G$1(Fh, a2), G$1(Eh, c)); } function Lh(a2) { Fh.current === a2 && (E$1(Eh), E$1(Fh)); } var M$1 = Uf(0); function Mh(a2) { for (var b2 = a2; null !== b2; ) { if (13 === b2.tag) { var c = b2.memoizedState; if (null !== c && (c = c.dehydrated, null === c || "$?" === c.data || "$!" === c.data)) return b2; } else if (19 === b2.tag && void 0 !== b2.memoizedProps.revealOrder) { if (0 !== (b2.flags & 128)) return b2; } else if (null !== b2.child) { b2.child.return = b2; b2 = b2.child; continue; } if (b2 === a2) break; for (; null === b2.sibling; ) { if (null === b2.return || b2.return === a2) return null; b2 = b2.return; } b2.sibling.return = b2.return; b2 = b2.sibling; } return null; } var Nh = []; function Oh() { for (var a2 = 0; a2 < Nh.length; a2++) Nh[a2]._workInProgressVersionPrimary = null; Nh.length = 0; } var Ph = ua.ReactCurrentDispatcher, Qh = ua.ReactCurrentBatchConfig, Rh = 0, N$1 = null, O$1 = null, P$1 = null, Sh = false, Th = false, Uh = 0, Vh = 0; function Q$1() { throw Error(p(321)); } function Wh(a2, b2) { if (null === b2) return false; for (var c = 0; c < b2.length && c < a2.length; c++) if (!He(a2[c], b2[c])) return false; return true; } function Xh(a2, b2, c, d2, e2, f2) { Rh = f2; N$1 = b2; b2.memoizedState = null; b2.updateQueue = null; b2.lanes = 0; Ph.current = null === a2 || null === a2.memoizedState ? Yh : Zh; a2 = c(d2, e2); if (Th) { f2 = 0; do { Th = false; Uh = 0; if (25 <= f2) throw Error(p(301)); f2 += 1; P$1 = O$1 = null; b2.updateQueue = null; Ph.current = $h; a2 = c(d2, e2); } while (Th); } Ph.current = ai; b2 = null !== O$1 && null !== O$1.next; Rh = 0; P$1 = O$1 = N$1 = null; Sh = false; if (b2) throw Error(p(300)); return a2; } function bi() { var a2 = 0 !== Uh; Uh = 0; return a2; } function ci() { var a2 = { memoizedState: null, baseState: null, baseQueue: null, queue: null, next: null }; null === P$1 ? N$1.memoizedState = P$1 = a2 : P$1 = P$1.next = a2; return P$1; } function di() { if (null === O$1) { var a2 = N$1.alternate; a2 = null !== a2 ? a2.memoizedState : null; } else a2 = O$1.next; var b2 = null === P$1 ? N$1.memoizedState : P$1.next; if (null !== b2) P$1 = b2, O$1 = a2; else { if (null === a2) throw Error(p(310)); O$1 = a2; a2 = { memoizedState: O$1.memoizedState, baseState: O$1.baseState, baseQueue: O$1.baseQueue, queue: O$1.queue, next: null }; null === P$1 ? N$1.memoizedState = P$1 = a2 : P$1 = P$1.next = a2; } return P$1; } function ei(a2, b2) { return "function" === typeof b2 ? b2(a2) : b2; } function fi(a2) { var b2 = di(), c = b2.queue; if (null === c) throw Error(p(311)); c.lastRenderedReducer = a2; var d2 = O$1, e2 = d2.baseQueue, f2 = c.pending; if (null !== f2) { if (null !== e2) { var g2 = e2.next; e2.next = f2.next; f2.next = g2; } d2.baseQueue = e2 = f2; c.pending = null; } if (null !== e2) { f2 = e2.next; d2 = d2.baseState; var h2 = g2 = null, k2 = null, l2 = f2; do { var m2 = l2.lane; if ((Rh & m2) === m2) null !== k2 && (k2 = k2.next = { lane: 0, action: l2.action, hasEagerState: l2.hasEagerState, eagerState: l2.eagerState, next: null }), d2 = l2.hasEagerState ? l2.eagerState : a2(d2, l2.action); else { var q2 = { lane: m2, action: l2.action, hasEagerState: l2.hasEagerState, eagerState: l2.eagerState, next: null }; null === k2 ? (h2 = k2 = q2, g2 = d2) : k2 = k2.next = q2; N$1.lanes |= m2; hh |= m2; } l2 = l2.next; } while (null !== l2 && l2 !== f2); null === k2 ? g2 = d2 : k2.next = h2; He(d2, b2.memoizedState) || (Ug = true); b2.memoizedState = d2; b2.baseState = g2; b2.baseQueue = k2; c.lastRenderedState = d2; } a2 = c.interleaved; if (null !== a2) { e2 = a2; do f2 = e2.lane, N$1.lanes |= f2, hh |= f2, e2 = e2.next; while (e2 !== a2); } else null === e2 && (c.lanes = 0); return [b2.memoizedState, c.dispatch]; } function gi(a2) { var b2 = di(), c = b2.queue; if (null === c) throw Error(p(311)); c.lastRenderedReducer = a2; var d2 = c.dispatch, e2 = c.pending, f2 = b2.memoizedState; if (null !== e2) { c.pending = null; var g2 = e2 = e2.next; do f2 = a2(f2, g2.action), g2 = g2.next; while (g2 !== e2); He(f2, b2.memoizedState) || (Ug = true); b2.memoizedState = f2; null === b2.baseQueue && (b2.baseState = f2); c.lastRenderedState = f2; } return [f2, d2]; } function hi() { } function ii(a2, b2) { var c = N$1, d2 = di(), e2 = b2(), f2 = !He(d2.memoizedState, e2); f2 && (d2.memoizedState = e2, Ug = true); d2 = d2.queue; ji(ki.bind(null, c, d2, a2), [a2]); if (d2.getSnapshot !== b2 || f2 || null !== P$1 && P$1.memoizedState.tag & 1) { c.flags |= 2048; li(9, mi.bind(null, c, d2, e2, b2), void 0, null); if (null === R$1) throw Error(p(349)); 0 !== (Rh & 30) || ni(c, b2, e2); } return e2; } function ni(a2, b2, c) { a2.flags |= 16384; a2 = { getSnapshot: b2, value: c }; b2 = N$1.updateQueue; null === b2 ? (b2 = { lastEffect: null, stores: null }, N$1.updateQueue = b2, b2.stores = [a2]) : (c = b2.stores, null === c ? b2.stores = [a2] : c.push(a2)); } function mi(a2, b2, c, d2) { b2.value = c; b2.getSnapshot = d2; oi(b2) && pi(a2); } function ki(a2, b2, c) { return c(function() { oi(b2) && pi(a2); }); } function oi(a2) { var b2 = a2.getSnapshot; a2 = a2.value; try { var c = b2(); return !He(a2, c); } catch (d2) { return true; } } function pi(a2) { var b2 = Zg(a2, 1); null !== b2 && mh(b2, a2, 1, -1); } function qi(a2) { var b2 = ci(); "function" === typeof a2 && (a2 = a2()); b2.memoizedState = b2.baseState = a2; a2 = { pending: null, interleaved: null, lanes: 0, dispatch: null, lastRenderedReducer: ei, lastRenderedState: a2 }; b2.queue = a2; a2 = a2.dispatch = ri.bind(null, N$1, a2); return [b2.memoizedState, a2]; } function li(a2, b2, c, d2) { a2 = { tag: a2, create: b2, destroy: c, deps: d2, next: null }; b2 = N$1.updateQueue; null === b2 ? (b2 = { lastEffect: null, stores: null }, N$1.updateQueue = b2, b2.lastEffect = a2.next = a2) : (c = b2.lastEffect, null === c ? b2.lastEffect = a2.next = a2 : (d2 = c.next, c.next = a2, a2.next = d2, b2.lastEffect = a2)); return a2; } function si() { return di().memoizedState; } function ti(a2, b2, c, d2) { var e2 = ci(); N$1.flags |= a2; e2.memoizedState = li(1 | b2, c, void 0, void 0 === d2 ? null : d2); } function ui(a2, b2, c, d2) { var e2 = di(); d2 = void 0 === d2 ? null : d2; var f2 = void 0; if (null !== O$1) { var g2 = O$1.memoizedState; f2 = g2.destroy; if (null !== d2 && Wh(d2, g2.deps)) { e2.memoizedState = li(b2, c, f2, d2); return; } } N$1.flags |= a2; e2.memoizedState = li(1 | b2, c, f2, d2); } function vi(a2, b2) { return ti(8390656, 8, a2, b2); } function ji(a2, b2) { return ui(2048, 8, a2, b2); } function wi(a2, b2) { return ui(4, 2, a2, b2); } function xi(a2, b2) { return ui(4, 4, a2, b2); } function yi(a2, b2) { if ("function" === typeof b2) return a2 = a2(), b2(a2), function() { b2(null); }; if (null !== b2 && void 0 !== b2) return a2 = a2(), b2.current = a2, function() { b2.current = null; }; } function zi(a2, b2, c) { c = null !== c && void 0 !== c ? c.concat([a2]) : null; return ui(4, 4, yi.bind(null, b2, a2), c); } function Ai() { } function Bi(a2, b2) { var c = di(); b2 = void 0 === b2 ? null : b2; var d2 = c.memoizedState; if (null !== d2 && null !== b2 && Wh(b2, d2[1])) return d2[0]; c.memoizedState = [a2, b2]; return a2; } function Ci(a2, b2) { var c = di(); b2 = void 0 === b2 ? null : b2; var d2 = c.memoizedState; if (null !== d2 && null !== b2 && Wh(b2, d2[1])) return d2[0]; a2 = a2(); c.memoizedState = [a2, b2]; return a2; } function Di(a2, b2, c) { if (0 === (Rh & 21)) return a2.baseState && (a2.baseState = false, Ug = true), a2.memoizedState = c; He(c, b2) || (c = yc(), N$1.lanes |= c, hh |= c, a2.baseState = true); return b2; } function Ei(a2, b2) { var c = C$1; C$1 = 0 !== c && 4 > c ? c : 4; a2(true); var d2 = Qh.transition; Qh.transition = {}; try { a2(false), b2(); } finally { C$1 = c, Qh.transition = d2; } } function Fi() { return di().memoizedState; } function Gi(a2, b2, c) { var d2 = lh(a2); c = { lane: d2, action: c, hasEagerState: false, eagerState: null, next: null }; if (Hi(a2)) Ii(b2, c); else if (c = Yg(a2, b2, c, d2), null !== c) { var e2 = L$1(); mh(c, a2, d2, e2); Ji(c, b2, d2); } } function ri(a2, b2, c) { var d2 = lh(a2), e2 = { lane: d2, action: c, hasEagerState: false, eagerState: null, next: null }; if (Hi(a2)) Ii(b2, e2); else { var f2 = a2.alternate; if (0 === a2.lanes && (null === f2 || 0 === f2.lanes) && (f2 = b2.lastRenderedReducer, null !== f2)) try { var g2 = b2.lastRenderedState, h2 = f2(g2, c); e2.hasEagerState = true; e2.eagerState = h2; if (He(h2, g2)) { var k2 = b2.interleaved; null === k2 ? (e2.next = e2, Xg(b2)) : (e2.next = k2.next, k2.next = e2); b2.interleaved = e2; return; } } catch (l2) { } finally { } c = Yg(a2, b2, e2, d2); null !== c && (e2 = L$1(), mh(c, a2, d2, e2), Ji(c, b2, d2)); } } function Hi(a2) { var b2 = a2.alternate; return a2 === N$1 || null !== b2 && b2 === N$1; } function Ii(a2, b2) { Th = Sh = true; var c = a2.pending; null === c ? b2.next = b2 : (b2.next = c.next, c.next = b2); a2.pending = b2; } function Ji(a2, b2, c) { if (0 !== (c & 4194240)) { var d2 = b2.lanes; d2 &= a2.pendingLanes; c |= d2; b2.lanes = c; Cc(a2, c); } } var ai = { readContext: Vg, useCallback: Q$1, useContext: Q$1, useEffect: Q$1, useImperativeHandle: Q$1, useInsertionEffect: Q$1, useLayoutEffect: Q$1, useMemo: Q$1, useReducer: Q$1, useRef: Q$1, useState: Q$1, useDebugValue: Q$1, useDeferredValue: Q$1, useTransition: Q$1, useMutableSource: Q$1, useSyncExternalStore: Q$1, useId: Q$1, unstable_isNewReconciler: false }, Yh = { readContext: Vg, useCallback: function(a2, b2) { ci().memoizedState = [a2, void 0 === b2 ? null : b2]; return a2; }, useContext: Vg, useEffect: vi, useImperativeHandle: function(a2, b2, c) { c = null !== c && void 0 !== c ? c.concat([a2]) : null; return ti( 4194308, 4, yi.bind(null, b2, a2), c ); }, useLayoutEffect: function(a2, b2) { return ti(4194308, 4, a2, b2); }, useInsertionEffect: function(a2, b2) { return ti(4, 2, a2, b2); }, useMemo: function(a2, b2) { var c = ci(); b2 = void 0 === b2 ? null : b2; a2 = a2(); c.memoizedState = [a2, b2]; return a2; }, useReducer: function(a2, b2, c) { var d2 = ci(); b2 = void 0 !== c ? c(b2) : b2; d2.memoizedState = d2.baseState = b2; a2 = { pending: null, interleaved: null, lanes: 0, dispatch: null, lastRenderedReducer: a2, lastRenderedState: b2 }; d2.queue = a2; a2 = a2.dispatch = Gi.bind(null, N$1, a2); return [d2.memoizedState, a2]; }, useRef: function(a2) { var b2 = ci(); a2 = { current: a2 }; return b2.memoizedState = a2; }, useState: qi, useDebugValue: Ai, useDeferredValue: function(a2) { return ci().memoizedState = a2; }, useTransition: function() { var a2 = qi(false), b2 = a2[0]; a2 = Ei.bind(null, a2[1]); ci().memoizedState = a2; return [b2, a2]; }, useMutableSource: function() { }, useSyncExternalStore: function(a2, b2, c) { var d2 = N$1, e2 = ci(); if (I$1) { if (void 0 === c) throw Error(p(407)); c = c(); } else { c = b2(); if (null === R$1) throw Error(p(349)); 0 !== (Rh & 30) || ni(d2, b2, c); } e2.memoizedState = c; var f2 = { value: c, getSnapshot: b2 }; e2.queue = f2; vi(ki.bind( null, d2, f2, a2 ), [a2]); d2.flags |= 2048; li(9, mi.bind(null, d2, f2, c, b2), void 0, null); return c; }, useId: function() { var a2 = ci(), b2 = R$1.identifierPrefix; if (I$1) { var c = sg; var d2 = rg; c = (d2 & ~(1 << 32 - oc(d2) - 1)).toString(32) + c; b2 = ":" + b2 + "R" + c; c = Uh++; 0 < c && (b2 += "H" + c.toString(32)); b2 += ":"; } else c = Vh++, b2 = ":" + b2 + "r" + c.toString(32) + ":"; return a2.memoizedState = b2; }, unstable_isNewReconciler: false }, Zh = { readContext: Vg, useCallback: Bi, useContext: Vg, useEffect: ji, useImperativeHandle: zi, useInsertionEffect: wi, useLayoutEffect: xi, useMemo: Ci, useReducer: fi, useRef: si, useState: function() { return fi(ei); }, useDebugValue: Ai, useDeferredValue: function(a2) { var b2 = di(); return Di(b2, O$1.memoizedState, a2); }, useTransition: function() { var a2 = fi(ei)[0], b2 = di().memoizedState; return [a2, b2]; }, useMutableSource: hi, useSyncExternalStore: ii, useId: Fi, unstable_isNewReconciler: false }, $h = { readContext: Vg, useCallback: Bi, useContext: Vg, useEffect: ji, useImperativeHandle: zi, useInsertionEffect: wi, useLayoutEffect: xi, useMemo: Ci, useReducer: gi, useRef: si, useState: function() { return gi(ei); }, useDebugValue: Ai, useDeferredValue: function(a2) { var b2 = di(); return null === O$1 ? b2.memoizedState = a2 : Di(b2, O$1.memoizedState, a2); }, useTransition: function() { var a2 = gi(ei)[0], b2 = di().memoizedState; return [a2, b2]; }, useMutableSource: hi, useSyncExternalStore: ii, useId: Fi, unstable_isNewReconciler: false }; function Ki(a2, b2) { try { var c = "", d2 = b2; do c += Pa(d2), d2 = d2.return; while (d2); var e2 = c; } catch (f2) { e2 = "\nError generating stack: " + f2.message + "\n" + f2.stack; } return { value: a2, source: b2, stack: e2, digest: null }; } function Li(a2, b2, c) { return { value: a2, source: null, stack: null != c ? c : null, digest: null != b2 ? b2 : null }; } function Mi(a2, b2) { try { console.error(b2.value); } catch (c) { setTimeout(function() { throw c; }); } } var Ni = "function" === typeof WeakMap ? WeakMap : Map; function Oi(a2, b2, c) { c = ch(-1, c); c.tag = 3; c.payload = { element: null }; var d2 = b2.value; c.callback = function() { Pi || (Pi = true, Qi = d2); Mi(a2, b2); }; return c; } function Ri(a2, b2, c) { c = ch(-1, c); c.tag = 3; var d2 = a2.type.getDerivedStateFromError; if ("function" === typeof d2) { var e2 = b2.value; c.payload = function() { return d2(e2); }; c.callback = function() { Mi(a2, b2); }; } var f2 = a2.stateNode; null !== f2 && "function" === typeof f2.componentDidCatch && (c.callback = function() { Mi(a2, b2); "function" !== typeof d2 && (null === Si ? Si = /* @__PURE__ */ new Set([this]) : Si.add(this)); var c2 = b2.stack; this.componentDidCatch(b2.value, { componentStack: null !== c2 ? c2 : "" }); }); return c; } function Ti(a2, b2, c) { var d2 = a2.pingCache; if (null === d2) { d2 = a2.pingCache = new Ni(); var e2 = /* @__PURE__ */ new Set(); d2.set(b2, e2); } else e2 = d2.get(b2), void 0 === e2 && (e2 = /* @__PURE__ */ new Set(), d2.set(b2, e2)); e2.has(c) || (e2.add(c), a2 = Ui.bind(null, a2, b2, c), b2.then(a2, a2)); } function Vi(a2) { do { var b2; if (b2 = 13 === a2.tag) b2 = a2.memoizedState, b2 = null !== b2 ? null !== b2.dehydrated ? true : false : true; if (b2) return a2; a2 = a2.return; } while (null !== a2); return null; } function Wi(a2, b2, c, d2, e2) { if (0 === (a2.mode & 1)) return a2 === b2 ? a2.flags |= 65536 : (a2.flags |= 128, c.flags |= 131072, c.flags &= -52805, 1 === c.tag && (null === c.alternate ? c.tag = 17 : (b2 = ch(-1, 1), b2.tag = 2, dh(c, b2, 1))), c.lanes |= 1), a2; a2.flags |= 65536; a2.lanes = e2; return a2; } var Xi = ua.ReactCurrentOwner, Ug = false; function Yi(a2, b2, c, d2) { b2.child = null === a2 ? Ch(b2, null, c, d2) : Bh(b2, a2.child, c, d2); } function Zi(a2, b2, c, d2, e2) { c = c.render; var f2 = b2.ref; Tg(b2, e2); d2 = Xh(a2, b2, c, d2, f2, e2); c = bi(); if (null !== a2 && !Ug) return b2.updateQueue = a2.updateQueue, b2.flags &= -2053, a2.lanes &= ~e2, $i(a2, b2, e2); I$1 && c && vg(b2); b2.flags |= 1; Yi(a2, b2, d2, e2); return b2.child; } function aj(a2, b2, c, d2, e2) { if (null === a2) { var f2 = c.type; if ("function" === typeof f2 && !bj(f2) && void 0 === f2.defaultProps && null === c.compare && void 0 === c.defaultProps) return b2.tag = 15, b2.type = f2, cj(a2, b2, f2, d2, e2); a2 = yh(c.type, null, d2, b2, b2.mode, e2); a2.ref = b2.ref; a2.return = b2; return b2.child = a2; } f2 = a2.child; if (0 === (a2.lanes & e2)) { var g2 = f2.memoizedProps; c = c.compare; c = null !== c ? c : Ie; if (c(g2, d2) && a2.ref === b2.ref) return $i(a2, b2, e2); } b2.flags |= 1; a2 = wh(f2, d2); a2.ref = b2.ref; a2.return = b2; return b2.child = a2; } function cj(a2, b2, c, d2, e2) { if (null !== a2) { var f2 = a2.memoizedProps; if (Ie(f2, d2) && a2.ref === b2.ref) if (Ug = false, b2.pendingProps = d2 = f2, 0 !== (a2.lanes & e2)) 0 !== (a2.flags & 131072) && (Ug = true); else return b2.lanes = a2.lanes, $i(a2, b2, e2); } return dj(a2, b2, c, d2, e2); } function ej(a2, b2, c) { var d2 = b2.pendingProps, e2 = d2.children, f2 = null !== a2 ? a2.memoizedState : null; if ("hidden" === d2.mode) if (0 === (b2.mode & 1)) b2.memoizedState = { baseLanes: 0, cachePool: null, transitions: null }, G$1(fj, gj), gj |= c; else { if (0 === (c & 1073741824)) return a2 = null !== f2 ? f2.baseLanes | c : c, b2.lanes = b2.childLanes = 1073741824, b2.memoizedState = { baseLanes: a2, cachePool: null, transitions: null }, b2.updateQueue = null, G$1(fj, gj), gj |= a2, null; b2.memoizedState = { baseLanes: 0, cachePool: null, transitions: null }; d2 = null !== f2 ? f2.baseLanes : c; G$1(fj, gj); gj |= d2; } else null !== f2 ? (d2 = f2.baseLanes | c, b2.memoizedState = null) : d2 = c, G$1(fj, gj), gj |= d2; Yi(a2, b2, e2, c); return b2.child; } function hj(a2, b2) { var c = b2.ref; if (null === a2 && null !== c || null !== a2 && a2.ref !== c) b2.flags |= 512, b2.flags |= 2097152; } function dj(a2, b2, c, d2, e2) { var f2 = Zf(c) ? Xf : H$1.current; f2 = Yf(b2, f2); Tg(b2, e2); c = Xh(a2, b2, c, d2, f2, e2); d2 = bi(); if (null !== a2 && !Ug) return b2.updateQueue = a2.updateQueue, b2.flags &= -2053, a2.lanes &= ~e2, $i(a2, b2, e2); I$1 && d2 && vg(b2); b2.flags |= 1; Yi(a2, b2, c, e2); return b2.child; } function ij(a2, b2, c, d2, e2) { if (Zf(c)) { var f2 = true; cg(b2); } else f2 = false; Tg(b2, e2); if (null === b2.stateNode) jj(a2, b2), ph(b2, c, d2), rh(b2, c, d2, e2), d2 = true; else if (null === a2) { var g2 = b2.stateNode, h2 = b2.memoizedProps; g2.props = h2; var k2 = g2.context, l2 = c.contextType; "object" === typeof l2 && null !== l2 ? l2 = Vg(l2) : (l2 = Zf(c) ? Xf : H$1.current, l2 = Yf(b2, l2)); var m2 = c.getDerivedStateFromProps, q2 = "function" === typeof m2 || "function" === typeof g2.getSnapshotBeforeUpdate; q2 || "function" !== typeof g2.UNSAFE_componentWillReceiveProps && "function" !== typeof g2.componentWillReceiveProps || (h2 !== d2 || k2 !== l2) && qh(b2, g2, d2, l2); $g = false; var r2 = b2.memoizedState; g2.state = r2; gh(b2, d2, g2, e2); k2 = b2.memoizedState; h2 !== d2 || r2 !== k2 || Wf.current || $g ? ("function" === typeof m2 && (kh(b2, c, m2, d2), k2 = b2.memoizedState), (h2 = $g || oh(b2, c, h2, d2, r2, k2, l2)) ? (q2 || "function" !== typeof g2.UNSAFE_componentWillMount && "function" !== typeof g2.componentWillMount || ("function" === typeof g2.componentWillMount && g2.componentWillMount(), "function" === typeof g2.UNSAFE_componentWillMount && g2.UNSAFE_componentWillMount()), "function" === typeof g2.componentDidMount && (b2.flags |= 4194308)) : ("function" === typeof g2.componentDidMount && (b2.flags |= 4194308), b2.memoizedProps = d2, b2.memoizedState = k2), g2.props = d2, g2.state = k2, g2.context = l2, d2 = h2) : ("function" === typeof g2.componentDidMount && (b2.flags |= 4194308), d2 = false); } else { g2 = b2.stateNode; bh(a2, b2); h2 = b2.memoizedProps; l2 = b2.type === b2.elementType ? h2 : Lg(b2.type, h2); g2.props = l2; q2 = b2.pendingProps; r2 = g2.context; k2 = c.contextType; "object" === typeof k2 && null !== k2 ? k2 = Vg(k2) : (k2 = Zf(c) ? Xf : H$1.current, k2 = Yf(b2, k2)); var y2 = c.getDerivedStateFromProps; (m2 = "function" === typeof y2 || "function" === typeof g2.getSnapshotBeforeUpdate) || "function" !== typeof g2.UNSAFE_componentWillReceiveProps && "function" !== typeof g2.componentWillReceiveProps || (h2 !== q2 || r2 !== k2) && qh(b2, g2, d2, k2); $g = false; r2 = b2.memoizedState; g2.state = r2; gh(b2, d2, g2, e2); var n2 = b2.memoizedState; h2 !== q2 || r2 !== n2 || Wf.current || $g ? ("function" === typeof y2 && (kh(b2, c, y2, d2), n2 = b2.memoizedState), (l2 = $g || oh(b2, c, l2, d2, r2, n2, k2) || false) ? (m2 || "function" !== typeof g2.UNSAFE_componentWillUpdate && "function" !== typeof g2.componentWillUpdate || ("function" === typeof g2.componentWillUpdate && g2.componentWillUpdate(d2, n2, k2), "function" === typeof g2.UNSAFE_componentWillUpdate && g2.UNSAFE_componentWillUpdate(d2, n2, k2)), "function" === typeof g2.componentDidUpdate && (b2.flags |= 4), "function" === typeof g2.getSnapshotBeforeUpdate && (b2.flags |= 1024)) : ("function" !== typeof g2.componentDidUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 4), "function" !== typeof g2.getSnapshotBeforeUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 1024), b2.memoizedProps = d2, b2.memoizedState = n2), g2.props = d2, g2.state = n2, g2.context = k2, d2 = l2) : ("function" !== typeof g2.componentDidUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 4), "function" !== typeof g2.getSnapshotBeforeUpdate || h2 === a2.memoizedProps && r2 === a2.memoizedState || (b2.flags |= 1024), d2 = false); } return kj(a2, b2, c, d2, f2, e2); } function kj(a2, b2, c, d2, e2, f2) { hj(a2, b2); var g2 = 0 !== (b2.flags & 128); if (!d2 && !g2) return e2 && dg(b2, c, false), $i(a2, b2, f2); d2 = b2.stateNode; Xi.current = b2; var h2 = g2 && "function" !== typeof c.getDerivedStateFromError ? null : d2.render(); b2.flags |= 1; null !== a2 && g2 ? (b2.child = Bh(b2, a2.child, null, f2), b2.child = Bh(b2, null, h2, f2)) : Yi(a2, b2, h2, f2); b2.memoizedState = d2.state; e2 && dg(b2, c, true); return b2.child; } function lj(a2) { var b2 = a2.stateNode; b2.pendingContext ? ag(a2, b2.pendingContext, b2.pendingContext !== b2.context) : b2.context && ag(a2, b2.context, false); Ih(a2, b2.containerInfo); } function mj(a2, b2, c, d2, e2) { Ig(); Jg(e2); b2.flags |= 256; Yi(a2, b2, c, d2); return b2.child; } var nj = { dehydrated: null, treeContext: null, retryLane: 0 }; function oj(a2) { return { baseLanes: a2, cachePool: null, transitions: null }; } function pj(a2, b2, c) { var d2 = b2.pendingProps, e2 = M$1.current, f2 = false, g2 = 0 !== (b2.flags & 128), h2; (h2 = g2) || (h2 = null !== a2 && null === a2.memoizedState ? false : 0 !== (e2 & 2)); if (h2) f2 = true, b2.flags &= -129; else if (null === a2 || null !== a2.memoizedState) e2 |= 1; G$1(M$1, e2 & 1); if (null === a2) { Eg(b2); a2 = b2.memoizedState; if (null !== a2 && (a2 = a2.dehydrated, null !== a2)) return 0 === (b2.mode & 1) ? b2.lanes = 1 : "$!" === a2.data ? b2.lanes = 8 : b2.lanes = 1073741824, null; g2 = d2.children; a2 = d2.fallback; return f2 ? (d2 = b2.mode, f2 = b2.child, g2 = { mode: "hidden", children: g2 }, 0 === (d2 & 1) && null !== f2 ? (f2.childLanes = 0, f2.pendingProps = g2) : f2 = qj(g2, d2, 0, null), a2 = Ah(a2, d2, c, null), f2.return = b2, a2.return = b2, f2.sibling = a2, b2.child = f2, b2.child.memoizedState = oj(c), b2.memoizedState = nj, a2) : rj(b2, g2); } e2 = a2.memoizedState; if (null !== e2 && (h2 = e2.dehydrated, null !== h2)) return sj(a2, b2, g2, d2, h2, e2, c); if (f2) { f2 = d2.fallback; g2 = b2.mode; e2 = a2.child; h2 = e2.sibling; var k2 = { mode: "hidden", children: d2.children }; 0 === (g2 & 1) && b2.child !== e2 ? (d2 = b2.child, d2.childLanes = 0, d2.pendingProps = k2, b2.deletions = null) : (d2 = wh(e2, k2), d2.subtreeFlags = e2.subtreeFlags & 14680064); null !== h2 ? f2 = wh(h2, f2) : (f2 = Ah(f2, g2, c, null), f2.flags |= 2); f2.return = b2; d2.return = b2; d2.sibling = f2; b2.child = d2; d2 = f2; f2 = b2.child; g2 = a2.child.memoizedState; g2 = null === g2 ? oj(c) : { baseLanes: g2.baseLanes | c, cachePool: null, transitions: g2.transitions }; f2.memoizedState = g2; f2.childLanes = a2.childLanes & ~c; b2.memoizedState = nj; return d2; } f2 = a2.child; a2 = f2.sibling; d2 = wh(f2, { mode: "visible", children: d2.children }); 0 === (b2.mode & 1) && (d2.lanes = c); d2.return = b2; d2.sibling = null; null !== a2 && (c = b2.deletions, null === c ? (b2.deletions = [a2], b2.flags |= 16) : c.push(a2)); b2.child = d2; b2.memoizedState = null; return d2; } function rj(a2, b2) { b2 = qj({ mode: "visible", children: b2 }, a2.mode, 0, null); b2.return = a2; return a2.child = b2; } function tj(a2, b2, c, d2) { null !== d2 && Jg(d2); Bh(b2, a2.child, null, c); a2 = rj(b2, b2.pendingProps.children); a2.flags |= 2; b2.memoizedState = null; return a2; } function sj(a2, b2, c, d2, e2, f2, g2) { if (c) { if (b2.flags & 256) return b2.flags &= -257, d2 = Li(Error(p(422))), tj(a2, b2, g2, d2); if (null !== b2.memoizedState) return b2.child = a2.child, b2.flags |= 128, null; f2 = d2.fallback; e2 = b2.mode; d2 = qj({ mode: "visible", children: d2.children }, e2, 0, null); f2 = Ah(f2, e2, g2, null); f2.flags |= 2; d2.return = b2; f2.return = b2; d2.sibling = f2; b2.child = d2; 0 !== (b2.mode & 1) && Bh(b2, a2.child, null, g2); b2.child.memoizedState = oj(g2); b2.memoizedState = nj; return f2; } if (0 === (b2.mode & 1)) return tj(a2, b2, g2, null); if ("$!" === e2.data) { d2 = e2.nextSibling && e2.nextSibling.dataset; if (d2) var h2 = d2.dgst; d2 = h2; f2 = Error(p(419)); d2 = Li(f2, d2, void 0); return tj(a2, b2, g2, d2); } h2 = 0 !== (g2 & a2.childLanes); if (Ug || h2) { d2 = R$1; if (null !== d2) { switch (g2 & -g2) { case 4: e2 = 2; break; case 16: e2 = 8; break; case 64: case 128: case 256: case 512: case 1024: case 2048: case 4096: case 8192: case 16384: case 32768: case 65536: case 131072: case 262144: case 524288: case 1048576: case 2097152: case 4194304: case 8388608: case 16777216: case 33554432: case 67108864: e2 = 32; break; case 536870912: e2 = 268435456; break; default: e2 = 0; } e2 = 0 !== (e2 & (d2.suspendedLanes | g2)) ? 0 : e2; 0 !== e2 && e2 !== f2.retryLane && (f2.retryLane = e2, Zg(a2, e2), mh(d2, a2, e2, -1)); } uj(); d2 = Li(Error(p(421))); return tj(a2, b2, g2, d2); } if ("$?" === e2.data) return b2.flags |= 128, b2.child = a2.child, b2 = vj.bind(null, a2), e2._reactRetry = b2, null; a2 = f2.treeContext; yg = Lf(e2.nextSibling); xg = b2; I$1 = true; zg = null; null !== a2 && (og[pg++] = rg, og[pg++] = sg, og[pg++] = qg, rg = a2.id, sg = a2.overflow, qg = b2); b2 = rj(b2, d2.children); b2.flags |= 4096; return b2; } function wj(a2, b2, c) { a2.lanes |= b2; var d2 = a2.alternate; null !== d2 && (d2.lanes |= b2); Sg(a2.return, b2, c); } function xj(a2, b2, c, d2, e2) { var f2 = a2.memoizedState; null === f2 ? a2.memoizedState = { isBackwards: b2, rendering: null, renderingStartTime: 0, last: d2, tail: c, tailMode: e2 } : (f2.isBackwards = b2, f2.rendering = null, f2.renderingStartTime = 0, f2.last = d2, f2.tail = c, f2.tailMode = e2); } function yj(a2, b2, c) { var d2 = b2.pendingProps, e2 = d2.revealOrder, f2 = d2.tail; Yi(a2, b2, d2.children, c); d2 = M$1.current; if (0 !== (d2 & 2)) d2 = d2 & 1 | 2, b2.flags |= 128; else { if (null !== a2 && 0 !== (a2.flags & 128)) a: for (a2 = b2.child; null !== a2; ) { if (13 === a2.tag) null !== a2.memoizedState && wj(a2, c, b2); else if (19 === a2.tag) wj(a2, c, b2); else if (null !== a2.child) { a2.child.return = a2; a2 = a2.child; continue; } if (a2 === b2) break a; for (; null === a2.sibling; ) { if (null === a2.return || a2.return === b2) break a; a2 = a2.return; } a2.sibling.return = a2.return; a2 = a2.sibling; } d2 &= 1; } G$1(M$1, d2); if (0 === (b2.mode & 1)) b2.memoizedState = null; else switch (e2) { case "forwards": c = b2.child; for (e2 = null; null !== c; ) a2 = c.alternate, null !== a2 && null === Mh(a2) && (e2 = c), c = c.sibling; c = e2; null === c ? (e2 = b2.child, b2.child = null) : (e2 = c.sibling, c.sibling = null); xj(b2, false, e2, c, f2); break; case "backwards": c = null; e2 = b2.child; for (b2.child = null; null !== e2; ) { a2 = e2.alternate; if (null !== a2 && null === Mh(a2)) { b2.child = e2; break; } a2 = e2.sibling; e2.sibling = c; c = e2; e2 = a2; } xj(b2, true, c, null, f2); break; case "together": xj(b2, false, null, null, void 0); break; default: b2.memoizedState = null; } return b2.child; } function jj(a2, b2) { 0 === (b2.mode & 1) && null !== a2 && (a2.alternate = null, b2.alternate = null, b2.flags |= 2); } function $i(a2, b2, c) { null !== a2 && (b2.dependencies = a2.dependencies); hh |= b2.lanes; if (0 === (c & b2.childLanes)) return null; if (null !== a2 && b2.child !== a2.child) throw Error(p(153)); if (null !== b2.child) { a2 = b2.child; c = wh(a2, a2.pendingProps); b2.child = c; for (c.return = b2; null !== a2.sibling; ) a2 = a2.sibling, c = c.sibling = wh(a2, a2.pendingProps), c.return = b2; c.sibling = null; } return b2.child; } function zj(a2, b2, c) { switch (b2.tag) { case 3: lj(b2); Ig(); break; case 5: Kh(b2); break; case 1: Zf(b2.type) && cg(b2); break; case 4: Ih(b2, b2.stateNode.containerInfo); break; case 10: var d2 = b2.type._context, e2 = b2.memoizedProps.value; G$1(Mg, d2._currentValue); d2._currentValue = e2; break; case 13: d2 = b2.memoizedState; if (null !== d2) { if (null !== d2.dehydrated) return G$1(M$1, M$1.current & 1), b2.flags |= 128, null; if (0 !== (c & b2.child.childLanes)) return pj(a2, b2, c); G$1(M$1, M$1.current & 1); a2 = $i(a2, b2, c); return null !== a2 ? a2.sibling : null; } G$1(M$1, M$1.current & 1); break; case 19: d2 = 0 !== (c & b2.childLanes); if (0 !== (a2.flags & 128)) { if (d2) return yj(a2, b2, c); b2.flags |= 128; } e2 = b2.memoizedState; null !== e2 && (e2.rendering = null, e2.tail = null, e2.lastEffect = null); G$1(M$1, M$1.current); if (d2) break; else return null; case 22: case 23: return b2.lanes = 0, ej(a2, b2, c); } return $i(a2, b2, c); } var Aj, Bj, Cj, Dj; Aj = function(a2, b2) { for (var c = b2.child; null !== c; ) { if (5 === c.tag || 6 === c.tag) a2.appendChild(c.stateNode); else if (4 !== c.tag && null !== c.child) { c.child.return = c; c = c.child; continue; } if (c === b2) break; for (; null === c.sibling; ) { if (null === c.return || c.return === b2) return; c = c.return; } c.sibling.return = c.return; c = c.sibling; } }; Bj = function() { }; Cj = function(a2, b2, c, d2) { var e2 = a2.memoizedProps; if (e2 !== d2) { a2 = b2.stateNode; Hh(Eh.current); var f2 = null; switch (c) { case "input": e2 = Ya(a2, e2); d2 = Ya(a2, d2); f2 = []; break; case "select": e2 = A$1({}, e2, { value: void 0 }); d2 = A$1({}, d2, { value: void 0 }); f2 = []; break; case "textarea": e2 = gb(a2, e2); d2 = gb(a2, d2); f2 = []; break; default: "function" !== typeof e2.onClick && "function" === typeof d2.onClick && (a2.onclick = Bf); } ub(c, d2); var g2; c = null; for (l2 in e2) if (!d2.hasOwnProperty(l2) && e2.hasOwnProperty(l2) && null != e2[l2]) if ("style" === l2) { var h2 = e2[l2]; for (g2 in h2) h2.hasOwnProperty(g2) && (c || (c = {}), c[g2] = ""); } else "dangerouslySetInnerHTML" !== l2 && "children" !== l2 && "suppressContentEditableWarning" !== l2 && "suppressHydrationWarning" !== l2 && "autoFocus" !== l2 && (ea.hasOwnProperty(l2) ? f2 || (f2 = []) : (f2 = f2 || []).push(l2, null)); for (l2 in d2) { var k2 = d2[l2]; h2 = null != e2 ? e2[l2] : void 0; if (d2.hasOwnProperty(l2) && k2 !== h2 && (null != k2 || null != h2)) if ("style" === l2) if (h2) { for (g2 in h2) !h2.hasOwnProperty(g2) || k2 && k2.hasOwnProperty(g2) || (c || (c = {}), c[g2] = ""); for (g2 in k2) k2.hasOwnProperty(g2) && h2[g2] !== k2[g2] && (c || (c = {}), c[g2] = k2[g2]); } else c || (f2 || (f2 = []), f2.push( l2, c )), c = k2; else "dangerouslySetInnerHTML" === l2 ? (k2 = k2 ? k2.__html : void 0, h2 = h2 ? h2.__html : void 0, null != k2 && h2 !== k2 && (f2 = f2 || []).push(l2, k2)) : "children" === l2 ? "string" !== typeof k2 && "number" !== typeof k2 || (f2 = f2 || []).push(l2, "" + k2) : "suppressContentEditableWarning" !== l2 && "suppressHydrationWarning" !== l2 && (ea.hasOwnProperty(l2) ? (null != k2 && "onScroll" === l2 && D$1("scroll", a2), f2 || h2 === k2 || (f2 = [])) : (f2 = f2 || []).push(l2, k2)); } c && (f2 = f2 || []).push("style", c); var l2 = f2; if (b2.updateQueue = l2) b2.flags |= 4; } }; Dj = function(a2, b2, c, d2) { c !== d2 && (b2.flags |= 4); }; function Ej(a2, b2) { if (!I$1) switch (a2.tailMode) { case "hidden": b2 = a2.tail; for (var c = null; null !== b2; ) null !== b2.alternate && (c = b2), b2 = b2.sibling; null === c ? a2.tail = null : c.sibling = null; break; case "collapsed": c = a2.tail; for (var d2 = null; null !== c; ) null !== c.alternate && (d2 = c), c = c.sibling; null === d2 ? b2 || null === a2.tail ? a2.tail = null : a2.tail.sibling = null : d2.sibling = null; } } function S$1(a2) { var b2 = null !== a2.alternate && a2.alternate.child === a2.child, c = 0, d2 = 0; if (b2) for (var e2 = a2.child; null !== e2; ) c |= e2.lanes | e2.childLanes, d2 |= e2.subtreeFlags & 14680064, d2 |= e2.flags & 14680064, e2.return = a2, e2 = e2.sibling; else for (e2 = a2.child; null !== e2; ) c |= e2.lanes | e2.childLanes, d2 |= e2.subtreeFlags, d2 |= e2.flags, e2.return = a2, e2 = e2.sibling; a2.subtreeFlags |= d2; a2.childLanes = c; return b2; } function Fj(a2, b2, c) { var d2 = b2.pendingProps; wg(b2); switch (b2.tag) { case 2: case 16: case 15: case 0: case 11: case 7: case 8: case 12: case 9: case 14: return S$1(b2), null; case 1: return Zf(b2.type) && $f(), S$1(b2), null; case 3: d2 = b2.stateNode; Jh(); E$1(Wf); E$1(H$1); Oh(); d2.pendingContext && (d2.context = d2.pendingContext, d2.pendingContext = null); if (null === a2 || null === a2.child) Gg(b2) ? b2.flags |= 4 : null === a2 || a2.memoizedState.isDehydrated && 0 === (b2.flags & 256) || (b2.flags |= 1024, null !== zg && (Gj(zg), zg = null)); Bj(a2, b2); S$1(b2); return null; case 5: Lh(b2); var e2 = Hh(Gh.current); c = b2.type; if (null !== a2 && null != b2.stateNode) Cj(a2, b2, c, d2, e2), a2.ref !== b2.ref && (b2.flags |= 512, b2.flags |= 2097152); else { if (!d2) { if (null === b2.stateNode) throw Error(p(166)); S$1(b2); return null; } a2 = Hh(Eh.current); if (Gg(b2)) { d2 = b2.stateNode; c = b2.type; var f2 = b2.memoizedProps; d2[Of] = b2; d2[Pf] = f2; a2 = 0 !== (b2.mode & 1); switch (c) { case "dialog": D$1("cancel", d2); D$1("close", d2); break; case "iframe": case "object": case "embed": D$1("load", d2); break; case "video": case "audio": for (e2 = 0; e2 < lf.length; e2++) D$1(lf[e2], d2); break; case "source": D$1("error", d2); break; case "img": case "image": case "link": D$1( "error", d2 ); D$1("load", d2); break; case "details": D$1("toggle", d2); break; case "input": Za(d2, f2); D$1("invalid", d2); break; case "select": d2._wrapperState = { wasMultiple: !!f2.multiple }; D$1("invalid", d2); break; case "textarea": hb(d2, f2), D$1("invalid", d2); } ub(c, f2); e2 = null; for (var g2 in f2) if (f2.hasOwnProperty(g2)) { var h2 = f2[g2]; "children" === g2 ? "string" === typeof h2 ? d2.textContent !== h2 && (true !== f2.suppressHydrationWarning && Af(d2.textContent, h2, a2), e2 = ["children", h2]) : "number" === typeof h2 && d2.textContent !== "" + h2 && (true !== f2.suppressHydrationWarning && Af( d2.textContent, h2, a2 ), e2 = ["children", "" + h2]) : ea.hasOwnProperty(g2) && null != h2 && "onScroll" === g2 && D$1("scroll", d2); } switch (c) { case "input": Va(d2); db(d2, f2, true); break; case "textarea": Va(d2); jb(d2); break; case "select": case "option": break; default: "function" === typeof f2.onClick && (d2.onclick = Bf); } d2 = e2; b2.updateQueue = d2; null !== d2 && (b2.flags |= 4); } else { g2 = 9 === e2.nodeType ? e2 : e2.ownerDocument; "http://www.w3.org/1999/xhtml" === a2 && (a2 = kb(c)); "http://www.w3.org/1999/xhtml" === a2 ? "script" === c ? (a2 = g2.createElement("div"), a2.innerHTML = "<script><\/script>", a2 = a2.removeChild(a2.firstChild)) : "string" === typeof d2.is ? a2 = g2.createElement(c, { is: d2.is }) : (a2 = g2.createElement(c), "select" === c && (g2 = a2, d2.multiple ? g2.multiple = true : d2.size && (g2.size = d2.size))) : a2 = g2.createElementNS(a2, c); a2[Of] = b2; a2[Pf] = d2; Aj(a2, b2, false, false); b2.stateNode = a2; a: { g2 = vb(c, d2); switch (c) { case "dialog": D$1("cancel", a2); D$1("close", a2); e2 = d2; break; case "iframe": case "object": case "embed": D$1("load", a2); e2 = d2; break; case "video": case "audio": for (e2 = 0; e2 < lf.length; e2++) D$1(lf[e2], a2); e2 = d2; break; case "source": D$1("error", a2); e2 = d2; break; case "img": case "image": case "link": D$1( "error", a2 ); D$1("load", a2); e2 = d2; break; case "details": D$1("toggle", a2); e2 = d2; break; case "input": Za(a2, d2); e2 = Ya(a2, d2); D$1("invalid", a2); break; case "option": e2 = d2; break; case "select": a2._wrapperState = { wasMultiple: !!d2.multiple }; e2 = A$1({}, d2, { value: void 0 }); D$1("invalid", a2); break; case "textarea": hb(a2, d2); e2 = gb(a2, d2); D$1("invalid", a2); break; default: e2 = d2; } ub(c, e2); h2 = e2; for (f2 in h2) if (h2.hasOwnProperty(f2)) { var k2 = h2[f2]; "style" === f2 ? sb(a2, k2) : "dangerouslySetInnerHTML" === f2 ? (k2 = k2 ? k2.__html : void 0, null != k2 && nb(a2, k2)) : "children" === f2 ? "string" === typeof k2 ? ("textarea" !== c || "" !== k2) && ob(a2, k2) : "number" === typeof k2 && ob(a2, "" + k2) : "suppressContentEditableWarning" !== f2 && "suppressHydrationWarning" !== f2 && "autoFocus" !== f2 && (ea.hasOwnProperty(f2) ? null != k2 && "onScroll" === f2 && D$1("scroll", a2) : null != k2 && ta(a2, f2, k2, g2)); } switch (c) { case "input": Va(a2); db(a2, d2, false); break; case "textarea": Va(a2); jb(a2); break; case "option": null != d2.value && a2.setAttribute("value", "" + Sa(d2.value)); break; case "select": a2.multiple = !!d2.multiple; f2 = d2.value; null != f2 ? fb(a2, !!d2.multiple, f2, false) : null != d2.defaultValue && fb( a2, !!d2.multiple, d2.defaultValue, true ); break; default: "function" === typeof e2.onClick && (a2.onclick = Bf); } switch (c) { case "button": case "input": case "select": case "textarea": d2 = !!d2.autoFocus; break a; case "img": d2 = true; break a; default: d2 = false; } } d2 && (b2.flags |= 4); } null !== b2.ref && (b2.flags |= 512, b2.flags |= 2097152); } S$1(b2); return null; case 6: if (a2 && null != b2.stateNode) Dj(a2, b2, a2.memoizedProps, d2); else { if ("string" !== typeof d2 && null === b2.stateNode) throw Error(p(166)); c = Hh(Gh.current); Hh(Eh.current); if (Gg(b2)) { d2 = b2.stateNode; c = b2.memoizedProps; d2[Of] = b2; if (f2 = d2.nodeValue !== c) { if (a2 = xg, null !== a2) switch (a2.tag) { case 3: Af(d2.nodeValue, c, 0 !== (a2.mode & 1)); break; case 5: true !== a2.memoizedProps.suppressHydrationWarning && Af(d2.nodeValue, c, 0 !== (a2.mode & 1)); } } f2 && (b2.flags |= 4); } else d2 = (9 === c.nodeType ? c : c.ownerDocument).createTextNode(d2), d2[Of] = b2, b2.stateNode = d2; } S$1(b2); return null; case 13: E$1(M$1); d2 = b2.memoizedState; if (null === a2 || null !== a2.memoizedState && null !== a2.memoizedState.dehydrated) { if (I$1 && null !== yg && 0 !== (b2.mode & 1) && 0 === (b2.flags & 128)) Hg(), Ig(), b2.flags |= 98560, f2 = false; else if (f2 = Gg(b2), null !== d2 && null !== d2.dehydrated) { if (null === a2) { if (!f2) throw Error(p(318)); f2 = b2.memoizedState; f2 = null !== f2 ? f2.dehydrated : null; if (!f2) throw Error(p(317)); f2[Of] = b2; } else Ig(), 0 === (b2.flags & 128) && (b2.memoizedState = null), b2.flags |= 4; S$1(b2); f2 = false; } else null !== zg && (Gj(zg), zg = null), f2 = true; if (!f2) return b2.flags & 65536 ? b2 : null; } if (0 !== (b2.flags & 128)) return b2.lanes = c, b2; d2 = null !== d2; d2 !== (null !== a2 && null !== a2.memoizedState) && d2 && (b2.child.flags |= 8192, 0 !== (b2.mode & 1) && (null === a2 || 0 !== (M$1.current & 1) ? 0 === T$1 && (T$1 = 3) : uj())); null !== b2.updateQueue && (b2.flags |= 4); S$1(b2); return null; case 4: return Jh(), Bj(a2, b2), null === a2 && sf(b2.stateNode.containerInfo), S$1(b2), null; case 10: return Rg(b2.type._context), S$1(b2), null; case 17: return Zf(b2.type) && $f(), S$1(b2), null; case 19: E$1(M$1); f2 = b2.memoizedState; if (null === f2) return S$1(b2), null; d2 = 0 !== (b2.flags & 128); g2 = f2.rendering; if (null === g2) if (d2) Ej(f2, false); else { if (0 !== T$1 || null !== a2 && 0 !== (a2.flags & 128)) for (a2 = b2.child; null !== a2; ) { g2 = Mh(a2); if (null !== g2) { b2.flags |= 128; Ej(f2, false); d2 = g2.updateQueue; null !== d2 && (b2.updateQueue = d2, b2.flags |= 4); b2.subtreeFlags = 0; d2 = c; for (c = b2.child; null !== c; ) f2 = c, a2 = d2, f2.flags &= 14680066, g2 = f2.alternate, null === g2 ? (f2.childLanes = 0, f2.lanes = a2, f2.child = null, f2.subtreeFlags = 0, f2.memoizedProps = null, f2.memoizedState = null, f2.updateQueue = null, f2.dependencies = null, f2.stateNode = null) : (f2.childLanes = g2.childLanes, f2.lanes = g2.lanes, f2.child = g2.child, f2.subtreeFlags = 0, f2.deletions = null, f2.memoizedProps = g2.memoizedProps, f2.memoizedState = g2.memoizedState, f2.updateQueue = g2.updateQueue, f2.type = g2.type, a2 = g2.dependencies, f2.dependencies = null === a2 ? null : { lanes: a2.lanes, firstContext: a2.firstContext }), c = c.sibling; G$1(M$1, M$1.current & 1 | 2); return b2.child; } a2 = a2.sibling; } null !== f2.tail && B$1() > Hj && (b2.flags |= 128, d2 = true, Ej(f2, false), b2.lanes = 4194304); } else { if (!d2) if (a2 = Mh(g2), null !== a2) { if (b2.flags |= 128, d2 = true, c = a2.updateQueue, null !== c && (b2.updateQueue = c, b2.flags |= 4), Ej(f2, true), null === f2.tail && "hidden" === f2.tailMode && !g2.alternate && !I$1) return S$1(b2), null; } else 2 * B$1() - f2.renderingStartTime > Hj && 1073741824 !== c && (b2.flags |= 128, d2 = true, Ej(f2, false), b2.lanes = 4194304); f2.isBackwards ? (g2.sibling = b2.child, b2.child = g2) : (c = f2.last, null !== c ? c.sibling = g2 : b2.child = g2, f2.last = g2); } if (null !== f2.tail) return b2 = f2.tail, f2.rendering = b2, f2.tail = b2.sibling, f2.renderingStartTime = B$1(), b2.sibling = null, c = M$1.current, G$1(M$1, d2 ? c & 1 | 2 : c & 1), b2; S$1(b2); return null; case 22: case 23: return Ij(), d2 = null !== b2.memoizedState, null !== a2 && null !== a2.memoizedState !== d2 && (b2.flags |= 8192), d2 && 0 !== (b2.mode & 1) ? 0 !== (gj & 1073741824) && (S$1(b2), b2.subtreeFlags & 6 && (b2.flags |= 8192)) : S$1(b2), null; case 24: return null; case 25: return null; } throw Error(p(156, b2.tag)); } function Jj(a2, b2) { wg(b2); switch (b2.tag) { case 1: return Zf(b2.type) && $f(), a2 = b2.flags, a2 & 65536 ? (b2.flags = a2 & -65537 | 128, b2) : null; case 3: return Jh(), E$1(Wf), E$1(H$1), Oh(), a2 = b2.flags, 0 !== (a2 & 65536) && 0 === (a2 & 128) ? (b2.flags = a2 & -65537 | 128, b2) : null; case 5: return Lh(b2), null; case 13: E$1(M$1); a2 = b2.memoizedState; if (null !== a2 && null !== a2.dehydrated) { if (null === b2.alternate) throw Error(p(340)); Ig(); } a2 = b2.flags; return a2 & 65536 ? (b2.flags = a2 & -65537 | 128, b2) : null; case 19: return E$1(M$1), null; case 4: return Jh(), null; case 10: return Rg(b2.type._context), null; case 22: case 23: return Ij(), null; case 24: return null; default: return null; } } var Kj = false, U$1 = false, Lj = "function" === typeof WeakSet ? WeakSet : Set, V$1 = null; function Mj(a2, b2) { var c = a2.ref; if (null !== c) if ("function" === typeof c) try { c(null); } catch (d2) { W$1(a2, b2, d2); } else c.current = null; } function Nj(a2, b2, c) { try { c(); } catch (d2) { W$1(a2, b2, d2); } } var Oj = false; function Pj(a2, b2) { Cf = dd; a2 = Me(); if (Ne(a2)) { if ("selectionStart" in a2) var c = { start: a2.selectionStart, end: a2.selectionEnd }; else a: { c = (c = a2.ownerDocument) && c.defaultView || window; var d2 = c.getSelection && c.getSelection(); if (d2 && 0 !== d2.rangeCount) { c = d2.anchorNode; var e2 = d2.anchorOffset, f2 = d2.focusNode; d2 = d2.focusOffset; try { c.nodeType, f2.nodeType; } catch (F2) { c = null; break a; } var g2 = 0, h2 = -1, k2 = -1, l2 = 0, m2 = 0, q2 = a2, r2 = null; b: for (; ; ) { for (var y2; ; ) { q2 !== c || 0 !== e2 && 3 !== q2.nodeType || (h2 = g2 + e2); q2 !== f2 || 0 !== d2 && 3 !== q2.nodeType || (k2 = g2 + d2); 3 === q2.nodeType && (g2 += q2.nodeValue.length); if (null === (y2 = q2.firstChild)) break; r2 = q2; q2 = y2; } for (; ; ) { if (q2 === a2) break b; r2 === c && ++l2 === e2 && (h2 = g2); r2 === f2 && ++m2 === d2 && (k2 = g2); if (null !== (y2 = q2.nextSibling)) break; q2 = r2; r2 = q2.parentNode; } q2 = y2; } c = -1 === h2 || -1 === k2 ? null : { start: h2, end: k2 }; } else c = null; } c = c || { start: 0, end: 0 }; } else c = null; Df = { focusedElem: a2, selectionRange: c }; dd = false; for (V$1 = b2; null !== V$1; ) if (b2 = V$1, a2 = b2.child, 0 !== (b2.subtreeFlags & 1028) && null !== a2) a2.return = b2, V$1 = a2; else for (; null !== V$1; ) { b2 = V$1; try { var n2 = b2.alternate; if (0 !== (b2.flags & 1024)) switch (b2.tag) { case 0: case 11: case 15: break; case 1: if (null !== n2) { var t2 = n2.memoizedProps, J2 = n2.memoizedState, x2 = b2.stateNode, w2 = x2.getSnapshotBeforeUpdate(b2.elementType === b2.type ? t2 : Lg(b2.type, t2), J2); x2.__reactInternalSnapshotBeforeUpdate = w2; } break; case 3: var u2 = b2.stateNode.containerInfo; 1 === u2.nodeType ? u2.textContent = "" : 9 === u2.nodeType && u2.documentElement && u2.removeChild(u2.documentElement); break; case 5: case 6: case 4: case 17: break; default: throw Error(p(163)); } } catch (F2) { W$1(b2, b2.return, F2); } a2 = b2.sibling; if (null !== a2) { a2.return = b2.return; V$1 = a2; break; } V$1 = b2.return; } n2 = Oj; Oj = false; return n2; } function Qj(a2, b2, c) { var d2 = b2.updateQueue; d2 = null !== d2 ? d2.lastEffect : null; if (null !== d2) { var e2 = d2 = d2.next; do { if ((e2.tag & a2) === a2) { var f2 = e2.destroy; e2.destroy = void 0; void 0 !== f2 && Nj(b2, c, f2); } e2 = e2.next; } while (e2 !== d2); } } function Rj(a2, b2) { b2 = b2.updateQueue; b2 = null !== b2 ? b2.lastEffect : null; if (null !== b2) { var c = b2 = b2.next; do { if ((c.tag & a2) === a2) { var d2 = c.create; c.destroy = d2(); } c = c.next; } while (c !== b2); } } function Sj(a2) { var b2 = a2.ref; if (null !== b2) { var c = a2.stateNode; switch (a2.tag) { case 5: a2 = c; break; default: a2 = c; } "function" === typeof b2 ? b2(a2) : b2.current = a2; } } function Tj(a2) { var b2 = a2.alternate; null !== b2 && (a2.alternate = null, Tj(b2)); a2.child = null; a2.deletions = null; a2.sibling = null; 5 === a2.tag && (b2 = a2.stateNode, null !== b2 && (delete b2[Of], delete b2[Pf], delete b2[of], delete b2[Qf], delete b2[Rf])); a2.stateNode = null; a2.return = null; a2.dependencies = null; a2.memoizedProps = null; a2.memoizedState = null; a2.pendingProps = null; a2.stateNode = null; a2.updateQueue = null; } function Uj(a2) { return 5 === a2.tag || 3 === a2.tag || 4 === a2.tag; } function Vj(a2) { a: for (; ; ) { for (; null === a2.sibling; ) { if (null === a2.return || Uj(a2.return)) return null; a2 = a2.return; } a2.sibling.return = a2.return; for (a2 = a2.sibling; 5 !== a2.tag && 6 !== a2.tag && 18 !== a2.tag; ) { if (a2.flags & 2) continue a; if (null === a2.child || 4 === a2.tag) continue a; else a2.child.return = a2, a2 = a2.child; } if (!(a2.flags & 2)) return a2.stateNode; } } function Wj(a2, b2, c) { var d2 = a2.tag; if (5 === d2 || 6 === d2) a2 = a2.stateNode, b2 ? 8 === c.nodeType ? c.parentNode.insertBefore(a2, b2) : c.insertBefore(a2, b2) : (8 === c.nodeType ? (b2 = c.parentNode, b2.insertBefore(a2, c)) : (b2 = c, b2.appendChild(a2)), c = c._reactRootContainer, null !== c && void 0 !== c || null !== b2.onclick || (b2.onclick = Bf)); else if (4 !== d2 && (a2 = a2.child, null !== a2)) for (Wj(a2, b2, c), a2 = a2.sibling; null !== a2; ) Wj(a2, b2, c), a2 = a2.sibling; } function Xj(a2, b2, c) { var d2 = a2.tag; if (5 === d2 || 6 === d2) a2 = a2.stateNode, b2 ? c.insertBefore(a2, b2) : c.appendChild(a2); else if (4 !== d2 && (a2 = a2.child, null !== a2)) for (Xj(a2, b2, c), a2 = a2.sibling; null !== a2; ) Xj(a2, b2, c), a2 = a2.sibling; } var X$1 = null, Yj = false; function Zj(a2, b2, c) { for (c = c.child; null !== c; ) ak(a2, b2, c), c = c.sibling; } function ak(a2, b2, c) { if (lc && "function" === typeof lc.onCommitFiberUnmount) try { lc.onCommitFiberUnmount(kc, c); } catch (h2) { } switch (c.tag) { case 5: U$1 || Mj(c, b2); case 6: var d2 = X$1, e2 = Yj; X$1 = null; Zj(a2, b2, c); X$1 = d2; Yj = e2; null !== X$1 && (Yj ? (a2 = X$1, c = c.stateNode, 8 === a2.nodeType ? a2.parentNode.removeChild(c) : a2.removeChild(c)) : X$1.removeChild(c.stateNode)); break; case 18: null !== X$1 && (Yj ? (a2 = X$1, c = c.stateNode, 8 === a2.nodeType ? Kf(a2.parentNode, c) : 1 === a2.nodeType && Kf(a2, c), bd(a2)) : Kf(X$1, c.stateNode)); break; case 4: d2 = X$1; e2 = Yj; X$1 = c.stateNode.containerInfo; Yj = true; Zj(a2, b2, c); X$1 = d2; Yj = e2; break; case 0: case 11: case 14: case 15: if (!U$1 && (d2 = c.updateQueue, null !== d2 && (d2 = d2.lastEffect, null !== d2))) { e2 = d2 = d2.next; do { var f2 = e2, g2 = f2.destroy; f2 = f2.tag; void 0 !== g2 && (0 !== (f2 & 2) ? Nj(c, b2, g2) : 0 !== (f2 & 4) && Nj(c, b2, g2)); e2 = e2.next; } while (e2 !== d2); } Zj(a2, b2, c); break; case 1: if (!U$1 && (Mj(c, b2), d2 = c.stateNode, "function" === typeof d2.componentWillUnmount)) try { d2.props = c.memoizedProps, d2.state = c.memoizedState, d2.componentWillUnmount(); } catch (h2) { W$1(c, b2, h2); } Zj(a2, b2, c); break; case 21: Zj(a2, b2, c); break; case 22: c.mode & 1 ? (U$1 = (d2 = U$1) || null !== c.memoizedState, Zj(a2, b2, c), U$1 = d2) : Zj(a2, b2, c); break; default: Zj(a2, b2, c); } } function bk(a2) { var b2 = a2.updateQueue; if (null !== b2) { a2.updateQueue = null; var c = a2.stateNode; null === c && (c = a2.stateNode = new Lj()); b2.forEach(function(b3) { var d2 = ck.bind(null, a2, b3); c.has(b3) || (c.add(b3), b3.then(d2, d2)); }); } } function dk(a2, b2) { var c = b2.deletions; if (null !== c) for (var d2 = 0; d2 < c.length; d2++) { var e2 = c[d2]; try { var f2 = a2, g2 = b2, h2 = g2; a: for (; null !== h2; ) { switch (h2.tag) { case 5: X$1 = h2.stateNode; Yj = false; break a; case 3: X$1 = h2.stateNode.containerInfo; Yj = true; break a; case 4: X$1 = h2.stateNode.containerInfo; Yj = true; break a; } h2 = h2.return; } if (null === X$1) throw Error(p(160)); ak(f2, g2, e2); X$1 = null; Yj = false; var k2 = e2.alternate; null !== k2 && (k2.return = null); e2.return = null; } catch (l2) { W$1(e2, b2, l2); } } if (b2.subtreeFlags & 12854) for (b2 = b2.child; null !== b2; ) ek(b2, a2), b2 = b2.sibling; } function ek(a2, b2) { var c = a2.alternate, d2 = a2.flags; switch (a2.tag) { case 0: case 11: case 14: case 15: dk(b2, a2); fk(a2); if (d2 & 4) { try { Qj(3, a2, a2.return), Rj(3, a2); } catch (t2) { W$1(a2, a2.return, t2); } try { Qj(5, a2, a2.return); } catch (t2) { W$1(a2, a2.return, t2); } } break; case 1: dk(b2, a2); fk(a2); d2 & 512 && null !== c && Mj(c, c.return); break; case 5: dk(b2, a2); fk(a2); d2 & 512 && null !== c && Mj(c, c.return); if (a2.flags & 32) { var e2 = a2.stateNode; try { ob(e2, ""); } catch (t2) { W$1(a2, a2.return, t2); } } if (d2 & 4 && (e2 = a2.stateNode, null != e2)) { var f2 = a2.memoizedProps, g2 = null !== c ? c.memoizedProps : f2, h2 = a2.type, k2 = a2.updateQueue; a2.updateQueue = null; if (null !== k2) try { "input" === h2 && "radio" === f2.type && null != f2.name && ab(e2, f2); vb(h2, g2); var l2 = vb(h2, f2); for (g2 = 0; g2 < k2.length; g2 += 2) { var m2 = k2[g2], q2 = k2[g2 + 1]; "style" === m2 ? sb(e2, q2) : "dangerouslySetInnerHTML" === m2 ? nb(e2, q2) : "children" === m2 ? ob(e2, q2) : ta(e2, m2, q2, l2); } switch (h2) { case "input": bb(e2, f2); break; case "textarea": ib(e2, f2); break; case "select": var r2 = e2._wrapperState.wasMultiple; e2._wrapperState.wasMultiple = !!f2.multiple; var y2 = f2.value; null != y2 ? fb(e2, !!f2.multiple, y2, false) : r2 !== !!f2.multiple && (null != f2.defaultValue ? fb( e2, !!f2.multiple, f2.defaultValue, true ) : fb(e2, !!f2.multiple, f2.multiple ? [] : "", false)); } e2[Pf] = f2; } catch (t2) { W$1(a2, a2.return, t2); } } break; case 6: dk(b2, a2); fk(a2); if (d2 & 4) { if (null === a2.stateNode) throw Error(p(162)); e2 = a2.stateNode; f2 = a2.memoizedProps; try { e2.nodeValue = f2; } catch (t2) { W$1(a2, a2.return, t2); } } break; case 3: dk(b2, a2); fk(a2); if (d2 & 4 && null !== c && c.memoizedState.isDehydrated) try { bd(b2.containerInfo); } catch (t2) { W$1(a2, a2.return, t2); } break; case 4: dk(b2, a2); fk(a2); break; case 13: dk(b2, a2); fk(a2); e2 = a2.child; e2.flags & 8192 && (f2 = null !== e2.memoizedState, e2.stateNode.isHidden = f2, !f2 || null !== e2.alternate && null !== e2.alternate.memoizedState || (gk = B$1())); d2 & 4 && bk(a2); break; case 22: m2 = null !== c && null !== c.memoizedState; a2.mode & 1 ? (U$1 = (l2 = U$1) || m2, dk(b2, a2), U$1 = l2) : dk(b2, a2); fk(a2); if (d2 & 8192) { l2 = null !== a2.memoizedState; if ((a2.stateNode.isHidden = l2) && !m2 && 0 !== (a2.mode & 1)) for (V$1 = a2, m2 = a2.child; null !== m2; ) { for (q2 = V$1 = m2; null !== V$1; ) { r2 = V$1; y2 = r2.child; switch (r2.tag) { case 0: case 11: case 14: case 15: Qj(4, r2, r2.return); break; case 1: Mj(r2, r2.return); var n2 = r2.stateNode; if ("function" === typeof n2.componentWillUnmount) { d2 = r2; c = r2.return; try { b2 = d2, n2.props = b2.memoizedProps, n2.state = b2.memoizedState, n2.componentWillUnmount(); } catch (t2) { W$1(d2, c, t2); } } break; case 5: Mj(r2, r2.return); break; case 22: if (null !== r2.memoizedState) { hk(q2); continue; } } null !== y2 ? (y2.return = r2, V$1 = y2) : hk(q2); } m2 = m2.sibling; } a: for (m2 = null, q2 = a2; ; ) { if (5 === q2.tag) { if (null === m2) { m2 = q2; try { e2 = q2.stateNode, l2 ? (f2 = e2.style, "function" === typeof f2.setProperty ? f2.setProperty("display", "none", "important") : f2.display = "none") : (h2 = q2.stateNode, k2 = q2.memoizedProps.style, g2 = void 0 !== k2 && null !== k2 && k2.hasOwnProperty("display") ? k2.display : null, h2.style.display = rb("display", g2)); } catch (t2) { W$1(a2, a2.return, t2); } } } else if (6 === q2.tag) { if (null === m2) try { q2.stateNode.nodeValue = l2 ? "" : q2.memoizedProps; } catch (t2) { W$1(a2, a2.return, t2); } } else if ((22 !== q2.tag && 23 !== q2.tag || null === q2.memoizedState || q2 === a2) && null !== q2.child) { q2.child.return = q2; q2 = q2.child; continue; } if (q2 === a2) break a; for (; null === q2.sibling; ) { if (null === q2.return || q2.return === a2) break a; m2 === q2 && (m2 = null); q2 = q2.return; } m2 === q2 && (m2 = null); q2.sibling.return = q2.return; q2 = q2.sibling; } } break; case 19: dk(b2, a2); fk(a2); d2 & 4 && bk(a2); break; case 21: break; default: dk( b2, a2 ), fk(a2); } } function fk(a2) { var b2 = a2.flags; if (b2 & 2) { try { a: { for (var c = a2.return; null !== c; ) { if (Uj(c)) { var d2 = c; break a; } c = c.return; } throw Error(p(160)); } switch (d2.tag) { case 5: var e2 = d2.stateNode; d2.flags & 32 && (ob(e2, ""), d2.flags &= -33); var f2 = Vj(a2); Xj(a2, f2, e2); break; case 3: case 4: var g2 = d2.stateNode.containerInfo, h2 = Vj(a2); Wj(a2, h2, g2); break; default: throw Error(p(161)); } } catch (k2) { W$1(a2, a2.return, k2); } a2.flags &= -3; } b2 & 4096 && (a2.flags &= -4097); } function ik(a2, b2, c) { V$1 = a2; jk(a2); } function jk(a2, b2, c) { for (var d2 = 0 !== (a2.mode & 1); null !== V$1; ) { var e2 = V$1, f2 = e2.child; if (22 === e2.tag && d2) { var g2 = null !== e2.memoizedState || Kj; if (!g2) { var h2 = e2.alternate, k2 = null !== h2 && null !== h2.memoizedState || U$1; h2 = Kj; var l2 = U$1; Kj = g2; if ((U$1 = k2) && !l2) for (V$1 = e2; null !== V$1; ) g2 = V$1, k2 = g2.child, 22 === g2.tag && null !== g2.memoizedState ? kk(e2) : null !== k2 ? (k2.return = g2, V$1 = k2) : kk(e2); for (; null !== f2; ) V$1 = f2, jk(f2), f2 = f2.sibling; V$1 = e2; Kj = h2; U$1 = l2; } lk(a2); } else 0 !== (e2.subtreeFlags & 8772) && null !== f2 ? (f2.return = e2, V$1 = f2) : lk(a2); } } function lk(a2) { for (; null !== V$1; ) { var b2 = V$1; if (0 !== (b2.flags & 8772)) { var c = b2.alternate; try { if (0 !== (b2.flags & 8772)) switch (b2.tag) { case 0: case 11: case 15: U$1 || Rj(5, b2); break; case 1: var d2 = b2.stateNode; if (b2.flags & 4 && !U$1) if (null === c) d2.componentDidMount(); else { var e2 = b2.elementType === b2.type ? c.memoizedProps : Lg(b2.type, c.memoizedProps); d2.componentDidUpdate(e2, c.memoizedState, d2.__reactInternalSnapshotBeforeUpdate); } var f2 = b2.updateQueue; null !== f2 && ih(b2, f2, d2); break; case 3: var g2 = b2.updateQueue; if (null !== g2) { c = null; if (null !== b2.child) switch (b2.child.tag) { case 5: c = b2.child.stateNode; break; case 1: c = b2.child.stateNode; } ih(b2, g2, c); } break; case 5: var h2 = b2.stateNode; if (null === c && b2.flags & 4) { c = h2; var k2 = b2.memoizedProps; switch (b2.type) { case "button": case "input": case "select": case "textarea": k2.autoFocus && c.focus(); break; case "img": k2.src && (c.src = k2.src); } } break; case 6: break; case 4: break; case 12: break; case 13: if (null === b2.memoizedState) { var l2 = b2.alternate; if (null !== l2) { var m2 = l2.memoizedState; if (null !== m2) { var q2 = m2.dehydrated; null !== q2 && bd(q2); } } } break; case 19: case 17: case 21: case 22: case 23: case 25: break; default: throw Error(p(163)); } U$1 || b2.flags & 512 && Sj(b2); } catch (r2) { W$1(b2, b2.return, r2); } } if (b2 === a2) { V$1 = null; break; } c = b2.sibling; if (null !== c) { c.return = b2.return; V$1 = c; break; } V$1 = b2.return; } } function hk(a2) { for (; null !== V$1; ) { var b2 = V$1; if (b2 === a2) { V$1 = null; break; } var c = b2.sibling; if (null !== c) { c.return = b2.return; V$1 = c; break; } V$1 = b2.return; } } function kk(a2) { for (; null !== V$1; ) { var b2 = V$1; try { switch (b2.tag) { case 0: case 11: case 15: var c = b2.return; try { Rj(4, b2); } catch (k2) { W$1(b2, c, k2); } break; case 1: var d2 = b2.stateNode; if ("function" === typeof d2.componentDidMount) { var e2 = b2.return; try { d2.componentDidMount(); } catch (k2) { W$1(b2, e2, k2); } } var f2 = b2.return; try { Sj(b2); } catch (k2) { W$1(b2, f2, k2); } break; case 5: var g2 = b2.return; try { Sj(b2); } catch (k2) { W$1(b2, g2, k2); } } } catch (k2) { W$1(b2, b2.return, k2); } if (b2 === a2) { V$1 = null; break; } var h2 = b2.sibling; if (null !== h2) { h2.return = b2.return; V$1 = h2; break; } V$1 = b2.return; } } var mk = Math.ceil, nk = ua.ReactCurrentDispatcher, ok = ua.ReactCurrentOwner, pk = ua.ReactCurrentBatchConfig, K$1 = 0, R$1 = null, Y$1 = null, Z$1 = 0, gj = 0, fj = Uf(0), T$1 = 0, qk = null, hh = 0, rk = 0, sk = 0, tk = null, uk = null, gk = 0, Hj = Infinity, vk = null, Pi = false, Qi = null, Si = null, wk = false, xk = null, yk = 0, zk = 0, Ak = null, Bk = -1, Ck = 0; function L$1() { return 0 !== (K$1 & 6) ? B$1() : -1 !== Bk ? Bk : Bk = B$1(); } function lh(a2) { if (0 === (a2.mode & 1)) return 1; if (0 !== (K$1 & 2) && 0 !== Z$1) return Z$1 & -Z$1; if (null !== Kg.transition) return 0 === Ck && (Ck = yc()), Ck; a2 = C$1; if (0 !== a2) return a2; a2 = window.event; a2 = void 0 === a2 ? 16 : jd(a2.type); return a2; } function mh(a2, b2, c, d2) { if (50 < zk) throw zk = 0, Ak = null, Error(p(185)); Ac(a2, c, d2); if (0 === (K$1 & 2) || a2 !== R$1) a2 === R$1 && (0 === (K$1 & 2) && (rk |= c), 4 === T$1 && Dk(a2, Z$1)), Ek(a2, d2), 1 === c && 0 === K$1 && 0 === (b2.mode & 1) && (Hj = B$1() + 500, fg && jg()); } function Ek(a2, b2) { var c = a2.callbackNode; wc(a2, b2); var d2 = uc(a2, a2 === R$1 ? Z$1 : 0); if (0 === d2) null !== c && bc(c), a2.callbackNode = null, a2.callbackPriority = 0; else if (b2 = d2 & -d2, a2.callbackPriority !== b2) { null != c && bc(c); if (1 === b2) 0 === a2.tag ? ig(Fk.bind(null, a2)) : hg(Fk.bind(null, a2)), Jf(function() { 0 === (K$1 & 6) && jg(); }), c = null; else { switch (Dc(d2)) { case 1: c = fc; break; case 4: c = gc; break; case 16: c = hc; break; case 536870912: c = jc; break; default: c = hc; } c = Gk(c, Hk.bind(null, a2)); } a2.callbackPriority = b2; a2.callbackNode = c; } } function Hk(a2, b2) { Bk = -1; Ck = 0; if (0 !== (K$1 & 6)) throw Error(p(327)); var c = a2.callbackNode; if (Ik() && a2.callbackNode !== c) return null; var d2 = uc(a2, a2 === R$1 ? Z$1 : 0); if (0 === d2) return null; if (0 !== (d2 & 30) || 0 !== (d2 & a2.expiredLanes) || b2) b2 = Jk(a2, d2); else { b2 = d2; var e2 = K$1; K$1 |= 2; var f2 = Kk(); if (R$1 !== a2 || Z$1 !== b2) vk = null, Hj = B$1() + 500, Lk(a2, b2); do try { Mk(); break; } catch (h2) { Nk(a2, h2); } while (1); Qg(); nk.current = f2; K$1 = e2; null !== Y$1 ? b2 = 0 : (R$1 = null, Z$1 = 0, b2 = T$1); } if (0 !== b2) { 2 === b2 && (e2 = xc(a2), 0 !== e2 && (d2 = e2, b2 = Ok(a2, e2))); if (1 === b2) throw c = qk, Lk(a2, 0), Dk(a2, d2), Ek(a2, B$1()), c; if (6 === b2) Dk(a2, d2); else { e2 = a2.current.alternate; if (0 === (d2 & 30) && !Pk(e2) && (b2 = Jk(a2, d2), 2 === b2 && (f2 = xc(a2), 0 !== f2 && (d2 = f2, b2 = Ok(a2, f2))), 1 === b2)) throw c = qk, Lk(a2, 0), Dk(a2, d2), Ek(a2, B$1()), c; a2.finishedWork = e2; a2.finishedLanes = d2; switch (b2) { case 0: case 1: throw Error(p(345)); case 2: Qk(a2, uk, vk); break; case 3: Dk(a2, d2); if ((d2 & 130023424) === d2 && (b2 = gk + 500 - B$1(), 10 < b2)) { if (0 !== uc(a2, 0)) break; e2 = a2.suspendedLanes; if ((e2 & d2) !== d2) { L$1(); a2.pingedLanes |= a2.suspendedLanes & e2; break; } a2.timeoutHandle = Ff(Qk.bind(null, a2, uk, vk), b2); break; } Qk(a2, uk, vk); break; case 4: Dk(a2, d2); if ((d2 & 4194240) === d2) break; b2 = a2.eventTimes; for (e2 = -1; 0 < d2; ) { var g2 = 31 - oc(d2); f2 = 1 << g2; g2 = b2[g2]; g2 > e2 && (e2 = g2); d2 &= ~f2; } d2 = e2; d2 = B$1() - d2; d2 = (120 > d2 ? 120 : 480 > d2 ? 480 : 1080 > d2 ? 1080 : 1920 > d2 ? 1920 : 3e3 > d2 ? 3e3 : 4320 > d2 ? 4320 : 1960 * mk(d2 / 1960)) - d2; if (10 < d2) { a2.timeoutHandle = Ff(Qk.bind(null, a2, uk, vk), d2); break; } Qk(a2, uk, vk); break; case 5: Qk(a2, uk, vk); break; default: throw Error(p(329)); } } } Ek(a2, B$1()); return a2.callbackNode === c ? Hk.bind(null, a2) : null; } function Ok(a2, b2) { var c = tk; a2.current.memoizedState.isDehydrated && (Lk(a2, b2).flags |= 256); a2 = Jk(a2, b2); 2 !== a2 && (b2 = uk, uk = c, null !== b2 && Gj(b2)); return a2; } function Gj(a2) { null === uk ? uk = a2 : uk.push.apply(uk, a2); } function Pk(a2) { for (var b2 = a2; ; ) { if (b2.flags & 16384) { var c = b2.updateQueue; if (null !== c && (c = c.stores, null !== c)) for (var d2 = 0; d2 < c.length; d2++) { var e2 = c[d2], f2 = e2.getSnapshot; e2 = e2.value; try { if (!He(f2(), e2)) return false; } catch (g2) { return false; } } } c = b2.child; if (b2.subtreeFlags & 16384 && null !== c) c.return = b2, b2 = c; else { if (b2 === a2) break; for (; null === b2.sibling; ) { if (null === b2.return || b2.return === a2) return true; b2 = b2.return; } b2.sibling.return = b2.return; b2 = b2.sibling; } } return true; } function Dk(a2, b2) { b2 &= ~sk; b2 &= ~rk; a2.suspendedLanes |= b2; a2.pingedLanes &= ~b2; for (a2 = a2.expirationTimes; 0 < b2; ) { var c = 31 - oc(b2), d2 = 1 << c; a2[c] = -1; b2 &= ~d2; } } function Fk(a2) { if (0 !== (K$1 & 6)) throw Error(p(327)); Ik(); var b2 = uc(a2, 0); if (0 === (b2 & 1)) return Ek(a2, B$1()), null; var c = Jk(a2, b2); if (0 !== a2.tag && 2 === c) { var d2 = xc(a2); 0 !== d2 && (b2 = d2, c = Ok(a2, d2)); } if (1 === c) throw c = qk, Lk(a2, 0), Dk(a2, b2), Ek(a2, B$1()), c; if (6 === c) throw Error(p(345)); a2.finishedWork = a2.current.alternate; a2.finishedLanes = b2; Qk(a2, uk, vk); Ek(a2, B$1()); return null; } function Rk(a2, b2) { var c = K$1; K$1 |= 1; try { return a2(b2); } finally { K$1 = c, 0 === K$1 && (Hj = B$1() + 500, fg && jg()); } } function Sk(a2) { null !== xk && 0 === xk.tag && 0 === (K$1 & 6) && Ik(); var b2 = K$1; K$1 |= 1; var c = pk.transition, d2 = C$1; try { if (pk.transition = null, C$1 = 1, a2) return a2(); } finally { C$1 = d2, pk.transition = c, K$1 = b2, 0 === (K$1 & 6) && jg(); } } function Ij() { gj = fj.current; E$1(fj); } function Lk(a2, b2) { a2.finishedWork = null; a2.finishedLanes = 0; var c = a2.timeoutHandle; -1 !== c && (a2.timeoutHandle = -1, Gf(c)); if (null !== Y$1) for (c = Y$1.return; null !== c; ) { var d2 = c; wg(d2); switch (d2.tag) { case 1: d2 = d2.type.childContextTypes; null !== d2 && void 0 !== d2 && $f(); break; case 3: Jh(); E$1(Wf); E$1(H$1); Oh(); break; case 5: Lh(d2); break; case 4: Jh(); break; case 13: E$1(M$1); break; case 19: E$1(M$1); break; case 10: Rg(d2.type._context); break; case 22: case 23: Ij(); } c = c.return; } R$1 = a2; Y$1 = a2 = wh(a2.current, null); Z$1 = gj = b2; T$1 = 0; qk = null; sk = rk = hh = 0; uk = tk = null; if (null !== Wg) { for (b2 = 0; b2 < Wg.length; b2++) if (c = Wg[b2], d2 = c.interleaved, null !== d2) { c.interleaved = null; var e2 = d2.next, f2 = c.pending; if (null !== f2) { var g2 = f2.next; f2.next = e2; d2.next = g2; } c.pending = d2; } Wg = null; } return a2; } function Nk(a2, b2) { do { var c = Y$1; try { Qg(); Ph.current = ai; if (Sh) { for (var d2 = N$1.memoizedState; null !== d2; ) { var e2 = d2.queue; null !== e2 && (e2.pending = null); d2 = d2.next; } Sh = false; } Rh = 0; P$1 = O$1 = N$1 = null; Th = false; Uh = 0; ok.current = null; if (null === c || null === c.return) { T$1 = 1; qk = b2; Y$1 = null; break; } a: { var f2 = a2, g2 = c.return, h2 = c, k2 = b2; b2 = Z$1; h2.flags |= 32768; if (null !== k2 && "object" === typeof k2 && "function" === typeof k2.then) { var l2 = k2, m2 = h2, q2 = m2.tag; if (0 === (m2.mode & 1) && (0 === q2 || 11 === q2 || 15 === q2)) { var r2 = m2.alternate; r2 ? (m2.updateQueue = r2.updateQueue, m2.memoizedState = r2.memoizedState, m2.lanes = r2.lanes) : (m2.updateQueue = null, m2.memoizedState = null); } var y2 = Vi(g2); if (null !== y2) { y2.flags &= -257; Wi(y2, g2, h2, f2, b2); y2.mode & 1 && Ti(f2, l2, b2); b2 = y2; k2 = l2; var n2 = b2.updateQueue; if (null === n2) { var t2 = /* @__PURE__ */ new Set(); t2.add(k2); b2.updateQueue = t2; } else n2.add(k2); break a; } else { if (0 === (b2 & 1)) { Ti(f2, l2, b2); uj(); break a; } k2 = Error(p(426)); } } else if (I$1 && h2.mode & 1) { var J2 = Vi(g2); if (null !== J2) { 0 === (J2.flags & 65536) && (J2.flags |= 256); Wi(J2, g2, h2, f2, b2); Jg(Ki(k2, h2)); break a; } } f2 = k2 = Ki(k2, h2); 4 !== T$1 && (T$1 = 2); null === tk ? tk = [f2] : tk.push(f2); f2 = g2; do { switch (f2.tag) { case 3: f2.flags |= 65536; b2 &= -b2; f2.lanes |= b2; var x2 = Oi(f2, k2, b2); fh(f2, x2); break a; case 1: h2 = k2; var w2 = f2.type, u2 = f2.stateNode; if (0 === (f2.flags & 128) && ("function" === typeof w2.getDerivedStateFromError || null !== u2 && "function" === typeof u2.componentDidCatch && (null === Si || !Si.has(u2)))) { f2.flags |= 65536; b2 &= -b2; f2.lanes |= b2; var F2 = Ri(f2, h2, b2); fh(f2, F2); break a; } } f2 = f2.return; } while (null !== f2); } Tk(c); } catch (na) { b2 = na; Y$1 === c && null !== c && (Y$1 = c = c.return); continue; } break; } while (1); } function Kk() { var a2 = nk.current; nk.current = ai; return null === a2 ? ai : a2; } function uj() { if (0 === T$1 || 3 === T$1 || 2 === T$1) T$1 = 4; null === R$1 || 0 === (hh & 268435455) && 0 === (rk & 268435455) || Dk(R$1, Z$1); } function Jk(a2, b2) { var c = K$1; K$1 |= 2; var d2 = Kk(); if (R$1 !== a2 || Z$1 !== b2) vk = null, Lk(a2, b2); do try { Uk(); break; } catch (e2) { Nk(a2, e2); } while (1); Qg(); K$1 = c; nk.current = d2; if (null !== Y$1) throw Error(p(261)); R$1 = null; Z$1 = 0; return T$1; } function Uk() { for (; null !== Y$1; ) Vk(Y$1); } function Mk() { for (; null !== Y$1 && !cc(); ) Vk(Y$1); } function Vk(a2) { var b2 = Wk(a2.alternate, a2, gj); a2.memoizedProps = a2.pendingProps; null === b2 ? Tk(a2) : Y$1 = b2; ok.current = null; } function Tk(a2) { var b2 = a2; do { var c = b2.alternate; a2 = b2.return; if (0 === (b2.flags & 32768)) { if (c = Fj(c, b2, gj), null !== c) { Y$1 = c; return; } } else { c = Jj(c, b2); if (null !== c) { c.flags &= 32767; Y$1 = c; return; } if (null !== a2) a2.flags |= 32768, a2.subtreeFlags = 0, a2.deletions = null; else { T$1 = 6; Y$1 = null; return; } } b2 = b2.sibling; if (null !== b2) { Y$1 = b2; return; } Y$1 = b2 = a2; } while (null !== b2); 0 === T$1 && (T$1 = 5); } function Qk(a2, b2, c) { var d2 = C$1, e2 = pk.transition; try { pk.transition = null, C$1 = 1, Xk(a2, b2, c, d2); } finally { pk.transition = e2, C$1 = d2; } return null; } function Xk(a2, b2, c, d2) { do Ik(); while (null !== xk); if (0 !== (K$1 & 6)) throw Error(p(327)); c = a2.finishedWork; var e2 = a2.finishedLanes; if (null === c) return null; a2.finishedWork = null; a2.finishedLanes = 0; if (c === a2.current) throw Error(p(177)); a2.callbackNode = null; a2.callbackPriority = 0; var f2 = c.lanes | c.childLanes; Bc(a2, f2); a2 === R$1 && (Y$1 = R$1 = null, Z$1 = 0); 0 === (c.subtreeFlags & 2064) && 0 === (c.flags & 2064) || wk || (wk = true, Gk(hc, function() { Ik(); return null; })); f2 = 0 !== (c.flags & 15990); if (0 !== (c.subtreeFlags & 15990) || f2) { f2 = pk.transition; pk.transition = null; var g2 = C$1; C$1 = 1; var h2 = K$1; K$1 |= 4; ok.current = null; Pj(a2, c); ek(c, a2); Oe(Df); dd = !!Cf; Df = Cf = null; a2.current = c; ik(c); dc(); K$1 = h2; C$1 = g2; pk.transition = f2; } else a2.current = c; wk && (wk = false, xk = a2, yk = e2); f2 = a2.pendingLanes; 0 === f2 && (Si = null); mc(c.stateNode); Ek(a2, B$1()); if (null !== b2) for (d2 = a2.onRecoverableError, c = 0; c < b2.length; c++) e2 = b2[c], d2(e2.value, { componentStack: e2.stack, digest: e2.digest }); if (Pi) throw Pi = false, a2 = Qi, Qi = null, a2; 0 !== (yk & 1) && 0 !== a2.tag && Ik(); f2 = a2.pendingLanes; 0 !== (f2 & 1) ? a2 === Ak ? zk++ : (zk = 0, Ak = a2) : zk = 0; jg(); return null; } function Ik() { if (null !== xk) { var a2 = Dc(yk), b2 = pk.transition, c = C$1; try { pk.transition = null; C$1 = 16 > a2 ? 16 : a2; if (null === xk) var d2 = false; else { a2 = xk; xk = null; yk = 0; if (0 !== (K$1 & 6)) throw Error(p(331)); var e2 = K$1; K$1 |= 4; for (V$1 = a2.current; null !== V$1; ) { var f2 = V$1, g2 = f2.child; if (0 !== (V$1.flags & 16)) { var h2 = f2.deletions; if (null !== h2) { for (var k2 = 0; k2 < h2.length; k2++) { var l2 = h2[k2]; for (V$1 = l2; null !== V$1; ) { var m2 = V$1; switch (m2.tag) { case 0: case 11: case 15: Qj(8, m2, f2); } var q2 = m2.child; if (null !== q2) q2.return = m2, V$1 = q2; else for (; null !== V$1; ) { m2 = V$1; var r2 = m2.sibling, y2 = m2.return; Tj(m2); if (m2 === l2) { V$1 = null; break; } if (null !== r2) { r2.return = y2; V$1 = r2; break; } V$1 = y2; } } } var n2 = f2.alternate; if (null !== n2) { var t2 = n2.child; if (null !== t2) { n2.child = null; do { var J2 = t2.sibling; t2.sibling = null; t2 = J2; } while (null !== t2); } } V$1 = f2; } } if (0 !== (f2.subtreeFlags & 2064) && null !== g2) g2.return = f2, V$1 = g2; else b: for (; null !== V$1; ) { f2 = V$1; if (0 !== (f2.flags & 2048)) switch (f2.tag) { case 0: case 11: case 15: Qj(9, f2, f2.return); } var x2 = f2.sibling; if (null !== x2) { x2.return = f2.return; V$1 = x2; break b; } V$1 = f2.return; } } var w2 = a2.current; for (V$1 = w2; null !== V$1; ) { g2 = V$1; var u2 = g2.child; if (0 !== (g2.subtreeFlags & 2064) && null !== u2) u2.return = g2, V$1 = u2; else b: for (g2 = w2; null !== V$1; ) { h2 = V$1; if (0 !== (h2.flags & 2048)) try { switch (h2.tag) { case 0: case 11: case 15: Rj(9, h2); } } catch (na) { W$1(h2, h2.return, na); } if (h2 === g2) { V$1 = null; break b; } var F2 = h2.sibling; if (null !== F2) { F2.return = h2.return; V$1 = F2; break b; } V$1 = h2.return; } } K$1 = e2; jg(); if (lc && "function" === typeof lc.onPostCommitFiberRoot) try { lc.onPostCommitFiberRoot(kc, a2); } catch (na) { } d2 = true; } return d2; } finally { C$1 = c, pk.transition = b2; } } return false; } function Yk(a2, b2, c) { b2 = Ki(c, b2); b2 = Oi(a2, b2, 1); a2 = dh(a2, b2, 1); b2 = L$1(); null !== a2 && (Ac(a2, 1, b2), Ek(a2, b2)); } function W$1(a2, b2, c) { if (3 === a2.tag) Yk(a2, a2, c); else for (; null !== b2; ) { if (3 === b2.tag) { Yk(b2, a2, c); break; } else if (1 === b2.tag) { var d2 = b2.stateNode; if ("function" === typeof b2.type.getDerivedStateFromError || "function" === typeof d2.componentDidCatch && (null === Si || !Si.has(d2))) { a2 = Ki(c, a2); a2 = Ri(b2, a2, 1); b2 = dh(b2, a2, 1); a2 = L$1(); null !== b2 && (Ac(b2, 1, a2), Ek(b2, a2)); break; } } b2 = b2.return; } } function Ui(a2, b2, c) { var d2 = a2.pingCache; null !== d2 && d2.delete(b2); b2 = L$1(); a2.pingedLanes |= a2.suspendedLanes & c; R$1 === a2 && (Z$1 & c) === c && (4 === T$1 || 3 === T$1 && (Z$1 & 130023424) === Z$1 && 500 > B$1() - gk ? Lk(a2, 0) : sk |= c); Ek(a2, b2); } function Zk(a2, b2) { 0 === b2 && (0 === (a2.mode & 1) ? b2 = 1 : (b2 = sc, sc <<= 1, 0 === (sc & 130023424) && (sc = 4194304))); var c = L$1(); a2 = Zg(a2, b2); null !== a2 && (Ac(a2, b2, c), Ek(a2, c)); } function vj(a2) { var b2 = a2.memoizedState, c = 0; null !== b2 && (c = b2.retryLane); Zk(a2, c); } function ck(a2, b2) { var c = 0; switch (a2.tag) { case 13: var d2 = a2.stateNode; var e2 = a2.memoizedState; null !== e2 && (c = e2.retryLane); break; case 19: d2 = a2.stateNode; break; default: throw Error(p(314)); } null !== d2 && d2.delete(b2); Zk(a2, c); } var Wk; Wk = function(a2, b2, c) { if (null !== a2) if (a2.memoizedProps !== b2.pendingProps || Wf.current) Ug = true; else { if (0 === (a2.lanes & c) && 0 === (b2.flags & 128)) return Ug = false, zj(a2, b2, c); Ug = 0 !== (a2.flags & 131072) ? true : false; } else Ug = false, I$1 && 0 !== (b2.flags & 1048576) && ug(b2, ng, b2.index); b2.lanes = 0; switch (b2.tag) { case 2: var d2 = b2.type; jj(a2, b2); a2 = b2.pendingProps; var e2 = Yf(b2, H$1.current); Tg(b2, c); e2 = Xh(null, b2, d2, a2, e2, c); var f2 = bi(); b2.flags |= 1; "object" === typeof e2 && null !== e2 && "function" === typeof e2.render && void 0 === e2.$$typeof ? (b2.tag = 1, b2.memoizedState = null, b2.updateQueue = null, Zf(d2) ? (f2 = true, cg(b2)) : f2 = false, b2.memoizedState = null !== e2.state && void 0 !== e2.state ? e2.state : null, ah(b2), e2.updater = nh, b2.stateNode = e2, e2._reactInternals = b2, rh(b2, d2, a2, c), b2 = kj(null, b2, d2, true, f2, c)) : (b2.tag = 0, I$1 && f2 && vg(b2), Yi(null, b2, e2, c), b2 = b2.child); return b2; case 16: d2 = b2.elementType; a: { jj(a2, b2); a2 = b2.pendingProps; e2 = d2._init; d2 = e2(d2._payload); b2.type = d2; e2 = b2.tag = $k(d2); a2 = Lg(d2, a2); switch (e2) { case 0: b2 = dj(null, b2, d2, a2, c); break a; case 1: b2 = ij(null, b2, d2, a2, c); break a; case 11: b2 = Zi(null, b2, d2, a2, c); break a; case 14: b2 = aj(null, b2, d2, Lg(d2.type, a2), c); break a; } throw Error(p( 306, d2, "" )); } return b2; case 0: return d2 = b2.type, e2 = b2.pendingProps, e2 = b2.elementType === d2 ? e2 : Lg(d2, e2), dj(a2, b2, d2, e2, c); case 1: return d2 = b2.type, e2 = b2.pendingProps, e2 = b2.elementType === d2 ? e2 : Lg(d2, e2), ij(a2, b2, d2, e2, c); case 3: a: { lj(b2); if (null === a2) throw Error(p(387)); d2 = b2.pendingProps; f2 = b2.memoizedState; e2 = f2.element; bh(a2, b2); gh(b2, d2, null, c); var g2 = b2.memoizedState; d2 = g2.element; if (f2.isDehydrated) if (f2 = { element: d2, isDehydrated: false, cache: g2.cache, pendingSuspenseBoundaries: g2.pendingSuspenseBoundaries, transitions: g2.transitions }, b2.updateQueue.baseState = f2, b2.memoizedState = f2, b2.flags & 256) { e2 = Ki(Error(p(423)), b2); b2 = mj(a2, b2, d2, c, e2); break a; } else if (d2 !== e2) { e2 = Ki(Error(p(424)), b2); b2 = mj(a2, b2, d2, c, e2); break a; } else for (yg = Lf(b2.stateNode.containerInfo.firstChild), xg = b2, I$1 = true, zg = null, c = Ch(b2, null, d2, c), b2.child = c; c; ) c.flags = c.flags & -3 | 4096, c = c.sibling; else { Ig(); if (d2 === e2) { b2 = $i(a2, b2, c); break a; } Yi(a2, b2, d2, c); } b2 = b2.child; } return b2; case 5: return Kh(b2), null === a2 && Eg(b2), d2 = b2.type, e2 = b2.pendingProps, f2 = null !== a2 ? a2.memoizedProps : null, g2 = e2.children, Ef(d2, e2) ? g2 = null : null !== f2 && Ef(d2, f2) && (b2.flags |= 32), hj(a2, b2), Yi(a2, b2, g2, c), b2.child; case 6: return null === a2 && Eg(b2), null; case 13: return pj(a2, b2, c); case 4: return Ih(b2, b2.stateNode.containerInfo), d2 = b2.pendingProps, null === a2 ? b2.child = Bh(b2, null, d2, c) : Yi(a2, b2, d2, c), b2.child; case 11: return d2 = b2.type, e2 = b2.pendingProps, e2 = b2.elementType === d2 ? e2 : Lg(d2, e2), Zi(a2, b2, d2, e2, c); case 7: return Yi(a2, b2, b2.pendingProps, c), b2.child; case 8: return Yi(a2, b2, b2.pendingProps.children, c), b2.child; case 12: return Yi(a2, b2, b2.pendingProps.children, c), b2.child; case 10: a: { d2 = b2.type._context; e2 = b2.pendingProps; f2 = b2.memoizedProps; g2 = e2.value; G$1(Mg, d2._currentValue); d2._currentValue = g2; if (null !== f2) if (He(f2.value, g2)) { if (f2.children === e2.children && !Wf.current) { b2 = $i(a2, b2, c); break a; } } else for (f2 = b2.child, null !== f2 && (f2.return = b2); null !== f2; ) { var h2 = f2.dependencies; if (null !== h2) { g2 = f2.child; for (var k2 = h2.firstContext; null !== k2; ) { if (k2.context === d2) { if (1 === f2.tag) { k2 = ch(-1, c & -c); k2.tag = 2; var l2 = f2.updateQueue; if (null !== l2) { l2 = l2.shared; var m2 = l2.pending; null === m2 ? k2.next = k2 : (k2.next = m2.next, m2.next = k2); l2.pending = k2; } } f2.lanes |= c; k2 = f2.alternate; null !== k2 && (k2.lanes |= c); Sg( f2.return, c, b2 ); h2.lanes |= c; break; } k2 = k2.next; } } else if (10 === f2.tag) g2 = f2.type === b2.type ? null : f2.child; else if (18 === f2.tag) { g2 = f2.return; if (null === g2) throw Error(p(341)); g2.lanes |= c; h2 = g2.alternate; null !== h2 && (h2.lanes |= c); Sg(g2, c, b2); g2 = f2.sibling; } else g2 = f2.child; if (null !== g2) g2.return = f2; else for (g2 = f2; null !== g2; ) { if (g2 === b2) { g2 = null; break; } f2 = g2.sibling; if (null !== f2) { f2.return = g2.return; g2 = f2; break; } g2 = g2.return; } f2 = g2; } Yi(a2, b2, e2.children, c); b2 = b2.child; } return b2; case 9: return e2 = b2.type, d2 = b2.pendingProps.children, Tg(b2, c), e2 = Vg(e2), d2 = d2(e2), b2.flags |= 1, Yi(a2, b2, d2, c), b2.child; case 14: return d2 = b2.type, e2 = Lg(d2, b2.pendingProps), e2 = Lg(d2.type, e2), aj(a2, b2, d2, e2, c); case 15: return cj(a2, b2, b2.type, b2.pendingProps, c); case 17: return d2 = b2.type, e2 = b2.pendingProps, e2 = b2.elementType === d2 ? e2 : Lg(d2, e2), jj(a2, b2), b2.tag = 1, Zf(d2) ? (a2 = true, cg(b2)) : a2 = false, Tg(b2, c), ph(b2, d2, e2), rh(b2, d2, e2, c), kj(null, b2, d2, true, a2, c); case 19: return yj(a2, b2, c); case 22: return ej(a2, b2, c); } throw Error(p(156, b2.tag)); }; function Gk(a2, b2) { return ac(a2, b2); } function al(a2, b2, c, d2) { this.tag = a2; this.key = c; this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null; this.index = 0; this.ref = null; this.pendingProps = b2; this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null; this.mode = d2; this.subtreeFlags = this.flags = 0; this.deletions = null; this.childLanes = this.lanes = 0; this.alternate = null; } function Bg(a2, b2, c, d2) { return new al(a2, b2, c, d2); } function bj(a2) { a2 = a2.prototype; return !(!a2 || !a2.isReactComponent); } function $k(a2) { if ("function" === typeof a2) return bj(a2) ? 1 : 0; if (void 0 !== a2 && null !== a2) { a2 = a2.$$typeof; if (a2 === Da) return 11; if (a2 === Ga) return 14; } return 2; } function wh(a2, b2) { var c = a2.alternate; null === c ? (c = Bg(a2.tag, b2, a2.key, a2.mode), c.elementType = a2.elementType, c.type = a2.type, c.stateNode = a2.stateNode, c.alternate = a2, a2.alternate = c) : (c.pendingProps = b2, c.type = a2.type, c.flags = 0, c.subtreeFlags = 0, c.deletions = null); c.flags = a2.flags & 14680064; c.childLanes = a2.childLanes; c.lanes = a2.lanes; c.child = a2.child; c.memoizedProps = a2.memoizedProps; c.memoizedState = a2.memoizedState; c.updateQueue = a2.updateQueue; b2 = a2.dependencies; c.dependencies = null === b2 ? null : { lanes: b2.lanes, firstContext: b2.firstContext }; c.sibling = a2.sibling; c.index = a2.index; c.ref = a2.ref; return c; } function yh(a2, b2, c, d2, e2, f2) { var g2 = 2; d2 = a2; if ("function" === typeof a2) bj(a2) && (g2 = 1); else if ("string" === typeof a2) g2 = 5; else a: switch (a2) { case ya: return Ah(c.children, e2, f2, b2); case za: g2 = 8; e2 |= 8; break; case Aa: return a2 = Bg(12, c, b2, e2 | 2), a2.elementType = Aa, a2.lanes = f2, a2; case Ea: return a2 = Bg(13, c, b2, e2), a2.elementType = Ea, a2.lanes = f2, a2; case Fa: return a2 = Bg(19, c, b2, e2), a2.elementType = Fa, a2.lanes = f2, a2; case Ia: return qj(c, e2, f2, b2); default: if ("object" === typeof a2 && null !== a2) switch (a2.$$typeof) { case Ba: g2 = 10; break a; case Ca: g2 = 9; break a; case Da: g2 = 11; break a; case Ga: g2 = 14; break a; case Ha: g2 = 16; d2 = null; break a; } throw Error(p(130, null == a2 ? a2 : typeof a2, "")); } b2 = Bg(g2, c, b2, e2); b2.elementType = a2; b2.type = d2; b2.lanes = f2; return b2; } function Ah(a2, b2, c, d2) { a2 = Bg(7, a2, d2, b2); a2.lanes = c; return a2; } function qj(a2, b2, c, d2) { a2 = Bg(22, a2, d2, b2); a2.elementType = Ia; a2.lanes = c; a2.stateNode = { isHidden: false }; return a2; } function xh(a2, b2, c) { a2 = Bg(6, a2, null, b2); a2.lanes = c; return a2; } function zh(a2, b2, c) { b2 = Bg(4, null !== a2.children ? a2.children : [], a2.key, b2); b2.lanes = c; b2.stateNode = { containerInfo: a2.containerInfo, pendingChildren: null, implementation: a2.implementation }; return b2; } function bl(a2, b2, c, d2, e2) { this.tag = b2; this.containerInfo = a2; this.finishedWork = this.pingCache = this.current = this.pendingChildren = null; this.timeoutHandle = -1; this.callbackNode = this.pendingContext = this.context = null; this.callbackPriority = 0; this.eventTimes = zc(0); this.expirationTimes = zc(-1); this.entangledLanes = this.finishedLanes = this.mutableReadLanes = this.expiredLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0; this.entanglements = zc(0); this.identifierPrefix = d2; this.onRecoverableError = e2; this.mutableSourceEagerHydrationData = null; } function cl(a2, b2, c, d2, e2, f2, g2, h2, k2) { a2 = new bl(a2, b2, c, h2, k2); 1 === b2 ? (b2 = 1, true === f2 && (b2 |= 8)) : b2 = 0; f2 = Bg(3, null, null, b2); a2.current = f2; f2.stateNode = a2; f2.memoizedState = { element: d2, isDehydrated: c, cache: null, transitions: null, pendingSuspenseBoundaries: null }; ah(f2); return a2; } function dl(a2, b2, c) { var d2 = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null; return { $$typeof: wa, key: null == d2 ? null : "" + d2, children: a2, containerInfo: b2, implementation: c }; } function el(a2) { if (!a2) return Vf; a2 = a2._reactInternals; a: { if (Vb(a2) !== a2 || 1 !== a2.tag) throw Error(p(170)); var b2 = a2; do { switch (b2.tag) { case 3: b2 = b2.stateNode.context; break a; case 1: if (Zf(b2.type)) { b2 = b2.stateNode.__reactInternalMemoizedMergedChildContext; break a; } } b2 = b2.return; } while (null !== b2); throw Error(p(171)); } if (1 === a2.tag) { var c = a2.type; if (Zf(c)) return bg(a2, c, b2); } return b2; } function fl(a2, b2, c, d2, e2, f2, g2, h2, k2) { a2 = cl(c, d2, true, a2, e2, f2, g2, h2, k2); a2.context = el(null); c = a2.current; d2 = L$1(); e2 = lh(c); f2 = ch(d2, e2); f2.callback = void 0 !== b2 && null !== b2 ? b2 : null; dh(c, f2, e2); a2.current.lanes = e2; Ac(a2, e2, d2); Ek(a2, d2); return a2; } function gl(a2, b2, c, d2) { var e2 = b2.current, f2 = L$1(), g2 = lh(e2); c = el(c); null === b2.context ? b2.context = c : b2.pendingContext = c; b2 = ch(f2, g2); b2.payload = { element: a2 }; d2 = void 0 === d2 ? null : d2; null !== d2 && (b2.callback = d2); a2 = dh(e2, b2, g2); null !== a2 && (mh(a2, e2, g2, f2), eh(a2, e2, g2)); return g2; } function hl(a2) { a2 = a2.current; if (!a2.child) return null; switch (a2.child.tag) { case 5: return a2.child.stateNode; default: return a2.child.stateNode; } } function il(a2, b2) { a2 = a2.memoizedState; if (null !== a2 && null !== a2.dehydrated) { var c = a2.retryLane; a2.retryLane = 0 !== c && c < b2 ? c : b2; } } function jl(a2, b2) { il(a2, b2); (a2 = a2.alternate) && il(a2, b2); } function kl() { return null; } var ll = "function" === typeof reportError ? reportError : function(a2) { console.error(a2); }; function ml(a2) { this._internalRoot = a2; } nl.prototype.render = ml.prototype.render = function(a2) { var b2 = this._internalRoot; if (null === b2) throw Error(p(409)); gl(a2, b2, null, null); }; nl.prototype.unmount = ml.prototype.unmount = function() { var a2 = this._internalRoot; if (null !== a2) { this._internalRoot = null; var b2 = a2.containerInfo; Sk(function() { gl(null, a2, null, null); }); b2[uf] = null; } }; function nl(a2) { this._internalRoot = a2; } nl.prototype.unstable_scheduleHydration = function(a2) { if (a2) { var b2 = Hc(); a2 = { blockedOn: null, target: a2, priority: b2 }; for (var c = 0; c < Qc.length && 0 !== b2 && b2 < Qc[c].priority; c++) ; Qc.splice(c, 0, a2); 0 === c && Vc(a2); } }; function ol(a2) { return !(!a2 || 1 !== a2.nodeType && 9 !== a2.nodeType && 11 !== a2.nodeType); } function pl(a2) { return !(!a2 || 1 !== a2.nodeType && 9 !== a2.nodeType && 11 !== a2.nodeType && (8 !== a2.nodeType || " react-mount-point-unstable " !== a2.nodeValue)); } function ql() { } function rl(a2, b2, c, d2, e2) { if (e2) { if ("function" === typeof d2) { var f2 = d2; d2 = function() { var a3 = hl(g2); f2.call(a3); }; } var g2 = fl(b2, d2, a2, 0, null, false, false, "", ql); a2._reactRootContainer = g2; a2[uf] = g2.current; sf(8 === a2.nodeType ? a2.parentNode : a2); Sk(); return g2; } for (; e2 = a2.lastChild; ) a2.removeChild(e2); if ("function" === typeof d2) { var h2 = d2; d2 = function() { var a3 = hl(k2); h2.call(a3); }; } var k2 = cl(a2, 0, false, null, null, false, false, "", ql); a2._reactRootContainer = k2; a2[uf] = k2.current; sf(8 === a2.nodeType ? a2.parentNode : a2); Sk(function() { gl(b2, k2, c, d2); }); return k2; } function sl(a2, b2, c, d2, e2) { var f2 = c._reactRootContainer; if (f2) { var g2 = f2; if ("function" === typeof e2) { var h2 = e2; e2 = function() { var a3 = hl(g2); h2.call(a3); }; } gl(b2, g2, a2, e2); } else g2 = rl(c, b2, a2, e2, d2); return hl(g2); } Ec = function(a2) { switch (a2.tag) { case 3: var b2 = a2.stateNode; if (b2.current.memoizedState.isDehydrated) { var c = tc(b2.pendingLanes); 0 !== c && (Cc(b2, c | 1), Ek(b2, B$1()), 0 === (K$1 & 6) && (Hj = B$1() + 500, jg())); } break; case 13: Sk(function() { var b3 = Zg(a2, 1); if (null !== b3) { var c2 = L$1(); mh(b3, a2, 1, c2); } }), jl(a2, 1); } }; Fc = function(a2) { if (13 === a2.tag) { var b2 = Zg(a2, 134217728); if (null !== b2) { var c = L$1(); mh(b2, a2, 134217728, c); } jl(a2, 134217728); } }; Gc = function(a2) { if (13 === a2.tag) { var b2 = lh(a2), c = Zg(a2, b2); if (null !== c) { var d2 = L$1(); mh(c, a2, b2, d2); } jl(a2, b2); } }; Hc = function() { return C$1; }; Ic = function(a2, b2) { var c = C$1; try { return C$1 = a2, b2(); } finally { C$1 = c; } }; yb = function(a2, b2, c) { switch (b2) { case "input": bb(a2, c); b2 = c.name; if ("radio" === c.type && null != b2) { for (c = a2; c.parentNode; ) c = c.parentNode; c = c.querySelectorAll("input[name=" + JSON.stringify("" + b2) + '][type="radio"]'); for (b2 = 0; b2 < c.length; b2++) { var d2 = c[b2]; if (d2 !== a2 && d2.form === a2.form) { var e2 = Db(d2); if (!e2) throw Error(p(90)); Wa(d2); bb(d2, e2); } } } break; case "textarea": ib(a2, c); break; case "select": b2 = c.value, null != b2 && fb(a2, !!c.multiple, b2, false); } }; Gb = Rk; Hb = Sk; var tl = { usingClientEntryPoint: false, Events: [Cb, ue, Db, Eb, Fb, Rk] }, ul = { findFiberByHostInstance: Wc, bundleType: 0, version: "18.2.0", rendererPackageName: "react-dom" }; var vl = { bundleType: ul.bundleType, version: ul.version, rendererPackageName: ul.rendererPackageName, rendererConfig: ul.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, overrideProps: null, overridePropsDeletePath: null, overridePropsRenamePath: null, setErrorHandler: null, setSuspenseHandler: null, scheduleUpdate: null, currentDispatcherRef: ua.ReactCurrentDispatcher, findHostInstanceByFiber: function(a2) { a2 = Zb(a2); return null === a2 ? null : a2.stateNode; }, findFiberByHostInstance: ul.findFiberByHostInstance || kl, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, reconcilerVersion: "18.2.0-next-9e3b772b8-20220608" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var wl = __REACT_DEVTOOLS_GLOBAL_HOOK__; if (!wl.isDisabled && wl.supportsFiber) try { kc = wl.inject(vl), lc = wl; } catch (a2) { } } reactDom_production_min.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = tl; reactDom_production_min.createPortal = function(a2, b2) { var c = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null; if (!ol(b2)) throw Error(p(200)); return dl(a2, b2, null, c); }; reactDom_production_min.createRoot = function(a2, b2) { if (!ol(a2)) throw Error(p(299)); var c = false, d2 = "", e2 = ll; null !== b2 && void 0 !== b2 && (true === b2.unstable_strictMode && (c = true), void 0 !== b2.identifierPrefix && (d2 = b2.identifierPrefix), void 0 !== b2.onRecoverableError && (e2 = b2.onRecoverableError)); b2 = cl(a2, 1, false, null, null, c, false, d2, e2); a2[uf] = b2.current; sf(8 === a2.nodeType ? a2.parentNode : a2); return new ml(b2); }; reactDom_production_min.findDOMNode = function(a2) { if (null == a2) return null; if (1 === a2.nodeType) return a2; var b2 = a2._reactInternals; if (void 0 === b2) { if ("function" === typeof a2.render) throw Error(p(188)); a2 = Object.keys(a2).join(","); throw Error(p(268, a2)); } a2 = Zb(b2); a2 = null === a2 ? null : a2.stateNode; return a2; }; reactDom_production_min.flushSync = function(a2) { return Sk(a2); }; reactDom_production_min.hydrate = function(a2, b2, c) { if (!pl(b2)) throw Error(p(200)); return sl(null, a2, b2, true, c); }; reactDom_production_min.hydrateRoot = function(a2, b2, c) { if (!ol(a2)) throw Error(p(405)); var d2 = null != c && c.hydratedSources || null, e2 = false, f2 = "", g2 = ll; null !== c && void 0 !== c && (true === c.unstable_strictMode && (e2 = true), void 0 !== c.identifierPrefix && (f2 = c.identifierPrefix), void 0 !== c.onRecoverableError && (g2 = c.onRecoverableError)); b2 = fl(b2, null, a2, 1, null != c ? c : null, e2, false, f2, g2); a2[uf] = b2.current; sf(a2); if (d2) for (a2 = 0; a2 < d2.length; a2++) c = d2[a2], e2 = c._getVersion, e2 = e2(c._source), null == b2.mutableSourceEagerHydrationData ? b2.mutableSourceEagerHydrationData = [c, e2] : b2.mutableSourceEagerHydrationData.push( c, e2 ); return new nl(b2); }; reactDom_production_min.render = function(a2, b2, c) { if (!pl(b2)) throw Error(p(200)); return sl(null, a2, b2, false, c); }; reactDom_production_min.unmountComponentAtNode = function(a2) { if (!pl(a2)) throw Error(p(40)); return a2._reactRootContainer ? (Sk(function() { sl(null, null, a2, false, function() { a2._reactRootContainer = null; a2[uf] = null; }); }), true) : false; }; reactDom_production_min.unstable_batchedUpdates = Rk; reactDom_production_min.unstable_renderSubtreeIntoContainer = function(a2, b2, c, d2) { if (!pl(c)) throw Error(p(200)); if (null == a2 || void 0 === a2._reactInternals) throw Error(p(38)); return sl(a2, b2, c, false, d2); }; reactDom_production_min.version = "18.2.0-next-9e3b772b8-20220608"; (function(module3) { function checkDCE() { if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === "undefined" || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== "function") { return; } try { __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); } catch (err) { console.error(err); } } { checkDCE(); module3.exports = reactDom_production_min; } })(reactDom); const ReactDOM = /* @__PURE__ */ getDefaultExportFromCjs(reactDom.exports); var lib$5 = { exports: {} }; var propTypes = { exports: {} }; var ReactPropTypesSecret$1 = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"; var ReactPropTypesSecret_1 = ReactPropTypesSecret$1; var ReactPropTypesSecret = ReactPropTypesSecret_1; function emptyFunction() { } function emptyFunctionWithReset() { } emptyFunctionWithReset.resetWarningCache = emptyFunction; var factoryWithThrowingShims = function() { function shim(props, propName, componentName, location, propFullName, secret) { if (secret === ReactPropTypesSecret) { return; } var err = new Error( "Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types" ); err.name = "Invariant Violation"; throw err; } shim.isRequired = shim; function getShim() { return shim; } var ReactPropTypes = { array: shim, bigint: shim, bool: shim, func: shim, number: shim, object: shim, string: shim, symbol: shim, any: shim, arrayOf: getShim, element: shim, elementType: shim, instanceOf: getShim, node: shim, objectOf: getShim, oneOf: getShim, oneOfType: getShim, shape: getShim, exact: getShim, checkPropTypes: emptyFunctionWithReset, resetWarningCache: emptyFunction }; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; { propTypes.exports = factoryWithThrowingShims(); } (function(module3, exports2) { exports2.__esModule = true; var _react3 = react.exports; _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn2(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self2; } function _inherits2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function createEventEmitter(value) { var handlers2 = []; return { on: function on(handler) { handlers2.push(handler); }, off: function off(handler) { handlers2 = handlers2.filter(function(h2) { return h2 !== handler; }); }, get: function get2() { return value; }, set: function set2(newValue) { value = newValue; handlers2.forEach(function(handler) { return handler(value); }); } }; } function onlyChild(children) { return Array.isArray(children) ? children[0] : children; } var uniqueId = 0; function createReactContext2(defaultValue) { var _Provider$childContex, _Consumer$contextType; var contextProp = "__create-react-context-" + uniqueId++ + "__"; var Provider2 = function(_Component) { _inherits2(Provider3, _Component); function Provider3() { var _temp2, _this, _ret; _classCallCheck2(this, Provider3); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp2 = (_this = _possibleConstructorReturn2(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.emitter = createEventEmitter(_this.props.value), _temp2), _possibleConstructorReturn2(_this, _ret); } Provider3.prototype.getChildContext = function getChildContext() { var _ref; return _ref = {}, _ref[contextProp] = this.emitter, _ref; }; Provider3.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { if (this.props.value !== nextProps.value) { this.emitter.set(nextProps.value); } }; Provider3.prototype.render = function render() { return this.props.children; }; return Provider3; }(_react3.Component); Provider2.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = _propTypes22.default.object.isRequired, _Provider$childContex); var Consumer = function(_Component2) { _inherits2(Consumer2, _Component2); function Consumer2() { var _temp2, _this2, _ret2; _classCallCheck2(this, Consumer2); for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn2(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.state = { value: _this2.getValue() }, _this2.onUpdate = function() { _this2.setState({ value: _this2.getValue() }); }, _temp2), _possibleConstructorReturn2(_this2, _ret2); } Consumer2.prototype.componentDidMount = function componentDidMount() { if (this.context[contextProp]) { this.context[contextProp].on(this.onUpdate); } }; Consumer2.prototype.componentWillUnmount = function componentWillUnmount() { if (this.context[contextProp]) { this.context[contextProp].off(this.onUpdate); } }; Consumer2.prototype.getValue = function getValue2() { if (this.context[contextProp]) { return this.context[contextProp].get(); } else { return defaultValue; } }; Consumer2.prototype.render = function render() { return onlyChild(this.props.children)(this.state.value); }; return Consumer2; }(_react3.Component); Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = _propTypes22.default.object, _Consumer$contextType); return { Provider: Provider2, Consumer }; } exports2.default = createReactContext2; module3.exports = exports2["default"]; })(lib$5, lib$5.exports); const createReactContext = /* @__PURE__ */ getDefaultExportFromCjs(lib$5.exports); var _typeof$f = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _possibleConstructorReturn$c(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self2; } function _inherits$c(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function _classCallCheck$f(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var StateContext = createReactContext(null); var Container = function() { function Container2() { var _this = this; _classCallCheck$f(this, Container2); this._listeners = []; CONTAINER_DEBUG_CALLBACKS.forEach(function(cb2) { return cb2(_this); }); } Container2.prototype.setState = function setState(updater, callback) { var _this2 = this; return Promise.resolve().then(function() { var nextState = void 0; if (typeof updater === "function") { nextState = updater(_this2.state); } else { nextState = updater; } if (nextState == null) { if (callback) callback(); return; } _this2.state = Object.assign({}, _this2.state, nextState); var promises = _this2._listeners.map(function(listener) { return listener(); }); return Promise.all(promises).then(function() { if (callback) { return callback(); } }); }); }; Container2.prototype.subscribe = function subscribe(fn) { this._listeners.push(fn); }; Container2.prototype.unsubscribe = function unsubscribe(fn) { this._listeners = this._listeners.filter(function(f2) { return f2 !== fn; }); }; return Container2; }(); var DUMMY_STATE = {}; var Subscribe = function(_React$Component) { _inherits$c(Subscribe2, _React$Component); function Subscribe2() { var _temp2, _this3, _ret; _classCallCheck$f(this, Subscribe2); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp2 = (_this3 = _possibleConstructorReturn$c(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this3), _this3.state = {}, _this3.instances = [], _this3.unmounted = false, _this3.onUpdate = function() { return new Promise(function(resolve) { if (!_this3.unmounted) { _this3.setState(DUMMY_STATE, resolve); } else { resolve(); } }); }, _temp2), _possibleConstructorReturn$c(_this3, _ret); } Subscribe2.prototype.componentWillUnmount = function componentWillUnmount() { this.unmounted = true; this._unsubscribe(); }; Subscribe2.prototype._unsubscribe = function _unsubscribe() { var _this4 = this; this.instances.forEach(function(container) { container.unsubscribe(_this4.onUpdate); }); }; Subscribe2.prototype._createInstances = function _createInstances(map2, containers) { var _this5 = this; this._unsubscribe(); if (map2 === null) { throw new Error("You must wrap your <Subscribe> components with a <Provider>"); } var safeMap = map2; var instances = containers.map(function(ContainerItem) { var instance = void 0; if ((typeof ContainerItem === "undefined" ? "undefined" : _typeof$f(ContainerItem)) === "object" && ContainerItem instanceof Container) { instance = ContainerItem; } else { instance = safeMap.get(ContainerItem); if (!instance) { instance = new ContainerItem(); safeMap.set(ContainerItem, instance); } } instance.unsubscribe(_this5.onUpdate); instance.subscribe(_this5.onUpdate); return instance; }); this.instances = instances; return instances; }; Subscribe2.prototype.render = function render() { var _this6 = this; return React.createElement( StateContext.Consumer, null, function(map2) { return _this6.props.children.apply(null, _this6._createInstances(map2, _this6.props.to)); } ); }; return Subscribe2; }(React.Component); function Provider(props) { return React.createElement( StateContext.Consumer, null, function(parentMap) { var childMap = new Map(parentMap); if (props.inject) { props.inject.forEach(function(instance) { childMap.set(instance.constructor, instance); }); } return React.createElement( StateContext.Provider, { value: childMap }, props.children ); } ); } var CONTAINER_DEBUG_CALLBACKS = []; function _typeof$e(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$e = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$e = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$e(obj); } function _classCallCheck$e(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits$b(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$c(subClass, superClass); } function _setPrototypeOf$c(o2, p2) { _setPrototypeOf$c = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$c(o2, p2); } function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function() { var Super = _getPrototypeOf$a(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$a(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$b(this, result); }; } function _possibleConstructorReturn$b(self2, call) { if (call && (_typeof$e(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$b(self2); } function _assertThisInitialized$b(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$a() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$a(o2) { _getPrototypeOf$a = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$a(o2); } function _defineProperty$9(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var GlobalStateContainer = /* @__PURE__ */ function(_Container) { _inherits$b(GlobalStateContainer2, _Container); var _super = _createSuper$a(GlobalStateContainer2); function GlobalStateContainer2() { var _this; _classCallCheck$e(this, GlobalStateContainer2); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$9(_assertThisInitialized$b(_this), "state", { opened: false, tabIndex: "state", defaultSize: 0.5 }); _defineProperty$9(_assertThisInitialized$b(_this), "toggleDevTools", function() { var _this$state = _this.state, opened = _this$state.opened, defaultSize = _this$state.defaultSize; if (opened) { document.querySelector("html").style.marginBottom = ""; } else { var size2 = defaultSize * window.innerHeight; document.querySelector("html").style.marginBottom = "".concat(size2, "px"); } _this.setState({ opened: !opened }); }); _defineProperty$9(_assertThisInitialized$b(_this), "selectTab", function() { var tabIndex = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; _this.setState({ tabIndex }); }); _defineProperty$9(_assertThisInitialized$b(_this), "updateBodyMargin", function(devToolsSize) { var size2 = devToolsSize * window.innerHeight; document.querySelector("html").style.marginBottom = "".concat(size2, "px"); }); return _this; } return GlobalStateContainer2; }(Container); function _extends$5() { _extends$5 = Object.assign ? Object.assign.bind() : function(target2) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target2[key2] = source[key2]; } } } return target2; }; return _extends$5.apply(this, arguments); } function memoize(fn) { var cache = /* @__PURE__ */ Object.create(null); return function(arg) { if (cache[arg] === void 0) cache[arg] = fn(arg); return cache[arg]; }; } var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; var isPropValid = /* @__PURE__ */ memoize( function(prop2) { return reactPropsRegex.test(prop2) || prop2.charCodeAt(0) === 111 && prop2.charCodeAt(1) === 110 && prop2.charCodeAt(2) < 91; } ); function sheetForTag(tag) { if (tag.sheet) { return tag.sheet; } for (var i2 = 0; i2 < document.styleSheets.length; i2++) { if (document.styleSheets[i2].ownerNode === tag) { return document.styleSheets[i2]; } } } function createStyleElement(options) { var tag = document.createElement("style"); tag.setAttribute("data-emotion", options.key); if (options.nonce !== void 0) { tag.setAttribute("nonce", options.nonce); } tag.appendChild(document.createTextNode("")); tag.setAttribute("data-s", ""); return tag; } var StyleSheet = /* @__PURE__ */ function() { function StyleSheet2(options) { var _this = this; this._insertTag = function(tag) { var before; if (_this.tags.length === 0) { if (_this.insertionPoint) { before = _this.insertionPoint.nextSibling; } else if (_this.prepend) { before = _this.container.firstChild; } else { before = _this.before; } } else { before = _this.tags[_this.tags.length - 1].nextSibling; } _this.container.insertBefore(tag, before); _this.tags.push(tag); }; this.isSpeedy = options.speedy === void 0 ? true : options.speedy; this.tags = []; this.ctr = 0; this.nonce = options.nonce; this.key = options.key; this.container = options.container; this.prepend = options.prepend; this.insertionPoint = options.insertionPoint; this.before = null; } var _proto = StyleSheet2.prototype; _proto.hydrate = function hydrate(nodes2) { nodes2.forEach(this._insertTag); }; _proto.insert = function insert2(rule) { if (this.ctr % (this.isSpeedy ? 65e3 : 1) === 0) { this._insertTag(createStyleElement(this)); } var tag = this.tags[this.tags.length - 1]; if (this.isSpeedy) { var sheet = sheetForTag(tag); try { sheet.insertRule(rule, sheet.cssRules.length); } catch (e2) { } } else { tag.appendChild(document.createTextNode(rule)); } this.ctr++; }; _proto.flush = function flush() { this.tags.forEach(function(tag) { return tag.parentNode && tag.parentNode.removeChild(tag); }); this.tags = []; this.ctr = 0; }; return StyleSheet2; }(); var identifierWithPointTracking = function identifierWithPointTracking2(begin, points, index2) { var previous2 = 0; var character2 = 0; while (true) { previous2 = character2; character2 = peek(); if (previous2 === 38 && character2 === 12) { points[index2] = 1; } if (token(character2)) { break; } next$1(); } return slice(begin, position); }; var toRules = function toRules2(parsed, points) { var index2 = -1; var character2 = 44; do { switch (token(character2)) { case 0: if (character2 === 38 && peek() === 12) { points[index2] = 1; } parsed[index2] += identifierWithPointTracking(position - 1, points, index2); break; case 2: parsed[index2] += delimit(character2); break; case 4: if (character2 === 44) { parsed[++index2] = peek() === 58 ? "&\f" : ""; points[index2] = parsed[index2].length; break; } default: parsed[index2] += from(character2); } } while (character2 = next$1()); return parsed; }; var getRules = function getRules2(value, points) { return dealloc(toRules(alloc(value), points)); }; var fixedElements = /* @__PURE__ */ new WeakMap(); var compat = function compat2(element) { if (element.type !== "rule" || !element.parent || element.length < 1) { return; } var value = element.value, parent = element.parent; var isImplicitRule = element.column === parent.column && element.line === parent.line; while (parent.type !== "rule") { parent = parent.parent; if (!parent) return; } if (element.props.length === 1 && value.charCodeAt(0) !== 58 && !fixedElements.get(parent)) { return; } if (isImplicitRule) { return; } fixedElements.set(element, true); var points = []; var rules = getRules(value, points); var parentRules = parent.props; for (var i2 = 0, k2 = 0; i2 < rules.length; i2++) { for (var j2 = 0; j2 < parentRules.length; j2++, k2++) { element.props[k2] = points[i2] ? rules[i2].replace(/&\f/g, parentRules[j2]) : parentRules[j2] + " " + rules[i2]; } } }; var removeLabel = function removeLabel2(element) { if (element.type === "decl") { var value = element.value; if (value.charCodeAt(0) === 108 && value.charCodeAt(2) === 98) { element["return"] = ""; element.value = ""; } } }; function prefix(value, length2) { switch (hash(value, length2)) { case 5103: return WEBKIT + "print-" + value + value; case 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921: case 5572: case 6356: case 5844: case 3191: case 6645: case 3005: case 6391: case 5879: case 5623: case 6135: case 4599: case 4855: case 4215: case 6389: case 5109: case 5365: case 5621: case 3829: return WEBKIT + value + value; case 5349: case 4246: case 4810: case 6968: case 2756: return WEBKIT + value + MOZ + value + MS + value + value; case 6828: case 4268: return WEBKIT + value + MS + value + value; case 6165: return WEBKIT + value + MS + "flex-" + value + value; case 5187: return WEBKIT + value + replace$1(value, /(\w+).+(:[^]+)/, WEBKIT + "box-$1$2" + MS + "flex-$1$2") + value; case 5443: return WEBKIT + value + MS + "flex-item-" + replace$1(value, /flex-|-self/, "") + value; case 4675: return WEBKIT + value + MS + "flex-line-pack" + replace$1(value, /align-content|flex-|-self/, "") + value; case 5548: return WEBKIT + value + MS + replace$1(value, "shrink", "negative") + value; case 5292: return WEBKIT + value + MS + replace$1(value, "basis", "preferred-size") + value; case 6060: return WEBKIT + "box-" + replace$1(value, "-grow", "") + WEBKIT + value + MS + replace$1(value, "grow", "positive") + value; case 4554: return WEBKIT + replace$1(value, /([^-])(transform)/g, "$1" + WEBKIT + "$2") + value; case 6187: return replace$1(replace$1(replace$1(value, /(zoom-|grab)/, WEBKIT + "$1"), /(image-set)/, WEBKIT + "$1"), value, "") + value; case 5495: case 3959: return replace$1(value, /(image-set\([^]*)/, WEBKIT + "$1$`$1"); case 4968: return replace$1(replace$1(value, /(.+:)(flex-)?(.*)/, WEBKIT + "box-pack:$3" + MS + "flex-pack:$3"), /s.+-b[^;]+/, "justify") + WEBKIT + value + value; case 4095: case 3583: case 4068: case 2532: return replace$1(value, /(.+)-inline(.+)/, WEBKIT + "$1$2") + value; case 8116: case 7059: case 5753: case 5535: case 5445: case 5701: case 4933: case 4677: case 5533: case 5789: case 5021: case 4765: if (strlen(value) - 1 - length2 > 6) switch (charat(value, length2 + 1)) { case 109: if (charat(value, length2 + 4) !== 45) break; case 102: return replace$1(value, /(.+:)(.+)-([^]+)/, "$1" + WEBKIT + "$2-$3$1" + MOZ + (charat(value, length2 + 3) == 108 ? "$3" : "$2-$3")) + value; case 115: return ~indexof(value, "stretch") ? prefix(replace$1(value, "stretch", "fill-available"), length2) + value : value; } break; case 4949: if (charat(value, length2 + 1) !== 115) break; case 6444: switch (charat(value, strlen(value) - 3 - (~indexof(value, "!important") && 10))) { case 107: return replace$1(value, ":", ":" + WEBKIT) + value; case 101: return replace$1(value, /(.+:)([^;!]+)(;|!.+)?/, "$1" + WEBKIT + (charat(value, 14) === 45 ? "inline-" : "") + "box$3$1" + WEBKIT + "$2$3$1" + MS + "$2box$3") + value; } break; case 5936: switch (charat(value, length2 + 11)) { case 114: return WEBKIT + value + MS + replace$1(value, /[svh]\w+-[tblr]{2}/, "tb") + value; case 108: return WEBKIT + value + MS + replace$1(value, /[svh]\w+-[tblr]{2}/, "tb-rl") + value; case 45: return WEBKIT + value + MS + replace$1(value, /[svh]\w+-[tblr]{2}/, "lr") + value; } return WEBKIT + value + MS + value + value; } return value; } var prefixer = function prefixer2(element, index2, children, callback) { if (element.length > -1) { if (!element["return"]) switch (element.type) { case DECLARATION: element["return"] = prefix(element.value, element.length); break; case KEYFRAMES: return serialize([copy$1(element, { value: replace$1(element.value, "@", "@" + WEBKIT) })], callback); case RULESET: if (element.length) return combine(element.props, function(value) { switch (match(value, /(::plac\w+|:read-\w+)/)) { case ":read-only": case ":read-write": return serialize([copy$1(element, { props: [replace$1(value, /:(read-\w+)/, ":" + MOZ + "$1")] })], callback); case "::placeholder": return serialize([copy$1(element, { props: [replace$1(value, /:(plac\w+)/, ":" + WEBKIT + "input-$1")] }), copy$1(element, { props: [replace$1(value, /:(plac\w+)/, ":" + MOZ + "$1")] }), copy$1(element, { props: [replace$1(value, /:(plac\w+)/, MS + "input-$1")] })], callback); } return ""; }); } } }; var defaultStylisPlugins = [prefixer]; var createCache = function createCache2(options) { var key2 = options.key; if (key2 === "css") { var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); Array.prototype.forEach.call(ssrStyles, function(node2) { var dataEmotionAttribute = node2.getAttribute("data-emotion"); if (dataEmotionAttribute.indexOf(" ") === -1) { return; } document.head.appendChild(node2); node2.setAttribute("data-s", ""); }); } var stylisPlugins = options.stylisPlugins || defaultStylisPlugins; var inserted = {}; var container; var nodesToHydrate = []; { container = options.container || document.head; Array.prototype.forEach.call( document.querySelectorAll('style[data-emotion^="' + key2 + ' "]'), function(node2) { var attrib = node2.getAttribute("data-emotion").split(" "); for (var i2 = 1; i2 < attrib.length; i2++) { inserted[attrib[i2]] = true; } nodesToHydrate.push(node2); } ); } var _insert; var omnipresentPlugins = [compat, removeLabel]; { var currentSheet; var finalizingPlugins = [stringify$1, rulesheet(function(rule) { currentSheet.insert(rule); })]; var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); var stylis = function stylis2(styles2) { return serialize(compile(styles2), serializer); }; _insert = function insert2(selector, serialized, sheet, shouldCache) { currentSheet = sheet; stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); if (shouldCache) { cache.inserted[serialized.name] = true; } }; } var cache = { key: key2, sheet: new StyleSheet({ key: key2, container, nonce: options.nonce, speedy: options.speedy, prepend: options.prepend, insertionPoint: options.insertionPoint }), nonce: options.nonce, inserted, registered: {}, insert: _insert }; cache.sheet.hydrate(nodesToHydrate); return cache; }; var isBrowser = true; function getRegisteredStyles(registered, registeredStyles, classNames) { var rawClassName = ""; classNames.split(" ").forEach(function(className) { if (registered[className] !== void 0) { registeredStyles.push(registered[className] + ";"); } else { rawClassName += className + " "; } }); return rawClassName; } var registerStyles = function registerStyles2(cache, serialized, isStringTag) { var className = cache.key + "-" + serialized.name; if ((isStringTag === false || isBrowser === false) && cache.registered[className] === void 0) { cache.registered[className] = serialized.styles; } }; var insertStyles = function insertStyles2(cache, serialized, isStringTag) { registerStyles(cache, serialized, isStringTag); var className = cache.key + "-" + serialized.name; if (cache.inserted[serialized.name] === void 0) { var current = serialized; do { cache.insert(serialized === current ? "." + className : "", current, cache.sheet, true); current = current.next; } while (current !== void 0); } }; function murmur2(str2) { var h2 = 0; var k2, i2 = 0, len = str2.length; for (; len >= 4; ++i2, len -= 4) { k2 = str2.charCodeAt(i2) & 255 | (str2.charCodeAt(++i2) & 255) << 8 | (str2.charCodeAt(++i2) & 255) << 16 | (str2.charCodeAt(++i2) & 255) << 24; k2 = (k2 & 65535) * 1540483477 + ((k2 >>> 16) * 59797 << 16); k2 ^= k2 >>> 24; h2 = (k2 & 65535) * 1540483477 + ((k2 >>> 16) * 59797 << 16) ^ (h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16); } switch (len) { case 3: h2 ^= (str2.charCodeAt(i2 + 2) & 255) << 16; case 2: h2 ^= (str2.charCodeAt(i2 + 1) & 255) << 8; case 1: h2 ^= str2.charCodeAt(i2) & 255; h2 = (h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16); } h2 ^= h2 >>> 13; h2 = (h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16); return ((h2 ^ h2 >>> 15) >>> 0).toString(36); } var unitlessKeys = { animationIterationCount: 1, borderImageOutset: 1, borderImageSlice: 1, borderImageWidth: 1, boxFlex: 1, boxFlexGroup: 1, boxOrdinalGroup: 1, columnCount: 1, columns: 1, flex: 1, flexGrow: 1, flexPositive: 1, flexShrink: 1, flexNegative: 1, flexOrder: 1, gridRow: 1, gridRowEnd: 1, gridRowSpan: 1, gridRowStart: 1, gridColumn: 1, gridColumnEnd: 1, gridColumnSpan: 1, gridColumnStart: 1, msGridRow: 1, msGridRowSpan: 1, msGridColumn: 1, msGridColumnSpan: 1, fontWeight: 1, lineHeight: 1, opacity: 1, order: 1, orphans: 1, tabSize: 1, widows: 1, zIndex: 1, zoom: 1, WebkitLineClamp: 1, fillOpacity: 1, floodOpacity: 1, stopOpacity: 1, strokeDasharray: 1, strokeDashoffset: 1, strokeMiterlimit: 1, strokeOpacity: 1, strokeWidth: 1 }; var hyphenateRegex = /[A-Z]|^ms/g; var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g; var isCustomProperty = function isCustomProperty2(property) { return property.charCodeAt(1) === 45; }; var isProcessableValue = function isProcessableValue2(value) { return value != null && typeof value !== "boolean"; }; var processStyleName = /* @__PURE__ */ memoize(function(styleName) { return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, "-$&").toLowerCase(); }); var processStyleValue = function processStyleValue2(key2, value) { switch (key2) { case "animation": case "animationName": { if (typeof value === "string") { return value.replace(animationRegex, function(match2, p1, p2) { cursor$1 = { name: p1, styles: p2, next: cursor$1 }; return p1; }); } } } if (unitlessKeys[key2] !== 1 && !isCustomProperty(key2) && typeof value === "number" && value !== 0) { return value + "px"; } return value; }; var noComponentSelectorMessage = "Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform."; function handleInterpolation(mergedProps, registered, interpolation) { if (interpolation == null) { return ""; } if (interpolation.__emotion_styles !== void 0) { return interpolation; } switch (typeof interpolation) { case "boolean": { return ""; } case "object": { if (interpolation.anim === 1) { cursor$1 = { name: interpolation.name, styles: interpolation.styles, next: cursor$1 }; return interpolation.name; } if (interpolation.styles !== void 0) { var next2 = interpolation.next; if (next2 !== void 0) { while (next2 !== void 0) { cursor$1 = { name: next2.name, styles: next2.styles, next: cursor$1 }; next2 = next2.next; } } var styles2 = interpolation.styles + ";"; return styles2; } return createStringFromObject(mergedProps, registered, interpolation); } case "function": { if (mergedProps !== void 0) { var previousCursor = cursor$1; var result = interpolation(mergedProps); cursor$1 = previousCursor; return handleInterpolation(mergedProps, registered, result); } break; } } if (registered == null) { return interpolation; } var cached = registered[interpolation]; return cached !== void 0 ? cached : interpolation; } function createStringFromObject(mergedProps, registered, obj) { var string = ""; if (Array.isArray(obj)) { for (var i2 = 0; i2 < obj.length; i2++) { string += handleInterpolation(mergedProps, registered, obj[i2]) + ";"; } } else { for (var _key in obj) { var value = obj[_key]; if (typeof value !== "object") { if (registered != null && registered[value] !== void 0) { string += _key + "{" + registered[value] + "}"; } else if (isProcessableValue(value)) { string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";"; } } else { if (_key === "NO_COMPONENT_SELECTOR" && false) { throw new Error(noComponentSelectorMessage); } if (Array.isArray(value) && typeof value[0] === "string" && (registered == null || registered[value[0]] === void 0)) { for (var _i = 0; _i < value.length; _i++) { if (isProcessableValue(value[_i])) { string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";"; } } } else { var interpolated = handleInterpolation(mergedProps, registered, value); switch (_key) { case "animation": case "animationName": { string += processStyleName(_key) + ":" + interpolated + ";"; break; } default: { string += _key + "{" + interpolated + "}"; } } } } } } return string; } var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g; var cursor$1; var serializeStyles = function serializeStyles2(args, registered, mergedProps) { if (args.length === 1 && typeof args[0] === "object" && args[0] !== null && args[0].styles !== void 0) { return args[0]; } var stringMode = true; var styles2 = ""; cursor$1 = void 0; var strings = args[0]; if (strings == null || strings.raw === void 0) { stringMode = false; styles2 += handleInterpolation(mergedProps, registered, strings); } else { styles2 += strings[0]; } for (var i2 = 1; i2 < args.length; i2++) { styles2 += handleInterpolation(mergedProps, registered, args[i2]); if (stringMode) { styles2 += strings[i2]; } } labelPattern.lastIndex = 0; var identifierName = ""; var match2; while ((match2 = labelPattern.exec(styles2)) !== null) { identifierName += "-" + match2[1]; } var name = murmur2(styles2) + identifierName; return { name, styles: styles2, next: cursor$1 }; }; var syncFallback = function syncFallback2(create2) { return create2(); }; var useInsertionEffect = React$1["useInsertionEffect"] ? React$1["useInsertionEffect"] : false; var useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback; var EmotionCacheContext = /* @__PURE__ */ react.exports.createContext( typeof HTMLElement !== "undefined" ? /* @__PURE__ */ createCache({ key: "css" }) : null ); EmotionCacheContext.Provider; var withEmotionCache = function withEmotionCache2(func) { return /* @__PURE__ */ react.exports.forwardRef(function(props, ref) { var cache = react.exports.useContext(EmotionCacheContext); return func(props, cache, ref); }); }; var ThemeContext = /* @__PURE__ */ react.exports.createContext({}); var testOmitPropsOnStringTag = isPropValid; var testOmitPropsOnComponent = function testOmitPropsOnComponent2(key2) { return key2 !== "theme"; }; var getDefaultShouldForwardProp = function getDefaultShouldForwardProp2(tag) { return typeof tag === "string" && tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent; }; var composeShouldForwardProps = function composeShouldForwardProps2(tag, options, isReal) { var shouldForwardProp; if (options) { var optionsShouldForwardProp = options.shouldForwardProp; shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function(propName) { return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName); } : optionsShouldForwardProp; } if (typeof shouldForwardProp !== "function" && isReal) { shouldForwardProp = tag.__emotion_forwardProp; } return shouldForwardProp; }; var Insertion = function Insertion2(_ref) { var cache = _ref.cache, serialized = _ref.serialized, isStringTag = _ref.isStringTag; registerStyles(cache, serialized, isStringTag); useInsertionEffectAlwaysWithSyncFallback(function() { return insertStyles(cache, serialized, isStringTag); }); return null; }; var createStyled = function createStyled2(tag, options) { var isReal = tag.__emotion_real === tag; var baseTag = isReal && tag.__emotion_base || tag; var identifierName; var targetClassName; if (options !== void 0) { identifierName = options.label; targetClassName = options.target; } var shouldForwardProp = composeShouldForwardProps(tag, options, isReal); var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag); var shouldUseAs = !defaultShouldForwardProp("as"); return function() { var args = arguments; var styles2 = isReal && tag.__emotion_styles !== void 0 ? tag.__emotion_styles.slice(0) : []; if (identifierName !== void 0) { styles2.push("label:" + identifierName + ";"); } if (args[0] == null || args[0].raw === void 0) { styles2.push.apply(styles2, args); } else { styles2.push(args[0][0]); var len = args.length; var i2 = 1; for (; i2 < len; i2++) { styles2.push(args[i2], args[0][i2]); } } var Styled = withEmotionCache(function(props, cache, ref) { var FinalTag = shouldUseAs && props.as || baseTag; var className = ""; var classInterpolations = []; var mergedProps = props; if (props.theme == null) { mergedProps = {}; for (var key2 in props) { mergedProps[key2] = props[key2]; } mergedProps.theme = react.exports.useContext(ThemeContext); } if (typeof props.className === "string") { className = getRegisteredStyles(cache.registered, classInterpolations, props.className); } else if (props.className != null) { className = props.className + " "; } var serialized = serializeStyles(styles2.concat(classInterpolations), cache.registered, mergedProps); className += cache.key + "-" + serialized.name; if (targetClassName !== void 0) { className += " " + targetClassName; } var finalShouldForwardProp = shouldUseAs && shouldForwardProp === void 0 ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp; var newProps = {}; for (var _key in props) { if (shouldUseAs && _key === "as") continue; if (finalShouldForwardProp(_key)) { newProps[_key] = props[_key]; } } newProps.className = className; newProps.ref = ref; return /* @__PURE__ */ react.exports.createElement(react.exports.Fragment, null, /* @__PURE__ */ react.exports.createElement(Insertion, { cache, serialized, isStringTag: typeof FinalTag === "string" }), /* @__PURE__ */ react.exports.createElement(FinalTag, newProps)); }); Styled.displayName = identifierName !== void 0 ? identifierName : "Styled(" + (typeof baseTag === "string" ? baseTag : baseTag.displayName || baseTag.name || "Component") + ")"; Styled.defaultProps = tag.defaultProps; Styled.__emotion_real = Styled; Styled.__emotion_base = baseTag; Styled.__emotion_styles = styles2; Styled.__emotion_forwardProp = shouldForwardProp; Object.defineProperty(Styled, "toString", { value: function value() { if (targetClassName === void 0 && false) { return "NO_COMPONENT_SELECTOR"; } return "." + targetClassName; } }); Styled.withComponent = function(nextTag, nextOptions) { return createStyled2(nextTag, _extends$5({}, options, nextOptions, { shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true) })).apply(void 0, styles2); }; return Styled; }; }; var tags = [ "a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "u", "ul", "var", "video", "wbr", "circle", "clipPath", "defs", "ellipse", "foreignObject", "g", "image", "line", "linearGradient", "mask", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "stop", "svg", "text", "tspan" ]; var newStyled = createStyled.bind(); tags.forEach(function(tagName) { newStyled[tagName] = newStyled(tagName); }); var jsonTreeTheme = { scheme: "monokai", base00: "#363755", base01: "#604D49", base02: "#6D5A55", base03: "#D1929B", base04: "#B79F8D", base05: "#F9F8F2", base06: "#F7F4F1", base07: "#FAF8F5", base08: "#FA3E7E", base09: "#FD993C", base0A: "#F6BF81", base0B: "#B8E248", base0C: "#B4EFE4", base0D: "#85D9EF", base0E: "#BE87FF", base0F: "#D6724C" }; var mainTheme = { main: "#ffa2b1", main20: "rgba(255, 162, 177, .2)", main40: "rgba(255, 162, 177, .4)", main60: "rgba(255, 162, 177, .6)", main80: "rgba(255, 162, 177, .8)", main90: "rgba(255, 162, 177, .9)", mainBg: "#363755", softerMain: "#BB91A3", white: "#fff", white05: "rgba(255, 255, 255, .05)", white10: "rgba(255, 255, 255, .1)", white20: "rgba(255, 255, 255, .2)", white60: "rgba(255, 255, 255, .6)", white80: "rgba(255, 255, 255, .8)", black30: "rgba(0, 0, 0, .3)", lightYellow: "#FFF9C4", lightPink: "#FB4B85", darkGreen: "#81AF6D", syntax: jsonTreeTheme }; var FloattingButton = newStyled("div")({ position: "fixed", bottom: "16px", right: "16px", background: mainTheme.mainBg, boxShadow: "0 0 30px ".concat(mainTheme.black30), borderRadius: "50%", padding: "4px 6px", transition: "opacity 0.3s", zIndex: 99999, "&:hover": { opacity: 0.7, cursor: "pointer" }, "& svg": { width: "34px", height: "34px", position: "relative", bottom: "-2px" } }); FloattingButton.displayName = "FloattingButton"; function DevToolsCollapsed(props) { return /* @__PURE__ */ React.createElement(FloattingButton, { onClick: props.onClick }, /* @__PURE__ */ React.createElement("svg", { width: "530", height: "530", viewBox: "0 0 530 530", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink" }, /* @__PURE__ */ React.createElement("title", null, "prosemirror"), /* @__PURE__ */ React.createElement("desc", null, "Created using Figma"), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#a", transform: "matrix(2 0 0 2 118 116)", fill: "#FFF" }), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#b", transform: "rotate(16 59.054 420.192) scale(2)", fill: "#FFF" }), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#c", transform: "matrix(2 0 0 2 154.024 141.58)", fill: "#363755" }), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#d", transform: "matrix(2 0 0 2 220 334.8)", fill: "#FFF" }), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#e", transform: "matrix(2 0 0 2 218.826 262.052)", fill: "#363755" }), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#f", transform: "matrix(2 0 0 2 197.108 184.998)", fill: "#FFF" }), /* @__PURE__ */ React.createElement("use", { xlinkHref: "#g", transform: "matrix(2 0 0 2 221.8 216)", fill: "#363755" }), /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("path", { id: "a", d: "M73.5 0C32.859 0 0 32.859 0 73.5S32.859 147 73.5 147 147 114.141 147 73.5 114.069 0 73.5 0z" }), /* @__PURE__ */ React.createElement("path", { id: "b", d: "M193.601 107.116c0-13.376 8.238-23.91 20.619-31.153-2.244-7.447-5.19-14.6-8.824-21.32-13.886 3.633-25.12-1.799-34.568-11.26-9.449-9.437-12.344-20.672-8.709-34.571A111.362 111.362 0 0 0 140.799 0c-7.243 12.37-20.339 20.594-33.689 20.594-13.363 0-26.446-8.225-33.701-20.594A110.888 110.888 0 0 0 52.1 8.812c3.634 13.9.753 25.134-8.721 34.57-9.436 9.462-20.67 14.894-34.569 11.26A112.178 112.178 0 0 0 0 75.963c12.369 7.243 20.593 17.777 20.593 31.153 0 13.352-8.224 26.448-20.593 33.704a113.338 113.338 0 0 0 8.811 21.321c13.899-3.634 25.133-.752 34.569 8.697 9.448 9.462 12.355 20.696 8.721 34.57a112.653 112.653 0 0 0 21.32 8.837c7.243-12.407 20.338-20.619 33.702-20.619 13.35 0 26.446 8.225 33.701 20.619a114.22 114.22 0 0 0 21.32-8.837c-3.634-13.874-.752-25.108 8.709-34.57 9.449-9.437 20.683-14.869 34.569-11.26a112.343 112.343 0 0 0 8.823-21.321c-12.406-7.256-20.644-17.789-20.644-31.141zm-86.491 46.57c-25.732 0-46.58-20.849-46.58-46.57 0-25.733 20.86-46.595 46.58-46.595 25.732 0 46.567 20.875 46.567 46.595 0 25.734-20.835 46.57-46.567 46.57z" }), /* @__PURE__ */ React.createElement("path", { id: "c", d: "M98.088 49.91c-6.9 83.9 10.8 103.401 10.8 103.401s-55.1 5.499-82.7-13.401c-30.5-20.9-26-67.5-25.9-94.6.1-28.4 25.6-45.8 49.9-45.3 29.1.5 50.2 21.6 47.9 49.9z" }), /* @__PURE__ */ React.createElement("path", { id: "d", d: "M.1.1c12.2 33.3 22.5 42.7 40 55.2 25.3 18 36.6 17.5 76.3 41C78.1 60.3 30.8 45.7 0 0l.1.1z" }), /* @__PURE__ */ React.createElement("path", { id: "e", d: "M.687 36.474c3 13.3 17.9 29.9 30.4 41.6 24.8 23.2 42 22.4 86 54.7-18.2-51.8-18.8-62-43.5-106.1-24.7-44-67.6-20.3-67.6-20.3s-8.4 16.6-5.3 29.9v.2z" }), /* @__PURE__ */ React.createElement("path", { id: "f", d: "M38.346 11.5s-4-11.6-18-11.5c-30 .2-28.8 52.1 16.9 52 39.6-.1 39.2-49.4 16.1-49.6-10.2-.2-15 9.1-15 9.1z" }), /* @__PURE__ */ React.createElement("path", { id: "g", d: "M26.5 15c10.8 0 2 14.9-.6 20.9-1.8-8.4-10.2-20.9.6-20.9zM10.2.1C4.6.1 0 4.6 0 10.3c0 5.6 4.5 10.2 10.2 10.2 5.6 0 10.2-4.5 10.2-10.2C20.4 4.7 15.9.1 10.2.1zM40.7 0c-4.8 0-8.8 4.5-8.8 10.2 0 5.6 3.9 10.2 8.8 10.2 4.8 0 8.8-4.5 8.8-10.2C49.5 4.6 45.6 0 40.7 0z" })))); } var lib$4 = {}; var Dock$1 = {}; var funcTag$2 = "[object Function]"; var reIsHostCtor$1 = /^\[object .+?Constructor\]$/; function isObjectLike$4(value) { return !!value && typeof value == "object"; } var objectProto$3 = Object.prototype; var fnToString = Function.prototype.toString; var hasOwnProperty$4 = objectProto$3.hasOwnProperty; var objToString = objectProto$3.toString; var reIsNative$1 = RegExp( "^" + fnToString.call(hasOwnProperty$4).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); function getNative$2(object, key2) { var value = object == null ? void 0 : object[key2]; return isNative(value) ? value : void 0; } function isFunction$2(value) { return isObject$a(value) && objToString.call(value) == funcTag$2; } function isObject$a(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } function isNative(value) { if (value == null) { return false; } if (isFunction$2(value)) { return reIsNative$1.test(fnToString.call(value)); } return isObjectLike$4(value) && reIsHostCtor$1.test(value); } var lodash__getnative = getNative$2; var getNative$1 = lodash__getnative; var FUNC_ERROR_TEXT$3 = "Expected a function"; var nativeMax$3 = Math.max, nativeNow = getNative$1(Date, "now"); var now$2 = nativeNow || function() { return new Date().getTime(); }; function debounce$1(func, wait, options) { var args, maxTimeoutId, result, stamp, thisArg, timeoutId, trailingCall, lastCalled = 0, maxWait = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT$3); } wait = wait < 0 ? 0 : +wait || 0; if (options === true) { var leading = true; trailing = false; } else if (isObject$9(options)) { leading = !!options.leading; maxWait = "maxWait" in options && nativeMax$3(+options.maxWait || 0, wait); trailing = "trailing" in options ? !!options.trailing : trailing; } function cancel() { if (timeoutId) { clearTimeout(timeoutId); } if (maxTimeoutId) { clearTimeout(maxTimeoutId); } lastCalled = 0; maxTimeoutId = timeoutId = trailingCall = void 0; } function complete(isCalled, id2) { if (id2) { clearTimeout(id2); } maxTimeoutId = timeoutId = trailingCall = void 0; if (isCalled) { lastCalled = now$2(); result = func.apply(thisArg, args); if (!timeoutId && !maxTimeoutId) { args = thisArg = void 0; } } } function delayed() { var remaining = wait - (now$2() - stamp); if (remaining <= 0 || remaining > wait) { complete(trailingCall, maxTimeoutId); } else { timeoutId = setTimeout(delayed, remaining); } } function maxDelayed() { complete(trailing, timeoutId); } function debounced() { args = arguments; stamp = now$2(); thisArg = this; trailingCall = trailing && (timeoutId || !leading); if (maxWait === false) { var leadingCall = leading && !timeoutId; } else { if (!maxTimeoutId && !leading) { lastCalled = stamp; } var remaining = maxWait - (stamp - lastCalled), isCalled = remaining <= 0 || remaining > maxWait; if (isCalled) { if (maxTimeoutId) { maxTimeoutId = clearTimeout(maxTimeoutId); } lastCalled = stamp; result = func.apply(thisArg, args); } else if (!maxTimeoutId) { maxTimeoutId = setTimeout(maxDelayed, remaining); } } if (isCalled && timeoutId) { timeoutId = clearTimeout(timeoutId); } else if (!timeoutId && wait !== maxWait) { timeoutId = setTimeout(delayed, wait); } if (leadingCall) { isCalled = true; result = func.apply(thisArg, args); } if (isCalled && !timeoutId && !maxTimeoutId) { args = thisArg = void 0; } return result; } debounced.cancel = cancel; return debounced; } function isObject$9(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } var lodash_debounce$1 = debounce$1; var autoprefix$1 = {}; Object.defineProperty(autoprefix$1, "__esModule", { value: true }); var _extends$4 = Object.assign || function(target2) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target2[key2] = source[key2]; } } } return target2; }; autoprefix$1.default = autoprefix; var vendorSpecificProperties = ["animation", "animationDelay", "animationDirection", "animationDuration", "animationFillMode", "animationIterationCount", "animationName", "animationPlayState", "animationTimingFunction", "appearance", "backfaceVisibility", "backgroundClip", "borderImage", "borderImageSlice", "boxSizing", "boxShadow", "contentColumns", "transform", "transformOrigin", "transformStyle", "transition", "transitionDelay", "transitionDuration", "transitionProperty", "transitionTimingFunction", "perspective", "perspectiveOrigin", "userSelect"]; var prefixes = ["Moz", "Webkit", "ms", "O"]; function prefixProp(key2, value) { return prefixes.reduce(function(obj, pre2) { return obj[pre2 + key2[0].toUpperCase() + key2.substr(1)] = value, obj; }, {}); } function autoprefix(style) { return Object.keys(style).reduce(function(obj, key2) { return vendorSpecificProperties.indexOf(key2) !== -1 ? _extends$4({}, obj, prefixProp(key2, style[key2])) : obj; }, style); } Object.defineProperty(Dock$1, "__esModule", { value: true }); Dock$1.default = void 0; var _extends$3 = Object.assign || function(target2) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target2[key2] = source[key2]; } } } return target2; }; var _createClass$9 = function() { function defineProperties(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _class, _temp; var _react = react.exports; var _react2 = _interopRequireDefault$7(_react); var _propTypes = propTypes.exports; var _propTypes2 = _interopRequireDefault$7(_propTypes); var _lodash$1 = lodash_debounce$1; var _lodash2$1 = _interopRequireDefault$7(_lodash$1); var _autoprefix = autoprefix$1; var _autoprefix2 = _interopRequireDefault$7(_autoprefix); function _interopRequireDefault$7(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck$d(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn$a(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self2; } function _inherits$a(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } function autoprefixes(styles2) { return Object.keys(styles2).reduce(function(obj, key2) { return obj[key2] = (0, _autoprefix2.default)(styles2[key2]), obj; }, {}); } var styles$1 = autoprefixes({ wrapper: { position: "fixed", width: 0, height: 0, top: 0, left: 0 }, dim: { position: "fixed", left: 0, right: 0, top: 0, bottom: 0, zIndex: 0, background: "rgba(0, 0, 0, 0.2)", opacity: 1 }, dimAppear: { opacity: 0 }, dimTransparent: { pointerEvents: "none" }, dimHidden: { opacity: 0 }, dock: { position: "fixed", zIndex: 1, boxShadow: "0 0 4px rgba(0, 0, 0, 0.3)", background: "white", left: 0, top: 0, width: "100%", height: "100%" }, dockHidden: { opacity: 0 }, dockResizing: { transition: "none" }, dockContent: { width: "100%", height: "100%", overflow: "auto" }, resizer: { position: "absolute", zIndex: 2, opacity: 0 } }); function getTransitions(duration) { return ["left", "top", "width", "height"].map(function(p2) { return p2 + " " + duration / 1e3 + "s ease-out"; }); } function getDockStyles(_ref, _ref2) { var fluid = _ref.fluid; var dockStyle = _ref.dockStyle; var dockHiddenStyle = _ref.dockHiddenStyle; var duration = _ref.duration; var position2 = _ref.position; var isVisible = _ref.isVisible; var size2 = _ref2.size; var isResizing = _ref2.isResizing; var fullWidth = _ref2.fullWidth; var fullHeight = _ref2.fullHeight; var posStyle = void 0; var absSize = fluid ? size2 * 100 + "%" : size2 + "px"; function getRestSize(fullSize) { return fluid ? 100 - size2 * 100 + "%" : fullSize - size2 + "px"; } switch (position2) { case "left": posStyle = { width: absSize, left: isVisible ? 0 : "-" + absSize }; break; case "right": posStyle = { left: isVisible ? getRestSize(fullWidth) : fullWidth, width: absSize }; break; case "top": posStyle = { top: isVisible ? 0 : "-" + absSize, height: absSize }; break; case "bottom": posStyle = { top: isVisible ? getRestSize(fullHeight) : fullHeight, height: absSize }; break; } var transitions = getTransitions(duration); return [styles$1.dock, (0, _autoprefix2.default)({ transition: [].concat(_toConsumableArray(transitions), [!isVisible && "opacity 0.01s linear " + duration / 1e3 + "s"]).filter(function(t2) { return t2; }).join(",") }), dockStyle, (0, _autoprefix2.default)(posStyle), isResizing && styles$1.dockResizing, !isVisible && styles$1.dockHidden, !isVisible && dockHiddenStyle]; } function getDimStyles(_ref3, _ref4) { var dimMode = _ref3.dimMode; var dimStyle = _ref3.dimStyle; var duration = _ref3.duration; var isVisible = _ref3.isVisible; var isTransitionStarted = _ref4.isTransitionStarted; return [styles$1.dim, (0, _autoprefix2.default)({ transition: "opacity " + duration / 1e3 + "s ease-out" }), dimStyle, dimMode === "transparent" && styles$1.dimTransparent, !isVisible && styles$1.dimHidden, isTransitionStarted && isVisible && styles$1.dimAppear, isTransitionStarted && !isVisible && styles$1.dimDisappear]; } function getResizerStyles(position2) { var resizerStyle = void 0; var size2 = 10; switch (position2) { case "left": resizerStyle = { right: -size2 / 2, width: size2, top: 0, height: "100%", cursor: "col-resize" }; break; case "right": resizerStyle = { left: -size2 / 2, width: size2, top: 0, height: "100%", cursor: "col-resize" }; break; case "top": resizerStyle = { bottom: -size2 / 2, height: size2, left: 0, width: "100%", cursor: "row-resize" }; break; case "bottom": resizerStyle = { top: -size2 / 2, height: size2, left: 0, width: "100%", cursor: "row-resize" }; break; } return [styles$1.resizer, (0, _autoprefix2.default)(resizerStyle)]; } function getFullSize(position2, fullWidth, fullHeight) { return position2 === "left" || position2 === "right" ? fullWidth : fullHeight; } var Dock = (_temp = _class = function(_Component) { _inherits$a(Dock2, _Component); function Dock2(props) { _classCallCheck$d(this, Dock2); var _this = _possibleConstructorReturn$a(this, Object.getPrototypeOf(Dock2).call(this, props)); _this.transitionEnd = function() { _this.setState({ isTransitionStarted: false }); }; _this.hideDim = function() { if (!_this.props.isVisible) { _this.setState({ isDimHidden: true }); } }; _this.handleDimClick = function() { if (_this.props.dimMode === "opaque") { _this.props.onVisibleChange && _this.props.onVisibleChange(false); } }; _this.handleResize = function() { if (window.requestAnimationFrame) { window.requestAnimationFrame(_this.updateWindowSize.bind(_this, true)); } else { _this.updateWindowSize(true); } }; _this.updateWindowSize = function(windowResize) { var sizeState = { fullWidth: window.innerWidth, fullHeight: window.innerHeight }; if (windowResize) { _this.setState(_extends$3({}, sizeState, { isResizing: true, isWindowResizing: windowResize })); _this.debouncedUpdateWindowSizeEnd(); } else { _this.setState(sizeState); } }; _this.updateWindowSizeEnd = function() { _this.setState({ isResizing: false, isWindowResizing: false }); }; _this.debouncedUpdateWindowSizeEnd = (0, _lodash2$1.default)(_this.updateWindowSizeEnd, 30); _this.handleWrapperLeave = function() { _this.setState({ isResizing: false }); }; _this.handleMouseDown = function() { _this.setState({ isResizing: true }); }; _this.handleMouseUp = function() { _this.setState({ isResizing: false }); }; _this.handleMouseMove = function(e2) { if (!_this.state.isResizing || _this.state.isWindowResizing) return; e2.preventDefault(); var _this$props = _this.props; var position2 = _this$props.position; var fluid = _this$props.fluid; var _this$state = _this.state; var fullWidth = _this$state.fullWidth; var fullHeight = _this$state.fullHeight; var isControlled = _this$state.isControlled; var x2 = e2.clientX; var y2 = e2.clientY; var size2 = void 0; switch (position2) { case "left": size2 = fluid ? x2 / fullWidth : x2; break; case "right": size2 = fluid ? (fullWidth - x2) / fullWidth : fullWidth - x2; break; case "top": size2 = fluid ? y2 / fullHeight : y2; break; case "bottom": size2 = fluid ? (fullHeight - y2) / fullHeight : fullHeight - y2; break; } _this.props.onSizeChange && _this.props.onSizeChange(size2); if (!isControlled) { _this.setState({ size: size2 }); } }; _this.state = { isControlled: typeof props.size !== "undefined", size: props.size || props.defaultSize, isDimHidden: !props.isVisible, fullWidth: typeof window !== "undefined" && window.innerWidth, fullHeight: typeof window !== "undefined" && window.innerHeight, isTransitionStarted: false, isWindowResizing: false }; return _this; } _createClass$9(Dock2, [{ key: "componentDidMount", value: function componentDidMount() { window.addEventListener("mouseup", this.handleMouseUp); window.addEventListener("mousemove", this.handleMouseMove); window.addEventListener("resize", this.handleResize); if (!window.fullWidth) { this.updateWindowSize(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { window.removeEventListener("mouseup", this.handleMouseUp); window.removeEventListener("mousemove", this.handleMouseMove); window.removeEventListener("resize", this.handleResize); } }, { key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { var isControlled = typeof nextProps.size !== "undefined"; this.setState({ isControlled }); if (isControlled && this.props.size !== nextProps.size) { this.setState({ size: nextProps.size }); } else if (this.props.fluid !== nextProps.fluid) { this.updateSize(nextProps); } if (this.props.isVisible !== nextProps.isVisible) { this.setState({ isTransitionStarted: true }); } } }, { key: "updateSize", value: function updateSize(props) { var _state = this.state; var fullWidth = _state.fullWidth; var fullHeight = _state.fullHeight; this.setState({ size: props.fluid ? this.state.size / getFullSize(props.position, fullWidth, fullHeight) : getFullSize(props.position, fullWidth, fullHeight) * this.state.size }); } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this2 = this; if (this.props.isVisible !== prevProps.isVisible) { if (!this.props.isVisible) { window.setTimeout(function() { return _this2.hideDim(); }, this.props.duration); } else { this.setState({ isDimHidden: false }); } window.setTimeout(function() { return _this2.setState({ isTransitionStarted: false }); }, 0); } } }, { key: "render", value: function render() { var _props = this.props; var children = _props.children; var zIndex = _props.zIndex; var dimMode = _props.dimMode; var position2 = _props.position; var isVisible = _props.isVisible; var _state2 = this.state; var isResizing = _state2.isResizing; var size2 = _state2.size; var isDimHidden = _state2.isDimHidden; var dimStyles = Object.assign.apply(Object, [{}].concat(_toConsumableArray(getDimStyles(this.props, this.state)))); var dockStyles = Object.assign.apply(Object, [{}].concat(_toConsumableArray(getDockStyles(this.props, this.state)))); var resizerStyles = Object.assign.apply(Object, [{}].concat(_toConsumableArray(getResizerStyles(position2)))); return _react2.default.createElement( "div", { style: Object.assign({}, styles$1.wrapper, { zIndex }) }, dimMode !== "none" && !isDimHidden && _react2.default.createElement("div", { style: dimStyles, onClick: this.handleDimClick }), _react2.default.createElement( "div", { style: dockStyles }, _react2.default.createElement("div", { style: resizerStyles, onMouseDown: this.handleMouseDown }), _react2.default.createElement( "div", { style: styles$1.dockContent }, typeof children === "function" ? children({ position: position2, isResizing, size: size2, isVisible }) : children ) ) ); } }]); return Dock2; }(_react.Component), _class.propTypes = { position: _propTypes2.default.oneOf(["left", "right", "top", "bottom"]), zIndex: _propTypes2.default.number, fluid: _propTypes2.default.bool, size: _propTypes2.default.number, defaultSize: _propTypes2.default.number, dimMode: _propTypes2.default.oneOf(["none", "transparent", "opaque"]), isVisible: _propTypes2.default.bool, onVisibleChange: _propTypes2.default.func, onSizeChange: _propTypes2.default.func, dimStyle: _propTypes2.default.object, dockStyle: _propTypes2.default.object, duration: _propTypes2.default.number }, _class.defaultProps = { position: "left", zIndex: 99999999, fluid: true, defaultSize: 0.3, dimMode: "opaque", duration: 200 }, _temp); Dock$1.default = Dock; Object.defineProperty(lib$4, "__esModule", { value: true }); var _default$1 = lib$4.default = void 0; var _Dock = Dock$1; var _Dock2 = _interopRequireDefault$6(_Dock); function _interopRequireDefault$6(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _default$1 = lib$4.default = _Dock2.default; function _typeof$d(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$d = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$d = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$d(obj); } function _classCallCheck$c(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$8(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$8(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$8(Constructor.prototype, protoProps); if (staticProps) _defineProperties$8(Constructor, staticProps); return Constructor; } function _inherits$9(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$b(subClass, superClass); } function _setPrototypeOf$b(o2, p2) { _setPrototypeOf$b = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$b(o2, p2); } function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function() { var Super = _getPrototypeOf$9(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$9(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$9(this, result); }; } function _possibleConstructorReturn$9(self2, call) { if (call && (_typeof$d(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$a(self2); } function _assertThisInitialized$a(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$9(o2) { _getPrototypeOf$9 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$9(o2); } var TabList = newStyled("div")({ display: "flex", listStyle: "none", borderBottom: "1px solid ".concat(mainTheme.main20) }); TabList.displayName = "TabList"; var TabsStled = newStyled("div")({ height: "100%", width: "100%" }); TabsStled.displayName = "TabsStyled"; var TabStyled = newStyled("div")({ color: mainTheme.white, textTransform: "uppercase", fontSize: "13px", padding: "16px 24px 14px", boxSizing: "border-box", userSelect: "none", "&:hover": { cursor: "pointer", background: mainTheme.white05 }, "&:focus": { outline: "none" } }, function(props) { return { borderBottom: props.isSelected ? "2px solid ".concat(mainTheme.main) : "none" }; }); TabStyled.displayName = "TabStyled"; var Tab = /* @__PURE__ */ function(_React$Component) { _inherits$9(Tab2, _React$Component); var _super = _createSuper$9(Tab2); function Tab2() { _classCallCheck$c(this, Tab2); return _super.apply(this, arguments); } _createClass$8(Tab2, [{ key: "render", value: function render() { var _this = this; return /* @__PURE__ */ React.createElement(TabStyled, { isSelected: this.props.index === this.context.tabs.selectedIndex, onClick: function onClick() { (_this.context.tabs.onSelect || function() { })(_this.props.index); } }, this.props.children); } }]); return Tab2; }(React.Component); Tab.contextTypes = { tabs: propTypes.exports.object.isRequired }; var TabPanelStyled = newStyled("div")({ width: "100%", height: "calc(100% - 48px)", boxSizing: "border-box" }); TabPanelStyled.displayName = "TabPanelStyled"; var TabPanel = /* @__PURE__ */ function(_React$Component2) { _inherits$9(TabPanel2, _React$Component2); var _super2 = _createSuper$9(TabPanel2); function TabPanel2() { _classCallCheck$c(this, TabPanel2); return _super2.apply(this, arguments); } _createClass$8(TabPanel2, [{ key: "render", value: function render() { return /* @__PURE__ */ React.createElement(TabPanelStyled, null, this.props.children({ index: this.context.tabs.selectedIndex })); } }]); return TabPanel2; }(React.Component); TabPanel.contextTypes = { tabs: propTypes.exports.object.isRequired }; var Tabs = /* @__PURE__ */ function(_React$Component3) { _inherits$9(Tabs2, _React$Component3); var _super3 = _createSuper$9(Tabs2); function Tabs2() { _classCallCheck$c(this, Tabs2); return _super3.apply(this, arguments); } _createClass$8(Tabs2, [{ key: "getChildContext", value: function getChildContext() { return { tabs: { onSelect: this.props.onSelect, selectedIndex: this.props.selectedIndex } }; } }, { key: "render", value: function render() { return /* @__PURE__ */ React.createElement(TabsStled, null, this.props.children); } }]); return Tabs2; }(React.Component); Tabs.childContextTypes = { tabs: propTypes.exports.object }; var regeneratorRuntime$1 = { exports: {} }; var _typeof$c = { exports: {} }; (function(module3) { function _typeof4(obj) { "@babel/helpers - typeof"; return module3.exports = _typeof4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) { return typeof obj2; } : function(obj2) { return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }, module3.exports.__esModule = true, module3.exports["default"] = module3.exports, _typeof4(obj); } module3.exports = _typeof4, module3.exports.__esModule = true, module3.exports["default"] = module3.exports; })(_typeof$c); (function(module3) { var _typeof4 = _typeof$c.exports["default"]; function _regeneratorRuntime() { module3.exports = _regeneratorRuntime = function _regeneratorRuntime2() { return exports2; }, module3.exports.__esModule = true, module3.exports["default"] = module3.exports; var exports2 = {}, Op = Object.prototype, hasOwn2 = Op.hasOwnProperty, defineProperty2 = Object.defineProperty || function(obj, key2, desc) { obj[key2] = desc.value; }, $Symbol2 = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol2.iterator || "@@iterator", asyncIteratorSymbol = $Symbol2.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol2.toStringTag || "@@toStringTag"; function define2(obj, key2, value) { return Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }), obj[key2]; } try { define2({}, ""); } catch (err) { define2 = function define3(obj, key2, value) { return obj[key2] = value; }; } function wrap2(innerFn, outerFn, self2, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context2(tryLocsList || []); return defineProperty2(generator, "_invoke", { value: makeInvokeMethod(innerFn, self2, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports2.wrap = wrap2; var ContinueSentinel = {}; function Generator() { } function GeneratorFunction() { } function GeneratorFunctionPrototype() { } var IteratorPrototype2 = {}; define2(IteratorPrototype2, iteratorSymbol, function() { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn2.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype2 = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype2); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function(method) { define2(prototype, method, function(arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof4(value) && hasOwn2.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function(value2) { invoke("next", value2, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function(unwrapped) { result.value = unwrapped, resolve(result); }, function(error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty2(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self2, context) { var state = "suspendedStart"; return function(method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg; ; ) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg; else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self2, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (void 0 === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = void 0, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = void 0), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context2(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(true); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i2 = -1, next2 = function next3() { for (; ++i2 < iterable.length; ) if (hasOwn2.call(iterable, i2)) return next3.value = iterable[i2], next3.done = false, next3; return next3.value = void 0, next3.done = true, next3; }; return next2.next = next2; } } return { next: doneResult }; } function doneResult() { return { value: void 0, done: true }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty2(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: true }), defineProperty2(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: true }), GeneratorFunction.displayName = define2(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports2.isGeneratorFunction = function(genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports2.mark = function(genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define2(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports2.awrap = function(arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define2(AsyncIterator.prototype, asyncIteratorSymbol, function() { return this; }), exports2.AsyncIterator = AsyncIterator, exports2.async = function(innerFn, outerFn, self2, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap2(innerFn, outerFn, self2, tryLocsList), PromiseImpl); return exports2.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define2(Gp, toStringTagSymbol, "Generator"), define2(Gp, iteratorSymbol, function() { return this; }), define2(Gp, "toString", function() { return "[object Generator]"; }), exports2.keys = function(val) { var object = Object(val), keys2 = []; for (var key2 in object) keys2.push(key2); return keys2.reverse(), function next2() { for (; keys2.length; ) { var key3 = keys2.pop(); if (key3 in object) return next2.value = key3, next2.done = false, next2; } return next2.done = true, next2; }; }, exports2.values = values, Context2.prototype = { constructor: Context2, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = false, this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn2.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = void 0); }, stop: function stop() { this.done = true; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception2) { if (this.done) throw exception2; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception2, context.next = loc, caught && (context.method = "next", context.arg = void 0), !!caught; } for (var i2 = this.tryEntries.length - 1; i2 >= 0; --i2) { var entry = this.tryEntries[i2], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn2.call(entry, "catchLoc"), hasFinally = hasOwn2.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, true); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, true); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type2, arg) { for (var i2 = this.tryEntries.length - 1; i2 >= 0; --i2) { var entry = this.tryEntries[i2]; if (entry.tryLoc <= this.prev && hasOwn2.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type2 || "continue" === type2) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type2, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i2 = this.tryEntries.length - 1; i2 >= 0; --i2) { var entry = this.tryEntries[i2]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i2 = this.tryEntries.length - 1; i2 >= 0; --i2) { var entry = this.tryEntries[i2]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName, nextLoc }, "next" === this.method && (this.arg = void 0), ContinueSentinel; } }, exports2; } module3.exports = _regeneratorRuntime, module3.exports.__esModule = true, module3.exports["default"] = module3.exports; })(regeneratorRuntime$1); var runtime = regeneratorRuntime$1.exports(); var regenerator = runtime; try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { if (typeof globalThis === "object") { globalThis.regeneratorRuntime = runtime; } else { Function("r", "regeneratorRuntime = r")(runtime); } } function style_html(html_source, options) { var multi_parser, indent_size, indent_character, max_char, brace_style, unformatted; options = options || {}; indent_size = options.indent_size || 4; indent_character = options.indent_char || " "; brace_style = options.brace_style || "collapse"; max_char = options.max_char == 0 ? Infinity : options.max_char || 70; unformatted = options.unformatted || ["a", "span", "bdo", "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr", "acronym", "q", "sub", "sup", "tt", "i", "b", "big", "small", "u", "s", "strike", "font", "ins", "del", "pre", "address", "dt", "h1", "h2", "h3", "h4", "h5", "h6"]; function Parser2() { this.pos = 0; this.token = ""; this.current_mode = "CONTENT"; this.tags = { parent: "parent1", parentcount: 1, parent1: "" }; this.tag_type = ""; this.token_text = this.last_token = this.last_text = this.token_type = ""; this.Utils = { whitespace: "\n\r ".split(""), single_token: "br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed,?php,?,?=".split(","), extra_liners: "head,body,/html".split(","), in_array: function(what, arr) { for (var i2 = 0; i2 < arr.length; i2++) { if (what === arr[i2]) { return true; } } return false; } }; this.get_content = function() { var input_char = "", content = [], space = false; while (this.input.charAt(this.pos) !== "<") { if (this.pos >= this.input.length) { return content.length ? content.join("") : ["", "TK_EOF"]; } input_char = this.input.charAt(this.pos); this.pos++; this.line_char_count++; if (this.Utils.in_array(input_char, this.Utils.whitespace)) { if (content.length) { space = true; } this.line_char_count--; continue; } else if (space) { if (this.line_char_count >= this.max_char) { content.push("\n"); for (var i2 = 0; i2 < this.indent_level; i2++) { content.push(this.indent_string); } this.line_char_count = 0; } else { content.push(" "); this.line_char_count++; } space = false; } content.push(input_char); } return content.length ? content.join("") : ""; }; this.get_contents_to = function(name) { if (this.pos == this.input.length) { return ["", "TK_EOF"]; } var content = ""; var reg_match = new RegExp("</" + name + "\\s*>", "igm"); reg_match.lastIndex = this.pos; var reg_array = reg_match.exec(this.input); var end_script = reg_array ? reg_array.index : this.input.length; if (this.pos < end_script) { content = this.input.substring(this.pos, end_script); this.pos = end_script; } return content; }; this.record_tag = function(tag) { if (this.tags[tag + "count"]) { this.tags[tag + "count"]++; this.tags[tag + this.tags[tag + "count"]] = this.indent_level; } else { this.tags[tag + "count"] = 1; this.tags[tag + this.tags[tag + "count"]] = this.indent_level; } this.tags[tag + this.tags[tag + "count"] + "parent"] = this.tags.parent; this.tags.parent = tag + this.tags[tag + "count"]; }; this.retrieve_tag = function(tag) { if (this.tags[tag + "count"]) { var temp_parent = this.tags.parent; while (temp_parent) { if (tag + this.tags[tag + "count"] === temp_parent) { break; } temp_parent = this.tags[temp_parent + "parent"]; } if (temp_parent) { this.indent_level = this.tags[tag + this.tags[tag + "count"]]; this.tags.parent = this.tags[temp_parent + "parent"]; } delete this.tags[tag + this.tags[tag + "count"] + "parent"]; delete this.tags[tag + this.tags[tag + "count"]]; if (this.tags[tag + "count"] == 1) { delete this.tags[tag + "count"]; } else { this.tags[tag + "count"]--; } } }; this.get_tag = function() { var input_char = "", content = [], space = false, tag_start, tag_end; do { if (this.pos >= this.input.length) { return content.length ? content.join("") : ["", "TK_EOF"]; } input_char = this.input.charAt(this.pos); this.pos++; this.line_char_count++; if (this.Utils.in_array(input_char, this.Utils.whitespace)) { space = true; this.line_char_count--; continue; } if (input_char === "'" || input_char === '"') { if (!content[1] || content[1] !== "!") { input_char += this.get_unformatted(input_char); space = true; } } if (input_char === "=") { space = false; } if (content.length && content[content.length - 1] !== "=" && input_char !== ">" && space) { if (this.line_char_count >= this.max_char) { this.print_newline(false, content); this.line_char_count = 0; } else { content.push(" "); this.line_char_count++; } space = false; } if (input_char === "<") { tag_start = this.pos - 1; } content.push(input_char); } while (input_char !== ">"); var tag_complete = content.join(""); var tag_index; if (tag_complete.indexOf(" ") != -1) { tag_index = tag_complete.indexOf(" "); } else { tag_index = tag_complete.indexOf(">"); } var tag_check2 = tag_complete.substring(1, tag_index).toLowerCase(); if (tag_complete.charAt(tag_complete.length - 2) === "/" || this.Utils.in_array(tag_check2, this.Utils.single_token)) { this.tag_type = "SINGLE"; } else if (tag_check2 === "script") { this.record_tag(tag_check2); this.tag_type = "SCRIPT"; } else if (tag_check2 === "style") { this.record_tag(tag_check2); this.tag_type = "STYLE"; } else if (this.Utils.in_array(tag_check2, unformatted)) { var comment2 = this.get_unformatted("</" + tag_check2 + ">", tag_complete); content.push(comment2); if (tag_start > 0 && this.Utils.in_array(this.input.charAt(tag_start - 1), this.Utils.whitespace)) { content.splice(0, 0, this.input.charAt(tag_start - 1)); } tag_end = this.pos - 1; if (this.Utils.in_array(this.input.charAt(tag_end + 1), this.Utils.whitespace)) { content.push(this.input.charAt(tag_end + 1)); } this.tag_type = "SINGLE"; } else if (tag_check2.charAt(0) === "!") { if (tag_check2.indexOf("[if") != -1) { if (tag_complete.indexOf("!IE") != -1) { var comment2 = this.get_unformatted("-->", tag_complete); content.push(comment2); } this.tag_type = "START"; } else if (tag_check2.indexOf("[endif") != -1) { this.tag_type = "END"; this.unindent(); } else if (tag_check2.indexOf("[cdata[") != -1) { var comment2 = this.get_unformatted("]]>", tag_complete); content.push(comment2); this.tag_type = "SINGLE"; } else { var comment2 = this.get_unformatted("-->", tag_complete); content.push(comment2); this.tag_type = "SINGLE"; } } else { if (tag_check2.charAt(0) === "/") { this.retrieve_tag(tag_check2.substring(1)); this.tag_type = "END"; } else { this.record_tag(tag_check2); this.tag_type = "START"; } if (this.Utils.in_array(tag_check2, this.Utils.extra_liners)) { this.print_newline(true, this.output); } } return content.join(""); }; this.get_unformatted = function(delimiter2, orig_tag) { if (orig_tag && orig_tag.toLowerCase().indexOf(delimiter2) != -1) { return ""; } var input_char = ""; var content = ""; var space = true; do { if (this.pos >= this.input.length) { return content; } input_char = this.input.charAt(this.pos); this.pos++; if (this.Utils.in_array(input_char, this.Utils.whitespace)) { if (!space) { this.line_char_count--; continue; } if (input_char === "\n" || input_char === "\r") { content += "\n"; this.line_char_count = 0; continue; } } content += input_char; this.line_char_count++; space = true; } while (content.toLowerCase().indexOf(delimiter2) == -1); return content; }; this.get_token = function() { var token2; if (this.last_token === "TK_TAG_SCRIPT" || this.last_token === "TK_TAG_STYLE") { var type2 = this.last_token.substr(7); token2 = this.get_contents_to(type2); if (typeof token2 !== "string") { return token2; } return [token2, "TK_" + type2]; } if (this.current_mode === "CONTENT") { token2 = this.get_content(); if (typeof token2 !== "string") { return token2; } else { return [token2, "TK_CONTENT"]; } } if (this.current_mode === "TAG") { token2 = this.get_tag(); if (typeof token2 !== "string") { return token2; } else { var tag_name_type = "TK_TAG_" + this.tag_type; return [token2, tag_name_type]; } } }; this.get_full_indent = function(level) { level = this.indent_level + level || 0; if (level < 1) return ""; return Array(level + 1).join(this.indent_string); }; this.printer = function(js_source, indent_character2, indent_size2, max_char2, brace_style2) { this.input = js_source || ""; this.output = []; this.indent_character = indent_character2; this.indent_string = ""; this.indent_size = indent_size2; this.brace_style = brace_style2; this.indent_level = 0; this.max_char = max_char2; this.line_char_count = 0; for (var i2 = 0; i2 < this.indent_size; i2++) { this.indent_string += this.indent_character; } this.print_newline = function(ignore, arr) { this.line_char_count = 0; if (!arr || !arr.length) { return; } if (!ignore) { while (this.Utils.in_array(arr[arr.length - 1], this.Utils.whitespace)) { arr.pop(); } } arr.push("\n"); for (var i3 = 0; i3 < this.indent_level; i3++) { arr.push(this.indent_string); } }; this.print_token = function(text3) { this.output.push(text3); }; this.indent = function() { this.indent_level++; }; this.unindent = function() { if (this.indent_level > 0) { this.indent_level--; } }; }; return this; } multi_parser = new Parser2(); multi_parser.printer(html_source, indent_character, indent_size, max_char, brace_style); while (true) { var t2 = multi_parser.get_token(); multi_parser.token_text = t2[0]; multi_parser.token_type = t2[1]; if (multi_parser.token_type === "TK_EOF") { break; } switch (multi_parser.token_type) { case "TK_TAG_START": multi_parser.print_newline(false, multi_parser.output); multi_parser.print_token(multi_parser.token_text); multi_parser.indent(); multi_parser.current_mode = "CONTENT"; break; case "TK_TAG_STYLE": case "TK_TAG_SCRIPT": multi_parser.print_newline(false, multi_parser.output); multi_parser.print_token(multi_parser.token_text); multi_parser.current_mode = "CONTENT"; break; case "TK_TAG_END": if (multi_parser.last_token === "TK_CONTENT" && multi_parser.last_text === "") { var tag_name = multi_parser.token_text.match(/\w+/)[0]; var tag_extracted_from_last_output = multi_parser.output[multi_parser.output.length - 1].match(/<\s*(\w+)/); if (tag_extracted_from_last_output === null || tag_extracted_from_last_output[1] !== tag_name) multi_parser.print_newline(true, multi_parser.output); } multi_parser.print_token(multi_parser.token_text); multi_parser.current_mode = "CONTENT"; break; case "TK_TAG_SINGLE": var tag_check = multi_parser.token_text.match(/^\s*<([a-z]+)/i); if (!tag_check || !multi_parser.Utils.in_array(tag_check[1], unformatted)) { multi_parser.print_newline(false, multi_parser.output); } multi_parser.print_token(multi_parser.token_text); multi_parser.current_mode = "CONTENT"; break; case "TK_CONTENT": if (multi_parser.token_text !== "") { multi_parser.print_token(multi_parser.token_text); } multi_parser.current_mode = "TAG"; break; case "TK_STYLE": case "TK_SCRIPT": if (multi_parser.token_text !== "") { multi_parser.output.push("\n"); var text2 = multi_parser.token_text; if (multi_parser.token_type == "TK_SCRIPT") { var _beautifier = typeof js_beautify == "function" && js_beautify; } else if (multi_parser.token_type == "TK_STYLE") { var _beautifier = typeof css_beautify == "function" && css_beautify; } if (options.indent_scripts == "keep") { var script_indent_level = 0; } else if (options.indent_scripts == "separate") { var script_indent_level = -multi_parser.indent_level; } else { var script_indent_level = 1; } var indentation = multi_parser.get_full_indent(script_indent_level); if (_beautifier) { text2 = _beautifier(text2.replace(/^\s*/, indentation), options); } else { var white = text2.match(/^\s*/)[0]; var _level = white.match(/[^\n\r]*$/)[0].split(multi_parser.indent_string).length - 1; var reindent = multi_parser.get_full_indent(script_indent_level - _level); text2 = text2.replace(/^\s*/, indentation).replace(/\r\n|\r|\n/g, "\n" + reindent).replace(/\s*$/, ""); } if (text2) { multi_parser.print_token(text2); multi_parser.print_newline(true, multi_parser.output); } } multi_parser.current_mode = "TAG"; break; } multi_parser.last_token = multi_parser.token_type; multi_parser.last_text = multi_parser.token_text; } return multi_parser.output.join(""); } var html$1 = { prettyPrint: style_html }; var crypto$1 = self.crypto || self.msCrypto; var url = "-_"; var i$3 = 36; while (i$3--) { url += i$3.toString(36); } i$3 = 36; while (i$3-- - 10) { url += i$3.toString(36).toUpperCase(); } var index_browser = function(size2) { var id2 = ""; var bytes = crypto$1.getRandomValues(new Uint8Array(size2 || 21)); i$3 = size2 || 21; while (i$3--) { id2 += url[bytes[i$3] & 63]; } return id2; }; const nanoid = index_browser; function subscribeOnUpdates(editorView, callback) { var dispatch = (editorView._props.dispatchTransaction || editorView.dispatch).bind(editorView); var handler = function handler2(tr) { var oldState = editorView.state; dispatch(tr); callback(tr, oldState, editorView.state); }; if (editorView._props.dispatchTransaction) { editorView._props.dispatchTransaction = handler; } else { editorView.dispatch = handler; } } function findNode(fullPath, currentNode, nodeToFind) { if (nodeToFind === currentNode) { return fullPath; } if (!currentNode.content || !currentNode.content.content) return null; var res = currentNode.content.content.map(function(currentNode2, i2) { return findNode([].concat(fullPath, "content", i2), currentNode2, nodeToFind); }).filter(function(res2) { return Array.isArray(res2) && res2.length; })[0]; return res; } function findNodeIn(doc2, node2) { var path = findNode([], doc2, node2); if (path) { return path.reduce(function(newPath, item) { if (item === "content" && newPath[newPath.length - 1] === "content") { return newPath; } newPath.push(item); return newPath; }, []); } } function findNodeJSON(fullPath, currentNode, nodeToFind) { if (nodeToFind === currentNode) { return fullPath; } if (!currentNode.content) return null; if (currentNode.content === nodeToFind) { return fullPath.concat("content"); } var res = currentNode.content.map(function(currentNode2, i2) { return findNodeJSON([].concat(fullPath, "content", i2), currentNode2, nodeToFind); }).filter(function(res2) { return Array.isArray(res2) && res2.length; })[0]; return res; } function findNodeInJSON(doc2, node2) { var path = findNodeJSON([], doc2, node2); if (path) { return path.reduce(function(newPath, item) { newPath.push(item); if (item === "content") { newPath.push("content"); } return newPath; }, []); } } function getEditorStateClass() { return EditorState; } function _typeof$b(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$b = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$b = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$b(obj); } function asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, key2, arg) { try { var info = gen[key2](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator$2(fn) { return function() { var self2 = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self2, args); function _next(value) { asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, "throw", err); } _next(void 0); }); }; } function _slicedToArray(arr, i2) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i2) || _unsupportedIterableToArray(arr, i2) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o2, minLen) { if (!o2) return; if (typeof o2 === "string") return _arrayLikeToArray(o2, minLen); var n2 = Object.prototype.toString.call(o2).slice(8, -1); if (n2 === "Object" && o2.constructor) n2 = o2.constructor.name; if (n2 === "Map" || n2 === "Set") return Array.from(o2); if (n2 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n2)) return _arrayLikeToArray(o2, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i2 = 0, arr2 = new Array(len); i2 < len; i2++) { arr2[i2] = arr[i2]; } return arr2; } function _iterableToArrayLimit(arr, i2) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = void 0; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i2 && _arr.length === i2) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck$b(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits$8(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$a(subClass, superClass); } function _setPrototypeOf$a(o2, p2) { _setPrototypeOf$a = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$a(o2, p2); } function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function() { var Super = _getPrototypeOf$8(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$8(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$8(this, result); }; } function _possibleConstructorReturn$8(self2, call) { if (call && (_typeof$b(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$9(self2); } function _assertThisInitialized$9(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$8(o2) { _getPrototypeOf$8 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$8(o2); } function _defineProperty$8(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var NODE_PICKER_DEFAULT = { top: 0, left: 0, width: 0, height: 0, active: false }; var HISTORY_SIZE = 200; var SNAPSHOTS_KEY = "prosemirror-dev-tools-snapshots"; var nodesColors = [ "#EA7C7F", "#67B0C6", "#94BB7F", "#CA9EDB", "#DCDC5D", "#B9CC7C", "#DD97D8", "#FFB761", "#4D8FD1", "#F36E98", "#E45F44", "#A6A4AE", "#FCC047", "#FFC129", "#D3929C", "#4CBCD4", "#8D7BC0" ]; function calculateSafeIndex(index2, total) { var quotient = index2 / total; return Math.round(total * (quotient - Math.floor(quotient))); } function buildColors(schema2) { return Object.keys(schema2.nodes).reduce(function(acc, node2, index2) { var safeIndex = index2 >= nodesColors.length ? calculateSafeIndex(index2, nodesColors.length) : index2; acc[node2] = nodesColors[safeIndex]; return acc; }, {}); } function findPMNode(domNode) { var node2; var target2 = domNode; while (!node2 && target2) { if (target2.pmViewDesc) { node2 = target2; } target2 = target2.parentNode; } return node2; } function getActiveMarks(editorState) { var selection = editorState.selection; var marks = []; if (selection.empty) { marks = selection.storedMarks || selection.$from.marks(); } else { editorState.doc.nodesBetween(selection.from, selection.to, function(node2) { marks = marks.concat(node2.marks); }); } marks = marks.reduce(function(acc, mark) { if (acc.indexOf(mark) === -1) { acc.push(mark); } return acc; }, []).map(function(m2) { return m2.toJSON(); }); return marks; } function buildSelection(selection) { return { type: selection.type, empty: selection.empty, anchor: selection.anchor, head: selection.head, from: selection.from, to: selection.to }; } function createHistoryEntry(editorState) { var serializer = DOMSerializer.fromSchema(editorState.schema); var selection = editorState.selection; var domFragment = serializer.serializeFragment(selection.content().content); var selectionContent = []; if (domFragment) { var child = domFragment.firstChild; while (child) { selectionContent.push(child.outerHTML); child = child.nextSibling; } } return { id: nanoid(), state: editorState, timestamp: Date.now(), diffPending: true, diff: void 0, selection: void 0, selectionContent: html$1.prettyPrint(selectionContent.join("\n"), { max_char: 60, indent_size: 2 }) }; } function shrinkEditorHistory(history2, historyRolledBackTo) { var startIndex = historyRolledBackTo !== false ? historyRolledBackTo : 0; return history2.slice(startIndex, HISTORY_SIZE); } function updateEditorHistory(history2, historyRolledBackTo, tr, newState) { var skipHistory = tr.getMeta("_skip-dev-tools-history_"); if (skipHistory) return; var newHistory = shrinkEditorHistory(history2, historyRolledBackTo); newHistory.unshift(createHistoryEntry(newState)); return newHistory; } var EditorStateContainer = /* @__PURE__ */ function(_Container) { _inherits$8(EditorStateContainer2, _Container); var _super = _createSuper$8(EditorStateContainer2); function EditorStateContainer2(_editorView, props) { var _this; _classCallCheck$b(this, EditorStateContainer2); _this = _super.call(this); _defineProperty$8(_assertThisInitialized$9(_this), "state", { EditorState: function EditorState2() { }, view: null, state: {}, schema: {}, nodeColors: {}, activeMarks: [], history: [], expandPath: [], historyRolledBackTo: false, selectedHistoryItem: 0, snapshots: JSON.parse(window.localStorage.getItem(SNAPSHOTS_KEY)) || [], nodePicker: NODE_PICKER_DEFAULT }); _defineProperty$8(_assertThisInitialized$9(_this), "activatePicker", function() { _this.setState({ nodePicker: Object.assign({}, NODE_PICKER_DEFAULT, { active: true }) }); }); _defineProperty$8(_assertThisInitialized$9(_this), "deactivatePicker", function() { var picker = _this.state.nodePicker; if (picker.onMouseOver) { document.removeEventListener("mouseover", picker.onMouseOver); } if (picker.onMouseOver) { document.removeEventListener("click", picker.onClick); } _this.setState({ nodePicker: NODE_PICKER_DEFAULT }); }); _defineProperty$8(_assertThisInitialized$9(_this), "updateNodePickerPossition", function(target2) { var node2 = findPMNode(target2); if (node2 && (node2.pmViewDesc.node && node2.pmViewDesc.node.type.name !== "doc" || node2.pmViewDesc.mark)) { var _node$getBoundingClie = node2.getBoundingClientRect(), top2 = _node$getBoundingClie.top, left = _node$getBoundingClie.left, width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; _this.setState({ nodePicker: { top: top2 + window.scrollY, left, width, height, active: true } }); } else { _this.setState({ nodePicker: Object.assign({}, NODE_PICKER_DEFAULT, { active: true }) }); } }); _defineProperty$8(_assertThisInitialized$9(_this), "nodePickerSelect", function(target2) { var node2 = findPMNode(target2); if (node2) { var editorState = _this.state.state; var path = findNodeIn(editorState.doc, editorState.doc.nodeAt(node2.pmViewDesc.posAtStart)); _this.setState({ expandPath: path }); } _this.setState({ nodePicker: NODE_PICKER_DEFAULT }); }); _defineProperty$8(_assertThisInitialized$9(_this), "saveSnapshot", function() { var snapshotName = prompt("Enter snapshot name", Date.now()); if (!snapshotName) return; var snapshots = [{ name: snapshotName, timestamp: Date.now(), snapshot: _this.state.state.doc.toJSON() }].concat(_this.state.snapshots); _this.setState({ snapshots }); window.localStorage.setItem(SNAPSHOTS_KEY, JSON.stringify(snapshots)); }); _defineProperty$8(_assertThisInitialized$9(_this), "loadSnapshot", function(snapshot) { var EditorState2 = _this.state.EditorState; var editorView = _this.state.view; var editorState = editorView.state; var newState = EditorState2.create({ schema: editorState.schema, plugins: editorState.plugins, doc: editorState.schema.nodeFromJSON(snapshot.snapshot) }); _this.setState({ history: [createHistoryEntry(newState)], state: newState }); editorView.updateState(newState); }); _defineProperty$8(_assertThisInitialized$9(_this), "deleteSnapshot", function(snapshot) { var snapshots = _this.state.snapshots; var snapshotIndex = snapshots.indexOf(snapshot); snapshots.splice(snapshotIndex, 1); _this.setState({ snapshots: [].concat(snapshots) }); window.localStorage.setItem(SNAPSHOTS_KEY, JSON.stringify(snapshots)); }); _defineProperty$8(_assertThisInitialized$9(_this), "logNodeFromJSON", function(_ref) { var doc2 = _ref.doc, node2 = _ref.node; var fullDoc = _this.state.state.doc; var path = findNodeInJSON(doc2, node2); if (path) { console.log(path.reduce(function(node3, pathItem) { return node3[pathItem]; }, fullDoc)); } else { console.log(node2); } }); _defineProperty$8(_assertThisInitialized$9(_this), "selectHistoryItem", function(index2) { return _this.setState({ selectedHistoryItem: index2 }); }); _defineProperty$8(_assertThisInitialized$9(_this), "rollbackHistory", function(index2) { var EditorState2 = _this.state.EditorState; var editorState = _this.state.history[index2].state; var editorView = _this.state.view; var newState = EditorState2.create({ schema: editorState.schema, plugins: editorState.plugins, doc: editorState.schema.nodeFromJSON(editorState.doc.toJSON()) }); editorView.updateState(newState); editorView.dom.focus(); var tr = editorView.state.tr.setSelection(editorState.selection).setMeta("addToHistory", false).setMeta("_skip-dev-tools-history_", true); editorView.dispatch(tr); _this.setState({ state: newState, historyRolledBackTo: index2 }); }); _this.diffWorker = props && props.diffWorker ? Promise.resolve().then(() => jsonDiffWorker).then(function(_ref2) { var JsonDiffWorker2 = _ref2.JsonDiffWorker; return new JsonDiffWorker2(props.diffWorker); }) : Promise.resolve().then(() => jsonDiffMain).then(function(_ref3) { var JsonDiffMain2 = _ref3.JsonDiffMain; return new JsonDiffMain2(); }); _this.state = Object.assign({}, _this.state, { EditorState: getEditorStateClass(), view: _editorView, state: _editorView.state, nodeColors: buildColors(_editorView.state.schema), history: [{ state: _editorView.state, timestamp: Date.now() }] }); subscribeOnUpdates(_editorView, function(tr, oldState, newState) { var updatedHistory = updateEditorHistory(_this.state.history, _this.state.historyRolledBackTo, tr, newState); if (oldState && updatedHistory) { var _updatedHistory = _slicedToArray(updatedHistory, 1), id2 = _updatedHistory[0].id; var self2 = _assertThisInitialized$9(_this); _asyncToGenerator$2(/* @__PURE__ */ regenerator.mark(function _callee() { var diffWorker, _yield$Promise$all, _yield$Promise$all2, diff2, selection, history2; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return _this.diffWorker; case 2: diffWorker = _context.sent; _context.next = 5; return Promise.all([diffWorker.diff({ a: oldState.doc.toJSON(), b: newState.doc.toJSON(), id: id2 }), diffWorker.diff({ a: buildSelection(oldState.selection), b: buildSelection(newState.selection), id: id2 })]); case 5: _yield$Promise$all = _context.sent; _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2); diff2 = _yield$Promise$all2[0].delta; selection = _yield$Promise$all2[1].delta; history2 = updatedHistory.map(function(item) { return item.id === id2 ? Object.assign({}, item, { diff: diff2, diffPending: false, selection }) : item; }); self2.setState({ history: history2 }); case 11: case "end": return _context.stop(); } } }, _callee); }))(); } _this.setState({ state: newState, nodeColors: buildColors(newState.schema), activeMarks: getActiveMarks(newState), history: updatedHistory || _this.state.history, selectedHistoryItem: updatedHistory ? 0 : _this.state.selectedHistoryItem, historyRolledBackTo: updatedHistory ? false : _this.state.historyRolledBackTo }); }); return _this; } return EditorStateContainer2; }(Container); function _typeof$a(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$a = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$a = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$a(obj); } function _classCallCheck$a(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits$7(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$9(subClass, superClass); } function _setPrototypeOf$9(o2, p2) { _setPrototypeOf$9 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$9(o2, p2); } function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function() { var Super = _getPrototypeOf$7(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$7(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$7(this, result); }; } function _possibleConstructorReturn$7(self2, call) { if (call && (_typeof$a(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$8(self2); } function _assertThisInitialized$8(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$7(o2) { _getPrototypeOf$7 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$7(o2); } function _defineProperty$7(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var StateTabStateContainer = /* @__PURE__ */ function(_Container) { _inherits$7(StateTabStateContainer2, _Container); var _super = _createSuper$7(StateTabStateContainer2); function StateTabStateContainer2() { var _this; _classCallCheck$a(this, StateTabStateContainer2); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$7(_assertThisInitialized$8(_this), "state", { selectionExpanded: false }); _defineProperty$7(_assertThisInitialized$8(_this), "toggleSelection", function() { _this.setState({ selectionExpanded: !_this.state.selectionExpanded }); }); return _this; } return StateTabStateContainer2; }(Container); var copyProps = ["jsonID", "empty", "anchor", "from", "head", "to", "$anchor", "$head", "$cursor", "$to", "$from"]; var copySubProps = { $from: ["nodeAfter", "nodeBefore", "parent", "textOffset", "depth", "pos"], $to: ["nodeAfter", "nodeBefore", "parent", "textOffset", "depth", "pos"] }; var isNode = ["nodeAfter", "nodeBefore", "parent"]; function filterProps(selection, props, subProps) { return props.reduce(function(acc, prop2) { if (subProps && subProps[prop2]) { acc[prop2] = subProps[prop2].reduce(function(subAcc, subProp) { subAcc[subProp] = isNode.indexOf(subProp) === -1 || !selection[prop2][subProp] ? selection[prop2][subProp] : selection[prop2][subProp].toJSON(); return subAcc; }, {}); } else { acc[prop2 === "jsonID" ? "type" : prop2] = selection[prop2]; } return acc; }, {}); } function expandedStateFormatSelection(selection) { return filterProps(selection, copyProps, copySubProps); } function collapsedStateFormatSelection(selection) { return filterProps(selection, copyProps.slice(0, 6)); } var SplitView = newStyled("div")({ display: "flex", height: "100%" }); SplitView.displayName = "SplitView"; var SplitViewCol = newStyled("div")({ boxSizing: "border-box", height: "100%", overflow: "scroll" }, function(_ref) { var grow = _ref.grow, sep = _ref.sep, noPaddings = _ref.noPaddings, minWidth = _ref.minWidth, maxWidth = _ref.maxWidth; return { flexGrow: grow ? 1 : 0, borderLeft: sep ? "1px solid " + mainTheme.main20 : "none", padding: noPaddings ? "" : "16px 18px 18px", minWidth: minWidth ? "".concat(minWidth, "px") : "none", maxWidth: maxWidth ? "".concat(maxWidth, "px") : "none" }; }); SplitViewCol.displayName = "SplitViewCol"; var lib$3 = {}; var objectWithoutProperties = {}; objectWithoutProperties.__esModule = true; objectWithoutProperties.default = function(obj, keys2) { var target2 = {}; for (var i2 in obj) { if (keys2.indexOf(i2) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i2)) continue; target2[i2] = obj[i2]; } return target2; }; var classCallCheck$1 = {}; classCallCheck$1.__esModule = true; classCallCheck$1.default = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var possibleConstructorReturn$1 = {}; var _typeof$9 = {}; var iterator$2 = { exports: {} }; var ceil = Math.ceil; var floor$1 = Math.floor; var _toInteger = function(it2) { return isNaN(it2 = +it2) ? 0 : (it2 > 0 ? floor$1 : ceil)(it2); }; var _defined = function(it2) { if (it2 == void 0) throw TypeError("Can't call method on " + it2); return it2; }; var toInteger$3 = _toInteger; var defined$2 = _defined; var _stringAt = function(TO_STRING) { return function(that, pos) { var s2 = String(defined$2(that)); var i2 = toInteger$3(pos); var l2 = s2.length; var a2, b2; if (i2 < 0 || i2 >= l2) return TO_STRING ? "" : void 0; a2 = s2.charCodeAt(i2); return a2 < 55296 || a2 > 56319 || i2 + 1 === l2 || (b2 = s2.charCodeAt(i2 + 1)) < 56320 || b2 > 57343 ? TO_STRING ? s2.charAt(i2) : a2 : TO_STRING ? s2.slice(i2, i2 + 2) : (a2 - 55296 << 10) + (b2 - 56320) + 65536; }; }; var _library = true; var _global = { exports: {} }; var global$5 = _global.exports = typeof window != "undefined" && window.Math == Math ? window : typeof self != "undefined" && self.Math == Math ? self : Function("return this")(); if (typeof __g == "number") __g = global$5; var _core = { exports: {} }; var core$4 = _core.exports = { version: "2.6.12" }; if (typeof __e == "number") __e = core$4; var _aFunction = function(it2) { if (typeof it2 != "function") throw TypeError(it2 + " is not a function!"); return it2; }; var aFunction = _aFunction; var _ctx = function(fn, that, length2) { aFunction(fn); if (that === void 0) return fn; switch (length2) { case 1: return function(a2) { return fn.call(that, a2); }; case 2: return function(a2, b2) { return fn.call(that, a2, b2); }; case 3: return function(a2, b2, c) { return fn.call(that, a2, b2, c); }; } return function() { return fn.apply(that, arguments); }; }; var _objectDp = {}; var _isObject = function(it2) { return typeof it2 === "object" ? it2 !== null : typeof it2 === "function"; }; var isObject$8 = _isObject; var _anObject = function(it2) { if (!isObject$8(it2)) throw TypeError(it2 + " is not an object!"); return it2; }; var _fails = function(exec) { try { return !!exec(); } catch (e2) { return true; } }; var _descriptors = !_fails(function() { return Object.defineProperty({}, "a", { get: function() { return 7; } }).a != 7; }); var _domCreate; var hasRequired_domCreate; function require_domCreate() { if (hasRequired_domCreate) return _domCreate; hasRequired_domCreate = 1; var isObject2 = _isObject; var document2 = _global.exports.document; var is = isObject2(document2) && isObject2(document2.createElement); _domCreate = function(it2) { return is ? document2.createElement(it2) : {}; }; return _domCreate; } var _ie8DomDefine = !_descriptors && !_fails(function() { return Object.defineProperty(require_domCreate()("div"), "a", { get: function() { return 7; } }).a != 7; }); var isObject$7 = _isObject; var _toPrimitive = function(it2, S2) { if (!isObject$7(it2)) return it2; var fn, val; if (S2 && typeof (fn = it2.toString) == "function" && !isObject$7(val = fn.call(it2))) return val; if (typeof (fn = it2.valueOf) == "function" && !isObject$7(val = fn.call(it2))) return val; if (!S2 && typeof (fn = it2.toString) == "function" && !isObject$7(val = fn.call(it2))) return val; throw TypeError("Can't convert object to primitive value"); }; var anObject$4 = _anObject; var IE8_DOM_DEFINE$1 = _ie8DomDefine; var toPrimitive$2 = _toPrimitive; var dP$3 = Object.defineProperty; _objectDp.f = _descriptors ? Object.defineProperty : function defineProperty2(O2, P2, Attributes) { anObject$4(O2); P2 = toPrimitive$2(P2, true); anObject$4(Attributes); if (IE8_DOM_DEFINE$1) try { return dP$3(O2, P2, Attributes); } catch (e2) { } if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!"); if ("value" in Attributes) O2[P2] = Attributes.value; return O2; }; var _propertyDesc = function(bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value }; }; var dP$2 = _objectDp; var createDesc$2 = _propertyDesc; var _hide = _descriptors ? function(object, key2, value) { return dP$2.f(object, key2, createDesc$2(1, value)); } : function(object, key2, value) { object[key2] = value; return object; }; var hasOwnProperty$3 = {}.hasOwnProperty; var _has = function(it2, key2) { return hasOwnProperty$3.call(it2, key2); }; var global$4 = _global.exports; var core$3 = _core.exports; var ctx = _ctx; var hide$2 = _hide; var has$6 = _has; var PROTOTYPE$2 = "prototype"; var $export$7 = function(type2, name, source) { var IS_FORCED = type2 & $export$7.F; var IS_GLOBAL = type2 & $export$7.G; var IS_STATIC = type2 & $export$7.S; var IS_PROTO = type2 & $export$7.P; var IS_BIND = type2 & $export$7.B; var IS_WRAP = type2 & $export$7.W; var exports2 = IS_GLOBAL ? core$3 : core$3[name] || (core$3[name] = {}); var expProto = exports2[PROTOTYPE$2]; var target2 = IS_GLOBAL ? global$4 : IS_STATIC ? global$4[name] : (global$4[name] || {})[PROTOTYPE$2]; var key2, own, out; if (IS_GLOBAL) source = name; for (key2 in source) { own = !IS_FORCED && target2 && target2[key2] !== void 0; if (own && has$6(exports2, key2)) continue; out = own ? target2[key2] : source[key2]; exports2[key2] = IS_GLOBAL && typeof target2[key2] != "function" ? source[key2] : IS_BIND && own ? ctx(out, global$4) : IS_WRAP && target2[key2] == out ? function(C2) { var F2 = function(a2, b2, c) { if (this instanceof C2) { switch (arguments.length) { case 0: return new C2(); case 1: return new C2(a2); case 2: return new C2(a2, b2); } return new C2(a2, b2, c); } return C2.apply(this, arguments); }; F2[PROTOTYPE$2] = C2[PROTOTYPE$2]; return F2; }(out) : IS_PROTO && typeof out == "function" ? ctx(Function.call, out) : out; if (IS_PROTO) { (exports2.virtual || (exports2.virtual = {}))[key2] = out; if (type2 & $export$7.R && expProto && !expProto[key2]) hide$2(expProto, key2, out); } } }; $export$7.F = 1; $export$7.G = 2; $export$7.S = 4; $export$7.P = 8; $export$7.B = 16; $export$7.W = 32; $export$7.U = 64; $export$7.R = 128; var _export = $export$7; var _redefine = { exports: {} }; (function(module3) { module3.exports = _hide; })(_redefine); var _iterators = {}; var toString$2 = {}.toString; var _cof = function(it2) { return toString$2.call(it2).slice(8, -1); }; var cof$2 = _cof; var _iobject = Object("z").propertyIsEnumerable(0) ? Object : function(it2) { return cof$2(it2) == "String" ? it2.split("") : Object(it2); }; var IObject = _iobject; var defined$1 = _defined; var _toIobject = function(it2) { return IObject(defined$1(it2)); }; var toInteger$2 = _toInteger; var min$1 = Math.min; var _toLength = function(it2) { return it2 > 0 ? min$1(toInteger$2(it2), 9007199254740991) : 0; }; var toInteger$1 = _toInteger; var max = Math.max; var min = Math.min; var _toAbsoluteIndex = function(index2, length2) { index2 = toInteger$1(index2); return index2 < 0 ? max(index2 + length2, 0) : min(index2, length2); }; var toIObject$5 = _toIobject; var toLength = _toLength; var toAbsoluteIndex = _toAbsoluteIndex; var _arrayIncludes = function(IS_INCLUDES) { return function($this, el2, fromIndex) { var O2 = toIObject$5($this); var length2 = toLength(O2.length); var index2 = toAbsoluteIndex(fromIndex, length2); var value; if (IS_INCLUDES && el2 != el2) while (length2 > index2) { value = O2[index2++]; if (value != value) return true; } else for (; length2 > index2; index2++) if (IS_INCLUDES || index2 in O2) { if (O2[index2] === el2) return IS_INCLUDES || index2 || 0; } return !IS_INCLUDES && -1; }; }; var _shared = { exports: {} }; var core$2 = _core.exports; var global$3 = _global.exports; var SHARED = "__core-js_shared__"; var store$1 = global$3[SHARED] || (global$3[SHARED] = {}); (_shared.exports = function(key2, value) { return store$1[key2] || (store$1[key2] = value !== void 0 ? value : {}); })("versions", []).push({ version: core$2.version, mode: "pure", copyright: "\xA9 2020 Denis Pushkarev (zloirock.ru)" }); var id$1 = 0; var px = Math.random(); var _uid = function(key2) { return "Symbol(".concat(key2 === void 0 ? "" : key2, ")_", (++id$1 + px).toString(36)); }; var shared$1 = _shared.exports("keys"); var uid$2 = _uid; var _sharedKey = function(key2) { return shared$1[key2] || (shared$1[key2] = uid$2(key2)); }; var has$5 = _has; var toIObject$4 = _toIobject; var arrayIndexOf$1 = _arrayIncludes(false); var IE_PROTO$2 = _sharedKey("IE_PROTO"); var _objectKeysInternal = function(object, names) { var O2 = toIObject$4(object); var i2 = 0; var result = []; var key2; for (key2 in O2) if (key2 != IE_PROTO$2) has$5(O2, key2) && result.push(key2); while (names.length > i2) if (has$5(O2, key2 = names[i2++])) { ~arrayIndexOf$1(result, key2) || result.push(key2); } return result; }; var _enumBugKeys = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","); var $keys$3 = _objectKeysInternal; var enumBugKeys$1 = _enumBugKeys; var _objectKeys = Object.keys || function keys2(O2) { return $keys$3(O2, enumBugKeys$1); }; var dP$1 = _objectDp; var anObject$3 = _anObject; var getKeys$1 = _objectKeys; var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O2, Properties) { anObject$3(O2); var keys2 = getKeys$1(Properties); var length2 = keys2.length; var i2 = 0; var P2; while (length2 > i2) dP$1.f(O2, P2 = keys2[i2++], Properties[P2]); return O2; }; var _html; var hasRequired_html; function require_html() { if (hasRequired_html) return _html; hasRequired_html = 1; var document2 = _global.exports.document; _html = document2 && document2.documentElement; return _html; } var anObject$2 = _anObject; var dPs = _objectDps; var enumBugKeys = _enumBugKeys; var IE_PROTO$1 = _sharedKey("IE_PROTO"); var Empty = function() { }; var PROTOTYPE$1 = "prototype"; var createDict = function() { var iframe = require_domCreate()("iframe"); var i2 = enumBugKeys.length; var lt2 = "<"; var gt2 = ">"; var iframeDocument; iframe.style.display = "none"; require_html().appendChild(iframe); iframe.src = "javascript:"; iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(lt2 + "script" + gt2 + "document.F=Object" + lt2 + "/script" + gt2); iframeDocument.close(); createDict = iframeDocument.F; while (i2--) delete createDict[PROTOTYPE$1][enumBugKeys[i2]]; return createDict(); }; var _objectCreate = Object.create || function create2(O2, Properties) { var result; if (O2 !== null) { Empty[PROTOTYPE$1] = anObject$2(O2); result = new Empty(); Empty[PROTOTYPE$1] = null; result[IE_PROTO$1] = O2; } else result = createDict(); return Properties === void 0 ? result : dPs(result, Properties); }; var _wks = { exports: {} }; var store = _shared.exports("wks"); var uid$1 = _uid; var Symbol$2 = _global.exports.Symbol; var USE_SYMBOL = typeof Symbol$2 == "function"; var $exports = _wks.exports = function(name) { return store[name] || (store[name] = USE_SYMBOL && Symbol$2[name] || (USE_SYMBOL ? Symbol$2 : uid$1)("Symbol." + name)); }; $exports.store = store; var def = _objectDp.f; var has$4 = _has; var TAG$1 = _wks.exports("toStringTag"); var _setToStringTag = function(it2, tag, stat) { if (it2 && !has$4(it2 = stat ? it2 : it2.prototype, TAG$1)) def(it2, TAG$1, { configurable: true, value: tag }); }; var create$2 = _objectCreate; var descriptor = _propertyDesc; var setToStringTag$2 = _setToStringTag; var IteratorPrototype = {}; _hide(IteratorPrototype, _wks.exports("iterator"), function() { return this; }); var _iterCreate = function(Constructor, NAME2, next2) { Constructor.prototype = create$2(IteratorPrototype, { next: descriptor(1, next2) }); setToStringTag$2(Constructor, NAME2 + " Iterator"); }; var defined = _defined; var _toObject = function(it2) { return Object(defined(it2)); }; var has$3 = _has; var toObject$3 = _toObject; var IE_PROTO = _sharedKey("IE_PROTO"); var ObjectProto$1 = Object.prototype; var _objectGpo = Object.getPrototypeOf || function(O2) { O2 = toObject$3(O2); if (has$3(O2, IE_PROTO)) return O2[IE_PROTO]; if (typeof O2.constructor == "function" && O2 instanceof O2.constructor) { return O2.constructor.prototype; } return O2 instanceof Object ? ObjectProto$1 : null; }; var $export$6 = _export; var redefine$1 = _redefine.exports; var hide$1 = _hide; var Iterators$4 = _iterators; var $iterCreate = _iterCreate; var setToStringTag$1 = _setToStringTag; var getPrototypeOf = _objectGpo; var ITERATOR$2 = _wks.exports("iterator"); var BUGGY = !([].keys && "next" in [].keys()); var FF_ITERATOR = "@@iterator"; var KEYS = "keys"; var VALUES = "values"; var returnThis = function() { return this; }; var _iterDefine = function(Base, NAME2, Constructor, next2, DEFAULT, IS_SET, FORCED) { $iterCreate(Constructor, NAME2, next2); var getMethod = function(kind) { if (!BUGGY && kind in proto2) return proto2[kind]; switch (kind) { case KEYS: return function keys2() { return new Constructor(this, kind); }; case VALUES: return function values() { return new Constructor(this, kind); }; } return function entries() { return new Constructor(this, kind); }; }; var TAG2 = NAME2 + " Iterator"; var DEF_VALUES = DEFAULT == VALUES; var VALUES_BUG = false; var proto2 = Base.prototype; var $native = proto2[ITERATOR$2] || proto2[FF_ITERATOR] || DEFAULT && proto2[DEFAULT]; var $default = $native || getMethod(DEFAULT); var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod("entries") : void 0; var $anyNative = NAME2 == "Array" ? proto2.entries || $native : $native; var methods, key2, IteratorPrototype2; if ($anyNative) { IteratorPrototype2 = getPrototypeOf($anyNative.call(new Base())); if (IteratorPrototype2 !== Object.prototype && IteratorPrototype2.next) { setToStringTag$1(IteratorPrototype2, TAG2, true); } } if (DEF_VALUES && $native && $native.name !== VALUES) { VALUES_BUG = true; $default = function values() { return $native.call(this); }; } if (FORCED && (BUGGY || VALUES_BUG || !proto2[ITERATOR$2])) { hide$1(proto2, ITERATOR$2, $default); } Iterators$4[NAME2] = $default; Iterators$4[TAG2] = returnThis; if (DEFAULT) { methods = { values: DEF_VALUES ? $default : getMethod(VALUES), keys: IS_SET ? $default : getMethod(KEYS), entries: $entries }; if (FORCED) for (key2 in methods) { if (!(key2 in proto2)) redefine$1(proto2, key2, methods[key2]); } else $export$6($export$6.P + $export$6.F * (BUGGY || VALUES_BUG), NAME2, methods); } return methods; }; var $at = _stringAt(true); _iterDefine(String, "String", function(iterated) { this._t = String(iterated); this._i = 0; }, function() { var O2 = this._t; var index2 = this._i; var point; if (index2 >= O2.length) return { value: void 0, done: true }; point = $at(O2, index2); this._i += point.length; return { value: point, done: false }; }); var _iterStep = function(done, value) { return { value, done: !!done }; }; var step = _iterStep; var Iterators$3 = _iterators; var toIObject$3 = _toIobject; _iterDefine(Array, "Array", function(iterated, kind) { this._t = toIObject$3(iterated); this._i = 0; this._k = kind; }, function() { var O2 = this._t; var kind = this._k; var index2 = this._i++; if (!O2 || index2 >= O2.length) { this._t = void 0; return step(1); } if (kind == "keys") return step(0, index2); if (kind == "values") return step(0, O2[index2]); return step(0, [index2, O2[index2]]); }, "values"); Iterators$3.Arguments = Iterators$3.Array; var global$2 = _global.exports; var hide = _hide; var Iterators$2 = _iterators; var TO_STRING_TAG = _wks.exports("toStringTag"); var DOMIterables = "CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","); for (var i$2 = 0; i$2 < DOMIterables.length; i$2++) { var NAME = DOMIterables[i$2]; var Collection = global$2[NAME]; var proto = Collection && Collection.prototype; if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); Iterators$2[NAME] = Iterators$2.Array; } var _wksExt = {}; _wksExt.f = _wks.exports; var iterator$1 = _wksExt.f("iterator"); (function(module3) { module3.exports = { "default": iterator$1, __esModule: true }; })(iterator$2); var symbol$1 = { exports: {} }; var _meta = { exports: {} }; var META$1 = _uid("meta"); var isObject$6 = _isObject; var has$2 = _has; var setDesc = _objectDp.f; var id = 0; var isExtensible = Object.isExtensible || function() { return true; }; var FREEZE = !_fails(function() { return isExtensible(Object.preventExtensions({})); }); var setMeta = function(it2) { setDesc(it2, META$1, { value: { i: "O" + ++id, w: {} } }); }; var fastKey = function(it2, create2) { if (!isObject$6(it2)) return typeof it2 == "symbol" ? it2 : (typeof it2 == "string" ? "S" : "P") + it2; if (!has$2(it2, META$1)) { if (!isExtensible(it2)) return "F"; if (!create2) return "E"; setMeta(it2); } return it2[META$1].i; }; var getWeak = function(it2, create2) { if (!has$2(it2, META$1)) { if (!isExtensible(it2)) return true; if (!create2) return false; setMeta(it2); } return it2[META$1].w; }; var onFreeze = function(it2) { if (FREEZE && meta.NEED && isExtensible(it2) && !has$2(it2, META$1)) setMeta(it2); return it2; }; var meta = _meta.exports = { KEY: META$1, NEED: false, fastKey, getWeak, onFreeze }; var core$1 = _core.exports; var wksExt$1 = _wksExt; var defineProperty$1 = _objectDp.f; var _wksDefine = function(name) { var $Symbol2 = core$1.Symbol || (core$1.Symbol = {}); if (name.charAt(0) != "_" && !(name in $Symbol2)) defineProperty$1($Symbol2, name, { value: wksExt$1.f(name) }); }; var _objectGops = {}; _objectGops.f = Object.getOwnPropertySymbols; var _objectPie = {}; _objectPie.f = {}.propertyIsEnumerable; var getKeys = _objectKeys; var gOPS = _objectGops; var pIE$1 = _objectPie; var _enumKeys = function(it2) { var result = getKeys(it2); var getSymbols = gOPS.f; if (getSymbols) { var symbols2 = getSymbols(it2); var isEnum2 = pIE$1.f; var i2 = 0; var key2; while (symbols2.length > i2) if (isEnum2.call(it2, key2 = symbols2[i2++])) result.push(key2); } return result; }; var cof$1 = _cof; var _isArray = Array.isArray || function isArray2(arg) { return cof$1(arg) == "Array"; }; var _objectGopnExt = {}; var _objectGopn = {}; var $keys$2 = _objectKeysInternal; var hiddenKeys = _enumBugKeys.concat("length", "prototype"); _objectGopn.f = Object.getOwnPropertyNames || function getOwnPropertyNames2(O2) { return $keys$2(O2, hiddenKeys); }; var toIObject$2 = _toIobject; var gOPN$1 = _objectGopn.f; var toString$1 = {}.toString; var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; var getWindowNames = function(it2) { try { return gOPN$1(it2); } catch (e2) { return windowNames.slice(); } }; _objectGopnExt.f = function getOwnPropertyNames2(it2) { return windowNames && toString$1.call(it2) == "[object Window]" ? getWindowNames(it2) : gOPN$1(toIObject$2(it2)); }; var _objectGopd = {}; var pIE = _objectPie; var createDesc$1 = _propertyDesc; var toIObject$1 = _toIobject; var toPrimitive$1 = _toPrimitive; var has$1 = _has; var IE8_DOM_DEFINE = _ie8DomDefine; var gOPD$1 = Object.getOwnPropertyDescriptor; _objectGopd.f = _descriptors ? gOPD$1 : function getOwnPropertyDescriptor(O2, P2) { O2 = toIObject$1(O2); P2 = toPrimitive$1(P2, true); if (IE8_DOM_DEFINE) try { return gOPD$1(O2, P2); } catch (e2) { } if (has$1(O2, P2)) return createDesc$1(!pIE.f.call(O2, P2), O2[P2]); }; var global$1 = _global.exports; var has = _has; var DESCRIPTORS = _descriptors; var $export$5 = _export; var redefine = _redefine.exports; var META = _meta.exports.KEY; var $fails = _fails; var shared = _shared.exports; var setToStringTag = _setToStringTag; var uid = _uid; var wks = _wks.exports; var wksExt = _wksExt; var wksDefine = _wksDefine; var enumKeys = _enumKeys; var isArray$6 = _isArray; var anObject$1 = _anObject; var isObject$5 = _isObject; var toObject$2 = _toObject; var toIObject = _toIobject; var toPrimitive = _toPrimitive; var createDesc = _propertyDesc; var _create$1 = _objectCreate; var gOPNExt = _objectGopnExt; var $GOPD = _objectGopd; var $GOPS = _objectGops; var $DP = _objectDp; var $keys$1 = _objectKeys; var gOPD = $GOPD.f; var dP = $DP.f; var gOPN = gOPNExt.f; var $Symbol = global$1.Symbol; var $JSON = global$1.JSON; var _stringify = $JSON && $JSON.stringify; var PROTOTYPE = "prototype"; var HIDDEN = wks("_hidden"); var TO_PRIMITIVE = wks("toPrimitive"); var isEnum = {}.propertyIsEnumerable; var SymbolRegistry = shared("symbol-registry"); var AllSymbols = shared("symbols"); var OPSymbols = shared("op-symbols"); var ObjectProto = Object[PROTOTYPE]; var USE_NATIVE = typeof $Symbol == "function" && !!$GOPS.f; var QObject = global$1.QObject; var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; var setSymbolDesc = DESCRIPTORS && $fails(function() { return _create$1(dP({}, "a", { get: function() { return dP(this, "a", { value: 7 }).a; } })).a != 7; }) ? function(it2, key2, D2) { var protoDesc = gOPD(ObjectProto, key2); if (protoDesc) delete ObjectProto[key2]; dP(it2, key2, D2); if (protoDesc && it2 !== ObjectProto) dP(ObjectProto, key2, protoDesc); } : dP; var wrap = function(tag) { var sym = AllSymbols[tag] = _create$1($Symbol[PROTOTYPE]); sym._k = tag; return sym; }; var isSymbol$2 = USE_NATIVE && typeof $Symbol.iterator == "symbol" ? function(it2) { return typeof it2 == "symbol"; } : function(it2) { return it2 instanceof $Symbol; }; var $defineProperty = function defineProperty2(it2, key2, D2) { if (it2 === ObjectProto) $defineProperty(OPSymbols, key2, D2); anObject$1(it2); key2 = toPrimitive(key2, true); anObject$1(D2); if (has(AllSymbols, key2)) { if (!D2.enumerable) { if (!has(it2, HIDDEN)) dP(it2, HIDDEN, createDesc(1, {})); it2[HIDDEN][key2] = true; } else { if (has(it2, HIDDEN) && it2[HIDDEN][key2]) it2[HIDDEN][key2] = false; D2 = _create$1(D2, { enumerable: createDesc(0, false) }); } return setSymbolDesc(it2, key2, D2); } return dP(it2, key2, D2); }; var $defineProperties = function defineProperties(it2, P2) { anObject$1(it2); var keys2 = enumKeys(P2 = toIObject(P2)); var i2 = 0; var l2 = keys2.length; var key2; while (l2 > i2) $defineProperty(it2, key2 = keys2[i2++], P2[key2]); return it2; }; var $create = function create2(it2, P2) { return P2 === void 0 ? _create$1(it2) : $defineProperties(_create$1(it2), P2); }; var $propertyIsEnumerable = function propertyIsEnumerable2(key2) { var E2 = isEnum.call(this, key2 = toPrimitive(key2, true)); if (this === ObjectProto && has(AllSymbols, key2) && !has(OPSymbols, key2)) return false; return E2 || !has(this, key2) || !has(AllSymbols, key2) || has(this, HIDDEN) && this[HIDDEN][key2] ? E2 : true; }; var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it2, key2) { it2 = toIObject(it2); key2 = toPrimitive(key2, true); if (it2 === ObjectProto && has(AllSymbols, key2) && !has(OPSymbols, key2)) return; var D2 = gOPD(it2, key2); if (D2 && has(AllSymbols, key2) && !(has(it2, HIDDEN) && it2[HIDDEN][key2])) D2.enumerable = true; return D2; }; var $getOwnPropertyNames = function getOwnPropertyNames2(it2) { var names = gOPN(toIObject(it2)); var result = []; var i2 = 0; var key2; while (names.length > i2) { if (!has(AllSymbols, key2 = names[i2++]) && key2 != HIDDEN && key2 != META) result.push(key2); } return result; }; var $getOwnPropertySymbols = function getOwnPropertySymbols2(it2) { var IS_OP = it2 === ObjectProto; var names = gOPN(IS_OP ? OPSymbols : toIObject(it2)); var result = []; var i2 = 0; var key2; while (names.length > i2) { if (has(AllSymbols, key2 = names[i2++]) && (IS_OP ? has(ObjectProto, key2) : true)) result.push(AllSymbols[key2]); } return result; }; if (!USE_NATIVE) { $Symbol = function Symbol2() { if (this instanceof $Symbol) throw TypeError("Symbol is not a constructor!"); var tag = uid(arguments.length > 0 ? arguments[0] : void 0); var $set = function(value) { if (this === ObjectProto) $set.call(OPSymbols, value); if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; setSymbolDesc(this, tag, createDesc(1, value)); }; if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); return wrap(tag); }; redefine($Symbol[PROTOTYPE], "toString", function toString2() { return this._k; }); $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; _objectGopn.f = gOPNExt.f = $getOwnPropertyNames; _objectPie.f = $propertyIsEnumerable; $GOPS.f = $getOwnPropertySymbols; if (DESCRIPTORS && !_library) { redefine(ObjectProto, "propertyIsEnumerable", $propertyIsEnumerable, true); } wksExt.f = function(name) { return wrap(wks(name)); }; } $export$5($export$5.G + $export$5.W + $export$5.F * !USE_NATIVE, { Symbol: $Symbol }); for (var es6Symbols = "hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","), j$2 = 0; es6Symbols.length > j$2; ) wks(es6Symbols[j$2++]); for (var wellKnownSymbols = $keys$1(wks.store), k = 0; wellKnownSymbols.length > k; ) wksDefine(wellKnownSymbols[k++]); $export$5($export$5.S + $export$5.F * !USE_NATIVE, "Symbol", { "for": function(key2) { return has(SymbolRegistry, key2 += "") ? SymbolRegistry[key2] : SymbolRegistry[key2] = $Symbol(key2); }, keyFor: function keyFor(sym) { if (!isSymbol$2(sym)) throw TypeError(sym + " is not a symbol!"); for (var key2 in SymbolRegistry) if (SymbolRegistry[key2] === sym) return key2; }, useSetter: function() { setter = true; }, useSimple: function() { setter = false; } }); $export$5($export$5.S + $export$5.F * !USE_NATIVE, "Object", { create: $create, defineProperty: $defineProperty, defineProperties: $defineProperties, getOwnPropertyDescriptor: $getOwnPropertyDescriptor, getOwnPropertyNames: $getOwnPropertyNames, getOwnPropertySymbols: $getOwnPropertySymbols }); var FAILS_ON_PRIMITIVES = $fails(function() { $GOPS.f(1); }); $export$5($export$5.S + $export$5.F * FAILS_ON_PRIMITIVES, "Object", { getOwnPropertySymbols: function getOwnPropertySymbols2(it2) { return $GOPS.f(toObject$2(it2)); } }); $JSON && $export$5($export$5.S + $export$5.F * (!USE_NATIVE || $fails(function() { var S2 = $Symbol(); return _stringify([S2]) != "[null]" || _stringify({ a: S2 }) != "{}" || _stringify(Object(S2)) != "{}"; })), "JSON", { stringify: function stringify2(it2) { var args = [it2]; var i2 = 1; var replacer, $replacer; while (arguments.length > i2) args.push(arguments[i2++]); $replacer = replacer = args[1]; if (!isObject$5(replacer) && it2 === void 0 || isSymbol$2(it2)) return; if (!isArray$6(replacer)) replacer = function(key2, value) { if (typeof $replacer == "function") value = $replacer.call(this, key2, value); if (!isSymbol$2(value)) return value; }; args[1] = replacer; return _stringify.apply($JSON, args); } }); $Symbol[PROTOTYPE][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); setToStringTag($Symbol, "Symbol"); setToStringTag(Math, "Math", true); setToStringTag(global$1.JSON, "JSON", true); _wksDefine("asyncIterator"); _wksDefine("observable"); var symbol = _core.exports.Symbol; (function(module3) { module3.exports = { "default": symbol, __esModule: true }; })(symbol$1); _typeof$9.__esModule = true; var _iterator = iterator$2.exports; var _iterator2 = _interopRequireDefault$5(_iterator); var _symbol = symbol$1.exports; var _symbol2 = _interopRequireDefault$5(_symbol); var _typeof$8 = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; }; function _interopRequireDefault$5(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _typeof$9.default = typeof _symbol2.default === "function" && _typeof$8(_iterator2.default) === "symbol" ? function(obj) { return typeof obj === "undefined" ? "undefined" : _typeof$8(obj); } : function(obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof$8(obj); }; possibleConstructorReturn$1.__esModule = true; var _typeof2$2 = _typeof$9; var _typeof3$2 = _interopRequireDefault$4(_typeof2$2); function _interopRequireDefault$4(obj) { return obj && obj.__esModule ? obj : { default: obj }; } possibleConstructorReturn$1.default = function(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3$2.default)(call)) === "object" || typeof call === "function") ? call : self2; }; var inherits$1 = {}; var setPrototypeOf$1 = { exports: {} }; var _setProto; var hasRequired_setProto; function require_setProto() { if (hasRequired_setProto) return _setProto; hasRequired_setProto = 1; var isObject2 = _isObject; var anObject2 = _anObject; var check2 = function(O2, proto2) { anObject2(O2); if (!isObject2(proto2) && proto2 !== null) throw TypeError(proto2 + ": can't set as prototype!"); }; _setProto = { set: Object.setPrototypeOf || ("__proto__" in {} ? function(test, buggy, set2) { try { set2 = _ctx(Function.call, _objectGopd.f(Object.prototype, "__proto__").set, 2); set2(test, []); buggy = !(test instanceof Array); } catch (e2) { buggy = true; } return function setPrototypeOf2(O2, proto2) { check2(O2, proto2); if (buggy) O2.__proto__ = proto2; else set2(O2, proto2); return O2; }; }({}, false) : void 0), check: check2 }; return _setProto; } var $export$4 = _export; $export$4($export$4.S, "Object", { setPrototypeOf: require_setProto().set }); var setPrototypeOf = _core.exports.Object.setPrototypeOf; (function(module3) { module3.exports = { "default": setPrototypeOf, __esModule: true }; })(setPrototypeOf$1); var create$1 = { exports: {} }; var $export$3 = _export; $export$3($export$3.S, "Object", { create: _objectCreate }); var $Object$1 = _core.exports.Object; var create = function create2(P2, D2) { return $Object$1.create(P2, D2); }; (function(module3) { module3.exports = { "default": create, __esModule: true }; })(create$1); inherits$1.__esModule = true; var _setPrototypeOf$8 = setPrototypeOf$1.exports; var _setPrototypeOf2 = _interopRequireDefault$3(_setPrototypeOf$8); var _create = create$1.exports; var _create2 = _interopRequireDefault$3(_create); var _typeof2$1 = _typeof$9; var _typeof3$1 = _interopRequireDefault$3(_typeof2$1); function _interopRequireDefault$3(obj) { return obj && obj.__esModule ? obj : { default: obj }; } inherits$1.default = function(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3$1.default)(superClass))); } subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; }; var _extends$2 = {}; var assign$2 = { exports: {} }; var _objectAssign; var hasRequired_objectAssign; function require_objectAssign() { if (hasRequired_objectAssign) return _objectAssign; hasRequired_objectAssign = 1; var DESCRIPTORS2 = _descriptors; var getKeys2 = _objectKeys; var gOPS2 = _objectGops; var pIE2 = _objectPie; var toObject2 = _toObject; var IObject2 = _iobject; var $assign = Object.assign; _objectAssign = !$assign || _fails(function() { var A2 = {}; var B2 = {}; var S2 = Symbol(); var K2 = "abcdefghijklmnopqrst"; A2[S2] = 7; K2.split("").forEach(function(k2) { B2[k2] = k2; }); return $assign({}, A2)[S2] != 7 || Object.keys($assign({}, B2)).join("") != K2; }) ? function assign2(target2, source) { var T2 = toObject2(target2); var aLen = arguments.length; var index2 = 1; var getSymbols = gOPS2.f; var isEnum2 = pIE2.f; while (aLen > index2) { var S2 = IObject2(arguments[index2++]); var keys2 = getSymbols ? getKeys2(S2).concat(getSymbols(S2)) : getKeys2(S2); var length2 = keys2.length; var j2 = 0; var key2; while (length2 > j2) { key2 = keys2[j2++]; if (!DESCRIPTORS2 || isEnum2.call(S2, key2)) T2[key2] = S2[key2]; } } return T2; } : $assign; return _objectAssign; } var $export$2 = _export; $export$2($export$2.S + $export$2.F, "Object", { assign: require_objectAssign() }); var assign$1 = _core.exports.Object.assign; (function(module3) { module3.exports = { "default": assign$1, __esModule: true }; })(assign$2); _extends$2.__esModule = true; var _assign = assign$2.exports; var _assign2 = _interopRequireDefault$2(_assign); function _interopRequireDefault$2(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _extends$2.default = _assign2.default || function(target2) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target2[key2] = source[key2]; } } } return target2; }; var keys$1 = { exports: {} }; var $export$1 = _export; var core = _core.exports; var fails = _fails; var _objectSap = function(KEY, exec) { var fn = (core.Object || {})[KEY] || Object[KEY]; var exp = {}; exp[KEY] = exec(fn); $export$1($export$1.S + $export$1.F * fails(function() { fn(1); }), "Object", exp); }; var toObject$1 = _toObject; var $keys = _objectKeys; _objectSap("keys", function() { return function keys2(it2) { return $keys(toObject$1(it2)); }; }); var keys = _core.exports.Object.keys; (function(module3) { module3.exports = { "default": keys, __esModule: true }; })(keys$1); var JSONNode = {}; var objType = {}; (function(exports2) { exports2.__esModule = true; var _iterator3 = iterator$2.exports; var _iterator22 = _interopRequireDefault2(_iterator3); exports2["default"] = objType2; function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function objType2(obj) { var type2 = Object.prototype.toString.call(obj).slice(8, -1); if (type2 === "Object" && typeof obj[_iterator22["default"]] === "function") { return "Iterable"; } if (type2 === "Custom" && obj.constructor !== Object && obj instanceof Object) { return "Object"; } return type2; } })(objType); var JSONObjectNode = {}; var getOwnPropertyNames$1 = { exports: {} }; _objectSap("getOwnPropertyNames", function() { return _objectGopnExt.f; }); var $Object = _core.exports.Object; var getOwnPropertyNames = function getOwnPropertyNames2(it2) { return $Object.getOwnPropertyNames(it2); }; (function(module3) { module3.exports = { "default": getOwnPropertyNames, __esModule: true }; })(getOwnPropertyNames$1); var JSONNestedNode = {}; var JSONArrow = {}; (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var JSONArrow2 = function JSONArrow3(_ref) { var styling = _ref.styling, arrowStyle = _ref.arrowStyle, expanded = _ref.expanded, nodeType = _ref.nodeType, onClick = _ref.onClick; return _react22["default"].createElement( "div", (0, _extends32["default"])({}, styling("arrowContainer", arrowStyle), { onClick }), _react22["default"].createElement( "div", styling(["arrow", "arrowSign"], nodeType, expanded, arrowStyle), "\u25B6", arrowStyle === "double" && _react22["default"].createElement( "div", styling(["arrowSign", "arrowSignInner"]), "\u25B6" ) ) ); }; JSONArrow2.propTypes = { styling: _propTypes22["default"].func.isRequired, arrowStyle: _propTypes22["default"].oneOf(["single", "double"]), expanded: _propTypes22["default"].bool.isRequired, nodeType: _propTypes22["default"].string.isRequired, onClick: _propTypes22["default"].func.isRequired }; JSONArrow2.defaultProps = { arrowStyle: "single" }; exports2["default"] = JSONArrow2; })(JSONArrow); var getCollectionEntries = {}; var getIterator$1 = { exports: {} }; var getIterator = { exports: {} }; var cof = _cof; var TAG = _wks.exports("toStringTag"); var ARG = cof(function() { return arguments; }()) == "Arguments"; var tryGet = function(it2, key2) { try { return it2[key2]; } catch (e2) { } }; var _classof = function(it2) { var O2, T2, B2; return it2 === void 0 ? "Undefined" : it2 === null ? "Null" : typeof (T2 = tryGet(O2 = Object(it2), TAG)) == "string" ? T2 : ARG ? cof(O2) : (B2 = cof(O2)) == "Object" && typeof O2.callee == "function" ? "Arguments" : B2; }; var classof$1 = _classof; var ITERATOR$1 = _wks.exports("iterator"); var Iterators$1 = _iterators; var core_getIteratorMethod = _core.exports.getIteratorMethod = function(it2) { if (it2 != void 0) return it2[ITERATOR$1] || it2["@@iterator"] || Iterators$1[classof$1(it2)]; }; var anObject = _anObject; var get$4 = core_getIteratorMethod; var core_getIterator = _core.exports.getIterator = function(it2) { var iterFn = get$4(it2); if (typeof iterFn != "function") throw TypeError(it2 + " is not iterable!"); return anObject(iterFn.call(it2)); }; (function(module3) { module3.exports = core_getIterator; })(getIterator); (function(module3) { module3.exports = { "default": getIterator.exports, __esModule: true }; })(getIterator$1); (function(exports2) { exports2.__esModule = true; var _getIterator22 = getIterator$1.exports; var _getIterator32 = _interopRequireDefault2(_getIterator22); var _getOwnPropertyNames = getOwnPropertyNames$1.exports; var _getOwnPropertyNames2 = _interopRequireDefault2(_getOwnPropertyNames); var _keys3 = keys$1.exports; var _keys22 = _interopRequireDefault2(_keys3); exports2["default"] = getCollectionEntries2; function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function getLength(type2, collection) { if (type2 === "Object") { return (0, _keys22["default"])(collection).length; } else if (type2 === "Array") { return collection.length; } return Infinity; } function isIterableMap(collection) { return typeof collection.set === "function"; } function getEntries(type2, collection, sortObjectKeys) { var from2 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0; var to = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : Infinity; var res = void 0; if (type2 === "Object") { var keys2 = (0, _getOwnPropertyNames2["default"])(collection); if (sortObjectKeys) { keys2.sort(sortObjectKeys === true ? void 0 : sortObjectKeys); } keys2 = keys2.slice(from2, to + 1); res = { entries: keys2.map(function(key2) { return { key: key2, value: collection[key2] }; }) }; } else if (type2 === "Array") { res = { entries: collection.slice(from2, to + 1).map(function(val, idx2) { return { key: idx2 + from2, value: val }; }) }; } else { var idx = 0; var entries = []; var done = true; var isMap = isIterableMap(collection); for (var _iterator3 = collection, _isArray2 = Array.isArray(_iterator3), _i = 0, _iterator3 = _isArray2 ? _iterator3 : (0, _getIterator32["default"])(_iterator3); ; ) { var _ref; if (_isArray2) { if (_i >= _iterator3.length) break; _ref = _iterator3[_i++]; } else { _i = _iterator3.next(); if (_i.done) break; _ref = _i.value; } var item = _ref; if (idx > to) { done = false; break; } if (from2 <= idx) { if (isMap && Array.isArray(item)) { if (typeof item[0] === "string" || typeof item[0] === "number") { entries.push({ key: item[0], value: item[1] }); } else { entries.push({ key: "[entry " + idx + "]", value: { "[key]": item[0], "[value]": item[1] } }); } } else { entries.push({ key: idx, value: item }); } } idx++; } res = { hasMore: !done, entries }; } return res; } function getRanges(from2, to, limit) { var ranges = []; while (to - from2 > limit * limit) { limit = limit * limit; } for (var i2 = from2; i2 <= to; i2 += limit) { ranges.push({ from: i2, to: Math.min(to, i2 + limit - 1) }); } return ranges; } function getCollectionEntries2(type2, collection, sortObjectKeys, limit) { var from2 = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 0; var to = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : Infinity; var getEntriesBound = getEntries.bind(null, type2, collection, sortObjectKeys); if (!limit) { return getEntriesBound().entries; } var isSubset = to < Infinity; var length2 = Math.min(to - from2, getLength(type2, collection)); if (type2 !== "Iterable") { if (length2 <= limit || limit < 7) { return getEntriesBound(from2, to).entries; } } else { if (length2 <= limit && !isSubset) { return getEntriesBound(from2, to).entries; } } var limitedEntries = void 0; if (type2 === "Iterable") { var _getEntriesBound = getEntriesBound(from2, from2 + limit - 1), hasMore = _getEntriesBound.hasMore, entries = _getEntriesBound.entries; limitedEntries = hasMore ? [].concat(entries, getRanges(from2 + limit, from2 + 2 * limit - 1, limit)) : entries; } else { limitedEntries = isSubset ? getRanges(from2, to, limit) : [].concat(getEntriesBound(0, limit - 5).entries, getRanges(limit - 4, length2 - 5, limit), getEntriesBound(length2 - 4, length2 - 1).entries); } return limitedEntries; } })(getCollectionEntries); var ItemRange = {}; (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _classCallCheck2 = classCallCheck$1; var _classCallCheck3 = _interopRequireDefault2(_classCallCheck2); var _possibleConstructorReturn2 = possibleConstructorReturn$1; var _possibleConstructorReturn3 = _interopRequireDefault2(_possibleConstructorReturn2); var _inherits2 = inherits$1; var _inherits3 = _interopRequireDefault2(_inherits2); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); var _JSONArrow = JSONArrow; var _JSONArrow2 = _interopRequireDefault2(_JSONArrow); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var ItemRange2 = function(_React$Component) { (0, _inherits3["default"])(ItemRange3, _React$Component); function ItemRange3(props) { (0, _classCallCheck3["default"])(this, ItemRange3); var _this = (0, _possibleConstructorReturn3["default"])(this, _React$Component.call(this, props)); _this.state = { expanded: false }; _this.handleClick = _this.handleClick.bind(_this); return _this; } ItemRange3.prototype.render = function render() { var _props = this.props, styling = _props.styling, from2 = _props.from, to = _props.to, renderChildNodes = _props.renderChildNodes, nodeType = _props.nodeType; return this.state.expanded ? _react22["default"].createElement( "div", styling("itemRange", this.state.expanded), renderChildNodes(this.props, from2, to) ) : _react22["default"].createElement( "div", (0, _extends32["default"])({}, styling("itemRange", this.state.expanded), { onClick: this.handleClick }), _react22["default"].createElement(_JSONArrow2["default"], { nodeType, styling, expanded: false, onClick: this.handleClick, arrowStyle: "double" }), from2 + " ... " + to ); }; ItemRange3.prototype.handleClick = function handleClick2() { this.setState({ expanded: !this.state.expanded }); }; return ItemRange3; }(_react22["default"].Component); ItemRange2.propTypes = { styling: _propTypes22["default"].func.isRequired, from: _propTypes22["default"].number.isRequired, to: _propTypes22["default"].number.isRequired, renderChildNodes: _propTypes22["default"].func.isRequired, nodeType: _propTypes22["default"].string.isRequired }; exports2["default"] = ItemRange2; })(ItemRange); var hasRequiredJSONNestedNode; function requireJSONNestedNode() { if (hasRequiredJSONNestedNode) return JSONNestedNode; hasRequiredJSONNestedNode = 1; (function(exports2) { exports2.__esModule = true; var _keys3 = keys$1.exports; var _keys22 = _interopRequireDefault2(_keys3); var _classCallCheck2 = classCallCheck$1; var _classCallCheck3 = _interopRequireDefault2(_classCallCheck2); var _possibleConstructorReturn2 = possibleConstructorReturn$1; var _possibleConstructorReturn3 = _interopRequireDefault2(_possibleConstructorReturn2); var _inherits2 = inherits$1; var _inherits3 = _interopRequireDefault2(_inherits2); var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); var _JSONArrow = JSONArrow; var _JSONArrow2 = _interopRequireDefault2(_JSONArrow); var _getCollectionEntries = getCollectionEntries; var _getCollectionEntries2 = _interopRequireDefault2(_getCollectionEntries); var _JSONNode = requireJSONNode(); var _JSONNode2 = _interopRequireDefault2(_JSONNode); var _ItemRange = ItemRange; var _ItemRange2 = _interopRequireDefault2(_ItemRange); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function renderChildNodes(props, from2, to) { var nodeType = props.nodeType, data = props.data, collectionLimit = props.collectionLimit, circularCache = props.circularCache, keyPath = props.keyPath, postprocessValue2 = props.postprocessValue, sortObjectKeys = props.sortObjectKeys; var childNodes = []; (0, _getCollectionEntries2["default"])(nodeType, data, sortObjectKeys, collectionLimit, from2, to).forEach(function(entry) { if (entry.to) { childNodes.push(_react22["default"].createElement(_ItemRange2["default"], (0, _extends32["default"])({}, props, { key: "ItemRange--" + entry.from + "-" + entry.to, from: entry.from, to: entry.to, renderChildNodes }))); } else { var key2 = entry.key, value = entry.value; var isCircular = circularCache.indexOf(value) !== -1; var node2 = _react22["default"].createElement(_JSONNode2["default"], (0, _extends32["default"])({}, props, { postprocessValue: postprocessValue2, collectionLimit }, { key: "Node--" + key2, keyPath: [key2].concat(keyPath), value: postprocessValue2(value), circularCache: [].concat(circularCache, [value]), isCircular, hideRoot: false })); if (node2 !== false) { childNodes.push(node2); } } }); return childNodes; } function getStateFromProps(props) { var expanded = props.shouldExpandNode && !props.isCircular ? props.shouldExpandNode(props.keyPath, props.data, props.level) : false; return { expanded }; } var JSONNestedNode2 = function(_React$Component) { (0, _inherits3["default"])(JSONNestedNode3, _React$Component); function JSONNestedNode3(props) { (0, _classCallCheck3["default"])(this, JSONNestedNode3); var _this = (0, _possibleConstructorReturn3["default"])(this, _React$Component.call(this, props)); _this.handleClick = function() { if (_this.props.expandable) { _this.setState({ expanded: !_this.state.expanded }); } }; _this.state = getStateFromProps(props); return _this; } JSONNestedNode3.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { var nextState = getStateFromProps(nextProps); if (getStateFromProps(this.props).expanded !== nextState.expanded) { this.setState(nextState); } }; JSONNestedNode3.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) { var _this2 = this; return !!(0, _keys22["default"])(nextProps).find(function(key2) { return key2 !== "circularCache" && (key2 === "keyPath" ? nextProps[key2].join("/") !== _this2.props[key2].join("/") : nextProps[key2] !== _this2.props[key2]); }) || nextState.expanded !== this.state.expanded; }; JSONNestedNode3.prototype.render = function render() { var _props = this.props, getItemString2 = _props.getItemString, nodeTypeIndicator = _props.nodeTypeIndicator, nodeType = _props.nodeType, data = _props.data, hideRoot = _props.hideRoot, createItemString = _props.createItemString, styling = _props.styling, collectionLimit = _props.collectionLimit, keyPath = _props.keyPath, labelRenderer2 = _props.labelRenderer, expandable = _props.expandable; var expanded = this.state.expanded; var renderedChildren = expanded || hideRoot && this.props.level === 0 ? renderChildNodes((0, _extends32["default"])({}, this.props, { level: this.props.level + 1 })) : null; var itemType = _react22["default"].createElement( "span", styling("nestedNodeItemType", expanded), nodeTypeIndicator ); var renderedItemString = getItemString2(nodeType, data, itemType, createItemString(data, collectionLimit)); var stylingArgs = [keyPath, nodeType, expanded, expandable]; return hideRoot ? _react22["default"].createElement( "li", styling.apply(void 0, ["rootNode"].concat(stylingArgs)), _react22["default"].createElement( "ul", styling.apply(void 0, ["rootNodeChildren"].concat(stylingArgs)), renderedChildren ) ) : _react22["default"].createElement( "li", styling.apply(void 0, ["nestedNode"].concat(stylingArgs)), expandable && _react22["default"].createElement(_JSONArrow2["default"], { styling, nodeType, expanded, onClick: this.handleClick }), _react22["default"].createElement( "label", (0, _extends32["default"])({}, styling.apply(void 0, [["label", "nestedNodeLabel"]].concat(stylingArgs)), { onClick: this.handleClick }), labelRenderer2.apply(void 0, stylingArgs) ), _react22["default"].createElement( "span", (0, _extends32["default"])({}, styling.apply(void 0, ["nestedNodeItemString"].concat(stylingArgs)), { onClick: this.handleClick }), renderedItemString ), _react22["default"].createElement( "ul", styling.apply(void 0, ["nestedNodeChildren"].concat(stylingArgs)), renderedChildren ) ); }; return JSONNestedNode3; }(_react22["default"].Component); JSONNestedNode2.propTypes = { getItemString: _propTypes22["default"].func.isRequired, nodeTypeIndicator: _propTypes22["default"].any, nodeType: _propTypes22["default"].string.isRequired, data: _propTypes22["default"].any, hideRoot: _propTypes22["default"].bool.isRequired, createItemString: _propTypes22["default"].func.isRequired, styling: _propTypes22["default"].func.isRequired, collectionLimit: _propTypes22["default"].number, keyPath: _propTypes22["default"].arrayOf(_propTypes22["default"].oneOfType([_propTypes22["default"].string, _propTypes22["default"].number])).isRequired, labelRenderer: _propTypes22["default"].func.isRequired, shouldExpandNode: _propTypes22["default"].func, level: _propTypes22["default"].number.isRequired, sortObjectKeys: _propTypes22["default"].oneOfType([_propTypes22["default"].func, _propTypes22["default"].bool]), isCircular: _propTypes22["default"].bool, expandable: _propTypes22["default"].bool }; JSONNestedNode2.defaultProps = { data: [], circularCache: [], level: 0, expandable: true }; exports2["default"] = JSONNestedNode2; })(JSONNestedNode); return JSONNestedNode; } var hasRequiredJSONObjectNode; function requireJSONObjectNode() { if (hasRequiredJSONObjectNode) return JSONObjectNode; hasRequiredJSONObjectNode = 1; (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _objectWithoutProperties2 = objectWithoutProperties; var _objectWithoutProperties3 = _interopRequireDefault2(_objectWithoutProperties2); var _getOwnPropertyNames = getOwnPropertyNames$1.exports; var _getOwnPropertyNames2 = _interopRequireDefault2(_getOwnPropertyNames); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); var _JSONNestedNode = requireJSONNestedNode(); var _JSONNestedNode2 = _interopRequireDefault2(_JSONNestedNode); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function createItemString(data) { var len = (0, _getOwnPropertyNames2["default"])(data).length; return len + " " + (len !== 1 ? "keys" : "key"); } var JSONObjectNode2 = function JSONObjectNode3(_ref) { var data = _ref.data, props = (0, _objectWithoutProperties3["default"])(_ref, ["data"]); return _react22["default"].createElement(_JSONNestedNode2["default"], (0, _extends32["default"])({}, props, { data, nodeType: "Object", nodeTypeIndicator: props.nodeType === "Error" ? "Error()" : "{}", createItemString, expandable: (0, _getOwnPropertyNames2["default"])(data).length > 0 })); }; JSONObjectNode2.propTypes = { data: _propTypes22["default"].object, nodeType: _propTypes22["default"].string }; exports2["default"] = JSONObjectNode2; })(JSONObjectNode); return JSONObjectNode; } var JSONArrayNode = {}; var hasRequiredJSONArrayNode; function requireJSONArrayNode() { if (hasRequiredJSONArrayNode) return JSONArrayNode; hasRequiredJSONArrayNode = 1; (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _objectWithoutProperties2 = objectWithoutProperties; var _objectWithoutProperties3 = _interopRequireDefault2(_objectWithoutProperties2); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); var _JSONNestedNode = requireJSONNestedNode(); var _JSONNestedNode2 = _interopRequireDefault2(_JSONNestedNode); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function createItemString(data) { return data.length + " " + (data.length !== 1 ? "items" : "item"); } var JSONArrayNode2 = function JSONArrayNode3(_ref) { var data = _ref.data, props = (0, _objectWithoutProperties3["default"])(_ref, ["data"]); return _react22["default"].createElement(_JSONNestedNode2["default"], (0, _extends32["default"])({}, props, { data, nodeType: "Array", nodeTypeIndicator: "[]", createItemString, expandable: data.length > 0 })); }; JSONArrayNode2.propTypes = { data: _propTypes22["default"].array }; exports2["default"] = JSONArrayNode2; })(JSONArrayNode); return JSONArrayNode; } var JSONIterableNode = {}; var isSafeInteger$1 = { exports: {} }; var isObject$4 = _isObject; var floor = Math.floor; var _isInteger = function isInteger2(it2) { return !isObject$4(it2) && isFinite(it2) && floor(it2) === it2; }; var $export = _export; var isInteger = _isInteger; var abs = Math.abs; $export($export.S, "Number", { isSafeInteger: function isSafeInteger2(number) { return isInteger(number) && abs(number) <= 9007199254740991; } }); var isSafeInteger = _core.exports.Number.isSafeInteger; (function(module3) { module3.exports = { "default": isSafeInteger, __esModule: true }; })(isSafeInteger$1); var hasRequiredJSONIterableNode; function requireJSONIterableNode() { if (hasRequiredJSONIterableNode) return JSONIterableNode; hasRequiredJSONIterableNode = 1; (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _objectWithoutProperties2 = objectWithoutProperties; var _objectWithoutProperties3 = _interopRequireDefault2(_objectWithoutProperties2); var _getIterator22 = getIterator$1.exports; var _getIterator32 = _interopRequireDefault2(_getIterator22); var _isSafeInteger = isSafeInteger$1.exports; var _isSafeInteger2 = _interopRequireDefault2(_isSafeInteger); exports2["default"] = JSONIterableNode2; var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _JSONNestedNode = requireJSONNestedNode(); var _JSONNestedNode2 = _interopRequireDefault2(_JSONNestedNode); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function createItemString(data, limit) { var count = 0; var hasMore = false; if ((0, _isSafeInteger2["default"])(data.size)) { count = data.size; } else { for (var _iterator3 = data, _isArray2 = Array.isArray(_iterator3), _i = 0, _iterator3 = _isArray2 ? _iterator3 : (0, _getIterator32["default"])(_iterator3); ; ) { if (_isArray2) { if (_i >= _iterator3.length) break; _iterator3[_i++]; } else { _i = _iterator3.next(); if (_i.done) break; _i.value; } if (limit && count + 1 > limit) { hasMore = true; break; } count += 1; } } return (hasMore ? ">" : "") + count + " " + (count !== 1 ? "entries" : "entry"); } function JSONIterableNode2(_ref2) { var props = (0, _objectWithoutProperties3["default"])(_ref2, []); return _react22["default"].createElement(_JSONNestedNode2["default"], (0, _extends32["default"])({}, props, { nodeType: "Iterable", nodeTypeIndicator: "()", createItemString })); } })(JSONIterableNode); return JSONIterableNode; } var JSONValueNode = {}; (function(exports2) { exports2.__esModule = true; var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var JSONValueNode2 = function JSONValueNode3(_ref) { var nodeType = _ref.nodeType, styling = _ref.styling, labelRenderer2 = _ref.labelRenderer, keyPath = _ref.keyPath, valueRenderer2 = _ref.valueRenderer, value = _ref.value, valueGetter = _ref.valueGetter; return _react22["default"].createElement( "li", styling("value", nodeType, keyPath), _react22["default"].createElement( "label", styling(["label", "valueLabel"], nodeType, keyPath), labelRenderer2(keyPath, nodeType, false, false) ), _react22["default"].createElement( "span", styling("valueText", nodeType, keyPath), valueRenderer2.apply(void 0, [valueGetter(value), value].concat(keyPath)) ) ); }; JSONValueNode2.propTypes = { nodeType: _propTypes22["default"].string.isRequired, styling: _propTypes22["default"].func.isRequired, labelRenderer: _propTypes22["default"].func.isRequired, keyPath: _propTypes22["default"].arrayOf(_propTypes22["default"].oneOfType([_propTypes22["default"].string, _propTypes22["default"].number])).isRequired, valueRenderer: _propTypes22["default"].func.isRequired, value: _propTypes22["default"].any, valueGetter: _propTypes22["default"].func }; JSONValueNode2.defaultProps = { valueGetter: function valueGetter(value) { return value; } }; exports2["default"] = JSONValueNode2; })(JSONValueNode); var hasRequiredJSONNode; function requireJSONNode() { if (hasRequiredJSONNode) return JSONNode; hasRequiredJSONNode = 1; (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _objectWithoutProperties2 = objectWithoutProperties; var _objectWithoutProperties3 = _interopRequireDefault2(_objectWithoutProperties2); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); var _objType = objType; var _objType2 = _interopRequireDefault2(_objType); var _JSONObjectNode = requireJSONObjectNode(); var _JSONObjectNode2 = _interopRequireDefault2(_JSONObjectNode); var _JSONArrayNode = requireJSONArrayNode(); var _JSONArrayNode2 = _interopRequireDefault2(_JSONArrayNode); var _JSONIterableNode = requireJSONIterableNode(); var _JSONIterableNode2 = _interopRequireDefault2(_JSONIterableNode); var _JSONValueNode = JSONValueNode; var _JSONValueNode2 = _interopRequireDefault2(_JSONValueNode); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var JSONNode2 = function JSONNode3(_ref) { var getItemString2 = _ref.getItemString, keyPath = _ref.keyPath, labelRenderer2 = _ref.labelRenderer, styling = _ref.styling, value = _ref.value, valueRenderer2 = _ref.valueRenderer, isCustomNode = _ref.isCustomNode, rest = (0, _objectWithoutProperties3["default"])(_ref, ["getItemString", "keyPath", "labelRenderer", "styling", "value", "valueRenderer", "isCustomNode"]); var nodeType = isCustomNode(value) ? "Custom" : (0, _objType2["default"])(value); var simpleNodeProps = { getItemString: getItemString2, key: keyPath[0], keyPath, labelRenderer: labelRenderer2, nodeType, styling, value, valueRenderer: valueRenderer2 }; var nestedNodeProps = (0, _extends32["default"])({}, rest, simpleNodeProps, { data: value, isCustomNode }); switch (nodeType) { case "Object": case "Error": case "WeakMap": case "WeakSet": return _react22["default"].createElement(_JSONObjectNode2["default"], nestedNodeProps); case "Array": return _react22["default"].createElement(_JSONArrayNode2["default"], nestedNodeProps); case "Iterable": case "Map": case "Set": return _react22["default"].createElement(_JSONIterableNode2["default"], nestedNodeProps); case "String": return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) { return '"' + raw + '"'; } })); case "Number": return _react22["default"].createElement(_JSONValueNode2["default"], simpleNodeProps); case "Boolean": return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) { return raw ? "true" : "false"; } })); case "Date": return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) { return raw.toISOString(); } })); case "Null": return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter() { return "null"; } })); case "Undefined": return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter() { return "undefined"; } })); case "Function": case "Symbol": return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) { return raw.toString(); } })); case "Custom": return _react22["default"].createElement(_JSONValueNode2["default"], simpleNodeProps); default: return _react22["default"].createElement(_JSONValueNode2["default"], (0, _extends32["default"])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) { return "<" + nodeType + ">"; } })); } }; JSONNode2.propTypes = { getItemString: _propTypes22["default"].func.isRequired, keyPath: _propTypes22["default"].arrayOf(_propTypes22["default"].oneOfType([_propTypes22["default"].string, _propTypes22["default"].number])).isRequired, labelRenderer: _propTypes22["default"].func.isRequired, styling: _propTypes22["default"].func.isRequired, value: _propTypes22["default"].any, valueRenderer: _propTypes22["default"].func.isRequired, isCustomNode: _propTypes22["default"].func.isRequired }; exports2["default"] = JSONNode2; })(JSONNode); return JSONNode; } var createStylingFromTheme = {}; var lib$2 = {}; var slicedToArray$1 = {}; var isIterable$1 = { exports: {} }; var isIterable = { exports: {} }; var classof = _classof; var ITERATOR = _wks.exports("iterator"); var Iterators = _iterators; var core_isIterable = _core.exports.isIterable = function(it2) { var O2 = Object(it2); return O2[ITERATOR] !== void 0 || "@@iterator" in O2 || Iterators.hasOwnProperty(classof(O2)); }; (function(module3) { module3.exports = core_isIterable; })(isIterable); (function(module3) { module3.exports = { "default": isIterable.exports, __esModule: true }; })(isIterable$1); slicedToArray$1.__esModule = true; var _isIterable2 = isIterable$1.exports; var _isIterable3 = _interopRequireDefault$1(_isIterable2); var _getIterator2 = getIterator$1.exports; var _getIterator3 = _interopRequireDefault$1(_getIterator2); function _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { default: obj }; } slicedToArray$1.default = function() { function sliceIterator(arr, i2) { var _arr = []; var _n = true; var _d = false; var _e = void 0; try { for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i2 && _arr.length === i2) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function(arr, i2) { if (Array.isArray(arr)) { return arr; } else if ((0, _isIterable3.default)(Object(arr))) { return sliceIterator(arr, i2); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var FUNC_ERROR_TEXT$2 = "Expected a function"; var PLACEHOLDER = "__lodash_placeholder__"; var BIND_FLAG = 1, BIND_KEY_FLAG = 2, CURRY_BOUND_FLAG = 4, CURRY_FLAG = 8, CURRY_RIGHT_FLAG = 16, PARTIAL_FLAG = 32, PARTIAL_RIGHT_FLAG = 64, ARY_FLAG = 128, REARG_FLAG = 256, FLIP_FLAG = 512; var INFINITY$1 = 1 / 0, MAX_SAFE_INTEGER$3 = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN$1 = 0 / 0; var wrapFlags = [ ["ary", ARY_FLAG], ["bind", BIND_FLAG], ["bindKey", BIND_KEY_FLAG], ["curry", CURRY_FLAG], ["curryRight", CURRY_RIGHT_FLAG], ["flip", FLIP_FLAG], ["partial", PARTIAL_FLAG], ["partialRight", PARTIAL_RIGHT_FLAG], ["rearg", REARG_FLAG] ]; var funcTag$1 = "[object Function]", genTag$1 = "[object GeneratorFunction]", symbolTag$1 = "[object Symbol]"; var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reTrim$1 = /^\s+|\s+$/g; var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; var reIsBadHex$1 = /^[-+]0x[0-9a-f]+$/i; var reIsBinary$1 = /^0b[01]+$/i; var reIsHostCtor = /^\[object .+?Constructor\]$/; var reIsOctal$1 = /^0o[0-7]+$/i; var reIsUint = /^(?:0|[1-9]\d*)$/; var freeParseInt$1 = parseInt; var freeGlobal$2 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var freeSelf$2 = typeof self == "object" && self && self.Object === Object && self; var root$2 = freeGlobal$2 || freeSelf$2 || Function("return this")(); function apply$1(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } function arrayEach(array, iteratee) { var index2 = -1, length2 = array ? array.length : 0; while (++index2 < length2) { if (iteratee(array[index2], index2, array) === false) { break; } } return array; } function arrayIncludes(array, value) { var length2 = array ? array.length : 0; return !!length2 && baseIndexOf(array, value, 0) > -1; } function baseFindIndex(array, predicate, fromIndex, fromRight) { var length2 = array.length, index2 = fromIndex + (fromRight ? 1 : -1); while (fromRight ? index2-- : ++index2 < length2) { if (predicate(array[index2], index2, array)) { return index2; } } return -1; } function baseIndexOf(array, value, fromIndex) { if (value !== value) { return baseFindIndex(array, baseIsNaN, fromIndex); } var index2 = fromIndex - 1, length2 = array.length; while (++index2 < length2) { if (array[index2] === value) { return index2; } } return -1; } function baseIsNaN(value) { return value !== value; } function countHolders(array, placeholder) { var length2 = array.length, result = 0; while (length2--) { if (array[length2] === placeholder) { result++; } } return result; } function getValue(object, key2) { return object == null ? void 0 : object[key2]; } function isHostObject(value) { var result = false; if (value != null && typeof value.toString != "function") { try { result = !!(value + ""); } catch (e2) { } } return result; } function replaceHolders(array, placeholder) { var index2 = -1, length2 = array.length, resIndex = 0, result = []; while (++index2 < length2) { var value = array[index2]; if (value === placeholder || value === PLACEHOLDER) { array[index2] = PLACEHOLDER; result[resIndex++] = index2; } } return result; } var funcProto = Function.prototype, objectProto$2 = Object.prototype; var coreJsData = root$2["__core-js_shared__"]; var maskSrcKey = function() { var uid2 = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); return uid2 ? "Symbol(src)_1." + uid2 : ""; }(); var funcToString = funcProto.toString; var hasOwnProperty$2 = objectProto$2.hasOwnProperty; var objectToString$2 = objectProto$2.toString; var reIsNative = RegExp( "^" + funcToString.call(hasOwnProperty$2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); var objectCreate = Object.create; var nativeMax$2 = Math.max, nativeMin$1 = Math.min; var defineProperty = function() { var func = getNative(Object, "defineProperty"), name = getNative.name; return name && name.length > 2 ? func : void 0; }(); function baseCreate(proto2) { return isObject$3(proto2) ? objectCreate(proto2) : {}; } function baseIsNative(value) { if (!isObject$3(value) || isMasked(value)) { return false; } var pattern = isFunction$1(value) || isHostObject(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } function composeArgs(args, partials, holders, isCurried) { var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax$2(argsLength - holdersLength, 0), result = Array(leftLength + rangeLength), isUncurried = !isCurried; while (++leftIndex < leftLength) { result[leftIndex] = partials[leftIndex]; } while (++argsIndex < holdersLength) { if (isUncurried || argsIndex < argsLength) { result[holders[argsIndex]] = args[argsIndex]; } } while (rangeLength--) { result[leftIndex++] = args[argsIndex++]; } return result; } function composeArgsRight(args, partials, holders, isCurried) { var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax$2(argsLength - holdersLength, 0), result = Array(rangeLength + rightLength), isUncurried = !isCurried; while (++argsIndex < rangeLength) { result[argsIndex] = args[argsIndex]; } var offset = argsIndex; while (++rightIndex < rightLength) { result[offset + rightIndex] = partials[rightIndex]; } while (++holdersIndex < holdersLength) { if (isUncurried || argsIndex < argsLength) { result[offset + holders[holdersIndex]] = args[argsIndex++]; } } return result; } function copyArray(source, array) { var index2 = -1, length2 = source.length; array || (array = Array(length2)); while (++index2 < length2) { array[index2] = source[index2]; } return array; } function createBind(func, bitmask, thisArg) { var isBind = bitmask & BIND_FLAG, Ctor = createCtor(func); function wrapper() { var fn = this && this !== root$2 && this instanceof wrapper ? Ctor : func; return fn.apply(isBind ? thisArg : this, arguments); } return wrapper; } function createCtor(Ctor) { return function() { var args = arguments; switch (args.length) { case 0: return new Ctor(); case 1: return new Ctor(args[0]); case 2: return new Ctor(args[0], args[1]); case 3: return new Ctor(args[0], args[1], args[2]); case 4: return new Ctor(args[0], args[1], args[2], args[3]); case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); } var thisBinding = baseCreate(Ctor.prototype), result = Ctor.apply(thisBinding, args); return isObject$3(result) ? result : thisBinding; }; } function createCurry(func, bitmask, arity) { var Ctor = createCtor(func); function wrapper() { var length2 = arguments.length, args = Array(length2), index2 = length2, placeholder = getHolder(wrapper); while (index2--) { args[index2] = arguments[index2]; } var holders = length2 < 3 && args[0] !== placeholder && args[length2 - 1] !== placeholder ? [] : replaceHolders(args, placeholder); length2 -= holders.length; if (length2 < arity) { return createRecurry( func, bitmask, createHybrid, wrapper.placeholder, void 0, args, holders, void 0, void 0, arity - length2 ); } var fn = this && this !== root$2 && this instanceof wrapper ? Ctor : func; return apply$1(fn, this, args); } return wrapper; } function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { var isAry = bitmask & ARY_FLAG, isBind = bitmask & BIND_FLAG, isBindKey = bitmask & BIND_KEY_FLAG, isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), isFlip = bitmask & FLIP_FLAG, Ctor = isBindKey ? void 0 : createCtor(func); function wrapper() { var length2 = arguments.length, args = Array(length2), index2 = length2; while (index2--) { args[index2] = arguments[index2]; } if (isCurried) { var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder); } if (partials) { args = composeArgs(args, partials, holders, isCurried); } if (partialsRight) { args = composeArgsRight(args, partialsRight, holdersRight, isCurried); } length2 -= holdersCount; if (isCurried && length2 < arity) { var newHolders = replaceHolders(args, placeholder); return createRecurry( func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length2 ); } var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; length2 = args.length; if (argPos) { args = reorder(args, argPos); } else if (isFlip && length2 > 1) { args.reverse(); } if (isAry && ary < length2) { args.length = ary; } if (this && this !== root$2 && this instanceof wrapper) { fn = Ctor || createCtor(fn); } return fn.apply(thisBinding, args); } return wrapper; } function createPartial(func, bitmask, thisArg, partials) { var isBind = bitmask & BIND_FLAG, Ctor = createCtor(func); function wrapper() { var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array(leftLength + argsLength), fn = this && this !== root$2 && this instanceof wrapper ? Ctor : func; while (++leftIndex < leftLength) { args[leftIndex] = partials[leftIndex]; } while (argsLength--) { args[leftIndex++] = arguments[++argsIndex]; } return apply$1(fn, isBind ? thisArg : this, args); } return wrapper; } function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { var isCurry = bitmask & CURRY_FLAG, newHolders = isCurry ? holders : void 0, newHoldersRight = isCurry ? void 0 : holders, newPartials = isCurry ? partials : void 0, newPartialsRight = isCurry ? void 0 : partials; bitmask |= isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG; bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); if (!(bitmask & CURRY_BOUND_FLAG)) { bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); } var result = wrapFunc(func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity); result.placeholder = placeholder; return setWrapToString(result, func, bitmask); } function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { var isBindKey = bitmask & BIND_KEY_FLAG; if (!isBindKey && typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT$2); } var length2 = partials ? partials.length : 0; if (!length2) { bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); partials = holders = void 0; } ary = ary === void 0 ? ary : nativeMax$2(toInteger(ary), 0); arity = arity === void 0 ? arity : toInteger(arity); length2 -= holders ? holders.length : 0; if (bitmask & PARTIAL_RIGHT_FLAG) { var partialsRight = partials, holdersRight = holders; partials = holders = void 0; } var newData = [ func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity ]; func = newData[0]; bitmask = newData[1]; thisArg = newData[2]; partials = newData[3]; holders = newData[4]; arity = newData[9] = newData[9] == null ? isBindKey ? 0 : func.length : nativeMax$2(newData[9] - length2, 0); if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); } if (!bitmask || bitmask == BIND_FLAG) { var result = createBind(func, bitmask, thisArg); } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { result = createCurry(func, bitmask, arity); } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { result = createPartial(func, bitmask, thisArg, partials); } else { result = createHybrid.apply(void 0, newData); } return setWrapToString(result, func, bitmask); } function getHolder(func) { var object = func; return object.placeholder; } function getNative(object, key2) { var value = getValue(object, key2); return baseIsNative(value) ? value : void 0; } function getWrapDetails(source) { var match2 = source.match(reWrapDetails); return match2 ? match2[1].split(reSplitDetails) : []; } function insertWrapDetails(source, details) { var length2 = details.length, lastIndex = length2 - 1; details[lastIndex] = (length2 > 1 ? "& " : "") + details[lastIndex]; details = details.join(length2 > 2 ? ", " : " "); return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n"); } function isIndex(value, length2) { length2 = length2 == null ? MAX_SAFE_INTEGER$3 : length2; return !!length2 && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2); } function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } function reorder(array, indexes) { var arrLength = array.length, length2 = nativeMin$1(indexes.length, arrLength), oldArray = copyArray(array); while (length2--) { var index2 = indexes[length2]; array[length2] = isIndex(index2, arrLength) ? oldArray[index2] : void 0; } return array; } var setWrapToString = !defineProperty ? identity : function(wrapper, reference, bitmask) { var source = reference + ""; return defineProperty(wrapper, "toString", { "configurable": true, "enumerable": false, "value": constant(insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))) }); }; function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e2) { } try { return func + ""; } catch (e2) { } } return ""; } function updateWrapDetails(details, bitmask) { arrayEach(wrapFlags, function(pair) { var value = "_." + pair[0]; if (bitmask & pair[1] && !arrayIncludes(details, value)) { details.push(value); } }); return details.sort(); } function curry(func, arity, guard) { arity = guard ? void 0 : arity; var result = createWrap(func, CURRY_FLAG, void 0, void 0, void 0, void 0, void 0, arity); result.placeholder = curry.placeholder; return result; } function isFunction$1(value) { var tag = isObject$3(value) ? objectToString$2.call(value) : ""; return tag == funcTag$1 || tag == genTag$1; } function isObject$3(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } function isObjectLike$3(value) { return !!value && typeof value == "object"; } function isSymbol$1(value) { return typeof value == "symbol" || isObjectLike$3(value) && objectToString$2.call(value) == symbolTag$1; } function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber$1(value); if (value === INFINITY$1 || value === -INFINITY$1) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } return value === value ? value : 0; } function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } function toNumber$1(value) { if (typeof value == "number") { return value; } if (isSymbol$1(value)) { return NAN$1; } if (isObject$3(value)) { var other = typeof value.valueOf == "function" ? value.valueOf() : value; value = isObject$3(other) ? other + "" : other; } if (typeof value != "string") { return value === 0 ? value : +value; } value = value.replace(reTrim$1, ""); var isBinary2 = reIsBinary$1.test(value); return isBinary2 || reIsOctal$1.test(value) ? freeParseInt$1(value.slice(2), isBinary2 ? 2 : 8) : reIsBadHex$1.test(value) ? NAN$1 : +value; } function constant(value) { return function() { return value; }; } function identity(value) { return value; } curry.placeholder = {}; var lodash_curry = curry; const threezerotwofour = { scheme: "threezerotwofour", author: "jan t. sott (http://github.com/idleberg)", base00: "#090300", base01: "#3a3432", base02: "#4a4543", base03: "#5c5855", base04: "#807d7c", base05: "#a5a2a2", base06: "#d6d5d4", base07: "#f7f7f7", base08: "#db2d20", base09: "#e8bbd0", base0A: "#fded02", base0B: "#01a252", base0C: "#b5e4f4", base0D: "#01a0e4", base0E: "#a16a94", base0F: "#cdab53" }; const apathy = { scheme: "apathy", author: "jannik siebert (https://github.com/janniks)", base00: "#031A16", base01: "#0B342D", base02: "#184E45", base03: "#2B685E", base04: "#5F9C92", base05: "#81B5AC", base06: "#A7CEC8", base07: "#D2E7E4", base08: "#3E9688", base09: "#3E7996", base0A: "#3E4C96", base0B: "#883E96", base0C: "#963E4C", base0D: "#96883E", base0E: "#4C963E", base0F: "#3E965B" }; const ashes = { scheme: "ashes", author: "jannik siebert (https://github.com/janniks)", base00: "#1C2023", base01: "#393F45", base02: "#565E65", base03: "#747C84", base04: "#ADB3BA", base05: "#C7CCD1", base06: "#DFE2E5", base07: "#F3F4F5", base08: "#C7AE95", base09: "#C7C795", base0A: "#AEC795", base0B: "#95C7AE", base0C: "#95AEC7", base0D: "#AE95C7", base0E: "#C795AE", base0F: "#C79595" }; const atelierDune = { scheme: "atelier dune", author: "bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)", base00: "#20201d", base01: "#292824", base02: "#6e6b5e", base03: "#7d7a68", base04: "#999580", base05: "#a6a28c", base06: "#e8e4cf", base07: "#fefbec", base08: "#d73737", base09: "#b65611", base0A: "#cfb017", base0B: "#60ac39", base0C: "#1fad83", base0D: "#6684e1", base0E: "#b854d4", base0F: "#d43552" }; const atelierForest = { scheme: "atelier forest", author: "bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest)", base00: "#1b1918", base01: "#2c2421", base02: "#68615e", base03: "#766e6b", base04: "#9c9491", base05: "#a8a19f", base06: "#e6e2e0", base07: "#f1efee", base08: "#f22c40", base09: "#df5320", base0A: "#d5911a", base0B: "#5ab738", base0C: "#00ad9c", base0D: "#407ee7", base0E: "#6666ea", base0F: "#c33ff3" }; const atelierHeath = { scheme: "atelier heath", author: "bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath)", base00: "#1b181b", base01: "#292329", base02: "#695d69", base03: "#776977", base04: "#9e8f9e", base05: "#ab9bab", base06: "#d8cad8", base07: "#f7f3f7", base08: "#ca402b", base09: "#a65926", base0A: "#bb8a35", base0B: "#379a37", base0C: "#159393", base0D: "#516aec", base0E: "#7b59c0", base0F: "#cc33cc" }; const atelierLakeside = { scheme: "atelier lakeside", author: "bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/)", base00: "#161b1d", base01: "#1f292e", base02: "#516d7b", base03: "#5a7b8c", base04: "#7195a8", base05: "#7ea2b4", base06: "#c1e4f6", base07: "#ebf8ff", base08: "#d22d72", base09: "#935c25", base0A: "#8a8a0f", base0B: "#568c3b", base0C: "#2d8f6f", base0D: "#257fad", base0E: "#5d5db1", base0F: "#b72dd2" }; const atelierSeaside = { scheme: "atelier seaside", author: "bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/)", base00: "#131513", base01: "#242924", base02: "#5e6e5e", base03: "#687d68", base04: "#809980", base05: "#8ca68c", base06: "#cfe8cf", base07: "#f0fff0", base08: "#e6193c", base09: "#87711d", base0A: "#c3c322", base0B: "#29a329", base0C: "#1999b3", base0D: "#3d62f5", base0E: "#ad2bee", base0F: "#e619c3" }; const bespin = { scheme: "bespin", author: "jan t. sott", base00: "#28211c", base01: "#36312e", base02: "#5e5d5c", base03: "#666666", base04: "#797977", base05: "#8a8986", base06: "#9d9b97", base07: "#baae9e", base08: "#cf6a4c", base09: "#cf7d34", base0A: "#f9ee98", base0B: "#54be0d", base0C: "#afc4db", base0D: "#5ea6ea", base0E: "#9b859d", base0F: "#937121" }; const brewer = { scheme: "brewer", author: "timoth\xE9e poisot (http://github.com/tpoisot)", base00: "#0c0d0e", base01: "#2e2f30", base02: "#515253", base03: "#737475", base04: "#959697", base05: "#b7b8b9", base06: "#dadbdc", base07: "#fcfdfe", base08: "#e31a1c", base09: "#e6550d", base0A: "#dca060", base0B: "#31a354", base0C: "#80b1d3", base0D: "#3182bd", base0E: "#756bb1", base0F: "#b15928" }; const bright = { scheme: "bright", author: "chris kempson (http://chriskempson.com)", base00: "#000000", base01: "#303030", base02: "#505050", base03: "#b0b0b0", base04: "#d0d0d0", base05: "#e0e0e0", base06: "#f5f5f5", base07: "#ffffff", base08: "#fb0120", base09: "#fc6d24", base0A: "#fda331", base0B: "#a1c659", base0C: "#76c7b7", base0D: "#6fb3d2", base0E: "#d381c3", base0F: "#be643c" }; const chalk$2 = { scheme: "chalk", author: "chris kempson (http://chriskempson.com)", base00: "#151515", base01: "#202020", base02: "#303030", base03: "#505050", base04: "#b0b0b0", base05: "#d0d0d0", base06: "#e0e0e0", base07: "#f5f5f5", base08: "#fb9fb1", base09: "#eda987", base0A: "#ddb26f", base0B: "#acc267", base0C: "#12cfc0", base0D: "#6fc2ef", base0E: "#e1a3ee", base0F: "#deaf8f" }; const codeschool = { scheme: "codeschool", author: "brettof86", base00: "#232c31", base01: "#1c3657", base02: "#2a343a", base03: "#3f4944", base04: "#84898c", base05: "#9ea7a6", base06: "#a7cfa3", base07: "#b5d8f6", base08: "#2a5491", base09: "#43820d", base0A: "#a03b1e", base0B: "#237986", base0C: "#b02f30", base0D: "#484d79", base0E: "#c59820", base0F: "#c98344" }; const colors$1 = { scheme: "colors", author: "mrmrs (http://clrs.cc)", base00: "#111111", base01: "#333333", base02: "#555555", base03: "#777777", base04: "#999999", base05: "#bbbbbb", base06: "#dddddd", base07: "#ffffff", base08: "#ff4136", base09: "#ff851b", base0A: "#ffdc00", base0B: "#2ecc40", base0C: "#7fdbff", base0D: "#0074d9", base0E: "#b10dc9", base0F: "#85144b" }; const _default = { scheme: "default", author: "chris kempson (http://chriskempson.com)", base00: "#181818", base01: "#282828", base02: "#383838", base03: "#585858", base04: "#b8b8b8", base05: "#d8d8d8", base06: "#e8e8e8", base07: "#f8f8f8", base08: "#ab4642", base09: "#dc9656", base0A: "#f7ca88", base0B: "#a1b56c", base0C: "#86c1b9", base0D: "#7cafc2", base0E: "#ba8baf", base0F: "#a16946" }; const eighties = { scheme: "eighties", author: "chris kempson (http://chriskempson.com)", base00: "#2d2d2d", base01: "#393939", base02: "#515151", base03: "#747369", base04: "#a09f93", base05: "#d3d0c8", base06: "#e8e6df", base07: "#f2f0ec", base08: "#f2777a", base09: "#f99157", base0A: "#ffcc66", base0B: "#99cc99", base0C: "#66cccc", base0D: "#6699cc", base0E: "#cc99cc", base0F: "#d27b53" }; const embers = { scheme: "embers", author: "jannik siebert (https://github.com/janniks)", base00: "#16130F", base01: "#2C2620", base02: "#433B32", base03: "#5A5047", base04: "#8A8075", base05: "#A39A90", base06: "#BEB6AE", base07: "#DBD6D1", base08: "#826D57", base09: "#828257", base0A: "#6D8257", base0B: "#57826D", base0C: "#576D82", base0D: "#6D5782", base0E: "#82576D", base0F: "#825757" }; const flat = { scheme: "flat", author: "chris kempson (http://chriskempson.com)", base00: "#2C3E50", base01: "#34495E", base02: "#7F8C8D", base03: "#95A5A6", base04: "#BDC3C7", base05: "#e0e0e0", base06: "#f5f5f5", base07: "#ECF0F1", base08: "#E74C3C", base09: "#E67E22", base0A: "#F1C40F", base0B: "#2ECC71", base0C: "#1ABC9C", base0D: "#3498DB", base0E: "#9B59B6", base0F: "#be643c" }; const google = { scheme: "google", author: "seth wright (http://sethawright.com)", base00: "#1d1f21", base01: "#282a2e", base02: "#373b41", base03: "#969896", base04: "#b4b7b4", base05: "#c5c8c6", base06: "#e0e0e0", base07: "#ffffff", base08: "#CC342B", base09: "#F96A38", base0A: "#FBA922", base0B: "#198844", base0C: "#3971ED", base0D: "#3971ED", base0E: "#A36AC7", base0F: "#3971ED" }; const grayscale = { scheme: "grayscale", author: "alexandre gavioli (https://github.com/alexx2/)", base00: "#101010", base01: "#252525", base02: "#464646", base03: "#525252", base04: "#ababab", base05: "#b9b9b9", base06: "#e3e3e3", base07: "#f7f7f7", base08: "#7c7c7c", base09: "#999999", base0A: "#a0a0a0", base0B: "#8e8e8e", base0C: "#868686", base0D: "#686868", base0E: "#747474", base0F: "#5e5e5e" }; const greenscreen = { scheme: "green screen", author: "chris kempson (http://chriskempson.com)", base00: "#001100", base01: "#003300", base02: "#005500", base03: "#007700", base04: "#009900", base05: "#00bb00", base06: "#00dd00", base07: "#00ff00", base08: "#007700", base09: "#009900", base0A: "#007700", base0B: "#00bb00", base0C: "#005500", base0D: "#009900", base0E: "#00bb00", base0F: "#005500" }; const harmonic = { scheme: "harmonic16", author: "jannik siebert (https://github.com/janniks)", base00: "#0b1c2c", base01: "#223b54", base02: "#405c79", base03: "#627e99", base04: "#aabcce", base05: "#cbd6e2", base06: "#e5ebf1", base07: "#f7f9fb", base08: "#bf8b56", base09: "#bfbf56", base0A: "#8bbf56", base0B: "#56bf8b", base0C: "#568bbf", base0D: "#8b56bf", base0E: "#bf568b", base0F: "#bf5656" }; const hopscotch = { scheme: "hopscotch", author: "jan t. sott", base00: "#322931", base01: "#433b42", base02: "#5c545b", base03: "#797379", base04: "#989498", base05: "#b9b5b8", base06: "#d5d3d5", base07: "#ffffff", base08: "#dd464c", base09: "#fd8b19", base0A: "#fdcc59", base0B: "#8fc13e", base0C: "#149b93", base0D: "#1290bf", base0E: "#c85e7c", base0F: "#b33508" }; const isotope = { scheme: "isotope", author: "jan t. sott", base00: "#000000", base01: "#404040", base02: "#606060", base03: "#808080", base04: "#c0c0c0", base05: "#d0d0d0", base06: "#e0e0e0", base07: "#ffffff", base08: "#ff0000", base09: "#ff9900", base0A: "#ff0099", base0B: "#33ff00", base0C: "#00ffff", base0D: "#0066ff", base0E: "#cc00ff", base0F: "#3300ff" }; const marrakesh = { scheme: "marrakesh", author: "alexandre gavioli (http://github.com/alexx2/)", base00: "#201602", base01: "#302e00", base02: "#5f5b17", base03: "#6c6823", base04: "#86813b", base05: "#948e48", base06: "#ccc37a", base07: "#faf0a5", base08: "#c35359", base09: "#b36144", base0A: "#a88339", base0B: "#18974e", base0C: "#75a738", base0D: "#477ca1", base0E: "#8868b3", base0F: "#b3588e" }; const mocha = { scheme: "mocha", author: "chris kempson (http://chriskempson.com)", base00: "#3B3228", base01: "#534636", base02: "#645240", base03: "#7e705a", base04: "#b8afad", base05: "#d0c8c6", base06: "#e9e1dd", base07: "#f5eeeb", base08: "#cb6077", base09: "#d28b71", base0A: "#f4bc87", base0B: "#beb55b", base0C: "#7bbda4", base0D: "#8ab3b5", base0E: "#a89bb9", base0F: "#bb9584" }; const monokai = { scheme: "monokai", author: "wimer hazenberg (http://www.monokai.nl)", base00: "#272822", base01: "#383830", base02: "#49483e", base03: "#75715e", base04: "#a59f85", base05: "#f8f8f2", base06: "#f5f4f1", base07: "#f9f8f5", base08: "#f92672", base09: "#fd971f", base0A: "#f4bf75", base0B: "#a6e22e", base0C: "#a1efe4", base0D: "#66d9ef", base0E: "#ae81ff", base0F: "#cc6633" }; const ocean = { scheme: "ocean", author: "chris kempson (http://chriskempson.com)", base00: "#2b303b", base01: "#343d46", base02: "#4f5b66", base03: "#65737e", base04: "#a7adba", base05: "#c0c5ce", base06: "#dfe1e8", base07: "#eff1f5", base08: "#bf616a", base09: "#d08770", base0A: "#ebcb8b", base0B: "#a3be8c", base0C: "#96b5b4", base0D: "#8fa1b3", base0E: "#b48ead", base0F: "#ab7967" }; const paraiso = { scheme: "paraiso", author: "jan t. sott", base00: "#2f1e2e", base01: "#41323f", base02: "#4f424c", base03: "#776e71", base04: "#8d8687", base05: "#a39e9b", base06: "#b9b6b0", base07: "#e7e9db", base08: "#ef6155", base09: "#f99b15", base0A: "#fec418", base0B: "#48b685", base0C: "#5bc4bf", base0D: "#06b6ef", base0E: "#815ba4", base0F: "#e96ba8" }; const pop = { scheme: "pop", author: "chris kempson (http://chriskempson.com)", base00: "#000000", base01: "#202020", base02: "#303030", base03: "#505050", base04: "#b0b0b0", base05: "#d0d0d0", base06: "#e0e0e0", base07: "#ffffff", base08: "#eb008a", base09: "#f29333", base0A: "#f8ca12", base0B: "#37b349", base0C: "#00aabb", base0D: "#0e5a94", base0E: "#b31e8d", base0F: "#7a2d00" }; const railscasts = { scheme: "railscasts", author: "ryan bates (http://railscasts.com)", base00: "#2b2b2b", base01: "#272935", base02: "#3a4055", base03: "#5a647e", base04: "#d4cfc9", base05: "#e6e1dc", base06: "#f4f1ed", base07: "#f9f7f3", base08: "#da4939", base09: "#cc7833", base0A: "#ffc66d", base0B: "#a5c261", base0C: "#519f50", base0D: "#6d9cbe", base0E: "#b6b3eb", base0F: "#bc9458" }; const shapeshifter = { scheme: "shapeshifter", author: "tyler benziger (http://tybenz.com)", base00: "#000000", base01: "#040404", base02: "#102015", base03: "#343434", base04: "#555555", base05: "#ababab", base06: "#e0e0e0", base07: "#f9f9f9", base08: "#e92f2f", base09: "#e09448", base0A: "#dddd13", base0B: "#0ed839", base0C: "#23edda", base0D: "#3b48e3", base0E: "#f996e2", base0F: "#69542d" }; const solarized$1 = { scheme: "solarized", author: "ethan schoonover (http://ethanschoonover.com/solarized)", base00: "#002b36", base01: "#073642", base02: "#586e75", base03: "#657b83", base04: "#839496", base05: "#93a1a1", base06: "#eee8d5", base07: "#fdf6e3", base08: "#dc322f", base09: "#cb4b16", base0A: "#b58900", base0B: "#859900", base0C: "#2aa198", base0D: "#268bd2", base0E: "#6c71c4", base0F: "#d33682" }; const summerfruit = { scheme: "summerfruit", author: "christopher corley (http://cscorley.github.io/)", base00: "#151515", base01: "#202020", base02: "#303030", base03: "#505050", base04: "#B0B0B0", base05: "#D0D0D0", base06: "#E0E0E0", base07: "#FFFFFF", base08: "#FF0086", base09: "#FD8900", base0A: "#ABA800", base0B: "#00C918", base0C: "#1faaaa", base0D: "#3777E6", base0E: "#AD00A1", base0F: "#cc6633" }; const tomorrow = { scheme: "tomorrow", author: "chris kempson (http://chriskempson.com)", base00: "#1d1f21", base01: "#282a2e", base02: "#373b41", base03: "#969896", base04: "#b4b7b4", base05: "#c5c8c6", base06: "#e0e0e0", base07: "#ffffff", base08: "#cc6666", base09: "#de935f", base0A: "#f0c674", base0B: "#b5bd68", base0C: "#8abeb7", base0D: "#81a2be", base0E: "#b294bb", base0F: "#a3685a" }; const tube = { scheme: "london tube", author: "jan t. sott", base00: "#231f20", base01: "#1c3f95", base02: "#5a5758", base03: "#737171", base04: "#959ca1", base05: "#d9d8d8", base06: "#e7e7e8", base07: "#ffffff", base08: "#ee2e24", base09: "#f386a1", base0A: "#ffd204", base0B: "#00853e", base0C: "#85cebc", base0D: "#009ddc", base0E: "#98005d", base0F: "#b06110" }; const twilight = { scheme: "twilight", author: "david hart (http://hart-dev.com)", base00: "#1e1e1e", base01: "#323537", base02: "#464b50", base03: "#5f5a60", base04: "#838184", base05: "#a7a7a7", base06: "#c3c3c3", base07: "#ffffff", base08: "#cf6a4c", base09: "#cda869", base0A: "#f9ee98", base0B: "#8f9d6a", base0C: "#afc4db", base0D: "#7587a6", base0E: "#9b859d", base0F: "#9b703f" }; const src = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, threezerotwofour, apathy, ashes, atelierDune, atelierForest, atelierHeath, atelierLakeside, atelierSeaside, bespin, brewer, bright, chalk: chalk$2, codeschool, colors: colors$1, default: _default, eighties, embers, flat, google, grayscale, greenscreen, harmonic, hopscotch, isotope, marrakesh, mocha, monokai, ocean, paraiso, pop, railscasts, shapeshifter, solarized: solarized$1, summerfruit, tomorrow, tube, twilight }, Symbol.toStringTag, { value: "Module" })); const require$$5 = /* @__PURE__ */ getAugmentedNamespace(src); function clamp$3(val, min2, max2) { return Math.min(Math.max(val, min2), max2); } var clamp_1 = clamp$3; var clamp$2 = clamp_1; function componentToHex(c) { var value = Math.round(clamp$2(c, 0, 255)); var hex2 = value.toString(16); return hex2.length == 1 ? "0" + hex2 : hex2; } function rgb2hex(rgb2) { var alpha2 = rgb2.length === 4 ? componentToHex(rgb2[3] * 255) : ""; return "#" + componentToHex(rgb2[0]) + componentToHex(rgb2[1]) + componentToHex(rgb2[2]) + alpha2; } var rgb2hex_1 = rgb2hex; var component = /-?\d+(\.\d+)?%?/g; function extractComponents$2(color) { return color.match(component); } var extractComponents_1 = extractComponents$2; var extractComponents$1 = extractComponents_1; var clamp$1 = clamp_1; function parseHslComponent(component2, i2) { component2 = parseFloat(component2); switch (i2) { case 0: return clamp$1(component2, 0, 360); case 1: case 2: return clamp$1(component2, 0, 100); case 3: return clamp$1(component2, 0, 1); } } function hsl$1(color) { return extractComponents$1(color).map(parseHslComponent); } var hsl_1 = hsl$1; function expand(hex2) { var result = "#"; for (var i2 = 1; i2 < hex2.length; i2++) { var val = hex2.charAt(i2); result += val + val; } return result; } function hex$1(hex2) { if (hex2.length === 4 || hex2.length === 5) { hex2 = expand(hex2); } var rgb2 = [ parseInt(hex2.substring(1, 3), 16), parseInt(hex2.substring(3, 5), 16), parseInt(hex2.substring(5, 7), 16) ]; if (hex2.length === 9) { var alpha2 = parseFloat((parseInt(hex2.substring(7, 9), 16) / 255).toFixed(2)); rgb2.push(alpha2); } return rgb2; } var hex_1 = hex$1; var extractComponents = extractComponents_1; var clamp = clamp_1; function parseRgbComponent(component2, i2) { if (i2 < 3) { if (component2.indexOf("%") != -1) { return Math.round(255 * clamp(parseInt(component2, 10), 0, 100) / 100); } else { return clamp(parseInt(component2, 10), 0, 255); } } else { return clamp(parseFloat(component2), 0, 1); } } function rgb$1(color) { return extractComponents(color).map(parseRgbComponent); } var rgb_1 = rgb$1; function hsl2rgb$1(hsl2) { var h2 = hsl2[0] / 360, s2 = hsl2[1] / 100, l2 = hsl2[2] / 100, t1, t2, t3, rgb2, val; if (s2 == 0) { val = l2 * 255; return [val, val, val]; } if (l2 < 0.5) t2 = l2 * (1 + s2); else t2 = l2 + s2 - l2 * s2; t1 = 2 * l2 - t2; rgb2 = [0, 0, 0]; for (var i2 = 0; i2 < 3; i2++) { t3 = h2 + 1 / 3 * -(i2 - 1); t3 < 0 && t3++; t3 > 1 && t3--; if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3; else if (2 * t3 < 1) val = t2; else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; else val = t1; rgb2[i2] = val * 255; } return rgb2; } var hsl2rgb_1 = hsl2rgb$1; var hsl = hsl_1; var hex = hex_1; var rgb = rgb_1; var hsl2rgb = hsl2rgb_1; function hsl2rgbParse(color) { var h2 = hsl(color); var r2 = hsl2rgb(h2); if (h2.length === 4) { r2.push(h2[3]); } return r2; } var space2parser = { "#": hex, "hsl": hsl2rgbParse, "rgb": rgb }; function parse$9(color) { for (var scheme in space2parser) { if (color.indexOf(scheme) === 0) { return space2parser[scheme](color); } } } parse$9.rgb = rgb; parse$9.hsl = hsl; parse$9.hex = hex; var parse_1$1 = parse$9; var FUNC_ERROR_TEXT$1 = "Expected a function"; var MAX_SAFE_INTEGER$2 = 9007199254740991; var argsTag = "[object Arguments]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]"; var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var freeSelf$1 = typeof self == "object" && self && self.Object === Object && self; var root$1 = freeGlobal$1 || freeSelf$1 || Function("return this")(); function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } function arrayPush(array, values) { var index2 = -1, length2 = values.length, offset = array.length; while (++index2 < length2) { array[offset + index2] = values[index2]; } return array; } var objectProto$1 = Object.prototype; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; var objectToString$1 = objectProto$1.toString; var Symbol$1 = root$1.Symbol, propertyIsEnumerable = objectProto$1.propertyIsEnumerable, spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0; var nativeMax$1 = Math.max; function baseFlatten(array, depth, predicate, isStrict, result) { var index2 = -1, length2 = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index2 < length2) { var value = array[index2]; if (depth > 0 && predicate(value)) { if (depth > 1) { baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } function baseRest(func, start) { start = nativeMax$1(start === void 0 ? func.length - 1 : start, 0); return function() { var args = arguments, index2 = -1, length2 = nativeMax$1(args.length - start, 0), array = Array(length2); while (++index2 < length2) { array[index2] = args[start + index2]; } index2 = -1; var otherArgs = Array(start + 1); while (++index2 < start) { otherArgs[index2] = args[index2]; } otherArgs[start] = array; return apply(func, this, otherArgs); }; } function createFlow(fromRight) { return baseRest(function(funcs) { funcs = baseFlatten(funcs, 1); var length2 = funcs.length, index2 = length2; if (fromRight) { funcs.reverse(); } while (index2--) { if (typeof funcs[index2] != "function") { throw new TypeError(FUNC_ERROR_TEXT$1); } } return function() { var index3 = 0, result = length2 ? funcs[index3].apply(this, arguments) : arguments[0]; while (++index3 < length2) { result = funcs[index3].call(this, result); } return result; }; }); } function isFlattenable(value) { return isArray$5(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } function isArguments(value) { return isArrayLikeObject(value) && hasOwnProperty$1.call(value, "callee") && (!propertyIsEnumerable.call(value, "callee") || objectToString$1.call(value) == argsTag); } var isArray$5 = Array.isArray; function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } function isArrayLikeObject(value) { return isObjectLike$2(value) && isArrayLike(value); } function isFunction(value) { var tag = isObject$2(value) ? objectToString$1.call(value) : ""; return tag == funcTag || tag == genTag; } function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$2; } function isObject$2(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } function isObjectLike$2(value) { return !!value && typeof value == "object"; } var flow = createFlow(); var lodash_flow = flow; var colorConverters = {}; Object.defineProperty(colorConverters, "__esModule", { value: true }); colorConverters.yuv2rgb = yuv2rgb; colorConverters.rgb2yuv = rgb2yuv; function yuv2rgb(yuv) { var y2 = yuv[0], u2 = yuv[1], v2 = yuv[2], r2, g2, b2; r2 = y2 * 1 + u2 * 0 + v2 * 1.13983; g2 = y2 * 1 + u2 * -0.39465 + v2 * -0.5806; b2 = y2 * 1 + u2 * 2.02311 + v2 * 0; r2 = Math.min(Math.max(0, r2), 1); g2 = Math.min(Math.max(0, g2), 1); b2 = Math.min(Math.max(0, b2), 1); return [r2 * 255, g2 * 255, b2 * 255]; } function rgb2yuv(rgb2) { var r2 = rgb2[0] / 255, g2 = rgb2[1] / 255, b2 = rgb2[2] / 255; var y2 = r2 * 0.299 + g2 * 0.587 + b2 * 0.114; var u2 = r2 * -0.14713 + g2 * -0.28886 + b2 * 0.436; var v2 = r2 * 0.615 + g2 * -0.51499 + b2 * -0.10001; return [y2, u2, v2]; } Object.defineProperty(lib$2, "__esModule", { value: true }); lib$2.getBase16Theme = lib$2.createStyling = lib$2.invertTheme = void 0; var _typeof2 = _typeof$9; var _typeof3 = _interopRequireDefault(_typeof2); var _extends2 = _extends$2; var _extends3 = _interopRequireDefault(_extends2); var _slicedToArray2 = slicedToArray$1; var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _keys = keys$1.exports; var _keys2 = _interopRequireDefault(_keys); var _lodash = lodash_curry; var _lodash2 = _interopRequireDefault(_lodash); var _base = require$$5; var base16 = _interopRequireWildcard(_base); var _rgb2hex = rgb2hex_1; var _rgb2hex2 = _interopRequireDefault(_rgb2hex); var _parse = parse_1$1; var _parse2 = _interopRequireDefault(_parse); var _lodash3 = lodash_flow; var _lodash4 = _interopRequireDefault(_lodash3); var _colorConverters = colorConverters; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key2 in obj) { if (Object.prototype.hasOwnProperty.call(obj, key2)) newObj[key2] = obj[key2]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var DEFAULT_BASE16 = base16.default; var BASE16_KEYS = (0, _keys2.default)(DEFAULT_BASE16); var flip = function flip2(x2) { return x2 < 0.25 ? 1 : x2 < 0.5 ? 0.9 - x2 : 1.1 - x2; }; var invertColor = (0, _lodash4.default)(_parse2.default, _colorConverters.rgb2yuv, function(_ref) { var _ref2 = (0, _slicedToArray3.default)(_ref, 3), y2 = _ref2[0], u2 = _ref2[1], v2 = _ref2[2]; return [flip(y2), u2, v2]; }, _colorConverters.yuv2rgb, _rgb2hex2.default); var merger = function merger2(styling) { return function(prevStyling) { return { className: [prevStyling.className, styling.className].filter(Boolean).join(" "), style: (0, _extends3.default)({}, prevStyling.style || {}, styling.style || {}) }; }; }; var mergeStyling = function mergeStyling2(customStyling, defaultStyling) { if (customStyling === void 0) { return defaultStyling; } if (defaultStyling === void 0) { return customStyling; } var customType = typeof customStyling === "undefined" ? "undefined" : (0, _typeof3.default)(customStyling); var defaultType = typeof defaultStyling === "undefined" ? "undefined" : (0, _typeof3.default)(defaultStyling); switch (customType) { case "string": switch (defaultType) { case "string": return [defaultStyling, customStyling].filter(Boolean).join(" "); case "object": return merger({ className: customStyling, style: defaultStyling }); case "function": return function(styling) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return merger({ className: customStyling })(defaultStyling.apply(void 0, [styling].concat(args))); }; } case "object": switch (defaultType) { case "string": return merger({ className: defaultStyling, style: customStyling }); case "object": return (0, _extends3.default)({}, defaultStyling, customStyling); case "function": return function(styling) { for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } return merger({ style: customStyling })(defaultStyling.apply(void 0, [styling].concat(args))); }; } case "function": switch (defaultType) { case "string": return function(styling) { for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } return customStyling.apply(void 0, [merger(styling)({ className: defaultStyling })].concat(args)); }; case "object": return function(styling) { for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } return customStyling.apply(void 0, [merger(styling)({ style: defaultStyling })].concat(args)); }; case "function": return function(styling) { for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { args[_key5 - 1] = arguments[_key5]; } return customStyling.apply(void 0, [defaultStyling.apply(void 0, [styling].concat(args))].concat(args)); }; } } }; var mergeStylings = function mergeStylings2(customStylings, defaultStylings) { var keys2 = (0, _keys2.default)(defaultStylings); for (var key2 in customStylings) { if (keys2.indexOf(key2) === -1) keys2.push(key2); } return keys2.reduce(function(mergedStyling, key3) { return mergedStyling[key3] = mergeStyling(customStylings[key3], defaultStylings[key3]), mergedStyling; }, {}); }; var getStylingByKeys = function getStylingByKeys2(mergedStyling, keys2) { for (var _len6 = arguments.length, args = Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) { args[_key6 - 2] = arguments[_key6]; } if (keys2 === null) { return mergedStyling; } if (!Array.isArray(keys2)) { keys2 = [keys2]; } var styles2 = keys2.map(function(key2) { return mergedStyling[key2]; }).filter(Boolean); var props = styles2.reduce(function(obj, s2) { if (typeof s2 === "string") { obj.className = [obj.className, s2].filter(Boolean).join(" "); } else if ((typeof s2 === "undefined" ? "undefined" : (0, _typeof3.default)(s2)) === "object") { obj.style = (0, _extends3.default)({}, obj.style, s2); } else if (typeof s2 === "function") { obj = (0, _extends3.default)({}, obj, s2.apply(void 0, [obj].concat(args))); } return obj; }, { className: "", style: {} }); if (!props.className) { delete props.className; } if ((0, _keys2.default)(props.style).length === 0) { delete props.style; } return props; }; var invertTheme = lib$2.invertTheme = function invertTheme2(theme) { return (0, _keys2.default)(theme).reduce(function(t2, key2) { return t2[key2] = /^base/.test(key2) ? invertColor(theme[key2]) : key2 === "scheme" ? theme[key2] + ":inverted" : theme[key2], t2; }, {}); }; lib$2.createStyling = (0, _lodash2.default)(function(getStylingFromBase16) { for (var _len7 = arguments.length, args = Array(_len7 > 3 ? _len7 - 3 : 0), _key7 = 3; _key7 < _len7; _key7++) { args[_key7 - 3] = arguments[_key7]; } var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; var themeOrStyling = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; var _options$defaultBase = options.defaultBase16, defaultBase16 = _options$defaultBase === void 0 ? DEFAULT_BASE16 : _options$defaultBase, _options$base16Themes = options.base16Themes, base16Themes = _options$base16Themes === void 0 ? null : _options$base16Themes; var base16Theme = getBase16Theme(themeOrStyling, base16Themes); if (base16Theme) { themeOrStyling = (0, _extends3.default)({}, base16Theme, themeOrStyling); } var theme = BASE16_KEYS.reduce(function(t2, key2) { return t2[key2] = themeOrStyling[key2] || defaultBase16[key2], t2; }, {}); var customStyling = (0, _keys2.default)(themeOrStyling).reduce(function(s2, key2) { return BASE16_KEYS.indexOf(key2) === -1 ? (s2[key2] = themeOrStyling[key2], s2) : s2; }, {}); var defaultStyling = getStylingFromBase16(theme); var mergedStyling = mergeStylings(customStyling, defaultStyling); return (0, _lodash2.default)(getStylingByKeys, 2).apply(void 0, [mergedStyling].concat(args)); }, 3); var getBase16Theme = lib$2.getBase16Theme = function getBase16Theme2(theme, base16Themes) { if (theme && theme.extend) { theme = theme.extend; } if (typeof theme === "string") { var _theme$split = theme.split(":"), _theme$split2 = (0, _slicedToArray3.default)(_theme$split, 2), themeName = _theme$split2[0], modifier = _theme$split2[1]; theme = (base16Themes || {})[themeName] || base16[themeName]; if (modifier === "inverted") { theme = invertTheme(theme); } } return theme && theme.hasOwnProperty("base00") ? theme : void 0; }; var solarized = {}; (function(exports2) { exports2.__esModule = true; exports2["default"] = { scheme: "solarized", author: "ethan schoonover (http://ethanschoonover.com/solarized)", base00: "#002b36", base01: "#073642", base02: "#586e75", base03: "#657b83", base04: "#839496", base05: "#93a1a1", base06: "#eee8d5", base07: "#fdf6e3", base08: "#dc322f", base09: "#cb4b16", base0A: "#b58900", base0B: "#859900", base0C: "#2aa198", base0D: "#268bd2", base0E: "#6c71c4", base0F: "#d33682" }; })(solarized); (function(exports2) { exports2.__esModule = true; var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _reactBase16Styling = lib$2; var _solarized = solarized; var _solarized2 = _interopRequireDefault2(_solarized); function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var colorMap = function colorMap2(theme) { return { BACKGROUND_COLOR: theme.base00, TEXT_COLOR: theme.base07, STRING_COLOR: theme.base0B, DATE_COLOR: theme.base0B, NUMBER_COLOR: theme.base09, BOOLEAN_COLOR: theme.base09, NULL_COLOR: theme.base08, UNDEFINED_COLOR: theme.base08, FUNCTION_COLOR: theme.base08, SYMBOL_COLOR: theme.base08, LABEL_COLOR: theme.base0D, ARROW_COLOR: theme.base0D, ITEM_STRING_COLOR: theme.base0B, ITEM_STRING_EXPANDED_COLOR: theme.base03 }; }; var valueColorMap = function valueColorMap2(colors2) { return { String: colors2.STRING_COLOR, Date: colors2.DATE_COLOR, Number: colors2.NUMBER_COLOR, Boolean: colors2.BOOLEAN_COLOR, Null: colors2.NULL_COLOR, Undefined: colors2.UNDEFINED_COLOR, Function: colors2.FUNCTION_COLOR, Symbol: colors2.SYMBOL_COLOR }; }; var getDefaultThemeStyling = function getDefaultThemeStyling2(theme) { var colors2 = colorMap(theme); return { tree: { border: 0, padding: 0, marginTop: "0.5em", marginBottom: "0.5em", marginLeft: "0.125em", marginRight: 0, listStyle: "none", MozUserSelect: "none", WebkitUserSelect: "none", backgroundColor: colors2.BACKGROUND_COLOR }, value: function value(_ref, nodeType, keyPath) { var style = _ref.style; return { style: (0, _extends32["default"])({}, style, { paddingTop: "0.25em", paddingRight: 0, marginLeft: "0.875em", WebkitUserSelect: "text", MozUserSelect: "text", wordWrap: "break-word", paddingLeft: keyPath.length > 1 ? "2.125em" : "1.25em", textIndent: "-0.5em", wordBreak: "break-all" }) }; }, label: { display: "inline-block", color: colors2.LABEL_COLOR }, valueLabel: { margin: "0 0.5em 0 0" }, valueText: function valueText(_ref2, nodeType) { var style = _ref2.style; return { style: (0, _extends32["default"])({}, style, { color: valueColorMap(colors2)[nodeType] }) }; }, itemRange: function itemRange(styling, expanded) { return { style: { paddingTop: expanded ? 0 : "0.25em", cursor: "pointer", color: colors2.LABEL_COLOR } }; }, arrow: function arrow2(_ref3, nodeType, expanded) { var style = _ref3.style; return { style: (0, _extends32["default"])({}, style, { marginLeft: 0, transition: "150ms", WebkitTransition: "150ms", MozTransition: "150ms", WebkitTransform: expanded ? "rotateZ(90deg)" : "rotateZ(0deg)", MozTransform: expanded ? "rotateZ(90deg)" : "rotateZ(0deg)", transform: expanded ? "rotateZ(90deg)" : "rotateZ(0deg)", transformOrigin: "45% 50%", WebkitTransformOrigin: "45% 50%", MozTransformOrigin: "45% 50%", position: "relative", lineHeight: "1.1em", fontSize: "0.75em" }) }; }, arrowContainer: function arrowContainer(_ref4, arrowStyle) { var style = _ref4.style; return { style: (0, _extends32["default"])({}, style, { display: "inline-block", paddingRight: "0.5em", paddingLeft: arrowStyle === "double" ? "1em" : 0, cursor: "pointer" }) }; }, arrowSign: { color: colors2.ARROW_COLOR }, arrowSignInner: { position: "absolute", top: 0, left: "-0.4em" }, nestedNode: function nestedNode(_ref5, keyPath, nodeType, expanded, expandable) { var style = _ref5.style; return { style: (0, _extends32["default"])({}, style, { position: "relative", paddingTop: "0.25em", marginLeft: keyPath.length > 1 ? "0.875em" : 0, paddingLeft: !expandable ? "1.125em" : 0 }) }; }, rootNode: { padding: 0, margin: 0 }, nestedNodeLabel: function nestedNodeLabel(_ref6, keyPath, nodeType, expanded, expandable) { var style = _ref6.style; return { style: (0, _extends32["default"])({}, style, { margin: 0, padding: 0, WebkitUserSelect: expandable ? "inherit" : "text", MozUserSelect: expandable ? "inherit" : "text", cursor: expandable ? "pointer" : "default" }) }; }, nestedNodeItemString: function nestedNodeItemString(_ref7, keyPath, nodeType, expanded) { var style = _ref7.style; return { style: (0, _extends32["default"])({}, style, { paddingLeft: "0.5em", cursor: "default", color: expanded ? colors2.ITEM_STRING_EXPANDED_COLOR : colors2.ITEM_STRING_COLOR }) }; }, nestedNodeItemType: { marginLeft: "0.3em", marginRight: "0.3em" }, nestedNodeChildren: function nestedNodeChildren(_ref8, nodeType, expanded) { var style = _ref8.style; return { style: (0, _extends32["default"])({}, style, { padding: 0, margin: 0, listStyle: "none", display: expanded ? "block" : "none" }) }; }, rootNodeChildren: { padding: 0, margin: 0, listStyle: "none" } }; }; exports2["default"] = (0, _reactBase16Styling.createStyling)(getDefaultThemeStyling, { defaultBase16: _solarized2["default"] }); })(createStylingFromTheme); (function(exports2) { exports2.__esModule = true; var _objectWithoutProperties2 = objectWithoutProperties; var _objectWithoutProperties3 = _interopRequireDefault2(_objectWithoutProperties2); var _classCallCheck2 = classCallCheck$1; var _classCallCheck3 = _interopRequireDefault2(_classCallCheck2); var _possibleConstructorReturn2 = possibleConstructorReturn$1; var _possibleConstructorReturn3 = _interopRequireDefault2(_possibleConstructorReturn2); var _inherits2 = inherits$1; var _inherits3 = _interopRequireDefault2(_inherits2); var _extends22 = _extends$2; var _extends32 = _interopRequireDefault2(_extends22); var _keys3 = keys$1.exports; var _keys22 = _interopRequireDefault2(_keys3); var _react3 = react.exports; var _react22 = _interopRequireDefault2(_react3); var _propTypes3 = propTypes.exports; var _propTypes22 = _interopRequireDefault2(_propTypes3); var _JSONNode = requireJSONNode(); var _JSONNode2 = _interopRequireDefault2(_JSONNode); var _createStylingFromTheme = createStylingFromTheme; var _createStylingFromTheme2 = _interopRequireDefault2(_createStylingFromTheme); var _reactBase16Styling = lib$2; function _interopRequireDefault2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var identity2 = function identity3(value) { return value; }; var expandRootNode = function expandRootNode2(keyName2, data, level) { return level === 0; }; var defaultItemString = function defaultItemString2(type2, data, itemType, itemString) { return _react22["default"].createElement( "span", null, itemType, " ", itemString ); }; var defaultLabelRenderer = function defaultLabelRenderer2(_ref) { var label = _ref[0]; return _react22["default"].createElement( "span", null, label, ":" ); }; var noCustomNode = function noCustomNode2() { return false; }; function checkLegacyTheming(theme, props) { var deprecatedStylingMethodsMap = { getArrowStyle: "arrow", getListStyle: "nestedNodeChildren", getItemStringStyle: "nestedNodeItemString", getLabelStyle: "label", getValueStyle: "valueText" }; var deprecatedStylingMethods = (0, _keys22["default"])(deprecatedStylingMethodsMap).filter(function(name) { return props[name]; }); if (deprecatedStylingMethods.length > 0) { if (typeof theme === "string") { theme = { extend: theme }; } else { theme = (0, _extends32["default"])({}, theme); } deprecatedStylingMethods.forEach(function(name) { console.error('Styling method "' + name + '" is deprecated, use "theme" property instead'); theme[deprecatedStylingMethodsMap[name]] = function(_ref2) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var style = _ref2.style; return { style: (0, _extends32["default"])({}, style, props[name].apply(props, args)) }; }; }); } return theme; } function getStateFromProps(props) { var theme = checkLegacyTheming(props.theme, props); if (props.invertTheme) { if (typeof theme === "string") { theme = theme + ":inverted"; } else if (theme && theme.extend) { if (typeof theme === "string") { theme = (0, _extends32["default"])({}, theme, { extend: theme.extend + ":inverted" }); } else { theme = (0, _extends32["default"])({}, theme, { extend: (0, _reactBase16Styling.invertTheme)(theme.extend) }); } } else if (theme) { theme = (0, _reactBase16Styling.invertTheme)(theme); } } return { styling: (0, _createStylingFromTheme2["default"])(theme) }; } var JSONTree2 = function(_React$Component) { (0, _inherits3["default"])(JSONTree3, _React$Component); function JSONTree3(props) { (0, _classCallCheck3["default"])(this, JSONTree3); var _this = (0, _possibleConstructorReturn3["default"])(this, _React$Component.call(this, props)); _this.state = getStateFromProps(props); return _this; } JSONTree3.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { var _this2 = this; if (["theme", "invertTheme"].find(function(k2) { return nextProps[k2] !== _this2.props[k2]; })) { this.setState(getStateFromProps(nextProps)); } }; JSONTree3.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) { var _this3 = this; return !!(0, _keys22["default"])(nextProps).find(function(k2) { return k2 === "keyPath" ? nextProps[k2].join("/") !== _this3.props[k2].join("/") : nextProps[k2] !== _this3.props[k2]; }); }; JSONTree3.prototype.render = function render() { var _props = this.props, value = _props.data, keyPath = _props.keyPath, postprocessValue2 = _props.postprocessValue, hideRoot = _props.hideRoot; _props.theme; _props.invertTheme; var rest = (0, _objectWithoutProperties3["default"])(_props, ["data", "keyPath", "postprocessValue", "hideRoot", "theme", "invertTheme"]); var styling = this.state.styling; return _react22["default"].createElement( "ul", styling("tree"), _react22["default"].createElement(_JSONNode2["default"], (0, _extends32["default"])({}, (0, _extends32["default"])({ postprocessValue: postprocessValue2, hideRoot, styling }, rest), { keyPath: hideRoot ? [] : keyPath, value: postprocessValue2(value) })) ); }; return JSONTree3; }(_react22["default"].Component); JSONTree2.propTypes = { data: _propTypes22["default"].oneOfType([_propTypes22["default"].array, _propTypes22["default"].object]).isRequired, hideRoot: _propTypes22["default"].bool, theme: _propTypes22["default"].oneOfType([_propTypes22["default"].object, _propTypes22["default"].string]), invertTheme: _propTypes22["default"].bool, keyPath: _propTypes22["default"].arrayOf(_propTypes22["default"].oneOfType([_propTypes22["default"].string, _propTypes22["default"].number])), postprocessValue: _propTypes22["default"].func, sortObjectKeys: _propTypes22["default"].oneOfType([_propTypes22["default"].func, _propTypes22["default"].bool]) }; JSONTree2.defaultProps = { shouldExpandNode: expandRootNode, hideRoot: false, keyPath: ["root"], getItemString: defaultItemString, labelRenderer: defaultLabelRenderer, valueRenderer: identity2, postprocessValue: identity2, isCustomNode: noCustomNode, collectionLimit: 50, invertTheme: true }; exports2["default"] = JSONTree2; })(lib$3); const JSONTreeVendor = /* @__PURE__ */ getDefaultExportFromCjs(lib$3); function _extends$1() { _extends$1 = Object.assign || function(target2) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target2[key2] = source[key2]; } } } return target2; }; return _extends$1.apply(this, arguments); } function JSONTree(props) { return /* @__PURE__ */ React.createElement(JSONTreeVendor, _extends$1({ invertTheme: false, theme: jsonTreeTheme, hideRoot: true }, props)); } var Heading = newStyled("h2")({ color: mainTheme.softerMain, padding: 0, margin: 0, fontWeight: 400, letterSpacing: "1px", fontSize: "13px", textTransform: "uppercase", flexGrow: 1 }); Heading.displayName = "Heading"; var HeadingWithButton = newStyled("div")({ display: "flex" }); HeadingWithButton.displayName = "HeadingWithButton"; var HeadingButton = newStyled("button")({ padding: "6px 10px", margin: "-6px -10px 0 8px", fontWeight: 400, letterSpacing: "1px", fontSize: "11px", color: mainTheme.white80, textTransform: "uppercase", transition: "background 0.3s, color 0.3s", borderRadius: "2px", border: "none", background: "transparent", "&:hover": { background: mainTheme.main40, color: mainTheme.white, cursor: "pointer" }, "&:focus": { outline: "none" }, "&:active": { background: mainTheme.main60 } }); HeadingButton.displayName = "HeadingButton"; var JSONTreeWrapper = newStyled("div")({ padding: "0 0 9px 0", overflow: "hidden" }); JSONTreeWrapper.displayName = "JSONTreeWrapper"; var Section$1 = newStyled("div")({ minWidth: "180px", boxSizing: "border-box", "& + &": { paddingTop: "9px" } }); Section$1.displayName = "Section"; var Group = newStyled("div")({ margin: "0.5em 0px 0.5em 1em" }); Group.displayName = "Group"; var GroupRow = newStyled("div")({ paddingTop: "0.25em" }); GroupRow.displayName = "GroupRow"; var Key = newStyled("span")({ display: "inline-block", color: mainTheme.syntax.base0D, margin: "0px 0.5em 0px 0px" }); Key.displayName = "Key"; var ValueNum = newStyled("span")({ color: mainTheme.syntax.base09 }); ValueNum.displayName = "ValueNum"; var LogNodeButton = newStyled("button")({ color: mainTheme.white60, background: "none", border: "none", transition: "background 0.3s, color 0.3s", borderRadius: "3px", "&:hover": { cursor: "pointer", background: mainTheme.main40, color: mainTheme.white }, "&:focus": { outline: "none" } }); LogNodeButton.displayName = "LogNodeButton"; function getItemString$1(doc2, action) { return function getItemStringWithBindedDoc(type2, value, defaultView, keysCount) { var logButton = /* @__PURE__ */ React.createElement(LogNodeButton, { onClick: function onClick(e2) { e2.preventDefault(); e2.stopPropagation(); action({ doc: doc2, node: value }); } }, "log"); if (type2 === "Object" && value.type) { return /* @__PURE__ */ React.createElement("span", null, "{} ", value.type, " ", logButton); } return /* @__PURE__ */ React.createElement("span", null, defaultView, " ", keysCount, " ", logButton); }; } function getItemStringForMark(type2, value, defaultView, keysCount) { if (type2 === "Object" && value.type) { return /* @__PURE__ */ React.createElement("span", null, "{} ", value.type); } return /* @__PURE__ */ React.createElement("span", null, defaultView, " ", keysCount); } function _shouldExpandNode(expandPath, nodePath) { var path = [].concat(nodePath).reverse(); if (!expandPath) return false; expandPath.push("attrs"); if (path.length > expandPath.length) return false; if (path.join(".") === expandPath.join(".")) return true; if (path.every(function(el2, idx) { return el2 === expandPath[idx]; })) return true; return false; } function StateTab() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer, StateTabStateContainer] }, function(editorState, stateTab) { var logNodeFromJSON = editorState.logNodeFromJSON; var _editorState$state = editorState.state, state = _editorState$state.state, activeMarks = _editorState$state.activeMarks, expandPath = _editorState$state.expandPath; var toggleSelection = stateTab.toggleSelection; var selectionExpanded = stateTab.state.selectionExpanded; var doc2 = state.doc.toJSON(); return /* @__PURE__ */ React.createElement(SplitView, null, /* @__PURE__ */ React.createElement(SplitViewCol, { grow: true }, /* @__PURE__ */ React.createElement(HeadingWithButton, null, /* @__PURE__ */ React.createElement(Heading, null, "Current Doc"), /* @__PURE__ */ React.createElement(HeadingButton, { onClick: function onClick() { return console.log(state); } }, "Log State")), /* @__PURE__ */ React.createElement(JSONTree, { data: doc2, hideRoot: true, getItemString: getItemString$1(doc2, logNodeFromJSON), shouldExpandNode: function shouldExpandNode(nodePath) { return _shouldExpandNode(expandPath, nodePath); } })), /* @__PURE__ */ React.createElement(SplitViewCol, { sep: true, minWidth: 220 }, /* @__PURE__ */ React.createElement(Section$1, null, /* @__PURE__ */ React.createElement(HeadingWithButton, null, /* @__PURE__ */ React.createElement(Heading, null, "Selection"), /* @__PURE__ */ React.createElement(HeadingButton, { onClick: function onClick() { return toggleSelection(); } }, selectionExpanded ? "\u25BC" : "\u25B6")), /* @__PURE__ */ React.createElement(JSONTreeWrapper, null, /* @__PURE__ */ React.createElement(JSONTree, { data: selectionExpanded ? expandedStateFormatSelection(state.selection) : collapsedStateFormatSelection(state.selection), hideRoot: true }))), /* @__PURE__ */ React.createElement(Section$1, null, /* @__PURE__ */ React.createElement(Heading, null, "Active Marks"), /* @__PURE__ */ React.createElement(JSONTreeWrapper, null, activeMarks.length ? /* @__PURE__ */ React.createElement(JSONTree, { data: activeMarks, hideRoot: true, getItemString: getItemStringForMark }) : /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(GroupRow, null, /* @__PURE__ */ React.createElement(Key, null, "no active marks"))))), /* @__PURE__ */ React.createElement(Section$1, null, /* @__PURE__ */ React.createElement(Heading, null, "Document Stats"), /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(GroupRow, null, /* @__PURE__ */ React.createElement(Key, null, "nodeSize:"), /* @__PURE__ */ React.createElement(ValueNum, null, state.doc.nodeSize)), /* @__PURE__ */ React.createElement(GroupRow, null, /* @__PURE__ */ React.createElement(Key, null, "childCount:"), /* @__PURE__ */ React.createElement(ValueNum, null, state.doc.childCount)))))); }); } var InfoPanel = newStyled("div")({ position: "relative", top: "50%", transform: "translateY(-50%)", textAlign: "center", color: mainTheme.main, fontSize: "14px" }); InfoPanel.displayName = "InfoPanel"; function _extends() { _extends = Object.assign || function(target2) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target2[key2] = source[key2]; } } } return target2; }; return _extends.apply(this, arguments); } function _typeof$7(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$7 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$7 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$7(obj); } function _classCallCheck$9(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$7(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$7(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$7(Constructor.prototype, protoProps); if (staticProps) _defineProperties$7(Constructor, staticProps); return Constructor; } function _inherits$6(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$7(subClass, superClass); } function _setPrototypeOf$7(o2, p2) { _setPrototypeOf$7 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$7(o2, p2); } function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function() { var Super = _getPrototypeOf$6(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$6(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$6(this, result); }; } function _possibleConstructorReturn$6(self2, call) { if (call && (_typeof$7(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$7(self2); } function _assertThisInitialized$7(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$6(o2) { _getPrototypeOf$6 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$6(o2); } var noop$1 = function noop2() { }; var ListItem$1 = newStyled("div")({ minWidth: "190px", width: "100%", display: "flex", boxSizing: "border-box", fontWeight: 400, letterSpacing: "1px", fontSize: "11px", color: mainTheme.white80, textTransform: "uppercase", transition: "background .3s", textAlign: "left", fontFamily: "monospace", border: "none", borderTop: "1px solid ".concat(mainTheme.main20), margin: 0, "&:first-child": { borderTop: "none" }, "&:hover": { background: mainTheme.main40, color: mainTheme.white, cursor: "pointer" }, "&:focus": { outline: "none" }, "&:active": { background: mainTheme.main60 } }, function(props) { return { opacity: props.isDimmed ? 0.3 : 1, padding: props.nested ? "6px 18px 6px 36px" : "6px 18px", background: props.background ? props.background(props) : props.isSelected ? mainTheme.main40 : "transparent" }; }); ListItem$1.displayName = "ListItem"; var ListItemGroupContent = newStyled("div")({ display: "block" }, function(props) { return { display: props.collapsed ? "none" : "block" }; }); ListItemGroupContent.displayName = "ListItemGroupContent"; var ListItemGroup = /* @__PURE__ */ function(_PureComponent) { _inherits$6(ListItemGroup2, _PureComponent); var _super = _createSuper$6(ListItemGroup2); function ListItemGroup2(props) { var _this; _classCallCheck$9(this, ListItemGroup2); _this = _super.call(this, props); _this.state = { collapsed: true }; return _this; } _createClass$7(ListItemGroup2, [{ key: "toggle", value: function toggle() { this.setState({ collapsed: !this.state.collapsed }); } }, { key: "render", value: function render() { var _this2 = this; var _this$props = this.props, items = _this$props.items, groupTitle = _this$props.groupTitle, title = _this$props.title, _this$props$isSelecte = _this$props.isSelected, isSelected = _this$props$isSelecte === void 0 ? noop$1 : _this$props$isSelecte, _this$props$isPreviou = _this$props.isPrevious, isPrevious = _this$props$isPreviou === void 0 ? noop$1 : _this$props$isPreviou, _this$props$isDimmed = _this$props.isDimmed, isDimmed = _this$props$isDimmed === void 0 ? noop$1 : _this$props$isDimmed, _this$props$getKey = _this$props.getKey, getKey = _this$props$getKey === void 0 ? noop$1 : _this$props$getKey, _this$props$onListIte = _this$props.onListItemClick, onListItemClick = _this$props$onListIte === void 0 ? noop$1 : _this$props$onListIte, _this$props$onListIte2 = _this$props.onListItemDoubleClick, onListItemDoubleClick = _this$props$onListIte2 === void 0 ? noop$1 : _this$props$onListIte2, customItemBackground = _this$props.customItemBackground; return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(ListItem$1, { key: getKey(items[0]), onClick: function onClick() { return _this2.toggle(); }, isSelected: items.some(isSelected) && this.state.collapsed, isPrevious: isPrevious(items[0], 0) && this.state.collapsed, isDimmed: items.every(isDimmed), background: customItemBackground }, /* @__PURE__ */ React.createElement("div", { style: { flexGrow: 1 } }, groupTitle(items, 0)), /* @__PURE__ */ React.createElement("div", null, this.state.collapsed ? "\u25B6" : "\u25BC")), /* @__PURE__ */ React.createElement(ListItemGroupContent, { collapsed: this.state.collapsed }, (items || []).map(function(item, index2) { return /* @__PURE__ */ React.createElement(ListItem$1, { key: getKey(item), nested: true, isSelected: isSelected(item, index2), isPrevious: isPrevious(item, index2), isDimmed: isDimmed(item, index2), background: customItemBackground, onClick: function onClick() { return onListItemClick(item, index2); }, onDoubleClick: function onDoubleClick() { return onListItemDoubleClick(item, index2); } }, title(item, index2)); }))); } }]); return ListItemGroup2; }(react.exports.PureComponent); function List(props) { var _props$isSelected = props.isSelected, isSelected = _props$isSelected === void 0 ? noop$1 : _props$isSelected, _props$isPrevious = props.isPrevious, isPrevious = _props$isPrevious === void 0 ? noop$1 : _props$isPrevious, _props$isDimmed = props.isDimmed, isDimmed = _props$isDimmed === void 0 ? noop$1 : _props$isDimmed, _props$getKey = props.getKey, getKey = _props$getKey === void 0 ? noop$1 : _props$getKey, _props$onListItemClic = props.onListItemClick, onListItemClick = _props$onListItemClic === void 0 ? noop$1 : _props$onListItemClic, _props$onListItemDoub = props.onListItemDoubleClick, onListItemDoubleClick = _props$onListItemDoub === void 0 ? noop$1 : _props$onListItemDoub; return /* @__PURE__ */ React.createElement("div", null, (props.items || []).map(function(item, index2) { if (Array.isArray(item)) { return /* @__PURE__ */ React.createElement(ListItemGroup, _extends({}, props, { items: item, key: item[0].timestamp }), props.groupTitle(item, index2)); } return /* @__PURE__ */ React.createElement(ListItem$1, { key: getKey(item), isSelected: isSelected(item, index2), isPrevious: isPrevious(item, index2), isDimmed: isDimmed(item, index2), background: props.customItemBackground, onClick: function onClick() { return onListItemClick(item, index2); }, onDoubleClick: function onDoubleClick() { return onListItemDoubleClick(item, index2); } }, props.title(item, index2)); })); } function _defineProperty$6(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var Updated = newStyled("span")({ color: mainTheme.main }); Updated.displayName = "Updated"; var White = newStyled("span")({ color: mainTheme.white }); White.displayName = "White"; var Deleted = newStyled("span")({ display: "inline-block", background: mainTheme.lightYellow, color: mainTheme.lightPink, padding: "1px 3px 2px", textIndent: 0, textDecoration: "line-through", minHeight: "1ex" }); Deleted.displayName = "Deleted"; var Added = newStyled("span")({ display: "inline-block", background: mainTheme.lightYellow, color: mainTheme.darkGreen, padding: "1px 3px 2px", textIndent: 0, minHeight: "1ex" }); Added.displayName = "Added"; function postprocessValue$1(value) { if (value && value._t === "a") { var res = {}; for (var key2 in value) { if (key2 !== "_t") { if (key2[0] === "_" && !value[key2.substr(1)]) { res[key2.substr(1)] = value[key2]; } else if (value["_" + key2]) { res[key2] = [value["_" + key2][0], value[key2][0]]; } else if (!value["_" + key2] && key2[0] !== "_") { res[key2] = value[key2]; } } } return res; } return value; } function labelRenderer(raw) { return raw[0]; } function stringifyAndShrink(val) { if (val === null) { return "null"; } var str2 = JSON.stringify(val); if (typeof str2 === "undefined") { return "undefined"; } return str2.length > 22 ? "".concat(str2.substr(0, 15), "\u2026").concat(str2.substr(-5)) : str2; } function getValueString(raw) { if (typeof raw === "string") { return raw; } return stringifyAndShrink(raw); } function replaceSpacesWithNonBreakingSpace(value) { return value.replace(/\s/gm, "\xA0"); } function parseTextDiff(textDiff) { var diffByLines = textDiff.split(/\n/gm).slice(1); return diffByLines.map(function(line2) { var type2 = line2.startsWith("-") ? "delete" : line2.startsWith("+") ? "add" : "raw"; return _defineProperty$6({}, type2, replaceSpacesWithNonBreakingSpace(line2.substr(1))); }); } function valueRenderer$1(raw) { if (Array.isArray(raw)) { if (raw.length === 1) { return /* @__PURE__ */ React.createElement(Added, null, getValueString(raw[0])); } if (raw.length === 2) { return /* @__PURE__ */ React.createElement(Updated, null, /* @__PURE__ */ React.createElement(Deleted, null, getValueString(raw[0])), " =>", " ", /* @__PURE__ */ React.createElement(Added, null, getValueString(raw[1]))); } if (raw.length === 3 && raw[1] === 0 && raw[2] === 0) { return /* @__PURE__ */ React.createElement(Deleted, null, getValueString(raw[0])); } if (raw.length === 3 && raw[2] === 2) { return /* @__PURE__ */ React.createElement(Updated, null, '"', parseTextDiff(raw[0]).map(function(item) { if (item["delete"]) { return /* @__PURE__ */ React.createElement(Deleted, { key: item["delete"] + "delete" }, item["delete"]); } if (item.add) { return /* @__PURE__ */ React.createElement(Added, { key: item.add + "add" }, item.add); } return /* @__PURE__ */ React.createElement(White, { key: item.raw + "raw" }, item.raw); }), '"'); } } return "" + raw; } function getItemString(type2, value, defaultView, keysCount) { switch (type2) { case "Object": return /* @__PURE__ */ React.createElement("span", null, "{\u2026}"); default: return /* @__PURE__ */ React.createElement("span", null, defaultView, " ", keysCount); } } function JSONDiff(props) { if (!props.delta) return null; return /* @__PURE__ */ React.createElement(JSONTree, { data: props.delta, hideRoot: true, postprocessValue: postprocessValue$1, labelRenderer, valueRenderer: valueRenderer$1, isCustomNode: Array.isArray, getItemString, shouldExpandNode: function shouldExpandNode() { return true; } }); } function _typeof$6(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$6 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$6 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$6(obj); } function _classCallCheck$8(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$6(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$6(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$6(Constructor.prototype, protoProps); if (staticProps) _defineProperties$6(Constructor, staticProps); return Constructor; } function _inherits$5(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$6(subClass, superClass); } function _setPrototypeOf$6(o2, p2) { _setPrototypeOf$6 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$6(o2, p2); } function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function() { var Super = _getPrototypeOf$5(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$5(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$5(this, result); }; } function _possibleConstructorReturn$5(self2, call) { if (call && (_typeof$6(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$6(self2); } function _assertThisInitialized$6(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$5(o2) { _getPrototypeOf$5 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$5(o2); } var CustomPre = newStyled("pre")({ padding: "9px 0 18px 0 !important", margin: 0, color: mainTheme.white80, "& .prosemirror-dev-tools-highlighter-tag": { color: mainTheme.main } }); CustomPre.displayName = "CustomPre"; var regexp = /(<\/?[\w\d\s="']+>)/gim; var highlight = function highlight2(str2) { return str2.replace(/</g, "<").replace(/>/g, ">").replace(regexp, "<span class='prosemirror-dev-tools-highlighter-tag'>$&</span>"); }; var Highlighter = /* @__PURE__ */ function(_React$Component) { _inherits$5(Highlighter2, _React$Component); var _super = _createSuper$5(Highlighter2); function Highlighter2() { _classCallCheck$8(this, Highlighter2); return _super.apply(this, arguments); } _createClass$6(Highlighter2, [{ key: "render", value: function render() { if (!this.props.children) return null; return /* @__PURE__ */ React.createElement(CustomPre, { dangerouslySetInnerHTML: { __html: highlight(this.props.children) } }); } }]); return Highlighter2; }(React.Component); var Section = newStyled("div")({ minWidth: "180px", boxSizing: "border-box", "& + &": { paddingTop: "9px" } }); Section.displayName = "Section"; function pad(num2) { return ("00" + num2).slice(-2); } function pad3(num2) { return ("000" + num2).slice(-3); } var formatTimestamp = function formatTimestamp2(timestamp2) { var date = new Date(timestamp2); return [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds()), pad3(date.getMilliseconds())].join(":"); }; function SelectionContentSection(props) { if (!props.selectionContent) return null; return /* @__PURE__ */ React.createElement(Section, null, /* @__PURE__ */ React.createElement(Heading, null, "Selection Content"), /* @__PURE__ */ React.createElement(Highlighter, null, props.selectionContent)); } function DocDiffSection(props) { if (!props.diff) return null; return /* @__PURE__ */ React.createElement(Section, null, /* @__PURE__ */ React.createElement(Heading, null, "Doc diff"), /* @__PURE__ */ React.createElement(JSONDiff, { delta: props.diff })); } function SelectionSection(props) { if (!props.selection) return null; return /* @__PURE__ */ React.createElement(Section, null, /* @__PURE__ */ React.createElement(Heading, null, "Selection diff"), /* @__PURE__ */ React.createElement(JSONDiff, { delta: props.selection })); } function HistoryView() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer] }, function(editorState) { var selectHistoryItem = editorState.selectHistoryItem, rollbackHistory = editorState.rollbackHistory; var _editorState$state = editorState.state, history2 = _editorState$state.history, selectedHistoryItem = _editorState$state.selectedHistoryItem, historyRolledBackTo = _editorState$state.historyRolledBackTo; var prevItem = history2[selectedHistoryItem + 1]; var selectedItem = history2[selectedHistoryItem]; var historyRolledBackToItem = history2[historyRolledBackTo]; var historyList = history2.reduce(function(h2, item, index2) { var prev2 = h2[h2.length - 1]; item.index = index2; if (!item.diff) { if (!prev2 || !Array.isArray(prev2)) { h2.push([item]); } else { prev2.push(item); } } else { h2.push(item); } return h2; }, []).reduce(function(h2, item) { if (Array.isArray(item) && item.length === 1) { h2.push(item[0]); } else { h2.push(item); } return h2; }, []); var isSelected = function isSelected2(item) { return item.timestamp === selectedItem.timestamp; }; var isPrevious = function isPrevious2(item) { return prevItem && item.timestamp === prevItem.timestamp; }; var isDimmed = function isDimmed2(item) { return historyRolledBackToItem && item.timestamp > historyRolledBackToItem.timestamp; }; return /* @__PURE__ */ React.createElement(SplitView, null, /* @__PURE__ */ React.createElement(SplitViewCol, { noPaddings: true, minWidth: 190 }, /* @__PURE__ */ React.createElement(List, { items: historyList, getKey: function getKey(item) { return item.timestamp; }, title: function title(item) { return formatTimestamp(item.timestamp); }, groupTitle: function groupTitle(item) { return formatTimestamp(item[0].timestamp) + " [".concat(item.length, "]"); }, isSelected, isPrevious, isDimmed, customItemBackground: function customItemBackground(props) { return props.isSelected ? mainTheme.main40 : props.isPrevious ? mainTheme.main20 : "transparent"; }, onListItemClick: function onListItemClick(item) { return selectHistoryItem(item.index); }, onListItemDoubleClick: function onListItemDoubleClick(item) { return rollbackHistory(item.index); } })), /* @__PURE__ */ React.createElement(SplitViewCol, { grow: true, sep: true }, /* @__PURE__ */ React.createElement(DocDiffSection, { diff: selectedItem.diff }), /* @__PURE__ */ React.createElement(SelectionSection, { selection: selectedItem.selection }), /* @__PURE__ */ React.createElement(SelectionContentSection, { selectionContent: selectedItem.selectionContent }), !selectedItem.diff && !selectedItem.selectionContent && !selectedItem.diffPending && /* @__PURE__ */ React.createElement(InfoPanel, null, "Docs are equal."))); }); } function _typeof$5(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$5 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$5 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$5(obj); } function _classCallCheck$7(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$5(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$5(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$5(Constructor.prototype, protoProps); if (staticProps) _defineProperties$5(Constructor, staticProps); return Constructor; } function _inherits$4(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$5(subClass, superClass); } function _setPrototypeOf$5(o2, p2) { _setPrototypeOf$5 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$5(o2, p2); } function _createSuper$4(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$4(); return function() { var Super = _getPrototypeOf$4(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$4(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$4(this, result); }; } function _possibleConstructorReturn$4(self2, call) { if (call && (_typeof$5(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$5(self2); } function _assertThisInitialized$5(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$4() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$4(o2) { _getPrototypeOf$4 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$4(o2); } var ignoreFields = ["schema", "contentExpr", "schema", "parseDOM", "toDOM"]; function postprocessValue(ignore, data) { if (!data || Object.prototype.toString.call(data) !== "[object Object]") { return data; } return Object.keys(data).filter(function(key2) { return ignore.indexOf(key2) === -1; }).reduce(function(res, key2) { res[key2] = data[key2]; return res; }, {}); } var SchemaTab = /* @__PURE__ */ function(_React$Component) { _inherits$4(SchemaTab2, _React$Component); var _super = _createSuper$4(SchemaTab2); function SchemaTab2() { _classCallCheck$7(this, SchemaTab2); return _super.apply(this, arguments); } _createClass$5(SchemaTab2, [{ key: "shouldComponentUpdate", value: function shouldComponentUpdate(nextProps) { return this.props.schema !== nextProps.schema; } }, { key: "render", value: function render() { var schema2 = this.props.schema; return /* @__PURE__ */ React.createElement(SplitView, null, /* @__PURE__ */ React.createElement(SplitViewCol, { grow: true }, /* @__PURE__ */ React.createElement(Heading, null, "Nodes"), /* @__PURE__ */ React.createElement(JSONTree, { data: schema2.nodes, postprocessValue: postprocessValue.bind(null, ignoreFields) })), /* @__PURE__ */ React.createElement(SplitViewCol, { grow: true, sep: true }, /* @__PURE__ */ React.createElement(Heading, null, "Marks"), /* @__PURE__ */ React.createElement(JSONTree, { data: schema2.marks, postprocessValue: postprocessValue.bind(null, ignoreFields) }))); } }]); return SchemaTab2; }(React.Component); function SchemaTabContainer() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer] }, function(_ref) { var schema2 = _ref.state.state.schema; return /* @__PURE__ */ React.createElement(SchemaTab, { schema: schema2 }); }); } function _typeof$4(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$4 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$4 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$4(obj); } function _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits$3(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$4(subClass, superClass); } function _setPrototypeOf$4(o2, p2) { _setPrototypeOf$4 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$4(o2, p2); } function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function() { var Super = _getPrototypeOf$3(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$3(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$3(this, result); }; } function _possibleConstructorReturn$3(self2, call) { if (call && (_typeof$4(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$4(self2); } function _assertThisInitialized$4(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$3(o2) { _getPrototypeOf$3 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$3(o2); } function _defineProperty$5(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var PluginsTabStateContainer = /* @__PURE__ */ function(_Container) { _inherits$3(PluginsTabStateContainer2, _Container); var _super = _createSuper$3(PluginsTabStateContainer2); function PluginsTabStateContainer2() { var _this; _classCallCheck$6(this, PluginsTabStateContainer2); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$5(_assertThisInitialized$4(_this), "state", { selected: 0 }); _defineProperty$5(_assertThisInitialized$4(_this), "selectPlugin", function(index2) { _this.setState({ selected: index2 }); }); return _this; } return PluginsTabStateContainer2; }(Container); function valueRenderer(raw) { if (typeof (arguments.length <= 1 ? void 0 : arguments[1]) === "function") { return "func"; } return raw; } function PluginState(props) { return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Heading, null, "Plugin State"), /* @__PURE__ */ React.createElement(JSONTree, { data: props.pluginState, valueRenderer })); } function PluginsTab() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer, PluginsTabStateContainer] }, function(editorState, pluginsTabState) { var state = editorState.state.state; var plugins = state.plugins; var selectedPlugin = plugins[pluginsTabState.state.selected]; var selectedPluginState = selectedPlugin.getState(state); return /* @__PURE__ */ React.createElement(SplitView, null, /* @__PURE__ */ React.createElement(SplitViewCol, { noPaddings: true }, /* @__PURE__ */ React.createElement(List, { items: plugins, getKey: function getKey(plugin2) { return plugin2.key; }, title: function title(plugin2) { return plugin2.key; }, isSelected: function isSelected(plugin2, index2) { return pluginsTabState.state.selected === index2; }, isDimmed: function isDimmed(plugin2) { return !plugin2.getState(state); }, onListItemClick: function onListItemClick(plugin2, index2) { return pluginsTabState.selectPlugin(index2); } })), /* @__PURE__ */ React.createElement(SplitViewCol, { grow: true, sep: true }, selectedPluginState ? /* @__PURE__ */ React.createElement(PluginState, { pluginState: selectedPluginState }) : /* @__PURE__ */ React.createElement(InfoPanel, null, "Plugin doesn't have any state"))); }); } function _typeof$3(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$3 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$3 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$3(obj); } function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits$2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$3(subClass, superClass); } function _setPrototypeOf$3(o2, p2) { _setPrototypeOf$3 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$3(o2, p2); } function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function() { var Super = _getPrototypeOf$2(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$2(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$2(this, result); }; } function _possibleConstructorReturn$2(self2, call) { if (call && (_typeof$3(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$3(self2); } function _assertThisInitialized$3(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$2(o2) { _getPrototypeOf$2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$2(o2); } function _defineProperty$4(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var StructureTabStateContainer = /* @__PURE__ */ function(_Container) { _inherits$2(StructureTabStateContainer2, _Container); var _super = _createSuper$2(StructureTabStateContainer2); function StructureTabStateContainer2() { var _this; _classCallCheck$5(this, StructureTabStateContainer2); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$4(_assertThisInitialized$3(_this), "state", { selectedNode: null }); _defineProperty$4(_assertThisInitialized$3(_this), "selectNode", function(_ref) { var node2 = _ref.node; _this.setState({ selectedNode: node2 }); }); return _this; } return StructureTabStateContainer2; }(Container); var GraphWrapper = newStyled("div")({ marginTop: "12px" }); GraphWrapper.displayName = "GraphWrapper"; var BlockNodeWrapper = newStyled("div")({}); BlockNodeWrapper.displayName = "BlockNodeWrapper"; var BlockNodeContentView = newStyled("div")({ padding: "0 12px", boxSizing: "border-box", borderLeft: "1px solid ".concat(mainTheme.white20), borderRight: "1px solid ".concat(mainTheme.white20) }); BlockNodeContentView.displayName = "BlockNodeContentView"; var BlockNodeContentViewWithInline = newStyled("div")({ padding: "0 12px", display: "flex", width: "100%", boxSizing: "border-box", borderLeft: "1px solid ".concat(mainTheme.white20), borderRight: "1px solid ".concat(mainTheme.white20), flexWrap: "wrap" }); BlockNodeContentViewWithInline.displayName = "BlockNodeContentViewWithInline"; var BlockNodeView = newStyled("div")({ width: "100%", marginBottom: "3px", boxSizing: "border-box", display: "flex", "&:hover": { cursor: "pointer" } }, function(_ref) { var bg2 = _ref.bg; return { background: bg2 }; }); BlockNodeView.displayName = "BlockNodeView"; var Side = newStyled("div")({ padding: "3px 6px", background: "rgba(255, 255, 255, 0.3)" }); Side.displayName = "Side"; var Center = newStyled("div")({ flexGrow: 1, padding: "3px 9px", whiteSpace: "pre" }); Center.displayName = "Center"; var InlineNodeView = newStyled("div")({ flexGrow: 1, marginBottom: "3px", display: "flex", boxSizing: "border-box", "&:hover": { cursor: "pointer" } }, function(_ref2) { var bg2 = _ref2.bg; return { background: bg2 }; }); InlineNodeView.displayName = "InlineNodeView"; function BlockNodeContent(props) { if (!props.content || !props.content.content || !props.content.content.length) return null; var content = props.content.content; if (content[0].isBlock) { var _startPos = props.startPos + 1; return /* @__PURE__ */ React.createElement(BlockNodeContentView, null, content.map(function(childNode, index2) { var pos = _startPos; _startPos += childNode.nodeSize; return /* @__PURE__ */ React.createElement(BlockNode, { key: index2, node: childNode, colors: props.colors, onNodeSelected: props.onNodeSelected, startPos: pos }); })); } var startPos = props.startPos; return /* @__PURE__ */ React.createElement(BlockNodeContentViewWithInline, null, content.map(function(childNode, index2) { var pos = startPos; startPos += childNode.nodeSize; return /* @__PURE__ */ React.createElement(InlineNode, { key: index2, index: index2, node: childNode, bg: props.colors[childNode.type.name], onNodeSelected: props.onNodeSelected, startPos: pos }); })); } function BlockNode(props) { var colors2 = props.colors, node2 = props.node, startPos = props.startPos; var color = colors2[node2.type.name]; return /* @__PURE__ */ React.createElement(BlockNodeWrapper, null, /* @__PURE__ */ React.createElement(BlockNodeView, { bg: color, onClick: function onClick() { return props.onNodeSelected({ node: node2 }); } }, /* @__PURE__ */ React.createElement(Side, null, startPos), /* @__PURE__ */ React.createElement(Center, null, node2.type.name), /* @__PURE__ */ React.createElement(Side, null, startPos + node2.nodeSize - 1)), /* @__PURE__ */ React.createElement(BlockNodeContent, { content: node2.content, colors: colors2, onNodeSelected: props.onNodeSelected, startPos })); } function InlineNode(props) { var node2 = props.node, bg2 = props.bg, startPos = props.startPos, index2 = props.index; var marks = node2.marks.length === 1 ? " - [".concat(node2.marks[0].type.name, "]") : node2.marks.length > 1 ? " - [".concat(node2.marks.length, " marks]") : ""; return /* @__PURE__ */ React.createElement(InlineNodeView, { onClick: function onClick() { return props.onNodeSelected({ node: node2 }); }, bg: bg2 }, index2 === 0 ? /* @__PURE__ */ React.createElement(Side, null, startPos) : null, /* @__PURE__ */ React.createElement(Center, null, node2.type.name, " ", marks), /* @__PURE__ */ React.createElement(Side, null, startPos + node2.nodeSize)); } function GraphTab() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer, StructureTabStateContainer] }, function(editorState, structureTabState) { var _editorState$state = editorState.state, state = _editorState$state.state, nodeColors = _editorState$state.nodeColors; var selectedNode = structureTabState.state.selectedNode; var selected = selectedNode ? selectedNode : state.doc; return /* @__PURE__ */ React.createElement(SplitView, null, /* @__PURE__ */ React.createElement(SplitViewCol, { grow: true }, /* @__PURE__ */ React.createElement(Heading, null, "Current Doc"), /* @__PURE__ */ React.createElement(GraphWrapper, null, /* @__PURE__ */ React.createElement(BlockNode, { colors: nodeColors, node: state.doc, startPos: 0, onNodeSelected: structureTabState.selectNode }))), /* @__PURE__ */ React.createElement(SplitViewCol, { sep: true, minWidth: 200, maxWidth: 300 }, /* @__PURE__ */ React.createElement(HeadingWithButton, null, /* @__PURE__ */ React.createElement(Heading, null, "Node Info"), /* @__PURE__ */ React.createElement(HeadingButton, { onClick: function onClick() { return console.log(selected); } }, "Log Node")), /* @__PURE__ */ React.createElement(JSONTree, { data: selected.toJSON(), hideRoot: true, shouldExpandNode: function shouldExpandNode() { return selected.type.name !== "doc" ? true : false; } }))); }); } function _typeof$2(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$2 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$2 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$2(obj); } function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$4(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$4(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$4(Constructor.prototype, protoProps); if (staticProps) _defineProperties$4(Constructor, staticProps); return Constructor; } function _inherits$1(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$2(subClass, superClass); } function _setPrototypeOf$2(o2, p2) { _setPrototypeOf$2 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$2(o2, p2); } function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function() { var Super = _getPrototypeOf$1(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$1(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$1(this, result); }; } function _possibleConstructorReturn$1(self2, call) { if (call && (_typeof$2(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$2(self2); } function _assertThisInitialized$2(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf$1(o2) { _getPrototypeOf$1 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf$1(o2); } var ActionButton = newStyled("button")({ padding: "6px 10px", fontWeight: 400, letterSpacing: "1px", fontSize: "11px", color: mainTheme.white80, background: mainTheme.white10, textTransform: "uppercase", transition: "background 0.3s, color 0.3s", borderRadius: "2px", border: "none", "& + &": { marginLeft: "4px" }, "&:hover": { background: mainTheme.main40, color: mainTheme.white, cursor: "pointer" }, "&:focus": { outline: "none" }, "&:active": { background: mainTheme.main60 } }); ActionButton.displayName = "ActionButton"; var ListItem = newStyled("div")({ height: "24px", lineHeight: "24px", display: "flex", width: "100%" }); ListItem.displayName = "ListItem"; var ListItemTitle = newStyled("div")({ flexGrow: 1 }); ListItemTitle.displayName = "ListItemTitle"; function SnapshotsList(_ref) { var snapshots = _ref.snapshots, deleteSnapshot = _ref.deleteSnapshot, loadSnapshot = _ref.loadSnapshot; return /* @__PURE__ */ React.createElement(List, { getKey: function getKey(item) { return item.name + item.timestamp; }, items: snapshots, title: function title(item) { return /* @__PURE__ */ React.createElement(ListItem, null, /* @__PURE__ */ React.createElement(ListItemTitle, null, item.name), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(ActionButton, { onClick: function onClick() { return deleteSnapshot(item); } }, "delete"), /* @__PURE__ */ React.createElement(ActionButton, { onClick: function onClick() { return loadSnapshot(item); } }, "restore"))); } }); } var SnapshotTab = /* @__PURE__ */ function(_React$Component) { _inherits$1(SnapshotTab2, _React$Component); var _super = _createSuper$1(SnapshotTab2); function SnapshotTab2() { _classCallCheck$4(this, SnapshotTab2); return _super.apply(this, arguments); } _createClass$4(SnapshotTab2, [{ key: "shouldComponentUpdate", value: function shouldComponentUpdate(nextProps) { return this.props.snapshots !== nextProps.snapshots; } }, { key: "render", value: function render() { var _this$props = this.props, snapshots = _this$props.snapshots, loadSnapshot = _this$props.loadSnapshot, deleteSnapshot = _this$props.deleteSnapshot; return /* @__PURE__ */ React.createElement(SplitView, null, /* @__PURE__ */ React.createElement(SplitViewCol, { noPaddings: true, grow: true }, snapshots && snapshots.length ? /* @__PURE__ */ React.createElement(SnapshotsList, { snapshots, loadSnapshot, deleteSnapshot }) : /* @__PURE__ */ React.createElement(InfoPanel, null, 'No saved snapshots yet. Press "Save Snapshot" button to add one.'))); } }]); return SnapshotTab2; }(React.Component); function SnapshotsTabContainer() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer] }, function(_ref2) { var snapshots = _ref2.state.snapshots, loadSnapshot = _ref2.loadSnapshot, deleteSnapshot = _ref2.deleteSnapshot; return /* @__PURE__ */ React.createElement(SnapshotTab, { snapshots, loadSnapshot, deleteSnapshot }); }); } var CSSReset = newStyled("div")({ fontSize: "100%", lineHeight: 1, "& li + li": { margin: 0 } }); CSSReset.displayName = "CSSReset"; function _typeof$1(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$1 = function _typeof4(obj2) { return typeof obj2; }; } else { _typeof$1 = function _typeof4(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof$1(obj); } function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$3(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$3(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$3(Constructor.prototype, protoProps); if (staticProps) _defineProperties$3(Constructor, staticProps); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$1(subClass, superClass); } function _setPrototypeOf$1(o2, p2) { _setPrototypeOf$1 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf$1(o2, p2); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self2, call) { if (call && (_typeof$1(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$1(self2); } function _assertThisInitialized$1(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf(o2) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf(o2); } function _defineProperty$3(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAQAAAACNCElAAAAxklEQVRIx+2Vuw3DMAxEXWUD9VrKvTYJRzAygWpPkSVcBlDtJS6Fg8AQqQ+lAEECXU08iid+pmnoTwWDKzbU6IEbLnkYQaMlD9uA6iqAUArQwDBgX4T1Z+uF4Q4PB/sZmH/1e1BCRZiLhqgWKsJsYjJLUPkDEJKjvmPWwnwCtcKoW4O5VnpTFmaVb8o3LXONOiZAcI3aYe5UIFXiUmv77doOc7oUpDoozLU5iiPFqYtcW4W01LJP3FEiwzXBLG9SUBNq6Ef0BJ8IApq+rItIAAAAAElFTkSuQmCC"; var NodePickerStyled = newStyled("div")({ position: "absolute", pointerEvents: "none", top: 0, left: 0, background: "rgba(0, 0, 255, 0.3)", zIndex: 99999, cursor: "pointer" }, function(_ref) { var nodePicker = _ref.nodePicker; return { transform: "translateX(".concat(nodePicker.left, "px) translateY(").concat(nodePicker.top, "px)"), display: nodePicker.top && nodePicker.left ? "block" : "none", width: "".concat(nodePicker.width, "px"), height: "".concat(nodePicker.height, "px") }; }); NodePickerStyled.displayName = "NodePickerStyled"; var NodePicker = /* @__PURE__ */ function(_React$Component) { _inherits(NodePicker2, _React$Component); var _super = _createSuper(NodePicker2); function NodePicker2() { var _this; _classCallCheck$3(this, NodePicker2); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$3(_assertThisInitialized$1(_this), "handleMouseMove", function(e2) { if (!_this.props.nodePicker.active) return; _this.props.onMouseMove(e2.target); }); _defineProperty$3(_assertThisInitialized$1(_this), "handleNodeClick", function(e2) { if (!_this.props.nodePicker.active) return; e2.preventDefault(); _this.props.onSelect(e2.target); }); _defineProperty$3(_assertThisInitialized$1(_this), "closePicker", function() { if (!_this.props.nodePicker.active) return; _this.props.onClose(); }); return _this; } _createClass$3(NodePicker2, [{ key: "componentDidMount", value: function componentDidMount() { if (this.props.nodePicker.active) { this.initEventHandlers(); } } }, { key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { this.destroyEventHandlers(); if (nextProps.nodePicker.active) { this.initEventHandlers(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.destroyEventHandlers(); } }, { key: "initEventHandlers", value: function initEventHandlers() { document.addEventListener("mousemove", this.handleMouseMove); document.addEventListener("click", this.handleNodeClick); document.addEventListener("keydown", this.closePicker); } }, { key: "destroyEventHandlers", value: function destroyEventHandlers() { document.removeEventListener("mousemove", this.handleMouseMove); document.removeEventListener("click", this.handleNodeClick); document.removeEventListener("keydown", this.closePicker); } }, { key: "render", value: function render() { return /* @__PURE__ */ React.createElement(NodePickerStyled, { nodePicker: this.props.nodePicker }); } }]); return NodePicker2; }(React.Component); var NodePickerTrigger = newStyled("div")({ position: "absolute", right: "4px", top: "-28px", width: "24px", height: "24px", borderRadius: "3px", "&:hover": { backgroundColor: mainTheme.main80, cursor: "pointer" } }, function(_ref2) { var isActive = _ref2.isActive; return { background: "".concat(isActive ? mainTheme.main : mainTheme.main60, ' url("').concat(icon, '")'), backgroundSize: "20px 20px", backgroundRepeat: "none", backgroundPosition: "50% 50%" }; }); NodePickerTrigger.displayName = "NodePickerTrigger"; var SaveSnapshotButton = newStyled("div")({ position: "absolute", right: "32px", top: "-28px", color: mainTheme.white, background: mainTheme.main60, fontSize: "12px", lineHeight: "25px", padding: "0 6px", height: "24px", backgroundSize: "20px 20px", backgroundRepeat: "none", backgroundPosition: "50% 50%", borderRadius: "3px", "&:hover": { backgroundColor: mainTheme.main80, cursor: "pointer" } }); SaveSnapshotButton.displayName = "SaveSnapshotButton"; var DockContainer = newStyled("div")({ width: "100%", height: "100%", overflow: "hidden", background: mainTheme.mainBg, fontFamily: "Helvetica Neue, Calibri Light, Roboto, sans-serif", fontSize: "13px" }); DockContainer.displayName = "DockContainer"; var CloseButton = newStyled("button")({ background: "none", border: "none", position: "absolute", right: 0, color: mainTheme.white60, fontSize: "18px", "&:hover": { cursor: "pointer", background: mainTheme.white05, color: mainTheme.white }, "&:focus": { outline: "none" } }); CloseButton.displayName = "CloseButton"; function DevToolsExpanded() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [GlobalStateContainer] }, function(globalState) { var _globalState$state = globalState.state, defaultSize = _globalState$state.defaultSize, tabIndex = _globalState$state.tabIndex; var toggleDevTools = globalState.toggleDevTools, updateBodyMargin = globalState.updateBodyMargin, selectTab = globalState.selectTab; return /* @__PURE__ */ React.createElement(CSSReset, null, /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer] }, function(_ref) { var nodePicker = _ref.state.nodePicker, deactivatePicker = _ref.deactivatePicker, updateNodePickerPossition = _ref.updateNodePickerPossition, nodePickerSelect = _ref.nodePickerSelect; return /* @__PURE__ */ React.createElement(NodePicker, { nodePicker, onClose: deactivatePicker, onMouseMove: updateNodePickerPossition, onSelect: function onSelect(target2) { nodePickerSelect(target2); selectTab(0); } }); }), /* @__PURE__ */ React.createElement(_default$1, { position: "bottom", dimMode: "none", isVisible: true, defaultSize, onSizeChange: updateBodyMargin }, function() { return /* @__PURE__ */ React.createElement(DockContainer, null, /* @__PURE__ */ React.createElement(CloseButton, { onClick: toggleDevTools }, "\xD7"), /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer] }, function(_ref2) { var nodePicker = _ref2.state.nodePicker, deactivatePicker = _ref2.deactivatePicker, activatePicker = _ref2.activatePicker; return /* @__PURE__ */ React.createElement(NodePickerTrigger, { onClick: nodePicker.active ? deactivatePicker : activatePicker, isActive: nodePicker.active }); }), /* @__PURE__ */ React.createElement(Subscribe, { to: [EditorStateContainer] }, function(_ref3) { var saveSnapshot = _ref3.saveSnapshot; return /* @__PURE__ */ React.createElement(SaveSnapshotButton, { onClick: saveSnapshot }, "Save Snapshot"); }), /* @__PURE__ */ React.createElement(Tabs, { onSelect: selectTab, selectedIndex: tabIndex }, /* @__PURE__ */ React.createElement(TabList, null, /* @__PURE__ */ React.createElement(Tab, { index: "state" }, "State"), /* @__PURE__ */ React.createElement(Tab, { index: "history" }, "History"), /* @__PURE__ */ React.createElement(Tab, { index: "plugins" }, "Plugins"), /* @__PURE__ */ React.createElement(Tab, { index: "schema" }, "Schema"), /* @__PURE__ */ React.createElement(Tab, { index: "structure" }, "Structure"), /* @__PURE__ */ React.createElement(Tab, { index: "snapshots" }, "Snapshots")), /* @__PURE__ */ React.createElement(TabPanel, null, function(_ref4) { var index2 = _ref4.index; switch (index2) { case "state": return /* @__PURE__ */ React.createElement(StateTab, null); case "history": return /* @__PURE__ */ React.createElement(HistoryView, null); case "plugins": return /* @__PURE__ */ React.createElement(PluginsTab, null); case "schema": return /* @__PURE__ */ React.createElement(SchemaTabContainer, null); case "structure": return /* @__PURE__ */ React.createElement(GraphTab, null); case "snapshots": return /* @__PURE__ */ React.createElement(SnapshotsTabContainer, null); default: return /* @__PURE__ */ React.createElement(StateTab, null); } }))); })); }); } function DevTools() { return /* @__PURE__ */ React.createElement(Subscribe, { to: [GlobalStateContainer] }, function(_ref) { var state = _ref.state, toggleDevTools = _ref.toggleDevTools; return state.opened ? /* @__PURE__ */ React.createElement(DevToolsExpanded, null) : /* @__PURE__ */ React.createElement(DevToolsCollapsed, { onClick: toggleDevTools }); }); } var DEVTOOLS_CLASS_NAME = "__prosemirror-dev-tools__"; function createPlace() { var place = document.querySelector(".".concat(DEVTOOLS_CLASS_NAME)); if (!place) { place = document.createElement("div"); place.className = DEVTOOLS_CLASS_NAME; document.body.appendChild(place); } else { ReactDOM.unmountComponentAtNode(place); place.innerHTML = ""; } return place; } function applyDevTools(editorView, props) { var place = createPlace(); var editorState = new EditorStateContainer(editorView, props); ReactDOM.render(/* @__PURE__ */ React.createElement(Provider, { inject: [editorState] }, /* @__PURE__ */ React.createElement(DevTools, null)), place); } var getRandomValues; var rnds8 = new Uint8Array(16); function rng() { if (!getRandomValues) { getRandomValues = typeof crypto !== "undefined" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== "undefined" && typeof msCrypto.getRandomValues === "function" && msCrypto.getRandomValues.bind(msCrypto); if (!getRandomValues) { throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); } } return getRandomValues(rnds8); } const REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; function validate(uuid) { return typeof uuid === "string" && REGEX.test(uuid); } var byteToHex = []; for (var i$1 = 0; i$1 < 256; ++i$1) { byteToHex.push((i$1 + 256).toString(16).substr(1)); } function stringify(arr) { var offset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); if (!validate(uuid)) { throw TypeError("Stringified UUID is invalid"); } return uuid; } var _nodeId; var _clockseq; var _lastMSecs = 0; var _lastNSecs = 0; function v1(options, buf, offset) { var i2 = buf && offset || 0; var b2 = buf || new Array(16); options = options || {}; var node2 = options.node || _nodeId; var clockseq = options.clockseq !== void 0 ? options.clockseq : _clockseq; if (node2 == null || clockseq == null) { var seedBytes = options.random || (options.rng || rng)(); if (node2 == null) { node2 = _nodeId = [seedBytes[0] | 1, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; } if (clockseq == null) { clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 16383; } } var msecs = options.msecs !== void 0 ? options.msecs : Date.now(); var nsecs = options.nsecs !== void 0 ? options.nsecs : _lastNSecs + 1; var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4; if (dt < 0 && options.clockseq === void 0) { clockseq = clockseq + 1 & 16383; } if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === void 0) { nsecs = 0; } if (nsecs >= 1e4) { throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); } _lastMSecs = msecs; _lastNSecs = nsecs; _clockseq = clockseq; msecs += 122192928e5; var tl2 = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296; b2[i2++] = tl2 >>> 24 & 255; b2[i2++] = tl2 >>> 16 & 255; b2[i2++] = tl2 >>> 8 & 255; b2[i2++] = tl2 & 255; var tmh = msecs / 4294967296 * 1e4 & 268435455; b2[i2++] = tmh >>> 8 & 255; b2[i2++] = tmh & 255; b2[i2++] = tmh >>> 24 & 15 | 16; b2[i2++] = tmh >>> 16 & 255; b2[i2++] = clockseq >>> 8 | 128; b2[i2++] = clockseq & 255; for (var n2 = 0; n2 < 6; ++n2) { b2[i2 + n2] = node2[n2]; } return buf || stringify(b2); } function parse$8(uuid) { if (!validate(uuid)) { throw TypeError("Invalid UUID"); } var v2; var arr = new Uint8Array(16); arr[0] = (v2 = parseInt(uuid.slice(0, 8), 16)) >>> 24; arr[1] = v2 >>> 16 & 255; arr[2] = v2 >>> 8 & 255; arr[3] = v2 & 255; arr[4] = (v2 = parseInt(uuid.slice(9, 13), 16)) >>> 8; arr[5] = v2 & 255; arr[6] = (v2 = parseInt(uuid.slice(14, 18), 16)) >>> 8; arr[7] = v2 & 255; arr[8] = (v2 = parseInt(uuid.slice(19, 23), 16)) >>> 8; arr[9] = v2 & 255; arr[10] = (v2 = parseInt(uuid.slice(24, 36), 16)) / 1099511627776 & 255; arr[11] = v2 / 4294967296 & 255; arr[12] = v2 >>> 24 & 255; arr[13] = v2 >>> 16 & 255; arr[14] = v2 >>> 8 & 255; arr[15] = v2 & 255; return arr; } function stringToBytes(str2) { str2 = unescape(encodeURIComponent(str2)); var bytes = []; for (var i2 = 0; i2 < str2.length; ++i2) { bytes.push(str2.charCodeAt(i2)); } return bytes; } var DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; var URL$1 = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; function v35(name, version2, hashfunc) { function generateUUID(value, namespace, buf, offset) { if (typeof value === "string") { value = stringToBytes(value); } if (typeof namespace === "string") { namespace = parse$8(namespace); } if (namespace.length !== 16) { throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)"); } var bytes = new Uint8Array(16 + value.length); bytes.set(namespace); bytes.set(value, namespace.length); bytes = hashfunc(bytes); bytes[6] = bytes[6] & 15 | version2; bytes[8] = bytes[8] & 63 | 128; if (buf) { offset = offset || 0; for (var i2 = 0; i2 < 16; ++i2) { buf[offset + i2] = bytes[i2]; } return buf; } return stringify(bytes); } try { generateUUID.name = name; } catch (err) { } generateUUID.DNS = DNS; generateUUID.URL = URL$1; return generateUUID; } function md5(bytes) { if (typeof bytes === "string") { var msg = unescape(encodeURIComponent(bytes)); bytes = new Uint8Array(msg.length); for (var i2 = 0; i2 < msg.length; ++i2) { bytes[i2] = msg.charCodeAt(i2); } } return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); } function md5ToHexEncodedArray(input) { var output = []; var length32 = input.length * 32; var hexTab = "0123456789abcdef"; for (var i2 = 0; i2 < length32; i2 += 8) { var x2 = input[i2 >> 5] >>> i2 % 32 & 255; var hex2 = parseInt(hexTab.charAt(x2 >>> 4 & 15) + hexTab.charAt(x2 & 15), 16); output.push(hex2); } return output; } function getOutputLength(inputLength8) { return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; } function wordsToMd5(x2, len) { x2[len >> 5] |= 128 << len % 32; x2[getOutputLength(len) - 1] = len; var a2 = 1732584193; var b2 = -271733879; var c = -1732584194; var d2 = 271733878; for (var i2 = 0; i2 < x2.length; i2 += 16) { var olda = a2; var oldb = b2; var oldc = c; var oldd = d2; a2 = md5ff(a2, b2, c, d2, x2[i2], 7, -680876936); d2 = md5ff(d2, a2, b2, c, x2[i2 + 1], 12, -389564586); c = md5ff(c, d2, a2, b2, x2[i2 + 2], 17, 606105819); b2 = md5ff(b2, c, d2, a2, x2[i2 + 3], 22, -1044525330); a2 = md5ff(a2, b2, c, d2, x2[i2 + 4], 7, -176418897); d2 = md5ff(d2, a2, b2, c, x2[i2 + 5], 12, 1200080426); c = md5ff(c, d2, a2, b2, x2[i2 + 6], 17, -1473231341); b2 = md5ff(b2, c, d2, a2, x2[i2 + 7], 22, -45705983); a2 = md5ff(a2, b2, c, d2, x2[i2 + 8], 7, 1770035416); d2 = md5ff(d2, a2, b2, c, x2[i2 + 9], 12, -1958414417); c = md5ff(c, d2, a2, b2, x2[i2 + 10], 17, -42063); b2 = md5ff(b2, c, d2, a2, x2[i2 + 11], 22, -1990404162); a2 = md5ff(a2, b2, c, d2, x2[i2 + 12], 7, 1804603682); d2 = md5ff(d2, a2, b2, c, x2[i2 + 13], 12, -40341101); c = md5ff(c, d2, a2, b2, x2[i2 + 14], 17, -1502002290); b2 = md5ff(b2, c, d2, a2, x2[i2 + 15], 22, 1236535329); a2 = md5gg(a2, b2, c, d2, x2[i2 + 1], 5, -165796510); d2 = md5gg(d2, a2, b2, c, x2[i2 + 6], 9, -1069501632); c = md5gg(c, d2, a2, b2, x2[i2 + 11], 14, 643717713); b2 = md5gg(b2, c, d2, a2, x2[i2], 20, -373897302); a2 = md5gg(a2, b2, c, d2, x2[i2 + 5], 5, -701558691); d2 = md5gg(d2, a2, b2, c, x2[i2 + 10], 9, 38016083); c = md5gg(c, d2, a2, b2, x2[i2 + 15], 14, -660478335); b2 = md5gg(b2, c, d2, a2, x2[i2 + 4], 20, -405537848); a2 = md5gg(a2, b2, c, d2, x2[i2 + 9], 5, 568446438); d2 = md5gg(d2, a2, b2, c, x2[i2 + 14], 9, -1019803690); c = md5gg(c, d2, a2, b2, x2[i2 + 3], 14, -187363961); b2 = md5gg(b2, c, d2, a2, x2[i2 + 8], 20, 1163531501); a2 = md5gg(a2, b2, c, d2, x2[i2 + 13], 5, -1444681467); d2 = md5gg(d2, a2, b2, c, x2[i2 + 2], 9, -51403784); c = md5gg(c, d2, a2, b2, x2[i2 + 7], 14, 1735328473); b2 = md5gg(b2, c, d2, a2, x2[i2 + 12], 20, -1926607734); a2 = md5hh(a2, b2, c, d2, x2[i2 + 5], 4, -378558); d2 = md5hh(d2, a2, b2, c, x2[i2 + 8], 11, -2022574463); c = md5hh(c, d2, a2, b2, x2[i2 + 11], 16, 1839030562); b2 = md5hh(b2, c, d2, a2, x2[i2 + 14], 23, -35309556); a2 = md5hh(a2, b2, c, d2, x2[i2 + 1], 4, -1530992060); d2 = md5hh(d2, a2, b2, c, x2[i2 + 4], 11, 1272893353); c = md5hh(c, d2, a2, b2, x2[i2 + 7], 16, -155497632); b2 = md5hh(b2, c, d2, a2, x2[i2 + 10], 23, -1094730640); a2 = md5hh(a2, b2, c, d2, x2[i2 + 13], 4, 681279174); d2 = md5hh(d2, a2, b2, c, x2[i2], 11, -358537222); c = md5hh(c, d2, a2, b2, x2[i2 + 3], 16, -722521979); b2 = md5hh(b2, c, d2, a2, x2[i2 + 6], 23, 76029189); a2 = md5hh(a2, b2, c, d2, x2[i2 + 9], 4, -640364487); d2 = md5hh(d2, a2, b2, c, x2[i2 + 12], 11, -421815835); c = md5hh(c, d2, a2, b2, x2[i2 + 15], 16, 530742520); b2 = md5hh(b2, c, d2, a2, x2[i2 + 2], 23, -995338651); a2 = md5ii(a2, b2, c, d2, x2[i2], 6, -198630844); d2 = md5ii(d2, a2, b2, c, x2[i2 + 7], 10, 1126891415); c = md5ii(c, d2, a2, b2, x2[i2 + 14], 15, -1416354905); b2 = md5ii(b2, c, d2, a2, x2[i2 + 5], 21, -57434055); a2 = md5ii(a2, b2, c, d2, x2[i2 + 12], 6, 1700485571); d2 = md5ii(d2, a2, b2, c, x2[i2 + 3], 10, -1894986606); c = md5ii(c, d2, a2, b2, x2[i2 + 10], 15, -1051523); b2 = md5ii(b2, c, d2, a2, x2[i2 + 1], 21, -2054922799); a2 = md5ii(a2, b2, c, d2, x2[i2 + 8], 6, 1873313359); d2 = md5ii(d2, a2, b2, c, x2[i2 + 15], 10, -30611744); c = md5ii(c, d2, a2, b2, x2[i2 + 6], 15, -1560198380); b2 = md5ii(b2, c, d2, a2, x2[i2 + 13], 21, 1309151649); a2 = md5ii(a2, b2, c, d2, x2[i2 + 4], 6, -145523070); d2 = md5ii(d2, a2, b2, c, x2[i2 + 11], 10, -1120210379); c = md5ii(c, d2, a2, b2, x2[i2 + 2], 15, 718787259); b2 = md5ii(b2, c, d2, a2, x2[i2 + 9], 21, -343485551); a2 = safeAdd(a2, olda); b2 = safeAdd(b2, oldb); c = safeAdd(c, oldc); d2 = safeAdd(d2, oldd); } return [a2, b2, c, d2]; } function bytesToWords(input) { if (input.length === 0) { return []; } var length8 = input.length * 8; var output = new Uint32Array(getOutputLength(length8)); for (var i2 = 0; i2 < length8; i2 += 8) { output[i2 >> 5] |= (input[i2 / 8] & 255) << i2 % 32; } return output; } function safeAdd(x2, y2) { var lsw = (x2 & 65535) + (y2 & 65535); var msw = (x2 >> 16) + (y2 >> 16) + (lsw >> 16); return msw << 16 | lsw & 65535; } function bitRotateLeft(num2, cnt) { return num2 << cnt | num2 >>> 32 - cnt; } function md5cmn(q2, a2, b2, x2, s2, t2) { return safeAdd(bitRotateLeft(safeAdd(safeAdd(a2, q2), safeAdd(x2, t2)), s2), b2); } function md5ff(a2, b2, c, d2, x2, s2, t2) { return md5cmn(b2 & c | ~b2 & d2, a2, b2, x2, s2, t2); } function md5gg(a2, b2, c, d2, x2, s2, t2) { return md5cmn(b2 & d2 | c & ~d2, a2, b2, x2, s2, t2); } function md5hh(a2, b2, c, d2, x2, s2, t2) { return md5cmn(b2 ^ c ^ d2, a2, b2, x2, s2, t2); } function md5ii(a2, b2, c, d2, x2, s2, t2) { return md5cmn(c ^ (b2 | ~d2), a2, b2, x2, s2, t2); } var v3 = v35("v3", 48, md5); const v3$1 = v3; function v4(options, buf, offset) { options = options || {}; var rnds = options.random || (options.rng || rng)(); rnds[6] = rnds[6] & 15 | 64; rnds[8] = rnds[8] & 63 | 128; if (buf) { offset = offset || 0; for (var i2 = 0; i2 < 16; ++i2) { buf[offset + i2] = rnds[i2]; } return buf; } return stringify(rnds); } function f(s2, x2, y2, z2) { switch (s2) { case 0: return x2 & y2 ^ ~x2 & z2; case 1: return x2 ^ y2 ^ z2; case 2: return x2 & y2 ^ x2 & z2 ^ y2 & z2; case 3: return x2 ^ y2 ^ z2; } } function ROTL(x2, n2) { return x2 << n2 | x2 >>> 32 - n2; } function sha1(bytes) { var K2 = [1518500249, 1859775393, 2400959708, 3395469782]; var H2 = [1732584193, 4023233417, 2562383102, 271733878, 3285377520]; if (typeof bytes === "string") { var msg = unescape(encodeURIComponent(bytes)); bytes = []; for (var i2 = 0; i2 < msg.length; ++i2) { bytes.push(msg.charCodeAt(i2)); } } else if (!Array.isArray(bytes)) { bytes = Array.prototype.slice.call(bytes); } bytes.push(128); var l2 = bytes.length / 4 + 2; var N2 = Math.ceil(l2 / 16); var M2 = new Array(N2); for (var _i = 0; _i < N2; ++_i) { var arr = new Uint32Array(16); for (var j2 = 0; j2 < 16; ++j2) { arr[j2] = bytes[_i * 64 + j2 * 4] << 24 | bytes[_i * 64 + j2 * 4 + 1] << 16 | bytes[_i * 64 + j2 * 4 + 2] << 8 | bytes[_i * 64 + j2 * 4 + 3]; } M2[_i] = arr; } M2[N2 - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); M2[N2 - 1][14] = Math.floor(M2[N2 - 1][14]); M2[N2 - 1][15] = (bytes.length - 1) * 8 & 4294967295; for (var _i2 = 0; _i2 < N2; ++_i2) { var W2 = new Uint32Array(80); for (var t2 = 0; t2 < 16; ++t2) { W2[t2] = M2[_i2][t2]; } for (var _t = 16; _t < 80; ++_t) { W2[_t] = ROTL(W2[_t - 3] ^ W2[_t - 8] ^ W2[_t - 14] ^ W2[_t - 16], 1); } var a2 = H2[0]; var b2 = H2[1]; var c = H2[2]; var d2 = H2[3]; var e2 = H2[4]; for (var _t2 = 0; _t2 < 80; ++_t2) { var s2 = Math.floor(_t2 / 20); var T2 = ROTL(a2, 5) + f(s2, b2, c, d2) + e2 + K2[s2] + W2[_t2] >>> 0; e2 = d2; d2 = c; c = ROTL(b2, 30) >>> 0; b2 = a2; a2 = T2; } H2[0] = H2[0] + a2 >>> 0; H2[1] = H2[1] + b2 >>> 0; H2[2] = H2[2] + c >>> 0; H2[3] = H2[3] + d2 >>> 0; H2[4] = H2[4] + e2 >>> 0; } return [H2[0] >> 24 & 255, H2[0] >> 16 & 255, H2[0] >> 8 & 255, H2[0] & 255, H2[1] >> 24 & 255, H2[1] >> 16 & 255, H2[1] >> 8 & 255, H2[1] & 255, H2[2] >> 24 & 255, H2[2] >> 16 & 255, H2[2] >> 8 & 255, H2[2] & 255, H2[3] >> 24 & 255, H2[3] >> 16 & 255, H2[3] >> 8 & 255, H2[3] & 255, H2[4] >> 24 & 255, H2[4] >> 16 & 255, H2[4] >> 8 & 255, H2[4] & 255]; } var v5 = v35("v5", 80, sha1); const v5$1 = v5; const nil = "00000000-0000-0000-0000-000000000000"; function version(uuid) { if (!validate(uuid)) { throw TypeError("Invalid UUID"); } return parseInt(uuid.substr(14, 1), 16); } const esmBrowser = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, v1, v3: v3$1, v4, v5: v5$1, NIL: nil, version, validate, stringify, parse: parse$8 }, Symbol.toStringTag, { value: "Module" })); const require$$0$1 = /* @__PURE__ */ getAugmentedNamespace(esmBrowser); require$$0$1.v4; require$$0$1.v4; function qtWebEngineVersion() { const pattern = new RegExp("QtWebEngine/([^\\s]+)", "i"); const match2 = navigator.userAgent.match(pattern); if (match2) { return match2[1]; } else { return void 0; } } function isWindows() { return navigator.userAgent.search("Windows") !== -1; } const kModernCrossrefDOIRegex = /10.\d{4,9}\/[-._;()/:A-Z0-9]+$/i; const kEarlyWileyCrossrefDOIRegex = /10.1002\/[^\s]+$/i; const kOtherCrossrefDOIRegex1 = /10.\\d{4}\/\d+-\d+X?(\d+)\d+<[\d\w]+:[\d\w]*>\d+.\d+.\w+;\d$/i; const kOtherCrossrefDOIRegex2 = /10.1021\/\w\w\d+$/i; const kOtherCrossrefDOIRegex3 = /10.1207\/[\w\d]+&\d+_\d+$/i; const kCrossrefMatches = [ kModernCrossrefDOIRegex, kEarlyWileyCrossrefDOIRegex, kOtherCrossrefDOIRegex1, kOtherCrossrefDOIRegex2, kOtherCrossrefDOIRegex3 ]; function hasDOI(token2) { return findDOI(token2) !== void 0; } function findDOI(token2) { let match2 = null; kCrossrefMatches.find((regex2) => { match2 = token2.match(regex2); return match2 && match2[0].length > 0; }); if (match2 === null) { return void 0; } else { return match2[0]; } } function urlForDOI(doi) { return `https://doi.org/${doi}`; } var webPinyin = { exports: {} }; var dictZiWeb = { "a": "", "\u0101": "\u5416\u9515\u9312", "\xE1": "\u55C4", "\u01CE": "", "\xE0": "", "\u0101i": "\u54CE\u54C0\u57C3\u5A2D\u6EBE\u55F3\u92B0\u953F\u566F\u8AF0\u9384", "\xE1i": "\u5540\u5A3E\u6371\u7691\u51D2\u9691\u5D66\u6EB0\u560A\u6571\u6573\u769A\u78D1\u764C", "\u01CEi": "\u6BD0\u6639\u5A3E\u6B38\u7D60\u55F3\u77EE\u853C\u8EB7\u566F\u6FED\u85F9\u8B6A\u972D\u9744", "\xE0i": "\u827E\u4F0C\u6B2C\u7231\u7839\u784B\u5828\u7125\u9698\u55CC\u55F3\u5867\u5AD2\u611B\u788D\u53C6\u66A7\u7477\u50FE\u566F\u58D2\u5B21\u61D3\u8586\u9D31\u61DD\u66D6\u74A6\u8CF9\u9932\u76A7\u77B9\u99A4\u7919\u8B7A\u9440\u9C6B\u9749", "\u0101n": "\u5B89\u4F92\u5CD6\u6849\u6C28\u5063\u5EB5\u83F4\u8C19\u557D\u5A95\u843B\u844A\u75F7\u8164\u88FA\u9E4C\u84ED\u8A9D\u978D\u978C\u76E6\u8AF3\u99A3\u9B9F\u76EB\u9D6A\u97FD\u9D95", "\xE1n": "\u73B5\u557D\u96F8\u5111", "\u01CEn": "\u57B5\u4FFA\u5535\u57EF\u94F5\u63DE\u667B\u7F6F\u92A8", "\xE0n": "\u5388\u5C75\u5C7D\u72B4\u5CB8\u54B9\u6309\u6D1D\u834C\u6848\u80FA\u8C7B\u5813\u968C\u667B\u6697\u8C8B\u5111\u930C\u95C7\u9EEF", "\u0101ng": "\u80AE\u9AAF", "\xE1ng": "\u536C\u5C87\u6602\u663B", "\u01CEng": "", "\xE0ng": "\u678A\u76CE\u91A0", "\u0101o": "\u6CD1\u67EA\u7711\u688E\u8EEA\u719D\u720A", "\xE1o": "\u6556\u53AB\u969E\u55F7\u55F8\u5D85\u5ED2\u6160\u6EF6\u7353\u851C\u9068\u9A9C\u646E\u7352\u7488\u78DD\u58BD\u7FF1\u8071\u87AF\u7FF6\u8B37\u8B38\u7FFA\u9CCC\u93D5\u93D6\u9C32\u9DD4\u9F07", "\u01CEo": "\u8279\u629D\u82BA\u8884\u7711\u90E9\u957A\u5AAA\u5ABC\u8956", "\xE0o": "\u5C99\u6277\u629D\u5773\u5787\u5CB0\u67EA\u50B2\u5961\u8EEA\u5967\u5AEF\u5D85\u6160\u6F9A\u96A9\u58BA\u5DB4\u61CA\u64D9\u6FB3\u93CA\u9A41", "ba": "\u7F77", "b\u0101": "\u4E37\u516B\u4EC8\u5DF4\u53ED\u6733\u7390\u593F\u5C9C\u6277\u82AD\u5CC7\u67ED\u75A4\u54F1\u54F5\u634C\u7B06\u7C91\u7F93\u8686\u91DF\u8C5D\u9C83\u9B5E", "b\xE1": "\u53D0\u72AE\u629C\u59AD\u62D4\u8307\u70A6\u7679\u80C8\u83DD\u8A59\u8DCB\u8EF7\u98B0\u9B43\u9F25", "b\u01CE": "\u94AF\u9200\u9776", "b\xE0": "\u575D\u5F1D\u7238\u7685\u57BB\u8DC1\u9C83\u9B5E\u9C85\u9C8C\u7F77\u9B81\u9B8A\u8987\u77F2\u9738\u58E9\u705E\u6B1B", "b\u0101i": "\u6300\u63B0\u64D8", "b\xE1i": "\u767D", "b\u01CEi": "\u767E\u4F70\u6822\u74F8\u636D\u7AE1\u7CA8\u7D54\u6446\u64FA\u896C", "b\xE0i": "\u5457\u5E8D\u62DD\u8D25\u62DC\u5504\u6557\u7308\u7A17\u7CBA\u85AD\u8D01\u97DB", "b\u0101n": "\u6273\u653D\u670C\u80A6\u73ED\u822C\u9881\u6591\u642C\u6592\u9812\u642B\u7622\u9CFB\u878C\u8929\u764D\u8FAC", "b\u01CEn": "\u962A\u5742\u5C85\u6604\u677F\u7248\u74EA\u94A3\u7C84\u8228\u9211\u8742\u9B6C\u95C6", "b\xE0n": "\u529E\u534A\u4F34\u626E\u5762\u59C5\u6011\u7ECA\u67C8\u79DA\u6E74\u7D46\u8DD8\u9261\u977D\u8FA6\u74E3", "b\u0101ng": "\u90A6\u57B9\u5E2E\u6360\u6886\u6D5C\u90AB\u5E47\u5E5A\u7E0D\u5E6B\u97A4", "b\u01CEng": "\u7ED1\u7D81\u7253\u8180\u9AC8", "b\xE0ng": "\u73A4\u6337\u8684\u508D\u68D2\u68D3\u7865\u8C24\u585D\u6412\u7A16\u84A1\u86D6\u872F\u9551\u7E0D\u8255\u8B17\u938A", "b\u0101o": "\u52F9\u5305\u4F68\u5B62\u82DE\u67B9\u80DE\u525D\u7B23\u7172\u9F85\u88E6\u8554\u8912\u8943\u95C1\u9F59", "b\xE1o": "\u7A87\u96F9", "b\u01CEo": "\u5B9D\u6009\u9971\u4FDD\u9E28\u5BB2\u73E4\u5822\u5AAC\u8446\u5BDA\u98F9\u98FD\u8913\u99C2\u9CF5\u7DE5\u9D07\u8CF2\u85F5\u5BF3\u5BF6\u974C", "b\xE0o": "\u52FD\u72B3\u62A5\u6009\u62B1\u8C79\u8DB5\u94C7\u83E2\u86AB\u888C\u5831\u924B\u9C8D\u9AB2\u9AF1\u8663\u9B91\u5124\u66D3\u5697\u66DD\u7206\u72A6\u5FC1\u9464", "bei": "\u5457\u5504", "b\u0113i": "\u9642\u5351\u676F\u67F8\u76C3\u5EB3\u686E\u60B2\u63F9\u68D3\u6911\u7891\u9E4E\u7B84\u8AC0\u979E\u85E3\u9D6F", "b\u011Bi": "\u9273", "b\xE8i": "\u8D1D\u5B5B\u72C8\u8C9D\u90B6\u5907\u6601\u676E\u726C\u82DD\u90E5\u94A1\u4FFB\u500D\u6096\u72FD\u505D\u5079\u6896\u73FC\u9101\u5099\u50C3\u60EB\u68D1\u68D3\u7119\u7432\u8EF0\u8F88\u6102\u789A\u7999\u84D3\u86FD\u7295\u8919\u8A96\u9781\u9AB3\u8F29\u92C7\u618A\u7CD2\u97B4\u943E", "b\u0113n": "\u6CCD\u8D32\u681F\u55AF\u7287\u8CC1\u951B\u6F30\u931B\u87E6", "b\u011Bn": "\u5932\u672C\u82EF\u5959\u755A\u7FC9\u694D", "b\xE8n": "\u574B\u574C\u6CCD\u7083\u5034\u6379\u6873\u6E00\u7B28\u9029\u64AA", "b\u0113ng": "\u4F3B\u794A\u595F\u5D29\u7D63\u958D\u55D9\u5D6D\u75ED\u5623\u7DB3\u7E43", "b\xE9ng": "\u752E\u752D", "b\u011Bng": "\u57C4\u57F2\u83F6\u7423\u742B\u7DB3\u7E43\u979B", "b\xE8ng": "\u6CF5\u8FF8\u580B\u902C\u63FC\u8DF0\u5874\u7DB3\u750F\u955A\u7E43\u8E66\u93F0", "b\u012B": "\u7680\u5C44\u506A\u6BF4\u903C\u6945\u698C\u8C4D\u8795\u9D56\u9CBE\u939E\u9C0F", "b\xED": "\u8378\u9F3B\u5B36", "b\u01D0": "\u5315\u6BD4\u5936\u673C\u4F4A\u5421\u59A3\u6C98\u7595\u7EB0\u5F7C\u6BDE\u80B6\u67C0\u79D5\u4FFE\u5A1D\u7B14\u7C83\u7D15\u822D\u555A\u5D25\u7B46\u9119\u805B\u8C8F", "b\xEC": "\u5E01\u5FC5\u6BD5\u95EC\u95ED\u4F56\u5752\u5E87\u8298\u8BD0\u90B2\u5487\u59BC\u602D\u6036\u7541\u7540\u80B6\u82FE\u54D4\u67F2\u6BD6\u73CC\u7550\u75AA\u7955\u80C7\u835C\u8D32\u965B\u6BD9\u72F4\u7562\u7B13\u7C8A\u8890\u94CB\u5A62\u655D\u65C7\u6890\u7D34\u7FCD\u8406\u841E\u9587\u9588\u9589\u581B\u5F3C\u5F3B\u610A\u610E\u6E62\u7695\u7986\u7B5A\u8A56\u8CB1\u8CC1\u8D51\u55F6\u5F43\u6ED7\u6EED\u714F\u75FA\u75F9\u7764\u7765\u8177\u84D6\u84FD\u870C\u88E8\u8DF8\u924D\u959F\u98F6\u5E63\u5F0A\u719A\u7359\u78A7\u7A2B\u7B85\u7B86\u7DBC\u853D\u912A\u999D\u5E64\u6F77\u7358\u7F7C\u8945\u99DC\u9AF2\u58C1\u5B16\u5EE6\u7BE6\u7BF3\u7E2A\u859C\u89F1\u907F\u9B85\u6583\u6FDE\u8E55\u979E\u9AC0\u5970\u74A7\u9128\u939E\u93CE\u9946\u7E74\u8963\u895E\u97B8\u97E0\u9B53\u8E83\u8E84\u9A46\u9D9D\u6707\u8D14\u9434\u9DDD\u9DE9\u9F0A", "bi\u0101n": "\u8FBA\u8FB9\u709E\u782D\u7B3E\u7335\u7F16\u8439\u7178\u7251\u7502\u7BAF\u7CC4\u7DE8\u81F1\u8759\u9795\u7371\u9089\u937D\u9CCA\u908A\u97AD\u9BFE\u9BFF\u7C53\u7C69", "bi\u01CEn": "\u8D2C\u75BA\u7A86\u533E\u8CB6\u60FC\u63D9\u78A5\u7A28\u890A\u7CC4\u9D18\u85CA\u89B5\u9DA3", "bi\xE0n": "\u535E\u5F01\u5FED\u6283\u6C73\u6C74\u82C4\u91C6\u53D8\u5CC5\u73A3\u5909\u662A\u898D\u5FA7\u7F0F\u904D\u959E\u8FA1\u7DF6\u8251\u8ADA\u8FA7\u8FA8\u8FA9\u8FAB\u8FAE\u8FAF\u8B8A", "bi\u0101o": "\u706C\u6753\u6807\u98D1\u9A89\u9ADF\u5F6A\u6DF2\u730B\u813F\u98A9\u50C4\u5882\u5E56\u647D\u6EEE\u8508\u98AE\u9AA0\u6A19\u719B\u8194\u8198\u9E83\u762D\u78E6\u9556\u98DA\u98D9\u5126\u6AA6\u7BFB\u98B7\u700C\u85E8\u8B24\u7202\u81D5\u8D06\u93E2\u7A6E\u9573\u98C8\u98C6\u98CA\u98C7\u9463\u9A6B", "bi\xE1o": "\u5AD1", "bi\u01CEo": "\u8868\u5A4A\u88F1\u8AD8\u893E\u9336\u6AA6", "bi\xE0o": "\u4FF5\u647D\u9CD4", "bi\u0113": "\u67ED\u618B\u87DE\u765F\u9CD6\u9C49\u9F08\u864C\u9F9E", "bi\xE9": "\u5225\u67F2\u8382\u86C2\u5FB6\u8952\u87DE\u8E69", "bi\u011B": "\u765F", "bi\xE8": "\u5225\u5F46", "b\u012Bn": "\u6C43\u90A0\u73A2\u780F\u5BBE\u5F6C\u68B9\u50A7\u658C\u6915\u6EE8\u7F24\u69DF\u7478\u8C69\u8CD3\u8CD4\u9554\u5110\u6FD2\u983B\u6FF1\u6FF5\u8668\u8C73\u6AB3\u74B8\u7015\u9726\u7E7D\u944C\u986E", "b\u01D0n": "", "b\xECn": "\u6448\u6BA1\u8191\u9AE9\u5110\u64EF\u9B02\u6BAF\u81CF\u9ACC\u9B13\u9AD5\u9B22", "b\u012Bng": "\u51AB\u4ECC\u4ED2\u6C37\u51B0\u5175\u5E77\u681F\u63A4\u68B9\u86C3\u7D63\u69DF\u92F2\u6AB3", "b\u01D0ng": "\u4E19\u90B4\u9643\u6032\u62A6\u79C9\u82EA\u661E\u663A\u67C4\u70B3\u997C\u772A\u504B\u5C5B\u5BCE\u68C5\u7415\u7980\u7A1F\u9235\u927C\u9786\u9905\u9920\u979E\u97B8", "b\xECng": "\u4E26\u4F75\u5E77\u678B\u57AA\u5EB0\u5002\u6824\u75C5\u7A89\u7ADD\u504B\u50A1\u5BCE\u6452\u8A81\u9BA9\u9750", "bo": "\u5575\u8514\u5643", "b\u014D": "\u7676\u62E8\u6CE2\u7677\u73BB\u525D\u54F1\u76CB\u7835\u8DB5\u94B5\u997D\u7D34\u7F3D\u83E0\u88B0\u6E8A\u7886\u9262\u50E0\u5D93\u64A5\u64AD\u9911\u78FB\u7921\u8E73\u76AA\u9A4B\u9C4D", "b\xF3": "\u4EE2\u5F74\u8091\u9A73\u5E1B\u72DB\u74DD\u82E9\u4FBC\u67ED\u80C9\u90E3\u4EB3\u632C\u6D61\u74DF\u79E1\u88AF\u94B9\u94C2\u6872\u6DFF\u8116\u8236\u8421\u88B9\u535A\u6B95\u6E24\u8467\u9E41\u613D\u640F\u733C\u9251\u9238\u998E\u9C8C\u50F0\u6991\u717F\u7254\u7B94\u818A\u824A\u8A96\u999B\u99C1\u8E23\u92CD\u9548\u58C6\u999E\u99EE\u9B8A\u7A5B\u894F\u8B08\u5697\u61EA\u7C19\u939B\u993A\u9D53\u7CEA\u9AC6\u9AC9\u6B02\u896E\u7934\u946E", "b\u01D2": "\u7677\u86BE\u8DDB", "b\xF2": "\u5B79\u64D7\u64D8\u6A97\u6A98\u8B52\u8617", "b\u016B": "\u5CEC\u5EAF\u900B\u94B8\u6661\u923D\u8AA7\u9914\u933B\u9BC6\u9D4F", "b\xFA": "\u9CEA\u8F50\u91AD", "b\u01D4": "\u535F\u8865\u54FA\u6355\u636C\u88DC\u9E14", "b\xF9": "\u5E03\u4F48\u5425\u6B65\u5498\u6016\u62AA\u6B69\u6B68\u67E8\u949A\u52CF\u57D4\u57D7\u6091\u6357\u8379\u90E8\u57E0\u5A44\u74FF\u9208\u5ECD\u8500\u7B81\u8E04\u90F6\u7BF0\u9922", "c\u0101": "\u5693\u64E6\u6503", "c\u01CE": "\u7924\u7938", "c\xE0": "\u906A\u56C3", "c\u0101i": "\u5072\u731C", "c\xE1i": "\u624D\u6250\u6750\u8D22\u8CA1\u88C1\u7E94", "c\u01CEi": "\u6BDD\u5038\u554B\u57F0\u5A47\u5BC0\u5F69\u63A1\u68CC\u776C\u8DF4\u7DB5\u8E29", "c\xE0i": "\u57F0\u5BC0\u83DC\u8521\u7E29", "c\u0101n": "\u53C3\u53C4\u98E1\u9A96\u53C5\u55B0\u6E4C\u50AA\u5B20\u9910\u7218\u9A42\u56CB", "c\xE1n": "\u6B8B\u8695\u60ED\u6B98\u615A\u6472\u8745\u6159\u883A\u8836", "c\u01CEn": "\u60E8\u6701\u6158\u61AF\u7A47\u7BF8\u9EEA\u9EF2", "c\xE0n": "\u707F\u5B71\u50AA\u7CB2\u5607\u647B\u510F\u6FAF\u8592\u71E6\u74A8\u8B32\u93D2", "c\u0101ng": "\u4ED3\u4EFA\u4F27\u6CA7\u82CD\u73B1\u9E27\u5009\u8231\u5096\u51D4\u5D62\u6EC4\u734A\u84BC\u7472\u6FF8\u7BEC\u8259\u87A5\u9DAC", "c\xE1ng": "\u5328\u81E7\u6B0C\u9476", "c\xE0ng": "\u8CF6", "c\u0101o": "\u64A1\u64CD\u7CD9", "c\xE1o": "\u66FA\u66F9\u50AE\u5608\u5D86\u6152\u6F15\u84F8\u69FD\u893F\u825A\u87AC\u93EA", "c\u01CEo": "\u5C6E\u8278\u8349\u613A\u6145\u61C6\u9A32", "c\xE0o": "\u808F\u9135\u8959\u9F1C", "c\xE8": "\u5928\u518A\u518C\u5395\u607B\u62FA\u6D4B\u835D\u6547\u755F\u5074\u53A0\u7B27\u7CA3\u8417\u5EC1\u60FB\u6E2C\u7B56\u8434\u7B5E\u7B74\u84DB\u7BA3\u61A1\u7C0E", "c\u0113n": "\u53C3\u53C4\u53C5\u5D7E\u7A47\u7BF8", "c\xE9n": "\u5C91\u6C75\u57C1\u6D94\u7B12", "c\u0113ng": "\u564C", "c\xE9ng": "\u5C42\u66FD\u5C64\u5D92\u6A67\u7AF2\u9A53", "c\xE8ng": "\u8E6D", "c\u012B": "\u5470\u5472\u73BC\u75B5\u8D80\u5068\u8DD0\u7E12\u9AB4\u9ACA\u8800\u9F79", "c\xED": "\u8BCD\u73C1\u5179\u5790\u67CC\u7960\u8328\u74F7\u7CA2\u8A5E\u8F9D\u6148\u7506\u8F9E\u78C1\u96CC\u9E5A\u7CCD\u8FA4\u98FA\u9908\u5B28\u6FE8\u858B\u9D1C\u7920\u8FAD\u9DC0\u9DBF", "c\u01D0": "\u6B64\u4F4C\u6CDA\u73BC\u7689\u5559\u8DD0\u9B86", "c\xEC": "\u673F\u6B21\u4F7D\u523E\u5E9B\u8326\u6828\u83BF\u7D58\u86D3\u8D50\u8786\u8CDC", "c\u014Dng": "\u5306\u56EA\u56F1\u82C1\u5FE9\u679E\u8310\u6031\u60A4\u68C7\u7127\u8471\u6964\u6F17\u8061\u84EF\u8525\u9AA2\u66B0\u6A05\u6A2C\u6F68\u719C\u747D\u7481\u8066\u806A\u779B\u7BF5\u8070\u87CC\u936F\u7E71\u93D3\u93E6\u9A18\u9A44", "c\xF3ng": "\u4E1B\u5F94\u5F93\u5A43\u5B6E\u5F96\u5F9E\u60B0\u6DD9\u742E\u7882\u6152\u6F0E\u6F40\u6F48\u8AB4\u8CE8\u8CE9\u6A37\u931D\u85C2\u53E2\u7047\u6B09\u721C", "c\u01D2ng": "", "c\xF2ng": "\u6121\u6181\u8B25", "c\u014Du": "", "c\xF3u": "", "c\u01D2u": "", "c\xF2u": "\u51D1\u6E4A\u50B6\u6971\u8160\u8F8F\u8F33", "c\u016B": "\u601A\u7C97\u89D5\u9E81\u9E84\u6A7B\u9E86\u9EA4", "c\xFA": "\u5F82\u6B82", "c\u01D4": "\u76BB", "c\xF9": "\u4FC3\u731D\u8128\u5AA8\u7604\u851F\u8A8E\u8D97\u5648\u61B1\u8E27\u918B\u762F\u8E3F\u7C07\u7E2C\u8DA8\u9F00\u8E59\u8E75\u8E74\u9863", "cu\u0101n": "\u6C46\u64BA\u92D1\u9569\u8E7F\u651B\u8EA5\u9479", "cu\xE1n": "\u6FFD\u6AD5\u5DD1\u6522\u7052\u6B11\u7A73", "cu\xE0n": "\u7A9C\u6BA9\u71B6\u7ABD\u7BE1\u7ABE\u7C12\u7AC4\u7228", "cu\u012B": "\u96B9\u5D14\u813A\u50AC\u51D7\u5D5F\u7F1E\u5894\u615B\u6467\u69B1\u6F3C\u69EF\u78EA\u7E17\u93D9", "cu\u01D0": "\u6F3C\u71A3\u7480\u8DA1\u76A0", "cu\xEC": "\u4F1C\u5FF0\u75A9\u5005\u7C8B\u7D23\u7FC6\u8103\u8106\u5550\u555B\u5D12\u60B4\u6DEC\u8403\u690A\u6BF3\u7120\u7417\u7601\u7CB9\u7DB7\u7FE0\u81B5\u81AC\u6FE2\u7AC1\u894A\u9847\u81CE", "c\u016Bn": "\u90A8\u6751\u76B4\u8E06\u6F8A\u7AF4\u81A5", "c\xFAn": "\u5B58\u4F9F\u62F5\u58FF\u6F8A", "c\u01D4n": "\u520C\u5FD6", "c\xF9n": "\u5BF8\u540B\u7C7F", "cu\u014D": "\u6413\u7473\u9073\u78CB\u8E49\u919D\u9388", "cu\xF3": "\u8658\u5D6F\u5D73\u75E4\u7749\u77EC\u84AB\u7625\u8516\u9E7E\u9142\u9E7A\u9147", "cu\u01D2": "\u811E", "cu\xF2": "\u5249\u5252\u539D\u590E\u632B\u83A1\u839D\u5EB4\u63AA\u902A\u9509\u84CC\u9519\u7E12\u8ACE\u92BC\u932F", "ch\u0101": "\u6260\u6271\u8286\u81FF\u633F\u505B\u55CF\u63D2\u63F7\u9987\u929F\u9538\u8256\u7580\u5693\u9364\u9388\u9937", "ch\xE1": "\u79C5\u82F4\u579E\u67FB\u832C\u8336\u6348\u688C\u5D56\u643D\u7339\u976B\u6942\u69CE\u8A67\u5BDF\u6456\u6AAB", "ch\u01CE": "\u7D01\u8E45\u9572\u9454", "ch\xE0": "\u4EDB\u597C\u6C4A\u5C94\u4F98\u8869\u8BE7\u524E\u59F9\u7D01\u8A6B", "ch\u0101i": "\u8286\u809E\u9497\u91F5", "ch\xE1i": "\u72B2\u4FAA\u67F4\u8C7A\u7961\u558D\u5115", "ch\u01CEi": "\u831D", "ch\xE0i": "\u867F\u8883\u8A0D\u7625\u8806\u56C6", "ch\u0101n": "\u8FBF\u89C7\u68B4\u6400\u8998\u88E7\u647B\u7DC2\u92D3\u5E68\u895C\u6519", "ch\xE1n": "\u82C2\u5A75\u8C17\u55AE\u5B71\u68CE\u6E79\u7985\u998B\u7158\u7F20\u50DD\u5D83\u5D84\u7351\u8749\u8A97\u92CB\u5103\u5B0B\u5EDB\u6F79\u6F7A\u7DFE\u6FB6\u78DB\u79AA\u6BDA\u87B9\u87D0\u913D\u700D\u7E5F\u87EC\u5133\u5296\u7E75\u87FE\u9141\u56B5\u58E5\u5DC9\u703A\u6B03\u7E8F\u7E92\u8E94\u9575\u826C\u8B92\u9471\u995E", "ch\u01CEn": "\u4EA7\u522C\u65F5\u4E33\u65BA\u6D50\u5257\u8C04\u5574\u7522\u7523\u94F2\u9610\u8487\u5277\u5D7C\u644C\u6EFB\u563D\u5E5D\u8546\u8AC2\u95B3\u9AA3\u71C0\u7C05\u5181\u7E5F\u91A6\u8B42\u93DF\u95E1\u56C5\u705B\u8B87", "ch\xE0n": "\u5FCF\u522C\u5257\u785F\u6472\u5E5D\u5E68\u71C0\u61F4\u5133\u61FA\u7FBC\u97C2\u986B", "ch\u0101ng": "\u4F25\u660C\u5000\u5A3C\u6DD0\u7316\u83D6\u960A\u6919\u7429\u88EE\u9520\u9329\u95B6\u9CB3\u95DB\u9BE7\u9F1A", "ch\xE1ng": "\u4EE9\u4EE7\u514F\u80A0\u82CC\u9578\u9577\u5C1D\u507F\u5E38\u5F9C\u74FA\u8407\u5834\u751E\u8178\u5617\u5872\u5AE6\u747A\u8193\u511F\u5690\u9CBF\u9C68", "ch\u01CEng": "\u6636\u60DD\u5834\u655E\u50D8\u53B0\u5872\u5EE0\u6C05\u92F9", "ch\xE0ng": "\u6005\u739A\u7545\u9B2F\u5531\u60B5\u713B\u7452\u66A2\u757C\u8AAF\u97D4", "ch\u0101o": "\u6284\u5F28\u600A\u6B29\u949E\u8A2C\u712F\u8D85\u9214\u52E6\u6477\u7DBD\u528B\u6A14\u7ABC", "ch\xE1o": "\u724A\u6641\u5DE3\u5DE2\u911B\u9F0C\u6F05\u6A14\u6F6E\u7AB2\u7F7A\u9F02\u8F48\u8B3F", "ch\u01CEo": "\u7092\u7727\u7C86\u7123\u717C\u69F1\u9EA8\u5DD0", "ch\xE0o": "\u4EE6\u4EEF\u8016\u89D8", "ch\u0113": "\u4F21\u8ECA\u4FE5\u7817\u5513\u8397\u7868\u86FC", "ch\xE9": "", "ch\u011B": "\u626F\u5056\u64A6\u5972", "ch\xE8": "\u5C6E\u5F7B\u546B\u577C\u8FE0\u70E2\u70F2\u710E\u8045\u63A3\u63CA\u7869\u9819\u5FB9\u6470\u64A4\u6F88\u52F6\u77AE\u7221", "chen": "\u4F27\u5096", "ch\u0113n": "\u809C\u62BB\u90F4\u6375\u68FD\u741B\u55D4\u7D9D\u7628\u778B\u8AC3\u8CDD\u8B13", "ch\xE9n": "\u5C18\u81E3\u5FF1\u6C89\u8FB0\u9648\u8FE7\u831E\u5BB8\u6815\u8380\u8390\u9673\u6550\u6668\u686D\u68A3\u8A26\u8C0C\u8ED9\u6116\u8DC8\u9202\u7141\u852F\u5875\u6576\u6A04\u760E\u9703\u87B4\u8AF6\u85BC\u9E8E\u66DF\u9DD0", "ch\u011Bn": "\u8DBB\u7876\u789C\u588B\u5926\u78E3\u8E38\u9356\u8D02\u91A6", "ch\xE8n": "\u886C\u722F\u75A2\u9F80\u5041\u8D82\u8D81\u6987\u7A31\u9F53\u9F54\u512D\u56AB\u7A6A\u8C36\u6AEC\u896F\u8B96", "ch\u0113ng": "\u673E\u9637\u6CDF\u67FD\u722F\u51C8\u68E6\u6D7E\u7424\u5041\u6DE8\u7880\u86CF\u667F\u725A\u6436\u8D6A\u50DC\u6186\u645A\u7A31\u9757\u6490\u6491\u7DFD\u6A56\u6A55\u77A0\u8D6C\u9833\u6A89\u7AC0\u7F49\u9397\u77C3\u7A6A\u87F6\u93FF\u9423\u9953\u943A", "ch\xE9ng": "\u6C36\u4E1E\u6210\u673E\u5448\u627F\u67A8\u8BDA\u90D5\u4E57\u57CE\u57E9\u5A0D\u5BAC\u5CF8\u6D06\u837F\u57D5\u6330\u665F\u6D67\u73F9\u6381\u73F5\u7A9A\u812D\u94D6\u5818\u60E9\u63E8\u68D6\u6909\u7A0B\u7B6C\u7D7E\u88CE\u584D\u5856\u6E97\u8AA0\u757B\u9172\u92EE\u6195\u649C\u6F82\u6A59\u6A99\u9BCE\u7013\u61F2\u9A2C", "ch\u011Bng": "\u4FB1\u5F8E\u609C\u901E\u9A8B\u5EB1\u7748\u88CE\u9A01", "ch\xE8ng": "\u79E4\u725A\u7A31\u7AC0\u7A6A", "chi": "\u9EB6", "ch\u012B": "\u5403\u599B\u54E7\u5F68\u80F5\u86A9\u9E31\u74FB\u7735\u7B1E\u7C9A\u55AB\u8A35\u55E4\u5AB8\u645B\u75F4\u7D7A\u6A06\u5644\u6BA6\u779D\u8ABA\u566D\u87AD\u9D1F\u9D44\u7661\u9B51\u9F5D\u6521\u5F72\u9ED0", "ch\xED": "\u5F1B\u6C60\u9A70\u8FDF\u577B\u6CB6\u72CB\u830C\u8FE1\u6301\u67E2\u7AFE\u834E\u4FFF\u6B6D\u801B\u83ED\u86B3\u8D7F\u7B42\u8CBE\u9045\u8DE2\u905F\u99B3\u7B88\u7B8E\u5880\u5FB2\u6F26\u8E1F\u9072\u7BEA\u8B18\u9349\u908C\u9D97\u9D99", "ch\u01D0": "\u53FA\u4F2C\u6261\u544E\u8094\u4F88\u5376\u9F7F\u5791\u5953\u62F8\u80E3\u6065\u803B\u8687\u88B3\u8C49\u6B3C\u6B6F\u88B2\u88ED\u8A83\u9279\u892B\u9F52", "ch\xEC": "\u5F73\u53F1\u65A5\u4F41\u6758\u707B\u8D64\u996C\u4F99\u62B6\u52C5\u605C\u67C5\u70BD\u52D1\u6347\u7719\u7FC4\u7FC5\u6555\u70FE\u557B\u6E41\u98ED\u50BA\u75F8\u815F\u8A83\u9253\u96F4\u618F\u7608\u7FE4\u906B\u9290\u6157\u6178\u761B\u7FE8\u71BE\u61D8\u8DA9\u9D92\u9DD8", "ch\u014Dng": "\u5145\u5FE1\u6C96\u833A\u6D7A\u73EB\u7FC0\u8202\u5603\u644F\u5FB8\u6183\u61A7\u885D\u7F7F\u825F\u8E56", "ch\xF3ng": "\u866B\u5D08\u5D07\u75CB\u9680\u6F34\u8908\u7DDF\u8769\u87F2\u721E", "ch\u01D2ng": "\u5BA0\u57EB\u5BF5", "ch\xF2ng": "\u94F3\u63F0\u9283", "chou": "\u9B98", "ch\u014Du": "\u62BD\u7270\u5A64\u63AB\u7D2C\u640A\u8DFE\u7633\u7BD8\u9194\u72A8\u72AB", "ch\xF3u": "\u601E\u4FE6\u8BEA\u5E31\u6826\u60C6\u68BC\u7564\u7D2C\u7EF8\u83D7\u6906\u7574\u7D52\u6101\u7697\u7A20\u7B79\u88EF\u8A76\u9167\u916C\u7DA2\u8E0C\u5114\u96D4\u568B\u5B26\u5E6C\u61E4\u76E9\u85B5\u6AAE\u71FD\u96E0\u7587\u7C4C\u8E8A\u91BB\u8B90\u8B8E\u96E6", "ch\u01D2u": "\u4E12\u4E11\u541C\u677D\u677B\u5062\u7785\u919C\u77C1\u9B57", "ch\xF2u": "\u81F0\u905A\u6BA0", "chu": "\u6A7B", "ch\u016B": "\u51FA\u5C80\u521D\u698B\u6462\u6474\u6A17\u8C99\u6AD6\u9F63", "ch\xFA": "\u520D\u9664\u82BB\u801D\u53A8\u6EC1\u84A2\u8C60\u9504\u5AB0\u8021\u84AD\u870D\u8D8E\u924F\u96CF\u7293\u5EDA\u7BE8\u92E4\u6A71\u5E6E\u6AC9\u85F8\u87F5\u8E87\u96DB\u6AE5\u8E70\u9DB5\u8E95", "ch\u01D4": "\u51E6\u6775\u7840\u6918\u8655\u50A8\u696E\u7987\u695A\u891A\u6FCB\u5132\u6A9A\u74B4\u790E\u9F6D\u9F7C", "ch\xF9": "\u4E8D\u51E6\u7ACC\u6035\u6CCF\u7ECC\u8C56\u6B2A\u70AA\u7AD0\u4FF6\u654A\u57F1\u73FF\u7D40\u83C6\u5097\u9110\u6149\u6410\u6EC0\u89E6\u95A6\u510A\u563C\u8AD4\u61B7\u65B6\u6B5C\u81C5\u9EDC\u89F8\u77D7", "chu\u0101": "\u6B3B", "chu\u01CE": "", "chu\xE0": "", "chu\u0101i": "\u640B", "chu\xE1i": "\u8197", "chu\u01CEi": "", "chu\xE0i": "\u555C\u6B3C\u81AA\u8E39", "chu\u0101n": "\u5DDB\u5DDD\u6C1A\u7A7F\u732D\u744F", "chu\xE1n": "\u8221\u8229\u5276\u8239\u570C\u9044\u50B3\u692F\u693D\u6B42\u66B7\u7BC5\u819E\u8F32", "chu\u01CEn": "\u821B\u8348\u5598\u583E\u6B42\u50E2\u8E33", "chu\xE0n": "\u6C4C\u4E32\u7394\u948F\u91E7\u732D\u8CD7\u9DA8", "chu\u0101ng": "\u5205\u75AE\u7A93\u5275\u7A97\u724E\u6450\u7255\u7621\u7ABB", "chu\xE1ng": "\u5E8A\u7240\u55A0\u5647\u6723\u6A66", "chu\u01CEng": "\u95EF\u50B8\u78E2\u95D6", "chu\xE0ng": "\u6006\u5231\u524F\u5259\u5275\u6134", "chu\u012B": "\u5439\u708A\u9FA1", "chu\xED": "\u5782\u5015\u57C0\u6858\u9672\u6376\u83D9\u570C\u6425\u68F0\u8144\u69CC\u787E\u9524\u7BA0\u9318\u939A\u9840", "chu\u01D0": "", "chu\xEC": "\u60D9", "ch\u016Bn": "\u829A\u65FE\u6776\u6625\u8405\u5A8B\u6699\u693F\u69C6\u7443\u7BBA\u877D\u6A41\u8F34\u6AC4\u9C06\u9D9E", "ch\xFAn": "\u7EAF\u80AB\u9659\u5507\u6D71\u7D14\u83BC\u8123\u6E7B\u7289\u6EE3\u8493\u9E51\u6F18\u84F4\u819E\u9187\u9195\u931E\u9BD9\u9D89", "ch\u01D4n": "\u6710\u5046\u8436\u60F7\u7776\u8CF0\u8822", "chu\u014D": "\u9034\u8DA0\u8E14\u6233\u7E5B", "chu\xF2": "\u8FB6\u5437\u8FB5\u62FA\u54FE\u5A16\u5A15\u555C\u5A65\u5A7C\u60D9\u6DB0\u6DD6\u8F8D\u916B\u7DBD\u8E00\u7BB9\u8F1F\u92DC\u9F8A\u64C9\u78ED\u991F\u7E5B\u6B60\u93C3\u56BD\u9F6A\u9461\u5B4E", "da": "\u7E68", "d\u0101": "\u5491\u54D2\u8037\u7B1A\u55D2\u642D\u8921\u5660\u58B6\u6498\u939D\u9389", "d\xE1": "\u8FBE\u8FCF\u8FD6\u8FDA\u547E\u59B2\u601B\u6C93\u57AF\u709F\u7F8D\u8345\u8359\u7557\u5273\u5312\u60EE\u7563\u7B2A\u9039\u6E9A\u8A5A\u9054\u8DF6\u977C\u619A\u8598\u9791\u71F5\u87FD\u943D\u97C3\u9F96\u9F98", "d\u01CE": "", "d\xE0": "\u4EA3\u6C4F\u7714", "d\u0101i": "\u5446\u5454\u7343\u61DB", "d\u01CEi": "\u6B79\u902E\u50A3", "d\xE0i": "\u4EE3\u8BD2\u8F6A\u4FA2\u5788\u5CB1\u5E12\u7519\u7ED0\u8FE8\u5E26\u6020\u67CB\u6B86\u73B3\u8D37\u5E2F\u8CA3\u8ED1\u57ED\u5E36\u7D3F\u86AE\u888B\u8EDA\u902E\u91F1\u68E3\u8A52\u8CB8\u8EE9\u7447\u8DE2\u5ED7\u7B89\u53C7\u66C3\u7DFF\u8773\u99D8\u9B98\u9D0F\u6234\u825C\u9EDB\u7C24\u8E5B\u703B\u9734\u8976\u9EF1\u9746", "d\u0101n": "\u4E39\u5989\u5358\u7708\u7803\u803C\u803D\u90F8\u8043\u8EAD\u9156\u55AE\u5A85\u6116\u6B9A\u7605\u5330\u7BAA\u891D\u9132\u9815\u510B\u52EF\u64D4\u6BAB\u7514\u7649\u894C\u7C1E\u8078", "d\u01CEn": "\u4F14\u5210\u628C\u73AC\u74ED\u80C6\u8874\u75B8\u7D1E\u8D55\u4EB6\u99BE\u64A2\u64A3\u8CE7\u71C0\u9ED5\u81BD\u76BD\u9EF5", "d\xE0n": "\u65E6\u4F46\u5E0E\u547E\u6C8A\u6CF9\u72DA\u8BDE\u550C\u67E6\u758D\u8A11\u5557\u5556\u60D4\u60EE\u6DE1\u840F\u86CB\u557F\u5F3E\u6C2E\u8145\u8711\u89DB\u4EB6\u7605\u7A9E\u84DE\u8A95\u50E4\u5649\u99BE\u9AE7\u510B\u563E\u5F48\u619A\u9188\u61BA\u64D4\u6FB9\u79AB\u9924\u99F3\u9D20\u7649\u81BB\u765A\u56AA\u7E75\u8D09\u972E\u994F\u9EEE", "d\u0101ng": "\u73F0\u88C6\u7B5C\u7576\u5105\u5679\u6FA2\u74AB\u8960\u7C39\u8261\u87F7\u943A\u95E3", "d\u01CEng": "\u515A\u8C20\u7576\u64CB\u8B61\u9EE8\u6529\u7059\u6B13\u8B9C", "d\xE0ng": "\u6C39\u51FC\u5735\u5B95\u7800\u57B1\u8361\u6863\u5052\u83EA\u5A78\u5D35\u6113\u74FD\u903F\u5D63\u7576\u96FC\u6F52\u78AD\u5105\u778A\u8569\u8DA4\u58CB\u64CB\u6A94\u7497\u76EA\u7911\u7C1C\u862F\u95E3", "d\u0101o": "\u5200\u5202\u5FC9\u6737\u6C18\u8220\u91D6\u9C7D\u88EF\u9B5B\u87A9", "d\xE1o": "\u636F", "d\u01CEo": "\u5BFC\u5C9B\u9666\u5CF6\u6363\u7977\u7982\u6417\u969D\u5604\u5D8B\u5D8C\u69DD\u5C0E\u96AF\u58D4\u5DB9\u64E3\u8E48\u6AAE\u79B1", "d\xE0o": "\u8FBA\u5230\u5E31\u60BC\u68BC\u7118\u76D7\u83FF\u6921\u76DC\u7D69\u9053\u7A32\u7B8C\u7FE2\u5675\u7A3B\u8254\u885C\u6AA4\u885F\u5E6C\u71FE\u7FFF\u8EC7\u74D9\u7E9B", "de": "\u65F3", "d\u0113": "\u561A", "d\xE9": "\u6074\u6DC2\u86AE\u60B3\u60EA\u68CF\u951D\u5FB3\u5FB7\u9340", "d\u0113i": "\u561A", "d\u011Bi": "", "d\xE8n": "\u6265\u627D", "d\u0113ng": "\u706F\u767B\u8C4B\u50DC\u5654\u5B01\u71C8\u7492\u7AF3\u7C26\u8260\u8E6C", "d\u011Bng": "\u7B49\u6225", "d\xE8ng": "\u9093\u51F3\u9127\u96A5\u58B1\u5D9D\u6195\u77AA\u78F4\u956B\u6AC8\u7013\u89B4\u9419", "d\u012B": "\u6C10\u4EFE\u4F4E\u5943\u5CBB\u5F7D\u79EA\u889B\u5572\u57DE\u7F9D\u9684\u5824\u6E27\u8D86\u6EF4\u78AE\u6A00\u78FE\u97AE\u93D1", "d\xED": "\u625A\u5EF8\u65F3\u72C4\u8091\u7C74\u82D6\u8FEA\u5519\u654C\u6D5F\u6DA4\u837B\u5547\u6891\u7B1B\u89CC\u976E\u6ECC\u84E7\u99B0\u9AE2\u5600\u5AE1\u7FDF\u850B\u8510\u9814\u6575\u7BF4\u955D\u5681\u85E1\u8C74\u8E62\u93D1\u7CF4\u89BF\u9E10", "d\u01D0": "\u6C10\u538E\u5758\u8BCB\u90B8\u963A\u5467\u577B\u5F24\u62B5\u62DE\u6791\u67E2\u7274\u7825\u638B\u83E7\u89DD\u8A46\u8EE7\u6974\u805C\u9AB6\u9BF3", "d\xEC": "\u5754\u65F3\u6755\u7393\u601F\u67A4\u82D0\u4FE4\u54CB\u57C5\u5E1D\u57CA\u5A23\u9013\u9012\u5059\u688A\u710D\u73F6\u7731\u7976\u7B2C\u83C2\u8C1B\u91F1\u5A82\u63E5\u68E3\u6E27\u7747\u7F14\u8482\u9046\u50C0\u6974\u7998\u8163\u905E\u926A\u5886\u5891\u58AC\u5D7D\u6455\u7590\u78B2\u8515\u8743\u9070\u6178\u750B\u7DE0\u876D\u5DB3\u8AE6\u8ADF\u8E36\u87AE", "di\u01CE": "\u55F2", "di\u0101n": "\u4F54\u6541\u6382\u508E\u53A7\u5D6E\u6EC7\u69C7\u69D9\u7628\u7AB4\u98A0\u8E4E\u5DC5\u985A\u985B\u766B\u5DD3\u6527\u5DD4\u7672\u9F7B", "di\xE1n": "", "di\u01CEn": "\u5178\u594C\u70B9\u5A70\u655F\u6923\u8DD5\u7898\u84A7\u8547\u8E2E\u9EDE\u56B8", "di\xE0n": "\u7535\u963D\u576B\u5E97\u57AB\u6242\u73B7\u75C1\u94BF\u5A5D\u60E6\u6DC0\u5960\u7414\u6BBF\u75F6\u8714\u923F\u96FB\u588A\u58C2\u6A42\u6A5D\u6FB1\u975B\u78F9\u765C\u7C1F\u9A54", "di\u0101o": "\u5201\u53FC\u6C48\u521F\u866D\u51CB\u595D\u5F34\u5F6B\u86C1\u6906\u7431\u8C82\u7889\u9CED\u7797\u932D\u96D5\u9B89\u9CB7\u7C13\u9F26\u9BDB\u9D70", "di\u01CEo": "\u625A\u5C4C\u9CE5", "di\xE0o": "\u5F14\u4F04\u540A\u9493\u76C4\u7A8E\u8A0B\u6389\u91E3\u94DE\u94EB\u7D69\u921F\u7AE8\u84E7\u8A82\u929A\u92B1\u96FF\u9B61\u8ABF\u7639\u7AB5\u92FD\u85CB\u9443", "di\u0113": "\u7239\u8DCC\u893A", "di\xE9": "\u4F5A\u6022\u6CC6\u82F5\u8FED\u54A5\u57A4\u5CCC\u604E\u6315\u6633\u67E3\u7ED6\u80C5\u74DE\u7723\u800A\u5551\u621C\u7730\u8C0D\u558B\u581E\u5D3C\u5E49\u60F5\u63F2\u7573\u7D70\u800B\u81F7\u8A44\u8D83\u8DD5\u8EFC\u957B\u53E0\u696A\u6B9C\u7243\u7252\u8DEE\u5D7D\u789F\u8728\u890B\u69E2\u8253\u8776\u7582\u8ADC\u8E40\u9D29\u87B2\u9CBD\u97A2\u66E1\u7589\u9C08\u758A\u6C0E", "di\u011B": "", "di\xE8": "\u54CB", "d\u012Bng": "\u4EC3\u53EE\u5975\u5E04\u738E\u753C\u753A\u7594\u76EF\u8035\u8670\u914A\u91D8\u976A", "d\u01D0ng": "\u5975\u827C\u9876\u914A\u9802\u9F0E\u5D7F\u9F11\u6FCE\u85A1\u9424", "d\xECng": "\u8BA2\u5FCA\u9964\u77F4\u5B9A\u8A02\u91D8\u98E3\u5576\u639F\u8423\u94E4\u6917\u815A\u7887\u952D\u78A0\u8062\u874A\u92CC\u9320\u78F8\u9841", "di\u016B": "\u4E1F\u4E22\u94E5\u98A9\u92A9", "d\u014Dng": "\u4E1C\u51AC\u549A\u5CBD\u6771\u82F3\u6638\u6C21\u5032\u9E2B\u57EC\u5A3B\u5D2C\u5D20\u6DB7\u7B17\u83C4\u5F9A\u6C2D\u8740\u9B97\u9F15\u9BDF\u9D87\u9DAB", "d\u01D2ng": "\u63F0\u8463\u58A5\u5B1E\u61C2\u7BBD\u856B\u8ACC", "d\xF2ng": "\u52A8\u51BB\u4F97\u578C\u59DB\u5CD2\u606B\u630F\u680B\u6D1E\u72EA\u80E8\u8FF5\u51CD\u6219\u70D4\u80F4\u52D5\u5A3B\u5D20\u7850\u68DF\u6E69\u7D67\u8156\u50CD\u52ED\u71D1\u99E7\u9718", "d\u014Du": "\u543A\u6793\u4FB8\u5517\u515C\u5160\u8538\u6A77\u7797\u7BFC", "d\xF3u": "\u551E", "d\u01D2u": "\u4E67\u9627\u6296\u94AD\u9661\u86AA\u9204", "d\xF2u": "\u540B\u8C46\u90D6\u6D62\u72F5\u8373\u9017\u997E\u9B25\u68AA\u6BED\u6E0E\u8130\u9158\u75D8\u9597\u7AA6\u9B26\u92C0\u9916\u65A3\u7006\u95D8\u7AC7\u9B2A\u9B2C\u9B2D", "d\u016B": "\u53BE\u5262\u9607\u561F\u7763\u918F\u95CD", "d\xFA": "\u72EC\u6D9C\u6E0E\u691F\u724D\u728A\u88FB\u8AAD\u7368\u9316\u51DF\u5335\u5B3B\u7006\u6ADD\u6BB0\u7258\u72A2\u74C4\u76BE\u9A33\u9EE9\u8B80\u8C44\u8D15\u97E3\u9AD1\u945F\u97C7\u97E5\u9EF7\u8B9F", "d\u01D4": "\u7AFA\u7B03\u5835\u668F\u743D\u8D4C\u7779\u89A9\u8CED\u7BE4", "d\xF9": "\u828F\u5992\u675C\u59AC\u59E4\u8370\u79FA\u6675\u6E21\u976F\u9540\u8799\u6581\u6BAC\u934D\u8827\u8839", "du\u0101n": "\u8011\u5073\u526C\u5A8F\u7AEF\u890D\u9374", "du\u01CEn": "\u77ED", "du\xE0n": "\u6BB5\u65AD\u5845\u7F0E\u846E\u6934\u7145\u7456\u8176\u78AB\u953B\u7DDE\u6BC8\u7C16\u935B\u65B7\u8E96\u7C6A", "du\u012B": "\u5796\u5806\u5860\u75FD\u78D3\u9566\u9D2D\u9413\u941C", "du\u01D0": "\u554D\u9827", "du\xEC": "\u961F\u5BF9\u514A\u514C\u5BFE\u6778\u794B\u603C\u966E\u6553\u655A\u968A\u7893\u7D90\u5C0D\u619E\u619D\u6FE7\u6FFB\u85B1\u61DF\u7022\u7029\u8B48\u8B75\u8F5B", "d\u016Bn": "\u5428\u60C7\u8733\u58AA\u58AB\u58A9\u64B4\u7364\u5678\u6489\u6A54\u729C\u7905\u8E7E\u8E72\u9A50", "d\u01D4n": "\u76F9\u8DB8\u8E89", "d\xF9n": "\u4F05\u5749\u5E89\u5FF3\u6C8C\u7096\u76FE\u7818\u9007\u949D\u987F\u9041\u920D\u696F\u9813\u78B7\u906F\u619E\u6F61\u71C9\u8E32", "duo": "", "du\u014D": "\u591B\u591A\u5484\u54C6\u7553\u525F\u6387\u6560\u656A\u6BF2\u88F0\u8DE2\u5689", "du\xF3": "\u4EDB\u593A\u6CB0\u94CE\u526B\u6553\u655A\u55A5\u75E5\u922C\u596A\u51D9\u8E31\u9438", "du\u01D2": "\u6735\u6736\u54DA\u579C\u6306\u57F5\u5D1C\u7F0D\u88B3\u692F\u787E\u8D93\u8EB1\u8EB2\u7D9E\u4EB8\u8EC3\u9B0C\u56B2\u5972", "du\xF2": "\u6755\u675D\u5234\u5241\u67A4\u6CB2\u964A\u964F\u9973\u579C\u5C2E\u6306\u6305\u67C1\u67C2\u67EE\u6857\u8235\u968B\u5AA0\u60F0\u9693\u8DE2\u8DE5\u8DFA\u98FF\u99B1\u58AE\u619C\u99C4\u58AF\u96B3\u9D7D", "\u0113": "\u59B8\u59BF\u5A3F\u5A40\u5C59\u75FE", "\xE9": "\u8BB9\u542A\u56EE\u8FD7\u4FC4\u5CC9\u54E6\u5A25\u5CE9\u5CE8\u6D90\u83AA\u73F4\u8A1B\u7692\u774B\u920B\u9507\u9E45\u78C0\u8A90\u92E8\u981F\u989D\u9B64\u984D\u9D5E\u9D5D\u8B4C", "\u011B": "\u6799\u5A3F\u7828\u60E1\u980B\u5641\u9A00\u9D48", "\xE8": "\u5384\u6239\u6B7A\u5C8B\u9628\u5443\u627C\u82CA\u9638\u545D\u6799\u7810\u8F6D\u54A2\u54B9\u57A9\u59F6\u6D1D\u7808\u530E\u654B\u8685\u997F\u5054\u537E\u580A\u5A3E\u60AA\u7846\u8C14\u8EDB\u9102\u960F\u582E\u5828\u5D3F\u60E1\u6115\u6E42\u843C\u8C5F\u8EF6\u904C\u904F\u922A\u5EC5\u6415\u6424\u6439\u7427\u75F7\u816D\u50EB\u8741\u9537\u9E57\u855A\u907B\u981E\u989A\u9913\u5669\u64DC\u89A8\u8AE4\u95BC\u9929\u9354\u9CC4\u6B5E\u984E\u7918\u6AEE\u9C10\u9D9A\u9C2A\u8B8D\u9F43\u9469\u9F76\u9C77", "\u0113i": "\u8BF6\u6B38\u8A92", "\xE9i": "\u8BF6\u6B38\u8A92", "\u011Bi": "\u8BF6\u6B38\u8A92", "\xE8i": "\u8BF6\u6B38\u8A92", "\u0113n": "\u5940\u6069\u84BD\u717E", "\u011Bn": "\u5CCE", "\xE8n": "\u6441", "\u0113ng": "\u97A5", "\xE9r": "\u513F\u800C\u5150\u6752\u4F95\u5152\u9651\u5CCF\u6D0F\u800F\u834B\u682D\u80F9\u5532\u6895\u88BB\u9E38\u7CAB\u804F\u8F00\u9C95\u96AD\u9AF5\u9B9E\u9D2F\u8F5C", "\u011Br": "\u5C12\u5C13\u5C14\u8033\u8FE9\u6D31\u9975\u682E\u6BE6\u73E5\u94D2\u8848\u723E\u927A\u990C\u99EC\u85BE\u9087\u8DB0", "\xE8r": "\u4E8C\u5F0D\u5F10\u4F74\u5235\u54A1\u8D30\u8CAE\u8CB3\u8A80\u6A32\u9AF6", "f\u0101": "\u51B9\u6CB7\u767A\u767C\u5F42\u9197\u91B1", "f\xE1": "\u4E4F\u4F10\u59C2\u577A\u57A1\u6D4C\u75BA\u7F5A\u8337\u9600\u6830\u7B29\u50A0\u7B4F\u7782\u7F70\u95A5\u58A2\u7F78\u6A43\u85C5", "f\u01CE": "\u4F71\u6CD5\u5CDC\u781D\u9345\u704B", "f\xE0": "\u73D0\u743A\u9AEA\u855F\u9AEE", "f\u0101n": "\u5E06\u5FDB\u72BF\u62DA\u7568\u52EB\u5643\u5B0F\u5E61\u61A3\u65D9\u65DB\u7E59\u7FFB\u85E9\u8F53\u98BF\u7C53\u98DC\u9C55", "f\xE1n": "\u51E2\u51E3\u51E1\u5325\u674B\u67C9\u77FE\u7C75\u9492\u8224\u70E6\u8227\u7B32\u91E9\u68E5\u7169\u7DD0\u58A6\u6A0A\u8543\u71D4\u74A0\u81B0\u85A0\u894E\u7FB3\u8E6F\u703F\u792C\u8629\u9407\u9422\u881C\u9DED", "f\u01CEn": "\u53CD\u6255\u4EEE\u8FD4\u6A4E", "f\xE0n": "\u6C3E\u72AF\u597F\u6C4E\u6CDB\u996D\u8303\u8D29\u7548\u8A09\u8ED3\u5A4F\u6873\u68B5\u76D5\u7B35\u8CA9\u8EEC\u98F0\u98EF\u6EFC\u5B0E\u7BC4\u8F3D\u702A", "f\u0101ng": "\u531A\u65B9\u90A1\u6C78\u82B3\u678B\u7265\u794A\u94AB\u6DD3\u8684\u580F\u8DBD\u9201\u933A\u9D0B", "f\xE1ng": "\u9632\u59A8\u623F\u80AA\u57C5\u9C82\u9B74", "f\u01CEng": "\u4EFF\u8BBF\u5F77\u7EBA\u6609\u6618\u74EC\u7706\u5023\u65CA\u772A\u7D21\u822B\u8A2A\u9AE3\u9DAD", "f\xE0ng": "\u653E\u8DBD", "f\u0113i": "\u98DE\u5983\u975E\u98DB\u5561\u5A53\u5A54\u6E04\u7EEF\u6249\u6590\u6683\u7306\u975F\u88F6\u7DCB\u871A\u970F\u9CB1\u9925\u99A1\u9A11\u9A1B\u9BE1\u98DD", "f\xE9i": "\u80A5\u75BF\u6DDD\u8153\u75F1\u8730", "f\u011Bi": "\u670F\u80D0\u532A\u8BFD\u595C\u60B1\u6590\u68D0\u69A7\u7FE1\u855C\u8AB9\u7BDA", "f\xE8i": "\u5420\u72BB\u82BE\u5E9F\u676E\u67F9\u6CB8\u72D2\u80BA\u80CF\u6632\u80C7\u8D39\u4FF7\u5255\u539E\u75BF\u7829\u966B\u5C5D\u7B30\u8409\u5EC3\u8CBB\u75F1\u9544\u5EE2\u66CA\u6A43\u6A68\u7648\u9F23\u6FF7\u87E6\u6AE0\u9428\u9745", "f\u0113n": "\u5429\u5E09\u7EB7\u82AC\u6610\u6C1B\u73A2\u780F\u7AD5\u886F\u7D1B\u7FC2\u68A4\u68FB\u8A1C\u8EAE\u915A\u9216\u96F0\u999A\u6706\u9934\u9959", "f\xE9n": "\u5746\u575F\u59A2\u5C8E\u6C7E\u670C\u678C\u7083\u7F92\u86A0\u86A1\u68FC\u711A\u84B6\u96AB\u58B3\u5E69\u6FC6\u7356\u8561\u9B75\u9CFB\u6A68\u71CC\u71D3\u8C6E\u9F22\u7FB5\u9F16\u8C76\u8F52\u943C\u99A9\u9EC2", "f\u011Bn": "\u7C89\u9EFA", "f\xE8n": "\u574B\u5F05\u594B\u5FFF\u79CE\u507E\u6124\u7CAA\u50E8\u61A4\u7356\u7793\u596E\u6A68\u81B9\u7CDE\u9CBC\u7035\u9C5D", "f\u0113ng": "\u4E30\u4EF9\u51E8\u51EC\u5906\u59A6\u6CA3\u6CA8\u51EE\u67AB\u7090\u5C01\u75AF\u76FD\u781C\u98A8\u57C4\u5CF0\u5CEF\u8391\u5051\u687B\u70FD\u7412\u583C\u5D36\u6E22\u7326\u8451\u950B\u6953\u728E\u8702\u71A2\u760B\u78B8\u50FC\u7BC8\u9137\u92D2\u6A92\u8C50\u93BD\u93E0\u9146\u5BF7\u7043\u8634\u973B\u882D\u974A\u98CC\u9EB7", "f\xE9ng": "\u5906\u6D72\u9022\u5838\u6E84\u99AE\u6453\u6F28\u7D98\u8242\u7E2B", "f\u011Bng": "\u8BBD\u98A8\u8982\u552A\u8AF7", "f\xE8ng": "\u51E4\u5949\u4FF8\u687B\u6E57\u7128\u7148\u8D57\u9CEF\u9CF3\u9D0C\u7E2B\u8CF5", "f\xF3": "\u4ECF\u4EF8\u5772\u68BB", "f\u014Du": "", "f\xF3u": "\u7D11", "f\u01D2u": "\u7F36\u599A\u70B0\u7F39\u7F3B\u6B95\u96EC\u9D00", "f\u016B": "\u4F15\u909E\u544B\u598B\u6299\u59C7\u678E\u739E\u80A4\u6024\u67CE\u7806\u80D5\u8342\u886D\u5A10\u5C03\u634A\u8374\u65C9\u7408\u7D28\u8DBA\u915C\u9EB8\u7A03\u8DD7\u9207\u7B5F\u7D92\u911C\u5B75\u7CB0\u84F2\u6577\u819A\u9CFA\u9EA9\u7CD0\u9EAC\u9EB1\u61EF\u74B7", "f\xFA": "\u4E40\u5DFF\u5F17\u6255\u4F0F\u51EB\u7536\u521C\u5B5A\u6276\u82A3\u8299\u82BE\u5488\u59C7\u5B93\u5CAA\u5E17\u602B\u678E\u6CED\u7EC2\u7ECB\u82FB\u8300\u4FD8\u5798\u67B9\u67EB\u67ED\u6C1F\u6D11\u70A5\u73B8\u7549\u7550\u7953\u7F58\u80D5\u832F\u90DB\u97E8\u9CEC\u54F9\u57BA\u683F\u6D6E\u7557\u7829\u83A9\u86A8\u889A\u5310\u6874\u6DAA\u70F0\u7408\u7B26\u7B30\u7D31\u7D3C\u7FC7\u8274\u83D4\u8659\u88B1\u5E45\u68F4\u7D65\u7F66\u844D\u798F\u7D8D\u8240\u8709\u8F90\u9258\u925C\u98AB\u9CE7\u6991\u7A2A\u7B81\u7B99\u7CB0\u8914\u8C67\u97CD\u98B0\u5E5E\u6F93\u8760\u9AF4\u9D14\u8AE8\u8E3E\u8F3B\u9B84\u7641\u8946\u9BB2\u9EFB\u8965\u9D69\u7E80\u9D9D", "f\u01D4": "\u961D\u5452\u629A\u752B\u4E76\u5E9C\u5F23\u62CA\u65A7\u4FCC\u4FDB\u67CE\u90D9\u4FEF\u86A5\u91E1\u91DC\u636C\u812F\u8F85\u6928\u7124\u76D9\u8151\u6ECF\u8705\u8150\u8F14\u5638\u64AB\u982B\u9B34\u7C20\u9EFC", "f\xF9": "\u8BA3\u4ED8\u5987\u8D1F\u9644\u5490\u577F\u5F7F\u7ACE\u961C\u9A78\u590D\u5CCA\u67CE\u6D11\u7954\u8A03\u8CA0\u8D74\u86A5\u889D\u5069\u51A8\u5A4F\u5A66\u636C\u7D28\u86B9\u5085\u5A8D\u5BCC\u5FA9\u79FF\u842F\u86D7\u8984\u8A42\u8D4B\u6931\u7F1A\u8179\u9C8B\u6991\u79A3\u8907\u8914\u8D59\u7DEE\u8567\u875C\u876E\u8CE6\u99D9\u5B14\u7E1B\u8F39\u9B92\u8CFB\u9351\u9362\u9CC6\u8986\u99A5\u9C12", "g\u0101": "\u65EE\u4F3D\u593E\u560E\u5620", "g\xE1": "\u9486\u8ECB\u5C1C\u91D3\u560E\u5620\u5676\u9337", "g\u01CE": "\u5C15\u738D\u6712\u560E\u5620", "g\xE0": "\u5C2C\u9B40", "g\u0101i": "\u4F85\u8BE5\u90C2\u9654\u5793\u59DF\u5CD0\u8344\u6650\u8D45\u7561\u7974\u7D6F\u9691\u8A72\u8C65\u8CC5\u8CCC", "g\u01CEi": "\u5FCB\u6539\u7D60", "g\xE0i": "\u4E10\u4E62\u5304\u5303\u675A\u9499\u6461\u6E89\u8462\u9223\u6224\u6982\u69E9\u84CB\u6F11\u69EA\u74C2", "g\u0101n": "\u7518\u5FD3\u8FC0\u653C\u7395\u809D\u5481\u5769\u6CD4\u77F8\u82F7\u67D1\u73B5\u7AFF\u75B3\u9150\u7C93\u51F2\u5C32\u5C34\u7B78\u6F27\u9CF1\u5C36\u5C37\u9B50", "g\u01CEn": "\u4EE0\u8289\u76AF\u79C6\u8866\u8D76\u6562\u687F\u7A08\u611F\u6F89\u8D95\u6A44\u64C0\u6FB8\u7BE2\u7C33\u9CE1\u9C64", "g\xE0n": "\u4F44\u65F0\u6C75\u76F0\u7EC0\u501D\u51CE\u6DE6\u7D3A\u8A4C\u9AAD\u5E79\u69A6\u6A8A\u7C33\u8D11\u8D63\u8D1B\u7068", "g\u0101ng": "\u5188\u51AE\u521A\u7EB2\u809B\u5CA1\u7268\u7598\u77FC\u7F38\u525B\u7F61\u5808\u5D17\u6386\u91ED\u68E1\u7285\u583D\u6443\u7899\u7DB1\u7F41\u92FC\u93A0", "g\u01CEng": "\u5C97\u72BA\u5D17", "g\xE0ng": "\u7135\u7139\u7B7B\u69D3\u92FC\u6205\u6206\u6207", "g\u0101o": "\u768B\u7F94\u7F99\u9AD8\u7690\u9AD9\u81EF\u776A\u69D4\u777E\u69F9\u734B\u6A70\u7BD9\u7CD5\u993B\u6ADC\u97DF\u9DCE\u9F1B\u9DF1", "g\u01CEo": "\u5930\u6772\u83D2\u7A01\u641E\u7F1F\u69C0\u69C1\u7A3E\u7A3F\u9550\u7E1E\u85C1\u6ABA\u85F3\u93AC", "g\xE0o": "\u543F\u544A\u52C2\u8BF0\u90DC\u5CFC\u796E\u7970\u9506\u7B76\u799E\u8AA5\u92EF", "g\u0113": "\u6208\u4EE1\u572A\u6262\u72B5\u7EA5\u6213\u8090\u726B\u54AF\u7D07\u9979\u54E5\u88BC\u9E3D\u5272\u5F41\u6ED2\u6228\u6B4C\u9D1A\u64F1\u8B0C\u9D3F\u93B6", "g\xE9": "\u5444\u4F6E\u4F6B\u530C\u630C\u9601\u9769\u654B\u683C\u9B32\u6105\u7332\u81F5\u86D2\u88D3\u9694\u988C\u55DD\u5865\u6EC6\u89E1\u643F\u69C5\u8188\u95A3\u95A4\u7366\u9549\u9788\u97D0\u9ABC\u81C8\u8AFD\u8F35\u64F1\u9BA5\u9BAF\u6ACA\u9391\u9398\u97DA\u8F55\u97B7\u9A14", "g\u011B": "\u500B\u54FF\u7B34\u8238\u5605\u55F0\u84CB\u9C84", "g\xE8": "\u4E87\u5424\u8316\u867C\u500B\u784C\u94EC\u7B87\u927B", "g\u011Bi": "\u7D66", "g\u0113n": "\u6839\u8DDF", "g\xE9n": "\u54CF", "g\u011Bn": "", "g\xE8n": "\u4E99\u4E98\u826E\u831B\u63EF\u6404", "g\u0113ng": "\u522F\u5E9A\u754A\u6D6D\u8015\u83EE\u6929\u713F\u7D59\u7D5A\u8D53\u9E52\u7DEA\u7E06\u7FAE\u8CE1\u7FB9\u9D8A", "g\u011Bng": "\u90E0\u54FD\u57C2\u5CFA\u632D\u7EE0\u803F\u8384\u6897\u7D86\u9CA0\u9ABE\u9BC1", "g\xE8ng": "\u5829\u7DEA\u7E06", "g\u014Dng": "\u5DE5\u5F13\u516C\u53B7\u529F\u653B\u675B\u4F8A\u7CFF\u7CFC\u80B1\u5BAB\u7D05\u5BAE\u606D\u8EAC\u9F9A\u5311\u5868\u5E4A\u6129\u89E5\u8EB3\u6150\u5314\u78BD\u7BE2\u9AF8\u89F5\u9F8F\u9F94", "g\u01D2ng": "\u5EFE\u5DE9\u6C5E\u62F1\u551D\u62F2\u6831\u73D9\u55CA\u8F01\u6F92\u92BE\u978F", "g\xF2ng": "\u8D21\u7FBE\u551D\u8CA2\u55CA\u6129\u6150\u7195", "g\u014Du": "\u4F5D\u6C9F\u82B6\u94A9\u75C0\u88A7\u7F11\u920E\u6E9D\u9264\u7DF1\u8920\u7BDD\u7C3C\u97B2\u97DD", "g\u01D2u": "\u82B6\u5CA3\u72D7\u82DF\u67B8\u73BD\u8009\u8007\u7B31\u8008\u86BC\u8C7F", "g\xF2u": "\u5474\u5778\u6784\u8BDF\u8D2D\u57A2\u59E4\u5193\u5542\u5920\u591F\u508B\u8A3D\u5ABE\u5F40\u6406\u8A6C\u9058\u96CA\u69CB\u7179\u89CF\u6480\u7CD3\u89AF\u8CFC", "g\u016B": "\u675A\u5471\u5495\u59D1\u5B64\u6CBD\u6CD2\u82FD\u5DED\u5DEC\u67E7\u8F71\u5503\u5502\u7F5B\u9E2A\u7B1F\u83C7\u83F0\u86C4\u84C7\u89DA\u8EF1\u8EF2\u8F9C\u9164\u7A12\u9232\u78C6\u7B8D\u7B9B\u5AF4\u7BD0\u6A6D\u9B95\u9D23", "g\xFA": "", "g\u01D4": "\u5903\u53E4\u6262\u6287\u6C69\u8BC2\u8C37\u80A1\u726F\u7F5F\u7F96\u9027\u94B4\u50A6\u5552\u6DC8\u8135\u86CA\u55D7\u5C33\u6132\u8A41\u9989\u6BC2\u8CC8\u9237\u9F14\u9F13\u560F\u6996\u76B7\u9E58\u7A40\u7E0E\u7CD3\u85A3\u6FF2\u76BC\u81CC\u8F42\u9936\u6ACE\u7014\u76EC\u77BD\u9DBB\u8831", "g\xF9": "\u56FA\u6018\u6545\u51C5\u987E\u580C\u5D13\u5D2E\u688F\u727F\u68DD\u797B\u96C7\u69BE\u75FC\u9522\u50F1\u932E\u9CB4\u9BDD\u9867", "gu\u0101": "\u74DC\u522E\u5471\u80CD\u681D\u6870\u94E6\u9E39\u6B44\u7171\u98AA\u8D8F\u5280\u7DFA\u929B\u8AE3\u8E3B\u92BD\u98B3\u9D30\u9A27", "gu\xE1": "", "gu\u01CE": "\u518E\u53E7\u5459\u5471\u54BC\u5250\u526E\u5BE1", "gu\xE0": "\u5366\u576C\u8BD6\u6302\u5569\u639B\u7F63\u88BF\u7D53\u7F6B\u8902\u8A7F", "gu\u0101i": "\u4E56", "gu\xE1i": "\u53CF", "gu\u01CEi": "\u62D0\u67B4\u67FA\u7F6B\u7B89", "gu\xE0i": "\u592C\u602A\u6060", "gu\u0101n": "\u5173\u7EB6\u5B98\u77DC\u898C\u500C\u77DD\u839E\u6DAB\u68FA\u8484\u7AA4\u959E\u7DB8\u95A2\u761D\u764F\u89B3\u95D7\u9CCF\u95DC\u9C25\u89C0\u9C5E", "gu\u01CEn": "\u839E\u9986\u742F\u75EF\u7B66\u65A1\u7BA1\u8F28\u74AD\u8218\u9327\u9928\u9CE4", "gu\xE0n": "\u535D\u6BCC\u4E31\u8D2F\u6CF4\u898C\u60BA\u60EF\u63BC\u6DC9\u8CAB\u60B9\u797C\u6163\u645C\u6F45\u9066\u6A0C\u76E5\u7F46\u96DA\u89B3\u8E80\u93C6\u704C\u721F\u74D8\u77D4\u7936\u9E73\u7F50\u89C0\u9475\u6B1F\u9C79\u9E1B", "gu\u0101ng": "\u5149\u706E\u709A\u709B\u7097\u54A3\u5799\u59EF\u6304\u6D38\u832A\u6844\u70E1\u73D6\u80F1\u7844\u50D9\u8F04\u6F62\u92A7\u9EC6", "gu\u01CEng": "\u5E83\u72B7\u5EE3\u7377\u81E9", "gu\xE0ng": "\u4FC7\u6844\u901B\u81E6\u6497", "gu\u012B": "\u5F52\u572D\u59AB\u89C4\u90BD\u7688\u8325\u95FA\u5E30\u73EA\u80FF\u4E80\u7845\u7A90\u88BF\u898F\u5AAF\u5EC6\u691D\u7470\u90CC\u5AE2\u646B\u95A8\u9C91\u5B00\u5DB2\u69E3\u69FB\u69FC\u9CFA\u749D\u77A1\u9F9C\u9BAD\u5DC2\u6B78\u96DF\u9B36\u9A29\u6AF0\u6AF7\u74CC\u862C\u9B39", "gu\u01D0": "\u5B84\u6C3F\u6739\u8F68\u5E8B\u4F79\u5326\u8BE1\u9652\u579D\u59FD\u6051\u6531\u7678\u8ECC\u9B3C\u5EAA\u796A\u8ED3\u532D\u6677\u6E40\u86EB\u89E4\u8A6D\u53AC\u7C0B\u87E1", "gu\xEC": "\u6530\u523F\u523D\u660B\u7085\u6531\u8D35\u6842\u6867\u532E\u772D\u784A\u8DB9\u6922\u7324\u7B40\u8CB4\u6E8E\u84D5\u8DEA\u5331\u7786\u528A\u528C\u5DA1\u648C\u69F6\u879D\u6A3B\u6A9C\u77B6\u79AC\u7C02\u6AC3\u7650\u8958\u9400\u9CDC\u97BC\u944E\u9C56\u9C65", "g\u01D4n": "\u4E28\u886E\u60C3\u784D\u7EF2\u889E\u8F8A\u6EDA\u84D8\u88F7\u6EFE\u7DC4\u8509\u78D9\u7DF7\u8F25\u9CA7\u9B8C\u9BC0", "g\xF9n": "\u7754\u8B34", "guo": "", "gu\u014D": "\u5459\u54BC\u54B6\u57DA\u90ED\u556F\u581D\u5D1E\u6E26\u7313\u6947\u8052\u921B\u9505\u588E\u7611\u5613\u5F49\u6FC4\u8748\u934B\u5F4D\u87C8\u61D6\u77CC", "gu\xF3": "\u56D7\u56EF\u56F6\u56FB\u56FD\u5700\u654B\u5590\u570B\u5E3C\u63B4\u8158\u6451\u5E57\u6156\u6F0D\u805D\u852E\u8195\u8662\u7C02\u9998", "gu\u01D2": "\u679C\u60C8\u6DC9\u83D3\u9983\u6901\u8901\u69E8\u7CBF\u7DB6\u873E\u88F9\u8F20\u991C\u6ACE", "gu\xF2": "\u904E\u8142\u9439", "h\u0101": "\u867E\u7D26\u94EA\u927F\u8766", "h\xE1": "", "h\u01CE": "\u5964", "h\xE0": "", "h\u0101i": "\u548D\u55E8", "h\xE1i": "\u90C2\u5B69\u9AB8\u9084\u56A1", "h\u01CEi": "\u6D77\u80F2\u70F8\u5870\u917C\u91A2", "h\xE0i": "\u4EA5\u598E\u62F8\u9A87\u5BB3\u6C26\u7332\u7D6F\u55D0\u9900\u99ED\u99F4\u995A", "han": "\u516F\u7233", "h\u0101n": "\u72B4\u4F44\u9878\u54FB\u86B6\u9163\u9807\u5AE8\u8C3D\u61A8\u99A0\u9B7D\u6B5B\u9F3E", "h\xE1n": "\u9097\u542B\u6C75\u90AF\u51FD\u80A3\u51FE\u8677\u5505\u5705\u5A22\u6D5B\u7B12\u5D21\u6657\u6892\u6DB5\u7113\u7400\u5BD2\u5D45\u97E9\u6937\u751D\u7B68\u99AF\u872C\u6F8F\u92E1\u97D3", "h\u01CEn": "\u4E06\u7F55\u6D6B\u558A\u8C43\u95DE", "h\xE0n": "\u4EE0\u5388\u6C49\u5C7D\u5FD3\u625E\u95EC\u653C\u65F0\u65F1\u80A3\u5505\u57BE\u608D\u634D\u6D86\u7302\u839F\u6658\u710A\u83E1\u91EC\u9588\u7694\u7745\u50BC\u86FF\u9894\u99AF\u6496\u6F22\u850A\u872D\u9CF1\u66B5\u71AF\u8F1A\u92B2\u92CE\u61BE\u64BC\u7FF0\u8792\u9837\u9844\u99FB\u8B40\u96D7\u701A\u9DBE", "h\u0101ng": "", "h\xE1ng": "\u909F\u5994\u82C0\u8FD2\u65BB\u676D\u57B3\u7ED7\u6841\u7B10\u822A\u86A2\u9883\u88C4\u8CA5\u7B55\u7D4E\u980F\u9B67", "h\xE0ng": "\u5FFC\u6C86\u7B10", "h\u0101o": "\u8320\u84BF\u5686\u8585\u85A7", "h\xE1o": "\u4E5A\u6BDC\u547A\u7AD3\u768B\u869D\u6BEB\u6903\u55E5\u7346\u865F\u8C89\u5651\u7354\u8C6A\u5637\u734B\u8AD5\u512B\u568E\u58D5\u6FE0\u7C47\u8814\u8B79", "h\u01CEo": "\u90DD", "h\xE0o": "\u660A\u4FB4\u6626\u79CF\u54E0\u604F\u608E\u6D69\u8017\u6667\u6DCF\u5090\u7693\u9117\u6EC8\u6EDC\u8055\u865F\u66A0\u66A4\u66AD\u6F94\u769C\u769E\u9550\u66CD\u76A1\u8583\u76A5\u85C3\u93AC\u98A2\u704F\u9865\u9C1D\u705D", "h\u0113": "\u8BC3\u62B2\u6B31\u8A36\u55EC\u881A", "h\xE9": "\u79BE\u7EA5\u5459\u52BE\u548A\u54BC\u59C0\u6CB3\u90C3\u5CC6\u66F7\u67C7\u72E2\u76C7\u7C7A\u7D07\u9602\u9978\u6546\u76C9\u76CD\u8377\u91DB\u555D\u6DB8\u6E2E\u76D2\u83CF\u8402\u9F81\u559B\u60D2\u7CAD\u8A38\u988C\u6941\u6BFC\u6F95\u84CB\u8A65\u8C88\u8C89\u924C\u9616\u9C84\u6705\u7186\u95A1\u95A4\u9904\u9E56\u9EA7\u5648\u981C\u7BD5\u7FEE\u879B\u9B7A\u7909\u95D4\u97A8\u9F55\u8988\u9DA1\u76AC\u9449\u9FA2", "h\u011B": "", "h\xE8": "\u548A\u62B2\u578E\u8D3A\u54EC\u8894\u96BA\u5BC9\u7103\u60D2\u7332\u8CC0\u55C3\u7142\u788B\u7187\u8910\u8D6B\u9E64\u7FEF\u5687\u58D1\u764B\u8B1E\u71FA\u7200\u9DAE\u9DB4\u974D\u974E\u9E16\u974F", "h\u0113i": "\u9ED2\u9ED1\u55E8\u6F76", "h\xE9n": "\u62EB\u75D5\u978E", "h\u011Bn": "\u4F77\u54CF\u5F88\u72E0\u8A6A\u5677", "h\xE8n": "\u6068\u5677", "h\u0113ng": "\u4EA8\u54FC\u6099\u6DA5\u811D", "h\xE9ng": "\u59EE\u6046\u6052\u6841\u70C6\u73E9\u80FB\u9E3B\u6497\u6A6B\u8861\u9D34\u9D46\u8605\u9445", "h\xE8ng": "\u6099\u5548\u6A6B", "hng": "\u54FC", "h\u014Dng": "\u53FF\u543D\u544D\u7074\u8F70\u8A07\u70D8\u8EE3\u63C8\u6E39\u7122\u7861\u8C3E\u85A8\u8F37\u569D\u9367\u5DC6\u8F5F", "h\xF3ng": "\u53B7\u4EDC\u5F18\u53FF\u5985\u5C78\u5430\u5B8F\u6C6F\u7392\u74E8\u7EAE\u95F3\u5B96\u6CD3\u739C\u82F0\u57AC\u5A02\u6C97\u6D2A\u7AD1\u7D05\u7FBE\u836D\u8679\u6D64\u6D72\u7D18\u7FC3\u803E\u7854\u7D2D\u8C39\u9E3F\u6E31\u6E84\u7AE4\u7CA0\u8453\u8452\u921C\u958E\u7D8B\u7FDD\u8C3C\u6F42\u9277\u9783\u9B5F\u7BCA\u92D0\u5F4B\u9710\u9EC9\u971F\u9D3B\u9ECC", "h\u01D2ng": "\u551D\u664E\u55CA\u6129\u6150", "h\xF2ng": "\u8BA7\u8A0C\u95A7\u6494\u6F92\u92BE\u857B\u95C2\u9B28\u95C0", "h\u014Du": "\u9F41", "h\xF3u": "\u77E6\u9107\u5589\u5E3F\u7334\u8454\u760A\u777A\u9297\u7BCC\u7CC7\u7FED\u9ABA\u7FF5\u936D\u9931\u9BF8", "h\u01D2u": "\u543C\u543D\u72BC\u5474", "h\xF2u": "\u540E\u90C8\u539A\u5795\u5F8C\u6D09\u77E6\u8329\u9005\u5019\u5820\u8C5E\u9C8E\u9C98\u9B9C\u9C5F", "h\u016B": "\u4E4E\u4E6F\u5322\u864D\u82B4\u547C\u5780\u5FFD\u6612\u66F6\u6CD8\u82F8\u6057\u70C0\u8294\u8F77\u532B\u553F\u60DA\u6DF4\u8656\u8EE4\u96FD\u5611\u5BE3\u6EF9\u96D0\u5E60\u622F\u6B51\u6231\u81B4\u6232\u8B3C", "h\xFA": "\u56EB\u6287\u5F27\u72D0\u74F3\u80E1\u58F6\u96BA\u58F7\u659B\u7100\u5596\u58FA\u5AA9\u6430\u6E56\u7322\u7D57\u846B\u9E44\u695C\u7173\u745A\u74E1\u561D\u851B\u9E55\u9E58\u69F2\u7BB6\u7E0E\u8774\u885A\u9B71\u7E20\u879C\u9190\u9836\u89F3\u9378\u992C\u7910\u9D60\u702B\u9B0D\u9C17\u9D98\u9DA6\u9DBB\u9DAE", "h\u01D4": "\u4E55\u6C7B\u864E\u6D52\u4FFF\u6DF2\u8400\u7425\u865D\u6EF8\u933F\u9BF1", "h\xF9": "\u4E92\u5F16\u6236\u6238\u6237\u51B1\u8290\u5E0D\u62A4\u6C8D\u6CAA\u5CB5\u6019\u623D\u6608\u66F6\u6791\u59F1\u6018\u795C\u7B0F\u7C90\u5A5F\u6248\u74E0\u695B\u55C3\u55C0\u7D94\u9120\u96FD\u5AED\u5AEE\u6462\u6EEC\u8530\u69F4\u71A9\u9CF8\u6FE9\u7C04\u8C70\u9359\u569B\u9E71\u89F7\u8B77\u9CE0\u9800\u9C6F\u9E0C", "hu\u0101": "\u542A\u82B2\u82B1\u7809\u57D6\u5A72\u83EF\u691B\u7874\u848A\u5629\u7CC0\u8AAE\u9335\u8624", "hu\xE1": "\u545A\u59E1\u9A85\u83EF\u91EA\u91EB\u94E7\u6ED1\u733E\u5629\u6433\u64B6\u5283\u78C6\u8550\u8796\u92D8\u8B41\u93F5\u9A4A\u9DE8", "hu\xE0": "\u593B\u6779\u67A0\u753B\u8BDD\u5D0B\u6866\u83EF\u5A73\u756B\u5B05\u7575\u89DF\u8A71\u5283\u6466\u6A3A\u5AFF\u69EC\u6F85\u8AD9\u8AE3\u9ECA\u7E63\u8219\u8B6E", "hu\xE1i": "\u6000\u4F6A\u5F8A\u6DEE\u69D0\u8922\u8E1D\u61D0\u8931\u61F7\u7024\u6AF0\u8032\u8639", "hu\xE0i": "\u54B6\u58CA\u58DE\u863E", "hu\u0101n": "\u6B22\u72BF\u72DF\u8C86\u6B53\u9D05\u61C1\u9D4D\u9144\u56BE\u5B49\u61FD\u737E\u6B61\u8B99\u8C9B\u9A69", "hu\xE1n": "\u73AF\u90C7\u5CD8\u6D39\u72DF\u8341\u57B8\u6853\u8408\u8411\u581A\u5BCF\u7D59\u96C8\u7342\u7D84\u7FA6\u849D\u8C86\u953E\u778F\u571C\u5B1B\u5BF0\u6FB4\u7F33\u9084\u961B\u74B0\u8C72\u9370\u96DA\u956E\u9E6E\u7CEB\u7E6F\u9436\u95E4\u9B1F\u74DB", "hu\u01CEn": "\u7746\u7F13\u7DE9", "hu\xE0n": "\u5E7B\u5942\u8092\u5950\u5BA6\u5524\u6362\u6D63\u6DA3\u70C9\u60A3\u6899\u7115\u902D\u559A\u559B\u5D48\u610C\u63DB\u6E19\u75EA\u7165\u744D\u7D84\u8C62\u6F36\u7613\u69F5\u9CA9\u64D0\u6FA3\u85E7\u9BC7\u650C\u56BE\u8F58\u9BF6\u9C00", "hu\u0101ng": "\u5DDF\u8093\u8352\u8841\u5BBA\u671A\u5843\u614C", "hu\xE1ng": "\u7687\u505F\u51F0\u968D\u9EC4\u55A4\u582D\u5A93\u5D32\u5FA8\u60F6\u63D8\u6E5F\u845F\u9051\u9EC3\u697B\u714C\u745D\u58B4\u6F62\u735A\u953D\u71BF\u749C\u7BC1\u824E\u8757\u7640\u78FA\u7A54\u8AFB\u7C27\u87E5\u9360\u992D\u9CC7\u8DAA\u97F9\u9404\u9A1C\u9C09\u9C51\u9DEC", "hu\u01CEng": "\u6C7B\u6033\u604D\u70BE\u5BBA\u6644\u595B\u8C0E\u5E4C\u8A64\u7180\u71BF\u7E28\u8B0A\u5164\u6ACE\u720C", "hu\xE0ng": "\u6130\u6EC9\u69A5\u66C2\u769D\u93A4\u76A9", "hui": "", "hu\u012B": "\u7070\u7073\u8BD9\u54B4\u6062\u62FB\u6325\u6D03\u867A\u8886\u6656\u70E3\u73F2\u8C57\u5A4E\u5A88\u63EE\u7FDA\u8F89\u9693\u6689\u6932\u694E\u7147\u743F\u7762\u7988\u8A7C\u58AE\u5E51\u7773\u8918\u5645\u5655\u649D\u7FEC\u8F1D\u9EBE\u5FBD\u96B3\u7008\u8633\u5B48\u9C34", "hu\xED": "\u56D8\u56DE\u56EC\u4F6A\u5EFB\u5EFD\u605B\u6D04\u8334\u8FF4\u70E0\u8698\u9025\u75D0\u7F0B\u86D5\u86D4\u8716\u85F1\u9BB0\u7E62", "hu\u01D0": "\u867A\u6094\u70E0\u6BC0\u6BC1\u879D\u6BC7\u6A93\u71EC\u8B6D", "hu\xEC": "\u5349\u5C77\u5C76\u6C47\u8BB3\u6CCB\u54D5\u6D4D\u7ED8\u8294\u835F\u8BF2\u605A\u6075\u6867\u70E9\u8D3F\u5F57\u6666\u79FD\u5599\u5EC6\u60E0\u6E4F\u7D75\u7F0B\u7FD9\u9613\u532F\u5F5A\u5F59\u6703\u6ED9\u8A6F\u8CC4\u9892\u50E1\u5612\u7623\u8527\u8AA8\u928A\u571A\u5BED\u6167\u6193\u66B3\u69E5\u6F53\u6F70\u8559\u5666\u5B12\u5FBB\u6A5E\u6BA8\u6FAE\u6FCA\u7369\u74A4\u8588\u8589\u8AF1\u982E\u6A85\u6A9C\u71F4\u74AF\u7BF2\u85F1\u992F\u5696\u61F3\u77BA\u7A62\u7E62\u87EA\u6AD8\u7E6A\u7FFD\u8B53\u5136\u93F8\u95E0\u942C\u9767\u8B7F\u986A", "h\u016Bn": "\u660F\u662C\u8364\u5A5A\u60DB\u6DBD\u7104\u960D\u68D4\u6B99\u6E63\u8477\u7767\u776F\u8512\u95BD\u8F4B", "h\xFAn": "\u5FF6\u6D51\u73F2\u9984\u6E3E\u6E77\u743F\u9B42\u991B\u9F32", "h\u01D4n": "", "h\xF9n": "\u8BE8\u4FD2\u7703\u5031\u5702\u5A6B\u638D\u711D\u6EB7\u5C21\u6141\u7774\u89E8\u8AE2", "hu\u014D": "\u5419\u79F4\u8020\u5290\u6509\u9A1E", "hu\xF3": "\u4F78\u59E1\u6D3B\u79EE\u79F3\u8D8F", "hu\u01D2": "\u706C\u706B\u4F19\u90A9\u94AC\u9225\u6F37\u7177\u5925", "hu\xF2": "\u6C8E\u6216\u8D27\u549F\u4FF0\u6347\u7713\u83B7\u9584\u5268\u5590\u639D\u7978\u8CA8\u60D1\u65E4\u6E71\u798D\u6F37\u7AA2\u84A6\u952A\u5684\u596F\u64ED\u6FCA\u6FE9\u7372\u7BE7\u9343\u970D\u6AB4\u8B0B\u96D8\u77C6\u790A\u7A6B\u956C\u56AF\u5F5F\u7016\u802F\u8267\u85FF\u8816\u56BF\u66E4\u81DB\u7668\u77D0\u944A\u97C4\u9743\u5F60", "j\u012B": "\u4E0C\u8BA5\u51FB\u5209\u53FD\u9965\u4E69\u520F\u573E\u673A\u7391\u808C\u82A8\u77F6\u9E21\u6785\u82D9\u54AD\u525E\u5527\u59EC\u5C50\u79EF\u7B04\u98E2\u57FA\u5EB4\u559E\u5D46\u5D47\u5E7E\u6532\u6567\u671E\u7284\u7B53\u7F09\u8D4D\u55D8\u7578\u7A18\u8DFB\u9CEE\u50DF\u6BC4\u7B95\u7DA8\u7DC1\u9288\u5630\u6483\u69E3\u6A2D\u757F\u7DDD\u89ED\u8AC5\u8CEB\u8E11\u8EB8\u9F51\u58BC\u64BD\u6A5F\u6FC0\u74A3\u79A8\u7A4D\u9324\u96AE\u61E0\u64CA\u78EF\u7C0A\u7F81\u8CF7\u6AC5\u802D\u96DE\u8B4F\u97F2\u9D8F\u8B64\u9416\u9951\u766A\u8E8B\u97BF\u9B55\u9DBA\u9DC4\u7F87\u8640\u9447\u8989\u9459\u9F4F\u7F88\u9E04\u898A", "j\xED": "\u4E41\u4EBD\u4EBC\u53CA\u5C10\u4F0B\u5409\u5C8C\u5F76\u5FE3\u6C72\u7EA7\u5373\u6781\u7680\u4E9F\u4F76\u8BD8\u90C6\u537D\u53DD\u59DE\u6025\u768D\u7B08\u7D1A\u5832\u63E4\u75BE\u89D9\u506E\u5359\u5536\u6956\u6DC1\u710F\u8C3B\u6222\u68D8\u6975\u6B9B\u6E52\u96C6\u5849\u5AC9\u6131\u696B\u84BA\u874D\u8D8C\u8F91\u69C9\u8024\u818C\u92A1\u5DAF\u6F57\u6FC8\u7620\u7BBF\u8540\u857A\u8AD4\u8D9E\u8E16\u978A\u9E61\u6A9D\u878F\u8F2F\u78FC\u7C0E\u85C9\u894B\u8E50\u9353\u8265\u7C4D\u8F5A\u93F6\u9735\u9F4E\u8EA4\u96E7", "j\u01D0": "\u5DF1\u4E2E\u5980\u5C70\u72B1\u6CF2\u866E\u6324\u810A\u638E\u6E08\u9C7E\u5E7E\u621F\u7D66\u5D74\u9E82\u9B62\u64A0\u61BF\u6A76\u64E0\u6FDF\u7A56\u87E3", "j\xEC": "\u5F50\u5F51\u65E1\u8BA1\u8BB0\u4F0E\u5756\u5993\u5FCC\u6280\u6C65\u82B0\u9645\u5242\u5B63\u54DC\u578D\u65E2\u6D0E\u7D00\u830D\u8324\u8360\u8A08\u8FF9\u5264\u755F\u7D12\u7EE7\u89CA\u8A18\u5048\u5BC4\u5BC2\u5E3A\u5F9B\u60B8\u65E3\u689E\u6E08\u7EE9\u5848\u60CE\u81EE\u846A\u8507\u517E\u52E3\u75F5\u7D99\u84DF\u88DA\u8DE1\u969B\u9B3E\u9B5D\u6456\u66A8\u6F03\u6F08\u799D\u7A29\u7A4A\u8A8B\u8DFD\u9701\u9B65\u9C9A\u66A9\u7789\u7A37\u8AC5\u9CAB\u5180\u5291\u66C1\u79A8\u7A44\u858A\u8940\u9AFB\u568C\u61E0\u6A95\u6FDF\u7A56\u7E3E\u7E4B\u7F7D\u85BA\u89AC\u9B86\u6AB5\u6AC5\u6AED\u74BE\u8E5F\u9BFD\u9D4B\u9F4C\u5EED\u61FB\u7660\u7A67\u7E6B\u860E\u9AA5\u9BDA\u7031\u7E7C\u862E\u9C40\u863B\u973D\u9C36\u9C3F\u9DD1\u9C6D\u9A65", "jia": "", "ji\u0101": "\u52A0\u4E6B\u4F3D\u593E\u5B8A\u62B8\u4F73\u62C1\u6CC7\u5F8D\u67B7\u6BE0\u6D43\u73C8\u54FF\u57C9\u633E\u6D79\u75C2\u689C\u7B33\u801E\u8888\u50A2\u7333\u846D\u8DCF\u6935\u728C\u8175\u926B\u5609\u64D6\u9553\u7CD8\u8C6D\u8C91\u9D10\u93B5\u9E9A", "ji\xE1": "\u573F\u593E\u5FE6\u6274\u90CF\u62EE\u835A\u90DF\u550A\u605D\u83A2\u621B\u8125\u88B7\u94D7\u621E\u7330\u86F1\u88CC\u9889\u988A\u86FA\u92CF\u982C\u9830\u9D36\u9D4A", "ji\u01CE": "\u7532\u5CAC\u53DA\u73BE\u80DB\u659A\u94BE\u5A7D\u5FA6\u659D\u6935\u8CC8\u9240\u698E\u69DA\u7615\u6A9F", "ji\xE0": "\u9A7E\u67B6\u5AC1\u5E4F\u8CC8\u69A2\u50F9\u7A3C\u99D5", "ji\u0101n": "\u620B\u5978\u5C16\u5E75\u575A\u6B7C\u51BF\u6214\u73AA\u80A9\u8270\u59E7\u59E6\u517C\u5805\u5E34\u60E4\u730F\u7B3A\u83C5\u83FA\u8C5C\u5094\u63C3\u6E54\u724B\u728D\u7F04\u844C\u9592\u9593\u96C3\u976C\u641B\u6937\u693E\u714E\u744A\u7777\u788A\u7F23\u84B9\u8C63\u6F38\u76E3\u7B8B\u852A\u6A2B\u719E\u7A34\u7DD8\u8551\u8573\u92D1\u9CA3\u9CFD\u9E63\u71B8\u7BEF\u7E11\u92FB\u8271\u97AC\u9930\u99A2\u9E89\u7010\u6FFA\u97AF\u9CD2\u9D51\u6BB1\u791B\u7C48\u9D73\u6515\u7038\u9C14\u6AFC\u6BB2\u8B7C\u9C1C\u9DBC\u7937\u7C5B\u97C0\u9C39\u56CF\u8643\u946F\u97C9", "ji\u01CEn": "\u56DD\u62E3\u67A7\u4FED\u67EC\u8327\u5039\u6338\u6361\u7B15\u51CF\u526A\u5E34\u63F5\u6898\u68C0\u6E55\u8DBC\u583F\u63C0\u63C3\u691C\u6E1B\u7751\u7877\u88E5\u8A43\u950F\u5F3F\u6695\u7450\u7B67\u7B80\u7D78\u8C2B\u5F45\u6229\u622C\u78B1\u5109\u7FE6\u92C4\u64BF\u6A4F\u7BEF\u6AA2\u85C6\u8947\u8949\u8B07\u8E47\u77BC\u7906\u7C21\u7E6D\u8B2D\u93AB\u9B0B\u9C0E\u9E78\u703D\u8812\u9417\u9427\u9E7B\u7C5B\u8B7E\u897A\u9E7C", "ji\xE0n": "\u4EF6\u898B\u4F9F\u5EFA\u996F\u5251\u6D0A\u726E\u8350\u8D31\u4FF4\u5065\u5263\u682B\u6DA7\u73D4\u8230\u5271\u5FA4\u63F5\u88B8\u8C0F\u91F0\u91FC\u5BCB\u65D4\u6701\u6957\u6BFD\u8171\u81F6\u8DC8\u8DF5\u9592\u9593\u8CCE\u9274\u952E\u50E3\u50ED\u6997\u69DB\u6F38\u76E3\u528E\u528D\u58B9\u6F97\u7BAD\u7CCB\u8AD3\u8CE4\u8D9D\u8E10\u8E3A\u5292\u5294\u85A6\u8AEB\u92FB\u9375\u991E\u77B7\u77AF\u78F5\u7900\u87B9\u9373\u97AC\u64F6\u6ABB\u6FFA\u7E5D\u7033\u89B5\u89B8\u8B5B\u93E9\u807B\u8266\u8F5E\u9431\u9452\u9451\u946C\u9473", "ji\u0101ng": "\u6C5F\u59DC\u8333\u7555\u8C47\u5C07\u8441\u757A\u646A\u7FDE\u50F5\u6F3F\u8780\u58C3\u7F30\u8591\u6A7F\u6BAD\u87BF\u9CC9\u7585\u7913\u7E6E\u97C1\u9C42", "ji\u01CEng": "\u8BB2\u5956\u6868\u508B\u5842\u848B\u5968\u596C\u8523\u69F3\u734E\u8029\u8199\u8B1B\u985C", "ji\xE0ng": "\u531E\u5320\u5905\u5F1C\u6D1A\u7EDB\u5C07\u5F36\u5F37\u7D73\u757A\u9171\u52E5\u6EF0\u5D79\u647E\u6F3F\u5F4A\u729F\u7CE1\u91A4\u7CE8\u91AC\u6AE4\u8B3D", "ji\u0101o": "\u827D\u4EA4\u90CA\u59E3\u5A07\u5CE7\u6D47\u832E\u832D\u9A84\u80F6\u654E\u55AC\u6912\u7126\u86DF\u8DE4\u50EC\u5610\u8660\u9C9B\u5B0C\u5D95\u5DA3\u618D\u61A2\u6F86\u81A0\u8549\u71CB\u81B2\u7901\u7A5A\u9BAB\u9D41\u9E6A\u7C25\u87ED\u8F47\u940E\u9A55\u9DE6\u9DEE", "ji\xE1o": "\u77EF", "ji\u01CEo": "\u81EB\u4F7C\u6054\u6322\u72E1\u7EDE\u997A\u6341\u6648\u70C4\u7B05\u768E\u811A\u91E5\u94F0\u6405\u6E6B\u7B4A\u7D5E\u52E6\u656B\u6E6C\u714D\u8173\u8CCB\u50E5\u644E\u6477\u669E\u8E0B\u9278\u9903\u510C\u528B\u5FBA\u649F\u64B9\u6A14\u5FBC\u61BF\u657D\u657F\u71DE\u66D2\u74AC\u77EF\u76A6\u87DC\u7E73\u8B51\u5B42\u7E90\u652A\u705A\u9C4E\u9FA3", "ji\xE0o": "\u53EB\u544C\u5CE4\u630D\u8A06\u608E\u73D3\u7A8C\u7B05\u8F7F\u8F83\u654E\u658D\u8990\u7A96\u7B4A\u899A\u6ED8\u8F03\u5602\u5604\u5626\u65A0\u6F16\u9175\u564D\u5DA0\u6F50\u566D\u5B13\u5FBC\u7365\u7644\u85E0\u8DAD\u8F4E\u91AE\u7042\u89BA\u8B65\u76AD\u91C2", "jie": "\u50F9", "ji\u0113": "\u9636\u7596\u54DC\u7686\u8893\u63A5\u63B2\u75CE\u79F8\u83E8\u968E\u5588\u55BC\u55DF\u5826\u5A98\u5AC5\u6904\u6E5D\u7D50\u813B\u8857\u88D3\u696C\u716F\u744E\u7A2D\u9782\u64D1\u8754\u568C\u7664\u8B2F\u9D9B", "ji\xE9": "\u5369\u536A\u5B51\u5C10\u8BA6\u6262\u5227\u5226\u52AB\u5C8A\u6605\u6762\u523C\u52BC\u6770\u758C\u8871\u8BD8\u62EE\u6D01\u72E4\u8FFC\u5022\u6840\u6854\u685D\u6D2F\u7D12\u83AD\u8A10\u5048\u507C\u5551\u5A55\u5D28\u6377\u63B6\u88B7\u88BA\u5091\u5AAB\u5D51\u7D50\u7D5C\u86E3\u9889\u5D65\u6429\u6976\u6ED0\u776B\u7BC0\u8710\u8A70\u8D8C\u8DF2\u9263\u622A\u69A4\u78A3\u7AED\u84F5\u9C92\u5DB1\u6F54\u7FAF\u8AB1\u8E15\u957C\u978A\u9821\u5E6F\u64F3\u5DBB\u64EE\u790D\u937B\u9B9A\u5DC0\u881E\u8818\u883D", "ji\u011B": "\u59D0\u6BD1\u5A8E\u89E7\u98F7\u6A9E", "ji\xE8": "\u4E2F\u4ECB\u5424\u598E\u5C95\u5E8E\u6212\u5C46\u5C4A\u65BA\u73A0\u754D\u754C\u75A5\u780E\u8878\u8BEB\u501F\u6088\u7D12\u86A7\u5536\u5FA3\u583A\u6950\u743E\u86F6\u89E7\u9AB1\u7297\u8024\u8AA1\u892F\u9B6A\u5DB0\u85C9\u9385\u9DA1", "j\u012Bn": "\u5DFE\u4ECA\u4ED0\u65A4\u9485\u7AFB\u91D2\u91D1\u6D25\u77DC\u781B\u8355\u887F\u89D4\u57D0\u73D2\u77DD\u7D1F\u60CD\u740E\u83F3\u583B\u743B\u7B4B\u91FF\u74A1\u9E76\u9EC5\u895F", "j\u01D0n": "\u4FAD\u537A\u5DF9\u7D27\u5807\u5A5C\u83EB\u50C5\u53AA\u8C28\u9526\u5AE4\u5ED1\u616C\u6F0C\u7DCA\u84F3\u9991\u69FF\u747E\u5118\u9326\u8B39\u9949", "j\xECn": "\u4F12\u52A4\u5997\u8FD1\u8FDB\u6783\u52C1\u6D55\u8369\u6649\u664B\u6D78\u70EC\u7B12\u7D1F\u8D46\u552B\u7972\u9032\u7161\u81F8\u50C5\u5BD6\u6422\u6E8D\u7F19\u9773\u5890\u5AE4\u616C\u6997\u7468\u76E1\u99B8\u50F8\u51DA\u6B4F\u6BA3\u89D0\u5664\u5B10\u6FC5\u7E09\u8CEE\u568D\u58D7\u5B27\u6FDC\u85CE\u71FC\u74B6\u89B2\u8D10\u9F7D", "j\u012Bng": "\u5755\u5759\u5DE0\u4EAC\u6CFE\u7ECF\u830E\u4EB0\u79D4\u834A\u8346\u6D87\u7C87\u5A5B\u60CA\u65CD\u65CC\u7304\u7D4C\u83C1\u6676\u7A09\u8148\u844F\u775B\u7CB3\u7D93\u5162\u7B90\u7CBE\u7DA1\u8059\u92DE\u6A78\u9CB8\u9BE8\u9D81\u9D84\u9E96\u9F31\u9A5A\u9EA0", "j\u01D0ng": "\u4E95\u4E3C\u9631\u522D\u5753\u5B91\u6C6B\u6C6C\u80BC\u5244\u7A7D\u6B8C\u5106\u981A\u5E5C\u61AC\u64CF\u6F8B\u7484\u61BC\u66BB\u749F\u74A5\u9838\u87FC\u8B66", "j\xECng": "\u52A4\u598C\u5F2A\u5F84\u8FF3\u4FD3\u52C1\u5A59\u6D44\u80EB\u501E\u51C8\u5F33\u5F91\u75C9\u7ADE\u8396\u9015\u5A67\u6871\u68B7\u6B91\u6DE8\u7ADF\u7AEB\u811B\u656C\u75D9\u7AE7\u9753\u50B9\u9756\u5883\u734D\u8AA9\u8E01\u9759\u975A\u61BC\u66D4\u955C\u975C\u701E\u9D5B\u93E1\u7AF6\u7AF8", "ji\u014Dng": "\u5182\u518B\u5770\u6243\u57DB\u6244\u6D7B\u7D45\u9284\u99C9\u99EB\u860F\u8614", "ji\u01D2ng": "\u518F\u56E7\u6CC2\u7085\u8FE5\u4FB0\u70AF\u9008\u6D7B\u70F1\u7D45\u715A\u7A98\u988E\u7D97\u81E6\u50D2\u715B\u71B2\u6F83\u8927\u71DB\u9848\u81E9", "ji\xF2ng": "", "ji\u016B": "\u4E29\u52FC\u7EA0\u673B\u725E\u7A76\u7CFA\u9E20\u7CFE\u8D73\u9604\u841B\u557E\u63C2\u63EA\u5279\u63EB\u9CE9\u644E\u7A35\u6A1B\u9B0F\u9B2E", "ji\xFA": "", "ji\u01D4": "\u4E5D\u4E46\u4E45\u4E63\u6C3F\u597A\u6C63\u6766\u7078\u7396\u7CFA\u820F\u97ED\u7D24\u9152\u9579\u97EE", "ji\xF9": "\u531B\u65E7\u81FC\u548E\u759A\u67E9\u67FE\u5003\u6344\u6855\u5313\u53A9\u6551\u5C31\u5EC4\u5ED0\u8205\u50E6\u5ECF\u6166\u6BA7\u820A\u9E6B\u5336\u9BE6\u9E94\u6B0D\u9F68\u9DF2", "j\u016B": "\u51E5\u4F21\u6285\u8ECA\u530A\u5C45\u5CA8\u6CC3\u72D9\u82F4\u9A79\u4FE5\u6BE9\u75BD\u7717\u7820\u7F5D\u9671\u5A35\u5A6E\u5D0C\u63AC\u68AE\u6DBA\u63DF\u6910\u6BF1\u741A\u8152\u8D84\u8DD4\u8DD9\u9514\u88FE\u96CE\u824D\u871B\u8ACA\u8E18\u8EB9\u92E6\u99D2\u64DA\u92F8\u9B88\u9D21\u6A8B\u97A0\u97AB\u9D8B", "j\xFA": "\u5C40\u6CE6\u4FB7\u72CA\u6336\u6854\u5579\u5A45\u6DD7\u7117\u83CA\u90F9\u6908\u6E68\u7291\u8F02\u50EA\u7CB7\u84FB\u8DFC\u95B0\u8D9C\u92E6\u6A58\u99F6\u7E58\u9D59\u8E6B\u9D74\u5DC8\u861C\u9DAA\u9F30\u9F33\u9A67", "j\u01D4": "\u5480\u5CA8\u5F06\u4E3E\u67B8\u77E9\u8392\u6319\u6907\u7B65\u6989\u6998\u849F\u9F83\u8065\u8209\u8E3D\u64E7\u6AF8\u9F5F\u6B05\u8977", "j\xF9": "\u5DE8\u4E6C\u5DEA\u8BB5\u59D6\u5CA0\u6007\u62D2\u6D30\u82E3\u90AD\u5177\u6010\u601A\u62E0\u661B\u6B6B\u70AC\u73C7\u79EC\u949C\u4FF1\u5028\u5036\u5267\u70E5\u7C94\u801F\u86B7\u8893\u57E7\u57FE\u60E7\u8A4E\u8DDD\u7123\u728B\u8DD9\u9245\u98D3\u84A9\u8661\u8C66\u952F\u5BE0\u6133\u7AAD\u805A\u99CF\u5287\u52EE\u5C66\u8E1E\u9B94\u58C9\u61C5\u64DA\u6FBD\u7AB6\u87B6\u907D\u92F8\u5C68\u98B6\u77BF\u8C97\u7C34\u8E86\u91B5\u5FC2\u61FC\u943B", "ju\u0101n": "\u59E2\u52CC\u5A1F\u6350\u6D93\u6718\u688B\u7106\u74F9\u8127\u570F\u88D0\u9E43\u52EC\u92D1\u92D7\u954C\u9799\u93B8\u942B\u8832", "ju\u01CEn": "\u545F\u5DFB\u5E23\u57CD\u6372\u83E4\u9529\u81C7\u9308\u95C2", "ju\xE0n": "\u5946\u52B5\u594D\u5DFB\u5E23\u5F2E\u5026\u52CC\u6081\u684A\u72F7\u7EE2\u96BD\u5A58\u60D3\u6DC3\u74F9\u7737\u9104\u570F\u68EC\u6926\u774A\u7D6D\u7F65\u8143\u96CB\u7760\u7D79\u98EC\u617B\u8528\u5DB2\u92D7\u990B\u7367\u7E33\u5DC2\u7F82\u8B82", "ju\u0113": "\u5658\u6485\u64A7\u5C69\u5C6B", "ju\xE9": "\u4E85\u5B52\u5B53\u51B3\u5214\u6C12\u8BC0\u5437\u599C\u5F21\u6289\u6C7A\u82B5\u53D5\u6CEC\u73A8\u73A6\u6317\u73CF\u75A6\u7804\u7EDD\u8673\u57C6\u6354\u6B2E\u8697\u88A6\u5D2B\u5D1B\u6398\u658D\u6877\u8990\u89D6\u8A23\u8D7D\u8DB9\u5095\u53A5\u7133\u77DE\u7D55\u7D76\u899A\u8D89\u920C\u5282\u7474\u8C32\u99C3\u564A\u5DA1\u5DA5\u61B0\u6485\u71A6\u7234\u7357\u761A\u855D\u8568\u89EE\u9D02\u9D03\u5671\u58C6\u61A0\u6A5C\u6A5B\u71CB\u749A\u7235\u81C4\u9562\u6AED\u7E58\u87E8\u87E9\u7211\u8B4E\u8E77\u8E76\u9AC9\u5337\u77CD\u89BA\u940D\u941D\u9CDC\u704D\u721D\u89FC\u7A71\u5F4F\u6204\u652B\u7383\u9DE2\u77E1\u8C9C\u8EA9\u9481", "ju\u011B": "\u8E76", "ju\xE8": "\u8AB3", "j\u016Bn": "\u519B\u541B\u5747\u6C6E\u59F0\u8880\u8ECD\u94A7\u8399\u8690\u687E\u76B2\u921E\u7885\u7B60\u76B8\u76B9\u89A0\u9281\u929E\u9CAA\u9835\u9E87\u9F9C\u9355\u9BB6\u9E8F\u9E95", "j\u01D4n": "", "j\xF9n": "\u5441\u4FCA\u90E1\u9656\u57C8\u5CFB\u6343\u6D5A\u96BD\u9982\u9A8F\u6659\u710C\u73FA\u68DE\u756F\u7AE3\u8470\u96CB\u5101\u7B98\u7B9F\u8720\u8CD0\u5BEF\u61CF\u9915\u71C7\u6FEC\u99FF\u9D58\u9D54\u9D55\u6508\u651F", "k\u0101": "\u5580", "k\u01CE": "\u4F67\u5494\u54AF\u57B0\u80E9\u88C3\u9272", "k\u0101i": "\u5F00\u5952\u63E9\u950E\u958B\u9426", "k\u01CEi": "\u51EF\u5240\u57B2\u607A\u95FF\u8C48\u94E0\u51F1\u5274\u5605\u6168\u8488\u584F\u5D66\u6137\u8F06\u669F\u9534\u9347\u93A7\u95D3\u98BD", "k\xE0i": "\u5FFE\u708C\u6B2F\u6B2C\u70D7\u52D3\u6112\u613E\u6FED\u938E", "k\u0101n": "\u520A\u681E\u52D8\u9F9B\u582A\u5D41\u6221\u9F95", "k\u01CEn": "\u51F5\u519A\u574E\u627B\u4F83\u780D\u83B0\u5058\u57F3\u60C2\u6B3F\u6B41\u69DB\u8F21\u6ABB\u9851\u7AF7\u8F57", "k\xE0n": "\u884E\u5D01\u5888\u961A\u77B0\u78E1\u95DE\u7AF7\u9B2B\u77D9", "k\u0101ng": "\u5FFC\u95F6\u780A\u7C87\u5EB7\u958C\u5ADD\u5D7B\u6177\u6F2E\u69FA\u7A45\u7CE0\u8EBF\u93EE\u9C47", "k\xE1ng": "", "k\u01CEng": "", "k\xE0ng": "\u4EA2\u4F09\u531F\u909F\u56E5\u6297\u72BA\u95F6\u7095\u94AA\u9227\u958C", "k\u0101o": "\u5C3B\u5D6A\u9ADB", "k\u01CEo": "\u4E02\u6537\u8003\u62F7\u6D18\u6832\u70E4\u85A7", "k\xE0o": "\u6D18\u94D0\u7292\u92AC\u9C93\u9760\u9BB3\u9BCC", "k\u0113": "\u533C\u67EF\u7241\u7271\u73C2\u79D1\u8F72\u75B4\u7822\u8DB7\u94B6\u86B5\u94EA\u5D59\u68F5\u75FE\u842A\u8EFB\u988F\u55D1\u6415\u7290\u7A1E\u7AA0\u9233\u69BC\u8596\u927F\u9897\u6A16\u778C\u78D5\u874C\u9826\u7ABC\u9198\u9846\u9AC1\u791A", "k\xE9": "\u6BBB\u63E2\u6BBC\u7FD7", "k\u011B": "\u5CA2\u70A3\u6E07\u5D51\u6564\u6E34\u8EFB\u959C\u78C6\u5DB1", "k\xE8": "\u514B\u523B\u524B\u52C0\u52CA\u5BA2\u5CC7\u606A\u5A14\u5C05\u6088\u8894\u8BFE\u5801\u6C2A\u9A92\u6118\u785E\u7F02\u8849\u55D1\u6119\u6B41\u6E98\u951E\u78A6\u7DD9\u8250\u8AB2\u6FED\u9301\u790A\u9A0D", "k\u0113i": "\u524B\u5C05", "k\u0113n": "", "k\u011Bn": "\u808E\u80AF\u80BB\u57A6\u6073\u5543\u9F82\u8C64\u8C87\u9F88\u58BE\u9339\u61C7", "k\xE8n": "\u73E2\u63AF\u784D\u88C9\u8903", "k\u0113ng": "\u52A5\u962C\u5748\u5751\u5994\u6333\u7841\u6BB8\u727C\u63C1\u785C\u94FF\u787B\u647C\u8A99\u92B5\u935E\u93D7", "k\u011Bng": "\u787B", "k\u014Dng": "\u5025\u57EA\u5D06\u60BE\u6DB3\u690C\u787F\u7B9C\u8EBB\u9313\u9D7C", "k\u01D2ng": "\u5B54\u5025\u6050\u60BE", "k\xF2ng": "\u77FC\u63A7\u7FAB\u979A", "k\u014Du": "\u62A0\u82A4\u770D\u7717\u527E\u5F44\u6473\u7798", "k\u01D2u": "\u53E3\u52B6\u7AD8", "k\xF2u": "\u53E9\u6263\u4F5D\u6010\u6542\u51A6\u5BBC\u5BC7\u91E6\u7A9B\u7B58\u6EF1\u8532\u853B\u7789\u7C06\u9DC7", "k\u016B": "\u625D\u5233\u77FB\u90C0\u670F\u67AF\u80D0\u54ED\u684D\u79D9\u7A8B\u5800\u5710\u8DCD\u7A9F\u9AB7\u9BAC", "k\xFA": "", "k\u01D4": "\u72DC\u82E6\u695B", "k\xF9": "\u5E93\u4FC8\u7ED4\u5EAB\u6341\u79D9\u7105\u88B4\u55BE\u785E\u7D5D\u88E4\u7614\u9177\u5EE4\u8932\u56B3", "ku\u0101": "\u54B5\u59F1\u6057\u6647\u7D53\u823F\u8A87", "ku\u01CE": "\u4F89\u57AE\u6947\u9299", "ku\xE0": "\u80EF\u8DB6\u8A87\u8DE8\u9ABB", "ku\u01CEi": "\u84AF\u64D3", "ku\xE0i": "\u5DDC\u51F7\u5726\u5757\u5FEB\u4FA9\u90D0\u54D9\u6D4D\u72EF\u810D\u6B33\u584A\u8489\u6703\u7B77\u99C3\u9C99\u5108\u58A4\u9136\u5672\u5EE5\u6FAE\u736A\u74AF\u81BE\u65DD\u7CE9\u9C60", "ku\u0101n": "\u5BBD\u5BDB\u5BEC\u81D7\u9ACB\u9467\u9AD6", "ku\u01CEn": "\u68A1\u6B35\u6B3E\u6B40\u7ABD\u7ABE", "ku\xE0n": "", "ku\u0101ng": "\u5321\u8FCB\u52BB\u8BD3\u90BC\u5329\u54D0\u6047\u6D2D\u7844\u7B50\u7B7A\u8A86\u8EED", "ku\xE1ng": "\u5FF9\u6282\u72C5\u72C2\u8BF3\u8ED6\u8EE0\u8A91\u9D5F", "ku\u01CEng": "\u593C\u5123\u61ED", "ku\xE0ng": "\u535D\u4E31\u909D\u5739\u7EA9\u51B5\u65F7\u5CB2\u6CC1\u77FF\u663F\u8D36\u6846\u7716\u783F\u7736\u7D4B\u7D56\u8CBA\u8EE6\u9271\u92DB\u913A\u58D9\u9ECB\u61EC\u66E0\u720C\u77CC\u7926\u7A6C\u7E8A\u945B", "ku\u012B": "\u4E8F\u5232\u5CBF\u609D\u76D4\u7AA5\u8067\u7ABA\u8667\u985D\u95DA\u5DCB", "ku\xED": "\u594E\u6646\u9035\u9108\u9697\u9997\u55B9\u63C6\u8475\u9A99\u6223\u668C\u694F\u6951\u9B41\u777D\u8770\u982F\u6AC6\u85C8\u9368\u9377\u9A24\u5914\u8637\u5DD9\u8641\u72AA\u8EA8", "ku\u01D0": "\u5C2F\u7143\u8DEC\u980D\u78C8\u8E5E", "ku\xEC": "\u5C2F\u80FF\u532E\u559F\u5ABF\u6127\u6126\u8489\u9988\u5331\u7786\u5633\u5B07\u6192\u6F70\u7BD1\u806D\u8069\u8562\u6BA8\u81AD\u8B09\u77B6\u993D\u7C23\u8075\u7C44\u994B", "k\u016Bn": "\u5764\u6606\u5803\u5812\u5A6B\u5D11\u5D10\u665C\u7311\u83CE\u88C8\u711C\u7428\u9AE0\u88E9\u8C87\u951F\u9AE1\u9E4D\u6F49\u872B\u890C\u9AE8\u71B4\u747B\u918C\u9315\u9CB2\u9A09\u9BE4\u9D7E\u9DA4", "k\u01D4n": "\u6083\u6346\u9603\u58F8\u68B1\u7975\u7871\u7A07\u88CD\u58FC\u7A1B\u7D91\u95AB\u95B8", "k\xF9n": "\u56F0\u6D83\u774F", "ku\xF2": "\u6269\u62E1\u6304\u9002\u79EE\u79F3\u94E6\u7B48\u843F\u8440\u86DE\u9614\u5ED3\u6F37\u929B\u564B\u92BD\u9822\u9AFA\u64F4\u6FF6\u95CA\u979F\u97D5\u9729\u97B9\u9B20", "la": "\u97A1", "l\u0101": "\u5783\u67C6\u782C\u83C8\u641A\u78D6\u908B", "l\xE1": "\u65EF\u524C\u782C\u63E6\u78D6\u56B9", "l\u01CE": "\u5587\u85DE", "l\xE0": "\u524C\u7FCB\u63E6\u6E82\u63E7\u694B\u760C\u8721\u874B\u8FA2\u8FA3\u8772\u81C8\u64F8\u650B\u7209\u81D8\u9B0E\u6AF4\u74CE\u9574\u9BFB\u881F\u945E", "l\xE1i": "\u6765\u4F86\u4FEB\u5008\u5D03\u5F95\u6D9E\u83B1\u90F2\u5A61\u5D0D\u5EB2\u5FA0\u68BE\u6DF6\u730D\u840A\u9028\u68F6\u741C\u7B59\u94FC\u7B82\u9338\u9A0B\u9BE0\u9D86\u9EB3", "l\u01CEi": "\u8970", "l\xE0i": "\u75A0\u5A15\u5F95\u553B\u5A61\u5FA0\u8D49\u7750\u775E\u8D56\u8ABA\u8CDA\u6FD1\u8CF4\u983C\u7658\u9842\u765E\u9D63\u650B\u7028\u702C\u7C41\u85FE\u6AF4\u7669\u7C5F", "l\xE1n": "\u5170\u5C9A\u62E6\u680F\u5549\u5A6A\u60CF\u5D50\u847B\u9611\u6695\u84DD\u8C30\u53B1\u6F9C\u8934\u5116\u6593\u7BEE\u61E2\u71E3\u71F7\u85CD\u8955\u9567\u95CC\u74BC\u5E71\u8964\u8B4B\u6514\u703E\u7046\u7C43\u7E7F\u862B\u862D\u6595\u6B04\u8974\u56D2\u7061\u7C63\u6B17\u8B95\u8E9D\u897D\u946D\u97CA", "l\u01CEn": "\u89C8\u6D68\u63FD\u7F06\u6984\u6F24\u7F71\u9182\u58C8\u61D2\u89A7\u64E5\u5B3E\u61F6\u5B44\u89BD\u5B4F\u652C\u7060\u6B16\u7226\u9872\u7E9C", "l\xE0n": "\u5754\u70C2\u6EE5\u71D7\u5682\u58CF\u6FEB\u7201\u721B\u74D3\u7224\u7226\u7CF7\u9484", "l\u0101ng": "\u5577", "l\xE1ng": "\u52C6\u90DE\u54F4\u6B34\u72FC\u5ACF\u5ECA\u658F\u6879\u7405\u84C8\u6994\u746F\u7860\u7A02\u9512\u7B64\u8246\u870B\u90D2\u6A03\u8782\u8EB4\u92C3\u93AF\u99FA", "l\u01CEng": "\u5D00\u6717\u6716\u70FA\u5871\u84E2\u8A8F\u6724", "l\xE0ng": "\u57CC\u6D6A\u83A8\u9606\u7B64\u8497\u8A8F\u95AC", "l\u0101o": "\u635E\u7CA9\u6488", "l\xE1o": "\u52B4\u52B3\u7262\u7A82\u54F0\u5D02\u6D76\u52DE\u75E8\u94F9\u50D7\u562E\u5D97\u61A6\u61A5\u6725\u7646\u78F1\u7C29\u87E7\u91AA\u9412\u985F\u9ADD", "l\u01CEo": "\u8002\u8001\u4F6C\u54BE\u6045\u72EB\u8356\u6833\u73EF\u7853\u94D1\u86EF\u92A0\u9BB1\u8F51", "l\xE0o": "\u6D9D\u7D61\u55E0\u8022\u916A\u5AEA\u562E\u61A6\u6A02\u6F87\u8EBC\u6A6F\u802E\u8EC2", "le": "\u9979", "l\u0113": "\u561E", "l\xE8": "\u4EC2\u961E\u53FB\u5FC7\u6250\u6C3B\u827B\u725E\u738F\u6CD0\u7AFB\u7833\u697D\u97F7\u990E\u6A02\u7C15\u9CD3\u9C33\u9C73", "lei": "\u561E", "l\u0113i": "", "l\xE9i": "\u7D6B\u96F7\u5AD8\u7F27\u8502\u6A0F\u757E\u78E5\u6A91\u7E32\u6502\u790C\u956D\u6AD1\u74C3\u7FB8\u7927\u7E8D\u7F4D\u8632\u9433\u8F60\u513D\u9458\u9741\u8646\u9C69\u6B19\u7E9D\u9F3A", "l\u011Bi": "\u53BD\u8012\u8BD4\u5792\u6D21\u5841\u7D6B\u50AB\u8A84\u7623\u6A0F\u78CA\u854C\u78E5\u857E\u5121\u58D8\u7657\u790C\u85DF\u6AD1\u6AD0\u77CB\u7928\u7927\u7045\u881D\u863D\u8B84\u58E8\u9478\u9E13", "l\xE8i": "\u6CEA\u6D21\u7C7B\u6D99\u6DDA\u7971\u7D6B\u9179\u9287\u981B\u982A\u9311\u6502\u98A3\u985E\u7927\u7E87\u8631\u79B7", "l\u0113ng": "\u7A1C", "l\xE9ng": "\u5525\u5D1A\u5844\u695E\u7890\u7A1C\u8590", "l\u011Bng": "\u51B7", "l\xE8ng": "\u5030\u580E\u6123\u7756\u8E1C", "li": "", "l\u012B": "", "l\xED": "\u5215\u675D\u5398\u67C2\u5253\u72F8\u79BB\u8372\u9A8A\u60A1\u68A8\u68B8\u7281\u740D\u83DE\u55B1\u68C3\u7282\u9E42\u527A\u6F13\u775D\u7B63\u7F21\u8243\u84E0\u5AE0\u5B77\u6A06\u7483\u76E0\u7AF0\u8C8D\u729B\u7CCE\u853E\u8935\u92EB\u9CA1\u9ECE\u7BF1\u7E2D\u7F79\u9305\u87CD\u8B27\u91A8\u569F\u85DC\u908C\u91D0\u96E2\u9BCF\u6584\u74C8\u87F8\u93EB\u9BEC\u9D79\u9E97\u9EE7\u56C4\u7055\u863A\u882B\u5B4B\u5EF2\u5299\u9457\u7A72\u7C6C\u7E9A\u9A6A\u9C7A\u9E1D", "l\u01D0": "\u793C\u674E\u91CC\u4FDA\u5CDB\u5CE2\u5A0C\u5CF2\u609D\u6D6C\u9026\u7406\u88E1\u9502\u7CB4\u88CF\u8C4A\u92F0\u9CA4\u6FA7\u79AE\u9BC9\u91B4\u8821\u9CE2\u9090\u9C67\u6B1A\u7E9A\u9C71", "l\xEC": "\u529B\u5386\u5389\u5C74\u6250\u7ACB\u540F\u625A\u6738\u5229\u52B1\u53D3\u5456\u575C\u675D\u6CA5\u82C8\u4F8B\u53D5\u5CA6\u623E\u67A5\u6CB4\u6CB5\u75A0\u82D9\u8FE3\u4FD0\u4FEA\u6803\u680E\u75AC\u7805\u8318\u8354\u8D72\u8F79\u90E6\u550E\u5A33\u60A7\u681B\u6817\u6D70\u6D96\u7301\u73D5\u782C\u783A\u783E\u79DD\u8389\u8385\u9B32\u5533\u5A6F\u60B7\u7B20\u7C92\u7C9D\u8137\u86B8\u86CE\u5088\u51D3\u53A4\u68D9\u75E2\u86E0\u8A48\u8DDE\u96F3\u53AF\u585B\u6144\u642E\u6EA7\u7759\u849E\u849A\u870A\u925D\u9CE8\u53B2\u66A6\u6B74\u746E\u7D9F\u8727\u9290\u8777\u9549\u52F5\u66C6\u6B77\u7BE5\u96B7\u9D17\u5DC1\u6AAA\u6FFF\u7658\u78FF\u96B8\u9B01\u512E\u64FD\u66DE\u6AD4\u7204\u72A1\u79B2\u8807\u9398\u56A6\u58E2\u650A\u6ADF\u701D\u74C5\u792A\u85F6\u9E97\u6AEA\u720F\u74D1\u76AA\u76ED\u792B\u7CF2\u8823\u5137\u7667\u7930\u7E85\u9148\u9DC5\u9E9C\u56C7\u5B4B\u6526\u89FB\u8E92\u8F62\u6B10\u8B88\u8F63\u652D\u74E5\u9742\u974B", "li\u01CE": "\u4FE9\u5006", "li\xE1n": "\u5941\u8FDE\u5E18\u601C\u6D9F\u83B2\u9023\u68BF\u8054\u88E2\u4EB7\u55F9\u5EC9\u6169\u6E93\u6F23\u84EE\u5332\u5969\u69CF\u69E4\u7191\u899D\u5286\u5333\u5652\u5AFE\u6190\u78CF\u8068\u806B\u8933\u9CA2\u6FC2\u6FD3\u7E3A\u7FF4\u806E\u8595\u878A\u6AE3\u71EB\u806F\u81C1\u8B30\u8E65\u6AB6\u938C\u9570\u702E\u7C3E\u880A\u9B11\u942E\u9C31\u7C62\u7C68", "li\u01CEn": "\u83B6\u655B\u68BF\u740F\u8138\u88E3\u6169\u6459\u6E93\u69E4\u7489\u8539\u5B1A\u859F\u6582\u6AE3\u6B5B\u81C9\u913B\u895D\u7FB7\u861E\u861D\u91B6", "li\xE0n": "\u7EC3\u70BC\u604B\u6B93\u50C6\u581C\u5AA1\u6E45\u8430\u94FE\u6459\u695D\u7149\u7453\u6F4B\u7A34\u7DF4\u6FB0\u932C\u6BAE\u934A\u93C8\u7032\u9C0A\u6200\u7E9E", "li\u0101ng": "", "li\xE1ng": "\u826F\u4FCD\u83A8\u6881\u6DBC\u690B\u8F8C\u7CB1\u7CAE\u589A\u8E09\u6A11\u8F2C\u99FA\u7CE7", "li\u01CEng": "\u4E21\u4E24\u5169\u4FE9\u5006\u5521\u5562\u639A\u813C\u88F2\u7DC9\u873D\u9B49\u9B4E", "li\xE0ng": "\u4EAE\u501E\u54F4\u60A2\u8C05\u6DBC\u8F86\u55A8\u667E\u6E78\u9753\u8F0C\u8E09\u8AD2\u8F1B\u9344", "li\u0101o": "\u8E7D", "li\xE1o": "\u8FBD\u7597\u7A8C\u804A\u5C1E\u50DA\u5BE5\u5D7A\u6180\u644E\u6F3B\u818B\u5639\u5AFD\u5BEE\u5D9A\u5D9B\u61AD\u6579\u6A1B\u7360\u7F2D\u907C\u66B8\u6A51\u7499\u81AB\u7642\u7AC2\u9E69\u5C6A\u5EEB\u7C1D\u7E5A\u85D4\u87DF\u87E7\u8C42\u8CFF\u8E58\u720E\u7212\u98C2\u9ACE\u98C9\u9DEF", "li\u01CEo": "\u948C\u91D5\u911D\u7F2A\u84FC\u61AD\u7E46\u66E2\u720E\u957D\u7212", "li\xE0o": "\u5C25\u5C26\u948C\u7093\u6599\u91D5\u5ED6\u6482\u7AB7\u9563\u9410", "lie": "", "li\u0113": "", "li\xE9": "", "li\u011B": "\u5FDA\u6BDF\u6318", "li\xE8": "\u5217\u52A3\u52A6\u51BD\u52BD\u59F4\u6312\u6D0C\u8322\u8FFE\u54F7\u57D3\u57D2\u6835\u6D56\u70C8\u70EE\u6369\u730E\u731F\u811F\u68D9\u86DA\u716D\u8057\u8D94\u7D9F\u5DE4\u7366\u98B2\u71E4\u5120\u5DC1\u9BA4\u9D37\u64F8\u7204\u7375\u7209\u72A3\u8E90\u9B1B\u9B23\u9C72", "l\u012Bn": "\u62CE", "l\xEDn": "\u53B8\u90BB\u963E\u6797\u4E34\u51A7\u5549\u5D0A\u60CF\u667D\u7433\u7CA6\u7884\u7B96\u7CBC\u7D9D\u9130\u96A3\u5D99\u6F7E\u735C\u9074\u65B4\u66BD\u71D0\u7498\u8F9A\u9716\u7584\u77B5\u78F7\u81E8\u7E57\u7FF7\u9E90\u8F54\u58E3\u7036\u93FB\u9CDE\u9A4E\u9C57\u9E9F", "l\u01D0n": "\u83FB\u4E83\u50EF\u7B96\u51DC\u51DB\u649B\u5EE9\u5EEA\u61CD\u61D4\u6F9F\u6A81\u6AA9\u765D\u765B", "l\xECn": "\u541D\u6061\u608B\u8D41\u711B\u4E83\u75F3\u8CC3\u853A\u735C\u6A49\u7510\u81A6\u95B5\u7584\u85FA\u8E78\u8E8F\u8E99\u8EAA\u8F65", "l\xEDng": "\u4F36\u5222\u7075\u5464\u56F9\u577D\u590C\u59C8\u5CBA\u5F7E\u6CE0\u72D1\u82D3\u6624\u670E\u67C3\u73B2\u74F4\u3007\u51CC\u768A\u7831\u79E2\u7ADB\u7F90\u888A\u94C3\u9675\u9E30\u5A48\u5D1A\u6395\u68C2\u6DE9\u740C\u7B2D\u7D37\u7EEB\u7F9A\u7FCE\u8046\u8232\u83F1\u86C9\u8851\u797E\u8A45\u8DC9\u8EE8\u7A1C\u84E4\u88EC\u9234\u959D\u96F6\u9F84\u7DBE\u8506\u8F18\u970A\u99D6\u6FAA\u8576\u9302\u9717\u9B7F\u9CAE\u9D12\u9E77\u71EF\u971D\u971B\u9F62\u9143\u9BEA\u5B41\u9F61\u6AFA\u91BD\u9748\u6B1E\u7227\u9EA2\u9F97", "l\u01D0ng": "\u5CBA\u888A\u9886\u9818\u5DBA", "l\xECng": "\u53E6\u70A9\u8626", "li\u016B": "\u7198\u6F91\u8E53", "li\xFA": "\u5218\u7544\u65BF\u6D4F\u6D41\u7559\u65C8\u7409\u7571\u786B\u88D7\u5AB9\u5D67\u65D2\u84A5\u84C5\u9A9D\u644E\u69B4\u6F3B\u7460\u98D7\u5289\u746C\u7624\u78C2\u954F\u99E0\u9E60\u6A4A\u74A2\u7581\u9560\u7645\u87C9\u99F5\u56A0\u61F0\u700F\u85F0\u938F\u93A6\u9E8D\u93D0\u98C0\u9402\u9A2E\u98C5\u9C21\u9DB9\u9A51", "li\u01D4": "\u67F3\u6801\u685E\u73CB\u687A\u7EFA\u950D\u7DB9\u71AE\u7F76\u92F6\u6A6E\u5B3C\u61F0\u7F80\u85F0", "li\xF9": "\u7A8C\u7FCF\u586F\u5EC7\u905B\u6F91\u78C2\u78DF\u9E68\u93A6\u9724\u993E\u96E1\u98C2\u9B38\u9DDA", "lo": "\u54AF", "l\xF3ng": "\u9F99\u5C78\u5C28\u5499\u6CF7\u830F\u663D\u680A\u73D1\u80E7\u772C\u783B\u7ADC\u804B\u9686\u6E70\u6EDD\u5D90\u69DE\u6F0B\u7643\u7ABF\u7BED\u9F8D\u5131\u8622\u93E7\u9733\u56A8\u5DC3\u5DC4\u7027\u66E8\u6727\u6AF3\u7216\u74CF\u8971\u77D3\u7932\u7931\u882C\u882A\u9F93\u9F92\u7C60\u807E\u8C45\u8E98\u9747\u9468\u9A61\u9E17", "l\u01D2ng": "\u9647\u5785\u5784\u62E2\u7BE2\u7BED\u9F8D\u96B4\u5131\u5FBF\u58DF\u58E0\u650F\u7AC9\u9F93\u7C60\u8E98", "l\xF2ng": "\u54E2\u6887\u7866\u5131\u5FBF\u8D1A", "lou": "\u55BD\u560D\u779C", "l\u014Du": "\u645F", "l\xF3u": "\u5245\u5A04\u507B\u5A41\u55BD\u6E87\u848C\u50C2\u697C\u560D\u5BE0\u5ED4\u617A\u6F0A\u851E\u9071\u6A13\u71A1\u8027\u877C\u779C\u802C\u825B\u87BB\u8B31\u8C97\u8EC1\u9AC5\u97BB\u9ACF\u9DDC", "l\u01D2u": "\u5D5D\u587F\u5D81\u645F\u750A\u7BD3\u7C0D", "l\xF2u": "\u964B\u5C5A\u6F0F\u7618\u9542\u763B\u763A\u93E4", "l\u016B": "\u565C\u64B8\u8B22\u5695\u64FC", "l\xFA": "\u5362\u5E90\u82A6\u5786\u67A6\u6CF8\u7089\u680C\u80EA\u8F73\u822E\u9E2C\u7388\u823B\u9885\u9229\u9C88\u99BF\u9B72\u76E7\u56A7\u58DA\u5EEC\u650E\u7018\u7379\u74B7\u8606\u66E5\u6AE8\u7210\u74D0\u81DA\u77D1\u7C5A\u7E91\u7F4F\u826B\u8826\u8F64\u946A\u9871\u9AD7\u9C78\u9E15\u9EF8", "l\u01D4": "\u5364\u864F\u63B3\u9E75\u7875\u9C81\u865C\u5877\u6EF7\u84FE\u6A10\u6F9B\u9B6F\u64C4\u6A79\u6C07\u78E0\u7A5E\u9565\u7002\u6AD3\u6C0C\u8263\u93C0\u826A\u942A\u9465", "l\xF9": "\u5725\u752A\u9646\u4F93\u5774\u5F54\u5F55\u5CCD\u52CE\u8D42\u8F82\u9678\u5A3D\u6DD5\u6DE5\u6E0C\u7849\u83C9\u902F\u9E7F\u6902\u742D\u797F\u7984\u50C7\u5279\u52E0\u76DD\u7769\u7A11\u8CC2\u8DEF\u8F05\u5876\u5ED8\u645D\u6F09\u7B93\u7CB6\u7DD1\u84FC\u850D\u622E\u6A1A\u719D\u8194\u8DA2\u8E1B\u8F98\u9181\u6F5E\u7A4B\u8557\u9304\u9334\u9332\u7490\u7C0F\u87B0\u9D3C\u7C36\u8E57\u8F46\u9A04\u9E6D\u7C2C\u7C35\u93D5\u9BE5\u9D66\u9D71\u9E93\u93F4\u9A3C\u7C59\u89FB\u8642\u9DFA", "lu\xE1n": "\u5A08\u5B6A\u5CE6\u631B\u683E\u9E3E\u8114\u6EE6\u92AE\u9D49\u571D\u5971\u5B4C\u5B7F\u5DD2\u6523\u66EB\u6B12\u7053\u7F89\u81E1\u81E0\u571E\u7064\u864A\u947E\u7674\u7675\u9E1E", "lu\u01CEn": "\u5375\u89B6", "lu\xE0n": "\u4E71\u91E0\u4E7F\u4E82\u858D\u7053", "l\u016Bn": "\u6384", "l\xFAn": "\u4ED1\u4F26\u56F5\u6CA6\u7EB6\u82B2\u4F96\u8F6E\u502B\u966F\u5707\u5A68\u5D18\u5D19\u6384\u6DEA\u83D5\u68C6\u8140\u7896\u7DB8\u8023\u8726\u8AD6\u8E1A\u8F2A\u78EE\u9300\u9BE9", "l\u01D4n": "\u57E8\u60C0\u7896\u7A10\u8023", "l\xF9n": "\u60C0\u6EA3\u7896\u8AD6", "luo": "\u56C9\u56D6", "lu\u014D": "\u634B\u9831\u56C9\u56D6", "lu\xF3": "\u5BFD\u7F57\u7321\u8136\u841D\u903B\u6924\u8161\u9523\u7BA9\u9AA1\u9559\u87BA\u650E\u7F85\u89B6\u93CD\u5138\u89BC\u9A3E\u56C9\u651E\u7380\u863F\u908F\u6B0F\u9A58\u9E01\u7C6E\u947C\u9960\u56D6", "lu\u01D2": "\u5246\u502E\u7822\u6370\u84CF\u88F8\u8EB6\u7630\u8803\u81DD\u66EA\u652D\u7673", "lu\xF2": "\u6CFA\u54AF\u5CC8\u6D1B\u8366\u9A86\u6D1C\u73DE\u6370\u6E03\u784C\u7866\u7B3F\u7D61\u86D2\u8DDE\u8A7B\u645E\u6F2F\u7296\u96D2\u99F1\u78F1\u9BA5\u9D45\u64FD\u6FFC\u650A\u76AA\u8E92\u7E99", "l\u01D8": "\u9A74\u95FE\u6988\u95AD\u6C00\u81A2\u779C\u6ADA\u85D8\u9A62", "l\u01DA": "\u5415\u5442\u4FA3\u90D8\u4FB6\u6314\u635B\u634B\u65C5\u68A0\u7112\u7963\u507B\u7A06\u94DD\u5C61\u7D7D\u7F15\u50C2\u5C62\u617A\u8182\u891B\u92C1\u5C65\u8190\u8938\u5122\u7E37\u7A6D\u9DDC", "l\u01DC": "\u578F\u5F8B\u54F7\u8651\u5D42\u6C2F\u844E\u6EE4\u7DA0\u7DD1\u616E\u7BBB\u819F\u52F4\u7E42\u6FFE\u6AD6\u7208\u535B\u9462", "l\xFC\xE8": "\u5BFD\u63A0\u7567\u7565\u950A\u7A24\u5719\u92E2\u92DD", "ma": "\u55CE\u561B\u9EBD", "m\u0101": "\u4E87\u5988\u5B56\u5E85\u5ABD\u5AF2\u69AA\u879E", "m\xE1": "\u83FB\u9EBB\u55CE\u75F2\u75F3\u561B\u5AF2\u8534\u7298\u87C7", "m\u01CE": "\u9A6C\u72B8\u6769\u739B\u7801\u99AC\u55CE\u6EA4\u7341\u9064\u746A\u78BC\u879E\u93B7\u9C22\u9DCC", "m\xE0": "\u6769\u7943\u9581\u9A82\u508C\u7770\u561C\u69AA\u79A1\u7F75\u879E\u99E1\u9B15", "m\xE1i": "\u85B6\u973E", "m\u01CEi": "\u4E70\u836C\u8CB7\u562A\u8552\u9DF6", "m\xE0i": "\u52A2\u8FC8\u4F45\u58F2\u9EA6\u5356\u551B\u8108\u9EA5\u8847\u52F1\u8CE3\u9081\u9721\u9722", "m\u0101n": "\u989F\u9862", "m\xE1n": "\u59CF\u6097\u86EE\u7D7B\u8C29\u6172\u6471\u9992\u6A20\u779E\u9794\u8B3E\u9945\u9CD7\u9B18\u9B17\u9C3B\u77D5\u883B", "m\u01CEn": "\u5A28\u5C58\u6E80\u6EE1\u6EFF\u87A8\u8954\u87CE\u93CB\u77D5", "m\xE0n": "\u66FC\u50C8\u9124\u5881\u5ADA\u5E54\u6162\u6471\u6F2B\u734C\u7F26\u8504\u69FE\u6FAB\u71B3\u6FB7\u9558\u7E35\u93DD\u8630", "m\u0101ng": "\u7264", "m\xE1ng": "\u9099\u5402\u5FD9\u6C52\u8292\u5C28\u6757\u6767\u76F2\u76F3\u5396\u607E\u7B00\u832B\u54E4\u5A0F\u5EAC\u6D5D\u72F5\u671A\u727B\u786D\u91EF\u94D3\u75DD\u86D6\u92E9\u99F9\u8609", "m\u01CEng": "\u83BD\u83BE\u7865\u833B\u58FE\u6F2D\u87D2\u880E", "m\xE0ng": "", "m\u0101o": "\u8C93", "m\xE1o": "\u6BDB\u77DB\u82BC\u6786\u7266\u8305\u8306\u65C4\u7F5E\u6E35\u8EDE\u9155\u5825\u5D4D\u6959\u951A\u7DE2\u927E\u9AE6\u6C02\u729B\u8765\u8C93\u9AF3\u9328\u87CA\u9D9C", "m\u01CEo": "\u5187\u536F\u5918\u4E6E\u5CC1\u623C\u6CD6\u6634\u94C6\u7B37\u84E9\u925A", "m\xE0o": "\u5183\u7683\u82BC\u5190\u8302\u67D5\u770A\u79CF\u8D38\u65C4\u8004\u88A4\u8992\u5AA2\u5E3D\u843A\u8CBF\u911A\u6117\u6693\u6BF7\u7441\u7780\u8C8C\u912E\u8750\u61CB", "me": "\u5E85\u9EBD\u9EBC\u569C", "m\u0113": "\u5692", "m\xE8": "\u6FF9\u56B0", "m\xE9i": "\u5746\u6C92\u679A\u73AB\u82FA\u6802\u7709\u8104\u8393\u6885\u73FB\u8122\u90FF\u5833\u5A92\u5D4B\u6E44\u6E48\u7338\u7742\u847F\u6963\u6973\u7164\u7442\u7996\u815C\u587A\u69D1\u9176\u9545\u9E5B\u92C2\u9709\u7A48\u5FBE\u9387\u6517\u9DA5\u9EF4", "m\u011Bi": "\u6BCE\u6BCF\u51C2\u7F8E\u6334\u6D7C\u7F99\u5A84\u5D44\u6E3C\u5ABA\u9541\u5B0D\u71D8\u8EBE\u9382\u9EE3", "m\xE8i": "\u59B9\u62BA\u6CAC\u65C0\u6627\u7959\u8882\u771B\u5A9A\u5BD0\u6B99\u75D7\u8DCA\u9B3D\u715D\u7778\u97CE\u9B45\u7BC3\u875E\u569C\u6AD7", "m\u0113n": "\u60B6\u691A", "m\xE9n": "\u95E8\u4EEC\u626A\u6C76\u600B\u73A7\u9494\u9580\u5011\u9585\u636B\u83DB\u748A\u779E\u7A48\u9346\u4EB9\u6596\u864B", "m\xE8n": "\u6097\u60DB\u7116\u60B6\u66AA\u71DC\u9794\u61D1\u61E3", "m\u0113ng": "\u63B9\u64DD\u77C7", "m\xE9ng": "\u5C28\u753F\u867B\u5EAC\u8394\u840C\u6E95\u76DF\u96FA\u750D\u9133\u511A\u6A57\u77A2\u8544\u8771\u9138\u92C2\u9AF3\u5E6A\u61DC\u61DE\u6FDB\u7374\u66DA\u6726\u6AAC\u6C0B\u791E\u9BCD\u9E72\u8268\u77D2\u9740\u973F\u995B\u986D\u9E0F", "m\u011Bng": "\u9EFE\u51A1\u52D0\u731B\u9EFD\u9530\u824B\u8722\u77A2\u61DC\u61DE\u87D2\u9333\u61F5\u8813\u9BED\u77D2\u9F06", "m\xE8ng": "\u5B5F\u68A6\u5922\u5923\u61DC\u9725\u7666", "m\u012B": "\u54AA\u7787", "m\xED": "\u519E\u7962\u8FF7\u88AE\u7315\u8C1C\u84BE\u8A78\u6475\u7787\u8B0E\u919A\u5F4C\u64DF\u77B4\u7E3B\u85CC\u9E8A\u9E8B\u9EBF\u6AB7\u79B0\u9761\u7030\u737C\u862A\u9E9B\u957E\u6202\u6520\u74D5\u863C\u7222\u91BE\u91BF\u9E0D\u91C4", "m\u01D0": "\u7C73\u8288\u4F8E\u6CB5\u7F8B\u5F2D\u6D23\u6549\u7C8E\u8112\u6E33\u845E\u851D\u92A4\u5F4C\u6FD4\u5B4A\u6520\u7056", "m\xEC": "\u5196\u7CF8\u6C68\u6C95\u5B93\u603D\u6788\u89C5\u5CDA\u7955\u5BBB\u5BC6\u6DE7\u8994\u8993\u5E42\u8C27\u5853\u5E4E\u899B\u5627\u6993\u6EF5\u6F1E\u7190\u8524\u871C\u9F0F\u51AA\u6A12\u5E66\u6FD7\u8B10\u6AC1\u7C1A\u7F83", "mi\xE1n": "\u5B80\u8287\u6763\u7720\u5A42\u7EF5\u5A94\u68C9\u7DBF\u7DDC\u81F1\u8752\u5B35\u6AB0\u6ACB\u77C8\u77CA\u77CF", "mi\u01CEn": "\u4E0F\u6C45\u514D\u6C94\u9EFE\u52C9\u7704\u5A29\u83AC\u506D\u5195\u52D4\u6E11\u5595\u5A94\u6110\u6E4E\u774C\u7F05\u8442\u9EFD\u7D7B\u817C\u6FA0\u7DEC\u9766\u9BB8", "mi\xE0n": "\u9763\u9762\u7251\u7CC6\u9EAB\u9EAA\u9EBA\u9EB5", "mi\u0101o": "\u55B5", "mi\xE1o": "\u82D7\u5A8C\u63CF\u7784\u9E4B\u5AF9\u7DE2\u9D93", "mi\u01CEo": "\u53B8\u4EEF\u52B0\u676A\u7707\u79D2\u6DFC\u6E3A\u7F08\u7BCE\u7DF2\u85D0\u9088", "mi\xE0o": "\u5999\u5E99\u7385\u7AD7\u5EBF\u7F2A\u5EDF\u7E46", "mi\u0113": "\u4E5C\u5400\u54A9\u54F6\u5B6D", "mi\xE9": "", "mi\xE8": "\u706D\u70D5\u771C\u8995\u6423\u6EC5\u8511\u858E\u9D13\u5E6D\u61F1\u700E\u7BFE\u6AD7\u7C1A\u7923\u881B\u884A\u9456\u9C74", "m\xEDn": "\u6C11\u5FDF\u578A\u59C4\u5CB7\u5FDE\u600B\u65FB\u65FC\u739F\u82E0\u73C9\u76FF\u7807\u7F60\u5D0F\u636A\u6E02\u7418\u741D\u7F17\u668B\u7449\u75FB\u7888\u9231\u7DCD\u7DE1\u8CEF\u9309\u9D16\u9372", "m\u01D0n": "\u76BF\u51BA\u5221\u5FDF\u95F5\u5461\u5FDE\u62BF\u6CEF\u9EFE\u52C4\u6543\u95FD\u60AF\u654F\u7B22\u7B3D\u60FD\u6E4F\u6E63\u9594\u9EFD\u610D\u656F\u668B\u50F6\u95A9\u615C\u61AB\u6F63\u7C22\u9CD8\u8820\u9C35", "m\xEDng": "\u540D\u660E\u9E23\u6D3A\u7700\u8317\u51A5\u6719\u7733\u94ED\u910D\u5AC7\u6E9F\u733D\u84C2\u8A7A\u669D\u69A0\u9298\u9CF4\u7791\u879F\u89AD", "m\u01D0ng": "\u4F72\u59F3\u51D5\u5AC7\u614F\u9169", "m\xECng": "\u547D\u63B5", "mi\u01D4": "", "mi\xF9": "\u8C2C\u7F2A\u7E46\u8B2C", "m\u014D": "\u6478\u56A4", "m\xF3": "\u5E85\u5C1B\u8C1F\u5AEB\u998D\u6479\u819C\u9AB3\u9EBD\u9EBC\u9B79\u6A45\u7CE2\u5B24\u5B37\u8B28\u8B29\u64F5\u9943\u8611\u9ACD\u9B54\u5298\u6202\u6520\u995D", "m\u01D2": "\u61E1", "m\xF2": "\u672B\u573D\u6C92\u59BA\u5E13\u6B81\u6B7F\u6B7E\u6CAB\u8309\u964C\u5E1E\u6629\u67BA\u72E2\u768C\u771C\u773F\u781E\u79E3\u8388\u773D\u7D48\u88B9\u7D54\u86E8\u8C83\u55FC\u587B\u5BDE\u6F20\u734F\u84E6\u8C88\u8C8A\u8C89\u9286\u977A\u58A8\u5AFC\u763C\u7790\u7799\u9546\u9B69\u9ED9\u7E38\u9ED8\u700E\u8C98\u569C\u85E6\u87D4\u93CC\u7205\u9A40\u7933\u7E86\u8031", "m\u014Du": "\u54DE", "m\xF3u": "\u725F\u4F94\u52BA\u5463\u6048\u6544\u6859\u7738\u8C0B\u5825\u86D1\u7F2A\u8E0E\u8B00\u7E46\u936A\u9D3E\u9EB0\u97AA", "m\u01D2u": "\u53B6\u67D0", "m\xF2u": "", "m\xFA": "\u6BEA\u6C01", "m\u01D4": "\u6BCD\u4EA9\u7261\u5776\u59C6\u62C7\u7542\u5CD4\u7273\u7546\u7552\u80DF\u5A12\u755D\u755E\u782A\u756E\u9267\u8E07", "m\xF9": "\u6728\u4EEB\u76EE\u51E9\u6737\u725F\u6C90\u72C7\u5776\u7091\u7267\u82DC\u6BE3\u83AF\u869E\u94BC\u52DF\u96EE\u5893\u5E59\u5E55\u6154\u6958\u7766\u926C\u6155\u66AF\u66AE\u7F2A\u6A22\u8252\u9702\u7A46\u7E38\u7E46\u97AA", "n": "", "\u0144": "\u5514\u55EF", "\u0148": "\u55EF", "na": "", "n\u0101": "", "n\xE1": "\u79C5\u62CF\u62FF\u6310\u55F1\u8498\u643B\u8ABD\u954E\u93BF", "n\u01CE": "\u4E78\u96EB", "n\xE0": "\u5436\u59A0\u6290\u7EB3\u80AD\u90CD\u8872\u94A0\u7D0D\u88A6\u637A\u7B1A\u7B1D\u8C7D\u8EDC\u8C80\u9209\u84B3\u9779\u9B76", "n\xE1i": "\u8149\u6431\u6468\u5B7B", "n\u01CEi": "\u4E43\u5976\u827F\u6C16\u7593\u59B3\u5EFC\u8FFA\u5037\u91E2\u5B2D", "n\xE0i": "\u4F74\u5948\u67F0\u800F\u8010\u8418\u6E3F\u9F10\u8926\u879A\u933C", "n\u0101n": "\u56DD\u56E1", "n\xE1n": "\u7537\u62A9\u678F\u4FBD\u67DF\u5A1A\u7558\u83AE\u5583\u9056\u6694\u6960\u8AF5\u96E3", "n\u01CEn": "\u8D67\u63C7\u6E73\u8433\u7175\u8169\u5AE8\u877B\u6201", "n\xE0n": "\u59A0\u5A7B\u8AF5\u96E3", "n\u0101ng": "\u513E\u56D4", "n\xE1ng": "\u4E6A\u6DB3\u6411\u61B9\u56A2\u8830\u995F\u9995\u6B1C\u9962", "n\u01CEng": "\u6411\u64C3\u703C\u66E9\u652E\u7062\u9995", "n\xE0ng": "\u513E\u9F49", "n\u0101o": "\u5B6C", "n\xE1o": "\u5476\u6013\u6320\u5CF1\u6861\u7847\u94D9\u7331\u86F2\u8A49\u7899\u644E\u6493\u5DA9\u61B9\u6A48\u7376\u87EF\u5912\u8B4A\u9403\u5DCE\u737F", "n\u01CEo": "\u57B4\u607C\u60A9\u8111\u5318\u8133\u5816\u60F1\u5AD0\u7459\u8166\u78AF\u61B9\u7376", "n\xE0o": "\u95F9\u5A65\u6DD6\u9599\u9B27\u81D1", "ne": "", "n\xE9": "", "n\xE8": "\u7592\u8BB7\u5436\u6290\u7732\u8A25", "n\xE9i": "", "n\u011Bi": "\u5A1E\u6D7D\u9981\u812E\u8147\u9912\u9BBE\u9BD8", "n\xE8i": "\u5167\u6C1D\u6C1E\u9317", "n\xE8n": "\u6041\u5A86\u5AE9\u5AF0", "n\xE9ng": "", "n\u011Bng": "\u879A", "n\xE8ng": "", "\u0144g": "\u5514\u55EF", "\u0148g": "\u55EF", "n\u012B": "\u59AE", "n\xED": "\u5C3C\u576D\u6029\u62B3\u7C7E\u502A\u5C54\u79DC\u90F3\u94CC\u57FF\u5A57\u6DE3\u730A\u86AD\u68FF\u86EA\u8DDC\u922E\u8063\u873A\u999C\u89EC\u8C8E\u8F17\u9713\u9CB5\u9BE2\u9E91\u9F6F\u81E1", "n\u01D0": "\u4F31\u4F32\u4F60\u62DF\u59B3\u62B3\u72D4\u82E8\u67C5\u5A57\u639C\u65CE\u6672\u68FF\u5B74\u511E\u5117\u96AC\u61DD\u64EC\u6FD4\u85BF\u6AB7\u807B", "n\xEC": "\u5C70\u6C3C\u4F32\u6290\u6635\u80D2\u9006\u533F\u7724\u79DC\u5804\u60C4\u5ADF\u6135\u7768\u817B\u66B1\u7E0C\u8ABD\u81A9\u5B3A", "ni\u0101n": "\u62C8\u852B", "ni\xE1n": "\u5E74\u79CA\u54D6\u59E9\u79E5\u7C98\u6E93\u9C87\u9B8E\u9CB6\u9D47\u9ECF\u9BF0", "ni\u01CEn": "\u6D8A\u6DF0\u713E\u8F87\u6990\u8F97\u649A\u64B5\u78BE\u8F26\u7C10\u8E4D\u6506\u8E68\u8E8E", "ni\xE0n": "\u5344\u5EFF\u5FF5\u59E9\u5538\u57DD\u60A5\u60D7\u824C", "ni\xE1ng": "\u5A18\u5B22\u5B43\u91C0", "ni\u01CEng": "", "ni\xE0ng": "\u917F\u91B8\u91C0", "ni\u01CEo": "\u9E1F\u8311\u8885\u9CE5\u5ACB\u88CA\u8526\u6A22\u5B1D\u892D\u5B32", "ni\xE0o": "\u8132", "ni\u0113": "\u634F\u63D1", "ni\xE9": "\u82F6", "ni\u011B": "", "ni\xE8": "\u4E5C\u5E07\u573C\u5CCA\u67BF\u9667\u6D85\u75C6\u8042\u81EC\u556E\u639C\u83CD\u9689\u655C\u6E7C\u55EB\u5D72\u8E02\u565B\u6470\u69F7\u8E17\u8E19\u92B8\u954A\u954D\u5DAD\u7BDE\u81F2\u92F7\u931C\u989E\u8E51\u5699\u8076\u93B3\u95D1\u5B7C\u5B7D\u6AF1\u7C4B\u8616\u56C1\u651D\u9F67\u5DD5\u7CF1\u7CF5\u8825\u9448\u56D0\u56D3\u8B98\u8EA1\u9477\u9873\u9480", "n\xEDn": "\u56DC\u6041\u810C\u60A8", "n\u01D0n": "\u62F0", "n\xEDng": "\u549B\u72DE\u82E7\u67E0\u804D\u5BCD\u5BD5\u752F\u5BD7\u5BDC\u5BE7\u511C\u51DD\u6A63\u5680\u5B23\u64F0\u7370\u85B4\u6AB8\u8079\u944F\u9B21\u9E0B", "n\u01D0ng": "\u64F0\u77C3", "n\xECng": "\u4F5E\u4FAB\u6CDE\u503F\u5BCD\u5BD5\u752F\u5BD7\u5BDC\u5BE7\u6F9D\u64F0\u6FD8", "ni\u016B": "\u599E\u5B67", "ni\xFA": "\u725C\u725B\u6C7C\u6013", "ni\u01D4": "\u5FF8\u626D\u6C91\u72C3\u7EBD\u677B\u7084\u94AE\u7D10\u83A5\u9215\u9775", "ni\xF9": "\u629D", "n\xF3ng": "\u519C\u4FAC\u54DD\u6D53\u8113\u79FE\u8FB2\u5102\u8FB3\u5665\u6FC3\u857D\u6A82\u71F6\u79AF\u81BF\u7651\u7A60\u895B\u8B68\u91B2\u6B01\u9B1E", "n\u01D2ng": "\u7E77", "n\xF2ng": "\u630A\u6335\u7651\u9F48", "n\xF3u": "\u7FBA", "n\u01D2u": "", "n\xF2u": "\u6419\u69C8\u8028\u7373\u6ABD\u9392\u941E", "n\xFA": "\u5974\u4F2E\u5B65\u5E11\u9A7D\u7B2F\u99D1", "n\u01D4": "\u4F2E\u52AA\u5F29\u782E\u80EC", "n\xF9": "\u6012\u5089\u6419", "nu\xE1n": "\u597B\u6E1C", "nu\u01CEn": "\u6E1C\u6E6A\u6696\u7156\u7157\u992A", "nu\xE0n": "", "nu\xF3": "\u632A\u689B\u50A9\u6A60\u96E3\u513A", "nu\u01D2": "\u88B3\u88B2", "nu\xF2": "\u800E\u8BFA\u558F\u63BF\u6BED\u903D\u611E\u6419\u6426\u9518\u643B\u6992\u7A2C\u8AFE\u8E43\u7CD1\u9369\u61E7\u61E6\u7CE5\u7A64\u7CEF", "n\u01D8": "", "n\u01DA": "\u9495\u7C79\u91F9", "n\u01DC": "\u6C91\u8842\u6067\u6712\u8844\u804F", "n\xFC\xE8": "\u8650\u5A69\u7878\u7627", "o": "\u7B7D", "\u014D": "\u5594\u5662", "\xF3": "\u54E6", "\u01D2": "\u5684", "\xF2": "\u54E6", "ou": "", "\u014Du": "\u8BB4\u543D\u6CA4\u6B27\u6BB4\u74EF\u9E25\u5340\u5614\u5878\u6F1A\u6B50\u6BC6\u71B0\u750C\u8192\u9D0E\u6AD9\u85F2\u8B33\u93C2\u9DD7", "\xF3u": "", "\u01D2u": "\u5418\u79BA\u5076\u8162\u5614\u71B0\u8026\u8545\u85D5", "\xF2u": "\u6004\u6CA4\u5614\u616A\u6F1A", "p\u0101": "\u6C43\u5991\u82E9\u7685\u8DB4\u8225\u556A\u8469", "p\xE1": "\u6777\u722C\u94AF\u63B1\u7436\u7B62\u6F56", "p\u01CE": "", "p\xE0": "\u6C43\u5E0A\u5E15\u6015\u8899", "p\u0101i": "\u62CD", "p\xE1i": "\u4FF3\u5F98\u7305\u68D1\u724C\u7B84\u8F2B\u7C32\u7C30\u72A4", "p\u01CEi": "\u5EF9", "p\xE0i": "\u6CA0\u54CC\u6D3E\u6E12\u6E43\u848E\u9383", "p\u0101n": "\u7705\u7568\u8420\u6F58\u6500\u7C53", "p\xE1n": "\u4E2C\u723F\u80A8\u67C8\u6D00\u80D6\u772B\u6E74\u76D8\u8DD8\u5ABB\u5E4B\u84B0\u642B\u69C3\u76E4\u78D0\u7E0F\u81B0\u78FB\u8E52\u700A\u87E0\u8E63\u939C\u97B6", "p\u01CEn": "\u5762\u76FB", "p\xE0n": "\u51B8\u5224\u6C9C\u62DA\u6CEE\u708D\u80A8\u53DB\u7249\u76FC\u80D6\u7554\u8041\u88A2\u8A4A\u6EBF\u9816\u92EC\u95C6\u9D65\u897B\u947B", "p\u0101ng": "\u4E53\u6C78\u6C97\u80EE\u96F1\u6EC2\u8196\u9736", "p\xE1ng": "\u5390\u5906\u5C28\u5F77\u5E9E\u9004\u5EAC\u8DBD\u823D\u5ACE\u5FAC\u8180\u7BE3\u8783\u9CD1\u9F8E\u9F90\u9C1F", "p\u01CEng": "\u55D9\u802A\u89AB", "p\xE0ng": "\u7090\u80A8\u80D6\u772B", "p\u0101o": "\u629B\u62CB\u812C\u8422\u85E8\u7A6E", "p\xE1o": "\u5486\u5789\u5E96\u72CD\u70B0\u722E\u74DF\u888D\u94C7\u530F\u70F0\u888C\u8DC1\u8EF3\u924B\u9784\u891C\u9E83\u9E85", "p\u01CEo": "", "p\xE0o": "\u5945\u75B1\u76B0\u7832\u888C\u9764\u9EAD\u5697\u791F\u792E", "p\u0113i": "\u599A\u5478\u600C\u62B7\u80A7\u67F8\u80DA\u8843\u9185", "p\xE9i": "\u962B\u966A\u57F9\u5A44\u6BF0\u8D54\u952B\u88F5\u88F4\u8CE0\u9307", "p\u011Bi": "\u4FD6\u7423", "p\xE8i": "\u4F02\u5983\u6C9B\u72BB\u4F69\u5E14\u59F5\u65BE\u67ED\u65C6\u6D7F\u73EE\u914D\u6DE0\u68D1\u5A90\u84DC\u8F94\u99B7\u5D8F\u9708\u6508\u8F61", "p\u0113n": "\u5674\u6FC6\u6B55", "p\xE9n": "\u74EB\u76C6\u6E53\u8450", "p\u011Bn": "\u5460\u7FF8", "p\xE8n": "\u55AF\u5674", "p\u0113ng": "\u4EA8\u5309\u6026\u62A8\u6CD9\u6072\u80D3\u7830\u6888\u70F9\u7851\u7D63\u8EEF\u527B\u959B\u6F30\u562D\u99CD\u78DE", "p\xE9ng": "\u8283\u670B\u6337\u7AFC\u5017\u6340\u8391\u580B\u5F38\u6DDC\u88B6\u68DA\u6916\u50B0\u585C\u5873\u6412\u6F28\u75ED\u787C\u7A1D\u84EC\u9E4F\u6A25\u71A2\u6189\u6F8E\u8F23\u7BE3\u7BF7\u81A8\u930B\u97F8\u9AFC\u87DA\u87DB\u9B05\u7E84\u8615\u97FC\u9D6C\u9A2F\u9B14\u945D", "p\u011Bng": "\u6367\u6DCE\u768F\u6453", "p\xE8ng": "\u63BD\u692A\u78B0\u959B\u69F0\u8E2B\u78DE", "pi": "\u698C", "p\u012B": "\u4E15\u4F13\u4F3E\u599A\u6279\u7EB0\u90B3\u576F\u5CAF\u6036\u62AB\u62B7\u6788\u708B\u72C9\u72D3\u7812\u6082\u79DB\u79E0\u7D15\u94CD\u9674\u65C7\u7FCD\u801A\u8C7E\u91FD\u921A\u925F\u9294\u78C7\u99D3\u9AEC\u567C\u9303\u930D\u9B7E\u61B5\u7915\u7914\u939E\u9739", "p\xED": "\u76AE\u4EF3\u9630\u7EB0\u8298\u9642\u6787\u80B6\u6BD8\u6BD7\u75B2\u7B13\u7D15\u868D\u90EB\u94CD\u5564\u57E4\u5D25\u7308\u86BE\u86BD\u8C7C\u7137\u7435\u7986\u813E\u8157\u88E8\u9239\u9C8F\u7F74\u818D\u8731\u7F77\u96A6\u9B6E\u58C0\u8795\u9B8D\u7BFA\u87B7\u8C94\u979E\u9D67\u7F86\u6707\u9F19\u882F", "p\u01D0": "\u5339\u5E80\u758B\u4EF3\u572E\u5421\u82C9\u6082\u8134\u75DE\u92A2\u5D8F\u8AC0\u9D04\u64D7\u567D\u7656\u56AD", "p\xEC": "\u5C41\u57E4\u6DE0\u63CA\u5AD3\u5AB2\u7765\u6F4E\u7A2B\u50FB\u6FBC\u568A\u6FDE\u7513\u7588\u8B6C\u95E2\u9DFF\u9E0A", "pi\u0101n": "\u56E8\u504F\u5AA5\u6944\u728F\u7BC7\u7FE9\u9342\u9DA3", "pi\xE1n": "\u9A88\u80FC\u7F0F\u8141\u6969\u8CC6\u8DF0\u7478\u7DF6\u9ABF\u8E41\u99E2\u74B8\u9A08", "pi\u01CEn": "\u8991\u8C1D\u8CB5\u8ADE", "pi\xE0n": "\u7335\u9A97\u9B78\u7371\u9A17\u9A19", "pi\u0101o": "\u527D\u52E1\u560C\u5AD6\u5F6F\u6153\u7F25\u98D8\u65DA\u7E39\u7FF2\u87B5\u72A5\u98C3\u98C4\u9B52", "pi\xE1o": "\u5AD6\u74E2\u85B8\u95DD", "pi\u01CEo": "\u83A9\u6B8D\u7F25\u779F\u7BFB\u7E39\u91A5\u76AB\u9860", "pi\xE0o": "\u50C4\u5F6F\u5FB1\u9AA0\u9A43\u9C3E", "pi\u0113": "\u6C15\u8995\u6F4E\u6486\u66BC\u77A5", "pi\u011B": "\u4E3F\u82E4\u9405", "pi\xE8": "\u5AF3", "p\u012Bn": "\u62DA\u59D8\u62FC\u780F\u7917\u7A66\u99AA\u9A5E", "p\xEDn": "\u73AD\u8D2B\u5A26\u8CA7\u7415\u5AD4\u5B2A\u85B2\u56AC\u77C9\u860B\u8819\u98A6\u9870", "p\u01D0n": "\u54C1\u6980", "p\xECn": "\u725D\u6C56\u8058", "p\u012Bng": "\u4E52\u7539\u4FDC\u5A09\u6D84\u782F\u8060\u8275\u9829", "p\xEDng": "\u5E73\u8BC4\u51ED\u546F\u576A\u5CBC\u6CD9\u90F1\u5E21\u5EB0\u67B0\u6D34\u73B6\u80D3\u8353\u74F6\u5E32\u6DDC\u7851\u840D\u86B2\u5840\u5E48\u7129\u7501\u7F3E\u84F1\u86E2\u8A55\u99AE\u8EFF\u9C86\u51F4\u7AEE\u927C\u617F\u7BB3\u8F27\u6191\u9B83\u6A98\u7C08\u860B", "p\u01D0ng": "\u5C5B", "p\xECng": "", "p\u014D": "\u948B\u9642\u5761\u5CA5\u6CFA\u6CFC\u91D9\u7FCD\u9887\u6E8C\u9166\u9817\u6F51\u9197\u6FFC\u91B1\u93FA", "p\xF3": "\u5A46\u5619\u642B\u8522\u9131\u76A4\u6AC7\u56A9", "p\u01D2": "\u53F5\u5C00\u94B7\u7B38\u9255\u7BA5\u99CA\u9AF2", "p\xF2": "\u5EF9\u5CB6\u6540\u6622\u6D26\u73C0\u54F1\u70DE\u7836\u7834\u7C95\u5964\u6E50\u733C\u84AA\u9B44", "p\u014Du": "\u6299\u5256\u5A1D\u634A", "p\xF3u": "\u6294\u6299\u57BA\u634A\u638A\u88D2\u7B81", "p\u01D2u": "\u5485\u54E3\u5A44\u638A\u68D3\u7283", "p\u016B": "\u6535\u6534\u6251\u62AA\u7087\u67E8\u9660\u75E1\u79FF\u5657\u64B2\u6F7D\u92EA\u9BC6", "p\xFA": "\u5724\u530D\u6357\u8386\u83E9\u83D0\u8461\u84B2\u84B1\u50D5\u7B81\u917A\u58A3\u735B\u749E\u6FEE\u77A8\u7A59\u9564\u8D0C\u7E80\u93F7", "p\u01D4": "\u5703\u57D4\u6D66\u70F3\u666E\u5711\u6EA5\u669C\u8C31\u8AE9\u64C8\u6A38\u6C06\u6A8F\u9568\u8B5C\u8E7C\u9420", "p\xF9": "\u75E1\u8217\u8216\u92EA\u66DD", "qi": "\u5550", "q\u012B": "\u4E03\u8FC9\u6C8F\u6053\u67D2\u501B\u51C4\u6864\u90EA\u5A38\u60BD\u621A\u637F\u687C\u6DD2\u840B\u55B0\u6532\u6567\u68F2\u6B39\u6B3A\u7D2A\u7F09\u50B6\u8904\u50DB\u5601\u5884\u617D\u69BF\u6F06\u7DC0\u617C\u7DDD\u8AC6\u8E26\u8787\u970B\u8E4A\u9B4C\u93DA\u9D88", "q\xED": "\u4E0C\u4E93\u4F0E\u7941\u573B\u5C93\u5C90\u5FEF\u82AA\u4E9D\u6589\u6B67\u7541\u7947\u7948\u80B5\u4FDF\u75A7\u8360\u5258\u658A\u65C2\u7AD2\u8006\u8110\u8694\u8691\u869A\u966D\u9880\u57FC\u5D0E\u5E3A\u6391\u6DC7\u7309\u7566\u8401\u8415\u8DC2\u8EDD\u91EE\u9A90\u9A91\u5D5C\u68CA\u68CB\u7426\u742A\u797A\u86F4\u9691\u612D\u7881\u7895\u7A18\u8900\u951C\u980E\u9B3F\u65D7\u7CB8\u7DA5\u7DA8\u7DA6\u871D\u871E\u9F4A\u7482\u79A5\u8572\u89ED\u87A7\u9321\u9CAF\u61E0\u6FDD\u85BA\u85C4\u913F\u6AB1\u6AC0\u7C2F\u7C31\u81CD\u9A0E\u9A0F\u9CCD\u8604\u9BD5\u9D78\u9D80\u9E92\u7C4F\u8269\u8810\u9B10\u9A39\u9C2D\u7382\u9EA1", "q\u01D0": "\u4E5E\u9094\u4F01\u5C7A\u8291\u542F\u5447\u675E\u7398\u76C0\u5518\u8C48\u8D77\u5554\u5553\u555F\u5A4D\u68A9\u7EEE\u88B3\u8DC2\u6675\u68E8\u7DAE\u7DBA\u8AEC\u95D9", "q\xEC": "\u6C14\u8BAB\u5FD4\u6271\u6C17\u6C54\u8FC4\u545A\u5F03\u6C7D\u77F5\u829E\u4E9F\u546E\u6CE3\u7081\u76F5\u54A0\u6D13\u7AD0\u6814\u6B2B\u6C23\u8A16\u552D\u710F\u5921\u6112\u68C4\u6E46\u6E47\u847A\u6ECA\u789B\u6456\u66A3\u7508\u78B6\u5650\u6187\u69ED\u8D9E\u5668\u61A9\u78DC\u78E7\u78E9\u85D2\u7918\u7F4A\u87FF\u9411", "qi\u0101": "\u62B2\u6390\u88B7\u63E2\u845C\u64D6", "qi\xE1": "", "qi\u01CE": "\u62E4\u5CE0\u8DD2\u9160\u9790", "qi\xE0": "\u5736\u51BE\u533C\u54AD\u5E22\u6070\u6D3D\u80E2\u6B8E\u7848\u6118\u78CD\u9AC2", "qi\u0101n": "\u5343\u4EDF\u9621\u5731\u5732\u5977\u6266\u6C58\u828A\u8FC1\u4F65\u5C8D\u6744\u6C67\u833E\u6B26\u7ACF\u81E4\u948E\u62EA\u7275\u7C81\u60AD\u6333\u8688\u8C38\u5A5C\u5B6F\u727D\u91FA\u6394\u8C26\u9206\u50C9\u6106\u7B7E\u925B\u9A9E\u9E50\u6173\u6434\u647C\u6481\u53B1\u78CF\u8AD0\u9077\u9CFD\u8930\u8B19\u9845\u6AB6\u6510\u6511\u6ACF\u7C3D\u93F2\u9D6E\u5B45\u6513\u9A2B\u7C56\u9B1C\u9B1D\u7C64\u97C6", "qi\xE1n": "\u4EF1\u5C92\u5FF4\u6272\u62D1\u73AA\u4E79\u524D\u70B6\u8368\u94A4\u6B6C\u8654\u8699\u94B1\u94B3\u5042\u63AE\u63F5\u8EE1\u4E81\u5A8A\u6701\u728D\u8465\u9210\u7154\u9257\u5898\u69A9\u7B9D\u92AD\u648D\u6F5B\u6F5C\u7FAC\u8541\u6A6C\u9322\u9ED4\u9386\u9EDA\u9A1D\u6FF3\u9A1A\u704A\u9C2C", "qi\u01CEn": "\u51F5\u80B7\u550A\u6DFA\u5D70\u9063\u69CF\u8181\u8738\u8C34\u7F31\u7E7E\u8B74\u9453", "qi\xE0n": "\u6B20\u520B\u4F23\u82A1\u4FD4\u831C\u5029\u6093\u5811\u6385\u5094\u68C8\u6920\u6B3F\u55DB\u614A\u7698\u84A8\u5879\u6B49\u7DAA\u8533\u5119\u69E7\u7BCF\u8F24\u7BDF\u58CD\u5B31\u7E34", "qi\u0101ng": "\u7F8C\u6215\u6217\u65A8\u67AA\u73B1\u77FC\u7F97\u7310\u554C\u8DC4\u55F4\u690C\u6EAC\u7347\u8154\u55C6\u6436\u8723\u9516\u5D88\u6227\u6464\u69CD\u7244\u7472\u7FAB\u9535\u7BEC\u8B12\u8E4C\u8E61\u9397\u93D8\u93F9\u9DAC", "qi\xE1ng": "\u5F37\u5899\u5AF1\u8537\u6A2F\u6F12\u8503\u58BB\u5B19\u5EE7\u5F4A\u8594\u6AA3\u7246\u8262\u8620", "qi\u01CEng": "\u5F37\u7F9F\u6436\u7FA5\u588F\u5F4A\u7E48\u8941\u956A\u7E66\u93F9", "qi\xE0ng": "\u6217\u709D\u5534\u8DC4\u55C6\u6227\u646A\u7197\u7FBB", "qi\u0101o": "\u5E29\u7857\u90FB\u55BF\u5D6A\u714D\u8DF7\u9125\u9121\u5281\u52EA\u5E53\u6572\u6BC3\u8E0D\u9539\u589D\u78BB\u78DD\u981D\u9AB9\u58BD\u5E67\u6A47\u71C6\u7F32\u6A7E\u78FD\u936C\u936B\u7909\u7E51\u7E70\u8DAC\u8E7A\u8E7B\u93D2\u9430", "qi\xE1o": "\u4E54\u4FA8\u5CE4\u834D\u835E\u6865\u785A\u83EC\u55AC\u7744\u50D1\u646E\u69D7\u8C2F\u563A\u58A7\u5AF6\u5DA0\u6194\u6F50\u854E\u9792\u6A35\u6A4B\u71CB\u729E\u7644\u77A7\u7904\u7FF9\u6AF5\u85EE\u8B59\u8DAB\u9408\u97BD\u9866", "qi\u01CEo": "\u4E02\u5DE7\u91E5\u6100\u9ADC", "qi\xE0o": "\u8BEE\u9657\u5CED\u7A8D\u5062\u6BBB\u6BBC\u8A9A\u9ADA\u50FA\u563A\u64AC\u7BBE\u566D\u64BD\u9798\u97D2\u7909\u7AC5\u7FF9\u97A9\u8E88", "qi\u0113": "\u82C6", "qi\xE9": "\u767F\u4F3D\u8304\u807A", "qi\u011B": "", "qi\xE8": "\u5392\u59BE\u602F\u758C\u90C4\u5327\u7A83\u608F\u6308\u6814\u6D2F\u5E39\u60EC\u6DC1\u7B21\u611C\u6904\u7330\u86EA\u8D84\u8DD9\u55DB\u614A\u6705\u7A27\u7BA7\u9532\u7BCB\u8E25\u7A55\u9365\u9BDC\u7ACA\u7C61", "q\u012Bn": "\u5153\u4FB5\u94A6\u887E\u9A8E\u83F3\u5A87\u5D5A\u6B3D\u5D70\u7D85\u8A9B\u5D94\u89AA\u9849\u99F8\u9BBC\u5BF4", "q\xEDn": "\u5E88\u5FF4\u6272\u82A9\u82B9\u80A3\u77DC\u57D0\u73E1\u77DD\u79E6\u8039\u83E6\u8699\u6366\u83F3\u7434\u7439\u79BD\u8983\u9219\u922B\u96C2\u52E4\u55EA\u5AC0\u6EB1\u9772\u5ED1\u616C\u5659\u5D9C\u64D2\u65B3\u9CF9\u61C4\u6A8E\u6FBF\u763D\u8793\u61C3\u8804\u9D6D", "q\u01D0n": "\u5745\u6611\u7B09\u68AB\u8D7E\u5BD1\u9513\u5BDD\u5BD6\u5BE2\u92DF\u87BC", "q\xECn": "\u5422\u5423\u628B\u6C81\u551A\u83E3\u63FF\u6407\u64B3\u5BF4\u7019\u85FD", "q\u012Bng": "\u9751\u9752\u6C22\u8F7B\u503E\u537F\u90EC\u570A\u57E5\u5BC8\u6C2B\u6DF8\u6E05\u8EFD\u50BE\u7DAA\u873B\u8F15\u9306\u9CAD\u9BD6\u944B", "q\xEDng": "\u591D\u7520\u5260\u52CD\u5568\u60C5\u6B91\u7858\u6674\u68FE\u6C30\u845D\u6692\u64CF\u6A08\u64CE\u6AA0\u9EE5", "q\u01D0ng": "\u82D8\u9877\u8BF7\u5EBC\u9803\u5ECE\u6F00\u8ACB\u6ABE\u8B26", "q\xECng": "\u5E86\u51CA\u6385\u6BB8\u6E39\u7883\u7B90\u7DAE\u9758\u6176\u78EC\u89AA\u512C\u6FEA\u7F44\u6AE6", "qi\u014Dng": "", "qi\xF3ng": "\u536D\u909B\u5B86\u7A77\u7A79\u8315\u684F\u60F8\u7401\u7B47\u7B3B\u8D79\u712A\u712D\u743C\u823C\u86EC\u86E9\u7162\u718D\u7758\u8DEB\u928E\u778F\u7AAE\u511D\u5B1B\u618C\u6A69\u749A\u85D1\u74CA\u7AC6\u85ED\u74D7", "qi\xF2ng": "", "qi\u016B": "\u4E18\u4E20\u90B1\u5775\u6058\u79CC\u79CB\u6077\u86AF\u5A9D\u6E6B\u8429\u6978\u6E6C\u5878\u84F2\u9E59\u7BCD\u7DE7\u8775\u7A50\u8DA5\u9F9C\u6A5A\u9CC5\u87D7\u97A6\u97A7\u8612\u9C0C\u9C0D\u9D96\u8824\u9F9D", "qi\xFA": "\u53B9\u53F4\u56DA\u624F\u72B0\u738C\u827D\u8281\u6739\u6C53\u808D\u6C42\u866C\u6CC5\u726B\u866F\u4FC5\u89D3\u8A05\u8A04\u914B\u5512\u6D57\u7D0C\u838D\u900E\u9011\u91DA\u6882\u6B8F\u6BEC\u7403\u8D47\u91FB\u9804\u5D37\u5DEF\u6E1E\u6E6D\u76B3\u76DA\u9052\u716A\u7D7F\u86F7\u88D8\u5DF0\u89E9\u8CD5\u7486\u8764\u92B6\u9194\u9B82\u9F3D\u9BC4\u9C3D", "qi\u01D4": "\u641D\u7CD7", "qi\xF9": "", "q\u016B": "\u4F39\u4F49\u5324\u5C96\u8BCE\u9639\u9A71\u547F\u5765\u5C48\u5CB4\u62BE\u6D40\u795B\u80E0\u88AA\u5340\u710C\u7D36\u86C6\u8EAF\u7140\u7B41\u7CAC\u86D0\u8A58\u8D8D\u5D87\u6188\u99C6\u657A\u89D1\u8AB3\u99C8\u9EB9\u9AF7\u9B7C\u8DA8\u9EAF\u89B0\u89B7\u8EC0\u9D8C\u9EB4\u9EE2\u89BB\u9A45\u9C38\u9C4B", "q\xFA": "\u4F62\u52AC\u65AA\u6710\u80CA\u83C3\u8850\u9E32\u6DED\u7D47\u7FD1\u86BC\u844B\u8EE5\u8556\u7496\u78F2\u87B6\u9D1D\u74A9\u7FF5\u87DD\u77BF\u9F29\u8627\u5FC2\u7048\u6235\u6B0B\u6C0D\u7220\u7C67\u81DE\u766F\u6B14\u8837\u8862\u8EA3\u883C\u947A\u9E1C", "q\u01D4": "\u82E3\u53D6\u7AD8\u5A36\u7D36\u8A53\u7AEC\u877A\u9F8B\u9F72", "q\xF9": "\u53BB\u53BA\u521E\u6B2A\u801D\u9612\u89D1\u95B4\u9EAE\u95C3\u9F01\u89B0\u89B7\u89BB", "qu\u0101n": "\u594D\u5F2E\u609B\u570F\u68EC\u6926\u7B9E\u9409", "qu\xE1n": "\u5168\u6743\u4F7A\u72CB\u8BE0\u59FE\u5CD1\u606E\u6CC9\u6D24\u8343\u62F3\u7277\u8F81\u5573\u57E2\u5A58\u60D3\u6372\u75CA\u7842\u94E8\u6926\u6E76\u7288\u7B4C\u7D5F\u8472\u643C\u697E\u7454\u89E0\u8A6E\u8DE7\u8F07\u8737\u9293\u69EB\u6A29\u8E21\u7E13\u919B\u99E9\u95CE\u9CC8\u9B08\u9A21\u5B49\u5DCF\u9C01\u6B0A\u9F64\u77D4\u8838\u98A7\u9874\u7065", "qu\u01CEn": "\u72AD\u72AC\u72AE\u754E\u70C7\u7EFB\u7DA3\u8647", "qu\xE0n": "\u529D\u7276\u52E7\u97CF\u52F8\u7065", "qu\u0113": "\u7094\u7F3A\u7F3C\u8697\u849B\u9619\u95D5", "qu\xE9": "\u7638", "qu\xE8": "\u6C4B\u5374\u537B\u57C6\u5D05\u60AB\u7437\u5095\u6560\u656A\u68E4\u785E\u786E\u9615\u5859\u6409\u76B5\u788F\u9619\u9E4A\u6128\u69B7\u58A7\u6164\u78BB\u78BA\u8D9E\u71E9\u95CB\u7910\u95D5\u9D72\u792D", "q\u016Bn": "\u590B\u56F7\u9021\u7B98\u6B4F", "q\xFAn": "\u5BAD\u5CEE\u5E2C\u88D9\u7FA3\u7FA4\u88E0\u9E87", "q\u01D4n": "", "r\xE1n": "\u5465\u80B0\u887B\u8887\u86A6\u88A1\u86BA\u7136\u9AE5\u562B\u9AEF\u71C3\u7E4E", "r\u01CEn": "\u5184\u5189\u59CC\u82D2\u67D3\u73C3\u5AA3\u8485\u71AF\u6A6A", "r\xE0n": "", "r\u0101ng": "", "r\xE1ng": "\u7A63\u5134\u52F7\u703C\u737D\u8618\u79B3\u74E4\u7A70\u8E9F\u9B24", "r\u01CEng": "\u58CC\u58E4\u6518\u7219\u7E95", "r\xE0ng": "\u8BA9\u61F9\u8B72\u8B93", "r\xE1o": "\u5A06\u835B\u9976\u6861\u5B08\u8558\u6A48\u8953\u9952", "r\u01CEo": "\u6270\u5A06\u96A2\u5B08\u64FE", "r\xE0o": "\u7ED5\u9076\u7A58\u7E5E", "r\xE9": "\u637C", "r\u011B": "\u558F\u60F9", "r\xE8": "\u70ED\u6E03\u71B1", "r\xE9n": "\u4EBB\u4EBA\u4EC1\u58EC\u5FC8\u6732\u5FCE\u79C2\u82A2\u9B5C\u928B\u9D40", "r\u011Bn": "\u5FCD\u834F\u6820\u6823\u8375\u79F9\u83CD\u68EF\u7A14\u7D9B\u8EB5\u928B", "r\xE8n": "\u5203\u5204\u8BA4\u4EDE\u4EED\u8BB1\u5C7B\u5C83\u6268\u7EAB\u598A\u6752\u7263\u7EB4\u8095\u8F6B\u97E7\u996A\u794D\u59D9\u7D09\u887D\u7D1D\u8A12\u8ED4\u6895\u88B5\u91F0\u91FC\u7D4D\u814D\u9213\u9771\u976D\u97CC\u98EA\u8A8D\u9901", "r\u0113ng": "\u6254", "r\xE9ng": "\u4ECD\u8FB8\u793D\u82BF\u967E", "r\xEC": "\u65E5\u9A72\u56F8\u6C1C\u8875\u91F0\u91FC\u9224\u99B9", "r\xF3ng": "\u620E\u809C\u6804\u72E8\u7ED2\u8319\u8338\u8363\u5BB9\u5CF5\u6BE7\u70FF\u509B\u5AB6\u5D58\u6411\u7D68\u7FA2\u5AC6\u5D64\u6408\u69B5\u6EB6\u84C9\u6995\u69AE\u7194\u7462\u7A41\u69E6\u7E19\u877E\u8923\u9555\u878E\u878D\u99E5\u5B2B\u5DB8\u7203\u9394\u701C\u66E7\u8811", "r\u01D2ng": "\u5197\u5B82\u5748\u5087\u8EF5\u7E19\u6C04", "r\xF2ng": "\u7A43\u7E19", "r\xF3u": "\u53B9\u79B8\u67D4\u7C88\u811C\u5A83\u63C9\u6E18\u8447\u697A\u7163\u7448\u816C\u7CC5\u875A\u8E42\u8F2E\u9352\u97A3\u74C7\u9A25\u9C07\u9D94", "r\u01D2u": "\u97D6", "r\xF2u": "\u8089\u5B8D\u697A\u8B73", "r\u016B": "\u5DBF", "r\xFA": "\u909A\u5982\u543A\u4F9E\u5E24\u8339\u6310\u6847\u88BD\u94F7\u6E2A\u7B4E\u8498\u92A3\u8560\u8761\u5112\u9D11\u5685\u5B2C\u5B7A\u6FE1\u7373\u85B7\u9D3D\u66D8\u6ABD\u8966\u7E7B\u8815\u98A5\u91B9\u986C\u9C6C", "r\u01D4": "\u6C5D\u8097\u4E73\u8FB1\u910F\u64E9", "r\xF9": "\u5165\u6256\u6741\u6D33\u55D5\u5AB7\u6EBD\u7F1B\u84D0\u9CF0\u8925\u7E1F", "ru\xE1n": "\u5827\u648B\u58D6", "ru\u01CEn": "\u962E\u670A\u8F6F\u800E\u5044\u8EDF\u5A86\u744C\u815D\u789D\u7DDB\u8F2D\u6ABD\u74C0\u791D", "ru\xE0n": "\u7DDB", "ru\xED": "\u82FC\u6875\u7524\u7DCC\u8564", "ru\u01D0": "\u60E2\u854B\u854A\u6A64\u7E60\u58E1\u8603\u8602", "ru\xEC": "\u514A\u514C\u6290\u6C6D\u82AE\u6798\u7B0D\u868B\u9510\u745E\u8739\u777F\u92B3\u92ED\u53E1\u93F8", "r\xFAn": "\u77A4", "r\u01D4n": "", "r\xF9n": "\u95F0\u6DA6\u958F\u95A0\u6F64\u6A4D\u81B6", "ru\xF3": "\u633C\u637C", "ru\xF2": "\u53D2\u504C\u5F31\u9100\u5A7C\u6E03\u712B\u6949\u5D76\u84BB\u7BAC\u7BDB\u7207\u9C19\u9C2F\u9DB8", "sa": "", "s\u0101": "\u4EE8", "s\u01CE": "\u8A2F\u9778\u6F75\u9788\u6503\u7051\u8EA0\u7E9A", "s\xE0": "\u5345\u6CE7\u9491\u98D2\u810E\u8428\u9212\u644B\u96A1\u99BA\u856F\u98AF\u85A9\u6AD2\u93FE", "s\u0101i": "\u6BE2\u6122\u63CC\u6BF8\u816E\u5625\u567B\u9CC3\u984B\u9C13", "s\u01CEi": "\u55EE", "s\xE0i": "\u8D5B\u50FF\u8CFD\u7C3A", "san": "\u58ED", "s\u0101n": "\u4E09\u5F0E\u53C1\u53C3\u53C4\u53C5\u6BF6\u6BF5\u5381\u6BFF\u7299\u9B16", "s\u01CEn": "\u4ED0\u4F1E\u5098\u7CC1\u9993\u7CDD\u7CE4\u7CE3\u7E56\u93D2\u93FE\u994A", "s\xE0n": "\u4FD5\u5E34\u9590\u6F75", "s\u0101ng": "\u6852\u6851\u55AA\u69E1", "s\u01CEng": "\u55D3\u6421\u78C9\u892C\u98A1\u939F\u9859", "s\xE0ng": "\u55AA", "s\u0101o": "\u63BB\u6145\u6414\u6E9E\u7F2B\u61C6\u7F32\u87A6\u7E45\u9CCB\u98BE\u9A12\u7E70\u9A37\u9C20\u9C62", "s\u01CEo": "\u57FD\u6383\u5AC2", "s\xE0o": "\u57FD\u6383\u7619\u61C6\u6C09\u77C2\u9ADE", "s\u0113": "\u95AA", "s\xE8": "\u8272\u62FA\u6D13\u681C\u6DA9\u556C\u6E0B\u7CA3\u94EF\u96ED\u6B6E\u7417\u55C7\u745F\u6475\u6B70\u92AB\u69ED\u6F81\u5EE7\u61CE\u64CC\u6FC7\u6FCF\u7637\u7A51\u8594\u6F80\u74B1\u7012\u7A61\u938D\u7E6C\u7A6F\u8F56\u93FC\u95DF\u8B45\u98CB", "s\u0113n": "\u68EE\u692E\u69EE\u8942", "s\u011Bn": "", "s\u0113ng": "\u50E7\u9B19", "s\xE8ng": "", "s\u012B": "\u53B6\u7E9F\u4E1D\u53F8\u7CF9\u7CF8\u79C1\u549D\u6CC0\u4FEC\u6056\u8652\u9E36\u5072\u5082\u5AA4\u6122\u65AF\u7D72\u7F0C\u86F3\u6952\u7997\u9270\u98D4\u51D8\u53AE\u79A0\u7F73\u8724\u92AF\u9536\u5636\u565D\u5EDD\u6495\u6F8C\u78C3\u7DE6\u856C\u92D6\u71CD\u8784\u9376\u87D6\u87F4\u98B8\u9A26\u9BE3\u9401\u9DE5\u9F36", "s\xED": "", "s\u01D0": "\u6B7B\u6122", "s\xEC": "\u5DF3\u4E96\u56DB\u5BFA\u6C5C\u4F40\u5155\u59D2\u6CE4\u7940\u4FA1\u5B60\u676B\u6CD7\u9972\u9A77\u4FDF\u5A30\u67B1\u67F6\u6D20\u726D\u6D0D\u6D98\u8082\u98E4\u68A9\u7B25\u801B\u801C\u91F2\u7AE2\u8997\u55E3\u8086\u8C84\u9236\u923B\u98F4\u98FC\u69B9\u9289\u79A9\u99DF\u857C\u5129\u9A03\u7003", "s\u014Dng": "\u5FEA\u6780\u677E\u67A9\u5A00\u67D7\u502F\u51C7\u5D27\u5EBA\u68A5\u6DDE\u83D8\u6121\u63D4\u68C7\u5D69\u7879\u61BD\u6FCD\u6AA7\u9B06", "s\xF3ng": "", "s\u01D2ng": "\u6002\u609A\u6352\u8038\u7AE6\u50B1\u612F\u6964\u5D77\u6457\u6F0E\u616B\u8073\u99F7", "s\xF2ng": "\u5405\u8BBC\u5B8B\u8BF5\u9001\u9882\u8A1F\u980C\u8AA6\u93B9\u9938", "s\u014Du": "\u51C1\u6352\u635C\u910B\u55D6\u5EC0\u5ECB\u641C\u6EB2\u7340\u8490\u84C3\u998A\u6449\u98D5\u6457\u953C\u64A8\u8258\u878B\u9199\u93AA\u993F\u98BC\u98BE\u93C9\u9A2A", "s\u01D2u": "\u53DC\u53DF\u5081\u68F7\u84C3\u55FE\u778D\u64DE\u85AE\u64FB\u85EA\u6AE2\u7C54", "s\xF2u": "\u6B36\u55FD\u64DE\u7636\u64FB", "s\u016B": "\u7526\u9165\u7A21\u7A23\u7AA3\u7A4C\u9BC2\u8607\u8613\u6AEF\u56CC", "s\xFA": "\u5731\u4FD7", "s\u01D4": "", "s\xF9": "\u738A\u5919\u8BC9\u6CDD\u8083\u6D2C\u6D91\u73DF\u7D20\u83A4\u901F\u57E3\u6880\u6B90\u7C9B\u9A95\u5083\u68F4\u7C9F\u8A34\u8C21\u55C9\u5851\u5850\u5ACA\u612B\u6EAF\u6EB8\u8085\u9061\u9E54\u50F3\u612C\u6475\u69A1\u8186\u850C\u89EB\u8D9A\u906C\u619F\u6A15\u6A0E\u6F65\u78BF\u92C9\u9917\u6F5A\u7E24\u6A5A\u749B\u7C0C\u7E2E\u85D7\u8B16\u8E5C\u9A4C\u9C50\u9DEB", "su\u0101n": "\u72FB\u75E0\u9178", "su\u01CEn": "\u5334\u7BF9", "su\xE0n": "\u7958\u7B07\u7B6D\u849C\u7B97", "su\u012B": "\u590A\u8295\u867D\u5020\u54F8\u5A1E\u6D7D\u837E\u837D\u772D\u6BF8\u6ED6\u7762\u7F1E\u55FA\u71A3\u6FC9\u7E17\u9796\u96D6", "su\xED": "\u7EE5\u968B\u968F\u9040\u7D8F\u96A8\u74CD\u9AC4", "su\u01D0": "\u81B8\u7021\u9AD3", "su\xEC": "\u4E97\u5C81\u7815\u795F\u8C07\u57E3\u5D57\u9042\u6B72\u6B73\u716B\u775F\u788E\u96A7\u5B18\u6FBB\u7A42\u8AB6\u8CE5\u6A96\u71E7\u74B2\u79AD\u7A57\u7A5F\u7E40\u895A\u9083\u65DE\u7E50\u7E78\u8B62\u9406\u93F8\u9429\u97E2", "s\u016Bn": "\u72F2\u836A\u5B6B\u55B0\u98E7\u98F1\u640E\u733B\u84C0\u69C2\u8575\u859E", "s\u01D4n": "\u627B\u635F\u7B0B\u96BC\u7B4D\u640D\u69AB\u7BB0\u7C28\u93A8\u9DBD", "s\xF9n": "\u644C", "su\u014D": "\u5506\u5A11\u6331\u838F\u838E\u509E\u6332\u686B\u68AD\u7743\u55CD\u55E6\u7FA7\u84D1\u644D\u8D96\u7C11\u7C14\u7E2E\u9BBB", "su\xF3": "", "su\u01D2": "\u6240\u4E7A\u5522\u7D22\u7411\u7410\u5AC5\u60E2\u9501\u55E9\u669B\u6E91\u7355\u7463\u8928\u7485\u7E12\u938D\u9396\u93BB\u93C1", "su\xF2": "\u9024\u6EB9\u8736", "sh\u0101": "\u6740\u6749\u7EB1\u4E77\u524E\u7802\u5526\u6331\u6BBA\u7300\u7C86\u7D17\u838E\u6332\u686C\u6BEE\u94E9\u75E7\u7870\u644B\u8531\u88DF\u699D\u6A27\u9B66\u9CA8\u95B7\u9AFF\u93A9\u9BCA\u9BCB\u7E7A", "sh\xE1": "\u5565", "sh\u01CE": "\u50BB\u510D", "sh\xE0": "\u503D\u553C\u5551\u5E39\u83E8\u8410\u55A2\u55C4\u5EC8\u6B43\u7FDC\u6B70\u7B91\u7FE3\u6FC8\u95AF\u970E", "sh\u0101i": "\u7B5B\u7BE9\u8AF0\u7C01\u7C1B\u7C6D", "sh\u01CEi": "\u644B", "sh\xE0i": "\u6652\u6526\u66EC", "sh\u0101n": "\u5C71\u5F61\u9096\u5738\u5220\u522A\u6749\u829F\u59CD\u59D7\u886B\u9490\u57CF\u633B\u67F5\u70B6\u72E6\u73CA\u8222\u75C1\u8120\u8ED5\u7B18\u91E4\u958A\u5093\u8DDA\u527C\u6427\u7154\u5607\u5E53\u717D\u6F78\u6F98\u7A47\u6A86\u7E3F\u81BB\u9BC5\u7FB4\u7FB6", "sh\xE1n": "", "sh\u01CEn": "\u95EA\u9655\u70B6\u965D\u9583\u9584\u6671\u7154\u7752\u647B\u718C\u89A2", "sh\xE0n": "\u8BAA\u6C55\u59CD\u59D7\u759D\u9490\u5261\u8A15\u8D78\u639E\u91E4\u5584\u55AE\u692B\u7985\u928F\u9A9F\u50D0\u912F\u5103\u58A1\u58A0\u64A3\u6F6C\u7F2E\u5B17\u5DA6\u64C5\u657E\u6A3F\u6B5A\u79AA\u81B3\u78F0\u8B06\u8D61\u7E55\u87EE\u87FA\u8B71\u8D0D\u9425\u994D\u9A38\u9CDD\u9CE3\u7057\u9C53\u9C54", "shang": "", "sh\u0101ng": "\u4F24\u6B87\u5546\u6113\u6E6F\u89DE\u50B7\u7993\u5892\u616F\u6EF3\u6F21\u850F\u6BA4\u71B5\u87AA\u89F4\u8B2A\u9B3A", "sh\u01CEng": "\u57A7\u6244\u664C\u57EB\u8D4F\u6A09\u8CDE\u92FF\u93DB\u8D18\u945C", "sh\xE0ng": "\u4E04\u5C19\u5C1A\u6066\u7EF1\u7DD4\u979D", "sh\u0101o": "\u5A0B\u5F30\u70E7\u83A6\u713C\u8437\u65D3\u7B72\u8244\u8F0E\u8571\u71D2\u9798\u9AFE\u9BB9", "sh\xE1o": "\u52FA\u828D\u6753\u82D5\u67D6\u73BF\u97F6", "sh\u01CEo": "", "sh\xE0o": "\u4F4B\u52AD\u5372\u90B5\u7ECD\u67D6\u54E8\u5A0B\u8891\u7D39\u7744\u7DA4\u6F72", "sh\u0113": "\u5953\u5962\u731E\u8D4A\u756D\u756C\u7572\u8F0B\u8CD2\u8CD6\u6AA8", "sh\xE9": "\u820C\u4F58\u8675\u9607\u63F2\u86E5\u95CD\u78FC", "sh\u011B": "\u820D\u6368", "sh\xE8": "\u538D\u8BBE\u793E\u6CCF\u820E\u820D\u5399\u6315\u6D89\u6DBB\u6E09\u8A2D\u8D66\u5F3D\u6151\u6442\u6EE0\u6174\u850E\u6B59\u8802\u97D8\u9A07\u61FE\u651D\u7044\u9E9D\u6B07", "sh\xE9i": "\u8AB0", "sh\u0113n": "\u7533\u5C7E\u625F\u4F38\u8EAB\u4F81\u519E\u547B\u59BD\u7C76\u7EC5\u7F59\u8BDC\u59FA\u67DB\u6C20\u73C5\u7A7C\u7C78\u5A20\u5CF7\u7521\u7712\u7837\u8398\u53C3\u53C4\u5814\u6552\u6DF1\u7D33\u515F\u53C5\u68FD\u8460\u88D1\u8A37\u5AC0\u6437\u7F67\u84E1\u8A75\u5E53\u7527\u7CC1\u8518\u7CC2\u71CA\u8593\u99EA\u9CB9\u66D1\u7CDD\u7CE3\u9BD3\u9D62\u9BF5\u9C3A", "sh\xE9n": "\u795E\u698A\u926E\u9C30", "sh\u011Bn": "\u90A5\u5432\u5F1E\u628C\u5BA1\u77E4\u54C2\u77E7\u5BB7\u8C02\u8C09\u5A76\u6DF0\u6E16\u8A20\u68EF\u5BE9\u8AD7\u9823\u9B6B\u66CB\u77AB\u5B38\u700B\u89BE\u8B85", "sh\xE8n": "\u80BE\u4FBA\u661A\u80C2\u6D81\u7718\u6E17\u7973\u8124\u8C0C\u814E\u845A\u613C\u614E\u6939\u7606\u8704\u8703\u6EF2\u92E0\u762E\u9EEE", "sh\u0113ng": "\u5347\u751F\u9629\u544F\u58F0\u6598\u6607\u67A1\u6CE9\u72CC\u82FC\u6B85\u7272\u73C4\u7AD4\u965E\u66FB\u9679\u6BB8\u7B19\u6E66\u713A\u7525\u924E\u8072\u935F\u9F2A\u9D7F", "sh\xE9ng": "\u6E11\u7EF3\u61B4\u6FA0\u7E04\u7E49\u7E69\u8B5D", "sh\u011Bng": "\u771A\u5057\u6E3B", "sh\xE8ng": "\u5723\u4E57\u5A0D\u80DC\u6660\u665F\u5270\u5269\u52DD\u6909\u8CB9\u5D4A\u741E\u8056\u58AD\u69BA\u8542\u6A73\u8CF8", "shi": "\u8FBB\u7C42", "sh\u012B": "\u5C38\u5931\u5E08\u5394\u545E\u8671\u8BD7\u90BF\u9E24\u5C4D\u65BD\u6D49\u72EE\u5E2B\u7D41\u91F6\u6E64\u6E7F\u8479\u6EAE\u6EBC\u7345\u8492\u84CD\u8A69\u9247\u5618\u7461\u917E\u9CF2\u5653\u7BB7\u8768\u9CFE\u8937\u9CBA\u6FD5\u9366\u9BF4\u9C24\u9DB3\u8979\u91C3", "sh\xED": "\u5341\u9963\u4E6D\u65F6\u7ACD\u5B9F\u5B9E\u65F9\u98E0\u59FC\u5CD5\u70BB\u794F\u8680\u57D8\u5BB2\u6642\u83B3\u5BD4\u6E5C\u9048\u5852\u5D75\u6EA1\u8494\u9250\u5BE6\u69AF\u78A9\u8755\u9CA5\u9B96\u9F2B\u8B58\u9F2D\u9C23", "sh\u01D0": "\u53F2\u77E2\u4E68\u8C55\u4F7F\u59CB\u9A76\u5158\u5BA9\u5C4E\u72F6\u75D1\u7B36\u6981\u9242\u99DB", "sh\xEC": "\u58EB\u793B\u4E17\u4E16\u4ED5\u5E02\u793A\u534B\u5F0F\u5FD5\u4E8A\u5FEF\u623A\u4E8B\u4F8D\u52BF\u5469\u67F9\u89C6\u8BD5\u9970\u519F\u54B6\u5BA4\u5CD9\u6040\u6043\u62ED\u6630\u662F\u67BE\u67FF\u72E7\u7702\u8D33\u9002\u683B\u70D2\u770E\u7721\u8006\u8210\u83B3\u8F7C\u901D\u94C8\u556B\u57F6\u7564\u79F2\u8996\u91C8\u5D3C\u5D3B\u5F11\u5FA5\u60FF\u63D3\u8C25\u8CB0\u91CA\u52E2\u55DC\u5F12\u6974\u7176\u7757\u7B6E\u8494\u89E2\u8A66\u8EFE\u9230\u9243\u98FE\u8213\u8A93\u9069\u927D\u99B6\u596D\u92B4\u991D\u9919\u566C\u5B15\u6FA8\u6FA4\u8AE1\u8ADF\u907E\u6AA1\u87AB\u8B1A\u7C2D\u896B\u91B3\u91CB\u9C18", "sh\u014Du": "\u53CE\u6536\u654A", "sh\xF3u": "\u719F", "sh\u01D2u": "\u624C\u624B\u5B88\u57A8\u9996\u824F", "sh\xF2u": "\u5BFF\u53D7\u72E9\u517D\u552E\u6388\u6DAD\u7EF6\u75E9\u8184\u58FD\u5900\u7626\u7DAC\u563C\u7363\u7378\u93C9", "sh\u016B": "\u4E66\u6BB3\u758B\u5FEC\u6292\u7EBE\u53D4\u6778\u67A2\u964E\u59DD\u5010\u500F\u6348\u66F8\u6B8A\u7D13\u5A4C\u6086\u6393\u68B3\u6DD1\u7102\u83FD\u8ED7\u9103\u7421\u758E\u758F\u8212\u6445\u6BF9\u6BFA\u7D80\u8F93\u7479\u8DFE\u8E08\u6A1E\u7DF0\u852C\u8F38\u6A7E\u9B9B\u5135\u6504\u702D\u9D68", "sh\xFA": "\u672E\u5C17\u79EB\u5B70\u8D4E\u84A3\u587E\u719F\u74B9\u8D16", "sh\u01D4": "\u9F21\u668F\u6691\u7A0C\u9ECD\u7F72\u8700\u9F20\u6578\u6F7B\u85A5\u85AF\u66D9\u7659\u85F7\u8961\u7CEC\u8969\u5C6C\u7C54\u8834\u9C6A\u9C70", "sh\xF9": "\u672E\u620D\u675F\u6CAD\u8FF0\u4FB8\u4FDE\u516A\u54B0\u6038\u6037\u6811\u7AD6\u8357\u6055\u6352\u5EBB\u5EB6\u7D49\u8481\u8853\u9683\u5C0C\u88CB\u7AEA\u8167\u9265\u5885\u6F31\u6F44\u6578\u6F8D\u8C4E\u6A39\u6FD6\u9330\u9714\u93E3\u9D90\u866A", "shu\u0101": "\u5530", "shu\u01CE": "\u800D", "shu\xE0": "\u8A9C", "shu\u0101i": "\u7F1E\u6454\u7E17", "shu\u01CEi": "\u7529", "shu\xE0i": "\u5E05\u5E25\u87C0\u535B", "shu\u0101n": "\u95E9\u62F4\u9582\u6813\u7D5F", "shu\xE0n": "\u6DAE\u8168\u69EB", "shu\u0101ng": "\u53CC\u6CF7\u971C\u96D9\u5B40\u7027\u9AA6\u5B47\u9A3B\u6B06\u7935\u9DDE\u9E74\u826D\u9A66\u9E18", "shu\u01CEng": "\u723D\u587D\u6161\u6F3A\u7E14\u93EF", "shu\xE0ng": "\u7040", "shu\xED": "\u8C01\u813D\u8AB0", "shu\u01D0": "\u6C35\u6C34\u6C3A\u9596", "shu\xEC": "\u5E28\u6329\u635D\u6D97\u6D9A\u5A37\u7971\u7A05\u7A0E\u88DE\u7761\u8AAA\u8AAC", "sh\u01D4n": "\u542E\u696F", "sh\xF9n": "\u987A\u7734\u821C\u9806\u8563\u6A53\u779A\u77A4\u77AC\u9B0A", "shu\u014D": "\u8AAA\u8AAC", "shu\xF2": "\u5981\u6D2C\u70C1\u6714\u94C4\u6B36\u77DF\u6420\u84B4\u928F\u612C\u69CA\u7361\u78A9\u6578\u7BBE\u9399\u720D\u9460", "ta": "\u4FA4", "t\u0101": "\u4ED6\u5B83\u7260\u7942\u8DBF\u94CA\u584C\u6999\u6EBB\u9248\u891F\u95E7", "t\xE1": "", "t\u01CE": "\u5854\u6E9A\u5896\u736D\u9B99\u9CCE\u737A\u9C28", "t\xE0": "\u6C93\u631E\u72E7\u95FC\u7C8F\u5D09\u6DBE\u509D\u55D2\u6428\u905D\u9062\u9618\u69BB\u6BFE\u6F2F\u79A2\u64BB\u6FBE\u8ABB\u8E0F\u9788\u5683\u6A7D\u9314\u6FCC\u8E4B\u979C\u9389\u9391\u95D2\u97B3\u8E79\u8E82\u56BA\u95DF\u95E5\u8B76\u8EA2", "t\u0101i": "\u56FC\u5B61\u73C6\u80CE", "t\xE1i": "\u65F2\u90B0\u576E\u62AC\u9A80\u67B1\u70B1\u70B2\u83ED\u8DC6\u9C90\u7B88\u81FA\u98B1\u99D8\u5113\u9B90\u5B2F\u64E1\u85B9\u6AAF\u6584\u7C49", "t\u01CEi": "\u5964", "t\xE0i": "\u592A\u51AD\u5933\u5FD5\u6C4F\u5FF2\u6C70\u6C71\u6001\u80BD\u949B\u6CF0\u8226\u915E\u9226\u6E99\u614B\u71E4", "t\u0101n": "\u574D\u8D2A\u6039\u5574\u75D1\u8211\u8CAA\u644A\u6EE9\u563D\u6F6C\u762B\u64F9\u6524\u7058\u7671", "t\xE1n": "\u575B\u6619\u5013\u8C08\u90EF\u57EE\u5A52\u60D4\u5F3E\u8983\u6983\u75F0\u952C\u8C2D\u563E\u58B0\u58B5\u5F48\u619B\u6F6D\u8AC7\u9188\u58C7\u66C7\u6A5D\u6FB9\u71C2\u931F\u6A80\u9843\u7F48\u85EB\u58DC\u7E75\u8B5A\u8C9A\u91B0\u8B60\u7F4E", "t\u01CEn": "\u5FD0\u5766\u8892\u94BD\u83FC\u6BEF\u50CB\u926D\u55FF\u7DC2\u5103\u61B3\u61BB\u66BA\u9193\u74AE\u8962", "t\xE0n": "\u53F9\u70AD\u5013\u57EE\u63A2\u509D\u6E60\u50CB\u5606\u78B3\u8215\u6B4E", "t\u0101ng": "\u94F4\u6E6F\u5621\u528F\u7FB0\u876A\u859A\u9557\u8E5A\u93DC\u95DB\u97BA\u9F1E", "t\xE1ng": "\u5763\u5510\u5802\u508F\u557A\u6113\u68E0\u910C\u5858\u5D63\u642A\u6E8F\u84CE\u969A\u69B6\u6F1F\u717B\u746D\u799F\u8185\u6A18\u78C4\u7CC3\u819B\u6A56\u7BD6\u7CD6\u8797\u8E3C\u7CDB\u87B3\u8D6F\u91A3\u9395\u9939\u93DC\u95DB\u9944\u9DB6", "t\u01CEng": "\u4F16\u5E11\u5052\u50A5\u8025\u8EBA\u954B\u93B2\u513B\u6203\u7059\u66ED\u7223\u77D8\u9482", "t\xE0ng": "\u70EB\u94F4\u6465\u71D9\u940B", "t\u0101o": "\u5932\u5935\u5F22\u62AD\u6D9B\u7EE6\u638F\u6DAD\u7D5B\u8A5C\u5ACD\u5E4D\u6146\u642F\u6ED4\u69C4\u746B\u97EC\u98F8\u7E1A\u7E27\u6FE4\u8B1F\u8F41\u97B1\u97DC\u9955", "t\xE1o": "\u530B\u8FEF\u54B7\u6D2E\u9003\u6843\u9676\u5555\u68BC\u6DD8\u7EF9\u8404\u7979\u88EA\u7DAF\u872A\u9780\u9184\u9789\u92FE\u99E3\u6AAE\u9940\u9A0A\u9F17", "t\u01CEo": "\u8BA8\u8A0E", "t\xE0o": "\u5957", "t\xE8": "\u5FD1\u5FD2\u7279\u8126\u7286\u94FD\u615D\u92F1\u87D8", "t\u0113ng": "\u71A5\u81AF\u9F1F", "t\xE9ng": "\u75BC\u75CB\u5E50\u817E\u8A8A\u6F1B\u6ED5\u9086\u7E22\u87A3\u99E6\u8B04\u512F\u85E4\u9A30\u7C50\u9C27\u7C58\u8645\u9A63", "t\xE8ng": "\u972F", "t\u012B": "\u5254\u68AF\u9511\u8E22\u92BB\u64FF\u9DC9\u9DC8\u9AD4", "t\xED": "\u82D0\u5397\u8351\u684B\u7EE8\u504D\u73F6\u557C\u5A82\u5A9E\u5D39\u60FF\u6E27\u7A0A\u7F07\u7F64\u9046\u9E48\u55C1\u7445\u7994\u7D88\u777C\u78AE\u8906\u5FB2\u6F3D\u78C3\u7DF9\u855B\u9898\u8DA7\u8E44\u918D\u8B15\u8E4F\u9357\u9CC0\u984C\u9BB7\u9D5C\u9A20\u9BF7\u9D97\u9D99\u79B5\u9DE4", "t\u01D0": "\u632E\u5FA5\u8EB0\u9AB5\u918D\u8EC6\u9AD4", "t\xEC": "\u623B\u5943\u5C49\u5243\u6711\u4FF6\u501C\u608C\u632E\u6D95\u7723\u7EE8\u9016\u5551\u5C5C\u6090\u60D5\u63A6\u7B39\u9037\u5C5F\u60D6\u63E5\u66FF\u68E3\u7D88\u88FC\u8905\u6B52\u6BA2\u9AF0\u8599\u568F\u9B00\u5694\u74CB\u9B04\u7C4A\u8DAF", "ti\u0101n": "\u5929\u5172\u5451\u5A56\u6DFB\u915F\u9754\u9EC7\u975D", "ti\xE1n": "\u7530\u5C47\u6CBA\u606C\u7551\u754B\u76F7\u80CB\u94BF\u751B\u751C\u83FE\u6E49\u5861\u6437\u9617\u7471\u78B5\u7DC2\u78CC\u7AB4\u9D2B\u74B3\u95D0\u9DC6\u9DCF", "ti\u01CEn": "\u5975\u5FDD\u6B84\u500E\u681D\u553A\u60BF\u6DDF\u7D3E\u94E6\u666A\u7420\u8146\u89CD\u75F6\u7753\u8214\u929B\u9902\u89A5\u8CDF\u92BD\u932A", "ti\xE0n": "\u63AD\u83FE\u7420\u7471\u821A", "ti\u0101o": "\u65EB\u4F7B\u5EA3\u604C\u689D\u7967\u804E", "ti\xE1o": "\u8280\u6737\u5CA7\u5CB9\u82D5\u8FE2\u7952\u689D\u7B24\u8414\u94EB\u84DA\u84E8\u84E7\u9F86\u6A24\u8729\u929A\u8ABF\u92DA\u9797\u9AEB\u9CA6\u9BC8\u93A5\u9F60\u9C37", "ti\u01CEo": "\u5BA8\u6640\u6713\u8101\u7A95\u8A82\u65A2\u7AB1\u5B25", "ti\xE0o": "\u5541\u773A\u7C9C\u7D69\u899C\u8D92\u7CF6", "ti\u0113": "\u6017\u8D34\u841C\u8051\u8CBC\u8DD5", "ti\xE9": "", "ti\u011B": "\u94C1\u86C8\u9244\u50E3\u9295\u9421\u9435\u9A56", "ti\xE8": "\u546B\u98FB\u992E", "t\u012Bng": "\u5385\u5E81\u6C40\u542C\u5E8D\u8013\u539B\u70C3\u686F\u70F4\u6E1F\u7D8E\u9793\u8074\u807C\u5EF0\u807D\u5EF3", "t\xEDng": "\u9092\u5EF7\u4EAD\u5EAD\u839B\u505C\u5A77\u5D49\u6E1F\u7B73\u8476\u8713\u695F\u69B3\u95AE\u9706\u8064\u874F\u8AEA\u9F2E", "t\u01D0ng": "\u5722\u753C\u753A\u4FB9\u4FB1\u5A17\u633A\u6D8F\u6883\u70F6\u73FD\u8121\u94E4\u8247\u988B\u8A94\u92CC\u95AE\u9832", "t\xECng": "\u5FCA\u6883\u6FCE", "t\u014Dng": "\u56F2\u70B5\u901A\u75CC\u7D67\u55F5\u84EA\u6A0B", "t\xF3ng": "\u4EDD\u4F5F\u5F64\u4F97\u5CC2\u5E9D\u54C3\u578C\u5CD2\u5CDD\u72EA\u833C\u664D\u6850\u6D75\u70D4\u783C\u8692\u5045\u75CC\u772E\u79F1\u94DC\u7867\u7AE5\u7CA1\u7D67\u8A77\u8D68\u916E\u9256\u50EE\u52ED\u9275\u9285\u9907\u9C96\u6F7C\u735E\u66C8\u6723\u6A66\u6C03\u71D1\u729D\u81A7\u77B3\u7A5C\u9BA6", "t\u01D2ng": "\u4F97\u7EDF\u6345\u6876\u7B52\u7D71\u7B69\u7D82", "t\xF2ng": "\u6078\u75DB\u8855\u615F\u6185", "tou": "", "t\u014Du": "\u5078\u5077\u5A7E\u5AAE\u7DF0\u92C0\u936E", "t\xF3u": "\u4EA0\u6295\u9AB0\u982D", "t\u01D2u": "\u59B5\u7D0F\u6568\u98F3\u65A2\u9EC8\u8623", "t\xF2u": "\u900F\u57F1", "tu": "\u6C62", "t\u016B": "\u51F8\u5B8A\u79BF\u79C3\u6022\u7A81\u6D8B\u6378\u5817\u6E65\u75DC\u8456\u5D80\u92F5\u9D5A\u9F35", "t\xFA": "\u56F3\u56FE\u51C3\u5CF9\u5EA9\u5F92\u6087\u6348\u6D82\u837C\u83B5\u9014\u555A\u5C60\u688C\u83DF\u63EC\u7A0C\u8D83\u5857\u5D5E\u760F\u7B61\u816F\u84A4\u922F\u5717\u5716\u5EDC\u6455\u6F73\u7479\u8DFF\u9174\u58BF\u999F\u6AA1\u934E\u99FC\u9D4C\u9D9F\u9DCB\u9DF5", "t\u01D4": "\u571F\u5721\u948D\u550B\u91F7", "t\xF9": "\u514E\u8FCC\u5154\u550B\u83B5\u580D\u83DF\u92C0\u9D75", "tu\u0101n": "\u6E4D\u732F\u5715\u7153\u8C92", "tu\xE1n": "\u56E3\u56E2\u629F\u5278\u5718\u587C\u6171\u6476\u6F19\u69EB\u7BFF\u6AB2\u93C4\u7CF0\u9DD2\u9DFB", "tu\u01CEn": "\u757D\u58A5\u7583", "tu\xE0n": "\u5F56\u6E6A\u732F\u8916\u8C92", "tu\u012B": "\u5FD2\u63A8\u84F7\u85EC\u8B89", "tu\xED": "\u5F1A\u9893\u50D3\u96A4\u58A4\u5C35\u6A54\u983A\u9839\u983D\u9B4B\u7A68\u8608\u8E6A", "tu\u01D0": "\u4FC0\u8049\u817F\u50D3\u8E46\u9ABD", "tu\xEC": "\u4FBB\u9000\u5A27\u717A\u86FB\u8715\u8781\u99FE", "t\u016Bn": "\u541E\u5451\u65FD\u6D92\u554D\u671C\u711E\u564B\u619E\u66BE", "t\xFAn": "\u5749\u5E89\u5FF3\u829A\u9968\u86CC\u8C58\u8C5A\u8ED8\u98E9\u9C80\u9B68\u9715\u9ED7\u81C0\u81CB", "t\u01D4n": "\u6C3D", "t\xF9n": "", "tu\u014D": "\u4E47\u4EDB\u8BAC\u6258\u6261\u6C51\u9966\u6754\u4F82\u5483\u549C\u62D5\u62D6\u6CB0\u6329\u635D\u838C\u8889\u88A5\u8A17\u5574\u6DB6\u812B\u8131\u98E5\u99B2\u9B60\u9BB5", "tu\xF3": "\u9624\u9A6E\u4F57\u9640\u9641\u5768\u5CAE\u6CB1\u6CB2\u72CF\u9A7C\u4FBB\u67C1\u7824\u7823\u8889\u94CA\u9E35\u7D3D\u5836\u5AA0\u8A51\u8DCE\u9161\u78A2\u9248\u99B1\u69D6\u99C4\u92D6\u99DE\u99DD\u6A50\u9B80\u9D15\u9F27\u9A28\u9F0D\u9A52\u9A5D\u9F09", "tu\u01D2": "\u5F75\u59A5\u5EB9\u692D\u6955\u5AF7\u64B1\u6A62\u9D4E\u9C16", "tu\xF2": "\u675D\u67DD\u6BE4\u553E\u6DB6\u841A\u8DC5\u6BFB\u5D9E\u7BA8\u8600\u7C5C", "wa": "\u54C7", "w\u0101": "\u5C72\u7A75\u5459\u52B8\u54BC\u54C7\u5F8D\u6316\u6D3C\u5A32\u7556\u7A8A\u5532\u5558\u5AA7\u7A90\u55D7\u74FE\u86D9\u6432\u6E9B\u6F25\u7AAA\u9F03\u6528\u97C8", "w\xE1": "\u5A03", "w\u01CE": "\u4F64\u90B7\u5493\u7819\u74F8\u6432", "w\xE0": "\u5E13\u889C\u5A60\u8049\u55E2\u6432\u817D\u8183\u97CE\u896A\u97E4", "wai": "", "w\u0101i": "\u5459\u54BC\u6B6A\u558E\u7AF5\u7024", "w\u01CEi": "\u5D34", "w\xE0i": "\u5916\u9861", "w\u0101n": "\u6BCC\u5917\u5F2F\u525C\u57E6\u5A60\u5E35\u6365\u5846\u6E7E\u7755\u873F\u6F6B\u8C4C\u92FA\u5F4E\u58EA\u7063", "w\xE1n": "\u4E38\u5213\u6C4D\u7EA8\u8284\u5B8C\u5C8F\u5FE8\u628F\u676C\u73A9\u7B02\u7D08\u6356\u8696\u987D\u70F7\u7413\u8CA6\u9811\u7FEB", "w\u01CEn": "\u5918\u5917\u5007\u550D\u633D\u76CC\u839E\u83AC\u57E6\u5A49\u60CB\u6365\u665A\u6665\u689A\u6DB4\u7EFE\u8118\u83C0\u8416\u60CC\u6669\u667C\u6900\u742C\u7696\u7579\u7897\u7BA2\u7DA9\u7DB0\u8F13\u8E20\u92D4\u92FA", "w\xE0n": "\u534D\u5350\u59A7\u6764\u6365\u8115\u6394\u8155\u842C\u7D7B\u7D84\u8F10\u69FE\u6FAB\u92C4\u77A3\u858D\u933D\u87C3\u8D03\u93AB\u8D0E", "w\u0101ng": "\u5C23\u5C2B\u5C2A\u6C6A\u5C29\u7007", "w\xE1ng": "\u4EBE\u5166\u4EFC\u83A3\u869F\u671A", "w\u01CEng": "\u7F53\u7F52\u7F51\u5F7A\u5FF9\u6282\u5F83\u5F80\u6789\u7F56\u7F54\u8FEC\u60D8\u83F5\u6680\u68E2\u86E7\u8F8B\u7DB2\u8744\u8AB7\u8F1E\u7007\u9B4D", "w\xE0ng": "\u5984\u5FD8\u8FCB\u65FA\u76F3\u5F8D\u671B\u6680\u6722", "w\u0113i": "\u5383\u5371\u5A01\u502D\u70D3\u504E\u9036\u9687\u9688\u55B4\u5A99\u5D34\u5D54\u6104\u63CB\u63FB\u8468\u8473\u5FAE\u6933\u6972\u6EA6\u7168\u8A74\u8732\u7E05\u875B\u89A3\u5DB6\u8587\u71F0\u9CC2\u7650\u7653\u5DCD\u9C03\u9C04\u973A", "w\xE9i": "\u56D7\u97E6\u5729\u56F2\u56F4\u5E0F\u6CA9\u8FDD\u95F1\u96B9\u5CD7\u5CDE\u6D08\u70BA\u97CB\u6845\u6DA0\u552F\u5E37\u60DF\u7859\u7EF4\u55A1\u570D\u5A81\u5D6C\u5E43\u6E4B\u6E88\u7232\u741F\u9055\u6F4D\u7DAD\u84F6\u912C\u649D\u6F59\u6F7F\u9180\u6FF0\u934F\u95C8\u9BA0\u58DD\u77C0\u89B9\u72A9\u6B08", "w\u011Bi": "\u4F1F\u4F2A\u7EAC\u829B\u82C7\u709C\u73AE\u6D27\u5A13\u5C57\u6364\u6D58\u8371\u8BFF\u5049\u507D\u5529\u5D23\u637C\u68B6\u75CF\u784A\u840E\u9697\u9AA9\u5A81\u5D54\u5EC6\u5FAB\u6107\u6E28\u7325\u8466\u848D\u9AAB\u9AAA\u6690\u6932\u7152\u744B\u75FF\u8172\u8249\u97EA\u50DE\u5D89\u64B1\u78A8\u78C8\u9C94\u5BEA\u7DEF\u853F\u8AC9\u8E13\u97D1\u9820\u85B3\u5130\u6FFB\u9361\u9BAA\u7022\u97D9\u98B9\u97E1\u4EB9\u74D7\u6596", "w\xE8i": "\u536B\u672A\u4F4D\u5473\u82FF\u70BA\u754F\u80C3\u53DE\u8ECE\u731A\u7859\u83CB\u8C13\u5582\u55A1\u5AA6\u6E2D\u7232\u732C\u715F\u589B\u7786\u78A8\u851A\u873C\u6170\u71AD\u729A\u78D1\u7DED\u875F\u885B\u61C0\u7F7B\u885E\u8B02\u9927\u9B87\u87B1\u893D\u9935\u9B4F\u85EF\u8F4A\u93CF\u9728\u9CDA\u8636\u9956\u74D7\u8B86\u8E97\u8B8F\u8E9B", "w\u0113n": "\u6637\u586D\u6E29\u7F0A\u6985\u6B9F\u6EAB\u7465\u8F92\u97EB\u69B2\u761F\u7DFC\u7E15\u8C71\u8F3C\u8F40\u93BE\u9942\u9CC1\u97B0\u9C1B\u9C2E", "w\xE9n": "\u6587\u5F63\u82A0\u7086\u739F\u95FB\u7D0B\u8689\u868A\u73F3\u960C\u96EF\u7612\u805E\u99BC\u99C7\u9B70\u9CFC\u9D0D\u87A1\u95BA\u95BF\u87C1\u95C5\u9F24\u7E67\u95E6", "w\u011Bn": "\u4F06\u520E\u543B\u5445\u5FDF\u6286\u5461\u5FDE\u6B7E\u80B3\u7D0A\u687D\u8117\u7A33\u7A4F\u7A69", "w\xE8n": "\u95EE\u598F\u6C76\u7D0B\u83AC\u554F\u6E02\u63FE\u6435\u7D7B\u9850\u74BA", "w\u0113ng": "\u7FC1\u55E1\u6EC3\u9E5F\u806C\u8789\u9393\u9DB2", "w\u011Bng": "\u52DC\u5963\u5855\u5D61\u6EC3\u84CA\u66A1\u7788\u651A", "w\xE8ng": "\u74EE\u8579\u7515\u7F4B\u9F46", "w\u014D": "\u631D\u502D\u83B4\u5529\u6DB9\u6E26\u7327\u8435\u5594\u7A9D\u7AA9\u8717\u64BE\u6FC4\u7DFA\u8778\u8E12\u85B6", "w\u01D2": "\u5459\u6211\u54BC\u5A51\u5A50\u6370", "w\xF2": "\u4EF4\u6C83\u809F\u5367\u6782\u81E5\u5053\u637E\u6DB4\u5A89\u5E44\u63E1\u6E25\u7125\u786A\u6943\u815B\u65A1\u7783\u6FE3\u74C1\u81D2\u9F8C\u99A7\u9F8F\u9F77", "w\u016B": "\u4E4C\u572C\u5F19\u625C\u625D\u6C5A\u6C59\u6C61\u90AC\u545C\u5DEB\u6745\u6747\u65BC\u5C4B\u6D3F\u8BEC\u94A8\u70CF\u526D\u7A8F\u91EB\u60E1\u9114\u55DA\u8A88\u50EB\u6B4D\u8AA3\u7BBC\u92D8\u8790\u9D2E\u93A2\u9C1E", "w\xFA": "\u65E0\u6BCB\u5433\u5434\u543E\u5449\u829C\u90DA\u5514\u5A2A\u5CFF\u6D16\u6D6F\u8323\u8381\u68A7\u73F8\u7966\u7121\u94FB\u9E40\u8708\u58B2\u856A\u92D9\u92D8\u6A46\u7491\u87F1\u9BC3\u9D50\u8B55\u9F2F\u9DE1", "w\u01D4": "\u4E44\u4E94\u5348\u4EF5\u4F0D\u59A9\u5E91\u5FE4\u6003\u8FD5\u65FF\u6B66\u739D\u4FAE\u5035\u5A12\u6342\u901C\u965A\u554E\u5A2C\u727E\u5825\u73F7\u6440\u7894\u9E49\u7193\u7466\u821E\u5AF5\u5EE1\u61AE\u6F55\u511B\u7512\u81B4\u77B4\u9D61\u8E8C", "w\xF9": "\u5140\u52FF\u52A1\u620A\u9622\u5C7C\u6264\u575E\u5C89\u674C\u6C95\u82B4\u5FE2\u65FF\u7269\u77F9\u4FC9\u537C\u6544\u67EE\u8BEF\u52D9\u5514\u5A2A\u609F\u609E\u60AE\u7C85\u8DB6\u6664\u7110\u5A7A\u5D4D\u60E1\u6E1E\u75E6\u9696\u9770\u9A9B\u5862\u5966\u5D68\u6EA9\u96FA\u96FE\u50EB\u5BE4\u7183\u8AA4\u9E5C\u92C8\u7AB9\u971A\u9F3F\u9727\u9F40\u8601\u9A16\u9DA9", "x\u012B": "\u5915\u516E\u909C\u5438\u5FDA\u6271\u6C50\u897F\u5E0C\u6278\u5365\u6614\u6790\u77FD\u7A78\u80B8\u80B9\u4FD9\u54A5\u54AD\u5F86\u6038\u6053\u8BF6\u90D7\u997B\u550F\u595A\u5A2D\u5C56\u606F\u6095\u6C25\u6D60\u727A\u72F6\u8383\u553D\u6089\u60DC\u665E\u6878\u6B37\u6DC5\u6E13\u70EF\u7101\u7108\u740B\u7852\u7F9B\u83E5\u8D65\u91F8\u5092\u60C1\u6670\u6673\u711F\u712C\u7280\u774E\u7A00\u7C9E\u7FD6\u7FD5\u823E\u910E\u5380\u5D60\u5FAF\u6EAA\u7155\u7699\u788F\u84A0\u88FC\u9521\u50D6\u69BD\u7184\u7188\u7199\u7361\u7DC6\u8725\u89A1\u8A92\u8C68\u95AA\u990F\u563B\u564F\u5B06\u5B09\u5DB2\u6198\u6F5D\u761C\u78CE\u819D\u51DE\u66BF\u6A28\u6A40\u6B59\u71BB\u71BA\u71B9\u7AB8\u7FB2\u8785\u8787\u932B\u71E8\u72A0\u77A6\u7902\u87CB\u8C40\u8C3F\u8C6F\u8C95\u8E4A\u5DC2\u7CE6\u7E65\u91D0\u96DF\u9BD1\u9D57\u89F9\u8B46\u91AF\u93ED\u940A\u96B5\u56B1\u5DC7\u66E6\u7214\u72A7\u9145\u994E\u89FD\u9F37\u8835\u9E02\u89FF\u9474", "x\xED": "\u4E60\u90CB\u5E2D\u7FD2\u88AD\u89CB\u96ED\u55BA\u5AB3\u693A\u84B5\u84C6\u5D8D\u6F1D\u8D98\u69E2\u8582\u96B0\u6A84\u8B35\u93B4\u972B\u9CDB\u98C1\u9A31\u9A3D\u9C3C\u8972\u9A68", "x\u01D0": "\u676B\u67B2\u73BA\u5F99\u559C\u8448\u8478\u9222\u9269\u9268\u5C63\u6F07\u84F0\u9291\u6198\u6199\u66BF\u6A72\u6B56\u79A7\u8AF0\u58D0\u7E30\u8B11\u9CC3\u87E2\u8E5D\u91D0\u74BD\u9C13\u74D5\u9C5A\u56CD\u77D6\u7E9A\u8EA7", "x\xEC": "\u5338\u534C\u6262\u5C43\u5FFE\u9969\u546C\u5FE5\u602C\u7EC6\u90C4\u9491\u4FC2\u6044\u6B2A\u76FB\u90E4\u5C53\u6B2F\u7EE4\u7D30\u91F3\u960B\u5092\u6461\u691E\u8203\u8204\u8D87\u9699\u613E\u6140\u6ECA\u798A\u7D8C\u84B5\u8D69\u969F\u588D\u7182\u7294\u7A27\u622F\u6F5F\u6F99\u856E\u89A4\u6231\u7E18\u9ED6\u6232\u78F6\u8669\u993C\u9B29\u7E6B\u95DF\u973C\u5C6D\u884B", "xi\u0101": "\u5477\u8672\u75A8\u867E\u8C3A\u5084\u9595\u7146\u98AC\u7615\u778E\u8766\u9C15", "xi\xE1": "\u5323\u4FA0\u72CE\u4FE0\u5CE1\u67D9\u70A0\u72ED\u965C\u57C9\u5CFD\u70DA\u72F9\u73E8\u796B\u637E\u7856\u7B1A\u7FC8\u823A\u967F\u5FA6\u7864\u9050\u656E\u6687\u7455\u7B6A\u821D\u7615\u78AC\u8F96\u78CD\u8578\u7E16\u879B\u8D6E\u9B7B\u8F44\u935C\u971E\u938B\u9EE0\u9A22\u9DB7", "xi\u01CE": "\u9595\u959C", "xi\xE0": "\u4E05\u4E0B\u4E64\u5737\u8290\u759C\u590F\u68BA\u5EC8\u7771\u8AD5\u5687\u61D7\u7F45\u5913\u93BC\u93EC", "xi\u0101n": "\u4EDA\u4ED9\u5C73\u5148\u597E\u4F61\u5FFA\u6C19\u6774\u6B26\u7946\u79C8\u82EE\u59FA\u67AE\u7C7C\u73D7\u83B6\u6380\u94E6\u641F\u7D85\u8DF9\u9170\u9528\u50CA\u50F2\u5615\u647B\u929B\u66B9\u92BD\u97EF\u5B10\u61B8\u859F\u9341\u7E4A\u893C\u97F1\u9BAE\u8E6E\u99A6\u5B45\u5EEF\u6515\u91B6\u7E8E\u9DB1\u8973\u8E9A\u7E96\u9C7B", "xi\xE1n": "\u4F2D\u549E\u95F2\u5481\u59B6\u5F26\u81E4\u8D24\u54B8\u550C\u6326\u6D8E\u73B9\u76F7\u80D8\u5A34\u5A39\u5A71\u7D43\u8237\u86BF\u8854\u5563\u6E7A\u75EB\u86DD\u9591\u9592\u9E47\u55DB\u5ACC\u6E93\u8858\u7509\u929C\u5AFB\u5AFA\u61AA\u648F\u6F96\u7A34\u7FAC\u8AB8\u8CE2\u8AF4\u8F31\u918E\u7647\u764E\u77AF\u85D6\u7925\u9E79\u9E99\u8D12\u9466\u9DF4\u9DFC\u9DF3", "xi\u01CEn": "\u5F61\u51BC\u72DD\u663E\u9669\u5D04\u6BE8\u70CD\u7303\u86AC\u967A\u8D7B\u7B45\u5C1F\u5C20\u641F\u7992\u8706\u8DE3\u9291\u7BB2\u96AA\u5DAE\u736B\u736E\u85D3\u934C\u9BAE\u71F9\u9855\u5E70\u6507\u6AF6\u861A\u8B63\u7381\u97C5\u986F\u7066", "xi\xE0n": "\u549E\u5C98\u82CB\u898B\u73B0\u7EBF\u81FD\u9650\u59ED\u5BAA\u770C\u9665\u54EF\u57B7\u5A0A\u5CF4\u6D80\u83A7\u8ED0\u9677\u57F3\u665B\u73FE\u784D\u9985\u774D\u7D64\u7D96\u7F10\u7FA1\u586A\u641A\u6E93\u732E\u7CAF\u7FA8\u817A\u50E9\u50F4\u69CF\u7DAB\u8AA2\u61AA\u648A\u7DDA\u92E7\u61B2\u6A4C\u6A7A\u7E23\u930E\u9921\u58CF\u61E2\u8C4F\u9EB2\u7017\u81D4\u737B\u7CEE\u93FE\u9730\u9F38", "xi\u0101ng": "\u4E61\u8297\u9999\u90F7\u53A2\u554D\u9109\u910A\u5EC2\u6E58\u7F03\u842B\u8459\u9115\u697F\u7A25\u858C\u7BB1\u7DD7\u81B7\u8944\u5134\u52F7\u5FC0\u9AA7\u9E98\u6B00\u74D6\u9576\u9C5C\u7E95\u9472\u9A64", "xi\xE1ng": "\u5905\u74E8\u4F6D\u5EA0\u7F8F\u6819\u7965\u7D74\u7FD4\u8A73\u8DED", "xi\u01CEng": "\u4EAB\u4EAF\u54CD\u8683\u9977\u6651\u98E8\u60F3\u9284\u9909\u9C9E\u8801\u9B9D\u9BD7\u97FF\u9957\u995F\u9C76", "xi\xE0ng": "\u5411\u59E0\u9879\u73E6\u8C61\u7F3F\u8856\u9805\u50CF\u52E8\u5D91\u6F52\u9297\u95A7\u66CF\u6A61\u8950\u95C2\u56AE\u87D3\u940C\u9C4C", "xi\u0101o": "\u7072\u7071\u547A\u67AD\u4FBE\u54D3\u67B5\u9A81\u5BAF\u5BB5\u5EA8\u6D88\u70CB\u7EE1\u83A6\u8653\u900D\u9E2E\u5A4B\u689F\u7107\u7307\u8427\u75DA\u75DF\u7744\u7863\u785D\u7A99\u7FDB\u9500\u55C3\u63F1\u7D83\u86F8\u5610\u6B4A\u6F47\u7187\u7BAB\u8E03\u5635\u61A2\u64A8\u735F\u7362\u7BBE\u92B7\u9704\u9AB9\u5F47\u81AE\u856D\u98B5\u9B48\u9D1E\u7A58\u7C18\u85C3\u87C2\u87CF\u9D35\u56A3\u701F\u7C2B\u87F0\u9AC7\u6AF9\u56BB\u56C2\u9AD0\u9DCD\u8828\u9A4D\u6BCA\u8648", "xi\xE1o": "\u59E3\u6D28\u90E9\u5D24\u6DC6\u8A24\u6BBD\u8AB5", "xi\u01CEo": "\u5C0F\u6653\u6681\u7B71\u7B7F\u769B\u66C9\u7BE0\u8B0F\u76A2", "xi\xE0o": "\u5B5D\u52B9\u54B2\u6054\u4FF2\u54EE\u6548\u6D8D\u7B11\u5578\u509A\u6569\u6BBD\u55C3\u8A68\u560B\u5628\u8A9F\u562F\u8582\u6B57\u71BD\u6585\u6586", "xi\u0113": "\u5A0E\u63F3\u7332\u6954\u6B47\u6ECA\u7366\u874E\u880D", "xi\xE9": "\u52A6\u534F\u65EA\u5354\u80C1\u57A5\u594A\u5CEB\u604A\u62F9\u633E\u8107\u8105\u810B\u887A\u5055\u659C\u688B\u8C10\u7D5C\u7FD3\u9889\u55CB\u6136\u6140\u641A\u643A\u744E\u7D8A\u7181\u818E\u9C91\u52F0\u64B7\u64D5\u7DF3\u7E00\u7F2C\u8762\u978B\u8AE7\u71F2\u9BAD\u56A1\u64F7\u97B5\u5136\u896D\u5B48\u651C\u8B97\u9FA4", "xi\u011B": "\u5199\u51A9\u5BEB\u85DB", "xi\xE8": "\u4F33\u707A\u6CFB\u7944\u7EC1\u7F37\u5378\u67BB\u6D29\u70A8\u70A7\u5368\u5C51\u6827\u505E\u5070\u5FA2\u68B0\u70F2\u710E\u79BC\u7D32\u4EB5\u5A9F\u5C5F\u6E2B\u7D4F\u7D6C\u8C22\u50C1\u586E\u89DF\u89E7\u698D\u699D\u69AD\u8909\u977E\u5667\u5BEB\u5C67\u66AC\u6A27\u78BF\u7DE4\u5DB0\u5EE8\u61C8\u6FA5\u736C\u7CCF\u85A4\u85A2\u9082\u97F0\u71EE\u893B\u8B1D\u5911\u7009\u97A2\u97D8\u7023\u7215\u7E72\u87F9\u880F\u9F58\u9F5B\u7E88\u9F65\u9F42\u8EA0\u8E9E", "x\u012Bn": "\u5FC4\u5FC3\u90A4\u59A1\u5FFB\u8F9B\u6615\u677A\u6B23\u76FA\u4FFD\u8398\u60DE\u8A22\u920A\u950C\u65B0\u6B46\u5EDE\u92C5\u567A\u5677\u5B1C\u85AA\u99A8\u946B\u99AB", "x\xEDn": "\u6794\u8951\u9561\u7925\u9414", "x\u01D0n": "\u4F08", "x\xECn": "\u9620\u4F29\u56DF\u5B5E\u7098\u8ED0\u812A\u8845\u8A2B\u6116\u712E\u99B8\u9856\u820B\u91C1", "x\u012Bng": "\u72CC\u661F\u57B6\u9A8D\u60FA\u7329\u714B\u7446\u8165\u89EA\u7BB5\u7BC2\u8208\u8B03\u9B8F\u66D0\u89F2\u9A02\u76A8\u9BF9", "x\xEDng": "\u5211\u90A2\u9967\u5DE0\u5F62\u9649\u4F80\u90C9\u54D8\u578B\u6D10\u8365\u9498\u9658\u5A19\u784E\u94CF\u9203\u86F5\u6ECE\u9276\u9292\u92DE\u9933", "x\u01D0ng": "\u7772\u9192\u64E4", "x\xECng": "\u674F\u59D3\u5E78\u6027\u8347\u5016\u8395\u5A5E\u60BB\u6DAC\u8455\u7772\u7DC8\u92DE\u5B39\u81D6", "xi\u014Dng": "\u51F6\u5302\u5144\u5147\u5308\u828E\u8BBB\u5FF7\u6C79\u54C5\u605F\u6D36\u80F7\u80F8\u8A29\u8A7E\u8CEF", "xi\xF3ng": "\u96C4\u718A\u718B", "xi\u01D2ng": "\u713D\u7138", "xi\xF2ng": "\u8BC7\u8A57\u5910\u657B", "xi\u016B": "\u4FE2\u4FEE\u54BB\u5EA5\u70CC\u70CB\u7F9E\u8129\u8119\u9E3A\u81F9\u8C85\u9990\u6A07\u929D\u9AE4\u9AF9\u9380\u9BB4\u9D42\u93C5\u9948\u9C43\u98CD", "xi\xFA": "\u82EC", "xi\u01D4": "\u673D\u6EEB\u6F43\u7CD4", "xi\xF9": "\u79C0\u5CAB\u5CC0\u73DB\u7EE3\u8896\u7407\u9508\u55C5\u6EB4\u7D89\u7493\u890F\u890E\u92B9\u8791\u568A\u7E4D\u93C5\u7E61\u93E5\u93FD\u9F45", "x\u016B": "\u5729\u620C\u65F4\u59C1\u759E\u76F1\u6B28\u7809\u80E5\u987B\u7717\u8A0F\u987C\u5066\u8657\u865A\u88C7\u8A31\u8C1E\u5AAD\u63DF\u6B3B\u6E4F\u6E51\u865B\u9808\u6948\u7D87\u980A\u5618\u589F\u7A30\u84F2\u9700\u9B46\u5653\u5B03\u6B54\u7DF0\u7E03\u8566\u8751\u6B58\u85C7\u8ADD\u71F8\u8B43\u9B56\u9A49\u9450\u9B1A", "x\xFA": "\u4FC6\u5194\u5F90\u7991\u84A3", "x\u01D4": "\u5474\u59C1\u8BE9\u6D52\u6829\u73DD\u55A3\u6E51\u86E1\u668A\u8A61\u6EF8\u7A30\u9126\u7CC8\u8AFF\u9191\u76E8", "x\xF9": "\u65ED\u4F35\u5E8F\u65F4\u6C7F\u82A7\u4F90\u5379\u59B6\u6034\u6C80\u53D9\u6053\u6064\u662B\u6710\u6D2B\u57BF\u6647\u6B30\u6B88\u70C5\u73EC\u52D7\u52D6\u5590\u60D0\u639D\u654D\u6558\u6DE2\u70FC\u7EEA\u7EED\u86BC\u9157\u58FB\u5A7F\u6702\u6E86\u77DE\u7D6E\u8053\u8A39\u6149\u6EC0\u7166\u7D9A\u84C4\u8CC9\u69D2\u6F35\u6F4A\u76E2\u7781\u7DD2\u805F\u84FF\u928A\u563C\u735D\u7A38\u7DD6\u85C7\u85DA\u7E8C\u9C6E", "xu\u0101n": "\u5405\u8F69\u660D\u54BA\u5BA3\u5F32\u6645\u8ED2\u688B\u8C16\u55A7\u5847\u5A97\u6103\u610B\u63CE\u8432\u8431\u6684\u714A\u7444\u84D2\u777B\u5107\u79A4\u7BAE\u7FE7\u8756\u92D7\u5B1B\u61C1\u857F\u8AE0\u8AFC\u9799\u99E8\u9379\u99FD\u77CE\u7FFE\u85FC\u8610\u8809\u8B5E\u9C1A\u8B82", "xu\xE1n": "\u7384\u4F2D\u59B6\u73B9\u75C3\u60AC\u7401\u8701\u5AD9\u6F29\u66B6\u7487\u7E23\u6A88\u74BF\u61F8", "xu\u01CEn": "\u54BA\u9009\u70DC\u559B\u6685\u9078\u7663\u766C", "xu\xE0n": "\u6030\u6CEB\u6621\u70AB\u7EDA\u7729\u88A8\u94C9\u7404\u7734\u8852\u6E32\u7D62\u6965\u6966\u9249\u5910\u657B\u78B9\u8519\u955F\u98B4\u7E3C\u7E4F\u93C7\u8D19", "xu\u0113": "\u75B6\u8486\u9774\u859B\u8FA5\u8FAA\u97BE", "xu\xE9": "\u7A74\u6588\u4E74\u5B66\u5CC3\u8313\u6CF6\u8895\u9E34\u6569\u8E05\u5671\u58C6\u5B78\u5DA8\u6FA9\u71E2\u89F7\u9DFD", "xu\u011B": "\u5F50\u96EA\u6A30\u81A4\u825D\u8F4C\u9CD5\u9C48", "xu\xE8": "\u5437\u5779\u5CA4\u6034\u6CEC\u72D8\u75A6\u6856\u8C11\u6EC8\u8D90\u8B14\u77B2\u7025", "x\u016Bn": "\u5743\u52CB\u57D9\u7104\u52DB\u5864\u7147\u7AA8\u52F2\u52F3\u85AB\u5691\u58CE\u736F\u85B0\u66DB\u71FB\u81D0\u77C4\u860D\u58E6\u720B\u7E81\u91BA", "x\xFAn": "\u5EF5\u5BFB\u5DE1\u65EC\u674A\u7543\u8BE2\u90C7\u54B0\u59F0\u5CCB\u6042\u6D35\u6D54\u7D03\u8340\u8368\u6812\u686A\u6BE5\u73E3\u5071\u7734\u5C0B\u5FAA\u63D7\u8A62\u9129\u9C9F\u565A\u6F6F\u8541\u6533\u6A33\u71C5\u71D6\u7495\u99E8\u87EB\u87F3\u7213\u9C58\u9C4F\u7065", "x\xF9n": "\u5342\u8BAD\u8BAF\u4F28\u6C5B\u8FC5\u9A6F\u4F9A\u5DFA\u5F87\u72E5\u8FFF\u900A\u5B6B\u6B89\u6BE5\u6D5A\u8A0A\u8A13\u8A19\u595E\u5DFD\u6BBE\u7A04\u905C\u99B4\u613B\u5640\u6F60\u8548\u6FEC\u720B\u9868\u9DBD\u9442", "ya": "", "y\u0101": "\u4E2B\u5727\u5416\u4E9E\u5E98\u62BC\u6792\u57AD\u9E26\u6860\u9E2D\u555E\u5B72\u94D4\u690F\u9D09\u930F\u9D28\u58D3\u9D76\u941A", "y\xE1": "\u7259\u4F22\u5391\u5C88\u82BD\u5393\u62C1\u740A\u7B0C\u869C\u5810\u5D15\u5D16\u6DAF\u731A\u91FE\u775A\u8859\u6F04\u9F56", "y\u01CE": "\u758B\u538A\u5E8C\u631C\u75A8\u5516\u555E\u6397\u75D6\u96C5\u7602\u8565", "y\xE0": "\u529C\u5720\u8F67\u4E9A\u51B4\u897E\u8980\u8BB6\u4E9C\u72BD\u8FD3\u4E9E\u73A1\u8ECB\u59F6\u5A05\u631C\u7811\u4FF9\u6C29\u57E1\u5A6D\u6397\u8A1D\u94D4\u63E0\u6C2C\u7330\u8050\u5714\u693B\u7A0F\u78A3\u7AAB\u6F5D\u78CD\u58D3\u74DB\u9F7E", "y\u0101n": "\u6079\u5266\u70DF\u73DA\u80ED\u5D26\u6DCA\u6DF9\u7111\u7109\u83F8\u9609\u6B97\u6E30\u6E6E\u50BF\u6B45\u7159\u787D\u9122\u5AE3\u6F39\u5D96\u6A2E\u9183\u6A6A\u95B9\u95BC\u5B2E\u61E8\u7BF6\u61D5\u81D9\u9EEB\u9EF0", "y\xE1n": "\u8BA0\u5383\u5EF6\u95EB\u4E25\u598D\u82AB\u8A01\u8A00\u5CA9\u6616\u6CBF\u708F\u708E\u90D4\u550C\u57CF\u59F8\u5A2B\u72FF\u839A\u5A2E\u68B4\u76D0\u5571\u7402\u784F\u8A2E\u9586\u960E\u55A6\u5D53\u5D52\u7B75\u7D96\u8712\u5869\u63C5\u694C\u8A7D\u789E\u8505\u7FAC\u989C\u53B3\u8664\u95BB\u6A90\u984F\u9854\u56B4\u58DB\u5DCC\u7C37\u6AE9\u58E7\u5DD6\u5DD7\u6B15\u7939\u9E7D\u9EA3", "y\u01CEn": "\u5935\u6281\u6C87\u4E75\u5156\u4FE8\u5157\u533D\u5F07\u884D\u5261\u5043\u53A3\u639E\u63A9\u773C\u8412\u90FE\u9153\u9681\u5D43\u611D\u624A\u63DC\u667B\u68EA\u6E30\u6E37\u7430\u9043\u9692\u693C\u787D\u7F68\u88FA\u6F14\u8917\u622D\u7AB4\u8758\u9B47\u565E\u5B10\u8EBD\u7E2F\u6ABF\u9EE1\u53B4\u7517\u9C0B\u9DA0\u9EE4\u513C\u9EEC\u9EED\u9F91\u5B4D\u9869\u9F34\u5DD8\u5DDA\u66EE\u9B58\u9F39\u7939\u9F74\u9EF6", "y\xE0n": "\u538C\u599F\u89C3\u726A\u533D\u59F2\u5F65\u5F66\u6D1D\u781A\u5501\u5BB4\u664F\u70FB\u8273\u898E\u9A8C\u5050\u639E\u7114\u730F\u784F\u8C1A\u9681\u55AD\u5830\u6565\u68EA\u6B97\u7131\u7130\u7312\u786F\u96C1\u50BF\u693B\u6E8E\u6EDF\u8C63\u9CEB\u53AD\u5895\u66A5\u7196\u917D\u9CF1\u5B0A\u8C33\u990D\u9D08\u71C4\u8AFA\u8D5D\u9B33\u5688\u5B2E\u66D5\u9D33\u9140\u9A10\u9A13\u56A5\u5B3F\u8276\u8D0B\u8EC5\u66E3\u7213\u91B6\u9A34\u9F5E\u9DC3\u7054\u8D17\u56D0\u89FE\u8B8C\u91BC\u995C\u9A57\u9DF0\u8277\u704E\u91C5\u9A60\u7067\u8B9E\u8C53\u8C54\u7069", "y\u0101ng": "\u592E\u59CE\u62B0\u6CF1\u67CD\u6B83\u80E6\u770F\u79E7\u9E2F\u9260\u96F5\u9785\u9348\u9D26", "y\xE1ng": "\u626C\u9626\u9633\u65F8\u6768\u7080\u739A\u98CF\u4F6F\u52B7\u6C1C\u75A1\u9496\u579F\u5F89\u661C\u6D0B\u7F8F\u70CA\u73DC\u773B\u967D\u5A78\u5D35\u5D38\u6113\u63DA\u86D8\u656D\u6698\u694A\u716C\u7452\u7993\u760D\u8AF9\u8F30\u935A\u9D39\u98BA\u9C11\u9737\u9E09", "y\u01CEng": "\u536C\u4F52\u5489\u5771\u5C9F\u517B\u67CD\u70B4\u6C27\u770F\u75D2\u7D3B\u509F\u52DC\u6967\u8EEE\u6143\u6C31\u8746\u98EC\u990A\u99DA\u61E9\u6501\u7001\u7662\u7922", "y\xE0ng": "\u600F\u67CD\u6059\u6837\u70CA\u7F95\u6967\u8A47\u716C\u69D8\u6F3E\u9785\u6A23\u7001", "y\u0101o": "\u5E7A\u592D\u5406\u5996\u6796\u6B80\u7945\u7D04\u8A1E\u5593\u847D\u6946\u8170\u9D01\u64BD\u9080\u9D22", "y\xE1o": "\u723B\u5C27\u530B\u5C2D\u80B4\u579A\u59DA\u5CE3\u604C\u8F7A\u5004\u70D1\u73E7\u7690\u7A95\u7A91\u94EB\u9683\u509C\u582F\u63FA\u6BBD\u8C23\u8EFA\u55C2\u5AB1\u5FAD\u612E\u6416\u6447\u6EE7\u733A\u9059\u9065\u50E5\u647F\u669A\u69A3\u7464\u7476\u929A\u98D6\u9906\u5DA2\u5DA4\u5FBA\u78D8\u7AAF\u7AB0\u991A\u7E47\u8B21\u8B20\u9390\u9CD0\u98BB\u8628\u908E\u9864\u9C29\u9C59", "y\u01CEo": "\u4EF8\u5B8E\u5C86\u62AD\u6773\u6796\u72D5\u82ED\u54AC\u67FC\u7711\u7A85\u7A88\u8200\u5060\u5A79\u5D3E\u6E94\u84D4\u699A\u95C4\u9A15\u9F69\u9DD5", "y\xE0o": "\u602E\u7A7E\u836F\u70C4\u888E\u7A94\u7B44\u846F\u8A4F\u612E\u718E\u7627\u899E\u977F\u6A02\u735F\u7BB9\u9E5E\u85AC\u9F3C\u66DC\u71FF\u825E\u85E5\u77C5\u8000\u7E85\u9DC2\u8B91", "ye": "\u4EAA", "y\u0113": "\u5414\u8036\u503B\u6930\u668D\u6B4B\u7AAB\u564E\u6F71\u64E8\u882E", "y\xE9": "\u7237\u8036\u5CEB\u6353\u63F6\u94D8\u723A\u7458\u91FE\u92E3\u9381", "y\u011B": "\u4E5F\u51B6\u57DC\u91CE\u5622\u6F1C\u58C4", "y\xE8": "\u4E1A\u66F3\u9875\u66F5\u90BA\u591C\u62B4\u4EB1\u62FD\u67BC\u6D02\u9801\u6359\u6654\u67BD\u70E8\u6DB2\u7106\u8C12\u5828\u63F2\u6B97\u814B\u8449\u58B7\u696A\u696D\u7160\u75F7\u998C\u50F7\u66C5\u71C1\u748D\u64D6\u64DB\u66C4\u76A3\u77B1\u7DE4\u9134\u9765\u5DAA\u5DAB\u6FB2\u8B01\u9923\u64EB\u66D7\u77B8\u9371\u64EA\u7217\u790F\u9391\u9941\u9D7A\u9437\u9768\u9A5C\u74DB\u9E08", "yi": "\u5F2C", "y\u012B": "\u4E00\u4E4A\u5F0C\u8FB7\u8864\u4F0A\u8863\u533B\u541A\u58F1\u4F9D\u794E\u54BF\u6D22\u6098\u6E0F\u7317\u7569\u90FC\u94F1\u58F9\u63D6\u86DC\u7995\u5ADB\u6F2A\u7A26\u92A5\u5B04\u648E\u566B\u5901\u747F\u9E65\u7E44\u6AB9\u6BC9\u91AB\u9EDF\u8B69\u9DD6\u9EF3", "y\xED": "\u4E41\u4EEA\u531C\u572F\u5937\u5F75\u8FC6\u519D\u5B90\u675D\u6C82\u8BD2\u4F87\u5B9C\u6021\u6CB6\u72CF\u72CB\u8FE4\u8FF1\u9974\u54A6\u59E8\u5CD3\u605E\u62F8\u67C2\u6D1F\u73C6\u74F5\u8351\u8D3B\u8FFB\u5BA7\u5DF8\u6245\u6818\u684B\u7719\u80F0\u8898\u8CA4\u75CD\u79FB\u8413\u91F6\u692C\u7FA0\u86E6\u8A52\u8CBD\u9057\u5A90\u6686\u6938\u7155\u8A83\u8DE0\u9809\u9890\u98F4\u5100\u71AA\u7BB7\u907A\u5DAC\u5F5B\u5F5C\u8794\u9825\u9824\u5BF2\u5DB7\u7C03\u984A\u9BA7\u9D3A\u5F5E\u5F5D\u8B3B\u93D4\u7C4E\u89FA\u8B89", "y\u01D0": "\u4E5A\u4E5B\u4E59\u5DF2\u4EE5\u6261\u8FC6\u9487\u4F41\u653A\u77E3\u82E1\u53D5\u82E2\u8FE4\u8FF1\u5EA1\u8223\u8681\u91D4\u501A\u6246\u7B16\u9018\u914F\u506F\u7317\u5D3A\u6532\u6567\u65D1\u9218\u926F\u9CE6\u88FF\u65D6\u8F22\u5B1F\u657C\u8798\u6AA5\u7912\u8264\u87FB\u9857\u8F59\u9F6E", "y\xEC": "\u4E42\u4E49\u4EBF\u5F0B\u5208\u5FC6\u827A\u4EE1\u5307\u808A\u827E\u8BAE\u9623\u4EA6\u4F07\u5C79\u5F02\u5FD4\u8285\u4F3F\u4F5A\u52AE\u5453\u5744\u5F79\u6291\u6759\u8034\u82C5\u8BD1\u9091\u4F7E\u546D\u5479\u59B7\u5CC4\u6008\u603F\u6613\u678D\u6B25\u6CC6\u7088\u79C7\u7ECE\u886A\u8BE3\u9A7F\u4FCB\u5955\u5E1F\u5E20\u5F08\u6633\u67BB\u6D42\u73B4\u75AB\u7FBF\u8F76\u5508\u57BC\u6092\u6339\u683A\u6827\u6B2D\u6D65\u6D73\u76CA\u8898\u88A3\u8C0A\u8CA4\u52DA\u57F6\u57F8\u6098\u60A5\u639C\u6BB9\u7570\u7F9B\u7FCA\u7FCC\u841F\u8A33\u8A32\u8C59\u8C5B\u9038\u91F4\u96BF\u5E46\u6561\u6679\u68ED\u6B94\u6E59\u7132\u712C\u86E1\u8A4D\u8DC7\u8EFC\u9113\u9220\u9AAE\u4E84\u517F\u55CC\u610F\u6EA2\u7348\u75EC\u776A\u7AE9\u7F22\u7FA9\u8084\u88D4\u88DB\u8A63\u52E9\u5AD5\u5ED9\u698F\u6F69\u7617\u8189\u84FA\u8734\u99C5\u5104\u69F8\u6BC5\u71A0\u71A4\u71BC\u761E\u7BD2\u8ABC\u9552\u9E5D\u9E62\u9ED3\u5117\u5293\u571B\u58BF\u5B11\u5DA7\u61B6\u61CC\u66C0\u6BAA\u6FBA\u71DA\u7631\u7796\u7A53\u7E0A\u8257\u858F\u87A0\u8939\u5BF1\u61DD\u6581\u66CE\u6A8D\u6B5D\u71E1\u71F1\u7FF3\u7FFC\u81C6\u8C96\u9BA8\u7654\u85DD\u85D9\u8D00\u93B0\u9571\u7E76\u7E79\u8C77\u972C\u9BE3\u9D83\u9D82\u9D8D\u7037\u8619\u8B70\u8B6F\u91B3\u91B7\u9950\u56C8\u943F\u9DC1\u9DCA\u61FF\u897C\u9A5B\u9DE7\u8649\u9E03\u9DFE\u8B9B\u9F78", "y\u012Bn": "\u56D9\u56E0\u9625\u9634\u4F8C\u5794\u59FB\u6D07\u8335\u836B\u97F3\u9A83\u6836\u6B2D\u6C24\u9670\u51D0\u79F5\u88C0\u94DF\u967B\u9682\u5591\u5819\u5A63\u6114\u6E6E\u7B43\u7D6A\u6B45\u6EB5\u798B\u8491\u852D\u6147\u7616\u92A6\u78E4\u7DF8\u9787\u8AF2\u9712\u99F0\u567E\u6FE6\u95C9\u9720\u9F57\u97FE", "y\xEDn": "\u5198\u4E51\u4F12\u541F\u573B\u72BE\u82C2\u65A6\u70CE\u57A0\u6CFF\u5701\u5CFE\u72FA\u73E2\u8376\u8A14\u8A1A\u552B\u5A6C\u5BC5\u5D1F\u5D2F\u6DEB\u8A21\u94F6\u921D\u9F82\u6EDB\u7892\u911E\u5924\u8529\u9280\u9F88\u5656\u6BA5\u748C\u8ABE\u569A\u6AAD\u87EB\u972A\u9F66\u9DE3", "y\u01D0n": "\u5EF4\u5C39\u5F15\u5432\u996E\u7C8C\u8693\u784D\u8D7A\u6DFE\u920F\u98F2\u96A0\u9777\u98EE\u6704\u8F11\u78E4\u8D9B\u6A83\u763E\u96B1\u5DBE\u6FE5\u7E2F\u87BE\u6ABC\u861F\u6AFD\u766E\u8B94", "y\xECn": "\u5EF4\u5370\u831A\u6D15\u80E4\u836B\u57BD\u6880\u5837\u6E5A\u730C\u98F2\u5ED5\u96A0\u98EE\u7AA8\u9173\u616D\u764A\u6197\u6196\u96B1\u9BA3\u61DA", "y\u012Bng": "\u5FDC\u65F2\u82F1\u67CD\u8365\u5040\u685C\u73F1\u83BA\u5568\u5A74\u5A96\u6125\u6E36\u7EEC\u6720\u6967\u713D\u7138\u7150\u745B\u5AC8\u78A4\u9533\u5624\u6484\u7507\u7DD3\u7F28\u7F42\u8767\u8CCF\u6A31\u748E\u565F\u7F43\u892E\u9719\u9D2C\u9E66\u5B30\u61C9\u81BA\u97FA\u7516\u9E70\u9D91\u9DA7\u56B6\u5B46\u5B7E\u6516\u7034\u7F4C\u8621\u8B4D\u6AFB\u74D4\u792F\u8B7B\u9DAF\u944D\u7E93\u8833\u9DEA\u8EC8\u9DF9\u9E0E\u9E1A", "y\xEDng": "\u5903\u76C1\u8FCE\u8314\u76C8\u8367\u6D67\u803A\u83B9\u55B6\u686F\u8424\u8426\u8425\u86CD\u6E81\u6E8B\u843E\u50CC\u584B\u5D64\u6979\u6EE2\u84E5\u6ECE\u6F46\u7192\u8747\u7469\u799C\u877F\u5B34\u71DF\u7E08\u87A2\u6FD9\u6FDA\u6FF4\u85C0\u89AE\u8B0D\u8D62\u7005\u7203\u8805\u93A3\u5DC6\u650D\u701B\u7020\u702F\u6AFF\u8D0F\u7050\u7C5D\u705C\u7C6F", "y\u01D0ng": "\u77E8\u90E2\u6D67\u68AC\u988D\u9895\u9896\u646C\u5F71\u6F41\u763F\u7A4E\u9834\u89AE\u5DCA\u5EEE\u7034\u941B\u766D", "y\xECng": "\u5FDC\u6620\u770F\u668E\u786C\u5AB5\u81A1\u9795\u61C9\u7034\u9C66", "yo": "\u55B2", "y\u014D": "\u5537\u55B2", "y\u014Dng": "\u62E5\u75C8\u9095\u5EB8\u50AD\u55C8\u9118\u96CD\u5889\u5ADE\u6175\u6EFD\u69E6\u7245\u7257\u92BF\u5670\u58C5\u64C1\u6FAD\u90FA\u955B\u81C3\u7655\u96DD\u93DE\u9CD9\u5EF1\u7049\u9954\u9C45\u9DDB\u7670", "y\xF3ng": "\u5581\u63D8\u9899\u9852\u9C2B", "y\u01D2ng": "\u6C38\u752C\u548F\u603A\u6CF3\u4FD1\u52C8\u52C7\u6810\u57C7\u6080\u67E1\u607F\u60E5\u6111\u6E67\u7867\u8A60\u584E\u5D71\u5F6E\u6139\u86F9\u6142\u8E0A\u9CAC\u5670\u6FAD\u8E34\u9BD2", "y\xF2ng": "\u7528\u82DA\u783D\u848F\u919F", "y\u014Du": "\u4F18\u598B\u5FE7\u6538\u5466\u602E\u6CD1\u5E7D\u5CF3\u6D5F\u900C\u60A0\u7FAA\u9E80\u6EFA\u6182\u512A\u913E\u5698\u61EE\u7000\u7376\u6ACC\u7E8B\u8030\u737F", "y\xF3u": "\u5C22\u5198\u5C24\u7531\u7534\u6C7C\u6C8B\u72B9\u90AE\u601E\u6CB9\u80AC\u6023\u65BF\u67DA\u75A3\u5EAE\u79DE\u839C\u83A4\u83B8\u90F5\u94C0\u5064\u86B0\u8A27\u9030\u63C2\u6E38\u7336\u904A\u9C7F\u6962\u7337\u923E\u9C89\u8F0F\u99C0\u8555\u8763\u9B77\u8F36\u9B8B\u7E47\u6AFE", "y\u01D2u": "\u53CB\u4E23\u5363\u82C3\u9149\u7F91\u682F\u83A0\u6884\u8048\u94D5\u6E75\u6962\u7989\u870F\u92AA\u69F1\u7256\u7257\u9EDD\u61EE", "y\xF2u": "\u53C8\u53F3\u5E7C\u4F51\u4F66\u4F91\u5B67\u6CD1\u72D6\u54CA\u56FF\u59F7\u5BA5\u5CDF\u67DA\u7270\u7950\u8BF1\u8FF6\u5500\u688E\u75CF\u86B4\u4EB4\u8C81\u91C9\u916D\u8A98\u9F2C\u6AFE", "y\u016B": "\u8FBC\u625C\u625D\u7EA1\u8FC3\u8FC2\u7A7B\u9653\u7D06\u5539\u6DE4\u76D3\u7600\u7B8A", "y\xFA": "\u4E02\u4E90\u4E8E\u9098\u4F03\u4F59\u59A4\u6275\u6745\u6B24\u7397\u7399\u65BC\u76C2\u81FE\u8867\u9C7C\u4E7B\u4FDE\u516A\u6353\u79BA\u7AFD\u8201\u8330\u8676\u5A1B\u5A2F\u5A2A\u5A31\u6859\u72F3\u8C00\u9151\u9980\u6E14\u8438\u91EA\u9683\u9685\u96E9\u9B5A\u5823\u582C\u5A7E\u5A80\u5AAE\u5D33\u5D4E\u5D5B\u63C4\u6970\u6E1D\u6E61\u756C\u8174\u842E\u903E\u9AAC\u611A\u6961\u6986\u6B48\u724F\u745C\u8245\u865E\u89CE\u6F01\u776E\u7AAC\u8206\u8915\u6B76\u7FAD\u854D\u8753\u8ADB\u96D3\u9918\u9B63\u5B29\u61D9\u6F9E\u89A6\u8E30\u6B5F\u74B5\u87B8\u8F3F\u935D\u8B23\u9AC3\u9BBD\u65DF\u7C45\u9A1F\u9BF2\u861B\u8F5D\u9C05\u9DE0\u9E06\u9F75", "y\u01D4": "\u4F1B\u5B87\u5C7F\u7FBD\u7A7B\u4FC1\u4FE3\u6327\u79B9\u5704\u7964\u504A\u532C\u5709\u5EBE\u6554\u9105\u659E\u842D\u50B4\u5BD9\u6940\u7440\u7610\u8207\u8A9E\u7AB3\u9828\u9F89\u5673\u5DBC\u61D9\u8C90\u6594\u7A65\u9E8C\u9F6C", "y\xF9": "\u8080\u7389\u9A6D\u572B\u807F\u828C\u828B\u543E\u59AA\u5FEC\u6C69\u7079\u996B\u6B25\u80B2\u90C1\u4FDE\u6631\u72F1\u79BA\u79D7\u831F\u4FFC\u53DE\u5CEA\u5F67\u682F\u6D74\u7821\u94B0\u9884\u57DF\u5809\u6086\u60D0\u6365\u6B32\u6DE2\u6DEF\u75CF\u7C96\u7FD1\u88AC\u8C15\u9033\u9608\u5585\u55A9\u55BB\u5A80\u5BD3\u5EBD\u5FA1\u68DB\u68DC\u68EB\u7134\u7419\u741F\u77DE\u7862\u7872\u88D5\u9047\u98EB\u99AD\u9E46\u5967\u6108\u6EEA\u715C\u7A22\u7F6D\u8248\u84AE\u84E3\u8A89\u923A\u9810\u50EA\u5AD7\u5D8E\u622B\u6BD3\u6F9A\u7344\u7609\u7DCE\u871F\u872E\u8A9E\u8F0D\u9289\u96A9\u617E\u6F4F\u71A8\u7A36\u84F9\u8581\u8C6B\u9079\u92CA\u9CFF\u6FA6\u71CF\u71E0\u8577\u85C7\u8AED\u9325\u95BE\u9D27\u9D2A\u9D25\u5125\u7907\u79A6\u9B4A\u9E6C\u7652\u7916\u791C\u7BFD\u91A7\u9D52\u6AF2\u9947\u860C\u8B7D\u942D\u9731\u96E4\u6B0E\u9A48\u9B3B\u7C5E\u9C4A\u9DF8\u9E12\u6B1D\u8EC9\u9B30\u9B31\u706A\u7C72\u7229", "yu\u0101n": "\u5917\u56E6\u8099\u9E22\u5248\u51A4\u5F32\u6081\u7722\u9E33\u5BC3\u6DB4\u6E06\u6E01\u6E0A\u6E15\u60CC\u6DF5\u847E\u68E9\u84AC\u870E\u88F7\u9E53\u7BA2\u9CF6\u8735\u99CC\u92FA\u9D1B\u5B3D\u9D77\u7041\u9F18\u9F1D", "yu\xE1n": "\u5143\u5186\u8D20\u90A7\u56ED\u59A7\u6C85\u82AB\u676C\u8312\u57A3\u7230\u8C9F\u539F\u54E1\u5706\u7B0E\u8696\u8881\u53A1\u915B\u5086\u559B\u570E\u5A9B\u63F4\u6E72\u7328\u7F18\u9228\u9F0B\u5712\u5713\u586C\u5AB4\u5AC4\u6965\u6E92\u6E90\u733F\u849D\u699E\u69AC\u8F95\u7DE3\u7E01\u875D\u876F\u8924\u9B6D\u571C\u6A7C\u7FB1\u8597\u8788\u9EFF\u8B1C\u8F45\u93B1\u6ADE\u908D\u9A35\u9DA2\u9DB0\u53B5", "yu\u01CEn": "\u76F6\u903A\u9060\u85B3\u92FA", "yu\xE0n": "\u5917\u59B4\u82D1\u6028\u9662\u57B8\u884F\u5086\u5A9B\u63BE\u7457\u7990\u613F\u88EB\u8911\u566E\u9858", "yu\u0113": "\u66F0\u66F1\u625A\u7D04\u5558\u7BB9\u77F1", "yu\u011B": "\u54D5\u5666", "yu\xE8": "\u6708\u6209\u514A\u5216\u514C\u599C\u5C84\u6288\u793F\u5CB3\u6782\u6CE7\u73A5\u6071\u680E\u54FE\u6085\u60A6\u868F\u868E\u8ECF\u94BA\u9605\u6373\u8DC0\u8DC3\u7CA4\u8D8A\u9205\u697D\u7CB5\u925E\u8AAA\u8AAC\u6A02\u95B2\u95B1\u5B33\u6A3E\u7BD7\u9AFA\u5DBD\u81D2\u9FA0\u64FD\u77C6\u6ADF\u7C46\u7039\u8625\u9EE6\u721A\u79B4\u8DAF\u8E8D\u7C65\u9470\u9E11\u7C70\u9E19", "y\u016Bn": "\u6D92\u7F0A\u8480\u6688\u6C32\u7174\u8495\u6C33\u7185\u717E\u596B\u7DFC\u8779\u7E15\u8D5F\u99A7\u8D07", "y\xFAn": "\u4E91\u52FB\u5300\u4F1D\u56E9\u5998\u62A3\u6C84\u7EAD\u82B8\u6600\u7547\u7703\u79D0\u8C9F\u90E7\u54E1\u6DA2\u7D1C\u8018\u803A\u9116\u96F2\u612A\u6EB3\u7B60\u7B7C\u84B7\u7189\u6F90\u8553\u92C6\u6A52\u7BD4\u7E1C", "y\u01D4n": "\u5141\u962D\u593D\u628E\u72C1\u73A7\u9668\u837A\u6B92\u5597\u9217\u9695\u7174\u6B9E\u7185\u99BB\u78D2\u8CF1\u9723\u9F6B\u9F73", "y\xF9n": "\u5B55\u8D20\u8FD0\u679F\u90D3\u607D\u8C9F\u54E1\u83C0\u9106\u915D\u508A\u60F2\u6120\u7F0A\u904B\u614D\u6688\u6985\u7147\u816A\u97EB\u97F5\u891E\u71A8\u7DF7\u7DFC\u8570\u8574\u7E15\u8580\u9196\u919E\u992B\u85F4\u97B0\u97D7\u97DE\u860A\u97FB", "z\u0101": "\u5E00\u531D\u6C9E\u8FCA\u5482\u62F6\u685A\u7D25\u7D2E\u9254\u5648\u9B73\u81DC\u81E2", "z\xE1": "\u6742\u6CAF\u7838\u507A\u5592\u97F4\u96D1\u894D\u96DC\u56C3\u56CB\u56D0\u96E5", "z\u01CE": "\u548B\u507A\u5592", "z\u0101i": "\u707D\u707E\u753E\u54C9\u683D\u70D6\u7560\u83D1\u6E3D\u6EA8\u7775\u8CF3", "z\u01CEi": "\u5BB0\u5D3D", "z\xE0i": "\u518D\u5728\u6257\u6282\u6D05\u50A4\u8F09\u9168\u510E\u7E21", "z\u0101n": "\u5142\u648D\u7CCC\u6A75\u7BF8\u7C2A\u7C2E\u9D64\u9415\u941F", "z\xE1n": "\u507A\u5592", "z\u01CEn": "\u62F6\u661D\u685A\u5BC1\u63DD\u5646\u648D\u5127\u6505\u5139\u6522\u8DB1\u8DB2", "z\xE0n": "\u6682\u66AB\u8CDB\u8D5E\u933E\u913C\u6FFD\u8E54\u9142\u74C9\u8D0A\u93E9\u93E8\u74D2\u9147\u56CB\u7052\u8B83\u74DA\u79B6\u7A73\u8978\u8B9A\u9961", "z\u0101ng": "\u5328\u7242\u7F98\u8D43\u8CCD\u81E7\u8CD8\u8D13\u9AD2\u8D1C", "z\u01CEng": "\u9A75\u99D4", "z\xE0ng": "\u5958\u5F09\u810F\u585F\u846C\u81E7\u8535\u92BA\u81D3\u81DF", "z\u0101o": "\u50AE\u906D\u7CDF\u8E67\u91A9", "z\xE1o": "\u51FF\u947F", "z\u01CEo": "\u65E9\u67A3\u6806\u86A4\u68D7\u7485\u6FA1\u74AA\u85BB\u85FB", "z\xE0o": "\u7076\u7681\u7682\u5523\u5515\u9020\u688D\u55BF\u6165\u7170\u8241\u566A\u7C09\u71E5\u7AC3\u7AC8\u8B5F\u8DAE\u8E81", "z\xE9": "\u5219\u629E\u6CA2\u548B\u6CCE\u8D23\u8FEE\u5247\u5536\u5567\u5E3B\u7B2E\u8234\u8CAC\u6EAD\u6EDC\u776A\u77E0\u98F5\u5616\u5AE7\u5E58\u7BA6\u8536\u6A0D\u6B75\u8ACE\u8D5C\u64C7\u6FA4\u769F\u7794\u7C00\u802B\u790B\u8957\u8B2E\u8CFE\u880C\u7042\u9F5A\u9F70\u9E05", "z\xE8": "\u4EC4\u5E82\u6C44\u6603\u6617\u6351\u5074\u5D31\u7A04", "z\xE9i": "\u8D3C\u621D\u8CCA\u9C97\u8808\u9C02\u9C61", "z\u0113n": "\u648D", "z\u011Bn": "\u600E", "z\xE8n": "\u8C2E\u8B56", "z\u0113ng": "\u66FD\u5897\u912B\u589E\u618E\u7F2F\u6A67\u7494\u7E21\u77F0\u78F3\u7AF2\u7F7E\u7E52\u8B44\u9C5B", "z\u011Bng": "", "z\xE8ng": "\u9503\u7D9C\u7F2F\u92E5\u71B7\u7511\u8D60\u7E52\u9B35\u8D08\u56CE", "zi": "\u55ED", "z\u012B": "\u5B56\u5B5C\u753E\u830A\u5179\u5472\u54A8\u59D5\u59FF\u8332\u6825\u7386\u7560\u7D0E\u8D40\u8D44\u5D30\u6DC4\u79F6\u7F01\u83D1\u8C18\u8D7C\u55DE\u5B73\u5D6B\u6914\u6E7D\u6ECB\u7CA2\u8458\u8F8E\u9111\u5B76\u798C\u89DC\u8A3E\u8CB2\u8CC7\u8D91\u9531\u7A35\u7DD5\u7DC7\u922D\u9543\u9F87\u8F1C\u9F12\u6FAC\u858B\u8AEE\u8DA6\u8F3A\u9319\u9AED\u9CBB\u937F\u93A1\u74BE\u983E\u983F\u9BD4\u9D85\u9F4D\u7E83\u9C26\u9F5C", "z\xED": "\u84FB", "z\u01D0": "\u5B50\u5407\u8293\u59C9\u59CA\u674D\u6C9D\u77F7\u79C4\u80CF\u5470\u79ED\u7C7D\u8014\u8308\u8678\u7B2B\u6893\u91E8\u5559\u7D2B\u6ED3\u8A3F\u699F\u6A74", "z\xEC": "\u5B57\u81EA\u8293\u79C4\u6D13\u8321\u8362\u5033\u525A\u6063\u7278\u6E0D\u7726\u7725\u83D1\u80D4\u80FE\u6F2C", "z\u014Dng": "\u5B97\u679E\u5027\u9A94\u582B\u5D4F\u5D55\u60FE\u68D5\u7323\u8159\u847C\u6721\u6936\u6F48\u7A2F\u7D9C\u7DC3\u6A05\u71A7\u7DF5\u7FEA\u876C\u8E28\u8E2A\u78EB\u7E4C\u9350\u8C75\u8E64\u9A0C\u9B03\u9A23\u9B09\u9B37\u9BEE\u9BFC\u9441", "z\u01D2ng": "\u603B\u500A\u506C\u6374\u60E3\u63D4\u6403\u7127\u50AF\u84D7\u5D78\u6460\u6F40\u7A2F\u7DCF\u719C\u7DEB\u7E02\u71EA\u7E31\u7E3D", "z\xF2ng": "\u662E\u75AD\u5F9E\u7314\u7882\u7CBD\u6F68\u7CC9\u7DF5\u7632\u7E26\u7E31\u7E4C\u7CED", "z\u014Du": "\u90B9\u9A7A\u8BF9\u90F0\u966C\u63AB\u83C6\u68F8\u68F7\u9112\u7B83\u7DC5\u8ACF\u9139\u9CB0\u9BEB\u9EC0\u9A36\u9F71\u9F7A", "z\u01D2u": "\u8D71\u8D70\u640A\u9BD0", "z\xF2u": "\u594F\u63CD\u5AB0\u6971", "z\u016B": "\u601A\u67E4\u79DF\u83F9\u8445\u84A9", "z\xFA": "\u5346\u8DB3\u5005\u54EB\u5D12\u5D2A\u65CF\u690A\u7A21\u7BA4\u8E24\u955E\u9390\u93C3", "z\u01D4": "\u8BC5\u963B\u7EC4\u4FCE\u67E4\u723C\u73C7\u7956\u5528\u7D44\u8A5B\u977B\u93BA", "z\xF9": "", "zu\u0101n": "\u9246\u5297\u8E9C\u945A\u8EA6\u947D", "zu\u01CEn": "\u7E64\u7F35\u7E82\u7E89\u7C6B\u7E98", "zu\xE0n": "\u63DD\u7BF9\u8CFA\u6525", "zu\u012B": "\u539C\u6718\u55FA\u6A36\u87D5\u7E97", "zu\xED": "", "zu\u01D0": "\u5480\u89DC\u5D8A\u5634\u567F\u6FE2\u74BB", "zu\xEC": "\u51A3\u682C\u7D4A\u9154\u666C\u6700\u797D\u775F\u7A21\u7F6A\u8FA0\u69DC\u917B\u855E\u9189\u5DB5\u6A87\u92F7\u930A\u6A8C\u6B08", "z\u016Bn": "\u5C0A\u5642\u58AB\u5D9F\u9075\u6A3D\u7E5C\u7F47\u9D8E\u940F\u9CDF\u9C52\u9DF7", "z\u01D4n": "\u50D4\u6499\u7E5C\u8B50", "z\xF9n": "\u62F5\u6358\u682B\u88B8\u928C\u7033", "zuo": "\u5497", "zu\u014D": "\u562C\u7A5D", "zu\xF3": "\u82F2\u6628\u67EE\u79E8\u838B\u637D\u7B2E\u7A13\u7B70\u923C", "zu\u01D2": "\u5DE6\u4F50\u7E53", "zu\xF2": "\u4F5C\u5750\u963C\u5C9D\u5C9E\u600D\u4FB3\u67DE\u795A\u80D9\u5511\u5EA7\u888F\u505A\u8444\u8443\u9162\u84D9\u98F5\u8ACE\u7CF3", "zh\u0101": "\u5412\u548B\u62AF\u6313\u67E4\u67FB\u54F3\u7D25\u5067\u7D2E\u63F8\u6E23\u6942\u98F5\u5284\u6463\u6F73\u76B6\u6A1D\u89F0\u76BB\u8B47\u9F44\u9F47", "zh\xE1": "\u672D\u7534\u8ECB\u95F8\u5273\u86BB\u94E1\u558B\u7160\u7250\u9598\u5284\u7B9A\u9705\u802B\u9358\u8B57", "zh\u01CE": "\u538F\u62C3\u82F2\u7728\u781F\u9C8A\u9C9D\u8ACE\u9B93\u9BBA", "zh\xE0": "\u4E4D\u5412\u7079\u8BC8\u600D\u54A4\u5953\u67DE\u5BB1\u75C4\u86B1\u55A5\u6EA0\u8A50\u643E\u9C8A\u69A8\u9B93\u91A1", "zh\u0101i": "\u4E9D\u54DC\u5908\u7C82\u635A\u658B\u5074\u658E\u6458\u69B8\u9F4A\u568C\u64FF\u9F4B", "zh\xE1i": "\u5387\u5B85\u7FDF\u64C7\u6AA1", "zh\u01CEi": "\u538F\u62A7\u7A84\u9259", "zh\xE0i": "\u8D23\u503A\u7826\u8CAC\u50B5\u5BE8\u7635", "zh\u0101n": "\u5CBE\u6017\u67AC\u6CBE\u6BE1\u65C3\u6834\u7C98\u86C5\u98E6\u60C9\u8A40\u8D88\u8A79\u959A\u8C35\u9CFD\u5661\u5DA6\u859D\u9085\u9711\u6C08\u6C0A\u77BB\u89B1\u9E6F\u65DC\u8B6B\u9958\u9CE3\u9A59\u9B59\u9C63\u9E07", "zh\xE1n": "\u8B9D", "zh\u01CEn": "\u65A9\u98D0\u5C55\u76CF\u65AC\u7416\u640C\u76DE\u5D83\u5D84\u6990\u8F97\u98AD\u5AF8\u9186\u6A4F\u8F3E\u76BD\u9EF5", "zh\xE0n": "\u4F54\u6218\u6808\u685F\u7AD9\u5061\u7EFD\u83DA\u5D41\u68E7\u6E5B\u6226\u788A\u50DD\u7DBB\u5D98\u6230\u8665\u8666\u89B1\u8F4F\u8B67\u6B03\u8638\u9A4F", "zh\u0101ng": "\u5F21\u5F20\u5F35\u7AE0\u50BD\u9123\u5ADC\u5F70\u615E\u6F33\u7350\u7CBB\u8501\u9067\u66B2\u6A1F\u748B\u9926\u87D1\u93F1\u9A3F\u9C46\u9E9E", "zh\u01CEng": "\u4EC9\u4EE7\u514F\u9577\u638C\u6F32\u5E65\u7903\u979D", "zh\xE0ng": "\u4E08\u4ED7\u6259\u5E10\u6756\u80C0\u8D26\u7C80\u5E33\u6DB1\u8139\u75EE\u969C\u5887\u5D82\u5E5B\u6F32\u8CEC\u762C\u7634\u7795", "zh\u0101o": "\u4F4B\u948A\u59B1\u5DF6\u62DB\u662D\u70A4\u91D7\u5541\u91FD\u924A\u9CED\u99CB\u9363\u76BD", "zh\xE1o": "", "zh\u01CEo": "\u722B\u627E\u6CBC\u83EC\u7475", "zh\xE0o": "\u5146\u8BCF\u679B\u5797\u70A4\u72E3\u8D75\u7B0A\u8081\u5545\u65D0\u68F9\u7F40\u8A54\u7167\u7F69\u7B8C\u8088\u8087\u8D99\u66CC\u6FEF\u71F3\u9BA1\u6AC2\u77BE\u7F84", "zhe": "\u55FB", "zh\u0113": "\u55FB\u5AEC\u906E\u87AB", "zh\xE9": "\u4E47\u5387\u6278\u6754\u6B7D\u77FA\u7813\u7C77\u8674\u54F2\u57D1\u7C8D\u88A9\u5560\u608A\u6662\u6663\u8F84\u5586\u68CF\u8051\u86F0\u8A5F\u6429\u8707\u8C2A\u99B2\u647A\u8F12\u6179\u78D4\u8F19\u92B8\u8F99\u87C4\u569E\u8B2B\u8B3A\u9BBF\u8F4D\u8B81\u8B8B", "zh\u011B": "\u8005\u4E7D\u556B\u9517\u8D6D\u8E37\u8936\u937A\u8975", "zh\xE8": "\u67D8\u6D59\u9019\u6DDB\u55FB\u8517\u6A1C\u9E67\u87C5\u9DD3", "zh\xE8i": "", "zh\u0113n": "\u8D1E\u9488\u4FA6\u4FB2\u5E27\u67AE\u6D48\u73CE\u73CD\u80D7\u8C9E\u5E2A\u6862\u771E\u771F\u7827\u796F\u91DD\u5075\u9159\u5BCA\u5E40\u63D5\u6E5E\u8474\u9049\u5AC3\u6438\u659F\u6939\u6968\u6EB1\u7349\u7504\u798E\u8496\u84C1\u9241\u699B\u69D9\u6B9D\u7467\u78AA\u799B\u6F67\u7BB4\u6A3C\u6FB5\u81FB\u85BD\u9331\u8F43\u937C\u7C48\u9C75", "zh\xE9n": "", "zh\u011Bn": "\u8BCA\u62AE\u6795\u59EB\u5F2B\u6623\u8F78\u5C52\u755B\u75B9\u7715\u8897\u7D3E\u8044\u8419\u7AE7\u88D6\u8999\u8A3A\u8EEB\u5AC3\u7F1C\u69D9\u7A39\u99D7\u7E1D\u7E25\u8FB4\u9B12\u9EF0", "zh\xE8n": "\u5733\u9635\u7EBC\u753D\u4FB2\u630B\u9663\u9E29\u632F\u6715\u681A\u7D16\u686D\u7739\u8D48\u5866\u63D5\u7D7C\u6990\u7471\u8AAB\u8CD1\u92F4\u9547\u9707\u9D06\u93AE\u93AD", "zh\u0113ng": "\u51E7\u4E89\u4F42\u59C3\u5F81\u6014\u722D\u7CFD\u57E9\u5CE5\u70A1\u72F0\u70DD\u7710\u8100\u94B2\u57E5\u5D1D\u5D22\u6399\u7319\u7741\u8047\u94EE\u5A9C\u63C1\u7B5D\u5FB0\u775C\u84B8\u8E2D\u9266\u5FB4\u7B8F\u7DAA\u931A\u5FB5\u7BDC\u9B07\u7665\u93F3", "zh\u011Bng": "\u6C36\u628D\u7CFD\u62EF\u639F\u6678\u6138\u649C\u6574", "zh\xE8ng": "\u6C36\u8BC1\u8BE4\u90D1\u653F\u5F8E\u94B2\u6399\u5E41\u8A3C\u5863\u8ACD\u9755\u912D\u6195\u9D0A\u8B49", "zh\u012B": "\u4E4B\u652F\u536E\u6C41\u829D\u5DF5\u6C65\u546E\u6CDC\u80A2\u6800\u7957\u79D3\u80D1\u80DD\u887C\u5001\u683A\u75B7\u796C\u8102\u96BB\u6894\u83ED\u6925\u81F8\u6418\u7A19\u7D95\u69B0\u8718\u99B6\u6184\u9CF7\u9D32\u7E54\u9F05\u8635", "zh\xED": "\u6267\u4F84\u59B7\u76F4\u79C7\u59EA\u90E6\u5024\u503C\u8040\u91DE\u57F4\u57F7\u6DD4\u804C\u6220\u690D\u7286\u7983\u7D77\u81F7\u8DD6\u74E1\u6455\u646D\u99BD\u5B02\u6179\u6F10\u6F6A\u8E2F\u6A34\u81B1\u7E36\u8077\u87D9\u8E60\u8EC4\u8E91", "zh\u01D0": "\u5902\u6B62\u51EA\u52A7\u65E8\u962F\u5741\u5740\u5E0B\u627A\u6C66\u6C9A\u7EB8\u82B7\u5767\u62A7\u676B\u7947\u7949\u830B\u54AB\u6049\u6307\u67B3\u6D14\u780B\u79D6\u8879\u8F75\u6DFD\u75BB\u7D19\u8694\u8A28\u8DBE\u8EF9\u9EF9\u7994\u7B6B\u7D7A\u916F\u588C\u5FB4\u5FB5\u69EF\u85E2\u8967", "zh\xEC": "\u81F3\u8296\u5741\u5FD7\u5FEE\u627B\u8C78\u5236\u5394\u5781\u5E19\u5E1C\u65A6\u6CBB\u7099\u8D28\u8FE3\u90C5\u4FE7\u5CD9\u5EA2\u5EA4\u6303\u67E3\u6809\u6D37\u7951\u965F\u5A21\u5F8F\u631A\u6357\u664A\u684E\u6B6D\u72FE\u79E9\u81F4\u889F\u8D3D\u8F7E\u4E7F\u506B\u526C\u5F9D\u63B7\u68BD\u6956\u7318\u7564\u75D3\u75D4\u7730\u79F2\u79F7\u7A92\u7D29\u7FD0\u88A0\u89D7\u8CAD\u94DA\u9E37\u5082\u5D3B\u5F58\u667A\u6EDE\u75E3\u86ED\u9A98\u5BD8\u5ECC\u6431\u6ECD\u7A1A\u7B6B\u7F6E\u8DF1\u8F0A\u9527\u96C9\u5886\u6EEF\u6F4C\u7590\u7608\u805C\u88FD\u899F\u8A8C\u928D\u5E5F\u6184\u6468\u646F\u6F6A\u71AB\u7A3A\u81A3\u89EF\u8CEA\u8E2C\u92B4\u92D5\u64F3\u65D8\u7004\u748F\u7DFB\u96B2\u99E4\u9D19\u5128\u5295\u61E5\u64F2\u64FF\u6ADB\u7A49\u87B2\u61EB\u7E54\u8D04\u6ACD\u74C6\u89F6\u9A2D\u9BEF\u7929\u8C51\u9DA8\u9A3A\u9A47\u8E93\u9DD9\u9455\u8C52", "zh\u014Dng": "\u5902\u4F00\u6C77\u5223\u5990\u5F78\u5FEA\u5FE0\u6CC8\u7082\u7EC8\u67CA\u76C5\u8873\u949F\u822F\u8877\u7D42\u9221\u5E52\u8520\u8719\u953A\u92BF\u87A4\u9D24\u87BD\u937E\u6594\u9F28\u8E71\u9418\u7C66", "zh\u01D2ng": "\u80BF\u51A2\u55A0\u5C30\u585A\u6B71\u7144\u816B\u7607\u7A2E\u5FB8\u8E35\u7A5C", "zh\xF2ng": "\u4EF2\u4F17\u5995\u72C6\u794C\u833D\u8876\u869B\u5045\u773E\u5839\u5A91\u7B57\u8846\u7A2E\u7DDF\u8AE5", "zh\u014Du": "\u5DDE\u821F\u8BCC\u4F9C\u5468\u6D32\u70BF\u8BEA\u70D0\u73D8\u8F80\u90EE\u5541\u5A64\u5F9F\u63AB\u6DCD\u77EA\u9031\u9E3C\u558C\u8D52\u8F08\u7FE2\u9282\u8CD9\u8F16\u970C\u99F2\u568B\u76E9\u8B05\u9D43\u9A06\u8B78", "zh\xF3u": "\u59AF\u8EF8\u78A1", "zh\u01D2u": "\u8098\u5E1A\u759B\u80D5\u83F7\u666D\u776D\u7B92\u9BDE", "zh\xF2u": "\u7EA3\u4F37\u546A\u5492\u5B99\u7EC9\u5191\u54AE\u663C\u7D02\u80C4\u836E\u76B1\u914E\u665D\u7C99\u6906\u8464\u8A4B\u8EF8\u7503\u50FD\u76BA\u99CE\u5663\u7E10\u7E47\u85B5\u9AA4\u7C40\u7C55\u7C52\u9A5F", "zh\u016B": "\u4F8F\u8BDB\u90BE\u6D19\u8331\u682A\u73E0\u8BF8\u732A\u7843\u79FC\u88BE\u94E2\u7D51\u86DB\u8A85\u8DE6\u69E0\u6F74\u854F\u876B\u9296\u6A65\u8AF8\u8C6C\u99EF\u9BA2\u9D38\u7026\u85F8\u9F04\u6AE7\u6AEB\u9BFA\u8829", "zh\xFA": "\u672E\u7AF9\u7AFA\u70A2\u7B01\u833F\u70DB\u7A8B\u9010\u7B1C\u8233\u902B\u7603\u84EB\u6571\u78E9\u7BC9\u7BF4\u6580\u71ED\u880B\u8E85\u9C41\u529A\u5B4E\u705F\u65B8\u66EF\u6B18\u7225\u883E\u9483", "zh\u01D4": "\u4E36\u4E3B\u52AF\u5B94\u62C4\u782B\u7F5C\u967C\u5E3E\u6E1A\u7151\u716E\u8A5D\u891A\u5631\u6FD0\u71DD\u9E88\u77A9\u5C6C\u56D1\u9E00\u77DA", "zh\xF9": "\u4F2B\u4F47\u4F4F\u7EBB\u82A7\u82CE\u577E\u62C0\u677C\u6CE8\u82E7\u8D2E\u8FEC\u9A7B\u4E7C\u58F4\u67F1\u67F7\u6BB6\u70B7\u795D\u75B0\u771D\u782B\u7969\u7ADA\u8387\u7D35\u7D38\u7F9C\u86C0\u5C0C\u5D40\u8A3B\u8CAF\u8DD3\u8EF4\u94F8\u7B6F\u9252\u98F3\u99B5\u55FB\u58B8\u7BB8\u7FE5\u6A26\u6F8D\u92F3\u99D0\u7BC9\u7BEB\u9E86\u7C17\u6AE1\u9444", "zhu\u0101": "\u6293\u631D\u64BE\u6A9B\u81BC\u7C3B\u9AFD", "zhu\u01CE": "\u722B", "zhu\u0101i": "\u62FD", "zhu\u01CEi": "\u8DE9", "zhu\xE0i": "\u62FD\u7749", "zhu\u0101n": "\u4E13\u53C0\u5C02\u606E\u7816\u8011\u5C08\u5278\u911F\u587C\u5AE5\u6F19\u747C\u750E\u78D7\u819E\u989B\u78DA\u8AEF\u7BFF\u87E4\u9853\u9C44", "zhu\u01CEn": "\u5B68\u8EE2\u819E\u7AF1\u8F49", "zhu\xE0n": "\u7077\u556D\u8EE2\u581F\u8483\u50B3\u7451\u815E\u50CE\u50DD\u8D5A\u64B0\u7BC6\u9994\u7BF9\u7E33\u8948\u8CFA\u7C28\u8D03\u8B54\u994C\u56C0\u7C51", "zhu\u0101ng": "\u5986\u5E84\u599D\u5E92\u8358\u5A24\u6869\u838A\u6889\u6E77\u7CA7\u88C5\u88DD\u6A01\u7CDA", "zhu\u01CEng": "\u5958", "zhu\xE0ng": "\u58EE\u58EF\u72B6\u72C0\u58F5\u710B\u50EE\u6F34\u649E\u6205\u6206\u6207", "zhu\u012B": "\u96B9\u9A93\u9525\u9310\u9A05\u9D7B", "zhu\u01D0": "\u6C9D", "zhu\xEC": "\u5760\u7B0D\u595E\u5A37\u7F00\u968A\u60F4\u7500\u7F12\u814F\u7577\u787E\u8187\u589C\u7DB4\u8D58\u7E0B\u8AC8\u918A\u9323\u7908\u8D05\u9446", "zh\u016Bn": "\u572B\u5B92\u5FF3\u8FCD\u80AB\u7A80\u8C06\u554D\u8AC4\u8860", "zh\u01D4n": "\u51C6\u57FB\u51D6\u6E96\u7A15\u7DA7", "zh\xF9n": "\u65FD\u8A30\u7A15\u7DA7", "zhu\u014D": "\u62D9\u70AA\u502C\u6349\u684C\u68B2\u68C1\u6DBF\u6DD6\u68F3\u68F9\u712F\u7AA7\u69D5\u7A5B\u942F\u7A71", "zhu\xF3": "\u5734\u5F74\u6C4B\u72B3\u707C\u5353\u53D5\u59B0\u8301\u65AB\u6D4A\u4E35\u5262\u6354\u6D5E\u70F5\u8BFC\u914C\u5544\u5545\u5A3A\u8049\u65B1\u65AE\u666B\u6913\u7438\u787A\u7AA1\u7F6C\u84D4\u588C\u64AF\u64C6\u65B2\u799A\u5285\u8AC1\u8AD1\u8DA0\u92DC\u5663\u6FC1\u71CB\u7BE7\u64E2\u6580\u65B5\u6FEF\u85CB\u6AE1\u8B36\u956F\u7E73\u9D6B\u7042\u8817\u9432\u7C57\u9DDF\u883F\u7C71", "zhu\xF2": "", "ch\u01CEng,\u0101n,h\xE0n": "\u5382", "d\u012Bng,zh\u0113ng": "\u4E01", "b\u01D4,bo": "\u535C", "j\u01D0,j\u012B": "\u51E0", "le,li\u01CEo": "\u4E86", "g\u0101n,g\xE0n": "\u5E72", "d\xE0,d\xE0i,t\xE0i": "\u5927", "y\u01D4,y\xF9,y\xFA": "\u4E0E", "sh\xE0ng,sh\u01CEng": "\u4E0A", "w\xE0n,m\xF2": "\u4E07", "g\xE8,g\u011B": "\u4E2A\u5404", "me,m\xF3,ma,y\u0101o": "\u4E48", "gu\u01CEng,\u0101n": "\u5E7F", "w\xE1ng,w\xFA": "\u4EA1", "n\u01DA,r\u01D4": "\u5973", "ch\u0101,ch\xE1,ch\u01CE": "\u53C9", "w\xE1ng,w\xE0ng": "\u738B", "f\u016B,f\xFA": "\u592B", "zh\u0101,z\u0101,zh\xE1": "\u624E", "b\xF9,f\u01D2u": "\u4E0D", "q\u016B,\u014Du": "\u533A", "ch\u0113,j\u016B": "\u8F66", "qi\xE8,qi\u0113": "\u5207", "w\u01CE,w\xE0": "\u74E6", "t\xFAn,zh\u016Bn": "\u5C6F", "sh\u01CEo,sh\xE0o": "\u5C11", "zh\u014Dng,zh\xF2ng": "\u4E2D", "n\xE8i,n\xE0": "\u5185", "ji\xE0n,xi\xE0n": "\u89C1", "ch\xE1ng,zh\u01CEng": "\u957F", "sh\xE9n,sh\xED": "\u4EC0", "pi\xE0n,pi\u0101n": "\u7247", "p\xFA,p\u016B": "\u4EC6", "hu\xE0,hu\u0101": "\u5316", "ch\xF3u,qi\xFA": "\u4EC7", "zhu\u01CE,zh\u01CEo": "\u722A", "j\u01D0n,j\xECn": "\u4EC5", "f\xF9,f\u01D4": "\u7236", "c\xF3ng,z\xF2ng": "\u4ECE", "f\u0113n,f\xE8n": "\u5206", "sh\xEC,zh\u012B": "\u6C0F", "f\u0113ng,f\u011Bng": "\u98CE", "g\u014Du,g\xF2u": "\u52FE", "li\xF9,l\xF9": "\u516D", "d\u01D2u,d\xF2u": "\u6597", "w\xE8i,w\xE9i": "\u4E3A", "ch\u01D0,ch\u011B": "\u5C3A", "y\u01D4,y\xFA": "\u4E88", "d\u01CE,d\xE1": "\u6253", "zh\xE8ng,zh\u0113ng": "\u6B63\u75C7\u6323", "b\u0101,p\xE1": "\u6252", "ji\xE9,ji\u0113": "\u8282\u7ED3", "sh\xF9,sh\xFA,zh\xFA": "\u672F", "k\u011B,k\xE8": "\u53EF", "sh\xED,d\xE0n": "\u77F3", "k\u01CE,qi\u01CE": "\u5361", "b\u011Bi,b\xE8i": "\u5317", "zh\xE0n,zh\u0101n": "\u5360", "qi\u011B,j\u016B": "\u4E14", "y\xE8,xi\xE9": "\u53F6", "h\xE0o,h\xE1o": "\u53F7", "zh\u012B,zh\u01D0": "\u53EA", "d\u0101o,t\u0101o": "\u53E8", "z\u01CEi,z\u01D0,z\u012B": "\u4ED4", "l\xECng,l\xEDng,l\u01D0ng": "\u4EE4", "l\xE8,yu\xE8": "\u4E50", "j\xF9,g\u014Du": "\u53E5", "ch\xF9,ch\u01D4": "\u5904", "t\xF3u,tou": "\u5934", "n\xEDng,n\xECng,zh\xF9": "\u5B81", "zh\xE0o,sh\xE0o": "\u53EC", "f\u0101,f\xE0": "\u53D1", "t\xE1i,t\u0101i": "\u53F0\u82D4", "k\xE1ng,g\u0101ng": "\u625B", "d\xEC,de": "\u5730", "s\u01CEo,s\xE0o": "\u626B", "ch\u01CEng,ch\xE1ng": "\u573A", "p\u01D4,p\xF2,p\u014D,pi\xE1o": "\u6734", "gu\xF2,guo,gu\u014D": "\u8FC7", "y\u0101,y\xE0": "\u538B", "y\u01D2u,y\xF2u": "\u6709", "ku\u0101,ku\xE0": "\u5938", "xi\xE9,y\xE1,y\xE9,y\xFA,x\xFA": "\u90AA", "ji\xE1,ji\u0101,g\u0101,xi\xE1": "\u5939", "hu\xE0,hu\xE1": "\u5212", "d\u0101ng,d\xE0ng": "\u5F53", "t\xF9,t\u01D4": "\u5410", "xi\xE0,h\xE8": "\u5413", "t\xF3ng,t\xF2ng": "\u540C", "q\u016B,q\u01D4": "\u66F2", "ma,m\xE1,m\u01CE": "\u5417", "q\u01D0,k\u01CEi": "\u5C82", "zh\u016B,sh\xFA": "\u6731", "chu\xE1n,zhu\xE0n": "\u4F20", "xi\u016B,x\u01D4": "\u4F11", "r\xE8n,r\xE9n": "\u4EFB", "hu\xE1,hu\xE0,hu\u0101": "\u534E", "ji\xE0,ji\xE8,jie": "\u4EF7", "f\xE8n,b\u012Bn": "\u4EFD", "y\u01CEng,\xE1ng": "\u4EF0", "xi\u011B,xu\xE8": "\u8840", "s\xEC,sh\xEC": "\u4F3C", "h\xE1ng,x\xEDng": "\u884C", "hu\xEC,ku\xE0i": "\u4F1A", "h\xE9,g\u011B": "\u5408", "chu\xE0ng,chu\u0101ng": "\u521B", "ch\u014Dng,ch\xF2ng": "\u51B2", "q\xED,j\xEC,z\u012B,zh\u0101i": "\u9F50", "y\xE1ng,xi\xE1ng": "\u7F8A", "b\xECng,b\u012Bng": "\u5E76", "h\xE0n,h\xE1n": "\u6C57", "t\u0101ng,sh\u0101ng": "\u6C64", "x\u012Bng,x\xECng": "\u5174", "x\u01D4,h\u01D4": "\u8BB8", "l\xF9n,l\xFAn": "\u8BBA", "n\xE0,n\u01CE,n\xE8i,n\u0101": "\u90A3", "j\xECn,j\u01D0n": "\u5C3D", "s\u016Bn,x\xF9n": "\u5B59", "x\xEC,h\u016B": "\u620F", "h\u01CEo,h\xE0o": "\u597D", "t\u0101,ji\u011B": "\u5979", "gu\u0101n,gu\xE0n": "\u89C2\u51A0", "h\xF3ng,g\u014Dng": "\u7EA2", "xi\u0101n,qi\xE0n": "\u7EA4", "j\xEC,j\u01D0": "\u7EAA\u6D4E", "yu\u0113,y\u0101o": "\u7EA6", "n\xF2ng,l\xF2ng": "\u5F04", "yu\u01CEn,yu\xE0n": "\u8FDC", "hu\xE0i,p\u0113i,p\u012B,p\xE9i": "\u574F", "zh\xE9,sh\xE9,zh\u0113": "\u6298", "qi\u01CEng,qi\u0101ng,ch\u0113ng": "\u62A2", "k\xE9,qi\xE0o": "\u58F3", "f\u0101ng,f\xE1ng": "\u574A", "b\u01CE,b\xE0": "\u628A", "g\u0101n,g\u01CEn": "\u6746", "s\u016B,s\xF9": "\u82CF", "g\xE0ng,g\u0101ng": "\u6760", "g\xE8ng,g\u0113ng": "\u66F4", "l\xEC,l\xED": "\u4E3D", "h\xE1i,hu\xE1n": "\u8FD8", "f\u01D2u,p\u01D0": "\u5426", "xi\xE0n,xu\xE1n": "\u53BF", "zh\xF9,ch\xFA": "\u52A9", "ya,y\u0101": "\u5440", "ch\u01CEo,ch\u0101o": "\u5435", "yu\xE1n,y\xFAn,y\xF9n": "\u5458", "ba,b\u0101": "\u5427", "bi\xE9,bi\xE8": "\u522B", "d\u012Bng,d\xECng": "\u9489", "g\u016B,g\xF9": "\u4F30", "h\xE9,h\u0113,h\xE8": "\u4F55", "t\u01D0,t\u012B,b\xE8n": "\u4F53", "b\xF3,b\u01CEi,b\xE0": "\u4F2F", "y\xF2ng,y\u014Dng": "\u4F63", "f\xF3,f\xFA,b\xEC,b\xF3": "\u4F5B", "d\xF9,d\u01D4": "\u809A", "gu\u012B,j\u016Bn,qi\u016B": "\u9F9F", "ji\u01CEo,ju\xE9": "\u89D2", "ti\xE1o,ti\u0101o": "\u6761", "x\xEC,j\xEC": "\u7CFB", "y\xECng,y\u012Bng": "\u5E94", "zh\xE8,zh\xE8i": "\u8FD9", "ji\u0101n,ji\xE0n": "\u95F4\u76D1", "m\u0113n,m\xE8n": "\u95F7", "d\xEC,t\xEC,tu\xED": "\u5F1F", "sh\u0101,sh\xE0": "\u6C99", "sh\xE0,sh\u0101": "\u715E", "m\xE9i,m\xF2": "\u6CA1", "sh\u011Bn,ch\xE9n": "\u6C88", "sh\xED,zh\xEC": "\u8BC6", "ni\xE0o,su\u012B": "\u5C3F", "w\u011Bi,y\u01D0": "\u5C3E", "\u0113,\u0101": "\u963F", "j\xECn,j\xECng": "\u52B2", "z\xF2ng,z\u01D2ng": "\u7EB5", "w\xE9n,w\xE8n": "\u7EB9", "m\u01D2,m\xF2,m\u0101": "\u62B9", "d\u0101n,d\xE0n,d\u01CEn": "\u62C5", "ch\u0101i,c\u0101": "\u62C6", "j\u016B,g\u014Du": "\u62D8", "l\u0101,l\xE1": "\u62C9", "b\xE0n,p\xE0n": "\u62CC", "z\xE9,zh\xE1i": "\u62E9", "q\xED,j\u012B": "\u5176\u5947", "ru\xF2,r\u011B": "\u82E5", "p\xEDng,p\u0113ng": "\u82F9", "zh\u012B,q\xED": "\u679D", "gu\xEC,j\u01D4": "\u67DC", "s\xE0ng,s\u0101ng": "\u4E27", "c\xEC,c\u012B": "\u523A", "y\u01D4,y\xF9": "\u96E8\u8BED", "b\u0113n,b\xE8n": "\u5954", "q\u012B,q\xEC": "\u59BB", "zhu\u01CEn,zhu\xE0n,zhu\u01CEi": "\u8F6C", "xi\u0113,su\xF2": "\u4E9B", "ne,n\xED": "\u5462", "ti\u011B,ti\u0113,ti\xE8,": "\u5E16", "l\u01D0ng,l\xEDng": "\u5CAD", "zh\u012B,zh\xEC": "\u77E5\u7EC7", "h\xE9,h\xE8,hu\xF3,hu\xF2,h\xFA": "\u548C", "g\xF2ng,g\u014Dng": "\u4F9B\u5171", "w\u011Bi,w\u0113i": "\u59D4", "c\xE8,z\xE8,zh\u0101i": "\u4FA7", "p\xF2,p\u01CEi": "\u8FEB", "de,d\xEC,d\xED": "\u7684", "c\u01CEi,c\xE0i": "\u91C7", "f\xFA,f\xF9": "\u670D", "d\u01D0,de": "\u5E95", "j\xECng,ch\u0113ng": "\u51C0", "ju\xE0n,ju\u01CEn": "\u5377", "qu\xE0n,xu\xE0n": "\u5238", "d\u0101n,sh\xE0n,ch\xE1n": "\u5355", "qi\u01CEn,ji\u0101n": "\u6D45", "xi\xE8,y\xEC": "\u6CC4", "p\u014D,b\xF3": "\u6CCA", "p\xE0o,p\u0101o": "\u6CE1", "n\xED,n\xEC": "\u6CE5", "z\xE9,sh\xEC": "\u6CFD", "k\u014Dng,k\xF2ng,k\u01D2ng": "\u7A7A", "l\xE1ng,l\xE0ng": "\u90CE", "xi\xE1ng,y\xE1ng": "\u8BE6", "l\xEC,d\xE0i": "\u96B6", "shu\u0101,shu\xE0": "\u5237", "ji\xE0ng,xi\xE1ng": "\u964D", "c\u0101n,sh\u0113n,c\u0113n,s\u0101n": "\u53C2", "d\xFA,d\xE0i": "\u6BD2", "ku\xE0,k\u016B": "\u630E", "d\u01CEng,d\xE0ng": "\u6321", "ku\xF2,gu\u0101": "\u62EC", "sh\xED,sh\xE8": "\u62FE", "ti\u0101o,ti\u01CEo": "\u6311", "sh\xE8n,sh\xE9n": "\u751A", "xi\xE0ng,h\xE0ng": "\u5DF7", "n\xE1n,n\u0101": "\u5357", "xi\u0101ng,xi\xE0ng": "\u76F8", "ch\xE1,zh\u0101": "\u67E5", "b\u01CEi,b\xF3,b\xF2": "\u67CF", "y\xE0o,y\u0101o": "\u8981", "y\xE1n,y\xE0n": "\u7814", "q\xEC,qi\xE8": "\u780C", "b\xE8i,b\u0113i": "\u80CC", "sh\u011Bng,x\u01D0ng": "\u7701", "xi\u0101o,xu\u0113": "\u524A", "h\u01D2ng,h\u014Dng,h\xF2ng": "\u54C4", "m\xE0o,m\xF2": "\u5192", "y\u01CE,y\u0101": "\u54D1", "s\u012B,s\u0101i": "\u601D", "m\u01CE,m\u0101,m\xE0": "\u8682", "hu\xE1,hu\u0101": "\u54D7", "y\xE8,y\xE0n,y\u0101n": "\u54BD", "z\xE1n,z\u01CE": "\u54B1", "h\u0101,h\u01CE,h\xE0": "\u54C8", "n\u01CE,n\u011Bi,na,n\xE9": "\u54EA", "h\u0101i,k\xE9": "\u54B3", "g\u01D4,g\u016B": "\u9AA8", "g\u0101ng,g\xE0ng": "\u94A2", "y\xE0o,yu\xE8": "\u94A5", "k\xE0n,k\u0101n": "\u770B", "zh\xF2ng,zh\u01D2ng,ch\xF3ng": "\u79CD", "bi\xE0n,pi\xE1n": "\u4FBF", "zh\xF2ng,ch\xF3ng": "\u91CD", "x\xECn,sh\u0113n": "\u4FE1", "zhu\u012B,du\u012B": "\u8FFD", "d\xE0i,d\u0101i": "\u5F85", "sh\xED,s\xEC,y\xEC": "\u98DF", "m\xE0i,m\xF2": "\u8109", "ji\u0101ng,ji\xE0ng": "\u5C06\u6D46", "d\xF9,du\xF3": "\u5EA6", "q\u012Bn,q\xECng": "\u4EB2", "ch\xE0,ch\u0101,ch\u0101i,c\u012B": "\u5DEE", "zh\xE0,zh\xE1": "\u70B8", "p\xE0o,p\xE1o,b\u0101o": "\u70AE", "s\u01CE,x\u01D0": "\u6D12", "x\u01D0,xi\u01CEn": "\u6D17", "ju\xE9,ji\xE0o": "\u89C9", "bi\u01CEn,pi\u0101n": "\u6241", "shu\u014D,shu\xEC,yu\xE8": "\u8BF4", "l\u01CEo,m\u01D4": "\u59E5", "g\u011Bi,j\u01D0": "\u7ED9", "lu\xF2,l\xE0o": "\u7EDC", "z\u01CEi,z\xE0i": "\u8F7D", "m\xE1i,m\xE1n": "\u57CB", "sh\u0101o,sh\xE0o": "\u634E\u7A0D", "d\u016B,d\u014Du": "\u90FD", "\xE1i,\u0101i": "\u6328", "m\xF2,m\xF9": "\u83AB", "\xE8,w\xF9,\u011B,w\u016B": "\u6076", "xi\xE0o,ji\xE0o": "\u6821", "h\xE9,h\xFA": "\u6838", "y\u016Bn,y\xF9n": "\u6655", "hu\xE0ng,hu\u01CEng": "\u6643", "\xE0i,\u0101i": "\u5509", "\u0101,\xE1,\u01CE,\xE0,a": "\u554A", "b\xE0,ba,p\xED": "\u7F62", "zu\xE0n,zu\u0101n": "\u94BB", "qi\u0101n,y\xE1n": "\u94C5", "ch\xE9ng,sh\xE8ng": "\u4E58", "m\xEC,b\xEC": "\u79D8\u6CCC", "ch\u0113ng,ch\xE8n,ch\xE8ng": "\u79F0", "d\xE0o,d\u01CEo": "\u5012", "t\u01CEng,ch\xE1ng": "\u5018", "ch\xE0ng,ch\u0101ng": "\u5021", "ch\xF2u,xi\xF9": "\u81ED", "sh\xE8,y\xE8,y\xEC": "\u5C04", "g\u0113,g\xE9": "\u80F3\u6401", "shu\u0101i,cu\u012B": "\u8870", "li\xE1ng,li\xE0ng": "\u51C9\u91CF", "ch\xF9,x\xF9": "\u755C", "p\xE1ng,b\xE0ng": "\u65C1\u78C5", "zh\u01CEng,zh\xE0ng": "\u6DA8", "y\u01D2ng,ch\u014Dng": "\u6D8C", "qi\u0101o,qi\u01CEo": "\u6084", "ji\u0101,jia,jie": "\u8FE6\u5BB6", "d\xFA,d\xF2u": "\u8BFB", "sh\xE0n,sh\u0101n": "\u6247", "sh\u0101n,sh\xE0n": "\u82EB", "b\xE8i,p\u012B": "\u88AB", "ti\xE1o,di\xE0o,zh\u014Du": "\u8C03", "b\u014D,b\u0101o": "\u5265", "n\xE9ng,n\xE0i": "\u80FD", "n\xE1n,n\xE0n,nu\xF3": "\u96BE", "p\xE1i,p\u01CEi": "\u6392", "ji\xE0o,ji\u0101o": "\u6559", "j\xF9,j\u016B": "\u636E", "zh\xF9,zhu\xF3,zhe": "\u8457", "j\u016Bn,j\xF9n": "\u83CC", "l\xE8,l\u0113i": "\u52D2", "sh\u0101o,s\xE0o": "\u68A2", "f\xF9,p\xEC": "\u526F", "pi\xE0o,pi\u0101o": "\u7968", "sh\xE8ng,ch\xE9ng": "\u76DB", "qu\xE8,qi\u0101o,qi\u01CEo": "\u96C0", "ch\xED,shi": "\u5319", "m\u012B,m\xED": "\u772F", "la,l\u0101": "\u5566", "sh\xE9,y\xED": "\u86C7", "l\xE8i,l\xE9i,l\u011Bi": "\u7D2F", "zh\u01CEn,ch\xE1n": "\u5D2D", "qu\u0101n,ju\xE0n,ju\u0101n": "\u5708", "l\xF3ng,l\u01D2ng": "\u7B3C", "d\xE9,d\u011Bi,de": "\u5F97", "ji\u01CE,ji\xE0": "\u5047", "m\u0101o,m\xE1o": "\u732B", "xu\xE1n,xu\xE0n": "\u65CB", "zhe,zhu\xF3,zh\xE1o,zh\u0101o": "\u7740", "l\u01DC,shu\xE0i": "\u7387", "g\xE0i,g\u011B,h\xE9": "\u76D6", "l\xEDn,l\xECn": "\u6DCB", "q\xFA,j\xF9": "\u6E20", "ji\xE0n,ji\u0101n": "\u6E10\u6E85", "h\xF9n,h\xFAn": "\u6DF7", "s\xF9,xi\u01D4,xi\xF9": "\u5BBF", "t\xE1n,d\xE0n": "\u5F39", "y\u01D0n,y\xECn": "\u9690", "j\u01D0ng,g\u011Bng": "\u9888", "l\u01DC,l\xF9": "\u7EFF", "q\u016B,c\xF9": "\u8D8B", "t\xED,d\u012B,d\u01D0": "\u63D0", "ji\u0113,q\xEC": "\u63ED", "l\u01D2u,l\u014Du": "\u6402", "q\u012B,j\u012B": "\u671F", "s\xE0n,s\u01CEn": "\u6563", "g\u011B,g\xE9": "\u845B", "zh\u0101o,ch\xE1o": "\u671D", "lu\xF2,l\xE0,l\xE0o": "\u843D", "y\u01D0,y\u012B": "\u6905", "g\xF9n,h\xF9n": "\u68CD", "zh\xED,shi": "\u6B96", "xi\xE0,sh\xE0": "\u53A6", "li\xE8,li\u011B": "\u88C2", "j\u01D0ng,y\u01D0ng": "\u666F", "p\u0113n,p\xE8n": "\u55B7", "p\u01CEo,p\xE1o": "\u8DD1", "h\u0113,h\xE8,y\xE8": "\u559D", "p\xF9,p\u016B": "\u94FA", "zh\xF9,zh\xFA": "\u7B51", "d\xE1,d\u0101": "\u7B54", "b\u01CEo,b\u01D4,p\xF9": "\u5821", "\xE0o,y\xF9": "\u5965", "f\u0101n,p\u0101n": "\u756A", "l\xE0,x\u012B": "\u814A", "g\u01CEng,ji\u01CEng": "\u6E2F", "c\xE9ng,z\u0113ng": "\u66FE", "y\xFA,t\u014Du": "\u6109", "qi\xE1ng,qi\u01CEng,ji\xE0ng": "\u5F3A", "sh\u01D4,zh\u01D4": "\u5C5E", "zh\u014Du,y\xF9": "\u7CA5", "sh\xE8,ni\xE8": "\u6444", "ti\xE1n,zh\xE8n": "\u586B", "m\xE9ng,m\u0113ng,m\u011Bng": "\u8499", "j\xECn,j\u012Bn": "\u7981", "l\xF9,li\xF9": "\u788C", "ti\xE0o,t\xE1o": "\u8DF3", "\xE9,y\u01D0": "\u86FE", "ji\u011B,ji\xE8,xi\xE8": "\u89E3", "sh\xF9,sh\u01D4,shu\xF2": "\u6570", "li\u016B,li\xF9": "\u6E9C", "s\u0101i,s\xE0i,s\xE8": "\u585E", "p\xEC,b\xEC": "\u8F9F", "f\xE8ng,f\xE9ng": "\u7F1D", "pi\u011B,pi\u0113": "\u6487", "m\xF3,m\xFA": "\u6A21", "b\u01CEng,b\xE0ng": "\u699C", "shang,ch\xE1ng": "\u88F3", "xi\u0101n,xi\u01CEn": "\u9C9C", "y\xED,n\u01D0": "\u7591", "g\u0101o,g\xE0o": "\u818F", "pi\u0101o,pi\xE0o,pi\u01CEo": "\u6F02", "su\u014D,s\xF9": "\u7F29", "q\xF9,c\xF9": "\u8DA3", "s\u0101,s\u01CE": "\u6492", "t\xE0ng,t\u0101ng": "\u8D9F", "h\xE9ng,h\xE8ng": "\u6A2A", "m\xE1n,m\xE9n": "\u7792", "b\xE0o,p\xF9": "\u66B4", "m\xF3,m\u0101": "\u6469", "h\xFA,h\u016B,h\xF9": "\u7CCA", "p\u012B,p\u01D0": "\u5288", "y\xE0n,y\u0101n": "\u71D5", "b\xE1o,b\xF3,b\xF2": "\u8584", "m\xF3,m\xF2": "\u78E8", "ji\u01CEo,zhu\xF3": "\u7F34", "c\xE1ng,z\xE0ng": "\u85CF", "f\xE1n,p\xF3": "\u7E41", "b\xEC,bei": "\u81C2", "ch\xE0n,zh\xE0n": "\u98A4", "ji\u0101ng,qi\xE1ng": "\u7586", "ji\xE1o,ju\xE9,ji\xE0o": "\u56BC", "r\u01CEng,r\u0101ng": "\u56B7", "l\xF9,l\xF2u": "\u9732", "n\xE1ng,n\u0101ng": "\u56CA", "h\u0101ng,b\xE8n": "\u592F", "\u0101o,w\u0101": "\u51F9", "f\xE9ng,p\xEDng": "\u51AF", "x\u016B,y\xF9": "\u5401", "l\xE8i,l\u0113": "\u808B", "l\u016Bn,l\xFAn": "\u62A1", "ji\xE8,g\xE0i": "\u82A5", "x\u012Bn,x\xECn": "\u82AF", "ch\u0101,ch\xE0": "\u6748", "xi\u0101o,xi\xE0o": "\u8096", "zh\u012B,z\u012B": "\u5431", "\u01D2u,\u014Du,\xF2u": "\u5455", "n\xE0,n\xE8": "\u5450", "qi\xE0ng,qi\u0101ng": "\u545B", "t\xFAn,d\xF9n": "\u56E4", "k\u0113ng,h\xE1ng": "\u542D", "di\xE0n,ti\xE1n": "\u4F43", "s\xEC,c\xEC": "\u4F3A", "di\xE0n,ti\xE1n,sh\xE8ng": "\u7538", "p\xE1o,b\xE0o": "\u5228", "du\xEC,ru\xEC,yu\xE8": "\u5151", "k\u0113,k\u011B": "\u5777", "tu\xF2,t\xE0,zh\xED": "\u62D3", "f\xFA,b\xEC": "\u62C2", "n\u01D0ng,n\xEDng,n\xECng": "\u62E7", "\xE0o,\u01CEo,ni\xF9": "\u62D7", "k\u0113,h\u0113": "\u82DB", "y\u0101n,y\u01CEn": "\u5944", "h\u0113,a,k\u0113": "\u5475", "g\u0101,k\u0101": "\u5496", "ji\u01CEo,y\xE1o": "\u4FA5", "ch\xE0,sh\u0101": "\u5239", "n\xFC\xE8,y\xE0o": "\u759F", "m\xE1ng,m\xE9ng": "\u6C13", "g\u0113,y\xEC": "\u7599", "j\u01D4,j\xF9": "\u6CAE", "z\xFA,c\xF9": "\u5352", "w\u01CEn,yu\u0101n": "\u5B9B", "m\xED,m\u01D0": "\u5F25", "q\xEC,qi\xE8,xi\xE8": "\u5951", "xi\xE9,ji\u0101": "\u631F", "du\xF2,du\u01D2": "\u579B", "zh\xE0,sh\u0101n,shi,c\xE8": "\u6805", "b\xF3,b\xE8i": "\u52C3", "zh\xF3u,zh\xF2u": "\u8F74", "li\u0113,li\u011B,li\xE9,lie": "\u54A7", "yo,y\u014D": "\u54DF", "qi\xE0o,xi\xE0o": "\u4FCF", "h\xF3u,h\xF2u": "\u4FAF", "p\xEDng,b\u01D0ng": "\u5C4F", "n\xE0,nu\xF3": "\u5A1C", "p\xE1,b\xE0": "\u8019", "q\u012B,x\u012B": "\u6816", "ji\u01CE,g\u01D4": "\u8D3E", "l\xE1o,l\xE0o": "\u5520", "b\xE0ng,b\xE8ng": "\u868C", "g\u014Dng,zh\u014Dng": "\u86A3", "li,l\u01D0,l\u012B": "\u54E9", "ju\xE8,ju\xE9": "\u5014", "y\u012Bn,y\u0101n,y\u01D0n": "\u6BB7", "w\u014D,gu\u014D": "\u6DA1", "l\xE0o,lu\xF2": "\u70D9", "ni\u01CEn,ni\u0113": "\u637B", "y\xE8,y\u0113": "\u6396", "ch\u0101n,xi\u0101n,c\xE0n,sh\u01CEn": "\u63BA", "d\u01CEn,sh\xE0n": "\u63B8", "f\u0113i,f\u011Bi": "\u83F2", "qi\xE1n,g\u0101n": "\u4E7E", "shu\xF2,sh\xED": "\u7855", "lu\u014D,lu\xF3,luo": "\u5570", "h\u01D4,xi\xE0": "\u552C", "d\u0101ng,ch\u0113ng": "\u94DB", "xi\u01CEn,x\u01D0": "\u94E3", "ji\u01CEo,ji\xE1o": "\u77EB", "ku\u01D0,gu\u012B": "\u5080", "j\xEC,zh\xE0i": "\u796D", "t\u01CEng,ch\u01CEng": "\u6DCC", "ch\xFAn,zh\u016Bn": "\u6DF3", "w\xE8i,y\xF9": "\u5C09", "du\xF2,hu\u012B": "\u5815", "chu\xF2,ch\u0101o": "\u7EF0", "b\u0113ng,b\u011Bng,b\xE8ng": "\u7EF7", "z\u014Dng,z\xE8ng": "\u7EFC", "zhu\xF3,zu\xF3": "\u7422", "chu\u01CEi,chu\xE0i,chu\u0101i,tu\xE1n,zhu\u012B": "\u63E3", "p\xE9ng,b\u0101ng": "\u5F6D", "zhu\u012B,chu\xED": "\u690E", "l\xE9ng,l\u0113ng,l\xEDng": "\u68F1", "qi\xE0o,qi\xE1o": "\u7FD8", "zh\u0101,ch\u0101": "\u55B3", "h\xE1,g\xE9": "\u86E4", "qi\xE0n,k\xE0n": "\u5D4C", "y\u0101n,\u0101": "\u814C", "d\u016Bn,du\xEC": "\u6566", "ku\xEC,hu\xEC": "\u6E83", "s\u0101o,s\u01CEo": "\u9A9A", "k\u01CEi,ji\u0113": "\u6977", "p\xEDn,b\u012Bn": "\u9891", "li\xFA,li\xF9": "\u998F", "n\xEC,ni\xE0o": "\u6EBA", "ji\u01CEo,ch\u0101o": "\u527F", "\xE1o,\u0101o": "\u71AC", "m\xE0n,w\xE0n": "\u8513", "ch\xE1,ch\u0101": "\u78B4", "x\u016Bn,x\xF9n": "\u718F", "da,d\xE1": "\u7629", "tu\xEC,t\xF9n": "\u892A", "li\xE1o,li\u0101o": "\u64A9", "cu\u014D,zu\u01D2": "\u64AE", "ch\xE1o,zh\u0101o": "\u5632", "h\u0113i,m\xF2": "\u563F", "zhu\xE0ng,chu\xE1ng": "\u5E62", "j\u012B,q\u01D0": "\u7A3D", "bi\u011B,bi\u0113": "\u762A", "li\xE1o,l\xE0o,l\u01CEo": "\u6F66", "ch\xE9ng,d\xE8ng": "\u6F84", "l\xE8i,l\xE9i": "\u64C2", "m\xF2,m\xE1": "\u87C6", "li\xE1o,li\u01CEo": "\u71CE", "li\xE0o,li\u01CEo": "\u77AD", "s\xE0o,s\u0101o": "\u81CA", "m\xED,m\xE9i": "\u7CDC", "hu\xF2,hu\u014D,hu\xE1": "\u8C41", "p\xF9,b\xE0o": "\u7011", "z\u01CEn,cu\xE1n": "\u6512", "b\xF2,b\u01D2": "\u7C38", "b\xF3,b\xF9": "\u7C3F" }; /* object-assign (c) Sindre Sorhus @license MIT */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === void 0) { throw new TypeError("Object.assign cannot be called with null or undefined"); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } var test1 = new String("abc"); test1[5] = "de"; if (Object.getOwnPropertyNames(test1)[0] === "5") { return false; } var test2 = {}; for (var i2 = 0; i2 < 10; i2++) { test2["_" + String.fromCharCode(i2)] = i2; } var order2 = Object.getOwnPropertyNames(test2).map(function(n2) { return test2[n2]; }); if (order2.join("") !== "0123456789") { return false; } var test3 = {}; "abcdefghijklmnopqrst".split("").forEach(function(letter2) { test3[letter2] = letter2; }); if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") { return false; } return true; } catch (err) { return false; } } var objectAssign = shouldUseNative() ? Object.assign : function(target2, source) { var from2; var to = toObject(target2); var symbols2; for (var s2 = 1; s2 < arguments.length; s2++) { from2 = Object(arguments[s2]); for (var key2 in from2) { if (hasOwnProperty.call(from2, key2)) { to[key2] = from2[key2]; } } if (getOwnPropertySymbols) { symbols2 = getOwnPropertySymbols(from2); for (var i2 = 0; i2 < symbols2.length; i2++) { if (propIsEnumerable.call(from2, symbols2[i2])) { to[symbols2[i2]] = from2[symbols2[i2]]; } } } } return to; }; var surname = { "\u8D75": [["zh\xE0o"]], "\u94B1": [["qi\xE1n"]], "\u5B59": [["s\u016Bn"]], "\u674E": [["l\u01D0"]], "\u5468": [["zh\u014Du"]], "\u5434": [["w\xFA"]], "\u90D1": [["zh\xE8ng"]], "\u738B": [["w\xE1ng"]], "\u51AF": [["f\xE9ng"]], "\u9648": [["ch\xE9n"]], "\u891A": [["ch\u01D4"]], "\u536B": [["w\xE8i"]], "\u848B": [["ji\u01CEng"]], "\u6C88": [["sh\u011Bn"]], "\u97E9": [["h\xE1n"]], "\u6768": [["y\xE1ng"]], "\u6731": [["zh\u016B"]], "\u79E6": [["q\xEDn"]], "\u5C24": [["y\xF3u"]], "\u8BB8": [["x\u01D4"]], "\u4F55": [["h\xE9"]], "\u5415": [["l\u01DA"]], "\u65BD": [["sh\u012B"]], "\u5F20": [["zh\u0101ng"]], "\u5B54": [["k\u01D2ng"]], "\u66F9": [["c\xE1o"]], "\u4E25": [["y\xE1n"]], "\u534E": [["hu\xE0"]], "\u91D1": [["j\u012Bn"]], "\u9B4F": [["w\xE8i"]], "\u9676": [["t\xE1o"]], "\u59DC": [["ji\u0101ng"]], "\u621A": [["q\u012B"]], "\u8C22": [["xi\xE8"]], "\u90B9": [["z\u014Du"]], "\u55BB": [["y\xF9"]], "\u67CF": [["b\u01CEi"]], "\u6C34": [["shu\u01D0"]], "\u7AA6": [["d\xF2u"]], "\u7AE0": [["zh\u0101ng"]], "\u4E91": [["y\xFAn"]], "\u82CF": [["s\u016B"]], "\u6F58": [["p\u0101n"]], "\u845B": [["g\u011B"]], "\u595A": [["x\u012B"]], "\u8303": [["f\xE0n"]], "\u5F6D": [["p\xE9ng"]], "\u90CE": [["l\xE1ng"]], "\u9C81": [["l\u01D4"]], "\u97E6": [["w\xE9i"]], "\u660C": [["ch\u0101ng"]], "\u9A6C": [["m\u01CE"]], "\u82D7": [["mi\xE1o"]], "\u51E4": [["f\xE8ng"]], "\u82B1": [["hu\u0101"]], "\u65B9": [["f\u0101ng"]], "\u4FDE": [["y\xFA"]], "\u4EFB": [["r\xE8n"]], "\u8881": [["yu\xE1n"]], "\u67F3": [["li\u01D4"]], "\u9146": [["f\u0113ng"]], "\u9C8D": [["b\xE0o"]], "\u53F2": [["sh\u01D0"]], "\u5510": [["t\xE1ng"]], "\u8D39": [["f\xE8i"]], "\u5EC9": [["li\xE1n"]], "\u5C91": [["c\xE9n"]], "\u859B": [["xu\u0113"]], "\u96F7": [["l\xE9i"]], "\u8D3A": [["h\xE8"]], "\u502A": [["n\xED"]], "\u6C64": [["t\u0101ng"]], "\u6ED5": [["t\xE9ng"]], "\u6BB7": [["y\u012Bn"]], "\u7F57": [["lu\xF3"]], "\u6BD5": [["b\xEC"]], "\u90DD": [["h\u01CEo"]], "\u90AC": [["w\u016B"]], "\u5B89": [["\u0101n"]], "\u5E38": [["ch\xE1ng"]], "\u4E50": [["yu\xE8"]], "\u4E8E": [["y\xFA"]], "\u65F6": [["sh\xED"]], "\u5085": [["f\xF9"]], "\u76AE": [["p\xED"]], "\u535E": [["bi\xE0n"]], "\u9F50": [["q\xED"]], "\u5EB7": [["k\u0101ng"]], "\u4F0D": [["w\u01D4"]], "\u4F59": [["y\xFA"]], "\u5143": [["yu\xE1n"]], "\u535C": [["b\u01D4"]], "\u987E": [["g\xF9"]], "\u5B5F": [["m\xE8ng"]], "\u5E73": [["p\xEDng"]], "\u9EC4": [["hu\xE1ng"]], "\u548C": [["h\xE9"]], "\u7A46": [["m\xF9"]], "\u8427": [["xi\u0101o"]], "\u5C39": [["y\u01D0n"]], "\u59DA": [["y\xE1o"]], "\u90B5": [["sh\xE0o"]], "\u6E5B": [["zh\xE0n"]], "\u6C6A": [["w\u0101ng"]], "\u7941": [["q\xED"]], "\u6BDB": [["m\xE1o"]], "\u79B9": [["y\u01D4"]], "\u72C4": [["d\xED"]], "\u7C73": [["m\u01D0"]], "\u8D1D": [["b\xE8i"]], "\u660E": [["m\xEDng"]], "\u81E7": [["z\u0101ng"]], "\u8BA1": [["j\xEC"]], "\u4F0F": [["f\xFA"]], "\u6210": [["ch\xE9ng"]], "\u6234": [["d\xE0i"]], "\u8C08": [["t\xE1n"]], "\u5B8B": [["s\xF2ng"]], "\u8305": [["m\xE1o"]], "\u5E9E": [["p\xE1ng"]], "\u718A": [["xi\xF3ng"]], "\u7EAA": [["j\xEC"]], "\u8212": [["sh\u016B"]], "\u5C48": [["q\u016B"]], "\u9879": [["xi\xE0ng"]], "\u795D": [["zh\xF9"]], "\u8463": [["d\u01D2ng"]], "\u6881": [["li\xE1ng"]], "\u675C": [["d\xF9"]], "\u962E": [["ru\u01CEn"]], "\u84DD": [["l\xE1n"]], "\u95F5": [["m\u01D0n"]], "\u5E2D": [["x\xED"]], "\u5B63": [["j\xEC"]], "\u9EBB": [["m\xE1"]], "\u5F3A": [["qi\xE1ng"]], "\u8D3E": [["ji\u01CE"]], "\u8DEF": [["l\xF9"]], "\u5A04": [["l\xF3u"]], "\u5371": [["w\u0113i"]], "\u6C5F": [["ji\u0101ng"]], "\u7AE5": [["t\xF3ng"]], "\u989C": [["y\xE1n"]], "\u90ED": [["gu\u014D"]], "\u6885": [["m\xE9i"]], "\u76DB": [["sh\xE8ng"]], "\u6797": [["l\xEDn"]], "\u5201": [["di\u0101o"]], "\u949F": [["zh\u014Dng"]], "\u5F90": [["x\xFA"]], "\u90B1": [["qi\u016B"]], "\u9A86": [["lu\xF2"]], "\u9AD8": [["g\u0101o"]], "\u590F": [["xi\xE0"]], "\u8521": [["c\xE0i"]], "\u7530": [["ti\xE1n"]], "\u6A0A": [["f\xE1n"]], "\u80E1": [["h\xFA"]], "\u51CC": [["l\xEDng"]], "\u970D": [["hu\xF2"]], "\u865E": [["y\xFA"]], "\u4E07": [["w\xE0n"]], "\u652F": [["zh\u012B"]], "\u67EF": [["k\u0113"]], "\u661D": [["z\u01CEn"]], "\u7BA1": [["gu\u01CEn"]], "\u5362": [["l\xFA"]], "\u83AB": [["m\xF2"]], "\u7ECF": [["j\u012Bng"]], "\u623F": [["f\xE1ng"]], "\u88D8": [["qi\xFA"]], "\u7F2A": [["mi\xE0o"]], "\u5E72": [["g\u0101n"]], "\u89E3": [["xi\xE8"]], "\u5E94": [["y\u012Bng"]], "\u5B97": [["z\u014Dng"]], "\u4E01": [["d\u012Bng"]], "\u5BA3": [["xu\u0101n"]], "\u8D32": [["b\u0113n"]], "\u9093": [["d\xE8ng"]], "\u90C1": [["y\xF9"]], "\u5355": [["sh\xE0n"]], "\u676D": [["h\xE1ng"]], "\u6D2A": [["h\xF3ng"]], "\u5305": [["b\u0101o"]], "\u8BF8": [["zh\u016B"]], "\u5DE6": [["zu\u01D2"]], "\u77F3": [["sh\xED"]], "\u5D14": [["cu\u012B"]], "\u5409": [["j\xED"]], "\u94AE": [["ni\u01D4"]], "\u9F9A": [["g\u014Dng"]], "\u7A0B": [["ch\xE9ng"]], "\u5D47": [["j\u012B"]], "\u90A2": [["x\xEDng"]], "\u6ED1": [["hu\xE1"]], "\u88F4": [["p\xE9i"]], "\u9646": [["l\xF9"]], "\u8363": [["r\xF3ng"]], "\u7FC1": [["w\u0113ng"]], "\u8340": [["x\xFAn"]], "\u7F8A": [["y\xE1ng"]], "\u65BC": [["y\u016B"]], "\u60E0": [["hu\xEC"]], "\u7504": [["zh\u0113n"]], "\u66F2": [["q\u016B"]], "\u5BB6": [["ji\u0101"]], "\u5C01": [["f\u0113ng"]], "\u82AE": [["ru\xEC"]], "\u7FBF": [["y\xEC"]], "\u50A8": [["ch\u01D4"]], "\u9773": [["j\xECn"]], "\u6C72": [["j\xED"]], "\u90B4": [["b\u01D0ng"]], "\u7CDC": [["m\xED"]], "\u677E": [["s\u014Dng"]], "\u4E95": [["j\u01D0ng"]], "\u6BB5": [["du\xE0n"]], "\u5BCC": [["f\xF9"]], "\u5DEB": [["w\u016B"]], "\u4E4C": [["w\u016B"]], "\u7126": [["ji\u0101o"]], "\u5DF4": [["b\u0101"]], "\u5F13": [["g\u014Dng"]], "\u7267": [["m\xF9"]], "\u9697": [["ku\xED"]], "\u5C71": [["sh\u0101n"]], "\u8C37": [["g\u01D4"]], "\u8F66": [["ch\u0113"]], "\u4FAF": [["h\xF3u"]], "\u5B93": [["m\xEC"]], "\u84EC": [["p\xE9ng"]], "\u5168": [["qu\xE1n"]], "\u90D7": [["x\u012B"]], "\u73ED": [["b\u0101n"]], "\u4EF0": [["y\u01CEng"]], "\u79CB": [["qi\u016B"]], "\u4EF2": [["zh\xF2ng"]], "\u4F0A": [["y\u012B"]], "\u5BAB": [["g\u014Dng"]], "\u5B81": [["n\xECng"]], "\u4EC7": [["qi\xFA"]], "\u683E": [["lu\xE1n"]], "\u66B4": [["b\xE0o"]], "\u7518": [["g\u0101n"]], "\u94AD": [["t\u01D2u"]], "\u5389": [["l\xEC"]], "\u620E": [["r\xF3ng"]], "\u7956": [["z\u01D4"]], "\u6B66": [["w\u01D4"]], "\u7B26": [["f\xFA"]], "\u5218": [["li\xFA"]], "\u666F": [["j\u01D0ng"]], "\u8A79": [["zh\u0101n"]], "\u675F": [["sh\xF9"]], "\u9F99": [["l\xF3ng"]], "\u53F6": [["y\xE8"]], "\u5E78": [["x\xECng"]], "\u53F8": [["s\u012B"]], "\u97F6": [["sh\xE1o"]], "\u90DC": [["g\xE0o"]], "\u9ECE": [["l\xED"]], "\u84DF": [["j\xEC"]], "\u8584": [["b\xF3"]], "\u5370": [["y\xECn"]], "\u5BBF": [["s\xF9"]], "\u767D": [["b\xE1i"]], "\u6000": [["hu\xE1i"]], "\u84B2": [["p\xFA"]], "\u90B0": [["t\xE1i"]], "\u4ECE": [["c\xF3ng"]], "\u9102": [["\xE8"]], "\u7D22": [["su\u01D2"]], "\u54B8": [["xi\xE1n"]], "\u7C4D": [["j\xED"]], "\u8D56": [["l\xE0i"]], "\u5353": [["zhu\xF3"]], "\u853A": [["l\xECn"]], "\u5C60": [["t\xFA"]], "\u8499": [["m\xE9ng"]], "\u6C60": [["ch\xED"]], "\u4E54": [["qi\xE1o"]], "\u9634": [["y\u012Bn"]], "\u9B31": [["y\xF9"]], "\u80E5": [["x\u016B"]], "\u80FD": [["n\xE0i"]], "\u82CD": [["c\u0101ng"]], "\u53CC": [["shu\u0101ng"]], "\u95FB": [["w\xE9n"]], "\u8398": [["sh\u0113n"]], "\u515A": [["d\u01CEng"]], "\u7FDF": [["zh\xE1i"]], "\u8C2D": [["t\xE1n"]], "\u8D21": [["g\xF2ng"]], "\u52B3": [["l\xE1o"]], "\u9004": [["p\xE1ng"]], "\u59EC": [["j\u012B"]], "\u7533": [["sh\u0113n"]], "\u6276": [["f\xFA"]], "\u5835": [["d\u01D4"]], "\u5189": [["r\u01CEn"]], "\u5BB0": [["z\u01CEi"]], "\u90E6": [["l\xEC"]], "\u96CD": [["y\u014Dng"]], "\u90E4": [["x\xEC"]], "\u74A9": [["q\xFA"]], "\u6851": [["s\u0101ng"]], "\u6842": [["gu\xEC"]], "\u6FEE": [["p\xFA"]], "\u725B": [["ni\xFA"]], "\u5BFF": [["sh\xF2u"]], "\u901A": [["t\u014Dng"]], "\u8FB9": [["bi\u0101n"]], "\u6248": [["h\xF9"]], "\u71D5": [["y\u0101n"]], "\u5180": [["j\xEC"]], "\u90CF": [["ji\xE1"]], "\u6D66": [["p\u01D4"]], "\u5C1A": [["sh\xE0ng"]], "\u519C": [["n\xF3ng"]], "\u6E29": [["w\u0113n"]], "\u522B": [["bi\xE9"]], "\u5E84": [["zhu\u0101ng"]], "\u664F": [["y\xE0n"]], "\u67F4": [["ch\xE1i"]], "\u77BF": [["q\xFA"]], "\u960E": [["y\xE1n"]], "\u5145": [["ch\u014Dng"]], "\u6155": [["m\xF9"]], "\u8FDE": [["li\xE1n"]], "\u8339": [["r\xFA"]], "\u4E60": [["x\xED"]], "\u5BA6": [["hu\xE0n"]], "\u827E": [["\xE0i"]], "\u9C7C": [["y\xFA"]], "\u5BB9": [["r\xF3ng"]], "\u5411": [["xi\xE0ng"]], "\u53E4": [["g\u01D4"]], "\u6613": [["y\xEC"]], "\u614E": [["sh\xE8n"]], "\u6208": [["g\u0113"]], "\u5ED6": [["li\xE0o"]], "\u5EBE": [["y\u01D4"]], "\u7EC8": [["zh\u014Dng"]], "\u66A8": [["j\xEC"]], "\u5C45": [["j\u016B"]], "\u8861": [["h\xE9ng"]], "\u6B65": [["b\xF9"]], "\u90FD": [["d\u016B"]], "\u803F": [["g\u011Bng"]], "\u6EE1": [["m\u01CEn"]], "\u5F18": [["h\xF3ng"]], "\u5321": [["ku\u0101ng"]], "\u56FD": [["gu\xF3"]], "\u6587": [["w\xE9n"]], "\u5BC7": [["k\xF2u"]], "\u5E7F": [["gu\u01CEng"]], "\u7984": [["l\xF9"]], "\u9619": [["qu\u0113"]], "\u4E1C": [["d\u014Dng"]], "\u6B27": [["\u014Du"]], "\u6BB3": [["sh\u016B"]], "\u6C83": [["w\xF2"]], "\u5229": [["l\xEC"]], "\u851A": [["w\xE8i"]], "\u8D8A": [["yu\xE8"]], "\u5914": [["ku\xED"]], "\u9686": [["l\xF3ng"]], "\u5E08": [["sh\u012B"]], "\u5DE9": [["g\u01D2ng"]], "\u538D": [["sh\xE8"]], "\u8042": [["ni\xE8"]], "\u6641": [["ch\xE1o"]], "\u52FE": [["g\u014Du"]], "\u6556": [["\xE1o"]], "\u878D": [["r\xF3ng"]], "\u51B7": [["l\u011Bng"]], "\u8A3E": [["z\u01D0"]], "\u8F9B": [["x\u012Bn"]], "\u961A": [["k\xE0n"]], "\u90A3": [["n\u0101"]], "\u7B80": [["ji\u01CEn"]], "\u9976": [["r\xE1o"]], "\u7A7A": [["k\u014Dng"]], "\u66FE": [["z\u0113ng"]], "\u6BCD": [["m\u01D4"]], "\u6C99": [["sh\u0101"]], "\u4E5C": [["ni\xE8"]], "\u517B": [["y\u01CEng"]], "\u97A0": [["j\u016B"]], "\u987B": [["x\u016B"]], "\u4E30": [["f\u0113ng"]], "\u5DE2": [["ch\xE1o"]], "\u5173": [["gu\u0101n"]], "\u84AF": [["ku\u01CEi"]], "\u76F8": [["xi\xE0ng"]], "\u67E5": [["zh\u0101"]], "\u540E": [["h\xF2u"]], "\u8346": [["j\u012Bng"]], "\u7EA2": [["h\xF3ng"]], "\u6E38": [["y\xF3u"]], "\u7AFA": [["zh\xFA"]], "\u6743": [["qu\xE1n"]], "\u902F": [["l\xF9"]], "\u76D6": [["g\xE0i"]], "\u76CA": [["y\xEC"]], "\u6853": [["hu\xE1n"]], "\u516C": [["g\u014Dng"]], "\u725F": [["m\xF3u"]], "\u54C8": [["h\u01CE"]], "\u8A00": [["y\xE1n"]], "\u798F": [["f\xFA"]] }; var compound_surname = { "\u4E07\u4FDF": [["m\xF2"], ["q\xED"]], "\u4E0A\u5B98": [["sh\xE0ng"], ["gu\u0101n"]], "\u4E1C\u65B9": [["d\u014Dng"], ["f\u0101ng"]], "\u4E1C\u90ED": [["d\u014Dng"], ["gu\u014D"]], "\u4E1C\u95E8": [["d\u014Dng"], ["m\xE9n"]], "\u4E50\u6B63": [["yu\xE8"], ["zh\xE8ng"]], "\u4E93\u5B98": [["q\xED"], ["gu\u0101n"]], "\u4EC9\u7763": [["zh\u01CEng"], ["d\u016B"]], "\u4EE4\u72D0": [["l\xEDng"], ["h\xFA"]], "\u4EF2\u5B59": [["zh\xF2ng"], ["s\u016Bn"]], "\u516C\u51B6": [["g\u014Dng"], ["y\u011B"]], "\u516C\u5B59": [["g\u014Dng"], ["s\u016Bn"]], "\u516C\u7F8A": [["g\u014Dng"], ["y\xE1ng"]], "\u516C\u826F": [["g\u014Dng"], ["li\xE1ng"]], "\u516C\u897F": [["g\u014Dng"], ["x\u012B"]], "\u5355\u4E8E": [["ch\xE1n"], ["y\xFA"]], "\u5357\u5BAB": [["n\xE1n"], ["g\u014Dng"]], "\u5357\u95E8": [["n\xE1n"], ["m\xE9n"]], "\u53F8\u5BC7": [["s\u012B"], ["k\xF2u"]], "\u53F8\u5F92": [["s\u012B"], ["t\xFA"]], "\u53F8\u7A7A": [["s\u012B"], ["k\u014Dng"]], "\u53F8\u9A6C": [["s\u012B"], ["m\u01CE"]], "\u547C\u5EF6": [["h\u016B"], ["y\xE1n"]], "\u58E4\u9A77": [["r\u01CEng"], ["s\xEC"]], "\u590F\u4FAF": [["xi\xE0"], ["h\xF3u"]], "\u592A\u53D4": [["t\xE0i"], ["sh\u016B"]], "\u5939\u8C37": [["ji\xE1"], ["g\u01D4"]], "\u5B50\u8F66": [["z\u01D0"], ["j\u016B"]], "\u5B87\u6587": [["y\u01D4"], ["w\xE9n"]], "\u5B97\u653F": [["z\u014Dng"], ["zh\xE8ng"]], "\u5BB0\u7236": [["z\u01CEi"], ["f\u01D4"]], "\u5C09\u8FDF": [["y\xF9"], ["ch\xED"]], "\u5DE6\u4E18": [["zu\u01D2"], ["qi\u016B"]], "\u5DEB\u9A6C": [["w\u016B"], ["m\u01CE"]], "\u6155\u5BB9": [["m\xF9"], ["r\xF3ng"]], "\u62D3\u8DCB": [["tu\xF2"], ["b\xE1"]], "\u6881\u4E18": [["li\xE1ng"], ["qi\u016B"]], "\u6996\u6881": [["g\u01D4"], ["li\xE1ng"]], "\u6B27\u9633": [["\u014Du"], ["y\xE1ng"]], "\u6BB5\u5E72": [["du\xE0n"], ["g\u0101n"]], "\u6DF3\u4E8E": [["ch\xFAn"], ["y\xFA"]], "\u6F06\u96D5": [["q\u012B"], ["di\u0101o"]], "\u6FB9\u53F0": [["t\xE1n"], ["t\xE1i"]], "\u6FEE\u9633": [["p\xFA"], ["y\xE1ng"]], "\u7533\u5C60": [["sh\u0113n"], ["t\xFA"]], "\u767E\u91CC": [["b\u01CEi"], ["l\u01D0"]], "\u7687\u752B": [["hu\xE1ng"], ["p\u01D4"]], "\u7AEF\u6728": [["du\u0101n"], ["m\xF9"]], "\u7B2C\u4E94": [["d\xEC"], ["w\u01D4"]], "\u7F8A\u820C": [["y\xE1ng"], ["sh\xE9"]], "\u897F\u95E8": [["x\u012B"], ["m\xE9n"]], "\u8BF8\u845B": [["zh\u016B"], ["g\u011B"]], "\u8D6B\u8FDE": [["h\xE8"], ["li\xE1n"]], "\u8F69\u8F95": [["xu\u0101n"], ["yu\xE1n"]], "\u949F\u79BB": [["zh\u014Dng"], ["l\xED"]], "\u957F\u5B59": [["zh\u01CEng"], ["s\u016Bn"]], "\u95FB\u4EBA": [["w\xE9n"], ["r\xE9n"]], "\u95FE\u4E18": [["l\u01D8"], ["qi\u016B"]], "\u989B\u5B59": [["zhu\u0101n"], ["s\u016Bn"]], "\u9C9C\u4E8E": [["xi\u0101n"], ["y\xFA"]] }; var phoneticSymbol = { "\u0101": "a1", "\xE1": "a2", "\u01CE": "a3", "\xE0": "a4", "\u0113": "e1", "\xE9": "e2", "\u011B": "e3", "\xE8": "e4", "\u014D": "o1", "\xF3": "o2", "\u01D2": "o3", "\xF2": "o4", "\u012B": "i1", "\xED": "i2", "\u01D0": "i3", "\xEC": "i4", "\u016B": "u1", "\xFA": "u2", "\u01D4": "u3", "\xF9": "u4", "\xFC": "v0", "\u01D8": "v2", "\u01DA": "v3", "\u01DC": "v4", "\u0144": "n2", "\u0148": "n3", "\uE7C7": "m2" }; var util$1 = {}; function combo2array(a1, a2) { const result = []; if (!a1.length) { return a2; } if (!a2.length) { return a1; } for (let i2 = 0, l2 = a1.length; i2 < l2; i2++) { for (let j2 = 0, m2 = a2.length; j2 < m2; j2++) { result.push(a1[i2] + a2[j2]); } } return result; } function combo(arr) { if (arr.length === 0) { return []; } if (arr.length === 1) { return arr[0]; } let result = combo2array(arr[0], arr[1]); for (let i2 = 2, l2 = arr.length; i2 < l2; i2++) { result = combo2array(result, arr[i2]); } return result; } function compact2array(a1, a2) { if (!Array.isArray(a1) || !Array.isArray(a2)) { throw new Error("compact2array expect two array as parameters"); } if (!a1.length) { a1 = [""]; } if (!a2.length) { a2 = [""]; } const result = []; for (let i2 = 0, l2 = a1.length; i2 < l2; i2++) { for (let j2 = 0, m2 = a2.length; j2 < m2; j2++) { if (Array.isArray(a1[i2])) { result.push([...a1[i2], a2[j2]]); } else { result.push([a1[i2], a2[j2]]); } } } return result; } function compact(arr) { if (arr.length === 0) { return []; } if (arr.length === 1) { return [arr[0]]; } let result = compact2array(arr[0], arr[1]); for (let i2 = 2, l2 = arr.length; i2 < l2; ++i2) { result = compact2array(result, arr[i2]); } return result; } util$1.combo2array = combo2array; util$1.combo = combo; util$1.compact2array = compact2array; util$1.compact = compact; const assign = objectAssign; const SurnamePinyinData = surname; const CompoundSurnamePinyinData = compound_surname; const PINYIN_STYLE = { NORMAL: 0, TONE: 1, TONE2: 2, TO3NE: 5, INITIALS: 3, FIRST_LETTER: 4 }; const PINYIN_MODE = { NORMAL: 0, SURNAME: 1, PLACENAME: 2 }; const DEFAULT_OPTIONS = { mode: PINYIN_MODE.NORMAL, style: PINYIN_STYLE.TONE, segment: false, heteronym: false }; const INITIALS = "b,p,m,f,d,t,n,l,g,k,h,j,q,x,r,zh,ch,sh,z,c,s".split(","); const PHONETIC_SYMBOL = phoneticSymbol; const RE_PHONETIC_SYMBOL = new RegExp("([" + Object.keys(PHONETIC_SYMBOL).join("") + "])", "g"); const RE_TONE2 = /([aeoiuvnm])([0-4])$/; const util = util$1; function initials(pinyin2) { for (let i2 = 0, l2 = INITIALS.length; i2 < l2; i2++) { if (pinyin2.indexOf(INITIALS[i2]) === 0) { return INITIALS[i2]; } } return ""; } class Pinyin$1 { constructor(dict) { this._dict = dict; } convert(hans, options) { if (typeof hans !== "string") { return []; } options = assign({}, DEFAULT_OPTIONS, options); let pys = []; let nohans = ""; if (options.mode === PINYIN_MODE.SURNAME) { pys.push(this.surname_pinyin(hans, options)); } else { for (let i2 = 0, firstCharCode, words, l2 = hans.length; i2 < l2; i2++) { words = hans[i2]; firstCharCode = words.charCodeAt(0); if (this._dict[firstCharCode]) { if (nohans.length > 0) { pys.push([nohans]); nohans = ""; } pys.push(this.single_pinyin(words, options)); } else { nohans += words; } } } if (nohans.length > 0) { pys.push([nohans]); } Object.defineProperty(pys, "compact", { value: util.compact.bind(this, pys), enumerable: false, configurable: false }); return pys; } single_pinyin(han, options) { if (typeof han !== "string") { return []; } if (han.length !== 1) { return this.single_pinyin(han.charAt(0), options); } let hanCode = han.charCodeAt(0); if (!this._dict[hanCode]) { return [han]; } let pys = this._dict[hanCode].split(","); if (!options.heteronym) { return [Pinyin$1.toFixed(pys[0], options.style)]; } let py_cached = {}; let pinyins = []; for (let i2 = 0, py, l2 = pys.length; i2 < l2; i2++) { py = Pinyin$1.toFixed(pys[i2], options.style); if (py_cached.hasOwnProperty(py)) { continue; } py_cached[py] = py; pinyins.push(py); } return pinyins; } surname_pinyin(hans, options) { return this.compound_surname(hans, options); } compound_surname(hans, options) { let len = hans.length; let prefixIndex = 0; let result = []; function toFixed(item) { return item.map((ch2) => Pinyin$1.toFixed(ch2, options.style)); } for (let i2 = 0; i2 < len; i2++) { const twowords = hans.substring(i2, i2 + 2); if (CompoundSurnamePinyinData.hasOwnProperty(twowords)) { if (prefixIndex <= i2 - 1) { result = result.concat( this.single_surname( hans.substring(prefixIndex, i2), options ) ); } result = result.concat(CompoundSurnamePinyinData[twowords].map(toFixed)); i2 = i2 + 2; prefixIndex = i2; } } result = result.concat( this.single_surname( hans.substring(prefixIndex, len), options ) ); return result; } single_surname(hans, options) { let result = []; function toFixed(item) { return item.map((ch2) => Pinyin$1.toFixed(ch2, options.style)); } for (let i2 = 0, l2 = hans.length; i2 < l2; i2++) { const word = hans.charAt(i2); if (SurnamePinyinData.hasOwnProperty(word)) { result = result.concat(SurnamePinyinData[word].map(toFixed)); } else { result.push(this.single_pinyin(word, options)); } } return result; } static toFixed(pinyin2, style) { let tone = ""; let first_letter; let py; switch (style) { case PINYIN_STYLE.INITIALS: return initials(pinyin2); case PINYIN_STYLE.FIRST_LETTER: first_letter = pinyin2.charAt(0); if (PHONETIC_SYMBOL.hasOwnProperty(first_letter)) { first_letter = PHONETIC_SYMBOL[first_letter].charAt(0); } return first_letter; case PINYIN_STYLE.NORMAL: return pinyin2.replace(RE_PHONETIC_SYMBOL, function($0, $1_phonetic) { return PHONETIC_SYMBOL[$1_phonetic].replace(RE_TONE2, "$1"); }); case PINYIN_STYLE.TO3NE: return pinyin2.replace(RE_PHONETIC_SYMBOL, function($0, $1_phonetic) { return PHONETIC_SYMBOL[$1_phonetic]; }); case PINYIN_STYLE.TONE2: py = pinyin2.replace(RE_PHONETIC_SYMBOL, function($0, $1) { tone = PHONETIC_SYMBOL[$1].replace(RE_TONE2, "$2"); return PHONETIC_SYMBOL[$1].replace(RE_TONE2, "$1"); }); return py + tone; case PINYIN_STYLE.TONE: default: return pinyin2; } } compare(hanA, hanB) { const pinyinA = this.convert(hanA, DEFAULT_OPTIONS); const pinyinB = this.convert(hanB, DEFAULT_OPTIONS); return String(pinyinA).localeCompare(String(pinyinB)); } compact(arr) { return util.compact(arr); } static get STYLE_NORMAL() { return PINYIN_STYLE.NORMAL; } static get STYLE_TONE() { return PINYIN_STYLE.TONE; } static get STYLE_TONE2() { return PINYIN_STYLE.TONE2; } static get STYLE_TO3NE() { return PINYIN_STYLE.TO3NE; } static get STYLE_INITIALS() { return PINYIN_STYLE.INITIALS; } static get STYLE_FIRST_LETTER() { return PINYIN_STYLE.FIRST_LETTER; } static get MODE_NORMAL() { return PINYIN_MODE.NORMAL; } static get MODE_SURNAME() { return PINYIN_MODE.SURNAME; } static get MODE_PLACENAME() { return PINYIN_MODE.PLACENAME; } static get DEFAULT_OPTIONS() { return DEFAULT_OPTIONS; } } var pinyin$1 = Pinyin$1; function buildPinyinCache(dict_combo) { let hans; let uncomboed = {}; for (let py in dict_combo) { hans = dict_combo[py]; for (let i2 = 0, han, l2 = hans.length; i2 < l2; i2++) { han = hans.charCodeAt(i2); if (!uncomboed.hasOwnProperty(han)) { uncomboed[han] = py; } else { uncomboed[han] += "," + py; } } } return uncomboed; } const PINYIN_DICT = buildPinyinCache(dictZiWeb); const Pinyin = pinyin$1; const pinyin = new Pinyin(PINYIN_DICT); webPinyin.exports = pinyin.convert.bind(pinyin); webPinyin.exports.compare = pinyin.compare.bind(pinyin); webPinyin.exports.compact = pinyin.compact.bind(pinyin); webPinyin.exports.STYLE_NORMAL = Pinyin.STYLE_NORMAL; webPinyin.exports.STYLE_TONE = Pinyin.STYLE_TONE; webPinyin.exports.STYLE_TONE2 = Pinyin.STYLE_TONE2; webPinyin.exports.STYLE_TO3NE = Pinyin.STYLE_TO3NE; webPinyin.exports.STYLE_INITIALS = Pinyin.STYLE_INITIALS; webPinyin.exports.STYLE_FIRST_LETTER = Pinyin.STYLE_FIRST_LETTER; let a = [["\0", "", "", "", "", "", "", "\x07", "\b", " ", "\n", "\v", "\f", "\r", "", "", "", "", "", "", "", "", "", "", "", "", "", "\x1B", "", "", "", "", " ", "!", '"', "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "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", "[", "\\", "]", "^", "_", "`", "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", "{", "|", "}", "~", "\x7F", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , " ", "!", "C/", "PS", "$?", "Y=", "|", "SS", '"', "(c)", "a", "<<", "!", , "(r)", "-", "deg", "+-", "2", "3", "'", "u", "P", "*", ",", "1", "o", ">>", "1/4", "1/2", "3/4", "?", "A", "A", "A", "A", "A", "A", "AE", "C", "E", "E", "E", "E", "I", "I", "I", "I", "D", "N", "O", "O", "O", "O", "O", "x", "O", "U", "U", "U", "U", "U", "Th", "ss", "a", "a", "a", "a", "a", "a", "ae", "c", "e", "e", "e", "e", "i", "i", "i", "i", "d", "n", "o", "o", "o", "o", "o", "/", "o", "u", "u", "u", "u", "y", "th", "y"], ["A", "a", "A", "a", "A", "a", "C", "c", "C", "c", "C", "c", "C", "c", "D", "d", "D", "d", "E", "e", "E", "e", "E", "e", "E", "e", "E", "e", "G", "g", "G", "g", "G", "g", "G", "g", "H", "h", "H", "h", "I", "i", "I", "i", "I", "i", "I", "i", "I", "i", "IJ", "ij", "J", "j", "K", "k", "k", "L", "l", "L", "l", "L", "l", "L", "l", "L", "l", "N", "n", "N", "n", "N", "n", "'n", "NG", "ng", "O", "o", "O", "o", "O", "o", "OE", "oe", "R", "r", "R", "r", "R", "r", "S", "s", "S", "s", "S", "s", "S", "s", "T", "t", "T", "t", "T", "t", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "W", "w", "Y", "y", "Y", "Z", "z", "Z", "z", "Z", "z", "s", "b", "B", "B", "b", "6", "6", "O", "C", "c", "D", "D", "D", "d", "d", "3", "@", "E", "F", "f", "G", "G", "hv", "I", "I", "K", "k", "l", "l", "W", "N", "n", "O", "O", "o", "OI", "oi", "P", "p", "YR", "2", "2", "SH", "sh", "t", "T", "t", "T", "U", "u", "Y", "V", "Y", "y", "Z", "z", "ZH", "ZH", "zh", "zh", "2", "5", "5", "ts", "w", "|", "||", "|=", "!", "DZ", "Dz", "dz", "LJ", "Lj", "lj", "NJ", "Nj", "nj", "A", "a", "I", "i", "O", "o", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "@", "A", "a", "A", "a", "AE", "ae", "G", "g", "G", "g", "K", "k", "O", "o", "O", "o", "ZH", "zh", "j", "DZ", "D", "dz", "G", "g", "HV", "W", "N", "n", "A", "a", "AE", "ae", "O", "o"], ["A", "a", "A", "a", "E", "e", "E", "e", "I", "i", "I", "i", "O", "o", "O", "o", "R", "r", "R", "r", "U", "u", "U", "u", "S", "s", "T", "t", "Y", "y", "H", "h", "N", "d", "OU", "ou", "Z", "z", "A", "a", "E", "e", "O", "o", "O", "o", "O", "o", "O", "o", "Y", "y", "l", "n", "t", "j", "db", "qp", "A", "C", "c", "L", "T", "s", "z", "?", "?", "B", "U", "V", "E", "e", "J", "j", "Q", "q", "R", "r", "Y", "y", "a", "a", "a", "b", "o", "c", "d", "d", "e", "@", "@", "e", "e", "e", "e", "j", "g", "g", "g", "g", "u", "Y", "h", "h", "i", "i", "I", "l", "l", "l", "lZ", "W", "W", "m", "n", "n", "n", "o", "OE", "O", "F", "R", "R", "R", "R", "r", "r", "R", "R", "R", "s", "S", "j", "S", "S", "t", "t", "U", "U", "v", "^", "W", "Y", "Y", "z", "z", "Z", "Z", "?", "?", "?", "C", "@", "B", "E", "G", "H", "j", "k", "L", "q", "?", "?", "dz", "dZ", "dz", "ts", "tS", "tC", "fN", "ls", "lz", "WW", "]]", "h", "h", "k", "h", "j", "r", "r", "r", "r", "w", "y", "'", '"', "`", "'", "`", "`", "'", "?", "?", "<", ">", "^", "V", "^", "V", "'", "-", "/", "\\", ",", "_", "\\", "/", ":", ".", "`", "'", "^", "V", "+", "-", "V", ".", "@", ",", "~", '"', "R", "X", "G", "l", "s", "x", "?", , , , , , , , "V", "=", '"'], [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "'", ",", , , , , , , , , "?", , , , , , , , "A", ";", "E", "I", "I", , "O", , "U", "O", "I", "A", "V", "G", "D", "E", "Z", "I", "Th", "I", "K", "L", "M", "N", "X", "O", "P", "R", , "S", "T", "Y", "F", "H", "Ps", "O", "I", "Y", "a", "e", "i", "i", "y", "a", "v", "g", "d", "e", "z", "i", "th", "i", "k", "l", "m", "n", "x", "o", "p", "r", "s", "s", "t", "y", "f", "h", "ps", "o", "i", "y", "o", "y", "o", , "b", "th", "U", "U", "U", "ph", "p", "&", , , "St", "st", "W", "w", "Q", "q", "Sp", "sp", "Sh", "sh", "F", "f", "Kh", "kh", "H", "h", "G", "g", "CH", "ch", "Ti", "ti", "k", "r", "c", "j"], ["Jo", "Yo", "Dj", "Gj", "Ie", "Dz", "I", "Yi", "J", "Lj", "Nj", "Tsh", "Kj", "I", "U", "Dzh", "A", "B", "V", "G", "D", "E", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "Ch", "Sh", "Shch", , "Y", , "E", "Yu", "Ya", "a", "b", "v", "g", "d", "e", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "shch", , "y", , "e", "yu", "ya", "je", "yo", "dj", "gj", "ie", "dz", "i", "yi", "j", "lj", "nj", "tsh", "kj", "i", "u", "dzh", "O", "o", "E", "e", "Ie", "ie", "E", "e", "Ie", "ie", "O", "o", "Io", "io", "Ks", "ks", "Ps", "ps", "F", "f", "Y", "y", "Y", "y", "u", "u", "O", "o", "O", "o", "Ot", "ot", "Q", "q", "*1000*", , , , , , "*100.000*", "*1.000.000*", , , '"', '"', "R'", "r'", "G'", "g'", "G'", "g'", "G'", "g'", "Zh'", "zh'", "Z'", "z'", "K'", "k'", "K'", "k'", "K'", "k'", "K'", "k'", "N'", "n'", "Ng", "ng", "P'", "p'", "Kh", "kh", "S'", "s'", "T'", "t'", "U", "u", "U'", "u'", "Kh'", "kh'", "Tts", "tts", "Ch'", "ch'", "Ch'", "ch'", "H", "h", "Ch", "ch", "Ch'", "ch'", "`", "Zh", "zh", "K'", "k'", , , "N'", "n'", , , "Ch", "ch", , , , "a", "a", "A", "a", "Ae", "ae", "Ie", "ie", "@", "@", "@", "@", "Zh", "zh", "Z", "z", "Dz", "dz", "I", "i", "I", "i", "O", "o", "O", "o", "O", "o", "E", "e", "U", "u", "U", "u", "U", "u", "Ch", "ch", , , "Y", "y"], [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "A", "B", "G", "D", "E", "Z", "E", "E", "T`", "Zh", "I", "L", "Kh", "Ts", "K", "H", "Dz", "Gh", "Ch", "M", "Y", "N", "Sh", "O", "Ch`", "P", "J", "Rh", "S", "V", "T", "R", "Ts`", "W", "P`", "K`", "O", "F", , , "<", "'", "/", "!", ",", "?", ".", , "a", "b", "g", "d", "e", "z", "e", "e", "t`", "zh", "i", "l", "kh", "ts", "k", "h", "dz", "gh", "ch", "m", "y", "n", "sh", "o", "ch`", "p", "j", "rh", "s", "v", "t", "r", "ts`", "w", "p`", "k`", "o", "f", "ew", , ".", "-", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "@", "e", "a", "o", "i", "e", "e", "a", "a", "o", , "u", "'", , , , , , , ":", , , , , , , , , , , , , , "b", "g", "d", "h", "v", "z", "kh", "t", "y", "k", "k", "l", "m", "m", "n", "n", "s", "`", "p", "p", "ts", "ts", "q", "r", "sh", "t", , , , , , "V", "oy", "i", "'", '"'], [, , , , , , , , , , , , ",", , , , , , , , , , , , , , , ";", , , , "?", , , "a", "'", "w'", , "y'", , "b", "@", "t", "th", "j", "H", "kh", "d", "dh", "r", "z", "s", "sh", "S", "D", "T", "Z", "aa", "G", , , , , , , "f", "q", "k", "l", "m", "n", "h", "w", "~", "y", "an", "un", "in", "a", "u", "i", "W", , , "'", "'", , , , , , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "%", ".", ",", "*", , , , "'", "'", "'", , "'", "'w", "'u", "'y", "tt", "tth", "b", "t", "T", "p", "th", "bh", "'h", "H", "ny", "dy", "H", "ch", "cch", "dd", "D", "D", "Dt", "dh", "ddh", "d", "D", "D", "rr", "R", "R", "R", "R", "R", "R", "j", "R", "S", "S", "S", "S", "S", "T", "GH", "F", "F", "F", "v", "f", "ph", "Q", "Q", "kh", "k", "K", "K", "ng", "K", "g", "G", "N", "G", "G", "G", "L", "L", "L", "L", "N", "N", "N", "N", "N", "h", "Ch", "hy", "h", "H", "@", "W", "oe", "oe", "u", "yu", "yu", "W", "v", "y", "Y", "Y", "W", , , "y", "y'", ".", "ae", , , , , , , , "@", "#", , , , , , , , , , , "^", , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "Sh", "D", "Gh", "&", "+m"], ["//", "/", ",", "!", "!", "-", ",", ",", ";", "?", "~", "{", "}", "*", , , "'", , "b", "g", "g", "d", "d", "h", "w", "z", "H", "t", "t", "y", "yh", "k", "l", "m", "n", "s", "s", "`", "p", "p", "S", "q", "r", "sh", "t", , , , "a", "a", "a", "A", "A", "A", "e", "e", "e", "E", "i", "i", "u", "u", "u", "o", , "`", "'", , , "X", "Q", "@", "@", "|", "+", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "h", "sh", "n", "r", "b", "L", "k", "'", "v", "m", "f", "dh", "th", "l", "g", "ny", "s", "d", "z", "t", "y", "p", "j", "ch", "tt", "hh", "kh", "th", "z", "sh", "s", "d", "t", "z", "`", "gh", "q", "w", "a", "aa", "i", "ee", "u", "oo", "e", "ey", "o", "oa"], [], [, "N", "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", "L", "eN", "e", "e", "ai", "oN", "o", "o", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", "nnn", "p", "ph", "b", "bh", "m", "y", "r", "rr", "l", "l", "lll", "v", "sh", "ss", "s", "h", , , "'", "'", "aa", "i", "ii", "u", "uu", "R", "RR", "eN", "e", "e", "ai", "oN", "o", "o", "au", , , , "AUM", "'", "'", "`", "'", , , , "q", "khh", "ghh", "z", "dddh", "rh", "f", "yy", "RR", "LL", "L", "LL", " / ", " // ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", , , , , , , , , , , , , , , , , "N", "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", "RR", , , "e", "ai", , , "o", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bh", "m", "y", "r", , "l", , , , "sh", "ss", "s", "h", , , "'", , "aa", "i", "ii", "u", "uu", "R", "RR", , , "e", "ai", , , "o", "au", , , , , , , , , , , "+", , , , , "rr", "rh", , "yy", "RR", "LL", "L", "LL", , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "r'", "r`", "Rs", "Rs", "1/", "2/", "3/", "4/", " 1 - 1/", "/16"], [, , "N", , , "a", "aa", "i", "ii", "u", "uu", , , , , "ee", "ai", , , "oo", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bb", "m", "y", "r", , "l", "ll", , "v", "sh", , "s", "h", , , "'", , "aa", "i", "ii", "u", "uu", , , , , "ee", "ai", , , "oo", "au", , , , , , , , , , , , , "khh", "ghh", "z", "rr", , "f", , , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "N", "H", , , "G.E.O.", , , , , , , , , , , , , "N", "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", , "eN", , "e", "ai", "oN", , "o", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bh", "m", "ya", "r", , "l", "ll", , "v", "sh", "ss", "s", "h", , , "'", "'", "aa", "i", "ii", "u", "uu", "R", "RR", "eN", , "e", "ai", "oN", , "o", "au", , , , "AUM", , , , , , , , , , , , , , , , "RR", , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], [, "N", "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", "L", , , "e", "ai", , , "o", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bh", "m", "y", "r", , "l", "ll", , , "sh", "ss", "s", "h", , , "'", "'", "aa", "i", "ii", "u", "uu", "R", , , , "e", "ai", , , "o", "au", , , , , , , , , , "+", "+", , , , , "rr", "rh", , "yy", "RR", "LL", , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", , , , , , , , , , , , , , , , , , , "N", "H", , "a", "aa", "i", "ii", "u", "uu", , , , "e", "ee", "ai", , "o", "oo", "au", "k", , , , "ng", "c", , "j", , "ny", "tt", , , , "nn", "t", , , , "n", "nnn", "p", , , , "m", "y", "r", "rr", "l", "ll", "lll", "v", , "ss", "s", "h", , , , , "aa", "i", "ii", "u", "uu", , , , "e", "ee", "ai", , "o", "oo", "au", , , , , , , , , , , "+", , , , , , , , , , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+10+", "+100+", "+1000+"], [, "N", "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", "L", , "e", "ee", "ai", , "o", "oo", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bh", "m", "y", "r", "rr", "l", "ll", , "v", "sh", "ss", "s", "h", , , , , "aa", "i", "ii", "u", "uu", "R", "RR", , "e", "ee", "ai", , "o", "oo", "au", , , , , , , , , "+", "+", , , , , , , , , , "RR", "LL", , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", , , , , , , , , , , , , , , , , , , "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", "L", , "e", "ee", "ai", , "o", "oo", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bh", "m", "y", "r", "rr", "l", "ll", , "v", "sh", "ss", "s", "h", , , , , "aa", "i", "ii", "u", "uu", "R", "RR", , "e", "ee", "ai", , "o", "oo", "au", , , , , , , , , "+", "+", , , , , , , , "lll", , "RR", "LL", , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], [, , "N", "H", , "a", "aa", "i", "ii", "u", "uu", "R", "L", , "e", "ee", "ai", , "o", "oo", "au", "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", , "p", "ph", "b", "bh", "m", "y", "r", "rr", "l", "ll", "lll", "v", "sh", "ss", "s", "h", , , , , "aa", "i", "ii", "u", "uu", "R", , , "e", "ee", "ai", , "o", "oo", "au", , , , , , , , , , , "+", , , , , , , , , "RR", "LL", , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", , , , , , , , , , , , , , , , , , , "N", "H", , "a", "aa", "ae", "aae", "i", "ii", "u", "uu", "R", "RR", "L", "LL", "e", "ee", "ai", "o", "oo", "au", , , , "k", "kh", "g", "gh", "ng", "nng", "c", "ch", "j", "jh", "ny", "jny", "nyj", "tt", "tth", "dd", "ddh", "nn", "nndd", "t", "th", "d", "dh", "n", , "nd", "p", "ph", "b", "bh", "m", "mb", "y", "r", , "l", , , "v", "sh", "ss", "s", "h", "ll", "f", , , , , , , , , "aa", "ae", "aae", "i", "ii", "u", , "uu", , "R", "e", "ee", "ai", "o", "oo", "au", "L", , , , , , , , , , , , , , , , , , , "RR", "LL", " . "], [, "k", "kh", "kh", "kh", "kh", "kh", "ng", "cch", "ch", "ch", "ch", "ch", "y", "d", "t", "th", "th", "th", "n", "d", "t", "th", "th", "th", "n", "b", "p", "ph", "f", "ph", "f", "ph", "m", "y", "r", "R", "l", "L", "w", "s", "s", "s", "h", "l", "`", "h", "~", "a", "a", "aa", "am", "i", "ii", "ue", "uue", "u", "uu", "'", , , , , "Bh.", "e", "ae", "o", "ai", "ai", "ao", "+", , , , , , , "M", , " * ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " // ", " /// ", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "k", "kh", , "kh", , , "ng", "ch", , "s", , , "ny", , , , , , , "d", "h", "th", "th", , "n", "b", "p", "ph", "f", "ph", "f", , "m", "y", "r", , "l", , "w", , , "s", "h", , "`", , "~", "a", , "aa", "am", "i", "ii", "y", "yy", "u", "uu", , "o", "l", "ny", , , "e", "ei", "o", "ay", "ai", , "+", , , , , , , "M", , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", , , "hn", "hm"], ["AUM", , , , , , , , " // ", " * ", , "-", " / ", " / ", " // ", " -/ ", " +/ ", " X/ ", " /XX/ ", " /X/ ", ",", , , , , , , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".5", "1.5", "2.5", "3.5", "4.5", "5.5", "6.5", "7.5", "8.5", "-.5", "+", "*", "^", "_", , "~", , "]", "[[", "]]", , , "k", "kh", "g", "gh", "ng", "c", "ch", "j", , "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "ts", "tsh", "dz", "dzh", "w", "zh", "z", "'", "y", "r", "l", "sh", "ssh", "s", "h", "a", "kss", "r", , , , , , , "aa", "i", "ii", "u", "uu", "R", "RR", "L", "LL", "e", "ee", "o", "oo", "M", "H", "i", "ii", , , , , , , , , , , , , , , "k", "kh", "g", "gh", "ng", "c", "ch", "j", , "ny", "tt", "tth", "dd", "ddh", "nn", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "ts", "tsh", "dz", "dzh", "w", "zh", "z", "'", "y", "r", "l", "sh", "ss", "s", "h", "a", "kss", "w", "y", "r", , "X", " :X: ", " /O/ ", " /o/ ", " \\o\\ ", " (O) "], ["k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "nny", "tt", "tth", "dd", "ddh", "nn", "tt", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "y", "r", "l", "w", "s", "h", "ll", "a", , "i", "ii", "u", "uu", "e", , "o", "au", , "aa", "i", "ii", "u", "uu", "e", "ai", , , , "N", "'", ":", , , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " / ", " // ", "n*", "r*", "l*", "e*", "sh", "ss", "R", "RR", "L", "LL", "R", "RR", "L", "LL", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "A", "B", "G", "D", "E", "V", "Z", "T`", "I", "K", "L", "M", "N", "O", "P", "Zh", "R", "S", "T", "U", "P`", "K`", "G'", "Q", "Sh", "Ch`", "C`", "Z'", "C", "Ch", "X", "J", "H", "E", "Y", "W", "Xh", "OE", , , , , , , , , , , "a", "b", "g", "d", "e", "v", "z", "t`", "i", "k", "l", "m", "n", "o", "p", "zh", "r", "s", "t", "u", "p`", "k`", "g'", "q", "sh", "ch`", "c`", "z'", "c", "ch", "x", "j", "h", "e", "y", "w", "xh", "oe", "f", , , , , " // "], ["g", "gg", "n", "d", "dd", "r", "m", "b", "bb", "s", "ss", , "j", "jj", "c", "k", "t", "p", "h", "ng", "nn", "nd", "nb", "dg", "rn", "rr", "rh", "rN", "mb", "mN", "bg", "bn", , "bs", "bsg", "bst", "bsb", "bss", "bsj", "bj", "bc", "bt", "bp", "bN", "bbN", "sg", "sn", "sd", "sr", "sm", "sb", "sbg", "sss", "s", "sj", "sc", "sk", "st", "sp", "sh", , , , , "Z", "g", "d", "m", "b", "s", "Z", , "j", "c", "t", "p", "N", "j", , , , , "ck", "ch", , , "pb", "pN", "hh", "Q", , , , , , , , "a", "ae", "ya", "yae", "eo", "e", "yeo", "ye", "o", "wa", "wae", "oe", "yo", "u", "weo", "we", "wi", "yu", "eu", "yi", "i", "a-o", "a-u", "ya-o", "ya-yo", "eo-o", "eo-u", "eo-eu", "yeo-o", "yeo-u", "o-eo", "o-e", "o-ye", "o-o", "o-u", "yo-ya", "yo-yae", "yo-yeo", "yo-o", "yo-i", "u-a", "u-ae", "u-eo-eu", "u-ye", "u-u", "yu-a", "yu-eo", "yu-e", "yu-yeo", "yu-ye", "yu-u", "yu-i", "eu-u", "eu-eu", "yi-u", "i-a", "i-ya", "i-o", "i-u", "i-eu", "i-U", "U", "U-eo", "U-u", "U-i", "UU", , , , , , "g", "gg", "gs", "n", "nj", "nh", "d", "l", "lg", "lm", "lb", "ls", "lt", "lp", "lh", "m", "b", "bs", "s", "ss", "ng", "j", "c", "k", "t", "p", "h", "gl", "gsg", "ng", "nd", "ns", "nZ", "nt", "dg", "tl", "lgs", "ln", "ld", "lth", "ll", "lmg", "lms", "lbs", "lbh", "rNp", "lss", "lZ", "lk", "lQ", "mg", "ml", "mb", "ms", "mss", "mZ", "mc", "mh", "mN", "bl", "bp", "ph", "pN", "sg", "sd", "sl", "sb", "Z", "g", "ss", , "kh", "N", "Ns", "NZ", "pb", "pN", "hn", "hl", "hm", "hb", "Q"], ["ha", "hu", "hi", "haa", "hee", "he", "ho", , "la", "lu", "li", "laa", "lee", "le", "lo", "lwa", "hha", "hhu", "hhi", "hhaa", "hhee", "hhe", "hho", "hhwa", "ma", "mu", "mi", "maa", "mee", "me", "mo", "mwa", "sza", "szu", "szi", "szaa", "szee", "sze", "szo", "szwa", "ra", "ru", "ri", "raa", "ree", "re", "ro", "rwa", "sa", "su", "si", "saa", "see", "se", "so", "swa", "sha", "shu", "shi", "shaa", "shee", "she", "sho", "shwa", "qa", "qu", "qi", "qaa", "qee", "qe", "qo", , "qwa", , "qwi", "qwaa", "qwee", "qwe", , , "qha", "qhu", "qhi", "qhaa", "qhee", "qhe", "qho", , "qhwa", , "qhwi", "qhwaa", "qhwee", "qhwe", , , "ba", "bu", "bi", "baa", "bee", "be", "bo", "bwa", "va", "vu", "vi", "vaa", "vee", "ve", "vo", "vwa", "ta", "tu", "ti", "taa", "tee", "te", "to", "twa", "ca", "cu", "ci", "caa", "cee", "ce", "co", "cwa", "xa", "xu", "xi", "xaa", "xee", "xe", "xo", , "xwa", , "xwi", "xwaa", "xwee", "xwe", , , "na", "nu", "ni", "naa", "nee", "ne", "no", "nwa", "nya", "nyu", "nyi", "nyaa", "nyee", "nye", "nyo", "nywa", "'a", "'u", , "'aa", "'ee", "'e", "'o", "'wa", "ka", "ku", "ki", "kaa", "kee", "ke", "ko", , "kwa", , "kwi", "kwaa", "kwee", "kwe", , , "kxa", "kxu", "kxi", "kxaa", "kxee", "kxe", "kxo", , "kxwa", , "kxwi", "kxwaa", "kxwee", "kxwe", , , "wa", "wu", "wi", "waa", "wee", "we", "wo", , "`a", "`u", "`i", "`aa", "`ee", "`e", "`o", , "za", "zu", "zi", "zaa", "zee", "ze", "zo", "zwa", "zha", "zhu", "zhi", "zhaa", "zhee", "zhe", "zho", "zhwa", "ya", "yu", "yi", "yaa", "yee", "ye", "yo", , "da", "du", "di", "daa", "dee", "de", "do", "dwa", "dda", "ddu", "ddi", "ddaa", "ddee", "dde", "ddo", "ddwa"], ["ja", "ju", "ji", "jaa", "jee", "je", "jo", "jwa", "ga", "gu", "gi", "gaa", "gee", "ge", "go", , "gwa", , "gwi", "gwaa", "gwee", "gwe", , , "gga", "ggu", "ggi", "ggaa", "ggee", "gge", "ggo", , "tha", "thu", "thi", "thaa", "thee", "the", "tho", "thwa", "cha", "chu", "chi", "chaa", "chee", "che", "cho", "chwa", "pha", "phu", "phi", "phaa", "phee", "phe", "pho", "phwa", "tsa", "tsu", "tsi", "tsaa", "tsee", "tse", "tso", "tswa", "tza", "tzu", "tzi", "tzaa", "tzee", "tze", "tzo", , "fa", "fu", "fi", "faa", "fee", "fe", "fo", "fwa", "pa", "pu", "pi", "paa", "pee", "pe", "po", "pwa", "rya", "mya", "fya", , , , , , , " ", ".", ",", ";", ":", ":: ", "?", "//", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10+", "20+", "30+", "40+", "50+", "60+", "70+", "80+", "90+", "100+", "10,000+", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "a", "e", "i", "o", "u", "v", "ga", "ka", "ge", "gi", "go", "gu", "gv", "ha", "he", "hi", "ho", "hu", "hv", "la", "le", "li", "lo", "lu", "lv", "ma", "me", "mi", "mo", "mu", "na", "hna", "nah", "ne", "ni", "no", "nu", "nv", "qua", "que", "qui", "quo", "quu", "quv", "sa", "s", "se", "si", "so", "su", "sv", "da", "ta", "de", "te", "di", "ti", "do", "du", "dv", "dla", "tla", "tle", "tli", "tlo", "tlu", "tlv", "tsa", "tse", "tsi", "tso", "tsu", "tsv", "wa", "we", "wi", "wo", "wu", "wv", "ya", "ye", "yi", "yo", "yu", "yv"], [, "ai", "aai", "i", "ii", "u", "uu", "oo", "ee", "i", "a", "aa", "we", "we", "wi", "wi", "wii", "wii", "wo", "wo", "woo", "woo", "woo", "wa", "wa", "waa", "waa", "waa", "ai", "w", "'", "t", "k", "sh", "s", "n", "w", "n", , "w", "c", "?", "l", "en", "in", "on", "an", "pai", "paai", "pi", "pii", "pu", "puu", "poo", "hee", "hi", "pa", "paa", "pwe", "pwe", "pwi", "pwi", "pwii", "pwii", "pwo", "pwo", "pwoo", "pwoo", "pwa", "pwa", "pwaa", "pwaa", "pwaa", "p", "p", "h", "tai", "taai", "ti", "tii", "tu", "tuu", "too", "dee", "di", "ta", "taa", "twe", "twe", "twi", "twi", "twii", "twii", "two", "two", "twoo", "twoo", "twa", "twa", "twaa", "twaa", "twaa", "t", "tte", "tti", "tto", "tta", "kai", "kaai", "ki", "kii", "ku", "kuu", "koo", "ka", "kaa", "kwe", "kwe", "kwi", "kwi", "kwii", "kwii", "kwo", "kwo", "kwoo", "kwoo", "kwa", "kwa", "kwaa", "kwaa", "kwaa", "k", "kw", "keh", "kih", "koh", "kah", "gai", "caai", "gi", "gii", "gu", "guu", "coo", "ga", "gaa", "cwe", "cwe", "cwi", "cwi", "cwii", "cwii", "cwo", "cwo", "cwoo", "cwoo", "cwa", "cwa", "cwaa", "cwaa", "cwaa", "g", "th", "mai", "maai", "mi", "mii", "mu", "muu", "moo", "ma", "maa", "mwe", "mwe", "mwi", "mwi", "mwii", "mwii", "mwo", "mwo", "mwoo", "mwoo", "mwa", "mwa", "mwaa", "mwaa", "mwaa", "m", "m", "mh", "m", "m", "nai", "naai", "ni", "nii", "nu", "nuu", "noo", "na", "naa", "nwe", "nwe", "nwa", "nwa", "nwaa", "nwaa", "nwaa", "n", "ng", "nh", "lai", "laai", "li", "lii", "lu", "luu", "loo", "la", "laa", "lwe", "lwe", "lwi", "lwi", "lwii", "lwii", "lwo", "lwo", "lwoo", "lwoo", "lwa", "lwa", "lwaa", "lwaa", "l", "l", "l", "sai", "saai", "si", "sii", "su", "suu", "soo", "sa", "saa", "swe", "swe", "swi", "swi", "swii", "swii", "swo", "swo", "swoo", "swoo"], ["swa", "swa", "swaa", "swaa", "swaa", "s", "s", "sw", "s", "sk", "skw", "sW", "spwa", "stwa", "skwa", "scwa", "she", "shi", "shii", "sho", "shoo", "sha", "shaa", "shwe", "shwe", "shwi", "shwi", "shwii", "shwii", "shwo", "shwo", "shwoo", "shwoo", "shwa", "shwa", "shwaa", "shwaa", "sh", "jai", "yaai", "ji", "jii", "ju", "juu", "yoo", "ja", "jaa", "ywe", "ywe", "ywi", "ywi", "ywii", "ywii", "ywo", "ywo", "ywoo", "ywoo", "ywa", "ywa", "ywaa", "ywaa", "ywaa", "j", "y", "y", "yi", "re", "rai", "le", "raai", "ri", "rii", "ru", "ruu", "lo", "ra", "raa", "la", "rwaa", "rwaa", "r", "r", "r", "vai", "faai", "vi", "vii", "vu", "vuu", "va", "vaa", "fwaa", "fwaa", "v", "the", "the", "thi", "thi", "thii", "thii", "tho", "thoo", "tha", "thaa", "thwaa", "thwaa", "th", "tthe", "tthi", "ttho", "ttha", "tth", "tye", "tyi", "tyo", "tya", "he", "hi", "hii", "ho", "hoo", "ha", "haa", "h", "h", "hk", "qaai", "qi", "qii", "qu", "quu", "qa", "qaa", "q", "tlhe", "tlhi", "tlho", "tlha", "re", "ri", "ro", "ra", "ngaai", "ngi", "ngii", "ngu", "nguu", "nga", "ngaa", "ng", "nng", "she", "shi", "sho", "sha", "the", "thi", "tho", "tha", "th", "lhi", "lhii", "lho", "lhoo", "lha", "lhaa", "lh", "the", "thi", "thii", "tho", "thoo", "tha", "thaa", "th", "b", "e", "i", "o", "a", "we", "wi", "wo", "wa", "ne", "ni", "no", "na", "ke", "ki", "ko", "ka", "he", "hi", "ho", "ha", "ghu", "gho", "ghe", "ghee", "ghi", "gha", "ru", "ro", "re", "ree", "ri", "ra", "wu", "wo", "we", "wee", "wi", "wa", "hwu", "hwo", "hwe", "hwee", "hwi", "hwa", "thu", "tho", "the", "thee", "thi", "tha", "ttu", "tto", "tte", "ttee", "tti", "tta", "pu", "po", "pe", "pee", "pi", "pa", "p", "gu", "go", "ge", "gee", "gi", "ga", "khu", "kho", "khe", "khee", "khi", "kha", "kku", "kko", "kke", "kkee", "kki"], ["kka", "kk", "nu", "no", "ne", "nee", "ni", "na", "mu", "mo", "me", "mee", "mi", "ma", "yu", "yo", "ye", "yee", "yi", "ya", "ju", "ju", "jo", "je", "jee", "ji", "ji", "ja", "jju", "jjo", "jje", "jjee", "jji", "jja", "lu", "lo", "le", "lee", "li", "la", "dlu", "dlo", "dle", "dlee", "dli", "dla", "lhu", "lho", "lhe", "lhee", "lhi", "lha", "tlhu", "tlho", "tlhe", "tlhee", "tlhi", "tlha", "tlu", "tlo", "tle", "tlee", "tli", "tla", "zu", "zo", "ze", "zee", "zi", "za", "z", "z", "dzu", "dzo", "dze", "dzee", "dzi", "dza", "su", "so", "se", "see", "si", "sa", "shu", "sho", "she", "shee", "shi", "sha", "sh", "tsu", "tso", "tse", "tsee", "tsi", "tsa", "chu", "cho", "che", "chee", "chi", "cha", "ttsu", "ttso", "ttse", "ttsee", "ttsi", "ttsa", "X", ".", "qai", "ngai", "nngi", "nngii", "nngo", "nngoo", "nnga", "nngaa", , , , , , , , , , " ", "b", "l", "f", "s", "n", "h", "d", "t", "c", "q", "m", "g", "ng", "z", "r", "a", "o", "u", "e", "i", "ch", "th", "ph", "p", "x", "p", "<", ">", , , , "f", "v", "u", "yr", "y", "w", "th", "th", "a", "o", "ac", "ae", "o", "o", "o", "oe", "on", "r", "k", "c", "k", "g", "ng", "g", "g", "w", "h", "h", "h", "h", "n", "n", "n", "i", "e", "j", "g", "ae", "a", "eo", "p", "z", "s", "s", "s", "c", "z", "t", "t", "d", "b", "b", "p", "p", "e", "m", "m", "m", "l", "l", "ng", "ng", "d", "o", "ear", "ior", "qu", "qu", "qu", "s", "yr", "yr", "yr", "q", "x", ".", ":", "+", "17", "18", "19"], [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "k", "kh", "g", "gh", "ng", "c", "ch", "j", "jh", "ny", "t", "tth", "d", "ddh", "nn", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "y", "r", "l", "v", "sh", "ss", "s", "h", "l", "q", "a", "aa", "i", "ii", "u", "uk", "uu", "uuv", "ry", "ryy", "ly", "lyy", "e", "ai", "oo", "oo", "au", "a", "aa", "aa", "i", "ii", "y", "yy", "u", "uu", "ua", "oe", "ya", "ie", "e", "ae", "ai", "oo", "au", "M", "H", "a`", , , , "r", , "!", , , , , , ".", " // ", ":", "+", "++", " * ", " /// ", "KR", "'", , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], [" @ ", " ... ", ",", ". ", ": ", " // ", , "-", ",", ". ", , , , , , , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", , , , , , , "a", "e", "i", "o", "u", "O", "U", "ee", "n", "ng", "b", "p", "q", "g", "m", "l", "s", "sh", "t", "d", "ch", "j", "y", "r", "w", "f", "k", "kha", "ts", "z", "h", "zr", "lh", "zh", "ch", "-", "e", "i", "o", "u", "O", "U", "ng", "b", "p", "q", "g", "m", "t", "d", "ch", "j", "ts", "y", "w", "k", "g", "h", "jy", "ny", "dz", "e", "i", "iy", "U", "u", "ng", "k", "g", "h", "p", "sh", "t", "d", "j", "f", "g", "h", "ts", "z", "r", "ch", "zh", "i", "k", "r", "f", "zh", , , , , , , , , , "H", "X", "W", "M", " 3 ", " 333 ", "a", "i", "k", "ng", "c", "tt", "tth", "dd", "nn", "t", "d", "p", "ph", "ss", "zh", "z", "a", "t", "zh", "gh", "ng", "c", "jh", "tta", "ddh", "t", "dh", "ss", "cy", "zh", "z", "u", "y", "bh", "'"], [], [], [], [], [], ["A", "a", "B", "b", "B", "b", "B", "b", "C", "c", "D", "d", "D", "d", "D", "d", "D", "d", "D", "d", "E", "e", "E", "e", "E", "e", "E", "e", "E", "e", "F", "f", "G", "g", "H", "h", "H", "h", "H", "h", "H", "h", "H", "h", "I", "i", "I", "i", "K", "k", "K", "k", "K", "k", "L", "l", "L", "l", "L", "l", "L", "l", "M", "m", "M", "m", "M", "m", "N", "n", "N", "n", "N", "n", "N", "n", "O", "o", "O", "o", "O", "o", "O", "o", "P", "p", "P", "p", "R", "r", "R", "r", "R", "r", "R", "r", "S", "s", "S", "s", "S", "s", "S", "s", "S", "s", "T", "t", "T", "t", "T", "t", "T", "t", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "V", "v", "V", "v", "W", "w", "W", "w", "W", "w", "W", "w", "W", "w", "X", "x", "X", "x", "Y", "y", "Z", "z", "Z", "z", "Z", "z", "h", "t", "w", "y", "a", "S", , , , , "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "A", "a", "E", "e", "E", "e", "E", "e", "E", "e", "E", "e", "E", "e", "E", "e", "E", "e", "I", "i", "I", "i", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "O", "o", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "U", "u", "Y", "y", "Y", "y", "Y", "y", "Y", "y"], ["a", "a", "a", "a", "a", "a", "a", "a", "A", "A", "A", "A", "A", "A", "A", "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", "i", "i", "i", "i", "i", "i", "i", "i", "I", "I", "I", "I", "I", "I", "I", "I", "o", "o", "o", "o", "o", "o", , , "O", "O", "O", "O", "O", "O", , , "u", "u", "u", "u", "u", "u", "u", "u", , "U", , "U", , "U", , "U", "o", "o", "o", "o", "o", "o", "o", "o", "O", "O", "O", "O", "O", "O", "O", "O", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "u", "u", "o", "o", , , "a", "a", "a", "a", "a", "a", "a", "a", "A", "A", "A", "A", "A", "A", "A", "A", "e", "e", "e", "e", "e", "e", "e", "e", "E", "E", "E", "E", "E", "E", "E", "E", "o", "o", "o", "o", "o", "o", "o", "o", "O", "O", "O", "O", "O", "O", "O", "O", "a", "a", "a", "a", "a", , "a", "a", "A", "A", "A", "A", "A", "'", "i", "'", "~", '"~', "e", "e", "e", , "e", "e", "E", "E", "E", "E", "E", "'`", "''", "'~", "i", "i", "i", "i", , , "i", "i", "I", "I", "I", "I", , "`'", "`'", "`~", "u", "u", "u", "u", "R", "R", "u", "u", "U", "U", "U", "U", "R", '"`', `"'`, "`", , , "o", "o", "o", , "o", "o", "O", "O", "O", "O", "O", "'", "`"], [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", , , , , "-", "-", "-", "-", "--", "--", "||", "_", "'", "'", ",", "'", '"', '"', ",,", '"', "+", "++", "*", "*>", ".", "..", "...", ".", "\n", "\n\n", , , , , , " ", "%0", "%00", "'", "''", "'''", "`", "``", "```", "^", "<", ">", "*", "!!", "!?", "-", "_", "-", "^", "***", "--", "/", "-[", "]-", , "?!", "!?", "7", "PP", "(]", "[)", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "0", , , , "4", "5", "6", "7", "8", "9", "+", "-", "=", "(", ")", "n", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-", "=", "(", ")", , , , , , , , , , , , , , , , , , "ECU", "CL", "Cr", "FF", "L", "mil", "N", "Pts", "Rs", "W", "NS", "D", "EU", "K", "T", "Dr"], [, , "C", , , , , , , , "g", "H", "H", "H", "h", , "I", "I", "L", "l", "lb", "N", "no", "(p)", "P", "P", "Q", "R", "R", "R", , , "(sm)", "(tel)", "(tm)", , "Z", , , "mho", "Z", , , , "B", "C", "e", "e", , "F", , "M", "o", , , , , "i", "Q", "(fax)", "pi", , , "Pi", , "G", "L", "L", "Y", "D", "d", "e", "i", "j", , , "per", , , , , , , " 1/3 ", " 2/3 ", " 1/5 ", " 2/5 ", " 3/5 ", " 4/5 ", " 1/6 ", " 5/6 ", " 1/8 ", " 3/8 ", " 5/8 ", " 7/8 ", " 1/", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "L", "C", "D", "M", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix", "x", "xi", "xii", "l", "c", "d", "m", "(D", "D)", "((|))", ")", , , , , , , , , , , , , "-", "|", "-", "|", "-", "|", "\\", "/", "\\", "/", "-", "-", "~", "~", "-", "|", "-", "|", "-", "-", "-", "|", "-", "|", "|", "-", "-", "-", "-", "-", "-", "|", "|", "|", "|", "|", "|", "|", "^", "V", "\\", "=", "V", "^", "-", "-", "|", "|", "-", "-", "|", "|", "=", "|", "=", "=", "|", "=", "|", "=", "=", "=", "=", "=", "=", "|", "=", "|", "=", "|", "\\", "/", "\\", "/", "=", "=", "~", "~", "|", "|", "-", "|", "-", "|", "-", "-", "-", "|", "-", "|", "|", "|", "|", "|", "|", "|", "-", "\\", "\\", "|"], [], [], [], ["-", "-", "|", "|", "-", "-", "|", "|", "-", "-", "|", "|", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "-", "-", "|", "|", "-", "|", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "/", "\\", "X", "-", "|", "-", "|", "-", "|", "-", "|", "-", "|", "-", "|", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "-", "|", , , , , , , , , , , "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "^", "^", "^", "^", ">", ">", ">", ">", ">", ">", "V", "V", "V", "V", "<", "<", "<", "<", "<", "<", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "#", "#", "#", "#", "#", "^", "^", "^", "O", "#", "#", "#", "#", "#", "#", "#", "#"], [], [], [" ", "a", "1", "b", "'", "k", "2", "l", "@", "c", "i", "f", "/", "m", "s", "p", '"', "e", "3", "h", "9", "o", "6", "r", "^", "d", "j", "g", ">", "n", "t", "q", ",", "*", "5", "<", "-", "u", "8", "v", ".", "%", "[", "$", "+", "x", "!", "&", ";", ":", "4", "\\", "0", "z", "7", "(", "_", "?", "w", "]", "#", "y", ")", "=", "[d7]", "[d17]", "[d27]", "[d127]", "[d37]", "[d137]", "[d237]", "[d1237]", "[d47]", "[d147]", "[d247]", "[d1247]", "[d347]", "[d1347]", "[d2347]", "[d12347]", "[d57]", "[d157]", "[d257]", "[d1257]", "[d357]", "[d1357]", "[d2357]", "[d12357]", "[d457]", "[d1457]", "[d2457]", "[d12457]", "[d3457]", "[d13457]", "[d23457]", "[d123457]", "[d67]", "[d167]", "[d267]", "[d1267]", "[d367]", "[d1367]", "[d2367]", "[d12367]", "[d467]", "[d1467]", "[d2467]", "[d12467]", "[d3467]", "[d13467]", "[d23467]", "[d123467]", "[d567]", "[d1567]", "[d2567]", "[d12567]", "[d3567]", "[d13567]", "[d23567]", "[d123567]", "[d4567]", "[d14567]", "[d24567]", "[d124567]", "[d34567]", "[d134567]", "[d234567]", "[d1234567]", "[d8]", "[d18]", "[d28]", "[d128]", "[d38]", "[d138]", "[d238]", "[d1238]", "[d48]", "[d148]", "[d248]", "[d1248]", "[d348]", "[d1348]", "[d2348]", "[d12348]", "[d58]", "[d158]", "[d258]", "[d1258]", "[d358]", "[d1358]", "[d2358]", "[d12358]", "[d458]", "[d1458]", "[d2458]", "[d12458]", "[d3458]", "[d13458]", "[d23458]", "[d123458]", "[d68]", "[d168]", "[d268]", "[d1268]", "[d368]", "[d1368]", "[d2368]", "[d12368]", "[d468]", "[d1468]", "[d2468]", "[d12468]", "[d3468]", "[d13468]", "[d23468]", "[d123468]", "[d568]", "[d1568]", "[d2568]", "[d12568]", "[d3568]", "[d13568]", "[d23568]", "[d123568]", "[d4568]", "[d14568]", "[d24568]", "[d124568]", "[d34568]", "[d134568]", "[d234568]", "[d1234568]", "[d78]", "[d178]", "[d278]", "[d1278]", "[d378]", "[d1378]", "[d2378]", "[d12378]", "[d478]", "[d1478]", "[d2478]", "[d12478]", "[d3478]", "[d13478]", "[d23478]", "[d123478]", "[d578]", "[d1578]", "[d2578]", "[d12578]", "[d3578]", "[d13578]", "[d23578]", "[d123578]", "[d4578]", "[d14578]", "[d24578]", "[d124578]", "[d34578]", "[d134578]", "[d234578]", "[d1234578]", "[d678]", "[d1678]", "[d2678]", "[d12678]", "[d3678]", "[d13678]", "[d23678]", "[d123678]", "[d4678]", "[d14678]", "[d24678]", "[d124678]", "[d34678]", "[d134678]", "[d234678]", "[d1234678]", "[d5678]", "[d15678]", "[d25678]", "[d125678]", "[d35678]", "[d135678]", "[d235678]", "[d1235678]", "[d45678]", "[d145678]", "[d245678]", "[d1245678]", "[d345678]", "[d1345678]", "[d2345678]", "[d12345678]"], [], [], [], [], [], [], [], [" ", ",", ". ", '"', "[JIS]", '"', "/", "0", "<", "> ", "<<", ">> ", "[", "] ", "{", "} ", "[(", ")] ", "@", "X ", "[", "] ", "[[", "]] ", "((", ")) ", "[[", "]] ", "~ ", "``", "''", ",,", "@", "1", "2", "3", "4", "5", "6", "7", "8", "9", , , , , , , "~", "+", "+", "+", "+", , "@", " // ", "+10+", "+20+", "+30+", , , , , , , "a", "a", "i", "i", "u", "u", "e", "e", "o", "o", "ka", "ga", "ki", "gi", "ku", "gu", "ke", "ge", "ko", "go", "sa", "za", "si", "zi", "su", "zu", "se", "ze", "so", "zo", "ta", "da", "ti", "di", "tu", "tu", "du", "te", "de", "to", "do", "na", "ni", "nu", "ne", "no", "ha", "ba", "pa", "hi", "bi", "pi", "hu", "bu", "pu", "he", "be", "pe", "ho", "bo", "po", "ma", "mi", "mu", "me", "mo", "ya", "ya", "yu", "yu", "yo", "yo", "ra", "ri", "ru", "re", "ro", "wa", "wa", "wi", "we", "wo", "n", "vu", , , , , , , , , '"', '"', , , "a", "a", "i", "i", "u", "u", "e", "e", "o", "o", "ka", "ga", "ki", "gi", "ku", "gu", "ke", "ge", "ko", "go", "sa", "za", "si", "zi", "su", "zu", "se", "ze", "so", "zo", "ta", "da", "ti", "di", "tu", "tu", "du", "te", "de", "to", "do", "na", "ni", "nu", "ne", "no", "ha", "ba", "pa", "hi", "bi", "pi", "hu", "bu", "pu", "he", "be", "pe", "ho", "bo", "po", "ma", "mi", "mu", "me", "mo", "ya", "ya", "yu", "yu", "yo", "yo", "ra", "ri", "ru", "re", "ro", "wa", "wa", "wi", "we", "wo", "n", "vu", "ka", "ke", "va", "vi", "ve", "vo", , , '"', '"'], [, , , , , "B", "P", "M", "F", "D", "T", "N", "L", "G", "K", "H", "J", "Q", "X", "ZH", "CH", "SH", "R", "Z", "C", "S", "A", "O", "E", "EH", "AI", "EI", "AU", "OU", "AN", "EN", "ANG", "ENG", "ER", "I", "U", "IU", "V", "NG", "GN", , , , , "g", "gg", "gs", "n", "nj", "nh", "d", "dd", "r", "lg", "lm", "lb", "ls", "lt", "lp", "rh", "m", "b", "bb", "bs", "s", "ss", , "j", "jj", "c", "k", "t", "p", "h", "a", "ae", "ya", "yae", "eo", "e", "yeo", "ye", "o", "wa", "wae", "oe", "yo", "u", "weo", "we", "wi", "yu", "eu", "yi", "i", , "nn", "nd", "ns", "nZ", "lgs", "ld", "lbs", "lZ", "lQ", "mb", "ms", "mZ", "mN", "bg", , "bsg", "bst", "bj", "bt", "bN", "bbN", "sg", "sn", "sd", "sb", "sj", "Z", , "N", "Ns", "NZ", "pN", "hh", "Q", "yo-ya", "yo-yae", "yo-i", "yu-yeo", "yu-ye", "yu-i", "U", "U-i", , , , , , , , , , , , , , , , , , "BU", "ZI", "JI", "GU", "EE", "ENN", "OO", "ONN", "IR", "ANN", "INN", "UNN", "IM", "NGG", "AINN", "AUNN", "AM", "OM", "ONG", "INNN", "P", "T", "K", "H"], ["(g)", "(n)", "(d)", "(r)", "(m)", "(b)", "(s)", "()", "(j)", "(c)", "(k)", "(t)", "(p)", "(h)", "(ga)", "(na)", "(da)", "(ra)", "(ma)", "(ba)", "(sa)", "(a)", "(ja)", "(ca)", "(ka)", "(ta)", "(pa)", "(ha)", "(ju)", , , , "(1) ", "(2) ", "(3) ", "(4) ", "(5) ", "(6) ", "(7) ", "(8) ", "(9) ", "(10) ", "(Yue) ", "(Huo) ", "(Shui) ", "(Mu) ", "(Jin) ", "(Tu) ", "(Ri) ", "(Zhu) ", "(You) ", "(She) ", "(Ming) ", "(Te) ", "(Cai) ", "(Zhu) ", "(Lao) ", "(Dai) ", "(Hu) ", "(Xue) ", "(Jian) ", "(Qi) ", "(Zi) ", "(Xie) ", "(Ji) ", "(Xiu) ", "<<", ">>", , , , , , , , , , , , , , , , , , , , , , , , , , , , , "(g)", "(n)", "(d)", "(r)", "(m)", "(b)", "(s)", "()", "(j)", "(c)", "(k)", "(t)", "(p)", "(h)", "(ga)", "(na)", "(da)", "(ra)", "(ma)", "(ba)", "(sa)", "(a)", "(ja)", "(ca)", "(ka)", "(ta)", "(pa)", "(ha)", , , , "KIS ", "(1) ", "(2) ", "(3) ", "(4) ", "(5) ", "(6) ", "(7) ", "(8) ", "(9) ", "(10) ", "(Yue) ", "(Huo) ", "(Shui) ", "(Mu) ", "(Jin) ", "(Tu) ", "(Ri) ", "(Zhu) ", "(You) ", "(She) ", "(Ming) ", "(Te) ", "(Cai) ", "(Zhu) ", "(Lao) ", "(Mi) ", "(Nan) ", "(Nu) ", "(Shi) ", "(You) ", "(Yin) ", "(Zhu) ", "(Xiang) ", "(Xiu) ", "(Xie) ", "(Zheng) ", "(Shang) ", "(Zhong) ", "(Xia) ", "(Zuo) ", "(You) ", "(Yi) ", "(Zong) ", "(Xue) ", "(Jian) ", "(Qi) ", "(Zi) ", "(Xie) ", "(Ye) ", , , , , , , , , , , , , , , , "1M", "2M", "3M", "4M", "5M", "6M", "7M", "8M", "9M", "10M", "11M", "12M", , , , , "a", "i", "u", "u", "o", "ka", "ki", "ku", "ke", "ko", "sa", "si", "su", "se", "so", "ta", "ti", "tu", "te", "to", "na", "ni", "nu", "ne", "no", "ha", "hi", "hu", "he", "ho", "ma", "mi", "mu", "me", "mo", "ya", "yu", "yo", "ra", "ri", "ru", "re", "ro", "wa", "wi", "we", "wo"], ["apartment", "alpha", "ampere", "are", "inning", "inch", "won", "escudo", "acre", "ounce", "ohm", "kai-ri", "carat", "calorie", "gallon", "gamma", "giga", "guinea", "curie", "guilder", "kilo", "kilogram", "kilometer", "kilowatt", "gram", "gram ton", "cruzeiro", "krone", "case", "koruna", "co-op", "cycle", "centime", "shilling", "centi", "cent", "dozen", "desi", "dollar", "ton", "nano", "knot", "heights", "percent", "parts", "barrel", "piaster", "picul", "pico", "building", "farad", "feet", "bushel", "franc", "hectare", "peso", "pfennig", "hertz", "pence", "page", "beta", "point", "volt", "hon", "pound", "hall", "horn", "micro", "mile", "mach", "mark", "mansion", "micron", "milli", "millibar", "mega", "megaton", "meter", "yard", "yard", "yuan", "liter", "lira", "rupee", "ruble", "rem", "roentgen", "watt", "0h", "1h", "2h", "3h", "4h", "5h", "6h", "7h", "8h", "9h", "10h", "11h", "12h", "13h", "14h", "15h", "16h", "17h", "18h", "19h", "20h", "21h", "22h", "23h", "24h", "HPA", "da", "AU", "bar", "oV", "pc", , , , , "Heisei", "Syouwa", "Taisyou", "Meiji", "Inc.", "pA", "nA", "microamp", "mA", "kA", "kB", "MB", "GB", "cal", "kcal", "pF", "nF", "microFarad", "microgram", "mg", "kg", "Hz", "kHz", "MHz", "GHz", "THz", "microliter", "ml", "dl", "kl", "fm", "nm", "micrometer", "mm", "cm", "km", "mm^2", "cm^2", "m^2", "km^2", "mm^4", "cm^3", "m^3", "km^3", "m/s", "m/s^2", "Pa", "kPa", "MPa", "GPa", "rad", "rad/s", "rad/s^2", "ps", "ns", "microsecond", "ms", "pV", "nV", "microvolt", "mV", "kV", "MV", "pW", "nW", "microwatt", "mW", "kW", "MW", "kOhm", "MOhm", "a.m.", "Bq", "cc", "cd", "C/kg", "Co.", "dB", "Gy", "ha", "HP", "in", "K.K.", "KM", "kt", "lm", "ln", "log", "lx", "mb", "mil", "mol", "pH", "p.m.", "PPM", "PR", "sr", "Sv", "Wb", , , "1d", "2d", "3d", "4d", "5d", "6d", "7d", "8d", "9d", "10d", "11d", "12d", "13d", "14d", "15d", "16d", "17d", "18d", "19d", "20d", "21d", "22d", "23d", "24d", "25d", "26d", "27d", "28d", "29d", "30d", "31d"], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ["Yi", "Ding", "Kao", "Qi", "Shang", "Xia", , "Wan", "Zhang", "San", "Shang", "Xia", "Ji", "Bu", "Yu", "Mian", "Gai", "Chou", "Chou", "Zhuan", "Qie", "Pi", "Shi", "Shi", "Qiu", "Bing", "Ye", "Cong", "Dong", "Si", "Cheng", "Diu", "Qiu", "Liang", "Diu", "You", "Liang", "Yan", "Bing", "Sang", "Gun", "Jiu", "Ge", "Ya", "Qiang", "Zhong", "Ji", "Jie", "Feng", "Guan", "Chuan", "Chan", "Lin", "Zhuo", "Zhu", "Ha", "Wan", "Dan", "Wei", "Zhu", "Jing", "Li", "Ju", "Pie", "Fu", "Yi", "Yi", "Nai", "Shime", "Jiu", "Jiu", "Zhe", "Me", "Yi", , "Zhi", "Wu", "Zha", "Hu", "Fa", "Le", "Zhong", "Ping", "Pang", "Qiao", "Hu", "Guai", "Cheng", "Cheng", "Yi", "Yin", , "Mie", "Jiu", "Qi", "Ye", "Xi", "Xiang", "Gai", "Diu", "Hal", , "Shu", "Twul", "Shi", "Ji", "Nang", "Jia", "Kel", "Shi", , "Ol", "Mai", "Luan", "Cal", "Ru", "Xue", "Yan", "Fu", "Sha", "Na", "Gan", "Sol", "El", "Cwul", , "Gan", "Chi", "Gui", "Gan", "Luan", "Lin", "Yi", "Jue", "Liao", "Ma", "Yu", "Zheng", "Shi", "Shi", "Er", "Chu", "Yu", "Yu", "Yu", "Yun", "Hu", "Qi", "Wu", "Jing", "Si", "Sui", "Gen", "Gen", "Ya", "Xie", "Ya", "Qi", "Ya", "Ji", "Tou", "Wang", "Kang", "Ta", "Jiao", "Hai", "Yi", "Chan", "Heng", "Mu", , "Xiang", "Jing", "Ting", "Liang", "Xiang", "Jing", "Ye", "Qin", "Bo", "You", "Xie", "Dan", "Lian", "Duo", "Wei", "Ren", "Ren", "Ji", "La", "Wang", "Yi", "Shi", "Ren", "Le", "Ding", "Ze", "Jin", "Pu", "Chou", "Ba", "Zhang", "Jin", "Jie", "Bing", "Reng", "Cong", "Fo", "San", "Lun", "Sya", "Cang", "Zi", "Shi", "Ta", "Zhang", "Fu", "Xian", "Xian", "Tuo", "Hong", "Tong", "Ren", "Qian", "Gan", "Yi", "Di", "Dai", "Ling", "Yi", "Chao", "Chang", "Sa", , "Yi", "Mu", "Men", "Ren", "Jia", "Chao", "Yang", "Qian", "Zhong", "Pi", "Wan", "Wu", "Jian", "Jie", "Yao", "Feng", "Cang", "Ren", "Wang", "Fen", "Di", "Fang"], ["Zhong", "Qi", "Pei", "Yu", "Diao", "Dun", "Wen", "Yi", "Xin", "Kang", "Yi", "Ji", "Ai", "Wu", "Ji", "Fu", "Fa", "Xiu", "Jin", "Bei", "Dan", "Fu", "Tang", "Zhong", "You", "Huo", "Hui", "Yu", "Cui", "Chuan", "San", "Wei", "Chuan", "Che", "Ya", "Xian", "Shang", "Chang", "Lun", "Cang", "Xun", "Xin", "Wei", "Zhu", , "Xuan", "Nu", "Bo", "Gu", "Ni", "Ni", "Xie", "Ban", "Xu", "Ling", "Zhou", "Shen", "Qu", "Si", "Beng", "Si", "Jia", "Pi", "Yi", "Si", "Ai", "Zheng", "Dian", "Han", "Mai", "Dan", "Zhu", "Bu", "Qu", "Bi", "Shao", "Ci", "Wei", "Di", "Zhu", "Zuo", "You", "Yang", "Ti", "Zhan", "He", "Bi", "Tuo", "She", "Yu", "Yi", "Fo", "Zuo", "Kou", "Ning", "Tong", "Ni", "Xuan", "Qu", "Yong", "Wa", "Qian", , "Ka", , "Pei", "Huai", "He", "Lao", "Xiang", "Ge", "Yang", "Bai", "Fa", "Ming", "Jia", "Er", "Bing", "Ji", "Hen", "Huo", "Gui", "Quan", "Tiao", "Jiao", "Ci", "Yi", "Shi", "Xing", "Shen", "Tuo", "Kan", "Zhi", "Gai", "Lai", "Yi", "Chi", "Kua", "Guang", "Li", "Yin", "Shi", "Mi", "Zhu", "Xu", "You", "An", "Lu", "Mou", "Er", "Lun", "Tong", "Cha", "Chi", "Xun", "Gong", "Zhou", "Yi", "Ru", "Jian", "Xia", "Jia", "Zai", "Lu", "Ko", "Jiao", "Zhen", "Ce", "Qiao", "Kuai", "Chai", "Ning", "Nong", "Jin", "Wu", "Hou", "Jiong", "Cheng", "Zhen", "Zuo", "Chou", "Qin", "Lu", "Ju", "Shu", "Ting", "Shen", "Tuo", "Bo", "Nan", "Hao", "Bian", "Tui", "Yu", "Xi", "Cu", "E", "Qiu", "Xu", "Kuang", "Ku", "Wu", "Jun", "Yi", "Fu", "Lang", "Zu", "Qiao", "Li", "Yong", "Hun", "Jing", "Xian", "San", "Pai", "Su", "Fu", "Xi", "Li", "Fu", "Ping", "Bao", "Yu", "Si", "Xia", "Xin", "Xiu", "Yu", "Ti", "Che", "Chou", , "Yan", "Lia", "Li", "Lai", , "Jian", "Xiu", "Fu", "He", "Ju", "Xiao", "Pai", "Jian", "Biao", "Chu", "Fei", "Feng", "Ya", "An", "Bei", "Yu", "Xin", "Bi", "Jian"], ["Chang", "Chi", "Bing", "Zan", "Yao", "Cui", "Lia", "Wan", "Lai", "Cang", "Zong", "Ge", "Guan", "Bei", "Tian", "Shu", "Shu", "Men", "Dao", "Tan", "Jue", "Chui", "Xing", "Peng", "Tang", "Hou", "Yi", "Qi", "Ti", "Gan", "Jing", "Jie", "Sui", "Chang", "Jie", "Fang", "Zhi", "Kong", "Juan", "Zong", "Ju", "Qian", "Ni", "Lun", "Zhuo", "Wei", "Luo", "Song", "Leng", "Hun", "Dong", "Zi", "Ben", "Wu", "Ju", "Nai", "Cai", "Jian", "Zhai", "Ye", "Zhi", "Sha", "Qing", , "Ying", "Cheng", "Jian", "Yan", "Nuan", "Zhong", "Chun", "Jia", "Jie", "Wei", "Yu", "Bing", "Ruo", "Ti", "Wei", "Pian", "Yan", "Feng", "Tang", "Wo", "E", "Xie", "Che", "Sheng", "Kan", "Di", "Zuo", "Cha", "Ting", "Bei", "Ye", "Huang", "Yao", "Zhan", "Chou", "Yan", "You", "Jian", "Xu", "Zha", "Ci", "Fu", "Bi", "Zhi", "Zong", "Mian", "Ji", "Yi", "Xie", "Xun", "Si", "Duan", "Ce", "Zhen", "Ou", "Tou", "Tou", "Bei", "Za", "Lu", "Jie", "Wei", "Fen", "Chang", "Gui", "Sou", "Zhi", "Su", "Xia", "Fu", "Yuan", "Rong", "Li", "Ru", "Yun", "Gou", "Ma", "Bang", "Dian", "Tang", "Hao", "Jie", "Xi", "Shan", "Qian", "Jue", "Cang", "Chu", "San", "Bei", "Xiao", "Yong", "Yao", "Tan", "Suo", "Yang", "Fa", "Bing", "Jia", "Dai", "Zai", "Tang", , "Bin", "Chu", "Nuo", "Can", "Lei", "Cui", "Yong", "Zao", "Zong", "Peng", "Song", "Ao", "Chuan", "Yu", "Zhai", "Cou", "Shang", "Qiang", "Jing", "Chi", "Sha", "Han", "Zhang", "Qing", "Yan", "Di", "Xi", "Lu", "Bei", "Piao", "Jin", "Lian", "Lu", "Man", "Qian", "Xian", "Tan", "Ying", "Dong", "Zhuan", "Xiang", "Shan", "Qiao", "Jiong", "Tui", "Zun", "Pu", "Xi", "Lao", "Chang", "Guang", "Liao", "Qi", "Deng", "Chan", "Wei", "Ji", "Fan", "Hui", "Chuan", "Jian", "Dan", "Jiao", "Jiu", "Seng", "Fen", "Xian", "Jue", "E", "Jiao", "Jian", "Tong", "Lin", "Bo", "Gu", , "Su", "Xian", "Jiang", "Min", "Ye", "Jin", "Jia", "Qiao", "Pi", "Feng", "Zhou", "Ai", "Sai"], ["Yi", "Jun", "Nong", "Chan", "Yi", "Dang", "Jing", "Xuan", "Kuai", "Jian", "Chu", "Dan", "Jiao", "Sha", "Zai", , "Bin", "An", "Ru", "Tai", "Chou", "Chai", "Lan", "Ni", "Jin", "Qian", "Meng", "Wu", "Ning", "Qiong", "Ni", "Chang", "Lie", "Lei", "Lu", "Kuang", "Bao", "Du", "Biao", "Zan", "Zhi", "Si", "You", "Hao", "Chen", "Chen", "Li", "Teng", "Wei", "Long", "Chu", "Chan", "Rang", "Shu", "Hui", "Li", "Luo", "Zan", "Nuo", "Tang", "Yan", "Lei", "Nang", "Er", "Wu", "Yun", "Zan", "Yuan", "Xiong", "Chong", "Zhao", "Xiong", "Xian", "Guang", "Dui", "Ke", "Dui", "Mian", "Tu", "Chang", "Er", "Dui", "Er", "Xin", "Tu", "Si", "Yan", "Yan", "Shi", "Shi", "Dang", "Qian", "Dou", "Fen", "Mao", "Shen", "Dou", "Bai", "Jing", "Li", "Huang", "Ru", "Wang", "Nei", "Quan", "Liang", "Yu", "Ba", "Gong", "Liu", "Xi", , "Lan", "Gong", "Tian", "Guan", "Xing", "Bing", "Qi", "Ju", "Dian", "Zi", "Ppwun", "Yang", "Jian", "Shou", "Ji", "Yi", "Ji", "Chan", "Jiong", "Mao", "Ran", "Nei", "Yuan", "Mao", "Gang", "Ran", "Ce", "Jiong", "Ce", "Zai", "Gua", "Jiong", "Mao", "Zhou", "Mou", "Gou", "Xu", "Mian", "Mi", "Rong", "Yin", "Xie", "Kan", "Jun", "Nong", "Yi", "Mi", "Shi", "Guan", "Meng", "Zhong", "Ju", "Yuan", "Ming", "Kou", "Lam", "Fu", "Xie", "Mi", "Bing", "Dong", "Tai", "Gang", "Feng", "Bing", "Hu", "Chong", "Jue", "Hu", "Kuang", "Ye", "Leng", "Pan", "Fu", "Min", "Dong", "Xian", "Lie", "Xia", "Jian", "Jing", "Shu", "Mei", "Tu", "Qi", "Gu", "Zhun", "Song", "Jing", "Liang", "Qing", "Diao", "Ling", "Dong", "Gan", "Jian", "Yin", "Cou", "Yi", "Li", "Cang", "Ming", "Zhuen", "Cui", "Si", "Duo", "Jin", "Lin", "Lin", "Ning", "Xi", "Du", "Ji", "Fan", "Fan", "Fan", "Feng", "Ju", "Chu", "Tako", "Feng", "Mok", "Ci", "Fu", "Feng", "Ping", "Feng", "Kai", "Huang", "Kai", "Gan", "Deng", "Ping", "Qu", "Xiong", "Kuai", "Tu", "Ao", "Chu", "Ji", "Dang", "Han", "Han", "Zao"], ["Dao", "Diao", "Dao", "Ren", "Ren", "Chuang", "Fen", "Qie", "Yi", "Ji", "Kan", "Qian", "Cun", "Chu", "Wen", "Ji", "Dan", "Xing", "Hua", "Wan", "Jue", "Li", "Yue", "Lie", "Liu", "Ze", "Gang", "Chuang", "Fu", "Chu", "Qu", "Ju", "Shan", "Min", "Ling", "Zhong", "Pan", "Bie", "Jie", "Jie", "Bao", "Li", "Shan", "Bie", "Chan", "Jing", "Gua", "Gen", "Dao", "Chuang", "Kui", "Ku", "Duo", "Er", "Zhi", "Shua", "Quan", "Cha", "Ci", "Ke", "Jie", "Gui", "Ci", "Gui", "Kai", "Duo", "Ji", "Ti", "Jing", "Lou", "Gen", "Ze", "Yuan", "Cuo", "Xue", "Ke", "La", "Qian", "Cha", "Chuang", "Gua", "Jian", "Cuo", "Li", "Ti", "Fei", "Pou", "Chan", "Qi", "Chuang", "Zi", "Gang", "Wan", "Bo", "Ji", "Duo", "Qing", "Yan", "Zhuo", "Jian", "Ji", "Bo", "Yan", "Ju", "Huo", "Sheng", "Jian", "Duo", "Duan", "Wu", "Gua", "Fu", "Sheng", "Jian", "Ge", "Zha", "Kai", "Chuang", "Juan", "Chan", "Tuan", "Lu", "Li", "Fou", "Shan", "Piao", "Kou", "Jiao", "Gua", "Qiao", "Jue", "Hua", "Zha", "Zhuo", "Lian", "Ju", "Pi", "Liu", "Gui", "Jiao", "Gui", "Jian", "Jian", "Tang", "Huo", "Ji", "Jian", "Yi", "Jian", "Zhi", "Chan", "Cuan", "Mo", "Li", "Zhu", "Li", "Ya", "Quan", "Ban", "Gong", "Jia", "Wu", "Mai", "Lie", "Jin", "Keng", "Xie", "Zhi", "Dong", "Zhu", "Nu", "Jie", "Qu", "Shao", "Yi", "Zhu", "Miao", "Li", "Jing", "Lao", "Lao", "Juan", "Kou", "Yang", "Wa", "Xiao", "Mou", "Kuang", "Jie", "Lie", "He", "Shi", "Ke", "Jing", "Hao", "Bo", "Min", "Chi", "Lang", "Yong", "Yong", "Mian", "Ke", "Xun", "Juan", "Qing", "Lu", "Pou", "Meng", "Lai", "Le", "Kai", "Mian", "Dong", "Xu", "Xu", "Kan", "Wu", "Yi", "Xun", "Weng", "Sheng", "Lao", "Mu", "Lu", "Piao", "Shi", "Ji", "Qin", "Qiang", "Jiao", "Quan", "Yang", "Yi", "Jue", "Fan", "Juan", "Tong", "Ju", "Dan", "Xie", "Mai", "Xun", "Xun", "Lu", "Li", "Che", "Rang", "Quan", "Bao", "Shao", "Yun", "Jiu", "Bao", "Gou", "Wu"], ["Yun", "Mwun", "Nay", "Gai", "Gai", "Bao", "Cong", , "Xiong", "Peng", "Ju", "Tao", "Ge", "Pu", "An", "Pao", "Fu", "Gong", "Da", "Jiu", "Qiong", "Bi", "Hua", "Bei", "Nao", "Chi", "Fang", "Jiu", "Yi", "Za", "Jiang", "Kang", "Jiang", "Kuang", "Hu", "Xia", "Qu", "Bian", "Gui", "Qie", "Zang", "Kuang", "Fei", "Hu", "Tou", "Gui", "Gui", "Hui", "Dan", "Gui", "Lian", "Lian", "Suan", "Du", "Jiu", "Qu", "Xi", "Pi", "Qu", "Yi", "Qia", "Yan", "Bian", "Ni", "Qu", "Shi", "Xin", "Qian", "Nian", "Sa", "Zu", "Sheng", "Wu", "Hui", "Ban", "Shi", "Xi", "Wan", "Hua", "Xie", "Wan", "Bei", "Zu", "Zhuo", "Xie", "Dan", "Mai", "Nan", "Dan", "Ji", "Bo", "Shuai", "Bu", "Kuang", "Bian", "Bu", "Zhan", "Qia", "Lu", "You", "Lu", "Xi", "Gua", "Wo", "Xie", "Jie", "Jie", "Wei", "Ang", "Qiong", "Zhi", "Mao", "Yin", "Wei", "Shao", "Ji", "Que", "Luan", "Shi", "Juan", "Xie", "Xu", "Jin", "Que", "Wu", "Ji", "E", "Qing", "Xi", , "Han", "Zhan", "E", "Ting", "Li", "Zhe", "Han", "Li", "Ya", "Ya", "Yan", "She", "Zhi", "Zha", "Pang", , "He", "Ya", "Zhi", "Ce", "Pang", "Ti", "Li", "She", "Hou", "Ting", "Zui", "Cuo", "Fei", "Yuan", "Ce", "Yuan", "Xiang", "Yan", "Li", "Jue", "Sha", "Dian", "Chu", "Jiu", "Qin", "Ao", "Gui", "Yan", "Si", "Li", "Chang", "Lan", "Li", "Yan", "Yan", "Yuan", "Si", "Gong", "Lin", "Qiu", "Qu", "Qu", "Uk", "Lei", "Du", "Xian", "Zhuan", "San", "Can", "Can", "Can", "Can", "Ai", "Dai", "You", "Cha", "Ji", "You", "Shuang", "Fan", "Shou", "Guai", "Ba", "Fa", "Ruo", "Shi", "Shu", "Zhuo", "Qu", "Shou", "Bian", "Xu", "Jia", "Pan", "Sou", "Gao", "Wei", "Sou", "Die", "Rui", "Cong", "Kou", "Gu", "Ju", "Ling", "Gua", "Tao", "Kou", "Zhi", "Jiao", "Zhao", "Ba", "Ding", "Ke", "Tai", "Chi", "Shi", "You", "Qiu", "Po", "Ye", "Hao", "Si", "Tan", "Chi", "Le", "Diao", "Ji", , "Hong"], ["Mie", "Xu", "Mang", "Chi", "Ge", "Xuan", "Yao", "Zi", "He", "Ji", "Diao", "Cun", "Tong", "Ming", "Hou", "Li", "Tu", "Xiang", "Zha", "Xia", "Ye", "Lu", "A", "Ma", "Ou", "Xue", "Yi", "Jun", "Chou", "Lin", "Tun", "Yin", "Fei", "Bi", "Qin", "Qin", "Jie", "Bu", "Fou", "Ba", "Dun", "Fen", "E", "Han", "Ting", "Hang", "Shun", "Qi", "Hong", "Zhi", "Shen", "Wu", "Wu", "Chao", "Ne", "Xue", "Xi", "Chui", "Dou", "Wen", "Hou", "Ou", "Wu", "Gao", "Ya", "Jun", "Lu", "E", "Ge", "Mei", "Ai", "Qi", "Cheng", "Wu", "Gao", "Fu", "Jiao", "Hong", "Chi", "Sheng", "Ne", "Tun", "Fu", "Yi", "Dai", "Ou", "Li", "Bai", "Yuan", "Kuai", , "Qiang", "Wu", "E", "Shi", "Quan", "Pen", "Wen", "Ni", "M", "Ling", "Ran", "You", "Di", "Zhou", "Shi", "Zhou", "Tie", "Xi", "Yi", "Qi", "Ping", "Zi", "Gu", "Zi", "Wei", "Xu", "He", "Nao", "Xia", "Pei", "Yi", "Xiao", "Shen", "Hu", "Ming", "Da", "Qu", "Ju", "Gem", "Za", "Tuo", "Duo", "Pou", "Pao", "Bi", "Fu", "Yang", "He", "Zha", "He", "Hai", "Jiu", "Yong", "Fu", "Que", "Zhou", "Wa", "Ka", "Gu", "Ka", "Zuo", "Bu", "Long", "Dong", "Ning", "Tha", "Si", "Xian", "Huo", "Qi", "Er", "E", "Guang", "Zha", "Xi", "Yi", "Lie", "Zi", "Mie", "Mi", "Zhi", "Yao", "Ji", "Zhou", "Ge", "Shuai", "Zan", "Xiao", "Ke", "Hui", "Kua", "Huai", "Tao", "Xian", "E", "Xuan", "Xiu", "Wai", "Yan", "Lao", "Yi", "Ai", "Pin", "Shen", "Tong", "Hong", "Xiong", "Chi", "Wa", "Ha", "Zai", "Yu", "Di", "Pai", "Xiang", "Ai", "Hen", "Kuang", "Ya", "Da", "Xiao", "Bi", "Yue", , "Hua", "Sasou", "Kuai", "Duo", , "Ji", "Nong", "Mou", "Yo", "Hao", "Yuan", "Long", "Pou", "Mang", "Ge", "E", "Chi", "Shao", "Li", "Na", "Zu", "He", "Ku", "Xiao", "Xian", "Lao", "Bo", "Zhe", "Zha", "Liang", "Ba", "Mie", "Le", "Sui", "Fou", "Bu", "Han", "Heng", "Geng", "Shuo", "Ge"], ["You", "Yan", "Gu", "Gu", "Bai", "Han", "Suo", "Chun", "Yi", "Ai", "Jia", "Tu", "Xian", "Huan", "Li", "Xi", "Tang", "Zuo", "Qiu", "Che", "Wu", "Zao", "Ya", "Dou", "Qi", "Di", "Qin", "Ma", "Mal", "Hong", "Dou", "Kes", "Lao", "Liang", "Suo", "Zao", "Huan", "Lang", "Sha", "Ji", "Zuo", "Wo", "Feng", "Yin", "Hu", "Qi", "Shou", "Wei", "Shua", "Chang", "Er", "Li", "Qiang", "An", "Jie", "Yo", "Nian", "Yu", "Tian", "Lai", "Sha", "Xi", "Tuo", "Hu", "Ai", "Zhou", "Nou", "Ken", "Zhuo", "Zhuo", "Shang", "Di", "Heng", "Lan", "A", "Xiao", "Xiang", "Tun", "Wu", "Wen", "Cui", "Sha", "Hu", "Qi", "Qi", "Tao", "Dan", "Dan", "Ye", "Zi", "Bi", "Cui", "Chuo", "He", "Ya", "Qi", "Zhe", "Pei", "Liang", "Xian", "Pi", "Sha", "La", "Ze", "Qing", "Gua", "Pa", "Zhe", "Se", "Zhuan", "Nie", "Guo", "Luo", "Yan", "Di", "Quan", "Tan", "Bo", "Ding", "Lang", "Xiao", , "Tang", "Chi", "Ti", "An", "Jiu", "Dan", "Ke", "Yong", "Wei", "Nan", "Shan", "Yu", "Zhe", "La", "Jie", "Hou", "Han", "Die", "Zhou", "Chai", "Wai", "Re", "Yu", "Yin", "Zan", "Yao", "Wo", "Mian", "Hu", "Yun", "Chuan", "Hui", "Huan", "Huan", "Xi", "He", "Ji", "Kui", "Zhong", "Wei", "Sha", "Xu", "Huang", "Du", "Nie", "Xuan", "Liang", "Yu", "Sang", "Chi", "Qiao", "Yan", "Dan", "Pen", "Can", "Li", "Yo", "Zha", "Wei", "Miao", "Ying", "Pen", "Phos", "Kui", "Xi", "Yu", "Jie", "Lou", "Ku", "Sao", "Huo", "Ti", "Yao", "He", "A", "Xiu", "Qiang", "Se", "Yong", "Su", "Hong", "Xie", "Yi", "Suo", "Ma", "Cha", "Hai", "Ke", "Ta", "Sang", "Tian", "Ru", "Sou", "Wa", "Ji", "Pang", "Wu", "Xian", "Shi", "Ge", "Zi", "Jie", "Luo", "Weng", "Wa", "Si", "Chi", "Hao", "Suo", "Jia", "Hai", "Suo", "Qin", "Nie", "He", "Cis", "Sai", "Ng", "Ge", "Na", "Dia", "Ai", , "Tong", "Bi", "Ao", "Ao", "Lian", "Cui", "Zhe", "Mo", "Sou", "Sou", "Tan"], ["Di", "Qi", "Jiao", "Chong", "Jiao", "Kai", "Tan", "San", "Cao", "Jia", "Ai", "Xiao", "Piao", "Lou", "Ga", "Gu", "Xiao", "Hu", "Hui", "Guo", "Ou", "Xian", "Ze", "Chang", "Xu", "Po", "De", "Ma", "Ma", "Hu", "Lei", "Du", "Ga", "Tang", "Ye", "Beng", "Ying", "Saai", "Jiao", "Mi", "Xiao", "Hua", "Mai", "Ran", "Zuo", "Peng", "Lao", "Xiao", "Ji", "Zhu", "Chao", "Kui", "Zui", "Xiao", "Si", "Hao", "Fu", "Liao", "Qiao", "Xi", "Xiu", "Tan", "Tan", "Mo", "Xun", "E", "Zun", "Fan", "Chi", "Hui", "Zan", "Chuang", "Cu", "Dan", "Yu", "Tun", "Cheng", "Jiao", "Ye", "Xi", "Qi", "Hao", "Lian", "Xu", "Deng", "Hui", "Yin", "Pu", "Jue", "Qin", "Xun", "Nie", "Lu", "Si", "Yan", "Ying", "Da", "Dan", "Yu", "Zhou", "Jin", "Nong", "Yue", "Hui", "Qi", "E", "Zao", "Yi", "Shi", "Jiao", "Yuan", "Ai", "Yong", "Jue", "Kuai", "Yu", "Pen", "Dao", "Ge", "Xin", "Dun", "Dang", "Sin", "Sai", "Pi", "Pi", "Yin", "Zui", "Ning", "Di", "Lan", "Ta", "Huo", "Ru", "Hao", "Xia", "Ya", "Duo", "Xi", "Chou", "Ji", "Jin", "Hao", "Ti", "Chang", , , "Ca", "Ti", "Lu", "Hui", "Bo", "You", "Nie", "Yin", "Hu", "Mo", "Huang", "Zhe", "Li", "Liu", "Haai", "Nang", "Xiao", "Mo", "Yan", "Li", "Lu", "Long", "Fu", "Dan", "Chen", "Pin", "Pi", "Xiang", "Huo", "Mo", "Xi", "Duo", "Ku", "Yan", "Chan", "Ying", "Rang", "Dian", "La", "Ta", "Xiao", "Jiao", "Chuo", "Huan", "Huo", "Zhuan", "Nie", "Xiao", "Ca", "Li", "Chan", "Chai", "Li", "Yi", "Luo", "Nang", "Zan", "Su", "Xi", "So", "Jian", "Za", "Zhu", "Lan", "Nie", "Nang", , , "Wei", "Hui", "Yin", "Qiu", "Si", "Nin", "Jian", "Hui", "Xin", "Yin", "Nan", "Tuan", "Tuan", "Dun", "Kang", "Yuan", "Jiong", "Pian", "Yun", "Cong", "Hu", "Hui", "Yuan", "You", "Guo", "Kun", "Cong", "Wei", "Tu", "Wei", "Lun", "Guo", "Qun", "Ri", "Ling", "Gu", "Guo", "Tai", "Guo", "Tu", "You"], ["Guo", "Yin", "Hun", "Pu", "Yu", "Han", "Yuan", "Lun", "Quan", "Yu", "Qing", "Guo", "Chuan", "Wei", "Yuan", "Quan", "Ku", "Fu", "Yuan", "Yuan", "E", "Tu", "Tu", "Tu", "Tuan", "Lue", "Hui", "Yi", "Yuan", "Luan", "Luan", "Tu", "Ya", "Tu", "Ting", "Sheng", "Pu", "Lu", "Iri", "Ya", "Zai", "Wei", "Ge", "Yu", "Wu", "Gui", "Pi", "Yi", "Di", "Qian", "Qian", "Zhen", "Zhuo", "Dang", "Qia", "Akutsu", "Yama", "Kuang", "Chang", "Qi", "Nie", "Mo", "Ji", "Jia", "Zhi", "Zhi", "Ban", "Xun", "Tou", "Qin", "Fen", "Jun", "Keng", "Tun", "Fang", "Fen", "Ben", "Tan", "Kan", "Pi", "Zuo", "Keng", "Bi", "Xing", "Di", "Jing", "Ji", "Kuai", "Di", "Jing", "Jian", "Tan", "Li", "Ba", "Wu", "Fen", "Zhui", "Po", "Pan", "Tang", "Kun", "Qu", "Tan", "Zhi", "Tuo", "Gan", "Ping", "Dian", "Gua", "Ni", "Tai", "Pi", "Jiong", "Yang", "Fo", "Ao", "Liu", "Qiu", "Mu", "Ke", "Gou", "Xue", "Ba", "Chi", "Che", "Ling", "Zhu", "Fu", "Hu", "Zhi", "Chui", "La", "Long", "Long", "Lu", "Ao", "Tay", "Pao", , "Xing", "Dong", "Ji", "Ke", "Lu", "Ci", "Chi", "Lei", "Gai", "Yin", "Hou", "Dui", "Zhao", "Fu", "Guang", "Yao", "Duo", "Duo", "Gui", "Cha", "Yang", "Yin", "Fa", "Gou", "Yuan", "Die", "Xie", "Ken", "Jiong", "Shou", "E", "Ha", "Dian", "Hong", "Wu", "Kua", , "Tao", "Dang", "Kai", "Gake", "Nao", "An", "Xing", "Xian", "Huan", "Bang", "Pei", "Ba", "Yi", "Yin", "Han", "Xu", "Chui", "Cen", "Geng", "Ai", "Peng", "Fang", "Que", "Yong", "Xun", "Jia", "Di", "Mai", "Lang", "Xuan", "Cheng", "Yan", "Jin", "Zhe", "Lei", "Lie", "Bu", "Cheng", "Gomi", "Bu", "Shi", "Xun", "Guo", "Jiong", "Ye", "Nian", "Di", "Yu", "Bu", "Ya", "Juan", "Sui", "Pi", "Cheng", "Wan", "Ju", "Lun", "Zheng", "Kong", "Chong", "Dong", "Dai", "Tan", "An", "Cai", "Shu", "Beng", "Kan", "Zhi", "Duo", "Yi", "Zhi", "Yi", "Pei", "Ji", "Zhun", "Qi", "Sao", "Ju", "Ni"], ["Ku", "Ke", "Tang", "Kun", "Ni", "Jian", "Dui", "Jin", "Gang", "Yu", "E", "Peng", "Gu", "Tu", "Leng", , "Ya", "Qian", , "An", , "Duo", "Nao", "Tu", "Cheng", "Yin", "Hun", "Bi", "Lian", "Guo", "Die", "Zhuan", "Hou", "Bao", "Bao", "Yu", "Di", "Mao", "Jie", "Ruan", "E", "Geng", "Kan", "Zong", "Yu", "Huang", "E", "Yao", "Yan", "Bao", "Ji", "Mei", "Chang", "Du", "Tuo", "Yin", "Feng", "Zhong", "Jie", "Zhen", "Feng", "Gang", "Chuan", "Jian", "Pyeng", "Toride", "Xiang", "Huang", "Leng", "Duan", , "Xuan", "Ji", "Ji", "Kuai", "Ying", "Ta", "Cheng", "Yong", "Kai", "Su", "Su", "Shi", "Mi", "Ta", "Weng", "Cheng", "Tu", "Tang", "Que", "Zhong", "Li", "Peng", "Bang", "Sai", "Zang", "Dui", "Tian", "Wu", "Cheng", "Xun", "Ge", "Zhen", "Ai", "Gong", "Yan", "Kan", "Tian", "Yuan", "Wen", "Xie", "Liu", "Ama", "Lang", "Chang", "Peng", "Beng", "Chen", "Cu", "Lu", "Ou", "Qian", "Mei", "Mo", "Zhuan", "Shuang", "Shu", "Lou", "Chi", "Man", "Biao", "Jing", "Qi", "Shu", "Di", "Zhang", "Kan", "Yong", "Dian", "Chen", "Zhi", "Xi", "Guo", "Qiang", "Jin", "Di", "Shang", "Mu", "Cui", "Yan", "Ta", "Zeng", "Qi", "Qiang", "Liang", , "Zhui", "Qiao", "Zeng", "Xu", "Shan", "Shan", "Ba", "Pu", "Kuai", "Dong", "Fan", "Que", "Mo", "Dun", "Dun", "Dun", "Di", "Sheng", "Duo", "Duo", "Tan", "Deng", "Wu", "Fen", "Huang", "Tan", "Da", "Ye", "Sho", "Mama", "Yu", "Qiang", "Ji", "Qiao", "Ken", "Yi", "Pi", "Bi", "Dian", "Jiang", "Ye", "Yong", "Bo", "Tan", "Lan", "Ju", "Huai", "Dang", "Rang", "Qian", "Xun", "Lan", "Xi", "He", "Ai", "Ya", "Dao", "Hao", "Ruan", "Mama", "Lei", "Kuang", "Lu", "Yan", "Tan", "Wei", "Huai", "Long", "Long", "Rui", "Li", "Lin", "Rang", "Ten", "Xun", "Yan", "Lei", "Ba", , "Shi", "Ren", , "Zhuang", "Zhuang", "Sheng", "Yi", "Mai", "Ke", "Zhu", "Zhuang", "Hu", "Hu", "Kun", "Yi", "Hu", "Xu", "Kun", "Shou", "Mang", "Zun"], ["Shou", "Yi", "Zhi", "Gu", "Chu", "Jiang", "Feng", "Bei", "Cay", "Bian", "Sui", "Qun", "Ling", "Fu", "Zuo", "Xia", "Xiong", , "Nao", "Xia", "Kui", "Xi", "Wai", "Yuan", "Mao", "Su", "Duo", "Duo", "Ye", "Qing", "Uys", "Gou", "Gou", "Qi", "Meng", "Meng", "Yin", "Huo", "Chen", "Da", "Ze", "Tian", "Tai", "Fu", "Guai", "Yao", "Yang", "Hang", "Gao", "Shi", "Ben", "Tai", "Tou", "Yan", "Bi", "Yi", "Kua", "Jia", "Duo", "Kwu", "Kuang", "Yun", "Jia", "Pa", "En", "Lian", "Huan", "Di", "Yan", "Pao", "Quan", "Qi", "Nai", "Feng", "Xie", "Fen", "Dian", , "Kui", "Zou", "Huan", "Qi", "Kai", "Zha", "Ben", "Yi", "Jiang", "Tao", "Zang", "Ben", "Xi", "Xiang", "Fei", "Diao", "Xun", "Keng", "Dian", "Ao", "She", "Weng", "Pan", "Ao", "Wu", "Ao", "Jiang", "Lian", "Duo", "Yun", "Jiang", "Shi", "Fen", "Huo", "Bi", "Lian", "Duo", "Nu", "Nu", "Ding", "Nai", "Qian", "Jian", "Ta", "Jiu", "Nan", "Cha", "Hao", "Xian", "Fan", "Ji", "Shuo", "Ru", "Fei", "Wang", "Hong", "Zhuang", "Fu", "Ma", "Dan", "Ren", "Fu", "Jing", "Yan", "Xie", "Wen", "Zhong", "Pa", "Du", "Ji", "Keng", "Zhong", "Yao", "Jin", "Yun", "Miao", "Pei", "Shi", "Yue", "Zhuang", "Niu", "Yan", "Na", "Xin", "Fen", "Bi", "Yu", "Tuo", "Feng", "Yuan", "Fang", "Wu", "Yu", "Gui", "Du", "Ba", "Ni", "Zhou", "Zhuo", "Zhao", "Da", "Nai", "Yuan", "Tou", "Xuan", "Zhi", "E", "Mei", "Mo", "Qi", "Bi", "Shen", "Qie", "E", "He", "Xu", "Fa", "Zheng", "Min", "Ban", "Mu", "Fu", "Ling", "Zi", "Zi", "Shi", "Ran", "Shan", "Yang", "Man", "Jie", "Gu", "Si", "Xing", "Wei", "Zi", "Ju", "Shan", "Pin", "Ren", "Yao", "Tong", "Jiang", "Shu", "Ji", "Gai", "Shang", "Kuo", "Juan", "Jiao", "Gou", "Mu", "Jian", "Jian", "Yi", "Nian", "Zhi", "Ji", "Ji", "Xian", "Heng", "Guang", "Jun", "Kua", "Yan", "Ming", "Lie", "Pei", "Yan", "You", "Yan", "Cha", "Shen", "Yin", "Chi", "Gui", "Quan", "Zi"], ["Song", "Wei", "Hong", "Wa", "Lou", "Ya", "Rao", "Jiao", "Luan", "Ping", "Xian", "Shao", "Li", "Cheng", "Xiao", "Mang", "Fu", "Suo", "Wu", "Wei", "Ke", "Lai", "Chuo", "Ding", "Niang", "Xing", "Nan", "Yu", "Nuo", "Pei", "Nei", "Juan", "Shen", "Zhi", "Han", "Di", "Zhuang", "E", "Pin", "Tui", "Han", "Mian", "Wu", "Yan", "Wu", "Xi", "Yan", "Yu", "Si", "Yu", "Wa", , "Xian", "Ju", "Qu", "Shui", "Qi", "Xian", "Zhui", "Dong", "Chang", "Lu", "Ai", "E", "E", "Lou", "Mian", "Cong", "Pou", "Ju", "Po", "Cai", "Ding", "Wan", "Biao", "Xiao", "Shu", "Qi", "Hui", "Fu", "E", "Wo", "Tan", "Fei", "Wei", "Jie", "Tian", "Ni", "Quan", "Jing", "Hun", "Jing", "Qian", "Dian", "Xing", "Hu", "Wa", "Lai", "Bi", "Yin", "Chou", "Chuo", "Fu", "Jing", "Lun", "Yan", "Lan", "Kun", "Yin", "Ya", "Ju", "Li", "Dian", "Xian", "Hwa", "Hua", "Ying", "Chan", "Shen", "Ting", "Dang", "Yao", "Wu", "Nan", "Ruo", "Jia", "Tou", "Xu", "Yu", "Wei", "Ti", "Rou", "Mei", "Dan", "Ruan", "Qin", "Hui", "Wu", "Qian", "Chun", "Mao", "Fu", "Jie", "Duan", "Xi", "Zhong", "Mei", "Huang", "Mian", "An", "Ying", "Xuan", "Jie", "Wei", "Mei", "Yuan", "Zhen", "Qiu", "Ti", "Xie", "Tuo", "Lian", "Mao", "Ran", "Si", "Pian", "Wei", "Wa", "Jiu", "Hu", "Ao", , "Bou", "Xu", "Tou", "Gui", "Zou", "Yao", "Pi", "Xi", "Yuan", "Ying", "Rong", "Ru", "Chi", "Liu", "Mei", "Pan", "Ao", "Ma", "Gou", "Kui", "Qin", "Jia", "Sao", "Zhen", "Yuan", "Cha", "Yong", "Ming", "Ying", "Ji", "Su", "Niao", "Xian", "Tao", "Pang", "Lang", "Nao", "Bao", "Ai", "Pi", "Pin", "Yi", "Piao", "Yu", "Lei", "Xuan", "Man", "Yi", "Zhang", "Kang", "Yong", "Ni", "Li", "Di", "Gui", "Yan", "Jin", "Zhuan", "Chang", "Ce", "Han", "Nen", "Lao", "Mo", "Zhe", "Hu", "Hu", "Ao", "Nen", "Qiang", "Ma", "Pie", "Gu", "Wu", "Jiao", "Tuo", "Zhan", "Mao", "Xian", "Xian", "Mo", "Liao", "Lian", "Hua"], ["Gui", "Deng", "Zhi", "Xu", "Yi", "Hua", "Xi", "Hui", "Rao", "Xi", "Yan", "Chan", "Jiao", "Mei", "Fan", "Fan", "Xian", "Yi", "Wei", "Jiao", "Fu", "Shi", "Bi", "Shan", "Sui", "Qiang", "Lian", "Huan", "Xin", "Niao", "Dong", "Yi", "Can", "Ai", "Niang", "Neng", "Ma", "Tiao", "Chou", "Jin", "Ci", "Yu", "Pin", "Yong", "Xu", "Nai", "Yan", "Tai", "Ying", "Can", "Niao", "Wo", "Ying", "Mian", "Kaka", "Ma", "Shen", "Xing", "Ni", "Du", "Liu", "Yuan", "Lan", "Yan", "Shuang", "Ling", "Jiao", "Niang", "Lan", "Xian", "Ying", "Shuang", "Shuai", "Quan", "Mi", "Li", "Luan", "Yan", "Zhu", "Lan", "Zi", "Jie", "Jue", "Jue", "Kong", "Yun", "Zi", "Zi", "Cun", "Sun", "Fu", "Bei", "Zi", "Xiao", "Xin", "Meng", "Si", "Tai", "Bao", "Ji", "Gu", "Nu", "Xue", , "Zhuan", "Hai", "Luan", "Sun", "Huai", "Mie", "Cong", "Qian", "Shu", "Chan", "Ya", "Zi", "Ni", "Fu", "Zi", "Li", "Xue", "Bo", "Ru", "Lai", "Nie", "Nie", "Ying", "Luan", "Mian", "Ning", "Rong", "Ta", "Gui", "Zhai", "Qiong", "Yu", "Shou", "An", "Tu", "Song", "Wan", "Rou", "Yao", "Hong", "Yi", "Jing", "Zhun", "Mi", "Zhu", "Dang", "Hong", "Zong", "Guan", "Zhou", "Ding", "Wan", "Yi", "Bao", "Shi", "Shi", "Chong", "Shen", "Ke", "Xuan", "Shi", "You", "Huan", "Yi", "Tiao", "Shi", "Xian", "Gong", "Cheng", "Qun", "Gong", "Xiao", "Zai", "Zha", "Bao", "Hai", "Yan", "Xiao", "Jia", "Shen", "Chen", "Rong", "Huang", "Mi", "Kou", "Kuan", "Bin", "Su", "Cai", "Zan", "Ji", "Yuan", "Ji", "Yin", "Mi", "Kou", "Qing", "Que", "Zhen", "Jian", "Fu", "Ning", "Bing", "Huan", "Mei", "Qin", "Han", "Yu", "Shi", "Ning", "Qin", "Ning", "Zhi", "Yu", "Bao", "Kuan", "Ning", "Qin", "Mo", "Cha", "Ju", "Gua", "Qin", "Hu", "Wu", "Liao", "Shi", "Zhu", "Zhai", "Shen", "Wei", "Xie", "Kuan", "Hui", "Liao", "Jun", "Huan", "Yi", "Yi", "Bao", "Qin", "Chong", "Bao", "Feng", "Cun", "Dui", "Si", "Xun", "Dao", "Lu", "Dui", "Shou"], ["Po", "Feng", "Zhuan", "Fu", "She", "Ke", "Jiang", "Jiang", "Zhuan", "Wei", "Zun", "Xun", "Shu", "Dui", "Dao", "Xiao", "Ji", "Shao", "Er", "Er", "Er", "Ga", "Jian", "Shu", "Chen", "Shang", "Shang", "Mo", "Ga", "Chang", "Liao", "Xian", "Xian", , "Wang", "Wang", "You", "Liao", "Liao", "Yao", "Mang", "Wang", "Wang", "Wang", "Ga", "Yao", "Duo", "Kui", "Zhong", "Jiu", "Gan", "Gu", "Gan", "Tui", "Gan", "Gan", "Shi", "Yin", "Chi", "Kao", "Ni", "Jin", "Wei", "Niao", "Ju", "Pi", "Ceng", "Xi", "Bi", "Ju", "Jie", "Tian", "Qu", "Ti", "Jie", "Wu", "Diao", "Shi", "Shi", "Ping", "Ji", "Xie", "Chen", "Xi", "Ni", "Zhan", "Xi", , "Man", "E", "Lou", "Ping", "Ti", "Fei", "Shu", "Xie", "Tu", "Lu", "Lu", "Xi", "Ceng", "Lu", "Ju", "Xie", "Ju", "Jue", "Liao", "Jue", "Shu", "Xi", "Che", "Tun", "Ni", "Shan", , "Xian", "Li", "Xue", "Nata", , "Long", "Yi", "Qi", "Ren", "Wu", "Han", "Shen", "Yu", "Chu", "Sui", "Qi", , "Yue", "Ban", "Yao", "Ang", "Ya", "Wu", "Jie", "E", "Ji", "Qian", "Fen", "Yuan", "Qi", "Cen", "Qian", "Qi", "Cha", "Jie", "Qu", "Gang", "Xian", "Ao", "Lan", "Dao", "Ba", "Zuo", "Zuo", "Yang", "Ju", "Gang", "Ke", "Gou", "Xue", "Bei", "Li", "Tiao", "Ju", "Yan", "Fu", "Xiu", "Jia", "Ling", "Tuo", "Pei", "You", "Dai", "Kuang", "Yue", "Qu", "Hu", "Po", "Min", "An", "Tiao", "Ling", "Chi", "Yuri", "Dong", "Cem", "Kui", "Xiu", "Mao", "Tong", "Xue", "Yi", "Kura", "He", "Ke", "Luo", "E", "Fu", "Xun", "Die", "Lu", "An", "Er", "Gai", "Quan", "Tong", "Yi", "Mu", "Shi", "An", "Wei", "Hu", "Zhi", "Mi", "Li", "Ji", "Tong", "Wei", "You", "Sang", "Xia", "Li", "Yao", "Jiao", "Zheng", "Luan", "Jiao", "E", "E", "Yu", "Ye", "Bu", "Qiao", "Qun", "Feng", "Feng", "Nao", "Li", "You", "Xian", "Hong", "Dao", "Shen", "Cheng", "Tu", "Geng", "Jun", "Hao", "Xia", "Yin", "Yu"], ["Lang", "Kan", "Lao", "Lai", "Xian", "Que", "Kong", "Chong", "Chong", "Ta", "Lin", "Hua", "Ju", "Lai", "Qi", "Min", "Kun", "Kun", "Zu", "Gu", "Cui", "Ya", "Ya", "Gang", "Lun", "Lun", "Leng", "Jue", "Duo", "Zheng", "Guo", "Yin", "Dong", "Han", "Zheng", "Wei", "Yao", "Pi", "Yan", "Song", "Jie", "Beng", "Zu", "Jue", "Dong", "Zhan", "Gu", "Yin", , "Ze", "Huang", "Yu", "Wei", "Yang", "Feng", "Qiu", "Dun", "Ti", "Yi", "Zhi", "Shi", "Zai", "Yao", "E", "Zhu", "Kan", "Lu", "Yan", "Mei", "Gan", "Ji", "Ji", "Huan", "Ting", "Sheng", "Mei", "Qian", "Wu", "Yu", "Zong", "Lan", "Jue", "Yan", "Yan", "Wei", "Zong", "Cha", "Sui", "Rong", "Yamashina", "Qin", "Yu", "Kewashii", "Lou", "Tu", "Dui", "Xi", "Weng", "Cang", "Dang", "Hong", "Jie", "Ai", "Liu", "Wu", "Song", "Qiao", "Zi", "Wei", "Beng", "Dian", "Cuo", "Qian", "Yong", "Nie", "Cuo", "Ji", , "Tao", "Song", "Zong", "Jiang", "Liao", "Kang", "Chan", "Die", "Cen", "Ding", "Tu", "Lou", "Zhang", "Zhan", "Zhan", "Ao", "Cao", "Qu", "Qiang", "Zui", "Zui", "Dao", "Dao", "Xi", "Yu", "Bo", "Long", "Xiang", "Ceng", "Bo", "Qin", "Jiao", "Yan", "Lao", "Zhan", "Lin", "Liao", "Liao", "Jin", "Deng", "Duo", "Zun", "Jiao", "Gui", "Yao", "Qiao", "Yao", "Jue", "Zhan", "Yi", "Xue", "Nao", "Ye", "Ye", "Yi", "E", "Xian", "Ji", "Xie", "Ke", "Xi", "Di", "Ao", "Zui", , "Ni", "Rong", "Dao", "Ling", "Za", "Yu", "Yue", "Yin", , "Jie", "Li", "Sui", "Long", "Long", "Dian", "Ying", "Xi", "Ju", "Chan", "Ying", "Kui", "Yan", "Wei", "Nao", "Quan", "Chao", "Cuan", "Luan", "Dian", "Dian", , "Yan", "Yan", "Yan", "Nao", "Yan", "Chuan", "Gui", "Chuan", "Zhou", "Huang", "Jing", "Xun", "Chao", "Chao", "Lie", "Gong", "Zuo", "Qiao", "Ju", "Gong", "Kek", "Wu", "Pwu", "Pwu", "Chai", "Qiu", "Qiu", "Ji", "Yi", "Si", "Ba", "Zhi", "Zhao", "Xiang", "Yi", "Jin", "Xun", "Juan", "Phas", "Xun", "Jin", "Fu"], ["Za", "Bi", "Shi", "Bu", "Ding", "Shuai", "Fan", "Nie", "Shi", "Fen", "Pa", "Zhi", "Xi", "Hu", "Dan", "Wei", "Zhang", "Tang", "Dai", "Ma", "Pei", "Pa", "Tie", "Fu", "Lian", "Zhi", "Zhou", "Bo", "Zhi", "Di", "Mo", "Yi", "Yi", "Ping", "Qia", "Juan", "Ru", "Shuai", "Dai", "Zheng", "Shui", "Qiao", "Zhen", "Shi", "Qun", "Xi", "Bang", "Dai", "Gui", "Chou", "Ping", "Zhang", "Sha", "Wan", "Dai", "Wei", "Chang", "Sha", "Qi", "Ze", "Guo", "Mao", "Du", "Hou", "Zheng", "Xu", "Mi", "Wei", "Wo", "Fu", "Yi", "Bang", "Ping", "Tazuna", "Gong", "Pan", "Huang", "Dao", "Mi", "Jia", "Teng", "Hui", "Zhong", "Shan", "Man", "Mu", "Biao", "Guo", "Ze", "Mu", "Bang", "Zhang", "Jiong", "Chan", "Fu", "Zhi", "Hu", "Fan", "Chuang", "Bi", "Hei", , "Mi", "Qiao", "Chan", "Fen", "Meng", "Bang", "Chou", "Mie", "Chu", "Jie", "Xian", "Lan", "Gan", "Ping", "Nian", "Qian", "Bing", "Bing", "Xing", "Gan", "Yao", "Huan", "You", "You", "Ji", "Guang", "Pi", "Ting", "Ze", "Guang", "Zhuang", "Mo", "Qing", "Bi", "Qin", "Dun", "Chuang", "Gui", "Ya", "Bai", "Jie", "Xu", "Lu", "Wu", , "Ku", "Ying", "Di", "Pao", "Dian", "Ya", "Miao", "Geng", "Ci", "Fu", "Tong", "Pang", "Fei", "Xiang", "Yi", "Zhi", "Tiao", "Zhi", "Xiu", "Du", "Zuo", "Xiao", "Tu", "Gui", "Ku", "Pang", "Ting", "You", "Bu", "Ding", "Cheng", "Lai", "Bei", "Ji", "An", "Shu", "Kang", "Yong", "Tuo", "Song", "Shu", "Qing", "Yu", "Yu", "Miao", "Sou", "Ce", "Xiang", "Fei", "Jiu", "He", "Hui", "Liu", "Sha", "Lian", "Lang", "Sou", "Jian", "Pou", "Qing", "Jiu", "Jiu", "Qin", "Ao", "Kuo", "Lou", "Yin", "Liao", "Dai", "Lu", "Yi", "Chu", "Chan", "Tu", "Si", "Xin", "Miao", "Chang", "Wu", "Fei", "Guang", "Koc", "Kuai", "Bi", "Qiang", "Xie", "Lin", "Lin", "Liao", "Lu", , "Ying", "Xian", "Ting", "Yong", "Li", "Ting", "Yin", "Xun", "Yan", "Ting", "Di", "Po", "Jian", "Hui", "Nai", "Hui", "Gong", "Nian"], ["Kai", "Bian", "Yi", "Qi", "Nong", "Fen", "Ju", "Yan", "Yi", "Zang", "Bi", "Yi", "Yi", "Er", "San", "Shi", "Er", "Shi", "Shi", "Gong", "Diao", "Yin", "Hu", "Fu", "Hong", "Wu", "Tui", "Chi", "Jiang", "Ba", "Shen", "Di", "Zhang", "Jue", "Tao", "Fu", "Di", "Mi", "Xian", "Hu", "Chao", "Nu", "Jing", "Zhen", "Yi", "Mi", "Quan", "Wan", "Shao", "Ruo", "Xuan", "Jing", "Dun", "Zhang", "Jiang", "Qiang", "Peng", "Dan", "Qiang", "Bi", "Bi", "She", "Dan", "Jian", "Gou", "Sei", "Fa", "Bi", "Kou", "Nagi", "Bie", "Xiao", "Dan", "Kuo", "Qiang", "Hong", "Mi", "Kuo", "Wan", "Jue", "Ji", "Ji", "Gui", "Dang", "Lu", "Lu", "Tuan", "Hui", "Zhi", "Hui", "Hui", "Yi", "Yi", "Yi", "Yi", "Huo", "Huo", "Shan", "Xing", "Wen", "Tong", "Yan", "Yan", "Yu", "Chi", "Cai", "Biao", "Diao", "Bin", "Peng", "Yong", "Piao", "Zhang", "Ying", "Chi", "Chi", "Zhuo", "Tuo", "Ji", "Pang", "Zhong", "Yi", "Wang", "Che", "Bi", "Chi", "Ling", "Fu", "Wang", "Zheng", "Cu", "Wang", "Jing", "Dai", "Xi", "Xun", "Hen", "Yang", "Huai", "Lu", "Hou", "Wa", "Cheng", "Zhi", "Xu", "Jing", "Tu", "Cong", , "Lai", "Cong", "De", "Pai", "Xi", , "Qi", "Chang", "Zhi", "Cong", "Zhou", "Lai", "Yu", "Xie", "Jie", "Jian", "Chi", "Jia", "Bian", "Huang", "Fu", "Xun", "Wei", "Pang", "Yao", "Wei", "Xi", "Zheng", "Piao", "Chi", "De", "Zheng", "Zheng", "Bie", "De", "Chong", "Che", "Jiao", "Wei", "Jiao", "Hui", "Mei", "Long", "Xiang", "Bao", "Qu", "Xin", "Shu", "Bi", "Yi", "Le", "Ren", "Dao", "Ding", "Gai", "Ji", "Ren", "Ren", "Chan", "Tan", "Te", "Te", "Gan", "Qi", "Shi", "Cun", "Zhi", "Wang", "Mang", "Xi", "Fan", "Ying", "Tian", "Min", "Min", "Zhong", "Chong", "Wu", "Ji", "Wu", "Xi", "Ye", "You", "Wan", "Cong", "Zhong", "Kuai", "Yu", "Bian", "Zhi", "Qi", "Cui", "Chen", "Tai", "Tun", "Qian", "Nian", "Hun", "Xiong", "Niu", "Wang", "Xian", "Xin", "Kang", "Hu", "Kai", "Fen"], ["Huai", "Tai", "Song", "Wu", "Ou", "Chang", "Chuang", "Ju", "Yi", "Bao", "Chao", "Min", "Pei", "Zuo", "Zen", "Yang", "Kou", "Ban", "Nu", "Nao", "Zheng", "Pa", "Bu", "Tie", "Gu", "Hu", "Ju", "Da", "Lian", "Si", "Chou", "Di", "Dai", "Yi", "Tu", "You", "Fu", "Ji", "Peng", "Xing", "Yuan", "Ni", "Guai", "Fu", "Xi", "Bi", "You", "Qie", "Xuan", "Cong", "Bing", "Huang", "Xu", "Chu", "Pi", "Xi", "Xi", "Tan", "Koraeru", "Zong", "Dui", , "Ki", "Yi", "Chi", "Ren", "Xun", "Shi", "Xi", "Lao", "Heng", "Kuang", "Mu", "Zhi", "Xie", "Lian", "Tiao", "Huang", "Die", "Hao", "Kong", "Gui", "Heng", "Xi", "Xiao", "Shu", "S", "Kua", "Qiu", "Yang", "Hui", "Hui", "Chi", "Jia", "Yi", "Xiong", "Guai", "Lin", "Hui", "Zi", "Xu", "Chi", "Xiang", "Nu", "Hen", "En", "Ke", "Tong", "Tian", "Gong", "Quan", "Xi", "Qia", "Yue", "Peng", "Ken", "De", "Hui", "E", "Kyuu", "Tong", "Yan", "Kai", "Ce", "Nao", "Yun", "Mang", "Yong", "Yong", "Yuan", "Pi", "Kun", "Qiao", "Yue", "Yu", "Yu", "Jie", "Xi", "Zhe", "Lin", "Ti", "Han", "Hao", "Qie", "Ti", "Bu", "Yi", "Qian", "Hui", "Xi", "Bei", "Man", "Yi", "Heng", "Song", "Quan", "Cheng", "Hui", "Wu", "Wu", "You", "Li", "Liang", "Huan", "Cong", "Yi", "Yue", "Li", "Nin", "Nao", "E", "Que", "Xuan", "Qian", "Wu", "Min", "Cong", "Fei", "Bei", "Duo", "Cui", "Chang", "Men", "Li", "Ji", "Guan", "Guan", "Xing", "Dao", "Qi", "Kong", "Tian", "Lun", "Xi", "Kan", "Kun", "Ni", "Qing", "Chou", "Dun", "Guo", "Chan", "Liang", "Wan", "Yuan", "Jin", "Ji", "Lin", "Yu", "Huo", "He", "Quan", "Tan", "Ti", "Ti", "Nie", "Wang", "Chuo", "Bu", "Hun", "Xi", "Tang", "Xin", "Wei", "Hui", "E", "Rui", "Zong", "Jian", "Yong", "Dian", "Ju", "Can", "Cheng", "De", "Bei", "Qie", "Can", "Dan", "Guan", "Duo", "Nao", "Yun", "Xiang", "Zhui", "Die", "Huang", "Chun", "Qiong", "Re", "Xing", "Ce", "Bian", "Hun", "Zong", "Ti"], ["Qiao", "Chou", "Bei", "Xuan", "Wei", "Ge", "Qian", "Wei", "Yu", "Yu", "Bi", "Xuan", "Huan", "Min", "Bi", "Yi", "Mian", "Yong", "Kai", "Dang", "Yin", "E", "Chen", "Mou", "Ke", "Ke", "Yu", "Ai", "Qie", "Yan", "Nuo", "Gan", "Yun", "Zong", "Sai", "Leng", "Fen", , "Kui", "Kui", "Que", "Gong", "Yun", "Su", "Su", "Qi", "Yao", "Song", "Huang", "Ji", "Gu", "Ju", "Chuang", "Ni", "Xie", "Kai", "Zheng", "Yong", "Cao", "Sun", "Shen", "Bo", "Kai", "Yuan", "Xie", "Hun", "Yong", "Yang", "Li", "Sao", "Tao", "Yin", "Ci", "Xu", "Qian", "Tai", "Huang", "Yun", "Shen", "Ming", , "She", "Cong", "Piao", "Mo", "Mu", "Guo", "Chi", "Can", "Can", "Can", "Cui", "Min", "Te", "Zhang", "Tong", "Ao", "Shuang", "Man", "Guan", "Que", "Zao", "Jiu", "Hui", "Kai", "Lian", "Ou", "Song", "Jin", "Yin", "Lu", "Shang", "Wei", "Tuan", "Man", "Qian", "She", "Yong", "Qing", "Kang", "Di", "Zhi", "Lou", "Juan", "Qi", "Qi", "Yu", "Ping", "Liao", "Cong", "You", "Chong", "Zhi", "Tong", "Cheng", "Qi", "Qu", "Peng", "Bei", "Bie", "Chun", "Jiao", "Zeng", "Chi", "Lian", "Ping", "Kui", "Hui", "Qiao", "Cheng", "Yin", "Yin", "Xi", "Xi", "Dan", "Tan", "Duo", "Dui", "Dui", "Su", "Jue", "Ce", "Xiao", "Fan", "Fen", "Lao", "Lao", "Chong", "Han", "Qi", "Xian", "Min", "Jing", "Liao", "Wu", "Can", "Jue", "Cu", "Xian", "Tan", "Sheng", "Pi", "Yi", "Chu", "Xian", "Nao", "Dan", "Tan", "Jing", "Song", "Han", "Jiao", "Wai", "Huan", "Dong", "Qin", "Qin", "Qu", "Cao", "Ken", "Xie", "Ying", "Ao", "Mao", "Yi", "Lin", "Se", "Jun", "Huai", "Men", "Lan", "Ai", "Lin", "Yan", "Gua", "Xia", "Chi", "Yu", "Yin", "Dai", "Meng", "Ai", "Meng", "Dui", "Qi", "Mo", "Lan", "Men", "Chou", "Zhi", "Nuo", "Nuo", "Yan", "Yang", "Bo", "Zhi", "Kuang", "Kuang", "You", "Fu", "Liu", "Mie", "Cheng", , "Chan", "Meng", "Lan", "Huai", "Xuan", "Rang", "Chan", "Ji", "Ju", "Huan", "She", "Yi"], ["Lian", "Nan", "Mi", "Tang", "Jue", "Gang", "Gang", "Gang", "Ge", "Yue", "Wu", "Jian", "Xu", "Shu", "Rong", "Xi", "Cheng", "Wo", "Jie", "Ge", "Jian", "Qiang", "Huo", "Qiang", "Zhan", "Dong", "Qi", "Jia", "Die", "Zei", "Jia", "Ji", "Shi", "Kan", "Ji", "Kui", "Gai", "Deng", "Zhan", "Chuang", "Ge", "Jian", "Jie", "Yu", "Jian", "Yan", "Lu", "Xi", "Zhan", "Xi", "Xi", "Chuo", "Dai", "Qu", "Hu", "Hu", "Hu", "E", "Shi", "Li", "Mao", "Hu", "Li", "Fang", "Suo", "Bian", "Dian", "Jiong", "Shang", "Yi", "Yi", "Shan", "Hu", "Fei", "Yan", "Shou", "T", "Cai", "Zha", "Qiu", "Le", "Bu", "Ba", "Da", "Reng", "Fu", "Hameru", "Zai", "Tuo", "Zhang", "Diao", "Kang", "Yu", "Ku", "Han", "Shen", "Cha", "Yi", "Gu", "Kou", "Wu", "Tuo", "Qian", "Zhi", "Ren", "Kuo", "Men", "Sao", "Yang", "Niu", "Ban", "Che", "Rao", "Xi", "Qian", "Ban", "Jia", "Yu", "Fu", "Ao", "Xi", "Pi", "Zhi", "Zi", "E", "Dun", "Zhao", "Cheng", "Ji", "Yan", "Kuang", "Bian", "Chao", "Ju", "Wen", "Hu", "Yue", "Jue", "Ba", "Qin", "Zhen", "Zheng", "Yun", "Wan", "Nu", "Yi", "Shu", "Zhua", "Pou", "Tou", "Dou", "Kang", "Zhe", "Pou", "Fu", "Pao", "Ba", "Ao", "Ze", "Tuan", "Kou", "Lun", "Qiang", , "Hu", "Bao", "Bing", "Zhi", "Peng", "Tan", "Pu", "Pi", "Tai", "Yao", "Zhen", "Zha", "Yang", "Bao", "He", "Ni", "Yi", "Di", "Chi", "Pi", "Za", "Mo", "Mo", "Shen", "Ya", "Chou", "Qu", "Min", "Chu", "Jia", "Fu", "Zhan", "Zhu", "Dan", "Chai", "Mu", "Nian", "La", "Fu", "Pao", "Ban", "Pai", "Ling", "Na", "Guai", "Qian", "Ju", "Tuo", "Ba", "Tuo", "Tuo", "Ao", "Ju", "Zhuo", "Pan", "Zhao", "Bai", "Bai", "Di", "Ni", "Ju", "Kuo", "Long", "Jian", , "Yong", "Lan", "Ning", "Bo", "Ze", "Qian", "Hen", "Gua", "Shi", "Jie", "Zheng", "Nin", "Gong", "Gong", "Quan", "Shuan", "Cun", "Zan", "Kao", "Chi", "Xie", "Ce", "Hui", "Pin", "Zhuai", "Shi", "Na"], ["Bo", "Chi", "Gua", "Zhi", "Kuo", "Duo", "Duo", "Zhi", "Qie", "An", "Nong", "Zhen", "Ge", "Jiao", "Ku", "Dong", "Ru", "Tiao", "Lie", "Zha", "Lu", "Die", "Wa", "Jue", "Mushiru", "Ju", "Zhi", "Luan", "Ya", "Zhua", "Ta", "Xie", "Nao", "Dang", "Jiao", "Zheng", "Ji", "Hui", "Xun", "Ku", "Ai", "Tuo", "Nuo", "Cuo", "Bo", "Geng", "Ti", "Zhen", "Cheng", "Suo", "Suo", "Keng", "Mei", "Long", "Ju", "Peng", "Jian", "Yi", "Ting", "Shan", "Nuo", "Wan", "Xie", "Cha", "Feng", "Jiao", "Wu", "Jun", "Jiu", "Tong", "Kun", "Huo", "Tu", "Zhuo", "Pou", "Le", "Ba", "Han", "Shao", "Nie", "Juan", "Ze", "Song", "Ye", "Jue", "Bu", "Huan", "Bu", "Zun", "Yi", "Zhai", "Lu", "Sou", "Tuo", "Lao", "Sun", "Bang", "Jian", "Huan", "Dao", , "Wan", "Qin", "Peng", "She", "Lie", "Min", "Men", "Fu", "Bai", "Ju", "Dao", "Wo", "Ai", "Juan", "Yue", "Zong", "Chen", "Chui", "Jie", "Tu", "Ben", "Na", "Nian", "Nuo", "Zu", "Wo", "Xi", "Xian", "Cheng", "Dian", "Sao", "Lun", "Qing", "Gang", "Duo", "Shou", "Diao", "Pou", "Di", "Zhang", "Gun", "Ji", "Tao", "Qia", "Qi", "Pai", "Shu", "Qian", "Ling", "Yi", "Ya", "Jue", "Zheng", "Liang", "Gua", "Yi", "Huo", "Shan", "Zheng", "Lue", "Cai", "Tan", "Che", "Bing", "Jie", "Ti", "Kong", "Tui", "Yan", "Cuo", "Zou", "Ju", "Tian", "Qian", "Ken", "Bai", "Shou", "Jie", "Lu", "Guo", "Haba", , "Zhi", "Dan", "Mang", "Xian", "Sao", "Guan", "Peng", "Yuan", "Nuo", "Jian", "Zhen", "Jiu", "Jian", "Yu", "Yan", "Kui", "Nan", "Hong", "Rou", "Pi", "Wei", "Sai", "Zou", "Xuan", "Miao", "Ti", "Nie", "Cha", "Shi", "Zong", "Zhen", "Yi", "Shun", "Heng", "Bian", "Yang", "Huan", "Yan", "Zuan", "An", "Xu", "Ya", "Wo", "Ke", "Chuai", "Ji", "Ti", "La", "La", "Cheng", "Kai", "Jiu", "Jiu", "Tu", "Jie", "Hui", "Geng", "Chong", "Shuo", "She", "Xie", "Yuan", "Qian", "Ye", "Cha", "Zha", "Bei", "Yao", , , "Lan", "Wen", "Qin"], ["Chan", "Ge", "Lou", "Zong", "Geng", "Jiao", "Gou", "Qin", "Yong", "Que", "Chou", "Chi", "Zhan", "Sun", "Sun", "Bo", "Chu", "Rong", "Beng", "Cuo", "Sao", "Ke", "Yao", "Dao", "Zhi", "Nu", "Xie", "Jian", "Sou", "Qiu", "Gao", "Xian", "Shuo", "Sang", "Jin", "Mie", "E", "Chui", "Nuo", "Shan", "Ta", "Jie", "Tang", "Pan", "Ban", "Da", "Li", "Tao", "Hu", "Zhi", "Wa", "Xia", "Qian", "Wen", "Qiang", "Tian", "Zhen", "E", "Xi", "Nuo", "Quan", "Cha", "Zha", "Ge", "Wu", "En", "She", "Kang", "She", "Shu", "Bai", "Yao", "Bin", "Sou", "Tan", "Sa", "Chan", "Suo", "Liao", "Chong", "Chuang", "Guo", "Bing", "Feng", "Shuai", "Di", "Qi", "Sou", "Zhai", "Lian", "Tang", "Chi", "Guan", "Lu", "Luo", "Lou", "Zong", "Gai", "Hu", "Zha", "Chuang", "Tang", "Hua", "Cui", "Nai", "Mo", "Jiang", "Gui", "Ying", "Zhi", "Ao", "Zhi", "Nie", "Man", "Shan", "Kou", "Shu", "Suo", "Tuan", "Jiao", "Mo", "Mo", "Zhe", "Xian", "Keng", "Piao", "Jiang", "Yin", "Gou", "Qian", "Lue", "Ji", "Ying", "Jue", "Pie", "Pie", "Lao", "Dun", "Xian", "Ruan", "Kui", "Zan", "Yi", "Xun", "Cheng", "Cheng", "Sa", "Nao", "Heng", "Si", "Qian", "Huang", "Da", "Zun", "Nian", "Lin", "Zheng", "Hui", "Zhuang", "Jiao", "Ji", "Cao", "Dan", "Dan", "Che", "Bo", "Che", "Jue", "Xiao", "Liao", "Ben", "Fu", "Qiao", "Bo", "Cuo", "Zhuo", "Zhuan", "Tuo", "Pu", "Qin", "Dun", "Nian", , "Xie", "Lu", "Jiao", "Cuan", "Ta", "Han", "Qiao", "Zhua", "Jian", "Gan", "Yong", "Lei", "Kuo", "Lu", "Shan", "Zhuo", "Ze", "Pu", "Chuo", "Ji", "Dang", "Suo", "Cao", "Qing", "Jing", "Huan", "Jie", "Qin", "Kuai", "Dan", "Xi", "Ge", "Pi", "Bo", "Ao", "Ju", "Ye", , "Mang", "Sou", "Mi", "Ji", "Tai", "Zhuo", "Dao", "Xing", "Lan", "Ca", "Ju", "Ye", "Ru", "Ye", "Ye", "Ni", "Hu", "Ji", "Bin", "Ning", "Ge", "Zhi", "Jie", "Kuo", "Mo", "Jian", "Xie", "Lie", "Tan", "Bai", "Sou", "Lu", "Lue", "Rao", "Zhi"], ["Pan", "Yang", "Lei", "Sa", "Shu", "Zan", "Nian", "Xian", "Jun", "Huo", "Li", "La", "Han", "Ying", "Lu", "Long", "Qian", "Qian", "Zan", "Qian", "Lan", "San", "Ying", "Mei", "Rang", "Chan", , "Cuan", "Xi", "She", "Luo", "Jun", "Mi", "Li", "Zan", "Luan", "Tan", "Zuan", "Li", "Dian", "Wa", "Dang", "Jiao", "Jue", "Lan", "Li", "Nang", "Zhi", "Gui", "Gui", "Qi", "Xin", "Pu", "Sui", "Shou", "Kao", "You", "Gai", "Yi", "Gong", "Gan", "Ban", "Fang", "Zheng", "Bo", "Dian", "Kou", "Min", "Wu", "Gu", "He", "Ce", "Xiao", "Mi", "Chu", "Ge", "Di", "Xu", "Jiao", "Min", "Chen", "Jiu", "Zhen", "Duo", "Yu", "Chi", "Ao", "Bai", "Xu", "Jiao", "Duo", "Lian", "Nie", "Bi", "Chang", "Dian", "Duo", "Yi", "Gan", "San", "Ke", "Yan", "Dun", "Qi", "Dou", "Xiao", "Duo", "Jiao", "Jing", "Yang", "Xia", "Min", "Shu", "Ai", "Qiao", "Ai", "Zheng", "Di", "Zhen", "Fu", "Shu", "Liao", "Qu", "Xiong", "Xi", "Jiao", "Sen", "Jiao", "Zhuo", "Yi", "Lian", "Bi", "Li", "Xiao", "Xiao", "Wen", "Xue", "Qi", "Qi", "Zhai", "Bin", "Jue", "Zhai", , "Fei", "Ban", "Ban", "Lan", "Yu", "Lan", "Wei", "Dou", "Sheng", "Liao", "Jia", "Hu", "Xie", "Jia", "Yu", "Zhen", "Jiao", "Wo", "Tou", "Chu", "Jin", "Chi", "Yin", "Fu", "Qiang", "Zhan", "Qu", "Zhuo", "Zhan", "Duan", "Zhuo", "Si", "Xin", "Zhuo", "Zhuo", "Qin", "Lin", "Zhuo", "Chu", "Duan", "Zhu", "Fang", "Xie", "Hang", "Yu", "Shi", "Pei", "You", "Mye", "Pang", "Qi", "Zhan", "Mao", "Lu", "Pei", "Pi", "Liu", "Fu", "Fang", "Xuan", "Jing", "Jing", "Ni", "Zu", "Zhao", "Yi", "Liu", "Shao", "Jian", "Es", "Yi", "Qi", "Zhi", "Fan", "Piao", "Fan", "Zhan", "Guai", "Sui", "Yu", "Wu", "Ji", "Ji", "Ji", "Huo", "Ri", "Dan", "Jiu", "Zhi", "Zao", "Xie", "Tiao", "Xun", "Xu", "Xu", "Xu", "Gan", "Han", "Tai", "Di", "Xu", "Chan", "Shi", "Kuang", "Yang", "Shi", "Wang", "Min", "Min", "Tun", "Chun", "Wu"], ["Yun", "Bei", "Ang", "Ze", "Ban", "Jie", "Kun", "Sheng", "Hu", "Fang", "Hao", "Gui", "Chang", "Xuan", "Ming", "Hun", "Fen", "Qin", "Hu", "Yi", "Xi", "Xin", "Yan", "Ze", "Fang", "Tan", "Shen", "Ju", "Yang", "Zan", "Bing", "Xing", "Ying", "Xuan", "Pei", "Zhen", "Ling", "Chun", "Hao", "Mei", "Zuo", "Mo", "Bian", "Xu", "Hun", "Zhao", "Zong", "Shi", "Shi", "Yu", "Fei", "Die", "Mao", "Ni", "Chang", "Wen", "Dong", "Ai", "Bing", "Ang", "Zhou", "Long", "Xian", "Kuang", "Tiao", "Chao", "Shi", "Huang", "Huang", "Xuan", "Kui", "Xu", "Jiao", "Jin", "Zhi", "Jin", "Shang", "Tong", "Hong", "Yan", "Gai", "Xiang", "Shai", "Xiao", "Ye", "Yun", "Hui", "Han", "Han", "Jun", "Wan", "Xian", "Kun", "Zhou", "Xi", "Cheng", "Sheng", "Bu", "Zhe", "Zhe", "Wu", "Han", "Hui", "Hao", "Chen", "Wan", "Tian", "Zhuo", "Zui", "Zhou", "Pu", "Jing", "Xi", "Shan", "Yi", "Xi", "Qing", "Qi", "Jing", "Gui", "Zhen", "Yi", "Zhi", "An", "Wan", "Lin", "Liang", "Chang", "Wang", "Xiao", "Zan", "Hi", "Xuan", "Xuan", "Yi", "Xia", "Yun", "Hui", "Fu", "Min", "Kui", "He", "Ying", "Du", "Wei", "Shu", "Qing", "Mao", "Nan", "Jian", "Nuan", "An", "Yang", "Chun", "Yao", "Suo", "Jin", "Ming", "Jiao", "Kai", "Gao", "Weng", "Chang", "Qi", "Hao", "Yan", "Li", "Ai", "Ji", "Gui", "Men", "Zan", "Xie", "Hao", "Mu", "Mo", "Cong", "Ni", "Zhang", "Hui", "Bao", "Han", "Xuan", "Chuan", "Liao", "Xian", "Dan", "Jing", "Pie", "Lin", "Tun", "Xi", "Yi", "Ji", "Huang", "Tai", "Ye", "Ye", "Li", "Tan", "Tong", "Xiao", "Fei", "Qin", "Zhao", "Hao", "Yi", "Xiang", "Xing", "Sen", "Jiao", "Bao", "Jing", "Yian", "Ai", "Ye", "Ru", "Shu", "Meng", "Xun", "Yao", "Pu", "Li", "Chen", "Kuang", "Die", , "Yan", "Huo", "Lu", "Xi", "Rong", "Long", "Nang", "Luo", "Luan", "Shai", "Tang", "Yan", "Chu", "Yue", "Yue", "Qu", "Yi", "Geng", "Ye", "Hu", "He", "Shu", "Cao", "Cao", "Noboru", "Man", "Ceng", "Ceng", "Ti"], ["Zui", "Can", "Xu", "Hui", "Yin", "Qie", "Fen", "Pi", "Yue", "You", "Ruan", "Peng", "Ban", "Fu", "Ling", "Fei", "Qu", , "Nu", "Tiao", "Shuo", "Zhen", "Lang", "Lang", "Juan", "Ming", "Huang", "Wang", "Tun", "Zhao", "Ji", "Qi", "Ying", "Zong", "Wang", "Tong", "Lang", , "Meng", "Long", "Mu", "Deng", "Wei", "Mo", "Ben", "Zha", "Zhu", "Shu", , "Zhu", "Ren", "Ba", "Po", "Duo", "Duo", "Dao", "Li", "Qiu", "Ji", "Jiu", "Bi", "Xiu", "Ting", "Ci", "Sha", "Eburi", "Za", "Quan", "Qian", "Yu", "Gan", "Wu", "Cha", "Shan", "Xun", "Fan", "Wu", "Zi", "Li", "Xing", "Cai", "Cun", "Ren", "Shao", "Tuo", "Di", "Zhang", "Mang", "Chi", "Yi", "Gu", "Gong", "Du", "Yi", "Qi", "Shu", "Gang", "Tiao", "Moku", "Soma", "Tochi", "Lai", "Sugi", "Mang", "Yang", "Ma", "Miao", "Si", "Yuan", "Hang", "Fei", "Bei", "Jie", "Dong", "Gao", "Yao", "Xian", "Chu", "Qun", "Pa", "Shu", "Hua", "Xin", "Chou", "Zhu", "Chou", "Song", "Ban", "Song", "Ji", "Yue", "Jin", "Gou", "Ji", "Mao", "Pi", "Bi", "Wang", "Ang", "Fang", "Fen", "Yi", "Fu", "Nan", "Xi", "Hu", "Ya", "Dou", "Xun", "Zhen", "Yao", "Lin", "Rui", "E", "Mei", "Zhao", "Guo", "Zhi", "Cong", "Yun", "Waku", "Dou", "Shu", "Zao", , "Li", "Haze", "Jian", "Cheng", "Matsu", "Qiang", "Feng", "Nan", "Xiao", "Xian", "Ku", "Ping", "Yi", "Xi", "Zhi", "Guai", "Xiao", "Jia", "Jia", "Gou", "Fu", "Mo", "Yi", "Ye", "Ye", "Shi", "Nie", "Bi", "Duo", "Yi", "Ling", "Bing", "Ni", "La", "He", "Pan", "Fan", "Zhong", "Dai", "Ci", "Yang", "Fu", "Bo", "Mou", "Gan", "Qi", "Ran", "Rou", "Mao", "Zhao", "Song", "Zhe", "Xia", "You", "Shen", "Ju", "Tuo", "Zuo", "Nan", "Ning", "Yong", "Di", "Zhi", "Zha", "Cha", "Dan", "Gu", "Pu", "Jiu", "Ao", "Fu", "Jian", "Bo", "Duo", "Ke", "Nai", "Zhu", "Bi", "Liu", "Chai", "Zha", "Si", "Zhu", "Pei", "Shi", "Guai", "Cha", "Yao", "Jue", "Jiu", "Shi"], ["Zhi", "Liu", "Mei", "Hoy", "Rong", "Zha", , "Biao", "Zhan", "Jie", "Long", "Dong", "Lu", "Sayng", "Li", "Lan", "Yong", "Shu", "Xun", "Shuan", "Qi", "Zhen", "Qi", "Li", "Yi", "Xiang", "Zhen", "Li", "Su", "Gua", "Kan", "Bing", "Ren", "Xiao", "Bo", "Ren", "Bing", "Zi", "Chou", "Yi", "Jie", "Xu", "Zhu", "Jian", "Zui", "Er", "Er", "You", "Fa", "Gong", "Kao", "Lao", "Zhan", "Li", "Yin", "Yang", "He", "Gen", "Zhi", "Chi", "Ge", "Zai", "Luan", "Fu", "Jie", "Hang", "Gui", "Tao", "Guang", "Wei", "Kuang", "Ru", "An", "An", "Juan", "Yi", "Zhuo", "Ku", "Zhi", "Qiong", "Tong", "Sang", "Sang", "Huan", "Jie", "Jiu", "Xue", "Duo", "Zhui", "Yu", "Zan", "Kasei", "Ying", "Masu", , "Zhan", "Ya", "Nao", "Zhen", "Dang", "Qi", "Qiao", "Hua", "Kuai", "Jiang", "Zhuang", "Xun", "Suo", "Sha", "Zhen", "Bei", "Ting", "Gua", "Jing", "Bo", "Ben", "Fu", "Rui", "Tong", "Jue", "Xi", "Lang", "Liu", "Feng", "Qi", "Wen", "Jun", "Gan", "Cu", "Liang", "Qiu", "Ting", "You", "Mei", "Bang", "Long", "Peng", "Zhuang", "Di", "Xuan", "Tu", "Zao", "Ao", "Gu", "Bi", "Di", "Han", "Zi", "Zhi", "Ren", "Bei", "Geng", "Jian", "Huan", "Wan", "Nuo", "Jia", "Tiao", "Ji", "Xiao", "Lu", "Huan", "Shao", "Cen", "Fen", "Song", "Meng", "Wu", "Li", "Li", "Dou", "Cen", "Ying", "Suo", "Ju", "Ti", "Jie", "Kun", "Zhuo", "Shu", "Chan", "Fan", "Wei", "Jing", "Li", "Bing", "Fumoto", "Shikimi", "Tao", "Zhi", "Lai", "Lian", "Jian", "Zhuo", "Ling", "Li", "Qi", "Bing", "Zhun", "Cong", "Qian", "Mian", "Qi", "Qi", "Cai", "Gun", "Chan", "Te", "Fei", "Pai", "Bang", "Pou", "Hun", "Zong", "Cheng", "Zao", "Ji", "Li", "Peng", "Yu", "Yu", "Gu", "Hun", "Dong", "Tang", "Gang", "Wang", "Di", "Xi", "Fan", "Cheng", "Zhan", "Qi", "Yuan", "Yan", "Yu", "Quan", "Yi", "Sen", "Ren", "Chui", "Leng", "Qi", "Zhuo", "Fu", "Ke", "Lai", "Zou", "Zou", "Zhuo", "Guan", "Fen", "Fen", "Chen", "Qiong", "Nie"], ["Wan", "Guo", "Lu", "Hao", "Jie", "Yi", "Chou", "Ju", "Ju", "Cheng", "Zuo", "Liang", "Qiang", "Zhi", "Zhui", "Ya", "Ju", "Bei", "Jiao", "Zhuo", "Zi", "Bin", "Peng", "Ding", "Chu", "Chang", "Kunugi", "Momiji", "Jian", "Gui", "Xi", "Du", "Qian", "Kunugi", "Soko", "Shide", "Luo", "Zhi", "Ken", "Myeng", "Tafu", , "Peng", "Zhan", , "Tuo", "Sen", "Duo", "Ye", "Fou", "Wei", "Wei", "Duan", "Jia", "Zong", "Jian", "Yi", "Shen", "Xi", "Yan", "Yan", "Chuan", "Zhan", "Chun", "Yu", "He", "Zha", "Wo", "Pian", "Bi", "Yao", "Huo", "Xu", "Ruo", "Yang", "La", "Yan", "Ben", "Hun", "Kui", "Jie", "Kui", "Si", "Feng", "Xie", "Tuo", "Zhi", "Jian", "Mu", "Mao", "Chu", "Hu", "Hu", "Lian", "Leng", "Ting", "Nan", "Yu", "You", "Mei", "Song", "Xuan", "Xuan", "Ying", "Zhen", "Pian", "Ye", "Ji", "Jie", "Ye", "Chu", "Shun", "Yu", "Cou", "Wei", "Mei", "Di", "Ji", "Jie", "Kai", "Qiu", "Ying", "Rou", "Heng", "Lou", "Le", "Hazou", "Katsura", "Pin", "Muro", "Gai", "Tan", "Lan", "Yun", "Yu", "Chen", "Lu", "Ju", "Sakaki", , "Pi", "Xie", "Jia", "Yi", "Zhan", "Fu", "Nai", "Mi", "Lang", "Rong", "Gu", "Jian", "Ju", "Ta", "Yao", "Zhen", "Bang", "Sha", "Yuan", "Zi", "Ming", "Su", "Jia", "Yao", "Jie", "Huang", "Gan", "Fei", "Zha", "Qian", "Ma", "Sun", "Yuan", "Xie", "Rong", "Shi", "Zhi", "Cui", "Yun", "Ting", "Liu", "Rong", "Tang", "Que", "Zhai", "Si", "Sheng", "Ta", "Ke", "Xi", "Gu", "Qi", "Kao", "Gao", "Sun", "Pan", "Tao", "Ge", "Xun", "Dian", "Nou", "Ji", "Shuo", "Gou", "Chui", "Qiang", "Cha", "Qian", "Huai", "Mei", "Xu", "Gang", "Gao", "Zhuo", "Tuo", "Hashi", "Yang", "Dian", "Jia", "Jian", "Zui", "Kashi", "Ori", "Bin", "Zhu", , "Xi", "Qi", "Lian", "Hui", "Yong", "Qian", "Guo", "Gai", "Gai", "Tuan", "Hua", "Cu", "Sen", "Cui", "Beng", "You", "Hu", "Jiang", "Hu", "Huan", "Kui", "Yi", "Nie", "Gao", "Kang", "Gui", "Gui", "Cao", "Man", "Jin"], ["Di", "Zhuang", "Le", "Lang", "Chen", "Cong", "Li", "Xiu", "Qing", "Shuang", "Fan", "Tong", "Guan", "Ji", "Suo", "Lei", "Lu", "Liang", "Mi", "Lou", "Chao", "Su", "Ke", "Shu", "Tang", "Biao", "Lu", "Jiu", "Shu", "Zha", "Shu", "Zhang", "Men", "Mo", "Niao", "Yang", "Tiao", "Peng", "Zhu", "Sha", "Xi", "Quan", "Heng", "Jian", "Cong", , "Hokuso", "Qiang", "Tara", "Ying", "Er", "Xin", "Zhi", "Qiao", "Zui", "Cong", "Pu", "Shu", "Hua", "Kui", "Zhen", "Zun", "Yue", "Zhan", "Xi", "Xun", "Dian", "Fa", "Gan", "Mo", "Wu", "Qiao", "Nao", "Lin", "Liu", "Qiao", "Xian", "Run", "Fan", "Zhan", "Tuo", "Lao", "Yun", "Shun", "Tui", "Cheng", "Tang", "Meng", "Ju", "Cheng", "Su", "Jue", "Jue", "Tan", "Hui", "Ji", "Nuo", "Xiang", "Tuo", "Ning", "Rui", "Zhu", "Chuang", "Zeng", "Fen", "Qiong", "Ran", "Heng", "Cen", "Gu", "Liu", "Lao", "Gao", "Chu", "Zusa", "Nude", "Ca", "San", "Ji", "Dou", "Shou", "Lu", , , "Yuan", "Ta", "Shu", "Jiang", "Tan", "Lin", "Nong", "Yin", "Xi", "Sui", "Shan", "Zui", "Xuan", "Cheng", "Gan", "Ju", "Zui", "Yi", "Qin", "Pu", "Yan", "Lei", "Feng", "Hui", "Dang", "Ji", "Sui", "Bo", "Bi", "Ding", "Chu", "Zhua", "Kuai", "Ji", "Jie", "Jia", "Qing", "Zhe", "Jian", "Qiang", "Dao", "Yi", "Biao", "Song", "She", "Lin", "Kunugi", "Cha", "Meng", "Yin", "Tao", "Tai", "Mian", "Qi", "Toan", "Bin", "Huo", "Ji", "Qian", "Mi", "Ning", "Yi", "Gao", "Jian", "Yin", "Er", "Qing", "Yan", "Qi", "Mi", "Zhao", "Gui", "Chun", "Ji", "Kui", "Po", "Deng", "Chu", , "Mian", "You", "Zhi", "Guang", "Qian", "Lei", "Lei", "Sa", "Lu", "Li", "Cuan", "Lu", "Mie", "Hui", "Ou", "Lu", "Jie", "Gao", "Du", "Yuan", "Li", "Fei", "Zhuo", "Sou", "Lian", "Tamo", "Chu", , "Zhu", "Lu", "Yan", "Li", "Zhu", "Chen", "Jie", "E", "Su", "Huai", "Nie", "Yu", "Long", "Lai", , "Xian", "Kwi", "Ju", "Xiao", "Ling", "Ying", "Jian", "Yin", "You", "Ying"], ["Xiang", "Nong", "Bo", "Chan", "Lan", "Ju", "Shuang", "She", "Wei", "Cong", "Quan", "Qu", "Cang", , "Yu", "Luo", "Li", "Zan", "Luan", "Dang", "Jue", "Em", "Lan", "Lan", "Zhu", "Lei", "Li", "Ba", "Nang", "Yu", "Ling", "Tsuki", "Qian", "Ci", "Huan", "Xin", "Yu", "Yu", "Qian", "Ou", "Xu", "Chao", "Chu", "Chi", "Kai", "Yi", "Jue", "Xi", "Xu", "Xia", "Yu", "Kuai", "Lang", "Kuan", "Shuo", "Xi", "Ai", "Yi", "Qi", "Hu", "Chi", "Qin", "Kuan", "Kan", "Kuan", "Kan", "Chuan", "Sha", "Gua", "Yin", "Xin", "Xie", "Yu", "Qian", "Xiao", "Yi", "Ge", "Wu", "Tan", "Jin", "Ou", "Hu", "Ti", "Huan", "Xu", "Pen", "Xi", "Xiao", "Xu", "Xi", "Sen", "Lian", "Chu", "Yi", "Kan", "Yu", "Chuo", "Huan", "Zhi", "Zheng", "Ci", "Bu", "Wu", "Qi", "Bu", "Bu", "Wai", "Ju", "Qian", "Chi", "Se", "Chi", "Se", "Zhong", "Sui", "Sui", "Li", "Cuo", "Yu", "Li", "Gui", "Dai", "Dai", "Si", "Jian", "Zhe", "Mo", "Mo", "Yao", "Mo", "Cu", "Yang", "Tian", "Sheng", "Dai", "Shang", "Xu", "Xun", "Shu", "Can", "Jue", "Piao", "Qia", "Qiu", "Su", "Qing", "Yun", "Lian", "Yi", "Fou", "Zhi", "Ye", "Can", "Hun", "Dan", "Ji", "Ye", "Zhen", "Yun", "Wen", "Chou", "Bin", "Ti", "Jin", "Shang", "Yin", "Diao", "Cu", "Hui", "Cuan", "Yi", "Dan", "Du", "Jiang", "Lian", "Bin", "Du", "Tsukusu", "Jian", "Shu", "Ou", "Duan", "Zhu", "Yin", "Qing", "Yi", "Sha", "Que", "Ke", "Yao", "Jun", "Dian", "Hui", "Hui", "Gu", "Que", "Ji", "Yi", "Ou", "Hui", "Duan", "Yi", "Xiao", "Wu", "Guan", "Mu", "Mei", "Mei", "Ai", "Zuo", "Du", "Yu", "Bi", "Bi", "Bi", "Pi", "Pi", "Bi", "Chan", "Mao", , , "Pu", "Mushiru", "Jia", "Zhan", "Sai", "Mu", "Tuo", "Xun", "Er", "Rong", "Xian", "Ju", "Mu", "Hao", "Qiu", "Dou", "Mushiru", "Tan", "Pei", "Ju", "Duo", "Cui", "Bi", "San", , "Mao", "Sui", "Yu", "Yu", "Tuo", "He", "Jian", "Ta", "San"], ["Lu", "Mu", "Li", "Tong", "Rong", "Chang", "Pu", "Luo", "Zhan", "Sao", "Zhan", "Meng", "Luo", "Qu", "Die", "Shi", "Di", "Min", "Jue", "Mang", "Qi", "Pie", "Nai", "Qi", "Dao", "Xian", "Chuan", "Fen", "Ri", "Nei", , "Fu", "Shen", "Dong", "Qing", "Qi", "Yin", "Xi", "Hai", "Yang", "An", "Ya", "Ke", "Qing", "Ya", "Dong", "Dan", "Lu", "Qing", "Yang", "Yun", "Yun", "Shui", "San", "Zheng", "Bing", "Yong", "Dang", "Shitamizu", "Le", "Ni", "Tun", "Fan", "Gui", "Ting", "Zhi", "Qiu", "Bin", "Ze", "Mian", "Cuan", "Hui", "Diao", "Han", "Cha", "Zhuo", "Chuan", "Wan", "Fan", "Dai", "Xi", "Tuo", "Mang", "Qiu", "Qi", "Shan", "Pai", "Han", "Qian", "Wu", "Wu", "Xun", "Si", "Ru", "Gong", "Jiang", "Chi", "Wu", "Tsuchi", , "Tang", "Zhi", "Chi", "Qian", "Mi", "Yu", "Wang", "Qing", "Jing", "Rui", "Jun", "Hong", "Tai", "Quan", "Ji", "Bian", "Bian", "Gan", "Wen", "Zhong", "Fang", "Xiong", "Jue", "Hang", "Niou", "Qi", "Fen", "Xu", "Xu", "Qin", "Yi", "Wo", "Yun", "Yuan", "Hang", "Yan", "Shen", "Chen", "Dan", "You", "Dun", "Hu", "Huo", "Qie", "Mu", "Rou", "Mei", "Ta", "Mian", "Wu", "Chong", "Tian", "Bi", "Sha", "Zhi", "Pei", "Pan", "Zhui", "Za", "Gou", "Liu", "Mei", "Ze", "Feng", "Ou", "Li", "Lun", "Cang", "Feng", "Wei", "Hu", "Mo", "Mei", "Shu", "Ju", "Zan", "Tuo", "Tuo", "Tuo", "He", "Li", "Mi", "Yi", "Fa", "Fei", "You", "Tian", "Zhi", "Zhao", "Gu", "Zhan", "Yan", "Si", "Kuang", "Jiong", "Ju", "Xie", "Qiu", "Yi", "Jia", "Zhong", "Quan", "Bo", "Hui", "Mi", "Ben", "Zhuo", "Chu", "Le", "You", "Gu", "Hong", "Gan", "Fa", "Mao", "Si", "Hu", "Ping", "Ci", "Fan", "Chi", "Su", "Ning", "Cheng", "Ling", "Pao", "Bo", "Qi", "Si", "Ni", "Ju", "Yue", "Zhu", "Sheng", "Lei", "Xuan", "Xue", "Fu", "Pan", "Min", "Tai", "Yang", "Ji", "Yong", "Guan", "Beng", "Xue", "Long", "Lu", , "Bo", "Xie", "Po", "Ze", "Jing", "Yin"], ["Zhou", "Ji", "Yi", "Hui", "Hui", "Zui", "Cheng", "Yin", "Wei", "Hou", "Jian", "Yang", "Lie", "Si", "Ji", "Er", "Xing", "Fu", "Sa", "Suo", "Zhi", "Yin", "Wu", "Xi", "Kao", "Zhu", "Jiang", "Luo", , "An", "Dong", "Yi", "Mou", "Lei", "Yi", "Mi", "Quan", "Jin", "Mo", "Wei", "Xiao", "Xie", "Hong", "Xu", "Shuo", "Kuang", "Tao", "Qie", "Ju", "Er", "Zhou", "Ru", "Ping", "Xun", "Xiong", "Zhi", "Guang", "Huan", "Ming", "Huo", "Wa", "Qia", "Pai", "Wu", "Qu", "Liu", "Yi", "Jia", "Jing", "Qian", "Jiang", "Jiao", "Cheng", "Shi", "Zhuo", "Ce", "Pal", "Kuai", "Ji", "Liu", "Chan", "Hun", "Hu", "Nong", "Xun", "Jin", "Lie", "Qiu", "Wei", "Zhe", "Jun", "Han", "Bang", "Mang", "Zhuo", "You", "Xi", "Bo", "Dou", "Wan", "Hong", "Yi", "Pu", "Ying", "Lan", "Hao", "Lang", "Han", "Li", "Geng", "Fu", "Wu", "Lian", "Chun", "Feng", "Yi", "Yu", "Tong", "Lao", "Hai", "Jin", "Jia", "Chong", "Weng", "Mei", "Sui", "Cheng", "Pei", "Xian", "Shen", "Tu", "Kun", "Pin", "Nie", "Han", "Jing", "Xiao", "She", "Nian", "Tu", "Yong", "Xiao", "Xian", "Ting", "E", "Su", "Tun", "Juan", "Cen", "Ti", "Li", "Shui", "Si", "Lei", "Shui", "Tao", "Du", "Lao", "Lai", "Lian", "Wei", "Wo", "Yun", "Huan", "Di", , "Run", "Jian", "Zhang", "Se", "Fu", "Guan", "Xing", "Shou", "Shuan", "Ya", "Chuo", "Zhang", "Ye", "Kong", "Wo", "Han", "Tuo", "Dong", "He", "Wo", "Ju", "Gan", "Liang", "Hun", "Ta", "Zhuo", "Dian", "Qie", "De", "Juan", "Zi", "Xi", "Yao", "Qi", "Gu", "Guo", "Han", "Lin", "Tang", "Zhou", "Peng", "Hao", "Chang", "Shu", "Qi", "Fang", "Chi", "Lu", "Nao", "Ju", "Tao", "Cong", "Lei", "Zhi", "Peng", "Fei", "Song", "Tian", "Pi", "Dan", "Yu", "Ni", "Yu", "Lu", "Gan", "Mi", "Jing", "Ling", "Lun", "Yin", "Cui", "Qu", "Huai", "Yu", "Nian", "Shen", "Piao", "Chun", "Wa", "Yuan", "Lai", "Hun", "Qing", "Yan", "Qian", "Tian", "Miao", "Zhi", "Yin", "Mi"], ["Ben", "Yuan", "Wen", "Re", "Fei", "Qing", "Yuan", "Ke", "Ji", "She", "Yuan", "Shibui", "Lu", "Zi", "Du", , "Jian", "Min", "Pi", "Tani", "Yu", "Yuan", "Shen", "Shen", "Rou", "Huan", "Zhu", "Jian", "Nuan", "Yu", "Qiu", "Ting", "Qu", "Du", "Feng", "Zha", "Bo", "Wo", "Wo", "Di", "Wei", "Wen", "Ru", "Xie", "Ce", "Wei", "Ge", "Gang", "Yan", "Hong", "Xuan", "Mi", "Ke", "Mao", "Ying", "Yan", "You", "Hong", "Miao", "Xing", "Mei", "Zai", "Hun", "Nai", "Kui", "Shi", "E", "Pai", "Mei", "Lian", "Qi", "Qi", "Mei", "Tian", "Cou", "Wei", "Can", "Tuan", "Mian", "Hui", "Mo", "Xu", "Ji", "Pen", "Jian", "Jian", "Hu", "Feng", "Xiang", "Yi", "Yin", "Zhan", "Shi", "Jie", "Cheng", "Huang", "Tan", "Yu", "Bi", "Min", "Shi", "Tu", "Sheng", "Yong", "Qu", "Zhong", "Suei", "Jiu", "Jiao", "Qiou", "Yin", "Tang", "Long", "Huo", "Yuan", "Nan", "Ban", "You", "Quan", "Chui", "Liang", "Chan", "Yan", "Chun", "Nie", "Zi", "Wan", "Shi", "Man", "Ying", "Ratsu", "Kui", , "Jian", "Xu", "Lu", "Gui", "Gai", , , "Po", "Jin", "Gui", "Tang", "Yuan", "Suo", "Yuan", "Lian", "Yao", "Meng", "Zhun", "Sheng", "Ke", "Tai", "Da", "Wa", "Liu", "Gou", "Sao", "Ming", "Zha", "Shi", "Yi", "Lun", "Ma", "Pu", "Wei", "Li", "Cai", "Wu", "Xi", "Wen", "Qiang", "Ze", "Shi", "Su", "Yi", "Zhen", "Sou", "Yun", "Xiu", "Yin", "Rong", "Hun", "Su", "Su", "Ni", "Ta", "Shi", "Ru", "Wei", "Pan", "Chu", "Chu", "Pang", "Weng", "Cang", "Mie", "He", "Dian", "Hao", "Huang", "Xi", "Zi", "Di", "Zhi", "Ying", "Fu", "Jie", "Hua", "Ge", "Zi", "Tao", "Teng", "Sui", "Bi", "Jiao", "Hui", "Gun", "Yin", "Gao", "Long", "Zhi", "Yan", "She", "Man", "Ying", "Chun", "Lu", "Lan", "Luan", , "Bin", "Tan", "Yu", "Sou", "Hu", "Bi", "Biao", "Zhi", "Jiang", "Kou", "Shen", "Shang", "Di", "Mi", "Ao", "Lu", "Hu", "Hu", "You", "Chan", "Fan", "Yong", "Gun", "Man"], ["Qing", "Yu", "Piao", "Ji", "Ya", "Jiao", "Qi", "Xi", "Ji", "Lu", "Lu", "Long", "Jin", "Guo", "Cong", "Lou", "Zhi", "Gai", "Qiang", "Li", "Yan", "Cao", "Jiao", "Cong", "Qun", "Tuan", "Ou", "Teng", "Ye", "Xi", "Mi", "Tang", "Mo", "Shang", "Han", "Lian", "Lan", "Wa", "Li", "Qian", "Feng", "Xuan", "Yi", "Man", "Zi", "Mang", "Kang", "Lei", "Peng", "Shu", "Zhang", "Zhang", "Chong", "Xu", "Huan", "Kuo", "Jian", "Yan", "Chuang", "Liao", "Cui", "Ti", "Yang", "Jiang", "Cong", "Ying", "Hong", "Xun", "Shu", "Guan", "Ying", "Xiao", , , "Xu", "Lian", "Zhi", "Wei", "Pi", "Jue", "Jiao", "Po", "Dang", "Hui", "Jie", "Wu", "Pa", "Ji", "Pan", "Gui", "Xiao", "Qian", "Qian", "Xi", "Lu", "Xi", "Xuan", "Dun", "Huang", "Min", "Run", "Su", "Liao", "Zhen", "Zhong", "Yi", "Di", "Wan", "Dan", "Tan", "Chao", "Xun", "Kui", "Yie", "Shao", "Tu", "Zhu", "San", "Hei", "Bi", "Shan", "Chan", "Chan", "Shu", "Tong", "Pu", "Lin", "Wei", "Se", "Se", "Cheng", "Jiong", "Cheng", "Hua", "Jiao", "Lao", "Che", "Gan", "Cun", "Heng", "Si", "Shu", "Peng", "Han", "Yun", "Liu", "Hong", "Fu", "Hao", "He", "Xian", "Jian", "Shan", "Xi", "Oki", , "Lan", , "Yu", "Lin", "Min", "Zao", "Dang", "Wan", "Ze", "Xie", "Yu", "Li", "Shi", "Xue", "Ling", "Man", "Zi", "Yong", "Kuai", "Can", "Lian", "Dian", "Ye", "Ao", "Huan", "Zhen", "Chan", "Man", "Dan", "Dan", "Yi", "Sui", "Pi", "Ju", "Ta", "Qin", "Ji", "Zhuo", "Lian", "Nong", "Guo", "Jin", "Fen", "Se", "Ji", "Sui", "Hui", "Chu", "Ta", "Song", "Ding", , "Zhu", "Lai", "Bin", "Lian", "Mi", "Shi", "Shu", "Mi", "Ning", "Ying", "Ying", "Meng", "Jin", "Qi", "Pi", "Ji", "Hao", "Ru", "Zui", "Wo", "Tao", "Yin", "Yin", "Dui", "Ci", "Huo", "Jing", "Lan", "Jun", "Ai", "Pu", "Zhuo", "Wei", "Bin", "Gu", "Qian", "Xing", "Hama", "Kuo", "Fei", , "Boku", "Jian", "Wei", "Luo", "Zan", "Lu", "Li"], ["You", "Yang", "Lu", "Si", "Jie", "Ying", "Du", "Wang", "Hui", "Xie", "Pan", "Shen", "Biao", "Chan", "Mo", "Liu", "Jian", "Pu", "Se", "Cheng", "Gu", "Bin", "Huo", "Xian", "Lu", "Qin", "Han", "Ying", "Yong", "Li", "Jing", "Xiao", "Ying", "Sui", "Wei", "Xie", "Huai", "Hao", "Zhu", "Long", "Lai", "Dui", "Fan", "Hu", "Lai", , , "Ying", "Mi", "Ji", "Lian", "Jian", "Ying", "Fen", "Lin", "Yi", "Jian", "Yue", "Chan", "Dai", "Rang", "Jian", "Lan", "Fan", "Shuang", "Yuan", "Zhuo", "Feng", "She", "Lei", "Lan", "Cong", "Qu", "Yong", "Qian", "Fa", "Guan", "Que", "Yan", "Hao", "Hyeng", "Sa", "Zan", "Luan", "Yan", "Li", "Mi", "Shan", "Tan", "Dang", "Jiao", "Chan", , "Hao", "Ba", "Zhu", "Lan", "Lan", "Nang", "Wan", "Luan", "Xun", "Xian", "Yan", "Gan", "Yan", "Yu", "Huo", "Si", "Mie", "Guang", "Deng", "Hui", "Xiao", "Xiao", "Hu", "Hong", "Ling", "Zao", "Zhuan", "Jiu", "Zha", "Xie", "Chi", "Zhuo", "Zai", "Zai", "Can", "Yang", "Qi", "Zhong", "Fen", "Niu", "Jiong", "Wen", "Po", "Yi", "Lu", "Chui", "Pi", "Kai", "Pan", "Yan", "Kai", "Pang", "Mu", "Chao", "Liao", "Gui", "Kang", "Tun", "Guang", "Xin", "Zhi", "Guang", "Guang", "Wei", "Qiang", , "Da", "Xia", "Zheng", "Zhu", "Ke", "Zhao", "Fu", "Ba", "Duo", "Duo", "Ling", "Zhuo", "Xuan", "Ju", "Tan", "Pao", "Jiong", "Pao", "Tai", "Tai", "Bing", "Yang", "Tong", "Han", "Zhu", "Zha", "Dian", "Wei", "Shi", "Lian", "Chi", "Huang", , "Hu", "Shuo", "Lan", "Jing", "Jiao", "Xu", "Xing", "Quan", "Lie", "Huan", "Yang", "Xiao", "Xiu", "Xian", "Yin", "Wu", "Zhou", "Yao", "Shi", "Wei", "Tong", "Xue", "Zai", "Kai", "Hong", "Luo", "Xia", "Zhu", "Xuan", "Zheng", "Po", "Yan", "Hui", "Guang", "Zhe", "Hui", "Kao", , "Fan", "Shao", "Ye", "Hui", , "Tang", "Jin", "Re", , "Xi", "Fu", "Jiong", "Che", "Pu", "Jing", "Zhuo", "Ting", "Wan", "Hai", "Peng", "Lang", "Shan", "Hu", "Feng", "Chi", "Rong"], ["Hu", "Xi", "Shu", "He", "Xun", "Ku", "Jue", "Xiao", "Xi", "Yan", "Han", "Zhuang", "Jun", "Di", "Xie", "Ji", "Wu", , , "Han", "Yan", "Huan", "Men", "Ju", "Chou", "Bei", "Fen", "Lin", "Kun", "Hun", "Tun", "Xi", "Cui", "Wu", "Hong", "Ju", "Fu", "Wo", "Jiao", "Cong", "Feng", "Ping", "Qiong", "Ruo", "Xi", "Qiong", "Xin", "Zhuo", "Yan", "Yan", "Yi", "Jue", "Yu", "Gang", "Ran", "Pi", "Gu", , "Sheng", "Chang", "Shao", , , , , "Chen", "He", "Kui", "Zhong", "Duan", "Xia", "Hui", "Feng", "Lian", "Xuan", "Xing", "Huang", "Jiao", "Jian", "Bi", "Ying", "Zhu", "Wei", "Tuan", "Tian", "Xi", "Nuan", "Nuan", "Chan", "Yan", "Jiong", "Jiong", "Yu", "Mei", "Sha", "Wei", "Ye", "Xin", "Qiong", "Rou", "Mei", "Huan", "Xu", "Zhao", "Wei", "Fan", "Qiu", "Sui", "Yang", "Lie", "Zhu", "Jie", "Gao", "Gua", "Bao", "Hu", "Yun", "Xia", , , "Bian", "Gou", "Tui", "Tang", "Chao", "Shan", "N", "Bo", "Huang", "Xie", "Xi", "Wu", "Xi", "Yun", "He", "He", "Xi", "Yun", "Xiong", "Nai", "Shan", "Qiong", "Yao", "Xun", "Mi", "Lian", "Ying", "Wen", "Rong", "Oozutsu", , "Qiang", "Liu", "Xi", "Bi", "Biao", "Zong", "Lu", "Jian", "Shou", "Yi", "Lou", "Feng", "Sui", "Yi", "Tong", "Jue", "Zong", "Yun", "Hu", "Yi", "Zhi", "Ao", "Wei", "Liao", "Han", "Ou", "Re", "Jiong", "Man", , "Shang", "Cuan", "Zeng", "Jian", "Xi", "Xi", "Xi", "Yi", "Xiao", "Chi", "Huang", "Chan", "Ye", "Qian", "Ran", "Yan", "Xian", "Qiao", "Zun", "Deng", "Dun", "Shen", "Jiao", "Fen", "Si", "Liao", "Yu", "Lin", "Tong", "Shao", "Fen", "Fan", "Yan", "Xun", "Lan", "Mei", "Tang", "Yi", "Jing", "Men", , , "Ying", "Yu", "Yi", "Xue", "Lan", "Tai", "Zao", "Can", "Sui", "Xi", "Que", "Cong", "Lian", "Hui", "Zhu", "Xie", "Ling", "Wei", "Yi", "Xie", "Zhao", "Hui", "Tatsu", "Nung", "Lan", "Ru", "Xian", "Kao", "Xun", "Jin", "Chou", "Chou", "Yao"], ["He", "Lan", "Biao", "Rong", "Li", "Mo", "Bao", "Ruo", "Lu", "La", "Ao", "Xun", "Kuang", "Shuo", , "Li", "Lu", "Jue", "Liao", "Yan", "Xi", "Xie", "Long", "Ye", , "Rang", "Yue", "Lan", "Cong", "Jue", "Tong", "Guan", , "Che", "Mi", "Tang", "Lan", "Zhu", , "Ling", "Cuan", "Yu", "Zhua", "Tsumekanmuri", "Pa", "Zheng", "Pao", "Cheng", "Yuan", "Ai", "Wei", , "Jue", "Jue", "Fu", "Ye", "Ba", "Die", "Ye", "Yao", "Zu", "Shuang", "Er", "Qiang", "Chuang", "Ge", "Zang", "Die", "Qiang", "Yong", "Qiang", "Pian", "Ban", "Pan", "Shao", "Jian", "Pai", "Du", "Chuang", "Tou", "Zha", "Bian", "Die", "Bang", "Bo", "Chuang", "You", , "Du", "Ya", "Cheng", "Niu", "Ushihen", "Pin", "Jiu", "Mou", "Tuo", "Mu", "Lao", "Ren", "Mang", "Fang", "Mao", "Mu", "Gang", "Wu", "Yan", "Ge", "Bei", "Si", "Jian", "Gu", "You", "Ge", "Sheng", "Mu", "Di", "Qian", "Quan", "Quan", "Zi", "Te", "Xi", "Mang", "Keng", "Qian", "Wu", "Gu", "Xi", "Li", "Li", "Pou", "Ji", "Gang", "Zhi", "Ben", "Quan", "Run", "Du", "Ju", "Jia", "Jian", "Feng", "Pian", "Ke", "Ju", "Kao", "Chu", "Xi", "Bei", "Luo", "Jie", "Ma", "San", "Wei", "Li", "Dun", "Tong", , "Jiang", "Ikenie", "Li", "Du", "Lie", "Pi", "Piao", "Bao", "Xi", "Chou", "Wei", "Kui", "Chou", "Quan", "Fan", "Ba", "Fan", "Qiu", "Ji", "Cai", "Chuo", "An", "Jie", "Zhuang", "Guang", "Ma", "You", "Kang", "Bo", "Hou", "Ya", "Yin", "Huan", "Zhuang", "Yun", "Kuang", "Niu", "Di", "Qing", "Zhong", "Mu", "Bei", "Pi", "Ju", "Ni", "Sheng", "Pao", "Xia", "Tuo", "Hu", "Ling", "Fei", "Pi", "Ni", "Ao", "You", "Gou", "Yue", "Ju", "Dan", "Po", "Gu", "Xian", "Ning", "Huan", "Hen", "Jiao", "He", "Zhao", "Ji", "Xun", "Shan", "Ta", "Rong", "Shou", "Tong", "Lao", "Du", "Xia", "Shi", "Hua", "Zheng", "Yu", "Sun", "Yu", "Bi", "Mang", "Xi", "Juan", "Li", "Xia", "Yin", "Suan", "Lang", "Bei", "Zhi", "Yan"], ["Sha", "Li", "Han", "Xian", "Jing", "Pai", "Fei", "Yao", "Ba", "Qi", "Ni", "Biao", "Yin", "Lai", "Xi", "Jian", "Qiang", "Kun", "Yan", "Guo", "Zong", "Mi", "Chang", "Yi", "Zhi", "Zheng", "Ya", "Meng", "Cai", "Cu", "She", "Kari", "Cen", "Luo", "Hu", "Zong", "Ji", "Wei", "Feng", "Wo", "Yuan", "Xing", "Zhu", "Mao", "Wei", "Yuan", "Xian", "Tuan", "Ya", "Nao", "Xie", "Jia", "Hou", "Bian", "You", "You", "Mei", "Zha", "Yao", "Sun", "Bo", "Ming", "Hua", "Yuan", "Sou", "Ma", "Yuan", "Dai", "Yu", "Shi", "Hao", , "Yi", "Zhen", "Chuang", "Hao", "Man", "Jing", "Jiang", "Mu", "Zhang", "Chan", "Ao", "Ao", "Hao", "Cui", "Fen", "Jue", "Bi", "Bi", "Huang", "Pu", "Lin", "Yu", "Tong", "Yao", "Liao", "Shuo", "Xiao", "Swu", "Ton", "Xi", "Ge", "Juan", "Du", "Hui", "Kuai", "Xian", "Xie", "Ta", "Xian", "Xun", "Ning", "Pin", "Huo", "Nou", "Meng", "Lie", "Nao", "Guang", "Shou", "Lu", "Ta", "Xian", "Mi", "Rang", "Huan", "Nao", "Luo", "Xian", "Qi", "Jue", "Xuan", "Miao", "Zi", "Lu", "Lu", "Yu", "Su", "Wang", "Qiu", "Ga", "Ding", "Le", "Ba", "Ji", "Hong", "Di", "Quan", "Gan", "Jiu", "Yu", "Ji", "Yu", "Yang", "Ma", "Gong", "Wu", "Fu", "Wen", "Jie", "Ya", "Fen", "Bian", "Beng", "Yue", "Jue", "Yun", "Jue", "Wan", "Jian", "Mei", "Dan", "Pi", "Wei", "Huan", "Xian", "Qiang", "Ling", "Dai", "Yi", "An", "Ping", "Dian", "Fu", "Xuan", "Xi", "Bo", "Ci", "Gou", "Jia", "Shao", "Po", "Ci", "Ke", "Ran", "Sheng", "Shen", "Yi", "Zu", "Jia", "Min", "Shan", "Liu", "Bi", "Zhen", "Zhen", "Jue", "Fa", "Long", "Jin", "Jiao", "Jian", "Li", "Guang", "Xian", "Zhou", "Gong", "Yan", "Xiu", "Yang", "Xu", "Luo", "Su", "Zhu", "Qin", "Ken", "Xun", "Bao", "Er", "Xiang", "Yao", "Xia", "Heng", "Gui", "Chong", "Xu", "Ban", "Pei", , "Dang", "Ei", "Hun", "Wen", "E", "Cheng", "Ti", "Wu", "Wu", "Cheng", "Jun", "Mei", "Bei", "Ting", "Xian", "Chuo"], ["Han", "Xuan", "Yan", "Qiu", "Quan", "Lang", "Li", "Xiu", "Fu", "Liu", "Ye", "Xi", "Ling", "Li", "Jin", "Lian", "Suo", "Chiisai", , "Wan", "Dian", "Pin", "Zhan", "Cui", "Min", "Yu", "Ju", "Chen", "Lai", "Wen", "Sheng", "Wei", "Dian", "Chu", "Zhuo", "Pei", "Cheng", "Hu", "Qi", "E", "Kun", "Chang", "Qi", "Beng", "Wan", "Lu", "Cong", "Guan", "Yan", "Diao", "Bei", "Lin", "Qin", "Pi", "Pa", "Que", "Zhuo", "Qin", "Fa", , "Qiong", "Du", "Jie", "Hun", "Yu", "Mao", "Mei", "Chun", "Xuan", "Ti", "Xing", "Dai", "Rou", "Min", "Zhen", "Wei", "Ruan", "Huan", "Jie", "Chuan", "Jian", "Zhuan", "Yang", "Lian", "Quan", "Xia", "Duan", "Yuan", "Ye", "Nao", "Hu", "Ying", "Yu", "Huang", "Rui", "Se", "Liu", "Shi", "Rong", "Suo", "Yao", "Wen", "Wu", "Jin", "Jin", "Ying", "Ma", "Tao", "Liu", "Tang", "Li", "Lang", "Gui", "Zhen", "Qiang", "Cuo", "Jue", "Zhao", "Yao", "Ai", "Bin", "Tu", "Chang", "Kun", "Zhuan", "Cong", "Jin", "Yi", "Cui", "Cong", "Qi", "Li", "Ying", "Suo", "Qiu", "Xuan", "Ao", "Lian", "Man", "Zhang", "Yin", , "Ying", "Zhi", "Lu", "Wu", "Deng", "Xiou", "Zeng", "Xun", "Qu", "Dang", "Lin", "Liao", "Qiong", "Su", "Huang", "Gui", "Pu", "Jing", "Fan", "Jin", "Liu", "Ji", , "Jing", "Ai", "Bi", "Can", "Qu", "Zao", "Dang", "Jiao", "Gun", "Tan", "Hui", "Huan", "Se", "Sui", "Tian", , "Yu", "Jin", "Lu", "Bin", "Shou", "Wen", "Zui", "Lan", "Xi", "Ji", "Xuan", "Ruan", "Huo", "Gai", "Lei", "Du", "Li", "Zhi", "Rou", "Li", "Zan", "Qiong", "Zhe", "Gui", "Sui", "La", "Long", "Lu", "Li", "Zan", "Lan", "Ying", "Mi", "Xiang", "Xi", "Guan", "Dao", "Zan", "Huan", "Gua", "Bo", "Die", "Bao", "Hu", "Zhi", "Piao", "Ban", "Rang", "Li", "Wa", "Dekaguramu", "Jiang", "Qian", "Fan", "Pen", "Fang", "Dan", "Weng", "Ou", "Deshiguramu", "Miriguramu", "Thon", "Hu", "Ling", "Yi", "Ping", "Ci", "Hekutogura", "Juan", "Chang", "Chi", "Sarake", "Dang", "Meng", "Pou"], ["Zhui", "Ping", "Bian", "Zhou", "Zhen", "Senchigura", "Ci", "Ying", "Qi", "Xian", "Lou", "Di", "Ou", "Meng", "Zhuan", "Peng", "Lin", "Zeng", "Wu", "Pi", "Dan", "Weng", "Ying", "Yan", "Gan", "Dai", "Shen", "Tian", "Tian", "Han", "Chang", "Sheng", "Qing", "Sheng", "Chan", "Chan", "Rui", "Sheng", "Su", "Sen", "Yong", "Shuai", "Lu", "Fu", "Yong", "Beng", "Feng", "Ning", "Tian", "You", "Jia", "Shen", "Zha", "Dian", "Fu", "Nan", "Dian", "Ping", "Ting", "Hua", "Ting", "Quan", "Zi", "Meng", "Bi", "Qi", "Liu", "Xun", "Liu", "Chang", "Mu", "Yun", "Fan", "Fu", "Geng", "Tian", "Jie", "Jie", "Quan", "Wei", "Fu", "Tian", "Mu", "Tap", "Pan", "Jiang", "Wa", "Da", "Nan", "Liu", "Ben", "Zhen", "Chu", "Mu", "Mu", "Ce", "Cen", "Gai", "Bi", "Da", "Zhi", "Lue", "Qi", "Lue", "Pan", "Kesa", "Fan", "Hua", "Yu", "Yu", "Mu", "Jun", "Yi", "Liu", "Yu", "Die", "Chou", "Hua", "Dang", "Chuo", "Ji", "Wan", "Jiang", "Sheng", "Chang", "Tuan", "Lei", "Ji", "Cha", "Liu", "Tatamu", "Tuan", "Lin", "Jiang", "Jiang", "Chou", "Bo", "Die", "Die", "Pi", "Nie", "Dan", "Shu", "Shu", "Zhi", "Yi", "Chuang", "Nai", "Ding", "Bi", "Jie", "Liao", "Gong", "Ge", "Jiu", "Zhou", "Xia", "Shan", "Xu", "Nue", "Li", "Yang", "Chen", "You", "Ba", "Jie", "Jue", "Zhi", "Xia", "Cui", "Bi", "Yi", "Li", "Zong", "Chuang", "Feng", "Zhu", "Pao", "Pi", "Gan", "Ke", "Ci", "Xie", "Qi", "Dan", "Zhen", "Fa", "Zhi", "Teng", "Ju", "Ji", "Fei", "Qu", "Dian", "Jia", "Xian", "Cha", "Bing", "Ni", "Zheng", "Yong", "Jing", "Quan", "Chong", "Tong", "Yi", "Kai", "Wei", "Hui", "Duo", "Yang", "Chi", "Zhi", "Hen", "Ya", "Mei", "Dou", "Jing", "Xiao", "Tong", "Tu", "Mang", "Pi", "Xiao", "Suan", "Pu", "Li", "Zhi", "Cuo", "Duo", "Wu", "Sha", "Lao", "Shou", "Huan", "Xian", "Yi", "Peng", "Zhang", "Guan", "Tan", "Fei", "Ma", "Lin", "Chi", "Ji", "Dian", "An", "Chi", "Bi", "Bei", "Min", "Gu", "Dui", "E", "Wei"], ["Yu", "Cui", "Ya", "Zhu", "Cu", "Dan", "Shen", "Zhung", "Ji", "Yu", "Hou", "Feng", "La", "Yang", "Shen", "Tu", "Yu", "Gua", "Wen", "Huan", "Ku", "Jia", "Yin", "Yi", "Lu", "Sao", "Jue", "Chi", "Xi", "Guan", "Yi", "Wen", "Ji", "Chuang", "Ban", "Lei", "Liu", "Chai", "Shou", "Nue", "Dian", "Da", "Pie", "Tan", "Zhang", "Biao", "Shen", "Cu", "Luo", "Yi", "Zong", "Chou", "Zhang", "Zhai", "Sou", "Suo", "Que", "Diao", "Lou", "Lu", "Mo", "Jin", "Yin", "Ying", "Huang", "Fu", "Liao", "Long", "Qiao", "Liu", "Lao", "Xian", "Fei", "Dan", "Yin", "He", "Ai", "Ban", "Xian", "Guan", "Guai", "Nong", "Yu", "Wei", "Yi", "Yong", "Pi", "Lei", "Li", "Shu", "Dan", "Lin", "Dian", "Lin", "Lai", "Pie", "Ji", "Chi", "Yang", "Xian", "Jie", "Zheng", , "Li", "Huo", "Lai", "Shaku", "Dian", "Xian", "Ying", "Yin", "Qu", "Yong", "Tan", "Dian", "Luo", "Luan", "Luan", "Bo", , "Gui", "Po", "Fa", "Deng", "Fa", "Bai", "Bai", "Qie", "Bi", "Zao", "Zao", "Mao", "De", "Pa", "Jie", "Huang", "Gui", "Ci", "Ling", "Gao", "Mo", "Ji", "Jiao", "Peng", "Gao", "Ai", "E", "Hao", "Han", "Bi", "Wan", "Chou", "Qian", "Xi", "Ai", "Jiong", "Hao", "Huang", "Hao", "Ze", "Cui", "Hao", "Xiao", "Ye", "Po", "Hao", "Jiao", "Ai", "Xing", "Huang", "Li", "Piao", "He", "Jiao", "Pi", "Gan", "Pao", "Zhou", "Jun", "Qiu", "Cun", "Que", "Zha", "Gu", "Jun", "Jun", "Zhou", "Zha", "Gu", "Zhan", "Du", "Min", "Qi", "Ying", "Yu", "Bei", "Zhao", "Zhong", "Pen", "He", "Ying", "He", "Yi", "Bo", "Wan", "He", "Ang", "Zhan", "Yan", "Jian", "He", "Yu", "Kui", "Fan", "Gai", "Dao", "Pan", "Fu", "Qiu", "Sheng", "Dao", "Lu", "Zhan", "Meng", "Li", "Jin", "Xu", "Jian", "Pan", "Guan", "An", "Lu", "Shu", "Zhou", "Dang", "An", "Gu", "Li", "Mu", "Cheng", "Gan", "Xu", "Mang", "Mang", "Zhi", "Qi", "Ruan", "Tian", "Xiang", "Dun", "Xin", "Xi", "Pan", "Feng", "Dun", "Min"], ["Ming", "Sheng", "Shi", "Yun", "Mian", "Pan", "Fang", "Miao", "Dan", "Mei", "Mao", "Kan", "Xian", "Ou", "Shi", "Yang", "Zheng", "Yao", "Shen", "Huo", "Da", "Zhen", "Kuang", "Ju", "Shen", "Chi", "Sheng", "Mei", "Mo", "Zhu", "Zhen", "Zhen", "Mian", "Di", "Yuan", "Die", "Yi", "Zi", "Zi", "Chao", "Zha", "Xuan", "Bing", "Mi", "Long", "Sui", "Dong", "Mi", "Die", "Yi", "Er", "Ming", "Xuan", "Chi", "Kuang", "Juan", "Mou", "Zhen", "Tiao", "Yang", "Yan", "Mo", "Zhong", "Mai", "Zhao", "Zheng", "Mei", "Jun", "Shao", "Han", "Huan", "Di", "Cheng", "Cuo", "Juan", "E", "Wan", "Xian", "Xi", "Kun", "Lai", "Jian", "Shan", "Tian", "Hun", "Wan", "Ling", "Shi", "Qiong", "Lie", "Yai", "Jing", "Zheng", "Li", "Lai", "Sui", "Juan", "Shui", "Sui", "Du", "Bi", "Bi", "Mu", "Hun", "Ni", "Lu", "Yi", "Jie", "Cai", "Zhou", "Yu", "Hun", "Ma", "Xia", "Xing", "Xi", "Gun", "Cai", "Chun", "Jian", "Mei", "Du", "Hou", "Xuan", "Ti", "Kui", "Gao", "Rui", "Mou", "Xu", "Fa", "Wen", "Miao", "Chou", "Kui", "Mi", "Weng", "Kou", "Dang", "Chen", "Ke", "Sou", "Xia", "Qiong", "Mao", "Ming", "Man", "Shui", "Ze", "Zhang", "Yi", "Diao", "Ou", "Mo", "Shun", "Cong", "Lou", "Chi", "Man", "Piao", "Cheng", "Ji", "Meng", , "Run", "Pie", "Xi", "Qiao", "Pu", "Zhu", "Deng", "Shen", "Shun", "Liao", "Che", "Xian", "Kan", "Ye", "Xu", "Tong", "Mou", "Lin", "Kui", "Xian", "Ye", "Ai", "Hui", "Zhan", "Jian", "Gu", "Zhao", "Qu", "Wei", "Chou", "Sao", "Ning", "Xun", "Yao", "Huo", "Meng", "Mian", "Bin", "Mian", "Li", "Kuang", "Jue", "Xuan", "Mian", "Huo", "Lu", "Meng", "Long", "Guan", "Man", "Xi", "Chu", "Tang", "Kan", "Zhu", "Mao", "Jin", "Lin", "Yu", "Shuo", "Ce", "Jue", "Shi", "Yi", "Shen", "Zhi", "Hou", "Shen", "Ying", "Ju", "Zhou", "Jiao", "Cuo", "Duan", "Ai", "Jiao", "Zeng", "Huo", "Bai", "Shi", "Ding", "Qi", "Ji", "Zi", "Gan", "Wu", "Tuo", "Ku", "Qiang", "Xi", "Fan", "Kuang"], ["Dang", "Ma", "Sha", "Dan", "Jue", "Li", "Fu", "Min", "Nuo", "Huo", "Kang", "Zhi", "Qi", "Kan", "Jie", "Fen", "E", "Ya", "Pi", "Zhe", "Yan", "Sui", "Zhuan", "Che", "Dun", "Pan", "Yan", , "Feng", "Fa", "Mo", "Zha", "Qu", "Yu", "Luo", "Tuo", "Tuo", "Di", "Zhai", "Zhen", "Ai", "Fei", "Mu", "Zhu", "Li", "Bian", "Nu", "Ping", "Peng", "Ling", "Pao", "Le", "Po", "Bo", "Po", "Shen", "Za", "Nuo", "Li", "Long", "Tong", , "Li", "Aragane", "Chu", "Keng", "Quan", "Zhu", "Kuang", "Huo", "E", "Nao", "Jia", "Lu", "Wei", "Ai", "Luo", "Ken", "Xing", "Yan", "Tong", "Peng", "Xi", , "Hong", "Shuo", "Xia", "Qiao", , "Wei", "Qiao", , "Keng", "Xiao", "Que", "Chan", "Lang", "Hong", "Yu", "Xiao", "Xia", "Mang", "Long", "Iong", "Che", "Che", "E", "Liu", "Ying", "Mang", "Que", "Yan", "Sha", "Kun", "Yu", , "Kaki", "Lu", "Chen", "Jian", "Nue", "Song", "Zhuo", "Keng", "Peng", "Yan", "Zhui", "Kong", "Ceng", "Qi", "Zong", "Qing", "Lin", "Jun", "Bo", "Ding", "Min", "Diao", "Jian", "He", "Lu", "Ai", "Sui", "Que", "Ling", "Bei", "Yin", "Dui", "Wu", "Qi", "Lun", "Wan", "Dian", "Gang", "Pei", "Qi", "Chen", "Ruan", "Yan", "Die", "Ding", "Du", "Tuo", "Jie", "Ying", "Bian", "Ke", "Bi", "Wei", "Shuo", "Zhen", "Duan", "Xia", "Dang", "Ti", "Nao", "Peng", "Jian", "Di", "Tan", "Cha", "Seki", "Qi", , "Feng", "Xuan", "Que", "Que", "Ma", "Gong", "Nian", "Su", "E", "Ci", "Liu", "Si", "Tang", "Bang", "Hua", "Pi", "Wei", "Sang", "Lei", "Cuo", "Zhen", "Xia", "Qi", "Lian", "Pan", "Wei", "Yun", "Dui", "Zhe", "Ke", "La", , "Qing", "Gun", "Zhuan", "Chan", "Qi", "Ao", "Peng", "Lu", "Lu", "Kan", "Qiang", "Chen", "Yin", "Lei", "Biao", "Qi", "Mo", "Qi", "Cui", "Zong", "Qing", "Chuo", , "Ji", "Shan", "Lao", "Qu", "Zeng", "Deng", "Jian", "Xi", "Lin", "Ding", "Dian", "Huang", "Pan", "Za", "Qiao", "Di", "Li"], ["Tani", "Jiao", , "Zhang", "Qiao", "Dun", "Xian", "Yu", "Zhui", "He", "Huo", "Zhai", "Lei", "Ke", "Chu", "Ji", "Que", "Dang", "Yi", "Jiang", "Pi", "Pi", "Yu", "Pin", "Qi", "Ai", "Kai", "Jian", "Yu", "Ruan", "Meng", "Pao", "Ci", , , "Mie", "Ca", "Xian", "Kuang", "Lei", "Lei", "Zhi", "Li", "Li", "Fan", "Que", "Pao", "Ying", "Li", "Long", "Long", "Mo", "Bo", "Shuang", "Guan", "Lan", "Zan", "Yan", "Shi", "Shi", "Li", "Reng", "She", "Yue", "Si", "Qi", "Ta", "Ma", "Xie", "Xian", "Xian", "Zhi", "Qi", "Zhi", "Beng", "Dui", "Zhong", , "Yi", "Shi", "You", "Zhi", "Tiao", "Fu", "Fu", "Mi", "Zu", "Zhi", "Suan", "Mei", "Zuo", "Qu", "Hu", "Zhu", "Shen", "Sui", "Ci", "Chai", "Mi", "Lu", "Yu", "Xiang", "Wu", "Tiao", "Piao", "Zhu", "Gui", "Xia", "Zhi", "Ji", "Gao", "Zhen", "Gao", "Shui", "Jin", "Chen", "Gai", "Kun", "Di", "Dao", "Huo", "Tao", "Qi", "Gu", "Guan", "Zui", "Ling", "Lu", "Bing", "Jin", "Dao", "Zhi", "Lu", "Shan", "Bei", "Zhe", "Hui", "You", "Xi", "Yin", "Zi", "Huo", "Zhen", "Fu", "Yuan", "Wu", "Xian", "Yang", "Ti", "Yi", "Mei", "Si", "Di", , "Zhuo", "Zhen", "Yong", "Ji", "Gao", "Tang", "Si", "Ma", "Ta", , "Xuan", "Qi", "Yu", "Xi", "Ji", "Si", "Chan", "Tan", "Kuai", "Sui", "Li", "Nong", "Ni", "Dao", "Li", "Rang", "Yue", "Ti", "Zan", "Lei", "Rou", "Yu", "Yu", "Chi", "Xie", "Qin", "He", "Tu", "Xiu", "Si", "Ren", "Tu", "Zi", "Cha", "Gan", "Yi", "Xian", "Bing", "Nian", "Qiu", "Qiu", "Zhong", "Fen", "Hao", "Yun", "Ke", "Miao", "Zhi", "Geng", "Bi", "Zhi", "Yu", "Mi", "Ku", "Ban", "Pi", "Ni", "Li", "You", "Zu", "Pi", "Ba", "Ling", "Mo", "Cheng", "Nian", "Qin", "Yang", "Zuo", "Zhi", "Zhi", "Shu", "Ju", "Zi", "Huo", "Ji", "Cheng", "Tong", "Zhi", "Huo", "He", "Yin", "Zi", "Zhi", "Jie", "Ren", "Du", "Yi", "Zhu", "Hui", "Nong", "Fu"], ["Xi", "Kao", "Lang", "Fu", "Ze", "Shui", "Lu", "Kun", "Gan", "Geng", "Ti", "Cheng", "Tu", "Shao", "Shui", "Ya", "Lun", "Lu", "Gu", "Zuo", "Ren", "Zhun", "Bang", "Bai", "Ji", "Zhi", "Zhi", "Kun", "Leng", "Peng", "Ke", "Bing", "Chou", "Zu", "Yu", "Su", "Lue", , "Yi", "Xi", "Bian", "Ji", "Fu", "Bi", "Nuo", "Jie", "Zhong", "Zong", "Xu", "Cheng", "Dao", "Wen", "Lian", "Zi", "Yu", "Ji", "Xu", "Zhen", "Zhi", "Dao", "Jia", "Ji", "Gao", "Gao", "Gu", "Rong", "Sui", "You", "Ji", "Kang", "Mu", "Shan", "Men", "Zhi", "Ji", "Lu", "Su", "Ji", "Ying", "Wen", "Qiu", "Se", , "Yi", "Huang", "Qie", "Ji", "Sui", "Xiao", "Pu", "Jiao", "Zhuo", "Tong", "Sai", "Lu", "Sui", "Nong", "Se", "Hui", "Rang", "Nuo", "Yu", "Bin", "Ji", "Tui", "Wen", "Cheng", "Huo", "Gong", "Lu", "Biao", , "Rang", "Zhuo", "Li", "Zan", "Xue", "Wa", "Jiu", "Qiong", "Xi", "Qiong", "Kong", "Yu", "Sen", "Jing", "Yao", "Chuan", "Zhun", "Tu", "Lao", "Qie", "Zhai", "Yao", "Bian", "Bao", "Yao", "Bing", "Wa", "Zhu", "Jiao", "Qiao", "Diao", "Wu", "Gui", "Yao", "Zhi", "Chuang", "Yao", "Tiao", "Jiao", "Chuang", "Jiong", "Xiao", "Cheng", "Kou", "Cuan", "Wo", "Dan", "Ku", "Ke", "Zhui", "Xu", "Su", "Guan", "Kui", "Dou", , "Yin", "Wo", "Wa", "Ya", "Yu", "Ju", "Qiong", "Yao", "Yao", "Tiao", "Chao", "Yu", "Tian", "Diao", "Ju", "Liao", "Xi", "Wu", "Kui", "Chuang", "Zhao", , "Kuan", "Long", "Cheng", "Cui", "Piao", "Zao", "Cuan", "Qiao", "Qiong", "Dou", "Zao", "Long", "Qie", "Li", "Chu", "Shi", "Fou", "Qian", "Chu", "Hong", "Qi", "Qian", "Gong", "Shi", "Shu", "Miao", "Ju", "Zhan", "Zhu", "Ling", "Long", "Bing", "Jing", "Jing", "Zhang", "Yi", "Si", "Jun", "Hong", "Tong", "Song", "Jing", "Diao", "Yi", "Shu", "Jing", "Qu", "Jie", "Ping", "Duan", "Shao", "Zhuan", "Ceng", "Deng", "Cui", "Huai", "Jing", "Kan", "Jing", "Zhu", "Zhu", "Le", "Peng", "Yu", "Chi", "Gan"], ["Mang", "Zhu", "Utsubo", "Du", "Ji", "Xiao", "Ba", "Suan", "Ji", "Zhen", "Zhao", "Sun", "Ya", "Zhui", "Yuan", "Hu", "Gang", "Xiao", "Cen", "Pi", "Bi", "Jian", "Yi", "Dong", "Shan", "Sheng", "Xia", "Di", "Zhu", "Na", "Chi", "Gu", "Li", "Qie", "Min", "Bao", "Tiao", "Si", "Fu", "Ce", "Ben", "Pei", "Da", "Zi", "Di", "Ling", "Ze", "Nu", "Fu", "Gou", "Fan", "Jia", "Ge", "Fan", "Shi", "Mao", "Po", "Sey", "Jian", "Qiong", "Long", "Souke", "Bian", "Luo", "Gui", "Qu", "Chi", "Yin", "Yao", "Xian", "Bi", "Qiong", "Gua", "Deng", "Jiao", "Jin", "Quan", "Sun", "Ru", "Fa", "Kuang", "Zhu", "Tong", "Ji", "Da", "Xing", "Ce", "Zhong", "Kou", "Lai", "Bi", "Shai", "Dang", "Zheng", "Ce", "Fu", "Yun", "Tu", "Pa", "Li", "Lang", "Ju", "Guan", "Jian", "Han", "Tong", "Xia", "Zhi", "Cheng", "Suan", "Shi", "Zhu", "Zuo", "Xiao", "Shao", "Ting", "Ce", "Yan", "Gao", "Kuai", "Gan", "Chou", "Kago", "Gang", "Yun", "O", "Qian", "Xiao", "Jian", "Pu", "Lai", "Zou", "Bi", "Bi", "Bi", "Ge", "Chi", "Guai", "Yu", "Jian", "Zhao", "Gu", "Chi", "Zheng", "Jing", "Sha", "Zhou", "Lu", "Bo", "Ji", "Lin", "Suan", "Jun", "Fu", "Zha", "Gu", "Kong", "Qian", "Quan", "Jun", "Chui", "Guan", "Yuan", "Ce", "Ju", "Bo", "Ze", "Qie", "Tuo", "Luo", "Dan", "Xiao", "Ruo", "Jian", "Xuan", "Bian", "Sun", "Xiang", "Xian", "Ping", "Zhen", "Sheng", "Hu", "Shi", "Zhu", "Yue", "Chun", "Lu", "Wu", "Dong", "Xiao", "Ji", "Jie", "Huang", "Xing", "Mei", "Fan", "Chui", "Zhuan", "Pian", "Feng", "Zhu", "Hong", "Qie", "Hou", "Qiu", "Miao", "Qian", , "Kui", "Sik", "Lou", "Yun", "He", "Tang", "Yue", "Chou", "Gao", "Fei", "Ruo", "Zheng", "Gou", "Nie", "Qian", "Xiao", "Cuan", "Gong", "Pang", "Du", "Li", "Bi", "Zhuo", "Chu", "Shai", "Chi", "Zhu", "Qiang", "Long", "Lan", "Jian", "Bu", "Li", "Hui", "Bi", "Di", "Cong", "Yan", "Peng", "Sen", "Zhuan", "Pai", "Piao", "Dou", "Yu", "Mie", "Zhuan"], ["Ze", "Xi", "Guo", "Yi", "Hu", "Chan", "Kou", "Cu", "Ping", "Chou", "Ji", "Gui", "Su", "Lou", "Zha", "Lu", "Nian", "Suo", "Cuan", "Sasara", "Suo", "Le", "Duan", "Yana", "Xiao", "Bo", "Mi", "Si", "Dang", "Liao", "Dan", "Dian", "Fu", "Jian", "Min", "Kui", "Dai", "Qiao", "Deng", "Huang", "Sun", "Lao", "Zan", "Xiao", "Du", "Shi", "Zan", , "Pai", "Hata", "Pai", "Gan", "Ju", "Du", "Lu", "Yan", "Bo", "Dang", "Sai", "Ke", "Long", "Qian", "Lian", "Bo", "Zhou", "Lai", , "Lan", "Kui", "Yu", "Yue", "Hao", "Zhen", "Tai", "Ti", "Mi", "Chou", "Ji", , "Hata", "Teng", "Zhuan", "Zhou", "Fan", "Sou", "Zhou", "Kuji", "Zhuo", "Teng", "Lu", "Lu", "Jian", "Tuo", "Ying", "Yu", "Lai", "Long", "Shinshi", "Lian", "Lan", "Qian", "Yue", "Zhong", "Qu", "Lian", "Bian", "Duan", "Zuan", "Li", "Si", "Luo", "Ying", "Yue", "Zhuo", "Xu", "Mi", "Di", "Fan", "Shen", "Zhe", "Shen", "Nu", "Xie", "Lei", "Xian", "Zi", "Ni", "Cun", , "Qian", "Kume", "Bi", "Ban", "Wu", "Sha", "Kang", "Rou", "Fen", "Bi", "Cui", , "Li", "Chi", "Nukamiso", "Ro", "Ba", "Li", "Gan", "Ju", "Po", "Mo", "Cu", "Nian", "Zhou", "Li", "Su", "Tiao", "Li", "Qi", "Su", "Hong", "Tong", "Zi", "Ce", "Yue", "Zhou", "Lin", "Zhuang", "Bai", , "Fen", "Ji", , "Sukumo", "Liang", "Xian", "Fu", "Liang", "Can", "Geng", "Li", "Yue", "Lu", "Ju", "Qi", "Cui", "Bai", "Zhang", "Lin", "Zong", "Jing", "Guo", "Kouji", "San", "San", "Tang", "Bian", "Rou", "Mian", "Hou", "Xu", "Zong", "Hu", "Jian", "Zan", "Ci", "Li", "Xie", "Fu", "Ni", "Bei", "Gu", "Xiu", "Gao", "Tang", "Qiu", "Sukumo", "Cao", "Zhuang", "Tang", "Mi", "San", "Fen", "Zao", "Kang", "Jiang", "Mo", "San", "San", "Nuo", "Xi", "Liang", "Jiang", "Kuai", "Bo", "Huan", , "Zong", "Xian", "Nuo", "Tuan", "Nie", "Li", "Zuo", "Di", "Nie", "Tiao", "Lan", "Mi", "Jiao", "Jiu", "Xi", "Gong", "Zheng", "Jiu", "You"], ["Ji", "Cha", "Zhou", "Xun", "Yue", "Hong", "Yu", "He", "Wan", "Ren", "Wen", "Wen", "Qiu", "Na", "Zi", "Tou", "Niu", "Fou", "Jie", "Shu", "Chun", "Pi", "Yin", "Sha", "Hong", "Zhi", "Ji", "Fen", "Yun", "Ren", "Dan", "Jin", "Su", "Fang", "Suo", "Cui", "Jiu", "Zha", "Kinu", "Jin", "Fu", "Zhi", "Ci", "Zi", "Chou", "Hong", "Zha", "Lei", "Xi", "Fu", "Xie", "Shen", "Bei", "Zhu", "Qu", "Ling", "Zhu", "Shao", "Gan", "Yang", "Fu", "Tuo", "Zhen", "Dai", "Zhuo", "Shi", "Zhong", "Xian", "Zu", "Jiong", "Ban", "Ju", "Mo", "Shu", "Zui", "Wata", "Jing", "Ren", "Heng", "Xie", "Jie", "Zhu", "Chou", "Gua", "Bai", "Jue", "Kuang", "Hu", "Ci", "Geng", "Geng", "Tao", "Xie", "Ku", "Jiao", "Quan", "Gai", "Luo", "Xuan", "Bing", "Xian", "Fu", "Gei", "Tong", "Rong", "Tiao", "Yin", "Lei", "Xie", "Quan", "Xu", "Lun", "Die", "Tong", "Si", "Jiang", "Xiang", "Hui", "Jue", "Zhi", "Jian", "Juan", "Chi", "Mian", "Zhen", "Lu", "Cheng", "Qiu", "Shu", "Bang", "Tong", "Xiao", "Wan", "Qin", "Geng", "Xiu", "Ti", "Xiu", "Xie", "Hong", "Xi", "Fu", "Ting", "Sui", "Dui", "Kun", "Fu", "Jing", "Hu", "Zhi", "Yan", "Jiong", "Feng", "Ji", "Sok", "Kase", "Zong", "Lin", "Duo", "Li", "Lu", "Liang", "Chou", "Quan", "Shao", "Qi", "Qi", "Zhun", "Qi", "Wan", "Qian", "Xian", "Shou", "Wei", "Qi", "Tao", "Wan", "Gang", "Wang", "Beng", "Zhui", "Cai", "Guo", "Cui", "Lun", "Liu", "Qi", "Zhan", "Bei", "Chuo", "Ling", "Mian", "Qi", "Qie", "Tan", "Zong", "Gun", "Zou", "Yi", "Zi", "Xing", "Liang", "Jin", "Fei", "Rui", "Min", "Yu", "Zong", "Fan", "Lu", "Xu", "Yingl", "Zhang", "Kasuri", "Xu", "Xiang", "Jian", "Ke", "Xian", "Ruan", "Mian", "Qi", "Duan", "Zhong", "Di", "Min", "Miao", "Yuan", "Xie", "Bao", "Si", "Qiu", "Bian", "Huan", "Geng", "Cong", "Mian", "Wei", "Fu", "Wei", "Yu", "Gou", "Miao", "Xie", "Lian", "Zong", "Bian", "Yun", "Yin", "Ti", "Gua", "Zhi", "Yun", "Cheng", "Chan", "Dai"], ["Xia", "Yuan", "Zong", "Xu", "Nawa", "Odoshi", "Geng", "Sen", "Ying", "Jin", "Yi", "Zhui", "Ni", "Bang", "Gu", "Pan", "Zhou", "Jian", "Cuo", "Quan", "Shuang", "Yun", "Xia", "Shuai", "Xi", "Rong", "Tao", "Fu", "Yun", "Zhen", "Gao", "Ru", "Hu", "Zai", "Teng", "Xian", "Su", "Zhen", "Zong", "Tao", "Horo", "Cai", "Bi", "Feng", "Cu", "Li", "Suo", "Yin", "Xi", "Zong", "Lei", "Zhuan", "Qian", "Man", "Zhi", "Lu", "Mo", "Piao", "Lian", "Mi", "Xuan", "Zong", "Ji", "Shan", "Sui", "Fan", "Shuai", "Beng", "Yi", "Sao", "Mou", "Zhou", "Qiang", "Hun", "Sem", "Xi", "Jung", "Xiu", "Ran", "Xuan", "Hui", "Qiao", "Zeng", "Zuo", "Zhi", "Shan", "San", "Lin", "Yu", "Fan", "Liao", "Chuo", "Zun", "Jian", "Rao", "Chan", "Rui", "Xiu", "Hui", "Hua", "Zuan", "Xi", "Qiang", "Un", "Da", "Sheng", "Hui", "Xi", "Se", "Jian", "Jiang", "Huan", "Zao", "Cong", "Jie", "Jiao", "Bo", "Chan", "Yi", "Nao", "Sui", "Yi", "Shai", "Xu", "Ji", "Bin", "Qian", "Lan", "Pu", "Xun", "Zuan", "Qi", "Peng", "Li", "Mo", "Lei", "Xie", "Zuan", "Kuang", "You", "Xu", "Lei", "Xian", "Chan", "Kou", "Lu", "Chan", "Ying", "Cai", "Xiang", "Xian", "Zui", "Zuan", "Luo", "Xi", "Dao", "Lan", "Lei", "Lian", "Si", "Jiu", "Yu", "Hong", "Zhou", "Xian", "He", "Yue", "Ji", "Wan", "Kuang", "Ji", "Ren", "Wei", "Yun", "Hong", "Chun", "Pi", "Sha", "Gang", "Na", "Ren", "Zong", "Lun", "Fen", "Zhi", "Wen", "Fang", "Zhu", "Yin", "Niu", "Shu", "Xian", "Gan", "Xie", "Fu", "Lian", "Zu", "Shen", "Xi", "Zhi", "Zhong", "Zhou", "Ban", "Fu", "Zhuo", "Shao", "Yi", "Jing", "Dai", "Bang", "Rong", "Jie", "Ku", "Rao", "Die", "Heng", "Hui", "Gei", "Xuan", "Jiang", "Luo", "Jue", "Jiao", "Tong", "Geng", "Xiao", "Juan", "Xiu", "Xi", "Sui", "Tao", "Ji", "Ti", "Ji", "Xu", "Ling", , "Xu", "Qi", "Fei", "Chuo", "Zhang", "Gun", "Sheng", "Wei", "Mian", "Shou", "Beng", "Chou", "Tao", "Liu", "Quan", "Zong", "Zhan", "Wan", "Lu"], ["Zhui", "Zi", "Ke", "Xiang", "Jian", "Mian", "Lan", "Ti", "Miao", "Qi", "Yun", "Hui", "Si", "Duo", "Duan", "Bian", "Xian", "Gou", "Zhui", "Huan", "Di", "Lu", "Bian", "Min", "Yuan", "Jin", "Fu", "Ru", "Zhen", "Feng", "Shuai", "Gao", "Chan", "Li", "Yi", "Jian", "Bin", "Piao", "Man", "Lei", "Ying", "Suo", "Mou", "Sao", "Xie", "Liao", "Shan", "Zeng", "Jiang", "Qian", "Zao", "Huan", "Jiao", "Zuan", "Fou", "Xie", "Gang", "Fou", "Que", "Fou", "Kaakeru", "Bo", "Ping", "Hou", , "Gang", "Ying", "Ying", "Qing", "Xia", "Guan", "Zun", "Tan", "Chang", "Qi", "Weng", "Ying", "Lei", "Tan", "Lu", "Guan", "Wang", "Wang", "Gang", "Wang", "Han", , "Luo", "Fu", "Mi", "Fa", "Gu", "Zhu", "Ju", "Mao", "Gu", "Min", "Gang", "Ba", "Gua", "Ti", "Juan", "Fu", "Lin", "Yan", "Zhao", "Zui", "Gua", "Zhuo", "Yu", "Zhi", "An", "Fa", "Nan", "Shu", "Si", "Pi", "Ma", "Liu", "Ba", "Fa", "Li", "Chao", "Wei", "Bi", "Ji", "Zeng", "Tong", "Liu", "Ji", "Juan", "Mi", "Zhao", "Luo", "Pi", "Ji", "Ji", "Luan", "Yang", "Mie", "Qiang", "Ta", "Mei", "Yang", "You", "You", "Fen", "Ba", "Gao", "Yang", "Gu", "Qiang", "Zang", "Gao", "Ling", "Yi", "Zhu", "Di", "Xiu", "Qian", "Yi", "Xian", "Rong", "Qun", "Qun", "Qian", "Huan", "Zui", "Xian", "Yi", "Yashinau", "Qiang", "Xian", "Yu", "Geng", "Jie", "Tang", "Yuan", "Xi", "Fan", "Shan", "Fen", "Shan", "Lian", "Lei", "Geng", "Nou", "Qiang", "Chan", "Yu", "Gong", "Yi", "Chong", "Weng", "Fen", "Hong", "Chi", "Chi", "Cui", "Fu", "Xia", "Pen", "Yi", "La", "Yi", "Pi", "Ling", "Liu", "Zhi", "Qu", "Xi", "Xie", "Xiang", "Xi", "Xi", "Qi", "Qiao", "Hui", "Hui", "Xiao", "Se", "Hong", "Jiang", "Di", "Cui", "Fei", "Tao", "Sha", "Chi", "Zhu", "Jian", "Xuan", "Shi", "Pian", "Zong", "Wan", "Hui", "Hou", "He", "He", "Han", "Ao", "Piao", "Yi", "Lian", "Qu", , "Lin", "Pen", "Qiao", "Ao", "Fan", "Yi", "Hui", "Xuan", "Dao"], ["Yao", "Lao", , "Kao", "Mao", "Zhe", "Qi", "Gou", "Gou", "Gou", "Die", "Die", "Er", "Shua", "Ruan", "Er", "Nai", "Zhuan", "Lei", "Ting", "Zi", "Geng", "Chao", "Hao", "Yun", "Pa", "Pi", "Chi", "Si", "Chu", "Jia", "Ju", "He", "Chu", "Lao", "Lun", "Ji", "Tang", "Ou", "Lou", "Nou", "Gou", "Pang", "Ze", "Lou", "Ji", "Lao", "Huo", "You", "Mo", "Huai", "Er", "Zhe", "Ting", "Ye", "Da", "Song", "Qin", "Yun", "Chi", "Dan", "Dan", "Hong", "Geng", "Zhi", , "Nie", "Dan", "Zhen", "Che", "Ling", "Zheng", "You", "Wa", "Liao", "Long", "Zhi", "Ning", "Tiao", "Er", "Ya", "Die", "Gua", , "Lian", "Hao", "Sheng", "Lie", "Pin", "Jing", "Ju", "Bi", "Di", "Guo", "Wen", "Xu", "Ping", "Cong", "Shikato", , "Ting", "Yu", "Cong", "Kui", "Tsuraneru", "Kui", "Cong", "Lian", "Weng", "Kui", "Lian", "Lian", "Cong", "Ao", "Sheng", "Song", "Ting", "Kui", "Nie", "Zhi", "Dan", "Ning", "Qie", "Ji", "Ting", "Ting", "Long", "Yu", "Yu", "Zhao", "Si", "Su", "Yi", "Su", "Si", "Zhao", "Zhao", "Rou", "Yi", "Le", "Ji", "Qiu", "Ken", "Cao", "Ge", "Di", "Huan", "Huang", "Yi", "Ren", "Xiao", "Ru", "Zhou", "Yuan", "Du", "Gang", "Rong", "Gan", "Cha", "Wo", "Chang", "Gu", "Zhi", "Han", "Fu", "Fei", "Fen", "Pei", "Pang", "Jian", "Fang", "Zhun", "You", "Na", "Hang", "Ken", "Ran", "Gong", "Yu", "Wen", "Yao", "Jin", "Pi", "Qian", "Xi", "Xi", "Fei", "Ken", "Jing", "Tai", "Shen", "Zhong", "Zhang", "Xie", "Shen", "Wei", "Zhou", "Die", "Dan", "Fei", "Ba", "Bo", "Qu", "Tian", "Bei", "Gua", "Tai", "Zi", "Ku", "Zhi", "Ni", "Ping", "Zi", "Fu", "Pang", "Zhen", "Xian", "Zuo", "Pei", "Jia", "Sheng", "Zhi", "Bao", "Mu", "Qu", "Hu", "Ke", "Yi", "Yin", "Xu", "Yang", "Long", "Dong", "Ka", "Lu", "Jing", "Nu", "Yan", "Pang", "Kua", "Yi", "Guang", "Gai", "Ge", "Dong", "Zhi", "Xiao", "Xiong", "Xiong", "Er", "E", "Xing", "Pian", "Neng", "Zi", "Gui"], ["Cheng", "Tiao", "Zhi", "Cui", "Mei", "Xie", "Cui", "Xie", "Mo", "Mai", "Ji", "Obiyaakasu", , "Kuai", "Sa", "Zang", "Qi", "Nao", "Mi", "Nong", "Luan", "Wan", "Bo", "Wen", "Guan", "Qiu", "Jiao", "Jing", "Rou", "Heng", "Cuo", "Lie", "Shan", "Ting", "Mei", "Chun", "Shen", "Xie", "De", "Zui", "Cu", "Xiu", "Xin", "Tuo", "Pao", "Cheng", "Nei", "Fu", "Dou", "Tuo", "Niao", "Noy", "Pi", "Gu", "Gua", "Li", "Lian", "Zhang", "Cui", "Jie", "Liang", "Zhou", "Pi", "Biao", "Lun", "Pian", "Guo", "Kui", "Chui", "Dan", "Tian", "Nei", "Jing", "Jie", "La", "Yi", "An", "Ren", "Shen", "Chuo", "Fu", "Fu", "Ju", "Fei", "Qiang", "Wan", "Dong", "Pi", "Guo", "Zong", "Ding", "Wu", "Mei", "Ruan", "Zhuan", "Zhi", "Cou", "Gua", "Ou", "Di", "An", "Xing", "Nao", "Yu", "Chuan", "Nan", "Yun", "Zhong", "Rou", "E", "Sai", "Tu", "Yao", "Jian", "Wei", "Jiao", "Yu", "Jia", "Duan", "Bi", "Chang", "Fu", "Xian", "Ni", "Mian", "Wa", "Teng", "Tui", "Bang", "Qian", "Lu", "Wa", "Sou", "Tang", "Su", "Zhui", "Ge", "Yi", "Bo", "Liao", "Ji", "Pi", "Xie", "Gao", "Lu", "Bin", "Ou", "Chang", "Lu", "Guo", "Pang", "Chuai", "Piao", "Jiang", "Fu", "Tang", "Mo", "Xi", "Zhuan", "Lu", "Jiao", "Ying", "Lu", "Zhi", "Tara", "Chun", "Lian", "Tong", "Peng", "Ni", "Zha", "Liao", "Cui", "Gui", "Xiao", "Teng", "Fan", "Zhi", "Jiao", "Shan", "Wu", "Cui", "Run", "Xiang", "Sui", "Fen", "Ying", "Tan", "Zhua", "Dan", "Kuai", "Nong", "Tun", "Lian", "Bi", "Yong", "Jue", "Chu", "Yi", "Juan", "La", "Lian", "Sao", "Tun", "Gu", "Qi", "Cui", "Bin", "Xun", "Ru", "Huo", "Zang", "Xian", "Biao", "Xing", "Kuan", "La", "Yan", "Lu", "Huo", "Zang", "Luo", "Qu", "Zang", "Luan", "Ni", "Zang", "Chen", "Qian", "Wo", "Guang", "Zang", "Lin", "Guang", "Zi", "Jiao", "Nie", "Chou", "Ji", "Gao", "Chou", "Mian", "Nie", "Zhi", "Zhi", "Ge", "Jian", "Die", "Zhi", "Xiu", "Tai", "Zhen", "Jiu", "Xian", "Yu", "Cha"], ["Yao", "Yu", "Chong", "Xi", "Xi", "Jiu", "Yu", "Yu", "Xing", "Ju", "Jiu", "Xin", "She", "She", "Yadoru", "Jiu", "Shi", "Tan", "Shu", "Shi", "Tian", "Dan", "Pu", "Pu", "Guan", "Hua", "Tan", "Chuan", "Shun", "Xia", "Wu", "Zhou", "Dao", "Gang", "Shan", "Yi", , "Pa", "Tai", "Fan", "Ban", "Chuan", "Hang", "Fang", "Ban", "Que", "Hesaki", "Zhong", "Jian", "Cang", "Ling", "Zhu", "Ze", "Duo", "Bo", "Xian", "Ge", "Chuan", "Jia", "Lu", "Hong", "Pang", "Xi", , "Fu", "Zao", "Feng", "Li", "Shao", "Yu", "Lang", "Ting", , "Wei", "Bo", "Meng", "Nian", "Ju", "Huang", "Shou", "Zong", "Bian", "Mao", "Die", , "Bang", "Cha", "Yi", "Sao", "Cang", "Cao", "Lou", "Dai", "Sori", "Yao", "Tong", "Yofune", "Dang", "Tan", "Lu", "Yi", "Jie", "Jian", "Huo", "Meng", "Qi", "Lu", "Lu", "Chan", "Shuang", "Gen", "Liang", "Jian", "Jian", "Se", "Yan", "Fu", "Ping", "Yan", "Yan", "Cao", "Cao", "Yi", "Le", "Ting", "Qiu", "Ai", "Nai", "Tiao", "Jiao", "Jie", "Peng", "Wan", "Yi", "Chai", "Mian", "Mie", "Gan", "Qian", "Yu", "Yu", "Shuo", "Qiong", "Tu", "Xia", "Qi", "Mang", "Zi", "Hui", "Sui", "Zhi", "Xiang", "Bi", "Fu", "Tun", "Wei", "Wu", "Zhi", "Qi", "Shan", "Wen", "Qian", "Ren", "Fou", "Kou", "Jie", "Lu", "Xu", "Ji", "Qin", "Qi", "Yuan", "Fen", "Ba", "Rui", "Xin", "Ji", "Hua", "Hua", "Fang", "Wu", "Jue", "Gou", "Zhi", "Yun", "Qin", "Ao", "Chu", "Mao", "Ya", "Fei", "Reng", "Hang", "Cong", "Yin", "You", "Bian", "Yi", "Susa", "Wei", "Li", "Pi", "E", "Xian", "Chang", "Cang", "Meng", "Su", "Yi", "Yuan", "Ran", "Ling", "Tai", "Tiao", "Di", "Miao", "Qiong", "Li", "Yong", "Ke", "Mu", "Pei", "Bao", "Gou", "Min", "Yi", "Yi", "Ju", "Pi", "Ruo", "Ku", "Zhu", "Ni", "Bo", "Bing", "Shan", "Qiu", "Yao", "Xian", "Ben", "Hong", "Ying", "Zha", "Dong", "Ju", "Die", "Nie", "Gan", "Hu", "Ping", "Mei", "Fu", "Sheng", "Gu", "Bi", "Wei"], ["Fu", "Zhuo", "Mao", "Fan", "Qie", "Mao", "Mao", "Ba", "Zi", "Mo", "Zi", "Di", "Chi", "Ji", "Jing", "Long", , "Niao", , "Xue", "Ying", "Qiong", "Ge", "Ming", "Li", "Rong", "Yin", "Gen", "Qian", "Chai", "Chen", "Yu", "Xiu", "Zi", "Lie", "Wu", "Ji", "Kui", "Ce", "Chong", "Ci", "Gou", "Guang", "Mang", "Chi", "Jiao", "Jiao", "Fu", "Yu", "Zhu", "Zi", "Jiang", "Hui", "Yin", "Cha", "Fa", "Rong", "Ru", "Chong", "Mang", "Tong", "Zhong", , "Zhu", "Xun", "Huan", "Kua", "Quan", "Gai", "Da", "Jing", "Xing", "Quan", "Cao", "Jing", "Er", "An", "Shou", "Chi", "Ren", "Jian", "Ti", "Huang", "Ping", "Li", "Jin", "Lao", "Shu", "Zhuang", "Da", "Jia", "Rao", "Bi", "Ze", "Qiao", "Hui", "Qi", "Dang", , "Rong", "Hun", "Ying", "Luo", "Ying", "Xun", "Jin", "Sun", "Yin", "Mai", "Hong", "Zhou", "Yao", "Du", "Wei", "Chu", "Dou", "Fu", "Ren", "Yin", "He", "Bi", "Bu", "Yun", "Di", "Tu", "Sui", "Sui", "Cheng", "Chen", "Wu", "Bie", "Xi", "Geng", "Li", "Fu", "Zhu", "Mo", "Li", "Zhuang", "Ji", "Duo", "Qiu", "Sha", "Suo", "Chen", "Feng", "Ju", "Mei", "Meng", "Xing", "Jing", "Che", "Xin", "Jun", "Yan", "Ting", "Diao", "Cuo", "Wan", "Han", "You", "Cuo", "Jia", "Wang", "You", "Niu", "Shao", "Xian", "Lang", "Fu", "E", "Mo", "Wen", "Jie", "Nan", "Mu", "Kan", "Lai", "Lian", "Shi", "Wo", "Usagi", "Lian", "Huo", "You", "Ying", "Ying", "Nuc", "Chun", "Mang", "Mang", "Ci", "Wan", "Jing", "Di", "Qu", "Dong", "Jian", "Zou", "Gu", "La", "Lu", "Ju", "Wei", "Jun", "Nie", "Kun", "He", "Pu", "Zi", "Gao", "Guo", "Fu", "Lun", "Chang", "Chou", "Song", "Chui", "Zhan", "Men", "Cai", "Ba", "Li", "Tu", "Bo", "Han", "Bao", "Qin", "Juan", "Xi", "Qin", "Di", "Jie", "Pu", "Dang", "Jin", "Zhao", "Tai", "Geng", "Hua", "Gu", "Ling", "Fei", "Jin", "An", "Wang", "Beng", "Zhou", "Yan", "Ju", "Jian", "Lin", "Tan", "Shu", "Tian", "Dao"], ["Hu", "Qi", "He", "Cui", "Tao", "Chun", "Bei", "Chang", "Huan", "Fei", "Lai", "Qi", "Meng", "Ping", "Wei", "Dan", "Sha", "Huan", "Yan", "Yi", "Tiao", "Qi", "Wan", "Ce", "Nai", "Kutabireru", "Tuo", "Jiu", "Tie", "Luo", , , "Meng", , "Yaji", , "Ying", "Ying", "Ying", "Xiao", "Sa", "Qiu", "Ke", "Xiang", "Wan", "Yu", "Yu", "Fu", "Lian", "Xuan", "Yuan", "Nan", "Ze", "Wo", "Chun", "Xiao", "Yu", "Pian", "Mao", "An", "E", "Luo", "Ying", "Huo", "Gua", "Jiang", "Mian", "Zuo", "Zuo", "Ju", "Bao", "Rou", "Xi", "Xie", "An", "Qu", "Jian", "Fu", "Lu", "Jing", "Pen", "Feng", "Hong", "Hong", "Hou", "Yan", "Tu", "Zhu", "Zi", "Xiang", "Shen", "Ge", "Jie", "Jing", "Mi", "Huang", "Shen", "Pu", "Gai", "Dong", "Zhou", "Qian", "Wei", "Bo", "Wei", "Pa", "Ji", "Hu", "Zang", "Jia", "Duan", "Yao", "Jun", "Cong", "Quan", "Wei", "Xian", "Kui", "Ting", "Hun", "Xi", "Shi", "Qi", "Lan", "Zong", "Yao", "Yuan", "Mei", "Yun", "Shu", "Di", "Zhuan", "Guan", "Sukumo", "Xue", "Chan", "Kai", "Kui", , "Jiang", "Lou", "Wei", "Pai", , "Sou", "Yin", "Shi", "Chun", "Shi", "Yun", "Zhen", "Lang", "Nu", "Meng", "He", "Que", "Suan", "Yuan", "Li", "Ju", "Xi", "Pang", "Chu", "Xu", "Tu", "Liu", "Wo", "Zhen", "Qian", "Zu", "Po", "Cuo", "Yuan", "Chu", "Yu", "Kuai", "Pan", "Pu", "Pu", "Na", "Shuo", "Xi", "Fen", "Yun", "Zheng", "Jian", "Ji", "Ruo", "Cang", "En", "Mi", "Hao", "Sun", "Zhen", "Ming", "Sou", "Xu", "Liu", "Xi", "Gu", "Lang", "Rong", "Weng", "Gai", "Cuo", "Shi", "Tang", "Luo", "Ru", "Suo", "Xian", "Bei", "Yao", "Gui", "Bi", "Zong", "Gun", "Za", "Xiu", "Ce", "Hai", "Lan", , "Ji", "Li", "Can", "Lang", "Yu", , "Ying", "Mo", "Diao", "Tiao", "Mao", "Tong", "Zhu", "Peng", "An", "Lian", "Cong", "Xi", "Ping", "Qiu", "Jin", "Chun", "Jie", "Wei", "Tui", "Cao", "Yu", "Yi", "Ji", "Liao", "Bi", "Lu", "Su"], ["Bu", "Zhang", "Luo", "Jiang", "Man", "Yan", "Ling", "Ji", "Piao", "Gun", "Han", "Di", "Su", "Lu", "She", "Shang", "Di", "Mie", "Xun", "Man", "Bo", "Di", "Cuo", "Zhe", "Sen", "Xuan", "Wei", "Hu", "Ao", "Mi", "Lou", "Cu", "Zhong", "Cai", "Po", "Jiang", "Mi", "Cong", "Niao", "Hui", "Jun", "Yin", "Jian", "Yan", "Shu", "Yin", "Kui", "Chen", "Hu", "Sha", "Kou", "Qian", "Ma", "Zang", "Sonoko", "Qiang", "Dou", "Lian", "Lin", "Kou", "Ai", "Bi", "Li", "Wei", "Ji", "Xun", "Sheng", "Fan", "Meng", "Ou", "Chan", "Dian", "Xun", "Jiao", "Rui", "Rui", "Lei", "Yu", "Qiao", "Chu", "Hua", "Jian", "Mai", "Yun", "Bao", "You", "Qu", "Lu", "Rao", "Hui", "E", "Teng", "Fei", "Jue", "Zui", "Fa", "Ru", "Fen", "Kui", "Shun", "Rui", "Ya", "Xu", "Fu", "Jue", "Dang", "Wu", "Tong", "Si", "Xiao", "Xi", "Long", "Yun", , "Qi", "Jian", "Yun", "Sun", "Ling", "Yu", "Xia", "Yong", "Ji", "Hong", "Si", "Nong", "Lei", "Xuan", "Yun", "Yu", "Xi", "Hao", "Bo", "Hao", "Ai", "Wei", "Hui", "Wei", "Ji", "Ci", "Xiang", "Luan", "Mie", "Yi", "Leng", "Jiang", "Can", "Shen", "Qiang", "Lian", "Ke", "Yuan", "Da", "Ti", "Tang", "Xie", "Bi", "Zhan", "Sun", "Lian", "Fan", "Ding", "Jie", "Gu", "Xie", "Shu", "Jian", "Kao", "Hong", "Sa", "Xin", "Xun", "Yao", "Hie", "Sou", "Shu", "Xun", "Dui", "Pin", "Wei", "Neng", "Chou", "Mai", "Ru", "Piao", "Tai", "Qi", "Zao", "Chen", "Zhen", "Er", "Ni", "Ying", "Gao", "Cong", "Xiao", "Qi", "Fa", "Jian", "Xu", "Kui", "Jie", "Bian", "Diao", "Mi", "Lan", "Jin", "Cang", "Miao", "Qiong", "Qie", "Xian", , "Ou", "Xian", "Su", "Lu", "Yi", "Xu", "Xie", "Li", "Yi", "La", "Lei", "Xiao", "Di", "Zhi", "Bei", "Teng", "Yao", "Mo", "Huan", "Piao", "Fan", "Sou", "Tan", "Tui", "Qiong", "Qiao", "Wei", "Liu", "Hui", , "Gao", "Yun", , "Li", "Shu", "Chu", "Ai", "Lin", "Zao", "Xuan", "Chen", "Lai", "Huo"], ["Tuo", "Wu", "Rui", "Rui", "Qi", "Heng", "Lu", "Su", "Tui", "Mang", "Yun", "Pin", "Yu", "Xun", "Ji", "Jiong", "Xian", "Mo", "Hagi", "Su", "Jiong", , "Nie", "Bo", "Rang", "Yi", "Xian", "Yu", "Ju", "Lian", "Lian", "Yin", "Qiang", "Ying", "Long", "Tong", "Wei", "Yue", "Ling", "Qu", "Yao", "Fan", "Mi", "Lan", "Kui", "Lan", "Ji", "Dang", "Katsura", "Lei", "Lei", "Hua", "Feng", "Zhi", "Wei", "Kui", "Zhan", "Huai", "Li", "Ji", "Mi", "Lei", "Huai", "Luo", "Ji", "Kui", "Lu", "Jian", "San", , "Lei", "Quan", "Xiao", "Yi", "Luan", "Men", "Bie", "Hu", "Hu", "Lu", "Nue", "Lu", "Si", "Xiao", "Qian", "Chu", "Hu", "Xu", "Cuo", "Fu", "Xu", "Xu", "Lu", "Hu", "Yu", "Hao", "Jiao", "Ju", "Guo", "Bao", "Yan", "Zhan", "Zhan", "Kui", "Ban", "Xi", "Shu", "Chong", "Qiu", "Diao", "Ji", "Qiu", "Cheng", "Shi", , "Di", "Zhe", "She", "Yu", "Gan", "Zi", "Hong", "Hui", "Meng", "Ge", "Sui", "Xia", "Chai", "Shi", "Yi", "Ma", "Xiang", "Fang", "E", "Pa", "Chi", "Qian", "Wen", "Wen", "Rui", "Bang", "Bi", "Yue", "Yue", "Jun", "Qi", "Ran", "Yin", "Qi", "Tian", "Yuan", "Jue", "Hui", "Qin", "Qi", "Zhong", "Ya", "Ci", "Mu", "Wang", "Fen", "Fen", "Hang", "Gong", "Zao", "Fu", "Ran", "Jie", "Fu", "Chi", "Dou", "Piao", "Xian", "Ni", "Te", "Qiu", "You", "Zha", "Ping", "Chi", "You", "He", "Han", "Ju", "Li", "Fu", "Ran", "Zha", "Gou", "Pi", "Bo", "Xian", "Zhu", "Diao", "Bie", "Bing", "Gu", "Ran", "Qu", "She", "Tie", "Ling", "Gu", "Dan", "Gu", "Ying", "Li", "Cheng", "Qu", "Mou", "Ge", "Ci", "Hui", "Hui", "Mang", "Fu", "Yang", "Wa", "Lie", "Zhu", "Yi", "Xian", "Kuo", "Jiao", "Li", "Yi", "Ping", "Ji", "Ha", "She", "Yi", "Wang", "Mo", "Qiong", "Qie", "Gui", "Gong", "Zhi", "Man", "Ebi", "Zhi", "Jia", "Rao", "Si", "Qi", "Xing", "Lie", "Qiu", "Shao", "Yong", "Jia", "Shui", "Che", "Bai", "E", "Han"], ["Shu", "Xuan", "Feng", "Shen", "Zhen", "Fu", "Xian", "Zhe", "Wu", "Fu", "Li", "Lang", "Bi", "Chu", "Yuan", "You", "Jie", "Dan", "Yan", "Ting", "Dian", "Shui", "Hui", "Gua", "Zhi", "Song", "Fei", "Ju", "Mi", "Qi", "Qi", "Yu", "Jun", "Zha", "Meng", "Qiang", "Si", "Xi", "Lun", "Li", "Die", "Tiao", "Tao", "Kun", "Gan", "Han", "Yu", "Bang", "Fei", "Pi", "Wei", "Dun", "Yi", "Yuan", "Su", "Quan", "Qian", "Rui", "Ni", "Qing", "Wei", "Liang", "Guo", "Wan", "Dong", "E", "Ban", "Di", "Wang", "Can", "Yang", "Ying", "Guo", "Chan", , "La", "Ke", "Ji", "He", "Ting", "Mai", "Xu", "Mian", "Yu", "Jie", "Shi", "Xuan", "Huang", "Yan", "Bian", "Rou", "Wei", "Fu", "Yuan", "Mei", "Wei", "Fu", "Ruan", "Xie", "You", "Qiu", "Mao", "Xia", "Ying", "Shi", "Chong", "Tang", "Zhu", "Zong", "Ti", "Fu", "Yuan", "Hui", "Meng", "La", "Du", "Hu", "Qiu", "Die", "Li", "Gua", "Yun", "Ju", "Nan", "Lou", "Qun", "Rong", "Ying", "Jiang", , "Lang", "Pang", "Si", "Xi", "Ci", "Xi", "Yuan", "Weng", "Lian", "Sou", "Ban", "Rong", "Rong", "Ji", "Wu", "Qiu", "Han", "Qin", "Yi", "Bi", "Hua", "Tang", "Yi", "Du", "Nai", "He", "Hu", "Hui", "Ma", "Ming", "Yi", "Wen", "Ying", "Teng", "Yu", "Cang", "So", "Ebi", "Man", , "Shang", "Zhe", "Cao", "Chi", "Di", "Ao", "Lu", "Wei", "Zhi", "Tang", "Chen", "Piao", "Qu", "Pi", "Yu", "Jian", "Luo", "Lou", "Qin", "Zhong", "Yin", "Jiang", "Shuai", "Wen", "Jiao", "Wan", "Zhi", "Zhe", "Ma", "Ma", "Guo", "Liu", "Mao", "Xi", "Cong", "Li", "Man", "Xiao", "Kamakiri", "Zhang", "Mang", "Xiang", "Mo", "Zui", "Si", "Qiu", "Te", "Zhi", "Peng", "Peng", "Jiao", "Qu", "Bie", "Liao", "Pan", "Gui", "Xi", "Ji", "Zhuan", "Huang", "Fei", "Lao", "Jue", "Jue", "Hui", "Yin", "Chan", "Jiao", "Shan", "Rao", "Xiao", "Mou", "Chong", "Xun", "Si", , "Cheng", "Dang", "Li", "Xie", "Shan", "Yi", "Jing", "Da", "Chan", "Qi"], ["Ci", "Xiang", "She", "Luo", "Qin", "Ying", "Chai", "Li", "Ze", "Xuan", "Lian", "Zhu", "Ze", "Xie", "Mang", "Xie", "Qi", "Rong", "Jian", "Meng", "Hao", "Ruan", "Huo", "Zhuo", "Jie", "Bin", "He", "Mie", "Fan", "Lei", "Jie", "La", "Mi", "Li", "Chun", "Li", "Qiu", "Nie", "Lu", "Du", "Xiao", "Zhu", "Long", "Li", "Long", "Feng", "Ye", "Beng", "Shang", "Gu", "Juan", "Ying", , "Xi", "Can", "Qu", "Quan", "Du", "Can", "Man", "Jue", "Jie", "Zhu", "Zha", "Xie", "Huang", "Niu", "Pei", "Nu", "Xin", "Zhong", "Mo", "Er", "Ke", "Mie", "Xi", "Xing", "Yan", "Kan", "Yuan", , "Ling", "Xuan", "Shu", "Xian", "Tong", "Long", "Jie", "Xian", "Ya", "Hu", "Wei", "Dao", "Chong", "Wei", "Dao", "Zhun", "Heng", "Qu", "Yi", "Yi", "Bu", "Gan", "Yu", "Biao", "Cha", "Yi", "Shan", "Chen", "Fu", "Gun", "Fen", "Shuai", "Jie", "Na", "Zhong", "Dan", "Ri", "Zhong", "Zhong", "Xie", "Qi", "Xie", "Ran", "Zhi", "Ren", "Qin", "Jin", "Jun", "Yuan", "Mei", "Chai", "Ao", "Niao", "Hui", "Ran", "Jia", "Tuo", "Ling", "Dai", "Bao", "Pao", "Yao", "Zuo", "Bi", "Shao", "Tan", "Ju", "He", "Shu", "Xiu", "Zhen", "Yi", "Pa", "Bo", "Di", "Wa", "Fu", "Gun", "Zhi", "Zhi", "Ran", "Pan", "Yi", "Mao", "Tuo", "Na", "Kou", "Xian", "Chan", "Qu", "Bei", "Gun", "Xi", "Ne", "Bo", "Horo", "Fu", "Yi", "Chi", "Ku", "Ren", "Jiang", "Jia", "Cun", "Mo", "Jie", "Er", "Luo", "Ru", "Zhu", "Gui", "Yin", "Cai", "Lie", "Kamishimo", "Yuki", "Zhuang", "Dang", , "Kun", "Ken", "Niao", "Shu", "Jia", "Kun", "Cheng", "Li", "Juan", "Shen", "Pou", "Ge", "Yi", "Yu", "Zhen", "Liu", "Qiu", "Qun", "Ji", "Yi", "Bu", "Zhuang", "Shui", "Sha", "Qun", "Li", "Lian", "Lian", "Ku", "Jian", "Fou", "Chan", "Bi", "Gun", "Tao", "Yuan", "Ling", "Chi", "Chang", "Chou", "Duo", "Biao", "Liang", "Chang", "Pei", "Pei", "Fei", "Yuan", "Luo", "Guo", "Yan", "Du", "Xi", "Zhi", "Ju", "Qi"], ["Ji", "Zhi", "Gua", "Ken", "Che", "Ti", "Ti", "Fu", "Chong", "Xie", "Bian", "Die", "Kun", "Duan", "Xiu", "Xiu", "He", "Yuan", "Bao", "Bao", "Fu", "Yu", "Tuan", "Yan", "Hui", "Bei", "Chu", "Lu", "Ena", "Hitoe", "Yun", "Da", "Gou", "Da", "Huai", "Rong", "Yuan", "Ru", "Nai", "Jiong", "Suo", "Ban", "Tun", "Chi", "Sang", "Niao", "Ying", "Jie", "Qian", "Huai", "Ku", "Lian", "Bao", "Li", "Zhe", "Shi", "Lu", "Yi", "Die", "Xie", "Xian", "Wei", "Biao", "Cao", "Ji", "Jiang", "Sen", "Bao", "Xiang", "Chihaya", "Pu", "Jian", "Zhuan", "Jian", "Zui", "Ji", "Dan", "Za", "Fan", "Bo", "Xiang", "Xin", "Bie", "Rao", "Man", "Lan", "Ao", "Duo", "Gui", "Cao", "Sui", "Nong", "Chan", "Lian", "Bi", "Jin", "Dang", "Shu", "Tan", "Bi", "Lan", "Pu", "Ru", "Zhi", , "Shu", "Wa", "Shi", "Bai", "Xie", "Bo", "Chen", "Lai", "Long", "Xi", "Xian", "Lan", "Zhe", "Dai", "Tasuki", "Zan", "Shi", "Jian", "Pan", "Yi", "Ran", "Ya", "Xi", "Xi", "Yao", "Feng", "Tan", , "Biao", "Fu", "Ba", "He", "Ji", "Ji", "Jian", "Guan", "Bian", "Yan", "Gui", "Jue", "Pian", "Mao", "Mi", "Mi", "Mie", "Shi", "Si", "Zhan", "Luo", "Jue", "Mi", "Tiao", "Lian", "Yao", "Zhi", "Jun", "Xi", "Shan", "Wei", "Xi", "Tian", "Yu", "Lan", "E", "Du", "Qin", "Pang", "Ji", "Ming", "Ying", "Gou", "Qu", "Zhan", "Jin", "Guan", "Deng", "Jian", "Luo", "Qu", "Jian", "Wei", "Jue", "Qu", "Luo", "Lan", "Shen", "Di", "Guan", "Jian", "Guan", "Yan", "Gui", "Mi", "Shi", "Zhan", "Lan", "Jue", "Ji", "Xi", "Di", "Tian", "Yu", "Gou", "Jin", "Qu", "Jiao", "Jiu", "Jin", "Cu", "Jue", "Zhi", "Chao", "Ji", "Gu", "Dan", "Zui", "Di", "Shang", "Hua", "Quan", "Ge", "Chi", "Jie", "Gui", "Gong", "Chu", "Jie", "Hun", "Qiu", "Xing", "Su", "Ni", "Ji", "Lu", "Zhi", "Zha", "Bi", "Xing", "Hu", "Shang", "Gong", "Zhi", "Xue", "Chu", "Xi", "Yi", "Lu", "Jue", "Xi", "Yan", "Xi"], ["Yan", "Yan", "Ding", "Fu", "Qiu", "Qiu", "Jiao", "Hong", "Ji", "Fan", "Xun", "Diao", "Hong", "Cha", "Tao", "Xu", "Jie", "Yi", "Ren", "Xun", "Yin", "Shan", "Qi", "Tuo", "Ji", "Xun", "Yin", "E", "Fen", "Ya", "Yao", "Song", "Shen", "Yin", "Xin", "Jue", "Xiao", "Ne", "Chen", "You", "Zhi", "Xiong", "Fang", "Xin", "Chao", "She", "Xian", "Sha", "Tun", "Xu", "Yi", "Yi", "Su", "Chi", "He", "Shen", "He", "Xu", "Zhen", "Zhu", "Zheng", "Gou", "Zi", "Zi", "Zhan", "Gu", "Fu", "Quan", "Die", "Ling", "Di", "Yang", "Li", "Nao", "Pan", "Zhou", "Gan", "Yi", "Ju", "Ao", "Zha", "Tuo", "Yi", "Qu", "Zhao", "Ping", "Bi", "Xiong", "Qu", "Ba", "Da", "Zu", "Tao", "Zhu", "Ci", "Zhe", "Yong", "Xu", "Xun", "Yi", "Huang", "He", "Shi", "Cha", "Jiao", "Shi", "Hen", "Cha", "Gou", "Gui", "Quan", "Hui", "Jie", "Hua", "Gai", "Xiang", "Wei", "Shen", "Chou", "Tong", "Mi", "Zhan", "Ming", "E", "Hui", "Yan", "Xiong", "Gua", "Er", "Beng", "Tiao", "Chi", "Lei", "Zhu", "Kuang", "Kua", "Wu", "Yu", "Teng", "Ji", "Zhi", "Ren", "Su", "Lang", "E", "Kuang", "E", "Shi", "Ting", "Dan", "Bo", "Chan", "You", "Heng", "Qiao", "Qin", "Shua", "An", "Yu", "Xiao", "Cheng", "Jie", "Xian", "Wu", "Wu", "Gao", "Song", "Pu", "Hui", "Jing", "Shuo", "Zhen", "Shuo", "Du", "Yasashi", "Chang", "Shui", "Jie", "Ke", "Qu", "Cong", "Xiao", "Sui", "Wang", "Xuan", "Fei", "Chi", "Ta", "Yi", "Na", "Yin", "Diao", "Pi", "Chuo", "Chan", "Chen", "Zhun", "Ji", "Qi", "Tan", "Zhui", "Wei", "Ju", "Qing", "Jian", "Zheng", "Ze", "Zou", "Qian", "Zhuo", "Liang", "Jian", "Zhu", "Hao", "Lun", "Shen", "Biao", "Huai", "Pian", "Yu", "Die", "Xu", "Pian", "Shi", "Xuan", "Shi", "Hun", "Hua", "E", "Zhong", "Di", "Xie", "Fu", "Pu", "Ting", "Jian", "Qi", "Yu", "Zi", "Chuan", "Xi", "Hui", "Yin", "An", "Xian", "Nan", "Chen", "Feng", "Zhu", "Yang", "Yan", "Heng", "Xuan", "Ge", "Nuo", "Qi"], ["Mou", "Ye", "Wei", , "Teng", "Zou", "Shan", "Jian", "Bo", "Ku", "Huang", "Huo", "Ge", "Ying", "Mi", "Xiao", "Mi", "Xi", "Qiang", "Chen", "Nue", "Ti", "Su", "Bang", "Chi", "Qian", "Shi", "Jiang", "Yuan", "Xie", "Xue", "Tao", "Yao", "Yao", , "Yu", "Biao", "Cong", "Qing", "Li", "Mo", "Mo", "Shang", "Zhe", "Miu", "Jian", "Ze", "Jie", "Lian", "Lou", "Can", "Ou", "Guan", "Xi", "Zhuo", "Ao", "Ao", "Jin", "Zhe", "Yi", "Hu", "Jiang", "Man", "Chao", "Han", "Hua", "Chan", "Xu", "Zeng", "Se", "Xi", "She", "Dui", "Zheng", "Nao", "Lan", "E", "Ying", "Jue", "Ji", "Zun", "Jiao", "Bo", "Hui", "Zhuan", "Mu", "Zen", "Zha", "Shi", "Qiao", "Tan", "Zen", "Pu", "Sheng", "Xuan", "Zao", "Tan", "Dang", "Sui", "Qian", "Ji", "Jiao", "Jing", "Lian", "Nou", "Yi", "Ai", "Zhan", "Pi", "Hui", "Hua", "Yi", "Yi", "Shan", "Rang", "Nou", "Qian", "Zhui", "Ta", "Hu", "Zhou", "Hao", "Ye", "Ying", "Jian", "Yu", "Jian", "Hui", "Du", "Zhe", "Xuan", "Zan", "Lei", "Shen", "Wei", "Chan", "Li", "Yi", "Bian", "Zhe", "Yan", "E", "Chou", "Wei", "Chou", "Yao", "Chan", "Rang", "Yin", "Lan", "Chen", "Huo", "Zhe", "Huan", "Zan", "Yi", "Dang", "Zhan", "Yan", "Du", "Yan", "Ji", "Ding", "Fu", "Ren", "Ji", "Jie", "Hong", "Tao", "Rang", "Shan", "Qi", "Tuo", "Xun", "Yi", "Xun", "Ji", "Ren", "Jiang", "Hui", "Ou", "Ju", "Ya", "Ne", "Xu", "E", "Lun", "Xiong", "Song", "Feng", "She", "Fang", "Jue", "Zheng", "Gu", "He", "Ping", "Zu", "Shi", "Xiong", "Zha", "Su", "Zhen", "Di", "Zou", "Ci", "Qu", "Zhao", "Bi", "Yi", "Yi", "Kuang", "Lei", "Shi", "Gua", "Shi", "Jie", "Hui", "Cheng", "Zhu", "Shen", "Hua", "Dan", "Gou", "Quan", "Gui", "Xun", "Yi", "Zheng", "Gai", "Xiang", "Cha", "Hun", "Xu", "Zhou", "Jie", "Wu", "Yu", "Qiao", "Wu", "Gao", "You", "Hui", "Kuang", "Shuo", "Song", "Ai", "Qing", "Zhu", "Zou", "Nuo", "Du", "Zhuo", "Fei", "Ke", "Wei"], ["Yu", "Shui", "Shen", "Diao", "Chan", "Liang", "Zhun", "Sui", "Tan", "Shen", "Yi", "Mou", "Chen", "Die", "Huang", "Jian", "Xie", "Nue", "Ye", "Wei", "E", "Yu", "Xuan", "Chan", "Zi", "An", "Yan", "Di", "Mi", "Pian", "Xu", "Mo", "Dang", "Su", "Xie", "Yao", "Bang", "Shi", "Qian", "Mi", "Jin", "Man", "Zhe", "Jian", "Miu", "Tan", "Zen", "Qiao", "Lan", "Pu", "Jue", "Yan", "Qian", "Zhan", "Chen", "Gu", "Qian", "Hong", "Xia", "Jue", "Hong", "Han", "Hong", "Xi", "Xi", "Huo", "Liao", "Han", "Du", "Long", "Dou", "Jiang", "Qi", "Shi", "Li", "Deng", "Wan", "Bi", "Shu", "Xian", "Feng", "Zhi", "Zhi", "Yan", "Yan", "Shi", "Chu", "Hui", "Tun", "Yi", "Tun", "Yi", "Jian", "Ba", "Hou", "E", "Cu", "Xiang", "Huan", "Jian", "Ken", "Gai", "Qu", "Fu", "Xi", "Bin", "Hao", "Yu", "Zhu", "Jia", , "Xi", "Bo", "Wen", "Huan", "Bin", "Di", "Zong", "Fen", "Yi", "Zhi", "Bao", "Chai", "Han", "Pi", "Na", "Pi", "Gou", "Na", "You", "Diao", "Mo", "Si", "Xiu", "Huan", "Kun", "He", "He", "Mo", "Han", "Mao", "Li", "Ni", "Bi", "Yu", "Jia", "Tuan", "Mao", "Pi", "Xi", "E", "Ju", "Mo", "Chu", "Tan", "Huan", "Jue", "Bei", "Zhen", "Yuan", "Fu", "Cai", "Gong", "Te", "Yi", "Hang", "Wan", "Pin", "Huo", "Fan", "Tan", "Guan", "Ze", "Zhi", "Er", "Zhu", "Shi", "Bi", "Zi", "Er", "Gui", "Pian", "Bian", "Mai", "Dai", "Sheng", "Kuang", "Fei", "Tie", "Yi", "Chi", "Mao", "He", "Bi", "Lu", "Ren", "Hui", "Gai", "Pian", "Zi", "Jia", "Xu", "Zei", "Jiao", "Gai", "Zang", "Jian", "Ying", "Xun", "Zhen", "She", "Bin", "Bin", "Qiu", "She", "Chuan", "Zang", "Zhou", "Lai", "Zan", "Si", "Chen", "Shang", "Tian", "Pei", "Geng", "Xian", "Mai", "Jian", "Sui", "Fu", "Tan", "Cong", "Cong", "Zhi", "Ji", "Zhang", "Du", "Jin", "Xiong", "Shun", "Yun", "Bao", "Zai", "Lai", "Feng", "Cang", "Ji", "Sheng", "Ai", "Zhuan", "Fu", "Gou", "Sai", "Ze", "Liao"], ["Wei", "Bai", "Chen", "Zhuan", "Zhi", "Zhui", "Biao", "Yun", "Zeng", "Tan", "Zan", "Yan", , "Shan", "Wan", "Ying", "Jin", "Gan", "Xian", "Zang", "Bi", "Du", "Shu", "Yan", , "Xuan", "Long", "Gan", "Zang", "Bei", "Zhen", "Fu", "Yuan", "Gong", "Cai", "Ze", "Xian", "Bai", "Zhang", "Huo", "Zhi", "Fan", "Tan", "Pin", "Bian", "Gou", "Zhu", "Guan", "Er", "Jian", "Bi", "Shi", "Tie", "Gui", "Kuang", "Dai", "Mao", "Fei", "He", "Yi", "Zei", "Zhi", "Jia", "Hui", "Zi", "Ren", "Lu", "Zang", "Zi", "Gai", "Jin", "Qiu", "Zhen", "Lai", "She", "Fu", "Du", "Ji", "Shu", "Shang", "Si", "Bi", "Zhou", "Geng", "Pei", "Tan", "Lai", "Feng", "Zhui", "Fu", "Zhuan", "Sai", "Ze", "Yan", "Zan", "Yun", "Zeng", "Shan", "Ying", "Gan", "Chi", "Xi", "She", "Nan", "Xiong", "Xi", "Cheng", "He", "Cheng", "Zhe", "Xia", "Tang", "Zou", "Zou", "Li", "Jiu", "Fu", "Zhao", "Gan", "Qi", "Shan", "Qiong", "Qin", "Xian", "Ci", "Jue", "Qin", "Chi", "Ci", "Chen", "Chen", "Die", "Ju", "Chao", "Di", "Se", "Zhan", "Zhu", "Yue", "Qu", "Jie", "Chi", "Chu", "Gua", "Xue", "Ci", "Tiao", "Duo", "Lie", "Gan", "Suo", "Cu", "Xi", "Zhao", "Su", "Yin", "Ju", "Jian", "Que", "Tang", "Chuo", "Cui", "Lu", "Qu", "Dang", "Qiu", "Zi", "Ti", "Qu", "Chi", "Huang", "Qiao", "Qiao", "Yao", "Zao", "Ti", , "Zan", "Zan", "Zu", "Pa", "Bao", "Ku", "Ke", "Dun", "Jue", "Fu", "Chen", "Jian", "Fang", "Zhi", "Sa", "Yue", "Pa", "Qi", "Yue", "Qiang", "Tuo", "Tai", "Yi", "Nian", "Ling", "Mei", "Ba", "Die", "Ku", "Tuo", "Jia", "Ci", "Pao", "Qia", "Zhu", "Ju", "Die", "Zhi", "Fu", "Pan", "Ju", "Shan", "Bo", "Ni", "Ju", "Li", "Gen", "Yi", "Ji", "Dai", "Xian", "Jiao", "Duo", "Zhu", "Zhuan", "Kua", "Zhuai", "Gui", "Qiong", "Kui", "Xiang", "Chi", "Lu", "Beng", "Zhi", "Jia", "Tiao", "Cai", "Jian", "Ta", "Qiao", "Bi", "Xian", "Duo", "Ji", "Ju", "Ji", "Shu", "Tu"], ["Chu", "Jing", "Nie", "Xiao", "Bo", "Chi", "Qun", "Mou", "Shu", "Lang", "Yong", "Jiao", "Chou", "Qiao", , "Ta", "Jian", "Qi", "Wo", "Wei", "Zhuo", "Jie", "Ji", "Nie", "Ju", "Ju", "Lun", "Lu", "Leng", "Huai", "Ju", "Chi", "Wan", "Quan", "Ti", "Bo", "Zu", "Qie", "Ji", "Cu", "Zong", "Cai", "Zong", "Peng", "Zhi", "Zheng", "Dian", "Zhi", "Yu", "Duo", "Dun", "Chun", "Yong", "Zhong", "Di", "Zhe", "Chen", "Chuai", "Jian", "Gua", "Tang", "Ju", "Fu", "Zu", "Die", "Pian", "Rou", "Nuo", "Ti", "Cha", "Tui", "Jian", "Dao", "Cuo", "Xi", "Ta", "Qiang", "Zhan", "Dian", "Ti", "Ji", "Nie", "Man", "Liu", "Zhan", "Bi", "Chong", "Lu", "Liao", "Cu", "Tang", "Dai", "Suo", "Xi", "Kui", "Ji", "Zhi", "Qiang", "Di", "Man", "Zong", "Lian", "Beng", "Zao", "Nian", "Bie", "Tui", "Ju", "Deng", "Ceng", "Xian", "Fan", "Chu", "Zhong", "Dun", "Bo", "Cu", "Zu", "Jue", "Jue", "Lin", "Ta", "Qiao", "Qiao", "Pu", "Liao", "Dun", "Cuan", "Kuang", "Zao", "Ta", "Bi", "Bi", "Zhu", "Ju", "Chu", "Qiao", "Dun", "Chou", "Ji", "Wu", "Yue", "Nian", "Lin", "Lie", "Zhi", "Li", "Zhi", "Chan", "Chu", "Duan", "Wei", "Long", "Lin", "Xian", "Wei", "Zuan", "Lan", "Xie", "Rang", "Xie", "Nie", "Ta", "Qu", "Jie", "Cuan", "Zuan", "Xi", "Kui", "Jue", "Lin", "Shen", "Gong", "Dan", "Segare", "Qu", "Ti", "Duo", "Duo", "Gong", "Lang", "Nerau", "Luo", "Ai", "Ji", "Ju", "Tang", "Utsuke", , "Yan", "Shitsuke", "Kang", "Qu", "Lou", "Lao", "Tuo", "Zhi", "Yagate", "Ti", "Dao", "Yagate", "Yu", "Che", "Ya", "Gui", "Jun", "Wei", "Yue", "Xin", "Di", "Xuan", "Fan", "Ren", "Shan", "Qiang", "Shu", "Tun", "Chen", "Dai", "E", "Na", "Qi", "Mao", "Ruan", "Ren", "Fan", "Zhuan", "Hong", "Hu", "Qu", "Huang", "Di", "Ling", "Dai", "Ao", "Zhen", "Fan", "Kuang", "Ang", "Peng", "Bei", "Gu", "Ku", "Pao", "Zhu", "Rong", "E", "Ba", "Zhou", "Zhi", "Yao", "Ke", "Yi", "Qing", "Shi", "Ping"], ["Er", "Qiong", "Ju", "Jiao", "Guang", "Lu", "Kai", "Quan", "Zhou", "Zai", "Zhi", "She", "Liang", "Yu", "Shao", "You", "Huan", "Yun", "Zhe", "Wan", "Fu", "Qing", "Zhou", "Ni", "Ling", "Zhe", "Zhan", "Liang", "Zi", "Hui", "Wang", "Chuo", "Guo", "Kan", "Yi", "Peng", "Qian", "Gun", "Nian", "Pian", "Guan", "Bei", "Lun", "Pai", "Liang", "Ruan", "Rou", "Ji", "Yang", "Xian", "Chuan", "Cou", "Qun", "Ge", "You", "Hong", "Shu", "Fu", "Zi", "Fu", "Wen", "Ben", "Zhan", "Yu", "Wen", "Tao", "Gu", "Zhen", "Xia", "Yuan", "Lu", "Jiu", "Chao", "Zhuan", "Wei", "Hun", "Sori", "Che", "Jiao", "Zhan", "Pu", "Lao", "Fen", "Fan", "Lin", "Ge", "Se", "Kan", "Huan", "Yi", "Ji", "Dui", "Er", "Yu", "Xian", "Hong", "Lei", "Pei", "Li", "Li", "Lu", "Lin", "Che", "Ya", "Gui", "Xuan", "Di", "Ren", "Zhuan", "E", "Lun", "Ruan", "Hong", "Ku", "Ke", "Lu", "Zhou", "Zhi", "Yi", "Hu", "Zhen", "Li", "Yao", "Qing", "Shi", "Zai", "Zhi", "Jiao", "Zhou", "Quan", "Lu", "Jiao", "Zhe", "Fu", "Liang", "Nian", "Bei", "Hui", "Gun", "Wang", "Liang", "Chuo", "Zi", "Cou", "Fu", "Ji", "Wen", "Shu", "Pei", "Yuan", "Xia", "Zhan", "Lu", "Che", "Lin", "Xin", "Gu", "Ci", "Ci", "Pi", "Zui", "Bian", "La", "La", "Ci", "Xue", "Ban", "Bian", "Bian", "Bian", , "Bian", "Ban", "Ci", "Bian", "Bian", "Chen", "Ru", "Nong", "Nong", "Zhen", "Chuo", "Chuo", "Suberu", "Reng", "Bian", "Bian", "Sip", "Ip", "Liao", "Da", "Chan", "Gan", "Qian", "Yu", "Yu", "Qi", "Xun", "Yi", "Guo", "Mai", "Qi", "Za", "Wang", "Jia", "Zhun", "Ying", "Ti", "Yun", "Jin", "Hang", "Ya", "Fan", "Wu", "Da", "E", "Huan", "Zhe", "Totemo", "Jin", "Yuan", "Wei", "Lian", "Chi", "Che", "Ni", "Tiao", "Zhi", "Yi", "Jiong", "Jia", "Chen", "Dai", "Er", "Di", "Po", "Wang", "Die", "Ze", "Tao", "Shu", "Tuo", "Kep", "Jing", "Hui", "Tong", "You", "Mi", "Beng", "Ji", "Nai", "Yi", "Jie", "Zhui", "Lie", "Xun"], ["Tui", "Song", "Gua", "Tao", "Pang", "Hou", "Ni", "Dun", "Jiong", "Xuan", "Xun", "Bu", "You", "Xiao", "Qiu", "Tou", "Zhu", "Qiu", "Di", "Di", "Tu", "Jing", "Ti", "Dou", "Yi", "Zhe", "Tong", "Guang", "Wu", "Shi", "Cheng", "Su", "Zao", "Qun", "Feng", "Lian", "Suo", "Hui", "Li", "Sako", "Lai", "Ben", "Cuo", "Jue", "Beng", "Huan", "Dai", "Lu", "You", "Zhou", "Jin", "Yu", "Chuo", "Kui", "Wei", "Ti", "Yi", "Da", "Yuan", "Luo", "Bi", "Nuo", "Yu", "Dang", "Sui", "Dun", "Sui", "Yan", "Chuan", "Chi", "Ti", "Yu", "Shi", "Zhen", "You", "Yun", "E", "Bian", "Guo", "E", "Xia", "Huang", "Qiu", "Dao", "Da", "Wei", "Appare", "Yi", "Gou", "Yao", "Chu", "Liu", "Xun", "Ta", "Di", "Chi", "Yuan", "Su", "Ta", "Qian", , "Yao", "Guan", "Zhang", "Ao", "Shi", "Ce", "Chi", "Su", "Zao", "Zhe", "Dun", "Di", "Lou", "Chi", "Cuo", "Lin", "Zun", "Rao", "Qian", "Xuan", "Yu", "Yi", "Wu", "Liao", "Ju", "Shi", "Bi", "Yao", "Mai", "Xie", "Sui", "Huan", "Zhan", "Teng", "Er", "Miao", "Bian", "Bian", "La", "Li", "Yuan", "Yao", "Luo", "Li", "Yi", "Ting", "Deng", "Qi", "Yong", "Shan", "Han", "Yu", "Mang", "Ru", "Qiong", , "Kuang", "Fu", "Kang", "Bin", "Fang", "Xing", "Na", "Xin", "Shen", "Bang", "Yuan", "Cun", "Huo", "Xie", "Bang", "Wu", "Ju", "You", "Han", "Tai", "Qiu", "Bi", "Pei", "Bing", "Shao", "Bei", "Wa", "Di", "Zou", "Ye", "Lin", "Kuang", "Gui", "Zhu", "Shi", "Ku", "Yu", "Gai", "Ge", "Xi", "Zhi", "Ji", "Xun", "Hou", "Xing", "Jiao", "Xi", "Gui", "Nuo", "Lang", "Jia", "Kuai", "Zheng", "Otoko", "Yun", "Yan", "Cheng", "Dou", "Chi", "Lu", "Fu", "Wu", "Fu", "Gao", "Hao", "Lang", "Jia", "Geng", "Jun", "Ying", "Bo", "Xi", "Bei", "Li", "Yun", "Bu", "Xiao", "Qi", "Pi", "Qing", "Guo", "Zhou", "Tan", "Zou", "Ping", "Lai", "Ni", "Chen", "You", "Bu", "Xiang", "Dan", "Ju", "Yong", "Qiao", "Yi", "Du", "Yan", "Mei"], ["Ruo", "Bei", "E", "Yu", "Juan", "Yu", "Yun", "Hou", "Kui", "Xiang", "Xiang", "Sou", "Tang", "Ming", "Xi", "Ru", "Chu", "Zi", "Zou", "Ju", "Wu", "Xiang", "Yun", "Hao", "Yong", "Bi", "Mo", "Chao", "Fu", "Liao", "Yin", "Zhuan", "Hu", "Qiao", "Yan", "Zhang", "Fan", "Qiao", "Xu", "Deng", "Bi", "Xin", "Bi", "Ceng", "Wei", "Zheng", "Mao", "Shan", "Lin", "Po", "Dan", "Meng", "Ye", "Cao", "Kuai", "Feng", "Meng", "Zou", "Kuang", "Lian", "Zan", "Chan", "You", "Qi", "Yan", "Chan", "Zan", "Ling", "Huan", "Xi", "Feng", "Zan", "Li", "You", "Ding", "Qiu", "Zhuo", "Pei", "Zhou", "Yi", "Hang", "Yu", "Jiu", "Yan", "Zui", "Mao", "Dan", "Xu", "Tou", "Zhen", "Fen", "Sakenomoto", , "Yun", "Tai", "Tian", "Qia", "Tuo", "Zuo", "Han", "Gu", "Su", "Po", "Chou", "Zai", "Ming", "Luo", "Chuo", "Chou", "You", "Tong", "Zhi", "Xian", "Jiang", "Cheng", "Yin", "Tu", "Xiao", "Mei", "Ku", "Suan", "Lei", "Pu", "Zui", "Hai", "Yan", "Xi", "Niang", "Wei", "Lu", "Lan", "Yan", "Tao", "Pei", "Zhan", "Chun", "Tan", "Zui", "Chuo", "Cu", "Kun", "Ti", "Mian", "Du", "Hu", "Xu", "Xing", "Tan", "Jiu", "Chun", "Yun", "Po", "Ke", "Sou", "Mi", "Quan", "Chou", "Cuo", "Yun", "Yong", "Ang", "Zha", "Hai", "Tang", "Jiang", "Piao", "Shan", "Yu", "Li", "Zao", "Lao", "Yi", "Jiang", "Pu", "Jiao", "Xi", "Tan", "Po", "Nong", "Yi", "Li", "Ju", "Jiao", "Yi", "Niang", "Ru", "Xun", "Chou", "Yan", "Ling", "Mi", "Mi", "Niang", "Xin", "Jiao", "Xi", "Mi", "Yan", "Bian", "Cai", "Shi", "You", "Shi", "Shi", "Li", "Chong", "Ye", "Liang", "Li", "Jin", "Jin", "Qiu", "Yi", "Diao", "Dao", "Zhao", "Ding", "Po", "Qiu", "He", "Fu", "Zhen", "Zhi", "Ba", "Luan", "Fu", "Nai", "Diao", "Shan", "Qiao", "Kou", "Chuan", "Zi", "Fan", "Yu", "Hua", "Han", "Gong", "Qi", "Mang", "Ri", "Di", "Si", "Xi", "Yi", "Chai", "Shi", "Tu", "Xi", "Nu", "Qian", "Ishiyumi", "Jian", "Pi", "Ye", "Yin"], ["Ba", "Fang", "Chen", "Xing", "Tou", "Yue", "Yan", "Fu", "Pi", "Na", "Xin", "E", "Jue", "Dun", "Gou", "Yin", "Qian", "Ban", "Ji", "Ren", "Chao", "Niu", "Fen", "Yun", "Ji", "Qin", "Pi", "Guo", "Hong", "Yin", "Jun", "Shi", "Yi", "Zhong", "Nie", "Gai", "Ri", "Huo", "Tai", "Kang", "Habaki", "Irori", "Ngaak", , "Duo", "Zi", "Ni", "Tu", "Shi", "Min", "Gu", "E", "Ling", "Bing", "Yi", "Gu", "Ba", "Pi", "Yu", "Si", "Zuo", "Bu", "You", "Dian", "Jia", "Zhen", "Shi", "Shi", "Tie", "Ju", "Zhan", "Shi", "She", "Xuan", "Zhao", "Bao", "He", "Bi", "Sheng", "Chu", "Shi", "Bo", "Zhu", "Chi", "Za", "Po", "Tong", "Qian", "Fu", "Zhai", "Liu", "Qian", "Fu", "Li", "Yue", "Pi", "Yang", "Ban", "Bo", "Jie", "Gou", "Shu", "Zheng", "Mu", "Ni", "Nie", "Di", "Jia", "Mu", "Dan", "Shen", "Yi", "Si", "Kuang", "Ka", "Bei", "Jian", "Tong", "Xing", "Hong", "Jiao", "Chi", "Er", "Ge", "Bing", "Shi", "Mou", "Jia", "Yin", "Jun", "Zhou", "Chong", "Shang", "Tong", "Mo", "Lei", "Ji", "Yu", "Xu", "Ren", "Zun", "Zhi", "Qiong", "Shan", "Chi", "Xian", "Xing", "Quan", "Pi", "Tie", "Zhu", "Hou", "Ming", "Kua", "Yao", "Xian", "Xian", "Xiu", "Jun", "Cha", "Lao", "Ji", "Pi", "Ru", "Mi", "Yi", "Yin", "Guang", "An", "Diou", "You", "Se", "Kao", "Qian", "Luan", "Kasugai", "Ai", "Diao", "Han", "Rui", "Shi", "Keng", "Qiu", "Xiao", "Zhe", "Xiu", "Zang", "Ti", "Cuo", "Gua", "Gong", "Zhong", "Dou", "Lu", "Mei", "Lang", "Wan", "Xin", "Yun", "Bei", "Wu", "Su", "Yu", "Chan", "Ting", "Bo", "Han", "Jia", "Hong", "Cuan", "Feng", "Chan", "Wan", "Zhi", "Si", "Xuan", "Wu", "Wu", "Tiao", "Gong", "Zhuo", "Lue", "Xing", "Qian", "Shen", "Han", "Lue", "Xie", "Chu", "Zheng", "Ju", "Xian", "Tie", "Mang", "Pu", "Li", "Pan", "Rui", "Cheng", "Gao", "Li", "Te", "Pyeng", "Zhu", , "Tu", "Liu", "Zui", "Ju", "Chang", "Yuan", "Jian", "Gang", "Diao", "Tao", "Chang"], ["Lun", "Kua", "Ling", "Bei", "Lu", "Li", "Qiang", "Pou", "Juan", "Min", "Zui", "Peng", "An", "Pi", "Xian", "Ya", "Zhui", "Lei", "A", "Kong", "Ta", "Kun", "Du", "Wei", "Chui", "Zi", "Zheng", "Ben", "Nie", "Cong", "Qun", "Tan", "Ding", "Qi", "Qian", "Zhuo", "Qi", "Yu", "Jin", "Guan", "Mao", "Chang", "Tian", "Xi", "Lian", "Tao", "Gu", "Cuo", "Shu", "Zhen", "Lu", "Meng", "Lu", "Hua", "Biao", "Ga", "Lai", "Ken", "Kazari", "Bu", "Nai", "Wan", "Zan", , "De", "Xian", , "Huo", "Liang", , "Men", "Kai", "Ying", "Di", "Lian", "Guo", "Xian", "Du", "Tu", "Wei", "Cong", "Fu", "Rou", "Ji", "E", "Rou", "Chen", "Ti", "Zha", "Hong", "Yang", "Duan", "Xia", "Yu", "Keng", "Xing", "Huang", "Wei", "Fu", "Zhao", "Cha", "Qie", "She", "Hong", "Kui", "Tian", "Mou", "Qiao", "Qiao", "Hou", "Tou", "Cong", "Huan", "Ye", "Min", "Jian", "Duan", "Jian", "Song", "Kui", "Hu", "Xuan", "Duo", "Jie", "Zhen", "Bian", "Zhong", "Zi", "Xiu", "Ye", "Mei", "Pai", "Ai", "Jie", , "Mei", "Chuo", "Ta", "Bang", "Xia", "Lian", "Suo", "Xi", "Liu", "Zu", "Ye", "Nou", "Weng", "Rong", "Tang", "Suo", "Qiang", "Ge", "Shuo", "Chui", "Bo", "Pan", "Sa", "Bi", "Sang", "Gang", "Zi", "Wu", "Ying", "Huang", "Tiao", "Liu", "Kai", "Sun", "Sha", "Sou", "Wan", "Hao", "Zhen", "Zhen", "Luo", "Yi", "Yuan", "Tang", "Nie", "Xi", "Jia", "Ge", "Ma", "Juan", "Kasugai", "Habaki", "Suo", , , , "Na", "Lu", "Suo", "Ou", "Zu", "Tuan", "Xiu", "Guan", "Xuan", "Lian", "Shou", "Ao", "Man", "Mo", "Luo", "Bi", "Wei", "Liu", "Di", "Qiao", "Cong", "Yi", "Lu", "Ao", "Keng", "Qiang", "Cui", "Qi", "Chang", "Tang", "Man", "Yong", "Chan", "Feng", "Jing", "Biao", "Shu", "Lou", "Xiu", "Cong", "Long", "Zan", "Jian", "Cao", "Li", "Xia", "Xi", "Kang", , "Beng", , , "Zheng", "Lu", "Hua", "Ji", "Pu", "Hui", "Qiang", "Po", "Lin", "Suo", "Xiu", "San", "Cheng"], ["Kui", "Si", "Liu", "Nao", "Heng", "Pie", "Sui", "Fan", "Qiao", "Quan", "Yang", "Tang", "Xiang", "Jue", "Jiao", "Zun", "Liao", "Jie", "Lao", "Dui", "Tan", "Zan", "Ji", "Jian", "Zhong", "Deng", "Ya", "Ying", "Dui", "Jue", "Nou", "Ti", "Pu", "Tie", , , "Ding", "Shan", "Kai", "Jian", "Fei", "Sui", "Lu", "Juan", "Hui", "Yu", "Lian", "Zhuo", "Qiao", "Qian", "Zhuo", "Lei", "Bi", "Tie", "Huan", "Ye", "Duo", "Guo", "Dang", "Ju", "Fen", "Da", "Bei", "Yi", "Ai", "Zong", "Xun", "Diao", "Zhu", "Heng", "Zhui", "Ji", "Nie", "Ta", "Huo", "Qing", "Bin", "Ying", "Kui", "Ning", "Xu", "Jian", "Jian", "Yari", "Cha", "Zhi", "Mie", "Li", "Lei", "Ji", "Zuan", "Kuang", "Shang", "Peng", "La", "Du", "Shuo", "Chuo", "Lu", "Biao", "Bao", "Lu", , , "Long", "E", "Lu", "Xin", "Jian", "Lan", "Bo", "Jian", "Yao", "Chan", "Xiang", "Jian", "Xi", "Guan", "Cang", "Nie", "Lei", "Cuan", "Qu", "Pan", "Luo", "Zuan", "Luan", "Zao", "Nie", "Jue", "Tang", "Shu", "Lan", "Jin", "Qiu", "Yi", "Zhen", "Ding", "Zhao", "Po", "Diao", "Tu", "Qian", "Chuan", "Shan", "Ji", "Fan", "Diao", "Men", "Nu", "Xi", "Chai", "Xing", "Gai", "Bu", "Tai", "Ju", "Dun", "Chao", "Zhong", "Na", "Bei", "Gang", "Ban", "Qian", "Yao", "Qin", "Jun", "Wu", "Gou", "Kang", "Fang", "Huo", "Tou", "Niu", "Ba", "Yu", "Qian", "Zheng", "Qian", "Gu", "Bo", "E", "Po", "Bu", "Ba", "Yue", "Zuan", "Mu", "Dan", "Jia", "Dian", "You", "Tie", "Bo", "Ling", "Shuo", "Qian", "Liu", "Bao", "Shi", "Xuan", "She", "Bi", "Ni", "Pi", "Duo", "Xing", "Kao", "Lao", "Er", "Mang", "Ya", "You", "Cheng", "Jia", "Ye", "Nao", "Zhi", "Dang", "Tong", "Lu", "Diao", "Yin", "Kai", "Zha", "Zhu", "Xian", "Ting", "Diu", "Xian", "Hua", "Quan", "Sha", "Jia", "Yao", "Ge", "Ming", "Zheng", "Se", "Jiao", "Yi", "Chan", "Chong", "Tang", "An", "Yin", "Ru", "Zhu", "Lao", "Pu", "Wu", "Lai", "Te", "Lian", "Keng"], ["Xiao", "Suo", "Li", "Zheng", "Chu", "Guo", "Gao", "Tie", "Xiu", "Cuo", "Lue", "Feng", "Xin", "Liu", "Kai", "Jian", "Rui", "Ti", "Lang", "Qian", "Ju", "A", "Qiang", "Duo", "Tian", "Cuo", "Mao", "Ben", "Qi", "De", "Kua", "Kun", "Chang", "Xi", "Gu", "Luo", "Chui", "Zhui", "Jin", "Zhi", "Xian", "Juan", "Huo", "Pou", "Tan", "Ding", "Jian", "Ju", "Meng", "Zi", "Qie", "Ying", "Kai", "Qiang", "Song", "E", "Cha", "Qiao", "Zhong", "Duan", "Sou", "Huang", "Huan", "Ai", "Du", "Mei", "Lou", "Zi", "Fei", "Mei", "Mo", "Zhen", "Bo", "Ge", "Nie", "Tang", "Juan", "Nie", "Na", "Liu", "Hao", "Bang", "Yi", "Jia", "Bin", "Rong", "Biao", "Tang", "Man", "Luo", "Beng", "Yong", "Jing", "Di", "Zu", "Xuan", "Liu", "Tan", "Jue", "Liao", "Pu", "Lu", "Dui", "Lan", "Pu", "Cuan", "Qiang", "Deng", "Huo", "Lei", "Huan", "Zhuo", "Lian", "Yi", "Cha", "Biao", "La", "Chan", "Xiang", "Chang", "Chang", "Jiu", "Ao", "Die", "Qu", "Liao", "Mi", "Chang", "Men", "Ma", "Shuan", "Shan", "Huo", "Men", "Yan", "Bi", "Han", "Bi", "San", "Kai", "Kang", "Beng", "Hong", "Run", "San", "Xian", "Xian", "Jian", "Min", "Xia", "Yuru", "Dou", "Zha", "Nao", "Jian", "Peng", "Xia", "Ling", "Bian", "Bi", "Run", "He", "Guan", "Ge", "Ge", "Fa", "Chu", "Hong", "Gui", "Min", "Se", "Kun", "Lang", "Lu", "Ting", "Sha", "Ju", "Yue", "Yue", "Chan", "Qu", "Lin", "Chang", "Shai", "Kun", "Yan", "Min", "Yan", "E", "Hun", "Yu", "Wen", "Xiang", "Bao", "Xiang", "Qu", "Yao", "Wen", "Ban", "An", "Wei", "Yin", "Kuo", "Que", "Lan", "Du", , "Phwung", "Tian", "Nie", "Ta", "Kai", "He", "Que", "Chuang", "Guan", "Dou", "Qi", "Kui", "Tang", "Guan", "Piao", "Kan", "Xi", "Hui", "Chan", "Pi", "Dang", "Huan", "Ta", "Wen", , "Men", "Shuan", "Shan", "Yan", "Han", "Bi", "Wen", "Chuang", "Run", "Wei", "Xian", "Hong", "Jian", "Min", "Kang", "Men", "Zha", "Nao", "Gui", "Wen", "Ta", "Min", "Lu", "Kai"], ["Fa", "Ge", "He", "Kun", "Jiu", "Yue", "Lang", "Du", "Yu", "Yan", "Chang", "Xi", "Wen", "Hun", "Yan", "E", "Chan", "Lan", "Qu", "Hui", "Kuo", "Que", "Ge", "Tian", "Ta", "Que", "Kan", "Huan", "Fu", "Fu", "Le", "Dui", "Xin", "Qian", "Wu", "Yi", "Tuo", "Yin", "Yang", "Dou", "E", "Sheng", "Ban", "Pei", "Keng", "Yun", "Ruan", "Zhi", "Pi", "Jing", "Fang", "Yang", "Yin", "Zhen", "Jie", "Cheng", "E", "Qu", "Di", "Zu", "Zuo", "Dian", "Ling", "A", "Tuo", "Tuo", "Po", "Bing", "Fu", "Ji", "Lu", "Long", "Chen", "Xing", "Duo", "Lou", "Mo", "Jiang", "Shu", "Duo", "Xian", "Er", "Gui", "Yu", "Gai", "Shan", "Xun", "Qiao", "Xing", "Chun", "Fu", "Bi", "Xia", "Shan", "Sheng", "Zhi", "Pu", "Dou", "Yuan", "Zhen", "Chu", "Xian", "Tou", "Nie", "Yun", "Xian", "Pei", "Pei", "Zou", "Yi", "Dui", "Lun", "Yin", "Ju", "Chui", "Chen", "Pi", "Ling", "Tao", "Xian", "Lu", "Sheng", "Xian", "Yin", "Zhu", "Yang", "Reng", "Shan", "Chong", "Yan", "Yin", "Yu", "Ti", "Yu", "Long", "Wei", "Wei", "Nie", "Dui", "Sui", "An", "Huang", "Jie", "Sui", "Yin", "Gai", "Yan", "Hui", "Ge", "Yun", "Wu", "Wei", "Ai", "Xi", "Tang", "Ji", "Zhang", "Dao", "Ao", "Xi", "Yin", , "Rao", "Lin", "Tui", "Deng", "Pi", "Sui", "Sui", "Yu", "Xian", "Fen", "Ni", "Er", "Ji", "Dao", "Xi", "Yin", "E", "Hui", "Long", "Xi", "Li", "Li", "Li", "Zhui", "He", "Zhi", "Zhun", "Jun", "Nan", "Yi", "Que", "Yan", "Qian", "Ya", "Xiong", "Ya", "Ji", "Gu", "Huan", "Zhi", "Gou", "Jun", "Ci", "Yong", "Ju", "Chu", "Hu", "Za", "Luo", "Yu", "Chou", "Diao", "Sui", "Han", "Huo", "Shuang", "Guan", "Chu", "Za", "Yong", "Ji", "Xi", "Chou", "Liu", "Li", "Nan", "Xue", "Za", "Ji", "Ji", "Yu", "Yu", "Xue", "Na", "Fou", "Se", "Mu", "Wen", "Fen", "Pang", "Yun", "Li", "Li", "Ang", "Ling", "Lei", "An", "Bao", "Meng", "Dian", "Dang", "Xing", "Wu", "Zhao"], ["Xu", "Ji", "Mu", "Chen", "Xiao", "Zha", "Ting", "Zhen", "Pei", "Mei", "Ling", "Qi", "Chou", "Huo", "Sha", "Fei", "Weng", "Zhan", "Yin", "Ni", "Chou", "Tun", "Lin", , "Dong", "Ying", "Wu", "Ling", "Shuang", "Ling", "Xia", "Hong", "Yin", "Mo", "Mai", "Yun", "Liu", "Meng", "Bin", "Wu", "Wei", "Huo", "Yin", "Xi", "Yi", "Ai", "Dan", "Deng", "Xian", "Yu", "Lu", "Long", "Dai", "Ji", "Pang", "Yang", "Ba", "Pi", "Wei", , "Xi", "Ji", "Mai", "Meng", "Meng", "Lei", "Li", "Huo", "Ai", "Fei", "Dai", "Long", "Ling", "Ai", "Feng", "Li", "Bao", , "He", "He", "Bing", "Qing", "Qing", "Jing", "Tian", "Zhen", "Jing", "Cheng", "Qing", "Jing", "Jing", "Dian", "Jing", "Tian", "Fei", "Fei", "Kao", "Mi", "Mian", "Mian", "Pao", "Ye", "Tian", "Hui", "Ye", "Ge", "Ding", "Cha", "Jian", "Ren", "Di", "Du", "Wu", "Ren", "Qin", "Jin", "Xue", "Niu", "Ba", "Yin", "Sa", "Na", "Mo", "Zu", "Da", "Ban", "Yi", "Yao", "Tao", "Tuo", "Jia", "Hong", "Pao", "Yang", "Tomo", "Yin", "Jia", "Tao", "Ji", "Xie", "An", "An", "Hen", "Gong", "Kohaze", "Da", "Qiao", "Ting", "Wan", "Ying", "Sui", "Tiao", "Qiao", "Xuan", "Kong", "Beng", "Ta", "Zhang", "Bing", "Kuo", "Ju", "La", "Xie", "Rou", "Bang", "Yi", "Qiu", "Qiu", "He", "Xiao", "Mu", "Ju", "Jian", "Bian", "Di", "Jian", "On", "Tao", "Gou", "Ta", "Bei", "Xie", "Pan", "Ge", "Bi", "Kuo", "Tang", "Lou", "Gui", "Qiao", "Xue", "Ji", "Jian", "Jiang", "Chan", "Da", "Huo", "Xian", "Qian", "Du", "Wa", "Jian", "Lan", "Wei", "Ren", "Fu", "Mei", "Juan", "Ge", "Wei", "Qiao", "Han", "Chang", , "Rou", "Xun", "She", "Wei", "Ge", "Bei", "Tao", "Gou", "Yun", , "Bi", "Wei", "Hui", "Du", "Wa", "Du", "Wei", "Ren", "Fu", "Han", "Wei", "Yun", "Tao", "Jiu", "Jiu", "Xian", "Xie", "Xian", "Ji", "Yin", "Za", "Yun", "Shao", "Le", "Peng", "Heng", "Ying", "Yun", "Peng", "Yin", "Yin", "Xiang"], ["Hu", "Ye", "Ding", "Qing", "Pan", "Xiang", "Shun", "Han", "Xu", "Yi", "Xu", "Gu", "Song", "Kui", "Qi", "Hang", "Yu", "Wan", "Ban", "Dun", "Di", "Dan", "Pan", "Po", "Ling", "Ce", "Jing", "Lei", "He", "Qiao", "E", "E", "Wei", "Jie", "Gua", "Shen", "Yi", "Shen", "Hai", "Dui", "Pian", "Ping", "Lei", "Fu", "Jia", "Tou", "Hui", "Kui", "Jia", "Le", "Tian", "Cheng", "Ying", "Jun", "Hu", "Han", "Jing", "Tui", "Tui", "Pin", "Lai", "Tui", "Zi", "Zi", "Chui", "Ding", "Lai", "Yan", "Han", "Jian", "Ke", "Cui", "Jiong", "Qin", "Yi", "Sai", "Ti", "E", "E", "Yan", "Hun", "Kan", "Yong", "Zhuan", "Yan", "Xian", "Xin", "Yi", "Yuan", "Sang", "Dian", "Dian", "Jiang", "Ku", "Lei", "Liao", "Piao", "Yi", "Man", "Qi", "Rao", "Hao", "Qiao", "Gu", "Xun", "Qian", "Hui", "Zhan", "Ru", "Hong", "Bin", "Xian", "Pin", "Lu", "Lan", "Nie", "Quan", "Ye", "Ding", "Qing", "Han", "Xiang", "Shun", "Xu", "Xu", "Wan", "Gu", "Dun", "Qi", "Ban", "Song", "Hang", "Yu", "Lu", "Ling", "Po", "Jing", "Jie", "Jia", "Tian", "Han", "Ying", "Jiong", "Hai", "Yi", "Pin", "Hui", "Tui", "Han", "Ying", "Ying", "Ke", "Ti", "Yong", "E", "Zhuan", "Yan", "E", "Nie", "Man", "Dian", "Sang", "Hao", "Lei", "Zhan", "Ru", "Pin", "Quan", "Feng", "Biao", "Oroshi", "Fu", "Xia", "Zhan", "Biao", "Sa", "Ba", "Tai", "Lie", "Gua", "Xuan", "Shao", "Ju", "Bi", "Si", "Wei", "Yang", "Yao", "Sou", "Kai", "Sao", "Fan", "Liu", "Xi", "Liao", "Piao", "Piao", "Liu", "Biao", "Biao", "Biao", "Liao", , "Se", "Feng", "Biao", "Feng", "Yang", "Zhan", "Biao", "Sa", "Ju", "Si", "Sou", "Yao", "Liu", "Piao", "Biao", "Biao", "Fei", "Fan", "Fei", "Fei", "Shi", "Shi", "Can", "Ji", "Ding", "Si", "Tuo", "Zhan", "Sun", "Xiang", "Tun", "Ren", "Yu", "Juan", "Chi", "Yin", "Fan", "Fan", "Sun", "Yin", "Zhu", "Yi", "Zhai", "Bi", "Jie", "Tao", "Liu", "Ci", "Tie", "Si", "Bao", "Shi", "Duo"], ["Hai", "Ren", "Tian", "Jiao", "Jia", "Bing", "Yao", "Tong", "Ci", "Xiang", "Yang", "Yang", "Er", "Yan", "Le", "Yi", "Can", "Bo", "Nei", "E", "Bu", "Jun", "Dou", "Su", "Yu", "Shi", "Yao", "Hun", "Guo", "Shi", "Jian", "Zhui", "Bing", "Xian", "Bu", "Ye", "Tan", "Fei", "Zhang", "Wei", "Guan", "E", "Nuan", "Hun", "Hu", "Huang", "Tie", "Hui", "Jian", "Hou", "He", "Xing", "Fen", "Wei", "Gu", "Cha", "Song", "Tang", "Bo", "Gao", "Xi", "Kui", "Liu", "Sou", "Tao", "Ye", "Yun", "Mo", "Tang", "Man", "Bi", "Yu", "Xiu", "Jin", "San", "Kui", "Zhuan", "Shan", "Chi", "Dan", "Yi", "Ji", "Rao", "Cheng", "Yong", "Tao", "Hui", "Xiang", "Zhan", "Fen", "Hai", "Meng", "Yan", "Mo", "Chan", "Xiang", "Luo", "Zuan", "Nang", "Shi", "Ding", "Ji", "Tuo", "Xing", "Tun", "Xi", "Ren", "Yu", "Chi", "Fan", "Yin", "Jian", "Shi", "Bao", "Si", "Duo", "Yi", "Er", "Rao", "Xiang", "Jia", "Le", "Jiao", "Yi", "Bing", "Bo", "Dou", "E", "Yu", "Nei", "Jun", "Guo", "Hun", "Xian", "Guan", "Cha", "Kui", "Gu", "Sou", "Chan", "Ye", "Mo", "Bo", "Liu", "Xiu", "Jin", "Man", "San", "Zhuan", "Nang", "Shou", "Kui", "Guo", "Xiang", "Fen", "Ba", "Ni", "Bi", "Bo", "Tu", "Han", "Fei", "Jian", "An", "Ai", "Fu", "Xian", "Wen", "Xin", "Fen", "Bin", "Xing", "Ma", "Yu", "Feng", "Han", "Di", "Tuo", "Tuo", "Chi", "Xun", "Zhu", "Zhi", "Pei", "Xin", "Ri", "Sa", "Yin", "Wen", "Zhi", "Dan", "Lu", "You", "Bo", "Bao", "Kuai", "Tuo", "Yi", "Qu", , "Qu", "Jiong", "Bo", "Zhao", "Yuan", "Peng", "Zhou", "Ju", "Zhu", "Nu", "Ju", "Pi", "Zang", "Jia", "Ling", "Zhen", "Tai", "Fu", "Yang", "Shi", "Bi", "Tuo", "Tuo", "Si", "Liu", "Ma", "Pian", "Tao", "Zhi", "Rong", "Teng", "Dong", "Xun", "Quan", "Shen", "Jiong", "Er", "Hai", "Bo", "Zhu", "Yin", "Luo", "Shuu", "Dan", "Xie", "Liu", "Ju", "Song", "Qin", "Mang", "Liang", "Han", "Tu", "Xuan", "Tui", "Jun"], ["E", "Cheng", "Xin", "Ai", "Lu", "Zhui", "Zhou", "She", "Pian", "Kun", "Tao", "Lai", "Zong", "Ke", "Qi", "Qi", "Yan", "Fei", "Sao", "Yan", "Jie", "Yao", "Wu", "Pian", "Cong", "Pian", "Qian", "Fei", "Huang", "Jian", "Huo", "Yu", "Ti", "Quan", "Xia", "Zong", "Kui", "Rou", "Si", "Gua", "Tuo", "Kui", "Sou", "Qian", "Cheng", "Zhi", "Liu", "Pang", "Teng", "Xi", "Cao", "Du", "Yan", "Yuan", "Zou", "Sao", "Shan", "Li", "Zhi", "Shuang", "Lu", "Xi", "Luo", "Zhang", "Mo", "Ao", "Can", "Piao", "Cong", "Qu", "Bi", "Zhi", "Yu", "Xu", "Hua", "Bo", "Su", "Xiao", "Lin", "Chan", "Dun", "Liu", "Tuo", "Zeng", "Tan", "Jiao", "Tie", "Yan", "Luo", "Zhan", "Jing", "Yi", "Ye", "Tuo", "Bin", "Zou", "Yan", "Peng", "Lu", "Teng", "Xiang", "Ji", "Shuang", "Ju", "Xi", "Huan", "Li", "Biao", "Ma", "Yu", "Tuo", "Xun", "Chi", "Qu", "Ri", "Bo", "Lu", "Zang", "Shi", "Si", "Fu", "Ju", "Zou", "Zhu", "Tuo", "Nu", "Jia", "Yi", "Tai", "Xiao", "Ma", "Yin", "Jiao", "Hua", "Luo", "Hai", "Pian", "Biao", "Li", "Cheng", "Yan", "Xin", "Qin", "Jun", "Qi", "Qi", "Ke", "Zhui", "Zong", "Su", "Can", "Pian", "Zhi", "Kui", "Sao", "Wu", "Ao", "Liu", "Qian", "Shan", "Piao", "Luo", "Cong", "Chan", "Zou", "Ji", "Shuang", "Xiang", "Gu", "Wei", "Wei", "Wei", "Yu", "Gan", "Yi", "Ang", "Tou", "Xie", "Bao", "Bi", "Chi", "Ti", "Di", "Ku", "Hai", "Qiao", "Gou", "Kua", "Ge", "Tui", "Geng", "Pian", "Bi", "Ke", "Ka", "Yu", "Sui", "Lou", "Bo", "Xiao", "Pang", "Bo", "Ci", "Kuan", "Bin", "Mo", "Liao", "Lou", "Nao", "Du", "Zang", "Sui", "Ti", "Bin", "Kuan", "Lu", "Gao", "Gao", "Qiao", "Kao", "Qiao", "Lao", "Zao", "Biao", "Kun", "Kun", "Ti", "Fang", "Xiu", "Ran", "Mao", "Dan", "Kun", "Bin", "Fa", "Tiao", "Peng", "Zi", "Fa", "Ran", "Ti", "Pao", "Pi", "Mao", "Fu", "Er", "Rong", "Qu", "Gong", "Xiu", "Gua", "Ji", "Peng", "Zhua", "Shao", "Sha"], ["Ti", "Li", "Bin", "Zong", "Ti", "Peng", "Song", "Zheng", "Quan", "Zong", "Shun", "Jian", "Duo", "Hu", "La", "Jiu", "Qi", "Lian", "Zhen", "Bin", "Peng", "Mo", "San", "Man", "Man", "Seng", "Xu", "Lie", "Qian", "Qian", "Nong", "Huan", "Kuai", "Ning", "Bin", "Lie", "Rang", "Dou", "Dou", "Nao", "Hong", "Xi", "Dou", "Han", "Dou", "Dou", "Jiu", "Chang", "Yu", "Yu", "Li", "Juan", "Fu", "Qian", "Gui", "Zong", "Liu", "Gui", "Shang", "Yu", "Gui", "Mei", "Ji", "Qi", "Jie", "Kui", "Hun", "Ba", "Po", "Mei", "Xu", "Yan", "Xiao", "Liang", "Yu", "Tui", "Qi", "Wang", "Liang", "Wei", "Jian", "Chi", "Piao", "Bi", "Mo", "Ji", "Xu", "Chou", "Yan", "Zhan", "Yu", "Dao", "Ren", "Ji", "Eri", "Gong", "Tuo", "Diao", "Ji", "Xu", "E", "E", "Sha", "Hang", "Tun", "Mo", "Jie", "Shen", "Fan", "Yuan", "Bi", "Lu", "Wen", "Hu", "Lu", "Za", "Fang", "Fen", "Na", "You", "Namazu", "Todo", "He", "Xia", "Qu", "Han", "Pi", "Ling", "Tuo", "Bo", "Qiu", "Ping", "Fu", "Bi", "Ji", "Wei", "Ju", "Diao", "Bo", "You", "Gun", "Pi", "Nian", "Xing", "Tai", "Bao", "Fu", "Zha", "Ju", "Gu", "Kajika", "Tong", , "Ta", "Jie", "Shu", "Hou", "Xiang", "Er", "An", "Wei", "Tiao", "Zhu", "Yin", "Lie", "Luo", "Tong", "Yi", "Qi", "Bing", "Wei", "Jiao", "Bu", "Gui", "Xian", "Ge", "Hui", "Bora", "Mate", "Kao", "Gori", "Duo", "Jun", "Ti", "Man", "Xiao", "Za", "Sha", "Qin", "Yu", "Nei", "Zhe", "Gun", "Geng", "Su", "Wu", "Qiu", "Ting", "Fu", "Wan", "You", "Li", "Sha", "Sha", "Gao", "Meng", "Ugui", "Asari", "Subashiri", "Kazunoko", "Yong", "Ni", "Zi", "Qi", "Qing", "Xiang", "Nei", "Chun", "Ji", "Diao", "Qie", "Gu", "Zhou", "Dong", "Lai", "Fei", "Ni", "Yi", "Kun", "Lu", "Jiu", "Chang", "Jing", "Lun", "Ling", "Zou", "Li", "Meng", "Zong", "Zhi", "Nian", "Shachi", "Dojou", "Sukesou", "Shi", "Shen", "Hun", "Shi", "Hou", "Xing", "Zhu", "La", "Zong", "Ji", "Bian", "Bian"], ["Huan", "Quan", "Ze", "Wei", "Wei", "Yu", "Qun", "Rou", "Die", "Huang", "Lian", "Yan", "Qiu", "Qiu", "Jian", "Bi", "E", "Yang", "Fu", "Sai", "Jian", "Xia", "Tuo", "Hu", "Muroaji", "Ruo", "Haraka", "Wen", "Jian", "Hao", "Wu", "Fang", "Sao", "Liu", "Ma", "Shi", "Shi", "Yin", "Z", "Teng", "Ta", "Yao", "Ge", "Rong", "Qian", "Qi", "Wen", "Ruo", "Hatahata", "Lian", "Ao", "Le", "Hui", "Min", "Ji", "Tiao", "Qu", "Jian", "Sao", "Man", "Xi", "Qiu", "Biao", "Ji", "Ji", "Zhu", "Jiang", "Qiu", "Zhuan", "Yong", "Zhang", "Kang", "Xue", "Bie", "Jue", "Qu", "Xiang", "Bo", "Jiao", "Xun", "Su", "Huang", "Zun", "Shan", "Shan", "Fan", "Jue", "Lin", "Xun", "Miao", "Xi", "Eso", "Kyou", "Fen", "Guan", "Hou", "Kuai", "Zei", "Sao", "Zhan", "Gan", "Gui", "Sheng", "Li", "Chang", "Hatahata", "Shiira", "Mutsu", "Ru", "Ji", "Xu", "Huo", "Shiira", "Li", "Lie", "Li", "Mie", "Zhen", "Xiang", "E", "Lu", "Guan", "Li", "Xian", "Yu", "Dao", "Ji", "You", "Tun", "Lu", "Fang", "Ba", "He", "Bo", "Ping", "Nian", "Lu", "You", "Zha", "Fu", "Bo", "Bao", "Hou", "Pi", "Tai", "Gui", "Jie", "Kao", "Wei", "Er", "Tong", "Ze", "Hou", "Kuai", "Ji", "Jiao", "Xian", "Za", "Xiang", "Xun", "Geng", "Li", "Lian", "Jian", "Li", "Shi", "Tiao", "Gun", "Sha", "Wan", "Jun", "Ji", "Yong", "Qing", "Ling", "Qi", "Zou", "Fei", "Kun", "Chang", "Gu", "Ni", "Nian", "Diao", "Jing", "Shen", "Shi", "Zi", "Fen", "Die", "Bi", "Chang", "Shi", "Wen", "Wei", "Sai", "E", "Qiu", "Fu", "Huang", "Quan", "Jiang", "Bian", "Sao", "Ao", "Qi", "Ta", "Yin", "Yao", "Fang", "Jian", "Le", "Biao", "Xue", "Bie", "Man", "Min", "Yong", "Wei", "Xi", "Jue", "Shan", "Lin", "Zun", "Huo", "Gan", "Li", "Zhan", "Guan", "Niao", "Yi", "Fu", "Li", "Jiu", "Bu", "Yan", "Fu", "Diao", "Ji", "Feng", "Nio", "Gan", "Shi", "Feng", "Ming", "Bao", "Yuan", "Zhi", "Hu", "Qin", "Fu", "Fen", "Wen", "Jian", "Shi", "Yu"], ["Fou", "Yiao", "Jue", "Jue", "Pi", "Huan", "Zhen", "Bao", "Yan", "Ya", "Zheng", "Fang", "Feng", "Wen", "Ou", "Te", "Jia", "Nu", "Ling", "Mie", "Fu", "Tuo", "Wen", "Li", "Bian", "Zhi", "Ge", "Yuan", "Zi", "Qu", "Xiao", "Zhi", "Dan", "Ju", "You", "Gu", "Zhong", "Yu", "Yang", "Rong", "Ya", "Tie", "Yu", "Shigi", "Ying", "Zhui", "Wu", "Er", "Gua", "Ai", "Zhi", "Yan", "Heng", "Jiao", "Ji", "Lie", "Zhu", "Ren", "Yi", "Hong", "Luo", "Ru", "Mou", "Ge", "Ren", "Jiao", "Xiu", "Zhou", "Zhi", "Luo", "Chidori", "Toki", "Ten", "Luan", "Jia", "Ji", "Yu", "Huan", "Tuo", "Bu", "Wu", "Juan", "Yu", "Bo", "Xun", "Xun", "Bi", "Xi", "Jun", "Ju", "Tu", "Jing", "Ti", "E", "E", "Kuang", "Hu", "Wu", "Shen", "Lai", "Ikaruga", "Kakesu", "Lu", "Ping", "Shu", "Fu", "An", "Zhao", "Peng", "Qin", "Qian", "Bei", "Diao", "Lu", "Que", "Jian", "Ju", "Tu", "Ya", "Yuan", "Qi", "Li", "Ye", "Zhui", "Kong", "Zhui", "Kun", "Sheng", "Qi", "Jing", "Yi", "Yi", "Jing", "Zi", "Lai", "Dong", "Qi", "Chun", "Geng", "Ju", "Qu", "Isuka", "Kikuitadaki", "Ji", "Shu", , "Chi", "Miao", "Rou", "An", "Qiu", "Ti", "Hu", "Ti", "E", "Jie", "Mao", "Fu", "Chun", "Tu", "Yan", "He", "Yuan", "Pian", "Yun", "Mei", "Hu", "Ying", "Dun", "Mu", "Ju", "Tsugumi", "Cang", "Fang", "Gu", "Ying", "Yuan", "Xuan", "Weng", "Shi", "He", "Chu", "Tang", "Xia", "Ruo", "Liu", "Ji", "Gu", "Jian", "Zhun", "Han", "Zi", "Zi", "Ni", "Yao", "Yan", "Ji", "Li", "Tian", "Kou", "Ti", "Ti", "Ni", "Tu", "Ma", "Jiao", "Gao", "Tian", "Chen", "Li", "Zhuan", "Zhe", "Ao", "Yao", "Yi", "Ou", "Chi", "Zhi", "Liao", "Rong", "Lou", "Bi", "Shuang", "Zhuo", "Yu", "Wu", "Jue", "Yin", "Quan", "Si", "Jiao", "Yi", "Hua", "Bi", "Ying", "Su", "Huang", "Fan", "Jiao", "Liao", "Yan", "Kao", "Jiu", "Xian", "Xian", "Tu", "Mai", "Zun", "Yu", "Ying", "Lu", "Tuan", "Xian", "Xue", "Yi", "Pi"], ["Shu", "Luo", "Qi", "Yi", "Ji", "Zhe", "Yu", "Zhan", "Ye", "Yang", "Pi", "Ning", "Huo", "Mi", "Ying", "Meng", "Di", "Yue", "Yu", "Lei", "Bao", "Lu", "He", "Long", "Shuang", "Yue", "Ying", "Guan", "Qu", "Li", "Luan", "Niao", "Jiu", "Ji", "Yuan", "Ming", "Shi", "Ou", "Ya", "Cang", "Bao", "Zhen", "Gu", "Dong", "Lu", "Ya", "Xiao", "Yang", "Ling", "Zhi", "Qu", "Yuan", "Xue", "Tuo", "Si", "Zhi", "Er", "Gua", "Xiu", "Heng", "Zhou", "Ge", "Luan", "Hong", "Wu", "Bo", "Li", "Juan", "Hu", "E", "Yu", "Xian", "Ti", "Wu", "Que", "Miao", "An", "Kun", "Bei", "Peng", "Qian", "Chun", "Geng", "Yuan", "Su", "Hu", "He", "E", "Gu", "Qiu", "Zi", "Mei", "Mu", "Ni", "Yao", "Weng", "Liu", "Ji", "Ni", "Jian", "He", "Yi", "Ying", "Zhe", "Liao", "Liao", "Jiao", "Jiu", "Yu", "Lu", "Xuan", "Zhan", "Ying", "Huo", "Meng", "Guan", "Shuang", "Lu", "Jin", "Ling", "Jian", "Xian", "Cuo", "Jian", "Jian", "Yan", "Cuo", "Lu", "You", "Cu", "Ji", "Biao", "Cu", "Biao", "Zhu", "Jun", "Zhu", "Jian", "Mi", "Mi", "Wu", "Liu", "Chen", "Jun", "Lin", "Ni", "Qi", "Lu", "Jiu", "Jun", "Jing", "Li", "Xiang", "Yan", "Jia", "Mi", "Li", "She", "Zhang", "Lin", "Jing", "Ji", "Ling", "Yan", "Cu", "Mai", "Mai", "Ge", "Chao", "Fu", "Mian", "Mian", "Fu", "Pao", "Qu", "Qu", "Mou", "Fu", "Xian", "Lai", "Qu", "Mian", , "Feng", "Fu", "Qu", "Mian", "Ma", "Mo", "Mo", "Hui", "Ma", "Zou", "Nen", "Fen", "Huang", "Huang", "Jin", "Guang", "Tian", "Tou", "Heng", "Xi", "Kuang", "Heng", "Shu", "Li", "Nian", "Chi", "Hei", "Hei", "Yi", "Qian", "Dan", "Xi", "Tuan", "Mo", "Mo", "Qian", "Dai", "Chu", "You", "Dian", "Yi", "Xia", "Yan", "Qu", "Mei", "Yan", "Jing", "Yu", "Li", "Dang", "Du", "Can", "Yin", "An", "Yan", "Tan", "An", "Zhen", "Dai", "Can", "Yi", "Mei", "Dan", "Yan", "Du", "Lu", "Zhi", "Fen", "Fu", "Fu", "Min", "Min", "Yuan"], ["Cu", "Qu", "Chao", "Wa", "Zhu", "Zhi", "Mang", "Ao", "Bie", "Tuo", "Bi", "Yuan", "Chao", "Tuo", "Ding", "Mi", "Nai", "Ding", "Zi", "Gu", "Gu", "Dong", "Fen", "Tao", "Yuan", "Pi", "Chang", "Gao", "Qi", "Yuan", "Tang", "Teng", "Shu", "Shu", "Fen", "Fei", "Wen", "Ba", "Diao", "Tuo", "Tong", "Qu", "Sheng", "Shi", "You", "Shi", "Ting", "Wu", "Nian", "Jing", "Hun", "Ju", "Yan", "Tu", "Ti", "Xi", "Xian", "Yan", "Lei", "Bi", "Yao", "Qiu", "Han", "Wu", "Wu", "Hou", "Xi", "Ge", "Zha", "Xiu", "Weng", "Zha", "Nong", "Nang", "Qi", "Zhai", "Ji", "Zi", "Ji", "Ji", "Qi", "Ji", "Chi", "Chen", "Chen", "He", "Ya", "Ken", "Xie", "Pao", "Cuo", "Shi", "Zi", "Chi", "Nian", "Ju", "Tiao", "Ling", "Ling", "Chu", "Quan", "Xie", "Ken", "Nie", "Jiu", "Yao", "Chuo", "Kun", "Yu", "Chu", "Yi", "Ni", "Cuo", "Zou", "Qu", "Nen", "Xian", "Ou", "E", "Wo", "Yi", "Chuo", "Zou", "Dian", "Chu", "Jin", "Ya", "Chi", "Chen", "He", "Ken", "Ju", "Ling", "Pao", "Tiao", "Zi", "Ken", "Yu", "Chuo", "Qu", "Wo", "Long", "Pang", "Gong", "Pang", "Yan", "Long", "Long", "Gong", "Kan", "Ta", "Ling", "Ta", "Long", "Gong", "Kan", "Gui", "Qiu", "Bie", "Gui", "Yue", "Chui", "He", "Jue", "Xie", "Yu"], ["it", "ix", "i", "ip", "iet", "iex", "ie", "iep", "at", "ax", "a", "ap", "uox", "uo", "uop", "ot", "ox", "o", "op", "ex", "e", "wu", "bit", "bix", "bi", "bip", "biet", "biex", "bie", "biep", "bat", "bax", "ba", "bap", "buox", "buo", "buop", "bot", "box", "bo", "bop", "bex", "be", "bep", "but", "bux", "bu", "bup", "burx", "bur", "byt", "byx", "by", "byp", "byrx", "byr", "pit", "pix", "pi", "pip", "piex", "pie", "piep", "pat", "pax", "pa", "pap", "puox", "puo", "puop", "pot", "pox", "po", "pop", "put", "pux", "pu", "pup", "purx", "pur", "pyt", "pyx", "py", "pyp", "pyrx", "pyr", "bbit", "bbix", "bbi", "bbip", "bbiet", "bbiex", "bbie", "bbiep", "bbat", "bbax", "bba", "bbap", "bbuox", "bbuo", "bbuop", "bbot", "bbox", "bbo", "bbop", "bbex", "bbe", "bbep", "bbut", "bbux", "bbu", "bbup", "bburx", "bbur", "bbyt", "bbyx", "bby", "bbyp", "nbit", "nbix", "nbi", "nbip", "nbiex", "nbie", "nbiep", "nbat", "nbax", "nba", "nbap", "nbot", "nbox", "nbo", "nbop", "nbut", "nbux", "nbu", "nbup", "nburx", "nbur", "nbyt", "nbyx", "nby", "nbyp", "nbyrx", "nbyr", "hmit", "hmix", "hmi", "hmip", "hmiex", "hmie", "hmiep", "hmat", "hmax", "hma", "hmap", "hmuox", "hmuo", "hmuop", "hmot", "hmox", "hmo", "hmop", "hmut", "hmux", "hmu", "hmup", "hmurx", "hmur", "hmyx", "hmy", "hmyp", "hmyrx", "hmyr", "mit", "mix", "mi", "mip", "miex", "mie", "miep", "mat", "max", "ma", "map", "muot", "muox", "muo", "muop", "mot", "mox", "mo", "mop", "mex", "me", "mut", "mux", "mu", "mup", "murx", "mur", "myt", "myx", "my", "myp", "fit", "fix", "fi", "fip", "fat", "fax", "fa", "fap", "fox", "fo", "fop", "fut", "fux", "fu", "fup", "furx", "fur", "fyt", "fyx", "fy", "fyp", "vit", "vix", "vi", "vip", "viet", "viex", "vie", "viep", "vat", "vax", "va", "vap", "vot", "vox", "vo", "vop", "vex", "vep", "vut", "vux", "vu", "vup", "vurx", "vur", "vyt", "vyx", "vy", "vyp", "vyrx", "vyr"], ["dit", "dix", "di", "dip", "diex", "die", "diep", "dat", "dax", "da", "dap", "duox", "duo", "dot", "dox", "do", "dop", "dex", "de", "dep", "dut", "dux", "du", "dup", "durx", "dur", "tit", "tix", "ti", "tip", "tiex", "tie", "tiep", "tat", "tax", "ta", "tap", "tuot", "tuox", "tuo", "tuop", "tot", "tox", "to", "top", "tex", "te", "tep", "tut", "tux", "tu", "tup", "turx", "tur", "ddit", "ddix", "ddi", "ddip", "ddiex", "ddie", "ddiep", "ddat", "ddax", "dda", "ddap", "dduox", "dduo", "dduop", "ddot", "ddox", "ddo", "ddop", "ddex", "dde", "ddep", "ddut", "ddux", "ddu", "ddup", "ddurx", "ddur", "ndit", "ndix", "ndi", "ndip", "ndiex", "ndie", "ndat", "ndax", "nda", "ndap", "ndot", "ndox", "ndo", "ndop", "ndex", "nde", "ndep", "ndut", "ndux", "ndu", "ndup", "ndurx", "ndur", "hnit", "hnix", "hni", "hnip", "hniet", "hniex", "hnie", "hniep", "hnat", "hnax", "hna", "hnap", "hnuox", "hnuo", "hnot", "hnox", "hnop", "hnex", "hne", "hnep", "hnut", "nit", "nix", "ni", "nip", "niex", "nie", "niep", "nax", "na", "nap", "nuox", "nuo", "nuop", "not", "nox", "no", "nop", "nex", "ne", "nep", "nut", "nux", "nu", "nup", "nurx", "nur", "hlit", "hlix", "hli", "hlip", "hliex", "hlie", "hliep", "hlat", "hlax", "hla", "hlap", "hluox", "hluo", "hluop", "hlox", "hlo", "hlop", "hlex", "hle", "hlep", "hlut", "hlux", "hlu", "hlup", "hlurx", "hlur", "hlyt", "hlyx", "hly", "hlyp", "hlyrx", "hlyr", "lit", "lix", "li", "lip", "liet", "liex", "lie", "liep", "lat", "lax", "la", "lap", "luot", "luox", "luo", "luop", "lot", "lox", "lo", "lop", "lex", "le", "lep", "lut", "lux", "lu", "lup", "lurx", "lur", "lyt", "lyx", "ly", "lyp", "lyrx", "lyr", "git", "gix", "gi", "gip", "giet", "giex", "gie", "giep", "gat", "gax", "ga", "gap", "guot", "guox", "guo", "guop", "got", "gox", "go", "gop", "get", "gex", "ge", "gep", "gut", "gux", "gu", "gup", "gurx", "gur", "kit", "kix", "ki", "kip", "kiex", "kie", "kiep", "kat"], ["kax", "ka", "kap", "kuox", "kuo", "kuop", "kot", "kox", "ko", "kop", "ket", "kex", "ke", "kep", "kut", "kux", "ku", "kup", "kurx", "kur", "ggit", "ggix", "ggi", "ggiex", "ggie", "ggiep", "ggat", "ggax", "gga", "ggap", "gguot", "gguox", "gguo", "gguop", "ggot", "ggox", "ggo", "ggop", "gget", "ggex", "gge", "ggep", "ggut", "ggux", "ggu", "ggup", "ggurx", "ggur", "mgiex", "mgie", "mgat", "mgax", "mga", "mgap", "mguox", "mguo", "mguop", "mgot", "mgox", "mgo", "mgop", "mgex", "mge", "mgep", "mgut", "mgux", "mgu", "mgup", "mgurx", "mgur", "hxit", "hxix", "hxi", "hxip", "hxiet", "hxiex", "hxie", "hxiep", "hxat", "hxax", "hxa", "hxap", "hxuot", "hxuox", "hxuo", "hxuop", "hxot", "hxox", "hxo", "hxop", "hxex", "hxe", "hxep", "ngiex", "ngie", "ngiep", "ngat", "ngax", "nga", "ngap", "nguot", "nguox", "nguo", "ngot", "ngox", "ngo", "ngop", "ngex", "nge", "ngep", "hit", "hiex", "hie", "hat", "hax", "ha", "hap", "huot", "huox", "huo", "huop", "hot", "hox", "ho", "hop", "hex", "he", "hep", "wat", "wax", "wa", "wap", "wuox", "wuo", "wuop", "wox", "wo", "wop", "wex", "we", "wep", "zit", "zix", "zi", "zip", "ziex", "zie", "ziep", "zat", "zax", "za", "zap", "zuox", "zuo", "zuop", "zot", "zox", "zo", "zop", "zex", "ze", "zep", "zut", "zux", "zu", "zup", "zurx", "zur", "zyt", "zyx", "zy", "zyp", "zyrx", "zyr", "cit", "cix", "ci", "cip", "ciet", "ciex", "cie", "ciep", "cat", "cax", "ca", "cap", "cuox", "cuo", "cuop", "cot", "cox", "co", "cop", "cex", "ce", "cep", "cut", "cux", "cu", "cup", "curx", "cur", "cyt", "cyx", "cy", "cyp", "cyrx", "cyr", "zzit", "zzix", "zzi", "zzip", "zziet", "zziex", "zzie", "zziep", "zzat", "zzax", "zza", "zzap", "zzox", "zzo", "zzop", "zzex", "zze", "zzep", "zzux", "zzu", "zzup", "zzurx", "zzur", "zzyt", "zzyx", "zzy", "zzyp", "zzyrx", "zzyr", "nzit", "nzix", "nzi", "nzip", "nziex", "nzie", "nziep", "nzat", "nzax", "nza", "nzap", "nzuox", "nzuo", "nzox", "nzop", "nzex", "nze", "nzux", "nzu"], ["nzup", "nzurx", "nzur", "nzyt", "nzyx", "nzy", "nzyp", "nzyrx", "nzyr", "sit", "six", "si", "sip", "siex", "sie", "siep", "sat", "sax", "sa", "sap", "suox", "suo", "suop", "sot", "sox", "so", "sop", "sex", "se", "sep", "sut", "sux", "su", "sup", "surx", "sur", "syt", "syx", "sy", "syp", "syrx", "syr", "ssit", "ssix", "ssi", "ssip", "ssiex", "ssie", "ssiep", "ssat", "ssax", "ssa", "ssap", "ssot", "ssox", "sso", "ssop", "ssex", "sse", "ssep", "ssut", "ssux", "ssu", "ssup", "ssyt", "ssyx", "ssy", "ssyp", "ssyrx", "ssyr", "zhat", "zhax", "zha", "zhap", "zhuox", "zhuo", "zhuop", "zhot", "zhox", "zho", "zhop", "zhet", "zhex", "zhe", "zhep", "zhut", "zhux", "zhu", "zhup", "zhurx", "zhur", "zhyt", "zhyx", "zhy", "zhyp", "zhyrx", "zhyr", "chat", "chax", "cha", "chap", "chuot", "chuox", "chuo", "chuop", "chot", "chox", "cho", "chop", "chet", "chex", "che", "chep", "chux", "chu", "chup", "churx", "chur", "chyt", "chyx", "chy", "chyp", "chyrx", "chyr", "rrax", "rra", "rruox", "rruo", "rrot", "rrox", "rro", "rrop", "rret", "rrex", "rre", "rrep", "rrut", "rrux", "rru", "rrup", "rrurx", "rrur", "rryt", "rryx", "rry", "rryp", "rryrx", "rryr", "nrat", "nrax", "nra", "nrap", "nrox", "nro", "nrop", "nret", "nrex", "nre", "nrep", "nrut", "nrux", "nru", "nrup", "nrurx", "nrur", "nryt", "nryx", "nry", "nryp", "nryrx", "nryr", "shat", "shax", "sha", "shap", "shuox", "shuo", "shuop", "shot", "shox", "sho", "shop", "shet", "shex", "she", "shep", "shut", "shux", "shu", "shup", "shurx", "shur", "shyt", "shyx", "shy", "shyp", "shyrx", "shyr", "rat", "rax", "ra", "rap", "ruox", "ruo", "ruop", "rot", "rox", "ro", "rop", "rex", "re", "rep", "rut", "rux", "ru", "rup", "rurx", "rur", "ryt", "ryx", "ry", "ryp", "ryrx", "ryr", "jit", "jix", "ji", "jip", "jiet", "jiex", "jie", "jiep", "juot", "juox", "juo", "juop", "jot", "jox", "jo", "jop", "jut", "jux", "ju", "jup", "jurx", "jur", "jyt", "jyx", "jy", "jyp", "jyrx", "jyr", "qit", "qix", "qi", "qip"], ["qiet", "qiex", "qie", "qiep", "quot", "quox", "quo", "quop", "qot", "qox", "qo", "qop", "qut", "qux", "qu", "qup", "qurx", "qur", "qyt", "qyx", "qy", "qyp", "qyrx", "qyr", "jjit", "jjix", "jji", "jjip", "jjiet", "jjiex", "jjie", "jjiep", "jjuox", "jjuo", "jjuop", "jjot", "jjox", "jjo", "jjop", "jjut", "jjux", "jju", "jjup", "jjurx", "jjur", "jjyt", "jjyx", "jjy", "jjyp", "njit", "njix", "nji", "njip", "njiet", "njiex", "njie", "njiep", "njuox", "njuo", "njot", "njox", "njo", "njop", "njux", "nju", "njup", "njurx", "njur", "njyt", "njyx", "njy", "njyp", "njyrx", "njyr", "nyit", "nyix", "nyi", "nyip", "nyiet", "nyiex", "nyie", "nyiep", "nyuox", "nyuo", "nyuop", "nyot", "nyox", "nyo", "nyop", "nyut", "nyux", "nyu", "nyup", "xit", "xix", "xi", "xip", "xiet", "xiex", "xie", "xiep", "xuox", "xuo", "xot", "xox", "xo", "xop", "xyt", "xyx", "xy", "xyp", "xyrx", "xyr", "yit", "yix", "yi", "yip", "yiet", "yiex", "yie", "yiep", "yuot", "yuox", "yuo", "yuop", "yot", "yox", "yo", "yop", "yut", "yux", "yu", "yup", "yurx", "yur", "yyt", "yyx", "yy", "yyp", "yyrx", "yyr", , , , "Qot", "Li", "Kit", "Nyip", "Cyp", "Ssi", "Ggop", "Gep", "Mi", "Hxit", "Lyr", "Bbut", "Mop", "Yo", "Put", "Hxuo", "Tat", "Ga", , , "Ddur", "Bur", "Gguo", "Nyop", "Tu", "Op", "Jjut", "Zot", "Pyt", "Hmo", "Yit", "Vur", "Shy", "Vep", "Za", "Jo", , "Jjy", "Got", "Jjie", "Wo", "Du", "Shur", "Lie", "Cy", "Cuop", "Cip", "Hxop", "Shat", , "Shop", "Che", "Zziet", , "Ke"], [], [], [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "A", "a", "A", "a", "HENG", "heng", "TZ", "tz", "3", "3", "4", "4", "4", "4", "F", "S", "AA", "aa", "AO", "ao", "AU", "au", "AV", "av", "AV-", "av-", "AY", "ay", "C", "c", "K", "k", "K", "k", "K", "k", "L", "l", "L", "l", "O", "o", "O", "o", "OO", "oo", "P", "p", "P", "p", "P", "p", "Q", "q", "Q", "q", "R", "r", "R", "r", "V", "v", "VY", "vy", "Z", "z", "TH", "th", "TH", "th", "Y", "y", "ET", "et", "IS", "is", "CON", "con", "US", "us", "dum", "lum", "num", "rum", "RUM", "tum", "um", "D", "d", "F", "f", "G", "G", "g", "L", "l", "R", "r", "S", "s", "T", "t", "^", ":", "=", "'", "'", "H", "l", ".", "N", "n", "C", "c", "c", "h", "B", "b", "F", "f", "AE", "ae", "OE", "oe", "UE", "ue", "G", "g", "K", "k", "N", "n", "R", "r", "S", "s", "H", "E", "G", "L", "I", "Q", "K", "T", "J", "CHI", "B", "b", "O", "o", "U", "u", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "I", "H", "oe", "M", "F", "P", "M", "I", "M1"], [], [], [], [], ["ga", "gag", "gagg", "gags", "gan", "ganj", "ganh", "gad", "gal", "galg", "galm", "galb", "gals", "galt", "galp", "galh", "gam", "gab", "gabs", "gas", "gass", "gang", "gaj", "gac", "gak", "gat", "gap", "gah", "gae", "gaeg", "gaegg", "gaegs", "gaen", "gaenj", "gaenh", "gaed", "gael", "gaelg", "gaelm", "gaelb", "gaels", "gaelt", "gaelp", "gaelh", "gaem", "gaeb", "gaebs", "gaes", "gaess", "gaeng", "gaej", "gaec", "gaek", "gaet", "gaep", "gaeh", "gya", "gyag", "gyagg", "gyags", "gyan", "gyanj", "gyanh", "gyad", "gyal", "gyalg", "gyalm", "gyalb", "gyals", "gyalt", "gyalp", "gyalh", "gyam", "gyab", "gyabs", "gyas", "gyass", "gyang", "gyaj", "gyac", "gyak", "gyat", "gyap", "gyah", "gyae", "gyaeg", "gyaegg", "gyaegs", "gyaen", "gyaenj", "gyaenh", "gyaed", "gyael", "gyaelg", "gyaelm", "gyaelb", "gyaels", "gyaelt", "gyaelp", "gyaelh", "gyaem", "gyaeb", "gyaebs", "gyaes", "gyaess", "gyaeng", "gyaej", "gyaec", "gyaek", "gyaet", "gyaep", "gyaeh", "geo", "geog", "geogg", "geogs", "geon", "geonj", "geonh", "geod", "geol", "geolg", "geolm", "geolb", "geols", "geolt", "geolp", "geolh", "geom", "geob", "geobs", "geos", "geoss", "geong", "geoj", "geoc", "geok", "geot", "geop", "geoh", "ge", "geg", "gegg", "gegs", "gen", "genj", "genh", "ged", "gel", "gelg", "gelm", "gelb", "gels", "gelt", "gelp", "gelh", "gem", "geb", "gebs", "ges", "gess", "geng", "gej", "gec", "gek", "get", "gep", "geh", "gyeo", "gyeog", "gyeogg", "gyeogs", "gyeon", "gyeonj", "gyeonh", "gyeod", "gyeol", "gyeolg", "gyeolm", "gyeolb", "gyeols", "gyeolt", "gyeolp", "gyeolh", "gyeom", "gyeob", "gyeobs", "gyeos", "gyeoss", "gyeong", "gyeoj", "gyeoc", "gyeok", "gyeot", "gyeop", "gyeoh", "gye", "gyeg", "gyegg", "gyegs", "gyen", "gyenj", "gyenh", "gyed", "gyel", "gyelg", "gyelm", "gyelb", "gyels", "gyelt", "gyelp", "gyelh", "gyem", "gyeb", "gyebs", "gyes", "gyess", "gyeng", "gyej", "gyec", "gyek", "gyet", "gyep", "gyeh", "go", "gog", "gogg", "gogs", "gon", "gonj", "gonh", "god", "gol", "golg", "golm", "golb", "gols", "golt", "golp", "golh", "gom", "gob", "gobs", "gos", "goss", "gong", "goj", "goc", "gok", "got", "gop", "goh", "gwa", "gwag", "gwagg", "gwags"], ["gwan", "gwanj", "gwanh", "gwad", "gwal", "gwalg", "gwalm", "gwalb", "gwals", "gwalt", "gwalp", "gwalh", "gwam", "gwab", "gwabs", "gwas", "gwass", "gwang", "gwaj", "gwac", "gwak", "gwat", "gwap", "gwah", "gwae", "gwaeg", "gwaegg", "gwaegs", "gwaen", "gwaenj", "gwaenh", "gwaed", "gwael", "gwaelg", "gwaelm", "gwaelb", "gwaels", "gwaelt", "gwaelp", "gwaelh", "gwaem", "gwaeb", "gwaebs", "gwaes", "gwaess", "gwaeng", "gwaej", "gwaec", "gwaek", "gwaet", "gwaep", "gwaeh", "goe", "goeg", "goegg", "goegs", "goen", "goenj", "goenh", "goed", "goel", "goelg", "goelm", "goelb", "goels", "goelt", "goelp", "goelh", "goem", "goeb", "goebs", "goes", "goess", "goeng", "goej", "goec", "goek", "goet", "goep", "goeh", "gyo", "gyog", "gyogg", "gyogs", "gyon", "gyonj", "gyonh", "gyod", "gyol", "gyolg", "gyolm", "gyolb", "gyols", "gyolt", "gyolp", "gyolh", "gyom", "gyob", "gyobs", "gyos", "gyoss", "gyong", "gyoj", "gyoc", "gyok", "gyot", "gyop", "gyoh", "gu", "gug", "gugg", "gugs", "gun", "gunj", "gunh", "gud", "gul", "gulg", "gulm", "gulb", "guls", "gult", "gulp", "gulh", "gum", "gub", "gubs", "gus", "guss", "gung", "guj", "guc", "guk", "gut", "gup", "guh", "gweo", "gweog", "gweogg", "gweogs", "gweon", "gweonj", "gweonh", "gweod", "gweol", "gweolg", "gweolm", "gweolb", "gweols", "gweolt", "gweolp", "gweolh", "gweom", "gweob", "gweobs", "gweos", "gweoss", "gweong", "gweoj", "gweoc", "gweok", "gweot", "gweop", "gweoh", "gwe", "gweg", "gwegg", "gwegs", "gwen", "gwenj", "gwenh", "gwed", "gwel", "gwelg", "gwelm", "gwelb", "gwels", "gwelt", "gwelp", "gwelh", "gwem", "gweb", "gwebs", "gwes", "gwess", "gweng", "gwej", "gwec", "gwek", "gwet", "gwep", "gweh", "gwi", "gwig", "gwigg", "gwigs", "gwin", "gwinj", "gwinh", "gwid", "gwil", "gwilg", "gwilm", "gwilb", "gwils", "gwilt", "gwilp", "gwilh", "gwim", "gwib", "gwibs", "gwis", "gwiss", "gwing", "gwij", "gwic", "gwik", "gwit", "gwip", "gwih", "gyu", "gyug", "gyugg", "gyugs", "gyun", "gyunj", "gyunh", "gyud", "gyul", "gyulg", "gyulm", "gyulb", "gyuls", "gyult", "gyulp", "gyulh", "gyum", "gyub", "gyubs", "gyus", "gyuss", "gyung", "gyuj", "gyuc", "gyuk", "gyut", "gyup", "gyuh", "geu", "geug", "geugg", "geugs", "geun", "geunj", "geunh", "geud"], ["geul", "geulg", "geulm", "geulb", "geuls", "geult", "geulp", "geulh", "geum", "geub", "geubs", "geus", "geuss", "geung", "geuj", "geuc", "geuk", "geut", "geup", "geuh", "gyi", "gyig", "gyigg", "gyigs", "gyin", "gyinj", "gyinh", "gyid", "gyil", "gyilg", "gyilm", "gyilb", "gyils", "gyilt", "gyilp", "gyilh", "gyim", "gyib", "gyibs", "gyis", "gyiss", "gying", "gyij", "gyic", "gyik", "gyit", "gyip", "gyih", "gi", "gig", "gigg", "gigs", "gin", "ginj", "ginh", "gid", "gil", "gilg", "gilm", "gilb", "gils", "gilt", "gilp", "gilh", "gim", "gib", "gibs", "gis", "giss", "ging", "gij", "gic", "gik", "git", "gip", "gih", "gga", "ggag", "ggagg", "ggags", "ggan", "gganj", "gganh", "ggad", "ggal", "ggalg", "ggalm", "ggalb", "ggals", "ggalt", "ggalp", "ggalh", "ggam", "ggab", "ggabs", "ggas", "ggass", "ggang", "ggaj", "ggac", "ggak", "ggat", "ggap", "ggah", "ggae", "ggaeg", "ggaegg", "ggaegs", "ggaen", "ggaenj", "ggaenh", "ggaed", "ggael", "ggaelg", "ggaelm", "ggaelb", "ggaels", "ggaelt", "ggaelp", "ggaelh", "ggaem", "ggaeb", "ggaebs", "ggaes", "ggaess", "ggaeng", "ggaej", "ggaec", "ggaek", "ggaet", "ggaep", "ggaeh", "ggya", "ggyag", "ggyagg", "ggyags", "ggyan", "ggyanj", "ggyanh", "ggyad", "ggyal", "ggyalg", "ggyalm", "ggyalb", "ggyals", "ggyalt", "ggyalp", "ggyalh", "ggyam", "ggyab", "ggyabs", "ggyas", "ggyass", "ggyang", "ggyaj", "ggyac", "ggyak", "ggyat", "ggyap", "ggyah", "ggyae", "ggyaeg", "ggyaegg", "ggyaegs", "ggyaen", "ggyaenj", "ggyaenh", "ggyaed", "ggyael", "ggyaelg", "ggyaelm", "ggyaelb", "ggyaels", "ggyaelt", "ggyaelp", "ggyaelh", "ggyaem", "ggyaeb", "ggyaebs", "ggyaes", "ggyaess", "ggyaeng", "ggyaej", "ggyaec", "ggyaek", "ggyaet", "ggyaep", "ggyaeh", "ggeo", "ggeog", "ggeogg", "ggeogs", "ggeon", "ggeonj", "ggeonh", "ggeod", "ggeol", "ggeolg", "ggeolm", "ggeolb", "ggeols", "ggeolt", "ggeolp", "ggeolh", "ggeom", "ggeob", "ggeobs", "ggeos", "ggeoss", "ggeong", "ggeoj", "ggeoc", "ggeok", "ggeot", "ggeop", "ggeoh", "gge", "ggeg", "ggegg", "ggegs", "ggen", "ggenj", "ggenh", "gged", "ggel", "ggelg", "ggelm", "ggelb", "ggels", "ggelt", "ggelp", "ggelh", "ggem", "ggeb", "ggebs", "gges", "ggess", "ggeng", "ggej", "ggec", "ggek", "gget", "ggep", "ggeh", "ggyeo", "ggyeog", "ggyeogg", "ggyeogs", "ggyeon", "ggyeonj", "ggyeonh", "ggyeod", "ggyeol", "ggyeolg", "ggyeolm", "ggyeolb"], ["ggyeols", "ggyeolt", "ggyeolp", "ggyeolh", "ggyeom", "ggyeob", "ggyeobs", "ggyeos", "ggyeoss", "ggyeong", "ggyeoj", "ggyeoc", "ggyeok", "ggyeot", "ggyeop", "ggyeoh", "ggye", "ggyeg", "ggyegg", "ggyegs", "ggyen", "ggyenj", "ggyenh", "ggyed", "ggyel", "ggyelg", "ggyelm", "ggyelb", "ggyels", "ggyelt", "ggyelp", "ggyelh", "ggyem", "ggyeb", "ggyebs", "ggyes", "ggyess", "ggyeng", "ggyej", "ggyec", "ggyek", "ggyet", "ggyep", "ggyeh", "ggo", "ggog", "ggogg", "ggogs", "ggon", "ggonj", "ggonh", "ggod", "ggol", "ggolg", "ggolm", "ggolb", "ggols", "ggolt", "ggolp", "ggolh", "ggom", "ggob", "ggobs", "ggos", "ggoss", "ggong", "ggoj", "ggoc", "ggok", "ggot", "ggop", "ggoh", "ggwa", "ggwag", "ggwagg", "ggwags", "ggwan", "ggwanj", "ggwanh", "ggwad", "ggwal", "ggwalg", "ggwalm", "ggwalb", "ggwals", "ggwalt", "ggwalp", "ggwalh", "ggwam", "ggwab", "ggwabs", "ggwas", "ggwass", "ggwang", "ggwaj", "ggwac", "ggwak", "ggwat", "ggwap", "ggwah", "ggwae", "ggwaeg", "ggwaegg", "ggwaegs", "ggwaen", "ggwaenj", "ggwaenh", "ggwaed", "ggwael", "ggwaelg", "ggwaelm", "ggwaelb", "ggwaels", "ggwaelt", "ggwaelp", "ggwaelh", "ggwaem", "ggwaeb", "ggwaebs", "ggwaes", "ggwaess", "ggwaeng", "ggwaej", "ggwaec", "ggwaek", "ggwaet", "ggwaep", "ggwaeh", "ggoe", "ggoeg", "ggoegg", "ggoegs", "ggoen", "ggoenj", "ggoenh", "ggoed", "ggoel", "ggoelg", "ggoelm", "ggoelb", "ggoels", "ggoelt", "ggoelp", "ggoelh", "ggoem", "ggoeb", "ggoebs", "ggoes", "ggoess", "ggoeng", "ggoej", "ggoec", "ggoek", "ggoet", "ggoep", "ggoeh", "ggyo", "ggyog", "ggyogg", "ggyogs", "ggyon", "ggyonj", "ggyonh", "ggyod", "ggyol", "ggyolg", "ggyolm", "ggyolb", "ggyols", "ggyolt", "ggyolp", "ggyolh", "ggyom", "ggyob", "ggyobs", "ggyos", "ggyoss", "ggyong", "ggyoj", "ggyoc", "ggyok", "ggyot", "ggyop", "ggyoh", "ggu", "ggug", "ggugg", "ggugs", "ggun", "ggunj", "ggunh", "ggud", "ggul", "ggulg", "ggulm", "ggulb", "gguls", "ggult", "ggulp", "ggulh", "ggum", "ggub", "ggubs", "ggus", "gguss", "ggung", "gguj", "gguc", "gguk", "ggut", "ggup", "gguh", "ggweo", "ggweog", "ggweogg", "ggweogs", "ggweon", "ggweonj", "ggweonh", "ggweod", "ggweol", "ggweolg", "ggweolm", "ggweolb", "ggweols", "ggweolt", "ggweolp", "ggweolh", "ggweom", "ggweob", "ggweobs", "ggweos", "ggweoss", "ggweong", "ggweoj", "ggweoc", "ggweok", "ggweot", "ggweop", "ggweoh", "ggwe", "ggweg", "ggwegg", "ggwegs", "ggwen", "ggwenj", "ggwenh", "ggwed", "ggwel", "ggwelg", "ggwelm", "ggwelb", "ggwels", "ggwelt", "ggwelp", "ggwelh"], ["ggwem", "ggweb", "ggwebs", "ggwes", "ggwess", "ggweng", "ggwej", "ggwec", "ggwek", "ggwet", "ggwep", "ggweh", "ggwi", "ggwig", "ggwigg", "ggwigs", "ggwin", "ggwinj", "ggwinh", "ggwid", "ggwil", "ggwilg", "ggwilm", "ggwilb", "ggwils", "ggwilt", "ggwilp", "ggwilh", "ggwim", "ggwib", "ggwibs", "ggwis", "ggwiss", "ggwing", "ggwij", "ggwic", "ggwik", "ggwit", "ggwip", "ggwih", "ggyu", "ggyug", "ggyugg", "ggyugs", "ggyun", "ggyunj", "ggyunh", "ggyud", "ggyul", "ggyulg", "ggyulm", "ggyulb", "ggyuls", "ggyult", "ggyulp", "ggyulh", "ggyum", "ggyub", "ggyubs", "ggyus", "ggyuss", "ggyung", "ggyuj", "ggyuc", "ggyuk", "ggyut", "ggyup", "ggyuh", "ggeu", "ggeug", "ggeugg", "ggeugs", "ggeun", "ggeunj", "ggeunh", "ggeud", "ggeul", "ggeulg", "ggeulm", "ggeulb", "ggeuls", "ggeult", "ggeulp", "ggeulh", "ggeum", "ggeub", "ggeubs", "ggeus", "ggeuss", "ggeung", "ggeuj", "ggeuc", "ggeuk", "ggeut", "ggeup", "ggeuh", "ggyi", "ggyig", "ggyigg", "ggyigs", "ggyin", "ggyinj", "ggyinh", "ggyid", "ggyil", "ggyilg", "ggyilm", "ggyilb", "ggyils", "ggyilt", "ggyilp", "ggyilh", "ggyim", "ggyib", "ggyibs", "ggyis", "ggyiss", "ggying", "ggyij", "ggyic", "ggyik", "ggyit", "ggyip", "ggyih", "ggi", "ggig", "ggigg", "ggigs", "ggin", "gginj", "gginh", "ggid", "ggil", "ggilg", "ggilm", "ggilb", "ggils", "ggilt", "ggilp", "ggilh", "ggim", "ggib", "ggibs", "ggis", "ggiss", "gging", "ggij", "ggic", "ggik", "ggit", "ggip", "ggih", "na", "nag", "nagg", "nags", "nan", "nanj", "nanh", "nad", "nal", "nalg", "nalm", "nalb", "nals", "nalt", "nalp", "nalh", "nam", "nab", "nabs", "nas", "nass", "nang", "naj", "nac", "nak", "nat", "nap", "nah", "nae", "naeg", "naegg", "naegs", "naen", "naenj", "naenh", "naed", "nael", "naelg", "naelm", "naelb", "naels", "naelt", "naelp", "naelh", "naem", "naeb", "naebs", "naes", "naess", "naeng", "naej", "naec", "naek", "naet", "naep", "naeh", "nya", "nyag", "nyagg", "nyags", "nyan", "nyanj", "nyanh", "nyad", "nyal", "nyalg", "nyalm", "nyalb", "nyals", "nyalt", "nyalp", "nyalh", "nyam", "nyab", "nyabs", "nyas", "nyass", "nyang", "nyaj", "nyac", "nyak", "nyat", "nyap", "nyah", "nyae", "nyaeg", "nyaegg", "nyaegs", "nyaen", "nyaenj", "nyaenh", "nyaed", "nyael", "nyaelg", "nyaelm", "nyaelb", "nyaels", "nyaelt", "nyaelp", "nyaelh", "nyaem", "nyaeb", "nyaebs", "nyaes"], ["nyaess", "nyaeng", "nyaej", "nyaec", "nyaek", "nyaet", "nyaep", "nyaeh", "neo", "neog", "neogg", "neogs", "neon", "neonj", "neonh", "neod", "neol", "neolg", "neolm", "neolb", "neols", "neolt", "neolp", "neolh", "neom", "neob", "neobs", "neos", "neoss", "neong", "neoj", "neoc", "neok", "neot", "neop", "neoh", "ne", "neg", "negg", "negs", "nen", "nenj", "nenh", "ned", "nel", "nelg", "nelm", "nelb", "nels", "nelt", "nelp", "nelh", "nem", "neb", "nebs", "nes", "ness", "neng", "nej", "nec", "nek", "net", "nep", "neh", "nyeo", "nyeog", "nyeogg", "nyeogs", "nyeon", "nyeonj", "nyeonh", "nyeod", "nyeol", "nyeolg", "nyeolm", "nyeolb", "nyeols", "nyeolt", "nyeolp", "nyeolh", "nyeom", "nyeob", "nyeobs", "nyeos", "nyeoss", "nyeong", "nyeoj", "nyeoc", "nyeok", "nyeot", "nyeop", "nyeoh", "nye", "nyeg", "nyegg", "nyegs", "nyen", "nyenj", "nyenh", "nyed", "nyel", "nyelg", "nyelm", "nyelb", "nyels", "nyelt", "nyelp", "nyelh", "nyem", "nyeb", "nyebs", "nyes", "nyess", "nyeng", "nyej", "nyec", "nyek", "nyet", "nyep", "nyeh", "no", "nog", "nogg", "nogs", "non", "nonj", "nonh", "nod", "nol", "nolg", "nolm", "nolb", "nols", "nolt", "nolp", "nolh", "nom", "nob", "nobs", "nos", "noss", "nong", "noj", "noc", "nok", "not", "nop", "noh", "nwa", "nwag", "nwagg", "nwags", "nwan", "nwanj", "nwanh", "nwad", "nwal", "nwalg", "nwalm", "nwalb", "nwals", "nwalt", "nwalp", "nwalh", "nwam", "nwab", "nwabs", "nwas", "nwass", "nwang", "nwaj", "nwac", "nwak", "nwat", "nwap", "nwah", "nwae", "nwaeg", "nwaegg", "nwaegs", "nwaen", "nwaenj", "nwaenh", "nwaed", "nwael", "nwaelg", "nwaelm", "nwaelb", "nwaels", "nwaelt", "nwaelp", "nwaelh", "nwaem", "nwaeb", "nwaebs", "nwaes", "nwaess", "nwaeng", "nwaej", "nwaec", "nwaek", "nwaet", "nwaep", "nwaeh", "noe", "noeg", "noegg", "noegs", "noen", "noenj", "noenh", "noed", "noel", "noelg", "noelm", "noelb", "noels", "noelt", "noelp", "noelh", "noem", "noeb", "noebs", "noes", "noess", "noeng", "noej", "noec", "noek", "noet", "noep", "noeh", "nyo", "nyog", "nyogg", "nyogs", "nyon", "nyonj", "nyonh", "nyod", "nyol", "nyolg", "nyolm", "nyolb", "nyols", "nyolt", "nyolp", "nyolh", "nyom", "nyob", "nyobs", "nyos", "nyoss", "nyong", "nyoj", "nyoc"], ["nyok", "nyot", "nyop", "nyoh", "nu", "nug", "nugg", "nugs", "nun", "nunj", "nunh", "nud", "nul", "nulg", "nulm", "nulb", "nuls", "nult", "nulp", "nulh", "num", "nub", "nubs", "nus", "nuss", "nung", "nuj", "nuc", "nuk", "nut", "nup", "nuh", "nweo", "nweog", "nweogg", "nweogs", "nweon", "nweonj", "nweonh", "nweod", "nweol", "nweolg", "nweolm", "nweolb", "nweols", "nweolt", "nweolp", "nweolh", "nweom", "nweob", "nweobs", "nweos", "nweoss", "nweong", "nweoj", "nweoc", "nweok", "nweot", "nweop", "nweoh", "nwe", "nweg", "nwegg", "nwegs", "nwen", "nwenj", "nwenh", "nwed", "nwel", "nwelg", "nwelm", "nwelb", "nwels", "nwelt", "nwelp", "nwelh", "nwem", "nweb", "nwebs", "nwes", "nwess", "nweng", "nwej", "nwec", "nwek", "nwet", "nwep", "nweh", "nwi", "nwig", "nwigg", "nwigs", "nwin", "nwinj", "nwinh", "nwid", "nwil", "nwilg", "nwilm", "nwilb", "nwils", "nwilt", "nwilp", "nwilh", "nwim", "nwib", "nwibs", "nwis", "nwiss", "nwing", "nwij", "nwic", "nwik", "nwit", "nwip", "nwih", "nyu", "nyug", "nyugg", "nyugs", "nyun", "nyunj", "nyunh", "nyud", "nyul", "nyulg", "nyulm", "nyulb", "nyuls", "nyult", "nyulp", "nyulh", "nyum", "nyub", "nyubs", "nyus", "nyuss", "nyung", "nyuj", "nyuc", "nyuk", "nyut", "nyup", "nyuh", "neu", "neug", "neugg", "neugs", "neun", "neunj", "neunh", "neud", "neul", "neulg", "neulm", "neulb", "neuls", "neult", "neulp", "neulh", "neum", "neub", "neubs", "neus", "neuss", "neung", "neuj", "neuc", "neuk", "neut", "neup", "neuh", "nyi", "nyig", "nyigg", "nyigs", "nyin", "nyinj", "nyinh", "nyid", "nyil", "nyilg", "nyilm", "nyilb", "nyils", "nyilt", "nyilp", "nyilh", "nyim", "nyib", "nyibs", "nyis", "nyiss", "nying", "nyij", "nyic", "nyik", "nyit", "nyip", "nyih", "ni", "nig", "nigg", "nigs", "nin", "ninj", "ninh", "nid", "nil", "nilg", "nilm", "nilb", "nils", "nilt", "nilp", "nilh", "nim", "nib", "nibs", "nis", "niss", "ning", "nij", "nic", "nik", "nit", "nip", "nih", "da", "dag", "dagg", "dags", "dan", "danj", "danh", "dad", "dal", "dalg", "dalm", "dalb", "dals", "dalt", "dalp", "dalh", "dam", "dab", "dabs", "das", "dass", "dang", "daj", "dac", "dak", "dat", "dap", "dah"], ["dae", "daeg", "daegg", "daegs", "daen", "daenj", "daenh", "daed", "dael", "daelg", "daelm", "daelb", "daels", "daelt", "daelp", "daelh", "daem", "daeb", "daebs", "daes", "daess", "daeng", "daej", "daec", "daek", "daet", "daep", "daeh", "dya", "dyag", "dyagg", "dyags", "dyan", "dyanj", "dyanh", "dyad", "dyal", "dyalg", "dyalm", "dyalb", "dyals", "dyalt", "dyalp", "dyalh", "dyam", "dyab", "dyabs", "dyas", "dyass", "dyang", "dyaj", "dyac", "dyak", "dyat", "dyap", "dyah", "dyae", "dyaeg", "dyaegg", "dyaegs", "dyaen", "dyaenj", "dyaenh", "dyaed", "dyael", "dyaelg", "dyaelm", "dyaelb", "dyaels", "dyaelt", "dyaelp", "dyaelh", "dyaem", "dyaeb", "dyaebs", "dyaes", "dyaess", "dyaeng", "dyaej", "dyaec", "dyaek", "dyaet", "dyaep", "dyaeh", "deo", "deog", "deogg", "deogs", "deon", "deonj", "deonh", "deod", "deol", "deolg", "deolm", "deolb", "deols", "deolt", "deolp", "deolh", "deom", "deob", "deobs", "deos", "deoss", "deong", "deoj", "deoc", "deok", "deot", "deop", "deoh", "de", "deg", "degg", "degs", "den", "denj", "denh", "ded", "del", "delg", "delm", "delb", "dels", "delt", "delp", "delh", "dem", "deb", "debs", "des", "dess", "deng", "dej", "dec", "dek", "det", "dep", "deh", "dyeo", "dyeog", "dyeogg", "dyeogs", "dyeon", "dyeonj", "dyeonh", "dyeod", "dyeol", "dyeolg", "dyeolm", "dyeolb", "dyeols", "dyeolt", "dyeolp", "dyeolh", "dyeom", "dyeob", "dyeobs", "dyeos", "dyeoss", "dyeong", "dyeoj", "dyeoc", "dyeok", "dyeot", "dyeop", "dyeoh", "dye", "dyeg", "dyegg", "dyegs", "dyen", "dyenj", "dyenh", "dyed", "dyel", "dyelg", "dyelm", "dyelb", "dyels", "dyelt", "dyelp", "dyelh", "dyem", "dyeb", "dyebs", "dyes", "dyess", "dyeng", "dyej", "dyec", "dyek", "dyet", "dyep", "dyeh", "do", "dog", "dogg", "dogs", "don", "donj", "donh", "dod", "dol", "dolg", "dolm", "dolb", "dols", "dolt", "dolp", "dolh", "dom", "dob", "dobs", "dos", "doss", "dong", "doj", "doc", "dok", "dot", "dop", "doh", "dwa", "dwag", "dwagg", "dwags", "dwan", "dwanj", "dwanh", "dwad", "dwal", "dwalg", "dwalm", "dwalb", "dwals", "dwalt", "dwalp", "dwalh", "dwam", "dwab", "dwabs", "dwas", "dwass", "dwang", "dwaj", "dwac", "dwak", "dwat", "dwap", "dwah", "dwae", "dwaeg", "dwaegg", "dwaegs"], ["dwaen", "dwaenj", "dwaenh", "dwaed", "dwael", "dwaelg", "dwaelm", "dwaelb", "dwaels", "dwaelt", "dwaelp", "dwaelh", "dwaem", "dwaeb", "dwaebs", "dwaes", "dwaess", "dwaeng", "dwaej", "dwaec", "dwaek", "dwaet", "dwaep", "dwaeh", "doe", "doeg", "doegg", "doegs", "doen", "doenj", "doenh", "doed", "doel", "doelg", "doelm", "doelb", "doels", "doelt", "doelp", "doelh", "doem", "doeb", "doebs", "does", "doess", "doeng", "doej", "doec", "doek", "doet", "doep", "doeh", "dyo", "dyog", "dyogg", "dyogs", "dyon", "dyonj", "dyonh", "dyod", "dyol", "dyolg", "dyolm", "dyolb", "dyols", "dyolt", "dyolp", "dyolh", "dyom", "dyob", "dyobs", "dyos", "dyoss", "dyong", "dyoj", "dyoc", "dyok", "dyot", "dyop", "dyoh", "du", "dug", "dugg", "dugs", "dun", "dunj", "dunh", "dud", "dul", "dulg", "dulm", "dulb", "duls", "dult", "dulp", "dulh", "dum", "dub", "dubs", "dus", "duss", "dung", "duj", "duc", "duk", "dut", "dup", "duh", "dweo", "dweog", "dweogg", "dweogs", "dweon", "dweonj", "dweonh", "dweod", "dweol", "dweolg", "dweolm", "dweolb", "dweols", "dweolt", "dweolp", "dweolh", "dweom", "dweob", "dweobs", "dweos", "dweoss", "dweong", "dweoj", "dweoc", "dweok", "dweot", "dweop", "dweoh", "dwe", "dweg", "dwegg", "dwegs", "dwen", "dwenj", "dwenh", "dwed", "dwel", "dwelg", "dwelm", "dwelb", "dwels", "dwelt", "dwelp", "dwelh", "dwem", "dweb", "dwebs", "dwes", "dwess", "dweng", "dwej", "dwec", "dwek", "dwet", "dwep", "dweh", "dwi", "dwig", "dwigg", "dwigs", "dwin", "dwinj", "dwinh", "dwid", "dwil", "dwilg", "dwilm", "dwilb", "dwils", "dwilt", "dwilp", "dwilh", "dwim", "dwib", "dwibs", "dwis", "dwiss", "dwing", "dwij", "dwic", "dwik", "dwit", "dwip", "dwih", "dyu", "dyug", "dyugg", "dyugs", "dyun", "dyunj", "dyunh", "dyud", "dyul", "dyulg", "dyulm", "dyulb", "dyuls", "dyult", "dyulp", "dyulh", "dyum", "dyub", "dyubs", "dyus", "dyuss", "dyung", "dyuj", "dyuc", "dyuk", "dyut", "dyup", "dyuh", "deu", "deug", "deugg", "deugs", "deun", "deunj", "deunh", "deud", "deul", "deulg", "deulm", "deulb", "deuls", "deult", "deulp", "deulh", "deum", "deub", "deubs", "deus", "deuss", "deung", "deuj", "deuc", "deuk", "deut", "deup", "deuh", "dyi", "dyig", "dyigg", "dyigs", "dyin", "dyinj", "dyinh", "dyid"], ["dyil", "dyilg", "dyilm", "dyilb", "dyils", "dyilt", "dyilp", "dyilh", "dyim", "dyib", "dyibs", "dyis", "dyiss", "dying", "dyij", "dyic", "dyik", "dyit", "dyip", "dyih", "di", "dig", "digg", "digs", "din", "dinj", "dinh", "did", "dil", "dilg", "dilm", "dilb", "dils", "dilt", "dilp", "dilh", "dim", "dib", "dibs", "dis", "diss", "ding", "dij", "dic", "dik", "dit", "dip", "dih", "dda", "ddag", "ddagg", "ddags", "ddan", "ddanj", "ddanh", "ddad", "ddal", "ddalg", "ddalm", "ddalb", "ddals", "ddalt", "ddalp", "ddalh", "ddam", "ddab", "ddabs", "ddas", "ddass", "ddang", "ddaj", "ddac", "ddak", "ddat", "ddap", "ddah", "ddae", "ddaeg", "ddaegg", "ddaegs", "ddaen", "ddaenj", "ddaenh", "ddaed", "ddael", "ddaelg", "ddaelm", "ddaelb", "ddaels", "ddaelt", "ddaelp", "ddaelh", "ddaem", "ddaeb", "ddaebs", "ddaes", "ddaess", "ddaeng", "ddaej", "ddaec", "ddaek", "ddaet", "ddaep", "ddaeh", "ddya", "ddyag", "ddyagg", "ddyags", "ddyan", "ddyanj", "ddyanh", "ddyad", "ddyal", "ddyalg", "ddyalm", "ddyalb", "ddyals", "ddyalt", "ddyalp", "ddyalh", "ddyam", "ddyab", "ddyabs", "ddyas", "ddyass", "ddyang", "ddyaj", "ddyac", "ddyak", "ddyat", "ddyap", "ddyah", "ddyae", "ddyaeg", "ddyaegg", "ddyaegs", "ddyaen", "ddyaenj", "ddyaenh", "ddyaed", "ddyael", "ddyaelg", "ddyaelm", "ddyaelb", "ddyaels", "ddyaelt", "ddyaelp", "ddyaelh", "ddyaem", "ddyaeb", "ddyaebs", "ddyaes", "ddyaess", "ddyaeng", "ddyaej", "ddyaec", "ddyaek", "ddyaet", "ddyaep", "ddyaeh", "ddeo", "ddeog", "ddeogg", "ddeogs", "ddeon", "ddeonj", "ddeonh", "ddeod", "ddeol", "ddeolg", "ddeolm", "ddeolb", "ddeols", "ddeolt", "ddeolp", "ddeolh", "ddeom", "ddeob", "ddeobs", "ddeos", "ddeoss", "ddeong", "ddeoj", "ddeoc", "ddeok", "ddeot", "ddeop", "ddeoh", "dde", "ddeg", "ddegg", "ddegs", "dden", "ddenj", "ddenh", "dded", "ddel", "ddelg", "ddelm", "ddelb", "ddels", "ddelt", "ddelp", "ddelh", "ddem", "ddeb", "ddebs", "ddes", "ddess", "ddeng", "ddej", "ddec", "ddek", "ddet", "ddep", "ddeh", "ddyeo", "ddyeog", "ddyeogg", "ddyeogs", "ddyeon", "ddyeonj", "ddyeonh", "ddyeod", "ddyeol", "ddyeolg", "ddyeolm", "ddyeolb", "ddyeols", "ddyeolt", "ddyeolp", "ddyeolh", "ddyeom", "ddyeob", "ddyeobs", "ddyeos", "ddyeoss", "ddyeong", "ddyeoj", "ddyeoc", "ddyeok", "ddyeot", "ddyeop", "ddyeoh", "ddye", "ddyeg", "ddyegg", "ddyegs", "ddyen", "ddyenj", "ddyenh", "ddyed", "ddyel", "ddyelg", "ddyelm", "ddyelb"], ["ddyels", "ddyelt", "ddyelp", "ddyelh", "ddyem", "ddyeb", "ddyebs", "ddyes", "ddyess", "ddyeng", "ddyej", "ddyec", "ddyek", "ddyet", "ddyep", "ddyeh", "ddo", "ddog", "ddogg", "ddogs", "ddon", "ddonj", "ddonh", "ddod", "ddol", "ddolg", "ddolm", "ddolb", "ddols", "ddolt", "ddolp", "ddolh", "ddom", "ddob", "ddobs", "ddos", "ddoss", "ddong", "ddoj", "ddoc", "ddok", "ddot", "ddop", "ddoh", "ddwa", "ddwag", "ddwagg", "ddwags", "ddwan", "ddwanj", "ddwanh", "ddwad", "ddwal", "ddwalg", "ddwalm", "ddwalb", "ddwals", "ddwalt", "ddwalp", "ddwalh", "ddwam", "ddwab", "ddwabs", "ddwas", "ddwass", "ddwang", "ddwaj", "ddwac", "ddwak", "ddwat", "ddwap", "ddwah", "ddwae", "ddwaeg", "ddwaegg", "ddwaegs", "ddwaen", "ddwaenj", "ddwaenh", "ddwaed", "ddwael", "ddwaelg", "ddwaelm", "ddwaelb", "ddwaels", "ddwaelt", "ddwaelp", "ddwaelh", "ddwaem", "ddwaeb", "ddwaebs", "ddwaes", "ddwaess", "ddwaeng", "ddwaej", "ddwaec", "ddwaek", "ddwaet", "ddwaep", "ddwaeh", "ddoe", "ddoeg", "ddoegg", "ddoegs", "ddoen", "ddoenj", "ddoenh", "ddoed", "ddoel", "ddoelg", "ddoelm", "ddoelb", "ddoels", "ddoelt", "ddoelp", "ddoelh", "ddoem", "ddoeb", "ddoebs", "ddoes", "ddoess", "ddoeng", "ddoej", "ddoec", "ddoek", "ddoet", "ddoep", "ddoeh", "ddyo", "ddyog", "ddyogg", "ddyogs", "ddyon", "ddyonj", "ddyonh", "ddyod", "ddyol", "ddyolg", "ddyolm", "ddyolb", "ddyols", "ddyolt", "ddyolp", "ddyolh", "ddyom", "ddyob", "ddyobs", "ddyos", "ddyoss", "ddyong", "ddyoj", "ddyoc", "ddyok", "ddyot", "ddyop", "ddyoh", "ddu", "ddug", "ddugg", "ddugs", "ddun", "ddunj", "ddunh", "ddud", "ddul", "ddulg", "ddulm", "ddulb", "dduls", "ddult", "ddulp", "ddulh", "ddum", "ddub", "ddubs", "ddus", "dduss", "ddung", "dduj", "dduc", "dduk", "ddut", "ddup", "dduh", "ddweo", "ddweog", "ddweogg", "ddweogs", "ddweon", "ddweonj", "ddweonh", "ddweod", "ddweol", "ddweolg", "ddweolm", "ddweolb", "ddweols", "ddweolt", "ddweolp", "ddweolh", "ddweom", "ddweob", "ddweobs", "ddweos", "ddweoss", "ddweong", "ddweoj", "ddweoc", "ddweok", "ddweot", "ddweop", "ddweoh", "ddwe", "ddweg", "ddwegg", "ddwegs", "ddwen", "ddwenj", "ddwenh", "ddwed", "ddwel", "ddwelg", "ddwelm", "ddwelb", "ddwels", "ddwelt", "ddwelp", "ddwelh", "ddwem", "ddweb", "ddwebs", "ddwes", "ddwess", "ddweng", "ddwej", "ddwec", "ddwek", "ddwet", "ddwep", "ddweh", "ddwi", "ddwig", "ddwigg", "ddwigs", "ddwin", "ddwinj", "ddwinh", "ddwid", "ddwil", "ddwilg", "ddwilm", "ddwilb", "ddwils", "ddwilt", "ddwilp", "ddwilh"], ["ddwim", "ddwib", "ddwibs", "ddwis", "ddwiss", "ddwing", "ddwij", "ddwic", "ddwik", "ddwit", "ddwip", "ddwih", "ddyu", "ddyug", "ddyugg", "ddyugs", "ddyun", "ddyunj", "ddyunh", "ddyud", "ddyul", "ddyulg", "ddyulm", "ddyulb", "ddyuls", "ddyult", "ddyulp", "ddyulh", "ddyum", "ddyub", "ddyubs", "ddyus", "ddyuss", "ddyung", "ddyuj", "ddyuc", "ddyuk", "ddyut", "ddyup", "ddyuh", "ddeu", "ddeug", "ddeugg", "ddeugs", "ddeun", "ddeunj", "ddeunh", "ddeud", "ddeul", "ddeulg", "ddeulm", "ddeulb", "ddeuls", "ddeult", "ddeulp", "ddeulh", "ddeum", "ddeub", "ddeubs", "ddeus", "ddeuss", "ddeung", "ddeuj", "ddeuc", "ddeuk", "ddeut", "ddeup", "ddeuh", "ddyi", "ddyig", "ddyigg", "ddyigs", "ddyin", "ddyinj", "ddyinh", "ddyid", "ddyil", "ddyilg", "ddyilm", "ddyilb", "ddyils", "ddyilt", "ddyilp", "ddyilh", "ddyim", "ddyib", "ddyibs", "ddyis", "ddyiss", "ddying", "ddyij", "ddyic", "ddyik", "ddyit", "ddyip", "ddyih", "ddi", "ddig", "ddigg", "ddigs", "ddin", "ddinj", "ddinh", "ddid", "ddil", "ddilg", "ddilm", "ddilb", "ddils", "ddilt", "ddilp", "ddilh", "ddim", "ddib", "ddibs", "ddis", "ddiss", "dding", "ddij", "ddic", "ddik", "ddit", "ddip", "ddih", "ra", "rag", "ragg", "rags", "ran", "ranj", "ranh", "rad", "ral", "ralg", "ralm", "ralb", "rals", "ralt", "ralp", "ralh", "ram", "rab", "rabs", "ras", "rass", "rang", "raj", "rac", "rak", "rat", "rap", "rah", "rae", "raeg", "raegg", "raegs", "raen", "raenj", "raenh", "raed", "rael", "raelg", "raelm", "raelb", "raels", "raelt", "raelp", "raelh", "raem", "raeb", "raebs", "raes", "raess", "raeng", "raej", "raec", "raek", "raet", "raep", "raeh", "rya", "ryag", "ryagg", "ryags", "ryan", "ryanj", "ryanh", "ryad", "ryal", "ryalg", "ryalm", "ryalb", "ryals", "ryalt", "ryalp", "ryalh", "ryam", "ryab", "ryabs", "ryas", "ryass", "ryang", "ryaj", "ryac", "ryak", "ryat", "ryap", "ryah", "ryae", "ryaeg", "ryaegg", "ryaegs", "ryaen", "ryaenj", "ryaenh", "ryaed", "ryael", "ryaelg", "ryaelm", "ryaelb", "ryaels", "ryaelt", "ryaelp", "ryaelh", "ryaem", "ryaeb", "ryaebs", "ryaes", "ryaess", "ryaeng", "ryaej", "ryaec", "ryaek", "ryaet", "ryaep", "ryaeh", "reo", "reog", "reogg", "reogs", "reon", "reonj", "reonh", "reod", "reol", "reolg", "reolm", "reolb", "reols", "reolt", "reolp", "reolh", "reom", "reob", "reobs", "reos"], ["reoss", "reong", "reoj", "reoc", "reok", "reot", "reop", "reoh", "re", "reg", "regg", "regs", "ren", "renj", "renh", "red", "rel", "relg", "relm", "relb", "rels", "relt", "relp", "relh", "rem", "reb", "rebs", "res", "ress", "reng", "rej", "rec", "rek", "ret", "rep", "reh", "ryeo", "ryeog", "ryeogg", "ryeogs", "ryeon", "ryeonj", "ryeonh", "ryeod", "ryeol", "ryeolg", "ryeolm", "ryeolb", "ryeols", "ryeolt", "ryeolp", "ryeolh", "ryeom", "ryeob", "ryeobs", "ryeos", "ryeoss", "ryeong", "ryeoj", "ryeoc", "ryeok", "ryeot", "ryeop", "ryeoh", "rye", "ryeg", "ryegg", "ryegs", "ryen", "ryenj", "ryenh", "ryed", "ryel", "ryelg", "ryelm", "ryelb", "ryels", "ryelt", "ryelp", "ryelh", "ryem", "ryeb", "ryebs", "ryes", "ryess", "ryeng", "ryej", "ryec", "ryek", "ryet", "ryep", "ryeh", "ro", "rog", "rogg", "rogs", "ron", "ronj", "ronh", "rod", "rol", "rolg", "rolm", "rolb", "rols", "rolt", "rolp", "rolh", "rom", "rob", "robs", "ros", "ross", "rong", "roj", "roc", "rok", "rot", "rop", "roh", "rwa", "rwag", "rwagg", "rwags", "rwan", "rwanj", "rwanh", "rwad", "rwal", "rwalg", "rwalm", "rwalb", "rwals", "rwalt", "rwalp", "rwalh", "rwam", "rwab", "rwabs", "rwas", "rwass", "rwang", "rwaj", "rwac", "rwak", "rwat", "rwap", "rwah", "rwae", "rwaeg", "rwaegg", "rwaegs", "rwaen", "rwaenj", "rwaenh", "rwaed", "rwael", "rwaelg", "rwaelm", "rwaelb", "rwaels", "rwaelt", "rwaelp", "rwaelh", "rwaem", "rwaeb", "rwaebs", "rwaes", "rwaess", "rwaeng", "rwaej", "rwaec", "rwaek", "rwaet", "rwaep", "rwaeh", "roe", "roeg", "roegg", "roegs", "roen", "roenj", "roenh", "roed", "roel", "roelg", "roelm", "roelb", "roels", "roelt", "roelp", "roelh", "roem", "roeb", "roebs", "roes", "roess", "roeng", "roej", "roec", "roek", "roet", "roep", "roeh", "ryo", "ryog", "ryogg", "ryogs", "ryon", "ryonj", "ryonh", "ryod", "ryol", "ryolg", "ryolm", "ryolb", "ryols", "ryolt", "ryolp", "ryolh", "ryom", "ryob", "ryobs", "ryos", "ryoss", "ryong", "ryoj", "ryoc", "ryok", "ryot", "ryop", "ryoh", "ru", "rug", "rugg", "rugs", "run", "runj", "runh", "rud", "rul", "rulg", "rulm", "rulb", "ruls", "rult", "rulp", "rulh", "rum", "rub", "rubs", "rus", "russ", "rung", "ruj", "ruc"], ["ruk", "rut", "rup", "ruh", "rweo", "rweog", "rweogg", "rweogs", "rweon", "rweonj", "rweonh", "rweod", "rweol", "rweolg", "rweolm", "rweolb", "rweols", "rweolt", "rweolp", "rweolh", "rweom", "rweob", "rweobs", "rweos", "rweoss", "rweong", "rweoj", "rweoc", "rweok", "rweot", "rweop", "rweoh", "rwe", "rweg", "rwegg", "rwegs", "rwen", "rwenj", "rwenh", "rwed", "rwel", "rwelg", "rwelm", "rwelb", "rwels", "rwelt", "rwelp", "rwelh", "rwem", "rweb", "rwebs", "rwes", "rwess", "rweng", "rwej", "rwec", "rwek", "rwet", "rwep", "rweh", "rwi", "rwig", "rwigg", "rwigs", "rwin", "rwinj", "rwinh", "rwid", "rwil", "rwilg", "rwilm", "rwilb", "rwils", "rwilt", "rwilp", "rwilh", "rwim", "rwib", "rwibs", "rwis", "rwiss", "rwing", "rwij", "rwic", "rwik", "rwit", "rwip", "rwih", "ryu", "ryug", "ryugg", "ryugs", "ryun", "ryunj", "ryunh", "ryud", "ryul", "ryulg", "ryulm", "ryulb", "ryuls", "ryult", "ryulp", "ryulh", "ryum", "ryub", "ryubs", "ryus", "ryuss", "ryung", "ryuj", "ryuc", "ryuk", "ryut", "ryup", "ryuh", "reu", "reug", "reugg", "reugs", "reun", "reunj", "reunh", "reud", "reul", "reulg", "reulm", "reulb", "reuls", "reult", "reulp", "reulh", "reum", "reub", "reubs", "reus", "reuss", "reung", "reuj", "reuc", "reuk", "reut", "reup", "reuh", "ryi", "ryig", "ryigg", "ryigs", "ryin", "ryinj", "ryinh", "ryid", "ryil", "ryilg", "ryilm", "ryilb", "ryils", "ryilt", "ryilp", "ryilh", "ryim", "ryib", "ryibs", "ryis", "ryiss", "rying", "ryij", "ryic", "ryik", "ryit", "ryip", "ryih", "ri", "rig", "rigg", "rigs", "rin", "rinj", "rinh", "rid", "ril", "rilg", "rilm", "rilb", "rils", "rilt", "rilp", "rilh", "rim", "rib", "ribs", "ris", "riss", "ring", "rij", "ric", "rik", "rit", "rip", "rih", "ma", "mag", "magg", "mags", "man", "manj", "manh", "mad", "mal", "malg", "malm", "malb", "mals", "malt", "malp", "malh", "mam", "mab", "mabs", "mas", "mass", "mang", "maj", "mac", "mak", "mat", "map", "mah", "mae", "maeg", "maegg", "maegs", "maen", "maenj", "maenh", "maed", "mael", "maelg", "maelm", "maelb", "maels", "maelt", "maelp", "maelh", "maem", "maeb", "maebs", "maes", "maess", "maeng", "maej", "maec", "maek", "maet", "maep", "maeh"], ["mya", "myag", "myagg", "myags", "myan", "myanj", "myanh", "myad", "myal", "myalg", "myalm", "myalb", "myals", "myalt", "myalp", "myalh", "myam", "myab", "myabs", "myas", "myass", "myang", "myaj", "myac", "myak", "myat", "myap", "myah", "myae", "myaeg", "myaegg", "myaegs", "myaen", "myaenj", "myaenh", "myaed", "myael", "myaelg", "myaelm", "myaelb", "myaels", "myaelt", "myaelp", "myaelh", "myaem", "myaeb", "myaebs", "myaes", "myaess", "myaeng", "myaej", "myaec", "myaek", "myaet", "myaep", "myaeh", "meo", "meog", "meogg", "meogs", "meon", "meonj", "meonh", "meod", "meol", "meolg", "meolm", "meolb", "meols", "meolt", "meolp", "meolh", "meom", "meob", "meobs", "meos", "meoss", "meong", "meoj", "meoc", "meok", "meot", "meop", "meoh", "me", "meg", "megg", "megs", "men", "menj", "menh", "med", "mel", "melg", "melm", "melb", "mels", "melt", "melp", "melh", "mem", "meb", "mebs", "mes", "mess", "meng", "mej", "mec", "mek", "met", "mep", "meh", "myeo", "myeog", "myeogg", "myeogs", "myeon", "myeonj", "myeonh", "myeod", "myeol", "myeolg", "myeolm", "myeolb", "myeols", "myeolt", "myeolp", "myeolh", "myeom", "myeob", "myeobs", "myeos", "myeoss", "myeong", "myeoj", "myeoc", "myeok", "myeot", "myeop", "myeoh", "mye", "myeg", "myegg", "myegs", "myen", "myenj", "myenh", "myed", "myel", "myelg", "myelm", "myelb", "myels", "myelt", "myelp", "myelh", "myem", "myeb", "myebs", "myes", "myess", "myeng", "myej", "myec", "myek", "myet", "myep", "myeh", "mo", "mog", "mogg", "mogs", "mon", "monj", "monh", "mod", "mol", "molg", "molm", "molb", "mols", "molt", "molp", "molh", "mom", "mob", "mobs", "mos", "moss", "mong", "moj", "moc", "mok", "mot", "mop", "moh", "mwa", "mwag", "mwagg", "mwags", "mwan", "mwanj", "mwanh", "mwad", "mwal", "mwalg", "mwalm", "mwalb", "mwals", "mwalt", "mwalp", "mwalh", "mwam", "mwab", "mwabs", "mwas", "mwass", "mwang", "mwaj", "mwac", "mwak", "mwat", "mwap", "mwah", "mwae", "mwaeg", "mwaegg", "mwaegs", "mwaen", "mwaenj", "mwaenh", "mwaed", "mwael", "mwaelg", "mwaelm", "mwaelb", "mwaels", "mwaelt", "mwaelp", "mwaelh", "mwaem", "mwaeb", "mwaebs", "mwaes", "mwaess", "mwaeng", "mwaej", "mwaec", "mwaek", "mwaet", "mwaep", "mwaeh", "moe", "moeg", "moegg", "moegs"], ["moen", "moenj", "moenh", "moed", "moel", "moelg", "moelm", "moelb", "moels", "moelt", "moelp", "moelh", "moem", "moeb", "moebs", "moes", "moess", "moeng", "moej", "moec", "moek", "moet", "moep", "moeh", "myo", "myog", "myogg", "myogs", "myon", "myonj", "myonh", "myod", "myol", "myolg", "myolm", "myolb", "myols", "myolt", "myolp", "myolh", "myom", "myob", "myobs", "myos", "myoss", "myong", "myoj", "myoc", "myok", "myot", "myop", "myoh", "mu", "mug", "mugg", "mugs", "mun", "munj", "munh", "mud", "mul", "mulg", "mulm", "mulb", "muls", "mult", "mulp", "mulh", "mum", "mub", "mubs", "mus", "muss", "mung", "muj", "muc", "muk", "mut", "mup", "muh", "mweo", "mweog", "mweogg", "mweogs", "mweon", "mweonj", "mweonh", "mweod", "mweol", "mweolg", "mweolm", "mweolb", "mweols", "mweolt", "mweolp", "mweolh", "mweom", "mweob", "mweobs", "mweos", "mweoss", "mweong", "mweoj", "mweoc", "mweok", "mweot", "mweop", "mweoh", "mwe", "mweg", "mwegg", "mwegs", "mwen", "mwenj", "mwenh", "mwed", "mwel", "mwelg", "mwelm", "mwelb", "mwels", "mwelt", "mwelp", "mwelh", "mwem", "mweb", "mwebs", "mwes", "mwess", "mweng", "mwej", "mwec", "mwek", "mwet", "mwep", "mweh", "mwi", "mwig", "mwigg", "mwigs", "mwin", "mwinj", "mwinh", "mwid", "mwil", "mwilg", "mwilm", "mwilb", "mwils", "mwilt", "mwilp", "mwilh", "mwim", "mwib", "mwibs", "mwis", "mwiss", "mwing", "mwij", "mwic", "mwik", "mwit", "mwip", "mwih", "myu", "myug", "myugg", "myugs", "myun", "myunj", "myunh", "myud", "myul", "myulg", "myulm", "myulb", "myuls", "myult", "myulp", "myulh", "myum", "myub", "myubs", "myus", "myuss", "myung", "myuj", "myuc", "myuk", "myut", "myup", "myuh", "meu", "meug", "meugg", "meugs", "meun", "meunj", "meunh", "meud", "meul", "meulg", "meulm", "meulb", "meuls", "meult", "meulp", "meulh", "meum", "meub", "meubs", "meus", "meuss", "meung", "meuj", "meuc", "meuk", "meut", "meup", "meuh", "myi", "myig", "myigg", "myigs", "myin", "myinj", "myinh", "myid", "myil", "myilg", "myilm", "myilb", "myils", "myilt", "myilp", "myilh", "myim", "myib", "myibs", "myis", "myiss", "mying", "myij", "myic", "myik", "myit", "myip", "myih", "mi", "mig", "migg", "migs", "min", "minj", "minh", "mid"], ["mil", "milg", "milm", "milb", "mils", "milt", "milp", "milh", "mim", "mib", "mibs", "mis", "miss", "ming", "mij", "mic", "mik", "mit", "mip", "mih", "ba", "bag", "bagg", "bags", "ban", "banj", "banh", "bad", "bal", "balg", "balm", "balb", "bals", "balt", "balp", "balh", "bam", "bab", "babs", "bas", "bass", "bang", "baj", "bac", "bak", "bat", "bap", "bah", "bae", "baeg", "baegg", "baegs", "baen", "baenj", "baenh", "baed", "bael", "baelg", "baelm", "baelb", "baels", "baelt", "baelp", "baelh", "baem", "baeb", "baebs", "baes", "baess", "baeng", "baej", "baec", "baek", "baet", "baep", "baeh", "bya", "byag", "byagg", "byags", "byan", "byanj", "byanh", "byad", "byal", "byalg", "byalm", "byalb", "byals", "byalt", "byalp", "byalh", "byam", "byab", "byabs", "byas", "byass", "byang", "byaj", "byac", "byak", "byat", "byap", "byah", "byae", "byaeg", "byaegg", "byaegs", "byaen", "byaenj", "byaenh", "byaed", "byael", "byaelg", "byaelm", "byaelb", "byaels", "byaelt", "byaelp", "byaelh", "byaem", "byaeb", "byaebs", "byaes", "byaess", "byaeng", "byaej", "byaec", "byaek", "byaet", "byaep", "byaeh", "beo", "beog", "beogg", "beogs", "beon", "beonj", "beonh", "beod", "beol", "beolg", "beolm", "beolb", "beols", "beolt", "beolp", "beolh", "beom", "beob", "beobs", "beos", "beoss", "beong", "beoj", "beoc", "beok", "beot", "beop", "beoh", "be", "beg", "begg", "begs", "ben", "benj", "benh", "bed", "bel", "belg", "belm", "belb", "bels", "belt", "belp", "belh", "bem", "beb", "bebs", "bes", "bess", "beng", "bej", "bec", "bek", "bet", "bep", "beh", "byeo", "byeog", "byeogg", "byeogs", "byeon", "byeonj", "byeonh", "byeod", "byeol", "byeolg", "byeolm", "byeolb", "byeols", "byeolt", "byeolp", "byeolh", "byeom", "byeob", "byeobs", "byeos", "byeoss", "byeong", "byeoj", "byeoc", "byeok", "byeot", "byeop", "byeoh", "bye", "byeg", "byegg", "byegs", "byen", "byenj", "byenh", "byed", "byel", "byelg", "byelm", "byelb", "byels", "byelt", "byelp", "byelh", "byem", "byeb", "byebs", "byes", "byess", "byeng", "byej", "byec", "byek", "byet", "byep", "byeh", "bo", "bog", "bogg", "bogs", "bon", "bonj", "bonh", "bod", "bol", "bolg", "bolm", "bolb"], ["bols", "bolt", "bolp", "bolh", "bom", "bob", "bobs", "bos", "boss", "bong", "boj", "boc", "bok", "bot", "bop", "boh", "bwa", "bwag", "bwagg", "bwags", "bwan", "bwanj", "bwanh", "bwad", "bwal", "bwalg", "bwalm", "bwalb", "bwals", "bwalt", "bwalp", "bwalh", "bwam", "bwab", "bwabs", "bwas", "bwass", "bwang", "bwaj", "bwac", "bwak", "bwat", "bwap", "bwah", "bwae", "bwaeg", "bwaegg", "bwaegs", "bwaen", "bwaenj", "bwaenh", "bwaed", "bwael", "bwaelg", "bwaelm", "bwaelb", "bwaels", "bwaelt", "bwaelp", "bwaelh", "bwaem", "bwaeb", "bwaebs", "bwaes", "bwaess", "bwaeng", "bwaej", "bwaec", "bwaek", "bwaet", "bwaep", "bwaeh", "boe", "boeg", "boegg", "boegs", "boen", "boenj", "boenh", "boed", "boel", "boelg", "boelm", "boelb", "boels", "boelt", "boelp", "boelh", "boem", "boeb", "boebs", "boes", "boess", "boeng", "boej", "boec", "boek", "boet", "boep", "boeh", "byo", "byog", "byogg", "byogs", "byon", "byonj", "byonh", "byod", "byol", "byolg", "byolm", "byolb", "byols", "byolt", "byolp", "byolh", "byom", "byob", "byobs", "byos", "byoss", "byong", "byoj", "byoc", "byok", "byot", "byop", "byoh", "bu", "bug", "bugg", "bugs", "bun", "bunj", "bunh", "bud", "bul", "bulg", "bulm", "bulb", "buls", "bult", "bulp", "bulh", "bum", "bub", "bubs", "bus", "buss", "bung", "buj", "buc", "buk", "but", "bup", "buh", "bweo", "bweog", "bweogg", "bweogs", "bweon", "bweonj", "bweonh", "bweod", "bweol", "bweolg", "bweolm", "bweolb", "bweols", "bweolt", "bweolp", "bweolh", "bweom", "bweob", "bweobs", "bweos", "bweoss", "bweong", "bweoj", "bweoc", "bweok", "bweot", "bweop", "bweoh", "bwe", "bweg", "bwegg", "bwegs", "bwen", "bwenj", "bwenh", "bwed", "bwel", "bwelg", "bwelm", "bwelb", "bwels", "bwelt", "bwelp", "bwelh", "bwem", "bweb", "bwebs", "bwes", "bwess", "bweng", "bwej", "bwec", "bwek", "bwet", "bwep", "bweh", "bwi", "bwig", "bwigg", "bwigs", "bwin", "bwinj", "bwinh", "bwid", "bwil", "bwilg", "bwilm", "bwilb", "bwils", "bwilt", "bwilp", "bwilh", "bwim", "bwib", "bwibs", "bwis", "bwiss", "bwing", "bwij", "bwic", "bwik", "bwit", "bwip", "bwih", "byu", "byug", "byugg", "byugs", "byun", "byunj", "byunh", "byud", "byul", "byulg", "byulm", "byulb", "byuls", "byult", "byulp", "byulh"], ["byum", "byub", "byubs", "byus", "byuss", "byung", "byuj", "byuc", "byuk", "byut", "byup", "byuh", "beu", "beug", "beugg", "beugs", "beun", "beunj", "beunh", "beud", "beul", "beulg", "beulm", "beulb", "beuls", "beult", "beulp", "beulh", "beum", "beub", "beubs", "beus", "beuss", "beung", "beuj", "beuc", "beuk", "beut", "beup", "beuh", "byi", "byig", "byigg", "byigs", "byin", "byinj", "byinh", "byid", "byil", "byilg", "byilm", "byilb", "byils", "byilt", "byilp", "byilh", "byim", "byib", "byibs", "byis", "byiss", "bying", "byij", "byic", "byik", "byit", "byip", "byih", "bi", "big", "bigg", "bigs", "bin", "binj", "binh", "bid", "bil", "bilg", "bilm", "bilb", "bils", "bilt", "bilp", "bilh", "bim", "bib", "bibs", "bis", "biss", "bing", "bij", "bic", "bik", "bit", "bip", "bih", "bba", "bbag", "bbagg", "bbags", "bban", "bbanj", "bbanh", "bbad", "bbal", "bbalg", "bbalm", "bbalb", "bbals", "bbalt", "bbalp", "bbalh", "bbam", "bbab", "bbabs", "bbas", "bbass", "bbang", "bbaj", "bbac", "bbak", "bbat", "bbap", "bbah", "bbae", "bbaeg", "bbaegg", "bbaegs", "bbaen", "bbaenj", "bbaenh", "bbaed", "bbael", "bbaelg", "bbaelm", "bbaelb", "bbaels", "bbaelt", "bbaelp", "bbaelh", "bbaem", "bbaeb", "bbaebs", "bbaes", "bbaess", "bbaeng", "bbaej", "bbaec", "bbaek", "bbaet", "bbaep", "bbaeh", "bbya", "bbyag", "bbyagg", "bbyags", "bbyan", "bbyanj", "bbyanh", "bbyad", "bbyal", "bbyalg", "bbyalm", "bbyalb", "bbyals", "bbyalt", "bbyalp", "bbyalh", "bbyam", "bbyab", "bbyabs", "bbyas", "bbyass", "bbyang", "bbyaj", "bbyac", "bbyak", "bbyat", "bbyap", "bbyah", "bbyae", "bbyaeg", "bbyaegg", "bbyaegs", "bbyaen", "bbyaenj", "bbyaenh", "bbyaed", "bbyael", "bbyaelg", "bbyaelm", "bbyaelb", "bbyaels", "bbyaelt", "bbyaelp", "bbyaelh", "bbyaem", "bbyaeb", "bbyaebs", "bbyaes", "bbyaess", "bbyaeng", "bbyaej", "bbyaec", "bbyaek", "bbyaet", "bbyaep", "bbyaeh", "bbeo", "bbeog", "bbeogg", "bbeogs", "bbeon", "bbeonj", "bbeonh", "bbeod", "bbeol", "bbeolg", "bbeolm", "bbeolb", "bbeols", "bbeolt", "bbeolp", "bbeolh", "bbeom", "bbeob", "bbeobs", "bbeos", "bbeoss", "bbeong", "bbeoj", "bbeoc", "bbeok", "bbeot", "bbeop", "bbeoh", "bbe", "bbeg", "bbegg", "bbegs", "bben", "bbenj", "bbenh", "bbed", "bbel", "bbelg", "bbelm", "bbelb", "bbels", "bbelt", "bbelp", "bbelh", "bbem", "bbeb", "bbebs", "bbes"], ["bbess", "bbeng", "bbej", "bbec", "bbek", "bbet", "bbep", "bbeh", "bbyeo", "bbyeog", "bbyeogg", "bbyeogs", "bbyeon", "bbyeonj", "bbyeonh", "bbyeod", "bbyeol", "bbyeolg", "bbyeolm", "bbyeolb", "bbyeols", "bbyeolt", "bbyeolp", "bbyeolh", "bbyeom", "bbyeob", "bbyeobs", "bbyeos", "bbyeoss", "bbyeong", "bbyeoj", "bbyeoc", "bbyeok", "bbyeot", "bbyeop", "bbyeoh", "bbye", "bbyeg", "bbyegg", "bbyegs", "bbyen", "bbyenj", "bbyenh", "bbyed", "bbyel", "bbyelg", "bbyelm", "bbyelb", "bbyels", "bbyelt", "bbyelp", "bbyelh", "bbyem", "bbyeb", "bbyebs", "bbyes", "bbyess", "bbyeng", "bbyej", "bbyec", "bbyek", "bbyet", "bbyep", "bbyeh", "bbo", "bbog", "bbogg", "bbogs", "bbon", "bbonj", "bbonh", "bbod", "bbol", "bbolg", "bbolm", "bbolb", "bbols", "bbolt", "bbolp", "bbolh", "bbom", "bbob", "bbobs", "bbos", "bboss", "bbong", "bboj", "bboc", "bbok", "bbot", "bbop", "bboh", "bbwa", "bbwag", "bbwagg", "bbwags", "bbwan", "bbwanj", "bbwanh", "bbwad", "bbwal", "bbwalg", "bbwalm", "bbwalb", "bbwals", "bbwalt", "bbwalp", "bbwalh", "bbwam", "bbwab", "bbwabs", "bbwas", "bbwass", "bbwang", "bbwaj", "bbwac", "bbwak", "bbwat", "bbwap", "bbwah", "bbwae", "bbwaeg", "bbwaegg", "bbwaegs", "bbwaen", "bbwaenj", "bbwaenh", "bbwaed", "bbwael", "bbwaelg", "bbwaelm", "bbwaelb", "bbwaels", "bbwaelt", "bbwaelp", "bbwaelh", "bbwaem", "bbwaeb", "bbwaebs", "bbwaes", "bbwaess", "bbwaeng", "bbwaej", "bbwaec", "bbwaek", "bbwaet", "bbwaep", "bbwaeh", "bboe", "bboeg", "bboegg", "bboegs", "bboen", "bboenj", "bboenh", "bboed", "bboel", "bboelg", "bboelm", "bboelb", "bboels", "bboelt", "bboelp", "bboelh", "bboem", "bboeb", "bboebs", "bboes", "bboess", "bboeng", "bboej", "bboec", "bboek", "bboet", "bboep", "bboeh", "bbyo", "bbyog", "bbyogg", "bbyogs", "bbyon", "bbyonj", "bbyonh", "bbyod", "bbyol", "bbyolg", "bbyolm", "bbyolb", "bbyols", "bbyolt", "bbyolp", "bbyolh", "bbyom", "bbyob", "bbyobs", "bbyos", "bbyoss", "bbyong", "bbyoj", "bbyoc", "bbyok", "bbyot", "bbyop", "bbyoh", "bbu", "bbug", "bbugg", "bbugs", "bbun", "bbunj", "bbunh", "bbud", "bbul", "bbulg", "bbulm", "bbulb", "bbuls", "bbult", "bbulp", "bbulh", "bbum", "bbub", "bbubs", "bbus", "bbuss", "bbung", "bbuj", "bbuc", "bbuk", "bbut", "bbup", "bbuh", "bbweo", "bbweog", "bbweogg", "bbweogs", "bbweon", "bbweonj", "bbweonh", "bbweod", "bbweol", "bbweolg", "bbweolm", "bbweolb", "bbweols", "bbweolt", "bbweolp", "bbweolh", "bbweom", "bbweob", "bbweobs", "bbweos", "bbweoss", "bbweong", "bbweoj", "bbweoc"], ["bbweok", "bbweot", "bbweop", "bbweoh", "bbwe", "bbweg", "bbwegg", "bbwegs", "bbwen", "bbwenj", "bbwenh", "bbwed", "bbwel", "bbwelg", "bbwelm", "bbwelb", "bbwels", "bbwelt", "bbwelp", "bbwelh", "bbwem", "bbweb", "bbwebs", "bbwes", "bbwess", "bbweng", "bbwej", "bbwec", "bbwek", "bbwet", "bbwep", "bbweh", "bbwi", "bbwig", "bbwigg", "bbwigs", "bbwin", "bbwinj", "bbwinh", "bbwid", "bbwil", "bbwilg", "bbwilm", "bbwilb", "bbwils", "bbwilt", "bbwilp", "bbwilh", "bbwim", "bbwib", "bbwibs", "bbwis", "bbwiss", "bbwing", "bbwij", "bbwic", "bbwik", "bbwit", "bbwip", "bbwih", "bbyu", "bbyug", "bbyugg", "bbyugs", "bbyun", "bbyunj", "bbyunh", "bbyud", "bbyul", "bbyulg", "bbyulm", "bbyulb", "bbyuls", "bbyult", "bbyulp", "bbyulh", "bbyum", "bbyub", "bbyubs", "bbyus", "bbyuss", "bbyung", "bbyuj", "bbyuc", "bbyuk", "bbyut", "bbyup", "bbyuh", "bbeu", "bbeug", "bbeugg", "bbeugs", "bbeun", "bbeunj", "bbeunh", "bbeud", "bbeul", "bbeulg", "bbeulm", "bbeulb", "bbeuls", "bbeult", "bbeulp", "bbeulh", "bbeum", "bbeub", "bbeubs", "bbeus", "bbeuss", "bbeung", "bbeuj", "bbeuc", "bbeuk", "bbeut", "bbeup", "bbeuh", "bbyi", "bbyig", "bbyigg", "bbyigs", "bbyin", "bbyinj", "bbyinh", "bbyid", "bbyil", "bbyilg", "bbyilm", "bbyilb", "bbyils", "bbyilt", "bbyilp", "bbyilh", "bbyim", "bbyib", "bbyibs", "bbyis", "bbyiss", "bbying", "bbyij", "bbyic", "bbyik", "bbyit", "bbyip", "bbyih", "bbi", "bbig", "bbigg", "bbigs", "bbin", "bbinj", "bbinh", "bbid", "bbil", "bbilg", "bbilm", "bbilb", "bbils", "bbilt", "bbilp", "bbilh", "bbim", "bbib", "bbibs", "bbis", "bbiss", "bbing", "bbij", "bbic", "bbik", "bbit", "bbip", "bbih", "sa", "sag", "sagg", "sags", "san", "sanj", "sanh", "sad", "sal", "salg", "salm", "salb", "sals", "salt", "salp", "salh", "sam", "sab", "sabs", "sas", "sass", "sang", "saj", "sac", "sak", "sat", "sap", "sah", "sae", "saeg", "saegg", "saegs", "saen", "saenj", "saenh", "saed", "sael", "saelg", "saelm", "saelb", "saels", "saelt", "saelp", "saelh", "saem", "saeb", "saebs", "saes", "saess", "saeng", "saej", "saec", "saek", "saet", "saep", "saeh", "sya", "syag", "syagg", "syags", "syan", "syanj", "syanh", "syad", "syal", "syalg", "syalm", "syalb", "syals", "syalt", "syalp", "syalh", "syam", "syab", "syabs", "syas", "syass", "syang", "syaj", "syac", "syak", "syat", "syap", "syah"], ["syae", "syaeg", "syaegg", "syaegs", "syaen", "syaenj", "syaenh", "syaed", "syael", "syaelg", "syaelm", "syaelb", "syaels", "syaelt", "syaelp", "syaelh", "syaem", "syaeb", "syaebs", "syaes", "syaess", "syaeng", "syaej", "syaec", "syaek", "syaet", "syaep", "syaeh", "seo", "seog", "seogg", "seogs", "seon", "seonj", "seonh", "seod", "seol", "seolg", "seolm", "seolb", "seols", "seolt", "seolp", "seolh", "seom", "seob", "seobs", "seos", "seoss", "seong", "seoj", "seoc", "seok", "seot", "seop", "seoh", "se", "seg", "segg", "segs", "sen", "senj", "senh", "sed", "sel", "selg", "selm", "selb", "sels", "selt", "selp", "selh", "sem", "seb", "sebs", "ses", "sess", "seng", "sej", "sec", "sek", "set", "sep", "seh", "syeo", "syeog", "syeogg", "syeogs", "syeon", "syeonj", "syeonh", "syeod", "syeol", "syeolg", "syeolm", "syeolb", "syeols", "syeolt", "syeolp", "syeolh", "syeom", "syeob", "syeobs", "syeos", "syeoss", "syeong", "syeoj", "syeoc", "syeok", "syeot", "syeop", "syeoh", "sye", "syeg", "syegg", "syegs", "syen", "syenj", "syenh", "syed", "syel", "syelg", "syelm", "syelb", "syels", "syelt", "syelp", "syelh", "syem", "syeb", "syebs", "syes", "syess", "syeng", "syej", "syec", "syek", "syet", "syep", "syeh", "so", "sog", "sogg", "sogs", "son", "sonj", "sonh", "sod", "sol", "solg", "solm", "solb", "sols", "solt", "solp", "solh", "som", "sob", "sobs", "sos", "soss", "song", "soj", "soc", "sok", "sot", "sop", "soh", "swa", "swag", "swagg", "swags", "swan", "swanj", "swanh", "swad", "swal", "swalg", "swalm", "swalb", "swals", "swalt", "swalp", "swalh", "swam", "swab", "swabs", "swas", "swass", "swang", "swaj", "swac", "swak", "swat", "swap", "swah", "swae", "swaeg", "swaegg", "swaegs", "swaen", "swaenj", "swaenh", "swaed", "swael", "swaelg", "swaelm", "swaelb", "swaels", "swaelt", "swaelp", "swaelh", "swaem", "swaeb", "swaebs", "swaes", "swaess", "swaeng", "swaej", "swaec", "swaek", "swaet", "swaep", "swaeh", "soe", "soeg", "soegg", "soegs", "soen", "soenj", "soenh", "soed", "soel", "soelg", "soelm", "soelb", "soels", "soelt", "soelp", "soelh", "soem", "soeb", "soebs", "soes", "soess", "soeng", "soej", "soec", "soek", "soet", "soep", "soeh", "syo", "syog", "syogg", "syogs"], ["syon", "syonj", "syonh", "syod", "syol", "syolg", "syolm", "syolb", "syols", "syolt", "syolp", "syolh", "syom", "syob", "syobs", "syos", "syoss", "syong", "syoj", "syoc", "syok", "syot", "syop", "syoh", "su", "sug", "sugg", "sugs", "sun", "sunj", "sunh", "sud", "sul", "sulg", "sulm", "sulb", "suls", "sult", "sulp", "sulh", "sum", "sub", "subs", "sus", "suss", "sung", "suj", "suc", "suk", "sut", "sup", "suh", "sweo", "sweog", "sweogg", "sweogs", "sweon", "sweonj", "sweonh", "sweod", "sweol", "sweolg", "sweolm", "sweolb", "sweols", "sweolt", "sweolp", "sweolh", "sweom", "sweob", "sweobs", "sweos", "sweoss", "sweong", "sweoj", "sweoc", "sweok", "sweot", "sweop", "sweoh", "swe", "sweg", "swegg", "swegs", "swen", "swenj", "swenh", "swed", "swel", "swelg", "swelm", "swelb", "swels", "swelt", "swelp", "swelh", "swem", "sweb", "swebs", "swes", "swess", "sweng", "swej", "swec", "swek", "swet", "swep", "sweh", "swi", "swig", "swigg", "swigs", "swin", "swinj", "swinh", "swid", "swil", "swilg", "swilm", "swilb", "swils", "swilt", "swilp", "swilh", "swim", "swib", "swibs", "swis", "swiss", "swing", "swij", "swic", "swik", "swit", "swip", "swih", "syu", "syug", "syugg", "syugs", "syun", "syunj", "syunh", "syud", "syul", "syulg", "syulm", "syulb", "syuls", "syult", "syulp", "syulh", "syum", "syub", "syubs", "syus", "syuss", "syung", "syuj", "syuc", "syuk", "syut", "syup", "syuh", "seu", "seug", "seugg", "seugs", "seun", "seunj", "seunh", "seud", "seul", "seulg", "seulm", "seulb", "seuls", "seult", "seulp", "seulh", "seum", "seub", "seubs", "seus", "seuss", "seung", "seuj", "seuc", "seuk", "seut", "seup", "seuh", "syi", "syig", "syigg", "syigs", "syin", "syinj", "syinh", "syid", "syil", "syilg", "syilm", "syilb", "syils", "syilt", "syilp", "syilh", "syim", "syib", "syibs", "syis", "syiss", "sying", "syij", "syic", "syik", "syit", "syip", "syih", "si", "sig", "sigg", "sigs", "sin", "sinj", "sinh", "sid", "sil", "silg", "silm", "silb", "sils", "silt", "silp", "silh", "sim", "sib", "sibs", "sis", "siss", "sing", "sij", "sic", "sik", "sit", "sip", "sih", "ssa", "ssag", "ssagg", "ssags", "ssan", "ssanj", "ssanh", "ssad"], ["ssal", "ssalg", "ssalm", "ssalb", "ssals", "ssalt", "ssalp", "ssalh", "ssam", "ssab", "ssabs", "ssas", "ssass", "ssang", "ssaj", "ssac", "ssak", "ssat", "ssap", "ssah", "ssae", "ssaeg", "ssaegg", "ssaegs", "ssaen", "ssaenj", "ssaenh", "ssaed", "ssael", "ssaelg", "ssaelm", "ssaelb", "ssaels", "ssaelt", "ssaelp", "ssaelh", "ssaem", "ssaeb", "ssaebs", "ssaes", "ssaess", "ssaeng", "ssaej", "ssaec", "ssaek", "ssaet", "ssaep", "ssaeh", "ssya", "ssyag", "ssyagg", "ssyags", "ssyan", "ssyanj", "ssyanh", "ssyad", "ssyal", "ssyalg", "ssyalm", "ssyalb", "ssyals", "ssyalt", "ssyalp", "ssyalh", "ssyam", "ssyab", "ssyabs", "ssyas", "ssyass", "ssyang", "ssyaj", "ssyac", "ssyak", "ssyat", "ssyap", "ssyah", "ssyae", "ssyaeg", "ssyaegg", "ssyaegs", "ssyaen", "ssyaenj", "ssyaenh", "ssyaed", "ssyael", "ssyaelg", "ssyaelm", "ssyaelb", "ssyaels", "ssyaelt", "ssyaelp", "ssyaelh", "ssyaem", "ssyaeb", "ssyaebs", "ssyaes", "ssyaess", "ssyaeng", "ssyaej", "ssyaec", "ssyaek", "ssyaet", "ssyaep", "ssyaeh", "sseo", "sseog", "sseogg", "sseogs", "sseon", "sseonj", "sseonh", "sseod", "sseol", "sseolg", "sseolm", "sseolb", "sseols", "sseolt", "sseolp", "sseolh", "sseom", "sseob", "sseobs", "sseos", "sseoss", "sseong", "sseoj", "sseoc", "sseok", "sseot", "sseop", "sseoh", "sse", "sseg", "ssegg", "ssegs", "ssen", "ssenj", "ssenh", "ssed", "ssel", "sselg", "sselm", "sselb", "ssels", "sselt", "sselp", "sselh", "ssem", "sseb", "ssebs", "sses", "ssess", "sseng", "ssej", "ssec", "ssek", "sset", "ssep", "sseh", "ssyeo", "ssyeog", "ssyeogg", "ssyeogs", "ssyeon", "ssyeonj", "ssyeonh", "ssyeod", "ssyeol", "ssyeolg", "ssyeolm", "ssyeolb", "ssyeols", "ssyeolt", "ssyeolp", "ssyeolh", "ssyeom", "ssyeob", "ssyeobs", "ssyeos", "ssyeoss", "ssyeong", "ssyeoj", "ssyeoc", "ssyeok", "ssyeot", "ssyeop", "ssyeoh", "ssye", "ssyeg", "ssyegg", "ssyegs", "ssyen", "ssyenj", "ssyenh", "ssyed", "ssyel", "ssyelg", "ssyelm", "ssyelb", "ssyels", "ssyelt", "ssyelp", "ssyelh", "ssyem", "ssyeb", "ssyebs", "ssyes", "ssyess", "ssyeng", "ssyej", "ssyec", "ssyek", "ssyet", "ssyep", "ssyeh", "sso", "ssog", "ssogg", "ssogs", "sson", "ssonj", "ssonh", "ssod", "ssol", "ssolg", "ssolm", "ssolb", "ssols", "ssolt", "ssolp", "ssolh", "ssom", "ssob", "ssobs", "ssos", "ssoss", "ssong", "ssoj", "ssoc", "ssok", "ssot", "ssop", "ssoh", "sswa", "sswag", "sswagg", "sswags", "sswan", "sswanj", "sswanh", "sswad", "sswal", "sswalg", "sswalm", "sswalb"], ["sswals", "sswalt", "sswalp", "sswalh", "sswam", "sswab", "sswabs", "sswas", "sswass", "sswang", "sswaj", "sswac", "sswak", "sswat", "sswap", "sswah", "sswae", "sswaeg", "sswaegg", "sswaegs", "sswaen", "sswaenj", "sswaenh", "sswaed", "sswael", "sswaelg", "sswaelm", "sswaelb", "sswaels", "sswaelt", "sswaelp", "sswaelh", "sswaem", "sswaeb", "sswaebs", "sswaes", "sswaess", "sswaeng", "sswaej", "sswaec", "sswaek", "sswaet", "sswaep", "sswaeh", "ssoe", "ssoeg", "ssoegg", "ssoegs", "ssoen", "ssoenj", "ssoenh", "ssoed", "ssoel", "ssoelg", "ssoelm", "ssoelb", "ssoels", "ssoelt", "ssoelp", "ssoelh", "ssoem", "ssoeb", "ssoebs", "ssoes", "ssoess", "ssoeng", "ssoej", "ssoec", "ssoek", "ssoet", "ssoep", "ssoeh", "ssyo", "ssyog", "ssyogg", "ssyogs", "ssyon", "ssyonj", "ssyonh", "ssyod", "ssyol", "ssyolg", "ssyolm", "ssyolb", "ssyols", "ssyolt", "ssyolp", "ssyolh", "ssyom", "ssyob", "ssyobs", "ssyos", "ssyoss", "ssyong", "ssyoj", "ssyoc", "ssyok", "ssyot", "ssyop", "ssyoh", "ssu", "ssug", "ssugg", "ssugs", "ssun", "ssunj", "ssunh", "ssud", "ssul", "ssulg", "ssulm", "ssulb", "ssuls", "ssult", "ssulp", "ssulh", "ssum", "ssub", "ssubs", "ssus", "ssuss", "ssung", "ssuj", "ssuc", "ssuk", "ssut", "ssup", "ssuh", "ssweo", "ssweog", "ssweogg", "ssweogs", "ssweon", "ssweonj", "ssweonh", "ssweod", "ssweol", "ssweolg", "ssweolm", "ssweolb", "ssweols", "ssweolt", "ssweolp", "ssweolh", "ssweom", "ssweob", "ssweobs", "ssweos", "ssweoss", "ssweong", "ssweoj", "ssweoc", "ssweok", "ssweot", "ssweop", "ssweoh", "sswe", "ssweg", "sswegg", "sswegs", "sswen", "sswenj", "sswenh", "sswed", "sswel", "sswelg", "sswelm", "sswelb", "sswels", "sswelt", "sswelp", "sswelh", "sswem", "ssweb", "sswebs", "sswes", "sswess", "ssweng", "sswej", "sswec", "sswek", "sswet", "sswep", "ssweh", "sswi", "sswig", "sswigg", "sswigs", "sswin", "sswinj", "sswinh", "sswid", "sswil", "sswilg", "sswilm", "sswilb", "sswils", "sswilt", "sswilp", "sswilh", "sswim", "sswib", "sswibs", "sswis", "sswiss", "sswing", "sswij", "sswic", "sswik", "sswit", "sswip", "sswih", "ssyu", "ssyug", "ssyugg", "ssyugs", "ssyun", "ssyunj", "ssyunh", "ssyud", "ssyul", "ssyulg", "ssyulm", "ssyulb", "ssyuls", "ssyult", "ssyulp", "ssyulh", "ssyum", "ssyub", "ssyubs", "ssyus", "ssyuss", "ssyung", "ssyuj", "ssyuc", "ssyuk", "ssyut", "ssyup", "ssyuh", "sseu", "sseug", "sseugg", "sseugs", "sseun", "sseunj", "sseunh", "sseud", "sseul", "sseulg", "sseulm", "sseulb", "sseuls", "sseult", "sseulp", "sseulh"], ["sseum", "sseub", "sseubs", "sseus", "sseuss", "sseung", "sseuj", "sseuc", "sseuk", "sseut", "sseup", "sseuh", "ssyi", "ssyig", "ssyigg", "ssyigs", "ssyin", "ssyinj", "ssyinh", "ssyid", "ssyil", "ssyilg", "ssyilm", "ssyilb", "ssyils", "ssyilt", "ssyilp", "ssyilh", "ssyim", "ssyib", "ssyibs", "ssyis", "ssyiss", "ssying", "ssyij", "ssyic", "ssyik", "ssyit", "ssyip", "ssyih", "ssi", "ssig", "ssigg", "ssigs", "ssin", "ssinj", "ssinh", "ssid", "ssil", "ssilg", "ssilm", "ssilb", "ssils", "ssilt", "ssilp", "ssilh", "ssim", "ssib", "ssibs", "ssis", "ssiss", "ssing", "ssij", "ssic", "ssik", "ssit", "ssip", "ssih", "a", "ag", "agg", "ags", "an", "anj", "anh", "ad", "al", "alg", "alm", "alb", "als", "alt", "alp", "alh", "am", "ab", "abs", "as", "ass", "ang", "aj", "ac", "ak", "at", "ap", "ah", "ae", "aeg", "aegg", "aegs", "aen", "aenj", "aenh", "aed", "ael", "aelg", "aelm", "aelb", "aels", "aelt", "aelp", "aelh", "aem", "aeb", "aebs", "aes", "aess", "aeng", "aej", "aec", "aek", "aet", "aep", "aeh", "ya", "yag", "yagg", "yags", "yan", "yanj", "yanh", "yad", "yal", "yalg", "yalm", "yalb", "yals", "yalt", "yalp", "yalh", "yam", "yab", "yabs", "yas", "yass", "yang", "yaj", "yac", "yak", "yat", "yap", "yah", "yae", "yaeg", "yaegg", "yaegs", "yaen", "yaenj", "yaenh", "yaed", "yael", "yaelg", "yaelm", "yaelb", "yaels", "yaelt", "yaelp", "yaelh", "yaem", "yaeb", "yaebs", "yaes", "yaess", "yaeng", "yaej", "yaec", "yaek", "yaet", "yaep", "yaeh", "eo", "eog", "eogg", "eogs", "eon", "eonj", "eonh", "eod", "eol", "eolg", "eolm", "eolb", "eols", "eolt", "eolp", "eolh", "eom", "eob", "eobs", "eos", "eoss", "eong", "eoj", "eoc", "eok", "eot", "eop", "eoh", "e", "eg", "egg", "egs", "en", "enj", "enh", "ed", "el", "elg", "elm", "elb", "els", "elt", "elp", "elh", "em", "eb", "ebs", "es", "ess", "eng", "ej", "ec", "ek", "et", "ep", "eh", "yeo", "yeog", "yeogg", "yeogs", "yeon", "yeonj", "yeonh", "yeod", "yeol", "yeolg", "yeolm", "yeolb", "yeols", "yeolt", "yeolp", "yeolh", "yeom", "yeob", "yeobs", "yeos"], ["yeoss", "yeong", "yeoj", "yeoc", "yeok", "yeot", "yeop", "yeoh", "ye", "yeg", "yegg", "yegs", "yen", "yenj", "yenh", "yed", "yel", "yelg", "yelm", "yelb", "yels", "yelt", "yelp", "yelh", "yem", "yeb", "yebs", "yes", "yess", "yeng", "yej", "yec", "yek", "yet", "yep", "yeh", "o", "og", "ogg", "ogs", "on", "onj", "onh", "od", "ol", "olg", "olm", "olb", "ols", "olt", "olp", "olh", "om", "ob", "obs", "os", "oss", "ong", "oj", "oc", "ok", "ot", "op", "oh", "wa", "wag", "wagg", "wags", "wan", "wanj", "wanh", "wad", "wal", "walg", "walm", "walb", "wals", "walt", "walp", "walh", "wam", "wab", "wabs", "was", "wass", "wang", "waj", "wac", "wak", "wat", "wap", "wah", "wae", "waeg", "waegg", "waegs", "waen", "waenj", "waenh", "waed", "wael", "waelg", "waelm", "waelb", "waels", "waelt", "waelp", "waelh", "waem", "waeb", "waebs", "waes", "waess", "waeng", "waej", "waec", "waek", "waet", "waep", "waeh", "oe", "oeg", "oegg", "oegs", "oen", "oenj", "oenh", "oed", "oel", "oelg", "oelm", "oelb", "oels", "oelt", "oelp", "oelh", "oem", "oeb", "oebs", "oes", "oess", "oeng", "oej", "oec", "oek", "oet", "oep", "oeh", "yo", "yog", "yogg", "yogs", "yon", "yonj", "yonh", "yod", "yol", "yolg", "yolm", "yolb", "yols", "yolt", "yolp", "yolh", "yom", "yob", "yobs", "yos", "yoss", "yong", "yoj", "yoc", "yok", "yot", "yop", "yoh", "u", "ug", "ugg", "ugs", "un", "unj", "unh", "ud", "ul", "ulg", "ulm", "ulb", "uls", "ult", "ulp", "ulh", "um", "ub", "ubs", "us", "uss", "ung", "uj", "uc", "uk", "ut", "up", "uh", "weo", "weog", "weogg", "weogs", "weon", "weonj", "weonh", "weod", "weol", "weolg", "weolm", "weolb", "weols", "weolt", "weolp", "weolh", "weom", "weob", "weobs", "weos", "weoss", "weong", "weoj", "weoc", "weok", "weot", "weop", "weoh", "we", "weg", "wegg", "wegs", "wen", "wenj", "wenh", "wed", "wel", "welg", "welm", "welb", "wels", "welt", "welp", "welh", "wem", "web", "webs", "wes", "wess", "weng", "wej", "wec"], ["wek", "wet", "wep", "weh", "wi", "wig", "wigg", "wigs", "win", "winj", "winh", "wid", "wil", "wilg", "wilm", "wilb", "wils", "wilt", "wilp", "wilh", "wim", "wib", "wibs", "wis", "wiss", "wing", "wij", "wic", "wik", "wit", "wip", "wih", "yu", "yug", "yugg", "yugs", "yun", "yunj", "yunh", "yud", "yul", "yulg", "yulm", "yulb", "yuls", "yult", "yulp", "yulh", "yum", "yub", "yubs", "yus", "yuss", "yung", "yuj", "yuc", "yuk", "yut", "yup", "yuh", "eu", "eug", "eugg", "eugs", "eun", "eunj", "eunh", "eud", "eul", "eulg", "eulm", "eulb", "euls", "eult", "eulp", "eulh", "eum", "eub", "eubs", "eus", "euss", "eung", "euj", "euc", "euk", "eut", "eup", "euh", "yi", "yig", "yigg", "yigs", "yin", "yinj", "yinh", "yid", "yil", "yilg", "yilm", "yilb", "yils", "yilt", "yilp", "yilh", "yim", "yib", "yibs", "yis", "yiss", "ying", "yij", "yic", "yik", "yit", "yip", "yih", "i", "ig", "igg", "igs", "in", "inj", "inh", "id", "il", "ilg", "ilm", "ilb", "ils", "ilt", "ilp", "ilh", "im", "ib", "ibs", "is", "iss", "ing", "ij", "ic", "ik", "it", "ip", "ih", "ja", "jag", "jagg", "jags", "jan", "janj", "janh", "jad", "jal", "jalg", "jalm", "jalb", "jals", "jalt", "jalp", "jalh", "jam", "jab", "jabs", "jas", "jass", "jang", "jaj", "jac", "jak", "jat", "jap", "jah", "jae", "jaeg", "jaegg", "jaegs", "jaen", "jaenj", "jaenh", "jaed", "jael", "jaelg", "jaelm", "jaelb", "jaels", "jaelt", "jaelp", "jaelh", "jaem", "jaeb", "jaebs", "jaes", "jaess", "jaeng", "jaej", "jaec", "jaek", "jaet", "jaep", "jaeh", "jya", "jyag", "jyagg", "jyags", "jyan", "jyanj", "jyanh", "jyad", "jyal", "jyalg", "jyalm", "jyalb", "jyals", "jyalt", "jyalp", "jyalh", "jyam", "jyab", "jyabs", "jyas", "jyass", "jyang", "jyaj", "jyac", "jyak", "jyat", "jyap", "jyah", "jyae", "jyaeg", "jyaegg", "jyaegs", "jyaen", "jyaenj", "jyaenh", "jyaed", "jyael", "jyaelg", "jyaelm", "jyaelb", "jyaels", "jyaelt", "jyaelp", "jyaelh", "jyaem", "jyaeb", "jyaebs", "jyaes", "jyaess", "jyaeng", "jyaej", "jyaec", "jyaek", "jyaet", "jyaep", "jyaeh"], ["jeo", "jeog", "jeogg", "jeogs", "jeon", "jeonj", "jeonh", "jeod", "jeol", "jeolg", "jeolm", "jeolb", "jeols", "jeolt", "jeolp", "jeolh", "jeom", "jeob", "jeobs", "jeos", "jeoss", "jeong", "jeoj", "jeoc", "jeok", "jeot", "jeop", "jeoh", "je", "jeg", "jegg", "jegs", "jen", "jenj", "jenh", "jed", "jel", "jelg", "jelm", "jelb", "jels", "jelt", "jelp", "jelh", "jem", "jeb", "jebs", "jes", "jess", "jeng", "jej", "jec", "jek", "jet", "jep", "jeh", "jyeo", "jyeog", "jyeogg", "jyeogs", "jyeon", "jyeonj", "jyeonh", "jyeod", "jyeol", "jyeolg", "jyeolm", "jyeolb", "jyeols", "jyeolt", "jyeolp", "jyeolh", "jyeom", "jyeob", "jyeobs", "jyeos", "jyeoss", "jyeong", "jyeoj", "jyeoc", "jyeok", "jyeot", "jyeop", "jyeoh", "jye", "jyeg", "jyegg", "jyegs", "jyen", "jyenj", "jyenh", "jyed", "jyel", "jyelg", "jyelm", "jyelb", "jyels", "jyelt", "jyelp", "jyelh", "jyem", "jyeb", "jyebs", "jyes", "jyess", "jyeng", "jyej", "jyec", "jyek", "jyet", "jyep", "jyeh", "jo", "jog", "jogg", "jogs", "jon", "jonj", "jonh", "jod", "jol", "jolg", "jolm", "jolb", "jols", "jolt", "jolp", "jolh", "jom", "job", "jobs", "jos", "joss", "jong", "joj", "joc", "jok", "jot", "jop", "joh", "jwa", "jwag", "jwagg", "jwags", "jwan", "jwanj", "jwanh", "jwad", "jwal", "jwalg", "jwalm", "jwalb", "jwals", "jwalt", "jwalp", "jwalh", "jwam", "jwab", "jwabs", "jwas", "jwass", "jwang", "jwaj", "jwac", "jwak", "jwat", "jwap", "jwah", "jwae", "jwaeg", "jwaegg", "jwaegs", "jwaen", "jwaenj", "jwaenh", "jwaed", "jwael", "jwaelg", "jwaelm", "jwaelb", "jwaels", "jwaelt", "jwaelp", "jwaelh", "jwaem", "jwaeb", "jwaebs", "jwaes", "jwaess", "jwaeng", "jwaej", "jwaec", "jwaek", "jwaet", "jwaep", "jwaeh", "joe", "joeg", "joegg", "joegs", "joen", "joenj", "joenh", "joed", "joel", "joelg", "joelm", "joelb", "joels", "joelt", "joelp", "joelh", "joem", "joeb", "joebs", "joes", "joess", "joeng", "joej", "joec", "joek", "joet", "joep", "joeh", "jyo", "jyog", "jyogg", "jyogs", "jyon", "jyonj", "jyonh", "jyod", "jyol", "jyolg", "jyolm", "jyolb", "jyols", "jyolt", "jyolp", "jyolh", "jyom", "jyob", "jyobs", "jyos", "jyoss", "jyong", "jyoj", "jyoc", "jyok", "jyot", "jyop", "jyoh", "ju", "jug", "jugg", "jugs"], ["jun", "junj", "junh", "jud", "jul", "julg", "julm", "julb", "juls", "jult", "julp", "julh", "jum", "jub", "jubs", "jus", "juss", "jung", "juj", "juc", "juk", "jut", "jup", "juh", "jweo", "jweog", "jweogg", "jweogs", "jweon", "jweonj", "jweonh", "jweod", "jweol", "jweolg", "jweolm", "jweolb", "jweols", "jweolt", "jweolp", "jweolh", "jweom", "jweob", "jweobs", "jweos", "jweoss", "jweong", "jweoj", "jweoc", "jweok", "jweot", "jweop", "jweoh", "jwe", "jweg", "jwegg", "jwegs", "jwen", "jwenj", "jwenh", "jwed", "jwel", "jwelg", "jwelm", "jwelb", "jwels", "jwelt", "jwelp", "jwelh", "jwem", "jweb", "jwebs", "jwes", "jwess", "jweng", "jwej", "jwec", "jwek", "jwet", "jwep", "jweh", "jwi", "jwig", "jwigg", "jwigs", "jwin", "jwinj", "jwinh", "jwid", "jwil", "jwilg", "jwilm", "jwilb", "jwils", "jwilt", "jwilp", "jwilh", "jwim", "jwib", "jwibs", "jwis", "jwiss", "jwing", "jwij", "jwic", "jwik", "jwit", "jwip", "jwih", "jyu", "jyug", "jyugg", "jyugs", "jyun", "jyunj", "jyunh", "jyud", "jyul", "jyulg", "jyulm", "jyulb", "jyuls", "jyult", "jyulp", "jyulh", "jyum", "jyub", "jyubs", "jyus", "jyuss", "jyung", "jyuj", "jyuc", "jyuk", "jyut", "jyup", "jyuh", "jeu", "jeug", "jeugg", "jeugs", "jeun", "jeunj", "jeunh", "jeud", "jeul", "jeulg", "jeulm", "jeulb", "jeuls", "jeult", "jeulp", "jeulh", "jeum", "jeub", "jeubs", "jeus", "jeuss", "jeung", "jeuj", "jeuc", "jeuk", "jeut", "jeup", "jeuh", "jyi", "jyig", "jyigg", "jyigs", "jyin", "jyinj", "jyinh", "jyid", "jyil", "jyilg", "jyilm", "jyilb", "jyils", "jyilt", "jyilp", "jyilh", "jyim", "jyib", "jyibs", "jyis", "jyiss", "jying", "jyij", "jyic", "jyik", "jyit", "jyip", "jyih", "ji", "jig", "jigg", "jigs", "jin", "jinj", "jinh", "jid", "jil", "jilg", "jilm", "jilb", "jils", "jilt", "jilp", "jilh", "jim", "jib", "jibs", "jis", "jiss", "jing", "jij", "jic", "jik", "jit", "jip", "jih", "jja", "jjag", "jjagg", "jjags", "jjan", "jjanj", "jjanh", "jjad", "jjal", "jjalg", "jjalm", "jjalb", "jjals", "jjalt", "jjalp", "jjalh", "jjam", "jjab", "jjabs", "jjas", "jjass", "jjang", "jjaj", "jjac", "jjak", "jjat", "jjap", "jjah", "jjae", "jjaeg", "jjaegg", "jjaegs", "jjaen", "jjaenj", "jjaenh", "jjaed"], ["jjael", "jjaelg", "jjaelm", "jjaelb", "jjaels", "jjaelt", "jjaelp", "jjaelh", "jjaem", "jjaeb", "jjaebs", "jjaes", "jjaess", "jjaeng", "jjaej", "jjaec", "jjaek", "jjaet", "jjaep", "jjaeh", "jjya", "jjyag", "jjyagg", "jjyags", "jjyan", "jjyanj", "jjyanh", "jjyad", "jjyal", "jjyalg", "jjyalm", "jjyalb", "jjyals", "jjyalt", "jjyalp", "jjyalh", "jjyam", "jjyab", "jjyabs", "jjyas", "jjyass", "jjyang", "jjyaj", "jjyac", "jjyak", "jjyat", "jjyap", "jjyah", "jjyae", "jjyaeg", "jjyaegg", "jjyaegs", "jjyaen", "jjyaenj", "jjyaenh", "jjyaed", "jjyael", "jjyaelg", "jjyaelm", "jjyaelb", "jjyaels", "jjyaelt", "jjyaelp", "jjyaelh", "jjyaem", "jjyaeb", "jjyaebs", "jjyaes", "jjyaess", "jjyaeng", "jjyaej", "jjyaec", "jjyaek", "jjyaet", "jjyaep", "jjyaeh", "jjeo", "jjeog", "jjeogg", "jjeogs", "jjeon", "jjeonj", "jjeonh", "jjeod", "jjeol", "jjeolg", "jjeolm", "jjeolb", "jjeols", "jjeolt", "jjeolp", "jjeolh", "jjeom", "jjeob", "jjeobs", "jjeos", "jjeoss", "jjeong", "jjeoj", "jjeoc", "jjeok", "jjeot", "jjeop", "jjeoh", "jje", "jjeg", "jjegg", "jjegs", "jjen", "jjenj", "jjenh", "jjed", "jjel", "jjelg", "jjelm", "jjelb", "jjels", "jjelt", "jjelp", "jjelh", "jjem", "jjeb", "jjebs", "jjes", "jjess", "jjeng", "jjej", "jjec", "jjek", "jjet", "jjep", "jjeh", "jjyeo", "jjyeog", "jjyeogg", "jjyeogs", "jjyeon", "jjyeonj", "jjyeonh", "jjyeod", "jjyeol", "jjyeolg", "jjyeolm", "jjyeolb", "jjyeols", "jjyeolt", "jjyeolp", "jjyeolh", "jjyeom", "jjyeob", "jjyeobs", "jjyeos", "jjyeoss", "jjyeong", "jjyeoj", "jjyeoc", "jjyeok", "jjyeot", "jjyeop", "jjyeoh", "jjye", "jjyeg", "jjyegg", "jjyegs", "jjyen", "jjyenj", "jjyenh", "jjyed", "jjyel", "jjyelg", "jjyelm", "jjyelb", "jjyels", "jjyelt", "jjyelp", "jjyelh", "jjyem", "jjyeb", "jjyebs", "jjyes", "jjyess", "jjyeng", "jjyej", "jjyec", "jjyek", "jjyet", "jjyep", "jjyeh", "jjo", "jjog", "jjogg", "jjogs", "jjon", "jjonj", "jjonh", "jjod", "jjol", "jjolg", "jjolm", "jjolb", "jjols", "jjolt", "jjolp", "jjolh", "jjom", "jjob", "jjobs", "jjos", "jjoss", "jjong", "jjoj", "jjoc", "jjok", "jjot", "jjop", "jjoh", "jjwa", "jjwag", "jjwagg", "jjwags", "jjwan", "jjwanj", "jjwanh", "jjwad", "jjwal", "jjwalg", "jjwalm", "jjwalb", "jjwals", "jjwalt", "jjwalp", "jjwalh", "jjwam", "jjwab", "jjwabs", "jjwas", "jjwass", "jjwang", "jjwaj", "jjwac", "jjwak", "jjwat", "jjwap", "jjwah", "jjwae", "jjwaeg", "jjwaegg", "jjwaegs", "jjwaen", "jjwaenj", "jjwaenh", "jjwaed", "jjwael", "jjwaelg", "jjwaelm", "jjwaelb"], ["jjwaels", "jjwaelt", "jjwaelp", "jjwaelh", "jjwaem", "jjwaeb", "jjwaebs", "jjwaes", "jjwaess", "jjwaeng", "jjwaej", "jjwaec", "jjwaek", "jjwaet", "jjwaep", "jjwaeh", "jjoe", "jjoeg", "jjoegg", "jjoegs", "jjoen", "jjoenj", "jjoenh", "jjoed", "jjoel", "jjoelg", "jjoelm", "jjoelb", "jjoels", "jjoelt", "jjoelp", "jjoelh", "jjoem", "jjoeb", "jjoebs", "jjoes", "jjoess", "jjoeng", "jjoej", "jjoec", "jjoek", "jjoet", "jjoep", "jjoeh", "jjyo", "jjyog", "jjyogg", "jjyogs", "jjyon", "jjyonj", "jjyonh", "jjyod", "jjyol", "jjyolg", "jjyolm", "jjyolb", "jjyols", "jjyolt", "jjyolp", "jjyolh", "jjyom", "jjyob", "jjyobs", "jjyos", "jjyoss", "jjyong", "jjyoj", "jjyoc", "jjyok", "jjyot", "jjyop", "jjyoh", "jju", "jjug", "jjugg", "jjugs", "jjun", "jjunj", "jjunh", "jjud", "jjul", "jjulg", "jjulm", "jjulb", "jjuls", "jjult", "jjulp", "jjulh", "jjum", "jjub", "jjubs", "jjus", "jjuss", "jjung", "jjuj", "jjuc", "jjuk", "jjut", "jjup", "jjuh", "jjweo", "jjweog", "jjweogg", "jjweogs", "jjweon", "jjweonj", "jjweonh", "jjweod", "jjweol", "jjweolg", "jjweolm", "jjweolb", "jjweols", "jjweolt", "jjweolp", "jjweolh", "jjweom", "jjweob", "jjweobs", "jjweos", "jjweoss", "jjweong", "jjweoj", "jjweoc", "jjweok", "jjweot", "jjweop", "jjweoh", "jjwe", "jjweg", "jjwegg", "jjwegs", "jjwen", "jjwenj", "jjwenh", "jjwed", "jjwel", "jjwelg", "jjwelm", "jjwelb", "jjwels", "jjwelt", "jjwelp", "jjwelh", "jjwem", "jjweb", "jjwebs", "jjwes", "jjwess", "jjweng", "jjwej", "jjwec", "jjwek", "jjwet", "jjwep", "jjweh", "jjwi", "jjwig", "jjwigg", "jjwigs", "jjwin", "jjwinj", "jjwinh", "jjwid", "jjwil", "jjwilg", "jjwilm", "jjwilb", "jjwils", "jjwilt", "jjwilp", "jjwilh", "jjwim", "jjwib", "jjwibs", "jjwis", "jjwiss", "jjwing", "jjwij", "jjwic", "jjwik", "jjwit", "jjwip", "jjwih", "jjyu", "jjyug", "jjyugg", "jjyugs", "jjyun", "jjyunj", "jjyunh", "jjyud", "jjyul", "jjyulg", "jjyulm", "jjyulb", "jjyuls", "jjyult", "jjyulp", "jjyulh", "jjyum", "jjyub", "jjyubs", "jjyus", "jjyuss", "jjyung", "jjyuj", "jjyuc", "jjyuk", "jjyut", "jjyup", "jjyuh", "jjeu", "jjeug", "jjeugg", "jjeugs", "jjeun", "jjeunj", "jjeunh", "jjeud", "jjeul", "jjeulg", "jjeulm", "jjeulb", "jjeuls", "jjeult", "jjeulp", "jjeulh", "jjeum", "jjeub", "jjeubs", "jjeus", "jjeuss", "jjeung", "jjeuj", "jjeuc", "jjeuk", "jjeut", "jjeup", "jjeuh", "jjyi", "jjyig", "jjyigg", "jjyigs", "jjyin", "jjyinj", "jjyinh", "jjyid", "jjyil", "jjyilg", "jjyilm", "jjyilb", "jjyils", "jjyilt", "jjyilp", "jjyilh"], ["jjyim", "jjyib", "jjyibs", "jjyis", "jjyiss", "jjying", "jjyij", "jjyic", "jjyik", "jjyit", "jjyip", "jjyih", "jji", "jjig", "jjigg", "jjigs", "jjin", "jjinj", "jjinh", "jjid", "jjil", "jjilg", "jjilm", "jjilb", "jjils", "jjilt", "jjilp", "jjilh", "jjim", "jjib", "jjibs", "jjis", "jjiss", "jjing", "jjij", "jjic", "jjik", "jjit", "jjip", "jjih", "ca", "cag", "cagg", "cags", "can", "canj", "canh", "cad", "cal", "calg", "calm", "calb", "cals", "calt", "calp", "calh", "cam", "cab", "cabs", "cas", "cass", "cang", "caj", "cac", "cak", "cat", "cap", "cah", "cae", "caeg", "caegg", "caegs", "caen", "caenj", "caenh", "caed", "cael", "caelg", "caelm", "caelb", "caels", "caelt", "caelp", "caelh", "caem", "caeb", "caebs", "caes", "caess", "caeng", "caej", "caec", "caek", "caet", "caep", "caeh", "cya", "cyag", "cyagg", "cyags", "cyan", "cyanj", "cyanh", "cyad", "cyal", "cyalg", "cyalm", "cyalb", "cyals", "cyalt", "cyalp", "cyalh", "cyam", "cyab", "cyabs", "cyas", "cyass", "cyang", "cyaj", "cyac", "cyak", "cyat", "cyap", "cyah", "cyae", "cyaeg", "cyaegg", "cyaegs", "cyaen", "cyaenj", "cyaenh", "cyaed", "cyael", "cyaelg", "cyaelm", "cyaelb", "cyaels", "cyaelt", "cyaelp", "cyaelh", "cyaem", "cyaeb", "cyaebs", "cyaes", "cyaess", "cyaeng", "cyaej", "cyaec", "cyaek", "cyaet", "cyaep", "cyaeh", "ceo", "ceog", "ceogg", "ceogs", "ceon", "ceonj", "ceonh", "ceod", "ceol", "ceolg", "ceolm", "ceolb", "ceols", "ceolt", "ceolp", "ceolh", "ceom", "ceob", "ceobs", "ceos", "ceoss", "ceong", "ceoj", "ceoc", "ceok", "ceot", "ceop", "ceoh", "ce", "ceg", "cegg", "cegs", "cen", "cenj", "cenh", "ced", "cel", "celg", "celm", "celb", "cels", "celt", "celp", "celh", "cem", "ceb", "cebs", "ces", "cess", "ceng", "cej", "cec", "cek", "cet", "cep", "ceh", "cyeo", "cyeog", "cyeogg", "cyeogs", "cyeon", "cyeonj", "cyeonh", "cyeod", "cyeol", "cyeolg", "cyeolm", "cyeolb", "cyeols", "cyeolt", "cyeolp", "cyeolh", "cyeom", "cyeob", "cyeobs", "cyeos", "cyeoss", "cyeong", "cyeoj", "cyeoc", "cyeok", "cyeot", "cyeop", "cyeoh", "cye", "cyeg", "cyegg", "cyegs", "cyen", "cyenj", "cyenh", "cyed", "cyel", "cyelg", "cyelm", "cyelb", "cyels", "cyelt", "cyelp", "cyelh", "cyem", "cyeb", "cyebs", "cyes"], ["cyess", "cyeng", "cyej", "cyec", "cyek", "cyet", "cyep", "cyeh", "co", "cog", "cogg", "cogs", "con", "conj", "conh", "cod", "col", "colg", "colm", "colb", "cols", "colt", "colp", "colh", "com", "cob", "cobs", "cos", "coss", "cong", "coj", "coc", "cok", "cot", "cop", "coh", "cwa", "cwag", "cwagg", "cwags", "cwan", "cwanj", "cwanh", "cwad", "cwal", "cwalg", "cwalm", "cwalb", "cwals", "cwalt", "cwalp", "cwalh", "cwam", "cwab", "cwabs", "cwas", "cwass", "cwang", "cwaj", "cwac", "cwak", "cwat", "cwap", "cwah", "cwae", "cwaeg", "cwaegg", "cwaegs", "cwaen", "cwaenj", "cwaenh", "cwaed", "cwael", "cwaelg", "cwaelm", "cwaelb", "cwaels", "cwaelt", "cwaelp", "cwaelh", "cwaem", "cwaeb", "cwaebs", "cwaes", "cwaess", "cwaeng", "cwaej", "cwaec", "cwaek", "cwaet", "cwaep", "cwaeh", "coe", "coeg", "coegg", "coegs", "coen", "coenj", "coenh", "coed", "coel", "coelg", "coelm", "coelb", "coels", "coelt", "coelp", "coelh", "coem", "coeb", "coebs", "coes", "coess", "coeng", "coej", "coec", "coek", "coet", "coep", "coeh", "cyo", "cyog", "cyogg", "cyogs", "cyon", "cyonj", "cyonh", "cyod", "cyol", "cyolg", "cyolm", "cyolb", "cyols", "cyolt", "cyolp", "cyolh", "cyom", "cyob", "cyobs", "cyos", "cyoss", "cyong", "cyoj", "cyoc", "cyok", "cyot", "cyop", "cyoh", "cu", "cug", "cugg", "cugs", "cun", "cunj", "cunh", "cud", "cul", "culg", "culm", "culb", "culs", "cult", "culp", "culh", "cum", "cub", "cubs", "cus", "cuss", "cung", "cuj", "cuc", "cuk", "cut", "cup", "cuh", "cweo", "cweog", "cweogg", "cweogs", "cweon", "cweonj", "cweonh", "cweod", "cweol", "cweolg", "cweolm", "cweolb", "cweols", "cweolt", "cweolp", "cweolh", "cweom", "cweob", "cweobs", "cweos", "cweoss", "cweong", "cweoj", "cweoc", "cweok", "cweot", "cweop", "cweoh", "cwe", "cweg", "cwegg", "cwegs", "cwen", "cwenj", "cwenh", "cwed", "cwel", "cwelg", "cwelm", "cwelb", "cwels", "cwelt", "cwelp", "cwelh", "cwem", "cweb", "cwebs", "cwes", "cwess", "cweng", "cwej", "cwec", "cwek", "cwet", "cwep", "cweh", "cwi", "cwig", "cwigg", "cwigs", "cwin", "cwinj", "cwinh", "cwid", "cwil", "cwilg", "cwilm", "cwilb", "cwils", "cwilt", "cwilp", "cwilh", "cwim", "cwib", "cwibs", "cwis", "cwiss", "cwing", "cwij", "cwic"], ["cwik", "cwit", "cwip", "cwih", "cyu", "cyug", "cyugg", "cyugs", "cyun", "cyunj", "cyunh", "cyud", "cyul", "cyulg", "cyulm", "cyulb", "cyuls", "cyult", "cyulp", "cyulh", "cyum", "cyub", "cyubs", "cyus", "cyuss", "cyung", "cyuj", "cyuc", "cyuk", "cyut", "cyup", "cyuh", "ceu", "ceug", "ceugg", "ceugs", "ceun", "ceunj", "ceunh", "ceud", "ceul", "ceulg", "ceulm", "ceulb", "ceuls", "ceult", "ceulp", "ceulh", "ceum", "ceub", "ceubs", "ceus", "ceuss", "ceung", "ceuj", "ceuc", "ceuk", "ceut", "ceup", "ceuh", "cyi", "cyig", "cyigg", "cyigs", "cyin", "cyinj", "cyinh", "cyid", "cyil", "cyilg", "cyilm", "cyilb", "cyils", "cyilt", "cyilp", "cyilh", "cyim", "cyib", "cyibs", "cyis", "cyiss", "cying", "cyij", "cyic", "cyik", "cyit", "cyip", "cyih", "ci", "cig", "cigg", "cigs", "cin", "cinj", "cinh", "cid", "cil", "cilg", "cilm", "cilb", "cils", "cilt", "cilp", "cilh", "cim", "cib", "cibs", "cis", "ciss", "cing", "cij", "cic", "cik", "cit", "cip", "cih", "ka", "kag", "kagg", "kags", "kan", "kanj", "kanh", "kad", "kal", "kalg", "kalm", "kalb", "kals", "kalt", "kalp", "kalh", "kam", "kab", "kabs", "kas", "kass", "kang", "kaj", "kac", "kak", "kat", "kap", "kah", "kae", "kaeg", "kaegg", "kaegs", "kaen", "kaenj", "kaenh", "kaed", "kael", "kaelg", "kaelm", "kaelb", "kaels", "kaelt", "kaelp", "kaelh", "kaem", "kaeb", "kaebs", "kaes", "kaess", "kaeng", "kaej", "kaec", "kaek", "kaet", "kaep", "kaeh", "kya", "kyag", "kyagg", "kyags", "kyan", "kyanj", "kyanh", "kyad", "kyal", "kyalg", "kyalm", "kyalb", "kyals", "kyalt", "kyalp", "kyalh", "kyam", "kyab", "kyabs", "kyas", "kyass", "kyang", "kyaj", "kyac", "kyak", "kyat", "kyap", "kyah", "kyae", "kyaeg", "kyaegg", "kyaegs", "kyaen", "kyaenj", "kyaenh", "kyaed", "kyael", "kyaelg", "kyaelm", "kyaelb", "kyaels", "kyaelt", "kyaelp", "kyaelh", "kyaem", "kyaeb", "kyaebs", "kyaes", "kyaess", "kyaeng", "kyaej", "kyaec", "kyaek", "kyaet", "kyaep", "kyaeh", "keo", "keog", "keogg", "keogs", "keon", "keonj", "keonh", "keod", "keol", "keolg", "keolm", "keolb", "keols", "keolt", "keolp", "keolh", "keom", "keob", "keobs", "keos", "keoss", "keong", "keoj", "keoc", "keok", "keot", "keop", "keoh"], ["ke", "keg", "kegg", "kegs", "ken", "kenj", "kenh", "ked", "kel", "kelg", "kelm", "kelb", "kels", "kelt", "kelp", "kelh", "kem", "keb", "kebs", "kes", "kess", "keng", "kej", "kec", "kek", "ket", "kep", "keh", "kyeo", "kyeog", "kyeogg", "kyeogs", "kyeon", "kyeonj", "kyeonh", "kyeod", "kyeol", "kyeolg", "kyeolm", "kyeolb", "kyeols", "kyeolt", "kyeolp", "kyeolh", "kyeom", "kyeob", "kyeobs", "kyeos", "kyeoss", "kyeong", "kyeoj", "kyeoc", "kyeok", "kyeot", "kyeop", "kyeoh", "kye", "kyeg", "kyegg", "kyegs", "kyen", "kyenj", "kyenh", "kyed", "kyel", "kyelg", "kyelm", "kyelb", "kyels", "kyelt", "kyelp", "kyelh", "kyem", "kyeb", "kyebs", "kyes", "kyess", "kyeng", "kyej", "kyec", "kyek", "kyet", "kyep", "kyeh", "ko", "kog", "kogg", "kogs", "kon", "konj", "konh", "kod", "kol", "kolg", "kolm", "kolb", "kols", "kolt", "kolp", "kolh", "kom", "kob", "kobs", "kos", "koss", "kong", "koj", "koc", "kok", "kot", "kop", "koh", "kwa", "kwag", "kwagg", "kwags", "kwan", "kwanj", "kwanh", "kwad", "kwal", "kwalg", "kwalm", "kwalb", "kwals", "kwalt", "kwalp", "kwalh", "kwam", "kwab", "kwabs", "kwas", "kwass", "kwang", "kwaj", "kwac", "kwak", "kwat", "kwap", "kwah", "kwae", "kwaeg", "kwaegg", "kwaegs", "kwaen", "kwaenj", "kwaenh", "kwaed", "kwael", "kwaelg", "kwaelm", "kwaelb", "kwaels", "kwaelt", "kwaelp", "kwaelh", "kwaem", "kwaeb", "kwaebs", "kwaes", "kwaess", "kwaeng", "kwaej", "kwaec", "kwaek", "kwaet", "kwaep", "kwaeh", "koe", "koeg", "koegg", "koegs", "koen", "koenj", "koenh", "koed", "koel", "koelg", "koelm", "koelb", "koels", "koelt", "koelp", "koelh", "koem", "koeb", "koebs", "koes", "koess", "koeng", "koej", "koec", "koek", "koet", "koep", "koeh", "kyo", "kyog", "kyogg", "kyogs", "kyon", "kyonj", "kyonh", "kyod", "kyol", "kyolg", "kyolm", "kyolb", "kyols", "kyolt", "kyolp", "kyolh", "kyom", "kyob", "kyobs", "kyos", "kyoss", "kyong", "kyoj", "kyoc", "kyok", "kyot", "kyop", "kyoh", "ku", "kug", "kugg", "kugs", "kun", "kunj", "kunh", "kud", "kul", "kulg", "kulm", "kulb", "kuls", "kult", "kulp", "kulh", "kum", "kub", "kubs", "kus", "kuss", "kung", "kuj", "kuc", "kuk", "kut", "kup", "kuh", "kweo", "kweog", "kweogg", "kweogs"], ["kweon", "kweonj", "kweonh", "kweod", "kweol", "kweolg", "kweolm", "kweolb", "kweols", "kweolt", "kweolp", "kweolh", "kweom", "kweob", "kweobs", "kweos", "kweoss", "kweong", "kweoj", "kweoc", "kweok", "kweot", "kweop", "kweoh", "kwe", "kweg", "kwegg", "kwegs", "kwen", "kwenj", "kwenh", "kwed", "kwel", "kwelg", "kwelm", "kwelb", "kwels", "kwelt", "kwelp", "kwelh", "kwem", "kweb", "kwebs", "kwes", "kwess", "kweng", "kwej", "kwec", "kwek", "kwet", "kwep", "kweh", "kwi", "kwig", "kwigg", "kwigs", "kwin", "kwinj", "kwinh", "kwid", "kwil", "kwilg", "kwilm", "kwilb", "kwils", "kwilt", "kwilp", "kwilh", "kwim", "kwib", "kwibs", "kwis", "kwiss", "kwing", "kwij", "kwic", "kwik", "kwit", "kwip", "kwih", "kyu", "kyug", "kyugg", "kyugs", "kyun", "kyunj", "kyunh", "kyud", "kyul", "kyulg", "kyulm", "kyulb", "kyuls", "kyult", "kyulp", "kyulh", "kyum", "kyub", "kyubs", "kyus", "kyuss", "kyung", "kyuj", "kyuc", "kyuk", "kyut", "kyup", "kyuh", "keu", "keug", "keugg", "keugs", "keun", "keunj", "keunh", "keud", "keul", "keulg", "keulm", "keulb", "keuls", "keult", "keulp", "keulh", "keum", "keub", "keubs", "keus", "keuss", "keung", "keuj", "keuc", "keuk", "keut", "keup", "keuh", "kyi", "kyig", "kyigg", "kyigs", "kyin", "kyinj", "kyinh", "kyid", "kyil", "kyilg", "kyilm", "kyilb", "kyils", "kyilt", "kyilp", "kyilh", "kyim", "kyib", "kyibs", "kyis", "kyiss", "kying", "kyij", "kyic", "kyik", "kyit", "kyip", "kyih", "ki", "kig", "kigg", "kigs", "kin", "kinj", "kinh", "kid", "kil", "kilg", "kilm", "kilb", "kils", "kilt", "kilp", "kilh", "kim", "kib", "kibs", "kis", "kiss", "king", "kij", "kic", "kik", "kit", "kip", "kih", "ta", "tag", "tagg", "tags", "tan", "tanj", "tanh", "tad", "tal", "talg", "talm", "talb", "tals", "talt", "talp", "talh", "tam", "tab", "tabs", "tas", "tass", "tang", "taj", "tac", "tak", "tat", "tap", "tah", "tae", "taeg", "taegg", "taegs", "taen", "taenj", "taenh", "taed", "tael", "taelg", "taelm", "taelb", "taels", "taelt", "taelp", "taelh", "taem", "taeb", "taebs", "taes", "taess", "taeng", "taej", "taec", "taek", "taet", "taep", "taeh", "tya", "tyag", "tyagg", "tyags", "tyan", "tyanj", "tyanh", "tyad"], ["tyal", "tyalg", "tyalm", "tyalb", "tyals", "tyalt", "tyalp", "tyalh", "tyam", "tyab", "tyabs", "tyas", "tyass", "tyang", "tyaj", "tyac", "tyak", "tyat", "tyap", "tyah", "tyae", "tyaeg", "tyaegg", "tyaegs", "tyaen", "tyaenj", "tyaenh", "tyaed", "tyael", "tyaelg", "tyaelm", "tyaelb", "tyaels", "tyaelt", "tyaelp", "tyaelh", "tyaem", "tyaeb", "tyaebs", "tyaes", "tyaess", "tyaeng", "tyaej", "tyaec", "tyaek", "tyaet", "tyaep", "tyaeh", "teo", "teog", "teogg", "teogs", "teon", "teonj", "teonh", "teod", "teol", "teolg", "teolm", "teolb", "teols", "teolt", "teolp", "teolh", "teom", "teob", "teobs", "teos", "teoss", "teong", "teoj", "teoc", "teok", "teot", "teop", "teoh", "te", "teg", "tegg", "tegs", "ten", "tenj", "tenh", "ted", "tel", "telg", "telm", "telb", "tels", "telt", "telp", "telh", "tem", "teb", "tebs", "tes", "tess", "teng", "tej", "tec", "tek", "tet", "tep", "teh", "tyeo", "tyeog", "tyeogg", "tyeogs", "tyeon", "tyeonj", "tyeonh", "tyeod", "tyeol", "tyeolg", "tyeolm", "tyeolb", "tyeols", "tyeolt", "tyeolp", "tyeolh", "tyeom", "tyeob", "tyeobs", "tyeos", "tyeoss", "tyeong", "tyeoj", "tyeoc", "tyeok", "tyeot", "tyeop", "tyeoh", "tye", "tyeg", "tyegg", "tyegs", "tyen", "tyenj", "tyenh", "tyed", "tyel", "tyelg", "tyelm", "tyelb", "tyels", "tyelt", "tyelp", "tyelh", "tyem", "tyeb", "tyebs", "tyes", "tyess", "tyeng", "tyej", "tyec", "tyek", "tyet", "tyep", "tyeh", "to", "tog", "togg", "togs", "ton", "tonj", "tonh", "tod", "tol", "tolg", "tolm", "tolb", "tols", "tolt", "tolp", "tolh", "tom", "tob", "tobs", "tos", "toss", "tong", "toj", "toc", "tok", "tot", "top", "toh", "twa", "twag", "twagg", "twags", "twan", "twanj", "twanh", "twad", "twal", "twalg", "twalm", "twalb", "twals", "twalt", "twalp", "twalh", "twam", "twab", "twabs", "twas", "twass", "twang", "twaj", "twac", "twak", "twat", "twap", "twah", "twae", "twaeg", "twaegg", "twaegs", "twaen", "twaenj", "twaenh", "twaed", "twael", "twaelg", "twaelm", "twaelb", "twaels", "twaelt", "twaelp", "twaelh", "twaem", "twaeb", "twaebs", "twaes", "twaess", "twaeng", "twaej", "twaec", "twaek", "twaet", "twaep", "twaeh", "toe", "toeg", "toegg", "toegs", "toen", "toenj", "toenh", "toed", "toel", "toelg", "toelm", "toelb"], ["toels", "toelt", "toelp", "toelh", "toem", "toeb", "toebs", "toes", "toess", "toeng", "toej", "toec", "toek", "toet", "toep", "toeh", "tyo", "tyog", "tyogg", "tyogs", "tyon", "tyonj", "tyonh", "tyod", "tyol", "tyolg", "tyolm", "tyolb", "tyols", "tyolt", "tyolp", "tyolh", "tyom", "tyob", "tyobs", "tyos", "tyoss", "tyong", "tyoj", "tyoc", "tyok", "tyot", "tyop", "tyoh", "tu", "tug", "tugg", "tugs", "tun", "tunj", "tunh", "tud", "tul", "tulg", "tulm", "tulb", "tuls", "tult", "tulp", "tulh", "tum", "tub", "tubs", "tus", "tuss", "tung", "tuj", "tuc", "tuk", "tut", "tup", "tuh", "tweo", "tweog", "tweogg", "tweogs", "tweon", "tweonj", "tweonh", "tweod", "tweol", "tweolg", "tweolm", "tweolb", "tweols", "tweolt", "tweolp", "tweolh", "tweom", "tweob", "tweobs", "tweos", "tweoss", "tweong", "tweoj", "tweoc", "tweok", "tweot", "tweop", "tweoh", "twe", "tweg", "twegg", "twegs", "twen", "twenj", "twenh", "twed", "twel", "twelg", "twelm", "twelb", "twels", "twelt", "twelp", "twelh", "twem", "tweb", "twebs", "twes", "twess", "tweng", "twej", "twec", "twek", "twet", "twep", "tweh", "twi", "twig", "twigg", "twigs", "twin", "twinj", "twinh", "twid", "twil", "twilg", "twilm", "twilb", "twils", "twilt", "twilp", "twilh", "twim", "twib", "twibs", "twis", "twiss", "twing", "twij", "twic", "twik", "twit", "twip", "twih", "tyu", "tyug", "tyugg", "tyugs", "tyun", "tyunj", "tyunh", "tyud", "tyul", "tyulg", "tyulm", "tyulb", "tyuls", "tyult", "tyulp", "tyulh", "tyum", "tyub", "tyubs", "tyus", "tyuss", "tyung", "tyuj", "tyuc", "tyuk", "tyut", "tyup", "tyuh", "teu", "teug", "teugg", "teugs", "teun", "teunj", "teunh", "teud", "teul", "teulg", "teulm", "teulb", "teuls", "teult", "teulp", "teulh", "teum", "teub", "teubs", "teus", "teuss", "teung", "teuj", "teuc", "teuk", "teut", "teup", "teuh", "tyi", "tyig", "tyigg", "tyigs", "tyin", "tyinj", "tyinh", "tyid", "tyil", "tyilg", "tyilm", "tyilb", "tyils", "tyilt", "tyilp", "tyilh", "tyim", "tyib", "tyibs", "tyis", "tyiss", "tying", "tyij", "tyic", "tyik", "tyit", "tyip", "tyih", "ti", "tig", "tigg", "tigs", "tin", "tinj", "tinh", "tid", "til", "tilg", "tilm", "tilb", "tils", "tilt", "tilp", "tilh"], ["tim", "tib", "tibs", "tis", "tiss", "ting", "tij", "tic", "tik", "tit", "tip", "tih", "pa", "pag", "pagg", "pags", "pan", "panj", "panh", "pad", "pal", "palg", "palm", "palb", "pals", "palt", "palp", "palh", "pam", "pab", "pabs", "pas", "pass", "pang", "paj", "pac", "pak", "pat", "pap", "pah", "pae", "paeg", "paegg", "paegs", "paen", "paenj", "paenh", "paed", "pael", "paelg", "paelm", "paelb", "paels", "paelt", "paelp", "paelh", "paem", "paeb", "paebs", "paes", "paess", "paeng", "paej", "paec", "paek", "paet", "paep", "paeh", "pya", "pyag", "pyagg", "pyags", "pyan", "pyanj", "pyanh", "pyad", "pyal", "pyalg", "pyalm", "pyalb", "pyals", "pyalt", "pyalp", "pyalh", "pyam", "pyab", "pyabs", "pyas", "pyass", "pyang", "pyaj", "pyac", "pyak", "pyat", "pyap", "pyah", "pyae", "pyaeg", "pyaegg", "pyaegs", "pyaen", "pyaenj", "pyaenh", "pyaed", "pyael", "pyaelg", "pyaelm", "pyaelb", "pyaels", "pyaelt", "pyaelp", "pyaelh", "pyaem", "pyaeb", "pyaebs", "pyaes", "pyaess", "pyaeng", "pyaej", "pyaec", "pyaek", "pyaet", "pyaep", "pyaeh", "peo", "peog", "peogg", "peogs", "peon", "peonj", "peonh", "peod", "peol", "peolg", "peolm", "peolb", "peols", "peolt", "peolp", "peolh", "peom", "peob", "peobs", "peos", "peoss", "peong", "peoj", "peoc", "peok", "peot", "peop", "peoh", "pe", "peg", "pegg", "pegs", "pen", "penj", "penh", "ped", "pel", "pelg", "pelm", "pelb", "pels", "pelt", "pelp", "pelh", "pem", "peb", "pebs", "pes", "pess", "peng", "pej", "pec", "pek", "pet", "pep", "peh", "pyeo", "pyeog", "pyeogg", "pyeogs", "pyeon", "pyeonj", "pyeonh", "pyeod", "pyeol", "pyeolg", "pyeolm", "pyeolb", "pyeols", "pyeolt", "pyeolp", "pyeolh", "pyeom", "pyeob", "pyeobs", "pyeos", "pyeoss", "pyeong", "pyeoj", "pyeoc", "pyeok", "pyeot", "pyeop", "pyeoh", "pye", "pyeg", "pyegg", "pyegs", "pyen", "pyenj", "pyenh", "pyed", "pyel", "pyelg", "pyelm", "pyelb", "pyels", "pyelt", "pyelp", "pyelh", "pyem", "pyeb", "pyebs", "pyes", "pyess", "pyeng", "pyej", "pyec", "pyek", "pyet", "pyep", "pyeh", "po", "pog", "pogg", "pogs", "pon", "ponj", "ponh", "pod", "pol", "polg", "polm", "polb", "pols", "polt", "polp", "polh", "pom", "pob", "pobs", "pos"], ["poss", "pong", "poj", "poc", "pok", "pot", "pop", "poh", "pwa", "pwag", "pwagg", "pwags", "pwan", "pwanj", "pwanh", "pwad", "pwal", "pwalg", "pwalm", "pwalb", "pwals", "pwalt", "pwalp", "pwalh", "pwam", "pwab", "pwabs", "pwas", "pwass", "pwang", "pwaj", "pwac", "pwak", "pwat", "pwap", "pwah", "pwae", "pwaeg", "pwaegg", "pwaegs", "pwaen", "pwaenj", "pwaenh", "pwaed", "pwael", "pwaelg", "pwaelm", "pwaelb", "pwaels", "pwaelt", "pwaelp", "pwaelh", "pwaem", "pwaeb", "pwaebs", "pwaes", "pwaess", "pwaeng", "pwaej", "pwaec", "pwaek", "pwaet", "pwaep", "pwaeh", "poe", "poeg", "poegg", "poegs", "poen", "poenj", "poenh", "poed", "poel", "poelg", "poelm", "poelb", "poels", "poelt", "poelp", "poelh", "poem", "poeb", "poebs", "poes", "poess", "poeng", "poej", "poec", "poek", "poet", "poep", "poeh", "pyo", "pyog", "pyogg", "pyogs", "pyon", "pyonj", "pyonh", "pyod", "pyol", "pyolg", "pyolm", "pyolb", "pyols", "pyolt", "pyolp", "pyolh", "pyom", "pyob", "pyobs", "pyos", "pyoss", "pyong", "pyoj", "pyoc", "pyok", "pyot", "pyop", "pyoh", "pu", "pug", "pugg", "pugs", "pun", "punj", "punh", "pud", "pul", "pulg", "pulm", "pulb", "puls", "pult", "pulp", "pulh", "pum", "pub", "pubs", "pus", "puss", "pung", "puj", "puc", "puk", "put", "pup", "puh", "pweo", "pweog", "pweogg", "pweogs", "pweon", "pweonj", "pweonh", "pweod", "pweol", "pweolg", "pweolm", "pweolb", "pweols", "pweolt", "pweolp", "pweolh", "pweom", "pweob", "pweobs", "pweos", "pweoss", "pweong", "pweoj", "pweoc", "pweok", "pweot", "pweop", "pweoh", "pwe", "pweg", "pwegg", "pwegs", "pwen", "pwenj", "pwenh", "pwed", "pwel", "pwelg", "pwelm", "pwelb", "pwels", "pwelt", "pwelp", "pwelh", "pwem", "pweb", "pwebs", "pwes", "pwess", "pweng", "pwej", "pwec", "pwek", "pwet", "pwep", "pweh", "pwi", "pwig", "pwigg", "pwigs", "pwin", "pwinj", "pwinh", "pwid", "pwil", "pwilg", "pwilm", "pwilb", "pwils", "pwilt", "pwilp", "pwilh", "pwim", "pwib", "pwibs", "pwis", "pwiss", "pwing", "pwij", "pwic", "pwik", "pwit", "pwip", "pwih", "pyu", "pyug", "pyugg", "pyugs", "pyun", "pyunj", "pyunh", "pyud", "pyul", "pyulg", "pyulm", "pyulb", "pyuls", "pyult", "pyulp", "pyulh", "pyum", "pyub", "pyubs", "pyus", "pyuss", "pyung", "pyuj", "pyuc"], ["pyuk", "pyut", "pyup", "pyuh", "peu", "peug", "peugg", "peugs", "peun", "peunj", "peunh", "peud", "peul", "peulg", "peulm", "peulb", "peuls", "peult", "peulp", "peulh", "peum", "peub", "peubs", "peus", "peuss", "peung", "peuj", "peuc", "peuk", "peut", "peup", "peuh", "pyi", "pyig", "pyigg", "pyigs", "pyin", "pyinj", "pyinh", "pyid", "pyil", "pyilg", "pyilm", "pyilb", "pyils", "pyilt", "pyilp", "pyilh", "pyim", "pyib", "pyibs", "pyis", "pyiss", "pying", "pyij", "pyic", "pyik", "pyit", "pyip", "pyih", "pi", "pig", "pigg", "pigs", "pin", "pinj", "pinh", "pid", "pil", "pilg", "pilm", "pilb", "pils", "pilt", "pilp", "pilh", "pim", "pib", "pibs", "pis", "piss", "ping", "pij", "pic", "pik", "pit", "pip", "pih", "ha", "hag", "hagg", "hags", "han", "hanj", "hanh", "had", "hal", "halg", "halm", "halb", "hals", "halt", "halp", "halh", "ham", "hab", "habs", "has", "hass", "hang", "haj", "hac", "hak", "hat", "hap", "hah", "hae", "haeg", "haegg", "haegs", "haen", "haenj", "haenh", "haed", "hael", "haelg", "haelm", "haelb", "haels", "haelt", "haelp", "haelh", "haem", "haeb", "haebs", "haes", "haess", "haeng", "haej", "haec", "haek", "haet", "haep", "haeh", "hya", "hyag", "hyagg", "hyags", "hyan", "hyanj", "hyanh", "hyad", "hyal", "hyalg", "hyalm", "hyalb", "hyals", "hyalt", "hyalp", "hyalh", "hyam", "hyab", "hyabs", "hyas", "hyass", "hyang", "hyaj", "hyac", "hyak", "hyat", "hyap", "hyah", "hyae", "hyaeg", "hyaegg", "hyaegs", "hyaen", "hyaenj", "hyaenh", "hyaed", "hyael", "hyaelg", "hyaelm", "hyaelb", "hyaels", "hyaelt", "hyaelp", "hyaelh", "hyaem", "hyaeb", "hyaebs", "hyaes", "hyaess", "hyaeng", "hyaej", "hyaec", "hyaek", "hyaet", "hyaep", "hyaeh", "heo", "heog", "heogg", "heogs", "heon", "heonj", "heonh", "heod", "heol", "heolg", "heolm", "heolb", "heols", "heolt", "heolp", "heolh", "heom", "heob", "heobs", "heos", "heoss", "heong", "heoj", "heoc", "heok", "heot", "heop", "heoh", "he", "heg", "hegg", "hegs", "hen", "henj", "henh", "hed", "hel", "helg", "helm", "helb", "hels", "helt", "help", "helh", "hem", "heb", "hebs", "hes", "hess", "heng", "hej", "hec", "hek", "het", "hep", "heh"], ["hyeo", "hyeog", "hyeogg", "hyeogs", "hyeon", "hyeonj", "hyeonh", "hyeod", "hyeol", "hyeolg", "hyeolm", "hyeolb", "hyeols", "hyeolt", "hyeolp", "hyeolh", "hyeom", "hyeob", "hyeobs", "hyeos", "hyeoss", "hyeong", "hyeoj", "hyeoc", "hyeok", "hyeot", "hyeop", "hyeoh", "hye", "hyeg", "hyegg", "hyegs", "hyen", "hyenj", "hyenh", "hyed", "hyel", "hyelg", "hyelm", "hyelb", "hyels", "hyelt", "hyelp", "hyelh", "hyem", "hyeb", "hyebs", "hyes", "hyess", "hyeng", "hyej", "hyec", "hyek", "hyet", "hyep", "hyeh", "ho", "hog", "hogg", "hogs", "hon", "honj", "honh", "hod", "hol", "holg", "holm", "holb", "hols", "holt", "holp", "holh", "hom", "hob", "hobs", "hos", "hoss", "hong", "hoj", "hoc", "hok", "hot", "hop", "hoh", "hwa", "hwag", "hwagg", "hwags", "hwan", "hwanj", "hwanh", "hwad", "hwal", "hwalg", "hwalm", "hwalb", "hwals", "hwalt", "hwalp", "hwalh", "hwam", "hwab", "hwabs", "hwas", "hwass", "hwang", "hwaj", "hwac", "hwak", "hwat", "hwap", "hwah", "hwae", "hwaeg", "hwaegg", "hwaegs", "hwaen", "hwaenj", "hwaenh", "hwaed", "hwael", "hwaelg", "hwaelm", "hwaelb", "hwaels", "hwaelt", "hwaelp", "hwaelh", "hwaem", "hwaeb", "hwaebs", "hwaes", "hwaess", "hwaeng", "hwaej", "hwaec", "hwaek", "hwaet", "hwaep", "hwaeh", "hoe", "hoeg", "hoegg", "hoegs", "hoen", "hoenj", "hoenh", "hoed", "hoel", "hoelg", "hoelm", "hoelb", "hoels", "hoelt", "hoelp", "hoelh", "hoem", "hoeb", "hoebs", "hoes", "hoess", "hoeng", "hoej", "hoec", "hoek", "hoet", "hoep", "hoeh", "hyo", "hyog", "hyogg", "hyogs", "hyon", "hyonj", "hyonh", "hyod", "hyol", "hyolg", "hyolm", "hyolb", "hyols", "hyolt", "hyolp", "hyolh", "hyom", "hyob", "hyobs", "hyos", "hyoss", "hyong", "hyoj", "hyoc", "hyok", "hyot", "hyop", "hyoh", "hu", "hug", "hugg", "hugs", "hun", "hunj", "hunh", "hud", "hul", "hulg", "hulm", "hulb", "huls", "hult", "hulp", "hulh", "hum", "hub", "hubs", "hus", "huss", "hung", "huj", "huc", "huk", "hut", "hup", "huh", "hweo", "hweog", "hweogg", "hweogs", "hweon", "hweonj", "hweonh", "hweod", "hweol", "hweolg", "hweolm", "hweolb", "hweols", "hweolt", "hweolp", "hweolh", "hweom", "hweob", "hweobs", "hweos", "hweoss", "hweong", "hweoj", "hweoc", "hweok", "hweot", "hweop", "hweoh", "hwe", "hweg", "hwegg", "hwegs"], ["hwen", "hwenj", "hwenh", "hwed", "hwel", "hwelg", "hwelm", "hwelb", "hwels", "hwelt", "hwelp", "hwelh", "hwem", "hweb", "hwebs", "hwes", "hwess", "hweng", "hwej", "hwec", "hwek", "hwet", "hwep", "hweh", "hwi", "hwig", "hwigg", "hwigs", "hwin", "hwinj", "hwinh", "hwid", "hwil", "hwilg", "hwilm", "hwilb", "hwils", "hwilt", "hwilp", "hwilh", "hwim", "hwib", "hwibs", "hwis", "hwiss", "hwing", "hwij", "hwic", "hwik", "hwit", "hwip", "hwih", "hyu", "hyug", "hyugg", "hyugs", "hyun", "hyunj", "hyunh", "hyud", "hyul", "hyulg", "hyulm", "hyulb", "hyuls", "hyult", "hyulp", "hyulh", "hyum", "hyub", "hyubs", "hyus", "hyuss", "hyung", "hyuj", "hyuc", "hyuk", "hyut", "hyup", "hyuh", "heu", "heug", "heugg", "heugs", "heun", "heunj", "heunh", "heud", "heul", "heulg", "heulm", "heulb", "heuls", "heult", "heulp", "heulh", "heum", "heub", "heubs", "heus", "heuss", "heung", "heuj", "heuc", "heuk", "heut", "heup", "heuh", "hyi", "hyig", "hyigg", "hyigs", "hyin", "hyinj", "hyinh", "hyid", "hyil", "hyilg", "hyilm", "hyilb", "hyils", "hyilt", "hyilp", "hyilh", "hyim", "hyib", "hyibs", "hyis", "hyiss", "hying", "hyij", "hyic", "hyik", "hyit", "hyip", "hyih", "hi", "hig", "higg", "higs", "hin", "hinj", "hinh", "hid", "hil", "hilg", "hilm", "hilb", "hils", "hilt", "hilp", "hilh", "him", "hib", "hibs", "his", "hiss", "hing", "hij", "hic", "hik", "hit", "hip", "hih"], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ["Kay", "Kayng", "Ke", "Ko", "Kol", "Koc", "Kwi", "Kwi", "Kyun", "Kul", "Kum", "Na", "Na", "Na", "La", "Na", "Na", "Na", "Na", "Na", "Nak", "Nak", "Nak", "Nak", "Nak", "Nak", "Nak", "Nan", "Nan", "Nan", "Nan", "Nan", "Nan", "Nam", "Nam", "Nam", "Nam", "Nap", "Nap", "Nap", "Nang", "Nang", "Nang", "Nang", "Nang", "Nay", "Nayng", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "Nok", "Nok", "Nok", "Nok", "Nok", "Nok", "Non", "Nong", "Nong", "Nong", "Nong", "Noy", "Noy", "Noy", "Noy", "Nwu", "Nwu", "Nwu", "Nwu", "Nwu", "Nwu", "Nwu", "Nwu", "Nuk", "Nuk", "Num", "Nung", "Nung", "Nung", "Nung", "Nung", "Twu", "La", "Lak", "Lak", "Lan", "Lyeng", "Lo", "Lyul", "Li", "Pey", "Pen", "Pyen", "Pwu", "Pwul", "Pi", "Sak", "Sak", "Sam", "Sayk", "Sayng", "Sep", "Sey", "Sway", "Sin", "Sim", "Sip", "Ya", "Yak", "Yak", "Yang", "Yang", "Yang", "Yang", "Yang", "Yang", "Yang", "Yang", "Ye", "Ye", "Ye", "Ye", "Ye", "Ye", "Ye", "Ye", "Ye", "Ye", "Ye", "Yek", "Yek", "Yek", "Yek", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yen", "Yel", "Yel", "Yel", "Yel", "Yel", "Yel", "Yem", "Yem", "Yem", "Yem", "Yem", "Yep", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yeng", "Yey", "Yey", "Yey", "Yey", "O", "Yo", "Yo", "Yo", "Yo", "Yo", "Yo", "Yo", "Yo", "Yo", "Yo", "Yong", "Wun", "Wen", "Yu", "Yu", "Yu", "Yu", "Yu", "Yu", "Yu", "Yu", "Yu", "Yu", "Yuk", "Yuk", "Yuk", "Yun", "Yun", "Yun", "Yun", "Yul", "Yul", "Yul", "Yul", "Yung", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "Ik", "Ik", "In", "In", "In", "In", "In", "In", "In", "Im", "Im", "Im", "Ip", "Ip", "Ip", "Cang", "Cek", "Ci", "Cip", "Cha", "Chek"], ["Chey", "Thak", "Thak", "Thang", "Thayk", "Thong", "Pho", "Phok", "Hang", "Hang", "Hyen", "Hwak", "Wu", "Huo", , , "Zhong", , "Qing", , , "Xi", "Zhu", "Yi", "Li", "Shen", "Xiang", "Fu", "Jing", "Jing", "Yu", , "Hagi", , "Zhu", , , "Yi", "Du", , , , "Fan", "Si", "Guan"], ["ff", "fi", "fl", "ffi", "ffl", "st", "st", , , , , , , , , , , , , "mn", "me", "mi", "vn", "mkh", , , , , , "yi", , "ay", "`", , "d", "h", "k", "l", "m", "m", "t", "+", "sh", "s", "sh", "s", "a", "a", , "b", "g", "d", "h", "v", "z", , "t", "y", "k", "k", "l", , "l", , "n", "n", , "p", "p", , "ts", "ts", "r", "sh", "t", "vo", "b", "k", "p", "l"], [], [], [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , "~", , , , , , , , , , , , , "..", "--", "-", "_", "_", "(", ") ", "{", "} ", "[", "] ", "[(", ")] ", "<<", ">> ", "<", "> ", "[", "] ", "{", "}", , , , , , , , , , , , ",", ",", ".", , ";", ":", "?", "!", "-", "(", ")", "{", "}", "{", "}", "#", "&", "*", "+", "-", "<", ">", "=", , "\\", "$", "%", "@"], [, "!", '"', "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "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", "[", "\\", "]", "^", "_", "`", "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", "{", "|", "}", "~", , , ".", "[", "]", ",", "*", "wo", "a", "i", "u", "e", "o", "ya", "yu", "yo", "tu", "+", "a", "i", "u", "e", "o", "ka", "ki", "ku", "ke", "ko", "sa", "si", "su", "se", "so", "ta", "ti", "tu", "te", "to", "na", "ni", "nu", "ne", "no", "ha", "hi", "hu", "he", "ho", "ma", "mi", "mu", "me", "mo", "ya", "yu", "yo", "ra", "ri", "ru", "re", "ro", "wa", "n", ":", ";", , "g", "gg", "gs", "n", "nj", "nh", "d", "dd", "r", "lg", "lm", "lb", "ls", "lt", "lp", "rh", "m", "b", "bb", "bs", "s", "ss", , "j", "jj", "c", "k", "t", "p", "h", , , , "a", "ae", "ya", "yae", "eo", "e", , , "yeo", "ye", "o", "wa", "wae", "oe", , , "yo", "u", "weo", "we", "wi", "yu", , , "eu", "yi", "i", , , , "/C", "PS", "!", "-", "|", "Y=", "W=", , "|", "-", "|", "-", "|", "#", "O", , , , , , , , , , , "{", "|", "}"]]; const i = {}; for (let n2 = 0; n2 < a.length; n2++) for (let e2 = 0; e2 < a[n2].length; e2++) { const u2 = a[n2][e2]; if ("string" == typeof u2 && u2.length) { const a2 = String.fromCharCode((n2 << 8) + e2); i[a2] = u2; } } function n(a2) { return (a2 || "").replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } function e$1(a2) { return /[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DBF\u4E00-\u9FFC\uF900-\uFA6D\uFA70-\uFAD9]|\uD81B[\uDFF0\uDFF1]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]/.test(a2); } function u(a2) { return /[\s!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/.test(a2); } function o(a2) { switch (true) { case a2 instanceof Array: const i2 = []; for (let n3 = 0; n3 < a2.length; n3++) i2[n3] = o(a2[n3]); return i2; case a2 instanceof Date: return new Date(a2.valueOf()); case a2 instanceof RegExp: return new RegExp(a2.source, a2.flags); case a2 instanceof Object: const n2 = {}; for (const i3 in a2) Object.prototype.hasOwnProperty.call(a2, i3) && (n2[i3] = o(a2[i3])); return n2; default: return a2; } } function g(a2, i2) { if (0 === i2.length) return false; const n2 = Math.floor(i2.length / 2); switch (function(a3, i3) { switch (true) { case a3 < i3[0]: return -1; case a3 > i3[1]: return 1; } return 0; }(a2, i2[n2])) { case -1: return g(a2, i2.slice(0, n2)); case 1: return g(a2, i2.slice(n2 + 1)); } return true; } function h(a2, i2, e2, u2 = []) { const o2 = u2.length ? RegExp(u2.map(n).join("|"), "g") : null, g2 = RegExp(i2.source, i2.flags.replace("g", "") + "g"); let h2 = "", s2 = 0; for (; ; ) { const i3 = g2.exec(a2); let n2 = "", u3 = 0; if (!i3) { h2 += a2.substring(s2, a2.length); break; } for (; ; ) { const a3 = o2 ? o2.exec(i3[0]) : null; if (!a3) { n2 += i3[0].length > u3 ? e2 : ""; break; } n2 += a3.index > u3 ? e2 : "", n2 += a3[0], u3 = o2.lastIndex; } h2 += a2.substring(s2, i3.index) + n2, s2 = g2.lastIndex; } return h2; } a = void 0; const s = { ignore: [], replace: [], replaceAfter: [], trim: false, unknown: "", fixChineseSpacing: true }; class y { constructor(a2 = o(s), n2 = i) { this.confOptions = a2, this.map = n2; } get options() { return o(Object.assign(Object.assign({}, s), this.confOptions)); } config(a2, i2 = false) { return i2 && (this.confOptions = {}), a2 && "object" == typeof a2 && (this.confOptions = o(a2)), this.confOptions; } codeMapReplace(a2, i2 = [], n2) { let o2 = 0, h2 = ""; const s2 = n2.fixChineseSpacing && e$1(a2); let y2 = false; for (let l2 = 0; l2 < a2.length; l2++) { const b2 = /[\uD800-\uDBFF]/.test(a2[l2]) && /[\uDC00-\uDFFF]/.test(a2[l2 + 1]) ? a2[l2] + a2[l2 + 1] : a2[l2]; let w2, j2 = false; switch (true) { case g(o2, i2): case (2 === b2.length && g(o2 + 1, i2)): w2 = b2, i2.find((a3) => a3[1] >= o2 && a3[0] === o2) || (j2 = true); break; default: w2 = this.map[b2] || n2.unknown || ""; } s2 && (!y2 || j2 || u(w2) || (w2 = " " + w2), y2 = !!w2 && e$1(b2)), h2 += w2, o2 += b2.length, l2 += b2.length - 1; } return h2; } formatReplaceOption(a2) { if (a2 instanceof Array) return o(a2); const i2 = []; for (const n2 in a2) Object.prototype.hasOwnProperty.call(a2, n2) && i2.push([n2, a2[n2]]); return i2; } replaceString(a2, i2, e2 = []) { const u2 = o(i2); let g2 = a2; for (let a3 = 0; a3 < u2.length; a3++) { const i3 = u2[a3]; switch (true) { case i3[0] instanceof RegExp: i3[0] = RegExp(i3[0].source, i3[0].flags.replace("g", "") + "g"); break; case ("string" == typeof i3[0] && i3[0].length > 0): i3[0] = RegExp(n(i3[0]), "g"); break; default: i3[0] = /[^\s\S]/; } g2 = h(g2, i3[0], i3[1], e2); } return g2; } setData(a2, n2 = false) { if (n2 && (this.map = o(i)), a2 && "object" == typeof a2 && Object.keys(a2).length) { this.map = o(this.map); for (const i2 in a2) Object.prototype.hasOwnProperty.call(a2, i2) && i2.length < 3 && i2 <= "\u{10FFFF}" && (this.map[i2] = a2[i2]); } return this.map; } transliterate(a2, i2) { i2 = "object" == typeof i2 ? i2 : {}; const n2 = o(Object.assign(Object.assign({}, this.options), i2)); let e2 = "string" == typeof a2 ? a2 : String(a2); const u2 = this.formatReplaceOption(n2.replace); u2.length && (e2 = this.replaceString(e2, u2, n2.ignore)); const g2 = n2.ignore && n2.ignore.length > 0 ? function(a3, i3) { let n3 = []; for (let e4 = 0; e4 < i3.length; e4++) { const u4 = i3[e4]; let o2 = -1; for (; (o2 = a3.indexOf(u4, o2 + 1)) > -1; ) n3.push([o2, o2 + u4.length - 1]); } const e3 = n3.sort((a4, i4) => a4[0] - i4[0] || a4[1] - i4[1]); let u3; return n3 = [], e3.forEach((a4) => !u3 || a4[0] > u3[1] + 1 ? n3.push(u3 = a4) : a4[1] > u3[1] && (u3[1] = a4[1])), n3; }(e2, n2.ignore) : []; e2 = this.codeMapReplace(e2, g2, n2), n2.trim && (e2 = e2.trim()); const h2 = this.formatReplaceOption(n2.replaceAfter); return h2.length && (e2 = this.replaceString(e2, h2)), e2; } } const l = Object.assign(Object.assign({}, o(s)), { allowedChars: "a-zA-Z0-9-_.~", lowercase: true, separator: "-", uppercase: false, fixChineseSpacing: true }); const b = new y(), w = b.transliterate.bind(b); w.config = b.config.bind(b), w.setData = b.setData.bind(b); const j$1 = new class extends y { get options() { return o(Object.assign(Object.assign({}, l), this.confOptions)); } config(a2, i2 = false) { return i2 && (this.confOptions = {}), a2 && "object" == typeof a2 && (this.confOptions = o(a2)), this.confOptions; } slugify(a2, i2) { i2 = "object" == typeof i2 ? i2 : {}; const e2 = o(Object.assign(Object.assign({}, this.options), i2)), u2 = e2.separator ? n(e2.separator) : ""; let g2 = this.transliterate(a2, e2); return g2 = h(g2, RegExp(`[^${e2.allowedChars}]+`, "g"), e2.separator, e2.ignore), u2 && (g2 = g2.replace(RegExp(`^${u2}+|${u2}$`, "g"), "")), e2.lowercase && (g2 = g2.toLowerCase()), e2.uppercase && (g2 = g2.toUpperCase()), g2; } }(), d$1 = j$1.slugify.bind(j$1); d$1.config = j$1.config.bind(j$1), d$1.setData = j$1.setData.bind(j$1); const kInvalidCiteKeyChars = /[\][\s@',\\#}{~%&$^_]/g; const kCiteIdLeadingLength = 8; function createUniqueCiteId(existingIds, baseId) { let count = 0; let asciiOnlyBaseId = ""; const isHanzi = (char2) => { return char2 >= 13312 && char2 <= 40895; }; for (let i2 = 0; i2 < baseId.length; i2++) { const char2 = baseId.charCodeAt(i2); if (char2 <= 255) { asciiOnlyBaseId = asciiOnlyBaseId + String.fromCharCode(char2); } else if (isHanzi(char2)) { asciiOnlyBaseId = asciiOnlyBaseId + webPinyin.exports(String.fromCharCode(char2)); } else { asciiOnlyBaseId = asciiOnlyBaseId + w(String.fromCharCode(char2)); } } if (asciiOnlyBaseId.length === 0) { asciiOnlyBaseId = "cite"; } let safeBaseId = asciiOnlyBaseId.replace(kInvalidCiteKeyChars, ""); let proposedId = safeBaseId; const disambiguationStartCharacter = 97; while (existingIds.includes(proposedId)) { if (count !== 0 && count % 26 === 0) { safeBaseId = safeBaseId + String.fromCharCode(disambiguationStartCharacter); } const postfix = String.fromCharCode(disambiguationStartCharacter + count % 26); proposedId = safeBaseId + postfix; count++; } return proposedId; } function suggestCiteId$2(existingIds, csl) { const author = csl.author; const issued = csl.issued; let citeIdLeading = ""; if (author && author.length > 0) { if (author[0].family) { citeIdLeading = author[0].family; } else if (author[0].literal) { citeIdLeading = author[0].literal; } } if (citeIdLeading.length === 0) { const shortTitle = csl["short-title"]; if (shortTitle && (shortTitle == null ? void 0 : shortTitle.length) > 0) { citeIdLeading = shortTitle.substr(0, Math.min(kCiteIdLeadingLength, shortTitle.length)); } else if (csl.title) { citeIdLeading = csl.title.substr(0, Math.min(kCiteIdLeadingLength, csl.title.length)); } else { citeIdLeading = csl.type; } } let datePart = ""; if (issued && issued["date-parts"] && issued["date-parts"].length > 0) { const yearIssued = issued["date-parts"][0][0]; if (yearIssued) { datePart = yearIssued + ""; } } let baseId = `${citeIdLeading.toLowerCase()}${datePart}`; if (baseId.length === 0) { baseId = "untitled"; } return createUniqueCiteId(existingIds, baseId); } function urlForCitation(csl) { if (csl.URL) { return csl.URL; } else if (csl.DOI) { return urlForDOI(csl.DOI); } else { return void 0; } } function formatForPreview(csl) { const pairs2 = new Array(); if (csl.title) { pairs2.push({ name: "Title", value: csl.title }); } pairs2.push({ name: "Authors", value: formatAuthors$2(csl.author, 255) }); if (csl.issued && isValidDate(csl.issued)) { pairs2.push({ name: "Issue Date", value: formatIssuedDate(csl.issued) }); } const containerTitle = csl["container-title"]; if (containerTitle) { pairs2.push({ name: "Publication", value: containerTitle }); } const volume = csl.volume; if (volume) { pairs2.push({ name: "Volume", value: volume }); } const page = csl.page; if (page) { pairs2.push({ name: "Page(s)", value: page }); } const cslAny = csl; Object.keys(csl).forEach((key2) => { if (!kFilteredFields.includes(key2)) { const value = cslAny[key2]; if (typeof value === "string") { const name = key2.charAt(0).toUpperCase() + key2.slice(1); pairs2.push({ name, value }); } } }); return pairs2; } const kFilteredFields = [ "id", "title", "author", "issued", "container-title", "volume", "page", "abstract", "provider" ]; function isValidDate(date) { const dateParts = date["date-parts"]; if (dateParts) { const invalidElement = dateParts.find((datePart) => datePart[0] === null); return invalidElement === void 0; } return true; } const kEtAl = "et al."; function formatAuthors$2(authors, maxLength) { if (!authors || authors.length === 0) { return ""; } return authors.map((author) => { var _a, _b, _c, _d; if ((_a = author.literal) == null ? void 0 : _a.length) { return author.literal; } else if (((_b = author.given) == null ? void 0 : _b.length) && ((_c = author.family) == null ? void 0 : _c.length)) { return `${author.family}, ${author.given.substring(0, 1)}`; } else if ((_d = author.family) == null ? void 0 : _d.length) { return `${author.family}`; } else { return ""; } }).reduce((previous2, current, index2, array) => { if (maxLength && previous2.length >= maxLength || previous2.endsWith(kEtAl)) { return previous2; } if (index2 === 0) { if (maxLength && current.length > maxLength) { return `${current.substring(0, maxLength - 1)}\u2026`; } return current; } else if (index2 > 0 && index2 === array.length - 1) { return addAuthorOrEtAl(previous2, `${previous2}, and ${current}`, maxLength); } else { return addAuthorOrEtAl(previous2, `${previous2}, ${current}`, maxLength); } }); } function addAuthorOrEtAl(previousAuthorStr, newAuthorStr, maxLength) { if (maxLength && newAuthorStr.length > maxLength) { return etAl(previousAuthorStr, maxLength); } return newAuthorStr; } function etAl(authorStr, maxLength) { const etAlStr = `${authorStr} ${kEtAl}`; if (maxLength && etAlStr.length > maxLength) { const lastSpace = authorStr.lastIndexOf(" "); if (lastSpace) { return `${authorStr.substr(0, lastSpace)} ${kEtAl}`; } else { const excessLength = etAlStr.length - maxLength - 1; return `${authorStr.substr(0, authorStr.length - excessLength)}\u2026 ${kEtAl}`; } } return etAlStr; } function formatIssuedDate(date) { if (!date) { return ""; } const dateParts = date["date-parts"]; if (dateParts) { switch (dateParts.length) { case 2: return `${dateParts[0][0]}-${dateParts[1][0]}`; case 1: { const singleDatePart = dateParts[0][0]; return `${singleDatePart ? singleDatePart : ""}`; } case 0: default: return ""; } } return ""; } function citeUI(citeProps) { if (citeProps.csl) { const suggestedId = suggestCiteId$2(citeProps.existingIds, citeProps.csl); const previewFields = formatForPreview(citeProps.csl); return { suggestedId, previewFields }; } else { return { suggestedId: "", previewFields: [] }; } } function attrInputToProps(attr) { const classes = attr.classes ? attr.classes.split(/\s+/) : []; let keyvalue; if (attr.keyvalue || attr.style) { let text2 = attr.keyvalue || ""; if (attr.style) { text2 += ` style=${attr.style} `; } keyvalue = pandocAttrKeyvalueFromText(text2, "\n"); } return { id: asPandocId(attr.id || ""), classes: classes.map(asPandocClass), keyvalue: keyvalue || [] }; } function asHtmlId(id2) { if (id2) { if (id2.startsWith("#")) { return id2; } else { return "#" + id2; } } else { return id2; } } function asPandocId(id2) { return id2.replace(/^#/, ""); } function asPandocClass(clz) { return clz.replace(/^\./, ""); } function attrPropsToInput(attr) { let style = ""; let keyvalue = ""; if (attr.keyvalue) { const partitionedKeyvalue = attrPartitionKeyvalue([kStyleAttrib], attr.keyvalue); if (partitionedKeyvalue.partitioned.length > 0) { style = partitionedKeyvalue.partitioned[0][1]; } keyvalue = attrTextFromKeyvalue(partitionedKeyvalue.base); } return { id: asHtmlId(attr.id) || "", classes: attr.classes ? attr.classes.map(asHtmlClass).join(" ") : "", style, keyvalue }; } function attrTextFromKeyvalue(keyvalue) { return keyvalue.map((kv) => `${kv[0]}=${kv[1]}`).join("\n"); } function asHtmlClass(clz) { if (clz) { if (clz.startsWith(".")) { return clz; } else { return "." + clz; } } else { return clz; } } const kQuoteType = 0; const kQuoteChildren = 1; var QuoteType = /* @__PURE__ */ ((QuoteType2) => { QuoteType2["SingleQuote"] = "SingleQuote"; QuoteType2["DoubleQuote"] = "DoubleQuote"; return QuoteType2; })(QuoteType || {}); const kMathType = 0; const kMathContent = 1; const kMathId = 2; var MathType = /* @__PURE__ */ ((MathType2) => { MathType2["Inline"] = "InlineMath"; MathType2["Display"] = "DisplayMath"; return MathType2; })(MathType || {}); function editorMath(uiMath) { return { typeset: (el2, math, priority) => { return new Promise((resolve) => { if (el2.isConnected) { uiMath.typeset(el2, math, priority).then(resolve); } else { const timerId = window.setInterval(() => { if (el2.isConnected) { clearInterval(timerId); uiMath.typeset(el2, math, priority).then(resolve); } }, 100); } }); } }; } function delimiterForType(type2) { if (type2 === "InlineMath") { return "$"; } else { return "$$"; } } function stringifyMath(tok) { const delimter = delimiterForType(tok.c[kMathType].t); return delimter + tok.c[kMathContent] + delimter; } function mathTypeIsActive(state, type2) { const schema2 = state.schema; return markIsActive(state, schema2.marks.math) && getMarkAttrs(state.doc, state.selection, schema2.marks.math).type === type2; } const kCodeAttr = 0; const kCodeText = 1; function codeNodeSpec() { return { content: "text*", group: "block", marks: "", code: true, defining: true, isolating: true }; } function codeViewClipboardPlugin(codeViews) { return new Plugin({ key: new PluginKey("code-view-clipboard"), props: { clipboardTextParser: (text2, $context) => { for (const codeViewType of Object.keys(codeViews)) { const codeView = codeViews[codeViewType]; if (codeView.createFromPastePattern && codeView.createFromPastePattern.test(text2)) { const schema2 = $context.node().type.schema; const nodeType = schema2.nodes[codeViewType]; if (canInsertNodeAtPos($context, nodeType)) { const textNode = schema2.text(text2); const codeNode = nodeType.createAndFill({}, textNode); return new Slice(Fragment.from(codeNode), 0, 0); } } } return null; } } }); } function pasteTransaction(state) { const tr = state.tr; tr.setMeta(kPasteTransaction, true); tr.setMeta("uiEvent", "paste"); return tr; } function markPasteHandler(regexp2, type2, getAttrs) { const handler = (fragment) => { regexp2.lastIndex = 0; const nodes2 = []; fragment.forEach((child) => { if (child.isText) { const { text: text2 } = child; let pos = 0; let match2; do { match2 = regexp2.exec(text2); if (match2) { const start = match2.index; const end = start + match2[0].length; const matchText = match2.length > 1 ? match2[1] : match2[0]; const attrs = getAttrs instanceof Function ? getAttrs(matchText) : getAttrs; if (start > 0) { nodes2.push(child.cut(pos, start)); } nodes2.push(type2.schema.text(matchText).mark(type2.create(attrs).addToSet(child.marks))); pos = end; } } while (match2); if (pos < text2.length) { nodes2.push(child.cut(pos)); } } else { nodes2.push(child.copy(handler(child.content))); } }); regexp2.lastIndex = 0; return Fragment.fromArray(nodes2); }; return (slice2) => new Slice(handler(slice2.content), slice2.openStart, slice2.openEnd); } const kLinkTargetUrl = 0; const kLinkTargetTitle = 1; const kLinkAttr = 0; const kLinkChildren = 1; const kLinkTarget = 2; const kLinkRegex = /(?:<)?([a-z]+:\/\/[^\s>]+)(?:>)?/; function isLink(text2) { return kLinkRegex.test(text2); } async function linkTargets(doc2) { const ids = findChildren_1(doc2, (node2) => !!node2.attrs.id).map((value) => value.node.attrs.id); const headings = findChildrenByType_1(doc2, doc2.type.schema.nodes.heading).map((heading) => ({ level: heading.node.attrs.level, text: heading.node.textContent })); return { ids, headings }; } function linkPasteHandler(schema2) { return markPasteHandler( new RegExp(kLinkRegex.source, "g"), schema2.marks.link, (url2) => ({ href: url2 }) ); } function imageAttributesAvailable(pandocExtensions) { return pandocExtensions.link_attributes || pandocExtensions.raw_html; } function parsePandocListOutput(output) { return output.split(/\r?\n/).filter((entry) => entry.length); } var PandocTokenType = /* @__PURE__ */ ((PandocTokenType2) => { PandocTokenType2["Str"] = "Str"; PandocTokenType2["Space"] = "Space"; PandocTokenType2["Strong"] = "Strong"; PandocTokenType2["Emph"] = "Emph"; PandocTokenType2["Code"] = "Code"; PandocTokenType2["Superscript"] = "Superscript"; PandocTokenType2["Subscript"] = "Subscript"; PandocTokenType2["Strikeout"] = "Strikeout"; PandocTokenType2["SmallCaps"] = "SmallCaps"; PandocTokenType2["Underline"] = "Underline"; PandocTokenType2["Quoted"] = "Quoted"; PandocTokenType2["RawInline"] = "RawInline"; PandocTokenType2["RawBlock"] = "RawBlock"; PandocTokenType2["LineBlock"] = "LineBlock"; PandocTokenType2["Para"] = "Para"; PandocTokenType2["Plain"] = "Plain"; PandocTokenType2["Header"] = "Header"; PandocTokenType2["CodeBlock"] = "CodeBlock"; PandocTokenType2["BlockQuote"] = "BlockQuote"; PandocTokenType2["BulletList"] = "BulletList"; PandocTokenType2["OrderedList"] = "OrderedList"; PandocTokenType2["DefinitionList"] = "DefinitionList"; PandocTokenType2["Image"] = "Image"; PandocTokenType2["Figure"] = "Figure"; PandocTokenType2["Link"] = "Link"; PandocTokenType2["Note"] = "Note"; PandocTokenType2["Cite"] = "Cite"; PandocTokenType2["Table"] = "Table"; PandocTokenType2["AlignRight"] = "AlignRight"; PandocTokenType2["AlignLeft"] = "AlignLeft"; PandocTokenType2["AlignDefault"] = "AlignDefault"; PandocTokenType2["AlignCenter"] = "AlignCenter"; PandocTokenType2["ColWidth"] = "ColWidth"; PandocTokenType2["ColWidthDefault"] = "ColWidthDefault"; PandocTokenType2["HorizontalRule"] = "HorizontalRule"; PandocTokenType2["LineBreak"] = "LineBreak"; PandocTokenType2["SoftBreak"] = "SoftBreak"; PandocTokenType2["Math"] = "Math"; PandocTokenType2["InlineMath"] = "InlineMath"; PandocTokenType2["DisplayMath"] = "DisplayMath"; PandocTokenType2["Div"] = "Div"; PandocTokenType2["Span"] = "Span"; PandocTokenType2["Null"] = "Null"; return PandocTokenType2; })(PandocTokenType || {}); const kRawBlockFormat = 0; const kRawBlockContent = 1; const kWriteSpaces = "writeSpaces"; const kPreventBracketEscape = "preventBracketEscape"; function stringifyTokens(c, unemoji = false) { return c.map((elem) => { if (elem.t === "Str") { return elem.c; } else if (elem.t === "Space" || elem.t === "SoftBreak" || elem.t === "LineBreak") { return " "; } else if (elem.t === "Link") { return stringifyTokens(elem.c[kLinkChildren]); } else if (elem.t === "Span") { const attr = pandocAttrReadAST(elem, kSpanAttr); if (unemoji && attr.classes && attr.classes[0] === "emoji") { return attr.keyvalue[0][1]; } else { return stringifyTokens(elem.c[kSpanChildren]); } } else if (elem.t === "Quoted") { const type2 = elem.c[kQuoteType].t; const quote = type2 === QuoteType.SingleQuote ? "'" : '"'; return quote + stringifyTokens(elem.c[kQuoteChildren]) + quote; } else if (elem.t === "Math") { return stringifyMath(elem); } else if (elem.t === "Code") { return elem.c[kCodeText]; } else if (elem.c) { return stringifyTokens(elem.c); } else { return ""; } }).join(""); } function forEachToken(tokens2, f2) { mapTokens(tokens2, (tok) => { f2(tok); return tok; }); } function mapTokens(tokens2, f2) { function isToken(val) { if (val !== null && typeof val === "object") { return Object.prototype.hasOwnProperty.call(val, "t"); } else { return false; } } function tokenHasChildren(tok) { return tok !== null && typeof tok === "object" && Array.isArray(tok.c); } function mapValue(val) { if (isToken(val)) { return mapToken(val); } else if (Array.isArray(val)) { return val.map(mapValue); } else { return val; } } function mapToken(tok) { const mappedTok = f2(tok); if (tokenHasChildren(mappedTok)) { mappedTok.c = mappedTok.c.map(mapValue); } return mappedTok; } return tokens2.map(mapToken); } function marksByPriority(marks, markWriters) { return Array.prototype.sort.call(marks, (a2, b2) => { const aPriority = markWriters[a2.type.name].priority; const bPriority = markWriters[b2.type.name].priority; if (aPriority < bPriority) { return 1; } else if (bPriority < aPriority) { return -1; } else { return 0; } }); } async function getPandocCapabilities(server) { const result = await server.getCapabilities(); return { version: result.version, api_version: result.api_version, output_formats: parsePandocListOutput(result.output_formats), highlight_languages: parsePandocListOutput(result.highlight_languages) }; } const kHTMLCommentRegEx = /(?:^|[^`])(<!--([\s\S]*?)-->)/; function isHTMLComment(html2) { return !!html2.match(kHTMLCommentRegEx); } function isSingleLineHTML(html2) { return html2.trimRight().split("\n").length === 1; } function asHTMLTag(tag, attribs, selfClosing = false, noEmptyAttribs = false) { const attribsHTML = Object.keys(attribs).filter((name) => !noEmptyAttribs || attribs[name]).map((name) => `${name}="${escapeHTMLAttribute(String(attribs[name]))}"`).join(" "); return `<${tag} ${attribsHTML}${selfClosing ? "/" : ""}>`; } function escapeHTMLAttribute(value) { return value.replace(/&/g, "&").replace(/'/g, "'").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">"); } function fragmentToHTML(schema2, fragment) { return generateHTML(() => DOMSerializer.fromSchema(schema2).serializeFragment(fragment)); } function generateHTML(generator) { const div2 = document.createElement("div"); const output = generator(); div2.appendChild(output); return div2.innerHTML; } function findValue(key2, object) { if (!object) { return void 0; } let value; Object.keys(object).some((k2) => { if (k2 === key2) { value = object[k2]; return true; } if (object[k2] && typeof object[k2] === "object") { value = findValue(key2, object[k2]); return value !== void 0; } return false; }); return value; } const kMarkdownFormat = "markdown"; const kMarkdownPhpextraFormat = "markdown_phpextra"; const kMarkdownGithubFormat = "markdown_github"; const kMarkdownMmdFormat = "markdown_mmd"; const kMarkdownStrictFormat = "markdown_strict"; const kGfmFormat = "gfm"; const kCommonmarkFormat = "commonmark"; const kCommonmarkXFormat = "commonmark_x"; function matchPandocFormatComment(code2) { const magicCommentRegEx = /^<!--\s+-\*-([\s\S]*?)-\*-\s+-->\s*$/m; return code2.match(magicCommentRegEx); } function pandocFormatConfigFromDoc(doc2, isRmd) { return pandocFormatConfigFromYamlInDoc(doc2, isRmd) || pandocFormatConfigFromCommentInDoc(doc2) || {}; } function pandocFormatConfigFromCode(code2, isRmd) { return pandocFormatConfigFromYamlInCode(code2, isRmd) || pandocFormatConfigFromCommentInCode(code2) || {}; } function pandocFormatConfigFromYamlInCode(code2, isRmd) { var _a; const yaml = firstYamlBlock(code2); if (yaml) { let mdExtensions = isRmd ? findValue("md_extensions", yaml == null ? void 0 : yaml.output) : void 0; if (!mdExtensions) { const from2 = findValue("from", yaml); if (from2) { const fromStr = String(from2); const extensions = fromStr.match(/^\w+([+-][\w+-]+)$/); if (extensions) { mdExtensions = extensions[1]; } } } let yamlFormatConfig; const yamlEditor = yaml == null ? void 0 : yaml.editor; if (yamlEditor && yamlEditor instanceof Object && yamlEditor.markdown && yamlEditor.markdown instanceof Object) { yamlFormatConfig = readPandocFormatConfig(yamlEditor.markdown); } else { const yamlMarkdownOptions = (_a = yaml == null ? void 0 : yaml.editor_options) == null ? void 0 : _a.markdown; if (yamlMarkdownOptions instanceof Object) { yamlFormatConfig = readPandocFormatConfig(yamlMarkdownOptions); } } if (mdExtensions || yamlFormatConfig) { const formatConfig = yamlFormatConfig ? yamlFormatConfig : {}; if (mdExtensions) { formatConfig.extensions = mdExtensions + (formatConfig.extensions || ""); } return formatConfig; } else { return null; } } else { return null; } } function pandocFormatConfigFromYamlInDoc(doc2, isRmd) { const yamlNodes = yamlMetadataNodes(doc2); if (yamlNodes.length > 0) { return pandocFormatConfigFromYamlInCode(yamlNodes[0].node.textContent, isRmd); } else { return null; } } function pandocFormatConfigFromCommentInCode(code2) { const keyValueRegEx = /^([^:]+):\s*(.*)$/; const match2 = matchPandocFormatComment(code2); if (match2) { const comment2 = match2[1]; const fields = comment2.split(/\s*;\s/).map((field) => field.trim()); const variables = {}; fields.forEach((field) => { const keyValueMatch = field.match(keyValueRegEx); if (keyValueMatch) { variables[keyValueMatch[1].trim()] = keyValueMatch[2].trim(); } }); return readPandocFormatConfig(variables); } else { return null; } } function pandocFormatConfigFromCommentInDoc(doc2) { let config = null; let foundFirstRawInline = false; doc2.descendants((node2) => { if (foundFirstRawInline) { return false; } const schema2 = doc2.type.schema; if (node2.isText && schema2.marks.raw_html_comment && schema2.marks.raw_html_comment.isInSet(node2.marks) && node2.attrs.format) { foundFirstRawInline = true; config = pandocFormatConfigFromCommentInCode(node2.textContent); return false; } else { return true; } }); return config; } function readPandocFormatConfig(source) { const asString = (obj) => { if (typeof obj === "string") { return obj; } else if (obj) { return obj.toString(); } else { return ""; } }; const asBoolean = (obj) => { if (typeof obj === "boolean") { return obj; } else { const str2 = asString(obj).toLowerCase(); return str2 === "true" || str2 === "1"; } }; const readWrap = () => { const wrap2 = source.wrap || source.wrap_column || source["fill-column"]; if (wrap2) { return asString(wrap2); } else { return void 0; } }; const formatConfig = {}; if (source.mode) { formatConfig.mode = asString(source.mode); } if (source.extensions) { formatConfig.extensions = asString(source.extensions); } if (source.rmd_extensions) { formatConfig.rmdExtensions = asString(source.rmd_extensions); } formatConfig.wrap = readWrap(); if (source.doctype) { formatConfig.doctypes = asString(source.doctype).split(",").map((str2) => str2.trim()); } if (source.references) { if (typeof source.references === "string") { formatConfig.references_location = source.references; } else { formatConfig.references_location = source.references.location; formatConfig.references_prefix = source.references.prefix; formatConfig.references_links = asBoolean(source.references.links); } } if (source.canonical) { formatConfig.canonical = asBoolean(source.canonical); } return formatConfig; } async function resolvePandocFormat(pandoc, format2) { const kMarkdownVariants = { [kCommonmarkFormat]: commonmarkExtensions(), [kCommonmarkXFormat]: commonmarkXExtensions(), [kGfmFormat]: gfmExtensions(), goldmark: goldmarkExtensions(format2), blackfriday: blackfridayExtensions(format2) }; const warnings = { invalidFormat: "", invalidOptions: [] }; let options = format2.pandocExtensions; let baseName = format2.pandocMode; if (![ kMarkdownFormat, kMarkdownPhpextraFormat, kMarkdownGithubFormat, kMarkdownMmdFormat, kMarkdownStrictFormat, kGfmFormat, kCommonmarkFormat, kCommonmarkXFormat ].concat(Object.keys(kMarkdownVariants)).includes(baseName)) { warnings.invalidFormat = baseName; baseName = "markdown"; } if (kMarkdownVariants[baseName]) { const variant = kMarkdownVariants[baseName]; options = variant.map((option) => `${option}`).join("") + options; baseName = "markdown_strict"; } const formatOptions = await pandoc.listExtensions(baseName); const pandocExtensions = {}; parseExtensions(formatOptions).forEach((option) => { pandocExtensions[option.name] = option.enabled; }); const validOptionNames = parseExtensions(formatOptions).map((option) => option.name); let fullName = baseName; parseExtensions(options).forEach((option) => { if (validOptionNames.includes(option.name)) { fullName += (option.enabled ? "+" : "-") + option.name; pandocExtensions[option.name] = option.enabled; } else { warnings.invalidOptions.push(option.name); } }); return { mode: format2.pandocMode, baseName, fullName, extensions: pandocExtensions, warnings }; } function parseExtensions(options) { options = options.split("\n").join(); const extensions = []; const re2 = /([+-])([a-z_]+)/g; let match2 = re2.exec(options); while (match2) { extensions.push({ name: match2[2], enabled: match2[1] === "+" }); match2 = re2.exec(options); } return extensions; } function pandocFormatWith(format2, prepend, append2) { const split2 = splitPandocFormatString(format2); return `${split2.format}${prepend}${split2.options}${append2}`; } function splitPandocFormatString(format2) { let optionsPos = format2.indexOf("-"); if (optionsPos === -1) { optionsPos = format2.indexOf("+"); } const base2 = optionsPos === -1 ? format2 : format2.substr(0, optionsPos); const options = optionsPos === -1 ? "" : format2.substr(optionsPos); return { format: base2, options }; } function hasFencedCodeBlocks(pandocExtensions) { return pandocExtensions.backtick_code_blocks || pandocExtensions.fenced_code_blocks; } function hasShortcutHeadingLinks(pandocExtensions) { return pandocExtensions.implicit_header_references && pandocExtensions.shortcut_reference_links; } function commonmarkExtensions(rawHTML = true) { const extensions = [ rawHTML ? "+raw_html" : "-raw_html", "+all_symbols_escapable", "+backtick_code_blocks", "+fenced_code_blocks", "+space_in_atx_header", "+intraword_underscores", "+lists_without_preceding_blankline", "+shortcut_reference_links" ]; return extensions; } function commonmarkXExtensions() { const extensions = [ "+pipe_tables", "+raw_html", "+auto_identifiers", "+strikeout", "+task_lists", "+emoji", "+raw_tex", "+smart", "+tex_math_dollars", "+superscript", "+subscript", "+definition_lists", "+footnotes", "+fancy_lists", "+fenced_divs", "+bracketed_spans", "+raw_attribute", "+implicit_header_references" ]; return extensions; } function gfmExtensions() { const extensions = [ ...commonmarkExtensions(), "+auto_identifiers", "+autolink_bare_uris", "+emoji", "+gfm_auto_identifiers", "+pipe_tables", "+strikeout", "+task_lists", "+tex_math_dollars", "+footnotes" ]; return extensions; } function goldmarkExtensions(format2) { const extensions = [ ...commonmarkExtensions(false), "+pipe_tables", "+strikeout", "+autolink_bare_uris", "+task_lists", "+backtick_code_blocks", "+definition_lists", "+footnotes", "+smart", "+yaml_metadata_block" ]; if (includeTexMathDollars(format2)) { extensions.push("+tex_math_dollars"); } return extensions; } function blackfridayExtensions(format2) { const extensions = [ "+intraword_underscores", "+pipe_tables", "+backtick_code_blocks", "+definition_lists", "+footnotes", "+autolink_bare_uris", "+strikeout", "+smart", "+yaml_metadata_block" ]; if (includeTexMathDollars(format2)) { extensions.push("+tex_math_dollars"); } return extensions; } function includeTexMathDollars(format2) { return format2.docTypes.includes(kHugoDocType) || format2.rmdExtensions.blogdownMathInCode; } const kPlatformMac = typeof navigator !== "undefined" ? /Mac/.test(navigator.platform) : false; function baseKeysPlugin(keys2) { const pluginKeys = [ { key: BaseKey.Enter, command: splitBlock }, { key: BaseKey.Enter, command: liftEmptyBlock }, { key: BaseKey.Enter, command: createParagraphNear }, { key: BaseKey.Backspace, command: selectNodeBackward }, { key: BaseKey.Backspace, command: joinBackward }, { key: BaseKey.Backspace, command: deleteSelection }, { key: BaseKey.Backspace, command: clearBlockFormatting() }, { key: BaseKey.Tab, command: ignoreKey }, { key: BaseKey.ShiftTab, command: ignoreKey }, { key: BaseKey.Delete, command: selectNodeForward }, { key: BaseKey.Delete, command: joinForward }, { key: BaseKey.Delete, command: deleteSelection }, kPlatformMac ? { key: BaseKey.Home, command: homeKey } : null, kPlatformMac ? { key: BaseKey.End, command: endKey } : null, { key: BaseKey.ArrowLeft, command: arrowBodyNodeBoundary("left") }, { key: BaseKey.ArrowUp, command: arrowBodyNodeBoundary("up") }, { key: BaseKey.ArrowRight, command: arrowBodyNodeBoundary("right") }, { key: BaseKey.ArrowDown, command: arrowBodyNodeBoundary("down") }, { key: BaseKey.ModArrowDown, command: endTopLevelBodyNodeBoundary() }, { key: BaseKey.CtrlEnd, command: endTopLevelBodyNodeBoundary() }, ...keys2, { key: BaseKey.Backspace, command: undoInputRule } ].filter((x2) => !!x2); const commandMap = {}; for (const baseKey of Object.values(BaseKey)) { commandMap[baseKey] = []; } pluginKeys.forEach((key2) => { if (key2) { commandMap[key2.key].unshift(key2.command); } }); const bindings = {}; for (const baseKey of Object.values(BaseKey)) { const commands = commandMap[baseKey]; for (const subkey of baseKey.split(/\|/)) { bindings[subkey] = chainCommands(...commands); } } return keymap(bindings); } function ignoreKey() { return true; } function homeKey(state, dispatch, view) { const selection = state.selection; const editingNode = editingRootNode(selection); if (editingNode && dispatch && view) { const head = view.coordsAtPos(selection.head); const beginDocPos2 = editingNode.start; for (let pos = selection.from - 1; pos >= beginDocPos2; pos--) { const coords = view.coordsAtPos(pos); if (isOnPreviousLine(head, coords) || pos === beginDocPos2) { const tr = state.tr; setTextSelection_1(pos + 1)(tr); dispatch(tr); break; } } } return true; } function endKey(state, dispatch, view) { const selection = state.selection; const editingNode = editingRootNode(selection); if (editingNode && dispatch && view) { const head = view.coordsAtPos(selection.head); const endDocPos2 = editingNode.start + editingNode.node.nodeSize; for (let pos = selection.from + 1; pos < endDocPos2; pos++) { const coords = view.coordsAtPos(pos); if (isOnNextLine(head, coords) || pos === endDocPos2) { const tr = state.tr; setTextSelection_1(pos - 1)(tr); dispatch(tr); break; } } } return true; } function isOnNextLine(head, pos) { return head.bottom < pos.top; } function isOnPreviousLine(head, pos) { return head.top > pos.bottom; } function arrowBodyNodeBoundary(dir) { return (state, _dispatch, view) => { var _a, _b; if (view && view.endOfTextblock(dir) && selectionIsBodyTopLevel(state.selection)) { const side = dir === "left" || dir === "up" ? -1 : 1; const $head = state.selection.$head; const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side); const currentRootNode = editingRootNodeClosestToPos($head); const nextRootNode = editingRootNodeClosestToPos(nextPos.$head); return ((_a = currentRootNode == null ? void 0 : currentRootNode.node) == null ? void 0 : _a.type) !== ((_b = nextRootNode == null ? void 0 : nextRootNode.node) == null ? void 0 : _b.type); } else { return false; } }; } function endTopLevelBodyNodeBoundary() { return (state, dispatch) => { const editingNode = editingRootNode(state.selection); if (editingNode && selectionIsBodyTopLevel(state.selection)) { if (dispatch) { const tr = state.tr; setTextSelection_1(editingNode.pos + editingNode.node.nodeSize - 2)(tr).scrollIntoView(); dispatch(tr); } return true; } else { return false; } }; } function clearBlockFormatting() { return (state, dispatch) => { if (state.selection.empty) { const nodeTypes = [ state.schema.nodes.blockquote, state.schema.nodes.ordered_list, state.schema.nodes.bullet_list, state.schema.nodes.div, state.schema.nodes.line_block ].filter((x2) => !!x2); const parentNode2 = findParentNodeOfType_1(nodeTypes)(state.selection); if (parentNode2 && parentNode2.node.textContent.length === 0) { if (dispatch) { const tr = state.tr; tr.replaceRangeWith( parentNode2.pos, parentNode2.pos + parentNode2.node.nodeSize, state.schema.nodes.paragraph.create() ); setTextSelection_1(parentNode2.pos)(tr); dispatch(tr); } return true; } } return false; }; } function getEditingOutlineLocation(state) { const itemsWithPos = getDocumentOutline(state).map((nodeWithPos) => { const schema2 = state.schema; const node2 = nodeWithPos.node; const item = { type: kYamlMetadataOutlineItemType, level: 0, title: "", active: false, position: nodeWithPos.pos }; if (node2.type === schema2.nodes.yaml_metadata) { item.type = kYamlMetadataOutlineItemType; item.title = titleFromYamlMetadataNode(node2) || ""; } else if (node2.type === schema2.nodes.rmd_chunk) { item.type = kRmdchunkOutlineItemType; const chunk = rmdChunkEngineAndLabel(node2.textContent); if (chunk) { item.title = chunk.label; } } else if (node2.type === schema2.nodes.heading) { item.type = kHeadingOutlineItemType; item.level = node2.attrs.level; item.title = node2.textContent; } return { item, pos: nodeWithPos.pos }; }); let foundActive = false; const items = []; for (let i2 = itemsWithPos.length - 1; i2 >= 0; i2--) { const item = itemsWithPos[i2].item; if (!foundActive && itemsWithPos[i2].pos < state.selection.from) { item.active = true; foundActive = true; } items.unshift(item); } return { items }; } function getDocumentOutline(state) { const schema2 = state.schema; const bodyNodes = findTopLevelBodyNodes(state.doc, (node2) => { return [ schema2.nodes.yaml_metadata, schema2.nodes.rmd_chunk, schema2.nodes.heading, schema2.nodes.bullet_list, schema2.nodes.ordered_list, schema2.nodes.div ].includes(node2.type); }); const outlineNodes = []; bodyNodes.forEach((bodyNode) => { if ([schema2.nodes.bullet_list, schema2.nodes.ordered_list].includes(bodyNode.node.type)) { findChildrenByType_1(bodyNode.node, schema2.nodes.list_item, false).forEach((listItemNode) => { findChildrenByType_1(listItemNode.node, schema2.nodes.rmd_chunk, false).forEach((rmdChunkNode) => { outlineNodes.push({ node: rmdChunkNode.node, pos: bodyNode.pos + 1 + listItemNode.pos + 1 + rmdChunkNode.pos }); }); }); } else if (schema2.nodes.div === bodyNode.node.type) { findChildren_1( bodyNode.node, (node2) => [schema2.nodes.rmd_chunk, schema2.nodes.heading].includes(node2.type), true ).forEach( (childNode) => { outlineNodes.push({ node: childNode.node, pos: bodyNode.pos + 1 + childNode.pos }); } ); } else { outlineNodes.push(bodyNode); } }); return outlineNodes; } function getOutlineNodes(doc2) { return findTopLevelBodyNodes(doc2, isOutlineNode); } function isOutlineNode(node2) { if (node2.type.spec.attrs) { return Object.prototype.hasOwnProperty.call(node2.type.spec.attrs, "navigation_id"); } else { return false; } } function bodyElement(view) { return view.dom.firstChild; } function isElementVisible(el2) { return !!(el2.offsetWidth || el2.offsetHeight || el2.getClientRects().length); } function elementInnerDimensions(el2) { const cs = getComputedStyle(el2); const asNumber = (x2) => x2 ? parseFloat(x2) : 0; const paddingX = asNumber(cs.paddingLeft) + asNumber(cs.paddingRight); const paddingY = asNumber(cs.paddingTop) + asNumber(cs.paddingBottom); const borderX = asNumber(cs.borderLeftWidth) + asNumber(cs.borderRightWidth); const borderY = asNumber(cs.borderTopWidth) + asNumber(cs.borderBottomWidth); return { width: el2.offsetWidth - paddingX - borderX, height: el2.offsetHeight - paddingY - borderY }; } function onElementRemoved(container, el2, onRemoved) { const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { mutation.removedNodes.forEach((node2) => { if (node2 === el2) { onRemoved(); } }); }); }); observer.observe(container, { attributes: false, childList: true, subtree: true }); } function onNodeAttached(node2, doc2, callback) { const obs = new MutationObserver((mutations) => { for (const mut of mutations) { mut.addedNodes.forEach((x2) => { if (x2 === node2) { obs.disconnect(); callback(node2, mut.target); return; } }); } }); obs.observe(doc2, { childList: true, subtree: true }); return obs; } function getEditingLocation(view) { const pos = view.state.selection.from; const bodyEl = bodyElement(view); const scrollTop = bodyEl.scrollTop; return { pos, scrollTop }; } function setEditingLocation(view, outlineLocation, previousLocation) { const documentOutline = getDocumentOutline(view.state); let docOutlineLocationNode; if (outlineLocation) { for (let i2 = 0; i2 < outlineLocation.items.length && i2 < documentOutline.length; i2++) { const item = outlineLocation.items[i2]; const docOutlineNode = documentOutline[i2]; if (!outlineItemSimillarToNode(item, docOutlineNode.node)) { break; } if (item.active) { if (!locationIsBetweenDocOutlineNodes(docOutlineNode, documentOutline[i2 + 1], previousLocation)) { docOutlineLocationNode = docOutlineNode; if (docOutlineNode.node.type === view.state.schema.nodes.rmd_chunk) { const chunkText = docOutlineNode.node.textContent; const newlineIdx = chunkText.indexOf("\n"); if (newlineIdx !== -1) { docOutlineLocationNode.pos += newlineIdx + 2; } } } break; } } } if (docOutlineLocationNode) { restoreSelection(view, docOutlineLocationNode.pos); scrollToPos(view, docOutlineLocationNode.pos); } else if (previousLocation) { restoreSelection(view, previousLocation.pos); bodyElement(view).scrollTop = previousLocation.scrollTop; } } function outlineItemSimillarToNode(outlineItem, docOutlneNode) { const schema2 = docOutlneNode.type.schema; if (outlineItem.type === kYamlMetadataOutlineItemType) { return docOutlneNode.type === schema2.nodes.yaml_metadata; } else if (outlineItem.type === kRmdchunkOutlineItemType) { return docOutlneNode.type === schema2.nodes.rmd_chunk; } else if (outlineItem.type === kHeadingOutlineItemType) { return docOutlneNode.type === schema2.nodes.heading && docOutlneNode.attrs.level === outlineItem.level; } else { return false; } } function locationIsBetweenDocOutlineNodes(nodeA, nodeB, location) { if (!nodeB || !location) { return false; } return nodeA.pos < location.pos && nodeB.pos > location.pos; } var FixupContext = /* @__PURE__ */ ((FixupContext2) => { FixupContext2[FixupContext2["Load"] = 0] = "Load"; FixupContext2[FixupContext2["Save"] = 1] = "Save"; FixupContext2[FixupContext2["Resize"] = 2] = "Resize"; return FixupContext2; })(FixupContext || {}); const kPercentUnit = "%"; const kPixelUnit = "px"; function removeStyleAttrib(style, attrib, handler) { const pattern = "(" + attrib + ")\\:\\s*([^;]+);?"; const regex2 = new RegExp(pattern, "g"); return style.replace(regex2, (_match, p1, p2) => { if (handler) { handler(p1, p2); } return ""; }); } function extractSizeStyles(keyvalues) { if (!keyvalues) { return keyvalues; } let newKeyvalues = keyvalues; const getValue2 = (key2) => { const pair = newKeyvalues.find((keyvalue) => keyvalue[0] === key2); return pair ? pair[1] : null; }; const setValue = (key2, value) => { newKeyvalues = newKeyvalues.filter((keyvalue) => keyvalue[0] !== key2); if (value) { newKeyvalues.push([key2, value]); } }; let width = getValue2(kWidthAttrib); let height = getValue2(kHeightAttrib); let style = getValue2(kStyleAttrib); if (style) { style = removeStyleAttrib(style, kWidthAttrib, (_attrib, value) => { if (!width) { width = value; } }); style = removeStyleAttrib(style, kHeightAttrib, (_attrib, value) => { if (!height) { height = value; } }); style = style.replace(/^\s*;+\s*/, "").trimLeft(); } setValue(kWidthAttrib, width); setValue(kHeightAttrib, height); setValue(kStyleAttrib, style); return newKeyvalues; } function applyStyles(el2, classes, style) { if (classes) { if (classes) { classes.forEach((clz) => el2.classList.add(clz)); } } if (style) { Object.keys(style).forEach((name) => { el2.style.setProperty(name, style[name]); }); } } const kDpi = 96; const kValidUnits = [kPixelUnit, "in", "cm", "mm", kPercentUnit]; var ImageType = /* @__PURE__ */ ((ImageType2) => { ImageType2[ImageType2["Image"] = 0] = "Image"; ImageType2[ImageType2["Figure"] = 1] = "Figure"; return ImageType2; })(ImageType || {}); function isValidImageSizeUnit(unit) { return kValidUnits.includes(unit); } function imageSizePropWithUnit(prop2) { if (prop2) { const match2 = prop2.match(/(^\d*\.?\d*)(.*)$/); if (match2) { return { size: parseFloat(match2[1]), unit: match2[2] }; } else { return null; } } else { return null; } } function isNaturalAspectRatio(width, height, dims, defaultValue) { if (dims.naturalWidth && dims.naturalHeight) { const diff2 = Math.abs(width / height - dims.naturalWidth / dims.naturalHeight); return diff2 <= 0.01 * (width / height); } else { return defaultValue; } } function unitToPixels(value, unit, containerWidth) { let pixels; switch (unit) { case "in": pixels = value * kDpi; break; case "mm": pixels = value * (kDpi / 25.4); break; case "cm": pixels = value * (kDpi / 2.54); break; case kPercentUnit: pixels = value / 100 * ensureContainerWidth(containerWidth); break; case kPixelUnit: default: pixels = value; break; } return Math.round(pixels); } function pixelsToUnit(pixels, unit, containerWidth) { switch (unit) { case "in": return pixels / kDpi; case "mm": return pixels / kDpi * 25.4; case "cm": return pixels / kDpi * 2.54; case kPercentUnit: return pixels / ensureContainerWidth(containerWidth) * 100; case kPixelUnit: default: return pixels; } } function roundUnit(value, unit) { switch (unit) { case "in": return value.toFixed(2); case "cm": return value.toFixed(1); default: return Math.round(value).toString(); } } function ensureContainerWidth(containerWidth) { return containerWidth || 1e3; } var diffMatchPatch = { exports: {} }; (function(module3) { var diff_match_patch2 = function() { this.Diff_Timeout = 1; this.Diff_EditCost = 4; this.Match_Threshold = 0.5; this.Match_Distance = 1e3; this.Patch_DeleteThreshold = 0.5; this.Patch_Margin = 4; this.Match_MaxBits = 32; }; var DIFF_DELETE = -1; var DIFF_INSERT = 1; var DIFF_EQUAL = 0; diff_match_patch2.Diff = function(op, text2) { return [op, text2]; }; diff_match_patch2.prototype.diff_main = function(text1, text2, opt_checklines, opt_deadline) { if (typeof opt_deadline == "undefined") { if (this.Diff_Timeout <= 0) { opt_deadline = Number.MAX_VALUE; } else { opt_deadline = new Date().getTime() + this.Diff_Timeout * 1e3; } } var deadline = opt_deadline; if (text1 == null || text2 == null) { throw new Error("Null input. (diff_main)"); } if (text1 == text2) { if (text1) { return [new diff_match_patch2.Diff(DIFF_EQUAL, text1)]; } return []; } if (typeof opt_checklines == "undefined") { opt_checklines = true; } var checklines = opt_checklines; var commonlength = this.diff_commonPrefix(text1, text2); var commonprefix = text1.substring(0, commonlength); text1 = text1.substring(commonlength); text2 = text2.substring(commonlength); commonlength = this.diff_commonSuffix(text1, text2); var commonsuffix = text1.substring(text1.length - commonlength); text1 = text1.substring(0, text1.length - commonlength); text2 = text2.substring(0, text2.length - commonlength); var diffs = this.diff_compute_(text1, text2, checklines, deadline); if (commonprefix) { diffs.unshift(new diff_match_patch2.Diff(DIFF_EQUAL, commonprefix)); } if (commonsuffix) { diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, commonsuffix)); } this.diff_cleanupMerge(diffs); return diffs; }; diff_match_patch2.prototype.diff_compute_ = function(text1, text2, checklines, deadline) { var diffs; if (!text1) { return [new diff_match_patch2.Diff(DIFF_INSERT, text2)]; } if (!text2) { return [new diff_match_patch2.Diff(DIFF_DELETE, text1)]; } var longtext = text1.length > text2.length ? text1 : text2; var shorttext = text1.length > text2.length ? text2 : text1; var i2 = longtext.indexOf(shorttext); if (i2 != -1) { diffs = [ new diff_match_patch2.Diff(DIFF_INSERT, longtext.substring(0, i2)), new diff_match_patch2.Diff(DIFF_EQUAL, shorttext), new diff_match_patch2.Diff( DIFF_INSERT, longtext.substring(i2 + shorttext.length) ) ]; if (text1.length > text2.length) { diffs[0][0] = diffs[2][0] = DIFF_DELETE; } return diffs; } if (shorttext.length == 1) { return [ new diff_match_patch2.Diff(DIFF_DELETE, text1), new diff_match_patch2.Diff(DIFF_INSERT, text2) ]; } var hm = this.diff_halfMatch_(text1, text2); if (hm) { var text1_a = hm[0]; var text1_b = hm[1]; var text2_a = hm[2]; var text2_b = hm[3]; var mid_common = hm[4]; var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline); var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline); return diffs_a.concat( [new diff_match_patch2.Diff(DIFF_EQUAL, mid_common)], diffs_b ); } if (checklines && text1.length > 100 && text2.length > 100) { return this.diff_lineMode_(text1, text2, deadline); } return this.diff_bisect_(text1, text2, deadline); }; diff_match_patch2.prototype.diff_lineMode_ = function(text1, text2, deadline) { var a2 = this.diff_linesToChars_(text1, text2); text1 = a2.chars1; text2 = a2.chars2; var linearray = a2.lineArray; var diffs = this.diff_main(text1, text2, false, deadline); this.diff_charsToLines_(diffs, linearray); this.diff_cleanupSemantic(diffs); diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, "")); var pointer = 0; var count_delete = 0; var count_insert = 0; var text_delete = ""; var text_insert = ""; while (pointer < diffs.length) { switch (diffs[pointer][0]) { case DIFF_INSERT: count_insert++; text_insert += diffs[pointer][1]; break; case DIFF_DELETE: count_delete++; text_delete += diffs[pointer][1]; break; case DIFF_EQUAL: if (count_delete >= 1 && count_insert >= 1) { diffs.splice( pointer - count_delete - count_insert, count_delete + count_insert ); pointer = pointer - count_delete - count_insert; var subDiff = this.diff_main(text_delete, text_insert, false, deadline); for (var j2 = subDiff.length - 1; j2 >= 0; j2--) { diffs.splice(pointer, 0, subDiff[j2]); } pointer = pointer + subDiff.length; } count_insert = 0; count_delete = 0; text_delete = ""; text_insert = ""; break; } pointer++; } diffs.pop(); return diffs; }; diff_match_patch2.prototype.diff_bisect_ = function(text1, text2, deadline) { var text1_length = text1.length; var text2_length = text2.length; var max_d = Math.ceil((text1_length + text2_length) / 2); var v_offset = max_d; var v_length = 2 * max_d; var v12 = new Array(v_length); var v2 = new Array(v_length); for (var x2 = 0; x2 < v_length; x2++) { v12[x2] = -1; v2[x2] = -1; } v12[v_offset + 1] = 0; v2[v_offset + 1] = 0; var delta2 = text1_length - text2_length; var front = delta2 % 2 != 0; var k1start = 0; var k1end = 0; var k2start = 0; var k2end = 0; for (var d2 = 0; d2 < max_d; d2++) { if (new Date().getTime() > deadline) { break; } for (var k1 = -d2 + k1start; k1 <= d2 - k1end; k1 += 2) { var k1_offset = v_offset + k1; var x1; if (k1 == -d2 || k1 != d2 && v12[k1_offset - 1] < v12[k1_offset + 1]) { x1 = v12[k1_offset + 1]; } else { x1 = v12[k1_offset - 1] + 1; } var y1 = x1 - k1; while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) == text2.charAt(y1)) { x1++; y1++; } v12[k1_offset] = x1; if (x1 > text1_length) { k1end += 2; } else if (y1 > text2_length) { k1start += 2; } else if (front) { var k2_offset = v_offset + delta2 - k1; if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) { var x22 = text1_length - v2[k2_offset]; if (x1 >= x22) { return this.diff_bisectSplit_(text1, text2, x1, y1, deadline); } } } } for (var k2 = -d2 + k2start; k2 <= d2 - k2end; k2 += 2) { var k2_offset = v_offset + k2; var x22; if (k2 == -d2 || k2 != d2 && v2[k2_offset - 1] < v2[k2_offset + 1]) { x22 = v2[k2_offset + 1]; } else { x22 = v2[k2_offset - 1] + 1; } var y2 = x22 - k2; while (x22 < text1_length && y2 < text2_length && text1.charAt(text1_length - x22 - 1) == text2.charAt(text2_length - y2 - 1)) { x22++; y2++; } v2[k2_offset] = x22; if (x22 > text1_length) { k2end += 2; } else if (y2 > text2_length) { k2start += 2; } else if (!front) { var k1_offset = v_offset + delta2 - k2; if (k1_offset >= 0 && k1_offset < v_length && v12[k1_offset] != -1) { var x1 = v12[k1_offset]; var y1 = v_offset + x1 - k1_offset; x22 = text1_length - x22; if (x1 >= x22) { return this.diff_bisectSplit_(text1, text2, x1, y1, deadline); } } } } } return [ new diff_match_patch2.Diff(DIFF_DELETE, text1), new diff_match_patch2.Diff(DIFF_INSERT, text2) ]; }; diff_match_patch2.prototype.diff_bisectSplit_ = function(text1, text2, x2, y2, deadline) { var text1a = text1.substring(0, x2); var text2a = text2.substring(0, y2); var text1b = text1.substring(x2); var text2b = text2.substring(y2); var diffs = this.diff_main(text1a, text2a, false, deadline); var diffsb = this.diff_main(text1b, text2b, false, deadline); return diffs.concat(diffsb); }; diff_match_patch2.prototype.diff_linesToChars_ = function(text1, text2) { var lineArray = []; var lineHash = {}; lineArray[0] = ""; function diff_linesToCharsMunge_(text3) { var chars = ""; var lineStart = 0; var lineEnd = -1; var lineArrayLength = lineArray.length; while (lineEnd < text3.length - 1) { lineEnd = text3.indexOf("\n", lineStart); if (lineEnd == -1) { lineEnd = text3.length - 1; } var line2 = text3.substring(lineStart, lineEnd + 1); if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line2) : lineHash[line2] !== void 0) { chars += String.fromCharCode(lineHash[line2]); } else { if (lineArrayLength == maxLines) { line2 = text3.substring(lineStart); lineEnd = text3.length; } chars += String.fromCharCode(lineArrayLength); lineHash[line2] = lineArrayLength; lineArray[lineArrayLength++] = line2; } lineStart = lineEnd + 1; } return chars; } var maxLines = 4e4; var chars1 = diff_linesToCharsMunge_(text1); maxLines = 65535; var chars2 = diff_linesToCharsMunge_(text2); return { chars1, chars2, lineArray }; }; diff_match_patch2.prototype.diff_charsToLines_ = function(diffs, lineArray) { for (var i2 = 0; i2 < diffs.length; i2++) { var chars = diffs[i2][1]; var text2 = []; for (var j2 = 0; j2 < chars.length; j2++) { text2[j2] = lineArray[chars.charCodeAt(j2)]; } diffs[i2][1] = text2.join(""); } }; diff_match_patch2.prototype.diff_commonPrefix = function(text1, text2) { if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) { return 0; } var pointermin = 0; var pointermax = Math.min(text1.length, text2.length); var pointermid = pointermax; var pointerstart = 0; while (pointermin < pointermid) { if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) { pointermin = pointermid; pointerstart = pointermin; } else { pointermax = pointermid; } pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } return pointermid; }; diff_match_patch2.prototype.diff_commonSuffix = function(text1, text2) { if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) { return 0; } var pointermin = 0; var pointermax = Math.min(text1.length, text2.length); var pointermid = pointermax; var pointerend = 0; while (pointermin < pointermid) { if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) { pointermin = pointermid; pointerend = pointermin; } else { pointermax = pointermid; } pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } return pointermid; }; diff_match_patch2.prototype.diff_commonOverlap_ = function(text1, text2) { var text1_length = text1.length; var text2_length = text2.length; if (text1_length == 0 || text2_length == 0) { return 0; } if (text1_length > text2_length) { text1 = text1.substring(text1_length - text2_length); } else if (text1_length < text2_length) { text2 = text2.substring(0, text1_length); } var text_length = Math.min(text1_length, text2_length); if (text1 == text2) { return text_length; } var best = 0; var length2 = 1; while (true) { var pattern = text1.substring(text_length - length2); var found2 = text2.indexOf(pattern); if (found2 == -1) { return best; } length2 += found2; if (found2 == 0 || text1.substring(text_length - length2) == text2.substring(0, length2)) { best = length2; length2++; } } }; diff_match_patch2.prototype.diff_halfMatch_ = function(text1, text2) { if (this.Diff_Timeout <= 0) { return null; } var longtext = text1.length > text2.length ? text1 : text2; var shorttext = text1.length > text2.length ? text2 : text1; if (longtext.length < 4 || shorttext.length * 2 < longtext.length) { return null; } var dmp2 = this; function diff_halfMatchI_(longtext2, shorttext2, i2) { var seed = longtext2.substring(i2, i2 + Math.floor(longtext2.length / 4)); var j2 = -1; var best_common = ""; var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b; while ((j2 = shorttext2.indexOf(seed, j2 + 1)) != -1) { var prefixLength = dmp2.diff_commonPrefix( longtext2.substring(i2), shorttext2.substring(j2) ); var suffixLength = dmp2.diff_commonSuffix( longtext2.substring(0, i2), shorttext2.substring(0, j2) ); if (best_common.length < suffixLength + prefixLength) { best_common = shorttext2.substring(j2 - suffixLength, j2) + shorttext2.substring(j2, j2 + prefixLength); best_longtext_a = longtext2.substring(0, i2 - suffixLength); best_longtext_b = longtext2.substring(i2 + prefixLength); best_shorttext_a = shorttext2.substring(0, j2 - suffixLength); best_shorttext_b = shorttext2.substring(j2 + prefixLength); } } if (best_common.length * 2 >= longtext2.length) { return [ best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common ]; } else { return null; } } var hm1 = diff_halfMatchI_( longtext, shorttext, Math.ceil(longtext.length / 4) ); var hm2 = diff_halfMatchI_( longtext, shorttext, Math.ceil(longtext.length / 2) ); var hm; if (!hm1 && !hm2) { return null; } else if (!hm2) { hm = hm1; } else if (!hm1) { hm = hm2; } else { hm = hm1[4].length > hm2[4].length ? hm1 : hm2; } var text1_a, text1_b, text2_a, text2_b; if (text1.length > text2.length) { text1_a = hm[0]; text1_b = hm[1]; text2_a = hm[2]; text2_b = hm[3]; } else { text2_a = hm[0]; text2_b = hm[1]; text1_a = hm[2]; text1_b = hm[3]; } var mid_common = hm[4]; return [text1_a, text1_b, text2_a, text2_b, mid_common]; }; diff_match_patch2.prototype.diff_cleanupSemantic = function(diffs) { var changes = false; var equalities = []; var equalitiesLength = 0; var lastEquality = null; var pointer = 0; var length_insertions1 = 0; var length_deletions1 = 0; var length_insertions2 = 0; var length_deletions2 = 0; while (pointer < diffs.length) { if (diffs[pointer][0] == DIFF_EQUAL) { equalities[equalitiesLength++] = pointer; length_insertions1 = length_insertions2; length_deletions1 = length_deletions2; length_insertions2 = 0; length_deletions2 = 0; lastEquality = diffs[pointer][1]; } else { if (diffs[pointer][0] == DIFF_INSERT) { length_insertions2 += diffs[pointer][1].length; } else { length_deletions2 += diffs[pointer][1].length; } if (lastEquality && lastEquality.length <= Math.max(length_insertions1, length_deletions1) && lastEquality.length <= Math.max( length_insertions2, length_deletions2 )) { diffs.splice( equalities[equalitiesLength - 1], 0, new diff_match_patch2.Diff(DIFF_DELETE, lastEquality) ); diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; equalitiesLength--; equalitiesLength--; pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; length_insertions1 = 0; length_deletions1 = 0; length_insertions2 = 0; length_deletions2 = 0; lastEquality = null; changes = true; } } pointer++; } if (changes) { this.diff_cleanupMerge(diffs); } this.diff_cleanupSemanticLossless(diffs); pointer = 1; while (pointer < diffs.length) { if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) { var deletion = diffs[pointer - 1][1]; var insertion = diffs[pointer][1]; var overlap_length1 = this.diff_commonOverlap_(deletion, insertion); var overlap_length2 = this.diff_commonOverlap_(insertion, deletion); if (overlap_length1 >= overlap_length2) { if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) { diffs.splice(pointer, 0, new diff_match_patch2.Diff( DIFF_EQUAL, insertion.substring(0, overlap_length1) )); diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1); diffs[pointer + 1][1] = insertion.substring(overlap_length1); pointer++; } } else { if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) { diffs.splice(pointer, 0, new diff_match_patch2.Diff( DIFF_EQUAL, deletion.substring(0, overlap_length2) )); diffs[pointer - 1][0] = DIFF_INSERT; diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2); diffs[pointer + 1][0] = DIFF_DELETE; diffs[pointer + 1][1] = deletion.substring(overlap_length2); pointer++; } } pointer++; } pointer++; } }; diff_match_patch2.prototype.diff_cleanupSemanticLossless = function(diffs) { function diff_cleanupSemanticScore_(one, two) { if (!one || !two) { return 6; } var char1 = one.charAt(one.length - 1); var char2 = two.charAt(0); var nonAlphaNumeric1 = char1.match(diff_match_patch2.nonAlphaNumericRegex_); var nonAlphaNumeric2 = char2.match(diff_match_patch2.nonAlphaNumericRegex_); var whitespace1 = nonAlphaNumeric1 && char1.match(diff_match_patch2.whitespaceRegex_); var whitespace2 = nonAlphaNumeric2 && char2.match(diff_match_patch2.whitespaceRegex_); var lineBreak1 = whitespace1 && char1.match(diff_match_patch2.linebreakRegex_); var lineBreak2 = whitespace2 && char2.match(diff_match_patch2.linebreakRegex_); var blankLine1 = lineBreak1 && one.match(diff_match_patch2.blanklineEndRegex_); var blankLine2 = lineBreak2 && two.match(diff_match_patch2.blanklineStartRegex_); if (blankLine1 || blankLine2) { return 5; } else if (lineBreak1 || lineBreak2) { return 4; } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { return 3; } else if (whitespace1 || whitespace2) { return 2; } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { return 1; } return 0; } var pointer = 1; while (pointer < diffs.length - 1) { if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { var equality1 = diffs[pointer - 1][1]; var edit = diffs[pointer][1]; var equality2 = diffs[pointer + 1][1]; var commonOffset = this.diff_commonSuffix(equality1, edit); if (commonOffset) { var commonString = edit.substring(edit.length - commonOffset); equality1 = equality1.substring(0, equality1.length - commonOffset); edit = commonString + edit.substring(0, edit.length - commonOffset); equality2 = commonString + equality2; } var bestEquality1 = equality1; var bestEdit = edit; var bestEquality2 = equality2; var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); while (edit.charAt(0) === equality2.charAt(0)) { equality1 += edit.charAt(0); edit = edit.substring(1) + equality2.charAt(0); equality2 = equality2.substring(1); var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); if (score >= bestScore) { bestScore = score; bestEquality1 = equality1; bestEdit = edit; bestEquality2 = equality2; } } if (diffs[pointer - 1][1] != bestEquality1) { if (bestEquality1) { diffs[pointer - 1][1] = bestEquality1; } else { diffs.splice(pointer - 1, 1); pointer--; } diffs[pointer][1] = bestEdit; if (bestEquality2) { diffs[pointer + 1][1] = bestEquality2; } else { diffs.splice(pointer + 1, 1); pointer--; } } } pointer++; } }; diff_match_patch2.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/; diff_match_patch2.whitespaceRegex_ = /\s/; diff_match_patch2.linebreakRegex_ = /[\r\n]/; diff_match_patch2.blanklineEndRegex_ = /\n\r?\n$/; diff_match_patch2.blanklineStartRegex_ = /^\r?\n\r?\n/; diff_match_patch2.prototype.diff_cleanupEfficiency = function(diffs) { var changes = false; var equalities = []; var equalitiesLength = 0; var lastEquality = null; var pointer = 0; var pre_ins = false; var pre_del = false; var post_ins = false; var post_del = false; while (pointer < diffs.length) { if (diffs[pointer][0] == DIFF_EQUAL) { if (diffs[pointer][1].length < this.Diff_EditCost && (post_ins || post_del)) { equalities[equalitiesLength++] = pointer; pre_ins = post_ins; pre_del = post_del; lastEquality = diffs[pointer][1]; } else { equalitiesLength = 0; lastEquality = null; } post_ins = post_del = false; } else { if (diffs[pointer][0] == DIFF_DELETE) { post_del = true; } else { post_ins = true; } if (lastEquality && (pre_ins && pre_del && post_ins && post_del || lastEquality.length < this.Diff_EditCost / 2 && pre_ins + pre_del + post_ins + post_del == 3)) { diffs.splice( equalities[equalitiesLength - 1], 0, new diff_match_patch2.Diff(DIFF_DELETE, lastEquality) ); diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; equalitiesLength--; lastEquality = null; if (pre_ins && pre_del) { post_ins = post_del = true; equalitiesLength = 0; } else { equalitiesLength--; pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; post_ins = post_del = false; } changes = true; } } pointer++; } if (changes) { this.diff_cleanupMerge(diffs); } }; diff_match_patch2.prototype.diff_cleanupMerge = function(diffs) { diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, "")); var pointer = 0; var count_delete = 0; var count_insert = 0; var text_delete = ""; var text_insert = ""; var commonlength; while (pointer < diffs.length) { switch (diffs[pointer][0]) { case DIFF_INSERT: count_insert++; text_insert += diffs[pointer][1]; pointer++; break; case DIFF_DELETE: count_delete++; text_delete += diffs[pointer][1]; pointer++; break; case DIFF_EQUAL: if (count_delete + count_insert > 1) { if (count_delete !== 0 && count_insert !== 0) { commonlength = this.diff_commonPrefix(text_insert, text_delete); if (commonlength !== 0) { if (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] == DIFF_EQUAL) { diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength); } else { diffs.splice(0, 0, new diff_match_patch2.Diff( DIFF_EQUAL, text_insert.substring(0, commonlength) )); pointer++; } text_insert = text_insert.substring(commonlength); text_delete = text_delete.substring(commonlength); } commonlength = this.diff_commonSuffix(text_insert, text_delete); if (commonlength !== 0) { diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1]; text_insert = text_insert.substring(0, text_insert.length - commonlength); text_delete = text_delete.substring(0, text_delete.length - commonlength); } } pointer -= count_delete + count_insert; diffs.splice(pointer, count_delete + count_insert); if (text_delete.length) { diffs.splice( pointer, 0, new diff_match_patch2.Diff(DIFF_DELETE, text_delete) ); pointer++; } if (text_insert.length) { diffs.splice( pointer, 0, new diff_match_patch2.Diff(DIFF_INSERT, text_insert) ); pointer++; } pointer++; } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) { diffs[pointer - 1][1] += diffs[pointer][1]; diffs.splice(pointer, 1); } else { pointer++; } count_insert = 0; count_delete = 0; text_delete = ""; text_insert = ""; break; } } if (diffs[diffs.length - 1][1] === "") { diffs.pop(); } var changes = false; pointer = 1; while (pointer < diffs.length - 1) { if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) { diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; diffs.splice(pointer - 1, 1); changes = true; } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) { diffs[pointer - 1][1] += diffs[pointer + 1][1]; diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; diffs.splice(pointer + 1, 1); changes = true; } } pointer++; } if (changes) { this.diff_cleanupMerge(diffs); } }; diff_match_patch2.prototype.diff_xIndex = function(diffs, loc) { var chars1 = 0; var chars2 = 0; var last_chars1 = 0; var last_chars2 = 0; var x2; for (x2 = 0; x2 < diffs.length; x2++) { if (diffs[x2][0] !== DIFF_INSERT) { chars1 += diffs[x2][1].length; } if (diffs[x2][0] !== DIFF_DELETE) { chars2 += diffs[x2][1].length; } if (chars1 > loc) { break; } last_chars1 = chars1; last_chars2 = chars2; } if (diffs.length != x2 && diffs[x2][0] === DIFF_DELETE) { return last_chars2; } return last_chars2 + (loc - last_chars1); }; diff_match_patch2.prototype.diff_prettyHtml = function(diffs) { var html2 = []; var pattern_amp = /&/g; var pattern_lt = /</g; var pattern_gt = />/g; var pattern_para = /\n/g; for (var x2 = 0; x2 < diffs.length; x2++) { var op = diffs[x2][0]; var data = diffs[x2][1]; var text2 = data.replace(pattern_amp, "&").replace(pattern_lt, "<").replace(pattern_gt, ">").replace(pattern_para, "¶<br>"); switch (op) { case DIFF_INSERT: html2[x2] = '<ins style="background:#e6ffe6;">' + text2 + "</ins>"; break; case DIFF_DELETE: html2[x2] = '<del style="background:#ffe6e6;">' + text2 + "</del>"; break; case DIFF_EQUAL: html2[x2] = "<span>" + text2 + "</span>"; break; } } return html2.join(""); }; diff_match_patch2.prototype.diff_text1 = function(diffs) { var text2 = []; for (var x2 = 0; x2 < diffs.length; x2++) { if (diffs[x2][0] !== DIFF_INSERT) { text2[x2] = diffs[x2][1]; } } return text2.join(""); }; diff_match_patch2.prototype.diff_text2 = function(diffs) { var text2 = []; for (var x2 = 0; x2 < diffs.length; x2++) { if (diffs[x2][0] !== DIFF_DELETE) { text2[x2] = diffs[x2][1]; } } return text2.join(""); }; diff_match_patch2.prototype.diff_levenshtein = function(diffs) { var levenshtein = 0; var insertions = 0; var deletions = 0; for (var x2 = 0; x2 < diffs.length; x2++) { var op = diffs[x2][0]; var data = diffs[x2][1]; switch (op) { case DIFF_INSERT: insertions += data.length; break; case DIFF_DELETE: deletions += data.length; break; case DIFF_EQUAL: levenshtein += Math.max(insertions, deletions); insertions = 0; deletions = 0; break; } } levenshtein += Math.max(insertions, deletions); return levenshtein; }; diff_match_patch2.prototype.diff_toDelta = function(diffs) { var text2 = []; for (var x2 = 0; x2 < diffs.length; x2++) { switch (diffs[x2][0]) { case DIFF_INSERT: text2[x2] = "+" + encodeURI(diffs[x2][1]); break; case DIFF_DELETE: text2[x2] = "-" + diffs[x2][1].length; break; case DIFF_EQUAL: text2[x2] = "=" + diffs[x2][1].length; break; } } return text2.join(" ").replace(/%20/g, " "); }; diff_match_patch2.prototype.diff_fromDelta = function(text1, delta2) { var diffs = []; var diffsLength = 0; var pointer = 0; var tokens2 = delta2.split(/\t/g); for (var x2 = 0; x2 < tokens2.length; x2++) { var param = tokens2[x2].substring(1); switch (tokens2[x2].charAt(0)) { case "+": try { diffs[diffsLength++] = new diff_match_patch2.Diff(DIFF_INSERT, decodeURI(param)); } catch (ex) { throw new Error("Illegal escape in diff_fromDelta: " + param); } break; case "-": case "=": var n2 = parseInt(param, 10); if (isNaN(n2) || n2 < 0) { throw new Error("Invalid number in diff_fromDelta: " + param); } var text2 = text1.substring(pointer, pointer += n2); if (tokens2[x2].charAt(0) == "=") { diffs[diffsLength++] = new diff_match_patch2.Diff(DIFF_EQUAL, text2); } else { diffs[diffsLength++] = new diff_match_patch2.Diff(DIFF_DELETE, text2); } break; default: if (tokens2[x2]) { throw new Error("Invalid diff operation in diff_fromDelta: " + tokens2[x2]); } } } if (pointer != text1.length) { throw new Error("Delta length (" + pointer + ") does not equal source text length (" + text1.length + ")."); } return diffs; }; diff_match_patch2.prototype.match_main = function(text2, pattern, loc) { if (text2 == null || pattern == null || loc == null) { throw new Error("Null input. (match_main)"); } loc = Math.max(0, Math.min(loc, text2.length)); if (text2 == pattern) { return 0; } else if (!text2.length) { return -1; } else if (text2.substring(loc, loc + pattern.length) == pattern) { return loc; } else { return this.match_bitap_(text2, pattern, loc); } }; diff_match_patch2.prototype.match_bitap_ = function(text2, pattern, loc) { if (pattern.length > this.Match_MaxBits) { throw new Error("Pattern too long for this browser."); } var s2 = this.match_alphabet_(pattern); var dmp2 = this; function match_bitapScore_(e2, x2) { var accuracy = e2 / pattern.length; var proximity = Math.abs(loc - x2); if (!dmp2.Match_Distance) { return proximity ? 1 : accuracy; } return accuracy + proximity / dmp2.Match_Distance; } var score_threshold = this.Match_Threshold; var best_loc = text2.indexOf(pattern, loc); if (best_loc != -1) { score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold); best_loc = text2.lastIndexOf(pattern, loc + pattern.length); if (best_loc != -1) { score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold); } } var matchmask = 1 << pattern.length - 1; best_loc = -1; var bin_min, bin_mid; var bin_max = pattern.length + text2.length; var last_rd; for (var d2 = 0; d2 < pattern.length; d2++) { bin_min = 0; bin_mid = bin_max; while (bin_min < bin_mid) { if (match_bitapScore_(d2, loc + bin_mid) <= score_threshold) { bin_min = bin_mid; } else { bin_max = bin_mid; } bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min); } bin_max = bin_mid; var start = Math.max(1, loc - bin_mid + 1); var finish = Math.min(loc + bin_mid, text2.length) + pattern.length; var rd2 = Array(finish + 2); rd2[finish + 1] = (1 << d2) - 1; for (var j2 = finish; j2 >= start; j2--) { var charMatch = s2[text2.charAt(j2 - 1)]; if (d2 === 0) { rd2[j2] = (rd2[j2 + 1] << 1 | 1) & charMatch; } else { rd2[j2] = (rd2[j2 + 1] << 1 | 1) & charMatch | ((last_rd[j2 + 1] | last_rd[j2]) << 1 | 1) | last_rd[j2 + 1]; } if (rd2[j2] & matchmask) { var score = match_bitapScore_(d2, j2 - 1); if (score <= score_threshold) { score_threshold = score; best_loc = j2 - 1; if (best_loc > loc) { start = Math.max(1, 2 * loc - best_loc); } else { break; } } } } if (match_bitapScore_(d2 + 1, loc) > score_threshold) { break; } last_rd = rd2; } return best_loc; }; diff_match_patch2.prototype.match_alphabet_ = function(pattern) { var s2 = {}; for (var i2 = 0; i2 < pattern.length; i2++) { s2[pattern.charAt(i2)] = 0; } for (var i2 = 0; i2 < pattern.length; i2++) { s2[pattern.charAt(i2)] |= 1 << pattern.length - i2 - 1; } return s2; }; diff_match_patch2.prototype.patch_addContext_ = function(patch2, text2) { if (text2.length == 0) { return; } if (patch2.start2 === null) { throw Error("patch not initialized"); } var pattern = text2.substring(patch2.start2, patch2.start2 + patch2.length1); var padding = 0; while (text2.indexOf(pattern) != text2.lastIndexOf(pattern) && pattern.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin) { padding += this.Patch_Margin; pattern = text2.substring( patch2.start2 - padding, patch2.start2 + patch2.length1 + padding ); } padding += this.Patch_Margin; var prefix2 = text2.substring(patch2.start2 - padding, patch2.start2); if (prefix2) { patch2.diffs.unshift(new diff_match_patch2.Diff(DIFF_EQUAL, prefix2)); } var suffix = text2.substring( patch2.start2 + patch2.length1, patch2.start2 + patch2.length1 + padding ); if (suffix) { patch2.diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, suffix)); } patch2.start1 -= prefix2.length; patch2.start2 -= prefix2.length; patch2.length1 += prefix2.length + suffix.length; patch2.length2 += prefix2.length + suffix.length; }; diff_match_patch2.prototype.patch_make = function(a2, opt_b, opt_c) { var text1, diffs; if (typeof a2 == "string" && typeof opt_b == "string" && typeof opt_c == "undefined") { text1 = a2; diffs = this.diff_main(text1, opt_b, true); if (diffs.length > 2) { this.diff_cleanupSemantic(diffs); this.diff_cleanupEfficiency(diffs); } } else if (a2 && typeof a2 == "object" && typeof opt_b == "undefined" && typeof opt_c == "undefined") { diffs = a2; text1 = this.diff_text1(diffs); } else if (typeof a2 == "string" && opt_b && typeof opt_b == "object" && typeof opt_c == "undefined") { text1 = a2; diffs = opt_b; } else if (typeof a2 == "string" && typeof opt_b == "string" && opt_c && typeof opt_c == "object") { text1 = a2; diffs = opt_c; } else { throw new Error("Unknown call format to patch_make."); } if (diffs.length === 0) { return []; } var patches = []; var patch2 = new diff_match_patch2.patch_obj(); var patchDiffLength = 0; var char_count1 = 0; var char_count2 = 0; var prepatch_text = text1; var postpatch_text = text1; for (var x2 = 0; x2 < diffs.length; x2++) { var diff_type = diffs[x2][0]; var diff_text = diffs[x2][1]; if (!patchDiffLength && diff_type !== DIFF_EQUAL) { patch2.start1 = char_count1; patch2.start2 = char_count2; } switch (diff_type) { case DIFF_INSERT: patch2.diffs[patchDiffLength++] = diffs[x2]; patch2.length2 += diff_text.length; postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2); break; case DIFF_DELETE: patch2.length1 += diff_text.length; patch2.diffs[patchDiffLength++] = diffs[x2]; postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length); break; case DIFF_EQUAL: if (diff_text.length <= 2 * this.Patch_Margin && patchDiffLength && diffs.length != x2 + 1) { patch2.diffs[patchDiffLength++] = diffs[x2]; patch2.length1 += diff_text.length; patch2.length2 += diff_text.length; } else if (diff_text.length >= 2 * this.Patch_Margin) { if (patchDiffLength) { this.patch_addContext_(patch2, prepatch_text); patches.push(patch2); patch2 = new diff_match_patch2.patch_obj(); patchDiffLength = 0; prepatch_text = postpatch_text; char_count1 = char_count2; } } break; } if (diff_type !== DIFF_INSERT) { char_count1 += diff_text.length; } if (diff_type !== DIFF_DELETE) { char_count2 += diff_text.length; } } if (patchDiffLength) { this.patch_addContext_(patch2, prepatch_text); patches.push(patch2); } return patches; }; diff_match_patch2.prototype.patch_deepCopy = function(patches) { var patchesCopy = []; for (var x2 = 0; x2 < patches.length; x2++) { var patch2 = patches[x2]; var patchCopy = new diff_match_patch2.patch_obj(); patchCopy.diffs = []; for (var y2 = 0; y2 < patch2.diffs.length; y2++) { patchCopy.diffs[y2] = new diff_match_patch2.Diff(patch2.diffs[y2][0], patch2.diffs[y2][1]); } patchCopy.start1 = patch2.start1; patchCopy.start2 = patch2.start2; patchCopy.length1 = patch2.length1; patchCopy.length2 = patch2.length2; patchesCopy[x2] = patchCopy; } return patchesCopy; }; diff_match_patch2.prototype.patch_apply = function(patches, text2) { if (patches.length == 0) { return [text2, []]; } patches = this.patch_deepCopy(patches); var nullPadding = this.patch_addPadding(patches); text2 = nullPadding + text2 + nullPadding; this.patch_splitMax(patches); var delta2 = 0; var results = []; for (var x2 = 0; x2 < patches.length; x2++) { var expected_loc = patches[x2].start2 + delta2; var text1 = this.diff_text1(patches[x2].diffs); var start_loc; var end_loc = -1; if (text1.length > this.Match_MaxBits) { start_loc = this.match_main( text2, text1.substring(0, this.Match_MaxBits), expected_loc ); if (start_loc != -1) { end_loc = this.match_main( text2, text1.substring(text1.length - this.Match_MaxBits), expected_loc + text1.length - this.Match_MaxBits ); if (end_loc == -1 || start_loc >= end_loc) { start_loc = -1; } } } else { start_loc = this.match_main(text2, text1, expected_loc); } if (start_loc == -1) { results[x2] = false; delta2 -= patches[x2].length2 - patches[x2].length1; } else { results[x2] = true; delta2 = start_loc - expected_loc; var text22; if (end_loc == -1) { text22 = text2.substring(start_loc, start_loc + text1.length); } else { text22 = text2.substring(start_loc, end_loc + this.Match_MaxBits); } if (text1 == text22) { text2 = text2.substring(0, start_loc) + this.diff_text2(patches[x2].diffs) + text2.substring(start_loc + text1.length); } else { var diffs = this.diff_main(text1, text22, false); if (text1.length > this.Match_MaxBits && this.diff_levenshtein(diffs) / text1.length > this.Patch_DeleteThreshold) { results[x2] = false; } else { this.diff_cleanupSemanticLossless(diffs); var index1 = 0; var index2; for (var y2 = 0; y2 < patches[x2].diffs.length; y2++) { var mod = patches[x2].diffs[y2]; if (mod[0] !== DIFF_EQUAL) { index2 = this.diff_xIndex(diffs, index1); } if (mod[0] === DIFF_INSERT) { text2 = text2.substring(0, start_loc + index2) + mod[1] + text2.substring(start_loc + index2); } else if (mod[0] === DIFF_DELETE) { text2 = text2.substring(0, start_loc + index2) + text2.substring(start_loc + this.diff_xIndex( diffs, index1 + mod[1].length )); } if (mod[0] !== DIFF_DELETE) { index1 += mod[1].length; } } } } } } text2 = text2.substring(nullPadding.length, text2.length - nullPadding.length); return [text2, results]; }; diff_match_patch2.prototype.patch_addPadding = function(patches) { var paddingLength = this.Patch_Margin; var nullPadding = ""; for (var x2 = 1; x2 <= paddingLength; x2++) { nullPadding += String.fromCharCode(x2); } for (var x2 = 0; x2 < patches.length; x2++) { patches[x2].start1 += paddingLength; patches[x2].start2 += paddingLength; } var patch2 = patches[0]; var diffs = patch2.diffs; if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) { diffs.unshift(new diff_match_patch2.Diff(DIFF_EQUAL, nullPadding)); patch2.start1 -= paddingLength; patch2.start2 -= paddingLength; patch2.length1 += paddingLength; patch2.length2 += paddingLength; } else if (paddingLength > diffs[0][1].length) { var extraLength = paddingLength - diffs[0][1].length; diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1]; patch2.start1 -= extraLength; patch2.start2 -= extraLength; patch2.length1 += extraLength; patch2.length2 += extraLength; } patch2 = patches[patches.length - 1]; diffs = patch2.diffs; if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) { diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, nullPadding)); patch2.length1 += paddingLength; patch2.length2 += paddingLength; } else if (paddingLength > diffs[diffs.length - 1][1].length) { var extraLength = paddingLength - diffs[diffs.length - 1][1].length; diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength); patch2.length1 += extraLength; patch2.length2 += extraLength; } return nullPadding; }; diff_match_patch2.prototype.patch_splitMax = function(patches) { var patch_size = this.Match_MaxBits; for (var x2 = 0; x2 < patches.length; x2++) { if (patches[x2].length1 <= patch_size) { continue; } var bigpatch = patches[x2]; patches.splice(x2--, 1); var start1 = bigpatch.start1; var start2 = bigpatch.start2; var precontext = ""; while (bigpatch.diffs.length !== 0) { var patch2 = new diff_match_patch2.patch_obj(); var empty2 = true; patch2.start1 = start1 - precontext.length; patch2.start2 = start2 - precontext.length; if (precontext !== "") { patch2.length1 = patch2.length2 = precontext.length; patch2.diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, precontext)); } while (bigpatch.diffs.length !== 0 && patch2.length1 < patch_size - this.Patch_Margin) { var diff_type = bigpatch.diffs[0][0]; var diff_text = bigpatch.diffs[0][1]; if (diff_type === DIFF_INSERT) { patch2.length2 += diff_text.length; start2 += diff_text.length; patch2.diffs.push(bigpatch.diffs.shift()); empty2 = false; } else if (diff_type === DIFF_DELETE && patch2.diffs.length == 1 && patch2.diffs[0][0] == DIFF_EQUAL && diff_text.length > 2 * patch_size) { patch2.length1 += diff_text.length; start1 += diff_text.length; empty2 = false; patch2.diffs.push(new diff_match_patch2.Diff(diff_type, diff_text)); bigpatch.diffs.shift(); } else { diff_text = diff_text.substring( 0, patch_size - patch2.length1 - this.Patch_Margin ); patch2.length1 += diff_text.length; start1 += diff_text.length; if (diff_type === DIFF_EQUAL) { patch2.length2 += diff_text.length; start2 += diff_text.length; } else { empty2 = false; } patch2.diffs.push(new diff_match_patch2.Diff(diff_type, diff_text)); if (diff_text == bigpatch.diffs[0][1]) { bigpatch.diffs.shift(); } else { bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length); } } } precontext = this.diff_text2(patch2.diffs); precontext = precontext.substring(precontext.length - this.Patch_Margin); var postcontext = this.diff_text1(bigpatch.diffs).substring(0, this.Patch_Margin); if (postcontext !== "") { patch2.length1 += postcontext.length; patch2.length2 += postcontext.length; if (patch2.diffs.length !== 0 && patch2.diffs[patch2.diffs.length - 1][0] === DIFF_EQUAL) { patch2.diffs[patch2.diffs.length - 1][1] += postcontext; } else { patch2.diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, postcontext)); } } if (!empty2) { patches.splice(++x2, 0, patch2); } } } }; diff_match_patch2.prototype.patch_toText = function(patches) { var text2 = []; for (var x2 = 0; x2 < patches.length; x2++) { text2[x2] = patches[x2]; } return text2.join(""); }; diff_match_patch2.prototype.patch_fromText = function(textline) { var patches = []; if (!textline) { return patches; } var text2 = textline.split("\n"); var textPointer = 0; var patchHeader = /^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/; while (textPointer < text2.length) { var m2 = text2[textPointer].match(patchHeader); if (!m2) { throw new Error("Invalid patch string: " + text2[textPointer]); } var patch2 = new diff_match_patch2.patch_obj(); patches.push(patch2); patch2.start1 = parseInt(m2[1], 10); if (m2[2] === "") { patch2.start1--; patch2.length1 = 1; } else if (m2[2] == "0") { patch2.length1 = 0; } else { patch2.start1--; patch2.length1 = parseInt(m2[2], 10); } patch2.start2 = parseInt(m2[3], 10); if (m2[4] === "") { patch2.start2--; patch2.length2 = 1; } else if (m2[4] == "0") { patch2.length2 = 0; } else { patch2.start2--; patch2.length2 = parseInt(m2[4], 10); } textPointer++; while (textPointer < text2.length) { var sign = text2[textPointer].charAt(0); try { var line2 = decodeURI(text2[textPointer].substring(1)); } catch (ex) { throw new Error("Illegal escape in patch_fromText: " + line2); } if (sign == "-") { patch2.diffs.push(new diff_match_patch2.Diff(DIFF_DELETE, line2)); } else if (sign == "+") { patch2.diffs.push(new diff_match_patch2.Diff(DIFF_INSERT, line2)); } else if (sign == " ") { patch2.diffs.push(new diff_match_patch2.Diff(DIFF_EQUAL, line2)); } else if (sign == "@") { break; } else if (sign === "") ; else { throw new Error('Invalid patch mode "' + sign + '" in: ' + line2); } textPointer++; } } return patches; }; diff_match_patch2.patch_obj = function() { this.diffs = []; this.start1 = null; this.start2 = null; this.length1 = 0; this.length2 = 0; }; diff_match_patch2.patch_obj.prototype.toString = function() { var coords1, coords2; if (this.length1 === 0) { coords1 = this.start1 + ",0"; } else if (this.length1 == 1) { coords1 = this.start1 + 1; } else { coords1 = this.start1 + 1 + "," + this.length1; } if (this.length2 === 0) { coords2 = this.start2 + ",0"; } else if (this.length2 == 1) { coords2 = this.start2 + 1; } else { coords2 = this.start2 + 1 + "," + this.length2; } var text2 = ["@@ -" + coords1 + " +" + coords2 + " @@\n"]; var op; for (var x2 = 0; x2 < this.diffs.length; x2++) { switch (this.diffs[x2][0]) { case DIFF_INSERT: op = "+"; break; case DIFF_DELETE: op = "-"; break; case DIFF_EQUAL: op = " "; break; } text2[x2 + 1] = op + encodeURI(this.diffs[x2][1]) + "\n"; } return text2.join("").replace(/%20/g, " "); }; module3.exports = diff_match_patch2; module3.exports["diff_match_patch"] = diff_match_patch2; module3.exports["DIFF_DELETE"] = DIFF_DELETE; module3.exports["DIFF_INSERT"] = DIFF_INSERT; module3.exports["DIFF_EQUAL"] = DIFF_EQUAL; })(diffMatchPatch); const dmp = diffMatchPatch.exports; function diffChars(from2, to, timeout) { const dmp2 = new diffMatchPatch.exports.diff_match_patch(); dmp2.Diff_Timeout = timeout; const diff2 = dmp2.diff_main(from2, to); dmp2.diff_cleanupSemantic(diff2); return diff2.map((d2) => { let type2; switch (d2[0]) { case diffMatchPatch.exports.DIFF_INSERT: type2 = 1; break; case diffMatchPatch.exports.DIFF_EQUAL: type2 = 0; break; case diffMatchPatch.exports.DIFF_DELETE: type2 = -1; break; default: throw new Error("Unexpected diff type: " + d2[0]); } return { type: type2, value: d2[1] }; }); } function markInputRule(regexp2, markType, filter, getAttrs) { return new InputRule(regexp2, (state, match2, start, end) => { if (!filter(state, start, end)) { return null; } const textIndex = match2[0].indexOf(match2[1]); const prefix2 = match2[0].substring(0, textIndex).replace(/^\s/, ""); const delimStart = start + textIndex - prefix2.length; const tr = state.tr; tr.delete(delimStart, delimStart + prefix2.length); const attrs = getAttrs instanceof Function ? getAttrs(match2) : getAttrs; const mark = markType.create(attrs); const markStart = start + textIndex - prefix2.length; tr.addMark(markStart, markStart + match2[1].length, mark); tr.removeStoredMark(mark); return tr; }); } function delimiterMarkInputRule(delim, markType, filter, prefixMask, noEnclosingWhitespace) { const contentPattern = noEnclosingWhitespace ? `[^\\s${delim}][^${delim}]+[^\\s${delim}]|[^\\s${delim}]{1,2}` : `[^${delim}]+`; if (!prefixMask) { const regexp2 = `(?:${delim})(${contentPattern})(?:${delim})$`; return markInputRule(new RegExp(regexp2), markType, filter); } else { const regexp2 = `(^|[^${prefixMask}])(?:${delim})(${contentPattern})(?:${delim})$`; return new InputRule(new RegExp(regexp2), (state, match2, start, end) => { if (!filter(state, start, end)) { return null; } const tr = state.tr; const maskOffset = match2[1].length; const textStart = start + match2[0].indexOf(match2[2]); const textEnd = textStart + match2[2].length; tr.delete(textEnd, end); start = start + maskOffset; end = start + match2[2].length; tr.delete(start, textStart); const mark = markType.create(); tr.addMark(start, end, mark); tr.removeStoredMark(mark); return tr; }); } } function markInputRuleFilter(schema2, marks) { const maskedMarkTypes = marksWithNoInputRules(schema2, marks); return (context, from2, to) => { if (from2 !== void 0 && to !== void 0 && from2 !== to) { const marksInRange = []; context.doc.nodesBetween(from2, to, (node2) => { node2.marks.forEach((mark) => marksInRange.push(mark.type)); }); return !marksInRange.some((markType) => maskedMarkTypes.includes(markType)); } if (from2 === void 0) { for (const markType of maskedMarkTypes) { if (markIsActive(context, markType)) { return false; } } } return true; }; } function conditionalWrappingInputRule(regexp2, nodeType, predicate, getAttrs, joinPredicate) { const wrappingRule = wrappingInputRule(regexp2, nodeType, getAttrs, joinPredicate); return new InputRule(regexp2, (state, match2, start, end) => { if (!predicate(state)) { return null; } return wrappingRule.handler(state, match2, start, end); }); } function marksWithNoInputRules(schema2, marks) { const disabledMarks = []; marks.forEach((mark) => { if (mark.noInputRules) { disabledMarks.push(schema2.marks[mark.name]); } }); return disabledMarks; } var sentenceSplitter = {}; var ASTNodeTypes; (function(ASTNodeTypes2) { ASTNodeTypes2["Document"] = "Document"; ASTNodeTypes2["DocumentExit"] = "Document:exit"; ASTNodeTypes2["Paragraph"] = "Paragraph"; ASTNodeTypes2["ParagraphExit"] = "Paragraph:exit"; ASTNodeTypes2["BlockQuote"] = "BlockQuote"; ASTNodeTypes2["BlockQuoteExit"] = "BlockQuote:exit"; ASTNodeTypes2["ListItem"] = "ListItem"; ASTNodeTypes2["ListItemExit"] = "ListItem:exit"; ASTNodeTypes2["List"] = "List"; ASTNodeTypes2["ListExit"] = "List:exit"; ASTNodeTypes2["Header"] = "Header"; ASTNodeTypes2["HeaderExit"] = "Header:exit"; ASTNodeTypes2["CodeBlock"] = "CodeBlock"; ASTNodeTypes2["CodeBlockExit"] = "CodeBlock:exit"; ASTNodeTypes2["HtmlBlock"] = "HtmlBlock"; ASTNodeTypes2["HtmlBlockExit"] = "HtmlBlock:exit"; ASTNodeTypes2["HorizontalRule"] = "HorizontalRule"; ASTNodeTypes2["HorizontalRuleExit"] = "HorizontalRule:exit"; ASTNodeTypes2["Comment"] = "Comment"; ASTNodeTypes2["CommentExit"] = "Comment:exit"; ASTNodeTypes2["ReferenceDef"] = "ReferenceDef"; ASTNodeTypes2["ReferenceDefExit"] = "ReferenceDef:exit"; ASTNodeTypes2["Str"] = "Str"; ASTNodeTypes2["StrExit"] = "Str:exit"; ASTNodeTypes2["Break"] = "Break"; ASTNodeTypes2["BreakExit"] = "Break:exit"; ASTNodeTypes2["Emphasis"] = "Emphasis"; ASTNodeTypes2["EmphasisExit"] = "Emphasis:exit"; ASTNodeTypes2["Strong"] = "Strong"; ASTNodeTypes2["StrongExit"] = "Strong:exit"; ASTNodeTypes2["Html"] = "Html"; ASTNodeTypes2["HtmlExit"] = "Html:exit"; ASTNodeTypes2["Link"] = "Link"; ASTNodeTypes2["LinkExit"] = "Link:exit"; ASTNodeTypes2["Image"] = "Image"; ASTNodeTypes2["ImageExit"] = "Image:exit"; ASTNodeTypes2["Code"] = "Code"; ASTNodeTypes2["CodeExit"] = "Code:exit"; ASTNodeTypes2["Delete"] = "Delete"; ASTNodeTypes2["DeleteExit"] = "Delete:exit"; })(ASTNodeTypes || (ASTNodeTypes = {})); const module2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, get ASTNodeTypes() { return ASTNodeTypes; } }, Symbol.toStringTag, { value: "Module" })); const require$$0 = /* @__PURE__ */ getAugmentedNamespace(module2); var SourceCode$1 = {}; var structuredSource = {}; var lib$1 = {}; function compare$d(v12, v2) { return v12 < v2; } function upperBound(array, value, comp2) { if (comp2 === void 0) comp2 = compare$d; return function() { var len = array.length; var i2 = 0; while (len) { var diff2 = len >>> 1; var cursor2 = i2 + diff2; if (comp2(value, array[cursor2])) { len = diff2; } else { i2 = cursor2 + 1; len -= diff2 + 1; } } return i2; }(); } function lowerBound(array, value, comp2) { if (comp2 === void 0) comp2 = compare$d; return function() { var len = array.length; var i2 = 0; while (len) { var diff2 = len >>> 1; var cursor2 = i2 + diff2; if (comp2(array[cursor2], value)) { i2 = cursor2 + 1; len -= diff2 + 1; } else { len = diff2; } } return i2; }(); } function binarySearch(array, value, comp2) { if (comp2 === void 0) comp2 = compare$d; return function() { var cursor2 = lowerBound(array, value, comp2); return cursor2 !== array.length && !comp2(value, array[cursor2]); }(); } lib$1.compare = compare$d; lib$1.lowerBound = lowerBound; lib$1.upperBound = upperBound; lib$1.binarySearch = binarySearch; (function(exports2) { var _classProps = function(child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); }; var upperBound2 = lib$1.upperBound; var Position2 = function Position3(line2, column2) { this.line = line2; this.column = column2; }; exports2.Position = Position2; var SourceLocation = function SourceLocation2(start, end) { this.start = start; this.end = end; }; exports2.SourceLocation = SourceLocation; var StructuredSource2 = function() { var StructuredSource3 = function StructuredSource4(source) { this.indice = [0]; var regexp2 = /[\r\n\u2028\u2029]/g; var length2 = source.length; regexp2.lastIndex = 0; while (true) { var result = regexp2.exec(source); if (!result) { break; } var index2 = result.index; if (source.charCodeAt(index2) === 13 && source.charCodeAt(index2 + 1) === 10) { index2 += 1; } var nextIndex = index2 + 1; if (length2 < nextIndex) { break; } this.indice.push(nextIndex); regexp2.lastIndex = nextIndex; } }; StructuredSource3.prototype.locationToRange = function(loc) { return [this.positionToIndex(loc.start), this.positionToIndex(loc.end)]; }; StructuredSource3.prototype.rangeToLocation = function(range2) { return new SourceLocation(this.indexToPosition(range2[0]), this.indexToPosition(range2[1])); }; StructuredSource3.prototype.positionToIndex = function(pos) { var start = this.indice[pos.line - 1]; return start + pos.column; }; StructuredSource3.prototype.indexToPosition = function(index2) { var startLine = upperBound2(this.indice, index2); return new Position2(startLine, index2 - this.indice[startLine - 1]); }; _classProps(StructuredSource3, null, { line: { get: function() { return this.indice.length; } } }); return StructuredSource3; }(); exports2["default"] = StructuredSource2; })(structuredSource); var StructuredSource = structuredSource["default"]; var lib = StructuredSource; var __importDefault$1 = commonjsGlobal && commonjsGlobal.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(SourceCode$1, "__esModule", { value: true }); SourceCode$1.SourceCode = void 0; var structured_source_1 = __importDefault$1(lib); var SourceCode = function() { function SourceCode2(input) { this.index = 0; this.contexts = []; this.contextRanges = []; if (typeof input === "string") { this.textCharacters = input.split(""); this.source = new structured_source_1.default(input); this.startOffset = 0; this.firstChildPadding = 0; } else { this.sourceNode = input; this.startOffset = this.sourceNode.range[0]; this.index = this.startOffset; var lineBreaks = Array.from(new Array(this.sourceNode.loc.start.line - 1)).fill("\n"); var offset = Array.from(new Array(this.startOffset - lineBreaks.length)).fill("\u222F"); this.textCharacters = offset.concat(lineBreaks, input.raw.split("")); this.source = new structured_source_1.default(this.textCharacters.join("")); if (this.sourceNode.children[0]) { this.firstChildPadding = this.sourceNode.children[0].range[0] - this.startOffset; } else { this.firstChildPadding = 0; } } } SourceCode2.prototype.markContextRange = function(range2) { this.contextRanges.push(range2); }; SourceCode2.prototype.isInContextRange = function() { var offset = this.offset; return this.contextRanges.some(function(range2) { return range2[0] <= offset && offset < range2[1]; }); }; SourceCode2.prototype.enterContext = function(context) { this.contexts.push(context); }; SourceCode2.prototype.isInContext = function(context) { if (!context) { return this.contexts.length > 0; } return this.contexts.some(function(targetContext) { return targetContext === context; }); }; SourceCode2.prototype.leaveContext = function(context) { var index2 = this.contexts.lastIndexOf(context); if (index2 !== -1) { this.contexts.splice(index2, 1); } }; Object.defineProperty(SourceCode2.prototype, "offset", { get: function() { return this.index + this.firstChildPadding; }, enumerable: false, configurable: true }); SourceCode2.prototype.now = function() { var indexWithChildrenOffset = this.offset; var position2 = this.source.indexToPosition(indexWithChildrenOffset); return { line: position2.line, column: position2.column, offset: indexWithChildrenOffset }; }; Object.defineProperty(SourceCode2.prototype, "hasEnd", { get: function() { return this.read() === false; }, enumerable: false, configurable: true }); SourceCode2.prototype.read = function(over) { if (over === void 0) { over = 0; } var index2 = this.offset + over; if (index2 < this.startOffset) { return false; } if (0 <= index2 && index2 < this.textCharacters.length) { return this.textCharacters[index2]; } return false; }; SourceCode2.prototype.readNode = function(over) { if (over === void 0) { over = 0; } if (!this.sourceNode) { return false; } var index2 = this.offset + over; if (index2 < this.startOffset) { return false; } var matchNodeList = this.sourceNode.children.filter(function(node2) { return node2.range[0] <= index2 && index2 < node2.range[1]; }); if (matchNodeList.length > 0) { return matchNodeList[matchNodeList.length - 1]; } return false; }; SourceCode2.prototype.peek = function() { this.index += 1; }; SourceCode2.prototype.peekNode = function(node2) { this.index += node2.range[1] - node2.range[0]; }; SourceCode2.prototype.seekNext = function(parser) { var startPosition = this.now(); parser.seek(this); var endPosition = this.now(); var value = this.sliceRange(startPosition.offset, endPosition.offset); return { value, startPosition, endPosition }; }; SourceCode2.prototype.sliceRange = function(start, end) { return this.textCharacters.slice(start, end).join(""); }; return SourceCode2; }(); SourceCode$1.SourceCode = SourceCode; var NewLineParser$1 = {}; Object.defineProperty(NewLineParser$1, "__esModule", { value: true }); NewLineParser$1.NewLineParser = void 0; var NewLineParser = function() { function NewLineParser2() { } NewLineParser2.prototype.test = function(sourceCode) { var string = sourceCode.read(); if (!string) { return false; } return /[\r\n]/.test(string); }; NewLineParser2.prototype.seek = function(sourceCode) { while (this.test(sourceCode)) { sourceCode.peek(); } }; return NewLineParser2; }(); NewLineParser$1.NewLineParser = NewLineParser; var SpaceParser$1 = {}; Object.defineProperty(SpaceParser$1, "__esModule", { value: true }); SpaceParser$1.SpaceParser = void 0; var SpaceParser = function() { function SpaceParser2() { } SpaceParser2.prototype.test = function(sourceCode) { var string = sourceCode.read(); if (!string) { return false; } return /\s/.test(string); }; SpaceParser2.prototype.seek = function(sourceCode) { while (this.test(sourceCode)) { sourceCode.peek(); } }; return SpaceParser2; }(); SpaceParser$1.SpaceParser = SpaceParser; var SeparatorParser = {}; (function(exports2) { Object.defineProperty(exports2, "__esModule", { value: true }); exports2.SeparatorParser = exports2.DefaultOptions = void 0; exports2.DefaultOptions = { separatorCharacters: [ ".", "\uFF0E", "\u3002", "?", "!", "\uFF1F", "\uFF01" ] }; var SeparatorParser2 = function() { function SeparatorParser3(options) { this.options = options; this.separatorCharacters = options && options.separatorCharacters ? options.separatorCharacters : exports2.DefaultOptions.separatorCharacters; } SeparatorParser3.prototype.test = function(sourceCode) { if (sourceCode.isInContext()) { return false; } if (sourceCode.isInContextRange()) { return false; } var firstChar = sourceCode.read(); var nextChar = sourceCode.read(1); if (!firstChar) { return false; } if (!this.separatorCharacters.includes(firstChar)) { return false; } if (firstChar === ".") { if (nextChar) { return /[\s\t\r\n]/.test(nextChar); } else { return true; } } return true; }; SeparatorParser3.prototype.seek = function(sourceCode) { while (this.test(sourceCode)) { sourceCode.peek(); } }; return SeparatorParser3; }(); exports2.SeparatorParser = SeparatorParser2; })(SeparatorParser); var AnyValueParser$1 = {}; Object.defineProperty(AnyValueParser$1, "__esModule", { value: true }); AnyValueParser$1.AnyValueParser = void 0; var AnyValueParser = function() { function AnyValueParser2(options) { this.parsers = options.parsers; this.markers = options.markers; } AnyValueParser2.prototype.test = function(sourceCode) { if (sourceCode.hasEnd) { return false; } return this.parsers.every(function(parser) { return !parser.test(sourceCode); }); }; AnyValueParser2.prototype.seek = function(sourceCode) { var currentNode = sourceCode.readNode(); if (!currentNode) { while (this.test(sourceCode)) { this.markers.forEach(function(marker2) { return marker2.mark(sourceCode); }); sourceCode.peek(); } return; } var isInCurrentNode = function() { var currentOffset = sourceCode.offset; return currentNode.range[0] <= currentOffset && currentOffset < currentNode.range[1]; }; while (isInCurrentNode() && this.test(sourceCode)) { this.markers.forEach(function(marker2) { return marker2.mark(sourceCode); }); sourceCode.peek(); } }; return AnyValueParser2; }(); AnyValueParser$1.AnyValueParser = AnyValueParser; var AbbrMarker$1 = {}; var English = {}; Object.defineProperty(English, "__esModule", { value: true }); English.English = void 0; English.English = { ABBREVIATIONS: [ "Adj.", "Adm.", "Adv.", "Al.", "Ala.", "Alta.", "Apr.", "Arc.", "Ariz.", "Ark.", "Art.", "Assn.", "Asst.", "Attys.", "Aug.", "Ave.", "Bart.", "Bld.", "Bldg.", "Blvd.", "Brig.", "Bros.", "Btw.", "Cal.", "Calif.", "Capt.", "Cl.", "Cmdr.", "Co.", "Col.", "Colo.", "Comdr.", "Con.", "Conn.", "Corp.", "Cpl.", "Cres.", "Ct.", "D.phil.", "Dak.", "Dec.", "Del.", "Dept.", "Det.", "Dist.", "Dr.", "Dr.phil.", "Dr.philos.", "Drs.", "E.g.", "Ens.", "Esp.", "Esq.", "Etc.", "Exp.", "Expy.", "Ext.", "Feb.", "Fed.", "Fla.", "Ft.", "Fwy.", "Fy.", "Ga.", "Gen.", "Gov.", "Hon.", "Hosp.", "Hr.", "Hway.", "Hwy.", "I.e.", "Ia.", "Id.", "Ida.", "Ill.", "Inc.", "Ind.", "Ing.", "Insp.", "Is.", "Jan.", "Jr.", "Jul.", "Jun.", "Kan.", "Kans.", "Ken.", "Ky.", "La.", "Lt.", "Ltd.", "Maj.", "Man.", "Mar.", "Mass.", "May.", "Md.", "Me.", "Med.", "Messrs.", "Mex.", "Mfg.", "Mich.", "Min.", "Minn.", "Miss.", "Mlle.", "Mm.", "Mme.", "Mo.", "Mont.", "Mr.", "Mrs.", "Ms.", "Msgr.", "Mssrs.", "Mt.", "Mtn.", "Neb.", "Nebr.", "Nev.", "No.", "Nos.", "Nov.", "Nr.", "Oct.", "Ok.", "Okla.", "Ont.", "Op.", "Ord.", "Ore.", "P.", "Pa.", "Pd.", "Pde.", "Penn.", "Penna.", "Pfc.", "Ph.", "Ph.d.", "Pl.", "Plz.", "Pp.", "Prof.", "Pvt.", "Que.", "Rd.", "Rs.", "Ref.", "Rep.", "Reps.", "Res.", "Rev.", "Rt.", "Sask.", "Sec.", "Sen.", "Sens.", "Sep.", "Sept.", "Sfc.", "Sgt.", "Sr.", "St.", "Supt.", "Surg.", "Tce.", "Tenn.", "Tex.", "Univ.", "Usafa.", "U.S.", "Ut.", "Va.", "V.", "Ver.", "Vs.", "Vt.", "Wash.", "Wis.", "Wisc.", "Wy.", "Wyo.", "Yuk." ], PREPOSITIVE_ABBREVIATIONS: [ "Adm.", "Attys.", "Brig.", "Capt.", "Cmdr.", "Col.", "Cpl.", "Det.", "Dr.", "Gen.", "Gov.", "Ing.", "Lt.", "Maj.", "Mr.", "Mrs.", "Ms.", "Mt.", "Messrs.", "Mssrs.", "Prof.", "Ph.", "Rep.", "Reps.", "Rev.", "Sen.", "Sens.", "Sgt.", "St.", "Supt.", "V.", "Vs." ], EXCALAMATION_WORDS: [ "!X\u0169", "!Kung", "\u01C3\u02BCO\u01C3Kung", "!Xuun", "!Kung-Ekoka", "\u01C3Hu", "\u01C3Khung", "\u01C3Ku", "\u01C3ung", "\u01C3Xo", "\u01C3X\xFB", "\u01C3Xung", "\u01C3X\u0169", "!Xun", "Yahoo!", "Y!J", "Yum!" ] }; Object.defineProperty(AbbrMarker$1, "__esModule", { value: true }); AbbrMarker$1.AbbrMarker = void 0; var English_1 = English; var isCapitalized = function(text2) { if (!text2 || text2.length === 0) { return false; } return /^[A-Z]/.test(text2); }; var compareNoCaseSensitive = function(a2, b2) { return a2.toLowerCase() === b2.toLowerCase(); }; var AbbrMarker = function() { function AbbrMarker2(lang2) { if (lang2 === void 0) { lang2 = English_1.English; } this.lang = lang2; } AbbrMarker2.prototype.getWord = function(sourceCode, startIndex) { if (startIndex === void 0) { startIndex = 0; } var whiteSpace = /\s/; var prevChar = sourceCode.read(-1); if (prevChar && !whiteSpace.test(prevChar)) { return ""; } var word = ""; var count = startIndex; var char2 = ""; while (char2 = sourceCode.read(count)) { if (whiteSpace.test(char2)) { break; } word += char2; count++; } return word; }; AbbrMarker2.prototype.getPrevWord = function(sourceCode) { var whiteSpace = /\s/; var count = -1; var char2 = ""; while (char2 = sourceCode.read(count)) { if (!whiteSpace.test(char2)) { break; } count--; } while (char2 = sourceCode.read(count)) { if (whiteSpace.test(char2)) { break; } count--; } return this.getWord(sourceCode, count + 1); }; AbbrMarker2.prototype.mark = function(sourceCode) { if (sourceCode.isInContextRange()) { return; } var currentWord = this.getWord(sourceCode); if (currentWord.length === 0) { return; } if (/^([a-zA-Z]\.){3,}$/.test(currentWord)) { return sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]); } var isMatchedEXCALAMATION_WORDS = this.lang.EXCALAMATION_WORDS.some(function(abbr) { return compareNoCaseSensitive(abbr, currentWord); }); if (isMatchedEXCALAMATION_WORDS) { return sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]); } var isMatchedPREPOSITIVE_ABBREVIATIONS = this.lang.PREPOSITIVE_ABBREVIATIONS.some(function(abbr) { return compareNoCaseSensitive(abbr, currentWord); }); if (isMatchedPREPOSITIVE_ABBREVIATIONS) { return sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]); } var isMatched = this.lang.ABBREVIATIONS.some(function(abbr) { return compareNoCaseSensitive(abbr, currentWord); }); var prevWord = this.getPrevWord(sourceCode); var nextWord = this.getWord(sourceCode, currentWord.length + 1); if (isCapitalized(prevWord) && /[A-Z]\./.test(currentWord) && isCapitalized(nextWord)) { sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]); } else if (isMatched && !isCapitalized(nextWord)) { sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]); } }; return AbbrMarker2; }(); AbbrMarker$1.AbbrMarker = AbbrMarker; var PairMaker$1 = {}; var logger = {}; commonjsGlobal && commonjsGlobal.__spreadArray || function(to, from2) { for (var i2 = 0, il2 = from2.length, j2 = to.length; i2 < il2; i2++, j2++) to[j2] = from2[i2]; return to; }; Object.defineProperty(logger, "__esModule", { value: true }); logger.debugLog = void 0; function debugLog() { { return; } } logger.debugLog = debugLog; var object_values = { exports: {} }; (function(module3) { Object.values = Object.values ? Object.values : function(obj) { var allowedTypes = ["[object String]", "[object Object]", "[object Array]", "[object Function]"]; var objType2 = Object.prototype.toString.call(obj); if (obj === null || typeof obj === "undefined") { throw new TypeError("Cannot convert undefined or null to object"); } else if (!~allowedTypes.indexOf(objType2)) { return []; } else { if (Object.keys) { return Object.keys(obj).map(function(key2) { return obj[key2]; }); } var result = []; for (var prop2 in obj) { if (obj.hasOwnProperty(prop2)) { result.push(obj[prop2]); } } return result; } }; if (module3.exports) { module3.exports = Object.values; } })(object_values); var __importDefault = commonjsGlobal && commonjsGlobal.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(PairMaker$1, "__esModule", { value: true }); PairMaker$1.PairMaker = void 0; var logger_1$1 = logger; var object_values_1 = __importDefault(object_values.exports); var PairMaker = function() { function PairMaker2() { var _a; this.pairs = (_a = {}, _a['"'] = '"', _a["\u300C"] = "\u300D", _a["\uFF08"] = "\uFF09", _a["("] = ")", _a["\u300E"] = "\u300F", _a["\u3010"] = "\u3011", _a["\u300A"] = "\u300B", _a); this.pairKeys = Object.keys(this.pairs); this.pairValues = object_values_1.default(this.pairs); } PairMaker2.prototype.mark = function(sourceCode) { var string = sourceCode.read(); if (!string) { return; } if (!sourceCode.isInContext()) { var keyIndex = this.pairKeys.indexOf(string); if (keyIndex !== -1) { var key2 = this.pairKeys[keyIndex]; logger_1$1.debugLog("PairMaker -> enterContext: " + key2); sourceCode.enterContext(key2); } } else { var valueIndex = this.pairValues.indexOf(string); if (valueIndex !== -1) { var key2 = this.pairKeys[valueIndex]; logger_1$1.debugLog("PairMaker -> leaveContext: " + this.pairValues[valueIndex]); sourceCode.leaveContext(key2); } } }; return PairMaker2; }(); PairMaker$1.PairMaker = PairMaker; var __assign = commonjsGlobal && commonjsGlobal.__assign || function() { __assign = Object.assign || function(t2) { for (var s2, i2 = 1, n2 = arguments.length; i2 < n2; i2++) { s2 = arguments[i2]; for (var p2 in s2) if (Object.prototype.hasOwnProperty.call(s2, p2)) t2[p2] = s2[p2]; } return t2; }; return __assign.apply(this, arguments); }; Object.defineProperty(sentenceSplitter, "__esModule", { value: true }); sentenceSplitter.createNode = sentenceSplitter.createEmptySentenceNode = sentenceSplitter.createTextNode = sentenceSplitter.createPunctuationNode = sentenceSplitter.createWhiteSpaceNode = sentenceSplitter.splitAST = split_1 = sentenceSplitter.split = sentenceSplitter.SplitParser = sentenceSplitter.Syntax = void 0; var ast_node_types_1 = require$$0; var SourceCode_1 = SourceCode$1; var NewLineParser_1 = NewLineParser$1; var SpaceParser_1 = SpaceParser$1; var SeparatorParser_1 = SeparatorParser; var AnyValueParser_1 = AnyValueParser$1; var AbbrMarker_1 = AbbrMarker$1; var PairMaker_1 = PairMaker$1; var logger_1 = logger; sentenceSplitter.Syntax = { WhiteSpace: "WhiteSpace", Punctuation: "Punctuation", Sentence: "Sentence", Str: "Str" }; var SplitParser = function() { function SplitParser2(text2) { this.nodeList = []; this.results = []; this.source = new SourceCode_1.SourceCode(text2); } Object.defineProperty(SplitParser2.prototype, "current", { get: function() { return this.nodeList[this.nodeList.length - 1]; }, enumerable: false, configurable: true }); SplitParser2.prototype.pushNodeToCurrent = function(node2) { var current = this.current; if (current) { current.children.push(node2); } else { this.results.push(node2); } }; SplitParser2.prototype.open = function(parentNode2) { this.nodeList.push(parentNode2); }; SplitParser2.prototype.isOpened = function() { return this.nodeList.length > 0; }; SplitParser2.prototype.nextLine = function(parser) { var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition; this.pushNodeToCurrent(createWhiteSpaceNode(value, startPosition, endPosition)); return endPosition; }; SplitParser2.prototype.nextSpace = function(parser) { var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition; this.pushNodeToCurrent(createNode("WhiteSpace", value, startPosition, endPosition)); }; SplitParser2.prototype.nextValue = function(parser) { var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition; this.pushNodeToCurrent(createTextNode(value, startPosition, endPosition)); }; SplitParser2.prototype.close = function(parser) { var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition; if (startPosition.offset !== endPosition.offset) { this.pushNodeToCurrent(createPunctuationNode(value, startPosition, endPosition)); } var currentNode = this.nodeList.pop(); if (!currentNode) { return; } if (currentNode.children.length === 0) { return; } var firstChildNode = currentNode.children[0]; var endNow = this.source.now(); currentNode.loc = { start: firstChildNode.loc.start, end: nowToLoc(endNow) }; var rawValue = this.source.sliceRange(firstChildNode.range[0], endNow.offset); currentNode.range = [firstChildNode.range[0], endNow.offset]; currentNode.raw = rawValue; this.results.push(currentNode); }; SplitParser2.prototype.toList = function() { return this.results; }; return SplitParser2; }(); sentenceSplitter.SplitParser = SplitParser; var createParsers = function(options) { if (options === void 0) { options = {}; } var newLine = new NewLineParser_1.NewLineParser(); var space = new SpaceParser_1.SpaceParser(); var separator = new SeparatorParser_1.SeparatorParser(options.SeparatorParser); var abbrMarker = new AbbrMarker_1.AbbrMarker(); var pairMaker = new PairMaker_1.PairMaker(); var anyValueParser = new AnyValueParser_1.AnyValueParser({ parsers: [newLine, separator], markers: [abbrMarker, pairMaker] }); return { newLine, space, separator, abbrMarker, anyValueParser }; }; function split(text2, options) { var _a = createParsers(options), newLine = _a.newLine, space = _a.space, separator = _a.separator, anyValueParser = _a.anyValueParser; var splitParser = new SplitParser(text2); var sourceCode = splitParser.source; while (!sourceCode.hasEnd) { if (newLine.test(sourceCode)) { splitParser.nextLine(newLine); } else if (space.test(sourceCode)) { splitParser.nextSpace(space); } else if (separator.test(sourceCode)) { splitParser.close(separator); } else { if (!splitParser.isOpened()) { splitParser.open(createEmptySentenceNode()); } splitParser.nextValue(anyValueParser); } } splitParser.close(space); return splitParser.toList(); } var split_1 = sentenceSplitter.split = split; function splitAST(paragraphNode, options) { var _a = createParsers(options), newLine = _a.newLine, space = _a.space, separator = _a.separator, anyValueParser = _a.anyValueParser; var splitParser = new SplitParser(paragraphNode); var sourceCode = splitParser.source; while (!sourceCode.hasEnd) { var currentNode = sourceCode.readNode(); if (!currentNode) { break; } if (currentNode.type === ast_node_types_1.ASTNodeTypes.Str) { if (space.test(sourceCode)) { logger_1.debugLog("space"); splitParser.nextSpace(space); } else if (separator.test(sourceCode)) { logger_1.debugLog("separator"); splitParser.close(separator); } else if (newLine.test(sourceCode)) { logger_1.debugLog("newline"); splitParser.nextLine(newLine); } else { if (!splitParser.isOpened()) { logger_1.debugLog("open -> createEmptySentenceNode()"); splitParser.open(createEmptySentenceNode()); } splitParser.nextValue(anyValueParser); } } else if (currentNode.type === ast_node_types_1.ASTNodeTypes.Break) { splitParser.pushNodeToCurrent(currentNode); sourceCode.peekNode(currentNode); } else { if (!splitParser.isOpened()) { splitParser.open(createEmptySentenceNode()); } splitParser.pushNodeToCurrent(currentNode); sourceCode.peekNode(currentNode); } } splitParser.close(space); return __assign(__assign({}, paragraphNode), { children: splitParser.toList() }); } sentenceSplitter.splitAST = splitAST; function createWhiteSpaceNode(text2, startPosition, endPosition) { return createNode("WhiteSpace", text2, startPosition, endPosition); } sentenceSplitter.createWhiteSpaceNode = createWhiteSpaceNode; function createPunctuationNode(text2, startPosition, endPosition) { return createNode("Punctuation", text2, startPosition, endPosition); } sentenceSplitter.createPunctuationNode = createPunctuationNode; function createTextNode(text2, startPosition, endPosition) { return createNode("Str", text2, startPosition, endPosition); } sentenceSplitter.createTextNode = createTextNode; function createEmptySentenceNode() { return { type: "Sentence", raw: "", loc: { start: { column: NaN, line: NaN }, end: { column: NaN, line: NaN } }, range: [NaN, NaN], children: [] }; } sentenceSplitter.createEmptySentenceNode = createEmptySentenceNode; function createNode(type2, text2, startPosition, endPosition) { return { type: type2, raw: text2, value: text2, loc: { start: nowToLoc(startPosition), end: nowToLoc(endPosition) }, range: [startPosition.offset, endPosition.offset] }; } sentenceSplitter.createNode = createNode; function nowToLoc(now2) { return { line: now2.line, column: now2.column }; } function wrapSentences(tr) { trTransform(tr, wrapSentencesTransform); } function wrapSentencesTransform(tr) { const schema2 = tr.doc.type.schema; const paragraphs = findChildrenByType_1(tr.doc, schema2.nodes.paragraph); paragraphs.reverse().forEach((paragraph) => { const $pos = tr.doc.resolve(paragraph.pos); const parent = $pos.node($pos.depth); if (parent.type === schema2.nodes.list_item && $pos.node($pos.depth - 1).attrs.tight) { return; } if (schema2.nodes.table && findParentNodeOfTypeClosestToPos_1($pos, schema2.nodes.table)) { return; } let textContent = ""; const paraContent = paragraph.node.content; const from2 = 0; const to = paraContent.size; paraContent.nodesBetween(from2, to, (node2, pos) => { if (node2.isText) { textContent += node2.text.slice(Math.max(from2, pos) - pos, to - pos); } else if (node2.type.name === "hard_break") { textContent += "\n"; } }, 0); if (/^\(ref:[^\s]+\)\s+[^\s]/.test(textContent)) { return; } const parts = split_1(textContent); const sentences = []; for (let i2 = 0; i2 < parts.length; i2++) { if (parts[i2].type === "Sentence") { if (i2 === parts.length - 1 || parts[i2 + 1].type !== "WhiteSpace" || parts[i2 + 1].value !== "\n") { sentences.push(parts[i2]); } } } sentences.reverse().forEach((sentence) => { if (tr.doc.resolve(paragraph.pos + sentence.range[1] + 1).marks().length === 0) { const hardBreak = schema2.text("\n"); const hardBreakPos = paragraph.pos + sentence.range[1] + 2; tr.insert(hardBreakPos, hardBreak); } }); }); } const plugin$4 = new PluginKey("yaml-metadata-title"); function yamlMetadataTitlePlugin() { return new Plugin({ key: plugin$4, state: { init(_config, state) { return titleFromState(state); }, apply(tr, title, oldState, newState) { const transactions = [tr]; if (!tr.docChanged) { return title; } else if (!transactionsAreTypingChange(transactions)) { return titleFromState(newState); } else if (transactionsHaveChange(transactions, oldState, newState, isYamlMetadataNode)) { return titleFromState(newState); } else { return title; } } } }); } function getTitle(state) { return plugin$4.getState(state); } function setTitle(state, title) { const schema2 = state.schema; if (!schema2.nodes.yaml_metadata) { return; } const tr = state.tr; const escapedTitle = title.replace(/"/g, `\\"`); const titleLine = ` title: "${escapedTitle}" `; const yamlNodes = yamlMetadataNodes(tr.doc); let foundTitle = false; for (const yaml of yamlNodes) { const titleMatch = yaml.node.textContent.match(kYamlMetadataTitleRegex); if (titleMatch) { const updatedMetadata = yaml.node.textContent.replace(kYamlMetadataTitleRegex, titleLine); const updatedNode = schema2.nodes.yaml_metadata.createAndFill({}, schema2.text(updatedMetadata)); if (updatedNode) { tr.replaceRangeWith(yaml.pos, yaml.pos + yaml.node.nodeSize, updatedNode); foundTitle = true; break; } } } if (!foundTitle) { const yamlText = schema2.text(`---${titleLine}---`); const yamlNode = schema2.nodes.yaml_metadata.create({}, yamlText); tr.insert(1, yamlNode); } return tr; } const kOutlineIdsTransaction = "OutlineIds"; const plugin$3 = new PluginKey("outline"); const extension$Z = { appendTransaction: () => { return [ { name: "outline", filter: hasOutlineIdsTransaction, nodeFilter: isOutlineNode, append: (tr) => { const usedIds = /* @__PURE__ */ new Set(); const needsOutlineId = (node2) => { if (isOutlineNode(node2)) { if (node2.attrs.navigation_id === null) { return true; } else if (usedIds.has(node2.attrs.navigation_id)) { return true; } else { usedIds.add(node2.attrs.navigation_id); return false; } } else { return false; } }; const needsOutlineIdNodes = findTopLevelBodyNodes(tr.doc, needsOutlineId); needsOutlineIdNodes.forEach((outlineId) => { tr.setNodeMarkup(outlineId.pos, outlineId.node.type, { ...outlineId.node.attrs, navigation_id: uuidv4() }); tr.setMeta(kOutlineIdsTransaction, true); }); } } ]; }, commands: () => { return [ new ProsemirrorCommand(EditorCommandId.GoToNextSection, ["Mod-PageDown"], goToOutlineCommand("next", "section")), new ProsemirrorCommand(EditorCommandId.GoToPreviousSection, ["Mod-PageUp"], goToOutlineCommand("previous", "section")), new ProsemirrorCommand(EditorCommandId.GoToNextChunk, [], goToOutlineCommand("next", "chunk")), new ProsemirrorCommand(EditorCommandId.GoToPreviousChunk, [], goToOutlineCommand("previous", "chunk")) ]; }, plugins: () => { return [ new Plugin({ key: plugin$3, state: { init: (_config, state) => { return editorOutline(state); }, apply: (tr, value, oldState, newState) => { if (transactionsAffectOutline([tr], oldState, newState)) { return editorOutline(newState); } else { return value; } } } }) ]; } }; function goToOutlineCommand(dir, targetType) { return (state, dispatch, view) => { if (dispatch && view) { let outline = getDocumentOutline(state); if (dir === "previous") { outline = outline.reverse(); } const target2 = outline.find((nodeWithPos) => { const isChunk = nodeWithPos.node.type === state.schema.nodes.rmd_chunk; if (isChunk !== (targetType === "chunk")) { return false; } if (dir === "next") { return nodeWithPos.pos > state.selection.head; } else { return nodeWithPos.pos < state.selection.head - 1; } }); if (target2) { navigateToPos(view, target2.pos, false); } } return true; }; } function editorOutline(state) { const doc2 = state.doc; const outlineNodes = findTopLevelBodyNodes(doc2, isOutlineNode); if (!outlineNodes.length) { return []; } const sequence = /* @__PURE__ */ new Map(); const editorOutlineItem = (nodeWithPos, defaultLevel) => { const typename = nodeWithPos.node.type.name; let sequenceLast = sequence.get(typename); if (sequenceLast === void 0) { sequenceLast = 0; } const sequenceNext = sequenceLast + 1; sequence.set(typename, sequenceNext); const item = { navigation_id: nodeWithPos.node.attrs.navigation_id, type: nodeWithPos.node.type.name, level: nodeWithPos.node.attrs.level || defaultLevel, title: nodeWithPos.node.type.spec.code ? nodeWithPos.node.type.name : nodeWithPos.node.textContent, sequence: sequenceNext, children: [] }; if (nodeWithPos.node.type.name === "rmd_chunk") { const chunk = rmdChunkEngineAndLabel(nodeWithPos.node.textContent); if (chunk) { item.title = chunk.label; } } return item; }; const rootOutlineItem = { navigation_id: "", type: "", level: 0, sequence: 0, title: "", children: [] }; const containers = []; containers.push(rootOutlineItem); const top2 = () => containers[containers.length - 1]; outlineNodes.forEach((nodeWithPos) => { const outlineItem = editorOutlineItem(nodeWithPos, top2().level + 1); while (outlineItem.level <= top2().level) { containers.pop(); } top2().children.push(outlineItem); if (outlineItem.type === "heading") { containers.push(outlineItem); } }); return rootOutlineItem.children; } function hasOutlineIdsTransaction(transactions) { return transactions.some((tr) => tr.getMeta(kOutlineIdsTransaction)); } function transactionsAffectOutline(transactions, oldState, newState) { return transactions.some((tr) => tr.getMeta(kSetMarkdownTransaction)) || hasOutlineIdsTransaction(transactions) || transactionsHaveChange(transactions, oldState, newState, isOutlineNode); } function getOutline(state) { return plugin$3.getState(state); } const key$b = new PluginKey("find-plugin"); class FindPlugin extends Plugin { constructor() { super({ key: key$b, state: { init: () => { return DecorationSet.empty; }, apply: (tr) => { if (this.updating || isEffectTransaction(tr)) { return this.resultDecorations(tr); } else { return DecorationSet.empty; } } }, view: () => ({ update: (view) => { this.clearResultObserver(); if (this.isResultSelected(view.state)) { this.scrollToSelectedResult(view, null); } } }), props: { decorations: (state) => { return key$b.getState(state); } } }); __publicField(this, "term", ""); __publicField(this, "options", {}); __publicField(this, "updating", false); __publicField(this, "resultElement", null); __publicField(this, "resultObserver", null); __publicField(this, "resultObserverTimer", 0); } find(term, options) { return (state, dispatch) => { if (dispatch) { this.term = !options.regex ? term.replace(/[-/\\^$*+?.()|[\]{}]/g, (escape2) => { return "\\u" + ("0000" + escape2.charCodeAt(0).toString(16)).slice(-4); }) : term; this.options = options; this.updateResults(state, dispatch); } return true; }; } matchCount(state) { return key$b.getState(state).find().length; } selectFirst() { return (state, dispatch) => { const decorations = key$b.getState(state).find(0); if (decorations.length === 0) { return false; } if (dispatch) { const tr = state.tr; this.selectResult(tr, decorations[0]); this.withResultUpdates(() => { dispatch(tr); }); } return true; }; } selectCurrent() { return this.selectNext(false); } selectNext(afterSelection = true) { return (state, dispatch) => { const selectedText = state.doc.textBetween(state.selection.from, state.selection.to); const searchFrom = afterSelection ? this.matchesTerm(selectedText) ? state.selection.to + 1 : state.selection.to : state.selection.from; const decorationSet = key$b.getState(state); let decorations = decorationSet.find(searchFrom); if (decorations.length === 0) { if (this.options.wrap) { const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from; decorations = decorationSet.find(0, searchTo); if (decorations.length === 0) { return false; } } else { return false; } } if (dispatch) { const tr = state.tr; this.selectResult(tr, decorations[0]); this.withResultUpdates(() => { dispatch(tr); }); } return true; }; } selectPrevious() { return (state, dispatch) => { const selectedText = state.doc.textBetween(state.selection.from, state.selection.to); const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from; const decorationSet = key$b.getState(state); let decorations = decorationSet.find(0, searchTo); if (decorations.length === 0) { if (this.options.wrap) { const searchFrom = this.matchesTerm(selectedText) ? state.selection.to + 1 : state.selection.to; decorations = decorationSet.find(searchFrom); if (decorations.length === 0) { return false; } } else { return false; } } if (dispatch) { const decoration = decorations.reduce((lastDecoration, nextDecoration) => { if (nextDecoration.from > lastDecoration.from) { return nextDecoration; } else { return lastDecoration; } }); const tr = state.tr; this.selectResult(tr, decoration); this.withResultUpdates(() => { dispatch(tr); }); } return true; }; } replace(text2) { return (state, dispatch) => { if (!this.isResultSelected(state)) { return false; } if (dispatch) { const tr = state.tr; const selectionMarks = tr.selection.$from.marksAcross(tr.selection.$to); if (text2.length > 0) { tr.replaceSelectionWith(state.schema.text(text2, selectionMarks), false); } else { tr.deleteSelection(); } this.withResultUpdates(() => { dispatch(tr); }); } return true; }; } replaceAll(text2) { return (state, dispatch) => { let replaced = 0; if (!this.hasTerm()) { return replaced; } if (dispatch) { const tr = state.tr; const decorationSet = key$b.getState(state); const decorations = decorationSet.find(0); decorations.forEach((decoration) => { const from2 = tr.mapping.map(decoration.from); const to = tr.mapping.map(decoration.to); tr.insertText(text2, from2, to); replaced += 1; }); this.withResultUpdates(() => { dispatch(tr); }); } return replaced; }; } clear() { return (state, dispatch) => { if (dispatch) { this.term = ""; this.options = {}; this.updateResults(state, dispatch); } return true; }; } updateResults(state, dispatch) { this.withResultUpdates(() => { const tr = state.tr; tr.setMeta(kAddToHistoryTransaction, false); dispatch(tr); }); } resultDecorations(tr) { if (!this.hasTerm()) { return DecorationSet.empty; } const decorations = []; const textNodes2 = mergedTextNodes(tr.doc); textNodes2.forEach((textNode) => { const search2 = this.findRegEx(); if (!search2) { return; } let m2; while (m2 = search2.exec(textNode.text)) { if (m2[0] === "") { break; } const from2 = textNode.pos + m2.index; const to = textNode.pos + m2.index + m2[0].length; const classes = ["pm-find-text"]; if (from2 === tr.selection.from && to === tr.selection.to) { classes.push("pm-selected-text"); } decorations.push(Decoration.inline(from2, to, { class: classes.join(" ") })); } }); return decorations.length ? DecorationSet.create(tr.doc, decorations) : DecorationSet.empty; } withResultUpdates(f2) { this.updating = true; f2(); this.updating = false; } selectResult(tr, decoration) { const selection = new TextSelection(tr.doc.resolve(decoration.from), tr.doc.resolve(decoration.to)); return tr.setSelection(selection).scrollIntoView(); } isResultSelected(state) { if (this.hasTerm()) { const selectedText = state.doc.textBetween(state.selection.from, state.selection.to); return this.matchesTerm(selectedText); } else { return false; } } watchForSelectedResult(view) { this.clearResultObserver(); this.resultObserver = new MutationObserver((records) => { let resultElement = null; const isResultNode = (node2) => { if (node2.nodeType !== node2.ELEMENT_NODE) { return false; } const ele = node2; return ele.classList.contains("pm-find-text") && ele.classList.contains("pm-selected-text"); }; records.forEach((mutation) => { switch (mutation.type) { case "childList": mutation.addedNodes.forEach((node2) => { if (isResultNode(node2)) { resultElement = node2; } }); break; case "attributes": if (isResultNode(mutation.target)) { resultElement = mutation.target; } break; } }); if (resultElement) { this.scrollToSelectedResult(view, resultElement); this.clearResultObserver(); } }); const editingRoot = editingRootNode(view.state.selection); if (editingRoot) { const container = view.nodeDOM(editingRoot.pos); this.resultObserver.observe(container, { subtree: true, childList: true, attributeFilter: ["class"] }); this.resultObserverTimer = window.setTimeout(() => { this.clearResultObserver(); }, 1e3); } } clearResultObserver() { if (this.resultObserver !== null) { this.resultObserver.disconnect(); this.resultObserver = null; } if (this.resultObserverTimer !== 0) { window.clearTimeout(this.resultObserverTimer); this.resultObserverTimer = 0; } } scrollToSelectedResult(view, resultElement) { var _a; const editingRoot = editingRootNode(view.state.selection); if (editingRoot) { const container = view.nodeDOM(editingRoot.pos); if (resultElement === null) { resultElement = container.querySelector(".pm-find-text.pm-selected-text"); } if (resultElement === null || resultElement === this.resultElement) { this.watchForSelectedResult(view); return; } this.resultElement = resultElement; let offset = 100; let scrollElement = resultElement; while (((_a = scrollElement.offsetParent) == null ? void 0 : _a.parentElement) !== container) { offset += scrollElement.offsetTop; const nextParent = scrollElement.offsetParent; if (nextParent === null) { break; } scrollElement = nextParent; } const scroller = zenscroll.createScroller(editorScrollContainer(container)); scroller.center(scrollElement, 350, offset); } } hasTerm() { return this.term.length > 0; } matchesTerm(text2) { if (this.hasTerm()) { const regex2 = this.findRegEx(); if (regex2) { return regex2.test(text2); } else { return false; } } else { return false; } } findRegEx() { try { return new RegExp(this.term, !this.options.caseSensitive ? "gui" : "gu"); } catch { return null; } } } const extension$Y = { plugins: () => { return [new FindPlugin()]; } }; function find(view, term, options) { return findPlugin(view).find(term, options)(view.state, view.dispatch); } function matchCount(view) { return findPlugin(view).matchCount(view.state); } function selectFirst(view) { return findPlugin(view).selectFirst()(view.state, view.dispatch); } function selectCurrent(view) { return findPlugin(view).selectCurrent()(view.state, view.dispatch); } function selectNext(view) { return findPlugin(view).selectNext()(view.state, view.dispatch); } function selectPrevious(view) { return findPlugin(view).selectPrevious()(view.state, view.dispatch); } function replace(view, text2) { return findPlugin(view).replace(text2)(view.state, view.dispatch); } function replaceAll(view, text2) { return findPlugin(view).replaceAll(text2)(view.state, view.dispatch); } function clear(view) { return findPlugin(view).clear()(view.state, view.dispatch); } function findPluginState(state) { return key$b.getState(state); } function findPlugin(view) { return key$b.get(view.state); } const kCompletionDefaultItemHeight = 22; const kCompletionDefaultMaxVisible = 10; const kCompletionDefaultWidth = 180; function selectionAllowsCompletions(selection) { const schema2 = selection.$head.parent.type.schema; if (!selection.empty) { return false; } if (!canInsertNode(selection, schema2.nodes.text)) { return false; } if (schema2.marks.code && !!schema2.marks.code.isInSet(selection.$from.marks())) { return false; } if (selection.$head.parent.type.spec.code) { return false; } return true; } function completionsShareScope(handler, prevHandler) { if (!prevHandler) { return false; } if (prevHandler.scope && prevHandler.scope === handler.scope) { return true; } else { return prevHandler.id === handler.id; } } function performCompletionReplacement(tr, pos, replacement) { tr.setSelection(new TextSelection(tr.doc.resolve(pos), tr.selection.$head)); if (replacement instanceof Node$2) { const marks = tr.selection.$head.marks(); tr.replaceSelectionWith(replacement, false); marks.forEach((mark) => tr.addMark(pos, tr.selection.to, mark)); } else { tr.insertText(replacement); } tr.setMeta(kInsertCompletionTransaction, true); } var thenBy_module = function() { function identity2(v2) { return v2; } function ignoreCase(v2) { return typeof v2 === "string" ? v2.toLowerCase() : v2; } function makeCompareFunction(f2, opt) { opt = typeof opt === "object" ? opt : { direction: opt }; if (typeof f2 != "function") { var prop2 = f2; f2 = function(v12) { return !!v12[prop2] ? v12[prop2] : ""; }; } if (f2.length === 1) { var uf2 = f2; var preprocess = opt.ignoreCase ? ignoreCase : identity2; var cmp2 = opt.cmp || function(v12, v2) { return v12 < v2 ? -1 : v12 > v2 ? 1 : 0; }; f2 = function(v12, v2) { return cmp2(preprocess(uf2(v12)), preprocess(uf2(v2))); }; } const descTokens = { "-1": "", desc: "" }; if (opt.direction in descTokens) return function(v12, v2) { return -f2(v12, v2); }; return f2; } function tb2(func, opt) { var x2 = typeof this == "function" && !this.firstBy ? this : false; var y2 = makeCompareFunction(func, opt); var f2 = x2 ? function(a2, b2) { return x2(a2, b2) || y2(a2, b2); } : y2; f2.thenBy = tb2; return f2; } tb2.firstBy = tb2; return tb2; }(); var OmniInsertGroup = /* @__PURE__ */ ((OmniInsertGroup2) => { OmniInsertGroup2["Common"] = "Common"; OmniInsertGroup2["Headings"] = "Headings"; OmniInsertGroup2["Lists"] = "Lists"; OmniInsertGroup2["Math"] = "Math"; OmniInsertGroup2["References"] = "References"; OmniInsertGroup2["Content"] = "Content"; OmniInsertGroup2["Blocks"] = "Blocks"; OmniInsertGroup2["Chunks"] = "Chunks"; return OmniInsertGroup2; })(OmniInsertGroup || {}); const omniInsertGroupOrder = new Map(Object.keys(OmniInsertGroup).map((key2, index2) => [key2, index2])); function omniInsertGroupCompare(a2, b2) { return omniInsertGroupOrder.get(a2.group) - omniInsertGroupOrder.get(b2.group); } function omniInsertPriorityCompare(a2, b2) { return (a2.priority || 0) - (b2.priority || 0); } function emptyNodePlaceholderPlugin(nodeType, placeholder, filter) { const pluginKey2 = new PluginKey(nodeType.name + "-empty-placeholder"); return new Plugin({ key: pluginKey2, state: { init() { return DecorationSet.empty; }, apply(tr) { const emptyNode = findParentNode_1((node2) => node2.type === nodeType && node2.childCount === 0)(tr.selection); if (emptyNode && (!filter || filter(tr))) { const decoration = placeholderDecoration(emptyNode.pos + 1, placeholder(emptyNode.node)); return DecorationSet.create(tr.doc, [decoration]); } else { return DecorationSet.empty; } } }, props: { decorations(state) { return pluginKey2.getState(state); } } }); } function placeholderDecoration(pos, text2) { return Decoration.widget(pos, () => { const placeholder = window.document.createElement("span"); placeholder.classList.add("pm-placeholder-text-color"); placeholder.innerText = text2; return placeholder; }); } function iconAndTextPlaceholderDecoration(pos, icon2, text2) { return Decoration.widget(pos, () => { const container = window.document.createElement("span"); const iconImg = window.document.createElement("img"); iconImg.classList.add("pm-placeholder-icon"); iconImg.setAttribute("src", icon2); iconImg.setAttribute("draggable", "false"); const message = window.document.createElement("span"); message.classList.add("pm-placeholder-text-color"); message.classList.add("pm-placeholder-text"); message.innerText = text2; container.appendChild(iconImg); container.appendChild(message); return container; }); } function searchPlaceholderDecoration(pos, ui2, text2) { return iconAndTextPlaceholderDecoration(pos, ui2.images.search, text2 || ""); } const omni_insertCompletion = ""; function omniInsertCompletionHandler(omniInserters, ui2) { return { id: "E305158D-20D6-474D-84E6-06607CA58578", completions: omniInsertCompletions(omniInserters, ui2), noFocus: (completion2) => { return completion2.noFocus === true; }, filter: (completions, state, token2) => { return completions.filter((inserter) => { var _a; return token2.length === 0 || inserter.name.toLowerCase().indexOf(token2) !== -1 || ((_a = inserter.keywords) == null ? void 0 : _a.some((keyword) => keyword.indexOf(token2) !== -1)); }).filter((inserter) => { return inserter.command(state); }).sort( thenBy_module.firstBy(omniInsertGroupCompare).thenBy(omniInsertPriorityCompare, { direction: "desc" }).thenBy("name") ); }, replace(view, pos, completion2) { const removeCommandText = () => { const tr = view.state.tr; tr.deleteRange(pos, view.state.selection.head); tr.setMeta(kAddToHistoryTransaction, false); view.dispatch(tr); }; if (completion2) { removeCommandText(); completion2.command(view.state, view.dispatch, view); if (completion2.selectionOffset) { const tr = view.state.tr; setTextSelection_1(tr.selection.from + completion2.selectionOffset)(tr); tr.setMeta(kAddToHistoryTransaction, false); view.dispatch(tr); } } else { removeCommandText(); } return Promise.resolve(); }, view: { component: OmniInserterView, key: (command) => command.id, width: 320, height: 46, maxVisible: 6 } }; } const kOmniInsertRegex = /\/([\w]*)$/; function omniInsertCompletions(omniInserters, ui2) { return (text2, context) => { const match2 = text2.match(kOmniInsertRegex); if (match2) { if (match2.index !== 0 && !isOmniInsertCommandActive(context.selection)) { return null; } const query = match2[1].toLowerCase(); const decorations = query.length === 0 ? DecorationSet.create(context.doc, [ placeholderDecoration(context.selection.head, ui2.context.translateText(" type to search...")) ]) : void 0; return { pos: context.selection.head - match2[0].length, token: query, completions: () => { return Promise.resolve(omniInserters); }, decorations }; } else { return null; } }; } const OmniInserterView = (inserter) => { return /* @__PURE__ */ React.createElement("table", { className: "pm-omni-insert-completion" }, /* @__PURE__ */ React.createElement("tbody", null, /* @__PURE__ */ React.createElement("tr", null, /* @__PURE__ */ React.createElement("td", { className: "pm-omni-insert-icon" }, /* @__PURE__ */ React.createElement("img", { className: "pm-block-border-color", src: inserter.image(), alt: "", draggable: "false" })), /* @__PURE__ */ React.createElement("td", null, /* @__PURE__ */ React.createElement("div", { className: "pm-omni-insert-name pm-completion-list-item-text" }, inserter.name), /* @__PURE__ */ React.createElement("div", { className: "pm-omni-insert-description pm-completion-list-item-text" }, inserter.description))))); }; function isOmniInsertCommandActive(selection) { const schema2 = selection.$head.parent.type.schema; return schema2.marks.omni_insert.isInSet(selection.$head.marks()); } function markOmniInsert() { return { marks: [ { name: "omni_insert", spec: { inclusive: true, noInputRules: true, parseDOM: [{ tag: "span[class*='omni_insert']" }], toDOM() { return ["span", { class: "omni_insert" }]; } }, pandoc: { readers: [], writer: { priority: 30, write: (output, _mark, parent) => { output.writeInlines(parent); } } } } ] }; } function omniInsertExtension(omniInserters, inputRuleFilter, ui2) { return { commands: () => [new OmniInsertCommand(inputRuleFilter)], completionHandlers: () => [omniInsertCompletionHandler(omniInserters, ui2)] }; } class OmniInsertCommand extends ProsemirrorCommand { constructor(markFilter) { super( EditorCommandId.OmniInsert, ["Mod-/"], (state, dispatch) => { if (!selectionAllowsCompletions(state.selection)) { return false; } if (markIsActive(state, state.schema.marks.omni_insert)) { return false; } if (!markFilter(state)) { return false; } if (dispatch) { const mark = state.schema.marks.omni_insert.create(); const node2 = state.schema.text("/", [mark]); const tr = state.tr; tr.replaceSelectionWith(node2, false); dispatch(tr); } return true; } ); } } var createRoot; var m = reactDom.exports; { createRoot = m.createRoot; m.hydrateRoot; } const Popup = (props) => { const className = ["pm-popup", "pm-text-color", "pm-proportional-font", "pm-pane-border-color", "pm-background-color"].concat(props.classes || []).join(" "); const style = { ...props.style, position: "absolute", zIndex: 10 }; return /* @__PURE__ */ React.createElement("div", { className, style, contentEditable: false, suppressContentEditableWarning: true }, props.children); }; const completionPopup = ""; const kNoResultsHeight = 22; function createCompletionPopup() { const popup = window.document.createElement("div"); popup.style.position = "absolute"; popup.style.zIndex = "900"; window.document.body.appendChild(popup); return { el: popup, root: createRoot(popup) }; } function renderCompletionPopup(view, props, popup) { const size2 = completionPopupSize(props); const positionStyles = completionPopupPositionStyles(view, props.pos, size2.width, size2.height); applyStyles(popup.el, [], positionStyles); popup.root.render(/* @__PURE__ */ React.createElement(CompletionPopup, { ...props })); } function destroyCompletionPopup(popup) { popup.root.unmount(); popup.el.remove(); } const CompletionPopup = (props) => { const classes = ["pm-completion-popup"].concat(props.ui.prefs.darkMode() ? ["pm-dark-mode"] : []); return /* @__PURE__ */ React.createElement(Popup, { classes }, /* @__PURE__ */ React.createElement(CompletionList, { ...props })); }; const CompletionList = (props) => { const size2 = completionPopupSize(props); const itemHeight = props.handler.view.height || kCompletionDefaultItemHeight; const containerRef = React.useRef(null); react.exports.useEffect(() => { const containerEl = containerRef.current; if (containerEl) { const rows = containerEl.getElementsByClassName("pm-completion-list-item-row"); const scrollToRow = rows.item(props.selectedIndex); if (scrollToRow) { const scroller = zenscroll.createScroller(editorScrollContainer(containerEl)); scroller.intoView(scrollToRow); } } }, [props.selectedIndex]); const itemEventHandler = (index2, handler) => { return (event) => { event.preventDefault(); event.stopPropagation(); handler(index2); }; }; const completions = props.handler.view.horizontal ? horizontalCompletions : verticalCompletions; const classes = ["pm-completion-list"].concat(props.handler.view.horizontal ? ["pm-completion-list-horizontal"] : []); return /* @__PURE__ */ React.createElement( "div", { ref: containerRef, className: classes.join(" "), style: { width: size2.width + "px", height: size2.height + "px" } }, /* @__PURE__ */ React.createElement("table", null, completionsHeader(props.handler, props.completions.length, props), /* @__PURE__ */ React.createElement("tbody", null, completions(props, itemHeight, itemEventHandler), props.completions.length === 0 ? completionsNoResults(props) : null)) ); }; function completionsHeader(handler, completionCount, props) { if (handler.view.header) { const completionHeader = handler.view.header ? handler.view.header() : void 0; const headerProps = { message: completionHeader == null ? void 0 : completionHeader.message, ...props }; if (completionHeader) { const header = React.createElement(completionHeader.component, headerProps); return /* @__PURE__ */ React.createElement("thead", null, /* @__PURE__ */ React.createElement("tr", null, /* @__PURE__ */ React.createElement( "th", { style: { lineHeight: completionHeader.height + "px" }, colSpan: props.handler.view.horizontal ? completionCount : void 0 }, header ))); } else { return null; } } else { return null; } } function verticalCompletions(props, itemHeight, itemEventHandler) { return props.completions.map((completion2, index2) => { const { key: key2, cell } = completionItemCell(props, completion2, index2); return /* @__PURE__ */ React.createElement( "tr", { key: key2, style: { lineHeight: itemHeight + "px" }, className: "pm-completion-list-item-row", onClick: itemEventHandler(index2, props.onClick), onMouseMove: itemEventHandler(index2, props.onHover) }, cell ); }); } function horizontalCompletions(props, itemHeight, itemEventHandler) { const cellWidths = horizontalCellWidths(props); return /* @__PURE__ */ React.createElement("tr", { style: { lineHeight: itemHeight + "px" } }, props.completions.map((completion2, index2) => { const { cell } = completionItemCell(props, completion2, index2, cellWidths[index2], itemEventHandler); return cell; })); } function completionItemCell(props, completion2, index2, width, itemEventHandler) { const key2 = props.handler.view.key(completion2); const itemProps = typeof completion2 === "object" ? completion2 : {}; const item = React.createElement(props.handler.view.component, { ...itemProps, key: key2 }); const className = "pm-completion-list-item" + (index2 === props.selectedIndex ? " pm-selected-list-item" : ""); const cell = /* @__PURE__ */ React.createElement( "td", { key: key2, style: width ? { width: width + "px" } : void 0, className, onClick: itemEventHandler ? itemEventHandler(index2, props.onClick) : void 0, onMouseMove: itemEventHandler ? itemEventHandler(index2, props.onHover) : void 0 }, item ); return { key: key2, cell }; } function completionsNoResults(props) { return /* @__PURE__ */ React.createElement( "tr", { className: "pm-completion-no-results pm-placeholder-text-color", style: { lineHeight: kNoResultsHeight + "px" } }, /* @__PURE__ */ React.createElement("td", null, props.noResults) ); } function completionPopupSize(props) { const kCompletionsChrome = 8; let { height: itemHeight = kCompletionDefaultItemHeight } = props.handler.view; const { maxVisible = kCompletionDefaultMaxVisible, width = kCompletionDefaultWidth } = props.handler.view; const kBorderPad = 2; itemHeight += kBorderPad; let headerHeight = 0; if (props.handler.view.header) { const completionHeader = props.handler.view.header(); if (completionHeader) { headerHeight = completionHeader.height + kBorderPad; } } if (props.handler.view.horizontal) { const kTablePadding = 8; const kCellPadding = 8; const kCellBorders = 2; const totalWidth = horizontalCellWidths(props).reduce((total, current) => { return total + (current + kCellPadding + kCellBorders); }, 0) + kTablePadding; return { width: totalWidth, height: headerHeight + itemHeight + kCompletionsChrome }; } else { const height = headerHeight + kCompletionsChrome + Math.max(itemHeight * Math.min(maxVisible, props.completions.length), kNoResultsHeight); return { width, height }; } } function horizontalCellWidths(props) { const { width = kCompletionDefaultWidth } = props.handler.view; return props.completions.map((_completion, index2) => { if (props.handler.view.horizontalItemWidths) { return props.handler.view.horizontalItemWidths[index2] || width; } else { return width; } }); } function completionPopupPositionStyles(view, pos, width, height) { const kMinimumPaddingToEdge = 5; const kCompletionsVerticalPadding = 5; const selectionCoords = view.coordsAtPos(pos); let top2 = selectionCoords.bottom + kCompletionsVerticalPadding; let left = selectionCoords.left; if (top2 + height + kMinimumPaddingToEdge >= window.innerHeight) { top2 = Math.max(selectionCoords.top - height - kCompletionsVerticalPadding, kCompletionsVerticalPadding); } if (left + width + kMinimumPaddingToEdge >= window.innerWidth) { const cursorCoords = view.coordsAtPos(view.state.selection.head); left = cursorCoords.right - width; } return { left: left + "px", top: top2 + "px" }; } function completionExtension(handlers2, inputRuleFilter, ui2, events) { return { plugins: () => [new CompletionPlugin(handlers2, inputRuleFilter, ui2, events)] }; } const key$a = new PluginKey("completion"); class CompletionPlugin extends Plugin { constructor(handlers2, inputRuleFilter, ui2, events) { super({ key: key$a, state: { init: () => ({}), apply: (tr, prevState) => { var _a, _b; if (!this.view) { return {}; } if (!tr.docChanged && !tr.storedMarksSet && tr.selectionSet) { return {}; } if (!selectionAllowsCompletions(tr.selection)) { return {}; } const textBefore = completionTextBeforeCursor(tr.selection); if (textBefore.length === 0) { return {}; } const isPaste = tr.getMeta(kPasteTransaction) === true; for (const handler of handlers2) { if (handler.enabled === null || (handler.enabled ? handler.enabled(tr) : inputRuleFilter(tr))) { const result = handler.completions(textBefore, tr); if (result) { let prevToken; if (handler.id === ((_a = prevState.handler) == null ? void 0 : _a.id) && result.pos === ((_b = prevState.result) == null ? void 0 : _b.pos) && handler.filter) { prevToken = prevState.result.token; } else if (tr.getMeta(kInsertCompletionTransaction) && completionsShareScope(handler, prevState.handler)) { continue; } return { handler, result, prevToken, isPaste }; } } } return {}; } }, view: () => ({ update: (view) => { this.version++; this.view = view; this.updateCompletions(view, true); }, destroy: () => { this.scrollUnsubscribe(); window.document.removeEventListener("focusin", this.clearCompletions); this.clearCompletions(); } }), props: { decorations: (state) => { var _a; const pluginState = key$a.getState(state); return (_a = pluginState == null ? void 0 : pluginState.result) == null ? void 0 : _a.decorations; }, handleDOMEvents: { keydown: (view, event) => { const kbEvent = event; let handled = false; const forwardKey = this.horizontal ? "ArrowRight" : "ArrowDown"; const backwardKey = this.horizontal ? "ArrowLeft" : "ArrowUp"; if (this.completionsActive()) { switch (kbEvent.key) { case "Escape": this.dismissCompletions(); handled = true; break; case "Enter": case "Tab": this.insertCompletion(view, this.selectedIndex); handled = true; break; case backwardKey: this.selectedIndex = Math.max(this.selectedIndex - 1, 0); this.renderCompletions(view); handled = true; break; case forwardKey: this.selectedIndex = Math.min(this.selectedIndex + 1, this.completions.length - 1); this.renderCompletions(view); handled = true; break; case "PageUp": this.selectedIndex = Math.max(this.selectedIndex - this.completionPageSize(), 0); this.renderCompletions(view); handled = true; break; case "PageDown": this.selectedIndex = Math.min( this.selectedIndex + this.completionPageSize(), this.completions.length - 1 ); this.renderCompletions(view); handled = true; break; case "End": this.selectedIndex = this.completions.length - 1; this.renderCompletions(view); handled = true; break; case "Home": this.selectedIndex = 0; this.renderCompletions(view); handled = true; break; } } if (handled) { event.preventDefault(); event.stopPropagation(); } return handled; } } } }); __publicField(this, "ui"); __publicField(this, "view", null); __publicField(this, "completionPopup", null); __publicField(this, "version", 0); __publicField(this, "allCompletions", []); __publicField(this, "completions", []); __publicField(this, "horizontal", false); __publicField(this, "selectedIndex", 0); __publicField(this, "completionQueue", new PromiseQueue()); __publicField(this, "scrollUnsubscribe"); this.ui = ui2; this.clearCompletions = this.clearCompletions.bind(this); this.scrollUnsubscribe = events.subscribe(ScrollEvent, this.clearCompletions); window.document.addEventListener("focusin", this.clearCompletions); } updateCompletions(view, resetSelection) { const state = key$a.getState(view.state); if ((state == null ? void 0 : state.handler) && (state == null ? void 0 : state.result)) { const requestVersion = this.version; const requestAllCompletions = async () => { const completions = await state.result.completions(view.state, { isPaste: state.isPaste === true }); if (!state.handler || !state.result) { return; } const updateCompletions = (updatedCompletions) => { var _a; this.setAllCompletions(updatedCompletions, !!((_a = state.handler) == null ? void 0 : _a.view.horizontal), resetSelection); if (state.handler && state.result && this.version === requestVersion) { const displayedCompletions = state.handler.filter ? state.handler.filter(this.allCompletions, view.state, state.result.token) : null; if (displayedCompletions) { this.setDisplayedCompletions(displayedCompletions, !!state.handler.view.horizontal, resetSelection); } this.renderCompletions(view); } }; if (Array.isArray(completions)) { updateCompletions(completions); } else { const completionStream = completions; updateCompletions(completionStream.items); const pollingInterval = window.setInterval(() => { if (this.version !== requestVersion) { clearInterval(pollingInterval); } else { const result = completionStream.stream(); if (result) { clearInterval(pollingInterval); updateCompletions(result); } } }, 300); } }; if (state.prevToken && state.handler.filter) { this.completionQueue.enqueue(async () => { if (state.handler && state.result && this.version === requestVersion) { const filteredCompletions = state.handler.filter( this.allCompletions, view.state, state.result.token, state.prevToken ); if (filteredCompletions) { this.setDisplayedCompletions(filteredCompletions, !!state.handler.view.horizontal, resetSelection); this.renderCompletions(view); } else { await requestAllCompletions(); } } }); } else { this.completionQueue.enqueue(requestAllCompletions); } } else { this.clearCompletions(); } } renderCompletions(view) { const state = key$a.getState(view.state); if (state && state.handler && (this.completions.length > 0 || !state.handler.view.hideNoResults)) { const props = { handler: state.handler, pos: state.result.pos + (state.result.offset || 0), completions: this.completions, selectedIndex: this.selectedIndex, noResults: this.ui.context.translateText("No Results"), onClick: (index2) => { this.insertCompletion(view, index2); }, onHover: (index2) => { this.selectedIndex = index2; this.renderCompletions(view); }, ui: this.ui }; if (this.completionPopup === null) { this.completionPopup = createCompletionPopup(); } renderCompletionPopup(view, props, this.completionPopup); } else { this.hideCompletionPopup(); } } async insertCompletion(view, index2) { index2 = index2 || this.selectedIndex; const completion2 = this.completions[index2]; const state = key$a.getState(view.state); if (state && state.handler) { const result = state.result; if (state.handler.replace) { await state.handler.replace(view, result.pos, this.completions[index2]); } else if (state.handler.replacement) { const replacement = state.handler.replacement(view.state.schema, this.completions[index2]); if (replacement) { const tr = view.state.tr; performCompletionReplacement(tr, result.pos, replacement); view.dispatch(tr); } } if (!state.handler.noFocus || !state.handler.noFocus(completion2)) { view.focus(); } } this.clearCompletions(); } async dismissCompletions() { if (this.view) { const state = key$a.getState(this.view.state); if ((state == null ? void 0 : state.result) && state.handler) { if (state.handler.replace) { await state.handler.replace(this.view, state.result.pos, null); } else if (state.handler.replacement) { state.handler.replacement(this.view.state.schema, null); } } } this.clearCompletions(); } clearCompletions() { this.setAllCompletions([], false, true); this.hideCompletionPopup(); } hideCompletionPopup() { if (this.completionPopup) { destroyCompletionPopup(this.completionPopup); this.completionPopup = null; } } completionsActive() { return !!this.completionPopup; } setAllCompletions(completions, horizontal, resetSelection) { this.allCompletions = completions; this.setDisplayedCompletions(completions, horizontal, resetSelection); } setDisplayedCompletions(completions, horizontal, resetSelection) { this.completions = completions; this.horizontal = !!horizontal; if (resetSelection || this.selectedIndex > this.completions.length - 1) { this.selectedIndex = 0; } } completionPageSize() { var _a; if (this.view) { const state = key$a.getState(this.view.state); return ((_a = state == null ? void 0 : state.handler) == null ? void 0 : _a.view.maxVisible) || kCompletionDefaultMaxVisible; } else { return kCompletionDefaultMaxVisible; } } } function completionTextBeforeCursor(selection, maxLength = 500) { const { $head } = selection; return $head.parent.textBetween( Math.max(0, $head.parentOffset - maxLength), $head.parentOffset, void 0, "\uFFFC" ); } const beginDocPos = () => 1; const endDocPos = (doc2) => doc2.nodeSize - 2; function getWords(state, start, end, wb2, excluded) { if (start === -1) { start = beginDocPos(); } if (end === -1) { end = endDocPos(state.doc); } const beginPos = findBeginWord(state, start, wb2.classifyCharacter); const endPos = findEndWord(state, end, wb2.classifyCharacter); const words = []; let currentPos = beginPos; while (currentPos <= endPos) { currentPos = advanceToWord(state, currentPos, wb2.classifyCharacter); if (currentPos >= endPos) { break; } const endWordPos = findEndWord(state, currentPos, wb2.classifyCharacter); if (endWordPos === currentPos) { break; } if (!excludeWord(state.doc, currentPos, endWordPos, excluded)) { const wordText = state.doc.textBetween(currentPos, endWordPos); words.push( ...wb2.breakWords(wordText).map((wordRange) => { return { start: currentPos + wordRange.start, end: currentPos + wordRange.end }; }) ); } currentPos = endWordPos; } return { hasNext: () => { return words.length > 0; }, next: () => { if (words.length > 0) { return words.shift(); } else { return null; } } }; } function excludeWord(doc2, from2, to, excluded) { if (excluded.some((markType) => doc2.rangeHasMark(from2, to, markType))) { return true; } const $from = doc2.resolve(from2); if ($from.parent.isBlock && $from.parent.type.spec.code) { return true; } const schema2 = doc2.type.schema; if (schema2.marks.link && doc2.rangeHasMark(from2, to, schema2.marks.link)) { const range2 = getMarkRange(doc2.resolve(from2), schema2.marks.link); if (range2 && /^[a-z]+:\/\/.*$/.test(doc2.textBetween(range2.from, range2.to))) { return true; } } return false; } function advanceToWord(state, pos, classifier) { while (pos < endDocPos(state.doc)) { const nextChar = charAt(state.doc, pos); if (classifier(nextChar) !== kCharClassNonWord) { break; } else { pos++; } } return pos; } function findBeginWord(state, pos, classifier) { while (pos >= beginDocPos()) { const prevChar = charAt(state.doc, pos - 1); if (classifier(prevChar) === kCharClassNonWord) { break; } else { pos--; } } return pos; } function findEndWord(state, pos, classifier) { while (pos < endDocPos(state.doc)) { const nextChar = charAt(state.doc, pos); if (classifier(nextChar) === kCharClassNonWord) { break; } else { pos++; } } return pos; } function charAt(doc2, pos) { if (pos < beginDocPos() || pos >= endDocPos(doc2)) { return 32; } else { return (doc2.textBetween(pos, pos + 1, " ", " ") || " ").charCodeAt(0); } } function excludedMarks(schema2, marks) { return marks.filter((mark) => mark.noSpelling).map((mark) => schema2.marks[mark.name]); } function spellcheckerWord(word) { return word.replace(/’/g, "'"); } function getSpellingDoc(view, marks) { const schema2 = view.state.schema; const excluded = excludedMarks(schema2, marks); const wb2 = wordBreaker(); spellingDocPlugin(view.state).onCheckBegin(); return { getWords: (start, end) => { return getWords(view.state, start, end, wb2, excluded); }, createAnchor: (pos) => { return spellingDocPlugin(view.state).createAnchor(pos); }, shouldCheck: () => { return true; }, setSelection: (wordRange) => { const tr = view.state.tr; tr.setSelection(TextSelection.create(tr.doc, wordRange.start, wordRange.end)); view.dispatch(tr); }, getText: (wordRange) => { const word = view.state.doc.textBetween(wordRange.start, wordRange.end); return spellcheckerWord(word); }, replaceSelection: (text2) => { const tr = view.state.tr; const selectionMarks = tr.selection.$from.marks(); tr.replaceSelectionWith(view.state.schema.text(text2, selectionMarks), false); view.dispatch(tr); }, getCursorPosition: () => { return view.state.selection.to; }, getSelectionStart: () => { return view.state.selection.from; }, getSelectionEnd: () => { return view.state.selection.to; }, getCursorBounds: () => { const fromCoords = view.coordsAtPos(view.state.selection.from); const toCoords = view.coordsAtPos(view.state.selection.to); return { x: Math.min(fromCoords.left, toCoords.left), y: fromCoords.top, width: Math.abs(fromCoords.left - toCoords.left), height: toCoords.bottom - fromCoords.top }; }, moveCursorNearTop: () => { scrollIntoView(view, view.state.selection.from, false, void 0, 100); }, dispose: () => { spellingDocPlugin(view.state).onCheckEnd(view); } }; } const spellingDocKey = new PluginKey("spelling-doc-plugin"); function spellingDocPlugin(state) { return spellingDocKey.get(state); } class SpellingDocPlugin extends Plugin { constructor() { super({ key: spellingDocKey, state: { init: () => { return DecorationSet.empty; }, apply: (tr) => { if (this.checking) { this.anchors.forEach((anchor) => { anchor.setPosition(tr.mapping.map(anchor.getPosition())); }); if (!tr.selection.empty) { return DecorationSet.create(tr.doc, [ Decoration.inline(tr.selection.from, tr.selection.to, { class: "pm-selected-text" }) ]); } } return DecorationSet.empty; } }, props: { decorations: (state) => { return spellingDocKey.getState(state); } } }); __publicField(this, "checking", false); __publicField(this, "anchors", []); } createAnchor(pos) { const anchor = new SpellingAnchor(pos); this.anchors.push(anchor); return anchor; } onCheckBegin() { this.checking = true; } onCheckEnd(view) { this.checking = false; this.anchors = []; if (!view.state.selection.empty) { const tr = view.state.tr; setTextSelection_1(tr.selection.to)(tr); view.dispatch(tr); } } } class SpellingAnchor { constructor(pos) { __publicField(this, "pos", 0); this.pos = pos; } getPosition() { return this.pos; } setPosition(pos) { this.pos = pos; } } const extension$X = () => { return { plugins: () => { return [new SpellingDocPlugin()]; } }; }; const kUpdateSpellingTransaction = "updateSpelling"; const kInvalidateSpellingWordTransaction = "invalidateSpellingWord"; const kSpellingErrorClass = "pm-spelling-error"; const realtimeSpellingKey = new PluginKey("spelling-realtime-plugin"); function realtimeSpellingPlugin(schema2, marks, spelling, prefs, events) { return new RealtimeSpellingPlugin(excludedMarks(schema2, marks), spelling, prefs, events); } function invalidateAllWords(view) { updateSpelling(view); } function invalidateWord(view, word) { const tr = view.state.tr; tr.setMeta(kInvalidateSpellingWordTransaction, word); tr.setMeta(kAddToHistoryTransaction, false); view.dispatch(tr); } const _RealtimeSpellingPlugin = class extends Plugin { constructor(excluded, spelling, prefs, events) { super({ key: realtimeSpellingKey, view: (view) => { this.view = view; return {}; }, state: { init: () => { return DecorationSet.empty; }, apply: (tr, old, oldState, newState) => { var _a; if ((_a = this.view) == null ? void 0 : _a.hasFocus()) { this.hasBeenFocused = true; } if (!this.prefs.realtimeSpelling() || !this.hasBeenFocused) { return DecorationSet.empty; } const wb2 = _RealtimeSpellingPlugin.wb; if (tr.getMeta(kUpdateSpellingTransaction)) { return DecorationSet.create(newState.doc, spellingDecorations(newState, wb2, spelling, excluded)); } else if (tr.getMeta(kInvalidateSpellingWordTransaction)) { const word = tr.getMeta(kInvalidateSpellingWordTransaction); const wordDecos = old.find(void 0, void 0, (spec) => spec.word === word); return old.remove(wordDecos); } else if (tr.docChanged) { let decos = old; let changeSet = ChangeSet.create(oldState.doc); changeSet = changeSet.addSteps(newState.doc, tr.mapping.maps, {}); const markRanges = []; for (const step2 of tr.steps) { if (step2 instanceof AddMarkStep || step2 instanceof RemoveMarkStep) { markRanges.push({ from: step2.from, to: step2.to }); } } const removeRanges = markRanges.concat( changeSet.changes.map((change) => ({ from: change.fromA, to: change.toA })) ); for (const range2 of removeRanges) { const fromPos = findBeginWord(oldState, range2.from, wb2.classifyCharacter); const toPos = findEndWord(oldState, range2.to, wb2.classifyCharacter); decos = decos.remove(decos.find(fromPos, toPos)); } decos = decos.map(tr.mapping, tr.doc); const addRanges = markRanges.concat( changeSet.changes.map((change) => ({ from: change.fromB, to: change.toB })) ); for (const range2 of addRanges) { decos = decos.add( tr.doc, spellingDecorations(newState, wb2, spelling, excluded, true, range2.from, range2.to) ); } return decos; } else if (tr.selectionSet) { let decos = old; const cursorDecos = decos.find(void 0, void 0, (spec) => !!spec.cursor); if (cursorDecos.length) { const word = cursorDecos[0].spec.word; const { from: from2, to } = cursorDecos[0]; decos = decos.remove(cursorDecos); decos = decos.add(tr.doc, [Decoration.inline(from2, to, { class: kSpellingErrorClass }, { word })]); } return decos; } else { return old; } } }, props: { decorations: (state) => { return realtimeSpellingKey.getState(state); } } }); __publicField(this, "hasBeenFocused", true); __publicField(this, "view", null); __publicField(this, "prefs"); this.prefs = prefs; const focusUnsubscribe = events.subscribe(FocusEvent, () => { if (this.view) { focusUnsubscribe(); this.hasBeenFocused = true; const v2 = this.view; const doUpdate = () => { var _a; if ((_a = v2.dom) == null ? void 0 : _a.isConnected) { updateSpelling(v2); } }; setTimeout(doUpdate, 100); setTimeout(doUpdate, 5e3); } }); } }; let RealtimeSpellingPlugin = _RealtimeSpellingPlugin; __publicField(RealtimeSpellingPlugin, "wb", wordBreaker()); function spellingDecorations(state, wb2, spelling, excluded, excludeCursor = false, from2 = -1, to = -1) { const rangeMap = /* @__PURE__ */ new Map(); const words = getWords(state, from2, to, wb2, excluded); const decorations = []; const wordsToCheck = []; while (words.hasNext()) { const word = words.next(); const wordText = state.doc.textBetween(word.start, word.end); const ranges = rangeMap.get(wordText) || []; ranges.push(word); rangeMap.set(wordText, ranges); wordsToCheck.push(spellcheckerWord(wordText)); } const incorrectWords = spelling.checkWords(wordsToCheck); for (const incorrectWord of incorrectWords) { const ranges = rangeMap.get(incorrectWord); if (ranges) { for (const range2 of ranges) { const attrs = {}; const spec = { word: incorrectWord }; if (excludeCursor && state.selection.head > range2.start && state.selection.head <= range2.end) { spec.cursor = true; } else { attrs.class = kSpellingErrorClass; } decorations.push(Decoration.inline(range2.start, range2.end, attrs, spec)); } } } return decorations; } function spellingContextMenuHandler(spelling, t2) { return (view, $pos) => { const wb2 = RealtimeSpellingPlugin.wb; const menuAction = (text2, action) => { return { text: text2, exec: () => { action(); view.focus(); } }; }; const schema2 = view.state.schema; const deco = realtimeSpellingKey.getState(view.state).find($pos.pos, $pos.pos); if (deco.length) { return { items: () => new Promise((resolve) => { const { from: from2, to } = deco[0]; const word = spellcheckerWord(view.state.doc.textBetween(from2, to)); const kMaxSuggetions = 5; const menuItems = []; spelling.suggestionList(word, (suggestions) => { menuItems.push(...suggestions.slice(0, kMaxSuggetions).map((suggestion) => { return { text: suggestion, exec: () => { const tr = view.state.tr; tr.setSelection(TextSelection.create(tr.doc, from2, to)); const marks = tr.selection.$from.marks(); tr.replaceSelectionWith(schema2.text(suggestion, marks), false); setTextSelection_1(from2 + suggestion.length)(tr); view.dispatch(tr); view.focus(); } }; })); if (menuItems.length) { menuItems.push({ separator: true }); } menuItems.push(menuAction(t2("Ignore All"), () => spelling.ignoreWord(word))); menuItems.push({ separator: true }); menuItems.push( menuAction(t2("Add to Dictionary"), () => spelling.addToDictionary(word)) ); resolve(menuItems); }); }) }; } const classify = wb2.classifyCharacter; const ch2 = charAt(view.state.doc, $pos.pos); if (classify(ch2) === kCharClassWord) { const from2 = findBeginWord(view.state, $pos.pos, classify); const to = findEndWord(view.state, $pos.pos, classify); const word = spellcheckerWord(view.state.doc.textBetween(from2, to)); if (spelling.isWordIgnored(word)) { return { items: async () => [ menuAction(`${t2("Unignore")} '${word}'`, () => spelling.unignoreWord(word)) ] }; } } return null; }; } function updateSpelling(view) { const tr = view.state.tr; tr.setMeta(kUpdateSpellingTransaction, true); tr.setMeta(kAddToHistoryTransaction, false); view.dispatch(tr); } var re$3 = { exports: {} }; const SEMVER_SPEC_VERSION = "2.0.0"; const MAX_LENGTH$2 = 256; const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; const MAX_SAFE_COMPONENT_LENGTH = 16; var constants$1 = { SEMVER_SPEC_VERSION, MAX_LENGTH: MAX_LENGTH$2, MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, MAX_SAFE_COMPONENT_LENGTH }; const debug$1 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => { }; var debug_1 = debug$1; (function(module3, exports2) { const { MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2 } = constants$1; const debug2 = debug_1; exports2 = module3.exports = {}; const re2 = exports2.re = []; const src2 = exports2.src = []; const t2 = exports2.t = {}; let R2 = 0; const createToken = (name, value, isGlobal) => { const index2 = R2++; debug2(name, index2, value); t2[name] = index2; src2[index2] = value; re2[index2] = new RegExp(value, isGlobal ? "g" : void 0); }; createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*"); createToken("NUMERICIDENTIFIERLOOSE", "[0-9]+"); createToken("NONNUMERICIDENTIFIER", "\\d*[a-zA-Z-][a-zA-Z0-9-]*"); createToken("MAINVERSION", `(${src2[t2.NUMERICIDENTIFIER]})\\.(${src2[t2.NUMERICIDENTIFIER]})\\.(${src2[t2.NUMERICIDENTIFIER]})`); createToken("MAINVERSIONLOOSE", `(${src2[t2.NUMERICIDENTIFIERLOOSE]})\\.(${src2[t2.NUMERICIDENTIFIERLOOSE]})\\.(${src2[t2.NUMERICIDENTIFIERLOOSE]})`); createToken("PRERELEASEIDENTIFIER", `(?:${src2[t2.NUMERICIDENTIFIER]}|${src2[t2.NONNUMERICIDENTIFIER]})`); createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src2[t2.NUMERICIDENTIFIERLOOSE]}|${src2[t2.NONNUMERICIDENTIFIER]})`); createToken("PRERELEASE", `(?:-(${src2[t2.PRERELEASEIDENTIFIER]}(?:\\.${src2[t2.PRERELEASEIDENTIFIER]})*))`); createToken("PRERELEASELOOSE", `(?:-?(${src2[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src2[t2.PRERELEASEIDENTIFIERLOOSE]})*))`); createToken("BUILDIDENTIFIER", "[0-9A-Za-z-]+"); createToken("BUILD", `(?:\\+(${src2[t2.BUILDIDENTIFIER]}(?:\\.${src2[t2.BUILDIDENTIFIER]})*))`); createToken("FULLPLAIN", `v?${src2[t2.MAINVERSION]}${src2[t2.PRERELEASE]}?${src2[t2.BUILD]}?`); createToken("FULL", `^${src2[t2.FULLPLAIN]}$`); createToken("LOOSEPLAIN", `[v=\\s]*${src2[t2.MAINVERSIONLOOSE]}${src2[t2.PRERELEASELOOSE]}?${src2[t2.BUILD]}?`); createToken("LOOSE", `^${src2[t2.LOOSEPLAIN]}$`); createToken("GTLT", "((?:<|>)?=?)"); createToken("XRANGEIDENTIFIERLOOSE", `${src2[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); createToken("XRANGEIDENTIFIER", `${src2[t2.NUMERICIDENTIFIER]}|x|X|\\*`); createToken("XRANGEPLAIN", `[v=\\s]*(${src2[t2.XRANGEIDENTIFIER]})(?:\\.(${src2[t2.XRANGEIDENTIFIER]})(?:\\.(${src2[t2.XRANGEIDENTIFIER]})(?:${src2[t2.PRERELEASE]})?${src2[t2.BUILD]}?)?)?`); createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src2[t2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src2[t2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src2[t2.XRANGEIDENTIFIERLOOSE]})(?:${src2[t2.PRERELEASELOOSE]})?${src2[t2.BUILD]}?)?)?`); createToken("XRANGE", `^${src2[t2.GTLT]}\\s*${src2[t2.XRANGEPLAIN]}$`); createToken("XRANGELOOSE", `^${src2[t2.GTLT]}\\s*${src2[t2.XRANGEPLAINLOOSE]}$`); createToken("COERCE", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:$|[^\\d])`); createToken("COERCERTL", src2[t2.COERCE], true); createToken("LONETILDE", "(?:~>?)"); createToken("TILDETRIM", `(\\s*)${src2[t2.LONETILDE]}\\s+`, true); exports2.tildeTrimReplace = "$1~"; createToken("TILDE", `^${src2[t2.LONETILDE]}${src2[t2.XRANGEPLAIN]}$`); createToken("TILDELOOSE", `^${src2[t2.LONETILDE]}${src2[t2.XRANGEPLAINLOOSE]}$`); createToken("LONECARET", "(?:\\^)"); createToken("CARETTRIM", `(\\s*)${src2[t2.LONECARET]}\\s+`, true); exports2.caretTrimReplace = "$1^"; createToken("CARET", `^${src2[t2.LONECARET]}${src2[t2.XRANGEPLAIN]}$`); createToken("CARETLOOSE", `^${src2[t2.LONECARET]}${src2[t2.XRANGEPLAINLOOSE]}$`); createToken("COMPARATORLOOSE", `^${src2[t2.GTLT]}\\s*(${src2[t2.LOOSEPLAIN]})$|^$`); createToken("COMPARATOR", `^${src2[t2.GTLT]}\\s*(${src2[t2.FULLPLAIN]})$|^$`); createToken("COMPARATORTRIM", `(\\s*)${src2[t2.GTLT]}\\s*(${src2[t2.LOOSEPLAIN]}|${src2[t2.XRANGEPLAIN]})`, true); exports2.comparatorTrimReplace = "$1$2$3"; createToken("HYPHENRANGE", `^\\s*(${src2[t2.XRANGEPLAIN]})\\s+-\\s+(${src2[t2.XRANGEPLAIN]})\\s*$`); createToken("HYPHENRANGELOOSE", `^\\s*(${src2[t2.XRANGEPLAINLOOSE]})\\s+-\\s+(${src2[t2.XRANGEPLAINLOOSE]})\\s*$`); createToken("STAR", "(<|>)?=?\\s*\\*"); createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$"); createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$"); })(re$3, re$3.exports); const opts = ["includePrerelease", "loose", "rtl"]; const parseOptions$2 = (options) => !options ? {} : typeof options !== "object" ? { loose: true } : opts.filter((k2) => options[k2]).reduce((o2, k2) => { o2[k2] = true; return o2; }, {}); var parseOptions_1 = parseOptions$2; const numeric = /^[0-9]+$/; const compareIdentifiers$1 = (a2, b2) => { const anum = numeric.test(a2); const bnum = numeric.test(b2); if (anum && bnum) { a2 = +a2; b2 = +b2; } return a2 === b2 ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a2 < b2 ? -1 : 1; }; const rcompareIdentifiers = (a2, b2) => compareIdentifiers$1(b2, a2); var identifiers$1 = { compareIdentifiers: compareIdentifiers$1, rcompareIdentifiers }; const debug = debug_1; const { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants$1; const { re: re$2, t: t$3 } = re$3.exports; const parseOptions$1 = parseOptions_1; const { compareIdentifiers } = identifiers$1; class SemVer$d { constructor(version2, options) { options = parseOptions$1(options); if (version2 instanceof SemVer$d) { if (version2.loose === !!options.loose && version2.includePrerelease === !!options.includePrerelease) { return version2; } else { version2 = version2.version; } } else if (typeof version2 !== "string") { throw new TypeError(`Invalid Version: ${version2}`); } if (version2.length > MAX_LENGTH$1) { throw new TypeError( `version is longer than ${MAX_LENGTH$1} characters` ); } debug("SemVer", version2, options); this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; const m2 = version2.trim().match(options.loose ? re$2[t$3.LOOSE] : re$2[t$3.FULL]); if (!m2) { throw new TypeError(`Invalid Version: ${version2}`); } this.raw = version2; this.major = +m2[1]; this.minor = +m2[2]; this.patch = +m2[3]; if (this.major > MAX_SAFE_INTEGER || this.major < 0) { throw new TypeError("Invalid major version"); } if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { throw new TypeError("Invalid minor version"); } if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { throw new TypeError("Invalid patch version"); } if (!m2[4]) { this.prerelease = []; } else { this.prerelease = m2[4].split(".").map((id2) => { if (/^[0-9]+$/.test(id2)) { const num2 = +id2; if (num2 >= 0 && num2 < MAX_SAFE_INTEGER) { return num2; } } return id2; }); } this.build = m2[5] ? m2[5].split(".") : []; this.format(); } format() { this.version = `${this.major}.${this.minor}.${this.patch}`; if (this.prerelease.length) { this.version += `-${this.prerelease.join(".")}`; } return this.version; } toString() { return this.version; } compare(other) { debug("SemVer.compare", this.version, this.options, other); if (!(other instanceof SemVer$d)) { if (typeof other === "string" && other === this.version) { return 0; } other = new SemVer$d(other, this.options); } if (other.version === this.version) { return 0; } return this.compareMain(other) || this.comparePre(other); } compareMain(other) { if (!(other instanceof SemVer$d)) { other = new SemVer$d(other, this.options); } return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch); } comparePre(other) { if (!(other instanceof SemVer$d)) { other = new SemVer$d(other, this.options); } if (this.prerelease.length && !other.prerelease.length) { return -1; } else if (!this.prerelease.length && other.prerelease.length) { return 1; } else if (!this.prerelease.length && !other.prerelease.length) { return 0; } let i2 = 0; do { const a2 = this.prerelease[i2]; const b2 = other.prerelease[i2]; debug("prerelease compare", i2, a2, b2); if (a2 === void 0 && b2 === void 0) { return 0; } else if (b2 === void 0) { return 1; } else if (a2 === void 0) { return -1; } else if (a2 === b2) { continue; } else { return compareIdentifiers(a2, b2); } } while (++i2); } compareBuild(other) { if (!(other instanceof SemVer$d)) { other = new SemVer$d(other, this.options); } let i2 = 0; do { const a2 = this.build[i2]; const b2 = other.build[i2]; debug("prerelease compare", i2, a2, b2); if (a2 === void 0 && b2 === void 0) { return 0; } else if (b2 === void 0) { return 1; } else if (a2 === void 0) { return -1; } else if (a2 === b2) { continue; } else { return compareIdentifiers(a2, b2); } } while (++i2); } inc(release, identifier2) { switch (release) { case "premajor": this.prerelease.length = 0; this.patch = 0; this.minor = 0; this.major++; this.inc("pre", identifier2); break; case "preminor": this.prerelease.length = 0; this.patch = 0; this.minor++; this.inc("pre", identifier2); break; case "prepatch": this.prerelease.length = 0; this.inc("patch", identifier2); this.inc("pre", identifier2); break; case "prerelease": if (this.prerelease.length === 0) { this.inc("patch", identifier2); } this.inc("pre", identifier2); break; case "major": if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) { this.major++; } this.minor = 0; this.patch = 0; this.prerelease = []; break; case "minor": if (this.patch !== 0 || this.prerelease.length === 0) { this.minor++; } this.patch = 0; this.prerelease = []; break; case "patch": if (this.prerelease.length === 0) { this.patch++; } this.prerelease = []; break; case "pre": if (this.prerelease.length === 0) { this.prerelease = [0]; } else { let i2 = this.prerelease.length; while (--i2 >= 0) { if (typeof this.prerelease[i2] === "number") { this.prerelease[i2]++; i2 = -2; } } if (i2 === -1) { this.prerelease.push(0); } } if (identifier2) { if (compareIdentifiers(this.prerelease[0], identifier2) === 0) { if (isNaN(this.prerelease[1])) { this.prerelease = [identifier2, 0]; } } else { this.prerelease = [identifier2, 0]; } } break; default: throw new Error(`invalid increment argument: ${release}`); } this.format(); this.raw = this.version; return this; } } var semver$1 = SemVer$d; const { MAX_LENGTH } = constants$1; const { re: re$1, t: t$2 } = re$3.exports; const SemVer$c = semver$1; const parseOptions = parseOptions_1; const parse$7 = (version2, options) => { options = parseOptions(options); if (version2 instanceof SemVer$c) { return version2; } if (typeof version2 !== "string") { return null; } if (version2.length > MAX_LENGTH) { return null; } const r2 = options.loose ? re$1[t$2.LOOSE] : re$1[t$2.FULL]; if (!r2.test(version2)) { return null; } try { return new SemVer$c(version2, options); } catch (er) { return null; } }; var parse_1 = parse$7; const parse$6 = parse_1; const valid$2 = (version2, options) => { const v2 = parse$6(version2, options); return v2 ? v2.version : null; }; var valid_1 = valid$2; const parse$5 = parse_1; const clean$1 = (version2, options) => { const s2 = parse$5(version2.trim().replace(/^[=v]+/, ""), options); return s2 ? s2.version : null; }; var clean_1 = clean$1; const SemVer$b = semver$1; const inc$1 = (version2, release, options, identifier2) => { if (typeof options === "string") { identifier2 = options; options = void 0; } try { return new SemVer$b( version2 instanceof SemVer$b ? version2.version : version2, options ).inc(release, identifier2).version; } catch (er) { return null; } }; var inc_1 = inc$1; const SemVer$a = semver$1; const compare$c = (a2, b2, loose) => new SemVer$a(a2, loose).compare(new SemVer$a(b2, loose)); var compare_1 = compare$c; const compare$b = compare_1; const eq$3 = (a2, b2, loose) => compare$b(a2, b2, loose) === 0; var eq_1 = eq$3; const parse$4 = parse_1; const eq$2 = eq_1; const diff$1 = (version1, version2) => { if (eq$2(version1, version2)) { return null; } else { const v12 = parse$4(version1); const v2 = parse$4(version2); const hasPre = v12.prerelease.length || v2.prerelease.length; const prefix2 = hasPre ? "pre" : ""; const defaultResult = hasPre ? "prerelease" : ""; for (const key2 in v12) { if (key2 === "major" || key2 === "minor" || key2 === "patch") { if (v12[key2] !== v2[key2]) { return prefix2 + key2; } } } return defaultResult; } }; var diff_1 = diff$1; const SemVer$9 = semver$1; const major$1 = (a2, loose) => new SemVer$9(a2, loose).major; var major_1 = major$1; const SemVer$8 = semver$1; const minor$1 = (a2, loose) => new SemVer$8(a2, loose).minor; var minor_1 = minor$1; const SemVer$7 = semver$1; const patch$1 = (a2, loose) => new SemVer$7(a2, loose).patch; var patch_1 = patch$1; const parse$3 = parse_1; const prerelease$1 = (version2, options) => { const parsed = parse$3(version2, options); return parsed && parsed.prerelease.length ? parsed.prerelease : null; }; var prerelease_1 = prerelease$1; const compare$a = compare_1; const rcompare$1 = (a2, b2, loose) => compare$a(b2, a2, loose); var rcompare_1 = rcompare$1; const compare$9 = compare_1; const compareLoose$1 = (a2, b2) => compare$9(a2, b2, true); var compareLoose_1 = compareLoose$1; const SemVer$6 = semver$1; const compareBuild$3 = (a2, b2, loose) => { const versionA = new SemVer$6(a2, loose); const versionB = new SemVer$6(b2, loose); return versionA.compare(versionB) || versionA.compareBuild(versionB); }; var compareBuild_1 = compareBuild$3; const compareBuild$2 = compareBuild_1; const sort$1 = (list, loose) => list.sort((a2, b2) => compareBuild$2(a2, b2, loose)); var sort_1 = sort$1; const compareBuild$1 = compareBuild_1; const rsort$1 = (list, loose) => list.sort((a2, b2) => compareBuild$1(b2, a2, loose)); var rsort_1 = rsort$1; const compare$8 = compare_1; const gt$4 = (a2, b2, loose) => compare$8(a2, b2, loose) > 0; var gt_1 = gt$4; const compare$7 = compare_1; const lt$3 = (a2, b2, loose) => compare$7(a2, b2, loose) < 0; var lt_1 = lt$3; const compare$6 = compare_1; const neq$2 = (a2, b2, loose) => compare$6(a2, b2, loose) !== 0; var neq_1 = neq$2; const compare$5 = compare_1; const gte$3 = (a2, b2, loose) => compare$5(a2, b2, loose) >= 0; var gte_1 = gte$3; const compare$4 = compare_1; const lte$3 = (a2, b2, loose) => compare$4(a2, b2, loose) <= 0; var lte_1 = lte$3; const eq$1 = eq_1; const neq$1 = neq_1; const gt$3 = gt_1; const gte$2 = gte_1; const lt$2 = lt_1; const lte$2 = lte_1; const cmp$1 = (a2, op, b2, loose) => { switch (op) { case "===": if (typeof a2 === "object") { a2 = a2.version; } if (typeof b2 === "object") { b2 = b2.version; } return a2 === b2; case "!==": if (typeof a2 === "object") { a2 = a2.version; } if (typeof b2 === "object") { b2 = b2.version; } return a2 !== b2; case "": case "=": case "==": return eq$1(a2, b2, loose); case "!=": return neq$1(a2, b2, loose); case ">": return gt$3(a2, b2, loose); case ">=": return gte$2(a2, b2, loose); case "<": return lt$2(a2, b2, loose); case "<=": return lte$2(a2, b2, loose); default: throw new TypeError(`Invalid operator: ${op}`); } }; var cmp_1 = cmp$1; const SemVer$5 = semver$1; const parse$2 = parse_1; const { re, t: t$1 } = re$3.exports; const coerce$1 = (version2, options) => { if (version2 instanceof SemVer$5) { return version2; } if (typeof version2 === "number") { version2 = String(version2); } if (typeof version2 !== "string") { return null; } options = options || {}; let match2 = null; if (!options.rtl) { match2 = version2.match(re[t$1.COERCE]); } else { let next2; while ((next2 = re[t$1.COERCERTL].exec(version2)) && (!match2 || match2.index + match2[0].length !== version2.length)) { if (!match2 || next2.index + next2[0].length !== match2.index + match2[0].length) { match2 = next2; } re[t$1.COERCERTL].lastIndex = next2.index + next2[1].length + next2[2].length; } re[t$1.COERCERTL].lastIndex = -1; } if (match2 === null) { return null; } return parse$2(`${match2[2]}.${match2[3] || "0"}.${match2[4] || "0"}`, options); }; var coerce_1 = coerce$1; var iterator; var hasRequiredIterator; function requireIterator() { if (hasRequiredIterator) return iterator; hasRequiredIterator = 1; iterator = function(Yallist2) { Yallist2.prototype[Symbol.iterator] = function* () { for (let walker = this.head; walker; walker = walker.next) { yield walker.value; } }; }; return iterator; } var yallist = Yallist$1; Yallist$1.Node = Node$1; Yallist$1.create = Yallist$1; function Yallist$1(list) { var self2 = this; if (!(self2 instanceof Yallist$1)) { self2 = new Yallist$1(); } self2.tail = null; self2.head = null; self2.length = 0; if (list && typeof list.forEach === "function") { list.forEach(function(item) { self2.push(item); }); } else if (arguments.length > 0) { for (var i2 = 0, l2 = arguments.length; i2 < l2; i2++) { self2.push(arguments[i2]); } } return self2; } Yallist$1.prototype.removeNode = function(node2) { if (node2.list !== this) { throw new Error("removing node which does not belong to this list"); } var next2 = node2.next; var prev2 = node2.prev; if (next2) { next2.prev = prev2; } if (prev2) { prev2.next = next2; } if (node2 === this.head) { this.head = next2; } if (node2 === this.tail) { this.tail = prev2; } node2.list.length--; node2.next = null; node2.prev = null; node2.list = null; return next2; }; Yallist$1.prototype.unshiftNode = function(node2) { if (node2 === this.head) { return; } if (node2.list) { node2.list.removeNode(node2); } var head = this.head; node2.list = this; node2.next = head; if (head) { head.prev = node2; } this.head = node2; if (!this.tail) { this.tail = node2; } this.length++; }; Yallist$1.prototype.pushNode = function(node2) { if (node2 === this.tail) { return; } if (node2.list) { node2.list.removeNode(node2); } var tail = this.tail; node2.list = this; node2.prev = tail; if (tail) { tail.next = node2; } this.tail = node2; if (!this.head) { this.head = node2; } this.length++; }; Yallist$1.prototype.push = function() { for (var i2 = 0, l2 = arguments.length; i2 < l2; i2++) { push(this, arguments[i2]); } return this.length; }; Yallist$1.prototype.unshift = function() { for (var i2 = 0, l2 = arguments.length; i2 < l2; i2++) { unshift(this, arguments[i2]); } return this.length; }; Yallist$1.prototype.pop = function() { if (!this.tail) { return void 0; } var res = this.tail.value; this.tail = this.tail.prev; if (this.tail) { this.tail.next = null; } else { this.head = null; } this.length--; return res; }; Yallist$1.prototype.shift = function() { if (!this.head) { return void 0; } var res = this.head.value; this.head = this.head.next; if (this.head) { this.head.prev = null; } else { this.tail = null; } this.length--; return res; }; Yallist$1.prototype.forEach = function(fn, thisp) { thisp = thisp || this; for (var walker = this.head, i2 = 0; walker !== null; i2++) { fn.call(thisp, walker.value, i2, this); walker = walker.next; } }; Yallist$1.prototype.forEachReverse = function(fn, thisp) { thisp = thisp || this; for (var walker = this.tail, i2 = this.length - 1; walker !== null; i2--) { fn.call(thisp, walker.value, i2, this); walker = walker.prev; } }; Yallist$1.prototype.get = function(n2) { for (var i2 = 0, walker = this.head; walker !== null && i2 < n2; i2++) { walker = walker.next; } if (i2 === n2 && walker !== null) { return walker.value; } }; Yallist$1.prototype.getReverse = function(n2) { for (var i2 = 0, walker = this.tail; walker !== null && i2 < n2; i2++) { walker = walker.prev; } if (i2 === n2 && walker !== null) { return walker.value; } }; Yallist$1.prototype.map = function(fn, thisp) { thisp = thisp || this; var res = new Yallist$1(); for (var walker = this.head; walker !== null; ) { res.push(fn.call(thisp, walker.value, this)); walker = walker.next; } return res; }; Yallist$1.prototype.mapReverse = function(fn, thisp) { thisp = thisp || this; var res = new Yallist$1(); for (var walker = this.tail; walker !== null; ) { res.push(fn.call(thisp, walker.value, this)); walker = walker.prev; } return res; }; Yallist$1.prototype.reduce = function(fn, initial) { var acc; var walker = this.head; if (arguments.length > 1) { acc = initial; } else if (this.head) { walker = this.head.next; acc = this.head.value; } else { throw new TypeError("Reduce of empty list with no initial value"); } for (var i2 = 0; walker !== null; i2++) { acc = fn(acc, walker.value, i2); walker = walker.next; } return acc; }; Yallist$1.prototype.reduceReverse = function(fn, initial) { var acc; var walker = this.tail; if (arguments.length > 1) { acc = initial; } else if (this.tail) { walker = this.tail.prev; acc = this.tail.value; } else { throw new TypeError("Reduce of empty list with no initial value"); } for (var i2 = this.length - 1; walker !== null; i2--) { acc = fn(acc, walker.value, i2); walker = walker.prev; } return acc; }; Yallist$1.prototype.toArray = function() { var arr = new Array(this.length); for (var i2 = 0, walker = this.head; walker !== null; i2++) { arr[i2] = walker.value; walker = walker.next; } return arr; }; Yallist$1.prototype.toArrayReverse = function() { var arr = new Array(this.length); for (var i2 = 0, walker = this.tail; walker !== null; i2++) { arr[i2] = walker.value; walker = walker.prev; } return arr; }; Yallist$1.prototype.slice = function(from2, to) { to = to || this.length; if (to < 0) { to += this.length; } from2 = from2 || 0; if (from2 < 0) { from2 += this.length; } var ret = new Yallist$1(); if (to < from2 || to < 0) { return ret; } if (from2 < 0) { from2 = 0; } if (to > this.length) { to = this.length; } for (var i2 = 0, walker = this.head; walker !== null && i2 < from2; i2++) { walker = walker.next; } for (; walker !== null && i2 < to; i2++, walker = walker.next) { ret.push(walker.value); } return ret; }; Yallist$1.prototype.sliceReverse = function(from2, to) { to = to || this.length; if (to < 0) { to += this.length; } from2 = from2 || 0; if (from2 < 0) { from2 += this.length; } var ret = new Yallist$1(); if (to < from2 || to < 0) { return ret; } if (from2 < 0) { from2 = 0; } if (to > this.length) { to = this.length; } for (var i2 = this.length, walker = this.tail; walker !== null && i2 > to; i2--) { walker = walker.prev; } for (; walker !== null && i2 > from2; i2--, walker = walker.prev) { ret.push(walker.value); } return ret; }; Yallist$1.prototype.splice = function(start, deleteCount, ...nodes2) { if (start > this.length) { start = this.length - 1; } if (start < 0) { start = this.length + start; } for (var i2 = 0, walker = this.head; walker !== null && i2 < start; i2++) { walker = walker.next; } var ret = []; for (var i2 = 0; walker && i2 < deleteCount; i2++) { ret.push(walker.value); walker = this.removeNode(walker); } if (walker === null) { walker = this.tail; } if (walker !== this.head && walker !== this.tail) { walker = walker.prev; } for (var i2 = 0; i2 < nodes2.length; i2++) { walker = insert(this, walker, nodes2[i2]); } return ret; }; Yallist$1.prototype.reverse = function() { var head = this.head; var tail = this.tail; for (var walker = head; walker !== null; walker = walker.prev) { var p2 = walker.prev; walker.prev = walker.next; walker.next = p2; } this.head = tail; this.tail = head; return this; }; function insert(self2, node2, value) { var inserted = node2 === self2.head ? new Node$1(value, null, node2, self2) : new Node$1(value, node2, node2.next, self2); if (inserted.next === null) { self2.tail = inserted; } if (inserted.prev === null) { self2.head = inserted; } self2.length++; return inserted; } function push(self2, item) { self2.tail = new Node$1(item, self2.tail, null, self2); if (!self2.head) { self2.head = self2.tail; } self2.length++; } function unshift(self2, item) { self2.head = new Node$1(item, null, self2.head, self2); if (!self2.tail) { self2.tail = self2.head; } self2.length++; } function Node$1(value, prev2, next2, list) { if (!(this instanceof Node$1)) { return new Node$1(value, prev2, next2, list); } this.list = list; this.value = value; if (prev2) { prev2.next = this; this.prev = prev2; } else { this.prev = null; } if (next2) { next2.prev = this; this.next = next2; } else { this.next = null; } } try { requireIterator()(Yallist$1); } catch (er) { } const Yallist = yallist; const MAX = Symbol("max"); const LENGTH = Symbol("length"); const LENGTH_CALCULATOR = Symbol("lengthCalculator"); const ALLOW_STALE = Symbol("allowStale"); const MAX_AGE = Symbol("maxAge"); const DISPOSE = Symbol("dispose"); const NO_DISPOSE_ON_SET = Symbol("noDisposeOnSet"); const LRU_LIST = Symbol("lruList"); const CACHE = Symbol("cache"); const UPDATE_AGE_ON_GET = Symbol("updateAgeOnGet"); const naiveLength = () => 1; class LRUCache { constructor(options) { if (typeof options === "number") options = { max: options }; if (!options) options = {}; if (options.max && (typeof options.max !== "number" || options.max < 0)) throw new TypeError("max must be a non-negative number"); this[MAX] = options.max || Infinity; const lc2 = options.length || naiveLength; this[LENGTH_CALCULATOR] = typeof lc2 !== "function" ? naiveLength : lc2; this[ALLOW_STALE] = options.stale || false; if (options.maxAge && typeof options.maxAge !== "number") throw new TypeError("maxAge must be a number"); this[MAX_AGE] = options.maxAge || 0; this[DISPOSE] = options.dispose; this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false; this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false; this.reset(); } set max(mL) { if (typeof mL !== "number" || mL < 0) throw new TypeError("max must be a non-negative number"); this[MAX] = mL || Infinity; trim(this); } get max() { return this[MAX]; } set allowStale(allowStale) { this[ALLOW_STALE] = !!allowStale; } get allowStale() { return this[ALLOW_STALE]; } set maxAge(mA) { if (typeof mA !== "number") throw new TypeError("maxAge must be a non-negative number"); this[MAX_AGE] = mA; trim(this); } get maxAge() { return this[MAX_AGE]; } set lengthCalculator(lC) { if (typeof lC !== "function") lC = naiveLength; if (lC !== this[LENGTH_CALCULATOR]) { this[LENGTH_CALCULATOR] = lC; this[LENGTH] = 0; this[LRU_LIST].forEach((hit) => { hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key); this[LENGTH] += hit.length; }); } trim(this); } get lengthCalculator() { return this[LENGTH_CALCULATOR]; } get length() { return this[LENGTH]; } get itemCount() { return this[LRU_LIST].length; } rforEach(fn, thisp) { thisp = thisp || this; for (let walker = this[LRU_LIST].tail; walker !== null; ) { const prev2 = walker.prev; forEachStep(this, fn, walker, thisp); walker = prev2; } } forEach(fn, thisp) { thisp = thisp || this; for (let walker = this[LRU_LIST].head; walker !== null; ) { const next2 = walker.next; forEachStep(this, fn, walker, thisp); walker = next2; } } keys() { return this[LRU_LIST].toArray().map((k2) => k2.key); } values() { return this[LRU_LIST].toArray().map((k2) => k2.value); } reset() { if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) { this[LRU_LIST].forEach((hit) => this[DISPOSE](hit.key, hit.value)); } this[CACHE] = /* @__PURE__ */ new Map(); this[LRU_LIST] = new Yallist(); this[LENGTH] = 0; } dump() { return this[LRU_LIST].map((hit) => isStale(this, hit) ? false : { k: hit.key, v: hit.value, e: hit.now + (hit.maxAge || 0) }).toArray().filter((h2) => h2); } dumpLru() { return this[LRU_LIST]; } set(key2, value, maxAge) { maxAge = maxAge || this[MAX_AGE]; if (maxAge && typeof maxAge !== "number") throw new TypeError("maxAge must be a number"); const now2 = maxAge ? Date.now() : 0; const len = this[LENGTH_CALCULATOR](value, key2); if (this[CACHE].has(key2)) { if (len > this[MAX]) { del(this, this[CACHE].get(key2)); return false; } const node2 = this[CACHE].get(key2); const item = node2.value; if (this[DISPOSE]) { if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key2, item.value); } item.now = now2; item.maxAge = maxAge; item.value = value; this[LENGTH] += len - item.length; item.length = len; this.get(key2); trim(this); return true; } const hit = new Entry(key2, value, len, now2, maxAge); if (hit.length > this[MAX]) { if (this[DISPOSE]) this[DISPOSE](key2, value); return false; } this[LENGTH] += hit.length; this[LRU_LIST].unshift(hit); this[CACHE].set(key2, this[LRU_LIST].head); trim(this); return true; } has(key2) { if (!this[CACHE].has(key2)) return false; const hit = this[CACHE].get(key2).value; return !isStale(this, hit); } get(key2) { return get$3(this, key2, true); } peek(key2) { return get$3(this, key2, false); } pop() { const node2 = this[LRU_LIST].tail; if (!node2) return null; del(this, node2); return node2.value; } del(key2) { del(this, this[CACHE].get(key2)); } load(arr) { this.reset(); const now2 = Date.now(); for (let l2 = arr.length - 1; l2 >= 0; l2--) { const hit = arr[l2]; const expiresAt = hit.e || 0; if (expiresAt === 0) this.set(hit.k, hit.v); else { const maxAge = expiresAt - now2; if (maxAge > 0) { this.set(hit.k, hit.v, maxAge); } } } } prune() { this[CACHE].forEach((value, key2) => get$3(this, key2, false)); } } const get$3 = (self2, key2, doUse) => { const node2 = self2[CACHE].get(key2); if (node2) { const hit = node2.value; if (isStale(self2, hit)) { del(self2, node2); if (!self2[ALLOW_STALE]) return void 0; } else { if (doUse) { if (self2[UPDATE_AGE_ON_GET]) node2.value.now = Date.now(); self2[LRU_LIST].unshiftNode(node2); } } return hit.value; } }; const isStale = (self2, hit) => { if (!hit || !hit.maxAge && !self2[MAX_AGE]) return false; const diff2 = Date.now() - hit.now; return hit.maxAge ? diff2 > hit.maxAge : self2[MAX_AGE] && diff2 > self2[MAX_AGE]; }; const trim = (self2) => { if (self2[LENGTH] > self2[MAX]) { for (let walker = self2[LRU_LIST].tail; self2[LENGTH] > self2[MAX] && walker !== null; ) { const prev2 = walker.prev; del(self2, walker); walker = prev2; } } }; const del = (self2, node2) => { if (node2) { const hit = node2.value; if (self2[DISPOSE]) self2[DISPOSE](hit.key, hit.value); self2[LENGTH] -= hit.length; self2[CACHE].delete(hit.key); self2[LRU_LIST].removeNode(node2); } }; class Entry { constructor(key2, value, length2, now2, maxAge) { this.key = key2; this.value = value; this.length = length2; this.now = now2; this.maxAge = maxAge || 0; } } const forEachStep = (self2, fn, node2, thisp) => { let hit = node2.value; if (isStale(self2, hit)) { del(self2, node2); if (!self2[ALLOW_STALE]) hit = void 0; } if (hit) fn.call(thisp, hit.value, hit.key, self2); }; var lruCache = LRUCache; var range; var hasRequiredRange; function requireRange() { if (hasRequiredRange) return range; hasRequiredRange = 1; class Range2 { constructor(range2, options) { options = parseOptions2(options); if (range2 instanceof Range2) { if (range2.loose === !!options.loose && range2.includePrerelease === !!options.includePrerelease) { return range2; } else { return new Range2(range2.raw, options); } } if (range2 instanceof Comparator2) { this.raw = range2.value; this.set = [[range2]]; this.format(); return this; } this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; this.raw = range2; this.set = range2.split("||").map((r2) => this.parseRange(r2.trim())).filter((c) => c.length); if (!this.set.length) { throw new TypeError(`Invalid SemVer Range: ${range2}`); } if (this.set.length > 1) { const first = this.set[0]; this.set = this.set.filter((c) => !isNullSet(c[0])); if (this.set.length === 0) { this.set = [first]; } else if (this.set.length > 1) { for (const c of this.set) { if (c.length === 1 && isAny(c[0])) { this.set = [c]; break; } } } } this.format(); } format() { this.range = this.set.map((comps) => { return comps.join(" ").trim(); }).join("||").trim(); return this.range; } toString() { return this.range; } parseRange(range2) { range2 = range2.trim(); const memoOpts = Object.keys(this.options).join(","); const memoKey = `parseRange:${memoOpts}:${range2}`; const cached = cache.get(memoKey); if (cached) { return cached; } const loose = this.options.loose; const hr = loose ? re2[t2.HYPHENRANGELOOSE] : re2[t2.HYPHENRANGE]; range2 = range2.replace(hr, hyphenReplace(this.options.includePrerelease)); debug2("hyphen replace", range2); range2 = range2.replace(re2[t2.COMPARATORTRIM], comparatorTrimReplace); debug2("comparator trim", range2); range2 = range2.replace(re2[t2.TILDETRIM], tildeTrimReplace); range2 = range2.replace(re2[t2.CARETTRIM], caretTrimReplace); range2 = range2.split(/\s+/).join(" "); let rangeList = range2.split(" ").map((comp2) => parseComparator(comp2, this.options)).join(" ").split(/\s+/).map((comp2) => replaceGTE0(comp2, this.options)); if (loose) { rangeList = rangeList.filter((comp2) => { debug2("loose invalid filter", comp2, this.options); return !!comp2.match(re2[t2.COMPARATORLOOSE]); }); } debug2("range list", rangeList); const rangeMap = /* @__PURE__ */ new Map(); const comparators = rangeList.map((comp2) => new Comparator2(comp2, this.options)); for (const comp2 of comparators) { if (isNullSet(comp2)) { return [comp2]; } rangeMap.set(comp2.value, comp2); } if (rangeMap.size > 1 && rangeMap.has("")) { rangeMap.delete(""); } const result = [...rangeMap.values()]; cache.set(memoKey, result); return result; } intersects(range2, options) { if (!(range2 instanceof Range2)) { throw new TypeError("a Range is required"); } return this.set.some((thisComparators) => { return isSatisfiable(thisComparators, options) && range2.set.some((rangeComparators) => { return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => { return rangeComparators.every((rangeComparator) => { return thisComparator.intersects(rangeComparator, options); }); }); }); }); } test(version2) { if (!version2) { return false; } if (typeof version2 === "string") { try { version2 = new SemVer2(version2, this.options); } catch (er) { return false; } } for (let i2 = 0; i2 < this.set.length; i2++) { if (testSet(this.set[i2], version2, this.options)) { return true; } } return false; } } range = Range2; const LRU = lruCache; const cache = new LRU({ max: 1e3 }); const parseOptions2 = parseOptions_1; const Comparator2 = requireComparator(); const debug2 = debug_1; const SemVer2 = semver$1; const { re: re2, t: t2, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = re$3.exports; const isNullSet = (c) => c.value === "<0.0.0-0"; const isAny = (c) => c.value === ""; const isSatisfiable = (comparators, options) => { let result = true; const remainingComparators = comparators.slice(); let testComparator = remainingComparators.pop(); while (result && remainingComparators.length) { result = remainingComparators.every((otherComparator) => { return testComparator.intersects(otherComparator, options); }); testComparator = remainingComparators.pop(); } return result; }; const parseComparator = (comp2, options) => { debug2("comp", comp2, options); comp2 = replaceCarets(comp2, options); debug2("caret", comp2); comp2 = replaceTildes(comp2, options); debug2("tildes", comp2); comp2 = replaceXRanges(comp2, options); debug2("xrange", comp2); comp2 = replaceStars(comp2, options); debug2("stars", comp2); return comp2; }; const isX = (id2) => !id2 || id2.toLowerCase() === "x" || id2 === "*"; const replaceTildes = (comp2, options) => comp2.trim().split(/\s+/).map((c) => { return replaceTilde(c, options); }).join(" "); const replaceTilde = (comp2, options) => { const r2 = options.loose ? re2[t2.TILDELOOSE] : re2[t2.TILDE]; return comp2.replace(r2, (_2, M2, m2, p2, pr2) => { debug2("tilde", comp2, _2, M2, m2, p2, pr2); let ret; if (isX(M2)) { ret = ""; } else if (isX(m2)) { ret = `>=${M2}.0.0 <${+M2 + 1}.0.0-0`; } else if (isX(p2)) { ret = `>=${M2}.${m2}.0 <${M2}.${+m2 + 1}.0-0`; } else if (pr2) { debug2("replaceTilde pr", pr2); ret = `>=${M2}.${m2}.${p2}-${pr2} <${M2}.${+m2 + 1}.0-0`; } else { ret = `>=${M2}.${m2}.${p2} <${M2}.${+m2 + 1}.0-0`; } debug2("tilde return", ret); return ret; }); }; const replaceCarets = (comp2, options) => comp2.trim().split(/\s+/).map((c) => { return replaceCaret(c, options); }).join(" "); const replaceCaret = (comp2, options) => { debug2("caret", comp2, options); const r2 = options.loose ? re2[t2.CARETLOOSE] : re2[t2.CARET]; const z2 = options.includePrerelease ? "-0" : ""; return comp2.replace(r2, (_2, M2, m2, p2, pr2) => { debug2("caret", comp2, _2, M2, m2, p2, pr2); let ret; if (isX(M2)) { ret = ""; } else if (isX(m2)) { ret = `>=${M2}.0.0${z2} <${+M2 + 1}.0.0-0`; } else if (isX(p2)) { if (M2 === "0") { ret = `>=${M2}.${m2}.0${z2} <${M2}.${+m2 + 1}.0-0`; } else { ret = `>=${M2}.${m2}.0${z2} <${+M2 + 1}.0.0-0`; } } else if (pr2) { debug2("replaceCaret pr", pr2); if (M2 === "0") { if (m2 === "0") { ret = `>=${M2}.${m2}.${p2}-${pr2} <${M2}.${m2}.${+p2 + 1}-0`; } else { ret = `>=${M2}.${m2}.${p2}-${pr2} <${M2}.${+m2 + 1}.0-0`; } } else { ret = `>=${M2}.${m2}.${p2}-${pr2} <${+M2 + 1}.0.0-0`; } } else { debug2("no pr"); if (M2 === "0") { if (m2 === "0") { ret = `>=${M2}.${m2}.${p2}${z2} <${M2}.${m2}.${+p2 + 1}-0`; } else { ret = `>=${M2}.${m2}.${p2}${z2} <${M2}.${+m2 + 1}.0-0`; } } else { ret = `>=${M2}.${m2}.${p2} <${+M2 + 1}.0.0-0`; } } debug2("caret return", ret); return ret; }); }; const replaceXRanges = (comp2, options) => { debug2("replaceXRanges", comp2, options); return comp2.split(/\s+/).map((c) => { return replaceXRange(c, options); }).join(" "); }; const replaceXRange = (comp2, options) => { comp2 = comp2.trim(); const r2 = options.loose ? re2[t2.XRANGELOOSE] : re2[t2.XRANGE]; return comp2.replace(r2, (ret, gtlt, M2, m2, p2, pr2) => { debug2("xRange", comp2, ret, gtlt, M2, m2, p2, pr2); const xM = isX(M2); const xm = xM || isX(m2); const xp = xm || isX(p2); const anyX = xp; if (gtlt === "=" && anyX) { gtlt = ""; } pr2 = options.includePrerelease ? "-0" : ""; if (xM) { if (gtlt === ">" || gtlt === "<") { ret = "<0.0.0-0"; } else { ret = "*"; } } else if (gtlt && anyX) { if (xm) { m2 = 0; } p2 = 0; if (gtlt === ">") { gtlt = ">="; if (xm) { M2 = +M2 + 1; m2 = 0; p2 = 0; } else { m2 = +m2 + 1; p2 = 0; } } else if (gtlt === "<=") { gtlt = "<"; if (xm) { M2 = +M2 + 1; } else { m2 = +m2 + 1; } } if (gtlt === "<") { pr2 = "-0"; } ret = `${gtlt + M2}.${m2}.${p2}${pr2}`; } else if (xm) { ret = `>=${M2}.0.0${pr2} <${+M2 + 1}.0.0-0`; } else if (xp) { ret = `>=${M2}.${m2}.0${pr2} <${M2}.${+m2 + 1}.0-0`; } debug2("xRange return", ret); return ret; }); }; const replaceStars = (comp2, options) => { debug2("replaceStars", comp2, options); return comp2.trim().replace(re2[t2.STAR], ""); }; const replaceGTE0 = (comp2, options) => { debug2("replaceGTE0", comp2, options); return comp2.trim().replace(re2[options.includePrerelease ? t2.GTE0PRE : t2.GTE0], ""); }; const hyphenReplace = (incPr) => ($0, from2, fM, fm, fp, fpr, fb2, to, tM, tm, tp, tpr, tb2) => { if (isX(fM)) { from2 = ""; } else if (isX(fm)) { from2 = `>=${fM}.0.0${incPr ? "-0" : ""}`; } else if (isX(fp)) { from2 = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`; } else if (fpr) { from2 = `>=${from2}`; } else { from2 = `>=${from2}${incPr ? "-0" : ""}`; } if (isX(tM)) { to = ""; } else if (isX(tm)) { to = `<${+tM + 1}.0.0-0`; } else if (isX(tp)) { to = `<${tM}.${+tm + 1}.0-0`; } else if (tpr) { to = `<=${tM}.${tm}.${tp}-${tpr}`; } else if (incPr) { to = `<${tM}.${tm}.${+tp + 1}-0`; } else { to = `<=${to}`; } return `${from2} ${to}`.trim(); }; const testSet = (set2, version2, options) => { for (let i2 = 0; i2 < set2.length; i2++) { if (!set2[i2].test(version2)) { return false; } } if (version2.prerelease.length && !options.includePrerelease) { for (let i2 = 0; i2 < set2.length; i2++) { debug2(set2[i2].semver); if (set2[i2].semver === Comparator2.ANY) { continue; } if (set2[i2].semver.prerelease.length > 0) { const allowed = set2[i2].semver; if (allowed.major === version2.major && allowed.minor === version2.minor && allowed.patch === version2.patch) { return true; } } } return false; } return true; }; return range; } var comparator; var hasRequiredComparator; function requireComparator() { if (hasRequiredComparator) return comparator; hasRequiredComparator = 1; const ANY2 = Symbol("SemVer ANY"); class Comparator2 { static get ANY() { return ANY2; } constructor(comp2, options) { options = parseOptions2(options); if (comp2 instanceof Comparator2) { if (comp2.loose === !!options.loose) { return comp2; } else { comp2 = comp2.value; } } debug2("comparator", comp2, options); this.options = options; this.loose = !!options.loose; this.parse(comp2); if (this.semver === ANY2) { this.value = ""; } else { this.value = this.operator + this.semver.version; } debug2("comp", this); } parse(comp2) { const r2 = this.options.loose ? re2[t2.COMPARATORLOOSE] : re2[t2.COMPARATOR]; const m2 = comp2.match(r2); if (!m2) { throw new TypeError(`Invalid comparator: ${comp2}`); } this.operator = m2[1] !== void 0 ? m2[1] : ""; if (this.operator === "=") { this.operator = ""; } if (!m2[2]) { this.semver = ANY2; } else { this.semver = new SemVer2(m2[2], this.options.loose); } } toString() { return this.value; } test(version2) { debug2("Comparator.test", version2, this.options.loose); if (this.semver === ANY2 || version2 === ANY2) { return true; } if (typeof version2 === "string") { try { version2 = new SemVer2(version2, this.options); } catch (er) { return false; } } return cmp2(version2, this.operator, this.semver, this.options); } intersects(comp2, options) { if (!(comp2 instanceof Comparator2)) { throw new TypeError("a Comparator is required"); } if (!options || typeof options !== "object") { options = { loose: !!options, includePrerelease: false }; } if (this.operator === "") { if (this.value === "") { return true; } return new Range2(comp2.value, options).test(this.value); } else if (comp2.operator === "") { if (comp2.value === "") { return true; } return new Range2(this.value, options).test(comp2.semver); } const sameDirectionIncreasing = (this.operator === ">=" || this.operator === ">") && (comp2.operator === ">=" || comp2.operator === ">"); const sameDirectionDecreasing = (this.operator === "<=" || this.operator === "<") && (comp2.operator === "<=" || comp2.operator === "<"); const sameSemVer = this.semver.version === comp2.semver.version; const differentDirectionsInclusive = (this.operator === ">=" || this.operator === "<=") && (comp2.operator === ">=" || comp2.operator === "<="); const oppositeDirectionsLessThan = cmp2(this.semver, "<", comp2.semver, options) && (this.operator === ">=" || this.operator === ">") && (comp2.operator === "<=" || comp2.operator === "<"); const oppositeDirectionsGreaterThan = cmp2(this.semver, ">", comp2.semver, options) && (this.operator === "<=" || this.operator === "<") && (comp2.operator === ">=" || comp2.operator === ">"); return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan; } } comparator = Comparator2; const parseOptions2 = parseOptions_1; const { re: re2, t: t2 } = re$3.exports; const cmp2 = cmp_1; const debug2 = debug_1; const SemVer2 = semver$1; const Range2 = requireRange(); return comparator; } const Range$9 = requireRange(); const satisfies$4 = (version2, range2, options) => { try { range2 = new Range$9(range2, options); } catch (er) { return false; } return range2.test(version2); }; var satisfies_1 = satisfies$4; const Range$8 = requireRange(); const toComparators$1 = (range2, options) => new Range$8(range2, options).set.map((comp2) => comp2.map((c) => c.value).join(" ").trim().split(" ")); var toComparators_1 = toComparators$1; const SemVer$4 = semver$1; const Range$7 = requireRange(); const maxSatisfying$1 = (versions, range2, options) => { let max2 = null; let maxSV = null; let rangeObj = null; try { rangeObj = new Range$7(range2, options); } catch (er) { return null; } versions.forEach((v2) => { if (rangeObj.test(v2)) { if (!max2 || maxSV.compare(v2) === -1) { max2 = v2; maxSV = new SemVer$4(max2, options); } } }); return max2; }; var maxSatisfying_1 = maxSatisfying$1; const SemVer$3 = semver$1; const Range$6 = requireRange(); const minSatisfying$1 = (versions, range2, options) => { let min2 = null; let minSV = null; let rangeObj = null; try { rangeObj = new Range$6(range2, options); } catch (er) { return null; } versions.forEach((v2) => { if (rangeObj.test(v2)) { if (!min2 || minSV.compare(v2) === 1) { min2 = v2; minSV = new SemVer$3(min2, options); } } }); return min2; }; var minSatisfying_1 = minSatisfying$1; const SemVer$2 = semver$1; const Range$5 = requireRange(); const gt$2 = gt_1; const minVersion$1 = (range2, loose) => { range2 = new Range$5(range2, loose); let minver = new SemVer$2("0.0.0"); if (range2.test(minver)) { return minver; } minver = new SemVer$2("0.0.0-0"); if (range2.test(minver)) { return minver; } minver = null; for (let i2 = 0; i2 < range2.set.length; ++i2) { const comparators = range2.set[i2]; let setMin = null; comparators.forEach((comparator2) => { const compver = new SemVer$2(comparator2.semver.version); switch (comparator2.operator) { case ">": if (compver.prerelease.length === 0) { compver.patch++; } else { compver.prerelease.push(0); } compver.raw = compver.format(); case "": case ">=": if (!setMin || gt$2(compver, setMin)) { setMin = compver; } break; case "<": case "<=": break; default: throw new Error(`Unexpected operation: ${comparator2.operator}`); } }); if (setMin && (!minver || gt$2(minver, setMin))) { minver = setMin; } } if (minver && range2.test(minver)) { return minver; } return null; }; var minVersion_1 = minVersion$1; const Range$4 = requireRange(); const validRange$1 = (range2, options) => { try { return new Range$4(range2, options).range || "*"; } catch (er) { return null; } }; var valid$1 = validRange$1; const SemVer$1 = semver$1; const Comparator$2 = requireComparator(); const { ANY: ANY$1 } = Comparator$2; const Range$3 = requireRange(); const satisfies$3 = satisfies_1; const gt$1 = gt_1; const lt$1 = lt_1; const lte$1 = lte_1; const gte$1 = gte_1; const outside$3 = (version2, range2, hilo, options) => { version2 = new SemVer$1(version2, options); range2 = new Range$3(range2, options); let gtfn, ltefn, ltfn, comp2, ecomp; switch (hilo) { case ">": gtfn = gt$1; ltefn = lte$1; ltfn = lt$1; comp2 = ">"; ecomp = ">="; break; case "<": gtfn = lt$1; ltefn = gte$1; ltfn = gt$1; comp2 = "<"; ecomp = "<="; break; default: throw new TypeError('Must provide a hilo val of "<" or ">"'); } if (satisfies$3(version2, range2, options)) { return false; } for (let i2 = 0; i2 < range2.set.length; ++i2) { const comparators = range2.set[i2]; let high = null; let low = null; comparators.forEach((comparator2) => { if (comparator2.semver === ANY$1) { comparator2 = new Comparator$2(">=0.0.0"); } high = high || comparator2; low = low || comparator2; if (gtfn(comparator2.semver, high.semver, options)) { high = comparator2; } else if (ltfn(comparator2.semver, low.semver, options)) { low = comparator2; } }); if (high.operator === comp2 || high.operator === ecomp) { return false; } if ((!low.operator || low.operator === comp2) && ltefn(version2, low.semver)) { return false; } else if (low.operator === ecomp && ltfn(version2, low.semver)) { return false; } } return true; }; var outside_1 = outside$3; const outside$2 = outside_1; const gtr$1 = (version2, range2, options) => outside$2(version2, range2, ">", options); var gtr_1 = gtr$1; const outside$1 = outside_1; const ltr$1 = (version2, range2, options) => outside$1(version2, range2, "<", options); var ltr_1 = ltr$1; const Range$2 = requireRange(); const intersects$1 = (r1, r2, options) => { r1 = new Range$2(r1, options); r2 = new Range$2(r2, options); return r1.intersects(r2); }; var intersects_1 = intersects$1; const satisfies$2 = satisfies_1; const compare$3 = compare_1; var simplify = (versions, range2, options) => { const set2 = []; let first = null; let prev2 = null; const v2 = versions.sort((a2, b2) => compare$3(a2, b2, options)); for (const version2 of v2) { const included = satisfies$2(version2, range2, options); if (included) { prev2 = version2; if (!first) { first = version2; } } else { if (prev2) { set2.push([first, prev2]); } prev2 = null; first = null; } } if (first) { set2.push([first, null]); } const ranges = []; for (const [min2, max2] of set2) { if (min2 === max2) { ranges.push(min2); } else if (!max2 && min2 === v2[0]) { ranges.push("*"); } else if (!max2) { ranges.push(`>=${min2}`); } else if (min2 === v2[0]) { ranges.push(`<=${max2}`); } else { ranges.push(`${min2} - ${max2}`); } } const simplified = ranges.join(" || "); const original = typeof range2.raw === "string" ? range2.raw : String(range2); return simplified.length < original.length ? simplified : range2; }; const Range$1 = requireRange(); const Comparator$1 = requireComparator(); const { ANY } = Comparator$1; const satisfies$1 = satisfies_1; const compare$2 = compare_1; const subset$1 = (sub2, dom, options = {}) => { if (sub2 === dom) { return true; } sub2 = new Range$1(sub2, options); dom = new Range$1(dom, options); let sawNonNull = false; OUTER: for (const simpleSub of sub2.set) { for (const simpleDom of dom.set) { const isSub = simpleSubset(simpleSub, simpleDom, options); sawNonNull = sawNonNull || isSub !== null; if (isSub) { continue OUTER; } } if (sawNonNull) { return false; } } return true; }; const simpleSubset = (sub2, dom, options) => { if (sub2 === dom) { return true; } if (sub2.length === 1 && sub2[0].semver === ANY) { if (dom.length === 1 && dom[0].semver === ANY) { return true; } else if (options.includePrerelease) { sub2 = [new Comparator$1(">=0.0.0-0")]; } else { sub2 = [new Comparator$1(">=0.0.0")]; } } if (dom.length === 1 && dom[0].semver === ANY) { if (options.includePrerelease) { return true; } else { dom = [new Comparator$1(">=0.0.0")]; } } const eqSet = /* @__PURE__ */ new Set(); let gt2, lt2; for (const c of sub2) { if (c.operator === ">" || c.operator === ">=") { gt2 = higherGT(gt2, c, options); } else if (c.operator === "<" || c.operator === "<=") { lt2 = lowerLT(lt2, c, options); } else { eqSet.add(c.semver); } } if (eqSet.size > 1) { return null; } let gtltComp; if (gt2 && lt2) { gtltComp = compare$2(gt2.semver, lt2.semver, options); if (gtltComp > 0) { return null; } else if (gtltComp === 0 && (gt2.operator !== ">=" || lt2.operator !== "<=")) { return null; } } for (const eq2 of eqSet) { if (gt2 && !satisfies$1(eq2, String(gt2), options)) { return null; } if (lt2 && !satisfies$1(eq2, String(lt2), options)) { return null; } for (const c of dom) { if (!satisfies$1(eq2, String(c), options)) { return false; } } return true; } let higher, lower; let hasDomLT, hasDomGT; let needDomLTPre = lt2 && !options.includePrerelease && lt2.semver.prerelease.length ? lt2.semver : false; let needDomGTPre = gt2 && !options.includePrerelease && gt2.semver.prerelease.length ? gt2.semver : false; if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt2.operator === "<" && needDomLTPre.prerelease[0] === 0) { needDomLTPre = false; } for (const c of dom) { hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">="; hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<="; if (gt2) { if (needDomGTPre) { if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) { needDomGTPre = false; } } if (c.operator === ">" || c.operator === ">=") { higher = higherGT(gt2, c, options); if (higher === c && higher !== gt2) { return false; } } else if (gt2.operator === ">=" && !satisfies$1(gt2.semver, String(c), options)) { return false; } } if (lt2) { if (needDomLTPre) { if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) { needDomLTPre = false; } } if (c.operator === "<" || c.operator === "<=") { lower = lowerLT(lt2, c, options); if (lower === c && lower !== lt2) { return false; } } else if (lt2.operator === "<=" && !satisfies$1(lt2.semver, String(c), options)) { return false; } } if (!c.operator && (lt2 || gt2) && gtltComp !== 0) { return false; } } if (gt2 && hasDomLT && !lt2 && gtltComp !== 0) { return false; } if (lt2 && hasDomGT && !gt2 && gtltComp !== 0) { return false; } if (needDomGTPre || needDomLTPre) { return false; } return true; }; const higherGT = (a2, b2, options) => { if (!a2) { return b2; } const comp2 = compare$2(a2.semver, b2.semver, options); return comp2 > 0 ? a2 : comp2 < 0 ? b2 : b2.operator === ">" && a2.operator === ">=" ? b2 : a2; }; const lowerLT = (a2, b2, options) => { if (!a2) { return b2; } const comp2 = compare$2(a2.semver, b2.semver, options); return comp2 < 0 ? a2 : comp2 > 0 ? b2 : b2.operator === "<" && a2.operator === "<=" ? b2 : a2; }; var subset_1 = subset$1; const internalRe = re$3.exports; const constants = constants$1; const SemVer = semver$1; const identifiers = identifiers$1; const parse$1 = parse_1; const valid = valid_1; const clean = clean_1; const inc = inc_1; const diff = diff_1; const major = major_1; const minor = minor_1; const patch = patch_1; const prerelease = prerelease_1; const compare$1 = compare_1; const rcompare = rcompare_1; const compareLoose = compareLoose_1; const compareBuild = compareBuild_1; const sort = sort_1; const rsort = rsort_1; const gt = gt_1; const lt = lt_1; const eq = eq_1; const neq = neq_1; const gte = gte_1; const lte = lte_1; const cmp = cmp_1; const coerce = coerce_1; const Comparator = requireComparator(); const Range = requireRange(); const satisfies = satisfies_1; const toComparators = toComparators_1; const maxSatisfying = maxSatisfying_1; const minSatisfying = minSatisfying_1; const minVersion = minVersion_1; const validRange = valid$1; const outside = outside_1; const gtr = gtr_1; const ltr = ltr_1; const intersects = intersects_1; const simplifyRange = simplify; const subset = subset_1; var semver = { parse: parse$1, valid, clean, inc, diff, major, minor, patch, prerelease, compare: compare$1, rcompare, compareLoose, compareBuild, sort, rsort, gt, lt, eq, neq, gte, lte, cmp, coerce, Comparator, Range, satisfies, toComparators, maxSatisfying, minSatisfying, minVersion, validRange, outside, gtr, ltr, intersects, simplifyRange, subset, SemVer, re: internalRe.re, src: internalRe.src, tokens: internalRe.t, SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, compareIdentifiers: identifiers.compareIdentifiers, rcompareIdentifiers: identifiers.rcompareIdentifiers }; function base64Encode(text2) { const binary2 = toBinary(text2); return window.btoa(binary2); } function base64Decode(encoded) { const decoded = atob(encoded); return fromBinary(decoded); } function toBinary(text2) { const codeUnits = new Uint16Array(text2.length); for (let i2 = 0; i2 < codeUnits.length; i2++) { codeUnits[i2] = text2.charCodeAt(i2); } const charCodes = Array.from(new Uint8Array(codeUnits.buffer)).map((code2) => String.fromCharCode(code2)); return charCodes.join(""); } function fromBinary(binary2) { const bytes = new Uint8Array(binary2.length); for (let i2 = 0; i2 < bytes.length; i2++) { bytes[i2] = binary2.charCodeAt(i2); } const charCodes = Array.from(new Uint16Array(bytes.buffer)).map((code2) => String.fromCharCode(code2)); return charCodes.join(""); } const kFieldDelimiter = "\n"; const kValueDelimiter = ":"; const kTypeField = "type"; const kPositionField = "position"; const kPrefixField = "prefix"; const kSourceField = "source"; const kSuffixField = "suffix"; const kBlockCapsuleSentinel = "31B8E172-B470-440E-83D8-E6B185028602".toLowerCase(); function pandocMarkdownWithBlockCapsules(original, markdown, capsuleFilter) { const defaultExtractor = (_match, p1, p2, p3) => { return { prefix: p1, source: p2, suffix: p3 }; }; const positions = []; let match2 = capsuleFilter.match.exec(original); while (match2 != null) { positions.push(match2.index); match2 = capsuleFilter.match.exec(original); } capsuleFilter.match.lastIndex = 0; return markdown.replace(capsuleFilter.match, (match22, p1, p2, p3, p4) => { let position2 = 0; const originalPos = positions.shift(); if (originalPos) { position2 = originalPos; } if (capsuleFilter.discard && !!match22.match(capsuleFilter.discard)) { return match22; } const extract = capsuleFilter.extract || defaultExtractor; const { prefix: prefix2, source, suffix } = extract(match22, p1, p2, p3, p4); const capsule = { [kTypeField]: capsuleFilter.type, [kPositionField]: position2, [kPrefixField]: prefix2, [kSourceField]: source, [kSuffixField]: suffix }; const field = (name, value) => `${name}${kValueDelimiter}${base64Encode(value)}`; const record = field(kTypeField, capsule.type) + kFieldDelimiter + field(kPositionField, capsule.position.toString()) + kFieldDelimiter + field(kPrefixField, capsule.prefix) + kFieldDelimiter + field(kSourceField, capsule.source) + kFieldDelimiter + field(kSuffixField, capsule.suffix); const encodedRecord = base64Encode(record); return prefix2 + capsuleFilter.enclose( `${kBlockCapsuleSentinel}${kValueDelimiter}${encodedRecord}${kValueDelimiter}${kBlockCapsuleSentinel}`, capsule ) + suffix; }); } function resolvePandocBlockCapsuleText(tokens2, filters) { return mapTokens(tokens2, (token2) => { if (token2.t !== PandocTokenType.Str && token2.c) { if (typeof token2.c === "string") { token2.c = decodeBlockCapsuleText(token2.c, token2, filters); } else if (Array.isArray(token2.c)) { const children = token2.c.length; for (let i2 = 0; i2 < children; i2++) { if (typeof token2.c[i2] === "string") { token2.c[i2] = decodeBlockCapsuleText(token2.c[i2], token2, filters); } } } } return token2; }); } function decodeBlockCapsuleText(text2, tok, filters) { filters.forEach((filter) => { text2 = filter.handleText(text2, tok); }); return text2; } function blockCapsuleTextHandler(type2, pattern, textFilter) { return (text2, tok) => { const stripPrefix = tok.t === PandocTokenType.CodeBlock || tok.t === PandocTokenType.RawBlock; return text2.replace(pattern, (match2) => { const capsuleText = textFilter ? textFilter(match2) : match2; const capsule = parsePandocBlockCapsule(capsuleText); if (capsule.type === type2) { if (stripPrefix) { return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix); } else { return capsule.source; } } else { return match2; } }); }; } function blockCapsuleParagraphTokenHandler(type2) { const tokenRegex = encodedBlockCapsuleRegex("^", "$"); return (tok) => { if (tok.t === PandocTokenType.Para) { if (tok.c.length === 1 && tok.c[0].t === PandocTokenType.Str) { const text2 = tok.c[0].c; const match2 = text2.match(tokenRegex); if (match2) { const capsuleRecord = parsePandocBlockCapsule(match2[0]); if (capsuleRecord.type === type2) { return match2[0]; } } } } return null; }; } function encodedBlockCapsuleRegex(prefix2, suffix, flags) { return new RegExp( (prefix2 || "") + kBlockCapsuleSentinel + kValueDelimiter + "((?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)" + kValueDelimiter + kBlockCapsuleSentinel + (suffix || ""), flags ); } function parsePandocBlockCapsule(text2) { const envelopeLen = kBlockCapsuleSentinel.length + kFieldDelimiter.length; const record = text2.substring(envelopeLen, text2.length - envelopeLen); const decodedRecord = base64Decode(record); const fields = decodedRecord.split(kFieldDelimiter); const fieldValue = (i2) => base64Decode(fields[i2].split(kValueDelimiter)[1]); return { [kTypeField]: fieldValue(0), [kPositionField]: parseInt(fieldValue(1), 10), [kPrefixField]: fieldValue(2), [kSourceField]: fieldValue(3), [kSuffixField]: fieldValue(4) }; } function blockCapsuleSourceWithoutPrefix(source, prefix2) { const prefixStripRegEx = new RegExp("^" + prefix2); const lines2 = source.split("\n").map((line2, index2) => { return index2 > 0 ? line2.replace(prefixStripRegEx, "") : line2; }); return lines2.join("\n"); } const kHeadingLevel = 0; const kHeadingAttr = 1; const kHeadingChildren = 2; function pandocToProsemirror(ast2, schema2, extensions, readers, tokensFilters, blockReaders, inlineHTMLReaders, blockCapsuleFilters) { const parser = new Parser( schema2, extensions, readers, tokensFilters, blockReaders, inlineHTMLReaders, blockCapsuleFilters ); return parser.parse(ast2); } class Parser { constructor(schema2, extensions, readers, tokensFilters, blockReaders, inlineHTMLReaders, blockCapsuleFilters) { __publicField(this, "schema"); __publicField(this, "extensions"); __publicField(this, "tokensFilters"); __publicField(this, "inlineHTMLReaders"); __publicField(this, "blockCapsuleFilters"); __publicField(this, "handlers"); this.schema = schema2; this.extensions = extensions; this.tokensFilters = tokensFilters; this.inlineHTMLReaders = inlineHTMLReaders; this.blockCapsuleFilters = blockCapsuleFilters.slice().reverse(); this.handlers = this.createHandlers(readers, blockReaders); } parse(ast2) { const state = new ParserState(this.schema); const parser = this; const writer = { openNode: state.openNode.bind(state), closeNode: state.closeNode.bind(state), openNoteNode: state.openNoteNode.bind(state), addNode: state.addNode.bind(state), openMark: state.openMark.bind(state), closeMark: state.closeMark.bind(state), writeText: state.writeText.bind(state), hasInlineHTMLWriter(html2) { return parser.hasInlineHTMLWriter(html2); }, writeInlineHTML(html2) { return parser.writeInlineHTML(this, html2); }, writeTokens(tokens2) { parser.writeTokens(this, tokens2); }, logUnrecognized: state.logUnrecognized.bind(state), logExampleList: state.logExampleList.bind(state), isNodeOpen: state.isNodeOpen.bind(state) }; let targetAst = { ...ast2, blocks: resolvePandocBlockCapsuleText(ast2.blocks, this.blockCapsuleFilters) }; const lineWrapping = detectLineWrapping(targetAst); targetAst = resolveHeadingIds(targetAst, this.extensions); writer.writeTokens(targetAst.blocks); return { doc: state.doc(), line_wrapping: lineWrapping, unrecognized: state.unrecognized(), example_lists: state.hasExampleLists(), unparsed_meta: ast2.meta }; } writeTokens(writer, tokens2) { let targetTokens = tokens2; this.tokensFilters.forEach((filter) => { targetTokens = filter(targetTokens, writer); }); targetTokens.forEach((tok) => this.writeToken(writer, tok)); } writeToken(writer, tok) { var _a; for (const filter of this.blockCapsuleFilters) { const capsuleText = (_a = filter.handleToken) == null ? void 0 : _a.call(filter, tok); if (capsuleText) { const blockCapsule = parsePandocBlockCapsule(capsuleText); blockCapsule.source = decodeBlockCapsuleText(blockCapsule.source, tok, this.blockCapsuleFilters); filter.writeNode(this.schema, writer, blockCapsule); return; } } const handlers2 = this.handlers[tok.t] || []; for (const handler of handlers2) { if (handler.match && handler.match(tok)) { handler.handler(writer, tok); return; } } for (const handler of handlers2) { if (!handler.match) { handler.handler(writer, tok); return; } } writer.logUnrecognized(tok.t); } hasInlineHTMLWriter(html2) { for (const reader of this.inlineHTMLReaders) { if (reader(this.schema, html2)) { return true; } } return false; } writeInlineHTML(writer, html2) { for (const reader of this.inlineHTMLReaders) { if (reader(this.schema, html2, writer)) { return; } } } createHandlers(readers, blockReaders) { const handlers2 = {}; for (const reader of readers) { const getChildren = reader.getChildren || ((tok) => tok.c); const getAttrs = reader.getAttrs ? reader.getAttrs : () => ({}); let handler; if (reader.handler) { handler = reader.handler(this.schema); } else if (reader.text) { handler = (writer, tok) => { if (reader.getText) { const text2 = reader.getText(tok); writer.writeText(text2); } }; } else if (reader.mark) { handler = (writer, tok) => { const markType = this.schema.marks[reader.mark]; const mark = markType.create(getAttrs(tok)); writer.openMark(mark); if (reader.getText) { writer.writeText(reader.getText(tok)); } else { writer.writeTokens(getChildren(tok)); } writer.closeMark(mark); }; } else if (reader.block) { const nodeType = this.schema.nodes[reader.block]; handler = (writer, tok) => { for (const blockReader of blockReaders) { if (blockReader(this.schema, tok, writer)) { return; } } writer.openNode(nodeType, getAttrs(tok)); if (reader.getText) { writer.writeText(reader.getText(tok)); } else { writer.writeTokens(getChildren(tok)); } writer.closeNode(); }; } else if (reader.node) { const nodeType = this.schema.nodes[reader.node]; handler = (writer, tok) => { if (reader.getChildren) { writer.openNode(nodeType, getAttrs(tok)); writer.writeTokens(getChildren(tok)); writer.closeNode(); } else { let content = []; if (reader.getText) { content = [this.schema.text(reader.getText(tok))]; } writer.addNode(nodeType, getAttrs(tok), content); } }; } else if (reader.code_block) { handler = (writer, tok) => { const nodeType = this.schema.nodes.code_block; const attr = pandocAttrReadAST(tok, kCodeBlockAttr); const text2 = tok.c[kCodeBlockText]; writer.openNode(nodeType, attr); writer.writeText(text2); writer.closeNode(); }; } else { throw new Error("pandoc reader was malformed or unrecognized"); } handlers2[reader.token] = handlers2[reader.token] || []; handlers2[reader.token].push({ match: reader.match, handler }); } return handlers2; } } class ParserState { constructor(schema2) { __publicField(this, "schema"); __publicField(this, "stack"); __publicField(this, "notes"); __publicField(this, "marks"); __publicField(this, "footnoteNumber"); __publicField(this, "unrecognizedTokens"); __publicField(this, "exampleLists"); this.schema = schema2; this.stack = [{ type: this.schema.nodes.body, attrs: {}, content: [] }]; this.notes = []; this.marks = Mark.none; this.footnoteNumber = 1; this.unrecognizedTokens = []; this.exampleLists = false; } doc() { const content = []; content.push(this.top().type.createAndFill(null, this.top().content)); content.push(this.schema.nodes.notes.createAndFill(null, this.notes)); return this.schema.topNodeType.createAndFill({}, content); } unrecognized() { return this.unrecognizedTokens; } hasExampleLists() { return this.exampleLists; } writeText(text2) { if (!text2) { return; } const nodes2 = this.top().content; const last2 = nodes2[nodes2.length - 1]; const node2 = this.schema.text(text2, this.marks); const merged = this.maybeMerge(last2, node2); if (last2 && merged) { nodes2[nodes2.length - 1] = merged; } else { nodes2.push(node2); } } addNode(type2, attrs, content) { const node2 = type2.createAndFill(attrs, content, this.marks); if (!node2) { return null; } if (this.stack.length) { if (type2 === this.schema.nodes.note) { this.notes.push(node2); } else { this.top().content.push(node2); } } return node2; } openNode(type2, attrs) { this.stack.push({ type: type2, attrs, content: [] }); } closeNode() { const info = this.stack.pop(); if (!info.type.isInline) { if (this.marks.length) { this.marks = Mark.none; } } return this.addNode(info.type, info.attrs, info.content); } openMark(mark) { this.marks = mark.addToSet(this.marks); } closeMark(mark) { this.marks = mark.removeFromSet(this.marks); } openNoteNode(ref) { this.openNode(this.schema.nodes.note, { ref, number: this.footnoteNumber++ }); } logUnrecognized(type2) { if (!this.unrecognizedTokens.includes(type2)) { this.unrecognizedTokens.push(type2); } } logExampleList() { this.exampleLists = true; } isNodeOpen(type2) { return this.stack.some((value) => value.type === type2); } top() { return this.stack[this.stack.length - 1]; } maybeMerge(a2, b2) { if (a2 && a2.isText && b2.isText && Mark.sameSet(a2.marks, b2.marks)) { return this.schema.text(a2.text + b2.text, a2.marks); } else { return void 0; } } } function detectLineWrapping(ast2) { let columnBreaks = 0; let sentenceBreaks = 0; let prevTok = { t: PandocTokenType.Null }; forEachToken(ast2.blocks, (tok) => { if (tok.t === PandocTokenType.SoftBreak) { if (prevTok.t === PandocTokenType.Str && typeof prevTok.c === "string" && [".", "?", "!"].includes(prevTok.c.charAt(prevTok.c.length - 1))) { sentenceBreaks++; } else { columnBreaks++; } } prevTok = tok; }); const lineBreaks = columnBreaks + sentenceBreaks; if (lineBreaks > 5 || lineBreaks > ast2.blocks.length) { if (sentenceBreaks > columnBreaks) { return "sentence"; } else { return "column"; } } else { return "none"; } } function resolveHeadingIds(ast2, extensions) { const autoIdentifier = extensions.gfm_auto_identifiers ? gfmAutoIdentifier : pandocAutoIdentifier; const headingIds = new Set((ast2.heading_ids || []).map((id2) => id2.toLocaleLowerCase())); let astBlocks = mapTokens(ast2.blocks, (tok) => { if (tok.t === PandocTokenType.Link) { const target2 = tok.c[kLinkTarget]; const href = target2[kLinkTargetUrl]; if (href.startsWith("#")) { const text2 = stringifyTokens(tok.c[kLinkChildren], extensions.gfm_auto_identifiers); if (hasShortcutHeadingLinks(extensions) && equalsIgnoreCase("#" + autoIdentifier(text2, extensions.ascii_identifiers), href) && !headingIds.has(href.toLocaleLowerCase())) { return { t: PandocTokenType.Link, c: [tok.c[kLinkAttr], tok.c[kLinkChildren], ["#", tok.c[kLinkTarget][kLinkTargetTitle]]] }; } else { headingIds.add(href.toLocaleLowerCase()); } } } return tok; }); astBlocks = mapTokens(ast2.blocks, (tok) => { if (tok.t === PandocTokenType.Header) { const attr = pandocAttrReadAST(tok, kHeadingAttr); if (attr.id && !headingIds.has("#" + attr.id.toLocaleLowerCase())) { return { t: PandocTokenType.Header, c: [ tok.c[kHeadingLevel], ["", tok.c[kHeadingAttr][kPandocAttrClasses], tok.c[kHeadingAttr][kPandocAttrKeyvalue]], tok.c[kHeadingChildren] ] }; } } return tok; }); return { ...ast2, blocks: astBlocks, heading_ids: void 0 }; } function pandocFromProsemirror(doc2, apiVersion, format2, nodeWriters, markWriters) { const bodyNode = doc2.child(0); const notesNode = doc2.child(1); const writer = new PandocWriter(apiVersion, format2, nodeWriters, markWriters, notesNode); writer.writeNodes(bodyNode); return writer.output(); } class PandocWriter { constructor(apiVersion, format2, nodeWriters, markWriters, notes) { __publicField(this, "ast"); __publicField(this, "format"); __publicField(this, "nodeWriters"); __publicField(this, "markWriters"); __publicField(this, "notes"); __publicField(this, "containers"); __publicField(this, "activeMarks"); __publicField(this, "options"); __publicField(this, "extensions"); __publicField(this, "escapeCharacters", []); __publicField(this, "manualEscapeCharacters", /* @__PURE__ */ new Map()); __publicField(this, "preventEscapeCharacters", []); this.format = format2; this.extensions = format2.extensions; this.initEscapeCharacters(); this.nodeWriters = {}; nodeWriters.forEach((writer) => { this.nodeWriters[writer.name] = writer.write; }); this.markWriters = {}; markWriters.forEach((writer) => { this.markWriters[writer.name] = writer; }); this.notes = {}; notes.forEach((note) => { this.notes[note.attrs.ref] = note; }); this.ast = { blocks: [], "pandoc-api-version": apiVersion, meta: {} }; this.containers = [this.ast.blocks]; this.activeMarks = []; this.options = { writeSpaces: true }; } output() { return { ast: this.ast }; } write(value) { const container = this.containers[this.containers.length - 1]; container.push(value); } writeToken(type2, content) { const token2 = { t: type2 }; if (content !== void 0) { if (typeof content === "function") { token2.c = []; this.fill(token2.c, content); } else { token2.c = content; } } this.write(token2); } writeMark(type2, parent, expelEnclosingWhitespace = true) { if (expelEnclosingWhitespace) { const output = { spaceBefore: false, nodes: new Array(), spaceAfter: false }; parent.forEach((node2, _offset, index2) => { if (node2.isText) { let outputText = node2.textContent; if (output.nodes.length === 0 && node2.textContent.match(/^\s+/)) { output.spaceBefore = true; outputText = outputText.trimLeft(); } if (index2 === parent.childCount - 1 && node2.textContent.match(/\s+$/)) { output.spaceAfter = true; outputText = outputText.trimRight(); } if (outputText.match(/^\s*$/)) { outputText = ""; } if (outputText.length > 0) { if (outputText !== node2.textContent) { output.nodes.push(node2.type.schema.text(outputText, node2.marks)); } else { output.nodes.push(node2); } } } else { output.nodes.push(node2); } }); if (output.nodes.length > 0) { if (output.spaceBefore) { this.writeToken(PandocTokenType.Space); } this.writeToken(type2, () => { this.writeInlines(Fragment.from(output.nodes)); }); if (output.spaceAfter) { this.writeToken(PandocTokenType.Space); } } } else { this.writeToken(type2, () => { this.writeInlines(parent); }); } } writeArray(content) { const arr = []; this.fill(arr, content); this.write(arr); } writeAttr(id2, classes, keyvalue) { this.write([id2 || "", classes || [], keyvalue || []]); } writeText(text2) { const preventEscapeCharacters = [...this.preventEscapeCharacters]; if (this.options[kPreventBracketEscape]) { preventEscapeCharacters.push("[", "]"); } if (this.extensions.smart) { preventEscapeCharacters.push("'", '"'); } if (text2) { let textRun = ""; const flushTextRun = () => { if (textRun) { if (!this.options.writeSpaces) { textRun = textRun.replace(/(^|\n)+(\u00A0+)/g, (_match, p1, p2) => { return p1 + Array(p2.length + 1).join(" "); }); } this.writeToken(PandocTokenType.Str, textRun); textRun = ""; } }; for (let i2 = 0; i2 < text2.length; i2++) { const ch2 = text2.charAt(i2); if (this.options.writeSpaces && ch2 === " ") { flushTextRun(); this.writeToken(PandocTokenType.Space); } else if (preventEscapeCharacters.includes(ch2)) { flushTextRun(); this.writeRawMarkdown(ch2); } else if (this.manualEscapeCharacters.has(ch2)) { flushTextRun(); this.writeRawMarkdown(this.manualEscapeCharacters.get(ch2)); } else { textRun += ch2; } } flushTextRun(); } } writeLink(href, title, attr, content) { this.writeToken(PandocTokenType.Link, () => { if (attr) { this.writeAttr(attr.id, attr.classes, attr.keyvalue); } else { this.writeAttr(); } this.writeArray(() => { content(); }); this.write([href || "", title || ""]); }); } writeNote(note) { const noteBody = this.notes[note.attrs.ref]; if (noteBody.textContent.trim().length > 0) { this.writeToken(PandocTokenType.Note, () => { this.writeNodes(noteBody); }); } } writeNode(node2) { this.nodeWriters[node2.type.name](this, node2); } writeNodes(parent) { parent.forEach(this.writeNode.bind(this)); } writeInlines(fragment) { const nodeMarks = (node2) => { let marks = marksByPriority(node2.marks, this.markWriters); for (const activeMark of this.activeMarks) { marks = activeMark.removeFromSet(marks); } return marks; }; let currentChild = 0; const nextNode = () => { const childIndex = currentChild; currentChild++; return { node: fragment.child(childIndex), marks: nodeMarks(fragment.child(childIndex)) }; }; const putBackNode = () => { currentChild--; }; while (currentChild < fragment.childCount) { let next2 = nextNode(); if (next2.marks.length > 0) { const mark = next2.marks[0]; const markedNodes = [next2.node]; while (currentChild < fragment.childCount) { next2 = nextNode(); if (next2.marks.some((nextMark) => nextMark.eq(mark))) { markedNodes.push(next2.node); } else { putBackNode(); break; } } this.activeMarks.push(mark.type); this.markWriters[mark.type.name].write(this, mark, Fragment.from(markedNodes)); this.activeMarks.pop(); } else { this.nodeWriters[next2.node.type.name](this, next2.node); } } } writeRawMarkdown(markdown, escapeSymbols) { let md2 = markdown instanceof Fragment ? fragmentText(markdown) : markdown; if (escapeSymbols) { const escaped = []; for (let i2 = 0; i2 < md2.length; i2++) { const ch2 = md2.charAt(i2); if (this.escapeCharacters.includes(ch2)) { escaped.push("\\" + ch2); } else { escaped.push(ch2); } } md2 = escaped.join(""); } this.writeToken(PandocTokenType.RawInline, () => { this.write("markdown"); this.write(md2); }); } withOption(option, value, f2) { const previousValue = this.options[option]; this.options[option] = value; f2(); this.options[option] = previousValue; } fill(container, content) { this.containers.push(container); content(); this.containers.pop(); } initEscapeCharacters() { if (this.format.mode === kGfmFormat || this.format.extensions.tex_math_single_backslash) { this.preventEscapeCharacters.push("[", "]"); } if (this.format.extensions.tex_math_single_backslash) { this.preventEscapeCharacters.push("(", ")"); } const allEscapeCharacters = ["\\", "`", "*", "_", "{", "}", "[", "]", "(", ")", ">", "#", "+", "-", ".", "!"]; if (this.format.extensions.angle_brackets_escapable) { allEscapeCharacters.push("<"); } this.escapeCharacters.push(...allEscapeCharacters.filter((ch2) => !this.preventEscapeCharacters.includes(ch2))); const atEscape = this.extensions.all_symbols_escapable ? "\\@" : "@"; this.manualEscapeCharacters.set("@", atEscape); } } class PandocConverter { constructor(schema2, extensions, pandoc, pandocCapabilities) { __publicField(this, "schema"); __publicField(this, "preprocessors"); __publicField(this, "postprocessors"); __publicField(this, "readers"); __publicField(this, "tokensFilters"); __publicField(this, "blockReaders"); __publicField(this, "inlineHTMLReaders"); __publicField(this, "blockCapsuleFilters"); __publicField(this, "nodeWriters"); __publicField(this, "markWriters"); __publicField(this, "markdownPostProcessors"); __publicField(this, "pandoc"); __publicField(this, "pandocCapabilities"); this.schema = schema2; this.preprocessors = extensions.pandocPreprocessors(); this.postprocessors = extensions.pandocPostprocessors(); this.readers = extensions.pandocReaders(); this.tokensFilters = extensions.pandocTokensFilters(); this.blockReaders = extensions.pandocBlockReaders(); this.inlineHTMLReaders = extensions.pandocInlineHTMLReaders(); this.blockCapsuleFilters = extensions.pandocBlockCapsuleFilters(); this.nodeWriters = extensions.pandocNodeWriters(); this.markWriters = extensions.pandocMarkWriters(); this.markdownPostProcessors = extensions.pandocMarkdownPostProcessors(); this.pandoc = pandoc; this.pandocCapabilities = pandocCapabilities; } async toProsemirror(markdown, format2) { markdown = normalizeNewlines(markdown); const original = markdown; const autoIds = format2.extensions.gfm_auto_identifiers ? "gfm_auto_identifiers" : "auto_identifiers"; const targetFormat = adjustedFormat( format2.fullName, [ "raw_html", "raw_attribute", "backtick_code_blocks", autoIds, "grid_tables", "pipe_tables", "multiline_tables", "simple_tables", "tex_math_dollars" ], ["smart"] ); this.preprocessors.forEach((preprocessor) => { markdown = preprocessor(markdown); }); this.blockCapsuleFilters.forEach((filter) => { markdown = pandocMarkdownWithBlockCapsules(original, markdown, filter); }); const ast2 = await this.pandoc.markdownToAst(markdown, targetFormat, []); const result = pandocToProsemirror( ast2, this.schema, format2.extensions, this.readers, this.tokensFilters, this.blockReaders, this.inlineHTMLReaders, this.blockCapsuleFilters ); this.postprocessors.forEach((postprocessor) => { result.doc = postprocessor(result.doc); }); return result; } async fromProsemirror(doc2, pandocFormat, pandocCapabilities, options) { var _a, _b, _c, _d; const output = pandocFromProsemirror( doc2, this.pandocCapabilities.api_version, pandocFormat, this.nodeWriters, this.markWriters ); let format2 = adjustedFormat( pandocFormat.fullName, ["raw_html", "raw_attribute"], ["auto_identifiers", "gfm_auto_identifiers", "smart"] ); format2 = pandocFormatWith(format2, disabledFormatOptions(format2, pandocFormat, doc2), ""); let pandocOptions = []; if (!options.atxHeaders) { pandocOptions.push("--markdown-headings=setext"); } if (options.dpi) { pandocOptions.push("--dpi"); } let referenceLocation = "block"; if ((_a = options.references) == null ? void 0 : _a.location) { referenceLocation = ["block", "section", "document"].includes(options.references.location) ? options.references.location : "block"; } pandocOptions.push(`--reference-location=${referenceLocation}`); if ((_b = options.references) == null ? void 0 : _b.prefix) { pandocOptions.push("--id-prefix", options.references.prefix); } if ((_c = options.references) == null ? void 0 : _c.links) { pandocOptions.push("--reference-links"); } pandocOptions = pandocOptions.concat(wrapOptions(options)); let markdown = await this.pandoc.astToMarkdown(output.ast, format2, pandocOptions); markdown = markdown.replace(/\r\n|\n\r|\r/g, "\n"); if ((_d = options.references) == null ? void 0 : _d.prefix) { const pandocVersion = pandocSemver(pandocCapabilities); if (pandocVersion && semver.gte(pandocVersion, "3.1.4")) { const regex2 = new RegExp(escapeRegExpCharacters(`{#${options.references.prefix}`), "g"); markdown = markdown.replace(regex2, "{#"); } } this.markdownPostProcessors.forEach((postprocessor) => { markdown = postprocessor(markdown); }); return markdown; } } function pandocSemver(capabilities) { const versionLines = lines(capabilities.version); const version2 = versionLines[0].replace("pandoc ", "").trim(); return semver.coerce(version2); } function adjustedFormat(format2, extensions, disabled) { let newFormat = pandocFormatWith( format2, "", extensions.map((ext) => `+${ext}`).join("") + disabled.map((ext) => `-${ext}`).join("") ); extensions.forEach((ext) => { newFormat = newFormat.replace("-" + ext, ""); }); return newFormat; } function disabledFormatOptions(format2, pandocFormat, doc2) { let disabledTableTypes = "-simple_tables-multiline_tables"; if (haveTableCellsWithInlineRcode(doc2) || !gridTablesRequired(doc2) && pandocFormat.extensions.pipe_tables) { disabledTableTypes += "-grid_tables"; } if (format2.startsWith(kGfmFormat) || format2.startsWith(kCommonmarkFormat)) { disabledTableTypes = ""; } return disabledTableTypes; } function gridTablesRequired(doc2) { const schema2 = doc2.type.schema; const isTableCell = (node2) => node2.type === schema2.nodes.table_cell || node2.type === schema2.nodes.table_header; return findChildren_1(doc2, isTableCell).some((cell) => { if (cell.node.childCount > 1) { return true; } if (!isParagraphNode(cell.node.firstChild)) { return true; } const paraNode = cell.node.firstChild; return findChildren_1(paraNode, (node2) => node2.type === schema2.nodes.hard_break).length > 0; }); } function wrapOptions(options) { const pandocOptions = []; if (options.wrap) { if (options.wrap === "none" || options.wrap === "sentence") { pandocOptions.push("--wrap=none"); } else { const column2 = parseInt(options.wrap, 10); if (column2) { pandocOptions.push("--wrap=auto"); pandocOptions.push(`--columns=${column2}`); } else { pandocOptions.push("--wrap=none"); } } } else { pandocOptions.push("--wrap=none"); } return pandocOptions; } const copyImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NWRiNjhhYy01MDNjLTRmZDAtOTVhOC1lMTM3YWIxOWIxZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkQxNTE2QjA3NENEMTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkQxNTE2QUY3NENEMTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplY2JjYzM4ZS04NzVkLTQ4NzQtOTFjNy00NTE0NjM3MTliYzQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplNmFjZjIwZi0yZWIwLTQwNDEtOGRhZC1hM2U1YmNhNWM3OGMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7vkHxoAAAClklEQVR42sxYz08TQRR+M93+A8DBkhjw4D9AwkU2Hk1M1JOGxPTCQRLCAdQEjMpZxR8xxtiqF0MChQB3DhyU0P8CTxAT4UBMPGk7z3l0p+yuO92d3elmt33Z3Wnn9Zvv+97sTBkiQpEPJ6rxxZed3r2Q3vJFY0O6olPnns5L0zesAeTGPWLA2VbEsQ1OyGCMmY9bMzAW9UFI4rsyZiQaNwm4/+87bfJ6X7Tb9VcPJ1dNACZhcGby2rg7OjyYSaqDw2P34+ZXorbR0QICiBbebsHy/O0UACVzFy8MwN+WyARwpDIEMsMEqXZumHgGexbJo6nrjMQscWbF8B4I7oEMJBXGEqNKaq8ihUBYeLP+h7ESpd+XUXt5/86auQe9arWNkEA8vXcLHMeBo+NT99P2HjWvKfCJJe5Wa9gomQGeM3XmSUQ3lQfVVNKrYyqJQ7n8uXU/w3VDRbDvwfBg/bIKIwZ9ydCyB/UMGkns82BfJQZI7UHVQfSRQX9uYc4g9sGDYE9ikbsHDapY9MmDvSQuiAfBZhVjzlUMaT1ocwGv96BRFQsfg3lJrHvq5zpRoz2JITDN6JZC2QTOUMUBiYVofj86yQzu4PAnXKoMhnZ8GCOwZsHqr+JWu1V/39hlMvMVxWzUrg2DO7jOqlK1y7vRygBcHbt8BlCBTPIsduKq+N1ilXZhG953+dzzld9L0zeN2CNAnPNuxIFKLPHcckNtD2lL16JgvATlctk4aJlPQQAVi0mcrWdQdGVWeYQXzR8nvyZGhoeMWVRnCvKkzN9MBVCBI3yzz1aRjg+Pq55xoFbf+kZNbmJPgt+T3QUxgaslmpuiIu+j+uRzJA4OBT8KD9CJeyw9eL0R8GTaeTCtbVjR/wL+J8AADym9+B8KLMsAAAAASUVORK5CYII="; const propertiesImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NWRiNjhhYy01MDNjLTRmZDAtOTVhOC1lMTM3YWIxOWIxZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0IxREFFRDE3NEI0MTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0IxREFFRDA3NEI0MTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDAxMTRhZC00ZWFjLTQzYmMtYWU0OS0wMGE2MjE1N2ZiZmMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplNmFjZjIwZi0yZWIwLTQwNDEtOGRhZC1hM2U1YmNhNWM3OGMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6swmwvAAAEaUlEQVR42syYa0yTVxjHT9+W1wLWUopAQZ3iNYbhNWFZVsBL0KjLxPjFC/EyHEKWmBl184NR45aYqdunbQ4VQReJH7zFLHHegkEN+kVEMGEZNUOgUFraUiwI78XzNC05vLT1vH1b5SRP0vecnuf88pzznPM/RyWKIhrPRUN+/Frz4KPCfLcpf0wdg8Z50YwnGJVKNeoblp9SwDnY1mMrxDYfm9Ff78D2Eg9wh+e465q4uJYPHcFN2MqSdPHmrEwjmpZmQIZJCUjLxvkaB4eGTc4+r6mt27nC0uE47vIM1AmCcHrf1uU1v1yqlZWVKjKLKZJkAYBlTtaX5mZ/gjJS9FSDdNrd6EnT/6jd5qoQBP6P/cUrnwcD3bu5YMwUy0mSYrWaaShYMqu0qCCHGg4K/Bf6LFs6+xuWZZ+d/Ot+MYZR0fSlBdymZTUXivI/RdlZpogXLPQFHwlatvrExbvbaSBpABdr1EzVl+ZslG6cpDhTwQf4msCylcfP/7PkfZA0gGV5i2aitGRd1LYT8AU+cXaXAUM4yLCAOPO24IQomT8jPep7HvicmmbY+XP17c2QrKEgwwIyDLP7M5ytsSrgm1FrdofjCNnA89zCFH3iFyYZ2Sq3gO9Ug+7zI79fWQhR9BsdoFqtKZo5xRjz4w3GSJyoXx+KJSQg3iTzTJP1MQfMwGOoGMYcKoJBjzpYsHinn2vQJYyqt3TY0K26Rt/v1eYclJWZqrgtCY+BRcIcAhBMpEkSY+BsDZRbD1+g/oG3PoPf0WiDMTBgcrDoKdOD4ZR4ZG3ykgQkE1YloyrW5uWgifETkC5Ri9bmL4hKG4yB13uvbLmFO7U4PV5TopYdqZuekYr2bC30LRCeFxGphCJtc3m8+EDg/5O9D4qC8NDa4x4jf4Y5AXHYpJetSNs67X0Ii9pHsgE5jrva2u6I+TbT+tqOHLbOG/7MFakBf9ixqrHH1f/IanfHDA58d/e66098v7MxGFxIQL/aFXlu+M96rIRjVeqb2pC333MWdAkRQZE2i8UD2wpr2roc55ot1qjDgc9X7V3Vh8uKLksAZe2DwqD3zem6BgueCk/U4MAX+Ozpaj9DwAmykiQwzYdKv2rwegdKbtY1RwUSfIAvp8NefupgSQPsPEoi6IsiTpgLbrd717XaRtSkYLqhL/josXWXHy7fcJGAEyJS1IEogoODX6+ptlk7cu/Wv6yEQayOPvpsxf+9VvsC3X7cVNXa0mwm4EaiF+q+THUv9stxxm/qHytubtHGJ+wyJulyZ2Qmo2npBpSsG3VxR734hGjrcqJXHb3I7up72u92VR79dmMNATYSvQBcsHsx9cVdAukD3ftTxbyU9Cnr4lh2JcOo52JVYvA7duLT4d+ht4P3rK8tf/92bE8LMZXktApk5BQBEpABUCmwSqJIyH1NIEwMNa1KXxbINUlOE4dtmLAhv5F1nKSPSPtGI/vxSLJeeEnUpHpOlEQTKXo8CvZGR+vnffI2Mk0soncCDABKD2XHd8NU+QAAAABJRU5ErkJggg=="; const propertiesDecoImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmOGVmYTNiOC1hNTg2LTQ2YzctODY5NC1mNjI4ODk4ZGU1NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDBCMTM4NDNEMTEwMTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDBCMTM4NDJEMTEwMTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkMjQ3YjE0OC0yMGQ0LTQ3NzYtODM5OC1hOTc3NGM0MGQ5YTYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3M2Q3MTQ1ZC0xYWRiLThmNDQtYWE1MS1jYzYyMDRiOTc4NDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4yAfWnAAACHElEQVR42syYv0/CQBTHixGjKaKLIYxENhM0Lji4GAeMurnozj/AIo6O4qJ/gM446KZGBuKiURdimjhJ0pEQFkVBEwb8Hj4TbA96pe2Vl3xIk2vf+3I/371Au91WhslG2U+lUhkKMdFo9FeQTQuBDbACFkAMTFHbO9DBM7gFV+DTjvMAGzLBHoqDLNgBqqD/BsiDHCiL9NCIgNNxcABeQNqGGIXeTdO3OfLV16wEzYIH6pkxB9ODfbtLvuKDCloE9zRP3DLm64582xLE/sUNiHiwmCLkOy4qaAKcgxkPVzjzfUGxLAXtg3kJ206CYvUVxCZxRuJemDEOnVHQHghKFBSkmFxBk7TpybZtim0StG5z03PLVIptErTq47m6yhOU8FFQ4l/60bXCuKbrulIoFDrPqVRKicVijts4q9vUQ+FebzOnjUajw18Ap20GC4sertKtW1C910usu1VVVUKhUOfZjTaD1XkJ2iNI+tQxT2DJmKBpPo6Uxhuyoo+CijxB15QDy7YmxTYJ+gBnPgjKU2zusmfJfEuimBYl/z3TD3ZVOZIo6Bi8imSMmqSVZZkxMvsCW6DmoZgaxWiK3jrY0K2BqgdiquS7bPdeVgLLLg+fRj5Lg95cy3ScHDpcfS3ykbS644uc9t90lZ4DJ7xx72NsPp7St1ny5Vr1o7scs2kox0xT25uhHHNppxzDDtdBBHlasAoMW0nvR4ABABxMp4w9hnbDAAAAAElFTkSuQmCC"; const propertiesDecoDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmOGVmYTNiOC1hNTg2LTQ2YzctODY5NC1mNjI4ODk4ZGU1NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RENBRDAyRTJEMTM5MTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RENBRDAyRTFEMTM5MTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkMjQ3YjE0OC0yMGQ0LTQ3NzYtODM5OC1hOTc3NGM0MGQ5YTYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3M2Q3MTQ1ZC0xYWRiLThmNDQtYWE1MS1jYzYyMDRiOTc4NDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6MRjK9AAACIElEQVR42syYv0/CQBTHwYjBUNFFmQ3dTNC44OBiWIwaFhfdNc4s4uioLvoH6IyDLqDGhbho1IUYEiabOBMWtRVNGPB7+CSkvUJL2ysv+RiSu7739X68e3fBZrMZGCQbZn/S6fRAiMnn83+CbJoEVsESmAPTYJzaPsAbeAF34BpotkfIoskgCzZBxKTPFJEEO+AL5MAhUKwEGbLQJwwOQAVsdRHDswh9UyFRYaeC4uCRRmbEwfJg3+6SL7lfQfPggdaJW8Z83ZNvW4LYf3ELYh5sphj5lq0KGgUXYNLDHc58X1KsnoL2wayAtJOgWF0FsUWcEZgLM/qp0wvaAyGBgkIUkytojJKeaNug2AZBKzaTnlsWodgGQSkfz9UUT1DCR0EJ3uEaNz1VZbldorASQVEUx22c3W0YoahZb+ZUkqQW+tqp3zadRe2c9kKtU9CnWadCoRDQNC2gqmrrtxttOmvHDrKamobziQorP+wZLLB11jlCZR9nqsybsqKPgoo8QTdUA4u2OsU2CFLBuQ+CchSbu+1ZMd8QKKZBxb9p+cFS6bFAQSfg1UrFWBa0s3pWjMy+wTqoeSimRjHqVm8dbOqWQdUDMVXyrdi9l5XAosvTVyafpX5vrgodJ0cOd1+DfCR73fGtnPY/dJWeAae8ee9ibD2e0bdZ8uXa6wfbntt0dVnTPcdMUJ933XPMlZfPMf+mUUb3JKsHB+1J71eAAQC4YppRCfko4gAAAABJRU5ErkJggg=="; const removelinkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NWRiNjhhYy01MDNjLTRmZDAtOTVhOC1lMTM3YWIxOWIxZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkQxNTE2QUM3NENEMTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0IxREFFRDQ3NEI0MTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplY2JjYzM4ZS04NzVkLTQ4NzQtOTFjNy00NTE0NjM3MTliYzQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplNmFjZjIwZi0yZWIwLTQwNDEtOGRhZC1hM2U1YmNhNWM3OGMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6bsynxAAAIDUlEQVR42uxYa1RU1xXeM3cevB8ioPISFBA1hiBisLaGClZjTJuHxrp81CKWV1dCbLqiURM1RhsRkKIGgWhQoGIFNCZiUbTCShYRGzQqkSTDCAwj74EZZph397m5Mw7DwAwuf7i6ehb7cu++59z57j7n+/Y+l6XX6+Fpbmx4yttTD5Bj7th+uPyJPfzDlFeePMBR2ky0TWjL0AIZnwCtEi0f7Z6lQWqNjv6fuv9UIK713+HpHPKber1OoNNqL3y6O+EmXutVau0wImB/yN2+fmyA7/5hCew/8S8enmagJVlYDmGMvYmWh5aGYxQ4xvSHnkFgyRPdnBPnBPuBj7cbsNks6O6TwZ0fRTsTdh2/pNVqPuFxqfOWgJLGMmexyRQTcF+gxZKH6nRW2V7NRFhFLjp7+tdwudyi12LnwsLwYGCxWCMG3BOI4OQXX4OkX7qjYNemfejSEZCmERyLJJkEHJ/HgXUvRsGzIb4jOsTNnwG/iphuuPw1E20CzsHejn/8z79fDL98LsQiOHrdBPnAXzcsAw931z3rtx5ehy4Ko8myhcWz0P5Esdnwakw4TJ7oCssWzBwGkoCbG+YPC+YEQez8UIM7kYz18nCVJ6+KKZ3m62Xs3zcwCF/f/hHq7vwE/TKF0e/u4ggbf7sQ7B2cjjs4u5FZswkgIQTlYMcDN2d7o5OADA/1MYIztMApE8GOzyWnFDMWgny9Kgz3r//nPnyQew4KzlT9M6+0quyDTypooIZGXiRk6mR4OX5bHHnGsR0bWNYALiUHqXwIii7egN7+wUc3omcNA9fRO0D3GVKqh43FVk8OV765ByfOVpU03ri+pHB/akrhvpRN4lZBXPHFOujqkxqfQ2bHztHlZYa4VgEGGU4GBhFkZT10SWQjOrV3SaAE78mHVJbGigm4onPVJcJ7N49cK88jkkIQycqO7LyuHBrKaLjfahzkPcEF2BQVzMwCa1w6OKhQgqizDzzdnIazsPkhDKk05t1ptG+nl4BcIa9vbfout/ZC4V10yYk0EqbSkWGzpSr1o7G0RvysKGxbIigwZ2t4iN+ITrFRMyyx+wE5bFm/dHJsdHjkM8/HXNu47cgbDDCjVrHZ1KLggEck6sSlolGrmm3NxZXmbDW0ppYOaHnYO4w4ZiAvk4OPl3vk66iBb66JAy8vr6PxO48lGaYvYfeJnKjZ014I8Z9kHHSrqQ0k3eLKES8yCsACNK09MnOan6fReVcghvKrt+HM5W9BIOo2+n29XA2nWib1kUZSGwRM9oCkVTHg6Oh0KOKFFa7x7xfkzJ0ZmLL2pWjj+B9aO6BJKIYvC9OrmWdYBXgHLVeBzCxGhkpQtxrwDS/U3AGSedQaLZy90oDR7IT27n6o/KrRMC6XjPV0c/YRtHWuNDineLpBaMAkePYXLxZHhAUkb1ixANiMeEukcjhxrha6xS2pGpVyCF0aU4BjkSQNLQRZHPvZ53WgUA5jKmh1Oqi4egtIpiHnTKpLo9ktbs/MLn7IX70UM1BoAL2+GpvFMHu675K1y6OHgTtUXAWitrb0s0d2nGYIpt285zPrADHxqzDxLyfpC8FZKhZAh9HEKOtMigVVR2fPOxRFrSytqofC8zXA4dZpsXKhpk5yg7UvLQAORQ0DJxAIDpZk/OUAuhQMy/U2lVtMVULeKBXtKFoCI8JBjF/IECKfWRLQ2zeQ4uzstI/D4cDm1xeDDDW0d0BKubs4gKO9HfB4PCIvdKrLKqqC5mYa3MdEydCUJHqGYmG89SDRsbdGu/lx2mpq9ZaMjeev381ZtyIasIqh/R58Hkxwd/65bMJpJeB6MSfn/KN6VHCPVbD2SGQbV/0magDLJpINRA/EPZB58pJPQ23l4FcXi+iFXXF46ynuW+nPSQaHkl9dHEEXAVycTqxOyDIALoeC2z+0wef/bgBxu2g/gstgxHtUcBYBWirTk/eeTPLznjDPcH3zrhB6Oto+QnDZjCyo/P39oaYse4t6+eaGrPbOPR6uzt4qjQZUyHhHOz6otTro6uoqFwu/P3b59OEbzJpTmcvK45b8ToSthqZQqbGA1UmYH6DTV+TKlaD8qVXP49vNnxPs640RR7Yis1hs6ENCZJdUQ/2V0m2N9TVi7G+QE91Y4MazqxP1S+WPyiMUbycX90jm4bRN6O8Hl+CFWRFhQfEEHOh1+KdHDZVDQXkNdHeK97Y03upiwKmtRW5cEdTptFcxxcWGYs1G2rxZgfDNd9NWxe/I7dVq1F9y+faUgsN9Zd6MgPVvoPbhpohEmGZrfnktPGhpyTqfvzuHzdYrTAsG843SYwMclEqO190W7I17fhbY8bhAKm2Svmq/bUr8vvlhIodioyD7QSQCJxUJyTakgs4rqwGhUHjozN+3HtBoNIOWdO6JbNxPHUjrkAzIDpZeumF8OmFlzLwwGmjCa4sganYQnSGIlJAa8uiZayglzZklme/8DcFJTdbd+L616Jk3HsuY+oyzedenx/LLavQyuZLeIlqyZlG3/r2cMv2at9OJjJA1QYSQa77XsBUXy5aPR8kfnYKj760j0eZsej/voIe7e+qiyBkQFjiJ1juNVktX1/UoPzcbhZj4W7efzt6abyLCViM3Gg6bAZJmALnij+9O95wyNZHD5cdimT4FSaHSqtX3+3s6KiqLs85K+7qlturcEwVoApLNTBuXKULZJvWghiGDTTpnDeC4v24l7T2pY4AomVQlYzZDUmZKxxU5a431/w+Y/+sA/yvAALER3BC/+g2yAAAAAElFTkSuQmCC"; const runchunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAaCAYAAADFTB7LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkNTYxZjQzZS03MDNhLTQ1NDctOTc2NC02NDI1NGIzNDA4YzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUQwMzc2MEVGREYzMTFFNjg5N0JERDhGNUU4RDYzNDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUQwMzc2MERGREYzMTFFNjg5N0JERDhGNUU4RDYzNDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MWIxOGZjOC0xNjU2LTRiYjUtOWQ4Yi02NDgyMTVlZTkzNzQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo5NzdkMjQ5My00NjVlLTExN2EtYTFkMi1iYmZjNGIzNzBlMDEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5BAxSWAAAAo0lEQVR42uzXuw2AMAwEUAy0LMBU9MxBTZahZwHWYQFqMJ+SKiJ34oRwkyaRXj52EnP3TDnyTDzkgWXK4GJoovuu7fjaCvbqWxyYSNQZpCGRSUJBorMYjmSUGSiSVQdhSGahhiDZN0kykn7VbfMSZIEH7mxMEojA0YAoHAV4x3k36QDROCiQgYMBWTgIkIlLfvJfM6wre/oNiAn7v51fB+4CDADx5DfWJ0NRmgAAAABJRU5ErkJggg=="; const runprevchunksImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxZWEwZTZkNy1lYzllLTRjMWQtYWI1Yi02M2NlNjNhOGE1ZGMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEVFRjBBN0VGMkJFMTFFNkI1MjA5MzExNzcwNUREOTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEVFRjBBN0RGMkJFMTFFNkI1MjA5MzExNzcwNUREOTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmZTkyZDlmOS0xOTRhLTQ0NDUtOTYwZS1jYThhYTg4ZTA4ZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1MTI1NTI1ZS0zOTlhLTExN2EtYjhmOS1kMTcyMzliNGI4YjAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4TKdKTAAAA40lEQVR42uzXwQrCMAwG4EV8BRFfxYF3fR4fYHspvXqZryLixYs3MXa7KUOa/KktmkIZDMY+2jRJiZmrksekKnw48OeB0/cX3bHLAqmXtXgFmzA55TydL4xscQ9sU61YwPUPQmMwCTIWF3tITJESnOQUmyClOGmagZAanCYPqpBanDZRi5AIDqkkUUgUh5a6j0gLnEUtHkVa4ayahRekJc6ymxmQ1rjRbgZBLuaz5u/6QfJLU+4YpP0G+p7XOx0w/Phbe09+q8sTg7dH4cDr3YEQkLeHqJpK7coriQMdmHM8BRgALyZkUcvZVOAAAAAASUVORK5CYII="; const searchImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZGZkN2I5YS05ZTUzLTQ2YzctYjE2Ny1lODk0MWM4ZTNmMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk5NjFFNTU5NTk5MTFFQTk0NjFDNTdEMTcyQzlDNjUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjk5NjFFNTQ5NTk5MTFFQTk0NjFDNTdEMTcyQzlDNjUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YjYxMjhmYi1iMmIxLTQ5NTctODk4MS01OGYwZTU0MjQ1YzIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiYTc5MGFlYy0yZWQ5LWNhNDItOGJlNS0yMWZhM2Q3ZmFjMmUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4uw9JnAAAB4klEQVR42qyVPUgDQRCFLyaKEKKdnQoqJIqIVhEbQ1JYKFr4V1hpIQgWdv4gaSxsBQsLwTRGOCGFIggRxUZI7EQERbAQCaI2KhZBwvk2vMBl2bvLSR58mVx2d2ZnMzvnyWQymoWiYJq2hb89gwtwCM5Vi8LhcNmzTzEnBHZARDHWQebBJVgA95qNaqTnQXBN5x9gDfSAetIL4hyLcO5gpQHEzo9AAKS4001wC/LkBmyAds4JcE3IKYAHJEAjF06CT5uNfXFOimsS9GEZIAb6wTuYA4bmLINz37g2Zhdginabu6tUYu6W5EMZIEp7rLnXieRDGaCZ9v4fAR4kH8oAee3/qqukTHOmUnWrNtoX1WDpJosLEwSjrHU3Gqa9Eh/ZbFaZQZJ2ETS4cN4Flvl93+6I0kB0vSawZ3VpJLUyc3HRHsGZXQBxaWZ5e8fZLQM2zjvBHfCb/odJp14kSnQMfIMJ8ARWQTeopbM+sM5s/aa1XnDA9l4mj+J9EGJv6Xc4okfu3Gv6rQBmgG7VrkuZDIAhsMtMfsEPx3Y5FqSzgpRJ0pyJz6aRpYmddFMVeqUgxXGPYRiuil6uc2paClI6rpEarTrSLY4rXq0AVkFyPq260vmOWAGvYKnaAYROSVF/AgwA245sdvjCoBwAAAAASUVORK5CYII="; const searchProgressImage = "data:image/gif;base64,R0lGODlhMAAwAPf/AKvV9ISoxQDK/830/z/Z/2Ky7hvR/7TT7Eex/xTn/9Dx/yWh/4LK/+v7/0Tr/3q77mrQ/8nZ5QDl/5rV/0fI/3Hc/3nk/4OnxIHx/7bw/wXP/+T7/4Pa/4u53Ay3/6PI5Wyz6Z7F5Hjw/x+8/4Ll/x2e/3rH/3ew3GW+//b9/6ru/wmv/+T0/1/u/9L6/w2x/5a1zW6p2Njy/2C8/7XR6BCX/wDk/3qu1qv2/wTC/wDM//r+/2HP/3Go0hSZ/9v6/3OdvVKGrrXp/7bg/3vX/+32/GLf/3bV/2za/0qy/6rm/wDL/5TG6wS1/0GW1+v3/wuU/1SHrzyNy4vn/1mSvZzL76TE3oO/64y84QDk/wDj/3uv1oGu0WOs5GCaxgCy/wmT/waS//v8/ff5+1WHrmCPs/z9/gCr/wC+/+/0+EyMviWT50CQzjOU30SNxgDj/wCx/1SHrleJr7PJ3G+au+fu832jwbPJ25W0zbTK3HWevlSGrV+Os1yMseDp8HKcvIyuydvm7q/G2uHq8LLI27HI232kwnOcvPr8/cra5uXt8m6Zuo2uyfn8/vj8/93n7luMsdjk7G2Yutbi62mWuMzb5l6Os7HH2vX4+tfj7LDH2vL2+G+Zuubu89fj6+fv9FaIrlaIr8HU4eXt83Wevfz+/3+t0fr8/o6vyVyNsn6kwsLU4fb5+9zn7nSdvYSoxMDT4u71+v3+/jyQ0UiLvkWNxfn+//n9/+j2/06Kufz///v9/127/3Seve/1+W/Q/2au5QCy/1ac1E+HsgDN/wHC/1OHr1mazM7q/0Ct/3ix3JbJ74Clw4vO//3+/0mh4/z9//b7/4a54FCJtOv2/bDW843y/zfq/3eozZ/B3KfA1afH4KvD17zQ367d/zzF/+/09xm7/7rP3/7//3q+8e30+e31+meUtl7e/5XL8+T3/yO9/5KyzGTu/4631tXt/3yjwT6f6pK52Lb4/4vc/2fg/6bZ/yqR4bjT6O70+Y/d/3iozY/I81OGrf///////yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4ZmE3MTU0Mi01MmVhLTQ4ZjEtYWE5NS00MjBiZjU4YTQ0ZGIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjdFNTNFMDRFNjE1MTFFQTk4MTlFN0Q0NDNENzVGMjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjdFNTNFMDNFNjE1MTFFQTk4MTlFN0Q0NDNENzVGMjAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmNWM5OGEyNy01NDE5LTQ3MjctYmJlMy1mODliYzRkZTg0ZDAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2ZTA0NGNhMi02ZmQzLTcxNGMtOTY0MC1lNWFjMDhhM2M0YmYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFMgD/ACwAAAAAMAAwAAAI/wD9CRxIcOCgOYAO8ZEjh88hQHMGFZxIsSLFMYTo9NvIseNGOoTGWBxp0UyeMh5TeiyTxwzJlwI76VFJ06OeTjBHVkpVsyfHPpVyUlwFKuUeO4IypREjJk0mTXb2pAQlSijBRGQ8xsFTZ2QdPHE8kklk1Z+iPh4pBcoZiJLHPoqEmpnZUdUmq5vs2HQJM4/HC2LK+hNzweMcmGNQcpTESrDAMZI6lhFJklBHMmsdCwyUlSOhlxo54tFMEEZHOiT9dNzTlbTAOlI5+hk5p6Mh1wQNdbwzElVHQbgHCurIaOSfjp6CC5zU8c9IxRvTKPeXRvJIOR0DKxfTUc717NO5c//0bhF6P+nKq3MsYxz5dOYcnVtk1FHT9OEci1u8Y3u6bo68WaQaR6wFV0dYspEU2kYwBGcaR6iRVMhlrbj2SGcbFfJSYh0tQplgYyzSER8f0uZRANpZJQYzhuU014klbshiR4fwBdNZHi3ySE6PiOiRHYhYhZVWeHwy0idg0RRAkEKJgiFHcdhxSSRLNRXJJXYgWNOSVkUAiU9gpsSlUKOQEqZKrsCj0pgu5mHJmRtZ0hIir6zJpFCYFMIJmJwUgslAdNrp2CB3JMRHKKE4BMgdEk0UqJh3TmfRoydGKilFlHbE5qWY1unRHgHIwumknnokzqikpsQOqql2pA2rkwYSwNE56MFKkRndwMANOLb2OmpAACH5BAUKAP8ALBsAGwATABMAAAh3AP/5skJl2r+DCBMm9OVFjcNcCiMezOawYi4gEhNSqVhxX0aE0zhWNPXxYC6RDkmWPIlSZcZe2FCqcZnRlEyaEm22LPlPp0icEX1yBKpQaEUuskoadUjDn1KU7pw+5WhFakkuFb34svrRDD552/L54/pxrNl/AQEAIfkEBQoA/wAsGQAZABQAFAAACHkA/8X60AGfmX8IEypUGOuYm4c9FkpMGOKhRVoTJXaweDGjQhocO3r8J6tHSIgj/0WhddLNjZT/WJ58mVJmSJojTc6EeaMlTo89d6YMGnKLrKEtafhDGrKDv6UjiT4M8RTmFovHYlVNaQZfhw/lnkJNKbYsTIRllwYEACH5BAUFAP8ALBYAFgAVABUAAAiOAP/F+oDlgJl/CBMqXBhLGJuHyk4tnJgwxMOLJyRSXCjtIkaNGxEe8HgxRpSQCGWdIPmwVhCU/06tZOkSpkyWbGrB/NcoBs4YIDcaq4UzI8wgRFkaRYm0aNCNPlkqk2VzJskD/qqylOYvK8qbHkN09RrylLKLwmKN3WnmAJYP5saSRSlX7k6EdbvexWs3IAAh+QQFBgD/ACwSABIAFgAWAAAIhwD/FalypZqZfwgTKlwo8FmbhyBOMZyIcNnDiyAaUWT44CJGjRsTAvD4MSRCZyBIQgQZslFKlRlN/nOpsk1MkzRVdpE58yXJWTxz/gzq0yNQnl1qAnPGc1ZNAP6aqnzgL6pMpx6XVbVqEtjFZ0W2ct1optqVKmHF8hTLluc/tlvdvoUrd27cgAAh+QQFBwD/ACwNAA0AFwAXAAAImQD/UUtHDgC0fwgTKlyIkFq8NRALNGJIMSE/iBglVqT4AGPGiRsVAvD4MWTCHQVIRgRpslFKlRpN/nOpck0BmQhpwsQ58yXJmzh1/uT5z6dHoDiNZnTGUylEJmSaqnTSr59Uj1KqWk2K8d4wra5wQmPiRMrXqpAU+cMZR2tVMon8rcXplgwsuXPp9oMUAW9enKRG+f2Lc/C/gAAh+QQFCgD/ACwKAAoAFQAVAAAIkAD/4WKAYsKufwgTKlyIq0SYh0kcLZyY0MTDiwgkUlzI6yJGjRsRTvD4MSTCUghIPsxo8p+jlCpZmnypMozMkDRjgtyYk+RNnjB97qTY0+NPokE9JinVsujFCf6aJn3Iy1/UmVNNWL2KM8nFErisPmr5b9cEFAxYWB2ziOy/rVbFBOjn9u3auXTr+nu0qB/dgAAh+QQFCgD/ACwKAAkAEgAUAAAIgAD9+SvFYcQIDjsEKlyokAich3COMJzozwNEOMFkUFxo8SKFjQp5XHwoBKQ/dU1GrksIksNIOPRMphgxskkDk0pe8jDp79vIYApMKgg28htPCC+VmGyQ8mK4FCb1veRgcse6mupMCtHJk0JNnjKIQvTA059DiETKOuOw7mApgQEBACH5BAUGAP8ALAwACAAOABYAAAhUAP0J9GcLSY4cSGwNXOgPCZqHaCowHJgDIppiEwVafJjR30Y0HT+G3DjSYkmIJzlmFLmSZEuTL1HGVDmRZU2XN2HmlDmxIkSMGR1ClJix4MGECwMCACH5BAUFAP8ALAwACAAOABYAAAh8AP0JHEiwoEF/ujAkSIBB10F/It5IfCPi4I8sE99IOOgg45ssBud5fNOioK4EHrNsKGhtJIaCDSR4TJCiYLuROAq6GHltXMFrI10UxDGyJMEUKDNmaVAQw0hrBTdgzJhgh82R8wzKzOjg4FaJWYQajDix4sGECxs+XFswIAAh+QQFBgD/ACwJAAkAFAAUAAAIgwDF+BtIsKBBggIPKlzIsKHDgRuMENNgodTDFCR0CNgogIRDFQY4cjTAcAABkSJJHmxQbwlKkR4L7phC7CXHJRZ2FMwQ0uZGAi4K/jjpU4CBDAVLWXDpk9gUWwZJFBVgpIHCni8JDGCIdaQKh1I56iCR4qFSDTrQbXjItq3bhG79iQkIACH5BAUHAP8ALAgADAAWAA4AAAhBAP0JHEiwoMGDCBMqXMhQ4a1fL85InEix4pkXvx5a3LjxSESOICW+WBEy5IpfJUFCuAWBZMqJK1Y2nEmzps2GAQEAIfkEBQgA/wAsCAAMABYADgAACHsA/ZUyUcIHChb+EipcyNAfgzAQw9RgEK2hRX8LIkZc4O0iw4waIyZD5jHhw5ARoaB44nEgGJQRfTTb5fEdApgQwSwYUnIISJwIZHi81cwHzjBQTJTy+GTGS5wMSvpDlgznAqkJ7ZVAeRWrv2gMamiM6jUhC141fCj1FxAAIfkEBQoA/wAsCQAKABQAEgAACHQA/fnDxQDFhF0CEypciKtEmIdJHC2cKNDEw4sIJFJUyOsiRo0b/U3w+DGkv1IISD7MaNJRSpUsQ7pUGSbmxpkwQVLESdLmzpc9dU7k6dHnUKAek5RqifTiBJP+iD7kBTVqUxNVoya5WAJXVn+7JqBgwEJgQAAh+QQFCgD/ACwKAAkAEgAUAAAIgAD9+SvFYcQIDjsEKlyokAich3COMJzozwNEOMFkUFxo8SKFjQp5XHwoBKQ/dU1GrksIksNIOPRMphgxskkDk0pe8jDp79vIYApMKgg28htPCC+VmGyQ8mK4FCb1veRgcse6mupMCtHJk0JNnjKIQvTA059DiETKOuOw7mApgQEBACH5BAUHAP8ALAwACAAOABYAAAhUAP0J9GcLSY4cSGwNXOgPCZqHaCowHJgDIppiEwVafJjR30Y0HT+G3DjSYkmIJzlmFLmSZEuTL1HGVDmRZU2XN2HmlDmxIkSMGR1ClJix4MGECwMCACH5BAUGAP8ALAwACAAOABYAAAh8AP0JHEiwoEF/ujAkSIBB10F/It5IfCPi4I8sE99IOOgg45ssBud5fNOioK4EHrNsKGhtJIaCDSR4TJCiYLuROAq6GHltXMFrI10UxDGyJMEUKDNmaVAQw0hrBTdgzJhgh82R8wzKzOjg4FaJWYQajDix4sGECxs+XFswIAAh+QQFBQD/ACwJAAkAFAAUAAAIgwDF+BtIsKBBggIPKlzIsKHDgRuMENNgodTDFCR0CNgogIRDFQY4cjTAcAABkSJJHmxQbwlKkR4L7phC7CXHJRZ2FMwQ0uZGAi4K/jjpU4CBDAVLWXDpk9gUWwZJFBVgpIHCni8JDGCIdaQKh1I56iCR4qFSDTrQbXjItq3bhG79iQkIACH5BAUGAP8ALAgADAAWAA4AAAhBAP0JHEiwoMGDCBMqXMhQ4a1fL85InEix4pkXvx5a3LjxSESOICW+WBEy5IpfJUFCuAWBZMqJK1Y2nEmzps2GAQEAIfkEBQcA/wAsCAAMABYADgAACHsA/ZUyUcIHChb+EipcyNAfgzAQw9RgEK2hRX8LIkZc4O0iw4waIyZD5jHhw5ARoaB44nEgGJQRfTTb5fEdApgQwSwYUnIISJwIZHi81cwHzjBQTJTy+GTGS5wMSvpDlgznAqkJ7ZVAeRWrv2gMamiM6jUhC141fCj1FxAAIfkEBQoA/wAsCQAKABQAEgAACHQA/fnDxQDFhF0CEypciKtEmIdJHC2cKNDEw4sIJFJUyOsiRo0b/U3w+DGkv1IISD7MaNJRSpUsQ7pUGSbmxpkwQVLESdLmzpc9dU7k6dHnUKAek5RqifTiBJP+iD7kBTVqUxNVoya5WAJXVn+7JqBgwEJgQAAh+QQFBwD/ACwKAAoAFQAVAAAIeQD9CRxIsCDBMZIMKlQYaKHDhdTSkQMA7WFBavHWaCzQyOJAfhpDcvTo70FIkR0tAjiJ0uKOAiw3pnTYCGbMkQ9rxlyDk6ZNlj0X6rw5U+jPk0EVDgVaVOlRkc4sLj3JxONUjU5IXpUyRuvPe8MWPSIJjYkTKcP6BQQAIfkEBQYA/wAsDQANABcAFwAACI4A//kbOPCfwYMIExokyFChw4MMGz5UGFHiRIgVCV7EyLBIlSvVzGxcSLDIszYoQZwaKXDgMpQwQbBs+QBmzJn+ANi8ydIZiJ0pZ/77CVTmTKI7QTQ6CrRNlyhMgc4KEnXn1Ko2ZwFh2ahLU2DOWBqb1RTAzCBkdz4QinbnMqH/egGD+awI3H9mql2pYjcgACH5BAUFAP8ALBIAEgAWABYAAAiOAP/5Gzjwn8GDCBMKJEhQoUODDBk+VBhR4sSDEWN9wHLAzEWIBGMJY0NS2amPC/2FIMnyxMmPA6WxbPnyor8DM1nGQPlP1omcJGvxPPUTqFCURIGyOYoyhtIYNS/WUuqS51SgVVFezZn1o1OgymQhLZrzwFCyLKXx/Jd0Zoi1bJWxFBYL7j8zB7B8MPcvIAAh+QQFBwD/ACwWABYAFQAVAAAIiQD/+Rs48J/BgwgTElyYsOHBhQwdKiQY60MHfGYkIqR4zI3HHmQ0GiQYwqNJWv1ECvTXweTJlCL90XB5UuU/WT1ofkSkMgotnW5u8BTZ76dOoSqLAkWqMufRoRoR3VgKVaJUqiqv6twiK+tUnTRsanXZwea/sR5DmD27xeSxWGv/mcHX4UO5fwEBACH5BAUKAP8ALBkAGQAUABQAAAh+AP/5Gzjwn8GDCBESHPgoocODBH1ZoTLtocOBvryo2ZjLokJ/2TaK7OhR4CMqIkXuK/kvzrSUIk2x/JcL5kaZLGvaxFkSm001PD2a+hnU4tCdM4/CNIWIpdKUTJ3+5CJLqk0aSW26m4noqRorM/8h4iLSi6+w/8zgk7ct37+AACH5BAUyAP8ALBsAGwATABMAAAhwAP/5G7Oo37+DCBMm9CeGWb+HCiMeHOPw4cNDEhMWtPjQTkaEHDkG+HgwpMWRJE0+RJnRFTyVLDO+gkny30yTMSXeDJkz4k6RNX+eRERSaL89AWQVVSkuqEl2NW2G1BYVUQCL59JE/WemGwxu4P4FBAA7"; const omniInsertGenericImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk5NEY3ODRBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk5NEY3ODNBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTllZjExZS1lZjQ2LTQxMDMtYjEwNy02ZjhiYjAwZDg3OTAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4tuXxXAAAAeElEQVR42uzZIRKAIBAFUHC8lscwWTyaxeQxOBgaDEaa7PD+zAYab9jdQq61psiZUvAAAAAAAAAAAAAA/Jf5ezjOq+vL7tva9ALlqdpZlegtlJta6M1iiAEGB9hCtpAhBrCFbKEwyf4HAAAAAAAAAAAAAIYF3AIMAMlpekFYUthNAAAAAElFTkSuQmCC"; const heading1Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0M0RDYzRjg5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0M0RDYzRjc5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4rHykJAAABA0lEQVR42uyZ0Q3CIBCGOeMAHcF3XlzAFDdzA1fQSVrDDLx3BDfAa8JDY1Co2pTD/5I/pA2UfrnjOFry3ivJtlHCrS4AIjIs/6RTzoO4XxcZq3IFDwAAAACQaduV5jWsPasJ1y2n0itXBRcpAF3k3m0pD7SZm9luxrzH0J6DJxYNIRP0S+tDe8cizugzBKVsuiiLAhizQ3INjMXcAqGGjQwAAAAAAABQNwBNv8zxbtpEqsOB+yRLCR4bKyX6GeVH1jxvARBCAPiiGnXOiXlprfVLD1iWL1hWeghR6kBzwCIGwJ8D2JIyjDQPfPSfCVkIAAAouxay0j1A1WchHCnXtocAAwCBsqK0C+rTzQAAAABJRU5ErkJggg=="; const heading1DarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5NDU1QzQ5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0I5NDU1QzM5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Mvr0uAAAA/0lEQVR42uyZ0Q2CMBCGe8YBGMH3vriAATdzA1eQSdB0hr47ghvUmpwJKQq1gdCr/yV/SAilfLm73rWQc05Jto0SbsUBNF4u0CnyXV04lohUrOABAAAAADJtu8akvvq/luu9V8W3aq/W6yICgGtGaLelPFBHFrPdD/Me+XpmTywaQg1rNvOV98qh9EASRzxzZ01ZPymzAmgjc6CbO9RQyAAAAAAAAADFA1BwMld96A6TW4l30zayL+iPiZ1nFAAhBIDUbtRaK+ajtdZfPWDU8Gw0JxnpIURTG5oDkhgAfw5gclphpHkg6T8TViEAACDvXshI9wAVvwphS7m2PQUYAGkNn42mH5EBAAAAAElFTkSuQmCC"; const heading2Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0M0RDYzRkM5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0M0RDYzRkI5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5yNHH4AAABfElEQVR42uxY3W3DIBA2VQfICHn3Cx0gUrJBskFHaDZwJ/AIyQbJBkbyAO2L3zNCNnAPCUunawwOhgTa+6RPEQYEH/fDEdH3fZEzXorMwQJYAAvIHK+4IYSoUPMCKfY4NhHGLuHnHX1Shl7wTud64kDdRGxwHyVgTcZXc07StpaNHAMWLIyLHYBf1LrADzNmHiK6UEX6b1ELkym70DdwD3zTcW+4M98Ls/k6VQvY3IPOlSla4GrpU3eInX4PEEjI9Y0jSH2xJO1LDAELY+oYqIk1ogi4omAbEyg91tRpdYvW2KUaxGOb/5VCc7mJD6h2OgM3DgvPdqGQN3KDTvtzbt30SAF484O/q5ALxBZwQicfxGUeKaBGaVg50rJKUYAkpYPtThH8pER+OqWWGSrNjaUc2Aep9x0Q/NciCwgUA13XZbPpsixHLdBOeMc+k23uLiRcaXTFQcwC/rmANqUMk5sFvCpSzkIsgAWkXQu1uVtA/PksxE/KZ+NHgAEA6e/1MvhAOBsAAAAASUVORK5CYII="; const heading2DarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTI2NjVDNzc5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTI2NjVDNzY5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz66movGAAABkklEQVR42uxY3W2DMBDGVQZghLzz4g5QiWzQTNB0g2SC0gkYId2g3YBIDNC88M4I2YDeVY50srCJbEPs9k76FMAG7rt/IoZhyFKWhyxxYQJMgAkkLivtvCLHPeDDcu8asCPnJyHEyVUR53KONxJQabQ1HaW2v/Kx5MS7jOAcsFg0B+wAR8D3iHf3uCd0DoSUPeDNsFYqvACJV8idc6xVCBU7AB6FEjjequsoElBnAZMnWBLbwmPkXhldEoOxL5Y1vdzmc+QAurexrOceXl9rl/o5COQq0eaQWmuAvWsjsxG4kGQzEZQO1j/CzzN5xzbKJDYpT/Zjb5DJdGJl+evs9AXY+NT/JRoZLacNCbd3ULwK9fzVgsr/xrvPxHoPD3wSywcJmcUIgPVrUobR6jjclTc2tig8IEeGN2Nz5k/Ka5xqjWxq0txYxoGDz7hx88zFfy0ygUA50HVdMkoXRWH0QIslPGK0qYeQmCqjT5zETOCfE2hjqjCpecBpIuUqxASYQNyzUJu6B8Sfr0L8SXlv+RFgANZJRw8KZDBWAAAAAElFTkSuQmCC"; const heading3Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjczNTMwQzE5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjczNTMwQzA5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz42Krv6AAABiklEQVR42uxY3W3CQAy+qxiAEeA5LyxQqd2ADVAnQJmAbEA7QbtB2wlAygDwkmdgArJB8AlTuWmuAeSDM9jSJ6LL/fCd7c8GW1WVkWwPRrgpASWgBJSAErhvAsZVYqzGA8CMwGeN88g+Q8A7YOGGCRY43jvM5QA9+Kl2oM8a55F9ZrX3dWzdJXARCBFC34AXQB8OsA7w/AxY4/sueoI9hFg84HX1PrR+1sXsgWOslKhCY/L8xrVppyVUfCr0r1lre05tyPwRWfcKrs8ukQPH4k8OgGUe9RlySmjIHHCKM0eURH0+wTvTUIUsmArhmi1Zk4lSITjIeSIlQxPwRFeUCgGJj1PFICoCXDcenABKaJPR5C0xrILWgXNtBSSW8OmwwbERqQsGeyUTK4FDfA88LUQKt/8VgsASu8Y2a5vX9xCYc4XNr5DVvxaVAFMOFEUh5ksnSeL1QH5mR3op5NJDyLbVgUdNYiVw5wTymBRGmgcsRzeqKqQEVIUi732kecDevArpT8pr206AAQAawGQVQVcDngAAAABJRU5ErkJggg=="; const heading3DarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTI2NjVDN0I5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTI2NjVDN0E5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5JcfabAAABbUlEQVR42uyY303DQAzGY8QAHaF9zksWQCobZIOqE1RMQDYoTAAbABM0UgZoX/IMTEA2OBzJkawoTiJyJ87gT/pJbeKc+sl/7lJwziWadZUolxkwA2bADJgBM9ApQ04dAJAMIcUx5cgTckYc40zX114dtEcJYuuYRuIH49g6JzeuLyRj8YsIUUJvyB7ZIEDcIh90f0WZiDYDEnkvE9FmYI4ajVPowD4/+lr0eqxUhFvZjHXXbNq08Tv23ANSBO+BuRJ6oBCmT+6r9kP3QDtxSqJh0+cFOca+DwyxpQx0KrRNoTYTd+z7PWVE1RR6/sEwiMrAKsSiIQxIh7VjbyMrg+4DC/SOXIhPurbrGdsH38gWKhNqvKFmfg1h4EKnxilNxW0EA6WvsuEC+2vRDHjqgbqu1fzoNE3FDFS9F/HYqLSXEEztAzfWxGbgnxuoYpow2jIAPk6jNoXMgE2hyM8+2jIAf34K2Svlb+tbgAEAanbJtxqAB8IAAAAASUVORK5CYII="; const heading4Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjAwM0Q5Q0M5RTc0MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUVBRTU1ODI5RTczMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDg4YTdkNC1iOGMyLTQyZjEtYmNlMi01OTRiMGMyM2IyZDciIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6s34cNAAABbUlEQVR42uxYyw3CMAxtEAN0BO69dAFE2QAmADaACYAJGAE2gA1A6gJcemeEblBeJEeqQkrFp20MfpKVNnGDX2I7DqooioAzegFzCAEhIASEgBD4bwJ986CU+mgi+0THfCGaPSSkrhV0ro0RaABHSFJ6D9m4EFZ/YxnfSgzMIWeS2KFbN26Mn6BZ0+uptRgABqVVc2133bg2Pia/11jQNxMWWcgK2gMC9sAtje7Ita4wfsHtHFhSjOSQaSfngIWZI4uMKnRjWn2NKVb/5gOB+QtznKnVh1SCWEgqSM/0GAhu2iCwIoPsXXERC0s7ET/5LfNtKwS08RerLwk8xDeCWBdRCq7xIOjflvTG1CfVqBDwCcrU8UhxA6pdTBDnjlqoctz1D589J3TyxgiIC3V9pcyyjJXhURT9ZhZKdTx6LCn3GFB1tdBQspAQ+HMCqU8ZhtsOvHVXkCwkBISA37VQyn0H1M9nIblSdo27AAMAhLPKnh5WTKkAAAAASUVORK5CYII="; const heading4DarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjAwM0Q5RDA5RTc0MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjAwM0Q5Q0Y5RTc0MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyNzRhODQ4NC0zNzc1LTRjNTEtYjRlMy1hMGU3NGMzNzUzN2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4GhoT6AAABW0lEQVR42uxX0Q2CMBBtjQM4Av/8sIARN8AJwA10AnUCR9ANdANNWIAf/h2BDfCaHEnTFImaQg/uJS9tKJC+9u71Kuu6FpQxE8TBAlgAC2ABLGDaAuZNR0r5148sJ/oCeMFWYQ8snAlwgBswNgSRCaGjMXn3OQAhkAEfyMgSIh/HNSTAA/bvveUAINBWzbbdXeMKEca9wha/Sai4kJ60VyQpGz3jDhS4+nTOAciJHTQZsAJuBjkHDKQwKdNFVi2Tj3D1BU7+5YOA7It/PLAtMMnjFtEpjh37EGA7NdMWYQvNgT7Za6adEc4FFFBaPI1QiYWH+DuJJUJ1LTxpr67xGVejLMAnSK2OD5BNEldGEneNi5b6KdBstnIpgENo0CtlWZakJh6G4ThdKFf56DFz6jkgu2qhJbsQC5i4gNwnh6G2Az/dFdiFWAAL8LsWyqnvgBy9C/GVcmi8BRgAkFbNjxCh6DsAAAAASUVORK5CYII="; const bulletListImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjczNTMwQzU5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjczNTMwQzQ5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5sG5gfAAAA5klEQVR42uyYsQrCMBCGe9I+TXafo0M3R32NOlgcfBEnB5/DPfoqgkO8wAVCqA6Kctf+Bz+kIYV8TY8PQiGEynItKuMFAAAAAAAAmDdAnQZE9HahVmOXJ9BwBs6Vc5NxY+IEpHrOOnuO4ztnnya893/ZmHPuI4BuZM0qB5A6c5Y/2vuF01puYvrmFzpxNsXcceS9VmsPDPIFugzoYKmJH9LIPUQGgJkCTN/E2gFgYpgYJoaJAQATw8QwMUxsyMSUbtzkZi427LYw8S4KTuvNXAnwsrQC1No3CBMDAAAAAAAAJg3wFGAABoJDnIH7pgoAAAAASUVORK5CYII="; const bulletListDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTI2NjVDN0Y5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTI2NjVDN0U5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4TQNV+AAAA0UlEQVR42uyZMQrCMBSGG7Gnye45OnRz1GvUweLgRZwcPId79CqCQ3yFVwihU0XJK9+DH5KQQL7SxzfExRgry7WqjBcAAAAAAAAALAqglvSSh+Sp47pkgHU27yS7ZD6MX5LTuBBC+MvFvPezANqJPdsUQOsm2fzo7ndJY7kH3De/0FWyz9YuE+eaUnug1y/QJkBnS0381kbu8AAAmHihJi4dABNjYkyMiQHAxJgYE2NiQyZ22RvZ0LCHzMRHFVyR5XjkAwAAAAAAAAAA5tdHgAEAzSI3m3N0x3oAAAAASUVORK5CYII="; const orderedListImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5NDU1QkM5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjczNTMwQzg5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6CdTepAAABbUlEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoB0a2B1iwCUpJScUAqWog5gdizWfPnn0cMh4AOr4LSMXg0nD16lW6OExbW5vsGLgExFOBWA6IfXHo2wDEZjRy+ykgDiA7BoDJZQk0JmYOUKpgpDgPEAECBkseGC1GBxowktqhGWyl0GgSGowVGajsrwJieahQK7BonTqUYqALWh9IAanNoCYF0FO2QyYGgA7XROIKoNGDribGmQegNTEo5B8C8aEhVRMDHb8SyfERWFqjg7cmxuL4h0OtGNWD0qBS6DjQQ8+gJdOQzMSjFdmoB8ioiUHdyWykmrgM1skZKjEAcvhhaE0M6l52AT0lP5QycSuaEKgO+DBk+sRIDTpYn3gqnYdVSKqJ8XZokIZY0oGe2Dzoh1WADgYNZIEGtOSBDg6nxOAB61ICPQEqgXIYIKNyg74/wDg6yTfqgVEPjHpg1AOjHhj1wKgHyAcAAQYAkdxwaOAdRQAAAAAASUVORK5CYII="; const orderedListDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTU2NTZBNzg5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTU2NTZBNzc5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6pEd37AAABQ0lEQVR42uyZsQrCMBCGrbjX2UFnKTi6+QgFNx26O/gIzi7dHdxd3IS+gQ6CY6E4uzjrE9QLXKGEKLXVNgf/wU+aQiFfc5c/aZ00TVuSo90SHgAAAAAAAAAAmCIgXUl3kmszQMdwL2QAYyRJUsvAPM8rDRCTNqQ+yX/z3IE0/tPYL6RplRnYcbttKCucqilUJKa2FzGWURsAFqQe6YkZAMB3AGrtP7MLKy2lAYTcqvyPSCvSRNJWYpi77mqtdU78qQa2/OZvpKM0J97nBj83LKVWO7E++Ju0Ih5xO8itRr7UIoaRAaAEQKA5cSANQBXviZ04ZmceSCritdZXHvCQ5sQ+p8+Iz8h1ngl+4sQRK+TdaMx965xYB3B596lyfmZ6oOj3mqYAnrx1yFIoq4nI1iJ28JMPAAAAAAAAAAAAlI+XAAMA8xY9SX7X9MMAAAAASUVORK5CYII="; const blockquoteImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5NDU1QzA5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0I5NDU1QkY5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5sO5FPAAABkElEQVR42uyZu0oDQRSGM0ZBEgX1DaxSBLtAWltbS2tBEBsLGx8gYGEVUqW19xkUVBBfwMbCwsLGyoAXXP+FWRiWnd1zsucIi+fA1yT7L/NN5kpckiStJtdCq+FlAiZgAiZgAiZgAiZgAg2uxfwHzjn2S9Ij+bw5cYGCWgab4AM8g2/iu+fN8XshJKgumIBZ+pjnDZyBTklPsnJ1iQksgeugAXnuwWqBADunJbBf0oiMiwIBdk5L4JLQkB/Qzwmwc3WJLaPrhOmTLjt7QjnxfeCJmO8L5cQFpv7nrqoNoZy4wB04ITRmJpRT2cjOwQM4AD3wBdpgEDzzIpgT38hiE/A1WFGOiEeCaE5rGY3Vmu/RrCE9okA0p7WMxuowGHZX4FE5JzqEtv3BLNuMhsRTZWnur4bQLngPhsCIeCyuzGkLrICx77n0y09w6idlmQA5pykw9Of4rPduwBbhYsLKaQoc+wbcgh3GzYqV0xRox3quQoCVq4vLj9+m3Ymd/UdmAiZgAiZgAiZgAv9Y4FeAAQBvfbkSUuJTkgAAAABJRU5ErkJggg=="; const blockquoteDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTU2NTZBN0M5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTU2NTZBN0I5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7wOoUKAAABZ0lEQVR42uyZvUoDQRSFM/6A+IPoG1gJBjvB1tbW0loQxMbCJg8gWFiJla29D2CloILYWdlYpLCwsTIQFcczsOAQHJ29nkEWzoWvyp5hvs3svQnrvPetJtdQq+ElAQlIQAISkIAEJCABCfxfjWRcMwbmQB90wXvm2tZcvQp/aBJMgCPQ81/1DPbBeIGcidQHo+DCp+sGTBFzdIEN/3udEHN0gdOMjXyANilnJtWFZjIeHwfWSTl6G33IzLdJObrAcWhQGflZUo4ucA12MzbTI+WKDLIDcAs2wTx4A8NgKbrmkZijD7LvcOAp6ijbhXPmLpSq6YFOc1Y4R/8xtxUdu3NwXzhHPUIroB8No+XCuT9N4kHWwEt0hvcK52gCk+CwunOhXkGneihL5KgC4avuRnfvEixmLGrN0QV2qg1cgdUai1pzJtwPb2jC8FkAdzX7gjVnKqdXTBKQgAQkIAEJSEACza1PAQYAq/Ivr+JOanMAAAAASUVORK5CYII="; const mathInlineImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVCN0Q0RUM5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVCN0Q0RUI5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDg4YTdkNC1iOGMyLTQyZjEtYmNlMi01OTRiMGMyM2IyZDciIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7feN3EAAAB+ElEQVR42uyZOUgDQRSGs15YqHijIgY8EE2hmNrKyk6UVIIIgmBlK6iVrdjZaSNYpREEBQuxsLHTIoWFoIURoxFNIV64/gNvYRg2m03WkBd4Dz5mdics79+5/tlYtm2HyjkqQmUeIkAEiAARIAICRZVTSSQS7JONRCK+eiAGUsBmQhJM+h1C1WAHtDF68Z1gN585YDEcPZZfAd9gATwySv6ecvKexFrEifJahZyYis0GfuhBfL90AnJEJWjwaH+llYOFgB6wAsZBGNT7eF4jeOMgoAacgj56q3XgV0suW098crES01SOgCawCq5AMxGl9jNa4hw+Sj6JnV0bTIA7ulZvO621t1CZ5mrm1rXkVbSCZ+26ncoXlxXov61IXlYiW4xSUvr2ruLJSL4YViRvK2FGFxgzeiDsMYSKYUWsIAJi9Lukdi/qJgCbYDGsiKeVyCVALZdLVNeT6tc2LnMnVzakw1idgtANjgoVsAgGqW5Oan0oqZjjdqQcAltU/wI3WluGymXaK4bBDDcB86CW6ifgXWu7oLIXXKoTqXaPjYBzsgYq8Q2jbQ3cUl1ZjD2wycJOa3FIhs4213vENRigCZZx29C42OmUR9uP1gt8DjRkBbYZHewfaB84lq8S8lVCvkq4dI38yScCRIAIEAEiQASIgMLjT4ABADQhm0ULI9zKAAAAAElFTkSuQmCC"; const mathInlineDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVCN0Q0RjA5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVCN0Q0RUY5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDg4YTdkNC1iOGMyLTQyZjEtYmNlMi01OTRiMGMyM2IyZDciIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4E31EtAAAB8UlEQVR42uyZO0gDQRCGcxrFQsU3KmLAB6IpFFNbWdkqaUUQBCtbQa1sxc5OG1tLQcFCLGzstEhhIWhhxGhEU4gvPP+FCQzL5bwzRicwAx+7d3uE+W9vZ/+7OK7rRso5KiJlHipABagAFaACiopovpNKpcQnG4/HA81AEmSAK4Q0mAj6CFWBTdAq6MZ3gK0wa8AR+PQ4QQW8g1lwKyj5a8rJfxGz2CHKqwr5rfSw8ZcVLRry+kpQ7zP+SJVDhIBusAjGQAzUBfi9BvAkQUA1OAS9dFdrwSdLrtBMvEqxEpPUDoNGsATOQBORoPEjKnF5Xv59EefXMhgHV3Rs7naWjTdTm5Vq5lZY8iZawD07bqP2waMC/bYVCWUlCsUIJcW3dxN3VvKlsCKhrYQdnWDUmoGYzyNUCiviFCMgSdel2bmElwBsgqWwIr5W4jsBplzOU58n1cc2LnsnNzak3apOxdAF9n4qYA4MUN9e1PxRMjEt7ZVyEKxT/w1csLEctQu0VwyBKWkCZkAN9Q/AMxs7obYHnJoCxM6JEXBM1sAkvmqNLYNL6huLsQ3WRNhpFrtk6Fy73iPOQT8tsJzXhibFTmd8xj7YLMh5oSErsCHoxf6G9oF9/SqhXyX0q4TH1OiffCpABagAFaACVIAK+Hl8CTAARE6bxIgaUvEAAAAASUVORK5CYII="; const mathDisplayImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0RkM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ5MUI0RkI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7lxtDfAAAByklEQVR42uyZu0vEQBDGL76wUPENinjgA9EUildbWdmJkkoQQRCsbAW1shX/Am0Eq2sEuyvEwsZOixQWgld44OmJWogvjN/CBIaguYh4mcAM/NjdzBH228fsZM/yPC+VZKtKJdxUgApQASogXqvxK67riu+sbduRZsABReAJoQCmoi6hWrADOgQNfBfY/c0esASuHiuqgHewCG4Edf6a+hS+iZllCQ2jFQ2jvk07c39+6UF2Pz4BZawaNIX4Hyj0iRDQC1bBBEiDxgjvawaPEgTUgSPQT6PaAD5Z536aiVcpm3iGylHQAtbAOWglMuQ/phjt8xL7JvbTDjAJ8tQ2o11i/jYqS+KiENlGoN0O7li7k8r7pJwDY5Tg8fzE2G0SBHSD8cAMpKUsoSgCHPpdgT3LJEWACZfLVOcJ3gA7uEQLWAJDVM8HNjVfSsbmpQkYBttUfwOXzPdE5QqdFSNgVpqABVBP9Rx4Zr5TKvvAmfmkZs/ECDih1MB0fDPgWwdXVDcpxh7YknSQGTukhM77Jt5fgEHQQ8sptgOtXDpdDPF9sFmQk0pU8mPkv/aA3gvpvZDeCyXoXsjSfylVgApQASpABaiAGO1LgAEAajeaste9Eu4AAAAASUVORK5CYII="; const mathDisplayDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2NkY5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NkU5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz70cgaEAAABwElEQVR42uyZu0vEQBDGL3qKhYpvUMQDH4heoXi1lZWtcq0IgmBlK6iVrfgXaGNraWchFjZ2WqSwELzCA09P1EJ8YfwWvsASNCbNZSIz8GNnM+HYL7s7O+w5nudl0mx1mZSbClABKkAFJGtZ33FdV/xg8/l8pBkoggrwhFAGs1GXUAPYBd2CPnwv2IuzBxyBq8eJKuADLIFbQYO/4ZjCN7FlB0TTaE3TaFiqimu1TMnZmO/Xg9aQ+CNTnwgBA2ANTIMcaInwe23gSYKARnAMhvhVm8GXNbjfZuJNyiaeYzsB2sE6uAAdpMD4CXO0z2vim9jfy2AGlNg3X7tqxTvZVsVlIdpmoN8F7q1+D9uHtJwDkyzw7PrE2F0aBPSBqcAM5KQsoSgCinyvbD0rpEWASZcr9O0Cb9g6uEQLWAaj9EuBTW0vJWML0gSMgR367+DKij2zXeVZMQ7mpQlYBE30j8CLFTtjOwjOTf1mPRMj4JSlgRn4ViC2Aa7pmxJjH2xLOsiMHbKg837I95dgBPRzOSV2oP1VTldCYp/WLMgpJdJwP6T3QnovpPdC/+heyNF/KVWAClABKkAFqIAE7VuAAQA7zJsxG/IKEAAAAABJRU5ErkJggg=="; const htmlBlockImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDBFMzlFN0Y5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDBFMzlFN0U5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YQPSwAAAB1ElEQVR42uxZu07DMBRtItgZQAIVwcTUshB+gIoOfAAjDHRhBn6j7CDoACO/UMEPUBaSCSbEsyDBzhBOpFPJsuIkFOHE0rV0dKP6xjnnXt/Edr04jmsuN7/meBMBIkAEiAAR8Kc2MbqIosgJwo1GIzcDm8AQiCuEZ2CjyBSaBE6AmYoFfg44LVoDXkVnj1dEwDfQAd4qRv6JvMxFrLQLQl6jTghoNpuzzgoA+QWYF9jb0j9kOUSnYLrAfhiGX0rXqlJkWX7lZYCk+sAOcKR1r9Be0x7Tr8/7yhWgkA+AuySymssoAze0e8A9/a2I8H9BvoVp8ai5BWoG2L9Gfysi/HHJw2cRZhr4QN/D6Hf6tWyJ8MeMvBr9gd5hU0RaBrp8aLIK3DKQTyvgNBHbHCfguFYEHDCqyeLpHJGrG+7VC1jP5DzMGccZcNz/F4DIfcK0+dAl4MogIjBlgOQveX8yTpvj2iliPmzdJEIp4He1gG2Tz3yN8ktqEhGkTR/b5HM/ZCkiDnOmT9cm+UJLCUVED9jNygD7e7bIF17MUYS6I6qnZYCkO5VfToPocrLR1gvYqf0AyL9WdUcm50JyLiTnQg6dC3nyN6sIEAEiQASIAJfbjwADAGFgC060in8aAAAAAElFTkSuQmCC"; const htmlBlockDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTcwRDkxNzQ5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTcwRDkxNzM5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5jFJBaAAABy0lEQVR42uyZP0sDMRjGe4fuDgpKRSenw8XzC1js4Adw1MEuzurXqLtiO+joVyj6BayL3KST+F9Bd4fzOXiEEJK7s2JM4A08vIWkyfNL7r0maZTneSPkEjcCLwIgAAIgAALwqzL2/SHLsiAMJ0lSuQLr0AuUe6QHaK3OIzQOHUFTnk38DNSrmwORp09PVAfgE+pAz56Zv6cvexIr5ZSS12gQAHitTQcLAPNzCI+IV14DwOAE1CuiVrWsJFlZu/8DoJkBtAUdaNVLjBeMh2w3cAUR1zSfQtfQrmUFLhl3oBu2dwIR/8B8C/ulO61Zqq4A61fY3glEPKp5tJlHmITeUHerbAqLdi1XEPGIM6/O/lCvcAlhWoEuBy12gRsW86YENkFssp+U/ToB2OOsFpunE8xc0/JdPYH1lZxFOGY/Q/b79wCYuXeENgddgM4tEKltBWj+jN8v+mmzXzdJzMFWbRBKAr+qCezafOlrFIN+lECkpsfHtfnKHzIDxH7F49N1ab7WVkKB6EPbZSvA+r4r87YDjQ1CPRE1TStA0x3vt9MwulgctPUEDuo8APNPvp7I5F5I7oXkXiige6FI/mYVAAEQAAEQgJDLlwADAOLvBdKwILkPAAAAAElFTkSuQmCC"; const lineBlockImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTcwRDkxNzA5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTcwRDkxNkY5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Dkbw7AAAA1ElEQVR42uyZQQrCMBBFOyquvEmuoLcSPIELwVvlDDmJuBEkjpCVhqatrc3QN/AZCF30ZZo/QyMxxsZyrBrjAQAAAAAAwLIBNrlFEfla++zYIYRZX9w5V6zAWXVL2eQndFLtVMeWZ/y7OH+U7wOwTnlb0YZLpzPQIw64EAALBxjThbz1CshonRgXAgCAWVxokDPVXoGiM+FCAADALMQsxBkAABeaaBZ6pvyo2ZnaAC6qu+pacCGZUPsiYe6atcvP3Voi2wcs3R1jowAAAAAAP8VLgAEAac6PGpYu78kAAAAASUVORK5CYII="; const lineBlockDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTcwRDkxNkM5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDhGMUI1MjI5RUY4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6LeXsjAAAAu0lEQVR42uyZQQrDIBBFtSld9SZeoblVoCfoIpBbeQZPUroJBDML15EWtRl8A5/ZKPgc/Q5oY4xGc1yM8gAAAAAAAKBvgOuvE0MIf124cy5bgZfonbLKI/QU3UXTwRgvig3lvwEYUr6daMNtsTuQYsSFAOgcoKQLee0VsE1fYlwIAACa9EJeewWyzoQLAQAAvRC9EHcAAFyoUi+0pbye2ZmOAGbRR7RkXMhW1CNLyDcrAAAAAAAAmmMXYABA54YbTC7YLwAAAABJRU5ErkJggg=="; const emojiImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2NzM5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NzI5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3ZDYxNTc0Ni00OGIxLTQyZGItOGRkOS03OThiZjdlZDI5YzgiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Zo5FTAAAEA0lEQVR42uyZWUgVYRTH772JBi5li0gEmUsISRBGWLgEEeVWLy0UCVJUQuVTmUULKWHYk1QPRlHR8uBTi6X1EHptIaUiMsKysgWsaK+Hcu3/wX/gMIzTjDP3mnQP/LjfzHxzvnNmvjnfOd/1Dg4Oekaz+DyjXEIOhBz43x0I0xqLcwv/KcOuNVy258AwJA7kgRyQBhJADK99B12gHTSDRvAuoG/AhmSBMrDE5P5JZA4oBv2gAVSDlpH6BhJBPfCDApvOj+E9fupIDLYDq8EDkC/ODdKgHSATxIMIEs9zZewjl/t86loTrCm0F+wXxwPgFKgCnUPc857cAodAMtjJ6eTjt3KO5ysC+QZ26Yx/CTLAehPjjaST92RQhyZK9+5AOaCmzQFx3ATmgjYH47VRh1+cq+RYrjowHdSK4+tqqQAfXZi2SsciFerFuVqO6ZoDh0E02x1gOehxMfr1UGcHj6M5pisOZIpoo+J3EfgRgDXoJ3X3i+iU5YYDZaJ9Wjfnw0EN+AQ+sx1uov9v/dsY0TTZ5tQBlR7kijhfpbuuVtJSMAHEsm0WBq30PyjWiTzaMGwH8sTa4DcIlUUGOjaY6LfSv1NEpTDaMGwHckT7ahCTTznWAicOpIn2bYP+ZwzOHTfRb7X/HdGe6SSVSBDtZ0N84F4xNZSBe0z0W+3/VLcGWRavtq3CguYXkzEPf3uCNIVUZPot1ogIqwWNfgp5R3tNLBes2CDaETuEDbYdkJliShAdmCHaXU4ceCza84LogByr3YkDTbrKSS9juRCttWmg+rZWgKVDpC9y8Wp24oAqvPvYzmbFJKUcHGM4PCIilplMASqk1IGLYKPuerJI4vrsLqA+g1KwUTy1ct31SNHeDB7RoMkGRfxslpNPdG+z1+ChaHY00gZH2Wi1aBdza0STGl1+lMJi5AN4Ax4yx/8G7jO7jBH9j+qyz3SOYTT2sB1Q+zZXxJNU0yWKx285aJ3BfVPBLEaUSN015eAysEXk/0rnWY6h5UMtbjjgYdqrxeNUGhwudt1WgYWc270m+tX02Q6SwCXdyltH3Vrs3+rmtsoLUMKtDw9rhAtgJSspJTfIeBbq6g1M5PVuTqHXBrqjaHyuOFfCMV3dFzrPJ1chnGhjCL0n+n1l0W9F0jltUsW5fRwrIPtClRzAI6ZTKzhB56xKEu9pNTDe0caWlZ25CkaeWr5+5fQ6Ro+b/A5U7fAcfBG5jTJ6PijkRoFPV9BvcvLk7TigTae7DKP54u1lE7vVVykddj0bNRM1YAHLznoRDq3IAO/J4QNwxXg7b0CKn8TRGO0PjmlgHPuohewVEzM/U5TuQGSBTv6hUYvTSTJi4g39Ux9yIORAyIERlT8CDAC0w+Qc+vS71AAAAABJRU5ErkJggg=="; const emojiDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2Nzc5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NzY5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3ZDYxNTc0Ni00OGIxLTQyZGItOGRkOS03OThiZjdlZDI5YzgiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7DkrK2AAADOUlEQVR42uyZT2gTQRTGEyupYK0WaxakoLbRi71IjWA1rXizQm8KqR56UQSvKkW0eBS8KHhsT6KgN7WN8WTiQW+CWI0iaNVDLZpCkx60+ee38BYew2STycyuBHbgR6eZt/Pm25mdffM2XKvVQu1cNoTavAQCAgGBgDYvGzWujYIxMAoGwW7QTW0FsAgWQBakwU9PFNjvAUUS4Cko1ZovZbom0YI/V1SM+8FcTb/MUV++CkiCVWEgVZAFV8ARYIEIYdFvl8mmKlxr9zXhl4BpwXkFzIKYgqMYXVMR+pr2WsBVweEXENdwGKc+eLnmlYCk4OgF6DUw7b20rHhJmhawBxSYg+e0tk3tHnZfadZ/gXwaE8B3m49gi+ntD3RR33x3MiLgqLB/xz0YPH8mysxfwoSAJ6zDWcnU3wF5sEL1SIOl0sh+hvl7rCsgyt6wVclWeVvyYrrp4qAZ+xh7T5RoDC0LmGSOMpIL8pIB5V0cNGufYe2TKgLEaHSU1VM+BpXc1zGdcHqQ1V9J7O9Jfptx6b9Z+9esvl8nGv3FptJyeShXFB/iRvYW8/tbZQmFhbTKH9BJdfvvuk9LKAL+Un2djUF5CYXb/UhZZPUeH8fRU2cMygK+svpeHwXsY/VFHQHvWf2wjwK4rwUdARlWPymx3wTOgbOKA7SfrVNgvE4mZIzVszrbqNUglLjBtru7oLOJrW6nEN1ekIQSFRZKWDpv4mVKgTh3bUpo38zqF8E7cB7sEOw6wAFwC+SE2SwJtlNsVtI0Bq20SkIIpw+ytj7wuU624Qd4Cz6BtTo29qx1sP6GvAinxQNNjg4fTls3eKiYSlkG45IDTY7ZzJs8kfULR8qUJAQ4TmeHdZeBfwCXhBvghBgp4UjZUq4o7PKFZgLcZ/8/A6fBmmC3DRwCfWA7tS+BN+C7pN8u8AicYL+dAQ+8SC1eF+5ojtZtq0fIIWHZaOeGdBJbAwqOBv5XYsvBTgMWJUKytMaHJanFYWrLSgZe9DO1yO+iieTuvOLsGRPgMEKp8rLCoCt0zYjp1ExY4ztxlN6wzgeOXWArta2CbxSYvaQdbMmLKFBHQPCNLBAQCAgEBAJC/wQYACBotyE0lg/PAAAAAElFTkSuQmCC"; const commentImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMEM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMEI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4vbCgLAAACcklEQVR42uyZTyjlURTHf28wfgvTRMT412TBkJ3/YxALCzMrf5umWY2SsKBQ9tMoGVYslJpCsSBWosiMhQUL/0KZqVGjKUTS9IR587056nm953nv/vl5zT312dz3Xvd+77nn3HPPszkcDiOQ7ZER4KYFaAFagBZgrQW7DszNLzyIhZUUF/kngGMjUsFzEAFCwRk4BLvghzIP+GBx4C0oBgXgyR3f3QfzYAaMkzjLYiANjIKfoAuUeVk8s1jwDnwhMZ3kKaUCQmjiVVANgvyck4ltBzvkQSUCosE3mlhU3ESCEdDHsRn3EhAFvoIcSXFYD4b9FeFNwGMwCZIlZ80a8FGGgA6Qpyj1t1E2E5ZGn9GZv507Y2MM0zS5V2u3241f+7+dh2ygB2SK8kAdMOVtuM3dYAZ4JcoD1e4GXXZNhlWCRV4PPAUvLCqD8kR4IMGTj32NATdn3ZsliogBU/JZv8tCRXjgyNMPFMTAoQgPsELt1KIY2BDhgb9gFlSIvAfuGQ/Tou6BAUW539nYO2FM1D3AHh9LIFdhDPSCE1EecNBtbFd09rfAJ9HF3BqoJTEy7RhUgT8y3gOsVm8AV5IWfwBKwabMF1k/eEOTibRlKh2WVbyJp+lBPwguORfOsk0reAm+q+xKsFvyA/WAejk8wrLfFLiwqi/EmlXNoAWkU28o27hubIVTLcV2OQmEeai1hkA+rwjeDgPLTuuEp8qSdR1eu/ksC3wGTSqPkK+2R8FfTvWVqzWC9w9ZwI1NgBRKx9sun3UbHH2hYEOdndNx6qO3byGIN64bv1eBIMDZVgj+8lD/T6wFaAFagBbwXwv4J8AAcnZ+CvseI8sAAAAASUVORK5CYII="; const commentDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMDg5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMDc5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz52R3D6AAACeklEQVR42uyZS0hUURjH7+SULopIEvGRlImluDMfkz2YFi7KleWIRKsEERVsoBHci6Kks7JFEAgW1KLQlSQ0VC5cTIseosKMoos2GUVEGDXd/of5hJlhxnmcx52h84ff5t6Be/7nO993zvnGZpqmkcs6YOS4tAFtQBvQBqyVPfbBS9+rrBjYFeflzAxwTEQNOAkKQT74AXZAAGwoi0AaKgNdwAkugiP7/PYT8IEX4BmZsywHasETsAUmwNUkg2cqBTfBDJkZo0gpNXCQPvwOuEBeht9kZofAOkVQiYFi8IY+LCpvjoPHYJpjMlIyUARegyZJedgLHmVqIpmBQ2AOVEuump1gRIaBYeBQVPo9VM2EldESWvNRGp/0GoHgJvdoq06fMjzuwchHNjAFzomKQA8okDXdpmmL97geXBAVAVfcOEfPmgzdAEu8ETgKzlp0DHKIiMAJWpMGbw7EWevJVCEiBwokr/X9lC8iAl8S1jr5ObAjIgLsoPbdohz4KCICf8EiuC5yH0gxHxZE7QMPFNX+SLF7wlNR+wC7fCyDZoU54AXfREXApN14V9HaXwWjog9z70E3mZGpr6AD/JRxH2Bn9T4QkjT4z6AVrMi8kd0HbfQxkfLT0cGv4k68QBf6h+AP58BZtbkLzoOgyq4E2yVvUw/IyxERVv3mwW+r+kKsWXUHuEEd9YYajXBj6xidpdgsV4LDCc5as6CF1wRvh4FVpw9EopMl6zpci/OuAUyCAZVLKF1tU/K30/kqVv3gVjYb2NNzcIbK8VrMu3s8fSG7oU6/aDlN0933Eig3wo3fUC4YiNRbgls2/T+xNqANaAPawH9t4J8AAwDcFn/zte1DQAAAAABJRU5ErkJggg=="; const divImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NzE5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NzA5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6gRaM+AAABDklEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoBygCLDDG1atXB71jtbW1iYqBUCB+BcT/Bwl+BsSexCYhViCeA8SigyjgJYF4Lil5gHEQph5GYj3wG4iTgfjlIHL8U6ib8GdiJLAaiodWKdQ8eeWAOqQ2N5wyDyCBtQPhAUIBCPRgMLEeYCjNjAoaTMmke/qydcO/JsYFLly9zfDx8xeKLeLn5WEw0FYdum2h/wz/ByYGaBFqo61RWuYBWqV1usUArdL6aB4YkfUAPfIDTWOAHvlhNA8MyjyAr/U3FDwQPJQ6NIywCY7RcaHRcSGcYHRcaKDB8B4XYhydZh31wKgHRj0w6oFRDwxlABBgAF6HjTO9JXa9AAAAAElFTkSuQmCC"; const divDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NkQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NkM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6tYZtmAAABCklEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoBygCLDDG1atXB71jtbW1iYqBUCB+BcT/Bwl+BsSexCYhViCeA8SigyjgJYF4Lil5gHEQph5GYj3wG4iTgfjlIHL8U6ib8GdiJLAaiodWKfTtL9uAOoSL+RdlHkACawfCA4QCEOjBYGI9wFBVXhQ0mJJJW2ffuuFfE+MCaZm5DAoKihRb9ODBfYZZ0ycP3bYQ40DFAC1CbbQ1Sss8QKu0TrcYYBxsMTCaB4ZyPUCP/EDTGGAczQMjNQ/ga/0NBQ8ED8kODbkGDMY8MDouRGUwOi400GB4jwsxjk6zjnpg1AOjHhj1wKgHhjIACDAATzaFsMYlGBIAAAAASUVORK5CYII="; const codeBlockImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFEQTJDQjdBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFEQTJDQjZBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7zNXDpAAAB1ElEQVR42uyZPUvEQBCGE+8KTxQtbA4FS2386C+NVnel2thrbS8I1tpoZ68/QrTVzuYqRRSs/ChsFK9Q0XUWJjIsyV6yN2s4MgMvl51JwjzZnd1NLlRKBf1sA0GfmwAIgAAIgACUG6Ca9cQwDFNjRa7m1axJGjYJGgfdgjo5rnMy6wPSwVgWGzPa2/pS0CG2h30DpClLDUSgO9AS8c3g7w2oAjoFbRYyhrr0gE7+DZ/2LvFfoq8JWgB9gX58Qdh6wAZAk9/XJUJir+ifwvYy6MMXhAsATX7PuN8E+jvGNNxEXxqEyqlHUMsFoGFJXtsixtoJsRbGkiCUI0TuIn4BvePxHKhmxOMCvjL8eibawmNdEw8Mo6fuWsTTSK9whhkisQP07xDfCOgc/boWVntIOjJ6wbmIKcQZgThB3xq2R0EXJPkVjrrlADAhjtB3j+15bB8zJ88KEENcg2ZBg6BvVI2M0zZj8uwAdM+kC/gTe4FahXvq5wYwYeqBX8sMENoS973L7ALwl4Ytx/K80CQ9GXmlFAABEAAB6AUg8pRTI8/JeVfiIr5gsa7ET/+c/DP3ENrIclMm06+k69xDqLBvV057oX74C1bWAQEQAAEQgHID/AowAGH05Uu7jC4/AAAAAElFTkSuQmCC"; const codeBlockDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFEQTJDQjNBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFEQTJDQjJBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6pBFMMAAABwUlEQVR42uyYPUvDUBSGm9rB+oGCOBQFcapL1cmlWXTRjtalo6Bzdyd3Eexv0P+g1FV3xcEPEJy0Di6KDqJtfC+ewuWShpt40jZ4Djwk95wQ7tPm5CZxPM9LJTnSqYSHCIiACIiACIjAvxSYBotgOCkC48Z4E1yAfRqP9LOAC+7Bipabo+0dGAB1UO1HATX5YzABVrV8nra3oACWQK0nEupxugMuePN+4wA4Wu2V8jM0XgefoAWqAedkx2bye0ZtivIfIK3l1yjXSSJsPIFSFIFiwOQVy1S79KmVqOYn4UWUCBTw64EX8E778yBr1NsNfG3k1Z1oh/a/wCPDFZ6L2gN5sldRB0NarUb5XS03Cs4or3ph4w/XtWv8C5F6wJQ41SROKFeh8Rg41yZfZmhOFgFT4pByDzReoPER8+RZBdoSN6AABkGTyFI9Rw1dZrw9Wgs4lp9VMuCbGviKGnRWq6vVuMm5PGn7TtCBToTvQkpmEjTiXF/jFOjKA4KtQOLfBzJx/TLyRiYCIiACImDzsh9HFMMcHHYl7sWyzboSN7o8+WfuS2jb5qRMoZ54t7gvIbkLiYAIiIAIiIAIcMaPAAMAmet1+sgVUDwAAAAASUVORK5CYII="; const footnoteImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0Rjg5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ5MUI0Rjc5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5dheuLAAABxElEQVR42uyYQU6DUBCGi3Ffb2BjXLmRxO5bEw/AxsZlvQE7u5Olu3IDWWprIp5APAAJbly5wBvgCfAf8z/zQkyaAFZIZpLJowP0zffePwOtU5bloM+2M+i5KYACKIACKIACKIACNLDdLiVzeOTeYDiBnzE0fn/L0t7sAJJdYJhpDSiAAtTsQvfrhxGG+YZ78ovZedRmEk1+1lbbqABcb7jnBd4I4G61lnlGWIik1R3gFzrWRAGBTtuYzDJZgIk9l2UHleP0Tx5kgPMotyk8FAdkgfic8chIDTHXXAPfg7uMy6JkcN96kF1Z06wQS/F8GLcKwIQeKaeQCfhMLuZxiOskuZyxAkAxYgJcwIfwhOftB9liG11IpPUJ95BUwM9DSU52wWoEEZMXMM+Sac7joGlDqAsw5RhTBiZhl4kZWRxT6wKad+llTrb/gxIwFlPPP+220t069Tb6ytUNKZnf2mTMGhH53Eo9cGc6ARCwiBMkFnK1RT4Jk4x5ncfVTyg3l8ByfoLPPs9lW60B6SYYLs3qwp9NHRBIdue7oK162GfHMnJ7gi+tWC1z9N9pBVAABVAABVAABVAABVAABVCAf7IvAQYAm1+fyPGr/AwAAAAASUVORK5CYII="; const footnoteDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0RjQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM5REU1ODI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4UZISiAAABuElEQVR42uyYQU7CUBCGW8MePIHEC9jE7qk36EbjEm/ATnd26c7ewC4VTKxrF9YDkOAN6gUMnqD+Y/6XTBoMKZQIZib5Q/t45c03738Dwa+qytvl2PN2PAzAAAzAAAzAAAzAAP4RwA30AlXU8bIH/C38NboPffI6hKZmIQMwgN+jo28eJo99vAyXPFOen51mbSaxTiPp1O4F4HrJM2/QWgD344ms00chilZ3gB/oq4USAp20sZgKKcBAr6XisHY9bbIDTaoY024RlIoAOcf4kOOZsxrGAjcH6kEBx6UoM2ikvsgu1TJjAoStHmIm9MRkUiZQ8u3cjcs8qOfGAJRz3pxzHYCLK+6KVriJLiTW+oJiJJXwvotkI9kF1QgyBRQrm5a8TtZtCKsCRK7atIFLOGBizhZH9LqAlhtvow2iC33QAp6yjrZDWetu3jYBvLO6KS2zqE3mbLlinzuMzbgzWwGQ8BAXSCxltcU+BZPMOS9m9QvaLSCwvD/A/WjBQd78GWA3uXDVhV7dOSCQ7M7PgVbn4YAdy9ntGbpVYyuFb/9OG4ABGIABGIABGIABGIABGIAB/FF8CzAAEzaXJE3B8jEAAAAASUVORK5CYII="; const citationImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0QwNjk0QThBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0QwNjk0QTdBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7SS8gjAAACcUlEQVR42uxZQU7DMBBMEFyRgoQEiBM9trfyBPfAA9oPIDVPaJ/QPAEEH6B3Ls0TyK09wg0QCJEHcCi71RitTNK6QIMj2dLITbDamfWuxzbhfD4P6ty2gpo3L8AL8AK8gP9t2/rDbDarBeFms7lyBrqEV8LcITwRzmxSaIdwRdh3LPCHhGvbGggdzZ7QRsAH4Zzw4hj5R/AqL2LRxoBfRitdRle1VqsVUdcGdMsY0+k0d1YAET+hbkDoLxlzSV1CQh6cSiEixqTvDPIpkIl3i3E0vuuMAJC/IHDqcGR7FOGQ0AFO6d0eISbkGHdjKWJdsyw1slAfKeVWgkgo6iZ45PQYcp6LOgjoOTXqY4K/sZjGkrpgs3wj7K4Z7GfCkbmVKKuBEXqO/BAkR6gFTZoJJmJsByIipFSyrin9hZExMbnSJIjkjSSPFol3GWZE14VaQuQnZllqZEU18PXjROoStaBEOu1xLeBzJGYqEAaoVhDicQeIqg2OCbe2y6gSq40uOB3lWIwbitUpc9mJlRFdPTu5YWjObyUio1ZUgYBukdiqBaRG5DW5viYNdx4V+Ebb+I5/EfBgkBqLGZjQOzaOe2NP9A7TWxQ6F39VRvZNAP34WIgYYLVJCmapB9PSLYfhxSvI/+TUV3oiKzOyGKZ0gr4DIfycE8kMM5QK913MEqeZdOnKjUxsE3Qk20gZhaU0M1aiXG/mhOigKiMr3AsVbOgCY8XJhTi5OsUW+b/xaxU5E0ymgfQJBGkFRMKhG5smv/YMWJzIuNjTKk9k5gxYC6jTzVytmr9a9FeL/mqx5leLof9HtxfgBXgBXsBv2qcAAwDGUEyo1AvpmwAAAABJRU5ErkJggg=="; const citationDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0QwNjk0QTRBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0QwNjk0QTNBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5y6jOtAAACa0lEQVR42uxZQU7CQBRtjW5NSmKixhUsWeIRhoUHgAuY2CPIEegRJHoB2LuhR7BLlrJTozH2AC7wf/Im+RlbGFDKNJlJXgbqRN/78/9/0zFcLBZBncdBUPPhBXgBXoAXsN9xqD/MZrNaEG6322t3oEf4ICwcwivhyiaFjgj3hBPHAn9GeLCtgdDR7AltBHwTrgnvjpF/Aa/yIhZjAvg2WmkbtWhfEU0dQI+MQS04d1YAEW/SdEu4WbFmRFNCQuZOpRARY9JPBvkUyMSz5Tpa33NGAMjfETh1OLJ9inBI6AKX9KxBiAk51o0tRWxqlqVGFupXSnmUIBKKpim+cnoMOM9FHfD61KiPKX7GYlor6oLN8pNwvGGw3wjn5lGirAaGmDnyA5AcohY0aSaYiLVdiIiQUsmmpvQfRsbEZKdJEMmxJI8RiWcZdkTXhVpBZBuzLDWyohpQ4oQ6Qi0okU4NrgV8jsROBcIA1RpCvO4UUbXBBeHRto0q0W10wekox2LdQHSnzGUnVkZ09e7khqE5f5SIjFpRBQJ6RWKrFpAakdfkbjRpuPOwwDc6xu/Yi4C5QWoidmBKz9g4no0z0RdMb1noXPxVGdkvAfTHJ0LELbpNUrBLfZiWHjkML15Dfpu3vtI3sjIji2FKTcxdCOHvOZHMsEOpcN/lLnGaSZeu3MjEMUFHsoOUUWilmdGJcn2YE6KDqoys8CxUcKALjI6TC3GyO8UW+b/zaxW5E0ymhfQJBGkFRMKhW7smv/EOWLyRcbGnVb6RmTtgLaBON3O1Gv5q0V8t+qvFml8thv4f3V6AF+AFeAF/GT8CDAABOUyxLJ3aXgAAAABJRU5ErkJggg=="; const crossReferenceImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0QwNjk0QTBBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0QwNjk0OUZBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6joObSAAACMElEQVR42uxZgXGCQBAExwZICZ8SSAmkBFMClkBK0BK0BFMClqAlYAlQAuEze2bncy+axCRO7mZu5IE/bnf/jmdM+75PbtkmyY2bATAABsAAGAADYAAMgAG4YZvKQZqmfzXHbPAZfr2th0+A7pi3fA9EAPhJxeAOYz9xO/jhh5LPB68peW8PQ87748gDUD5q/ISVvxzxGsGvbRt65g5+zPktbwWAT6zFpBZBKrgH1VDQ8soAWiLsA+kaAEeTVoF0bBWBuKYS8owqBmCiJOaTXg8+x/rfIUiDcQ2gz5iz+M0K5yJ2SNIX6j0VkGa+kJ+glrc7zBOm9hiXBHZP9VUifoaG8IKYTCSTs4V36EKJVsQlmN7gUhPIlyuS1hgXgeQbWop8PQ/O95F6OtU8oksoI/Yc3LOzpPPC0lgbnYGtJdjvEF9aoij4CPYT1JwLGE/oeVtSUVWgInYLrfqpHlzQJVzAXKs0gOrEtUYr1kuL+EAyy5uuoC5T0XFHBa+92NYUI6FY3N9r8ky558w+9a5ARogdsd0HzIbjfIyxoF76sTV+iQJTOi9rtgJDc3SBgmohwznZUizVdanbgX7nkXu6ryggKnDfLyP7o5Lkd2cqUEQ6jmxbtBfnqALaViJT5Ob1ystnds4DyRZ0T4N47YmtyacAiJUn6iC2zRgDIC22CWI2ChlnARjbTosi3H32yfeYvIkvjsmEp/b/gAEwAAbAABgAA2AADIABMAD/FsCrAAMAJJuHJ6fJxfgAAAAASUVORK5CYII="; const crossReferenceDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFEQTJDQkJBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFEQTJDQkFBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4A3g20AAACVklEQVR42uxZi22DQAyFqgvQEegIdAQ6Ah2BjEBHSEZIRkhHgBHKCGQEGOFqV8+Rczo+QUrbqD7JAu5j/J4/OErsnIvueTxEdz4MgAEwAAbAABgAA2AADMAdj0e5ieP4TxpI7X5Cl4IkwdSBZDjbLb8HQgBwOCdJMcUHG9p7+iHjM7rUyngeLySt3hT5P2rYcJK9Gx81lN8awFG985NF2/xttw+ADSPpcaiHkgrCoDqltLwxALGj9ubDAOiaqkN7hFBIcaVAZDcEIKMaA+BXoQrxdqA433D8w3UOzOdgg3PiHWe2v5nksQofNqpDoj6TSAKFRkPyRtLj+YkAD4qpFnpKAUvrrSoMJfTzPReED1pvtIc9chrIQPsOFzmr3FGC6SPmO+0+5Ibz5mo8557LjyoU9XrmzbtQPk0Vj6kQknhvORfA3IkQ71BmW7AQgbWpUcADO4TaAOalJIoHX5l9nNnjvZrxSL2vuSifAQ9IYlaI9VD2Sz6kXpVIPeZ6vwAo/aG1biRZr0piYTVTX7pcqgyUSMWReE9GPmxcBAZvLlf3R4RfDZKSwJ7FpUokUYhTxbbzmPWfsznGvHxxczF+jQd0L8Ss7lBKOZE3qAI5vLMDU1tpKXhOqsuCcVLXzcieYbUHVAuh634Z6o9QsSQE0oUeyEcqjrQt+0BuzHog1EokAXfXSnT4FEteqNa3ak8Hff1Ya7IKgNpUTuRBsM2YA4A9hddPCZhiTSsx2U6rL+e5+lwR80ta5WSNTk14bP8PGAADYAAMgAEwAAbAABgAA/BvAXwJMAAbjDDPFLZLBQAAAABJRU5ErkJggg=="; const symbolImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzM5REU1N0Y5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM5REU1N0U5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5AkfjKAAAB5ElEQVR42uyZ0U3DMBCG44j3lAkA8cRTwgRpJyAbEDYIG2QDwgZhA9ig2aB54gnRTECZINxJZ8m1nOCEyrGFTzpFddX2Pt9v39llfd8HLlsYOG4ewAN4AA/gAf5kZ0NvMMaOXl/fxBk8EvDtx3u7nfuDpy6cbOgLOQAEvsKgwWPh7RZ8DSCHpQF0JPQqBR/Q68oGCY1mgGb/a+TzV5CFvc0ZSOj5Br4BPwd/IAmh5dYuYsG+MVBB7zVkBtfEJwGU1kpozACihsc9+C3A7WxexENW2yCj2QBUCzrwzOVKjOviAuSUOAdAQfP6ULiYATHozCkAmP1L2oG4RdQrOZMB1c7jBgC1F4WzABRoJI01S8loDkCpCL5YKgvhRPmscd+XKzK1Ep31AIrZ7yD4Wjg3GJdROGH2cetMpeFK0RtltmagVLTZtdAbLSKjUHP2V1Lh4to/KDpUozLSzYBq369saLF1AeSAXlRnYRrD4+YdrZmjaxk6yZkFgB/NVVunxkGnIumJWUyXOBPL8ml+udjC7fQJs4A3GgDR0OVAZFxCVLjiCbPPZdQIQ6kQfGtaQvlI4RqzauL46QEUPb92AACJMnqUZvxZE97MtcrEo+ee1wxjl7uumP+DwwN4AA/gAf43wI8AAwArU6SaRSk8MAAAAABJRU5ErkJggg=="; const symbolDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzM5REU1N0I5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM5REU1N0E5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4aoNsvAAAByUlEQVR42uxZ7W2DMBCNq/4vnaB0grJB0w28QekGjNARGIER2g3oBukGbFAygXuWDsmxzsYkyB/SnXSybEPww3fvHo5QSh1KtrtD4cYAGAADYAAM4Ca7d00IIS76UPAkNA34CHPjtQ/cvXDqH6TcmK/AT+rSdL/a83nXegiAUdE25ABAuLZUhxC+5T/Pep7huillCK0lcYPtN/gb+CP4B/gvjrfJs9gXQtAewWc73qFfYxhN2eeAZyEDgmhSArilDgw5hJE3iQPe5oTX1rkm8ZrN4E9bwygLALjoF+x2JWohc9EySxr13FMTlVmWxEIU88giWAiLmmafB2vqDPdUJbCQJBb/o8dCwyhpDmjut2Jfq9UmVKEmlRKojWxrDWBz7gDsb4PJmOtD2CgZC2nqhObVGu4JbSSzzAFDfS5GyezVMEqyA7jQd1uNAm3OhEKNy0YhOwD9TyJ5a0+F/soqiQnqHDwLPFEA9a4gCUQ/lWiJt3/0AOiWXTBzxGCw6ADsM6Fxo9AbMeFVdAC+wrUCwnWWdIoNYHAVrhUA0gGgjQbAofm7DezWWeHXRz+Z24mm9afntNSMveW04L9ZGQADYAAMgAGUbP8CDACJcEdiioKbegAAAABJRU5ErkJggg=="; const tableImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMDQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMDM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7W5ot0AAAAf0lEQVR42uzZsQqAIBQFUF/00UHQEAT9tS0NjSWGSedugkMnexehyDmnnjOkzgMAAAAAAADQMuN1sWz7Jx5qnacywJnWt7v47yf08E3kl/ZpIQCASkN8d6hq73MCatQQA6hRNapGDTGAIVaj7U4gegKEn3wAAAAAAAAA5TkEGAB+Zxxj6E3/9AAAAABJRU5ErkJggg=="; const tableDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NzU5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NzQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz76dIDbAAAAaUlEQVR42uzWQQoAEBAFUCP3v/K4gIVCkjdL2TzT/4nMLC9PLY8PAAAAAAAAAMDCtMHZ7d9dfL+B2ZfIQ/eEGABgU4hnQ7X7ng2oUSEGUKNqVI0KMYAQq9F7GwgZAAAAAAAAAPgE0AUYAAxGFmU6tXJJAAAAAElFTkSuQmCC"; const definitionListImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTU2NTZBODA5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTU2NTZBN0Y5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6lLxXqAAABqUlEQVR42uxYMU7EMBC0AVFR3BPSp+EBIPwDeEJegK5AoqDxFRRIFMAL7gn3hJPyAShSE36QhgYJmbW0kVbGJBeTxAnsSqNdr527nXi9tiONMWLOsidmLkyACTABJhBXDmhDSpmAylqe0UMFE7Qn2YdqgCjraoEYkkBXSMoaZuDbb9Zdnv9LEFuPr8T2Au1j1BXaVj+T8dau+pgBHwFfx5b02WCWJL0MBmRwnCI2nckHp70ImYEQAkv0bfBt0jHaCTBz0lI7RDQhm4UQCKlCF479hrYi/kckunZ8mqRc3d6Q9PtdFQqUOsiS+CrPuKqlLcYiYN/gmVNSk74CGmMjs7n9AjjHoO2bf8X1EHcj88jqh1RQmP8KCZS4GOksCZJaK+Jr051E8o2MCTCBP3ScbjjUiaku9qYyegu4BDwBbtzOoiiiBZ2m6U4pdA04Alw1jMl3uD/0ibzLGthHfTihjJF9H+ZOuQoxgX9OoM8qlM99BmSMKyVXISbAVWjks08XAp+oP6ZcmZoI3AHeAfctVUgOiJOgrxKzv9DM6VMLl1EmwASYQFz5EmAAP7VTSIZcqb8AAAAASUVORK5CYII="; const definitionListDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjFFOTRGMjE5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjFFOTRGMjA5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7dopD2AAABqklEQVR42uxYO07EMBCNAVFR7BG2T7MHAJEbsEfICdAWSBQ0uwUFEsXCCfYIewMi5QKhSE24gRsaJGTG0kSMRpaz6/3EETPSk+0ZW5kX22+iKGNMMmQ7SQZuQkAICAEh0K+dsfEYkPsWKKXmh0ompCYptigDvHUQUNES4LkZDLqShpDdrTGECu4DNOgaYX+Crca+hnUVmV/BWAd9FdhFLRwxYxwBcBXmz+yDZ+ifo6/C1s7LSJ/ako1HNJdNsTUBmyy614AJnUMItAnmhIDBeMHGLdk8hECICk1Z/xOTz4j/BY7EDLBiPisABRuviYDsrEIh1ibZEJ92zNMd4+RYBOwbvKaSipdR91EHQo7QEvAOuMELbN/8B6pL74WM28JRBzSe9ynWjQZRsV1KyNFaEF9Xu1Mhk28hISAEhEA8MvoIuAW8Ah54sK7r3pJO03SjHbgHXADuPHNKW4iPiHKbI3SK7XlEJ0bt+2PuSi6xEPjnBPapQuXQdyDod42okBAQAvGoUJAy+Qj8YPsdszL5CDwBvgDPHSqkDohL+SshBISAEBACQsBnvwIMAAWcwLMQah40AAAAAElFTkSuQmCC"; const horizontalRuleImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjFFOTRGMjU5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjFFOTRGMjQ5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Hk7MTAAAAo0lEQVR42uyYYQqAIAyFXXgbz9DpPYPnWf2wP0FlILRH30AQgvBje083c/ekHEsSDwAAAACAbyMfm9Za2EOWUoYzUPflgVZVLyEbLqEeKyIG4OcANZLDRM+AzfiJvAsZHRkAvEa7GMwkDnzWbPTX6OO9oVRCdmujqiWUrz7gQgAwlYg5haAfoB9AxAAwlZjqTNEy8NqZmEogYgAAAAAA6dgEGADHw79ZMlLwuQAAAABJRU5ErkJggg=="; const horizontalRuleDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzdGQUM2QUM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjFFOTRGMjg5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6WMc/vAAAAkElEQVR42uyYwQnAMAhFY8k2ztDpncF5bA/tPYWASt+HQE4hD/UnKhExOusYzQUAAAAAkKv5bty97CVVdTkCdq8otKx7CslyCj06KWIAfg5glRymegRkxyHtXUjoyAAAgHcg9d3oFAHBRgEAgKlE/hSCfoB+gCIGgN/oVmeqFoHPzsRUgiIGAAAAAGitS4ABAFjztljTAxC+AAAAAElFTkSuQmCC"; const imgImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk5NEY3ODhBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk5NEY3ODdBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjOTg1OTExZS0zYmJiLTQ4NWEtOTk2Yy1hMzE3NWE3MzhiNWQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7KNhJpAAAB/UlEQVR42uyaP0gDMRTGe9oOVoricOBmFxVxcNbVIkgRHAUXN0UQxUkXcRHESXFXwaEgVsEu/hkcFNfuCt7sIAqiQof6HbyTtNyRyzVecpgHP66XUvK+95K8JNSq1+upJFtbKuFmBBgBRoARYAT8bwFp74NlWVo6yNsppJveM2AdTINuBf6+gzLYAjWhDJCtgTmFAe+i/r/BdugUMWmqAgccAjtm523q1yE/GvwLolmAQ9iKMmAzPoQSELQKvSgSINxv3MtoEVyBR3oWpS2jMdgk2Gfe+5n3ShIK2XJA+1JLGYixgOUF27XLwLNgu3QBY+AU3NPY7RXsazegfU9mlBrWYMZGaeVwGG5BT4RV6AY80bPI84FXByyfH7vWx7QNghOQ8+nMrZgz4EtyEH994G3meEPIHSYHAc67NkJDoF3H80COnOeN9QLY1E1ABzii4RPGZsGC5EkfyoLmwDVFVujsAVbAORgGZ3S+8OwVLIKHOOZAIWIwdsA4RTzT9L27Yh2DeZ/ASc9AS6fAEA5eglXw8derkIyg+NkEuAADSb6VyNP5dyrJ1yqdVEc2om7tdbkXcg/yJTDU6nitKrpO8ewTZMEbVXnhSVxWnIksPUtRM+BdbKm8G7qj/mthMqDnfSJbVBTUAW12o0aAEWAEGAFGANfS5t8qiu1HgAEAn/W+VAu57isAAAAASUVORK5CYII="; const imgDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzdGQUM2QjQ5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzdGQUM2QjM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4bY3DUAAAB0klEQVR42uyYv0vDUBDHE4W4CKWKg6VZXdTFxdl21kVpERf/CnEVF0eLq5ug3dx0cJQq7upgl04KghUchBQxfh+8ITySNO9HfskdfAhN4d19X+4ul2f7vm+V2SaskhsJIAEkgASQABLwrwQ4oAM+gJ8DQ+7fSayAzUIBjv1i2JEQVyS2MMyxnZ8pQGawJzGrkkLB4K9BDdgZUOP+wuKINfEJBH+wRd8y3PV58BqMTbcLpRF8CzwCj19b2v6EogiaZZitiIJt6fiPSyHb8O6zHV8Muf8EllT9ZynAi+jvIzCl6j/LN3Ff8r7xUaIJemAAusCV9HUQcf9Qa1sSFnEDeML/fTAnWcht8AxG/NrWbSJJamAZ3IJKiP4H0ADfhtLMeA3UwVVE8MxWwQWYLOI4XeHB18essQFOcpuaYnLwTnKC3BfWaoIeGIAucBPktHQNxC0ga79gh6+zElL072CtyAJ8HvQ671Bh9gP2gG1KQFwX0ukk4zrIJdgFX7pdKA0BSe0FbPIZKbU2mqYtgHuwXeZTiWlwzj/kXZUF8kwh0T5BVTeFhjkKqKrEIQo4K8h51anqm9gBnZzPhG54HErvATobJQEkgASQABJAAkiAhP0JMAAxLAJengtz9wAAAABJRU5ErkJggg=="; const linkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjdDOEU3QkI5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjdDOEU3QkE5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6JMYyWAAACmklEQVR42uyZzWsTQRjGsyVtMSptqYb6kRpsG5AUD+kpqWAv5iTFg/0Deu1ZRf+HQunBS6GHFHPSi9ZLQFCo0tKC3kRoItYG/OwHiIoaTZ+Bt7IMs7OT7Gx3Q+eFH23amc3z7M77zjuJVa/XI60cbZEWD2PAGDAGjAFjwFNEGxlsWZavYprZVA/XE2ji2jlwAXSCDfAcbGl/bKooRju4Bb6wy3P8BnOgz6uW/5o0G+gFzwTCeaogEzYDTPwrBfH7fABnwmJAJP4ruEF3egTcBtvcmPthMCASXwZJwdgUlxv/wOkgDTiJPyt5WlPc+EkvBqIeNio2+CZ4A9aossRIUFUybxHctb1OBrUP1GldNxo/Bdc58F5oDNwD78AvsANWwB3Q7TJ3lHtd1raRKcRx8MClPDIzVx3mx7icqYG4tiTWWOf/gnFu/hFQ4sYtaC2jDYr/Ax6DGarn3wRPIi4Rz5bfyYMwcEIg/i24SEviPP1k9fyFbQxr3AYdxH8Gw9pbCUXxLOn6QQH8oL+9p7vdQXOOSu68ULwfBrocxCfo/0XBU5kAx8jIFfBSVbwfBooS8SzOkSDV5k0qXreBjCDhEoL3zFHT5iaezU/rPJu4GZjmBGQl78uS+KGknBbstV63Acsu3NYLLYFL9PtrlbuHGAB56m1qlBMll77I86E+Kimd+7GpcB1WRi/Taewj6KFkrkb8DocltGxbBhUF8aJSmfLzfO6WA7OcoGsNitdW55s1kOVE7dL6tscp8NTvOu9lHxBVllUwT4eS7wLxad1LxIsB1mitK25Sn/yq8157IbZMnriIZ8fJIb+SVFc7nacTWIXaZLazPgLX6WwcCcqA00YWmk+fD9en0634pbf5iskYMAaMgWBjT4ABAFhGZHJcZm/wAAAAAElFTkSuQmCC"; const linkDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjdDOEU3QkY5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjdDOEU3QkU5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7TAK9zAAACj0lEQVR42uyYzWsUMRiHu+IHXSt+dLtUsVpqFaRFpHrZKn6BPUnx4lXo1bui/0NBL168tdhTK1L0UlAsWEVUFBRFpJSqFaRVWhEUtTo+gVcYYiYz7s5kdyEvPOzMbJL5/TJ5M8nkgiBoqOdY0VDn4Q14A96AN+ANeAN1HSszbrsXdsMaeANT8CnVu6i1UMqsgnOwEPwbP+AKtKZ1v7TFN8NkEB9z0JPGPXMprkab4RbsTVj+A+yH97WQxCbxaqyfhX0i9AIshv5vhUu1kANq2DzVhsg0tBvK7tJy4zdsqWYORInfaqlzRis/UImGSqbRnAyRV/BIhkQeBmDOUu8GXA6dt1frPaCy/3wZ9b4Z2nGexEfgKszCd0nOB5KoG2LqHtDOp10m8ToYi5njF+FERP28ljPLUHSVxKaEjYpf0K/Vb4QJrdywqzexSfxPuAkXYRS+GJ5E0SJ+FlpcGCgYxM/AHhkSHfKr5vN7oTJT0Bkhfh66XayFChHz/DYYgq9y7a309mqps9bS86mJjzOwPkJ8m/w/Yngqp6BJjByHJ1mKjzMwYhGv2C6Ckkbq4m0GegwJ12Yo1wsfE4hX9bsy2HtEGhjUBJQsjagkHrdMp0OVzvXl7AfuwkE5fgldCd6JO6BP1jbLMAMTMeuizPbEhdDxuwTtqEXcYZiUjcpGaMpavM3AUuh4ZwLx16X3/8ZC6AlW5bPKw9BxB5z8T/HH4LWT7yoRyVHSknEJ+rQym+GOi6my3E39OPRr19TG5TkUpZfzWs8fhRcuP2zZDLTAfehM0M68GHIqPm5Do3r0ENyOaeOxJKxz8XFPIBwqSU9DCTbBZ3gGw3Ct0m2hCwP+67Q34A14A96AN1CT8UeAAQAR+tYwJTuMPgAAAABJRU5ErkJggg=="; const paragraphImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjdDOEU3QzM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjdDOEU3QzI5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4U5VvbAAABe0lEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoB0Y9MKQBC4hgZGSkieH0aKYMyyTEA8Q1QHwdiH+DApIE/BOIZwOxCt18gBbNokB8jURHw/AyIJZGN5vWmAXNP31ArEmEv2GZBub7+UCcjMQHg6tXr1I9wLW1tVEdAvIFNBNzAfE7IGYnwwPcQPwNJnnlyhVQ0jwPxHpUdPsRILZF9wByHlAj0vHYwDc6pHZGnMUoFHBRyyYdHZ1/QEofGBN0LYVeDvVi9D4QvxnKHgBF++KhXpE1A/EDSg0Fpn1mIL5EZn2CjA+T6oH3QOwExKdoUWLQwhzkegDdY4FAnAPE9lgMQq8HGHHEBM0rMlyNOVB+WAvEjkAsDMS6QGwyaJvTBMB7KB7t0AxUDJBVCkHbQrrUbgvRKwYY6WUmrlIIZ/dhqJRCo6MSox4YZqUQ1hJoKJVCjKS2hagVE3Tt1NN6yIZ2eWAoz1SOFqOjHhj1wKgHRj0w6oEhDQACDABKmNMsJ247fgAAAABJRU5ErkJggg=="; const paragraphDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVCN0Q0RTg5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVCN0Q0RTc5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4DdqJSAAABZElEQVR42uyYsUoDMRjHGz0QWjdxci2CHNXFVcS+gc/QtY/g1t0XcOgguPUpdHIRhNNRV0G87aAIpv+UK8QjJ5cziY38P/hxtJSQX7/ky5cTUspOzLHRiTwoQAEKUIACFKAABRwLbIML8Aw+gbRgDq5AP5iB6kY1dsGTbBc3YK8ynneSis8lOGjgLVb+5XMKRtrnZWRZ5vwPT9P0+0S0+0AXfICtFgI9UGgTV0vzARw6nPsdOKkK6Htgv+HkTVEEWO3C9KW+hLoO0/yFx5GPJfRTFXqLvYy+gPeYBVTar2M/yCbg9beDYu1vgkfLQ9DEra1ADobg3kfF8DGOqHkvpMTOwRicGgaqngOiJhPeD7K6Zk7thxk4AztgAI7XcQ8kDX6Tl7Cd/qsMtKpCZS80cN0LhcqACDWmsHw7LWOpQrwTU+CfVSFjBYqpCgnbXshVJoJe6rmJKUABClCAAhSggGUsBBgAGacMBNaUMkwAAAAASUVORK5CYII="; const rawBlockImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM1NTg1OUI5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM1NTg1OUE5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5myDPRAAACNElEQVR42uxZO07DQBDNIjiAkSgocQcxlaGjDAUHIBdAcg5AEY6QHIEITuCOFpd04IoY0SQdSFDgAyBk3siz0mgFka3IZI12pNHaE3/em593N6ooik6bZa3TcnEEHAFHwBFYrazrgyzLrAfb7XYrReAU+g4tLNFX6EnVFNqAXkG3LHL8NvS6Tg0oC7NHVSXwCT2DvlkE/oUxLS5iITGra6OOQJ3vgJa7+ycrFwhHh3uqag38evGqZJFT/18KSdkPggjDpWG+eJxOx8Z1Mww+dBOuyrlxk83D+SafhxgeqMPB1mfbEMMIeoxnJk0W8YSVZATAoQDfY/AkkdGOPQaupygkPdg8PqbfiHDadBcaw0MD8j6f++I3DXpuEEhM4Dx6ggTZEh21v2ijPSN1fAaoI+QrBlyUBHIBNhRRDPlZ3jLer0NgBrAFvzRFNGLD+7EAZ0YhNK5LmXQobI0T0C/JAf6Ave8JYLfQD5HjOsW0d6lYc45KzClI96ZFmXqNE6Dcp87jAfhI5LYnvD8RRCNR/DrvE6M2pK2ZNmoWMoMegkTOIGkcICp5EAR63kuRiDCOqThVGYVQRwO2VJX3LZ3/VQik7EVKnRzA+8K75L052X+IVmi0YFnA2hn0jVh61qv03qheE9Nn28apBGGquiZu/1TC1hlpJQK2pY9bkbWNAJ1nFm1q1d7YovzfsczJtTa2vqA3bd7YIjmHPrd5Y4tu2G1LESv3N6sj4Ag4Ao6AI9Bm+RZgAC9r6vuQn2OmAAAAAElFTkSuQmCC"; const rawBlockDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU2RTZBQzA5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM1NTg1OUU5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4qrvidAAACFklEQVR42uxZTUrDQBTuiCK4m4oLt9m2u3iEuvAA9gJCeoR6hPYIFj1BjmCO4Cy7bHcKCpqdIC7i9+QNPAYtKTXtRN6DxyQvafJ97y8zU1NVVafNstdpuSgBJaAElMBuZd8fzOfz6MH2er1aEbiEvkCrSPQJelE3hQ6gt9CTiBx/Cr1bpwZMhNlj6hL4hF5BnyMC/8iYVhexkJxV26gSWOc74OX14yjKBcLx4bupWwO/3rwrWeXU/5dCwac7w3ATmK8x7ZgG9y0wJNCuMaYkG5aqZLM47/J5iuGBOhxsQ7aNMUyg53hm0WQRz1hJJgCcCvADBk+SBe3YMnA/RSEZwGb5mK4RYdd0F5rCQyPyPp8n4poHvQwIFCFwHq0gQbbCR20bbXQQpE7CAH2EEgD7BgxQBXvXg01FFFN+lt3E++sQWABsxS91iEYeeD8X4MIopMF9jkmnwtY4Af+SEuDP2PtWALuHvokc9ynmvUvFWnJUck5B+q2DbbkNApT71HksgE9Eblvh/Zkgmoni93lfBLUhbc200bCQGfQYJEoGSeMIUSn7/X6HWyNFIsM4peLE6DhdHNeGg638i/yvQ8CxFyl1SgAfCu+S95Zk/yFaadCCZQF7Z9A3YuNZr/F7o35NTJ/tGKcShKnumrj9U4lYZ6S1CMSWProiayMB3djSjS3d2GrRxpbRv1mVgBJQAkpACbRZvgQYAFu5B4kUJFIUAAAAAElFTkSuQmCC"; const rawInlineImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjBBMDdCNjA5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjBBMDdCNUY5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Yj0aIAAAB40lEQVR42uxZMUvDQBRupO5dBAWhzrbSLm5C29Gti3ML/gD7D+xPyA9QOGeXTs4R3FxabJ3bQUEnnR3id/AdHIfEJjVpat6Dj9zrHcn73n2Xe7l6YRiWNtm2ShtuQkAICAEhsF4rm8ZsNst9sLVarRgSOgPegTAneAVOlyWwDVwBOzlK8h5wHWcGvBwqxVuWwBdwDrzlKPgXxhT9FrLslpB9INN9wNjD43OqHwgnx4deqgTSeEiayZFaKLcEjup1HwgI3a44/QNAWb4e12a7Sb9Jv639rGegyat+cBdQTv8Q6JkgYRWOK/HacvzKOiQUPE2nOtCRRUhntM/mBBiwPXIC/nR8lbDmilULuXaJYPVNLgDfyf6Iv/UoL+1XKaMGiTU4Q1XOZJKaK3YtZNsNsADuMRO+0TMDsmU2QP+YWdfjFvAVfUV/vELN5SUlMAe0XFoIvGtlf8K+D02OY4yMGla2XT9JzRVZC/36GkXmAs6EAokDLs6hXhtcH31Kp+8E/tPVrbl2md0o7AN3sXZiIwtm2LQV/Q5JGYJzBN9B00hkbvUH7vg/r7PN2aj5JtbbfZqlxCr3/pffxOWsiq7MCKQlHynmikRAzoXkXEjOheRcKENtyf/EQkAICAEhUGgC3wIMABPj9CP+WLkjAAAAAElFTkSuQmCC"; const rawInlineDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM1NTg1OTc5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM1NTg1OTY5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VI06MAAAB8UlEQVR42uxZsUoDQRDNSUSwCoigIMQ+RfyDJKVdGmsP/ADzB+YT8gERztomlfXFD5CkSG1SKCgIsRHE4nwT3sKySMxdvMvFzMDjdm73LvNmZnfnNl4URYV1lq3CmosSUAJKQAmsVoqmMRqNcm9spVLZjBQ6A16BKCd4Bk4XJbANdIH9HDn5ELiOEwEvh5niLUrgC7gAXnJk/BNtmr8KWXJL6D6Q6T5g5O1zN9UPhL2dDy9VAmn8SJrO0Vood3PAqjs6uJxQHQBt1EtTq78l/bjnUw85JkRbnpPnW9AH0OvSd//wmGkEjPFiWBMInP42cE5jRUocV+C15uilVaRQCA+KoT2LkHjbZ3MoXma75xj87uhBwporVi3kyhWMlZdcMiVs7/d4T6JQol5mulRJrMoIlRnJJDVX7FrIlhtgAvQRiQ69X6dBdprNcp1el3ET6AH1gPpgiZrLS0pgDEi61GB40/L+kH0yqfscY9Koannb1ZPUXHNroV+XUVlVGIkAJI45OWW1aXN++Ewd3zH8p6tbcx3Qu/NwBNzFXkaZw1OrHVBvkJQhOIbxDS61s6hZ/aE7/s/rbHM2ar6JZbtPs5RY5t3/8pu4mFXRlRmBtNJHi7lNIqDnQnoupOdCei6UYW7p/8RKQAkoASWw0QS+BRgA/Gf9s2Uy2OEAAAAASUVORK5CYII="; const texBlockImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Nzk3MkM4ODM5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzk3MkM4ODI5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5pzmUdAAACH0lEQVR42uxZvU7DMBBOUHkABgZGskG7tWyMZeAB4AWQ2gdgaB+heQQieAG6sTYjG2RLEEu7gQRLHgCh8J10lk5RHBJEVFvySadcbJ9zn30/ieMXReHZTDue5eQAOAAOgAOwXeopIcsy443t9/uNduAC/AkuDOF38HlTF9oF34L3DVr4A/BdmxjwDfQevymAL/AV+MMg49/YpvogFrRkdmnUAWhTBxQ9Pr0Y+YFwenLsN40B7eBtUd2i9uoUB4PBDJeFpjtO0/SsiQGYZ4LLjWjagEl3LdqmmC/qIgZycMQP9VhOWj4nKeksed5Y0//3GKggWpklVnEFOYA8hTxUOwOZVnai0R1hfEJMMsY+40q6Odpy3BMI6h/9WxBLwsShpj1hF5CrN+TdUUSg9kqql2ACMYPx1DcmYFtNo+y3qvCFtEPEkOfC7dRYug8Z2Ix3d2NcHeDg9zTGySofmFbI1jC+qMlcRPciYBccT8YAiHRZCoYGKhFwLMwVILSPOwWAB6w54EguyBjN0JD9fypBsEupOfKSa9FcK+V2XaRRtbJBqTbUBXZC6ZWM4mKXiAy1EdkrKtWKbgDo0mlFHaAYkN1z1o9F0fJ0bV3uwG9VVvcK0Pl3ha9Op9WphMlvo1WnEj3T30TdF5ltAOg+M+hQq/XBFvn/oWGL3Opg6xv8YPPBFtE1+NXmgy1SOLIliH33m9UBcAAcAAfAAbCZfgQYAAbyA3PPbINeAAAAAElFTkSuQmCC"; const texBlockDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTE0NDc2NTI5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTE0NDc2NTE5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz74iYiRAAACBklEQVR42uxZzUrDQBBOpCL0JuLBa649to9QDz6AvoDQPkL7CM0jGPQF7CO0J8/GW4+JJwUFyU0QD/EbmIEldNOs9GcDMzBksn+Zb3d+djdhWZZBm+koaDkpAAWgABTAYakjwmq18l7ZXq/XaAWuwZ/g0hN+B181NaFj8D343KOJvwA/uPhA6KH1hE0B/IJvwR8eKf/GOtU7sUFzZg2jCsAlDwh9/XS9PCCcnXyHTX3A2vhQVDepnQ2Zb4LHzFK9RPa+bJhBR3jcGUU5mPpmRtkY4yW78IECnPBHA5ZTx++klT5zHndpqf+/D6whmpk5ZnEBOYI8htyXlYFMMzuy9B2gfUpMMto+40l9C5QVeCcQVD/YmhObhIFjS3nKJmDOXp9XR4hAnVa63oAJxATKU92QgB00jLLdSuKLaYWIIU8Ns5O29B4zsAmvbu5dHmDnDyzKmVk+8i2RZVC+rIlcRI+Gw87Yn7wBkNiiFBSNJBCwL0wFEMqHOwWAD2TscCSXpIylacz2PzZBsEnJGEXFtGishZjdLsKozGxUyQ11jp1SeCWlONmlRoTKjeiVVHKF+0FB7kblTExp22UrsSEPTG2h2HUrQTqtOxN3tmD31Zm0RZz97EZdd6RPL6911ViZ7n4B+LYT1RNZGwHoxZZebOnFVosutkL9zaoAFIACUAAKoM30J8AAccYD/WxBuWsAAAAASUVORK5CYII="; const yamlBlockImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU2RTZBQzQ5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUU2RTZBQzM5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz66XCDdAAABi0lEQVR42uyZPU7DQBCFYwQHSEGRlhK7Q3SUbnIAcwEkc4RwBHwEW3ABcgRc0iF3NmU6kKDxASjMW/QWrazE2kggj9GM9LTOei3NN/szu5ug67rZlO1gNnFTAAVQAAUY1w7tQ9M04p0Nw9CrBxLoA+qE6A1a+g6hI+gOOhYU+AV0v88cCASOnsAX4BO6gt4FOf9Kn4YnsWNrSpdRBdgnD1h7en4ReUC4OD8NfOfAzsZj2VBQ/+8ciKJoBXWmdOoeWJeyfOx9Y+tz/v5uOwpAXdcZigoyICdQwm3GDbRhs9i8cz5Lpa1Cl9AcyqmKYK6tGO0YxZkoADi7YcRjglxvSXoJnJ8TxLQvReUBRryFMjxXvdcFwW4JWUhNZC3VNxvxlO/FAgyZnRNr9NA2yJyr0c/q9KeZeIcVXJHcyJu6Fk6XcCxzol86vZVxiFmrfn2fba8W7ZHSZD2Jmdj45HuknPZmTvKGzgtA2vDRA80UAfReSO+F9F5oQvdCgf5LqQAKoAAKoAAKMKJ9CTAAQ1XEnKr52QUAAAAASUVORK5CYII="; const yamlBlockDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU2RTZBQzg5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUU2RTZBQzc5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4a/dtTAAABiElEQVR42uyZT0rEMBTGJ6II7gZx4dZtl16hGw/QuYBQjzAewR6hRS/gHMFeoctuZ+eAgnQniIv6Rb5IKDMlA0pf5D34SCdN4f1e/rwkY/q+n8VsB7PITQEUQAEUYFo7dA9t24p3NkmSoB7IoFeoF6INdBU6hI6ge+hMUODPoYd95oAROHpMKMAndA29CHL+mT6NT2LPVpQuowqwTx5w9vZxIvKAcHr8bkLnwM7GU9lYUP/vHEDaXkK9Lb26R9blLJ8G37j6kr+/204CgL1RgaKBLMgFlHGbcQut2Sy177zPcmmr0AKaQyXVEMy3JaOdorgUBQBn14x4SpCbLUkvg/Nzgtj2tag8wIh3UIHnZvC6ItgdISupiayjhuYinvO9WIAxc3NihR7aBllyNfpZnf40E++wiiuSH3lb18HpGo4VXvRrr7cKDjFnza/vs93VojtS2qwnMRNbn0KPlHFv5iRv6IIApA0fPdDECKD3QnovpPdCEd0LGf2XUgEUQAEUQAEUYEL7EmAAKI/Ebx/P1aUAAAAASUVORK5CYII="; const pythonChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzQyOUQ0NjBBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQyOUQ0NUZBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fq2h0AAAC7UlEQVR42uyaXUgUURTHZy3KWsoESaMI6yWSFWWFRHpIQvrupYKicDEUxAcffMgPxAd7CsSH8kV6kBrooai3oLLo8yGIWCiG6EPK7IuE6GPpC63tf+AsDMPuzN29906zMAd+zDo7d+b859577jl3jaTTaaOYrcQocgsFhAJCAUVuC50nTNP07eGJREK9AAmLgGqwEZSBKPgC3oJH4KcvPVCAkcPdYB+ozHHNPJgEp8C1oMwBansCWKDLxfnMi9oFroKzYFEQBAyDPnAHHABnRIc+GAmCgL02hy6BdvBesO2RoAwhslV8XAGW+R08VNyIJuVlsDkPAYGKQuWgNc82P/6rgFgsZliWdQgfl/CpaJbIct3lFnN0j2Qy6fmseDwuJYAWp6Ngv91BOK/i5a0E5xzn7nKE+qWqB06DDk3DdzlocZxr4bm0G/yRjUKtGp03bMPPadt5YZQOo70anf/r8X2PaIjPdVEdzVWNAp669ADZelArI6BRo/O0DTIKdnpc1ygjYJ1GAX0Ioe9wPOZx3VqZKFSWh0NT4An4bTtXmmWIpCiqwflXnJVGBRZIrSvxC9AJh+7j2OAyplNcDywFW8FFAeczuVXBAryW+pegCc434/gGVGgYat9kBMx4tBuE8/U4ngcLNM2VDzICHnq0ewDGNTpP9lgmCiV57BouNW6VRue/g5syAiiZMn3azchmpugccFuuj4OPOb6LahRB2zBDKnKhWbANPHMRoXqFvge2gE+q0mmaSDW8KpY43pKXVYsOA9u8SumoyChznHZWZAJ22yXrJGc3qOi2SCE/MXEp+Fo0X2GjVGOxo9qTLin92p0+yKlGP//9NQj7QqJGkewCT9Ix1TeXEfA8j+J9B39uE0xVfNkXorr1FlgjsLNxhSMSFfK0/Xg4CD0wxWn0BO3zCD7rJJeKVhB6ILPY0abuANgDNoHVnMtT1PnM9S8lfzcMDT9yqEoHZrknJgyfLRL+q0EoIBRQ3PZPgAEAXgON9EXSzVMAAAAASUVORK5CYII="; const sqlChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzQyOUQ0NjhBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQyOUQ0NjdBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6BNCZzAAABnklEQVR42uyZMUvDUBSFb0xoCASdnBwEwUFwUkdBxM1NHPoHOujeSQfBxVlwcHTNILi5OCtY1EGRKEi6JCARwSGR2CT15DUVhwq1aVJK74EPSuhrz9fXR8uN1Gw2aZgzRkMeFmABFmABFsgUpZsnGYaRe5FyuZyfQIeoYAksgjkwDaaADibSnf0CHngDr+AZPIEr8AjiwnbgV9bANlgHWpdrZjpcc8EpOARmUWfgGFyAzX+U/yuTYAs8gEpyoVqt5ivg+34lh6++7LruUSE7YJqmbNs2BUHQl+ae55FlWVSv19VCzkAUReQ4jkBVVdJ1nTRNE49LpRIpikKyLJMkST9r4jgW68IwFOIJ2ElRvtFo0CAOsUi7zND8kNVqtVxLZHl9/ivBAizAAizAAizAAizAAizAAiMhcJlTh/OiBFbBPvjsU/E7sEGtIVkhAsmocA/MggPg9PB+yZjxBKyABXCW9VPoZSphgx2wm5ZYBvOp2Di1ZqPJ3PMDvIMXcA+uwS31aSaaRaCd5P7sTcrAIvF9YhZgARZggZEW+BZgAJHnc+7qw5G3AAAAAElFTkSuQmCC"; const d3ChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTFGRDEyNTFBNDdEMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTFGRDEyNTBBNDdEMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxODljZjNjZi01OWExLTQxMGYtOGIyNC1mY2U4OTNhNDczNDkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6zrxzAAAADT0lEQVR42uyZW4hNURjH93GO0xyDGRIScktNhjouceRh8uJFChHmgYcjt0xKqcmDUkTKg1wyDhkPJDNIvIxLMjQMjTIIKTNmmpSGJo7LOOP4r+Y7tTrttfZa+3ac2l/9au+9zvpm/ff+vm9dJpTNZo1itiFGkVsgIBAQCChyi5g9TKVS/9Ugk8mkngDu68wBpaAfpEEH+CHpMwuUKI7rF/hg4c/eFyAbAZ7nPWOzXid4Cm6B66AvT3Q9CVGxDHgIToMGunctB2Imz0JgClgDzoMucBiUUXs7SICbGi+wClwCrSDupoCoQn/2lfaA12AJPfsGVoIrmmNhg38EVhSiCk0A91i+caGxAdzX9BOjUKoqRBkdCurAVk7EWvDJhp96QQh7Pg+wHDnOvcHPYIcNP5PBJqdV6AvYQiLHgWlgEZhp4TNMSVkJesFVUAvK8343FlRLcm01OOVEwHcKiXxjVWgzqAHDBX3HgwNcOB0S/O4iuC1Jak9CiE1me0EFlT6RMZEzLHzdodJrZqO9zoFusBQ8k/jepeDnp2Sm9jyJ0xTHfwTt1VRVZLV/ruQFOUpiVXsHGsE6k7ZySvxmul/Olcc4VSjRGFr9EsDshkAAs/mcgH10r2KNfs4D7ZK2qdx1p6K/t/RSfBPQJ2kbxV33KvgaoPKb8VNA2CLR+cGpWFT1D7u5mBMZ/9ZLFV/GWTDMTwFxi3jO2RhFfxPBRj8FrJK0tXHX+2mvsJ7WR902fbpaRhM0I5tZD3jJ3T8xWQu9ESydF/jxBcooXkXWYNH/I2iR+C7xUsAkcJcWdSJLOYyCkBcCcktlFhrzJL+7ZjHBMZsNFgvavkoWekrqo7Qr+kvr/ulgIS2+wgpnPrXcPVtmjDT5gtslY2hxmsQxOq+xY7u58rmMdmi6drkQe2JmZ8BJLhHrbPh4RRXKVwHs1O4It41kCXiONug6xo4xt6muhdxaTnfQAUAT9+yg6mTEWYbyrlm1g1MBbBI6RnNBP+fzKNip6auHZugHOp10BfwGL4zBEzdWJh9T6OSskmI+oeGTHUteACfoJMRwS0CaKkiErrtoQzJgEb81JmdAIv/vjcHDL9sWsYjHJhv7Y18tFPyjOxAQCAgEBAKc2D8BBgAUsKJ1efpEZgAAAABJRU5ErkJggg=="; const stanChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzQyOUQ0NjRBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQyOUQ0NjNBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4hld39AAAEA0lEQVR42uyZW0hUURSG94xjKuoohYw5KSkaWWlToCVlFtRDkPjQha4QvURRQWT40EsvgYTZQ4XVQ1HRDaIbdsGiMujiVDaU0RQ6mWWljoqWtxxn+vdpJSLNucweHYVZ8MEcZ+856z9nrb3X2uo8Hg8bz6Zn49yCAoICggLGuRmG/6GkpGTMOFdYWKhdgMCDmAlSwSQQBnrAV/AefB61N6DBuJMrwVqwBETJjG0EN8FZ8DzQOcBFbwd14DzIV3CemxlsA8/AY7AgUG9gOrgA5gjccyrYAD4A52gKWAEuqnjaw20APAHl4C54G4gcWEXOqx3fDe6B6+S4M5BJnEuxrjTWDR5Qol4DvwKyDwwzviReBhNkxrjAGXAAfAr4RjbMisFkme/tYD14PWZ24iE2A2yR+d5Jy2GboA+htLplgmR6kx5/CNirsE8c98F5I5gLLEQm7eBDQ/QVuCMqgC+VqxXivqyystLrgLy8PPMQRy20d6QAnYJPm/0hgJcGkTLzrsL5b/8ukpKSTMnJydzBHDCfnI3zMaSWU1j1iwhYrDDv8ESYXq8v7enpKWhoaIjt7u7mQlh0dLRoXkZTmFWJCEj3NsHj8VjtdntRR0dHwcDAwGA4OJ1OCaPRyMxmM4uLi2M6nc5XERmiAqZ4m1BfXz+7ubk529v3nZ2dEg6HgyUmJrKEhARfhMSLVqNGbxPwZMNgij/c19fHamtrmdVqZU1NTVoFRIoK6PM2ISoqimVlZbGUlBQWERGheIPe3l6GkGM2m036rNJcogLa5SaFhIRI4ZGdnc0sFosUJqGhobI3Qs6w6upq1tXVpcavdlEBH9X+QExMDEtLS2M5OTksIyODmUwmZjD8P7X6+/ulsFJhdaL7wAuwSUvQ8kTFyirhdrtZa2srQ7KztrY26XowuCMjea+sFHtVogLuC/Wper20jHJcLpe0vDY2NrrDw8Mfpaam8rJhocz0N+CHqAB+kmCjEkCsWjQYeuPj40+DYtqkahSmXPJXU39UwG9eTVrBHpBIhwCtYJ/CPB5ep/wl4JyWZKKOjDtdREXbPFBKleZ+anbWKfwGr3A1bRpy5fRvsAvckhnTAiqoeqyga24J1EvwXnopFWdK9p2E+rUjuw1OgK10/ZPOdR4StiG1Uz4lZy6d0Gk9udjIK5GRaOr5W3hHS+tLajGz6OkepM9GwVzfSQcCI3IqwUPpCNhNxyQmP7a0Hur8ynxesjWMPQau+NF5Hi5rwCGhPUfDWP4mdlCsOwSdL6euTfiB6H28eToltpZjQt4i3gCL/PQQVOeAt7dxkpgFltG6Pw3EUj3PT+a+sL+HuE9pRWsZ7YMtNVajojwYMdMF/1MfFBAUEBQQUPsjwACM9wmzfWllAwAAAABJRU5ErkJggg=="; const bashChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM3RDkzRUFBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM3RDkzRTlBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4laDObAAABsUlEQVR42uyZP2vCQBjGH0vFQSnxzyQIDm0yFBwUnBR0ar5KP4STH6Sbm2uJg2CXSgs6mEVd1CWDiILgIA7pvUfboeIiOc2V94GXJEdI3t/d+9xdSMT3feisG2guBmAABmAABmAABrimbv82NJvNqyXTaDQCG4E7Ea8ifMXhiDACHYFvvRuG8ZhOp5X2+Hq9ftpsNh/i1AraA8qTJ6VSKTqYPAv9q1nolDKZDMrlMoQ35PXhcMB4PIbruuEHiMViqNfr2O12aLfb2O/3KJVKyOVyWCwW2G634QbI5/OIRqPodrsyedJgMNDPAzQSWpp4Pp/L8qlUKshms/qZmMrGcRwUi0XUajXZNpvNMBwOf0sq9CVEifb7fbRaLfR6PSSTSdi2ffWyOmsd8DxPGjoej8M0Tf0AtPOAZVkoFAoYjUaYTCaybKrVqlzMptPp0b20RpwSTb/0jIsC0AsTiYRM7Ce55XKJTqdzZGK6N8gEA9tKUM+FZfHi3SgDXADAFZ96yl++Wq3o8KLCxLb4Xn0Tca+Y4VPEswoAT8QDe+ACivBPPgZgAAZgAAZgAAY4X18CDADTlai6K3tzngAAAABJRU5ErkJggg=="; const bashChunkDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTcyQjFERTFBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTcyQjFERTBBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5+l8fkAAABsElEQVR42uyZMWvCQBiGX0vBrYYE5yC2DaaLuLnGoR3E1SGLo/0BIggOwUHE/2BdBEcHKZ2ELoU6iNBBHF0EUXTVKb072qEVl+JprnwvfFwSjrvvyd17lyMh3/ehsi6guAiAAAiAAAiAAAjgnLr8/aBWq50tmWq1erQRuGLxzMKXHC8stKOOwJfeNE27MwxD6htfr9f3m83mnV1ax/aA9OS5dF3nxS2tQv9qFTqkxWKBbreL4XAo7qPRKPL5PNLpdPABdrsd6vU6YrEYWq0WwuEwBoOBgLFtG5FIJNgAk8kEy+USjUZDJM/lOI4IpTyw3W7VNHEikYBlWWi325jNZuoB8GlTLpcRj8dRqVTgui76/b7whjKrEIfIZrMi+Cj0ej2MRiMB9u0LZfYB0zRRLBYxnU4FBG1ksqfQeDwWBi4UCkgmk2LudzodsZmlUqm9us1m82BbpVJJtHFSAN5hLpf7kVgmk4HneXvzn9flcIEzcVA2LvoaJYATAXywo570zlerFS+eZJj4gZ1XX1lcS2bgh4tHGQBzFjfkgRMoRD/5CIAACIAACIAACODv+hRgADijl1y+nhxTAAAAAElFTkSuQmCC"; const rChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM3RDkzRTJBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUI1RTMyMjRBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67m8jUAAAC0klEQVR42uyZTahSQRTHx0itNFEh45kGYvGI0KyF4EZcFFLUshZua9OmRZu+3jKoTbRp0TIoLIJauHBlJEEZhiAKkosUowTtwxAiVMr+Z7hKiVffFe74hDnw415G5zj/O+ecmbkahsMhW2XbxlbcpAApQAqQAqQAKWClbftkQzKZ1P1HE4mEfgI0mAm4lVnsgq+rEEJecAW8AT9BHXwAX0ALPAVngGGrCbCCW6AKboPIlNlzgbMgBd6C6FYRcAC8A1fBzk36DYOX4IbwJJ4y+FdgbcGHcxNYwPVlCNgBnv07+Gg0yqxWK+v3+8xkMjGLxcKMRiMbDAas0+mwSqXCms3mpJ9roKjkh9AQopAJ/ld2MGi73c5cLhcfeK1WY+VymV8dDgeLxWLM7XZP83UP2EUKoB+7PNmYz+dZNpvl9+12mxUKBS6ArqlUis9EKBSa5m8PuCRSwDmwe7Kx2+1OCxFuvV6PtVotPkMqdl6P8qom4OSiDmkWVGw/OCxKwFGtjmw2G/N4PHwWZtgRUVVo77yOVIHW19f5vdPp5IOnp18sFmd1WxMl4M+8jlSJiJFRUlOSU56I3P2qCfgMDs7qWK/XWS6X46ETj8fHST7H2qJyoLZZBzToUqnEZ2MUUjOsIkrACy1OqtUqD6FgMMhnRMW+g4IoAY9BX4sjin9ancPhsNpXHoHfogR8Ag8mG30+HwsEAvyetg50T22jUKJVmUIpEonwz8xm86jrL3BH9GaOdpCngGfU4Pf7x5WHVlyCQocSmowEeL3esahGo8FXaGVb/VG0gG/K6eo12EUNmUxmrsN0Oj3Z9BDcXdaBhlal0+DHgv6fgAvLPpHRyeqYxspEgi/SCwitxUCvMzEF+XFwAjxXDvRqdX6D0gXcB7r//aP1tUpGwQgOgX3KyY3y5b0eK61e74Voz1xSWKoZ5J98UoAUIAVIAVKAFCAFLG5/BRgAItPLbETXRdsAAAAASUVORK5CYII="; const rChunkDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM3RDkzRTZBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM3RDkzRTVBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4NOADFAAAC+UlEQVR42uyZW0hUQRjHv43SdW2ll4xVK9rNSiXbDMJNUQmlMqMe1h566KGCiMKHeuj6GNRLbz740ENQUIQFFXaxNS3abrK2SW4XUkGUvC7horsWtf1nOCty2ItHOaML88GPnZ3dmTP/me+b8805hnA4TMlsSyjJTQqQAqQAKUAKkAKS2paqKxobG3W/qNPp1E+ABksBWcoqjoPRZHCh1eAseAMmQC/oBiNgCNwF+4BhsQlYDq6Ab+AqcERZvUxQCx6Cd6BssQhYD9rBOZA2y363g1ZwUXgQRxn8K2CZ4+RcBungwkIIMIJ7Mwf/qOkJjYz5yWRKo8nJIA0ODdN4YIIyzOlkXbeWSh3FlJOdpe7nPPAq8SFUAHOZwpkVE8Egff/Ry8vZlkwqL3GQ0WikUChEL91vydvpo1PHj0QTUQ+awS9RMbACnFZXVu+q4gNklrdxA5XsKKZtRXb+eabuJF+J5pbWaP2tBHUig/ggMKsrM8zmaLPLLTU1hTbnb5peoSh2VI/tNZaAPXPtkK1CDFsDCkQJ2Kq1o/FAgNzvPXwV4tgWUUG8KlHDUb+funxfePnn4BB98Hzks19eVhqvmUWUgH+JGrIdhxExe2E+D3IWJyKz31gCBkBuvIaVFaVUubOCu059w/XpIE9gw6JioGf2QWum/Xt389WIuFQc84kS0KKlk4L8PO5CD5qe8hWJYX7gESXgNvitpSPm/yytePzseay/3AJ/RQnoBzfUld09PeTp8PJyX/8AL7O6iCvVHqjhruR60cZ/m5qanoMguCY6F2IZZDXIiVS0Y1CRnYfdcRnMdWxWK69jacWnz13kanvNv+fm2vgdWkmr+/QQYFA/Xledie3ADUzzuMZNcFivM3GifZn5S808ssg74NhCn8hYelmkcWdigk+AQ1o3A73OxCzFrARV4L5yoI+1z18CNtAAdH/9o/WxikthGTsSsHONcnIbA1/1uNPq9VzoD+hUWFAzyJd8UoAUIAVIAVKAFCAFzN3+CzAAV+PTMJygmAEAAAAASUVORK5CYII="; const rcppChunkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTcyQjFERTVBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTcyQjFERTRBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4kpuQBAAABaklEQVR42uyZga3CIBCGqRt0ha7ACq7gCm+FrlBHeG+EOkIdoY5gR2hHQEiO5EKOSgPkxfhfclGPv8CHvbsaG2OM+mQ7qQ83AAAAAAAAAAAAAAAAAAAA3wug3C8y7oH11p9ORj5Z79j4j/WBxi70mev7YL5kfbivmO8BjDS5ZosbirW0mAng/AYc5EzxX3YYyfpcgJ6dErdVONk1ctqabVYf1acCxHLATb5YvwXxK70uLLYIMWcP63d6f87QH05iTbfIJow5gEYAi9mDzVlDLwL4JG0L1Iitsl4EWBhIV6jYVQM5Rb7GjeWCZEPi/P4A7pX00ST+Y6VzDMbObxZX7Ba80IHcCugPNbKW1eXQn0F+eN1KwP76iWJhQibpSzQyxbqm90FI7pnV9Wmnax/SlwJIsTnS9LL0uY3sq55G28r6qgAd25CuoM9+nN6zUahQayl9ag40+IcGAAAAAAAAAAAAAAAA/2YvAQYAr4Gq1H3L26AAAAAASUVORK5CYII="; const rcppChunkDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTcyQjFERTlBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTcyQjFERThBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7K9YAuAAABiUlEQVR42uxZgW2DMBDE3cArsAKMkBVYgRVYIRmhHSEZgYwAI8AIMIL7Fkf0sUxrC6woyr90sjifbc7wb6IoY0z2zvGVvXmIATEgBsSAGBADYkAMiAExIAbEwCOUUg9QNISBYICWkLP+mnBGX4Vrrm+c+YL1wWF/UnIw/koYCAWua7OE5TShMc/RWg7anNCB/wYXqw+C1wBbrHLMTuCbvzjwBbvZIlYfamArB+zkIz3Km8Nf0I6MGz2cfQ16au64PO3Qx+UAdksTZk9+XNQSt8D5e7RFIr33CeRo9QFFYk6s9xpYH61NrPygapfMiK+M9myCZqNynQPnXzfgnki/mcQ/aG3pvDo3f/pn8VWnUev7jZyJ1YefA6jznfHHgMVW7aqz5bFm41twhbNekH5XGaUdmAklK5u8jJa23zPM9lVm2YUJXIlXMjtAH3cSR4zvfIfeXv3eg+yjvkZ1Yn06AzgndOjpGatPmgP4WnVjOlAfBCX/0IgBMSAGxIAYEANiQAyIgZfFrwADAPq+gHa7/SY2AAAAAElFTkSuQmCC"; const tabsetImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABuklEQVRoge3VO2gUURTG8d+KrBjSpbCwFGITUWwigrUWIoggGBu1UMFGsRK0UrQRFAWxtPERRCx8gI1gYSUISjoJKMQnKSUxKhuLucFxudndyW6yCOcPl3OZc8+53zdzZ4YgCIIgCIIg6Bc1OHfhUi5Xx3EcwAgGO+j3HRO4i5v42ROVi3D+7BmrF8mtx2NsqdhzENvSOIzd+LhkhR2QM1D3r/gJXMNzfMZMpmYt1mEHTmA01T9J8wb2YSc2YKCNrhlM4hke4FcVA8dK4m/haKsGiVm8T+M2LuMUNuO04ggOt+lRZgCb0tiDk/iWW5gzMJbiW4WZduKbaShEj2K7wsiHlJvEPbzCNH401a7BkOIG7vfX+FUcknmnVmUEbE3xeq6gQ+ZxI82HUnyEg3iIqYx4mMMnPMUR3EnXh7E3t1HOQD3FF1VVN/EyxRre4SJ+V6hv4IriJMCu3KKcgQWmKmyW40tpPq76UaR4kvfTfGNuQSsDs0vYsEz5iLzuos+bFOu5ZCsDveRrF7XTrZIrZWCui9qWH5KVMrBshIF+s/Annl/mfXrVv7lP7b9/AkEQBEEQBEEQBEG/+AOzUVA5Dso0kwAAAABJRU5ErkJggg=="; const tabsetDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABq0lEQVRoge3WvYsUQRDG4WeWY0UxMzAwFDQxMBFFMNZcUMTEQEQQQU0NzIwEwcjQTEX8A0wEQRHx8LjjIuUCQfCDC+X0VLYMtheWpXd1P7xFqB8M3dM99U6/1dXDkCRJkiRJkiTzooGIqM21cRFncAA7/0LvK1ZxH3fxYyarHELTNN1ORAxeeyJiKaZjqejU9GdyUd+BNl7hYLlfxR08xUdsVJKxHbtxDJdwuIwvl34HJ3Ece7HjD8ndwBqe4DF+DtuBmoHLZcFwDxeGCQyhhVu4Wu6v65bgvjE0+nmLK/gyODHMwEscwQoOmayOGzzHUazjfRlfwwO8LuPfB+K2YZfu7p/SNd4zcW5wLcPOwGap4fNT1ujZotOJiMWIuBERC2PEtyLiWoldjIjTtTPQqmSvXdpnE2S+nxe9ROEdbuLXGPEd3NatBDhRe6hmoMeHMV5W41Nf/6HxzlGPwKPS3197YJSBbxO8sJ/++n4zhc5yadu1yVEGZsnnKWLXR01ulYHNKWJHfgW3ysA/Iw3Mm4XSVn9HZ8is9Ad1mv9+B5IkSZIkSZIkSZJ58RvPKHRtk6EDYwAAAABJRU5ErkJggg=="; const slideColumns = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABPUlEQVRoge2XQUrDQBSGv4hLKV21JxCvkHUp1YJu3HkLl4J7cekt3LnpolR6AI/Q4g26kta9LmYCZvqCCW0yCfwfDAN5vPD9mZnAgBBCCNFhkvDB5Ooa4Bx4BsZAr2GnkC2wBB4W89lnkuSVT42GC+AD6NfvVooecAuMLqc3KbD+WzwxGp5w8q/AELdKMcfQu/S9Ww4rwNjP98Cm6LM0yAbnAjAJi1aAbM+3QT4jczkLC1aATmEd4iJ+Kr47/MMd2m9SJUDpl1Ise2j/Hp3fQgoQGwWIjQLERgFiowCxUYDYKEBsqt4Hql5Kjt2/R5UAZS8jdfWbdH4LWQG2fh40KfIPmct3WLACLP38QjtCDHAuAO9h0ToDj8AIuPOjLXzh3HJYK7ACUuAN2NUsVYYdziVdzGer2DJCCCHEUfkFNzUn/saEG7IAAAAASUVORK5CYII="; const slideColumnsDark = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABM0lEQVRoge2YQUoDMRSGvxGXIl21JxCF5ADjvngel55AXHoLdx5AutcDzGKKN+hK2u7rIhlo01dmQjWZwPtgCCR54f9mwkACiqIoilIwVdjRNA3ADfACzIHrxJlC1sACeDLGfFfVYWRJ4Bb4AiZJ4g3nB6ittcv9zgth4jMu/Bsww0nmfGY+y8RnO0ASmPv2EVidfiHJWOGyADyEg5JAt+fHEL6jy3IVDkgCRXEZMXcXuXb4gzi3XiRGYPCinA57bv0RxW8hFciNCuRGBXKjArlRgdyoQG5UIDex54HYQ8lf1x8RIzD0MPJf9SLFbyFJYO3bacogPXRZtuGAJLDw7SvjkJjisgB8hIPS1eId8Mk4rxbvrbXtfqf0BVqgBt6BTYJgfWxwWWpjTNs3WVEURVGK4heX7CvtjShXcgAAAABJRU5ErkJggg=="; const slidePause = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAqklEQVRoge3TsQnCUBSF4V9xgCwhrmAtIVhYOY1gL06TykJCBnCEiEsEXMDCJ4hKbiMkkP+DNPfmXDjFA0mSJEmSxmnStSzWG4A5cATyNK6BHXALbv89V51PXz/PgmML4AJkb7MtsAKWwLXv3DQocPg49pKlXe+5qEDesSuGkIsKDF5UoO7YVUPIRQX2QPtj3qZd77moQMPz9ZfAPX1lmjUDykmSJEmSNDoPEhY2Kop88EMAAAAASUVORK5CYII="; const slidePauseDark = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAq0lEQVRoge3UwQnCMBiG4VcncAnxkgEcoDiT4L04TQeQDuAAPVRcouACHppTtQmCYqDvA7n8P1/Id2hBkiRJkqRlWqWWXdcBbIEzUMVxCxyBe+bur+dCCB8X2AFXYDNZDcAeuM1Ef5ILIbzk1nOPj+o3lxFndQm5XIEqsTuUkMsVKF6uQJvYXUrI5QqcGD+gqSHu/p7LFegZ/xoN8IinibO+oJwkSZIkSYvzBKc3OjurNp29AAAAAElFTkSuQmCC"; const slideNotes = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABMklEQVRoge3VP0oDQRzF8e9KSgmpkhOIV9jGJoRoQBs7b2Ep2Iult7CzSREi6dJ4hIg3SCWJvRYzC+74MxuDs3/I+8AwkGHgvczOLoiIiDRYEv4wPDsHOALugQHQLjlTaAXMgJvpZPyWJPnILWPDMfACdOJn20obuAT6p6OLFHj9vnhgbLjDhX8EerhTqnL0fJaOz5ZjFRj4+RpY/va3lGiJywIwDBetAtkzX4fwmSzLYbhgFWiUXQrMgc9IY15GgZh+vNaLWK/RIic77ImmbifwZ3tZQJd4A13ixtnLArrEG+gSN44KVE0FqqYCVbMKrPzcLTNIgSzLR7hgFZj5+YF6lOjisgA8h4vWl/gW6ANXftTFOy5bjnUCCyAFnoB15FDbWOOypNPJeFF1GBERkX/1BeIvaQaHZ5k3AAAAAElFTkSuQmCC"; const slideNotesDark = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABKUlEQVRoge3YMU7DMACF4T+IEaFO7QkQSPYBwsBWcR5GToAYuQUbB0DdOsABMgRxg06oZYfBjtQa00CkOLH6PimyZKfKe0ncISAiIpKxIpyoqgrgDLgH5sBp4kyhNbAAbo0x70WxGzlW4Bx4BSZJ4v3dB1Baa9+2J48iJ97hwj8CM1zJIY+ZzzLx2XbECsz9eAOsfr8hyaxwWQCuw8VYgeadH0P4RpPlJFyIFchKlwJL4KunY5miQJ9+/Cu2Oe5wkasOv+nN2J7Avx1kAW3iPbSJs3OQBbSJ99Amzo4KDE0FhqYCQ4sVWPtxmjJIiybLZ7gQK7Dw4wPjKDHFZQF4DhdjnxYvgBfG+Wnx0lpbb0/GnkANlMATsEkQrM0Gl6U0xtRtJ4uIiGTlG0L1bPXDdsBoAAAAAElFTkSuQmCC"; const articleImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQyMzIwMTVBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQyMzIwMTRBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6m6HrXAAABfklEQVR42uyZQW7CMBBF4yoXqOgCxGm6YsmOJTvOAfQUVKISS0T3vUAOAhvUcgAWSFRmLCaSZUxMzCSxlRnpiygkzjzb3xkrQkqZxBypeUIIEXzSeqe/JJFHKwA6oA3oV41ehcpAH17zSZcl+W3FiZtalcnZBbDBRn9APfPaZ5Xng3oHHfF4SQWQTxvy5C0AKgagkwuiDIC8Xk+f/B0AFUMN4jNGABUj0BnPL2IEUDEG/eN/4xgAphaIibbE0gBUURk4IG5GiAIg83xR2WL24P1WgDpLCVEAMPdu1Ox1oxqVSCwarFal2QF6zmmIJXKZ8r615bSPiR81dTT7ARIzBWPiAg8Umpi3lG01cRb7CJAZiU3MJmaA5koJkhUphBF4alXgVYhNzPsB3g80a+KU6kFsYgawxx/Ow14jLheii4cHX4B8qVtqjdWVfB9+vow87KZ0fOTbJfV+5DOlnv92L2cXQII3f+N0qjPxPWgNei3qdNd7IMjgYo4BCOMiwADckNqYRvM/iAAAAABJRU5ErkJggg=="; const articleDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkUwMDIyMzhBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkUwMDIyMzdBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6y8QMXAAABe0lEQVR42mL8//8/w1AGTAxDHIx6YCh4QBiIVwHxcyD+T0N8GIibSPUAI4FMDHL8GSBWoGOgLgTiBKJVgzyAB6/6DwHbgFiSgFpyMQw4AvFXKHsOsfoJKXgONZBWjkf2AIjtDsQ/SfEEKYbTwwMg7I/kiZlD0QMgHAbEf6DiM4aiB0A4Doj/QuXicOkfTPVAPRp/ERBnQNmp5BajMElGmMDJkyep6mpzc3NkBzQAcSMhN1CjJj5MZkWFDTSieQBd36BpSmANQWCMYgt1qtXENE9CSEmJaDeMtkaHgwfIycTEZuohEwOM1DCEhUx9tqN5YNQDA5uJDw/1GGCklkGjmXjUA6MeGLimBFVKpMEQAxSVSKOl0KgHRvsDo/2BAS7CSB2VGAAwOioxpD3wAkpLDpD7JKD0S3I9ACvq5iAZRi8gDcRz0dxBciYGTfKdBWL5AUwlD4HYBIjfkBMDb6Ga1+CLRhqBZ0C8EogNcTmemBgYLYVGPTDcPQAQYACKm5vtMHYXngAAAABJRU5ErkJggg=="; const bookImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM3NTgxOTRBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM3NTgxOTNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VkqIQAAABJklEQVR42uyZMQ7CIBSGwTi7uLs4e4SODr1HJy/iDeoBXIyDlyBdPIRuhcUz4KNJk4bUYiMgJP9LfgaSpv8H7z1C4FprlnMsWOaRPcDSnuCcJ23YTnmkUA4Aa9KVJM0OBtaLdJmdU0ONmH9GMG7r/LVfB4BZeV2WpW7bVocOIcQQYucDoEubGOb7GADUpI0LgNumrTaqx1pXyLD+fyIdptpo6gDdFM4BAKQKUBRFl7NzZb7Legd8NgV0IRRxDkXss2j/sgMhawhFjCIGAAAAAAAAAAAAAAAAAD6FMoOUMlsAYYaqqphSKriZpmm838jMA8eDtPrjIv90IzNPPlvSPdkccjxw2LBHFv+5adrvDIA+9qRbJPO1C8BVA0lmDA4yAHiMtwADAHuHFQf8ilDIAAAAAElFTkSuQmCC"; const bookDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEExMjc5OTRBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEExMjc5OTNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz64wBZQAAABL0lEQVR42mL8//8/w1AGTAxDHIx6YNQDox4gDISBeBUQPwfi/zTGR4C4nRQPsBDh+DNArECnALWGYhCoJEYDI4F6ABTyoUdPnmNo7JzO8Obte5q63kBPg2He5BYGaGxrAPEnSpOQLYigh+NB4MKlGzCmJBBfA2J/Sj0gASLo4XgsQBqIN4yWQqMeGPUAZfUAXjBvSjODga4m6aXN5esMSTm1QzgGGBkHRwxQKxRHM/FoJqZjph2YGKBiph3NxKOZeNQDox4Y9cCoB0Y9MOqBUQ+MemDUA6MeINYDL0CEiLDgkPXAYRBRV5bJICwkQHPHGOiqk97ZIzA/AJrgeA1SN4CBzEhJDLwFYl8g/jGUM/FWIFYB4hNDuRR6CsQOQDx7sHmAcXStxKgHRrgHAAIMAFm8Wk+uIk/fAAAAAElFTkSuQmCC"; const broadcastImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzcyNUUwMThBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzcyNUUwMTdBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4NLP2TAAADt0lEQVR42uxYbWiOURh+XxsbxkxTWkY21DQ0jJJF9sO2IiUJLX8sKVmLRvkqShtZzQ9R/rBCGUJE5qvURPke08hXrWGfLbP52Os+dZ26nJ7XnvO+e5fNc9fVc7rOc+5zrnPuc879PP5AIODrzzbI18/NE+AJ8AR4AjwBYVm0Sfj9/n96wObF+9+EUILgmuCLYHoExzNSUCuoEUxyvSQMBxsiqFavCrojLGC4oBl9vRWM63G8LgQcg0OFfX0QFaupvweYwJAF5JCzy4IoqhsvyO2FAc8TzDC4Eup3R6gC1P54ASctgiSqWyRoR11GGINXE/Jd8FOw3uDvwb/qJzEUAXk0CxuJTxa0gm8QDAtzBarg6xcmRtscp1WwEXABjesFscSfBa9mLbsXQihF0AifrwQxVHcT/DtbAWpWO9G4jBxm0KwcNAaSbcxgMEvHRmVbRX7XEr+G+Jk2AhZSwyxyWEZxOcrYiD8En1wIuAIfhZwACB6Dv0N8PPaI4jfbCChEo07jGKsFf8ro/D74UhcCVuLdZmMStlBoxhOvhZ2wEXAUjZ6QoxG4yBRfQHwWdZxEl1+5oAkDLaeJUKfbB7QpIj+zadUXEH8c3EMnAcFSidF4fiRuImbbh+NV23I8H2HDK9sv2AQ/CSjvQZ2ahKsoLyM/z6icSuUGPJNsciG9hG1GPqStico6tagjLt/BJ6/aSzynEtcl6ECZQ6sFz1gbAUN7eLfLuHR8OMddZ8V02rF1Uwj63PgNJqDdoYM2hxBT9gbPycRVBMmptE3B8zVxgwVxKHcQH2OIcyVAD3asw1LqPEjbdTwz6f1iwSG0aUF5J51aeUZb02c9lbXPRpt0+gDlQH4KlW/gS4wcXudFW12Ez2I6beYGucymEX8D3C2bYzSfnHFo3AZXR8J8OCYV/9npM9UwnR5UG/xp8K3kw0951xEbAekkYB11UkR8jnFqqS+2ky5WYLvgKe0DnSDq1KUiSOpSYCMgCudvAEuoLZHCpaYXMlFtZ2ig84kvJT7VNhs9TGluGvG7yenFIEeuje0lf+eJj8Vm/iMjsBGQSY4rjXO/kuqWhDH4ZPKjwmoM1RVT3YZQPykvkZMVxvG7TXDXuBNC+StyDhs0jvg03AWq3/d8sdkKSKGY/2qk1pGyCTjl9F+Q3HD/SixFrh/Af6HoCAuoolXf1Ru/VfTXVhtyoPgIC3iOmS90dfG6FKDDaVYfhNBf+zHH6zcH3d9+7kb39MJA+bnrCfAEeAI8AZ6AgSngtwADAG0WCD/0TAVFAAAAAElFTkSuQmCC"; const broadcastDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzBGQzk0QTFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzBGQzk0QTBBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5HxpBcAAADtUlEQVR42uxZW0hVQRS911u+MF9ZhKSRZpBYaWBBGEVCllAEEVEh0kdEEPlRWB9lUBBaJNhH9OFXfRRohUlS+cggKAoxK02xoBDE8o1kauptD6xDi+HqPec+PqQzsJjNmpk9Z81zz71Ot9vtWMgpxLHAky3AFmALsAXYAmwB/4WAOMEzQb9gQxC/J1rQKWgXrAmUgFBBnWCXYGmQB3RGsFyQLqgXrPTaQgVzXlDp/peumqjvL45Qf+8EofPV9+ZsNzl7InBRWbJgTwA+eKtgo8aVUr8XfBUQIuiAk2FBIpXtFIyhLMuPj1cDMiWYFpzQ+Dfwr/pJ8EVAPo3CKeKTBCPg+wSRfs5AA3zNYGAMfrOZWZjPcQ0a9wrCiX8AXo1abgCWUIpgAD67BGFU1gT+m1UBalQn0Lic+CwalRtam1xtBOdCBjYqc4fJbyHxR4nfZEXADmq4jfhyWpex2kb8I/hhQkAdfBQR5xS8B/+S+BjsEZXOWBFQhEYT2jHWCf6e1vlb8GUmBBxC3SFtEM7S0owh3hB2x5O/uS6ydORdginYSwRrYTdR3RxBNi6hCrr8lD0oGIIdirIqQQ9u92Pkpxm5S5BJfBvyDCs3cTzyHuJWC5ywO4g/gLxV0Av7muA0/MTBvoyyWcFT2PvJz0eyU8nuQ55oRUAM8lEtHjLSINlGbNRNXIEHn8fJ/qzNtEqTgnHYscQPIw+3IiDCS91Jsl0Ux5hNxo9RkRo/S0vQYcbvXALGPHQw6mGJqfQVeRpxdz34rCTb2EtfiFssiII9TnyYJs6UAONjV3iYSpWSya5Hnk31iwU30WYY9kWUqX2Ur7XVffaSbfgcsBKNXqcYyEnxyW/wpVQ3muKicyaO0Ty6Y7bMcZmtJ74R3Asr90ABOUsjvhlcNwlTqAD/U7DIiwAjPHit8ffBj5APJ8Vdt63cA61kbye7Brl6LeURXyJ4LmgQTHvZwI04MguJS6IjtZZ8ZNKJ2GJlCbkQaboxhQafQMulPQCRqIEqmvEc4suIT7Uajd6iMHcd8ZfI6WNBhJ8ff4X8PSI+HJGwSm2+hNPZ5Lham51qKtvrx8cnkZ8PgmVUVkxlJ319UtaSk4Paa+284JUg3g8Bys9DbNAo4tWMj6Pf7/O9i808Now1/0sLrYOFVTjlVJr19u4243AfYn2V+k0ck44APTFVKvFW36xT9doaFUxqsXow8AkjX2SmvtPCn3wpiEhbgvzjlqV+rAiwf9y1BdgCbAG2AFuALSDQ6a8AAwBvAojnpL+08AAAAABJRU5ErkJggg=="; const dataImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM3NTgxOTBBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM3NTgxOEZBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz61F45xAAACrElEQVR42uyZz0tUURTHfTpMNvgjkzAILBIjQihUykVD/0DQIiVchCiTqwiKNi0K96GLDEGwFq1bCC0KxJUutB+uLDRRGKlQtGTyR1Ok0/fA98Hlos17M/c9RrwHPtz3hvfuvd977jvvnTNOJpMp2s9WXLTPzQqwAg66gMhuPzqOUzATzBYl7RYqyC3k495G0ADqwRlwDJSDSuW63yAFfoB5MAM+gQnwy8ge08li3WBYbjXAa3AHRP3MT8XZbcJ7PMQJcAtc5Pk2mALT4DOYAyvgJ3HtED1yFNSBs+AcaAGlvGYWPAEDfh9irx54rqzae3ATVGdbnf8BKwNtYFTp+5lfD3gR0MXOZb92iIPymfge47WDNMe5blrAK3acMD1xbcy7HOeFHwFewmicbVXAETHG9rLpKJTiyixxjx4xvPISdgfBBsdJmt5CroCHbOW8l9HIyXHSEuaawWOwxn77chHgJYzKhCtk5fmA9fJYbBm8BR/AAlgE38EW+MP4HuP2OwlO8+V3CRxnH+vgPnjDyS/yWmNh1PWA+3YVMffAJNjJ8QUm973jxN3FqA3DAynt0hpupSaurkyimqsepRe2uE2S9NIUxS9pfdWG5YGgrIbjLPvxQMRvxArK4PU0D0ttSmkFWAFWgBVgBVgBim2zLQmpxPPXtIAxtg8CFtCpjWcsI2tRPoP7pUwSQD7cyQKYnFwznZHpIqSydkO2lIGJS1XvpdL3UBBlFdcuaDWcr+ApaztSViz2kEaeAlfBI2ZyGeUTuivoypxrt0EruKL9vgm+sDqX1qoNkuScYDFLtY/c8z16HuD1Ez4XAa6dp4g4j+s93JNkKVJy6HEwkm8Oko8A3cq4ylKhPqz8LinlKvjGBN53kAlLQCBm/6EpdIuEnbxbD1gBVoBZ+yfAAA78GFeePSH8AAAAAElFTkSuQmCC"; const dataDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEExMjc5OTBBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkREMDgxNjhBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz609Kj+AAACfklEQVR42uzZT0gUUQDHcUdDLdZ/SRgEayRKhFBUmIekewQeLKJDhGKduhReOhTdww4VUVAdOnfrUBCd6pD251RhRcJGhfZPVivXyKbvg9/iMBTMnzfG0nvwYfbfe7O/N29n5r31fN+vquRSXVXhxQVwAVwAF8AFSFVWpKy7Fd3oRBfWoAFNgc8toIgveI0JPMcDzP+LAEewG/0WOvA2buESfiRpwItxKzGMw+jR80U8wVO8xCt8xKyUS52OyGp0YCM2oRf1+swLnMPF2AlMgAiu+UvlEQ6iNWLdv8lhH+4G2r4at50oHxpS4/M4BC/lF/+TAyhpPwO2A9xUw8MZfPGgY9rP9Tj1opxG+7RtyfiMuErbnbZ/A0X1zJTGaLPlnm/AZXzVfgq2h1A5wEltzfNR9KT4PZh623EGM2r3bJIAUU6j5iLUiGYMYFSPTZnGOB5jEm/wGd91Xq/V0DDDrx0bdPHbgbVqYw4juiYU1EZ7FkOoSc8bcRxj+OUnK6beQ4wEhmR+OY5AMfRemy5s29S7ebSq12t1FMzRmFHvTuriN4apUFv5JEcgbQCbpU2hPuhxxd2NlrStd/MBF8AFcAFcABfABQiURW1rlmmJ56ftAPe0PZFxgMHQ/qzdTvcGboPPoy6D+fAgFrSPftszsnCICexHjYUv3o0bgbavZLGsUrYltIbzDhe0ttOF6gjTyPXYg1MYD7Q1reWb2J3gJfiT7yj2Ylfo9W94q9W5Umi1wUxy1iEXqvNMY/60pqeZLi2Gy2aF6NPjzgh1ClqKNHPo+7iT9pfvWfybNadeNivUKwOvmynlJ7zXBN5q8dz/xC6AC+ACuAD/dYDfAgwAieXAY2a3Q2cAAAAASUVORK5CYII="; const entryImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM3NTgxOENBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM5RDE3Q0FBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4cmPIqAAAA6UlEQVR42uyZ4Q2CMBBGqXEJx4AtnEPXYg3Zgk4hukU9TH9oAim2xXL6LrmQQK69l1zv6wXjnKs0265SbgAAAAAAACTZfu6DtXZTidZ1/RnAaE3THOXRih8S9r6Jn/q+717eLV33GSvexZZQavKVj28j152KLXIGzFqxIYCz+D0x+asvg5h1p2Lf6eZuo1oOMToAwMoAY78exF0hH3wO0QA5dCC3hqgroeI6kFtDlt+FxC6FS4guBMC/6UCw729dB4J9X0MJmZwA39aBYN9HBwAAgHmAeYB54Kd0wPCbFQAAAAAAAM32EGAA8KWLlWhx0bkAAAAASUVORK5CYII="; const entryDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkREMDgxNjVBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkREMDgxNjRBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5CnGYvAAAA+0lEQVR42uyZQQrCMBBFE+nOE7jyGLlAN55Dj2XP4UYPkFvYhegB1G38QhalECY1pibyBz6FtIPzymR+g9o5p2qOhao8CEAAAhCAAEnRhG5Ya4sq1BgzDcAnbXDpoFXCb1+hLV7IYbC2hlpoKeQ+oCPUf9pCqcUrn9+N1mKKV/6ZtoQ9oHPlSgA76JZY/OXdQqO1E/SMyL37FgrThb5Ga9nE9AEC5DKyifM6VyT7wC+LL8oHsnmIBBA7r3OF6APSHjhDe04hAtAHZhul4twv3QfEuV9DC+lvAsztA+Lcpw8QgAA8D/A8wPPAX/mA5t+sBCAAAQhAgJrjJcAA2wQ54iEuTmAAAAAASUVORK5CYII="; const imageImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzcyNUUwMUNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzcyNUUwMUJBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5UB6ViAAABtElEQVR42uyYv0vDQBTHGy0VHJQqDgH9D3TxP1BnN42I/4f4JzjaxcnNxUlwcXFWnCUUxEVwE6yCU0WM34MXCPEuuUsuzZ28Bx8KTdt7n/v5ekGSJB2fY6rjebAAC7AAC7BAreiqHgRB4FyyskO3bAR6YADexPdbYETt9wqtZFCctJR4nmNVroGqFqIpJHp+wYHZI0ZiUZpryQhke+EahBNKOKT2su3L8zQQCCfc66FtgSYiAjEY02uUnyAuC+woFmzki0CsEIhNBP7sQrkDLPvQ9sk2VuzvX2BG1n6Vg6zJeDJ8X+8gK1pEudgCt+AZXIAVQ4FdxRTaq7UGNAU2aQpkn4ueWzKUEMkOadoMc8k3JrAGPhS9dw9mbdZvtgWWwUtJ3XIFpl0UmAcPmsXXqYsCd4YV5JGFRW9VwJQfcEC/sy5Z9K9gw2WBhJLeph1K9vwbHBYckq0LpCNR9plLMOeqgC6PYNVnAcEn2PdZIGVAu5TVanTS8Q76davRUYsCfZ08ygTOHbnTOqtaTqcXW23eCd2kf3yqrAHvrxb5dpoFWIAFWOB/C3R1DgseARZQx68AAwBnjfJa0O+OzAAAAABJRU5ErkJggg=="; const imageDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBCMkM3QUFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBCMkM3QTlBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4sl9ITAAAB0UlEQVR42uyYv0vDQBTHG4W4CKWKg6VdXdTFxdl21kVJERf/CnEVF0eLq5ug3dx0cJQq7upgl04WBCs4CCli/B7cEEPSu5ffkffgQ+CS3r3v5b13rzEcxykV2SZKBTcWwAJYAAtgASxgnJmgDd6BkwFDub4Z6KFoJcZw7OTDjoJ8NBS9kNj5mRxEingTs2FCyO38NagCIwWqcj0/P/6Y6g24b4pJBynu+jx4dfsatQol4bwFHoEtrxZ5PUUSu60UM1sBCWtR1qeEkBHz7osdX/QZfwJLuutnKcAOqO8jMKW7fpYncY84Hnsr0QRd0AcdUCf+/iBg/JA0S8gkbgDbc78H5oiJ3ALPYCSvLWoRCZMDy+AWlH2efwAN8BVTmMWeAzVwFeC8sFVwASbz2E6XpfM1xXMb4CS1UkDIgTtiB7nvmasJuqAPOqCukSPKHKBMQLUfsCPnWfFJ+jewlmcBjnR6XVYoP/sGe8AIK4BShaJUEtUpfgl2wSe1CqUhQNdewKbskRIro0naArgH20X+KjENzuUfea3WJE8h5LUPUIkaQsMMBVR0/FAJOMtJaJ2GPYlN0M74m9CN9CPUOcDfRlkAC2ABLIAFsAAW8J8F/AowAPJuAl7UZefRAAAAAElFTkSuQmCC"; const legalImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEExMjc5OThBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEExMjc5OTdBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YYe3eAAACnUlEQVR42uxZz0sbQRTelVAM1mJys7QIonjzoig99VALitC/QISe8i/kH+hBof+AFw8eRD0Lgl6kp0AjqKVizbnVm0IDjVbWN+ULrMsmzps3bzUlA1+Wnc28b7758ebt2zCKoqCTS0/Q4aXjBeQ0jIZhmFqvsVw1Z2CO8BOY0yIJNUYFM2A6PoiqX4SXKlyKAqIsuP7PTdxqE2ptbtvCncFPhAaWwmOigb6kD0obAabhsyeyUn4T+rl7YPsJLfVdl008hOsXXA8wY7ZIm21bHCS4h7iK32P9GV9exDVCvfWeSyBL7mAPjcq4L+N+LwMBYu5JNLgkDKBuAPemfkJRgBfuLfx5KVG/jPpNRQFi7lHCLeFPLI5plkG4VvN8REGAF+4VkK04PpcIEHPbqGw3ShIBXrht11mrdSoRIObm7PQ0TyER4IWb62uTvloiQMyddzjt4qdlXiDAC3cJFVVmuFFFu5JAgJjbBE5XhBeEOuGaYcSE2n3wCrOE/RQB7UL3t4QdQq+A+8q8kZ1DQB/ALc0OcEsdbQMB94UJpzeEsfp3hyXQDM/PhNxr5uc54dTxde8vYUawB97Bhgv3D/T9Xxkm1JgGzJpd9OBGF2GLw11Dn++VIqbk1sLAEWHK40n8hvDNgtf0bZVQaGdsjPCZcEy4iTU2fned8MEyn8QN5npgez12NkTowzH6NOayUQqO2QnXN7K4qyw8mGtSzCREWXDlFHOj4syac2pRKzXIaW8rtvuFJlbMm9Q8YvbxlOeHcL9fkfWr+dlpNFW2aDEAC7HokIMq2uYk/ZIImCacBPLs8wlsZSrgY+KQk+IGNjMRIAnArANDTQGVQO9jRoUrwMWNvlb0iq/YZwvndNT6dtY9yHyPSpal42fgToABAJG3FBi5/OKOAAAAAElFTkSuQmCC"; const legalDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkUwMDIyMzRBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkUwMDIyMzNBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4SUPiZAAACpklEQVR42uyZTWsTQRjHN2lQS1Ta3iqVgFR682Jp8eShFiwFP4EUPHnVg9ov4NEPoBfRHooHvQkWcymelCZgWyxqzlVPtmAgaS3jf/AfWIdN3WeenZLoPvDLZnYzz8u8PDM7KRhjon6WYtTnkgfwLwcwB7bJXCgjhYCT2Do+yu9fwJl+C8BVXMjnwP8WwH3Q5lDwIWlI+dCmL+I5YCse65GG/gFOSXvgZQ+NlNc+Q6jC6xte68wkaYkSslBa6o7tSvdchyGUwKz5LdtghFfD+1FKXElbT2S7m5IqKy2yvMhy9QgCENlOUjDJCjtgiPeGWLZyMWAAYttJc+Aerw/BDr/b6yPneQiR23YiOg8OQAuMOs9suc3n4wF6wMu22wN3mJmecgMWF1t+wud3A7S+n21hCx/WSpoe8LYd74HbXHmfg0aXVvoMXoDj4FaGre9v2yPLJGUKTQ+obEeeed7N1ZoAVLbtjUGPlTa+Wg4qAlDbtjdu8kZNsFpG/L1hfd8A1LbtdnoXU+E0aII9wcSzk64MWuAqWBW+Ul4Gr8AJhe3dEj6+MoAykUrHAak0WTdS2P5m0+gzZQr8AGoe9epMjRpZsuPpJPho/OQnuKKYAzPU4SOfrO8dRedAQ6hgDyxkkEYXqEsiDfr8x1bCvjwscbn+m6yDqQy3EpfAZgq71rfHYPiw94EJ8ABsgP1YZZt3l8E1UAywGy1S93JsbTD0YYM+Tbj10pzMDXukuSxO5jqp8nt+tJgfLeYBdJdShrrGwTyYBBcSnr8H62CNp36NbGaabBfoUgLXY7tDidRYt6TxQeP8NNgyetmiriMN4IazyGllnzrFvvisAzNgBQxkPB8P+F5RDf0f2VswFSipvAPTodPo2YBZcayX/qXMF7I8gH6QXwIMAFfIjUgDHRTtAAAAAElFTkSuQmCC"; const mapImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM5RDE3QzNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM5RDE3QzJBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6JH7d5AAACQUlEQVR42uyZvS8EQRjGd31/RdyJkNC4ikJoCM1JdAgX/gDRKxRqiURzQYheKK4WuUYEjc5FIgqERiEhJySCwrfzTDLbXNzMu7czu3uxb/JrbnZnnufuZuZ9Z8xMJmMUchQZBR6BgcCAwyihPmiapqvCqItLieJx20AMDIBWUA9eQRqcgCTY55+pc0pBEoPgiHVH4BksgDoluhwaYCI2icKzuQNDXhpoBmd5irf4BlNeGAiBc4fiLX7ApNsGthSJt3gDXW4ZGLch7BF8Ep9NsdVatwE2wKlEyDX/S9Twd4pBFOwSTIzoNhCVCDgE4Vx7IYhL3t/WbWBZMPgTaJRt6GBH0McHqNZpICUYfJG4d/ZKfoUBOwbsJnMRQdsesY+UJJWI6MxGQ4K2e2r2wlcn0e6uzcC7gm+uEjQI2j90GrgTtMWIfQyD0jzHcJyNJgWT75NPUFFUgQvJJG7XuQpNSwa/Bd05xIf5RJe9b+o00ERIDVj7BhgFnaAfzPFJLtuJl9zIhRKKEzmLd17FaTfQAl40GIi7mU5PKBZ/DCrcrshWFIlP81/V9ZKynJBaUxjzsqjvAV8OxCe8PpVgMZ+n+CtQ6wcDZXwS2hHP9oo+P5wLWdHBC3OqgVllKY4iAyxmiOIPeJ3sOwMmP/cUib/nB2KGHw1Yp3UPAgOjyrNkxQYMvq7/JX5dS5qvwQCLtSzxN3ZLRa8NsKORS9lu62cD1tLK8pxVnfcWJlWcX6+Y/s8ln19v9IN74sBAYKDA41eAAQAjAokcv/NHIwAAAABJRU5ErkJggg=="; const mapDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBCMkM3QjJBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBCMkM3QjFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4C5Vi3AAAChUlEQVR42uyZTUhUURTH51VmKcGohUErXWjSxhZ+YGCkKy1SpI0QRUWrWdqmnUiQCKW4M4K+3KrYIoSJoEU0KpoogrshQmuwyKKwGZTX/8KZjTD3vvfuOZND78BvM+fde8//zb3nnnuf47pupJDtQKTALRQQCvjfBRxi7u806AJtoApUgG3wBSyBafCafuMxlUYZ6ADzrjf7CYZAlGNs2w5UEBNuMEuBzn8p4BRYde1sF8RsBDgBd+Iy8A7UccxicBM8DdI4qIAp0M24+NOgmRa6eBrt8RH8Ftjx8FwxGFMvVFqAGmDA8MwncAMco6l2BJwHcUO7RnBJOo22GhZlApTnaKum66Ch/SvpLPRQM/gPUGlor0TMaPrIgFI/MfmdQuc0vkcg5SHj9Gv8RaBJcg1Ua3xxj33MGkqJakkBZRrfpo+8/13jj0oKSDO8uaPghMafkRSgm+NdHvu4SHM9yBjWAlY0vl7aTXVWAu4ZnlmWFPDGcLaYBA05/OV0HqjV9PEZrEnWQidpp9UdhFTpME710kdalBdADBw39P8A3JEu5l6AqwKnwwyd6JLSxdxd8EtAwLDf4G3K6WvgGWPwH0AL+JOvW4nnYIQpeJU2LwcJ3uYfyNbwC+CMpYAeWvB5vxdK01Fw16KPcZvgOS625sD9gG2TlFqtzGG4Xj8MEuCsjzZqr2gF7/fD1aLK39cNhd5eG+AInvNmTtHn8S7oLTjINa7D+IXGoUNNu+aZr6AerHMNynk77dJU+qZ55hZn8NwCIhTc7Ry+J+Ald/3hCH3ke0xvO2sbtOFtFYqAUrAIajh223xOoaz9BleozhmVCl7yH8ibhR/5QgGhgFBAKMDK/gowAANJMMNKjwOPAAAAAElFTkSuQmCC"; const movieImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQyMzIwMURBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQyMzIwMUNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7F8+ifAAABAUlEQVR42uxZ2w3DIAzEVYZo0ok6RztWO0cnatotKEh8oEgxBPMIzZ3kryTG5wecCGmtVc84qc4BAiAAAiAAAscmMHAPiWgXQXJqIaYCV2Oz9VPZZrc2C+LYuQpYR2Oj5H+MTWyMEQT8F/yeyq0C13yTtIVCeNksuQC22OS+lQ/ImnnZ4EzSXmOEfzbGrS0UKn1SDiVzOmTq05IzcOCDLKHcJVsJWkgttkF/J0nFOeC7SgUei0BicTH2FE9+hm20NIqfxF3tQn95DkALQQtBC0ELQQtBC+1aC7W8VvnataVa6O4c1cbb2C1HBZoj+SDr4Q8mrtdBAARAAARAoGv8BBgA2R/krL99HYMAAAAASUVORK5CYII="; const movieDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzBGQzk0OURBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzBGQzk0OUNBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6qT5nlAAAA5ElEQVR42uyYWw6CMBBFO4ZFSF2R69Bl6TpckeAuak3mgxCVQh9Ac24yPwSmPZ1Oe4M458yedTA7FwAAAAAAAABUD3D20flwhaPTsf9KArzQJ1G70gL3PmwswPAF+fE8hSRgzCw98NBVkplh9ds46pkV+CarpV6iVrdoaGWyAEjkIkblbxLt05w9UPc90CQud86thJUwo2NweJIs1XEid5EK3EYTCdXJx30L90BuSdU9wD2AF8IL0QN4IbwQXmjrXmjN3yqvqbFDKnDVRKX19HFJUYGqmhgAAAAAAAAAAEiptwADACZnYbeTflyjAAAAAElFTkSuQmCC"; const otherImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM5RDE3QzdBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM5RDE3QzZBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7TLpScAAACbElEQVR42uxZTU7CQBSmxgN0i3FRbkC5AGXpSjyBEN0LJyCcwF7AUE5A2bgVL0DxBHQjurM3wDfJN8nLOJQGCi0yL3lJO7Twfa/f+5lirdfryinbReXEzRAwBM6dwCU/iaLoJEC7rpv6BG7IV+TrkvkK2LZK6IW8WsLAV4HtpHPAykLgkfy7hOA/yR9Skxj2WlIJnUEZbTQa2663yevsfMY/nM/nxRJIAd0hv1fAS1uQj8kD8uToWc3Hacv6k+Rt8hFIbDMBvktPISy6kUl7Jp8AvADnk7dQyqS3sJ7gugnJsFOGJBYgekwignJf1TzOxXoN1wkbEQnvAB1e24l1EnLIl1iKAT5hkpJ5EAK0xyQ0wf0xSamm/NYqh/L8RX61TUIDdtwFsDpITfC58Agye4ML4EPc59BTaBfRiWXFkdKZYU0ClOtSLj1ejSjqATtv5tzhtZ1YJcDL5JQls82eiMtyglegWOkN9Q0d3trRr/EdqQQ8TZNqs8jzCAdKLyjlKOGx6E81db/0BNLMYccfGEVs9hTfiyCwUKIfpyQlr1Yx6x86iR1tlBAR/FEa2JJFO0S0m0q+hJCUJOBTReoXMUokLHJ1gLxTGtkA66EyM6WBz2OfvVcntgHcAZkxCAjgT0zzIYHXJXQeXVjbiTdNoz3UfymlboZKI+65xfFYaWp5ERCNsJplGvXhUkoRxuq2Mlo7kM4ShD3MQcEB9tnaTpz3fmBI4P2y7AdkdalhbNgkoRhDnHsM8LtsKRNFUp7SN46+jdxIIOOmfGZeqxyYgHm5eyAzL3eLtv/5ctcyf3QbAoaAIWAI7GO/AgwA1KQv5XzbYuwAAAAASUVORK5CYII="; const otherDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkREMDgxNjFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkREMDgxNjBBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YrUXKAAACfklEQVR42uxZ3W3CMBBOUB/7wAip1AHIBMAAqDBBYQOYADFBsgEwAVT0nXQC0vdKZINGat/pXfW5OqVOgkRIAtjSKXZio+983/3Y2IfDwbrk1rAuvBkFjAK3rsCdHOx2u4sA7bquXgG0R5IeyX3NcH+TbEg+8ihUR/AWMPVuwok3MFfd2hewpTsxGnPMM2G0ijB6RPhq0qMlwm5QewUAekjyLMGLeBySLEkWpFBcKwoRwD499vCJVsq0Fr7vMb8eChAYBrUiYQvwzvokXdplWwmP8T7GvBWtG5apgC0PNKqUAIg5XjNFBvQtyqHZVlipq/GPUzP8XybOLCXooyPARwATC0opkGt6H9K7DsYjWEytfyg4w6tM7OVRaCr6IwZPIFskewCcQnag2RbCwGdY55TlD42UiPNLHaaBoIcjKBWiPxbLef5CjNsFZ/ijMrGMNC94enBQZZEFlB0Lc8bCR5j7HU3UOkuGT1KoI/rKCfspOyz7YS1LCThoM2ERFbHi2iuQo5wjhu/Ch5QV36pQIEzQKcpwShmt1LxhCsXKSWSgy6fgvIvwqXZ7jd1uJ/xljWysFPBp7aSMM/G/TEwf5wJIF8C2whckaF2s14Ev4pytzcQ6H5iJ/hz0cEGJAMC5tBjwE+8CrHNTdr6Ic7b2TJxWC8kYHyL+hzlm5TVPGC4TIXdS0EUBW8HLpFCiGh0nnJJDaSBqIwe+MBV+wueC0RkoxJn4NUmhVAVE8TbX8F/XWKkZ/YZf5sVWZh4gMGtUlZOMZBUJ/vtWyS3TAhnZWRZwpR8j864WrRyrVH6Qv/prFXO5e6ZmLnerbtd5uWubP7qNAkYBo4BR4JT2I8AAB5cVM5cb8ikAAAAASUVORK5CYII="; const songImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQyMzIwMTlBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQyMzIwMThBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Iux74AAABRUlEQVR42uyZMQrCMBSGjdRNXARdXcV7eBOv4C30DO56ChcXb6CLuKiTiLhIqS+QQihNfa9p0NL/hx9aCP/LV5qXlqgkSVp1VrtVcwEAAE0HiOwbpdRfTY7TISPfGgHnr7AGAACAprXR0B0jRGfDKwQAAAAAAAAAAAAA4FaXPCfvyU/ynbwlzzw+BKvN1D/OqTMak4/m6zDPO+uaK1GmPTeXXQB98rmgUNYciTN9ABaCQlwAcWZZAL0urhUDlMrkAOQt4oFxlQqR6exCHWHGizEmRKYT4CIJIB0YY0JkOgHe5I2g2JoxJkRm4T4wIj8YC0339B6zlDjTp41qTc0u6Sp0Ik+E77Yo0xcgfWqrzJO7kZdmYyojdiYHQNkTLzgf0F1kSI5NsbiCDvg1k3M+wAX4icQHHHU8M8YPDQAAAAAAeOkjwAA86LR37Nuw2wAAAABJRU5ErkJggg=="; const songDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzBGQzk0OTlBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzBGQzk0OThBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4nB2+CAAABJUlEQVR42uyZPQrCQBCFs6Kd2ARiY2Er3sObeAULD+EZ7PUUNjYW9tpYKamCiI3I+gIWIk6cJTtF4A18aLG+9UuW2fw4733S5GolDS8KUIACDa92zd9b9mDHJUQBCrALxe0YFp2NS4gCFKAABShAAQpQQK4umIEduIECbMC0xoVg3Mzy0aLACBy9XNuP74mS6JlOeDaagj0YRLyctsgUl9A8YCJtWWT+PAOl1BlkEW9oLDLFM5AFTqQpi0xRoBOYcVeMscgUBS4hAaiDYoxFpijwAOuAyVaKMRaZlfvAEFz9/yp7ek/Zsy0yKzeyCSgqJjqBccAmZpKpOWrLryOXgwVIA/+8SaZTvqUsu0gfPEH+/qxbUTIdX7NSgAIUoAAFmlwvAQYAWJmxzw5HRIkAAAAASUVORK5CYII="; const webImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzcyNUUwMjBBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzcyNUUwMUZBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6PoCmLAAAD0klEQVR42uxZS0hVURS9r7R8mp/K/kUff32gtA/0sdIiGtSkKGwUQUFE2CCiSTOlLxRBEShEDmoSRBANykCIqGwQmaYlFaX2dVBqlKWvbB/YN1abdz+ee6/PB2/D4p2397vnnPXOOfvsvW9oYGDAiGcZYcS5JAgkCHiUJCtDKBQadpON5nCSAhhnHmEhoYCQQUgl9BA+EloJjwhffWUVDYOUIsI5wgfVpQMihHpCOWGs17l6JbCIcMvFpK3QTaggpA01gWTCKUK/zeQaoP2F0GHz2zZC6VARmEi47/DPHiOMhO+NhExCrcPWOhg0gamEF2LgakKn+P5vTCBg8IFuBP1dwj3R38mgCKSLwb8Rygi7QfeSJ2lFQEkhbD31mUc4LUgcDoLAFRigi7BEXReE56DfKseMQsDgVTJtZ1m3X2ynEj8JbIPOfxHWsX4N6JuZkBsCs2AV1J0QZn2FONhpfhBIIbR7cJVeUOkHgX0xmrx5T2TZEQhZeRyIhdTWmM/tdt6fYV7eDNb/5FtYyhz+jPCz/w1BmA1brYsdQ4T7zWbbAb7lo59NhxUogn/jrYheN4KtxsrzwX6OJp/AG2FctgCerbebq1M4vQHaVwl/4HsOtJs0Q7FGCCpngr4ZbMvsYiYnAiuhXStsOOAbTQJtwjOh3IQ5LtclkA/tZ8I2DdqfNQl0WvRn8I1vSsGgExoIHUx5wHvSlMniYuoVz4ZFP2pL9InfYB+VfGBNyYT2JN184HcMXSjigu4h7h0m2WSv7hnogXYuYRzgBtjWC5sJUzos7MfhN3v4bgjx9tsLtm7dM6CiyyngdV5beJA0hzy3y8KeIe4EAy7GHDEPrRVogPZSYXtn40HcynSL/uR4T3UJ1EF7k7C9EpUIHZkLbVzd8YTVsDItulvoDscn6Rw613A4LV3bFo5arUStUFWUWCiP232c1GAMlczta17LKlUxdqGLvYbTuQ7VhyBR61dGdh467ecDpqoOm0HfZBONyoxshsjIRrO+XKSVhX4RyGK3icn7BHYC70Ff4pLAUbBdYt0qPl+m/oTfSf0KMcBjjnEqQVfngkA2X0ymTXmbYr4rTJ2qO40Koi60g5fWHEhlYbvEhHY6ELgIelUTOsJeyNS18uoGVpkrEyuh8F2UXNZaEDgknvshvj8REWpgtdFih0qFOqBnRDp63cHjXCaMGcrqdBYn2xGPrlL9EdtjVV43+DatFufADVq4Gpfi5f2Am7KKWwlzpaKU3xvkc1aVyr6+k9PEh4TbIlDUfsXkJ4Hh9Y4sXt7gJ94TJwgkCMS5/BVgACZy+472MaEbAAAAAElFTkSuQmCC"; const webDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBCMkM3QUVBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBCMkM3QURBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5tva0nAAAD1klEQVR42uyZSUiVURTH3zMNh/RZWZmVaWWWUSYWNGlalIto0YStoolaBC4i3EQbbQYjcJUQudBNEEG0KAMhogkazHJKo9Qyc5ET5dCr1//C+eB0eN97X/cNKr4DPzzfnf/e+93v3vPsLpfLNpEtzDbBLSQgJGCyCwgPQJvLwSqQDuJANBgAX0ELeA56x5uALHAY7AFzvZT9DV6AalDlsxj1HfCBTHDPpW/9oATE6I5Bd+AR4DL45WFwdcz/Djo9lG0H+cESMBs89vKfPQ+msOd64AA1Huo4wclAC0gCzaLjCtAjno3yXIB6jibfsIfgkWjvUqAExIrOB0EhOMLSWmmQZgIUq9nSU3/TQJkQURwIAdWsgz6QDeygiaXvFnXcCbDRLBl2ldJOiOWU508Be1njI2ALpeey9AYSZEVACpuFXhBF6SXixfa6O9ktHKcjwXuwYAw+tGfBGV+PEofGaPDKikC8pwJWZqABZJDfAZwgCsTQUUHZMOhyU3cR/XVS3X/6BqnG9xT0gUEqq9pNYCLKdb/EWWxNfgJhLK+A5VWa1Ofr2V1+N9uNwln6Clb3macxeltC25h/E/xhz4uZ/1ZzidSzM9lCMetG3lowXfcd2MD8GpHHO/yoKaCd+Ski7y4b4zpdAUuZ/07kzWP+N00BPSbtKWtmfrrucTqJ+U/oZTMskfkVYEjUjRLtqCUxKsrwNkrphTXMwfw5ugJimZ/qoVyGhXvHSi9lkgl35tBdQkPj5OY4pCtggPlLwAzGHZa3VeQZGNZpkn+BlTlK3wY7Lb/jLK9fdwm1siui2nU+mOwgMV6uhn0m+XHM72b+sNimW3VnoI75a0TeZw87iFWbb9Ke7O+NroBa5u8QeW0iEqFjy5jPZ3cmyGEz06i7hB7Q+UTtRrmgEoy42dp20anVzNQMXXNzFkojX22vZeIMFUH+LV8Pc6rjY2O4A2WDV74IULtPU4CCYDYLK2C7r/eBNjH9TjpgKUE7xVHDLuCHPZ6eTO0YO1QkpReJAFixvwJb8XQk5pf3WXS8/sLS8yxeKc+xvBuUtpGuq4Zd9Pelfr3o4CWFWUpZWq0FAQkUkTMsB2yiQIFhKu40NRBxof0UMTCsCxwUAzrgRcB1lq5iQqfBKEtrodkNWGSuUMyEsh8i5LLZRMApUe+neH4NEoMRG1VT3uEhTKiuiFfEdfS2l3BkFZgWrOCu8WKXiyWlY+ofsS/Y0WlOGkXa+v9z4I0UjYv0pX8rHzKrpo7ABSAfZNJ11EG/0PTS9VFdE5+C++KgqG3+FBD6kS8kICQgJGASCvgrwABwOuT+LTc6HAAAAABJRU5ErkJggg=="; const zoteroOverlayImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Mjg5RUE4MTFCQjMyMTFFQTg0MzdGQUVERjhCN0JFRjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mjg5RUE4MTJCQjMyMTFFQTg0MzdGQUVERjhCN0JFRjgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyODlFQTgwRkJCMzIxMUVBODQzN0ZBRURGOEI3QkVGOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyODlFQTgxMEJCMzIxMUVBODQzN0ZBRURGOEI3QkVGOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhCTGioAAABNSURBVHjaYrzHxvCfgQSg+PM/I4hmYiAT0F8jCxAz4pD7T46NuDTBLWEBhhJc9D47I1GasNlIlCYUjUDbCGpCdh0TOZrAEiMg5QAEGADICBcZn0ZaAwAAAABJRU5ErkJggg=="; const localSourcesImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTFGODYyRkJDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFGODYyRkFDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4pzy08AAADOUlEQVR42txXzU8TURCf3S4LbYHSAiUQUcAYCAcPeFESD+JVbhoTA0fiSQ5GQf8BE1APXr1qNEEuRjlojCCakPiR+EXSmkBRBEo/tum23Xa327e+t91dabuAtEtInGTSt9vZmXkzv5k3j1IUBQ6SaDhgYvTFhYcLZSt5MnTKsgiwmO9hjmJWtmFOk2EtjYBGk5hHd/nGrcmkMd+wGgPDe/h2xIoIUHoVaBjYa0lQlRgn2FEjcGVmETqa3eXoUPbIBfhpaT2cx0A1Q4OTtbFHPHXgrbcDQ1tbnTJCEOLT8CvGuxWFGsVRz1AUNW6AkKEoEGU0aa9hIZSSQMohsKo/YdXA2mgguhudDogk0yRvI/PXL97EfyPVAUEmBpVhIkiMW0lkI6Kc35CNYXSv3NrmJTovpG7Xk0Vo3zoe0U1RVEkLYIq9NaNDGBcDXR6or66CjYQIr5cjEMtkC2S8DhbOHm2CZvwbFiSYDUQhmBR30k2bNaISanfZ4Wp/JwZm3vvuJif0tdXBxNtl4EVZfeexV8G1011gZ2zq8zEgMvVw510ANlNiZYfRyfYGw7hOJBL97X/L9kSbyzCuUw1+HuhqrPw0tDPmIt5atsCYqYyTrdwBXzhp+n5rsfi3kZGRUrkDH9bi8GaFg1wRitb4tLH+waXguW8TskUl/DshVu4AMTu9uAHjL33wJcir7yRc1x/X+QK5F0sRVWZ+hVOfEXb4/WrMuomop7EWeptr1fUz/yYkJblEpqPBoaKf0FyAg43k7hHYtQzJOXG+t1WtBpKFGX8I5rRdGkpwgznX7YUzGPU0Xs//5OApTkk5A0kJXTreBn2tLogKWXj8dR380VLADfa0qCWXwH1h6nsQPgfjZU9EJfRqKQqf1njwRZLbnhMLONeBWArLCJCRcxWNZCW0Gk+rvBORlhv8h3wbwEYobgZCbr9HcH36khKxKTMHHuy3A0JGlDKx8KNv92/dJpVanIIxlJMZirYN4WPTZenOEeKFWHhmdmLsrsCFCIpJE5GLHZCmLw+ScXsMcx1mB2abxUEgCBUwJ3QHjKmYDIhb0sJobPXVDWmGZbMUbBWSNP7/L6fUQV/P/wgwAOY3UmkhFMarAAAAAElFTkSuQmCC"; const packageImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAByUlEQVRYhe2XzU7bQBSFvzgjHH6S0iKhVoqqSmVL1V2XvAISK56AbXkCdqzgLaouuqm67jNUrdQ/9W9RYf4ioDaEEOOE00Vq46jJBInErlSOZFmee+eeM2d8RxrIGYVv+83kQwIhECXBuqSnEgWhTkwgCdF5+/UI//Scxw8qFIsOe0FIZ/pAaMs78JcWHt4xPYKPBM+A+cv0TlERk8PJWYtf9XPm75cpuUW8wzBOtaLdvuDr993CkV+/DZAIEBRAq8A64CYrjYumKjfCFgdByNy9ScoThq3D8K+cXmg2Iz592aZxFiZjztysC1BFvBZsItz0yruqCsKoTc1vUp0pcXfaxTsK08l9ERw3ePfhZxc5gNnxo+XJMWdDUBGqK64T257ac4CpUpGZ8hgSBI0WlXHzJ73/5nu7wdT7z9tJjS4BP3ZOnlulDwFvP3p9Y6aXqmHDxmAy4MfGYXSVrr0+WqQ6rltAJg7oFLjVU4DVn6EJ6B/LxAEbsumCvB2wt2EWXfBvO5CzgvyP4kx+gbwdsMFkQW9b5M1J6IycfQD+awdqAM7ljWd0TwoR8ApYBKoA5koXqWtC4g3wEnixtvKkFo+vrYyc+gaD8Ru+5CfMxLTKPAAAAABJRU5ErkJggg=="; const bibliographyImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MENDODY0NDBFQjVCMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MENDODY0M0ZFQjVCMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpiN2VlMmZmMS0zMmZkLTQxNjQtOGYzZi0yN2IwNjI4MGE5NTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz44JtPiAAAAyUlEQVR42mL8//8/w0ACFhAhLinHEDZnO8Pz+fVYFUkmNlLd4lUpnmCaCUmAERgaXkDmMyD+TzP8//8RkF0we5mQHMUIBHNBHqZpmDMyWgNJZmwOAAlK0CnqmbCGAB3THuNAO4ABmwMYRh0w6oBRB4w6YNQBow4YdcCoA0YdMOqAgXYAqOfyckAd8OPHz1wg/YqWFv77++ck1LOQvgCodwzqnEIdww7FzDR0wy8g/g7Ef+C9Y6Qo+AmVYKRRRwVkxz8g/gsTAAgwADedQ1H9J6L4AAAAAElFTkSuQmCC"; const bibliographyFolderImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjc2RjZFN0VDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qjc2RjZFN0RDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7qIg32AAABWklEQVR42mKsqqpiwAZyfT4zUAPoB20A0y+fP8IqzzRn3mLG////ewHZz4D4P7Xw//+MR4CWMxJyIBMQMwLBXCAtyUBFwMj43xpIMRPjAJAiCQbaACaiQoCBdoCg2Sw0dgAciEvK4XQATgBMSAzX7v9gWLbrA8PHr3/h4pKJjURZGjYn/QcOg4+uSvWyBbHwxtF/hn8MS3a9R7GcSikUnkDxOuAf0N7PX/8x0DKBEgwBWidQJkJpgNaAiWGAwagDRh0w6oBRB4w6YFA4ANiC/f9yQB3w5cvXXKAjXg2EA0BNsr8rV6/fAqR3Izej58wDBw2bnY35M1o7ANSR+AnEf6CNBEZEy4mRnR4hAOvN/BuMuQDkMJomUBZcnUZoO/7/jx8/czk42KcA2WLUsvTf3z8noZ5jAHVM8TkAFELsUMxMRY//AuLvoHTHQkQUYE2gFABYegN3NgACDAAnVoG963bS6gAAAABJRU5ErkJggg=="; const zoteroRootImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjc2RjZFN0FDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFGODYyRkVDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5ch4E8AAAB2ElEQVR42tRXy0rDQBSdmYT0Qa2WVkUKigsV1/6DuHEpuFBwU9wVXNmNP2Bx4U+I6FrwJ1wJoksR6cM2tW1MY00m3mnTkrZUSTJp6IVTQjoz98y5j8xg0zRRkCayn/uHF0+L7GxtuJ5LUMA2TEACXAKqAHMMZGuMxC0ENjsHZP+Zk7DGtAA53gocOpib4aEAZlVgS0KnJYG9Jm9HgfRC0m0mmw4xkD+LS8vdHCAYo+dCTUqn5lAyFkHxsMAlw1mLUXUDMZWLdRWV5GYCnrMADWN82g/B03sVxSOiqWgGMqiJKOfmxDYoEIxqiorqzS9GqHa0u52Cv2gnBMxpVCS+OGfG1uz4CIW6iYNxoleB/SqQBOKLczsJQvBICyBBN8HAW7HodIK+tz9+sdvr6fsYOVZgeJd/KeK7AnbnbuT3RICHc9cEeDnnUgVeyUx/FfA+EU3EKKX1QAhQ2v3YfcryzQiBb8N89ZuA0tLalXLpKn+WyzM+AzkQEoW8ruubAiEHmJBZzpI3yqXi3clx5uKjWFDgVYMVUP9E9PhWQWvzsdDK6voPvAsDZgBRgMBZBAOgApoAjXHDvbshOyDawiJa4J0j1Nq5PhKCoUFtCxO/mk3ccNDX818BBgAducu1VKoKmAAAAABJRU5ErkJggg=="; const zoteroLibraryImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkNEQ0M4RkFFOTIxMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkNEQ0M4RjlFOTIxMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozZDQxMzYxNS05MDhjLTRmY2MtOTQyNC02MDFjZmYyOTQyOWEiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4faqZHAAACgUlEQVR42uxXTWsUQRB9PTujGxTxIH5BLkGIIAgBD0IuCoIfBxH1T6iomKt4UQS9RBIj/ggV/AEiHgVvuWiMXtSD7mHdiAaz091ldff0pHdN2OzOTuagBb1d09NT73VVV3WvICJUKREqlv8EKicgzM/0hWrAp54BcTjwamFVPzaOS9w98iQLiEmzG2x7JrCdS7zWFyH48gqgC2Tq1gQiqeEB2yQmMbtmCELhcOTgX74DHxrFls8EMDEK1BPrievs9ofh+1pAJLp/Dpe5n+PaNBRwI1IBjZ/Arm0QUYRTJw6i9eId3oQELPjds7jCyqzWEJ8Y/CODmyI5jOZJ7GQSSYSTx8fRerngSMQZgXj/vrGZo5NnRH1kO0x5JmaiTWNda8lWNBQ0iK3p7J3UrCseI27KjdlvycyB7bul3V4Ri4uvp4HmY35M46wWJEcmJkVCEu2lBn/sQZRryumkFIMaMJmDu3G9Op9MT5bU30kvECd1jO4d40U3eXdART4EIAGVtssDtwlJkOlvKKV9ERS+EgqVg5YEHpDIpoiOOuAMiZ7gB05POSOmwfX2mW3MP7ndd5Z0EUDPla8HjgHvFTkBt+upp9vfPr/X4fZD528ODN5xGppU6zfmIfj80zsFCSjadPCuPSAZJNpU8E4CDCLZH/2AGzl88VauD0ImD4HaYJ5jyLfoIAQm9uhZZIq6fD0CJKWEIFOc9GAVboNiU915kTwBo+jmj+VvW2piz46RxA6VBb70K0UqqWFXykBxpqTvP7euylTPaVK73ZGqbc3O6twwb8Ffo1p0zWAabJGfhs4biT+lSroIk1+wuSx5Av5kEiWDd5Mgvw/+bRFV/z3/I8AA338cLAScyV8AAAAASUVORK5CYII="; const zoteroCollectionImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTFGODYyRjdDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFGODYyRjZDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7aJFBhAAAB10lEQVR42txXvU7DMBD2JSZQKqgKA38Sj8DCczCwMLVjxUTZCoyMFDGw8AJFDBVrFxaeoAsSj4CQihrUQn+Spg5n5FZJaQJNHIX2pG9IYvs+3332XcC2bRKnKSRmi50AdT5ky9VAi5QOdmcrBRriGlFH2B7QxRhNagqEFRH5X+alxZgO4lR2BLITzM+FjQA47wEhwkkvBggj3GEEjirPZD2VDLKW/Ue4dLO2sf2NoQbmqUKSmqptphJkNblAqAJSVG4xm9RbXfLa6KSRRR4j3gWAkx8ipADEsFhRm6Ok1jKI2Wck7C2NSxJNVUgC11xOaKTRMXm+cg/H+2f4mbkItC3u0M7yCdy5DOMbMCyxEYABq7Twa7o0IMS40mNM+mXD1wSAscefjmPtZ5mdLc9vt08vnpHwOv7/qxj9xUZ36ReRyIuR07lX+CMjIMN5YAKynAfSwGjOw5KZ/lMwdU2pzVjDj4AemWNxHRpNvexHoBQVAaNnmR29dle9Ob8cVMJxGiiwvkVBUTNYPFKSQt5sv79VHi8KV2299omvmrxN8CJg3h/u8WazgFhCLCJUSUHo86qP+HAScPWEvEVypIYKyBIqE44tvxQ4B5uDpmGm/w0h7t/zLwEGAFpNuv6RVEs+AAAAAElFTkSuQmCC"; const doiImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjkwRjFGOTRDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjkwRjFGOTNDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6HBGUUAAABxklEQVR42mL8//8/w0ACFhDx77DvgFjOZLuZgQmJzwbEE4H4LRD/pxF+B7WDDSUEoKALiPNo7GlBqB3fgbgCHApIkrF0DP1UeDQgCQrR0QFC2KKAbHD/2VeG+jlX4XwjdQGGgnA14hIiwwCDUQeMOoDkXPDh82+G959/gdmKUtz0c8Dztz8YVu55xHDu5gcUcU8LSQZ9VX7aOgBkeev8awyfvv3BkNt+4jnD0UuvaZcGfvz6xzBp5S2slsMAPjmKQ+DM9XcMT9/8wAh2Cx1IaXr78ReGTYefku0Iwg648Q6FH+Muz+BmLg7ngxKiqiwPSlFM1ShAT3R2hqIYakCOkBbhoE85wMGGXYu4MJ0cACoHsIE7wLRAEweAqlZksGb/Yww1Ry6+oV0itNEXQUkHhy68Ybj75AuDozEkIV578BEjnVDVASYaQgzqcjwMNx8hghiULZfsfEi/yqg4SgPsCFwAVC7QtCgGpXyQI0CF0sHzr+ChAXJUoL0Mg5YiH8PL99/h6hUkeYh2ACOoZwTtmNC7i8SI3jF5R0fL32FLA4vp6IA52NJAGShYoB0UQRpZ/B7q0VpsDgA1c/KhmH4JYaC75wABBgDYK6zYatRG+wAAAABJRU5ErkJggg=="; const crossRefImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjkwRjFGOTBDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjkwRjFGOEZDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ngUl1AAADUklEQVR42ryX+0sUURTHz8zs7EN3FhFsLVPbNlkxV8rHklkIkQY96CFYRj9FGEFB/VRQv9o/UCBIP/agDIrSqB+CHoZFVOK2uZubmrttbaHlY3f2MY/OtYm0Ntq12bnwYXfu3LnnO+eeOfdcSpZlWNCeVoHKLQfZieQhnbBucMFNGrLTWGQ7cgkJI5eRDakG6lQ0Sl5mI7IPaUXy03lIDQFrkf2K4eWZPrxYAWWK0TbE8T/qMxGwTHlLQp1a6/aHgG/Hfi1d3rlJcrFHedvGbARtSg9YOqb30haBGN2CGCCLLaWA6TOWC2wFBI3NMZqxRQEojQWADOakB8qTHiNQZtOMsVHIYWuiDF2Q1EjAfC2zMsf3MsD3cqBbJUuGWoHWVUeAMknpzD+B3EF6kHupBlC/p2Kf+wlYD56W/5XnDFUS6F0JoB08UMyC4W8Ug7eRfl9upzj/psPZoEIewJWIv6CRuSUCalNROFbjHKQLxY4JtvGhFokIxMJ8SNavAb7WCYmlS6zY1URgpmcx98vdooW7iNfPEUk1AXIeB4n6qjmj8RXFKb8O0WImYo4qhJWluIXcP3n2fPTmlQyXQM41glC3Gvg6NOywYypK/5vE+LKOBkIHHj0bcAVD4R3Y1Z6WB2RWB0JtRYxvqOZjDptFZnRMBkZhLPgRBjzD8VceXyIeT3DYTYqM12kvwdSpQ4fjtuJt+LcZYdI1Ojj0DtxDw+JMJMooGdSQcRC2j5IuWxeMQleXTcjFi61Ii/LLpTLq8fphajby89ZfBX9tO55ZEKIYMms3AcUYBVFs6vd/OPFpPLh+eMhnmGc069txJYrZRUt0q6Rf6aTsNtloLpX1Y16KDvgBhKTqAkiou5DdynZMChCQ6B+7sUxRFF9YCgTatVk0Bkck9r2XpUNjOEhURUAAKUpnAolmmGhJGQMlqFEU4jkBf1I/4jFTn4MkUBYtoGhR/mR0huiKcgLQycSMafxtjPW7C6jJcFaL0tSeYfVcxF7Jgb1SMIUDj419PQNaCiC+71fOA9d4a/EXvuWIJh7wKocRYnhEq3NBCLmKkN3vpVbnginkhmL0AdkEtTgXxJG7iotJxcNrUROSYqJPMXodmdSqKHUrgUQYz+a54LsAAwB7PSzVTR6hyQAAAABJRU5ErkJggg=="; const pubmedImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3VpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzZlZmExZC01YzBjLTQ4YjgtOGMyOS0zOWIxNGUyZDhlMTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzZERUJENEZFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzZERUJENEVFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNzZlZmExZC01YzBjLTQ4YjgtOGMyOS0zOWIxNGUyZDhlMTYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc2ZWZhMWQtNWMwYy00OGI4LThjMjktMzliMTRlMmQ4ZTE2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+E5EAIQAABCBJREFUeNq0l39MW1UUx0+hpYWuRUZZcUgY+4ELS7ZBcDP+Npos8RcaQ41LiD+ymGXqH/rHpn9IFI2aGBP/UzOzqMxpUBOjqYtuZiHqnCIGYg0bGRbGXPkxcKUUaWmp3wO37737Xkv6ayf59J17332v55577nnnmkgn3d3dfDkAnOBtsKi939bWRoUUs7huBg1gAPwDasEL4BbwIIglH6h+8ZuCGlAkrruAF1z0eDw/+f3+etF/L3iKrqIUpei7eWBg4BFN+2Vgv1oGmDMYUwXuAZ/r+svAnaAFuMAsGAeD4DSYL5QBpDPAAg6B58DaNOMXwHfgA3AcxLNZglSyjX+e/cNWjssP4NVV/pzFBloBR+x5sA+U5GxANBqtE+oxcGuWy7wBHAZ/grtyMiASiZRh9nvFUuQqvM1Pgk+Ae/yN+zOPgVgsxi59Sdu3vaZc0ecWFunvaWPMrS+3kWuNVWmfn5qj+WicJ3I38glPps+cxQyuTSpuh5W+f+Y25cblcIR2vn6CYksJ6YGjj++mxmqn0m7/+Dc6MTjB6jqRe/qKsjDAkVS2VjukGy67lW5vqJL6WuoqpD9n2VK1JuddII1tWOcw3GzbWSu122+oM4zZWGnP2QDJt1vdTsOAPY1uclhXVrS81EKt29cbxmzK0wOKXO82vqjUUkytO2qWdU/zdWRDWy/1eXhAZ4AzZf/elpVlaN+luj+h8V2100b2EnN+BtRcY1NczXLy7KSiN9dW0GM3bpBixOsLyFmpsiy/GNDP/vDpYboU/E9pv3bfNkUfn12g938elsZv1sVBSgOCwaDUNplMCTUA5R0wNDlHR3svKG1LsfrKj34dpeGpsLwTXBkY4PV6qbOz02DIsgc07g1HYxQILtCx3lFDElqMLy33z8xHaS4SS5sL0i6Bz+ejjo4OCoflGWiT0Mh0WLg6IsUCy/G/xmkiFFnWx66oabrelUUMBAIB6urqUgebTJiBQ5PbVeO6ekekZ4+c8Sv66LQaI5vSLMEY+Ax8BaSo6enpoVAoFGW9tqKUykqKpY9LUk6dm6Kxf1dmOjgxS2f8M8q9ZD+L02ahSrvVYMCP4FHwEMpyrpB3gE85+uPxOPX3919M9Q0YvqwasIQNnwzGI7/I3hiZ0QVilboMpjTngpWM5vE8zEVIU1PT75f2vHKTbmgInBW1H3/dtmRR4iXPHu+uGgMw5ktcnh8aGgppzgaDotxaKz6pd4BG/gSIMv5D3iD5lOV6eQ874Zx4KRvUDL7WHlaEsCe+BU9wsHNOAleyrorhdn0XV7RfcABzuucSMQOjp0QF9Q7oBPvTTTbTVMx1/pMZ/rlWpsHTYql8+RgQn3jzgck8CtI+cYB5S19bmBOJxKpPFvAwymnxIKcWzlvZnowKKXwI3i0Clf4XYAA/EDgbfkAEYQAAAABJRU5ErkJggg=="; const dataciteImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzZERUJENTJFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzZERUJENTNFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNkRFQkQ1MEVBQkYxMUVBODQ4QjhCRDE2RDBDNTNEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNkRFQkQ1MUVBQkYxMUVBODQ4QjhCRDE2RDBDNTNEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po7qg+wAAAMRSURBVHja1JdtSJNRFMe3WuVLLwZllhpMojDLChdFX/pQsaiEbBZDCAqKhDIqCMkEi0hMImif+hZJEEQmZi9mhR+aRjTTXrAXsq0RJTOwdELLtvU/cp64Pj57vBtb4YEf99xnd/eee++559xrDIfDBi2xWCyGeIvL5RrzbZLhP8uENGAKmAeS/rUBRnAK+EAv8IM2UAqSYzXAFEXbE6CK9X5QA1pBACwHnWA4UQYsACdZp0Gs4Fk8tsBkrPuk+UPB6GoZSGH9WqyDa41lktz73UplKN3c/NZ+fhX7wADoK3DYQon0gcUgU6mk+twtKCh6bQaFYFPH4fogO2YP+Mh0gy4Y911/dlc82lvgsCmqnZd9ZAHAdLEdBp+GogSUgyUaXb0BTtAM7nMfUR3DdEH3axgaAJehrgBneXVEyQX7QT34Ci6BhdEYMFXQI553NqQS6nGdvmaAA+AdOCprQL+gz1QZpCUX2R/0hKLoBbBPxgCvqr5IrzFW4TcKj+QhKJMx4JWqnq/XGE5J25QnacCwjAG9qlVYP077Y7zXMtIgm4weCfrWSL6D2e9EcVqyT4oVDtlc0AD2sp4N1vHZVgZORVENDkk6dh/YDgZlDaAA8g3M4ToN5MTAtNR7OAhlSvbVAXbxCkjfB36B60IALX5hr70B5Qsto+Tgn8FBsFYZXCoXYJYZKFameJ6Hcm9Vc6ALT87qbLJ5rEfG+/tP8BDUgUaeyJhcMAtlBi/vfJADzHze88VQnHOn1jC75+nfP78uqjIEskedStqmLtAOntA2IS74hcloZsMgR6a5PFgyf/NyFKR0nEYO47XsSEpzu6zGUHBk65berhnoLqwoD2Qto/v2B53MR74yGGs2VMsZUCnUX4KN7NlaUsKTcWqtgDGGhwndih+DNcI3N19a2lRtt4CrfHSH4vUwoTthMXu1ImY2qomPJa3IOXa8u+o7QKy3YvWR2gAeCLmdfGUbo8gPUJGol9F7sBq0RPid7otFGtk0rk8zH1/RKaze48RF327yxbo1ng8TPWlkJt7j9I8AAwD3p9cpqoDWqQAAAABJRU5ErkJggg=="; const equationXRefImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAB0klEQVRoge2WrXLDMAyAv/3APEDRSIOKylvekrKRoj3DUNFQH2BoD1C+opGOZzzlLc8DBA0NxF6UXJMo2ZrudvrufJF9jixZkm0wDMMwDMMwjEtxc2kDKgiAkZPTuolX57elNSHwLPovwK5q8l+MwB3wCSROHgHbqsm3PRnVhti1AJg2Tb4+uzndCIC1kyvTB3QRGLjmicnyNHD9Aw2FJhgLOXFN6krd2NqN74BNnUKNAyGwEv0l8CCMWSp0eFbC2A3wWtIVAUe3ZkRWwLVoHIjcIj4KoVhwR3H33yp0LISuuZOHQp9nD0ycnAL34r/klGJtEUdC2USM75X/e45CDkpfyNLT65+L8QM/dOCd3AG/+ymZY5IF9cRCHnO6Jp6UNgH6Uygh2wXIUymumNukR+5k+XBojTYCA/JcTcnCPnbfNjUAv5eOgD4CMyH7SKgumhPIOugtArKgtuS5O6N40TTVABQN9Q60uUsKaCIwp3hpyRwOKe6ihpQ8ip6Pljq+0ThQTp/ycTajPWWDyw6p0aTQ44kxTarUkZbkTvkPl3vMDYXc2Xjo/zk9JTNeHgqdjk9P3xEYkN8BkOV+7XO5ib4jkJJfhKrXpmEYhmEYhvGP+QL9m1fJg2Js6wAAAABJRU5ErkJggg=="; const equationXRefDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABs0lEQVRoge2W4XHCMAyFn3pdICtkhayQjsAKdARW6AowAhkBRiAjNCPACK8/IoPiEnASIPzQd5eLbYQs209yAMdxHMdxHMdxDCQzkiXJfO5YBkOyYJfl3DENQnd+TXKrCzjOHdMoVEZ3F/DxqoCGQDIDsNPu5patJDjLAZyTSUT2JAsAmQ7VInJKDKw03UZEmsjXCUCjwRcANiLyneL71qSLKKkykjvbV7ubj9oczf9WOmZ9bUmuQjslvrsSEpEK7a4ECgBhJzfR7rPnCVSRH/sGgL3xfdLFrCaXU5I/ZpfWpr0wNmA/wWZpxnY6ZsmjEwmUPaElLyA3zn71fYxsUiRk/ZBtyTz7HRNbUhUSkQZArd1wnPuhk6kfK0crjcH+gMQFsNVg0GrQfElNYGva81hsHixM+3kLAGCv83ASWRRAKrVpTz6BJNgtf1a3B2NzNwfULuN/DlcnflDwtnIcriTi4BKnfiyrsfGlSKgjH03Evt9TqaJ+fdXqXYlOddLX5lwfc/HtO5rPiYEMgu3NXaAru+dVn0fDy4faw6rPqyV0wuUirAB8vXh+x3Ecx3Ec5534A/F+SwdqC2c1AAAAAElFTkSuQmCC"; const sectionXRefImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACa0lEQVRoge2YLXcTQRSGHz5OEF0VRKJQq2qIQkVhiKopvqqYKn4Ait+AQtUHQ0yjMEXFEENNMFGpKWYxwSDezGEzu5s0d2YPiHnOyTmZ2dmd++7OnXvvQCKRSCQSiX/HgwjPyIAh0APyUv8c+AYsIszRSKiAEXCGRDSxAD7QkpBHAfe+Bs6Bzp5xXST0BlgFzFeLVcAAeOv1FcBnYLb5/8y7fgxMjPM18th433OvvUKCilLfHLjY/L8Eroxz7cQqIPfaU7aNBxmcAde0sHQcVgE+vYb+caTnN2L1gafIDxw58Bv4HmzRgVgFLJGAbqlvALxEQlrd+8tYBayBr1RFZMALJOQJcEfVN6ISEgdOkKF1ZEjcCYoTP5Do6FgFXKBA5ijQsurWjD1GqcYN+iJRsQgYAG9K7QWKARNk5JrqNuvypSmRv4RFwCnbBn7kr9OuUCSeAf3Nz9FBQmaGORt5aLinv38IC+Ad1eg7NMy3E4sAn1Oas9FLr70razVhETD32jlaRiP2G/hfZKNLZGw5je6g/X+EaowlctZztv3lE5GjtbWgyYH3NL/xAr3tsvFut4pKSEWWoWpsdI+xY/T2o0flkEi8RlviF7SE+jRXZ0uUekQnRICjQEKmwC2qxPyllQM/aSHJiyHAsUYGTlBGOvCud5HIqMSIA3WMqQYxP72IgrUiy5DzHlENVo5b47MP4lABzvBy9P1FtXTMgFdeXytFzqECCnQiUXbSM2TsNRLTQzmP78jR1z/Y4sC+IFbHFTqdi45lF7pD+VBOfQHjM0a5UiuEno0O0ZLK2d5l3KHulBbPhBKJRCKR+APr/2wSkDXqVgAAAABJRU5ErkJggg=="; const sectionXRefDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABt0lEQVRoge2X23HCMBBFV5k04BZICW6BFmjBLTglkBJIK1ACKcGUQEo4+fCSUdaSnTE2UjI6PwxISHe1L0mkUCgUCoVCOty9CwCViOxEZCMitTd0EpGTc+7j3j1WA2iAK+OcgXp6tQcDtBPCLds1dMwKIRVzND9/isi7ftbSh5XPxTn3Mme/xQH25nQ7zQV/TuONt3Y8KcDRGNBG5rXAZk0tzwutExTpnHtbaP1liSRw0AtZAlRaHi0d0KTW9ytGjLgZsnr830UkjELss6pAIiLAwYi8jnjj5pE8ujGwNeLOtxPWMWucb2R6TwQE2o4rQM2wVwAcUmi24qywgQHe3EGoPVJrTJQ14DuEAnMr64Kl9TzN+M/JfK9FpKO/+0zF+GXGfsuipxp7A1zxLm6BEMqjW2uSjj1kQmX1nFr3D9QTsZJpya+Z3QA2asiYR9KXzynUIw191w3xNy55ItF7Ul45MEUoP9bYZ9aLTBOyEZHKOfcamZa+5ls0zluTsIParvNsLuQRQoQvaR19qWyJV6Q8kpjpJhYirzKqRow9YHz2qfVGAXYaMtaYo4ZUvm/iQqFQKPwLvgCpiCypib09zwAAAABJRU5ErkJggg=="; const listingXRefDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk5NEY3ODRBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk5NEY3ODNBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTllZjExZS1lZjQ2LTQxMDMtYjEwNy02ZjhiYjAwZDg3OTAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4tuXxXAAAAeElEQVR42uzZIRKAIBAFUHC8lscwWTyaxeQxOBgaDEaa7PD+zAYab9jdQq61psiZUvAAAAAAAAAAAAAA/Jf5ezjOq+vL7tva9ALlqdpZlegtlJta6M1iiAEGB9hCtpAhBrCFbKEwyf4HAAAAAAAAAAAAAIYF3AIMAMlpekFYUthNAAAAAElFTkSuQmCC"; const tableXRefImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMDQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMDM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7W5ot0AAAAf0lEQVR42uzZsQqAIBQFUF/00UHQEAT9tS0NjSWGSedugkMnexehyDmnnjOkzgMAAAAAAADQMuN1sWz7Jx5qnacywJnWt7v47yf08E3kl/ZpIQCASkN8d6hq73MCatQQA6hRNapGDTGAIVaj7U4gegKEn3wAAAAAAAAA5TkEGAB+Zxxj6E3/9AAAAABJRU5ErkJggg=="; const tableXRefDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NzU5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NzQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz76dIDbAAAAaUlEQVR42uzWQQoAEBAFUCP3v/K4gIVCkjdL2TzT/4nMLC9PLY8PAAAAAAAAAMDCtMHZ7d9dfL+B2ZfIQ/eEGABgU4hnQ7X7ng2oUSEGUKNqVI0KMYAQq9F7GwgZAAAAAAAAAPgE0AUYAAxGFmU6tXJJAAAAAElFTkSuQmCC"; const figureXRefImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACCklEQVRoge3YP2sUQRjH8U9iMMEgggYhETSgEG2SQjCIItaCNlZREFHQTqso/kPBShGL2NhoaSx8BTYRklbQdL6BWCiCxEYQsZg7Pda7y87euFc432aY2Z3n+T0zz8w9t2QymUwmk8lkMpmKDDTaIVzAcWztg45vWMJz/IiZuKnRXsQpDKfVVZrNmBIW8n3MxOYOvBBW/i0W8CWlug3Yjis4iHWciZk82GibaVO3eA1/CwUdpRks9OsW37PfoZQqunAUc5jAGhaxksJwHQEcwfWW/u6Wfs9BFFPoX9DpUM6lMF5HABOR41HUEcBa5HgUZQKYwUM8wzWMRfpY7DD+MtJOWzY6xNO41/LeTuzDPL6W9LEi/GDOYRwfhaCWI7W2pVsAk7jZ5p1x3MEtfC/pZ1kiwUU6pdAY7mK0w/MpYRfqOENdaSdgVBC/Ua7P4nJyRZEU02NYyPnJkvNP4BNetYzN4Cx24INQIn/uRWQ3igHMY3+kjXOCwDfY6+9DPy3cYqtVRXajmEKzFWwM4CoOCSVCcVG24T5O+1O+JyPVIRzCbeGG6uTnPG5gSyKfvw2noszqHsZj7EnltB/X4C48wrEUxvp1j48IF8YlPZb0df2h6cRJoTR5WtVAcwfWk8ipxgE8qKqjGcBSMjnVGGm0r2MnNr8LrQolxFQqRRV4hyf42UcNmUwm87/xC+iEQMxfY06MAAAAAElFTkSuQmCC"; const figureXRefDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzdGQUM2QjQ5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzdGQUM2QjM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4bY3DUAAAB0klEQVR42uyYv0vDUBDHE4W4CKWKg6VZXdTFxdl21kVpERf/CnEVF0eLq5ug3dx0cJQq7upgl04KghUchBQxfh+8ITySNO9HfskdfAhN4d19X+4ul2f7vm+V2SaskhsJIAEkgASQABLwrwQ4oAM+gJ8DQ+7fSayAzUIBjv1i2JEQVyS2MMyxnZ8pQGawJzGrkkLB4K9BDdgZUOP+wuKINfEJBH+wRd8y3PV58BqMTbcLpRF8CzwCj19b2v6EogiaZZitiIJt6fiPSyHb8O6zHV8Muf8EllT9ZynAi+jvIzCl6j/LN3Ff8r7xUaIJemAAusCV9HUQcf9Qa1sSFnEDeML/fTAnWcht8AxG/NrWbSJJamAZ3IJKiP4H0ADfhtLMeA3UwVVE8MxWwQWYLOI4XeHB18essQFOcpuaYnLwTnKC3BfWaoIeGIAucBPktHQNxC0ga79gh6+zElL072CtyAJ8HvQ671Bh9gP2gG1KQFwX0ukk4zrIJdgFX7pdKA0BSe0FbPIZKbU2mqYtgHuwXeZTiWlwzj/kXZUF8kwh0T5BVTeFhjkKqKrEIQo4K8h51anqm9gBnZzPhG54HErvATobJQEkgASQABJAAkiAhP0JMAAxLAJengtz9wAAAABJRU5ErkJggg=="; const theoremXRefImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0RkM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ5MUI0RkI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7lxtDfAAAByklEQVR42uyZu0vEQBDGL76wUPENinjgA9EUildbWdmJkkoQQRCsbAW1shX/Am0Eq2sEuyvEwsZOixQWgld44OmJWogvjN/CBIaguYh4mcAM/NjdzBH228fsZM/yPC+VZKtKJdxUgApQASogXqvxK67riu+sbduRZsABReAJoQCmoi6hWrADOgQNfBfY/c0esASuHiuqgHewCG4Edf6a+hS+iZllCQ2jFQ2jvk07c39+6UF2Pz4BZawaNIX4Hyj0iRDQC1bBBEiDxgjvawaPEgTUgSPQT6PaAD5Z536aiVcpm3iGylHQAtbAOWglMuQ/phjt8xL7JvbTDjAJ8tQ2o11i/jYqS+KiENlGoN0O7li7k8r7pJwDY5Tg8fzE2G0SBHSD8cAMpKUsoSgCHPpdgT3LJEWACZfLVOcJ3gA7uEQLWAJDVM8HNjVfSsbmpQkYBttUfwOXzPdE5QqdFSNgVpqABVBP9Rx4Zr5TKvvAmfmkZs/ECDih1MB0fDPgWwdXVDcpxh7YknSQGTukhM77Jt5fgEHQQ8sptgOtXDpdDPF9sFmQk0pU8mPkv/aA3gvpvZDeCyXoXsjSfylVgApQASpABaiAGO1LgAEAajeaste9Eu4AAAAASUVORK5CYII="; const theoremXRefDarkImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2NkY5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NkU5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz70cgaEAAABwElEQVR42uyZu0vEQBDGL3qKhYpvUMQDH4heoXi1lZWtcq0IgmBlK6iVrfgXaGNraWchFjZ2WqSwELzCA09P1EJ8YfwWvsASNCbNZSIz8GNnM+HYL7s7O+w5nudl0mx1mZSbClABKkAFJGtZ33FdV/xg8/l8pBkoggrwhFAGs1GXUAPYBd2CPnwv2IuzBxyBq8eJKuADLIFbQYO/4ZjCN7FlB0TTaE3TaFiqimu1TMnZmO/Xg9aQ+CNTnwgBA2ANTIMcaInwe23gSYKARnAMhvhVm8GXNbjfZuJNyiaeYzsB2sE6uAAdpMD4CXO0z2vim9jfy2AGlNg3X7tqxTvZVsVlIdpmoN8F7q1+D9uHtJwDkyzw7PrE2F0aBPSBqcAM5KQsoSgCinyvbD0rpEWASZcr9O0Cb9g6uEQLWAaj9EuBTW0vJWML0gSMgR367+DKij2zXeVZMQ7mpQlYBE30j8CLFTtjOwjOTf1mPRMj4JSlgRn4ViC2Aa7pmxJjH2xLOsiMHbKg837I95dgBPRzOSV2oP1VTldCYp/WLMgpJdJwP6T3QnovpPdC/+heyNF/KVWAClABKkAFqIAE7VuAAQA7zJsxG/IKEAAAAABJRU5ErkJggg=="; const allXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACS0lEQVRYhe3WS4iOURgH8B/DEMkCG8lCkstMYQppooTFkDQp47KQshAWskBJLCQblElSGmalLFi4bYaUBSuXGcZYaoqQy8JtZlwW53zNmdf3+d7xZWX+9fSe5zmX5/+e5znPOQxhCP87hqXKzqsdpcbNxlEcx50i/dvQiwv4me1sXl1TksDwMgSn4BweYQ2aiowZgQNowW3MLLNmbgJb8BxboxNYh5GZcY2YGttLI9nDGF0pgVv4nLFNxMqMbXdGr0Y9flRK4AU2+z2m65P2oigp2oVd6amUANzEkYxtLcbEdvbvu9GAj3mc5yEAh9CW6OOwSoh7Y2L/GJ1353VOf3L9Cd+xEQ8wOdo2YEEy/7sQrvbBOC9GoA2P8TDKU+F8vxZifzvOacCXZN4uXM2sOwNzUIuDeQksi1JADzoSQleEozgqClwUtn0/aqLTWcJpKCA3gSyqMT9KKTQpXqByIU8S/lOU24E36ERXlAYDQwSX8Ql1QtyrKiFwTCi/nXiG90nf9sT5B4wXLrN6IUTdQn2ojfq8KKVvoiIE9pUYtwGnEr05klmMSUJyLhFK9/0opXwMQJ4cWIHz+re2B6fRmoypw9kS8/sqIbBQ+Lv0SF3BS1zCt8S+CXvKrDcoArW4pr/uF3Aift8ZWHwIOZS9Lf+KwBRcx4SM/QHuJXprpr9KKEzTKyXwSki0rxn7yYx+QziqKUZjeaUE+oTtnIu70fZWiHuKXuGPCQ+QFuFJdiYvgXKFqEt4Zu3AWAMvoAJaMQ178SSv4yEMoYBfppRxbh+K3NcAAAAASUVORK5CYII="; const equationXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABl0lEQVRYhe2UvUrDUBTHf4pz+wQWH6DBycni1KlG3IsUHEuDxqngGzhZJeIepIKbkHTQTBInN5vBUSI+QN/A4Z5LbzEhRawK5g+Xe5Pzcf/n4x4oUaJEif+OpUVf0OwMLOACqAFx5Lt7pnx50QSACXAiq9HsDBo/SiDy3TTy3RBYFTJjU76SZeQESVeOWtkCUs+uhzn6NWBbPkNUui2Al5toCFyJbCfy3UkhAaACdMUZ4ry3dXCaow5A3yC9KfapEUAPqDU7g4lJIq8EI9mrQAOYGNHvAq/GOnu+u0+ZzZYlZzNjF6hMWMa/7Ax4dn3sBEkqylVgaIifJBqNd9lj0a+gSgCQSP0vcwItbMJqgdxEIrtlEIiLjDIJOEHSECfaQdsJEk1mA5VOvfYBjBLpy8eeXZ9puLkJAC3thGlt27LfAmvGOjTsYoPAiDnwqQckUn3ZG6qTLaD1cH6UW0vBI6ppNflCfOsolvnRR72a9Xls8ubAVy7vM81c5sBaKAHU4AE1bq9/g8Ax6tmGnl1Pi5RLlCjxZ/ABxApv+tDwMawAAAAASUVORK5CYII="; const sectionXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABsElEQVRYhe2W0W3CMBRFT6v+ZwMmcNQFEAtgBijKAK3wBAzABEZ0gIoOgFkAhQEqPEE2yAb9sNM6KCJOAPGT+5U4L7k3z+++Zxgw4MF46hKsjE2BcbCUaylOdxfgiVdA2vD4BCz7CmkVoIxNgB0w8kulJ02BJFibaCnKrgKeI2KmAXnuiTJg4oUUwKIPOcBLREwSXB8rIi1FqYzN+hJXiMlAEVy/K2P/ivBacogvwhUwD5Zy4FtLsb9WQEwGAI5n92NgrYw9KGPnTS/EIsYFc5wFwW1HQb0XgCvGXvVwMQPegiH5LHDANghNga+u5K0CqDeeMnBAoaVYAlkY6xvWTQWEKU2VsR/hQy1FjivICqFloxBTAzvqmSiATy3F1m/RwROXWorXrgJiXJBR/8sRsFLG/uBadILLVNbwbiuip6F3wxvNA2nRtyd0GsdeSOqFhP6/6zCqQUtx8g6Y8V+kyZmg2wpQxs6VsdNzIbgGdBUuTsOzs0CpjE20FNtKFPWOWDR8ohUxNlzjzgSXkPsO2RmtW6ClWACbCyEbYNGHHLrZcIRLeXgM29/iTDBgwEPxC0fwlYYuS1E7AAAAAElFTkSuQmCC"; const listingXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAZUlEQVRYhWNgGAWjYBSMglEw0gEjjJGz5YotAwPDAQYGBiYa2vd0io+ODLIAumX/aGg5VsCCxD7MwMDASm8H0DK4SXaALQMDw18GBob/NMRP8DmAgWE0DQwAGE0Do2AUjIJRMAoAyC87sLKZnK8AAAAASUVORK5CYII="; const tableXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAVklEQVRYhWNgGAWjYBSMdMAIY+RsufKfFhZM8dFhxCfPRAtLSQED7gA4yNly5T8uQIkcIXsHPARGHTDg2RAORhPhiHXAaCIc8CgYdcDgSYSjYBSMWAAAxx4KtgvwB9YAAAAASUVORK5CYII="; const figureXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABsUlEQVRYhe2UvUvDQBiHn9outoKiVimi1g9wCaiDiA6Cg1sGERwUQdwzKoK46KjolEEQdCl+gU7nP+Ag6GAdgpOCuPmB4mJBbOvQNKSlSZM2uJhnOe649/397r17D3x8fHz+OwF9HAM2gVYPcz8DS8CFk83XwDRQ45F4EJjR89qSr8Aj0A1knCpkRZnEMiHgHojb7TOf2LF4Ee3AMXAHHAJt+vqPk2AvSr4NDANhYITcW3KMFwYGi+b9f23gpmiedBMcKrWoCK0D2AA6gV1VlvZsciwCW8AQcAUsuzFg7oK4Lt4InFH4eldVWUqYAx10QUFeKwquQBFaLbBXImhNEdqEvWRlGBVQhNYD7ABWQilgRpWlW0VoIXIfTSdwpMrSvUXMI2UqYDaQAObKGH4HpoAFYN5kbFWVpdNqDZTRNngFmk2xeRLAuipL324MVNKG0RLikKveiSK0mJtkhoFsttKfuIAB4FwR2igWLV5MUB9n61pikWhXH4FAqcO5ojaTTk+mPt76Xh7uGoBdu815tfFwfeP+1+d7teIGkaYWmjp6V56SlweOAhShhT1T9/FxwS/rkWUDMDJyvQAAAABJRU5ErkJggg=="; const theoremXRefInsertImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABSklEQVRYhe3WPUscURSH8Z+uhDTarNgEA6KwKHY2Fu43SBdIISI2dmKvlYWNjZWlIFgIYqGF2Ckp0kgsbdKkcUHxBdRGQVct9o5cNpNCmNkEnD8M5+UynIczZw6XQoXeu9oSZ2b3+BO+YyCnWnWsrXwZno6T7ZFfzbE4lDDZnIwBfuB3jgB1rDcnOyK/hv4cAVL1CnD16/ZNL5YrXZkAtKfkRrCKI5ziDs/Rc51J5b8AdGMPnQHkDJvh7BJb2MkToIqvmAjxMqaCf4BvUZyJOpri7WA/B1uLznL5Q9JmAIYigNK/ABgL9gSDrQb4gHGNobtHb8gnn6WSJUDzDMAc+rAf4mRBLOAjyljMCiCtAz14wFKID/FTowOz2MiqOOkdmME8bkL8iFGNHXGhsYxyBXiOiid6wnmWhf8AKFe6WnIfQHEfKFSo0P+lF+J0PxKDtMCfAAAAAElFTkSuQmCC"; const tagDelete = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyOWM3YjkzZi1iOTZkLTQ3NGItOGJiOS1mNDA3ODA1YzE3MzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA1REZGNkREQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA1REZGNkNEQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMjBkNGU1Ny0wNDNiLTQyMzItYTY3ZC1lNjIzMDE0YjMyZGUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ODQ3MDEzNS00MGY4LTAzNGMtYTczZC1iMmUxYmQ0OTE1ZDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ag8jqAAACf0lEQVR42rSXT0hUURTGn84YhmUtKtfh7IL+uMhNIDWb0HYtnFSUoD+bQNxky5bVRgna9AcilHKoXUUbCUVxNoo8cNVIa3FTWmrIRN+R74VN99x735t5B364uOee73Puu/ee21AqlQLPOAR6wEVwFpwERzj2HXwFy+Az+AB++BTNeuTkwCi4BlqUnBOkE9wGP8Fr8BCUbcUbLWPN4AFYATcs4qZo4ZwVmmiOa6AdLPA/PxAkD5l7l7VyvgY6wDzXuV4hteZY22pAXH4CbUH9o421c5qBg+AtOB6kF1L7HbX+M3AfnAnSj9PU+seAfHQjyoQKeAyug1kPgVnmPgG/lZyRaCkiA/dAk5L8DAyDl+ASKFrEi8yR3DvgqZLXRM09A4d5yGixVPVr9CkmihyrKHOroyDaYqDbccj0g4zDhElc5vQ6DqtuOYrzjjXtAhNgYJ9AZCIKk/iER+18ll+lKwr8q5kwiRd8dkSWOyCowUSQUHxv98k30BpjDxcokDGMxRWXaG1McJA0JLxd1QkbMfKnuCsqyoHVxxzf2BADqzWIZwxbtD+GiVUxENYgPkmSmgjFwLQjacYi3ks0E67a02LgI3s4LSYt4lFoJmy/wpZoi4FN8MaS2OEQt5k4Z6krTetm1BVL8zmo3Ig3wS+wCIYcx6uYOAZegfPglpK3y2b1b1surfMYG0jTATMcY2vlPe6AcfDF1BGFQfoRmjoiiW1wFaynKL5OjS3t6JSluAzWUhBfY+2y6+yWLuZCnZcjZM0l38ujzHfeI36xSWOXNTq1N6Lt9trh0+wUeL5/3TxCvqcXnDvKWuarNebz/ErV8/wox75VPc/f+z7P/wgwAHIMm7NGjWqDAAAAAElFTkSuQmCC"; const tagEdit = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyOWM3YjkzZi1iOTZkLTQ3NGItOGJiOS1mNDA3ODA1YzE3MzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA1REZGNjVEQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA1REZGNjREQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYTZmYmRiYi1lZjI3LTQyYzctOTQxNy02YWM3OGRkZjFkNmUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ODQ3MDEzNS00MGY4LTAzNGMtYTczZC1iMmUxYmQ0OTE1ZDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7ILxSjAAABGUlEQVR42mL8//8/w0ACJoYBBizInJMnT9LFUnNzc7qHAPNARUElEL8D4i9A3AXEjPR0QCcQtwGxIBBzAHEpEPvTywF2QFyGRdyYHg5oAOJvQFyERe4orR0ACvZ6IN4NxIfRHAGS24E3G1LBcliwC0Ad4Qp1hAQQVxAsB6hkOQOaI/SA+DEts2EnjgQHArPwWU4NB+CzHJTvy2lZF1BsOSUOoIrl5DqAapaT4wCqWk6qA6huOSkOoInlxDqAZpYT4wCaWk7IATS3HJ8DkulhOT4HhNHDclwO4ARie3pYjqs6dgJidiT+PyDuxlWf08IB3tCW7G5oCwaEX9ClYwIFE4A4F4j/0r1nBAW36Nk1YxzxndMBdwBAgAEAlTlANVZ6av4AAAAASUVORK5CYII="; function defaultEditorUIImages() { return { copy: copyImage, properties: propertiesImage, properties_deco: propertiesDecoImage, properties_deco_dark: propertiesDecoDarkImage, removelink: removelinkImage, runchunk: runchunkImage, runprevchunks: runprevchunksImage, search: searchImage, search_progress: searchProgressImage, omni_insert: { generic: omniInsertGenericImage, heading1: heading1Image, heading1_dark: heading1DarkImage, heading2: heading2Image, heading2_dark: heading2DarkImage, heading3: heading3Image, heading3_dark: heading3DarkImage, heading4: heading4Image, heading4_dark: heading4DarkImage, bullet_list: bulletListImage, bullet_list_dark: bulletListDarkImage, ordered_list: orderedListImage, ordered_list_dark: orderedListDarkImage, blockquote: blockquoteImage, blockquote_dark: blockquoteDarkImage, math_inline: mathInlineImage, math_inline_dark: mathInlineDarkImage, math_display: mathDisplayImage, math_display_dark: mathDisplayDarkImage, html_block: htmlBlockImage, html_block_dark: htmlBlockDarkImage, line_block: lineBlockImage, line_block_dark: lineBlockDarkImage, emoji: emojiImage, emoji_dark: emojiDarkImage, comment: commentImage, comment_dark: commentDarkImage, div: divImage, div_dark: divDarkImage, code_block: codeBlockImage, code_block_dark: codeBlockDarkImage, footnote: footnoteImage, footnote_dark: footnoteDarkImage, citation: citationImage, citation_dark: citationDarkImage, cross_reference: crossReferenceImage, cross_reference_dark: crossReferenceDarkImage, symbol: symbolImage, symbol_dark: symbolDarkImage, table: tableImage, table_dark: tableDarkImage, definition_list: definitionListImage, definition_list_dark: definitionListDarkImage, horizontal_rule: horizontalRuleImage, horizontal_rule_dark: horizontalRuleDarkImage, image: imgImage, image_dark: imgDarkImage, link: linkImage, link_dark: linkDarkImage, paragraph: paragraphImage, paragraph_dark: paragraphDarkImage, raw_block: rawBlockImage, raw_block_dark: rawBlockDarkImage, raw_inline: rawInlineImage, raw_inline_dark: rawInlineDarkImage, tex_block: texBlockImage, tex_block_dark: texBlockDarkImage, yaml_block: yamlBlockImage, yaml_block_dark: yamlBlockDarkImage, python_chunk: pythonChunkImage, sql_chunk: sqlChunkImage, d3_chunk: d3ChunkImage, stan_chunk: stanChunkImage, bash_chunk: bashChunkImage, bash_chunk_dark: bashChunkDarkImage, r_chunk: rChunkImage, r_chunk_dark: rChunkDarkImage, rcpp_chunk: rcppChunkImage, rcpp_chunk_dark: rcppChunkDarkImage, tabset: tabsetImage, tabset_dark: tabsetDarkImage, slide_columns: slideColumns, slide_columns_dark: slideColumnsDark, slide_notes: slideNotes, slide_notes_dark: slideNotesDark, slide_pause: slidePause, slide_pause_dark: slidePauseDark }, citations: { article: articleImage, article_dark: articleDarkImage, book: bookImage, book_dark: bookDarkImage, broadcast: broadcastImage, broadcast_dark: broadcastDarkImage, data: dataImage, data_dark: dataDarkImage, entry: entryImage, entry_dark: entryDarkImage, image: imageImage, image_dark: imageDarkImage, legal: legalImage, legal_dark: legalDarkImage, map: mapImage, map_dark: mapDarkImage, movie: movieImage, movie_dark: movieDarkImage, other: otherImage, other_dark: otherDarkImage, song: songImage, song_dark: songDarkImage, web: webImage, web_dark: webDarkImage, zoteroOverlay: zoteroOverlayImage, local_sources: localSourcesImage, packages: packageImage, bibligraphy: bibliographyImage, bibligraphy_folder: bibliographyFolderImage, zotero_library: zoteroLibraryImage, zotero_collection: zoteroCollectionImage, zotero_root: zoteroRootImage, doi: doiImage, crossref: crossRefImage, pubmed: pubmedImage, datacite: dataciteImage }, xrefs: { section: sectionXRefImage, section_dark: sectionXRefDarkImage, figure: figureXRefImage, figure_dark: figureXRefDarkImage, table: tableXRefImage, table_dark: tableXRefDarkImage, listing: listingXRefDarkImage, listing_dark: listingXRefDarkImage, equation: equationXRefImage, equation_dark: equationXRefDarkImage, theorem: theoremXRefImage, theorem_dark: theoremXRefDarkImage, type_all: allXRefInsertImage, type_section: sectionXRefInsertImage, type_equation: equationXRefInsertImage, type_figure: figureXRefInsertImage, type_table: tableXRefInsertImage, type_listing: listingXRefInsertImage, type_theorem: theoremXRefInsertImage }, widgets: { tag_delete: tagDelete, tag_edit: tagEdit } }; } function tableMenu(insert2, ui2) { return [ ...insert2 ? [ { command: EditorCommandId.TableInsertTable }, { separator: true } ] : [], { command: EditorCommandId.TableAddRowBefore }, { command: EditorCommandId.TableAddRowAfter }, { separator: true }, { command: EditorCommandId.TableAddColumnBefore }, { command: EditorCommandId.TableAddColumnAfter }, { separator: true }, { command: EditorCommandId.TableDeleteRow }, { command: EditorCommandId.TableDeleteColumn }, { separator: true }, { command: EditorCommandId.TableDeleteTable }, { separator: true }, { text: ui2.context.translateText("Align Column"), subMenu: { items: [ { command: EditorCommandId.TableAlignColumnLeft }, { command: EditorCommandId.TableAlignColumnCenter }, { command: EditorCommandId.TableAlignColumnRight }, { separator: true }, { command: EditorCommandId.TableAlignColumnDefault } ] } }, { separator: true }, { command: EditorCommandId.TableToggleHeader }, { command: EditorCommandId.TableToggleCaption } ]; } function editorMenus(options, ui2, commands) { return { format: formatMenu(ui2, commands), insert: insertMenu(options, ui2, commands), table: tableMenu(true, ui2) }; } function formatMenu(ui2, commands) { return [ { command: EditorCommandId.Strong }, { command: EditorCommandId.Em }, { command: EditorCommandId.Underline }, { command: EditorCommandId.Code }, { text: ui2.context.translateText("Text"), subMenu: { items: [ { command: EditorCommandId.Strikeout }, { command: EditorCommandId.Superscript }, { command: EditorCommandId.Subscript }, { command: EditorCommandId.Smallcaps } ] } }, { separator: true }, { text: ui2.context.translateText("Bullets & Numbering"), subMenu: { items: [ { command: EditorCommandId.BulletList }, { command: EditorCommandId.OrderedList }, { separator: true }, { command: EditorCommandId.TightList }, { separator: true }, { command: EditorCommandId.ListItemCheck }, { command: EditorCommandId.ListItemCheckToggle }, { separator: true }, { command: EditorCommandId.ListItemSink }, { command: EditorCommandId.ListItemLift }, { separator: true }, { command: EditorCommandId.EditListProperties } ] } }, { separator: true }, { command: codeBlockCommand(commands) }, { command: EditorCommandId.Blockquote }, { command: EditorCommandId.LineBlock }, { separator: haveAnyOf(commands, EditorCommandId.Div, EditorCommandId.Span) }, { command: EditorCommandId.Div }, { command: EditorCommandId.Span }, { separator: true }, { text: ui2.context.translateText("Raw"), subMenu: { items: [ { command: EditorCommandId.HTMLInline }, { command: EditorCommandId.HTMLBlock }, { separator: true }, { command: EditorCommandId.TexInline }, { command: EditorCommandId.TexBlock }, { separator: true }, { command: EditorCommandId.RawInline }, { command: EditorCommandId.RawBlock } ] } }, { separator: true }, { command: EditorCommandId.ClearFormatting }, { separator: true }, { command: EditorCommandId.AttrEdit } ]; } function insertMenu(options, ui2, commands) { const pyDefault = !!options.defaultCellTypePython; return [ { command: EditorCommandId.OmniInsert }, { separator: true }, { command: EditorCommandId.YamlMetadata }, ...haveAnyOf(commands, EditorCommandId.RCodeChunk, EditorCommandId.PythonCodeChunk) ? [ { separator: true }, { text: ui2.context.translateText("Executable Cell"), subMenu: { items: [ ...pyDefault ? [ { command: EditorCommandId.PythonCodeChunk }, { command: EditorCommandId.RCodeChunk } ] : [ { command: EditorCommandId.RCodeChunk }, { command: EditorCommandId.PythonCodeChunk } ], { command: EditorCommandId.BashCodeChunk }, { command: EditorCommandId.RcppCodeChunk }, { command: EditorCommandId.SQLCodeChunk }, { command: EditorCommandId.D3CodeChunk }, { command: EditorCommandId.StanCodeChunk }, { command: EditorCommandId.JuliaCodeChunk }, { separator: true }, { command: EditorCommandId.MermaidCodeChunk }, { command: EditorCommandId.GraphVizCodeChunk } ] } } ] : [], { separator: true }, { command: EditorCommandId.Table }, { command: EditorCommandId.Image }, { command: EditorCommandId.Link }, { command: EditorCommandId.Shortcode }, { separator: true }, { command: EditorCommandId.CodeBlockFormat }, ...haveAnyOf(commands, EditorCommandId.Citation, EditorCommandId.CrossReference, EditorCommandId.Footnote) ? [ { separator: true }, { command: EditorCommandId.Citation }, { command: EditorCommandId.CrossReference }, { command: EditorCommandId.Footnote } ] : [], ...haveAnyOf(commands, EditorCommandId.InsertSlideNotes, EditorCommandId.InsertSlidePause, EditorCommandId.InsertSlideColumns) ? [ { separator: true }, { command: EditorCommandId.InsertSlideColumns }, { command: EditorCommandId.InsertSlidePause }, { command: EditorCommandId.InsertSlideNotes } ] : [], { separator: true }, ...haveAnyOf(commands, EditorCommandId.InlineMath, EditorCommandId.DisplayMath) ? [ { text: ui2.context.translateText("LaTeX Math"), subMenu: { items: [ { command: EditorCommandId.InlineMath }, { command: EditorCommandId.DisplayMath } ] } } ] : [], ...haveAnyOf(commands, EditorCommandId.DefinitionList) ? [ { text: ui2.context.translateText("Definition"), subMenu: { items: [ { command: EditorCommandId.DefinitionList }, { separator: true }, { command: EditorCommandId.DefinitionTerm }, { command: EditorCommandId.DefinitionDescription } ] } } ] : [], { text: ui2.context.translateText("Special Characters"), subMenu: { items: [ { command: EditorCommandId.Emoji }, { command: EditorCommandId.Symbol }, { separator: true }, { command: EditorCommandId.EnDash }, { command: EditorCommandId.EmDash }, { separator: true }, { command: EditorCommandId.NonBreakingSpace }, { separator: true }, { command: EditorCommandId.HardLineBreak } ] } }, { separator: true }, { command: EditorCommandId.ParagraphInsert }, { command: EditorCommandId.InsertDiv }, { command: EditorCommandId.HorizontalRule }, ...haveAnyOf(commands, EditorCommandId.Tabset) ? [ { separator: true }, { command: EditorCommandId.Tabset }, { command: EditorCommandId.Callout } ] : [], { separator: true }, { command: haveAnyOf(commands, EditorCommandId.UserComment) ? EditorCommandId.UserComment : EditorCommandId.HTMLComment } ]; } function haveAnyOf(commands, ...ids) { for (const command of commands) { if (ids.includes(command.id)) { return true; } } return false; } function codeBlockCommand(commands) { return haveAnyOf(commands, EditorCommandId.CodeBlockFormat) ? EditorCommandId.CodeBlockFormat : EditorCommandId.CodeBlock; } function editorSchema(options, extensions, bodyScrollContainer) { const nodes2 = { doc: { attrs: { initial: { default: false } }, content: "body notes" + (options.commenting ? " annotations" : "") }, body: { content: "block+", isolating: true, parseDOM: [{ tag: 'div[class*="body"]' }], toDOM() { return [ "div", { class: "body pm-cursor-color pm-text-color pm-background-color pm-editing-root-node" + (bodyScrollContainer ? ` ${kPmScrollContainer}` : "") }, ["div", { class: "pm-content" }, 0] ]; } }, notes: { content: "note*", parseDOM: [{ tag: 'div[class*="notes"]' }], toDOM() { return [ "div", { class: `notes pm-cursor-color pm-text-color pm-background-color pm-editing-root-node ${kPmScrollContainer}` }, ["div", { class: "pm-content" }, 0] ]; } }, note: { content: "block+", attrs: { ref: {}, number: { default: 1 } }, isolating: true, parseDOM: [ { tag: 'div[class*="note"]', getAttrs(dom) { const el2 = dom; return { ref: el2.getAttribute("data-ref") }; } } ], toDOM(node2) { return [ "div", { "data-ref": node2.attrs.ref, class: "note pm-footnote-body", "data-number": node2.attrs.number }, 0 ]; } }, ...options.commenting ? { annotations: { content: "", editable: false, selectable: false, attrs: {} } } : {} }; extensions.pandocNodes().forEach((node2) => { nodes2[node2.name] = node2.spec; }); const marks = {}; extensions.pandocMarks().forEach((mark) => { marks[mark.name] = mark.spec; }); if (marks.code) { const excludeInCode = extensions.pandocMarks().filter((mark) => mark.noInputRules && mark.name !== "code").map((mark) => mark.name).join(" "); marks.code.excludes = excludeInCode; } return new Schema$2({ nodes: nodes2, marks }); } const frame = ""; const styles = ""; const extension$W = () => { return { nodes: [ { name: "text", spec: { group: "inline", toDOM(node2) { return node2.text; } }, pandoc: { readers: [ { token: PandocTokenType.Str, text: true, getText: (t2) => t2.c }, { token: PandocTokenType.Space, text: true, getText: () => " " }, { token: PandocTokenType.SoftBreak, text: true, getText: () => " " }, { token: PandocTokenType.Quoted, handler: () => (writer, tok) => { const type2 = tok.c[kQuoteType].t; const quote = type2 === QuoteType.SingleQuote ? "'" : '"'; writer.writeTokens([{ t: "Str", c: quote }, ...tok.c[kQuoteChildren], { t: "Str", c: quote }]); } } ], writer: (output, node2) => { const text2 = node2.textContent; output.writeText(text2); } } } ] }; }; const extension$V = { nodes: [ { name: "paragraph", spec: { content: "inline*", group: "block list_item_block", parseDOM: [{ tag: "p" }], toDOM() { return ["p", 0]; } }, pandoc: { readers: [ { token: PandocTokenType.Para, block: "paragraph" }, { token: PandocTokenType.Plain, block: "paragraph" } ], writer: (output, node2) => { output.writeToken(PandocTokenType.Para, () => { output.writeInlines(node2.content); }); } } } ], commands: (schema2) => { return [ new BlockCommand(EditorCommandId.Paragraph, ["Mod-Alt-0"], schema2.nodes.paragraph, schema2.nodes.paragraph), new InsertParagraphCommand() ]; }, plugins: (schema2) => { let hints = 1; return [emptyNodePlaceholderPlugin(schema2.nodes.paragraph, () => " type / to insert a block (code, math, figure, div, etc.)", (tr) => { if (hints > 0) { if (selectionWithinLastBodyParagraph(tr.selection)) { if (tr.docChanged) { hints--; return true; } else { return false; } } else { return false; } } else { return false; } })]; } }; class InsertParagraphCommand extends ProsemirrorCommand { constructor() { super(EditorCommandId.ParagraphInsert, [], insertParagraph); } } const kHeadingLevels = [1, 2, 3, 4, 5, 6]; const extension$U = (context) => { const { pandocExtensions, format: format2, ui: ui2 } = context; const headingAttr = pandocExtensions.header_attributes || pandocExtensions.mmd_header_identifiers; return { nodes: [ { name: "heading", spec: { attrs: { level: { default: 1 }, link: { default: null }, navigation_id: { default: null }, ...headingAttr ? pandocAttrSpec : {} }, content: "inline*", group: "block", defining: true, parseDOM: [ { tag: "h1", getAttrs: headingAttrs(1, headingAttr) }, { tag: "h2", getAttrs: headingAttrs(2, headingAttr) }, { tag: "h3", getAttrs: headingAttrs(3, headingAttr) }, { tag: "h4", getAttrs: headingAttrs(4, headingAttr) }, { tag: "h5", getAttrs: headingAttrs(5, headingAttr) }, { tag: "h6", getAttrs: headingAttrs(6, headingAttr) } ], toDOM(node2) { const attr = headingAttr ? pandocAttrToDomAttr(node2.attrs) : {}; attr.class = (attr.class || "").concat(" pm-heading"); return [ "h" + node2.attrs.level, { "data-link": node2.attrs.link, ...attr }, 0 ]; } }, attr_edit: () => { if (headingAttr) { return { type: (schema2) => schema2.nodes.heading, offset: { top: 2, right: 6 }, preferHidden: true }; } else { return null; } }, pandoc: { readers: [ { token: PandocTokenType.Header, block: "heading", getAttrs: (tok) => ({ level: tok.c[kHeadingLevel], navigation_id: uuidv4(), ...headingAttr ? pandocAttrReadAST(tok, kHeadingAttr) : {} }), getChildren: (tok) => tok.c[kHeadingChildren] } ], writer: (output, node2) => { output.writeToken(PandocTokenType.Header, () => { output.write(node2.attrs.level); if (headingAttr) { output.writeAttr(node2.attrs.id, node2.attrs.classes, node2.attrs.keyvalue); } else { output.writeAttr(); } output.writeArray(() => { if (node2.attrs.level === 1 && format2.rmdExtensions.bookdownPart) { writeBookdownH1(output, node2); } else { output.writeInlines(node2.content); } }); }); } } } ], commands: (schema2) => { return [ new HeadingCommand(schema2, EditorCommandId.Heading1, 1, heading1OmniInsert(ui2)), new HeadingCommand(schema2, EditorCommandId.Heading2, 2, heading2OmniInsert(ui2)), new HeadingCommand(schema2, EditorCommandId.Heading3, 3, heading3OmniInsert(ui2)), new HeadingCommand(schema2, EditorCommandId.Heading4, 4, heading4OmniInsert(ui2)), new HeadingCommand(schema2, EditorCommandId.Heading5, 5), new HeadingCommand(schema2, EditorCommandId.Heading6, 6) ]; }, inputRules: (schema2) => { const rules = [ textblockTypeInputRule( new RegExp("^(#{1," + kHeadingLevels.length + "})\\s$"), schema2.nodes.heading, (match2) => ({ level: match2[1].length, navigation_id: uuidv4() }) ) ]; if (headingAttr) { rules.push(headingAttributeInputRule(schema2)); } return rules; }, plugins: (schema2) => { return [emptyHeadingPlaceholderPlugin(schema2.nodes.heading, ui2)]; } }; }; function headingAttributeInputRule(schema2) { return new InputRule(/ {([^}]+)}$/, (state, match2, start, end) => { const heading = findParentNodeOfType_1(schema2.nodes.heading)(state.selection); if (heading) { const attrs = pandocAttrParseText(match2[1]); if (attrs) { const tr = state.tr; tr.setNodeMarkup(heading.pos, void 0, { ...heading.node.attrs, ...attrs }); tr.deleteRange(start + 1, end); return tr; } else { return null; } } else { return null; } }); } class HeadingCommand extends ProsemirrorCommand { constructor(schema2, id2, level, omniInsert) { super(id2, ["Mod-Alt-" + level], headingCommandFn(schema2, level), omniInsert); __publicField(this, "nodeType"); __publicField(this, "level"); this.nodeType = schema2.nodes.heading; this.level = level; } isActive(state) { const predicate = (n2) => n2.type === this.nodeType && n2.attrs.level === this.level; const node2 = findParentNode_1(predicate)(state.selection); return !!node2; } } function heading1OmniInsert(ui2) { return headingOmniInsert(ui2, 1, ui2.context.translateText("Part heading"), [ ui2.images.omni_insert.heading1, ui2.images.omni_insert.heading1_dark ]); } function heading2OmniInsert(ui2) { return headingOmniInsert(ui2, 2, ui2.context.translateText("Section heading"), [ ui2.images.omni_insert.heading2, ui2.images.omni_insert.heading2_dark ]); } function heading3OmniInsert(ui2) { return headingOmniInsert(ui2, 3, ui2.context.translateText("Sub-section heading"), [ ui2.images.omni_insert.heading3, ui2.images.omni_insert.heading3_dark ]); } function heading4OmniInsert(ui2) { return headingOmniInsert(ui2, 4, ui2.context.translateText("Small heading"), [ ui2.images.omni_insert.heading4, ui2.images.omni_insert.heading4_dark ]); } function headingOmniInsert(ui2, level, description, images, group = OmniInsertGroup.Headings) { return { name: headingName(ui2, level), keywords: ["h" + level], description, group, image: () => ui2.prefs.darkMode() ? images[1] : images[0] }; } function headingName(ui2, level) { const kHeadingPrefix = ui2.context.translateText("Heading"); return `${kHeadingPrefix} ${level}`; } function headingCommandFn(schema2, level) { return toggleBlockType(schema2.nodes.heading, schema2.nodes.paragraph, { level }); } function headingAttrs(level, pandocAttrSupported) { return (dom) => { const el2 = dom; return { level, "data-link": el2.getAttribute("data-link"), ...pandocAttrSupported ? pandocAttrParseDom(el2, {}) : {} }; }; } function emptyHeadingPlaceholderPlugin(nodeType, ui2) { return emptyNodePlaceholderPlugin(nodeType, (node2) => headingName(ui2, node2.attrs.level)); } function writeBookdownH1(output, node2) { const partMatch = node2.textContent.match(/^([^()]*)\(PART\\\*\)/); if (partMatch) { const schema2 = node2.type.schema; output.writeInlines(Fragment.from(schema2.text(partMatch[1] + "(PART*)"))); output.writeInlines(node2.content.cut(partMatch[0].length)); } else { output.writeInlines(node2.content); } } const extension$T = (context) => { const { ui: ui2 } = context; return { nodes: [ { name: "blockquote", spec: { content: "block+", group: "block", defining: true, parseDOM: [{ tag: "blockquote" }], toDOM() { return ["blockquote", { class: "pm-blockquote pm-block-border-color" }, 0]; } }, pandoc: { readers: [ { token: PandocTokenType.BlockQuote, block: "blockquote" } ], writer: (output, node2) => { output.writeToken(PandocTokenType.BlockQuote, () => { output.writeNodes(node2); }); } } } ], commands: (schema2) => { return [new WrapCommand(EditorCommandId.Blockquote, [], schema2.nodes.blockquote, {}, blockquoteOmniInsert(ui2))]; }, inputRules: (schema2) => { return [wrappingInputRule(/^\s*>\s$/, schema2.nodes.blockquote)]; } }; }; function blockquoteOmniInsert(ui2) { return { name: ui2.context.translateText("Blockquote"), description: ui2.context.translateText("Section quoted from another source"), group: OmniInsertGroup.Blocks, priority: 8, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.blockquote_dark : ui2.images.omni_insert.blockquote }; } const kNoAttributesSentinel = "CEF7FA46"; const extension$S = (context) => { const { pandocExtensions, pandocCapabilities, ui: ui2, options } = context; const hasAttr = hasFencedCodeBlocks(pandocExtensions); return { nodes: [ { name: "code_block", spec: { ...codeNodeSpec(), attrs: { ...hasAttr ? pandocAttrSpec : {} }, parseDOM: [ { tag: "pre", preserveWhitespace: "full", getAttrs: (node2) => { if (hasAttr) { const el2 = node2; return pandocAttrParseDom(el2, {}); } else { return {}; } } } ], toDOM(node2) { const fontClass = "pm-fixedwidth-font"; const attrs = hasAttr ? pandocAttrToDomAttr({ ...node2.attrs, classes: [...node2.attrs.classes, fontClass] }) : { class: fontClass }; return ["pre", attrs, ["code", 0]]; } }, code_view: { lang: (node2) => { return codeBlockLang(node2, options); }, attrEditFn: codeBlockFormatCommandFn(pandocExtensions, ui2, pandocCapabilities.highlight_languages) }, attr_edit: codeBlockAttrEdit(pandocExtensions, pandocCapabilities, ui2), pandoc: { readers: [ { token: PandocTokenType.CodeBlock, code_block: true } ], writer: (output, node2) => { if (!pandocAttrAvailable(node2.attrs) && pandocExtensions.backtick_code_blocks) { let text2 = node2.textContent; const textLines = lines(text2); if (textLines.length > 0) { const match2 = textLines[0].match(/^(```+)(\{+[^}]+\}+)([ \t]*)$/); if (match2) { textLines[0] = `${match2[1]}{${match2[2]}}${match2[3]}`; text2 = textLines.join("\n"); output.writeToken(PandocTokenType.Para, () => { output.writeRawMarkdown(text2); }); return; } } } output.writeToken(PandocTokenType.CodeBlock, () => { if (hasAttr) { const id2 = pandocExtensions.fenced_code_attributes ? node2.attrs.id : ""; const keyvalue = pandocExtensions.fenced_code_attributes ? node2.attrs.keyvalue : []; const classes = [...node2.attrs.classes]; if (!pandocAttrAvailable(node2.attrs) && pandocExtensions.backtick_code_blocks) { classes.push(kNoAttributesSentinel); } output.writeAttr(id2, classes, keyvalue); } else { output.writeAttr(); } output.write(node2.textContent); }); }, blockCapsuleFilter: escapedRmdChunkBlockCapsuleFilter(), markdownPostProcessor: (markdown) => { if (pandocExtensions.backtick_code_blocks) { markdown = markdown.replace( new RegExp("``` " + kNoAttributesSentinel, "g"), "``` " + " ".repeat(kNoAttributesSentinel.length) ); } return markdown; } } } ], commands: (schema2) => { const commands = [ new BlockCommand(EditorCommandId.CodeBlock, [], schema2.nodes.code_block, schema2.nodes.paragraph, {}) ]; if (hasAttr) { commands.push(new CodeBlockFormatCommand(pandocExtensions, ui2, pandocCapabilities.highlight_languages)); } return commands; }, baseKeys: () => { return [ { key: BaseKey.Enter, command: newlineInCode }, { key: BaseKey.ModEnter, command: exitCode }, { key: BaseKey.ShiftEnter, command: exitCode } ]; } }; }; class CodeBlockFormatCommand extends ProsemirrorCommand { constructor(pandocExtensions, ui2, languages) { super( EditorCommandId.CodeBlockFormat, ["Shift-Mod-\\"], codeBlockFormatCommandFn(pandocExtensions, ui2, languages), { name: ui2.context.translateText("Code Block..."), description: ui2.context.translateText("Source code display"), group: OmniInsertGroup.Blocks, priority: 7, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.code_block_dark : ui2.images.omni_insert.code_block } ); } } function codeBlockFormatCommandFn(pandocExtensions, ui2, languages) { return (state, dispatch, view) => { const schema2 = state.schema; const codeBlock = findParentNodeOfType_1(schema2.nodes.code_block)(state.selection); if (!codeBlock && !toggleBlockType(schema2.nodes.code_block, schema2.nodes.paragraph)(state) && !precedingListItemInsertPos(state.doc, state.selection)) { return false; } async function asyncEditCodeBlock() { if (dispatch) { const codeBlockProps = codeBlock ? { ...codeBlock.node.attrs, lang: "" } : defaultCodeBlockProps(); if (codeBlockProps.classes && codeBlockProps.classes.length) { const potentialLang = codeBlockProps.classes[0]; if (!pandocExtensions.fenced_code_attributes || languages.includes(potentialLang)) { codeBlockProps.lang = potentialLang; codeBlockProps.classes = codeBlockProps.classes.slice(1); } } const result = await ui2.dialogs.editCodeBlock( codeBlockProps, pandocExtensions.fenced_code_attributes, languages ); if (result) { const applyProps = propsWithLangClass(result); if (codeBlock) { const tr = state.tr; tr.setNodeMarkup(codeBlock.pos, schema2.nodes.code_block, applyProps); dispatch(tr); } else { const prevListItemPos = precedingListItemInsertPos(state.doc, state.selection); if (prevListItemPos) { const tr = state.tr; const block2 = schema2.nodes.code_block.create(applyProps); precedingListItemInsert(tr, prevListItemPos, block2); dispatch(tr); } else { toggleBlockType(schema2.nodes.code_block, schema2.nodes.paragraph, applyProps)(state, dispatch, view); } } } } if (view) { view.focus(); } } asyncEditCodeBlock(); return true; }; } function defaultCodeBlockProps() { return { id: "", classes: [], keyvalue: [], lang: "" }; } function propsWithLangClass(props) { const newProps = { ...props }; if (newProps.classes && newProps.lang) { newProps.classes.unshift(props.lang); } return newProps; } function codeBlockLang(node2, options) { if (node2.attrs.classes && node2.attrs.classes.length) { const lang2 = node2.attrs.classes[0]; if (options.rmdExampleHighlight && lang2 === "md") { const match2 = node2.textContent.match(/^```+\s*\{([a-zA-Z0-9_-]+)( *[ ,].*)?\}`r ''`/); if (match2) { return match2[1].split("-").pop() || ""; } } return lang2; } else { return null; } } function codeBlockAttrEdit(pandocExtensions, pandocCapabilities, ui2) { return () => { if (hasFencedCodeBlocks(pandocExtensions)) { return { type: (schema2) => schema2.nodes.code_block, tags: (node2) => { const tags2 = []; if (node2.attrs.id) { tags2.push(`#${node2.attrs.id}`); } if (node2.attrs.classes) { for (let i2 = 1; i2 < node2.attrs.classes.length; i2++) { tags2.push(`.${node2.attrs.classes[i2]}`); } if (node2.attrs.classes.length > 0) { const lang2 = node2.attrs.classes[0]; if (pandocCapabilities.highlight_languages.includes(lang2) || lang2 === "tex") { tags2.push(lang2); } else { tags2.push(`.${lang2}`); } } } if (node2.attrs.keyvalue && node2.attrs.keyvalue.length) { tags2.push(`${node2.attrs.keyvalue.map( (kv) => kv[0] + '="' + (kv[1] || "1") + '"' ).join(" ")} `); } return tags2; }, offset: { top: 3, right: 0 }, editFn: () => codeBlockFormatCommandFn(pandocExtensions, ui2, pandocCapabilities.highlight_languages) }; } else { return null; } }; } function escapedRmdChunkBlockCapsuleFilter() { const kEscapedRmdChunkBlockCapsuleType = "9CB79E6C-888D-4A0E-9C9B-FF67CD404E60".toLowerCase(); return { type: kEscapedRmdChunkBlockCapsuleType, match: /^([\t >]*)((```+)\s*\{{2,}[a-zA-Z0-9_-]+(?: *[ ,].*?)?\}{2,}[ \t]*\n(?:[\t >]*\3|[\W\w]*?\n[\t >]*\3))([ \t]*)$/gm, extract: (_match, p1, p2, _p3, p4) => { return { prefix: p1, source: p2, suffix: p4 }; }, enclose: (capsuleText) => { return capsuleText; }, handleText: blockCapsuleTextHandler( kEscapedRmdChunkBlockCapsuleType, encodedBlockCapsuleRegex(void 0, void 0, "gm") ), handleToken: blockCapsuleParagraphTokenHandler(kEscapedRmdChunkBlockCapsuleType), writeNode: (schema2, writer, capsule) => { const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix); const sourceLines = lines(source); sourceLines[0] = sourceLines[0].replace(/^(```+)\{(\{+[^}]+\}+)\}([ \t]*)$/, "$1$2$3"); writer.addNode(schema2.nodes.code_block, {}, [schema2.text(sourceLines.join("\n"))]); } }; } function insertCalloutCommand(ui2) { return new ProsemirrorCommand(EditorCommandId.Callout, [], insertCalloutCommandFn(ui2), { name: ui2.context.translateText("Callout"), description: ui2.context.translateText("Content framed for special emphasis"), group: OmniInsertGroup.Content, priority: 2, noFocus: true, image: () => ui2.images.omni_insert.generic }); } async function editCalloutDiv(ui2, state, dispatch, div2) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; const callout = defaultCallout(); const attr = pandocAttrFrom(div2.node.attrs); const calloutType = pandocAttrRemoveClass(attr, (clz) => clz.startsWith("callout-")); if (calloutType) { let calloutAppearance = pandocAttrGetKeyvalue(attr, "appearance"); if (calloutAppearance) { pandocAttrRemoveKeyvalue(attr, "appearance"); } else { calloutAppearance = "default"; } let calloutIcon = true; if (pandocAttrGetKeyvalue(attr, "icon") === "false") { calloutIcon = false; pandocAttrRemoveKeyvalue(attr, "icon"); } let calloutCaption = ""; if (((_a = div2.node.firstChild) == null ? void 0 : _a.type) === state.schema.nodes.heading) { calloutCaption = ((_b = div2.node.firstChild) == null ? void 0 : _b.textContent) || ""; } callout.type = calloutType.replace(/^callout-/, ""); callout.appearance = calloutAppearance; callout.icon = calloutIcon; callout.caption = calloutCaption; } const result = await ui2.dialogs.editCallout({ attr, callout }, true); if (result) { const tr = state.tr; if (result.action === "edit") { const resultAttr = result.attr; pandocAttrEnsureClass(resultAttr, `callout-${result.callout.type}`); if (result.callout.appearance !== "default") { pandocAttrSetKeyvalue(resultAttr, "appearance", result.callout.appearance); } if (result.callout.icon !== true) { pandocAttrSetKeyvalue(resultAttr, "icon", "false"); } tr.setNodeMarkup(div2.pos, div2.node.type, resultAttr); if (result.callout && (callout == null ? void 0 : callout.caption) !== ((_c = result.callout) == null ? void 0 : _c.caption)) { if (((_d = div2.node.firstChild) == null ? void 0 : _d.type) === state.schema.nodes.heading) { if ((_e = result.callout) == null ? void 0 : _e.caption) { tr.replaceRangeWith( div2.start, div2.start + ((_f = div2.node.firstChild) == null ? void 0 : _f.nodeSize) || 0, state.schema.nodes.heading.create( { level: 2 }, state.schema.text((_g = result.callout) == null ? void 0 : _g.caption) ) ); } else { tr.deleteRange(div2.start, div2.start + ((_h = div2.node.firstChild) == null ? void 0 : _h.nodeSize) || 0); } } else if ((_i = result.callout) == null ? void 0 : _i.caption) { tr.insert( div2.start, state.schema.nodes.heading.create( { level: 2 }, state.schema.text((_j = result.callout) == null ? void 0 : _j.caption) ) ); } } dispatch(tr); } else if (result.action === "remove") { removeDiv(state, dispatch, div2); } } } function insertCalloutCommandFn(ui2) { return (state, dispatch, view) => { const schema2 = state.schema; if (!toggleWrap(schema2.nodes.div)(state)) { return false; } async function asyncInsertCallout() { if (dispatch) { await createCalloutDiv(ui2, state, dispatch); if (view) { view.focus(); } } } asyncInsertCallout(); return true; }; } async function createCalloutDiv(ui2, state, dispatch) { const props = { attr: { id: "", classes: [], keyvalue: [] }, callout: defaultCallout() }; const result = await ui2.dialogs.editCallout(props, false); if (result) { wrapIn(state.schema.nodes.div)(state, (tr) => { var _a, _b, _c, _d; const attr = result.attr; pandocAttrEnsureClass(attr, `callout-${result.callout.type}`); attr.keyvalue = attr.keyvalue || []; if (((_a = result.callout) == null ? void 0 : _a.appearance) !== "default") { attr.keyvalue.push(["appearance", result.callout.appearance]); } if (((_b = result.callout) == null ? void 0 : _b.icon) === false) { attr.keyvalue.push(["icon", "false"]); } const div2 = findParentNodeOfType_1(state.schema.nodes.div)(tr.selection); tr.setNodeMarkup(div2.pos, div2.node.type, attr); if ((_c = result.callout) == null ? void 0 : _c.caption) { const calloutContent = [ state.schema.nodes.heading.create( { level: 2 }, state.schema.text((_d = result.callout) == null ? void 0 : _d.caption) ), state.schema.nodes.paragraph.create() ]; tr.replaceWith(div2.start, div2.start + 1, calloutContent); setTextSelection_1(div2.start + calloutContent[0].nodeSize)(tr); } dispatch(tr); }); } } function defaultCallout() { return { type: "note", appearance: "default", icon: true, caption: "" }; } function insertTabsetCommand(ui2) { return new ProsemirrorCommand(EditorCommandId.Tabset, [], insertTabsetCommandFn(ui2), { name: ui2.context.translateText("Tabset"), description: ui2.context.translateText("Content divided into tabs"), group: OmniInsertGroup.Content, priority: 2, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.tabset_dark : ui2.images.omni_insert.tabset }); } function insertTabsetCommandFn(ui2) { return (state, dispatch, view) => { const schema2 = state.schema; if (!toggleWrap(schema2.nodes.div)(state)) { return false; } async function asyncInsertTabset() { if (dispatch) { const result = await ui2.dialogs.insertTabset(); if (result) { wrapIn(state.schema.nodes.div)(state, (tr) => { const div2 = findParentNodeOfType_1(state.schema.nodes.div)(tr.selection); pandocAttrEnsureClass(result.attr, "panel-tabset"); tr.setNodeMarkup(div2.pos, div2.node.type, result.attr); const tabset = result.tabs.flatMap((tab) => { return [ schema2.nodes.heading.create( { level: 2 }, schema2.text(tab) ), schema2.nodes.paragraph.create() ]; }); tr.replaceWith(div2.start, div2.start + 1, tabset); setTextSelection_1(div2.start + tabset[0].nodeSize)(tr); dispatch(tr); }); } if (view) { view.focus(); } } } asyncInsertTabset(); return true; }; } const divStyles = ""; const DIV_ATTR = 0; const DIV_CHILDREN = 1; const extension$R = (context) => { const { pandocExtensions, format: format2, ui: ui2 } = context; if (!pandocExtensions.fenced_divs && !pandocExtensions.native_divs) { return null; } return { nodes: [ { name: "div", spec: { attrs: { ...pandocAttrSpec }, defining: true, content: "block+", group: "block list_item_block", parseDOM: [ { tag: 'div[data-div="1"]', getAttrs(dom) { const attrs = { "data-div": "1" }; return { ...attrs, ...pandocAttrParseDom(dom, attrs) }; } } ], toDOM(node2) { const attr = { "data-div": "1", ...pandocAttrToDomAttr({ ...node2.attrs, classes: [...node2.attrs.classes, "pm-div", "pm-div-background-color"] }) }; return ["div", attr, 0]; } }, attr_edit: () => ({ type: (schema2) => schema2.nodes.div, editFn: () => divCommand(ui2, true), offset: { top: 3, right: 0 } }), pandoc: { readers: [ { token: PandocTokenType.Div, block: "div", getAttrs: (tok) => ({ ...pandocAttrReadAST(tok, DIV_ATTR) }), getChildren: (tok) => tok.c[DIV_CHILDREN] } ], writer: (output, node2) => { output.writeToken(PandocTokenType.Div, () => { output.writeAttr(node2.attrs.id, node2.attrs.classes, node2.attrs.keyvalue); output.writeArray(() => { output.writeNodes(node2); }); }); } } } ], baseKeys: () => { return [ { key: BaseKey.Enter, command: divInputRuleEnter() } ]; }, commands: () => { const cmds = [ new DivCommand(EditorCommandId.Div, ui2, true), new DivCommand(EditorCommandId.InsertDiv, ui2, false, { name: ui2.context.translateText("Div..."), description: ui2.context.translateText("Block containing other content"), group: OmniInsertGroup.Common, priority: 6, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.div_dark : ui2.images.omni_insert.div }) ]; if (format2.docTypes.includes(kQuartoDocType)) { cmds.push( insertCalloutCommand(ui2), insertTabsetCommand(ui2) ); } return cmds; }, plugins: (schema2) => { return [ new Plugin({ key: new PluginKey("div-selection"), appendTransaction: (_transactions, _oldState, newState) => { if (newState.selection.empty) { return void 0; } const divNode = findParentNodeOfType_1(schema2.nodes.div)(newState.selection); if (divNode && newState.selection.anchor === divNode.start + 1 && newState.selection.head === divNode.pos + divNode.node.nodeSize - 2) { const tr = newState.tr; const sel = TextSelection.create(tr.doc, divNode.start, divNode.start + divNode.node.nodeSize - 1); tr.setSelection(sel); return tr; } else { return void 0; } } }) ]; } }; }; function removeDiv(state, dispatch, div2) { const tr = state.tr; trRemoveDiv(tr, div2); dispatch(tr); } function trRemoveDiv(tr, div2) { const fromPos = tr.doc.resolve(div2.pos + 1); const toPos = tr.doc.resolve(div2.pos + div2.node.nodeSize - 1); const nodeRange = fromPos.blockRange(toPos); if (nodeRange) { const targetLiftDepth = liftTarget(nodeRange); if (targetLiftDepth || targetLiftDepth === 0) { tr.lift(nodeRange, targetLiftDepth); } } } function divCommand(ui2, allowEdit) { return (state, dispatch, view) => { const schema2 = state.schema; const div2 = allowEdit ? findParentNodeOfType_1(schema2.nodes.div)(state.selection) : void 0; if (!div2 && !toggleWrap(schema2.nodes.div)(state)) { return false; } async function asyncEditDiv() { if (dispatch) { const editMode = div2 && (state.selection.empty || isFullDivSelection(div2, state)); if (editMode) { const attr = pandocAttrFrom(div2.node.attrs); if (pandocAttrHasClass(attr, (clz) => clz.startsWith("callout-"))) { await editCalloutDiv(ui2, state, dispatch, div2); } else { await editDiv(ui2, state, dispatch, div2); } } else { await createDiv(ui2, state, dispatch); } if (view) { view.focus(); } } } asyncEditDiv(); return true; }; } class DivCommand extends ProsemirrorCommand { constructor(id2, ui2, allowEdit, omniInsert) { super(id2, [], divCommand(ui2, allowEdit), omniInsert); } } async function createDiv(ui2, state, dispatch) { const result = await ui2.dialogs.editDiv({}, false); if (result) { wrapIn(state.schema.nodes.div)(state, (tr) => { const div2 = findParentNodeOfType_1(state.schema.nodes.div)(tr.selection); tr.setNodeMarkup(div2.pos, div2.node.type, result.attr); dispatch(tr); }); } } async function editDiv(ui2, state, dispatch, div2) { const attr = pandocAttrFrom(div2.node.attrs); const result = await ui2.dialogs.editDiv(attr, pandocAttrAvailable(attr)); if (result) { if (result.action === "edit") { const tr = state.tr; tr.setNodeMarkup(div2.pos, div2.node.type, result.attr); dispatch(tr); } else if (result.action === "remove") { removeDiv(state, dispatch, div2); } } } function isFullDivSelection(div2, state) { const divStart = div2.pos; const divEnd = div2.pos + div2.node.nodeSize; return state.selection.from - 2 === divStart && state.selection.to + 2 === divEnd; } function divInputRuleEnter() { return (state, dispatch) => { const schema2 = state.schema; if (!state.selection.empty) { return false; } const match2 = state.selection.$head.parent.textContent.match(/^:{3,}(\s+({.*?}|\S+)?[\s:]*)?$/); if (!match2) { return false; } if (markIsActive(state, schema2.marks.code)) { return false; } if (!canApplyDivInputRule(state)) { return false; } if (dispatch) { if (match2[1] && match2[1].trim().length === 0) { return false; } const attrs = pandocAttrFrom({}); const attribMatch = match2[2]; if (attribMatch) { const bracesMatch = attribMatch.match(/^{(.*?)}$/); if (bracesMatch) { const pandocAttrsText = bracesMatch[1]; const pandocAttrsMatch = pandocAttrsText.match(/^\s*(#\S+)?\s*((?:\.\S+\s*)*)?(.*)?$/); if (pandocAttrsMatch) { const attrProps = attrInputToProps({ id: pandocAttrsMatch[1], classes: pandocAttrsMatch[2] }); attrs.id = attrProps.id || ""; attrs.classes = attrProps.classes || []; } } else { attrs.classes = [attribMatch]; } } wrapIn(state.schema.nodes.div)(state, (tr) => { const div2 = findParentNodeOfType_1(state.schema.nodes.div)(tr.selection); tr.setNodeMarkup(div2.pos, div2.node.type, attrs); const $head = tr.selection.$head; const start = $head.start(); const end = start + $head.parent.textContent.length; tr.deleteRange(start, end); dispatch(tr); }); } return true; }; } function canReplaceNodeWithDiv(schema2, $pos) { return $pos.node(-1).canReplaceWith($pos.index(-1), $pos.indexAfter(-1), schema2.nodes.div); } function canApplyDivInputRule(state) { const schema2 = state.schema; const { $head } = state.selection; return canReplaceNodeWithDiv(schema2, $head); } class ListCommand extends NodeCommand { constructor(id2, keymap2, listType, listItemType, omniInsert, prefs) { super(id2, keymap2, listType, {}, autoJoin(toggleList(listType, listItemType, prefs), [listType.name]), omniInsert); } } class TightListCommand extends ProsemirrorCommand { constructor() { super( EditorCommandId.TightList, ["Mod-Alt-9"], (state, dispatch) => { const parentList = findParentNode_1(isList)(state.selection); if (!parentList) { return false; } if (dispatch) { const tr = state.tr; const node2 = parentList.node; tr.setNodeMarkup(parentList.pos, node2.type, { ...node2.attrs, tight: !node2.attrs.tight }); dispatch(tr); } return true; } ); } isActive(state) { if (this.isEnabled(state)) { const itemNode = findParentNode_1(isList)(state.selection); return itemNode.node.attrs.tight; } else { return false; } } } function editListPropertiesCommandFn(ui2, capabilities) { return (state, dispatch, view) => { let node2 = null; let pos = 0; const nodeWithPos = findParentNode_1(isList)(state.selection); if (nodeWithPos) { node2 = nodeWithPos.node; pos = nodeWithPos.pos; } if (!node2) { return false; } async function asyncEditList() { if (dispatch) { await editList(node2, pos, state, dispatch, ui2, capabilities); if (view) { view.focus(); } } } asyncEditList(); return true; }; } class EditListPropertiesCommand extends ProsemirrorCommand { constructor(ui2, capabilities) { super(EditorCommandId.EditListProperties, [], editListPropertiesCommandFn(ui2, capabilities)); } } const kListIncrementalDefault = "default"; const kListIncremental = "incremental"; const kListNonIncremental = "nonincremental"; async function editList(node2, pos, state, dispatch, ui2, capabilities) { const schema2 = node2.type.schema; const attrs = node2.attrs; const props = { ...attrs, type: node2.type === schema2.nodes.ordered_list ? ListType.Ordered : ListType.Bullet }; const incrementalDiv = wrappingIncrementalDiv(state.selection, schema2); if (incrementalDiv && capabilities.incremental) { props.incremental = pandocAttrHasClass(incrementalDiv.node.attrs, (clz) => clz === kListIncremental) ? kListIncremental : kListNonIncremental; } else { props.incremental = kListIncrementalDefault; } const result = await ui2.dialogs.editList(props, capabilities); if (result) { const tr = state.tr; const listType = result.type === ListType.Ordered ? schema2.nodes.ordered_list : schema2.nodes.bullet_list; tr.setNodeMarkup(pos, listType, { ...attrs, ...result }); if (capabilities.incremental) { if (result.incremental === kListIncrementalDefault) { if (incrementalDiv) { trRemoveDiv(tr, incrementalDiv); } } else if (incrementalDiv) { const divAttrs = { id: "", classes: [], keyvalue: [], ...incrementalDiv.node.attrs }; pandocAttrRemoveClass(divAttrs, isIncrementalClass); pandocAttrEnsureClass(divAttrs, result.incremental); tr.setNodeMarkup(incrementalDiv.pos, schema2.nodes.div, divAttrs); } else { const $pos = tr.doc.resolve(pos); const $endPos = tr.doc.resolve(pos + node2.nodeSize); const range2 = $pos.blockRange($endPos); if (range2) { const wrapping = findWrapping(range2, schema2.nodes.div, { classes: [result.incremental] }); if (wrapping) { tr.wrap(range2, wrapping); } } } } dispatch(tr); } } function wrappingIncrementalDiv(selection, schema2) { return findParentNode_1((nd2) => { return nd2.type === schema2.nodes.div && pandocAttrHasClass(nd2.attrs, isIncrementalClass); })(selection); } function isIncrementalClass(clz) { return [kListIncremental, kListNonIncremental].includes(clz); } class CheckedListItemNodeView { constructor(node2, view, getPos) { __publicField(this, "dom"); __publicField(this, "contentDOM"); this.dom = window.document.createElement("li"); if (node2.attrs.tight) { this.dom.setAttribute("data-tight", "true"); } const container = window.document.createElement("div"); container.classList.add("list-item-container"); this.dom.appendChild(container); if (node2.attrs.checked !== null) { this.dom.setAttribute("data-checked", node2.attrs.checked ? "true" : "false"); const input = window.document.createElement("input"); input.classList.add("list-item-checkbox"); input.setAttribute("type", "checkbox"); input.checked = node2.attrs.checked; input.contentEditable = "false"; input.disabled = !view.editable; input.addEventListener("mousedown", (ev) => { ev.preventDefault(); }); input.addEventListener("change", (ev) => { const tr = view.state.tr; tr.setNodeMarkup(getPos(), node2.type, { ...node2.attrs, checked: ev.target.checked }); setTextSelection_1(getPos() + 1)(tr); view.dispatch(tr); }); container.appendChild(input); } const content = window.document.createElement("div"); content.classList.add("list-item-content"); this.contentDOM = content; container.appendChild(content); } } function checkedListItemCommandFn(itemType) { return (state, dispatch) => { const itemNode = findParentNodeOfType_1(itemType)(state.selection); if (!itemNode) { return false; } if (dispatch) { const tr = state.tr; if (itemNode.node.attrs.checked !== null) { setItemChecked(tr, itemNode, null); } else { setItemChecked(tr, itemNode, false); } dispatch(tr); } return true; }; } function checkedListItemToggleCommandFn(itemType) { return (state, dispatch) => { const itemNode = findParentNodeOfType_1(itemType)(state.selection); if (!itemNode || itemNode.node.attrs.checked === null) { return false; } if (dispatch) { const tr = state.tr; setItemChecked(tr, itemNode, !itemNode.node.attrs.checked); dispatch(tr); } return true; }; } class CheckedListItemCommand extends ProsemirrorCommand { constructor(itemType) { super(EditorCommandId.ListItemCheck, [], checkedListItemCommandFn(itemType)); } isActive(state) { if (this.isEnabled(state)) { const itemNode = findParentNodeOfType_1(state.schema.nodes.list_item)(state.selection); return itemNode.node.attrs.checked !== null; } else { return false; } } } class CheckedListItemToggleCommand extends ProsemirrorCommand { constructor(itemType) { super(EditorCommandId.ListItemCheckToggle, [], checkedListItemToggleCommandFn(itemType)); __publicField(this, "itemType"); this.itemType = itemType; } isActive(state) { const itemNode = findParentNodeOfType_1(this.itemType)(state.selection); return itemNode && itemNode.node.attrs.checked; } } function checkedListItemInputRule() { return new InputRule(/\[([ x])\]\s$/, (state, match2, start, end) => { const schema2 = state.schema; const itemNode = findParentNodeOfType_1(schema2.nodes.list_item)(state.selection); if (itemNode) { const tr = state.tr; setItemChecked(tr, itemNode, match2[1]); tr.delete(start, end); return tr; } else { return null; } }); } function checkedListInputRule(schema2) { const regex2 = /^\s*\[([ x])\]\s$/; const baseInputRule = wrappingInputRule(regex2, schema2.nodes.bullet_list); return new InputRule(regex2, (state, match2, start, end) => { const tr = baseInputRule.handler(state, match2, start, end); if (tr) { const itemNode = findParentNodeOfType_1(schema2.nodes.list_item)(tr.selection); if (itemNode) { setItemChecked(tr, itemNode, match2[1]); } return tr; } else { return null; } }); } function setItemChecked(tr, itemNode, check2) { tr.setNodeMarkup(itemNode.pos, itemNode.node.type, { ...itemNode.node.attrs, checked: check2 === null ? null : typeof check2 === "string" ? check2 === "x" : check2 }); } function fragmentWithCheck(schema2, fragment, checked) { const mark = schema2.marks.raw_inline.create({ format: "markdown" }); const check2 = schema2.text((checked ? "[x]" : "[ ]") + " ", [mark]); return Fragment.from(check2).append(fragment); } const kCheckedChar = "\u2612"; const kUncheckedChar = "\u2610"; function tokensWithChecked(tokens2) { let checked; let lastWasChecked = false; const mappedTokens = mapTokens(tokens2, (tok) => { if (tok.t === "Space" && lastWasChecked) { lastWasChecked = false; return { t: "Str", c: "" }; } else if (tok.t === "Str" && checked === void 0) { let text2 = tok.c; if (text2.charAt(0) === kCheckedChar) { checked = true; lastWasChecked = true; text2 = text2.slice(1); } else if (text2.charAt(0) === kUncheckedChar) { checked = false; lastWasChecked = true; text2 = text2.slice(1); } else { checked = null; } return { t: "Str", c: text2 }; } else { return tok; } }); return { checked: checked !== void 0 ? checked : null, tokens: mappedTokens }; } function liftListItem(itemType) { return function(state, dispatch) { const { $from, $to } = state.selection; const range2 = $from.blockRange($to, (node22) => node22.childCount > 0 && node22.firstChild.type == itemType); if (!range2) return false; if (!dispatch) return true; const node2 = $from.node(range2.depth - 1); if (node2.type == itemType) return liftToOuterList(state, dispatch, node2, range2); else return liftOutOfList(state, dispatch, range2); }; } function sinkListItem(itemType) { return function(state, dispatch) { const { $from, $to } = state.selection; const range2 = $from.blockRange($to, (node2) => node2.childCount > 0 && node2.firstChild.type == itemType); if (!range2) return false; const startIndex = range2.startIndex; if (startIndex == 0) return false; const parent = range2.parent, nodeBefore = parent.child(startIndex - 1); if (nodeBefore.type != itemType) return false; if (dispatch) { const nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type; const inner = Fragment.from(nestedBefore ? itemType.create() : null); const slice2 = new Slice( Fragment.from(itemType.create(null, Fragment.from(parent.type.create(parent.attrs, inner)))), nestedBefore ? 3 : 1, 0 ); const before = range2.start, after = range2.end; dispatch(state.tr.step(new ReplaceAroundStep( before - (nestedBefore ? 3 : 1), after, before, after, slice2, 1, true )).scrollIntoView()); } return true; }; } function liftToOuterList(state, dispatch, node2, range2) { const tr = state.tr, end = range2.end, endOfList = range2.$to.end(range2.depth); if (end < endOfList) { tr.step(new ReplaceAroundStep( end - 1, endOfList, end, endOfList, new Slice(Fragment.from(node2.type.create(node2.attrs, range2.parent.copy())), 1, 0), 1, true )); range2 = new NodeRange(tr.doc.resolve(range2.$from.pos), tr.doc.resolve(endOfList), range2.depth); } const target2 = liftTarget(range2); if (target2 == null) return false; tr.lift(range2, target2); const after = tr.mapping.map(end, -1) - 1; if (canJoin(tr.doc, after)) tr.join(after); dispatch(tr.scrollIntoView()); return true; } function liftOutOfList(state, dispatch, range2) { const tr = state.tr, list = range2.parent; for (let pos = range2.end, i2 = range2.endIndex - 1, e2 = range2.startIndex; i2 > e2; i2--) { pos -= list.child(i2).nodeSize; tr.delete(pos - 1, pos + 1); } const $start = tr.doc.resolve(range2.start), item = $start.nodeAfter; if (tr.mapping.map(range2.end) != range2.start + $start.nodeAfter.nodeSize) return false; const atStart = range2.startIndex == 0, atEnd = range2.endIndex == list.childCount; const parent = $start.node(-1), indexBefore = $start.index(-1); if (!parent.canReplace( indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list)) )) return false; const start = $start.pos, end = start + item.nodeSize; tr.step(new ReplaceAroundStep( start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice( (atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))).append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1 ), atStart ? 0 : 1 )); dispatch(tr.scrollIntoView()); return true; } const LIST_ATTRIBS = 0; const LIST_CHILDREN = 1; const LIST_ATTRIB_ORDER = 0; const LIST_ATTRIB_NUMBER_STYLE = 1; const LIST_ATTRIB_NUMBER_DELIM = 2; const kListItemExampleSentinel = "20543127-1873-4833-AC49-5B352CFA2AF5"; function readPandocList(nodeType, capabilities) { const schema2 = nodeType.schema; let getChildren = (tok) => tok.c; let getAttrs = () => ({}); const readNumberStyle = (attribs) => { if (capabilities.fancy) { const style = attribs[LIST_ATTRIB_NUMBER_STYLE].t; if (style === ListNumberStyle.Example && !capabilities.example) { return ListNumberStyle.DefaultStyle; } else { return style; } } else { return ListNumberStyle.DefaultStyle; } }; if (nodeType === schema2.nodes.ordered_list) { getAttrs = (tok) => { const attribs = tok.c[LIST_ATTRIBS]; return { order: capabilities.order ? attribs[LIST_ATTRIB_ORDER] : 1, number_style: readNumberStyle(attribs), number_delim: capabilities.fancy ? attribs[LIST_ATTRIB_NUMBER_DELIM].t : ListNumberDelim.DefaultDelim }; }; getChildren = (tok) => tok.c[LIST_CHILDREN]; } const listItemNodeType = schema2.nodes.list_item; return (writer, tok) => { if (nodeType === schema2.nodes.ordered_list && capabilities.fancy) { const style = tok.c[LIST_ATTRIBS][LIST_ATTRIB_NUMBER_STYLE].t; if (style === ListNumberStyle.Example) { writer.logExampleList(); } } const children = getChildren(tok); const attrs = { ...getAttrs(tok), tight: children.length && children[0].length && children[0][0].t === "Plain" }; writer.openNode(nodeType, attrs); children.forEach((child) => { let tokens2 = child; const childAttrs = { checked: null }; if (capabilities.tasks) { const childWithChecked = tokensWithChecked(child); childAttrs.checked = childWithChecked.checked; tokens2 = childWithChecked.tokens; } writer.openNode(listItemNodeType, childAttrs); writer.writeTokens(tokens2); writer.closeNode(); }); writer.closeNode(); }; } function writePandocOrderedList(capabilities) { return (output, node2) => { const options = listNodeOptions(node2, capabilities); const delim = options.example ? ListNumberDelim.TwoParens : node2.attrs.number_delim; output.writeToken(PandocTokenType.OrderedList, () => { output.writeArray(() => { output.write(capabilities.order ? node2.attrs.order : 1); output.writeToken(capabilities.fancy ? node2.attrs.number_style : ListNumberStyle.DefaultStyle); output.writeToken(capabilities.fancy ? delim : ListNumberDelim.DefaultDelim); }); output.writeArray(() => { node2.forEach((item) => writePandocListItem(output, options, item)); }); }); }; } function writePandocBulletList(capabilities) { return (output, node2) => { output.writeToken(PandocTokenType.BulletList, () => { node2.forEach((item) => writePandocListItem(output, listNodeOptions(node2, capabilities), item)); }); }; } function listNodeOptions(node2, capabilities) { const options = { tight: node2.attrs.tight, example: capabilities.example ? node2.attrs.number_style === ListNumberStyle.Example : false }; node2.forEach((item) => { if (options.tight && item.childCount > 1) { if (item.childCount > 2 || !isList(item.child(1))) { options.tight = false; } } }); return options; } function writePandocListItem(output, options, node2) { const checked = node2.attrs.checked; output.writeArray(() => { node2.forEach((itemNode, _offset, index2) => { if (itemNode.type === node2.type.schema.nodes.paragraph) { const paraItemBlockType = options.tight ? PandocTokenType.Plain : PandocTokenType.Para; output.writeToken(paraItemBlockType, () => { if (checked !== null && index2 === 0) { writeListItemInlines( output, options.example, fragmentWithCheck(node2.type.schema, itemNode.content, checked), index2 ); } else { writeListItemInlines(output, options.example, itemNode.content, index2); } }); } else { output.writeNode(itemNode); } }); }); } function writeListItemInlines(output, example, fragment, index2) { if (index2 === 0 && example) { output.writeToken(PandocTokenType.Str, kListItemExampleSentinel); } output.writeInlines(fragment); } const listStyles = ""; const plugin$2 = new PluginKey("list"); const extension$Q = (context) => { const { pandocExtensions, ui: ui2, format: format2 } = context; const capabilities = { tasks: pandocExtensions.task_lists, fancy: pandocExtensions.fancy_lists, example: false, order: pandocExtensions.startnum, incremental: format2.docTypes.includes(kPresentationDocType) }; return { nodes: [ { name: "list_item", spec: { content: "list_item_block block*", attrs: { checked: { default: null } }, defining: true, parseDOM: [ { tag: "li", getAttrs: (dom) => { const el2 = dom; const attrs = {}; if (capabilities.tasks && el2.hasAttribute("data-checked")) { attrs.checked = el2.getAttribute("data-checked") === "true"; } return attrs; } } ], toDOM(node2) { const attrs = { class: "pm-list-item" }; if (capabilities.tasks && node2.attrs.checked !== null) { attrs["data-checked"] = node2.attrs.checked ? "true" : "false"; } return ["li", attrs, 0]; } }, pandoc: {} }, { name: "bullet_list", spec: { content: "list_item+", group: "block", attrs: { tight: { default: false } }, parseDOM: [ { tag: "ul", getAttrs: (dom) => { const el2 = dom; const attrs = {}; if (el2.hasAttribute("data-tight")) { attrs.tight = true; } return attrs; } } ], toDOM(node2) { const attrs = {}; attrs.class = "pm-list pm-bullet-list"; if (node2.attrs.tight) { attrs["data-tight"] = "true"; } return ["ul", attrs, 0]; } }, pandoc: { readers: [ { token: PandocTokenType.BulletList, handler: (schema2) => readPandocList(schema2.nodes.bullet_list, capabilities) } ], writer: writePandocBulletList(capabilities) }, attr_edit: listAttrEdit("bullet_list", capabilities, ui2) }, { name: "ordered_list", spec: { content: "list_item+", group: "block", attrs: { tight: { default: false }, order: { default: 1 }, number_style: { default: ListNumberStyle.DefaultStyle }, number_delim: { default: ListNumberDelim.DefaultDelim } }, parseDOM: [ { tag: "ol", getAttrs(dom) { const el2 = dom; const attrs = {}; attrs.tight = el2.hasAttribute("data-tight"); if (capabilities.order) { const order2 = el2.getAttribute("start"); if (!order2) { attrs.order = 1; } else { attrs.order = parseInt(order2, 10) || 1; } } if (capabilities.fancy) { if (capabilities.example && el2.getAttribute("data-example")) { attrs.number_style = ListNumberStyle.Example; } else { attrs.number_style = typeToNumberStyle(el2.getAttribute("type")); } const numberDelim = el2.getAttribute("data-number-delim"); if (numberDelim) { attrs.number_delim = numberDelim; } } return attrs; } } ], toDOM(node2) { const attrs = {}; attrs.class = "pm-list pm-ordered-list"; if (node2.attrs.tight) { attrs["data-tight"] = "true"; } if (capabilities.order && node2.attrs.order !== 1) { attrs.start = node2.attrs.order; } if (capabilities.fancy) { const type2 = numberStyleToType(node2.attrs.number_style); if (type2) { attrs.type = type2; } if (capabilities.example) { if (node2.attrs.number_style === ListNumberStyle.Example) { attrs["data-example"] = "1"; } } attrs["data-number-delim"] = node2.attrs.number_delim; } return ["ol", attrs, 0]; } }, pandoc: { readers: [ { token: PandocTokenType.OrderedList, handler: (schema2) => readPandocList(schema2.nodes.ordered_list, capabilities) } ], writer: writePandocOrderedList(capabilities) }, attr_edit: listAttrEdit("ordered_list", capabilities, ui2) } ], plugins: () => { const plugins = []; if (capabilities.tasks) { plugins.push( new Plugin({ key: plugin$2, props: { nodeViews: { list_item(node2, view, getPos) { return new CheckedListItemNodeView(node2, view, getPos); } } } }) ); } return plugins; }, commands: (schema2) => { const commands = [ new ListCommand( EditorCommandId.BulletList, [], schema2.nodes.bullet_list, schema2.nodes.list_item, bulletListOmniInsert(ui2), ui2.prefs ), new ListCommand( EditorCommandId.OrderedList, [], schema2.nodes.ordered_list, schema2.nodes.list_item, orderedListOmniInsert(ui2), ui2.prefs ), new ProsemirrorCommand(EditorCommandId.ListItemSink, ["Tab"], sinkListItem(schema2.nodes.list_item)), new ProsemirrorCommand(EditorCommandId.ListItemLift, ["Shift-Tab"], liftListItem(schema2.nodes.list_item)), new ProsemirrorCommand(EditorCommandId.ListItemSplit, ["Enter"], splitListItem(schema2.nodes.list_item)), new TightListCommand() ]; if (capabilities.fancy) { commands.push(new EditListPropertiesCommand(ui2, capabilities)); } if (capabilities.tasks) { commands.push( new CheckedListItemCommand(schema2.nodes.list_item), new CheckedListItemToggleCommand(schema2.nodes.list_item) ); } return commands; }, baseKeys: (schema2) => { return [ { key: BaseKey.Enter, command: splitListItem(schema2.nodes.list_item) }, { key: BaseKey.Tab, command: sinkListItem(schema2.nodes.list_item) }, { key: BaseKey.ShiftTab, command: liftListItem(schema2.nodes.list_item) } ]; }, inputRules: (schema2) => { const tightFn = () => { return { tight: ui2.prefs.listSpacing() === kListSpacingTight }; }; const isNotInHeading = (state) => { return !findParentNodeOfType_1(schema2.nodes.heading)(state.selection); }; const rules = [ conditionalWrappingInputRule(/^\s*([-+*])\s$/, schema2.nodes.bullet_list, isNotInHeading, tightFn), conditionalWrappingInputRule( /^(\d+)\.\s$/, schema2.nodes.ordered_list, isNotInHeading, (match2) => ({ order: +match2[1], tight: tightFn() }), (match2, node2) => node2.childCount + node2.attrs.order === +match2[1] ) ]; if (capabilities.tasks) { rules.push(checkedListItemInputRule(), checkedListInputRule(schema2)); } return rules; } }; }; function listAttrEdit(type2, capabilities, ui2) { return () => { return { type: (schema2) => schema2.nodes[type2], editFn: () => editListPropertiesCommandFn(ui2, capabilities), offset: { top: 5, right: 5 }, preferHidden: true }; }; } function numberStyleToType(style) { switch (style) { case ListNumberStyle.DefaultStyle: case ListNumberStyle.Decimal: case ListNumberStyle.Example: return "l"; case ListNumberStyle.LowerAlpha: return "a"; case ListNumberStyle.UpperAlpha: return "A"; case ListNumberStyle.LowerRoman: return "i"; case ListNumberStyle.UpperRoman: return "I"; default: return null; } } function typeToNumberStyle(type2) { switch (type2) { case "l": return ListNumberStyle.Decimal; case "a": return ListNumberStyle.LowerAlpha; case "A": return ListNumberStyle.UpperAlpha; case "i": return ListNumberStyle.LowerRoman; case "I": return ListNumberStyle.UpperRoman; default: return ListNumberStyle.Decimal; } } function bulletListOmniInsert(ui2) { return { name: ui2.context.translateText("Bullet List"), description: ui2.context.translateText("List using bullets for items"), group: OmniInsertGroup.Common, priority: 4, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.bullet_list_dark : ui2.images.omni_insert.bullet_list }; } function orderedListOmniInsert(ui2) { return { name: ui2.context.translateText("Numbered List"), description: ui2.context.translateText("List using numbers for items"), group: OmniInsertGroup.Common, priority: 3, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.ordered_list_dark : ui2.images.omni_insert.ordered_list }; } function imagePropsWithSizes(image2, dims) { if (image2.keyvalue) { let width; let height; let units; let lockRatio = true; const partitionedKeyvalue = attrPartitionKeyvalue([kWidthAttrib, kHeightAttrib], image2.keyvalue); for (const kv of partitionedKeyvalue.partitioned) { const [key2, value] = kv; let partitioned = false; const sizeWithUnit = imageSizePropWithUnit(value); if (sizeWithUnit) { sizeWithUnit.unit = sizeWithUnit.unit || kPixelUnit; if (isValidImageSizeUnit(sizeWithUnit.unit)) { if (key2 === kWidthAttrib) { width = sizeWithUnit.size; units = sizeWithUnit.unit; } else if (key2 === kHeightAttrib) { height = sizeWithUnit.size; units = units || sizeWithUnit.unit; } partitioned = true; } } if (!partitioned) { partitionedKeyvalue.base.push(kv); } } if (width && height) { lockRatio = isNaturalAspectRatio(width, height, dims, lockRatio); } return { ...image2, width, height, units, lockRatio, keyvalue: partitionedKeyvalue.base }; } else { return image2; } } function imageDimensionsFromImg(img, containerWidth) { return { naturalWidth: img.naturalWidth || null, naturalHeight: img.naturalHeight || null, containerWidth: ensureContainerWidth(containerWidth) }; } function hasPercentWidth(size2) { return !!size2 && size2.endsWith(kPercentUnit); } function imageContainerWidth(pos, view) { let containerWidth = view.dom.offsetWidth; if (containerWidth > 0) { if (pos) { const imagePos = view.state.doc.resolve(pos); const resizeContainer = findParentNodeClosestToPos_1(imagePos, (nd2) => nd2.isBlock); if (resizeContainer) { const resizeEl = view.domAtPos(resizeContainer.pos + 1); containerWidth = elementInnerDimensions(resizeEl.node).width; } } } return containerWidth; } function inlineHTMLIsImage(html2) { return html2.trimLeft().toLowerCase().startsWith("<img"); } async function imageDialog(node2, dims, nodeType, view, editorUI, editorFormat, imageAttributes) { const schema2 = view.state.schema; let content = Fragment.empty; let image2 = { src: null }; let linkMark; let marks = []; if (node2 && dims && node2.type === nodeType) { image2 = { ...node2.attrs, caption: nodeType === schema2.nodes.figure ? node2.textContent : node2.attrs.caption }; image2 = { ...image2, keyvalue: extractSizeStyles(image2.keyvalue) }; image2 = imagePropsWithSizes(image2, dims); if (nodeType === schema2.nodes.image) { marks = node2.marks; linkMark = node2.marks.find((mark) => mark.type === schema2.marks.link); if (linkMark) { image2.linkTo = linkMark.attrs.href; } } content = node2.content; } else { image2 = nodeType.create(image2).attrs; } const type2 = nodeType === view.state.schema.nodes.image ? ImageType.Image : ImageType.Figure; const quartoFigure = type2 === ImageType.Figure && editorFormat.docTypes.includes(kQuartoDocType) && imageAttributes; if (quartoFigure) { image2.alt = pandocAttrGetKeyvalue(image2, kFigAltAttrib) || ""; pandocAttrRemoveKeyvalue(image2, kFigAltAttrib); image2.align = pandocAttrGetKeyvalue(image2, kFigAlignAttrib) || "default"; pandocAttrRemoveKeyvalue(image2, kFigAlignAttrib); image2.env = pandocAttrGetKeyvalue(image2, kFigEnvAttrib) || ""; pandocAttrRemoveKeyvalue(image2, kFigEnvAttrib); } const result = await editorUI.dialogs.editImage( image2, dims, type2 === ImageType.Figure, imageAttributes ); if (result) { if (type2 === ImageType.Figure && image2.caption !== result.caption) { if (result.caption) { content = Fragment.from(view.state.schema.text(result.caption)); } else { content = Fragment.empty; } } if (quartoFigure) { if (result.alt) { pandocAttrSetKeyvalue(result, kFigAltAttrib, result.alt); } else { pandocAttrRemoveKeyvalue(result, kFigAltAttrib); } if (result.align) { if (result.align !== "default") { pandocAttrSetKeyvalue(result, kFigAlignAttrib, result.align); } else { pandocAttrRemoveKeyvalue(result, kFigAlignAttrib); } } if (result.env) { pandocAttrSetKeyvalue(result, kFigEnvAttrib, result.env); } else { pandocAttrRemoveKeyvalue(result, kFigEnvAttrib); } } let keyvalue = result.keyvalue; if (result.units) { const units = result.units && result.units === kPixelUnit ? "" : result.units; if (result.width) { let width = result.width; if (hasPercentWidth(units)) { width = Math.min(width, 100); } keyvalue = keyvalue || []; keyvalue.push([kWidthAttrib, width + units]); } if (result.height && units !== kPercentUnit && !isNaturalHeight(result.width, result.height, dims)) { keyvalue = keyvalue || []; keyvalue.push([kHeightAttrib, result.height + units]); } } const imageProps = { ...result, keyvalue }; if (nodeType === schema2.nodes.image) { if (linkMark) { marks = linkMark.removeFromSet(marks); if (imageProps.linkTo) { linkMark = linkMark.type.create({ ...linkMark.attrs, href: imageProps.linkTo }); } } else if (imageProps.linkTo) { linkMark = schema2.marks.link.create({ href: imageProps.linkTo }); } if (imageProps.linkTo && linkMark) { marks = linkMark.addToSet(marks); } } const newImage = nodeType.createAndFill(imageProps, content, marks); if (newImage) { insertAndSelectNode(view, newImage); } } if (view) { view.focus(); } } function isNaturalHeight(width, height, dims) { if (width && height && dims) { return isNaturalAspectRatio(width, height, dims, false); } else { return false; } } function nodeDecoration(nodeWithPos, attrs) { return Decoration.node(nodeWithPos.pos, nodeWithPos.pos + nodeWithPos.node.nodeSize, attrs); } const pluginKey$1 = new PluginKey("image-text-selection"); function imageTextSelectionPlugin() { return new Plugin({ key: pluginKey$1, state: { init() { return DecorationSet.empty; }, apply(tr, _value, _oldState, newState) { if (tr.selection.empty || tr.selection instanceof NodeSelection) { return DecorationSet.empty; } const schema2 = newState.schema; const decorations = []; tr.doc.nodesBetween(tr.selection.from, tr.selection.to, (node2, pos) => { if ([schema2.nodes.image, schema2.nodes.figure].includes(node2.type)) { decorations.push(nodeDecoration({ node: node2, pos }, { class: "pm-image-text-selection" })); } }); return DecorationSet.create(tr.doc, decorations); } }, props: { decorations(state) { return pluginKey$1.getState(state); } } }); } function mapResourceToURL(uiContext, path) { return new Promise((resolve) => { const result = uiContext.mapResourceToURL(path); if (typeof result === "string") { resolve(result); } else { result.then(resolve); } }); } const widgets = ""; function createHorizontalPanel() { const div2 = window.document.createElement("div"); div2.classList.add("pm-horizontal-panel"); return div2; } function addHorizontalPanelCell(panel, el2) { el2.classList.add("pm-horizontal-panel-cell"); panel.append(el2); } function createPopup(view, classes, onDestroyed, style) { const popup = window.document.createElement("span"); popup.contentEditable = "false"; popup.classList.add( "pm-popup", "pm-text-color", "pm-proportional-font", "pm-pane-border-color", "pm-background-color" ); popup.style.position = "absolute"; popup.style.zIndex = "10"; applyStyles(popup, classes, style); if (onDestroyed) { const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { mutation.removedNodes.forEach((node2) => { if (node2 === popup) { observer.disconnect(); onDestroyed(); } }); }); }); observer.observe(view.dom, { attributes: false, childList: true, subtree: true }); } return popup; } function createImageButton(image2, classes, title, style) { const button = window.document.createElement("button"); button.classList.add("pm-image-button"); button.title = title; applyStyles(button, classes, style); const imageEl = window.document.createElement("img"); imageEl.src = image2; imageEl.setAttribute("draggable", "false"); button.append(imageEl); return button; } function createInputLabel(text2, classes, style) { const label = window.document.createElement("label"); label.innerText = text2; label.classList.add("pm-input-label"); applyStyles(label, classes, style); return label; } function createSelectInput(options, classes, style) { const select2 = window.document.createElement("select"); appendOptions(select2, options); select2.classList.add("pm-input-select"); select2.classList.add("pm-pane-border-color"); applyStyles(select2, classes, style); return select2; } function appendOptions(container, options) { options.forEach((option) => { const optionEl = window.document.createElement("option"); optionEl.value = option; optionEl.textContent = option; container.append(optionEl); }); } function createCheckboxInput(classes, style) { const input = window.document.createElement("input"); input.classList.add("pm-input-checkbox"); input.type = "checkbox"; applyStyles(input, classes, style); return input; } function createTextInput(widthChars, classes, style) { const input = document.createElement("input"); input.type = "text"; input.classList.add("pm-input-text"); input.classList.add("pm-pane-border-color"); applyStyles(input, classes, style); input.style.width = widthChars + "ch"; return input; } const kDataWidth = "data-width"; const kDataHeight = "data-height"; const kDefaultContainerDisplay = "inline-block"; function initResizeContainer(container) { container.classList.add("pm-image-resize-container", "pm-selected-node-outline-color"); container.style.position = "relative"; container.style.display = kDefaultContainerDisplay; container.style.overflow = "visible"; return container; } function isResizeUICompatible(img) { const incompatibleWidth = img.style.width && !img.hasAttribute(kDataWidth); const incompatibleHeight = img.style.height && img.style.height !== "auto" && !img.hasAttribute(kDataHeight); return !incompatibleWidth && !incompatibleHeight; } function attachResizeUI(imageNode, container, img, imgContainerWidth, view, ui2, format2) { container.classList.add("pm-image-resize-active"); const updateImageNodeFromShelf = () => { updateImageNodeSize( view, imageNode(), img, imgContainerWidth, shelf.props.width(), shelf.props.height(), shelf.props.units() ); }; const onInitShelf = () => { shelf.sync(); const dims = imageDimensionsFromImg(img, imgContainerWidth()); shelf.props.setLockRatio(isNaturalAspectRatio(shelf.props.width(), shelf.props.height(), dims, true)); }; const onWidthChanged = () => { const width = shelf.props.width(); const height = shelf.props.lockRatio() ? img.offsetHeight / img.offsetWidth * width : shelf.props.height(); shelf.props.setHeight(height); updateImageNodeFromShelf(); }; const onHeightChanged = () => { const height = shelf.props.height(); const width = shelf.props.lockRatio() ? img.offsetWidth / img.offsetHeight * height : shelf.props.width(); shelf.props.setWidth(width); updateImageNodeFromShelf(); }; const onUnitsChanged = () => { const prevUnits = shelfSizeFromImage(img).unit; const containerWidth = imgContainerWidth(); const width = shelf.props.width(); const widthPixels = unitToPixels(width, prevUnits, containerWidth); let widthInUnits = pixelsToUnit(widthPixels, shelf.props.units(), containerWidth); if (hasPercentWidth(shelf.props.units()) && widthInUnits > 100) { widthInUnits = 100; } shelf.props.setWidth(widthInUnits); const height = shelf.props.height(); const heightPixels = unitToPixels(height, prevUnits, containerWidth); shelf.props.setHeight(pixelsToUnit(heightPixels, shelf.props.units(), containerWidth)); updateImageNodeFromShelf(); }; const onEditImage = () => { const nodeWithPos = imageNode(); imageDialog( nodeWithPos.node, imageDimensionsFromImg(img, imgContainerWidth()), nodeWithPos.node.type, view, ui2, format2, true ); }; const shelf = resizeShelf( view, container, img, onInitShelf, onWidthChanged, onHeightChanged, onUnitsChanged, onEditImage, ui2.images, ui2.context.translateText ); const handle = resizeHandle( img, imageNode, container, imgContainerWidth, shelf.props.lockRatio, shelf.props.units, shelf.sync, updateImageNodeFromShelf ); container.append(handle); return { update: () => { shelf.sync(); }, detach: () => { container.classList.remove("pm-image-resize-active"); handle.remove(); shelf.remove(); } }; } function resizeShelf(view, container, img, onInit, onWidthChanged, onHeightChanged, onUnitsChanged, onEditImage, uiImages, translateText) { const shelf = createPopup(view, []); const editorContainer = view.dom.parentNode; editorContainer.appendChild(shelf); const updatePosition = () => { const kShelfRequiredSize = 333; const editorBox = editorContainer.getBoundingClientRect(); const imageBox = container.getBoundingClientRect(); shelf.style.top = imageBox.top - editorBox.top + imageBox.height + 6 + "px"; const positionLeft = imageBox.left + kShelfRequiredSize < editorBox.right; if (positionLeft) { shelf.style.right = ""; shelf.style.left = imageBox.left - editorBox.left + "px"; } else { shelf.style.left = ""; shelf.style.right = editorBox.right - imageBox.right + "px"; } }; const editingScrollContainerEl = editingRootScrollContainerElement(view); if (editingScrollContainerEl) { editingScrollContainerEl.addEventListener("scroll", updatePosition); } const positionTimer = window.setInterval(updatePosition, 50); const panel = createHorizontalPanel(); shelf.append(panel); const addToPanel = (widget, paddingRight) => { addHorizontalPanelCell(panel, widget); if (paddingRight) { const paddingSpan = window.document.createElement("span"); paddingSpan.style.width = paddingRight + kPixelUnit; addHorizontalPanelCell(panel, paddingSpan); } }; const inputClasses = ["pm-text-color", "pm-background-color"]; const wLabel = createInputLabel("w:"); addToPanel(wLabel, 4); const wInput = createTextInput(5, inputClasses); wInput.onchange = onWidthChanged; addToPanel(wInput, 8); const kHeightWidth = "38px"; const hLabel = createInputLabel("h:"); addToPanel(hLabel, 4); const hInput = createTextInput(5, inputClasses, { width: kHeightWidth }); hInput.onchange = onHeightChanged; addToPanel(hInput, 0); const hAutoLabel = createInputLabel("(auto)", ["pm-light-text-color"], { width: kHeightWidth }); addToPanel(hAutoLabel, 10); const unitsSelect = createSelectInput(kValidUnits, inputClasses); unitsSelect.onchange = () => { wInput.focus(); unitsSelect.focus(); manageUnitsUI(); onUnitsChanged(); }; addToPanel(unitsSelect, 12); const checkboxWrapper = window.document.createElement("div"); const lockCheckbox = createCheckboxInput(); lockCheckbox.checked = true; checkboxWrapper.append(lockCheckbox); addToPanel(checkboxWrapper, 4); const lockLabel = createInputLabel(translateText("Lock ratio")); addToPanel(lockLabel, 20); const editImage = createImageButton( uiImages.properties, ["pm-image-button-edit-properties"], translateText("Edit Attributes") ); editImage.onclick = onEditImage; addHorizontalPanelCell(panel, editImage); if (img.complete) { window.setTimeout(onInit, 0); } else { img.onload = onInit; } const manageUnitsUI = () => { const percentSizing = unitsSelect.value === kPercentUnit; if (percentSizing) { lockCheckbox.checked = true; lockCheckbox.disabled = true; } else { lockCheckbox.disabled = false; } hInput.style.display = percentSizing ? "none" : ""; hAutoLabel.style.display = percentSizing ? "" : "none"; }; manageUnitsUI(); const getDim = (input) => { const value = parseFloat(input.value); if (isNaN(value)) { return null; } if (value > 0) { return value; } else { return null; } }; const setWidth = (width) => { wInput.value = roundUnit(width, unitsSelect.value); }; const setHeight = (height) => { hInput.value = roundUnit(height, unitsSelect.value); }; return { el: shelf, sync: () => { const size2 = shelfSizeFromImage(img); unitsSelect.value = size2.unit; setWidth(size2.width); setHeight(size2.height); manageUnitsUI(); updatePosition(); }, position: () => { updatePosition(); }, remove: () => { if (editingScrollContainerEl) { editingScrollContainerEl.removeEventListener("scroll", updatePosition); } clearInterval(positionTimer); shelf.remove(); }, props: { width: () => getDim(wInput) || shelfSizeFromImage(img).width, setWidth, height: () => getDim(hInput) || shelfSizeFromImage(img).height, setHeight, units: () => unitsSelect.value, setUnits: (units) => unitsSelect.value = units, lockRatio: () => lockCheckbox.checked, setLockRatio: (lock) => { if (!lockCheckbox.disabled) { lockCheckbox.checked = lock; } } } }; } function resizeHandle(img, imageNode, container, imgContainerWidth, lockRatio, units, onSizing, onSizingComplete) { const handle = document.createElement("span"); handle.contentEditable = "false"; handle.classList.add("pm-image-resize-handle", "pm-background-color", "pm-selected-node-border-color"); handle.style.position = "absolute"; handle.style.bottom = "-6px"; handle.style.right = "-6px"; handle.style.cursor = "nwse-resize"; const havePointerEvents = !!document.body.setPointerCapture; const onPointerDown = (ev) => { ev.preventDefault(); const startWidth = img.offsetWidth; const startHeight = img.offsetHeight; const startX = ev.pageX; const startY = ev.pageY; const containerWidth = imgContainerWidth(); const onPointerMove = (e2) => { const movedX = e2.pageX - startX; const movedY = e2.pageY - startY; let width; let height; if (lockRatio()) { if (movedX >= movedY) { width = startWidth + movedX; height = startHeight + movedX * (startHeight / startWidth); } else { height = startHeight + movedY; width = startWidth + movedY * (startWidth / startHeight); } } else { width = startWidth + movedX; height = startHeight + movedY; } const widthInUnits = pixelsToUnit(width, units(), containerWidth); if (hasPercentWidth(units()) && widthInUnits > 100) { width = containerWidth; height = width * (startHeight / startWidth); } const align = pandocAttrGetKeyvalue(imageNode().node.attrs, kFigAlignAttrib); if (align) { setMarginsForAlignment(container, align, width, containerWidth); } img.style.width = width + kPixelUnit; img.setAttribute(kDataWidth, pixelsToUnit(width, units(), containerWidth) + units()); img.style.height = height + kPixelUnit; img.setAttribute(kDataHeight, pixelsToUnit(height, units(), containerWidth) + units()); onSizing(); }; const onPointerUp = (e2) => { e2.preventDefault(); if (havePointerEvents) { handle.releasePointerCapture(e2.pointerId); handle.removeEventListener("pointermove", onPointerMove); handle.removeEventListener("pointerup", onPointerUp); } else { document.removeEventListener("mousemove", onPointerMove); document.removeEventListener("mouseup", onPointerUp); } onSizingComplete(); }; if (havePointerEvents) { handle.setPointerCapture(ev.pointerId); handle.addEventListener("pointermove", onPointerMove); handle.addEventListener("pointerup", onPointerUp); } else { document.addEventListener("mousemove", onPointerMove); document.addEventListener("mouseup", onPointerUp); } }; if (havePointerEvents) { handle.addEventListener("pointerdown", onPointerDown); } else { handle.addEventListener("mousedown", onPointerDown); } return handle; } function shelfSizeFromImage(img) { const width = img.getAttribute(kDataWidth); const height = img.getAttribute(kDataHeight); if (!width && !height) { return { width: img.naturalWidth || img.offsetWidth, height: img.naturalHeight || img.offsetHeight, unit: kPixelUnit }; } else { let widthWithUnit = imageSizePropWithUnit(width); let heightWithUnit = imageSizePropWithUnit(height); if (!widthWithUnit) { widthWithUnit = { size: heightWithUnit.size * (img.offsetWidth / img.offsetHeight), unit: heightWithUnit.unit }; } if (!heightWithUnit) { heightWithUnit = { size: widthWithUnit.size * (img.offsetHeight / img.offsetWidth), unit: widthWithUnit.unit }; } return { width: widthWithUnit.size, height: heightWithUnit.size, unit: widthWithUnit.unit }; } } function updateImageNodeSize(view, image2, img, imgContainerWidth, width, height, unit) { unit = unit === kPixelUnit ? "" : unit; let keyvalue = extractSizeStyles(image2.node.attrs.keyvalue); keyvalue = keyvalue.filter((value) => ![kWidthAttrib, kHeightAttrib].includes(value[0])); keyvalue.push([kWidthAttrib, width + unit]); const dims = imageDimensionsFromImg(img, imgContainerWidth()); if (!hasPercentWidth(width + unit) && !isNaturalAspectRatio(width, height, dims, false)) { keyvalue.push([kHeightAttrib, height + unit]); } const tr = view.state.tr; tr.setNodeMarkup(image2.pos, image2.node.type, { ...image2.node.attrs, keyvalue }); const prevState = view.state; if (prevState.selection instanceof NodeSelection && prevState.selection.from === image2.pos) { tr.setSelection(NodeSelection.create(tr.doc, image2.pos)); } view.dispatch(tr); } function updateImageViewSize(node2, img, figure, containerWidth) { img.removeAttribute(kStyleAttrib); img.removeAttribute(kDataWidth); img.removeAttribute(kDataHeight); if (figure) { figure.style.cssFloat = ""; figure.style.verticalAlign = ""; figure.style.margin = ""; figure.style.marginTop = ""; figure.style.marginBottom = ""; figure.style.marginRight = ""; figure.style.marginLeft = ""; figure.style.padding = ""; figure.style.paddingTop = ""; figure.style.paddingBottom = ""; figure.style.paddingRight = ""; figure.style.paddingLeft = ""; figure.style.display = kDefaultContainerDisplay; } if (node2.attrs.keyvalue) { const keyvalue = extractSizeStyles(node2.attrs.keyvalue); keyvalue.forEach((attr) => { const key2 = attr[0]; let value = attr[1]; if (key2 === kStyleAttrib) { if (figure) { const liftStyle = (attrib, val) => figure.style.setProperty(attrib, val); value = removeStyleAttrib(value, "float", liftStyle); value = removeStyleAttrib(value, "vertical-align", liftStyle); value = removeStyleAttrib(value, "padding(?:[\\w\\-])*", liftStyle); removeStyleAttrib(value, "display", liftStyle); } const liftImgStyle = (attrib, val) => img.style.setProperty(attrib, val); value = removeStyleAttrib(value, "border(?:[\\w\\-])*", liftImgStyle); value = removeStyleAttrib(value, "margin(?:[\\w\\-])*", liftImgStyle); value = removeStyleAttrib(value, "display", liftImgStyle); } else if (key2 === kWidthAttrib) { const widthProp = imageSizePropWithUnit(value); if (widthProp) { widthProp.unit = widthProp.unit || kPixelUnit; if (isValidImageSizeUnit(widthProp.unit)) { img.setAttribute(kDataWidth, widthProp.size + widthProp.unit); img.style.width = unitToPixels(widthProp.size, widthProp.unit, containerWidth) + kPixelUnit; } } if (!img.hasAttribute(kDataWidth)) { img.style.width = value; } } else if (key2 === kHeightAttrib) { const heightProp = imageSizePropWithUnit(value); if (heightProp) { heightProp.unit = heightProp.unit || kPixelUnit; if (isValidImageSizeUnit(heightProp.unit)) { img.setAttribute(kDataHeight, heightProp.size + heightProp.unit); img.style.height = unitToPixels(heightProp.size, heightProp.unit, containerWidth) + kPixelUnit; } } if (!img.hasAttribute(kDataHeight)) { img.style.height = value; } } else if (figure && key2 === kAlignAttrib) { switch (value) { case "left": case "right": figure.style.cssFloat = value; break; case "top": case "bottom": case "middle": figure.style.verticalAlign = value; break; } } }); if (figure) { const align = pandocAttrGetKeyvalue(node2.attrs, kFigAlignAttrib); if (align && align !== "default") { let width = null; const widthProp = imageSizePropWithUnit(img.style.width); if (widthProp) { width = widthProp.size; } else { const dims = imageDimensionsFromImg(img, containerWidth); width = dims.naturalWidth; } if (width !== null) { setMarginsForAlignment(figure, align, width, containerWidth); } } } if (hasPercentWidth(img.getAttribute(kDataWidth))) { img.style.height = "auto"; } } } function setMarginsForAlignment(el2, align, width, containerWidth) { const marginWidth = containerWidth - width; if (marginWidth > 0) { if (align === "left") { el2.style.marginRight = marginWidth + kPixelUnit; } else if (align === "right") { el2.style.marginLeft = marginWidth + kPixelUnit; } else if (align === "center") { el2.style.marginLeft = marginWidth / 2 + kPixelUnit; el2.style.marginRight = el2.style.marginLeft; } } else { el2.style.marginLeft = ""; el2.style.marginRight = ""; } } const imageStyles = ""; function imageNodeViewPlugins(type2, ui2, format2, events, pandocExtensions) { return [ new Plugin({ key: new PluginKey(`${type2}-node-view`), props: { nodeViews: { [type2]: (node2, view, getPos) => { return new ImageNodeView(node2, view, getPos, ui2, format2, events, pandocExtensions); } } } }) ]; } class ImageNodeView { constructor(node2, view, getPos, editorUI, editorFormat, editorEvents, pandocExtensions) { __publicField(this, "type"); __publicField(this, "node"); __publicField(this, "view"); __publicField(this, "getPos"); __publicField(this, "editorUI"); __publicField(this, "editorFormat"); __publicField(this, "imageAttributes"); __publicField(this, "implicitFigures"); __publicField(this, "dom"); __publicField(this, "img"); __publicField(this, "contentDOM"); __publicField(this, "figcaption"); __publicField(this, "imgBroken"); __publicField(this, "resizeUI"); __publicField(this, "sizeOnVisibleTimer"); __publicField(this, "unregisterOnResize"); __publicField(this, "unregisterWatchImg", null); const schema2 = node2.type.schema; this.type = node2.type === schema2.nodes.image ? ImageType.Image : ImageType.Figure; this.node = node2; this.view = view; this.getPos = getPos; this.imageAttributes = imageAttributesAvailable(pandocExtensions); this.implicitFigures = pandocExtensions.implicit_figures; this.editorUI = editorUI; this.editorFormat = editorFormat; this.resizeUI = null; this.imgBroken = false; const selectOnClick = () => { const tr = view.state.tr; tr.setSelection(NodeSelection.create(tr.doc, getPos())); view.dispatch(tr); }; const editOnDblClick = () => { selectOnClick(); imageDialog( this.node, imageDimensionsFromImg(this.img, this.containerWidth()), this.node.type, this.view, editorUI, editorFormat, this.imageAttributes ); }; const noPropagateClick = (ev) => { ev.stopPropagation(); }; this.img = document.createElement("img"); this.img.classList.add("pm-img"); this.img.onload = () => { this.imgBroken = false; }; this.img.onerror = () => { this.imgBroken = true; }; this.img.onclick = selectOnClick; this.img.ondblclick = editOnDblClick; if (this.type === ImageType.Figure) { this.dom = document.createElement("figure"); this.dom.classList.add("pm-figure"); const container = document.createElement("div"); container.contentEditable = "false"; this.dom.append(container); container.append(this.img); this.updateImg(); this.figcaption = document.createElement("figcaption"); this.figcaption.classList.add("pm-figcaption"); this.figcaption.classList.add("pm-node-caption"); this.figcaption.onclick = noPropagateClick; this.figcaption.ondblclick = noPropagateClick; this.contentDOM = this.figcaption; this.dom.append(this.figcaption); this.manageFigcaption(); } else { this.dom = document.createElement("span"); this.dom.append(this.img); this.updateImg(); this.contentDOM = null; this.figcaption = null; } this.dom.ondragstart = (event) => { if (event.target !== this.img) { event.preventDefault(); event.stopPropagation(); } }; if (this.imageAttributes) { initResizeContainer(this.dom); } this.updateSizeOnVisible(); this.unregisterOnResize = editorEvents.subscribe(ResizeEvent, () => { this.updateImageSize(); }); } destroy() { if (this.unregisterWatchImg) { this.unregisterWatchImg(); } this.unregisterOnResize(); this.clearSizeOnVisibleTimer(); this.detachResizeUI(); } selectNode() { this.dom.classList.add("ProseMirror-selectednode"); if (this.contentDOM || !this.node.type.spec.draggable) { this.dom.draggable = true; } this.manageFigcaption(); this.attachResizeUI(); } deselectNode() { this.dom.classList.remove("ProseMirror-selectednode"); if (this.contentDOM || !this.node.type.spec.draggable) { this.dom.draggable = false; } this.detachResizeUI(); } update(node2) { if (node2.type !== this.node.type) { return false; } this.node = node2; this.updateImg().then(() => { if (this.resizeUI) { if (isResizeUICompatible(this.img)) { this.resizeUI.update(); } else { this.resizeUI.detach(); this.resizeUI = null; } } else if (this.isNodeSelected()) { this.attachResizeUI(); } }); return true; } ignoreMutation(mutation) { return !this.contentDOM || !this.contentDOM.contains(mutation.target); } async updateImg() { if (this.unregisterWatchImg) { this.unregisterWatchImg(); } const src2 = this.node.attrs.src; if (src2.match(/^\w+:\/\//)) { this.img.src = src2; } else { const decodedSrc = decodeURI(src2); this.img.src = await mapResourceToURL(this.editorUI.context, decodedSrc); this.unregisterWatchImg = this.editorUI.context.watchResource(decodedSrc, async () => { this.img.src = await mapResourceToURL(this.editorUI.context, decodedSrc) + "?" + new Date().getTime(); }); } this.img.title = ""; if (this.node.attrs.title) { this.img.title = this.node.attrs.title; } this.img.alt = this.node.textContent || this.node.attrs.src; this.manageFigcaption(); this.updateImageSize(); } updateImageSize() { const containerWidth = this.img.isConnected ? this.containerWidth() : 0; updateImageViewSize(this.node, this.img, this.isFigure() ? this.dom : null, containerWidth); } updateSizeOnVisible() { const updateSizeOnVisible = () => { if (isElementVisible(this.img)) { this.updateImageSize(); this.clearSizeOnVisibleTimer(); } }; this.sizeOnVisibleTimer = window.setInterval(updateSizeOnVisible, 200); } clearSizeOnVisibleTimer() { if (this.sizeOnVisibleTimer) { clearInterval(this.sizeOnVisibleTimer); this.sizeOnVisibleTimer = void 0; } } attachResizeUI() { if (this.imageAttributes && !this.imgBroken && isResizeUICompatible(this.img)) { const imageNode = () => ({ pos: this.getPos(), node: this.node }); const imgContainerWidth = () => this.containerWidth(); this.resizeUI = attachResizeUI( imageNode, this.dom, this.img, imgContainerWidth, this.view, this.editorUI, this.editorFormat ); } } detachResizeUI() { if (this.resizeUI) { this.resizeUI.detach(); this.resizeUI = null; } } isNodeSelected() { return this.dom.classList.contains("ProseMirror-selectednode"); } isFigure() { return this.type === ImageType.Figure; } containerWidth() { return imageContainerWidth(this.getPos(), this.view); } manageFigcaption() { const noImplicitFigures = !this.implicitFigures; const emptyFigcaption = this.figcaption && this.node.textContent.length === 0; const selection = this.view.state.selection; const selectionInFigcaption = selection.empty && selection.$head.node() === this.node; const hide2 = noImplicitFigures || emptyFigcaption && !selectionInFigcaption; if (this.figcaption) { if (noImplicitFigures) { this.figcaption.style.display = "none"; this.figcaption.contentEditable = "false"; } else { this.figcaption.contentEditable = hide2 ? "false" : "true"; this.figcaption.style.height = hide2 ? "0" : ""; this.figcaption.style.minHeight = hide2 ? "0" : ""; this.figcaption.style.margin = hide2 ? "0" : ""; } } } } function figureKeys(schema2) { return [ { key: BaseKey.Enter, command: exitNode(schema2.nodes.figure, -1, false) }, { key: BaseKey.Backspace, command: backspaceHandler() }, { key: BaseKey.ArrowLeft, command: figureArrowHandler("left") }, { key: BaseKey.ArrowRight, command: figureArrowHandler("right") }, { key: BaseKey.ArrowUp, command: figureArrowHandler("up") }, { key: BaseKey.ArrowDown, command: figureArrowHandler("down") } ]; } function backspaceHandler() { return (state, dispatch) => { const selection = state.selection; if (!selection.empty) { return false; } const schema2 = state.schema; const { $head } = state.selection; const { parentOffset } = $head; if (parentOffset !== 0) { return false; } const isWithinEmptyCaption = $head.parent.type === schema2.nodes.figure && $head.parent.childCount === 0; if (isWithinEmptyCaption) { if (dispatch) { const tr = state.tr; tr.setSelection(NodeSelection.create(tr.doc, $head.pos - 1)); dispatch(tr); } return true; } else { const parent = $head.node($head.depth - 1); const parentIndex = $head.index($head.depth - 1); if (parentIndex > 0) { const previousNode = parent.child(parentIndex - 1); if (previousNode.type === schema2.nodes.figure) { if (dispatch) { const tr = state.tr; if ($head.node().childCount === 0) { const parentTextBlock = findParentNodeClosestToPos_1($head, (node2) => node2.isTextblock); if (parentTextBlock) { tr.deleteRange(parentTextBlock.pos, parentTextBlock.pos + parentTextBlock.node.nodeSize); } } const nodePos = $head.pos - previousNode.nodeSize - 1; const figureSelection = NodeSelection.create(tr.doc, nodePos); tr.setSelection(figureSelection); dispatch(tr); } return true; } } } return false; }; } function figureArrowHandler(dir) { return (state, dispatch, view) => { const selectFigure = (figure) => { if (dispatch) { const tr = state.tr; const figureSelection = NodeSelection.create(state.doc, figure.pos); tr.setSelection(figureSelection).scrollIntoView(); dispatch(tr); } }; const selectFigureCaption = (figure, atEnd = false) => { if (dispatch) { const tr = state.tr; setTextSelection_1(figure.pos + (atEnd ? figure.node.textContent.length + 1 : 0), 1)(tr); dispatch(tr); } }; const { schema: schema2, selection } = state; if ((dir === "down" || dir === "right") && selection instanceof NodeSelection && selection.node.type === schema2.nodes.figure) { const figure = findSelectedNodeOfType(schema2.nodes.figure, selection); if (figure && figure.node.childCount > 0) { selectFigureCaption(figure); return true; } } if ((dir === "up" || dir === "left") && selection instanceof TextSelection && !!findParentNodeOfType_1(schema2.nodes.figure)(selection)) { if (dir === "up" || dir === "left" && selection.$head.parentOffset === 0) { const figure = findParentNodeOfType_1(schema2.nodes.figure)(selection); if (figure) { selectFigure(figure); return true; } } } else if (selection.empty && view && view.endOfTextblock(dir)) { const side = dir === "left" || dir === "up" ? -1 : 1; const { $head } = selection; const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side); if (nextPos.$head) { const figure = findParentNodeOfTypeClosestToPos_1(nextPos.$head, schema2.nodes.figure); if (figure) { if ((dir === "up" || dir === "down") && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) { return false; } if (side === -1 && figure.node.childCount > 0) { selectFigureCaption(figure, dir === "left"); } else { selectFigure(figure); } return true; } } } return false; }; } const extension$P = (context) => { const { pandocExtensions, ui: ui2, events, format: format2 } = context; const imageAttr = imageAttributesAvailable(pandocExtensions); return { nodes: [ { name: "figure", spec: { attrs: imageNodeAttrsSpec(true, imageAttr), content: "inline*", group: "block", draggable: true, selectable: true, defining: true, parseDOM: [ { tag: "figure", contentElement: "figcaption", getAttrs(dom) { const el2 = dom; const img = el2.querySelector("img"); if (img && img.parentNode === dom) { return imageAttrsFromDOM(img, imageAttr); } else { return { src: null, title: null }; } } } ], toDOM(node2) { return ["figure", imageDOMOutputSpec(node2, imageAttr), ["figcaption", { class: "pm-figcaption" }, 0]]; } }, pandoc: { writer: imagePandocOutputWriter(true), readers: [ { token: PandocTokenType.Figure, handler: (schema2) => { const imageHandler = pandocImageHandler(true, true)(schema2); return (writer, tok) => { var _a, _b; const kFigureAttributes = 0; const kFigureContents = 2; const tokImage = (_b = (_a = tok.c[kFigureContents]) == null ? void 0 : _a[0]) == null ? void 0 : _b.c[0]; if ((tokImage == null ? void 0 : tokImage.t) === PandocTokenType.Image) { tokImage.c[0][0] = tok.c[kFigureAttributes][0]; imageHandler(writer, tokImage); } }; } } ], blockReader: (schema2, tok, writer) => { const handleHTMLImage = (html2) => { const attrs = imageAttrsFromHTML(html2); if (attrs) { writer.addNode(schema2.nodes.figure, { ...attrs, raw: true }, []); return true; } else { return false; } }; if (isParaWrappingFigure(tok) && !writerHasProhibitedFigureParent(schema2, writer)) { const handler = pandocImageHandler(true, imageAttr)(schema2); handler(writer, tok.c[0]); return true; } else if (isHTMLImageBlock(tok)) { return handleHTMLImage(tok.c[kRawBlockContent]); } else { return false; } } }, attr_edit: () => ({ type: (schema2) => schema2.nodes.figure, editFn: () => imageCommand(ui2, format2, imageAttr), offset: { top: 2, right: 0 }, noKeyvalueTags: true, preferHidden: true }) } ], fixups: () => { return [ (tr, fixupContext) => { if (fixupContext === FixupContext.Load) { return convertImagesToFigure(tr); } else { return tr; } } ]; }, appendTransaction: (schema2) => { return [ { name: "figure-convert", nodeFilter: (node2) => node2.type === schema2.nodes.image, append: convertImagesToFigure } ]; }, baseKeys: figureKeys, plugins: () => { return [...imageNodeViewPlugins("figure", ui2, format2, events, pandocExtensions)]; } }; }; function posHasProhibitedFigureParent(schema2, $pos) { return prohibitedFigureParents(schema2).some((type2) => { return !!findParentNodeClosestToPos_1($pos, (node2) => node2.type === type2); }); } function writerHasProhibitedFigureParent(schema2, writer) { return prohibitedFigureParents(schema2).some(writer.isNodeOpen); } function prohibitedFigureParents(schema2) { return [schema2.nodes.table_cell, schema2.nodes.list_item, schema2.nodes.definition_list]; } function convertImagesToFigure(tr) { return trTransform(tr, imagesToFiguresTransform); } function imagesToFiguresTransform(tr) { const schema2 = tr.doc.type.schema; const images = findChildrenByType_1(tr.doc, schema2.nodes.image); images.forEach((image2) => { const mappedImagePos = tr.mapping.mapResult(image2.pos); if (!mappedImagePos.deleted) { const imagePos = tr.doc.resolve(mappedImagePos.pos); if (imagePos.parent.type === schema2.nodes.paragraph && imagePos.parent.childCount === 1 && !posHasProhibitedFigureParent(schema2, imagePos)) { let attrs = image2.node.attrs; if (schema2.marks.link.isInSet(image2.node.marks)) { const linkAttrs = getMarkAttrs( tr.doc, { from: mappedImagePos.pos, to: mappedImagePos.pos + image2.node.nodeSize }, schema2.marks.link ); if (linkAttrs && linkAttrs.href) { attrs = { ...attrs, linkTo: linkAttrs.href }; } } const content = attrs.caption ? Fragment.from(schema2.text(attrs.caption)) : Fragment.empty; const figure = schema2.nodes.figure.createAndFill(attrs, content); if (figure) { tr.replaceRangeWith(mappedImagePos.pos, mappedImagePos.pos + image2.node.nodeSize, figure); } } } }); } function isParaWrappingFigure(tok) { return isSingleChildParagraph$1(tok) && tok.c[0].t === PandocTokenType.Image; } function isHTMLImageBlock(tok) { if (tok.t === PandocTokenType.RawBlock) { const format2 = tok.c[kRawBlockFormat]; const text2 = tok.c[kRawBlockContent]; return format2 === "html" && isSingleLineHTML(text2) && inlineHTMLIsImage(text2); } else { return false; } } function isSingleChildParagraph$1(tok) { return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1; } const kTextUriList = "text/uri-list"; const kApplicationQtImage = "application/x-qt-image"; const pluginKey = new PluginKey("image-events"); function imageEventsPlugin(ui2) { return new Plugin({ key: pluginKey, props: { handleDOMEvents: { drop: imageDrop(ui2) }, handlePaste: imagePaste(ui2) } }); } function imagePaste(ui2) { return (view, event) => { const clipboardEvent = event; if (clipboardEvent.clipboardData) { const kTextHtml2 = "text/html"; const kOfficeSchema = "urn:schemas-microsoft-com:office:office"; if (clipboardEvent.clipboardData.types.includes(kTextHtml2)) { const html2 = clipboardEvent.clipboardData.getData(kTextHtml2); if (html2.includes(kOfficeSchema)) { return false; } } if (handleImageDataTransfer( event, clipboardEvent.clipboardData, view, view.state.selection.from, ui2 )) { return true; } else if (clipboardEvent.clipboardData.types.includes(kTextUriList)) { const uriList = clipboardEvent.clipboardData.getData(kTextUriList); if (uriList.length === 0) { ui2.context.clipboardUris().then((uris) => { if (uris) { handleImageUris(view, view.state.selection.from, uris, ui2); } }); event.preventDefault(); return true; } } else if (clipboardEvent.clipboardData.types.includes(kApplicationQtImage)) { ui2.context.clipboardImage().then((image2) => { if (image2) { handleImageUris(view, view.state.selection.from, [image2], ui2); } }); event.preventDefault(); return true; } } return false; }; } function imageDrop(ui2) { return (view, event) => { const dragEvent = event; if (!dragEvent.dataTransfer) { return false; } const coordinates = view.posAtCoords({ left: dragEvent.clientX, top: dragEvent.clientY }); if (!coordinates) { return false; } return handleImageDataTransfer(dragEvent, dragEvent.dataTransfer, view, coordinates.pos, ui2); }; } function handleImageDataTransfer(event, dataTransfer, view, pos, ui2) { var _a; let uris = null; if (((_a = dataTransfer.files) == null ? void 0 : _a.length) && dataTransfer.files[0].path) { uris = []; for (let i2 = 0; i2 < dataTransfer.files.length; i2++) { const file = dataTransfer.files.item(i2); if (file && file.path) { uris.push(file.path); } } } else { const uriList = dataTransfer.getData(kTextUriList); if (uriList) { uris = uriList.split("\r?\n"); } else { uris = ui2.context.droppedUris(); } } if (uris && handleImageUris(view, pos, uris, ui2)) { event.preventDefault(); return true; } const files = []; if (dataTransfer.files.length) { for (let i2 = 0; i2 < dataTransfer.files.length; i2++) { const file = dataTransfer.files.item(i2); if (file && kImageExtensions.some((ext) => file.type === `image/${ext}`)) { files.push(file); } } } if (files.length) { if (ui2.context.resolveBase64Images) { Promise.all(files.map(blobToBase64)).then(async (base64Files) => { const images = await ui2.context.resolveBase64Images(base64Files); insertImageFiles(view, pos, images); }); } event.preventDefault(); return true; } else { return false; } } function handleImageUris(view, pos, uris, ui2) { const imageUris = uris.filter((uri) => { const extension2 = uri.split(/\./).pop().toLowerCase(); return kImageExtensions.includes(extension2); }); if (imageUris.length === 0) { return false; } ui2.context.resolveImageUris(imageUris).then((images) => { insertImageFiles(view, pos, images); }); return true; } function insertImageFiles(view, pos, images) { const tr = view.state.tr; images.forEach((image2) => { const node2 = view.state.schema.nodes.image.create({ src: image2 }); tr.insert(pos, node2); }); view.dispatch(tr); } const blobToBase64 = (blob) => new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(blob); reader.onload = () => resolve(reader.result); reader.onerror = (error) => reject(error); }); const TARGET_URL = 0; const TARGET_TITLE = 1; const IMAGE_ATTR = 0; const IMAGE_ALT = 1; const IMAGE_TARGET = 2; const extension$O = (context) => { const { pandocExtensions, ui: ui2, events, format: format2 } = context; const imageAttr = imageAttributesAvailable(pandocExtensions); return { nodes: [ { name: "image", spec: { inline: true, attrs: imageNodeAttrsSpec(false, imageAttr), group: "inline", draggable: true, parseDOM: [ { tag: "img[src]", getAttrs(dom) { return imageAttrsFromDOM(dom, imageAttr); } } ], toDOM(node2) { return imageDOMOutputSpec(node2, imageAttr); } }, pandoc: { readers: [ { token: PandocTokenType.Image, handler: pandocImageHandler(false, imageAttr) } ], inlineHTMLReader: pandocExtensions.raw_html ? imageInlineHTMLReader : void 0, writer: imagePandocOutputWriter(false) }, attr_edit: () => ({ type: (schema2) => schema2.nodes.image, noDecorator: true, editFn: () => imageCommand(ui2, format2, imageAttr) }) } ], commands: () => { return [ new ProsemirrorCommand( EditorCommandId.Image, ["Shift-Mod-i"], imageCommand(ui2, format2, imageAttr), imageOmniInsert(ui2) ) ]; }, plugins: () => { return [ imageTextSelectionPlugin(), imageEventsPlugin(ui2), ...imageNodeViewPlugins("image", ui2, format2, events, pandocExtensions) ]; } }; }; function pandocImageHandler(figure, imageAttributes) { return (schema2) => (writer, tok) => { const target2 = tok.c[IMAGE_TARGET]; const attrs = { src: target2[TARGET_URL], title: readPandocTitle(target2[TARGET_TITLE]), caption: "", ...imageAttributes ? pandocAttrReadAST(tok, IMAGE_ATTR) : {} }; if (!figure) { attrs.caption = stringifyTokens(tok.c[IMAGE_ALT]); } writer.openNode(figure ? schema2.nodes.figure : schema2.nodes.image, attrs); if (figure) { writer.writeTokens(tok.c[IMAGE_ALT]); } writer.closeNode(); }; } function imagePandocOutputWriter(figure) { return (output, node2) => { let writer = () => { output.writeToken(PandocTokenType.Image, () => { if (output.extensions.link_attributes) { output.writeAttr(node2.attrs.id, node2.attrs.classes, node2.attrs.keyvalue); } else { output.writeAttr(); } output.writeArray(() => { if (figure) { output.writeInlines(node2.content); } else { output.writeText(node2.attrs.caption); } }); output.write([node2.attrs.src, node2.attrs.title || ""]); }); }; const requireHTML = pandocAttrAvailable(node2.attrs) && !output.extensions.link_attributes && output.extensions.raw_html; if (node2.attrs.raw || requireHTML) { writer = () => { const imgAttr = imageDOMAttributes(node2, true, false); const html2 = asHTMLTag("img", imgAttr, true, true); output.writeRawMarkdown(html2); }; } if (figure) { let writeFigure = writer; if (node2.attrs.linkTo) { writeFigure = () => { output.writeLink(node2.attrs.linkTo, "", null, writer); }; } output.writeToken(PandocTokenType.Para, writeFigure); } else { writer(); } }; } function imageInlineHTMLReader(schema2, html2, writer) { const isImage = inlineHTMLIsImage(html2); if (!isImage) { return false; } if (writer) { const attrs = imageAttrsFromHTML(html2); if (attrs) { writer.addNode(schema2.nodes.image, { ...attrs, raw: true }, []); } else { return false; } } return isImage; } function imageDOMOutputSpec(node2, imageAttributes) { return ["img", imageDOMAttributes(node2, imageAttributes)]; } function imageDOMAttributes(node2, imageAttributes, marker2 = true) { const attr = { src: node2.attrs.src }; const title = node2.attrs.title; if (title) { attr.title = title; } const caption = node2.attrs.caption || node2.textContent; if (caption) { attr.alt = caption; } return { ...attr, ...imageAttributes ? pandocAttrToDomAttr(node2.attrs, marker2) : {} }; } function imageNodeAttrsSpec(linkTo, imageAttributes) { return { src: {}, title: { default: null }, caption: { default: null }, raw: { default: false }, ...linkTo ? { linkTo: { default: null } } : {}, ...imageAttributes ? pandocAttrSpec : {} }; } function imageAttrsFromDOM(el2, imageAttributes, forceAttrs = false) { const attrs = { src: el2.getAttribute("src") || null, title: el2.getAttribute("title") || null, caption: el2.getAttribute("alt") || null }; return { ...attrs, ...imageAttributes ? pandocAttrParseDom(el2, attrs, forceAttrs) : {} }; } function imageAttrsFromHTML(html2) { const parser = new window.DOMParser(); const doc2 = parser.parseFromString(html2, "text/html"); if (doc2.body && doc2.body.firstChild instanceof HTMLImageElement) { return imageAttrsFromDOM(doc2.body.firstChild, true, true); } else { return null; } } function imageCommand(editorUI, editorFormat, imageAttributes) { return (state, dispatch, view) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.image) && !canInsertNode(state, schema2.nodes.figure)) { return false; } if (dispatch && view) { let node2 = null; let nodeType = schema2.nodes.image; let img = null; let imgDimensions = null; if (selectionIsImageNode(schema2, state.selection)) { node2 = state.selection.node; nodeType = node2.type; if (nodeType === schema2.nodes.figure) { const figure = view.nodeDOM(state.selection.from); img = figure.firstChild.firstChild; } else { const span = view.nodeDOM(state.selection.from); img = span.firstChild; } if (img) { const containerWidth = imageContainerWidth(state.selection.from, view); imgDimensions = imageDimensionsFromImg(img, containerWidth); } } if (selectionIsEmptyParagraph(schema2, state.selection) && !posHasProhibitedFigureParent(schema2, state.selection.$head)) { nodeType = schema2.nodes.figure; } imageDialog(node2, imgDimensions, nodeType, view, editorUI, editorFormat, imageAttributes); } return true; }; } function imageOmniInsert(ui2) { return { name: ui2.context.translateText("Figure / Image..."), description: ui2.context.translateText("Figure or inline image"), group: OmniInsertGroup.Content, priority: 10, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.image_dark : ui2.images.omni_insert.image }; } function readPandocTitle(title) { if (title) { return title.replace(/^(fig:)/, ""); } else { return title; } } const hrStyles = ""; const extension$N = (context) => { const { ui: ui2 } = context; return { nodes: [ { name: "horizontal_rule", spec: { group: "block", parseDOM: [{ tag: "hr" }], toDOM() { return ["div", ["hr", { class: "pm-hr-background-color" }]]; } }, pandoc: { readers: [ { token: PandocTokenType.HorizontalRule, node: "horizontal_rule" } ], writer: (output) => { output.writeToken(PandocTokenType.HorizontalRule); } } } ], commands: (schema2) => { return [ new ProsemirrorCommand( EditorCommandId.HorizontalRule, [], insertNode(schema2.nodes.horizontal_rule, {}, true), hrOmniInsert(ui2) ) ]; }, inputRules: () => { return [ new InputRule(/^\*{3}$/, (state, _match, start, end) => { const schema2 = state.schema; const paraNode = findParentNodeOfType_1(schema2.nodes.paragraph)(state.selection); if (paraNode && state.selection.$anchor.depth === 2) { return state.tr.replaceRangeWith(start, end, schema2.nodes.horizontal_rule.create()); } else { return null; } }) ]; } }; }; function hrOmniInsert(ui2) { return { name: ui2.context.translateText("Horizontal Line"), keywords: ["hr", "rule"], description: ui2.context.translateText("Line that spans across the page"), group: OmniInsertGroup.Content, priority: 1, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.horizontal_rule_dark : ui2.images.omni_insert.horizontal_rule }; } const extension$M = { nodes: [ { name: "hard_break", spec: { inline: true, group: "inline", selectable: false, parseDOM: [{ tag: "br" }], toDOM() { return ["br"]; } }, pandoc: { readers: [ { token: PandocTokenType.LineBreak, node: "hard_break" } ], writer: (output) => { output.writeToken(PandocTokenType.LineBreak); } } } ], baseKeys: () => { return [ { key: BaseKey.ModEnter, command: hardBreakCommandFn() }, { key: BaseKey.ShiftEnter, command: hardBreakCommandFn() } ]; } }; function hardBreakCommandFn() { return (state, dispatch) => { const br = state.schema.nodes.hard_break; if (dispatch) { dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView()); } return true; }; } const nullStyles = ""; const extension$L = { nodes: [ { name: "null", spec: { group: "block", atom: true, selectable: false, parseDOM: [{ tag: "div[class*='null-block']" }], toDOM() { return ["div", { class: "null-block" }]; } }, pandoc: { readers: [ { token: PandocTokenType.Null, node: "null" } ], writer: (output) => { output.writeToken(PandocTokenType.Null); } } } ] }; const extension$K = { marks: [ { name: "em", spec: { group: "formatting", parseDOM: [ { tag: "i" }, { tag: "em" }, { style: "font-weight", getAttrs: (value) => value === "italic" && null } ], toDOM() { return ["em"]; } }, pandoc: { readers: [ { token: PandocTokenType.Emph, mark: "em" } ], writer: { priority: 4, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.Emph, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Em, ["Mod-i"], schema2.marks.em)]; }, inputRules: (schema2, filter) => { return [ delimiterMarkInputRule("\\*", schema2.marks.em, filter, "\\*-`", true), delimiterMarkInputRule("_", schema2.marks.em, filter, "\\w_`", true) ]; } }; const extension$J = { marks: [ { name: "strong", spec: { group: "formatting", parseDOM: [ { tag: "b", getAttrs: (value) => value.style.fontWeight !== "normal" && null }, { tag: "strong" }, { style: "font-weight", getAttrs: (value) => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null } ], toDOM() { return ["strong"]; } }, pandoc: { readers: [ { token: PandocTokenType.Strong, mark: "strong" } ], writer: { priority: 3, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.Strong, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Strong, ["Mod-b"], schema2.marks.strong)]; }, inputRules: (schema2, filter) => { return [ delimiterMarkInputRule("\\*\\*", schema2.marks.strong, filter, "`", true), delimiterMarkInputRule("__", schema2.marks.strong, filter, "\\w`", true) ]; } }; const extension$I = (context) => { const { pandocExtensions, ui: ui2, options } = context; const codeAttrs = pandocExtensions.inline_code_attributes; return { marks: [ { name: "code", noInputRules: true, noSpelling: true, spec: { group: "formatting", attrs: codeAttrs ? pandocAttrSpec : {}, parseDOM: [ { tag: "code", getAttrs(dom) { if (codeAttrs) { return pandocAttrParseDom(dom, {}); } else { return {}; } } } ], toDOM(mark) { const fontClass = "pm-code pm-fixedwidth-font pm-chunk-background-color pm-block-border-color"; const attrs = codeAttrs ? pandocAttrToDomAttr({ ...mark.attrs, classes: [...mark.attrs.classes, fontClass] }) : { class: fontClass }; return ["code", domAttrNoSpelling(attrs)]; } }, pandoc: { readers: [ { token: PandocTokenType.Code, mark: "code", getText: (tok) => tok.c[kCodeText], getAttrs: (tok) => { if (codeAttrs) { return pandocAttrReadAST(tok, kCodeAttr); } else { return {}; } } } ], writer: { priority: 0, write: (output, mark, parent) => { let code2 = ""; parent.forEach((node2) => code2 = code2 + node2.textContent); code2 = code2.trim(); if (code2.length > 0) { output.writeToken(PandocTokenType.Code, () => { if (codeAttrs) { output.writeAttr(mark.attrs.id, mark.attrs.classes, mark.attrs.keyvalue); } else { output.writeAttr(); } output.write(code2); }); } } } } } ], commands: (schema2) => { return [ new MarkCommand(EditorCommandId.Code, ["Mod-d"], schema2.marks.code), ...!options.defaultCellTypePython ? [new InsertInlinCodeCommand(ui2)] : [] ]; }, inputRules: (schema2, filter) => { return [delimiterMarkInputRule("`", schema2.marks.code, filter)]; } }; }; class InsertInlinCodeCommand extends ProsemirrorCommand { constructor(ui2) { super(EditorCommandId.InlineRCode, [], insertInlineRCode, inlineRCodeOmniInsert(ui2)); } } function insertInlineRCode(state, dispatch) { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.text) || !toggleMarkType(schema2.marks.code)(state)) { return false; } if (dispatch) { const tr = state.tr; const prevSel = tr.selection; const mark = schema2.marks.code.create(); const node2 = schema2.text("r ", [mark]); tr.insert(tr.selection.from, node2); setTextSelection_1(tr.mapping.map(prevSel.from), -1)(tr); dispatch(tr); } return true; } function inlineRCodeOmniInsert(ui2) { return { name: ui2.context.translateText("Inline R Code"), keywords: ["r"], description: ui2.context.translateText("R code within a line or paragraph"), group: OmniInsertGroup.Content, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.r_chunk_dark : ui2.images.omni_insert.r_chunk }; } const kShortcodePattern = "(?:^|[^`])({{([%<])\\s+.*?[%>]}})"; const kShortcodeRegEx = new RegExp(kShortcodePattern, "g"); function linkCommand(markType, onEditLink, capabilities) { return (state, dispatch, view) => { if (!state.selection.$from.node().type.allowsMarkType(markType)) { return false; } async function asyncEditLink() { if (dispatch) { const targets = await linkTargets(state.doc); const range2 = getSelectionMarkRange(state.selection, markType); let link2 = {}; if (state.selection instanceof TextSelection) { link2.text = state.doc.textBetween(range2.from, range2.to); capabilities.text = true; } else { capabilities.text = false; } if (markIsActive(state, markType)) { link2 = { ...link2, ...getMarkAttrs(state.doc, range2, markType) }; } else { if (link2.text && link2.text.match(/^https?:\/\/.*$/)) { link2.href = link2.text; } } if (link2.heading) { link2.type = LinkType.Heading; } else if (link2.href && link2.href.startsWith("#")) { link2.type = LinkType.ID; } else { link2.type = LinkType.URL; } link2.text = link2.text || ""; link2.href = link2.href || ""; const result = await onEditLink({ ...link2 }, targets, capabilities); if (result) { const tr = state.tr; tr.removeMark(range2.from, range2.to, markType); if (result.action === "edit") { const mark = markType.create(result.link); if (capabilities.text && link2.text !== result.link.text) { const node2 = markType.schema.text(result.link.text, [mark]); if (link2.href) { tr.replaceRangeWith(range2.from, range2.to, node2); } else { tr.replaceSelectionWith(node2, false); } } else { tr.addMark(range2.from, range2.to, mark); } if (result.link.type === LinkType.Heading) { const heading = findChildren_1( tr.doc, (node2) => node2.type === state.schema.nodes.heading && equalsIgnoreCase(node2.textContent, result.link.heading || "") ); if (heading.length > 0) { tr.setNodeMarkup(heading[0].pos, state.schema.nodes.heading, { ...heading[0].node.attrs, link: result.link.heading }); } } } dispatch(tr); } if (view) { view.focus(); } } } asyncEditLink(); return true; }; } function linkOmniInsert(ui2) { return { name: ui2.context.translateText("Link..."), description: ui2.context.translateText("Link to another location"), group: OmniInsertGroup.Content, priority: 8, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.link_dark : ui2.images.omni_insert.link }; } function removeLinkCommand(markType) { return (state, dispatch) => { const range2 = getMarkRange(state.selection.$from, markType); if (!range2) { return false; } if (dispatch) { const tr = state.tr; tr.removeMark(range2.from, range2.to, markType); dispatch(tr); } return true; }; } function linkInputRules(autoLink) { return (schema2, filter) => { const rules = [ markInputRule(/(?:(?:^|[^`])<)(https?:\/\/[^>]+)(?:>)$/, schema2.marks.link, filter, (match2) => ({ href: match2[1] })), new InputRule(/(?:\[)([^\]]+)(?:\]\()([^)]+)(?:\))$/, (state, match2, start, end) => { if (!filter(state, start, end)) { return null; } const textIndex = match2[0].indexOf(match2[1]); const prefix2 = match2[0].substring(0, textIndex).replace(/^\s/, ""); const delimStart = start + textIndex - prefix2.length; const tr = state.tr; tr.delete(delimStart, delimStart + prefix2.length); const attrs = { href: match2[2] }; const mark = schema2.marks.link.create(attrs); const markStart = start + textIndex - prefix2.length; tr.addMark(markStart, markStart + match2[1].length, mark); tr.removeStoredMark(mark); const remainStart = markStart + match2[1].length; tr.delete(remainStart, end); setTextSelection_1(remainStart)(tr); return tr; }) ]; if (autoLink) { rules.push( new InputRule( /(^|[^`])(https?:\/\/[^\s]+\w)[.?!,)]* $/, (state, match2, start, end) => { const tr = state.tr; start = start + match2[1].length; const linkEnd = start + match2[2].length; tr.addMark(start, linkEnd, schema2.marks.link.create({ href: match2[2] })); tr.removeStoredMark(schema2.marks.link); tr.insertText(" "); setTextSelection_1(end + 1)(tr); return tr; } ) ); } return rules; }; } function linkHeadingsPostprocessor(doc2) { const schema2 = doc2.type.schema; const headings = findChildrenByType_1(doc2, schema2.nodes.heading); findChildrenByMark_1(doc2, schema2.marks.link).forEach((link2) => { const markRange = getMarkRange(doc2.resolve(link2.pos), schema2.marks.link); if (markRange) { const attrs = getMarkAttrs(doc2, markRange, schema2.marks.link); const linkText = doc2.textBetween(markRange.from, markRange.to); const matchedHeading = headings.find((heading) => { return equalsIgnoreCase(heading.node.textContent, linkText) && !attrs.title && attrs.href === "#"; }); if (matchedHeading) { doc2.nodesBetween(markRange.from, markRange.to, (node2) => { const linkMark = node2.marks.find((m2) => m2.type === schema2.marks.link); if (linkMark) { linkMark.attrs.heading = matchedHeading.node.textContent; } }); matchedHeading.node.attrs.link = linkText; } } }); return doc2; } function syncHeadingLinksAppendTransaction() { return { name: "sync-heading-links", nodeFilter: (node2) => node2.type === node2.type.schema.nodes.heading || !!node2.type.schema.marks.link.isInSet(node2.marks), append: (tr) => { const schema2 = tr.doc.type.schema; const links = findChildrenByMark_1(tr.doc, schema2.marks.link); links.forEach((link2) => { const linkPos = tr.mapping.map(link2.pos); const range2 = getMarkRange(tr.doc.resolve(linkPos), schema2.marks.link); if (range2) { const attrs = getMarkAttrs(tr.doc, range2, schema2.marks.link); const linkText = tr.doc.textBetween(range2.from, range2.to); if (attrs.heading && !equalsIgnoreCase(attrs.heading, linkText)) { tr.removeMark(range2.from, range2.to, schema2.marks.link); tr.addMark(range2.from, range2.to, schema2.marks.link.create({ ...attrs, heading: linkText })); } } }); findChildrenByType_1(tr.doc, schema2.nodes.heading).forEach((heading) => { const headingPos = tr.mapping.map(heading.pos); const headingText = heading.node.textContent; const headingLink = heading.node.attrs.link; if (headingLink && !equalsIgnoreCase(headingLink, headingText) && headingText.length > 0) { tr.setNodeMarkup(headingPos, schema2.nodes.heading, { ...heading.node.attrs, link: headingText }); findChildrenByMark_1(tr.doc, schema2.marks.link).forEach((link2) => { const linkPos = tr.mapping.map(link2.pos); const range2 = getMarkRange(tr.doc.resolve(linkPos), schema2.marks.link); if (range2) { const attrs = getMarkAttrs(tr.doc, range2, schema2.marks.link); if (equalsIgnoreCase(attrs.heading, headingLink)) { tr.insertText(headingText, range2.from, range2.to); tr.addMark( range2.from, range2.from + headingText.length, schema2.marks.link.create({ ...attrs, heading: headingText }) ); } } }); } }); } }; } var clipboard = { exports: {} }; /*! * clipboard.js v2.0.11 * https://clipboardjs.com/ * * Licensed MIT © Zeno Rocha */ (function(module3, exports2) { (function webpackUniversalModuleDefinition(root2, factory) { module3.exports = factory(); })(commonjsGlobal, function() { return function() { var __webpack_modules__ = { 686: function(__unused_webpack_module, __webpack_exports__, __webpack_require__2) { __webpack_require__2.d(__webpack_exports__, { "default": function() { return clipboard2; } }); var tiny_emitter = __webpack_require__2(279); var tiny_emitter_default = /* @__PURE__ */ __webpack_require__2.n(tiny_emitter); var listen = __webpack_require__2(370); var listen_default = /* @__PURE__ */ __webpack_require__2.n(listen); var src_select = __webpack_require__2(817); var select_default = /* @__PURE__ */ __webpack_require__2.n(src_select); function command(type2) { try { return document.execCommand(type2); } catch (err) { return false; } } var ClipboardActionCut = function ClipboardActionCut2(target2) { var selectedText = select_default()(target2); command("cut"); return selectedText; }; var actions_cut = ClipboardActionCut; function createFakeElement(value) { var isRTL = document.documentElement.getAttribute("dir") === "rtl"; var fakeElement = document.createElement("textarea"); fakeElement.style.fontSize = "12pt"; fakeElement.style.border = "0"; fakeElement.style.padding = "0"; fakeElement.style.margin = "0"; fakeElement.style.position = "absolute"; fakeElement.style[isRTL ? "right" : "left"] = "-9999px"; var yPosition = window.pageYOffset || document.documentElement.scrollTop; fakeElement.style.top = "".concat(yPosition, "px"); fakeElement.setAttribute("readonly", ""); fakeElement.value = value; return fakeElement; } var fakeCopyAction = function fakeCopyAction2(value, options) { var fakeElement = createFakeElement(value); options.container.appendChild(fakeElement); var selectedText = select_default()(fakeElement); command("copy"); fakeElement.remove(); return selectedText; }; var ClipboardActionCopy = function ClipboardActionCopy2(target2) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { container: document.body }; var selectedText = ""; if (typeof target2 === "string") { selectedText = fakeCopyAction(target2, options); } else if (target2 instanceof HTMLInputElement && !["text", "search", "url", "tel", "password"].includes(target2 === null || target2 === void 0 ? void 0 : target2.type)) { selectedText = fakeCopyAction(target2.value, options); } else { selectedText = select_default()(target2); command("copy"); } return selectedText; }; var actions_copy = ClipboardActionCopy; function _typeof4(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof4 = function _typeof5(obj2) { return typeof obj2; }; } else { _typeof4 = function _typeof5(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof4(obj); } var ClipboardActionDefault = function ClipboardActionDefault2() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var _options$action = options.action, action = _options$action === void 0 ? "copy" : _options$action, container = options.container, target2 = options.target, text2 = options.text; if (action !== "copy" && action !== "cut") { throw new Error('Invalid "action" value, use either "copy" or "cut"'); } if (target2 !== void 0) { if (target2 && _typeof4(target2) === "object" && target2.nodeType === 1) { if (action === "copy" && target2.hasAttribute("disabled")) { throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); } if (action === "cut" && (target2.hasAttribute("readonly") || target2.hasAttribute("disabled"))) { throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`); } } else { throw new Error('Invalid "target" value, use a valid Element'); } } if (text2) { return actions_copy(text2, { container }); } if (target2) { return action === "cut" ? actions_cut(target2) : actions_copy(target2, { container }); } }; var actions_default = ClipboardActionDefault; function clipboard_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { clipboard_typeof = function _typeof5(obj2) { return typeof obj2; }; } else { clipboard_typeof = function _typeof5(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return clipboard_typeof(obj); } function _classCallCheck2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties2(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass2(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties2(Constructor.prototype, protoProps); if (staticProps) _defineProperties2(Constructor, staticProps); return Constructor; } function _inherits2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf3(subClass, superClass); } function _setPrototypeOf3(o2, p2) { _setPrototypeOf3 = Object.setPrototypeOf || function _setPrototypeOf4(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf3(o2, p2); } function _createSuper2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct2(); return function _createSuperInternal() { var Super = _getPrototypeOf2(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf2(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn2(this, result); }; } function _possibleConstructorReturn2(self2, call) { if (call && (clipboard_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized2(self2); } function _assertThisInitialized2(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _isNativeReflectConstruct2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function() { })); return true; } catch (e2) { return false; } } function _getPrototypeOf2(o2) { _getPrototypeOf2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf3(o3) { return o3.__proto__ || Object.getPrototypeOf(o3); }; return _getPrototypeOf2(o2); } function getAttributeValue(suffix, element) { var attribute = "data-clipboard-".concat(suffix); if (!element.hasAttribute(attribute)) { return; } return element.getAttribute(attribute); } var Clipboard = /* @__PURE__ */ function(_Emitter) { _inherits2(Clipboard2, _Emitter); var _super = _createSuper2(Clipboard2); function Clipboard2(trigger, options) { var _this; _classCallCheck2(this, Clipboard2); _this = _super.call(this); _this.resolveOptions(options); _this.listenClick(trigger); return _this; } _createClass2(Clipboard2, [{ key: "resolveOptions", value: function resolveOptions() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; this.action = typeof options.action === "function" ? options.action : this.defaultAction; this.target = typeof options.target === "function" ? options.target : this.defaultTarget; this.text = typeof options.text === "function" ? options.text : this.defaultText; this.container = clipboard_typeof(options.container) === "object" ? options.container : document.body; } }, { key: "listenClick", value: function listenClick(trigger) { var _this2 = this; this.listener = listen_default()(trigger, "click", function(e2) { return _this2.onClick(e2); }); } }, { key: "onClick", value: function onClick(e2) { var trigger = e2.delegateTarget || e2.currentTarget; var action = this.action(trigger) || "copy"; var text2 = actions_default({ action, container: this.container, target: this.target(trigger), text: this.text(trigger) }); this.emit(text2 ? "success" : "error", { action, text: text2, trigger, clearSelection: function clearSelection() { if (trigger) { trigger.focus(); } window.getSelection().removeAllRanges(); } }); } }, { key: "defaultAction", value: function defaultAction(trigger) { return getAttributeValue("action", trigger); } }, { key: "defaultTarget", value: function defaultTarget(trigger) { var selector = getAttributeValue("target", trigger); if (selector) { return document.querySelector(selector); } } }, { key: "defaultText", value: function defaultText(trigger) { return getAttributeValue("text", trigger); } }, { key: "destroy", value: function destroy() { this.listener.destroy(); } }], [{ key: "copy", value: function copy2(target2) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { container: document.body }; return actions_copy(target2, options); } }, { key: "cut", value: function cut(target2) { return actions_cut(target2); } }, { key: "isSupported", value: function isSupported() { var action = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ["copy", "cut"]; var actions = typeof action === "string" ? [action] : action; var support = !!document.queryCommandSupported; actions.forEach(function(action2) { support = support && !!document.queryCommandSupported(action2); }); return support; } }]); return Clipboard2; }(tiny_emitter_default()); var clipboard2 = Clipboard; }, 828: function(module4) { var DOCUMENT_NODE_TYPE = 9; if (typeof Element !== "undefined" && !Element.prototype.matches) { var proto2 = Element.prototype; proto2.matches = proto2.matchesSelector || proto2.mozMatchesSelector || proto2.msMatchesSelector || proto2.oMatchesSelector || proto2.webkitMatchesSelector; } function closest(element, selector) { while (element && element.nodeType !== DOCUMENT_NODE_TYPE) { if (typeof element.matches === "function" && element.matches(selector)) { return element; } element = element.parentNode; } } module4.exports = closest; }, 438: function(module4, __unused_webpack_exports, __webpack_require__2) { var closest = __webpack_require__2(828); function _delegate(element, selector, type2, callback, useCapture) { var listenerFn = listener.apply(this, arguments); element.addEventListener(type2, listenerFn, useCapture); return { destroy: function() { element.removeEventListener(type2, listenerFn, useCapture); } }; } function delegate(elements, selector, type2, callback, useCapture) { if (typeof elements.addEventListener === "function") { return _delegate.apply(null, arguments); } if (typeof type2 === "function") { return _delegate.bind(null, document).apply(null, arguments); } if (typeof elements === "string") { elements = document.querySelectorAll(elements); } return Array.prototype.map.call(elements, function(element) { return _delegate(element, selector, type2, callback, useCapture); }); } function listener(element, selector, type2, callback) { return function(e2) { e2.delegateTarget = closest(e2.target, selector); if (e2.delegateTarget) { callback.call(element, e2); } }; } module4.exports = delegate; }, 879: function(__unused_webpack_module, exports3) { exports3.node = function(value) { return value !== void 0 && value instanceof HTMLElement && value.nodeType === 1; }; exports3.nodeList = function(value) { var type2 = Object.prototype.toString.call(value); return value !== void 0 && (type2 === "[object NodeList]" || type2 === "[object HTMLCollection]") && "length" in value && (value.length === 0 || exports3.node(value[0])); }; exports3.string = function(value) { return typeof value === "string" || value instanceof String; }; exports3.fn = function(value) { var type2 = Object.prototype.toString.call(value); return type2 === "[object Function]"; }; }, 370: function(module4, __unused_webpack_exports, __webpack_require__2) { var is = __webpack_require__2(879); var delegate = __webpack_require__2(438); function listen(target2, type2, callback) { if (!target2 && !type2 && !callback) { throw new Error("Missing required arguments"); } if (!is.string(type2)) { throw new TypeError("Second argument must be a String"); } if (!is.fn(callback)) { throw new TypeError("Third argument must be a Function"); } if (is.node(target2)) { return listenNode(target2, type2, callback); } else if (is.nodeList(target2)) { return listenNodeList(target2, type2, callback); } else if (is.string(target2)) { return listenSelector(target2, type2, callback); } else { throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList"); } } function listenNode(node2, type2, callback) { node2.addEventListener(type2, callback); return { destroy: function() { node2.removeEventListener(type2, callback); } }; } function listenNodeList(nodeList, type2, callback) { Array.prototype.forEach.call(nodeList, function(node2) { node2.addEventListener(type2, callback); }); return { destroy: function() { Array.prototype.forEach.call(nodeList, function(node2) { node2.removeEventListener(type2, callback); }); } }; } function listenSelector(selector, type2, callback) { return delegate(document.body, selector, type2, callback); } module4.exports = listen; }, 817: function(module4) { function select2(element) { var selectedText; if (element.nodeName === "SELECT") { element.focus(); selectedText = element.value; } else if (element.nodeName === "INPUT" || element.nodeName === "TEXTAREA") { var isReadOnly = element.hasAttribute("readonly"); if (!isReadOnly) { element.setAttribute("readonly", ""); } element.select(); element.setSelectionRange(0, element.value.length); if (!isReadOnly) { element.removeAttribute("readonly"); } selectedText = element.value; } else { if (element.hasAttribute("contenteditable")) { element.focus(); } var selection = window.getSelection(); var range2 = document.createRange(); range2.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range2); selectedText = selection.toString(); } return selectedText; } module4.exports = select2; }, 279: function(module4) { function E2() { } E2.prototype = { on: function(name, callback, ctx2) { var e2 = this.e || (this.e = {}); (e2[name] || (e2[name] = [])).push({ fn: callback, ctx: ctx2 }); return this; }, once: function(name, callback, ctx2) { var self2 = this; function listener() { self2.off(name, listener); callback.apply(ctx2, arguments); } listener._ = callback; return this.on(name, listener, ctx2); }, emit: function(name) { var data = [].slice.call(arguments, 1); var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); var i2 = 0; var len = evtArr.length; for (i2; i2 < len; i2++) { evtArr[i2].fn.apply(evtArr[i2].ctx, data); } return this; }, off: function(name, callback) { var e2 = this.e || (this.e = {}); var evts = e2[name]; var liveEvents = []; if (evts && callback) { for (var i2 = 0, len = evts.length; i2 < len; i2++) { if (evts[i2].fn !== callback && evts[i2].fn._ !== callback) liveEvents.push(evts[i2]); } } liveEvents.length ? e2[name] = liveEvents : delete e2[name]; return this; } }; module4.exports = E2; module4.exports.TinyEmitter = E2; } }; var __webpack_module_cache__ = {}; function __webpack_require__(moduleId) { if (__webpack_module_cache__[moduleId]) { return __webpack_module_cache__[moduleId].exports; } var module4 = __webpack_module_cache__[moduleId] = { exports: {} }; __webpack_modules__[moduleId](module4, module4.exports, __webpack_require__); return module4.exports; } !function() { __webpack_require__.n = function(module4) { var getter = module4 && module4.__esModule ? function() { return module4["default"]; } : function() { return module4; }; __webpack_require__.d(getter, { a: getter }); return getter; }; }(); !function() { __webpack_require__.d = function(exports3, definition) { for (var key2 in definition) { if (__webpack_require__.o(definition, key2) && !__webpack_require__.o(exports3, key2)) { Object.defineProperty(exports3, key2, { enumerable: true, get: definition[key2] }); } } }; }(); !function() { __webpack_require__.o = function(obj, prop2) { return Object.prototype.hasOwnProperty.call(obj, prop2); }; }(); return __webpack_require__(686); }().default; }); })(clipboard); const ClipboardJS = /* @__PURE__ */ getDefaultExportFromCjs(clipboard.exports); var tlite$1 = { exports: {} }; (function(module3) { function tlite2(getTooltipOpts) { document.addEventListener("mouseover", function(e2) { var el2 = e2.target; var opts2 = getTooltipOpts(el2); if (!opts2) { el2 = el2.parentElement; opts2 = el2 && getTooltipOpts(el2); } opts2 && tlite2.show(el2, opts2, true); }); } tlite2.show = function(el2, opts2, isAuto) { var fallbackAttrib = "data-tlite"; opts2 = opts2 || {}; (el2.tooltip || Tooltip(el2, opts2)).show(); function Tooltip(el3, opts3) { var tooltipEl; var showTimer; var text2; el3.addEventListener("mousedown", autoHide); el3.addEventListener("mouseleave", autoHide); function show() { text2 = el3.title || el3.getAttribute(fallbackAttrib) || text2; el3.title = ""; el3.setAttribute(fallbackAttrib, ""); text2 && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1)); } function autoHide() { tlite2.hide(el3, true); } function hide2(isAutoHiding) { if (isAuto === isAutoHiding) { showTimer = clearTimeout(showTimer); var parent = tooltipEl && tooltipEl.parentNode; parent && parent.removeChild(tooltipEl); tooltipEl = void 0; } } function fadeIn() { if (!tooltipEl) { tooltipEl = createTooltip(el3, text2, opts3); } } return el3.tooltip = { show, hide: hide2 }; } function createTooltip(el3, text2, opts3) { var tooltipEl = document.createElement("span"); var grav = opts3.grav || el3.getAttribute("data-tlite") || "n"; tooltipEl.innerHTML = text2; el3.appendChild(tooltipEl); var vertGrav = grav[0] || ""; var horzGrav = grav[1] || ""; function positionTooltip() { tooltipEl.className = "tlite tlite-" + vertGrav + horzGrav; var arrowSize = 10; var top2 = el3.offsetTop; var left = el3.offsetLeft; if (tooltipEl.offsetParent === el3) { top2 = left = 0; } var width = el3.offsetWidth; var height = el3.offsetHeight; var tooltipHeight = tooltipEl.offsetHeight; var tooltipWidth = tooltipEl.offsetWidth; var centerEl = left + width / 2; tooltipEl.style.top = (vertGrav === "s" ? top2 - tooltipHeight - arrowSize : vertGrav === "n" ? top2 + height + arrowSize : top2 + height / 2 - tooltipHeight / 2) + "px"; tooltipEl.style.left = (horzGrav === "w" ? left : horzGrav === "e" ? left + width - tooltipWidth : vertGrav === "w" ? left + width + arrowSize : vertGrav === "e" ? left - tooltipWidth - arrowSize : centerEl - tooltipWidth / 2) + "px"; } positionTooltip(); var rect2 = tooltipEl.getBoundingClientRect(); if (vertGrav === "s" && rect2.top < 0) { vertGrav = "n"; positionTooltip(); } else if (vertGrav === "n" && rect2.bottom > window.innerHeight) { vertGrav = "s"; positionTooltip(); } else if (vertGrav === "e" && rect2.left < 0) { vertGrav = "w"; positionTooltip(); } else if (vertGrav === "w" && rect2.right > window.innerWidth) { vertGrav = "e"; positionTooltip(); } tooltipEl.className += " tlite-visible"; return tooltipEl; } }; tlite2.hide = function(el2, isAuto) { el2.tooltip && el2.tooltip.hide(isAuto); }; if (module3.exports) { module3.exports = tlite2; } })(tlite$1); const tlite = tlite$1.exports; const tooltip = ""; function showTooltip(el2, text2, grav = "n", timeout = 2e3) { el2.setAttribute("title", ""); el2.setAttribute("data-tlite", text2); tlite.show(el2, { grav }); setTimeout(() => tlite.hide(el2), timeout); } const LinkButton = (props) => { const className = ["pm-link", "pm-link-text-color"].concat(props.classes || []).join(" "); const style = { ...props.style, maxWidth: props.maxWidth }; const onClick = (e2) => { e2.preventDefault(); props.onClick(); }; const onKeyDown = (e2) => { if (e2.keyCode === 32) { e2.preventDefault(); props.onClick(); } }; return /* @__PURE__ */ React.createElement( "a", { href: "#0", tabIndex: 0, onClick, onKeyDown, title: props.title || props.text, className, style }, props.text ); }; const ImageButton = React.forwardRef((props, ref) => { const className = ["pm-image-button"].concat(props.classes || []).join(" "); const onClick = (e2) => { if (props.onClick) { e2.preventDefault(); props.onClick(); } }; return /* @__PURE__ */ React.createElement( "button", { onClick, title: props.title, className, style: props.style, ref, tabIndex: props.tabIndex }, /* @__PURE__ */ React.createElement("img", { src: props.image, alt: props.title, draggable: "false" }) ); }); const TextButton = React.forwardRef((props, ref) => { var _a; const className = (_a = props.classes) == null ? void 0 : _a.join(" "); const onClick = (e2) => { if (props.onClick) { e2.preventDefault(); props.onClick(); } }; return /* @__PURE__ */ React.createElement( "button", { onClick, type: "button", className, style: props.style, ref, tabIndex: props.tabIndex, disabled: props.disabled }, props.title ); }); const OutlineButton = React.forwardRef( (props, ref) => { const className = ["pm-outline-button", "pm-input-button", "pm-input-outline-button"].concat(props.classes || []).join(" "); return /* @__PURE__ */ React.createElement( "button", { onClick: props.onClick, type: "button", className, style: props.style, ref, tabIndex: props.tabIndex }, props.title ); } ); function reactRenderForEditorView(element, container, view) { const root2 = createRoot(container); root2.render(element); const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { mutation.removedNodes.forEach((node2) => { if (node2 === container) { observer.disconnect(); root2.unmount(); } }); }); }); observer.observe(view.dom, { attributes: false, childList: true, subtree: true }); } function textRangePopupDecorationPosition(view, range2, maxWidth) { const rangeCoords = view.coordsAtPos(range2.from + 1); const rangePos = view.state.doc.resolve(range2.from); const editingNode = editingRootNodeClosestToPos(rangePos); const editingEl = view.domAtPos(editingNode.pos + 1).node; const editingBox = editingEl.getBoundingClientRect(); const editingBoxStyle = window.getComputedStyle(editingEl); const topPadding = parseInt(editingBoxStyle.paddingTop, 10) || 0; const popupStyle = { top: rangeCoords.bottom - editingBox.top - topPadding + 5 + kPixelUnit }; let style; const positionRight = rangeCoords.left + maxWidth > editingBox.right; if (positionRight) { const rightCoords = view.coordsAtPos(range2.to); const rightPos = rangeCoords.top === rightCoords.top ? editingBox.right - rightCoords.right : 0; style = { ...popupStyle, right: rightPos + kPixelUnit }; } else { const marginLeft = "calc(" + (rangeCoords.left - editingBox.left) + "px - " + editingBoxStyle.borderLeftWidth + " - " + editingBoxStyle.paddingLeft + " - " + editingBoxStyle.marginLeft + " - 1ch)"; style = { ...popupStyle, marginLeft }; } const key2 = Object.keys(style).map((attrib) => `${attrib}=${style[attrib]}`).join(";"); return { pos: editingNode.pos + editingNode.node.nodeSize - 1, style, key: key2 }; } function textPopupDecorationPlugin(deco) { const { key: key2, markType, maxWidth, createPopup: createPopup2, specKey, dismissOnEdit, makeLinksAccessible, filter, onCmdClick } = deco; let editorView; return new Plugin({ key: key2, view(view) { editorView = view; return {}; }, state: { init: () => { return DecorationSet.empty; }, apply: (tr, _old, _oldState, newState) => { if (tr.getMeta(kRestoreLocationTransaction) || tr.getMeta(kNavigationTransaction)) { return DecorationSet.empty; } if (dismissOnEdit && tr.docChanged) { return DecorationSet.empty; } const selection = newState.selection; const range2 = getMarkRange(selection.$from, markType); if (range2) { if (selection.from < range2.from || selection.to > range2.to) { return DecorationSet.empty; } if (filter && !filter(selection)) { return DecorationSet.empty; } if (selection.empty && range2.from === selection.from) { return DecorationSet.empty; } const attrs = getMarkAttrs(newState.doc, range2, markType); const text2 = newState.doc.textBetween(range2.from, range2.to); const target2 = { attrs, text: text2 }; const decorationPosition = textRangePopupDecorationPosition(editorView, range2, maxWidth); let decoratorSpec; if (specKey) { decoratorSpec = { key: decorationPosition.key + specKey(target2), ignoreSelection: true, stopEvent: () => { return true; } }; } const textPopupDecorator = Decoration.widget( decorationPosition.pos, (view) => { const decorationEl = window.document.createElement("div"); decorationEl.style.visibility = "hidden"; createPopup2(view, target2, decorationPosition.style).then((popup) => { if (popup) { reactRenderForEditorView(popup, decorationEl, view); if (makeLinksAccessible) { const links = decorationEl.getElementsByTagName("a"); for (let i2 = 0; i2 < links.length; i2++) { const link2 = links[0]; link2.onkeydown = (e2) => { if (e2.keyCode === 32) { e2.preventDefault(); link2.click(); } }; } } decorationEl.style.visibility = "visible"; } }); return decorationEl; }, decoratorSpec ); return DecorationSet.create(tr.doc, [textPopupDecorator]); } else { return DecorationSet.empty; } } }, props: { decorations: (state) => { return key2.getState(state); }, handleClick: onCmdClick ? (view, pos, event) => { const keyPressed = kPlatformMac && event.metaKey; if (keyPressed) { const attrs = getMarkAttrs(view.state.doc, { from: pos, to: pos }, markType); const range2 = getMarkRange(view.state.doc.resolve(pos)); if (attrs && range2) { event.stopPropagation(); event.preventDefault(); const text2 = view.state.doc.textBetween(range2.from, range2.to); onCmdClick({ attrs, text: text2 }); return true; } } return false; } : void 0 } }); } function isHttpURL(url2) { try { const urlObject = new URL(url2); return urlObject.protocol === "http:" || urlObject.protocol === "https:"; } catch (_2) { return false; } } function linkPopupPlugin(schema2, ui2, nav2, linkCmd, removeLinkCmd) { const kPopupChromeWidth = 70; const kMaxLinkWidth = 300; const maxWidth = kMaxLinkWidth + kPopupChromeWidth; return textPopupDecorationPlugin({ key: new PluginKey("link-popup"), markType: schema2.marks.link, maxWidth, createPopup: (view, target2, style) => { return Promise.resolve( /* @__PURE__ */ react.exports.createElement( LinkPopup, { link: target2.attrs, maxLinkWidth: kMaxLinkWidth - 10, linkCmd, removeLinkCmd, view, ui: ui2, nav: nav2, style } ) ); }, specKey: (target2) => { const linkText = target2.attrs.heading ? target2.attrs.heading : target2.attrs.href; return `link:${linkText}`; }, filter: (selection) => { return !selectionIsImageNode(schema2, selection); }, onCmdClick: (target2) => { ui2.display.openURL(target2.attrs.href); } }); } const LinkPopup = (props) => { const linkText = props.link.heading ? props.link.heading : props.link.href; const onLinkClicked = () => { props.view.focus(); if (props.link.heading) { props.nav.navigate(NavigationType.Heading, props.link.heading); } else if (props.link.href.startsWith("#")) { props.nav.navigate(NavigationType.Href, props.link.href.substr(1)); } else if (isHttpURL(props.link.href)) { props.ui.display.openURL(props.link.href); } else { props.ui.display.navigateToFile(props.link.href); } }; const showCopyButton = !props.link.heading && ClipboardJS.isSupported(); let clipboard2; const setCopyButton = (button) => { if (button) { clipboard2 = new ClipboardJS(button, { text: () => linkText }); clipboard2.on("success", () => { showTooltip(button, props.ui.context.translateText("Copied to Clipboard"), "s"); }); } else { if (clipboard2) { clipboard2.destroy(); } } }; const onRemoveClicked = () => { window.setTimeout(() => { props.removeLinkCmd(props.view.state, props.view.dispatch, props.view); props.view.focus(); }, 0); }; const onEditClicked = () => { props.linkCmd(props.view.state, props.view.dispatch, props.view); }; return /* @__PURE__ */ react.exports.createElement(Popup, { classes: ["pm-popup-link"], style: props.style }, /* @__PURE__ */ react.exports.createElement(LinkButton, { text: linkText, onClick: onLinkClicked, maxWidth: props.maxLinkWidth }), showCopyButton ? /* @__PURE__ */ react.exports.createElement( ImageButton, { image: props.ui.images.copy, classes: ["pm-image-button-copy-link"], title: props.ui.context.translateText("Copy Link to Clipboard"), ref: setCopyButton } ) : null, /* @__PURE__ */ react.exports.createElement( ImageButton, { image: props.ui.images.removelink, classes: ["pm-image-button-remove-link"], title: props.ui.context.translateText("Remove Link"), onClick: onRemoveClicked } ), /* @__PURE__ */ react.exports.createElement( ImageButton, { image: props.ui.images.properties, classes: ["pm-image-button-edit-properties"], title: props.ui.context.translateText("Edit Attributes"), onClick: onEditClicked } )); }; const linkStyles = ""; const extension$H = (context) => { const { pandocExtensions, ui: ui2, navigation } = context; const capabilities = { headings: hasShortcutHeadingLinks(pandocExtensions), attributes: pandocExtensions.link_attributes, text: true }; const linkAttr = pandocExtensions.link_attributes; const autoLink = pandocExtensions.autolink_bare_uris; const citations = pandocExtensions.citations; const excludes = citations ? { excludes: "cite_id" } : {}; return { marks: [ { name: "link", spec: { attrs: { href: {}, heading: { default: null }, title: { default: null }, ...linkAttr ? pandocAttrSpec : {}, clipboard: { default: false } }, inclusive: false, ...excludes, parseDOM: [ { tag: "a[href]", getAttrs(dom) { const el2 = dom; const attrs = { href: el2.getAttribute("href"), title: el2.getAttribute("title"), heading: el2.getAttribute("data-heading") }; return { ...attrs, ...linkAttr ? pandocAttrParseDom(el2, attrs) : {} }; } } ], toDOM(mark) { const linkClasses = "pm-link pm-link-text-color"; let extraAttr = {}; if (linkAttr) { extraAttr = pandocAttrToDomAttr({ ...mark.attrs, classes: [...mark.attrs.classes, linkClasses] }); } else { extraAttr = { class: linkClasses }; } return [ "a", { href: mark.attrs.clipboard ? mark.attrs.href : "#0", title: mark.attrs.title, "data-heading": mark.attrs.heading, ...extraAttr } ]; } }, pandoc: { readers: [ { token: PandocTokenType.Link, mark: "link", getAttrs: (tok) => { const target2 = tok.c[kLinkTarget]; let href = target2[kLinkTargetUrl]; const decodedRef = tryDecodeUri(href); if (decodedRef.match(kShortcodePattern)) { href = decodedRef; } return { href, title: target2[kLinkTargetTitle] || null, ...linkAttr ? pandocAttrReadAST(tok, kLinkAttr) : {} }; }, getChildren: (tok) => { const children = tok.c[kLinkChildren]; if (children.length > 0) { return children; } else { return [{ t: PandocTokenType.Space }]; } }, postprocessor: hasShortcutHeadingLinks(pandocExtensions) ? linkHeadingsPostprocessor : void 0 } ], writer: { priority: 11, write: (output, mark, parent) => { if (mark.attrs.heading) { output.writeRawMarkdown("["); output.writeInlines(parent); output.writeRawMarkdown("]"); } else { output.writeLink( mark.attrs.href, mark.attrs.title, linkAttr ? mark.attrs : null, () => { output.writeInlines(parent); } ); } } } } } ], commands: (schema2) => { return [ new ProsemirrorCommand( EditorCommandId.Link, ["Mod-k"], linkCommand(schema2.marks.link, ui2.dialogs.editLink, capabilities), linkOmniInsert(ui2) ), new ProsemirrorCommand(EditorCommandId.RemoveLink, [], removeLinkCommand(schema2.marks.link)) ]; }, inputRules: linkInputRules(autoLink), appendTransaction: () => pandocExtensions.implicit_header_references ? [syncHeadingLinksAppendTransaction()] : [], plugins: (schema2) => { const plugins = [ linkPopupPlugin( schema2, ui2, navigation, linkCommand(schema2.marks.link, ui2.dialogs.editLink, capabilities), removeLinkCommand(schema2.marks.link) ) ]; if (autoLink) { plugins.push( new Plugin({ key: new PluginKey("link-auto"), props: { transformPasted: linkPasteHandler(schema2) } }) ); } return plugins; } }; }; var GOOD_LEAF_SIZE = 200; var RopeSequence = function RopeSequence2() { }; RopeSequence.prototype.append = function append2(other) { if (!other.length) { return this; } other = RopeSequence.from(other); return !this.length && other || other.length < GOOD_LEAF_SIZE && this.leafAppend(other) || this.length < GOOD_LEAF_SIZE && other.leafPrepend(this) || this.appendInner(other); }; RopeSequence.prototype.prepend = function prepend(other) { if (!other.length) { return this; } return RopeSequence.from(other).append(this); }; RopeSequence.prototype.appendInner = function appendInner(other) { return new Append(this, other); }; RopeSequence.prototype.slice = function slice2(from2, to) { if (from2 === void 0) from2 = 0; if (to === void 0) to = this.length; if (from2 >= to) { return RopeSequence.empty; } return this.sliceInner(Math.max(0, from2), Math.min(this.length, to)); }; RopeSequence.prototype.get = function get2(i2) { if (i2 < 0 || i2 >= this.length) { return void 0; } return this.getInner(i2); }; RopeSequence.prototype.forEach = function forEach(f2, from2, to) { if (from2 === void 0) from2 = 0; if (to === void 0) to = this.length; if (from2 <= to) { this.forEachInner(f2, from2, to, 0); } else { this.forEachInvertedInner(f2, from2, to, 0); } }; RopeSequence.prototype.map = function map2(f2, from2, to) { if (from2 === void 0) from2 = 0; if (to === void 0) to = this.length; var result = []; this.forEach(function(elt, i2) { return result.push(f2(elt, i2)); }, from2, to); return result; }; RopeSequence.from = function from2(values) { if (values instanceof RopeSequence) { return values; } return values && values.length ? new Leaf(values) : RopeSequence.empty; }; var Leaf = /* @__PURE__ */ function(RopeSequence2) { function Leaf2(values) { RopeSequence2.call(this); this.values = values; } if (RopeSequence2) Leaf2.__proto__ = RopeSequence2; Leaf2.prototype = Object.create(RopeSequence2 && RopeSequence2.prototype); Leaf2.prototype.constructor = Leaf2; var prototypeAccessors = { length: { configurable: true }, depth: { configurable: true } }; Leaf2.prototype.flatten = function flatten2() { return this.values; }; Leaf2.prototype.sliceInner = function sliceInner(from2, to) { if (from2 == 0 && to == this.length) { return this; } return new Leaf2(this.values.slice(from2, to)); }; Leaf2.prototype.getInner = function getInner(i2) { return this.values[i2]; }; Leaf2.prototype.forEachInner = function forEachInner(f2, from2, to, start) { for (var i2 = from2; i2 < to; i2++) { if (f2(this.values[i2], start + i2) === false) { return false; } } }; Leaf2.prototype.forEachInvertedInner = function forEachInvertedInner(f2, from2, to, start) { for (var i2 = from2 - 1; i2 >= to; i2--) { if (f2(this.values[i2], start + i2) === false) { return false; } } }; Leaf2.prototype.leafAppend = function leafAppend(other) { if (this.length + other.length <= GOOD_LEAF_SIZE) { return new Leaf2(this.values.concat(other.flatten())); } }; Leaf2.prototype.leafPrepend = function leafPrepend(other) { if (this.length + other.length <= GOOD_LEAF_SIZE) { return new Leaf2(other.flatten().concat(this.values)); } }; prototypeAccessors.length.get = function() { return this.values.length; }; prototypeAccessors.depth.get = function() { return 0; }; Object.defineProperties(Leaf2.prototype, prototypeAccessors); return Leaf2; }(RopeSequence); RopeSequence.empty = new Leaf([]); var Append = /* @__PURE__ */ function(RopeSequence2) { function Append2(left, right) { RopeSequence2.call(this); this.left = left; this.right = right; this.length = left.length + right.length; this.depth = Math.max(left.depth, right.depth) + 1; } if (RopeSequence2) Append2.__proto__ = RopeSequence2; Append2.prototype = Object.create(RopeSequence2 && RopeSequence2.prototype); Append2.prototype.constructor = Append2; Append2.prototype.flatten = function flatten2() { return this.left.flatten().concat(this.right.flatten()); }; Append2.prototype.getInner = function getInner(i2) { return i2 < this.left.length ? this.left.get(i2) : this.right.get(i2 - this.left.length); }; Append2.prototype.forEachInner = function forEachInner(f2, from2, to, start) { var leftLen = this.left.length; if (from2 < leftLen && this.left.forEachInner(f2, from2, Math.min(to, leftLen), start) === false) { return false; } if (to > leftLen && this.right.forEachInner(f2, Math.max(from2 - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false) { return false; } }; Append2.prototype.forEachInvertedInner = function forEachInvertedInner(f2, from2, to, start) { var leftLen = this.left.length; if (from2 > leftLen && this.right.forEachInvertedInner(f2, from2 - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false) { return false; } if (to < leftLen && this.left.forEachInvertedInner(f2, Math.min(from2, leftLen), to, start) === false) { return false; } }; Append2.prototype.sliceInner = function sliceInner(from2, to) { if (from2 == 0 && to == this.length) { return this; } var leftLen = this.left.length; if (to <= leftLen) { return this.left.slice(from2, to); } if (from2 >= leftLen) { return this.right.slice(from2 - leftLen, to - leftLen); } return this.left.slice(from2, leftLen).append(this.right.slice(0, to - leftLen)); }; Append2.prototype.leafAppend = function leafAppend(other) { var inner = this.right.leafAppend(other); if (inner) { return new Append2(this.left, inner); } }; Append2.prototype.leafPrepend = function leafPrepend(other) { var inner = this.left.leafPrepend(other); if (inner) { return new Append2(inner, this.right); } }; Append2.prototype.appendInner = function appendInner(other) { if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1) { return new Append2(this.left, new Append2(this.right, other)); } return new Append2(this, other); }; return Append2; }(RopeSequence); var ropeSequence = RopeSequence; const max_empty_items = 500; class Branch { constructor(items, eventCount) { this.items = items; this.eventCount = eventCount; } popEvent(state, preserveItems) { if (this.eventCount == 0) return null; let end = this.items.length; for (; ; end--) { let next2 = this.items.get(end - 1); if (next2.selection) { --end; break; } } let remap, mapFrom; if (preserveItems) { remap = this.remapping(end, this.items.length); mapFrom = remap.maps.length; } let transform = state.tr; let selection, remaining; let addAfter = [], addBefore = []; this.items.forEach((item, i2) => { if (!item.step) { if (!remap) { remap = this.remapping(end, i2 + 1); mapFrom = remap.maps.length; } mapFrom--; addBefore.push(item); return; } if (remap) { addBefore.push(new Item(item.map)); let step2 = item.step.map(remap.slice(mapFrom)), map2; if (step2 && transform.maybeStep(step2).doc) { map2 = transform.mapping.maps[transform.mapping.maps.length - 1]; addAfter.push(new Item(map2, void 0, void 0, addAfter.length + addBefore.length)); } mapFrom--; if (map2) remap.appendMap(map2, mapFrom); } else { transform.maybeStep(item.step); } if (item.selection) { selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection; remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1); return false; } }, this.items.length, 0); return { remaining, transform, selection }; } addTransform(transform, selection, histOptions, preserveItems) { let newItems = [], eventCount = this.eventCount; let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null; for (let i2 = 0; i2 < transform.steps.length; i2++) { let step2 = transform.steps[i2].invert(transform.docs[i2]); let item = new Item(transform.mapping.maps[i2], step2, selection), merged; if (merged = lastItem && lastItem.merge(item)) { item = merged; if (i2) newItems.pop(); else oldItems = oldItems.slice(0, oldItems.length - 1); } newItems.push(item); if (selection) { eventCount++; selection = void 0; } if (!preserveItems) lastItem = item; } let overflow = eventCount - histOptions.depth; if (overflow > DEPTH_OVERFLOW) { oldItems = cutOffEvents(oldItems, overflow); eventCount -= overflow; } return new Branch(oldItems.append(newItems), eventCount); } remapping(from2, to) { let maps = new Mapping(); this.items.forEach((item, i2) => { let mirrorPos = item.mirrorOffset != null && i2 - item.mirrorOffset >= from2 ? maps.maps.length - item.mirrorOffset : void 0; maps.appendMap(item.map, mirrorPos); }, from2, to); return maps; } addMaps(array) { if (this.eventCount == 0) return this; return new Branch(this.items.append(array.map((map2) => new Item(map2))), this.eventCount); } rebased(rebasedTransform, rebasedCount) { if (!this.eventCount) return this; let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount); let mapping = rebasedTransform.mapping; let newUntil = rebasedTransform.steps.length; let eventCount = this.eventCount; this.items.forEach((item) => { if (item.selection) eventCount--; }, start); let iRebased = rebasedCount; this.items.forEach((item) => { let pos = mapping.getMirror(--iRebased); if (pos == null) return; newUntil = Math.min(newUntil, pos); let map2 = mapping.maps[pos]; if (item.step) { let step2 = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]); let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos)); if (selection) eventCount++; rebasedItems.push(new Item(map2, step2, selection)); } else { rebasedItems.push(new Item(map2)); } }, start); let newMaps = []; for (let i2 = rebasedCount; i2 < newUntil; i2++) newMaps.push(new Item(mapping.maps[i2])); let items = this.items.slice(0, start).append(newMaps).append(rebasedItems); let branch = new Branch(items, eventCount); if (branch.emptyItemCount() > max_empty_items) branch = branch.compress(this.items.length - rebasedItems.length); return branch; } emptyItemCount() { let count = 0; this.items.forEach((item) => { if (!item.step) count++; }); return count; } compress(upto = this.items.length) { let remap = this.remapping(0, upto), mapFrom = remap.maps.length; let items = [], events = 0; this.items.forEach((item, i2) => { if (i2 >= upto) { items.push(item); if (item.selection) events++; } else if (item.step) { let step2 = item.step.map(remap.slice(mapFrom)), map2 = step2 && step2.getMap(); mapFrom--; if (map2) remap.appendMap(map2, mapFrom); if (step2) { let selection = item.selection && item.selection.map(remap.slice(mapFrom)); if (selection) events++; let newItem = new Item(map2.invert(), step2, selection), merged, last2 = items.length - 1; if (merged = items.length && items[last2].merge(newItem)) items[last2] = merged; else items.push(newItem); } } else if (item.map) { mapFrom--; } }, this.items.length, 0); return new Branch(ropeSequence.from(items.reverse()), events); } } Branch.empty = new Branch(ropeSequence.empty, 0); function cutOffEvents(items, n2) { let cutPoint; items.forEach((item, i2) => { if (item.selection && n2-- == 0) { cutPoint = i2; return false; } }); return items.slice(cutPoint); } class Item { constructor(map2, step2, selection, mirrorOffset) { this.map = map2; this.step = step2; this.selection = selection; this.mirrorOffset = mirrorOffset; } merge(other) { if (this.step && other.step && !other.selection) { let step2 = other.step.merge(this.step); if (step2) return new Item(step2.getMap().invert(), step2, this.selection); } } } class HistoryState { constructor(done, undone, prevRanges, prevTime) { this.done = done; this.undone = undone; this.prevRanges = prevRanges; this.prevTime = prevTime; } } const DEPTH_OVERFLOW = 20; function applyTransaction(history2, state, tr, options) { let historyTr = tr.getMeta(historyKey), rebased; if (historyTr) return historyTr.historyState; if (tr.getMeta(closeHistoryKey)) history2 = new HistoryState(history2.done, history2.undone, null, 0); let appended = tr.getMeta("appendedTransaction"); if (tr.steps.length == 0) { return history2; } else if (appended && appended.getMeta(historyKey)) { if (appended.getMeta(historyKey).redo) return new HistoryState(history2.done.addTransform(tr, void 0, options, mustPreserveItems(state)), history2.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history2.prevTime); else return new HistoryState(history2.done, history2.undone.addTransform(tr, void 0, options, mustPreserveItems(state)), null, history2.prevTime); } else if (tr.getMeta("addToHistory") !== false && !(appended && appended.getMeta("addToHistory") === false)) { let newGroup = history2.prevTime == 0 || !appended && (history2.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history2.prevRanges)); let prevRanges = appended ? mapRanges(history2.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]); return new HistoryState(history2.done.addTransform(tr, newGroup ? state.selection.getBookmark() : void 0, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time); } else if (rebased = tr.getMeta("rebased")) { return new HistoryState(history2.done.rebased(tr, rebased), history2.undone.rebased(tr, rebased), mapRanges(history2.prevRanges, tr.mapping), history2.prevTime); } else { return new HistoryState(history2.done.addMaps(tr.mapping.maps), history2.undone.addMaps(tr.mapping.maps), mapRanges(history2.prevRanges, tr.mapping), history2.prevTime); } } function isAdjacentTo(transform, prevRanges) { if (!prevRanges) return false; if (!transform.docChanged) return true; let adjacent = false; transform.mapping.maps[0].forEach((start, end) => { for (let i2 = 0; i2 < prevRanges.length; i2 += 2) if (start <= prevRanges[i2 + 1] && end >= prevRanges[i2]) adjacent = true; }); return adjacent; } function rangesFor(map2) { let result = []; map2.forEach((_from, _to, from2, to) => result.push(from2, to)); return result; } function mapRanges(ranges, mapping) { if (!ranges) return null; let result = []; for (let i2 = 0; i2 < ranges.length; i2 += 2) { let from2 = mapping.map(ranges[i2], 1), to = mapping.map(ranges[i2 + 1], -1); if (from2 <= to) result.push(from2, to); } return result; } function histTransaction(history2, state, dispatch, redo2) { let preserveItems = mustPreserveItems(state); let histOptions = historyKey.get(state).spec.config; let pop2 = (redo2 ? history2.undone : history2.done).popEvent(state, preserveItems); if (!pop2) return; let selection = pop2.selection.resolve(pop2.transform.doc); let added = (redo2 ? history2.done : history2.undone).addTransform(pop2.transform, state.selection.getBookmark(), histOptions, preserveItems); let newHist = new HistoryState(redo2 ? added : pop2.remaining, redo2 ? pop2.remaining : added, null, 0); dispatch(pop2.transform.setSelection(selection).setMeta(historyKey, { redo: redo2, historyState: newHist }).scrollIntoView()); } let cachedPreserveItems = false, cachedPreserveItemsPlugins = null; function mustPreserveItems(state) { let plugins = state.plugins; if (cachedPreserveItemsPlugins != plugins) { cachedPreserveItems = false; cachedPreserveItemsPlugins = plugins; for (let i2 = 0; i2 < plugins.length; i2++) if (plugins[i2].spec.historyPreserveItems) { cachedPreserveItems = true; break; } } return cachedPreserveItems; } const historyKey = new PluginKey("history"); const closeHistoryKey = new PluginKey("closeHistory"); function history$1(config = {}) { config = { depth: config.depth || 100, newGroupDelay: config.newGroupDelay || 500 }; return new Plugin({ key: historyKey, state: { init() { return new HistoryState(Branch.empty, Branch.empty, null, 0); }, apply(tr, hist, state) { return applyTransaction(hist, state, tr, config); } }, config, props: { handleDOMEvents: { beforeinput(view, e2) { let inputType = e2.inputType; let command = inputType == "historyUndo" ? undo : inputType == "historyRedo" ? redo : null; if (!command) return false; e2.preventDefault(); return command(view.state, view.dispatch); } } } }); } const undo = (state, dispatch) => { let hist = historyKey.getState(state); if (!hist || hist.done.eventCount == 0) return false; if (dispatch) histTransaction(hist, state, dispatch, false); return true; }; const redo = (state, dispatch) => { let hist = historyKey.getState(state); if (!hist || hist.undone.eventCount == 0) return false; if (dispatch) histTransaction(hist, state, dispatch, true); return true; }; const extension$G = { commands: () => { return [ new ProsemirrorCommand(EditorCommandId.Undo, ["Mod-z"], undo), new ProsemirrorCommand(EditorCommandId.Redo, ["Shift-Mod-z"], redo) ]; }, plugins: () => { return [history$1()]; } }; const extension$F = { commands: () => { return [new ProsemirrorCommand(EditorCommandId.SelectAll, ["Mod-a"], selectAll)]; } }; function selectAll(state, dispatch, view) { if (dispatch) { const editingRoot = editingRootNode(state.selection); if (editingRoot) { const schema2 = state.schema; const tr = state.tr; if (editingRoot.node.type === schema2.nodes.note) { tr.setSelection(childBlocksSelection(tr.doc, editingRoot)); } else { const start = tr.doc.resolve(editingRoot.pos); const end = tr.doc.resolve(editingRoot.pos + editingRoot.node.nodeSize); tr.setSelection(new TextSelection(start, end)); } dispatch(tr); if (view) { view.focus(); } } } return true; } function childBlocksSelection(doc2, parent) { const blocks = findBlockNodes_1(parent.node); const begin = parent.start + blocks[0].pos + 1; const lastBlock = blocks[blocks.length - 1]; const end = parent.start + lastBlock.pos + lastBlock.node.nodeSize; return TextSelection.create(doc2, begin, end); } function dropCursor(options = {}) { return new Plugin({ view(editorView) { return new DropCursorView(editorView, options); } }); } class DropCursorView { constructor(editorView, options) { this.editorView = editorView; this.cursorPos = null; this.element = null; this.timeout = -1; this.width = options.width || 1; this.color = options.color || "black"; this.class = options.class; this.handlers = ["dragover", "dragend", "drop", "dragleave"].map((name) => { let handler = (e2) => { this[name](e2); }; editorView.dom.addEventListener(name, handler); return { name, handler }; }); } destroy() { this.handlers.forEach(({ name, handler }) => this.editorView.dom.removeEventListener(name, handler)); } update(editorView, prevState) { if (this.cursorPos != null && prevState.doc != editorView.state.doc) { if (this.cursorPos > editorView.state.doc.content.size) this.setCursor(null); else this.updateOverlay(); } } setCursor(pos) { if (pos == this.cursorPos) return; this.cursorPos = pos; if (pos == null) { this.element.parentNode.removeChild(this.element); this.element = null; } else { this.updateOverlay(); } } updateOverlay() { let $pos = this.editorView.state.doc.resolve(this.cursorPos), rect2; if (!$pos.parent.inlineContent) { let before = $pos.nodeBefore, after = $pos.nodeAfter; if (before || after) { let node2 = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0)); if (node2) { let nodeRect = node2.getBoundingClientRect(); let top2 = before ? nodeRect.bottom : nodeRect.top; if (before && after) top2 = (top2 + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2; rect2 = { left: nodeRect.left, right: nodeRect.right, top: top2 - this.width / 2, bottom: top2 + this.width / 2 }; } } } if (!rect2) { let coords = this.editorView.coordsAtPos(this.cursorPos); rect2 = { left: coords.left - this.width / 2, right: coords.left + this.width / 2, top: coords.top, bottom: coords.bottom }; } let parent = this.editorView.dom.offsetParent; if (!this.element) { this.element = parent.appendChild(document.createElement("div")); if (this.class) this.element.className = this.class; this.element.style.cssText = "position: absolute; z-index: 50; pointer-events: none; background-color: " + this.color; } let parentLeft, parentTop; if (!parent || parent == document.body && getComputedStyle(parent).position == "static") { parentLeft = -pageXOffset; parentTop = -pageYOffset; } else { let rect3 = parent.getBoundingClientRect(); parentLeft = rect3.left - parent.scrollLeft; parentTop = rect3.top - parent.scrollTop; } this.element.style.left = rect2.left - parentLeft + "px"; this.element.style.top = rect2.top - parentTop + "px"; this.element.style.width = rect2.right - rect2.left + "px"; this.element.style.height = rect2.bottom - rect2.top + "px"; } scheduleRemoval(timeout) { clearTimeout(this.timeout); this.timeout = setTimeout(() => this.setCursor(null), timeout); } dragover(event) { if (!this.editorView.editable) return; let pos = this.editorView.posAtCoords({ left: event.clientX, top: event.clientY }); let node2 = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside); let disableDropCursor = node2 && node2.type.spec.disableDropCursor; let disabled = typeof disableDropCursor == "function" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor; if (pos && !disabled) { let target2 = pos.pos; if (this.editorView.dragging && this.editorView.dragging.slice) { target2 = dropPoint(this.editorView.state.doc, target2, this.editorView.dragging.slice); if (target2 == null) return this.setCursor(null); } this.setCursor(target2); this.scheduleRemoval(5e3); } } dragend() { this.scheduleRemoval(20); } drop() { this.scheduleRemoval(20); } dragleave(event) { if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget)) this.setCursor(null); } } const gapcursor = ""; const cursor = ""; const extension$E = { baseKeys: () => { return [ { key: BaseKey.ArrowLeft, command: gapArrowHandler("left") }, { key: BaseKey.ArrowUp, command: gapArrowHandler("up") } ]; }, plugins: () => { return [ gapCursor(), dropCursor(), new Plugin({ key: new PluginKey("div-gap-cursor"), props: { handleDOMEvents: { click: gapClickHandler } } }) ]; } }; function gapArrowHandler(dir) { return (state, dispatch, view) => { var _a; const createGapCursor = ($pos) => { if (dispatch) { const cursor2 = new GapCursor($pos); const tr = state.tr; tr.setSelection(cursor2); dispatch(tr); } return true; }; if (state.selection.empty && view && view.endOfTextblock(dir)) { const $head = state.selection.$head; if (dir === "up" && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) { return false; } if (state.schema.nodes.div) { const div2 = findParentNodeOfType_1(state.schema.nodes.div)(state.selection); if (div2) { const $divPos = state.doc.resolve(div2.pos); if ($head.index($head.depth - 1) === 0 && !(state.selection instanceof GapCursor)) { if (findParentNode_1(isList)(state.selection)) { return false; } return createGapCursor(state.doc.resolve($divPos.pos + 1)); } else if (((_a = $divPos.nodeBefore) == null ? void 0 : _a.type) === state.schema.nodes.div) { return createGapCursor(state.doc.resolve($divPos.pos)); } } } if (!$head.nodeBefore && $head.pos <= 2) { return createGapCursor(state.doc.resolve($head.pos - 1)); } return false; } else { return false; } }; } function gapClickHandler(view, event) { const schema2 = view.state.schema; const mouseEvent = event; const clickPos = view.posAtCoords({ left: mouseEvent.clientX, top: mouseEvent.clientY }); if (clickPos) { const $clickPos = view.state.doc.resolve(clickPos.pos); const createGapCursor = () => { view.focus(); const tr = view.state.tr; const cursor2 = new GapCursor($clickPos); tr.setSelection(cursor2); view.dispatch(tr); event.preventDefault(); event.stopImmediatePropagation(); return false; }; if (schema2.nodes.div) { const div2 = findParentNodeOfTypeClosestToPos_1( view.state.doc.resolve(clickPos.pos), schema2.nodes.div ); if (div2 && div2.pos === clickPos.inside) { const divNode = view.nodeDOM(div2.start); if (divNode instanceof HTMLElement) { if (Math.abs(mouseEvent.clientX - divNode.getBoundingClientRect().left) < 150) { return createGapCursor(); } } } } const blockRequiresGap = (node2) => { if (node2) { return node2.type === schema2.nodes.div || node2.type === schema2.nodes.figure || node2.type === schema2.nodes.table || node2.type === schema2.nodes.horizontal_rule || node2.type === schema2.nodes.code_block || node2.type === schema2.nodes.raw_block || node2.type === schema2.nodes.rmd_chunk || node2.type === schema2.nodes.html_preserve || node2.type === schema2.nodes.shortcode_block || node2.type === schema2.nodes.yaml_metadata; } else { return false; } }; if (!clickPos.inside) { if (blockRequiresGap($clickPos.nodeBefore) && blockRequiresGap($clickPos.nodeAfter)) { return createGapCursor(); } } } return false; } const kFormattingMarks = ["code", "em", "underline", "smallcaps", "span", "strikeout", "strong", "superscript", "subscript"]; const kLiftFormattingNodes = ["blockquote", "line_block", "div", "raw_block"]; function clearFormatting(transaction, from2, to) { trTransform(transaction, (tr) => { const schema2 = tr.doc.type.schema; kFormattingMarks.forEach((markName) => { const mark = schema2.marks[markName]; if (mark) { tr.removeMark(from2, to, mark); } }); tr.doc.nodesBetween(from2, to, (node2, pos) => { if (node2.type === schema2.nodes.paragraph || node2.type === schema2.nodes.text) { return; } if (node2.type === schema2.nodes.bullet_list || node2.type === schema2.nodes.ordered_list || node2.type === schema2.nodes.definition_list || node2.type === schema2.nodes.definition_list_term || node2.type === schema2.nodes.definition_list_description) { return; } const fromPos = tr.doc.resolve(tr.mapping.map(pos + 1)); const toPos = tr.doc.resolve(tr.mapping.map(pos + node2.nodeSize - 1)); const nodeRange = fromPos.blockRange(toPos); if (nodeRange) { if (node2.type.isTextblock) { tr.setNodeMarkup(nodeRange.start, schema2.nodes.paragraph); } else if (kLiftFormattingNodes.includes(node2.type.name)) { const targetLiftDepth = liftTarget(nodeRange); if (targetLiftDepth || targetLiftDepth === 0) { tr.lift(nodeRange, targetLiftDepth); } } } }); }); transaction.setStoredMarks([]); return transaction; } const extension$D = { commands: () => { return [new ProsemirrorCommand(EditorCommandId.ClearFormatting, ["Mod-\\"], (state, dispatch) => { if (dispatch) { const tr = state.tr; const { from: from2, to } = tr.selection; clearFormatting(tr, from2, to); dispatch(tr); } return true; })]; } }; const enDash = new InputRule(/[^!-`]--$/, (state, _match, _start, end) => { const { parent, parentOffset } = state.selection.$head; const precedingText = parent.textBetween(0, parentOffset); if (precedingText.indexOf("<!--") === -1) { const tr = state.tr; tr.insertText("\u2013", end - 1, end); return tr; } else { return null; } }); const emDash = new InputRule(/(^|[^`])–-$/, (state, _match, _start, end) => { const tr = state.tr; tr.insertText("\u2014", end - 1, end); return tr; }); const extension$C = { inputRules: () => { return [enDash, emDash]; } }; const behaviorSmarty = extensionIfEnabled(extension$C, "smart"); const extension$B = { appendTransaction: () => { const hasAttrId = (node2) => { return !!node2.attrs.id || node2.marks.some((mark) => !!mark.attrs.id); }; const attrMarkStep = (step2) => { return step2 instanceof AddMarkStep && !!step2.mark.attrs.id; }; return [ { name: "attr_duplicate_id", filter: (transactions) => transactions.some((transaction) => transaction.steps.some(attrMarkStep)), nodeFilter: hasAttrId, append: (tr) => { const usedIds = /* @__PURE__ */ new Set(); const scannedRanges = []; findChildren_1(tr.doc, hasAttrId, true).forEach((attrNode) => { if (attrNode.node.attrs.id) { const id2 = attrNode.node.attrs.id; if (usedIds.has(id2)) { const node2 = attrNode.node; tr.setNodeMarkup(attrNode.pos, void 0, { ...node2.attrs, id: null }, node2.marks); } else { usedIds.add(id2); } } else { const mark = attrNode.node.marks.find((mk2) => !!mk2.attrs.id); const markRange = getMarkRange(tr.doc.resolve(attrNode.pos), mark.type); const markAttrs = getMarkAttrs(tr.doc, markRange, mark.type); const id2 = markAttrs.id; if (id2 && !scannedRanges.find((range2) => range2.from === markRange.from && range2.to === markRange.to)) { scannedRanges.push(markRange); if (usedIds.has(id2)) { tr.removeMark(markRange.from, markRange.to, mark.type); tr.addMark(markRange.from, markRange.to, mark.type.create({ ...mark.attrs, id: null })); } else { usedIds.add(id2); } } } }); } } ]; } }; const behaviorAttrDuplicateId = extensionIfPandocAttrEnabled(extension$B); const extension$A = { fixups: () => { return [ (tr, context) => { if (context === FixupContext.Load) { if (requiresTrailingP(tr.selection)) { insertTrailingP(tr); } } return tr; } ]; }, appendTransaction: () => { return [ { name: "trailing_p", append: (tr) => { if (requiresTrailingP(tr.selection)) { insertTrailingP(tr); } return tr; } } ]; } }; const extension$z = { appendTransaction: () => { return [ { name: "clear_empty_mark", append: (tr, transactions, _oldState, newState) => { var _a; if (newState.selection.empty) { const removedText = transactions.some( (transaction) => transaction.steps.some((step2) => { return step2 instanceof ReplaceStep && step2.slice.content.size === 0; }) ); if (removedText) { (_a = newState.storedMarks) == null ? void 0 : _a.forEach((mark) => { const markRange = getMarkRange(tr.doc.resolve(tr.selection.from), mark.type); if (!markRange || markRange.from === markRange.to) { tr.removeStoredMark(mark); } }); } } } } ]; } }; const extension$y = { baseKeys: () => { return [ { key: BaseKey.ArrowRight, command: (state, dispatch) => { if (state.selection.empty) { const $head = state.selection.$head; const parent = $head.node($head.depth); if (parent.type.isTextblock && $head.parentOffset === parent.textContent.length && ($head.marks().length > 0 || !!state.storedMarks)) { if (dispatch) { const tr = state.tr; tr.setStoredMarks([]); tr.insertText(" "); dispatch(tr); } return true; } } return false; } } ]; } }; const extension$x = (context) => { const { pandocExtensions, format: format2 } = context; const fencedAttributes = pandocExtensions.fenced_code_attributes || !!format2.rmdExtensions.codeChunks; return { baseKeys: () => { return [{ key: BaseKey.Enter, command: codeBlockInputRuleEnter(pandocExtensions, fencedAttributes, format2) }]; }, inputRules: () => { if (fencedAttributes) { return [ new InputRule(/^```+{$/, (state, match2, start) => { if (!canApplyCodeBlockInputRule(state)) { return null; } const tr = state.tr; tr.insertText("{}"); setTextSelection_1(start + match2[0].length)(tr); return tr; }) ]; } else { return []; } } }; }; function codeBlockInputRuleEnter(pandocExtensions, fencedAttributes, format2) { return (state, dispatch) => { const schema2 = state.schema; const { $head } = state.selection; if (!state.selection.empty) { return false; } const match2 = $head.parent.textContent.match(/^```+(?:(\w+)|\{([\.=]?[^\}]+)\})?$/); if (!match2) { return false; } if (markIsActive(state, schema2.marks.code)) { return false; } if (!canApplyCodeBlockInputRule(state)) { return false; } const fenced = fencedAttributes && !!match2[2]; const langAttrib = fenced ? match2[2] : match2[1] || ""; const rawBlock = fenced && pandocExtensions.raw_attribute && langAttrib.match(/^=\w.*$/); const rmdChunk2 = fenced && !!format2.rmdExtensions.codeChunks && langAttrib.match(/^\w.*$/); if (rmdChunk2 && !canInsertRmdChunk(state)) { return false; } if (dispatch) { const lang2 = langAttrib.replace(/^[\.=]/, ""); const tr = state.tr; const start = $head.start(); const end = start + $head.parent.textContent.length; tr.deleteRange(start, end); const type2 = rawBlock ? schema2.nodes.raw_block : rmdChunk2 ? schema2.nodes.rmd_chunk : schema2.nodes.code_block; const content = rmdChunk2 ? schema2.text(`{${match2[2]}} `) : Fragment.empty; const attrs = rawBlock ? { format: lang2 } : !rmdChunk2 && lang2.length ? pandocAttrFrom({ classes: [lang2] }) : {}; const prevListItemPos = precedingListItemInsertPos(state.doc, state.selection); if (prevListItemPos) { const block2 = type2.createAndFill(attrs, content); precedingListItemInsert(tr, prevListItemPos, block2); } else { tr.insert(start, content); tr.setBlockType(start, start, type2, attrs); } dispatch(tr); } return true; }; } function canReplaceNodeWithCodeBlock(schema2, $pos) { return $pos.node(-1).canReplaceWith($pos.index(-1), $pos.indexAfter(-1), schema2.nodes.code_block); } function canApplyCodeBlockInputRule(state) { const schema2 = state.schema; const { $head } = state.selection; return canReplaceNodeWithCodeBlock(schema2, $head) || precedingListItemInsertPos(state.doc, state.selection); } const kTextPlain = "text/plain"; const kTextHtml = "text/html"; const extension$w = (context) => { let pasteRaw = false; const collectPasteRaw = () => { const raw = pasteRaw; pasteRaw = false; return raw; }; return { plugins: (schema2) => [ pastePlugin( schema2, context.markdown, collectPasteRaw, [pasteMarkdownHandler(schema2), pasteHtmlHandler(schema2)] ) ], commands: () => { const havePaste = document.queryCommandSupported("paste"); if (havePaste) { return [new ProsemirrorCommand( EditorCommandId.PasteRaw, ["Mod-Shift-v"], (_state, dispatch) => { if (!document.queryCommandEnabled("paste")) { return false; } if (dispatch) { pasteRaw = true; document.execCommand("paste"); } return true; } )]; } else { return []; } } }; }; function pastePlugin(schema2, editorMarkdown, pasteRaw, handlers2) { let shiftPaste = false; return new Plugin({ key: new PluginKey("paste-handler"), props: { handleKeyDown: (_2, event) => { shiftPaste = event.key === "v" && (event.metaKey || event.ctrlKey) && event.shiftKey; }, clipboardTextParser: (text2, $context) => { if (text2.indexOf("\n") === -1) { const marks = $context.marks(); const textNode = schema2.text(text2, marks); return new Slice(Fragment.from(textNode), 0, 0); } else { return null; } }, transformPastedHTML(html2) { if (isWindows()) { const fragments = html2.match(/<!--StartFragment-->(.*)<!--EndFragment-->/); if (fragments) { return fragments[1]; } } return html2; }, handlePaste(view, event, slice2) { const raw = pasteRaw() || shiftPaste; for (const handler of handlers2) { const handled = handler(editorMarkdown, view, event, raw, slice2); if (handled) { return true; } } return false; } } }); } function pasteMarkdownHandler(schema2) { const linkHandler = linkPasteHandler(schema2); return (editorMarkdown, view, event, pasteRaw, slice2) => { if (!editorMarkdown.allowMarkdownPaste(view.state)) { return false; } const { clipboardData } = event; const text2 = clipboardData == null ? void 0 : clipboardData.getData(kTextPlain); const html2 = clipboardData == null ? void 0 : clipboardData.getData(kTextHtml); const isVscode = isVscodePaste(clipboardData, html2); if (!text2) { return false; } if (html2 && !isVscode) { return false; } editorMarkdown.markdownToSlice(text2, slice2.openStart, slice2.openEnd).then((slice22) => { slice22 = linkHandler(slice22); const tr = pasteTransaction(view.state); const sliceText = slice22.content.textBetween(0, slice22.content.size); if (!tr.selection.empty && isLink(sliceText)) { tr.addMark( tr.selection.from, tr.selection.to, schema2.marks.link.create({ href: sliceText }) ); } else { const prevSel = tr.selection; tr.replaceSelection(slice22); if (pasteRaw) { clearFormatting(tr, prevSel.from, prevSel.from + slice22.size); } } view.dispatch(tr); }); return true; }; } function pasteHtmlHandler(schema2) { return (_editorMarkdown, view, event, pasteRaw, slice2) => { if (!event.clipboardData) { return false; } const pasteSlice = (s2) => { const tr = view.state.tr; const prevSel = tr.selection; tr.replaceSelection(s2); if (pasteRaw) { clearFormatting(tr, prevSel.from, prevSel.from + slice2.size); } view.dispatch(tr); }; const kTextHtml2 = "text/html"; const kWordSchema = "urn:schemas-microsoft-com:office:word"; if (event.clipboardData.types.includes(kTextHtml2)) { const html2 = event.clipboardData.getData(kTextHtml2); if (html2.includes(kWordSchema) || isWindows()) { const nodes2 = []; for (let i2 = 0; i2 < slice2.content.childCount; i2++) { const node2 = slice2.content.child(i2); if (node2.textContent.trim() !== "") { const newNode = node2.type.createAndFill(node2.attrs, mapFragment(node2.content, (nd2) => { if (nd2.isText) { return schema2.text(nd2.text.replace(/\n/g, " "), nd2.marks); } else { return nd2; } }), node2.marks); nodes2.push(newNode || node2); } } const fragment = Fragment.fromArray(nodes2); const newSlice = new Slice(fragment, slice2.openStart, slice2.openEnd); pasteSlice(newSlice); return true; } else if (pasteRaw) { pasteSlice(slice2); return true; } } return false; }; } const kVscodeEditorData = "vscode-editor-data"; const kVscodeRegex = /^<div.*?orphans: auto;.*?widows: auto.*?white-space: pre;/; function isVscodePaste(clipboardData, html2) { if (clipboardData == null ? void 0 : clipboardData.types.some((type2) => type2 === kVscodeEditorData)) { return true; } else if (html2 && html2.match(kVscodeRegex)) { return true; } else { return false; } } const kAutoscrollGapPx = 25; const extension$v = { plugins: (schema2) => { return [ new Plugin({ key: new PluginKey("bottom_padding"), view: () => ({ update: (view) => { const selection = view.state.selection; if (selectionWithinLastBodyParagraph(selection)) { const paragraphNode = findParentNodeOfType_1(schema2.nodes.paragraph)(selection); if (paragraphNode) { const paragraphEl = view.nodeDOM(paragraphNode.pos); const paragraphRect = paragraphEl.getBoundingClientRect(); const editorEl = view.dom; const editorRect = editorEl.getBoundingClientRect(); if (Math.abs(paragraphRect.bottom - editorRect.bottom) < kAutoscrollGapPx) { const bodyEl = bodyElement(view); const scroller = zenscroll.createScroller(editorScrollContainer(bodyEl)); scroller.toY(bodyEl.scrollHeight, 0); } } } } }) }) ]; } }; const kMinValidCodepoint = 0; const kMaxValidCodepoint = 1114112; const kHexCodepointPrefix = "U+"; const kHexNumberPrefex = "0x"; function parseCodepoint(codepointText) { const base10Value = Number(codepointText).valueOf(); if (!Number.isNaN(base10Value)) { if (isValidCodepoint(base10Value)) { return base10Value; } } let hexOnlyText = codepointText.toUpperCase(); if (hexOnlyText.startsWith(kHexCodepointPrefix.toUpperCase())) { hexOnlyText = codepointText.substr(kHexCodepointPrefix.length, codepointText.length - kHexCodepointPrefix.length); } if (!hexOnlyText.startsWith(kHexNumberPrefex)) { hexOnlyText = kHexNumberPrefex + hexOnlyText; } const hexValue = Number(hexOnlyText).valueOf(); if (!Number.isNaN(hexValue) && isValidCodepoint(hexValue)) { return hexValue; } return void 0; } function isValidCodepoint(codepoint) { return codepoint > kMinValidCodepoint && codepoint < kMaxValidCodepoint; } function isElementFocused(element) { if (element) { return window.document.activeElement === element; } return false; } function focusElement(element) { if (element) { element.focus(); } } const SelectInput = React.forwardRef((props, ref) => { const style = { ...props.style }; return /* @__PURE__ */ React.createElement( "select", { className: `pm-input-select pm-background-color pm-pane-border-color pm-text-color ${props.className}`, style, tabIndex: props.tabIndex, ref, onChange: props.onChange, defaultValue: props.defaultValue }, props.children ); }); const text = ""; const TextInput = React.forwardRef((props, ref) => { const characterWidth = props.width.endsWith("ch") ? parseInt(props.width.substr(0, props.width.length - 2), 10) : void 0; const style = { ...props.style, width: characterWidth ? void 0 : props.width }; return /* @__PURE__ */ React.createElement("div", { className: "pm-textinput-container", style }, props.iconAdornment ? /* @__PURE__ */ React.createElement("img", { src: props.iconAdornment, className: "pm-textinput-icon", alt: "", draggable: "false" }) : void 0, /* @__PURE__ */ React.createElement( "input", { type: "text", placeholder: props.placeholder, size: characterWidth, className: ` pm-input-text pm-textinput-input pm-text-color pm-background-color ${props.className} ${props.iconAdornment ? "pm-textinput-input-with-icon" : ""}`, value: props.value !== void 0 ? props.value : void 0, onChange: props.onChange, onKeyDown: props.onKeyDown, onKeyUp: props.onKeyUp, onKeyPress: props.onKeyPress, onBlur: props.onBlur, onFocus: props.onFocus, tabIndex: props.tabIndex, onPaste: props.onPaste, ref, spellCheck: false } )); }); function _assertThisInitialized(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _setPrototypeOf(o2, p2) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf3(o3, p3) { o3.__proto__ = p3; return o3; }; return _setPrototypeOf(o2, p2); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } var safeIsNaN = Number.isNaN || function ponyfill(value) { return typeof value === "number" && value !== value; }; function isEqual(first, second) { if (first === second) { return true; } if (safeIsNaN(first) && safeIsNaN(second)) { return true; } return false; } function areInputsEqual(newInputs, lastInputs) { if (newInputs.length !== lastInputs.length) { return false; } for (var i2 = 0; i2 < newInputs.length; i2++) { if (!isEqual(newInputs[i2], lastInputs[i2])) { return false; } } return true; } function memoizeOne(resultFn, isEqual2) { if (isEqual2 === void 0) { isEqual2 = areInputsEqual; } var lastThis; var lastArgs = []; var lastResult; var calledOnce = false; function memoized() { var newArgs = []; for (var _i = 0; _i < arguments.length; _i++) { newArgs[_i] = arguments[_i]; } if (calledOnce && lastThis === this && isEqual2(newArgs, lastArgs)) { return lastResult; } lastResult = resultFn.apply(this, newArgs); calledOnce = true; lastThis = this; lastArgs = newArgs; return lastResult; } return memoized; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target2 = {}; var sourceKeys = Object.keys(source); var key2, i2; for (i2 = 0; i2 < sourceKeys.length; i2++) { key2 = sourceKeys[i2]; if (excluded.indexOf(key2) >= 0) continue; target2[key2] = source[key2]; } return target2; } var hasNativePerformanceNow = typeof performance === "object" && typeof performance.now === "function"; var now$1 = hasNativePerformanceNow ? function() { return performance.now(); } : function() { return Date.now(); }; function cancelTimeout(timeoutID) { cancelAnimationFrame(timeoutID.id); } function requestTimeout(callback, delay) { var start = now$1(); function tick() { if (now$1() - start >= delay) { callback.call(null); } else { timeoutID.id = requestAnimationFrame(tick); } } var timeoutID = { id: requestAnimationFrame(tick) }; return timeoutID; } var size = -1; function getScrollbarSize(recalculate) { if (recalculate === void 0) { recalculate = false; } if (size === -1 || recalculate) { var div2 = document.createElement("div"); var style = div2.style; style.width = "50px"; style.height = "50px"; style.overflow = "scroll"; document.body.appendChild(div2); size = div2.offsetWidth - div2.clientWidth; document.body.removeChild(div2); } return size; } var cachedRTLResult = null; function getRTLOffsetType(recalculate) { if (recalculate === void 0) { recalculate = false; } if (cachedRTLResult === null || recalculate) { var outerDiv = document.createElement("div"); var outerStyle = outerDiv.style; outerStyle.width = "50px"; outerStyle.height = "50px"; outerStyle.overflow = "scroll"; outerStyle.direction = "rtl"; var innerDiv = document.createElement("div"); var innerStyle = innerDiv.style; innerStyle.width = "100px"; innerStyle.height = "100px"; outerDiv.appendChild(innerDiv); document.body.appendChild(outerDiv); if (outerDiv.scrollLeft > 0) { cachedRTLResult = "positive-descending"; } else { outerDiv.scrollLeft = 1; if (outerDiv.scrollLeft === 0) { cachedRTLResult = "negative"; } else { cachedRTLResult = "positive-ascending"; } } document.body.removeChild(outerDiv); return cachedRTLResult; } return cachedRTLResult; } var IS_SCROLLING_DEBOUNCE_INTERVAL = 150; var defaultItemKey = function defaultItemKey2(_ref) { var columnIndex = _ref.columnIndex; _ref.data; var rowIndex = _ref.rowIndex; return rowIndex + ":" + columnIndex; }; function createGridComponent(_ref2) { var _class2; var getColumnOffset = _ref2.getColumnOffset, getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset, getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex, getColumnWidth = _ref2.getColumnWidth, getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight, getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth, getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment, getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment, getRowHeight = _ref2.getRowHeight, getRowOffset = _ref2.getRowOffset, getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset, getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex, initInstanceProps = _ref2.initInstanceProps, shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange, validateProps = _ref2.validateProps; return _class2 = /* @__PURE__ */ function(_PureComponent) { _inheritsLoose(Grid, _PureComponent); function Grid(props) { var _this; _this = _PureComponent.call(this, props) || this; _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this)); _this._resetIsScrollingTimeoutId = null; _this._outerRef = void 0; _this.state = { instance: _assertThisInitialized(_this), isScrolling: false, horizontalScrollDirection: "forward", scrollLeft: typeof _this.props.initialScrollLeft === "number" ? _this.props.initialScrollLeft : 0, scrollTop: typeof _this.props.initialScrollTop === "number" ? _this.props.initialScrollTop : 0, scrollUpdateWasRequested: false, verticalScrollDirection: "forward" }; _this._callOnItemsRendered = void 0; _this._callOnItemsRendered = memoizeOne(function(overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) { return _this.props.onItemsRendered({ overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex }); }); _this._callOnScroll = void 0; _this._callOnScroll = memoizeOne(function(scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) { return _this.props.onScroll({ horizontalScrollDirection, scrollLeft, scrollTop, verticalScrollDirection, scrollUpdateWasRequested }); }); _this._getItemStyle = void 0; _this._getItemStyle = function(rowIndex, columnIndex) { var _this$props = _this.props, columnWidth = _this$props.columnWidth, direction = _this$props.direction, rowHeight = _this$props.rowHeight; var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight); var key2 = rowIndex + ":" + columnIndex; var style; if (itemStyleCache.hasOwnProperty(key2)) { style = itemStyleCache[key2]; } else { var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps); var isRtl = direction === "rtl"; itemStyleCache[key2] = style = { position: "absolute", left: isRtl ? void 0 : _offset, right: isRtl ? _offset : void 0, top: getRowOffset(_this.props, rowIndex, _this._instanceProps), height: getRowHeight(_this.props, rowIndex, _this._instanceProps), width: getColumnWidth(_this.props, columnIndex, _this._instanceProps) }; } return style; }; _this._getItemStyleCache = void 0; _this._getItemStyleCache = memoizeOne(function(_2, __, ___) { return {}; }); _this._onScroll = function(event) { var _event$currentTarget = event.currentTarget, clientHeight = _event$currentTarget.clientHeight, clientWidth = _event$currentTarget.clientWidth, scrollLeft = _event$currentTarget.scrollLeft, scrollTop = _event$currentTarget.scrollTop, scrollHeight = _event$currentTarget.scrollHeight, scrollWidth = _event$currentTarget.scrollWidth; _this.setState(function(prevState) { if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) { return null; } var direction = _this.props.direction; var calculatedScrollLeft = scrollLeft; if (direction === "rtl") { switch (getRTLOffsetType()) { case "negative": calculatedScrollLeft = -scrollLeft; break; case "positive-descending": calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft; break; } } calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth)); var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)); return { isScrolling: true, horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? "forward" : "backward", scrollLeft: calculatedScrollLeft, scrollTop: calculatedScrollTop, verticalScrollDirection: prevState.scrollTop < scrollTop ? "forward" : "backward", scrollUpdateWasRequested: false }; }, _this._resetIsScrollingDebounced); }; _this._outerRefSetter = function(ref) { var outerRef = _this.props.outerRef; _this._outerRef = ref; if (typeof outerRef === "function") { outerRef(ref); } else if (outerRef != null && typeof outerRef === "object" && outerRef.hasOwnProperty("current")) { outerRef.current = ref; } }; _this._resetIsScrollingDebounced = function() { if (_this._resetIsScrollingTimeoutId !== null) { cancelTimeout(_this._resetIsScrollingTimeoutId); } _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL); }; _this._resetIsScrolling = function() { _this._resetIsScrollingTimeoutId = null; _this.setState({ isScrolling: false }, function() { _this._getItemStyleCache(-1); }); }; return _this; } Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) { validateSharedProps(nextProps, prevState); validateProps(nextProps); return null; }; var _proto = Grid.prototype; _proto.scrollTo = function scrollTo(_ref3) { var scrollLeft = _ref3.scrollLeft, scrollTop = _ref3.scrollTop; if (scrollLeft !== void 0) { scrollLeft = Math.max(0, scrollLeft); } if (scrollTop !== void 0) { scrollTop = Math.max(0, scrollTop); } this.setState(function(prevState) { if (scrollLeft === void 0) { scrollLeft = prevState.scrollLeft; } if (scrollTop === void 0) { scrollTop = prevState.scrollTop; } if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) { return null; } return { horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? "forward" : "backward", scrollLeft, scrollTop, scrollUpdateWasRequested: true, verticalScrollDirection: prevState.scrollTop < scrollTop ? "forward" : "backward" }; }, this._resetIsScrollingDebounced); }; _proto.scrollToItem = function scrollToItem(_ref4) { var _ref4$align = _ref4.align, align = _ref4$align === void 0 ? "auto" : _ref4$align, columnIndex = _ref4.columnIndex, rowIndex = _ref4.rowIndex; var _this$props2 = this.props, columnCount = _this$props2.columnCount, height = _this$props2.height, rowCount = _this$props2.rowCount, width = _this$props2.width; var _this$state = this.state, scrollLeft = _this$state.scrollLeft, scrollTop = _this$state.scrollTop; var scrollbarSize = getScrollbarSize(); if (columnIndex !== void 0) { columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1)); } if (rowIndex !== void 0) { rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1)); } var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps); var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0; var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0; this.scrollTo({ scrollLeft: columnIndex !== void 0 ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft, scrollTop: rowIndex !== void 0 ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop }); }; _proto.componentDidMount = function componentDidMount() { var _this$props3 = this.props, initialScrollLeft = _this$props3.initialScrollLeft, initialScrollTop = _this$props3.initialScrollTop; if (this._outerRef != null) { var outerRef = this._outerRef; if (typeof initialScrollLeft === "number") { outerRef.scrollLeft = initialScrollLeft; } if (typeof initialScrollTop === "number") { outerRef.scrollTop = initialScrollTop; } } this._callPropsCallbacks(); }; _proto.componentDidUpdate = function componentDidUpdate() { var direction = this.props.direction; var _this$state2 = this.state, scrollLeft = _this$state2.scrollLeft, scrollTop = _this$state2.scrollTop, scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested; if (scrollUpdateWasRequested && this._outerRef != null) { var outerRef = this._outerRef; if (direction === "rtl") { switch (getRTLOffsetType()) { case "negative": outerRef.scrollLeft = -scrollLeft; break; case "positive-ascending": outerRef.scrollLeft = scrollLeft; break; default: var clientWidth = outerRef.clientWidth, scrollWidth = outerRef.scrollWidth; outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft; break; } } else { outerRef.scrollLeft = Math.max(0, scrollLeft); } outerRef.scrollTop = Math.max(0, scrollTop); } this._callPropsCallbacks(); }; _proto.componentWillUnmount = function componentWillUnmount() { if (this._resetIsScrollingTimeoutId !== null) { cancelTimeout(this._resetIsScrollingTimeoutId); } }; _proto.render = function render() { var _this$props4 = this.props, children = _this$props4.children, className = _this$props4.className, columnCount = _this$props4.columnCount, direction = _this$props4.direction, height = _this$props4.height, innerRef = _this$props4.innerRef, innerElementType = _this$props4.innerElementType, innerTagName = _this$props4.innerTagName, itemData = _this$props4.itemData, _this$props4$itemKey = _this$props4.itemKey, itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey, outerElementType = _this$props4.outerElementType, outerTagName = _this$props4.outerTagName, rowCount = _this$props4.rowCount, style = _this$props4.style, useIsScrolling = _this$props4.useIsScrolling, width = _this$props4.width; var isScrolling = this.state.isScrolling; var _this$_getHorizontalR = this._getHorizontalRangeToRender(), columnStartIndex = _this$_getHorizontalR[0], columnStopIndex = _this$_getHorizontalR[1]; var _this$_getVerticalRan = this._getVerticalRangeToRender(), rowStartIndex = _this$_getVerticalRan[0], rowStopIndex = _this$_getVerticalRan[1]; var items = []; if (columnCount > 0 && rowCount) { for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) { for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) { items.push(react.exports.createElement(children, { columnIndex: _columnIndex, data: itemData, isScrolling: useIsScrolling ? isScrolling : void 0, key: itemKey({ columnIndex: _columnIndex, data: itemData, rowIndex: _rowIndex }), rowIndex: _rowIndex, style: this._getItemStyle(_rowIndex, _columnIndex) })); } } } var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps); var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); return react.exports.createElement(outerElementType || outerTagName || "div", { className, onScroll: this._onScroll, ref: this._outerRefSetter, style: _extends$5({ position: "relative", height, width, overflow: "auto", WebkitOverflowScrolling: "touch", willChange: "transform", direction }, style) }, react.exports.createElement(innerElementType || innerTagName || "div", { children: items, ref: innerRef, style: { height: estimatedTotalHeight, pointerEvents: isScrolling ? "none" : void 0, width: estimatedTotalWidth } })); }; _proto._callPropsCallbacks = function _callPropsCallbacks() { var _this$props5 = this.props, columnCount = _this$props5.columnCount, onItemsRendered = _this$props5.onItemsRendered, onScroll = _this$props5.onScroll, rowCount = _this$props5.rowCount; if (typeof onItemsRendered === "function") { if (columnCount > 0 && rowCount > 0) { var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(), _overscanColumnStartIndex = _this$_getHorizontalR2[0], _overscanColumnStopIndex = _this$_getHorizontalR2[1], _visibleColumnStartIndex = _this$_getHorizontalR2[2], _visibleColumnStopIndex = _this$_getHorizontalR2[3]; var _this$_getVerticalRan2 = this._getVerticalRangeToRender(), _overscanRowStartIndex = _this$_getVerticalRan2[0], _overscanRowStopIndex = _this$_getVerticalRan2[1], _visibleRowStartIndex = _this$_getVerticalRan2[2], _visibleRowStopIndex = _this$_getVerticalRan2[3]; this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex); } } if (typeof onScroll === "function") { var _this$state3 = this.state, _horizontalScrollDirection = _this$state3.horizontalScrollDirection, _scrollLeft = _this$state3.scrollLeft, _scrollTop = _this$state3.scrollTop, _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested, _verticalScrollDirection = _this$state3.verticalScrollDirection; this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested); } }; _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() { var _this$props6 = this.props, columnCount = _this$props6.columnCount, overscanColumnCount = _this$props6.overscanColumnCount, overscanColumnsCount = _this$props6.overscanColumnsCount, overscanCount = _this$props6.overscanCount, rowCount = _this$props6.rowCount; var _this$state4 = this.state, horizontalScrollDirection = _this$state4.horizontalScrollDirection, isScrolling = _this$state4.isScrolling, scrollLeft = _this$state4.scrollLeft; var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1; if (columnCount === 0 || rowCount === 0) { return [0, 0, 0, 0]; } var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps); var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); var overscanBackward = !isScrolling || horizontalScrollDirection === "backward" ? Math.max(1, overscanCountResolved) : 1; var overscanForward = !isScrolling || horizontalScrollDirection === "forward" ? Math.max(1, overscanCountResolved) : 1; return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex]; }; _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() { var _this$props7 = this.props, columnCount = _this$props7.columnCount, overscanCount = _this$props7.overscanCount, overscanRowCount = _this$props7.overscanRowCount, overscanRowsCount = _this$props7.overscanRowsCount, rowCount = _this$props7.rowCount; var _this$state5 = this.state, isScrolling = _this$state5.isScrolling, verticalScrollDirection = _this$state5.verticalScrollDirection, scrollTop = _this$state5.scrollTop; var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1; if (columnCount === 0 || rowCount === 0) { return [0, 0, 0, 0]; } var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps); var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); var overscanBackward = !isScrolling || verticalScrollDirection === "backward" ? Math.max(1, overscanCountResolved) : 1; var overscanForward = !isScrolling || verticalScrollDirection === "forward" ? Math.max(1, overscanCountResolved) : 1; return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex]; }; return Grid; }(react.exports.PureComponent), _class2.defaultProps = { direction: "ltr", itemData: void 0, useIsScrolling: false }, _class2; } var validateSharedProps = function validateSharedProps2(_ref5, _ref6) { _ref5.children; _ref5.direction; _ref5.height; _ref5.innerTagName; _ref5.outerTagName; _ref5.overscanColumnsCount; _ref5.overscanCount; _ref5.overscanRowsCount; _ref5.width; _ref6.instance; }; var IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150; var defaultItemKey$1 = function defaultItemKey2(index2, data) { return index2; }; function createListComponent(_ref) { var _class2; var getItemOffset = _ref.getItemOffset, getEstimatedTotalSize = _ref.getEstimatedTotalSize, getItemSize = _ref.getItemSize, getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment, getStartIndexForOffset = _ref.getStartIndexForOffset, getStopIndexForStartIndex = _ref.getStopIndexForStartIndex, initInstanceProps = _ref.initInstanceProps, shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange, validateProps = _ref.validateProps; return _class2 = /* @__PURE__ */ function(_PureComponent) { _inheritsLoose(List2, _PureComponent); function List2(props) { var _this; _this = _PureComponent.call(this, props) || this; _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this)); _this._outerRef = void 0; _this._resetIsScrollingTimeoutId = null; _this.state = { instance: _assertThisInitialized(_this), isScrolling: false, scrollDirection: "forward", scrollOffset: typeof _this.props.initialScrollOffset === "number" ? _this.props.initialScrollOffset : 0, scrollUpdateWasRequested: false }; _this._callOnItemsRendered = void 0; _this._callOnItemsRendered = memoizeOne(function(overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) { return _this.props.onItemsRendered({ overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex }); }); _this._callOnScroll = void 0; _this._callOnScroll = memoizeOne(function(scrollDirection, scrollOffset, scrollUpdateWasRequested) { return _this.props.onScroll({ scrollDirection, scrollOffset, scrollUpdateWasRequested }); }); _this._getItemStyle = void 0; _this._getItemStyle = function(index2) { var _this$props = _this.props, direction = _this$props.direction, itemSize = _this$props.itemSize, layout = _this$props.layout; var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction); var style; if (itemStyleCache.hasOwnProperty(index2)) { style = itemStyleCache[index2]; } else { var _offset = getItemOffset(_this.props, index2, _this._instanceProps); var size2 = getItemSize(_this.props, index2, _this._instanceProps); var isHorizontal = direction === "horizontal" || layout === "horizontal"; var isRtl = direction === "rtl"; var offsetHorizontal = isHorizontal ? _offset : 0; itemStyleCache[index2] = style = { position: "absolute", left: isRtl ? void 0 : offsetHorizontal, right: isRtl ? offsetHorizontal : void 0, top: !isHorizontal ? _offset : 0, height: !isHorizontal ? size2 : "100%", width: isHorizontal ? size2 : "100%" }; } return style; }; _this._getItemStyleCache = void 0; _this._getItemStyleCache = memoizeOne(function(_2, __, ___) { return {}; }); _this._onScrollHorizontal = function(event) { var _event$currentTarget = event.currentTarget, clientWidth = _event$currentTarget.clientWidth, scrollLeft = _event$currentTarget.scrollLeft, scrollWidth = _event$currentTarget.scrollWidth; _this.setState(function(prevState) { if (prevState.scrollOffset === scrollLeft) { return null; } var direction = _this.props.direction; var scrollOffset = scrollLeft; if (direction === "rtl") { switch (getRTLOffsetType()) { case "negative": scrollOffset = -scrollLeft; break; case "positive-descending": scrollOffset = scrollWidth - clientWidth - scrollLeft; break; } } scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth)); return { isScrolling: true, scrollDirection: prevState.scrollOffset < scrollLeft ? "forward" : "backward", scrollOffset, scrollUpdateWasRequested: false }; }, _this._resetIsScrollingDebounced); }; _this._onScrollVertical = function(event) { var _event$currentTarget2 = event.currentTarget, clientHeight = _event$currentTarget2.clientHeight, scrollHeight = _event$currentTarget2.scrollHeight, scrollTop = _event$currentTarget2.scrollTop; _this.setState(function(prevState) { if (prevState.scrollOffset === scrollTop) { return null; } var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)); return { isScrolling: true, scrollDirection: prevState.scrollOffset < scrollOffset ? "forward" : "backward", scrollOffset, scrollUpdateWasRequested: false }; }, _this._resetIsScrollingDebounced); }; _this._outerRefSetter = function(ref) { var outerRef = _this.props.outerRef; _this._outerRef = ref; if (typeof outerRef === "function") { outerRef(ref); } else if (outerRef != null && typeof outerRef === "object" && outerRef.hasOwnProperty("current")) { outerRef.current = ref; } }; _this._resetIsScrollingDebounced = function() { if (_this._resetIsScrollingTimeoutId !== null) { cancelTimeout(_this._resetIsScrollingTimeoutId); } _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1); }; _this._resetIsScrolling = function() { _this._resetIsScrollingTimeoutId = null; _this.setState({ isScrolling: false }, function() { _this._getItemStyleCache(-1, null); }); }; return _this; } List2.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) { validateSharedProps$1(nextProps, prevState); validateProps(nextProps); return null; }; var _proto = List2.prototype; _proto.scrollTo = function scrollTo(scrollOffset) { scrollOffset = Math.max(0, scrollOffset); this.setState(function(prevState) { if (prevState.scrollOffset === scrollOffset) { return null; } return { scrollDirection: prevState.scrollOffset < scrollOffset ? "forward" : "backward", scrollOffset, scrollUpdateWasRequested: true }; }, this._resetIsScrollingDebounced); }; _proto.scrollToItem = function scrollToItem(index2, align) { if (align === void 0) { align = "auto"; } var _this$props2 = this.props, itemCount = _this$props2.itemCount, layout = _this$props2.layout; var scrollOffset = this.state.scrollOffset; index2 = Math.max(0, Math.min(index2, itemCount - 1)); var scrollbarSize = 0; if (this._outerRef) { var outerRef = this._outerRef; if (layout === "vertical") { scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0; } else { scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0; } } this.scrollTo(getOffsetForIndexAndAlignment(this.props, index2, align, scrollOffset, this._instanceProps, scrollbarSize)); }; _proto.componentDidMount = function componentDidMount() { var _this$props3 = this.props, direction = _this$props3.direction, initialScrollOffset = _this$props3.initialScrollOffset, layout = _this$props3.layout; if (typeof initialScrollOffset === "number" && this._outerRef != null) { var outerRef = this._outerRef; if (direction === "horizontal" || layout === "horizontal") { outerRef.scrollLeft = initialScrollOffset; } else { outerRef.scrollTop = initialScrollOffset; } } this._callPropsCallbacks(); }; _proto.componentDidUpdate = function componentDidUpdate() { var _this$props4 = this.props, direction = _this$props4.direction, layout = _this$props4.layout; var _this$state = this.state, scrollOffset = _this$state.scrollOffset, scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested; if (scrollUpdateWasRequested && this._outerRef != null) { var outerRef = this._outerRef; if (direction === "horizontal" || layout === "horizontal") { if (direction === "rtl") { switch (getRTLOffsetType()) { case "negative": outerRef.scrollLeft = -scrollOffset; break; case "positive-ascending": outerRef.scrollLeft = scrollOffset; break; default: var clientWidth = outerRef.clientWidth, scrollWidth = outerRef.scrollWidth; outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset; break; } } else { outerRef.scrollLeft = scrollOffset; } } else { outerRef.scrollTop = scrollOffset; } } this._callPropsCallbacks(); }; _proto.componentWillUnmount = function componentWillUnmount() { if (this._resetIsScrollingTimeoutId !== null) { cancelTimeout(this._resetIsScrollingTimeoutId); } }; _proto.render = function render() { var _this$props5 = this.props, children = _this$props5.children, className = _this$props5.className, direction = _this$props5.direction, height = _this$props5.height, innerRef = _this$props5.innerRef, innerElementType = _this$props5.innerElementType, innerTagName = _this$props5.innerTagName, itemCount = _this$props5.itemCount, itemData = _this$props5.itemData, _this$props5$itemKey = _this$props5.itemKey, itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey, layout = _this$props5.layout, outerElementType = _this$props5.outerElementType, outerTagName = _this$props5.outerTagName, style = _this$props5.style, useIsScrolling = _this$props5.useIsScrolling, width = _this$props5.width; var isScrolling = this.state.isScrolling; var isHorizontal = direction === "horizontal" || layout === "horizontal"; var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical; var _this$_getRangeToRend = this._getRangeToRender(), startIndex = _this$_getRangeToRend[0], stopIndex = _this$_getRangeToRend[1]; var items = []; if (itemCount > 0) { for (var _index = startIndex; _index <= stopIndex; _index++) { items.push(react.exports.createElement(children, { data: itemData, key: itemKey(_index, itemData), index: _index, isScrolling: useIsScrolling ? isScrolling : void 0, style: this._getItemStyle(_index) })); } } var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps); return react.exports.createElement(outerElementType || outerTagName || "div", { className, onScroll, ref: this._outerRefSetter, style: _extends$5({ position: "relative", height, width, overflow: "auto", WebkitOverflowScrolling: "touch", willChange: "transform", direction }, style) }, react.exports.createElement(innerElementType || innerTagName || "div", { children: items, ref: innerRef, style: { height: isHorizontal ? "100%" : estimatedTotalSize, pointerEvents: isScrolling ? "none" : void 0, width: isHorizontal ? estimatedTotalSize : "100%" } })); }; _proto._callPropsCallbacks = function _callPropsCallbacks() { if (typeof this.props.onItemsRendered === "function") { var itemCount = this.props.itemCount; if (itemCount > 0) { var _this$_getRangeToRend2 = this._getRangeToRender(), _overscanStartIndex = _this$_getRangeToRend2[0], _overscanStopIndex = _this$_getRangeToRend2[1], _visibleStartIndex = _this$_getRangeToRend2[2], _visibleStopIndex = _this$_getRangeToRend2[3]; this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex); } } if (typeof this.props.onScroll === "function") { var _this$state2 = this.state, _scrollDirection = _this$state2.scrollDirection, _scrollOffset = _this$state2.scrollOffset, _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested; this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested); } }; _proto._getRangeToRender = function _getRangeToRender() { var _this$props6 = this.props, itemCount = _this$props6.itemCount, overscanCount = _this$props6.overscanCount; var _this$state3 = this.state, isScrolling = _this$state3.isScrolling, scrollDirection = _this$state3.scrollDirection, scrollOffset = _this$state3.scrollOffset; if (itemCount === 0) { return [0, 0, 0, 0]; } var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps); var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); var overscanBackward = !isScrolling || scrollDirection === "backward" ? Math.max(1, overscanCount) : 1; var overscanForward = !isScrolling || scrollDirection === "forward" ? Math.max(1, overscanCount) : 1; return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex]; }; return List2; }(react.exports.PureComponent), _class2.defaultProps = { direction: "ltr", itemData: void 0, layout: "vertical", overscanCount: 2, useIsScrolling: false }, _class2; } var validateSharedProps$1 = function validateSharedProps2(_ref2, _ref3) { _ref2.children; _ref2.direction; _ref2.height; _ref2.layout; _ref2.innerTagName; _ref2.outerTagName; _ref2.width; _ref3.instance; }; var FixedSizeGrid = /* @__PURE__ */ createGridComponent({ getColumnOffset: function getColumnOffset(_ref, index2) { var columnWidth = _ref.columnWidth; return index2 * columnWidth; }, getColumnWidth: function getColumnWidth(_ref2, index2) { var columnWidth = _ref2.columnWidth; return columnWidth; }, getRowOffset: function getRowOffset(_ref3, index2) { var rowHeight = _ref3.rowHeight; return index2 * rowHeight; }, getRowHeight: function getRowHeight(_ref4, index2) { var rowHeight = _ref4.rowHeight; return rowHeight; }, getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) { var rowCount = _ref5.rowCount, rowHeight = _ref5.rowHeight; return rowHeight * rowCount; }, getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) { var columnCount = _ref6.columnCount, columnWidth = _ref6.columnWidth; return columnWidth * columnCount; }, getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) { var columnCount = _ref7.columnCount, columnWidth = _ref7.columnWidth, width = _ref7.width; var lastColumnOffset = Math.max(0, columnCount * columnWidth - width); var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth); var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth); if (align === "smart") { if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) { align = "auto"; } else { align = "center"; } } switch (align) { case "start": return maxOffset; case "end": return minOffset; case "center": var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2); if (middleOffset < Math.ceil(width / 2)) { return 0; } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) { return lastColumnOffset; } else { return middleOffset; } case "auto": default: if (scrollLeft >= minOffset && scrollLeft <= maxOffset) { return scrollLeft; } else if (minOffset > maxOffset) { return minOffset; } else if (scrollLeft < minOffset) { return minOffset; } else { return maxOffset; } } }, getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) { var rowHeight = _ref8.rowHeight, height = _ref8.height, rowCount = _ref8.rowCount; var lastRowOffset = Math.max(0, rowCount * rowHeight - height); var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight); var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight); if (align === "smart") { if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) { align = "auto"; } else { align = "center"; } } switch (align) { case "start": return maxOffset; case "end": return minOffset; case "center": var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2); if (middleOffset < Math.ceil(height / 2)) { return 0; } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) { return lastRowOffset; } else { return middleOffset; } case "auto": default: if (scrollTop >= minOffset && scrollTop <= maxOffset) { return scrollTop; } else if (minOffset > maxOffset) { return minOffset; } else if (scrollTop < minOffset) { return minOffset; } else { return maxOffset; } } }, getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) { var columnWidth = _ref9.columnWidth, columnCount = _ref9.columnCount; return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth))); }, getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) { var columnWidth = _ref10.columnWidth, columnCount = _ref10.columnCount, width = _ref10.width; var left = startIndex * columnWidth; var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth); return Math.max(0, Math.min( columnCount - 1, startIndex + numVisibleColumns - 1 )); }, getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) { var rowHeight = _ref11.rowHeight, rowCount = _ref11.rowCount; return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight))); }, getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) { var rowHeight = _ref12.rowHeight, rowCount = _ref12.rowCount, height = _ref12.height; var top2 = startIndex * rowHeight; var numVisibleRows = Math.ceil((height + scrollTop - top2) / rowHeight); return Math.max(0, Math.min( rowCount - 1, startIndex + numVisibleRows - 1 )); }, initInstanceProps: function initInstanceProps(props) { }, shouldResetStyleCacheOnItemSizeChange: true, validateProps: function validateProps(_ref13) { _ref13.columnWidth; _ref13.rowHeight; } }); var FixedSizeList = /* @__PURE__ */ createListComponent({ getItemOffset: function getItemOffset(_ref, index2) { var itemSize = _ref.itemSize; return index2 * itemSize; }, getItemSize: function getItemSize(_ref2, index2) { var itemSize = _ref2.itemSize; return itemSize; }, getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) { var itemCount = _ref3.itemCount, itemSize = _ref3.itemSize; return itemSize * itemCount; }, getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index2, align, scrollOffset, instanceProps, scrollbarSize) { var direction = _ref4.direction, height = _ref4.height, itemCount = _ref4.itemCount, itemSize = _ref4.itemSize, layout = _ref4.layout, width = _ref4.width; var isHorizontal = direction === "horizontal" || layout === "horizontal"; var size2 = isHorizontal ? width : height; var lastItemOffset = Math.max(0, itemCount * itemSize - size2); var maxOffset = Math.min(lastItemOffset, index2 * itemSize); var minOffset = Math.max(0, index2 * itemSize - size2 + itemSize + scrollbarSize); if (align === "smart") { if (scrollOffset >= minOffset - size2 && scrollOffset <= maxOffset + size2) { align = "auto"; } else { align = "center"; } } switch (align) { case "start": return maxOffset; case "end": return minOffset; case "center": { var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2); if (middleOffset < Math.ceil(size2 / 2)) { return 0; } else if (middleOffset > lastItemOffset + Math.floor(size2 / 2)) { return lastItemOffset; } else { return middleOffset; } } case "auto": default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) { return scrollOffset; } else if (scrollOffset < minOffset) { return minOffset; } else { return maxOffset; } } }, getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) { var itemCount = _ref5.itemCount, itemSize = _ref5.itemSize; return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize))); }, getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) { var direction = _ref6.direction, height = _ref6.height, itemCount = _ref6.itemCount, itemSize = _ref6.itemSize, layout = _ref6.layout, width = _ref6.width; var isHorizontal = direction === "horizontal" || layout === "horizontal"; var offset = startIndex * itemSize; var size2 = isHorizontal ? width : height; var numVisibleItems = Math.ceil((size2 + scrollOffset - offset) / itemSize); return Math.max(0, Math.min( itemCount - 1, startIndex + numVisibleItems - 1 )); }, initInstanceProps: function initInstanceProps(props) { }, shouldResetStyleCacheOnItemSizeChange: true, validateProps: function validateProps(_ref7) { _ref7.itemSize; } }); var FUNC_ERROR_TEXT = "Expected a function"; var NAN = 0 / 0; var symbolTag = "[object Symbol]"; var reTrim = /^\s+|\s+$/g; var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; var reIsBinary = /^0b[01]+$/i; var reIsOctal = /^0o[0-7]+$/i; var freeParseInt = parseInt; var freeGlobal = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal || freeSelf || Function("return this")(); var objectProto = Object.prototype; var objectToString = objectProto.toString; var nativeMax = Math.max, nativeMin = Math.min; var now = function() { return root.Date.now(); }; function debounce(func, wait, options) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject$1(options)) { leading = !!options.leading; maxing = "maxWait" in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = void 0; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { lastInvokeTime = time; timerId = setTimeout(timerExpired, wait); return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, result2 = wait - timeSinceLastCall; return maxing ? nativeMin(result2, maxWait - timeSinceLastInvoke) : result2; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = void 0; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = void 0; return result; } function cancel() { if (timerId !== void 0) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = void 0; } function flush() { return timerId === void 0 ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === void 0) { return leadingEdge(lastCallTime); } if (maxing) { timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === void 0) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } function isObject$1(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } function isObjectLike$1(value) { return !!value && typeof value == "object"; } function isSymbol(value) { return typeof value == "symbol" || isObjectLike$1(value) && objectToString.call(value) == symbolTag; } function toNumber(value) { if (typeof value == "number") { return value; } if (isSymbol(value)) { return NAN; } if (isObject$1(value)) { var other = typeof value.valueOf == "function" ? value.valueOf() : value; value = isObject$1(other) ? other + "" : other; } if (typeof value != "string") { return value === 0 ? value : +value; } value = value.replace(reTrim, ""); var isBinary2 = reIsBinary.test(value); return isBinary2 || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary2 ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } var lodash_debounce = debounce; const SymbolCharacterCell = (props) => { const characterGridCellItemData = props.data; const symbolCharacters = characterGridCellItemData.symbolCharacters; const itemIndex = props.rowIndex * characterGridCellItemData.numberOfColumns + props.columnIndex; const handleMouseEnter = () => { characterGridCellItemData.onSelectionChanged(itemIndex); }; const handleMouseDown3 = (event) => { event.preventDefault(); event.stopPropagation(); }; const handleMouseClick = (event) => { event.preventDefault(); event.stopPropagation(); characterGridCellItemData.onSelectionCommitted(); }; if (itemIndex < symbolCharacters.length) { const ch2 = symbolCharacters[itemIndex]; return /* @__PURE__ */ React.createElement( "div", { tabIndex: -1, style: props.style, className: "pm-symbol-grid-container", onClick: handleMouseClick, onMouseDown: handleMouseDown3, onMouseEnter: handleMouseEnter }, /* @__PURE__ */ React.createElement( "div", { className: `pm-symbol-grid-cell pm-grid-item pm-emoji-font ${characterGridCellItemData.selectedIndex === itemIndex ? characterGridCellItemData.selectedItemClassName : ""}` }, ch2.value || "" ) ); } else { return null; } }; const insert_symbolGridStyles = ""; const selectedItemClassName = "pm-grid-item-selected"; const SymbolCharacterGrid = React.forwardRef((props, ref) => { const columnWidth = Math.floor(props.width / props.numberOfColumns); const characterCellData = { symbolCharacters: props.symbolCharacters, numberOfColumns: props.numberOfColumns, selectedIndex: props.selectedIndex, onSelectionChanged: props.onSelectionChanged, onSelectionCommitted: props.onSelectionCommitted, selectedItemClassName }; const gridRef = React.useRef(null); const handleScroll = lodash_debounce(() => { var _a; (_a = gridRef.current) == null ? void 0 : _a.scrollToItem({ rowIndex: Math.floor(props.selectedIndex / props.numberOfColumns) }); }, 5); React.useEffect(handleScroll, [props.selectedIndex]); const handleKeyDown2 = (event) => { const newIndex = newIndexForKeyboardEvent( event, props.selectedIndex, props.numberOfColumns, props.symbolCharacters.length ); if (newIndex !== void 0) { props.onSelectionChanged(newIndex); event.preventDefault(); } }; return /* @__PURE__ */ React.createElement("div", { onKeyDown: handleKeyDown2, tabIndex: 0, ref }, /* @__PURE__ */ React.createElement( FixedSizeGrid, { columnCount: props.numberOfColumns, rowCount: Math.ceil(props.symbolCharacters.length / props.numberOfColumns), height: props.height, width: props.width + 1, rowHeight: columnWidth, columnWidth, itemData: characterCellData, className: "pm-symbol-grid", ref: gridRef }, SymbolCharacterCell )); }); function previous(currentIndex) { const newIndex = currentIndex - 1; return Math.max(0, newIndex); } function next(currentIndex, _numberOfColumns, numberOfCells) { const newIndex = currentIndex + 1; return Math.min(numberOfCells - 1, newIndex); } function prevRow(currentIndex, numberOfColumns) { const newIndex = currentIndex - numberOfColumns; return newIndex >= 0 ? newIndex : currentIndex; } function nextRow(currentIndex, numberOfColumns, numberOfCells) { const newIndex = currentIndex + numberOfColumns; return newIndex < numberOfCells ? newIndex : currentIndex; } function nextPage(currentIndex, numberOfColumns, numberOfCells) { const newIndex = currentIndex + 6 * numberOfColumns; return Math.min(numberOfCells - 1, newIndex); } function prevPage(currentIndex, numberOfColumns) { const newIndex = currentIndex - 6 * numberOfColumns; return Math.max(0, newIndex); } const newIndexForKeyboardEvent = (event, selectedIndex, numberOfColumns, numberOfCells) => { switch (event.key) { case "ArrowLeft": return previous(selectedIndex); case "ArrowUp": return prevRow(selectedIndex, numberOfColumns); case "ArrowRight": return next(selectedIndex, numberOfColumns, numberOfCells); case "ArrowDown": return nextRow(selectedIndex, numberOfColumns, numberOfCells); case "PageDown": return nextPage(selectedIndex, numberOfColumns, numberOfCells); case "PageUp": return prevPage(selectedIndex, numberOfColumns); case "Home": return 0; case "End": return numberOfCells - 1; default: return void 0; } }; const insert_symbolStyles = ""; const insert_symbolGridPreview = ""; const SymbolPreview = React.forwardRef((props, ref) => { var _a; return /* @__PURE__ */ React.createElement("div", { style: { height: "54px" }, className: "pm-popup-insert-symbol-preview-container", ref }, /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-preview-thumbnail" }, /* @__PURE__ */ React.createElement("div", { style: props.symbolPreviewStyle }, props.symbolCharacter.value), /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-preview-summary" }, /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-preview-name pm-text-color" }, props.ui.context.translateText(props.symbolCharacter.name)), /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-preview-markdown pm-light-text-color" }, props.symbolCharacter.markdown || `U+${(_a = props.symbolCharacter.codepoint) == null ? void 0 : _a.toString(16)}`))), /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-preview-action" }, props.children)); }); const InsertSymbolPopup = (props) => { const kPopupChromeHeight = 25; const popupHeight = props.size[0] - kPopupChromeHeight; const popupWidth = props.size[1]; const style = { ...props.style, height: popupHeight + "px", width: popupWidth + "px" }; const classNames = ["pm-popup-insert-symbol"].concat(props.classes || []); const gridHeight = popupHeight - 108; const gridWidth = popupWidth; const kNumberOfcolumns = 11; const [filterText, setFilterText] = React.useState(""); const [selectedSymbolGroup, setSelectedSymbolGroup] = React.useState(); const [selectedSymbolIndex, setSelectedSymbolIndex] = React.useState(0); const [preferenceChanged, setPreferenceChanged] = React.useState(0); const symbols2 = React.useMemo(() => props.symbolDataProvider.getSymbols(selectedSymbolGroup), [ selectedSymbolGroup, preferenceChanged, props.symbolDataProvider ]); const filteredSymbols = React.useMemo(() => props.symbolDataProvider.filterSymbols(filterText.toLowerCase(), symbols2), [ filterText, symbols2, props.symbolDataProvider ]); React.useEffect(() => { if (selectedSymbolIndex > filteredSymbols.length) { setSelectedSymbolIndex(Math.max(filteredSymbols.length - 1, 0)); } }, [selectedSymbolIndex, filteredSymbols]); let textRef; const onTextRef = (ref) => { textRef = ref; setTimeout(() => focusElement(textRef), 0); }; const selectRef = React.useRef(null); const gridRef = React.useRef(null); const preferenceRef = React.useRef(null); const options = props.symbolDataProvider.symbolGroupNames().map((name) => /* @__PURE__ */ React.createElement("option", { key: name, value: name }, props.ui.context.translateText(name))); const handleSelectChanged = (event) => { const value = event.target.selectedOptions[0].value; const selectedGroupName = props.symbolDataProvider.symbolGroupNames().find((name) => name === value); if (selectedGroupName) { setSelectedSymbolGroup(selectedGroupName); } }; const handleKeyboardEvent = (event) => { function lastElement() { if (preferenceRef.current !== null) { return preferenceRef; } return gridRef; } switch (event.key) { case "Escape": props.onClose(); event.preventDefault(); break; case "Tab": if (event.shiftKey && isElementFocused(textRef)) { focusElement(lastElement().current); event.preventDefault(); } else if (!event.shiftKey && isElementFocused(lastElement().current)) { focusElement(textRef); event.preventDefault(); } break; case "Enter": if (isElementFocused(textRef) || isElementFocused(gridRef.current)) { handleSelectedSymbolCommitted(); event.preventDefault(); } break; case "ArrowLeft": case "ArrowRight": case "ArrowUp": case "ArrowDown": case "PageUp": case "PageDown": if (isElementFocused(textRef) && !event.shiftKey && !event.altKey && !event.ctrlKey) { const newIndex = newIndexForKeyboardEvent( event, selectedSymbolIndex, kNumberOfcolumns, filteredSymbols.length ); if (newIndex !== void 0 && newIndex >= 0 && newIndex !== selectedSymbolIndex) { event.preventDefault(); setSelectedSymbolIndex(newIndex); } } break; } }; const handleSelectedSymbolChanged = (symbolIndex) => { setSelectedSymbolIndex(symbolIndex); }; const handleSelectedSymbolCommitted = () => { if (filteredSymbols.length > selectedSymbolIndex) { props.onInsertSymbol(filteredSymbols[selectedSymbolIndex], (textRef == null ? void 0 : textRef.value) || ""); } }; const handleTextChange = (event) => { setFilterText(event == null ? void 0 : event.target.value); }; const handlePreferencesChanged = () => { setPreferenceChanged(preferenceChanged + 1); }; const preferencesProps = { selectedSymbolIndex, context: props.ui.context, prefs: props.ui.prefs, onPreferencesChanged: handlePreferencesChanged, ref: preferenceRef }; const preferencesPanel = props.symbolDataProvider.symbolPreferencesPanel ? React.createElement(props.symbolDataProvider.symbolPreferencesPanel, preferencesProps) : void 0; return /* @__PURE__ */ React.createElement(Popup, { classes: classNames, style }, /* @__PURE__ */ React.createElement("div", { onKeyDown: handleKeyboardEvent }, /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-search-container", style: { width: gridWidth } }, /* @__PURE__ */ React.createElement( TextInput, { width: 20 + "ch", iconAdornment: props.searchImage, tabIndex: 0, className: "pm-popup-insert-symbol-search-textbox", placeholder: props.searchPlaceholder, onChange: handleTextChange, ref: onTextRef } ), /* @__PURE__ */ React.createElement( SelectInput, { tabIndex: 0, ref: selectRef, className: "pm-popup-insert-symbol-select-category", onChange: handleSelectChanged }, options )), /* @__PURE__ */ React.createElement("hr", { className: "pm-popup-insert-symbol-separator pm-border-background-color" }), /* @__PURE__ */ React.createElement("div", { className: "pm-popup-insert-symbol-grid-container" }, /* @__PURE__ */ React.createElement( SymbolCharacterGrid, { symbolCharacters: filteredSymbols, selectedIndex: selectedSymbolIndex, onSelectionChanged: handleSelectedSymbolChanged, onSelectionCommitted: handleSelectedSymbolCommitted, height: gridHeight, width: gridWidth, numberOfColumns: kNumberOfcolumns, ref: gridRef, ui: props.ui } ), /* @__PURE__ */ React.createElement( "div", { className: "pm-popup-insert-symbol-no-matching pm-light-text-color", style: { display: filteredSymbols.length > 0 ? "none" : "block" } }, "No matching symbols" )), /* @__PURE__ */ React.createElement("hr", { className: "pm-popup-insert-symbol-separator pm-border-background-color" }), filteredSymbols[selectedSymbolIndex] && /* @__PURE__ */ React.createElement( SymbolPreview, { symbolCharacter: filteredSymbols[selectedSymbolIndex], symbolPreviewStyle: props.symbolDataProvider.symbolPreviewStyle, ui: props.ui }, preferencesPanel ))); }; const kMinimumPanelPaddingToEdgeOfView = 5; const performInsertSymbol = (pluginKey2) => { return (state, dispatch, view) => { if (!isEnabled(state)) { return false; } if (dispatch && view) { const plugin2 = pluginKey2.get(state); plugin2.showPopup(view); } return true; }; }; function isEnabled(state) { return canInsertNode(state, state.schema.nodes.text); } class InsertSymbolPlugin extends Plugin { constructor(pluginKey2, dataProvider, ui2, events) { super({ key: pluginKey2, view: () => ({ update: () => { this.closePopup(); }, destroy: () => { this.closePopup(); this.scrollUnsubscribe(); window.document.removeEventListener("onfocus", this.focusChanged); } }) }); __publicField(this, "scrollUnsubscribe"); __publicField(this, "ui"); __publicField(this, "popup", null); __publicField(this, "dataProvider"); this.dataProvider = dataProvider; this.ui = ui2; this.closePopup = this.closePopup.bind(this); this.scrollUnsubscribe = events.subscribe(ScrollEvent, this.closePopup); this.focusChanged = this.focusChanged.bind(this); window.document.addEventListener("onfocus", this.focusChanged); } showPopup(view) { if (!this.popup) { const kHeight = 336; const kWidth = 450; const popup = window.document.createElement("div"); popup.tabIndex = 0; popup.style.position = "absolute"; popup.style.zIndex = "900"; applyStyles(popup, [], this.panelPositionStylesForCurrentSelection(view, kHeight, kWidth)); const root2 = createRoot(popup); root2.render(this.insertSymbolPopup(view, [kHeight, kWidth])); window.document.body.appendChild(popup); this.popup = { popup, root: root2 }; } } panelPositionStylesForCurrentSelection(view, height, width) { const selection = view.state.selection; const editorRect = view.dom.getBoundingClientRect(); const selectionCoords = view.coordsAtPos(selection.from); const maximumTopPosition = Math.min( selectionCoords.bottom, window.innerHeight - height - kMinimumPanelPaddingToEdgeOfView ); const minimumTopPosition = editorRect.y; const popupTopPosition = Math.max(minimumTopPosition, maximumTopPosition); const maximumLeftPosition = Math.min( selectionCoords.right, window.innerWidth - width - kMinimumPanelPaddingToEdgeOfView ); const minimumLeftPosition = editorRect.x; const popupLeftPosition = Math.max(minimumLeftPosition, maximumLeftPosition); const styles2 = { top: popupTopPosition + "px", left: popupLeftPosition + "px" }; return styles2; } focusChanged() { var _a, _b; if (window.document.activeElement !== ((_a = this.popup) == null ? void 0 : _a.popup) && !((_b = this.popup) == null ? void 0 : _b.popup.contains(window.document.activeElement))) { this.closePopup(); } } closePopup() { if (this.popup) { this.popup.root.unmount(); this.popup.popup.remove(); this.popup = null; } } insertSymbolPopup(view, size2) { const insertSymbol = (symbolCharacter, searchTerm) => { const tr = this.dataProvider.insertSymbolTransaction(symbolCharacter, searchTerm, view.state); view.dispatch(tr); view.focus(); }; const closePopup = () => { this.closePopup(); view.focus(); }; return /* @__PURE__ */ React.createElement( InsertSymbolPopup, { symbolDataProvider: this.dataProvider, onClose: closePopup, onInsertSymbol: insertSymbol, enabled: isEnabled(view.state), size: size2, searchImage: this.ui.images.search, searchPlaceholder: this.ui.context.translateText(this.dataProvider.filterPlaceholderHint), ui: this.ui } ); } } const symbols = [ { name: "Miscellaneous", symbols: [ { name: "NO-BREAK SPACE", value: "\xA0", codepoint: 160 }, { name: "INVERTED EXCLAMATION MARK", value: "\xA1", codepoint: 161 }, { name: "CENT SIGN", value: "\xA2", codepoint: 162 }, { name: "POUND SIGN", value: "\xA3", codepoint: 163 }, { name: "CURRENCY SIGN", value: "\xA4", codepoint: 164 }, { name: "YEN SIGN", value: "\xA5", codepoint: 165 }, { name: "BROKEN BAR", value: "\xA6", codepoint: 166 }, { name: "SECTION SIGN", value: "\xA7", codepoint: 167 }, { name: "DIAERESIS", value: "\xA8", codepoint: 168 }, { name: "FEMININE ORDINAL INDICATOR", value: "\xAA", codepoint: 170 }, { name: "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK", value: "\xAB", codepoint: 171 }, { name: "NOT SIGN", value: "\xAC", codepoint: 172 }, { name: "MACRON", value: "\xAF", codepoint: 175 }, { name: "DEGREE SIGN", value: "\xB0", codepoint: 176 }, { name: "PLUS-MINUS SIGN", value: "\xB1", codepoint: 177 }, { name: "SUPERSCRIPT TWO", value: "\xB2", codepoint: 178 }, { name: "SUPERSCRIPT THREE", value: "\xB3", codepoint: 179 }, { name: "ACUTE ACCENT", value: "\xB4", codepoint: 180 }, { name: "MICRO SIGN", value: "\xB5", codepoint: 181 }, { name: "PILCROW SIGN", value: "\xB6", codepoint: 182 }, { name: "MIDDLE DOT", value: "\xB7", codepoint: 183 }, { name: "CEDILLA", value: "\xB8", codepoint: 184 }, { name: "SUPERSCRIPT ONE", value: "\xB9", codepoint: 185 }, { name: "MASCULINE ORDINAL INDICATOR", value: "\xBA", codepoint: 186 }, { name: "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", value: "\xBB", codepoint: 187 }, { name: "VULGAR FRACTION ONE QUARTER", value: "\xBC", codepoint: 188 }, { name: "VULGAR FRACTION ONE HALF", value: "\xBD", codepoint: 189 }, { name: "VULGAR FRACTION THREE QUARTERS", value: "\xBE", codepoint: 190 }, { name: "INVERTED QUESTION MARK", value: "\xBF", codepoint: 191 }, { name: "LATIN CAPITAL LETTER A WITH GRAVE", value: "\xC0", codepoint: 192 }, { name: "LATIN CAPITAL LETTER A WITH ACUTE", value: "\xC1", codepoint: 193 }, { name: "LATIN CAPITAL LETTER A WITH CIRCUMFLEX", value: "\xC2", codepoint: 194 }, { name: "LATIN CAPITAL LETTER A WITH TILDE", value: "\xC3", codepoint: 195 }, { name: "LATIN CAPITAL LETTER A WITH DIAERESIS", value: "\xC4", codepoint: 196 }, { name: "LATIN CAPITAL LETTER A WITH RING ABOVE", value: "\xC5", codepoint: 197 }, { name: "LATIN CAPITAL LETTER AE", value: "\xC6", codepoint: 198 }, { name: "LATIN CAPITAL LETTER C WITH CEDILLA", value: "\xC7", codepoint: 199 }, { name: "LATIN CAPITAL LETTER E WITH GRAVE", value: "\xC8", codepoint: 200 }, { name: "LATIN CAPITAL LETTER E WITH ACUTE", value: "\xC9", codepoint: 201 }, { name: "LATIN CAPITAL LETTER E WITH CIRCUMFLEX", value: "\xCA", codepoint: 202 }, { name: "LATIN CAPITAL LETTER E WITH DIAERESIS", value: "\xCB", codepoint: 203 }, { name: "LATIN CAPITAL LETTER I WITH GRAVE", value: "\xCC", codepoint: 204 }, { name: "LATIN CAPITAL LETTER I WITH ACUTE", value: "\xCD", codepoint: 205 }, { name: "LATIN CAPITAL LETTER I WITH CIRCUMFLEX", value: "\xCE", codepoint: 206 }, { name: "LATIN CAPITAL LETTER I WITH DIAERESIS", value: "\xCF", codepoint: 207 }, { name: "LATIN CAPITAL LETTER ETH", value: "\xD0", codepoint: 208 }, { name: "LATIN CAPITAL LETTER N WITH TILDE", value: "\xD1", codepoint: 209 }, { name: "LATIN CAPITAL LETTER O WITH GRAVE", value: "\xD2", codepoint: 210 }, { name: "LATIN CAPITAL LETTER O WITH ACUTE", value: "\xD3", codepoint: 211 }, { name: "LATIN CAPITAL LETTER O WITH CIRCUMFLEX", value: "\xD4", codepoint: 212 }, { name: "LATIN CAPITAL LETTER O WITH TILDE", value: "\xD5", codepoint: 213 }, { name: "LATIN CAPITAL LETTER O WITH DIAERESIS", value: "\xD6", codepoint: 214 }, { name: "MULTIPLICATION SIGN", value: "\xD7", codepoint: 215 }, { name: "LATIN CAPITAL LETTER O WITH STROKE", value: "\xD8", codepoint: 216 }, { name: "LATIN CAPITAL LETTER U WITH GRAVE", value: "\xD9", codepoint: 217 }, { name: "LATIN CAPITAL LETTER U WITH ACUTE", value: "\xDA", codepoint: 218 }, { name: "LATIN CAPITAL LETTER U WITH CIRCUMFLEX", value: "\xDB", codepoint: 219 }, { name: "LATIN CAPITAL LETTER U WITH DIAERESIS", value: "\xDC", codepoint: 220 }, { name: "LATIN CAPITAL LETTER Y WITH ACUTE", value: "\xDD", codepoint: 221 }, { name: "LATIN CAPITAL LETTER THORN", value: "\xDE", codepoint: 222 }, { name: "LATIN SMALL LETTER SHARP S", value: "\xDF", codepoint: 223 }, { name: "LATIN SMALL LETTER A WITH GRAVE", value: "\xE0", codepoint: 224 }, { name: "LATIN SMALL LETTER A WITH ACUTE", value: "\xE1", codepoint: 225 }, { name: "LATIN SMALL LETTER A WITH CIRCUMFLEX", value: "\xE2", codepoint: 226 }, { name: "LATIN SMALL LETTER A WITH TILDE", value: "\xE3", codepoint: 227 }, { name: "LATIN SMALL LETTER A WITH DIAERESIS", value: "\xE4", codepoint: 228 }, { name: "LATIN SMALL LETTER A WITH RING ABOVE", value: "\xE5", codepoint: 229 }, { name: "LATIN SMALL LETTER AE", value: "\xE6", codepoint: 230 }, { name: "LATIN SMALL LETTER C WITH CEDILLA", value: "\xE7", codepoint: 231 }, { name: "LATIN SMALL LETTER E WITH GRAVE", value: "\xE8", codepoint: 232 }, { name: "LATIN SMALL LETTER E WITH ACUTE", value: "\xE9", codepoint: 233 }, { name: "LATIN SMALL LETTER E WITH CIRCUMFLEX", value: "\xEA", codepoint: 234 }, { name: "LATIN SMALL LETTER E WITH DIAERESIS", value: "\xEB", codepoint: 235 }, { name: "LATIN SMALL LETTER I WITH GRAVE", value: "\xEC", codepoint: 236 }, { name: "LATIN SMALL LETTER I WITH ACUTE", value: "\xED", codepoint: 237 }, { name: "LATIN SMALL LETTER I WITH CIRCUMFLEX", value: "\xEE", codepoint: 238 }, { name: "LATIN SMALL LETTER I WITH DIAERESIS", value: "\xEF", codepoint: 239 }, { name: "LATIN SMALL LETTER ETH", value: "\xF0", codepoint: 240 }, { name: "LATIN SMALL LETTER N WITH TILDE", value: "\xF1", codepoint: 241 }, { name: "LATIN SMALL LETTER O WITH GRAVE", value: "\xF2", codepoint: 242 }, { name: "LATIN SMALL LETTER O WITH ACUTE", value: "\xF3", codepoint: 243 }, { name: "LATIN SMALL LETTER O WITH CIRCUMFLEX", value: "\xF4", codepoint: 244 }, { name: "LATIN SMALL LETTER O WITH TILDE", value: "\xF5", codepoint: 245 }, { name: "LATIN SMALL LETTER O WITH DIAERESIS", value: "\xF6", codepoint: 246 }, { name: "DIVISION SIGN", value: "\xF7", codepoint: 247 }, { name: "LATIN SMALL LETTER O WITH STROKE", value: "\xF8", codepoint: 248 }, { name: "LATIN SMALL LETTER U WITH GRAVE", value: "\xF9", codepoint: 249 }, { name: "LATIN SMALL LETTER U WITH ACUTE", value: "\xFA", codepoint: 250 }, { name: "LATIN SMALL LETTER U WITH CIRCUMFLEX", value: "\xFB", codepoint: 251 }, { name: "LATIN SMALL LETTER U WITH DIAERESIS", value: "\xFC", codepoint: 252 }, { name: "LATIN SMALL LETTER Y WITH ACUTE", value: "\xFD", codepoint: 253 }, { name: "LATIN SMALL LETTER THORN", value: "\xFE", codepoint: 254 }, { name: "LATIN SMALL LETTER Y WITH DIAERESIS", value: "\xFF", codepoint: 255 }, { name: "ACCOUNT OF", value: "\u2100", codepoint: 8448 }, { name: "ADDRESSED TO THE SUBJECT", value: "\u2101", codepoint: 8449 }, { name: "DOUBLE-STRUCK CAPITAL C", value: "\u2102", codepoint: 8450 }, { name: "DEGREE CELSIUS", value: "\u2103", codepoint: 8451 }, { name: "CENTRE LINE SYMBOL", value: "\u2104", codepoint: 8452 }, { name: "CARE OF", value: "\u2105", codepoint: 8453 }, { name: "CADA UNA", value: "\u2106", codepoint: 8454 }, { name: "EULER CONSTANT", value: "\u2107", codepoint: 8455 }, { name: "SCRUPLE", value: "\u2108", codepoint: 8456 }, { name: "DEGREE FAHRENHEIT", value: "\u2109", codepoint: 8457 }, { name: "SCRIPT SMALL G", value: "\u210A", codepoint: 8458 }, { name: "SCRIPT CAPITAL H", value: "\u210B", codepoint: 8459 }, { name: "BLACK-LETTER CAPITAL H", value: "\u210C", codepoint: 8460 }, { name: "DOUBLE-STRUCK CAPITAL H", value: "\u210D", codepoint: 8461 }, { name: "PLANCK CONSTANT", value: "\u210E", codepoint: 8462 }, { name: "PLANCK CONSTANT OVER TWO PI", value: "\u210F", codepoint: 8463 }, { name: "SCRIPT CAPITAL I", value: "\u2110", codepoint: 8464 }, { name: "BLACK-LETTER CAPITAL I", value: "\u2111", codepoint: 8465 }, { name: "SCRIPT CAPITAL L", value: "\u2112", codepoint: 8466 }, { name: "SCRIPT SMALL L", value: "\u2113", codepoint: 8467 }, { name: "L B BAR SYMBOL", value: "\u2114", codepoint: 8468 }, { name: "DOUBLE-STRUCK CAPITAL N", value: "\u2115", codepoint: 8469 }, { name: "NUMERO SIGN", value: "\u2116", codepoint: 8470 }, { name: "SOUND RECORDING COPYRIGHT", value: "\u2117", codepoint: 8471 }, { name: "SCRIPT CAPITAL P", value: "\u2118", codepoint: 8472 }, { name: "DOUBLE-STRUCK CAPITAL P", value: "\u2119", codepoint: 8473 }, { name: "DOUBLE-STRUCK CAPITAL Q", value: "\u211A", codepoint: 8474 }, { name: "SCRIPT CAPITAL R", value: "\u211B", codepoint: 8475 }, { name: "BLACK-LETTER CAPITAL R", value: "\u211C", codepoint: 8476 }, { name: "DOUBLE-STRUCK CAPITAL R", value: "\u211D", codepoint: 8477 }, { name: "PRESCRIPTION TAKE", value: "\u211E", codepoint: 8478 }, { name: "RESPONSE", value: "\u211F", codepoint: 8479 }, { name: "SERVICE MARK", value: "\u2120", codepoint: 8480 }, { name: "TELEPHONE SIGN", value: "\u2121", codepoint: 8481 }, { name: "VERSICLE", value: "\u2123", codepoint: 8483 }, { name: "DOUBLE-STRUCK CAPITAL Z", value: "\u2124", codepoint: 8484 }, { name: "OUNCE SIGN", value: "\u2125", codepoint: 8485 }, { name: "OHM SIGN", value: "\u2126", codepoint: 8486 }, { name: "INVERTED OHM SIGN", value: "\u2127", codepoint: 8487 }, { name: "BLACK-LETTER CAPITAL Z", value: "\u2128", codepoint: 8488 }, { name: "TURNED GREEK SMALL LETTER IOTA", value: "\u2129", codepoint: 8489 }, { name: "KELVIN SIGN", value: "\u212A", codepoint: 8490 }, { name: "ANGSTROM SIGN", value: "\u212B", codepoint: 8491 }, { name: "SCRIPT CAPITAL B", value: "\u212C", codepoint: 8492 }, { name: "BLACK-LETTER CAPITAL C", value: "\u212D", codepoint: 8493 }, { name: "ESTIMATED SYMBOL", value: "\u212E", codepoint: 8494 }, { name: "SCRIPT SMALL E", value: "\u212F", codepoint: 8495 }, { name: "SCRIPT CAPITAL E", value: "\u2130", codepoint: 8496 }, { name: "SCRIPT CAPITAL F", value: "\u2131", codepoint: 8497 }, { name: "TURNED CAPITAL F", value: "\u2132", codepoint: 8498 }, { name: "SCRIPT CAPITAL M", value: "\u2133", codepoint: 8499 }, { name: "SCRIPT SMALL O", value: "\u2134", codepoint: 8500 }, { name: "ALEF SYMBOL", value: "\u2135", codepoint: 8501 }, { name: "BET SYMBOL", value: "\u2136", codepoint: 8502 }, { name: "GIMEL SYMBOL", value: "\u2137", codepoint: 8503 }, { name: "DALET SYMBOL", value: "\u2138", codepoint: 8504 }, { name: "ROTATED CAPITAL Q", value: "\u213A", codepoint: 8506 }, { name: "FACSIMILE SIGN", value: "\u213B", codepoint: 8507 }, { name: "DOUBLE-STRUCK SMALL PI", value: "\u213C", codepoint: 8508 }, { name: "DOUBLE-STRUCK SMALL GAMMA", value: "\u213D", codepoint: 8509 }, { name: "DOUBLE-STRUCK CAPITAL GAMMA", value: "\u213E", codepoint: 8510 }, { name: "DOUBLE-STRUCK CAPITAL PI", value: "\u213F", codepoint: 8511 }, { name: "DOUBLE-STRUCK N-ARY SUMMATION", value: "\u2140", codepoint: 8512 }, { name: "TURNED SANS-SERIF CAPITAL G", value: "\u2141", codepoint: 8513 }, { name: "TURNED SANS-SERIF CAPITAL L", value: "\u2142", codepoint: 8514 }, { name: "REVERSED SANS-SERIF CAPITAL L", value: "\u2143", codepoint: 8515 }, { name: "TURNED SANS-SERIF CAPITAL Y", value: "\u2144", codepoint: 8516 }, { name: "DOUBLE-STRUCK ITALIC CAPITAL D", value: "\u2145", codepoint: 8517 }, { name: "DOUBLE-STRUCK ITALIC SMALL D", value: "\u2146", codepoint: 8518 }, { name: "DOUBLE-STRUCK ITALIC SMALL E", value: "\u2147", codepoint: 8519 }, { name: "DOUBLE-STRUCK ITALIC SMALL I", value: "\u2148", codepoint: 8520 }, { name: "DOUBLE-STRUCK ITALIC SMALL J", value: "\u2149", codepoint: 8521 }, { name: "PROPERTY LINE", value: "\u214A", codepoint: 8522 }, { name: "TURNED AMPERSAND", value: "\u214B", codepoint: 8523 }, { name: "PER SIGN", value: "\u214C", codepoint: 8524 }, { name: "AKTIESELSKAB", value: "\u214D", codepoint: 8525 }, { name: "TURNED SMALL F", value: "\u214E", codepoint: 8526 }, { name: "SYMBOL FOR SAMARITAN SOURCE", value: "\u214F", codepoint: 8527 }, { name: "CIRCLED DIGIT ONE", value: "\u2460", codepoint: 9312 }, { name: "CIRCLED DIGIT TWO", value: "\u2461", codepoint: 9313 }, { name: "CIRCLED DIGIT THREE", value: "\u2462", codepoint: 9314 }, { name: "CIRCLED DIGIT FOUR", value: "\u2463", codepoint: 9315 }, { name: "CIRCLED DIGIT FIVE", value: "\u2464", codepoint: 9316 }, { name: "CIRCLED DIGIT SIX", value: "\u2465", codepoint: 9317 }, { name: "CIRCLED DIGIT SEVEN", value: "\u2466", codepoint: 9318 }, { name: "CIRCLED DIGIT EIGHT", value: "\u2467", codepoint: 9319 }, { name: "CIRCLED DIGIT NINE", value: "\u2468", codepoint: 9320 }, { name: "CIRCLED NUMBER TEN", value: "\u2469", codepoint: 9321 }, { name: "CIRCLED NUMBER ELEVEN", value: "\u246A", codepoint: 9322 }, { name: "CIRCLED NUMBER TWELVE", value: "\u246B", codepoint: 9323 }, { name: "CIRCLED NUMBER THIRTEEN", value: "\u246C", codepoint: 9324 }, { name: "CIRCLED NUMBER FOURTEEN", value: "\u246D", codepoint: 9325 }, { name: "CIRCLED NUMBER FIFTEEN", value: "\u246E", codepoint: 9326 }, { name: "CIRCLED NUMBER SIXTEEN", value: "\u246F", codepoint: 9327 }, { name: "CIRCLED NUMBER SEVENTEEN", value: "\u2470", codepoint: 9328 }, { name: "CIRCLED NUMBER EIGHTEEN", value: "\u2471", codepoint: 9329 }, { name: "CIRCLED NUMBER NINETEEN", value: "\u2472", codepoint: 9330 }, { name: "CIRCLED NUMBER TWENTY", value: "\u2473", codepoint: 9331 }, { name: "PARENTHESIZED DIGIT ONE", value: "\u2474", codepoint: 9332 }, { name: "PARENTHESIZED DIGIT TWO", value: "\u2475", codepoint: 9333 }, { name: "PARENTHESIZED DIGIT THREE", value: "\u2476", codepoint: 9334 }, { name: "PARENTHESIZED DIGIT FOUR", value: "\u2477", codepoint: 9335 }, { name: "PARENTHESIZED DIGIT FIVE", value: "\u2478", codepoint: 9336 }, { name: "PARENTHESIZED DIGIT SIX", value: "\u2479", codepoint: 9337 }, { name: "PARENTHESIZED DIGIT SEVEN", value: "\u247A", codepoint: 9338 }, { name: "PARENTHESIZED DIGIT EIGHT", value: "\u247B", codepoint: 9339 }, { name: "PARENTHESIZED DIGIT NINE", value: "\u247C", codepoint: 9340 }, { name: "PARENTHESIZED NUMBER TEN", value: "\u247D", codepoint: 9341 }, { name: "PARENTHESIZED NUMBER ELEVEN", value: "\u247E", codepoint: 9342 }, { name: "PARENTHESIZED NUMBER TWELVE", value: "\u247F", codepoint: 9343 }, { name: "PARENTHESIZED NUMBER THIRTEEN", value: "\u2480", codepoint: 9344 }, { name: "PARENTHESIZED NUMBER FOURTEEN", value: "\u2481", codepoint: 9345 }, { name: "PARENTHESIZED NUMBER FIFTEEN", value: "\u2482", codepoint: 9346 }, { name: "PARENTHESIZED NUMBER SIXTEEN", value: "\u2483", codepoint: 9347 }, { name: "PARENTHESIZED NUMBER SEVENTEEN", value: "\u2484", codepoint: 9348 }, { name: "PARENTHESIZED NUMBER EIGHTEEN", value: "\u2485", codepoint: 9349 }, { name: "PARENTHESIZED NUMBER NINETEEN", value: "\u2486", codepoint: 9350 }, { name: "PARENTHESIZED NUMBER TWENTY", value: "\u2487", codepoint: 9351 }, { name: "DIGIT ONE FULL STOP", value: "\u2488", codepoint: 9352 }, { name: "DIGIT TWO FULL STOP", value: "\u2489", codepoint: 9353 }, { name: "DIGIT THREE FULL STOP", value: "\u248A", codepoint: 9354 }, { name: "DIGIT FOUR FULL STOP", value: "\u248B", codepoint: 9355 }, { name: "DIGIT FIVE FULL STOP", value: "\u248C", codepoint: 9356 }, { name: "DIGIT SIX FULL STOP", value: "\u248D", codepoint: 9357 }, { name: "DIGIT SEVEN FULL STOP", value: "\u248E", codepoint: 9358 }, { name: "DIGIT EIGHT FULL STOP", value: "\u248F", codepoint: 9359 }, { name: "DIGIT NINE FULL STOP", value: "\u2490", codepoint: 9360 }, { name: "NUMBER TEN FULL STOP", value: "\u2491", codepoint: 9361 }, { name: "NUMBER ELEVEN FULL STOP", value: "\u2492", codepoint: 9362 }, { name: "NUMBER TWELVE FULL STOP", value: "\u2493", codepoint: 9363 }, { name: "NUMBER THIRTEEN FULL STOP", value: "\u2494", codepoint: 9364 }, { name: "NUMBER FOURTEEN FULL STOP", value: "\u2495", codepoint: 9365 }, { name: "NUMBER FIFTEEN FULL STOP", value: "\u2496", codepoint: 9366 }, { name: "NUMBER SIXTEEN FULL STOP", value: "\u2497", codepoint: 9367 }, { name: "NUMBER SEVENTEEN FULL STOP", value: "\u2498", codepoint: 9368 }, { name: "NUMBER EIGHTEEN FULL STOP", value: "\u2499", codepoint: 9369 }, { name: "NUMBER NINETEEN FULL STOP", value: "\u249A", codepoint: 9370 }, { name: "NUMBER TWENTY FULL STOP", value: "\u249B", codepoint: 9371 }, { name: "PARENTHESIZED LATIN SMALL LETTER A", value: "\u249C", codepoint: 9372 }, { name: "PARENTHESIZED LATIN SMALL LETTER B", value: "\u249D", codepoint: 9373 }, { name: "PARENTHESIZED LATIN SMALL LETTER C", value: "\u249E", codepoint: 9374 }, { name: "PARENTHESIZED LATIN SMALL LETTER D", value: "\u249F", codepoint: 9375 }, { name: "PARENTHESIZED LATIN SMALL LETTER E", value: "\u24A0", codepoint: 9376 }, { name: "PARENTHESIZED LATIN SMALL LETTER F", value: "\u24A1", codepoint: 9377 }, { name: "PARENTHESIZED LATIN SMALL LETTER G", value: "\u24A2", codepoint: 9378 }, { name: "PARENTHESIZED LATIN SMALL LETTER H", value: "\u24A3", codepoint: 9379 }, { name: "PARENTHESIZED LATIN SMALL LETTER I", value: "\u24A4", codepoint: 9380 }, { name: "PARENTHESIZED LATIN SMALL LETTER J", value: "\u24A5", codepoint: 9381 }, { name: "PARENTHESIZED LATIN SMALL LETTER K", value: "\u24A6", codepoint: 9382 }, { name: "PARENTHESIZED LATIN SMALL LETTER L", value: "\u24A7", codepoint: 9383 }, { name: "PARENTHESIZED LATIN SMALL LETTER M", value: "\u24A8", codepoint: 9384 }, { name: "PARENTHESIZED LATIN SMALL LETTER N", value: "\u24A9", codepoint: 9385 }, { name: "PARENTHESIZED LATIN SMALL LETTER O", value: "\u24AA", codepoint: 9386 }, { name: "PARENTHESIZED LATIN SMALL LETTER P", value: "\u24AB", codepoint: 9387 }, { name: "PARENTHESIZED LATIN SMALL LETTER Q", value: "\u24AC", codepoint: 9388 }, { name: "PARENTHESIZED LATIN SMALL LETTER R", value: "\u24AD", codepoint: 9389 }, { name: "PARENTHESIZED LATIN SMALL LETTER S", value: "\u24AE", codepoint: 9390 }, { name: "PARENTHESIZED LATIN SMALL LETTER T", value: "\u24AF", codepoint: 9391 }, { name: "PARENTHESIZED LATIN SMALL LETTER U", value: "\u24B0", codepoint: 9392 }, { name: "PARENTHESIZED LATIN SMALL LETTER V", value: "\u24B1", codepoint: 9393 }, { name: "PARENTHESIZED LATIN SMALL LETTER W", value: "\u24B2", codepoint: 9394 }, { name: "PARENTHESIZED LATIN SMALL LETTER X", value: "\u24B3", codepoint: 9395 }, { name: "PARENTHESIZED LATIN SMALL LETTER Y", value: "\u24B4", codepoint: 9396 }, { name: "PARENTHESIZED LATIN SMALL LETTER Z", value: "\u24B5", codepoint: 9397 }, { name: "CIRCLED LATIN CAPITAL LETTER A", value: "\u24B6", codepoint: 9398 }, { name: "CIRCLED LATIN CAPITAL LETTER B", value: "\u24B7", codepoint: 9399 }, { name: "CIRCLED LATIN CAPITAL LETTER C", value: "\u24B8", codepoint: 9400 }, { name: "CIRCLED LATIN CAPITAL LETTER D", value: "\u24B9", codepoint: 9401 }, { name: "CIRCLED LATIN CAPITAL LETTER E", value: "\u24BA", codepoint: 9402 }, { name: "CIRCLED LATIN CAPITAL LETTER F", value: "\u24BB", codepoint: 9403 }, { name: "CIRCLED LATIN CAPITAL LETTER G", value: "\u24BC", codepoint: 9404 }, { name: "CIRCLED LATIN CAPITAL LETTER H", value: "\u24BD", codepoint: 9405 }, { name: "CIRCLED LATIN CAPITAL LETTER I", value: "\u24BE", codepoint: 9406 }, { name: "CIRCLED LATIN CAPITAL LETTER J", value: "\u24BF", codepoint: 9407 }, { name: "CIRCLED LATIN CAPITAL LETTER K", value: "\u24C0", codepoint: 9408 }, { name: "CIRCLED LATIN CAPITAL LETTER L", value: "\u24C1", codepoint: 9409 }, { name: "CIRCLED LATIN CAPITAL LETTER N", value: "\u24C3", codepoint: 9411 }, { name: "CIRCLED LATIN CAPITAL LETTER O", value: "\u24C4", codepoint: 9412 }, { name: "CIRCLED LATIN CAPITAL LETTER P", value: "\u24C5", codepoint: 9413 }, { name: "CIRCLED LATIN CAPITAL LETTER Q", value: "\u24C6", codepoint: 9414 }, { name: "CIRCLED LATIN CAPITAL LETTER R", value: "\u24C7", codepoint: 9415 }, { name: "CIRCLED LATIN CAPITAL LETTER S", value: "\u24C8", codepoint: 9416 }, { name: "CIRCLED LATIN CAPITAL LETTER T", value: "\u24C9", codepoint: 9417 }, { name: "CIRCLED LATIN CAPITAL LETTER U", value: "\u24CA", codepoint: 9418 }, { name: "CIRCLED LATIN CAPITAL LETTER V", value: "\u24CB", codepoint: 9419 }, { name: "CIRCLED LATIN CAPITAL LETTER W", value: "\u24CC", codepoint: 9420 }, { name: "CIRCLED LATIN CAPITAL LETTER X", value: "\u24CD", codepoint: 9421 }, { name: "CIRCLED LATIN CAPITAL LETTER Y", value: "\u24CE", codepoint: 9422 }, { name: "CIRCLED LATIN CAPITAL LETTER Z", value: "\u24CF", codepoint: 9423 }, { name: "CIRCLED LATIN SMALL LETTER A", value: "\u24D0", codepoint: 9424 }, { name: "CIRCLED LATIN SMALL LETTER B", value: "\u24D1", codepoint: 9425 }, { name: "CIRCLED LATIN SMALL LETTER C", value: "\u24D2", codepoint: 9426 }, { name: "CIRCLED LATIN SMALL LETTER D", value: "\u24D3", codepoint: 9427 }, { name: "CIRCLED LATIN SMALL LETTER E", value: "\u24D4", codepoint: 9428 }, { name: "CIRCLED LATIN SMALL LETTER F", value: "\u24D5", codepoint: 9429 }, { name: "CIRCLED LATIN SMALL LETTER G", value: "\u24D6", codepoint: 9430 }, { name: "CIRCLED LATIN SMALL LETTER H", value: "\u24D7", codepoint: 9431 }, { name: "CIRCLED LATIN SMALL LETTER I", value: "\u24D8", codepoint: 9432 }, { name: "CIRCLED LATIN SMALL LETTER J", value: "\u24D9", codepoint: 9433 }, { name: "CIRCLED LATIN SMALL LETTER K", value: "\u24DA", codepoint: 9434 }, { name: "CIRCLED LATIN SMALL LETTER L", value: "\u24DB", codepoint: 9435 }, { name: "CIRCLED LATIN SMALL LETTER M", value: "\u24DC", codepoint: 9436 }, { name: "CIRCLED LATIN SMALL LETTER N", value: "\u24DD", codepoint: 9437 }, { name: "CIRCLED LATIN SMALL LETTER O", value: "\u24DE", codepoint: 9438 }, { name: "CIRCLED LATIN SMALL LETTER P", value: "\u24DF", codepoint: 9439 }, { name: "CIRCLED LATIN SMALL LETTER Q", value: "\u24E0", codepoint: 9440 }, { name: "CIRCLED LATIN SMALL LETTER R", value: "\u24E1", codepoint: 9441 }, { name: "CIRCLED LATIN SMALL LETTER S", value: "\u24E2", codepoint: 9442 }, { name: "CIRCLED LATIN SMALL LETTER T", value: "\u24E3", codepoint: 9443 }, { name: "CIRCLED LATIN SMALL LETTER U", value: "\u24E4", codepoint: 9444 }, { name: "CIRCLED LATIN SMALL LETTER V", value: "\u24E5", codepoint: 9445 }, { name: "CIRCLED LATIN SMALL LETTER W", value: "\u24E6", codepoint: 9446 }, { name: "CIRCLED LATIN SMALL LETTER X", value: "\u24E7", codepoint: 9447 }, { name: "CIRCLED LATIN SMALL LETTER Y", value: "\u24E8", codepoint: 9448 }, { name: "CIRCLED LATIN SMALL LETTER Z", value: "\u24E9", codepoint: 9449 }, { name: "CIRCLED DIGIT ZERO", value: "\u24EA", codepoint: 9450 }, { name: "NEGATIVE CIRCLED NUMBER ELEVEN", value: "\u24EB", codepoint: 9451 }, { name: "NEGATIVE CIRCLED NUMBER TWELVE", value: "\u24EC", codepoint: 9452 }, { name: "NEGATIVE CIRCLED NUMBER THIRTEEN", value: "\u24ED", codepoint: 9453 }, { name: "NEGATIVE CIRCLED NUMBER FOURTEEN", value: "\u24EE", codepoint: 9454 }, { name: "NEGATIVE CIRCLED NUMBER FIFTEEN", value: "\u24EF", codepoint: 9455 }, { name: "NEGATIVE CIRCLED NUMBER SIXTEEN", value: "\u24F0", codepoint: 9456 }, { name: "NEGATIVE CIRCLED NUMBER SEVENTEEN", value: "\u24F1", codepoint: 9457 }, { name: "NEGATIVE CIRCLED NUMBER EIGHTEEN", value: "\u24F2", codepoint: 9458 }, { name: "NEGATIVE CIRCLED NUMBER NINETEEN", value: "\u24F3", codepoint: 9459 }, { name: "NEGATIVE CIRCLED NUMBER TWENTY", value: "\u24F4", codepoint: 9460 }, { name: "DOUBLE CIRCLED DIGIT ONE", value: "\u24F5", codepoint: 9461 }, { name: "DOUBLE CIRCLED DIGIT TWO", value: "\u24F6", codepoint: 9462 }, { name: "DOUBLE CIRCLED DIGIT THREE", value: "\u24F7", codepoint: 9463 }, { name: "DOUBLE CIRCLED DIGIT FOUR", value: "\u24F8", codepoint: 9464 }, { name: "DOUBLE CIRCLED DIGIT FIVE", value: "\u24F9", codepoint: 9465 }, { name: "DOUBLE CIRCLED DIGIT SIX", value: "\u24FA", codepoint: 9466 }, { name: "DOUBLE CIRCLED DIGIT SEVEN", value: "\u24FB", codepoint: 9467 }, { name: "DOUBLE CIRCLED DIGIT EIGHT", value: "\u24FC", codepoint: 9468 }, { name: "DOUBLE CIRCLED DIGIT NINE", value: "\u24FD", codepoint: 9469 }, { name: "DOUBLE CIRCLED NUMBER TEN", value: "\u24FE", codepoint: 9470 }, { name: "NEGATIVE CIRCLED DIGIT ZERO", value: "\u24FF", codepoint: 9471 }, { name: "BLACK STAR", value: "\u2605", codepoint: 9733 }, { name: "WHITE STAR", value: "\u2606", codepoint: 9734 }, { name: "LIGHTNING", value: "\u2607", codepoint: 9735 }, { name: "THUNDERSTORM", value: "\u2608", codepoint: 9736 }, { name: "SUN", value: "\u2609", codepoint: 9737 }, { name: "ASCENDING NODE", value: "\u260A", codepoint: 9738 }, { name: "DESCENDING NODE", value: "\u260B", codepoint: 9739 }, { name: "CONJUNCTION", value: "\u260C", codepoint: 9740 }, { name: "OPPOSITION", value: "\u260D", codepoint: 9741 }, { name: "WHITE TELEPHONE", value: "\u260F", codepoint: 9743 }, { name: "BALLOT BOX", value: "\u2610", codepoint: 9744 }, { name: "BALLOT BOX WITH X", value: "\u2612", codepoint: 9746 }, { name: "SALTIRE", value: "\u2613", codepoint: 9747 }, { name: "WHITE SHOGI PIECE", value: "\u2616", codepoint: 9750 }, { name: "BLACK SHOGI PIECE", value: "\u2617", codepoint: 9751 }, { name: "REVERSED ROTATED FLORAL HEART BULLET", value: "\u2619", codepoint: 9753 }, { name: "BLACK LEFT POINTING INDEX", value: "\u261A", codepoint: 9754 }, { name: "BLACK RIGHT POINTING INDEX", value: "\u261B", codepoint: 9755 }, { name: "WHITE LEFT POINTING INDEX", value: "\u261C", codepoint: 9756 }, { name: "WHITE RIGHT POINTING INDEX", value: "\u261E", codepoint: 9758 }, { name: "WHITE DOWN POINTING INDEX", value: "\u261F", codepoint: 9759 }, { name: "CAUTION SIGN", value: "\u2621", codepoint: 9761 }, { name: "CADUCEUS", value: "\u2624", codepoint: 9764 }, { name: "ANKH", value: "\u2625", codepoint: 9765 }, { name: "CHI RHO", value: "\u2627", codepoint: 9767 }, { name: "CROSS OF LORRAINE", value: "\u2628", codepoint: 9768 }, { name: "CROSS OF JERUSALEM", value: "\u2629", codepoint: 9769 }, { name: "FARSI SYMBOL", value: "\u262B", codepoint: 9771 }, { name: "ADI SHAKTI", value: "\u262C", codepoint: 9772 }, { name: "HAMMER AND SICKLE", value: "\u262D", codepoint: 9773 }, { name: "TRIGRAM FOR HEAVEN", value: "\u2630", codepoint: 9776 }, { name: "TRIGRAM FOR LAKE", value: "\u2631", codepoint: 9777 }, { name: "TRIGRAM FOR FIRE", value: "\u2632", codepoint: 9778 }, { name: "TRIGRAM FOR THUNDER", value: "\u2633", codepoint: 9779 }, { name: "TRIGRAM FOR WIND", value: "\u2634", codepoint: 9780 }, { name: "TRIGRAM FOR WATER", value: "\u2635", codepoint: 9781 }, { name: "TRIGRAM FOR MOUNTAIN", value: "\u2636", codepoint: 9782 }, { name: "TRIGRAM FOR EARTH", value: "\u2637", codepoint: 9783 }, { name: "BLACK SMILING FACE", value: "\u263B", codepoint: 9787 }, { name: "WHITE SUN WITH RAYS", value: "\u263C", codepoint: 9788 }, { name: "FIRST QUARTER MOON", value: "\u263D", codepoint: 9789 }, { name: "LAST QUARTER MOON", value: "\u263E", codepoint: 9790 }, { name: "MERCURY", value: "\u263F", codepoint: 9791 }, { name: "EARTH", value: "\u2641", codepoint: 9793 }, { name: "JUPITER", value: "\u2643", codepoint: 9795 }, { name: "SATURN", value: "\u2644", codepoint: 9796 }, { name: "URANUS", value: "\u2645", codepoint: 9797 }, { name: "NEPTUNE", value: "\u2646", codepoint: 9798 }, { name: "PLUTO", value: "\u2647", codepoint: 9799 }, { name: "WHITE CHESS KING", value: "\u2654", codepoint: 9812 }, { name: "WHITE CHESS QUEEN", value: "\u2655", codepoint: 9813 }, { name: "WHITE CHESS ROOK", value: "\u2656", codepoint: 9814 }, { name: "WHITE CHESS BISHOP", value: "\u2657", codepoint: 9815 }, { name: "WHITE CHESS KNIGHT", value: "\u2658", codepoint: 9816 }, { name: "WHITE CHESS PAWN", value: "\u2659", codepoint: 9817 }, { name: "BLACK CHESS KING", value: "\u265A", codepoint: 9818 }, { name: "BLACK CHESS QUEEN", value: "\u265B", codepoint: 9819 }, { name: "BLACK CHESS ROOK", value: "\u265C", codepoint: 9820 }, { name: "BLACK CHESS BISHOP", value: "\u265D", codepoint: 9821 }, { name: "BLACK CHESS KNIGHT", value: "\u265E", codepoint: 9822 }, { name: "WHITE HEART SUIT", value: "\u2661", codepoint: 9825 }, { name: "WHITE DIAMOND SUIT", value: "\u2662", codepoint: 9826 }, { name: "WHITE SPADE SUIT", value: "\u2664", codepoint: 9828 }, { name: "WHITE CLUB SUIT", value: "\u2667", codepoint: 9831 }, { name: "QUARTER NOTE", value: "\u2669", codepoint: 9833 }, { name: "EIGHTH NOTE", value: "\u266A", codepoint: 9834 }, { name: "BEAMED EIGHTH NOTES", value: "\u266B", codepoint: 9835 }, { name: "BEAMED SIXTEENTH NOTES", value: "\u266C", codepoint: 9836 }, { name: "MUSIC FLAT SIGN", value: "\u266D", codepoint: 9837 }, { name: "MUSIC NATURAL SIGN", value: "\u266E", codepoint: 9838 }, { name: "MUSIC SHARP SIGN", value: "\u266F", codepoint: 9839 }, { name: "WEST SYRIAC CROSS", value: "\u2670", codepoint: 9840 }, { name: "EAST SYRIAC CROSS", value: "\u2671", codepoint: 9841 }, { name: "UNIVERSAL RECYCLING SYMBOL", value: "\u2672", codepoint: 9842 }, { name: "RECYCLING SYMBOL FOR TYPE-1 PLASTICS", value: "\u2673", codepoint: 9843 }, { name: "RECYCLING SYMBOL FOR TYPE-2 PLASTICS", value: "\u2674", codepoint: 9844 }, { name: "RECYCLING SYMBOL FOR TYPE-3 PLASTICS", value: "\u2675", codepoint: 9845 }, { name: "RECYCLING SYMBOL FOR TYPE-4 PLASTICS", value: "\u2676", codepoint: 9846 }, { name: "RECYCLING SYMBOL FOR TYPE-5 PLASTICS", value: "\u2677", codepoint: 9847 }, { name: "RECYCLING SYMBOL FOR TYPE-6 PLASTICS", value: "\u2678", codepoint: 9848 }, { name: "RECYCLING SYMBOL FOR TYPE-7 PLASTICS", value: "\u2679", codepoint: 9849 }, { name: "RECYCLING SYMBOL FOR GENERIC MATERIALS", value: "\u267A", codepoint: 9850 }, { name: "RECYCLED PAPER SYMBOL", value: "\u267C", codepoint: 9852 }, { name: "PARTIALLY-RECYCLED PAPER SYMBOL", value: "\u267D", codepoint: 9853 }, { name: "DIE FACE-1", value: "\u2680", codepoint: 9856 }, { name: "DIE FACE-2", value: "\u2681", codepoint: 9857 }, { name: "DIE FACE-3", value: "\u2682", codepoint: 9858 }, { name: "DIE FACE-4", value: "\u2683", codepoint: 9859 }, { name: "DIE FACE-5", value: "\u2684", codepoint: 9860 }, { name: "DIE FACE-6", value: "\u2685", codepoint: 9861 }, { name: "WHITE CIRCLE WITH DOT RIGHT", value: "\u2686", codepoint: 9862 }, { name: "WHITE CIRCLE WITH TWO DOTS", value: "\u2687", codepoint: 9863 }, { name: "BLACK CIRCLE WITH WHITE DOT RIGHT", value: "\u2688", codepoint: 9864 }, { name: "BLACK CIRCLE WITH TWO WHITE DOTS", value: "\u2689", codepoint: 9865 }, { name: "MONOGRAM FOR YANG", value: "\u268A", codepoint: 9866 }, { name: "MONOGRAM FOR YIN", value: "\u268B", codepoint: 9867 }, { name: "DIGRAM FOR GREATER YANG", value: "\u268C", codepoint: 9868 }, { name: "DIGRAM FOR LESSER YIN", value: "\u268D", codepoint: 9869 }, { name: "DIGRAM FOR LESSER YANG", value: "\u268E", codepoint: 9870 }, { name: "DIGRAM FOR GREATER YIN", value: "\u268F", codepoint: 9871 }, { name: "WHITE FLAG", value: "\u2690", codepoint: 9872 }, { name: "BLACK FLAG", value: "\u2691", codepoint: 9873 }, { name: "FLOWER", value: "\u2698", codepoint: 9880 }, { name: "STAFF OF HERMES", value: "\u269A", codepoint: 9882 }, { name: "DOUBLED FEMALE SIGN", value: "\u26A2", codepoint: 9890 }, { name: "DOUBLED MALE SIGN", value: "\u26A3", codepoint: 9891 }, { name: "INTERLOCKED FEMALE AND MALE SIGN", value: "\u26A4", codepoint: 9892 }, { name: "MALE AND FEMALE SIGN", value: "\u26A5", codepoint: 9893 }, { name: "MALE WITH STROKE SIGN", value: "\u26A6", codepoint: 9894 }, { name: "VERTICAL MALE WITH STROKE SIGN", value: "\u26A8", codepoint: 9896 }, { name: "HORIZONTAL MALE WITH STROKE SIGN", value: "\u26A9", codepoint: 9897 }, { name: "MEDIUM SMALL WHITE CIRCLE", value: "\u26AC", codepoint: 9900 }, { name: "MARRIAGE SYMBOL", value: "\u26AD", codepoint: 9901 }, { name: "DIVORCE SYMBOL", value: "\u26AE", codepoint: 9902 }, { name: "UNMARRIED PARTNERSHIP SYMBOL", value: "\u26AF", codepoint: 9903 }, { name: "NEUTER", value: "\u26B2", codepoint: 9906 }, { name: "WHITE DIAMOND IN SQUARE", value: "\u26CB", codepoint: 9931 }, { name: "ASTRONOMICAL SYMBOL FOR URANUS", value: "\u26E2", codepoint: 9954 }, { name: "UPPER BLADE SCISSORS", value: "\u2701", codepoint: 9985 }, { name: "LOWER BLADE SCISSORS", value: "\u2703", codepoint: 9987 }, { name: "WHITE SCISSORS", value: "\u2704", codepoint: 9988 }, { name: "TELEPHONE LOCATION SIGN", value: "\u2706", codepoint: 9990 }, { name: "TAPE DRIVE", value: "\u2707", codepoint: 9991 }, { name: "LOWER RIGHT PENCIL", value: "\u270E", codepoint: 9998 }, { name: "UPPER RIGHT PENCIL", value: "\u2710", codepoint: 1e4 }, { name: "WHITE NIB", value: "\u2711", codepoint: 10001 }, { name: "CHECK MARK", value: "\u2713", codepoint: 10003 }, { name: "MULTIPLICATION X", value: "\u2715", codepoint: 10005 }, { name: "BALLOT X", value: "\u2717", codepoint: 10007 }, { name: "HEAVY BALLOT X", value: "\u2718", codepoint: 10008 }, { name: "OUTLINED GREEK CROSS", value: "\u2719", codepoint: 10009 }, { name: "HEAVY GREEK CROSS", value: "\u271A", codepoint: 10010 }, { name: "OPEN CENTRE CROSS", value: "\u271B", codepoint: 10011 }, { name: "HEAVY OPEN CENTRE CROSS", value: "\u271C", codepoint: 10012 }, { name: "SHADOWED WHITE LATIN CROSS", value: "\u271E", codepoint: 10014 }, { name: "OUTLINED LATIN CROSS", value: "\u271F", codepoint: 10015 }, { name: "MALTESE CROSS", value: "\u2720", codepoint: 10016 }, { name: "FOUR TEARDROP-SPOKED ASTERISK", value: "\u2722", codepoint: 10018 }, { name: "FOUR BALLOON-SPOKED ASTERISK", value: "\u2723", codepoint: 10019 }, { name: "HEAVY FOUR BALLOON-SPOKED ASTERISK", value: "\u2724", codepoint: 10020 }, { name: "FOUR CLUB-SPOKED ASTERISK", value: "\u2725", codepoint: 10021 }, { name: "BLACK FOUR POINTED STAR", value: "\u2726", codepoint: 10022 }, { name: "WHITE FOUR POINTED STAR", value: "\u2727", codepoint: 10023 }, { name: "STRESS OUTLINED WHITE STAR", value: "\u2729", codepoint: 10025 }, { name: "CIRCLED WHITE STAR", value: "\u272A", codepoint: 10026 }, { name: "OPEN CENTRE BLACK STAR", value: "\u272B", codepoint: 10027 }, { name: "BLACK CENTRE WHITE STAR", value: "\u272C", codepoint: 10028 }, { name: "OUTLINED BLACK STAR", value: "\u272D", codepoint: 10029 }, { name: "HEAVY OUTLINED BLACK STAR", value: "\u272E", codepoint: 10030 }, { name: "PINWHEEL STAR", value: "\u272F", codepoint: 10031 }, { name: "SHADOWED WHITE STAR", value: "\u2730", codepoint: 10032 }, { name: "HEAVY ASTERISK", value: "\u2731", codepoint: 10033 }, { name: "OPEN CENTRE ASTERISK", value: "\u2732", codepoint: 10034 }, { name: "EIGHT POINTED PINWHEEL STAR", value: "\u2735", codepoint: 10037 }, { name: "SIX POINTED BLACK STAR", value: "\u2736", codepoint: 10038 }, { name: "EIGHT POINTED RECTILINEAR BLACK STAR", value: "\u2737", codepoint: 10039 }, { name: "HEAVY EIGHT POINTED RECTILINEAR BLACK STAR", value: "\u2738", codepoint: 10040 }, { name: "TWELVE POINTED BLACK STAR", value: "\u2739", codepoint: 10041 }, { name: "SIXTEEN POINTED ASTERISK", value: "\u273A", codepoint: 10042 }, { name: "TEARDROP-SPOKED ASTERISK", value: "\u273B", codepoint: 10043 }, { name: "OPEN CENTRE TEARDROP-SPOKED ASTERISK", value: "\u273C", codepoint: 10044 }, { name: "HEAVY TEARDROP-SPOKED ASTERISK", value: "\u273D", codepoint: 10045 }, { name: "SIX PETALLED BLACK AND WHITE FLORETTE", value: "\u273E", codepoint: 10046 }, { name: "BLACK FLORETTE", value: "\u273F", codepoint: 10047 }, { name: "WHITE FLORETTE", value: "\u2740", codepoint: 10048 }, { name: "EIGHT PETALLED OUTLINED BLACK FLORETTE", value: "\u2741", codepoint: 10049 }, { name: "CIRCLED OPEN CENTRE EIGHT POINTED STAR", value: "\u2742", codepoint: 10050 }, { name: "HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK", value: "\u2743", codepoint: 10051 }, { name: "TIGHT TRIFOLIATE SNOWFLAKE", value: "\u2745", codepoint: 10053 }, { name: "HEAVY CHEVRON SNOWFLAKE", value: "\u2746", codepoint: 10054 }, { name: "HEAVY SPARKLE", value: "\u2748", codepoint: 10056 }, { name: "BALLOON-SPOKED ASTERISK", value: "\u2749", codepoint: 10057 }, { name: "EIGHT TEARDROP-SPOKED PROPELLER ASTERISK", value: "\u274A", codepoint: 10058 }, { name: "HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK", value: "\u274B", codepoint: 10059 }, { name: "SHADOWED WHITE CIRCLE", value: "\u274D", codepoint: 10061 }, { name: "LOWER RIGHT DROP-SHADOWED WHITE SQUARE", value: "\u274F", codepoint: 10063 }, { name: "UPPER RIGHT DROP-SHADOWED WHITE SQUARE", value: "\u2750", codepoint: 10064 }, { name: "LOWER RIGHT SHADOWED WHITE SQUARE", value: "\u2751", codepoint: 10065 }, { name: "UPPER RIGHT SHADOWED WHITE SQUARE", value: "\u2752", codepoint: 10066 }, { name: "BLACK DIAMOND MINUS WHITE X", value: "\u2756", codepoint: 10070 }, { name: "LIGHT VERTICAL BAR", value: "\u2758", codepoint: 10072 }, { name: "MEDIUM VERTICAL BAR", value: "\u2759", codepoint: 10073 }, { name: "HEAVY VERTICAL BAR", value: "\u275A", codepoint: 10074 }, { name: "HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT", value: "\u275B", codepoint: 10075 }, { name: "HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT", value: "\u275C", codepoint: 10076 }, { name: "HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT", value: "\u275D", codepoint: 10077 }, { name: "HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT", value: "\u275E", codepoint: 10078 }, { name: "CURVED STEM PARAGRAPH SIGN ORNAMENT", value: "\u2761", codepoint: 10081 }, { name: "HEAVY EXCLAMATION MARK ORNAMENT", value: "\u2762", codepoint: 10082 }, { name: "ROTATED HEAVY BLACK HEART BULLET", value: "\u2765", codepoint: 10085 }, { name: "FLORAL HEART", value: "\u2766", codepoint: 10086 }, { name: "ROTATED FLORAL HEART BULLET", value: "\u2767", codepoint: 10087 }, { name: "MEDIUM LEFT PARENTHESIS ORNAMENT", value: "\u2768", codepoint: 10088 }, { name: "MEDIUM RIGHT PARENTHESIS ORNAMENT", value: "\u2769", codepoint: 10089 }, { name: "MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT", value: "\u276A", codepoint: 10090 }, { name: "MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT", value: "\u276B", codepoint: 10091 }, { name: "MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT", value: "\u276C", codepoint: 10092 }, { name: "MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT", value: "\u276D", codepoint: 10093 }, { name: "HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT", value: "\u276E", codepoint: 10094 }, { name: "HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT", value: "\u276F", codepoint: 10095 }, { name: "HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT", value: "\u2770", codepoint: 10096 }, { name: "HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT", value: "\u2771", codepoint: 10097 }, { name: "LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT", value: "\u2772", codepoint: 10098 }, { name: "LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT", value: "\u2773", codepoint: 10099 }, { name: "MEDIUM LEFT CURLY BRACKET ORNAMENT", value: "\u2774", codepoint: 10100 }, { name: "MEDIUM RIGHT CURLY BRACKET ORNAMENT", value: "\u2775", codepoint: 10101 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT ONE", value: "\u2776", codepoint: 10102 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT TWO", value: "\u2777", codepoint: 10103 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT THREE", value: "\u2778", codepoint: 10104 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT FOUR", value: "\u2779", codepoint: 10105 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT FIVE", value: "\u277A", codepoint: 10106 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT SIX", value: "\u277B", codepoint: 10107 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT SEVEN", value: "\u277C", codepoint: 10108 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT EIGHT", value: "\u277D", codepoint: 10109 }, { name: "DINGBAT NEGATIVE CIRCLED DIGIT NINE", value: "\u277E", codepoint: 10110 }, { name: "DINGBAT NEGATIVE CIRCLED NUMBER TEN", value: "\u277F", codepoint: 10111 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT ONE", value: "\u2780", codepoint: 10112 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT TWO", value: "\u2781", codepoint: 10113 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT THREE", value: "\u2782", codepoint: 10114 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT FOUR", value: "\u2783", codepoint: 10115 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT FIVE", value: "\u2784", codepoint: 10116 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT SIX", value: "\u2785", codepoint: 10117 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN", value: "\u2786", codepoint: 10118 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT", value: "\u2787", codepoint: 10119 }, { name: "DINGBAT CIRCLED SANS-SERIF DIGIT NINE", value: "\u2788", codepoint: 10120 }, { name: "DINGBAT CIRCLED SANS-SERIF NUMBER TEN", value: "\u2789", codepoint: 10121 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE", value: "\u278A", codepoint: 10122 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO", value: "\u278B", codepoint: 10123 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE", value: "\u278C", codepoint: 10124 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR", value: "\u278D", codepoint: 10125 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE", value: "\u278E", codepoint: 10126 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX", value: "\u278F", codepoint: 10127 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN", value: "\u2790", codepoint: 10128 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT", value: "\u2791", codepoint: 10129 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE", value: "\u2792", codepoint: 10130 }, { name: "DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN", value: "\u2793", codepoint: 10131 }, { name: "HEAVY WIDE-HEADED RIGHTWARDS ARROW", value: "\u2794", codepoint: 10132 }, { name: "HEAVY SOUTH EAST ARROW", value: "\u2798", codepoint: 10136 }, { name: "HEAVY RIGHTWARDS ARROW", value: "\u2799", codepoint: 10137 }, { name: "HEAVY NORTH EAST ARROW", value: "\u279A", codepoint: 10138 }, { name: "DRAFTING POINT RIGHTWARDS ARROW", value: "\u279B", codepoint: 10139 }, { name: "HEAVY ROUND-TIPPED RIGHTWARDS ARROW", value: "\u279C", codepoint: 10140 }, { name: "TRIANGLE-HEADED RIGHTWARDS ARROW", value: "\u279D", codepoint: 10141 }, { name: "HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW", value: "\u279E", codepoint: 10142 }, { name: "DASHED TRIANGLE-HEADED RIGHTWARDS ARROW", value: "\u279F", codepoint: 10143 }, { name: "HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW", value: "\u27A0", codepoint: 10144 }, { name: "THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD", value: "\u27A2", codepoint: 10146 }, { name: "THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD", value: "\u27A3", codepoint: 10147 }, { name: "BLACK RIGHTWARDS ARROWHEAD", value: "\u27A4", codepoint: 10148 }, { name: "HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW", value: "\u27A5", codepoint: 10149 }, { name: "HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW", value: "\u27A6", codepoint: 10150 }, { name: "SQUAT BLACK RIGHTWARDS ARROW", value: "\u27A7", codepoint: 10151 }, { name: "HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW", value: "\u27A8", codepoint: 10152 }, { name: "RIGHT-SHADED WHITE RIGHTWARDS ARROW", value: "\u27A9", codepoint: 10153 }, { name: "LEFT-SHADED WHITE RIGHTWARDS ARROW", value: "\u27AA", codepoint: 10154 }, { name: "BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW", value: "\u27AB", codepoint: 10155 }, { name: "FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW", value: "\u27AC", codepoint: 10156 }, { name: "HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", value: "\u27AD", codepoint: 10157 }, { name: "HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", value: "\u27AE", codepoint: 10158 }, { name: "NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", value: "\u27AF", codepoint: 10159 }, { name: "NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", value: "\u27B1", codepoint: 10161 }, { name: "CIRCLED HEAVY WHITE RIGHTWARDS ARROW", value: "\u27B2", codepoint: 10162 }, { name: "WHITE-FEATHERED RIGHTWARDS ARROW", value: "\u27B3", codepoint: 10163 }, { name: "BLACK-FEATHERED SOUTH EAST ARROW", value: "\u27B4", codepoint: 10164 }, { name: "BLACK-FEATHERED RIGHTWARDS ARROW", value: "\u27B5", codepoint: 10165 }, { name: "BLACK-FEATHERED NORTH EAST ARROW", value: "\u27B6", codepoint: 10166 }, { name: "HEAVY BLACK-FEATHERED SOUTH EAST ARROW", value: "\u27B7", codepoint: 10167 }, { name: "HEAVY BLACK-FEATHERED RIGHTWARDS ARROW", value: "\u27B8", codepoint: 10168 }, { name: "HEAVY BLACK-FEATHERED NORTH EAST ARROW", value: "\u27B9", codepoint: 10169 }, { name: "TEARDROP-BARBED RIGHTWARDS ARROW", value: "\u27BA", codepoint: 10170 }, { name: "HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW", value: "\u27BB", codepoint: 10171 }, { name: "WEDGE-TAILED RIGHTWARDS ARROW", value: "\u27BC", codepoint: 10172 }, { name: "HEAVY WEDGE-TAILED RIGHTWARDS ARROW", value: "\u27BD", codepoint: 10173 }, { name: "OPEN-OUTLINED RIGHTWARDS ARROW", value: "\u27BE", codepoint: 10174 } ] }, { name: "Mathematical", symbols: [ { name: "FOR ALL", value: "\u2200", codepoint: 8704 }, { name: "COMPLEMENT", value: "\u2201", codepoint: 8705 }, { name: "PARTIAL DIFFERENTIAL", value: "\u2202", codepoint: 8706 }, { name: "THERE EXISTS", value: "\u2203", codepoint: 8707 }, { name: "THERE DOES NOT EXIST", value: "\u2204", codepoint: 8708 }, { name: "EMPTY SET", value: "\u2205", codepoint: 8709 }, { name: "INCREMENT", value: "\u2206", codepoint: 8710 }, { name: "NABLA", value: "\u2207", codepoint: 8711 }, { name: "ELEMENT OF", value: "\u2208", codepoint: 8712 }, { name: "NOT AN ELEMENT OF", value: "\u2209", codepoint: 8713 }, { name: "SMALL ELEMENT OF", value: "\u220A", codepoint: 8714 }, { name: "CONTAINS AS MEMBER", value: "\u220B", codepoint: 8715 }, { name: "DOES NOT CONTAIN AS MEMBER", value: "\u220C", codepoint: 8716 }, { name: "SMALL CONTAINS AS MEMBER", value: "\u220D", codepoint: 8717 }, { name: "END OF PROOF", value: "\u220E", codepoint: 8718 }, { name: "N-ARY PRODUCT", value: "\u220F", codepoint: 8719 }, { name: "N-ARY COPRODUCT", value: "\u2210", codepoint: 8720 }, { name: "N-ARY SUMMATION", value: "\u2211", codepoint: 8721 }, { name: "MINUS SIGN", value: "\u2212", codepoint: 8722 }, { name: "MINUS-OR-PLUS SIGN", value: "\u2213", codepoint: 8723 }, { name: "DOT PLUS", value: "\u2214", codepoint: 8724 }, { name: "DIVISION SLASH", value: "\u2215", codepoint: 8725 }, { name: "SET MINUS", value: "\u2216", codepoint: 8726 }, { name: "ASTERISK OPERATOR", value: "\u2217", codepoint: 8727 }, { name: "RING OPERATOR", value: "\u2218", codepoint: 8728 }, { name: "BULLET OPERATOR", value: "\u2219", codepoint: 8729 }, { name: "SQUARE ROOT", value: "\u221A", codepoint: 8730 }, { name: "CUBE ROOT", value: "\u221B", codepoint: 8731 }, { name: "FOURTH ROOT", value: "\u221C", codepoint: 8732 }, { name: "PROPORTIONAL TO", value: "\u221D", codepoint: 8733 }, { name: "INFINITY", value: "\u221E", codepoint: 8734 }, { name: "RIGHT ANGLE", value: "\u221F", codepoint: 8735 }, { name: "ANGLE", value: "\u2220", codepoint: 8736 }, { name: "MEASURED ANGLE", value: "\u2221", codepoint: 8737 }, { name: "SPHERICAL ANGLE", value: "\u2222", codepoint: 8738 }, { name: "DIVIDES", value: "\u2223", codepoint: 8739 }, { name: "DOES NOT DIVIDE", value: "\u2224", codepoint: 8740 }, { name: "PARALLEL TO", value: "\u2225", codepoint: 8741 }, { name: "NOT PARALLEL TO", value: "\u2226", codepoint: 8742 }, { name: "LOGICAL AND", value: "\u2227", codepoint: 8743 }, { name: "LOGICAL OR", value: "\u2228", codepoint: 8744 }, { name: "INTERSECTION", value: "\u2229", codepoint: 8745 }, { name: "UNION", value: "\u222A", codepoint: 8746 }, { name: "INTEGRAL", value: "\u222B", codepoint: 8747 }, { name: "DOUBLE INTEGRAL", value: "\u222C", codepoint: 8748 }, { name: "TRIPLE INTEGRAL", value: "\u222D", codepoint: 8749 }, { name: "CONTOUR INTEGRAL", value: "\u222E", codepoint: 8750 }, { name: "SURFACE INTEGRAL", value: "\u222F", codepoint: 8751 }, { name: "VOLUME INTEGRAL", value: "\u2230", codepoint: 8752 }, { name: "CLOCKWISE INTEGRAL", value: "\u2231", codepoint: 8753 }, { name: "CLOCKWISE CONTOUR INTEGRAL", value: "\u2232", codepoint: 8754 }, { name: "ANTICLOCKWISE CONTOUR INTEGRAL", value: "\u2233", codepoint: 8755 }, { name: "THEREFORE", value: "\u2234", codepoint: 8756 }, { name: "BECAUSE", value: "\u2235", codepoint: 8757 }, { name: "RATIO", value: "\u2236", codepoint: 8758 }, { name: "PROPORTION", value: "\u2237", codepoint: 8759 }, { name: "DOT MINUS", value: "\u2238", codepoint: 8760 }, { name: "EXCESS", value: "\u2239", codepoint: 8761 }, { name: "GEOMETRIC PROPORTION", value: "\u223A", codepoint: 8762 }, { name: "HOMOTHETIC", value: "\u223B", codepoint: 8763 }, { name: "TILDE OPERATOR", value: "\u223C", codepoint: 8764 }, { name: "REVERSED TILDE", value: "\u223D", codepoint: 8765 }, { name: "INVERTED LAZY S", value: "\u223E", codepoint: 8766 }, { name: "SINE WAVE", value: "\u223F", codepoint: 8767 }, { name: "WREATH PRODUCT", value: "\u2240", codepoint: 8768 }, { name: "NOT TILDE", value: "\u2241", codepoint: 8769 }, { name: "MINUS TILDE", value: "\u2242", codepoint: 8770 }, { name: "ASYMPTOTICALLY EQUAL TO", value: "\u2243", codepoint: 8771 }, { name: "NOT ASYMPTOTICALLY EQUAL TO", value: "\u2244", codepoint: 8772 }, { name: "APPROXIMATELY EQUAL TO", value: "\u2245", codepoint: 8773 }, { name: "APPROXIMATELY BUT NOT ACTUALLY EQUAL TO", value: "\u2246", codepoint: 8774 }, { name: "NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO", value: "\u2247", codepoint: 8775 }, { name: "ALMOST EQUAL TO", value: "\u2248", codepoint: 8776 }, { name: "NOT ALMOST EQUAL TO", value: "\u2249", codepoint: 8777 }, { name: "ALMOST EQUAL OR EQUAL TO", value: "\u224A", codepoint: 8778 }, { name: "TRIPLE TILDE", value: "\u224B", codepoint: 8779 }, { name: "ALL EQUAL TO", value: "\u224C", codepoint: 8780 }, { name: "EQUIVALENT TO", value: "\u224D", codepoint: 8781 }, { name: "GEOMETRICALLY EQUIVALENT TO", value: "\u224E", codepoint: 8782 }, { name: "DIFFERENCE BETWEEN", value: "\u224F", codepoint: 8783 }, { name: "APPROACHES THE LIMIT", value: "\u2250", codepoint: 8784 }, { name: "GEOMETRICALLY EQUAL TO", value: "\u2251", codepoint: 8785 }, { name: "APPROXIMATELY EQUAL TO OR THE IMAGE OF", value: "\u2252", codepoint: 8786 }, { name: "IMAGE OF OR APPROXIMATELY EQUAL TO", value: "\u2253", codepoint: 8787 }, { name: "COLON EQUALS", value: "\u2254", codepoint: 8788 }, { name: "EQUALS COLON", value: "\u2255", codepoint: 8789 }, { name: "RING IN EQUAL TO", value: "\u2256", codepoint: 8790 }, { name: "RING EQUAL TO", value: "\u2257", codepoint: 8791 }, { name: "CORRESPONDS TO", value: "\u2258", codepoint: 8792 }, { name: "ESTIMATES", value: "\u2259", codepoint: 8793 }, { name: "EQUIANGULAR TO", value: "\u225A", codepoint: 8794 }, { name: "STAR EQUALS", value: "\u225B", codepoint: 8795 }, { name: "DELTA EQUAL TO", value: "\u225C", codepoint: 8796 }, { name: "EQUAL TO BY DEFINITION", value: "\u225D", codepoint: 8797 }, { name: "MEASURED BY", value: "\u225E", codepoint: 8798 }, { name: "QUESTIONED EQUAL TO", value: "\u225F", codepoint: 8799 }, { name: "NOT EQUAL TO", value: "\u2260", codepoint: 8800 }, { name: "IDENTICAL TO", value: "\u2261", codepoint: 8801 }, { name: "NOT IDENTICAL TO", value: "\u2262", codepoint: 8802 }, { name: "STRICTLY EQUIVALENT TO", value: "\u2263", codepoint: 8803 }, { name: "LESS-THAN OR EQUAL TO", value: "\u2264", codepoint: 8804 }, { name: "GREATER-THAN OR EQUAL TO", value: "\u2265", codepoint: 8805 }, { name: "LESS-THAN OVER EQUAL TO", value: "\u2266", codepoint: 8806 }, { name: "GREATER-THAN OVER EQUAL TO", value: "\u2267", codepoint: 8807 }, { name: "LESS-THAN BUT NOT EQUAL TO", value: "\u2268", codepoint: 8808 }, { name: "GREATER-THAN BUT NOT EQUAL TO", value: "\u2269", codepoint: 8809 }, { name: "MUCH LESS-THAN", value: "\u226A", codepoint: 8810 }, { name: "MUCH GREATER-THAN", value: "\u226B", codepoint: 8811 }, { name: "BETWEEN", value: "\u226C", codepoint: 8812 }, { name: "NOT EQUIVALENT TO", value: "\u226D", codepoint: 8813 }, { name: "NOT LESS-THAN", value: "\u226E", codepoint: 8814 }, { name: "NOT GREATER-THAN", value: "\u226F", codepoint: 8815 }, { name: "NEITHER LESS-THAN NOR EQUAL TO", value: "\u2270", codepoint: 8816 }, { name: "NEITHER GREATER-THAN NOR EQUAL TO", value: "\u2271", codepoint: 8817 }, { name: "LESS-THAN OR EQUIVALENT TO", value: "\u2272", codepoint: 8818 }, { name: "GREATER-THAN OR EQUIVALENT TO", value: "\u2273", codepoint: 8819 }, { name: "NEITHER LESS-THAN NOR EQUIVALENT TO", value: "\u2274", codepoint: 8820 }, { name: "NEITHER GREATER-THAN NOR EQUIVALENT TO", value: "\u2275", codepoint: 8821 }, { name: "LESS-THAN OR GREATER-THAN", value: "\u2276", codepoint: 8822 }, { name: "GREATER-THAN OR LESS-THAN", value: "\u2277", codepoint: 8823 }, { name: "NEITHER LESS-THAN NOR GREATER-THAN", value: "\u2278", codepoint: 8824 }, { name: "NEITHER GREATER-THAN NOR LESS-THAN", value: "\u2279", codepoint: 8825 }, { name: "PRECEDES", value: "\u227A", codepoint: 8826 }, { name: "SUCCEEDS", value: "\u227B", codepoint: 8827 }, { name: "PRECEDES OR EQUAL TO", value: "\u227C", codepoint: 8828 }, { name: "SUCCEEDS OR EQUAL TO", value: "\u227D", codepoint: 8829 }, { name: "PRECEDES OR EQUIVALENT TO", value: "\u227E", codepoint: 8830 }, { name: "SUCCEEDS OR EQUIVALENT TO", value: "\u227F", codepoint: 8831 }, { name: "DOES NOT PRECEDE", value: "\u2280", codepoint: 8832 }, { name: "DOES NOT SUCCEED", value: "\u2281", codepoint: 8833 }, { name: "SUBSET OF", value: "\u2282", codepoint: 8834 }, { name: "SUPERSET OF", value: "\u2283", codepoint: 8835 }, { name: "NOT A SUBSET OF", value: "\u2284", codepoint: 8836 }, { name: "NOT A SUPERSET OF", value: "\u2285", codepoint: 8837 }, { name: "SUBSET OF OR EQUAL TO", value: "\u2286", codepoint: 8838 }, { name: "SUPERSET OF OR EQUAL TO", value: "\u2287", codepoint: 8839 }, { name: "NEITHER A SUBSET OF NOR EQUAL TO", value: "\u2288", codepoint: 8840 }, { name: "NEITHER A SUPERSET OF NOR EQUAL TO", value: "\u2289", codepoint: 8841 }, { name: "SUBSET OF WITH NOT EQUAL TO", value: "\u228A", codepoint: 8842 }, { name: "SUPERSET OF WITH NOT EQUAL TO", value: "\u228B", codepoint: 8843 }, { name: "MULTISET", value: "\u228C", codepoint: 8844 }, { name: "MULTISET MULTIPLICATION", value: "\u228D", codepoint: 8845 }, { name: "MULTISET UNION", value: "\u228E", codepoint: 8846 }, { name: "SQUARE IMAGE OF", value: "\u228F", codepoint: 8847 }, { name: "SQUARE ORIGINAL OF", value: "\u2290", codepoint: 8848 }, { name: "SQUARE IMAGE OF OR EQUAL TO", value: "\u2291", codepoint: 8849 }, { name: "SQUARE ORIGINAL OF OR EQUAL TO", value: "\u2292", codepoint: 8850 }, { name: "SQUARE CAP", value: "\u2293", codepoint: 8851 }, { name: "SQUARE CUP", value: "\u2294", codepoint: 8852 }, { name: "CIRCLED PLUS", value: "\u2295", codepoint: 8853 }, { name: "CIRCLED MINUS", value: "\u2296", codepoint: 8854 }, { name: "CIRCLED TIMES", value: "\u2297", codepoint: 8855 }, { name: "CIRCLED DIVISION SLASH", value: "\u2298", codepoint: 8856 }, { name: "CIRCLED DOT OPERATOR", value: "\u2299", codepoint: 8857 }, { name: "CIRCLED RING OPERATOR", value: "\u229A", codepoint: 8858 }, { name: "CIRCLED ASTERISK OPERATOR", value: "\u229B", codepoint: 8859 }, { name: "CIRCLED EQUALS", value: "\u229C", codepoint: 8860 }, { name: "CIRCLED DASH", value: "\u229D", codepoint: 8861 }, { name: "SQUARED PLUS", value: "\u229E", codepoint: 8862 }, { name: "SQUARED MINUS", value: "\u229F", codepoint: 8863 }, { name: "SQUARED TIMES", value: "\u22A0", codepoint: 8864 }, { name: "SQUARED DOT OPERATOR", value: "\u22A1", codepoint: 8865 }, { name: "RIGHT TACK", value: "\u22A2", codepoint: 8866 }, { name: "LEFT TACK", value: "\u22A3", codepoint: 8867 }, { name: "DOWN TACK", value: "\u22A4", codepoint: 8868 }, { name: "UP TACK", value: "\u22A5", codepoint: 8869 }, { name: "ASSERTION", value: "\u22A6", codepoint: 8870 }, { name: "MODELS", value: "\u22A7", codepoint: 8871 }, { name: "TRUE", value: "\u22A8", codepoint: 8872 }, { name: "FORCES", value: "\u22A9", codepoint: 8873 }, { name: "TRIPLE VERTICAL BAR RIGHT TURNSTILE", value: "\u22AA", codepoint: 8874 }, { name: "DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE", value: "\u22AB", codepoint: 8875 }, { name: "DOES NOT PROVE", value: "\u22AC", codepoint: 8876 }, { name: "NOT TRUE", value: "\u22AD", codepoint: 8877 }, { name: "DOES NOT FORCE", value: "\u22AE", codepoint: 8878 }, { name: "NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE", value: "\u22AF", codepoint: 8879 }, { name: "PRECEDES UNDER RELATION", value: "\u22B0", codepoint: 8880 }, { name: "SUCCEEDS UNDER RELATION", value: "\u22B1", codepoint: 8881 }, { name: "NORMAL SUBGROUP OF", value: "\u22B2", codepoint: 8882 }, { name: "CONTAINS AS NORMAL SUBGROUP", value: "\u22B3", codepoint: 8883 }, { name: "NORMAL SUBGROUP OF OR EQUAL TO", value: "\u22B4", codepoint: 8884 }, { name: "CONTAINS AS NORMAL SUBGROUP OR EQUAL TO", value: "\u22B5", codepoint: 8885 }, { name: "ORIGINAL OF", value: "\u22B6", codepoint: 8886 }, { name: "IMAGE OF", value: "\u22B7", codepoint: 8887 }, { name: "MULTIMAP", value: "\u22B8", codepoint: 8888 }, { name: "HERMITIAN CONJUGATE MATRIX", value: "\u22B9", codepoint: 8889 }, { name: "INTERCALATE", value: "\u22BA", codepoint: 8890 }, { name: "XOR", value: "\u22BB", codepoint: 8891 }, { name: "NAND", value: "\u22BC", codepoint: 8892 }, { name: "NOR", value: "\u22BD", codepoint: 8893 }, { name: "RIGHT ANGLE WITH ARC", value: "\u22BE", codepoint: 8894 }, { name: "RIGHT TRIANGLE", value: "\u22BF", codepoint: 8895 }, { name: "N-ARY LOGICAL AND", value: "\u22C0", codepoint: 8896 }, { name: "N-ARY LOGICAL OR", value: "\u22C1", codepoint: 8897 }, { name: "N-ARY INTERSECTION", value: "\u22C2", codepoint: 8898 }, { name: "N-ARY UNION", value: "\u22C3", codepoint: 8899 }, { name: "DIAMOND OPERATOR", value: "\u22C4", codepoint: 8900 }, { name: "DOT OPERATOR", value: "\u22C5", codepoint: 8901 }, { name: "STAR OPERATOR", value: "\u22C6", codepoint: 8902 }, { name: "DIVISION TIMES", value: "\u22C7", codepoint: 8903 }, { name: "BOWTIE", value: "\u22C8", codepoint: 8904 }, { name: "LEFT NORMAL FACTOR SEMIDIRECT PRODUCT", value: "\u22C9", codepoint: 8905 }, { name: "RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT", value: "\u22CA", codepoint: 8906 }, { name: "LEFT SEMIDIRECT PRODUCT", value: "\u22CB", codepoint: 8907 }, { name: "RIGHT SEMIDIRECT PRODUCT", value: "\u22CC", codepoint: 8908 }, { name: "REVERSED TILDE EQUALS", value: "\u22CD", codepoint: 8909 }, { name: "CURLY LOGICAL OR", value: "\u22CE", codepoint: 8910 }, { name: "CURLY LOGICAL AND", value: "\u22CF", codepoint: 8911 }, { name: "DOUBLE SUBSET", value: "\u22D0", codepoint: 8912 }, { name: "DOUBLE SUPERSET", value: "\u22D1", codepoint: 8913 }, { name: "DOUBLE INTERSECTION", value: "\u22D2", codepoint: 8914 }, { name: "DOUBLE UNION", value: "\u22D3", codepoint: 8915 }, { name: "PITCHFORK", value: "\u22D4", codepoint: 8916 }, { name: "EQUAL AND PARALLEL TO", value: "\u22D5", codepoint: 8917 }, { name: "LESS-THAN WITH DOT", value: "\u22D6", codepoint: 8918 }, { name: "GREATER-THAN WITH DOT", value: "\u22D7", codepoint: 8919 }, { name: "VERY MUCH LESS-THAN", value: "\u22D8", codepoint: 8920 }, { name: "VERY MUCH GREATER-THAN", value: "\u22D9", codepoint: 8921 }, { name: "LESS-THAN EQUAL TO OR GREATER-THAN", value: "\u22DA", codepoint: 8922 }, { name: "GREATER-THAN EQUAL TO OR LESS-THAN", value: "\u22DB", codepoint: 8923 }, { name: "EQUAL TO OR LESS-THAN", value: "\u22DC", codepoint: 8924 }, { name: "EQUAL TO OR GREATER-THAN", value: "\u22DD", codepoint: 8925 }, { name: "EQUAL TO OR PRECEDES", value: "\u22DE", codepoint: 8926 }, { name: "EQUAL TO OR SUCCEEDS", value: "\u22DF", codepoint: 8927 }, { name: "DOES NOT PRECEDE OR EQUAL", value: "\u22E0", codepoint: 8928 }, { name: "DOES NOT SUCCEED OR EQUAL", value: "\u22E1", codepoint: 8929 }, { name: "NOT SQUARE IMAGE OF OR EQUAL TO", value: "\u22E2", codepoint: 8930 }, { name: "NOT SQUARE ORIGINAL OF OR EQUAL TO", value: "\u22E3", codepoint: 8931 }, { name: "SQUARE IMAGE OF OR NOT EQUAL TO", value: "\u22E4", codepoint: 8932 }, { name: "SQUARE ORIGINAL OF OR NOT EQUAL TO", value: "\u22E5", codepoint: 8933 }, { name: "LESS-THAN BUT NOT EQUIVALENT TO", value: "\u22E6", codepoint: 8934 }, { name: "GREATER-THAN BUT NOT EQUIVALENT TO", value: "\u22E7", codepoint: 8935 }, { name: "PRECEDES BUT NOT EQUIVALENT TO", value: "\u22E8", codepoint: 8936 }, { name: "SUCCEEDS BUT NOT EQUIVALENT TO", value: "\u22E9", codepoint: 8937 }, { name: "NOT NORMAL SUBGROUP OF", value: "\u22EA", codepoint: 8938 }, { name: "DOES NOT CONTAIN AS NORMAL SUBGROUP", value: "\u22EB", codepoint: 8939 }, { name: "NOT NORMAL SUBGROUP OF OR EQUAL TO", value: "\u22EC", codepoint: 8940 }, { name: "DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL", value: "\u22ED", codepoint: 8941 }, { name: "VERTICAL ELLIPSIS", value: "\u22EE", codepoint: 8942 }, { name: "MIDLINE HORIZONTAL ELLIPSIS", value: "\u22EF", codepoint: 8943 }, { name: "UP RIGHT DIAGONAL ELLIPSIS", value: "\u22F0", codepoint: 8944 }, { name: "DOWN RIGHT DIAGONAL ELLIPSIS", value: "\u22F1", codepoint: 8945 }, { name: "ELEMENT OF WITH LONG HORIZONTAL STROKE", value: "\u22F2", codepoint: 8946 }, { name: "ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", value: "\u22F3", codepoint: 8947 }, { name: "SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", value: "\u22F4", codepoint: 8948 }, { name: "ELEMENT OF WITH DOT ABOVE", value: "\u22F5", codepoint: 8949 }, { name: "ELEMENT OF WITH OVERBAR", value: "\u22F6", codepoint: 8950 }, { name: "SMALL ELEMENT OF WITH OVERBAR", value: "\u22F7", codepoint: 8951 }, { name: "ELEMENT OF WITH UNDERBAR", value: "\u22F8", codepoint: 8952 }, { name: "ELEMENT OF WITH TWO HORIZONTAL STROKES", value: "\u22F9", codepoint: 8953 }, { name: "CONTAINS WITH LONG HORIZONTAL STROKE", value: "\u22FA", codepoint: 8954 }, { name: "CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", value: "\u22FB", codepoint: 8955 }, { name: "SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", value: "\u22FC", codepoint: 8956 }, { name: "CONTAINS WITH OVERBAR", value: "\u22FD", codepoint: 8957 }, { name: "SMALL CONTAINS WITH OVERBAR", value: "\u22FE", codepoint: 8958 }, { name: "Z NOTATION BAG MEMBERSHIP", value: "\u22FF", codepoint: 8959 }, { name: "THREE DIMENSIONAL ANGLE", value: "\u27C0", codepoint: 10176 }, { name: "WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE", value: "\u27C1", codepoint: 10177 }, { name: "PERPENDICULAR", value: "\u27C2", codepoint: 10178 }, { name: "OPEN SUBSET", value: "\u27C3", codepoint: 10179 }, { name: "OPEN SUPERSET", value: "\u27C4", codepoint: 10180 }, { name: "LEFT S-SHAPED BAG DELIMITER", value: "\u27C5", codepoint: 10181 }, { name: "RIGHT S-SHAPED BAG DELIMITER", value: "\u27C6", codepoint: 10182 }, { name: "OR WITH DOT INSIDE", value: "\u27C7", codepoint: 10183 }, { name: "REVERSE SOLIDUS PRECEDING SUBSET", value: "\u27C8", codepoint: 10184 }, { name: "SUPERSET PRECEDING SOLIDUS", value: "\u27C9", codepoint: 10185 }, { name: "VERTICAL BAR WITH HORIZONTAL STROKE", value: "\u27CA", codepoint: 10186 }, { name: "LONG DIVISION", value: "\u27CC", codepoint: 10188 }, { name: "WHITE DIAMOND WITH CENTRED DOT", value: "\u27D0", codepoint: 10192 }, { name: "AND WITH DOT", value: "\u27D1", codepoint: 10193 }, { name: "ELEMENT OF OPENING UPWARDS", value: "\u27D2", codepoint: 10194 }, { name: "LOWER RIGHT CORNER WITH DOT", value: "\u27D3", codepoint: 10195 }, { name: "UPPER LEFT CORNER WITH DOT", value: "\u27D4", codepoint: 10196 }, { name: "LEFT OUTER JOIN", value: "\u27D5", codepoint: 10197 }, { name: "RIGHT OUTER JOIN", value: "\u27D6", codepoint: 10198 }, { name: "FULL OUTER JOIN", value: "\u27D7", codepoint: 10199 }, { name: "LARGE UP TACK", value: "\u27D8", codepoint: 10200 }, { name: "LARGE DOWN TACK", value: "\u27D9", codepoint: 10201 }, { name: "LEFT AND RIGHT DOUBLE TURNSTILE", value: "\u27DA", codepoint: 10202 }, { name: "LEFT AND RIGHT TACK", value: "\u27DB", codepoint: 10203 }, { name: "LEFT MULTIMAP", value: "\u27DC", codepoint: 10204 }, { name: "LONG RIGHT TACK", value: "\u27DD", codepoint: 10205 }, { name: "LONG LEFT TACK", value: "\u27DE", codepoint: 10206 }, { name: "UP TACK WITH CIRCLE ABOVE", value: "\u27DF", codepoint: 10207 }, { name: "LOZENGE DIVIDED BY HORIZONTAL RULE", value: "\u27E0", codepoint: 10208 }, { name: "WHITE CONCAVE-SIDED DIAMOND", value: "\u27E1", codepoint: 10209 }, { name: "WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK", value: "\u27E2", codepoint: 10210 }, { name: "WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK", value: "\u27E3", codepoint: 10211 }, { name: "WHITE SQUARE WITH LEFTWARDS TICK", value: "\u27E4", codepoint: 10212 }, { name: "WHITE SQUARE WITH RIGHTWARDS TICK", value: "\u27E5", codepoint: 10213 }, { name: "MATHEMATICAL LEFT WHITE SQUARE BRACKET", value: "\u27E6", codepoint: 10214 }, { name: "MATHEMATICAL RIGHT WHITE SQUARE BRACKET", value: "\u27E7", codepoint: 10215 }, { name: "MATHEMATICAL LEFT ANGLE BRACKET", value: "\u27E8", codepoint: 10216 }, { name: "MATHEMATICAL RIGHT ANGLE BRACKET", value: "\u27E9", codepoint: 10217 }, { name: "MATHEMATICAL LEFT DOUBLE ANGLE BRACKET", value: "\u27EA", codepoint: 10218 }, { name: "MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET", value: "\u27EB", codepoint: 10219 }, { name: "MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET", value: "\u27EC", codepoint: 10220 }, { name: "MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET", value: "\u27ED", codepoint: 10221 }, { name: "MATHEMATICAL LEFT FLATTENED PARENTHESIS", value: "\u27EE", codepoint: 10222 }, { name: "MATHEMATICAL RIGHT FLATTENED PARENTHESIS", value: "\u27EF", codepoint: 10223 }, { name: "TRIPLE VERTICAL BAR DELIMITER", value: "\u2980", codepoint: 10624 }, { name: "Z NOTATION SPOT", value: "\u2981", codepoint: 10625 }, { name: "Z NOTATION TYPE COLON", value: "\u2982", codepoint: 10626 }, { name: "LEFT WHITE CURLY BRACKET", value: "\u2983", codepoint: 10627 }, { name: "RIGHT WHITE CURLY BRACKET", value: "\u2984", codepoint: 10628 }, { name: "LEFT WHITE PARENTHESIS", value: "\u2985", codepoint: 10629 }, { name: "RIGHT WHITE PARENTHESIS", value: "\u2986", codepoint: 10630 }, { name: "Z NOTATION LEFT IMAGE BRACKET", value: "\u2987", codepoint: 10631 }, { name: "Z NOTATION RIGHT IMAGE BRACKET", value: "\u2988", codepoint: 10632 }, { name: "Z NOTATION LEFT BINDING BRACKET", value: "\u2989", codepoint: 10633 }, { name: "Z NOTATION RIGHT BINDING BRACKET", value: "\u298A", codepoint: 10634 }, { name: "LEFT SQUARE BRACKET WITH UNDERBAR", value: "\u298B", codepoint: 10635 }, { name: "RIGHT SQUARE BRACKET WITH UNDERBAR", value: "\u298C", codepoint: 10636 }, { name: "LEFT SQUARE BRACKET WITH TICK IN TOP CORNER", value: "\u298D", codepoint: 10637 }, { name: "RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER", value: "\u298E", codepoint: 10638 }, { name: "LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER", value: "\u298F", codepoint: 10639 }, { name: "RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER", value: "\u2990", codepoint: 10640 }, { name: "LEFT ANGLE BRACKET WITH DOT", value: "\u2991", codepoint: 10641 }, { name: "RIGHT ANGLE BRACKET WITH DOT", value: "\u2992", codepoint: 10642 }, { name: "LEFT ARC LESS-THAN BRACKET", value: "\u2993", codepoint: 10643 }, { name: "RIGHT ARC GREATER-THAN BRACKET", value: "\u2994", codepoint: 10644 }, { name: "DOUBLE LEFT ARC GREATER-THAN BRACKET", value: "\u2995", codepoint: 10645 }, { name: "DOUBLE RIGHT ARC LESS-THAN BRACKET", value: "\u2996", codepoint: 10646 }, { name: "LEFT BLACK TORTOISE SHELL BRACKET", value: "\u2997", codepoint: 10647 }, { name: "RIGHT BLACK TORTOISE SHELL BRACKET", value: "\u2998", codepoint: 10648 }, { name: "DOTTED FENCE", value: "\u2999", codepoint: 10649 }, { name: "VERTICAL ZIGZAG LINE", value: "\u299A", codepoint: 10650 }, { name: "MEASURED ANGLE OPENING LEFT", value: "\u299B", codepoint: 10651 }, { name: "RIGHT ANGLE VARIANT WITH SQUARE", value: "\u299C", codepoint: 10652 }, { name: "MEASURED RIGHT ANGLE WITH DOT", value: "\u299D", codepoint: 10653 }, { name: "ANGLE WITH S INSIDE", value: "\u299E", codepoint: 10654 }, { name: "ACUTE ANGLE", value: "\u299F", codepoint: 10655 }, { name: "SPHERICAL ANGLE OPENING LEFT", value: "\u29A0", codepoint: 10656 }, { name: "SPHERICAL ANGLE OPENING UP", value: "\u29A1", codepoint: 10657 }, { name: "TURNED ANGLE", value: "\u29A2", codepoint: 10658 }, { name: "REVERSED ANGLE", value: "\u29A3", codepoint: 10659 }, { name: "ANGLE WITH UNDERBAR", value: "\u29A4", codepoint: 10660 }, { name: "REVERSED ANGLE WITH UNDERBAR", value: "\u29A5", codepoint: 10661 }, { name: "OBLIQUE ANGLE OPENING UP", value: "\u29A6", codepoint: 10662 }, { name: "OBLIQUE ANGLE OPENING DOWN", value: "\u29A7", codepoint: 10663 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT", value: "\u29A8", codepoint: 10664 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT", value: "\u29A9", codepoint: 10665 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT", value: "\u29AA", codepoint: 10666 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT", value: "\u29AB", codepoint: 10667 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP", value: "\u29AC", codepoint: 10668 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP", value: "\u29AD", codepoint: 10669 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN", value: "\u29AE", codepoint: 10670 }, { name: "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN", value: "\u29AF", codepoint: 10671 }, { name: "REVERSED EMPTY SET", value: "\u29B0", codepoint: 10672 }, { name: "EMPTY SET WITH OVERBAR", value: "\u29B1", codepoint: 10673 }, { name: "EMPTY SET WITH SMALL CIRCLE ABOVE", value: "\u29B2", codepoint: 10674 }, { name: "EMPTY SET WITH RIGHT ARROW ABOVE", value: "\u29B3", codepoint: 10675 }, { name: "EMPTY SET WITH LEFT ARROW ABOVE", value: "\u29B4", codepoint: 10676 }, { name: "CIRCLE WITH HORIZONTAL BAR", value: "\u29B5", codepoint: 10677 }, { name: "CIRCLED VERTICAL BAR", value: "\u29B6", codepoint: 10678 }, { name: "CIRCLED PARALLEL", value: "\u29B7", codepoint: 10679 }, { name: "CIRCLED REVERSE SOLIDUS", value: "\u29B8", codepoint: 10680 }, { name: "CIRCLED PERPENDICULAR", value: "\u29B9", codepoint: 10681 }, { name: "CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR", value: "\u29BA", codepoint: 10682 }, { name: "CIRCLE WITH SUPERIMPOSED X", value: "\u29BB", codepoint: 10683 }, { name: "CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN", value: "\u29BC", codepoint: 10684 }, { name: "UP ARROW THROUGH CIRCLE", value: "\u29BD", codepoint: 10685 }, { name: "CIRCLED WHITE BULLET", value: "\u29BE", codepoint: 10686 }, { name: "CIRCLED BULLET", value: "\u29BF", codepoint: 10687 }, { name: "CIRCLED LESS-THAN", value: "\u29C0", codepoint: 10688 }, { name: "CIRCLED GREATER-THAN", value: "\u29C1", codepoint: 10689 }, { name: "CIRCLE WITH SMALL CIRCLE TO THE RIGHT", value: "\u29C2", codepoint: 10690 }, { name: "CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT", value: "\u29C3", codepoint: 10691 }, { name: "SQUARED RISING DIAGONAL SLASH", value: "\u29C4", codepoint: 10692 }, { name: "SQUARED FALLING DIAGONAL SLASH", value: "\u29C5", codepoint: 10693 }, { name: "SQUARED ASTERISK", value: "\u29C6", codepoint: 10694 }, { name: "SQUARED SMALL CIRCLE", value: "\u29C7", codepoint: 10695 }, { name: "SQUARED SQUARE", value: "\u29C8", codepoint: 10696 }, { name: "TWO JOINED SQUARES", value: "\u29C9", codepoint: 10697 }, { name: "TRIANGLE WITH DOT ABOVE", value: "\u29CA", codepoint: 10698 }, { name: "TRIANGLE WITH UNDERBAR", value: "\u29CB", codepoint: 10699 }, { name: "S IN TRIANGLE", value: "\u29CC", codepoint: 10700 }, { name: "TRIANGLE WITH SERIFS AT BOTTOM", value: "\u29CD", codepoint: 10701 }, { name: "RIGHT TRIANGLE ABOVE LEFT TRIANGLE", value: "\u29CE", codepoint: 10702 }, { name: "LEFT TRIANGLE BESIDE VERTICAL BAR", value: "\u29CF", codepoint: 10703 }, { name: "VERTICAL BAR BESIDE RIGHT TRIANGLE", value: "\u29D0", codepoint: 10704 }, { name: "BOWTIE WITH LEFT HALF BLACK", value: "\u29D1", codepoint: 10705 }, { name: "BOWTIE WITH RIGHT HALF BLACK", value: "\u29D2", codepoint: 10706 }, { name: "BLACK BOWTIE", value: "\u29D3", codepoint: 10707 }, { name: "TIMES WITH LEFT HALF BLACK", value: "\u29D4", codepoint: 10708 }, { name: "TIMES WITH RIGHT HALF BLACK", value: "\u29D5", codepoint: 10709 }, { name: "WHITE HOURGLASS", value: "\u29D6", codepoint: 10710 }, { name: "BLACK HOURGLASS", value: "\u29D7", codepoint: 10711 }, { name: "LEFT WIGGLY FENCE", value: "\u29D8", codepoint: 10712 }, { name: "RIGHT WIGGLY FENCE", value: "\u29D9", codepoint: 10713 }, { name: "LEFT DOUBLE WIGGLY FENCE", value: "\u29DA", codepoint: 10714 }, { name: "RIGHT DOUBLE WIGGLY FENCE", value: "\u29DB", codepoint: 10715 }, { name: "INCOMPLETE INFINITY", value: "\u29DC", codepoint: 10716 }, { name: "TIE OVER INFINITY", value: "\u29DD", codepoint: 10717 }, { name: "INFINITY NEGATED WITH VERTICAL BAR", value: "\u29DE", codepoint: 10718 }, { name: "DOUBLE-ENDED MULTIMAP", value: "\u29DF", codepoint: 10719 }, { name: "SQUARE WITH CONTOURED OUTLINE", value: "\u29E0", codepoint: 10720 }, { name: "INCREASES AS", value: "\u29E1", codepoint: 10721 }, { name: "SHUFFLE PRODUCT", value: "\u29E2", codepoint: 10722 }, { name: "EQUALS SIGN AND SLANTED PARALLEL", value: "\u29E3", codepoint: 10723 }, { name: "EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE", value: "\u29E4", codepoint: 10724 }, { name: "IDENTICAL TO AND SLANTED PARALLEL", value: "\u29E5", codepoint: 10725 }, { name: "GLEICH STARK", value: "\u29E6", codepoint: 10726 }, { name: "THERMODYNAMIC", value: "\u29E7", codepoint: 10727 }, { name: "DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK", value: "\u29E8", codepoint: 10728 }, { name: "DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK", value: "\u29E9", codepoint: 10729 }, { name: "BLACK DIAMOND WITH DOWN ARROW", value: "\u29EA", codepoint: 10730 }, { name: "BLACK LOZENGE", value: "\u29EB", codepoint: 10731 }, { name: "WHITE CIRCLE WITH DOWN ARROW", value: "\u29EC", codepoint: 10732 }, { name: "BLACK CIRCLE WITH DOWN ARROW", value: "\u29ED", codepoint: 10733 }, { name: "ERROR-BARRED WHITE SQUARE", value: "\u29EE", codepoint: 10734 }, { name: "ERROR-BARRED BLACK SQUARE", value: "\u29EF", codepoint: 10735 }, { name: "ERROR-BARRED WHITE DIAMOND", value: "\u29F0", codepoint: 10736 }, { name: "ERROR-BARRED BLACK DIAMOND", value: "\u29F1", codepoint: 10737 }, { name: "ERROR-BARRED WHITE CIRCLE", value: "\u29F2", codepoint: 10738 }, { name: "ERROR-BARRED BLACK CIRCLE", value: "\u29F3", codepoint: 10739 }, { name: "RULE-DELAYED", value: "\u29F4", codepoint: 10740 }, { name: "REVERSE SOLIDUS OPERATOR", value: "\u29F5", codepoint: 10741 }, { name: "SOLIDUS WITH OVERBAR", value: "\u29F6", codepoint: 10742 }, { name: "REVERSE SOLIDUS WITH HORIZONTAL STROKE", value: "\u29F7", codepoint: 10743 }, { name: "BIG SOLIDUS", value: "\u29F8", codepoint: 10744 }, { name: "BIG REVERSE SOLIDUS", value: "\u29F9", codepoint: 10745 }, { name: "DOUBLE PLUS", value: "\u29FA", codepoint: 10746 }, { name: "TRIPLE PLUS", value: "\u29FB", codepoint: 10747 }, { name: "LEFT-POINTING CURVED ANGLE BRACKET", value: "\u29FC", codepoint: 10748 }, { name: "RIGHT-POINTING CURVED ANGLE BRACKET", value: "\u29FD", codepoint: 10749 }, { name: "TINY", value: "\u29FE", codepoint: 10750 }, { name: "MINY", value: "\u29FF", codepoint: 10751 }, { name: "N-ARY CIRCLED DOT OPERATOR", value: "\u2A00", codepoint: 10752 }, { name: "N-ARY CIRCLED PLUS OPERATOR", value: "\u2A01", codepoint: 10753 }, { name: "N-ARY CIRCLED TIMES OPERATOR", value: "\u2A02", codepoint: 10754 }, { name: "N-ARY UNION OPERATOR WITH DOT", value: "\u2A03", codepoint: 10755 }, { name: "N-ARY UNION OPERATOR WITH PLUS", value: "\u2A04", codepoint: 10756 }, { name: "N-ARY SQUARE INTERSECTION OPERATOR", value: "\u2A05", codepoint: 10757 }, { name: "N-ARY SQUARE UNION OPERATOR", value: "\u2A06", codepoint: 10758 }, { name: "TWO LOGICAL AND OPERATOR", value: "\u2A07", codepoint: 10759 }, { name: "TWO LOGICAL OR OPERATOR", value: "\u2A08", codepoint: 10760 }, { name: "N-ARY TIMES OPERATOR", value: "\u2A09", codepoint: 10761 }, { name: "MODULO TWO SUM", value: "\u2A0A", codepoint: 10762 }, { name: "SUMMATION WITH INTEGRAL", value: "\u2A0B", codepoint: 10763 }, { name: "QUADRUPLE INTEGRAL OPERATOR", value: "\u2A0C", codepoint: 10764 }, { name: "FINITE PART INTEGRAL", value: "\u2A0D", codepoint: 10765 }, { name: "INTEGRAL WITH DOUBLE STROKE", value: "\u2A0E", codepoint: 10766 }, { name: "INTEGRAL AVERAGE WITH SLASH", value: "\u2A0F", codepoint: 10767 }, { name: "CIRCULATION FUNCTION", value: "\u2A10", codepoint: 10768 }, { name: "ANTICLOCKWISE INTEGRATION", value: "\u2A11", codepoint: 10769 }, { name: "LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE", value: "\u2A12", codepoint: 10770 }, { name: "LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE", value: "\u2A13", codepoint: 10771 }, { name: "LINE INTEGRATION NOT INCLUDING THE POLE", value: "\u2A14", codepoint: 10772 }, { name: "INTEGRAL AROUND A POINT OPERATOR", value: "\u2A15", codepoint: 10773 }, { name: "QUATERNION INTEGRAL OPERATOR", value: "\u2A16", codepoint: 10774 }, { name: "INTEGRAL WITH LEFTWARDS ARROW WITH HOOK", value: "\u2A17", codepoint: 10775 }, { name: "INTEGRAL WITH TIMES SIGN", value: "\u2A18", codepoint: 10776 }, { name: "INTEGRAL WITH INTERSECTION", value: "\u2A19", codepoint: 10777 }, { name: "INTEGRAL WITH UNION", value: "\u2A1A", codepoint: 10778 }, { name: "INTEGRAL WITH OVERBAR", value: "\u2A1B", codepoint: 10779 }, { name: "INTEGRAL WITH UNDERBAR", value: "\u2A1C", codepoint: 10780 }, { name: "JOIN", value: "\u2A1D", codepoint: 10781 }, { name: "LARGE LEFT TRIANGLE OPERATOR", value: "\u2A1E", codepoint: 10782 }, { name: "Z NOTATION SCHEMA COMPOSITION", value: "\u2A1F", codepoint: 10783 }, { name: "Z NOTATION SCHEMA PIPING", value: "\u2A20", codepoint: 10784 }, { name: "Z NOTATION SCHEMA PROJECTION", value: "\u2A21", codepoint: 10785 }, { name: "PLUS SIGN WITH SMALL CIRCLE ABOVE", value: "\u2A22", codepoint: 10786 }, { name: "PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE", value: "\u2A23", codepoint: 10787 }, { name: "PLUS SIGN WITH TILDE ABOVE", value: "\u2A24", codepoint: 10788 }, { name: "PLUS SIGN WITH DOT BELOW", value: "\u2A25", codepoint: 10789 }, { name: "PLUS SIGN WITH TILDE BELOW", value: "\u2A26", codepoint: 10790 }, { name: "PLUS SIGN WITH SUBSCRIPT TWO", value: "\u2A27", codepoint: 10791 }, { name: "PLUS SIGN WITH BLACK TRIANGLE", value: "\u2A28", codepoint: 10792 }, { name: "MINUS SIGN WITH COMMA ABOVE", value: "\u2A29", codepoint: 10793 }, { name: "MINUS SIGN WITH DOT BELOW", value: "\u2A2A", codepoint: 10794 }, { name: "MINUS SIGN WITH FALLING DOTS", value: "\u2A2B", codepoint: 10795 }, { name: "MINUS SIGN WITH RISING DOTS", value: "\u2A2C", codepoint: 10796 }, { name: "PLUS SIGN IN LEFT HALF CIRCLE", value: "\u2A2D", codepoint: 10797 }, { name: "PLUS SIGN IN RIGHT HALF CIRCLE", value: "\u2A2E", codepoint: 10798 }, { name: "VECTOR OR CROSS PRODUCT", value: "\u2A2F", codepoint: 10799 }, { name: "MULTIPLICATION SIGN WITH DOT ABOVE", value: "\u2A30", codepoint: 10800 }, { name: "MULTIPLICATION SIGN WITH UNDERBAR", value: "\u2A31", codepoint: 10801 }, { name: "SEMIDIRECT PRODUCT WITH BOTTOM CLOSED", value: "\u2A32", codepoint: 10802 }, { name: "SMASH PRODUCT", value: "\u2A33", codepoint: 10803 }, { name: "MULTIPLICATION SIGN IN LEFT HALF CIRCLE", value: "\u2A34", codepoint: 10804 }, { name: "MULTIPLICATION SIGN IN RIGHT HALF CIRCLE", value: "\u2A35", codepoint: 10805 }, { name: "CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT", value: "\u2A36", codepoint: 10806 }, { name: "MULTIPLICATION SIGN IN DOUBLE CIRCLE", value: "\u2A37", codepoint: 10807 }, { name: "CIRCLED DIVISION SIGN", value: "\u2A38", codepoint: 10808 }, { name: "PLUS SIGN IN TRIANGLE", value: "\u2A39", codepoint: 10809 }, { name: "MINUS SIGN IN TRIANGLE", value: "\u2A3A", codepoint: 10810 }, { name: "MULTIPLICATION SIGN IN TRIANGLE", value: "\u2A3B", codepoint: 10811 }, { name: "INTERIOR PRODUCT", value: "\u2A3C", codepoint: 10812 }, { name: "RIGHTHAND INTERIOR PRODUCT", value: "\u2A3D", codepoint: 10813 }, { name: "Z NOTATION RELATIONAL COMPOSITION", value: "\u2A3E", codepoint: 10814 }, { name: "AMALGAMATION OR COPRODUCT", value: "\u2A3F", codepoint: 10815 }, { name: "INTERSECTION WITH DOT", value: "\u2A40", codepoint: 10816 }, { name: "UNION WITH MINUS SIGN", value: "\u2A41", codepoint: 10817 }, { name: "UNION WITH OVERBAR", value: "\u2A42", codepoint: 10818 }, { name: "INTERSECTION WITH OVERBAR", value: "\u2A43", codepoint: 10819 }, { name: "INTERSECTION WITH LOGICAL AND", value: "\u2A44", codepoint: 10820 }, { name: "UNION WITH LOGICAL OR", value: "\u2A45", codepoint: 10821 }, { name: "UNION ABOVE INTERSECTION", value: "\u2A46", codepoint: 10822 }, { name: "INTERSECTION ABOVE UNION", value: "\u2A47", codepoint: 10823 }, { name: "UNION ABOVE BAR ABOVE INTERSECTION", value: "\u2A48", codepoint: 10824 }, { name: "INTERSECTION ABOVE BAR ABOVE UNION", value: "\u2A49", codepoint: 10825 }, { name: "UNION BESIDE AND JOINED WITH UNION", value: "\u2A4A", codepoint: 10826 }, { name: "INTERSECTION BESIDE AND JOINED WITH INTERSECTION", value: "\u2A4B", codepoint: 10827 }, { name: "CLOSED UNION WITH SERIFS", value: "\u2A4C", codepoint: 10828 }, { name: "CLOSED INTERSECTION WITH SERIFS", value: "\u2A4D", codepoint: 10829 }, { name: "DOUBLE SQUARE INTERSECTION", value: "\u2A4E", codepoint: 10830 }, { name: "DOUBLE SQUARE UNION", value: "\u2A4F", codepoint: 10831 }, { name: "CLOSED UNION WITH SERIFS AND SMASH PRODUCT", value: "\u2A50", codepoint: 10832 }, { name: "LOGICAL AND WITH DOT ABOVE", value: "\u2A51", codepoint: 10833 }, { name: "LOGICAL OR WITH DOT ABOVE", value: "\u2A52", codepoint: 10834 }, { name: "DOUBLE LOGICAL AND", value: "\u2A53", codepoint: 10835 }, { name: "DOUBLE LOGICAL OR", value: "\u2A54", codepoint: 10836 }, { name: "TWO INTERSECTING LOGICAL AND", value: "\u2A55", codepoint: 10837 }, { name: "TWO INTERSECTING LOGICAL OR", value: "\u2A56", codepoint: 10838 }, { name: "SLOPING LARGE OR", value: "\u2A57", codepoint: 10839 }, { name: "SLOPING LARGE AND", value: "\u2A58", codepoint: 10840 }, { name: "LOGICAL OR OVERLAPPING LOGICAL AND", value: "\u2A59", codepoint: 10841 }, { name: "LOGICAL AND WITH MIDDLE STEM", value: "\u2A5A", codepoint: 10842 }, { name: "LOGICAL OR WITH MIDDLE STEM", value: "\u2A5B", codepoint: 10843 }, { name: "LOGICAL AND WITH HORIZONTAL DASH", value: "\u2A5C", codepoint: 10844 }, { name: "LOGICAL OR WITH HORIZONTAL DASH", value: "\u2A5D", codepoint: 10845 }, { name: "LOGICAL AND WITH DOUBLE OVERBAR", value: "\u2A5E", codepoint: 10846 }, { name: "LOGICAL AND WITH UNDERBAR", value: "\u2A5F", codepoint: 10847 }, { name: "LOGICAL AND WITH DOUBLE UNDERBAR", value: "\u2A60", codepoint: 10848 }, { name: "SMALL VEE WITH UNDERBAR", value: "\u2A61", codepoint: 10849 }, { name: "LOGICAL OR WITH DOUBLE OVERBAR", value: "\u2A62", codepoint: 10850 }, { name: "LOGICAL OR WITH DOUBLE UNDERBAR", value: "\u2A63", codepoint: 10851 }, { name: "Z NOTATION DOMAIN ANTIRESTRICTION", value: "\u2A64", codepoint: 10852 }, { name: "Z NOTATION RANGE ANTIRESTRICTION", value: "\u2A65", codepoint: 10853 }, { name: "EQUALS SIGN WITH DOT BELOW", value: "\u2A66", codepoint: 10854 }, { name: "IDENTICAL WITH DOT ABOVE", value: "\u2A67", codepoint: 10855 }, { name: "TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE", value: "\u2A68", codepoint: 10856 }, { name: "TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE", value: "\u2A69", codepoint: 10857 }, { name: "TILDE OPERATOR WITH DOT ABOVE", value: "\u2A6A", codepoint: 10858 }, { name: "TILDE OPERATOR WITH RISING DOTS", value: "\u2A6B", codepoint: 10859 }, { name: "SIMILAR MINUS SIMILAR", value: "\u2A6C", codepoint: 10860 }, { name: "CONGRUENT WITH DOT ABOVE", value: "\u2A6D", codepoint: 10861 }, { name: "EQUALS WITH ASTERISK", value: "\u2A6E", codepoint: 10862 }, { name: "ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT", value: "\u2A6F", codepoint: 10863 }, { name: "APPROXIMATELY EQUAL OR EQUAL TO", value: "\u2A70", codepoint: 10864 }, { name: "EQUALS SIGN ABOVE PLUS SIGN", value: "\u2A71", codepoint: 10865 }, { name: "PLUS SIGN ABOVE EQUALS SIGN", value: "\u2A72", codepoint: 10866 }, { name: "EQUALS SIGN ABOVE TILDE OPERATOR", value: "\u2A73", codepoint: 10867 }, { name: "DOUBLE COLON EQUAL", value: "\u2A74", codepoint: 10868 }, { name: "TWO CONSECUTIVE EQUALS SIGNS", value: "\u2A75", codepoint: 10869 }, { name: "THREE CONSECUTIVE EQUALS SIGNS", value: "\u2A76", codepoint: 10870 }, { name: "EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW", value: "\u2A77", codepoint: 10871 }, { name: "EQUIVALENT WITH FOUR DOTS ABOVE", value: "\u2A78", codepoint: 10872 }, { name: "LESS-THAN WITH CIRCLE INSIDE", value: "\u2A79", codepoint: 10873 }, { name: "GREATER-THAN WITH CIRCLE INSIDE", value: "\u2A7A", codepoint: 10874 }, { name: "LESS-THAN WITH QUESTION MARK ABOVE", value: "\u2A7B", codepoint: 10875 }, { name: "GREATER-THAN WITH QUESTION MARK ABOVE", value: "\u2A7C", codepoint: 10876 }, { name: "LESS-THAN OR SLANTED EQUAL TO", value: "\u2A7D", codepoint: 10877 }, { name: "GREATER-THAN OR SLANTED EQUAL TO", value: "\u2A7E", codepoint: 10878 }, { name: "LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE", value: "\u2A7F", codepoint: 10879 }, { name: "GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE", value: "\u2A80", codepoint: 10880 }, { name: "LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE", value: "\u2A81", codepoint: 10881 }, { name: "GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE", value: "\u2A82", codepoint: 10882 }, { name: "LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT", value: "\u2A83", codepoint: 10883 }, { name: "GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT", value: "\u2A84", codepoint: 10884 }, { name: "LESS-THAN OR APPROXIMATE", value: "\u2A85", codepoint: 10885 }, { name: "GREATER-THAN OR APPROXIMATE", value: "\u2A86", codepoint: 10886 }, { name: "LESS-THAN AND SINGLE-LINE NOT EQUAL TO", value: "\u2A87", codepoint: 10887 }, { name: "GREATER-THAN AND SINGLE-LINE NOT EQUAL TO", value: "\u2A88", codepoint: 10888 }, { name: "LESS-THAN AND NOT APPROXIMATE", value: "\u2A89", codepoint: 10889 }, { name: "GREATER-THAN AND NOT APPROXIMATE", value: "\u2A8A", codepoint: 10890 }, { name: "LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN", value: "\u2A8B", codepoint: 10891 }, { name: "GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN", value: "\u2A8C", codepoint: 10892 }, { name: "LESS-THAN ABOVE SIMILAR OR EQUAL", value: "\u2A8D", codepoint: 10893 }, { name: "GREATER-THAN ABOVE SIMILAR OR EQUAL", value: "\u2A8E", codepoint: 10894 }, { name: "LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN", value: "\u2A8F", codepoint: 10895 }, { name: "GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN", value: "\u2A90", codepoint: 10896 }, { name: "LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL", value: "\u2A91", codepoint: 10897 }, { name: "GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL", value: "\u2A92", codepoint: 10898 }, { name: "LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL", value: "\u2A93", codepoint: 10899 }, { name: "GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL", value: "\u2A94", codepoint: 10900 }, { name: "SLANTED EQUAL TO OR LESS-THAN", value: "\u2A95", codepoint: 10901 }, { name: "SLANTED EQUAL TO OR GREATER-THAN", value: "\u2A96", codepoint: 10902 }, { name: "SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE", value: "\u2A97", codepoint: 10903 }, { name: "SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE", value: "\u2A98", codepoint: 10904 }, { name: "DOUBLE-LINE EQUAL TO OR LESS-THAN", value: "\u2A99", codepoint: 10905 }, { name: "DOUBLE-LINE EQUAL TO OR GREATER-THAN", value: "\u2A9A", codepoint: 10906 }, { name: "DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN", value: "\u2A9B", codepoint: 10907 }, { name: "DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN", value: "\u2A9C", codepoint: 10908 }, { name: "SIMILAR OR LESS-THAN", value: "\u2A9D", codepoint: 10909 }, { name: "SIMILAR OR GREATER-THAN", value: "\u2A9E", codepoint: 10910 }, { name: "SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN", value: "\u2A9F", codepoint: 10911 }, { name: "SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN", value: "\u2AA0", codepoint: 10912 }, { name: "DOUBLE NESTED LESS-THAN", value: "\u2AA1", codepoint: 10913 }, { name: "DOUBLE NESTED GREATER-THAN", value: "\u2AA2", codepoint: 10914 }, { name: "DOUBLE NESTED LESS-THAN WITH UNDERBAR", value: "\u2AA3", codepoint: 10915 }, { name: "GREATER-THAN OVERLAPPING LESS-THAN", value: "\u2AA4", codepoint: 10916 }, { name: "GREATER-THAN BESIDE LESS-THAN", value: "\u2AA5", codepoint: 10917 }, { name: "LESS-THAN CLOSED BY CURVE", value: "\u2AA6", codepoint: 10918 }, { name: "GREATER-THAN CLOSED BY CURVE", value: "\u2AA7", codepoint: 10919 }, { name: "LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL", value: "\u2AA8", codepoint: 10920 }, { name: "GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL", value: "\u2AA9", codepoint: 10921 }, { name: "SMALLER THAN", value: "\u2AAA", codepoint: 10922 }, { name: "LARGER THAN", value: "\u2AAB", codepoint: 10923 }, { name: "SMALLER THAN OR EQUAL TO", value: "\u2AAC", codepoint: 10924 }, { name: "LARGER THAN OR EQUAL TO", value: "\u2AAD", codepoint: 10925 }, { name: "EQUALS SIGN WITH BUMPY ABOVE", value: "\u2AAE", codepoint: 10926 }, { name: "PRECEDES ABOVE SINGLE-LINE EQUALS SIGN", value: "\u2AAF", codepoint: 10927 }, { name: "SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN", value: "\u2AB0", codepoint: 10928 }, { name: "PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO", value: "\u2AB1", codepoint: 10929 }, { name: "SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO", value: "\u2AB2", codepoint: 10930 }, { name: "PRECEDES ABOVE EQUALS SIGN", value: "\u2AB3", codepoint: 10931 }, { name: "SUCCEEDS ABOVE EQUALS SIGN", value: "\u2AB4", codepoint: 10932 }, { name: "PRECEDES ABOVE NOT EQUAL TO", value: "\u2AB5", codepoint: 10933 }, { name: "SUCCEEDS ABOVE NOT EQUAL TO", value: "\u2AB6", codepoint: 10934 }, { name: "PRECEDES ABOVE ALMOST EQUAL TO", value: "\u2AB7", codepoint: 10935 }, { name: "SUCCEEDS ABOVE ALMOST EQUAL TO", value: "\u2AB8", codepoint: 10936 }, { name: "PRECEDES ABOVE NOT ALMOST EQUAL TO", value: "\u2AB9", codepoint: 10937 }, { name: "SUCCEEDS ABOVE NOT ALMOST EQUAL TO", value: "\u2ABA", codepoint: 10938 }, { name: "DOUBLE PRECEDES", value: "\u2ABB", codepoint: 10939 }, { name: "DOUBLE SUCCEEDS", value: "\u2ABC", codepoint: 10940 }, { name: "SUBSET WITH DOT", value: "\u2ABD", codepoint: 10941 }, { name: "SUPERSET WITH DOT", value: "\u2ABE", codepoint: 10942 }, { name: "SUBSET WITH PLUS SIGN BELOW", value: "\u2ABF", codepoint: 10943 }, { name: "SUPERSET WITH PLUS SIGN BELOW", value: "\u2AC0", codepoint: 10944 }, { name: "SUBSET WITH MULTIPLICATION SIGN BELOW", value: "\u2AC1", codepoint: 10945 }, { name: "SUPERSET WITH MULTIPLICATION SIGN BELOW", value: "\u2AC2", codepoint: 10946 }, { name: "SUBSET OF OR EQUAL TO WITH DOT ABOVE", value: "\u2AC3", codepoint: 10947 }, { name: "SUPERSET OF OR EQUAL TO WITH DOT ABOVE", value: "\u2AC4", codepoint: 10948 }, { name: "SUBSET OF ABOVE EQUALS SIGN", value: "\u2AC5", codepoint: 10949 }, { name: "SUPERSET OF ABOVE EQUALS SIGN", value: "\u2AC6", codepoint: 10950 }, { name: "SUBSET OF ABOVE TILDE OPERATOR", value: "\u2AC7", codepoint: 10951 }, { name: "SUPERSET OF ABOVE TILDE OPERATOR", value: "\u2AC8", codepoint: 10952 }, { name: "SUBSET OF ABOVE ALMOST EQUAL TO", value: "\u2AC9", codepoint: 10953 }, { name: "SUPERSET OF ABOVE ALMOST EQUAL TO", value: "\u2ACA", codepoint: 10954 }, { name: "SUBSET OF ABOVE NOT EQUAL TO", value: "\u2ACB", codepoint: 10955 }, { name: "SUPERSET OF ABOVE NOT EQUAL TO", value: "\u2ACC", codepoint: 10956 }, { name: "SQUARE LEFT OPEN BOX OPERATOR", value: "\u2ACD", codepoint: 10957 }, { name: "SQUARE RIGHT OPEN BOX OPERATOR", value: "\u2ACE", codepoint: 10958 }, { name: "CLOSED SUBSET", value: "\u2ACF", codepoint: 10959 }, { name: "CLOSED SUPERSET", value: "\u2AD0", codepoint: 10960 }, { name: "CLOSED SUBSET OR EQUAL TO", value: "\u2AD1", codepoint: 10961 }, { name: "CLOSED SUPERSET OR EQUAL TO", value: "\u2AD2", codepoint: 10962 }, { name: "SUBSET ABOVE SUPERSET", value: "\u2AD3", codepoint: 10963 }, { name: "SUPERSET ABOVE SUBSET", value: "\u2AD4", codepoint: 10964 }, { name: "SUBSET ABOVE SUBSET", value: "\u2AD5", codepoint: 10965 }, { name: "SUPERSET ABOVE SUPERSET", value: "\u2AD6", codepoint: 10966 }, { name: "SUPERSET BESIDE SUBSET", value: "\u2AD7", codepoint: 10967 }, { name: "SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET", value: "\u2AD8", codepoint: 10968 }, { name: "ELEMENT OF OPENING DOWNWARDS", value: "\u2AD9", codepoint: 10969 }, { name: "PITCHFORK WITH TEE TOP", value: "\u2ADA", codepoint: 10970 }, { name: "TRANSVERSAL INTERSECTION", value: "\u2ADB", codepoint: 10971 }, { name: "FORKING", value: "\u2ADC", codepoint: 10972 }, { name: "NONFORKING", value: "\u2ADD", codepoint: 10973 }, { name: "SHORT LEFT TACK", value: "\u2ADE", codepoint: 10974 }, { name: "SHORT DOWN TACK", value: "\u2ADF", codepoint: 10975 }, { name: "SHORT UP TACK", value: "\u2AE0", codepoint: 10976 }, { name: "PERPENDICULAR WITH S", value: "\u2AE1", codepoint: 10977 }, { name: "VERTICAL BAR TRIPLE RIGHT TURNSTILE", value: "\u2AE2", codepoint: 10978 }, { name: "DOUBLE VERTICAL BAR LEFT TURNSTILE", value: "\u2AE3", codepoint: 10979 }, { name: "VERTICAL BAR DOUBLE LEFT TURNSTILE", value: "\u2AE4", codepoint: 10980 }, { name: "DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE", value: "\u2AE5", codepoint: 10981 }, { name: "LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL", value: "\u2AE6", codepoint: 10982 }, { name: "SHORT DOWN TACK WITH OVERBAR", value: "\u2AE7", codepoint: 10983 }, { name: "SHORT UP TACK WITH UNDERBAR", value: "\u2AE8", codepoint: 10984 }, { name: "SHORT UP TACK ABOVE SHORT DOWN TACK", value: "\u2AE9", codepoint: 10985 }, { name: "DOUBLE DOWN TACK", value: "\u2AEA", codepoint: 10986 }, { name: "DOUBLE UP TACK", value: "\u2AEB", codepoint: 10987 }, { name: "DOUBLE STROKE NOT SIGN", value: "\u2AEC", codepoint: 10988 }, { name: "REVERSED DOUBLE STROKE NOT SIGN", value: "\u2AED", codepoint: 10989 }, { name: "DOES NOT DIVIDE WITH REVERSED NEGATION SLASH", value: "\u2AEE", codepoint: 10990 }, { name: "VERTICAL LINE WITH CIRCLE ABOVE", value: "\u2AEF", codepoint: 10991 }, { name: "VERTICAL LINE WITH CIRCLE BELOW", value: "\u2AF0", codepoint: 10992 }, { name: "DOWN TACK WITH CIRCLE BELOW", value: "\u2AF1", codepoint: 10993 }, { name: "PARALLEL WITH HORIZONTAL STROKE", value: "\u2AF2", codepoint: 10994 }, { name: "PARALLEL WITH TILDE OPERATOR", value: "\u2AF3", codepoint: 10995 }, { name: "TRIPLE VERTICAL BAR BINARY RELATION", value: "\u2AF4", codepoint: 10996 }, { name: "TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE", value: "\u2AF5", codepoint: 10997 }, { name: "TRIPLE COLON OPERATOR", value: "\u2AF6", codepoint: 10998 }, { name: "TRIPLE NESTED LESS-THAN", value: "\u2AF7", codepoint: 10999 }, { name: "TRIPLE NESTED GREATER-THAN", value: "\u2AF8", codepoint: 11e3 }, { name: "DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO", value: "\u2AF9", codepoint: 11001 }, { name: "DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO", value: "\u2AFA", codepoint: 11002 }, { name: "TRIPLE SOLIDUS BINARY RELATION", value: "\u2AFB", codepoint: 11003 }, { name: "LARGE TRIPLE VERTICAL BAR OPERATOR", value: "\u2AFC", codepoint: 11004 }, { name: "DOUBLE SOLIDUS OPERATOR", value: "\u2AFD", codepoint: 11005 }, { name: "WHITE VERTICAL BAR", value: "\u2AFE", codepoint: 11006 }, { name: "N-ARY WHITE VERTICAL BAR", value: "\u2AFF", codepoint: 11007 }, { name: "MATHEMATICAL BOLD CAPITAL A", value: "\u{1D400}", codepoint: 119808 }, { name: "MATHEMATICAL BOLD CAPITAL B", value: "\u{1D401}", codepoint: 119809 }, { name: "MATHEMATICAL BOLD CAPITAL C", value: "\u{1D402}", codepoint: 119810 }, { name: "MATHEMATICAL BOLD CAPITAL D", value: "\u{1D403}", codepoint: 119811 }, { name: "MATHEMATICAL BOLD CAPITAL E", value: "\u{1D404}", codepoint: 119812 }, { name: "MATHEMATICAL BOLD CAPITAL F", value: "\u{1D405}", codepoint: 119813 }, { name: "MATHEMATICAL BOLD CAPITAL G", value: "\u{1D406}", codepoint: 119814 }, { name: "MATHEMATICAL BOLD CAPITAL H", value: "\u{1D407}", codepoint: 119815 }, { name: "MATHEMATICAL BOLD CAPITAL I", value: "\u{1D408}", codepoint: 119816 }, { name: "MATHEMATICAL BOLD CAPITAL J", value: "\u{1D409}", codepoint: 119817 }, { name: "MATHEMATICAL BOLD CAPITAL K", value: "\u{1D40A}", codepoint: 119818 }, { name: "MATHEMATICAL BOLD CAPITAL L", value: "\u{1D40B}", codepoint: 119819 }, { name: "MATHEMATICAL BOLD CAPITAL M", value: "\u{1D40C}", codepoint: 119820 }, { name: "MATHEMATICAL BOLD CAPITAL N", value: "\u{1D40D}", codepoint: 119821 }, { name: "MATHEMATICAL BOLD CAPITAL O", value: "\u{1D40E}", codepoint: 119822 }, { name: "MATHEMATICAL BOLD CAPITAL P", value: "\u{1D40F}", codepoint: 119823 }, { name: "MATHEMATICAL BOLD CAPITAL Q", value: "\u{1D410}", codepoint: 119824 }, { name: "MATHEMATICAL BOLD CAPITAL R", value: "\u{1D411}", codepoint: 119825 }, { name: "MATHEMATICAL BOLD CAPITAL S", value: "\u{1D412}", codepoint: 119826 }, { name: "MATHEMATICAL BOLD CAPITAL T", value: "\u{1D413}", codepoint: 119827 }, { name: "MATHEMATICAL BOLD CAPITAL U", value: "\u{1D414}", codepoint: 119828 }, { name: "MATHEMATICAL BOLD CAPITAL V", value: "\u{1D415}", codepoint: 119829 }, { name: "MATHEMATICAL BOLD CAPITAL W", value: "\u{1D416}", codepoint: 119830 }, { name: "MATHEMATICAL BOLD CAPITAL X", value: "\u{1D417}", codepoint: 119831 }, { name: "MATHEMATICAL BOLD CAPITAL Y", value: "\u{1D418}", codepoint: 119832 }, { name: "MATHEMATICAL BOLD CAPITAL Z", value: "\u{1D419}", codepoint: 119833 }, { name: "MATHEMATICAL BOLD SMALL A", value: "\u{1D41A}", codepoint: 119834 }, { name: "MATHEMATICAL BOLD SMALL B", value: "\u{1D41B}", codepoint: 119835 }, { name: "MATHEMATICAL BOLD SMALL C", value: "\u{1D41C}", codepoint: 119836 }, { name: "MATHEMATICAL BOLD SMALL D", value: "\u{1D41D}", codepoint: 119837 }, { name: "MATHEMATICAL BOLD SMALL E", value: "\u{1D41E}", codepoint: 119838 }, { name: "MATHEMATICAL BOLD SMALL F", value: "\u{1D41F}", codepoint: 119839 }, { name: "MATHEMATICAL BOLD SMALL G", value: "\u{1D420}", codepoint: 119840 }, { name: "MATHEMATICAL BOLD SMALL H", value: "\u{1D421}", codepoint: 119841 }, { name: "MATHEMATICAL BOLD SMALL I", value: "\u{1D422}", codepoint: 119842 }, { name: "MATHEMATICAL BOLD SMALL J", value: "\u{1D423}", codepoint: 119843 }, { name: "MATHEMATICAL BOLD SMALL K", value: "\u{1D424}", codepoint: 119844 }, { name: "MATHEMATICAL BOLD SMALL L", value: "\u{1D425}", codepoint: 119845 }, { name: "MATHEMATICAL BOLD SMALL M", value: "\u{1D426}", codepoint: 119846 }, { name: "MATHEMATICAL BOLD SMALL N", value: "\u{1D427}", codepoint: 119847 }, { name: "MATHEMATICAL BOLD SMALL O", value: "\u{1D428}", codepoint: 119848 }, { name: "MATHEMATICAL BOLD SMALL P", value: "\u{1D429}", codepoint: 119849 }, { name: "MATHEMATICAL BOLD SMALL Q", value: "\u{1D42A}", codepoint: 119850 }, { name: "MATHEMATICAL BOLD SMALL R", value: "\u{1D42B}", codepoint: 119851 }, { name: "MATHEMATICAL BOLD SMALL S", value: "\u{1D42C}", codepoint: 119852 }, { name: "MATHEMATICAL BOLD SMALL T", value: "\u{1D42D}", codepoint: 119853 }, { name: "MATHEMATICAL BOLD SMALL U", value: "\u{1D42E}", codepoint: 119854 }, { name: "MATHEMATICAL BOLD SMALL V", value: "\u{1D42F}", codepoint: 119855 }, { name: "MATHEMATICAL BOLD SMALL W", value: "\u{1D430}", codepoint: 119856 }, { name: "MATHEMATICAL BOLD SMALL X", value: "\u{1D431}", codepoint: 119857 }, { name: "MATHEMATICAL BOLD SMALL Y", value: "\u{1D432}", codepoint: 119858 }, { name: "MATHEMATICAL BOLD SMALL Z", value: "\u{1D433}", codepoint: 119859 }, { name: "MATHEMATICAL ITALIC CAPITAL A", value: "\u{1D434}", codepoint: 119860 }, { name: "MATHEMATICAL ITALIC CAPITAL B", value: "\u{1D435}", codepoint: 119861 }, { name: "MATHEMATICAL ITALIC CAPITAL C", value: "\u{1D436}", codepoint: 119862 }, { name: "MATHEMATICAL ITALIC CAPITAL D", value: "\u{1D437}", codepoint: 119863 }, { name: "MATHEMATICAL ITALIC CAPITAL E", value: "\u{1D438}", codepoint: 119864 }, { name: "MATHEMATICAL ITALIC CAPITAL F", value: "\u{1D439}", codepoint: 119865 }, { name: "MATHEMATICAL ITALIC CAPITAL G", value: "\u{1D43A}", codepoint: 119866 }, { name: "MATHEMATICAL ITALIC CAPITAL H", value: "\u{1D43B}", codepoint: 119867 }, { name: "MATHEMATICAL ITALIC CAPITAL I", value: "\u{1D43C}", codepoint: 119868 }, { name: "MATHEMATICAL ITALIC CAPITAL J", value: "\u{1D43D}", codepoint: 119869 }, { name: "MATHEMATICAL ITALIC CAPITAL K", value: "\u{1D43E}", codepoint: 119870 }, { name: "MATHEMATICAL ITALIC CAPITAL L", value: "\u{1D43F}", codepoint: 119871 }, { name: "MATHEMATICAL ITALIC CAPITAL M", value: "\u{1D440}", codepoint: 119872 }, { name: "MATHEMATICAL ITALIC CAPITAL N", value: "\u{1D441}", codepoint: 119873 }, { name: "MATHEMATICAL ITALIC CAPITAL O", value: "\u{1D442}", codepoint: 119874 }, { name: "MATHEMATICAL ITALIC CAPITAL P", value: "\u{1D443}", codepoint: 119875 }, { name: "MATHEMATICAL ITALIC CAPITAL Q", value: "\u{1D444}", codepoint: 119876 }, { name: "MATHEMATICAL ITALIC CAPITAL R", value: "\u{1D445}", codepoint: 119877 }, { name: "MATHEMATICAL ITALIC CAPITAL S", value: "\u{1D446}", codepoint: 119878 }, { name: "MATHEMATICAL ITALIC CAPITAL T", value: "\u{1D447}", codepoint: 119879 }, { name: "MATHEMATICAL ITALIC CAPITAL U", value: "\u{1D448}", codepoint: 119880 }, { name: "MATHEMATICAL ITALIC CAPITAL V", value: "\u{1D449}", codepoint: 119881 }, { name: "MATHEMATICAL ITALIC CAPITAL W", value: "\u{1D44A}", codepoint: 119882 }, { name: "MATHEMATICAL ITALIC CAPITAL X", value: "\u{1D44B}", codepoint: 119883 }, { name: "MATHEMATICAL ITALIC CAPITAL Y", value: "\u{1D44C}", codepoint: 119884 }, { name: "MATHEMATICAL ITALIC CAPITAL Z", value: "\u{1D44D}", codepoint: 119885 }, { name: "MATHEMATICAL ITALIC SMALL A", value: "\u{1D44E}", codepoint: 119886 }, { name: "MATHEMATICAL ITALIC SMALL B", value: "\u{1D44F}", codepoint: 119887 }, { name: "MATHEMATICAL ITALIC SMALL C", value: "\u{1D450}", codepoint: 119888 }, { name: "MATHEMATICAL ITALIC SMALL D", value: "\u{1D451}", codepoint: 119889 }, { name: "MATHEMATICAL ITALIC SMALL E", value: "\u{1D452}", codepoint: 119890 }, { name: "MATHEMATICAL ITALIC SMALL F", value: "\u{1D453}", codepoint: 119891 }, { name: "MATHEMATICAL ITALIC SMALL G", value: "\u{1D454}", codepoint: 119892 }, { name: "MATHEMATICAL ITALIC SMALL I", value: "\u{1D456}", codepoint: 119894 }, { name: "MATHEMATICAL ITALIC SMALL J", value: "\u{1D457}", codepoint: 119895 }, { name: "MATHEMATICAL ITALIC SMALL K", value: "\u{1D458}", codepoint: 119896 }, { name: "MATHEMATICAL ITALIC SMALL L", value: "\u{1D459}", codepoint: 119897 }, { name: "MATHEMATICAL ITALIC SMALL M", value: "\u{1D45A}", codepoint: 119898 }, { name: "MATHEMATICAL ITALIC SMALL N", value: "\u{1D45B}", codepoint: 119899 }, { name: "MATHEMATICAL ITALIC SMALL O", value: "\u{1D45C}", codepoint: 119900 }, { name: "MATHEMATICAL ITALIC SMALL P", value: "\u{1D45D}", codepoint: 119901 }, { name: "MATHEMATICAL ITALIC SMALL Q", value: "\u{1D45E}", codepoint: 119902 }, { name: "MATHEMATICAL ITALIC SMALL R", value: "\u{1D45F}", codepoint: 119903 }, { name: "MATHEMATICAL ITALIC SMALL S", value: "\u{1D460}", codepoint: 119904 }, { name: "MATHEMATICAL ITALIC SMALL T", value: "\u{1D461}", codepoint: 119905 }, { name: "MATHEMATICAL ITALIC SMALL U", value: "\u{1D462}", codepoint: 119906 }, { name: "MATHEMATICAL ITALIC SMALL V", value: "\u{1D463}", codepoint: 119907 }, { name: "MATHEMATICAL ITALIC SMALL W", value: "\u{1D464}", codepoint: 119908 }, { name: "MATHEMATICAL ITALIC SMALL X", value: "\u{1D465}", codepoint: 119909 }, { name: "MATHEMATICAL ITALIC SMALL Y", value: "\u{1D466}", codepoint: 119910 }, { name: "MATHEMATICAL ITALIC SMALL Z", value: "\u{1D467}", codepoint: 119911 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL A", value: "\u{1D468}", codepoint: 119912 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL B", value: "\u{1D469}", codepoint: 119913 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL C", value: "\u{1D46A}", codepoint: 119914 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL D", value: "\u{1D46B}", codepoint: 119915 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL E", value: "\u{1D46C}", codepoint: 119916 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL F", value: "\u{1D46D}", codepoint: 119917 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL G", value: "\u{1D46E}", codepoint: 119918 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL H", value: "\u{1D46F}", codepoint: 119919 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL I", value: "\u{1D470}", codepoint: 119920 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL J", value: "\u{1D471}", codepoint: 119921 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL K", value: "\u{1D472}", codepoint: 119922 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL L", value: "\u{1D473}", codepoint: 119923 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL M", value: "\u{1D474}", codepoint: 119924 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL N", value: "\u{1D475}", codepoint: 119925 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL O", value: "\u{1D476}", codepoint: 119926 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL P", value: "\u{1D477}", codepoint: 119927 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL Q", value: "\u{1D478}", codepoint: 119928 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL R", value: "\u{1D479}", codepoint: 119929 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL S", value: "\u{1D47A}", codepoint: 119930 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL T", value: "\u{1D47B}", codepoint: 119931 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL U", value: "\u{1D47C}", codepoint: 119932 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL V", value: "\u{1D47D}", codepoint: 119933 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL W", value: "\u{1D47E}", codepoint: 119934 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL X", value: "\u{1D47F}", codepoint: 119935 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL Y", value: "\u{1D480}", codepoint: 119936 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL Z", value: "\u{1D481}", codepoint: 119937 }, { name: "MATHEMATICAL BOLD ITALIC SMALL A", value: "\u{1D482}", codepoint: 119938 }, { name: "MATHEMATICAL BOLD ITALIC SMALL B", value: "\u{1D483}", codepoint: 119939 }, { name: "MATHEMATICAL BOLD ITALIC SMALL C", value: "\u{1D484}", codepoint: 119940 }, { name: "MATHEMATICAL BOLD ITALIC SMALL D", value: "\u{1D485}", codepoint: 119941 }, { name: "MATHEMATICAL BOLD ITALIC SMALL E", value: "\u{1D486}", codepoint: 119942 }, { name: "MATHEMATICAL BOLD ITALIC SMALL F", value: "\u{1D487}", codepoint: 119943 }, { name: "MATHEMATICAL BOLD ITALIC SMALL G", value: "\u{1D488}", codepoint: 119944 }, { name: "MATHEMATICAL BOLD ITALIC SMALL H", value: "\u{1D489}", codepoint: 119945 }, { name: "MATHEMATICAL BOLD ITALIC SMALL I", value: "\u{1D48A}", codepoint: 119946 }, { name: "MATHEMATICAL BOLD ITALIC SMALL J", value: "\u{1D48B}", codepoint: 119947 }, { name: "MATHEMATICAL BOLD ITALIC SMALL K", value: "\u{1D48C}", codepoint: 119948 }, { name: "MATHEMATICAL BOLD ITALIC SMALL L", value: "\u{1D48D}", codepoint: 119949 }, { name: "MATHEMATICAL BOLD ITALIC SMALL M", value: "\u{1D48E}", codepoint: 119950 }, { name: "MATHEMATICAL BOLD ITALIC SMALL N", value: "\u{1D48F}", codepoint: 119951 }, { name: "MATHEMATICAL BOLD ITALIC SMALL O", value: "\u{1D490}", codepoint: 119952 }, { name: "MATHEMATICAL BOLD ITALIC SMALL P", value: "\u{1D491}", codepoint: 119953 }, { name: "MATHEMATICAL BOLD ITALIC SMALL Q", value: "\u{1D492}", codepoint: 119954 }, { name: "MATHEMATICAL BOLD ITALIC SMALL R", value: "\u{1D493}", codepoint: 119955 }, { name: "MATHEMATICAL BOLD ITALIC SMALL S", value: "\u{1D494}", codepoint: 119956 }, { name: "MATHEMATICAL BOLD ITALIC SMALL T", value: "\u{1D495}", codepoint: 119957 }, { name: "MATHEMATICAL BOLD ITALIC SMALL U", value: "\u{1D496}", codepoint: 119958 }, { name: "MATHEMATICAL BOLD ITALIC SMALL V", value: "\u{1D497}", codepoint: 119959 }, { name: "MATHEMATICAL BOLD ITALIC SMALL W", value: "\u{1D498}", codepoint: 119960 }, { name: "MATHEMATICAL BOLD ITALIC SMALL X", value: "\u{1D499}", codepoint: 119961 }, { name: "MATHEMATICAL BOLD ITALIC SMALL Y", value: "\u{1D49A}", codepoint: 119962 }, { name: "MATHEMATICAL BOLD ITALIC SMALL Z", value: "\u{1D49B}", codepoint: 119963 }, { name: "MATHEMATICAL SCRIPT CAPITAL A", value: "\u{1D49C}", codepoint: 119964 }, { name: "MATHEMATICAL SCRIPT CAPITAL C", value: "\u{1D49E}", codepoint: 119966 }, { name: "MATHEMATICAL SCRIPT CAPITAL D", value: "\u{1D49F}", codepoint: 119967 }, { name: "MATHEMATICAL SCRIPT CAPITAL G", value: "\u{1D4A2}", codepoint: 119970 }, { name: "MATHEMATICAL SCRIPT CAPITAL J", value: "\u{1D4A5}", codepoint: 119973 }, { name: "MATHEMATICAL SCRIPT CAPITAL K", value: "\u{1D4A6}", codepoint: 119974 }, { name: "MATHEMATICAL SCRIPT CAPITAL N", value: "\u{1D4A9}", codepoint: 119977 }, { name: "MATHEMATICAL SCRIPT CAPITAL O", value: "\u{1D4AA}", codepoint: 119978 }, { name: "MATHEMATICAL SCRIPT CAPITAL P", value: "\u{1D4AB}", codepoint: 119979 }, { name: "MATHEMATICAL SCRIPT CAPITAL Q", value: "\u{1D4AC}", codepoint: 119980 }, { name: "MATHEMATICAL SCRIPT CAPITAL S", value: "\u{1D4AE}", codepoint: 119982 }, { name: "MATHEMATICAL SCRIPT CAPITAL T", value: "\u{1D4AF}", codepoint: 119983 }, { name: "MATHEMATICAL SCRIPT CAPITAL U", value: "\u{1D4B0}", codepoint: 119984 }, { name: "MATHEMATICAL SCRIPT CAPITAL V", value: "\u{1D4B1}", codepoint: 119985 }, { name: "MATHEMATICAL SCRIPT CAPITAL W", value: "\u{1D4B2}", codepoint: 119986 }, { name: "MATHEMATICAL SCRIPT CAPITAL X", value: "\u{1D4B3}", codepoint: 119987 }, { name: "MATHEMATICAL SCRIPT CAPITAL Y", value: "\u{1D4B4}", codepoint: 119988 }, { name: "MATHEMATICAL SCRIPT CAPITAL Z", value: "\u{1D4B5}", codepoint: 119989 }, { name: "MATHEMATICAL SCRIPT SMALL A", value: "\u{1D4B6}", codepoint: 119990 }, { name: "MATHEMATICAL SCRIPT SMALL B", value: "\u{1D4B7}", codepoint: 119991 }, { name: "MATHEMATICAL SCRIPT SMALL C", value: "\u{1D4B8}", codepoint: 119992 }, { name: "MATHEMATICAL SCRIPT SMALL D", value: "\u{1D4B9}", codepoint: 119993 }, { name: "MATHEMATICAL SCRIPT SMALL F", value: "\u{1D4BB}", codepoint: 119995 }, { name: "MATHEMATICAL SCRIPT SMALL H", value: "\u{1D4BD}", codepoint: 119997 }, { name: "MATHEMATICAL SCRIPT SMALL I", value: "\u{1D4BE}", codepoint: 119998 }, { name: "MATHEMATICAL SCRIPT SMALL J", value: "\u{1D4BF}", codepoint: 119999 }, { name: "MATHEMATICAL SCRIPT SMALL K", value: "\u{1D4C0}", codepoint: 12e4 }, { name: "MATHEMATICAL SCRIPT SMALL L", value: "\u{1D4C1}", codepoint: 120001 }, { name: "MATHEMATICAL SCRIPT SMALL M", value: "\u{1D4C2}", codepoint: 120002 }, { name: "MATHEMATICAL SCRIPT SMALL N", value: "\u{1D4C3}", codepoint: 120003 }, { name: "MATHEMATICAL SCRIPT SMALL P", value: "\u{1D4C5}", codepoint: 120005 }, { name: "MATHEMATICAL SCRIPT SMALL Q", value: "\u{1D4C6}", codepoint: 120006 }, { name: "MATHEMATICAL SCRIPT SMALL R", value: "\u{1D4C7}", codepoint: 120007 }, { name: "MATHEMATICAL SCRIPT SMALL S", value: "\u{1D4C8}", codepoint: 120008 }, { name: "MATHEMATICAL SCRIPT SMALL T", value: "\u{1D4C9}", codepoint: 120009 }, { name: "MATHEMATICAL SCRIPT SMALL U", value: "\u{1D4CA}", codepoint: 120010 }, { name: "MATHEMATICAL SCRIPT SMALL V", value: "\u{1D4CB}", codepoint: 120011 }, { name: "MATHEMATICAL SCRIPT SMALL W", value: "\u{1D4CC}", codepoint: 120012 }, { name: "MATHEMATICAL SCRIPT SMALL X", value: "\u{1D4CD}", codepoint: 120013 }, { name: "MATHEMATICAL SCRIPT SMALL Y", value: "\u{1D4CE}", codepoint: 120014 }, { name: "MATHEMATICAL SCRIPT SMALL Z", value: "\u{1D4CF}", codepoint: 120015 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL A", value: "\u{1D4D0}", codepoint: 120016 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL B", value: "\u{1D4D1}", codepoint: 120017 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL C", value: "\u{1D4D2}", codepoint: 120018 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL D", value: "\u{1D4D3}", codepoint: 120019 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL E", value: "\u{1D4D4}", codepoint: 120020 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL F", value: "\u{1D4D5}", codepoint: 120021 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL G", value: "\u{1D4D6}", codepoint: 120022 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL H", value: "\u{1D4D7}", codepoint: 120023 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL I", value: "\u{1D4D8}", codepoint: 120024 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL J", value: "\u{1D4D9}", codepoint: 120025 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL K", value: "\u{1D4DA}", codepoint: 120026 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL L", value: "\u{1D4DB}", codepoint: 120027 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL M", value: "\u{1D4DC}", codepoint: 120028 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL N", value: "\u{1D4DD}", codepoint: 120029 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL O", value: "\u{1D4DE}", codepoint: 120030 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL P", value: "\u{1D4DF}", codepoint: 120031 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL Q", value: "\u{1D4E0}", codepoint: 120032 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL R", value: "\u{1D4E1}", codepoint: 120033 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL S", value: "\u{1D4E2}", codepoint: 120034 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL T", value: "\u{1D4E3}", codepoint: 120035 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL U", value: "\u{1D4E4}", codepoint: 120036 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL V", value: "\u{1D4E5}", codepoint: 120037 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL W", value: "\u{1D4E6}", codepoint: 120038 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL X", value: "\u{1D4E7}", codepoint: 120039 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL Y", value: "\u{1D4E8}", codepoint: 120040 }, { name: "MATHEMATICAL BOLD SCRIPT CAPITAL Z", value: "\u{1D4E9}", codepoint: 120041 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL A", value: "\u{1D4EA}", codepoint: 120042 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL B", value: "\u{1D4EB}", codepoint: 120043 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL C", value: "\u{1D4EC}", codepoint: 120044 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL D", value: "\u{1D4ED}", codepoint: 120045 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL E", value: "\u{1D4EE}", codepoint: 120046 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL F", value: "\u{1D4EF}", codepoint: 120047 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL G", value: "\u{1D4F0}", codepoint: 120048 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL H", value: "\u{1D4F1}", codepoint: 120049 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL I", value: "\u{1D4F2}", codepoint: 120050 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL J", value: "\u{1D4F3}", codepoint: 120051 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL K", value: "\u{1D4F4}", codepoint: 120052 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL L", value: "\u{1D4F5}", codepoint: 120053 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL M", value: "\u{1D4F6}", codepoint: 120054 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL N", value: "\u{1D4F7}", codepoint: 120055 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL O", value: "\u{1D4F8}", codepoint: 120056 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL P", value: "\u{1D4F9}", codepoint: 120057 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL Q", value: "\u{1D4FA}", codepoint: 120058 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL R", value: "\u{1D4FB}", codepoint: 120059 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL S", value: "\u{1D4FC}", codepoint: 120060 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL T", value: "\u{1D4FD}", codepoint: 120061 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL U", value: "\u{1D4FE}", codepoint: 120062 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL V", value: "\u{1D4FF}", codepoint: 120063 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL W", value: "\u{1D500}", codepoint: 120064 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL X", value: "\u{1D501}", codepoint: 120065 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL Y", value: "\u{1D502}", codepoint: 120066 }, { name: "MATHEMATICAL BOLD SCRIPT SMALL Z", value: "\u{1D503}", codepoint: 120067 }, { name: "MATHEMATICAL FRAKTUR CAPITAL A", value: "\u{1D504}", codepoint: 120068 }, { name: "MATHEMATICAL FRAKTUR CAPITAL B", value: "\u{1D505}", codepoint: 120069 }, { name: "MATHEMATICAL FRAKTUR CAPITAL D", value: "\u{1D507}", codepoint: 120071 }, { name: "MATHEMATICAL FRAKTUR CAPITAL E", value: "\u{1D508}", codepoint: 120072 }, { name: "MATHEMATICAL FRAKTUR CAPITAL F", value: "\u{1D509}", codepoint: 120073 }, { name: "MATHEMATICAL FRAKTUR CAPITAL G", value: "\u{1D50A}", codepoint: 120074 }, { name: "MATHEMATICAL FRAKTUR CAPITAL J", value: "\u{1D50D}", codepoint: 120077 }, { name: "MATHEMATICAL FRAKTUR CAPITAL K", value: "\u{1D50E}", codepoint: 120078 }, { name: "MATHEMATICAL FRAKTUR CAPITAL L", value: "\u{1D50F}", codepoint: 120079 }, { name: "MATHEMATICAL FRAKTUR CAPITAL M", value: "\u{1D510}", codepoint: 120080 }, { name: "MATHEMATICAL FRAKTUR CAPITAL N", value: "\u{1D511}", codepoint: 120081 }, { name: "MATHEMATICAL FRAKTUR CAPITAL O", value: "\u{1D512}", codepoint: 120082 }, { name: "MATHEMATICAL FRAKTUR CAPITAL P", value: "\u{1D513}", codepoint: 120083 }, { name: "MATHEMATICAL FRAKTUR CAPITAL Q", value: "\u{1D514}", codepoint: 120084 }, { name: "MATHEMATICAL FRAKTUR CAPITAL S", value: "\u{1D516}", codepoint: 120086 }, { name: "MATHEMATICAL FRAKTUR CAPITAL T", value: "\u{1D517}", codepoint: 120087 }, { name: "MATHEMATICAL FRAKTUR CAPITAL U", value: "\u{1D518}", codepoint: 120088 }, { name: "MATHEMATICAL FRAKTUR CAPITAL V", value: "\u{1D519}", codepoint: 120089 }, { name: "MATHEMATICAL FRAKTUR CAPITAL W", value: "\u{1D51A}", codepoint: 120090 }, { name: "MATHEMATICAL FRAKTUR CAPITAL X", value: "\u{1D51B}", codepoint: 120091 }, { name: "MATHEMATICAL FRAKTUR CAPITAL Y", value: "\u{1D51C}", codepoint: 120092 }, { name: "MATHEMATICAL FRAKTUR SMALL A", value: "\u{1D51E}", codepoint: 120094 }, { name: "MATHEMATICAL FRAKTUR SMALL B", value: "\u{1D51F}", codepoint: 120095 }, { name: "MATHEMATICAL FRAKTUR SMALL C", value: "\u{1D520}", codepoint: 120096 }, { name: "MATHEMATICAL FRAKTUR SMALL D", value: "\u{1D521}", codepoint: 120097 }, { name: "MATHEMATICAL FRAKTUR SMALL E", value: "\u{1D522}", codepoint: 120098 }, { name: "MATHEMATICAL FRAKTUR SMALL F", value: "\u{1D523}", codepoint: 120099 }, { name: "MATHEMATICAL FRAKTUR SMALL G", value: "\u{1D524}", codepoint: 120100 }, { name: "MATHEMATICAL FRAKTUR SMALL H", value: "\u{1D525}", codepoint: 120101 }, { name: "MATHEMATICAL FRAKTUR SMALL I", value: "\u{1D526}", codepoint: 120102 }, { name: "MATHEMATICAL FRAKTUR SMALL J", value: "\u{1D527}", codepoint: 120103 }, { name: "MATHEMATICAL FRAKTUR SMALL K", value: "\u{1D528}", codepoint: 120104 }, { name: "MATHEMATICAL FRAKTUR SMALL L", value: "\u{1D529}", codepoint: 120105 }, { name: "MATHEMATICAL FRAKTUR SMALL M", value: "\u{1D52A}", codepoint: 120106 }, { name: "MATHEMATICAL FRAKTUR SMALL N", value: "\u{1D52B}", codepoint: 120107 }, { name: "MATHEMATICAL FRAKTUR SMALL O", value: "\u{1D52C}", codepoint: 120108 }, { name: "MATHEMATICAL FRAKTUR SMALL P", value: "\u{1D52D}", codepoint: 120109 }, { name: "MATHEMATICAL FRAKTUR SMALL Q", value: "\u{1D52E}", codepoint: 120110 }, { name: "MATHEMATICAL FRAKTUR SMALL R", value: "\u{1D52F}", codepoint: 120111 }, { name: "MATHEMATICAL FRAKTUR SMALL S", value: "\u{1D530}", codepoint: 120112 }, { name: "MATHEMATICAL FRAKTUR SMALL T", value: "\u{1D531}", codepoint: 120113 }, { name: "MATHEMATICAL FRAKTUR SMALL U", value: "\u{1D532}", codepoint: 120114 }, { name: "MATHEMATICAL FRAKTUR SMALL V", value: "\u{1D533}", codepoint: 120115 }, { name: "MATHEMATICAL FRAKTUR SMALL W", value: "\u{1D534}", codepoint: 120116 }, { name: "MATHEMATICAL FRAKTUR SMALL X", value: "\u{1D535}", codepoint: 120117 }, { name: "MATHEMATICAL FRAKTUR SMALL Y", value: "\u{1D536}", codepoint: 120118 }, { name: "MATHEMATICAL FRAKTUR SMALL Z", value: "\u{1D537}", codepoint: 120119 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL A", value: "\u{1D538}", codepoint: 120120 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL B", value: "\u{1D539}", codepoint: 120121 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL D", value: "\u{1D53B}", codepoint: 120123 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL E", value: "\u{1D53C}", codepoint: 120124 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL F", value: "\u{1D53D}", codepoint: 120125 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL G", value: "\u{1D53E}", codepoint: 120126 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL I", value: "\u{1D540}", codepoint: 120128 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL J", value: "\u{1D541}", codepoint: 120129 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL K", value: "\u{1D542}", codepoint: 120130 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL L", value: "\u{1D543}", codepoint: 120131 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL M", value: "\u{1D544}", codepoint: 120132 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL O", value: "\u{1D546}", codepoint: 120134 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL S", value: "\u{1D54A}", codepoint: 120138 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL T", value: "\u{1D54B}", codepoint: 120139 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL U", value: "\u{1D54C}", codepoint: 120140 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL V", value: "\u{1D54D}", codepoint: 120141 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL W", value: "\u{1D54E}", codepoint: 120142 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL X", value: "\u{1D54F}", codepoint: 120143 }, { name: "MATHEMATICAL DOUBLE-STRUCK CAPITAL Y", value: "\u{1D550}", codepoint: 120144 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL A", value: "\u{1D552}", codepoint: 120146 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL B", value: "\u{1D553}", codepoint: 120147 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL C", value: "\u{1D554}", codepoint: 120148 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL D", value: "\u{1D555}", codepoint: 120149 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL E", value: "\u{1D556}", codepoint: 120150 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL F", value: "\u{1D557}", codepoint: 120151 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL G", value: "\u{1D558}", codepoint: 120152 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL H", value: "\u{1D559}", codepoint: 120153 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL I", value: "\u{1D55A}", codepoint: 120154 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL J", value: "\u{1D55B}", codepoint: 120155 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL K", value: "\u{1D55C}", codepoint: 120156 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL L", value: "\u{1D55D}", codepoint: 120157 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL M", value: "\u{1D55E}", codepoint: 120158 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL N", value: "\u{1D55F}", codepoint: 120159 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL O", value: "\u{1D560}", codepoint: 120160 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL P", value: "\u{1D561}", codepoint: 120161 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL Q", value: "\u{1D562}", codepoint: 120162 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL R", value: "\u{1D563}", codepoint: 120163 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL S", value: "\u{1D564}", codepoint: 120164 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL T", value: "\u{1D565}", codepoint: 120165 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL U", value: "\u{1D566}", codepoint: 120166 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL V", value: "\u{1D567}", codepoint: 120167 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL W", value: "\u{1D568}", codepoint: 120168 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL X", value: "\u{1D569}", codepoint: 120169 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL Y", value: "\u{1D56A}", codepoint: 120170 }, { name: "MATHEMATICAL DOUBLE-STRUCK SMALL Z", value: "\u{1D56B}", codepoint: 120171 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL A", value: "\u{1D56C}", codepoint: 120172 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL B", value: "\u{1D56D}", codepoint: 120173 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL C", value: "\u{1D56E}", codepoint: 120174 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL D", value: "\u{1D56F}", codepoint: 120175 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL E", value: "\u{1D570}", codepoint: 120176 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL F", value: "\u{1D571}", codepoint: 120177 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL G", value: "\u{1D572}", codepoint: 120178 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL H", value: "\u{1D573}", codepoint: 120179 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL I", value: "\u{1D574}", codepoint: 120180 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL J", value: "\u{1D575}", codepoint: 120181 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL K", value: "\u{1D576}", codepoint: 120182 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL L", value: "\u{1D577}", codepoint: 120183 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL M", value: "\u{1D578}", codepoint: 120184 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL N", value: "\u{1D579}", codepoint: 120185 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL O", value: "\u{1D57A}", codepoint: 120186 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL P", value: "\u{1D57B}", codepoint: 120187 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL Q", value: "\u{1D57C}", codepoint: 120188 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL R", value: "\u{1D57D}", codepoint: 120189 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL S", value: "\u{1D57E}", codepoint: 120190 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL T", value: "\u{1D57F}", codepoint: 120191 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL U", value: "\u{1D580}", codepoint: 120192 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL V", value: "\u{1D581}", codepoint: 120193 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL W", value: "\u{1D582}", codepoint: 120194 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL X", value: "\u{1D583}", codepoint: 120195 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL Y", value: "\u{1D584}", codepoint: 120196 }, { name: "MATHEMATICAL BOLD FRAKTUR CAPITAL Z", value: "\u{1D585}", codepoint: 120197 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL A", value: "\u{1D586}", codepoint: 120198 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL B", value: "\u{1D587}", codepoint: 120199 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL C", value: "\u{1D588}", codepoint: 120200 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL D", value: "\u{1D589}", codepoint: 120201 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL E", value: "\u{1D58A}", codepoint: 120202 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL F", value: "\u{1D58B}", codepoint: 120203 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL G", value: "\u{1D58C}", codepoint: 120204 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL H", value: "\u{1D58D}", codepoint: 120205 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL I", value: "\u{1D58E}", codepoint: 120206 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL J", value: "\u{1D58F}", codepoint: 120207 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL K", value: "\u{1D590}", codepoint: 120208 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL L", value: "\u{1D591}", codepoint: 120209 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL M", value: "\u{1D592}", codepoint: 120210 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL N", value: "\u{1D593}", codepoint: 120211 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL O", value: "\u{1D594}", codepoint: 120212 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL P", value: "\u{1D595}", codepoint: 120213 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL Q", value: "\u{1D596}", codepoint: 120214 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL R", value: "\u{1D597}", codepoint: 120215 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL S", value: "\u{1D598}", codepoint: 120216 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL T", value: "\u{1D599}", codepoint: 120217 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL U", value: "\u{1D59A}", codepoint: 120218 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL V", value: "\u{1D59B}", codepoint: 120219 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL W", value: "\u{1D59C}", codepoint: 120220 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL X", value: "\u{1D59D}", codepoint: 120221 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL Y", value: "\u{1D59E}", codepoint: 120222 }, { name: "MATHEMATICAL BOLD FRAKTUR SMALL Z", value: "\u{1D59F}", codepoint: 120223 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL A", value: "\u{1D5A0}", codepoint: 120224 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL B", value: "\u{1D5A1}", codepoint: 120225 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL C", value: "\u{1D5A2}", codepoint: 120226 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL D", value: "\u{1D5A3}", codepoint: 120227 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL E", value: "\u{1D5A4}", codepoint: 120228 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL F", value: "\u{1D5A5}", codepoint: 120229 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL G", value: "\u{1D5A6}", codepoint: 120230 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL H", value: "\u{1D5A7}", codepoint: 120231 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL I", value: "\u{1D5A8}", codepoint: 120232 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL J", value: "\u{1D5A9}", codepoint: 120233 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL K", value: "\u{1D5AA}", codepoint: 120234 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL L", value: "\u{1D5AB}", codepoint: 120235 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL M", value: "\u{1D5AC}", codepoint: 120236 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL N", value: "\u{1D5AD}", codepoint: 120237 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL O", value: "\u{1D5AE}", codepoint: 120238 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL P", value: "\u{1D5AF}", codepoint: 120239 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL Q", value: "\u{1D5B0}", codepoint: 120240 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL R", value: "\u{1D5B1}", codepoint: 120241 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL S", value: "\u{1D5B2}", codepoint: 120242 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL T", value: "\u{1D5B3}", codepoint: 120243 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL U", value: "\u{1D5B4}", codepoint: 120244 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL V", value: "\u{1D5B5}", codepoint: 120245 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL W", value: "\u{1D5B6}", codepoint: 120246 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL X", value: "\u{1D5B7}", codepoint: 120247 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL Y", value: "\u{1D5B8}", codepoint: 120248 }, { name: "MATHEMATICAL SANS-SERIF CAPITAL Z", value: "\u{1D5B9}", codepoint: 120249 }, { name: "MATHEMATICAL SANS-SERIF SMALL A", value: "\u{1D5BA}", codepoint: 120250 }, { name: "MATHEMATICAL SANS-SERIF SMALL B", value: "\u{1D5BB}", codepoint: 120251 }, { name: "MATHEMATICAL SANS-SERIF SMALL C", value: "\u{1D5BC}", codepoint: 120252 }, { name: "MATHEMATICAL SANS-SERIF SMALL D", value: "\u{1D5BD}", codepoint: 120253 }, { name: "MATHEMATICAL SANS-SERIF SMALL E", value: "\u{1D5BE}", codepoint: 120254 }, { name: "MATHEMATICAL SANS-SERIF SMALL F", value: "\u{1D5BF}", codepoint: 120255 }, { name: "MATHEMATICAL SANS-SERIF SMALL G", value: "\u{1D5C0}", codepoint: 120256 }, { name: "MATHEMATICAL SANS-SERIF SMALL H", value: "\u{1D5C1}", codepoint: 120257 }, { name: "MATHEMATICAL SANS-SERIF SMALL I", value: "\u{1D5C2}", codepoint: 120258 }, { name: "MATHEMATICAL SANS-SERIF SMALL J", value: "\u{1D5C3}", codepoint: 120259 }, { name: "MATHEMATICAL SANS-SERIF SMALL K", value: "\u{1D5C4}", codepoint: 120260 }, { name: "MATHEMATICAL SANS-SERIF SMALL L", value: "\u{1D5C5}", codepoint: 120261 }, { name: "MATHEMATICAL SANS-SERIF SMALL M", value: "\u{1D5C6}", codepoint: 120262 }, { name: "MATHEMATICAL SANS-SERIF SMALL N", value: "\u{1D5C7}", codepoint: 120263 }, { name: "MATHEMATICAL SANS-SERIF SMALL O", value: "\u{1D5C8}", codepoint: 120264 }, { name: "MATHEMATICAL SANS-SERIF SMALL P", value: "\u{1D5C9}", codepoint: 120265 }, { name: "MATHEMATICAL SANS-SERIF SMALL Q", value: "\u{1D5CA}", codepoint: 120266 }, { name: "MATHEMATICAL SANS-SERIF SMALL R", value: "\u{1D5CB}", codepoint: 120267 }, { name: "MATHEMATICAL SANS-SERIF SMALL S", value: "\u{1D5CC}", codepoint: 120268 }, { name: "MATHEMATICAL SANS-SERIF SMALL T", value: "\u{1D5CD}", codepoint: 120269 }, { name: "MATHEMATICAL SANS-SERIF SMALL U", value: "\u{1D5CE}", codepoint: 120270 }, { name: "MATHEMATICAL SANS-SERIF SMALL V", value: "\u{1D5CF}", codepoint: 120271 }, { name: "MATHEMATICAL SANS-SERIF SMALL W", value: "\u{1D5D0}", codepoint: 120272 }, { name: "MATHEMATICAL SANS-SERIF SMALL X", value: "\u{1D5D1}", codepoint: 120273 }, { name: "MATHEMATICAL SANS-SERIF SMALL Y", value: "\u{1D5D2}", codepoint: 120274 }, { name: "MATHEMATICAL SANS-SERIF SMALL Z", value: "\u{1D5D3}", codepoint: 120275 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL A", value: "\u{1D5D4}", codepoint: 120276 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL B", value: "\u{1D5D5}", codepoint: 120277 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL C", value: "\u{1D5D6}", codepoint: 120278 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL D", value: "\u{1D5D7}", codepoint: 120279 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL E", value: "\u{1D5D8}", codepoint: 120280 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL F", value: "\u{1D5D9}", codepoint: 120281 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL G", value: "\u{1D5DA}", codepoint: 120282 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL H", value: "\u{1D5DB}", codepoint: 120283 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL I", value: "\u{1D5DC}", codepoint: 120284 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL J", value: "\u{1D5DD}", codepoint: 120285 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL K", value: "\u{1D5DE}", codepoint: 120286 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL L", value: "\u{1D5DF}", codepoint: 120287 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL M", value: "\u{1D5E0}", codepoint: 120288 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL N", value: "\u{1D5E1}", codepoint: 120289 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL O", value: "\u{1D5E2}", codepoint: 120290 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL P", value: "\u{1D5E3}", codepoint: 120291 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL Q", value: "\u{1D5E4}", codepoint: 120292 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL R", value: "\u{1D5E5}", codepoint: 120293 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL S", value: "\u{1D5E6}", codepoint: 120294 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL T", value: "\u{1D5E7}", codepoint: 120295 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL U", value: "\u{1D5E8}", codepoint: 120296 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL V", value: "\u{1D5E9}", codepoint: 120297 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL W", value: "\u{1D5EA}", codepoint: 120298 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL X", value: "\u{1D5EB}", codepoint: 120299 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL Y", value: "\u{1D5EC}", codepoint: 120300 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL Z", value: "\u{1D5ED}", codepoint: 120301 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL A", value: "\u{1D5EE}", codepoint: 120302 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL B", value: "\u{1D5EF}", codepoint: 120303 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL C", value: "\u{1D5F0}", codepoint: 120304 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL D", value: "\u{1D5F1}", codepoint: 120305 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL E", value: "\u{1D5F2}", codepoint: 120306 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL F", value: "\u{1D5F3}", codepoint: 120307 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL G", value: "\u{1D5F4}", codepoint: 120308 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL H", value: "\u{1D5F5}", codepoint: 120309 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL I", value: "\u{1D5F6}", codepoint: 120310 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL J", value: "\u{1D5F7}", codepoint: 120311 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL K", value: "\u{1D5F8}", codepoint: 120312 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL L", value: "\u{1D5F9}", codepoint: 120313 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL M", value: "\u{1D5FA}", codepoint: 120314 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL N", value: "\u{1D5FB}", codepoint: 120315 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL O", value: "\u{1D5FC}", codepoint: 120316 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL P", value: "\u{1D5FD}", codepoint: 120317 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL Q", value: "\u{1D5FE}", codepoint: 120318 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL R", value: "\u{1D5FF}", codepoint: 120319 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL S", value: "\u{1D600}", codepoint: 120320 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL T", value: "\u{1D601}", codepoint: 120321 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL U", value: "\u{1D602}", codepoint: 120322 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL V", value: "\u{1D603}", codepoint: 120323 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL W", value: "\u{1D604}", codepoint: 120324 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL X", value: "\u{1D605}", codepoint: 120325 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL Y", value: "\u{1D606}", codepoint: 120326 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL Z", value: "\u{1D607}", codepoint: 120327 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL A", value: "\u{1D608}", codepoint: 120328 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL B", value: "\u{1D609}", codepoint: 120329 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL C", value: "\u{1D60A}", codepoint: 120330 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL D", value: "\u{1D60B}", codepoint: 120331 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL E", value: "\u{1D60C}", codepoint: 120332 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL F", value: "\u{1D60D}", codepoint: 120333 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL G", value: "\u{1D60E}", codepoint: 120334 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL H", value: "\u{1D60F}", codepoint: 120335 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL I", value: "\u{1D610}", codepoint: 120336 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL J", value: "\u{1D611}", codepoint: 120337 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL K", value: "\u{1D612}", codepoint: 120338 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL L", value: "\u{1D613}", codepoint: 120339 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL M", value: "\u{1D614}", codepoint: 120340 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL N", value: "\u{1D615}", codepoint: 120341 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL O", value: "\u{1D616}", codepoint: 120342 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL P", value: "\u{1D617}", codepoint: 120343 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q", value: "\u{1D618}", codepoint: 120344 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL R", value: "\u{1D619}", codepoint: 120345 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL S", value: "\u{1D61A}", codepoint: 120346 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL T", value: "\u{1D61B}", codepoint: 120347 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL U", value: "\u{1D61C}", codepoint: 120348 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL V", value: "\u{1D61D}", codepoint: 120349 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL W", value: "\u{1D61E}", codepoint: 120350 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL X", value: "\u{1D61F}", codepoint: 120351 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y", value: "\u{1D620}", codepoint: 120352 }, { name: "MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z", value: "\u{1D621}", codepoint: 120353 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL A", value: "\u{1D622}", codepoint: 120354 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL B", value: "\u{1D623}", codepoint: 120355 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL C", value: "\u{1D624}", codepoint: 120356 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL D", value: "\u{1D625}", codepoint: 120357 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL E", value: "\u{1D626}", codepoint: 120358 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL F", value: "\u{1D627}", codepoint: 120359 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL G", value: "\u{1D628}", codepoint: 120360 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL H", value: "\u{1D629}", codepoint: 120361 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL I", value: "\u{1D62A}", codepoint: 120362 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL J", value: "\u{1D62B}", codepoint: 120363 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL K", value: "\u{1D62C}", codepoint: 120364 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL L", value: "\u{1D62D}", codepoint: 120365 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL M", value: "\u{1D62E}", codepoint: 120366 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL N", value: "\u{1D62F}", codepoint: 120367 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL O", value: "\u{1D630}", codepoint: 120368 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL P", value: "\u{1D631}", codepoint: 120369 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL Q", value: "\u{1D632}", codepoint: 120370 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL R", value: "\u{1D633}", codepoint: 120371 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL S", value: "\u{1D634}", codepoint: 120372 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL T", value: "\u{1D635}", codepoint: 120373 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL U", value: "\u{1D636}", codepoint: 120374 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL V", value: "\u{1D637}", codepoint: 120375 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL W", value: "\u{1D638}", codepoint: 120376 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL X", value: "\u{1D639}", codepoint: 120377 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL Y", value: "\u{1D63A}", codepoint: 120378 }, { name: "MATHEMATICAL SANS-SERIF ITALIC SMALL Z", value: "\u{1D63B}", codepoint: 120379 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A", value: "\u{1D63C}", codepoint: 120380 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B", value: "\u{1D63D}", codepoint: 120381 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C", value: "\u{1D63E}", codepoint: 120382 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D", value: "\u{1D63F}", codepoint: 120383 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E", value: "\u{1D640}", codepoint: 120384 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F", value: "\u{1D641}", codepoint: 120385 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G", value: "\u{1D642}", codepoint: 120386 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H", value: "\u{1D643}", codepoint: 120387 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I", value: "\u{1D644}", codepoint: 120388 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J", value: "\u{1D645}", codepoint: 120389 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K", value: "\u{1D646}", codepoint: 120390 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L", value: "\u{1D647}", codepoint: 120391 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M", value: "\u{1D648}", codepoint: 120392 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N", value: "\u{1D649}", codepoint: 120393 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O", value: "\u{1D64A}", codepoint: 120394 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P", value: "\u{1D64B}", codepoint: 120395 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q", value: "\u{1D64C}", codepoint: 120396 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R", value: "\u{1D64D}", codepoint: 120397 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S", value: "\u{1D64E}", codepoint: 120398 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T", value: "\u{1D64F}", codepoint: 120399 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U", value: "\u{1D650}", codepoint: 120400 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V", value: "\u{1D651}", codepoint: 120401 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W", value: "\u{1D652}", codepoint: 120402 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X", value: "\u{1D653}", codepoint: 120403 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y", value: "\u{1D654}", codepoint: 120404 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z", value: "\u{1D655}", codepoint: 120405 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A", value: "\u{1D656}", codepoint: 120406 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B", value: "\u{1D657}", codepoint: 120407 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C", value: "\u{1D658}", codepoint: 120408 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D", value: "\u{1D659}", codepoint: 120409 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E", value: "\u{1D65A}", codepoint: 120410 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F", value: "\u{1D65B}", codepoint: 120411 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G", value: "\u{1D65C}", codepoint: 120412 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H", value: "\u{1D65D}", codepoint: 120413 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I", value: "\u{1D65E}", codepoint: 120414 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J", value: "\u{1D65F}", codepoint: 120415 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K", value: "\u{1D660}", codepoint: 120416 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L", value: "\u{1D661}", codepoint: 120417 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M", value: "\u{1D662}", codepoint: 120418 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N", value: "\u{1D663}", codepoint: 120419 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O", value: "\u{1D664}", codepoint: 120420 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P", value: "\u{1D665}", codepoint: 120421 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q", value: "\u{1D666}", codepoint: 120422 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R", value: "\u{1D667}", codepoint: 120423 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S", value: "\u{1D668}", codepoint: 120424 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T", value: "\u{1D669}", codepoint: 120425 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U", value: "\u{1D66A}", codepoint: 120426 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V", value: "\u{1D66B}", codepoint: 120427 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W", value: "\u{1D66C}", codepoint: 120428 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X", value: "\u{1D66D}", codepoint: 120429 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y", value: "\u{1D66E}", codepoint: 120430 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z", value: "\u{1D66F}", codepoint: 120431 }, { name: "MATHEMATICAL MONOSPACE CAPITAL A", value: "\u{1D670}", codepoint: 120432 }, { name: "MATHEMATICAL MONOSPACE CAPITAL B", value: "\u{1D671}", codepoint: 120433 }, { name: "MATHEMATICAL MONOSPACE CAPITAL C", value: "\u{1D672}", codepoint: 120434 }, { name: "MATHEMATICAL MONOSPACE CAPITAL D", value: "\u{1D673}", codepoint: 120435 }, { name: "MATHEMATICAL MONOSPACE CAPITAL E", value: "\u{1D674}", codepoint: 120436 }, { name: "MATHEMATICAL MONOSPACE CAPITAL F", value: "\u{1D675}", codepoint: 120437 }, { name: "MATHEMATICAL MONOSPACE CAPITAL G", value: "\u{1D676}", codepoint: 120438 }, { name: "MATHEMATICAL MONOSPACE CAPITAL H", value: "\u{1D677}", codepoint: 120439 }, { name: "MATHEMATICAL MONOSPACE CAPITAL I", value: "\u{1D678}", codepoint: 120440 }, { name: "MATHEMATICAL MONOSPACE CAPITAL J", value: "\u{1D679}", codepoint: 120441 }, { name: "MATHEMATICAL MONOSPACE CAPITAL K", value: "\u{1D67A}", codepoint: 120442 }, { name: "MATHEMATICAL MONOSPACE CAPITAL L", value: "\u{1D67B}", codepoint: 120443 }, { name: "MATHEMATICAL MONOSPACE CAPITAL M", value: "\u{1D67C}", codepoint: 120444 }, { name: "MATHEMATICAL MONOSPACE CAPITAL N", value: "\u{1D67D}", codepoint: 120445 }, { name: "MATHEMATICAL MONOSPACE CAPITAL O", value: "\u{1D67E}", codepoint: 120446 }, { name: "MATHEMATICAL MONOSPACE CAPITAL P", value: "\u{1D67F}", codepoint: 120447 }, { name: "MATHEMATICAL MONOSPACE CAPITAL Q", value: "\u{1D680}", codepoint: 120448 }, { name: "MATHEMATICAL MONOSPACE CAPITAL R", value: "\u{1D681}", codepoint: 120449 }, { name: "MATHEMATICAL MONOSPACE CAPITAL S", value: "\u{1D682}", codepoint: 120450 }, { name: "MATHEMATICAL MONOSPACE CAPITAL T", value: "\u{1D683}", codepoint: 120451 }, { name: "MATHEMATICAL MONOSPACE CAPITAL U", value: "\u{1D684}", codepoint: 120452 }, { name: "MATHEMATICAL MONOSPACE CAPITAL V", value: "\u{1D685}", codepoint: 120453 }, { name: "MATHEMATICAL MONOSPACE CAPITAL W", value: "\u{1D686}", codepoint: 120454 }, { name: "MATHEMATICAL MONOSPACE CAPITAL X", value: "\u{1D687}", codepoint: 120455 }, { name: "MATHEMATICAL MONOSPACE CAPITAL Y", value: "\u{1D688}", codepoint: 120456 }, { name: "MATHEMATICAL MONOSPACE CAPITAL Z", value: "\u{1D689}", codepoint: 120457 }, { name: "MATHEMATICAL MONOSPACE SMALL A", value: "\u{1D68A}", codepoint: 120458 }, { name: "MATHEMATICAL MONOSPACE SMALL B", value: "\u{1D68B}", codepoint: 120459 }, { name: "MATHEMATICAL MONOSPACE SMALL C", value: "\u{1D68C}", codepoint: 120460 }, { name: "MATHEMATICAL MONOSPACE SMALL D", value: "\u{1D68D}", codepoint: 120461 }, { name: "MATHEMATICAL MONOSPACE SMALL E", value: "\u{1D68E}", codepoint: 120462 }, { name: "MATHEMATICAL MONOSPACE SMALL F", value: "\u{1D68F}", codepoint: 120463 }, { name: "MATHEMATICAL MONOSPACE SMALL G", value: "\u{1D690}", codepoint: 120464 }, { name: "MATHEMATICAL MONOSPACE SMALL H", value: "\u{1D691}", codepoint: 120465 }, { name: "MATHEMATICAL MONOSPACE SMALL I", value: "\u{1D692}", codepoint: 120466 }, { name: "MATHEMATICAL MONOSPACE SMALL J", value: "\u{1D693}", codepoint: 120467 }, { name: "MATHEMATICAL MONOSPACE SMALL K", value: "\u{1D694}", codepoint: 120468 }, { name: "MATHEMATICAL MONOSPACE SMALL L", value: "\u{1D695}", codepoint: 120469 }, { name: "MATHEMATICAL MONOSPACE SMALL M", value: "\u{1D696}", codepoint: 120470 }, { name: "MATHEMATICAL MONOSPACE SMALL N", value: "\u{1D697}", codepoint: 120471 }, { name: "MATHEMATICAL MONOSPACE SMALL O", value: "\u{1D698}", codepoint: 120472 }, { name: "MATHEMATICAL MONOSPACE SMALL P", value: "\u{1D699}", codepoint: 120473 }, { name: "MATHEMATICAL MONOSPACE SMALL Q", value: "\u{1D69A}", codepoint: 120474 }, { name: "MATHEMATICAL MONOSPACE SMALL R", value: "\u{1D69B}", codepoint: 120475 }, { name: "MATHEMATICAL MONOSPACE SMALL S", value: "\u{1D69C}", codepoint: 120476 }, { name: "MATHEMATICAL MONOSPACE SMALL T", value: "\u{1D69D}", codepoint: 120477 }, { name: "MATHEMATICAL MONOSPACE SMALL U", value: "\u{1D69E}", codepoint: 120478 }, { name: "MATHEMATICAL MONOSPACE SMALL V", value: "\u{1D69F}", codepoint: 120479 }, { name: "MATHEMATICAL MONOSPACE SMALL W", value: "\u{1D6A0}", codepoint: 120480 }, { name: "MATHEMATICAL MONOSPACE SMALL X", value: "\u{1D6A1}", codepoint: 120481 }, { name: "MATHEMATICAL MONOSPACE SMALL Y", value: "\u{1D6A2}", codepoint: 120482 }, { name: "MATHEMATICAL MONOSPACE SMALL Z", value: "\u{1D6A3}", codepoint: 120483 }, { name: "MATHEMATICAL ITALIC SMALL DOTLESS I", value: "\u{1D6A4}", codepoint: 120484 }, { name: "MATHEMATICAL ITALIC SMALL DOTLESS J", value: "\u{1D6A5}", codepoint: 120485 }, { name: "MATHEMATICAL BOLD CAPITAL ALPHA", value: "\u{1D6A8}", codepoint: 120488 }, { name: "MATHEMATICAL BOLD CAPITAL BETA", value: "\u{1D6A9}", codepoint: 120489 }, { name: "MATHEMATICAL BOLD CAPITAL GAMMA", value: "\u{1D6AA}", codepoint: 120490 }, { name: "MATHEMATICAL BOLD CAPITAL DELTA", value: "\u{1D6AB}", codepoint: 120491 }, { name: "MATHEMATICAL BOLD CAPITAL EPSILON", value: "\u{1D6AC}", codepoint: 120492 }, { name: "MATHEMATICAL BOLD CAPITAL ZETA", value: "\u{1D6AD}", codepoint: 120493 }, { name: "MATHEMATICAL BOLD CAPITAL ETA", value: "\u{1D6AE}", codepoint: 120494 }, { name: "MATHEMATICAL BOLD CAPITAL THETA", value: "\u{1D6AF}", codepoint: 120495 }, { name: "MATHEMATICAL BOLD CAPITAL IOTA", value: "\u{1D6B0}", codepoint: 120496 }, { name: "MATHEMATICAL BOLD CAPITAL KAPPA", value: "\u{1D6B1}", codepoint: 120497 }, { name: "MATHEMATICAL BOLD CAPITAL LAMDA", value: "\u{1D6B2}", codepoint: 120498 }, { name: "MATHEMATICAL BOLD CAPITAL MU", value: "\u{1D6B3}", codepoint: 120499 }, { name: "MATHEMATICAL BOLD CAPITAL NU", value: "\u{1D6B4}", codepoint: 120500 }, { name: "MATHEMATICAL BOLD CAPITAL XI", value: "\u{1D6B5}", codepoint: 120501 }, { name: "MATHEMATICAL BOLD CAPITAL OMICRON", value: "\u{1D6B6}", codepoint: 120502 }, { name: "MATHEMATICAL BOLD CAPITAL PI", value: "\u{1D6B7}", codepoint: 120503 }, { name: "MATHEMATICAL BOLD CAPITAL RHO", value: "\u{1D6B8}", codepoint: 120504 }, { name: "MATHEMATICAL BOLD CAPITAL THETA SYMBOL", value: "\u{1D6B9}", codepoint: 120505 }, { name: "MATHEMATICAL BOLD CAPITAL SIGMA", value: "\u{1D6BA}", codepoint: 120506 }, { name: "MATHEMATICAL BOLD CAPITAL TAU", value: "\u{1D6BB}", codepoint: 120507 }, { name: "MATHEMATICAL BOLD CAPITAL UPSILON", value: "\u{1D6BC}", codepoint: 120508 }, { name: "MATHEMATICAL BOLD CAPITAL PHI", value: "\u{1D6BD}", codepoint: 120509 }, { name: "MATHEMATICAL BOLD CAPITAL CHI", value: "\u{1D6BE}", codepoint: 120510 }, { name: "MATHEMATICAL BOLD CAPITAL PSI", value: "\u{1D6BF}", codepoint: 120511 }, { name: "MATHEMATICAL BOLD CAPITAL OMEGA", value: "\u{1D6C0}", codepoint: 120512 }, { name: "MATHEMATICAL BOLD NABLA", value: "\u{1D6C1}", codepoint: 120513 }, { name: "MATHEMATICAL BOLD SMALL ALPHA", value: "\u{1D6C2}", codepoint: 120514 }, { name: "MATHEMATICAL BOLD SMALL BETA", value: "\u{1D6C3}", codepoint: 120515 }, { name: "MATHEMATICAL BOLD SMALL GAMMA", value: "\u{1D6C4}", codepoint: 120516 }, { name: "MATHEMATICAL BOLD SMALL DELTA", value: "\u{1D6C5}", codepoint: 120517 }, { name: "MATHEMATICAL BOLD SMALL EPSILON", value: "\u{1D6C6}", codepoint: 120518 }, { name: "MATHEMATICAL BOLD SMALL ZETA", value: "\u{1D6C7}", codepoint: 120519 }, { name: "MATHEMATICAL BOLD SMALL ETA", value: "\u{1D6C8}", codepoint: 120520 }, { name: "MATHEMATICAL BOLD SMALL THETA", value: "\u{1D6C9}", codepoint: 120521 }, { name: "MATHEMATICAL BOLD SMALL IOTA", value: "\u{1D6CA}", codepoint: 120522 }, { name: "MATHEMATICAL BOLD SMALL KAPPA", value: "\u{1D6CB}", codepoint: 120523 }, { name: "MATHEMATICAL BOLD SMALL LAMDA", value: "\u{1D6CC}", codepoint: 120524 }, { name: "MATHEMATICAL BOLD SMALL MU", value: "\u{1D6CD}", codepoint: 120525 }, { name: "MATHEMATICAL BOLD SMALL NU", value: "\u{1D6CE}", codepoint: 120526 }, { name: "MATHEMATICAL BOLD SMALL XI", value: "\u{1D6CF}", codepoint: 120527 }, { name: "MATHEMATICAL BOLD SMALL OMICRON", value: "\u{1D6D0}", codepoint: 120528 }, { name: "MATHEMATICAL BOLD SMALL PI", value: "\u{1D6D1}", codepoint: 120529 }, { name: "MATHEMATICAL BOLD SMALL RHO", value: "\u{1D6D2}", codepoint: 120530 }, { name: "MATHEMATICAL BOLD SMALL FINAL SIGMA", value: "\u{1D6D3}", codepoint: 120531 }, { name: "MATHEMATICAL BOLD SMALL SIGMA", value: "\u{1D6D4}", codepoint: 120532 }, { name: "MATHEMATICAL BOLD SMALL TAU", value: "\u{1D6D5}", codepoint: 120533 }, { name: "MATHEMATICAL BOLD SMALL UPSILON", value: "\u{1D6D6}", codepoint: 120534 }, { name: "MATHEMATICAL BOLD SMALL PHI", value: "\u{1D6D7}", codepoint: 120535 }, { name: "MATHEMATICAL BOLD SMALL CHI", value: "\u{1D6D8}", codepoint: 120536 }, { name: "MATHEMATICAL BOLD SMALL PSI", value: "\u{1D6D9}", codepoint: 120537 }, { name: "MATHEMATICAL BOLD SMALL OMEGA", value: "\u{1D6DA}", codepoint: 120538 }, { name: "MATHEMATICAL BOLD PARTIAL DIFFERENTIAL", value: "\u{1D6DB}", codepoint: 120539 }, { name: "MATHEMATICAL BOLD EPSILON SYMBOL", value: "\u{1D6DC}", codepoint: 120540 }, { name: "MATHEMATICAL BOLD THETA SYMBOL", value: "\u{1D6DD}", codepoint: 120541 }, { name: "MATHEMATICAL BOLD KAPPA SYMBOL", value: "\u{1D6DE}", codepoint: 120542 }, { name: "MATHEMATICAL BOLD PHI SYMBOL", value: "\u{1D6DF}", codepoint: 120543 }, { name: "MATHEMATICAL BOLD RHO SYMBOL", value: "\u{1D6E0}", codepoint: 120544 }, { name: "MATHEMATICAL BOLD PI SYMBOL", value: "\u{1D6E1}", codepoint: 120545 }, { name: "MATHEMATICAL ITALIC CAPITAL ALPHA", value: "\u{1D6E2}", codepoint: 120546 }, { name: "MATHEMATICAL ITALIC CAPITAL BETA", value: "\u{1D6E3}", codepoint: 120547 }, { name: "MATHEMATICAL ITALIC CAPITAL GAMMA", value: "\u{1D6E4}", codepoint: 120548 }, { name: "MATHEMATICAL ITALIC CAPITAL DELTA", value: "\u{1D6E5}", codepoint: 120549 }, { name: "MATHEMATICAL ITALIC CAPITAL EPSILON", value: "\u{1D6E6}", codepoint: 120550 }, { name: "MATHEMATICAL ITALIC CAPITAL ZETA", value: "\u{1D6E7}", codepoint: 120551 }, { name: "MATHEMATICAL ITALIC CAPITAL ETA", value: "\u{1D6E8}", codepoint: 120552 }, { name: "MATHEMATICAL ITALIC CAPITAL THETA", value: "\u{1D6E9}", codepoint: 120553 }, { name: "MATHEMATICAL ITALIC CAPITAL IOTA", value: "\u{1D6EA}", codepoint: 120554 }, { name: "MATHEMATICAL ITALIC CAPITAL KAPPA", value: "\u{1D6EB}", codepoint: 120555 }, { name: "MATHEMATICAL ITALIC CAPITAL LAMDA", value: "\u{1D6EC}", codepoint: 120556 }, { name: "MATHEMATICAL ITALIC CAPITAL MU", value: "\u{1D6ED}", codepoint: 120557 }, { name: "MATHEMATICAL ITALIC CAPITAL NU", value: "\u{1D6EE}", codepoint: 120558 }, { name: "MATHEMATICAL ITALIC CAPITAL XI", value: "\u{1D6EF}", codepoint: 120559 }, { name: "MATHEMATICAL ITALIC CAPITAL OMICRON", value: "\u{1D6F0}", codepoint: 120560 }, { name: "MATHEMATICAL ITALIC CAPITAL PI", value: "\u{1D6F1}", codepoint: 120561 }, { name: "MATHEMATICAL ITALIC CAPITAL RHO", value: "\u{1D6F2}", codepoint: 120562 }, { name: "MATHEMATICAL ITALIC CAPITAL THETA SYMBOL", value: "\u{1D6F3}", codepoint: 120563 }, { name: "MATHEMATICAL ITALIC CAPITAL SIGMA", value: "\u{1D6F4}", codepoint: 120564 }, { name: "MATHEMATICAL ITALIC CAPITAL TAU", value: "\u{1D6F5}", codepoint: 120565 }, { name: "MATHEMATICAL ITALIC CAPITAL UPSILON", value: "\u{1D6F6}", codepoint: 120566 }, { name: "MATHEMATICAL ITALIC CAPITAL PHI", value: "\u{1D6F7}", codepoint: 120567 }, { name: "MATHEMATICAL ITALIC CAPITAL CHI", value: "\u{1D6F8}", codepoint: 120568 }, { name: "MATHEMATICAL ITALIC CAPITAL PSI", value: "\u{1D6F9}", codepoint: 120569 }, { name: "MATHEMATICAL ITALIC CAPITAL OMEGA", value: "\u{1D6FA}", codepoint: 120570 }, { name: "MATHEMATICAL ITALIC NABLA", value: "\u{1D6FB}", codepoint: 120571 }, { name: "MATHEMATICAL ITALIC SMALL ALPHA", value: "\u{1D6FC}", codepoint: 120572 }, { name: "MATHEMATICAL ITALIC SMALL BETA", value: "\u{1D6FD}", codepoint: 120573 }, { name: "MATHEMATICAL ITALIC SMALL GAMMA", value: "\u{1D6FE}", codepoint: 120574 }, { name: "MATHEMATICAL ITALIC SMALL DELTA", value: "\u{1D6FF}", codepoint: 120575 }, { name: "MATHEMATICAL ITALIC SMALL EPSILON", value: "\u{1D700}", codepoint: 120576 }, { name: "MATHEMATICAL ITALIC SMALL ZETA", value: "\u{1D701}", codepoint: 120577 }, { name: "MATHEMATICAL ITALIC SMALL ETA", value: "\u{1D702}", codepoint: 120578 }, { name: "MATHEMATICAL ITALIC SMALL THETA", value: "\u{1D703}", codepoint: 120579 }, { name: "MATHEMATICAL ITALIC SMALL IOTA", value: "\u{1D704}", codepoint: 120580 }, { name: "MATHEMATICAL ITALIC SMALL KAPPA", value: "\u{1D705}", codepoint: 120581 }, { name: "MATHEMATICAL ITALIC SMALL LAMDA", value: "\u{1D706}", codepoint: 120582 }, { name: "MATHEMATICAL ITALIC SMALL MU", value: "\u{1D707}", codepoint: 120583 }, { name: "MATHEMATICAL ITALIC SMALL NU", value: "\u{1D708}", codepoint: 120584 }, { name: "MATHEMATICAL ITALIC SMALL XI", value: "\u{1D709}", codepoint: 120585 }, { name: "MATHEMATICAL ITALIC SMALL OMICRON", value: "\u{1D70A}", codepoint: 120586 }, { name: "MATHEMATICAL ITALIC SMALL PI", value: "\u{1D70B}", codepoint: 120587 }, { name: "MATHEMATICAL ITALIC SMALL RHO", value: "\u{1D70C}", codepoint: 120588 }, { name: "MATHEMATICAL ITALIC SMALL FINAL SIGMA", value: "\u{1D70D}", codepoint: 120589 }, { name: "MATHEMATICAL ITALIC SMALL SIGMA", value: "\u{1D70E}", codepoint: 120590 }, { name: "MATHEMATICAL ITALIC SMALL TAU", value: "\u{1D70F}", codepoint: 120591 }, { name: "MATHEMATICAL ITALIC SMALL UPSILON", value: "\u{1D710}", codepoint: 120592 }, { name: "MATHEMATICAL ITALIC SMALL PHI", value: "\u{1D711}", codepoint: 120593 }, { name: "MATHEMATICAL ITALIC SMALL CHI", value: "\u{1D712}", codepoint: 120594 }, { name: "MATHEMATICAL ITALIC SMALL PSI", value: "\u{1D713}", codepoint: 120595 }, { name: "MATHEMATICAL ITALIC SMALL OMEGA", value: "\u{1D714}", codepoint: 120596 }, { name: "MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL", value: "\u{1D715}", codepoint: 120597 }, { name: "MATHEMATICAL ITALIC EPSILON SYMBOL", value: "\u{1D716}", codepoint: 120598 }, { name: "MATHEMATICAL ITALIC THETA SYMBOL", value: "\u{1D717}", codepoint: 120599 }, { name: "MATHEMATICAL ITALIC KAPPA SYMBOL", value: "\u{1D718}", codepoint: 120600 }, { name: "MATHEMATICAL ITALIC PHI SYMBOL", value: "\u{1D719}", codepoint: 120601 }, { name: "MATHEMATICAL ITALIC RHO SYMBOL", value: "\u{1D71A}", codepoint: 120602 }, { name: "MATHEMATICAL ITALIC PI SYMBOL", value: "\u{1D71B}", codepoint: 120603 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL ALPHA", value: "\u{1D71C}", codepoint: 120604 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL BETA", value: "\u{1D71D}", codepoint: 120605 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL GAMMA", value: "\u{1D71E}", codepoint: 120606 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL DELTA", value: "\u{1D71F}", codepoint: 120607 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL EPSILON", value: "\u{1D720}", codepoint: 120608 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL ZETA", value: "\u{1D721}", codepoint: 120609 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL ETA", value: "\u{1D722}", codepoint: 120610 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL THETA", value: "\u{1D723}", codepoint: 120611 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL IOTA", value: "\u{1D724}", codepoint: 120612 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL KAPPA", value: "\u{1D725}", codepoint: 120613 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL LAMDA", value: "\u{1D726}", codepoint: 120614 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL MU", value: "\u{1D727}", codepoint: 120615 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL NU", value: "\u{1D728}", codepoint: 120616 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL XI", value: "\u{1D729}", codepoint: 120617 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL OMICRON", value: "\u{1D72A}", codepoint: 120618 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL PI", value: "\u{1D72B}", codepoint: 120619 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL RHO", value: "\u{1D72C}", codepoint: 120620 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL", value: "\u{1D72D}", codepoint: 120621 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL SIGMA", value: "\u{1D72E}", codepoint: 120622 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL TAU", value: "\u{1D72F}", codepoint: 120623 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL UPSILON", value: "\u{1D730}", codepoint: 120624 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL PHI", value: "\u{1D731}", codepoint: 120625 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL CHI", value: "\u{1D732}", codepoint: 120626 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL PSI", value: "\u{1D733}", codepoint: 120627 }, { name: "MATHEMATICAL BOLD ITALIC CAPITAL OMEGA", value: "\u{1D734}", codepoint: 120628 }, { name: "MATHEMATICAL BOLD ITALIC NABLA", value: "\u{1D735}", codepoint: 120629 }, { name: "MATHEMATICAL BOLD ITALIC SMALL ALPHA", value: "\u{1D736}", codepoint: 120630 }, { name: "MATHEMATICAL BOLD ITALIC SMALL BETA", value: "\u{1D737}", codepoint: 120631 }, { name: "MATHEMATICAL BOLD ITALIC SMALL GAMMA", value: "\u{1D738}", codepoint: 120632 }, { name: "MATHEMATICAL BOLD ITALIC SMALL DELTA", value: "\u{1D739}", codepoint: 120633 }, { name: "MATHEMATICAL BOLD ITALIC SMALL EPSILON", value: "\u{1D73A}", codepoint: 120634 }, { name: "MATHEMATICAL BOLD ITALIC SMALL ZETA", value: "\u{1D73B}", codepoint: 120635 }, { name: "MATHEMATICAL BOLD ITALIC SMALL ETA", value: "\u{1D73C}", codepoint: 120636 }, { name: "MATHEMATICAL BOLD ITALIC SMALL THETA", value: "\u{1D73D}", codepoint: 120637 }, { name: "MATHEMATICAL BOLD ITALIC SMALL IOTA", value: "\u{1D73E}", codepoint: 120638 }, { name: "MATHEMATICAL BOLD ITALIC SMALL KAPPA", value: "\u{1D73F}", codepoint: 120639 }, { name: "MATHEMATICAL BOLD ITALIC SMALL LAMDA", value: "\u{1D740}", codepoint: 120640 }, { name: "MATHEMATICAL BOLD ITALIC SMALL MU", value: "\u{1D741}", codepoint: 120641 }, { name: "MATHEMATICAL BOLD ITALIC SMALL NU", value: "\u{1D742}", codepoint: 120642 }, { name: "MATHEMATICAL BOLD ITALIC SMALL XI", value: "\u{1D743}", codepoint: 120643 }, { name: "MATHEMATICAL BOLD ITALIC SMALL OMICRON", value: "\u{1D744}", codepoint: 120644 }, { name: "MATHEMATICAL BOLD ITALIC SMALL PI", value: "\u{1D745}", codepoint: 120645 }, { name: "MATHEMATICAL BOLD ITALIC SMALL RHO", value: "\u{1D746}", codepoint: 120646 }, { name: "MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA", value: "\u{1D747}", codepoint: 120647 }, { name: "MATHEMATICAL BOLD ITALIC SMALL SIGMA", value: "\u{1D748}", codepoint: 120648 }, { name: "MATHEMATICAL BOLD ITALIC SMALL TAU", value: "\u{1D749}", codepoint: 120649 }, { name: "MATHEMATICAL BOLD ITALIC SMALL UPSILON", value: "\u{1D74A}", codepoint: 120650 }, { name: "MATHEMATICAL BOLD ITALIC SMALL PHI", value: "\u{1D74B}", codepoint: 120651 }, { name: "MATHEMATICAL BOLD ITALIC SMALL CHI", value: "\u{1D74C}", codepoint: 120652 }, { name: "MATHEMATICAL BOLD ITALIC SMALL PSI", value: "\u{1D74D}", codepoint: 120653 }, { name: "MATHEMATICAL BOLD ITALIC SMALL OMEGA", value: "\u{1D74E}", codepoint: 120654 }, { name: "MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL", value: "\u{1D74F}", codepoint: 120655 }, { name: "MATHEMATICAL BOLD ITALIC EPSILON SYMBOL", value: "\u{1D750}", codepoint: 120656 }, { name: "MATHEMATICAL BOLD ITALIC THETA SYMBOL", value: "\u{1D751}", codepoint: 120657 }, { name: "MATHEMATICAL BOLD ITALIC KAPPA SYMBOL", value: "\u{1D752}", codepoint: 120658 }, { name: "MATHEMATICAL BOLD ITALIC PHI SYMBOL", value: "\u{1D753}", codepoint: 120659 }, { name: "MATHEMATICAL BOLD ITALIC RHO SYMBOL", value: "\u{1D754}", codepoint: 120660 }, { name: "MATHEMATICAL BOLD ITALIC PI SYMBOL", value: "\u{1D755}", codepoint: 120661 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA", value: "\u{1D756}", codepoint: 120662 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA", value: "\u{1D757}", codepoint: 120663 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA", value: "\u{1D758}", codepoint: 120664 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA", value: "\u{1D759}", codepoint: 120665 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON", value: "\u{1D75A}", codepoint: 120666 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA", value: "\u{1D75B}", codepoint: 120667 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA", value: "\u{1D75C}", codepoint: 120668 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA", value: "\u{1D75D}", codepoint: 120669 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA", value: "\u{1D75E}", codepoint: 120670 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA", value: "\u{1D75F}", codepoint: 120671 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA", value: "\u{1D760}", codepoint: 120672 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL MU", value: "\u{1D761}", codepoint: 120673 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL NU", value: "\u{1D762}", codepoint: 120674 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL XI", value: "\u{1D763}", codepoint: 120675 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON", value: "\u{1D764}", codepoint: 120676 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL PI", value: "\u{1D765}", codepoint: 120677 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO", value: "\u{1D766}", codepoint: 120678 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL", value: "\u{1D767}", codepoint: 120679 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA", value: "\u{1D768}", codepoint: 120680 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU", value: "\u{1D769}", codepoint: 120681 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON", value: "\u{1D76A}", codepoint: 120682 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI", value: "\u{1D76B}", codepoint: 120683 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI", value: "\u{1D76C}", codepoint: 120684 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI", value: "\u{1D76D}", codepoint: 120685 }, { name: "MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA", value: "\u{1D76E}", codepoint: 120686 }, { name: "MATHEMATICAL SANS-SERIF BOLD NABLA", value: "\u{1D76F}", codepoint: 120687 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA", value: "\u{1D770}", codepoint: 120688 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL BETA", value: "\u{1D771}", codepoint: 120689 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA", value: "\u{1D772}", codepoint: 120690 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL DELTA", value: "\u{1D773}", codepoint: 120691 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON", value: "\u{1D774}", codepoint: 120692 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL ZETA", value: "\u{1D775}", codepoint: 120693 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL ETA", value: "\u{1D776}", codepoint: 120694 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL THETA", value: "\u{1D777}", codepoint: 120695 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL IOTA", value: "\u{1D778}", codepoint: 120696 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA", value: "\u{1D779}", codepoint: 120697 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA", value: "\u{1D77A}", codepoint: 120698 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL MU", value: "\u{1D77B}", codepoint: 120699 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL NU", value: "\u{1D77C}", codepoint: 120700 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL XI", value: "\u{1D77D}", codepoint: 120701 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON", value: "\u{1D77E}", codepoint: 120702 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL PI", value: "\u{1D77F}", codepoint: 120703 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL RHO", value: "\u{1D780}", codepoint: 120704 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA", value: "\u{1D781}", codepoint: 120705 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA", value: "\u{1D782}", codepoint: 120706 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL TAU", value: "\u{1D783}", codepoint: 120707 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON", value: "\u{1D784}", codepoint: 120708 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL PHI", value: "\u{1D785}", codepoint: 120709 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL CHI", value: "\u{1D786}", codepoint: 120710 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL PSI", value: "\u{1D787}", codepoint: 120711 }, { name: "MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA", value: "\u{1D788}", codepoint: 120712 }, { name: "MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL", value: "\u{1D789}", codepoint: 120713 }, { name: "MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL", value: "\u{1D78A}", codepoint: 120714 }, { name: "MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL", value: "\u{1D78B}", codepoint: 120715 }, { name: "MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL", value: "\u{1D78C}", codepoint: 120716 }, { name: "MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL", value: "\u{1D78D}", codepoint: 120717 }, { name: "MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL", value: "\u{1D78E}", codepoint: 120718 }, { name: "MATHEMATICAL SANS-SERIF BOLD PI SYMBOL", value: "\u{1D78F}", codepoint: 120719 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA", value: "\u{1D790}", codepoint: 120720 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA", value: "\u{1D791}", codepoint: 120721 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA", value: "\u{1D792}", codepoint: 120722 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA", value: "\u{1D793}", codepoint: 120723 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON", value: "\u{1D794}", codepoint: 120724 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA", value: "\u{1D795}", codepoint: 120725 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA", value: "\u{1D796}", codepoint: 120726 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA", value: "\u{1D797}", codepoint: 120727 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA", value: "\u{1D798}", codepoint: 120728 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA", value: "\u{1D799}", codepoint: 120729 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA", value: "\u{1D79A}", codepoint: 120730 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU", value: "\u{1D79B}", codepoint: 120731 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU", value: "\u{1D79C}", codepoint: 120732 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI", value: "\u{1D79D}", codepoint: 120733 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON", value: "\u{1D79E}", codepoint: 120734 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI", value: "\u{1D79F}", codepoint: 120735 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO", value: "\u{1D7A0}", codepoint: 120736 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL", value: "\u{1D7A1}", codepoint: 120737 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA", value: "\u{1D7A2}", codepoint: 120738 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU", value: "\u{1D7A3}", codepoint: 120739 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON", value: "\u{1D7A4}", codepoint: 120740 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI", value: "\u{1D7A5}", codepoint: 120741 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI", value: "\u{1D7A6}", codepoint: 120742 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI", value: "\u{1D7A7}", codepoint: 120743 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA", value: "\u{1D7A8}", codepoint: 120744 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA", value: "\u{1D7A9}", codepoint: 120745 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA", value: "\u{1D7AA}", codepoint: 120746 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA", value: "\u{1D7AB}", codepoint: 120747 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA", value: "\u{1D7AC}", codepoint: 120748 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA", value: "\u{1D7AD}", codepoint: 120749 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON", value: "\u{1D7AE}", codepoint: 120750 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA", value: "\u{1D7AF}", codepoint: 120751 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA", value: "\u{1D7B0}", codepoint: 120752 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA", value: "\u{1D7B1}", codepoint: 120753 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA", value: "\u{1D7B2}", codepoint: 120754 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA", value: "\u{1D7B3}", codepoint: 120755 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA", value: "\u{1D7B4}", codepoint: 120756 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU", value: "\u{1D7B5}", codepoint: 120757 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU", value: "\u{1D7B6}", codepoint: 120758 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI", value: "\u{1D7B7}", codepoint: 120759 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON", value: "\u{1D7B8}", codepoint: 120760 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI", value: "\u{1D7B9}", codepoint: 120761 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO", value: "\u{1D7BA}", codepoint: 120762 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA", value: "\u{1D7BB}", codepoint: 120763 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA", value: "\u{1D7BC}", codepoint: 120764 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU", value: "\u{1D7BD}", codepoint: 120765 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON", value: "\u{1D7BE}", codepoint: 120766 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI", value: "\u{1D7BF}", codepoint: 120767 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI", value: "\u{1D7C0}", codepoint: 120768 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI", value: "\u{1D7C1}", codepoint: 120769 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA", value: "\u{1D7C2}", codepoint: 120770 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL", value: "\u{1D7C3}", codepoint: 120771 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL", value: "\u{1D7C4}", codepoint: 120772 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL", value: "\u{1D7C5}", codepoint: 120773 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL", value: "\u{1D7C6}", codepoint: 120774 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL", value: "\u{1D7C7}", codepoint: 120775 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL", value: "\u{1D7C8}", codepoint: 120776 }, { name: "MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL", value: "\u{1D7C9}", codepoint: 120777 }, { name: "MATHEMATICAL BOLD DIGIT ZERO", value: "\u{1D7CE}", codepoint: 120782 }, { name: "MATHEMATICAL BOLD DIGIT ONE", value: "\u{1D7CF}", codepoint: 120783 }, { name: "MATHEMATICAL BOLD DIGIT TWO", value: "\u{1D7D0}", codepoint: 120784 }, { name: "MATHEMATICAL BOLD DIGIT THREE", value: "\u{1D7D1}", codepoint: 120785 }, { name: "MATHEMATICAL BOLD DIGIT FOUR", value: "\u{1D7D2}", codepoint: 120786 }, { name: "MATHEMATICAL BOLD DIGIT FIVE", value: "\u{1D7D3}", codepoint: 120787 }, { name: "MATHEMATICAL BOLD DIGIT SIX", value: "\u{1D7D4}", codepoint: 120788 }, { name: "MATHEMATICAL BOLD DIGIT SEVEN", value: "\u{1D7D5}", codepoint: 120789 }, { name: "MATHEMATICAL BOLD DIGIT EIGHT", value: "\u{1D7D6}", codepoint: 120790 }, { name: "MATHEMATICAL BOLD DIGIT NINE", value: "\u{1D7D7}", codepoint: 120791 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO", value: "\u{1D7D8}", codepoint: 120792 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT ONE", value: "\u{1D7D9}", codepoint: 120793 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT TWO", value: "\u{1D7DA}", codepoint: 120794 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT THREE", value: "\u{1D7DB}", codepoint: 120795 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR", value: "\u{1D7DC}", codepoint: 120796 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE", value: "\u{1D7DD}", codepoint: 120797 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT SIX", value: "\u{1D7DE}", codepoint: 120798 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN", value: "\u{1D7DF}", codepoint: 120799 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT", value: "\u{1D7E0}", codepoint: 120800 }, { name: "MATHEMATICAL DOUBLE-STRUCK DIGIT NINE", value: "\u{1D7E1}", codepoint: 120801 }, { name: "MATHEMATICAL SANS-SERIF DIGIT ZERO", value: "\u{1D7E2}", codepoint: 120802 }, { name: "MATHEMATICAL SANS-SERIF DIGIT ONE", value: "\u{1D7E3}", codepoint: 120803 }, { name: "MATHEMATICAL SANS-SERIF DIGIT TWO", value: "\u{1D7E4}", codepoint: 120804 }, { name: "MATHEMATICAL SANS-SERIF DIGIT THREE", value: "\u{1D7E5}", codepoint: 120805 }, { name: "MATHEMATICAL SANS-SERIF DIGIT FOUR", value: "\u{1D7E6}", codepoint: 120806 }, { name: "MATHEMATICAL SANS-SERIF DIGIT FIVE", value: "\u{1D7E7}", codepoint: 120807 }, { name: "MATHEMATICAL SANS-SERIF DIGIT SIX", value: "\u{1D7E8}", codepoint: 120808 }, { name: "MATHEMATICAL SANS-SERIF DIGIT SEVEN", value: "\u{1D7E9}", codepoint: 120809 }, { name: "MATHEMATICAL SANS-SERIF DIGIT EIGHT", value: "\u{1D7EA}", codepoint: 120810 }, { name: "MATHEMATICAL SANS-SERIF DIGIT NINE", value: "\u{1D7EB}", codepoint: 120811 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO", value: "\u{1D7EC}", codepoint: 120812 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT ONE", value: "\u{1D7ED}", codepoint: 120813 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT TWO", value: "\u{1D7EE}", codepoint: 120814 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT THREE", value: "\u{1D7EF}", codepoint: 120815 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR", value: "\u{1D7F0}", codepoint: 120816 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE", value: "\u{1D7F1}", codepoint: 120817 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT SIX", value: "\u{1D7F2}", codepoint: 120818 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN", value: "\u{1D7F3}", codepoint: 120819 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT", value: "\u{1D7F4}", codepoint: 120820 }, { name: "MATHEMATICAL SANS-SERIF BOLD DIGIT NINE", value: "\u{1D7F5}", codepoint: 120821 }, { name: "MATHEMATICAL MONOSPACE DIGIT ZERO", value: "\u{1D7F6}", codepoint: 120822 }, { name: "MATHEMATICAL MONOSPACE DIGIT ONE", value: "\u{1D7F7}", codepoint: 120823 }, { name: "MATHEMATICAL MONOSPACE DIGIT TWO", value: "\u{1D7F8}", codepoint: 120824 }, { name: "MATHEMATICAL MONOSPACE DIGIT THREE", value: "\u{1D7F9}", codepoint: 120825 }, { name: "MATHEMATICAL MONOSPACE DIGIT FOUR", value: "\u{1D7FA}", codepoint: 120826 }, { name: "MATHEMATICAL MONOSPACE DIGIT FIVE", value: "\u{1D7FB}", codepoint: 120827 }, { name: "MATHEMATICAL MONOSPACE DIGIT SIX", value: "\u{1D7FC}", codepoint: 120828 }, { name: "MATHEMATICAL MONOSPACE DIGIT SEVEN", value: "\u{1D7FD}", codepoint: 120829 }, { name: "MATHEMATICAL MONOSPACE DIGIT EIGHT", value: "\u{1D7FE}", codepoint: 120830 }, { name: "MATHEMATICAL MONOSPACE DIGIT NINE", value: "\u{1D7FF}", codepoint: 120831 } ] }, { name: "Punctuation", symbols: [ { name: "HYPHEN", value: "\u2010", codepoint: 8208 }, { name: "NON-BREAKING HYPHEN", value: "\u2011", codepoint: 8209 }, { name: "FIGURE DASH", value: "\u2012", codepoint: 8210 }, { name: "EN DASH", value: "\u2013", codepoint: 8211 }, { name: "EM DASH", value: "\u2014", codepoint: 8212 }, { name: "HORIZONTAL BAR", value: "\u2015", codepoint: 8213 }, { name: "DOUBLE VERTICAL LINE", value: "\u2016", codepoint: 8214 }, { name: "DOUBLE LOW LINE", value: "\u2017", codepoint: 8215 }, { name: "LEFT SINGLE QUOTATION MARK", value: "\u2018", codepoint: 8216 }, { name: "RIGHT SINGLE QUOTATION MARK", value: "\u2019", codepoint: 8217 }, { name: "SINGLE LOW-9 QUOTATION MARK", value: "\u201A", codepoint: 8218 }, { name: "SINGLE HIGH-REVERSED-9 QUOTATION MARK", value: "\u201B", codepoint: 8219 }, { name: "LEFT DOUBLE QUOTATION MARK", value: "\u201C", codepoint: 8220 }, { name: "RIGHT DOUBLE QUOTATION MARK", value: "\u201D", codepoint: 8221 }, { name: "DOUBLE LOW-9 QUOTATION MARK", value: "\u201E", codepoint: 8222 }, { name: "DOUBLE HIGH-REVERSED-9 QUOTATION MARK", value: "\u201F", codepoint: 8223 }, { name: "DAGGER", value: "\u2020", codepoint: 8224 }, { name: "DOUBLE DAGGER", value: "\u2021", codepoint: 8225 }, { name: "BULLET", value: "\u2022", codepoint: 8226 }, { name: "TRIANGULAR BULLET", value: "\u2023", codepoint: 8227 }, { name: "ONE DOT LEADER", value: "\u2024", codepoint: 8228 }, { name: "TWO DOT LEADER", value: "\u2025", codepoint: 8229 }, { name: "HORIZONTAL ELLIPSIS", value: "\u2026", codepoint: 8230 }, { name: "HYPHENATION POINT", value: "\u2027", codepoint: 8231 }, { name: "NARROW NO-BREAK SPACE", value: "\u202F", codepoint: 8239 }, { name: "PER MILLE SIGN", value: "\u2030", codepoint: 8240 }, { name: "PER TEN THOUSAND SIGN", value: "\u2031", codepoint: 8241 }, { name: "PRIME", value: "\u2032", codepoint: 8242 }, { name: "DOUBLE PRIME", value: "\u2033", codepoint: 8243 }, { name: "TRIPLE PRIME", value: "\u2034", codepoint: 8244 }, { name: "REVERSED PRIME", value: "\u2035", codepoint: 8245 }, { name: "REVERSED DOUBLE PRIME", value: "\u2036", codepoint: 8246 }, { name: "REVERSED TRIPLE PRIME", value: "\u2037", codepoint: 8247 }, { name: "CARET", value: "\u2038", codepoint: 8248 }, { name: "SINGLE LEFT-POINTING ANGLE QUOTATION MARK", value: "\u2039", codepoint: 8249 }, { name: "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK", value: "\u203A", codepoint: 8250 }, { name: "REFERENCE MARK", value: "\u203B", codepoint: 8251 }, { name: "INTERROBANG", value: "\u203D", codepoint: 8253 }, { name: "OVERLINE", value: "\u203E", codepoint: 8254 }, { name: "UNDERTIE", value: "\u203F", codepoint: 8255 }, { name: "CHARACTER TIE", value: "\u2040", codepoint: 8256 }, { name: "CARET INSERTION POINT", value: "\u2041", codepoint: 8257 }, { name: "ASTERISM", value: "\u2042", codepoint: 8258 }, { name: "HYPHEN BULLET", value: "\u2043", codepoint: 8259 }, { name: "FRACTION SLASH", value: "\u2044", codepoint: 8260 }, { name: "LEFT SQUARE BRACKET WITH QUILL", value: "\u2045", codepoint: 8261 }, { name: "RIGHT SQUARE BRACKET WITH QUILL", value: "\u2046", codepoint: 8262 }, { name: "DOUBLE QUESTION MARK", value: "\u2047", codepoint: 8263 }, { name: "QUESTION EXCLAMATION MARK", value: "\u2048", codepoint: 8264 }, { name: "TIRONIAN SIGN ET", value: "\u204A", codepoint: 8266 }, { name: "REVERSED PILCROW SIGN", value: "\u204B", codepoint: 8267 }, { name: "BLACK LEFTWARDS BULLET", value: "\u204C", codepoint: 8268 }, { name: "BLACK RIGHTWARDS BULLET", value: "\u204D", codepoint: 8269 }, { name: "LOW ASTERISK", value: "\u204E", codepoint: 8270 }, { name: "REVERSED SEMICOLON", value: "\u204F", codepoint: 8271 }, { name: "CLOSE UP", value: "\u2050", codepoint: 8272 }, { name: "TWO ASTERISKS ALIGNED VERTICALLY", value: "\u2051", codepoint: 8273 }, { name: "COMMERCIAL MINUS SIGN", value: "\u2052", codepoint: 8274 }, { name: "SWUNG DASH", value: "\u2053", codepoint: 8275 }, { name: "INVERTED UNDERTIE", value: "\u2054", codepoint: 8276 }, { name: "FLOWER PUNCTUATION MARK", value: "\u2055", codepoint: 8277 }, { name: "THREE DOT PUNCTUATION", value: "\u2056", codepoint: 8278 }, { name: "QUADRUPLE PRIME", value: "\u2057", codepoint: 8279 }, { name: "FOUR DOT PUNCTUATION", value: "\u2058", codepoint: 8280 }, { name: "FIVE DOT PUNCTUATION", value: "\u2059", codepoint: 8281 }, { name: "TWO DOT PUNCTUATION", value: "\u205A", codepoint: 8282 }, { name: "FOUR DOT MARK", value: "\u205B", codepoint: 8283 }, { name: "DOTTED CROSS", value: "\u205C", codepoint: 8284 }, { name: "TRICOLON", value: "\u205D", codepoint: 8285 }, { name: "VERTICAL FOUR DOTS", value: "\u205E", codepoint: 8286 }, { name: "MEDIUM MATHEMATICAL SPACE", value: "\u205F", codepoint: 8287 }, { name: "RIGHT ANGLE SUBSTITUTION MARKER", value: "\u2E00", codepoint: 11776 }, { name: "RIGHT ANGLE DOTTED SUBSTITUTION MARKER", value: "\u2E01", codepoint: 11777 }, { name: "LEFT SUBSTITUTION BRACKET", value: "\u2E02", codepoint: 11778 }, { name: "RIGHT SUBSTITUTION BRACKET", value: "\u2E03", codepoint: 11779 }, { name: "LEFT DOTTED SUBSTITUTION BRACKET", value: "\u2E04", codepoint: 11780 }, { name: "RIGHT DOTTED SUBSTITUTION BRACKET", value: "\u2E05", codepoint: 11781 }, { name: "RAISED INTERPOLATION MARKER", value: "\u2E06", codepoint: 11782 }, { name: "RAISED DOTTED INTERPOLATION MARKER", value: "\u2E07", codepoint: 11783 }, { name: "DOTTED TRANSPOSITION MARKER", value: "\u2E08", codepoint: 11784 }, { name: "LEFT TRANSPOSITION BRACKET", value: "\u2E09", codepoint: 11785 }, { name: "RIGHT TRANSPOSITION BRACKET", value: "\u2E0A", codepoint: 11786 }, { name: "RAISED SQUARE", value: "\u2E0B", codepoint: 11787 }, { name: "LEFT RAISED OMISSION BRACKET", value: "\u2E0C", codepoint: 11788 }, { name: "RIGHT RAISED OMISSION BRACKET", value: "\u2E0D", codepoint: 11789 }, { name: "EDITORIAL CORONIS", value: "\u2E0E", codepoint: 11790 }, { name: "PARAGRAPHOS", value: "\u2E0F", codepoint: 11791 }, { name: "FORKED PARAGRAPHOS", value: "\u2E10", codepoint: 11792 }, { name: "REVERSED FORKED PARAGRAPHOS", value: "\u2E11", codepoint: 11793 }, { name: "HYPODIASTOLE", value: "\u2E12", codepoint: 11794 }, { name: "DOTTED OBELOS", value: "\u2E13", codepoint: 11795 }, { name: "DOWNWARDS ANCORA", value: "\u2E14", codepoint: 11796 }, { name: "UPWARDS ANCORA", value: "\u2E15", codepoint: 11797 }, { name: "DOTTED RIGHT-POINTING ANGLE", value: "\u2E16", codepoint: 11798 }, { name: "DOUBLE OBLIQUE HYPHEN", value: "\u2E17", codepoint: 11799 }, { name: "INVERTED INTERROBANG", value: "\u2E18", codepoint: 11800 }, { name: "HYPHEN WITH DIAERESIS", value: "\u2E1A", codepoint: 11802 }, { name: "TILDE WITH RING ABOVE", value: "\u2E1B", codepoint: 11803 }, { name: "LEFT LOW PARAPHRASE BRACKET", value: "\u2E1C", codepoint: 11804 }, { name: "RIGHT LOW PARAPHRASE BRACKET", value: "\u2E1D", codepoint: 11805 }, { name: "TILDE WITH DOT ABOVE", value: "\u2E1E", codepoint: 11806 }, { name: "TILDE WITH DOT BELOW", value: "\u2E1F", codepoint: 11807 }, { name: "LEFT VERTICAL BAR WITH QUILL", value: "\u2E20", codepoint: 11808 }, { name: "RIGHT VERTICAL BAR WITH QUILL", value: "\u2E21", codepoint: 11809 }, { name: "TOP LEFT HALF BRACKET", value: "\u2E22", codepoint: 11810 }, { name: "TOP RIGHT HALF BRACKET", value: "\u2E23", codepoint: 11811 }, { name: "BOTTOM LEFT HALF BRACKET", value: "\u2E24", codepoint: 11812 }, { name: "BOTTOM RIGHT HALF BRACKET", value: "\u2E25", codepoint: 11813 }, { name: "LEFT SIDEWAYS U BRACKET", value: "\u2E26", codepoint: 11814 }, { name: "RIGHT SIDEWAYS U BRACKET", value: "\u2E27", codepoint: 11815 }, { name: "LEFT DOUBLE PARENTHESIS", value: "\u2E28", codepoint: 11816 }, { name: "RIGHT DOUBLE PARENTHESIS", value: "\u2E29", codepoint: 11817 }, { name: "TWO DOTS OVER ONE DOT PUNCTUATION", value: "\u2E2A", codepoint: 11818 }, { name: "ONE DOT OVER TWO DOTS PUNCTUATION", value: "\u2E2B", codepoint: 11819 }, { name: "SQUARED FOUR DOT PUNCTUATION", value: "\u2E2C", codepoint: 11820 }, { name: "FIVE DOT MARK", value: "\u2E2D", codepoint: 11821 }, { name: "REVERSED QUESTION MARK", value: "\u2E2E", codepoint: 11822 }, { name: "VERTICAL TILDE", value: "\u2E2F", codepoint: 11823 }, { name: "RING POINT", value: "\u2E30", codepoint: 11824 }, { name: "WORD SEPARATOR MIDDLE DOT", value: "\u2E31", codepoint: 11825 } ] }, { name: "Technical", symbols: [ { name: "DIAMETER SIGN", value: "\u2300", codepoint: 8960 }, { name: "ELECTRIC ARROW", value: "\u2301", codepoint: 8961 }, { name: "HOUSE", value: "\u2302", codepoint: 8962 }, { name: "UP ARROWHEAD", value: "\u2303", codepoint: 8963 }, { name: "DOWN ARROWHEAD", value: "\u2304", codepoint: 8964 }, { name: "PROJECTIVE", value: "\u2305", codepoint: 8965 }, { name: "PERSPECTIVE", value: "\u2306", codepoint: 8966 }, { name: "WAVY LINE", value: "\u2307", codepoint: 8967 }, { name: "LEFT CEILING", value: "\u2308", codepoint: 8968 }, { name: "RIGHT CEILING", value: "\u2309", codepoint: 8969 }, { name: "LEFT FLOOR", value: "\u230A", codepoint: 8970 }, { name: "RIGHT FLOOR", value: "\u230B", codepoint: 8971 }, { name: "BOTTOM RIGHT CROP", value: "\u230C", codepoint: 8972 }, { name: "BOTTOM LEFT CROP", value: "\u230D", codepoint: 8973 }, { name: "TOP RIGHT CROP", value: "\u230E", codepoint: 8974 }, { name: "TOP LEFT CROP", value: "\u230F", codepoint: 8975 }, { name: "REVERSED NOT SIGN", value: "\u2310", codepoint: 8976 }, { name: "SQUARE LOZENGE", value: "\u2311", codepoint: 8977 }, { name: "ARC", value: "\u2312", codepoint: 8978 }, { name: "SEGMENT", value: "\u2313", codepoint: 8979 }, { name: "SECTOR", value: "\u2314", codepoint: 8980 }, { name: "TELEPHONE RECORDER", value: "\u2315", codepoint: 8981 }, { name: "POSITION INDICATOR", value: "\u2316", codepoint: 8982 }, { name: "VIEWDATA SQUARE", value: "\u2317", codepoint: 8983 }, { name: "PLACE OF INTEREST SIGN", value: "\u2318", codepoint: 8984 }, { name: "TURNED NOT SIGN", value: "\u2319", codepoint: 8985 }, { name: "TOP LEFT CORNER", value: "\u231C", codepoint: 8988 }, { name: "TOP RIGHT CORNER", value: "\u231D", codepoint: 8989 }, { name: "BOTTOM LEFT CORNER", value: "\u231E", codepoint: 8990 }, { name: "BOTTOM RIGHT CORNER", value: "\u231F", codepoint: 8991 }, { name: "TOP HALF INTEGRAL", value: "\u2320", codepoint: 8992 }, { name: "BOTTOM HALF INTEGRAL", value: "\u2321", codepoint: 8993 }, { name: "FROWN", value: "\u2322", codepoint: 8994 }, { name: "SMILE", value: "\u2323", codepoint: 8995 }, { name: "UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS", value: "\u2324", codepoint: 8996 }, { name: "OPTION KEY", value: "\u2325", codepoint: 8997 }, { name: "ERASE TO THE RIGHT", value: "\u2326", codepoint: 8998 }, { name: "X IN A RECTANGLE BOX", value: "\u2327", codepoint: 8999 }, { name: "LEFT-POINTING ANGLE BRACKET", value: "\u2329", codepoint: 9001 }, { name: "RIGHT-POINTING ANGLE BRACKET", value: "\u232A", codepoint: 9002 }, { name: "ERASE TO THE LEFT", value: "\u232B", codepoint: 9003 }, { name: "BENZENE RING", value: "\u232C", codepoint: 9004 }, { name: "CYLINDRICITY", value: "\u232D", codepoint: 9005 }, { name: "ALL AROUND-PROFILE", value: "\u232E", codepoint: 9006 }, { name: "SYMMETRY", value: "\u232F", codepoint: 9007 }, { name: "TOTAL RUNOUT", value: "\u2330", codepoint: 9008 }, { name: "DIMENSION ORIGIN", value: "\u2331", codepoint: 9009 }, { name: "CONICAL TAPER", value: "\u2332", codepoint: 9010 }, { name: "SLOPE", value: "\u2333", codepoint: 9011 }, { name: "COUNTERBORE", value: "\u2334", codepoint: 9012 }, { name: "COUNTERSINK", value: "\u2335", codepoint: 9013 }, { name: "APL FUNCTIONAL SYMBOL I-BEAM", value: "\u2336", codepoint: 9014 }, { name: "APL FUNCTIONAL SYMBOL SQUISH QUAD", value: "\u2337", codepoint: 9015 }, { name: "APL FUNCTIONAL SYMBOL QUAD EQUAL", value: "\u2338", codepoint: 9016 }, { name: "APL FUNCTIONAL SYMBOL QUAD DIVIDE", value: "\u2339", codepoint: 9017 }, { name: "APL FUNCTIONAL SYMBOL QUAD DIAMOND", value: "\u233A", codepoint: 9018 }, { name: "APL FUNCTIONAL SYMBOL QUAD JOT", value: "\u233B", codepoint: 9019 }, { name: "APL FUNCTIONAL SYMBOL QUAD CIRCLE", value: "\u233C", codepoint: 9020 }, { name: "APL FUNCTIONAL SYMBOL CIRCLE STILE", value: "\u233D", codepoint: 9021 }, { name: "APL FUNCTIONAL SYMBOL CIRCLE JOT", value: "\u233E", codepoint: 9022 }, { name: "APL FUNCTIONAL SYMBOL SLASH BAR", value: "\u233F", codepoint: 9023 }, { name: "APL FUNCTIONAL SYMBOL BACKSLASH BAR", value: "\u2340", codepoint: 9024 }, { name: "APL FUNCTIONAL SYMBOL QUAD SLASH", value: "\u2341", codepoint: 9025 }, { name: "APL FUNCTIONAL SYMBOL QUAD BACKSLASH", value: "\u2342", codepoint: 9026 }, { name: "APL FUNCTIONAL SYMBOL QUAD LESS-THAN", value: "\u2343", codepoint: 9027 }, { name: "APL FUNCTIONAL SYMBOL QUAD GREATER-THAN", value: "\u2344", codepoint: 9028 }, { name: "APL FUNCTIONAL SYMBOL LEFTWARDS VANE", value: "\u2345", codepoint: 9029 }, { name: "APL FUNCTIONAL SYMBOL RIGHTWARDS VANE", value: "\u2346", codepoint: 9030 }, { name: "APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW", value: "\u2347", codepoint: 9031 }, { name: "APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW", value: "\u2348", codepoint: 9032 }, { name: "APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH", value: "\u2349", codepoint: 9033 }, { name: "APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR", value: "\u234A", codepoint: 9034 }, { name: "APL FUNCTIONAL SYMBOL DELTA STILE", value: "\u234B", codepoint: 9035 }, { name: "APL FUNCTIONAL SYMBOL QUAD DOWN CARET", value: "\u234C", codepoint: 9036 }, { name: "APL FUNCTIONAL SYMBOL QUAD DELTA", value: "\u234D", codepoint: 9037 }, { name: "APL FUNCTIONAL SYMBOL DOWN TACK JOT", value: "\u234E", codepoint: 9038 }, { name: "APL FUNCTIONAL SYMBOL UPWARDS VANE", value: "\u234F", codepoint: 9039 }, { name: "APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW", value: "\u2350", codepoint: 9040 }, { name: "APL FUNCTIONAL SYMBOL UP TACK OVERBAR", value: "\u2351", codepoint: 9041 }, { name: "APL FUNCTIONAL SYMBOL DEL STILE", value: "\u2352", codepoint: 9042 }, { name: "APL FUNCTIONAL SYMBOL QUAD UP CARET", value: "\u2353", codepoint: 9043 }, { name: "APL FUNCTIONAL SYMBOL QUAD DEL", value: "\u2354", codepoint: 9044 }, { name: "APL FUNCTIONAL SYMBOL UP TACK JOT", value: "\u2355", codepoint: 9045 }, { name: "APL FUNCTIONAL SYMBOL DOWNWARDS VANE", value: "\u2356", codepoint: 9046 }, { name: "APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW", value: "\u2357", codepoint: 9047 }, { name: "APL FUNCTIONAL SYMBOL QUOTE UNDERBAR", value: "\u2358", codepoint: 9048 }, { name: "APL FUNCTIONAL SYMBOL DELTA UNDERBAR", value: "\u2359", codepoint: 9049 }, { name: "APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR", value: "\u235A", codepoint: 9050 }, { name: "APL FUNCTIONAL SYMBOL JOT UNDERBAR", value: "\u235B", codepoint: 9051 }, { name: "APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR", value: "\u235C", codepoint: 9052 }, { name: "APL FUNCTIONAL SYMBOL UP SHOE JOT", value: "\u235D", codepoint: 9053 }, { name: "APL FUNCTIONAL SYMBOL QUOTE QUAD", value: "\u235E", codepoint: 9054 }, { name: "APL FUNCTIONAL SYMBOL CIRCLE STAR", value: "\u235F", codepoint: 9055 }, { name: "APL FUNCTIONAL SYMBOL QUAD COLON", value: "\u2360", codepoint: 9056 }, { name: "APL FUNCTIONAL SYMBOL UP TACK DIAERESIS", value: "\u2361", codepoint: 9057 }, { name: "APL FUNCTIONAL SYMBOL DEL DIAERESIS", value: "\u2362", codepoint: 9058 }, { name: "APL FUNCTIONAL SYMBOL STAR DIAERESIS", value: "\u2363", codepoint: 9059 }, { name: "APL FUNCTIONAL SYMBOL JOT DIAERESIS", value: "\u2364", codepoint: 9060 }, { name: "APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS", value: "\u2365", codepoint: 9061 }, { name: "APL FUNCTIONAL SYMBOL DOWN SHOE STILE", value: "\u2366", codepoint: 9062 }, { name: "APL FUNCTIONAL SYMBOL LEFT SHOE STILE", value: "\u2367", codepoint: 9063 }, { name: "APL FUNCTIONAL SYMBOL TILDE DIAERESIS", value: "\u2368", codepoint: 9064 }, { name: "APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS", value: "\u2369", codepoint: 9065 }, { name: "APL FUNCTIONAL SYMBOL COMMA BAR", value: "\u236A", codepoint: 9066 }, { name: "APL FUNCTIONAL SYMBOL DEL TILDE", value: "\u236B", codepoint: 9067 }, { name: "APL FUNCTIONAL SYMBOL ZILDE", value: "\u236C", codepoint: 9068 }, { name: "APL FUNCTIONAL SYMBOL STILE TILDE", value: "\u236D", codepoint: 9069 }, { name: "APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR", value: "\u236E", codepoint: 9070 }, { name: "APL FUNCTIONAL SYMBOL QUAD NOT EQUAL", value: "\u236F", codepoint: 9071 }, { name: "APL FUNCTIONAL SYMBOL QUAD QUESTION", value: "\u2370", codepoint: 9072 }, { name: "APL FUNCTIONAL SYMBOL DOWN CARET TILDE", value: "\u2371", codepoint: 9073 }, { name: "APL FUNCTIONAL SYMBOL UP CARET TILDE", value: "\u2372", codepoint: 9074 }, { name: "APL FUNCTIONAL SYMBOL IOTA", value: "\u2373", codepoint: 9075 }, { name: "APL FUNCTIONAL SYMBOL RHO", value: "\u2374", codepoint: 9076 }, { name: "APL FUNCTIONAL SYMBOL OMEGA", value: "\u2375", codepoint: 9077 }, { name: "APL FUNCTIONAL SYMBOL ALPHA UNDERBAR", value: "\u2376", codepoint: 9078 }, { name: "APL FUNCTIONAL SYMBOL EPSILON UNDERBAR", value: "\u2377", codepoint: 9079 }, { name: "APL FUNCTIONAL SYMBOL IOTA UNDERBAR", value: "\u2378", codepoint: 9080 }, { name: "APL FUNCTIONAL SYMBOL OMEGA UNDERBAR", value: "\u2379", codepoint: 9081 }, { name: "APL FUNCTIONAL SYMBOL ALPHA", value: "\u237A", codepoint: 9082 }, { name: "NOT CHECK MARK", value: "\u237B", codepoint: 9083 }, { name: "RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW", value: "\u237C", codepoint: 9084 }, { name: "SHOULDERED OPEN BOX", value: "\u237D", codepoint: 9085 }, { name: "BELL SYMBOL", value: "\u237E", codepoint: 9086 }, { name: "VERTICAL LINE WITH MIDDLE DOT", value: "\u237F", codepoint: 9087 }, { name: "INSERTION SYMBOL", value: "\u2380", codepoint: 9088 }, { name: "CONTINUOUS UNDERLINE SYMBOL", value: "\u2381", codepoint: 9089 }, { name: "DISCONTINUOUS UNDERLINE SYMBOL", value: "\u2382", codepoint: 9090 }, { name: "EMPHASIS SYMBOL", value: "\u2383", codepoint: 9091 }, { name: "COMPOSITION SYMBOL", value: "\u2384", codepoint: 9092 }, { name: "WHITE SQUARE WITH CENTRE VERTICAL LINE", value: "\u2385", codepoint: 9093 }, { name: "ENTER SYMBOL", value: "\u2386", codepoint: 9094 }, { name: "ALTERNATIVE KEY SYMBOL", value: "\u2387", codepoint: 9095 }, { name: "HELM SYMBOL", value: "\u2388", codepoint: 9096 }, { name: "CIRCLED HORIZONTAL BAR WITH NOTCH", value: "\u2389", codepoint: 9097 }, { name: "CIRCLED TRIANGLE DOWN", value: "\u238A", codepoint: 9098 }, { name: "BROKEN CIRCLE WITH NORTHWEST ARROW", value: "\u238B", codepoint: 9099 }, { name: "UNDO SYMBOL", value: "\u238C", codepoint: 9100 }, { name: "MONOSTABLE SYMBOL", value: "\u238D", codepoint: 9101 }, { name: "HYSTERESIS SYMBOL", value: "\u238E", codepoint: 9102 }, { name: "OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL", value: "\u238F", codepoint: 9103 }, { name: "OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL", value: "\u2390", codepoint: 9104 }, { name: "PASSIVE-PULL-DOWN-OUTPUT SYMBOL", value: "\u2391", codepoint: 9105 }, { name: "PASSIVE-PULL-UP-OUTPUT SYMBOL", value: "\u2392", codepoint: 9106 }, { name: "DIRECT CURRENT SYMBOL FORM TWO", value: "\u2393", codepoint: 9107 }, { name: "SOFTWARE-FUNCTION SYMBOL", value: "\u2394", codepoint: 9108 }, { name: "APL FUNCTIONAL SYMBOL QUAD", value: "\u2395", codepoint: 9109 }, { name: "DECIMAL SEPARATOR KEY SYMBOL", value: "\u2396", codepoint: 9110 }, { name: "PREVIOUS PAGE", value: "\u2397", codepoint: 9111 }, { name: "NEXT PAGE", value: "\u2398", codepoint: 9112 }, { name: "PRINT SCREEN SYMBOL", value: "\u2399", codepoint: 9113 }, { name: "CLEAR SCREEN SYMBOL", value: "\u239A", codepoint: 9114 }, { name: "LEFT PARENTHESIS UPPER HOOK", value: "\u239B", codepoint: 9115 }, { name: "LEFT PARENTHESIS EXTENSION", value: "\u239C", codepoint: 9116 }, { name: "LEFT PARENTHESIS LOWER HOOK", value: "\u239D", codepoint: 9117 }, { name: "RIGHT PARENTHESIS UPPER HOOK", value: "\u239E", codepoint: 9118 }, { name: "RIGHT PARENTHESIS EXTENSION", value: "\u239F", codepoint: 9119 }, { name: "RIGHT PARENTHESIS LOWER HOOK", value: "\u23A0", codepoint: 9120 }, { name: "LEFT SQUARE BRACKET UPPER CORNER", value: "\u23A1", codepoint: 9121 }, { name: "LEFT SQUARE BRACKET EXTENSION", value: "\u23A2", codepoint: 9122 }, { name: "LEFT SQUARE BRACKET LOWER CORNER", value: "\u23A3", codepoint: 9123 }, { name: "RIGHT SQUARE BRACKET UPPER CORNER", value: "\u23A4", codepoint: 9124 }, { name: "RIGHT SQUARE BRACKET EXTENSION", value: "\u23A5", codepoint: 9125 }, { name: "RIGHT SQUARE BRACKET LOWER CORNER", value: "\u23A6", codepoint: 9126 }, { name: "LEFT CURLY BRACKET UPPER HOOK", value: "\u23A7", codepoint: 9127 }, { name: "LEFT CURLY BRACKET MIDDLE PIECE", value: "\u23A8", codepoint: 9128 }, { name: "LEFT CURLY BRACKET LOWER HOOK", value: "\u23A9", codepoint: 9129 }, { name: "CURLY BRACKET EXTENSION", value: "\u23AA", codepoint: 9130 }, { name: "RIGHT CURLY BRACKET UPPER HOOK", value: "\u23AB", codepoint: 9131 }, { name: "RIGHT CURLY BRACKET MIDDLE PIECE", value: "\u23AC", codepoint: 9132 }, { name: "RIGHT CURLY BRACKET LOWER HOOK", value: "\u23AD", codepoint: 9133 }, { name: "INTEGRAL EXTENSION", value: "\u23AE", codepoint: 9134 }, { name: "HORIZONTAL LINE EXTENSION", value: "\u23AF", codepoint: 9135 }, { name: "UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION", value: "\u23B0", codepoint: 9136 }, { name: "UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION", value: "\u23B1", codepoint: 9137 }, { name: "SUMMATION TOP", value: "\u23B2", codepoint: 9138 }, { name: "SUMMATION BOTTOM", value: "\u23B3", codepoint: 9139 }, { name: "TOP SQUARE BRACKET", value: "\u23B4", codepoint: 9140 }, { name: "BOTTOM SQUARE BRACKET", value: "\u23B5", codepoint: 9141 }, { name: "BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET", value: "\u23B6", codepoint: 9142 }, { name: "RADICAL SYMBOL BOTTOM", value: "\u23B7", codepoint: 9143 }, { name: "LEFT VERTICAL BOX LINE", value: "\u23B8", codepoint: 9144 }, { name: "RIGHT VERTICAL BOX LINE", value: "\u23B9", codepoint: 9145 }, { name: "HORIZONTAL SCAN LINE-1", value: "\u23BA", codepoint: 9146 }, { name: "HORIZONTAL SCAN LINE-3", value: "\u23BB", codepoint: 9147 }, { name: "HORIZONTAL SCAN LINE-7", value: "\u23BC", codepoint: 9148 }, { name: "HORIZONTAL SCAN LINE-9", value: "\u23BD", codepoint: 9149 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT", value: "\u23BE", codepoint: 9150 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT", value: "\u23BF", codepoint: 9151 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE", value: "\u23C0", codepoint: 9152 }, { name: "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE", value: "\u23C1", codepoint: 9153 }, { name: "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE", value: "\u23C2", codepoint: 9154 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE", value: "\u23C3", codepoint: 9155 }, { name: "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE", value: "\u23C4", codepoint: 9156 }, { name: "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE", value: "\u23C5", codepoint: 9157 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE", value: "\u23C6", codepoint: 9158 }, { name: "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE", value: "\u23C7", codepoint: 9159 }, { name: "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE", value: "\u23C8", codepoint: 9160 }, { name: "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL", value: "\u23C9", codepoint: 9161 }, { name: "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL", value: "\u23CA", codepoint: 9162 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT", value: "\u23CB", codepoint: 9163 }, { name: "DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT", value: "\u23CC", codepoint: 9164 }, { name: "SQUARE FOOT", value: "\u23CD", codepoint: 9165 }, { name: "RETURN SYMBOL", value: "\u23CE", codepoint: 9166 }, { name: "VERTICAL LINE EXTENSION", value: "\u23D0", codepoint: 9168 }, { name: "METRICAL BREVE", value: "\u23D1", codepoint: 9169 }, { name: "METRICAL LONG OVER SHORT", value: "\u23D2", codepoint: 9170 }, { name: "METRICAL SHORT OVER LONG", value: "\u23D3", codepoint: 9171 }, { name: "METRICAL LONG OVER TWO SHORTS", value: "\u23D4", codepoint: 9172 }, { name: "METRICAL TWO SHORTS OVER LONG", value: "\u23D5", codepoint: 9173 }, { name: "METRICAL TWO SHORTS JOINED", value: "\u23D6", codepoint: 9174 }, { name: "METRICAL TRISEME", value: "\u23D7", codepoint: 9175 }, { name: "METRICAL TETRASEME", value: "\u23D8", codepoint: 9176 }, { name: "METRICAL PENTASEME", value: "\u23D9", codepoint: 9177 }, { name: "EARTH GROUND", value: "\u23DA", codepoint: 9178 }, { name: "FUSE", value: "\u23DB", codepoint: 9179 }, { name: "TOP PARENTHESIS", value: "\u23DC", codepoint: 9180 }, { name: "BOTTOM PARENTHESIS", value: "\u23DD", codepoint: 9181 }, { name: "TOP CURLY BRACKET", value: "\u23DE", codepoint: 9182 }, { name: "BOTTOM CURLY BRACKET", value: "\u23DF", codepoint: 9183 }, { name: "TOP TORTOISE SHELL BRACKET", value: "\u23E0", codepoint: 9184 }, { name: "BOTTOM TORTOISE SHELL BRACKET", value: "\u23E1", codepoint: 9185 }, { name: "WHITE TRAPEZIUM", value: "\u23E2", codepoint: 9186 }, { name: "BENZENE RING WITH CIRCLE", value: "\u23E3", codepoint: 9187 }, { name: "STRAIGHTNESS", value: "\u23E4", codepoint: 9188 }, { name: "FLATNESS", value: "\u23E5", codepoint: 9189 }, { name: "AC CURRENT", value: "\u23E6", codepoint: 9190 }, { name: "ELECTRICAL INTERSECTION", value: "\u23E7", codepoint: 9191 } ] }, { name: "Arrows", symbols: [ { name: "UPWARDS QUADRUPLE ARROW", value: "\u27F0", codepoint: 10224 }, { name: "DOWNWARDS QUADRUPLE ARROW", value: "\u27F1", codepoint: 10225 }, { name: "ANTICLOCKWISE GAPPED CIRCLE ARROW", value: "\u27F2", codepoint: 10226 }, { name: "CLOCKWISE GAPPED CIRCLE ARROW", value: "\u27F3", codepoint: 10227 }, { name: "RIGHT ARROW WITH CIRCLED PLUS", value: "\u27F4", codepoint: 10228 }, { name: "LONG LEFTWARDS ARROW", value: "\u27F5", codepoint: 10229 }, { name: "LONG RIGHTWARDS ARROW", value: "\u27F6", codepoint: 10230 }, { name: "LONG LEFT RIGHT ARROW", value: "\u27F7", codepoint: 10231 }, { name: "LONG LEFTWARDS DOUBLE ARROW", value: "\u27F8", codepoint: 10232 }, { name: "LONG RIGHTWARDS DOUBLE ARROW", value: "\u27F9", codepoint: 10233 }, { name: "LONG LEFT RIGHT DOUBLE ARROW", value: "\u27FA", codepoint: 10234 }, { name: "LONG LEFTWARDS ARROW FROM BAR", value: "\u27FB", codepoint: 10235 }, { name: "LONG RIGHTWARDS ARROW FROM BAR", value: "\u27FC", codepoint: 10236 }, { name: "LONG LEFTWARDS DOUBLE ARROW FROM BAR", value: "\u27FD", codepoint: 10237 }, { name: "LONG RIGHTWARDS DOUBLE ARROW FROM BAR", value: "\u27FE", codepoint: 10238 }, { name: "LONG RIGHTWARDS SQUIGGLE ARROW", value: "\u27FF", codepoint: 10239 }, { name: "RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE", value: "\u2900", codepoint: 10496 }, { name: "RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE", value: "\u2901", codepoint: 10497 }, { name: "LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE", value: "\u2902", codepoint: 10498 }, { name: "RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE", value: "\u2903", codepoint: 10499 }, { name: "LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE", value: "\u2904", codepoint: 10500 }, { name: "RIGHTWARDS TWO-HEADED ARROW FROM BAR", value: "\u2905", codepoint: 10501 }, { name: "LEFTWARDS DOUBLE ARROW FROM BAR", value: "\u2906", codepoint: 10502 }, { name: "RIGHTWARDS DOUBLE ARROW FROM BAR", value: "\u2907", codepoint: 10503 }, { name: "DOWNWARDS ARROW WITH HORIZONTAL STROKE", value: "\u2908", codepoint: 10504 }, { name: "UPWARDS ARROW WITH HORIZONTAL STROKE", value: "\u2909", codepoint: 10505 }, { name: "UPWARDS TRIPLE ARROW", value: "\u290A", codepoint: 10506 }, { name: "DOWNWARDS TRIPLE ARROW", value: "\u290B", codepoint: 10507 }, { name: "LEFTWARDS DOUBLE DASH ARROW", value: "\u290C", codepoint: 10508 }, { name: "RIGHTWARDS DOUBLE DASH ARROW", value: "\u290D", codepoint: 10509 }, { name: "LEFTWARDS TRIPLE DASH ARROW", value: "\u290E", codepoint: 10510 }, { name: "RIGHTWARDS TRIPLE DASH ARROW", value: "\u290F", codepoint: 10511 }, { name: "RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW", value: "\u2910", codepoint: 10512 }, { name: "RIGHTWARDS ARROW WITH DOTTED STEM", value: "\u2911", codepoint: 10513 }, { name: "UPWARDS ARROW TO BAR", value: "\u2912", codepoint: 10514 }, { name: "DOWNWARDS ARROW TO BAR", value: "\u2913", codepoint: 10515 }, { name: "RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE", value: "\u2914", codepoint: 10516 }, { name: "RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", value: "\u2915", codepoint: 10517 }, { name: "RIGHTWARDS TWO-HEADED ARROW WITH TAIL", value: "\u2916", codepoint: 10518 }, { name: "RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE", value: "\u2917", codepoint: 10519 }, { name: "RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", value: "\u2918", codepoint: 10520 }, { name: "LEFTWARDS ARROW-TAIL", value: "\u2919", codepoint: 10521 }, { name: "RIGHTWARDS ARROW-TAIL", value: "\u291A", codepoint: 10522 }, { name: "LEFTWARDS DOUBLE ARROW-TAIL", value: "\u291B", codepoint: 10523 }, { name: "RIGHTWARDS DOUBLE ARROW-TAIL", value: "\u291C", codepoint: 10524 }, { name: "LEFTWARDS ARROW TO BLACK DIAMOND", value: "\u291D", codepoint: 10525 }, { name: "RIGHTWARDS ARROW TO BLACK DIAMOND", value: "\u291E", codepoint: 10526 }, { name: "LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND", value: "\u291F", codepoint: 10527 }, { name: "RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND", value: "\u2920", codepoint: 10528 }, { name: "NORTH WEST AND SOUTH EAST ARROW", value: "\u2921", codepoint: 10529 }, { name: "NORTH EAST AND SOUTH WEST ARROW", value: "\u2922", codepoint: 10530 }, { name: "NORTH WEST ARROW WITH HOOK", value: "\u2923", codepoint: 10531 }, { name: "NORTH EAST ARROW WITH HOOK", value: "\u2924", codepoint: 10532 }, { name: "SOUTH EAST ARROW WITH HOOK", value: "\u2925", codepoint: 10533 }, { name: "SOUTH WEST ARROW WITH HOOK", value: "\u2926", codepoint: 10534 }, { name: "NORTH WEST ARROW AND NORTH EAST ARROW", value: "\u2927", codepoint: 10535 }, { name: "NORTH EAST ARROW AND SOUTH EAST ARROW", value: "\u2928", codepoint: 10536 }, { name: "SOUTH EAST ARROW AND SOUTH WEST ARROW", value: "\u2929", codepoint: 10537 }, { name: "SOUTH WEST ARROW AND NORTH WEST ARROW", value: "\u292A", codepoint: 10538 }, { name: "RISING DIAGONAL CROSSING FALLING DIAGONAL", value: "\u292B", codepoint: 10539 }, { name: "FALLING DIAGONAL CROSSING RISING DIAGONAL", value: "\u292C", codepoint: 10540 }, { name: "SOUTH EAST ARROW CROSSING NORTH EAST ARROW", value: "\u292D", codepoint: 10541 }, { name: "NORTH EAST ARROW CROSSING SOUTH EAST ARROW", value: "\u292E", codepoint: 10542 }, { name: "FALLING DIAGONAL CROSSING NORTH EAST ARROW", value: "\u292F", codepoint: 10543 }, { name: "RISING DIAGONAL CROSSING SOUTH EAST ARROW", value: "\u2930", codepoint: 10544 }, { name: "NORTH EAST ARROW CROSSING NORTH WEST ARROW", value: "\u2931", codepoint: 10545 }, { name: "NORTH WEST ARROW CROSSING NORTH EAST ARROW", value: "\u2932", codepoint: 10546 }, { name: "WAVE ARROW POINTING DIRECTLY RIGHT", value: "\u2933", codepoint: 10547 }, { name: "ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS", value: "\u2936", codepoint: 10550 }, { name: "ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS", value: "\u2937", codepoint: 10551 }, { name: "RIGHT-SIDE ARC CLOCKWISE ARROW", value: "\u2938", codepoint: 10552 }, { name: "LEFT-SIDE ARC ANTICLOCKWISE ARROW", value: "\u2939", codepoint: 10553 }, { name: "TOP ARC ANTICLOCKWISE ARROW", value: "\u293A", codepoint: 10554 }, { name: "BOTTOM ARC ANTICLOCKWISE ARROW", value: "\u293B", codepoint: 10555 }, { name: "TOP ARC CLOCKWISE ARROW WITH MINUS", value: "\u293C", codepoint: 10556 }, { name: "TOP ARC ANTICLOCKWISE ARROW WITH PLUS", value: "\u293D", codepoint: 10557 }, { name: "LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW", value: "\u293E", codepoint: 10558 }, { name: "LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW", value: "\u293F", codepoint: 10559 }, { name: "ANTICLOCKWISE CLOSED CIRCLE ARROW", value: "\u2940", codepoint: 10560 }, { name: "CLOCKWISE CLOSED CIRCLE ARROW", value: "\u2941", codepoint: 10561 }, { name: "RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW", value: "\u2942", codepoint: 10562 }, { name: "LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW", value: "\u2943", codepoint: 10563 }, { name: "SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW", value: "\u2944", codepoint: 10564 }, { name: "RIGHTWARDS ARROW WITH PLUS BELOW", value: "\u2945", codepoint: 10565 }, { name: "LEFTWARDS ARROW WITH PLUS BELOW", value: "\u2946", codepoint: 10566 }, { name: "RIGHTWARDS ARROW THROUGH X", value: "\u2947", codepoint: 10567 }, { name: "LEFT RIGHT ARROW THROUGH SMALL CIRCLE", value: "\u2948", codepoint: 10568 }, { name: "UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE", value: "\u2949", codepoint: 10569 }, { name: "LEFT BARB UP RIGHT BARB DOWN HARPOON", value: "\u294A", codepoint: 10570 }, { name: "LEFT BARB DOWN RIGHT BARB UP HARPOON", value: "\u294B", codepoint: 10571 }, { name: "UP BARB RIGHT DOWN BARB LEFT HARPOON", value: "\u294C", codepoint: 10572 }, { name: "UP BARB LEFT DOWN BARB RIGHT HARPOON", value: "\u294D", codepoint: 10573 }, { name: "LEFT BARB UP RIGHT BARB UP HARPOON", value: "\u294E", codepoint: 10574 }, { name: "UP BARB RIGHT DOWN BARB RIGHT HARPOON", value: "\u294F", codepoint: 10575 }, { name: "LEFT BARB DOWN RIGHT BARB DOWN HARPOON", value: "\u2950", codepoint: 10576 }, { name: "UP BARB LEFT DOWN BARB LEFT HARPOON", value: "\u2951", codepoint: 10577 }, { name: "LEFTWARDS HARPOON WITH BARB UP TO BAR", value: "\u2952", codepoint: 10578 }, { name: "RIGHTWARDS HARPOON WITH BARB UP TO BAR", value: "\u2953", codepoint: 10579 }, { name: "UPWARDS HARPOON WITH BARB RIGHT TO BAR", value: "\u2954", codepoint: 10580 }, { name: "DOWNWARDS HARPOON WITH BARB RIGHT TO BAR", value: "\u2955", codepoint: 10581 }, { name: "LEFTWARDS HARPOON WITH BARB DOWN TO BAR", value: "\u2956", codepoint: 10582 }, { name: "RIGHTWARDS HARPOON WITH BARB DOWN TO BAR", value: "\u2957", codepoint: 10583 }, { name: "UPWARDS HARPOON WITH BARB LEFT TO BAR", value: "\u2958", codepoint: 10584 }, { name: "DOWNWARDS HARPOON WITH BARB LEFT TO BAR", value: "\u2959", codepoint: 10585 }, { name: "LEFTWARDS HARPOON WITH BARB UP FROM BAR", value: "\u295A", codepoint: 10586 }, { name: "RIGHTWARDS HARPOON WITH BARB UP FROM BAR", value: "\u295B", codepoint: 10587 }, { name: "UPWARDS HARPOON WITH BARB RIGHT FROM BAR", value: "\u295C", codepoint: 10588 }, { name: "DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR", value: "\u295D", codepoint: 10589 }, { name: "LEFTWARDS HARPOON WITH BARB DOWN FROM BAR", value: "\u295E", codepoint: 10590 }, { name: "RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR", value: "\u295F", codepoint: 10591 }, { name: "UPWARDS HARPOON WITH BARB LEFT FROM BAR", value: "\u2960", codepoint: 10592 }, { name: "DOWNWARDS HARPOON WITH BARB LEFT FROM BAR", value: "\u2961", codepoint: 10593 }, { name: "LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN", value: "\u2962", codepoint: 10594 }, { name: "UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT", value: "\u2963", codepoint: 10595 }, { name: "RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN", value: "\u2964", codepoint: 10596 }, { name: "DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT", value: "\u2965", codepoint: 10597 }, { name: "LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP", value: "\u2966", codepoint: 10598 }, { name: "LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN", value: "\u2967", codepoint: 10599 }, { name: "RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP", value: "\u2968", codepoint: 10600 }, { name: "RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN", value: "\u2969", codepoint: 10601 }, { name: "LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH", value: "\u296A", codepoint: 10602 }, { name: "LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH", value: "\u296B", codepoint: 10603 }, { name: "RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH", value: "\u296C", codepoint: 10604 }, { name: "RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH", value: "\u296D", codepoint: 10605 }, { name: "UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT", value: "\u296E", codepoint: 10606 }, { name: "DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT", value: "\u296F", codepoint: 10607 }, { name: "RIGHT DOUBLE ARROW WITH ROUNDED HEAD", value: "\u2970", codepoint: 10608 }, { name: "EQUALS SIGN ABOVE RIGHTWARDS ARROW", value: "\u2971", codepoint: 10609 }, { name: "TILDE OPERATOR ABOVE RIGHTWARDS ARROW", value: "\u2972", codepoint: 10610 }, { name: "LEFTWARDS ARROW ABOVE TILDE OPERATOR", value: "\u2973", codepoint: 10611 }, { name: "RIGHTWARDS ARROW ABOVE TILDE OPERATOR", value: "\u2974", codepoint: 10612 }, { name: "RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO", value: "\u2975", codepoint: 10613 }, { name: "LESS-THAN ABOVE LEFTWARDS ARROW", value: "\u2976", codepoint: 10614 }, { name: "LEFTWARDS ARROW THROUGH LESS-THAN", value: "\u2977", codepoint: 10615 }, { name: "GREATER-THAN ABOVE RIGHTWARDS ARROW", value: "\u2978", codepoint: 10616 }, { name: "SUBSET ABOVE RIGHTWARDS ARROW", value: "\u2979", codepoint: 10617 }, { name: "LEFTWARDS ARROW THROUGH SUBSET", value: "\u297A", codepoint: 10618 }, { name: "SUPERSET ABOVE LEFTWARDS ARROW", value: "\u297B", codepoint: 10619 }, { name: "LEFT FISH TAIL", value: "\u297C", codepoint: 10620 }, { name: "RIGHT FISH TAIL", value: "\u297D", codepoint: 10621 }, { name: "UP FISH TAIL", value: "\u297E", codepoint: 10622 }, { name: "DOWN FISH TAIL", value: "\u297F", codepoint: 10623 }, { name: "NORTH EAST WHITE ARROW", value: "\u2B00", codepoint: 11008 }, { name: "NORTH WEST WHITE ARROW", value: "\u2B01", codepoint: 11009 }, { name: "SOUTH EAST WHITE ARROW", value: "\u2B02", codepoint: 11010 }, { name: "SOUTH WEST WHITE ARROW", value: "\u2B03", codepoint: 11011 }, { name: "LEFT RIGHT WHITE ARROW", value: "\u2B04", codepoint: 11012 }, { name: "NORTH EAST BLACK ARROW", value: "\u2B08", codepoint: 11016 }, { name: "NORTH WEST BLACK ARROW", value: "\u2B09", codepoint: 11017 }, { name: "SOUTH EAST BLACK ARROW", value: "\u2B0A", codepoint: 11018 }, { name: "SOUTH WEST BLACK ARROW", value: "\u2B0B", codepoint: 11019 }, { name: "LEFT RIGHT BLACK ARROW", value: "\u2B0C", codepoint: 11020 }, { name: "UP DOWN BLACK ARROW", value: "\u2B0D", codepoint: 11021 }, { name: "RIGHTWARDS ARROW WITH TIP DOWNWARDS", value: "\u2B0E", codepoint: 11022 }, { name: "RIGHTWARDS ARROW WITH TIP UPWARDS", value: "\u2B0F", codepoint: 11023 }, { name: "LEFTWARDS ARROW WITH TIP DOWNWARDS", value: "\u2B10", codepoint: 11024 }, { name: "LEFTWARDS ARROW WITH TIP UPWARDS", value: "\u2B11", codepoint: 11025 }, { name: "SQUARE WITH TOP HALF BLACK", value: "\u2B12", codepoint: 11026 }, { name: "SQUARE WITH BOTTOM HALF BLACK", value: "\u2B13", codepoint: 11027 }, { name: "SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK", value: "\u2B14", codepoint: 11028 }, { name: "SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK", value: "\u2B15", codepoint: 11029 }, { name: "DIAMOND WITH LEFT HALF BLACK", value: "\u2B16", codepoint: 11030 }, { name: "DIAMOND WITH RIGHT HALF BLACK", value: "\u2B17", codepoint: 11031 }, { name: "DIAMOND WITH TOP HALF BLACK", value: "\u2B18", codepoint: 11032 }, { name: "DIAMOND WITH BOTTOM HALF BLACK", value: "\u2B19", codepoint: 11033 }, { name: "DOTTED SQUARE", value: "\u2B1A", codepoint: 11034 }, { name: "BLACK VERY SMALL SQUARE", value: "\u2B1D", codepoint: 11037 }, { name: "WHITE VERY SMALL SQUARE", value: "\u2B1E", codepoint: 11038 }, { name: "BLACK PENTAGON", value: "\u2B1F", codepoint: 11039 }, { name: "WHITE PENTAGON", value: "\u2B20", codepoint: 11040 }, { name: "WHITE HEXAGON", value: "\u2B21", codepoint: 11041 }, { name: "BLACK HEXAGON", value: "\u2B22", codepoint: 11042 }, { name: "HORIZONTAL BLACK HEXAGON", value: "\u2B23", codepoint: 11043 }, { name: "BLACK LARGE CIRCLE", value: "\u2B24", codepoint: 11044 }, { name: "BLACK MEDIUM DIAMOND", value: "\u2B25", codepoint: 11045 }, { name: "WHITE MEDIUM DIAMOND", value: "\u2B26", codepoint: 11046 }, { name: "BLACK MEDIUM LOZENGE", value: "\u2B27", codepoint: 11047 }, { name: "WHITE MEDIUM LOZENGE", value: "\u2B28", codepoint: 11048 }, { name: "BLACK SMALL DIAMOND", value: "\u2B29", codepoint: 11049 }, { name: "BLACK SMALL LOZENGE", value: "\u2B2A", codepoint: 11050 }, { name: "WHITE SMALL LOZENGE", value: "\u2B2B", codepoint: 11051 }, { name: "BLACK HORIZONTAL ELLIPSE", value: "\u2B2C", codepoint: 11052 }, { name: "WHITE HORIZONTAL ELLIPSE", value: "\u2B2D", codepoint: 11053 }, { name: "BLACK VERTICAL ELLIPSE", value: "\u2B2E", codepoint: 11054 }, { name: "WHITE VERTICAL ELLIPSE", value: "\u2B2F", codepoint: 11055 }, { name: "LEFT ARROW WITH SMALL CIRCLE", value: "\u2B30", codepoint: 11056 }, { name: "THREE LEFTWARDS ARROWS", value: "\u2B31", codepoint: 11057 }, { name: "LEFT ARROW WITH CIRCLED PLUS", value: "\u2B32", codepoint: 11058 }, { name: "LONG LEFTWARDS SQUIGGLE ARROW", value: "\u2B33", codepoint: 11059 }, { name: "LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE", value: "\u2B34", codepoint: 11060 }, { name: "LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE", value: "\u2B35", codepoint: 11061 }, { name: "LEFTWARDS TWO-HEADED ARROW FROM BAR", value: "\u2B36", codepoint: 11062 }, { name: "LEFTWARDS TWO-HEADED TRIPLE DASH ARROW", value: "\u2B37", codepoint: 11063 }, { name: "LEFTWARDS ARROW WITH DOTTED STEM", value: "\u2B38", codepoint: 11064 }, { name: "LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE", value: "\u2B39", codepoint: 11065 }, { name: "LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", value: "\u2B3A", codepoint: 11066 }, { name: "LEFTWARDS TWO-HEADED ARROW WITH TAIL", value: "\u2B3B", codepoint: 11067 }, { name: "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE", value: "\u2B3C", codepoint: 11068 }, { name: "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", value: "\u2B3D", codepoint: 11069 }, { name: "LEFTWARDS ARROW THROUGH X", value: "\u2B3E", codepoint: 11070 }, { name: "WAVE ARROW POINTING DIRECTLY LEFT", value: "\u2B3F", codepoint: 11071 }, { name: "EQUALS SIGN ABOVE LEFTWARDS ARROW", value: "\u2B40", codepoint: 11072 }, { name: "REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW", value: "\u2B41", codepoint: 11073 }, { name: "LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO", value: "\u2B42", codepoint: 11074 }, { name: "RIGHTWARDS ARROW THROUGH GREATER-THAN", value: "\u2B43", codepoint: 11075 }, { name: "RIGHTWARDS ARROW THROUGH SUPERSET", value: "\u2B44", codepoint: 11076 }, { name: "LEFTWARDS QUADRUPLE ARROW", value: "\u2B45", codepoint: 11077 }, { name: "RIGHTWARDS QUADRUPLE ARROW", value: "\u2B46", codepoint: 11078 }, { name: "REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW", value: "\u2B47", codepoint: 11079 }, { name: "RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO", value: "\u2B48", codepoint: 11080 }, { name: "TILDE OPERATOR ABOVE LEFTWARDS ARROW", value: "\u2B49", codepoint: 11081 }, { name: "LEFTWARDS ARROW ABOVE ALMOST EQUAL TO", value: "\u2B4A", codepoint: 11082 }, { name: "LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR", value: "\u2B4B", codepoint: 11083 }, { name: "RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR", value: "\u2B4C", codepoint: 11084 }, { name: "BLACK SMALL STAR", value: "\u2B51", codepoint: 11089 }, { name: "WHITE SMALL STAR", value: "\u2B52", codepoint: 11090 }, { name: "BLACK RIGHT-POINTING PENTAGON", value: "\u2B53", codepoint: 11091 }, { name: "WHITE RIGHT-POINTING PENTAGON", value: "\u2B54", codepoint: 11092 } ] }, { name: "Ancient", symbols: [ { name: "GREEK ACROPHONIC ATTIC ONE QUARTER", value: "\u{10140}", codepoint: 65856 }, { name: "GREEK ACROPHONIC ATTIC ONE HALF", value: "\u{10141}", codepoint: 65857 }, { name: "GREEK ACROPHONIC ATTIC ONE DRACHMA", value: "\u{10142}", codepoint: 65858 }, { name: "GREEK ACROPHONIC ATTIC FIVE", value: "\u{10143}", codepoint: 65859 }, { name: "GREEK ACROPHONIC ATTIC FIVE THOUSAND", value: "\u{10146}", codepoint: 65862 }, { name: "GREEK ACROPHONIC ATTIC FIFTY THOUSAND", value: "\u{10147}", codepoint: 65863 }, { name: "GREEK ACROPHONIC ATTIC FIVE TALENTS", value: "\u{10148}", codepoint: 65864 }, { name: "GREEK ACROPHONIC ATTIC TEN TALENTS", value: "\u{10149}", codepoint: 65865 }, { name: "GREEK ACROPHONIC ATTIC FIFTY TALENTS", value: "\u{1014A}", codepoint: 65866 }, { name: "GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS", value: "\u{1014B}", codepoint: 65867 }, { name: "GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS", value: "\u{1014C}", codepoint: 65868 }, { name: "GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS", value: "\u{1014D}", codepoint: 65869 }, { name: "GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS", value: "\u{1014E}", codepoint: 65870 }, { name: "GREEK ACROPHONIC ATTIC FIVE STATERS", value: "\u{1014F}", codepoint: 65871 }, { name: "GREEK ACROPHONIC ATTIC TEN STATERS", value: "\u{10150}", codepoint: 65872 }, { name: "GREEK ACROPHONIC ATTIC FIFTY STATERS", value: "\u{10151}", codepoint: 65873 }, { name: "GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS", value: "\u{10152}", codepoint: 65874 }, { name: "GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS", value: "\u{10153}", codepoint: 65875 }, { name: "GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS", value: "\u{10154}", codepoint: 65876 }, { name: "GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS", value: "\u{10155}", codepoint: 65877 }, { name: "GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS", value: "\u{10156}", codepoint: 65878 }, { name: "GREEK ACROPHONIC ATTIC TEN MNAS", value: "\u{10157}", codepoint: 65879 }, { name: "GREEK ACROPHONIC HERAEUM ONE PLETHRON", value: "\u{10158}", codepoint: 65880 }, { name: "GREEK ACROPHONIC THESPIAN ONE", value: "\u{10159}", codepoint: 65881 }, { name: "GREEK ACROPHONIC HERMIONIAN ONE", value: "\u{1015A}", codepoint: 65882 }, { name: "GREEK ACROPHONIC EPIDAUREAN TWO", value: "\u{1015B}", codepoint: 65883 }, { name: "GREEK ACROPHONIC THESPIAN TWO", value: "\u{1015C}", codepoint: 65884 }, { name: "GREEK ACROPHONIC CYRENAIC TWO DRACHMAS", value: "\u{1015D}", codepoint: 65885 }, { name: "GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS", value: "\u{1015E}", codepoint: 65886 }, { name: "GREEK ACROPHONIC TROEZENIAN FIVE", value: "\u{1015F}", codepoint: 65887 }, { name: "GREEK ACROPHONIC TROEZENIAN TEN", value: "\u{10160}", codepoint: 65888 }, { name: "GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM", value: "\u{10161}", codepoint: 65889 }, { name: "GREEK ACROPHONIC HERMIONIAN TEN", value: "\u{10162}", codepoint: 65890 }, { name: "GREEK ACROPHONIC MESSENIAN TEN", value: "\u{10163}", codepoint: 65891 }, { name: "GREEK ACROPHONIC THESPIAN TEN", value: "\u{10164}", codepoint: 65892 }, { name: "GREEK ACROPHONIC THESPIAN THIRTY", value: "\u{10165}", codepoint: 65893 }, { name: "GREEK ACROPHONIC TROEZENIAN FIFTY", value: "\u{10166}", codepoint: 65894 }, { name: "GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM", value: "\u{10167}", codepoint: 65895 }, { name: "GREEK ACROPHONIC HERMIONIAN FIFTY", value: "\u{10168}", codepoint: 65896 }, { name: "GREEK ACROPHONIC THESPIAN FIFTY", value: "\u{10169}", codepoint: 65897 }, { name: "GREEK ACROPHONIC THESPIAN ONE HUNDRED", value: "\u{1016A}", codepoint: 65898 }, { name: "GREEK ACROPHONIC THESPIAN THREE HUNDRED", value: "\u{1016B}", codepoint: 65899 }, { name: "GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED", value: "\u{1016C}", codepoint: 65900 }, { name: "GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED", value: "\u{1016D}", codepoint: 65901 }, { name: "GREEK ACROPHONIC THESPIAN FIVE HUNDRED", value: "\u{1016E}", codepoint: 65902 }, { name: "GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED", value: "\u{1016F}", codepoint: 65903 }, { name: "GREEK ACROPHONIC NAXIAN FIVE HUNDRED", value: "\u{10170}", codepoint: 65904 }, { name: "GREEK ACROPHONIC THESPIAN ONE THOUSAND", value: "\u{10171}", codepoint: 65905 }, { name: "GREEK ACROPHONIC THESPIAN FIVE THOUSAND", value: "\u{10172}", codepoint: 65906 }, { name: "GREEK ACROPHONIC DELPHIC FIVE MNAS", value: "\u{10173}", codepoint: 65907 }, { name: "GREEK ACROPHONIC STRATIAN FIFTY MNAS", value: "\u{10174}", codepoint: 65908 }, { name: "GREEK ONE HALF SIGN", value: "\u{10175}", codepoint: 65909 }, { name: "GREEK YEAR SIGN", value: "\u{10179}", codepoint: 65913 }, { name: "GREEK TALENT SIGN", value: "\u{1017A}", codepoint: 65914 }, { name: "GREEK DRACHMA SIGN", value: "\u{1017B}", codepoint: 65915 }, { name: "GREEK OBOL SIGN", value: "\u{1017C}", codepoint: 65916 }, { name: "GREEK TWO OBOLS SIGN", value: "\u{1017D}", codepoint: 65917 }, { name: "GREEK THREE OBOLS SIGN", value: "\u{1017E}", codepoint: 65918 }, { name: "GREEK FOUR OBOLS SIGN", value: "\u{1017F}", codepoint: 65919 }, { name: "GREEK FIVE OBOLS SIGN", value: "\u{10180}", codepoint: 65920 }, { name: "GREEK METRETES SIGN", value: "\u{10181}", codepoint: 65921 }, { name: "GREEK KYATHOS BASE SIGN", value: "\u{10182}", codepoint: 65922 }, { name: "GREEK OUNKIA SIGN", value: "\u{10184}", codepoint: 65924 }, { name: "GREEK XESTES SIGN", value: "\u{10185}", codepoint: 65925 }, { name: "GREEK ARTABE SIGN", value: "\u{10186}", codepoint: 65926 }, { name: "GREEK ZERO SIGN", value: "\u{1018A}", codepoint: 65930 }, { name: "ROMAN SEXTANS SIGN", value: "\u{10190}", codepoint: 65936 }, { name: "ROMAN UNCIA SIGN", value: "\u{10191}", codepoint: 65937 }, { name: "ROMAN SEMUNCIA SIGN", value: "\u{10192}", codepoint: 65938 }, { name: "ROMAN SEXTULA SIGN", value: "\u{10193}", codepoint: 65939 }, { name: "ROMAN DIMIDIA SEXTULA SIGN", value: "\u{10194}", codepoint: 65940 }, { name: "ROMAN SILIQUA SIGN", value: "\u{10195}", codepoint: 65941 }, { name: "ROMAN DENARIUS SIGN", value: "\u{10196}", codepoint: 65942 }, { name: "ROMAN QUINARIUS SIGN", value: "\u{10197}", codepoint: 65943 }, { name: "ROMAN SESTERTIUS SIGN", value: "\u{10198}", codepoint: 65944 }, { name: "ROMAN DUPONDIUS SIGN", value: "\u{10199}", codepoint: 65945 }, { name: "ROMAN AS SIGN", value: "\u{1019A}", codepoint: 65946 }, { name: "ROMAN CENTURIAL SIGN", value: "\u{1019B}", codepoint: 65947 } ] }, { name: "Braille", symbols: [ { name: "BRAILLE PATTERN BLANK", value: "\u2800", codepoint: 10240 }, { name: "BRAILLE PATTERN DOTS-1", value: "\u2801", codepoint: 10241 }, { name: "BRAILLE PATTERN DOTS-2", value: "\u2802", codepoint: 10242 }, { name: "BRAILLE PATTERN DOTS-12", value: "\u2803", codepoint: 10243 }, { name: "BRAILLE PATTERN DOTS-3", value: "\u2804", codepoint: 10244 }, { name: "BRAILLE PATTERN DOTS-13", value: "\u2805", codepoint: 10245 }, { name: "BRAILLE PATTERN DOTS-23", value: "\u2806", codepoint: 10246 }, { name: "BRAILLE PATTERN DOTS-123", value: "\u2807", codepoint: 10247 }, { name: "BRAILLE PATTERN DOTS-4", value: "\u2808", codepoint: 10248 }, { name: "BRAILLE PATTERN DOTS-14", value: "\u2809", codepoint: 10249 }, { name: "BRAILLE PATTERN DOTS-24", value: "\u280A", codepoint: 10250 }, { name: "BRAILLE PATTERN DOTS-124", value: "\u280B", codepoint: 10251 }, { name: "BRAILLE PATTERN DOTS-34", value: "\u280C", codepoint: 10252 }, { name: "BRAILLE PATTERN DOTS-134", value: "\u280D", codepoint: 10253 }, { name: "BRAILLE PATTERN DOTS-234", value: "\u280E", codepoint: 10254 }, { name: "BRAILLE PATTERN DOTS-1234", value: "\u280F", codepoint: 10255 }, { name: "BRAILLE PATTERN DOTS-5", value: "\u2810", codepoint: 10256 }, { name: "BRAILLE PATTERN DOTS-15", value: "\u2811", codepoint: 10257 }, { name: "BRAILLE PATTERN DOTS-25", value: "\u2812", codepoint: 10258 }, { name: "BRAILLE PATTERN DOTS-125", value: "\u2813", codepoint: 10259 }, { name: "BRAILLE PATTERN DOTS-35", value: "\u2814", codepoint: 10260 }, { name: "BRAILLE PATTERN DOTS-135", value: "\u2815", codepoint: 10261 }, { name: "BRAILLE PATTERN DOTS-235", value: "\u2816", codepoint: 10262 }, { name: "BRAILLE PATTERN DOTS-1235", value: "\u2817", codepoint: 10263 }, { name: "BRAILLE PATTERN DOTS-45", value: "\u2818", codepoint: 10264 }, { name: "BRAILLE PATTERN DOTS-145", value: "\u2819", codepoint: 10265 }, { name: "BRAILLE PATTERN DOTS-245", value: "\u281A", codepoint: 10266 }, { name: "BRAILLE PATTERN DOTS-1245", value: "\u281B", codepoint: 10267 }, { name: "BRAILLE PATTERN DOTS-345", value: "\u281C", codepoint: 10268 }, { name: "BRAILLE PATTERN DOTS-1345", value: "\u281D", codepoint: 10269 }, { name: "BRAILLE PATTERN DOTS-2345", value: "\u281E", codepoint: 10270 }, { name: "BRAILLE PATTERN DOTS-12345", value: "\u281F", codepoint: 10271 }, { name: "BRAILLE PATTERN DOTS-6", value: "\u2820", codepoint: 10272 }, { name: "BRAILLE PATTERN DOTS-16", value: "\u2821", codepoint: 10273 }, { name: "BRAILLE PATTERN DOTS-26", value: "\u2822", codepoint: 10274 }, { name: "BRAILLE PATTERN DOTS-126", value: "\u2823", codepoint: 10275 }, { name: "BRAILLE PATTERN DOTS-36", value: "\u2824", codepoint: 10276 }, { name: "BRAILLE PATTERN DOTS-136", value: "\u2825", codepoint: 10277 }, { name: "BRAILLE PATTERN DOTS-236", value: "\u2826", codepoint: 10278 }, { name: "BRAILLE PATTERN DOTS-1236", value: "\u2827", codepoint: 10279 }, { name: "BRAILLE PATTERN DOTS-46", value: "\u2828", codepoint: 10280 }, { name: "BRAILLE PATTERN DOTS-146", value: "\u2829", codepoint: 10281 }, { name: "BRAILLE PATTERN DOTS-246", value: "\u282A", codepoint: 10282 }, { name: "BRAILLE PATTERN DOTS-1246", value: "\u282B", codepoint: 10283 }, { name: "BRAILLE PATTERN DOTS-346", value: "\u282C", codepoint: 10284 }, { name: "BRAILLE PATTERN DOTS-1346", value: "\u282D", codepoint: 10285 }, { name: "BRAILLE PATTERN DOTS-2346", value: "\u282E", codepoint: 10286 }, { name: "BRAILLE PATTERN DOTS-12346", value: "\u282F", codepoint: 10287 }, { name: "BRAILLE PATTERN DOTS-56", value: "\u2830", codepoint: 10288 }, { name: "BRAILLE PATTERN DOTS-156", value: "\u2831", codepoint: 10289 }, { name: "BRAILLE PATTERN DOTS-256", value: "\u2832", codepoint: 10290 }, { name: "BRAILLE PATTERN DOTS-1256", value: "\u2833", codepoint: 10291 }, { name: "BRAILLE PATTERN DOTS-356", value: "\u2834", codepoint: 10292 }, { name: "BRAILLE PATTERN DOTS-1356", value: "\u2835", codepoint: 10293 }, { name: "BRAILLE PATTERN DOTS-2356", value: "\u2836", codepoint: 10294 }, { name: "BRAILLE PATTERN DOTS-12356", value: "\u2837", codepoint: 10295 }, { name: "BRAILLE PATTERN DOTS-456", value: "\u2838", codepoint: 10296 }, { name: "BRAILLE PATTERN DOTS-1456", value: "\u2839", codepoint: 10297 }, { name: "BRAILLE PATTERN DOTS-2456", value: "\u283A", codepoint: 10298 }, { name: "BRAILLE PATTERN DOTS-12456", value: "\u283B", codepoint: 10299 }, { name: "BRAILLE PATTERN DOTS-3456", value: "\u283C", codepoint: 10300 }, { name: "BRAILLE PATTERN DOTS-13456", value: "\u283D", codepoint: 10301 }, { name: "BRAILLE PATTERN DOTS-23456", value: "\u283E", codepoint: 10302 }, { name: "BRAILLE PATTERN DOTS-123456", value: "\u283F", codepoint: 10303 }, { name: "BRAILLE PATTERN DOTS-7", value: "\u2840", codepoint: 10304 }, { name: "BRAILLE PATTERN DOTS-17", value: "\u2841", codepoint: 10305 }, { name: "BRAILLE PATTERN DOTS-27", value: "\u2842", codepoint: 10306 }, { name: "BRAILLE PATTERN DOTS-127", value: "\u2843", codepoint: 10307 }, { name: "BRAILLE PATTERN DOTS-37", value: "\u2844", codepoint: 10308 }, { name: "BRAILLE PATTERN DOTS-137", value: "\u2845", codepoint: 10309 }, { name: "BRAILLE PATTERN DOTS-237", value: "\u2846", codepoint: 10310 }, { name: "BRAILLE PATTERN DOTS-1237", value: "\u2847", codepoint: 10311 }, { name: "BRAILLE PATTERN DOTS-47", value: "\u2848", codepoint: 10312 }, { name: "BRAILLE PATTERN DOTS-147", value: "\u2849", codepoint: 10313 }, { name: "BRAILLE PATTERN DOTS-247", value: "\u284A", codepoint: 10314 }, { name: "BRAILLE PATTERN DOTS-1247", value: "\u284B", codepoint: 10315 }, { name: "BRAILLE PATTERN DOTS-347", value: "\u284C", codepoint: 10316 }, { name: "BRAILLE PATTERN DOTS-1347", value: "\u284D", codepoint: 10317 }, { name: "BRAILLE PATTERN DOTS-2347", value: "\u284E", codepoint: 10318 }, { name: "BRAILLE PATTERN DOTS-12347", value: "\u284F", codepoint: 10319 }, { name: "BRAILLE PATTERN DOTS-57", value: "\u2850", codepoint: 10320 }, { name: "BRAILLE PATTERN DOTS-157", value: "\u2851", codepoint: 10321 }, { name: "BRAILLE PATTERN DOTS-257", value: "\u2852", codepoint: 10322 }, { name: "BRAILLE PATTERN DOTS-1257", value: "\u2853", codepoint: 10323 }, { name: "BRAILLE PATTERN DOTS-357", value: "\u2854", codepoint: 10324 }, { name: "BRAILLE PATTERN DOTS-1357", value: "\u2855", codepoint: 10325 }, { name: "BRAILLE PATTERN DOTS-2357", value: "\u2856", codepoint: 10326 }, { name: "BRAILLE PATTERN DOTS-12357", value: "\u2857", codepoint: 10327 }, { name: "BRAILLE PATTERN DOTS-457", value: "\u2858", codepoint: 10328 }, { name: "BRAILLE PATTERN DOTS-1457", value: "\u2859", codepoint: 10329 }, { name: "BRAILLE PATTERN DOTS-2457", value: "\u285A", codepoint: 10330 }, { name: "BRAILLE PATTERN DOTS-12457", value: "\u285B", codepoint: 10331 }, { name: "BRAILLE PATTERN DOTS-3457", value: "\u285C", codepoint: 10332 }, { name: "BRAILLE PATTERN DOTS-13457", value: "\u285D", codepoint: 10333 }, { name: "BRAILLE PATTERN DOTS-23457", value: "\u285E", codepoint: 10334 }, { name: "BRAILLE PATTERN DOTS-123457", value: "\u285F", codepoint: 10335 }, { name: "BRAILLE PATTERN DOTS-67", value: "\u2860", codepoint: 10336 }, { name: "BRAILLE PATTERN DOTS-167", value: "\u2861", codepoint: 10337 }, { name: "BRAILLE PATTERN DOTS-267", value: "\u2862", codepoint: 10338 }, { name: "BRAILLE PATTERN DOTS-1267", value: "\u2863", codepoint: 10339 }, { name: "BRAILLE PATTERN DOTS-367", value: "\u2864", codepoint: 10340 }, { name: "BRAILLE PATTERN DOTS-1367", value: "\u2865", codepoint: 10341 }, { name: "BRAILLE PATTERN DOTS-2367", value: "\u2866", codepoint: 10342 }, { name: "BRAILLE PATTERN DOTS-12367", value: "\u2867", codepoint: 10343 }, { name: "BRAILLE PATTERN DOTS-467", value: "\u2868", codepoint: 10344 }, { name: "BRAILLE PATTERN DOTS-1467", value: "\u2869", codepoint: 10345 }, { name: "BRAILLE PATTERN DOTS-2467", value: "\u286A", codepoint: 10346 }, { name: "BRAILLE PATTERN DOTS-12467", value: "\u286B", codepoint: 10347 }, { name: "BRAILLE PATTERN DOTS-3467", value: "\u286C", codepoint: 10348 }, { name: "BRAILLE PATTERN DOTS-13467", value: "\u286D", codepoint: 10349 }, { name: "BRAILLE PATTERN DOTS-23467", value: "\u286E", codepoint: 10350 }, { name: "BRAILLE PATTERN DOTS-123467", value: "\u286F", codepoint: 10351 }, { name: "BRAILLE PATTERN DOTS-567", value: "\u2870", codepoint: 10352 }, { name: "BRAILLE PATTERN DOTS-1567", value: "\u2871", codepoint: 10353 }, { name: "BRAILLE PATTERN DOTS-2567", value: "\u2872", codepoint: 10354 }, { name: "BRAILLE PATTERN DOTS-12567", value: "\u2873", codepoint: 10355 }, { name: "BRAILLE PATTERN DOTS-3567", value: "\u2874", codepoint: 10356 }, { name: "BRAILLE PATTERN DOTS-13567", value: "\u2875", codepoint: 10357 }, { name: "BRAILLE PATTERN DOTS-23567", value: "\u2876", codepoint: 10358 }, { name: "BRAILLE PATTERN DOTS-123567", value: "\u2877", codepoint: 10359 }, { name: "BRAILLE PATTERN DOTS-4567", value: "\u2878", codepoint: 10360 }, { name: "BRAILLE PATTERN DOTS-14567", value: "\u2879", codepoint: 10361 }, { name: "BRAILLE PATTERN DOTS-24567", value: "\u287A", codepoint: 10362 }, { name: "BRAILLE PATTERN DOTS-124567", value: "\u287B", codepoint: 10363 }, { name: "BRAILLE PATTERN DOTS-34567", value: "\u287C", codepoint: 10364 }, { name: "BRAILLE PATTERN DOTS-134567", value: "\u287D", codepoint: 10365 }, { name: "BRAILLE PATTERN DOTS-234567", value: "\u287E", codepoint: 10366 }, { name: "BRAILLE PATTERN DOTS-1234567", value: "\u287F", codepoint: 10367 }, { name: "BRAILLE PATTERN DOTS-8", value: "\u2880", codepoint: 10368 }, { name: "BRAILLE PATTERN DOTS-18", value: "\u2881", codepoint: 10369 }, { name: "BRAILLE PATTERN DOTS-28", value: "\u2882", codepoint: 10370 }, { name: "BRAILLE PATTERN DOTS-128", value: "\u2883", codepoint: 10371 }, { name: "BRAILLE PATTERN DOTS-38", value: "\u2884", codepoint: 10372 }, { name: "BRAILLE PATTERN DOTS-138", value: "\u2885", codepoint: 10373 }, { name: "BRAILLE PATTERN DOTS-238", value: "\u2886", codepoint: 10374 }, { name: "BRAILLE PATTERN DOTS-1238", value: "\u2887", codepoint: 10375 }, { name: "BRAILLE PATTERN DOTS-48", value: "\u2888", codepoint: 10376 }, { name: "BRAILLE PATTERN DOTS-148", value: "\u2889", codepoint: 10377 }, { name: "BRAILLE PATTERN DOTS-248", value: "\u288A", codepoint: 10378 }, { name: "BRAILLE PATTERN DOTS-1248", value: "\u288B", codepoint: 10379 }, { name: "BRAILLE PATTERN DOTS-348", value: "\u288C", codepoint: 10380 }, { name: "BRAILLE PATTERN DOTS-1348", value: "\u288D", codepoint: 10381 }, { name: "BRAILLE PATTERN DOTS-2348", value: "\u288E", codepoint: 10382 }, { name: "BRAILLE PATTERN DOTS-12348", value: "\u288F", codepoint: 10383 }, { name: "BRAILLE PATTERN DOTS-58", value: "\u2890", codepoint: 10384 }, { name: "BRAILLE PATTERN DOTS-158", value: "\u2891", codepoint: 10385 }, { name: "BRAILLE PATTERN DOTS-258", value: "\u2892", codepoint: 10386 }, { name: "BRAILLE PATTERN DOTS-1258", value: "\u2893", codepoint: 10387 }, { name: "BRAILLE PATTERN DOTS-358", value: "\u2894", codepoint: 10388 }, { name: "BRAILLE PATTERN DOTS-1358", value: "\u2895", codepoint: 10389 }, { name: "BRAILLE PATTERN DOTS-2358", value: "\u2896", codepoint: 10390 }, { name: "BRAILLE PATTERN DOTS-12358", value: "\u2897", codepoint: 10391 }, { name: "BRAILLE PATTERN DOTS-458", value: "\u2898", codepoint: 10392 }, { name: "BRAILLE PATTERN DOTS-1458", value: "\u2899", codepoint: 10393 }, { name: "BRAILLE PATTERN DOTS-2458", value: "\u289A", codepoint: 10394 }, { name: "BRAILLE PATTERN DOTS-12458", value: "\u289B", codepoint: 10395 }, { name: "BRAILLE PATTERN DOTS-3458", value: "\u289C", codepoint: 10396 }, { name: "BRAILLE PATTERN DOTS-13458", value: "\u289D", codepoint: 10397 }, { name: "BRAILLE PATTERN DOTS-23458", value: "\u289E", codepoint: 10398 }, { name: "BRAILLE PATTERN DOTS-123458", value: "\u289F", codepoint: 10399 }, { name: "BRAILLE PATTERN DOTS-68", value: "\u28A0", codepoint: 10400 }, { name: "BRAILLE PATTERN DOTS-168", value: "\u28A1", codepoint: 10401 }, { name: "BRAILLE PATTERN DOTS-268", value: "\u28A2", codepoint: 10402 }, { name: "BRAILLE PATTERN DOTS-1268", value: "\u28A3", codepoint: 10403 }, { name: "BRAILLE PATTERN DOTS-368", value: "\u28A4", codepoint: 10404 }, { name: "BRAILLE PATTERN DOTS-1368", value: "\u28A5", codepoint: 10405 }, { name: "BRAILLE PATTERN DOTS-2368", value: "\u28A6", codepoint: 10406 }, { name: "BRAILLE PATTERN DOTS-12368", value: "\u28A7", codepoint: 10407 }, { name: "BRAILLE PATTERN DOTS-468", value: "\u28A8", codepoint: 10408 }, { name: "BRAILLE PATTERN DOTS-1468", value: "\u28A9", codepoint: 10409 }, { name: "BRAILLE PATTERN DOTS-2468", value: "\u28AA", codepoint: 10410 }, { name: "BRAILLE PATTERN DOTS-12468", value: "\u28AB", codepoint: 10411 }, { name: "BRAILLE PATTERN DOTS-3468", value: "\u28AC", codepoint: 10412 }, { name: "BRAILLE PATTERN DOTS-13468", value: "\u28AD", codepoint: 10413 }, { name: "BRAILLE PATTERN DOTS-23468", value: "\u28AE", codepoint: 10414 }, { name: "BRAILLE PATTERN DOTS-123468", value: "\u28AF", codepoint: 10415 }, { name: "BRAILLE PATTERN DOTS-568", value: "\u28B0", codepoint: 10416 }, { name: "BRAILLE PATTERN DOTS-1568", value: "\u28B1", codepoint: 10417 }, { name: "BRAILLE PATTERN DOTS-2568", value: "\u28B2", codepoint: 10418 }, { name: "BRAILLE PATTERN DOTS-12568", value: "\u28B3", codepoint: 10419 }, { name: "BRAILLE PATTERN DOTS-3568", value: "\u28B4", codepoint: 10420 }, { name: "BRAILLE PATTERN DOTS-13568", value: "\u28B5", codepoint: 10421 }, { name: "BRAILLE PATTERN DOTS-23568", value: "\u28B6", codepoint: 10422 }, { name: "BRAILLE PATTERN DOTS-123568", value: "\u28B7", codepoint: 10423 }, { name: "BRAILLE PATTERN DOTS-4568", value: "\u28B8", codepoint: 10424 }, { name: "BRAILLE PATTERN DOTS-14568", value: "\u28B9", codepoint: 10425 }, { name: "BRAILLE PATTERN DOTS-24568", value: "\u28BA", codepoint: 10426 }, { name: "BRAILLE PATTERN DOTS-124568", value: "\u28BB", codepoint: 10427 }, { name: "BRAILLE PATTERN DOTS-34568", value: "\u28BC", codepoint: 10428 }, { name: "BRAILLE PATTERN DOTS-134568", value: "\u28BD", codepoint: 10429 }, { name: "BRAILLE PATTERN DOTS-234568", value: "\u28BE", codepoint: 10430 }, { name: "BRAILLE PATTERN DOTS-1234568", value: "\u28BF", codepoint: 10431 }, { name: "BRAILLE PATTERN DOTS-78", value: "\u28C0", codepoint: 10432 }, { name: "BRAILLE PATTERN DOTS-178", value: "\u28C1", codepoint: 10433 }, { name: "BRAILLE PATTERN DOTS-278", value: "\u28C2", codepoint: 10434 }, { name: "BRAILLE PATTERN DOTS-1278", value: "\u28C3", codepoint: 10435 }, { name: "BRAILLE PATTERN DOTS-378", value: "\u28C4", codepoint: 10436 }, { name: "BRAILLE PATTERN DOTS-1378", value: "\u28C5", codepoint: 10437 }, { name: "BRAILLE PATTERN DOTS-2378", value: "\u28C6", codepoint: 10438 }, { name: "BRAILLE PATTERN DOTS-12378", value: "\u28C7", codepoint: 10439 }, { name: "BRAILLE PATTERN DOTS-478", value: "\u28C8", codepoint: 10440 }, { name: "BRAILLE PATTERN DOTS-1478", value: "\u28C9", codepoint: 10441 }, { name: "BRAILLE PATTERN DOTS-2478", value: "\u28CA", codepoint: 10442 }, { name: "BRAILLE PATTERN DOTS-12478", value: "\u28CB", codepoint: 10443 }, { name: "BRAILLE PATTERN DOTS-3478", value: "\u28CC", codepoint: 10444 }, { name: "BRAILLE PATTERN DOTS-13478", value: "\u28CD", codepoint: 10445 }, { name: "BRAILLE PATTERN DOTS-23478", value: "\u28CE", codepoint: 10446 }, { name: "BRAILLE PATTERN DOTS-123478", value: "\u28CF", codepoint: 10447 }, { name: "BRAILLE PATTERN DOTS-578", value: "\u28D0", codepoint: 10448 }, { name: "BRAILLE PATTERN DOTS-1578", value: "\u28D1", codepoint: 10449 }, { name: "BRAILLE PATTERN DOTS-2578", value: "\u28D2", codepoint: 10450 }, { name: "BRAILLE PATTERN DOTS-12578", value: "\u28D3", codepoint: 10451 }, { name: "BRAILLE PATTERN DOTS-3578", value: "\u28D4", codepoint: 10452 }, { name: "BRAILLE PATTERN DOTS-13578", value: "\u28D5", codepoint: 10453 }, { name: "BRAILLE PATTERN DOTS-23578", value: "\u28D6", codepoint: 10454 }, { name: "BRAILLE PATTERN DOTS-123578", value: "\u28D7", codepoint: 10455 }, { name: "BRAILLE PATTERN DOTS-4578", value: "\u28D8", codepoint: 10456 }, { name: "BRAILLE PATTERN DOTS-14578", value: "\u28D9", codepoint: 10457 }, { name: "BRAILLE PATTERN DOTS-24578", value: "\u28DA", codepoint: 10458 }, { name: "BRAILLE PATTERN DOTS-124578", value: "\u28DB", codepoint: 10459 }, { name: "BRAILLE PATTERN DOTS-34578", value: "\u28DC", codepoint: 10460 }, { name: "BRAILLE PATTERN DOTS-134578", value: "\u28DD", codepoint: 10461 }, { name: "BRAILLE PATTERN DOTS-234578", value: "\u28DE", codepoint: 10462 }, { name: "BRAILLE PATTERN DOTS-1234578", value: "\u28DF", codepoint: 10463 }, { name: "BRAILLE PATTERN DOTS-678", value: "\u28E0", codepoint: 10464 }, { name: "BRAILLE PATTERN DOTS-1678", value: "\u28E1", codepoint: 10465 }, { name: "BRAILLE PATTERN DOTS-2678", value: "\u28E2", codepoint: 10466 }, { name: "BRAILLE PATTERN DOTS-12678", value: "\u28E3", codepoint: 10467 }, { name: "BRAILLE PATTERN DOTS-3678", value: "\u28E4", codepoint: 10468 }, { name: "BRAILLE PATTERN DOTS-13678", value: "\u28E5", codepoint: 10469 }, { name: "BRAILLE PATTERN DOTS-23678", value: "\u28E6", codepoint: 10470 }, { name: "BRAILLE PATTERN DOTS-123678", value: "\u28E7", codepoint: 10471 }, { name: "BRAILLE PATTERN DOTS-4678", value: "\u28E8", codepoint: 10472 }, { name: "BRAILLE PATTERN DOTS-14678", value: "\u28E9", codepoint: 10473 }, { name: "BRAILLE PATTERN DOTS-24678", value: "\u28EA", codepoint: 10474 }, { name: "BRAILLE PATTERN DOTS-124678", value: "\u28EB", codepoint: 10475 }, { name: "BRAILLE PATTERN DOTS-34678", value: "\u28EC", codepoint: 10476 }, { name: "BRAILLE PATTERN DOTS-134678", value: "\u28ED", codepoint: 10477 }, { name: "BRAILLE PATTERN DOTS-234678", value: "\u28EE", codepoint: 10478 }, { name: "BRAILLE PATTERN DOTS-1234678", value: "\u28EF", codepoint: 10479 }, { name: "BRAILLE PATTERN DOTS-5678", value: "\u28F0", codepoint: 10480 }, { name: "BRAILLE PATTERN DOTS-15678", value: "\u28F1", codepoint: 10481 }, { name: "BRAILLE PATTERN DOTS-25678", value: "\u28F2", codepoint: 10482 }, { name: "BRAILLE PATTERN DOTS-125678", value: "\u28F3", codepoint: 10483 }, { name: "BRAILLE PATTERN DOTS-35678", value: "\u28F4", codepoint: 10484 }, { name: "BRAILLE PATTERN DOTS-135678", value: "\u28F5", codepoint: 10485 }, { name: "BRAILLE PATTERN DOTS-235678", value: "\u28F6", codepoint: 10486 }, { name: "BRAILLE PATTERN DOTS-1235678", value: "\u28F7", codepoint: 10487 }, { name: "BRAILLE PATTERN DOTS-45678", value: "\u28F8", codepoint: 10488 }, { name: "BRAILLE PATTERN DOTS-145678", value: "\u28F9", codepoint: 10489 }, { name: "BRAILLE PATTERN DOTS-245678", value: "\u28FA", codepoint: 10490 }, { name: "BRAILLE PATTERN DOTS-1245678", value: "\u28FB", codepoint: 10491 }, { name: "BRAILLE PATTERN DOTS-345678", value: "\u28FC", codepoint: 10492 }, { name: "BRAILLE PATTERN DOTS-1345678", value: "\u28FD", codepoint: 10493 }, { name: "BRAILLE PATTERN DOTS-2345678", value: "\u28FE", codepoint: 10494 }, { name: "BRAILLE PATTERN DOTS-12345678", value: "\u28FF", codepoint: 10495 } ] }, { name: "Currency", symbols: [ { name: "EURO-CURRENCY SIGN", value: "\u20A0", codepoint: 8352 }, { name: "COLON SIGN", value: "\u20A1", codepoint: 8353 }, { name: "CRUZEIRO SIGN", value: "\u20A2", codepoint: 8354 }, { name: "FRENCH FRANC SIGN", value: "\u20A3", codepoint: 8355 }, { name: "LIRA SIGN", value: "\u20A4", codepoint: 8356 }, { name: "MILL SIGN", value: "\u20A5", codepoint: 8357 }, { name: "NAIRA SIGN", value: "\u20A6", codepoint: 8358 }, { name: "PESETA SIGN", value: "\u20A7", codepoint: 8359 }, { name: "RUPEE SIGN", value: "\u20A8", codepoint: 8360 }, { name: "WON SIGN", value: "\u20A9", codepoint: 8361 }, { name: "NEW SHEQEL SIGN", value: "\u20AA", codepoint: 8362 }, { name: "DONG SIGN", value: "\u20AB", codepoint: 8363 }, { name: "EURO SIGN", value: "\u20AC", codepoint: 8364 }, { name: "KIP SIGN", value: "\u20AD", codepoint: 8365 }, { name: "TUGRIK SIGN", value: "\u20AE", codepoint: 8366 }, { name: "DRACHMA SIGN", value: "\u20AF", codepoint: 8367 }, { name: "GERMAN PENNY SIGN", value: "\u20B0", codepoint: 8368 }, { name: "PESO SIGN", value: "\u20B1", codepoint: 8369 }, { name: "GUARANI SIGN", value: "\u20B2", codepoint: 8370 }, { name: "AUSTRAL SIGN", value: "\u20B3", codepoint: 8371 }, { name: "HRYVNIA SIGN", value: "\u20B4", codepoint: 8372 }, { name: "CEDI SIGN", value: "\u20B5", codepoint: 8373 }, { name: "LIVRE TOURNOIS SIGN", value: "\u20B6", codepoint: 8374 }, { name: "SPESMILO SIGN", value: "\u20B7", codepoint: 8375 }, { name: "TENGE SIGN", value: "\u20B8", codepoint: 8376 }, { name: "INDIAN RUPEE SIGN", value: "\u20B9", codepoint: 8377 } ] }, { name: "Game Symbols", symbols: [ { name: "MAHJONG TILE EAST WIND", value: "\u{1F000}", codepoint: 126976 }, { name: "MAHJONG TILE SOUTH WIND", value: "\u{1F001}", codepoint: 126977 }, { name: "MAHJONG TILE WEST WIND", value: "\u{1F002}", codepoint: 126978 }, { name: "MAHJONG TILE NORTH WIND", value: "\u{1F003}", codepoint: 126979 }, { name: "MAHJONG TILE GREEN DRAGON", value: "\u{1F005}", codepoint: 126981 }, { name: "MAHJONG TILE WHITE DRAGON", value: "\u{1F006}", codepoint: 126982 }, { name: "MAHJONG TILE ONE OF CHARACTERS", value: "\u{1F007}", codepoint: 126983 }, { name: "MAHJONG TILE TWO OF CHARACTERS", value: "\u{1F008}", codepoint: 126984 }, { name: "MAHJONG TILE THREE OF CHARACTERS", value: "\u{1F009}", codepoint: 126985 }, { name: "MAHJONG TILE FOUR OF CHARACTERS", value: "\u{1F00A}", codepoint: 126986 }, { name: "MAHJONG TILE FIVE OF CHARACTERS", value: "\u{1F00B}", codepoint: 126987 }, { name: "MAHJONG TILE SIX OF CHARACTERS", value: "\u{1F00C}", codepoint: 126988 }, { name: "MAHJONG TILE SEVEN OF CHARACTERS", value: "\u{1F00D}", codepoint: 126989 }, { name: "MAHJONG TILE EIGHT OF CHARACTERS", value: "\u{1F00E}", codepoint: 126990 }, { name: "MAHJONG TILE NINE OF CHARACTERS", value: "\u{1F00F}", codepoint: 126991 }, { name: "MAHJONG TILE ONE OF BAMBOOS", value: "\u{1F010}", codepoint: 126992 }, { name: "MAHJONG TILE TWO OF BAMBOOS", value: "\u{1F011}", codepoint: 126993 }, { name: "MAHJONG TILE THREE OF BAMBOOS", value: "\u{1F012}", codepoint: 126994 }, { name: "MAHJONG TILE FOUR OF BAMBOOS", value: "\u{1F013}", codepoint: 126995 }, { name: "MAHJONG TILE FIVE OF BAMBOOS", value: "\u{1F014}", codepoint: 126996 }, { name: "MAHJONG TILE SIX OF BAMBOOS", value: "\u{1F015}", codepoint: 126997 }, { name: "MAHJONG TILE SEVEN OF BAMBOOS", value: "\u{1F016}", codepoint: 126998 }, { name: "MAHJONG TILE EIGHT OF BAMBOOS", value: "\u{1F017}", codepoint: 126999 }, { name: "MAHJONG TILE NINE OF BAMBOOS", value: "\u{1F018}", codepoint: 127e3 }, { name: "MAHJONG TILE ONE OF CIRCLES", value: "\u{1F019}", codepoint: 127001 }, { name: "MAHJONG TILE TWO OF CIRCLES", value: "\u{1F01A}", codepoint: 127002 }, { name: "MAHJONG TILE THREE OF CIRCLES", value: "\u{1F01B}", codepoint: 127003 }, { name: "MAHJONG TILE FOUR OF CIRCLES", value: "\u{1F01C}", codepoint: 127004 }, { name: "MAHJONG TILE FIVE OF CIRCLES", value: "\u{1F01D}", codepoint: 127005 }, { name: "MAHJONG TILE SIX OF CIRCLES", value: "\u{1F01E}", codepoint: 127006 }, { name: "MAHJONG TILE SEVEN OF CIRCLES", value: "\u{1F01F}", codepoint: 127007 }, { name: "MAHJONG TILE EIGHT OF CIRCLES", value: "\u{1F020}", codepoint: 127008 }, { name: "MAHJONG TILE NINE OF CIRCLES", value: "\u{1F021}", codepoint: 127009 }, { name: "MAHJONG TILE PLUM", value: "\u{1F022}", codepoint: 127010 }, { name: "MAHJONG TILE ORCHID", value: "\u{1F023}", codepoint: 127011 }, { name: "MAHJONG TILE BAMBOO", value: "\u{1F024}", codepoint: 127012 }, { name: "MAHJONG TILE CHRYSANTHEMUM", value: "\u{1F025}", codepoint: 127013 }, { name: "MAHJONG TILE SPRING", value: "\u{1F026}", codepoint: 127014 }, { name: "MAHJONG TILE SUMMER", value: "\u{1F027}", codepoint: 127015 }, { name: "MAHJONG TILE AUTUMN", value: "\u{1F028}", codepoint: 127016 }, { name: "MAHJONG TILE WINTER", value: "\u{1F029}", codepoint: 127017 }, { name: "MAHJONG TILE JOKER", value: "\u{1F02A}", codepoint: 127018 }, { name: "MAHJONG TILE BACK", value: "\u{1F02B}", codepoint: 127019 }, { name: "DOMINO TILE HORIZONTAL BACK", value: "\u{1F030}", codepoint: 127024 }, { name: "DOMINO TILE HORIZONTAL-00-00", value: "\u{1F031}", codepoint: 127025 }, { name: "DOMINO TILE HORIZONTAL-00-01", value: "\u{1F032}", codepoint: 127026 }, { name: "DOMINO TILE HORIZONTAL-00-02", value: "\u{1F033}", codepoint: 127027 }, { name: "DOMINO TILE HORIZONTAL-00-03", value: "\u{1F034}", codepoint: 127028 }, { name: "DOMINO TILE HORIZONTAL-00-04", value: "\u{1F035}", codepoint: 127029 }, { name: "DOMINO TILE HORIZONTAL-00-05", value: "\u{1F036}", codepoint: 127030 }, { name: "DOMINO TILE HORIZONTAL-00-06", value: "\u{1F037}", codepoint: 127031 }, { name: "DOMINO TILE HORIZONTAL-01-00", value: "\u{1F038}", codepoint: 127032 }, { name: "DOMINO TILE HORIZONTAL-01-01", value: "\u{1F039}", codepoint: 127033 }, { name: "DOMINO TILE HORIZONTAL-01-02", value: "\u{1F03A}", codepoint: 127034 }, { name: "DOMINO TILE HORIZONTAL-01-03", value: "\u{1F03B}", codepoint: 127035 }, { name: "DOMINO TILE HORIZONTAL-01-04", value: "\u{1F03C}", codepoint: 127036 }, { name: "DOMINO TILE HORIZONTAL-01-05", value: "\u{1F03D}", codepoint: 127037 }, { name: "DOMINO TILE HORIZONTAL-01-06", value: "\u{1F03E}", codepoint: 127038 }, { name: "DOMINO TILE HORIZONTAL-02-00", value: "\u{1F03F}", codepoint: 127039 }, { name: "DOMINO TILE HORIZONTAL-02-01", value: "\u{1F040}", codepoint: 127040 }, { name: "DOMINO TILE HORIZONTAL-02-02", value: "\u{1F041}", codepoint: 127041 }, { name: "DOMINO TILE HORIZONTAL-02-03", value: "\u{1F042}", codepoint: 127042 }, { name: "DOMINO TILE HORIZONTAL-02-04", value: "\u{1F043}", codepoint: 127043 }, { name: "DOMINO TILE HORIZONTAL-02-05", value: "\u{1F044}", codepoint: 127044 }, { name: "DOMINO TILE HORIZONTAL-02-06", value: "\u{1F045}", codepoint: 127045 }, { name: "DOMINO TILE HORIZONTAL-03-00", value: "\u{1F046}", codepoint: 127046 }, { name: "DOMINO TILE HORIZONTAL-03-01", value: "\u{1F047}", codepoint: 127047 }, { name: "DOMINO TILE HORIZONTAL-03-02", value: "\u{1F048}", codepoint: 127048 }, { name: "DOMINO TILE HORIZONTAL-03-03", value: "\u{1F049}", codepoint: 127049 }, { name: "DOMINO TILE HORIZONTAL-03-04", value: "\u{1F04A}", codepoint: 127050 }, { name: "DOMINO TILE HORIZONTAL-03-05", value: "\u{1F04B}", codepoint: 127051 }, { name: "DOMINO TILE HORIZONTAL-03-06", value: "\u{1F04C}", codepoint: 127052 }, { name: "DOMINO TILE HORIZONTAL-04-00", value: "\u{1F04D}", codepoint: 127053 }, { name: "DOMINO TILE HORIZONTAL-04-01", value: "\u{1F04E}", codepoint: 127054 }, { name: "DOMINO TILE HORIZONTAL-04-02", value: "\u{1F04F}", codepoint: 127055 }, { name: "DOMINO TILE HORIZONTAL-04-03", value: "\u{1F050}", codepoint: 127056 }, { name: "DOMINO TILE HORIZONTAL-04-04", value: "\u{1F051}", codepoint: 127057 }, { name: "DOMINO TILE HORIZONTAL-04-05", value: "\u{1F052}", codepoint: 127058 }, { name: "DOMINO TILE HORIZONTAL-04-06", value: "\u{1F053}", codepoint: 127059 }, { name: "DOMINO TILE HORIZONTAL-05-00", value: "\u{1F054}", codepoint: 127060 }, { name: "DOMINO TILE HORIZONTAL-05-01", value: "\u{1F055}", codepoint: 127061 }, { name: "DOMINO TILE HORIZONTAL-05-02", value: "\u{1F056}", codepoint: 127062 }, { name: "DOMINO TILE HORIZONTAL-05-03", value: "\u{1F057}", codepoint: 127063 }, { name: "DOMINO TILE HORIZONTAL-05-04", value: "\u{1F058}", codepoint: 127064 }, { name: "DOMINO TILE HORIZONTAL-05-05", value: "\u{1F059}", codepoint: 127065 }, { name: "DOMINO TILE HORIZONTAL-05-06", value: "\u{1F05A}", codepoint: 127066 }, { name: "DOMINO TILE HORIZONTAL-06-00", value: "\u{1F05B}", codepoint: 127067 }, { name: "DOMINO TILE HORIZONTAL-06-01", value: "\u{1F05C}", codepoint: 127068 }, { name: "DOMINO TILE HORIZONTAL-06-02", value: "\u{1F05D}", codepoint: 127069 }, { name: "DOMINO TILE HORIZONTAL-06-03", value: "\u{1F05E}", codepoint: 127070 }, { name: "DOMINO TILE HORIZONTAL-06-04", value: "\u{1F05F}", codepoint: 127071 }, { name: "DOMINO TILE HORIZONTAL-06-05", value: "\u{1F060}", codepoint: 127072 }, { name: "DOMINO TILE HORIZONTAL-06-06", value: "\u{1F061}", codepoint: 127073 }, { name: "DOMINO TILE VERTICAL BACK", value: "\u{1F062}", codepoint: 127074 }, { name: "DOMINO TILE VERTICAL-00-00", value: "\u{1F063}", codepoint: 127075 }, { name: "DOMINO TILE VERTICAL-00-01", value: "\u{1F064}", codepoint: 127076 }, { name: "DOMINO TILE VERTICAL-00-02", value: "\u{1F065}", codepoint: 127077 }, { name: "DOMINO TILE VERTICAL-00-03", value: "\u{1F066}", codepoint: 127078 }, { name: "DOMINO TILE VERTICAL-00-04", value: "\u{1F067}", codepoint: 127079 }, { name: "DOMINO TILE VERTICAL-00-05", value: "\u{1F068}", codepoint: 127080 }, { name: "DOMINO TILE VERTICAL-00-06", value: "\u{1F069}", codepoint: 127081 }, { name: "DOMINO TILE VERTICAL-01-00", value: "\u{1F06A}", codepoint: 127082 }, { name: "DOMINO TILE VERTICAL-01-01", value: "\u{1F06B}", codepoint: 127083 }, { name: "DOMINO TILE VERTICAL-01-02", value: "\u{1F06C}", codepoint: 127084 }, { name: "DOMINO TILE VERTICAL-01-03", value: "\u{1F06D}", codepoint: 127085 }, { name: "DOMINO TILE VERTICAL-01-04", value: "\u{1F06E}", codepoint: 127086 }, { name: "DOMINO TILE VERTICAL-01-05", value: "\u{1F06F}", codepoint: 127087 }, { name: "DOMINO TILE VERTICAL-01-06", value: "\u{1F070}", codepoint: 127088 }, { name: "DOMINO TILE VERTICAL-02-00", value: "\u{1F071}", codepoint: 127089 }, { name: "DOMINO TILE VERTICAL-02-01", value: "\u{1F072}", codepoint: 127090 }, { name: "DOMINO TILE VERTICAL-02-02", value: "\u{1F073}", codepoint: 127091 }, { name: "DOMINO TILE VERTICAL-02-03", value: "\u{1F074}", codepoint: 127092 }, { name: "DOMINO TILE VERTICAL-02-04", value: "\u{1F075}", codepoint: 127093 }, { name: "DOMINO TILE VERTICAL-02-05", value: "\u{1F076}", codepoint: 127094 }, { name: "DOMINO TILE VERTICAL-02-06", value: "\u{1F077}", codepoint: 127095 }, { name: "DOMINO TILE VERTICAL-03-00", value: "\u{1F078}", codepoint: 127096 }, { name: "DOMINO TILE VERTICAL-03-01", value: "\u{1F079}", codepoint: 127097 }, { name: "DOMINO TILE VERTICAL-03-02", value: "\u{1F07A}", codepoint: 127098 }, { name: "DOMINO TILE VERTICAL-03-03", value: "\u{1F07B}", codepoint: 127099 }, { name: "DOMINO TILE VERTICAL-03-04", value: "\u{1F07C}", codepoint: 127100 }, { name: "DOMINO TILE VERTICAL-03-05", value: "\u{1F07D}", codepoint: 127101 }, { name: "DOMINO TILE VERTICAL-03-06", value: "\u{1F07E}", codepoint: 127102 }, { name: "DOMINO TILE VERTICAL-04-00", value: "\u{1F07F}", codepoint: 127103 }, { name: "DOMINO TILE VERTICAL-04-01", value: "\u{1F080}", codepoint: 127104 }, { name: "DOMINO TILE VERTICAL-04-02", value: "\u{1F081}", codepoint: 127105 }, { name: "DOMINO TILE VERTICAL-04-03", value: "\u{1F082}", codepoint: 127106 }, { name: "DOMINO TILE VERTICAL-04-04", value: "\u{1F083}", codepoint: 127107 }, { name: "DOMINO TILE VERTICAL-04-05", value: "\u{1F084}", codepoint: 127108 }, { name: "DOMINO TILE VERTICAL-04-06", value: "\u{1F085}", codepoint: 127109 }, { name: "DOMINO TILE VERTICAL-05-00", value: "\u{1F086}", codepoint: 127110 }, { name: "DOMINO TILE VERTICAL-05-01", value: "\u{1F087}", codepoint: 127111 }, { name: "DOMINO TILE VERTICAL-05-02", value: "\u{1F088}", codepoint: 127112 }, { name: "DOMINO TILE VERTICAL-05-03", value: "\u{1F089}", codepoint: 127113 }, { name: "DOMINO TILE VERTICAL-05-04", value: "\u{1F08A}", codepoint: 127114 }, { name: "DOMINO TILE VERTICAL-05-05", value: "\u{1F08B}", codepoint: 127115 }, { name: "DOMINO TILE VERTICAL-05-06", value: "\u{1F08C}", codepoint: 127116 }, { name: "DOMINO TILE VERTICAL-06-00", value: "\u{1F08D}", codepoint: 127117 }, { name: "DOMINO TILE VERTICAL-06-01", value: "\u{1F08E}", codepoint: 127118 }, { name: "DOMINO TILE VERTICAL-06-02", value: "\u{1F08F}", codepoint: 127119 }, { name: "DOMINO TILE VERTICAL-06-03", value: "\u{1F090}", codepoint: 127120 }, { name: "DOMINO TILE VERTICAL-06-04", value: "\u{1F091}", codepoint: 127121 }, { name: "DOMINO TILE VERTICAL-06-05", value: "\u{1F092}", codepoint: 127122 }, { name: "DOMINO TILE VERTICAL-06-06", value: "\u{1F093}", codepoint: 127123 }, { name: "PLAYING CARD BACK", value: "\u{1F0A0}", codepoint: 127136 }, { name: "PLAYING CARD ACE OF SPADES", value: "\u{1F0A1}", codepoint: 127137 }, { name: "PLAYING CARD TWO OF SPADES", value: "\u{1F0A2}", codepoint: 127138 }, { name: "PLAYING CARD THREE OF SPADES", value: "\u{1F0A3}", codepoint: 127139 }, { name: "PLAYING CARD FOUR OF SPADES", value: "\u{1F0A4}", codepoint: 127140 }, { name: "PLAYING CARD FIVE OF SPADES", value: "\u{1F0A5}", codepoint: 127141 }, { name: "PLAYING CARD SIX OF SPADES", value: "\u{1F0A6}", codepoint: 127142 }, { name: "PLAYING CARD SEVEN OF SPADES", value: "\u{1F0A7}", codepoint: 127143 }, { name: "PLAYING CARD EIGHT OF SPADES", value: "\u{1F0A8}", codepoint: 127144 }, { name: "PLAYING CARD NINE OF SPADES", value: "\u{1F0A9}", codepoint: 127145 }, { name: "PLAYING CARD TEN OF SPADES", value: "\u{1F0AA}", codepoint: 127146 }, { name: "PLAYING CARD JACK OF SPADES", value: "\u{1F0AB}", codepoint: 127147 }, { name: "PLAYING CARD KNIGHT OF SPADES", value: "\u{1F0AC}", codepoint: 127148 }, { name: "PLAYING CARD QUEEN OF SPADES", value: "\u{1F0AD}", codepoint: 127149 }, { name: "PLAYING CARD KING OF SPADES", value: "\u{1F0AE}", codepoint: 127150 }, { name: "PLAYING CARD ACE OF HEARTS", value: "\u{1F0B1}", codepoint: 127153 }, { name: "PLAYING CARD TWO OF HEARTS", value: "\u{1F0B2}", codepoint: 127154 }, { name: "PLAYING CARD THREE OF HEARTS", value: "\u{1F0B3}", codepoint: 127155 }, { name: "PLAYING CARD FOUR OF HEARTS", value: "\u{1F0B4}", codepoint: 127156 }, { name: "PLAYING CARD FIVE OF HEARTS", value: "\u{1F0B5}", codepoint: 127157 }, { name: "PLAYING CARD SIX OF HEARTS", value: "\u{1F0B6}", codepoint: 127158 }, { name: "PLAYING CARD SEVEN OF HEARTS", value: "\u{1F0B7}", codepoint: 127159 }, { name: "PLAYING CARD EIGHT OF HEARTS", value: "\u{1F0B8}", codepoint: 127160 }, { name: "PLAYING CARD NINE OF HEARTS", value: "\u{1F0B9}", codepoint: 127161 }, { name: "PLAYING CARD TEN OF HEARTS", value: "\u{1F0BA}", codepoint: 127162 }, { name: "PLAYING CARD JACK OF HEARTS", value: "\u{1F0BB}", codepoint: 127163 }, { name: "PLAYING CARD KNIGHT OF HEARTS", value: "\u{1F0BC}", codepoint: 127164 }, { name: "PLAYING CARD QUEEN OF HEARTS", value: "\u{1F0BD}", codepoint: 127165 }, { name: "PLAYING CARD KING OF HEARTS", value: "\u{1F0BE}", codepoint: 127166 }, { name: "PLAYING CARD ACE OF DIAMONDS", value: "\u{1F0C1}", codepoint: 127169 }, { name: "PLAYING CARD TWO OF DIAMONDS", value: "\u{1F0C2}", codepoint: 127170 }, { name: "PLAYING CARD THREE OF DIAMONDS", value: "\u{1F0C3}", codepoint: 127171 }, { name: "PLAYING CARD FOUR OF DIAMONDS", value: "\u{1F0C4}", codepoint: 127172 }, { name: "PLAYING CARD FIVE OF DIAMONDS", value: "\u{1F0C5}", codepoint: 127173 }, { name: "PLAYING CARD SIX OF DIAMONDS", value: "\u{1F0C6}", codepoint: 127174 }, { name: "PLAYING CARD SEVEN OF DIAMONDS", value: "\u{1F0C7}", codepoint: 127175 }, { name: "PLAYING CARD EIGHT OF DIAMONDS", value: "\u{1F0C8}", codepoint: 127176 }, { name: "PLAYING CARD NINE OF DIAMONDS", value: "\u{1F0C9}", codepoint: 127177 }, { name: "PLAYING CARD TEN OF DIAMONDS", value: "\u{1F0CA}", codepoint: 127178 }, { name: "PLAYING CARD JACK OF DIAMONDS", value: "\u{1F0CB}", codepoint: 127179 }, { name: "PLAYING CARD KNIGHT OF DIAMONDS", value: "\u{1F0CC}", codepoint: 127180 }, { name: "PLAYING CARD QUEEN OF DIAMONDS", value: "\u{1F0CD}", codepoint: 127181 }, { name: "PLAYING CARD KING OF DIAMONDS", value: "\u{1F0CE}", codepoint: 127182 }, { name: "PLAYING CARD ACE OF CLUBS", value: "\u{1F0D1}", codepoint: 127185 }, { name: "PLAYING CARD TWO OF CLUBS", value: "\u{1F0D2}", codepoint: 127186 }, { name: "PLAYING CARD THREE OF CLUBS", value: "\u{1F0D3}", codepoint: 127187 }, { name: "PLAYING CARD FOUR OF CLUBS", value: "\u{1F0D4}", codepoint: 127188 }, { name: "PLAYING CARD FIVE OF CLUBS", value: "\u{1F0D5}", codepoint: 127189 }, { name: "PLAYING CARD SIX OF CLUBS", value: "\u{1F0D6}", codepoint: 127190 }, { name: "PLAYING CARD SEVEN OF CLUBS", value: "\u{1F0D7}", codepoint: 127191 }, { name: "PLAYING CARD EIGHT OF CLUBS", value: "\u{1F0D8}", codepoint: 127192 }, { name: "PLAYING CARD NINE OF CLUBS", value: "\u{1F0D9}", codepoint: 127193 }, { name: "PLAYING CARD TEN OF CLUBS", value: "\u{1F0DA}", codepoint: 127194 }, { name: "PLAYING CARD JACK OF CLUBS", value: "\u{1F0DB}", codepoint: 127195 }, { name: "PLAYING CARD KNIGHT OF CLUBS", value: "\u{1F0DC}", codepoint: 127196 }, { name: "PLAYING CARD QUEEN OF CLUBS", value: "\u{1F0DD}", codepoint: 127197 }, { name: "PLAYING CARD KING OF CLUBS", value: "\u{1F0DE}", codepoint: 127198 }, { name: "PLAYING CARD WHITE JOKER", value: "\u{1F0DF}", codepoint: 127199 } ] }, { name: "Music", symbols: [ { name: "MUSICAL SYMBOL SINGLE BARLINE", value: "\u{1D100}", codepoint: 119040 }, { name: "MUSICAL SYMBOL DOUBLE BARLINE", value: "\u{1D101}", codepoint: 119041 }, { name: "MUSICAL SYMBOL FINAL BARLINE", value: "\u{1D102}", codepoint: 119042 }, { name: "MUSICAL SYMBOL REVERSE FINAL BARLINE", value: "\u{1D103}", codepoint: 119043 }, { name: "MUSICAL SYMBOL DASHED BARLINE", value: "\u{1D104}", codepoint: 119044 }, { name: "MUSICAL SYMBOL SHORT BARLINE", value: "\u{1D105}", codepoint: 119045 }, { name: "MUSICAL SYMBOL LEFT REPEAT SIGN", value: "\u{1D106}", codepoint: 119046 }, { name: "MUSICAL SYMBOL RIGHT REPEAT SIGN", value: "\u{1D107}", codepoint: 119047 }, { name: "MUSICAL SYMBOL REPEAT DOTS", value: "\u{1D108}", codepoint: 119048 }, { name: "MUSICAL SYMBOL FERMATA", value: "\u{1D110}", codepoint: 119056 }, { name: "MUSICAL SYMBOL FERMATA BELOW", value: "\u{1D111}", codepoint: 119057 }, { name: "MUSICAL SYMBOL BREATH MARK", value: "\u{1D112}", codepoint: 119058 }, { name: "MUSICAL SYMBOL G CLEF", value: "\u{1D11E}", codepoint: 119070 }, { name: "MUSICAL SYMBOL C CLEF", value: "\u{1D121}", codepoint: 119073 }, { name: "MUSICAL SYMBOL F CLEF", value: "\u{1D122}", codepoint: 119074 }, { name: "MUSICAL SYMBOL DOUBLE SHARP", value: "\u{1D12A}", codepoint: 119082 }, { name: "MUSICAL SYMBOL DOUBLE FLAT", value: "\u{1D12B}", codepoint: 119083 }, { name: "MUSICAL SYMBOL CRESCENDO", value: "\u{1D192}", codepoint: 119186 }, { name: "MUSICAL SYMBOL DECRESCENDO", value: "\u{1D193}", codepoint: 119187 }, { name: "MUSICAL SYMBOL HAUPTSTIMME", value: "\u{1D1A6}", codepoint: 119206 }, { name: "MUSICAL SYMBOL NEBENSTIMME", value: "\u{1D1A7}", codepoint: 119207 }, { name: "MUSICAL SYMBOL END OF STIMME", value: "\u{1D1A8}", codepoint: 119208 }, { name: "MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA", value: "\u{1D1C7}", codepoint: 119239 }, { name: "MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA", value: "\u{1D1C8}", codepoint: 119240 }, { name: "MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1", value: "\u{1D1C9}", codepoint: 119241 }, { name: "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA", value: "\u{1D1CA}", codepoint: 119242 }, { name: "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA", value: "\u{1D1CB}", codepoint: 119243 }, { name: "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1", value: "\u{1D1CC}", codepoint: 119244 }, { name: "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2", value: "\u{1D1CD}", codepoint: 119245 }, { name: "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3", value: "\u{1D1CE}", codepoint: 119246 } ] }, { name: "Geometric Shapes", symbols: [ { name: "BLACK SQUARE", value: "\u25A0", codepoint: 9632 }, { name: "WHITE SQUARE", value: "\u25A1", codepoint: 9633 }, { name: "WHITE SQUARE WITH ROUNDED CORNERS", value: "\u25A2", codepoint: 9634 }, { name: "WHITE SQUARE CONTAINING BLACK SMALL SQUARE", value: "\u25A3", codepoint: 9635 }, { name: "SQUARE WITH HORIZONTAL FILL", value: "\u25A4", codepoint: 9636 }, { name: "SQUARE WITH VERTICAL FILL", value: "\u25A5", codepoint: 9637 }, { name: "SQUARE WITH ORTHOGONAL CROSSHATCH FILL", value: "\u25A6", codepoint: 9638 }, { name: "SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL", value: "\u25A7", codepoint: 9639 }, { name: "SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL", value: "\u25A8", codepoint: 9640 }, { name: "SQUARE WITH DIAGONAL CROSSHATCH FILL", value: "\u25A9", codepoint: 9641 }, { name: "BLACK RECTANGLE", value: "\u25AC", codepoint: 9644 }, { name: "WHITE RECTANGLE", value: "\u25AD", codepoint: 9645 }, { name: "BLACK VERTICAL RECTANGLE", value: "\u25AE", codepoint: 9646 }, { name: "WHITE VERTICAL RECTANGLE", value: "\u25AF", codepoint: 9647 }, { name: "BLACK PARALLELOGRAM", value: "\u25B0", codepoint: 9648 }, { name: "WHITE PARALLELOGRAM", value: "\u25B1", codepoint: 9649 }, { name: "BLACK UP-POINTING TRIANGLE", value: "\u25B2", codepoint: 9650 }, { name: "WHITE UP-POINTING TRIANGLE", value: "\u25B3", codepoint: 9651 }, { name: "BLACK UP-POINTING SMALL TRIANGLE", value: "\u25B4", codepoint: 9652 }, { name: "WHITE UP-POINTING SMALL TRIANGLE", value: "\u25B5", codepoint: 9653 }, { name: "WHITE RIGHT-POINTING TRIANGLE", value: "\u25B7", codepoint: 9655 }, { name: "BLACK RIGHT-POINTING SMALL TRIANGLE", value: "\u25B8", codepoint: 9656 }, { name: "WHITE RIGHT-POINTING SMALL TRIANGLE", value: "\u25B9", codepoint: 9657 }, { name: "BLACK RIGHT-POINTING POINTER", value: "\u25BA", codepoint: 9658 }, { name: "WHITE RIGHT-POINTING POINTER", value: "\u25BB", codepoint: 9659 }, { name: "BLACK DOWN-POINTING TRIANGLE", value: "\u25BC", codepoint: 9660 }, { name: "WHITE DOWN-POINTING TRIANGLE", value: "\u25BD", codepoint: 9661 }, { name: "BLACK DOWN-POINTING SMALL TRIANGLE", value: "\u25BE", codepoint: 9662 }, { name: "WHITE DOWN-POINTING SMALL TRIANGLE", value: "\u25BF", codepoint: 9663 }, { name: "WHITE LEFT-POINTING TRIANGLE", value: "\u25C1", codepoint: 9665 }, { name: "BLACK LEFT-POINTING SMALL TRIANGLE", value: "\u25C2", codepoint: 9666 }, { name: "WHITE LEFT-POINTING SMALL TRIANGLE", value: "\u25C3", codepoint: 9667 }, { name: "BLACK LEFT-POINTING POINTER", value: "\u25C4", codepoint: 9668 }, { name: "WHITE LEFT-POINTING POINTER", value: "\u25C5", codepoint: 9669 }, { name: "BLACK DIAMOND", value: "\u25C6", codepoint: 9670 }, { name: "WHITE DIAMOND", value: "\u25C7", codepoint: 9671 }, { name: "WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND", value: "\u25C8", codepoint: 9672 }, { name: "FISHEYE", value: "\u25C9", codepoint: 9673 }, { name: "LOZENGE", value: "\u25CA", codepoint: 9674 }, { name: "WHITE CIRCLE", value: "\u25CB", codepoint: 9675 }, { name: "DOTTED CIRCLE", value: "\u25CC", codepoint: 9676 }, { name: "CIRCLE WITH VERTICAL FILL", value: "\u25CD", codepoint: 9677 }, { name: "BULLSEYE", value: "\u25CE", codepoint: 9678 }, { name: "BLACK CIRCLE", value: "\u25CF", codepoint: 9679 }, { name: "CIRCLE WITH LEFT HALF BLACK", value: "\u25D0", codepoint: 9680 }, { name: "CIRCLE WITH RIGHT HALF BLACK", value: "\u25D1", codepoint: 9681 }, { name: "CIRCLE WITH LOWER HALF BLACK", value: "\u25D2", codepoint: 9682 }, { name: "CIRCLE WITH UPPER HALF BLACK", value: "\u25D3", codepoint: 9683 }, { name: "CIRCLE WITH UPPER RIGHT QUADRANT BLACK", value: "\u25D4", codepoint: 9684 }, { name: "CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK", value: "\u25D5", codepoint: 9685 }, { name: "LEFT HALF BLACK CIRCLE", value: "\u25D6", codepoint: 9686 }, { name: "RIGHT HALF BLACK CIRCLE", value: "\u25D7", codepoint: 9687 }, { name: "INVERSE BULLET", value: "\u25D8", codepoint: 9688 }, { name: "INVERSE WHITE CIRCLE", value: "\u25D9", codepoint: 9689 }, { name: "UPPER HALF INVERSE WHITE CIRCLE", value: "\u25DA", codepoint: 9690 }, { name: "LOWER HALF INVERSE WHITE CIRCLE", value: "\u25DB", codepoint: 9691 }, { name: "UPPER LEFT QUADRANT CIRCULAR ARC", value: "\u25DC", codepoint: 9692 }, { name: "UPPER RIGHT QUADRANT CIRCULAR ARC", value: "\u25DD", codepoint: 9693 }, { name: "LOWER RIGHT QUADRANT CIRCULAR ARC", value: "\u25DE", codepoint: 9694 }, { name: "LOWER LEFT QUADRANT CIRCULAR ARC", value: "\u25DF", codepoint: 9695 }, { name: "UPPER HALF CIRCLE", value: "\u25E0", codepoint: 9696 }, { name: "LOWER HALF CIRCLE", value: "\u25E1", codepoint: 9697 }, { name: "BLACK LOWER RIGHT TRIANGLE", value: "\u25E2", codepoint: 9698 }, { name: "BLACK LOWER LEFT TRIANGLE", value: "\u25E3", codepoint: 9699 }, { name: "BLACK UPPER LEFT TRIANGLE", value: "\u25E4", codepoint: 9700 }, { name: "BLACK UPPER RIGHT TRIANGLE", value: "\u25E5", codepoint: 9701 }, { name: "WHITE BULLET", value: "\u25E6", codepoint: 9702 }, { name: "SQUARE WITH LEFT HALF BLACK", value: "\u25E7", codepoint: 9703 }, { name: "SQUARE WITH RIGHT HALF BLACK", value: "\u25E8", codepoint: 9704 }, { name: "SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK", value: "\u25E9", codepoint: 9705 }, { name: "SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK", value: "\u25EA", codepoint: 9706 }, { name: "WHITE SQUARE WITH VERTICAL BISECTING LINE", value: "\u25EB", codepoint: 9707 }, { name: "WHITE UP-POINTING TRIANGLE WITH DOT", value: "\u25EC", codepoint: 9708 }, { name: "UP-POINTING TRIANGLE WITH LEFT HALF BLACK", value: "\u25ED", codepoint: 9709 }, { name: "UP-POINTING TRIANGLE WITH RIGHT HALF BLACK", value: "\u25EE", codepoint: 9710 }, { name: "LARGE CIRCLE", value: "\u25EF", codepoint: 9711 }, { name: "WHITE SQUARE WITH UPPER LEFT QUADRANT", value: "\u25F0", codepoint: 9712 }, { name: "WHITE SQUARE WITH LOWER LEFT QUADRANT", value: "\u25F1", codepoint: 9713 }, { name: "WHITE SQUARE WITH LOWER RIGHT QUADRANT", value: "\u25F2", codepoint: 9714 }, { name: "WHITE SQUARE WITH UPPER RIGHT QUADRANT", value: "\u25F3", codepoint: 9715 }, { name: "WHITE CIRCLE WITH UPPER LEFT QUADRANT", value: "\u25F4", codepoint: 9716 }, { name: "WHITE CIRCLE WITH LOWER LEFT QUADRANT", value: "\u25F5", codepoint: 9717 }, { name: "WHITE CIRCLE WITH LOWER RIGHT QUADRANT", value: "\u25F6", codepoint: 9718 }, { name: "WHITE CIRCLE WITH UPPER RIGHT QUADRANT", value: "\u25F7", codepoint: 9719 }, { name: "UPPER LEFT TRIANGLE", value: "\u25F8", codepoint: 9720 }, { name: "UPPER RIGHT TRIANGLE", value: "\u25F9", codepoint: 9721 }, { name: "LOWER LEFT TRIANGLE", value: "\u25FA", codepoint: 9722 }, { name: "LOWER RIGHT TRIANGLE", value: "\u25FF", codepoint: 9727 } ] }, { name: "Ideographic", symbols: [ { name: "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT", value: "\u2FF0", codepoint: 12272 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW", value: "\u2FF1", codepoint: 12273 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT", value: "\u2FF2", codepoint: 12274 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW", value: "\u2FF3", codepoint: 12275 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND", value: "\u2FF4", codepoint: 12276 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE", value: "\u2FF5", codepoint: 12277 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW", value: "\u2FF6", codepoint: 12278 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT", value: "\u2FF7", codepoint: 12279 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT", value: "\u2FF8", codepoint: 12280 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT", value: "\u2FF9", codepoint: 12281 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT", value: "\u2FFA", codepoint: 12282 }, { name: "IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID", value: "\u2FFB", codepoint: 12283 } ] } ]; const key$9 = new PluginKey("insert-symbol"); const extension$u = (context) => { const { ui: ui2, events } = context; return { commands: () => { return [new ProsemirrorCommand(EditorCommandId.Symbol, [], performInsertSymbol(key$9), symbolOmniInsert(ui2))]; }, plugins: () => { return [new InsertSymbolPlugin(key$9, new UnicodeSymbolDataProvider(), ui2, events)]; } }; }; function symbolOmniInsert(ui2) { return { name: ui2.context.translateText("Symbol..."), keywords: ["unicode", "special", "character"], description: ui2.context.translateText("Unicode symbol / special character"), group: OmniInsertGroup.Content, priority: 6, image: () => { var _a; return ui2.prefs.darkMode() ? ui2.images.omni_insert.symbol_dark : (_a = ui2.images.omni_insert) == null ? void 0 : _a.symbol; } }; } class UnicodeSymbolDataProvider { constructor() { __publicField(this, "symbolGroups"); __publicField(this, "filterPlaceholderHint", "keyword or codepoint"); __publicField(this, "symbolPreviewStyle", { fontSize: "28px" }); this.symbolGroups = symbols.sort((a2, b2) => a2.name.localeCompare(b2.name)); } insertSymbolTransaction(symbolCharacter, _searchTerm, state) { const tr = state.tr; tr.insertText(symbolCharacter.value); return tr; } symbolGroupNames() { return [kCategoryAll$1, ...this.symbolGroups.map((symbolGroup) => symbolGroup.name)]; } getSymbols(groupName) { if (groupName === void 0 || groupName === kCategoryAll$1) { return this.symbolGroups.map((symbolGroup) => symbolGroup.symbols).flat().sort((a2, b2) => a2.codepoint - b2.codepoint); } return this.symbolGroups.filter((symbolGroup) => groupName === symbolGroup.name).map((symbolGroup) => symbolGroup.symbols).flat(); } filterSymbols(filterText, symbols2) { const codepoint = parseCodepoint(filterText); const filteredSymbols = symbols2.filter((symbol2) => { if (symbol2.name.includes(filterText.toUpperCase())) { return true; } if (codepoint && symbol2.codepoint === codepoint) { return true; } return false; }); if (filteredSymbols.length === 0 && codepoint !== void 0) { return [ { name: codepoint.toString(16), value: String.fromCodePoint(codepoint), codepoint } ]; } return filteredSymbols; } } const kCategoryAll$1 = "All"; const emojiCompletion = ""; function emojiCompletionHandler(ui2) { return { id: "95A133E1-968B-4D96-8849-4A325FF02C11", completions: emojiCompletions(ui2), replacement(schema2, emoji) { if (emoji) { return nodeForEmoji(schema2, emoji, emoji.aliases[0]); } else { return null; } }, view: { component: EmojiView, key: (emoji) => emoji.emoji, width: 200, hideNoResults: true } }; } const kMaxEmojiCompletions = 20; const kEmojiCompletionRegEx = /(^|[^`:]):(\w{2,})$/; function emojiCompletions(ui2) { return (text2, context) => { const match2 = text2.match(kEmojiCompletionRegEx); if (match2) { const prefix2 = match2[2].toLowerCase(); const pos = context.selection.head - prefix2.length - 1; const completions = []; for (const emoji of emojis(ui2.prefs.emojiSkinTone())) { const alias = emoji.aliases.find((a2) => a2.startsWith(prefix2)); if (alias) { completions.push({ ...emoji, aliases: [alias] }); } if (completions.length >= kMaxEmojiCompletions) { break; } } return { pos, token: prefix2, completions: () => Promise.resolve(completions) }; } else { return null; } }; } const EmojiView = (emoji) => { return /* @__PURE__ */ React.createElement("div", { className: "pm-completion-list-item-text pm-emoji-font" }, emoji.emoji, "\xA0:", emoji.aliases[0], ":"); }; function emojiSkintonePreferenceCompletionHandler(ui2) { return { id: "15E92D42-8006-40F4-8FFD-6526F6A8A7FD", completions: emojiSkintonePreferenceCompletions(ui2), replacement(schema2, emoji) { if (emoji) { ui2.prefs.setEmojiSkinTone(emoji.skinTone); return nodeForEmoji(schema2, emoji, emoji.aliases[0]); } else { ui2.prefs.setEmojiSkinTone(SkinTone.Default); return null; } }, view: { header: () => ({ component: EmojiSkintonePreferenceHeaderView, height: kHeaderHeight$1 }), component: EmojiSkintonePreferenceView, key: (pref) => pref.skinTone, width: kCellWidth, height: kCellWidth, horizontal: true, horizontalItemWidths: [55] } }; } const kCellWidth = 40; const kHeaderHeight$1 = 20; function emojiSkintonePreferenceCompletions(ui2) { return (_text, context) => { if (ui2.prefs.emojiSkinTone() !== SkinTone.None) { return null; } const range2 = getMarkRange(context.doc.resolve(context.selection.head - 1), context.doc.type.schema.marks.emoji); if (!range2) { return null; } const emojiText = context.doc.textBetween(range2.from, range2.to); const emojiAttrs = getMarkAttrs(context.doc, range2, context.doc.type.schema.marks.emoji); if (!emojiAttrs.prompt) { return null; } const emoji = emojiFromChar(emojiText); if (!(emoji == null ? void 0 : emoji.supportsSkinTone)) { return null; } return { pos: range2.from, token: emojiText, completions: () => Promise.resolve(emojiForAllSkinTones(emoji)) }; }; } const EmojiSkintonePreferenceHeaderView = (props) => { return /* @__PURE__ */ React.createElement("div", { className: "pm-completion-emoji-cell-header pm-light-text-color" }, props.ui.context.translateText("Choose preferred skin tone:")); }; const EmojiSkintonePreferenceView = (emoji) => { return /* @__PURE__ */ React.createElement("div", { className: "pm-completion-list-item-text pm-completion-emoji-cell" }, emoji.emoji); }; const extension$t = (context) => { const { pandocExtensions, ui: ui2 } = context; return { marks: [ { name: "emoji", noSpelling: true, spec: { inclusive: false, noInputRules: true, attrs: { emojihint: {}, prompt: { default: true } }, parseDOM: [ { tag: "span[class*='emoji']", getAttrs(dom) { const el2 = dom; return { emojihint: el2.getAttribute("data-emojihint"), prompt: el2.getAttribute("data-emojiprompt") || false }; } } ], toDOM(mark) { return [ "span", domAttrNoSpelling({ class: "emoji pm-emoji-font", title: ":" + mark.attrs.emojihint + ":", "data-emojihint": mark.attrs.emojihint, "data-emojiprompt": mark.attrs.prompt }) ]; } }, pandoc: { readers: [ { token: PandocTokenType.Span, match: (tok) => { const attrs = pandocAttrReadAST(tok, kEmojiAttr); return attrs.keyvalue.length > 0 && attrs.keyvalue[0][0] === "data-emoji"; }, handler: (schema2) => (writer, tok) => { const attrs = pandocAttrReadAST(tok, kEmojiAttr); const emojihint = attrs.keyvalue[0][1]; const emojiMark = schema2.marks.emoji.create({ emojihint }); writer.openMark(emojiMark); const emojiChar = tok.c[kEmojiContent][0].c; writer.writeText(emojiChar); writer.closeMark(emojiMark); } } ], writer: { priority: 2, write: (output, mark, parent) => { const char2 = fragmentText(parent); const emoji = emojiFromChar(char2); if (emoji) { output.writeToken(PandocTokenType.Span, () => { let alias = emoji.aliases[0]; if (emoji.aliases.length > 1) { if (emoji.aliases.includes(mark.attrs.emojihint)) { alias = mark.attrs.emojihint; } } output.writeAttr("", ["emoji"], [["data-emoji", alias]]); output.writeArray(() => { output.writeText(emoji.emojiRaw); }); }); } else { output.writeInlines(parent); } } } } } ], inputRules: () => { return [ new InputRule(/(^|[^`]):(\w+):$/, (state, match2, start, end) => { const emojiName = match2[2]; const emoji = emojiFromAlias(emojiName.toLowerCase()); if (emoji) { const emojiWithSkinTone2 = emojiWithSkinTonePreference(emoji, ui2.prefs.emojiSkinTone()); const schema2 = state.schema; const tr = state.tr; tr.delete(start + match2[1].length, end); tr.replaceSelectionWith(nodeForEmoji(schema2, emojiWithSkinTone2, emojiName), false); return tr; } else { return null; } }) ]; }, completionHandlers: () => [emojiCompletionHandler(ui2), emojiSkintonePreferenceCompletionHandler(ui2)], fixups: (schema2) => { if (pandocExtensions.emoji) { return [ (tr, fixupContext) => { if (![FixupContext.Save, FixupContext.Load].includes(fixupContext)) { return tr; } const markTr = new MarkTransaction(tr); const textNodes2 = mergedTextNodes( markTr.doc, (_node, _pos, parentNode2) => !!(parentNode2 && parentNode2.type.allowsMarkType(schema2.marks.emoji)) ); textNodes2.forEach((textNode) => { const possibleMarks = /* @__PURE__ */ new Map(); for (const emoji of emojis(ui2.prefs.emojiSkinTone())) { emojiForAllSkinTones(emoji).forEach((skinToneEmoji) => { let charLoc = textNode.text.indexOf(skinToneEmoji.emoji); while (charLoc !== -1) { const from2 = textNode.pos + charLoc; const to = from2 + skinToneEmoji.emoji.length; possibleMarks.set(from2, (possibleMarks.get(from2) || []).concat({ to, emoji: skinToneEmoji })); charLoc = textNode.text.indexOf(skinToneEmoji.emoji, charLoc + 1); } }); } possibleMarks.forEach((possibleEmojis, markFrom) => { const orderedEmojis = possibleEmojis.sort((a2, b2) => b2.to - a2.to); const to = orderedEmojis[0].to; const emoji = orderedEmojis[0].emoji; let existingAttrs = null; if (markTr.doc.rangeHasMark(markFrom, to, schema2.marks.emoji)) { existingAttrs = getMarkAttrs(markTr.doc, { from: markFrom, to }, schema2.marks.emoji); markTr.removeMark(markFrom, to, schema2.marks.emoji); } const mark = schema2.marks.emoji.create({ emojihint: emoji.aliases[0], ...existingAttrs }); if (fixupContext === FixupContext.Load) { markTr.addMark(markFrom, to, mark); } else if (fixupContext === FixupContext.Save) { markTr.addMark(markFrom, markFrom + emoji.emoji.length, mark); } }); }); return tr; } ]; } else { return []; } } }; }; function nodeForEmoji(schema2, emoji, hint, prompt2) { const mark = schema2.marks.emoji.create({ emojihint: hint, prompt: prompt2 }); return schema2.text(emoji.emoji, [mark]); } const insert_symbolEmojiSkintone = ""; const SymbolEmojiPreferencesPanel = React.forwardRef((props, ref) => { const [selectedSkinTone, setSelectedSkinTone] = React.useState(props.prefs.emojiSkinTone()); const [selectSkinTone, setSelectSkinTone] = React.useState(false); const previewEmoji = React.useMemo(() => { const emojiRaw = emojiFromAlias("hand"); return emojiWithSkinTonePreference(emojiRaw, selectedSkinTone); }, [selectedSkinTone]); const previewEmojiWithSkinTones = React.useMemo(() => { return emojiForAllSkinTones(previewEmoji); }, [previewEmoji]); React.useEffect(() => { setSelectSkinTone(false); }, [props.selectedSymbolIndex]); const handleKeyDown2 = (event) => { switch (event.key) { case "ArrowRight": if (selectSkinTone) { setSelectedSkinTone(nextSkinTone()); } break; case "ArrowLeft": if (selectSkinTone) { setSelectedSkinTone(previousSkinTone()); } break; case "Enter": case " ": commitSkinTonePreference(selectedSkinTone); setSelectSkinTone(!selectSkinTone); event.preventDefault(); break; } }; const handleClick2 = (skinTone) => { return () => { commitSkinTonePreference(skinTone); setSelectSkinTone(false); }; }; const handleButtonClick = () => { setSelectSkinTone(true); }; function nextSkinTone() { const index2 = getCurrentSkinToneIndex(); if (index2 + 1 < previewEmojiWithSkinTones.length) { return previewEmojiWithSkinTones[index2 + 1].skinTone; } return selectedSkinTone; } function previousSkinTone() { const index2 = getCurrentSkinToneIndex(); if (index2 - 1 >= 0) { return previewEmojiWithSkinTones[index2 - 1].skinTone; } return selectedSkinTone; } function getCurrentSkinToneIndex() { const index2 = previewEmojiWithSkinTones.findIndex((emoji) => emoji.skinTone === selectedSkinTone); return Math.max(Math.min(index2, previewEmojiWithSkinTones.length), 0); } function skinToneSelectedClass(emoji) { if (selectedSkinTone === emoji.skinTone || selectedSkinTone === SkinTone.None && emoji.skinTone === SkinTone.Default) { return "pm-emoji-skintone-picker-item-selected pm-input-button"; } return ""; } function commitSkinTonePreference(skinTone) { setSelectedSkinTone(skinTone); props.prefs.setEmojiSkinTone(skinTone); props.onPreferencesChanged(); } const skinTonePicker = () => { return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "pm-emoji-skintone-picker pm-input-button" }, previewEmojiWithSkinTones.map((emoji) => { return /* @__PURE__ */ React.createElement( "div", { key: emoji.emoji, className: `pm-emoji-skintone-picker-item ${skinToneSelectedClass(emoji)}`, onClick: handleClick2(emoji.skinTone) }, emoji.emoji ); })), /* @__PURE__ */ React.createElement("div", { className: "pm-emoji-skintone-picker-label pm-light-text-color" }, props.context.translateText("Preferred skin tone"))); }; const currentSkinToneButton = () => { return /* @__PURE__ */ React.createElement( TextButton, { classes: ["pm-text-button", "pm-input-button", "pm-emoji-skintone-picker-button", "pm-light-text-color"], title: selectedSkinTone === SkinTone.None ? props.context.translateText(`${previewEmoji.emoji} Skin tone`) : previewEmoji.emoji, onClick: handleButtonClick, tabIndex: -1 } ); }; return /* @__PURE__ */ React.createElement("div", { className: "pm-emoji-skintone-picker-container pm-emoji-font", onKeyDown: handleKeyDown2, tabIndex: 0, ref }, selectSkinTone ? skinTonePicker() : currentSkinToneButton()); }); const key$8 = new PluginKey("insert-emoji"); const extension$s = (context) => { const { ui: ui2, events } = context; return { commands: () => { return [new ProsemirrorCommand(EditorCommandId.Emoji, [], performInsertSymbol(key$8), emojiOmniInsert(ui2))]; }, plugins: () => { return [new InsertSymbolPlugin(key$8, new EmojiSymbolDataProvider(ui2), ui2, events)]; } }; }; function emojiOmniInsert(ui2) { return { name: ui2.context.translateText("Emoji..."), description: ui2.context.translateText("Image expressing idea, emotion, etc."), group: OmniInsertGroup.Content, priority: 6, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.emoji_dark : ui2.images.omni_insert.emoji }; } class EmojiSymbolDataProvider { constructor(ui2) { __publicField(this, "ui"); __publicField(this, "filterPlaceholderHint", "emoji name"); __publicField(this, "symbolPreviewStyle", { fontSize: "36px" }); __publicField(this, "symbolPreferencesPanel", SymbolEmojiPreferencesPanel); this.ui = ui2; } insertSymbolTransaction(symbolCharacter, searchTerm, state) { const emoji = emojiFromString(symbolCharacter.value, this.skinTone()); const tr = state.tr; if (emoji) { const bestAlias = emoji.aliases.find((alias) => alias.includes(searchTerm)); tr.replaceSelectionWith(nodeForEmoji(state.schema, emoji, bestAlias || emoji.aliases[0], false), false); } else { tr.insertText(symbolCharacter.value); } return tr; } symbolGroupNames() { return [kCategoryAll, ...emojiCategories()]; } getSymbols(groupName) { if (groupName === kCategoryAll || groupName === void 0) { return emojis(this.skinTone()).map((emoji) => symbolForEmoji(emoji)); } else { return emojis(this.skinTone()).filter((emoji) => emoji.category === groupName).map((emoji) => symbolForEmoji(emoji)); } } filterSymbols(filterText, symbols2) { const filteredSymbols = symbols2.filter((symbol2) => { if (symbol2.name.includes(filterText)) { return true; } if (symbol2.aliases && symbol2.aliases.find((alias) => alias.includes(filterText))) { return true; } return false; }); return filteredSymbols; } skinTone() { return this.ui.prefs.emojiSkinTone(); } } const kCategoryAll = "All"; function symbolForEmoji(emoji) { return { name: emoji.description, value: emoji.emoji, markdown: emoji.hasMarkdownRepresentation ? `:${emoji.aliases[0]}:` : void 0, aliases: emoji.aliases, description: emoji.description }; } const extension$r = { commands: () => { return [ new InsertCharacterCommand(EditorCommandId.EmDash, "\u2014", []), new InsertCharacterCommand(EditorCommandId.EnDash, "\u2013", []), new ProsemirrorCommand(EditorCommandId.HardLineBreak, ["Shift-Enter"], hardBreakCommandFn()) ]; } }; const kNbsp = "\xA0"; const kNbspRegEx = /\xA0/g; const extension$q = { commands: () => { return [new InsertCharacterCommand(EditorCommandId.NonBreakingSpace, kNbsp, ["Ctrl-Space", "Ctrl-Shift-Space"])]; }, plugins: () => { return [nonBreakingSpacePastePlugin(), nonBreakingSpaceHighlightPlugin()]; } }; const pastePluginKey = new PluginKey("nbsp-paste"); function nonBreakingSpacePastePlugin() { return new Plugin({ key: pastePluginKey, props: { transformPastedHTML: (html2) => { return html2.replace(/<span> <\/span>/g, " "); } } }); } const highlightPluginKey = new PluginKey("nbsp-highlight"); function nonBreakingSpaceHighlightPlugin() { return new Plugin({ key: highlightPluginKey, state: { init(_config, instance) { return DecorationSet.create(instance.doc, highlightNode(instance.doc)); }, apply(tr, set2, oldState, newState) { set2 = set2.map(tr.mapping, tr.doc); if (tr.docChanged) { const decorations = []; forChangedNodes( oldState, newState, (node2) => node2.isTextblock && node2.textContent.includes(kNbsp), (node2, pos) => { decorations.push(...highlightNode(node2, pos + 1)); } ); set2 = set2.add(tr.doc, decorations); } return set2; } }, props: { decorations(state) { return highlightPluginKey.getState(state); } } }); } function highlightNode(node2, nodePos = 0) { const decorations = []; const textNodes2 = mergedTextNodes(node2); textNodes2.forEach((textNode) => { const text2 = textNode.text; let m2; kNbspRegEx.lastIndex = 0; while (m2 = kNbspRegEx.exec(text2)) { if (m2[0] === "") { break; } const from2 = nodePos + textNode.pos + m2.index; const to = nodePos + textNode.pos + m2.index + m2[0].length; const classes = ["pm-nbsp", "pm-invisible-text-color"]; decorations.push(Decoration.inline(from2, to, { class: classes.join(" ") })); } kNbspRegEx.lastIndex = 0; }); return decorations; } const extension$p = { plugins: (schema2) => { return [ new Plugin({ key: new PluginKey("remove-section"), appendTransaction: (transactions, oldState, newState) => { if (!transactionsDocChanged(transactions)) { return void 0; } if (isSectionRemoval(transactions, oldState)) { const fullySelectedDiv = fullySelectedDivSection(oldState); if (fullySelectedDiv) { const tr = newState.tr; tr.replaceSelectionWith( schema2.nodes.div.create( fullySelectedDiv.node.attrs, schema2.nodes.paragraph.create() ) ); return tr; } else if (isEmptyHeadingSelection(newState.selection)) { const tr = newState.tr; const $head = tr.selection.$head; const start = $head.start(); const end = start + 2; tr.deleteRange(start, end); return tr; } else { return void 0; } } else { return void 0; } } }) ]; } }; function isSectionRemoval(transactions, oldState) { let isRemoval = false; if (transactions.length === 1 && transactions[0].steps.length === 1) { let isDeleteStep = false; const step2 = transactions[0].steps[0]; if (step2 instanceof ReplaceStep) { isDeleteStep = step2.slice.content.size === 0; } else if (step2 instanceof ReplaceAroundStep) { const { gapFrom, gapTo } = step2; isDeleteStep = gapFrom === gapTo; } if (isDeleteStep) { let numBlocks = 0; const { from: from2, to } = step2; oldState.doc.nodesBetween(from2, to, (node2) => { if (isRemoval) { return false; } if (isList(node2)) { isRemoval = true; return false; } else if (node2.isTextblock) { if (numBlocks++ >= 1) { isRemoval = true; return false; } } return true; }); } } return isRemoval; } function fullySelectedDivSection(state) { if (!state.selection.empty && state.schema.nodes.div) { const div2 = findParentNodeOfType_1(state.schema.nodes.div)(state.selection); if (div2) { let divSelFrom = div2.start + 1; let divSelTo = div2.pos + div2.node.nodeSize - 2; if (isList(div2.node.firstChild)) { divSelFrom += 2; } if (isList(div2.node.lastChild)) { divSelTo -= 2; } if (state.selection.from === divSelFrom && state.selection.to === divSelTo) { return div2; } else { return false; } } } return false; } function isEmptyHeadingSelection(selection) { const parent = selection.$head.parent; const schema2 = parent.type.schema; return selection.empty && parent.type === schema2.nodes.heading && parent.content.size === 0; } const extension$o = (context) => { const { ui: ui2, format: format2, pandocExtensions } = context; if (!format2.docTypes.includes(kPresentationDocType)) { return null; } return { commands: () => { const cmds = [ new ProsemirrorCommand(EditorCommandId.InsertSlidePause, [], insertSlidePause, { name: ui2.context.translateText("Slide Pause"), description: ui2.context.translateText("Pause after content"), group: OmniInsertGroup.Content, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.slide_pause_dark : ui2.images.omni_insert.slide_pause }) ]; if (pandocExtensions.fenced_divs) { cmds.push(new ProsemirrorCommand(EditorCommandId.InsertSlideNotes, [], insertSlideNotes, { name: ui2.context.translateText("Slide Notes"), description: ui2.context.translateText("Slide speaker notes"), group: OmniInsertGroup.Content, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.slide_notes_dark : ui2.images.omni_insert.slide_notes })); cmds.push(new ProsemirrorCommand(EditorCommandId.InsertSlideColumns, [], insertSlideColumns, { name: ui2.context.translateText("Slide Columns"), description: ui2.context.translateText("Two column layout"), group: OmniInsertGroup.Content, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.slide_columns_dark : ui2.images.omni_insert.slide_columns })); } return cmds; } }; }; function insertSlideColumns(state, dispatch) { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.div)) { return false; } if (dispatch) { wrapIn(state.schema.nodes.div)(state, (tr) => { const div2 = findParentNodeOfType_1(state.schema.nodes.div)(tr.selection); tr.setNodeMarkup(div2.pos, div2.node.type, { classes: ["columns"] }); const columnAttrs = { classes: ["column"], keyvalue: [["width", "50%"]] }; const columnsContent = [ state.schema.nodes.div.create( columnAttrs, state.schema.nodes.paragraph.create() ), state.schema.nodes.div.create( columnAttrs, state.schema.nodes.paragraph.create() ) ]; tr.replaceWith(div2.start, div2.start + 1, columnsContent); setTextSelection_1(div2.start + 1)(tr); dispatch(tr); }); } return true; } function insertSlidePause(state, dispatch) { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.paragraph)) { return false; } if (dispatch) { const node2 = schema2.nodes.paragraph.createAndFill(null, schema2.text(". . .")); if (node2) { const tr = state.tr; tr.replaceSelectionWith(node2); setTextSelection_1(tr.selection.from - 1, -1)(tr); tr.replaceSelectionWith(schema2.nodes.paragraph.create()); setTextSelection_1(tr.selection.from - 1, -1)(tr); dispatch(tr); } } return true; } function insertSlideNotes(state, dispatch) { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.div)) { return false; } if (dispatch) { const node2 = schema2.nodes.div.createAndFill({ classes: ["notes"] }, schema2.nodes.paragraph.create()); if (node2) { const tr = state.tr; tr.replaceSelectionWith(node2); setTextSelection_1(state.selection.from + 1, 1)(tr); dispatch(tr); } } return true; } const extension$n = { marks: [ { name: "strikeout", spec: { group: "formatting", parseDOM: [ { tag: "del" }, { tag: "s" }, { style: "text-decoration", getAttrs: (value) => value === "line-through" && null } ], toDOM() { return ["del"]; } }, pandoc: { readers: [ { token: PandocTokenType.Strikeout, mark: "strikeout" } ], writer: { priority: 6, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.Strikeout, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Strikeout, [], schema2.marks.strikeout)]; }, inputRules: (schema2, filter) => { return [delimiterMarkInputRule("~~", schema2.marks.strikeout, filter, "`", true)]; } }; const markStrikeout = extensionIfEnabled(extension$n, "strikeout"); const extension$m = { marks: [ { name: "superscript", spec: { group: "formatting", parseDOM: [{ tag: "sup" }], toDOM() { return ["sup"]; } }, pandoc: { readers: [ { token: PandocTokenType.Superscript, mark: "superscript" } ], writer: { priority: 15, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.Superscript, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Superscript, [], schema2.marks.superscript)]; }, inputRules: (schema2, filter) => { return [delimiterMarkInputRule("\\^", schema2.marks.superscript, filter, "`", true)]; } }; const markSuperscript = extensionIfEnabled(extension$m, "superscript"); const extension$l = { marks: [ { name: "subscript", spec: { group: "formatting", parseDOM: [{ tag: "sub" }], toDOM() { return ["sub"]; } }, pandoc: { readers: [ { token: PandocTokenType.Subscript, mark: "subscript" } ], writer: { priority: 15, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.Subscript, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Subscript, [], schema2.marks.subscript)]; }, inputRules: (schema2, filter) => { return [delimiterMarkInputRule("\\~", schema2.marks.subscript, filter, "`\\~-", true)]; } }; const markSubscript = extensionIfEnabled(extension$l, "subscript"); const smallcapsStyles = ""; const extension$k = { marks: [ { name: "smallcaps", spec: { group: "formatting", parseDOM: [ { tag: "span[class*='smallcaps']" }, { style: "font-variant", getAttrs: (value) => value === "small-caps" && null } ], toDOM() { return ["span", { class: "smallcaps" }]; } }, pandoc: { readers: [ { token: PandocTokenType.SmallCaps, mark: "smallcaps" } ], writer: { priority: 8, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.SmallCaps, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Smallcaps, [], schema2.marks.smallcaps)]; } }; const markSmallcaps = extensionIfEnabled(extension$k, ["bracketed_spans", "native_spans"]); const underlineStyles = ""; const extension$j = { marks: [ { name: "underline", spec: { parseDOM: [ { tag: "span[class*='underline']" }, { tag: "span[class*='ul']" }, { tag: "u" }, { tag: "ins" } ], toDOM() { return ["span", { class: "underline" }]; } }, pandoc: { readers: [ { token: PandocTokenType.Underline, mark: "underline" } ], writer: { priority: 7, write: (output, _mark, parent) => { output.writeMark(PandocTokenType.Underline, parent); } } } } ], commands: (schema2) => { return [new MarkCommand(EditorCommandId.Underline, kPlatformMac ? ["Mod-u"] : [], schema2.marks.underline)]; } }; const markUnderline = extensionIfEnabled(extension$j, ["bracketed_spans", "native_spans"]); const kRawInlineFormat = 0; const kRawInlineContent = 1; const extension$i = (context) => { const { pandocExtensions, pandocCapabilities, ui: ui2 } = context; return { marks: [ { name: "raw_inline", noInputRules: true, noSpelling: true, spec: { inclusive: false, excludes: "formatting", attrs: { format: {} }, parseDOM: [ { tag: "span[class*='raw-inline']", getAttrs(dom) { const el2 = dom; return { format: el2.getAttribute("data-format") }; } } ], toDOM(mark) { const attr = { class: "raw-inline pm-fixedwidth-font pm-markup-text-color", "data-format": mark.attrs.format }; return ["span", domAttrNoSpelling(attr)]; } }, pandoc: { readers: [ { token: PandocTokenType.RawInline, mark: "raw_inline", getAttrs: (tok) => { return { format: tok.c[kRawInlineFormat] }; }, getText: (tok) => { return tok.c[kRawInlineContent]; } } ], writer: { priority: 1, write: (output, mark, parent) => { const raw = fragmentText(parent); output.writeToken(PandocTokenType.RawInline, () => { output.write(mark.attrs.format); output.write(raw); }); } } } } ], commands: () => { if (pandocExtensions.raw_attribute) { return [new RawInlineCommand(EditorCommandId.RawInline, "", ui2, pandocCapabilities.output_formats)]; } else { return []; } } }; }; class RawInlineInsertCommand extends ProsemirrorCommand { constructor(id2, keymap2, markType, insert2) { super(id2, keymap2, (state, dispatch) => { if (!this.isActive(state) && !canInsertNode(state, markType.schema.nodes.text)) { return false; } if (!toggleMarkType(this.markType)(state)) { return false; } if (dispatch) { const tr = state.tr; if (this.isActive(state)) { const range2 = getMarkRange(state.selection.$head, this.markType); if (range2) { tr.removeMark(range2.from, range2.to, this.markType); } } else if (!tr.selection.empty) { const mark = markType.create(); tr.addMark(tr.selection.from, tr.selection.to, mark); } else { insert2(tr); } dispatch(tr); } return true; }); __publicField(this, "markType"); this.markType = markType; } isActive(state) { return markIsActive(state, this.markType); } } class RawInlineCommand extends ProsemirrorCommand { constructor(id2, defaultFormat, ui2, outputFormats) { super( id2, [], (state, dispatch, view) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.text) || !toggleMarkType(schema2.marks.raw_inline)(state)) { return false; } async function asyncInlineRaw() { if (dispatch) { const isActive = markIsActive(state, schema2.marks.raw_inline); let range2 = { from: state.selection.from, to: state.selection.to }; if (isActive) { range2 = getMarkRange(state.selection.$from, schema2.marks.raw_inline); } let raw = { content: "", format: defaultFormat }; raw.content = state.doc.textBetween(range2.from, range2.to); if (isActive) { raw = { ...raw, ...getMarkAttrs(state.doc, state.selection, schema2.marks.raw_inline) }; } const result = await ui2.dialogs.editRawInline(raw, outputFormats); if (result) { const tr = state.tr; tr.removeMark(range2.from, range2.to, schema2.marks.raw_inline); if (result.action === "edit") { const mark = schema2.marks.raw_inline.create({ format: result.raw.format }); const node2 = schema2.text(result.raw.content, [mark]); if (raw.content) { tr.replaceRangeWith(range2.from, range2.to, node2); } else { tr.replaceSelectionWith(node2, false); } } dispatch(tr); } if (view) { view.focus(); } } } asyncInlineRaw(); return true; }, { name: ui2.context.translateText("Raw Inline..."), description: ui2.context.translateText("Raw inline content"), group: OmniInsertGroup.Content, priority: 0, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.raw_inline_dark : ui2.images.omni_insert.raw_inline } ); } } function markHighlightDecorations(markRange, text2, re2, className) { const decorations = []; re2.lastIndex = 0; let match2 = re2.exec(text2); while (match2) { decorations.push( Decoration.inline(markRange.from + match2.index, markRange.from + re2.lastIndex, { class: className }) ); match2 = re2.exec(text2); } re2.lastIndex = 0; return decorations; } function markHighlightPlugin(key2, markType, highlighter) { function decorationsForDoc(doc2) { let decorations = []; findChildrenByMark_1(doc2, markType, true).forEach((markedNode) => { decorations = decorations.concat(markDecorations(doc2, markType, markedNode.pos, highlighter)); }); return DecorationSet.create(doc2, decorations); } return new Plugin({ key: key2, state: { init(_config, instance) { return decorationsForDoc(instance.doc); }, apply(tr, set2, oldState, newState) { if (!tr.docChanged) { return set2.map(tr.mapping, tr.doc); } if (tr.steps.some( (step2) => step2 instanceof AddMarkStep && step2.mark.type === markType || step2 instanceof RemoveMarkStep && step2.mark.type === markType )) { return decorationsForDoc(newState.doc); } else { set2 = set2.map(tr.mapping, tr.doc); const rehighlightParent = (pos) => { const resolvedPos = tr.doc.resolve(pos); const parent = resolvedPos.node(); const from2 = resolvedPos.start(); const marks = findChildrenByMark_1(parent, markType); marks.forEach((mark) => { const markRange = getMarkRange(tr.doc.resolve(from2 + mark.pos), markType); const removeDecorations = set2.find(markRange.from, markRange.to); set2 = set2.remove(removeDecorations); const addDecorations = markDecorations(tr.doc, markType, markRange.from, highlighter); set2 = set2.add(tr.doc, addDecorations); }); }; forChangedNodes( oldState, newState, (node2) => node2.type.allowsMarkType(markType), (node2, pos) => { if (newState.doc.rangeHasMark(pos, pos + node2.nodeSize, markType)) { rehighlightParent(pos); } } ); return set2; } } }, props: { decorations(state) { return key2.getState(state); } } }); } function markDecorations(doc2, markType, pos, highlighter) { const markRange = getMarkRange(doc2.resolve(pos), markType); if (markRange) { const attrs = getMarkAttrs(doc2, markRange, markType); const text2 = doc2.textBetween(markRange.from, markRange.to); return highlighter(text2, attrs, markRange); } else { return []; } } function texLength(text2) { if (text2.includes("\n")) { return text2.length; } let braceLevel = 0; let bracketLevel = 0; let i2; for (i2 = 0; i2 < text2.length; i2++) { const ch2 = text2[i2]; if (i2 === 0 && ch2 !== "\\") { return 0; } if (i2 === 1 && !isLetter(ch2)) { return 0; } const inBraces = braceLevel >= 1; const inBrackets = bracketLevel >= 1; if (i2 > 0 && ch2 === " " && text2[i2 + 1] === "\\") { i2++; continue; } if (i2 > 0 && !isLetter(ch2) && ch2 !== "\\" && ch2 !== "{" && ch2 !== "[" && !inBraces && !inBrackets) { return i2; } if (ch2 === "{") { braceLevel++; } else if (ch2 === "}") { braceLevel--; } else if (ch2 === "[") { bracketLevel++; } else if (ch2 === "]") { bracketLevel--; } } if (braceLevel === 0 && bracketLevel === 0) { return i2; } else { return -1; } } const LetterRegex = /[A-Za-z]/; function isLetter(ch2) { return LetterRegex.test(ch2); } const kTexPlaceholder = "tex"; const extension$h = (context) => { const { pandocExtensions } = context; if (!pandocExtensions.raw_tex) { return null; } return { marks: [ { name: "raw_tex", noInputRules: true, noSpelling: true, spec: { inclusive: true, excludes: "formatting", attrs: {}, parseDOM: [ { tag: "span[class*='raw-tex']" } ], toDOM() { const attr = { class: "raw-tex pm-fixedwidth-font pm-light-text-color" }; return ["span", domAttrNoSpelling(attr)]; } }, pandoc: { readers: [ { token: PandocTokenType.RawInline, mark: "raw_tex", match: (tok) => { const format2 = tok.c[kRawInlineFormat]; return format2 === kTexFormat; }, getText: (tok) => { return tok.c[kRawInlineContent]; } } ], writer: { priority: 1, write: (output, _mark, parent) => { output.writeRawMarkdown(parent); } } } } ], commands: (schema2) => { return [new InsertInlineLatexCommand(schema2)]; }, appendMarkTransaction: (schema2) => { return [ { name: "remove-raw-tex-marks", filter: (node2) => node2.isTextblock && node2.type.allowsMarkType(schema2.marks.raw_tex), append: (tr, node2, pos) => { splitInvalidatedMarks(tr, node2, pos, texLength, schema2.marks.raw_tex); } } ]; }, inputRules: (schema2, filter) => { return [texInputRule(schema2, filter)]; }, plugins: (schema2) => { const plugins = []; plugins.push(latexHighlightingPlugin(schema2)); const braces = /* @__PURE__ */ new Map([ ["{", "}"], ["[", "]"] ]); plugins.push( inputRules({ rules: [ new InputRule(/(^|[^^\\])([{[])$/, (state, match2, start) => { if (markIsActive(state, schema2.marks.raw_tex)) { const tr = state.tr; tr.insertText(match2[2] + braces.get(match2[2])); setTextSelection_1(start + match2[1].length + 1)(tr); return tr; } else { return null; } }) ] }) ); return plugins; } }; }; function texInputRule(schema2, filter) { return new InputRule(/(^| )\\$/, (state) => { const rawTexMark = schema2.marks.raw_tex; if (state.selection.empty && toggleMarkType(rawTexMark)(state)) { const $head = state.selection.$head; const texText = "\\" + $head.parent.textContent.slice($head.parentOffset); if (!texText.startsWith("\\ ")) { const texMatchLength = texLength(texText); if (texMatchLength === 0 || !filter(state, state.selection.from, state.selection.from + texMatchLength)) { return null; } } const tr = state.tr; const mark = schema2.marks.raw_tex.create(); tr.addStoredMark(mark); tr.insertText("\\"); const { parent, parentOffset } = tr.selection.$head; const text2 = parent.textContent.slice(parentOffset - 1); if (text2.length > 0) { const length2 = texLength(text2); if (length2 > 1) { const startTex = tr.selection.from - 1; tr.addMark(startTex, startTex + length2, mark); return tr; } } if (text2 === "\\" || text2.startsWith("\\ ")) { tr.insertText(kTexPlaceholder); setTexSelectionAfterInsert(tr); return tr; } } return null; }); } class InsertInlineLatexCommand extends RawInlineInsertCommand { constructor(schema2) { super(EditorCommandId.TexInline, [], schema2.marks.raw_tex, (tr) => { const mark = schema2.marks.raw_tex.create(); const tex = "\\" + kTexPlaceholder; const node2 = schema2.text(tex, [mark]); tr.replaceSelectionWith(node2, false); setTexSelectionAfterInsert(tr); }); } } function setTexSelectionAfterInsert(tr) { tr.setSelection( new TextSelection(tr.doc.resolve(tr.selection.from - kTexPlaceholder.length), tr.doc.resolve(tr.selection.from)) ); } const key$7 = new PluginKey("latex-highlight"); function latexHighlightingPlugin(schema2) { return markHighlightPlugin(key$7, schema2.marks.raw_tex, (text2, _attrs, markRange) => { const kIdClass = "pm-markup-text-color"; return markHighlightDecorations(markRange, text2, /\\[A-Za-z]+/g, kIdClass); }); } const extension$g = (context) => { const { pandocExtensions } = context; return { marks: [ { name: "raw_html", noInputRules: true, noSpelling: true, spec: { inclusive: false, excludes: "formatting", parseDOM: [ { tag: "span[class*='raw-html']", getAttrs() { return {}; } } ], toDOM() { const attr = { class: "raw-html pm-fixedwidth-font pm-markup-text-color" }; return ["span", domAttrNoSpelling(attr)]; } }, pandoc: { readers: [ { token: PandocTokenType.RawInline, match: (tok) => { const format2 = tok.c[kRawInlineFormat]; return isRawHTMLFormat(format2); }, handler: (schema2) => { return (writer, tok) => { const html2 = tok.c[kRawInlineContent]; if (writer.hasInlineHTMLWriter(html2)) { writer.writeInlineHTML(html2); } else { writeInlneHTML(schema2, html2, writer); } }; } } ], inlineHTMLReader: (schema2, html2, writer) => { const isSingleTag = tagStartLoc(html2, html2.length - 2) === 0; if (isSingleTag && writer) { writeInlneHTML(schema2, html2, writer); } return isSingleTag; }, writer: { priority: 1, write: (output, _mark, parent) => { const raw = fragmentText(parent); if (raw.startsWith("<") && raw.endsWith(">")) { output.writeRawMarkdown(parent); } else { output.writeToken(PandocTokenType.RawInline, () => { output.write("html"); output.write(raw); }); } } } } } ], inputRules: (schema2, filter) => { if (pandocExtensions.raw_html) { return [rawHtmlInputRule(schema2, filter)]; } else { return []; } } }; }; function writeInlneHTML(schema2, html2, writer) { const mark = schema2.marks.raw_html.create(); writer.openMark(mark); writer.writeText(html2); writer.closeMark(mark); } function rawHtmlInputRule(schema2, filter) { return new InputRule(/>$/, (state, _match, start, end) => { const rawhtmlMark = state.schema.marks.raw_html; if (state.selection.empty && toggleMarkType(rawhtmlMark)(state) && filter(state, start, end)) { const { parent, parentOffset } = state.selection.$head; const text2 = parent.textContent; const endLoc = parentOffset - 1; const tag = tagInfo(text2, endLoc); if (tag) { const tr = state.tr; tr.insertText(">"); start = tr.selection.from - (tag.end - tag.start + 1); tr.addMark(start, end + 1, rawhtmlMark.create()); tr.removeStoredMark(rawhtmlMark); if (!tag.close && !tag.void) { const endTag = schema2.text(`</${tag.name}>`); tr.replaceSelectionWith(endTag, false); setTextSelection_1(tr.selection.from - endTag.textContent.length)(tr); tr.addMark(tr.selection.from, tr.selection.from + endTag.textContent.length, rawhtmlMark.create()); tr.removeStoredMark(rawhtmlMark); } return tr; } } return null; }); } function tagInfo(text2, endLoc) { const startLoc = tagStartLoc(text2, endLoc); if (startLoc !== -1) { if (text2.charAt(startLoc - 1) === "`") { return null; } const tagText = text2.substring(startLoc, endLoc + 1); const match2 = tagText.match(/<(\/?)(\w+)/); if (match2) { const name = match2[2]; if (isHTMLTag(name)) { return { name: match2[2], close: match2[1].length > 0, void: isVoidTag(name), start: startLoc, end: endLoc + 1 }; } } } return null; } function tagStartLoc(text2, endLoc) { let inSingleQuote = false; let inDoubleQuote = false; let i2; for (i2 = endLoc; i2 >= 0; i2--) { const ch2 = text2[i2]; if (ch2 === ">" && !inSingleQuote && !inDoubleQuote) { return -1; } if (ch2 === "<" && !inSingleQuote && !inDoubleQuote) { return i2; } if (ch2 === "'") { if (inSingleQuote) { inSingleQuote = false; } else if (!inDoubleQuote) { inSingleQuote = true; } } else if (ch2 === '"') { if (inDoubleQuote) { inDoubleQuote = false; } else if (!inSingleQuote) { inDoubleQuote = true; } } } return -1; } function isHTMLTag(tag) { return [ "a", "article", "aside", "body", "br", "details", "div", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "footer", "nav", "p", "section", "span", "summary", "base", "basefont", "link", "meta", "style", "title", "button", "datalist", "fieldset", "form", "input", "keygen", "label", "legend", "meter", "optgroup", "option", "select", "textarea", "abbr", "acronym", "address", "b", "bdi", "bdo", "big", "blockquote", "center", "cite", "code", "del", "dfn", "em", "font", "i", "ins", "kbd", "mark", "output", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "small", "strike", "strong", "sub", "sup", "tt", "u", "var", "wbr", "dd", "dir", "dl", "dt", "li", "ol", "menu", "ul", "caption", "col", "colgroup", "table", "tbody", "td", "tfoot", "thead", "th", "tr", "script", "noscript", "applet", "area", "audio", "canvas", "embed", "figcaption", "figure", "frame", "frameset", "iframe", "img", "map", "noframes", "object", "param", "source", "time", "video" ].includes(tag.toLowerCase()); } function isVoidTag(tag) { return [ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ].includes(tag.toLowerCase()); } class InsertInlineMathCommand extends ProsemirrorCommand { constructor(ui2) { super(EditorCommandId.InlineMath, [], insertMathCommand(MathType.Inline, false), inlineMathOmniInsert(ui2)); } } class InsertDisplayMathCommand extends ProsemirrorCommand { constructor(ui2, allowNewline) { super( EditorCommandId.DisplayMath, [], insertMathCommand(MathType.Display, allowNewline), displayMathOmniInsert(ui2) ); } } function insertMathCommand(type2, allowNewline) { return (state, dispatch) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.text) || !toggleMarkType(schema2.marks.math)(state)) { return false; } if (dispatch) { const tr = state.tr; insertMath(state.selection, type2, allowNewline, tr); dispatch(tr); } return true; }; } function inlineMathOmniInsert(ui2) { return { name: ui2.context.translateText("Inline Math"), keywords: [ui2.context.translateText("equation")], description: ui2.context.translateText("Math within a line or paragraph"), group: OmniInsertGroup.Math, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.math_inline_dark : ui2.images.omni_insert.math_inline }; } function displayMathOmniInsert(ui2) { return { name: ui2.context.translateText("Display Math"), keywords: [ui2.context.translateText("equation")], description: ui2.context.translateText("Math set apart from the main text"), group: OmniInsertGroup.Math, priority: 1, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.math_display_dark : ui2.images.omni_insert.math_display }; } function insertMath(selection, type2, allowNewline, tr) { const schema2 = tr.doc.type.schema; let content = ""; if (type2 === MathType.Display) { const para2 = findParentNodeOfType_1(schema2.nodes.paragraph)(selection); if (allowNewline && para2 && !para2.node.textContent.length) { content = "\n\n"; } } const delim = delimiterForType(type2); const mathText = schema2.text(delim + content + delim); tr.replaceSelectionWith(mathText, false); const mathMark = schema2.marks.math.create({ type: type2 }); const from2 = tr.selection.head - content.length - delim.length * 2; const to = from2 + delim.length * 2 + content.length; tr.addMark(from2, to, mathMark); const pos = tr.mapping.map(selection.head) - delim.length - (content ? 1 : 0); return setTextSelection_1(pos)(tr).scrollIntoView(); } function editMathAttributesEnabled(format2, state, range2) { if (format2.docTypes.includes(kQuartoDocType)) { if (!range2) { range2 = getMarkRange(state.selection.$from, state.schema.marks.math); } if (range2) { const mathAttrs = getMarkAttrs(state.doc, range2, state.schema.marks.math); return mathAttrs.type === MathType.Display; } else { return false; } } else { return false; } } function editMathAttributes(ui2) { return (state, dispatch, view) => { const mathRange = getMarkRange( state.doc.resolve(state.selection.from + 1), state.schema.marks.math ); if (!mathRange) { return true; } async function asyncEditMath() { if (dispatch) { const mathAttrs = getMarkAttrs(state.doc, mathRange, state.schema.marks.math); const id2 = await ui2.dialogs.editMath(mathAttrs.id || ""); if (id2 !== null) { const tr = state.tr; const mark = state.schema.marks.math.create({ ...mathAttrs, id: id2.length > 0 ? id2 : null }); tr.removeMark(mathRange.from, mathRange.to, state.schema.marks.math); tr.addMark(mathRange.from, mathRange.to, mark); dispatch(tr); } if (view) { view.focus(); } } } asyncEditMath(); return true; }; } function mathAppendMarkTransaction() { return { name: "math-marks", filter: (node2) => node2.isTextblock && node2.type.allowsMarkType(node2.type.schema.marks.math), append: (tr, node2, pos) => { const schema2 = node2.type.schema; const maths = findChildrenByMark_1(node2, schema2.marks.math, true); for (const math of maths) { const from2 = pos + 1 + math.pos; const mathRange = getMarkRange(tr.doc.resolve(from2), schema2.marks.math); if (mathRange) { const mathAttr = getMarkAttrs(tr.doc, mathRange, schema2.marks.math); if (mathAttr.type === MathType.Inline) { const mathDelim = delimiterForType(mathAttr.type); const mathText = tr.doc.textBetween(mathRange.from, mathRange.to); const charAfter = tr.doc.textBetween(mathRange.to, mathRange.to + 1); const noDelims = !mathText.startsWith(mathDelim) || !mathText.endsWith(mathDelim); const selectionIsWithin2 = selectionIsWithinRange(tr.selection, mathRange); const spaceAtLeft = !selectionIsWithin2 && mathAttr.type === MathType.Inline && mathText.startsWith(mathDelim + " "); const spaceAtRight = !selectionIsWithin2 && mathAttr.type === MathType.Inline && mathText.endsWith(" " + mathDelim); const numberAfter = mathAttr.type === MathType.Inline && /\d/.test(charAfter); if (noDelims || spaceAtLeft || spaceAtRight || numberAfter) { tr.removeMark(mathRange.from, mathRange.to, schema2.marks.math); tr.removeStoredMark(schema2.marks.math); } } } } } }; } const key$6 = new PluginKey("math-highlight"); function mathHighlightPlugin(schema2) { return markHighlightPlugin(key$6, schema2.marks.math, (_text, attrs, markRange) => { const kDelimClass = "pm-markup-text-color"; const delim = delimiterForType(String(attrs.type)); if (markRange.to - markRange.from === delim.length * 2) { return [Decoration.inline(markRange.from, markRange.to, { class: kDelimClass })]; } else { return [ Decoration.inline(markRange.from, markRange.from + delim.length, { class: kDelimClass }), Decoration.inline(markRange.to - delim.length, markRange.to, { class: kDelimClass }) ]; } }); } const kMathPopupVerticalOffset = 10; const kMathPopupInputDebuounceMs = 250; const key$5 = new PluginKey("math-preview"); class MathPopupPlugin extends Plugin { constructor(ui2, math, events, onHover) { super({ key: key$5, view: () => { return { update: lodash_debounce( (view) => { this.view = view; this.updatePopup(); }, kMathPopupInputDebuounceMs, { leading: true, trailing: true } ), destroy: () => { clearInterval(this.updatePopupTimer); this.scrollUnsubscribe(); this.resizeUnsubscribe(); this.closePopup(); } }; }, props: { handleDOMEvents: { ...onHover ? { mousemove: lodash_debounce((view, event) => { const ev = event; const pos = view.posAtCoords({ top: ev.clientY, left: ev.clientX }); if (pos && pos.inside !== -1) { this.updatePopup(view.state.doc.resolve(pos.pos)); } return false; }, kMathPopupInputDebuounceMs) } : {} } } }); __publicField(this, "ui"); __publicField(this, "math"); __publicField(this, "view", null); __publicField(this, "popup", null); __publicField(this, "lastRenderedMath", null); __publicField(this, "updatePopupTimer"); __publicField(this, "scrollUnsubscribe"); __publicField(this, "resizeUnsubscribe"); this.ui = ui2; this.math = math; this.updatePopup = this.updatePopup.bind(this); this.updatePopupTimer = window.setInterval(this.updatePopup, 100); this.scrollUnsubscribe = events.subscribe(ScrollEvent, () => this.updatePopup()); this.resizeUnsubscribe = events.subscribe(ResizeEvent, () => this.updatePopup()); } updatePopup($mousePos) { var _a; if (!this.view) { return; } const state = this.view.state; const schema2 = state.schema; let range2 = false; if ($mousePos) { range2 = getMarkRange($mousePos, schema2.marks.math); } if (!range2) { range2 = getMarkRange(state.selection.$from, schema2.marks.math); } if (!range2) { this.closePopup(); return; } if (!this.ui.prefs.equationPreview()) { this.closePopup(); return; } const inlineMath = state.doc.textBetween(range2.from, range2.to); if (inlineMath.match(/^\${1,2}\s*\${1,2}$/)) { this.closePopup(); return; } const styles2 = popupPositionStyles(this.view, range2); if (this.popup) { applyStyles(this.popup, [], styles2); } else { this.popup = createPopup(this.view, ["pm-math-preview"], void 0, { ...styles2, visibility: "hidden" }); (_a = this.view.dom.parentNode) == null ? void 0 : _a.appendChild(this.popup); } if (inlineMath !== this.lastRenderedMath && this.popup) { this.math.typeset(this.popup, inlineMath, true).then((error) => { if (!error) { if (this.popup) { this.popup.style.visibility = "visible"; this.lastRenderedMath = inlineMath; if (!$mousePos && range2) { this.autoscollPopup(range2); } } } }); } } closePopup() { this.lastRenderedMath = null; if (this.popup) { this.popup.remove(); this.popup = null; } } autoscollPopup(mathRange) { const editingRoot = editingRootNode(this.view.state.selection); if (editingRoot) { const editorEl = this.view.nodeDOM(editingRoot.pos); const editorBox = editorEl.getBoundingClientRect(); const popupBox = this.popup.getBoundingClientRect(); if (popupBox.top + popupBox.height + kMathPopupVerticalOffset > editorBox.bottom) { const mathBottom = this.view.coordsAtPos(mathRange.to); const mathScrollBottom = editorEl.scrollTop + mathBottom.bottom; const mathPopupScrollBottom = mathScrollBottom + kMathPopupVerticalOffset + popupBox.height; const scrollTop = mathPopupScrollBottom + kMathPopupVerticalOffset - editorBox.top - editorBox.height; const scroller = zenscroll.createScroller(editorScrollContainer(editorEl)); scroller.toY(scrollTop, 100); } } } } function popupPositionStyles(view, range2) { const editorBox = view.dom.parentNode.getBoundingClientRect(); const rangeStartCoords = view.coordsAtPos(range2.from + 1); const rangeEndCoords = view.coordsAtPos(range2.to); const top2 = Math.round(rangeEndCoords.bottom - editorBox.top) + kMathPopupVerticalOffset + "px"; let left = `calc(${Math.round(rangeStartCoords.left - editorBox.left)}px - 1ch)`; if (Math.abs(rangeStartCoords.bottom - rangeEndCoords.bottom) > 5) { const editingRoot = editingRootNodeClosestToPos(view.state.doc.resolve(range2.from)); if (editingRoot) { const editingEl = view.nodeDOM(editingRoot.pos); if (editingEl) { const editingElStyle = window.getComputedStyle(editingEl); left = `calc(${editingEl.getBoundingClientRect().left}px + ${editingElStyle.paddingLeft} - 1ch - 2px)`; } } } return { top: top2, left }; } const attr_editDecoration = ""; const kEditAttrShortcut = "F4"; function attrEditDecorationWidget(options) { return Decoration.widget( options.pos, (view, getPos) => { let rightPaddingOffset = 0; const pos = getPos(); if (pos !== void 0) { const attrsNode = view.nodeDOM(pos); if (attrsNode) { const attrsEl = attrsNode; if (attrsEl.offsetParent) { const offsetParentStyle = window.getComputedStyle(attrsEl.offsetParent); rightPaddingOffset = -parseInt(offsetParentStyle.paddingRight, 10) || 0; } } } const baseOffset = options.offset || { top: 0, right: 0 }; const xOffset = baseOffset.right + rightPaddingOffset; const yOffset = baseOffset.top + 6; const cssProps = { transform: `translate(${xOffset}px,-${yOffset}px)` }; const attrEdit = /* @__PURE__ */ react.exports.createElement( AttrEditDecoration, { tags: options.tags, editFn: options.editFn, getPos, view, ui: options.ui, style: cssProps, noSelectOnClick: options.noSelectOnClick } ); const decoration = window.document.createElement("div"); reactRenderForEditorView(attrEdit, decoration, view); return decoration; }, { ignoreSelection: true, stopEvent: () => { return true; }, preferHidden: options.preferHidden } ); } const AttrEditDecoration = (props) => { const buttonTitle = `${props.ui.context.translateText("Edit Attributes")} (${kEditAttrShortcut})`; const onClick = () => { if (props.view.dispatch && !props.noSelectOnClick) { const pos = props.getPos(); if (pos !== void 0) { const node2 = props.view.state.doc.nodeAt(pos); if (node2) { const tr = props.view.state.tr; if (node2.type.spec.selectable) { tr.setSelection(new NodeSelection(tr.doc.resolve(pos))); } else if (!selectionIsWithinRange(tr.selection, { from: pos, to: pos + node2.nodeSize })) { setTextSelection_1(pos + 1)(tr); } else if (tr.selection instanceof NodeSelection) { const cursor2 = new GapCursor(tr.doc.resolve(pos + 1)); tr.setSelection(cursor2); } props.view.dispatch(tr); } } } props.editFn(props.view.state, props.view.dispatch, props.view); }; return /* @__PURE__ */ react.exports.createElement("div", { className: "pm-attr-edit-decoration pm-surface-widget-text-color ", style: props.style }, props.tags.length ? props.tags.map((tag) => { return /* @__PURE__ */ react.exports.createElement( "span", { key: tag, className: "attr-edit-tag attr-edit-widget pm-block-border-color pm-border-background-color", onClick }, tag ); }) : null, props.editFn(props.view.state) ? /* @__PURE__ */ react.exports.createElement( ImageButton, { classes: ["attr-edit-button"], image: props.ui.prefs.darkMode() ? props.ui.images.properties_deco_dark : props.ui.images.properties_deco, title: buttonTitle, tabIndex: -1, onClick } ) : null); }; function mathViewPlugins(schema2, format2, ui2, math) { return [ mathViewPlugin(schema2, format2, ui2, math), keymap({ ArrowUp: verticalArrowHandler("up"), ArrowDown: verticalArrowHandler("down") }) ]; } function mathViewPlugin(schema2, format2, ui2, math) { const key2 = new PluginKey("math-view"); function decorationsForDoc(state) { const decorations = []; findChildrenByMark_1(state.doc, schema2.marks.math, true).forEach((markedNode) => { const range2 = getMarkRange(state.doc.resolve(markedNode.pos), schema2.marks.math); const attrs = getMarkAttrs(state.doc, range2, schema2.marks.math); const preview = state.selection.from < range2.from || state.selection.from > range2.to; if (preview) { const mathText = state.doc.textBetween(range2.from, range2.to); decorations.push(Decoration.inline(range2.from, range2.to, { style: "display: none;" })); decorations.push( Decoration.widget( range2.from, (view, getPos) => { const mathjaxDiv = window.document.createElement("div"); mathjaxDiv.classList.add("pm-math-mathjax"); mathjaxDiv.onclick = () => { const tr = view.state.tr; let pos = getPos(); if (pos !== void 0) { if (attrs.type === MathType.Display) { const match2 = mathText.match(/^[$\s]+/); if (match2) { pos += match2[0].length; } } else { pos = pos + mathText.length / 2; } setTextSelection_1(pos)(tr); view.dispatch(tr); view.focus(); } }; math.typeset(mathjaxDiv, mathText, ui2.context.isActiveTab()); return mathjaxDiv; }, { key: mathText } ) ); } if (editMathAttributesEnabled(format2, state, range2)) { decorations.push(attrEditDecorationWidget({ pos: markedNode.pos - 1, tags: attrs.id ? [`#${attrs.id}`] : [], editFn: editMathAttributes(ui2), ui: ui2, offset: { top: 0, right: 6 } })); } }); return DecorationSet.create(state.doc, decorations); } return new Plugin({ key: key2, state: { init(_config, instance) { return decorationsForDoc(instance); }, apply(tr, set2, oldState, newState) { if (tr.getMeta(kSetMarkdownTransaction) || tr.getMeta(kThemeChangedTransaction)) { return decorationsForDoc(newState); } else if (tr.steps.some( (step2) => step2 instanceof AddMarkStep && step2.mark.type === schema2.marks.math || step2 instanceof RemoveMarkStep && step2.mark.type === schema2.marks.math )) { return decorationsForDoc(newState); } else if (oldState.doc.rangeHasMark(oldState.selection.from - 2, oldState.selection.from + 1, schema2.marks.math) || getMarkRange(newState.selection.$from, schema2.marks.math)) { return decorationsForDoc(newState); } else { return set2.map(tr.mapping, tr.doc); } } }, appendTransaction: (_transactions, oldState, newState) => { if (!getMarkRange(newState.selection.$from, schema2.marks.math) && newState.selection.from > 0) { const prevMathRange = getMarkRange(newState.doc.resolve(newState.selection.from - 1), schema2.marks.math); if (prevMathRange) { const delta2 = oldState.selection.from - newState.selection.from; if (Math.abs(delta2) > 3) { const tr = newState.tr; const mathText = newState.doc.textBetween(prevMathRange.from, prevMathRange.to); const attrs = getMarkAttrs(newState.doc, prevMathRange, schema2.marks.math); if (attrs.type === MathType.Inline) { setTextSelection_1(prevMathRange.from + mathText.length / 2)(tr); } return tr; } } } return null; }, props: { decorations(state) { return key2.getState(state); } } }); } function verticalArrowHandler(dir) { return (state, dispatch, view) => { if (!view) { return false; } const schema2 = state.schema; const range2 = getMarkRange(state.selection.$head, schema2.marks.math); if (range2) { const attrs = getMarkAttrs(state.doc, range2, schema2.marks.math); if (attrs.type === MathType.Inline) { if (dispatch) { const side = dir === "up" ? -1 : 1; const $head = state.selection.$head; const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side); const tr = state.tr; tr.setSelection(nextPos); dispatch(tr); } return true; } } if (view.endOfTextblock(dir)) { const side = dir === "up" ? -1 : 1; const $head = state.selection.$head; const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side); if (nextPos.$head && nextPos.$head.parent.childCount === 1 && schema2.marks.math.isInSet(nextPos.$head.parent.firstChild.marks)) { if (dispatch) { const mathText = nextPos.$head.parent.textContent; const match2 = mathText.match(/^[$\s]+/); if (match2) { const tr = state.tr; const mathPos = nextPos.$head.start($head.depth); setTextSelection_1(mathPos + match2[0].length)(tr); dispatch(tr); } } return true; } } return false; }; } function displayMathNewline(state, dispatch) { if (!mathTypeIsActive(state, MathType.Display)) { return false; } if (dispatch) { const tr = state.tr; tr.insertText("\n"); dispatch(tr); } return true; } function inlineMathNav(begin) { return (state, dispatch) => { if (!mathTypeIsActive(state, MathType.Inline)) { return false; } const range2 = getSelectionMarkRange(state.selection, state.schema.marks.math); if (!range2) { return false; } if (dispatch) { const tr = state.tr; setTextSelection_1(begin ? range2.from + 1 : range2.to - 1)(tr); dispatch(tr); } return true; }; } const mathStyles = ""; const kInlineMathPattern = "\\$[^ ].*?[^\\ ]?\\$"; const kInlineMathRegex = new RegExp(kInlineMathPattern); const kSingleLineDisplayMathPattern = "\\$\\$[^\n]*?\\$\\$"; const kSingleLineDisplayMathRegex = new RegExp(kSingleLineDisplayMathPattern); const extension$f = (context) => { const { ui: ui2, format: format2, math, events } = context; const blogdownMathInCode = format2.rmdExtensions.blogdownMathInCode; const singleLineDisplayMath = blogdownMathInCode; return { marks: [ { name: "math", noInputRules: true, noSpelling: true, spec: { attrs: { type: {}, id: { default: null } }, inclusive: false, excludes: "formatting", parseDOM: [ { tag: "span[class*='math']", getAttrs(dom) { const el2 = dom; return { type: el2.getAttribute("data-type") }; }, preserveWhitespace: "full" } ], toDOM(mark) { return [ "span", domAttrNoSpelling({ class: "math pm-fixedwidth-font pm-light-text-color", "data-type": mark.attrs.type, spellcheck: "false" }) ]; } }, pandoc: { readers: [ { token: PandocTokenType.Math, mark: "math", getAttrs: (tok) => { return { type: tok.c[kMathType].t, id: tok.c[kMathId] || null }; }, getText: (tok) => { const delimter = delimiterForType(tok.c[kMathType].t); return delimter + tok.c[kMathContent] + delimter; } }, ...blogdownMathInCode ? [ { token: PandocTokenType.Code, mark: "math", match: (tok) => { const text2 = tok.c[kCodeText]; return kSingleLineDisplayMathRegex.test(text2) || kInlineMathRegex.test(text2); }, getAttrs: (tok) => { const text2 = tok.c[kCodeText]; return { type: kSingleLineDisplayMathRegex.test(text2) ? MathType.Display : MathType.Inline }; }, getText: (tok) => { return tok.c[kCodeText]; } } ] : [] ], writer: { priority: 1, write: (output, mark, parent) => { let mathText = ""; parent.forEach((node2) => mathText = mathText + node2.textContent); if (blogdownMathInCode) { output.writeToken(PandocTokenType.Code, () => { output.writeAttr(); output.write(mathText); }); } else { const delimiter2 = delimiterForType(mark.attrs.type); if (mathText.startsWith(delimiter2) && mathText.endsWith(delimiter2)) { mathText = mathText.substr(delimiter2.length, mathText.length - 2 * delimiter2.length); if (mark.attrs.type === MathType.Inline) { mathText = mathText.trim(); } else if (mark.attrs.type === MathType.Display) { const beginMatch = mathText.match(/^\s*/); const begin = beginMatch ? beginMatch[0].replace(/\n{2,}/g, "\n") : ""; const endMatch = mathText.match(/\s*$/); const end = endMatch ? endMatch[0].replace(/\n{2,}/g, "\n") : ""; mathText = begin + mathText.trim().split("\n").filter((line2) => line2.trim().length > 0).join("\n") + end; } if (mathText.length === 0) { output.writeText(delimiter2 + mathText + delimiter2); } else { output.writeToken(PandocTokenType.Math, () => { output.writeToken( mark.attrs.type === MathType.Inline ? PandocTokenType.InlineMath : PandocTokenType.DisplayMath ); output.write(mathText); }); if (mark.attrs.id) { output.writeRawMarkdown(` {#${mark.attrs.id}}`); } } } else { output.writeRawMarkdown(mathText); } } } }, tokensFilter: format2.docTypes.includes(kQuartoDocType) ? (tokens2) => { const pendingTokens = []; const filteredTokens = []; const clearPendingTokens = () => { pendingTokens.splice(0, pendingTokens.length); }; const flushPendingTokens = () => { filteredTokens.push(...pendingTokens); clearPendingTokens(); }; for (const token2 of tokens2) { switch (token2.t) { case PandocTokenType.Math: flushPendingTokens(); if (token2.c[kMathType].t === PandocTokenType.DisplayMath) { pendingTokens.push(token2); } else { filteredTokens.push(token2); } break; case PandocTokenType.Space: if (pendingTokens.length > 0) { pendingTokens.push(token2); } else { filteredTokens.push(token2); } break; case PandocTokenType.Str: if (pendingTokens.length > 0) { const match2 = token2.c.match(/{#(eq-[^ }]+)}/); if (match2) { const mathToken = pendingTokens[0]; mathToken.c[kMathId] = match2[1]; clearPendingTokens(); filteredTokens.push(mathToken); } else { flushPendingTokens(); filteredTokens.push(token2); } } else { filteredTokens.push(token2); } break; default: flushPendingTokens(); filteredTokens.push(token2); break; } } flushPendingTokens(); return filteredTokens; } : void 0 } } ], baseKeys: () => { const keys2 = [ { key: BaseKey.Home, command: inlineMathNav(true) }, { key: BaseKey.End, command: inlineMathNav(false) } ]; if (!singleLineDisplayMath) { keys2.push({ key: BaseKey.Enter, command: displayMathNewline }); } return keys2; }, inputRules: (schema2, filter) => { const kInlineMathInputRulePattern = "\\$[^ ][^\\$]*?[^\\ ]?\\$"; return [ new InputRule( new RegExp("(^|\\s+)" + kInlineMathInputRulePattern + "$"), (state, match2, start, end) => { if (!markIsActive(state, schema2.marks.math) && filter(state) && !state.doc.rangeHasMark(start, start + 1, schema2.marks.math)) { const tr = state.tr; tr.insertText("$"); const mark = schema2.marks.math.create({ type: MathType.Inline }); tr.removeMark(start + match2[1].length, end + 1, void 0); tr.addMark(start + match2[1].length, end + 1, mark); return tr; } else { return null; } } ), new InputRule(/(?:^|[^`])\$$/, (state, _match, start) => { if (!markIsActive(state, schema2.marks.math)) { const { parent, parentOffset } = state.selection.$head; const text2 = "$" + parent.textContent.slice(parentOffset); if (text2.length > 0) { const length2 = mathLength(text2); if (length2 > 1) { if (filter(state, start, start + length2)) { const tr = state.tr; tr.insertText("$"); const startMath = tr.selection.from - 1; const mark = schema2.marks.math.create({ type: MathType.Inline }); tr.addMark(startMath, startMath + length2, mark); return tr; } } } } return null; }), new InputRule(/^\$\$$/, (state, _match, start, end) => { if (filter(state, start, end)) { const tr = state.tr; tr.delete(start, end); insertMath(tr.selection, MathType.Display, !singleLineDisplayMath, tr); return tr; } else { return null; } }) ]; }, commands: () => { return [new InsertInlineMathCommand(ui2), new InsertDisplayMathCommand(ui2, !singleLineDisplayMath)]; }, appendMarkTransaction: () => { return [mathAppendMarkTransaction()]; }, plugins: (schema2) => { const plugins = [ new Plugin({ key: new PluginKey("math"), props: { handlePaste: handlePasteIntoMath() } }), mathHighlightPlugin(schema2) ]; if (math) { plugins.push(new MathPopupPlugin(ui2, math, events, false)); plugins.push(...mathViewPlugins(schema2, format2, ui2, math)); } return plugins; } }; }; function mathLength(text2) { const match2 = text2.match(kInlineMathRegex); if (match2) { return match2[0].length; } else { return 0; } } function handlePasteIntoMath() { return (view, _event, slice2) => { const schema2 = view.state.schema; if (markIsActive(view.state, schema2.marks.math)) { const tr = pasteTransaction(view.state); let math = ""; slice2.content.forEach((node2) => math = math + node2.textContent); tr.replaceSelectionWith(schema2.text(math)); view.dispatch(tr); return true; } else { return false; } }; } var lodash_uniqby = { exports: {} }; (function(module3, exports2) { var LARGE_ARRAY_SIZE = 200; var FUNC_ERROR_TEXT2 = "Expected a function"; var HASH_UNDEFINED = "__lodash_hash_undefined__"; var UNORDERED_COMPARE_FLAG = 1, PARTIAL_COMPARE_FLAG = 2; var INFINITY2 = 1 / 0, MAX_SAFE_INTEGER2 = 9007199254740991; var argsTag2 = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag2 = "[object Function]", genTag2 = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", promiseTag = "[object Promise]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag2 = "[object Symbol]", weakMapTag = "[object WeakMap]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, reLeadingDot = /^\./, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g; var reEscapeChar = /\\(\\)?/g; var reIsHostCtor2 = /^\[object .+?Constructor\]$/; var reIsUint2 = /^(?:0|[1-9]\d*)$/; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; var freeGlobal2 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var freeSelf2 = typeof self == "object" && self && self.Object === Object && self; var root2 = freeGlobal2 || freeSelf2 || Function("return this")(); var freeExports = exports2 && !exports2.nodeType && exports2; var freeModule = freeExports && true && module3 && !module3.nodeType && module3; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && freeGlobal2.process; var nodeUtil = function() { try { return freeProcess && freeProcess.binding("util"); } catch (e2) { } }(); var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; function arrayIncludes2(array, value) { var length2 = array ? array.length : 0; return !!length2 && baseIndexOf2(array, value, 0) > -1; } function arrayIncludesWith(array, value, comparator2) { var index2 = -1, length2 = array ? array.length : 0; while (++index2 < length2) { if (comparator2(value, array[index2])) { return true; } } return false; } function arraySome(array, predicate) { var index2 = -1, length2 = array ? array.length : 0; while (++index2 < length2) { if (predicate(array[index2], index2, array)) { return true; } } return false; } function baseFindIndex2(array, predicate, fromIndex, fromRight) { var length2 = array.length, index2 = fromIndex + (fromRight ? 1 : -1); while (fromRight ? index2-- : ++index2 < length2) { if (predicate(array[index2], index2, array)) { return index2; } } return -1; } function baseIndexOf2(array, value, fromIndex) { if (value !== value) { return baseFindIndex2(array, baseIsNaN2, fromIndex); } var index2 = fromIndex - 1, length2 = array.length; while (++index2 < length2) { if (array[index2] === value) { return index2; } } return -1; } function baseIsNaN2(value) { return value !== value; } function baseProperty(key2) { return function(object) { return object == null ? void 0 : object[key2]; }; } function baseTimes(n2, iteratee) { var index2 = -1, result = Array(n2); while (++index2 < n2) { result[index2] = iteratee(index2); } return result; } function baseUnary(func) { return function(value) { return func(value); }; } function cacheHas(cache, key2) { return cache.has(key2); } function getValue2(object, key2) { return object == null ? void 0 : object[key2]; } function isHostObject2(value) { var result = false; if (value != null && typeof value.toString != "function") { try { result = !!(value + ""); } catch (e2) { } } return result; } function mapToArray(map2) { var index2 = -1, result = Array(map2.size); map2.forEach(function(value, key2) { result[++index2] = [key2, value]; }); return result; } function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } function setToArray(set2) { var index2 = -1, result = Array(set2.size); set2.forEach(function(value) { result[++index2] = value; }); return result; } var arrayProto = Array.prototype, funcProto2 = Function.prototype, objectProto2 = Object.prototype; var coreJsData2 = root2["__core-js_shared__"]; var maskSrcKey2 = function() { var uid2 = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || ""); return uid2 ? "Symbol(src)_1." + uid2 : ""; }(); var funcToString2 = funcProto2.toString; var hasOwnProperty2 = objectProto2.hasOwnProperty; var objectToString2 = objectProto2.toString; var reIsNative2 = RegExp( "^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); var Symbol2 = root2.Symbol, Uint8Array2 = root2.Uint8Array, propertyIsEnumerable2 = objectProto2.propertyIsEnumerable, splice = arrayProto.splice; var nativeKeys = overArg(Object.keys, Object); var DataView = getNative2(root2, "DataView"), Map2 = getNative2(root2, "Map"), Promise2 = getNative2(root2, "Promise"), Set2 = getNative2(root2, "Set"), WeakMap2 = getNative2(root2, "WeakMap"), nativeCreate = getNative2(Object, "create"); var dataViewCtorString = toSource2(DataView), mapCtorString = toSource2(Map2), promiseCtorString = toSource2(Promise2), setCtorString = toSource2(Set2), weakMapCtorString = toSource2(WeakMap2); var symbolProto = Symbol2 ? Symbol2.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0, symbolToString = symbolProto ? symbolProto.toString : void 0; function Hash(entries) { var index2 = -1, length2 = entries ? entries.length : 0; this.clear(); while (++index2 < length2) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; } function hashDelete(key2) { return this.has(key2) && delete this.__data__[key2]; } function hashGet(key2) { var data = this.__data__; if (nativeCreate) { var result = data[key2]; return result === HASH_UNDEFINED ? void 0 : result; } return hasOwnProperty2.call(data, key2) ? data[key2] : void 0; } function hashHas(key2) { var data = this.__data__; return nativeCreate ? data[key2] !== void 0 : hasOwnProperty2.call(data, key2); } function hashSet(key2, value) { var data = this.__data__; data[key2] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value; return this; } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function ListCache(entries) { var index2 = -1, length2 = entries ? entries.length : 0; this.clear(); while (++index2 < length2) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } function listCacheClear() { this.__data__ = []; } function listCacheDelete(key2) { var data = this.__data__, index2 = assocIndexOf(data, key2); if (index2 < 0) { return false; } var lastIndex = data.length - 1; if (index2 == lastIndex) { data.pop(); } else { splice.call(data, index2, 1); } return true; } function listCacheGet(key2) { var data = this.__data__, index2 = assocIndexOf(data, key2); return index2 < 0 ? void 0 : data[index2][1]; } function listCacheHas(key2) { return assocIndexOf(this.__data__, key2) > -1; } function listCacheSet(key2, value) { var data = this.__data__, index2 = assocIndexOf(data, key2); if (index2 < 0) { data.push([key2, value]); } else { data[index2][1] = value; } return this; } ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; function MapCache(entries) { var index2 = -1, length2 = entries ? entries.length : 0; this.clear(); while (++index2 < length2) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } function mapCacheClear() { this.__data__ = { "hash": new Hash(), "map": new (Map2 || ListCache)(), "string": new Hash() }; } function mapCacheDelete(key2) { return getMapData(this, key2)["delete"](key2); } function mapCacheGet(key2) { return getMapData(this, key2).get(key2); } function mapCacheHas(key2) { return getMapData(this, key2).has(key2); } function mapCacheSet(key2, value) { getMapData(this, key2).set(key2, value); return this; } MapCache.prototype.clear = mapCacheClear; MapCache.prototype["delete"] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; function SetCache(values) { var index2 = -1, length2 = values ? values.length : 0; this.__data__ = new MapCache(); while (++index2 < length2) { this.add(values[index2]); } } function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function Stack(entries) { this.__data__ = new ListCache(entries); } function stackClear() { this.__data__ = new ListCache(); } function stackDelete(key2) { return this.__data__["delete"](key2); } function stackGet(key2) { return this.__data__.get(key2); } function stackHas(key2) { return this.__data__.has(key2); } function stackSet(key2, value) { var cache = this.__data__; if (cache instanceof ListCache) { var pairs2 = cache.__data__; if (!Map2 || pairs2.length < LARGE_ARRAY_SIZE - 1) { pairs2.push([key2, value]); return this; } cache = this.__data__ = new MapCache(pairs2); } cache.set(key2, value); return this; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function arrayLikeKeys(value, inherited) { var result = isArray2(value) || isArguments2(value) ? baseTimes(value.length, String) : []; var length2 = result.length, skipIndexes = !!length2; for (var key2 in value) { if ((inherited || hasOwnProperty2.call(value, key2)) && !(skipIndexes && (key2 == "length" || isIndex2(key2, length2)))) { result.push(key2); } } return result; } function assocIndexOf(array, key2) { var length2 = array.length; while (length2--) { if (eq2(array[length2][0], key2)) { return length2; } } return -1; } function baseGet(object, path) { path = isKey(path, object) ? [path] : castPath(path); var index2 = 0, length2 = path.length; while (object != null && index2 < length2) { object = object[toKey(path[index2++])]; } return index2 && index2 == length2 ? object : void 0; } function baseGetTag(value) { return objectToString2.call(value); } function baseHasIn(object, key2) { return object != null && key2 in Object(object); } function baseIsEqual(value, other, customizer, bitmask, stack) { if (value === other) { return true; } if (value == null || other == null || !isObject2(value) && !isObjectLike2(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); } function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = arrayTag, othTag = arrayTag; if (!objIsArr) { objTag = getTag2(object); objTag = objTag == argsTag2 ? objectTag : objTag; } if (!othIsArr) { othTag = getTag2(other); othTag = othTag == argsTag2 ? objectTag : othTag; } var objIsObj = objTag == objectTag && !isHostObject2(object), othIsObj = othTag == objectTag && !isHostObject2(other), isSameTag = objTag == othTag; if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); } if (!(bitmask & PARTIAL_COMPARE_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty2.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty2.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, equalFunc, customizer, bitmask, stack); } function baseIsMatch(object, source, matchData, customizer) { var index2 = matchData.length, length2 = index2, noCustomizer = !customizer; if (object == null) { return !length2; } object = Object(object); while (index2--) { var data = matchData[index2]; if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index2 < length2) { data = matchData[index2]; var key2 = data[0], objValue = object[key2], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === void 0 && !(key2 in object)) { return false; } } else { var stack = new Stack(); if (customizer) { var result = customizer(objValue, srcValue, key2, object, source, stack); } if (!(result === void 0 ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) { return false; } } } return true; } function baseIsNative2(value) { if (!isObject2(value) || isMasked2(value)) { return false; } var pattern = isFunction2(value) || isHostObject2(value) ? reIsNative2 : reIsHostCtor2; return pattern.test(toSource2(value)); } function baseIsTypedArray(value) { return isObjectLike2(value) && isLength2(value.length) && !!typedArrayTags[objectToString2.call(value)]; } function baseIteratee(value) { if (typeof value == "function") { return value; } if (value == null) { return identity2; } if (typeof value == "object") { return isArray2(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key2 in Object(object)) { if (hasOwnProperty2.call(object, key2) && key2 != "constructor") { result.push(key2); } } return result; } function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get2(object, path); return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, void 0, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); }; } function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } function baseToString2(value) { if (typeof value == "string") { return value; } if (isSymbol2(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result = value + ""; return result == "0" && 1 / value == -INFINITY2 ? "-0" : result; } function baseUniq(array, iteratee, comparator2) { var index2 = -1, includes = arrayIncludes2, length2 = array.length, isCommon = true, result = [], seen = result; if (comparator2) { isCommon = false; includes = arrayIncludesWith; } else if (length2 >= LARGE_ARRAY_SIZE) { var set2 = iteratee ? null : createSet(array); if (set2) { return setToArray(set2); } isCommon = false; includes = cacheHas; seen = new SetCache(); } else { seen = iteratee ? [] : result; } outer: while (++index2 < length2) { var value = array[index2], computed = iteratee ? iteratee(value) : value; value = comparator2 || value !== 0 ? value : 0; if (isCommon && computed === computed) { var seenIndex = seen.length; while (seenIndex--) { if (seen[seenIndex] === computed) { continue outer; } } if (iteratee) { seen.push(computed); } result.push(value); } else if (!includes(seen, computed, comparator2)) { if (seen !== result) { seen.push(computed); } result.push(value); } } return result; } function castPath(value) { return isArray2(value) ? value : stringToPath(value); } var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY2) ? noop2 : function(values) { return new Set2(values); }; function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { var isPartial = bitmask & PARTIAL_COMPARE_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var stacked = stack.get(array); if (stacked && stack.get(other)) { return stacked == other; } var index2 = -1, result = true, seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index2 < arrLength) { var arrValue = array[index2], othValue = other[index2]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!seen.has(othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, customizer, bitmask, stack))) { return seen.add(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq2(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert2 = mapToArray; case setTag: var isPartial = bitmask & PARTIAL_COMPARE_FLAG; convert2 || (convert2 = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= UNORDERED_COMPARE_FLAG; stack.set(object, other); var result = equalArrays(convert2(object), convert2(other), equalFunc, customizer, bitmask, stack); stack["delete"](object); return result; case symbolTag2: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { var isPartial = bitmask & PARTIAL_COMPARE_FLAG, objProps = keys2(object), objLength = objProps.length, othProps = keys2(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index2 = objLength; while (index2--) { var key2 = objProps[index2]; if (!(isPartial ? key2 in other : hasOwnProperty2.call(other, key2))) { return false; } } var stacked = stack.get(object); if (stacked && stack.get(other)) { return stacked == other; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index2 < objLength) { key2 = objProps[index2]; var objValue = object[key2], othValue = other[key2]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key2, other, object, stack) : customizer(objValue, othValue, key2, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key2 == "constructor"); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result = false; } } stack["delete"](object); stack["delete"](other); return result; } function getMapData(map2, key2) { var data = map2.__data__; return isKeyable(key2) ? data[typeof key2 == "string" ? "string" : "hash"] : data.map; } function getMatchData(object) { var result = keys2(object), length2 = result.length; while (length2--) { var key2 = result[length2], value = object[key2]; result[length2] = [key2, value, isStrictComparable(value)]; } return result; } function getNative2(object, key2) { var value = getValue2(object, key2); return baseIsNative2(value) ? value : void 0; } var getTag2 = baseGetTag; if (DataView && getTag2(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag2(new Map2()) != mapTag || Promise2 && getTag2(Promise2.resolve()) != promiseTag || Set2 && getTag2(new Set2()) != setTag || WeakMap2 && getTag2(new WeakMap2()) != weakMapTag) { getTag2 = function(value) { var result = objectToString2.call(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource2(Ctor) : void 0; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } function hasPath(object, path, hasFunc) { path = isKey(path, object) ? [path] : castPath(path); var result, index2 = -1, length2 = path.length; while (++index2 < length2) { var key2 = toKey(path[index2]); if (!(result = object != null && hasFunc(object, key2))) { break; } object = object[key2]; } if (result) { return result; } var length2 = object ? object.length : 0; return !!length2 && isLength2(length2) && isIndex2(key2, length2) && (isArray2(object) || isArguments2(object)); } function isIndex2(value, length2) { length2 = length2 == null ? MAX_SAFE_INTEGER2 : length2; return !!length2 && (typeof value == "number" || reIsUint2.test(value)) && (value > -1 && value % 1 == 0 && value < length2); } function isKey(value, object) { if (isArray2(value)) { return false; } var type2 = typeof value; if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value == null || isSymbol2(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); } function isKeyable(value) { var type2 = typeof value; return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value !== "__proto__" : value === null; } function isMasked2(func) { return !!maskSrcKey2 && maskSrcKey2 in func; } function isPrototype(value) { var Ctor = value && value.constructor, proto2 = typeof Ctor == "function" && Ctor.prototype || objectProto2; return value === proto2; } function isStrictComparable(value) { return value === value && !isObject2(value); } function matchesStrictComparable(key2, srcValue) { return function(object) { if (object == null) { return false; } return object[key2] === srcValue && (srcValue !== void 0 || key2 in Object(object)); }; } var stringToPath = memoize2(function(string) { string = toString2(string); var result = []; if (reLeadingDot.test(string)) { result.push(""); } string.replace(rePropName, function(match2, number, quote, string2) { result.push(quote ? string2.replace(reEscapeChar, "$1") : number || match2); }); return result; }); function toKey(value) { if (typeof value == "string" || isSymbol2(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -INFINITY2 ? "-0" : result; } function toSource2(func) { if (func != null) { try { return funcToString2.call(func); } catch (e2) { } try { return func + ""; } catch (e2) { } } return ""; } function uniqBy2(array, iteratee) { return array && array.length ? baseUniq(array, baseIteratee(iteratee)) : []; } function memoize2(func, resolver) { if (typeof func != "function" || resolver && typeof resolver != "function") { throw new TypeError(FUNC_ERROR_TEXT2); } var memoized = function() { var args = arguments, key2 = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key2)) { return cache.get(key2); } var result = func.apply(this, args); memoized.cache = cache.set(key2, result); return result; }; memoized.cache = new (memoize2.Cache || MapCache)(); return memoized; } memoize2.Cache = MapCache; function eq2(value, other) { return value === other || value !== value && other !== other; } function isArguments2(value) { return isArrayLikeObject2(value) && hasOwnProperty2.call(value, "callee") && (!propertyIsEnumerable2.call(value, "callee") || objectToString2.call(value) == argsTag2); } var isArray2 = Array.isArray; function isArrayLike2(value) { return value != null && isLength2(value.length) && !isFunction2(value); } function isArrayLikeObject2(value) { return isObjectLike2(value) && isArrayLike2(value); } function isFunction2(value) { var tag = isObject2(value) ? objectToString2.call(value) : ""; return tag == funcTag2 || tag == genTag2; } function isLength2(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2; } function isObject2(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } function isObjectLike2(value) { return !!value && typeof value == "object"; } function isSymbol2(value) { return typeof value == "symbol" || isObjectLike2(value) && objectToString2.call(value) == symbolTag2; } var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; function toString2(value) { return value == null ? "" : baseToString2(value); } function get2(object, path, defaultValue) { var result = object == null ? void 0 : baseGet(object, path); return result === void 0 ? defaultValue : result; } function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } function keys2(object) { return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object); } function identity2(value) { return value; } function noop2() { } function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } module3.exports = uniqBy2; })(lodash_uniqby, lodash_uniqby.exports); const uniqBy = lodash_uniqby.exports; function isArray$4(value) { return !Array.isArray ? getTag(value) === "[object Array]" : Array.isArray(value); } const INFINITY = 1 / 0; function baseToString(value) { if (typeof value == "string") { return value; } let result = value + ""; return result == "0" && 1 / value == -INFINITY ? "-0" : result; } function toString(value) { return value == null ? "" : baseToString(value); } function isString(value) { return typeof value === "string"; } function isNumber(value) { return typeof value === "number"; } function isBoolean(value) { return value === true || value === false || isObjectLike(value) && getTag(value) == "[object Boolean]"; } function isObject(value) { return typeof value === "object"; } function isObjectLike(value) { return isObject(value) && value !== null; } function isDefined(value) { return value !== void 0 && value !== null; } function isBlank(value) { return !value.trim().length; } function getTag(value) { return value == null ? value === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(value); } const EXTENDED_SEARCH_UNAVAILABLE = "Extended search is not available"; const INCORRECT_INDEX_TYPE = "Incorrect 'index' type"; const LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key2) => `Invalid value for key ${key2}`; const PATTERN_LENGTH_TOO_LARGE = (max2) => `Pattern length exceeds max of ${max2}.`; const MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`; const INVALID_KEY_WEIGHT_VALUE = (key2) => `Property 'weight' in key '${key2}' must be a positive integer`; const hasOwn = Object.prototype.hasOwnProperty; class KeyStore { constructor(keys2) { this._keys = []; this._keyMap = {}; let totalWeight = 0; keys2.forEach((key2) => { let obj = createKey(key2); totalWeight += obj.weight; this._keys.push(obj); this._keyMap[obj.id] = obj; totalWeight += obj.weight; }); this._keys.forEach((key2) => { key2.weight /= totalWeight; }); } get(keyId) { return this._keyMap[keyId]; } keys() { return this._keys; } toJSON() { return JSON.stringify(this._keys); } } function createKey(key2) { let path = null; let id2 = null; let src2 = null; let weight = 1; let getFn = null; if (isString(key2) || isArray$4(key2)) { src2 = key2; path = createKeyPath(key2); id2 = createKeyId(key2); } else { if (!hasOwn.call(key2, "name")) { throw new Error(MISSING_KEY_PROPERTY("name")); } const name = key2.name; src2 = name; if (hasOwn.call(key2, "weight")) { weight = key2.weight; if (weight <= 0) { throw new Error(INVALID_KEY_WEIGHT_VALUE(name)); } } path = createKeyPath(name); id2 = createKeyId(name); getFn = key2.getFn; } return { path, id: id2, weight, src: src2, getFn }; } function createKeyPath(key2) { return isArray$4(key2) ? key2 : key2.split("."); } function createKeyId(key2) { return isArray$4(key2) ? key2.join(".") : key2; } function get$2(obj, path) { let list = []; let arr = false; const deepGet = (obj2, path2, index2) => { if (!isDefined(obj2)) { return; } if (!path2[index2]) { list.push(obj2); } else { let key2 = path2[index2]; const value = obj2[key2]; if (!isDefined(value)) { return; } if (index2 === path2.length - 1 && (isString(value) || isNumber(value) || isBoolean(value))) { list.push(toString(value)); } else if (isArray$4(value)) { arr = true; for (let i2 = 0, len = value.length; i2 < len; i2 += 1) { deepGet(value[i2], path2, index2 + 1); } } else if (path2.length) { deepGet(value, path2, index2 + 1); } } }; deepGet(obj, isString(path) ? path.split(".") : path, 0); return arr ? list : list[0]; } const MatchOptions = { includeMatches: false, findAllMatches: false, minMatchCharLength: 1 }; const BasicOptions = { isCaseSensitive: false, includeScore: false, keys: [], shouldSort: true, sortFn: (a2, b2) => a2.score === b2.score ? a2.idx < b2.idx ? -1 : 1 : a2.score < b2.score ? -1 : 1 }; const FuzzyOptions = { location: 0, threshold: 0.6, distance: 100 }; const AdvancedOptions = { useExtendedSearch: false, getFn: get$2, ignoreLocation: false, ignoreFieldNorm: false, fieldNormWeight: 1 }; var Config = { ...BasicOptions, ...MatchOptions, ...FuzzyOptions, ...AdvancedOptions }; const SPACE = /[^ ]+/g; function norm(weight = 1, mantissa = 3) { const cache = /* @__PURE__ */ new Map(); const m2 = Math.pow(10, mantissa); return { get(value) { const numTokens = value.match(SPACE).length; if (cache.has(numTokens)) { return cache.get(numTokens); } const norm2 = 1 / Math.pow(numTokens, 0.5 * weight); const n2 = parseFloat(Math.round(norm2 * m2) / m2); cache.set(numTokens, n2); return n2; }, clear() { cache.clear(); } }; } class FuseIndex$1 { constructor({ getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) { this.norm = norm(fieldNormWeight, 3); this.getFn = getFn; this.isCreated = false; this.setIndexRecords(); } setSources(docs = []) { this.docs = docs; } setIndexRecords(records = []) { this.records = records; } setKeys(keys2 = []) { this.keys = keys2; this._keysMap = {}; keys2.forEach((key2, idx) => { this._keysMap[key2.id] = idx; }); } create() { if (this.isCreated || !this.docs.length) { return; } this.isCreated = true; if (isString(this.docs[0])) { this.docs.forEach((doc2, docIndex) => { this._addString(doc2, docIndex); }); } else { this.docs.forEach((doc2, docIndex) => { this._addObject(doc2, docIndex); }); } this.norm.clear(); } add(doc2) { const idx = this.size(); if (isString(doc2)) { this._addString(doc2, idx); } else { this._addObject(doc2, idx); } } removeAt(idx) { this.records.splice(idx, 1); for (let i2 = idx, len = this.size(); i2 < len; i2 += 1) { this.records[i2].i -= 1; } } getValueForItemAtKeyId(item, keyId) { return item[this._keysMap[keyId]]; } size() { return this.records.length; } _addString(doc2, docIndex) { if (!isDefined(doc2) || isBlank(doc2)) { return; } let record = { v: doc2, i: docIndex, n: this.norm.get(doc2) }; this.records.push(record); } _addObject(doc2, docIndex) { let record = { i: docIndex, $: {} }; this.keys.forEach((key2, keyIndex) => { let value = key2.getFn ? key2.getFn(doc2) : this.getFn(doc2, key2.path); if (!isDefined(value)) { return; } if (isArray$4(value)) { let subRecords = []; const stack = [{ nestedArrIndex: -1, value }]; while (stack.length) { const { nestedArrIndex, value: value2 } = stack.pop(); if (!isDefined(value2)) { continue; } if (isString(value2) && !isBlank(value2)) { let subRecord = { v: value2, i: nestedArrIndex, n: this.norm.get(value2) }; subRecords.push(subRecord); } else if (isArray$4(value2)) { value2.forEach((item, k2) => { stack.push({ nestedArrIndex: k2, value: item }); }); } else ; } record.$[keyIndex] = subRecords; } else if (isString(value) && !isBlank(value)) { let subRecord = { v: value, n: this.norm.get(value) }; record.$[keyIndex] = subRecord; } }); this.records.push(record); } toJSON() { return { keys: this.keys, records: this.records }; } } function createIndex(keys2, docs, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) { const myIndex = new FuseIndex$1({ getFn, fieldNormWeight }); myIndex.setKeys(keys2.map(createKey)); myIndex.setSources(docs); myIndex.create(); return myIndex; } function parseIndex(data, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) { const { keys: keys2, records } = data; const myIndex = new FuseIndex$1({ getFn, fieldNormWeight }); myIndex.setKeys(keys2); myIndex.setIndexRecords(records); return myIndex; } function computeScore$1(pattern, { errors = 0, currentLocation = 0, expectedLocation = 0, distance = Config.distance, ignoreLocation = Config.ignoreLocation } = {}) { const accuracy = errors / pattern.length; if (ignoreLocation) { return accuracy; } const proximity = Math.abs(expectedLocation - currentLocation); if (!distance) { return proximity ? 1 : accuracy; } return accuracy + proximity / distance; } function convertMaskToIndices(matchmask = [], minMatchCharLength = Config.minMatchCharLength) { let indices = []; let start = -1; let end = -1; let i2 = 0; for (let len = matchmask.length; i2 < len; i2 += 1) { let match2 = matchmask[i2]; if (match2 && start === -1) { start = i2; } else if (!match2 && start !== -1) { end = i2 - 1; if (end - start + 1 >= minMatchCharLength) { indices.push([start, end]); } start = -1; } } if (matchmask[i2 - 1] && i2 - start >= minMatchCharLength) { indices.push([start, i2 - 1]); } return indices; } const MAX_BITS = 32; function search(text2, pattern, patternAlphabet, { location = Config.location, distance = Config.distance, threshold = Config.threshold, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, includeMatches = Config.includeMatches, ignoreLocation = Config.ignoreLocation } = {}) { if (pattern.length > MAX_BITS) { throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS)); } const patternLen = pattern.length; const textLen = text2.length; const expectedLocation = Math.max(0, Math.min(location, textLen)); let currentThreshold = threshold; let bestLocation = expectedLocation; const computeMatches = minMatchCharLength > 1 || includeMatches; const matchMask = computeMatches ? Array(textLen) : []; let index2; while ((index2 = text2.indexOf(pattern, bestLocation)) > -1) { let score = computeScore$1(pattern, { currentLocation: index2, expectedLocation, distance, ignoreLocation }); currentThreshold = Math.min(score, currentThreshold); bestLocation = index2 + patternLen; if (computeMatches) { let i2 = 0; while (i2 < patternLen) { matchMask[index2 + i2] = 1; i2 += 1; } } } bestLocation = -1; let lastBitArr = []; let finalScore = 1; let binMax = patternLen + textLen; const mask = 1 << patternLen - 1; for (let i2 = 0; i2 < patternLen; i2 += 1) { let binMin = 0; let binMid = binMax; while (binMin < binMid) { const score2 = computeScore$1(pattern, { errors: i2, currentLocation: expectedLocation + binMid, expectedLocation, distance, ignoreLocation }); if (score2 <= currentThreshold) { binMin = binMid; } else { binMax = binMid; } binMid = Math.floor((binMax - binMin) / 2 + binMin); } binMax = binMid; let start = Math.max(1, expectedLocation - binMid + 1); let finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen; let bitArr = Array(finish + 2); bitArr[finish + 1] = (1 << i2) - 1; for (let j2 = finish; j2 >= start; j2 -= 1) { let currentLocation = j2 - 1; let charMatch = patternAlphabet[text2.charAt(currentLocation)]; if (computeMatches) { matchMask[currentLocation] = +!!charMatch; } bitArr[j2] = (bitArr[j2 + 1] << 1 | 1) & charMatch; if (i2) { bitArr[j2] |= (lastBitArr[j2 + 1] | lastBitArr[j2]) << 1 | 1 | lastBitArr[j2 + 1]; } if (bitArr[j2] & mask) { finalScore = computeScore$1(pattern, { errors: i2, currentLocation, expectedLocation, distance, ignoreLocation }); if (finalScore <= currentThreshold) { currentThreshold = finalScore; bestLocation = currentLocation; if (bestLocation <= expectedLocation) { break; } start = Math.max(1, 2 * expectedLocation - bestLocation); } } } const score = computeScore$1(pattern, { errors: i2 + 1, currentLocation: expectedLocation, expectedLocation, distance, ignoreLocation }); if (score > currentThreshold) { break; } lastBitArr = bitArr; } const result = { isMatch: bestLocation >= 0, score: Math.max(1e-3, finalScore) }; if (computeMatches) { const indices = convertMaskToIndices(matchMask, minMatchCharLength); if (!indices.length) { result.isMatch = false; } else if (includeMatches) { result.indices = indices; } } return result; } function createPatternAlphabet(pattern) { let mask = {}; for (let i2 = 0, len = pattern.length; i2 < len; i2 += 1) { const char2 = pattern.charAt(i2); mask[char2] = (mask[char2] || 0) | 1 << len - i2 - 1; } return mask; } class BitapSearch { constructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreLocation = Config.ignoreLocation } = {}) { this.options = { location, threshold, distance, includeMatches, findAllMatches, minMatchCharLength, isCaseSensitive, ignoreLocation }; this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase(); this.chunks = []; if (!this.pattern.length) { return; } const addChunk = (pattern2, startIndex) => { this.chunks.push({ pattern: pattern2, alphabet: createPatternAlphabet(pattern2), startIndex }); }; const len = this.pattern.length; if (len > MAX_BITS) { let i2 = 0; const remainder = len % MAX_BITS; const end = len - remainder; while (i2 < end) { addChunk(this.pattern.substr(i2, MAX_BITS), i2); i2 += MAX_BITS; } if (remainder) { const startIndex = len - MAX_BITS; addChunk(this.pattern.substr(startIndex), startIndex); } } else { addChunk(this.pattern, 0); } } searchIn(text2) { const { isCaseSensitive, includeMatches } = this.options; if (!isCaseSensitive) { text2 = text2.toLowerCase(); } if (this.pattern === text2) { let result2 = { isMatch: true, score: 0 }; if (includeMatches) { result2.indices = [[0, text2.length - 1]]; } return result2; } const { location, distance, threshold, findAllMatches, minMatchCharLength, ignoreLocation } = this.options; let allIndices = []; let totalScore = 0; let hasMatches = false; this.chunks.forEach(({ pattern, alphabet, startIndex }) => { const { isMatch, score, indices } = search(text2, pattern, alphabet, { location: location + startIndex, distance, threshold, findAllMatches, minMatchCharLength, includeMatches, ignoreLocation }); if (isMatch) { hasMatches = true; } totalScore += score; if (isMatch && indices) { allIndices = [...allIndices, ...indices]; } }); let result = { isMatch: hasMatches, score: hasMatches ? totalScore / this.chunks.length : 1 }; if (hasMatches && includeMatches) { result.indices = allIndices; } return result; } } class BaseMatch { constructor(pattern) { this.pattern = pattern; } static isMultiMatch(pattern) { return getMatch(pattern, this.multiRegex); } static isSingleMatch(pattern) { return getMatch(pattern, this.singleRegex); } search() { } } function getMatch(pattern, exp) { const matches2 = pattern.match(exp); return matches2 ? matches2[1] : null; } class ExactMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "exact"; } static get multiRegex() { return /^="(.*)"$/; } static get singleRegex() { return /^=(.*)$/; } search(text2) { const isMatch = text2 === this.pattern; return { isMatch, score: isMatch ? 0 : 1, indices: [0, this.pattern.length - 1] }; } } class InverseExactMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "inverse-exact"; } static get multiRegex() { return /^!"(.*)"$/; } static get singleRegex() { return /^!(.*)$/; } search(text2) { const index2 = text2.indexOf(this.pattern); const isMatch = index2 === -1; return { isMatch, score: isMatch ? 0 : 1, indices: [0, text2.length - 1] }; } } class PrefixExactMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "prefix-exact"; } static get multiRegex() { return /^\^"(.*)"$/; } static get singleRegex() { return /^\^(.*)$/; } search(text2) { const isMatch = text2.startsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [0, this.pattern.length - 1] }; } } class InversePrefixExactMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "inverse-prefix-exact"; } static get multiRegex() { return /^!\^"(.*)"$/; } static get singleRegex() { return /^!\^(.*)$/; } search(text2) { const isMatch = !text2.startsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [0, text2.length - 1] }; } } class SuffixExactMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "suffix-exact"; } static get multiRegex() { return /^"(.*)"\$$/; } static get singleRegex() { return /^(.*)\$$/; } search(text2) { const isMatch = text2.endsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [text2.length - this.pattern.length, text2.length - 1] }; } } class InverseSuffixExactMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "inverse-suffix-exact"; } static get multiRegex() { return /^!"(.*)"\$$/; } static get singleRegex() { return /^!(.*)\$$/; } search(text2) { const isMatch = !text2.endsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [0, text2.length - 1] }; } } class FuzzyMatch extends BaseMatch { constructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreLocation = Config.ignoreLocation } = {}) { super(pattern); this._bitapSearch = new BitapSearch(pattern, { location, threshold, distance, includeMatches, findAllMatches, minMatchCharLength, isCaseSensitive, ignoreLocation }); } static get type() { return "fuzzy"; } static get multiRegex() { return /^"(.*)"$/; } static get singleRegex() { return /^(.*)$/; } search(text2) { return this._bitapSearch.searchIn(text2); } } class IncludeMatch extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "include"; } static get multiRegex() { return /^'"(.*)"$/; } static get singleRegex() { return /^'(.*)$/; } search(text2) { let location = 0; let index2; const indices = []; const patternLen = this.pattern.length; while ((index2 = text2.indexOf(this.pattern, location)) > -1) { location = index2 + patternLen; indices.push([index2, location - 1]); } const isMatch = !!indices.length; return { isMatch, score: isMatch ? 0 : 1, indices }; } } const searchers = [ ExactMatch, IncludeMatch, PrefixExactMatch, InversePrefixExactMatch, InverseSuffixExactMatch, SuffixExactMatch, InverseExactMatch, FuzzyMatch ]; const searchersLen = searchers.length; const SPACE_RE = / +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/; const OR_TOKEN = "|"; function parseQuery(pattern, options = {}) { return pattern.split(OR_TOKEN).map((item) => { let query = item.trim().split(SPACE_RE).filter((item2) => item2 && !!item2.trim()); let results = []; for (let i2 = 0, len = query.length; i2 < len; i2 += 1) { const queryItem = query[i2]; let found2 = false; let idx = -1; while (!found2 && ++idx < searchersLen) { const searcher = searchers[idx]; let token2 = searcher.isMultiMatch(queryItem); if (token2) { results.push(new searcher(token2, options)); found2 = true; } } if (found2) { continue; } idx = -1; while (++idx < searchersLen) { const searcher = searchers[idx]; let token2 = searcher.isSingleMatch(queryItem); if (token2) { results.push(new searcher(token2, options)); break; } } } return results; }); } const MultiMatchSet = /* @__PURE__ */ new Set([FuzzyMatch.type, IncludeMatch.type]); class ExtendedSearch { constructor(pattern, { isCaseSensitive = Config.isCaseSensitive, includeMatches = Config.includeMatches, minMatchCharLength = Config.minMatchCharLength, ignoreLocation = Config.ignoreLocation, findAllMatches = Config.findAllMatches, location = Config.location, threshold = Config.threshold, distance = Config.distance } = {}) { this.query = null; this.options = { isCaseSensitive, includeMatches, minMatchCharLength, findAllMatches, ignoreLocation, location, threshold, distance }; this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase(); this.query = parseQuery(this.pattern, this.options); } static condition(_2, options) { return options.useExtendedSearch; } searchIn(text2) { const query = this.query; if (!query) { return { isMatch: false, score: 1 }; } const { includeMatches, isCaseSensitive } = this.options; text2 = isCaseSensitive ? text2 : text2.toLowerCase(); let numMatches = 0; let allIndices = []; let totalScore = 0; for (let i2 = 0, qLen = query.length; i2 < qLen; i2 += 1) { const searchers2 = query[i2]; allIndices.length = 0; numMatches = 0; for (let j2 = 0, pLen = searchers2.length; j2 < pLen; j2 += 1) { const searcher = searchers2[j2]; const { isMatch, indices, score } = searcher.search(text2); if (isMatch) { numMatches += 1; totalScore += score; if (includeMatches) { const type2 = searcher.constructor.type; if (MultiMatchSet.has(type2)) { allIndices = [...allIndices, ...indices]; } else { allIndices.push(indices); } } } else { totalScore = 0; numMatches = 0; allIndices.length = 0; break; } } if (numMatches) { let result = { isMatch: true, score: totalScore / numMatches }; if (includeMatches) { result.indices = allIndices; } return result; } } return { isMatch: false, score: 1 }; } } const registeredSearchers = []; function register(...args) { registeredSearchers.push(...args); } function createSearcher(pattern, options) { for (let i2 = 0, len = registeredSearchers.length; i2 < len; i2 += 1) { let searcherClass = registeredSearchers[i2]; if (searcherClass.condition(pattern, options)) { return new searcherClass(pattern, options); } } return new BitapSearch(pattern, options); } const LogicalOperator = { AND: "$and", OR: "$or" }; const KeyType = { PATH: "$path", PATTERN: "$val" }; const isExpression = (query) => !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]); const isPath = (query) => !!query[KeyType.PATH]; const isLeaf = (query) => !isArray$4(query) && isObject(query) && !isExpression(query); const convertToExplicit = (query) => ({ [LogicalOperator.AND]: Object.keys(query).map((key2) => ({ [key2]: query[key2] })) }); function parse(query, options, { auto = true } = {}) { const next2 = (query2) => { let keys2 = Object.keys(query2); const isQueryPath = isPath(query2); if (!isQueryPath && keys2.length > 1 && !isExpression(query2)) { return next2(convertToExplicit(query2)); } if (isLeaf(query2)) { const key2 = isQueryPath ? query2[KeyType.PATH] : keys2[0]; const pattern = isQueryPath ? query2[KeyType.PATTERN] : query2[key2]; if (!isString(pattern)) { throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key2)); } const obj = { keyId: createKeyId(key2), pattern }; if (auto) { obj.searcher = createSearcher(pattern, options); } return obj; } let node2 = { children: [], operator: keys2[0] }; keys2.forEach((key2) => { const value = query2[key2]; if (isArray$4(value)) { value.forEach((item) => { node2.children.push(next2(item)); }); } }); return node2; }; if (!isExpression(query)) { query = convertToExplicit(query); } return next2(query); } function computeScore(results, { ignoreFieldNorm = Config.ignoreFieldNorm }) { results.forEach((result) => { let totalScore = 1; result.matches.forEach(({ key: key2, norm: norm2, score }) => { const weight = key2 ? key2.weight : null; totalScore *= Math.pow( score === 0 && weight ? Number.EPSILON : score, (weight || 1) * (ignoreFieldNorm ? 1 : norm2) ); }); result.score = totalScore; }); } function transformMatches(result, data) { const matches2 = result.matches; data.matches = []; if (!isDefined(matches2)) { return; } matches2.forEach((match2) => { if (!isDefined(match2.indices) || !match2.indices.length) { return; } const { indices, value } = match2; let obj = { indices, value }; if (match2.key) { obj.key = match2.key.src; } if (match2.idx > -1) { obj.refIndex = match2.idx; } data.matches.push(obj); }); } function transformScore(result, data) { data.score = result.score; } function format$4(results, docs, { includeMatches = Config.includeMatches, includeScore = Config.includeScore } = {}) { const transformers = []; if (includeMatches) transformers.push(transformMatches); if (includeScore) transformers.push(transformScore); return results.map((result) => { const { idx } = result; const data = { item: docs[idx], refIndex: idx }; if (transformers.length) { transformers.forEach((transformer) => { transformer(result, data); }); } return data; }); } class Fuse { constructor(docs, options = {}, index2) { this.options = { ...Config, ...options }; if (this.options.useExtendedSearch && false) { throw new Error(EXTENDED_SEARCH_UNAVAILABLE); } this._keyStore = new KeyStore(this.options.keys); this.setCollection(docs, index2); } setCollection(docs, index2) { this._docs = docs; if (index2 && !(index2 instanceof FuseIndex$1)) { throw new Error(INCORRECT_INDEX_TYPE); } this._myIndex = index2 || createIndex(this.options.keys, this._docs, { getFn: this.options.getFn, fieldNormWeight: this.options.fieldNormWeight }); } add(doc2) { if (!isDefined(doc2)) { return; } this._docs.push(doc2); this._myIndex.add(doc2); } remove(predicate = () => false) { const results = []; for (let i2 = 0, len = this._docs.length; i2 < len; i2 += 1) { const doc2 = this._docs[i2]; if (predicate(doc2, i2)) { this.removeAt(i2); i2 -= 1; len -= 1; results.push(doc2); } } return results; } removeAt(idx) { this._docs.splice(idx, 1); this._myIndex.removeAt(idx); } getIndex() { return this._myIndex; } search(query, { limit = -1 } = {}) { const { includeMatches, includeScore, shouldSort, sortFn, ignoreFieldNorm } = this.options; let results = isString(query) ? isString(this._docs[0]) ? this._searchStringList(query) : this._searchObjectList(query) : this._searchLogical(query); computeScore(results, { ignoreFieldNorm }); if (shouldSort) { results.sort(sortFn); } if (isNumber(limit) && limit > -1) { results = results.slice(0, limit); } return format$4(results, this._docs, { includeMatches, includeScore }); } _searchStringList(query) { const searcher = createSearcher(query, this.options); const { records } = this._myIndex; const results = []; records.forEach(({ v: text2, i: idx, n: norm2 }) => { if (!isDefined(text2)) { return; } const { isMatch, score, indices } = searcher.searchIn(text2); if (isMatch) { results.push({ item: text2, idx, matches: [{ score, value: text2, norm: norm2, indices }] }); } }); return results; } _searchLogical(query) { const expression = parse(query, this.options); const evaluate = (node2, item, idx) => { if (!node2.children) { const { keyId, searcher } = node2; const matches2 = this._findMatches({ key: this._keyStore.get(keyId), value: this._myIndex.getValueForItemAtKeyId(item, keyId), searcher }); if (matches2 && matches2.length) { return [ { idx, item, matches: matches2 } ]; } return []; } const res = []; for (let i2 = 0, len = node2.children.length; i2 < len; i2 += 1) { const child = node2.children[i2]; const result = evaluate(child, item, idx); if (result.length) { res.push(...result); } else if (node2.operator === LogicalOperator.AND) { return []; } } return res; }; const records = this._myIndex.records; const resultMap = {}; const results = []; records.forEach(({ $: item, i: idx }) => { if (isDefined(item)) { let expResults = evaluate(expression, item, idx); if (expResults.length) { if (!resultMap[idx]) { resultMap[idx] = { idx, item, matches: [] }; results.push(resultMap[idx]); } expResults.forEach(({ matches: matches2 }) => { resultMap[idx].matches.push(...matches2); }); } } }); return results; } _searchObjectList(query) { const searcher = createSearcher(query, this.options); const { keys: keys2, records } = this._myIndex; const results = []; records.forEach(({ $: item, i: idx }) => { if (!isDefined(item)) { return; } let matches2 = []; keys2.forEach((key2, keyIndex) => { matches2.push( ...this._findMatches({ key: key2, value: item[keyIndex], searcher }) ); }); if (matches2.length) { results.push({ idx, item, matches: matches2 }); } }); return results; } _findMatches({ key: key2, value, searcher }) { if (!isDefined(value)) { return []; } let matches2 = []; if (isArray$4(value)) { value.forEach(({ v: text2, i: idx, n: norm2 }) => { if (!isDefined(text2)) { return; } const { isMatch, score, indices } = searcher.searchIn(text2); if (isMatch) { matches2.push({ score, key: key2, value: text2, idx, norm: norm2, indices }); } }); } else { const { v: text2, n: norm2 } = value; const { isMatch, score, indices } = searcher.searchIn(text2); if (isMatch) { matches2.push({ score, key: key2, value: text2, norm: norm2, indices }); } } return matches2; } } Fuse.version = "6.6.2"; Fuse.createIndex = createIndex; Fuse.parseIndex = parseIndex; Fuse.config = Config; { Fuse.parseQuery = parse; } { register(ExtendedSearch); } function joinPaths(root2, path) { const mergedPath = `${root2}/${path}`; return mergedPath.replace(/\/\//g, "/"); } function isAbsolute(path, isWindows2) { if (isWindows2) { const len = path.length; if (len === 0) { return false; } const code2 = path.charCodeAt(0); if (isWinPathSeparator(code2)) { return true; } else if (isWindowsDeviceRoot(code2)) { if (len > 2 && path.charCodeAt(1) === CHAR_COLON) { if (isWinPathSeparator(path.charCodeAt(2))) { return true; } } } return false; } else { return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH; } } function getExtension(path) { const fileName = path.split(/[\\/]/).pop(); if (fileName) { const lastDot = fileName.lastIndexOf("."); if (lastDot > 0) { return fileName.slice(lastDot + 1); } } return ""; } function changeExtension(path, extension2) { const lastDot = path.lastIndexOf("."); const pathNoExtension = path.substr(0, lastDot + 1); return pathNoExtension + extension2; } const CHAR_UPPERCASE_A = 65; const CHAR_LOWERCASE_A = 97; const CHAR_UPPERCASE_Z = 90; const CHAR_LOWERCASE_Z = 122; const CHAR_FORWARD_SLASH = 47; const CHAR_BACKWARD_SLASH = 92; const CHAR_COLON = 58; function isWinPathSeparator(code2) { return code2 === CHAR_FORWARD_SLASH || code2 === CHAR_BACKWARD_SLASH; } function isWindowsDeviceRoot(code2) { return code2 >= CHAR_LOWERCASE_A && code2 <= CHAR_LOWERCASE_Z || code2 >= CHAR_UPPERCASE_A && code2 <= CHAR_UPPERCASE_Z; } var BibTypes; var BibFieldTypes; const e = ["catalan", "croatian", "czech", "danish", "dutch", "english", "american", "finnish", "french", "german", "greek", "italian", "latin", "norwegian", "polish", "portuguese", "brazilian", "russian", "slovene", "spanish", "swedish"], d = { abstract: { type: "f_long_literal", biblatex: "abstract", csl: "abstract" }, addendum: { type: "f_literal", biblatex: "addendum" }, afterword: { type: "l_name", biblatex: "afterword" }, annotation: { type: "f_long_literal", biblatex: "annotation" }, annotator: { type: "l_name", biblatex: "annotator" }, author: { type: "l_name", biblatex: "author", csl: "author" }, bookauthor: { type: "l_name", biblatex: "bookauthor", csl: "container-author" }, bookpagination: { type: "f_key", biblatex: "bookpagination", options: ["page", "column", "section", "paragraph", "verse", "line"] }, booksubtitle: { type: "f_title", biblatex: "booksubtitle" }, booktitle: { type: "f_title", biblatex: "booktitle", csl: "container-title" }, booktitleaddon: { type: "f_title", biblatex: "booktitleaddon" }, chapter: { type: "f_literal", biblatex: "chapter", csl: "chapter-number" }, commentator: { type: "l_name", biblatex: "commentator" }, date: { type: "f_date", biblatex: "date", csl: "issued" }, doi: { type: "f_verbatim", biblatex: "doi", csl: "DOI" }, edition: { type: "f_integer", biblatex: "edition", csl: "edition" }, editor: { type: "l_name", biblatex: "editor", csl: "editor" }, editora: { type: "l_name", biblatex: "editora" }, editorb: { type: "l_name", biblatex: "editorb" }, editorc: { type: "l_name", biblatex: "editorc" }, editortype: { type: "f_key", biblatex: "editortype", options: ["editor", "compiler", "founder", "continuator", "redactor", "reviser", "collaborator"] }, editoratype: { type: "f_key", biblatex: "editoratype", options: ["editor", "compiler", "founder", "continuator", "redactor", "reviser", "collaborator"] }, editorbtype: { type: "f_key", biblatex: "editorbtype", options: ["editor", "compiler", "founder", "continuator", "redactor", "reviser", "collaborator"] }, editorctype: { type: "f_key", biblatex: "editorctype", options: ["editor", "compiler", "founder", "continuator", "redactor", "reviser", "collaborator"] }, eid: { type: "f_literal", biblatex: "eid" }, entrysubtype: { type: "f_literal", biblatex: "entrysubtype" }, eprint: { type: "f_verbatim", biblatex: "eprint" }, eprintclass: { type: "f_literal", biblatex: "eprintclass" }, eprinttype: { type: "f_literal", biblatex: "eprinttype" }, eventdate: { type: "f_date", biblatex: "eventdate", csl: "event-date" }, eventtitle: { type: "f_title", biblatex: "eventtitle", csl: "event" }, file: { type: "f_verbatim", biblatex: "file" }, foreword: { type: "l_name", biblatex: "foreword" }, holder: { type: "l_name", biblatex: "holder" }, howpublished: { type: "f_literal", biblatex: "howpublished", csl: "medium" }, indextitle: { type: "f_literal", biblatex: "indextitle" }, institution: { type: "l_literal", biblatex: "institution" }, introduction: { type: "l_name", biblatex: "introduction" }, isan: { type: "f_literal", biblatex: "isan", csl: "number" }, isbn: { type: "f_literal", biblatex: "isbn", csl: "ISBN" }, ismn: { type: "f_literal", biblatex: "ismn", csl: "number" }, isrn: { type: "f_literal", biblatex: "isrn", csl: "number" }, issn: { type: "f_literal", biblatex: "issn", csl: "ISSN" }, issue: { type: "f_literal", biblatex: "issue", csl: "issue" }, issuesubtitle: { type: "f_literal", biblatex: "issuesubtitle" }, issuetitle: { type: "f_literal", biblatex: "issuetitle" }, iswc: { type: "f_literal", biblatex: "iswc", csl: "number" }, journalsubtitle: { type: "f_literal", biblatex: "journalsubtitle" }, journaltitle: { type: "f_title", biblatex: "journaltitle", csl: "container-title" }, keywords: { type: "l_tag", biblatex: "keywords" }, label: { type: "f_literal", biblatex: "label" }, language: { type: "l_key", biblatex: "language", options: e }, langid: { type: "f_key", strict: true, biblatex: "langid", csl: "language", options: { acadian: { csl: "fr-CA", biblatex: "acadian" }, afrikaans: { csl: "af-ZA", biblatex: "afrikaans" }, arabic: { csl: "ar", biblatex: "arabic" }, basque: { csl: "eu", biblatex: "basque" }, bulgarian: { csl: "bg-BG", biblatex: "bulgarian" }, catalan: { csl: "ca-AD", biblatex: "catalan" }, chinese: { csl: "zh-CN", biblatex: "pinyin" }, croatian: { csl: "hr-HR", biblatex: "croatian" }, czech: { csl: "cs-CZ", biblatex: "czech" }, danish: { csl: "da-DK", biblatex: "danish" }, dutch: { csl: "nl-NL", biblatex: "dutch" }, auenglish: { csl: "en-GB", biblatex: "australian" }, caenglish: { csl: "en-US", biblatex: "canadian" }, nzenglish: { csl: "en-GB", biblatex: "newzealand" }, ukenglish: { csl: "en-GB", biblatex: "ukenglish" }, usenglish: { csl: "en-US", biblatex: "usenglish" }, estonian: { csl: "et-EE", biblatex: "estonian" }, finnish: { csl: "fi-FI", biblatex: "finnish" }, french: { csl: "fr-FR", biblatex: "french" }, cafrench: { csl: "fr-CA", biblatex: "canadien" }, german: { csl: "de-DE", biblatex: "ngerman" }, atgerman: { csl: "de-AT", biblatex: "naustrian" }, greek: { csl: "el-GR", biblatex: "greek" }, hebrew: { csl: "he-IL", biblatex: "hebrew" }, hungarian: { csl: "hu-HU", biblatex: "hungarian" }, icelandic: { csl: "is-IS", biblatex: "icelandic" }, italian: { csl: "it-IT", biblatex: "italian" }, japanese: { csl: "ja-JP", biblatex: "japanese" }, latin: { csl: "la", biblatex: "latin" }, latvian: { csl: "lv-LV", biblatex: "latvian" }, lithuanian: { csl: "lt-LT", biblatex: "lithuanian" }, magyar: { csl: "hu-HU", biblatex: "magyar" }, mongolian: { csl: "mn-MN", biblatex: "mongolian" }, norwegian: { csl: "nb-NO", biblatex: "norsk" }, newnorwegian: { csl: "nn-NO", biblatex: "nynorsk" }, farsi: { csl: "fa-IR", biblatex: "farsi" }, polish: { csl: "pl-PL", biblatex: "polish" }, portuguese: { csl: "pt-PT", biblatex: "portuguese" }, brportuguese: { csl: "pt-BR", biblatex: "brazilian" }, romanian: { csl: "ro-RO", biblatex: "romanian" }, russian: { csl: "ru-RU", biblatex: "russian" }, serbian: { csl: "sr-RS", biblatex: "serbian" }, cyrillicserbian: { csl: "sr-RS", biblatex: "serbianc" }, slovak: { csl: "sk-SK", biblatex: "slovak" }, slovene: { csl: "sl-SL", biblatex: "slovene" }, spanish: { csl: "es-ES", biblatex: "spanish" }, swedish: { csl: "sv-SE", biblatex: "swedish" }, thai: { csl: "th-TH", biblatex: "thai" }, turkish: { csl: "tr-TR", biblatex: "turkish" }, ukrainian: { csl: "uk-UA", biblatex: "ukrainian" }, vietnamese: { csl: "vi-VN", biblatex: "vietnamese" } } }, library: { type: "f_literal", biblatex: "library" }, location: { type: "l_literal", biblatex: "location", csl: "publisher-place" }, mainsubtitle: { type: "f_title", biblatex: "mainsubtitle" }, maintitle: { type: "f_title", biblatex: "maintitle" }, maintitleaddon: { type: "f_title", biblatex: "maintitleaddon" }, nameaddon: { type: "f_literal", biblatex: "nameaddon" }, note: { type: "f_literal", biblatex: "note", csl: "note" }, number: { type: "f_literal", biblatex: "number", csl: { "article-journal": "issue", patent: "number", "*": "collection-number" } }, organization: { type: "l_literal", biblatex: "organization" }, origdate: { type: "f_date", biblatex: "origdate", csl: "original-date" }, origlanguage: { type: "f_key", biblatex: "origlanguage", options: e }, origlocation: { type: "l_literal", biblatex: "origlocation", csl: "original-publisher-place" }, origpublisher: { type: "l_literal", biblatex: "origpublisher", csl: "original-publisher" }, origtitle: { type: "f_title", biblatex: "origtitle", csl: "original-title" }, pages: { type: "l_range", biblatex: "pages", csl: "page" }, pagetotal: { type: "f_literal", biblatex: "pagetotal", csl: "number-of-pages" }, pagination: { type: "f_key", biblatex: "pagination", options: ["page", "column", "section", "paragraph", "verse", "line"] }, part: { type: "f_literal", biblatex: "part" }, publisher: { type: "l_literal", biblatex: "publisher", csl: "publisher" }, pubstate: { type: "f_key", biblatex: "pubstate", csl: "status", options: { inpreparation: { csl: "in preparation", biblatex: "inpreparation" }, submitted: { csl: "submitted", biblatex: "submitted" }, forthcoming: { csl: "forthcoming", biblatex: "forthcoming" }, inpress: { csl: "in press", biblatex: "inpress" }, prepublished: { csl: "prepublished", biblatex: "prepublished" } } }, reprinttitle: { type: "f_literal", biblatex: "reprinttitle" }, series: { type: "f_title", biblatex: "series", csl: "collection-title" }, shortauthor: { type: "l_name", biblatex: "shortauthor" }, shorteditor: { type: "l_name", biblatex: "shorteditor" }, shorthand: { type: "f_literal", biblatex: "shorthand" }, shorthandintro: { type: "f_literal", biblatex: "shorthandintro" }, shortjournal: { type: "f_title", biblatex: "shortjournal", csl: "container-title-short" }, shortseries: { type: "f_literal", biblatex: "shortseries" }, shorttitle: { type: "f_title", biblatex: "shorttitle", csl: "title-short" }, subtitle: { type: "f_title", biblatex: "subtitle" }, title: { type: "f_title", biblatex: "title", csl: "title" }, titleaddon: { type: "f_title", biblatex: "titleaddon" }, translator: { type: "l_name", biblatex: "translator", csl: "translator" }, type: { type: "f_key", biblatex: "type", options: ["manual", "patent", "report", "thesis", "mathesis", "phdthesis", "candthesis", "techreport", "resreport", "software", "datacd", "audiocd"] }, url: { type: "f_uri", biblatex: "url", csl: "URL" }, urldate: { type: "f_date", biblatex: "urldate", csl: "accessed" }, venue: { type: "f_literal", biblatex: "venue", csl: "event-place" }, version: { type: "f_literal", biblatex: "version", csl: "version" }, volume: { type: "f_literal", biblatex: "volume", csl: "volume" }, volumes: { type: "f_literal", biblatex: "volumes", csl: "number-of-volumes" } }, t = { "article-journal": { order: 1, biblatex: "article", csl: "article-journal", required: ["journaltitle", "title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "annotator", "commentator", "doi", "editor", "editora", "editorb", "editorc", "eid", "eprint", "eprintclass", "eprinttype", "issn", "issue", "issuesubtitle", "issuetitle", "journalsubtitle", "language", "langid", "note", "number", "pages", "pagination", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "version", "volume", "origdate", "origlanguage", "origtitle", "annotation", "keywords"] }, "article-magazine": { order: 2, biblatex: "article", "biblatex-subtype": "magazine", csl: "article-magazine", required: ["journaltitle", "title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "annotator", "commentator", "doi", "editor", "editora", "editorb", "editorc", "eid", "eprint", "eprintclass", "eprinttype", "issn", "issue", "issuesubtitle", "issuetitle", "journalsubtitle", "language", "langid", "note", "number", "pages", "pagination", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "version", "volume", "origdate", "origlanguage", "origtitle", "annotation", "keywords"] }, "article-newspaper": { order: 3, biblatex: "article", "biblatex-subtype": "newspaper", csl: "article-newspaper", required: ["journaltitle", "title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "annotator", "commentator", "doi", "editor", "editora", "editorb", "editorc", "eid", "eprint", "eprintclass", "eprinttype", "issn", "issue", "issuesubtitle", "issuetitle", "journalsubtitle", "language", "langid", "note", "number", "pages", "pagination", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "version", "volume", "origdate", "origlanguage", "origtitle", "annotation", "keywords"] }, article: { order: 4, biblatex: "article", csl: "article", required: ["journaltitle", "title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "annotator", "commentator", "doi", "editor", "editora", "editorb", "editorc", "eid", "eprint", "eprintclass", "eprinttype", "issn", "issue", "issuesubtitle", "issuetitle", "journalsubtitle", "language", "langid", "note", "number", "pages", "pagination", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "version", "volume", "origdate", "origlanguage", "origtitle", "annotation", "keywords"] }, "post-weblog": { order: 5, biblatex: "online", csl: "post-weblog", required: ["date", "title", "url"], eitheror: ["editor", "author"], optional: ["abstract", "addendum", "pubstate", "shorttitle", "subtitle", "language", "langid", "urldate", "titleaddon", "version", "note", "organization", "origtitle", "annotation", "keywords"] }, book: { order: 10, biblatex: "book", csl: "book", required: ["title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "chapter", "commentator", "doi", "edition", "editor", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "pagetotal", "bookpagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, mvbook: { order: 11, biblatex: "mvbook", csl: "book", required: ["title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "commentator", "doi", "edition", "editor", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "note", "number", "pagetotal", "bookpagination", "publisher", "pubstate", "series", "subtitle", "shorttitle", "titleaddon", "translator", "url", "urldate", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, inbook: { order: 12, biblatex: "inbook", csl: "chapter", required: ["title", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "bookauthor", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editor", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, bookinbook: { order: 13, biblatex: "bookinbook", csl: "chapter", required: ["title", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "bookauthor", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editor", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, suppbook: { order: 14, biblatex: "suppbook", csl: "chapter", required: ["title", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "bookauthor", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editor", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, booklet: { order: 15, biblatex: "booklet", csl: "pamphlet", required: ["title", "date"], eitheror: ["editor", "author"], optional: ["abstract", "titleaddon", "addendum", "pages", "pagination", "howpublished", "type", "pubstate", "chapter", "doi", "shorttitle", "subtitle", "language", "langid", "location", "url", "urldate", "pagetotal", "bookpagination", "note", "eprint", "eprintclass", "eprinttype", "origlanguage", "origlocation", "origtitle", "annotation", "keywords"] }, collection: { order: 20, biblatex: "collection", csl: "dataset", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "pagetotal", "bookpagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, mvcollection: { order: 21, biblatex: "mvcollection", csl: "dataset", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "note", "number", "pagetotal", "bookpagination", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, incollection: { order: 22, biblatex: "incollection", csl: "chapter", required: ["title", "editor", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, suppcollection: { order: 23, biblatex: "suppcollection", csl: "chapter", required: ["title", "editor", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "annotation", "keywords"] }, post: { order: 30, biblatex: "online", csl: "post", required: ["date", "title", "url"], eitheror: ["editor", "author"], optional: ["abstract", "addendum", "pubstate", "subtitle", "shorttitle", "language", "langid", "urldate", "titleaddon", "version", "note", "organization", "origtitle", "annotation", "keywords"] }, manual: { order: 40, biblatex: "manual", csl: "book", required: ["title", "date"], eitheror: ["editor", "author"], optional: ["abstract", "addendum", "chapter", "doi", "edition", "eprint", "eprintclass", "eprinttype", "isbn", "language", "langid", "location", "note", "number", "organization", "pages", "pagination", "pagetotal", "bookpagination", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "type", "url", "urldate", "version", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, misc: { order: 41, biblatex: "misc", csl: "article", required: ["title", "date"], eitheror: ["editor", "author"], optional: ["abstract", "addendum", "howpublished", "type", "pubstate", "organization", "doi", "shorttitle", "subtitle", "language", "langid", "location", "url", "urldate", "titleaddon", "version", "note", "eprint", "eprintclass", "eprinttype", "origlanguage", "origlocation", "origtitle", "annotation", "keywords"] }, online: { order: 42, biblatex: "online", csl: "webpage", required: ["date", "title", "url"], eitheror: ["editor", "author"], optional: ["abstract", "addendum", "language", "langid", "note", "organization", "pubstate", "shorttitle", "subtitle", "titleaddon", "urldate", "version", "origtitle", "annotation", "keywords"] }, patent: { order: 43, biblatex: "patent", csl: "patent", required: ["title", "number", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "holder", "location", "pubstate", "doi", "shorttitle", "subtitle", "titleaddon", "type", "url", "urldate", "version", "note", "eprint", "eprintclass", "eprinttype", "annotation", "keywords"] }, periodical: { order: 50, biblatex: "periodical", csl: "book", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "volume", "pubstate", "number", "series", "issn", "issue", "issuesubtitle", "issuetitle", "doi", "shorttitle", "subtitle", "editora", "editorb", "editorc", "url", "urldate", "language", "langid", "note", "eprint", "eprintclass", "eprinttype", "origtitle", "annotation", "keywords"] }, suppperiodical: { order: 51, biblatex: "suppperiodical", csl: "article", required: ["journaltitle", "title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "annotator", "commentator", "doi", "editor", "editora", "editorb", "editorc", "eid", "eprint", "eprintclass", "eprinttype", "issn", "issue", "issuesubtitle", "issuetitle", "journalsubtitle", "language", "langid", "note", "number", "pages", "pagination", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "version", "volume", "origdate", "origlanguage", "origtitle", "annotation", "keywords"] }, proceedings: { order: 60, biblatex: "proceedings", csl: "book", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "chapter", "doi", "eprint", "eprintclass", "eprinttype", "eventdate", "eventtitle", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "organization", "pages", "pagination", "pagetotal", "bookpagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "url", "urldate", "venue", "volume", "volumes", "annotation", "keywords"] }, mvproceedings: { order: 61, biblatex: "mvproceedings", csl: "book", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "doi", "eprint", "eprintclass", "eprinttype", "eventdate", "eventtitle", "isbn", "language", "langid", "location", "note", "number", "organization", "pagetotal", "bookpagination", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "url", "urldate", "venue", "volumes", "annotation", "keywords"] }, inproceedings: { order: 62, biblatex: "inproceedings", csl: "paper-conference", required: ["title", "editor", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "booksubtitle", "booktitleaddon", "chapter", "doi", "eprint", "eprintclass", "eprinttype", "eventdate", "eventtitle", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "organization", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "url", "urldate", "venue", "volume", "volumes", "annotation", "keywords"] }, reference: { order: 70, biblatex: "book", csl: "reference", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "pagetotal", "bookpagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, mvreference: { order: 71, biblatex: "mvreference", csl: "book", required: ["editor", "title", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "note", "number", "pagetotal", "bookpagination", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, inreference: { order: 72, biblatex: "inreference", csl: "entry-encyclopedia", required: ["title", "editor", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, "entry-encyclopedia": { order: 73, biblatex: "inreference", csl: "entry-encyclopedia", required: ["title", "editor", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, "entry-dictionary": { order: 74, biblatex: "inreference", csl: "entry-dictionary", required: ["title", "editor", "booktitle", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "afterword", "annotator", "booksubtitle", "booktitleaddon", "chapter", "commentator", "doi", "edition", "editora", "editorb", "editorc", "eprint", "eprintclass", "eprinttype", "foreword", "introduction", "isbn", "language", "langid", "location", "mainsubtitle", "maintitle", "maintitleaddon", "note", "number", "pages", "pagination", "part", "publisher", "pubstate", "series", "shorttitle", "subtitle", "titleaddon", "translator", "url", "urldate", "volume", "volumes", "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "annotation", "keywords"] }, report: { order: 80, biblatex: "report", csl: "report", required: ["author", "title", "type", "institution", "date"], eitheror: [], optional: ["abstract", "addendum", "pages", "pagination", "pagetotal", "bookpagination", "pubstate", "number", "isrn", "chapter", "doi", "shorttitle", "subtitle", "language", "langid", "location", "url", "urldate", "titleaddon", "version", "note", "eprint", "eprintclass", "eprinttype", "annotation", "keywords"] }, thesis: { order: 81, biblatex: "thesis", csl: "thesis", required: ["author", "title", "type", "institution", "date"], eitheror: [], optional: ["abstract", "addendum", "pages", "pagination", "pagetotal", "bookpagination", "pubstate", "isbn", "chapter", "doi", "shorttitle", "subtitle", "language", "langid", "location", "url", "urldate", "titleaddon", "note", "eprint", "eprintclass", "eprinttype", "annotation", "keywords"] }, unpublished: { order: 90, biblatex: "unpublished", csl: "manuscript", required: ["title", "author", "date"], eitheror: [], optional: ["abstract", "addendum", "howpublished", "pubstate", "isbn", "date", "shorttitle", "subtitle", "language", "langid", "location", "url", "urldate", "titleaddon", "note", "annotation", "keywords"] } }; [{ tex: /\\\^A|\\\^\{A\}/, unicode: "\xC2" }, { tex: /\\\^a|\\\^\{a\}/, unicode: "\xE2" }, { tex: /\\\^C|\\\^\{C\}/, unicode: "\u0108" }, { tex: /\\\^c|\\\^\{c\}/, unicode: "\u0109" }, { tex: /\\\^E|\\\^\{E\}/, unicode: "\xCA" }, { tex: /\\\^e|\\\^\{e\}/, unicode: "\xEA" }, { tex: /\\\^G|\\\^\{G\}/, unicode: "\u011C" }, { tex: /\\\^g|\\\^\{g\}/, unicode: "\u011D" }, { tex: /\\\^H|\\\^\{H\}/, unicode: "\u0124" }, { tex: /\\\^h|\\\^\{h\}/, unicode: "\u0125" }, { tex: /\\\^I|\\\^\{I\}/, unicode: "\xCE" }, { tex: /\\\^\\i|\\\^\{\\i\}/, unicode: "\xEE" }, { tex: /\\\^J|\\\^\{J\}/, unicode: "\u0134" }, { tex: /\\\^\\j|\\\^\{\\j\}/, unicode: "\u0135" }, { tex: /\\\^O|\\\^\{O\}/, unicode: "\xD4" }, { tex: /\\\^o|\\\^\{o\}/, unicode: "\xF4" }, { tex: /\\\^S|\\\^\{S\}/, unicode: "\u015C" }, { tex: /\\\^s|\\\^\{s\}/, unicode: "\u015D" }, { tex: /\\\^U|\\\^\{U\}/, unicode: "\xDB" }, { tex: /\\\^u|\\\^\{u\}/, unicode: "\xFB" }, { tex: /\\\^W|\\\^\{W\}/, unicode: "\u0174" }, { tex: /\\\^w|\\\^\{w\}/, unicode: "\u0175" }, { tex: /\\\^Y|\\\^\{Y\}/, unicode: "\u0176" }, { tex: /\\\^y|\\\^\{y\}/, unicode: "\u0177" }, { tex: /\\\.C|\\\.\{C\}/, unicode: "\u010A" }, { tex: /\\\.c|\\\.\{c\}/, unicode: "\u010B" }, { tex: /\\\.E|\\\.\{E\}/, unicode: "\u0116" }, { tex: /\\\.e|\\\.\{e\}/, unicode: "\u0117" }, { tex: /\\\.G|\\\.\{G\}/, unicode: "\u0120" }, { tex: /\\\.g|\\\.\{g\}/, unicode: "\u0121" }, { tex: /\\\.I|\\\.\{I\}/, unicode: "\u0130" }, { tex: /\\\.Z|\\\.\{Z\}/, unicode: "\u017B" }, { tex: /\\\.z|\\\.\{z\}/, unicode: "\u017C" }, { tex: /\\=A|\\=\{A\}/, unicode: "\u0100" }, { tex: /\\=a|\\=\{a\}/, unicode: "\u0101" }, { tex: /\\=E|\\=\{E\}/, unicode: "\u0112" }, { tex: /\\=e|\\=\{e\}/, unicode: "\u0113" }, { tex: /\\=I|\\=\{I\}/, unicode: "\u012A" }, { tex: /\\=\\i|\\=\{\\i\}/, unicode: "\u012B" }, { tex: /\\=O|\\=\{O\}/, unicode: "\u014C" }, { tex: /\\=o|\\=\{o\}/, unicode: "\u014D" }, { tex: /\\=U|\\=\{U\}/, unicode: "\u016A" }, { tex: /\\=u|\\=\{u\}/, unicode: "\u016B" }, { tex: /\\~A|\\~\{A\}/, unicode: "\xC3" }, { tex: /\\~a|\\~\{a\}/, unicode: "\xE3" }, { tex: /\\~I|\\~\{I\}/, unicode: "\u0128" }, { tex: /\\~\\i/, unicode: "\u0129" }, { tex: /\\~N|\\~\{N\}/, unicode: "\xD1" }, { tex: /\\~n|\\~\{n\}/, unicode: "\xF1" }, { tex: /\\~O|\\~\{O\}/, unicode: "\xD5" }, { tex: /\\~o|\\~\{o\}/, unicode: "\xF5" }, { tex: /\\~U|\\~\{U\}/, unicode: "\u0168" }, { tex: /\\~u|\\~\{u\}/, unicode: "\u0169" }, { tex: /\\`A|\\`\{A\}/, unicode: "\xC0" }, { tex: /\\`a|\\`\{a\}/, unicode: "\xE0" }, { tex: /\\`E|\\`\{E\}/, unicode: "\xC8" }, { tex: /\\`e|\\`\{e\}/, unicode: "\xE8" }, { tex: /\\`I|\\`\{I\}/, unicode: "\xCC" }, { tex: /\\`\\i|\\`i|\\`\{\\i\}|\\`\{i\}/, unicode: "\xEC" }, { tex: /\\`O|\\`\{O\}/, unicode: "\xD2" }, { tex: /\\`o|\\`\{o\}/, unicode: "\xF2" }, { tex: /\\`U|\\`\{U\}/, unicode: "\xD9" }, { tex: /\\`u|\\`\{u\}/, unicode: "\xF9" }, { tex: /\\"A|\\"\{A\}/, unicode: "\xC4" }, { tex: /\\"a|\\"\{a\}/, unicode: "\xE4" }, { tex: /\\"E|\\"\{E\}/, unicode: "\xCB" }, { tex: /\\"e|\\"\{e\}/, unicode: "\xEB" }, { tex: /\\"\\i|\\"\{\\i\}|\\"i|\\"\{i\}/, unicode: "\xEF" }, { tex: /\\"I|\\"\{I\}/, unicode: "\xCF" }, { tex: /\\"O|\\"\{O\}/, unicode: "\xD6" }, { tex: /\\"o|\\"\{o\}/, unicode: "\xF6" }, { tex: /\\"U|\\"\{U\}/, unicode: "\xDC" }, { tex: /\\"u|\\"\{u\}/, unicode: "\xFC" }, { tex: /\\"Y|\\"\{Y\}/, unicode: "\u0178" }, { tex: /\\"y|\\"\{y\}/, unicode: "\xFF" }, { tex: /\\'A|\\'\{A\}/, unicode: "\xC1" }, { tex: /\\'a|\\'\{a\}/, unicode: "\xE1" }, { tex: /\\'C|\\'\{C\}/, unicode: "\u0106" }, { tex: /\\'c|\\'\{c\}/, unicode: "\u0107" }, { tex: /\\'E|\\'\{E\}/, unicode: "\xC9" }, { tex: /\\'e|\\'\{e\}/, unicode: "\xE9" }, { tex: /\\'g|\\'\{g\}/, unicode: "\u01F5" }, { tex: /\\'H|\\'\{H\}/, unicode: "\u0389" }, { tex: /\\'I|\\'\{I\}/, unicode: "\xCD" }, { tex: /\\'\\i|\\'i/, unicode: "\xED" }, { tex: /\\'L|\\'\{L\}/, unicode: "\u0139" }, { tex: /\\'l|\\'\{l\}/, unicode: "\u013A" }, { tex: /\\'N|\\'\{N\}/, unicode: "\u0143" }, { tex: /\\'n|\\'\{n\}/, unicode: "\u0144" }, { tex: /\\'O|\\'\{O\}/, unicode: "\xD3" }, { tex: /\\'o|\\'\{o\}/, unicode: "\xF3" }, { tex: /\\'R|\\'\{R\}/, unicode: "\u0154" }, { tex: /\\'r|\\'\{r\}/, unicode: "\u0155" }, { tex: /\\'S|\\'\{S\}/, unicode: "\u015A" }, { tex: /\\'s|\\'\{s\}/, unicode: "\u015B" }, { tex: /\\'U|\\'\{U\}/, unicode: "\xDA" }, { tex: /\\'u|\\'\{u\}/, unicode: "\xFA" }, { tex: /\\'Y|\\'\{Y\}/, unicode: "\xDD" }, { tex: /\\'y|\\'\{y\}/, unicode: "\xFD" }, { tex: /\\'Z|\\'\{Z\}/, unicode: "\u0179" }, { tex: /\\'z|\\'\{z\}/, unicode: "\u017A" }, { tex: /\\c C|\\c\{C\}/, unicode: "\xC7" }, { tex: /\\c c|\\c\{c\}/, unicode: "\xE7" }, { tex: /\\c G|\\c\{G\}/, unicode: "\u0122" }, { tex: /\\c g|\\c\{g\}/, unicode: "\u0123" }, { tex: /\\c K|\\c\{K\}/, unicode: "\u0136" }, { tex: /\\c k|\\c\{k\}/, unicode: "\u0137" }, { tex: /\\c L|\\c\{L\}/, unicode: "\u013B" }, { tex: /\\c l|\\c\{l\}/, unicode: "\u013C" }, { tex: /\\c N|\\c\{N\}/, unicode: "\u0145" }, { tex: /\\c n|\\c\{n\}/, unicode: "\u0146" }, { tex: /\\c R|\\c\{R\}/, unicode: "\u0156" }, { tex: /\\c r|\\c\{r\}/, unicode: "\u0157" }, { tex: /\\c S|\\c\{S\}/, unicode: "\u015E" }, { tex: /\\c s|\\c\{s\}/, unicode: "\u015F" }, { tex: /\\c T|\\c\{T\}/, unicode: "\u0162" }, { tex: /\\c t|\\c\{t\}/, unicode: "\u0163" }, { tex: /\\H O|\\H\{O\}/, unicode: "\u0150" }, { tex: /\\H o|\\H\{o\}/, unicode: "\u0151" }, { tex: /\\H U|\\H\{U\}/, unicode: "\u0170" }, { tex: /\\H u|\\H\{u\}/, unicode: "\u0171" }, { tex: /\\k A|\\k\{A\}/, unicode: "\u0104" }, { tex: /\\k a|\\k\{a\}/, unicode: "\u0105" }, { tex: /\\k E|\\k\{E\}/, unicode: "\u0118" }, { tex: /\\k e|\\k\{e\}/, unicode: "\u0119" }, { tex: /\\k I|\\k\{I\}/, unicode: "\u012E" }, { tex: /\\k i|\\k\{i\}/, unicode: "\u012F" }, { tex: /\\k U|\\k\{U\}/, unicode: "\u0172" }, { tex: /\\k u|\\k\{u\}/, unicode: "\u0173" }, { tex: /\\r U|\\r\{U\}/, unicode: "\u016E" }, { tex: /\\r u|\\r\{u\}/, unicode: "\u016F" }, { tex: /\\u A|\\u\{A\}/, unicode: "\u0102" }, { tex: /\\u a|\\u\{a\}/, unicode: "\u0103" }, { tex: /\\u E|\\u\{E\}/, unicode: "\u0114" }, { tex: /\\u e|\\u\{e\}/, unicode: "\u0115" }, { tex: /\\u G|\\u\{G\}/, unicode: "\u011E" }, { tex: /\\u g|\\u\{g\}/, unicode: "\u011F" }, { tex: /\\u I|\\u\{I\}/, unicode: "\u012C" }, { tex: /\\u \\i/, unicode: "\u012D" }, { tex: /\\u O|\\u\{O\}/, unicode: "\u014E" }, { tex: /\\u o|\\u\{o\}/, unicode: "\u014F" }, { tex: /\\u U|\\u\{U\}/, unicode: "\u016C" }, { tex: /\\u u|\\u\{u\}/, unicode: "\u016D" }, { tex: /\\v A|\\v\{A\}/, unicode: "\u01CD" }, { tex: /\\v a|\\v\{a\}/, unicode: "\u01CE" }, { tex: /\\v C|\\v\{C\}/, unicode: "\u010C" }, { tex: /\\v c|\\v\{c\}/, unicode: "\u010D" }, { tex: /\\v D|\\v\{D\}/, unicode: "\u010E" }, { tex: /\\v d|\\v\{d\}/, unicode: "\u010F" }, { tex: /\\v E|\\v\{E\}/, unicode: "\u011A" }, { tex: /\\v e|\\v\{e\}/, unicode: "\u011B" }, { tex: /\\v I|\\v\{I\}/, unicode: "\u01CF" }, { tex: /\\v i|\\v\{i\}/, unicode: "\u01D0" }, { tex: /\\v L|\\v\{L\}/, unicode: "\u013D" }, { tex: /\\v l|\\v\{l\}/, unicode: "\u013E" }, { tex: /\\v N|\\v\{N\}/, unicode: "\u0147" }, { tex: /\\v n|\\v\{n\}/, unicode: "\u0148" }, { tex: /\\v O|\\v\{O\}/, unicode: "\u01D1" }, { tex: /\\v o|\\v\{o\}/, unicode: "\u01D2" }, { tex: /\\v R|\\v\{R\}/, unicode: "\u0158" }, { tex: /\\v r|\\v\{r\}/, unicode: "\u0159" }, { tex: /\\v S|\\v\{S\}/, unicode: "\u0160" }, { tex: /\\v s|\\v\{s\}/, unicode: "\u0161" }, { tex: /\\v T|\\v\{T\}/, unicode: "\u0164" }, { tex: /\\v t|\\v\{t\}/, unicode: "\u0165" }, { tex: /\\v U|\\v\{U\}/, unicode: "\u01D3" }, { tex: /\\v u|\\v\{u\}/, unicode: "\u01D4" }, { tex: /\\v Z|\\v\{Z\}/, unicode: "\u017D" }, { tex: /\\v z|\\v\{z\}/, unicode: "\u017E" }, { tex: /\\texteuro|\{\\mbox\{\\texteuro\}\}|\\mbox\{\\texteuro\}/, unicode: "\u20AC" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char220\}|\\fontencoding\{LECO\}\\selectfont\\char220/, unicode: "\u033C" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char225\}|\\fontencoding\{LECO\}\\selectfont\\char225/, unicode: "\u0361" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char201\}|\\fontencoding\{LELA\}\\selectfont\\char201/, unicode: "\u013F" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char218\}|\\fontencoding\{LECO\}\\selectfont\\char218/, unicode: "\u033A" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char202\}|\\fontencoding\{LELA\}\\selectfont\\char202/, unicode: "\u0140" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char207\}|\\fontencoding\{LECO\}\\selectfont\\char207/, unicode: "\u032F" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char203\}|\\fontencoding\{LECO\}\\selectfont\\char203/, unicode: "\u032B" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char185\}|\\fontencoding\{LECO\}\\selectfont\\char185/, unicode: "\u0319" }, { tex: /\{\\fontencoding\{LEIP\}\\selectfont\\char202\}|\\fontencoding\{LEIP\}\\selectfont\\char202/, unicode: "\u027F" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char184\}|\\fontencoding\{LECO\}\\selectfont\\char184/, unicode: "\u0318" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char177\}|\\fontencoding\{LECO\}\\selectfont\\char177/, unicode: "\u0311" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char195\}|\\fontencoding\{LELA\}\\selectfont\\char195/, unicode: "\u01BA" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char215\}|\\fontencoding\{LECO\}\\selectfont\\char215/, unicode: "\u0337" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char216\}|\\fontencoding\{LECO\}\\selectfont\\char216/, unicode: "\u0338" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char219\}|\\fontencoding\{LECO\}\\selectfont\\char219/, unicode: "\u033B" }, { tex: /\{\\fontencoding\{LECO\}\\selectfont\\char221\}|\\fontencoding\{LECO\}\\selectfont\\char221/, unicode: "\u033D" }, { tex: /\{\\fontencoding\{LEIP\}\\selectfont\\char61\}|\\fontencoding\{LEIP\}\\selectfont\\char61/, unicode: "\u0258" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char63\}|\\fontencoding\{LELA\}\\selectfont\\char63/, unicode: "\u0167" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char91\}|\\fontencoding\{LELA\}\\selectfont\\char91/, unicode: "\u0138" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char40\}|\\fontencoding\{LELA\}\\selectfont\\char40/, unicode: "\u0126" }, { tex: /\{\\fontencoding\{LELA\}\\selectfont\\char47\}|\\fontencoding\{LELA\}\\selectfont\\char47/, unicode: "\u0166" }, { tex: /\\mathbin\{\{:\}\\!\\!\{-\}\\!\\!\{:\}\}/, unicode: "\u223A" }, { tex: /\\mathbit\{A\}/, unicode: "\u{1D468}" }, { tex: /\\mathbit\{a\}/, unicode: "\u{1D482}" }, { tex: /\\mathbit\{B\}/, unicode: "\u{1D469}" }, { tex: /\\mathbit\{b\}/, unicode: "\u{1D483}" }, { tex: /\\mathbit\{C\}/, unicode: "\u{1D46A}" }, { tex: /\\mathbit\{c\}/, unicode: "\u{1D484}" }, { tex: /\\mathbit\{\\Delta\}/, unicode: "\u{1D71F}" }, { tex: /\\mathbit\{D\}/, unicode: "\u{1D46B}" }, { tex: /\\mathbit\{d\}/, unicode: "\u{1D485}" }, { tex: /\\mathbit\{E\}/, unicode: "\u{1D46C}" }, { tex: /\\mathbit\{e\}/, unicode: "\u{1D486}" }, { tex: /\\mathbit\{F\}/, unicode: "\u{1D46D}" }, { tex: /\\mathbit\{f\}/, unicode: "\u{1D487}" }, { tex: /\\mathbit\{\\Gamma\}/, unicode: "\u{1D71E}" }, { tex: /\\mathbit\{G\}/, unicode: "\u{1D46E}" }, { tex: /\\mathbit\{g\}/, unicode: "\u{1D488}" }, { tex: /\\mathbit\{H\}/, unicode: "\u{1D46F}" }, { tex: /\\mathbit\{h\}/, unicode: "\u{1D489}" }, { tex: /\\mathbit\{I\}/, unicode: "\u{1D470}" }, { tex: /\\mathbit\{i\}/, unicode: "\u{1D48A}" }, { tex: /\\mathbit\{J\}/, unicode: "\u{1D471}" }, { tex: /\\mathbit\{j\}/, unicode: "\u{1D48B}" }, { tex: /\\mathbit\{K\}/, unicode: "\u{1D472}" }, { tex: /\\mathbit\{k\}/, unicode: "\u{1D48C}" }, { tex: /\\mathbit\{\\Lambda\}/, unicode: "\u{1D726}" }, { tex: /\\mathbit\{L\}/, unicode: "\u{1D473}" }, { tex: /\\mathbit\{l\}/, unicode: "\u{1D48D}" }, { tex: /\\mathbit\{M\}/, unicode: "\u{1D474}" }, { tex: /\\mathbit\{m\}/, unicode: "\u{1D48E}" }, { tex: /\\mathbit\{\\nabla\}/, unicode: "\u{1D735}" }, { tex: /\\mathbit\{N\}/, unicode: "\u{1D475}" }, { tex: /\\mathbit\{n\}/, unicode: "\u{1D48F}" }, { tex: /\\mathbit\{\\Omega\}/, unicode: "\u{1D734}" }, { tex: /\\mathbit\{O\}/, unicode: "\u{1D476}" }, { tex: /\\mathbit\{o\}/, unicode: "\u{1D490}" }, { tex: /\\mathbit\{\\Phi\}/, unicode: "\u{1D731}" }, { tex: /\\mathbit\{\\phi\}/, unicode: "\u{1D753}" }, { tex: /\\mathbit\{\\Pi\}/, unicode: "\u{1D72B}" }, { tex: /\\mathbit\{\\Psi\}/, unicode: "\u{1D733}" }, { tex: /\\mathbit\{P\}/, unicode: "\u{1D477}" }, { tex: /\\mathbit\{p\}/, unicode: "\u{1D491}" }, { tex: /\\mathbit\{Q\}/, unicode: "\u{1D478}" }, { tex: /\\mathbit\{q\}/, unicode: "\u{1D492}" }, { tex: /\\mathbit\{R\}/, unicode: "\u{1D479}" }, { tex: /\\mathbit\{r\}/, unicode: "\u{1D493}" }, { tex: /\\mathbit\{\\Sigma\}/, unicode: "\u{1D72E}" }, { tex: /\\mathbit\{S\}/, unicode: "\u{1D47A}" }, { tex: /\\mathbit\{s\}/, unicode: "\u{1D494}" }, { tex: /\\mathbit\{\\Theta\}/, unicode: "\u{1D723}" }, { tex: /\\mathbit\{T\}/, unicode: "\u{1D47B}" }, { tex: /\\mathbit\{t\}/, unicode: "\u{1D495}" }, { tex: /\\mathbit\{\\Upsilon\}/, unicode: "\u{1D730}" }, { tex: /\\mathbit\{U\}/, unicode: "\u{1D47C}" }, { tex: /\\mathbit\{u\}/, unicode: "\u{1D496}" }, { tex: /\\mathbit\{\\varkappa\}/, unicode: "\u{1D752}" }, { tex: /\\mathbit\{\\varpi\}/, unicode: "\u{1D755}" }, { tex: /\\mathbit\{\\varrho\}/, unicode: "\u{1D754}" }, { tex: /\\mathbit\{\\varsigma\}/, unicode: "\u{1D747}" }, { tex: /\\mathbit\{\\vartheta\}/, unicode: "\u{1D751}" }, { tex: /\\mathbit\{V\}/, unicode: "\u{1D47D}" }, { tex: /\\mathbit\{v\}/, unicode: "\u{1D497}" }, { tex: /\\mathbit\{W\}/, unicode: "\u{1D47E}" }, { tex: /\\mathbit\{w\}/, unicode: "\u{1D498}" }, { tex: /\\mathbit\{\\Xi\}/, unicode: "\u{1D729}" }, { tex: /\\mathbit\{X\}/, unicode: "\u{1D47F}" }, { tex: /\\mathbit\{x\}/, unicode: "\u{1D499}" }, { tex: /\\mathbit\{Y\}/, unicode: "\u{1D480}" }, { tex: /\\mathbit\{y\}/, unicode: "\u{1D49A}" }, { tex: /\\mathbit\{Z\}/, unicode: "\u{1D481}" }, { tex: /\\mathbit\{z\}/, unicode: "\u{1D49B}" }, { tex: /\\mathsfbfsl\{A\}/, unicode: "\u{1D63C}" }, { tex: /\\mathsfbfsl\{a\}/, unicode: "\u{1D656}" }, { tex: /\\mathsfbfsl\{B\}/, unicode: "\u{1D63D}" }, { tex: /\\mathsfbfsl\{b\}/, unicode: "\u{1D657}" }, { tex: /\\mathsfbfsl\{C\}/, unicode: "\u{1D63E}" }, { tex: /\\mathsfbfsl\{c\}/, unicode: "\u{1D658}" }, { tex: /\\mathsfbfsl\{\\Delta\}/, unicode: "\u{1D793}" }, { tex: /\\mathsfbfsl\{D\}/, unicode: "\u{1D63F}" }, { tex: /\\mathsfbfsl\{d\}/, unicode: "\u{1D659}" }, { tex: /\\mathsfbfsl\{E\}/, unicode: "\u{1D640}" }, { tex: /\\mathsfbfsl\{e\}/, unicode: "\u{1D65A}" }, { tex: /\\mathsfbfsl\{F\}/, unicode: "\u{1D641}" }, { tex: /\\mathsfbfsl\{f\}/, unicode: "\u{1D65B}" }, { tex: /\\mathsfbfsl\{\\Gamma\}/, unicode: "\u{1D792}" }, { tex: /\\mathsfbfsl\{G\}/, unicode: "\u{1D642}" }, { tex: /\\mathsfbfsl\{g\}/, unicode: "\u{1D65C}" }, { tex: /\\mathsfbfsl\{H\}/, unicode: "\u{1D643}" }, { tex: /\\mathsfbfsl\{h\}/, unicode: "\u{1D65D}" }, { tex: /\\mathsfbfsl\{I\}/, unicode: "\u{1D644}" }, { tex: /\\mathsfbfsl\{i\}/, unicode: "\u{1D65E}" }, { tex: /\\mathsfbfsl\{J\}/, unicode: "\u{1D645}" }, { tex: /\\mathsfbfsl\{j\}/, unicode: "\u{1D65F}" }, { tex: /\\mathsfbfsl\{K\}/, unicode: "\u{1D646}" }, { tex: /\\mathsfbfsl\{k\}/, unicode: "\u{1D660}" }, { tex: /\\mathsfbfsl\{\\Lambda\}/, unicode: "\u{1D79A}" }, { tex: /\\mathsfbfsl\{L\}/, unicode: "\u{1D647}" }, { tex: /\\mathsfbfsl\{l\}/, unicode: "\u{1D661}" }, { tex: /\\mathsfbfsl\{M\}/, unicode: "\u{1D648}" }, { tex: /\\mathsfbfsl\{m\}/, unicode: "\u{1D662}" }, { tex: /\\mathsfbfsl\{\\nabla\}/, unicode: "\u{1D7A9}" }, { tex: /\\mathsfbfsl\{N\}/, unicode: "\u{1D649}" }, { tex: /\\mathsfbfsl\{n\}/, unicode: "\u{1D663}" }, { tex: /\\mathsfbfsl\{\\Omega\}/, unicode: "\u{1D7A8}" }, { tex: /\\mathsfbfsl\{O\}/, unicode: "\u{1D64A}" }, { tex: /\\mathsfbfsl\{o\}/, unicode: "\u{1D664}" }, { tex: /\\mathsfbfsl\{\\Phi\}/, unicode: "\u{1D7A5}" }, { tex: /\\mathsfbfsl\{\\phi\}/, unicode: "\u{1D7C7}" }, { tex: /\\mathsfbfsl\{\\Pi\}/, unicode: "\u{1D79F}" }, { tex: /\\mathsfbfsl\{\\Psi\}/, unicode: "\u{1D7A7}" }, { tex: /\\mathsfbfsl\{P\}/, unicode: "\u{1D64B}" }, { tex: /\\mathsfbfsl\{p\}/, unicode: "\u{1D665}" }, { tex: /\\mathsfbfsl\{Q\}/, unicode: "\u{1D64C}" }, { tex: /\\mathsfbfsl\{q\}/, unicode: "\u{1D666}" }, { tex: /\\mathsfbfsl\{R\}/, unicode: "\u{1D64D}" }, { tex: /\\mathsfbfsl\{r\}/, unicode: "\u{1D667}" }, { tex: /\\mathsfbfsl\{\\Sigma\}/, unicode: "\u{1D7A2}" }, { tex: /\\mathsfbfsl\{S\}/, unicode: "\u{1D64E}" }, { tex: /\\mathsfbfsl\{s\}/, unicode: "\u{1D668}" }, { tex: /\\mathsfbfsl\{T\}/, unicode: "\u{1D64F}" }, { tex: /\\mathsfbfsl\{t\}/, unicode: "\u{1D669}" }, { tex: /\\mathsfbfsl\{\\Upsilon\}/, unicode: "\u{1D7A4}" }, { tex: /\\mathsfbfsl\{U\}/, unicode: "\u{1D650}" }, { tex: /\\mathsfbfsl\{u\}/, unicode: "\u{1D66A}" }, { tex: /\\mathsfbfsl\{\\varkappa\}/, unicode: "\u{1D7C6}" }, { tex: /\\mathsfbfsl\{\\varpi\}/, unicode: "\u{1D7C9}" }, { tex: /\\mathsfbfsl\{\\varrho\}/, unicode: "\u{1D7C8}" }, { tex: /\\mathsfbfsl\{\\varsigma\}/, unicode: "\u{1D7BB}" }, { tex: /\\mathsfbfsl\{\\vartheta\}/, unicode: "\u{1D797}" }, { tex: /\\mathsfbfsl\{V\}/, unicode: "\u{1D651}" }, { tex: /\\mathsfbfsl\{v\}/, unicode: "\u{1D66B}" }, { tex: /\\mathsfbfsl\{W\}/, unicode: "\u{1D652}" }, { tex: /\\mathsfbfsl\{w\}/, unicode: "\u{1D66C}" }, { tex: /\\mathsfbfsl\{\\Xi\}/, unicode: "\u{1D79D}" }, { tex: /\\mathsfbfsl\{X\}/, unicode: "\u{1D653}" }, { tex: /\\mathsfbfsl\{x\}/, unicode: "\u{1D66D}" }, { tex: /\\mathsfbfsl\{Y\}/, unicode: "\u{1D654}" }, { tex: /\\mathsfbfsl\{y\}/, unicode: "\u{1D66E}" }, { tex: /\\mathsfbfsl\{Z\}/, unicode: "\u{1D655}" }, { tex: /\\mathsfbfsl\{z\}/, unicode: "\u{1D66F}" }, { tex: /\\mathsfbf\{0\}/, unicode: "\u{1D7EC}" }, { tex: /\\mathsfbf\{1\}/, unicode: "\u{1D7ED}" }, { tex: /\\mathsfbf\{2\}/, unicode: "\u{1D7EE}" }, { tex: /\\mathsfbf\{3\}/, unicode: "\u{1D7EF}" }, { tex: /\\mathsfbf\{4\}/, unicode: "\u{1D7F0}" }, { tex: /\\mathsfbf\{5\}/, unicode: "\u{1D7F1}" }, { tex: /\\mathsfbf\{6\}/, unicode: "\u{1D7F2}" }, { tex: /\\mathsfbf\{7\}/, unicode: "\u{1D7F3}" }, { tex: /\\mathsfbf\{8\}/, unicode: "\u{1D7F4}" }, { tex: /\\mathsfbf\{9\}/, unicode: "\u{1D7F5}" }, { tex: /\\mathsfbf\{A\}/, unicode: "\u{1D5D4}" }, { tex: /\\mathsfbf\{a\}/, unicode: "\u{1D5EE}" }, { tex: /\\mathsfbf\{B\}/, unicode: "\u{1D5D5}" }, { tex: /\\mathsfbf\{b\}/, unicode: "\u{1D5EF}" }, { tex: /\\mathsfbf\{C\}/, unicode: "\u{1D5D6}" }, { tex: /\\mathsfbf\{c\}/, unicode: "\u{1D5F0}" }, { tex: /\\mathsfbf\{\\Delta\}/, unicode: "\u{1D759}" }, { tex: /\\mathsfbf\{D\}/, unicode: "\u{1D5D7}" }, { tex: /\\mathsfbf\{d\}/, unicode: "\u{1D5F1}" }, { tex: /\\mathsfbf\{E\}/, unicode: "\u{1D5D8}" }, { tex: /\\mathsfbf\{e\}/, unicode: "\u{1D5F2}" }, { tex: /\\mathsfbf\{F\}/, unicode: "\u{1D5D9}" }, { tex: /\\mathsfbf\{f\}/, unicode: "\u{1D5F3}" }, { tex: /\\mathsfbf\{\\Gamma\}/, unicode: "\u{1D758}" }, { tex: /\\mathsfbf\{G\}/, unicode: "\u{1D5DA}" }, { tex: /\\mathsfbf\{g\}/, unicode: "\u{1D5F4}" }, { tex: /\\mathsfbf\{H\}/, unicode: "\u{1D5DB}" }, { tex: /\\mathsfbf\{h\}/, unicode: "\u{1D5F5}" }, { tex: /\\mathsfbf\{I\}/, unicode: "\u{1D5DC}" }, { tex: /\\mathsfbf\{i\}/, unicode: "\u{1D5F6}" }, { tex: /\\mathsfbf\{J\}/, unicode: "\u{1D5DD}" }, { tex: /\\mathsfbf\{j\}/, unicode: "\u{1D5F7}" }, { tex: /\\mathsfbf\{K\}/, unicode: "\u{1D5DE}" }, { tex: /\\mathsfbf\{k\}/, unicode: "\u{1D5F8}" }, { tex: /\\mathsfbf\{\\Lambda\}/, unicode: "\u{1D760}" }, { tex: /\\mathsfbf\{L\}/, unicode: "\u{1D5DF}" }, { tex: /\\mathsfbf\{l\}/, unicode: "\u{1D5F9}" }, { tex: /\\mathsfbf\{M\}/, unicode: "\u{1D5E0}" }, { tex: /\\mathsfbf\{m\}/, unicode: "\u{1D5FA}" }, { tex: /\\mathsfbf\{\\nabla\}/, unicode: "\u{1D76F}" }, { tex: /\\mathsfbf\{N\}/, unicode: "\u{1D5E1}" }, { tex: /\\mathsfbf\{n\}/, unicode: "\u{1D5FB}" }, { tex: /\\mathsfbf\{\\Omega\}/, unicode: "\u{1D76E}" }, { tex: /\\mathsfbf\{O\}/, unicode: "\u{1D5E2}" }, { tex: /\\mathsfbf\{o\}/, unicode: "\u{1D5FC}" }, { tex: /\\mathsfbf\{\\Phi\}/, unicode: "\u{1D76B}" }, { tex: /\\mathsfbf\{\\phi\}/, unicode: "\u{1D78D}" }, { tex: /\\mathsfbf\{\\Pi\}/, unicode: "\u{1D765}" }, { tex: /\\mathsfbf\{\\Psi\}/, unicode: "\u{1D76D}" }, { tex: /\\mathsfbf\{P\}/, unicode: "\u{1D5E3}" }, { tex: /\\mathsfbf\{p\}/, unicode: "\u{1D5FD}" }, { tex: /\\mathsfbf\{Q\}/, unicode: "\u{1D5E4}" }, { tex: /\\mathsfbf\{q\}/, unicode: "\u{1D5FE}" }, { tex: /\\mathsfbf\{R\}/, unicode: "\u{1D5E5}" }, { tex: /\\mathsfbf\{r\}/, unicode: "\u{1D5FF}" }, { tex: /\\mathsfbf\{\\Sigma\}/, unicode: "\u{1D768}" }, { tex: /\\mathsfbf\{S\}/, unicode: "\u{1D5E6}" }, { tex: /\\mathsfbf\{s\}/, unicode: "\u{1D600}" }, { tex: /\\mathsfbf\{\\Theta\}/, unicode: "\u{1D75D}" }, { tex: /\\mathsfbf\{T\}/, unicode: "\u{1D5E7}" }, { tex: /\\mathsfbf\{t\}/, unicode: "\u{1D601}" }, { tex: /\\mathsfbf\{\\Upsilon\}/, unicode: "\u{1D76A}" }, { tex: /\\mathsfbf\{U\}/, unicode: "\u{1D5E8}" }, { tex: /\\mathsfbf\{u\}/, unicode: "\u{1D602}" }, { tex: /\\mathsfbf\{\\varkappa\}/, unicode: "\u{1D78C}" }, { tex: /\\mathsfbf\{\\varpi\}/, unicode: "\u{1D78F}" }, { tex: /\\mathsfbf\{\\varrho\}/, unicode: "\u{1D78E}" }, { tex: /\\mathsfbf\{\\varsigma\}/, unicode: "\u{1D781}" }, { tex: /\\mathsfbf\{\\vartheta\}/, unicode: "\u{1D767}" }, { tex: /\\mathsfbf\{V\}/, unicode: "\u{1D5E9}" }, { tex: /\\mathsfbf\{v\}/, unicode: "\u{1D603}" }, { tex: /\\mathsfbf\{W\}/, unicode: "\u{1D5EA}" }, { tex: /\\mathsfbf\{w\}/, unicode: "\u{1D604}" }, { tex: /\\mathsfbf\{\\Xi\}/, unicode: "\u{1D763}" }, { tex: /\\mathsfbf\{X\}/, unicode: "\u{1D5EB}" }, { tex: /\\mathsfbf\{x\}/, unicode: "\u{1D605}" }, { tex: /\\mathsfbf\{Y\}/, unicode: "\u{1D5EC}" }, { tex: /\\mathsfbf\{y\}/, unicode: "\u{1D606}" }, { tex: /\\mathsfbf\{Z\}/, unicode: "\u{1D5ED}" }, { tex: /\\mathsfbf\{z\}/, unicode: "\u{1D607}" }, { tex: /\\mathrm\{\\ddot\{I\}\}/, unicode: "\u03AA" }, { tex: /\\mathrm\{\\ddot\{Y\}\}/, unicode: "\u03AB" }, { tex: /\\mathrm\{\\mu\}/, unicode: "\xB5" }, { tex: /\\mathrm\{'\\Omega\}/, unicode: "\u038F" }, { tex: /\\mathrm\{'Y\}/, unicode: "\u038E" }, { tex: /\\mathrm/, unicode: "" }, { tex: /\\mathsl\{A\}/, unicode: "\u{1D434}" }, { tex: /\\mathsl\{a\}/, unicode: "\u{1D44E}" }, { tex: /\\mathsl\{B\}/, unicode: "\u{1D435}" }, { tex: /\\mathsl\{b\}/, unicode: "\u{1D44F}" }, { tex: /\\mathsl\{C\}/, unicode: "\u{1D436}" }, { tex: /\\mathsl\{c\}/, unicode: "\u{1D450}" }, { tex: /\\mathsl\{\\Delta\}/, unicode: "\u{1D6E5}" }, { tex: /\\mathsl\{D\}/, unicode: "\u{1D437}" }, { tex: /\\mathsl\{d\}/, unicode: "\u{1D451}" }, { tex: /\\mathsl\{E\}/, unicode: "\u{1D438}" }, { tex: /\\mathsl\{e\}/, unicode: "\u{1D452}" }, { tex: /\\mathsl\{F\}/, unicode: "\u{1D439}" }, { tex: /\\mathsl\{f\}/, unicode: "\u{1D453}" }, { tex: /\\mathsl\{\\Gamma\}/, unicode: "\u{1D6E4}" }, { tex: /\\mathsl\{G\}/, unicode: "\u{1D43A}" }, { tex: /\\mathsl\{g\}/, unicode: "\u{1D454}" }, { tex: /\\mathsl\{H\}/, unicode: "\u{1D43B}" }, { tex: /\\mathsl\{I\}/, unicode: "\u{1D43C}" }, { tex: /\\mathsl\{i\}/, unicode: "\u{1D456}" }, { tex: /\\mathsl\{J\}/, unicode: "\u{1D43D}" }, { tex: /\\mathsl\{j\}/, unicode: "\u{1D457}" }, { tex: /\\mathsl\{K\}/, unicode: "\u{1D43E}" }, { tex: /\\mathsl\{k\}/, unicode: "\u{1D458}" }, { tex: /\\mathsl\{\\Lambda\}/, unicode: "\u{1D6EC}" }, { tex: /\\mathsl\{L\}/, unicode: "\u{1D43F}" }, { tex: /\\mathsl\{l\}/, unicode: "\u{1D459}" }, { tex: /\\mathsl\{M\}/, unicode: "\u{1D440}" }, { tex: /\\mathsl\{m\}/, unicode: "\u{1D45A}" }, { tex: /\\mathsl\{\\nabla\}/, unicode: "\u{1D6FB}" }, { tex: /\\mathsl\{N\}/, unicode: "\u{1D441}" }, { tex: /\\mathsl\{n\}/, unicode: "\u{1D45B}" }, { tex: /\\mathsl\{\\Omega\}/, unicode: "\u{1D6FA}" }, { tex: /\\mathsl\{O\}/, unicode: "\u{1D442}" }, { tex: /\\mathsl\{o\}/, unicode: "\u{1D45C}" }, { tex: /\\mathsl\{\\Phi\}/, unicode: "\u{1D6F7}" }, { tex: /\\mathsl\{\\phi\}/, unicode: "\u{1D719}" }, { tex: /\\mathsl\{\\Pi\}/, unicode: "\u{1D6F1}" }, { tex: /\\mathsl\{\\Psi\}/, unicode: "\u{1D6F9}" }, { tex: /\\mathsl\{P\}/, unicode: "\u{1D443}" }, { tex: /\\mathsl\{p\}/, unicode: "\u{1D45D}" }, { tex: /\\mathsl\{Q\}/, unicode: "\u{1D444}" }, { tex: /\\mathsl\{q\}/, unicode: "\u{1D45E}" }, { tex: /\\mathsl\{R\}/, unicode: "\u{1D445}" }, { tex: /\\mathsl\{r\}/, unicode: "\u{1D45F}" }, { tex: /\\mathsl\{\\Sigma\}/, unicode: "\u{1D6F4}" }, { tex: /\\mathsl\{S\}/, unicode: "\u{1D446}" }, { tex: /\\mathsl\{s\}/, unicode: "\u{1D460}" }, { tex: /\\mathsl\{\\Theta\}/, unicode: "\u{1D6E9}" }, { tex: /\\mathsl\{T\}/, unicode: "\u{1D447}" }, { tex: /\\mathsl\{t\}/, unicode: "\u{1D461}" }, { tex: /\\mathsl\{\\Upsilon\}/, unicode: "\u{1D6F6}" }, { tex: /\\mathsl\{U\}/, unicode: "\u{1D448}" }, { tex: /\\mathsl\{u\}/, unicode: "\u{1D462}" }, { tex: /\\mathsl\{\\varkappa\}/, unicode: "\u{1D718}" }, { tex: /\\mathsl\{\\varpi\}/, unicode: "\u{1D71B}" }, { tex: /\\mathsl\{\\varrho\}/, unicode: "\u{1D71A}" }, { tex: /\\mathsl\{\\varsigma\}/, unicode: "\u{1D70D}" }, { tex: /\\mathsl\{\\vartheta\}/, unicode: "\u{1D6F3}" }, { tex: /\\mathsl\{V\}/, unicode: "\u{1D449}" }, { tex: /\\mathsl\{v\}/, unicode: "\u{1D463}" }, { tex: /\\mathsl\{W\}/, unicode: "\u{1D44A}" }, { tex: /\\mathsl\{w\}/, unicode: "\u{1D464}" }, { tex: /\\mathsl\{\\Xi\}/, unicode: "\u{1D6EF}" }, { tex: /\\mathsl\{X\}/, unicode: "\u{1D44B}" }, { tex: /\\mathsl\{x\}/, unicode: "\u{1D465}" }, { tex: /\\mathsl\{Y\}/, unicode: "\u{1D44C}" }, { tex: /\\mathsl\{y\}/, unicode: "\u{1D466}" }, { tex: /\\mathsl\{Z\}/, unicode: "\u{1D44D}" }, { tex: /\\mathsl\{z\}/, unicode: "\u{1D467}" }, { tex: /\\mathbf\{0\}/, unicode: "\u{1D7CE}" }, { tex: /\\mathbf\{1\}/, unicode: "\u{1D7CF}" }, { tex: /\\mathbf\{2\}/, unicode: "\u{1D7D0}" }, { tex: /\\mathbf\{3\}/, unicode: "\u{1D7D1}" }, { tex: /\\mathbf\{4\}/, unicode: "\u{1D7D2}" }, { tex: /\\mathbf\{5\}/, unicode: "\u{1D7D3}" }, { tex: /\\mathbf\{6\}/, unicode: "\u{1D7D4}" }, { tex: /\\mathbf\{7\}/, unicode: "\u{1D7D5}" }, { tex: /\\mathbf\{8\}/, unicode: "\u{1D7D6}" }, { tex: /\\mathbf\{9\}/, unicode: "\u{1D7D7}" }, { tex: /\\mathbf\{A\}/, unicode: "\u{1D400}" }, { tex: /\\mathbf\{a\}/, unicode: "\u{1D41A}" }, { tex: /\\mathbf\{B\}/, unicode: "\u{1D401}" }, { tex: /\\mathbf\{b\}/, unicode: "\u{1D41B}" }, { tex: /\\mathbf\{C\}/, unicode: "\u{1D402}" }, { tex: /\\mathbf\{c\}/, unicode: "\u{1D41C}" }, { tex: /\\mathbf\{\\Delta\}/, unicode: "\u{1D6AB}" }, { tex: /\\mathbf\{D\}/, unicode: "\u{1D403}" }, { tex: /\\mathbf\{d\}/, unicode: "\u{1D41D}" }, { tex: /\\mathbf\{E\}/, unicode: "\u{1D404}" }, { tex: /\\mathbf\{e\}/, unicode: "\u{1D41E}" }, { tex: /\\mathbf\{F\}/, unicode: "\u{1D405}" }, { tex: /\\mathbf\{f\}/, unicode: "\u{1D41F}" }, { tex: /\\mathbf\{\\Gamma\}/, unicode: "\u{1D6AA}" }, { tex: /\\mathbf\{G\}/, unicode: "\u{1D406}" }, { tex: /\\mathbf\{g\}/, unicode: "\u{1D420}" }, { tex: /\\mathbf\{H\}/, unicode: "\u{1D407}" }, { tex: /\\mathbf\{h\}/, unicode: "\u{1D421}" }, { tex: /\\mathbf\{I\}/, unicode: "\u{1D408}" }, { tex: /\\mathbf\{i\}/, unicode: "\u{1D422}" }, { tex: /\\mathbf\{J\}/, unicode: "\u{1D409}" }, { tex: /\\mathbf\{j\}/, unicode: "\u{1D423}" }, { tex: /\\mathbf\{K\}/, unicode: "\u{1D40A}" }, { tex: /\\mathbf\{k\}/, unicode: "\u{1D424}" }, { tex: /\\mathbf\{\\Lambda\}/, unicode: "\u{1D6B2}" }, { tex: /\\mathbf\{L\}/, unicode: "\u{1D40B}" }, { tex: /\\mathbf\{l\}/, unicode: "\u{1D425}" }, { tex: /\\mathbf\{M\}/, unicode: "\u{1D40C}" }, { tex: /\\mathbf\{m\}/, unicode: "\u{1D426}" }, { tex: /\\mathbf\{\\nabla\}/, unicode: "\u{1D6C1}" }, { tex: /\\mathbf\{N\}/, unicode: "\u{1D40D}" }, { tex: /\\mathbf\{n\}/, unicode: "\u{1D427}" }, { tex: /\\mathbf\{\\Omega\}/, unicode: "\u{1D6C0}" }, { tex: /\\mathbf\{O\}/, unicode: "\u{1D40E}" }, { tex: /\\mathbf\{o\}/, unicode: "\u{1D428}" }, { tex: /\\mathbf\{\\Phi\}/, unicode: "\u{1D6BD}" }, { tex: /\\mathbf\{\\phi\}/, unicode: "\u{1D6DF}" }, { tex: /\\mathbf\{\\Pi\}/, unicode: "\u{1D6B7}" }, { tex: /\\mathbf\{\\Psi\}/, unicode: "\u{1D6BF}" }, { tex: /\\mathbf\{P\}/, unicode: "\u{1D40F}" }, { tex: /\\mathbf\{p\}/, unicode: "\u{1D429}" }, { tex: /\\mathbf\{Q\}/, unicode: "\u{1D410}" }, { tex: /\\mathbf\{q\}/, unicode: "\u{1D42A}" }, { tex: /\\mathbf\{R\}/, unicode: "\u{1D411}" }, { tex: /\\mathbf\{r\}/, unicode: "\u{1D42B}" }, { tex: /\\mathbf\{\\Sigma\}/, unicode: "\u{1D6BA}" }, { tex: /\\mathbf\{S\}/, unicode: "\u{1D412}" }, { tex: /\\mathbf\{s\}/, unicode: "\u{1D42C}" }, { tex: /\\mathbf\{\\Theta\}/, unicode: "\u{1D6AF}" }, { tex: /\\mathbf\{\\theta\}/, unicode: "\u{1D6C9}" }, { tex: /\\mathbf\{T\}/, unicode: "\u{1D413}" }, { tex: /\\mathbf\{t\}/, unicode: "\u{1D42D}" }, { tex: /\\mathbf\{\\Upsilon\}/, unicode: "\u{1D6BC}" }, { tex: /\\mathbf\{U\}/, unicode: "\u{1D414}" }, { tex: /\\mathbf\{u\}/, unicode: "\u{1D42E}" }, { tex: /\\mathbf\{\\varkappa\}/, unicode: "\u{1D6DE}" }, { tex: /\\mathbf\{\\varpi\}/, unicode: "\u{1D6E1}" }, { tex: /\\mathbf\{\\varrho\}/, unicode: "\u{1D6E0}" }, { tex: /\\mathbf\{\\varsigma\}/, unicode: "\u{1D6D3}" }, { tex: /\\mathbf\{\\vartheta\}/, unicode: "\u{1D6B9}" }, { tex: /\\mathbf\{V\}/, unicode: "\u{1D415}" }, { tex: /\\mathbf\{v\}/, unicode: "\u{1D42F}" }, { tex: /\\mathbf\{W\}/, unicode: "\u{1D416}" }, { tex: /\\mathbf\{w\}/, unicode: "\u{1D430}" }, { tex: /\\mathbf\{\\Xi\}/, unicode: "\u{1D6B5}" }, { tex: /\\mathbf\{X\}/, unicode: "\u{1D417}" }, { tex: /\\mathbf\{x\}/, unicode: "\u{1D431}" }, { tex: /\\mathbf\{Y\}/, unicode: "\u{1D418}" }, { tex: /\\mathbf\{y\}/, unicode: "\u{1D432}" }, { tex: /\\mathbf\{Z\}/, unicode: "\u{1D419}" }, { tex: /\\mathbf\{z\}/, unicode: "\u{1D433}" }, { tex: /\\mathbb\{0\}/, unicode: "\u{1D7D8}" }, { tex: /\\mathbb\{1\}/, unicode: "\u{1D7D9}" }, { tex: /\\mathbb\{2\}/, unicode: "\u{1D7DA}" }, { tex: /\\mathbb\{3\}/, unicode: "\u{1D7DB}" }, { tex: /\\mathbb\{4\}/, unicode: "\u{1D7DC}" }, { tex: /\\mathbb\{5\}/, unicode: "\u{1D7DD}" }, { tex: /\\mathbb\{6\}/, unicode: "\u{1D7DE}" }, { tex: /\\mathbb\{7\}/, unicode: "\u{1D7DF}" }, { tex: /\\mathbb\{8\}/, unicode: "\u{1D7E0}" }, { tex: /\\mathbb\{9\}/, unicode: "\u{1D7E1}" }, { tex: /\\mathbb\{A\}/, unicode: "\u{1D538}" }, { tex: /\\mathbb\{a\}/, unicode: "\u{1D552}" }, { tex: /\\mathbb\{B\}/, unicode: "\u{1D539}" }, { tex: /\\mathbb\{b\}/, unicode: "\u{1D553}" }, { tex: /\\mathbb\{C\}/, unicode: "\u2102" }, { tex: /\\mathbb\{c\}/, unicode: "\u{1D554}" }, { tex: /\\mathbb\{D\}/, unicode: "\u{1D53B}" }, { tex: /\\mathbb\{d\}/, unicode: "\u{1D555}" }, { tex: /\\mathbb\{E\}/, unicode: "\u{1D53C}" }, { tex: /\\mathbb\{e\}/, unicode: "\u{1D556}" }, { tex: /\\mathbb\{F\}/, unicode: "\u{1D53D}" }, { tex: /\\mathbb\{f\}/, unicode: "\u{1D557}" }, { tex: /\\mathbb\{\\gamma\}/, unicode: "\u213D" }, { tex: /\\mathbb\{\\Gamma\}/, unicode: "\u213E" }, { tex: /\\mathbb\{G\}/, unicode: "\u{1D53E}" }, { tex: /\\mathbb\{g\}/, unicode: "\u{1D558}" }, { tex: /\\mathbb\{H\}/, unicode: "\u210D" }, { tex: /\\mathbb\{h\}/, unicode: "\u{1D559}" }, { tex: /\\mathbb\{I\}/, unicode: "\u{1D540}" }, { tex: /\\mathbb\{i\}/, unicode: "\u{1D55A}" }, { tex: /\\mathbb\{J\}/, unicode: "\u{1D541}" }, { tex: /\\mathbb\{j\}/, unicode: "\u{1D55B}" }, { tex: /\\mathbb\{K\}/, unicode: "\u{1D542}" }, { tex: /\\mathbb\{k\}/, unicode: "\u{1D55C}" }, { tex: /\\mathbb\{L\}/, unicode: "\u{1D543}" }, { tex: /\\mathbb\{l\}/, unicode: "\u{1D55D}" }, { tex: /\\mathbb\{M\}/, unicode: "\u{1D544}" }, { tex: /\\mathbb\{m\}/, unicode: "\u{1D55E}" }, { tex: /\\mathbb\{N\}/, unicode: "\u2115" }, { tex: /\\mathbb\{n\}/, unicode: "\u{1D55F}" }, { tex: /\\mathbb\{O\}/, unicode: "\u{1D546}" }, { tex: /\\mathbb\{o\}/, unicode: "\u{1D560}" }, { tex: /\\mathbb\{\\pi\}/, unicode: "\u213C" }, { tex: /\\mathbb\{\\Pi\}/, unicode: "\u213F" }, { tex: /\\mathbb\{P\}/, unicode: "\u2119" }, { tex: /\\mathbb\{p\}/, unicode: "\u{1D561}" }, { tex: /\\mathbb\{Q\}/, unicode: "\u211A" }, { tex: /\\mathbb\{q\}/, unicode: "\u{1D562}" }, { tex: /\\mathbb\{R\}/, unicode: "\u211D" }, { tex: /\\mathbb\{r\}/, unicode: "\u{1D563}" }, { tex: /\\mathbb\{\\Sigma\}/, unicode: "\u2140" }, { tex: /\\mathbb\{S\}/, unicode: "\u{1D54A}" }, { tex: /\\mathbb\{s\}/, unicode: "\u{1D564}" }, { tex: /\\mathbb\{T\}/, unicode: "\u{1D54B}" }, { tex: /\\mathbb\{t\}/, unicode: "\u{1D565}" }, { tex: /\\mathbb\{U\}/, unicode: "\u{1D54C}" }, { tex: /\\mathbb\{u\}/, unicode: "\u{1D566}" }, { tex: /\\mathbb\{V\}/, unicode: "\u{1D54D}" }, { tex: /\\mathbb\{v\}/, unicode: "\u{1D567}" }, { tex: /\\mathbb\{W\}/, unicode: "\u{1D54E}" }, { tex: /\\mathbb\{w\}/, unicode: "\u{1D568}" }, { tex: /\\mathbb\{X\}/, unicode: "\u{1D54F}" }, { tex: /\\mathbb\{x\}/, unicode: "\u{1D569}" }, { tex: /\\mathbb\{Y\}/, unicode: "\u{1D550}" }, { tex: /\\mathbb\{y\}/, unicode: "\u{1D56A}" }, { tex: /\\mathbb\{Z\}/, unicode: "\u2124" }, { tex: /\\mathbb\{z\}/, unicode: "\u{1D56B}" }, { tex: /\\mathslbb\{A\}/, unicode: "\u{1D56C}" }, { tex: /\\mathslbb\{a\}/, unicode: "\u{1D586}" }, { tex: /\\mathslbb\{B\}/, unicode: "\u{1D56D}" }, { tex: /\\mathslbb\{b\}/, unicode: "\u{1D587}" }, { tex: /\\mathslbb\{C\}/, unicode: "\u{1D56E}" }, { tex: /\\mathslbb\{c\}/, unicode: "\u{1D588}" }, { tex: /\\mathslbb\{D\}/, unicode: "\u{1D56F}" }, { tex: /\\mathslbb\{d\}/, unicode: "\u{1D589}" }, { tex: /\\mathslbb\{E\}/, unicode: "\u{1D570}" }, { tex: /\\mathslbb\{e\}/, unicode: "\u{1D58A}" }, { tex: /\\mathslbb\{F\}/, unicode: "\u{1D571}" }, { tex: /\\mathslbb\{f\}/, unicode: "\u{1D58B}" }, { tex: /\\mathslbb\{G\}/, unicode: "\u{1D572}" }, { tex: /\\mathslbb\{g\}/, unicode: "\u{1D58C}" }, { tex: /\\mathslbb\{H\}/, unicode: "\u{1D573}" }, { tex: /\\mathslbb\{h\}/, unicode: "\u{1D58D}" }, { tex: /\\mathslbb\{I\}/, unicode: "\u{1D574}" }, { tex: /\\mathslbb\{i\}/, unicode: "\u{1D58E}" }, { tex: /\\mathslbb\{J\}/, unicode: "\u{1D575}" }, { tex: /\\mathslbb\{j\}/, unicode: "\u{1D58F}" }, { tex: /\\mathslbb\{K\}/, unicode: "\u{1D576}" }, { tex: /\\mathslbb\{k\}/, unicode: "\u{1D590}" }, { tex: /\\mathslbb\{L\}/, unicode: "\u{1D577}" }, { tex: /\\mathslbb\{l\}/, unicode: "\u{1D591}" }, { tex: /\\mathslbb\{M\}/, unicode: "\u{1D578}" }, { tex: /\\mathslbb\{m\}/, unicode: "\u{1D592}" }, { tex: /\\mathslbb\{N\}/, unicode: "\u{1D579}" }, { tex: /\\mathslbb\{n\}/, unicode: "\u{1D593}" }, { tex: /\\mathslbb\{O\}/, unicode: "\u{1D57A}" }, { tex: /\\mathslbb\{o\}/, unicode: "\u{1D594}" }, { tex: /\\mathslbb\{P\}/, unicode: "\u{1D57B}" }, { tex: /\\mathslbb\{p\}/, unicode: "\u{1D595}" }, { tex: /\\mathslbb\{Q\}/, unicode: "\u{1D57C}" }, { tex: /\\mathslbb\{q\}/, unicode: "\u{1D596}" }, { tex: /\\mathslbb\{R\}/, unicode: "\u{1D57D}" }, { tex: /\\mathslbb\{r\}/, unicode: "\u{1D597}" }, { tex: /\\mathslbb\{S\}/, unicode: "\u{1D57E}" }, { tex: /\\mathslbb\{s\}/, unicode: "\u{1D598}" }, { tex: /\\mathslbb\{T\}/, unicode: "\u{1D57F}" }, { tex: /\\mathslbb\{t\}/, unicode: "\u{1D599}" }, { tex: /\\mathslbb\{U\}/, unicode: "\u{1D580}" }, { tex: /\\mathslbb\{u\}/, unicode: "\u{1D59A}" }, { tex: /\\mathslbb\{V\}/, unicode: "\u{1D581}" }, { tex: /\\mathslbb\{v\}/, unicode: "\u{1D59B}" }, { tex: /\\mathslbb\{W\}/, unicode: "\u{1D582}" }, { tex: /\\mathslbb\{w\}/, unicode: "\u{1D59C}" }, { tex: /\\mathslbb\{X\}/, unicode: "\u{1D583}" }, { tex: /\\mathslbb\{x\}/, unicode: "\u{1D59D}" }, { tex: /\\mathslbb\{Y\}/, unicode: "\u{1D584}" }, { tex: /\\mathslbb\{y\}/, unicode: "\u{1D59E}" }, { tex: /\\mathslbb\{Z\}/, unicode: "\u{1D585}" }, { tex: /\\mathslbb\{z\}/, unicode: "\u{1D59F}" }, { tex: /\\mathfrak\{A\}/, unicode: "\u{1D504}" }, { tex: /\\mathfrak\{a\}/, unicode: "\u{1D51E}" }, { tex: /\\mathfrak\{B\}/, unicode: "\u{1D505}" }, { tex: /\\mathfrak\{b\}/, unicode: "\u{1D51F}" }, { tex: /\\mathfrak\{C\}/, unicode: "\u212D" }, { tex: /\\mathfrak\{c\}/, unicode: "\u{1D520}" }, { tex: /\\mathfrak\{D\}/, unicode: "\u{1D507}" }, { tex: /\\mathfrak\{d\}/, unicode: "\u{1D521}" }, { tex: /\\mathfrak\{E\}/, unicode: "\u{1D508}" }, { tex: /\\mathfrak\{e\}/, unicode: "\u{1D522}" }, { tex: /\\mathfrak\{F\}/, unicode: "\u{1D509}" }, { tex: /\\mathfrak\{f\}/, unicode: "\u{1D523}" }, { tex: /\\mathfrak\{G\}/, unicode: "\u{1D50A}" }, { tex: /\\mathfrak\{g\}/, unicode: "\u{1D524}" }, { tex: /\\mathfrak\{H\}/, unicode: "\u210C" }, { tex: /\\mathfrak\{h\}/, unicode: "\u{1D525}" }, { tex: /\\mathfrak\{I\}/, unicode: "\u2111" }, { tex: /\\mathfrak\{i\}/, unicode: "\u{1D526}" }, { tex: /\\mathfrak\{J\}/, unicode: "\u{1D50D}" }, { tex: /\\mathfrak\{j\}/, unicode: "\u{1D527}" }, { tex: /\\mathfrak\{K\}/, unicode: "\u{1D50E}" }, { tex: /\\mathfrak\{k\}/, unicode: "\u{1D528}" }, { tex: /\\mathfrak\{L\}/, unicode: "\u{1D50F}" }, { tex: /\\mathfrak\{l\}/, unicode: "\u{1D529}" }, { tex: /\\mathfrak\{M\}/, unicode: "\u{1D510}" }, { tex: /\\mathfrak\{m\}/, unicode: "\u{1D52A}" }, { tex: /\\mathfrak\{N\}/, unicode: "\u{1D511}" }, { tex: /\\mathfrak\{n\}/, unicode: "\u{1D52B}" }, { tex: /\\mathfrak\{O\}/, unicode: "\u{1D512}" }, { tex: /\\mathfrak\{o\}/, unicode: "\u{1D52C}" }, { tex: /\\mathfrak\{P\}/, unicode: "\u{1D513}" }, { tex: /\\mathfrak\{p\}/, unicode: "\u{1D52D}" }, { tex: /\\mathfrak\{Q\}/, unicode: "\u{1D514}" }, { tex: /\\mathfrak\{q\}/, unicode: "\u{1D52E}" }, { tex: /\\mathfrak\{R\}/, unicode: "\u211C" }, { tex: /\\mathfrak\{r\}/, unicode: "\u{1D52F}" }, { tex: /\\mathfrak\{S\}/, unicode: "\u{1D516}" }, { tex: /\\mathfrak\{s\}/, unicode: "\u{1D530}" }, { tex: /\\mathfrak\{T\}/, unicode: "\u{1D517}" }, { tex: /\\mathfrak\{t\}/, unicode: "\u{1D531}" }, { tex: /\\mathfrak\{U\}/, unicode: "\u{1D518}" }, { tex: /\\mathfrak\{u\}/, unicode: "\u{1D532}" }, { tex: /\\mathfrak\{V\}/, unicode: "\u{1D519}" }, { tex: /\\mathfrak\{v\}/, unicode: "\u{1D533}" }, { tex: /\\mathfrak\{W\}/, unicode: "\u{1D51A}" }, { tex: /\\mathfrak\{w\}/, unicode: "\u{1D534}" }, { tex: /\\mathfrak\{X\}/, unicode: "\u{1D51B}" }, { tex: /\\mathfrak\{x\}/, unicode: "\u{1D535}" }, { tex: /\\mathfrak\{Y\}/, unicode: "\u{1D51C}" }, { tex: /\\mathfrak\{y\}/, unicode: "\u{1D536}" }, { tex: /\\mathfrak\{Z\}/, unicode: "\u2128" }, { tex: /\\mathfrak\{z\}/, unicode: "\u{1D537}" }, { tex: /\\mathsfsl\{A\}/, unicode: "\u{1D608}" }, { tex: /\\mathsfsl\{a\}/, unicode: "\u{1D622}" }, { tex: /\\mathsfsl\{B\}/, unicode: "\u{1D609}" }, { tex: /\\mathsfsl\{b\}/, unicode: "\u{1D623}" }, { tex: /\\mathsfsl\{C\}/, unicode: "\u{1D60A}" }, { tex: /\\mathsfsl\{c\}/, unicode: "\u{1D624}" }, { tex: /\\mathsfsl\{D\}/, unicode: "\u{1D60B}" }, { tex: /\\mathsfsl\{d\}/, unicode: "\u{1D625}" }, { tex: /\\mathsfsl\{E\}/, unicode: "\u{1D60C}" }, { tex: /\\mathsfsl\{e\}/, unicode: "\u{1D626}" }, { tex: /\\mathsfsl\{F\}/, unicode: "\u{1D60D}" }, { tex: /\\mathsfsl\{f\}/, unicode: "\u{1D627}" }, { tex: /\\mathsfsl\{G\}/, unicode: "\u{1D60E}" }, { tex: /\\mathsfsl\{g\}/, unicode: "\u{1D628}" }, { tex: /\\mathsfsl\{H\}/, unicode: "\u{1D60F}" }, { tex: /\\mathsfsl\{h\}/, unicode: "\u{1D629}" }, { tex: /\\mathsfsl\{I\}/, unicode: "\u{1D610}" }, { tex: /\\mathsfsl\{i\}/, unicode: "\u{1D62A}" }, { tex: /\\mathsfsl\{J\}/, unicode: "\u{1D611}" }, { tex: /\\mathsfsl\{j\}/, unicode: "\u{1D62B}" }, { tex: /\\mathsfsl\{K\}/, unicode: "\u{1D612}" }, { tex: /\\mathsfsl\{k\}/, unicode: "\u{1D62C}" }, { tex: /\\mathsfsl\{L\}/, unicode: "\u{1D613}" }, { tex: /\\mathsfsl\{l\}/, unicode: "\u{1D62D}" }, { tex: /\\mathsfsl\{M\}/, unicode: "\u{1D614}" }, { tex: /\\mathsfsl\{m\}/, unicode: "\u{1D62E}" }, { tex: /\\mathsfsl\{N\}/, unicode: "\u{1D615}" }, { tex: /\\mathsfsl\{n\}/, unicode: "\u{1D62F}" }, { tex: /\\mathsfsl\{O\}/, unicode: "\u{1D616}" }, { tex: /\\mathsfsl\{o\}/, unicode: "\u{1D630}" }, { tex: /\\mathsfsl\{P\}/, unicode: "\u{1D617}" }, { tex: /\\mathsfsl\{p\}/, unicode: "\u{1D631}" }, { tex: /\\mathsfsl\{Q\}/, unicode: "\u{1D618}" }, { tex: /\\mathsfsl\{q\}/, unicode: "\u{1D632}" }, { tex: /\\mathsfsl\{R\}/, unicode: "\u{1D619}" }, { tex: /\\mathsfsl\{r\}/, unicode: "\u{1D633}" }, { tex: /\\mathsfsl\{S\}/, unicode: "\u{1D61A}" }, { tex: /\\mathsfsl\{s\}/, unicode: "\u{1D634}" }, { tex: /\\mathsfsl\{T\}/, unicode: "\u{1D61B}" }, { tex: /\\mathsfsl\{t\}/, unicode: "\u{1D635}" }, { tex: /\\mathsfsl\{U\}/, unicode: "\u{1D61C}" }, { tex: /\\mathsfsl\{u\}/, unicode: "\u{1D636}" }, { tex: /\\mathsfsl\{V\}/, unicode: "\u{1D61D}" }, { tex: /\\mathsfsl\{v\}/, unicode: "\u{1D637}" }, { tex: /\\mathsfsl\{W\}/, unicode: "\u{1D61E}" }, { tex: /\\mathsfsl\{w\}/, unicode: "\u{1D638}" }, { tex: /\\mathsfsl\{X\}/, unicode: "\u{1D61F}" }, { tex: /\\mathsfsl\{x\}/, unicode: "\u{1D639}" }, { tex: /\\mathsfsl\{Y\}/, unicode: "\u{1D620}" }, { tex: /\\mathsfsl\{y\}/, unicode: "\u{1D63A}" }, { tex: /\\mathsfsl\{Z\}/, unicode: "\u{1D621}" }, { tex: /\\mathsfsl\{z\}/, unicode: "\u{1D63B}" }, { tex: /\\mathscr\{A\}/, unicode: "\u{1D49C}" }, { tex: /\\mathscr\{a\}/, unicode: "\u{1D4B6}" }, { tex: /\\mathscr\{B\}/, unicode: "\u212C" }, { tex: /\\mathscr\{b\}/, unicode: "\u{1D4B7}" }, { tex: /\\mathscr\{C\}/, unicode: "\u{1D49E}" }, { tex: /\\mathscr\{c\}/, unicode: "\u{1D4B8}" }, { tex: /\\mathscr\{D\}/, unicode: "\u{1D49F}" }, { tex: /\\mathscr\{d\}/, unicode: "\u{1D4B9}" }, { tex: /\\mathscr\{e\}/, unicode: "\u212F" }, { tex: /\\mathscr\{E\}/, unicode: "\u2130" }, { tex: /\\mathscr\{F\}/, unicode: "\u2131" }, { tex: /\\mathscr\{f\}/, unicode: "\u{1D4BB}" }, { tex: /\\mathscr\{g\}/, unicode: "\u210A" }, { tex: /\\mathscr\{G\}/, unicode: "\u{1D4A2}" }, { tex: /\\mathscr\{H\}/, unicode: "\u210B" }, { tex: /\\mathscr\{h\}/, unicode: "\u{1D4BD}" }, { tex: /\\mathscr\{I\}/, unicode: "\u2110" }, { tex: /\\mathscr\{i\}/, unicode: "\u{1D4BE}" }, { tex: /\\mathscr\{J\}/, unicode: "\u{1D4A5}" }, { tex: /\\mathscr\{j\}/, unicode: "\u{1D4BF}" }, { tex: /\\mathscr\{K\}/, unicode: "\u{1D4A6}" }, { tex: /\\mathscr\{k\}/, unicode: "\u{1D4C0}" }, { tex: /\\mathscr\{L\}/, unicode: "\u2112" }, { tex: /\\mathscr\{l\}/, unicode: "\u2113" }, { tex: /\\mathscr\{M\}/, unicode: "\u2133" }, { tex: /\\mathscr\{m\}/, unicode: "\u{1D4C2}" }, { tex: /\\mathscr\{N\}/, unicode: "\u{1D4A9}" }, { tex: /\\mathscr\{n\}/, unicode: "\u{1D4C3}" }, { tex: /\\mathscr\{o\}/, unicode: "\u2134" }, { tex: /\\mathscr\{O\}/, unicode: "\u{1D4AA}" }, { tex: /\\mathscr\{P\}/, unicode: "\u{1D4AB}" }, { tex: /\\mathscr\{p\}/, unicode: "\u{1D4C5}" }, { tex: /\\mathscr\{Q\}/, unicode: "\u{1D4AC}" }, { tex: /\\mathscr\{q\}/, unicode: "\u{1D4C6}" }, { tex: /\\mathscr\{R\}/, unicode: "\u211B" }, { tex: /\\mathscr\{r\}/, unicode: "\u{1D4C7}" }, { tex: /\\mathscr\{S\}/, unicode: "\u{1D4AE}" }, { tex: /\\mathscr\{s\}/, unicode: "\u{1D4C8}" }, { tex: /\\mathscr\{T\}/, unicode: "\u{1D4AF}" }, { tex: /\\mathscr\{t\}/, unicode: "\u{1D4C9}" }, { tex: /\\mathscr\{U\}/, unicode: "\u{1D4B0}" }, { tex: /\\mathscr\{u\}/, unicode: "\u{1D4CA}" }, { tex: /\\mathscr\{V\}/, unicode: "\u{1D4B1}" }, { tex: /\\mathscr\{v\}/, unicode: "\u{1D4CB}" }, { tex: /\\mathscr\{W\}/, unicode: "\u{1D4B2}" }, { tex: /\\mathscr\{w\}/, unicode: "\u{1D4CC}" }, { tex: /\\mathscr\{X\}/, unicode: "\u{1D4B3}" }, { tex: /\\mathscr\{x\}/, unicode: "\u{1D4CD}" }, { tex: /\\mathscr\{Y\}/, unicode: "\u{1D4B4}" }, { tex: /\\mathscr\{y\}/, unicode: "\u{1D4CE}" }, { tex: /\\mathscr\{Z\}/, unicode: "\u{1D4B5}" }, { tex: /\\mathscr\{z\}/, unicode: "\u{1D4CF}" }, { tex: /\\mathmit\{A\}/, unicode: "\u{1D4D0}" }, { tex: /\\mathmit\{a\}/, unicode: "\u{1D4EA}" }, { tex: /\\mathmit\{B\}/, unicode: "\u{1D4D1}" }, { tex: /\\mathmit\{b\}/, unicode: "\u{1D4EB}" }, { tex: /\\mathmit\{C\}/, unicode: "\u{1D4D2}" }, { tex: /\\mathmit\{c\}/, unicode: "\u{1D4EC}" }, { tex: /\\mathmit\{D\}/, unicode: "\u{1D4D3}" }, { tex: /\\mathmit\{d\}/, unicode: "\u{1D4ED}" }, { tex: /\\mathmit\{E\}/, unicode: "\u{1D4D4}" }, { tex: /\\mathmit\{e\}/, unicode: "\u{1D4EE}" }, { tex: /\\mathmit\{F\}/, unicode: "\u{1D4D5}" }, { tex: /\\mathmit\{f\}/, unicode: "\u{1D4EF}" }, { tex: /\\mathmit\{G\}/, unicode: "\u{1D4D6}" }, { tex: /\\mathmit\{g\}/, unicode: "\u{1D4F0}" }, { tex: /\\mathmit\{H\}/, unicode: "\u{1D4D7}" }, { tex: /\\mathmit\{h\}/, unicode: "\u{1D4F1}" }, { tex: /\\mathmit\{I\}/, unicode: "\u{1D4D8}" }, { tex: /\\mathmit\{i\}/, unicode: "\u{1D4F2}" }, { tex: /\\mathmit\{J\}/, unicode: "\u{1D4D9}" }, { tex: /\\mathmit\{j\}/, unicode: "\u{1D4F3}" }, { tex: /\\mathmit\{K\}/, unicode: "\u{1D4DA}" }, { tex: /\\mathmit\{k\}/, unicode: "\u{1D4F4}" }, { tex: /\\mathmit\{L\}/, unicode: "\u{1D4DB}" }, { tex: /\\mathmit\{l\}/, unicode: "\u{1D4F5}" }, { tex: /\\mathmit\{M\}/, unicode: "\u{1D4DC}" }, { tex: /\\mathmit\{m\}/, unicode: "\u{1D4F6}" }, { tex: /\\mathmit\{N\}/, unicode: "\u{1D4DD}" }, { tex: /\\mathmit\{n\}/, unicode: "\u{1D4F7}" }, { tex: /\\mathmit\{O\}/, unicode: "\u{1D4DE}" }, { tex: /\\mathmit\{o\}/, unicode: "\u{1D4F8}" }, { tex: /\\mathmit\{P\}/, unicode: "\u{1D4DF}" }, { tex: /\\mathmit\{p\}/, unicode: "\u{1D4F9}" }, { tex: /\\mathmit\{Q\}/, unicode: "\u{1D4E0}" }, { tex: /\\mathmit\{q\}/, unicode: "\u{1D4FA}" }, { tex: /\\mathmit\{R\}/, unicode: "\u{1D4E1}" }, { tex: /\\mathmit\{r\}/, unicode: "\u{1D4FB}" }, { tex: /\\mathmit\{S\}/, unicode: "\u{1D4E2}" }, { tex: /\\mathmit\{s\}/, unicode: "\u{1D4FC}" }, { tex: /\\mathmit\{T\}/, unicode: "\u{1D4E3}" }, { tex: /\\mathmit\{t\}/, unicode: "\u{1D4FD}" }, { tex: /\\mathmit\{U\}/, unicode: "\u{1D4E4}" }, { tex: /\\mathmit\{u\}/, unicode: "\u{1D4FE}" }, { tex: /\\mathmit\{V\}/, unicode: "\u{1D4E5}" }, { tex: /\\mathmit\{v\}/, unicode: "\u{1D4FF}" }, { tex: /\\mathmit\{W\}/, unicode: "\u{1D4E6}" }, { tex: /\\mathmit\{w\}/, unicode: "\u{1D500}" }, { tex: /\\mathmit\{X\}/, unicode: "\u{1D4E7}" }, { tex: /\\mathmit\{x\}/, unicode: "\u{1D501}" }, { tex: /\\mathmit\{Y\}/, unicode: "\u{1D4E8}" }, { tex: /\\mathmit\{y\}/, unicode: "\u{1D502}" }, { tex: /\\mathmit\{Z\}/, unicode: "\u{1D4E9}" }, { tex: /\\mathmit\{z\}/, unicode: "\u{1D503}" }, { tex: /\\mathtt\{0\}/, unicode: "\u{1D7F6}" }, { tex: /\\mathtt\{1\}/, unicode: "\u{1D7F7}" }, { tex: /\\mathtt\{2\}/, unicode: "\u{1D7F8}" }, { tex: /\\mathtt\{3\}/, unicode: "\u{1D7F9}" }, { tex: /\\mathtt\{4\}/, unicode: "\u{1D7FA}" }, { tex: /\\mathtt\{5\}/, unicode: "\u{1D7FB}" }, { tex: /\\mathtt\{6\}/, unicode: "\u{1D7FC}" }, { tex: /\\mathtt\{7\}/, unicode: "\u{1D7FD}" }, { tex: /\\mathtt\{8\}/, unicode: "\u{1D7FE}" }, { tex: /\\mathtt\{9\}/, unicode: "\u{1D7FF}" }, { tex: /\\mathtt\{A\}/, unicode: "\u{1D670}" }, { tex: /\\mathtt\{a\}/, unicode: "\u{1D68A}" }, { tex: /\\mathtt\{B\}/, unicode: "\u{1D671}" }, { tex: /\\mathtt\{b\}/, unicode: "\u{1D68B}" }, { tex: /\\mathtt\{C\}/, unicode: "\u{1D672}" }, { tex: /\\mathtt\{c\}/, unicode: "\u{1D68C}" }, { tex: /\\mathtt\{D\}/, unicode: "\u{1D673}" }, { tex: /\\mathtt\{d\}/, unicode: "\u{1D68D}" }, { tex: /\\mathtt\{E\}/, unicode: "\u{1D674}" }, { tex: /\\mathtt\{e\}/, unicode: "\u{1D68E}" }, { tex: /\\mathtt\{F\}/, unicode: "\u{1D675}" }, { tex: /\\mathtt\{f\}/, unicode: "\u{1D68F}" }, { tex: /\\mathtt\{G\}/, unicode: "\u{1D676}" }, { tex: /\\mathtt\{g\}/, unicode: "\u{1D690}" }, { tex: /\\mathtt\{H\}/, unicode: "\u{1D677}" }, { tex: /\\mathtt\{h\}/, unicode: "\u{1D691}" }, { tex: /\\mathtt\{I\}/, unicode: "\u{1D678}" }, { tex: /\\mathtt\{i\}/, unicode: "\u{1D692}" }, { tex: /\\mathtt\{J\}/, unicode: "\u{1D679}" }, { tex: /\\mathtt\{j\}/, unicode: "\u{1D693}" }, { tex: /\\mathtt\{K\}/, unicode: "\u{1D67A}" }, { tex: /\\mathtt\{k\}/, unicode: "\u{1D694}" }, { tex: /\\mathtt\{L\}/, unicode: "\u{1D67B}" }, { tex: /\\mathtt\{l\}/, unicode: "\u{1D695}" }, { tex: /\\mathtt\{M\}/, unicode: "\u{1D67C}" }, { tex: /\\mathtt\{m\}/, unicode: "\u{1D696}" }, { tex: /\\mathtt\{N\}/, unicode: "\u{1D67D}" }, { tex: /\\mathtt\{n\}/, unicode: "\u{1D697}" }, { tex: /\\mathtt\{O\}/, unicode: "\u{1D67E}" }, { tex: /\\mathtt\{o\}/, unicode: "\u{1D698}" }, { tex: /\\mathtt\{P\}/, unicode: "\u{1D67F}" }, { tex: /\\mathtt\{p\}/, unicode: "\u{1D699}" }, { tex: /\\mathtt\{Q\}/, unicode: "\u{1D680}" }, { tex: /\\mathtt\{q\}/, unicode: "\u{1D69A}" }, { tex: /\\mathtt\{R\}/, unicode: "\u{1D681}" }, { tex: /\\mathtt\{r\}/, unicode: "\u{1D69B}" }, { tex: /\\mathtt\{S\}/, unicode: "\u{1D682}" }, { tex: /\\mathtt\{s\}/, unicode: "\u{1D69C}" }, { tex: /\\mathtt\{T\}/, unicode: "\u{1D683}" }, { tex: /\\mathtt\{t\}/, unicode: "\u{1D69D}" }, { tex: /\\mathtt\{U\}/, unicode: "\u{1D684}" }, { tex: /\\mathtt\{u\}/, unicode: "\u{1D69E}" }, { tex: /\\mathtt\{V\}/, unicode: "\u{1D685}" }, { tex: /\\mathtt\{v\}/, unicode: "\u{1D69F}" }, { tex: /\\mathtt\{W\}/, unicode: "\u{1D686}" }, { tex: /\\mathtt\{w\}/, unicode: "\u{1D6A0}" }, { tex: /\\mathtt\{X\}/, unicode: "\u{1D687}" }, { tex: /\\mathtt\{x\}/, unicode: "\u{1D6A1}" }, { tex: /\\mathtt\{Y\}/, unicode: "\u{1D688}" }, { tex: /\\mathtt\{y\}/, unicode: "\u{1D6A2}" }, { tex: /\\mathtt\{Z\}/, unicode: "\u{1D689}" }, { tex: /\\mathtt\{z\}/, unicode: "\u{1D6A3}" }, { tex: /\\mathsf\{0\}/, unicode: "\u{1D7E2}" }, { tex: /\\mathsf\{1\}/, unicode: "\u{1D7E3}" }, { tex: /\\mathsf\{2\}/, unicode: "\u{1D7E4}" }, { tex: /\\mathsf\{3\}/, unicode: "\u{1D7E5}" }, { tex: /\\mathsf\{4\}/, unicode: "\u{1D7E6}" }, { tex: /\\mathsf\{5\}/, unicode: "\u{1D7E7}" }, { tex: /\\mathsf\{6\}/, unicode: "\u{1D7E8}" }, { tex: /\\mathsf\{7\}/, unicode: "\u{1D7E9}" }, { tex: /\\mathsf\{8\}/, unicode: "\u{1D7EA}" }, { tex: /\\mathsf\{9\}/, unicode: "\u{1D7EB}" }, { tex: /\\mathsf\{A\}/, unicode: "\u{1D5A0}" }, { tex: /\\mathsf\{a\}/, unicode: "\u{1D5BA}" }, { tex: /\\mathsf\{B\}/, unicode: "\u{1D5A1}" }, { tex: /\\mathsf\{b\}/, unicode: "\u{1D5BB}" }, { tex: /\\mathsf\{C\}/, unicode: "\u{1D5A2}" }, { tex: /\\mathsf\{c\}/, unicode: "\u{1D5BC}" }, { tex: /\\mathsf\{D\}/, unicode: "\u{1D5A3}" }, { tex: /\\mathsf\{d\}/, unicode: "\u{1D5BD}" }, { tex: /\\mathsf\{E\}/, unicode: "\u{1D5A4}" }, { tex: /\\mathsf\{e\}/, unicode: "\u{1D5BE}" }, { tex: /\\mathsf\{F\}/, unicode: "\u{1D5A5}" }, { tex: /\\mathsf\{f\}/, unicode: "\u{1D5BF}" }, { tex: /\\mathsf\{G\}/, unicode: "\u{1D5A6}" }, { tex: /\\mathsf\{g\}/, unicode: "\u{1D5C0}" }, { tex: /\\mathsf\{H\}/, unicode: "\u{1D5A7}" }, { tex: /\\mathsf\{h\}/, unicode: "\u{1D5C1}" }, { tex: /\\mathsf\{I\}/, unicode: "\u{1D5A8}" }, { tex: /\\mathsf\{i\}/, unicode: "\u{1D5C2}" }, { tex: /\\mathsf\{J\}/, unicode: "\u{1D5A9}" }, { tex: /\\mathsf\{j\}/, unicode: "\u{1D5C3}" }, { tex: /\\mathsf\{K\}/, unicode: "\u{1D5AA}" }, { tex: /\\mathsf\{k\}/, unicode: "\u{1D5C4}" }, { tex: /\\mathsf\{L\}/, unicode: "\u{1D5AB}" }, { tex: /\\mathsf\{l\}/, unicode: "\u{1D5C5}" }, { tex: /\\mathsf\{M\}/, unicode: "\u{1D5AC}" }, { tex: /\\mathsf\{m\}/, unicode: "\u{1D5C6}" }, { tex: /\\mathsf\{N\}/, unicode: "\u{1D5AD}" }, { tex: /\\mathsf\{n\}/, unicode: "\u{1D5C7}" }, { tex: /\\mathsf\{O\}/, unicode: "\u{1D5AE}" }, { tex: /\\mathsf\{o\}/, unicode: "\u{1D5C8}" }, { tex: /\\mathsf\{P\}/, unicode: "\u{1D5AF}" }, { tex: /\\mathsf\{p\}/, unicode: "\u{1D5C9}" }, { tex: /\\mathsf\{Q\}/, unicode: "\u{1D5B0}" }, { tex: /\\mathsf\{q\}/, unicode: "\u{1D5CA}" }, { tex: /\\mathsf\{R\}/, unicode: "\u{1D5B1}" }, { tex: /\\mathsf\{r\}/, unicode: "\u{1D5CB}" }, { tex: /\\mathsf\{S\}/, unicode: "\u{1D5B2}" }, { tex: /\\mathsf\{s\}/, unicode: "\u{1D5CC}" }, { tex: /\\mathsf\{T\}/, unicode: "\u{1D5B3}" }, { tex: /\\mathsf\{t\}/, unicode: "\u{1D5CD}" }, { tex: /\\mathsf\{U\}/, unicode: "\u{1D5B4}" }, { tex: /\\mathsf\{u\}/, unicode: "\u{1D5CE}" }, { tex: /\\mathsf\{V\}/, unicode: "\u{1D5B5}" }, { tex: /\\mathsf\{v\}/, unicode: "\u{1D5CF}" }, { tex: /\\mathsf\{W\}/, unicode: "\u{1D5B6}" }, { tex: /\\mathsf\{w\}/, unicode: "\u{1D5D0}" }, { tex: /\\mathsf\{X\}/, unicode: "\u{1D5B7}" }, { tex: /\\mathsf\{x\}/, unicode: "\u{1D5D1}" }, { tex: /\\mathsf\{Y\}/, unicode: "\u{1D5B8}" }, { tex: /\\mathsf\{y\}/, unicode: "\u{1D5D2}" }, { tex: /\\mathsf\{Z\}/, unicode: "\u{1D5B9}" }, { tex: /\\mathsf\{z\}/, unicode: "\u{1D5D3}" }, { tex: /\\mathchar"2208/, unicode: "\u2316" }, { tex: /\\cyrchar\\C/, unicode: "\u030F" }, { tex: /\\cyrchar\\CYRABHCHDSC/, unicode: "\u04BE" }, { tex: /\\cyrchar\\cyrabhchdsc/, unicode: "\u04BF" }, { tex: /\\cyrchar\\CYRABHCH/, unicode: "\u04BC" }, { tex: /\\cyrchar\\cyrabhch/, unicode: "\u04BD" }, { tex: /\\cyrchar\\CYRABHDZE/, unicode: "\u04E0" }, { tex: /\\cyrchar\\cyrabhdze/, unicode: "\u04E1" }, { tex: /\\cyrchar\\CYRABHHA/, unicode: "\u04A8" }, { tex: /\\cyrchar\\cyrabhha/, unicode: "\u04A9" }, { tex: /\\cyrchar\\CYRAE/, unicode: "\u04D4" }, { tex: /\\cyrchar\\cyrae/, unicode: "\u04D5" }, { tex: /\\cyrchar\\CYRA/, unicode: "\u0410" }, { tex: /\\cyrchar\\cyra/, unicode: "\u0430" }, { tex: /\\cyrchar\\CYRB/, unicode: "\u0411" }, { tex: /\\cyrchar\\cyrb/, unicode: "\u0431" }, { tex: /\\cyrchar\\CYRBYUS/, unicode: "\u046A" }, { tex: /\\cyrchar\\CYRCHLDSC/, unicode: "\u04CB" }, { tex: /\\cyrchar\\cyrchldsc/, unicode: "\u04CC" }, { tex: /\\cyrchar\\CYRCHRDSC/, unicode: "\u04B6" }, { tex: /\\cyrchar\\cyrchrdsc/, unicode: "\u04B7" }, { tex: /\\cyrchar\\CYRCH/, unicode: "\u0427" }, { tex: /\\cyrchar\\cyrch/, unicode: "\u0447" }, { tex: /\\cyrchar\\CYRCHVCRS/, unicode: "\u04B8" }, { tex: /\\cyrchar\\cyrchvcrs/, unicode: "\u04B9" }, { tex: /\\cyrchar\\CYRC/, unicode: "\u0426" }, { tex: /\\cyrchar\\cyrc/, unicode: "\u0446" }, { tex: /\\cyrchar\\CYRDJE/, unicode: "\u0402" }, { tex: /\\cyrchar\\cyrdje/, unicode: "\u0452" }, { tex: /\\cyrchar\\CYRD/, unicode: "\u0414" }, { tex: /\\cyrchar\\cyrd/, unicode: "\u0434" }, { tex: /\\cyrchar\\CYRDZE/, unicode: "\u0405" }, { tex: /\\cyrchar\\cyrdze/, unicode: "\u0455" }, { tex: /\\cyrchar\\CYRDZHE/, unicode: "\u040F" }, { tex: /\\cyrchar\\cyrdzhe/, unicode: "\u045F" }, { tex: /\\cyrchar\\CYREREV/, unicode: "\u042D" }, { tex: /\\cyrchar\\cyrerev/, unicode: "\u044D" }, { tex: /\\cyrchar\\CYRERY/, unicode: "\u042B" }, { tex: /\\cyrchar\\cyrery/, unicode: "\u044B" }, { tex: /\\cyrchar\\CYRE/, unicode: "\u0415" }, { tex: /\\cyrchar\\cyre/, unicode: "\u0435" }, { tex: /\\cyrchar\\CYRFITA/, unicode: "\u0472" }, { tex: /\\cyrchar\\CYRF/, unicode: "\u0424" }, { tex: /\\cyrchar\\cyrf/, unicode: "\u0444" }, { tex: /\\cyrchar\\CYRGHCRS/, unicode: "\u0492" }, { tex: /\\cyrchar\\cyrghcrs/, unicode: "\u0493" }, { tex: /\\cyrchar\\CYRGHK/, unicode: "\u0494" }, { tex: /\\cyrchar\\cyrghk/, unicode: "\u0495" }, { tex: /\\cyrchar\{\\'\\CYRG\}/, unicode: "\u0403" }, { tex: /\\cyrchar\\CYRG/, unicode: "\u0413" }, { tex: /\\cyrchar\\cyrg/, unicode: "\u0433" }, { tex: /\\cyrchar\{\\'\\cyrg\}/, unicode: "\u0453" }, { tex: /\\cyrchar\\CYRGUP/, unicode: "\u0490" }, { tex: /\\cyrchar\\cyrgup/, unicode: "\u0491" }, { tex: /\\cyrchar\\CYRHDSC/, unicode: "\u04B2" }, { tex: /\\cyrchar\\cyrhdsc/, unicode: "\u04B3" }, { tex: /\\cyrchar\\CYRHRDSN/, unicode: "\u042A" }, { tex: /\\cyrchar\\cyrhrdsn/, unicode: "\u044A" }, { tex: /\\cyrchar\\cyrhundredthousands/, unicode: "\u0488" }, { tex: /\\cyrchar\\CYRH/, unicode: "\u0425" }, { tex: /\\cyrchar\\cyrh/, unicode: "\u0445" }, { tex: /\\cyrchar\\CYRIE/, unicode: "\u0404" }, { tex: /\\cyrchar\\cyrie/, unicode: "\u0454" }, { tex: /\\cyrchar\\CYRII/, unicode: "\u0406" }, { tex: /\\cyrchar\\cyrii/, unicode: "\u0456" }, { tex: /\\cyrchar\\CYRIOTBYUS/, unicode: "\u046C" }, { tex: /\\cyrchar\\cyriotbyus/, unicode: "\u046D" }, { tex: /\\cyrchar\\CYRIOTE/, unicode: "\u0464" }, { tex: /\\cyrchar\\cyriote/, unicode: "\u0465" }, { tex: /\\cyrchar\\CYRIOTLYUS/, unicode: "\u0468" }, { tex: /\\cyrchar\\cyriotlyus/, unicode: "\u0469" }, { tex: /\\cyrchar\\CYRISHRT/, unicode: "\u0419" }, { tex: /\\cyrchar\\cyrishrt/, unicode: "\u0439" }, { tex: /\\cyrchar\\CYRI/, unicode: "\u0418" }, { tex: /\\cyrchar\\cyri/, unicode: "\u0438" }, { tex: /\\cyrchar\\CYRIZH/, unicode: "\u0474" }, { tex: /\\cyrchar\\CYRJE/, unicode: "\u0408" }, { tex: /\\cyrchar\\cyrje/, unicode: "\u0458" }, { tex: /\\cyrchar\\CYRKBEAK/, unicode: "\u04A0" }, { tex: /\\cyrchar\\cyrkbeak/, unicode: "\u04A1" }, { tex: /\\cyrchar\\CYRKDSC/, unicode: "\u049A" }, { tex: /\\cyrchar\\cyrkdsc/, unicode: "\u049B" }, { tex: /\\cyrchar\\CYRKHCRS/, unicode: "\u049E" }, { tex: /\\cyrchar\\cyrkhcrs/, unicode: "\u049F" }, { tex: /\\cyrchar\\CYRKHK/, unicode: "\u04C3" }, { tex: /\\cyrchar\\cyrkhk/, unicode: "\u04C4" }, { tex: /\\cyrchar\\CYRKOPPA/, unicode: "\u0480" }, { tex: /\\cyrchar\\cyrkoppa/, unicode: "\u0481" }, { tex: /\\cyrchar\\CYRKSI/, unicode: "\u046E" }, { tex: /\\cyrchar\\cyrksi/, unicode: "\u046F" }, { tex: /\\cyrchar\{\\'\\CYRK\}/, unicode: "\u040C" }, { tex: /\\cyrchar\\CYRK/, unicode: "\u041A" }, { tex: /\\cyrchar\\cyrk/, unicode: "\u043A" }, { tex: /\\cyrchar\{\\'\\cyrk\}/, unicode: "\u045C" }, { tex: /\\cyrchar\\CYRKVCRS/, unicode: "\u049C" }, { tex: /\\cyrchar\\cyrkvcrs/, unicode: "\u049D" }, { tex: /\\cyrchar\\CYRLJE/, unicode: "\u0409" }, { tex: /\\cyrchar\\cyrlje/, unicode: "\u0459" }, { tex: /\\cyrchar\\CYRL/, unicode: "\u041B" }, { tex: /\\cyrchar\\cyrl/, unicode: "\u043B" }, { tex: /\\cyrchar\\CYRLYUS/, unicode: "\u0466" }, { tex: /\\cyrchar\\cyrlyus/, unicode: "\u0467" }, { tex: /\\cyrchar\\cyrmillions/, unicode: "\u0489" }, { tex: /\\cyrchar\\CYRM/, unicode: "\u041C" }, { tex: /\\cyrchar\\cyrm/, unicode: "\u043C" }, { tex: /\\cyrchar\\CYRNDSC/, unicode: "\u04A2" }, { tex: /\\cyrchar\\cyrndsc/, unicode: "\u04A3" }, { tex: /\\cyrchar\\CYRNG/, unicode: "\u04A4" }, { tex: /\\cyrchar\\cyrng/, unicode: "\u04A5" }, { tex: /\\cyrchar\\CYRNHK/, unicode: "\u04C7" }, { tex: /\\cyrchar\\cyrnhk/, unicode: "\u04C8" }, { tex: /\\cyrchar\\CYRNJE/, unicode: "\u040A" }, { tex: /\\cyrchar\\cyrnje/, unicode: "\u045A" }, { tex: /\\cyrchar\\CYRN/, unicode: "\u041D" }, { tex: /\\cyrchar\\cyrn/, unicode: "\u043D" }, { tex: /\\cyrchar\\CYROMEGARND/, unicode: "\u047A" }, { tex: /\\cyrchar\\cyromegarnd/, unicode: "\u047B" }, { tex: /\\cyrchar\\CYROMEGATITLO/, unicode: "\u047C" }, { tex: /\\cyrchar\\cyromegatitlo/, unicode: "\u047D" }, { tex: /\\cyrchar\\CYROMEGA/, unicode: "\u0460" }, { tex: /\\cyrchar\\cyromega/, unicode: "\u0461" }, { tex: /\\cyrchar\\CYROTLD/, unicode: "\u04E8" }, { tex: /\\cyrchar\\cyrotld/, unicode: "\u04E9" }, { tex: /\\cyrchar\\CYROT/, unicode: "\u047E" }, { tex: /\\cyrchar\\cyrot/, unicode: "\u047F" }, { tex: /\\cyrchar\\CYRO/, unicode: "\u041E" }, { tex: /\\cyrchar\\cyro/, unicode: "\u043E" }, { tex: /\\cyrchar\\CYRpalochka/, unicode: "\u04C0" }, { tex: /\\cyrchar\\CYRPHK/, unicode: "\u04A6" }, { tex: /\\cyrchar\\cyrphk/, unicode: "\u04A7" }, { tex: /\\cyrchar\\CYRPSI/, unicode: "\u0470" }, { tex: /\\cyrchar\\cyrpsi/, unicode: "\u0471" }, { tex: /\\cyrchar\\CYRP/, unicode: "\u041F" }, { tex: /\\cyrchar\\cyrp/, unicode: "\u043F" }, { tex: /\\cyrchar\\CYRRTICK/, unicode: "\u048E" }, { tex: /\\cyrchar\\cyrrtick/, unicode: "\u048F" }, { tex: /\\cyrchar\\CYRR/, unicode: "\u0420" }, { tex: /\\cyrchar\\cyrr/, unicode: "\u0440" }, { tex: /\\cyrchar\\CYRSCHWA/, unicode: "\u04D8" }, { tex: /\\cyrchar\\cyrschwa/, unicode: "\u04D9" }, { tex: /\\cyrchar\\CYRSDSC/, unicode: "\u04AA" }, { tex: /\\cyrchar\\cyrsdsc/, unicode: "\u04AB" }, { tex: /\\cyrchar\\CYRSEMISFTSN/, unicode: "\u048C" }, { tex: /\\cyrchar\\cyrsemisftsn/, unicode: "\u048D" }, { tex: /\\cyrchar\\CYRSFTSN/, unicode: "\u042C" }, { tex: /\\cyrchar\\cyrsftsn/, unicode: "\u044C" }, { tex: /\\cyrchar\\CYRSHCH/, unicode: "\u0429" }, { tex: /\\cyrchar\\cyrshch/, unicode: "\u0449" }, { tex: /\\cyrchar\\CYRSHHA/, unicode: "\u04BA" }, { tex: /\\cyrchar\\cyrshha/, unicode: "\u04BB" }, { tex: /\\cyrchar\\CYRSH/, unicode: "\u0428" }, { tex: /\\cyrchar\\cyrsh/, unicode: "\u0448" }, { tex: /\\cyrchar\\CYRS/, unicode: "\u0421" }, { tex: /\\cyrchar\\cyrs/, unicode: "\u0441" }, { tex: /\\cyrchar\\CYRTDSC/, unicode: "\u04AC" }, { tex: /\\cyrchar\\cyrtdsc/, unicode: "\u04AD" }, { tex: /\\cyrchar\\CYRTETSE/, unicode: "\u04B4" }, { tex: /\\cyrchar\\cyrtetse/, unicode: "\u04B5" }, { tex: /\\cyrchar\\cyrthousands/, unicode: "\u0482" }, { tex: /\\cyrchar\\CYRTSHE/, unicode: "\u040B" }, { tex: /\\cyrchar\\cyrtshe/, unicode: "\u045B" }, { tex: /\\cyrchar\\CYRT/, unicode: "\u0422" }, { tex: /\\cyrchar\\cyrt/, unicode: "\u0442" }, { tex: /\\cyrchar\\CYRUK/, unicode: "\u0478" }, { tex: /\\cyrchar\\cyruk/, unicode: "\u0479" }, { tex: /\\cyrchar\\CYRUSHRT/, unicode: "\u040E" }, { tex: /\\cyrchar\\cyrushrt/, unicode: "\u045E" }, { tex: /\\cyrchar\\CYRU/, unicode: "\u0423" }, { tex: /\\cyrchar\\cyru/, unicode: "\u0443" }, { tex: /\\cyrchar\\CYRV/, unicode: "\u0412" }, { tex: /\\cyrchar\\cyrv/, unicode: "\u0432" }, { tex: /\\cyrchar\\CYRYAT/, unicode: "\u0462" }, { tex: /\\cyrchar\\CYRYA/, unicode: "\u042F" }, { tex: /\\cyrchar\\cyrya/, unicode: "\u044F" }, { tex: /\\cyrchar\\CYRYHCRS/, unicode: "\u04B0" }, { tex: /\\cyrchar\\cyryhcrs/, unicode: "\u04B1" }, { tex: /\\cyrchar\\CYRYI/, unicode: "\u0407" }, { tex: /\\cyrchar\\cyryi/, unicode: "\u0457" }, { tex: /\\cyrchar\\CYRYO/, unicode: "\u0401" }, { tex: /\\cyrchar\\cyryo/, unicode: "\u0451" }, { tex: /\\cyrchar\\CYRY/, unicode: "\u04AE" }, { tex: /\\cyrchar\\cyry/, unicode: "\u04AF" }, { tex: /\\cyrchar\\CYRYU/, unicode: "\u042E" }, { tex: /\\cyrchar\\cyryu/, unicode: "\u044E" }, { tex: /\\cyrchar\\CYRZDSC/, unicode: "\u0498" }, { tex: /\\cyrchar\\cyrzdsc/, unicode: "\u0499" }, { tex: /\\cyrchar\\CYRZHDSC/, unicode: "\u0496" }, { tex: /\\cyrchar\\cyrzhdsc/, unicode: "\u0497" }, { tex: /\\cyrchar\\CYRZH/, unicode: "\u0416" }, { tex: /\\cyrchar\\cyrzh/, unicode: "\u0436" }, { tex: /\\cyrchar\\CYRZ/, unicode: "\u0417" }, { tex: /\\cyrchar\\cyrz/, unicode: "\u0437" }, { tex: /\\cyrchar\\textnumero/, unicode: "\u2116" }, { tex: /\\acute\{\\ddot\{\\iota\}\}/, unicode: "\u0390" }, { tex: /\\acute\{\\ddot\{\\upsilon\}\}/, unicode: "\u03B0" }, { tex: /\\acute\{\\epsilon\}/, unicode: "\u03AD" }, { tex: /\\acute\{\\eta\}/, unicode: "\u03AE" }, { tex: /\\acute\{\\iota\}/, unicode: "\u03AF" }, { tex: /\\acute\{\\omega\}/, unicode: "\u03CE" }, { tex: /\\acute\{\\upsilon\}/, unicode: "\u03CD" }, { tex: /\\AA|\\A\{A\}/, unicode: "\xC5" }, { tex: /\\AC|\\A\{C\}/, unicode: "\u223F" }, { tex: /\\accurrent/, unicode: "\u23E6" }, { tex: /\\acidfree/, unicode: "\u267E" }, { tex: /\\acwgapcirclearrow/, unicode: "\u27F2" }, { tex: /\\acwleftarcarrow/, unicode: "\u2939" }, { tex: /\\acwoverarcarrow/, unicode: "\u293A" }, { tex: /\\acwunderarcarrow/, unicode: "\u293B" }, { tex: /\\AE|\\A\{E\}/, unicode: "\xC6" }, { tex: /\\allequal/, unicode: "\u224C" }, { tex: /\\'\$\\alpha\$/, unicode: "\u03AC" }, { tex: /\\angdnr/, unicode: "\u299F" }, { tex: /\\angles/, unicode: "\u299E" }, { tex: /\\angleubar/, unicode: "\u29A4" }, { tex: /\\annuity/, unicode: "\u20E7" }, { tex: /\\APLboxquestion/, unicode: "\u2370" }, { tex: /\\APLboxupcaret/, unicode: "\u2353" }, { tex: /\\APLcomment/, unicode: "\u235D" }, { tex: /\\APLdownarrowbox/, unicode: "\u2357" }, { tex: /\\APLinput/, unicode: "\u235E" }, { tex: /\\APLleftarrowbox/, unicode: "\u2347" }, { tex: /\\APLrightarrowbox/, unicode: "\u2348" }, { tex: /\\APLuparrowbox/, unicode: "\u2350" }, { tex: /\\approxeqq/, unicode: "\u2A70" }, { tex: /\\approxeq/, unicode: "\u224A" }, { tex: /\\approxnotequal/, unicode: "\u2246" }, { tex: /\\approx/, unicode: "\u2248" }, { tex: /\\aquarius/, unicode: "\u2652" }, { tex: /\\arrowwaveleft|\\arrowwaveright/, unicode: "\u219C" }, { tex: /\\assert/, unicode: "\u22A6" }, { tex: /\\asteraccent/, unicode: "\u20F0" }, { tex: /\\backdprime/, unicode: "\u2036" }, { tex: /\\backepsilon/, unicode: "\u03F6" }, { tex: /\\backprime/, unicode: "\u2035" }, { tex: /\\backsimeq/, unicode: "\u22CD" }, { tex: /\\backsim/, unicode: "\u223D" }, { tex: /\\backtrprime/, unicode: "\u2037" }, { tex: /\\bagmember/, unicode: "\u22FF" }, { tex: /\\barcap/, unicode: "\u2A43" }, { tex: /\\barcup/, unicode: "\u2A42" }, { tex: /\\barleftarrowrightarrowba/, unicode: "\u21B9" }, { tex: /\\barleftharpoon/, unicode: "\u296B" }, { tex: /\\barovernorthwestarrow/, unicode: "\u21B8" }, { tex: /\\barrightarrowdiamond/, unicode: "\u2920" }, { tex: /\\barrightharpoon/, unicode: "\u296D" }, { tex: /\\barvee/, unicode: "\u22BD" }, { tex: /\\barwedge/, unicode: "\u22BC" }, { tex: /\\bbrktbrk/, unicode: "\u23B6" }, { tex: /\\because/, unicode: "\u2235" }, { tex: /\\benzenr/, unicode: "\u23E3" }, { tex: /\\between/, unicode: "\u226C" }, { tex: /\\bigcap/, unicode: "\u22C2" }, { tex: /\\bigcirc/, unicode: "\u25CB" }, { tex: /\\bigcupdot/, unicode: "\u2A03" }, { tex: /\\bigcup/, unicode: "\u22C3" }, { tex: /\\biginterleave/, unicode: "\u2AFC" }, { tex: /\\bigodot/, unicode: "\u2A00" }, { tex: /\\bigoplus/, unicode: "\u2A01" }, { tex: /\\bigotimes/, unicode: "\u2A02" }, { tex: /\\bigslopedvee/, unicode: "\u2A57" }, { tex: /\\bigslopedwedge/, unicode: "\u2A58" }, { tex: /\\bigtalloblong/, unicode: "\u2AFF" }, { tex: /\\bigtop/, unicode: "\u27D9" }, { tex: /\\bigtriangledown/, unicode: "\u25BD" }, { tex: /\\bigtriangleleft/, unicode: "\u2A1E" }, { tex: /\\bigtriangleup/, unicode: "\u25B3" }, { tex: /\\biohazard/, unicode: "\u2623" }, { tex: /\\blackcircledownarrow/, unicode: "\u29ED" }, { tex: /\\blackcircledrightdot/, unicode: "\u2688" }, { tex: /\\blackcircledtwodots/, unicode: "\u2689" }, { tex: /\\blackcircleulquadwhite/, unicode: "\u25D5" }, { tex: /\\blackdiamonddownarrow/, unicode: "\u29EA" }, { tex: /\\blackhourglass/, unicode: "\u29D7" }, { tex: /\\blackinwhitediamond/, unicode: "\u25C8" }, { tex: /\\blackinwhitesquare/, unicode: "\u25A3" }, { tex: /\\blacklozenge/, unicode: "\u29EB" }, { tex: /\\blackpointerleft/, unicode: "\u25C4" }, { tex: /\\blackpointerright/, unicode: "\u25BA" }, { tex: /\\blacksmiley/, unicode: "\u263B" }, { tex: /\\blacksquare/, unicode: "\u25AA" }, { tex: /\\blacktriangledown/, unicode: "\u25BE" }, { tex: /\\blacktriangleleft/, unicode: "\u25C2" }, { tex: /\\blacktriangleright/, unicode: "\u25B8" }, { tex: /\\blacktriangle/, unicode: "\u25B4" }, { tex: /\\blkhorzoval/, unicode: "\u2B2C" }, { tex: /\\blkvertoval/, unicode: "\u2B2E" }, { tex: /\\blockfull/, unicode: "\u2588" }, { tex: /\\blockhalfshaded/, unicode: "\u2592" }, { tex: /\\blocklefthalf/, unicode: "\u258C" }, { tex: /\\blocklowhalf/, unicode: "\u2584" }, { tex: /\\blockqtrshaded/, unicode: "\u2591" }, { tex: /\\blockrighthalf/, unicode: "\u2590" }, { tex: /\\blockthreeqtrshaded/, unicode: "\u2593" }, { tex: /\\blockuphalf/, unicode: "\u2580" }, { tex: /\\botsemicircle/, unicode: "\u25E1" }, { tex: /\\boxast/, unicode: "\u29C6" }, { tex: /\\boxbox/, unicode: "\u29C8" }, { tex: /\\boxbslash/, unicode: "\u29C5" }, { tex: /\\boxcircle/, unicode: "\u29C7" }, { tex: /\\boxdot/, unicode: "\u22A1" }, { tex: /\\boxminus/, unicode: "\u229F" }, { tex: /\\boxonbox/, unicode: "\u29C9" }, { tex: /\\boxplus/, unicode: "\u229E" }, { tex: /\\boxslash/, unicode: "\u29C4" }, { tex: /\\boxtimes/, unicode: "\u22A0" }, { tex: /\\bsimilarleftarrow/, unicode: "\u2B41" }, { tex: /\\bsimilarrightarrow/, unicode: "\u2B47" }, { tex: /\\bsolhsub/, unicode: "\u27C8" }, { tex: /\\btimes/, unicode: "\u2A32" }, { tex: /\\bullet/, unicode: "\u2219" }, { tex: /\\bullseye/, unicode: "\u25CE" }, { tex: /\\bumpeqq/, unicode: "\u2AAE" }, { tex: /\\candra/, unicode: "\u0310" }, { tex: /\\capbarcup/, unicode: "\u2A49" }, { tex: /\\capdot/, unicode: "\u2A40" }, { tex: /\\CapitalDifferentialD/, unicode: "\u2145" }, { tex: /\\capovercup/, unicode: "\u2A47" }, { tex: /\\capricornus/, unicode: "\u2651" }, { tex: /\\capwedge/, unicode: "\u2A44" }, { tex: /\\caretinsert/, unicode: "\u2038" }, { tex: /\\carriagereturn/, unicode: "\u21B5" }, { tex: /\\ccwundercurvearrow/, unicode: "\u293F" }, { tex: /\\CheckedBox/, unicode: "\u2611" }, { tex: /\\circlearrowleft/, unicode: "\u21BA" }, { tex: /\\circlearrowright/, unicode: "\u21BB" }, { tex: /\\circledast/, unicode: "\u229B" }, { tex: /\\circledbslash/, unicode: "\u29B8" }, { tex: /\\circledbullet/, unicode: "\u29BF" }, { tex: /\\circledcirc/, unicode: "\u229A" }, { tex: /\\circleddash/, unicode: "\u229D" }, { tex: /\\circledequal/, unicode: "\u229C" }, { tex: /\\circledgtr/, unicode: "\u29C1" }, { tex: /\\circledless/, unicode: "\u29C0" }, { tex: /\\circledownarrow/, unicode: "\u29EC" }, { tex: /\\circledparallel/, unicode: "\u29B7" }, { tex: /\\circledrightdot/, unicode: "\u2686" }, { tex: /\\circledS/, unicode: "\u24C8" }, { tex: /\\circledtwodots/, unicode: "\u2687" }, { tex: /\\circledwhitebullet/, unicode: "\u29BE" }, { tex: /\\circlellquad/, unicode: "\u25F5" }, { tex: /\\circlelrquad/, unicode: "\u25F6" }, { tex: /\\circleonleftarrow/, unicode: "\u2B30" }, { tex: /\\circleonrightarrow/, unicode: "\u21F4" }, { tex: /\\circletophalfblack/, unicode: "\u25D3" }, { tex: /\\circleulquad/, unicode: "\u25F4" }, { tex: /\\circleurquadblack/, unicode: "\u25D4" }, { tex: /\\circleurquad/, unicode: "\u25F7" }, { tex: /\\circlevertfill/, unicode: "\u25CD" }, { tex: /\^\\circ|\\textdegree/, unicode: "\xB0" }, { tex: /\\cirmid/, unicode: "\u2AEF" }, { tex: /\\cirscir/, unicode: "\u29C2" }, { tex: /\\clockoint/, unicode: "\u2A0F" }, { tex: /\\closedvarcap/, unicode: "\u2A4D" }, { tex: /\\closedvarcupsmashprod/, unicode: "\u2A50" }, { tex: /\\closedvarcup/, unicode: "\u2A4C" }, { tex: /\\closure/, unicode: "\u2050" }, { tex: /\\clwintegral/, unicode: "\u2231" }, { tex: /\\Coloneqq/, unicode: "\u2A74" }, { tex: /\\commaminus/, unicode: "\u2A29" }, { tex: /\\complement/, unicode: "\u2201" }, { tex: /\\ComplexI/, unicode: "\u2148" }, { tex: /\\ComplexJ/, unicode: "\u2149" }, { tex: /\\concavediamondtickleft/, unicode: "\u27E2" }, { tex: /\\concavediamondtickright/, unicode: "\u27E3" }, { tex: /\\concavediamond/, unicode: "\u27E1" }, { tex: /\\congdot/, unicode: "\u2A6D" }, { tex: /\\conictaper/, unicode: "\u2332" }, { tex: /\\coprod/, unicode: "\u2210" }, { tex: /\\cupbarcap/, unicode: "\u2A48" }, { tex: /\\cupdot/, unicode: "\u228D" }, { tex: /\\cupleftarrow/, unicode: "\u228C" }, { tex: /\\cupovercap/, unicode: "\u2A46" }, { tex: /\\cupvee/, unicode: "\u2A45" }, { tex: /\\curlyeqprec/, unicode: "\u22DE" }, { tex: /\\curlyeqsucc/, unicode: "\u22DF" }, { tex: /\\curlyvee/, unicode: "\u22CE" }, { tex: /\\curlywedge/, unicode: "\u22CF" }, { tex: /\\curvearrowleftplus/, unicode: "\u293D" }, { tex: /\\curvearrowleft/, unicode: "\u21B6" }, { tex: /\\curvearrowrightminus/, unicode: "\u293C" }, { tex: /\\curvearrowright/, unicode: "\u21B7" }, { tex: /\\cwgapcirclearrow/, unicode: "\u27F3" }, { tex: /\\cwrightarcarrow/, unicode: "\u2938" }, { tex: /\\cwundercurvearrow/, unicode: "\u293E" }, { tex: /\\dashleftarrow/, unicode: "\u21E0" }, { tex: /\\dashrightarrow/, unicode: "\u21E2" }, { tex: /\\DashVDash/, unicode: "\u27DA" }, { tex: /\\dashVdash/, unicode: "\u27DB" }, { tex: /\\dbkarow/, unicode: "\u290F" }, { tex: /\\dblarrowupdown/, unicode: "\u21C5" }, { tex: /\\ddot\{\\iota\}/, unicode: "\u03CA" }, { tex: /\\ddotseq/, unicode: "\u2A77" }, { tex: /\\ddot\{\\upsilon\}/, unicode: "\u03CB" }, { tex: /\\DDownarrow/, unicode: "\u27F1" }, { tex: /\\Ddownarrow/, unicode: "\u290B" }, { tex: /\\DH|\\D\{H\}/, unicode: "\xD0" }, { tex: /\\diameter/, unicode: "\u2300" }, { tex: /\\diamondbotblack/, unicode: "\u2B19" }, { tex: /\\Diamonddot/, unicode: "\u27D0" }, { tex: /\\diamondleftarrowbar/, unicode: "\u291F" }, { tex: /\\diamondleftarrow/, unicode: "\u291D" }, { tex: /\\diamondleftblack/, unicode: "\u2B16" }, { tex: /\\diamondrightblack/, unicode: "\u2B17" }, { tex: /\\diamondtopblack/, unicode: "\u2B18" }, { tex: /\\diamond/, unicode: "\u22C4" }, { tex: /\\Diamond/, unicode: "\u25C7" }, { tex: /\\diceiii/, unicode: "\u2682" }, { tex: /\\DifferentialD/, unicode: "\u2146" }, { tex: /\\Digamma/, unicode: "\u03DC" }, { tex: /\\digamma/, unicode: "\u03DD" }, { tex: /\\ding\{100\}/, unicode: "\u2744" }, { tex: /\\ding\{101\}/, unicode: "\u2745" }, { tex: /\\ding\{102\}/, unicode: "\u2746" }, { tex: /\\ding\{103\}/, unicode: "\u2747" }, { tex: /\\ding\{104\}/, unicode: "\u2748" }, { tex: /\\ding\{105\}/, unicode: "\u2749" }, { tex: /\\ding\{106\}/, unicode: "\u274A" }, { tex: /\\ding\{107\}/, unicode: "\u274B" }, { tex: /\\ding\{108\}/, unicode: "\u25CF" }, { tex: /\\ding\{109\}/, unicode: "\u274D" }, { tex: /\\ding\{110\}/, unicode: "\u25A0" }, { tex: /\\ding\{111\}/, unicode: "\u274F" }, { tex: /\\ding\{112\}/, unicode: "\u2750" }, { tex: /\\ding\{113\}/, unicode: "\u2751" }, { tex: /\\ding\{114\}/, unicode: "\u2752" }, { tex: /\\ding\{115\}/, unicode: "\u25B2" }, { tex: /\\ding\{116\}/, unicode: "\u25BC" }, { tex: /\\ding\{117\}/, unicode: "\u25C6" }, { tex: /\\ding\{118\}/, unicode: "\u2756" }, { tex: /\\ding\{119\}/, unicode: "\u25D7" }, { tex: /\\ding\{120\}/, unicode: "\u2758" }, { tex: /\\ding\{121\}/, unicode: "\u2759" }, { tex: /\\ding\{122\}/, unicode: "\u275A" }, { tex: /\\ding\{123\}/, unicode: "\u275B" }, { tex: /\\ding\{124\}/, unicode: "\u275C" }, { tex: /\\ding\{125\}/, unicode: "\u275D" }, { tex: /\\ding\{126\}/, unicode: "\u275E" }, { tex: /\\ding\{161\}/, unicode: "\u2761" }, { tex: /\\ding\{162\}/, unicode: "\u2762" }, { tex: /\\ding\{163\}/, unicode: "\u2763" }, { tex: /\\ding\{164\}/, unicode: "\u2764" }, { tex: /\\ding\{165\}/, unicode: "\u2765" }, { tex: /\\ding\{166\}/, unicode: "\u2766" }, { tex: /\\ding\{167\}/, unicode: "\u2767" }, { tex: /\\ding\{168\}/, unicode: "\u2663" }, { tex: /\\ding\{169\}/, unicode: "\u2666" }, { tex: /\\ding\{170\}/, unicode: "\u2665" }, { tex: /\\ding\{171\}/, unicode: "\u2660" }, { tex: /\\ding\{172\}/, unicode: "\u2460" }, { tex: /\\ding\{173\}/, unicode: "\u2461" }, { tex: /\\ding\{174\}/, unicode: "\u2462" }, { tex: /\\ding\{175\}/, unicode: "\u2463" }, { tex: /\\ding\{176\}/, unicode: "\u2464" }, { tex: /\\ding\{177\}/, unicode: "\u2465" }, { tex: /\\ding\{178\}/, unicode: "\u2466" }, { tex: /\\ding\{179\}/, unicode: "\u2467" }, { tex: /\\ding\{180\}/, unicode: "\u2468" }, { tex: /\\ding\{181\}/, unicode: "\u2469" }, { tex: /\\ding\{182\}/, unicode: "\u2776" }, { tex: /\\ding\{183\}/, unicode: "\u2777" }, { tex: /\\ding\{184\}/, unicode: "\u2778" }, { tex: /\\ding\{185\}/, unicode: "\u2779" }, { tex: /\\ding\{186\}/, unicode: "\u277A" }, { tex: /\\ding\{187\}/, unicode: "\u277B" }, { tex: /\\ding\{188\}/, unicode: "\u277C" }, { tex: /\\ding\{189\}/, unicode: "\u277D" }, { tex: /\\ding\{190\}/, unicode: "\u277E" }, { tex: /\\ding\{191\}/, unicode: "\u277F" }, { tex: /\\ding\{192\}/, unicode: "\u2780" }, { tex: /\\ding\{193\}/, unicode: "\u2781" }, { tex: /\\ding\{194\}/, unicode: "\u2782" }, { tex: /\\ding\{195\}/, unicode: "\u2783" }, { tex: /\\ding\{196\}/, unicode: "\u2784" }, { tex: /\\ding\{197\}/, unicode: "\u2785" }, { tex: /\\ding\{198\}/, unicode: "\u2786" }, { tex: /\\ding\{199\}/, unicode: "\u2787" }, { tex: /\\ding\{200\}/, unicode: "\u2788" }, { tex: /\\ding\{201\}/, unicode: "\u2789" }, { tex: /\\ding\{202\}/, unicode: "\u278A" }, { tex: /\\ding\{203\}/, unicode: "\u278B" }, { tex: /\\ding\{204\}/, unicode: "\u278C" }, { tex: /\\ding\{205\}/, unicode: "\u278D" }, { tex: /\\ding\{206\}/, unicode: "\u278E" }, { tex: /\\ding\{207\}/, unicode: "\u278F" }, { tex: /\\ding\{208\}/, unicode: "\u2790" }, { tex: /\\ding\{209\}/, unicode: "\u2791" }, { tex: /\\ding\{210\}/, unicode: "\u2792" }, { tex: /\\ding\{211\}/, unicode: "\u2793" }, { tex: /\\ding\{212\}/, unicode: "\u2794" }, { tex: /\\ding\{216\}/, unicode: "\u2798" }, { tex: /\\ding\{217\}/, unicode: "\u2799" }, { tex: /\\ding\{218\}/, unicode: "\u279A" }, { tex: /\\ding\{219\}/, unicode: "\u279B" }, { tex: /\\ding\{220\}/, unicode: "\u279C" }, { tex: /\\ding\{221\}/, unicode: "\u279D" }, { tex: /\\ding\{222\}/, unicode: "\u279E" }, { tex: /\\ding\{223\}/, unicode: "\u279F" }, { tex: /\\ding\{224\}/, unicode: "\u27A0" }, { tex: /\\ding\{225\}/, unicode: "\u27A1" }, { tex: /\\ding\{226\}/, unicode: "\u27A2" }, { tex: /\\ding\{227\}/, unicode: "\u27A3" }, { tex: /\\ding\{228\}/, unicode: "\u27A4" }, { tex: /\\ding\{229\}/, unicode: "\u27A5" }, { tex: /\\ding\{230\}/, unicode: "\u27A6" }, { tex: /\\ding\{231\}/, unicode: "\u27A7" }, { tex: /\\ding\{232\}/, unicode: "\u27A8" }, { tex: /\\ding\{233\}/, unicode: "\u27A9" }, { tex: /\\ding\{234\}/, unicode: "\u27AA" }, { tex: /\\ding\{235\}/, unicode: "\u27AB" }, { tex: /\\ding\{236\}/, unicode: "\u27AC" }, { tex: /\\ding\{237\}/, unicode: "\u27AD" }, { tex: /\\ding\{238\}/, unicode: "\u27AE" }, { tex: /\\ding\{239\}/, unicode: "\u27AF" }, { tex: /\\ding\{241\}/, unicode: "\u27B1" }, { tex: /\\ding\{242\}/, unicode: "\u27B2" }, { tex: /\\ding\{243\}/, unicode: "\u27B3" }, { tex: /\\ding\{244\}/, unicode: "\u27B4" }, { tex: /\\ding\{245\}/, unicode: "\u27B5" }, { tex: /\\ding\{246\}/, unicode: "\u27B6" }, { tex: /\\ding\{247\}/, unicode: "\u27B7" }, { tex: /\\ding\{248\}/, unicode: "\u27B8" }, { tex: /\\ding\{249\}/, unicode: "\u27B9" }, { tex: /\\ding\{250\}/, unicode: "\u27BA" }, { tex: /\\ding\{251\}/, unicode: "\u27BB" }, { tex: /\\ding\{252\}/, unicode: "\u27BC" }, { tex: /\\ding\{253\}/, unicode: "\u27BD" }, { tex: /\\ding\{254\}/, unicode: "\u27BE" }, { tex: /\\ding\{33\}/, unicode: "\u2701" }, { tex: /\\ding\{34\}/, unicode: "\u2702" }, { tex: /\\ding\{35\}/, unicode: "\u2703" }, { tex: /\\ding\{36\}/, unicode: "\u2704" }, { tex: /\\ding\{37\}/, unicode: "\u260E" }, { tex: /\\ding\{38\}/, unicode: "\u2706" }, { tex: /\\ding\{39\}/, unicode: "\u2707" }, { tex: /\\ding\{40\}/, unicode: "\u2708" }, { tex: /\\ding\{41\}/, unicode: "\u2709" }, { tex: /\\ding\{42\}/, unicode: "\u261B" }, { tex: /\\ding\{43\}/, unicode: "\u261E" }, { tex: /\\ding\{44\}/, unicode: "\u270C" }, { tex: /\\ding\{45\}/, unicode: "\u270D" }, { tex: /\\ding\{46\}/, unicode: "\u270E" }, { tex: /\\ding\{47\}/, unicode: "\u270F" }, { tex: /\\ding\{48\}/, unicode: "\u2710" }, { tex: /\\ding\{49\}/, unicode: "\u2711" }, { tex: /\\ding\{50\}/, unicode: "\u2712" }, { tex: /\\ding\{51\}/, unicode: "\u2713" }, { tex: /\\ding\{52\}/, unicode: "\u2714" }, { tex: /\\ding\{53\}/, unicode: "\u2715" }, { tex: /\\ding\{54\}/, unicode: "\u2716" }, { tex: /\\ding\{55\}/, unicode: "\u2717" }, { tex: /\\ding\{56\}/, unicode: "\u2718" }, { tex: /\\ding\{57\}/, unicode: "\u2719" }, { tex: /\\ding\{58\}/, unicode: "\u271A" }, { tex: /\\ding\{59\}/, unicode: "\u271B" }, { tex: /\\ding\{60\}/, unicode: "\u271C" }, { tex: /\\ding\{61\}/, unicode: "\u271D" }, { tex: /\\ding\{62\}/, unicode: "\u271E" }, { tex: /\\ding\{63\}/, unicode: "\u271F" }, { tex: /\\ding\{64\}/, unicode: "\u2720" }, { tex: /\\ding\{65\}/, unicode: "\u2721" }, { tex: /\\ding\{66\}/, unicode: "\u2722" }, { tex: /\\ding\{67\}/, unicode: "\u2723" }, { tex: /\\ding\{68\}/, unicode: "\u2724" }, { tex: /\\ding\{69\}/, unicode: "\u2725" }, { tex: /\\ding\{70\}/, unicode: "\u2726" }, { tex: /\\ding\{71\}/, unicode: "\u2727" }, { tex: /\\ding\{72\}/, unicode: "\u2605" }, { tex: /\\ding\{73\}/, unicode: "\u2606" }, { tex: /\\ding\{74\}/, unicode: "\u272A" }, { tex: /\\ding\{75\}/, unicode: "\u272B" }, { tex: /\\ding\{76\}/, unicode: "\u272C" }, { tex: /\\ding\{77\}/, unicode: "\u272D" }, { tex: /\\ding\{78\}/, unicode: "\u272E" }, { tex: /\\ding\{79\}/, unicode: "\u272F" }, { tex: /\\ding\{80\}/, unicode: "\u2730" }, { tex: /\\ding\{81\}/, unicode: "\u2731" }, { tex: /\\ding\{82\}/, unicode: "\u2732" }, { tex: /\\ding\{83\}/, unicode: "\u2733" }, { tex: /\\ding\{84\}/, unicode: "\u2734" }, { tex: /\\ding\{85\}/, unicode: "\u2735" }, { tex: /\\ding\{86\}/, unicode: "\u2736" }, { tex: /\\ding\{87\}/, unicode: "\u2737" }, { tex: /\\ding\{88\}/, unicode: "\u2738" }, { tex: /\\ding\{89\}/, unicode: "\u2739" }, { tex: /\\ding\{90\}/, unicode: "\u273A" }, { tex: /\\ding\{91\}/, unicode: "\u273B" }, { tex: /\\ding\{92\}/, unicode: "\u273C" }, { tex: /\\ding\{93\}/, unicode: "\u273D" }, { tex: /\\ding\{94\}/, unicode: "\u273E" }, { tex: /\\ding\{95\}/, unicode: "\u273F" }, { tex: /\\ding\{96\}/, unicode: "\u2740" }, { tex: /\\ding\{97\}/, unicode: "\u2741" }, { tex: /\\ding\{98\}/, unicode: "\u2742" }, { tex: /\\ding\{99\}/, unicode: "\u2743" }, { tex: /\\divideontimes/, unicode: "\u22C7" }, { tex: /\\doteqdot/, unicode: "\u2251" }, { tex: /\\dotequiv/, unicode: "\u2A67" }, { tex: /\\dotplus/, unicode: "\u2214" }, { tex: /\\dotsim/, unicode: "\u2A6A" }, { tex: /\\dottedcircle/, unicode: "\u25CC" }, { tex: /\\dottedsquare/, unicode: "\u2B1A" }, { tex: /\\dottimes/, unicode: "\u2A30" }, { tex: /\\doublebarvee/, unicode: "\u2A62" }, { tex: /\\doubleplus/, unicode: "\u29FA" }, { tex: /\\downarrowbarred/, unicode: "\u2908" }, { tex: /\\DownArrowBar/, unicode: "\u2913" }, { tex: /\\downarrow/, unicode: "\u2193" }, { tex: /\\Downarrow/, unicode: "\u21D3" }, { tex: /\\DownArrowUpArrow/, unicode: "\u21F5" }, { tex: /\\downdasharrow/, unicode: "\u21E3" }, { tex: /\\downdownarrows/, unicode: "\u21CA" }, { tex: /\\downdownharpoons/, unicode: "\u2965" }, { tex: /\\downfishtail/, unicode: "\u297F" }, { tex: /\\downharpoonleft/, unicode: "\u21C3" }, { tex: /\\downharpoonright/, unicode: "\u21C2" }, { tex: /\\DownLeftRightVector/, unicode: "\u2950" }, { tex: /\\DownLeftTeeVector/, unicode: "\u295E" }, { tex: /\\DownLeftVectorBar/, unicode: "\u2956" }, { tex: /\\downrightcurvedarrow/, unicode: "\u2935" }, { tex: /\\DownRightTeeVector/, unicode: "\u295F" }, { tex: /\\DownRightVectorBar/, unicode: "\u2957" }, { tex: /\\downslopeellipsis/, unicode: "\u22F1" }, { tex: /\\downtriangleleftblack/, unicode: "\u29E8" }, { tex: /\\downtrianglerightblack/, unicode: "\u29E9" }, { tex: /\\downwhitearrow/, unicode: "\u21E9" }, { tex: /\\drbkarow/, unicode: "\u2910" }, { tex: /\\droang/, unicode: "\u031A" }, { tex: /\\egsdot/, unicode: "\u2A98" }, { tex: /\\eighthnote/, unicode: "\u266A" }, { tex: /\\elinters/, unicode: "\u23E7" }, { tex: /\\Elolarr/, unicode: "\u2940" }, { tex: /\\Elorarr/, unicode: "\u2941" }, { tex: /\\Elroang/, unicode: "\u2986" }, { tex: /\\elsdot/, unicode: "\u2A97" }, { tex: /\\ElsevierGlyph\{2129\}/, unicode: "\u2129" }, { tex: /\\ElsevierGlyph\{21B3\}/, unicode: "\u21B3" }, { tex: /\\ElsevierGlyph\{2232\}/, unicode: "\u2232" }, { tex: /\\ElsevierGlyph\{2233\}/, unicode: "\u2233" }, { tex: /\\ElsevierGlyph\{2238\}/, unicode: "\u2238" }, { tex: /\\ElsevierGlyph\{2242\}/, unicode: "\u2242" }, { tex: /\\ElsevierGlyph\{225A\}/, unicode: "\u225A" }, { tex: /\\ElsevierGlyph\{225F\}/, unicode: "\u225F" }, { tex: /\\ElsevierGlyph\{2274\}/, unicode: "\u2274" }, { tex: /\\ElsevierGlyph\{2275\}/, unicode: "\u2275" }, { tex: /\\ElsevierGlyph\{22C0\}/, unicode: "\u22C0" }, { tex: /\\ElsevierGlyph\{22C1\}/, unicode: "\u22C1" }, { tex: /\\ElsevierGlyph\{300A\}/, unicode: "\u300A" }, { tex: /\\ElsevierGlyph\{300B\}/, unicode: "\u300B" }, { tex: /\\ElsevierGlyph\{3018\}/, unicode: "\u2985" }, { tex: /\\ElsevierGlyph\{3019\}/, unicode: "\u3019" }, { tex: /\\ElsevierGlyph\{E20A\}/, unicode: "\u2926" }, { tex: /\\ElsevierGlyph\{E20B\}/, unicode: "\u2925" }, { tex: /\\ElsevierGlyph\{E20C\}/, unicode: "\u2923" }, { tex: /\\ElsevierGlyph\{E20D\}/, unicode: "\u2924" }, { tex: /\\ElsevierGlyph\{E20E\}/, unicode: "\u2928" }, { tex: /\\ElsevierGlyph\{E20F\}/, unicode: "\u2929" }, { tex: /\\ElsevierGlyph\{E210\}/, unicode: "\u292A" }, { tex: /\\ElsevierGlyph\{E211\}/, unicode: "\u2927" }, { tex: /\\ElsevierGlyph\{E212\}/, unicode: "\u2905" }, { tex: /\\ElsevierGlyph\{E214\}/, unicode: "\u297C" }, { tex: /\\ElsevierGlyph\{E215\}/, unicode: "\u297D" }, { tex: /\\ElsevierGlyph\{E219\}/, unicode: "\u2937" }, { tex: /\\ElsevierGlyph\{E21A\}/, unicode: "\u2936" }, { tex: /\\ElsevierGlyph\{E21C\}/, unicode: "\u2933" }, { tex: /\\ElsevierGlyph\{E259\}/, unicode: "\u2A3C" }, { tex: /\\ElsevierGlyph\{E25A\}/, unicode: "\u2A25" }, { tex: /\\ElsevierGlyph\{E25B\}/, unicode: "\u2A2A" }, { tex: /\\ElsevierGlyph\{E25C\}/, unicode: "\u2A2D" }, { tex: /\\ElsevierGlyph\{E25D\}/, unicode: "\u2A2E" }, { tex: /\\ElsevierGlyph\{E25E\}/, unicode: "\u2A34" }, { tex: /\\ElsevierGlyph\{E260\}/, unicode: "\u29B5" }, { tex: /\\ElsevierGlyph\{E291\}/, unicode: "\u2994" }, { tex: /\\ElsevierGlyph\{E30D\}/, unicode: "\u2AEB" }, { tex: /\\ElsevierGlyph\{E36E\}/, unicode: "\u2A55" }, { tex: /\\ElsevierGlyph\{E372\}/, unicode: "\u29DC" }, { tex: /\\ElsevierGlyph\{E381\}/, unicode: "\u25B1" }, { tex: /\\ElsevierGlyph\{E395\}/, unicode: "\u2A10" }, { tex: /\\ElsevierGlyph\{E61B\}/, unicode: "\u29B6" }, { tex: /\\ElsevierGlyph\{E838\}/, unicode: "\u233D" }, { tex: /\\Elxsqcup/, unicode: "\u2A06" }, { tex: /\\Elxuplus/, unicode: "\u2A04" }, { tex: /\\ElzAnd/, unicode: "\u2A53" }, { tex: /\\Elzbar/, unicode: "\u0336" }, { tex: /\\Elzbtdl/, unicode: "\u026C" }, { tex: /\\ElzCint/, unicode: "\u2A0D" }, { tex: /\\Elzcirfb/, unicode: "\u25D2" }, { tex: /\\Elzcirfl/, unicode: "\u25D0" }, { tex: /\\Elzcirfr/, unicode: "\u25D1" }, { tex: /\\Elzclomeg/, unicode: "\u0277" }, { tex: /\\Elzddfnc/, unicode: "\u2999" }, { tex: /\\Elzdefas/, unicode: "\u29CB" }, { tex: /\\Elzdlcorn/, unicode: "\u23A3" }, { tex: /\\Elzdshfnc/, unicode: "\u2506" }, { tex: /\\Elzdyogh/, unicode: "\u02A4" }, { tex: /\\Elzesh/, unicode: "\u0283" }, { tex: /\\Elzfhr/, unicode: "\u027E" }, { tex: /\\Elzglst/, unicode: "\u0294" }, { tex: /\\Elzhlmrk/, unicode: "\u02D1" }, { tex: /\\ElzInf/, unicode: "\u2A07" }, { tex: /\\Elzinglst/, unicode: "\u0296" }, { tex: /\\Elzinvv/, unicode: "\u028C" }, { tex: /\\Elzinvw/, unicode: "\u028D" }, { tex: /\\ElzLap/, unicode: "\u29CA" }, { tex: /\\Elzlmrk/, unicode: "\u02D0" }, { tex: /\\Elzlow/, unicode: "\u02D5" }, { tex: /\\Elzlpargt/, unicode: "\u29A0" }, { tex: /\\Elzltlmr/, unicode: "\u0271" }, { tex: /\\Elzltln/, unicode: "\u0272" }, { tex: /\\Elzminhat/, unicode: "\u2A5F" }, { tex: /\\Elzopeno/, unicode: "\u0254" }, { tex: /\\Elzpalh/, unicode: "\u0321" }, { tex: /\\Elzpbgam/, unicode: "\u0264" }, { tex: /\\Elzpgamma/, unicode: "\u0263" }, { tex: /\\Elzpscrv/, unicode: "\u028B" }, { tex: /\\Elzpupsil/, unicode: "\u028A" }, { tex: /\\Elzrais/, unicode: "\u02D4" }, { tex: /\\Elzrarrx/, unicode: "\u2947" }, { tex: /\\Elzreapos/, unicode: "\u201B" }, { tex: /\\Elzreglst/, unicode: "\u0295" }, { tex: /\\ElzRlarr/, unicode: "\u2942" }, { tex: /\\ElzrLarr/, unicode: "\u2944" }, { tex: /\\Elzrtld/, unicode: "\u0256" }, { tex: /\\Elzrtll/, unicode: "\u026D" }, { tex: /\\Elzrtln/, unicode: "\u0273" }, { tex: /\\Elzrtlr/, unicode: "\u027D" }, { tex: /\\Elzrtls/, unicode: "\u0282" }, { tex: /\\Elzrtlt/, unicode: "\u0288" }, { tex: /\\Elzrtlz/, unicode: "\u0290" }, { tex: /\\Elzrttrnr/, unicode: "\u027B" }, { tex: /\\Elzrvbull/, unicode: "\u25D8" }, { tex: /\\Elzsbbrg/, unicode: "\u032A" }, { tex: /\\Elzsblhr/, unicode: "\u02D3" }, { tex: /\\Elzsbrhr/, unicode: "\u02D2" }, { tex: /\\Elzschwa/, unicode: "\u0259" }, { tex: /\\Elzsqfl/, unicode: "\u25E7" }, { tex: /\\Elzsqfnw/, unicode: "\u2519" }, { tex: /\\Elzsqfr/, unicode: "\u25E8" }, { tex: /\\Elzsqfse/, unicode: "\u25EA" }, { tex: /\\Elzsqspne/, unicode: "\u22E5" }, { tex: /\\ElzSup/, unicode: "\u2A08" }, { tex: /\\Elztdcol/, unicode: "\u2AF6" }, { tex: /\\Elztesh/, unicode: "\u02A7" }, { tex: /\\Elztfnc/, unicode: "\u2980" }, { tex: /\\ElzThr/, unicode: "\u2A05" }, { tex: /\\ElzTimes/, unicode: "\u2A2F" }, { tex: /\\Elztrna/, unicode: "\u0250" }, { tex: /\\Elztrnh/, unicode: "\u0265" }, { tex: /\\Elztrnmlr/, unicode: "\u0270" }, { tex: /\\Elztrnm/, unicode: "\u026F" }, { tex: /\\Elztrnrl/, unicode: "\u027A" }, { tex: /\\Elztrnr/, unicode: "\u0279" }, { tex: /\\Elztrnsa/, unicode: "\u0252" }, { tex: /\\Elztrnt/, unicode: "\u0287" }, { tex: /\\Elztrny/, unicode: "\u028E" }, { tex: /\\Elzverti/, unicode: "\u02CC" }, { tex: /\\Elzverts/, unicode: "\u02C8" }, { tex: /\\Elzvrecto/, unicode: "\u25AF" }, { tex: /\\Elzxrat/, unicode: "\u211E" }, { tex: /\\Elzyogh/, unicode: "\u0292" }, { tex: /\\emptysetoarrl/, unicode: "\u29B4" }, { tex: /\\emptysetoarr/, unicode: "\u29B3" }, { tex: /\\emptysetobar/, unicode: "\u29B1" }, { tex: /\\emptysetocirc/, unicode: "\u29B2" }, { tex: /\\enclosecircle/, unicode: "\u20DD" }, { tex: /\\enclosediamond/, unicode: "\u20DF" }, { tex: /\\enclosesquare/, unicode: "\u20DE" }, { tex: /\\enclosetriangle/, unicode: "\u20E4" }, { tex: /\\ensuremath\{\\Elzpes\}/, unicode: "\u20A7" }, { tex: /\\eparsl/, unicode: "\u29E3" }, { tex: /\\epsilon/, unicode: "\u03B5" }, { tex: /\\eqcolon/, unicode: "\u2239" }, { tex: /\\eqqgtr/, unicode: "\u2A9A" }, { tex: /\\eqqless/, unicode: "\u2A99" }, { tex: /\\eqqplus/, unicode: "\u2A71" }, { tex: /\\eqqsim/, unicode: "\u2A73" }, { tex: /\\eqqslantgtr/, unicode: "\u2A9C" }, { tex: /\\eqqslantless/, unicode: "\u2A9B" }, { tex: /\\eqslantgtr/, unicode: "\u2A96" }, { tex: /\\eqslantless/, unicode: "\u2A95" }, { tex: /\\equalleftarrow/, unicode: "\u2B40" }, { tex: /\\equalrightarrow/, unicode: "\u2971" }, { tex: /\\equivDD/, unicode: "\u2A78" }, { tex: /\\equivVert/, unicode: "\u2A68" }, { tex: /\\equivVvert/, unicode: "\u2A69" }, { tex: /\\eqvparsl/, unicode: "\u29E5" }, { tex: /\\errbarblackcircle/, unicode: "\u29F3" }, { tex: /\\errbarblackdiamond/, unicode: "\u29F1" }, { tex: /\\errbarblacksquare/, unicode: "\u29EF" }, { tex: /\\errbarcircle/, unicode: "\u29F2" }, { tex: /\\errbardiamond/, unicode: "\u29F0" }, { tex: /\\errbarsquare/, unicode: "\u29EE" }, { tex: /\\estimates/, unicode: "\u2259" }, { tex: /\\exists/, unicode: "\u2203" }, { tex: /\\ExponetialE/, unicode: "\u2147" }, { tex: /\\fallingdotseq/, unicode: "\u2252" }, { tex: /\\fbowtie/, unicode: "\u29D3" }, { tex: /\\fbox\{~~\}/, unicode: "\u25AD" }, { tex: /\\fdiagovnearrow/, unicode: "\u292F" }, { tex: /\\fdiagovrdiag/, unicode: "\u292C" }, { tex: /\\fisheye/, unicode: "\u25C9" }, { tex: /\\forall/, unicode: "\u2200" }, { tex: /\\forcesextra/, unicode: "\u22A8" }, { tex: /\\forksnot/, unicode: "\u2ADD" }, { tex: /\\fracslash/, unicode: "\u2044" }, { tex: /\\frownie/, unicode: "\u2639" }, { tex: /\\fullouterjoin/, unicode: "\u27D7" }, { tex: /\\geqqslant/, unicode: "\u2AFA" }, { tex: /\\geqslant/, unicode: "\u2A7E" }, { tex: /\\gesdotol/, unicode: "\u2A84" }, { tex: /\\gesdoto/, unicode: "\u2A82" }, { tex: /\\gesdot/, unicode: "\u2A80" }, { tex: /\\gesles/, unicode: "\u2A94" }, { tex: /\\ggcurly/, unicode: "\u2ABC" }, { tex: /\\gggnest/, unicode: "\u2AF8" }, { tex: /\\gleichstark/, unicode: "\u29E6" }, { tex: /\\gnapprox/, unicode: "\u2A8A" }, { tex: /\\greaterequivlnt/, unicode: "\u2273" }, { tex: /\\gtquest/, unicode: "\u2A7C" }, { tex: /\\gtrapprox/, unicode: "\u2A86" }, { tex: /\\gtrarr/, unicode: "\u2978" }, { tex: /\\gtreqless/, unicode: "\u22DB" }, { tex: /\\gtreqqless/, unicode: "\u2A8C" }, { tex: /\\gtrless/, unicode: "\u2277" }, { tex: /\\guillemotleft/, unicode: "\xAB" }, { tex: /\\guillemotright/, unicode: "\xBB" }, { tex: /\\guilsinglleft/, unicode: "\u2039" }, { tex: /\\guilsinglright/, unicode: "\u203A" }, { tex: /\\harrowextender/, unicode: "\u23AF" }, { tex: /\\hatapprox/, unicode: "\u2A6F" }, { tex: /\\heartsuit/, unicode: "\u2661" }, { tex: /\\Hermaphrodite/, unicode: "\u26A5" }, { tex: /\\hermitconjmatrix/, unicode: "\u22B9" }, { tex: /\\hexagonblack/, unicode: "\u2B23" }, { tex: /\\hexagon/, unicode: "\u2394" }, { tex: /\\homothetic/, unicode: "\u223B" }, { tex: /\\hookleftarrow/, unicode: "\u21A9" }, { tex: /\\hookrightarrow/, unicode: "\u21AA" }, { tex: /\\hourglass/, unicode: "\u29D6" }, { tex: /\\hphantom\{0\}/, unicode: "\u2007" }, { tex: /\\hphantom\{,\}/, unicode: "\u2008" }, { tex: /\\hrectangleblack/, unicode: "\u25AC" }, { tex: /\\hspace\{0\.166em\}/, unicode: "\u2006" }, { tex: /\\,|\\hspace\{0\.167em\}/, unicode: "\u2009" }, { tex: /\\hspace\{0\.25em\}/, unicode: "\u2005" }, { tex: /\\hspace\{0\.33em\}/, unicode: "\u2004" }, { tex: /\\hspace\{0\.6em\}/, unicode: "\u2002" }, { tex: /\\hspace\{1em\}/, unicode: "\u2003" }, { tex: /\\hyphenbullet/, unicode: "\u2043" }, { tex: /\\hzigzag/, unicode: "\u3030" }, { tex: /\\iiiint/, unicode: "\u2A0C" }, { tex: /\\increment/, unicode: "\u2206" }, { tex: /\\intBar/, unicode: "\u2A0E" }, { tex: /\\intbottom/, unicode: "\u2321" }, { tex: /\\intcap/, unicode: "\u2A19" }, { tex: /\\intcup/, unicode: "\u2A1A" }, { tex: /\\intercal/, unicode: "\u22BA" }, { tex: /\\interleave/, unicode: "\u2AF4" }, { tex: /\\intextender/, unicode: "\u23AE" }, { tex: /\\int\\!\\int\\!\\int/, unicode: "\u222D" }, { tex: /\\int\\!\\int/, unicode: "\u222C" }, { tex: /\\intlarhk/, unicode: "\u2A17" }, { tex: /\\intprodr/, unicode: "\u2A3D" }, { tex: /\\inversewhitecircle/, unicode: "\u25D9" }, { tex: /\\invwhitelowerhalfcircle/, unicode: "\u25DB" }, { tex: /\\invwhiteupperhalfcircle/, unicode: "\u25DA" }, { tex: /\\isindot/, unicode: "\u22F5" }, { tex: /\\isinobar/, unicode: "\u22F7" }, { tex: /\\'\{\}\{I\}/, unicode: "\u038A" }, { tex: /\\jupiter/, unicode: "\u2643" }, { tex: /<\\kern-0\.58em\(/, unicode: "\u2993" }, { tex: /\\Lambda/, unicode: "\u039B" }, { tex: /\\lambda/, unicode: "\u03BB" }, { tex: /\\langledot/, unicode: "\u2991" }, { tex: /\\laplac/, unicode: "\u29E0" }, { tex: /\\lazysinv/, unicode: "\u223E" }, { tex: /\\lblkbrbrak/, unicode: "\u2997" }, { tex: /\\lbracelend/, unicode: "\u23A9" }, { tex: /\\lbracemid/, unicode: "\u23A8" }, { tex: /\\lbraceuend/, unicode: "\u23A7" }, { tex: /\\lbrace/, unicode: "\\{" }, { tex: /\\lBrace/, unicode: "\u2983" }, { tex: /\\lbrackextender/, unicode: "\u23A2" }, { tex: /\\lbracklltick/, unicode: "\u298F" }, { tex: /\\lbrackubar/, unicode: "\u298B" }, { tex: /\\lbrackuend/, unicode: "\u23A1" }, { tex: /\\lbrackultick/, unicode: "\u298D" }, { tex: /\\lbrbrak/, unicode: "\u2772" }, { tex: /\\Lbrbrak/, unicode: "\u27EC" }, { tex: /\\lcurvyangle/, unicode: "\u29FC" }, { tex: /\\leftarrowapprox/, unicode: "\u2B4A" }, { tex: /\\leftarrowbackapprox/, unicode: "\u2B42" }, { tex: /\\LeftArrowBar/, unicode: "\u21E4" }, { tex: /\\leftarrowbsimilar/, unicode: "\u2B4B" }, { tex: /\\leftarrowless/, unicode: "\u2977" }, { tex: /\\leftarrowonoplus/, unicode: "\u2B32" }, { tex: /\\leftarrowplus/, unicode: "\u2946" }, { tex: /\\leftarrowshortrightarrow/, unicode: "\u2943" }, { tex: /\\leftarrowsimilar/, unicode: "\u2973" }, { tex: /\\leftarrowsubset/, unicode: "\u297A" }, { tex: /\\leftarrowtail/, unicode: "\u21A2" }, { tex: /\\leftarrowtriangle/, unicode: "\u21FD" }, { tex: /\\leftarrow/, unicode: "\u2190" }, { tex: /\\Leftarrow/, unicode: "\u21D0" }, { tex: /\\leftarrowx/, unicode: "\u2B3E" }, { tex: /\\leftbarharpoon/, unicode: "\u296A" }, { tex: /\\leftbkarrow/, unicode: "\u290C" }, { tex: /\\LEFTCIRCLE/, unicode: "\u25D6" }, { tex: /\\leftcurvedarrow/, unicode: "\u2B3F" }, { tex: /\\leftdbkarrow/, unicode: "\u290E" }, { tex: /\\leftdbltail/, unicode: "\u291B" }, { tex: /\\leftdotarrow/, unicode: "\u2B38" }, { tex: /\\LeftDownTeeVector/, unicode: "\u2961" }, { tex: /\\LeftDownVectorBar/, unicode: "\u2959" }, { tex: /\\leftharpoondown/, unicode: "\u21BD" }, { tex: /\\leftharpoonup/, unicode: "\u21BC" }, { tex: /\\leftleftarrows/, unicode: "\u21C7" }, { tex: /\\leftleftharpoons/, unicode: "\u2962" }, { tex: /\\leftouterjoin/, unicode: "\u27D5" }, { tex: /\\leftrightarrowcircle/, unicode: "\u2948" }, { tex: /\\leftrightarrows/, unicode: "\u21C6" }, { tex: /\\leftrightarrowtriangle/, unicode: "\u21FF" }, { tex: /\\leftrightarrow/, unicode: "\u2194" }, { tex: /\\Leftrightarrow/, unicode: "\u21D4" }, { tex: /\\leftrightharpoonsdown/, unicode: "\u2967" }, { tex: /\\leftrightharpoons/, unicode: "\u21CB" }, { tex: /\\leftrightharpoonsup/, unicode: "\u2966" }, { tex: /\\leftrightharpoon/, unicode: "\u294A" }, { tex: /\\leftrightsquigarrow/, unicode: "\u21AD" }, { tex: /\\LeftRightVector/, unicode: "\u294E" }, { tex: /\\leftslice/, unicode: "\u2AA6" }, { tex: /\\leftsquigarrow/, unicode: "\u21DC" }, { tex: /\\lefttail/, unicode: "\u2919" }, { tex: /\\LeftTeeVector/, unicode: "\u295A" }, { tex: /\\leftthreearrows/, unicode: "\u2B31" }, { tex: /\\leftthreetimes/, unicode: "\u22CB" }, { tex: /\\LeftTriangleBar/, unicode: "\u29CF" }, { tex: /\\LeftUpDownVector/, unicode: "\u2951" }, { tex: /\\LeftUpTeeVector/, unicode: "\u2960" }, { tex: /\\LeftUpVectorBar/, unicode: "\u2958" }, { tex: /\\LeftVectorBar/, unicode: "\u2952" }, { tex: /\\leftwhitearrow/, unicode: "\u21E6" }, { tex: /\\leqqslant/, unicode: "\u2AF9" }, { tex: /\\leqslant/, unicode: "\u2A7D" }, { tex: /\\lesdotor/, unicode: "\u2A83" }, { tex: /\\lesdoto/, unicode: "\u2A81" }, { tex: /\\lesdot/, unicode: "\u2A7F" }, { tex: /\\lesges/, unicode: "\u2A93" }, { tex: /\\lessapprox/, unicode: "\u2A85" }, { tex: /\\lessdot/, unicode: "\u22D6" }, { tex: /\\lesseqgtr/, unicode: "\u22DA" }, { tex: /\\lesseqqgtr/, unicode: "\u2A8B" }, { tex: /\\lessequivlnt/, unicode: "\u2272" }, { tex: /\\lessgtr/, unicode: "\u2276" }, { tex: /\\lfbowtie/, unicode: "\u29D1" }, { tex: /\\lftimes/, unicode: "\u29D4" }, { tex: /\\lgblkcircle/, unicode: "\u2B24" }, { tex: /\\lgroup/, unicode: "\u27EE" }, { tex: /\\lightning/, unicode: "\u21AF" }, { tex: /\\linefeed/, unicode: "\u21B4" }, { tex: /\\llblacktriangle/, unicode: "\u25E3" }, { tex: /\\llbracket/, unicode: "\u27E6" }, { tex: /\\llcorner/, unicode: "\u231E" }, { tex: /\\llcurly/, unicode: "\u2ABB" }, { tex: /\\Lleftarrow/, unicode: "\u21DA" }, { tex: /\\LLeftarrow/, unicode: "\u2B45" }, { tex: /\\lllnest/, unicode: "\u2AF7" }, { tex: /\\lltriangle/, unicode: "\u25FA" }, { tex: /\\lmoustache/, unicode: "\u23B0" }, { tex: /\\lnapprox/, unicode: "\u2A89" }, { tex: /\\longdashv/, unicode: "\u27DE" }, { tex: /\\longdivision/, unicode: "\u27CC" }, { tex: /\\longleftarrow/, unicode: "\u27F5" }, { tex: /\\Longleftarrow/, unicode: "\u27F8" }, { tex: /\\longleftrightarrow/, unicode: "\u27F7" }, { tex: /\\Longleftrightarrow/, unicode: "\u27FA" }, { tex: /\\longleftsquigarrow/, unicode: "\u2B33" }, { tex: /\\longmapsfrom/, unicode: "\u27FB" }, { tex: /\\Longmapsfrom/, unicode: "\u27FD" }, { tex: /\\longmapsto/, unicode: "\u27FC" }, { tex: /\\Longmapsto/, unicode: "\u27FE" }, { tex: /\\longrightarrow/, unicode: "\u27F6" }, { tex: /\\Longrightarrow/, unicode: "\u27F9" }, { tex: /\\looparrowleft/, unicode: "\u21AB" }, { tex: /\\looparrowright/, unicode: "\u21AC" }, { tex: /\\lowint/, unicode: "\u2A1C" }, { tex: /\\lozengeminus/, unicode: "\u27E0" }, { tex: /\\lozenge/, unicode: "\u25CA" }, { tex: /\\lparenextender/, unicode: "\u239C" }, { tex: /\\Lparengtr/, unicode: "\u2995" }, { tex: /\\lparenlend/, unicode: "\u239D" }, { tex: /\\lparenuend/, unicode: "\u239B" }, { tex: /\\lrblacktriangle/, unicode: "\u25E2" }, { tex: /\\lrcorner/, unicode: "\u231F" }, { tex: /\\lrtriangleeq/, unicode: "\u29E1" }, { tex: /\\lrtriangle/, unicode: "\u25FF" }, { tex: /\\lsqhook/, unicode: "\u2ACD" }, { tex: /\\ltlarr/, unicode: "\u2976" }, { tex: /\\ltquest/, unicode: "\u2A7B" }, { tex: /\\lvboxline/, unicode: "\u23B8" }, { tex: /\\lvzigzag/, unicode: "\u29D8" }, { tex: /\\Lvzigzag/, unicode: "\u29DA" }, { tex: /\\MapsDown/, unicode: "\u21A7" }, { tex: /\\mapsfrom/, unicode: "\u21A4" }, { tex: /\\Mapsfrom/, unicode: "\u2906" }, { tex: /\\Mapsto/, unicode: "\u2907" }, { tex: /\\mbfDigamma/, unicode: "\u{1D7CA}" }, { tex: /\\mbfdigamma/, unicode: "\u{1D7CB}" }, { tex: /\\mdblkdiamond/, unicode: "\u2B25" }, { tex: /\\mdblklozenge/, unicode: "\u2B27" }, { tex: /\\mdsmblksquare/, unicode: "\u25FE" }, { tex: /\\mdsmwhtcircle/, unicode: "\u26AC" }, { tex: /\\mdsmwhtsquare/, unicode: "\u25FD" }, { tex: /\\mdwhtdiamond/, unicode: "\u2B26" }, { tex: /\\mdwhtlozenge/, unicode: "\u2B28" }, { tex: /\\measangledltosw/, unicode: "\u29AF" }, { tex: /\\measangledrtose/, unicode: "\u29AE" }, { tex: /\\measangleldtosw/, unicode: "\u29AB" }, { tex: /\\measanglelutonw/, unicode: "\u29A9" }, { tex: /\\measanglerdtose/, unicode: "\u29AA" }, { tex: /\\measanglerutone/, unicode: "\u29A8" }, { tex: /\\measangleultonw/, unicode: "\u29AD" }, { tex: /\\measangleurtone/, unicode: "\u29AC" }, { tex: /\\measeq/, unicode: "\u225E" }, { tex: /\\measuredangleleft/, unicode: "\u299B" }, { tex: /\\measuredangle/, unicode: "\u2221" }, { tex: /\\medblackstar/, unicode: "\u2B51" }, { tex: /\\medbullet/, unicode: "\u26AB" }, { tex: /\\medcirc/, unicode: "\u26AA" }, { tex: /\\medwhitestar/, unicode: "\u2B50" }, { tex: /\\mercury/, unicode: "\u263F" }, { tex: /\\midbarvee/, unicode: "\u2A5D" }, { tex: /\\midbarwedge/, unicode: "\u2A5C" }, { tex: /\\midcir/, unicode: "\u2AF0" }, { tex: /\\minusfdots/, unicode: "\u2A2B" }, { tex: /\\minusrdots/, unicode: "\u2A2C" }, { tex: /\\mkern1mu/, unicode: "\u200A" }, { tex: /\\:|\\mkern4mu/, unicode: "\u205F" }, { tex: /\\modtwosum/, unicode: "\u2A0A" }, { tex: /\\multimapboth/, unicode: "\u29DF" }, { tex: /\\multimapinv/, unicode: "\u27DC" }, { tex: /\\multimap/, unicode: "\u22B8" }, { tex: /\\natural/, unicode: "\u266E" }, { tex: /\\nearrow/, unicode: "\u2197" }, { tex: /\\Nearrow/, unicode: "\u21D7" }, { tex: /\\neovnwarrow/, unicode: "\u2931" }, { tex: /\\neovsearrow/, unicode: "\u292E" }, { tex: /\\neptune/, unicode: "\u2646" }, { tex: /\\NestedGreaterGreater/, unicode: "\u2AA2" }, { tex: /\\NestedLessLess/, unicode: "\u2AA1" }, { tex: /\\neswarrow/, unicode: "\u2922" }, { tex: /\\nexists/, unicode: "\u2204" }, { tex: /\\nHdownarrow/, unicode: "\u21DF" }, { tex: /\\nHuparrow/, unicode: "\u21DE" }, { tex: /\\nhVvert/, unicode: "\u2AF5" }, { tex: /\\nleftarrow/, unicode: "\u219A" }, { tex: /\\nLeftarrow/, unicode: "\u21CD" }, { tex: /\\nleftrightarrow/, unicode: "\u21AE" }, { tex: /\\nLeftrightarrow/, unicode: "\u21CE" }, { tex: /\\nolinebreak/, unicode: "\u2060" }, { tex: /\\not\\approx/, unicode: "\u2249" }, { tex: /\\notbackslash/, unicode: "\u2340" }, { tex: /\\not\\cong/, unicode: "\u2247" }, { tex: /\\not\\equiv/, unicode: "\u2262" }, { tex: /\\not\\geq/, unicode: "\u2271" }, { tex: /\\notgreaterless/, unicode: "\u2279" }, { tex: /\\not\\in/, unicode: "\u2209" }, { tex: /\\not\\kern-0\.3em\\times/, unicode: "\u226D" }, { tex: /\\not\\leq/, unicode: "\u2270" }, { tex: /\\notlessgreater/, unicode: "\u2278" }, { tex: /\\not\\ni/, unicode: "\u220C" }, { tex: /\\not\\prec/, unicode: "\u2280" }, { tex: /\\not\\simeq/, unicode: "\u2244" }, { tex: /\\not\\sim/, unicode: "\u2241" }, { tex: /\\notslash/, unicode: "\u233F" }, { tex: /\\not\\sqsubseteq/, unicode: "\u22E2" }, { tex: /\\not\\sqsupseteq/, unicode: "\u22E3" }, { tex: /\\not\\subseteq/, unicode: "\u2288" }, { tex: /\\not\\subset/, unicode: "\u2284" }, { tex: /\\not\\succ/, unicode: "\u2281" }, { tex: /\\not\\supseteq/, unicode: "\u2289" }, { tex: /\\not\\supset/, unicode: "\u2285" }, { tex: /\\not =/, unicode: "\u2260" }, { tex: /\\nparallel/, unicode: "\u2226" }, { tex: /\\npolint/, unicode: "\u2A14" }, { tex: /\\npreceq/, unicode: "\u22E0" }, { tex: /\\nrightarrow/, unicode: "\u219B" }, { tex: /\\nRightarrow/, unicode: "\u21CF" }, { tex: /\\nsucceq/, unicode: "\u22E1" }, { tex: /\\ntrianglelefteq/, unicode: "\u22EC" }, { tex: /\\ntriangleleft/, unicode: "\u22EA" }, { tex: /\\ntrianglerighteq/, unicode: "\u22ED" }, { tex: /\\ntriangleright/, unicode: "\u22EB" }, { tex: /\\nvdash/, unicode: "\u22AC" }, { tex: /\\nvDash/, unicode: "\u22AD" }, { tex: /\\nVdash/, unicode: "\u22AE" }, { tex: /\\nVDash/, unicode: "\u22AF" }, { tex: /\\nvinfty/, unicode: "\u29DE" }, { tex: /\\nvleftarrowtail/, unicode: "\u2B39" }, { tex: /\\nVleftarrowtail/, unicode: "\u2B3A" }, { tex: /\\nvleftarrow/, unicode: "\u21F7" }, { tex: /\\nVleftarrow/, unicode: "\u21FA" }, { tex: /\\nvLeftarrow/, unicode: "\u2902" }, { tex: /\\nvleftrightarrow/, unicode: "\u21F9" }, { tex: /\\nVleftrightarrow/, unicode: "\u21FC" }, { tex: /\\nvLeftrightarrow/, unicode: "\u2904" }, { tex: /\\nvRightarrow/, unicode: "\u2903" }, { tex: /\\nvtwoheadleftarrowtail/, unicode: "\u2B3C" }, { tex: /\\nVtwoheadleftarrowtail/, unicode: "\u2B3D" }, { tex: /\\nvtwoheadleftarrow/, unicode: "\u2B34" }, { tex: /\\nVtwoheadleftarrow/, unicode: "\u2B35" }, { tex: /\\nvtwoheadrightarrowtail/, unicode: "\u2917" }, { tex: /\\nVtwoheadrightarrowtail/, unicode: "\u2918" }, { tex: /\\nVtwoheadrightarrow/, unicode: "\u2901" }, { tex: /\\nwarrow/, unicode: "\u2196" }, { tex: /\\Nwarrow/, unicode: "\u21D6" }, { tex: /\\nwovnearrow/, unicode: "\u2932" }, { tex: /\\nwsearrow/, unicode: "\u2921" }, { tex: /\\obrbrak/, unicode: "\u23E0" }, { tex: /\\ocommatopright/, unicode: "\u0315" }, { tex: /\\odotslashdot/, unicode: "\u29BC" }, { tex: /\\olcross/, unicode: "\u29BB" }, { tex: /\\ominus/, unicode: "\u2296" }, { tex: /\{\\'\{\}O\}|\\'\{\}O/, unicode: "\u038C" }, { tex: /\\openbracketleft/, unicode: "\u301A" }, { tex: /\\openbracketright/, unicode: "\u301B" }, { tex: /\\original/, unicode: "\u22B6" }, { tex: /\\oslash/, unicode: "\u2298" }, { tex: /\\otimeshat/, unicode: "\u2A36" }, { tex: /\\otimes/, unicode: "\u2297" }, { tex: /\\Otimes/, unicode: "\u2A37" }, { tex: /\\oturnedcomma/, unicode: "\u0312" }, { tex: /\\overbrace/, unicode: "\u23DE" }, { tex: /\\overbracket/, unicode: "\u23B4" }, { tex: /\\overleftrightarrow/, unicode: "\u20E1" }, { tex: /\\overline/, unicode: "\u0305" }, { tex: /\\overparen/, unicode: "\u23DC" }, { tex: /\\ovhook/, unicode: "\u0309" }, { tex: /\\parallelogramblack/, unicode: "\u25B0" }, { tex: /\\parallel/, unicode: "\u2225" }, { tex: /\\parsim/, unicode: "\u2AF3" }, { tex: /\\partialmeetcontraction/, unicode: "\u2AA3" }, { tex: /\\partial/, unicode: "\u2202" }, { tex: /\\pentagonblack/, unicode: "\u2B1F" }, { tex: /\\pentagon/, unicode: "\u2B20" }, { tex: /\\perspcorrespond/, unicode: "\u2306" }, { tex: /\\Pi|\\P\{i\}/, unicode: "\u03A0" }, { tex: /\\Pisymbol\{ppi020\}\{105\}/, unicode: "\u2A9E" }, { tex: /\\Pisymbol\{ppi020\}\{117\}/, unicode: "\u2A9D" }, { tex: /\\Pisymbol\{ppi022\}\{87\}/, unicode: "\u03D0" }, { tex: /\\pitchfork/, unicode: "\u22D4" }, { tex: /\\Planckconst/, unicode: "\u210E" }, { tex: /\\pluseqq/, unicode: "\u2A72" }, { tex: /\\plushat/, unicode: "\u2A23" }, { tex: /\\plussim/, unicode: "\u2A26" }, { tex: /\\plussubtwo/, unicode: "\u2A27" }, { tex: /\\plustrif/, unicode: "\u2A28" }, { tex: /\\pointint/, unicode: "\u2A15" }, { tex: /\\postalmark/, unicode: "\u3012" }, { tex: /\\precapprox/, unicode: "\u227E" }, { tex: /\\preccurlyeq/, unicode: "\u227C" }, { tex: /\\precedesnotsimilar/, unicode: "\u22E8" }, { tex: /\\preceqq/, unicode: "\u2AB3" }, { tex: /\\preceq/, unicode: "\u2AAF" }, { tex: /\\precnapprox/, unicode: "\u2AB9" }, { tex: /\\precneqq/, unicode: "\u2AB5" }, { tex: /\\precneq/, unicode: "\u2AB1" }, { tex: /\\profline/, unicode: "\u2312" }, { tex: /\\profsurf/, unicode: "\u2313" }, { tex: /\\PropertyLine/, unicode: "\u214A" }, { tex: /\\propto/, unicode: "\u221D" }, { tex: /\\prurel/, unicode: "\u22B0" }, { tex: /\\pullback/, unicode: "\u27D3" }, { tex: /\\pushout/, unicode: "\u27D4" }, { tex: /\\quarternote/, unicode: "\u2669" }, { tex: /\\Question/, unicode: "\u2047" }, { tex: /\\radiation/, unicode: "\u2622" }, { tex: /\\rangledot/, unicode: "\u2992" }, { tex: /\\rangledownzigzagarrow/, unicode: "\u237C" }, { tex: /\\rblkbrbrak/, unicode: "\u2998" }, { tex: /\\rbracelend/, unicode: "\u23AD" }, { tex: /\\rbracemid/, unicode: "\u23AC" }, { tex: /\\rbraceuend/, unicode: "\u23AB" }, { tex: /\\rbrace/, unicode: "\\}" }, { tex: /\\rBrace/, unicode: "\u2984" }, { tex: /\\rbrackextender/, unicode: "\u23A5" }, { tex: /\\rbracklend/, unicode: "\u23A6" }, { tex: /\\rbracklrtick/, unicode: "\u298E" }, { tex: /\\rbrackubar/, unicode: "\u298C" }, { tex: /\\rbrackuend/, unicode: "\u23A4" }, { tex: /\\rbrackurtick/, unicode: "\u2990" }, { tex: /\\rbrbrak/, unicode: "\u2773" }, { tex: /\\Rbrbrak/, unicode: "\u27ED" }, { tex: /\\rcurvyangle/, unicode: "\u29FD" }, { tex: /\\rdiagovfdiag/, unicode: "\u292B" }, { tex: /\\rdiagovsearrow/, unicode: "\u2930" }, { tex: /\\recorder/, unicode: "\u2315" }, { tex: /\\recycle/, unicode: "\u267B" }, { tex: /\\revangleubar/, unicode: "\u29A5" }, { tex: /\\revangle/, unicode: "\u29A3" }, { tex: /\\revemptyset/, unicode: "\u29B0" }, { tex: /\\ReverseUpEquilibrium/, unicode: "\u296F" }, { tex: /\\revnmid/, unicode: "\u2AEE" }, { tex: /\\rfbowtie/, unicode: "\u29D2" }, { tex: /\\rftimes/, unicode: "\u29D5" }, { tex: /\\rgroup/, unicode: "\u27EF" }, { tex: /\\rightanglearc/, unicode: "\u22BE" }, { tex: /\\rightanglemdot/, unicode: "\u299D" }, { tex: /\\rightangle/, unicode: "\u221F" }, { tex: /\\rightarrowapprox/, unicode: "\u2975" }, { tex: /\\rightarrowbackapprox/, unicode: "\u2B48" }, { tex: /\\RightArrowBar/, unicode: "\u21E5" }, { tex: /\\rightarrowbsimilar/, unicode: "\u2B4C" }, { tex: /\\rightarrowdiamond/, unicode: "\u291E" }, { tex: /\\rightarrowgtr/, unicode: "\u2B43" }, { tex: /\\rightarrowonoplus/, unicode: "\u27F4" }, { tex: /\\rightarrowplus/, unicode: "\u2945" }, { tex: /\\rightarrowsimilar/, unicode: "\u2974" }, { tex: /\\rightarrowsupset/, unicode: "\u2B44" }, { tex: /\\rightarrowtail/, unicode: "\u21A3" }, { tex: /\\rightarrowtriangle/, unicode: "\u21FE" }, { tex: /\\rightarrow/, unicode: "\u2192" }, { tex: /\\Rightarrow/, unicode: "\u21D2" }, { tex: /\\rightbarharpoon/, unicode: "\u296C" }, { tex: /\\rightbkarrow/, unicode: "\u290D" }, { tex: /\\rightdbltail/, unicode: "\u291C" }, { tex: /\\rightdotarrow/, unicode: "\u2911" }, { tex: /\\RightDownTeeVector/, unicode: "\u295D" }, { tex: /\\RightDownVectorBar/, unicode: "\u2955" }, { tex: /\\rightharpoondown/, unicode: "\u21C1" }, { tex: /\\rightharpoonup/, unicode: "\u21C0" }, { tex: /\\rightleftarrows/, unicode: "\u21C4" }, { tex: /\\rightleftharpoonsdown/, unicode: "\u2969" }, { tex: /\\rightleftharpoons/, unicode: "\u21CC" }, { tex: /\\rightleftharpoonsup/, unicode: "\u2968" }, { tex: /\\rightleftharpoon/, unicode: "\u294B" }, { tex: /\\rightmoon/, unicode: "\u263D" }, { tex: /\\rightouterjoin/, unicode: "\u27D6" }, { tex: /\\rightpentagonblack/, unicode: "\u2B53" }, { tex: /\\rightpentagon/, unicode: "\u2B54" }, { tex: /\\rightrightarrows/, unicode: "\u21C9" }, { tex: /\\rightrightharpoons/, unicode: "\u2964" }, { tex: /\\rightslice/, unicode: "\u2AA7" }, { tex: /\\rightsquigarrow/, unicode: "\u21DD" }, { tex: /\\righttail/, unicode: "\u291A" }, { tex: /\\RightTeeVector/, unicode: "\u295B" }, { tex: /\\rightthreearrows/, unicode: "\u21F6" }, { tex: /\\rightthreetimes/, unicode: "\u22CC" }, { tex: /\\RightTriangleBar/, unicode: "\u29D0" }, { tex: /\\RightUpDownVector/, unicode: "\u294F" }, { tex: /\\RightUpTeeVector/, unicode: "\u295C" }, { tex: /\\RightUpVectorBar/, unicode: "\u2954" }, { tex: /\\RightVectorBar/, unicode: "\u2953" }, { tex: /\\rightwhitearrow/, unicode: "\u21E8" }, { tex: /\\ringplus/, unicode: "\u2A22" }, { tex: /\\risingdotseq/, unicode: "\u2253" }, { tex: /\\rmoustache/, unicode: "\u23B1" }, { tex: /\\RoundImplies/, unicode: "\u2970" }, { tex: /\\rparenextender/, unicode: "\u239F" }, { tex: /\\rparenlend/, unicode: "\u23A0" }, { tex: /\\Rparenless/, unicode: "\u2996" }, { tex: /\\rparenuend/, unicode: "\u239E" }, { tex: /\\rppolint/, unicode: "\u2A12" }, { tex: /\\rrbracket/, unicode: "\u27E7" }, { tex: /\\Rrightarrow/, unicode: "\u21DB" }, { tex: /\\RRightarrow/, unicode: "\u2B46" }, { tex: /\\rsolbar/, unicode: "\u29F7" }, { tex: /\\rsqhook/, unicode: "\u2ACE" }, { tex: /\\rtriltri/, unicode: "\u29CE" }, { tex: /\\rule\{1em\}\{1pt\}/, unicode: "\u2015" }, { tex: /\\RuleDelayed/, unicode: "\u29F4" }, { tex: /\\rvboxline/, unicode: "\u23B9" }, { tex: /\\rvzigzag/, unicode: "\u29D9" }, { tex: /\\Rvzigzag/, unicode: "\u29DB" }, { tex: /\\sagittarius/, unicode: "\u2650" }, { tex: /\\sansLmirrored/, unicode: "\u2143" }, { tex: /\\sansLturned/, unicode: "\u2142" }, { tex: /\\scorpio/, unicode: "\u264F" }, { tex: /\\scpolint/, unicode: "\u2A13" }, { tex: /\\scurel/, unicode: "\u22B1" }, { tex: /\\searrow/, unicode: "\u2198" }, { tex: /\\Searrow/, unicode: "\u21D8" }, { tex: /\\seovnearrow/, unicode: "\u292D" }, { tex: /\\setminus/, unicode: "\u2216" }, { tex: /\\shortdowntack/, unicode: "\u2ADF" }, { tex: /\\shortlefttack/, unicode: "\u2ADE" }, { tex: /\\shortuptack/, unicode: "\u2AE0" }, { tex: /\\shuffle/, unicode: "\u29E2" }, { tex: /\\similarleftarrow/, unicode: "\u2B49" }, { tex: /\\similarrightarrow/, unicode: "\u2972" }, { tex: /\\sim\\joinrel\\leadsto/, unicode: "\u27FF" }, { tex: /\\simminussim/, unicode: "\u2A6C" }, { tex: /\\simplus/, unicode: "\u2A24" }, { tex: /\\simrdots/, unicode: "\u2A6B" }, { tex: /\\sixteenthnote/, unicode: "\u266C" }, { tex: /\\smallin/, unicode: "\u220A" }, { tex: /\\smallni/, unicode: "\u220D" }, { tex: /\\smashtimes/, unicode: "\u2A33" }, { tex: /\\smblkdiamond/, unicode: "\u2B29" }, { tex: /\\smblklozenge/, unicode: "\u2B2A" }, { tex: /\\smeparsl/, unicode: "\u29E4" }, { tex: /\\smwhitestar/, unicode: "\u2B52" }, { tex: /\\smwhtcircle/, unicode: "\u25E6" }, { tex: /\\smwhtlozenge/, unicode: "\u2B2B" }, { tex: /\\smwhtsquare/, unicode: "\u25AB" }, { tex: /\\sphericalangle/, unicode: "\u2222" }, { tex: /\\sphericalangleup/, unicode: "\u29A1" }, { tex: /\\sqrint/, unicode: "\u2A16" }, { tex: /\\sqrt\[3\]/, unicode: "\u221B" }, { tex: /\\sqrt\[4\]/, unicode: "\u221C" }, { tex: /\\sqrtbottom/, unicode: "\u23B7" }, { tex: /\\sqsubseteq/, unicode: "\u2291" }, { tex: /\\sqsubsetneq/, unicode: "\u22E4" }, { tex: /\\sqsubset/, unicode: "\u228F" }, { tex: /\\sqsupseteq/, unicode: "\u2292" }, { tex: /\\sqsupset/, unicode: "\u2290" }, { tex: /\\squarebotblack/, unicode: "\u2B13" }, { tex: /\\squarecrossfill/, unicode: "\u25A9" }, { tex: /\\squarehfill/, unicode: "\u25A4" }, { tex: /\\squarehvfill/, unicode: "\u25A6" }, { tex: /\\squarellblack/, unicode: "\u2B15" }, { tex: /\\squarellquad/, unicode: "\u25F1" }, { tex: /\\squarelrquad/, unicode: "\u25F2" }, { tex: /\\squareneswfill/, unicode: "\u25A8" }, { tex: /\\squarenwsefill/, unicode: "\u25A7" }, { tex: /\\squaretopblack/, unicode: "\u2B12" }, { tex: /\\squareulblack/, unicode: "\u25E9" }, { tex: /\\squareulquad/, unicode: "\u25F0" }, { tex: /\\squareurblack/, unicode: "\u2B14" }, { tex: /\\squareurquad/, unicode: "\u25F3" }, { tex: /\\squarevfill/, unicode: "\u25A5" }, { tex: /\\squoval/, unicode: "\u25A2" }, { tex: /\\stackrel\{\*\}\{=\}/, unicode: "\u2A6E" }, { tex: /\\starequal/, unicode: "\u225B" }, { tex: /\\steaming/, unicode: "\u2615" }, { tex: /\\Stigma/, unicode: "\u03DA" }, { tex: /\\stigma/, unicode: "\u03DB" }, { tex: /\\subedot/, unicode: "\u2AC3" }, { tex: /\\submult/, unicode: "\u2AC1" }, { tex: /\\subrarr/, unicode: "\u2979" }, { tex: /\\subsetapprox/, unicode: "\u2AC9" }, { tex: /\\subsetcirc/, unicode: "\u27C3" }, { tex: /\\subsetdot/, unicode: "\u2ABD" }, { tex: /\\subseteqq/, unicode: "\u2AC5" }, { tex: /\\subseteq/, unicode: "\u2286" }, { tex: /\\subsetneqq/, unicode: "\u2ACB" }, { tex: /\\subsetneq/, unicode: "\u228A" }, { tex: /\\subsetplus/, unicode: "\u2ABF" }, { tex: /\\subset/, unicode: "\u2282" }, { tex: /\\subsim/, unicode: "\u2AC7" }, { tex: /\\subsub/, unicode: "\u2AD5" }, { tex: /\\subsup/, unicode: "\u2AD3" }, { tex: /\\succapprox/, unicode: "\u227F" }, { tex: /\\succcurlyeq/, unicode: "\u227D" }, { tex: /\\succeqq/, unicode: "\u2AB4" }, { tex: /\\succeq/, unicode: "\u2AB0" }, { tex: /\\succnapprox/, unicode: "\u2ABA" }, { tex: /\\succneqq/, unicode: "\u2AB6" }, { tex: /\\succneq/, unicode: "\u2AB2" }, { tex: /\\succnsim/, unicode: "\u22E9" }, { tex: /\\sumbottom/, unicode: "\u23B3" }, { tex: /\\sumint/, unicode: "\u2A0B" }, { tex: /\\supdsub/, unicode: "\u2AD8" }, { tex: /\\supedot/, unicode: "\u2AC4" }, { tex: /\\suphsol/, unicode: "\u27C9" }, { tex: /\\suphsub/, unicode: "\u2AD7" }, { tex: /\\suplarr/, unicode: "\u297B" }, { tex: /\\supmult/, unicode: "\u2AC2" }, { tex: /\\supsetapprox/, unicode: "\u2ACA" }, { tex: /\\supsetcirc/, unicode: "\u27C4" }, { tex: /\\supsetdot/, unicode: "\u2ABE" }, { tex: /\\supseteqq/, unicode: "\u2AC6" }, { tex: /\\supseteq/, unicode: "\u2287" }, { tex: /\\supsetneqq/, unicode: "\u2ACC" }, { tex: /\\supsetneq/, unicode: "\u228B" }, { tex: /\\supsetplus/, unicode: "\u2AC0" }, { tex: /\\supset/, unicode: "\u2283" }, { tex: /\\supsim/, unicode: "\u2AC8" }, { tex: /\\supsub/, unicode: "\u2AD4" }, { tex: /\\supsup/, unicode: "\u2AD6" }, { tex: /\\surfintegral/, unicode: "\u222F" }, { tex: /\\swarrow/, unicode: "\u2199" }, { tex: /\\Swarrow/, unicode: "\u21D9" }, { tex: /\\talloblong/, unicode: "\u2AFE" }, { tex: /\\textasciiacute/, unicode: "\xB4" }, { tex: /\\textasciibreve/, unicode: "\u02D8" }, { tex: /\\textasciicaron/, unicode: "\u02C7" }, { tex: /\\textasciidieresis/, unicode: "\xA8" }, { tex: /\\textasciigrave/, unicode: "`" }, { tex: /\\textasciimacron/, unicode: "\xAF" }, { tex: /\\textbrokenbar/, unicode: "\xA6" }, { tex: /\\textbullet/, unicode: "\u2022" }, { tex: /\\textcent/, unicode: "\xA2" }, { tex: /\\textcopyright/, unicode: "\xA9" }, { tex: /\\textcurrency/, unicode: "\xA4" }, { tex: /\\textdaggerdbl/, unicode: "\u2021" }, { tex: /\\textdagger/, unicode: "\u2020" }, { tex: /\\textdollar/, unicode: "\\$" }, { tex: /\\textdoublepipe/, unicode: "\u01C2" }, { tex: /\\textemdash/, unicode: "\u2014" }, { tex: /\\textendash/, unicode: "\u2013" }, { tex: /\\textexclamdown/, unicode: "\xA1" }, { tex: /\\textfrac\{1\}\{3\}/, unicode: "\u2153" }, { tex: /\\textfrac\{1\}\{5\}/, unicode: "\u2155" }, { tex: /\\textfrac\{1\}\{6\}/, unicode: "\u2159" }, { tex: /\\textfrac\{1\}\{8\}/, unicode: "\u215B" }, { tex: /\\textfrac\{2\}\{3\}/, unicode: "\u2154" }, { tex: /\\textfrac\{2\}\{5\}/, unicode: "\u2156" }, { tex: /\\textfrac\{3\}\{5\}/, unicode: "\u2157" }, { tex: /\\textfrac\{3\}\{8\}/, unicode: "\u215C" }, { tex: /\\textfrac\{4\}\{5\}/, unicode: "\u2158" }, { tex: /\\textfrac\{5\}\{6\}/, unicode: "\u215A" }, { tex: /\\textfrac\{5\}\{8\}/, unicode: "\u215D" }, { tex: /\\textfrac\{7\}\{8\}/, unicode: "\u215E" }, { tex: /\\texthvlig/, unicode: "\u0195" }, { tex: /\\textmu/, unicode: "\u03BC" }, { tex: /\\textnrleg/, unicode: "\u019E" }, { tex: /\\textonehalf/, unicode: "\xBD" }, { tex: /\\textonequarter/, unicode: "\xBC" }, { tex: /\\textordfeminine/, unicode: "\xAA" }, { tex: /\\textordmasculine/, unicode: "\xBA" }, { tex: /\\textparagraph/, unicode: "\xB6" }, { tex: /\\textperiodcentered/, unicode: "\u02D9" }, { tex: /\\textpertenthousand/, unicode: "\u2031" }, { tex: /\\textperthousand/, unicode: "\u2030" }, { tex: /\\textphi/, unicode: "\u0278" }, { tex: /\\textquestiondown/, unicode: "\xBF" }, { tex: /\\textquotedblleft/, unicode: "\u201C" }, { tex: /\\textquotedblright/, unicode: "\u201D" }, { tex: /\\textquotesingle/, unicode: "'" }, { tex: /\\textregistered/, unicode: "\xAE" }, { tex: /\\textsection/, unicode: "\xA7" }, { tex: /\\textsterling/, unicode: "\xA3" }, { tex: /\\texttheta/, unicode: "\u03B8" }, { tex: /\\textTheta/, unicode: "\u03F4" }, { tex: /\\textthreequarters/, unicode: "\xBE" }, { tex: /\\texttildelow/, unicode: "\u02DC" }, { tex: /\\texttimes/, unicode: "\xD7" }, { tex: /\\texttrademark/, unicode: "\u2122" }, { tex: /\\textturnk/, unicode: "\u029E" }, { tex: /\\textvartheta/, unicode: "\u03D1" }, { tex: /\\textvisiblespace/, unicode: "\u2423" }, { tex: /\\textyen/, unicode: "\xA5" }, { tex: /\\therefore/, unicode: "\u2234" }, { tex: /\\thermod/, unicode: "\u29E7" }, { tex: /\\threedangle/, unicode: "\u27C0" }, { tex: /\\threeunderdot/, unicode: "\u20E8" }, { tex: /\\TH|\\T\{H\}/, unicode: "\xDE" }, { tex: /\\tieinfty/, unicode: "\u29DD" }, { tex: /\\tildetrpl/, unicode: "\u224B" }, { tex: /\\timesbar/, unicode: "\u2A31" }, { tex: /\\tminus/, unicode: "\u29FF" }, { tex: /\\tone\{11\}/, unicode: "\u02E9" }, { tex: /\\tone\{22\}/, unicode: "\u02E8" }, { tex: /\\tone\{33\}/, unicode: "\u02E7" }, { tex: /\\tone\{44\}/, unicode: "\u02E6" }, { tex: /\\tone\{55\}/, unicode: "\u02E5" }, { tex: /\\topcir/, unicode: "\u2AF1" }, { tex: /\\topfork/, unicode: "\u2ADA" }, { tex: /\\topsemicircle/, unicode: "\u25E0" }, { tex: /\\trapezium/, unicode: "\u23E2" }, { tex: /\\trianglecdot/, unicode: "\u25EC" }, { tex: /\\triangledown/, unicode: "\u25BF" }, { tex: /\\triangleleftblack/, unicode: "\u25ED" }, { tex: /\\trianglelefteq/, unicode: "\u22B4" }, { tex: /\\triangleleft/, unicode: "\u25C3" }, { tex: /\\triangleminus/, unicode: "\u2A3A" }, { tex: /\\triangleplus/, unicode: "\u2A39" }, { tex: /\\triangleq/, unicode: "\u225C" }, { tex: /\\trianglerightblack/, unicode: "\u25EE" }, { tex: /\\trianglerighteq/, unicode: "\u22B5" }, { tex: /\\triangleright/, unicode: "\u25B9" }, { tex: /\\triangleserifs/, unicode: "\u29CD" }, { tex: /\\triangles/, unicode: "\u29CC" }, { tex: /\\triangletimes/, unicode: "\u2A3B" }, { tex: /\\tripleplus/, unicode: "\u29FB" }, { tex: /\\trslash/, unicode: "\u2AFB" }, { tex: /\\truestate/, unicode: "\u22A7" }, { tex: /\\turnangle/, unicode: "\u29A2" }, { tex: /\\turnednot/, unicode: "\u2319" }, { tex: /\\twocaps/, unicode: "\u2A4B" }, { tex: /\\twocups/, unicode: "\u2A4A" }, { tex: /\\twoheaddownarrow/, unicode: "\u21A1" }, { tex: /\\twoheadleftarrowtail/, unicode: "\u2B3B" }, { tex: /\\twoheadleftarrow/, unicode: "\u219E" }, { tex: /\\twoheadleftdbkarrow/, unicode: "\u2B37" }, { tex: /\\twoheadmapsfrom/, unicode: "\u2B36" }, { tex: /\\twoheadrightarrow/, unicode: "\u21A0" }, { tex: /\\twoheaduparrowcircle/, unicode: "\u2949" }, { tex: /\\twoheaduparrow/, unicode: "\u219F" }, { tex: /\\twolowline/, unicode: "\u2017" }, { tex: /\\twonotes/, unicode: "\u266B" }, { tex: /\\typecolon/, unicode: "\u2982" }, { tex: /\\ubrbrak/, unicode: "\u23E1" }, { tex: /\\ulblacktriangle/, unicode: "\u25E4" }, { tex: /\\ulcorner/, unicode: "\u231C" }, { tex: /\\ultriangle/, unicode: "\u25F8" }, { tex: /\\uminus/, unicode: "\u2A41" }, { tex: /\\underbar/, unicode: "\u0331" }, { tex: /\\underbrace/, unicode: "\u23DF" }, { tex: /\\underbracket/, unicode: "\u23B5" }, { tex: /\\underleftarrow/, unicode: "\u20EE" }, { tex: /\\underleftharpoondown/, unicode: "\u20ED" }, { tex: /\\underline/, unicode: "\u0332" }, { tex: /\\underparen/, unicode: "\u23DD" }, { tex: /\\underrightarrow/, unicode: "\u20EF" }, { tex: /\\underrightharpoondown/, unicode: "\u20EC" }, { tex: /\{\{\/\}\\!\\!\{\/\}\}/, unicode: "\u2AFD" }, { tex: /\\uparrowbarred/, unicode: "\u2909" }, { tex: /\\UpArrowBar/, unicode: "\u2912" }, { tex: /\\uparrowoncircle/, unicode: "\u29BD" }, { tex: /\\uparrow/, unicode: "\u2191" }, { tex: /\\Uparrow/, unicode: "\u21D1" }, { tex: /\\updasharrow/, unicode: "\u21E1" }, { tex: /\\updownarrowbar/, unicode: "\u21A8" }, { tex: /\\updownarrow/, unicode: "\u2195" }, { tex: /\\Updownarrow/, unicode: "\u21D5" }, { tex: /\\updownharpoonleftright/, unicode: "\u294D" }, { tex: /\\updownharpoonrightleft/, unicode: "\u294C" }, { tex: /\\UpEquilibrium/, unicode: "\u296E" }, { tex: /\\upfishtail/, unicode: "\u297E" }, { tex: /\\upharpoonleft/, unicode: "\u21BF" }, { tex: /\\upharpoonright/, unicode: "\u21BE" }, { tex: /\\uprightcurvearrow/, unicode: "\u2934" }, { tex: /\\Upsilon/, unicode: "\u03A5" }, { tex: /\\upsilon/, unicode: "\u03C5" }, { tex: /\\upslopeellipsis/, unicode: "\u22F0" }, { tex: /\\upuparrows/, unicode: "\u21C8" }, { tex: /\\upupharpoons/, unicode: "\u2963" }, { tex: /\\upwhitearrow/, unicode: "\u21E7" }, { tex: /\\urblacktriangle/, unicode: "\u25E5" }, { tex: /\\urcorner/, unicode: "\u231D" }, { tex: /\\urtriangle/, unicode: "\u25F9" }, { tex: /\\utilde/, unicode: "\u0330" }, { tex: /\\UUparrow/, unicode: "\u27F0" }, { tex: /\\Uuparrow/, unicode: "\u290A" }, { tex: /\\varcarriagereturn/, unicode: "\u23CE" }, { tex: /\\varclubsuit/, unicode: "\u2667" }, { tex: /\\varepsilon/, unicode: "\u025B" }, { tex: /\\varhexagonblack/, unicode: "\u2B22" }, { tex: /\\varhexagonlrbonds/, unicode: "\u232C" }, { tex: /\\varhexagon/, unicode: "\u2B21" }, { tex: /\\varisins/, unicode: "\u22F3" }, { tex: /\\varkappa/, unicode: "\u03F0" }, { tex: /\\varlrtriangle/, unicode: "\u22BF" }, { tex: /\\varniobar/, unicode: "\u22FD" }, { tex: /\\varnothing/, unicode: "\u2205" }, { tex: /\\varphi/, unicode: "\u03C6" }, { tex: /\\varprod/, unicode: "\u2A09" }, { tex: /\\varrho/, unicode: "\u03F1" }, { tex: /\\varsigma/, unicode: "\u03C2" }, { tex: /\\varspadesuit/, unicode: "\u2664" }, { tex: /\\vartriangleleft/, unicode: "\u22B2" }, { tex: /\\vartriangleright/, unicode: "\u22B3" }, { tex: /\\vartriangle/, unicode: "\u25B5" }, { tex: /\\varVdash/, unicode: "\u2AE6" }, { tex: /\\varveebar/, unicode: "\u2A61" }, { tex: /\\vbraceextender/, unicode: "\u23AA" }, { tex: /\\vDdash/, unicode: "\u2AE2" }, { tex: /\\veebar/, unicode: "\u22BB" }, { tex: /\\veemidvert/, unicode: "\u2A5B" }, { tex: /\\veeodot/, unicode: "\u2A52" }, { tex: /\\veeonwedge/, unicode: "\u2A59" }, { tex: /\\vertoverlay/, unicode: "\u20D2" }, { tex: /\\verymuchgreater/, unicode: "\u22D9" }, { tex: /\\verymuchless/, unicode: "\u22D8" }, { tex: /\\viewdata/, unicode: "\u2317" }, { tex: /\\vlongdash/, unicode: "\u27DD" }, { tex: /\\volintegral/, unicode: "\u2230" }, { tex: /\\vphantom\\{/, unicode: "" }, { tex: /\\vrectangleblack/, unicode: "\u25AE" }, { tex: /\\Vvdash/, unicode: "\u22AA" }, { tex: /\\vysmblksquare/, unicode: "\u2B1D" }, { tex: /\\vysmwhtsquare/, unicode: "\u2B1E" }, { tex: /\\vzigzag/, unicode: "\u299A" }, { tex: /\\warning/, unicode: "\u26A0" }, { tex: /\\wasylozenge/, unicode: "\u2311" }, { tex: /\\wedgedot/, unicode: "\u27D1" }, { tex: /\\wedgedoublebar/, unicode: "\u2A60" }, { tex: /\\wedgemidvert/, unicode: "\u2A5A" }, { tex: /\\wedgeodot/, unicode: "\u2A51" }, { tex: /\\whitearrowupfrombar/, unicode: "\u21EA" }, { tex: /\\whiteinwhitetriangle/, unicode: "\u27C1" }, { tex: /\\whitepointerleft/, unicode: "\u25C5" }, { tex: /\\whitepointerright/, unicode: "\u25BB" }, { tex: /\\whitesquaretickleft/, unicode: "\u27E4" }, { tex: /\\whitesquaretickright/, unicode: "\u27E5" }, { tex: /\\whthorzoval/, unicode: "\u2B2D" }, { tex: /\\whtvertoval/, unicode: "\u2B2F" }, { tex: /\\wideangledown/, unicode: "\u29A6" }, { tex: /\\wideangleup/, unicode: "\u29A7" }, { tex: /\\widebridgeabove/, unicode: "\u20E9" }, { tex: /\\Xi|\\X\{i\}/, unicode: "\u039E" }, { tex: /\\yinyang/, unicode: "\u262F" }, { tex: /\\zproject/, unicode: "\u2A21" }, { tex: /\\circeq/, unicode: "\u2257" }, { tex: /\\OE|\\O\{E\}/, unicode: "\u0152" }, { tex: /\\NG|\\N\{G\}/, unicode: "\u014A" }, { tex: /\\eqcirc/, unicode: "\u2256" }, { tex: /\\lfloor/, unicode: "\u230A" }, { tex: /\\rfloor/, unicode: "\u230B" }, { tex: /\\invneg/, unicode: "\u2310" }, { tex: /\\niobar/, unicode: "\u22FE" }, { tex: /\\varnis/, unicode: "\u22FB" }, { tex: /\\invamp/, unicode: "\u214B" }, { tex: /\\inttop/, unicode: "\u2320" }, { tex: /\\isinvb/, unicode: "\u22F8" }, { tex: /\\langle/, unicode: "\u2329" }, { tex: /\\rangle/, unicode: "\u232A" }, { tex: /\\topbot/, unicode: "\u2336" }, { tex: /\\APLinv/, unicode: "\u2339" }, { tex: /\\MapsUp/, unicode: "\u21A5" }, { tex: /\\mapsto/, unicode: "\u21A6" }, { tex: /\\APLlog/, unicode: "\u235F" }, { tex: /\\daleth/, unicode: "\u2138" }, { tex: /\\sumtop/, unicode: "\u23B2" }, { tex: /\\diagup/, unicode: "\u2571" }, { tex: /\\square/, unicode: "\u25A1" }, { tex: /\\hslash/, unicode: "\u210F" }, { tex: /\\bumpeq/, unicode: "\u224F" }, { tex: /\\boxbar/, unicode: "\u25EB" }, { tex: /\\Square/, unicode: "\u2610" }, { tex: /\\danger/, unicode: "\u2621" }, { tex: /\\Bumpeq/, unicode: "\u224E" }, { tex: /\\ddddot/, unicode: "\u20DC" }, { tex: /\\smiley/, unicode: "\u263A" }, { tex: /\\eqless/, unicode: "\u22DC" }, { tex: /\\gtrdot/, unicode: "\u22D7" }, { tex: /\\Exclam/, unicode: "\u203C" }, { tex: /\\saturn/, unicode: "\u2644" }, { tex: /\\uranus/, unicode: "\u2645" }, { tex: /\\taurus/, unicode: "\u2649" }, { tex: /\\gemini/, unicode: "\u264A" }, { tex: /\\cancer/, unicode: "\u264B" }, { tex: /\\pisces/, unicode: "\u2653" }, { tex: /\\Supset/, unicode: "\u22D1" }, { tex: /\\Subset/, unicode: "\u22D0" }, { tex: /\\diceii/, unicode: "\u2681" }, { tex: /\\diceiv/, unicode: "\u2683" }, { tex: /\\dicevi/, unicode: "\u2685" }, { tex: /\\anchor/, unicode: "\u2693" }, { tex: /\\swords/, unicode: "\u2694" }, { tex: /\\DJ|\\D\{J\}/, unicode: "\u0110" }, { tex: /\\neuter/, unicode: "\u26B2" }, { tex: /\\veedot/, unicode: "\u27C7" }, { tex: /\\rtimes/, unicode: "\u22CA" }, { tex: /\\ltimes/, unicode: "\u22C9" }, { tex: /\\bowtie/, unicode: "\u22C8" }, { tex: /\\bigbot/, unicode: "\u27D8" }, { tex: /\\cirbot/, unicode: "\u27DF" }, { tex: /\\LaTeX/, unicode: "L$^A$T$_E$X" }, { tex: /\\delta/, unicode: "\u03B4" }, { tex: /\\image/, unicode: "\u22B7" }, { tex: /\\llarc/, unicode: "\u25DF" }, { tex: /\\simeq/, unicode: "\u2243" }, { tex: /\\eqdef/, unicode: "\u225D" }, { tex: /\\vBarv/, unicode: "\u2AE9" }, { tex: /\\ElzOr/, unicode: "\u2A54" }, { tex: /\\equiv/, unicode: "\u2261" }, { tex: /\\space/, unicode: " " }, { tex: /\\isins/, unicode: "\u22F4" }, { tex: /\\lnsim/, unicode: "\u22E6" }, { tex: /\\Elzxl/, unicode: "\u0335" }, { tex: /\\Theta/, unicode: "\u0398" }, { tex: /\\barin/, unicode: "\u22F6" }, { tex: /\\kappa/, unicode: "\u03BA" }, { tex: /\\lblot/, unicode: "\u2989" }, { tex: /\\rblot/, unicode: "\u298A" }, { tex: /\\frown/, unicode: "\u2322" }, { tex: /\\earth/, unicode: "\u2641" }, { tex: /\\Angle/, unicode: "\u299C" }, { tex: /\\Sqcup/, unicode: "\u2A4F" }, { tex: /\\Sqcap/, unicode: "\u2A4E" }, { tex: /\\nhpar/, unicode: "\u2AF2" }, { tex: /\\operp/, unicode: "\u29B9" }, { tex: /\\sigma/, unicode: "\u03C3" }, { tex: /\\csube/, unicode: "\u2AD1" }, { tex: /\\csupe/, unicode: "\u2AD2" }, { tex: /\\house/, unicode: "\u2302" }, { tex: /\\forks/, unicode: "\u2ADC" }, { tex: /\\Elzxh/, unicode: "\u0127" }, { tex: /\\strns/, unicode: "\u23E4" }, { tex: /\\eqgtr/, unicode: "\u22DD" }, { tex: /\\forkv/, unicode: "\u2AD9" }, { tex: /\\relax/, unicode: "" }, { tex: /\\amalg/, unicode: "\u2A3F" }, { tex: /\\infty/, unicode: "\u221E" }, { tex: /\\VDash/, unicode: "\u22AB" }, { tex: /\\fltns/, unicode: "\u23E5" }, { tex: /\\disin/, unicode: "\u22F2" }, { tex: /\\uplus/, unicode: "\u228E" }, { tex: /\\angle/, unicode: "\u2220" }, { tex: /\\pluto/, unicode: "\u2647" }, { tex: /\\Vdash/, unicode: "\u22A9" }, { tex: /\\cdots/, unicode: "\u22EF" }, { tex: /\\lceil/, unicode: "\u2308" }, { tex: /\\sqcap/, unicode: "\u2293" }, { tex: /\\smile/, unicode: "\u2323" }, { tex: /\\omega/, unicode: "\u03C9" }, { tex: /\\vdots/, unicode: "\u22EE" }, { tex: /\\arceq/, unicode: "\u2258" }, { tex: /\\dashv/, unicode: "\u22A3" }, { tex: /\\vdash/, unicode: "\u22A2" }, { tex: /\\skull/, unicode: "\u2620" }, { tex: /\\rceil/, unicode: "\u2309" }, { tex: /\\virgo/, unicode: "\u264D" }, { tex: /\\perps/, unicode: "\u2AE1" }, { tex: /\\zhide/, unicode: "\u29F9" }, { tex: /\\tplus/, unicode: "\u29FE" }, { tex: /\\ldots/, unicode: "\u2026" }, { tex: /\\zpipe/, unicode: "\u2A20" }, { tex: /\\dicei/, unicode: "\u2680" }, { tex: /\\venus/, unicode: "\u2640" }, { tex: /\\varpi/, unicode: "\u03D6" }, { tex: /\\Elzrh/, unicode: "\u0322" }, { tex: /\\Qoppa/, unicode: "\u03D8" }, { tex: /\\aries/, unicode: "\u2648" }, { tex: /\\upint/, unicode: "\u2A1B" }, { tex: /\\dddot/, unicode: "\u20DB" }, { tex: /\\sqcup/, unicode: "\u2294" }, { tex: /\\qoppa/, unicode: "\u03D9" }, { tex: /\\Koppa/, unicode: "\u03DE" }, { tex: /\\awint/, unicode: "\u2A11" }, { tex: /\\koppa/, unicode: "\u03DF" }, { tex: /\\Colon/, unicode: "\u2237" }, { tex: /\\gescc/, unicode: "\u2AA9" }, { tex: /\\oplus/, unicode: "\u2295" }, { tex: /\\asymp/, unicode: "\u224D" }, { tex: /\\isinE/, unicode: "\u22F9" }, { tex: /\\Elzrl/, unicode: "\u027C" }, { tex: /\\Sampi/, unicode: "\u03E0" }, { tex: /\\sampi/, unicode: "\u03E1" }, { tex: /\\doteq/, unicode: "\u2250" }, { tex: /\\slash/, unicode: "\u2215" }, { tex: /\\gnsim/, unicode: "\u22E7" }, { tex: /\\libra/, unicode: "\u264E" }, { tex: /\\gsiml/, unicode: "\u2A90" }, { tex: /\\wedge/, unicode: "\u2227" }, { tex: /\\dbend/, unicode: "\uFFFD" }, { tex: /\\dashV/, unicode: "\u2AE3" }, { tex: /\\Dashv/, unicode: "\u2AE4" }, { tex: /\\DashV/, unicode: "\u2AE5" }, { tex: /\\Sigma/, unicode: "\u03A3" }, { tex: /\\lsimg/, unicode: "\u2A8F" }, { tex: /\\gsime/, unicode: "\u2A8E" }, { tex: /\\lsime/, unicode: "\u2A8D" }, { tex: /\\Equiv/, unicode: "\u2263" }, { tex: /\\dicev/, unicode: "\u2684" }, { tex: /\\Gamma/, unicode: "\u0393" }, { tex: /\\gtcir/, unicode: "\u2A7A" }, { tex: /\\ltcir/, unicode: "\u2A79" }, { tex: /\\jmath/, unicode: "\u0237" }, { tex: /\\ularc/, unicode: "\u25DC" }, { tex: /\\gneqq/, unicode: "\u2269" }, { tex: /\\gimel/, unicode: "\u2137" }, { tex: /\\lneqq/, unicode: "\u2268" }, { tex: /\\Omega/, unicode: "\u03A9" }, { tex: /\\Equal/, unicode: "\u2A75" }, { tex: /\\aleph/, unicode: "\u2135" }, { tex: /\\nabla/, unicode: "\u2207" }, { tex: /\\lescc/, unicode: "\u2AA8" }, { tex: /\\simgE/, unicode: "\u2AA0" }, { tex: /\\sharp/, unicode: "\u266F" }, { tex: /\\imath/, unicode: "\u{1D6A4}" }, { tex: /\\simlE/, unicode: "\u2A9F" }, { tex: /\\Delta/, unicode: "\u0394" }, { tex: /\\urarc/, unicode: "\u25DD" }, { tex: /\\alpha/, unicode: "\u03B1" }, { tex: /\\gamma/, unicode: "\u03B3" }, { tex: /\\eqdot/, unicode: "\u2A66" }, { tex: /\\Euler/, unicode: "\u2107" }, { tex: /\\lrarc/, unicode: "\u25DE" }, { tex: /\\late/, unicode: "\u2AAD" }, { tex: /\\hash/, unicode: "\u22D5" }, { tex: /\\circ/, unicode: "\u2218" }, { tex: /\\Game/, unicode: "\u2141" }, { tex: /\\surd/, unicode: "\u221A" }, { tex: /\\Lbag/, unicode: "\u27C5" }, { tex: /\\beth/, unicode: "\u2136" }, { tex: /\\lnot/, unicode: "\xAC" }, { tex: /\\Finv/, unicode: "\u2132" }, { tex: /\\csub/, unicode: "\u2ACF" }, { tex: /\\csup/, unicode: "\u2AD0" }, { tex: /\\succ/, unicode: "\u227B" }, { tex: /\\prec/, unicode: "\u227A" }, { tex: /\\Vert/, unicode: "\u2016" }, { tex: /\\nmid/, unicode: "\u2224" }, { tex: /\\not</, unicode: "\u226E" }, { tex: /\\dlsh/, unicode: "\u21B2" }, { tex: /\\Barv/, unicode: "\u2AE7" }, { tex: /\\cdot/, unicode: "\xB7" }, { tex: /\\vBar/, unicode: "\u2AE8" }, { tex: /\\lang/, unicode: "\u27EA" }, { tex: /\\rang/, unicode: "\u27EB" }, { tex: /\\Zbar/, unicode: "\u01B5" }, { tex: /\\star/, unicode: "\u22C6" }, { tex: /\\psur/, unicode: "\u2900" }, { tex: /\\pinj/, unicode: "\u2914" }, { tex: /\\finj/, unicode: "\u2915" }, { tex: /\\bNot/, unicode: "\u2AED" }, { tex: /\\spot/, unicode: "\u2981" }, { tex: /\\limg/, unicode: "\u2987" }, { tex: /\\rimg/, unicode: "\u2988" }, { tex: /\\obot/, unicode: "\u29BA" }, { tex: /\\cirE/, unicode: "\u29C3" }, { tex: /\\XBox/, unicode: "\u2612" }, { tex: /\\perp/, unicode: "\u22A5" }, { tex: /\\leqq/, unicode: "\u2266" }, { tex: /\\dsol/, unicode: "\u29F6" }, { tex: /\\Rbag/, unicode: "\u27C6" }, { tex: /\\xsol/, unicode: "\u29F8" }, { tex: /\\odot/, unicode: "\u2299" }, { tex: /\\flat/, unicode: "\u266D" }, { tex: /\\LVec/, unicode: "\u20D6" }, { tex: /\\intx/, unicode: "\u2A18" }, { tex: /\\lvec/, unicode: "\u20D0" }, { tex: /\\Join/, unicode: "\u2A1D" }, { tex: /\\zcmp/, unicode: "\u2A1F" }, { tex: /\\pfun/, unicode: "\u21F8" }, { tex: /\\cong/, unicode: "\u2245" }, { tex: /\\smte/, unicode: "\u2AAC" }, { tex: /\\ffun/, unicode: "\u21FB" }, { tex: /\\odiv/, unicode: "\u2A38" }, { tex: /\\fcmp/, unicode: "\u2A3E" }, { tex: /\\mlcp/, unicode: "\u2ADB" }, { tex: /\\ElOr/, unicode: "\u2A56" }, { tex: /\\dsub/, unicode: "\u2A64" }, { tex: /\\rsub/, unicode: "\u2A65" }, { tex: /\\oint/, unicode: "\u222E" }, { tex: /\\Same/, unicode: "\u2A76" }, { tex: /\\geqq/, unicode: "\u2267" }, { tex: /\\prod/, unicode: "\u220F" }, { tex: /\\lneq/, unicode: "\u2A87" }, { tex: /\\gneq/, unicode: "\u2A88" }, { tex: /\\upin/, unicode: "\u27D2" }, { tex: /\\not>/, unicode: "\u226F" }, { tex: /_\\ast/, unicode: "\u2217" }, { tex: /\\iota/, unicode: "\u03B9" }, { tex: /\\zeta/, unicode: "\u03B6" }, { tex: /\\beta/, unicode: "\u03B2" }, { tex: /\\male/, unicode: "\u2642" }, { tex: /\\nisd/, unicode: "\u22FA" }, { tex: /\\quad/, unicode: "\u2001" }, { tex: /\\text/, unicode: "" }, { tex: /\\glj/, unicode: "\u2AA4" }, { tex: /\\int/, unicode: "\u222B" }, { tex: /\\cup/, unicode: "\u222A" }, { tex: /\\QED/, unicode: "\u220E" }, { tex: /\\cap/, unicode: "\u2229" }, { tex: /\\gla/, unicode: "\u2AA5" }, { tex: /\\Psi/, unicode: "\u03A8" }, { tex: /\\Phi/, unicode: "\u03A6" }, { tex: /\\sum/, unicode: "\u2211" }, { tex: /\\Rsh/, unicode: "\u21B1" }, { tex: /\\vee/, unicode: "\u2228" }, { tex: /\\Lsh/, unicode: "\u21B0" }, { tex: /\\sim/, unicode: "\u223C" }, { tex: /\\lhd/, unicode: "\u25C1" }, { tex: /\\LHD/, unicode: "\u25C0" }, { tex: /\\rhd/, unicode: "\u25B7" }, { tex: /\\phi/, unicode: "\u03D5" }, { tex: /\\lgE/, unicode: "\u2A91" }, { tex: /\\glE/, unicode: "\u2A92" }, { tex: /\\RHD/, unicode: "\u25B6" }, { tex: /\\cat/, unicode: "\u2040" }, { tex: /\\Yup/, unicode: "\u2144" }, { tex: /\\vec/, unicode: "\u20D1" }, { tex: /\\div/, unicode: "\xF7" }, { tex: /\\mid/, unicode: "\u2223" }, { tex: /\\mho/, unicode: "\u2127" }, { tex: /\\psi/, unicode: "\u03C8" }, { tex: /\\chi/, unicode: "\u03C7" }, { tex: /\\top/, unicode: "\u22A4" }, { tex: /\\Not/, unicode: "\u2AEC" }, { tex: /\\tau/, unicode: "\u03C4" }, { tex: /\\smt/, unicode: "\u2AAA" }, { tex: /\\rho/, unicode: "\u03C1" }, { tex: /\\sun/, unicode: "\u263C" }, { tex: /\\Cap/, unicode: "\u22D2" }, { tex: /\\lat/, unicode: "\u2AAB" }, { tex: /\\leo/, unicode: "\u264C" }, { tex: /\\Sun/, unicode: "\u2609" }, { tex: /\\Cup/, unicode: "\u22D3" }, { tex: /\\eta/, unicode: "\u03B7" }, { tex: /\\Top/, unicode: "\u2AEA" }, { tex: /\\bij/, unicode: "\u2916" }, { tex: /\\eth/, unicode: "\u01AA" }, { tex: /\\geq/, unicode: "\u2265" }, { tex: /\\nis/, unicode: "\u22FC" }, { tex: /\\leq/, unicode: "\u2264" }, { tex: /\\le/, unicode: "\u2264" }, { tex: /\\ll/, unicode: "\u226A" }, { tex: /\\dj/, unicode: "\u0111" }, { tex: /\\in/, unicode: "\u2208" }, { tex: /\\-/, unicode: "\xAD" }, { tex: /\\th/, unicode: "\xFE" }, { tex: /\\wp/, unicode: "\u2118" }, { tex: /\\aa/, unicode: "\xE5" }, { tex: /\\ss/, unicode: "\xDF" }, { tex: /\\ae/, unicode: "\xE6" }, { tex: /\\ng/, unicode: "\u014B" }, { tex: /\\mu/, unicode: "\u03BC" }, { tex: /''''/, unicode: "\u2057" }, { tex: /\\pi/, unicode: "\u03C0" }, { tex: /\\gg/, unicode: "\u226B" }, { tex: /\\xi/, unicode: "\u03BE" }, { tex: /\\ni/, unicode: "\u220B" }, { tex: /\\nu/, unicode: "\u03BD" }, { tex: /\\pm/, unicode: "\xB1" }, { tex: /\\mp/, unicode: "\u2213" }, { tex: /\\wr/, unicode: "\u2240" }, { tex: /\\\./, unicode: "\u0307" }, { tex: /\\dh/, unicode: "\xF0" }, { tex: /\\oe/, unicode: "\u0153" }, { tex: /\\url/, unicode: "\\XXurl" }, { tex: /\\u/, unicode: "\u0306" }, { tex: /\\XXurl/, unicode: "\\url" }, { tex: /\\L/, unicode: "\u0141" }, { tex: /\\c/, unicode: "\xB8" }, { tex: /\\i/, unicode: "\u0131" }, { tex: /\\k/, unicode: "\u02DB" }, { tex: /\\H/, unicode: "\u02DD" }, { tex: /\\"/, unicode: "\u0308" }, { tex: /\\v/, unicode: "\u030C" }, { tex: /\\o/, unicode: "\xF8" }, { tex: /\\`/, unicode: "\u0300" }, { tex: /\\'/, unicode: "\u0301" }, { tex: /\\~/, unicode: "\u0303" }, { tex: /\\r/, unicode: "\u02DA" }, { tex: /\\O/, unicode: "\xD8" }, { tex: /\\=/, unicode: "\u0304" }, { tex: /\\l/, unicode: "\u0142" }, { tex: /'''/, unicode: "\u2034" }, { tex: /\\textasciitilde/, unicode: "\\~" }, { tex: /\\backslash|\\textbackslash/, unicode: "\u0871" }].map((e2) => { const d2 = e2.tex.source; return { tex: /^[a-zA-Z\\]+$/.test(d2) ? new RegExp(`{(${d2})}|${d2}\\s|${d2}(?=\\W|\\_)`, "g") : new RegExp(`{(${d2})}|${d2}{}|${d2}`, "g"), unicode: e2.unicode }; }); /*! * XRegExp 5.1.1 * <xregexp.com> * Steven Levithan (c) 2007-present MIT License */ const E = { astral: false, namespacing: true }, _ = {}; let C = {}, q = {}; const L = [], S = { default: /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, class: /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ }, R = /\$(?:\{([^\}]+)\}|<([^>]+)>|(\d\d?|[\s\S]?))/g, A = void 0 === /()??/.exec("")[1], N = void 0 !== /x/.flags; function T(e2) { let d2 = true; try { if (new RegExp("", e2), "y" === e2) { ".." === ".a".replace(new RegExp("a", "gy"), ".") && (d2 = false); } } catch (e3) { d2 = false; } return d2; } const z = T("d"), $ = T("s"), D = T("u"), I = T("y"), O = { d: z, g: true, i: true, m: true, s: $, u: D, y: I }, P = $ ? /[^dgimsuy]+/g : /[^dgimuy]+/g; function Y(e2, d2, t2, u2, i2) { if (e2.xregexp = { captureNames: d2 }, i2) return e2; if (e2.__proto__) e2.__proto__ = Q.prototype; else for (const d3 in Q.prototype) e2[d3] = Q.prototype[d3]; return e2.xregexp.source = t2, e2.xregexp.flags = u2 ? u2.split("").sort().join("") : u2, e2; } function U(e2) { return e2.replace(/([\s\S])(?=[\s\S]*\1)/g, ""); } function j(e2, d2) { if (!Q.isRegExp(e2)) throw new TypeError("Type RegExp expected"); const t2 = e2.xregexp || {}; let u2 = function(e3) { return N ? e3.flags : /\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(e3))[1]; }(e2), i2 = "", c = "", n2 = null, a2 = null; return (d2 = d2 || {}).removeG && (c += "g"), d2.removeY && (c += "y"), c && (u2 = u2.replace(new RegExp(`[${c}]+`, "g"), "")), d2.addG && (i2 += "g"), d2.addY && (i2 += "y"), i2 && (u2 = U(u2 + i2)), d2.isInternalOnly || (void 0 !== t2.source && (n2 = t2.source), null != t2.flags && (a2 = i2 ? U(t2.flags + i2) : t2.flags)), e2 = Y(new RegExp(d2.source || e2.source, u2), function(e3) { return !(!e3.xregexp || !e3.xregexp.captureNames); }(e2) ? t2.captureNames.slice(0) : null, n2, a2, d2.isInternalOnly); } function B(e2) { return parseInt(e2, 16); } function G(e2, d2, t2) { const u2 = e2.index + e2[0].length, i2 = e2.input[e2.index - 1], c = e2.input[u2]; return /^[()|]$/.test(i2) || /^[()|]$/.test(c) || 0 === e2.index || u2 === e2.input.length || /\(\?(?:[:=!]|<[=!])$/.test(e2.input.substring(e2.index - 4, e2.index)) || function(e3, d3, t3) { const u3 = "\\(\\?#[^)]*\\)", i3 = "#[^#\\n]*", c2 = "[?*+]|{\\d+(?:,\\d*)?}"; return (t3.includes("x") ? new RegExp(`^(?:\\s|${i3}|${u3})*(?:${c2})`) : new RegExp(`^(?:${u3})*(?:${c2})`)).test(e3.slice(d3)); }(e2.input, u2, t2) ? "" : "(?:)"; } function M(e2) { return parseInt(e2, 10).toString(16); } function H(e2, d2) { return Object.prototype.toString.call(e2) === `[object ${d2}]`; } function V(e2) { if (null == e2) throw new TypeError("Cannot convert null or undefined to object"); return e2; } function F(e2) { for (; e2.length < 4; ) e2 = `0${e2}`; return e2; } function K(e2) { const d2 = {}; return H(e2, "String") ? (Q.forEach(e2, /[^\s,]+/, (e3) => { d2[e3] = true; }), d2) : e2; } function Z(e2) { if (!/^[\w$]$/.test(e2)) throw new Error("Flag must be a single character A-Za-z0-9_$"); O[e2] = true; } function W(e2, d2, t2, u2, i2) { let c = L.length; const n2 = e2[t2]; let a2, o2, r2 = null; for (; c--; ) if (o2 = L[c], !(o2.leadChar && o2.leadChar !== n2 || o2.scope !== u2 && "all" !== o2.scope || o2.flag && !d2.includes(o2.flag)) && (a2 = Q.exec(e2, o2.regex, t2, "sticky"), a2)) { r2 = { matchLength: a2[0].length, output: o2.handler.call(i2, a2, u2, d2), reparse: o2.reparse }; break; } return r2; } function X(e2) { E.astral = e2; } function J(e2) { E.namespacing = e2; } function Q(e2, d2) { if (Q.isRegExp(e2)) { if (void 0 !== d2) throw new TypeError("Cannot supply flags when copying a RegExp"); return j(e2); } if (e2 = void 0 === e2 ? "" : String(e2), d2 = void 0 === d2 ? "" : String(d2), Q.isInstalled("astral") && !d2.includes("A") && (d2 += "A"), q[e2] || (q[e2] = {}), !q[e2][d2]) { const t3 = { hasNamedCapture: false, captureNames: [] }; let u2, i2 = "default", c = "", n2 = 0; const a2 = function(e3, d3) { if (U(d3) !== d3) throw new SyntaxError(`Invalid duplicate regex flag ${d3}`); e3 = e3.replace(/^\(\?([\w$]+)\)/, (e4, t4) => { if (/[dgy]/.test(t4)) throw new SyntaxError(`Cannot use flags dgy in mode modifier ${e4}`); return d3 = U(d3 + t4), ""; }); for (const e4 of d3) if (!O[e4]) throw new SyntaxError(`Unknown regex flag ${e4}`); return { pattern: e3, flags: d3 }; }(e2, d2); let o2 = a2.pattern; const r2 = a2.flags; for (; n2 < o2.length; ) { do { u2 = W(o2, r2, n2, i2, t3), u2 && u2.reparse && (o2 = o2.slice(0, n2) + u2.output + o2.slice(n2 + u2.matchLength)); } while (u2 && u2.reparse); if (u2) c += u2.output, n2 += u2.matchLength || 1; else { const [e3] = Q.exec(o2, S[i2], n2, "sticky"); c += e3, n2 += e3.length, "[" === e3 && "default" === i2 ? i2 = "class" : "]" === e3 && "class" === i2 && (i2 = "default"); } } q[e2][d2] = { pattern: c.replace(/(?:\(\?:\))+/g, "(?:)"), flags: r2.replace(P, ""), captures: t3.hasNamedCapture ? t3.captureNames : null }; } const t2 = q[e2][d2]; return Y(new RegExp(t2.pattern, t2.flags), t2.captures, e2, d2); } Q.prototype = new RegExp(), Q.version = "5.1.1", Q._clipDuplicates = U, Q._hasNativeFlag = T, Q._dec = B, Q._hex = M, Q._pad4 = F, Q.addToken = (e2, d2, t2) => { t2 = t2 || {}; let { optionalFlags: u2 } = t2; if (t2.flag && Z(t2.flag), u2) { u2 = u2.split(""); for (const e3 of u2) Z(e3); } L.push({ regex: j(e2, { addG: true, addY: I, isInternalOnly: true }), handler: d2, scope: t2.scope || "default", flag: t2.flag, reparse: t2.reparse, leadChar: t2.leadChar }), Q.cache.flush("patterns"); }, Q.cache = (e2, d2) => (C[e2] || (C[e2] = {}), C[e2][d2] || (C[e2][d2] = Q(e2, d2))), Q.cache.flush = (e2) => { "patterns" === e2 ? q = {} : C = {}; }, Q.escape = (e2) => String(V(e2)).replace(/[\\\[\]{}()*+?.^$|]/g, "\\$&").replace(/[\s#\-,]/g, (e3) => `\\u${F(M(e3.charCodeAt(0)))}`), Q.exec = (e2, d2, t2, u2) => { let i2, c = "g", n2 = false, a2 = false; n2 = I && !!(u2 || d2.sticky && false !== u2), n2 ? c += "y" : u2 && (a2 = true, c += "FakeY"), d2.xregexp = d2.xregexp || {}; const o2 = d2.xregexp[c] || (d2.xregexp[c] = j(d2, { addG: true, addY: n2, source: a2 ? `${d2.source}|()` : void 0, removeY: false === u2, isInternalOnly: true })); return t2 = t2 || 0, o2.lastIndex = t2, i2 = _.exec.call(o2, e2), a2 && i2 && "" === i2.pop() && (i2 = null), d2.global && (d2.lastIndex = i2 ? o2.lastIndex : 0), i2; }, Q.forEach = (e2, d2, t2) => { let u2, i2 = 0, c = -1; for (; u2 = Q.exec(e2, d2, i2); ) t2(u2, ++c, e2, d2), i2 = u2.index + (u2[0].length || 1); }, Q.globalize = (e2) => j(e2, { addG: true }), Q.install = (e2) => { e2 = K(e2), !E.astral && e2.astral && X(true), !E.namespacing && e2.namespacing && J(true); }, Q.isInstalled = (e2) => !!E[e2], Q.isRegExp = (e2) => "[object RegExp]" === Object.prototype.toString.call(e2), Q.match = (e2, d2, t2) => { const u2 = d2.global && "one" !== t2 || "all" === t2, i2 = (u2 ? "g" : "") + (d2.sticky ? "y" : "") || "noGY"; d2.xregexp = d2.xregexp || {}; const c = d2.xregexp[i2] || (d2.xregexp[i2] = j(d2, { addG: !!u2, removeG: "one" === t2, isInternalOnly: true })), n2 = String(V(e2)).match(c); return d2.global && (d2.lastIndex = "one" === t2 && n2 ? n2.index + n2[0].length : 0), u2 ? n2 || [] : n2 && n2[0]; }, Q.matchChain = (e2, d2) => function e3(t2, u2) { const i2 = d2[u2].regex ? d2[u2] : { regex: d2[u2] }, c = []; function n2(e4) { if (i2.backref) { const d3 = `Backreference to undefined group: ${i2.backref}`, t3 = isNaN(i2.backref); if (t3 && Q.isInstalled("namespacing")) { if (!e4.groups || !(i2.backref in e4.groups)) throw new ReferenceError(d3); } else if (!e4.hasOwnProperty(i2.backref)) throw new ReferenceError(d3); const u3 = t3 && Q.isInstalled("namespacing") ? e4.groups[i2.backref] : e4[i2.backref]; c.push(u3 || ""); } else c.push(e4[0]); } for (const e4 of t2) Q.forEach(e4, i2.regex, n2); return u2 !== d2.length - 1 && c.length ? e3(c, u2 + 1) : c; }([e2], 0), Q.replace = (e2, d2, t2, u2) => { const i2 = Q.isRegExp(d2), c = d2.global && "one" !== u2 || "all" === u2, n2 = (c ? "g" : "") + (d2.sticky ? "y" : "") || "noGY"; let a2 = d2; i2 ? (d2.xregexp = d2.xregexp || {}, a2 = d2.xregexp[n2] || (d2.xregexp[n2] = j(d2, { addG: !!c, removeG: "one" === u2, isInternalOnly: true }))) : c && (a2 = new RegExp(Q.escape(String(d2)), "g")); const o2 = _.replace.call(V(e2), a2, t2); return i2 && d2.global && (d2.lastIndex = 0), o2; }, Q.replaceEach = (e2, d2) => { for (const t2 of d2) e2 = Q.replace(e2, t2[0], t2[1], t2[2]); return e2; }, Q.split = (e2, d2, t2) => _.split.call(V(e2), d2, t2), Q.test = (e2, d2, t2, u2) => !!Q.exec(e2, d2, t2, u2), Q.uninstall = (e2) => { e2 = K(e2), E.astral && e2.astral && X(false), E.namespacing && e2.namespacing && J(false); }, Q.union = (e2, d2, t2) => { const u2 = (t2 = t2 || {}).conjunction || "or"; let i2, c, n2 = 0; function a2(e3, d3, t3) { const u3 = c[n2 - i2]; if (d3) { if (++n2, u3) return `(?<${u3}>`; } else if (t3) return `\\${+t3 + i2}`; return e3; } if (!H(e2, "Array") || !e2.length) throw new TypeError("Must provide a nonempty array of patterns to merge"); const o2 = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g, r2 = []; for (const d3 of e2) Q.isRegExp(d3) ? (i2 = n2, c = d3.xregexp && d3.xregexp.captureNames || [], r2.push(Q(d3.source).source.replace(o2, a2))) : r2.push(Q.escape(d3)); const s2 = "none" === u2 ? "" : "|"; return Q(r2.join(s2), d2); }, _.exec = function(e2) { const d2 = this.lastIndex, t2 = RegExp.prototype.exec.apply(this, arguments); if (t2) { if (!A && t2.length > 1 && t2.includes("")) { const d3 = j(this, { removeG: true, isInternalOnly: true }); String(e2).slice(t2.index).replace(d3, (...e3) => { const d4 = e3.length; for (let u2 = 1; u2 < d4 - 2; ++u2) void 0 === e3[u2] && (t2[u2] = void 0); }); } if (this.xregexp && this.xregexp.captureNames) { let e3 = t2; Q.isInstalled("namespacing") && (t2.groups = /* @__PURE__ */ Object.create(null), e3 = t2.groups); for (let d3 = 1; d3 < t2.length; ++d3) { const u2 = this.xregexp.captureNames[d3 - 1]; u2 && (e3[u2] = t2[d3]); } } else !t2.groups && Q.isInstalled("namespacing") && (t2.groups = void 0); this.global && !t2[0].length && this.lastIndex > t2.index && (this.lastIndex = t2.index); } return this.global || (this.lastIndex = d2), t2; }, _.test = function(e2) { return !!_.exec.call(this, e2); }, _.match = function(e2) { if (Q.isRegExp(e2)) { if (e2.global) { const d2 = String.prototype.match.apply(this, arguments); return e2.lastIndex = 0, d2; } } else e2 = new RegExp(e2); return _.exec.call(e2, V(this)); }, _.replace = function(e2, d2) { const t2 = Q.isRegExp(e2); let u2, i2, c; return t2 ? (e2.xregexp && ({ captureNames: i2 } = e2.xregexp), u2 = e2.lastIndex) : e2 += "", c = H(d2, "Function") ? String(this).replace(e2, (...e3) => { if (i2) { let d3; Q.isInstalled("namespacing") ? (d3 = /* @__PURE__ */ Object.create(null), e3.push(d3)) : (e3[0] = new String(e3[0]), [d3] = e3); for (let t3 = 0; t3 < i2.length; ++t3) i2[t3] && (d3[i2[t3]] = e3[t3 + 1]); } return d2(...e3); }) : String(V(this)).replace(e2, (...e3) => String(d2).replace(R, function(d3, t3, u3, c2) { t3 = t3 || u3; const n2 = H(e3[e3.length - 1], "Object") ? 4 : 3, a2 = e3.length - n2; if (t3) { if (/^\d+$/.test(t3)) { const d4 = +t3; if (d4 <= a2) return e3[d4] || ""; } const u4 = i2 ? i2.indexOf(t3) : -1; if (u4 < 0) throw new SyntaxError(`Backreference to undefined group ${d3}`); return e3[u4 + 1] || ""; } if ("" === c2 || " " === c2) throw new SyntaxError(`Invalid token ${d3}`); if ("&" === c2 || 0 == +c2) return e3[0]; if ("$" === c2) return "$"; if ("`" === c2) return e3[e3.length - 1].slice(0, e3[e3.length - 2]); if ("'" === c2) return e3[e3.length - 1].slice(e3[e3.length - 2] + e3[0].length); if (c2 = +c2, !isNaN(c2)) { if (c2 > a2) throw new SyntaxError(`Backreference to undefined group ${d3}`); return e3[c2] || ""; } throw new SyntaxError(`Invalid token ${d3}`); })), t2 && (e2.global ? e2.lastIndex = 0 : e2.lastIndex = u2), c; }, _.split = function(e2, d2) { if (!Q.isRegExp(e2)) return String.prototype.split.apply(this, arguments); const t2 = String(this), u2 = [], i2 = e2.lastIndex; let c, n2 = 0; return d2 = (void 0 === d2 ? -1 : d2) >>> 0, Q.forEach(t2, e2, (e3) => { e3.index + e3[0].length > n2 && (u2.push(t2.slice(n2, e3.index)), e3.length > 1 && e3.index < t2.length && Array.prototype.push.apply(u2, e3.slice(1)), c = e3[0].length, n2 = e3.index + c); }), n2 === t2.length ? e2.test("") && !c || u2.push("") : u2.push(t2.slice(n2)), e2.lastIndex = i2, u2.length > d2 ? u2.slice(0, d2) : u2; }, Q.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, (e2, d2) => { if ("B" === e2[1] && "default" === d2) return e2[0]; throw new SyntaxError(`Invalid escape ${e2[0]}`); }, { scope: "all", leadChar: "\\" }), Q.addToken(/\\u{([\dA-Fa-f]+)}/, (e2, d2, t2) => { const u2 = B(e2[1]); if (u2 > 1114111) throw new SyntaxError(`Invalid Unicode code point ${e2[0]}`); if (u2 <= 65535) return `\\u${F(M(u2))}`; if (D && t2.includes("u")) return e2[0]; throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u"); }, { scope: "all", leadChar: "\\" }), Q.addToken(/\(\?#[^)]*\)/, G, { leadChar: "(" }), Q.addToken(/\s+|#[^\n]*\n?/, G, { flag: "x" }), $ || Q.addToken(/\./, () => "[\\s\\S]", { flag: "s", leadChar: "." }), Q.addToken(/\\k<([^>]+)>/, function(e2) { const d2 = isNaN(e2[1]) ? this.captureNames.indexOf(e2[1]) + 1 : +e2[1], t2 = e2.index + e2[0].length; if (!d2 || d2 > this.captureNames.length) throw new SyntaxError(`Backreference to undefined group ${e2[0]}`); return `\\${d2}${t2 === e2.input.length || isNaN(e2.input[t2]) ? "" : "(?:)"}`; }, { leadChar: "\\" }), Q.addToken(/\\(\d+)/, function(e2, d2) { if (!("default" === d2 && /^[1-9]/.test(e2[1]) && +e2[1] <= this.captureNames.length) && "0" !== e2[1]) throw new SyntaxError(`Cannot use octal escape or backreference to undefined group ${e2[0]}`); return e2[0]; }, { scope: "all", leadChar: "\\" }), Q.addToken(/\(\?P?<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>/u, function(e2) { if (!Q.isInstalled("namespacing") && ("length" === e2[1] || "__proto__" === e2[1])) throw new SyntaxError(`Cannot use reserved word as capture name ${e2[0]}`); if (this.captureNames.includes(e2[1])) throw new SyntaxError(`Cannot use same name for multiple groups ${e2[0]}`); return this.captureNames.push(e2[1]), this.hasNamedCapture = true, "("; }, { leadChar: "(" }), Q.addToken(/\((?!\?)/, function(e2, d2, t2) { return t2.includes("n") ? "(?:" : (this.captureNames.push(null), "("); }, { optionalFlags: "n", leadChar: "(" }); /*! * XRegExp.build 5.1.1 * <xregexp.com> * Steven Levithan (c) 2012-present MIT License */ var ee = [{ name: "C", alias: "Other", isBmpLast: true, bmp: "\0-\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u086F\u088F-\u0897\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u1716-\u171E\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C1-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E5E-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC3-\uFBD2\uFD90\uFD91\uFDC8-\uFDCE\uFDD0-\uFDEF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF", astral: "\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDF6F\uDF8A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC76-\uDC7E\uDCBD\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEBA-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF47-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF3-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDF4F\uDFC4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDEB-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD839[\uDC00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDC\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFEF\uDFF1-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7D-\uDE7F\uDE87-\uDE8F\uDEAD-\uDEAF\uDEBB-\uDEBF\uDEC6-\uDECF\uDEDA-\uDEDF\uDEE8-\uDEEF\uDEF7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF39-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]" }, { name: "Cc", alias: "Control", bmp: "\0-\x7F-\x9F" }, { name: "Cf", alias: "Format", bmp: "\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB", astral: "\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]" }, { name: "Cn", alias: "Unassigned", bmp: "\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u086F\u088F\u0892-\u0897\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u1716-\u171E\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C1-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E5E-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC3-\uFBD2\uFD90\uFD91\uFDC8-\uFDCE\uFDD0-\uFDEF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF", astral: "\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDF6F\uDF8A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC76-\uDC7E\uDCC3-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEBA-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF47-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF3-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDF4F\uDFC4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDEB-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD839[\uDC00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDC\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFEF\uDFF1-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7D-\uDE7F\uDE87-\uDE8F\uDEAD-\uDEAF\uDEBB-\uDEBF\uDEC6-\uDECF\uDEDA-\uDEDF\uDEE8-\uDEEF\uDEF7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF39-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]" }, { name: "Co", alias: "Private_Use", bmp: "\uE000-\uF8FF", astral: "[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]" }, { name: "Cs", alias: "Surrogate", bmp: "\uD800-\uDFFF" }, { name: "L", alias: "Letter", bmp: "A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC", astral: "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" }, { name: "LC", alias: "Cased_Letter", bmp: "A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A", astral: "\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD00-\uDD43]" }, { name: "Ll", alias: "Lowercase_Letter", bmp: "a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5F\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C1\uA7C3\uA7C8\uA7CA\uA7D1\uA7D3\uA7D5\uA7D7\uA7D9\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A", astral: "\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD22-\uDD43]" }, { name: "Lm", alias: "Modifier_Letter", bmp: "\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u08C9\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F2-\uA7F4\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F", astral: "\uD801[\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD838[\uDD37-\uDD3D]|\u{1E94B}" }, { name: "Lo", alias: "Other_Letter", bmp: "\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C8\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC", astral: "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\u{1DF0A}|\uD838[\uDD00-\uDD2C\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" }, { name: "Lt", alias: "Titlecase_Letter", bmp: "\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC" }, { name: "Lu", alias: "Uppercase_Letter", bmp: "A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2F\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C0\uA7C2\uA7C4-\uA7C7\uA7C9\uA7D0\uA7D6\uA7D8\uA7F5\uFF21-\uFF3A", astral: "\uD801[\uDC00-\uDC27\uDCB0-\uDCD3\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]" }, { name: "M", alias: "Mark", bmp: "\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0898-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u180F\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F", astral: "\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50\uDF82-\uDF85]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC70\uDC73\uDC74\uDC7F-\uDC82\uDCB0-\uDCBA\uDCC2\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEAE\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]" }, { name: "Mc", alias: "Spacing_Mark", bmp: "\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u1715\u1734\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC", astral: "\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]" }, { name: "Me", alias: "Enclosing_Mark", bmp: "\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672" }, { name: "Mn", alias: "Nonspacing_Mark", bmp: "\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0898-\u089F\u08CA-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3C\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732\u1733\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u180F\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F", astral: "\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50\uDF82-\uDF85]|\uD804[\uDC01\uDC38-\uDC46\uDC70\uDC73\uDC74\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDCC2\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEAE\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]" }, { name: "N", alias: "Number", bmp: "0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19", astral: "\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDEC0-\uDEC9\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]" }, { name: "Nd", alias: "Decimal_Number", bmp: "0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19", astral: "\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDEC0-\uDEC9\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]" }, { name: "Nl", alias: "Letter_Number", bmp: "\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF", astral: "\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]" }, { name: "No", alias: "Other_Number", bmp: "\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835", astral: "\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]" }, { name: "P", alias: "Punctuation", bmp: "!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65", astral: "\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\u{1056F}|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\u{1BC9F}|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]" }, { name: "Pc", alias: "Connector_Punctuation", bmp: "_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F" }, { name: "Pd", alias: "Dash_Punctuation", bmp: "\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u2E5D\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D", astral: "\u{10EAD}" }, { name: "Pe", alias: "Close_Punctuation", bmp: "\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u2E56\u2E58\u2E5A\u2E5C\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63" }, { name: "Pf", alias: "Final_Punctuation", bmp: "\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21" }, { name: "Pi", alias: "Initial_Punctuation", bmp: "\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20" }, { name: "Po", alias: "Other_Punctuation", bmp: "!-#%-'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52-\u2E54\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65", astral: "\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\u{1056F}|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\u{1BC9F}|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]" }, { name: "Ps", alias: "Open_Punctuation", bmp: "\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u2E55\u2E57\u2E59\u2E5B\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62" }, { name: "S", alias: "Symbol", bmp: "\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD", astral: "\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\u{1173F}|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\u{1BC9C}|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDD-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC5\uDED0-\uDED9\uDEE0-\uDEE7\uDEF0-\uDEF6\uDF00-\uDF92\uDF94-\uDFCA]" }, { name: "Sc", alias: "Currency_Symbol", bmp: "\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20C0\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6", astral: "\uD807[\uDFDD-\uDFE0]|\u{1E2FF}|\u{1ECB0}" }, { name: "Sk", alias: "Modifier_Symbol", bmp: "\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u0888\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC2\uFF3E\uFF40\uFFE3", astral: "\uD83C[\uDFFB-\uDFFF]" }, { name: "Sm", alias: "Math_Symbol", bmp: "\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC", astral: "\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]" }, { name: "So", alias: "Other_Symbol", bmp: "\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFD40-\uFD4F\uFDCF\uFDFD-\uFDFF\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD", astral: "\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\u{1173F}|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\u{1BC9C}|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\u{1E14F}|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEDD-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC5\uDED0-\uDED9\uDEE0-\uDEE7\uDEF0-\uDEF6\uDF00-\uDF92\uDF94-\uDFCA]" }, { name: "Z", alias: "Separator", bmp: " \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000" }, { name: "Zl", alias: "Line_Separator", bmp: "\u2028" }, { name: "Zp", alias: "Paragraph_Separator", bmp: "\u2029" }, { name: "Zs", alias: "Space_Separator", bmp: " \xA0\u1680\u2000-\u200A\u202F\u205F\u3000" }], de = [{ name: "ASCII", bmp: "\0-\x7F" }, { name: "Alphabetic", bmp: "A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9-\u0AFC\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u108F\u109A-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1713\u171F-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1ABF\u1AC0\u1ACC-\u1ACE\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4C\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C36\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA805\uA807-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FF\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC", astral: "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC45\uDC71-\uDC75\uDC82-\uDCB8\uDCC2\uDCD0-\uDCE8\uDD00-\uDD32\uDD44-\uDD47\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDCE\uDDCF\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDEB8\uDF00-\uDF1A\uDF1D-\uDF2A\uDF40-\uDF46]|\uD806[\uDC00-\uDC38\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B\uDD3C\uDD3F-\uDD42\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDDF\uDDE1\uDDE3\uDDE4\uDE00-\uDE32\uDE35-\uDE3E\uDE50-\uDE97\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD41\uDD43\uDD46\uDD47\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD96\uDD98\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" }, { name: "Any", isBmpLast: true, bmp: "\0-\uFFFF", astral: "[\uD800-\uDBFF][\uDC00-\uDFFF]" }, { name: "Default_Ignorable_Code_Point", bmp: "\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180F\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8", astral: "\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|[\uDB40-\uDB43][\uDC00-\uDFFF]" }, { name: "Lowercase", bmp: "a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5F\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C1\uA7C3\uA7C8\uA7CA\uA7D1\uA7D3\uA7D5\uA7D7\uA7D9\uA7F6\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A", astral: "\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDF80\uDF83-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD22-\uDD43]" }, { name: "Noncharacter_Code_Point", bmp: "\uFDD0-\uFDEF\uFFFE\uFFFF", astral: "[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]" }, { name: "Uppercase", bmp: "A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2F\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C0\uA7C2\uA7C4-\uA7C7\uA7C9\uA7D0\uA7D6\uA7D8\uA7F5\uFF21-\uFF3A", astral: "\uD801[\uDC00-\uDC27\uDCB0-\uDCD3\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]" }, { name: "White_Space", bmp: " -\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000" }], te = [{ name: "Adlam", astral: "\uD83A[\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]" }, { name: "Ahom", astral: "\uD805[\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF46]" }, { name: "Anatolian_Hieroglyphs", astral: "\uD811[\uDC00-\uDE46]" }, { name: "Arabic", bmp: "\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C-\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u0870-\u088E\u0890\u0891\u0898-\u08E1\u08E3-\u08FF\uFB50-\uFBC2\uFBD3-\uFD3D\uFD40-\uFD8F\uFD92-\uFDC7\uFDCF\uFDF0-\uFDFF\uFE70-\uFE74\uFE76-\uFEFC", astral: "\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]" }, { name: "Armenian", bmp: "\u0531-\u0556\u0559-\u058A\u058D-\u058F\uFB13-\uFB17" }, { name: "Avestan", astral: "\uD802[\uDF00-\uDF35\uDF39-\uDF3F]" }, { name: "Balinese", bmp: "\u1B00-\u1B4C\u1B50-\u1B7E" }, { name: "Bamum", bmp: "\uA6A0-\uA6F7", astral: "\uD81A[\uDC00-\uDE38]" }, { name: "Bassa_Vah", astral: "\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]" }, { name: "Batak", bmp: "\u1BC0-\u1BF3\u1BFC-\u1BFF" }, { name: "Bengali", bmp: "\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FE" }, { name: "Bhaiksuki", astral: "\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC45\uDC50-\uDC6C]" }, { name: "Bopomofo", bmp: "\u02EA\u02EB\u3105-\u312F\u31A0-\u31BF" }, { name: "Brahmi", astral: "\uD804[\uDC00-\uDC4D\uDC52-\uDC75\uDC7F]" }, { name: "Braille", bmp: "\u2800-\u28FF" }, { name: "Buginese", bmp: "\u1A00-\u1A1B\u1A1E\u1A1F" }, { name: "Buhid", bmp: "\u1740-\u1753" }, { name: "Canadian_Aboriginal", bmp: "\u1400-\u167F\u18B0-\u18F5", astral: "\uD806[\uDEB0-\uDEBF]" }, { name: "Carian", astral: "\uD800[\uDEA0-\uDED0]" }, { name: "Caucasian_Albanian", astral: "\uD801[\uDD30-\uDD63\uDD6F]" }, { name: "Chakma", astral: "\uD804[\uDD00-\uDD34\uDD36-\uDD47]" }, { name: "Cham", bmp: "\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F" }, { name: "Cherokee", bmp: "\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF" }, { name: "Chorasmian", astral: "\uD803[\uDFB0-\uDFCB]" }, { name: "Common", bmp: "\0-@\\[-`\\{-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0605\u060C\u061B\u061F\u0640\u06DD\u08E2\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1CFA\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20C0\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2E00-\u2E5D\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u32FF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uAB6A\uAB6B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD", astral: "\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9C\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD82F[\uDCA0-\uDCA3]|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDEE0-\uDEF3\uDF00-\uDF56\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uD83B[\uDC71-\uDCB4\uDD01-\uDD3D]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDDAD\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDD-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC5\uDED0-\uDED9\uDEE0-\uDEE7\uDEF0-\uDEF6\uDF00-\uDF92\uDF94-\uDFCA\uDFF0-\uDFF9]|\uDB40[\uDC01\uDC20-\uDC7F]" }, { name: "Coptic", bmp: "\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF" }, { name: "Cuneiform", astral: "\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]" }, { name: "Cypriot", astral: "\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]" }, { name: "Cypro_Minoan", astral: "\uD80B[\uDF90-\uDFF2]" }, { name: "Cyrillic", bmp: "\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F" }, { name: "Deseret", astral: "\uD801[\uDC00-\uDC4F]" }, { name: "Devanagari", bmp: "\u0900-\u0950\u0955-\u0963\u0966-\u097F\uA8E0-\uA8FF" }, { name: "Dives_Akuru", astral: "\uD806[\uDD00-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD46\uDD50-\uDD59]" }, { name: "Dogra", astral: "\uD806[\uDC00-\uDC3B]" }, { name: "Duployan", astral: "\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]" }, { name: "Egyptian_Hieroglyphs", astral: "\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E\uDC30-\uDC38]" }, { name: "Elbasan", astral: "\uD801[\uDD00-\uDD27]" }, { name: "Elymaic", astral: "\uD803[\uDFE0-\uDFF6]" }, { name: "Ethiopic", bmp: "\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E", astral: "\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]" }, { name: "Georgian", bmp: "\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u1C90-\u1CBA\u1CBD-\u1CBF\u2D00-\u2D25\u2D27\u2D2D" }, { name: "Glagolitic", bmp: "\u2C00-\u2C5F", astral: "\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]" }, { name: "Gothic", astral: "\uD800[\uDF30-\uDF4A]" }, { name: "Grantha", astral: "\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]" }, { name: "Greek", bmp: "\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65", astral: "\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45]" }, { name: "Gujarati", bmp: "\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9-\u0AFF" }, { name: "Gunjala_Gondi", astral: "\uD807[\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9]" }, { name: "Gurmukhi", bmp: "\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A76" }, { name: "Han", bmp: "\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFA6D\uFA70-\uFAD9", astral: "\uD81B[\uDFE2\uDFE3\uDFF0\uDFF1]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" }, { name: "Hangul", bmp: "\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC" }, { name: "Hanifi_Rohingya", astral: "\uD803[\uDD00-\uDD27\uDD30-\uDD39]" }, { name: "Hanunoo", bmp: "\u1720-\u1734" }, { name: "Hatran", astral: "\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]" }, { name: "Hebrew", bmp: "\u0591-\u05C7\u05D0-\u05EA\u05EF-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F" }, { name: "Hiragana", bmp: "\u3041-\u3096\u309D-\u309F", astral: "\uD82C[\uDC01-\uDD1F\uDD50-\uDD52]|\u{1F200}" }, { name: "Imperial_Aramaic", astral: "\uD802[\uDC40-\uDC55\uDC57-\uDC5F]" }, { name: "Inherited", bmp: "\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951-\u0954\u1AB0-\u1ACE\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D", astral: "\uD800[\uDDFD\uDEE0]|\u{1133B}|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uDB40[\uDD00-\uDDEF]" }, { name: "Inscriptional_Pahlavi", astral: "\uD802[\uDF60-\uDF72\uDF78-\uDF7F]" }, { name: "Inscriptional_Parthian", astral: "\uD802[\uDF40-\uDF55\uDF58-\uDF5F]" }, { name: "Javanese", bmp: "\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF" }, { name: "Kaithi", astral: "\uD804[\uDC80-\uDCC2\uDCCD]" }, { name: "Kannada", bmp: "\u0C80-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2" }, { name: "Katakana", bmp: "\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D", astral: "\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00\uDD20-\uDD22\uDD64-\uDD67]" }, { name: "Kayah_Li", bmp: "\uA900-\uA92D\uA92F" }, { name: "Kharoshthi", astral: "\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE50-\uDE58]" }, { name: "Khitan_Small_Script", astral: "\u{16FE4}|\uD822[\uDF00-\uDFFF]|\uD823[\uDC00-\uDCD5]" }, { name: "Khmer", bmp: "\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF" }, { name: "Khojki", astral: "\uD804[\uDE00-\uDE11\uDE13-\uDE3E]" }, { name: "Khudawadi", astral: "\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]" }, { name: "Lao", bmp: "\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF" }, { name: "Latin", bmp: "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uAB66-\uAB69\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A", astral: "\uD801[\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD837[\uDF00-\uDF1E]" }, { name: "Lepcha", bmp: "\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F" }, { name: "Limbu", bmp: "\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F" }, { name: "Linear_A", astral: "\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]" }, { name: "Linear_B", astral: "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]" }, { name: "Lisu", bmp: "\uA4D0-\uA4FF", astral: "\u{11FB0}" }, { name: "Lycian", astral: "\uD800[\uDE80-\uDE9C]" }, { name: "Lydian", astral: "\uD802[\uDD20-\uDD39\uDD3F]" }, { name: "Mahajani", astral: "\uD804[\uDD50-\uDD76]" }, { name: "Makasar", astral: "\uD807[\uDEE0-\uDEF8]" }, { name: "Malayalam", bmp: "\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F" }, { name: "Mandaic", bmp: "\u0840-\u085B\u085E" }, { name: "Manichaean", astral: "\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]" }, { name: "Marchen", astral: "\uD807[\uDC70-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]" }, { name: "Masaram_Gondi", astral: "\uD807[\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]" }, { name: "Medefaidrin", astral: "\uD81B[\uDE40-\uDE9A]" }, { name: "Meetei_Mayek", bmp: "\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9" }, { name: "Mende_Kikakui", astral: "\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]" }, { name: "Meroitic_Cursive", astral: "\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]" }, { name: "Meroitic_Hieroglyphs", astral: "\uD802[\uDD80-\uDD9F]" }, { name: "Miao", astral: "\uD81B[\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F]" }, { name: "Modi", astral: "\uD805[\uDE00-\uDE44\uDE50-\uDE59]" }, { name: "Mongolian", bmp: "\u1800\u1801\u1804\u1806-\u1819\u1820-\u1878\u1880-\u18AA", astral: "\uD805[\uDE60-\uDE6C]" }, { name: "Mro", astral: "\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]" }, { name: "Multani", astral: "\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]" }, { name: "Myanmar", bmp: "\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F" }, { name: "Nabataean", astral: "\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]" }, { name: "Nandinagari", astral: "\uD806[\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE4]" }, { name: "New_Tai_Lue", bmp: "\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF" }, { name: "Newa", astral: "\uD805[\uDC00-\uDC5B\uDC5D-\uDC61]" }, { name: "Nko", bmp: "\u07C0-\u07FA\u07FD-\u07FF" }, { name: "Nushu", astral: "\u{16FE1}|\uD82C[\uDD70-\uDEFB]" }, { name: "Nyiakeng_Puachue_Hmong", astral: "\uD838[\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDD4F]" }, { name: "Ogham", bmp: "\u1680-\u169C" }, { name: "Ol_Chiki", bmp: "\u1C50-\u1C7F" }, { name: "Old_Hungarian", astral: "\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]" }, { name: "Old_Italic", astral: "\uD800[\uDF00-\uDF23\uDF2D-\uDF2F]" }, { name: "Old_North_Arabian", astral: "\uD802[\uDE80-\uDE9F]" }, { name: "Old_Permic", astral: "\uD800[\uDF50-\uDF7A]" }, { name: "Old_Persian", astral: "\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]" }, { name: "Old_Sogdian", astral: "\uD803[\uDF00-\uDF27]" }, { name: "Old_South_Arabian", astral: "\uD802[\uDE60-\uDE7F]" }, { name: "Old_Turkic", astral: "\uD803[\uDC00-\uDC48]" }, { name: "Old_Uyghur", astral: "\uD803[\uDF70-\uDF89]" }, { name: "Oriya", bmp: "\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77" }, { name: "Osage", astral: "\uD801[\uDCB0-\uDCD3\uDCD8-\uDCFB]" }, { name: "Osmanya", astral: "\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]" }, { name: "Pahawh_Hmong", astral: "\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]" }, { name: "Palmyrene", astral: "\uD802[\uDC60-\uDC7F]" }, { name: "Pau_Cin_Hau", astral: "\uD806[\uDEC0-\uDEF8]" }, { name: "Phags_Pa", bmp: "\uA840-\uA877" }, { name: "Phoenician", astral: "\uD802[\uDD00-\uDD1B\uDD1F]" }, { name: "Psalter_Pahlavi", astral: "\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]" }, { name: "Rejang", bmp: "\uA930-\uA953\uA95F" }, { name: "Runic", bmp: "\u16A0-\u16EA\u16EE-\u16F8" }, { name: "Samaritan", bmp: "\u0800-\u082D\u0830-\u083E" }, { name: "Saurashtra", bmp: "\uA880-\uA8C5\uA8CE-\uA8D9" }, { name: "Sharada", astral: "\uD804[\uDD80-\uDDDF]" }, { name: "Shavian", astral: "\uD801[\uDC50-\uDC7F]" }, { name: "Siddham", astral: "\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]" }, { name: "SignWriting", astral: "\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]" }, { name: "Sinhala", bmp: "\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4", astral: "\uD804[\uDDE1-\uDDF4]" }, { name: "Sogdian", astral: "\uD803[\uDF30-\uDF59]" }, { name: "Sora_Sompeng", astral: "\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]" }, { name: "Soyombo", astral: "\uD806[\uDE50-\uDEA2]" }, { name: "Sundanese", bmp: "\u1B80-\u1BBF\u1CC0-\u1CC7" }, { name: "Syloti_Nagri", bmp: "\uA800-\uA82C" }, { name: "Syriac", bmp: "\u0700-\u070D\u070F-\u074A\u074D-\u074F\u0860-\u086A" }, { name: "Tagalog", bmp: "\u1700-\u1715\u171F" }, { name: "Tagbanwa", bmp: "\u1760-\u176C\u176E-\u1770\u1772\u1773" }, { name: "Tai_Le", bmp: "\u1950-\u196D\u1970-\u1974" }, { name: "Tai_Tham", bmp: "\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD" }, { name: "Tai_Viet", bmp: "\uAA80-\uAAC2\uAADB-\uAADF" }, { name: "Takri", astral: "\uD805[\uDE80-\uDEB9\uDEC0-\uDEC9]" }, { name: "Tamil", bmp: "\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA", astral: "\uD807[\uDFC0-\uDFF1\uDFFF]" }, { name: "Tangsa", astral: "\uD81A[\uDE70-\uDEBE\uDEC0-\uDEC9]" }, { name: "Tangut", astral: "\u{16FE0}|[\uD81C-\uD820][\uDC00-\uDFFF]|\uD821[\uDC00-\uDFF7]|\uD822[\uDC00-\uDEFF]|\uD823[\uDD00-\uDD08]" }, { name: "Telugu", bmp: "\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C77-\u0C7F" }, { name: "Thaana", bmp: "\u0780-\u07B1" }, { name: "Thai", bmp: "\u0E01-\u0E3A\u0E40-\u0E5B" }, { name: "Tibetan", bmp: "\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA" }, { name: "Tifinagh", bmp: "\u2D30-\u2D67\u2D6F\u2D70\u2D7F" }, { name: "Tirhuta", astral: "\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]" }, { name: "Toto", astral: "\uD838[\uDE90-\uDEAE]" }, { name: "Ugaritic", astral: "\uD800[\uDF80-\uDF9D\uDF9F]" }, { name: "Vai", bmp: "\uA500-\uA62B" }, { name: "Vithkuqi", astral: "\uD801[\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]" }, { name: "Wancho", astral: "\uD838[\uDEC0-\uDEF9\uDEFF]" }, { name: "Warang_Citi", astral: "\uD806[\uDCA0-\uDCF2\uDCFF]" }, { name: "Yezidi", astral: "\uD803[\uDE80-\uDEA9\uDEAB-\uDEAD\uDEB0\uDEB1]" }, { name: "Yi", bmp: "\uA000-\uA48C\uA490-\uA4C6" }, { name: "Zanabazar_Square", astral: "\uD806[\uDE00-\uDE47]" }]; /*! * XRegExp.matchRecursive 5.1.1 * <xregexp.com> * Steven Levithan (c) 2009-present MIT License */ ((e2) => { const d2 = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g, t2 = e2.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, d2], "g", { conjunction: "or" }); function u2(e3) { const d3 = /^(?:\(\?:\))*\^/, t3 = /\$(?:\(\?:\))*$/; return d3.test(e3) && t3.test(e3) && t3.test(e3.replace(/\\[\s\S]/g, "")) ? e3.replace(d3, "").replace(t3, "") : e3; } function i2(d3, t3) { const u3 = t3 ? "x" : ""; return e2.isRegExp(d3) ? d3.xregexp && d3.xregexp.captureNames ? d3 : e2(d3.source, u3) : e2(d3, u3); } function c(d3) { return d3 instanceof RegExp ? d3 : e2.escape(d3); } function n2(e3, d3, t3) { return e3[`subpattern${t3}`] = d3, e3; } function a2(e3, d3, t3) { return e3 + (d3 < t3.length - 1 ? `{{subpattern${d3}}}` : ""); } e2.tag = (d3) => (t3, ...u3) => { const i3 = u3.map(c).reduce(n2, {}), o2 = t3.raw.map(a2).join(""); return e2.build(o2, i3, d3); }, e2.build = (c2, n3, a3) => { const o2 = (a3 = a3 || "").includes("x"), r2 = /^\(\?([\w$]+)\)/.exec(c2); r2 && (a3 = e2._clipDuplicates(a3 + r2[1])); const s2 = {}; for (const e3 in n3) if (n3.hasOwnProperty(e3)) { const d3 = i2(n3[e3], o2); s2[e3] = { pattern: u2(d3.source), names: d3.xregexp.captureNames || [] }; } const f2 = i2(c2, o2); let l2, x2 = 0, h2 = 0; const b2 = [0], p2 = f2.xregexp.captureNames || [], m2 = f2.source.replace(t2, (e3, t3, u3, i3, c3) => { const n4 = t3 || u3; let a4, o3, r3; if (n4) { if (!s2.hasOwnProperty(n4)) throw new ReferenceError(`Undefined property ${e3}`); t3 ? (a4 = p2[h2], b2[++h2] = ++x2, o3 = `(?<${a4 || n4}>`) : o3 = "(?:", l2 = x2; return `${o3}${s2[n4].pattern.replace(d2, (e4, d3, t4) => { if (d3) { if (a4 = s2[n4].names[x2 - l2], ++x2, a4) return `(?<${a4}>`; } else if (t4) return r3 = +t4 - 1, s2[n4].names[r3] ? `\\k<${s2[n4].names[r3]}>` : `\\${+t4 + l2}`; return e4; })})`; } if (i3) { if (a4 = p2[h2], b2[++h2] = ++x2, a4) return `(?<${a4}>`; } else if (c3) return r3 = +c3 - 1, p2[r3] ? `\\k<${p2[r3]}>` : `\\${b2[+c3]}`; return e3; }); return e2(m2, a3); }; })(Q), ((e2) => { function d2(e3, d3, t2, u2) { return { name: e3, value: d3, start: t2, end: u2 }; } e2.matchRecursive = (t2, u2, i2, c, n2) => { n2 = n2 || {}; const a2 = (c = c || "").includes("g"), o2 = c.includes("y"), r2 = c.replace(/y/g, ""); let s2; u2 = e2(u2, r2), i2 = e2(i2, r2); let { escapeChar: f2 } = n2; if (f2) { if (f2.length > 1) throw new Error("Cannot use more than one escape character"); f2 = e2.escape(f2), s2 = new RegExp(`(?:${f2}[\\S\\s]|(?:(?!${e2.union([u2, i2], "", { conjunction: "or" }).source})[^${f2}])+)+`, c.replace(e2._hasNativeFlag("s") ? /[^imsu]/g : /[^imu]/g, "")); } let l2, x2, h2, b2, p2 = 0, m2 = 0, g2 = 0, y2 = 0; const k2 = n2.valueNames, w2 = []; for (; ; ) { if (f2 && (g2 += (e2.exec(t2, s2, g2, "sticky") || [""])[0].length), h2 = e2.exec(t2, u2, g2), b2 = e2.exec(t2, i2, g2), h2 && b2 && (h2.index <= b2.index ? b2 = null : h2 = null), h2 || b2) m2 = (h2 || b2).index, g2 = m2 + (h2 || b2)[0].length; else if (!p2) break; if (o2 && !p2 && m2 > y2) break; if (h2) p2 || (l2 = m2, x2 = g2), p2 += 1; else if (b2 && p2) { if (p2 -= 1, !p2 && (k2 ? (k2[0] && l2 > y2 && w2.push(d2(k2[0], t2.slice(y2, l2), y2, l2)), k2[1] && w2.push(d2(k2[1], t2.slice(l2, x2), l2, x2)), k2[2] && w2.push(d2(k2[2], t2.slice(x2, m2), x2, m2)), k2[3] && w2.push(d2(k2[3], t2.slice(m2, g2), m2, g2))) : w2.push(t2.slice(x2, m2)), y2 = g2, !a2)) break; } else { const d3 = n2.unbalanced || "error"; if ("skip" !== d3 && "skip-lazy" !== d3) { if ("error" === d3) { throw new Error(`Unbalanced ${b2 ? "right" : "left"} delimiter found in string at position ${b2 ? m2 : l2}`); } throw new Error(`Unsupported value for unbalanced: ${d3}`); } if (b2) b2 = null; else { if ("skip" === d3) { g2 = l2 + (e2.exec(t2, u2, l2, "sticky")[0].length || 1); } else g2 = l2 + 1; p2 = 0; } } m2 === g2 && (g2 += 1); } return a2 && w2.length > 0 && !o2 && k2 && k2[0] && t2.length > y2 && w2.push(d2(k2[0], t2.slice(y2), y2, t2.length)), w2; }; })(Q), ((e2) => { const d2 = {}, t2 = {}, u2 = e2._dec, i2 = e2._hex, c = e2._pad4; function n2(e3) { return e3.replace(/[- _]+/g, "").toLowerCase(); } function a2(e3) { const d3 = /^\\[xu](.+)/.exec(e3); return d3 ? u2(d3[1]) : e3.charCodeAt("\\" === e3[0] ? 1 : 0); } function o2(t3) { return d2[t3]["b!"] || (d2[t3]["b!"] = function(d3) { let t4 = "", u3 = -1; return e2.forEach(d3, /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, (e3) => { const d4 = a2(e3[1]); d4 > u3 + 1 && (t4 += `\\u${c(i2(u3 + 1))}`, d4 > u3 + 2 && (t4 += `-\\u${c(i2(d4 - 1))}`)), u3 = a2(e3[2] || e3[1]); }), u3 < 65535 && (t4 += `\\u${c(i2(u3 + 1))}`, u3 < 65534 && (t4 += "-\\uFFFF")), t4; }(d2[t3].bmp)); } function r2(e3, t3) { const u3 = t3 ? "a!" : "a="; return d2[e3][u3] || (d2[e3][u3] = function(e4, t4) { const u4 = d2[e4]; let i3 = ""; return u4.bmp && !u4.isBmpLast && (i3 = `[${u4.bmp}]${u4.astral ? "|" : ""}`), u4.astral && (i3 += u4.astral), u4.isBmpLast && u4.bmp && (i3 += `${u4.astral ? "|" : ""}[${u4.bmp}]`), t4 ? `(?:(?!${i3})(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))` : `(?:${i3})`; }(e3, t3)); } e2.addToken(/\\([pP])(?:{(\^?)(?:(\w+)=)?([^}]*)}|([A-Za-z]))/, (e3, u3, i3) => { const c2 = "Unknown Unicode token ", [a3, s2, f2, l2, x2, h2] = e3; let b2 = "P" === s2 || !!f2; const p2 = i3.includes("A"); let m2 = n2(h2 || x2), g2 = d2[m2]; if ("P" === s2 && f2) throw new SyntaxError("Invalid double negation " + a3); if (!d2.hasOwnProperty(m2)) throw new SyntaxError(c2 + a3); if (l2 && (!t2[l2] || !t2[l2][m2])) throw new SyntaxError(c2 + a3); if (g2.inverseOf) { if (m2 = n2(g2.inverseOf), !d2.hasOwnProperty(m2)) throw new ReferenceError(`${"Unicode token missing data " + a3} -> ${g2.inverseOf}`); g2 = d2[m2], b2 = !b2; } if (!g2.bmp && !p2) throw new SyntaxError("Astral mode required for Unicode token " + a3); if (p2) { if ("class" === u3) throw new SyntaxError("Astral mode does not support Unicode tokens within character classes"); return r2(m2, b2); } return "class" === u3 ? b2 ? o2(m2) : g2.bmp : (b2 ? "[^" : "[") + g2.bmp + "]"; }, { scope: "all", optionalFlags: "A", leadChar: "\\" }), e2.addUnicodeData = (u3, i3) => { i3 && (t2[i3] = {}); for (const e3 of u3) { if (!e3.name) throw new Error("Unicode token requires name"); if (!(e3.inverseOf || e3.bmp || e3.astral)) throw new Error("Unicode token has no character data " + e3.name); const u4 = n2(e3.name); if (d2[u4] = e3, i3 && (t2[i3][u4] = true), e3.alias) { const u5 = n2(e3.alias); d2[u5] = e3, i3 && (t2[i3][u5] = true); } } e2.cache.flush("patterns"); }, e2._getUnicodeProperty = (e3) => { const t3 = n2(e3); return d2[t3]; }; })(Q), ((e2) => { if (!e2.addUnicodeData) throw new ReferenceError("Unicode Base must be loaded before Unicode Categories"); e2.addUnicodeData(ee); })(Q), ((e2) => { if (!e2.addUnicodeData) throw new ReferenceError("Unicode Base must be loaded before Unicode Properties"); const d2 = de; d2.push({ name: "Assigned", inverseOf: "Cn" }), e2.addUnicodeData(d2); })(Q), ((e2) => { if (!e2.addUnicodeData) throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts"); e2.addUnicodeData(te, "Script"); })(Q); new class { constructor() { this.input = "", this.result = "", this.sentenceStart = false, this.acronym = Q("^(\\p{Lu}[.])+(?=$|[\\P{L}])"), this.quoted = Q('^"[^"]+"(?=$|[\\P{L}])'), this.innerCaps = Q("\\p{Ll}\\p{Lu}"), this.allCaps = Q("^\\p{Lu}+$"), this.aint = Q("^\\p{L}n't(?=$|[\\P{L}])"), this.word = Q("^\\p{L}+(-\\p{L}+)*"), this.and = Q("^\\p{Lu}&\\p{Lu}(?=$|[\\P{L}])"); } convert(e2) { this.input = e2, this.result = "", this.sentenceStart = true; let d2; for (this.input = this.input.replace(/[;:]\s+A\s/g, (e3) => e3.toLowerCase()), this.input = this.input.replace(/[–—]\s*A\s/g, (e3) => e3.toLowerCase()); this.input; ) (d2 = Q.exec(this.input, this.quoted)) || (d2 = Q.exec(this.input, this.acronym)) ? this.add(d2[0], "", true) : (d2 = Q.exec(this.input, this.aint)) ? this.add(d2[0], "", false) : (d2 = Q.exec(this.input, this.word)) ? this.add(d2[0], "-", false) : (d2 = Q.exec(this.input, this.and)) ? this.add(d2[0], "", true) : this.add(this.input[0], "", false); return function(e3, d3, t2) { for (const { start: u2, end: i2 } of t2) e3 = e3.substring(0, u2) + d3.substring(u2, i2) + e3.substring(i2); return e3; }(this.result, e2, []); } add(e2, d2, t2) { d2 ? e2 = e2.split(d2).map((e3, d3) => (t2 || this.sentenceStart) && 0 === d3 || Q.exec(e3, this.innerCaps) || Q.exec(e3, this.allCaps) ? e3 : e3.toLowerCase()).join(d2) : t2 || (e2 = e2.toLowerCase()), this.result += e2, this.input = this.input.substr(e2.length), e2.match(/^\s+$/) || (this.sentenceStart = Boolean(e2.match(/^[.?!]$/)) || 2 === e2.length && "." === e2[1]); } }(); BibFieldTypes = d, BibTypes = t; function imageForCrossrefType(ui2, type2) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l; switch (type2) { case crossRefTypes.monograph: case crossRefTypes.report: case crossRefTypes.journalArticle: case crossRefTypes.journalVolume: case crossRefTypes.journal: case crossRefTypes.journalIssue: case crossRefTypes.proceedingsArticle: case crossRefTypes.dissertation: case crossRefTypes.reportSeries: return [(_a = ui2.images.citations) == null ? void 0 : _a.article, (_b = ui2.images.citations) == null ? void 0 : _b.article_dark]; case crossRefTypes.bookSection: case crossRefTypes.bookPart: case crossRefTypes.bookSeries: case crossRefTypes.editedBook: case crossRefTypes.bookChapter: case crossRefTypes.book: case crossRefTypes.bookSet: case crossRefTypes.bookTrack: case crossRefTypes.referenceBook: return [(_c = ui2.images.citations) == null ? void 0 : _c.book, (_d = ui2.images.citations) == null ? void 0 : _d.book_dark]; case crossRefTypes.dataset: return [(_e = ui2.images.citations) == null ? void 0 : _e.data, (_f = ui2.images.citations) == null ? void 0 : _f.data_dark]; case crossRefTypes.referenceEntry: return [(_g = ui2.images.citations) == null ? void 0 : _g.entry, (_h = ui2.images.citations) == null ? void 0 : _h.entry_dark]; case crossRefTypes.postedContent: return [(_i = ui2.images.citations) == null ? void 0 : _i.web, (_j = ui2.images.citations) == null ? void 0 : _j.web_dark]; case crossRefTypes.other: case crossRefTypes.standard: case crossRefTypes.standardSeries: case crossRefTypes.peerReview: case crossRefTypes.component: case crossRefTypes.proceedingsSeries: case crossRefTypes.proceedings: default: return [(_k = ui2.images.citations) == null ? void 0 : _k.other, (_l = ui2.images.citations) == null ? void 0 : _l.other_dark]; } } function prettyType(ui2, type2) { switch (type2) { case crossRefTypes.monograph: return ui2.context.translateText("Monograph"); case crossRefTypes.report: return ui2.context.translateText("Report"); case crossRefTypes.journalArticle: return ui2.context.translateText("Journal"); case crossRefTypes.journalVolume: return ui2.context.translateText("Journal Volume"); case crossRefTypes.journal: return ui2.context.translateText("Journal"); case crossRefTypes.journalIssue: return ui2.context.translateText("Journal Issue"); case crossRefTypes.proceedingsArticle: case crossRefTypes.proceedingsSeries: case crossRefTypes.proceedings: return ui2.context.translateText("Proceedings"); case crossRefTypes.dissertation: return ui2.context.translateText("Dissertation"); case crossRefTypes.reportSeries: return ui2.context.translateText("Series"); case crossRefTypes.bookSection: return ui2.context.translateText("Book Section"); case crossRefTypes.bookPart: return ui2.context.translateText("Book Part"); case crossRefTypes.bookSeries: return ui2.context.translateText("Book Series"); case crossRefTypes.bookChapter: return ui2.context.translateText("Book Chapter"); case crossRefTypes.editedBook: case crossRefTypes.bookSet: case crossRefTypes.bookTrack: case crossRefTypes.referenceBook: return ui2.context.translateText("Book"); case crossRefTypes.dataset: return ui2.context.translateText("Dataset"); case crossRefTypes.referenceEntry: return ui2.context.translateText("Entry"); case crossRefTypes.postedContent: return ui2.context.translateText("Content"); case crossRefTypes.other: case crossRefTypes.standard: case crossRefTypes.standardSeries: case crossRefTypes.peerReview: case crossRefTypes.component: return ui2.context.translateText("Other"); default: return type2; } } function crossRefTypeToCSLType(type2) { switch (type2) { case crossRefTypes.bookSection: case crossRefTypes.bookChapter: case crossRefTypes.bookPart: return cslTypes.chapter; case crossRefTypes.book: case crossRefTypes.bookSet: case crossRefTypes.bookTrack: case crossRefTypes.referenceBook: case crossRefTypes.bookSeries: case crossRefTypes.editedBook: return cslTypes.book; case crossRefTypes.report: return cslTypes.report; case crossRefTypes.peerReview: return cslTypes.review; case crossRefTypes.journalArticle: case crossRefTypes.journalVolume: case crossRefTypes.journal: case crossRefTypes.journalIssue: return cslTypes.articleJournal; case crossRefTypes.referenceEntry: return cslTypes.entry; case crossRefTypes.monograph: case crossRefTypes.proceedingsArticle: case crossRefTypes.component: case crossRefTypes.other: return cslTypes.article; case crossRefTypes.proceedings: case crossRefTypes.proceedingsSeries: return cslTypes.paperConference; case crossRefTypes.reportSeries: return cslTypes.report; case crossRefTypes.standard: case crossRefTypes.standardSeries: return cslTypes.patent; case crossRefTypes.postedContent: return cslTypes.webpage; case crossRefTypes.dissertation: return cslTypes.thesis; case crossRefTypes.dataset: return cslTypes.dataset; default: return cslTypes.article; } } const crossRefTypes = { bookSection: "book-section", monograph: "monograph", report: "report", peerReview: "peer-review", bookTrack: "book-track", journalArticle: "journal-article", bookPart: "book-part", other: "other", book: "book", journalVolume: "journal-volume", bookSet: "book-set", referenceEntry: "reference-entry", proceedingsArticle: "proceedings-article", journal: "journal", component: "component", bookChapter: "book-chapter", proceedingsSeries: "proceedings-series", reportSeries: "report-series", proceedings: "proceedings", standard: "standard", referenceBook: "reference-book", postedContent: "posted-content", journalIssue: "journal-issue", dissertation: "dissertation", dataset: "dataset", bookSeries: "book-series", editedBook: "edited-book", standardSeries: "standard-series" }; function sanitizeForCiteproc(csl) { var _a; const sanitizeProperties = [ "ISSN", "ISBN", "title", "subject", "archive", "original-title", "short-title", "subtitle", "container-title", "short-container-title", "license" ]; const cslAny = { ...csl }; const keys2 = Object.keys(cslAny); keys2.filter((key2) => sanitizeProperties.includes(key2)).forEach((property) => { const value = cslAny[property]; if (value && Array.isArray(value)) { if (value.length > 0) { cslAny[property] = value[0]; } else { cslAny[property] = void 0; } } return cslAny; }); if ((_a = cslAny.issued) == null ? void 0 : _a.raw) { delete cslAny.issued.raw; } if (cslAny.license) { delete cslAny.license; } if (cslAny.contributor) { delete cslAny.contributor; } delete cslAny.abstract; delete cslAny.id; cslAny.type = ensureValidCSLType(cslAny.type); return cslAny; } function ensureValidCSLType(type2) { if (Object.values(cslTypes).includes(type2)) { return type2; } else { return crossRefTypeToCSLType(type2); } } function cslFromDoc(doc2) { const parsedYamlNodes = parseYamlNodes(doc2); const cslParsedYamls = parsedYamlNodes.filter( (parsedYaml) => parsedYaml.yaml !== null && typeof parsedYaml.yaml === "object" && parsedYaml.yaml.csl ); if (cslParsedYamls.length > 0) { const cslParsedYaml = cslParsedYamls[cslParsedYamls.length - 1]; const cslFile = cslParsedYaml.yaml.csl; return cslFile; } return void 0; } function cslDateToEDTFDate(date) { if (date["date-parts"]) { const paddedParts = date["date-parts"][0].map((part2) => { const partStr = part2 == null ? void 0 : part2.toString(); if ((partStr == null ? void 0 : partStr.length) === 1) { return `0${partStr}`; } return partStr; }); return paddedParts.join("-"); } else { return void 0; } } function joinAuthorNames(cslName) { const names = []; if (cslName.family) { names.push(cslName.family); } if (cslName.given) { names.push(cslName.given); } if (cslName.literal) { names.push(cslName.literal); } return names.join(" "); } function imageForType$1(images, type2) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x; switch (type2) { case cslTypes.article: case cslTypes.articleJournal: case cslTypes.articleMagazine: case cslTypes.articleNewspaper: case cslTypes.paperConference: case cslTypes.review: case cslTypes.reviewBook: return [(_a = images.citations) == null ? void 0 : _a.article, (_b = images.citations) == null ? void 0 : _b.article_dark]; case cslTypes.bill: case cslTypes.legislation: case cslTypes.legalCase: case cslTypes.treaty: return [(_c = images.citations) == null ? void 0 : _c.legal, (_d = images.citations) == null ? void 0 : _d.legal_dark]; case cslTypes.book: case cslTypes.chapter: case cslTypes.manuscript: case cslTypes.thesis: return [(_e = images.citations) == null ? void 0 : _e.book, (_f = images.citations) == null ? void 0 : _f.book_dark]; case cslTypes.broadcast: return [(_g = images.citations) == null ? void 0 : _g.broadcast, (_h = images.citations) == null ? void 0 : _h.broadcast_dark]; case cslTypes.dataset: return [(_i = images.citations) == null ? void 0 : _i.data, (_j = images.citations) == null ? void 0 : _j.data_dark]; case cslTypes.entry: case cslTypes.entryDictionary: case cslTypes.entryEncylopedia: return [(_k = images.citations) == null ? void 0 : _k.entry, (_l = images.citations) == null ? void 0 : _l.entry_dark]; case cslTypes.figure: case cslTypes.graphic: return [(_m = images.citations) == null ? void 0 : _m.image, (_n = images.citations) == null ? void 0 : _n.image_dark]; case cslTypes.map: return [(_o = images.citations) == null ? void 0 : _o.map, (_p = images.citations) == null ? void 0 : _p.map_dark]; case cslTypes.motionPicture: return [(_q = images.citations) == null ? void 0 : _q.movie, (_r = images.citations) == null ? void 0 : _r.movie_dark]; case cslTypes.musicalScore: case cslTypes.song: return [(_s = images.citations) == null ? void 0 : _s.song, (_t = images.citations) == null ? void 0 : _t.song_dark]; case cslTypes.post: case cslTypes.postWeblog: case cslTypes.webpage: return [(_u = images.citations) == null ? void 0 : _u.web, (_v = images.citations) == null ? void 0 : _v.web_dark]; case cslTypes.interview: case cslTypes.pamphlet: case cslTypes.personalCommunication: case cslTypes.report: case cslTypes.speech: default: return [(_w = images.citations) == null ? void 0 : _w.other, (_x = images.citations) == null ? void 0 : _x.other_dark]; } } const cslTypes = { article: "article", articleMagazine: "article-magazine", articleNewspaper: "article-newspaper", articleJournal: "article-journal", bill: "bill", book: "book", broadcast: "broadcast", chapter: "chapter", dataset: "dataset", entry: "entry", entryDictionary: "entry-dictionary", entryEncylopedia: "entry-encyclopedia", figure: "figure", graphic: "graphic", interview: "interview", legislation: "legislation", legalCase: "legal_case", manuscript: "manuscript", map: "map", motionPicture: "motion_picture", musicalScore: "musical_score", pamphlet: "pamphlet", paperConference: "paper-conference", patent: "patent", post: "post", postWeblog: "post-weblog", personalCommunication: "personal_communication", report: "report", review: "review", reviewBook: "review-book", song: "song", speech: "speech", thesis: "thesis", treaty: "treaty", webpage: "webpage" }; const kCslDOMParser = cslDOMParser(); function cslTextToProsemirrorNode(text2) { const domParser = new window.DOMParser(); const doc2 = domParser.parseFromString(text2, "text/html"); if (doc2) { const pmNode = kCslDOMParser.parse(doc2.body, { preserveWhitespace: "full" }); return pmNode; } else { return null; } } function cslDOMParser() { return DOMParser$1.fromSchema(cslSchema()); } function cslSchema() { const nodes2 = { doc: { content: "inline*" }, text: { group: "inline", toDOM(node2) { return node2.text; } } }; const marks = {}; marks.strong = tagSpec("b"); marks.em = tagSpec("i"); marks.sup = tagSpec("sup"); marks.sub = tagSpec("sub"); marks.smallcaps = spanSpec("smallcaps"); marks.nocase = spanSpec("nocase"); return new Schema$2({ nodes: nodes2, marks }); } function tagSpec(tag) { return { parseDOM: [{ tag }], toDOM() { return [tag]; } }; } function spanSpec(clz) { return { parseDOM: [{ tag: `span[class*='${clz}']` }], toDOM() { return ["span", { class: clz }]; } }; } const lanagugeMappings = { acadian: { csl: "fr-CA", bibtex: "acadian" }, afrikaans: { csl: "af-ZA", bibtex: "afrikaans" }, arabic: { csl: "ar", bibtex: "arabic" }, basque: { csl: "eu", bibtex: "basque" }, bulgarian: { csl: "bg-BG", bibtex: "bulgarian" }, catalan: { csl: "ca-AD", bibtex: "catalan" }, chinese: { csl: "zh-CN", bibtex: "pinyin" }, croatian: { csl: "hr-HR", bibtex: "croatian" }, czech: { csl: "cs-CZ", bibtex: "czech" }, danish: { csl: "da-DK", bibtex: "danish" }, dutch: { csl: "nl-NL", bibtex: "dutch" }, auenglish: { csl: "en-GB", bibtex: "australian" }, caenglish: { csl: "en-US", bibtex: "canadian" }, nzenglish: { csl: "en-GB", bibtex: "newzealand" }, ukenglish: { csl: "en-GB", bibtex: "ukenglish" }, usenglish: { csl: "en-US", bibtex: "usenglish" }, estonian: { csl: "et-EE", bibtex: "estonian" }, finnish: { csl: "fi-FI", bibtex: "finnish" }, french: { csl: "fr-FR", bibtex: "french" }, cafrench: { csl: "fr-CA", bibtex: "canadien" }, german: { csl: "de-DE", bibtex: "ngerman" }, atgerman: { csl: "de-AT", bibtex: "naustrian" }, greek: { csl: "el-GR", bibtex: "greek" }, hebrew: { csl: "he-IL", bibtex: "hebrew" }, hungarian: { csl: "hu-HU", bibtex: "hungarian" }, icelandic: { csl: "is-IS", bibtex: "icelandic" }, italian: { csl: "it-IT", bibtex: "italian" }, japanese: { csl: "ja-JP", bibtex: "japanese" }, latin: { csl: "la", bibtex: "latin" }, latvian: { csl: "lv-LV", bibtex: "latvian" }, lithuanian: { csl: "lt-LT", bibtex: "lithuanian" }, magyar: { csl: "hu-HU", bibtex: "magyar" }, mongolian: { csl: "mn-MN", bibtex: "mongolian" }, norwegian: { csl: "nb-NO", bibtex: "norsk" }, newnorwegian: { csl: "nn-NO", bibtex: "nynorsk" }, farsi: { csl: "fa-IR", bibtex: "farsi" }, polish: { csl: "pl-PL", bibtex: "polish" }, portuguese: { csl: "pt-PT", bibtex: "portuguese" }, brportuguese: { csl: "pt-BR", bibtex: "brazilian" }, romanian: { csl: "ro-RO", bibtex: "romanian" }, russian: { csl: "ru-RU", bibtex: "russian" }, serbian: { csl: "sr-RS", bibtex: "serbian" }, cyrillicserbian: { csl: "sr-RS", bibtex: "serbianc" }, slovak: { csl: "sk-SK", bibtex: "slovak" }, slovene: { csl: "sl-SL", bibtex: "slovene" }, spanish: { csl: "es-ES", bibtex: "spanish" }, swedish: { csl: "sv-SE", bibtex: "swedish" }, thai: { csl: "th-TH", bibtex: "thai" }, turkish: { csl: "tr-TR", bibtex: "turkish" }, ukrainian: { csl: "uk-UA", bibtex: "ukrainian" }, vietnamese: { csl: "vi-VN", bibtex: "vietnamese" } }; const FieldMap = { abstract: { type: "f_long_literal", bibtex: "abstract", csl: "abstract" }, author: { type: "l_name", bibtex: "author", csl: "author" }, bookauthor: { type: "l_name", bibtex: "author", csl: "container-author" }, containerTitle: { type: "f_title", bibtex: (bibTexType) => { switch (bibTexType) { case "conference": case "inproceedings": case "incollection": return "booktitle"; default: return "journal"; } }, csl: "container-title" }, chapter: { type: "f_literal", bibtex: "chapter", csl: "chapter-number" }, date: { type: "f_date", bibtex: "date", csl: "issued" }, doi: { type: "f_verbatim", bibtex: "doi", csl: "DOI" }, edition: { type: "f_integer", bibtex: "edition", csl: "edition" }, editor: { type: "l_name", bibtex: "editor", csl: "editor" }, eventdate: { type: "f_date", bibtex: "date", csl: "event-date" }, eventtitle: { type: "f_title", bibtex: "title", csl: "event" }, howpublished: { type: "f_literal", bibtex: "howpublished", csl: "medium" }, issue: { type: "f_literal", bibtex: "issue", csl: "issue" }, journaltitle: { type: "f_literal", bibtex: "journal", csl: "container-title" }, langid: { type: "f_key", bibtex: "langid", csl: "language", options: lanagugeMappings }, location: { type: "l_literal", bibtex: "address", csl: "publisher-place" }, note: { type: "f_literal", bibtex: "note", csl: "note" }, number: { type: "f_literal", bibtex: "number", csl: "collection-number" }, pages: { type: "l_range", bibtex: "pages", csl: "page" }, publisher: { type: "l_literal", bibtex: "publisher", csl: "publisher" }, series: { type: "f_literal", bibtex: "series", csl: "collection-title" }, title: { type: "f_title", bibtex: "title", csl: "title" }, url: { type: "f_uri", bibtex: "url", csl: "URL" }, volume: { type: "f_literal", bibtex: "volume", csl: "volume" } }; function typeMapping(cslType) { switch (cslType) { case cslTypes.article: case cslTypes.articleJournal: case cslTypes.articleMagazine: case cslTypes.articleNewspaper: return { bibtex: BibTextTypes.article.type, ...BibTextTypes.article.fields }; case cslTypes.book: return { bibtex: BibTextTypes.book.type, ...BibTextTypes.book.fields }; case cslTypes.chapter: return { bibtex: BibTextTypes.inbook.type, ...BibTextTypes.inbook.fields }; case cslTypes.thesis: return { bibtex: BibTextTypes.phdthesis.type, ...BibTextTypes.phdthesis.fields }; case cslTypes.manuscript: return { bibtex: BibTextTypes.unpublished.type, ...BibTextTypes.unpublished.fields }; case cslTypes.paperConference: return { bibtex: BibTextTypes.inproceedings.type, ...BibTextTypes.inproceedings.fields }; case cslTypes.report: return { bibtex: BibTextTypes.techreport.type, ...BibTextTypes.techreport.fields }; case cslTypes.bill: case cslTypes.graphic: case cslTypes.legalCase: case cslTypes.legislation: case cslTypes.motionPicture: case cslTypes.song: default: return { bibtex: BibTextTypes.misc.type, ...BibTextTypes.misc.fields }; } } function bibtextTypeToCSLType(bibtexType) { switch (bibtexType) { case BibTextTypes.article.type: return cslTypes.articleJournal; case BibTextTypes.proceedings.type: case BibTextTypes.manual.type: case BibTextTypes.book.type: return cslTypes.book; case BibTextTypes.booklet.type: return cslTypes.pamphlet; case BibTextTypes.inbook.type: case BibTextTypes.incollection.type: return cslTypes.chapter; case BibTextTypes.conference.type: case BibTextTypes.inproceedings.type: return cslTypes.paperConference; case BibTextTypes.mastersthesis.type: case BibTextTypes.phdthesis.type: return cslTypes.thesis; case BibTextTypes.techreport.type: return cslTypes.report; case BibTextTypes.unpublished.type: return cslTypes.manuscript; case BibTextTypes.misc.type: default: return cslTypes.article; } } const BibTextTypes = { article: { type: "article", fields: { fieldsRequired: ["author", "title", "journal", "year"], fieldsOptional: ["volume", "number", "pages", "month", "note"], fieldsEitherOr: [] } }, book: { type: "book", fields: { fieldsRequired: ["title", "publisher", "year"], fieldsOptional: ["volume", "number", "series", "address", "edition", "month", "note"], fieldsEitherOr: ["author", "editor"] } }, booklet: { type: "booklet", fields: { fieldsRequired: ["title"], fieldsOptional: ["author", "howpublished", "address", "month", "year", "note"], fieldsEitherOr: [] } }, conference: { type: "conference", fields: { fieldsRequired: ["author", "title", "booktitle", "year"], fieldsOptional: [ "editor", "volume", "number", "series", "pages", "address", "month", "organization", "publisher", "note" ], fieldsEitherOr: [] } }, inbook: { type: "inbook", fields: { fieldsRequired: ["title", "chapter", "pages", "publisher", "year"], fieldsOptional: ["volume", "number", "series", "type", "address", "edition", "month", "note"], fieldsEitherOr: ["author", "editor"] } }, incollection: { type: "incollection", fields: { fieldsRequired: ["author", "title", "booktitle", "publisher", "year"], fieldsOptional: [ "editor", "volume", "number", "series", "type", "chapter", "pages", "address", "edition", "month", "note" ], fieldsEitherOr: [] } }, inproceedings: { type: "inproceedings", fields: { fieldsRequired: ["author", "title", "booktitle", "year"], fieldsOptional: [ "editor", "volume", "number", "series", "pages", "address", "month", "organization", "publisher", "note" ], fieldsEitherOr: [] } }, manual: { type: "manual", fields: { fieldsRequired: ["title"], fieldsOptional: ["author", "organization", "address", "edition", "month", "year", "note"], fieldsEitherOr: [] } }, mastersthesis: { type: "mastersthesis", fields: { fieldsRequired: ["author", "title", "school", "year"], fieldsOptional: ["type", "address", "month", "note"], fieldsEitherOr: [] } }, misc: { type: "misc", fields: { fieldsRequired: [], fieldsOptional: ["author", "title", "howpublished", "month", "year", "note"], fieldsEitherOr: [] } }, phdthesis: { type: "phdthesis", fields: { fieldsRequired: ["author", "title", "school", "year"], fieldsOptional: ["type", "address", "month", "note"], fieldsEitherOr: [] } }, proceedings: { type: "proceedings", fields: { fieldsRequired: ["title", "year"], fieldsOptional: ["editor", "volume", "number", "series", "address", "month", "organization", "publisher", "note"], fieldsEitherOr: [] } }, techreport: { type: "techreport", fields: { fieldsRequired: ["author", "title", "institution", "year"], fieldsOptional: ["type", "number", "address", "month", "note"], fieldsEitherOr: [] } }, unpublished: { type: "unpublished", fields: { fieldsRequired: ["author", "title", "note"], fieldsOptional: ["month", "year"], fieldsEitherOr: [] } } }; const FormattingTags = { strong: { open: "\\textbf{", close: "}", verbatim: false }, em: { open: "\\emph{", close: "}", verbatim: false }, sub: { open: "\\textsubscript{", close: "}", verbatim: false }, sup: { open: "\\textsuperscript{", close: "}", verbatim: false }, nocase: { open: "{{", close: "}}", verbatim: false }, smallcaps: { open: "\\textsc{", close: "}", verbatim: false }, enquote: { open: "\\enquote{", close: "}", verbatim: false }, math: { open: "$", close: "$", verbatim: false }, url: { open: "\\url{", close: "}", verbatim: true } }; const characters = { 34: { id: "U00022", decimal: 34, character: '"', latex: '"' }, 35: { id: "U00023", decimal: 35, character: "#", latex: "\\#" }, 36: { id: "U00024", decimal: 36, character: "$", latex: "\\$" }, 94: { id: "U0005e", decimal: 94, character: "^", latex: "\\textasciicircum" }, 95: { id: "U0005f", decimal: 95, character: "_", latex: "\\_" }, 123: { id: "U0007b", decimal: 123, character: "{", latex: "\\textbraceleft" }, 125: { id: "U0007d", decimal: 125, character: "}", latex: "\\textbraceright" }, 256: { id: "U00100", decimal: 256, character: "\u0100", latex: "\\={A}" }, 257: { id: "U00101", decimal: 257, character: "\u0101", latex: "\\={a}" }, 258: { id: "U00102", decimal: 258, character: "\u0102", latex: "\\u{A}" }, 259: { id: "U00103", decimal: 259, character: "\u0103", latex: "\\u{a}" }, 260: { id: "U00104", decimal: 260, character: "\u0104", latex: "\\k{A}" }, 261: { id: "U00105", decimal: 261, character: "\u0105", latex: "\\k{a}" }, 262: { id: "U00106", decimal: 262, character: "\u0106", latex: "\\'{C}" }, 263: { id: "U00107", decimal: 263, character: "\u0107", latex: "\\'{c}" }, 264: { id: "U00108", decimal: 264, character: "\u0108", latex: "\\^{C}" }, 265: { id: "U00109", decimal: 265, character: "\u0109", latex: "\\^{c}" }, 266: { id: "U0010A", decimal: 266, character: "\u010A", latex: "\\.{C}" }, 267: { id: "U0010B", decimal: 267, character: "\u010B", latex: "\\.{c}" }, 268: { id: "U0010C", decimal: 268, character: "\u010C", latex: "\\v{C}" }, 269: { id: "U0010D", decimal: 269, character: "\u010D", latex: "\\v{c}" }, 270: { id: "U0010E", decimal: 270, character: "\u010E", latex: "\\v{D}" }, 271: { id: "U0010F", decimal: 271, character: "\u010F", latex: "\\v{d}" }, 272: { id: "U00110", decimal: 272, character: "\u0110", latex: "\\DJ" }, 273: { id: "U00111", decimal: 273, character: "\u0111", latex: "\\dj" }, 274: { id: "U00112", decimal: 274, character: "\u0112", latex: "\\={E}" }, 275: { id: "U00113", decimal: 275, character: "\u0113", latex: "\\={e}" }, 276: { id: "U00114", decimal: 276, character: "\u0114", latex: "\\u{E}" }, 277: { id: "U00115", decimal: 277, character: "\u0115", latex: "\\u{e}" }, 278: { id: "U00116", decimal: 278, character: "\u0116", latex: "\\.{E}" }, 279: { id: "U00117", decimal: 279, character: "\u0117", latex: "\\.{e}" }, 280: { id: "U00118", decimal: 280, character: "\u0118", latex: "\\k{E}" }, 281: { id: "U00119", decimal: 281, character: "\u0119", latex: "\\k{e}" }, 282: { id: "U0011A", decimal: 282, character: "\u011A", latex: "\\v{E}" }, 283: { id: "U0011B", decimal: 283, character: "\u011B", latex: "\\v{e}" }, 284: { id: "U0011C", decimal: 284, character: "\u011C", latex: "\\^{G}" }, 285: { id: "U0011D", decimal: 285, character: "\u011D", latex: "\\^{g}" }, 286: { id: "U0011E", decimal: 286, character: "\u011E", latex: "\\u{G}" }, 287: { id: "U0011F", decimal: 287, character: "\u011F", latex: "\\u{g}" }, 288: { id: "U00120", decimal: 288, character: "\u0120", latex: "\\.{G}" }, 289: { id: "U00121", decimal: 289, character: "\u0121", latex: "\\.{g}" }, 290: { id: "U00122", decimal: 290, character: "\u0122", latex: "\\c{G}" }, 291: { id: "U00123", decimal: 291, character: "\u0123", latex: "\\c{g}" }, 292: { id: "U00124", decimal: 292, character: "\u0124", latex: "\\^{H}" }, 293: { id: "U00125", decimal: 293, character: "\u0125", latex: "\\^{h}" }, 296: { id: "U00128", decimal: 296, character: "\u0128", latex: "\\~{I}" }, 297: { id: "U00129", decimal: 297, character: "\u0129", latex: "\\~{\\i}" }, 298: { id: "U0012A", decimal: 298, character: "\u012A", latex: "\\={I}" }, 299: { id: "U0012B", decimal: 299, character: "\u012B", latex: "\\={\\i}" }, 300: { id: "U0012C", decimal: 300, character: "\u012C", latex: "\\u{I}" }, 301: { id: "U0012D", decimal: 301, character: "\u012D", latex: "\\u{\\i}" }, 302: { id: "U0012E", decimal: 302, character: "\u012E", latex: "\\k{I}" }, 303: { id: "U0012F", decimal: 303, character: "\u012F", latex: "\\k{i}" }, 304: { id: "U00130", decimal: 304, character: "\u0130", latex: "\\.{I}" }, 305: { id: "U00131", decimal: 305, character: "\u0131", latex: "\\i" }, 306: { id: "U00132", decimal: 306, character: "\u0132", latex: "IJ" }, 307: { id: "U00133", decimal: 307, character: "\u0133", latex: "ij" }, 308: { id: "U00134", decimal: 308, character: "\u0134", latex: "\\^{J}" }, 309: { id: "U00135", decimal: 309, character: "\u0135", latex: "\\^{\\j}" }, 310: { id: "U00136", decimal: 310, character: "\u0136", latex: "\\c{K}" }, 311: { id: "U00137", decimal: 311, character: "\u0137", latex: "\\c{k}" }, 313: { id: "U00139", decimal: 313, character: "\u0139", latex: "\\'{L}" }, 314: { id: "U0013A", decimal: 314, character: "\u013A", latex: "\\'{l}" }, 315: { id: "U0013B", decimal: 315, character: "\u013B", latex: "\\c{L}" }, 316: { id: "U0013C", decimal: 316, character: "\u013C", latex: "\\c{l}" }, 317: { id: "U0013D", decimal: 317, character: "\u013D", latex: "\\v{L}" }, 318: { id: "U0013E", decimal: 318, character: "\u013E", latex: "\\v{l}" }, 321: { id: "U00141", decimal: 321, character: "\u0141", latex: "\\L" }, 322: { id: "U00142", decimal: 322, character: "\u0142", latex: "\\l" }, 323: { id: "U00143", decimal: 323, character: "\u0143", latex: "\\'{N}" }, 324: { id: "U00144", decimal: 324, character: "\u0144", latex: "\\'{n}" }, 325: { id: "U00145", decimal: 325, character: "\u0145", latex: "\\c{N}" }, 326: { id: "U00146", decimal: 326, character: "\u0146", latex: "\\c{n}" }, 327: { id: "U00147", decimal: 327, character: "\u0147", latex: "\\v{N}" }, 328: { id: "U00148", decimal: 328, character: "\u0148", latex: "\\v{n}" }, 329: { id: "U00149", decimal: 329, character: "\u0149", latex: "'n" }, 330: { id: "U0014A", decimal: 330, character: "\u014A", latex: "\\NG" }, 331: { id: "U0014B", decimal: 331, character: "\u014B", latex: "\\ng" }, 332: { id: "U0014C", decimal: 332, character: "\u014C", latex: "\\={O}" }, 333: { id: "U0014D", decimal: 333, character: "\u014D", latex: "\\={o}" }, 334: { id: "U0014E", decimal: 334, character: "\u014E", latex: "\\u{O}" }, 335: { id: "U0014F", decimal: 335, character: "\u014F", latex: "\\u{o}" }, 336: { id: "U00150", decimal: 336, character: "\u0150", latex: "{\\H O}" }, 337: { id: "U00151", decimal: 337, character: "\u0151", latex: "{\\H o}" }, 338: { id: "U00152", decimal: 338, character: "\u0152", latex: "\\OE" }, 339: { id: "U00153", decimal: 339, character: "\u0153", latex: "\\oe" }, 340: { id: "U00154", decimal: 340, character: "\u0154", latex: "\\'{R}" }, 341: { id: "U00155", decimal: 341, character: "\u0155", latex: "\\'{r}" }, 342: { id: "U00156", decimal: 342, character: "\u0156", latex: "\\c{R}" }, 343: { id: "U00157", decimal: 343, character: "\u0157", latex: "\\c{r}" }, 344: { id: "U00158", decimal: 344, character: "\u0158", latex: "\\v{R}" }, 345: { id: "U00159", decimal: 345, character: "\u0159", latex: "\\v{r}" }, 346: { id: "U0015A", decimal: 346, character: "\u015A", latex: "\\'{S}" }, 347: { id: "U0015B", decimal: 347, character: "\u015B", latex: "\\'{s}" }, 348: { id: "U0015C", decimal: 348, character: "\u015C", latex: "\\^{S}" }, 349: { id: "U0015D", decimal: 349, character: "\u015D", latex: "\\^{s}" }, 350: { id: "U0015E", decimal: 350, character: "\u015E", latex: "\\c{S}" }, 351: { id: "U0015F", decimal: 351, character: "\u015F", latex: "\\c{s}" }, 352: { id: "U00160", decimal: 352, character: "\u0160", latex: "\\v{S}" }, 353: { id: "U00161", decimal: 353, character: "\u0161", latex: "\\v{s}" }, 354: { id: "U00162", decimal: 354, character: "\u0162", latex: "\\c{T}" }, 355: { id: "U00163", decimal: 355, character: "\u0163", latex: "\\c{t}" }, 356: { id: "U00164", decimal: 356, character: "\u0164", latex: "\\v{T}" }, 357: { id: "U00165", decimal: 357, character: "\u0165", latex: "\\v{t}" }, 360: { id: "U00168", decimal: 360, character: "\u0168", latex: "\\~{U}" }, 361: { id: "U00169", decimal: 361, character: "\u0169", latex: "\\~{u}" }, 362: { id: "U0016A", decimal: 362, character: "\u016A", latex: "\\={U}" }, 363: { id: "U0016B", decimal: 363, character: "\u016B", latex: "\\={u}" }, 364: { id: "U0016C", decimal: 364, character: "\u016C", latex: "\\u{U}" }, 365: { id: "U0016D", decimal: 365, character: "\u016D", latex: "\\u{u}" }, 366: { id: "U0016E", decimal: 366, character: "\u016E", latex: "\\r{U}" }, 367: { id: "U0016F", decimal: 367, character: "\u016F", latex: "\\r{u}" }, 368: { id: "U00170", decimal: 368, character: "\u0170", latex: "{\\H U}" }, 369: { id: "U00171", decimal: 369, character: "\u0171", latex: "{\\H u}" }, 370: { id: "U00172", decimal: 370, character: "\u0172", latex: "\\k{U}" }, 371: { id: "U00173", decimal: 371, character: "\u0173", latex: "\\k{u}" }, 372: { id: "U00174", decimal: 372, character: "\u0174", latex: "\\^{W}" }, 373: { id: "U00175", decimal: 373, character: "\u0175", latex: "\\^{w}" }, 374: { id: "U00176", decimal: 374, character: "\u0176", latex: "\\^{Y}" }, 375: { id: "U00177", decimal: 375, character: "\u0177", latex: "\\^{y}" }, 376: { id: "U00178", decimal: 376, character: "\u0178", latex: '\\"{Y}' }, 377: { id: "U00179", decimal: 377, character: "\u0179", latex: "\\'{Z}" }, 378: { id: "U0017A", decimal: 378, character: "\u017A", latex: "\\'{z}" }, 379: { id: "U0017B", decimal: 379, character: "\u017B", latex: "\\.{Z}" }, 380: { id: "U0017C", decimal: 380, character: "\u017C", latex: "\\.{z}" }, 381: { id: "U0017D", decimal: 381, character: "\u017D", latex: "\\v{Z}" }, 382: { id: "U0017E", decimal: 382, character: "\u017E", latex: "\\v{z}" }, 402: { id: "U00192", decimal: 402, character: "\u0192", latex: "\\textflorin" }, 501: { id: "U001F5", decimal: 501, character: "\u01F5", latex: "\\'{g}" }, 609: { id: "U00261", decimal: 609, character: "\u0261", latex: "g" }, 700: { id: "U002BC", decimal: 700, character: "\u02BC", latex: "'" }, 711: { id: "U002C7", decimal: 711, character: "\u02C7", latex: "\\textasciicaron" }, 714: { id: "U002ca", decimal: 714, character: "\u02CA", latex: "\\textasciitilde" }, 728: { id: "U002D8", decimal: 728, character: "\u02D8", latex: "\\textasciibreve" }, 729: { id: "U002D9", decimal: 729, character: "\u02D9", latex: "\\textperiodcentered" }, 730: { id: "U002DA", decimal: 730, character: "\u02DA", latex: "\\r{}" }, 731: { id: "U002DB", decimal: 731, character: "\u02DB", latex: "\\k{}" }, 732: { id: "U002DC", decimal: 732, character: "\u02DC", latex: "\\texttildelow" }, 733: { id: "U002dd", decimal: 733, character: "\u02DD", latex: "\\textacutedbl" }, 768: { id: "U00300", decimal: 768, character: "\u0300", latex: "\\`", ungrouped: true }, 769: { id: "U00301", decimal: 769, character: "\u0301", latex: "\\'", ungrouped: true }, 770: { id: "U00302", decimal: 770, character: "\u0302", latex: "\\^", ungrouped: true }, 771: { id: "U00303", decimal: 771, character: "\u0303", latex: "\\~", ungrouped: true }, 772: { id: "U00304", decimal: 772, character: "\u0304", latex: "\\=", ungrouped: true }, 774: { id: "U00306", decimal: 774, character: "\u0306", latex: "\\u", ungrouped: true }, 775: { id: "U00307", decimal: 775, character: "\u0307", latex: "\\.", ungrouped: true }, 776: { id: "U00308", decimal: 776, character: "\u0308", latex: '\\"', ungrouped: true }, 778: { id: "U0030A", decimal: 778, character: "\u030A", latex: "\\r", ungrouped: true }, 780: { id: "U0030C", decimal: 780, character: "\u030C", latex: "\\v", ungrouped: true }, 807: { id: "U00327", decimal: 807, character: "\u0327", latex: "\\c", ungrouped: true }, 808: { id: "U00328", decimal: 808, character: "\u0328", latex: "\\k", ungrouped: true }, 902: { id: "U00386", decimal: 902, character: "\u0386", latex: "\\'{A}" }, 904: { id: "U00388", decimal: 904, character: "\u0388", latex: "\\'{E}" }, 905: { id: "U00389", decimal: 905, character: "\u0389", latex: "\\'{H}" }, 906: { id: "U0038A", decimal: 906, character: "\u038A", latex: "\\'{}{I}" }, 908: { id: "U0038C", decimal: 908, character: "\u038C", latex: "\\'{}O" }, 910: { id: "U0038E", decimal: 910, character: "\u038E", latex: "$\\mathrm{'Y}$" }, 911: { id: "U0038F", decimal: 911, character: "\u038F", latex: "$\\mathrm{'\\Omega}$" }, 924: { id: "U0039C", decimal: 924, character: "\u039C", latex: "M" }, 925: { id: "U0039D", decimal: 925, character: "\u039D", latex: "N" }, 927: { id: "U0039F", decimal: 927, character: "\u039F", latex: "O" }, 938: { id: "U003AA", decimal: 938, character: "\u03AA", latex: "$\\mathrm{\\ddot{I}}$" }, 939: { id: "U003AB", decimal: 939, character: "\u03AB", latex: "$\\mathrm{\\ddot{Y}}$" }, 940: { id: "U003AC", decimal: 940, character: "\u03AC", latex: "\\'{$\\alpha$}" }, 959: { id: "U003BF", decimal: 959, character: "\u03BF", latex: "o" }, 972: { id: "U003CC", decimal: 972, character: "\u03CC", latex: "\\'{o}" }, 8194: { id: "U02002", decimal: 8194, character: "\u2002", latex: "\\hspace{0.6em}" }, 8195: { id: "U02003", decimal: 8195, character: "\u2003", latex: "\\hspace{1em}" }, 8196: { id: "U02004", decimal: 8196, character: "\u2004", latex: "\\hspace{0.33em}" }, 8197: { id: "U02005", decimal: 8197, character: "\u2005", latex: "\\hspace{0.25em}" }, 8198: { id: "U02006", decimal: 8198, character: "\u2006", latex: "\\hspace{0.166em}" }, 8199: { id: "U02007", decimal: 8199, character: "\u2007", latex: "\\hphantom{0}" }, 8200: { id: "U02008", decimal: 8200, character: "\u2008", latex: "\\hphantom{,}" }, 8201: { id: "U02009", decimal: 8201, character: "\u2009", latex: "\\hspace{0.167em}" }, 8204: { id: "U00200c", decimal: 8204, character: "\u200C", latex: "\\textcompwordmark" }, 8208: { id: "U02010", decimal: 8208, character: "\u2010", latex: "-" }, 8209: { id: "U2011", decimal: 8209, character: "\u2011", latex: "\\nobreakdash-" }, 8211: { id: "U02013", decimal: 8211, character: "\u2013", latex: "\\textendash" }, 8212: { id: "U02014", decimal: 8212, character: "\u2014", latex: "\\textemdash" }, 8213: { id: "U02015", decimal: 8213, character: "\u2015", latex: "\\rule{1em}{1pt}" }, 8216: { id: "U02018", decimal: 8216, character: "\u2018", latex: "\\textquoteleft" }, 8217: { id: "U02019", decimal: 8217, character: "\u2019", latex: "\\textquoteright" }, 8218: { id: "U0201A", decimal: 8218, character: "\u201A", latex: "," }, 8220: { id: "U0201C", decimal: 8220, character: "\u201C", latex: "\\textquotedblleft" }, 8221: { id: "U0201D", decimal: 8221, character: "\u201D", latex: "\\textquotedblright" }, 8222: { id: "U0201E", decimal: 8222, character: "\u201E", latex: ",," }, 8224: { id: "U02020", decimal: 8224, character: "\u2020", latex: "\\textdagger" }, 8225: { id: "U02021", decimal: 8225, character: "\u2021", latex: "\\textdaggerdbl" }, 8226: { id: "U02022", decimal: 8226, character: "\u2022", latex: "\\textbullet" }, 8228: { id: "U02024", decimal: 8228, character: "\u2024", latex: "." }, 8229: { id: "U02025", decimal: 8229, character: "\u2025", latex: ".." }, 8230: { id: "U02026", decimal: 8230, character: "\u2026", latex: "\\ldots" }, 8240: { id: "U02030", decimal: 8240, character: "\u2030", latex: "\\textperthousand" }, 8241: { id: "U02031", decimal: 8241, character: "\u2031", latex: "\\textpertenthousand" }, 8242: { id: "U02032", decimal: 8242, character: "\u2032", latex: "{'}" }, 8243: { id: "U02033", decimal: 8243, character: "\u2033", latex: "{''}" }, 8244: { id: "U02034", decimal: 8244, character: "\u2034", latex: "{'''}" }, 8249: { id: "U02039", decimal: 8249, character: "\u2039", latex: "\\guilsinglleft" }, 8250: { id: "U0203A", decimal: 8250, character: "\u203A", latex: "\\guilsinglright" }, 8279: { id: "U02057", decimal: 8279, character: "\u2057", latex: "''''" }, 8288: { id: "U02060", decimal: 8288, character: "\u2060", latex: "\\nolinebreak" }, 8364: { id: "U020AC", decimal: 8364, character: "\u20AC", latex: "\\mbox{\\texteuro}" }, 8450: { id: "U02102", decimal: 8450, character: "\u2102", latex: "$\\mathbb{C}$" }, 8460: { id: "U0210C", decimal: 8460, character: "\u210C", latex: "$\\mathfrak{H}$" }, 8461: { id: "U0210D", decimal: 8461, character: "\u210D", latex: "$\\mathbb{H}$" }, 8465: { id: "U02111", decimal: 8465, character: "\u2111", latex: "$\\mathfrak{I}$" }, 8469: { id: "U02115", decimal: 8469, character: "\u2115", latex: "$\\mathbb{N}$" }, 8473: { id: "U02119", decimal: 8473, character: "\u2119", latex: "$\\mathbb{P}$" }, 8474: { id: "U0211A", decimal: 8474, character: "\u211A", latex: "$\\mathbb{Q}$" }, 8476: { id: "U0211C", decimal: 8476, character: "\u211C", latex: "$\\mathfrak{R}$" }, 8477: { id: "U0211D", decimal: 8477, character: "\u211D", latex: "$\\mathbb{R}$" }, 8482: { id: "U02122", decimal: 8482, character: "\u2122", latex: "\\texttrademark" }, 8484: { id: "U02124", decimal: 8484, character: "\u2124", latex: "$\\mathbb{Z}$" }, 8488: { id: "U02128", decimal: 8488, character: "\u2128", latex: "$\\mathfrak{Z}$" }, 8491: { id: "U0212B", decimal: 8491, character: "\xC5", latex: "\\AA" }, 8493: { id: "U0212D", decimal: 8493, character: "\u212D", latex: "$\\mathfrak{C}$" }, 8722: { id: "U02212", decimal: 8722, character: "\u2212", latex: "-" }, 8762: { id: "U0223A", decimal: 8762, character: "\u223A", latex: "$\\mathbin{{:}\\!\\!{-}\\!\\!{:}}$" }, 8788: { id: "U02254", decimal: 8788, character: "\u2254", latex: ":=" }, 8789: { id: "U02255", decimal: 8789, character: "\u2255", latex: "=:" }, 8942: { id: "U022EE", decimal: 8942, character: "\u22EE", latex: "\\vdots" }, 8982: { id: "U02316", decimal: 8982, character: "\u2316", latex: '$\\mathchar"2208$' }, 9251: { id: "U02423", decimal: 9251, character: "\u2423", latex: "\\textvisiblespace" }, 9645: { id: "U025AD", decimal: 9645, character: "\u25AD", latex: "\\fbox{~~}" }, 11005: { id: "U02AFD-020E5", decimal: 11005, character: "\u2AFD", latex: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" }, 64256: { id: "U0FB00", decimal: 64256, character: "\uFB00", latex: "ff" }, 64257: { id: "U0FB01", decimal: 64257, character: "\uFB01", latex: "fi" }, 64258: { id: "U0FB02", decimal: 64258, character: "\uFB02", latex: "fl" }, 64259: { id: "U0FB03", decimal: 64259, character: "\uFB03", latex: "ffi" }, 64260: { id: "U0FB04", decimal: 64260, character: "\uFB04", latex: "ffl" }, 119808: { id: "U1D400", decimal: 119808, character: "\uD400", latex: "$\\mathbf{A}$" }, 119809: { id: "U1D401", decimal: 119809, character: "\uD401", latex: "$\\mathbf{B}$" }, 119810: { id: "U1D402", decimal: 119810, character: "\uD402", latex: "$\\mathbf{C}$" }, 119811: { id: "U1D403", decimal: 119811, character: "\uD403", latex: "$\\mathbf{D}$" }, 119812: { id: "U1D404", decimal: 119812, character: "\uD404", latex: "$\\mathbf{E}$" }, 119813: { id: "U1D405", decimal: 119813, character: "\uD405", latex: "{$\\mathbf{F}$}" }, 119814: { id: "U1D406", decimal: 119814, character: "\uD406", latex: "$\\mathbf{G}$" }, 119815: { id: "U1D407", decimal: 119815, character: "\uD407", latex: "$\\mathbf{H}$" }, 119816: { id: "U1D408", decimal: 119816, character: "\uD408", latex: "$\\mathbf{I}$" }, 119817: { id: "U1D409", decimal: 119817, character: "\uD409", latex: "$\\mathbf{J}$" }, 119818: { id: "U1D40A", decimal: 119818, character: "\uD40A", latex: "$\\mathbf{K}$" }, 119819: { id: "U1D40B", decimal: 119819, character: "\uD40B", latex: "$\\mathbf{L}$" }, 119820: { id: "U1D40C", decimal: 119820, character: "\uD40C", latex: "$\\mathbf{M}$" }, 119821: { id: "U1D40D", decimal: 119821, character: "\uD40D", latex: "$\\mathbf{N}$" }, 119822: { id: "U1D40E", decimal: 119822, character: "\uD40E", latex: "$\\mathbf{O}$" }, 119823: { id: "U1D40F", decimal: 119823, character: "\uD40F", latex: "$\\mathbf{P}$" }, 119824: { id: "U1D410", decimal: 119824, character: "\uD410", latex: "$\\mathbf{Q}$" }, 119825: { id: "U1D411", decimal: 119825, character: "\uD411", latex: "$\\mathbf{R}$" }, 119826: { id: "U1D412", decimal: 119826, character: "\uD412", latex: "$\\mathbf{S}$" }, 119827: { id: "U1D413", decimal: 119827, character: "\uD413", latex: "$\\mathbf{T}$" }, 119828: { id: "U1D414", decimal: 119828, character: "\uD414", latex: "$\\mathbf{U}$" }, 119829: { id: "U1D415", decimal: 119829, character: "\uD415", latex: "$\\mathbf{V}$" }, 119830: { id: "U1D416", decimal: 119830, character: "\uD416", latex: "$\\mathbf{W}$" }, 119831: { id: "U1D417", decimal: 119831, character: "\uD417", latex: "$\\mathbf{X}$" }, 119832: { id: "U1D418", decimal: 119832, character: "\uD418", latex: "$\\mathbf{Y}$" }, 119833: { id: "U1D419", decimal: 119833, character: "\uD419", latex: "$\\mathbf{Z}$" }, 119834: { id: "U1D41A", decimal: 119834, character: "\uD41A", latex: "$\\mathbf{a}$" }, 119835: { id: "U1D41B", decimal: 119835, character: "\uD41B", latex: "$\\mathbf{b}$" }, 119836: { id: "U1D41C", decimal: 119836, character: "\uD41C", latex: "$\\mathbf{c}$" }, 119837: { id: "U1D41D", decimal: 119837, character: "\uD41D", latex: "$\\mathbf{d}$" }, 119838: { id: "U1D41E", decimal: 119838, character: "\uD41E", latex: "$\\mathbf{e}$" }, 119839: { id: "U1D41F", decimal: 119839, character: "\uD41F", latex: "{$\\mathbf{f}$}" }, 119840: { id: "U1D420", decimal: 119840, character: "\uD420", latex: "$\\mathbf{g}$" }, 119841: { id: "U1D421", decimal: 119841, character: "\uD421", latex: "$\\mathbf{h}$" }, 119842: { id: "U1D422", decimal: 119842, character: "\uD422", latex: "$\\mathbf{i}$" }, 119843: { id: "U1D423", decimal: 119843, character: "\uD423", latex: "$\\mathbf{j}$" }, 119844: { id: "U1D424", decimal: 119844, character: "\uD424", latex: "$\\mathbf{k}$" }, 119845: { id: "U1D425", decimal: 119845, character: "\uD425", latex: "$\\mathbf{l}$" }, 119846: { id: "U1D426", decimal: 119846, character: "\uD426", latex: "$\\mathbf{m}$" }, 119847: { id: "U1D427", decimal: 119847, character: "\uD427", latex: "$\\mathbf{n}$" }, 119848: { id: "U1D428", decimal: 119848, character: "\uD428", latex: "$\\mathbf{o}$" }, 119849: { id: "U1D429", decimal: 119849, character: "\uD429", latex: "$\\mathbf{p}$" }, 119850: { id: "U1D42A", decimal: 119850, character: "\uD42A", latex: "$\\mathbf{q}$" }, 119851: { id: "U1D42B", decimal: 119851, character: "\uD42B", latex: "$\\mathbf{r}$" }, 119852: { id: "U1D42C", decimal: 119852, character: "\uD42C", latex: "$\\mathbf{s}$" }, 119853: { id: "U1D42D", decimal: 119853, character: "\uD42D", latex: "$\\mathbf{t}$" }, 119854: { id: "U1D42E", decimal: 119854, character: "\uD42E", latex: "$\\mathbf{u}$" }, 119855: { id: "U1D42F", decimal: 119855, character: "\uD42F", latex: "$\\mathbf{v}$" }, 119856: { id: "U1D430", decimal: 119856, character: "\uD430", latex: "$\\mathbf{w}$" }, 119857: { id: "U1D431", decimal: 119857, character: "\uD431", latex: "$\\mathbf{x}$" }, 119858: { id: "U1D432", decimal: 119858, character: "\uD432", latex: "$\\mathbf{y}$" }, 119859: { id: "U1D433", decimal: 119859, character: "\uD433", latex: "$\\mathbf{z}$" }, 120068: { id: "U1D504", decimal: 120068, character: "\uD504", latex: "$\\mathfrak{A}$" }, 120069: { id: "U1D505", decimal: 120069, character: "\uD505", latex: "$\\mathfrak{B}$" }, 120071: { id: "U1D507", decimal: 120071, character: "\uD507", latex: "$\\mathfrak{D}$" }, 120072: { id: "U1D508", decimal: 120072, character: "\uD508", latex: "$\\mathfrak{E}$" }, 120073: { id: "U1D509", decimal: 120073, character: "\uD509", latex: "$\\mathfrak{F}$" }, 120074: { id: "U1D50A", decimal: 120074, character: "\uD50A", latex: "$\\mathfrak{G}$" }, 120077: { id: "U1D50D", decimal: 120077, character: "\uD50D", latex: "$\\mathfrak{J}$" }, 120078: { id: "U1D50E", decimal: 120078, character: "\uD50E", latex: "$\\mathfrak{K}$" }, 120079: { id: "U1D50F", decimal: 120079, character: "\uD50F", latex: "$\\mathfrak{L}$" }, 120080: { id: "U1D510", decimal: 120080, character: "\uD510", latex: "$\\mathfrak{M}$" }, 120081: { id: "U1D511", decimal: 120081, character: "\uD511", latex: "$\\mathfrak{N}$" }, 120082: { id: "U1D512", decimal: 120082, character: "\uD512", latex: "$\\mathfrak{O}$" }, 120083: { id: "U1D513", decimal: 120083, character: "\uD513", latex: "$\\mathfrak{P}$" }, 120084: { id: "U1D514", decimal: 120084, character: "\uD514", latex: "$\\mathfrak{Q}$" }, 120086: { id: "U1D516", decimal: 120086, character: "\uD516", latex: "$\\mathfrak{S}$" }, 120087: { id: "U1D517", decimal: 120087, character: "\uD517", latex: "$\\mathfrak{T}$" }, 120088: { id: "U1D518", decimal: 120088, character: "\uD518", latex: "$\\mathfrak{U}$" }, 120089: { id: "U1D519", decimal: 120089, character: "\uD519", latex: "$\\mathfrak{V}$" }, 120090: { id: "U1D51A", decimal: 120090, character: "\uD51A", latex: "$\\mathfrak{W}$" }, 120091: { id: "U1D51B", decimal: 120091, character: "\uD51B", latex: "$\\mathfrak{X}$" }, 120092: { id: "U1D51C", decimal: 120092, character: "\uD51C", latex: "$\\mathfrak{Y}$" }, 120094: { id: "U1D51E", decimal: 120094, character: "\uD51E", latex: "$\\mathfrak{a}$" }, 120095: { id: "U1D51F", decimal: 120095, character: "\uD51F", latex: "$\\mathfrak{b}$" }, 120096: { id: "U1D520", decimal: 120096, character: "\uD520", latex: "$\\mathfrak{c}$" }, 120097: { id: "U1D521", decimal: 120097, character: "\uD521", latex: "$\\mathfrak{d}$" }, 120098: { id: "U1D522", decimal: 120098, character: "\uD522", latex: "$\\mathfrak{e}$" }, 120099: { id: "U1D523", decimal: 120099, character: "\uD523", latex: "$\\mathfrak{f}$" }, 120100: { id: "U1D524", decimal: 120100, character: "\uD524", latex: "$\\mathfrak{g}$" }, 120101: { id: "U1D525", decimal: 120101, character: "\uD525", latex: "$\\mathfrak{h}$" }, 120102: { id: "U1D526", decimal: 120102, character: "\uD526", latex: "$\\mathfrak{i}$" }, 120103: { id: "U1D527", decimal: 120103, character: "\uD527", latex: "$\\mathfrak{j}$" }, 120104: { id: "U1D528", decimal: 120104, character: "\uD528", latex: "$\\mathfrak{k}$" }, 120105: { id: "U1D529", decimal: 120105, character: "\uD529", latex: "$\\mathfrak{l}$" }, 120106: { id: "U1D52A", decimal: 120106, character: "\uD52A", latex: "$\\mathfrak{m}$" }, 120107: { id: "U1D52B", decimal: 120107, character: "\uD52B", latex: "$\\mathfrak{n}$" }, 120108: { id: "U1D52C", decimal: 120108, character: "\uD52C", latex: "$\\mathfrak{o}$" }, 120109: { id: "U1D52D", decimal: 120109, character: "\uD52D", latex: "$\\mathfrak{p}$" }, 120110: { id: "U1D52E", decimal: 120110, character: "\uD52E", latex: "$\\mathfrak{q}$" }, 120111: { id: "U1D52F", decimal: 120111, character: "\uD52F", latex: "$\\mathfrak{r}$" }, 120112: { id: "U1D530", decimal: 120112, character: "\uD530", latex: "$\\mathfrak{s}$" }, 120113: { id: "U1D531", decimal: 120113, character: "\uD531", latex: "$\\mathfrak{t}$" }, 120114: { id: "U1D532", decimal: 120114, character: "\uD532", latex: "$\\mathfrak{u}$" }, 120115: { id: "U1D533", decimal: 120115, character: "\uD533", latex: "$\\mathfrak{v}$" }, 120116: { id: "U1D534", decimal: 120116, character: "\uD534", latex: "$\\mathfrak{w}$" }, 120117: { id: "U1D535", decimal: 120117, character: "\uD535", latex: "$\\mathfrak{x}$" }, 120118: { id: "U1D536", decimal: 120118, character: "\uD536", latex: "$\\mathfrak{y}$" }, 120119: { id: "U1D537", decimal: 120119, character: "\uD537", latex: "$\\mathfrak{z}$" }, 120120: { id: "U1D538", decimal: 120120, character: "\uD538", latex: "$\\mathbb{A}$" }, 120121: { id: "U1D539", decimal: 120121, character: "\uD539", latex: "$\\mathbb{B}$" }, 120123: { id: "U1D53B", decimal: 120123, character: "\uD53B", latex: "$\\mathbb{D}$" }, 120124: { id: "U1D53C", decimal: 120124, character: "\uD53C", latex: "$\\mathbb{E}$" }, 120125: { id: "U1D53D", decimal: 120125, character: "\uD53D", latex: "$\\mathbb{F}$" }, 120126: { id: "U1D53E", decimal: 120126, character: "\uD53E", latex: "$\\mathbb{G}$" }, 120128: { id: "U1D540", decimal: 120128, character: "\uD540", latex: "$\\mathbb{I}$" }, 120129: { id: "U1D541", decimal: 120129, character: "\uD541", latex: "$\\mathbb{J}$" }, 120130: { id: "U1D542", decimal: 120130, character: "\uD542", latex: "$\\mathbb{K}$" }, 120131: { id: "U1D543", decimal: 120131, character: "\uD543", latex: "$\\mathbb{L}$" }, 120132: { id: "U1D544", decimal: 120132, character: "\uD544", latex: "$\\mathbb{M}$" }, 120134: { id: "U1D546", decimal: 120134, character: "\uD546", latex: "$\\mathbb{O}$" }, 120138: { id: "U1D54A", decimal: 120138, character: "\uD54A", latex: "$\\mathbb{S}$" }, 120139: { id: "U1D54B", decimal: 120139, character: "\uD54B", latex: "$\\mathbb{T}$" }, 120140: { id: "U1D54C", decimal: 120140, character: "\uD54C", latex: "$\\mathbb{U}$" }, 120141: { id: "U1D54D", decimal: 120141, character: "\uD54D", latex: "$\\mathbb{V}$" }, 120142: { id: "U1D54E", decimal: 120142, character: "\uD54E", latex: "$\\mathbb{W}$" }, 120143: { id: "U1D54F", decimal: 120143, character: "\uD54F", latex: "$\\mathbb{X}$" }, 120144: { id: "U1D550", decimal: 120144, character: "\uD550", latex: "$\\mathbb{Y}$" }, 120146: { id: "U1D552", decimal: 120146, character: "\uD552", latex: "$\\mathbb{a}$" }, 120147: { id: "U1D553", decimal: 120147, character: "\uD553", latex: "$\\mathbb{b}$" }, 120148: { id: "U1D554", decimal: 120148, character: "\uD554", latex: "$\\mathbb{c}$" }, 120149: { id: "U1D555", decimal: 120149, character: "\uD555", latex: "$\\mathbb{d}$" }, 120150: { id: "U1D556", decimal: 120150, character: "\uD556", latex: "$\\mathbb{e}$" }, 120151: { id: "U1D557", decimal: 120151, character: "\uD557", latex: "$\\mathbb{f}$" }, 120152: { id: "U1D558", decimal: 120152, character: "\uD558", latex: "$\\mathbb{g}$" }, 120153: { id: "U1D559", decimal: 120153, character: "\uD559", latex: "$\\mathbb{h}$" }, 120154: { id: "U1D55A", decimal: 120154, character: "\uD55A", latex: "$\\mathbb{i}$" }, 120155: { id: "U1D55B", decimal: 120155, character: "\uD55B", latex: "$\\mathbb{j}$" }, 120156: { id: "U1D55C", decimal: 120156, character: "\uD55C", latex: "$\\mathbb{k}$" }, 120157: { id: "U1D55D", decimal: 120157, character: "\uD55D", latex: "$\\mathbb{l}$" }, 120158: { id: "U1D55E", decimal: 120158, character: "\uD55E", latex: "$\\mathbb{m}$" }, 120159: { id: "U1D55F", decimal: 120159, character: "\uD55F", latex: "$\\mathbb{n}$" }, 120160: { id: "U1D560", decimal: 120160, character: "\uD560", latex: "$\\mathbb{o}$" }, 120161: { id: "U1D561", decimal: 120161, character: "\uD561", latex: "$\\mathbb{p}$" }, 120162: { id: "U1D562", decimal: 120162, character: "\uD562", latex: "$\\mathbb{q}$" }, 120163: { id: "U1D563", decimal: 120163, character: "\uD563", latex: "$\\mathbb{r}$" }, 120164: { id: "U1D564", decimal: 120164, character: "\uD564", latex: "$\\mathbb{s}$" }, 120165: { id: "U1D565", decimal: 120165, character: "\uD565", latex: "$\\mathbb{t}$" }, 120166: { id: "U1D566", decimal: 120166, character: "\uD566", latex: "$\\mathbb{u}$" }, 120167: { id: "U1D567", decimal: 120167, character: "\uD567", latex: "$\\mathbb{v}$" }, 120168: { id: "U1D568", decimal: 120168, character: "\uD568", latex: "$\\mathbb{w}$" }, 120169: { id: "U1D569", decimal: 120169, character: "\uD569", latex: "$\\mathbb{x}$" }, 120170: { id: "U1D56A", decimal: 120170, character: "\uD56A", latex: "$\\mathbb{y}$" }, 120171: { id: "U1D56B", decimal: 120171, character: "\uD56B", latex: "$\\mathbb{z}$" }, 120224: { id: "U1D5A0", decimal: 120224, character: "\uD5A0", latex: "$\\mathsf{A}$" }, 120225: { id: "U1D5A1", decimal: 120225, character: "\uD5A1", latex: "$\\mathsf{B}$" }, 120226: { id: "U1D5A2", decimal: 120226, character: "\uD5A2", latex: "$\\mathsf{C}$" }, 120227: { id: "U1D5A3", decimal: 120227, character: "\uD5A3", latex: "$\\mathsf{D}$" }, 120228: { id: "U1D5A4", decimal: 120228, character: "\uD5A4", latex: "$\\mathsf{E}$" }, 120229: { id: "U1D5A5", decimal: 120229, character: "\uD5A5", latex: "$\\mathsf{F}$" }, 120230: { id: "U1D5A6", decimal: 120230, character: "\uD5A6", latex: "$\\mathsf{G}$" }, 120231: { id: "U1D5A7", decimal: 120231, character: "\uD5A7", latex: "$\\mathsf{H}$" }, 120232: { id: "U1D5A8", decimal: 120232, character: "\uD5A8", latex: "$\\mathsf{I}$" }, 120233: { id: "U1D5A9", decimal: 120233, character: "\uD5A9", latex: "$\\mathsf{J}$" }, 120234: { id: "U1D5AA", decimal: 120234, character: "\uD5AA", latex: "$\\mathsf{K}$" }, 120235: { id: "U1D5AB", decimal: 120235, character: "\uD5AB", latex: "$\\mathsf{L}$" }, 120236: { id: "U1D5AC", decimal: 120236, character: "\uD5AC", latex: "$\\mathsf{M}$" }, 120237: { id: "U1D5AD", decimal: 120237, character: "\uD5AD", latex: "$\\mathsf{N}$" }, 120238: { id: "U1D5AE", decimal: 120238, character: "\uD5AE", latex: "$\\mathsf{O}$" }, 120239: { id: "U1D5AF", decimal: 120239, character: "\uD5AF", latex: "$\\mathsf{P}$" }, 120240: { id: "U1D5B0", decimal: 120240, character: "\uD5B0", latex: "$\\mathsf{Q}$" }, 120241: { id: "U1D5B1", decimal: 120241, character: "\uD5B1", latex: "$\\mathsf{R}$" }, 120242: { id: "U1D5B2", decimal: 120242, character: "\uD5B2", latex: "$\\mathsf{S}$" }, 120243: { id: "U1D5B3", decimal: 120243, character: "\uD5B3", latex: "$\\mathsf{T}$" }, 120244: { id: "U1D5B4", decimal: 120244, character: "\uD5B4", latex: "$\\mathsf{U}$" }, 120245: { id: "U1D5B5", decimal: 120245, character: "\uD5B5", latex: "$\\mathsf{V}$" }, 120246: { id: "U1D5B6", decimal: 120246, character: "\uD5B6", latex: "$\\mathsf{W}$" }, 120247: { id: "U1D5B7", decimal: 120247, character: "\uD5B7", latex: "$\\mathsf{X}$" }, 120248: { id: "U1D5B8", decimal: 120248, character: "\uD5B8", latex: "$\\mathsf{Y}$" }, 120249: { id: "U1D5B9", decimal: 120249, character: "\uD5B9", latex: "$\\mathsf{Z}$" }, 120250: { id: "U1D5BA", decimal: 120250, character: "\uD5BA", latex: "$\\mathsf{a}$" }, 120251: { id: "U1D5BB", decimal: 120251, character: "\uD5BB", latex: "$\\mathsf{b}$" }, 120252: { id: "U1D5BC", decimal: 120252, character: "\uD5BC", latex: "$\\mathsf{c}$" }, 120253: { id: "U1D5BD", decimal: 120253, character: "\uD5BD", latex: "$\\mathsf{d}$" }, 120254: { id: "U1D5BE", decimal: 120254, character: "\uD5BE", latex: "$\\mathsf{e}$" }, 120255: { id: "U1D5BF", decimal: 120255, character: "\uD5BF", latex: "$\\mathsf{f}$" }, 120256: { id: "U1D5C0", decimal: 120256, character: "\uD5C0", latex: "$\\mathsf{g}$" }, 120257: { id: "U1D5C1", decimal: 120257, character: "\uD5C1", latex: "$\\mathsf{h}$" }, 120258: { id: "U1D5C2", decimal: 120258, character: "\uD5C2", latex: "$\\mathsf{i}$" }, 120259: { id: "U1D5C3", decimal: 120259, character: "\uD5C3", latex: "$\\mathsf{j}$" }, 120260: { id: "U1D5C4", decimal: 120260, character: "\uD5C4", latex: "$\\mathsf{k}$" }, 120261: { id: "U1D5C5", decimal: 120261, character: "\uD5C5", latex: "$\\mathsf{l}$" }, 120262: { id: "U1D5C6", decimal: 120262, character: "\uD5C6", latex: "$\\mathsf{m}$" }, 120263: { id: "U1D5C7", decimal: 120263, character: "\uD5C7", latex: "$\\mathsf{n}$" }, 120264: { id: "U1D5C8", decimal: 120264, character: "\uD5C8", latex: "$\\mathsf{o}$" }, 120265: { id: "U1D5C9", decimal: 120265, character: "\uD5C9", latex: "$\\mathsf{p}$" }, 120266: { id: "U1D5CA", decimal: 120266, character: "\uD5CA", latex: "$\\mathsf{q}$" }, 120267: { id: "U1D5CB", decimal: 120267, character: "\uD5CB", latex: "$\\mathsf{r}$" }, 120268: { id: "U1D5CC", decimal: 120268, character: "\uD5CC", latex: "$\\mathsf{s}$" }, 120269: { id: "U1D5CD", decimal: 120269, character: "\uD5CD", latex: "$\\mathsf{t}$" }, 120270: { id: "U1D5CE", decimal: 120270, character: "\uD5CE", latex: "$\\mathsf{u}$" }, 120271: { id: "U1D5CF", decimal: 120271, character: "\uD5CF", latex: "$\\mathsf{v}$" }, 120272: { id: "U1D5D0", decimal: 120272, character: "\uD5D0", latex: "$\\mathsf{w}$" }, 120273: { id: "U1D5D1", decimal: 120273, character: "\uD5D1", latex: "$\\mathsf{x}$" }, 120274: { id: "U1D5D2", decimal: 120274, character: "\uD5D2", latex: "$\\mathsf{y}$" }, 120275: { id: "U1D5D3", decimal: 120275, character: "\uD5D3", latex: "$\\mathsf{z}$" }, 120432: { id: "U1D670", decimal: 120432, character: "\uD670", latex: "$\\mathtt{A}$" }, 120433: { id: "U1D671", decimal: 120433, character: "\uD671", latex: "$\\mathtt{B}$" }, 120434: { id: "U1D672", decimal: 120434, character: "\uD672", latex: "$\\mathtt{C}$" }, 120435: { id: "U1D673", decimal: 120435, character: "\uD673", latex: "$\\mathtt{D}$" }, 120436: { id: "U1D674", decimal: 120436, character: "\uD674", latex: "$\\mathtt{E}$" }, 120437: { id: "U1D675", decimal: 120437, character: "\uD675", latex: "$\\mathtt{F}$" }, 120438: { id: "U1D676", decimal: 120438, character: "\uD676", latex: "$\\mathtt{G}$" }, 120439: { id: "U1D677", decimal: 120439, character: "\uD677", latex: "$\\mathtt{H}$" }, 120440: { id: "U1D678", decimal: 120440, character: "\uD678", latex: "$\\mathtt{I}$" }, 120441: { id: "U1D679", decimal: 120441, character: "\uD679", latex: "$\\mathtt{J}$" }, 120442: { id: "U1D67A", decimal: 120442, character: "\uD67A", latex: "$\\mathtt{K}$" }, 120443: { id: "U1D67B", decimal: 120443, character: "\uD67B", latex: "$\\mathtt{L}$" }, 120444: { id: "U1D67C", decimal: 120444, character: "\uD67C", latex: "$\\mathtt{M}$" }, 120445: { id: "U1D67D", decimal: 120445, character: "\uD67D", latex: "$\\mathtt{N}$" }, 120446: { id: "U1D67E", decimal: 120446, character: "\uD67E", latex: "$\\mathtt{O}$" }, 120447: { id: "U1D67F", decimal: 120447, character: "\uD67F", latex: "$\\mathtt{P}$" }, 120448: { id: "U1D680", decimal: 120448, character: "\uD680", latex: "$\\mathtt{Q}$" }, 120449: { id: "U1D681", decimal: 120449, character: "\uD681", latex: "$\\mathtt{R}$" }, 120450: { id: "U1D682", decimal: 120450, character: "\uD682", latex: "$\\mathtt{S}$" }, 120451: { id: "U1D683", decimal: 120451, character: "\uD683", latex: "$\\mathtt{T}$" }, 120452: { id: "U1D684", decimal: 120452, character: "\uD684", latex: "$\\mathtt{U}$" }, 120453: { id: "U1D685", decimal: 120453, character: "\uD685", latex: "$\\mathtt{V}$" }, 120454: { id: "U1D686", decimal: 120454, character: "\uD686", latex: "$\\mathtt{W}$" }, 120455: { id: "U1D687", decimal: 120455, character: "\uD687", latex: "$\\mathtt{X}$" }, 120456: { id: "U1D688", decimal: 120456, character: "\uD688", latex: "$\\mathtt{Y}$" }, 120457: { id: "U1D689", decimal: 120457, character: "\uD689", latex: "$\\mathtt{Z}$" }, 120458: { id: "U1D68A", decimal: 120458, character: "\uD68A", latex: "$\\mathtt{a}$" }, 120459: { id: "U1D68B", decimal: 120459, character: "\uD68B", latex: "$\\mathtt{b}$" }, 120460: { id: "U1D68C", decimal: 120460, character: "\uD68C", latex: "$\\mathtt{c}$" }, 120461: { id: "U1D68D", decimal: 120461, character: "\uD68D", latex: "$\\mathtt{d}$" }, 120462: { id: "U1D68E", decimal: 120462, character: "\uD68E", latex: "$\\mathtt{e}$" }, 120463: { id: "U1D68F", decimal: 120463, character: "\uD68F", latex: "$\\mathtt{f}$" }, 120464: { id: "U1D690", decimal: 120464, character: "\uD690", latex: "$\\mathtt{g}$" }, 120465: { id: "U1D691", decimal: 120465, character: "\uD691", latex: "$\\mathtt{h}$" }, 120466: { id: "U1D692", decimal: 120466, character: "\uD692", latex: "$\\mathtt{i}$" }, 120467: { id: "U1D693", decimal: 120467, character: "\uD693", latex: "$\\mathtt{j}$" }, 120468: { id: "U1D694", decimal: 120468, character: "\uD694", latex: "$\\mathtt{k}$" }, 120469: { id: "U1D695", decimal: 120469, character: "\uD695", latex: "$\\mathtt{l}$" }, 120470: { id: "U1D696", decimal: 120470, character: "\uD696", latex: "$\\mathtt{m}$" }, 120471: { id: "U1D697", decimal: 120471, character: "\uD697", latex: "$\\mathtt{n}$" }, 120472: { id: "U1D698", decimal: 120472, character: "\uD698", latex: "$\\mathtt{o}$" }, 120473: { id: "U1D699", decimal: 120473, character: "\uD699", latex: "$\\mathtt{p}$" }, 120474: { id: "U1D69A", decimal: 120474, character: "\uD69A", latex: "$\\mathtt{q}$" }, 120475: { id: "U1D69B", decimal: 120475, character: "\uD69B", latex: "$\\mathtt{r}$" }, 120476: { id: "U1D69C", decimal: 120476, character: "\uD69C", latex: "$\\mathtt{s}$" }, 120477: { id: "U1D69D", decimal: 120477, character: "\uD69D", latex: "$\\mathtt{t}$" }, 120478: { id: "U1D69E", decimal: 120478, character: "\uD69E", latex: "$\\mathtt{u}$" }, 120479: { id: "U1D69F", decimal: 120479, character: "\uD69F", latex: "$\\mathtt{v}$" }, 120480: { id: "U1D6A0", decimal: 120480, character: "\uD6A0", latex: "$\\mathtt{w}$" }, 120481: { id: "U1D6A1", decimal: 120481, character: "\uD6A1", latex: "$\\mathtt{x}$" }, 120482: { id: "U1D6A2", decimal: 120482, character: "\uD6A2", latex: "$\\mathtt{y}$" }, 120483: { id: "U1D6A3", decimal: 120483, character: "\uD6A3", latex: "$\\mathtt{z}$" }, 120490: { id: "U1D6AA", decimal: 120490, character: "\uD6AA", latex: "$\\mathbf{\\Gamma}$" }, 120491: { id: "U1D6AB", decimal: 120491, character: "\uD6AB", latex: "$\\mathbf{\\Delta}$" }, 120495: { id: "U1D6AF", decimal: 120495, character: "\uD6AF", latex: "$\\mathbf{\\Theta}$" }, 120498: { id: "U1D6B2", decimal: 120498, character: "\uD6B2", latex: "$\\mathbf{\\Lambda}$" }, 120499: { id: "U1D6B3", decimal: 120499, character: "\uD6B3", latex: "$\\mathbf{M}$" }, 120500: { id: "U1D6B4", decimal: 120500, character: "\uD6B4", latex: "N" }, 120501: { id: "U1D6B5", decimal: 120501, character: "\uD6B5", latex: "$\\mathbf{\\Xi}$" }, 120502: { id: "U1D6B6", decimal: 120502, character: "\uD6B6", latex: "O" }, 120503: { id: "U1D6B7", decimal: 120503, character: "\uD6B7", latex: "$\\mathbf{\\Pi}$" }, 120505: { id: "U1D6B9", decimal: 120505, character: "\uD6B9", latex: "$\\mathbf{\\vartheta}$" }, 120506: { id: "U1D6BA", decimal: 120506, character: "\uD6BA", latex: "$\\mathbf{\\Sigma}$" }, 120508: { id: "U1D6BC", decimal: 120508, character: "\uD6BC", latex: "$\\mathbf{\\Upsilon}$" }, 120509: { id: "U1D6BD", decimal: 120509, character: "\uD6BD", latex: "$\\mathbf{\\Phi}$" }, 120511: { id: "U1D6BF", decimal: 120511, character: "\uD6BF", latex: "$\\mathbf{\\Psi}$" }, 120512: { id: "U1D6C0", decimal: 120512, character: "\uD6C0", latex: "$\\mathbf{\\Omega}$" }, 120513: { id: "U1D6C1", decimal: 120513, character: "\uD6C1", latex: "$\\mathbf{\\nabla}$" }, 120514: { id: "U1D6C2", decimal: 120514, character: "\uD6C2", latex: "$\\mathbf{\\alpha}$" }, 120515: { id: "U1D6C3", decimal: 120515, character: "\uD6C3", latex: "$\\mathbf{\\beta}$" }, 120516: { id: "U1D6C4", decimal: 120516, character: "\uD6C4", latex: "$\\mathbf{\\gamma}$" }, 120517: { id: "U1D6C5", decimal: 120517, character: "\uD6C5", latex: "$\\mathbf{\\delta}$" }, 120518: { id: "U1D6C6", decimal: 120518, character: "\uD6C6", latex: "$\\mathbf{\\epsilon}$" }, 120519: { id: "U1D6C7", decimal: 120519, character: "\uD6C7", latex: "$\\mathbf{\\zeta}$" }, 120520: { id: "U1D6C8", decimal: 120520, character: "\uD6C8", latex: "$\\mathbf{\\eta}$" }, 120521: { id: "U1D6C9", decimal: 120521, character: "\uD6C9", latex: "$\\mathbf{\\theta}$" }, 120522: { id: "U1D6CA", decimal: 120522, character: "\uD6CA", latex: "$\\mathbf{\\iota}$" }, 120523: { id: "U1D6CB", decimal: 120523, character: "\uD6CB", latex: "$\\mathbf{\\kappa}$" }, 120524: { id: "U1D6CC", decimal: 120524, character: "\uD6CC", latex: "$\\mathbf{\\lambda}$" }, 120525: { id: "U1D6CD", decimal: 120525, character: "\uD6CD", latex: "$\\mathbf{\\mu}$" }, 120526: { id: "U1D6CE", decimal: 120526, character: "\uD6CE", latex: "$\\mathbf{\\nu}$" }, 120527: { id: "U1D6CF", decimal: 120527, character: "\uD6CF", latex: "$\\mathbf{\\xi}$" }, 120528: { id: "U1D6D0", decimal: 120528, character: "\uD6D0", latex: "$\\mathbf{o}$" }, 120529: { id: "U1D6D1", decimal: 120529, character: "\uD6D1", latex: "$\\mathbf{\\pi}$" }, 120530: { id: "U1D6D2", decimal: 120530, character: "\uD6D2", latex: "$\\mathbf{\\rho}$" }, 120531: { id: "U1D6D3", decimal: 120531, character: "\uD6D3", latex: "$\\mathbf{\\varsigma}$" }, 120532: { id: "U1D6D4", decimal: 120532, character: "\uD6D4", latex: "$\\mathbf{\\sigma}$" }, 120533: { id: "U1D6D5", decimal: 120533, character: "\uD6D5", latex: "$\\mathbf{\\tau}$" }, 120534: { id: "U1D6D6", decimal: 120534, character: "\uD6D6", latex: "$\\mathbf{\\upsilon}$" }, 120535: { id: "U1D6D7", decimal: 120535, character: "\uD6D7", latex: "$\\mathbf{\\phi}$" }, 120536: { id: "U1D6D8", decimal: 120536, character: "\uD6D8", latex: "$\\mathbf{\\chi}$" }, 120537: { id: "U1D6D9", decimal: 120537, character: "\uD6D9", latex: "$\\mathbf{\\psi}$" }, 120538: { id: "U1D6DA", decimal: 120538, character: "\uD6DA", latex: "$\\mathbf{\\omega}$" }, 120540: { id: "U1D6DC", decimal: 120540, character: "\uD6DC", latex: "$\\mathbf{\\varepsilon}$" }, 120541: { id: "U1D6DD", decimal: 120541, character: "\uD6DD", latex: "$\\mathbf{\\vartheta}$" }, 120542: { id: "U1D6DE", decimal: 120542, character: "\uD6DE", latex: "$\\mathbf{\\varkappa}$" }, 120543: { id: "U1D6DF", decimal: 120543, character: "\uD6DF", latex: "$\\mathbf{\\phi}$" }, 120544: { id: "U1D6E0", decimal: 120544, character: "\uD6E0", latex: "$\\mathbf{\\varrho}$" }, 120545: { id: "U1D6E1", decimal: 120545, character: "\uD6E1", latex: "$\\mathbf{\\varpi}$" }, 120558: { id: "U1D6EE", decimal: 120558, character: "\uD6EE", latex: "N" }, 120560: { id: "U1D6F0", decimal: 120560, character: "\uD6F0", latex: "O" }, 120618: { id: "U1D72A", decimal: 120618, character: "\uD72A", latex: "O" }, 120676: { id: "U1D764", decimal: 120676, character: "\uD764", latex: "O" }, 120734: { id: "U1D79E", decimal: 120734, character: "\uD79E", latex: "O" }, 120782: { id: "U1D7CE", decimal: 120782, character: "\uD7CE", latex: "$\\mathbf{0}$" }, 120783: { id: "U1D7CF", decimal: 120783, character: "\uD7CF", latex: "$\\mathbf{1}$" }, 120784: { id: "U1D7D0", decimal: 120784, character: "\uD7D0", latex: "$\\mathbf{2}$" }, 120785: { id: "U1D7D1", decimal: 120785, character: "\uD7D1", latex: "$\\mathbf{3}$" }, 120786: { id: "U1D7D2", decimal: 120786, character: "\uD7D2", latex: "$\\mathbf{4}$" }, 120787: { id: "U1D7D3", decimal: 120787, character: "\uD7D3", latex: "$\\mathbf{5}$" }, 120788: { id: "U1D7D4", decimal: 120788, character: "\uD7D4", latex: "$\\mathbf{6}$" }, 120789: { id: "U1D7D5", decimal: 120789, character: "\uD7D5", latex: "$\\mathbf{7}$" }, 120790: { id: "U1D7D6", decimal: 120790, character: "\uD7D6", latex: "$\\mathbf{8}$" }, 120791: { id: "U1D7D7", decimal: 120791, character: "\uD7D7", latex: "$\\mathbf{9}$" }, 120792: { id: "U1D7D8", decimal: 120792, character: "\uD7D8", latex: "$\\mathbb{0}$" }, 120793: { id: "U1D7D9", decimal: 120793, character: "\uD7D9", latex: "$\\mathbb{1}$" }, 120794: { id: "U1D7DA", decimal: 120794, character: "\uD7DA", latex: "$\\mathbb{2}$" }, 120795: { id: "U1D7DB", decimal: 120795, character: "\uD7DB", latex: "$\\mathbb{3}$" }, 120796: { id: "U1D7DC", decimal: 120796, character: "\uD7DC", latex: "$\\mathbb{4}$" }, 120797: { id: "U1D7DD", decimal: 120797, character: "\uD7DD", latex: "$\\mathbb{5}$" }, 120798: { id: "U1D7DE", decimal: 120798, character: "\uD7DE", latex: "$\\mathbb{6}$" }, 120799: { id: "U1D7DF", decimal: 120799, character: "\uD7DF", latex: "$\\mathbb{7}$" }, 120800: { id: "U1D7E0", decimal: 120800, character: "\uD7E0", latex: "$\\mathbb{8}$" }, 120801: { id: "U1D7E1", decimal: 120801, character: "\uD7E1", latex: "$\\mathbb{9}$" }, 120802: { id: "U1D7E2", decimal: 120802, character: "\uD7E2", latex: "$\\mathsf{0}$" }, 120803: { id: "U1D7E3", decimal: 120803, character: "\uD7E3", latex: "$\\mathsf{1}$" }, 120804: { id: "U1D7E4", decimal: 120804, character: "\uD7E4", latex: "$\\mathsf{2}$" }, 120805: { id: "U1D7E5", decimal: 120805, character: "\uD7E5", latex: "$\\mathsf{3}$" }, 120806: { id: "U1D7E6", decimal: 120806, character: "\uD7E6", latex: "$\\mathsf{4}$" }, 120807: { id: "U1D7E7", decimal: 120807, character: "\uD7E7", latex: "$\\mathsf{5}$" }, 120808: { id: "U1D7E8", decimal: 120808, character: "\uD7E8", latex: "$\\mathsf{6}$" }, 120809: { id: "U1D7E9", decimal: 120809, character: "\uD7E9", latex: "$\\mathsf{7}$" }, 120810: { id: "U1D7EA", decimal: 120810, character: "\uD7EA", latex: "$\\mathsf{8}$" }, 120811: { id: "U1D7EB", decimal: 120811, character: "\uD7EB", latex: "$\\mathsf{9}$" }, 120822: { id: "U1D7F6", decimal: 120822, character: "\uD7F6", latex: "$\\mathtt{0}$" }, 120823: { id: "U1D7F7", decimal: 120823, character: "\uD7F7", latex: "$\\mathtt{1}$" }, 120824: { id: "U1D7F8", decimal: 120824, character: "\uD7F8", latex: "$\\mathtt{2}$" }, 120825: { id: "U1D7F9", decimal: 120825, character: "\uD7F9", latex: "$\\mathtt{3}$" }, 120826: { id: "U1D7FA", decimal: 120826, character: "\uD7FA", latex: "$\\mathtt{4}$" }, 120827: { id: "U1D7FB", decimal: 120827, character: "\uD7FB", latex: "$\\mathtt{5}$" }, 120828: { id: "U1D7FC", decimal: 120828, character: "\uD7FC", latex: "$\\mathtt{6}$" }, 120829: { id: "U1D7FD", decimal: 120829, character: "\uD7FD", latex: "$\\mathtt{7}$" }, 120830: { id: "U1D7FE", decimal: 120830, character: "\uD7FE", latex: "$\\mathtt{8}$" }, 120831: { id: "U1D7FF", decimal: 120831, character: "\uD7FF", latex: "$\\mathtt{9}$" } }; function bibDbToBibTeX(bibDB) { const keysToExport = Object.keys(bibDB); const bibtexEntries = []; keysToExport == null ? void 0 : keysToExport.forEach((key2) => { const entryObject = bibDB[key2]; const cslType = entryObject.csl_type; const bibTexType = cslType ? typeMapping(cslType).bibtex : entryObject.bib_type; const bibtexEntry = { type: bibTexType, key: entryObject.entry_key }; const outputFields = {}; const fieldsForExport = entryObject.fields; Object.keys(fieldsForExport).forEach((fieldKey) => { const fieldType = FieldMap[fieldKey]; if (fieldType) { const type2 = fieldType.type; const typeReader = fieldType.bibtex; const bibtexKey = typeof typeReader === "string" ? typeReader : typeReader(bibTexType); const bibtexValue = fieldsForExport[fieldKey]; switch (type2) { case "f_date": { outputFields[bibtexKey] = String(bibtexValue); const parts = String(bibtexValue).split("-"); if (parts.length > 0) { outputFields.year = parts[0]; if (parts.length > 1) { outputFields.month = parts[1]; } } } break; case "f_integer": outputFields[bibtexKey] = formatText(bibtexValue); break; case "f_key": outputFields[bibtexKey] = formatKey(bibtexValue, bibtexKey); break; case "f_literal": case "f_long_literal": outputFields[bibtexKey] = formatText(bibtexValue); break; case "l_range": outputFields[bibtexKey] = formatRange(bibtexValue); break; case "f_title": outputFields[bibtexKey] = formatText(bibtexValue); break; case "f_uri": case "f_verbatim": outputFields[bibtexKey] = bibtexValue.replace(/{|}/g, ""); break; case "l_key": outputFields[bibtexKey] = escapeNonAscii( bibtexValue.map((k2) => formatKey(k2, bibtexKey)).join(" and ") ); break; case "l_literal": outputFields[bibtexKey] = bibtexValue.map((text2) => formatText(text2)).join(" and "); break; case "l_name": outputFields[bibtexKey] = formatNames(bibtexValue); break; case "l_tag": outputFields[bibtexKey] = escapeNonAscii(bibtexValue.join(", ")); break; } } }); bibtexEntry.values = outputFields; bibtexEntries.push(bibtexEntry); }); return toBibtex(bibtexEntries); } const toBibtex = (entries) => { const length2 = entries.length; let bibTexStr = ""; for (let i2 = 0; i2 < length2; i2++) { const entry = entries[i2]; bibTexStr = bibTexStr + `@${entry.type}{${entry.key}`; if (entry.values && Object.keys(entry.values).length > 0) { sortedKeys$1(entry.values).forEach((key2) => { if (entry.values) { const rawValue = entry.values[key2]; const value = `{${rawValue}}`; bibTexStr = bibTexStr + `, ${key2} = ${value}`; } }); } else { bibTexStr = bibTexStr + ","; } bibTexStr = bibTexStr + "\n}"; } return bibTexStr; }; const sortedKeys$1 = (fields) => { let pos = 1; const keySortOrder = {}; keySortOrder.title = pos++; keySortOrder.author = pos++; keySortOrder.editor = pos++; keySortOrder.year = pos++; keySortOrder.month = pos++; keySortOrder.date = pos++; keySortOrder.journal = pos++; keySortOrder.booktitle = pos++; keySortOrder.publisher = pos++; keySortOrder.howpublished = pos++; keySortOrder.pages = pos++; keySortOrder.series = pos++; keySortOrder.volume = pos++; keySortOrder.chapter = pos++; keySortOrder.number = pos++; keySortOrder.edition = pos++; keySortOrder.issue = pos++; keySortOrder.doi = pos++; keySortOrder.url = pos++; keySortOrder.abstract = pos++; keySortOrder.note = pos++; const keys2 = Object.keys(fields); const sorted = keys2.sort((a2, b2) => { const aOrder = keySortOrder[a2.toLowerCase()]; const bOrder = keySortOrder[b2.toLowerCase()]; if (aOrder && bOrder) { return aOrder - bOrder; } else if (aOrder !== void 0) { return -1; } else if (bOrder !== void 0) { return 1; } return a2.localeCompare(b2); }); return sorted; }; const escapeNonAscii = (value) => { let result = ""; const chars = Array.from(value); chars.forEach((c) => { const char2 = c.codePointAt(0); if (char2) { const characterMap = characters[char2]; if (characterMap) { result = result + (characterMap.ungrouped ? characterMap.latex : `{${characterMap.latex}}`); } else { result = result + String.fromCodePoint(char2); } } else { result = result + "?"; } }); return result; }; const formatKey = (value, fieldKey) => { if (typeof value === "string") { const fieldType = FieldMap[fieldKey]; if (Array.isArray(fieldType.options)) { return escapeNonAscii(value); } else if (fieldType.options) { return escapeNonAscii(fieldType.options[value].bibtex); } else { return escapeNonAscii(value); } } else { return formatText(value); } }; const formatText = (nodes2) => { let formattedText = ""; let lastNodeMarks = []; const textNodes2 = nodes2.concat({ type: "text", text: "" }); textNodes2.forEach((node2) => { const thisNodeMarks = []; if (node2.marks) { node2.marks.forEach((mark) => { if (mark.type === "nocase") { thisNodeMarks.unshift(mark.type); } else { thisNodeMarks.push(mark.type); } }); } let closing = false; const closeTags = []; lastNodeMarks.forEach((mark, index2) => { if (mark !== thisNodeMarks[index2]) { closing = true; } if (closing) { const closeTag = lastNodeMarks[0] !== "nocase" && FormattingTags[mark].open[0] === "\\" ? `${FormattingTags[mark].close}}` : FormattingTags[mark].close; closeTags.push(closeTag); } }); closeTags.reverse(); formattedText = formattedText + closeTags.join(""); let opening = false; let doNotEscape = false; thisNodeMarks.forEach((mark, index2) => { if (mark !== lastNodeMarks[index2]) { opening = true; } if (opening) { if (thisNodeMarks[0] !== "nocase" && FormattingTags[mark].open[0] === "\\") { formattedText = formattedText + "{"; } formattedText = formattedText + FormattingTags[mark].open; if (FormattingTags[mark].verbatim) { doNotEscape = true; } } }); const textNode = node2; if (doNotEscape) { formattedText = formattedText + textNode.text; } else { formattedText = formattedText + escapeNonAscii(textNode.text); } lastNodeMarks = thisNodeMarks; }); return formattedText; }; const formatRange = (value) => { return value.map((range2) => range2.map((text2) => formatText(text2)).join("--")).join(","); }; const formatNames = (names) => { const formattedNames = []; names.forEach((name) => { if (name.literal) { const literal = formatText(name.literal); if (literal.length) { formattedNames.push(`{${literal}}`); } } else { const family = name.family ? formatText(name.family) : ""; const given = name.given ? formatText(name.given) : ""; const suffix = name.suffix ? formatText(name.suffix) : false; const prefix2 = name.prefix ? formatText(name.prefix) : false; if (suffix && prefix2) { formattedNames.push(`${protect(`${prefix2} ${family}`)}, ${protect(suffix)}, ${protect(given)}`); } else if (suffix) { formattedNames.push(`${protect(family)}, ${protect(suffix)}, ${protect(given)}`); } else if (prefix2) { formattedNames.push(`${protect(`${prefix2} ${family}`)}, ${protect(given)}`); } else { formattedNames.push(`${protect(family)}, ${protect(given)}`); } } }); return formattedNames.join(" and "); }; const kBibtexSafeRegex = /^[a-zA-Z0-9 .-]*$/; function protect(str2) { if (str2.match(kBibtexSafeRegex)) { return str2; } else { return `{${str2}}`; } } function toBibTeX(id2, csl) { const bibDB = cslToBibDB(id2, csl); if (bibDB) { const sourceAsBibTeX = bibDbToBibTeX(bibDB); return sourceAsBibTeX; } return void 0; } function cslToBibDB(id2, csl) { const bibType = bibTypeForCSL(csl.type); const bibObject = { bib_type: bibType[0], csl_type: bibType[1].csl, entry_key: id2, fields: {} }; const enumerableCSL = csl; sortedKeys(csl).forEach((key2) => { const value = enumerableCSL[key2]; const bibFieldDatas = bibFieldForValue(key2, csl.type); bibFieldDatas == null ? void 0 : bibFieldDatas.forEach((bibFieldData) => { if (bibFieldData) { const bibFieldKey = bibFieldData[0]; const bibField = bibFieldData[1]; const type2 = bibField.type; let nodeValue; switch (type2) { case "f_date": { const cslDate = value; if (cslDate) { const edtfDate = cslDateToEDTFDate(cslDate); if (edtfDate) { nodeValue = edtfDate; } } break; } case "f_integer": case "f_literal": case "f_long_literal": case "f_title": if (typeof value === "string" && value.length > 0) { nodeValue = textNodes(value); } break; case "l_literal": if (typeof value === "string" && value.length > 0) { nodeValue = [textNodes(value)]; } break; case "f_key": if (bibField.options) { const options = bibField.options; Object.keys(options).find((optionKey) => { const optionValue = options[optionKey]; if (optionValue.csl === value) { nodeValue = optionKey; return true; } else { return false; } }); if (!nodeValue) { nodeValue = textNodes(String(value)); } } break; case "l_key": if (bibField.options) { const options = bibField.options; Object.keys(options).find((optionKey) => { const optionValue = options[optionKey]; if (optionValue.csl === value) { nodeValue = [optionKey]; return true; } else { return false; } }); if (!nodeValue && typeof value === "string" && value.length > 0) { nodeValue = textNodes(value); } } break; case "l_range": { const valueStr = value; const parts = valueStr.split("-"); const range2 = rangeArray(parts); if (range2) { nodeValue = [range2]; } break; } case "f_uri": case "f_verbatim": nodeValue = value; break; case "l_name": { const names = value; nodeValue = names.map((name) => { const nameDict = { family: name.family ? textNodes(name.family) : void 0, given: name.given ? textNodes(name.given) : void 0, literal: name.literal ? textNodes(name.literal) : void 0 }; return nameDict; }); break; } case "l_tag": nodeValue = [value]; break; } if (nodeValue) { if (shouldIncludeField(bibFieldKey, bibType[1])) { bibObject.fields[bibFieldKey] = nodeValue; } } } }); }); const bibDB = { item: bibObject }; return bibDB; } function shouldIncludeField(bibDBFieldName, bibType) { if (bibType.csl === "dataset" && bibDBFieldName === "author") { return true; } return bibType.required.includes(bibDBFieldName) || bibType.optional.includes(bibDBFieldName) || bibType.eitheror.includes(bibDBFieldName); } function textNodes(str2) { const pmNode = cslTextToProsemirrorNode(str2); if (pmNode) { const nodes2 = []; pmNode.forEach((node2) => { nodes2.push({ type: "text", text: node2.textContent, marks: node2.marks.map((mark) => ({ type: mark.type.name })) }); }); return nodes2; } else { return [ { type: "text", text: str2, marks: [], attrs: {} } ]; } } function rangeArray(parts) { if (parts.length === 1) { return [textNodes(parts[0])]; } else if (parts.length === 2) { return [textNodes(parts[0]), textNodes(parts[1])]; } else { return void 0; } } function bibTypeForCSL(cslType) { const key2 = Object.keys(BibTypes).find((bibTypeKey) => { const bibType = BibTypes[bibTypeKey]; return bibType.csl === cslType; }); if (key2) { const bibType = BibTypes[key2]; return [key2, bibType]; } else { const bibType = BibTypes.misc; return ["misc", bibType]; } } function bibFieldForValue(cslKey, cslType) { if (cslType === "article-journal" && cslKey === "issue" || cslType === "patent" && cslKey === "number" || cslKey === "collection-number") { const bibField = { type: "f_literal", biblatex: "number", csl: cslKey }; return [["number", bibField]]; } const keys2 = Object.keys(BibFieldTypes).filter((bibFieldKey) => { const bibField = BibFieldTypes[bibFieldKey]; const cslFieldName = bibField.csl; return cslFieldName && cslFieldName === cslKey; }); if (keys2) { return keys2.map((key2) => { const bibField = BibFieldTypes[key2]; return [key2, bibField]; }); } else { return void 0; } } function sortedKeys(csl) { let pos = 1; const keySortOrder = {}; keySortOrder.title = pos++; keySortOrder.author = pos++; keySortOrder.editor = pos++; keySortOrder.director = pos++; keySortOrder.illustrator = pos++; keySortOrder["collection-editor"] = pos++; keySortOrder.translator = pos++; keySortOrder.doi = pos++; keySortOrder.issued = pos++; keySortOrder["event-date"] = pos++; keySortOrder["container-title"] = pos++; keySortOrder["collection-title"] = pos++; keySortOrder.url = pos++; keySortOrder.page = pos++; keySortOrder.publisher = pos++; const enumerableCSL = csl; const keys2 = Object.keys(enumerableCSL); const sorted = keys2.sort((a2, b2) => { const aOrder = keySortOrder[a2.toLowerCase()]; const bOrder = keySortOrder[b2.toLowerCase()]; if (aOrder && bOrder) { return aOrder - bOrder; } else if (aOrder !== void 0) { return -1; } else if (bOrder !== void 0) { return 1; } return a2.localeCompare(b2); }); return sorted; } const kLocalBibliographyProviderKey = "E06068FE-45DA-4D88-ABDA-0DF290624950"; class BibliographyDataProviderLocal { constructor(server) { __publicField(this, "etag"); __publicField(this, "bibliography"); __publicField(this, "server"); __publicField(this, "name", "Bibliography"); __publicField(this, "key", kLocalBibliographyProviderKey); __publicField(this, "requiresWritable", false); this.server = server; this.etag = ""; } isEnabled() { return true; } prime() { return Promise.resolve(); } async load(ui2, docPath, resourcePath, yamlBlocks) { const bibliographiesRelative = bibliographyFilesFromDoc(yamlBlocks); const bibliographiesAbsolute = (bibliographiesRelative == null ? void 0 : bibliographiesRelative.map((path) => { if (isAbsolute(path, ui2.context.isWindowsDesktop())) { return path; } else { return joinPaths(resourcePath, path); } })) || []; const refBlock = referenceBlockFromYaml(yamlBlocks); let updateIndex = false; if (docPath || bibliographiesAbsolute.length > 0 || refBlock) { try { const result = await this.server.getBibliography(docPath, bibliographiesAbsolute, refBlock, this.etag); if (!this.bibliography || result.etag !== this.etag) { this.bibliography = result.bibliography; updateIndex = true; } this.etag = result.etag; } catch (e2) { } } return updateIndex; } collections() { return []; } items() { if (!this.bibliography || !this.bibliography.sources) { return []; } return this.bibliography.sources.map((source) => ({ ...source, id: source.id, providerKey: this.key, collectionKeys: [] })); } itemsForCollection() { return []; } projectBiblios() { var _a; return ((_a = this.bibliography) == null ? void 0 : _a.project_biblios) || []; } generateBibTeX(_ui, id2, csl) { return Promise.resolve(toBibTeX(id2, csl)); } warningMessage() { return void 0; } bibliographyPaths(doc2, ui2) { var _a, _b, _c; const kPermissableFileExtensions = ["bibtex", "bib", "yaml", "yml", "json"]; if (((_a = this.bibliography) == null ? void 0 : _a.project_biblios) && this.bibliography.project_biblios.length > 0) { return (_b = this.bibliography) == null ? void 0 : _b.project_biblios.map((projectBiblio) => { return { displayPath: projectBiblio, fullPath: projectBiblio, isProject: true, writable: kPermissableFileExtensions.includes(getExtension(projectBiblio)) }; }); } return ((_c = bibliographyFilesFromDocument(doc2)) == null ? void 0 : _c.map((path) => { return { displayPath: path, fullPath: isAbsolute(path, ui2.context.isWindowsDesktop()) ? path : joinPaths(ui2.context.getDefaultResourceDir(), path), isProject: false, writable: kPermissableFileExtensions.includes(getExtension(path)) }; })) || []; } } function bibliographyFilesFromDocument(doc2) { return bibliographyFilesFromDoc(parseYamlNodes(doc2)); } function bibliographyFilesFromDoc(parsedYamls) { const bibliographyValues = parsedYamls.map((parsedYaml) => { return valueFromYamlText("bibliography", parsedYaml.yamlCode); }).filter((val) => val !== null); if (bibliographyValues.length > 0) { const bibliographyFiles = bibliographyValues[bibliographyValues.length - 1]; if (Array.isArray(bibliographyFiles) && bibliographyFiles.every((bibliographyFile) => typeof bibliographyFile === "string")) { return bibliographyFiles; } else if (typeof bibliographyFiles === "string") { return [bibliographyFiles]; } } return void 0; } function referenceBlockFromYaml(parsedYamls) { const refBlockParsedYamls = parsedYamls.filter( (parsedYaml) => parsedYaml.yaml !== null && typeof parsedYaml.yaml === "object" && parsedYaml.yaml.references ); if (refBlockParsedYamls.length > 0) { const lastReferenceParsedYaml = refBlockParsedYamls[refBlockParsedYamls.length - 1]; if (lastReferenceParsedYaml) { return `--- ${lastReferenceParsedYaml.yamlCode} --- `; } } return ""; } const kSpaceOrColonRegex = /[\s:]/; function bibliographyLine(bibliographyFile) { const sketchyCharMatch = bibliographyFile.match(kSpaceOrColonRegex); if (sketchyCharMatch) { return `bibliography: "${bibliographyFile}"`; } else { return `bibliography: ${bibliographyFile}`; } } function ensureBibliographyFileForDoc(tr, bibliographyFile) { const parsedYamlNodes = parseYamlNodes(tr.doc); const bibliographiesRelative = bibliographyFilesFromDoc(parsedYamlNodes); if (bibliographiesRelative && bibliographiesRelative.length > 0) { return bibliographiesRelative.includes(bibliographyFile); } else { if (parsedYamlNodes.length === 0) { const biblioNode = createBiblographyYamlNode(tr.doc.type.schema, bibliographyFile); tr.insert(1, biblioNode); } else { const firstBlock = parsedYamlNodes[0]; const updatedNode = addBibliographyToYamlNode(tr.doc.type.schema, bibliographyFile, firstBlock); tr.replaceRangeWith(firstBlock.node.pos, firstBlock.node.pos + firstBlock.node.node.nodeSize, updatedNode); } return true; } } function addBibliographyToYamlNode(schema2, bibliographyFile, parsedYaml) { const yamlCode = parsedYaml.yamlCode; const yamlWithBib = `--- ${yamlCode} ${bibliographyLine(bibliographyFile)} ---`; const yamlText = schema2.text(yamlWithBib); return schema2.nodes.yaml_metadata.create({}, yamlText); } function createBiblographyYamlNode(schema2, bibliographyFile) { const yamlText = schema2.text(`--- ${bibliographyLine(bibliographyFile)} ---`); return schema2.nodes.yaml_metadata.create({}, yamlText); } const kZoteroProviderKey = "2509FBBE-5BB0-44C4-B119-6083A81ED673"; const kZoteroBibTeXTranslator = "ca65189f-8815-4afe-8c8b-8c7c15f0edca"; class BibliographyDataProviderZotero { constructor(server) { __publicField(this, "allCollections", []); __publicField(this, "allCollectionSpecs", []); __publicField(this, "server"); __publicField(this, "warning"); __publicField(this, "enabled", true); __publicField(this, "docPath"); __publicField(this, "zoteroConfig"); __publicField(this, "name", "Zotero"); __publicField(this, "key", kZoteroProviderKey); __publicField(this, "requiresWritable", true); this.server = server; } async load(_ui, docPath, _resourcePath, yamlBlocks, refreshCollectionData) { let hasUpdates = false; this.docPath = docPath; this.zoteroConfig = zoteroConfig(yamlBlocks); if (this.zoteroConfig) { this.enabled = true; try { const collectionSpecs = this.allCollections.map(({ ...rest }) => rest); const useCache = this.warning === void 0 || this.warning.length === 0; const collections = Array.isArray(this.zoteroConfig) ? this.zoteroConfig : []; const result = await this.server.getCollections(docPath, collections, collectionSpecs || [], useCache); this.warning = result.warning; if (result.status === "ok") { if (result.message) { const newCollections = result.message.map((collection) => { const existingCollection = this.allCollections.find((col) => col.name === collection.name); if (useCache && existingCollection && existingCollection.version === collection.version && existingCollection.version !== 0) { collection.items = existingCollection.items; } else { hasUpdates = true; } return collection; }); hasUpdates = hasUpdates || newCollections.length !== this.collections.length; this.allCollections = newCollections; } } else { } } catch (err) { } if (refreshCollectionData) { const specResult = await this.server.getActiveCollectionSpecs( this.docPath || null, Array.isArray(this.zoteroConfig) ? this.zoteroConfig : [] ); if (specResult && specResult.status === "ok") { this.allCollectionSpecs = specResult.message.map( (spec) => this.toBibliographyCollection(spec) ); } else { this.allCollectionSpecs = []; } } } else { if (this.collections.length > 0) { hasUpdates = true; } this.enabled = false; this.allCollections = []; this.allCollectionSpecs = []; } return hasUpdates; } isEnabled() { return this.enabled && (this.allCollections.length > 0 || this.allCollectionSpecs.length > 0); } collections() { return this.allCollectionSpecs || []; } toBibliographyCollection(zoteroSpec) { return { name: zoteroSpec.name, key: zoteroSpec.key, parentKey: zoteroSpec.parentKey, provider: kZoteroProviderKey }; } items() { var _a; const entryArrays = ((_a = this.allCollections) == null ? void 0 : _a.map((collection) => this.bibliographySources(collection))) || []; const zoteroEntries = [].concat(...entryArrays); return zoteroEntries; } itemsForCollection(collectionKey) { if (!collectionKey) { return this.items(); } return this.items().filter((item) => { if (item.collectionKeys) { return item.collectionKeys.includes(collectionKey); } return false; }); } bibliographyPaths() { return []; } async generateBibTeX(ui2, id2, csl) { if (csl.key && ui2.prefs.zoteroUseBetterBibtex()) { const bibTeX = await this.server.betterBibtexExport( [csl.key], kZoteroBibTeXTranslator, parseInt(csl.libraryID, 10) ); if (bibTeX) { return Promise.resolve(bibTeX.message); } } return Promise.resolve(toBibTeX(id2, csl)); } warningMessage() { return this.warning; } bibliographySources(collection) { var _a; const items = (_a = collection.items) == null ? void 0 : _a.map((item) => { return { ...item, id: item.id || suggestCiteId$2([], item), providerKey: this.key, collectionKeys: item.collectionKeys }; }); return items || []; } } function zoteroConfig(parsedYamls) { const zoteroValues = parsedYamls.map((parsedYaml) => { return valueFromYamlText("zotero", parsedYaml.yamlCode); }).filter((val) => val !== null); if (zoteroValues.length > 0) { const zoteroConfigValue = zoteroValues[zoteroValues.length - 1]; if (typeof zoteroConfigValue === "boolean") { return zoteroConfigValue; } else if (typeof zoteroConfigValue === "string") { return [zoteroConfigValue]; } else if (Array.isArray(zoteroConfigValue)) { return zoteroConfigValue.map(String); } else { return true; } } return true; } function bibliographyFileForPath(path, ui2) { return { displayPath: path, fullPath: isAbsolute(path, ui2.context.isWindowsDesktop()) ? path : joinPaths(ui2.context.getDefaultResourceDir(), path), isProject: false, writable: true }; } function bibliographyTypes(ui2) { const defaultBiblioType = ui2.prefs.bibliographyDefaultType(); return [ { displayName: ui2.context.translateText("BibTeX"), extension: "bib", default: defaultBiblioType === "bib" }, { displayName: ui2.context.translateText("CSL-YAML"), extension: "yaml", default: defaultBiblioType === "yaml" }, { displayName: ui2.context.translateText("CSL-JSON"), extension: "json", default: defaultBiblioType === "json" } ]; } const kFields = [ { name: "id", weight: 30 }, { name: "author.family", weight: 15 }, { name: "author.literal", weight: 15 }, { name: "issued.raw", weight: 15 }, { name: "title", weight: 15 }, { name: "author.given", weight: 10 }, { name: "providerKey", weight: 0.01 }, { name: "collectionKeys", weight: 0.01 } ]; const kSearchOptions = { isCaseSensitive: false, shouldSort: true, includeMatches: false, includeScore: false, keys: kFields }; class BibliographyManager { constructor(server, zoteroServer) { __publicField(this, "providers"); __publicField(this, "sources"); __publicField(this, "writable"); __publicField(this, "searchIndex"); this.providers = [new BibliographyDataProviderLocal(server)]; if (zoteroServer) { this.providers.push(new BibliographyDataProviderZotero(zoteroServer)); } } async prime(ui2, doc2) { await this.load(ui2, doc2, true); } async loadLocal(ui2, doc2) { await this.load(ui2, doc2, false, true); } async load(ui2, doc2, refreshCollectionData, localOnly) { const parsedYamlNodes = parseYamlNodes(doc2); const docPath = ui2.context.getDocumentPath(); const providers = localOnly ? this.providers.filter((provider) => provider.requiresWritable === false) : this.providers; const providersNeedUpdate = await Promise.all( providers.map( (provider) => provider.load(ui2, docPath, ui2.context.getDefaultResourceDir(), parsedYamlNodes, refreshCollectionData) ) ); const needsIndexUpdate = providersNeedUpdate.reduce((prev2, curr) => prev2 || curr); if (needsIndexUpdate) { const providersEntries = this.providers.map((provider) => provider.items()); const idSort = (a2, b2) => { return a2.id.localeCompare(b2.id); }; this.sources = [].concat(...providersEntries).sort(idSort); this.searchIndex = this.getFuse(this.sources); } this.writable = this.isWritable(doc2, ui2); } hasSources() { return this.allSources().length > 0; } allSources() { var _a; if (this.sources && this.allowsWrites()) { return this.sources; } else { return ((_a = this.sources) == null ? void 0 : _a.filter((source) => source.providerKey === kLocalBibliographyProviderKey)) || []; } } sourcesForProvider(providerKey) { return this.allSources().filter((item) => item.providerKey === providerKey); } sourcesForProviderCollection(provider, collectionKey) { return this.sourcesForProvider(provider).filter((item) => item.collectionKeys.includes(collectionKey)); } localSources() { return this.allSources().filter((source) => source.providerKey === kLocalBibliographyProviderKey); } allowsWrites() { return this.writable || false; } isWritable(doc2, ui2) { const bibliographyFiles = this.bibliographyFiles(doc2, ui2); if (bibliographyFiles.length === 0) { return true; } return bibliographyFiles.filter((bibFile) => bibFile.writable).length > 0; } writableBibliographyFiles(doc2, ui2) { return this.bibliographyFiles(doc2, ui2).filter((bibFile) => bibFile.writable); } bibliographyFiles(doc2, ui2) { const bibliographyPaths = this.providers.map((provider) => provider.bibliographyPaths(doc2, ui2)); return [].concat(...bibliographyPaths); } localProviders() { if (this.allowsWrites()) { return this.providers; } else { return this.providers.filter((provider) => provider.requiresWritable === false); } } providerName(providerKey) { const dataProvider = this.providers.find((prov) => prov.key === providerKey); return dataProvider == null ? void 0 : dataProvider.name; } async generateBibTeX(ui2, id2, csl, provider) { const dataProvider = this.providers.find((prov) => prov.key === provider); if (dataProvider) { const dataProviderBibTeX = dataProvider.generateBibTeX(ui2, id2, csl); if (dataProviderBibTeX) { return dataProviderBibTeX; } } return Promise.resolve(toBibTeX(id2, csl)); } warning() { const warningProvider = this.providers.find((provider) => provider.warningMessage()); if (warningProvider) { return warningProvider.warningMessage(); } else { return void 0; } } warningForProvider(providerKey) { if (providerKey) { const warningProvider = this.providers.find((prov) => prov.key === providerKey); if (warningProvider) { return warningProvider.warningMessage(); } else { return void 0; } } else { return void 0; } } findDoiInLocalBibliography(doi) { return this.localSources().find((source) => source.DOI === doi); } findIdInLocalBibliography(id2) { return this.localSources().find((source) => source.id === id2); } search(query, providerKey, collectionKey) { const limit = 100; if (query && query.length > 0) { if (providerKey && collectionKey) { return this.searchProviderCollection(query, limit, providerKey, collectionKey); } else if (providerKey) { return this.searchProvider(query, limit, providerKey); } else { return this.searchAllSources(query, limit); } } else { if (providerKey && collectionKey) { return this.sourcesForProviderCollection(providerKey, collectionKey); } else if (providerKey) { return this.sourcesForProvider(providerKey); } else { return this.allSources(); } } } searchAllSources(query, limit) { return this.searchSources(query, limit, this.allSources()); } searchSources(query, limit, sources) { if (sources && this.searchIndex) { const searchResults = this.searchIndex.search(query, { ...kSearchOptions, limit }); const items = searchResults.map((result) => result.item); const filteredItems = this.allowsWrites() ? items : items.filter((item) => item.provider === kLocalBibliographyProviderKey); return filteredItems; } else { return []; } } searchProvider(query, limit, providerKey) { const orFields = kFields.flatMap((field) => { if (Array.isArray(field)) { return field.map((name) => ({ [name]: query })); } else { return { [field.name]: query }; } }); const q2 = { $and: [ { providerKey }, { $or: orFields } ] }; if (this.searchIndex) { const searchResults = this.searchIndex.search(q2, { limit }); return searchResults.map((result) => result.item); } else { return []; } } searchProviderCollection(query, limit, providerKey, collectionKey) { const orFields = kFields.flatMap((field) => { if (Array.isArray(field.name)) { return field.name.map((name) => ({ [name]: query })); } else { return { [field.name]: query }; } }); const q2 = { $and: [ { providerKey }, { collectionKeys: collectionKey }, { $or: orFields } ] }; if (this.searchIndex) { const searchResults = this.searchIndex.search(q2, { limit }); return searchResults.map((result) => result.item); } else { return []; } } getFuse(bibSources) { const options = { ...kSearchOptions, keys: kFields.map((field) => field.name) }; const index2 = Fuse.createIndex(options.keys, bibSources); return new Fuse(bibSources, options, index2); } } const completion = ""; const CompletionItemView = (props) => { const className = ["pm-completion-item"].concat(props.classes || []).join(" "); const style = { width: props.width + "px", ...props.style }; return /* @__PURE__ */ React.createElement("div", { className, style }, /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-type" }, props.imageAdornment ? /* @__PURE__ */ React.createElement( "img", { className: "pm-completion-image-adorn pm-block-border-color pm-background-color", src: props.imageAdornment, draggable: "false" } ) : void 0, /* @__PURE__ */ React.createElement("img", { className: "pm-completion-item-icon pm-block-border-color", src: props.image, draggable: "false" })), /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-summary", style: { width: props.width - 40 - 36 + "px" } }, /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-id" }, /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-primary pm-completion-item-title pm-fixedwidth-font" }, props.title), /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-primary pm-completion-item-detail" }, props.detail)), props.htmlTitle ? /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-subTitle", dangerouslySetInnerHTML: { __html: props.subTitle || "" } }) : /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-subTitle" }, props.subTitle))); }; const citeCompletion = ""; const kCiteCompletionTypeBibliography = "bibl"; function bibliographyCiteCompletionProvider(ui2, bibliographyManager) { const referenceEntryForSource = (source, forceLightMode) => { var _a, _b; const id2 = source.id; const primaryText = id2; const detailText = source.title || source["short-title"] || source["container-title"] || source.type; const image2 = imageForType$1(ui2.images, source.type)[ui2.prefs.darkMode() && !forceLightMode ? 1 : 0]; const imageAdornment = source.providerKey === kZoteroProviderKey ? (_a = ui2.images.citations) == null ? void 0 : _a.zoteroOverlay : void 0; const secondaryText = (len) => { const authorStr = formatAuthors$2(source.author, len - source.id.length); const date = source.issued ? formatIssuedDate(source.issued) : ""; const detail = `${authorStr} ${date}`; return detail; }; const secondaryIndex = (_b = source.author) == null ? void 0 : _b.map(joinAuthorNames).join(" "); const replace2 = (view, pos, server) => { if (source && bibliographyManager.findIdInLocalBibliography(source.id)) { const tr = view.state.tr; const schema2 = view.state.schema; const citeIdMark = schema2.text(source.id, [schema2.marks.cite_id.create()]); performCiteCompletionReplacement(tr, pos, citeIdMark); view.dispatch(tr); return Promise.resolve(); } else if (source) { return insertCitation( view, source.DOI || "", bibliographyManager, pos, ui2, server.pandoc, source, bibliographyManager.providerName(source.providerKey) ); } else { return Promise.resolve(); } }; return { id: id2, type: kCiteCompletionTypeBibliography, primaryText, secondaryText, detailText, image: image2, imageAdornment, index: { secondary: secondaryIndex, tertiary: detailText }, replace: replace2 }; }; return { currentEntries: () => { if (bibliographyManager.hasSources()) { return bibliographyManager.allSources().map((source) => referenceEntryForSource(source)); } else { return void 0; } }, streamEntries: (doc2, onStreamReady) => { bibliographyManager.load(ui2, doc2).then(() => { onStreamReady(bibliographyManager.allSources().map((source) => referenceEntryForSource(source))); }); }, awaitEntries: async (doc2) => { await bibliographyManager.load(ui2, doc2); return bibliographyManager.allSources().map((source) => referenceEntryForSource(source)); }, warningMessage: () => { return bibliographyManager.warning(); } }; } const xrefCompletion = ""; const kMaxResults = 20; function xrefCompletionHandler(ui2, server) { const index2 = new FuseIndex(); return { id: "BAACC160-56BE-4322-B079-54477A880623", enabled: (context) => { return markIsActive(context, context.doc.type.schema.marks.xref); }, completions: xrefCompletions(ui2, server, index2), filter: (completions, _state, token2) => { if (token2.length > 0) { return index2.search(token2, kMaxResults); } else { return completions.slice(0, kMaxResults); } }, replacement(_schema, xref) { if (xref) { return xrefKey(xref); } else { return null; } }, view: { component: xrefView(ui2), key: (xref) => xrefKey(xref), height: 52, width: 350, maxVisible: 5, hideNoResults: true } }; } class FuseIndex { constructor() { __publicField(this, "fuse"); __publicField(this, "keys", [ { name: "id", weight: 20 }, { name: "type", weight: 1 }, { name: "title", weight: 1 } ]); this.fuse = this.createIndex([]); } update(xrefs) { this.fuse = this.createIndex(xrefs); } search(query, limit) { let type2 = null; let typeQuery = null; const colonLoc = query.indexOf(":"); if (colonLoc !== -1) { const prefix2 = query.slice(0, colonLoc); if (Object.prototype.hasOwnProperty.call(kXRefTypes, prefix2)) { type2 = prefix2; if (query.length > type2.length + 1) { typeQuery = query.slice(colonLoc + 1); } } } const options = { isCaseSensitive: false, shouldSort: true, minMatchCharLength: 2, limit, keys: this.keys }; const results = type2 ? typeQuery ? this.fuse.search({ $and: [{ type: type2 }, { $or: [{ id: typeQuery }, { title: typeQuery }] }] }, options) : this.fuse.search({ type: type2 }, options) : this.fuse.search(query, options); return uniqBy( results.map((result) => result.item), xrefKey ); } createIndex(xrefs) { const options = { keys: this.keys.map((key2) => key2.name) }; const index2 = Fuse.createIndex(options.keys, xrefs); return new Fuse(xrefs, options, index2); } } function xrefCompletions(ui2, server, index2) { const kXRefCompletionRegEx = /(@ref\()([ A-Za-z0-9:-]*)$/; return (text2, context) => { const match2 = text2.match(kXRefCompletionRegEx); if (match2) { const pos = context.selection.head - match2[2].length; const token2 = match2[2]; return { pos, offset: -match2[1].length + 1, token: token2, completions: async () => { const docPath = ui2.context.getDocumentPath(); if (docPath) { await ui2.context.withSavedDocument(); const xrefs = await server.indexForFile(docPath); index2.update(xrefs.refs); return xrefs.refs; } else { index2.update([]); return Promise.resolve([]); } }, decorations: token2.length === 0 ? DecorationSet.create(context.doc, [searchPlaceholderDecoration(pos, ui2)]) : void 0 }; } else { return null; } }; } function xrefView(ui2) { return (xref) => { const type2 = kXRefTypes[xref.type]; const image2 = (type2 == null ? void 0 : type2.image(ui2)) || ui2.images.omni_insert.generic; return /* @__PURE__ */ React.createElement( CompletionItemView, { width: 350, classes: ["pm-xref-completion-item"], image: image2, title: xrefKey(xref), subTitle: xref.title || "", detail: xref.file } ); }; } const kGenericType = { image: (ui2) => ui2.images.omni_insert.generic }; const kEqType = { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.math_display_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.math_display; } }; const kTableType$1 = { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.table_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.table; } }; const kXRefTypes = { h1: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.heading1_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.heading1; } }, h2: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.heading2_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.heading2; } }, h3: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.heading3_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.heading3; } }, h4: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.heading4_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.heading4; } }, fig: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.omni_insert) == null ? void 0 : _a.image_dark : (_b = ui2.images.omni_insert) == null ? void 0 : _b.image; } }, tab: kTableType$1, tbl: kTableType$1, eq: kEqType, thm: kEqType, lem: kEqType, cor: kEqType, prp: kEqType, cnj: kEqType, def: kEqType, exm: kGenericType, exr: kGenericType }; const kTheoremType = { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.xrefs) == null ? void 0 : _a.theorem_dark : (_b = ui2.images.xrefs) == null ? void 0 : _b.theorem; } }; const kQuartoXRefTypes = { sec: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.xrefs) == null ? void 0 : _a.section_dark : (_b = ui2.images.xrefs) == null ? void 0 : _b.section; } }, fig: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.xrefs) == null ? void 0 : _a.figure_dark : (_b = ui2.images.xrefs) == null ? void 0 : _b.figure; } }, tbl: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.xrefs) == null ? void 0 : _a.table_dark : (_b = ui2.images.xrefs) == null ? void 0 : _b.table; } }, lst: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.xrefs) == null ? void 0 : _a.listing_dark : (_b = ui2.images.xrefs) == null ? void 0 : _b.listing; } }, eq: { image: (ui2) => { var _a, _b; return ui2.prefs.darkMode() ? (_a = ui2.images.xrefs) == null ? void 0 : _a.equation_dark : (_b = ui2.images.xrefs) == null ? void 0 : _b.equation; } }, thm: kTheoremType, lem: kTheoremType, cor: kTheoremType, prp: kTheoremType, cnj: kTheoremType, def: kTheoremType, exm: kTheoremType, exr: kTheoremType }; const kCiteCompletionTypeXref = "xref"; function quartoXrefCiteCompletionProvider(ui2, server) { const referenceEntryForXref = (xref) => { const type2 = kQuartoXRefTypes[xref.type]; const id2 = xrefKey(xref, "quarto"); const primaryText = id2; const secondaryText = () => { return xref.file; }; const detailText = xref.title || ""; const image2 = (type2 == null ? void 0 : type2.image(ui2)) || ui2.images.omni_insert.generic; const imageAdornment = void 0; const replace2 = (view, pos) => { const tr = view.state.tr; const schema2 = view.state.schema; const idMark = schema2.text(id2, [schema2.marks.cite_id.create()]); performCiteCompletionReplacement(tr, pos, idMark); view.dispatch(tr); return Promise.resolve(); }; return { id: id2, type: kCiteCompletionTypeXref, primaryText, secondaryText, detailText, image: image2, imageAdornment, replace: replace2 }; }; let loadedEntries; return { currentEntries: () => { return loadedEntries; }, streamEntries: (_doc, onStreamReady) => { const docPath = ui2.context.getDocumentPath(); if (docPath) { ui2.context.withSavedDocument().then(() => { server.xref.quartoIndexForFile(docPath).then((xrefs) => { loadedEntries = xrefs.refs.map((ref) => referenceEntryForXref(ref)); onStreamReady(loadedEntries); }); }); } }, awaitEntries: async () => { const docPath = ui2.context.getDocumentPath(); if (docPath) { await ui2.context.withSavedDocument(); const index2 = await server.xref.quartoIndexForFile(docPath); loadedEntries = index2.refs.map((ref) => referenceEntryForXref(ref)); return loadedEntries; } else { return Promise.resolve([]); } }, warningMessage: () => { return void 0; } }; } const searchFields$2 = [ { name: "id", weight: 30 }, { name: "index.secondary", weight: 30 }, { name: "index.tertiary", weight: 5 } ]; function completionIndex(defaultEntries) { const options = { isCaseSensitive: false, shouldSort: true, includeMatches: false, includeScore: false, minMatchCharLength: 3, threshold: 0.5, keys: searchFields$2, useExtendedSearch: true }; defaultEntries = defaultEntries || []; const index2 = Fuse.createIndex(searchFields$2, defaultEntries); const fuse = new Fuse(defaultEntries, options, index2); let indexedEntries = []; return { setEntries: (entries) => { fuse.setCollection(entries); indexedEntries = entries; }, search: (searchTerm, limit) => { const results = fuse.search("^" + searchTerm, { ...options, limit }); return results.map((result) => result.item); }, exactMatch: (searchTerm) => { return indexedEntries.some((entry) => entry.id === searchTerm); } }; } const kAuthorMaxChars = 28; const kMaxCitationCompletions = 100; const kHeaderHeight = 20; const kCiteCompletionWidth = 400; const kCiteCompletionItemPadding = 10; const kCitationCompleteScope = "CitationScope"; function citationCompletionHandler(ui2, _events, bibManager, server, format2) { const completionProviders = [bibliographyCiteCompletionProvider(ui2, bibManager)]; if (format2.docTypes.includes(kQuartoDocType)) { completionProviders.push(quartoXrefCiteCompletionProvider(ui2, server)); } const searchIndex = completionIndex(); return { id: "AB9D4F8C-DA00-403A-AB4A-05373906FD8C", scope: kCitationCompleteScope, completions: citationCompletions(ui2, completionProviders, searchIndex), filter: (entries, _state, token2) => { return filterCitations(token2, completionProviders, searchIndex, entries); }, replace(view, pos, entry) { if (entry) { entry.replace(view, pos, server); } return Promise.resolve(); }, replacement(_schema, entry) { if (entry) { return entry.id; } else { return null; } }, view: { header: () => { const warningProvider = completionProviders.find((provider) => provider.warningMessage() !== void 0); if (warningProvider) { return { component: CompletionWarningHeaderView, height: kHeaderHeight, message: warningProvider.warningMessage() }; } else { return void 0; } }, component: CiteCompletionItemView, key: (entry) => entry.id, width: kCiteCompletionWidth, height: 54, maxVisible: 5, hideNoResults: true } }; } function filterCitations(token2, _completionProviders, citeSearch, entries) { if (token2.trim().length === 0 || hasDOI(token2)) { return entries; } const tokenWithoutEndPunctuation = token2.match(/.*[^,!?.:]/); const completionId = tokenWithoutEndPunctuation ? tokenWithoutEndPunctuation[0] : token2; if (citeSearch.exactMatch(completionId)) { return []; } const searchResults = citeSearch.search(token2, kMaxCitationCompletions); return searchResults || []; } function dedupe(entries) { const orderedByType = entries.sort((a2, b2) => { if (a2.type === b2.type) { return 0; } else if (a2.type === kCiteCompletionTypeXref) { return -1; } else { return 1; } }); return uniqBy(orderedByType, (entry) => entry.id); } function sortEntries(entries) { const dedupedSources = dedupe(entries); return dedupedSources.sort((a2, b2) => a2.id.localeCompare(b2.id)); } function citationCompletions(ui2, completionProviders, citeSearch) { return (_text, context) => { const parsed = parseCitation(context); if (parsed) { return { token: parsed.token, pos: parsed.pos, offset: parsed.offset, completions: async () => { const hasCurrentEntries = completionProviders.some((provider) => provider.currentEntries()); if (hasCurrentEntries) { let currentEntries = []; completionProviders.forEach((provider) => { const entries = provider.currentEntries(); if (entries) { currentEntries = currentEntries || []; currentEntries.push(...entries); } }); currentEntries = sortEntries(currentEntries); citeSearch.setEntries(currentEntries); let streamedEntries = null; let loadedEntries = []; let providerCount = 0; completionProviders.forEach((provider) => { provider.streamEntries(context.doc, (entries) => { providerCount = providerCount + 1; const updatedEntries = [...loadedEntries, ...entries]; loadedEntries = sortEntries(updatedEntries); if (providerCount === completionProviders.length) { streamedEntries = loadedEntries; citeSearch.setEntries(loadedEntries); } }); }); return { items: currentEntries, stream: () => streamedEntries }; } else { const promises = completionProviders.map((provider) => provider.awaitEntries(context.doc)); return Promise.all(promises).then((values) => { const results = []; values.forEach((value) => results.push(...value)); const sortedEntries = sortEntries(results); citeSearch.setEntries(sortedEntries); return sortedEntries; }); } }, decorations: parsed.token.length === 0 ? DecorationSet.create(context.doc, [ searchPlaceholderDecoration(context.selection.head, ui2, ui2.context.translateText("or DOI")) ]) : void 0 }; } return null; }; } const CiteCompletionItemView = (entry) => { return /* @__PURE__ */ React.createElement( CompletionItemView, { width: kCiteCompletionWidth - kCiteCompletionItemPadding, image: entry.image, imageAdornment: entry.imageAdornment, title: `@${entry.primaryText}`, detail: entry.secondaryText(kAuthorMaxChars - entry.primaryText.length), subTitle: entry.detailText, htmlTitle: true } ); }; const CompletionWarningHeaderView = (props) => { return /* @__PURE__ */ React.createElement("div", { className: "pm-completion-cite-warning pm-pane-border-color" }, props.ui.context.translateText(props.message || "An unexpected warning occurred.")); }; const key$4 = new PluginKey("cite-highlight"); function citeHighlightPlugin(schema2) { return markHighlightPlugin(key$4, schema2.marks.cite, (text2, _attrs, markRange) => { return markHighlightDecorations(markRange, text2, /([[\]])/g, "pm-link-text-color pm-fixedwidth-font"); }); } const completionDetailed = ""; const CompletionItemDetailedView = (props) => { const className = ["pm-completion-detailed-item"].concat(props.classes || []).join(" "); const style = { width: props.width + "px", ...props.style }; return /* @__PURE__ */ React.createElement("div", { className, style }, /* @__PURE__ */ React.createElement("div", { className: "pm-completion-detailed-item-type" }, /* @__PURE__ */ React.createElement("img", { className: "pm-block-border-color", src: props.image, draggable: "false" })), /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-detailed-summary" }, /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-detailed-heading" }, props.heading), /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-detailed-title" }, props.title), /* @__PURE__ */ React.createElement("div", { className: "pm-completion-item-detailed-subTitle" }, props.subTitle))); }; function doiFromEditingContext(context) { const parsedCitation = parseCitation(context); if (parsedCitation) { const doi = findDOI(parsedCitation.token); if (doi) { return parsedCitation; } return void 0; } else { return void 0; } } function doiFromSlice(context, slice2) { const parsedCitation = parseCitation(context); if (parsedCitation) { let text2 = ""; slice2.content.forEach((node2) => text2 = text2 + node2.textContent); if (text2.length) { const doi = findDOI(text2.trim()); if (doi) { return { ...parsedCitation, token: doi }; } } return void 0; } else { return void 0; } } const kCompletionWidth = 400; const kCompletionItemPadding = 10; function citationDoiCompletionHandler(ui2, bibManager, server) { return { id: "56DA14DD-6E3A-4481-93A9-938DC00393A5", scope: kCitationCompleteScope, completions: citationDOICompletions(ui2, server.doi, bibManager), replace(view, pos, cslEntry) { if (cslEntry && cslEntry.inBibliography) { const tr = view.state.tr; const schema2 = view.state.schema; const id2 = schema2.text(cslEntry.id, [schema2.marks.cite_id.create()]); performCompletionReplacement(tr, pos, id2); view.dispatch(tr); } else if (cslEntry) { return insertCitation(view, cslEntry.csl.DOI || "", bibManager, pos, ui2, server.pandoc, cslEntry.csl); } return Promise.resolve(); }, view: { component: CSLSourceView, key: (cslEntry) => cslEntry.csl.DOI, width: kCompletionWidth, height: 120, maxVisible: 5, hideNoResults: true } }; } function citationDOICompletions(ui2, _server, bibliographyManager) { return (_text, context) => { const parsedDOI = doiFromEditingContext(context); if (parsedDOI) { return { token: parsedDOI.token, pos: parsedDOI.pos, offset: parsedDOI.offset, completions: async () => { await bibliographyManager.loadLocal(ui2, context.doc); const source = bibliographyManager.findDoiInLocalBibliography(parsedDOI.token); if (source) { return [ { id: source.id, csl: source, inBibliography: true, image: imageForType$1(ui2.images, source.type)[ui2.prefs.darkMode() ? 1 : 0], formattedAuthor: formatAuthors$2(source.author, 50), formattedIssueDate: formatIssuedDate(source.issued) } ]; } else { return []; } } }; } return null; }; } const CSLSourceView = (cslEntry) => { const csl = cslEntry.csl; return /* @__PURE__ */ React.createElement( CompletionItemDetailedView, { width: kCompletionWidth - kCompletionItemPadding, image: cslEntry.image, heading: csl["short-container-title"] || csl.publisher || "", title: csl.title || "", subTitle: `${cslEntry.formattedAuthor} ${cslEntry.formattedIssueDate}` || "" } ); }; const citePopup = ""; const kMaxWidth$2 = 400; function citePopupPlugin(schema2, ui2, bibMgr, server) { return textPopupDecorationPlugin({ key: new PluginKey("cite-popup"), markType: schema2.marks.cite_id, maxWidth: kMaxWidth$2, dismissOnEdit: true, makeLinksAccessible: true, createPopup: async (view, target2, style) => { await bibMgr.loadLocal(ui2, view.state.doc); const citeId = target2.text.replace(/^-@|^@/, ""); let isXRef = false; const docPath = ui2.context.getDocumentPath(); if (docPath) { const xrefs = await server.xref.quartoXrefForId(docPath, citeId); isXRef = xrefs.refs.length > 0; } if (!isXRef) { const csl = cslFromDoc(view.state.doc); const source = bibMgr.findIdInLocalBibliography(citeId); if (source) { const previewHtml = await server.pandoc.citationHTML( ui2.context.getDocumentPath(), JSON.stringify([source]), csl || null ); const finalHtml = ensureSafeLinkIsPresent(previewHtml, () => { const url2 = urlForCitation(source); if (url2) { return { text: ui2.context.translateText("[Link]"), url: url2 }; } else { return void 0; } }); return /* @__PURE__ */ React.createElement(CitePopup, { previewHtml: finalHtml, style }); } } return null; }, specKey: (target2) => { return `cite:${target2.text}`; } }); } const kCiteHangingIndentClass = "hanging-indent"; const kCiteLinkClassName = "pm-cite-popup-link"; function ensureSafeLinkIsPresent(html2, getLinkData) { const parser = new window.DOMParser(); const doc2 = parser.parseFromString(html2, "text/html"); const rootDiv = doc2.body.getElementsByClassName("references"); if (rootDiv.length > 0) { const classNames = rootDiv[0].getAttribute("class"); const hasHangingIndent = classNames == null ? void 0 : classNames.match(`(^|\\s)${kCiteHangingIndentClass}($|\\s)`); rootDiv[0].removeAttribute("id"); rootDiv[0].removeAttribute("role"); if (hasHangingIndent && hasHangingIndent.length > 0) { rootDiv[0].setAttribute("class", kCiteHangingIndentClass); } else { rootDiv[0].removeAttribute("class"); } } const linkElements = doc2.body.getElementsByTagName("a"); if (linkElements.length === 0) { const linkData = getLinkData(); const paragraphs = doc2.body.getElementsByTagName("p"); if (paragraphs.length === 1 && linkData) { const paragraph = paragraphs[0]; const linkElement = doc2.createElement("a"); linkElement.innerText = linkData.text; linkElement.setAttribute("href", linkData.url); linkElement.setAttribute("class", `${kCiteLinkClassName} pm-link-text-color`); setLinkTarget(linkElement); paragraph.appendChild(linkElement); } } else { for (let i2 = 0; i2 < linkElements.length; i2++) { linkElements[i2].setAttribute("class", `pm-link-text-color`); setLinkTarget(linkElements[i2]); } } return doc2.body.innerHTML.replace(/\r?\n|\r/g, ""); } function setLinkTarget(linkElement) { linkElement.setAttribute("target", "_blank"); linkElement.setAttribute("rel", "noopener noreferrer"); } const CitePopup = (props) => { return /* @__PURE__ */ React.createElement(Popup, { classes: ["pm-cite-popup"], style: props.style }, /* @__PURE__ */ React.createElement("div", { className: "pm-cite-popup-preview" }, /* @__PURE__ */ React.createElement("div", { dangerouslySetInnerHTML: { __html: props.previewHtml || "" } }))); }; const tagInput = ""; const TagInput = React.forwardRef((props, ref) => { return /* @__PURE__ */ React.createElement("div", { style: props.style, className: "pm-tag-input-container", ref }, props.tags.length === 0 ? /* @__PURE__ */ React.createElement("div", { className: "pm-tag-input-placeholder" }, /* @__PURE__ */ React.createElement("div", { className: "pm-placeholder-text-color" }, props.placeholder)) : void 0, props.tags.map((tag) => /* @__PURE__ */ React.createElement( Tag, { key: tag.key, tag, onTagDeleted: props.onTagDeleted, onTagChanged: props.onTagChanged, onTagValidate: props.onTagValidate, ui: props.ui, maxDisplayCharacters: props.maxDisplayCharacters } ))); }); const Tag = (props) => { var _a, _b; const [editing, setEditing] = React.useState(false); const [editingText, setEditingText] = React.useState(props.tag.displayText); const [displayText, setDisplayText] = React.useState(props.tag.displayText); const editImage = React.useRef(null); const showingValidationError = React.useRef(false); const restoreFocusAfterCancel = React.useRef(false); const editTextInput = React.useRef(null); React.useLayoutEffect(() => { var _a2, _b2; if (editing) { (_a2 = editTextInput.current) == null ? void 0 : _a2.focus(); } else if (restoreFocusAfterCancel.current) { (_b2 = editImage.current) == null ? void 0 : _b2.focus(); restoreFocusAfterCancel.current = false; } }, [editing]); const onDeleteClick = () => { props.onTagDeleted(props.tag); }; const onDeleteKeyPress = (e2) => { switch (e2.key) { case "Enter": case " ": e2.preventDefault(); e2.stopPropagation(); props.onTagDeleted(props.tag); break; } }; const onEditClick = () => { if (props.tag.isEditable) { setEditing(true); } }; const onEditKeyPress = (e2) => { switch (e2.key) { case "Enter": case " ": e2.preventDefault(); e2.stopPropagation(); setEditing(true); break; } }; const commitTagEdit = () => { var _a2; if (props.onTagValidate) { const validationMessage = props.onTagValidate(props.tag.key, editingText); if (validationMessage !== null) { showingValidationError.current = true; props.ui.dialogs.alert( props.ui.context.translateText("Validation Error"), props.ui.context.translateText(validationMessage), kAlertTypeError ).then(() => { var _a3; (_a3 = editTextInput.current) == null ? void 0 : _a3.focus(); showingValidationError.current = false; }); return; } } setDisplayText(editingText); setEditing(false); props.onTagChanged(props.tag.key, editingText); (_a2 = editImage.current) == null ? void 0 : _a2.focus(); }; const cancelTagEdit = () => { setEditing(false); setEditingText(displayText); restoreFocusAfterCancel.current = true; }; const handleEditKeyDown = (e2) => { switch (e2.key) { case "Enter": if (showingValidationError.current) { return; } e2.preventDefault(); e2.stopPropagation(); commitTagEdit(); break; case "Escape": e2.preventDefault(); e2.stopPropagation(); cancelTagEdit(); break; } }; const handleEditBlur = () => { if (showingValidationError.current) { return; } commitTagEdit(); }; const handleEditChange = (e2) => { const edittedText = e2.target.value; setEditingText(edittedText); }; return /* @__PURE__ */ React.createElement("div", { key: props.tag.displayText, className: "pm-tag-input-tag pm-block-border-color" }, /* @__PURE__ */ React.createElement( "img", { src: (_a = props.ui.images.widgets) == null ? void 0 : _a.tag_delete, onClick: onDeleteClick, onKeyPress: onDeleteKeyPress, className: "pm-tag-input-delete-image", tabIndex: 0, draggable: "false" } ), /* @__PURE__ */ React.createElement("div", { className: `pm-tag-input-text ${props.tag.isEditable ? "pm-tag-input-text-edittable" : void 0}` }, !editing ? /* @__PURE__ */ React.createElement("div", { onClick: onEditClick, className: "pm-tag-input-text-raw pm-text-color" }, props.tag.displayPrefix, props.maxDisplayCharacters ? displayText.length > props.maxDisplayCharacters ? displayText.substr(0, props.maxDisplayCharacters - 1) + "\u2026" : displayText : displayText) : /* @__PURE__ */ React.createElement( TextInput, { width: props.maxDisplayCharacters ? `${Math.min(props.maxDisplayCharacters, editingText.length)}ch` : `${editingText.length}ch`, ref: editTextInput, className: "pm-tag-input-text-edit", value: editingText, onChange: handleEditChange, onKeyDown: handleEditKeyDown, onBlur: handleEditBlur } )), props.tag.isEditable ? /* @__PURE__ */ React.createElement( "img", { src: (_b = props.ui.images.widgets) == null ? void 0 : _b.tag_edit, className: "pm-tag-input-edit-image", onClick: onEditClick, onKeyPress: onEditKeyPress, tabIndex: 0, ref: editImage, draggable: "false" } ) : void 0); }; const navigationTree = ""; const kNavigationTreeIndent = 8; const NavigationTree = (props) => { const style = { height: props.height + "px", ...props.style }; const selectedNode = props.selectedNode; const nodes2 = props.nodes; const currentNodePath = pathToNode(selectedNode, nodes2); currentNodePath.forEach((node2) => node2.expanded = true); const selNode = nodes2.find((n2) => n2.key === selectedNode.key); if (selNode) { selNode.expanded = true; } const vizNodes = visibleNodes(props.nodes, props.selectedNode); const fixedList = React.useRef(null); React.useEffect(() => { if (props.selectedNode) { vizNodes.find((value, index2) => { var _a; if (value.key === selectedNode.key) { (_a = fixedList.current) == null ? void 0 : _a.scrollToItem(index2); return true; } else { return false; } }); } }); const processKey = (e2) => { const selected = props.selectedNode; switch (e2.key) { case "ArrowDown": if (selected) { const next2 = stepNode(selectedNode, props.nodes, 1); props.onSelectedNodeChanged(next2); } break; case "ArrowUp": if (selected) { const previous2 = stepNode(selectedNode, props.nodes, -1); props.onSelectedNodeChanged(previous2); } break; case "PageDown": if (selected) { const next2 = stepNode(selectedNode, props.nodes, 4); props.onSelectedNodeChanged(next2); } break; case "PageUp": if (selected) { const previous2 = stepNode(selectedNode, props.nodes, -4); props.onSelectedNodeChanged(previous2); } break; } }; return /* @__PURE__ */ React.createElement("div", { style, tabIndex: 0, onKeyDown: processKey }, /* @__PURE__ */ React.createElement( FixedSizeList, { className: "pm-navigation-tree", height: props.height, width: "100%", itemCount: vizNodes.length, itemSize: 28, itemData: { nodes: vizNodes, selectedNode: props.selectedNode, onSelectedNodeChanged: props.onSelectedNodeChanged, showSelection: true, preventFocus: true }, ref: fixedList }, NavigationTreeItem )); }; const NavigationTreeItem = (props) => { const data = props.data; const node2 = props.data.nodes[props.index]; const path = pathToNode(node2, data.nodes); const depth = path.length - 1; const onClick = (e2) => { e2.preventDefault(); e2.stopPropagation(); data.onSelectedNodeChanged(node2); }; const selected = data.selectedNode.key === node2.key; const indentLevel = depth; const indentStyle = { paddingLeft: indentLevel * kNavigationTreeIndent + "px" }; const selectedClassName = `${selected ? "pm-selected-navigation-tree-item" : "pm-navigation-tree-item"} pm-navigation-tree-node`; return /* @__PURE__ */ React.createElement("div", { key: node2.key, onClick, style: props.style }, /* @__PURE__ */ React.createElement("div", { className: selectedClassName, style: indentLevel > 0 ? indentStyle : void 0 }, node2.image ? /* @__PURE__ */ React.createElement("div", { className: "pm-navigation-tree-node-image-div" }, /* @__PURE__ */ React.createElement("img", { src: node2.image, alt: node2.name, className: "pm-navigation-tree-node-image", draggable: "false" })) : null, /* @__PURE__ */ React.createElement("div", { className: "pm-navigation-tree-node-label-div pm-text-color" }, node2.name))); }; function containsChild(key2, node2) { if (node2.key === key2) { return true; } for (const childNode of node2.children) { const hasChild = containsChild(key2, childNode); if (hasChild) { return true; } } return false; } function pathToNode(node2, nodes2) { const path = []; if (node2) { for (const root2 of nodes2) { if (root2.key === node2.key) { path.push(node2); return path; } const childPath = pathToNode(node2, root2.children); if (childPath.length > 0) { path.push(root2, ...childPath); return path; } } } return path; } function visibleNodes(nodes2, selectedNode) { const nodeList = nodes2.map((node2) => { if (node2.expanded || node2.key === selectedNode.key) { return [node2].concat(visibleNodes(node2.children, selectedNode)); } else { return [node2]; } }); return [].concat(...nodeList); } function stepNode(node2, allNodes, increment) { const nodes2 = visibleNodes(allNodes, node2); const currentIndex = nodes2.map((n2) => n2.key).indexOf(node2.key); const step2 = currentIndex + increment; if (step2 >= 0 && step2 < nodes2.length - 1) { return nodes2[step2]; } else if (step2 < 0) { return nodes2[0]; } else { return nodes2[nodes2.length - 1]; } } const dialogButtons = ""; const DialogButtons = (props) => { const [isRStudio] = react.exports.useState(Object.getOwnPropertyNames(window).includes("rstudio")); const buttonProps = (primary) => { const bprops = { classes: isRStudio ? ["pm-text-button", "pm-input-button", "pm-default-theme", "pm-dialog-buttons-button", "pm-rstudio-button"] : ["fluentui-button"], style: isRStudio ? {} : { minWidth: "90px" } }; if (primary) { if (isRStudio) { bprops.style.fontWeight = 600; } else { bprops.classes.push("fluentui-intent-primary"); bprops.style.marginLeft = "8px"; } } return bprops; }; const okButton = /* @__PURE__ */ React.createElement( TextButton, { title: props.okLabel, onClick: props.onOk, ...buttonProps(true) } ); const cancelButton = /* @__PURE__ */ React.createElement( TextButton, { title: props.cancelLabel, onClick: props.onCancel, ...buttonProps() } ); return /* @__PURE__ */ React.createElement("div", { className: "pm-dialog-buttons-panel", style: props.style }, isRStudio ? /* @__PURE__ */ React.createElement(React.Fragment, null, okButton, cancelButton) : /* @__PURE__ */ React.createElement(React.Fragment, null, cancelButton, okButton)); }; var CitationSourceListStatus = /* @__PURE__ */ ((CitationSourceListStatus2) => { CitationSourceListStatus2[CitationSourceListStatus2["default"] = 0] = "default"; CitationSourceListStatus2[CitationSourceListStatus2["inProgress"] = 1] = "inProgress"; CitationSourceListStatus2[CitationSourceListStatus2["noResults"] = 2] = "noResults"; CitationSourceListStatus2[CitationSourceListStatus2["error"] = 3] = "error"; return CitationSourceListStatus2; })(CitationSourceListStatus || {}); function errorForStatus(ui2, status, providerName) { return status === "nohost" ? ui2.context.translateText(`Unable to search ${providerName}. Please check your network connection and try again.`) : ui2.context.translateText(`An error occurred while searching ${providerName}.`); } function matchExistingSourceCitationListEntry(doi, existingIds, ui2, bibliographyManager) { const localSources = bibliographyManager.localSources(); const existingSource = localSources.find((source) => { var _a; return ((_a = source.DOI) == null ? void 0 : _a.toLowerCase()) === doi.toLowerCase(); }); if (existingSource) { return existingSourceToCitationListEntry(existingSource, existingIds, ui2); } else { return void 0; } } function existingSourceToCitationListEntry(csl, existingIds, ui2) { const providerKey = "pubmed"; return { id: csl.id || suggestCiteId$2(existingIds, csl), isIdEditable: false, title: csl.title || "", doi: csl.DOI, type: "", date: formatIssuedDate(csl.issued) || "", journal: csl["container-title"], authors: (length2) => { return formatAuthors$2(csl.author || [], length2); }, image: imageForType$1(ui2.images, csl.type)[ui2.prefs.darkMode() ? 1 : 0], toBibliographySource: async (finalId) => { return { ...csl, id: finalId, providerKey }; }, isSlowGeneratingBibliographySource: true }; } const insert_citationSourcePanelTypeaheadSearch = ""; const insert_citationSourcePanelList = ""; const CitationSourceList = React.forwardRef( (props, ref) => { const fixedList = React.useRef(null); const itemsPerPage = Math.floor(props.height / props.itemHeight); const handleIncrementIndex = (event, increment, index2) => { event.stopPropagation(); event.preventDefault(); if (props.citations && index2 > -1) { const maxIndex = props.citations.length - 1; const newIndex = Math.min(Math.max(0, index2 + increment), maxIndex); props.onSelectedIndexChanged(newIndex); } }; const handleAddItem = (event) => { event.stopPropagation(); event.preventDefault(); const currentCitation = props.selectedIndex > -1 ? props.citations[props.selectedIndex] : void 0; if (currentCitation) { props.onAddCitation(currentCitation); } }; const handleListKeyDown = (event) => { const currentIndex = props.selectedIndex; switch (event.key) { case "ArrowUp": if (currentIndex === 0 && props.focusPrevious) { props.focusPrevious(); } else { handleIncrementIndex(event, -1, currentIndex); } break; case "ArrowDown": handleIncrementIndex(event, 1, currentIndex); break; case "PageDown": handleIncrementIndex(event, itemsPerPage, currentIndex); break; case "PageUp": handleIncrementIndex(event, -itemsPerPage, currentIndex); break; case "Enter": handleAddItem(event); props.onConfirm(); break; case " ": handleAddItem(event); break; } }; React.useEffect(() => { var _a; if (props.selectedIndex > -1) { (_a = fixedList.current) == null ? void 0 : _a.scrollToItem(props.selectedIndex); } }); const onFocus = (event) => { if (props.selectedIndex < 0) { props.onSelectedIndexChanged(0); } event.stopPropagation(); event.preventDefault(); }; const onBlur = (event) => { event.stopPropagation(); event.preventDefault(); }; const classes = ["pm-insert-citation-source-panel-list-container"].concat(props.classes || []).join(" "); switch (props.status) { case CitationSourceListStatus.default: if (props.citations.length > 0) { return /* @__PURE__ */ React.createElement( "div", { tabIndex: 0, onKeyDown: handleListKeyDown, onFocus, onBlur, ref, className: classes }, /* @__PURE__ */ React.createElement( FixedSizeList, { className: "pm-insert-citation-source-panel-list", height: props.height, width: "100%", itemCount: props.citations.length, itemSize: props.itemHeight, itemData: { selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, citations: props.citations, citationsToAdd: props.citationsToAdd, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, onConfirm: props.onConfirm, showSeparator: true, showSelection: true, preventFocus: true, ui: props.ui }, ref: fixedList }, props.itemProvider ) ); } else { return /* @__PURE__ */ React.createElement("div", { className: classes, style: { height: props.height + "px" }, ref }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-list-noresults-text" }, props.statusMessage)); } case CitationSourceListStatus.inProgress: return /* @__PURE__ */ React.createElement("div", { className: classes, style: { height: props.height + "px" }, ref }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-list-noresults-text" }, !props.ui.prefs.darkMode ? /* @__PURE__ */ React.createElement("img", { src: props.ui.images.search_progress, className: "pm-insert-citation-source-panel-list-progress", draggable: "false" }) : null, props.statusMessage)); case CitationSourceListStatus.noResults: return /* @__PURE__ */ React.createElement("div", { className: classes, style: { height: props.height + "px" }, ref }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-list-noresults-text" }, props.statusMessage)); case CitationSourceListStatus.error: return /* @__PURE__ */ React.createElement("div", { className: classes, style: { height: props.height + "px" }, ref }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-list-noresults-text" }, props.statusMessage || props.ui.context.translateText("An error occurred."))); case CitationSourceListStatus.default: default: if (props.citations.length > 0) { return /* @__PURE__ */ React.createElement( "div", { tabIndex: 0, onKeyDown: handleListKeyDown, onFocus, onBlur, ref, className: classes }, /* @__PURE__ */ React.createElement( FixedSizeList, { className: "pm-insert-citation-source-panel-list", height: props.height, width: "100%", itemCount: props.citations.length, itemSize: props.itemHeight, itemData: { selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, citations: props.citations, citationsToAdd: props.citationsToAdd, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, onConfirm: props.onConfirm, showSeparator: true, showSelection: true, preventFocus: true, ui: props.ui }, ref: fixedList }, props.itemProvider ) ); } else { return /* @__PURE__ */ React.createElement("div", { className: classes, style: { height: props.height + "px" }, ref }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-list-noresults-text" }, props.statusMessage)); } } } ); const insert_citationSourcePanelListItem = ""; const CitationSourcePanelListItem = (props) => { const citationListData = props.data; const citationEntry = citationListData.citations[props.index]; const maxIdLength = 30; const id2 = citationEntry.id.length > maxIdLength ? `@${citationEntry.id.substr(0, maxIdLength - 1)}\u2026` : `@${citationEntry.id}`; const authorWidth = Math.max(10, 50 - id2.length); const selected = citationListData.showSelection && props.index === citationListData.selectedIndex; const alreadyAdded = citationListData.citationsToAdd.map((src2) => src2.id).includes(citationEntry.id) && !selected; const onButtonClick = (event) => { event.stopPropagation(); event.preventDefault(); if (alreadyAdded) { citationListData.onRemoveCitation(citationEntry); } else { citationListData.onAddCitation(citationEntry); } }; const onItemClick = (e2) => { if (e2.shiftKey) { citationListData.onAddCitation(citationEntry); } else { citationListData.onSelectedIndexChanged(props.index); } }; const onDoubleClick = () => { citationListData.onAddCitation(citationEntry); citationListData.onConfirm(); }; let authors = ""; try { authors = citationEntry.authors(authorWidth); } catch (er) { } return /* @__PURE__ */ React.createElement( "div", { onMouseDown: onItemClick, onDoubleClick, className: "pm-insert-citation-source-panel-item", style: props.style }, /* @__PURE__ */ React.createElement("div", { className: `pm-insert-citation-source-panel-item-border ${selected ? "pm-list-item-selected" : ""}` }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-container" }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-type" }, citationEntry.imageAdornment ? /* @__PURE__ */ React.createElement( "img", { className: "pm-insert-citation-source-panel-item-adorn pm-block-border-color pm-background-color", src: citationEntry.imageAdornment, draggable: "false" } ) : void 0, /* @__PURE__ */ React.createElement( "img", { className: "pm-insert-citation-source-panel-item-icon pm-block-border-color", src: citationEntry.image, draggable: "false" } )), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-summary" }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-id" }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-title pm-fixedwidth-font pm-text-color" }, id2), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detail pm-text-color" }, authors, " ", citationEntry.date)), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-subtitle-text pm-text-color" }, citationEntry.title)), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-button" }, /* @__PURE__ */ React.createElement( OutlineButton, { tabIndex: citationListData.preventFocus ? -1 : 0, style: { width: "24px", height: "24px" }, title: alreadyAdded ? "-" : "+", onClick: onButtonClick } )))) ); }; const kTextBoxHeight = 30; const CitationSourceTypeheadSearchPanel = React.forwardRef((props, ref) => { const listContainer = React.useRef(null); const searchChanged = (e2) => { const search2 = e2.target.value; props.onSearchTermChanged(search2); }; const searchBoxRef = React.useRef(null); const handleTextKeyDown = (event) => { var _a; switch (event.key) { case "ArrowDown": (_a = listContainer.current) == null ? void 0 : _a.focus(); break; } }; const focusSearch = () => { var _a; (_a = searchBoxRef.current) == null ? void 0 : _a.focus(); }; const addCitation = (citation) => { props.onAddCitation(citation); focusSearch(); }; const searchBoxFocused = (event) => { event.target.select(); }; return /* @__PURE__ */ React.createElement( "div", { style: props.style, className: "pm-insert-citation-panel-search pm-block-border-color pm-background-color", ref, tabIndex: -1, onFocus: focusSearch }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-search-panel-textbox-container" }, /* @__PURE__ */ React.createElement( TextInput, { width: "100%", iconAdornment: props.ui.images.search, tabIndex: 0, className: "pm-insert-citation-panel-search-textbox pm-block-border-color", placeholder: props.ui.context.translateText("Search for citation"), onKeyDown: handleTextKeyDown, onChange: searchChanged, onFocus: searchBoxFocused, value: props.searchTerm, ref: searchBoxRef } )), /* @__PURE__ */ React.createElement( CitationSourceList, { height: props.height - kTextBoxHeight, citations: props.citations, citationsToAdd: props.citationsToAdd, onConfirm: props.onConfirm, onAddCitation: addCitation, onRemoveCitation: props.onRemoveCitation, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, focusPrevious: focusSearch, status: props.status, statusMessage: props.statusMessage, itemHeight: 64, itemProvider: CitationSourcePanelListItem, ui: props.ui, ref: listContainer } ) ); }); const insert_citationSourcePanelBibliography = ""; const kAllLocalSourcesRootNodeType = "All Local Sources"; function bibliographySourcePanel(_doc, ui2, bibliographyManager) { const providers = bibliographyManager.localProviders(); const providerNodes = {}; providers.filter((provider) => provider.isEnabled()).forEach((provider) => { const getFolder = (prov, hasParent) => { return folderImageForProvider(prov, hasParent, ui2); }; const collectionSpecs = provider.collections(); providerNodes[provider.key] = { key: provider.key, name: ui2.context.translateText(provider.name), type: provider.key, image: rootImageForProvider(provider.key, ui2), children: toTree(provider.key, collectionSpecs, getFolder), expanded: true }; }); return { key: "17373086-77FE-410F-A319-33E314482125", panel: BibligraphySourcePanel, treeNode: () => { var _a; return { key: "My Sources", name: ui2.context.translateText("My Sources"), image: (_a = ui2.images.citations) == null ? void 0 : _a.local_sources, type: kAllLocalSourcesRootNodeType, children: Object.values(providerNodes), expanded: true }; }, warningMessage: bibliographyManager.warning(), typeAheadSearch: (searchTerm, selectedNode, existingCitationIds, onResults) => { const providerForNode = (node2) => { return node2.type === kAllLocalSourcesRootNodeType ? void 0 : node2.type; }; const collectionKeyForNode = (node2) => { return node2.type !== kAllLocalSourcesRootNodeType && node2.key !== kZoteroProviderKey && node2.key !== kLocalBibliographyProviderKey ? node2.key : void 0; }; const sources = bibliographyManager.search( searchTerm, providerForNode(selectedNode), collectionKeyForNode(selectedNode) ); const uniqueSources = uniqBy(sources, (source) => source.id); const citations = toCitationListEntries(uniqueSources, existingCitationIds, ui2); onResults({ citations, status: citations.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults, statusMessage: citations.length > 0 ? "" : ui2.context.translateText("No items") }); } }; } const BibligraphySourcePanel = React.forwardRef( (props, ref) => { return /* @__PURE__ */ React.createElement(React.Fragment, null, props.warningMessage ? /* @__PURE__ */ React.createElement("div", { className: "pm-insert-bibliography-source-panel-warning pm-block-border-color" }, props.warningMessage) : void 0, /* @__PURE__ */ React.createElement( CitationSourceTypeheadSearchPanel, { height: props.height, citations: props.citations, citationsToAdd: props.citationsToAdd, searchTerm: props.searchTerm, onSearchTermChanged: props.onSearchTermChanged, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, onConfirm: props.onConfirm, status: props.status, statusMessage: props.statusMessage, ui: props.ui, ref } )); } ); function rootImageForProvider(providerKey, ui2) { var _a, _b; switch (providerKey) { case kZoteroProviderKey: return (_a = ui2.images.citations) == null ? void 0 : _a.zotero_root; case kLocalBibliographyProviderKey: return (_b = ui2.images.citations) == null ? void 0 : _b.bibligraphy; default: return void 0; } } function folderImageForProvider(providerKey, hasParent, ui2) { var _a, _b, _c; switch (providerKey) { case kZoteroProviderKey: if (hasParent) { return (_a = ui2.images.citations) == null ? void 0 : _a.zotero_collection; } else { return (_b = ui2.images.citations) == null ? void 0 : _b.zotero_library; } case kLocalBibliographyProviderKey: return (_c = ui2.images.citations) == null ? void 0 : _c.bibligraphy_folder; default: return void 0; } } function toTree(type2, containers, folderImage) { const treeMap = {}; const rootNodes = []; containers.sort((a2, b2) => { if (a2.provider === kZoteroProviderKey && a2.key === "1") { return -1; } return a2.name.localeCompare(b2.name); }).forEach((container) => { var _a; const currentNode = treeMap[container.key] || { key: container.key, name: container.name, children: [], type: type2 }; const hasParent = container.parentKey !== void 0 && container.parentKey.length > 0; currentNode.name = container.name; currentNode.image = folderImage ? folderImage(container.provider, hasParent) : void 0; if (container.parentKey) { let parentNode2 = treeMap[container.parentKey]; if (!parentNode2) { parentNode2 = { key: container.parentKey, name: "", children: [], type: type2 }; treeMap[container.parentKey] = parentNode2; } (_a = parentNode2.children) == null ? void 0 : _a.push(currentNode); } else { rootNodes.push(currentNode); } treeMap[container.key] = currentNode; }); return rootNodes; } function toCitationListEntries(sources, existingCitationIds, ui2) { const useBetterBibTex = ui2.prefs.zoteroUseBetterBibtex(); return sources.map((source) => { var _a; return { id: source.providerKey === kLocalBibliographyProviderKey || useBetterBibTex ? source.id : createUniqueCiteId(existingCitationIds, source.id), isIdEditable: source.providerKey === kZoteroProviderKey && !useBetterBibTex, type: source.type, title: source.title || "", providerKey: source.providerKey, date: formatIssuedDate(source.issued), journal: "", image: imageForType$1(ui2.images, source.type)[ui2.prefs.darkMode() ? 1 : 0], imageAdornment: source.providerKey === kZoteroProviderKey ? (_a = ui2.images.citations) == null ? void 0 : _a.zoteroOverlay : void 0, authors: (length2) => { return formatAuthors$2(source.author, length2); }, toBibliographySource: (finalId) => { return Promise.resolve({ ...source, id: finalId, providerKey: source.providerKey }); }, isSlowGeneratingBibliographySource: false }; }); } const insert_citationSourcePanelLatentSearch = ""; const insert_citationSourcePanelListItemDetailed = ""; const CitationSourcePanelListItemDetailed = (props) => { const citationListData = props.data; const citationEntry = citationListData.citations[props.index]; const selected = citationListData.showSelection && props.index === citationListData.selectedIndex; const alreadyAdded = citationListData.citationsToAdd.map((src2) => src2.id).includes(citationEntry.id) && !selected; const onButtonClick = (event) => { event.stopPropagation(); event.preventDefault(); if (alreadyAdded) { citationListData.onRemoveCitation(citationEntry); } else { citationListData.onAddCitation(citationEntry); } }; const onItemClick = () => { citationListData.onSelectedIndexChanged(props.index); }; const onDoubleClick = () => { citationListData.onAddCitation(citationEntry); citationListData.onConfirm(); }; const secondLine = [citationEntry.date, citationEntry.journal].filter((text2) => text2).join(", "); const thirdLine = citationEntry.authors(80); return /* @__PURE__ */ React.createElement( "div", { onMouseDown: onItemClick, onDoubleClick, className: "pm-insert-citation-source-panel-item-detailed", style: props.style }, /* @__PURE__ */ React.createElement( "div", { className: `pm-insert-citation-source-panel-item-detailed-border ${selected ? "pm-list-item-selected" : ""}` }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-container" }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-type" }, citationEntry.imageAdornment ? /* @__PURE__ */ React.createElement( "img", { className: "pm-insert-citation-source-panel-item-detailed-adorn pm-block-border-color pm-background-color", src: citationEntry.imageAdornment, draggable: "false" } ) : void 0, /* @__PURE__ */ React.createElement( "img", { className: "pm-insert-citation-source-panel-item-detailed-icon pm-block-border-color", src: citationEntry.image, draggable: "false" } )), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-summary" }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-title pm-fixedwidth-font pm-text-color" }, citationEntry.title), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-subtitle-text pm-text-color" }, secondLine), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-subtitle-text pm-text-color" }, thirdLine), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-subtitle-text pm-text-color" }, /* @__PURE__ */ React.createElement("a", { href: `https://doi.org/${citationEntry.doi}`, target: "_new" }, citationEntry.doi))), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-source-panel-item-detailed-button" }, /* @__PURE__ */ React.createElement( OutlineButton, { tabIndex: citationListData.preventFocus ? -1 : 0, style: { width: "24px", height: "24px" }, title: alreadyAdded ? "-" : "+", onClick: onButtonClick } ))) ) ); }; const kSearchBoxHeightWithMargin = 38; const CitationSourceLatentSearchPanel = React.forwardRef( (props, ref) => { const listContainer = React.useRef(null); const pasted = React.useRef(false); const lastSearch = React.useRef(""); const performSearch = (searchTerm) => { props.executeSearch(searchTerm); lastSearch.current = searchTerm; pasted.current = false; }; const searchChanged = (e2) => { const search2 = e2.target.value; if (pasted.current) { performSearch(search2); } else { props.onSearchTermChanged(search2); } }; const handleTextKeyDown = (event) => { var _a; switch (event.key) { case "ArrowDown": event.preventDefault(); event.stopPropagation(); (_a = listContainer.current) == null ? void 0 : _a.focus(); break; case "Enter": if (lastSearch.current !== props.searchTerm || props.selectedIndex < 0) { event.preventDefault(); event.stopPropagation(); performSearch(props.searchTerm); } break; } }; const handleButtonClick = () => { performSearch(props.searchTerm); }; const onPaste = () => { pasted.current = true; }; const searchBoxRef = React.useRef(null); const focusSearch = () => { var _a; (_a = searchBoxRef.current) == null ? void 0 : _a.focus(); }; const initialFocusSet = React.useRef(false); const parentFocused = () => { if (!initialFocusSet.current) { focusSearch(); initialFocusSet.current = true; } }; const onAddCitation = (citation) => { props.onAddCitation(citation); focusSearch(); }; return /* @__PURE__ */ React.createElement( "div", { style: props.style, className: "pm-insert-citation-panel-latent-search", ref, tabIndex: -1, onFocus: parentFocused }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-panel-latent-search-textbox-container" }, /* @__PURE__ */ React.createElement( TextInput, { value: props.searchTerm, width: "100%", iconAdornment: props.ui.images.search, tabIndex: 0, className: "pm-insert-citation-panel-latent-search-textbox pm-block-border-color", placeholder: props.searchPlaceholderText, onKeyDown: handleTextKeyDown, onChange: searchChanged, onPaste, ref: searchBoxRef } ), /* @__PURE__ */ React.createElement( TextButton, { title: props.ui.context.translateText("Search"), classes: ["pm-text-button", "pm-input-button", "pm-insert-citation-panel-latent-search-button"], onClick: handleButtonClick, disabled: props.status === CitationSourceListStatus.inProgress } )), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-citation-panel-latent-search-list-container" }, /* @__PURE__ */ React.createElement( CitationSourceList, { height: props.height - kSearchBoxHeightWithMargin, citations: props.citations, citationsToAdd: props.citationsToAdd, onAddCitation, onRemoveCitation: props.onRemoveCitation, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, focusPrevious: focusSearch, onConfirm: props.onConfirm, ui: props.ui, itemHeight: 100, itemProvider: CitationSourcePanelListItemDetailed, status: props.status, statusMessage: props.statusMessage, classes: ["pm-insert-citation-panel-latent-search-list", "pm-block-border-color", "pm-background-color"], ref: listContainer } )) ); } ); const insert_citationSourcePanelDoi = ""; const kDOIType = "DOI Search"; function doiSourcePanel(ui2, server, bibliographyManager) { return { key: "76561E2A-8FB7-4D4B-B235-9DD8B8270EA1", panel: DOISourcePanel, treeNode: () => { var _a; return { key: "DOI", name: ui2.context.translateText("From DOI"), image: (_a = ui2.images.citations) == null ? void 0 : _a.doi, type: kDOIType, children: [], expanded: true }; }, progressMessage: ui2.context.translateText("Looking up DOI...."), placeHolderMessage: ui2.context.translateText("Paste or enter a DOI to find citation data."), search: async (searchTerm, _selectedNode, existingCitationIds) => { try { searchTerm = searchTerm.trim(); const result = await server.fetchCSL(searchTerm); if (result.status === "ok") { const doi = searchTerm; const csl = result.message; const citation = matchExistingSourceCitationListEntry(doi, existingCitationIds, ui2, bibliographyManager) || toCitationListEntry$4(csl, existingCitationIds, ui2); return Promise.resolve({ citations: citation ? [citation] : [], status: CitationSourceListStatus.default, statusMessage: "" }); } else if (result.status === "notfound") { return Promise.resolve({ citations: [], status: CitationSourceListStatus.noResults, statusMessage: ui2.context.translateText("No data for this DOI could be found.") }); } else { return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: errorForStatus(ui2, result.status, "for this DOI") }); } } catch (e2) { return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: ui2.context.translateText("An unknown error occurred. Please try again.") }); } } }; } const DOISourcePanel = React.forwardRef( (props, ref) => { return /* @__PURE__ */ React.createElement( CitationSourceLatentSearchPanel, { height: props.height, citations: props.citations, citationsToAdd: props.citationsToAdd, searchTerm: props.searchTerm, onSearchTermChanged: props.onSearchTermChanged, executeSearch: props.onExecuteSearch, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, onConfirm: props.onConfirm, searchPlaceholderText: props.ui.context.translateText("Paste a DOI to search"), status: props.status, statusMessage: props.statusMessage, ui: props.ui, ref } ); } ); function toCitationListEntry$4(csl, existingCitationIds, ui2) { if (csl) { const suggestedId = suggestCiteId$2(existingCitationIds, csl); const providerKey = "doi"; return { id: suggestedId, isIdEditable: true, type: csl.type, title: csl.title || csl["short-title"] || csl["original-title"] || "", date: formatIssuedDate(csl.issued), journal: csl["container-title"] || csl["short-container-title"] || csl.publisher, doi: csl.DOI, image: imageForType$1(ui2.images, csl.type)[ui2.prefs.darkMode() ? 1 : 0], authors: (length2) => { return formatAuthors$2(csl.author, length2); }, toBibliographySource: (finalId) => { return Promise.resolve({ ...csl, id: finalId, providerKey }); }, isSlowGeneratingBibliographySource: false }; } return void 0; } function crossrefSourcePanel(ui2, server, doiServer, bibliographyManager) { const kCrossrefType = "Crossref"; return { key: "E38370AA-78AE-450B-BBE8-878E1C817C04", panel: CrossRefSourcePanel, treeNode: () => { var _a; return { key: "CrossRef", name: ui2.context.translateText("Crossref"), image: (_a = ui2.images.citations) == null ? void 0 : _a.crossref, type: kCrossrefType, children: [], expanded: true }; }, progressMessage: ui2.context.translateText("Searching Crossref...."), placeHolderMessage: ui2.context.translateText("Enter search terms to search Crossref"), search: async (searchTerm, _selectedNode, existingCitationIds) => { try { const works = await server.works(searchTerm); bibliographyManager.localSources(); const dedupeCitationIds = existingCitationIds; const citationEntries = works.items.map((work) => { const citationEntry = matchExistingSourceCitationListEntry(work.DOI, dedupeCitationIds, ui2, bibliographyManager) || toCitationListEntry$3(work, dedupeCitationIds, ui2, doiServer); if (citationEntry) { dedupeCitationIds.push(citationEntry.id); } return citationEntry; }); return Promise.resolve({ citations: citationEntries, status: citationEntries.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults, statusMessage: citationEntries.length > 0 ? "" : ui2.context.translateText("No results matching these search terms.") }); } catch (e2) { return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: ui2.context.translateText("An unknown error occurred. Please try again.") }); } } }; } const CrossRefSourcePanel = React.forwardRef( (props, ref) => { return /* @__PURE__ */ React.createElement( CitationSourceLatentSearchPanel, { height: props.height, citations: props.citations, citationsToAdd: props.citationsToAdd, searchTerm: props.searchTerm, onSearchTermChanged: props.onSearchTermChanged, executeSearch: props.onExecuteSearch, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, onConfirm: props.onConfirm, searchPlaceholderText: props.ui.context.translateText("Search Crossref for Citations"), status: props.status, statusMessage: props.statusMessage, ui: props.ui, ref } ); } ); function toCitationListEntry$3(crossrefWork, existingIds, ui2, doiServer) { const coercedCSL = sanitizeForCiteproc(crossrefWork); const id2 = suggestCiteId$2(existingIds, coercedCSL); const providerKey = "crossref"; return { id: id2, isIdEditable: true, title: crossrefWorkTitle(crossrefWork, ui2), type: prettyType(ui2, crossrefWork.type), date: formatIssuedDate(crossrefWork.issued), journal: crossrefWork["container-title"] || crossrefWork["short-container-title"] || crossrefWork.publisher, image: imageForCrossrefType(ui2, crossrefWork.type)[ui2.prefs.darkMode() ? 1 : 0], doi: crossrefWork.DOI, authors: (length2) => { return formatAuthors$2(coercedCSL.author, length2); }, toBibliographySource: async (finalId) => { const doiResult = await doiServer.fetchCSL(crossrefWork.DOI); const csl = doiResult.message; return { ...csl, id: finalId, providerKey }; }, isSlowGeneratingBibliographySource: true }; } function crossrefWorkTitle(work, ui2) { if (work.title) { return work.title[0]; } else { return ui2.context.translateText("(Untitled)"); } } function suggestCiteId$1(doc2) { let suggestedId = ""; if (doc2.sortFirstAuthor) { suggestedId = doc2.sortFirstAuthor.split(" ")[0]; } else if (doc2.authors && doc2.authors.length > 0) { suggestedId = doc2.authors[0].split(" ")[0]; } if (doc2.pubDate) { suggestedId = suggestedId + doc2.pubDate.split(" ")[0]; } return suggestedId; } function imageForType(ui2, pubTypes) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l; const type2 = pubTypes && pubTypes.length > 0 ? pubTypes[0] : ""; switch (type2) { case "Journal Article": case "Historical Article": case "Classical Article": case "Introductory Journal Article": case "paper-conference": return [(_a = ui2.images.citations) == null ? void 0 : _a.article, (_b = ui2.images.citations) == null ? void 0 : _b.article_dark]; case "Legal Case": case "Legislation": return [(_c = ui2.images.citations) == null ? void 0 : _c.legal, (_d = ui2.images.citations) == null ? void 0 : _d.legal_dark]; case "Dataset": return [(_e = ui2.images.citations) == null ? void 0 : _e.data, (_f = ui2.images.citations) == null ? void 0 : _f.data_dark]; case "Video-Audio Media": return [(_g = ui2.images.citations) == null ? void 0 : _g.movie, (_h = ui2.images.citations) == null ? void 0 : _h.movie_dark]; case "Webcasts": return [(_i = ui2.images.citations) == null ? void 0 : _i.web, (_j = ui2.images.citations) == null ? void 0 : _j.web_dark]; default: return [(_k = ui2.images.citations) == null ? void 0 : _k.other, (_l = ui2.images.citations) == null ? void 0 : _l.other_dark]; } } function pubmedSourcePanel(ui2, server, doiServer, bibliographyManager) { const kPubmedType = "Pubmed"; return { key: "EF556233-05B0-4678-8216-38061908463F", panel: PubmedSourcePanel, treeNode: () => { var _a; return { key: "PubMed", name: ui2.context.translateText("PubMed"), image: (_a = ui2.images.citations) == null ? void 0 : _a.pubmed, type: kPubmedType, children: [], expanded: true }; }, progressMessage: ui2.context.translateText("Searching PubMed...."), placeHolderMessage: ui2.context.translateText("Enter a PubMed query to search for citations."), search: async (searchTerm, _selectedNode, existingCitationIds) => { try { const noResultsMessage = ui2.context.translateText("No results matching these search terms."); const pubMedResult = await server.search(searchTerm); switch (pubMedResult.status) { case "ok": if (pubMedResult.message !== null) { const docs = pubMedResult.message; const dedupeCitationIds = existingCitationIds; const citationEntries = docs.map((doc2) => { const citationEntry = matchExistingSourceCitationListEntry(doc2.doi, dedupeCitationIds, ui2, bibliographyManager) || toCitationListEntry$2(doc2, dedupeCitationIds, ui2, doiServer); if (citationEntry && citationEntry.id) { dedupeCitationIds.push(citationEntry.id); } return citationEntry; }); return Promise.resolve({ citations: citationEntries, status: citationEntries.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults, statusMessage: citationEntries.length > 0 ? "" : noResultsMessage }); } else { return Promise.resolve({ citations: [], status: CitationSourceListStatus.noResults, statusMessage: noResultsMessage }); } default: return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: ui2.context.translateText(errorForStatus(ui2, pubMedResult.status, "PubMed")) }); } } catch (e2) { return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: ui2.context.translateText("An unknown error occurred. Please try again.") }); } } }; } const PubmedSourcePanel = React.forwardRef( (props, ref) => { return /* @__PURE__ */ React.createElement( CitationSourceLatentSearchPanel, { height: props.height, citations: props.citations, citationsToAdd: props.citationsToAdd, searchTerm: props.searchTerm, onSearchTermChanged: props.onSearchTermChanged, executeSearch: props.onExecuteSearch, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, onConfirm: props.onConfirm, searchPlaceholderText: props.ui.context.translateText("Search PubMed for Citations"), status: props.status, statusMessage: props.statusMessage, ui: props.ui, ref } ); } ); function toCitationListEntry$2(doc2, existingIds, ui2, doiServer) { const id2 = createUniqueCiteId(existingIds, suggestCiteId$1(doc2)); const providerKey = "pubmed"; return { id: id2, isIdEditable: true, title: doc2.title || "", doi: doc2.doi, type: "", date: doc2.pubDate || "", journal: doc2.source, authors: () => { return formatAuthors$1(doc2.authors || []); }, image: imageForType(ui2, doc2.pubTypes)[ui2.prefs.darkMode() ? 1 : 0], toBibliographySource: async (finalId) => { const doiResult = await doiServer.fetchCSL(doc2.doi); const csl = doiResult.message; const sanitizedCSL = sanitizeForCiteproc(csl); return { ...sanitizedCSL, id: finalId, providerKey }; }, isSlowGeneratingBibliographySource: true }; } function formatAuthors$1(authors) { return authors.join(","); } function suggestCiteId(record) { let suggestedId = ""; if (record.creators && record.creators.length > 0) { suggestedId = record.creators[0].familyName || record.creators[0].fullName; } if (record.publicationYear) { suggestedId = suggestedId + record.publicationYear; } return suggestedId; } function dataciteSourcePanel(ui2, server, doiServer, bibliographyManager) { const kDataCiteType = "Datacite"; return { key: "66A6EADB-22AE-4DDD-BCD5-70BC0DEB8FB3", panel: DataCiteSourcePanel, treeNode: () => { var _a; return { key: "DataCite", name: ui2.context.translateText("DataCite"), image: (_a = ui2.images.citations) == null ? void 0 : _a.datacite, type: kDataCiteType, children: [], expanded: true }; }, progressMessage: ui2.context.translateText("Searching DataCite...."), placeHolderMessage: ui2.context.translateText("Enter search terms to search DataCite"), search: async (searchTerm, _selectedNode, existingCitationIds) => { try { const dataciteResult = await server.search(searchTerm); const noResultsMessage = ui2.context.translateText("No results matching these search terms."); switch (dataciteResult.status) { case "ok": if (dataciteResult.message !== null) { const records = dataciteResult.message; const dedupeCitationIds = existingCitationIds; const citationEntries = records.map((record) => { const citationEntry = matchExistingSourceCitationListEntry(record.doi, dedupeCitationIds, ui2, bibliographyManager) || toCitationListEntry$1(record, dedupeCitationIds, ui2, doiServer); if (citationEntry) { dedupeCitationIds.push(citationEntry.id); } return citationEntry; }); return Promise.resolve({ citations: citationEntries, status: citationEntries.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults, statusMessage: citationEntries.length > 0 ? "" : noResultsMessage }); } else { return Promise.resolve({ citations: [], status: CitationSourceListStatus.noResults, statusMessage: noResultsMessage }); } default: return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: ui2.context.translateText(errorForStatus(ui2, dataciteResult.status, "DataCite")) }); } } catch (e2) { return Promise.resolve({ citations: [], status: CitationSourceListStatus.error, statusMessage: ui2.context.translateText("An unknown error occurred. Please try again.") }); } } }; } const DataCiteSourcePanel = React.forwardRef( (props, ref) => { return /* @__PURE__ */ React.createElement( CitationSourceLatentSearchPanel, { height: props.height, citations: props.citations, citationsToAdd: props.citationsToAdd, searchTerm: props.searchTerm, onSearchTermChanged: props.onSearchTermChanged, executeSearch: props.onExecuteSearch, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, onConfirm: props.onConfirm, searchPlaceholderText: props.ui.context.translateText("Search DataCite for Citations"), status: props.status, statusMessage: props.statusMessage, ui: props.ui, ref } ); } ); function toCitationListEntry$1(record, existingIds, ui2, doiServer) { var _a; const id2 = createUniqueCiteId(existingIds, suggestCiteId(record)); const providerKey = "datacite"; return { id: id2, isIdEditable: true, title: record.title || "", type: record.type || "", date: ((_a = record.publicationYear) == null ? void 0 : _a.toString()) || "", journal: record.publisher, image: imageForType$1(ui2.images, record.type || "")[ui2.prefs.darkMode() ? 1 : 0], doi: record.doi, authors: () => { return formatAuthors(record.creators || []); }, toBibliographySource: async (finalId) => { const doiResult = await doiServer.fetchCSL(record.doi); const csl = doiResult.message; return { ...csl, id: finalId, providerKey }; }, isSlowGeneratingBibliographySource: true }; } function formatAuthors(authors) { return authors.map((creator) => creator.fullName).join(","); } const insert_citationBibliographyPicker = ""; const CitationBibliographyPicker = (props) => { var _a; const onChange = (e2) => { const index2 = e2.target.selectedIndex; props.onBiblographyFileChanged(props.bibliographyFiles[index2]); }; const onTextChange = (e2) => { const text2 = e2.target.value; props.onCreateBibliographyFileNameChanged(text2); }; const onTypeChange = (e2) => { const index2 = e2.target.selectedIndex; const type2 = props.bibliographyTypes[index2]; const newPath = changeExtension(props.createBibliographyFileName, type2.extension); props.onCreateBibliographyFileNameChanged(newPath); props.ui.prefs.setBibliographyDefaultType(type2.extension); }; return /* @__PURE__ */ React.createElement("div", { className: "pm-citation-bibliography-picker-container", style: props.style }, /* @__PURE__ */ React.createElement("div", { className: "pm-citation-bibliography-picker-label pm-text-color" }, props.bibliographyFiles.length > 0 ? props.ui.context.translateText("Add to:") : props.ui.context.translateText("Create:")), props.bibliographyFiles.length > 0 ? /* @__PURE__ */ React.createElement(SelectInput, { onChange }, props.bibliographyFiles.map((file) => /* @__PURE__ */ React.createElement("option", { key: file.fullPath, value: file.fullPath }, file.displayPath))) : /* @__PURE__ */ React.createElement("div", { className: "pm-citation-bibliography-picker-create-controls" }, /* @__PURE__ */ React.createElement( TextInput, { width: "100", tabIndex: 0, className: "pm-citation-bibliography-picker-textbox pm-block-border-color", placeholder: props.ui.context.translateText("Bibligraphy file name"), value: props.createBibliographyFileName, onChange: onTextChange } ), /* @__PURE__ */ React.createElement("div", { className: "pm-citation-bibliography-format-label pm-text-color" }, props.ui.context.translateText("Format:")), /* @__PURE__ */ React.createElement( SelectInput, { onChange: onTypeChange, defaultValue: (_a = props.bibliographyTypes.find((bibType) => bibType.default)) == null ? void 0 : _a.extension }, props.bibliographyTypes.map((bibType) => /* @__PURE__ */ React.createElement("option", { key: bibType.extension, value: bibType.extension }, bibType.displayName)) ))); }; var lodash_orderby = { exports: {} }; (function(module3, exports2) { var LARGE_ARRAY_SIZE = 200; var FUNC_ERROR_TEXT2 = "Expected a function"; var HASH_UNDEFINED = "__lodash_hash_undefined__"; var UNORDERED_COMPARE_FLAG = 1, PARTIAL_COMPARE_FLAG = 2; var INFINITY2 = 1 / 0, MAX_SAFE_INTEGER2 = 9007199254740991; var argsTag2 = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag2 = "[object Function]", genTag2 = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", promiseTag = "[object Promise]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag2 = "[object Symbol]", weakMapTag = "[object WeakMap]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, reLeadingDot = /^\./, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g; var reEscapeChar = /\\(\\)?/g; var reIsHostCtor2 = /^\[object .+?Constructor\]$/; var reIsUint2 = /^(?:0|[1-9]\d*)$/; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; var freeGlobal2 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var freeSelf2 = typeof self == "object" && self && self.Object === Object && self; var root2 = freeGlobal2 || freeSelf2 || Function("return this")(); var freeExports = exports2 && !exports2.nodeType && exports2; var freeModule = freeExports && true && module3 && !module3.nodeType && module3; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && freeGlobal2.process; var nodeUtil = function() { try { return freeProcess && freeProcess.binding("util"); } catch (e2) { } }(); var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; function arrayMap(array, iteratee) { var index2 = -1, length2 = array ? array.length : 0, result = Array(length2); while (++index2 < length2) { result[index2] = iteratee(array[index2], index2, array); } return result; } function arraySome(array, predicate) { var index2 = -1, length2 = array ? array.length : 0; while (++index2 < length2) { if (predicate(array[index2], index2, array)) { return true; } } return false; } function baseProperty(key2) { return function(object) { return object == null ? void 0 : object[key2]; }; } function baseSortBy(array, comparer) { var length2 = array.length; array.sort(comparer); while (length2--) { array[length2] = array[length2].value; } return array; } function baseTimes(n2, iteratee) { var index2 = -1, result = Array(n2); while (++index2 < n2) { result[index2] = iteratee(index2); } return result; } function baseUnary(func) { return function(value) { return func(value); }; } function getValue2(object, key2) { return object == null ? void 0 : object[key2]; } function isHostObject2(value) { var result = false; if (value != null && typeof value.toString != "function") { try { result = !!(value + ""); } catch (e2) { } } return result; } function mapToArray(map2) { var index2 = -1, result = Array(map2.size); map2.forEach(function(value, key2) { result[++index2] = [key2, value]; }); return result; } function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } function setToArray(set2) { var index2 = -1, result = Array(set2.size); set2.forEach(function(value) { result[++index2] = value; }); return result; } var arrayProto = Array.prototype, funcProto2 = Function.prototype, objectProto2 = Object.prototype; var coreJsData2 = root2["__core-js_shared__"]; var maskSrcKey2 = function() { var uid2 = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || ""); return uid2 ? "Symbol(src)_1." + uid2 : ""; }(); var funcToString2 = funcProto2.toString; var hasOwnProperty2 = objectProto2.hasOwnProperty; var objectToString2 = objectProto2.toString; var reIsNative2 = RegExp( "^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); var Symbol2 = root2.Symbol, Uint8Array2 = root2.Uint8Array, propertyIsEnumerable2 = objectProto2.propertyIsEnumerable, splice = arrayProto.splice; var nativeKeys = overArg(Object.keys, Object); var DataView = getNative2(root2, "DataView"), Map2 = getNative2(root2, "Map"), Promise2 = getNative2(root2, "Promise"), Set2 = getNative2(root2, "Set"), WeakMap2 = getNative2(root2, "WeakMap"), nativeCreate = getNative2(Object, "create"); var dataViewCtorString = toSource2(DataView), mapCtorString = toSource2(Map2), promiseCtorString = toSource2(Promise2), setCtorString = toSource2(Set2), weakMapCtorString = toSource2(WeakMap2); var symbolProto = Symbol2 ? Symbol2.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0, symbolToString = symbolProto ? symbolProto.toString : void 0; function Hash(entries) { var index2 = -1, length2 = entries ? entries.length : 0; this.clear(); while (++index2 < length2) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; } function hashDelete(key2) { return this.has(key2) && delete this.__data__[key2]; } function hashGet(key2) { var data = this.__data__; if (nativeCreate) { var result = data[key2]; return result === HASH_UNDEFINED ? void 0 : result; } return hasOwnProperty2.call(data, key2) ? data[key2] : void 0; } function hashHas(key2) { var data = this.__data__; return nativeCreate ? data[key2] !== void 0 : hasOwnProperty2.call(data, key2); } function hashSet(key2, value) { var data = this.__data__; data[key2] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value; return this; } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function ListCache(entries) { var index2 = -1, length2 = entries ? entries.length : 0; this.clear(); while (++index2 < length2) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } function listCacheClear() { this.__data__ = []; } function listCacheDelete(key2) { var data = this.__data__, index2 = assocIndexOf(data, key2); if (index2 < 0) { return false; } var lastIndex = data.length - 1; if (index2 == lastIndex) { data.pop(); } else { splice.call(data, index2, 1); } return true; } function listCacheGet(key2) { var data = this.__data__, index2 = assocIndexOf(data, key2); return index2 < 0 ? void 0 : data[index2][1]; } function listCacheHas(key2) { return assocIndexOf(this.__data__, key2) > -1; } function listCacheSet(key2, value) { var data = this.__data__, index2 = assocIndexOf(data, key2); if (index2 < 0) { data.push([key2, value]); } else { data[index2][1] = value; } return this; } ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; function MapCache(entries) { var index2 = -1, length2 = entries ? entries.length : 0; this.clear(); while (++index2 < length2) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } function mapCacheClear() { this.__data__ = { "hash": new Hash(), "map": new (Map2 || ListCache)(), "string": new Hash() }; } function mapCacheDelete(key2) { return getMapData(this, key2)["delete"](key2); } function mapCacheGet(key2) { return getMapData(this, key2).get(key2); } function mapCacheHas(key2) { return getMapData(this, key2).has(key2); } function mapCacheSet(key2, value) { getMapData(this, key2).set(key2, value); return this; } MapCache.prototype.clear = mapCacheClear; MapCache.prototype["delete"] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; function SetCache(values) { var index2 = -1, length2 = values ? values.length : 0; this.__data__ = new MapCache(); while (++index2 < length2) { this.add(values[index2]); } } function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function Stack(entries) { this.__data__ = new ListCache(entries); } function stackClear() { this.__data__ = new ListCache(); } function stackDelete(key2) { return this.__data__["delete"](key2); } function stackGet(key2) { return this.__data__.get(key2); } function stackHas(key2) { return this.__data__.has(key2); } function stackSet(key2, value) { var cache = this.__data__; if (cache instanceof ListCache) { var pairs2 = cache.__data__; if (!Map2 || pairs2.length < LARGE_ARRAY_SIZE - 1) { pairs2.push([key2, value]); return this; } cache = this.__data__ = new MapCache(pairs2); } cache.set(key2, value); return this; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function arrayLikeKeys(value, inherited) { var result = isArray2(value) || isArguments2(value) ? baseTimes(value.length, String) : []; var length2 = result.length, skipIndexes = !!length2; for (var key2 in value) { if ((inherited || hasOwnProperty2.call(value, key2)) && !(skipIndexes && (key2 == "length" || isIndex2(key2, length2)))) { result.push(key2); } } return result; } function assocIndexOf(array, key2) { var length2 = array.length; while (length2--) { if (eq2(array[length2][0], key2)) { return length2; } } return -1; } var baseEach = createBaseEach(baseForOwn); var baseFor = createBaseFor(); function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys2); } function baseGet(object, path) { path = isKey(path, object) ? [path] : castPath(path); var index2 = 0, length2 = path.length; while (object != null && index2 < length2) { object = object[toKey(path[index2++])]; } return index2 && index2 == length2 ? object : void 0; } function baseGetTag(value) { return objectToString2.call(value); } function baseHasIn(object, key2) { return object != null && key2 in Object(object); } function baseIsEqual(value, other, customizer, bitmask, stack) { if (value === other) { return true; } if (value == null || other == null || !isObject2(value) && !isObjectLike2(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); } function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = arrayTag, othTag = arrayTag; if (!objIsArr) { objTag = getTag2(object); objTag = objTag == argsTag2 ? objectTag : objTag; } if (!othIsArr) { othTag = getTag2(other); othTag = othTag == argsTag2 ? objectTag : othTag; } var objIsObj = objTag == objectTag && !isHostObject2(object), othIsObj = othTag == objectTag && !isHostObject2(other), isSameTag = objTag == othTag; if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); } if (!(bitmask & PARTIAL_COMPARE_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty2.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty2.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, equalFunc, customizer, bitmask, stack); } function baseIsMatch(object, source, matchData, customizer) { var index2 = matchData.length, length2 = index2, noCustomizer = !customizer; if (object == null) { return !length2; } object = Object(object); while (index2--) { var data = matchData[index2]; if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index2 < length2) { data = matchData[index2]; var key2 = data[0], objValue = object[key2], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === void 0 && !(key2 in object)) { return false; } } else { var stack = new Stack(); if (customizer) { var result = customizer(objValue, srcValue, key2, object, source, stack); } if (!(result === void 0 ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) { return false; } } } return true; } function baseIsNative2(value) { if (!isObject2(value) || isMasked2(value)) { return false; } var pattern = isFunction2(value) || isHostObject2(value) ? reIsNative2 : reIsHostCtor2; return pattern.test(toSource2(value)); } function baseIsTypedArray(value) { return isObjectLike2(value) && isLength2(value.length) && !!typedArrayTags[objectToString2.call(value)]; } function baseIteratee(value) { if (typeof value == "function") { return value; } if (value == null) { return identity2; } if (typeof value == "object") { return isArray2(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key2 in Object(object)) { if (hasOwnProperty2.call(object, key2) && key2 != "constructor") { result.push(key2); } } return result; } function baseMap(collection, iteratee) { var index2 = -1, result = isArrayLike2(collection) ? Array(collection.length) : []; baseEach(collection, function(value, key2, collection2) { result[++index2] = iteratee(value, key2, collection2); }); return result; } function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get2(object, path); return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, void 0, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); }; } function baseOrderBy(collection, iteratees, orders) { var index2 = -1; iteratees = arrayMap(iteratees.length ? iteratees : [identity2], baseUnary(baseIteratee)); var result = baseMap(collection, function(value, key2, collection2) { var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); return { "criteria": criteria, "index": ++index2, "value": value }; }); return baseSortBy(result, function(object, other) { return compareMultiple(object, other, orders); }); } function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } function baseToString2(value) { if (typeof value == "string") { return value; } if (isSymbol2(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result = value + ""; return result == "0" && 1 / value == -INFINITY2 ? "-0" : result; } function castPath(value) { return isArray2(value) ? value : stringToPath(value); } function compareAscending(value, other) { if (value !== other) { var valIsDefined = value !== void 0, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol2(value); var othIsDefined = other !== void 0, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol2(other); if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) { return 1; } if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) { return -1; } } return 0; } function compareMultiple(object, other, orders) { var index2 = -1, objCriteria = object.criteria, othCriteria = other.criteria, length2 = objCriteria.length, ordersLength = orders.length; while (++index2 < length2) { var result = compareAscending(objCriteria[index2], othCriteria[index2]); if (result) { if (index2 >= ordersLength) { return result; } var order2 = orders[index2]; return result * (order2 == "desc" ? -1 : 1); } } return object.index - other.index; } function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike2(collection)) { return eachFunc(collection, iteratee); } var length2 = collection.length, index2 = fromRight ? length2 : -1, iterable = Object(collection); while (fromRight ? index2-- : ++index2 < length2) { if (iteratee(iterable[index2], index2, iterable) === false) { break; } } return collection; }; } function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index2 = -1, iterable = Object(object), props = keysFunc(object), length2 = props.length; while (length2--) { var key2 = props[fromRight ? length2 : ++index2]; if (iteratee(iterable[key2], key2, iterable) === false) { break; } } return object; }; } function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { var isPartial = bitmask & PARTIAL_COMPARE_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var stacked = stack.get(array); if (stacked && stack.get(other)) { return stacked == other; } var index2 = -1, result = true, seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index2 < arrLength) { var arrValue = array[index2], othValue = other[index2]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!seen.has(othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, customizer, bitmask, stack))) { return seen.add(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq2(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert2 = mapToArray; case setTag: var isPartial = bitmask & PARTIAL_COMPARE_FLAG; convert2 || (convert2 = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= UNORDERED_COMPARE_FLAG; stack.set(object, other); var result = equalArrays(convert2(object), convert2(other), equalFunc, customizer, bitmask, stack); stack["delete"](object); return result; case symbolTag2: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { var isPartial = bitmask & PARTIAL_COMPARE_FLAG, objProps = keys2(object), objLength = objProps.length, othProps = keys2(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index2 = objLength; while (index2--) { var key2 = objProps[index2]; if (!(isPartial ? key2 in other : hasOwnProperty2.call(other, key2))) { return false; } } var stacked = stack.get(object); if (stacked && stack.get(other)) { return stacked == other; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index2 < objLength) { key2 = objProps[index2]; var objValue = object[key2], othValue = other[key2]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key2, other, object, stack) : customizer(objValue, othValue, key2, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key2 == "constructor"); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result = false; } } stack["delete"](object); stack["delete"](other); return result; } function getMapData(map2, key2) { var data = map2.__data__; return isKeyable(key2) ? data[typeof key2 == "string" ? "string" : "hash"] : data.map; } function getMatchData(object) { var result = keys2(object), length2 = result.length; while (length2--) { var key2 = result[length2], value = object[key2]; result[length2] = [key2, value, isStrictComparable(value)]; } return result; } function getNative2(object, key2) { var value = getValue2(object, key2); return baseIsNative2(value) ? value : void 0; } var getTag2 = baseGetTag; if (DataView && getTag2(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag2(new Map2()) != mapTag || Promise2 && getTag2(Promise2.resolve()) != promiseTag || Set2 && getTag2(new Set2()) != setTag || WeakMap2 && getTag2(new WeakMap2()) != weakMapTag) { getTag2 = function(value) { var result = objectToString2.call(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource2(Ctor) : void 0; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } function hasPath(object, path, hasFunc) { path = isKey(path, object) ? [path] : castPath(path); var result, index2 = -1, length2 = path.length; while (++index2 < length2) { var key2 = toKey(path[index2]); if (!(result = object != null && hasFunc(object, key2))) { break; } object = object[key2]; } if (result) { return result; } var length2 = object ? object.length : 0; return !!length2 && isLength2(length2) && isIndex2(key2, length2) && (isArray2(object) || isArguments2(object)); } function isIndex2(value, length2) { length2 = length2 == null ? MAX_SAFE_INTEGER2 : length2; return !!length2 && (typeof value == "number" || reIsUint2.test(value)) && (value > -1 && value % 1 == 0 && value < length2); } function isKey(value, object) { if (isArray2(value)) { return false; } var type2 = typeof value; if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value == null || isSymbol2(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); } function isKeyable(value) { var type2 = typeof value; return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value !== "__proto__" : value === null; } function isMasked2(func) { return !!maskSrcKey2 && maskSrcKey2 in func; } function isPrototype(value) { var Ctor = value && value.constructor, proto2 = typeof Ctor == "function" && Ctor.prototype || objectProto2; return value === proto2; } function isStrictComparable(value) { return value === value && !isObject2(value); } function matchesStrictComparable(key2, srcValue) { return function(object) { if (object == null) { return false; } return object[key2] === srcValue && (srcValue !== void 0 || key2 in Object(object)); }; } var stringToPath = memoize2(function(string) { string = toString2(string); var result = []; if (reLeadingDot.test(string)) { result.push(""); } string.replace(rePropName, function(match2, number, quote, string2) { result.push(quote ? string2.replace(reEscapeChar, "$1") : number || match2); }); return result; }); function toKey(value) { if (typeof value == "string" || isSymbol2(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -INFINITY2 ? "-0" : result; } function toSource2(func) { if (func != null) { try { return funcToString2.call(func); } catch (e2) { } try { return func + ""; } catch (e2) { } } return ""; } function orderBy2(collection, iteratees, orders, guard) { if (collection == null) { return []; } if (!isArray2(iteratees)) { iteratees = iteratees == null ? [] : [iteratees]; } orders = guard ? void 0 : orders; if (!isArray2(orders)) { orders = orders == null ? [] : [orders]; } return baseOrderBy(collection, iteratees, orders); } function memoize2(func, resolver) { if (typeof func != "function" || resolver && typeof resolver != "function") { throw new TypeError(FUNC_ERROR_TEXT2); } var memoized = function() { var args = arguments, key2 = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key2)) { return cache.get(key2); } var result = func.apply(this, args); memoized.cache = cache.set(key2, result); return result; }; memoized.cache = new (memoize2.Cache || MapCache)(); return memoized; } memoize2.Cache = MapCache; function eq2(value, other) { return value === other || value !== value && other !== other; } function isArguments2(value) { return isArrayLikeObject2(value) && hasOwnProperty2.call(value, "callee") && (!propertyIsEnumerable2.call(value, "callee") || objectToString2.call(value) == argsTag2); } var isArray2 = Array.isArray; function isArrayLike2(value) { return value != null && isLength2(value.length) && !isFunction2(value); } function isArrayLikeObject2(value) { return isObjectLike2(value) && isArrayLike2(value); } function isFunction2(value) { var tag = isObject2(value) ? objectToString2.call(value) : ""; return tag == funcTag2 || tag == genTag2; } function isLength2(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2; } function isObject2(value) { var type2 = typeof value; return !!value && (type2 == "object" || type2 == "function"); } function isObjectLike2(value) { return !!value && typeof value == "object"; } function isSymbol2(value) { return typeof value == "symbol" || isObjectLike2(value) && objectToString2.call(value) == symbolTag2; } var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; function toString2(value) { return value == null ? "" : baseToString2(value); } function get2(object, path, defaultValue) { var result = object == null ? void 0 : baseGet(object, path); return result === void 0 ? defaultValue : result; } function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } function keys2(object) { return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object); } function identity2(value) { return value; } function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } module3.exports = orderBy2; })(lodash_orderby, lodash_orderby.exports); const orderBy = lodash_orderby.exports; const kPackageType = "Packages"; function packageSourcePanel(ui2, server) { let pkgInfos; let pkgIndex; const getPackageIndex = async () => { if (pkgIndex === void 0) { const pkgState = await server.getRPackageState(); const sorted = orderBy(pkgState.package_list, [(pkg) => pkg.name.toLowerCase(), "in.project.library"], ["asc", "desc"]); pkgInfos = uniqBy(sorted, (pkg) => pkg.name); pkgIndex = packageIndex(pkgInfos); } return { packageInfos: pkgInfos, index: pkgIndex }; }; return { key: "97863EFF-2075-43B2-8F0F-88A250CC33BE", panel: PackageSourcePanel, treeNode: () => { var _a; return { key: "RPackages", name: ui2.context.translateText("R Package"), image: (_a = ui2.images.citations) == null ? void 0 : _a.packages, type: kPackageType, children: [], expanded: true }; }, typeAheadSearch: (searchTerm, _selectedNode, existingCitationIds, onResults) => { getPackageIndex().then(({ packageInfos, index: index2 }) => { const matchingEntries = searchTerm ? index2.search(searchTerm) : packageInfos; const citations = matchingEntries.map((pkg) => { return toCitationListEntry(pkg, existingCitationIds, ui2, server); }); const status = citations.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults; const statusMessage = citations.length > 0 ? "" : ui2.context.translateText("No matching packages"); onResults({ citations, status, statusMessage }); }); } }; } const PackageSourcePanel = React.forwardRef( (props, ref) => { return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement( CitationSourceTypeheadSearchPanel, { height: props.height, citations: props.citations, citationsToAdd: props.citationsToAdd, searchTerm: props.searchTerm, onSearchTermChanged: props.onSearchTermChanged, selectedIndex: props.selectedIndex, onSelectedIndexChanged: props.onSelectedIndexChanged, onAddCitation: props.onAddCitation, onRemoveCitation: props.onRemoveCitation, onConfirm: props.onConfirm, status: props.status, statusMessage: props.statusMessage, ui: props.ui, ref } )); } ); function toCitationListEntry(packageInfo, existingCitationIds, ui2, server) { return { id: suggestPackageCiteId(packageInfo.name, existingCitationIds), isIdEditable: true, type: cslTypes.entry, title: packageInfo.desc || "", date: packageInfo.version || "", journal: "", doi: "", image: imageForType$1(ui2.images, cslTypes.book)[ui2.prefs.darkMode() ? 1 : 0], authors: () => { return packageInfo.name || ""; }, toBibliographySource: async (finalId) => { const csl = await packageToCSL(packageInfo, server); if (csl) { return { ...csl, id: finalId, providerKey: kPackageType }; } else { return { type: cslTypes.book, id: finalId, providerKey: kPackageType }; } }, isSlowGeneratingBibliographySource: false }; } async function packageToCSL(packageInfo, server) { const citeInfos = await server.getRPackageCitations(packageInfo.name); if (citeInfos && citeInfos.length) { const citeInfo = citeInfos[0]; return packageCitationToCSL(citeInfo); } else { return void 0; } } function packageCitationToCSL(citeInfo) { const toCSLNames = (people) => { if (people) { return people.map((person) => { return { family: person.family, given: person.given.join(" ") }; }); } else { return void 0; } }; const toCSLDate = (year) => { if (year) { return { "date-parts": [[Number.parseInt(year, 10)]] }; } else { return void 0; } }; const csl = { type: bibtextTypeToCSLType(citeInfo.type), title: citeInfo.title }; if (citeInfo.doi !== null) { csl.DOI = citeInfo.doi; } if (citeInfo.url !== null) { csl.URL = citeInfo.url; } if (citeInfo.publisher !== null) { csl.publisher = citeInfo.publisher; } if (citeInfo.booktitle !== null) { csl["container-title"] = citeInfo.booktitle; } if (citeInfo.pages !== null) { csl.page = citeInfo.pages; } if (citeInfo.volume !== null) { csl.volume = citeInfo.volume; } if (citeInfo.author !== null) { csl.author = toCSLNames(citeInfo.author); } if (citeInfo.year !== null) { csl.issued = toCSLDate(citeInfo.year); } return csl; } function suggestPackageCiteId(name, existingCitationIds) { let retryCount = 0; const incrementName = () => { retryCount = retryCount + 1; if (retryCount === 1) { return name; } else { return `${name}-${retryCount}`; } }; let citekey = incrementName(); while (existingCitationIds.includes(citekey)) { citekey = incrementName(); } return citekey; } const searchFields$1 = [ { name: "name", weight: 30 }, { name: "desc", weight: 15 }, { name: "version", weight: 5 } ]; function packageIndex(entries) { const options = { isCaseSensitive: false, shouldSort: true, includeMatches: false, includeScore: false, minMatchCharLength: 1, threshold: 0.2, keys: searchFields$1, limit: 1e4 }; const index2 = Fuse.createIndex(searchFields$1.map((searchField) => searchField.name), entries); const fuse = new Fuse(entries, options, index2); return { search: (searchTerm) => { const results = fuse.search(searchTerm, options); return results.map((result) => result.item); } }; } const insert_citation = ""; const CheckboxInput = React.forwardRef((props, ref) => { const style = { ...props.style }; return /* @__PURE__ */ React.createElement( "input", { id: props.id, type: "checkbox", className: ` pm-input-checkbox pm-text-color pm-background-color ${props.className}`, style, checked: props.checked, onChange: props.onChange, tabIndex: props.tabIndex, ref } ); }); async function showInsertCitationDialog(ui2, doc2, bibliographyManager, server, performInsertCitations, initiallySelectedNodeKey) { let result; const performInsert = await ui2.dialogs.htmlDialog( "Insert Citation", "Insert", (containerWidth, containerHeight, confirm, cancel, showProgress, hideProgress, themed) => { const kMaxHeight = 650; const kMaxWidth2 = 900; const kMaxHeightProportion = 0.9; const kdialogPaddingIncludingButtons = 70; const windowHeight = containerHeight; const windowWidth = containerWidth; const height = Math.min(kMaxHeight, windowHeight * kMaxHeightProportion) - kdialogPaddingIncludingButtons; const width = Math.max(Math.min(kMaxWidth2, windowWidth * 0.9), 550); const container = window.document.createElement("div"); container.style.width = width + "px"; container.style.height = height + "px"; if (!themed) { container.className = "pm-default-theme"; } const root2 = createRoot(container); const providersForBibliography = (writable) => { if (writable) { const providers = [ bibliographySourcePanel(doc2, ui2, bibliographyManager), doiSourcePanel(ui2, server.doi, bibliographyManager), crossrefSourcePanel(ui2, server.crossref, server.doi, bibliographyManager), dataciteSourcePanel(ui2, server.datacite, server.doi, bibliographyManager), pubmedSourcePanel(ui2, server.pubmed, server.doi, bibliographyManager) ]; if (server.environment) { providers.push(packageSourcePanel(ui2, server.environment)); } return providers; } else { return [bibliographySourcePanel(doc2, ui2, bibliographyManager)]; } }; let updatedConfiguration; const configurationStream = { current: { providers: providersForBibliography(bibliographyManager.allowsWrites()), bibliographyFiles: bibliographyManager.bibliographyFiles(doc2, ui2), existingIds: bibliographyManager.localSources().map((source) => source.id) }, stream: () => { return updatedConfiguration || null; } }; bibliographyManager.load(ui2, doc2, true).then(() => { updatedConfiguration = { providers: providersForBibliography(bibliographyManager.allowsWrites()), bibliographyFiles: bibliographyManager.bibliographyFiles(doc2, ui2), existingIds: bibliographyManager.localSources().map((source) => source.id) }; }); const onOk = async (bibliographySourceProviders, bibliography, selectedNode, intextCitationStyle) => { if (bibliographySourceProviders.length > 0) { const requiresProgress = bibliographySourceProviders.some( (sourceProvider) => sourceProvider.isSlowGeneratingBibliographySource ); if (requiresProgress) { showProgress( ui2.context.translateText( bibliographySourceProviders.length === 1 ? "Creating bibliography entry..." : "Creating bibliography entries..." ) ); } const bibliographySources = await Promise.all( bibliographySourceProviders.map((sourceProvider) => sourceProvider.toBibliographySource(sourceProvider.id)) ); result = { bibliographySources, bibliography, intextCitationStyle, selectionKey: selectedNode.key }; await performInsertCitations(result); if (requiresProgress) { hideProgress(); } } root2.unmount(); confirm(); }; const onCancel = () => { root2.unmount(); cancel(); }; root2.render( /* @__PURE__ */ React.createElement( InsertCitationPanel, { height, width, themed: !!themed, configuration: configurationStream, initiallySelectedNodeKey, onOk, onCancel, doc: doc2, ui: ui2 } ) ); return container; }, () => { }, () => { return null; } ); if (performInsert && result) { return Promise.resolve(true); } else { return Promise.resolve(false); } } const InsertCitationPanel = (props) => { const [insertCitationConfiguration, setInsertCitationConfiguration] = React.useState(props.configuration.current); const treeSourceData = insertCitationConfiguration.providers.map((panel) => panel.treeNode()); const defaultNode = nodeForKey(treeSourceData, props.initiallySelectedNodeKey); const [selectedPanelProvider, setSelectedPanelProvider] = React.useState( panelForNode(insertCitationConfiguration.providers, defaultNode) || insertCitationConfiguration.providers[0] ); const [insertCitationPanelState, setInsertCitationPanelState] = React.useState({ citations: [], citationsToAdd: [], selectedIndex: -1, searchTerm: "", selectedNode: defaultNode || selectedPanelProvider.treeNode(), status: CitationSourceListStatus.default, statusMessage: selectedPanelProvider.placeHolderMessage || "", existingBibliographyFile: props.configuration.current.bibliographyFiles[0], createBibliographyFile: bibliographyFileForPath( changeExtension( "references.json", props.ui.prefs.bibliographyDefaultType() || bibliographyTypes(props.ui)[0].extension ), props.ui ), intextCitationStyle: props.ui.prefs.citationDefaultInText() }); const updateState = (updatedState) => { const newState = { ...insertCitationPanelState, ...updatedState }; setInsertCitationPanelState(newState); }; const displayedCitations = insertCitationPanelState.citations.filter( (citation) => !insertCitationPanelState.citationsToAdd.includes(citation) ); const selectedCitation = insertCitationPanelState.selectedIndex > -1 ? displayedCitations[insertCitationPanelState.selectedIndex] : void 0; const mergedCitationsToAdd = mergeCitations(insertCitationPanelState.citationsToAdd, selectedCitation); const existingCitationIds = [ ...insertCitationConfiguration.existingIds, ...mergedCitationsToAdd.map((citation) => citation.id) ]; const panelRef = React.useRef(); const streamTimerId = React.useRef(); const refreshSearchCallback = React.useRef(); React.useEffect(() => { refreshSearchCallback.current = async () => { if (selectedPanelProvider.typeAheadSearch) { selectedPanelProvider.typeAheadSearch( insertCitationPanelState.searchTerm, insertCitationPanelState.selectedNode, insertCitationConfiguration.existingIds, (results) => { updateState({ searchTerm: "", citations: (results == null ? void 0 : results.citations) || [], status: (results == null ? void 0 : results.status) || CitationSourceListStatus.default, statusMessage: (results == null ? void 0 : results.statusMessage) || selectedPanelProvider.placeHolderMessage }); } ); } }; }); React.useEffect(() => { if (panelRef.current) { window.setTimeout(() => { if (panelRef.current) { panelRef.current.focus(); } }, 200); } streamTimerId.current = window.setInterval(() => { const result = props.configuration.stream(); if (result !== null) { if (streamTimerId.current) { clearInterval(streamTimerId.current); } setInsertCitationConfiguration(result); const panelProvider = panelForNode(result.providers, insertCitationPanelState.selectedNode); if (panelProvider) { setSelectedPanelProvider(panelProvider); } if (refreshSearchCallback.current) { refreshSearchCallback.current(); } } }, 200); if (selectedPanelProvider.typeAheadSearch) { selectedPanelProvider.typeAheadSearch( "", insertCitationPanelState.selectedNode, insertCitationConfiguration.existingIds, (result) => { updateState({ searchTerm: "", citations: (result == null ? void 0 : result.citations) || [], status: (result == null ? void 0 : result.status) || CitationSourceListStatus.default, statusMessage: (result == null ? void 0 : result.statusMessage) || selectedPanelProvider.placeHolderMessage }); } ); } }, []); const onOk = () => { props.onOk( mergedCitationsToAdd, insertCitationPanelState.existingBibliographyFile || insertCitationPanelState.createBibliographyFile, insertCitationPanelState.selectedNode, insertCitationPanelState.intextCitationStyle ); }; const style = { width: props.width + "px", ...props.style }; const panelHeight = props.height - 85; const memoizedTypeaheadSearch = React.useCallback( lodash_debounce( (searchTerm, panelProvider, existingIds, existingState) => { if (panelProvider.typeAheadSearch) { panelProvider.typeAheadSearch(searchTerm, existingState.selectedNode, existingIds, (result) => { setInsertCitationPanelState( { ...existingState, searchTerm, citations: result == null ? void 0 : result.citations, status: result == null ? void 0 : result.status, statusMessage: result == null ? void 0 : result.statusMessage } ); }); } }, 30 ), [] ); const citationProps = { ui: props.ui, height: panelHeight, citations: displayedCitations, citationsToAdd: mergedCitationsToAdd, searchTerm: insertCitationPanelState.searchTerm, onSearchTermChanged: (term) => { const updatedState = { ...insertCitationPanelState, searchTerm: term }; updateState(updatedState); memoizedTypeaheadSearch(term, selectedPanelProvider, insertCitationConfiguration.existingIds, updatedState); }, onExecuteSearch: (searchTerm) => { searchCanceled.current = false; updateState({ searchTerm, status: CitationSourceListStatus.inProgress, statusMessage: selectedPanelProvider.progressMessage }); if (selectedPanelProvider.search) { selectedPanelProvider.search(searchTerm, insertCitationPanelState.selectedNode, existingCitationIds).then((searchResult) => { if (!searchCanceled.current) { const selectedIndex = (searchResult == null ? void 0 : searchResult.citations.length) === 1 ? 0 : -1; updateState({ searchTerm, citations: searchResult == null ? void 0 : searchResult.citations, status: searchResult == null ? void 0 : searchResult.status, statusMessage: searchResult == null ? void 0 : searchResult.statusMessage, selectedIndex }); } }); } }, onAddCitation: (citation) => { const newCitations = [...insertCitationPanelState.citationsToAdd, citation]; updateState({ selectedIndex: -1, citationsToAdd: newCitations }); }, onRemoveCitation: (citation) => { deleteCitation(citation.id); }, selectedIndex: insertCitationPanelState.selectedIndex, onSelectedIndexChanged: (index2) => { updateState({ selectedIndex: index2 }); }, onConfirm: onOk, status: insertCitationPanelState.status, statusMessage: insertCitationPanelState.statusMessage, warningMessage: selectedPanelProvider.warningMessage || "", ref: panelRef }; const searchCanceled = React.useRef(false); const onNodeSelected = async (node2) => { const suggestedPanel = panelForNode(insertCitationConfiguration.providers, node2); if (suggestedPanel) { updateState({ citations: [], selectedNode: node2, status: CitationSourceListStatus.default, statusMessage: "" }); searchCanceled.current = true; if (suggestedPanel.typeAheadSearch) { suggestedPanel.typeAheadSearch("", node2, insertCitationConfiguration.existingIds, (result) => { updateState({ searchTerm: "", citations: (result == null ? void 0 : result.citations) || [], status: (result == null ? void 0 : result.status) || CitationSourceListStatus.default, statusMessage: (result == null ? void 0 : result.statusMessage) || suggestedPanel.placeHolderMessage, selectedNode: node2 }); }); } if ((suggestedPanel == null ? void 0 : suggestedPanel.key) !== (selectedPanelProvider == null ? void 0 : selectedPanelProvider.key)) { setSelectedPanelProvider(suggestedPanel); } } }; const deleteCitation = (id2) => { const selCite = displayedCitations[insertCitationPanelState.selectedIndex]; if (selCite && selCite.id === id2) { updateState({ selectedIndex: -1 }); } else { const filteredCitations = insertCitationPanelState.citationsToAdd.filter((source) => source.id !== id2); updateState({ citationsToAdd: filteredCitations }); } }; const onTagDeleted = (tag) => { deleteCitation(tag.key); }; const onTagChanged = (key2, text2) => { const targetSource = insertCitationPanelState.citationsToAdd.find((source) => source.id === key2); if (targetSource) { targetSource.id = text2; } if (insertCitationPanelState.selectedIndex > -1) { const currentlySelectedCitation = insertCitationPanelState.citations[insertCitationPanelState.selectedIndex]; if (currentlySelectedCitation && currentlySelectedCitation.id === key2) { currentlySelectedCitation.id = text2; } } }; const onTagValidate = (_key, text2) => { const invalidChars = text2.match(kInvalidCiteKeyChars); if (invalidChars) { return props.ui.context.translateText( "The citekey includes invalid characters such as a space or a special character." ); } return null; }; const onBibliographyFileChanged = (biblographyFile) => { updateState({ existingBibliographyFile: biblographyFile }); }; const onCreateBibliographyFileNameChanged = (fileName) => { updateState({ createBibliographyFile: bibliographyFileForPath(fileName, props.ui) }); }; const onCitationStyleChanged = (e2) => { updateState({ intextCitationStyle: e2.target.checked }); }; const onKeyPress = (event) => { if (event.key === "Enter") { event.preventDefault(); event.stopPropagation(); onOk(); } }; const onKeyDown = (event) => { if (event.key === "Escape") { event.stopPropagation(); props.onCancel(); } }; const totalCitationCount = insertCitationPanelState.citationsToAdd.length + (insertCitationPanelState.selectedIndex > -1 ? 1 : 0); const classes = ["pm-cite-panel-container"]; if (!props.themed) { classes.push("pm-default-theme"); } const panelToDisplay = selectedPanelProvider ? React.createElement(selectedPanelProvider.panel, citationProps) : void 0; return /* @__PURE__ */ React.createElement("div", { className: classes.join(" "), style, onKeyPress, onKeyDown }, /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-cite-selection" }, /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-cite-selection-sources pm-block-border-color pm-background-color" }, /* @__PURE__ */ React.createElement( NavigationTree, { height: panelHeight, nodes: treeSourceData, selectedNode: insertCitationPanelState.selectedNode, onSelectedNodeChanged: onNodeSelected } )), /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-cite-selection-items" }, panelToDisplay)), /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-selected-cites pm-block-border-color pm-background-color" }, /* @__PURE__ */ React.createElement( TagInput, { tags: mergedCitationsToAdd.map((source) => ({ key: source.id, displayText: source.id, displayPrefix: "@", isEditable: source.isIdEditable })), onTagDeleted, onTagChanged, onTagValidate, ui: props.ui, placeholder: props.ui.context.translateText("Selected Citation Keys"), maxDisplayCharacters: 50 } )), /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-insert-inputs" }, /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-insert-options" }, insertCitationConfiguration.bibliographyFiles.length === 0 || insertCitationConfiguration.bibliographyFiles.some((bibFile) => bibFile == null ? void 0 : bibFile.writable) ? /* @__PURE__ */ React.createElement( CitationBibliographyPicker, { bibliographyTypes: bibliographyTypes(props.ui), createBibliographyFileName: insertCitationPanelState.createBibliographyFile.displayPath, onCreateBibliographyFileNameChanged, bibliographyFiles: insertCitationConfiguration.bibliographyFiles, onBiblographyFileChanged: onBibliographyFileChanged, ui: props.ui } ) : /* @__PURE__ */ React.createElement("div", null), totalCitationCount <= 1 ? /* @__PURE__ */ React.createElement("div", { className: "pm-cite-panel-checkbox-group" }, /* @__PURE__ */ React.createElement( CheckboxInput, { id: "intextStyleCheckbox", checked: insertCitationPanelState.intextCitationStyle, className: "pm-cite-panel-checkbox", onChange: onCitationStyleChanged } ), /* @__PURE__ */ React.createElement("label", { htmlFor: "intextStyleCheckbox", className: "pm-cite-panel-checkbox-label" }, props.ui.context.translateText("In-text"))) : /* @__PURE__ */ React.createElement("div", null)), /* @__PURE__ */ React.createElement( DialogButtons, { okLabel: props.ui.context.translateText("Insert"), cancelLabel: props.ui.context.translateText("Cancel"), onOk, onCancel: props.onCancel } ))); }; const panelForNode = (sourcePanels, node2) => { if (node2) { const panelItem = sourcePanels.find((panel) => { const panelTreeNode = panel.treeNode(); return containsChild(node2.key, panelTreeNode); }); return panelItem; } else { return void 0; } }; const nodeForKey = (nodes2, key2) => { if (!key2) { return void 0; } for (const node2 of nodes2) { if (node2.key === key2) { return node2; } const childNode = nodeForKey(node2.children, key2); if (childNode) { return childNode; } } return void 0; }; const mergeCitations = (toAdd, selected) => { if (!selected) { return toAdd; } else { if (toAdd.map((citation) => citation.id).includes(selected.id)) { return toAdd; } else { return (toAdd || []).concat(selected); } } }; class InsertCitationCommand extends ProsemirrorCommand { constructor(ui2, _events, bibliographyManager, server) { super( EditorCommandId.Citation, ["Shift-Mod-F8"], (state, dispatch, view) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.text) || !toggleMarkType(schema2.marks.cite)(state)) { return false; } if (dispatch && view) { showInsertCitationDialog( ui2, state.doc, bibliographyManager, server, async (result) => { if (result) { this.initialSelectionKey = result.selectionKey; ui2.prefs.setCitationDefaultInText(result.intextCitationStyle); const bibliographySources = result.bibliographySources; const bibliography = result.bibliography; const tr = state.tr; const writeCiteId = await ensureSourcesInBibliography( tr, bibliographySources, bibliography, bibliographyManager, view, ui2, server.pandoc ); if (writeCiteId) { const start = tr.selection.from; const alreadyInCite = markIsActive(tr, schema2.marks.cite); const includeWrapper = !result.intextCitationStyle || result.bibliographySources.length > 1; if (!alreadyInCite && includeWrapper) { const wrapperText = schema2.text("[]"); tr.insert(tr.selection.from, wrapperText); setTextSelection_1(tr.selection.from - 1)(tr); } const preCiteIdRange = getMarkRange(tr.doc.resolve(start - 1), schema2.marks.cite_id); if (preCiteIdRange) { setTextSelection_1(preCiteIdRange.to)(tr); const separator = schema2.text("; "); tr.insert(tr.selection.from, separator); } bibliographySources.forEach((citation, i2) => { const citeIdMark = schema2.marks.cite_id.create(); const citeIdText = schema2.text(`@${citation.id}`, [citeIdMark]); tr.insert(tr.selection.from, citeIdText); if (bibliographySources.length > 1 && i2 !== bibliographySources.length - 1) { tr.insert(tr.selection.from, schema2.text("; ", [])); } }); const postCiteIdRange = getMarkRange(tr.doc.resolve(tr.selection.from + 1), schema2.marks.cite_id); if (postCiteIdRange) { const separator = schema2.text("; "); tr.insert(tr.selection.from, separator); } if (!alreadyInCite) { const endOfWrapper = includeWrapper ? tr.selection.from + 1 : tr.selection.from; const citeMark = schema2.marks.cite.create(); tr.addMark(start, endOfWrapper, citeMark); setTextSelection_1(endOfWrapper)(tr); } } dispatch(tr); return Promise.resolve(); } }, this.initialSelectionKey ).then(() => { view.focus(); }); } return true; }, { name: ui2.context.translateText("Citation..."), description: ui2.context.translateText("Reference to a source"), group: OmniInsertGroup.References, priority: 1, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.citation_dark : ui2.images.omni_insert.citation } ); __publicField(this, "initialSelectionKey"); } } const citePopupXref = ""; const kMaxWidth$1 = 350; function citeXrefPopupPlugin(schema2, ui2, server) { return textPopupDecorationPlugin({ key: new PluginKey("cite-xref-popup"), markType: schema2.marks.cite_id, maxWidth: kMaxWidth$1, dismissOnEdit: false, createPopup: async (_view, target2, style) => { const docPath = ui2.context.getDocumentPath(); if (docPath) { const citeId = target2.text.replace(/^-@|^@/, ""); const parsed = parseQuartoXRef(citeId); if (parsed) { const { id: id2, type: type2 } = parsed; const xrefs = await server.xref.quartoXrefForId(docPath, `${type2.toLowerCase()}-${id2}`); if (xrefs.refs.length > 0) { if (xrefs.refs.length) { const xref = xrefs.refs[0]; const onClick = () => { const file = xrefs.baseDir + "/" + xref.file; ui2.display.navigateToXRef(file, xref); }; return /* @__PURE__ */ React.createElement(XrefCitefPopup, { xref, onClick, style }); } } } } return null; } }); } const XrefCitefPopup = (props) => { return /* @__PURE__ */ React.createElement(Popup, { classes: ["pm-cite-xref-popup"], style: props.style }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement( LinkButton, { text: xrefKey(props.xref, "quarto"), onClick: props.onClick, maxWidth: kMaxWidth$1 - 20, classes: ["pm-cite-xref-popup-key pm-fixedwidth-font"] } )), props.xref.title ? /* @__PURE__ */ React.createElement("div", { className: "pm-cite-xref-popup-text" }, props.xref.title, " ") : null, /* @__PURE__ */ React.createElement("div", { className: "pm-cite-xref-popup-file" }, props.xref.file, " ")); }; const kCiteCitationsIndex = 0; const kCiteIdPrefixPattern = "-?@"; const kCiteIdCharsPattern = "[^@;\\(\\)\\[\\]\\s\\!\\,]*"; const kCiteIdBasePattern = `${kCiteIdPrefixPattern}${kCiteIdCharsPattern}`; const kCompletionCiteIdRegEx = new RegExp(`(${kCiteIdPrefixPattern})(${kCiteIdCharsPattern})$`); const kCiteId = new RegExp(`^${kCiteIdBasePattern}`); const kInTextCiteRegex = new RegExp(`${kCiteIdBasePattern}$`); const kBeginCitePattern = `([^-]+ -@|[^@]+ @|-?@)`; const kNoteCiteRegex = new RegExp(`\\[${kBeginCitePattern}${kCiteIdCharsPattern}.*?\\]`); const kInTextCiteWithSuffixPattern = `${kCiteIdPrefixPattern}${kCiteIdCharsPattern}\\s+\\[.*?\\]`; const kInTextCiteWithSuffixRegEx = new RegExp(`^${kInTextCiteWithSuffixPattern}$`); const extension$e = (context) => { const { pandocExtensions, ui: ui2 } = context; const bibliographyManager = new BibliographyManager(context.server.pandoc, context.server.zotero); const focusUnsubscribe = context.events.subscribe(FocusEvent, (doc2) => { bibliographyManager.prime(ui2, doc2); focusUnsubscribe(); }); if (!pandocExtensions.citations) { return null; } return { marks: [ { name: "cite", spec: { attrs: {}, inclusive: false, parseDOM: [ { tag: "span[class*='cite']", priority: 5 } ], toDOM() { return ["span", { class: "cite" }]; } }, pandoc: { readers: [ { token: PandocTokenType.Cite, handler: readPandocCite } ], writer: { priority: 14, write: (output, _mark, parent) => { const parentText = fragmentText(parent); if (fragmentText(parent).match(kInTextCiteRegex)) { output.writeInlines(parent); } else { const openCite = parent.cut(0, 1); const cite = parent.cut(1, parent.size - 1); const closeCite = parent.cut(parent.size - 1, parent.size); if (fragmentText(openCite) === "[" && fragmentText(closeCite) === "]") { output.writeRawMarkdown("["); output.withOption(kPreventBracketEscape, true, () => { output.writeInlines(cite); }); output.writeRawMarkdown("]"); } else if (parentText.match(kInTextCiteWithSuffixRegEx)) { let beginBracketPos = -1; let bracketLevel = 0; for (let i2 = parentText.length - 2; i2 >= 0; i2--) { const char2 = parentText.charAt(i2); if (char2 === "]") { bracketLevel++; } else if (char2 === "[") { if (bracketLevel > 0) { bracketLevel--; } else { beginBracketPos = i2; break; } } } if (beginBracketPos) { output.writeInlines(parent.cut(0, beginBracketPos)); output.writeRawMarkdown("["); output.writeInlines(parent.cut(beginBracketPos + 1, parentText.length - 1)); output.writeRawMarkdown("]"); } else { output.writeInlines(parent); } } else { output.writeInlines(parent); } } } } } }, { name: "cite_id", noSpelling: true, spec: { attrs: {}, inclusive: true, parseDOM: [ { tag: "span[class*='cite-id']", priority: 10 } ], toDOM() { return ["span", domAttrNoSpelling({ class: "cite-id pm-link-text-color pm-fixedwidth-font" })]; } }, pandoc: { readers: [], writer: { priority: 13, write: (output, _mark, parent) => { const idText = fragmentText(parent); if (idText.match(kInTextCiteRegex)) { const prefixMatch = idText.match(/^-?@/); if (prefixMatch) { output.writeRawMarkdown(prefixMatch.input); output.writeInlines(parent.cut(prefixMatch.input.length)); } else { output.writeInlines(parent); } } else { output.writeInlines(parent); } } } } } ], commands: () => { return [new InsertCitationCommand(ui2, context.events, bibliographyManager, context.server)]; }, appendTransaction: (schema2) => { return [{ name: "cite-id-join", append: (tr) => { const range2 = getMarkRange(tr.doc.resolve(tr.selection.head - 1), schema2.marks.cite_id); if (range2) { const text2 = tr.doc.textBetween(range2.from, tr.selection.$head.after()); const citeIdLen = citeIdLength(text2); const markLength = range2.to - range2.from; if (citeIdLen > markLength) { tr.addMark(range2.from, range2.from + citeIdLen, schema2.marks.cite_id.create()); } } return tr; } }]; }, fixups: (schema2) => { return [ (tr, fixupContext) => { if (fixupContext === FixupContext.Load) { const markType = schema2.marks.cite; const predicate = (node2) => { return node2.isTextblock && node2.type.allowsMarkType(markType) && node2.textContent.indexOf("@") !== -1; }; const markTr = new MarkTransaction(tr); findChildren_1(tr.doc, predicate).forEach((nodeWithPos) => { const { pos } = nodeWithPos; applyCiteMarks(markTr, nodeWithPos.node, pos); }); } return tr; } ]; }, appendMarkTransaction: (schema2) => { return [ { name: "cite-marks", filter: (node2, transactions) => { if (transactions.some((trans) => trans.steps.some((step2) => { if (step2 instanceof AddMarkStep) { return step2.mark.type === schema2.marks.cite_id; } else { return false; } }))) { return false; } else { return node2.isTextblock && node2.type.allowsMarkType(schema2.marks.cite); } }, append: (tr, node2, pos) => { splitInvalidatedMarks(tr, node2, pos, citeLength, schema2.marks.cite, (from2, to) => { tr.removeMark(from2, to, schema2.marks.cite); }); if (node2.textContent.indexOf("@") !== -1) { applyCiteMarks(tr, node2, pos); } } }, { name: "remove-cite-id-marks", filter: (node2) => node2.isTextblock && node2.type.allowsMarkType(schema2.marks.cite_id), append: (tr, node2, pos) => { splitInvalidatedMarks(tr, node2, pos, citeIdLength, schema2.marks.cite_id); } } ]; }, inputRules: (schema2) => { return [ citeIdInputRule(schema2), citeIdDashInputRule(schema2) ]; }, completionHandlers: () => [ citationDoiCompletionHandler(context.ui, bibliographyManager, context.server), citationCompletionHandler(context.ui, context.events, bibliographyManager, context.server, context.format) ], plugins: (schema2) => { return [ new Plugin({ key: new PluginKey("paste_cite_doi"), props: { handlePaste: handlePaste(ui2, bibliographyManager, context.server.pandoc) } }), citeHighlightPlugin(schema2), citeXrefPopupPlugin(schema2, ui2, context.server), citePopupPlugin(schema2, ui2, bibliographyManager, context.server) ]; } }; }; function handlePaste(ui2, bibManager, server) { return (view, _event, slice2) => { const schema2 = view.state.schema; if (markIsActive(view.state, schema2.marks.cite_id)) { const parsedDOI = doiFromSlice(view.state, slice2); if (parsedDOI) { const tr = pasteTransaction(view.state); const doiText = schema2.text(parsedDOI.token); tr.replaceSelectionWith(doiText, true); view.dispatch(tr); const source = bibManager.findDoiInLocalBibliography(parsedDOI.token); if (!source && bibManager.allowsWrites()) { insertCitation(view, parsedDOI.token, bibManager, parsedDOI.pos, ui2, server); } return true; } else { let text2 = ""; slice2.content.forEach((node2) => text2 = text2 + node2.textContent); if (text2.length > 0) { const tr = pasteTransaction(view.state); tr.replaceSelectionWith(schema2.text(text2)); view.dispatch(tr); return true; } else { return false; } } } else { return false; } }; } function citeIdInputRule(schema2) { return new InputRule(/@$/, (state, match2, start) => { if (!markIsActive(state, schema2.marks.cite_id)) { const { parent, parentOffset } = state.selection.$head; const text2 = match2[0] + parent.textContent.slice(parentOffset); const textBefore = parent.textContent.slice(0, parentOffset); if (textBefore.length && !textBefore.match(/[\xA0 \t\-[]$/)) { return null; } const citeIdLen = citeIdLength(text2); const tr = state.tr; tr.insertText(match2[0]); if (citeIdLen === 1 && textBefore.match(/\[-?$/) && text2[1] !== "]") { tr.insertText("]"); setTextSelection_1(tr.selection.head - 1)(tr); } if (citeIdLen) { const offset = textBefore.endsWith("-") ? 1 : 0; const citeStart = start - offset; const citeEnd = citeStart + citeIdLen + offset; tr.addMark(citeStart, citeEnd, schema2.marks.cite_id.create()); } return tr; } return null; }); } function citeIdDashInputRule(schema2) { return new InputRule(new RegExp(`-$`), (state, match2, start, end) => { if (state.doc.rangeHasMark(start + 1, end + 2, schema2.marks.cite_id)) { const tr = state.tr; tr.insertText(match2[0]); tr.addMark(start, start + 1, schema2.marks.cite_id.create()); return tr; } return null; }); } function readPandocCite(schema2) { return (writer, tok) => { const citeMark = schema2.marks.cite.create(); writer.openMark(citeMark); const writeCitation = (citation) => { writer.writeTokens(citation.citationPrefix); if (citation.citationPrefix.length) { writer.writeText(" "); } const suppress = citation.citationMode.t === "SuppressAuthor" ? "-" : ""; const citeIdMark = schema2.marks.cite_id.create(); writer.openMark(citeIdMark); writer.writeText(suppress + "@" + citation.citationId); writer.closeMark(citeIdMark); const inTextSuffix = citation.citationMode.t === "AuthorInText" && citation.citationSuffix.length; if (inTextSuffix) { writer.writeText(" ["); } writer.writeTokens(citation.citationSuffix); if (inTextSuffix) { writer.writeText("]"); } }; const citations = tok.c[kCiteCitationsIndex]; if (citations.length === 1 && citations[0].citationMode.t === "AuthorInText") { writeCitation(citations[0]); } else { writer.writeText("["); citations.forEach((citation, index2) => { if (index2 !== 0) { writer.writeText("; "); } writeCitation(citation); }); writer.writeText("]"); } writer.closeMark(citeMark); }; } const kCitationIdRegex = new RegExp(`(^\\[| )(${kCiteIdBasePattern})`, "g"); function encloseInCiteMark(tr, start, end) { const schema2 = tr.doc.type.schema; const mark = schema2.marks.cite.create(); tr.addMark(start, end, mark); const citeText = tr.doc.textBetween(start, end); kCitationIdRegex.lastIndex = 0; let match2 = kCitationIdRegex.exec(citeText); while (match2 !== null) { const pos = start + match2.index + match2[1].length; const idMark = schema2.marks.cite_id.create(); tr.addMark(pos, pos + match2[2].length, idMark); match2 = kCitationIdRegex.exec(citeText); } kCitationIdRegex.lastIndex = 0; return tr; } function citeLength(text2) { if (text2.match(kNoteCiteRegex) || text2.match(kInTextCiteRegex) || text2.match(kInTextCiteWithSuffixRegEx)) { return text2.length; } else { return 0; } } function citeIdLength(text2) { const match2 = text2.match(kCiteId); if (match2) { return match2[0].length; } else { return 0; } } const kFindInTextCiteRegex = new RegExp(kCiteIdBasePattern, "g"); const kFindInTextCiteWithSuffixRegex = new RegExp(kInTextCiteWithSuffixPattern, "g"); const kFindFullCiteRegex = new RegExp(kNoteCiteRegex.source, "g"); function applyCiteMarks(tr, node2, pos) { const schema2 = node2.type.schema; [kFindInTextCiteRegex, kFindFullCiteRegex, kFindInTextCiteWithSuffixRegex].forEach((re2) => { detectAndApplyMarks( tr, tr.doc.nodeAt(pos), pos, re2, schema2.marks.cite, () => ({}), (from2, to) => { return tr.doc.rangeHasMark(from2, to, schema2.marks.cite_id); } ); }); } function parseCitation(context) { const markType = context.doc.type.schema.marks.cite_id; const range2 = getMarkRange(context.doc.resolve(context.selection.head - 1), markType); if (range2) { const citeText = context.doc.textBetween(range2.from, context.selection.head); const nextChar = context.doc.textBetween(context.selection.head, context.selection.head + 1); if (!nextChar || [";", " ", "]"].includes(nextChar)) { const match2 = citeText.match(kCompletionCiteIdRegEx); if (match2) { const token2 = match2[2]; const pos = range2.from + match2.index + match2[1].length; return { token: token2, pos, offset: -match2[1].length }; } } } return null; } async function insertCitation(view, doi, bibManager, pos, ui2, server, csl, provider) { await bibManager.loadLocal(ui2, view.state.doc); const existingEntry = bibManager.findDoiInLocalBibliography(doi); if (existingEntry) { const tr = view.state.tr; performCiteCompletionReplacement(tr, tr.mapping.map(pos), existingEntry.id); view.dispatch(tr); } else { const existingIds = bibManager.localSources().map((source) => source.id); const citeProps = { doi, existingIds, bibliographyFiles: bibManager.writableBibliographyFiles(view.state.doc, ui2).map((writableFile) => writableFile.displayPath), provider, csl, citeUI: csl ? { suggestedId: csl.id || suggestCiteId$2(existingIds, csl), previewFields: formatForPreview(csl) } : void 0 }; const result = await ui2.dialogs.insertCite(citeProps); if (result && result.id.length) { if (!(result == null ? void 0 : result.csl.title)) { await ui2.dialogs.alert( ui2.context.translateText("Invalid Citation"), ui2.context.translateText( "This citation can't be added to the bibliography because it is missing required fields." ), kAlertTypeError ); } else { const writableBiblios = bibManager.writableBibliographyFiles(view.state.doc, ui2); const thisWritableBiblio = writableBiblios.find((writable) => writable.displayPath === result.bibliographyFile); const project = (thisWritableBiblio == null ? void 0 : thisWritableBiblio.isProject) || false; const writableBiblioPath = thisWritableBiblio ? thisWritableBiblio.fullPath : joinPaths(ui2.context.getDefaultResourceDir(), result.bibliographyFile); const bibliographyFile = { displayPath: result.bibliographyFile, fullPath: writableBiblioPath, isProject: project, writable: true }; const source = { ...result.csl, id: result.id, providerKey: provider || "" }; const tr = view.state.tr; const writeCiteId = await ensureSourcesInBibliography( tr, [source], bibliographyFile, bibManager, view, ui2, server ); if (writeCiteId) { const schema2 = view.state.schema; const idText = schema2.text(source.id, [schema2.marks.cite_id.create()]); performCiteCompletionReplacement(tr, tr.mapping.map(pos), idText); } view.dispatch(tr); } } view.focus(); } } async function ensureSourcesInBibliography(tr, sources, bibliographyFile, bibManager, view, ui2, server) { await bibManager.loadLocal(ui2, view.state.doc); const providers = uniqBy(sources, (source) => source.providerKey).map( (source) => source.providerKey ); const providersWithWarnings = providers.filter((prov) => bibManager.warningForProvider(prov)); const bibliographyFileExtension = getExtension(bibliographyFile.fullPath); const isBibTexBibliography = !["yaml", "yml", "json"].includes(bibliographyFileExtension); let proceedWithInsert = true; if (providersWithWarnings.length > 0 && ui2.prefs.zoteroUseBetterBibtex() && isBibTexBibliography) { const results = await Promise.all( providersWithWarnings.map(async (withWarning) => { const warning = bibManager.warningForProvider(withWarning); if (warning) { return await ui2.dialogs.yesNoMessage( ui2.context.translateText("Warning"), warning, kAlertTypeWarning, ui2.context.translateText("Insert Citation Anyway"), ui2.context.translateText("Cancel") ); } else { return true; } }) ); proceedWithInsert = results.every((result) => result); } if (proceedWithInsert) { await Promise.all( sources.map(async (source) => { if (source.id) { const cslToWrite = sanitizeForCiteproc(source); if (!bibManager.findIdInLocalBibliography(source.id)) { const sourceAsBibTex = isBibTexBibliography ? await bibManager.generateBibTeX(ui2, source.id, cslToWrite, source.providerKey) : void 0; await server.addToBibliography( bibliographyFile.fullPath, bibliographyFile.isProject, source.id, JSON.stringify([cslToWrite]), sourceAsBibTex || "", ui2.context.getDocumentPath() ); } if (!bibliographyFile.isProject) { ensureBibliographyFileForDoc(tr, bibliographyFile.displayPath); } } }) ); } return proceedWithInsert; } function performCiteCompletionReplacement(tr, pos, replacement) { performCompletionReplacement(tr, pos, replacement); const range2 = getMarkRange(tr.selection.$head, tr.doc.type.schema.marks.cite); if (range2) { encloseInCiteMark(tr, range2.from, range2.to); } } const extension$d = (context) => { const { pandocExtensions, ui: ui2 } = context; if (!pandocExtensions.bracketed_spans && !pandocExtensions.native_spans) { return null; } return { marks: [ { name: "span", spec: { attrs: pandocAttrSpec, inclusive: false, parseDOM: [ { tag: 'span[data-span="1"]', getAttrs(dom) { const attrs = { "data-span": 1 }; return { ...attrs, ...pandocAttrParseDom(dom, attrs) }; } } ], toDOM(mark) { const attr = { "data-span": "1", ...pandocAttrToDomAttr({ ...mark.attrs, classes: [...mark.attrs.classes, "pm-span pm-span-background-color"] }) }; return ["span", attr]; } }, pandoc: { readers: [ { token: PandocTokenType.Span, mark: "span", getAttrs: (tok) => { return pandocAttrReadAST(tok, kSpanAttr); }, getChildren: (tok) => tok.c[kSpanChildren] } ], writer: { priority: 12, write: (output, mark, parent) => { output.writeToken(PandocTokenType.Span, () => { output.writeAttr(mark.attrs.id, mark.attrs.classes, mark.attrs.keyvalue); output.writeArray(() => { output.writeInlines(parent); }); }); } } } } ], commands: () => { return [new SpanCommand(ui2)]; } }; }; class SpanCommand extends ProsemirrorCommand { constructor(ui2) { super(EditorCommandId.Span, [], (state, dispatch, view) => { const schema2 = state.schema; if (!markIsActive(state, schema2.marks.span) && state.selection.empty) { return false; } if (!state.selection.$from.node().type.allowsMarkType(schema2.marks.span)) { return false; } async function asyncEditSpan() { if (dispatch) { let attr = { id: null, classes: [], keyvalue: [] }; if (markIsActive(state, schema2.marks.span)) { attr = getMarkAttrs(state.doc, state.selection, schema2.marks.span); } const result = await ui2.dialogs.editSpan(attr); if (result) { const tr = state.tr; const range2 = getSelectionMarkRange(state.selection, schema2.marks.span); tr.removeMark(range2.from, range2.to, schema2.marks.span); if (result.action === "edit") { const mark = schema2.marks.span.create(result.attr); tr.addMark(range2.from, range2.to, mark); } dispatch(tr); } } if (view) { view.focus(); } } asyncEditSpan(); return true; }); } } const xrefPopup = ""; const kMaxWidth = 350; function xrefPopupPlugin(schema2, ui2, server) { return textPopupDecorationPlugin({ key: new PluginKey("xref-popup"), markType: schema2.marks.xref, maxWidth: kMaxWidth, dismissOnEdit: true, createPopup: async (_view, target2, style) => { const docPath = ui2.context.getDocumentPath(); if (docPath) { const kXRefRegEx = /^@ref\(([A-Za-z0-9:-]*)\)$/; const match2 = target2.text.match(kXRefRegEx); if (match2 && match2[1].length) { await ui2.context.withSavedDocument(); const xrefs = await server.xref.xrefForId(docPath, match2[1]); if (xrefs.refs.length) { const xref = xrefs.refs[0]; const onClick = () => { const file = xrefs.baseDir + "/" + xref.file; ui2.display.navigateToXRef(file, xref); }; return /* @__PURE__ */ React.createElement(XRefPopup, { xref, onClick, style }); } } } return null; }, specKey: (target2) => { return `xref:${target2.text}`; } }); } const XRefPopup = (props) => { return /* @__PURE__ */ React.createElement(Popup, { classes: ["pm-xref-popup"], style: props.style }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement( LinkButton, { text: xrefKey(props.xref), onClick: props.onClick, maxWidth: kMaxWidth - 20, classes: ["pm-xref-popup-key pm-fixedwidth-font"] } )), /* @__PURE__ */ React.createElement("div", { className: "pm-xref-popup-file" }, props.xref.file)); }; const searchFields = [ { name: "key", weight: 50 }, { name: "title", weight: 30 } ]; function xrefIndex(entries) { const options = { isCaseSensitive: false, shouldSort: true, includeMatches: false, includeScore: false, minMatchCharLength: 2, threshold: 0.3, keys: searchFields }; const index2 = Fuse.createIndex(searchFields.map((searchField) => searchField.name), entries.map((entry) => { return { key: xrefKey(entry, "quarto"), ...entry }; })); const fuse = new Fuse(entries, options, index2); return { search: (searchTerm, limit) => { const results = fuse.search(searchTerm, { ...options, limit }); return results.map((result) => result.item); } }; } const insert_xrefStyles = ""; let lastSelectedStyleIndex = 0; const kXrefSearchBoxHeight = 30; const kStyleDefault = "Default"; const kStyleCustom = "Custom"; const kStyleCapital = "Capitalize"; const kStyleNone = "(None)"; const kXRefStyles = [ { key: kStyleDefault, fn: (key2) => { return `@${key2}`; } }, { key: kStyleCapital, fn: (key2) => { return `@${key2.charAt(0).toUpperCase() + key2.slice(1)}`; } }, { key: kStyleCustom, fn: (key2) => { return `@${key2}`; } }, { key: kStyleNone, fn: (key2) => { return `-@${key2}`; } } ]; const kTheoremTypes = ["thm", "lem", "cor", "prp", "cnj", "def", "exm", "exr"]; const kSecType = "sec"; const kFigType = "fig"; const kTableType = "tbl"; const kEquationType = "eq"; const kListingtype = "lst"; const xRefTypes = [ { type: "All Types", prefix: [kSecType, kFigType, kTableType, kEquationType, kListingtype, ...kTheoremTypes], image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_all; } }, { type: "Sections", prefix: [kSecType], image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_section; } }, { type: "Figures", prefix: [kFigType], image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_figure; } }, { type: "Tables", prefix: [kTableType], image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_table; } }, { type: "Equations", prefix: [kEquationType], image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_equation; } }, { type: "Listings", prefix: [kListingtype], image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_listing; } }, { type: "Theorems", prefix: kTheoremTypes, image: (ui2) => { var _a; return (_a = ui2.images.xrefs) == null ? void 0 : _a.type_theorem; } } ]; async function insertXref(ui2, doc2, server, onInsertXref) { await ui2.dialogs.htmlDialog( "Insert Cross Reference", "Insert", (containerWidth, containerHeight, confirm, cancel, _showProgress, _hideProgress, themed) => { const kMaxHeight = 400; const kMaxWidth2 = 650; const kMaxHeightProportion = 0.9; const kdialogPaddingIncludingButtons = 70; const windowHeight = containerHeight; const windowWidth = containerWidth; const height = Math.min(kMaxHeight, windowHeight * kMaxHeightProportion) - kdialogPaddingIncludingButtons; const width = Math.max(Math.min(kMaxWidth2, windowWidth * 0.9), 550); const container = window.document.createElement("div"); if (!themed) { container.className = "pm-default-theme"; } container.style.width = width + "px"; container.style.height = height + 75 + "px"; const root2 = createRoot(container); const docPath = ui2.context.getDocumentPath() || ""; const loadXRefs = async () => { if (docPath) { await ui2.context.withSavedDocument(); return (await server.xref.quartoIndexForFile(docPath)).refs; } else { return []; } }; const onCancel = () => { root2.unmount(); cancel(); }; const onInsert = (xref, style, prefix2) => { onInsertXref(style.fn(xrefKey(xref, "quarto")), prefix2); root2.unmount(); confirm(); }; root2.render( /* @__PURE__ */ React.createElement( InsertXrefPanel, { height, width, themed: !!themed, styleIndex: lastSelectedStyleIndex, onOk: onInsert, onCancel, doc: doc2, ui: ui2, loadXRefs } ) ); return container; }, () => { }, () => { return null; } ); } const InsertXrefPanel = (props) => { const [xrefs, setXrefs] = React.useState(); const [selectedXRefIndex, setSelectedXRefIndex] = React.useState(0); const [selectedTypeIndex, setSelectedTypeIndex] = React.useState(0); const [selectedStyleIndex, setSelectedStyleIndex] = React.useState(props.styleIndex); const [filterText, setFilterText] = React.useState(""); const textRef = React.useRef(null); const fixedList = React.useRef(null); const styleSelectRef = React.useRef(null); const prefixRef = React.useRef(null); React.useEffect(() => { var _a, _b; const option = (_a = styleSelectRef.current) == null ? void 0 : _a.options[selectedStyleIndex]; const key2 = (option == null ? void 0 : option.value) || ""; if (key2 === kStyleCustom) { (_b = prefixRef.current) == null ? void 0 : _b.focus(); } }, [selectedStyleIndex]); React.useEffect(() => { props.loadXRefs().then((values) => { const sorted = values.sort((a2, b2) => { const typeOrder = a2.type.localeCompare(b2.type); if (typeOrder !== 0) { return typeOrder; } else { return a2.id.localeCompare(b2.id); } }); const unique = uniqBy(sorted, (xref) => { return `${xref.type}-${xref.id}${xref.suffix}`; }); setXrefs(unique); }); window.setTimeout(() => { var _a; (_a = textRef.current) == null ? void 0 : _a.focus(); if (styleSelectRef.current) { styleSelectRef.current.selectedIndex = lastSelectedStyleIndex; } }); }, []); const styleOptions = kXRefStyles.map((style) => /* @__PURE__ */ React.createElement("option", { key: style.key, value: style.key }, props.ui.context.translateText(style.key))); const filterXrefs = () => { if (!xrefs) { return []; } let filtered = xrefs; if (selectedTypeIndex !== 0) { filtered = filtered.filter((xref) => xRefTypes[selectedTypeIndex].prefix.includes(xref.type)); } if (filterText) { const search2 = xrefIndex(filtered); filtered = search2.search(filterText, 1e3); } return filtered; }; const filteredXrefs = filterXrefs(); const typeNodes = xRefTypes.map((type2) => { return { key: type2.type, image: type2.image(props.ui), name: type2.type, type: type2.type, children: [], expanded: true }; }); const selectedNode = typeNodes[selectedTypeIndex]; const currentIndex = Math.min(selectedXRefIndex, filteredXrefs.length - 1); const incrementIndex = (increment) => { var _a; let newIndex = currentIndex; if (increment > 0) { newIndex = Math.min(currentIndex + increment, filteredXrefs.length - 1); } else { newIndex = Math.max(currentIndex + increment, 0); } if (newIndex !== currentIndex) { setSelectedXRefIndex(newIndex); (_a = fixedList.current) == null ? void 0 : _a.scrollToItem(newIndex); } }; const currentStyle = () => { var _a; const option = (_a = styleSelectRef.current) == null ? void 0 : _a.options[selectedStyleIndex]; const key2 = (option == null ? void 0 : option.value) || ""; return kXRefStyles.find((style) => style.key === key2) || kXRefStyles[0]; }; const currentPrefix = () => { var _a; return ((_a = prefixRef.current) == null ? void 0 : _a.value) || void 0; }; const placeholderText = () => { if (xrefs === void 0) { return props.ui.context.translateText("Loading Cross References"); } return props.ui.context.translateText("No Matching Cross References Found."); }; const insertItem = (index2) => { var _a; const xref = filteredXrefs[index2]; const style = currentStyle(); const prefix2 = style.key === kStyleCustom ? currentPrefix() : void 0; if (xref === void 0) { props.ui.dialogs.alert( props.ui.context.translateText("Validation Error"), props.ui.context.translateText("Please select a cross reference to insert."), kAlertTypeError ); } else if (style.key === kStyleCustom && !prefix2) { props.ui.dialogs.alert( props.ui.context.translateText("Validation Error"), props.ui.context.translateText("Please enter a custom prefix for this reference."), kAlertTypeError ).then(() => { var _a2; (_a2 = prefixRef.current) == null ? void 0 : _a2.focus(); }); } else { lastSelectedStyleIndex = ((_a = styleSelectRef.current) == null ? void 0 : _a.selectedIndex) || 0; props.onOk(xref, style, prefix2); } }; const memoizedTextFilter = React.useCallback( lodash_debounce( (txt) => { setFilterText(txt); }, 30 ), [] ); const kPageSize = 5; const handleKeyboardEvent = (event) => { switch (event.key) { case "ArrowUp": incrementIndex(-1); event.preventDefault(); break; case "ArrowDown": incrementIndex(1); event.preventDefault(); break; case "PageUp": incrementIndex(-kPageSize); event.preventDefault(); break; case "PageDown": incrementIndex(kPageSize); event.preventDefault(); break; case "Enter": acceptSelected(); event.preventDefault(); break; case "Escape": props.onCancel(); event.preventDefault(); break; } }; const handleItemClicked = (index2) => { setSelectedXRefIndex(index2); }; const handleItemDoubleClicked = (index2) => { insertItem(index2); }; const acceptSelected = () => { insertItem(currentIndex); }; const handleTextChange = (event) => { memoizedTextFilter(event == null ? void 0 : event.target.value); }; const handleStyleChanged = (event) => { const index2 = event.target.selectedOptions[0].index; setSelectedStyleIndex(index2); }; const handleNodeSelected = (node2) => { setSelectedTypeIndex(xRefTypes.findIndex((type2) => type2.type === node2.key)); }; const classes = ["pm-insert-xref-container"]; if (!props.themed) { classes.push("pm-default-theme"); } return /* @__PURE__ */ React.createElement("div", { className: "pm-insert-xref" }, /* @__PURE__ */ React.createElement("div", { className: classes.join(" ") }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-xref-type-container pm-block-border-color pm-background-color" }, /* @__PURE__ */ React.createElement( NavigationTree, { height: props.height + kXrefSearchBoxHeight, nodes: typeNodes, selectedNode, onSelectedNodeChanged: handleNodeSelected } )), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-xref-list-container" }, /* @__PURE__ */ React.createElement( TextInput, { onKeyDown: handleKeyboardEvent, width: 20 + "ch", iconAdornment: props.ui.images.search, tabIndex: 0, className: "pm-insert-xref-search-textbox", placeholder: props.ui.context.translateText("Search for Cross Reference"), onChange: handleTextChange, ref: textRef } ), filteredXrefs && filteredXrefs.length > 0 ? /* @__PURE__ */ React.createElement( "div", { onKeyDown: handleKeyboardEvent, tabIndex: 0 }, /* @__PURE__ */ React.createElement( FixedSizeList, { className: "pm-insert-xref-list pm-block-border-color pm-background-color", height: props.height, width: "100%", itemCount: filteredXrefs.length, itemSize: 66, itemData: { xrefs: filteredXrefs, selectedIndex: currentIndex, ui: props.ui, onclick: handleItemClicked, ondoubleclick: handleItemDoubleClicked }, ref: fixedList }, XRefItem ) ) : /* @__PURE__ */ React.createElement( "div", { className: "pm-insert-xref-list-placeholder pm-block-border-color pm-background-color", style: { height: props.height + "px" } }, /* @__PURE__ */ React.createElement("div", null, placeholderText()) ))), /* @__PURE__ */ React.createElement("div", { className: "pm-insert-xref-insert-options" }, /* @__PURE__ */ React.createElement("div", { className: "pm-insert-xref-prefix" }, /* @__PURE__ */ React.createElement("div", null, [props.ui.context.translateText("Prefix")]), /* @__PURE__ */ React.createElement( SelectInput, { tabIndex: 0, ref: styleSelectRef, className: "pm-insert-xref-select-style", onChange: handleStyleChanged }, styleOptions ), kXRefStyles[selectedStyleIndex].key === kStyleCustom ? /* @__PURE__ */ React.createElement( TextInput, { width: 20 + "ch", tabIndex: 0, className: "pm-insert-xref-custom-prefix", placeholder: props.ui.context.translateText("Enter Prefix"), ref: prefixRef } ) : null), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement( DialogButtons, { okLabel: props.ui.context.translateText("Insert"), cancelLabel: props.ui.context.translateText("Cancel"), onOk: acceptSelected, onCancel: props.onCancel } )))); }; const XRefItem = (props) => { const thisXref = props.data.xrefs[props.index]; const type2 = kQuartoXRefTypes[thisXref.type]; const id2 = xrefKey(thisXref, "quarto"); const primaryText = `@${id2}`; const secondaryText = thisXref.file; const detailText = thisXref.title || ""; const image2 = (type2 == null ? void 0 : type2.image(props.data.ui)) || props.data.ui.images.omni_insert.generic; const onItemClick = () => { props.data.onclick(props.index); }; const onItemDoubleClick = () => { props.data.ondoubleclick(props.index); }; const selected = props.data.selectedIndex === props.index; const selectedClassName = `pm-xref-item${selected ? " pm-list-item-selected" : ""}`; return /* @__PURE__ */ React.createElement("div", { key: thisXref.id, style: props.style, className: selectedClassName, onClick: onItemClick, onDoubleClick: onItemDoubleClick }, /* @__PURE__ */ React.createElement("div", { className: `pm-xref-item-image-container ${thisXref.type}` }, /* @__PURE__ */ React.createElement("img", { src: image2, className: "pm-xref-item-image pm-border-color", draggable: "false" })), /* @__PURE__ */ React.createElement("div", { className: "pm-xref-item-body pm-text-color" }, /* @__PURE__ */ React.createElement("div", { className: "pm-xref-item-title" }, /* @__PURE__ */ React.createElement("div", { className: "pm-xref-item-primary pm-fixedwidth-font" }, primaryText), /* @__PURE__ */ React.createElement("div", { className: "pm-xref-item-secondary" }, secondaryText)), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "pm-xref-item-detail" }, detailText)))); }; const kRefRegExDetectAndApply = /(?:^|[^`])(\\?@ref\([ A-Za-z0-9:-]*\))/g; const extension$c = (context) => { const { pandocExtensions, format: format2, ui: ui2, server } = context; if (!format2.rmdExtensions.bookdownXRef) { return null; } return { marks: [ { name: "xref", noInputRules: true, noSpelling: true, spec: { inclusive: false, excludes: "formatting", attrs: {}, parseDOM: [ { tag: "span[class*='xref']" } ], toDOM() { return ["span", domAttrNoSpelling({ class: "xref pm-link-text-color pm-fixedwidth-font" })]; } }, pandoc: { readers: [], writer: { priority: 1, write: (output, _mark, parent) => { let xref = parent; if (fragmentText(xref).startsWith("\\")) { xref = xref.cut(1, xref.size); } if (!pandocExtensions.all_symbols_escapable) { output.writeRawMarkdown("\\"); } output.writeInlines(xref); } } } } ], fixups: (schema2) => { return [ (tr, fixupContext) => { if (fixupContext === FixupContext.Load) { const markType = schema2.marks.xref; const predicate = (node2) => { return node2.isTextblock && node2.type.allowsMarkType(markType); }; const markTr = new MarkTransaction(tr); findChildren_1(tr.doc, predicate).forEach((nodeWithPos) => { const { pos } = nodeWithPos; detectAndApplyMarks( markTr, tr.doc.nodeAt(pos), pos, kRefRegExDetectAndApply, markType, () => ({}), () => true, (match2) => match2[1] ); }); trTransform(tr, stripRefBackslashTransform); } return tr; } ]; }, appendMarkTransaction: () => { return [ { name: "xref-marks", filter: (node2) => node2.isTextblock && node2.type.allowsMarkType(node2.type.schema.marks.xref), append: (tr, node2, pos) => { removeInvalidatedMarks(tr, node2, pos, kRefRegExDetectAndApply, node2.type.schema.marks.xref); detectAndApplyMarks( tr, tr.doc.nodeAt(pos), pos, kRefRegExDetectAndApply, node2.type.schema.marks.xref, () => ({}), () => true, (match2) => match2[1] ); } } ]; }, inputRules: () => { return [atRefInputRule(), ...format2.rmdExtensions.bookdownXRefUI ? [refPrefixInputRule()] : []]; }, plugins: (schema2) => [xrefPopupPlugin(schema2, ui2, server)], completionHandlers: () => format2.rmdExtensions.bookdownXRefUI ? [xrefCompletionHandler(ui2, server.xref)] : [], commands: (schema2) => { if (format2.rmdExtensions.bookdownXRefUI) { return [ new ProsemirrorCommand( EditorCommandId.CrossReference, [], (state, dispatch) => { if (!canInsertNode(state, schema2.nodes.text) || !toggleMarkType(schema2.marks.xref)(state)) { return false; } if (dispatch) { const tr = state.tr; insertRef(tr); dispatch(tr); } return true; }, { name: ui2.context.translateText("Cross Reference"), description: ui2.context.translateText("Reference to related content"), group: OmniInsertGroup.References, priority: 0, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.cross_reference_dark : ui2.images.omni_insert.cross_reference } ) ]; } else if (format2.docTypes.includes(kQuartoDocType) && pandocExtensions.citations) { return [ new ProsemirrorCommand( EditorCommandId.CrossReference, ["Shift-Mod-F10"], (state, dispatch, view) => { if (!canInsertNode(state, schema2.nodes.text) || !toggleMarkType(schema2.marks.cite_id)(state)) { return false; } if (dispatch) { insertXref(ui2, state.doc, server, (key2, prefix2) => { const tr = state.tr; const xref = schema2.text(key2, [schema2.marks.cite_id.create()]); if (prefix2 !== void 0 || key2.startsWith("-")) { const start = tr.selection.from; const wrapperText = schema2.text("[]"); tr.replaceSelectionWith(wrapperText); setTextSelection_1(tr.selection.from - 1)(tr); if (prefix2 !== void 0) { tr.insertText(`${prefix2} `, tr.selection.from); } tr.insert(tr.selection.from, xref); const citeMark = schema2.marks.cite.create(); tr.addMark(start, tr.selection.from + 1, citeMark); setTextSelection_1(tr.selection.from + 1)(tr); dispatch(tr); } else { tr.replaceSelectionWith(xref, false); setTextSelection_1(tr.selection.from)(tr); dispatch(tr); } }).then(() => { view == null ? void 0 : view.focus(); }); } return true; }, { name: ui2.context.translateText("Cross Reference"), description: ui2.context.translateText("Reference to related content"), group: OmniInsertGroup.References, priority: 0, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.cross_reference_dark : ui2.images.omni_insert.cross_reference } ) ]; } else { return []; } } }; }; function atRefInputRule() { return new InputRule(/(^|[^`])(\\?@ref\()$/, (state, match2, start, end) => { const kRefLen = 4; const { parent, parentOffset } = state.selection.$head; const before = parent.textContent.slice(parentOffset - kRefLen, parentOffset); const after = parent.textContent.slice(parentOffset); const potentialXRef = before + "(" + after; if (/^@ref\([A-Za-z0-9:-]*\).*$/.test(potentialXRef)) { return null; } const tr = state.tr; tr.delete(start + match2[1].length, end); insertRef(tr); return tr; }); } function refPrefixInputRule() { return new InputRule( /(^|[^`])(Chapter|Chapters|Appendix|Section|Figure|Table|Equation) $/, (state, match2) => { const tr = state.tr; tr.insertText(" "); let prefix2 = ""; if (match2[2] === "Figure") { prefix2 = "fig:"; } else if (match2[2] === "Table") { prefix2 = "tab:"; } else if (match2[2] === "Equation") { prefix2 = "eq:"; } insertRef(tr, prefix2); setTextSelection_1(tr.selection.head - 1)(tr); return tr; } ); } function insertRef(tr, prefix2 = "") { const schema2 = tr.doc.type.schema; const selection = tr.selection; const refText = `@ref(${prefix2})`; tr.replaceSelectionWith(schema2.text(refText, [schema2.marks.xref.create()]), false); setTextSelection_1(tr.mapping.map(selection.head) - 1)(tr); } function stripRefBackslashTransform(tr) { const markType = tr.doc.type.schema.marks.xref; findChildrenByMark_1(tr.doc, markType).forEach((markedNode) => { const pos = tr.mapping.map(markedNode.pos); if (markType.isInSet(markedNode.node.marks)) { const markRange = getMarkRange(tr.doc.resolve(pos), markType); if (markRange) { const text2 = tr.doc.textBetween(markRange.from, markRange.to); if (text2.startsWith("\\")) { tr.deleteRange(markRange.from, markRange.from + 1); } } } }); } const raw_html_commentStyles = ""; const kHTMLEditingCommentRegEx = /^<!--# ([\s\S]*?)-->$/; const extension$b = (context) => { const { options, ui: ui2 } = context; return { marks: [ { name: "raw_html_comment", noInputRules: true, noSpelling: true, spec: { attrs: { editing: { default: false }, format: { default: false } }, inclusive: false, excludes: "formatting", parseDOM: [ { tag: "span[class*='raw-html-comment']", getAttrs(dom) { const el2 = dom; return { editing: el2.getAttribute("data-editing") === "1", format: el2.getAttribute("data-format") === "1" }; } } ], toDOM(mark) { const attr = { class: "raw-html-comment pm-fixedwidth-font " + (mark.attrs.editing ? "pm-comment-color pm-comment-background-color" : "pm-light-text-color") + (mark.attrs.format && options.hideFormatComment ? " pm-comment-hidden" : ""), "data-editing": mark.attrs.editing ? "1" : "0", "data-format": mark.attrs.format ? "1" : "0" }; return ["span", domAttrNoSpelling(attr)]; } }, pandoc: { readers: [], inlineHTMLReader: (schema2, html2, writer) => { const isComment = isHTMLComment(html2); if (!isComment) { return false; } if (writer) { const mark = schema2.marks.raw_html_comment.create(commentMarkAttribs(html2)); writer.openMark(mark); writer.writeText(html2); writer.closeMark(mark); } return isComment; }, writer: { priority: 1, write: (output, _mark, parent) => { output.writeRawMarkdown(parent); } } } } ], appendMarkTransaction: (schema2) => { const markType = schema2.marks.raw_html_comment; const kHTMLCommentMarkRegEx = new RegExp(kHTMLCommentRegEx.source, "g"); return [ { name: "html-editing-comment-marks", filter: (node2) => node2.isTextblock && node2.type.allowsMarkType(markType), append: (tr, node2, pos) => { removeInvalidatedMarks(tr, node2, pos, kHTMLCommentRegEx, markType); detectAndApplyMarks( tr, tr.doc.nodeAt(pos), pos, kHTMLCommentMarkRegEx, markType, (match2) => commentMarkAttribs(match2[1]), () => true, (match2) => match2[1] ); } } ]; }, commands: (schema2) => { return !options.commenting ? [new InsertHTMLCommentCommand(schema2, ui2)] : []; } }; }; class InsertHTMLCommentCommand extends ProsemirrorCommand { constructor(schema2, ui2) { super( EditorCommandId.HTMLComment, ["Shift-Mod-c"], (state, dispatch) => { if (!canInsertNode(state, schema2.nodes.text)) { return false; } if (!toggleMarkType(schema2.marks.raw_html)(state)) { return false; } if (state.doc.rangeHasMark(state.selection.to, state.selection.to + 1, schema2.marks.raw_html)) { return false; } if (dispatch) { const tr = state.tr; setTextSelection_1(tr.selection.to)(tr); const { parent, parentOffset } = tr.selection.$to; const charBefore = parent.textContent.slice(parentOffset - 1, parentOffset); if (charBefore.length && charBefore !== " ") { tr.insertText(" "); } const comment2 = "<!--# -->"; const mark = schema2.marks.raw_html_comment.create({ editing: true }); tr.insert(tr.selection.to, schema2.text(comment2, [mark])); tr.setSelection(new TextSelection(tr.doc.resolve(tr.selection.to - (comment2.length / 2 - 1)))); dispatch(tr); } return true; }, { name: ui2.context.translateText("Comment"), description: ui2.context.translateText("Editing comment"), group: OmniInsertGroup.Content, priority: 3, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.comment_dark : ui2.images.omni_insert.comment } ); } } function commentMarkAttribs(comment2) { return { editing: !!comment2.match(kHTMLEditingCommentRegEx), format: !!matchPandocFormatComment(comment2) }; } const extension$a = (context) => { const { format: format2 } = context; if (!format2.hugoExtensions.shortcodes) { return null; } return { marks: [ { name: "shortcode", noInputRules: true, noSpelling: true, spec: { inclusive: false, excludes: "formatting", attrs: {}, parseDOM: [ { tag: "span[class*='shortcode']" } ], toDOM() { return ["span", domAttrNoSpelling({ class: "shortcode pm-markup-text-color pm-fixedwidth-font" })]; } }, pandoc: { readers: [], writer: { priority: 1, write: (output, _mark, parent) => { output.writeRawMarkdown(parent); } } } } ], fixups: (schema2) => { return [ (tr, fixupContext) => { if (fixupContext === FixupContext.Load) { const markType = schema2.marks.shortcode; const predicate = (node2) => { return node2.isTextblock && node2.type.allowsMarkType(markType); }; const markTr = new MarkTransaction(tr); findChildren_1(tr.doc, predicate).forEach((nodeWithPos) => { const { pos } = nodeWithPos; detectAndCreateShortcodes(schema2, markTr, pos); }); } return tr; } ]; }, appendMarkTransaction: () => { return [ { name: "shortcode-marks", filter: (node2) => node2.isTextblock && node2.type.allowsMarkType(node2.type.schema.marks.shortcode), append: (tr, node2, pos) => { removeInvalidatedMarks(tr, node2, pos, kShortcodeRegEx, node2.type.schema.marks.shortcode); detectAndCreateShortcodes(node2.type.schema, tr, pos); } } ]; } }; }; function detectAndCreateShortcodes(schema2, tr, pos) { detectAndApplyMarks( tr, tr.doc.nodeAt(pos), pos, kShortcodeRegEx, schema2.marks.shortcode, () => ({}), () => true, (match2) => match2[1] ); } const key$3 = new PluginKey("footnote-editor-activate"); function footnoteEditorActivationPlugin() { return new Plugin({ key: key$3, state: { init() { return DecorationSet.empty; }, apply(tr, set2, oldState, newState) { if (selectedFootnote(newState.selection) || selectedNote(newState.selection)) { if (oldState.selection.$head.node() === newState.selection.$head.node()) { return set2.map(tr.mapping, tr.doc); } else { return footnoteEditorDecorations(newState); } } else { return DecorationSet.empty; } } }, props: { decorations(state) { return key$3.getState(state); } }, view: () => ({ update: (view) => { const note = selectedNote(view.state.selection); if (note) { const footnote = findFootnoteNode(view.state.doc, note.node.attrs.ref); if (footnote) { scrollIntoView(view, footnote.pos, false, 0, 30); } } } }) }); } function footnoteEditorDecorations(state) { const schema2 = state.schema; let footnoteNode = selectedFootnote(state.selection); let noteNode = selectedNote(state.selection); if (footnoteNode || noteNode) { const bodyNode = findChildrenByType_1(state.doc, schema2.nodes.body)[0]; const notesNode = findChildrenByType_1(state.doc, schema2.nodes.notes)[0]; if (footnoteNode) { const ref = footnoteNode.node.attrs.ref; const matching = findChildren_1(notesNode.node, (node2) => node2.attrs.ref === ref); if (matching.length) { noteNode = matching[0]; noteNode.pos = notesNode.pos + 1 + noteNode.pos; } } else if (noteNode) { const ref = noteNode.node.attrs.ref; const matching = findChildren_1( state.doc, (node2) => node2.type === schema2.nodes.footnote && node2.attrs.ref === ref, true ); if (matching.length) { footnoteNode = matching[0]; } } if (footnoteNode && noteNode) { return DecorationSet.create(state.doc, [ nodeDecoration(noteNode, { class: "active" }), nodeDecoration(footnoteNode, { class: "active pm-selected-node-outline-color" }), nodeDecoration(bodyNode, { class: "editing-footnote pm-pane-border-color" }), nodeDecoration(notesNode, { class: "editing-footnote pm-pane-border-color" }) ]); } else { return DecorationSet.empty; } } else { return DecorationSet.empty; } } function footnoteEditorNodeViews() { return { note(node2) { return new NoteEditorView(node2); } }; } class NoteEditorView { constructor(node2) { __publicField(this, "dom"); __publicField(this, "contentDOM"); __publicField(this, "node"); this.node = node2; this.dom = window.document.createElement("div"); this.dom.setAttribute("data-ref", this.node.attrs.ref); this.dom.classList.add("note"); const label = window.document.createElement("div"); label.classList.add("note-label"); label.contentEditable = "false"; label.innerHTML = `<p>${this.node.attrs.number}:</p>`; this.dom.appendChild(label); const content = window.document.createElement("div"); content.classList.add("note-content"); this.contentDOM = content; this.dom.appendChild(content); } } function footnoteEditorKeyDownHandler() { return (view, event) => { const schema2 = view.state.schema; const selection = view.state.selection; const noteNode = findParentNodeOfType_1(schema2.nodes.note)(selection); if (!noteNode) { return false; } const selectFootnote = (before = true) => { const footnoteNode = findFootnoteNode(view.state.doc, noteNode.node.attrs.ref); if (footnoteNode) { const tr = view.state.tr; tr.setSelection(TextSelection.near(tr.doc.resolve(footnoteNode.pos + (before ? 0 : 1)))); view.dispatch(tr); } }; if (event.key === "Escape") { selectFootnote(); return true; } const firstTextBlock = firstNode(noteNode, (node2) => node2.isTextblock); const lastTextBlock = lastNode(noteNode, (node2) => node2.isTextblock); if (!firstTextBlock && !lastTextBlock) { return false; } if (firstTextBlock) { if (selectionIsWithin(selection, firstTextBlock)) { switch (event.key) { case "ArrowLeft": if (selection.anchor === firstTextBlock.pos + 1) { selectFootnote(true); return true; } break; case "ArrowUp": { if (view.endOfTextblock("up")) { selectFootnote(true); return true; } break; } } } } if (lastTextBlock) { if (selectionIsWithin(selection, lastTextBlock)) { switch (event.key) { case "ArrowRight": if (selection.anchor === lastTextBlock.pos + lastTextBlock.node.nodeSize - 1) { selectFootnote(false); return true; } break; case "ArrowDown": { if (view.endOfTextblock("down")) { selectFootnote(false); return true; } break; } } } } return false; }; } function footnoteFilterTransaction() { return (tr, state) => { const noteWithPos = selectedNote(tr.selection); if (noteWithPos && findChildrenByType_1(noteWithPos.node, state.schema.nodes.footnote).length) { return false; } return true; }; } function footnoteAppendTransaction() { const footnoteChange = (node2) => { const schema2 = node2.type.schema; return node2.type === schema2.nodes.footnote || node2.type === schema2.nodes.note; }; return { name: "footnote-renumber", nodeFilter: footnoteChange, append: (tr) => { const schema2 = tr.doc.type.schema; const activeNote = findParentNodeOfType_1(schema2.nodes.note)(tr.selection); trTransform(tr, footnoteFixupTransform(activeNote)); } }; } function footnoteFixupTransform(activeNote) { return (tr) => { const schema2 = tr.doc.type.schema; const footnotes = findAllFootnotes(tr.doc); const allNotes = findAllNotes(tr.doc); const refs = /* @__PURE__ */ new Set(); footnotes.forEach((footnote, index2) => { footnote.pos = tr.mapping.map(footnote.pos); const number = index2 + 1; let { ref, content } = footnote.node.attrs; let newNote; const note = allNotes.find((noteWithPos) => noteWithPos.node.attrs.ref === ref); if (note) { note.pos = tr.mapping.map(note.pos); if (activeNote && activeNote.node.attrs.ref === ref) { content = JSON.stringify(note.node.content.toJSON()); } if (refs.has(ref)) { ref = uuidv4(); newNote = schema2.nodes.note.createAndFill({ ref, number }, note.node.content); } else { if (note.node.attrs.number !== number) { tr.setNodeMarkup(note.pos, schema2.nodes.note, { ...note.node.attrs, number }); } } } else if (content) { newNote = schema2.nodes.note.createAndFill({ ref, number }, Fragment.fromJSON(schema2, JSON.parse(content))); } if (newNote) { const notesContainer = findNotesContainer(tr.doc); tr.insert(notesContainer.pos + 1, newNote); } refs.add(ref); const attrs = footnote.node.attrs; if (ref !== attrs.ref || content !== attrs.content || number !== attrs.number) { tr.setNodeMarkup(footnote.pos, schema2.nodes.footnote, { ...footnote.node.attrs, ref, content, number }); } }); for (let i2 = allNotes.length - 1; i2 >= 0; i2--) { const note = allNotes[i2]; note.pos = tr.mapping.map(note.pos); const footnote = footnotes.find((fn) => fn.node.attrs.ref === note.node.attrs.ref); if (!footnote) { tr.delete(note.pos, note.pos + note.node.nodeSize); } } }; } function footnoteSelectNoteAppendTransaction() { return (_transactions, _oldState, newState) => { const schema2 = newState.schema; const footnoteNode = findSelectedNodeOfType(schema2.nodes.footnote, newState.selection); if (footnoteNode) { const tr = newState.tr; const ref = footnoteNode.node.attrs.ref; const noteNode = findNoteNode(tr.doc, ref); if (noteNode) { tr.setSelection(TextSelection.near(tr.doc.resolve(noteNode.pos))); } return tr; } else { return void 0; } }; } function findAllFootnotes(doc2) { const schema2 = doc2.type.schema; return findChildrenByType_1(doc2, schema2.nodes.footnote, true); } function findAllNotes(doc2) { const schema2 = doc2.type.schema; const notesContainer = findNotesContainer(doc2); const offset = notesContainer.pos + 1; const notes = findChildrenByType_1(notesContainer.node, schema2.nodes.note, false); return notes.map((note) => ({ ...note, pos: note.pos + offset })); } function findNotesContainer(doc2) { return findChildrenByType_1(doc2, doc2.type.schema.nodes.notes, false)[0]; } const footnoteStyles = ""; const plugin$1 = new PluginKey("footnote"); const extension$9 = (context) => { const { pandocExtensions, ui: ui2 } = context; if (!pandocExtensions.footnotes) { return null; } return { nodes: [ { name: "footnote", spec: { inline: true, attrs: { number: { default: 1 }, ref: {}, content: { default: "" } }, group: "inline", parseDOM: [ { tag: "span[class*='footnote']", getAttrs(dom) { const el2 = dom; return { ref: el2.getAttribute("data-ref"), content: el2.getAttribute("data-content") }; } } ], toDOM(node2) { return [ "span", { class: "footnote pm-footnote", "data-ref": node2.attrs.ref, "data-content": node2.attrs.content }, node2.attrs.number.toString() ]; } }, pandoc: { readers: [ { token: PandocTokenType.Note, handler: writePandocNote } ], writer: (output, node2) => { output.writeNote(node2); } } } ], appendTransaction: () => { return [footnoteAppendTransaction()]; }, plugins: () => { return [ footnoteEditorActivationPlugin(), new Plugin({ key: plugin$1, props: { handleKeyDown: footnoteEditorKeyDownHandler(), nodeViews: footnoteEditorNodeViews() }, filterTransaction: footnoteFilterTransaction(), appendTransaction: footnoteSelectNoteAppendTransaction() }) ]; }, commands: () => { return [ new ProsemirrorCommand(EditorCommandId.Footnote, ["Shift-Mod-F7"], footnoteCommandFn(), footnoteOmniInsert(ui2)) ]; } }; }; function writePandocNote(schema2) { return (writer, tok) => { const ref = uuidv4(); writer.openNoteNode(ref); writer.writeTokens(tok.c); const noteNode = writer.closeNode(); const content = JSON.stringify(noteNode.content.toJSON()); writer.addNode(schema2.nodes.footnote, { ref, number: noteNode.attrs.number, content }, []); }; } function footnoteCommandFn() { return (state, dispatch) => { if (!canInsertFootnote(state)) { return false; } if (dispatch) { const tr = state.tr; insertFootnote(tr); dispatch(tr); } return true; }; } function footnoteOmniInsert(ui2) { return { name: ui2.context.translateText("Footnote"), description: ui2.context.translateText("Note placed at the bottom of the page"), group: OmniInsertGroup.References, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.footnote_dark : ui2.images.omni_insert.footnote }; } function canInsertFootnote(state) { return canInsertNode(state, state.schema.nodes.footnote) && !findParentNodeOfType_1(state.schema.nodes.note)(state.selection); } function insertFootnote(tr, edit = true, content) { const schema2 = tr.doc.type.schema; if (!content) { content = schema2.nodes.paragraph.create(); } const ref = uuidv4(); const notes = findChildrenByType_1(tr.doc, schema2.nodes.notes, true)[0]; const note = schema2.nodes.note.createAndFill({ ref }, content); tr.insert(notes.pos + 1, note); const footnote = schema2.nodes.footnote.create({ ref }); tr.replaceSelectionWith(footnote, false); if (edit) { const noteNode = findNoteNode(tr.doc, ref); if (noteNode) { tr.setSelection(TextSelection.create(tr.doc, noteNode.pos + 1)); } } return ref; } function selectedFootnote(selection) { const schema2 = selection.$head.node().type.schema; return findSelectedNodeOfType(schema2.nodes.footnote, selection); } function selectedNote(selection) { const schema2 = selection.$head.node().type.schema; return findParentNodeOfType_1(schema2.nodes.note)(selection); } function findNoteNode(doc2, ref) { return findNodeOfTypeWithRef(doc2, doc2.type.schema.nodes.note, ref); } function findFootnoteNode(doc2, ref) { return findNodeOfTypeWithRef(doc2, doc2.type.schema.nodes.footnote, ref); } function findNodeOfTypeWithRef(doc2, type2, ref) { const foundNode = findChildren_1(doc2, (node2) => node2.type === type2 && node2.attrs.ref === ref, true); if (foundNode.length) { return foundNode[0]; } else { return void 0; } } const extension$8 = (context) => { const { pandocExtensions, pandocCapabilities, ui: ui2 } = context; const rawAttribute = pandocExtensions.raw_attribute; return { nodes: [ { name: "raw_block", spec: { content: "text*", group: "block", marks: "", code: true, defining: true, isolating: true, attrs: { format: {} }, parseDOM: [ { tag: "div[class*='raw-block']", preserveWhitespace: "full", getAttrs: (node2) => { const el2 = node2; return { format: el2.getAttribute("data-format") }; } } ], toDOM(node2) { return [ "div", { class: "raw-block pm-fixedwidth-font pm-code-block pm-markup-text-color", "data-format": node2.attrs.format }, 0 ]; } }, code_view: { lang: (node2) => { return node2.attrs.format; }, attrEditFn: rawAttribute ? editRawBlockCommand(ui2, pandocCapabilities.output_formats) : void 0, borderColorClass: "pm-raw-block-border" }, attr_edit: () => ({ type: (schema2) => schema2.nodes.raw_block, tags: (node2) => [node2.attrs.format], editFn: rawAttribute ? () => editRawBlockCommand(ui2, pandocCapabilities.output_formats) : () => () => false }), pandoc: { readers: [ { token: PandocTokenType.RawBlock, block: "raw_block" } ], preprocessor: (markdown) => { return markdown.replace(/([^\n])(\n^<!-- badges: end -->$)/gm, (_match, p1, p2) => { return p1 + "\n" + p2; }); }, tokensFilter: (tokens2) => { const filtered = []; for (let i2 = 0; i2 < tokens2.length; i2++) { if (isSingleLineHtmlRawBlock(tokens2[i2]) && isParaOrPlain(tokens2[i2 + 1]) && isSingleLineHtmlRawBlock(tokens2[i2 + 2])) { const beginTag = tokens2[i2].c[kRawBlockContent].trimRight(); const endTag = tokens2[i2 + 2].c[kRawBlockContent].trimRight(); const match2 = beginTag.match(/^<(.*?)>$/); if (match2 && endTag === "</" + match2[1] + ">") { const innerContent = tokens2[i2 + 1].c; innerContent.unshift({ t: PandocTokenType.RawInline, c: ["html", beginTag] }); innerContent.push({ t: PandocTokenType.RawInline, c: ["html", endTag] }); filtered.push({ t: PandocTokenType.Para, c: innerContent }); i2 += 2; } else { filtered.push(tokens2[i2]); } } else { filtered.push(tokens2[i2]); } } return filtered; }, blockReader: (schema2, tok, writer) => { if (tok.t === PandocTokenType.RawBlock) { readPandocRawBlock(schema2, tok, writer); return true; } else if (isParagraphWrappingMultilineRaw(tok)) { const rawTok = tok.c[0]; const format2 = rawTok.c[kRawBlockFormat]; const content = rawTok.c[kRawBlockContent]; writer.addNode(schema2.nodes.raw_block, { format: format2 }, [schema2.text(content)]); return true; } else if (isParagraphWrappingLatexBeginOrEnd(tok)) { writer.addNode(schema2.nodes.raw_block, { format: kTexFormat }, [schema2.text(tok.c[0].c)]); return true; } else if (isParagraphWrappingRawLatexBeginOrEnd(tok)) { writer.addNode(schema2.nodes.raw_block, { format: kTexFormat }, [schema2.text(tok.c[0].c[kRawInlineContent])]); return true; } else { return false; } }, writer: (output, node2) => { if (!pandocExtensions.raw_attribute || node2.textContent.trim() === "<!-- -->") { output.writeToken(PandocTokenType.Para, () => { output.writeRawMarkdown(node2.textContent); }); } else if (node2.textContent.includes("\n```")) { const matches2 = []; const embeddedTickRegEx = /\n(`{3,})\s*?\n/g; embeddedTickRegEx.lastIndex = 0; let match2 = null; while (match2 = embeddedTickRegEx.exec(node2.textContent)) { matches2.push(match2); } embeddedTickRegEx.lastIndex = 0; const matchRev = matches2.reverse(); const ticks = (matchRev.length > 0 ? matchRev[0][1] : "```") + "`"; output.writeToken(PandocTokenType.Para, () => { output.writeRawMarkdown(`${ticks}{=${node2.attrs.format}} ${node2.textContent} ${ticks} `); }); } else { output.writeToken(PandocTokenType.RawBlock, () => { output.write(node2.attrs.format); output.write(node2.textContent); }); } } } } ], commands: (schema2) => { const commands = []; commands.push( new FormatRawBlockCommand(EditorCommandId.HTMLBlock, kHTMLFormat, schema2.nodes.raw_block, { name: ui2.context.translateText("HTML Block"), description: ui2.context.translateText("Raw HTML content"), group: OmniInsertGroup.Blocks, priority: 6, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.html_block_dark : ui2.images.omni_insert.html_block }) ); if (pandocExtensions.raw_tex) { commands.push( new FormatRawBlockCommand(EditorCommandId.TexBlock, kTexFormat, schema2.nodes.raw_block, { name: ui2.context.translateText("TeX Block"), description: ui2.context.translateText("Raw TeX content"), group: OmniInsertGroup.Blocks, priority: 5, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.tex_block_dark : ui2.images.omni_insert.tex_block }) ); } if (rawAttribute) { commands.push(new RawBlockCommand(ui2, pandocCapabilities.output_formats)); } return commands; } }; }; function isSingleLineHtmlRawBlock(tok) { if ((tok == null ? void 0 : tok.t) === PandocTokenType.RawBlock) { const format2 = tok.c[kRawBlockFormat]; const text2 = tok.c[kRawBlockContent]; const textTrimmed = text2.trimRight(); return isRawHTMLFormat(format2) && isSingleLineHTML(textTrimmed); } else { return false; } } function isParaOrPlain(tok) { if (tok) { return tok.t === PandocTokenType.Plain || tok.t === PandocTokenType.Para; } else { return false; } } function readPandocRawBlock(schema2, tok, writer) { const format2 = tok.c[kRawBlockFormat]; const text2 = tok.c[kRawBlockContent]; const textTrimmed = text2.trimRight(); if (isRawHTMLFormat(format2) && isSingleLineHTML(textTrimmed) && writer.hasInlineHTMLWriter(textTrimmed)) { writer.openNode(schema2.nodes.paragraph, {}); writer.writeInlineHTML(textTrimmed); writer.closeNode(); } else if (format2 === kTexFormat && readAsInlineTex(textTrimmed)) { writer.openNode(schema2.nodes.paragraph, {}); const rawTexMark = schema2.marks.raw_tex.create(); writer.openMark(rawTexMark); writer.writeText(textTrimmed); writer.closeMark(rawTexMark); writer.closeNode(); } else { writer.openNode(schema2.nodes.raw_block, { format: format2 }); writer.writeText(text2); writer.closeNode(); } } function readAsInlineTex(tex) { tex = tex.trimRight(); if (tex.split("\n").length === 1) { return !isLatexBeginOrEnd(tex); } else { return false; } } function isParagraphWrappingMultilineRaw(tok) { return isSingleChildParagraph(tok) && tok.c[0].t === PandocTokenType.RawInline && isMultilineString(tok.c[0].c[kRawBlockContent]); } function isParagraphWrappingLatexBeginOrEnd(tok) { return isSingleChildParagraph(tok) && tok.c[0].t === PandocTokenType.Str && isLatexBeginOrEnd(tok.c[0].c); } function isParagraphWrappingRawLatexBeginOrEnd(tok) { return isSingleChildParagraph(tok) && (tok.c[0].t === PandocTokenType.RawInline && tok.c[0].c[kRawInlineFormat] === kTexFormat && isLatexBeginOrEnd(tok.c[0].c[kRawInlineContent])); } function isLatexBeginOrEnd(str2) { return str2 && str2.trimLeft().match(/\\(begin|end)/); } function isSingleChildParagraph(tok) { return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1; } function isMultilineString(str2) { return str2.indexOf("\n") !== -1; } class FormatRawBlockCommand extends ProsemirrorCommand { constructor(id2, format2, nodeType, omniInsert) { super( id2, [], (state, dispatch) => { if (!this.isActive(state) && !setBlockType(this.nodeType, { format: format2 })(state)) { return false; } if (dispatch) { const schema2 = state.schema; if (this.isActive(state)) { setBlockType(schema2.nodes.paragraph)(state, dispatch); } else { setBlockType(this.nodeType, { format: format2 })(state, dispatch); } } return true; }, omniInsert ); __publicField(this, "format"); __publicField(this, "nodeType"); this.format = format2; this.nodeType = nodeType; } isActive(state) { return !!findParentNode_1((node2) => node2.type === this.nodeType && node2.attrs.format === this.format)(state.selection); } } class RawBlockCommand extends ProsemirrorCommand { constructor(ui2, outputFormats) { super(EditorCommandId.RawBlock, [], editRawBlockCommand(ui2, outputFormats), { name: ui2.context.translateText("Raw Block..."), description: ui2.context.translateText("Raw content block"), group: OmniInsertGroup.Blocks, priority: 4, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.raw_block_dark : ui2.images.omni_insert.raw_block }); } } const kYamlBlocksRegex = /(^)(---[ \t]*\n(?![ \t]*\n)[\W\w]*?\n(?:---|\.\.\.))([ \t]*)$/gm; const kYamlDiscardRegex = /^([\t >]*)`{3,}/m; function yamlMetadataBlockCapsuleFilter() { const kYamlMetadataCapsuleType = "E1819605-0ACD-4FAE-8B99-9C1B7BD7C0F1".toLowerCase(); return { type: kYamlMetadataCapsuleType, match: kYamlBlocksRegex, discard: kYamlDiscardRegex, enclose: (capsuleText) => capsuleText + "\n", handleText: blockCapsuleTextHandler( kYamlMetadataCapsuleType, encodedBlockCapsuleRegex(void 0, "\\n", "gm"), (text2) => text2.substring(0, text2.length - 1) ), handleToken: blockCapsuleParagraphTokenHandler(kYamlMetadataCapsuleType), writeNode: (schema2, writer, capsule) => { writer.openNode(schema2.nodes.yaml_metadata, { navigation_id: uuidv4(), md_index: capsule.position }); writer.writeText(blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix)); writer.closeNode(); } }; } const extension$7 = (context) => { const { ui: ui2 } = context; return { nodes: [ { name: "yaml_metadata", spec: { ...codeNodeSpec(), attrs: { navigation_id: { default: null } }, parseDOM: [ { tag: "div[class*='yaml-block']", preserveWhitespace: "full" } ], toDOM() { return ["div", { class: "yaml-block pm-code-block" }, 0]; } }, code_view: { lang: () => "yaml-frontmatter", classes: ["pm-metadata-background-color", "pm-yaml-metadata-block"] }, pandoc: { blockCapsuleFilter: yamlMetadataBlockCapsuleFilter(), writer: (output, node2) => { output.writeToken(PandocTokenType.Para, () => { const yaml = "---\n" + stripYamlDelimeters(fragmentText(node2.content)) + "\n---"; output.writeRawMarkdown(yaml); }); } } } ], commands: () => { return [new YamlMetadataCommand(ui2)]; }, plugins: () => [yamlMetadataTitlePlugin()] }; }; class YamlMetadataCommand extends ProsemirrorCommand { constructor(ui2) { super( EditorCommandId.YamlMetadata, [], (state, dispatch) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.yaml_metadata)) { return false; } if (!selectionIsBodyTopLevel(state.selection)) { return false; } if (dispatch) { const tr = state.tr; const kYamlLeading = "---\n"; const kYamlTrailing = "\n---"; const yamlText = schema2.text(kYamlLeading + kYamlTrailing); const yamlNode = schema2.nodes.yaml_metadata.create({}, yamlText); tr.replaceSelectionWith(yamlNode); setTextSelection_1(tr.mapping.map(state.selection.from) - kYamlTrailing.length - 1)(tr); dispatch(tr); } return true; }, { name: ui2.context.translateText("YAML"), description: ui2.context.translateText("YAML metadata block"), group: OmniInsertGroup.Blocks, priority: 3, selectionOffset: 4, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.yaml_block_dark : ui2.images.omni_insert.yaml_block } ); } } const key$2 = new PluginKey("rmd-chunk-image-preview"); class RmdChunkImagePreviewPlugin extends Plugin { constructor(uiContext) { super({ key: key$2, state: { init: (_config, state) => { return imagePreviewDecorations(state, uiContext); }, apply: (tr, old, oldState, newState) => { const transactions = [tr]; if (!tr.docChanged) { return old.map(tr.mapping, tr.doc); } else if (!transactionsAreTypingChange(transactions)) { return imagePreviewDecorations(newState, uiContext); } else if (transactionsHaveChange(transactions, oldState, newState, isRmdChunkNode)) { return imagePreviewDecorations(newState, uiContext); } else { return old.map(tr.mapping, tr.doc); } } }, props: { decorations: (state) => { return key$2.getState(state); } } }); } } function imagePreviewDecorations(state, uiContext) { const decorations = []; findChildrenByType_1(state.doc, state.schema.nodes.rmd_chunk).forEach((rmdChunk2) => { const match2 = rmdChunk2.node.textContent.match(/^(knitr::)?include_graphics\((['"])([^\2]+)\2/m); if (match2) { let width = ""; const firstLine = rmdChunk2.node.textContent.split(/\r?\n/)[0]; const widthMatch = firstLine.match(/^\s*\{[r|R][, ].*out\.width\s*=\s*([^ ,$]+).*}/); if (widthMatch) { width = stripQuotes(widthMatch[1].trim()); if (width === "NULL") { width = ""; } } const alignCenter = !!firstLine.match(/^\s*\{[r|R][, ].*fig\.align\s*=\s*['"]?center['"]?/); const imagePath = match2[3]; const decoration = Decoration.widget( rmdChunk2.pos + rmdChunk2.node.nodeSize, (view, getPos) => { const container = window.document.createElement("div"); container.style.marginTop = "-1.5em"; container.classList.add("pm-image-preview"); container.classList.add("pm-block-border-color"); const img = window.document.createElement("img"); if (alignCenter) { img.classList.add("pm-image-centered"); } mapResourceToURL(uiContext, imagePath).then((url2) => { img.src = url2; }); img.setAttribute("draggable", "false"); const unsubscribe = uiContext.watchResource(imagePath, () => { mapResourceToURL(uiContext, imagePath).then((url2) => { img.src = url2; }); }); onElementRemoved(view.dom, container, unsubscribe); if (width) { img.setAttribute("width", width); } img.draggable = false; img.onload = () => { img.alt = ""; }; img.onerror = () => { img.alt = ` ${uiContext.translateText("Image not found")}: ${imagePath}`; }; img.onclick = () => { const pos = getPos(); if (pos !== void 0) { const tr = view.state.tr; setTextSelection_1(pos - 1)(tr); view.dispatch(tr); } }; container.append(img); return container; }, { key: imagePath + "width:" + width + "center:" + alignCenter } ); decorations.push(decoration); } }); return DecorationSet.create(state.doc, decorations); } function isRmdChunkNode(node2) { return node2.type === node2.type.schema.nodes.rmd_chunk; } function rmdChunkBlockCapsuleFilter() { const kBlockCapsuleType = "F3175F2A-E8A0-4436-BE12-B33925B6D220".toLowerCase(); const kBlockCapsuleTextRegEx = new RegExp("```" + kBlockCapsuleType + "\\n[ \\t>]*([^`]+)\\n[ \\t>]*```", "g"); return { type: kBlockCapsuleType, match: /^([\t >]*)((```+)\s*\{[a-zA-Z0-9_-]+(?: *[ ,].*?)?\}[ \t]*\n(?:[\t >]*\3|[\W\w]*?\n[\t >]*\3))([ \t]*)$/gm, extract: (_match, p1, p2, _p3, p4) => { return { prefix: p1, source: p2, suffix: p4 }; }, enclose: (capsuleText, capsule) => "```" + kBlockCapsuleType + "\n" + capsule.prefix + capsuleText + "\n" + capsule.prefix + "```", handleText: (text2, tok) => { const stripPrefix = tok.t === PandocTokenType.CodeBlock; return text2.replace(kBlockCapsuleTextRegEx, (_match, p1) => { const capsuleText = p1; const capsule = parsePandocBlockCapsule(capsuleText); if (stripPrefix) { return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix); } else { return capsule.source; } }); }, handleToken: (tok) => { if (tok.t === PandocTokenType.CodeBlock) { const attr = pandocAttrReadAST(tok, kCodeBlockAttr); if (attr.classes.includes(kBlockCapsuleType)) { return tok.c[kCodeBlockText]; } } return null; }, writeNode: (schema2, writer, capsule) => { writer.openNode(schema2.nodes.rmd_chunk, { navigation_id: uuidv4(), md_index: capsule.position }); const source = capsule.source.replace(/^```+/, "").replace(/\n[\t >]*```+$/, ""); writer.writeText(blockCapsuleSourceWithoutPrefix(source, capsule.prefix)); writer.closeNode(); } }; } const rmd_chunkStyles = ""; const extension$6 = (context) => { const { ui: ui2, options, format: format2 } = context; if (!format2.rmdExtensions.codeChunks) { return null; } return { nodes: [ { name: "rmd_chunk", spec: { ...codeNodeSpec(), attrs: { navigation_id: { default: null }, md_index: { default: 0 } }, parseDOM: [ { tag: "div[class*='rmd-chunk']", preserveWhitespace: "full" } ], toDOM() { return ["div", { class: "rmd-chunk pm-code-block" }, 0]; } }, code_view: { firstLineMeta: true, lineNumbers: true, lineNumberFormatter: (lineNumber) => { if (lineNumber === 1) { return ""; } else { return lineNumber - 1 + ""; } }, bookdownTheorems: format2.docTypes.includes(kBookdownDocType), classes: ["pm-chunk-background-color"], lang: (_node, content) => { const match2 = content.match(/^\{([a-zA-Z0-9_-]+)/); if (match2) { return match2[1].split("-").pop() || ""; } else { return null; } }, createFromPastePattern: /^\{([a-zA-Z0-9_-]+).*}.*?\n/m }, pandoc: { blockCapsuleFilter: rmdChunkBlockCapsuleFilter(), writer: (output, node2) => { output.writeToken(PandocTokenType.Para, () => { const parts = rmdChunk(node2.textContent); if (parts) { output.writeRawMarkdown(parts.delimiter + "{" + parts.meta + "}\n" + parts.code + parts.delimiter + "\n"); } }); } } } ], commands: () => { const commands = [ new RChunkCommand(ui2, options), new PythonChunkCommand(ui2, options), new JuliaChunkCommand(ui2, options) ]; if (!options.defaultCellTypePython) { commands.push( new BashChunkCommand(ui2, options), new RcppChunkCommand(ui2, options), new SQLChunkCommand(ui2, options), new D3ChunkCommand(ui2, options), new StanChunkCommand(ui2, options) ); } if (format2.docTypes.includes(kQuartoDocType)) { commands.push( new MermaidChunkCommand(ui2, options), new GraphVizChunkCommand(ui2, options) ); } if (ui2.chunks) { commands.push( new ExpandAllChunksCommand(ui2.chunks), new CollapseAllChunksCommand(ui2.chunks) ); } return commands; }, plugins: () => { if (options.rmdImagePreview) { return [new RmdChunkImagePreviewPlugin(ui2.context)]; } else { return []; } } }; }; class RmdChunkCommand extends ProsemirrorCommand { constructor(ui2, options, id2, keymap2, priority, lang2, placeholder, image2, group = OmniInsertGroup.Chunks, keywords) { super(id2, keymap2, insertRmdChunk(placeholder), { name: `${lang2} ${ui2.context.translateText("Code ")} ${cellName(ui2, options)}`, description: `${ui2.context.translateText("Executable")} ${lang2} ${cellName(ui2, options).toLowerCase()}`, group, priority, image: image2, keywords: ["cell", "chunk", ...keywords ? keywords : []] }); } } function cellName(ui2, options) { if (options.defaultCellTypePython) { return ui2.context.translateText("Cell"); } else { return ui2.context.translateText("Chunk"); } } const kInsertCodeChunkShortcut = ["Mod-Alt-i"]; class RChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.RCodeChunk, !options.defaultCellTypePython ? kInsertCodeChunkShortcut : [], !options.defaultCellTypePython ? 10 : 8, "R", "{r}\n", () => ui2.prefs.darkMode() ? ui2.images.omni_insert.r_chunk_dark : ui2.images.omni_insert.r_chunk, OmniInsertGroup.Common ); } } class PythonChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.PythonCodeChunk, options.defaultCellTypePython ? kInsertCodeChunkShortcut : [], options.defaultCellTypePython ? 10 : 8, "Python", "{python}\n", () => ui2.images.omni_insert.python_chunk, OmniInsertGroup.Common ); } } class JuliaChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.JuliaCodeChunk, [], 9, "Julia", "{julia}\n", () => ui2.prefs.darkMode() ? ui2.images.omni_insert.code_block_dark : ui2.images.omni_insert.code_block, OmniInsertGroup.Common ); } } class BashChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.BashCodeChunk, [], 7, "Bash", "{bash}\n", () => ui2.prefs.darkMode() ? ui2.images.omni_insert.bash_chunk_dark : ui2.images.omni_insert.bash_chunk ); } } class RcppChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.RcppCodeChunk, [], 6, "Rcpp", "{Rcpp}\n", () => ui2.prefs.darkMode() ? ui2.images.omni_insert.rcpp_chunk_dark : ui2.images.omni_insert.rcpp_chunk ); } } class SQLChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.SQLCodeChunk, [], 5, "SQL", "{sql connection=}\n", () => ui2.images.omni_insert.sql_chunk, OmniInsertGroup.Chunks ); } } class D3ChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super(ui2, options, EditorCommandId.D3CodeChunk, [], 4, "D3", "{d3 data=}\n", () => ui2.images.omni_insert.d3_chunk, OmniInsertGroup.Chunks); } } class MermaidChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.MermaidCodeChunk, [], 7, "Mermaid", "{mermaid}\n", () => ui2.prefs.darkMode() ? ui2.images.omni_insert.code_block_dark : ui2.images.omni_insert.code_block, OmniInsertGroup.Chunks, ["diagram"] ); } } class GraphVizChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.GraphVizCodeChunk, [], 7, "GraphViz", "{dot}\n", () => ui2.prefs.darkMode() ? ui2.images.omni_insert.code_block_dark : ui2.images.omni_insert.code_block, OmniInsertGroup.Chunks, ["diagram", "dot"] ); } } class StanChunkCommand extends RmdChunkCommand { constructor(ui2, options) { super( ui2, options, EditorCommandId.StanCodeChunk, [], 7, "Stan", "{stan output.var=}\n", () => ui2.images.omni_insert.stan_chunk, OmniInsertGroup.Chunks ); } } class ChunkExpansionCommand extends ProsemirrorCommand { constructor(chunks, id2, keymap2, expand2) { super(id2, keymap2, (_state, dispatch) => { if (dispatch) { chunks.setChunksExpanded(expand2); } return true; }); } } class ExpandAllChunksCommand extends ChunkExpansionCommand { constructor(chunks) { super(chunks, EditorCommandId.ExpandAllChunks, [], true); } } class CollapseAllChunksCommand extends ChunkExpansionCommand { constructor(chunks) { super(chunks, EditorCommandId.CollapseAllChunks, [], false); } } const line_blockStyles = ""; const extension$5 = (context) => { const { pandocExtensions, ui: ui2 } = context; if (!pandocExtensions.line_blocks) { return null; } return { nodes: [ { name: "line_block", spec: { content: "paragraph+", group: "block", defining: true, parseDOM: [ { tag: "div[class*='line-block']" } ], toDOM() { return ["div", { class: "line-block pm-line-block pm-block-border-color pm-margin-bordered" }, 0]; } }, pandoc: { readers: [ { token: PandocTokenType.LineBlock, block: "line_block", getChildren: (tok) => { return tok.c.map((line2) => ({ t: PandocTokenType.Para, c: line2 })); } } ], writer: (output, node2) => { output.withOption(kWriteSpaces, false, () => { output.writeToken(PandocTokenType.LineBlock, () => { node2.forEach((line2) => { output.writeArray(() => { output.writeInlines(line2.content); }); }); }); }); } } } ], commands: (schema2) => { return [ new WrapCommand( EditorCommandId.LineBlock, [], schema2.nodes.line_block, {}, { name: ui2.context.translateText("Line Block"), description: ui2.context.translateText("Preserve leading spaces and line breaks"), group: OmniInsertGroup.Blocks, priority: 2, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.line_block_dark : ui2.images.omni_insert.line_block } ) ]; } }; }; function insertTable(capabilities, ui2) { return (state, dispatch, view) => { const schema2 = state.schema; if (!canInsertNode(state, schema2.nodes.table_container)) { return false; } if (findParentNodeOfType_1(schema2.nodes.table_caption)(state.selection)) { return false; } async function asyncInsertTable() { if (dispatch) { const result = await ui2.dialogs.insertTable(capabilities); if (result) { const numRows = result.rows + (result.header ? 1 : 0); const rows = []; for (let r2 = 0; r2 < numRows; r2++) { const cells = []; const cellType = r2 === 0 && result.header ? schema2.nodes.table_header : schema2.nodes.table_cell; for (let c = 0; c < result.cols; c++) { const content = cellType === schema2.nodes.table_header ? schema2.text(`${ui2.context.translateText("Col")}${c + 1}`) : Fragment.empty; cells.push(cellType.createAndFill({}, schema2.nodes.paragraph.createAndFill({}, content))); } rows.push(schema2.nodes.table_row.createAndFill({}, cells)); } const table = schema2.nodes.table.createAndFill({}, rows); const tableCaption = schema2.nodes.table_caption.createAndFill( { inactive: !result.caption }, result.caption ? schema2.text(result.caption) : void 0 ); const tableContainer = schema2.nodes.table_container.createAndFill({}, [table, tableCaption]); const tr = state.tr; tr.replaceSelectionWith(tableContainer); const selectionPos = tr.mapping.map(state.selection.from, -1); setTextSelection_1(selectionPos)(tr).scrollIntoView(); dispatch(tr); } if (view) { view.focus(); } } } asyncInsertTable(); return true; }; } function insertTableOmniInsert(ui2) { return { name: ui2.context.translateText("Table"), description: ui2.context.translateText("Content in rows and columns"), group: OmniInsertGroup.Lists, priority: 1, noFocus: true, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.table_dark : ui2.images.omni_insert.table }; } function deleteTable() { return (state, dispatch) => { const schema2 = state.schema; const container = findParentNodeOfType_1(schema2.nodes.table_container)(state.selection); if (container) { if (dispatch) { const tr = state.tr; tr.delete(container.pos, container.pos + container.node.nodeSize); dispatch(tr.scrollIntoView()); } return true; } return false; }; } function deleteTableCaption() { return (state, dispatch) => { const schema2 = state.schema; const { $head } = state.selection; if ($head.parent.type !== schema2.nodes.table_caption || $head.parent.childCount !== 0) { return false; } if (dispatch) { const tr = state.tr; const caption = $head.parent; tr.setNodeMarkup($head.pos - 1, schema2.nodes.table_caption, { ...caption.attrs, inactive: true }); setTextSelection_1($head.pos - 1, -1)(tr); dispatch(tr); } return true; }; } function addColumns(after) { return (state, dispatch) => { if (!dist.isInTable(state)) { return false; } if (dispatch) { let tr = state.tr; const rect2 = selectedRect(state); const columns = rect2.right - rect2.left; for (let i2 = 0; i2 < columns; i2++) { tr = dist.addColumn(tr, rect2, after ? rect2.right : rect2.left); } dispatch(tr); } return true; }; } function addRows(after) { return (state, dispatch) => { if (!dist.isInTable(state)) { return false; } if (dispatch) { let tr = state.tr; const rect2 = selectedRect(state); const rows = rect2.bottom - rect2.top; for (let i2 = 0; i2 < rows; i2++) { tr = dist.addRow(tr, rect2, after ? rect2.bottom : rect2.top); } const table = findParentNodeOfType_1(state.schema.nodes.table)(tr.selection); if (table) { const alignments = new Array(rect2.map.width); table.node.forEach((rowNode, rowOffset, rowIndex) => { rowNode.forEach((cellNode, cellOffset, colIndex) => { const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset; if (rowIndex === 0) { const cell = tr.doc.nodeAt(cellPos); alignments[colIndex] = (cell == null ? void 0 : cell.attrs.align) || null; } else { tr.setNodeMarkup(cellPos, cellNode.type, { ...cellNode.attrs, align: alignments[colIndex] || null }); } }); }); } dispatch(tr); } return true; }; } class TableToggleHeaderCommand extends ProsemirrorCommand { constructor() { super(EditorCommandId.TableToggleHeader, [], dist.toggleHeader("row")); } isActive(state) { if (!dist.isInTable(state)) { return false; } const { table } = selectedRect(state); const firstCell = table.firstChild.firstChild; return firstCell.type === state.schema.nodes.table_header; } } class TableToggleCaptionCommand extends ProsemirrorCommand { constructor() { super( EditorCommandId.TableToggleCaption, [], (state, dispatch) => { if (!dist.isInTable(state)) { return false; } const caption = this.tableCaptionNode(state); if (!caption) { return false; } if (dispatch) { const focus = caption.node.attrs.inactive; const tr = state.tr; tr.setNodeMarkup(caption.pos + 1, state.schema.nodes.table_caption, { ...caption.node.attrs, inactive: !caption.node.attrs.inactive }); if (focus) { setTextSelection_1(caption.pos + 1)(tr).scrollIntoView(); } dispatch(tr); } return true; } ); } isActive(state) { if (!dist.isInTable(state)) { return false; } const caption = this.tableCaptionNode(state); if (!caption) { return false; } return !caption.node.attrs.inactive; } tableCaptionNode(state) { const container = findParentNodeOfType_1(state.schema.nodes.table_container)(state.selection); if (container) { const caption = findChildrenByType_1(container.node, state.schema.nodes.table_caption); return { node: caption[0].node, pos: container.pos + caption[0].pos }; } else { return void 0; } } } var CssAlignment = /* @__PURE__ */ ((CssAlignment2) => { CssAlignment2["Left"] = "left"; CssAlignment2["Right"] = "right"; CssAlignment2["Center"] = "center"; return CssAlignment2; })(CssAlignment || {}); class TableRowCommand extends ProsemirrorCommand { plural(state) { if (!dist.isInTable(state)) { return 1; } const rect2 = selectedRect(state); return rect2.bottom - rect2.top; } } class TableColumnCommand extends ProsemirrorCommand { plural(state) { if (!dist.isInTable(state)) { return 1; } const rect2 = selectedRect(state); return rect2.right - rect2.left; } } class TableColumnAlignmentCommand extends ProsemirrorCommand { constructor(id2, align) { super(id2, [], (state, dispatch) => { if (!dist.isInTable(state)) { return false; } if (dispatch) { const { table, tableStart, left, right } = selectedRect(state); const tr = state.tr; table.forEach((rowNode, rowOffset) => { rowNode.forEach((cellNode, cellOffset, i2) => { if (i2 >= left && i2 < right) { const cellPos = tableStart + 1 + rowOffset + cellOffset; tr.setNodeMarkup(cellPos, cellNode.type, { ...cellNode.attrs, align }); } }); }); dispatch(tr); } return true; }); __publicField(this, "align"); this.align = align; } isActive(state) { if (!dist.isInTable(state)) { return false; } const { table, top: top2, left } = selectedRect(state); const cell = table.child(top2).child(left); return cell.attrs.align === this.align; } } function selectedRect(state) { const sel = state.selection; const $pos = dist.selectionCell(state); const table = $pos.node(-1); const tableStart = $pos.start(-1); const map2 = dist.TableMap.get(table); let rect2; if (sel instanceof dist.CellSelection) { rect2 = map2.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart); } else { rect2 = map2.findCell($pos.pos - tableStart); } return { ...rect2, tableStart, map: map2, table }; } function tableColumnAlignments(node2) { const firstRow = node2.firstChild; const cols = firstRow.childCount; const alignments = new Array(cols); for (let i2 = 0; i2 < cols; i2++) { const cell = firstRow.child(i2); const align = cell.attrs.align; switch (align) { case CssAlignment.Left: alignments[i2] = PandocTokenType.AlignLeft; break; case CssAlignment.Right: alignments[i2] = PandocTokenType.AlignRight; break; case CssAlignment.Center: alignments[i2] = PandocTokenType.AlignCenter; break; case null: default: alignments[i2] = PandocTokenType.AlignDefault; break; } } return alignments; } function tableColumnWidths(node2) { const firstRow = node2.firstChild; const cols = firstRow.childCount; let widths = new Array(cols).fill(0); const totalWidth = node2.attrs.width; let availableWidth = totalWidth; let colsWithWidth = 0; for (let i2 = 0; i2 < cols; i2++) { const col = firstRow.child(i2); if (col.attrs.colwidth && col.attrs.colwidth[0]) { widths[i2] = col.attrs.colwidth[0]; colsWithWidth++; availableWidth -= widths[i2]; } } if (colsWithWidth > 0) { if (availableWidth > 0) { const defaultWidth = availableWidth / (cols - colsWithWidth); for (let i2 = 0; i2 < cols; i2++) { const col = firstRow.child(i2); if (!col.attrs.colwidth || !col.attrs.colwidth[0]) { widths[i2] = defaultWidth; } } } widths = widths.map((width) => width / totalWidth); } return widths; } function fixupTableWidths(view) { return (tr) => { const schema2 = tr.doc.type.schema; if (!view.dom || !view.dom.isConnected) { return tr; } const tables2 = findChildrenByType_1(tr.doc, schema2.nodes.table); for (const table of tables2) { const el2 = view.domAtPos(table.pos).node; const containerWidth = table.node.attrs.width || el2.clientWidth; if (containerWidth === 0) { continue; } let colpercents = table.node.attrs.colpercents; if (colpercents) { const kMinPercent = 0.25; const totalPercent = colpercents.reduce((total, pct) => { return total + pct; }, 0); colpercents = colpercents.map((pct) => Math.max(pct, kMinPercent)); const adjustedPercent = colpercents.reduce((total, pct) => { return total + pct; }, 0); const extraPercent = adjustedPercent - totalPercent; colpercents = colpercents.map((pct) => pct - extraPercent / colpercents.length); const colWidths = colpercents.map((pct) => Math.floor(pct * containerWidth)); table.node.forEach((rowNode, rowOffset) => { rowNode.forEach((cellNode, cellOffset, c) => { const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset; const colWidth = [colWidths[c]]; if (colWidth !== cellNode.attrs.colwidth) { tr.setNodeMarkup(cellPos, cellNode.type, { ...cellNode.attrs, colwidth: colWidth }); } }); }); } if (containerWidth !== table.node.attrs.width || colpercents) { tr.setNodeMarkup(table.pos, schema2.nodes.table, { ...table.node.attrs, width: containerWidth, colpercents: null }); } } return tr; }; } const kTableCaption = 1; const kTableCaptionFull = 1; const kTableColSpec = 2; const kTableColSpecAlign = 0; const kTableColSpecWidth = 1; const kTableHead = 3; const kTableHeadRows = 1; const kTableBody = 4; const kTableBodyRows = 3; const kTableRowCells = 1; const KTableCellContents = 4; function readPandocTable(schema2) { return (writer, tok) => { const alignments = columnCssAlignments(tok); const colpercents = columnPercents(tok); const parseRow = (row, cellType) => { const cells = row[kTableRowCells]; if (cells.length) { writer.openNode(schema2.nodes.table_row, {}); cells.forEach((cell, i2) => { writer.openNode(cellType, { align: alignments[i2] }); writer.writeTokens(cell[KTableCellContents]); writer.closeNode(); }); writer.closeNode(); } }; writer.openNode(schema2.nodes.table_container, {}); writer.openNode(schema2.nodes.table, { colpercents }); const head = tok.c[kTableHead]; const firstRow = head[kTableHeadRows][0]; if (firstRow && firstRow[kTableRowCells].some((cell) => cell[KTableCellContents].length > 0)) { parseRow(firstRow, schema2.nodes.table_header); } const body = tok.c[kTableBody][0]; body[kTableBodyRows].forEach((row) => { parseRow(row, schema2.nodes.table_cell); }); writer.closeNode(); const caption = tok.c[kTableCaption][kTableCaptionFull]; const captionBlock = caption.length ? caption[0].c : []; writer.openNode(schema2.nodes.table_caption, { inactive: captionBlock.length === 0 }); writer.writeTokens(captionBlock); writer.closeNode(); writer.closeNode(); }; } function writePandocTableContainer(output, node2) { const caption = node2.lastChild; const table = node2.firstChild; output.writeToken(PandocTokenType.Table, () => { output.writeAttr(); output.writeNode(caption); output.writeNode(table); }); } function writePandocTable(output, node2) { const firstRow = node2.firstChild; const alignments = tableColumnAlignments(node2); const widths = tableColumnWidths(node2); output.writeArray(() => { alignments.forEach((align, i2) => { output.writeArray(() => { output.writeToken(align); if (widths[i2] === 0) { output.writeToken(PandocTokenType.ColWidthDefault); } else { output.writeToken(PandocTokenType.ColWidth, widths[i2]); } }); }); }); const headerCut = firstRow.firstChild.type === node2.type.schema.nodes.table_header ? 1 : 0; output.writeArray(() => { output.writeAttr(); output.writeArray(() => { writePandocTableRow(output, firstRow, headerCut === 0); }); }); output.writeArray(() => { output.writeArray(() => { output.writeAttr(); output.write(0); output.writeArray(() => { }); output.writeArray(() => { for (let i2 = headerCut; i2 < node2.childCount; i2++) { writePandocTableRow(output, node2.content.child(i2)); } }); }); }); output.writeArray(() => { output.writeAttr(); output.writeArray(() => { }); }); } function writePandocTableCaption(output, node2) { output.writeArray(() => { output.write(null); output.writeArray(() => { if (!node2.attrs.inactive && node2.childCount > 0) { output.writeToken(PandocTokenType.Plain, () => { output.writeInlines(node2.content); }); } }); }); } function writePandocTableNodes(output, node2) { output.writeArray(() => { output.writeNodes(node2); }); } function writePandocTableHeaderNodes(output, node2) { output.writeArray(() => { if (node2.textContent.length > 0) { output.writeNodes(node2); } else { output.writeToken(PandocTokenType.Para, () => { output.writeRawMarkdown(" "); }); } }); } function writePandocTableRow(output, node2, empty2 = false) { output.writeArray(() => { output.writeAttr(); output.writeArray(() => { node2.forEach((cellNode) => { output.writeArray(() => { output.writeAttr(); output.writeToken(PandocTokenType.AlignDefault); output.write(1); output.write(1); if (!empty2) { output.writeNode(cellNode); } else { output.writeArray(() => { output.writeInlines(Fragment.empty); }); } }); }); }); }); } function columnCssAlignments(tableToken) { return tableToken.c[kTableColSpec].map((spec) => { const alignment = spec[kTableColSpecAlign]; switch (alignment.t) { case PandocTokenType.AlignLeft: return CssAlignment.Left; case PandocTokenType.AlignRight: return CssAlignment.Right; case PandocTokenType.AlignCenter: return CssAlignment.Center; case PandocTokenType.AlignDefault: default: return null; } }); } function columnPercents(tableToken) { return tableToken.c[kTableColSpec].map((spec) => { const width = spec[kTableColSpecWidth]; return width.t === PandocTokenType.ColWidth ? width.c : 0; }); } function tableBlockCapsuleFilter() { const kTableBlockCapsuleType = "8EF5A772-DD63-4622-84BF-AF1995A1B2B9".toLowerCase(); const pagraphTokenCapsuleHandler = blockCapsuleParagraphTokenHandler(kTableBlockCapsuleType); const tokenRegex = encodedBlockCapsuleRegex("^", "$"); return { type: kTableBlockCapsuleType, match: /^([\t >]*)(<table[\W\w]*?<\/table>)([ \t]*)$/gm, enclose: (capsuleText) => { return capsuleText; }, handleText: blockCapsuleTextHandler(kTableBlockCapsuleType, encodedBlockCapsuleRegex(void 0, void 0, "gm")), handleToken: (tok) => { const capsuleText = pagraphTokenCapsuleHandler(tok); if (capsuleText) { return capsuleText; } if (tok.t === PandocTokenType.DefinitionList) { if (tok.c.length === 1) { const definition = tok.c[0]; if (definition[0][0].t === PandocTokenType.Str) { const term = definition[0][0].c; const match2 = term.match(tokenRegex); if (match2) { const capsuleRecord = parsePandocBlockCapsule(term); if (capsuleRecord.type === kTableBlockCapsuleType) { return term; } } } } } return null; }, writeNode: (schema2, writer, capsule) => { const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix); const writeAsRawHTML = () => { writer.openNode(schema2.nodes.raw_block, { format: kHTMLFormat }); writer.writeText(source); writer.closeNode(); }; const parser = new window.DOMParser(); const doc2 = parser.parseFromString(capsule.source, "text/html"); if (doc2.body && doc2.body.firstChild instanceof HTMLTableElement) { const prosemirrorDomParser = DOMParser$1.fromSchema(schema2); const unparsedTable = doc2.body.firstChild; const ensureCellContent = (tag) => { const cells = unparsedTable.getElementsByTagName(tag); for (let i2 = 0; i2 < cells.length; i2++) { const cell = cells.item(i2); if (cell.children.length === 0) { cell.append(window.document.createElement("p")); } } }; ensureCellContent("td"); ensureCellContent("th"); let captionElement = null; const captionCollection = unparsedTable.getElementsByTagName("caption"); if (captionCollection.length) { captionElement = captionCollection.item(0); if (captionElement) { captionElement.remove(); } } let caption = schema2.nodes.table_caption.create({ inactive: true }); if (captionElement) { const captionSlice = prosemirrorDomParser.parseSlice(captionElement); caption = schema2.nodes.table_caption.createAndFill({ inactive: false }, captionSlice.content); } const slice2 = prosemirrorDomParser.parseSlice(doc2.body); if (slice2.content.firstChild && slice2.content.firstChild.type === schema2.nodes.table) { const table = slice2.content.firstChild; writer.addNode(schema2.nodes.table_container, {}, [table, caption]); } else { writeAsRawHTML(); } } else { writeAsRawHTML(); } } }; } const kDefaultCellClasses = "pm-table-cell pm-block-border-color"; const nodes = dist.tableNodes({ tableGroup: "block", cellContent: "block+", cellAttributes: { align: { default: null, getFromDOM(dom) { return dom.style.textAlign || null; }, setDOMAttr(value, attrs) { if (value) { attrs.style = (attrs.style || "") + `text-align: ${value};`; } } }, className: { default: kDefaultCellClasses, getFromDOM(dom) { return dom.className; }, setDOMAttr(_value, attrs) { attrs.class = kDefaultCellClasses; } } } }); const tableContainerNode = { name: "table_container", spec: { content: "table table_caption", group: "block", parseDOM: [{ tag: "div[class*='table-container']" }], toDOM() { return ["div", { class: "table-container pm-table-container" }, 0]; } }, pandoc: { readers: [ { token: PandocTokenType.Table, handler: readPandocTable } ], writer: writePandocTableContainer, blockCapsuleFilter: tableBlockCapsuleFilter() } }; const tableNode = { name: "table", spec: { ...nodes.table, attrs: { ...nodes.table.attrs, width: { default: null }, colpercents: { default: null } }, parseDOM: [ { tag: "table", getAttrs: (dom) => { const el2 = dom; let colpercents = null; const colgroup = el2.getElementsByTagName("colgroup"); if (colgroup.length) { const cols = colgroup[0].childElementCount; colpercents = new Array(cols).fill(0); for (let i2 = 0; i2 < cols; i2++) { const col = colgroup[0].children.item(i2); if (col.style.width) { colpercents[i2] = (parseInt(col.style.width, 10) || 0) / 100; } } if (colpercents.every((value) => !!value)) { return { colpercents }; } } let width = null; const rows = el2.getElementsByTagName("tr"); if (rows.length) { const firstRow = rows.item(0); const numCells = firstRow.cells.length; const colWidths = new Array(numCells).fill(0); for (let i2 = 0; i2 < numCells; i2++) { const cell = firstRow.cells.item(i2); const colWidth = cell.getAttribute("data-colwidth"); if (colWidth) { colWidths[i2] = Number(colWidth); } } if (colWidths.every((colWidth) => colWidth > 0)) { width = colWidths.reduce((total, value) => total + value, 0); colpercents = colWidths.map((colWidth) => colWidth / width); } } return { width, colpercents }; } } ], toDOM(node2) { const attrs = {}; if (node2.attrs.width) { attrs["data-width"] = node2.attrs.width.toString(); } attrs["data-colpercents"] = tableColumnWidths(node2).join(","); return ["table", attrs, ["tbody", 0]]; } }, pandoc: { writer: writePandocTable } }; const tableCaptionNode = { name: "table_caption", spec: { attrs: { inactive: { default: false } }, content: "inline*", parseDOM: [ { tag: "p[class*='table-caption']", getAttrs(dom) { return { inactive: dom.classList.contains("table-caption-inactive") }; } } ], toDOM(node2) { const classes = ["table-caption", "pm-node-caption"]; if (node2.attrs.inactive) { classes.push("table-caption-inactive"); } return ["p", { class: classes.join(" ") }, 0]; } }, pandoc: { writer: writePandocTableCaption } }; const tableRowNode = { name: "table_row", spec: nodes.table_row, pandoc: { writer: writePandocTableNodes } }; const tableCellNode = (blocks) => ({ name: "table_cell", spec: { ...nodes.table_cell, content: blocks ? "block+" : "paragraph" }, pandoc: { writer: writePandocTableNodes } }); const tableHeaderNode = { name: "table_header", spec: nodes.table_header, pandoc: { writer: writePandocTableHeaderNodes } }; function tableContextMenuHandler(ui2) { return (view, $pos) => { if (!findParentNodeOfTypeClosestToPos_1($pos, view.state.schema.nodes.table)) { return null; } const items = [ { command: EditorCommandId.TableAddRowBefore }, { command: EditorCommandId.TableAddRowAfter }, { separator: true }, { command: EditorCommandId.TableAddColumnBefore }, { command: EditorCommandId.TableAddColumnAfter }, { separator: true }, { command: EditorCommandId.TableDeleteRow }, { command: EditorCommandId.TableDeleteColumn }, { separator: true }, { command: EditorCommandId.TableDeleteTable }, { separator: true }, { text: ui2.context.translateText("Align Column"), subMenu: { items: [ { command: EditorCommandId.TableAlignColumnLeft }, { command: EditorCommandId.TableAlignColumnCenter }, { command: EditorCommandId.TableAlignColumnRight }, { separator: true }, { command: EditorCommandId.TableAlignColumnDefault } ] } }, { separator: true }, { command: EditorCommandId.TableToggleHeader }, { command: EditorCommandId.TableToggleCaption } ]; return { items: async () => items, preventSelectionChange: dist.isInTable }; }; } function tablePaste() { return new Plugin({ key: new PluginKey("table-paste"), props: { handlePaste: (view, _event, slice2) => { if (sliceHasNode(slice2, (node2) => node2.type === node2.type.schema.nodes.table)) { const tr = view.state.tr.replaceSelection(slice2); view.dispatch( tr.scrollIntoView().setMeta("paste", true).setMeta("tablePaste", true).setMeta("uiEvent", "paste") ); view.dispatch(fixupTableWidths(view)(view.state.tr)); return true; } else { return false; } } }, appendTransaction: (transactions, oldState, newState) => { const schema2 = newState.schema; if (!transactions.some((transaction) => transaction.getMeta("tablePaste"))) { return null; } const tr = newState.tr; forChangedNodes( oldState, newState, (node2) => node2.type === node2.type.schema.nodes.table, (node2, pos) => { let firstRow; let currentColumn = 0; const columnAlignments = []; node2.descendants((childNode, childPos, parent) => { if (childNode.type === schema2.nodes.table_row) { currentColumn = 0; } if (!firstRow) { firstRow = childNode; } else if (parent === firstRow) { columnAlignments.push(childNode.attrs.align); const headerPos = pos + 1 + childPos; tr.setNodeMarkup(headerPos, void 0, { ...childNode.attrs, className: kDefaultCellClasses }); } else if (childNode.type === schema2.nodes.table_cell) { const align = columnAlignments[currentColumn] || null; const cellPos = pos + 1 + childPos; tr.setNodeMarkup(cellPos, schema2.nodes.table_cell, { ...childNode.attrs, align, className: kDefaultCellClasses }); } if (childNode.type === schema2.nodes.table_header || childNode.type === schema2.nodes.table_cell) { currentColumn++; } }); } ); if (tr.docChanged) { return tr; } else { return null; } } }); } const tables = ""; const tableStyles = ""; const extension$4 = (context) => { const { pandocExtensions, ui: ui2 } = context; if (!pandocExtensions.grid_tables && !pandocExtensions.pipe_tables && !pandocExtensions.simple_tables && !pandocExtensions.multiline_tables && !pandocExtensions.raw_html) { return null; } const capabilities = { captions: pandocExtensions.table_captions, headerOptional: pandocExtensions.grid_tables, multiline: pandocExtensions.multiline_tables || pandocExtensions.grid_tables }; return { nodes: [ tableContainerNode, tableNode, tableCaptionNode, tableCellNode(pandocExtensions.grid_tables), tableHeaderNode, tableRowNode ], commands: () => { const commands = [ new ProsemirrorCommand( EditorCommandId.Table, ["Alt-Mod-t"], insertTable(capabilities, ui2), insertTableOmniInsert(ui2) ), new ProsemirrorCommand( EditorCommandId.TableInsertTable, [], insertTable(capabilities, ui2) ), new ProsemirrorCommand(EditorCommandId.TableNextCell, ["Tab"], dist.goToNextCell(1)), new ProsemirrorCommand(EditorCommandId.TablePreviousCell, ["Shift-Tab"], dist.goToNextCell(-1)), new TableColumnCommand(EditorCommandId.TableAddColumnAfter, [], addColumns(true)), new TableColumnCommand(EditorCommandId.TableAddColumnBefore, [], addColumns(false)), new TableColumnCommand(EditorCommandId.TableDeleteColumn, [], dist.deleteColumn), new TableRowCommand(EditorCommandId.TableAddRowAfter, [], addRows(true)), new TableRowCommand(EditorCommandId.TableAddRowBefore, [], addRows(false)), new TableRowCommand(EditorCommandId.TableDeleteRow, [], dist.deleteRow), new ProsemirrorCommand(EditorCommandId.TableDeleteTable, [], deleteTable()), new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnLeft, CssAlignment.Left), new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnRight, CssAlignment.Right), new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnCenter, CssAlignment.Center), new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnDefault, null) ]; if (capabilities.captions) { commands.push(new TableToggleCaptionCommand()); } if (capabilities.headerOptional) { commands.push(new TableToggleHeaderCommand()); } return commands; }, plugins: () => { return [ dist.columnResizing({ handleWidth: 5 }), dist.tableEditing(), tablePaste() ]; }, contextMenuHandlers: () => { return [tableContextMenuHandler(ui2)]; }, baseKeys: (schema2) => { const keys2 = [ { key: BaseKey.Backspace, command: deleteTableCaption() }, { key: BaseKey.Enter, command: exitNode(schema2.nodes.table_caption, -2, false) }, { key: BaseKey.Tab, command: tableTabKey }, { key: BaseKey.ShiftTab, command: tableShiftTabKey } ]; if (!capabilities.multiline) { keys2.push({ key: BaseKey.Enter, command: dist.goToNextCell(1) }); keys2.push({ key: BaseKey.ShiftEnter, command: dist.goToNextCell(1) }); keys2.push({ key: BaseKey.ModEnter, command: dist.goToNextCell(1) }); } return keys2; }, fixups: (_schema, view) => { return [fixupTableWidths(view)]; }, appendTransaction: () => { return [ { name: "table-repair", nodeFilter: (node2) => node2.type === node2.type.schema.nodes.table, append: (tr) => { trTransform(tr, tableRepairTransform); } } ]; } }; }; function tableTabKey(state, dispatch) { if (sinkListItem$1(state.schema.nodes.list_item)(state)) { return false; } else { return dist.goToNextCell(1)(state, dispatch); } } function tableShiftTabKey(state, dispatch) { if (liftListItem$1(state.schema.nodes.list_item)(state)) { return false; } else { return dist.goToNextCell(-1)(state, dispatch); } } function tableRepairTransform(tr) { const schema2 = tr.doc.type.schema; const tables2 = findChildrenByType_1(tr.doc, schema2.nodes.table); tables2.forEach((table) => { const pos = tr.mapping.map(table.pos); const containingNode = tr.doc.resolve(pos).node(); if (containingNode.type !== schema2.nodes.table_container) { const caption = schema2.nodes.table_caption.createAndFill({ inactive: true }, void 0); const container = schema2.nodes.table_container.createAndFill({}, [table.node, caption]); tr.replaceWith(pos, pos + table.node.nodeSize, container); } else if (table.node.firstChild && table.node.firstChild.childCount === 0) { const hasContainer = containingNode.type === schema2.nodes.table_container; if (hasContainer) { tr.deleteRange(pos - 1, pos - 1 + containingNode.nodeSize); } else { tr.deleteRange(pos, table.node.nodeSize); } } }); } function insertDefinitionList(tr, items) { const schema2 = items[0].type.schema; const definitionList = schema2.nodes.definition_list.createAndFill({}, items); const prevCursor = tr.selection.to; tr.replaceSelectionWith(definitionList); setTextSelection_1(tr.mapping.map(prevCursor) - 1, -1)(tr).scrollIntoView(); return tr; } function insertDefinitionListAppendTransaction() { return { name: "definition-list-join", nodeFilter: (node2) => node2.type === node2.type.schema.nodes.definition_list, append: (tr) => { trTransform(tr, joinDefinitionListsTransform); } }; } function joinDefinitionListsTransform(tr) { const nodeType = tr.doc.type.schema.nodes.definition_list; const lists = findChildrenByType_1(tr.doc, nodeType, true); for (const list of lists) { const listPos = tr.doc.resolve(list.pos + 1); const listIndex = listPos.index(listPos.depth - 1); const listParent = listPos.node(listPos.depth - 1); if (listIndex + 1 < listParent.childCount) { const nextNode = listParent.child(listIndex + 1); if (nextNode.type === nodeType) { tr.join(list.pos + list.node.nodeSize); return; } } } } class InsertDefinitionList extends ProsemirrorCommand { constructor(ui2) { super( EditorCommandId.DefinitionList, [], (state, dispatch) => { const schema2 = state.schema; if (findParentNodeOfType_1(schema2.nodes.definition_list)(state.selection) || !canInsertNode(state, schema2.nodes.definition_list)) { return false; } if (dispatch) { const tr = state.tr; const termText = insertTermText(ui2); const term = schema2.text(termText); insertDefinitionList(tr, [ schema2.nodes.definition_list_term.createAndFill(null, term), createDefinitionDescription(schema2) ]); const start = state.selection.from; tr.setSelection(TextSelection.create(tr.doc, start, start + termText.length + 1)).scrollIntoView(); dispatch(tr); } return true; }, { name: ui2.context.translateText("Definition List"), description: ui2.context.translateText("List with a definition for each item"), group: OmniInsertGroup.Lists, priority: 3, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.definition_list_dark : ui2.images.omni_insert.definition_list } ); } } class InsertDefinitionListItemCommand extends ProsemirrorCommand { constructor(id2, createFn) { super(id2, [], (state, dispatch) => { const schema2 = state.schema; if (!findParentNodeOfType_1(schema2.nodes.definition_list)(state.selection)) { return false; } if (dispatch) { const tr = state.tr; const dlTypes = [schema2.nodes.definition_list_term, schema2.nodes.definition_list_description]; const parent = findParentNodeOfType_1(dlTypes)(state.selection); const insertPos = parent.pos + parent.node.nodeSize; const insertNode2 = createFn(); tr.insert(insertPos, insertNode2); if (insertNode2.textContent.length > 1) { tr.setSelection(TextSelection.create(tr.doc, insertPos, insertPos + insertNode2.textContent.length + 1)); } else { setTextSelection_1(insertPos, 1)(tr); } tr.scrollIntoView(); dispatch(tr); } return true; }); } } class InsertDefinitionTerm extends InsertDefinitionListItemCommand { constructor(schema2, ui2) { super(EditorCommandId.DefinitionTerm, () => { const term = schema2.text(insertTermText(ui2)); return schema2.nodes.definition_list_term.createAndFill({}, term); }); } } class InsertDefinitionDescription extends InsertDefinitionListItemCommand { constructor(schema2) { super(EditorCommandId.DefinitionDescription, () => { return createDefinitionDescription(schema2); }); } } function insertTermText(ui2) { return ui2.context.translateText("term"); } function createDefinitionDescription(schema2) { return schema2.nodes.definition_list_description.createAndFill({}, schema2.nodes.paragraph.create()); } function isOnlyChild(pos, depthOffset = 1) { return pos.node(pos.depth - depthOffset).childCount === 1; } function isLastChild(pos, depthOffset = 1) { return pos.index(pos.depth - depthOffset) === pos.node(pos.depth - depthOffset).childCount - 1; } function definitionListEnter() { return (state, dispatch) => { const schema2 = state.schema; const parentDL = findParentNodeOfType_1(schema2.nodes.definition_list)(state.selection); if (!parentDL) { return false; } if (!state.selection.empty) { return false; } const parentTerm = findParentNodeOfType_1(schema2.nodes.definition_list_term)(state.selection); if (parentTerm) { return termEnter(parentTerm, state, dispatch); } else if (isTrailingEmptyParagraph(state)) { if (dispatch) { endOfDescriptionEnter(state, dispatch); } return true; } else { return false; } }; } function definitionListBackspace() { return (state, dispatch) => { const schema2 = state.schema; const dlTypes = [schema2.nodes.definition_list_term, schema2.nodes.definition_list_description]; const parentTerm = findParentNodeOfType_1(dlTypes)(state.selection); if (!parentTerm) { return false; } if (parentTerm.node.type === schema2.nodes.definition_list_term) { if (parentTerm.node.childCount === 0) { if (dispatch) { emptyTermBackspace(state, dispatch); } return true; } } else { if (parentTerm.node.textContent.length === 0) { if (dispatch) { emptyDescriptionBackspace(parentTerm, state, dispatch); } return true; } } return false; }; } function definitionListTab() { return (state, dispatch) => { const schema2 = state.schema; const dlTypes = [schema2.nodes.definition_list_term, schema2.nodes.definition_list_description]; const parentTerm = findParentNodeOfType_1(dlTypes)(state.selection); if (!parentTerm) { return false; } if (dispatch) { const tr = state.tr; const advancePos = parentTerm.pos + parentTerm.node.nodeSize; setTextSelection_1(advancePos, 1)(tr).scrollIntoView(); dispatch(tr); } return true; }; } function definitionListShiftTab() { return (state, dispatch) => { const schema2 = state.schema; const dlTypes = [schema2.nodes.definition_list_term, schema2.nodes.definition_list_description]; const parentTerm = findParentNodeOfType_1(dlTypes)(state.selection); if (!parentTerm) { return false; } if (dispatch) { const tr = state.tr; const backwardPos = state.doc.resolve(parentTerm.pos - 1); const prevNode = findParentNodeOfTypeClosestToPos_1(backwardPos, dlTypes); if (prevNode) { setTextSelection_1(prevNode.start, 1)(tr).scrollIntoView(); } else { const listNode = findParentNodeOfType_1(schema2.nodes.definition_list)(tr.selection); setTextSelection_1(listNode.pos, -1)(tr).scrollIntoView(); } dispatch(tr); } return true; }; } function termEnter(term, state, dispatch) { const schema2 = state.schema; const $head = state.selection.$head; if (!state.selection.empty) { return false; } const isEmpty2 = term.node.textContent.length === 0; if (isEmpty2) { if (dispatch) { const tr = state.tr; tr.deleteRange(term.pos, term.pos + term.node.nodeSize); tr.replaceSelectionWith(schema2.nodes.paragraph.create()); setTextSelection_1(tr.mapping.map(state.selection.from), 1)(tr); dispatch(tr); } return true; } else { if ($head.parentOffset === 0) { if (dispatch) { const tr = state.tr; const insertPos = tr.selection.$head.before($head.depth); tr.insert(insertPos, schema2.nodes.definition_list_term.create()); dispatch(tr); } return true; } else if ($head.parentOffset === term.node.textContent.length) { if (dispatch) { const tr = state.tr; const insertPos = tr.selection.$head.after($head.depth); tr.insert( insertPos, schema2.nodes.definition_list_description.createAndFill({}, schema2.nodes.paragraph.create()) ); setTextSelection_1(insertPos, 1)(tr).scrollIntoView(); dispatch(tr); } return true; } } return false; } function emptyTermBackspace(state, dispatch) { const { $head } = state.selection; const tr = state.tr; if (isOnlyChild($head)) { const start = $head.start($head.depth - 1) - 1; tr.deleteRange(start, start + $head.node($head.depth - 1).nodeSize); } else { const start = $head.start($head.depth) - 1; tr.deleteRange(start, start + $head.node($head.depth).nodeSize); } dispatch(tr); } function endOfDescriptionEnter(state, dispatch) { const schema2 = state.schema; const { $head } = state.selection; const selectionNode = $head.node($head.depth); const tr = state.tr; let start = null; const descriptionNode = $head.node($head.depth - 1); if (descriptionNode.textContent.trim().length === 0) { start = $head.start($head.depth - 1) - 1; tr.deleteRange(start, start + descriptionNode.nodeSize); if (isLastChild($head, 2)) { const insertPos = tr.mapping.map($head.after($head.depth - 2)); tr.insert(insertPos, schema2.nodes.paragraph.create()); setTextSelection_1(insertPos, 1)(tr).scrollIntoView(); } } else { start = $head.start($head.depth) - 1; tr.deleteRange(start, start + selectionNode.nodeSize); start = tr.mapping.map(start); tr.insert(start + 1, schema2.nodes.definition_list_term.create()); setTextSelection_1(start, 1)(tr).scrollIntoView(); } dispatch(tr); } function emptyDescriptionBackspace(description, state, dispatch) { const tr = state.tr; tr.deleteRange(description.pos, description.pos + description.node.nodeSize); setTextSelection_1(description.pos, -1)(tr).scrollIntoView(); dispatch(tr); } function isTrailingEmptyParagraph(state) { const { $head } = state.selection; const selectionNode = $head.node($head.depth); const isParagraph = selectionNode.type === state.schema.nodes.paragraph; const isEmpty2 = selectionNode.textContent.trim().length === 0; return isParagraph && isEmpty2 && isLastChild($head); } function definitionInputRule() { return new InputRule(/^:[ ]+$/, (state, _match, start, end) => { const schema2 = state.schema; const { $head } = state.selection; const container = $head.node($head.depth - 1); const parent = $head.node($head.depth); if (parent.textContent.trim() !== ":") { return null; } if (container.type === schema2.nodes.definition_list_description && parent.type === schema2.nodes.paragraph) { const tr = state.tr; const startPos = $head.start($head.depth) - 1; tr.deleteRange(startPos, startPos + $head.node($head.depth).nodeSize); const insertPos = tr.mapping.map(startPos) + 1; tr.insert( insertPos, schema2.nodes.definition_list_description.createAndFill({}, schema2.nodes.paragraph.create()) ); setTextSelection_1(insertPos, 1)(tr).scrollIntoView(); return tr; } else if (container.type !== schema2.nodes.definition_list_description && isParagraphAfterParagraph(state)) { const prevPara = findParentNodeOfTypeClosestToPos_1(state.doc.resolve(start - 2), schema2.nodes.paragraph); if (prevPara) { const tr = state.tr; tr.deleteRange(prevPara.start, end); insertDefinitionList(tr, [ schema2.nodes.definition_list_term.createAndFill({}, prevPara.node.content), schema2.nodes.definition_list_description.createAndFill({}, schema2.nodes.paragraph.create()) ]); return tr; } else { return null; } } else { return null; } }); } function isParagraphAfterParagraph(state) { const schema2 = state.schema; const { $head } = state.selection; const selectionInParagraph = $head.node($head.depth).type === schema2.nodes.paragraph; if (!selectionInParagraph) { return false; } const parent = $head.node($head.depth - 1); const parentIndex = $head.index($head.depth - 1); return parentIndex > 0 && parent.child(parentIndex - 1).type === schema2.nodes.paragraph; } function readPandocDefinitionList(schema2) { return (writer, tok) => { writer.openNode(schema2.nodes.definition_list, {}); const definitions = tok.c; definitions.forEach((definition) => { const term = definition[0]; writer.openNode(schema2.nodes.definition_list_term, {}); writer.writeTokens(term); writer.closeNode(); const descriptions = definition[1]; descriptions.forEach((description) => { writer.openNode(schema2.nodes.definition_list_description, {}); writer.writeTokens(description); writer.closeNode(); }); }); writer.closeNode(); }; } function writePandocDefinitionList(output, node2) { output.writeToken(PandocTokenType.DefinitionList, () => { const currentDefinition = { descriptions: new Array() }; function writeCurrent() { if (currentDefinition.term) { output.writeArray(() => { output.writeNode(currentDefinition.term); output.writeArray(() => { currentDefinition.descriptions.forEach((description) => { output.writeNode(description); }); }); }); } } node2.forEach((child) => { if (child.type === child.type.schema.nodes.definition_list_term) { writeCurrent(); currentDefinition.term = child; currentDefinition.descriptions = []; } else { currentDefinition.descriptions.push(child); } }); writeCurrent(); }); } function writePandocDefinitionListTerm(output, node2) { output.writeArray(() => { output.writeInlines(node2.content); }); } function writePandocDefinitionListDescription(output, node2) { output.writeArray(() => { output.writeNodes(node2); }); } const definition_listStyles = ""; const extension$3 = (context) => { const { pandocExtensions, ui: ui2 } = context; if (!pandocExtensions.definition_lists) { return null; } return { nodes: [ { name: "definition_list_term", spec: { content: "inline*", isolating: true, parseDOM: [{ tag: "dt" }], toDOM() { return ["dt", { class: "pm-definition-term" }, 0]; } }, pandoc: { writer: writePandocDefinitionListTerm } }, { name: "definition_list_description", spec: { content: "block+", parseDOM: [{ tag: "dd" }], toDOM() { return ["dd", { class: "pm-definition-description pm-block-border-color pm-margin-bordered" }, 0]; } }, pandoc: { writer: writePandocDefinitionListDescription } }, { name: "definition_list", spec: { content: "(definition_list_term definition_list_description*)+", group: "block", defining: true, parseDOM: [{ tag: "dl" }], toDOM() { return ["dl", { class: "pm-definition-list" }, 0]; } }, pandoc: { readers: [ { token: PandocTokenType.DefinitionList, handler: readPandocDefinitionList } ], writer: writePandocDefinitionList } } ], commands: (schema2) => { return [ new InsertDefinitionList(ui2), new InsertDefinitionTerm(schema2, ui2), new InsertDefinitionDescription(schema2) ]; }, baseKeys: () => { return [ { key: BaseKey.Enter, command: definitionListEnter() }, { key: BaseKey.Backspace, command: definitionListBackspace() }, { key: BaseKey.Tab, command: definitionListTab() }, { key: BaseKey.ShiftTab, command: definitionListShiftTab() } ]; }, inputRules: () => { return [definitionInputRule()]; }, appendTransaction: () => { return [insertDefinitionListAppendTransaction()]; }, plugins: (schema2) => { return [emptyNodePlaceholderPlugin(schema2.nodes.definition_list_term, () => ui2.context.translateText("Term"))]; } }; }; class NodeIndex { constructor(doc2, predicate, index2, sorted = false) { __publicField(this, "doc"); __publicField(this, "predicate"); __publicField(this, "index"); this.doc = doc2; this.predicate = predicate; this.index = sorted ? index2 : index2.concat().sort((a2, b2) => a2.pos - b2.pos); } static create(predicate, doc2) { let index2 = []; if (predicate(doc2)) { index2.push({ node: doc2, pos: 0 }); } index2 = index2.concat(findChildren_1(doc2, predicate, true)); return new NodeIndex(doc2, predicate, index2, true); } get length() { return this.index.length; } getIndex(doc2) { if (doc2) { if (!this.doc.eq(doc2)) { throw new Error("Alignment error in NodeIndex#getIndex"); } } return this.index; } apply(t2) { if (!t2.before.eq(this.doc)) { throw new Error("Alignment error in NodeIndex#apply"); } let ni2 = this; for (let i2 = 0; i2 < t2.steps.length; i2++) { const oldDoc = t2.docs[i2]; const newDoc = i2 + 1 < t2.steps.length ? t2.docs[i2 + 1] : t2.doc; ni2 = ni2.doApply(t2.steps[i2], oldDoc, newDoc); } return ni2; } doApply(step2, _oldDoc, newDoc) { let newIndex = []; for (const nodeWithPos of this.index) { const result = step2.getMap().mapResult(nodeWithPos.pos); if (!result.deleted) { if (result.pos === nodeWithPos.pos) { newIndex.push(nodeWithPos); } else { newIndex.push({ node: nodeWithPos.node, pos: result.pos }); } } } step2.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => { traverseNodes(newDoc, newStart, newEnd, (node2, pos) => { if (pos >= newStart && pos < newEnd) { if (this.predicate(node2)) { newIndex.push({ node: node2, pos }); } } else { for (let i2 = 0; i2 < newIndex.length; i2++) { if (newIndex[i2].pos === pos) { newIndex[i2] = { node: node2, pos }; break; } } } return TraverseResult.Descend; }); }); newIndex.sort((a2, b2) => a2.pos - b2.pos); { const refIndex = NodeIndex.create(this.predicate, newDoc).getIndex(); if (JSON.stringify(refIndex) !== JSON.stringify(newIndex)) { console.error("NodeIndex corruption detected, this indicates a bug in NodeIndex.doApply!"); console.log(JSON.stringify(refIndex)); console.log(JSON.stringify(newIndex)); newIndex = refIndex.concat(); } } return new NodeIndex(newDoc, this.predicate, newIndex, true); } subtract(other, keyFn) { const otherLookup = /* @__PURE__ */ new Map(); other.index.forEach((x2) => { otherLookup.set(keyFn(x2), true); }); return new NodeIndex( this.doc, this.predicate, this.index.filter((x2) => !otherLookup.has(keyFn(x2))), true ); } intersect(other, keyFn) { const otherLookup = /* @__PURE__ */ new Map(); other.index.forEach((x2) => { otherLookup.set(keyFn(x2), true); }); return new NodeIndex( this.doc, this.predicate, this.index.filter((x2) => otherLookup.has(keyFn(x2))), true ); } filter(keep) { return new NodeIndex( this.doc, this.predicate, this.index.filter(keep), true ); } } const UserCommentPluginKey = new PluginKey("user-comment"); const UserCommentNodeCachePluginKey = new PluginKey("user-comment-node-cache"); const UserCommentViewPluginKey = new PluginKey("user-comment-view"); class UserCommentNodeCachePlugin extends Plugin { constructor(schema2) { super({ key: UserCommentNodeCachePluginKey, state: { init(_config, instance) { return NodeIndex.create( isCommentNode.bind(void 0, schema2), instance.doc ); }, apply(tr, value) { return value.apply(tr); } } }); } } function getUserCommentNodeCache(state) { return UserCommentNodeCachePluginKey.getState(state); } function getUserCommentNodePairs(schema2, cache) { const results = new Array(); const currentBeginTags = /* @__PURE__ */ new Map(); for (const node2 of cache.getIndex()) { const threadId = node2.node.attrs.threadId; let stack = currentBeginTags.get(threadId); if (isCommentBeginNode(schema2, node2.node)) { if (!stack) { stack = []; currentBeginTags.set(threadId, stack); } stack.push(node2); } else if (isCommentEndNode(schema2, node2.node)) { if (stack && stack.length > 0) { const beginTag = stack.pop(); results.push({ begin: beginTag, end: node2 }); } } } return results; } function isCommentNode(schema2, node2) { return isCommentBeginNode(schema2, node2) || isCommentEndNode(schema2, node2); } function isCommentBeginNode(schema2, node2) { return node2.type === schema2.nodes.user_comment_begin; } function isCommentEndNode(schema2, node2) { return node2.type === schema2.nodes.user_comment_end; } function userCommentBlocksToInlineFixup(schema2) { return (tr) => { function isBlockComment(node2) { return node2.type === schema2.nodes.paragraph && node2.attrs.synthetic && node2.childCount === 1 && (node2.firstChild.type === schema2.nodes.user_comment_begin || node2.firstChild.type === schema2.nodes.user_comment_end); } return trTransform(tr, (newActions) => { for (const { pos, node: node2 } of findChildren_1(tr.doc, isBlockComment, true)) { const commentNode = node2.firstChild; const mappedPos = newActions.mapping.mapResult(pos, 1); const mappedEnd = newActions.mapping.mapResult(pos + node2.nodeSize, 1); if (mappedPos.deleted) { continue; } if (mappedEnd.deleted) { throw new Error("During block comment fixup, mappedEnd was deleted"); } traverseNodes( newActions.doc, mappedEnd.pos, Infinity, (node22, pos2) => { if (node22.isText) { newActions.insert(pos2, [commentNode]); newActions.deleteRange(mappedPos.pos, mappedEnd.pos); tr.setMeta(UserCommentPluginKey, true); return TraverseResult.End; } else { return TraverseResult.Descend; } } ); } }); }; } function userCommentAppendTransaction(schema2, getId) { return function userCommentAppendTransactionImpl(transactions, _oldState, newState) { let newSteps = []; const newStateNodeIndex = getUserCommentNodeCache(newState); for (const transaction of transactions) { for (let i2 = 0; i2 < transaction.steps.length; i2++) { const step2 = transaction.steps[i2]; const oldDoc = transaction.docs[i2]; const newDoc = i2 + 1 === transaction.docs.length ? transaction.doc : transaction.docs[i2 + 1]; newSteps = newSteps.map((x2) => x2.map(step2.getMap())).filter((value) => !!value); if (transaction.getMeta(UserCommentPluginKey)) { continue; } if (transaction.getMeta("history$")) { continue; } step2.getMap().forEach((fromA, toA, fromB, toB) => { const removedBeginNodes = {}; const removedEndNodes = {}; const addedBeginNodes = {}; const addedEndNodes = {}; oldDoc.nodesBetween(fromA, toA, (node2, pos) => { if (node2.type === schema2.nodes.user_comment_begin) { removedBeginNodes[node2.attrs.threadId] = { pos, node: node2 }; } else if (node2.type === schema2.nodes.user_comment_end) { removedEndNodes[node2.attrs.threadId] = { pos, node: node2 }; } return true; }); newDoc.nodesBetween(fromB, toB, (node2, pos) => { if (node2.type === schema2.nodes.user_comment_begin) { if (removedBeginNodes[node2.attrs.threadId]) { delete removedBeginNodes[node2.attrs.threadId]; } else { addedBeginNodes[node2.attrs.threadId] = { pos, node: node2 }; } } else if (node2.type === schema2.nodes.user_comment_end) { if (removedEndNodes[node2.attrs.threadId]) { delete removedEndNodes[node2.attrs.threadId]; } else { addedEndNodes[node2.attrs.threadId] = { pos, node: node2 }; } } return true; }); function removeCommentNodeByPos(doc2, nodeType, pos) { const node2 = doc2.nodeAt(pos); if (node2.type !== nodeType) { throw new Error(`Assertion failure: Unexpected node type ${doc2.nodeAt(pos).type} when removing comment`); } return new ReplaceStep(pos, pos + node2.nodeSize, Slice.empty, false); } const removedBeginIds = diffKeys(removedBeginNodes, removedEndNodes); const removedEndIds = diffKeys(removedEndNodes, removedBeginNodes); const addedBothIds = intersectKeys(addedBeginNodes, addedEndNodes); const addedBeginIds = diffKeys(addedBeginNodes, addedEndNodes); const addedEndIds = diffKeys(addedEndNodes, addedBeginNodes); for (const id2 of removedBeginIds) { newSteps.push(new ReplaceStep(fromB, fromB, new Slice(Fragment.from(removedBeginNodes[id2].node), 0, 0))); } for (const id2 of removedEndIds) { newSteps.push(new ReplaceStep(toB, toB, new Slice(Fragment.from(removedEndNodes[id2].node), 0, 0))); } for (const id2 of addedBeginIds) { const node2 = addedBeginNodes[id2]; newSteps.push(removeCommentNodeByPos(newDoc, schema2.nodes.user_comment_begin, node2.pos)); } for (const id2 of addedEndIds) { const node2 = addedEndNodes[id2]; newSteps.push(removeCommentNodeByPos(newDoc, schema2.nodes.user_comment_end, node2.pos)); } for (const id2 of addedBothIds) { const { node: beginNode, pos: beginPos } = addedBeginNodes[id2]; const { node: endNode, pos: endPos } = addedEndNodes[id2]; const matches2 = newStateNodeIndex.filter(({ node: node2 }) => { return node2.type === schema2.nodes.user_comment_begin && node2.attrs.threadId === beginNode.attrs.threadId; }).length; if (matches2 < 2) { continue; } const newId = getId(); const beginNodeNew = extendAttrs(beginNode, { threadId: newId }); const endNodeNew = extendAttrs(endNode, { threadId: newId }); newSteps.push( new ReplaceStep(beginPos, beginPos + beginNode.nodeSize, new Slice(Fragment.from(beginNodeNew), 0, 0)) ); newSteps.push( new ReplaceStep(endPos, endPos + endNode.nodeSize, new Slice(Fragment.from(endNodeNew), 0, 0)) ); } }); } } const tr = newState.tr; tr.setMeta(UserCommentPluginKey, true); for (const step2 of newSteps) { if (step2) { const mappedStep = step2.map(tr.mapping); if (mappedStep) { tr.step(mappedStep); } } } outer: for (; ; ) { const cache = newStateNodeIndex.apply(tr); for (const { begin, end } of getUserCommentNodePairs(schema2, cache)) { const containsText = !!findOneNode( tr.doc, begin.pos + begin.node.nodeSize, end.pos, (node2) => node2.isText ); if (!containsText) { tr.deleteRange(end.pos, end.pos + end.node.nodeSize); tr.deleteRange(begin.pos, begin.pos + begin.node.nodeSize); continue outer; } } break; } return tr.docChanged ? tr : null; }; } function diffKeys(a2, b2) { const results = []; for (const key2 of Object.keys(a2)) { if (!b2[key2]) { results.push(key2); } } return results; } function intersectKeys(a2, b2) { const results = []; for (const key2 of Object.keys(a2)) { if (b2[key2]) { results.push(key2); } } return results; } function extendAttrs(node2, attrs) { return node2.type.createChecked( Object.assign({}, node2.attrs, attrs), node2.content, node2.marks ); } const kHTMLUserCommentBegin = /^<!--#([\w-]+)(\[[^<>]+?)-->$/; function parseFromHTMLComment(comment2) { const m1 = kHTMLUserCommentBegin.exec(comment2); if (!m1) { return null; } const comments = []; const reHTMLUserComment = /\[([\w-]+):"([^[\]]+)" at (\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{0,5})?(?:[-+]\d{2}:\d{2}|Z))\] ([^[]*)(?: |$)/y; const [, threadId, commentInner] = m1; while (reHTMLUserComment.lastIndex !== commentInner.length) { const m2 = reHTMLUserComment.exec(commentInner); if (!m2) { return null; } const [, commentId, author, iso8601, content] = m2; comments.push({ commentId: htmlUnescapeComment(commentId), author: htmlUnescapeComment(author), created: new Date(iso8601), content: htmlUnescapeComment(content) }); } if (comments.length === 0) { return null; } return { threadId: htmlUnescapeComment(threadId), comments }; } function formatAsHTMLComment(thread) { if (!isValidId(thread.threadId)) { throw new Error("Malformed comment thread id"); } const result = thread.comments.map((c) => { const commentId = c.commentId; const author = htmlEscapeComment(c.author); const created = c.created.toISOString(); const content = htmlEscapeComment(c.content); if (!isValidId(commentId) || author.length === 0) { throw new Error("Malformed comment"); } return `[${commentId}:"${author}" at ${created}] ${content}`; }).join(" "); return `<!--#${thread.threadId}${result}-->`; } function isValidId(str2) { return /^[\w-]+$/.test(str2); } function htmlEscapeComment(str2) { return str2.replace(/[<>&"\r\n]/g, (m2) => { switch (m2) { case "<": return "<"; case ">": return ">"; case "&": return "&"; case '"': return """; case "\r": return " "; case "\n": return " "; case "#": return "#"; case "[": return "["; case "]": return "]"; } throw new Error(`Unexpected character ${m2}`); }); } function htmlUnescapeComment(html2) { return new DOMParser().parseFromString(html2, "text/html").documentElement.textContent; } function createCommentId() { return randomAlphanumeric(8); } function createCommentItemNode(schema2, author) { const commentId = createCommentId(); return schema2.nodes.user_comment_item.create({ commentId, author, created: null, content: "", provisional: true }); } function findCommentThread(threadId, state) { const cache = getUserCommentNodeCache(state); let begin; let end; cache.getIndex().forEach((nodeWithPos) => { if (nodeWithPos.node.attrs.threadId === threadId) { if (nodeWithPos.node.type === state.schema.nodes.user_comment_begin) { begin = nodeWithPos; } else if (nodeWithPos.node.type === state.schema.nodes.user_comment_end) { end = nodeWithPos; } } }); if (!!begin !== !!end) { begin = void 0; end = void 0; } return [begin, end]; } function deleteCommentThread(threadId, state, dispatch) { const [begin, end] = findCommentThread(threadId, state); if (!begin || !end) { return false; } if (begin.pos >= end.pos) { throw new Error("Comment thread begin was not earlier than comment thread end!"); } if (dispatch) { const tr = state.tr; tr.delete(end.pos, end.pos + end.node.nodeSize); tr.delete(begin.pos, begin.pos + begin.node.nodeSize); tr.setMeta(UserCommentPluginKey, true); dispatch(tr); } return true; } function findCommentItem(commentId, thread, state) { const threadNode = resolveThread(thread, state); if (!threadNode) { return null; } let commentNode = null; traverseNodes( state.doc, threadNode.pos + 1, threadNode.pos + threadNode.node.nodeSize - 1, (node2, pos) => { if (node2.type === state.schema.nodes.user_comment_item) { if (node2.attrs.commentId === commentId) { commentNode = { node: node2, pos }; } } } ); return commentNode; } function saveComment(commentId, threadId, content, state, dispatch) { const [begin, end] = findCommentThread(threadId, state); if (!begin || !end) { return false; } const commentItem = findCommentItem(commentId, begin, state); if (!commentItem) { return false; } if (dispatch) { const tr = state.tr; tr.setMeta(UserCommentPluginKey, true); if (begin.node.attrs.provisional) { setNodeAttrs(tr, begin, { provisional: void 0 }); } if (end.node.attrs.provisional) { setNodeAttrs(tr, end, { provisional: void 0 }); } if (commentItem.node.attrs.provisional) { setNodeAttrs(tr, commentItem, { provisional: void 0, created: new Date() }); } if (content) { tr.insertText(content, commentItem.pos + 1, commentItem.pos + commentItem.node.nodeSize - 1); } else { tr.delete(commentItem.pos + 1, commentItem.pos + commentItem.node.nodeSize - 1); } dispatch(tr); } return true; } function deleteComment(commentId, thread, state, dispatch) { const threadNode = resolveThread(thread, state); if (!threadNode) { return false; } const commentItem = findCommentItem(commentId, threadNode, state); if (!commentItem) { return false; } if (dispatch) { if (threadNode.node.childCount > 1) { const tr = state.tr; tr.delete(commentItem.pos, commentItem.pos + commentItem.node.nodeSize); dispatch(tr); } else { deleteCommentThread(threadNode.node.attrs.threadId, state, dispatch); } } return true; } function resolveThread(thread, state) { if (typeof thread === "string") { const [threadNode] = findCommentThread(thread, state); return threadNode; } else { const foundNode = state.doc.nodeAt(thread.pos); if (foundNode && foundNode.eq(thread.node)) { return thread; } else { return resolveThread(thread.node.attrs.threadId, state); } } } function getThreadElement(threadId) { return document.getElementById(createThreadIdAttr(threadId)); } function createThreadIdAttr(commentId) { return `comment-thread-view-${commentId}`; } function createCommentIdAttr(commentId) { return `comment-item-view-${commentId}`; } function focusComment(threadId, commentId) { const selector = [ `[id='${createThreadIdAttr(threadId)}'].pm-user-comment-view`, `[id='${createCommentIdAttr(commentId)}'].pm-user-comment-item`, ".pm-user-comment-content" ]; const el2 = document.querySelector(selector.join(" ")); if (el2) { el2.focus(); } } function synchronizeCommentViewPositions(view) { const schema2 = view.state.schema; return () => { const topOfDocument = view.coordsAtPos(0).top + scrollPos(view).top; const cache = getUserCommentNodeCache(view.state); if (cache.length === 0) { return; } const head = view.state.selection.head; const comments = getUserCommentNodePairs(schema2, cache); const activeThreads = comments.filter(({ begin, end }) => begin.pos <= head && end.pos + end.node.nodeSize >= head).map(({ begin }) => begin); const activeThreadId = activeThreads.length > 0 ? activeThreads[activeThreads.length - 1].node.attrs.threadId : null; layoutCommentViews(comments.map(({ begin }) => begin), activeThreadId, view, topOfDocument); }; } function layoutCommentViews(threads, activeThreadId, view, topOfDocument) { const kPadding = 12; const container = document.querySelector("div.pm-annotations"); if (!container) { return; } const layoutSpecs = new Array(); let activeThreadIndex = -1; for (const thread of threads) { const threadId = thread.node.attrs.threadId; const satelliteEl = getThreadElement(threadId); if (!satelliteEl) { continue; } if (threadId === activeThreadId) { activeThreadIndex = layoutSpecs.length; satelliteEl.classList.add("pm-user-comment-active"); } else { satelliteEl.classList.remove("pm-user-comment-active"); } layoutSpecs.push({ el: satelliteEl, height: satelliteEl.getBoundingClientRect().height, idealTop: view.coordsAtPos(thread.pos).top - topOfDocument, actualTop: void 0, finalTop: void 0 }); } layoutSpecs.reduce((minTop, layoutSpec) => { layoutSpec.actualTop = Math.max(minTop, layoutSpec.idealTop); return layoutSpec.actualTop + layoutSpec.height + kPadding; }, -Infinity); if (activeThreadIndex >= 0) { const active = layoutSpecs[activeThreadIndex]; active.finalTop = active.idealTop; const commentsAbove = layoutSpecs.slice(0, activeThreadIndex); const commentsBelow = layoutSpecs.slice(activeThreadIndex + 1); commentsAbove.reduceRight( (maxBottom, layoutSpec) => { layoutSpec.finalTop = Math.min(maxBottom - layoutSpec.height, layoutSpec.actualTop); return layoutSpec.finalTop - kPadding; }, active.finalTop - kPadding ); commentsBelow.reduce( (minTop, layoutSpec) => { layoutSpec.finalTop = Math.max(minTop, layoutSpec.idealTop); return layoutSpec.finalTop + layoutSpec.height + kPadding; }, active.finalTop + active.height + kPadding ); } layoutSpecs.forEach((layoutSpec) => { layoutSpec.el.style.top = layoutSpec.actualTop + "px"; if (layoutSpec.finalTop) { layoutSpec.el.style.transform = `translateY(${layoutSpec.finalTop - layoutSpec.actualTop}px)`; } else { layoutSpec.el.style.transform = ""; } }); } function scrollPos(view) { var _a; const node2 = (_a = view.domAtPos(0)) == null ? void 0 : _a.node; if ((node2 == null ? void 0 : node2.nodeType) !== Node.ELEMENT_NODE) { return { top: 0, left: 0 }; } const scrollEl = editorScrollContainer(node2); return { top: scrollEl.scrollTop, left: scrollEl.scrollLeft }; } var index$2 = react.exports.useLayoutEffect; var useLatest = function useLatest2(value) { var ref = react.exports.useRef(value); index$2(function() { ref.current = value; }); return ref; }; var updateRef = function updateRef2(ref, value) { if (typeof ref === "function") { ref(value); return; } ref.current = value; }; var useComposedRef = function useComposedRef2(libRef, userRef) { var prevUserRef = react.exports.useRef(); return react.exports.useCallback(function(instance) { libRef.current = instance; if (prevUserRef.current) { updateRef(prevUserRef.current, null); } prevUserRef.current = userRef; if (!userRef) { return; } updateRef(userRef, instance); }, [userRef]); }; var HIDDEN_TEXTAREA_STYLE = { "min-height": "0", "max-height": "none", height: "0", visibility: "hidden", overflow: "hidden", position: "absolute", "z-index": "-1000", top: "0", right: "0" }; var forceHiddenStyles = function forceHiddenStyles2(node2) { Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(function(key2) { node2.style.setProperty(key2, HIDDEN_TEXTAREA_STYLE[key2], "important"); }); }; var hiddenTextarea = null; var getHeight = function getHeight2(node2, sizingData) { var height = node2.scrollHeight; if (sizingData.sizingStyle.boxSizing === "border-box") { return height + sizingData.borderSize; } return height - sizingData.paddingSize; }; function calculateNodeHeight(sizingData, value, minRows, maxRows) { if (minRows === void 0) { minRows = 1; } if (maxRows === void 0) { maxRows = Infinity; } if (!hiddenTextarea) { hiddenTextarea = document.createElement("textarea"); hiddenTextarea.setAttribute("tabindex", "-1"); hiddenTextarea.setAttribute("aria-hidden", "true"); forceHiddenStyles(hiddenTextarea); } if (hiddenTextarea.parentNode === null) { document.body.appendChild(hiddenTextarea); } var paddingSize = sizingData.paddingSize, borderSize = sizingData.borderSize, sizingStyle = sizingData.sizingStyle; var boxSizing = sizingStyle.boxSizing; Object.keys(sizingStyle).forEach(function(_key) { var key2 = _key; hiddenTextarea.style[key2] = sizingStyle[key2]; }); forceHiddenStyles(hiddenTextarea); hiddenTextarea.value = value; var height = getHeight(hiddenTextarea, sizingData); hiddenTextarea.value = "x"; var rowHeight = hiddenTextarea.scrollHeight - paddingSize; var minHeight = rowHeight * minRows; if (boxSizing === "border-box") { minHeight = minHeight + paddingSize + borderSize; } height = Math.max(minHeight, height); var maxHeight = rowHeight * maxRows; if (boxSizing === "border-box") { maxHeight = maxHeight + paddingSize + borderSize; } height = Math.min(maxHeight, height); return [height, rowHeight]; } var noop = function noop2() { }; var pick = function pick2(props, obj) { return props.reduce(function(acc, prop2) { acc[prop2] = obj[prop2]; return acc; }, {}); }; var SIZING_STYLE = [ "borderBottomWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "boxSizing", "fontFamily", "fontSize", "fontStyle", "fontWeight", "letterSpacing", "lineHeight", "paddingBottom", "paddingLeft", "paddingRight", "paddingTop", "tabSize", "textIndent", "textRendering", "textTransform", "width", "wordBreak" ]; var isIE = !!document.documentElement.currentStyle; var getSizingData = function getSizingData2(node2) { var style = window.getComputedStyle(node2); if (style === null) { return null; } var sizingStyle = pick(SIZING_STYLE, style); var boxSizing = sizingStyle.boxSizing; if (boxSizing === "") { return null; } if (isIE && boxSizing === "border-box") { sizingStyle.width = parseFloat(sizingStyle.width) + parseFloat(sizingStyle.borderRightWidth) + parseFloat(sizingStyle.borderLeftWidth) + parseFloat(sizingStyle.paddingRight) + parseFloat(sizingStyle.paddingLeft) + "px"; } var paddingSize = parseFloat(sizingStyle.paddingBottom) + parseFloat(sizingStyle.paddingTop); var borderSize = parseFloat(sizingStyle.borderBottomWidth) + parseFloat(sizingStyle.borderTopWidth); return { sizingStyle, paddingSize, borderSize }; }; var useWindowResizeListener = function useWindowResizeListener2(listener) { var latestListener = useLatest(listener); react.exports.useLayoutEffect(function() { var handler = function handler2(event) { latestListener.current(event); }; window.addEventListener("resize", handler); return function() { window.removeEventListener("resize", handler); }; }, []); }; var TextareaAutosize = function TextareaAutosize2(_ref, userRef) { var cacheMeasurements = _ref.cacheMeasurements, maxRows = _ref.maxRows, minRows = _ref.minRows, _ref$onChange = _ref.onChange, onChange = _ref$onChange === void 0 ? noop : _ref$onChange, _ref$onHeightChange = _ref.onHeightChange, onHeightChange = _ref$onHeightChange === void 0 ? noop : _ref$onHeightChange, props = _objectWithoutPropertiesLoose(_ref, ["cacheMeasurements", "maxRows", "minRows", "onChange", "onHeightChange"]); var isControlled = props.value !== void 0; var libRef = react.exports.useRef(null); var ref = useComposedRef(libRef, userRef); var heightRef = react.exports.useRef(0); var measurementsCacheRef = react.exports.useRef(); var resizeTextarea = function resizeTextarea2() { var node2 = libRef.current; var nodeSizingData = cacheMeasurements && measurementsCacheRef.current ? measurementsCacheRef.current : getSizingData(node2); if (!nodeSizingData) { return; } measurementsCacheRef.current = nodeSizingData; var _calculateNodeHeight = calculateNodeHeight(nodeSizingData, node2.value || node2.placeholder || "x", minRows, maxRows), height = _calculateNodeHeight[0], rowHeight = _calculateNodeHeight[1]; if (heightRef.current !== height) { heightRef.current = height; node2.style.setProperty("height", height + "px", "important"); onHeightChange(height, { rowHeight }); } }; var handleChange = function handleChange2(event) { if (!isControlled) { resizeTextarea(); } onChange(event); }; { react.exports.useLayoutEffect(resizeTextarea); useWindowResizeListener(resizeTextarea); } return /* @__PURE__ */ react.exports.createElement("textarea", _extends$5({}, props, { onChange: handleChange, ref })); }; var index$1 = /* @__PURE__ */ react.exports.forwardRef(TextareaAutosize); const TextareaAutosize$1 = index$1; function usePrevious(value) { const ref = react.exports.useRef(); react.exports.useEffect(() => { ref.current = value; }); return ref.current; } const ContentPanel = (props) => { const contentEl = React.createRef(); const inputChangeListener = (e2) => { props.onCommentChange(e2.target.value || ""); }; const keydownListener = (e2) => { e2.stopPropagation(); }; react.exports.useEffect(() => { contentEl.current.addEventListener("keydown", keydownListener); if (props.editable) { contentEl.current.focus(); } return () => { contentEl.current.removeEventListener("keydown", keydownListener); }; }, []); const prevEditable = usePrevious(props.editable); react.exports.useEffect(() => { if (props.editable && !prevEditable) { contentEl.current.focus(); } }, [props.editable]); return /* @__PURE__ */ React.createElement( TextareaAutosize$1, { ref: contentEl, className: "pm-user-comment-content", disabled: !props.editable, value: props.content, onChange: inputChangeListener, onHeightChange: props.onHeightChange, cacheMeasurements: true } ); }; function CommentContainer(props) { const [pendingContent, setPendingContent] = react.exports.useState(""); const [dirty, setDirty] = react.exports.useState(!!props.draft); const [editing, setEditing] = react.exports.useState(!!props.draft); react.exports.useEffect(() => { if (editing) { props.onCommentEditingChanged(true); } }, []); const containerRef = react.exports.useRef(null); const handleOK = () => { props.onCommentChange(pendingContent); setDirty(false); setEditing(false); props.onCommentEditingChanged(false); containerRef.current.focus(); }; const handleCancel = () => { setDirty(false); setEditing(false); props.onCommentEditingChanged(false); containerRef.current.focus(); props.onCommentChangeCancel(); }; const handleCommentChange2 = (content) => { if (!dirty) { setDirty(true); } setPendingContent(content); }; const handleHeightChange = () => { props.onHeightChange(); }; const handleBeginEditing = () => { if (!props.readonly) { setEditing(true); } props.onCommentEditingChanged(true); }; const handleDelete = () => { props.onCommentDelete(); props.onCommentEditingChanged(false); }; const containerId = createCommentIdAttr(props.commentId); const containerClass = "pm-user-comment-item" + (dirty ? " dirty" : ""); return /* @__PURE__ */ React.createElement("div", { ref: containerRef, id: containerId, className: containerClass, tabIndex: 0 }, /* @__PURE__ */ React.createElement("div", { className: "pm-user-comment-header" }, /* @__PURE__ */ React.createElement("div", { className: "pm-user-comment-meta" }, /* @__PURE__ */ React.createElement("div", { className: "pm-user-comment-actions" }, !props.readonly && /* @__PURE__ */ React.createElement("button", { className: "pm-user-comment-edit" + (editing ? " active" : ""), onClick: handleBeginEditing }), /* @__PURE__ */ React.createElement("button", { className: "pm-user-comment-delete", onClick: handleDelete })), /* @__PURE__ */ React.createElement("div", { className: "pm-user-comment-author" }, props.author), props.created && /* @__PURE__ */ React.createElement("div", { className: "pm-user-comment-created" }, props.created.toLocaleString()))), /* @__PURE__ */ React.createElement( ContentPanel, { content: dirty ? pendingContent : props.content, editable: !props.readonly && editing, onCommentChange: handleCommentChange2, onHeightChange: handleHeightChange } ), editing && /* @__PURE__ */ React.createElement("div", { className: "pm-user-comment-footer" }, /* @__PURE__ */ React.createElement("button", { onClick: handleOK, disabled: !dirty || !pendingContent }, "Save"), /* @__PURE__ */ React.createElement("button", { onClick: handleCancel }, "Cancel"))); } function CommentThreadContainer({ node: node2, view, ...props }) { const [editingComments, setEditingComments] = react.exports.useState([]); const handleCommentEditingChanged = (commentId, isEditing) => { const newValue = editingComments.filter((x2) => x2 !== commentId); if (isEditing) { newValue.push(commentId); } setEditingComments(newValue); }; const commentItems = findChildrenByType_1(node2, view.state.schema.nodes.user_comment_item); const commentIds = commentItems.map((comment2) => comment2.node.attrs.commentId); const hasEditingChild = editingComments.filter((x2) => { return commentIds.indexOf(x2) >= 0; }).length > 0; return /* @__PURE__ */ React.createElement("div", { ref: props.callback, className: "pm-user-comment-thread " + (hasEditingChild ? " active" : "") }, commentItems.map((x2) => { const commentId = x2.node.attrs.commentId; return /* @__PURE__ */ React.createElement( CommentContainer, { key: x2.node.attrs.commentId, commentId, author: x2.node.attrs.author, content: x2.node.textContent, draft: x2.node.attrs.provisional, readonly: props.username !== x2.node.attrs.author, onCommentChange: handleCommentChange.bind(null, node2, view, commentId), onCommentDelete: handleCommentDelete.bind(null, node2, view, commentId), onCommentChangeCancel: handleCommentChangeCancel.bind(props, node2, view, commentId), onCommentEditingChanged: handleCommentEditingChanged.bind(null, commentId), onHeightChange: props.onHeightChange.bind(props, commentId) } ); }), /* @__PURE__ */ React.createElement( "button", { className: "pm-user-comment-add", onClick: onAddComment.bind(null, node2, view, props.username) } )); } function handleCommentChange(node2, view, commentId, content) { saveComment(commentId, node2.attrs.threadId, content, view.state, view.dispatch); } function handleCommentDelete(node2, view, commentId) { deleteComment(commentId, node2.attrs.threadId, view.state, view.dispatch); } function handleCommentChangeCancel(node2, view, commentId) { const commentNode = findCommentItem(commentId, node2.attrs.threadId, view.state); if (commentNode && commentNode.node.attrs.provisional) { deleteComment(commentId, node2.attrs.threadId, view.state, view.dispatch); } const syncCommentViewPos = synchronizeCommentViewPositions(view); setTimeout(syncCommentViewPos, 0); } function onAddComment(node2, view, author) { const [threadBegin] = findCommentThread(node2.attrs.threadId, view.state); if (!threadBegin) { return; } const tr = view.state.tr; const newComment = createCommentItemNode(view.state.schema, author); tr.insert(threadBegin.pos + threadBegin.node.nodeSize - 1, newComment); view.dispatch(tr); return; } function currentUsername(ui2) { return ui2.getUsername ? ui2.getUsername() : "norah.jones"; } class UserCommentViewPlugin extends Plugin { constructor(schema2, ui2) { super({ key: UserCommentViewPluginKey, props: { nodeViews: { annotations(_node, view) { const div2 = document.createElement("div"); div2.classList.add("pm-annotations"); while (pendingElements.length) { div2.appendChild(pendingElements.shift()); } div2.addEventListener("focus", synchronizeCommentViewPositions(view), true); div2.addEventListener("blur", synchronizeCommentViewPositions(view), true); onNodeAttached(div2, document, () => { window.dispatchEvent(new Event("resize")); }); return { dom: div2, ignoreMutation: () => true }; }, user_comment_begin(node2, view, _getPos, decorations, innerDecorations) { const el2 = document.createElement("div"); const root2 = createRoot(el2); el2.classList.add("pm-user-comment-view"); el2.id = createThreadIdAttr(node2.attrs.threadId); el2.style.position = "absolute"; el2.style.zIndex = "1000"; el2.style.top = "-10000px"; const annotationEl = document.querySelector("div.pm-annotations"); if (annotationEl) { annotationEl.appendChild(el2); } else { pendingElements.push(el2); } const inlineEl = document.createElement("span"); inlineEl.style.textDecoration = "underline"; const syncCommentViewPos = synchronizeCommentViewPositions(view); function handleHeightChange() { syncCommentViewPos(); } const nodeView = { dom: inlineEl, contentDOM: null, update(newNode) { if (newNode.type !== schema2.nodes.user_comment_begin) { return false; } el2.id = createThreadIdAttr(newNode.attrs.threadId); node2 = newNode; const username = currentUsername(ui2.context); root2.render( /* @__PURE__ */ React.createElement( CommentThreadContainer, { node: newNode, view, username, onHeightChange: handleHeightChange, callback: syncCommentViewPos } ) ); return true; }, destroy() { root2.unmount(); el2.remove(); } }; nodeView.update(node2, decorations, innerDecorations); return nodeView; } } } }); const pendingElements = []; } } const user_commentStyles = ""; const kHTMLUserCommentEnd = /^<!--\/#([\w-]+)-->$/; const extension$2 = (context) => { const { pandocExtensions, events, ui: ui2, options } = context; if (!options.commenting) { return null; } if (!pandocExtensions.raw_html) { return null; } return { view: (view) => { events.subscribe(LayoutEvent, synchronizeCommentViewPositions(view)); events.subscribe(ScrollEvent, synchronizeCommentViewPositions(view)); }, nodes: [ { name: "user_comment_begin", spec: { inline: true, selectable: false, defining: true, skip: true, content: "user_comment_item+", attrs: { threadId: { default: "" }, provisional: { default: false } }, group: "inline", parseDOM: [ { tag: "span.pm-user-comment.pm-user-comment-begin", getAttrs(dom) { const el2 = dom; return { threadId: el2.getAttribute("data-thread-id") }; } } ], toDOM(node2) { const attr = { class: "pm-user-comment pm-user-comment-begin", "data-thread-id": node2.attrs.threadId }; return ["span", attr, 0]; } }, pandoc: { inlineHTMLReader: readPandocUserCommentBegin, writer(output, node2) { if (node2.attrs.provisional) { return; } const comments = []; node2.content.forEach((n2) => { if (n2.type.name === "user_comment_item") { if (!n2.attrs.provisional) { comments.push({ commentId: n2.attrs.commentId, author: n2.attrs.author, created: n2.attrs.created, content: n2.textContent }); } } }); const htmlComment = formatAsHTMLComment({ threadId: node2.attrs.threadId, comments }); output.writeRawMarkdown(htmlComment); } } }, { name: "user_comment_item", spec: { inline: true, selectable: false, defining: true, skip: true, content: "text*", attrs: { commentId: { default: "unknown" }, author: { default: "" }, created: { default: null }, provisional: { default: void 0 } }, parseDOM: [ { tag: `span.pm-user-comment-item`, getAttrs(dom) { const el2 = dom; return { commentId: el2.getAttribute("data-comment-id"), author: el2.getAttribute("data-author"), created: new Date(el2.getAttribute("data-created")), content: el2.getAttribute("data-content") }; }, getContent(node2, schema2) { const content = []; if (node2.textContent) { content.push(schema2.text(node2.textContent)); } return Fragment.from(content); } } ], toDOM(node2) { const attr = { class: "pm-user-comment-item", "data-comment-id": node2.attrs.commentId, "data-author": node2.attrs.author, "data-created": node2.attrs.created.toISOString(), "data-content": node2.attrs.content }; return ["span", attr, 0]; } }, pandoc: {} }, { name: "user_comment_end", spec: { inline: true, selectable: false, skip: true, attrs: { threadId: { default: -1 }, provisional: { default: false } }, group: "inline", parseDOM: [ { tag: "span.pm-user-comment.pm-user-comment-end", getAttrs(dom) { const el2 = dom; return { threadId: el2.getAttribute("data-thread-id") }; } } ], toDOM(node2) { const attr = { class: "pm-user-comment pm-user-comment-end", "data-thread-id": node2.attrs.threadId }; return ["span", attr]; } }, pandoc: { inlineHTMLReader: readPandocUserCommentEnd, writer(output, node2) { if (node2.attrs.provisional) { return; } const threadId = htmlEscape$1(node2.attrs.threadId); const str2 = `<!--/#${threadId}-->`; output.writeRawMarkdown(str2); } } } ], commands(schema2) { return [new InsertUserCommentCommand(schema2, ui2)]; }, plugins(schema2) { return [ new UserCommentNodeCachePlugin(schema2), new InsertUserCommentPlugin(schema2, ui2), new UserCommentPlugin(schema2), new UserCommentViewPlugin(schema2, ui2) ]; }, fixups(schema2) { return [ userCommentBlocksToInlineFixup(schema2) ]; } }; }; function readPandocUserCommentBegin(schema2, html2, writer) { const commentThread = parseFromHTMLComment(html2); if (!commentThread) { return false; } if (writer) { const threadAttr = { threadId: commentThread.threadId }; writer.openNode(schema2.nodes.user_comment_begin, threadAttr); for (const comment2 of commentThread.comments) { const attr = { commentId: comment2.commentId, author: comment2.author, created: comment2.created }; writer.openNode(schema2.nodes.user_comment_item, attr); writer.writeText(comment2.content); writer.closeNode(); } writer.closeNode(); } return true; } function readPandocUserCommentEnd(schema2, html2, writer) { const m2 = kHTMLUserCommentEnd.exec(html2); if (!m2) { return false; } if (writer) { let [, threadId] = m2; threadId = htmlUnescapeComment(threadId); writer.openNode(schema2.nodes.user_comment_end, { threadId }); writer.closeNode(); } return true; } class InsertUserCommentPlugin extends Plugin { constructor(_schema, ui2) { super({ state: { init() { return DecorationSet.empty; }, apply: (tr) => { if (tr.selection.empty) { return DecorationSet.empty; } else { return DecorationSet.create(tr.doc, [ Decoration.widget( tr.selection.from - 1, createInsertButton.bind(void 0, ui2), { key: "insert-comment-button", ignoreSelection: true } ) ]); } } }, props: { decorations: (state) => { return this.getState(state); } } }); } } function createInsertButton(ui2, view) { const insertButton = document.createElement("a"); insertButton.className = "pm-insert-user-comment-button"; insertButton.innerHTML = "💬"; insertButton.title = "Add comment"; insertButton.onclick = (e2) => { if (view) { insertUserComment(ui2, view.state, view.dispatch); } e2.preventDefault(); e2.stopPropagation(); return false; }; return insertButton; } class InsertUserCommentCommand extends ProsemirrorCommand { constructor(_schema, ui2) { super(EditorCommandId.UserComment, ["Shift-Mod-c"], (state, dispatch) => { return insertUserComment(ui2, state, dispatch); }, void 0, false); } } function insertUserComment(ui2, state, dispatch) { if (state.selection.empty) { return false; } if (dispatch) { const newThreadId = createCommentId(); const commentItem = createCommentItemNode(state.schema, currentUsername(ui2.context)); const commentBegin = state.schema.nodes.user_comment_begin.create( { threadId: newThreadId, provisional: true }, commentItem ); const commentEnd = state.schema.nodes.user_comment_end.create( { threadId: newThreadId, provisional: true } ); const tr = state.tr; tr.insert(state.selection.to, commentEnd); tr.insert(tr.mapping.map(state.selection.from), commentBegin); tr.setMeta(UserCommentPluginKey, true); dispatch(tr); focusComment(newThreadId, commentItem.attrs.commentId); } return true; } class UserCommentPlugin extends Plugin { constructor(schema2) { super({ key: UserCommentPluginKey, state: { init(_config, instance) { return createCommentDecorators(instance, schema2); }, apply: (tr, old, _oldState, newState) => { if (!tr.docChanged) { return old; } return createCommentDecorators(newState, schema2); } }, props: { decorations: (state) => { return UserCommentPluginKey.getState(state); } }, appendTransaction: userCommentAppendTransaction(schema2, createCommentId) }); } } function createCommentDecorators(state, schema2) { const start = /* @__PURE__ */ new Map(); const end = /* @__PURE__ */ new Map(); const nodeIndex = getUserCommentNodeCache(state); nodeIndex.getIndex(state.doc).forEach(({ node: node2, pos }) => { if (node2.type === schema2.nodes.user_comment_begin || node2.type === schema2.nodes.user_comment_begin_block) { start.set(node2.attrs.threadId, pos + node2.nodeSize); } else if (node2.type === schema2.nodes.user_comment_end) { end.set(node2.attrs.threadId, pos); } return true; }); let decorations = DecorationSet.empty; start.forEach((pos, threadId) => { const startPos = pos; const endPos = end.get(threadId); if (typeof endPos !== "undefined") { decorations = decorations.add(state.doc, [Decoration.inline(startPos, endPos, { class: "pm-comment-background-color" }, { inclusiveStart: true, inclusiveEnd: true })]); } }); return decorations; } function htmlEscape$1(str2) { return str2.replace(/[<>&"\r\n]/g, (m2) => { switch (m2) { case "<": return "<"; case ">": return ">"; case "&": return "&"; case '"': return """; case "\r": return " "; case "\n": return " "; } throw new Error(`Unexpected character ${m2}`); }); } const extension$1 = (context) => { const { format: format2, ui: ui2 } = context; if (!format2.hugoExtensions.shortcodes) { return null; } return { nodes: [ { name: "shortcode_block", spec: { ...codeNodeSpec(), attrs: {}, parseDOM: [ { tag: "div[class*='shortcode-block']", preserveWhitespace: "full" } ], toDOM() { return ["div", { class: "shortcode-block pm-fixedwidth-font pm-code-block pm-markup-text-color" }, 0]; } }, code_view: { lang: () => "text", borderColorClass: "pm-raw-block-border" }, attr_edit: () => ({ type: (schema2) => schema2.nodes.shortcode_block, tags: () => ["shortcode"], editFn: () => () => false }), pandoc: { blockReader: (schema2, tok, writer) => { if (isParaWrappingShortcode(tok)) { const text2 = stringifyTokens(tok.c); writer.addNode(schema2.nodes.shortcode_block, {}, [schema2.text(text2)]); return true; } else { return false; } }, blockCapsuleFilter: shortcodeBlockCapsuleFilter(), writer: (output, node2) => { output.writeToken(PandocTokenType.Para, () => { output.writeRawMarkdown(node2.content); }); } } } ], commands: (schema2) => { if (!format2.docTypes.includes(kHugoDocType) && !format2.docTypes.includes(kQuartoDocType)) { return []; } return [ new ProsemirrorCommand( EditorCommandId.Shortcode, [], (state, dispatch) => { if (!canInsertNode(state, schema2.nodes.shortcode_block)) { return false; } if (dispatch) { const tr = state.tr; const shortcode = "{{< >}}"; const shortcodeNode = schema2.nodes.shortcode_block.create({}, schema2.text(shortcode)); tr.replaceSelectionWith(shortcodeNode); setTextSelection_1(tr.mapping.map(state.selection.from) - shortcode.length / 2 - 1)(tr); dispatch(tr); } return true; }, { name: ui2.context.translateText("Shortcode"), description: ui2.context.translateText("Shortcode command"), group: OmniInsertGroup.Blocks, priority: 5, image: () => ui2.prefs.darkMode() ? ui2.images.omni_insert.generic : ui2.images.omni_insert.generic, selectionOffset: 4 } ) ]; } }; }; function isParaWrappingShortcode(tok) { if (tok.t === PandocTokenType.Para) { const children = tok.c; if (tok.c.length > 1) { const [first, second] = tok.c; const firstText = first.t === PandocTokenType.Str ? first.c : second.c; if (typeof firstText === "string" && firstText.startsWith("{{<")) { const text2 = stringifyTokens(children).trim(); const match2 = text2.match(kShortcodeRegEx); if (match2 && match2[0] === text2) { return true; } else { return false; } } } } return false; } function shortcodeBlockCapsuleFilter() { const kShortcodeBlockCapsuleType = "B65B58FD-D707-4C30-8C97-3D99ACF9A157".toLowerCase(); return { type: kShortcodeBlockCapsuleType, match: /^([\t >]*)(\{\{<\s+([^\/][^\t ]+).*?>\}\}[ \t]*\n(?![ \t]*\n)[\W\w]*?\n[\t >]*\{\{<\s+\/\3\s+>\}\})([ \t]*)$/gm, extract: (_match, p1, p2, _p3, p4) => { return { prefix: p1, source: p2, suffix: p4 }; }, enclose: (capsuleText) => { return capsuleText; }, handleText: blockCapsuleTextHandler( kShortcodeBlockCapsuleType, encodedBlockCapsuleRegex(void 0, void 0, "gm") ), handleToken: blockCapsuleParagraphTokenHandler(kShortcodeBlockCapsuleType), writeNode: (schema2, writer, capsule) => { const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix); writer.addNode(schema2.nodes.shortcode_block, {}, [schema2.text(source)]); } }; } const extension = () => { return { nodes: [ { name: "html_preserve", spec: { ...codeNodeSpec(), attrs: {}, parseDOM: [ { tag: "div[class*='pm-html-preserve']", preserveWhitespace: "full" } ], toDOM() { return ["div", { class: "pm-html-preserve pm-fixedwidth-font pm-code-block pm-markup-text-color" }, 0]; } }, code_view: { lang: () => "html", borderColorClass: "pm-raw-block-border" }, attr_edit: () => ({ type: (schema2) => schema2.nodes.html_preserve, tags: () => ["html_preserve"], editFn: () => () => false }), pandoc: { blockCapsuleFilter: htmlPreserveBlockCapsuleFilter(), writer: (output, node2) => { output.writeToken(PandocTokenType.Para, () => { output.writeRawMarkdown(node2.content); }); } } } ] }; }; function htmlPreserveBlockCapsuleFilter() { const kHtmlPreserveBlockCapsuleType = "83CFCBF3-0429-4822-AAC6-D6F31591AEA8".toLowerCase(); return { type: kHtmlPreserveBlockCapsuleType, match: /^([\t >]*)(<!--html_preserve-->[\W\w]*?<!--\/html_preserve-->)([ \t]*)$/gm, extract: (_match, p1, p2, p3) => { return { prefix: p1, source: p2, suffix: p3 }; }, enclose: (capsuleText) => { return capsuleText; }, handleText: blockCapsuleTextHandler( kHtmlPreserveBlockCapsuleType, encodedBlockCapsuleRegex(void 0, void 0, "gm") ), handleToken: blockCapsuleParagraphTokenHandler(kHtmlPreserveBlockCapsuleType), writeNode: (schema2, writer, capsule) => { const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix); writer.addNode(schema2.nodes.html_preserve, {}, [schema2.text(source)]); } }; } class AceRenderQueue { constructor(events) { __publicField(this, "renderQueue", []); __publicField(this, "renderCompleted", false); __publicField(this, "renderTimer", 0); __publicField(this, "updateTimer", 0); __publicField(this, "container"); __publicField(this, "needsSort", true); __publicField(this, "bypass", 5); __publicField(this, "observer"); __publicField(this, "visible", true); __publicField(this, "subscriptions", []); this.subscriptions.push( events.subscribe(ScrollEvent, () => { this.onScroll(); }) ); this.subscriptions.push( events.subscribe(UpdateEvent, () => { this.onUpdate(); }) ); } setContainer(container) { if (this.container === container) { return; } if (this.observer) { this.observer.disconnect(); } this.container = container; this.observer = new IntersectionObserver( (entries) => { var _a; for (const entry of entries) { if (entry.isIntersecting && !this.visible) { this.visible = true; this.processRenderQueue(); } if (!entry.isIntersecting && this.visible) { if ((_a = this.container) == null ? void 0 : _a.parentElement) { this.visible = false; this.cancelTimer(); } } } }, { root: null } ); this.observer.observe(container); } onScroll() { this.needsSort = true; if (!this.visible && this.container && this.container.offsetHeight > 0) { this.visible = true; this.processRenderQueue(); } } onUpdate() { if (this.updateTimer !== 0) { window.clearTimeout(this.updateTimer); } this.updateTimer = window.setTimeout(() => { this.updateTimer = 0; this.scheduleRender(0); }, 1e3); } hasContainer() { if (this.container) { return true; } return false; } isRenderCompleted() { return this.renderCompleted; } add(view) { if (this.bypass > 0) { this.bypass--; view.initEditor(); return; } this.renderQueue.push(view); if (this.renderTimer === 0) { this.scheduleRender(0); } } processRenderQueue() { if (this.renderQueue.length === 0) { return; } if (!this.visible) { return; } if (this.updateTimer !== 0) { return; } let offset = 0; if (this.container) { offset = this.container.scrollTop; } if (this.needsSort) { this.renderQueue.sort((a2, b2) => { return Math.abs(a2.dom.offsetTop - offset) - Math.abs(b2.dom.offsetTop - offset); }); this.needsSort = false; } let view; while ((view === null || view === void 0 || view.getPos() === void 0) && this.renderQueue.length > 0) { view = this.renderQueue.shift(); } if (view) { view.initEditor(); } if (this.renderQueue.length > 0) { let delayMs = 1e3; if (this.container) { const distance = Math.abs(this.renderQueue[0].dom.offsetTop - offset); if (distance < this.container.offsetHeight * 2) { delayMs = 0; } } this.scheduleRender(delayMs); } else { this.renderCompleted = true; this.destroy(); } } cancelTimer() { if (this.renderTimer !== 0) { window.clearTimeout(this.renderTimer); this.renderTimer = 0; } } scheduleRender(delayMs) { this.cancelTimer(); this.renderTimer = window.setTimeout(() => { this.processRenderQueue(); this.renderTimer = 0; }, delayMs); } destroy() { this.cancelTimer(); if (this.updateTimer !== 0) { window.clearTimeout(this.updateTimer); } this.subscriptions.forEach((unsub) => unsub()); if (this.observer) { this.observer.disconnect(); } } } class AcePlaceholder { constructor(content) { __publicField(this, "element"); const ele = document.createElement("pre"); ele.innerText = content; ele.className = "ace_editor"; this.element = ele; } getElement() { return this.element; } } const ace = ""; const plugin = new PluginKey("ace"); function aceExtension(codeViews) { return (context) => { if (!context.ui.chunks) { return null; } const aceRenderQueue = new AceRenderQueue(context.events); const aceNodeViews = new CodeEditorNodeViews(); const nodeTypes = Object.keys(codeViews); const nodeViews = {}; nodeTypes.forEach((name) => { nodeViews[name] = (node2, view, getPos) => { return new AceNodeView( node2, view, getPos, context, context.ui.chunks, codeViews[name], aceRenderQueue, aceNodeViews ); }; }); const activeAceNodeViewCommand = (fn) => { return (_state, dispatch) => { const activeView = aceNodeViews.activeNodeView(); if (!activeView) { return false; } if (dispatch) { fn(activeView); } return true; }; }; return { plugins: () => [ new Plugin({ key: plugin, props: { nodeViews, handleDOMEvents: { click: aceNodeViews.handleClick.bind(aceNodeViews) } } }), keymap({ ArrowLeft: codeViewArrowHandler("left", nodeTypes), ArrowRight: codeViewArrowHandler("right", nodeTypes), ArrowUp: codeViewArrowHandler("up", nodeTypes), ArrowDown: codeViewArrowHandler("down", nodeTypes) }) ], commands: () => [ new ProsemirrorCommand(EditorCommandId.ExpandChunk, [], activeAceNodeViewCommand((nodeView) => { nodeView.setExpanded(true); })), new ProsemirrorCommand(EditorCommandId.CollapseChunk, [], activeAceNodeViewCommand((nodeView) => { nodeView.setExpanded(false); })) ] }; }; } class QueuedSelection { constructor(anchor, head) { this.anchor = anchor; this.head = head; } } class AceNodeView { constructor(node2, view, getPos, context, chunks, options, renderQueue, nodeViews) { __publicField(this, "getPos"); __publicField(this, "node"); __publicField(this, "dom"); __publicField(this, "view"); __publicField(this, "chunks"); __publicField(this, "nodeViews"); __publicField(this, "renderQueue"); __publicField(this, "chunk"); __publicField(this, "aceEditor"); __publicField(this, "editSession"); __publicField(this, "options"); __publicField(this, "find"); __publicField(this, "events"); __publicField(this, "updating"); __publicField(this, "escaping"); __publicField(this, "gapCursorPending"); __publicField(this, "mouseDown"); __publicField(this, "mode"); __publicField(this, "findMarkers"); __publicField(this, "selectionMarker"); __publicField(this, "queuedSelection"); __publicField(this, "resizeTimer"); __publicField(this, "renderedWidth"); __publicField(this, "scrollRow"); __publicField(this, "cursorDirty"); __publicField(this, "subscriptions"); this.node = node2; this.view = view; this.chunks = chunks; this.find = context.find; this.events = context.events; this.getPos = getPos; this.mode = ""; this.escaping = false; this.gapCursorPending = false; this.findMarkers = []; this.selectionMarker = null; this.renderQueue = renderQueue; this.nodeViews = nodeViews; this.queuedSelection = null; this.subscriptions = []; this.resizeTimer = 0; this.renderedWidth = 0; this.scrollRow = -1; this.cursorDirty = false; this.mouseDown = false; this.options = options; this.dom = document.createElement("div"); this.dom.classList.add("pm-code-editor"); this.dom.classList.add("pm-ace-editor"); this.dom.classList.add("pm-ace-editor-inactive"); this.dom.classList.add(options.borderColorClass || "pm-block-border-color"); if (this.options.classes) { this.options.classes.forEach((className) => this.dom.classList.add(className)); } const preview = new AcePlaceholder(node2.textContent); this.dom.appendChild(preview.getElement()); if (options.firstLineMeta) { this.dom.classList.add("pm-ace-first-line-meta"); } this.updateMode(); this.subscriptions.push( this.events.subscribe(DispatchEvent, (tr) => { if (tr) { this.onEditorDispatch(tr); } }) ); this.updating = false; if (renderQueue.isRenderCompleted()) { this.initEditor(); } else { renderQueue.add(this); } this.nodeViews.add(this); } destroy() { this.subscriptions.forEach((unsub) => unsub()); if (this.chunk) { this.chunk.destroy(); } this.nodeViews.remove(this); } update(node2) { if (node2.type !== this.node.type) { return false; } if (!this.editSession) { return false; } this.node = node2; this.updateMode(); const AceRange = window.require("ace/range").Range; const doc2 = this.editSession.getDocument(); const change = computeChange(this.editSession.getValue(), node2.textContent); if (change) { this.updating = true; const range2 = AceRange.fromPoints(doc2.indexToPosition(change.from, 0), doc2.indexToPosition(change.to, 0)); this.editSession.replace(range2, change.text); this.updating = false; } this.findMarkers.forEach((id2) => { if (this.editSession) { this.editSession.removeMarker(id2); } }); this.findMarkers = []; const decorations = this.find.decorations(); if (decorations) { const decos = decorations == null ? void 0 : decorations.find(this.getPos(), this.getPos() + node2.nodeSize - 1); if (decos) { decos.forEach((deco) => { if (!this.editSession) { return; } const markerFrom = doc2.indexToPosition(deco.from - this.getPos(), 0); markerFrom.column--; const markerTo = doc2.indexToPosition(deco.to - this.getPos(), 0); markerTo.column--; const range2 = AceRange.fromPoints(markerFrom, markerTo); const markerId = this.editSession.addMarker(range2, deco.type.attrs.class, "result", true); this.findMarkers.push(markerId); }); } } if (this.chunk && this.findMarkers.length > 0) { this.chunk.setExpanded(true); } return true; } setSelection(anchor, head) { if (!this.aceEditor || !this.editSession) { this.queuedSelection = new QueuedSelection(anchor, head); return; } if (!this.escaping && !this.gapCursorPending) { this.aceEditor.focus(); } this.updating = true; const doc2 = this.editSession.getDocument(); const AceRange = window.require("ace/range").Range; const range2 = AceRange.fromPoints(doc2.indexToPosition(anchor, 0), doc2.indexToPosition(head, 0)); this.editSession.getSelection().setSelectionRange(range2); this.updating = false; } setGapCursorPending(pending) { this.gapCursorPending = pending; } isFocused() { return this.aceEditor && this.aceEditor.isFocused(); } setExpanded(expanded) { if (this.chunk) { this.chunk.setExpanded(expanded); } } getExpanded() { if (this.chunk) { return this.chunk.getExpanded(); } else { return false; } } selectNode() { if (this.aceEditor) { this.aceEditor.focus(); } } stopEvent() { return true; } ignoreMutation() { return true; } onEditorDispatch(tr) { if (!tr.docChanged && tr.selectionSet) { this.highlightSelectionAcross(tr.selection); } } forwardSelection() { if (!this.chunk || !this.chunk.element.contains(window.document.activeElement)) { return; } const state = this.view.state; const selection = this.asProseMirrorSelection(state.doc); if (selection && !selection.eq(state.selection)) { this.view.dispatch(state.tr.setSelection(selection)); } } asProseMirrorSelection(doc2) { if (!this.editSession) { return null; } const offset = this.getPos() + 1; const session = this.editSession; const range2 = session.getSelection().getRange(); const anchor = session.getDocument().positionToIndex(range2.start, 0) + offset; const head = session.getDocument().positionToIndex(range2.end, 0) + offset; return TextSelection.create(doc2, anchor, head); } highlightSelectionAcross(selection) { if (!this.aceEditor || !this.editSession) { return; } if (this.selectionMarker !== null) { this.editSession.removeMarker(this.selectionMarker); this.selectionMarker = null; } const pos = this.getPos(); if (selection.from < pos && selection.to > pos + this.node.nodeSize) { const doc2 = this.editSession.getDocument(); const AceRange = window.require("ace/range").Range; const range2 = AceRange.fromPoints(doc2.indexToPosition(0, 0), doc2.indexToPosition(this.node.nodeSize - 1, 0)); this.selectionMarker = this.editSession.addMarker(range2, "pm-selected-text", "selection", true); } } valueChanged() { const change = computeChange(this.node.textContent, this.getContents()); if (change) { const start = this.getPos() + 1; if (!isNaN(start)) { const tr = this.view.state.tr.replaceWith( start + change.from, start + change.to, change.text ? this.node.type.schema.text(change.text) : [] ); this.view.dispatch(tr); } } this.updateMode(); } scrollIntoView(ele) { scrollCodeViewElementIntoView(ele, this.dom, this.view); } initEditor() { if (this.aceEditor) { return; } this.chunk = this.chunks.createChunkEditor("ace", this.dom, this.node.attrs.md_index, this.node.attrs.classes, { getPos: () => this.getPos(), scrollIntoView: (ele) => this.scrollIntoView(ele), scrollCursorIntoView: () => this.scrollCursorIntoView(), getTextContent: () => this.node.textContent }); this.aceEditor = this.chunk.editor; this.updating = true; this.aceEditor.setValue(this.node.textContent); this.updating = false; this.aceEditor.clearSelection(); this.editSession = this.aceEditor.getSession(); this.dom.innerHTML = ""; this.dom.appendChild(this.chunk.element); this.aceEditor.on("changeSelection", () => { if (!this.updating) { this.forwardSelection(); } }); this.aceEditor.on("change", () => { if (!this.updating) { this.valueChanged(); } }); this.aceEditor.on("focus", () => { this.dom.classList.remove("pm-ace-editor-inactive"); this.forwardSelection(); }); this.aceEditor.on("blur", () => { this.dom.classList.add("pm-ace-editor-inactive"); }); this.aceEditor.getSelection().on("changeCursor", () => { if (this.dom.contains(document.activeElement) && !this.mouseDown) { this.cursorDirty = true; } }); this.aceEditor.renderer.on("afterRender", () => { if (this.cursorDirty && !this.mouseDown) { this.scrollCursorIntoView(); this.cursorDirty = false; } }); this.aceEditor.commands.addCommand({ name: "leftEscape", bindKey: "Left", exec: () => { this.arrowMaybeEscape("char", -1, "gotoleft"); }, readOnly: true }); this.aceEditor.commands.addCommand({ name: "rightEscape", bindKey: "Right", exec: () => { if (this.chunk && !this.chunk.getExpanded()) { this.chunk.setExpanded(true); return; } this.arrowMaybeEscape("char", 1, "gotoright"); }, readOnly: true }); this.aceEditor.commands.addCommand({ name: "upEscape", bindKey: "Up", exec: () => { this.arrowMaybeEscape("line", -1, "golineup"); }, readOnly: true }); this.aceEditor.commands.addCommand({ name: "downEscape", bindKey: "Down", exec: () => { this.arrowMaybeEscape("line", 1, "golinedown"); }, readOnly: true }); this.aceEditor.commands.addCommand({ name: "backspaceDeleteNode", bindKey: "Backspace", exec: () => { this.backspaceMaybeDeleteNode(); } }); this.aceEditor.commands.addCommand({ name: "undoProsemirror", bindKey: { win: "Ctrl-Z", mac: "Command-Z" }, exec: () => { if (undo(this.view.state, this.view.dispatch)) { this.view.focus(); } } }); this.aceEditor.commands.addCommand({ name: "redoProsemirror", bindKey: { win: "Ctrl-Shift-Z|Ctrl-Y", mac: "Command-Shift-Z|Command-Y" }, exec: () => { if (redo(this.view.state, this.view.dispatch)) { this.view.focus(); } } }); this.aceEditor.commands.addCommand({ name: "selectAllProsemirror", bindKey: { win: "Ctrl-A", mac: "Command-A" }, exec: () => { if (selectAll(this.view.state, this.view.dispatch, this.view)) { this.view.focus(); } } }); this.aceEditor.commands.addCommand({ name: "exitCodeBlock", bindKey: "Shift-Enter", exec: () => { if (exitCode(this.view.state, this.view.dispatch)) { this.view.focus(); } } }); this.aceEditor.commands.addCommand({ name: "insertParagraph", bindKey: { win: "Ctrl-\\", mac: "Command-\\" }, exec: () => { if (insertParagraph(this.view.state, this.view.dispatch)) { this.view.focus(); } } }); this.aceEditor.commands.addCommand({ name: "executeSelection", bindKey: { win: "Ctrl-Enter", mac: "Ctrl-Enter|Command-Enter" }, exec: () => { if (this.chunk && this.aceEditor) { const pos = this.aceEditor.getCursorPosition(); this.chunk.executeSelection(); if (pos.row === this.aceEditor.getCursorPosition().row) { this.arrowMaybeEscape("line", 1); } } } }); if (this.options.attrEditFn) { this.aceEditor.commands.addCommand({ name: "editAttributes", bindKey: "F4", exec: () => { this.options.attrEditFn(this.view.state, this.view.dispatch, this.view); } }); } if (this.mode) { this.chunk.setMode(this.mode); } this.aceEditor.renderer.on("afterRender", () => { if (this.chunk) { this.renderedWidth = this.chunk.element.offsetWidth; } window.setTimeout(() => { if (this.aceEditor) { const metrics = this.aceEditor.renderer.$fontMetrics; if (metrics && metrics.$observer) { metrics.$observer.disconnect(); } } }, 0); }); const editingRoot = editingRootNode(this.view.state.selection); const container = this.view.nodeDOM(editingRoot.pos); if (container.parentElement) { this.renderQueue.setContainer(container); } if (this.queuedSelection) { this.setSelection(this.queuedSelection.anchor, this.queuedSelection.head); this.queuedSelection = null; } this.subscriptions.push( this.events.subscribe(ResizeEvent, () => { this.debounceResize(); }) ); this.subscriptions.push( this.events.subscribe(ScrollEvent, () => { this.scrollRow = -1; }) ); this.dom.addEventListener("mousedown", () => { this.mouseDown = true; }); this.dom.addEventListener("mouseup", () => { this.mouseDown = false; }); this.dom.addEventListener("mouseleave", () => { this.mouseDown = false; }); } debounceResize() { if (this.resizeTimer !== 0) { window.clearTimeout(this.resizeTimer); } this.resizeTimer = window.setTimeout(() => { if (this.chunk && this.aceEditor) { if (this.renderedWidth !== this.chunk.element.offsetWidth) { this.aceEditor.resize(); } } this.resizeTimer = 0; }, 500); } updateMode() { const lang2 = this.options.lang(this.node, this.getContents()); if (lang2 !== null && this.mode !== lang2) { if (this.chunk) { this.chunk.setMode(lang2); } this.mode = lang2; } } backspaceMaybeDeleteNode() { if (this.node.childCount === 0) { if (undoInputRule(this.view.state)) { undoInputRule(this.view.state, this.view.dispatch); this.view.focus(); } else { const tr = this.view.state.tr; tr.delete(this.getPos(), this.getPos() + this.node.nodeSize); tr.setSelection(TextSelection.near(tr.doc.resolve(this.getPos()), -1)); this.view.dispatch(tr); this.view.focus(); } } else if (this.aceEditor) { this.aceEditor.execCommand("backspace"); } } arrowMaybeEscape(unit, dir, command) { if (!this.aceEditor || !this.editSession) { return; } const pos = this.aceEditor.getCursorPosition(); const lastrow = this.editSession.getLength() - 1; if (this.getExpanded() && (!this.aceEditor.getSelection().isEmpty() || pos.row !== (dir < 0 ? 0 : lastrow) || unit === "char" && pos.column !== (dir < 0 ? 0 : this.editSession.getDocument().getLine(pos.row).length))) { if (command) { this.aceEditor.execCommand(command); } return; } this.escaping = true; this.view.focus(); handleArrowToAdjacentNode(this.getPos(), dir, this.view.state, this.view.dispatch); this.view.focus(); this.escaping = false; } getContents() { if (this.editSession) { return this.editSession.getValue(); } else { return this.dom.innerText; } } scrollCursorIntoView() { if (this.editSession && this.editSession.getSelection().getCursor().row === this.scrollRow) { return; } if (this.dom.contains(document.activeElement)) { const cursor2 = this.dom.querySelector(".ace_cursor"); if (cursor2 === null) { return; } const editingRoot = editingRootNode(this.view.state.selection); const container = this.view.nodeDOM(editingRoot.pos); const containerRect = container.getBoundingClientRect(); const cursorRect = cursor2.getBoundingClientRect(); const down = cursorRect.bottom + 10 - containerRect.bottom; if (down > 0) { container.scrollTop += down; } else { const up = containerRect.top + 10 - cursorRect.top; if (up > 0) { container.scrollTop -= up; } } if (this.editSession) { this.scrollRow = this.editSession.getSelection().getCursor().row; } } } } function computeChange(oldVal, newVal) { if (oldVal === newVal) { return null; } let start = 0; let oldEnd = oldVal.length; let newEnd = newVal.length; while (start < oldEnd && oldVal.charCodeAt(start) === newVal.charCodeAt(start)) { ++start; } while (oldEnd > start && newEnd > start && oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)) { oldEnd--; newEnd--; } return { from: start, to: oldEnd, text: newVal.slice(start, newEnd) }; } class AttrEditCommand extends ProsemirrorCommand { constructor(ui2, format2, pandocExtensions, editors) { super(EditorCommandId.AttrEdit, [kEditAttrShortcut], attrEditCommandFn(ui2, format2, pandocExtensions, editors)); } } function attrEditCommandFn(ui2, format2, pandocExtensions, editors) { return (state, dispatch, view) => { if (editMathAttributesEnabled(format2, state)) { return editMathAttributes(ui2)(state, dispatch, view); } const marks = state.storedMarks || state.selection.$head.marks(); const mark = marks.find((m2) => pandocAttrInSpec(m2.type.spec)); let node2 = null; let pos = 0; if (state.selection instanceof NodeSelection && pandocAttrInSpec(state.selection.node.type.spec)) { node2 = state.selection.node; pos = state.selection.$anchor.pos; } else { const nodeTypes = editors.map((editor) => editor.type(state.schema)); const parentWithAttrs = findParentNodeOfType_1(nodeTypes)(state.selection); if (parentWithAttrs) { node2 = parentWithAttrs.node; pos = parentWithAttrs.pos; } } if (!mark && !node2) { return false; } if (node2) { const editor = editors.find((ed2) => ed2.type(state.schema) === node2.type); if (editor && editor.editFn) { return editor.editFn()(state, dispatch, view); } } async function asyncEditAttrs() { if (dispatch) { if (mark) { await editMarkAttrs(mark, state, dispatch, ui2); } else { await editNodeAttrs(pos, node2, state, dispatch, ui2, pandocExtensions); } if (view) { view.focus(); } } } asyncEditAttrs(); return true; }; } function attrEditNodeCommandFn(nodeWithPos, ui2, pandocExtensions, editors) { return (state, dispatch, view) => { const { node: node2, pos } = nodeWithPos; const editor = editors.find((ed2) => ed2.type(state.schema) === node2.type); if (editor && editor.editFn) { return editor.editFn()(state, dispatch, view); } async function asyncEditAttrs() { if (dispatch) { await editNodeAttrs(pos, node2, state, dispatch, ui2, pandocExtensions); if (view) { view.focus(); } } } asyncEditAttrs(); return true; }; } async function editMarkAttrs(mark, state, dispatch, ui2) { const attrs = mark.attrs; const markType = mark.type; const result = await ui2.dialogs.editAttr({ ...attrs }); if (result) { const tr = state.tr; const range2 = getSelectionMarkRange(state.selection, markType); tr.removeMark(range2.from, range2.to, markType); tr.addMark( range2.from, range2.to, markType.create({ ...attrs, ...result.attr }) ); dispatch(tr); } } async function editNodeAttrs(pos, node2, state, dispatch, ui2, pandocExtensions) { if (node2) { const attrs = node2.attrs; const result = await ui2.dialogs.editAttr({ ...attrs }, idHint(node2, pandocExtensions)); if (result) { const tr = state.tr; const targetNode = tr.doc.nodeAt(pos); if (targetNode) { tr.setNodeMarkup(pos, targetNode.type, { ...attrs, ...result.attr }), dispatch(tr); } } } } function idHint(node2, pandocExtensions) { if (node2.type === node2.type.schema.nodes.heading) { const unemoji = pandocExtensions.gfm_auto_identifiers; const text2 = `sec-${fragmentText(node2.content, unemoji)}`; if (pandocExtensions.gfm_auto_identifiers) { return gfmAutoIdentifier(text2, pandocExtensions.ascii_identifiers); } else { return pandocAutoIdentifier(text2, pandocExtensions.ascii_identifiers); } } else { return void 0; } } function attrEditExtension(pandocExtensions, ui2, format2, editors) { const hasAttr = pandocAttrEnabled(pandocExtensions) || hasFencedCodeBlocks(pandocExtensions); return { commands: () => { if (hasAttr) { return [new AttrEditCommand(ui2, format2, pandocExtensions, editors)]; } else { return []; } }, plugins: () => { if (hasAttr) { return [new AttrEditDecorationPlugin(ui2, pandocExtensions, editors)]; } else { return []; } } }; } const key$1 = new PluginKey("attr_edit_decoration"); class AttrEditDecorationPlugin extends Plugin { constructor(ui2, pandocExtensions, editors) { const decoratorForNode = (editor, selection, node2, pos) => { const range2 = { from: pos, to: pos + node2.nodeSize }; if (editor.preferHidden && !pandocAttrAvailable(node2.attrs, !editor.noKeyvalueTags) && !selectionIsWithinRange(selection, range2)) { return void 0; } editor.tags = editor.tags || ((editorNode) => { const attrTags = []; if (editorNode.attrs.id) { attrTags.push(`#${editorNode.attrs.id}`); } if (editorNode.attrs.classes && editorNode.attrs.classes.length) { attrTags.push(`${editorNode.attrs.classes.map((clz) => "." + clz).join(" ")}`); } if (!editor.noKeyvalueTags && editorNode.attrs.keyvalue && editorNode.attrs.keyvalue.length) { attrTags.push(`${editorNode.attrs.keyvalue.map( (kv) => kv[0] + '="' + (kv[1] || "1") + '"' ).join(" ")} `); } return attrTags; }); editor.offset = editor.offset || { top: 0, right: 0 }; const editFn = attrEditNodeCommandFn( { node: node2, pos }, ui2, pandocExtensions, editors ); return attrEditDecorationWidget({ pos, tags: editor.tags(node2), editFn, ui: ui2, offset: editor.offset, preferHidden: editor.preferHidden }); }; function decoratorsForDoc(state) { const decorations = []; const nodeTypes = editors.map((ed2) => ed2.type(state.schema)); findChildren_1(state.doc, (node2) => nodeTypes.includes(node2.type), true).forEach((attrNode) => { const editor = editors.find((ed2) => ed2.type(state.schema) === attrNode.node.type); if (!editor.noDecorator) { const decorator = decoratorForNode(editor, state.selection, attrNode.node, attrNode.pos); if (decorator) { decorations.push(decorator); } } }); return DecorationSet.create(state.doc, decorations); } super({ key: key$1, state: { init: (_config, state) => { return decoratorsForDoc(state); }, apply: (tr, set2, oldState, newState) => { if (tr.getMeta(kSetMarkdownTransaction) || tr.getMeta(kThemeChangedTransaction)) { return decoratorsForDoc(newState); } const schema2 = newState.schema; const nodeTypes = editors.map((ed2) => ed2.type(schema2)); set2 = set2.map(tr.mapping, tr.doc); if (transactionsAreTypingChange([tr])) { return set2; } if (tr.selectionSet) { const preferHiddenDecorators = set2.find(void 0, void 0, (spec) => !!spec.preferHidden); for (const dec of preferHiddenDecorators) { const node2 = newState.doc.nodeAt(dec.from); if (node2 && !pandocAttrAvailable(node2.attrs)) { if (!selectionIsWithinRange( tr.selection, { from: dec.from, to: dec.from + node2.nodeSize } )) { set2 = set2.remove([dec]); } } } const $head = tr.selection.$head; for (let i2 = 1; i2 <= $head.depth; i2++) { const parentWithAttrs = { node: $head.node(i2), pos: $head.before(i2) }; if (!nodeTypes.includes(parentWithAttrs.node.type)) { continue; } const { pos, node: node2 } = parentWithAttrs; const editor = editors.find((ed2) => ed2.type(schema2) === parentWithAttrs.node.type); if ((editor == null ? void 0 : editor.preferHidden) && set2.find(pos, pos).length === 0) { const decorator = decoratorForNode(editor, tr.selection, node2, pos); if (decorator) { set2 = set2.add(tr.doc, [decorator]); } } } } if (!tr.docChanged && !tr.storedMarksSet) { return set2; } forChangedNodes( oldState, newState, (node2) => nodeTypes.includes(node2.type), (node2, pos) => { const removeDecorations = set2.find(pos, pos); if (removeDecorations.length > 0) { set2 = set2.remove(removeDecorations); } const editor = editors.find((ed2) => ed2.type(schema2) === node2.type); if (!editor.noDecorator) { const decorator = decoratorForNode(editor, newState.selection, node2, pos); if (decorator) { set2 = set2.add(tr.doc, [decorator]); } } } ); return set2; } }, props: { decorations: (state) => { return key$1.getState(state); } } }); } } function initExtensions(context, extensions, codeViewExtension) { const manager = new ExtensionManager(context); manager.register([ extension$W, extension$V, extension$U, extension$T, extension$Q, extension$S, extension$O, extension$P, extension$N, extension$M, extension$L, extension$K, extension$J, extension$I, extension$H, extension$G, extension$F, extension$E, extension$Y, extension$X, extension$D, extension$o ]); manager.register([ behaviorSmarty, behaviorAttrDuplicateId, extension$A, extension$z, extension$y, extension$Z, extension$x, extension$w, extension$v, extension$u, extension$s, extension$r, extension$q, extension$p, extension$R, extension$9, extension$7, extension$6, extension$4, extension$3, extension$5, extension$8, extension$2, extension$1, extension, markUnderline, markStrikeout, markSuperscript, markSubscript, markSmallcaps, extension$b, extension$h, extension$g, extension$i, extension$f, extension$e, extension$d, extension$c, extension$a, extension$t, markOmniInsert ]); if (extensions) { manager.register(extensions); } manager.register([ attrEditExtension(context.pandocExtensions, context.ui, context.format, manager.attrEditors()) ]); const codeViews = manager.codeViews(); const plugins = []; if (context.options.codeEditor === "ace" && context.ui.chunks) { codeViewExtension = aceExtension; } if (codeViewExtension) { manager.register([codeViewExtension(codeViews)]); } plugins.push(codeViewClipboardPlugin(codeViews)); manager.registerPlugins(plugins); return manager; } class ExtensionManager { constructor(context) { __publicField(this, "context"); __publicField(this, "extensions"); __publicField(this, "applyTransaction_"); this.context = context; this.extensions = []; } register(extensions, priority = false) { extensions.forEach((extension2) => { const ext = typeof extension2 === "function" ? extension2(this.context) : extension2; if (ext) { if (priority) { this.extensions.unshift(ext); } else { this.extensions.push(ext); } if (ext == null ? void 0 : ext.applyTransaction) { if (this.applyTransaction_) { throw new Error("Only one applyTransaction handler can be registered"); } this.applyTransaction_ = ext.applyTransaction; } } }); } registerPlugins(plugins, priority = false) { this.register([{ plugins: () => plugins }], priority); } view(view) { this.collect((extension2) => { if (extension2.view) { extension2.view(view); } return void 0; }); } pandocMarks() { return this.collect((extension2) => extension2.marks); } pandocNodes() { return this.collect((extension2) => extension2.nodes); } pandocPreprocessors() { return this.collectFrom({ node: (node2) => [node2.pandoc.preprocessor] }); } pandocPostprocessors() { return this.pandocReaders().flatMap((reader) => reader.postprocessor ? [reader.postprocessor] : []); } pandocMarkdownPostProcessors() { return this.collectFrom({ node: (node2) => [node2.pandoc.markdownPostProcessor] }); } pandocTokensFilters() { return this.collectFrom({ mark: (mark) => [mark.pandoc.tokensFilter], node: (node2) => [node2.pandoc.tokensFilter] }); } pandocBlockReaders() { return this.collectFrom({ node: (node2) => [node2.pandoc.blockReader] }); } pandocInlineHTMLReaders() { return this.collectFrom({ mark: (mark) => [mark.pandoc.inlineHTMLReader], node: (node2) => [node2.pandoc.inlineHTMLReader] }); } pandocBlockCapsuleFilters() { return this.collectFrom({ node: (node2) => [node2.pandoc.blockCapsuleFilter] }); } pandocReaders() { return this.collectFrom({ mark: (mark) => mark.pandoc.readers, node: (node2) => { var _a; return (_a = node2.pandoc.readers) != null ? _a : []; } }); } pandocMarkWriters() { return this.collectFrom({ mark: (mark) => [{ name: mark.name, ...mark.pandoc.writer }] }); } pandocNodeWriters() { return this.collectFrom({ node: (node2) => { return node2.pandoc.writer ? [{ name: node2.name, write: node2.pandoc.writer }] : []; } }); } commands(schema2) { return this.collect((extension2) => { var _a; return (_a = extension2.commands) == null ? void 0 : _a.call(extension2, schema2); }); } omniInserters(schema2) { const omniInserters = []; const commands = this.commands(schema2); commands.forEach((command) => { if (command.omniInsert) { omniInserters.push({ ...command.omniInsert, id: command.id, command: command.execute }); } }); return omniInserters; } codeViews() { const views = {}; this.pandocNodes().forEach((node2) => { if (node2.code_view) { views[node2.name] = node2.code_view; } }); return views; } attrEditors() { return this.collectFrom({ node: (node2) => { var _a; return [(_a = node2.attr_edit) == null ? void 0 : _a.call(node2)]; } }); } baseKeys(schema2) { return this.collect((extension2) => { var _a; return (_a = extension2.baseKeys) == null ? void 0 : _a.call(extension2, schema2); }); } applyTransaction() { return this.applyTransaction_; } appendTransactions(schema2) { return this.collect((extension2) => { var _a; return (_a = extension2.appendTransaction) == null ? void 0 : _a.call(extension2, schema2); }); } appendMarkTransactions(schema2) { return this.collect((extension2) => { var _a; return (_a = extension2.appendMarkTransaction) == null ? void 0 : _a.call(extension2, schema2); }); } plugins(schema2) { return this.collect((extension2) => { var _a; return (_a = extension2.plugins) == null ? void 0 : _a.call(extension2, schema2); }); } fixups(schema2, view) { return this.collect((extension2) => { var _a; return (_a = extension2.fixups) == null ? void 0 : _a.call(extension2, schema2, view); }); } completionHandlers() { return this.collect((extension2) => { var _a; return (_a = extension2.completionHandlers) == null ? void 0 : _a.call(extension2); }); } contextMenuHandlers() { return this.collect((extension2) => { var _a; return (_a = extension2.contextMenuHandlers) == null ? void 0 : _a.call(extension2); }); } inputRules(schema2) { const markFilter = markInputRuleFilter(schema2, this.pandocMarks()); return this.collect((extension2) => { var _a; return (_a = extension2.inputRules) == null ? void 0 : _a.call(extension2, schema2, markFilter); }); } collect(collector) { return this.collectFrom({ extension: (extension2) => { var _a; return (_a = collector(extension2)) != null ? _a : []; } }); } collectFrom(visitor) { const results = []; this.extensions.forEach((extension2) => { if (visitor.extension) { results.push(...visitor.extension(extension2)); } if (visitor.mark && extension2.marks) { results.push(...extension2.marks.flatMap(visitor.mark)); } if (visitor.node && extension2.nodes) { results.push(...extension2.nodes.flatMap(visitor.node)); } }); return results.filter((value) => typeof value !== "undefined" && value !== null); } } function defaultTheme() { return { darkMode: false, highContrast: false, solarizedMode: false, cursorColor: "black", selectionColor: "#8cf", selectionForegroundColor: "black", nodeSelectionColor: "rgb(102,155,243)", backgroundColor: "white", metadataBackgroundColor: "rgb(255, 255, 255)", chunkBackgroundColor: "rgb(251,251,251)", spanBackgroundColor: "#fff8dc", divBackgroundColor: "rgb(243, 243, 243)", commentColor: "#3c4c72", commentBackgroundColor: "#FFECCB", hrBackgroundColor: "#ddd", gutterBackgroundColor: "#f0f0f0", gutterTextColor: "#333", toolbarBackgroundColor: "#f3f3f3", toolbarTextColor: "#333", textColor: "black", surfaceWidgetTextColor: "rgba(0,0,0,0.5)", lightTextColor: "rgb(60, 76, 114)", disabledTextColor: "rgba(97, 97, 97, 0.5)", linkTextColor: "#106ba3", placeholderTextColor: "gray", invisibleTextColor: "rgb(191, 191, 191)", markupTextColor: "rgb(185, 6, 144)", findTextBackgroundColor: "rgb(250, 250, 255)", findTextBorderColor: "rgb(200, 200, 250)", borderBackgroundColor: "#ddd", blockBorderColor: "#ddd", focusOutlineColor: "#5d84cd", paneBorderColor: "silver", fixedWidthFont: "monospace, monospace", fixedWidthFontSizePt: 10, proportionalFont: '"Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif', proportionalFontSizePt: 10, suggestWidgetBackgroundColor: "#f3f3f3", suggestWidgetBorderColor: "#c8c8c8", suggestWidgetForegroundColor: "#000000", suggestWidgetFocusHighlightForegroundColor: "#bbe7ff", suggestWidgetHighlightForegroundColor: "#0066bf", suggestWidgetSelectedBackgroundColor: "#0060c0", suggestWidgetSelectedForegroundColor: "#ffffff", suggestWidgetSelectedIconForegroundColor: "#ffffff", symbolIconClassForegroundColor: "#D67E00", symbolIconConstantForegroundColor: "#616161", symbolIconEnumForegroundColor: "#D67E00", symbolIconFunctionForegroundColor: "#652D90", symbolIconInterfaceForegroundColor: "#007ACC", symbolIconKeywordForegroundColor: "#616161", symbolIconMethodForegroundColor: "#652D90", symbolIconNamespaceForegroundColor: "#616161", symbolIconPropertyForegroundColor: "#616161", symbolIconTextForegroundColor: "#616161", symbolIconTypeParameterForegroundColor: "#616161", symbolIconVariableForegroundColor: "#007ACC", debugStartForegroundColor: "#388a34", debugStepForgroundColor: "#007acc", code: { keywordColor: "rgb(0, 0, 255)", atomColor: "rgb(88, 92, 246)", numberColor: "rgb(0, 0, 205)", variableColor: "rgb(0, 0, 0)", defColor: "rgb(0, 0, 0)", operatorColor: "rgb(104, 118, 135)", commentColor: "rgb(76, 136, 107)", stringColor: "rgb(3, 106, 7)", metaColor: "rgb(0, 0, 0)", builtinColor: "rgb(0, 0, 0)", bracketColor: "rgb(104, 118, 135)", tagColor: "rgb(0, 22, 142)", attributeColor: "rgb(0, 0, 0)", hrColor: "rgb(0, 0, 0)", linkColor: "rgb(0, 0, 255)", errorColor: "rgb(197, 6, 11)" } }; } function applyTheme(theme) { const defaults2 = defaultTheme(); theme = { ...defaults2, ...theme, code: { ...defaults2.code, ...theme.code } }; const themeCss = ` .pm-default-theme .pm-background-color { background-color: ${defaults2.backgroundColor} !important; } .pm-default-theme .pm-text-color { color: ${defaults2.textColor} !important; } .pm-default-theme .pm-border-background-color { background-color: ${defaults2.borderBackgroundColor} !important; } .pm-default-theme .pm-hr-background-color { background-color: ${defaults2.hrBackgroundColor} !important; } .pm-default-theme .pm-input-text { border-color: ${defaults2.paneBorderColor} !important } .pm-default-theme .pm-block-border-color { border-color: ${defaults2.blockBorderColor} !important; } .pm-default-theme .pm-input-outline-button { color: ${defaults2.textColor}; border-color: ${defaults2.textColor}; background-color: ${defaults2.backgroundColor}; } .pm-default-theme .pm-selected-navigation-tree-item { background-color: ${defaults2.findTextBackgroundColor} !important; border-color: ${defaults2.findTextBorderColor} !important; } .pm-default-theme .pm-navigation-tree-item { border-color: ${defaults2.backgroundColor} !important; } .pm-default-theme .pm-block-border-color { border-color: ${defaults2.blockBorderColor} !important; } .pm-default-theme .pm-focus-outline-color { border-color: ${defaults2.focusOutlineColor} !important; } .pm-default-theme .pm-input-button { border-color: ${defaults2.borderBackgroundColor}; background-color: ${defaults2.backgroundColor}; } .pm-default-theme .pm-placeholder-text-color { color: ${defaults2.placeholderTextColor} !important; } .pm-default-theme .pm-background-color *::selection { background-color: ${defaults2.selectionColor} !important; } .pm-default-theme .pm-text-color *::selection { color: ${defaults2.selectionForegroundColor || defaults2.textColor} !important; } .pm-default-theme .pm-find-text, .pm-default-theme .pm-list-item-selected, .pm-default-theme .pm-grid-item-selected { background-color: ${defaults2.findTextBackgroundColor} !important; box-shadow: 0 0 0 1px ${defaults2.findTextBorderColor}; border-radius: 3px; } .pm-default-theme .pm-rstudio-button { border-color: DarkGray !important; } .pm-cursor-color { caret-color: ${theme.cursorColor} } .pm-background-color { background-color: ${theme.backgroundColor} !important; } .pm-metadata-background-color { background-color: ${theme.metadataBackgroundColor} !important; } .pm-chunk-background-color { background-color: ${theme.chunkBackgroundColor} !important; } .pm-span-background-color { background-color: ${theme.spanBackgroundColor} !important; } .pm-div-background-color { background-color: ${theme.divBackgroundColor} !important; } .pm-nbsp-background-color { background-color: ${theme.spanBackgroundColor} !important; } .pm-comment-color { color: ${theme.commentColor} !important; } .pm-comment-background-color { background-color: ${theme.commentBackgroundColor} !important; } .pm-text-color { color: ${theme.textColor} !important; } .pm-text-color *::selection { color: ${theme.selectionForegroundColor || theme.textColor} !important; } .pm-surface-widget-text-color { color: ${theme.surfaceWidgetTextColor} !important; } .pm-light-text-color { color: ${theme.lightTextColor} !important; } .pm-placeholder-text-color { color: ${theme.placeholderTextColor} !important; } .pm-invisible-text-color { color: ${theme.invisibleTextColor} !important; } .pm-link-text-color { color: ${theme.linkTextColor} !important; } .pm-markup-text-color { color: ${theme.markupTextColor} !important; } .pm-toolbar-background-color { background-color: ${theme.toolbarBackgroundColor} !important; } .pm-toolbar-text-color, .pm-toolbar-text-color { color: ${theme.toolbarTextColor} !important; } .pm-find-text, .pm-list-item-selected, .pm-grid-item-selected { background-color: ${theme.findTextBackgroundColor} !important; box-shadow: 0 0 0 1px ${theme.findTextBorderColor}; border-radius: 3px; } .pm-selected-text { color: ${theme.selectionForegroundColor || theme.textColor} !important; background-color: ${theme.selectionColor} !important; } .pm-selected-list-item { background-color: ${theme.findTextBackgroundColor} !important; border: 1px solid ${theme.findTextBorderColor} !important; border-radius: 3px; } .pm-dark-mode .pm-selected-list-item { background-color: ${theme.chunkBackgroundColor} !important; border: 1px solid transparent !important; } .pm-navigation-tree-item { border: 1px solid ${theme.backgroundColor} !important; border-radius: 3px; margin-left: 2px; margin-right: 2px; } .pm-selected-navigation-tree-item { background-color: ${theme.findTextBackgroundColor} !important; border: 1px solid ${theme.findTextBorderColor} !important; border-radius: 3px; margin-left: 2px; margin-right: 2px; } .pm-border-background-color { background-color: ${theme.borderBackgroundColor}!important; } .pm-hr-background-color { background-color: ${theme.hrBackgroundColor}!important; } .pm-block-border-color { border-color: ${theme.blockBorderColor} !important; } .pm-focus-outline-color { border-color: ${theme.focusOutlineColor} !important; } .pm-pane-border-color { border-color: ${theme.paneBorderColor} !important; } .pm-div .pm-div { border-color: ${theme.focusOutlineColor} !important; } .pm-raw-block-border { border-color: ${theme.markupTextColor} !important; } .pm-popup { box-shadow: 0 1px 3px ${theme.blockBorderColor} !important; } .pm-selected-node-outline-color, .ProseMirror-selectednode { outline-color: ${theme.nodeSelectionColor} !important; } .pm-selected-node-border-color { border-color: ${theme.nodeSelectionColor} !important; } .pm-dark-mode .pm-selected-node-outline-color, .pm-dark-mode .ProseMirror-selectednode { outline-color: ${theme.nodeSelectionColor} !important; } .pm-dark-mode .pm-selected-node-border-color { border-color: ${theme.nodeSelectionColor} !important; } .pm-background-color *::selection { background-color: ${theme.selectionColor} !important; } .pm-background-color *::-moz-selection { background-color: ${theme.selectionColor} !important; } .pm-fixedwidth-font { font-family: ${theme.fixedWidthFont} !important; font-size: ${theme.fixedWidthFontSizePt}pt !important; } .pm-proportional-font { font-family: ${theme.proportionalFont} !important; font-size: ${theme.proportionalFontSizePt}pt !important; } .pm-emoji-font { font-family: ${theme.fixedWidthFont} !important; } .pm-input-text { border-color: ${theme.paneBorderColor}; } .pm-input-button { border-color: ${theme.borderBackgroundColor}; background-color: ${theme.backgroundColor}; } .pm-input-outline-button { color: ${theme.textColor}; border-color: ${theme.textColor}; background-color: ${theme.backgroundColor}; } .pm-codeview-run-button { color: ${theme.debugStartForegroundColor}; } .pm-codeview-run-other-button { color: ${theme.debugStepForgroundColor} } .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child, .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child span { color: ${theme.lightTextColor} !important; } .pm-ace-collapsed.pm-ace-focused { border-color: ${theme.paneBorderColor} !important; } .ProseMirror-gapcursor:after { border-top: 1px solid ${theme.textColor}; } `; setStyleElement("pm-editor-theme-styles-id", themeCss); } function applyPadding(padding) { const paddingCss = ` .pm-editing-root-node { padding-left: ${padding} !important; padding-right: ${padding} !important; } `; setStyleElement("pm-editor-padding-styles-id", paddingCss); } function setStyleElement(id2, css) { let styleEl = window.document.getElementById(id2); if (styleEl === null) { styleEl = window.document.createElement("style"); styleEl.setAttribute("id", id2); styleEl.setAttribute("type", "text/css"); window.document.head.appendChild(styleEl); } styleEl.innerHTML = css; } function getEditorSourcePos(state) { const paraBlockTypes = [ "paragraph", "table_container", "figure", "line_block", "definition_list", "shortcode_block" ]; const blockTypes = { "heading": PandocTokenType.Header, "code_block": PandocTokenType.CodeBlock, "rmd_chunk": PandocTokenType.CodeBlock, "div": PandocTokenType.Div, "ordered_list": PandocTokenType.OrderedList, "bullet_list": PandocTokenType.BulletList, "raw_block": PandocTokenType.RawBlock, "blockquote": PandocTokenType.BlockQuote, "horizontal_rule": PandocTokenType.HorizontalRule }; const locations = []; state.doc.descendants((node2, pos) => { if (paraBlockTypes.includes(node2.type.name)) { locations.push({ block: PandocTokenType.Para, pos }); return false; } else { const block2 = blockTypes[node2.type.name]; if (block2) { locations.push({ block: block2, pos }); } return true; } }); return { locations, pos: state.selection.from }; } class UITools { constructor() { __publicField(this, "attr"); __publicField(this, "image"); __publicField(this, "format"); __publicField(this, "source"); __publicField(this, "citation"); __publicField(this, "context"); this.attr = { propsToInput: attrPropsToInput, inputToProps: attrInputToProps, pandocAutoIdentifier: (text2) => pandocAutoIdentifier(text2, false), asPandocId, asHtmlId }; this.image = { validUnits: () => kValidUnits, percentUnit: () => kPercentUnit, unitToPixels, pixelsToUnit, roundUnit }; this.format = { parseFormatConfig: pandocFormatConfigFromCode }; this.source = { diffChars }; this.citation = { citeUI }; this.context = { defaultUIImages: defaultEditorUIImages }; } } const keybindingsPlugin = new PluginKey("keybindings"); class Editor { constructor(parent, context, options, theme, format2, pandocFormat, pandocCapabilities) { __publicField(this, "parent"); __publicField(this, "context"); __publicField(this, "events"); __publicField(this, "options"); __publicField(this, "format"); __publicField(this, "pandocFormat"); __publicField(this, "pandocCapabilities"); __publicField(this, "editorMarkdown"); __publicField(this, "extensions"); __publicField(this, "schema"); __publicField(this, "state"); __publicField(this, "view"); __publicField(this, "pandocConverter"); __publicField(this, "theme"); __publicField(this, "keybindings"); __publicField(this, "maxContentWidth", 0); __publicField(this, "minContentPadding", 0); __publicField(this, "lastTrSelectionOnly", false); __publicField(this, "preventSelectionChange"); this.parent = parent; this.events = new DOMEditorEvents(parent); this.context = context; this.options = options; this.theme = theme; this.format = format2; this.keybindings = {}; this.pandocFormat = pandocFormat; this.pandocCapabilities = pandocCapabilities; this.extensions = this.initExtensions(); this.schema = editorSchema(this.options, this.extensions, !options.outerScrollContainer); this.editorMarkdown = this.createEditorMarkdown(); this.registerCompletionExtension(); if (!this.options.browserSpellCheck) { this.parent.setAttribute("spellcheck", "false"); this.registerRealtimeSpelling(); } this.state = EditorState.create({ schema: this.schema, doc: this.initialDoc(), plugins: this.createPlugins() }); const attributes = {}; if (options.className) { attributes.class = options.className; } if (options.outerScrollContainer) { attributes.class = (attributes.class || "").split(" ").concat(kPmScrollContainer).join(" "); } this.view = new EditorView(this.parent, { state: this.state, dispatchTransaction: this.dispatchTransaction.bind(this), domParser: new EditorDOMParser(this.schema), attributes }); Object.defineProperty(this.view.dom, "restoreFocus", { value: () => { this.focus(); } }); this.applyTheme(this.theme); this.extensions.view(this.view); this.parent.classList.add("pm-proportional-font"); this.pandocConverter = new PandocConverter( this.schema, this.extensions, context.server.pandoc, this.pandocCapabilities ); if (this.options.autoFocus) { window.setTimeout(() => { this.focus(); }, 10); } { let ticking = false; this.parent.addEventListener( "scroll", () => { if (!ticking) { window.requestAnimationFrame(() => { this.emitEvent(ScrollEvent); ticking = false; }); ticking = true; } }, { capture: true } ); } } static async create(parent, context, format2, options, theme) { options = { autoFocus: false, browserSpellCheck: false, commenting: false, outerScrollContainer: false, cannotEditUntitled: false, codeEditor: "", rmdImagePreview: false, hideFormatComment: false, defaultCellTypePython: false, className: "", ...options }; format2 = { pandocMode: format2.pandocMode || "markdown", pandocExtensions: format2.pandocExtensions || "", rmdExtensions: { codeChunks: false, bookdownXRef: false, bookdownXRefUI: false, bookdownPart: false, blogdownMathInCode: false, ...format2.rmdExtensions }, hugoExtensions: { shortcodes: false, ...format2.hugoExtensions }, docTypes: format2.docTypes || [] }; const defaultImages = defaultEditorUIImages(); context = { ...context, ui: { ...context.ui, images: { ...defaultImages, ...context.ui.images, omni_insert: { ...defaultImages.omni_insert, ...context.ui.images }, citations: { ...defaultImages.citations, ...context.ui.images } } } }; const pandocFmt = await resolvePandocFormat(context.server.pandoc, format2); const pandocCapabilities = await getPandocCapabilities(context.server.pandoc); const editor = new Editor(parent, context, options, theme || defaultTheme(), format2, pandocFmt, pandocCapabilities); return Promise.resolve(editor); } destroy() { this.view.destroy(); } subscribe(event, handler) { if (typeof event === "string") { return this.events.subscribe({ eventName: event }, handler); } else { return this.events.subscribe(event, handler); } } setTitle(title) { const tr = setTitle(this.state, title); if (tr) { this.view.dispatch(tr); } } async setMarkdown(markdown, options, emitUpdate) { options = pandocWriterOptions(options); const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat); const { doc: doc2, line_wrapping, unrecognized, example_lists, unparsed_meta } = result; if (this.isInitialDoc()) { this.state = EditorState.create({ schema: this.state.schema, doc: doc2, plugins: this.state.plugins }); this.view.updateState(this.state); } else { const loc = this.getEditingLocation(); const tr = this.state.tr; tr.setMeta(kSetMarkdownTransaction, true); if (!emitUpdate) { tr.setMeta(kNoUpdateTransaction, true); } let i2 = 0; tr.doc.descendants((node2, pos) => { const mappedPos = tr.mapping.map(pos); tr.replaceRangeWith(mappedPos, mappedPos + node2.nodeSize, doc2.child(i2)); i2++; return false; }); if (loc.pos < tr.doc.nodeSize) { try { setTextSelection_1(loc.pos)(tr); } catch (e2) { } } this.view.dispatch(tr); } this.applyFixups(FixupContext.Load); if (emitUpdate) { this.emitEvent(UpdateEvent); this.emitEvent(OutlineChangeEvent); this.emitEvent(StateChangeEvent); } const getMarkdownTr = this.state.tr; const canonical = await this.getMarkdownCode(getMarkdownTr, options); const location = getEditingOutlineLocation(this.state); return { canonical, line_wrapping, unrecognized, example_lists, unparsed_meta, location }; } isInitialDoc() { return this.state.doc.attrs.initial; } getStateJson() { return this.state.toJSON(); } async getMarkdownFromStateJson(stateJson, options) { options = pandocWriterOptions(options); const state = EditorState.fromJSON({ schema: this.schema }, stateJson); const tr = state.tr; return this.getMarkdownCode(tr, options); } async getMarkdown(options) { const tr = this.state.tr; const code2 = await this.getMarkdownCode(tr, options); return { code: code2, selection_only: this.lastTrSelectionOnly, location: getEditingOutlineLocation(this.state) }; } getEditorSourcePos() { return getEditorSourcePos(this.state); } getEditingOutlineLocation() { return getEditingOutlineLocation(this.state); } getHTML() { return fragmentToHTML(this.state.schema, this.state.doc.content); } getTitle() { return getTitle(this.state); } getSelection() { const { from: from2, to } = this.state.selection; return { from: from2, to, navigation_id: navigationIdForSelection(this.state) }; } getEditingLocation() { return getEditingLocation(this.view); } setEditingLocation(outlineLocation, previousLocation) { setEditingLocation(this.view, outlineLocation, previousLocation); } getOutline() { return getOutline(this.state) || []; } getFindReplace() { return { find: (term, options) => find(this.view, term, options), matches: () => matchCount(this.view), selectCurrent: () => selectCurrent(this.view), selectFirst: () => selectFirst(this.view), selectNext: () => selectNext(this.view), selectPrevious: () => selectPrevious(this.view), replace: (text2) => replace(this.view, text2), replaceAll: (text2) => replaceAll(this.view, text2), clear: () => clear(this.view) }; } getSpellingDoc() { return getSpellingDoc(this.view, this.extensions.pandocMarks()); } spellingInvalidateAllWords() { invalidateAllWords(this.view); } spellingInvalidateWord(word) { invalidateWord(this.view, word); } async getCanonical(markdown, options) { const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat); const state = EditorState.create({ schema: this.schema, doc: result.doc, plugins: this.state.plugins }); const tr = state.tr; this.extensionFixups(tr, FixupContext.Load); return this.getMarkdownCode(tr, options); } getSelectedText() { return this.state.doc.textBetween(this.state.selection.from, this.state.selection.to); } replaceSelection(value) { const { from: from2, empty: empty2 } = this.view.state.selection; const marks = this.view.state.selection.$from.marks(); const tr = this.view.state.tr.replaceSelectionWith(this.view.state.schema.text(value, marks), false); this.view.dispatch(tr); if (!empty2) { const sel = TextSelection.create(this.view.state.doc, from2, from2 + value.length); const trSetSel = this.view.state.tr.setSelection(sel); this.view.dispatch(trSetSel); } } getYamlFrontMatter() { if (this.schema.nodes.yaml_metadata) { return yamlFrontMatter(this.view.state.doc); } else { return ""; } } getPresentationEditorLocation() { return getPresentationEditorLocation(this.state); } navigateToPresentationEditorLocation(location) { const pos = positionForPresentationEditorLocation(this.state, location); if (pos !== -1) { this.navigate(NavigationType.Pos, String(pos)); } } applyYamlFrontMatter(yaml) { if (this.schema.nodes.yaml_metadata) { applyYamlFrontMatter(this.view, yaml); } } focus() { this.view.focus(); } hasFocus() { return this.view.hasFocus() || window.document.hasFocus() && this.parent.contains(window.document.activeElement); } blur() { this.view.dom.blur(); } getCodeViewActiveBlockContext() { return codeViewActiveBlockContext(this.state); } setBlockSelection(context, action) { codeViewSetBlockSelection(this.view, context, action); } insertChunk(chunkPlaceholder) { const insertCmd = insertRmdChunk(chunkPlaceholder); insertCmd(this.view.state, this.view.dispatch); this.focus(); } navigate(type2, location, recordCurrent = true, animate = false) { const nav2 = navigateTo(this.view, this.format, type2, location, animate); if (nav2 !== null) { if (!recordCurrent) { nav2.prevPos = -1; } this.emitEvent(NavigateEvent, nav2); } } navigateToSourcePos(pos) { let cursorIndex = -1; for (let i2 = pos.locations.length - 1; i2 >= 0; i2--) { if (pos.pos >= pos.locations[i2].pos) { cursorIndex = i2; break; } } let targetPos = editingRootNode(this.view.state.selection).pos; if (cursorIndex !== -1) { const locations = this.getEditorSourcePos().locations; targetPos = (locations[cursorIndex] || locations[locations.length - 1]).pos; } this.navigate(NavigationType.Pos, String(targetPos), false, false); } resize() { this.syncContentWidth(); this.applyFixupsOnResize(); this.emitEvent(ResizeEvent); } enableDevTools() { applyDevTools(this.view); } getMenus() { return editorMenus(this.options, this.context.ui, this.commands()); } commands() { const commandKeys = this.commandKeys(); return this.extensions.commands(this.schema).map((command) => { return { id: command.id, keymap: commandKeys[command.id], isActive: () => command.isActive(this.state), isEnabled: () => command.isEnabled(this.state), plural: () => command.plural(this.state), execute: () => { command.execute(this.state, this.view.dispatch, this.view); if (command.keepFocus) { this.focus(); } } }; }); } applyTheme(theme) { this.theme = theme; this.parent.classList.toggle("pm-dark-mode", !!theme.darkMode); this.parent.classList.toggle("pm-solarized-mode", !!theme.solarizedMode); applyTheme(theme); const tr = this.state.tr; tr.setMeta(kThemeChangedTransaction, true); tr.setMeta(kAddToHistoryTransaction, false); this.view.dispatch(tr); this.emitEvent(ThemeChangedEvent); } setMaxContentWidth(maxWidth, minPadding = 10) { this.maxContentWidth = maxWidth; this.minContentPadding = minPadding; this.syncContentWidth(); } setKeybindings(keyBindings) { this.keybindings = keyBindings; this.state = this.state.reconfigure({ plugins: this.createPlugins() }); } getEditorFormat() { return this.format; } getPandocFormat() { return this.pandocFormat; } getPandocFormatConfig(isRmd) { return pandocFormatConfigFromDoc(this.state.doc, isRmd); } contextMenu(event) { if (event.target && event.target instanceof Node) { const pos = this.view.posAtDOM(event.target, 0); if (pos !== -1) { const $pos = this.view.state.doc.resolve(pos); const rootNd = editingRootNodeClosestToPos($pos); if (rootNd) { const handlers2 = this.extensions.contextMenuHandlers(); for (const handler of handlers2) { const menu = handler(this.view, $pos); if (menu) { return menu; } } } } } return void 0; } contextMenuDismissed() { this.preventSelectionChange = void 0; } onPrefsChanged() { this.emitEvent(PrefsChangedEvent); } dispatchTransaction(tr) { const previousOutline = getOutline(this.state); this.lastTrSelectionOnly = tr.selectionSet && !tr.docChanged; const apply2 = this.extensions.applyTransaction(); this.state = apply2 ? apply2(this.state, tr) : this.state.apply(tr); this.view.updateState(this.state); this.emitEvent(StateChangeEvent); if (tr.docChanged || tr.storedMarksSet) { if (!tr.getMeta(kFixupTransaction) && !tr.getMeta(kNoUpdateTransaction)) { this.emitEvent(UpdateEvent); } if (getOutline(this.state) !== previousOutline) { this.emitEvent(OutlineChangeEvent); } } this.emitEvent(DispatchEvent, tr); this.emitEvent(LayoutEvent); } emitEvent(eventType, detail) { this.events.emit(eventType, detail); } initExtensions() { return initExtensions( { format: this.format, options: this.options, ui: this.context.ui, theme: () => this.theme, math: this.context.ui.math ? editorMath(this.context.ui.math) : void 0, events: { subscribe: this.subscribe.bind(this), emit: this.emitEvent.bind(this) }, pandocExtensions: this.pandocFormat.extensions, pandocCapabilities: this.pandocCapabilities, markdown: this.editorMarkdownProxy(), server: this.context.server, navigation: { navigate: this.navigate.bind(this) }, find: { decorations: () => { return findPluginState(this.view.state) || null; } } }, this.context.extensions, this.context.codeViewExtension ); } createEditorMarkdown() { const markdownFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks()); return { allowMarkdownPaste(state) { return markdownFilter(state); }, markdownToSlice: async (markdown) => { var _a; const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat); const slice2 = new Slice(Fragment.from(result.doc.child(0).content), 0, 0); if (slice2.content.childCount === 1 && ((_a = slice2.content.child(0)) == null ? void 0 : _a.type) === this.schema.nodes.paragraph) { return new Slice(slice2.content.child(0).content, slice2.openStart, slice2.openEnd); } else { return slice2; } } }; } editorMarkdownProxy() { return { allowMarkdownPaste: (state) => { return this.editorMarkdown.allowMarkdownPaste(state); }, markdownToSlice: (markdown, openStart, openEnd) => { return this.editorMarkdown.markdownToSlice(markdown, openStart, openEnd); } }; } registerCompletionExtension() { const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks()); this.extensions.register([ omniInsertExtension(this.extensions.omniInserters(this.schema), markFilter, this.context.ui) ]); this.extensions.register([ completionExtension(this.extensions.completionHandlers(), markFilter, this.context.ui, this.events) ]); } registerRealtimeSpelling() { if (this.context.ui.spelling !== void 0) { this.extensions.registerPlugins( [realtimeSpellingPlugin( this.schema, this.extensions.pandocMarks(), this.context.ui.spelling, this.context.ui.prefs, this.events )], true ); this.extensions.register([{ contextMenuHandlers: () => [ spellingContextMenuHandler( this.context.ui.spelling, this.context.ui.context.translateText ) ] }]); } } createPlugins() { return [ baseKeysPlugin(this.extensions.baseKeys(this.schema)), this.keybindingsPlugin(), appendTransactionsPlugin(this.extensions.appendTransactions(this.schema)), appendMarkTransactionsPlugin(this.extensions.appendMarkTransactions(this.schema)), ...this.extensions.plugins(this.schema), this.inputRulesPlugin(), this.editablePlugin(), this.preventSelectionChangePlugin(), this.domEventsPlugin(), this.clipboardToDOMPlugin() ]; } editablePlugin() { const hooks = this.context.hooks || {}; return new Plugin({ key: new PluginKey("editable"), props: { editable: hooks.isEditable || (() => true) } }); } inputRulesPlugin() { const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks()); const plugin2 = inputRules({ rules: this.extensions.inputRules(this.schema) }); const handleTextInput = plugin2.props.handleTextInput.bind(plugin2); const customHandleTextInput = (view, from2, to, text2) => { if (!markFilter(view.state)) { return false; } return handleTextInput(view, from2, to, text2); }; plugin2.props.handleTextInput = customHandleTextInput; return plugin2; } domEventsPlugin() { return new Plugin({ key: new PluginKey("domevents"), props: { handleDOMEvents: { blur: () => { this.emitEvent(BlurEvent); return false; }, focus: (view) => { this.emitEvent(FocusEvent, view.state.doc); return false; }, keydown: (_view, event) => { const kbEvent = event; if (kbEvent.key === "Tab" && this.context.ui.prefs.tabKeyMoveFocus()) { return true; } else { return false; } }, contextmenu: (_view, event) => { if (!this.context.ui.display.showContextMenu) { return false; } const menu = this.contextMenu(event); if (menu) { const { clientX, clientY } = event; const showContextMenu = async () => { this.preventSelectionChange = menu.preventSelectionChange; try { const menuItems = await menu.items(); await this.context.ui.display.showContextMenu(menuItems, clientX, clientY); } finally { this.preventSelectionChange = void 0; } }; showContextMenu(); event.stopPropagation(); event.preventDefault(); return true; } return false; } } } }); } preventSelectionChangePlugin() { return new Plugin({ filterTransaction: (tr, state) => { var _a; if ((_a = this.preventSelectionChange) == null ? void 0 : _a.call(this, state)) { return !(tr.selectionSet && !tr.docChanged && !tr.storedMarksSet); } else { return true; } } }); } clipboardToDOMPlugin() { const schema2 = this.schema; return new Plugin({ key: new PluginKey("clipboard-to-dom"), props: { transformCopied(slice2) { const newSlice = mapSlice(slice2, (node2) => { if (node2.isText) { const clipboardMark = node2.marks.find((mark) => { var _a; return !!((_a = mark.type.spec.attrs) == null ? void 0 : _a.clipboard); }); if (clipboardMark) { let marks = clipboardMark.removeFromSet(node2.marks); const attrs = { ...clipboardMark.attrs, clipboard: true }; const newMark = clipboardMark.type.create(attrs); marks = newMark.addToSet(marks); return schema2.text(node2.textContent, marks); } else { return null; } } else { return null; } }); return newSlice; } } }); } keybindingsPlugin() { const commandKeys = this.commandKeys(); const pluginKeys = {}; const commands = this.extensions.commands(this.schema); commands.forEach((command) => { const keys2 = commandKeys[command.id]; if (keys2) { keys2.forEach((key2) => { pluginKeys[key2] = command.execute; }); } }); const ctrlKeyCodes = {}; Object.keys(pluginKeys).forEach((keyCombo) => { const match2 = keyCombo.match(/^Mod-([a-z\\])$/); if (match2) { const key2 = match2[1]; const keyCode = key2 === "\\" ? "Backslash" : `Key${key2.toUpperCase()}`; ctrlKeyCodes[keyCode] = pluginKeys[keyCombo]; } }); const prosemirrorKeydownHandler = keydownHandler(pluginKeys); return new Plugin({ key: keybindingsPlugin, props: { handleKeyDown: (view, event) => { if (this.context.ui.context.isWindowsDesktop() && qtWebEngineVersion() !== void 0) { const keyEvent2 = event; if (keyEvent2.ctrlKey) { const keyCommand = ctrlKeyCodes[keyEvent2.code]; if (keyCommand && keyCommand(this.view.state)) { keyCommand(this.view.state, this.view.dispatch, this.view); return true; } } } return prosemirrorKeydownHandler(view, event); } } }); } commandKeys() { const commands = this.extensions.commands(this.schema); const defaultKeys = commands.reduce((keys2, command) => { keys2[command.id] = command.keymap; return keys2; }, {}); return { ...defaultKeys, ...this.keybindings }; } syncContentWidth() { if (this.maxContentWidth && this.view.dom) { const minContentPadding = this.minContentPadding || 10; const parentWidth = this.view.dom.clientWidth; if (parentWidth > this.maxContentWidth + 2 * minContentPadding) { applyPadding(`calc((100% - ${this.maxContentWidth}px)/2)`); } else { applyPadding(this.minContentPadding + "px"); } } } applyFixupsOnResize() { const docChanged = this.applyFixups(FixupContext.Resize); if (!docChanged) { this.emitEvent(LayoutEvent); } } applyFixups(context) { let tr = this.state.tr; tr = this.extensionFixups(tr, context); if (tr.docChanged) { tr.setMeta(kAddToHistoryTransaction, false); tr.setMeta(kFixupTransaction, true); this.view.dispatch(tr); return true; } return false; } extensionFixups(tr, context) { this.extensions.fixups(this.schema, this.view).forEach((fixup) => { tr = fixup(tr, context); }); return tr; } initialDoc() { return this.schema.nodeFromJSON({ type: "doc", attrs: { initial: true }, content: [ { type: "body", content: [{ type: "paragraph" }] }, { type: "notes", content: [] } ] }); } async getMarkdownCode(tr, options) { this.extensionFixups(tr, FixupContext.Save); if (options.wrap === "sentence") { wrapSentences(tr); } return this.pandocConverter.fromProsemirror(tr.doc, this.pandocFormat, this.pandocCapabilities, options); } } function navigationIdForSelection(state) { const outline = getOutlineNodes(state.doc); const outlineNode = outline.reverse().find((node2) => node2.pos < state.selection.from); if (outlineNode) { return outlineNode.node.attrs.navigation_id; } else { return null; } } function pandocWriterOptions(options) { return { atxHeaders: true, ...options }; } class EditorDOMParser extends DOMParser$1 { constructor(schema2) { super(schema2, DOMParser$1.fromSchema(schema2).rules); } parse(dom, options) { return super.parse(dom, { ...options, preserveWhitespace: "full" }); } parseSlice(dom, options) { return super.parseSlice(dom, { ...options, preserveWhitespace: "full" }); } } const index = { Editor, UITools }; function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$2(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$2(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$2(Constructor.prototype, protoProps); if (staticProps) _defineProperties$2(Constructor, staticProps); return Constructor; } function _defineProperty$2(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var IdleScheduler = /* @__PURE__ */ function() { function IdleScheduler2() { _classCallCheck$2(this, IdleScheduler2); _defineProperty$2(this, "task", void 0); } _createClass$2(IdleScheduler2, [{ key: "request", value: function request() { this.cancel(); var request2 = window.requestIdleCallback || window.requestAnimationFrame; return new Promise(function(resolve) { return request2(resolve); }); } }, { key: "cancel", value: function cancel() { var cancel2 = window.cancelIdleCallack || window.cancelAnimationFrame; if (this.task) { cancel2(this.task); } } }]); return IdleScheduler2; }(); function asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key2, arg) { try { var info = gen[key2](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator$1(fn) { return function() { var self2 = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self2, args); function _next(value) { asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, "throw", err); } _next(void 0); }); }; } function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$1(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; } function _defineProperty$1(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var JsonDiffWorker = /* @__PURE__ */ function() { function JsonDiffWorker2(worker) { var _this = this; _classCallCheck$1(this, JsonDiffWorker2); _defineProperty$1(this, "queue", /* @__PURE__ */ new Map()); _defineProperty$1(this, "scheduler", new IdleScheduler()); this.worker = worker; this.worker.addEventListener("message", function(e2) { var deferred = _this.queue.get(e2.data.id); if (deferred) { _this.queue["delete"](e2.data.id); deferred.resolve(e2.data.returns); } }); } _createClass$1(JsonDiffWorker2, [{ key: "diff", value: function() { var _diff = _asyncToGenerator$1(/* @__PURE__ */ regenerator.mark(function _callee(input) { var id2, deferred; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.scheduler.request(); case 2: id2 = nanoid(); deferred = createDeferrable(); this.queue.set(id2, deferred); this.worker.postMessage({ method: "diff", id: id2, args: [input] }); return _context.abrupt("return", deferred); case 7: case "end": return _context.stop(); } } }, _callee, this); })); function diff2(_x) { return _diff.apply(this, arguments); } return diff2; }() }]); return JsonDiffWorker2; }(); function createDeferrable() { var r2; var p2 = new Promise(function(resolve) { r2 = resolve; }); p2.resolve = function() { return r2.apply(void 0, arguments); }; return p2; } const jsonDiffWorker = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, JsonDiffWorker }, Symbol.toStringTag, { value: "Module" })); var chalk$1 = { exports: {} }; var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; var escapeStringRegexp = function(str2) { if (typeof str2 !== "string") { throw new TypeError("Expected a string"); } return str2.replace(matchOperatorsRe, "\\$&"); }; var ansiStyles = { exports: {} }; var conversions$2 = { exports: {} }; var colorName = { "aliceblue": [240, 248, 255], "antiquewhite": [250, 235, 215], "aqua": [0, 255, 255], "aquamarine": [127, 255, 212], "azure": [240, 255, 255], "beige": [245, 245, 220], "bisque": [255, 228, 196], "black": [0, 0, 0], "blanchedalmond": [255, 235, 205], "blue": [0, 0, 255], "blueviolet": [138, 43, 226], "brown": [165, 42, 42], "burlywood": [222, 184, 135], "cadetblue": [95, 158, 160], "chartreuse": [127, 255, 0], "chocolate": [210, 105, 30], "coral": [255, 127, 80], "cornflowerblue": [100, 149, 237], "cornsilk": [255, 248, 220], "crimson": [220, 20, 60], "cyan": [0, 255, 255], "darkblue": [0, 0, 139], "darkcyan": [0, 139, 139], "darkgoldenrod": [184, 134, 11], "darkgray": [169, 169, 169], "darkgreen": [0, 100, 0], "darkgrey": [169, 169, 169], "darkkhaki": [189, 183, 107], "darkmagenta": [139, 0, 139], "darkolivegreen": [85, 107, 47], "darkorange": [255, 140, 0], "darkorchid": [153, 50, 204], "darkred": [139, 0, 0], "darksalmon": [233, 150, 122], "darkseagreen": [143, 188, 143], "darkslateblue": [72, 61, 139], "darkslategray": [47, 79, 79], "darkslategrey": [47, 79, 79], "darkturquoise": [0, 206, 209], "darkviolet": [148, 0, 211], "deeppink": [255, 20, 147], "deepskyblue": [0, 191, 255], "dimgray": [105, 105, 105], "dimgrey": [105, 105, 105], "dodgerblue": [30, 144, 255], "firebrick": [178, 34, 34], "floralwhite": [255, 250, 240], "forestgreen": [34, 139, 34], "fuchsia": [255, 0, 255], "gainsboro": [220, 220, 220], "ghostwhite": [248, 248, 255], "gold": [255, 215, 0], "goldenrod": [218, 165, 32], "gray": [128, 128, 128], "green": [0, 128, 0], "greenyellow": [173, 255, 47], "grey": [128, 128, 128], "honeydew": [240, 255, 240], "hotpink": [255, 105, 180], "indianred": [205, 92, 92], "indigo": [75, 0, 130], "ivory": [255, 255, 240], "khaki": [240, 230, 140], "lavender": [230, 230, 250], "lavenderblush": [255, 240, 245], "lawngreen": [124, 252, 0], "lemonchiffon": [255, 250, 205], "lightblue": [173, 216, 230], "lightcoral": [240, 128, 128], "lightcyan": [224, 255, 255], "lightgoldenrodyellow": [250, 250, 210], "lightgray": [211, 211, 211], "lightgreen": [144, 238, 144], "lightgrey": [211, 211, 211], "lightpink": [255, 182, 193], "lightsalmon": [255, 160, 122], "lightseagreen": [32, 178, 170], "lightskyblue": [135, 206, 250], "lightslategray": [119, 136, 153], "lightslategrey": [119, 136, 153], "lightsteelblue": [176, 196, 222], "lightyellow": [255, 255, 224], "lime": [0, 255, 0], "limegreen": [50, 205, 50], "linen": [250, 240, 230], "magenta": [255, 0, 255], "maroon": [128, 0, 0], "mediumaquamarine": [102, 205, 170], "mediumblue": [0, 0, 205], "mediumorchid": [186, 85, 211], "mediumpurple": [147, 112, 219], "mediumseagreen": [60, 179, 113], "mediumslateblue": [123, 104, 238], "mediumspringgreen": [0, 250, 154], "mediumturquoise": [72, 209, 204], "mediumvioletred": [199, 21, 133], "midnightblue": [25, 25, 112], "mintcream": [245, 255, 250], "mistyrose": [255, 228, 225], "moccasin": [255, 228, 181], "navajowhite": [255, 222, 173], "navy": [0, 0, 128], "oldlace": [253, 245, 230], "olive": [128, 128, 0], "olivedrab": [107, 142, 35], "orange": [255, 165, 0], "orangered": [255, 69, 0], "orchid": [218, 112, 214], "palegoldenrod": [238, 232, 170], "palegreen": [152, 251, 152], "paleturquoise": [175, 238, 238], "palevioletred": [219, 112, 147], "papayawhip": [255, 239, 213], "peachpuff": [255, 218, 185], "peru": [205, 133, 63], "pink": [255, 192, 203], "plum": [221, 160, 221], "powderblue": [176, 224, 230], "purple": [128, 0, 128], "rebeccapurple": [102, 51, 153], "red": [255, 0, 0], "rosybrown": [188, 143, 143], "royalblue": [65, 105, 225], "saddlebrown": [139, 69, 19], "salmon": [250, 128, 114], "sandybrown": [244, 164, 96], "seagreen": [46, 139, 87], "seashell": [255, 245, 238], "sienna": [160, 82, 45], "silver": [192, 192, 192], "skyblue": [135, 206, 235], "slateblue": [106, 90, 205], "slategray": [112, 128, 144], "slategrey": [112, 128, 144], "snow": [255, 250, 250], "springgreen": [0, 255, 127], "steelblue": [70, 130, 180], "tan": [210, 180, 140], "teal": [0, 128, 128], "thistle": [216, 191, 216], "tomato": [255, 99, 71], "turquoise": [64, 224, 208], "violet": [238, 130, 238], "wheat": [245, 222, 179], "white": [255, 255, 255], "whitesmoke": [245, 245, 245], "yellow": [255, 255, 0], "yellowgreen": [154, 205, 50] }; var cssKeywords = colorName; var reverseKeywords = {}; for (var key in cssKeywords) { if (cssKeywords.hasOwnProperty(key)) { reverseKeywords[cssKeywords[key]] = key; } } var convert$1 = conversions$2.exports = { rgb: { channels: 3, labels: "rgb" }, hsl: { channels: 3, labels: "hsl" }, hsv: { channels: 3, labels: "hsv" }, hwb: { channels: 3, labels: "hwb" }, cmyk: { channels: 4, labels: "cmyk" }, xyz: { channels: 3, labels: "xyz" }, lab: { channels: 3, labels: "lab" }, lch: { channels: 3, labels: "lch" }, hex: { channels: 1, labels: ["hex"] }, keyword: { channels: 1, labels: ["keyword"] }, ansi16: { channels: 1, labels: ["ansi16"] }, ansi256: { channels: 1, labels: ["ansi256"] }, hcg: { channels: 3, labels: ["h", "c", "g"] }, apple: { channels: 3, labels: ["r16", "g16", "b16"] }, gray: { channels: 1, labels: ["gray"] } }; for (var model in convert$1) { if (convert$1.hasOwnProperty(model)) { if (!("channels" in convert$1[model])) { throw new Error("missing channels property: " + model); } if (!("labels" in convert$1[model])) { throw new Error("missing channel labels property: " + model); } if (convert$1[model].labels.length !== convert$1[model].channels) { throw new Error("channel and label counts mismatch: " + model); } var channels = convert$1[model].channels; var labels = convert$1[model].labels; delete convert$1[model].channels; delete convert$1[model].labels; Object.defineProperty(convert$1[model], "channels", { value: channels }); Object.defineProperty(convert$1[model], "labels", { value: labels }); } } convert$1.rgb.hsl = function(rgb2) { var r2 = rgb2[0] / 255; var g2 = rgb2[1] / 255; var b2 = rgb2[2] / 255; var min2 = Math.min(r2, g2, b2); var max2 = Math.max(r2, g2, b2); var delta2 = max2 - min2; var h2; var s2; var l2; if (max2 === min2) { h2 = 0; } else if (r2 === max2) { h2 = (g2 - b2) / delta2; } else if (g2 === max2) { h2 = 2 + (b2 - r2) / delta2; } else if (b2 === max2) { h2 = 4 + (r2 - g2) / delta2; } h2 = Math.min(h2 * 60, 360); if (h2 < 0) { h2 += 360; } l2 = (min2 + max2) / 2; if (max2 === min2) { s2 = 0; } else if (l2 <= 0.5) { s2 = delta2 / (max2 + min2); } else { s2 = delta2 / (2 - max2 - min2); } return [h2, s2 * 100, l2 * 100]; }; convert$1.rgb.hsv = function(rgb2) { var rdif; var gdif; var bdif; var h2; var s2; var r2 = rgb2[0] / 255; var g2 = rgb2[1] / 255; var b2 = rgb2[2] / 255; var v2 = Math.max(r2, g2, b2); var diff2 = v2 - Math.min(r2, g2, b2); var diffc = function(c) { return (v2 - c) / 6 / diff2 + 1 / 2; }; if (diff2 === 0) { h2 = s2 = 0; } else { s2 = diff2 / v2; rdif = diffc(r2); gdif = diffc(g2); bdif = diffc(b2); if (r2 === v2) { h2 = bdif - gdif; } else if (g2 === v2) { h2 = 1 / 3 + rdif - bdif; } else if (b2 === v2) { h2 = 2 / 3 + gdif - rdif; } if (h2 < 0) { h2 += 1; } else if (h2 > 1) { h2 -= 1; } } return [ h2 * 360, s2 * 100, v2 * 100 ]; }; convert$1.rgb.hwb = function(rgb2) { var r2 = rgb2[0]; var g2 = rgb2[1]; var b2 = rgb2[2]; var h2 = convert$1.rgb.hsl(rgb2)[0]; var w2 = 1 / 255 * Math.min(r2, Math.min(g2, b2)); b2 = 1 - 1 / 255 * Math.max(r2, Math.max(g2, b2)); return [h2, w2 * 100, b2 * 100]; }; convert$1.rgb.cmyk = function(rgb2) { var r2 = rgb2[0] / 255; var g2 = rgb2[1] / 255; var b2 = rgb2[2] / 255; var c; var m2; var y2; var k2; k2 = Math.min(1 - r2, 1 - g2, 1 - b2); c = (1 - r2 - k2) / (1 - k2) || 0; m2 = (1 - g2 - k2) / (1 - k2) || 0; y2 = (1 - b2 - k2) / (1 - k2) || 0; return [c * 100, m2 * 100, y2 * 100, k2 * 100]; }; function comparativeDistance(x2, y2) { return Math.pow(x2[0] - y2[0], 2) + Math.pow(x2[1] - y2[1], 2) + Math.pow(x2[2] - y2[2], 2); } convert$1.rgb.keyword = function(rgb2) { var reversed = reverseKeywords[rgb2]; if (reversed) { return reversed; } var currentClosestDistance = Infinity; var currentClosestKeyword; for (var keyword in cssKeywords) { if (cssKeywords.hasOwnProperty(keyword)) { var value = cssKeywords[keyword]; var distance = comparativeDistance(rgb2, value); if (distance < currentClosestDistance) { currentClosestDistance = distance; currentClosestKeyword = keyword; } } } return currentClosestKeyword; }; convert$1.keyword.rgb = function(keyword) { return cssKeywords[keyword]; }; convert$1.rgb.xyz = function(rgb2) { var r2 = rgb2[0] / 255; var g2 = rgb2[1] / 255; var b2 = rgb2[2] / 255; r2 = r2 > 0.04045 ? Math.pow((r2 + 0.055) / 1.055, 2.4) : r2 / 12.92; g2 = g2 > 0.04045 ? Math.pow((g2 + 0.055) / 1.055, 2.4) : g2 / 12.92; b2 = b2 > 0.04045 ? Math.pow((b2 + 0.055) / 1.055, 2.4) : b2 / 12.92; var x2 = r2 * 0.4124 + g2 * 0.3576 + b2 * 0.1805; var y2 = r2 * 0.2126 + g2 * 0.7152 + b2 * 0.0722; var z2 = r2 * 0.0193 + g2 * 0.1192 + b2 * 0.9505; return [x2 * 100, y2 * 100, z2 * 100]; }; convert$1.rgb.lab = function(rgb2) { var xyz = convert$1.rgb.xyz(rgb2); var x2 = xyz[0]; var y2 = xyz[1]; var z2 = xyz[2]; var l2; var a2; var b2; x2 /= 95.047; y2 /= 100; z2 /= 108.883; x2 = x2 > 8856e-6 ? Math.pow(x2, 1 / 3) : 7.787 * x2 + 16 / 116; y2 = y2 > 8856e-6 ? Math.pow(y2, 1 / 3) : 7.787 * y2 + 16 / 116; z2 = z2 > 8856e-6 ? Math.pow(z2, 1 / 3) : 7.787 * z2 + 16 / 116; l2 = 116 * y2 - 16; a2 = 500 * (x2 - y2); b2 = 200 * (y2 - z2); return [l2, a2, b2]; }; convert$1.hsl.rgb = function(hsl2) { var h2 = hsl2[0] / 360; var s2 = hsl2[1] / 100; var l2 = hsl2[2] / 100; var t1; var t2; var t3; var rgb2; var val; if (s2 === 0) { val = l2 * 255; return [val, val, val]; } if (l2 < 0.5) { t2 = l2 * (1 + s2); } else { t2 = l2 + s2 - l2 * s2; } t1 = 2 * l2 - t2; rgb2 = [0, 0, 0]; for (var i2 = 0; i2 < 3; i2++) { t3 = h2 + 1 / 3 * -(i2 - 1); if (t3 < 0) { t3++; } if (t3 > 1) { t3--; } if (6 * t3 < 1) { val = t1 + (t2 - t1) * 6 * t3; } else if (2 * t3 < 1) { val = t2; } else if (3 * t3 < 2) { val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; } else { val = t1; } rgb2[i2] = val * 255; } return rgb2; }; convert$1.hsl.hsv = function(hsl2) { var h2 = hsl2[0]; var s2 = hsl2[1] / 100; var l2 = hsl2[2] / 100; var smin = s2; var lmin = Math.max(l2, 0.01); var sv; var v2; l2 *= 2; s2 *= l2 <= 1 ? l2 : 2 - l2; smin *= lmin <= 1 ? lmin : 2 - lmin; v2 = (l2 + s2) / 2; sv = l2 === 0 ? 2 * smin / (lmin + smin) : 2 * s2 / (l2 + s2); return [h2, sv * 100, v2 * 100]; }; convert$1.hsv.rgb = function(hsv) { var h2 = hsv[0] / 60; var s2 = hsv[1] / 100; var v2 = hsv[2] / 100; var hi2 = Math.floor(h2) % 6; var f2 = h2 - Math.floor(h2); var p2 = 255 * v2 * (1 - s2); var q2 = 255 * v2 * (1 - s2 * f2); var t2 = 255 * v2 * (1 - s2 * (1 - f2)); v2 *= 255; switch (hi2) { case 0: return [v2, t2, p2]; case 1: return [q2, v2, p2]; case 2: return [p2, v2, t2]; case 3: return [p2, q2, v2]; case 4: return [t2, p2, v2]; case 5: return [v2, p2, q2]; } }; convert$1.hsv.hsl = function(hsv) { var h2 = hsv[0]; var s2 = hsv[1] / 100; var v2 = hsv[2] / 100; var vmin = Math.max(v2, 0.01); var lmin; var sl2; var l2; l2 = (2 - s2) * v2; lmin = (2 - s2) * vmin; sl2 = s2 * vmin; sl2 /= lmin <= 1 ? lmin : 2 - lmin; sl2 = sl2 || 0; l2 /= 2; return [h2, sl2 * 100, l2 * 100]; }; convert$1.hwb.rgb = function(hwb) { var h2 = hwb[0] / 360; var wh2 = hwb[1] / 100; var bl2 = hwb[2] / 100; var ratio2 = wh2 + bl2; var i2; var v2; var f2; var n2; if (ratio2 > 1) { wh2 /= ratio2; bl2 /= ratio2; } i2 = Math.floor(6 * h2); v2 = 1 - bl2; f2 = 6 * h2 - i2; if ((i2 & 1) !== 0) { f2 = 1 - f2; } n2 = wh2 + f2 * (v2 - wh2); var r2; var g2; var b2; switch (i2) { default: case 6: case 0: r2 = v2; g2 = n2; b2 = wh2; break; case 1: r2 = n2; g2 = v2; b2 = wh2; break; case 2: r2 = wh2; g2 = v2; b2 = n2; break; case 3: r2 = wh2; g2 = n2; b2 = v2; break; case 4: r2 = n2; g2 = wh2; b2 = v2; break; case 5: r2 = v2; g2 = wh2; b2 = n2; break; } return [r2 * 255, g2 * 255, b2 * 255]; }; convert$1.cmyk.rgb = function(cmyk) { var c = cmyk[0] / 100; var m2 = cmyk[1] / 100; var y2 = cmyk[2] / 100; var k2 = cmyk[3] / 100; var r2; var g2; var b2; r2 = 1 - Math.min(1, c * (1 - k2) + k2); g2 = 1 - Math.min(1, m2 * (1 - k2) + k2); b2 = 1 - Math.min(1, y2 * (1 - k2) + k2); return [r2 * 255, g2 * 255, b2 * 255]; }; convert$1.xyz.rgb = function(xyz) { var x2 = xyz[0] / 100; var y2 = xyz[1] / 100; var z2 = xyz[2] / 100; var r2; var g2; var b2; r2 = x2 * 3.2406 + y2 * -1.5372 + z2 * -0.4986; g2 = x2 * -0.9689 + y2 * 1.8758 + z2 * 0.0415; b2 = x2 * 0.0557 + y2 * -0.204 + z2 * 1.057; r2 = r2 > 31308e-7 ? 1.055 * Math.pow(r2, 1 / 2.4) - 0.055 : r2 * 12.92; g2 = g2 > 31308e-7 ? 1.055 * Math.pow(g2, 1 / 2.4) - 0.055 : g2 * 12.92; b2 = b2 > 31308e-7 ? 1.055 * Math.pow(b2, 1 / 2.4) - 0.055 : b2 * 12.92; r2 = Math.min(Math.max(0, r2), 1); g2 = Math.min(Math.max(0, g2), 1); b2 = Math.min(Math.max(0, b2), 1); return [r2 * 255, g2 * 255, b2 * 255]; }; convert$1.xyz.lab = function(xyz) { var x2 = xyz[0]; var y2 = xyz[1]; var z2 = xyz[2]; var l2; var a2; var b2; x2 /= 95.047; y2 /= 100; z2 /= 108.883; x2 = x2 > 8856e-6 ? Math.pow(x2, 1 / 3) : 7.787 * x2 + 16 / 116; y2 = y2 > 8856e-6 ? Math.pow(y2, 1 / 3) : 7.787 * y2 + 16 / 116; z2 = z2 > 8856e-6 ? Math.pow(z2, 1 / 3) : 7.787 * z2 + 16 / 116; l2 = 116 * y2 - 16; a2 = 500 * (x2 - y2); b2 = 200 * (y2 - z2); return [l2, a2, b2]; }; convert$1.lab.xyz = function(lab) { var l2 = lab[0]; var a2 = lab[1]; var b2 = lab[2]; var x2; var y2; var z2; y2 = (l2 + 16) / 116; x2 = a2 / 500 + y2; z2 = y2 - b2 / 200; var y22 = Math.pow(y2, 3); var x22 = Math.pow(x2, 3); var z22 = Math.pow(z2, 3); y2 = y22 > 8856e-6 ? y22 : (y2 - 16 / 116) / 7.787; x2 = x22 > 8856e-6 ? x22 : (x2 - 16 / 116) / 7.787; z2 = z22 > 8856e-6 ? z22 : (z2 - 16 / 116) / 7.787; x2 *= 95.047; y2 *= 100; z2 *= 108.883; return [x2, y2, z2]; }; convert$1.lab.lch = function(lab) { var l2 = lab[0]; var a2 = lab[1]; var b2 = lab[2]; var hr; var h2; var c; hr = Math.atan2(b2, a2); h2 = hr * 360 / 2 / Math.PI; if (h2 < 0) { h2 += 360; } c = Math.sqrt(a2 * a2 + b2 * b2); return [l2, c, h2]; }; convert$1.lch.lab = function(lch) { var l2 = lch[0]; var c = lch[1]; var h2 = lch[2]; var a2; var b2; var hr; hr = h2 / 360 * 2 * Math.PI; a2 = c * Math.cos(hr); b2 = c * Math.sin(hr); return [l2, a2, b2]; }; convert$1.rgb.ansi16 = function(args) { var r2 = args[0]; var g2 = args[1]; var b2 = args[2]; var value = 1 in arguments ? arguments[1] : convert$1.rgb.hsv(args)[2]; value = Math.round(value / 50); if (value === 0) { return 30; } var ansi = 30 + (Math.round(b2 / 255) << 2 | Math.round(g2 / 255) << 1 | Math.round(r2 / 255)); if (value === 2) { ansi += 60; } return ansi; }; convert$1.hsv.ansi16 = function(args) { return convert$1.rgb.ansi16(convert$1.hsv.rgb(args), args[2]); }; convert$1.rgb.ansi256 = function(args) { var r2 = args[0]; var g2 = args[1]; var b2 = args[2]; if (r2 === g2 && g2 === b2) { if (r2 < 8) { return 16; } if (r2 > 248) { return 231; } return Math.round((r2 - 8) / 247 * 24) + 232; } var ansi = 16 + 36 * Math.round(r2 / 255 * 5) + 6 * Math.round(g2 / 255 * 5) + Math.round(b2 / 255 * 5); return ansi; }; convert$1.ansi16.rgb = function(args) { var color = args % 10; if (color === 0 || color === 7) { if (args > 50) { color += 3.5; } color = color / 10.5 * 255; return [color, color, color]; } var mult = (~~(args > 50) + 1) * 0.5; var r2 = (color & 1) * mult * 255; var g2 = (color >> 1 & 1) * mult * 255; var b2 = (color >> 2 & 1) * mult * 255; return [r2, g2, b2]; }; convert$1.ansi256.rgb = function(args) { if (args >= 232) { var c = (args - 232) * 10 + 8; return [c, c, c]; } args -= 16; var rem; var r2 = Math.floor(args / 36) / 5 * 255; var g2 = Math.floor((rem = args % 36) / 6) / 5 * 255; var b2 = rem % 6 / 5 * 255; return [r2, g2, b2]; }; convert$1.rgb.hex = function(args) { var integer2 = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255); var string = integer2.toString(16).toUpperCase(); return "000000".substring(string.length) + string; }; convert$1.hex.rgb = function(args) { var match2 = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); if (!match2) { return [0, 0, 0]; } var colorString = match2[0]; if (match2[0].length === 3) { colorString = colorString.split("").map(function(char2) { return char2 + char2; }).join(""); } var integer2 = parseInt(colorString, 16); var r2 = integer2 >> 16 & 255; var g2 = integer2 >> 8 & 255; var b2 = integer2 & 255; return [r2, g2, b2]; }; convert$1.rgb.hcg = function(rgb2) { var r2 = rgb2[0] / 255; var g2 = rgb2[1] / 255; var b2 = rgb2[2] / 255; var max2 = Math.max(Math.max(r2, g2), b2); var min2 = Math.min(Math.min(r2, g2), b2); var chroma = max2 - min2; var grayscale2; var hue; if (chroma < 1) { grayscale2 = min2 / (1 - chroma); } else { grayscale2 = 0; } if (chroma <= 0) { hue = 0; } else if (max2 === r2) { hue = (g2 - b2) / chroma % 6; } else if (max2 === g2) { hue = 2 + (b2 - r2) / chroma; } else { hue = 4 + (r2 - g2) / chroma + 4; } hue /= 6; hue %= 1; return [hue * 360, chroma * 100, grayscale2 * 100]; }; convert$1.hsl.hcg = function(hsl2) { var s2 = hsl2[1] / 100; var l2 = hsl2[2] / 100; var c = 1; var f2 = 0; if (l2 < 0.5) { c = 2 * s2 * l2; } else { c = 2 * s2 * (1 - l2); } if (c < 1) { f2 = (l2 - 0.5 * c) / (1 - c); } return [hsl2[0], c * 100, f2 * 100]; }; convert$1.hsv.hcg = function(hsv) { var s2 = hsv[1] / 100; var v2 = hsv[2] / 100; var c = s2 * v2; var f2 = 0; if (c < 1) { f2 = (v2 - c) / (1 - c); } return [hsv[0], c * 100, f2 * 100]; }; convert$1.hcg.rgb = function(hcg) { var h2 = hcg[0] / 360; var c = hcg[1] / 100; var g2 = hcg[2] / 100; if (c === 0) { return [g2 * 255, g2 * 255, g2 * 255]; } var pure = [0, 0, 0]; var hi2 = h2 % 1 * 6; var v2 = hi2 % 1; var w2 = 1 - v2; var mg2 = 0; switch (Math.floor(hi2)) { case 0: pure[0] = 1; pure[1] = v2; pure[2] = 0; break; case 1: pure[0] = w2; pure[1] = 1; pure[2] = 0; break; case 2: pure[0] = 0; pure[1] = 1; pure[2] = v2; break; case 3: pure[0] = 0; pure[1] = w2; pure[2] = 1; break; case 4: pure[0] = v2; pure[1] = 0; pure[2] = 1; break; default: pure[0] = 1; pure[1] = 0; pure[2] = w2; } mg2 = (1 - c) * g2; return [ (c * pure[0] + mg2) * 255, (c * pure[1] + mg2) * 255, (c * pure[2] + mg2) * 255 ]; }; convert$1.hcg.hsv = function(hcg) { var c = hcg[1] / 100; var g2 = hcg[2] / 100; var v2 = c + g2 * (1 - c); var f2 = 0; if (v2 > 0) { f2 = c / v2; } return [hcg[0], f2 * 100, v2 * 100]; }; convert$1.hcg.hsl = function(hcg) { var c = hcg[1] / 100; var g2 = hcg[2] / 100; var l2 = g2 * (1 - c) + 0.5 * c; var s2 = 0; if (l2 > 0 && l2 < 0.5) { s2 = c / (2 * l2); } else if (l2 >= 0.5 && l2 < 1) { s2 = c / (2 * (1 - l2)); } return [hcg[0], s2 * 100, l2 * 100]; }; convert$1.hcg.hwb = function(hcg) { var c = hcg[1] / 100; var g2 = hcg[2] / 100; var v2 = c + g2 * (1 - c); return [hcg[0], (v2 - c) * 100, (1 - v2) * 100]; }; convert$1.hwb.hcg = function(hwb) { var w2 = hwb[1] / 100; var b2 = hwb[2] / 100; var v2 = 1 - b2; var c = v2 - w2; var g2 = 0; if (c < 1) { g2 = (v2 - c) / (1 - c); } return [hwb[0], c * 100, g2 * 100]; }; convert$1.apple.rgb = function(apple) { return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; }; convert$1.rgb.apple = function(rgb2) { return [rgb2[0] / 255 * 65535, rgb2[1] / 255 * 65535, rgb2[2] / 255 * 65535]; }; convert$1.gray.rgb = function(args) { return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; }; convert$1.gray.hsl = convert$1.gray.hsv = function(args) { return [0, 0, args[0]]; }; convert$1.gray.hwb = function(gray) { return [0, 100, gray[0]]; }; convert$1.gray.cmyk = function(gray) { return [0, 0, 0, gray[0]]; }; convert$1.gray.lab = function(gray) { return [gray[0], 0, 0]; }; convert$1.gray.hex = function(gray) { var val = Math.round(gray[0] / 100 * 255) & 255; var integer2 = (val << 16) + (val << 8) + val; var string = integer2.toString(16).toUpperCase(); return "000000".substring(string.length) + string; }; convert$1.rgb.gray = function(rgb2) { var val = (rgb2[0] + rgb2[1] + rgb2[2]) / 3; return [val / 255 * 100]; }; var conversions$1 = conversions$2.exports; function buildGraph() { var graph = {}; var models2 = Object.keys(conversions$1); for (var len = models2.length, i2 = 0; i2 < len; i2++) { graph[models2[i2]] = { distance: -1, parent: null }; } return graph; } function deriveBFS(fromModel) { var graph = buildGraph(); var queue = [fromModel]; graph[fromModel].distance = 0; while (queue.length) { var current = queue.pop(); var adjacents = Object.keys(conversions$1[current]); for (var len = adjacents.length, i2 = 0; i2 < len; i2++) { var adjacent = adjacents[i2]; var node2 = graph[adjacent]; if (node2.distance === -1) { node2.distance = graph[current].distance + 1; node2.parent = current; queue.unshift(adjacent); } } } return graph; } function link(from2, to) { return function(args) { return to(from2(args)); }; } function wrapConversion(toModel, graph) { var path = [graph[toModel].parent, toModel]; var fn = conversions$1[graph[toModel].parent][toModel]; var cur = graph[toModel].parent; while (graph[cur].parent) { path.unshift(graph[cur].parent); fn = link(conversions$1[graph[cur].parent][cur], fn); cur = graph[cur].parent; } fn.conversion = path; return fn; } var route$1 = function(fromModel) { var graph = deriveBFS(fromModel); var conversion = {}; var models2 = Object.keys(graph); for (var len = models2.length, i2 = 0; i2 < len; i2++) { var toModel = models2[i2]; var node2 = graph[toModel]; if (node2.parent === null) { continue; } conversion[toModel] = wrapConversion(toModel, graph); } return conversion; }; var conversions = conversions$2.exports; var route = route$1; var convert = {}; var models = Object.keys(conversions); function wrapRaw(fn) { var wrappedFn = function(args) { if (args === void 0 || args === null) { return args; } if (arguments.length > 1) { args = Array.prototype.slice.call(arguments); } return fn(args); }; if ("conversion" in fn) { wrappedFn.conversion = fn.conversion; } return wrappedFn; } function wrapRounded(fn) { var wrappedFn = function(args) { if (args === void 0 || args === null) { return args; } if (arguments.length > 1) { args = Array.prototype.slice.call(arguments); } var result = fn(args); if (typeof result === "object") { for (var len = result.length, i2 = 0; i2 < len; i2++) { result[i2] = Math.round(result[i2]); } } return result; }; if ("conversion" in fn) { wrappedFn.conversion = fn.conversion; } return wrappedFn; } models.forEach(function(fromModel) { convert[fromModel] = {}; Object.defineProperty(convert[fromModel], "channels", { value: conversions[fromModel].channels }); Object.defineProperty(convert[fromModel], "labels", { value: conversions[fromModel].labels }); var routes = route(fromModel); var routeModels = Object.keys(routes); routeModels.forEach(function(toModel) { var fn = routes[toModel]; convert[fromModel][toModel] = wrapRounded(fn); convert[fromModel][toModel].raw = wrapRaw(fn); }); }); var colorConvert = convert; (function(module3) { const colorConvert$1 = colorConvert; const wrapAnsi16 = (fn, offset) => function() { const code2 = fn.apply(colorConvert$1, arguments); return `\x1B[${code2 + offset}m`; }; const wrapAnsi256 = (fn, offset) => function() { const code2 = fn.apply(colorConvert$1, arguments); return `\x1B[${38 + offset};5;${code2}m`; }; const wrapAnsi16m = (fn, offset) => function() { const rgb2 = fn.apply(colorConvert$1, arguments); return `\x1B[${38 + offset};2;${rgb2[0]};${rgb2[1]};${rgb2[2]}m`; }; function assembleStyles() { const codes = /* @__PURE__ */ new Map(); const styles2 = { modifier: { reset: [0, 0], bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29] }, color: { black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], gray: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39] }, bgColor: { bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], bgBlackBright: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] } }; styles2.color.grey = styles2.color.gray; for (const groupName of Object.keys(styles2)) { const group = styles2[groupName]; for (const styleName of Object.keys(group)) { const style = group[styleName]; styles2[styleName] = { open: `\x1B[${style[0]}m`, close: `\x1B[${style[1]}m` }; group[styleName] = styles2[styleName]; codes.set(style[0], style[1]); } Object.defineProperty(styles2, groupName, { value: group, enumerable: false }); Object.defineProperty(styles2, "codes", { value: codes, enumerable: false }); } const ansi2ansi = (n2) => n2; const rgb2rgb = (r2, g2, b2) => [r2, g2, b2]; styles2.color.close = "\x1B[39m"; styles2.bgColor.close = "\x1B[49m"; styles2.color.ansi = { ansi: wrapAnsi16(ansi2ansi, 0) }; styles2.color.ansi256 = { ansi256: wrapAnsi256(ansi2ansi, 0) }; styles2.color.ansi16m = { rgb: wrapAnsi16m(rgb2rgb, 0) }; styles2.bgColor.ansi = { ansi: wrapAnsi16(ansi2ansi, 10) }; styles2.bgColor.ansi256 = { ansi256: wrapAnsi256(ansi2ansi, 10) }; styles2.bgColor.ansi16m = { rgb: wrapAnsi16m(rgb2rgb, 10) }; for (let key2 of Object.keys(colorConvert$1)) { if (typeof colorConvert$1[key2] !== "object") { continue; } const suite = colorConvert$1[key2]; if (key2 === "ansi16") { key2 = "ansi"; } if ("ansi16" in suite) { styles2.color.ansi[key2] = wrapAnsi16(suite.ansi16, 0); styles2.bgColor.ansi[key2] = wrapAnsi16(suite.ansi16, 10); } if ("ansi256" in suite) { styles2.color.ansi256[key2] = wrapAnsi256(suite.ansi256, 0); styles2.bgColor.ansi256[key2] = wrapAnsi256(suite.ansi256, 10); } if ("rgb" in suite) { styles2.color.ansi16m[key2] = wrapAnsi16m(suite.rgb, 0); styles2.bgColor.ansi16m[key2] = wrapAnsi16m(suite.rgb, 10); } } return styles2; } Object.defineProperty(module3, "exports", { enumerable: true, get: assembleStyles }); })(ansiStyles); var browser = { stdout: false, stderr: false }; const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; const ESCAPES = /* @__PURE__ */ new Map([ ["n", "\n"], ["r", "\r"], ["t", " "], ["b", "\b"], ["f", "\f"], ["v", "\v"], ["0", "\0"], ["\\", "\\"], ["e", "\x1B"], ["a", "\x07"] ]); function unescape$1(c) { if (c[0] === "u" && c.length === 5 || c[0] === "x" && c.length === 3) { return String.fromCharCode(parseInt(c.slice(1), 16)); } return ESCAPES.get(c) || c; } function parseArguments(name, args) { const results = []; const chunks = args.trim().split(/\s*,\s*/g); let matches2; for (const chunk of chunks) { if (!isNaN(chunk)) { results.push(Number(chunk)); } else if (matches2 = chunk.match(STRING_REGEX)) { results.push(matches2[2].replace(ESCAPE_REGEX, (m2, escape2, chr) => escape2 ? unescape$1(escape2) : chr)); } else { throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); } } return results; } function parseStyle(style) { STYLE_REGEX.lastIndex = 0; const results = []; let matches2; while ((matches2 = STYLE_REGEX.exec(style)) !== null) { const name = matches2[1]; if (matches2[2]) { const args = parseArguments(name, matches2[2]); results.push([name].concat(args)); } else { results.push([name]); } } return results; } function buildStyle(chalk2, styles2) { const enabled = {}; for (const layer of styles2) { for (const style of layer.styles) { enabled[style[0]] = layer.inverse ? null : style.slice(1); } } let current = chalk2; for (const styleName of Object.keys(enabled)) { if (Array.isArray(enabled[styleName])) { if (!(styleName in current)) { throw new Error(`Unknown Chalk style: ${styleName}`); } if (enabled[styleName].length > 0) { current = current[styleName].apply(current, enabled[styleName]); } else { current = current[styleName]; } } } return current; } var templates = (chalk2, tmp) => { const styles2 = []; const chunks = []; let chunk = []; tmp.replace(TEMPLATE_REGEX, (m2, escapeChar, inverse, style, close2, chr) => { if (escapeChar) { chunk.push(unescape$1(escapeChar)); } else if (style) { const str2 = chunk.join(""); chunk = []; chunks.push(styles2.length === 0 ? str2 : buildStyle(chalk2, styles2)(str2)); styles2.push({ inverse, styles: parseStyle(style) }); } else if (close2) { if (styles2.length === 0) { throw new Error("Found extraneous } in Chalk template literal"); } chunks.push(buildStyle(chalk2, styles2)(chunk.join(""))); chunk = []; styles2.pop(); } else { chunk.push(chr); } }); chunks.push(chunk.join("")); if (styles2.length > 0) { const errMsg = `Chalk template literal is missing ${styles2.length} closing bracket${styles2.length === 1 ? "" : "s"} (\`}\`)`; throw new Error(errMsg); } return chunks.join(""); }; (function(module3) { const escapeStringRegexp$1 = escapeStringRegexp; const ansiStyles$1 = ansiStyles.exports; const stdoutColor = browser.stdout; const template = templates; const levelMapping = ["ansi", "ansi", "ansi256", "ansi16m"]; const skipModels = /* @__PURE__ */ new Set(["gray"]); const styles2 = /* @__PURE__ */ Object.create(null); function applyOptions(obj, options) { options = options || {}; const scLevel = 0; obj.level = options.level === void 0 ? scLevel : options.level; obj.enabled = "enabled" in options ? options.enabled : obj.level > 0; } function Chalk(options) { if (!this || !(this instanceof Chalk) || this.template) { const chalk2 = {}; applyOptions(chalk2, options); chalk2.template = function() { const args = [].slice.call(arguments); return chalkTag.apply(null, [chalk2.template].concat(args)); }; Object.setPrototypeOf(chalk2, Chalk.prototype); Object.setPrototypeOf(chalk2.template, chalk2); chalk2.template.constructor = Chalk; return chalk2.template; } applyOptions(this, options); } for (const key2 of Object.keys(ansiStyles$1)) { ansiStyles$1[key2].closeRe = new RegExp(escapeStringRegexp$1(ansiStyles$1[key2].close), "g"); styles2[key2] = { get() { const codes = ansiStyles$1[key2]; return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key2); } }; } styles2.visible = { get() { return build.call(this, this._styles || [], true, "visible"); } }; ansiStyles$1.color.closeRe = new RegExp(escapeStringRegexp$1(ansiStyles$1.color.close), "g"); for (const model2 of Object.keys(ansiStyles$1.color.ansi)) { if (skipModels.has(model2)) { continue; } styles2[model2] = { get() { const level = this.level; return function() { const open = ansiStyles$1.color[levelMapping[level]][model2].apply(null, arguments); const codes = { open, close: ansiStyles$1.color.close, closeRe: ansiStyles$1.color.closeRe }; return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model2); }; } }; } ansiStyles$1.bgColor.closeRe = new RegExp(escapeStringRegexp$1(ansiStyles$1.bgColor.close), "g"); for (const model2 of Object.keys(ansiStyles$1.bgColor.ansi)) { if (skipModels.has(model2)) { continue; } const bgModel = "bg" + model2[0].toUpperCase() + model2.slice(1); styles2[bgModel] = { get() { const level = this.level; return function() { const open = ansiStyles$1.bgColor[levelMapping[level]][model2].apply(null, arguments); const codes = { open, close: ansiStyles$1.bgColor.close, closeRe: ansiStyles$1.bgColor.closeRe }; return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model2); }; } }; } const proto2 = Object.defineProperties(() => { }, styles2); function build(_styles, _empty, key2) { const builder = function() { return applyStyle.apply(builder, arguments); }; builder._styles = _styles; builder._empty = _empty; const self2 = this; Object.defineProperty(builder, "level", { enumerable: true, get() { return self2.level; }, set(level) { self2.level = level; } }); Object.defineProperty(builder, "enabled", { enumerable: true, get() { return self2.enabled; }, set(enabled) { self2.enabled = enabled; } }); builder.hasGrey = this.hasGrey || key2 === "gray" || key2 === "grey"; builder.__proto__ = proto2; return builder; } function applyStyle() { const args = arguments; const argsLen = args.length; let str2 = String(arguments[0]); if (argsLen === 0) { return ""; } if (argsLen > 1) { for (let a2 = 1; a2 < argsLen; a2++) { str2 += " " + args[a2]; } } if (!this.enabled || this.level <= 0 || !str2) { return this._empty ? "" : str2; } const originalDim = ansiStyles$1.dim.open; for (const code2 of this._styles.slice().reverse()) { str2 = code2.open + str2.replace(code2.closeRe, code2.open) + code2.close; str2 = str2.replace(/\r?\n/g, `${code2.close}$&${code2.open}`); } ansiStyles$1.dim.open = originalDim; return str2; } function chalkTag(chalk2, strings) { if (!Array.isArray(strings)) { return [].slice.call(arguments, 1).join(" "); } const args = [].slice.call(arguments, 2); const parts = [strings.raw[0]]; for (let i2 = 1; i2 < strings.length; i2++) { parts.push(String(args[i2 - 1]).replace(/[{}\\]/g, "\\$&")); parts.push(String(strings.raw[i2])); } return template(chalk2, parts.join("")); } Object.defineProperties(Chalk.prototype, styles2); module3.exports = Chalk(); module3.exports.supportsColor = stdoutColor; module3.exports.default = module3.exports; })(chalk$1); const chalk = chalk$1.exports; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var classCallCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function() { function defineProperties(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var get = function get2(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === void 0) { var parent = Object.getPrototypeOf(object); if (parent === null) { return void 0; } else { return get2(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === void 0) { return void 0; } return getter.call(receiver); } }; var inherits = function(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; var possibleConstructorReturn = function(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self2; }; var slicedToArray = function() { function sliceIterator(arr, i2) { var _arr = []; var _n = true; var _d = false; var _e = void 0; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i2 && _arr.length === i2) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function(arr, i2) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i2); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var toConsumableArray = function(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) arr2[i2] = arr[i2]; return arr2; } else { return Array.from(arr); } }; var Processor = function() { function Processor2(options) { classCallCheck(this, Processor2); this.selfOptions = options || {}; this.pipes = {}; } createClass(Processor2, [{ key: "options", value: function options(_options) { if (_options) { this.selfOptions = _options; } return this.selfOptions; } }, { key: "pipe", value: function pipe(name, pipeArg) { var pipe2 = pipeArg; if (typeof name === "string") { if (typeof pipe2 === "undefined") { return this.pipes[name]; } else { this.pipes[name] = pipe2; } } if (name && name.name) { pipe2 = name; if (pipe2.processor === this) { return pipe2; } this.pipes[pipe2.name] = pipe2; } pipe2.processor = this; return pipe2; } }, { key: "process", value: function process2(input, pipe) { var context = input; context.options = this.options(); var nextPipe = pipe || input.pipe || "default"; var lastPipe = void 0; var lastContext = void 0; while (nextPipe) { if (typeof context.nextAfterChildren !== "undefined") { context.next = context.nextAfterChildren; context.nextAfterChildren = null; } if (typeof nextPipe === "string") { nextPipe = this.pipe(nextPipe); } nextPipe.process(context); lastContext = context; lastPipe = nextPipe; nextPipe = null; if (context) { if (context.next) { context = context.next; nextPipe = lastContext.nextPipe || context.pipe || lastPipe; } } } return context.hasResult ? context.result : void 0; } }]); return Processor2; }(); var Pipe = function() { function Pipe2(name) { classCallCheck(this, Pipe2); this.name = name; this.filters = []; } createClass(Pipe2, [{ key: "process", value: function process2(input) { if (!this.processor) { throw new Error("add this pipe to a processor before using it"); } var debug2 = this.debug; var length2 = this.filters.length; var context = input; for (var index2 = 0; index2 < length2; index2++) { var filter = this.filters[index2]; if (debug2) { this.log("filter: " + filter.filterName); } filter(context); if ((typeof context === "undefined" ? "undefined" : _typeof(context)) === "object" && context.exiting) { context.exiting = false; break; } } if (!context.next && this.resultCheck) { this.resultCheck(context); } } }, { key: "log", value: function log2(msg) { console.log("[jsondiffpatch] " + this.name + " pipe, " + msg); } }, { key: "append", value: function append2() { var _filters; (_filters = this.filters).push.apply(_filters, arguments); return this; } }, { key: "prepend", value: function prepend() { var _filters2; (_filters2 = this.filters).unshift.apply(_filters2, arguments); return this; } }, { key: "indexOf", value: function indexOf(filterName) { if (!filterName) { throw new Error("a filter name is required"); } for (var index2 = 0; index2 < this.filters.length; index2++) { var filter = this.filters[index2]; if (filter.filterName === filterName) { return index2; } } throw new Error("filter not found: " + filterName); } }, { key: "list", value: function list() { return this.filters.map(function(f2) { return f2.filterName; }); } }, { key: "after", value: function after(filterName) { var index2 = this.indexOf(filterName); var params = Array.prototype.slice.call(arguments, 1); if (!params.length) { throw new Error("a filter is required"); } params.unshift(index2 + 1, 0); Array.prototype.splice.apply(this.filters, params); return this; } }, { key: "before", value: function before(filterName) { var index2 = this.indexOf(filterName); var params = Array.prototype.slice.call(arguments, 1); if (!params.length) { throw new Error("a filter is required"); } params.unshift(index2, 0); Array.prototype.splice.apply(this.filters, params); return this; } }, { key: "replace", value: function replace2(filterName) { var index2 = this.indexOf(filterName); var params = Array.prototype.slice.call(arguments, 1); if (!params.length) { throw new Error("a filter is required"); } params.unshift(index2, 1); Array.prototype.splice.apply(this.filters, params); return this; } }, { key: "remove", value: function remove(filterName) { var index2 = this.indexOf(filterName); this.filters.splice(index2, 1); return this; } }, { key: "clear", value: function clear2() { this.filters.length = 0; return this; } }, { key: "shouldHaveResult", value: function shouldHaveResult(should) { if (should === false) { this.resultCheck = null; return; } if (this.resultCheck) { return; } var pipe = this; this.resultCheck = function(context) { if (!context.hasResult) { console.log(context); var error = new Error(pipe.name + " failed"); error.noResult = true; throw error; } }; return this; } }]); return Pipe2; }(); var Context = function() { function Context2() { classCallCheck(this, Context2); } createClass(Context2, [{ key: "setResult", value: function setResult(result) { this.result = result; this.hasResult = true; return this; } }, { key: "exit", value: function exit() { this.exiting = true; return this; } }, { key: "switchTo", value: function switchTo(next2, pipe) { if (typeof next2 === "string" || next2 instanceof Pipe) { this.nextPipe = next2; } else { this.next = next2; if (pipe) { this.nextPipe = pipe; } } return this; } }, { key: "push", value: function push2(child, name) { child.parent = this; if (typeof name !== "undefined") { child.childName = name; } child.root = this.root || this; child.options = child.options || this.options; if (!this.children) { this.children = [child]; this.nextAfterChildren = this.next || null; this.next = child; } else { this.children[this.children.length - 1].next = child; this.children.push(child); } child.next = this; return this; } }]); return Context2; }(); var isArray = typeof Array.isArray === "function" ? Array.isArray : function(a2) { return a2 instanceof Array; }; function cloneRegExp(re2) { var regexMatch = /^\/(.*)\/([gimyu]*)$/.exec(re2.toString()); return new RegExp(regexMatch[1], regexMatch[2]); } function clone(arg) { if ((typeof arg === "undefined" ? "undefined" : _typeof(arg)) !== "object") { return arg; } if (arg === null) { return null; } if (isArray(arg)) { return arg.map(clone); } if (arg instanceof Date) { return new Date(arg.getTime()); } if (arg instanceof RegExp) { return cloneRegExp(arg); } var cloned = {}; for (var name in arg) { if (Object.prototype.hasOwnProperty.call(arg, name)) { cloned[name] = clone(arg[name]); } } return cloned; } var DiffContext = function(_Context) { inherits(DiffContext2, _Context); function DiffContext2(left, right) { classCallCheck(this, DiffContext2); var _this = possibleConstructorReturn(this, (DiffContext2.__proto__ || Object.getPrototypeOf(DiffContext2)).call(this)); _this.left = left; _this.right = right; _this.pipe = "diff"; return _this; } createClass(DiffContext2, [{ key: "setResult", value: function setResult(result) { if (this.options.cloneDiffValues && (typeof result === "undefined" ? "undefined" : _typeof(result)) === "object") { var clone$$1 = typeof this.options.cloneDiffValues === "function" ? this.options.cloneDiffValues : clone; if (_typeof(result[0]) === "object") { result[0] = clone$$1(result[0]); } if (_typeof(result[1]) === "object") { result[1] = clone$$1(result[1]); } } return Context.prototype.setResult.apply(this, arguments); } }]); return DiffContext2; }(Context); var PatchContext = function(_Context) { inherits(PatchContext2, _Context); function PatchContext2(left, delta2) { classCallCheck(this, PatchContext2); var _this = possibleConstructorReturn(this, (PatchContext2.__proto__ || Object.getPrototypeOf(PatchContext2)).call(this)); _this.left = left; _this.delta = delta2; _this.pipe = "patch"; return _this; } return PatchContext2; }(Context); var ReverseContext = function(_Context) { inherits(ReverseContext2, _Context); function ReverseContext2(delta2) { classCallCheck(this, ReverseContext2); var _this = possibleConstructorReturn(this, (ReverseContext2.__proto__ || Object.getPrototypeOf(ReverseContext2)).call(this)); _this.delta = delta2; _this.pipe = "reverse"; return _this; } return ReverseContext2; }(Context); var isArray$1 = typeof Array.isArray === "function" ? Array.isArray : function(a2) { return a2 instanceof Array; }; var diffFilter = function trivialMatchesDiffFilter(context) { if (context.left === context.right) { context.setResult(void 0).exit(); return; } if (typeof context.left === "undefined") { if (typeof context.right === "function") { throw new Error("functions are not supported"); } context.setResult([context.right]).exit(); return; } if (typeof context.right === "undefined") { context.setResult([context.left, 0, 0]).exit(); return; } if (typeof context.left === "function" || typeof context.right === "function") { throw new Error("functions are not supported"); } context.leftType = context.left === null ? "null" : _typeof(context.left); context.rightType = context.right === null ? "null" : _typeof(context.right); if (context.leftType !== context.rightType) { context.setResult([context.left, context.right]).exit(); return; } if (context.leftType === "boolean" || context.leftType === "number") { context.setResult([context.left, context.right]).exit(); return; } if (context.leftType === "object") { context.leftIsArray = isArray$1(context.left); } if (context.rightType === "object") { context.rightIsArray = isArray$1(context.right); } if (context.leftIsArray !== context.rightIsArray) { context.setResult([context.left, context.right]).exit(); return; } if (context.left instanceof RegExp) { if (context.right instanceof RegExp) { context.setResult([context.left.toString(), context.right.toString()]).exit(); } else { context.setResult([context.left, context.right]).exit(); } } }; diffFilter.filterName = "trivial"; var patchFilter = function trivialMatchesPatchFilter(context) { if (typeof context.delta === "undefined") { context.setResult(context.left).exit(); return; } context.nested = !isArray$1(context.delta); if (context.nested) { return; } if (context.delta.length === 1) { context.setResult(context.delta[0]).exit(); return; } if (context.delta.length === 2) { if (context.left instanceof RegExp) { var regexArgs = /^\/(.*)\/([gimyu]+)$/.exec(context.delta[1]); if (regexArgs) { context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit(); return; } } context.setResult(context.delta[1]).exit(); return; } if (context.delta.length === 3 && context.delta[2] === 0) { context.setResult(void 0).exit(); } }; patchFilter.filterName = "trivial"; var reverseFilter = function trivialReferseFilter(context) { if (typeof context.delta === "undefined") { context.setResult(context.delta).exit(); return; } context.nested = !isArray$1(context.delta); if (context.nested) { return; } if (context.delta.length === 1) { context.setResult([context.delta[0], 0, 0]).exit(); return; } if (context.delta.length === 2) { context.setResult([context.delta[1], context.delta[0]]).exit(); return; } if (context.delta.length === 3 && context.delta[2] === 0) { context.setResult([context.delta[0]]).exit(); } }; reverseFilter.filterName = "trivial"; function collectChildrenDiffFilter(context) { if (!context || !context.children) { return; } var length2 = context.children.length; var child = void 0; var result = context.result; for (var index2 = 0; index2 < length2; index2++) { child = context.children[index2]; if (typeof child.result === "undefined") { continue; } result = result || {}; result[child.childName] = child.result; } if (result && context.leftIsArray) { result._t = "a"; } context.setResult(result).exit(); } collectChildrenDiffFilter.filterName = "collectChildren"; function objectsDiffFilter(context) { if (context.leftIsArray || context.leftType !== "object") { return; } var name = void 0; var child = void 0; var propertyFilter = context.options.propertyFilter; for (name in context.left) { if (!Object.prototype.hasOwnProperty.call(context.left, name)) { continue; } if (propertyFilter && !propertyFilter(name, context)) { continue; } child = new DiffContext(context.left[name], context.right[name]); context.push(child, name); } for (name in context.right) { if (!Object.prototype.hasOwnProperty.call(context.right, name)) { continue; } if (propertyFilter && !propertyFilter(name, context)) { continue; } if (typeof context.left[name] === "undefined") { child = new DiffContext(void 0, context.right[name]); context.push(child, name); } } if (!context.children || context.children.length === 0) { context.setResult(void 0).exit(); return; } context.exit(); } objectsDiffFilter.filterName = "objects"; var patchFilter$1 = function nestedPatchFilter(context) { if (!context.nested) { return; } if (context.delta._t) { return; } var name = void 0; var child = void 0; for (name in context.delta) { child = new PatchContext(context.left[name], context.delta[name]); context.push(child, name); } context.exit(); }; patchFilter$1.filterName = "objects"; var collectChildrenPatchFilter = function collectChildrenPatchFilter2(context) { if (!context || !context.children) { return; } if (context.delta._t) { return; } var length2 = context.children.length; var child = void 0; for (var index2 = 0; index2 < length2; index2++) { child = context.children[index2]; if (Object.prototype.hasOwnProperty.call(context.left, child.childName) && child.result === void 0) { delete context.left[child.childName]; } else if (context.left[child.childName] !== child.result) { context.left[child.childName] = child.result; } } context.setResult(context.left).exit(); }; collectChildrenPatchFilter.filterName = "collectChildren"; var reverseFilter$1 = function nestedReverseFilter(context) { if (!context.nested) { return; } if (context.delta._t) { return; } var name = void 0; var child = void 0; for (name in context.delta) { child = new ReverseContext(context.delta[name]); context.push(child, name); } context.exit(); }; reverseFilter$1.filterName = "objects"; function collectChildrenReverseFilter(context) { if (!context || !context.children) { return; } if (context.delta._t) { return; } var length2 = context.children.length; var child = void 0; var delta2 = {}; for (var index2 = 0; index2 < length2; index2++) { child = context.children[index2]; if (delta2[child.childName] !== child.result) { delta2[child.childName] = child.result; } } context.setResult(delta2).exit(); } collectChildrenReverseFilter.filterName = "collectChildren"; var defaultMatch = function defaultMatch2(array1, array2, index1, index2) { return array1[index1] === array2[index2]; }; var lengthMatrix = function lengthMatrix2(array1, array2, match2, context) { var len1 = array1.length; var len2 = array2.length; var x2 = void 0, y2 = void 0; var matrix = [len1 + 1]; for (x2 = 0; x2 < len1 + 1; x2++) { matrix[x2] = [len2 + 1]; for (y2 = 0; y2 < len2 + 1; y2++) { matrix[x2][y2] = 0; } } matrix.match = match2; for (x2 = 1; x2 < len1 + 1; x2++) { for (y2 = 1; y2 < len2 + 1; y2++) { if (match2(array1, array2, x2 - 1, y2 - 1, context)) { matrix[x2][y2] = matrix[x2 - 1][y2 - 1] + 1; } else { matrix[x2][y2] = Math.max(matrix[x2 - 1][y2], matrix[x2][y2 - 1]); } } } return matrix; }; var backtrack = function backtrack2(matrix, array1, array2, context) { var index1 = array1.length; var index2 = array2.length; var subsequence = { sequence: [], indices1: [], indices2: [] }; while (index1 !== 0 && index2 !== 0) { var sameLetter = matrix.match(array1, array2, index1 - 1, index2 - 1, context); if (sameLetter) { subsequence.sequence.unshift(array1[index1 - 1]); subsequence.indices1.unshift(index1 - 1); subsequence.indices2.unshift(index2 - 1); --index1; --index2; } else { var valueAtMatrixAbove = matrix[index1][index2 - 1]; var valueAtMatrixLeft = matrix[index1 - 1][index2]; if (valueAtMatrixAbove > valueAtMatrixLeft) { --index2; } else { --index1; } } } return subsequence; }; var get$1 = function get2(array1, array2, match2, context) { var innerContext = context || {}; var matrix = lengthMatrix(array1, array2, match2 || defaultMatch, innerContext); var result = backtrack(matrix, array1, array2, innerContext); if (typeof array1 === "string" && typeof array2 === "string") { result.sequence = result.sequence.join(""); } return result; }; var lcs = { get: get$1 }; var ARRAY_MOVE = 3; var isArray$2 = typeof Array.isArray === "function" ? Array.isArray : function(a2) { return a2 instanceof Array; }; var arrayIndexOf = typeof Array.prototype.indexOf === "function" ? function(array, item) { return array.indexOf(item); } : function(array, item) { var length2 = array.length; for (var i2 = 0; i2 < length2; i2++) { if (array[i2] === item) { return i2; } } return -1; }; function arraysHaveMatchByRef(array1, array2, len1, len2) { for (var index1 = 0; index1 < len1; index1++) { var val1 = array1[index1]; for (var index2 = 0; index2 < len2; index2++) { var val2 = array2[index2]; if (index1 !== index2 && val1 === val2) { return true; } } } } function matchItems(array1, array2, index1, index2, context) { var value1 = array1[index1]; var value2 = array2[index2]; if (value1 === value2) { return true; } if ((typeof value1 === "undefined" ? "undefined" : _typeof(value1)) !== "object" || (typeof value2 === "undefined" ? "undefined" : _typeof(value2)) !== "object") { return false; } var objectHash = context.objectHash; if (!objectHash) { return context.matchByPosition && index1 === index2; } var hash1 = void 0; var hash2 = void 0; if (typeof index1 === "number") { context.hashCache1 = context.hashCache1 || []; hash1 = context.hashCache1[index1]; if (typeof hash1 === "undefined") { context.hashCache1[index1] = hash1 = objectHash(value1, index1); } } else { hash1 = objectHash(value1); } if (typeof hash1 === "undefined") { return false; } if (typeof index2 === "number") { context.hashCache2 = context.hashCache2 || []; hash2 = context.hashCache2[index2]; if (typeof hash2 === "undefined") { context.hashCache2[index2] = hash2 = objectHash(value2, index2); } } else { hash2 = objectHash(value2); } if (typeof hash2 === "undefined") { return false; } return hash1 === hash2; } var diffFilter$1 = function arraysDiffFilter(context) { if (!context.leftIsArray) { return; } var matchContext = { objectHash: context.options && context.options.objectHash, matchByPosition: context.options && context.options.matchByPosition }; var commonHead = 0; var commonTail = 0; var index2 = void 0; var index1 = void 0; var index22 = void 0; var array1 = context.left; var array2 = context.right; var len1 = array1.length; var len2 = array2.length; var child = void 0; if (len1 > 0 && len2 > 0 && !matchContext.objectHash && typeof matchContext.matchByPosition !== "boolean") { matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2); } while (commonHead < len1 && commonHead < len2 && matchItems(array1, array2, commonHead, commonHead, matchContext)) { index2 = commonHead; child = new DiffContext(context.left[index2], context.right[index2]); context.push(child, index2); commonHead++; } while (commonTail + commonHead < len1 && commonTail + commonHead < len2 && matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) { index1 = len1 - 1 - commonTail; index22 = len2 - 1 - commonTail; child = new DiffContext(context.left[index1], context.right[index22]); context.push(child, index22); commonTail++; } var result = void 0; if (commonHead + commonTail === len1) { if (len1 === len2) { context.setResult(void 0).exit(); return; } result = result || { _t: "a" }; for (index2 = commonHead; index2 < len2 - commonTail; index2++) { result[index2] = [array2[index2]]; } context.setResult(result).exit(); return; } if (commonHead + commonTail === len2) { result = result || { _t: "a" }; for (index2 = commonHead; index2 < len1 - commonTail; index2++) { result["_" + index2] = [array1[index2], 0, 0]; } context.setResult(result).exit(); return; } delete matchContext.hashCache1; delete matchContext.hashCache2; var trimmed1 = array1.slice(commonHead, len1 - commonTail); var trimmed2 = array2.slice(commonHead, len2 - commonTail); var seq2 = lcs.get(trimmed1, trimmed2, matchItems, matchContext); var removedItems = []; result = result || { _t: "a" }; for (index2 = commonHead; index2 < len1 - commonTail; index2++) { if (arrayIndexOf(seq2.indices1, index2 - commonHead) < 0) { result["_" + index2] = [array1[index2], 0, 0]; removedItems.push(index2); } } var detectMove = true; if (context.options && context.options.arrays && context.options.arrays.detectMove === false) { detectMove = false; } var includeValueOnMove = false; if (context.options && context.options.arrays && context.options.arrays.includeValueOnMove) { includeValueOnMove = true; } var removedItemsLength = removedItems.length; for (index2 = commonHead; index2 < len2 - commonTail; index2++) { var indexOnArray2 = arrayIndexOf(seq2.indices2, index2 - commonHead); if (indexOnArray2 < 0) { var isMove = false; if (detectMove && removedItemsLength > 0) { for (var removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) { index1 = removedItems[removeItemIndex1]; if (matchItems(trimmed1, trimmed2, index1 - commonHead, index2 - commonHead, matchContext)) { result["_" + index1].splice(1, 2, index2, ARRAY_MOVE); if (!includeValueOnMove) { result["_" + index1][0] = ""; } index22 = index2; child = new DiffContext(context.left[index1], context.right[index22]); context.push(child, index22); removedItems.splice(removeItemIndex1, 1); isMove = true; break; } } } if (!isMove) { result[index2] = [array2[index2]]; } } else { index1 = seq2.indices1[indexOnArray2] + commonHead; index22 = seq2.indices2[indexOnArray2] + commonHead; child = new DiffContext(context.left[index1], context.right[index22]); context.push(child, index22); } } context.setResult(result).exit(); }; diffFilter$1.filterName = "arrays"; var compare = { numerically: function numerically(a2, b2) { return a2 - b2; }, numericallyBy: function numericallyBy(name) { return function(a2, b2) { return a2[name] - b2[name]; }; } }; var patchFilter$2 = function nestedPatchFilter(context) { if (!context.nested) { return; } if (context.delta._t !== "a") { return; } var index2 = void 0; var index1 = void 0; var delta2 = context.delta; var array = context.left; var toRemove = []; var toInsert = []; var toModify = []; for (index2 in delta2) { if (index2 !== "_t") { if (index2[0] === "_") { if (delta2[index2][2] === 0 || delta2[index2][2] === ARRAY_MOVE) { toRemove.push(parseInt(index2.slice(1), 10)); } else { throw new Error("only removal or move can be applied at original array indices," + (" invalid diff type: " + delta2[index2][2])); } } else { if (delta2[index2].length === 1) { toInsert.push({ index: parseInt(index2, 10), value: delta2[index2][0] }); } else { toModify.push({ index: parseInt(index2, 10), delta: delta2[index2] }); } } } } toRemove = toRemove.sort(compare.numerically); for (index2 = toRemove.length - 1; index2 >= 0; index2--) { index1 = toRemove[index2]; var indexDiff = delta2["_" + index1]; var removedValue = array.splice(index1, 1)[0]; if (indexDiff[2] === ARRAY_MOVE) { toInsert.push({ index: indexDiff[1], value: removedValue }); } } toInsert = toInsert.sort(compare.numericallyBy("index")); var toInsertLength = toInsert.length; for (index2 = 0; index2 < toInsertLength; index2++) { var insertion = toInsert[index2]; array.splice(insertion.index, 0, insertion.value); } var toModifyLength = toModify.length; var child = void 0; if (toModifyLength > 0) { for (index2 = 0; index2 < toModifyLength; index2++) { var modification = toModify[index2]; child = new PatchContext(context.left[modification.index], modification.delta); context.push(child, modification.index); } } if (!context.children) { context.setResult(context.left).exit(); return; } context.exit(); }; patchFilter$2.filterName = "arrays"; var collectChildrenPatchFilter$1 = function collectChildrenPatchFilter2(context) { if (!context || !context.children) { return; } if (context.delta._t !== "a") { return; } var length2 = context.children.length; var child = void 0; for (var index2 = 0; index2 < length2; index2++) { child = context.children[index2]; context.left[child.childName] = child.result; } context.setResult(context.left).exit(); }; collectChildrenPatchFilter$1.filterName = "arraysCollectChildren"; var reverseFilter$2 = function arraysReverseFilter(context) { if (!context.nested) { if (context.delta[2] === ARRAY_MOVE) { context.newName = "_" + context.delta[1]; context.setResult([context.delta[0], parseInt(context.childName.substr(1), 10), ARRAY_MOVE]).exit(); } return; } if (context.delta._t !== "a") { return; } var name = void 0; var child = void 0; for (name in context.delta) { if (name === "_t") { continue; } child = new ReverseContext(context.delta[name]); context.push(child, name); } context.exit(); }; reverseFilter$2.filterName = "arrays"; var reverseArrayDeltaIndex = function reverseArrayDeltaIndex2(delta2, index2, itemDelta) { if (typeof index2 === "string" && index2[0] === "_") { return parseInt(index2.substr(1), 10); } else if (isArray$2(itemDelta) && itemDelta[2] === 0) { return "_" + index2; } var reverseIndex = +index2; for (var deltaIndex in delta2) { var deltaItem = delta2[deltaIndex]; if (isArray$2(deltaItem)) { if (deltaItem[2] === ARRAY_MOVE) { var moveFromIndex = parseInt(deltaIndex.substr(1), 10); var moveToIndex = deltaItem[1]; if (moveToIndex === +index2) { return moveFromIndex; } if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) { reverseIndex++; } else if (moveFromIndex >= reverseIndex && moveToIndex < reverseIndex) { reverseIndex--; } } else if (deltaItem[2] === 0) { var deleteIndex = parseInt(deltaIndex.substr(1), 10); if (deleteIndex <= reverseIndex) { reverseIndex++; } } else if (deltaItem.length === 1 && deltaIndex <= reverseIndex) { reverseIndex--; } } } return reverseIndex; }; function collectChildrenReverseFilter$1(context) { if (!context || !context.children) { return; } if (context.delta._t !== "a") { return; } var length2 = context.children.length; var child = void 0; var delta2 = { _t: "a" }; for (var index2 = 0; index2 < length2; index2++) { child = context.children[index2]; var name = child.newName; if (typeof name === "undefined") { name = reverseArrayDeltaIndex(context.delta, child.childName, child.result); } if (delta2[name] !== child.result) { delta2[name] = child.result; } } context.setResult(delta2).exit(); } collectChildrenReverseFilter$1.filterName = "arraysCollectChildren"; var diffFilter$2 = function datesDiffFilter(context) { if (context.left instanceof Date) { if (context.right instanceof Date) { if (context.left.getTime() !== context.right.getTime()) { context.setResult([context.left, context.right]); } else { context.setResult(void 0); } } else { context.setResult([context.left, context.right]); } context.exit(); } else if (context.right instanceof Date) { context.setResult([context.left, context.right]).exit(); } }; diffFilter$2.filterName = "dates"; var TEXT_DIFF = 2; var DEFAULT_MIN_LENGTH = 60; var cachedDiffPatch = null; var getDiffMatchPatch = function getDiffMatchPatch2(required) { if (!cachedDiffPatch) { var instance = void 0; if (typeof diff_match_patch !== "undefined") { instance = typeof diff_match_patch === "function" ? new diff_match_patch() : new diff_match_patch.diff_match_patch(); } else if (dmp) { try { instance = dmp && new dmp(); } catch (err) { instance = null; } } if (!instance) { if (!required) { return null; } var error = new Error("text diff_match_patch library not found"); error.diff_match_patch_not_found = true; throw error; } cachedDiffPatch = { diff: function diff2(txt1, txt2) { return instance.patch_toText(instance.patch_make(txt1, txt2)); }, patch: function patch2(txt1, _patch) { var results = instance.patch_apply(instance.patch_fromText(_patch), txt1); for (var i2 = 0; i2 < results[1].length; i2++) { if (!results[1][i2]) { var _error = new Error("text patch failed"); _error.textPatchFailed = true; } } return results[0]; } }; } return cachedDiffPatch; }; var diffFilter$3 = function textsDiffFilter(context) { if (context.leftType !== "string") { return; } var minLength = context.options && context.options.textDiff && context.options.textDiff.minLength || DEFAULT_MIN_LENGTH; if (context.left.length < minLength || context.right.length < minLength) { context.setResult([context.left, context.right]).exit(); return; } var diffMatchPatch2 = getDiffMatchPatch(); if (!diffMatchPatch2) { context.setResult([context.left, context.right]).exit(); return; } var diff2 = diffMatchPatch2.diff; context.setResult([diff2(context.left, context.right), 0, TEXT_DIFF]).exit(); }; diffFilter$3.filterName = "texts"; var patchFilter$3 = function textsPatchFilter(context) { if (context.nested) { return; } if (context.delta[2] !== TEXT_DIFF) { return; } var patch2 = getDiffMatchPatch(true).patch; context.setResult(patch2(context.left, context.delta[0])).exit(); }; patchFilter$3.filterName = "texts"; var textDeltaReverse = function textDeltaReverse2(delta2) { var i2 = void 0; var l2 = void 0; var lines2 = void 0; var line2 = void 0; var lineTmp = void 0; var header = null; var headerRegex = /^@@ +-(\d+),(\d+) +\+(\d+),(\d+) +@@$/; var lineHeader = void 0; lines2 = delta2.split("\n"); for (i2 = 0, l2 = lines2.length; i2 < l2; i2++) { line2 = lines2[i2]; var lineStart = line2.slice(0, 1); if (lineStart === "@") { header = headerRegex.exec(line2); lineHeader = i2; lines2[lineHeader] = "@@ -" + header[3] + "," + header[4] + " +" + header[1] + "," + header[2] + " @@"; } else if (lineStart === "+") { lines2[i2] = "-" + lines2[i2].slice(1); if (lines2[i2 - 1].slice(0, 1) === "+") { lineTmp = lines2[i2]; lines2[i2] = lines2[i2 - 1]; lines2[i2 - 1] = lineTmp; } } else if (lineStart === "-") { lines2[i2] = "+" + lines2[i2].slice(1); } } return lines2.join("\n"); }; var reverseFilter$3 = function textsReverseFilter(context) { if (context.nested) { return; } if (context.delta[2] !== TEXT_DIFF) { return; } context.setResult([textDeltaReverse(context.delta[0]), 0, TEXT_DIFF]).exit(); }; reverseFilter$3.filterName = "texts"; var DiffPatcher = function() { function DiffPatcher2(options) { classCallCheck(this, DiffPatcher2); this.processor = new Processor(options); this.processor.pipe(new Pipe("diff").append(collectChildrenDiffFilter, diffFilter, diffFilter$2, diffFilter$3, objectsDiffFilter, diffFilter$1).shouldHaveResult()); this.processor.pipe(new Pipe("patch").append(collectChildrenPatchFilter, collectChildrenPatchFilter$1, patchFilter, patchFilter$3, patchFilter$1, patchFilter$2).shouldHaveResult()); this.processor.pipe(new Pipe("reverse").append(collectChildrenReverseFilter, collectChildrenReverseFilter$1, reverseFilter, reverseFilter$3, reverseFilter$1, reverseFilter$2).shouldHaveResult()); } createClass(DiffPatcher2, [{ key: "options", value: function options() { var _processor; return (_processor = this.processor).options.apply(_processor, arguments); } }, { key: "diff", value: function diff2(left, right) { return this.processor.process(new DiffContext(left, right)); } }, { key: "patch", value: function patch2(left, delta2) { return this.processor.process(new PatchContext(left, delta2)); } }, { key: "reverse", value: function reverse(delta2) { return this.processor.process(new ReverseContext(delta2)); } }, { key: "unpatch", value: function unpatch(right, delta2) { return this.patch(right, this.reverse(delta2)); } }, { key: "clone", value: function clone$$1(value) { return clone(value); } }]); return DiffPatcher2; }(); var isArray$3 = typeof Array.isArray === "function" ? Array.isArray : function(a2) { return a2 instanceof Array; }; var getObjectKeys = typeof Object.keys === "function" ? function(obj) { return Object.keys(obj); } : function(obj) { var names = []; for (var property in obj) { if (Object.prototype.hasOwnProperty.call(obj, property)) { names.push(property); } } return names; }; var trimUnderscore = function trimUnderscore2(str2) { if (str2.substr(0, 1) === "_") { return str2.slice(1); } return str2; }; var arrayKeyToSortNumber = function arrayKeyToSortNumber2(key2) { if (key2 === "_t") { return -1; } else { if (key2.substr(0, 1) === "_") { return parseInt(key2.slice(1), 10); } else { return parseInt(key2, 10) + 0.1; } } }; var arrayKeyComparer = function arrayKeyComparer2(key1, key2) { return arrayKeyToSortNumber(key1) - arrayKeyToSortNumber(key2); }; var BaseFormatter = function() { function BaseFormatter2() { classCallCheck(this, BaseFormatter2); } createClass(BaseFormatter2, [{ key: "format", value: function format2(delta2, left) { var context = {}; this.prepareContext(context); this.recurse(context, delta2, left); return this.finalize(context); } }, { key: "prepareContext", value: function prepareContext(context) { context.buffer = []; context.out = function() { var _buffer; (_buffer = this.buffer).push.apply(_buffer, arguments); }; } }, { key: "typeFormattterNotFound", value: function typeFormattterNotFound(context, deltaType) { throw new Error("cannot format delta type: " + deltaType); } }, { key: "typeFormattterErrorFormatter", value: function typeFormattterErrorFormatter(context, err) { return err.toString(); } }, { key: "finalize", value: function finalize(_ref) { var buffer = _ref.buffer; if (isArray$3(buffer)) { return buffer.join(""); } } }, { key: "recurse", value: function recurse(context, delta2, left, key2, leftKey, movedFrom, isLast) { var useMoveOriginHere = delta2 && movedFrom; var leftValue = useMoveOriginHere ? movedFrom.value : left; if (typeof delta2 === "undefined" && typeof key2 === "undefined") { return void 0; } var type2 = this.getDeltaType(delta2, movedFrom); var nodeType = type2 === "node" ? delta2._t === "a" ? "array" : "object" : ""; if (typeof key2 !== "undefined") { this.nodeBegin(context, key2, leftKey, type2, nodeType, isLast); } else { this.rootBegin(context, type2, nodeType); } var typeFormattter = void 0; try { typeFormattter = this["format_" + type2] || this.typeFormattterNotFound(context, type2); typeFormattter.call(this, context, delta2, leftValue, key2, leftKey, movedFrom); } catch (err) { this.typeFormattterErrorFormatter(context, err, delta2, leftValue, key2, leftKey, movedFrom); if (typeof console !== "undefined" && console.error) { console.error(err.stack); } } if (typeof key2 !== "undefined") { this.nodeEnd(context, key2, leftKey, type2, nodeType, isLast); } else { this.rootEnd(context, type2, nodeType); } } }, { key: "formatDeltaChildren", value: function formatDeltaChildren(context, delta2, left) { var self2 = this; this.forEachDeltaKey(delta2, left, function(key2, leftKey, movedFrom, isLast) { self2.recurse(context, delta2[key2], left ? left[leftKey] : void 0, key2, leftKey, movedFrom, isLast); }); } }, { key: "forEachDeltaKey", value: function forEachDeltaKey(delta2, left, fn) { var keys2 = getObjectKeys(delta2); var arrayKeys = delta2._t === "a"; var moveDestinations = {}; var name = void 0; if (typeof left !== "undefined") { for (name in left) { if (Object.prototype.hasOwnProperty.call(left, name)) { if (typeof delta2[name] === "undefined" && (!arrayKeys || typeof delta2["_" + name] === "undefined")) { keys2.push(name); } } } } for (name in delta2) { if (Object.prototype.hasOwnProperty.call(delta2, name)) { var value = delta2[name]; if (isArray$3(value) && value[2] === 3) { moveDestinations[value[1].toString()] = { key: name, value: left && left[parseInt(name.substr(1))] }; if (this.includeMoveDestinations !== false) { if (typeof left === "undefined" && typeof delta2[value[1]] === "undefined") { keys2.push(value[1].toString()); } } } } } if (arrayKeys) { keys2.sort(arrayKeyComparer); } else { keys2.sort(); } for (var index2 = 0, length2 = keys2.length; index2 < length2; index2++) { var key2 = keys2[index2]; if (arrayKeys && key2 === "_t") { continue; } var leftKey = arrayKeys ? typeof key2 === "number" ? key2 : parseInt(trimUnderscore(key2), 10) : key2; var isLast = index2 === length2 - 1; fn(key2, leftKey, moveDestinations[leftKey], isLast); } } }, { key: "getDeltaType", value: function getDeltaType(delta2, movedFrom) { if (typeof delta2 === "undefined") { if (typeof movedFrom !== "undefined") { return "movedestination"; } return "unchanged"; } if (isArray$3(delta2)) { if (delta2.length === 1) { return "added"; } if (delta2.length === 2) { return "modified"; } if (delta2.length === 3 && delta2[2] === 0) { return "deleted"; } if (delta2.length === 3 && delta2[2] === 2) { return "textdiff"; } if (delta2.length === 3 && delta2[2] === 3) { return "moved"; } } else if ((typeof delta2 === "undefined" ? "undefined" : _typeof(delta2)) === "object") { return "node"; } return "unknown"; } }, { key: "parseTextDiff", value: function parseTextDiff2(value) { var output = []; var lines2 = value.split("\n@@ "); for (var i2 = 0, l2 = lines2.length; i2 < l2; i2++) { var line2 = lines2[i2]; var lineOutput = { pieces: [] }; var location = /^(?:@@ )?[-+]?(\d+),(\d+)/.exec(line2).slice(1); lineOutput.location = { line: location[0], chr: location[1] }; var pieces = line2.split("\n").slice(1); for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) { var piece = pieces[pieceIndex]; if (!piece.length) { continue; } var pieceOutput = { type: "context" }; if (piece.substr(0, 1) === "+") { pieceOutput.type = "added"; } else if (piece.substr(0, 1) === "-") { pieceOutput.type = "deleted"; } pieceOutput.text = piece.slice(1); lineOutput.pieces.push(pieceOutput); } output.push(lineOutput); } return output; } }]); return BaseFormatter2; }(); var base = Object.freeze({ default: BaseFormatter }); var HtmlFormatter = function(_BaseFormatter) { inherits(HtmlFormatter2, _BaseFormatter); function HtmlFormatter2() { classCallCheck(this, HtmlFormatter2); return possibleConstructorReturn(this, (HtmlFormatter2.__proto__ || Object.getPrototypeOf(HtmlFormatter2)).apply(this, arguments)); } createClass(HtmlFormatter2, [{ key: "typeFormattterErrorFormatter", value: function typeFormattterErrorFormatter(context, err) { context.out('<pre class="jsondiffpatch-error">' + err + "</pre>"); } }, { key: "formatValue", value: function formatValue(context, value) { context.out("<pre>" + htmlEscape(JSON.stringify(value, null, 2)) + "</pre>"); } }, { key: "formatTextDiffString", value: function formatTextDiffString(context, value) { var lines2 = this.parseTextDiff(value); context.out('<ul class="jsondiffpatch-textdiff">'); for (var i2 = 0, l2 = lines2.length; i2 < l2; i2++) { var line2 = lines2[i2]; context.out('<li><div class="jsondiffpatch-textdiff-location">' + ('<span class="jsondiffpatch-textdiff-line-number">' + line2.location.line + '</span><span class="jsondiffpatch-textdiff-char">' + line2.location.chr + '</span></div><div class="jsondiffpatch-textdiff-line">')); var pieces = line2.pieces; for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) { var piece = pieces[pieceIndex]; context.out('<span class="jsondiffpatch-textdiff-' + piece.type + '">' + htmlEscape(decodeURI(piece.text)) + "</span>"); } context.out("</div></li>"); } context.out("</ul>"); } }, { key: "rootBegin", value: function rootBegin(context, type2, nodeType) { var nodeClass = "jsondiffpatch-" + type2 + (nodeType ? " jsondiffpatch-child-node-type-" + nodeType : ""); context.out('<div class="jsondiffpatch-delta ' + nodeClass + '">'); } }, { key: "rootEnd", value: function rootEnd(context) { context.out("</div>" + (context.hasArrows ? '<script type="text/javascript">setTimeout(' + (adjustArrows.toString() + ",10);<\/script>") : "")); } }, { key: "nodeBegin", value: function nodeBegin(context, key2, leftKey, type2, nodeType) { var nodeClass = "jsondiffpatch-" + type2 + (nodeType ? " jsondiffpatch-child-node-type-" + nodeType : ""); context.out('<li class="' + nodeClass + '" data-key="' + leftKey + '">' + ('<div class="jsondiffpatch-property-name">' + leftKey + "</div>")); } }, { key: "nodeEnd", value: function nodeEnd(context) { context.out("</li>"); } }, { key: "format_unchanged", value: function format_unchanged(context, delta2, left) { if (typeof left === "undefined") { return; } context.out('<div class="jsondiffpatch-value">'); this.formatValue(context, left); context.out("</div>"); } }, { key: "format_movedestination", value: function format_movedestination(context, delta2, left) { if (typeof left === "undefined") { return; } context.out('<div class="jsondiffpatch-value">'); this.formatValue(context, left); context.out("</div>"); } }, { key: "format_node", value: function format_node(context, delta2, left) { var nodeType = delta2._t === "a" ? "array" : "object"; context.out('<ul class="jsondiffpatch-node jsondiffpatch-node-type-' + nodeType + '">'); this.formatDeltaChildren(context, delta2, left); context.out("</ul>"); } }, { key: "format_added", value: function format_added(context, delta2) { context.out('<div class="jsondiffpatch-value">'); this.formatValue(context, delta2[0]); context.out("</div>"); } }, { key: "format_modified", value: function format_modified(context, delta2) { context.out('<div class="jsondiffpatch-value jsondiffpatch-left-value">'); this.formatValue(context, delta2[0]); context.out('</div><div class="jsondiffpatch-value jsondiffpatch-right-value">'); this.formatValue(context, delta2[1]); context.out("</div>"); } }, { key: "format_deleted", value: function format_deleted(context, delta2) { context.out('<div class="jsondiffpatch-value">'); this.formatValue(context, delta2[0]); context.out("</div>"); } }, { key: "format_moved", value: function format_moved(context, delta2) { context.out('<div class="jsondiffpatch-value">'); this.formatValue(context, delta2[0]); context.out('</div><div class="jsondiffpatch-moved-destination">' + delta2[1] + "</div>"); context.out( '<div class="jsondiffpatch-arrow" style="position: relative; left: -34px;">\n <svg width="30" height="60" style="position: absolute; display: none;">\n <defs>\n <marker id="markerArrow" markerWidth="8" markerHeight="8"\n refx="2" refy="4"\n orient="auto" markerUnits="userSpaceOnUse">\n <path d="M1,1 L1,7 L7,4 L1,1" style="fill: #339;" />\n </marker>\n </defs>\n <path d="M30,0 Q-10,25 26,50"\n style="stroke: #88f; stroke-width: 2px; fill: none; stroke-opacity: 0.5; marker-end: url(#markerArrow);"\n ></path>\n </svg>\n </div>' ); context.hasArrows = true; } }, { key: "format_textdiff", value: function format_textdiff(context, delta2) { context.out('<div class="jsondiffpatch-value">'); this.formatTextDiffString(context, delta2[0]); context.out("</div>"); } }]); return HtmlFormatter2; }(BaseFormatter); function htmlEscape(text2) { var html2 = text2; var replacements = [[/&/g, "&"], [/</g, "<"], [/>/g, ">"], [/'/g, "'"], [/"/g, """]]; for (var i2 = 0; i2 < replacements.length; i2++) { html2 = html2.replace(replacements[i2][0], replacements[i2][1]); } return html2; } var adjustArrows = function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg) { var node2 = nodeArg || document; var getElementText = function getElementText2(_ref) { var textContent = _ref.textContent, innerText = _ref.innerText; return textContent || innerText; }; var eachByQuery = function eachByQuery2(el2, query, fn) { var elems = el2.querySelectorAll(query); for (var i2 = 0, l2 = elems.length; i2 < l2; i2++) { fn(elems[i2]); } }; var eachChildren = function eachChildren2(_ref2, fn) { var children = _ref2.children; for (var i2 = 0, l2 = children.length; i2 < l2; i2++) { fn(children[i2], i2); } }; eachByQuery(node2, ".jsondiffpatch-arrow", function(_ref3) { var parentNode2 = _ref3.parentNode, children = _ref3.children, style = _ref3.style; var arrowParent = parentNode2; var svg = children[0]; var path = svg.children[1]; svg.style.display = "none"; var destination = getElementText(arrowParent.querySelector(".jsondiffpatch-moved-destination")); var container = arrowParent.parentNode; var destinationElem = void 0; eachChildren(container, function(child) { if (child.getAttribute("data-key") === destination) { destinationElem = child; } }); if (!destinationElem) { return; } try { var distance = destinationElem.offsetTop - arrowParent.offsetTop; svg.setAttribute("height", Math.abs(distance) + 6); style.top = -8 + (distance > 0 ? 0 : distance) + "px"; var curve = distance > 0 ? "M30,0 Q-10," + Math.round(distance / 2) + " 26," + (distance - 4) : "M30," + -distance + " Q-10," + Math.round(-distance / 2) + " 26,4"; path.setAttribute("d", curve); svg.style.display = ""; } catch (err) { } }); }; var showUnchanged = function showUnchanged2(show, node2, delay) { var el2 = node2 || document.body; var prefix2 = "jsondiffpatch-unchanged-"; var classes = { showing: prefix2 + "showing", hiding: prefix2 + "hiding", visible: prefix2 + "visible", hidden: prefix2 + "hidden" }; var list = el2.classList; if (!list) { return; } if (!delay) { list.remove(classes.showing); list.remove(classes.hiding); list.remove(classes.visible); list.remove(classes.hidden); if (show === false) { list.add(classes.hidden); } return; } if (show === false) { list.remove(classes.showing); list.add(classes.visible); setTimeout(function() { list.add(classes.hiding); }, 10); } else { list.remove(classes.hiding); list.add(classes.showing); list.remove(classes.hidden); } var intervalId = setInterval(function() { adjustArrows(el2); }, 100); setTimeout(function() { list.remove(classes.showing); list.remove(classes.hiding); if (show === false) { list.add(classes.hidden); list.remove(classes.visible); } else { list.add(classes.visible); list.remove(classes.hidden); } setTimeout(function() { list.remove(classes.visible); clearInterval(intervalId); }, delay + 400); }, delay); }; var hideUnchanged = function hideUnchanged2(node2, delay) { return showUnchanged(false, node2, delay); }; var defaultInstance = void 0; function format(delta2, left) { if (!defaultInstance) { defaultInstance = new HtmlFormatter(); } return defaultInstance.format(delta2, left); } var html = Object.freeze({ showUnchanged, hideUnchanged, default: HtmlFormatter, format }); var AnnotatedFormatter = function(_BaseFormatter) { inherits(AnnotatedFormatter2, _BaseFormatter); function AnnotatedFormatter2() { classCallCheck(this, AnnotatedFormatter2); var _this = possibleConstructorReturn(this, (AnnotatedFormatter2.__proto__ || Object.getPrototypeOf(AnnotatedFormatter2)).call(this)); _this.includeMoveDestinations = false; return _this; } createClass(AnnotatedFormatter2, [{ key: "prepareContext", value: function prepareContext(context) { get(AnnotatedFormatter2.prototype.__proto__ || Object.getPrototypeOf(AnnotatedFormatter2.prototype), "prepareContext", this).call(this, context); context.indent = function(levels) { this.indentLevel = (this.indentLevel || 0) + (typeof levels === "undefined" ? 1 : levels); this.indentPad = new Array(this.indentLevel + 1).join(" "); }; context.row = function(json2, htmlNote) { context.out('<tr><td style="white-space: nowrap;"><pre class="jsondiffpatch-annotated-indent" style="display: inline-block">'); context.out(context.indentPad); context.out('</pre><pre style="display: inline-block">'); context.out(json2); context.out('</pre></td><td class="jsondiffpatch-delta-note"><div>'); context.out(htmlNote); context.out("</div></td></tr>"); }; } }, { key: "typeFormattterErrorFormatter", value: function typeFormattterErrorFormatter(context, err) { context.row("", '<pre class="jsondiffpatch-error">' + err + "</pre>"); } }, { key: "formatTextDiffString", value: function formatTextDiffString(context, value) { var lines2 = this.parseTextDiff(value); context.out('<ul class="jsondiffpatch-textdiff">'); for (var i2 = 0, l2 = lines2.length; i2 < l2; i2++) { var line2 = lines2[i2]; context.out('<li><div class="jsondiffpatch-textdiff-location">' + ('<span class="jsondiffpatch-textdiff-line-number">' + line2.location.line + '</span><span class="jsondiffpatch-textdiff-char">' + line2.location.chr + '</span></div><div class="jsondiffpatch-textdiff-line">')); var pieces = line2.pieces; for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) { var piece = pieces[pieceIndex]; context.out('<span class="jsondiffpatch-textdiff-' + piece.type + '">' + piece.text + "</span>"); } context.out("</div></li>"); } context.out("</ul>"); } }, { key: "rootBegin", value: function rootBegin(context, type2, nodeType) { context.out('<table class="jsondiffpatch-annotated-delta">'); if (type2 === "node") { context.row("{"); context.indent(); } if (nodeType === "array") { context.row('"_t": "a",', "Array delta (member names indicate array indices)"); } } }, { key: "rootEnd", value: function rootEnd(context, type2) { if (type2 === "node") { context.indent(-1); context.row("}"); } context.out("</table>"); } }, { key: "nodeBegin", value: function nodeBegin(context, key2, leftKey, type2, nodeType) { context.row(""" + key2 + "": {"); if (type2 === "node") { context.indent(); } if (nodeType === "array") { context.row('"_t": "a",', "Array delta (member names indicate array indices)"); } } }, { key: "nodeEnd", value: function nodeEnd(context, key2, leftKey, type2, nodeType, isLast) { if (type2 === "node") { context.indent(-1); } context.row("}" + (isLast ? "" : ",")); } }, { key: "format_unchanged", value: function format_unchanged() { } }, { key: "format_movedestination", value: function format_movedestination() { } }, { key: "format_node", value: function format_node(context, delta2, left) { this.formatDeltaChildren(context, delta2, left); } }]); return AnnotatedFormatter2; }(BaseFormatter); var wrapPropertyName = function wrapPropertyName2(name) { return '<pre style="display:inline-block">"' + name + ""</pre>"; }; var deltaAnnotations = { added: function added(delta2, left, key2, leftKey) { var formatLegend = " <pre>([newValue])</pre>"; if (typeof leftKey === "undefined") { return "new value" + formatLegend; } if (typeof leftKey === "number") { return "insert at index " + leftKey + formatLegend; } return "add property " + wrapPropertyName(leftKey) + formatLegend; }, modified: function modified(delta2, left, key2, leftKey) { var formatLegend = " <pre>([previousValue, newValue])</pre>"; if (typeof leftKey === "undefined") { return "modify value" + formatLegend; } if (typeof leftKey === "number") { return "modify at index " + leftKey + formatLegend; } return "modify property " + wrapPropertyName(leftKey) + formatLegend; }, deleted: function deleted(delta2, left, key2, leftKey) { var formatLegend = " <pre>([previousValue, 0, 0])</pre>"; if (typeof leftKey === "undefined") { return "delete value" + formatLegend; } if (typeof leftKey === "number") { return "remove index " + leftKey + formatLegend; } return "delete property " + wrapPropertyName(leftKey) + formatLegend; }, moved: function moved(delta2, left, key2, leftKey) { return 'move from <span title="(position to remove at original state)">' + ("index " + leftKey + '</span> to <span title="(position to insert at final') + (' state)">index ' + delta2[1] + "</span>"); }, textdiff: function textdiff(delta2, left, key2, leftKey) { var location = typeof leftKey === "undefined" ? "" : typeof leftKey === "number" ? " at index " + leftKey : " at property " + wrapPropertyName(leftKey); return "text diff" + location + ', format is <a href="https://code.google.com/p/google-diff-match-patch/wiki/Unidiff">a variation of Unidiff</a>'; } }; var formatAnyChange = function formatAnyChange2(context, delta2) { var deltaType = this.getDeltaType(delta2); var annotator = deltaAnnotations[deltaType]; var htmlNote = annotator && annotator.apply(annotator, Array.prototype.slice.call(arguments, 1)); var json2 = JSON.stringify(delta2, null, 2); if (deltaType === "textdiff") { json2 = json2.split("\\n").join('\\n"+\n "'); } context.indent(); context.row(json2, htmlNote); context.indent(-1); }; AnnotatedFormatter.prototype.format_added = formatAnyChange; AnnotatedFormatter.prototype.format_modified = formatAnyChange; AnnotatedFormatter.prototype.format_deleted = formatAnyChange; AnnotatedFormatter.prototype.format_moved = formatAnyChange; AnnotatedFormatter.prototype.format_textdiff = formatAnyChange; var defaultInstance$1 = void 0; function format$1(delta2, left) { if (!defaultInstance$1) { defaultInstance$1 = new AnnotatedFormatter(); } return defaultInstance$1.format(delta2, left); } var annotated = Object.freeze({ default: AnnotatedFormatter, format: format$1 }); var OPERATIONS = { add: "add", remove: "remove", replace: "replace", move: "move" }; var JSONFormatter = function(_BaseFormatter) { inherits(JSONFormatter2, _BaseFormatter); function JSONFormatter2() { classCallCheck(this, JSONFormatter2); var _this = possibleConstructorReturn(this, (JSONFormatter2.__proto__ || Object.getPrototypeOf(JSONFormatter2)).call(this)); _this.includeMoveDestinations = true; return _this; } createClass(JSONFormatter2, [{ key: "prepareContext", value: function prepareContext(context) { get(JSONFormatter2.prototype.__proto__ || Object.getPrototypeOf(JSONFormatter2.prototype), "prepareContext", this).call(this, context); context.result = []; context.path = []; context.pushCurrentOp = function(obj) { var op = obj.op, value = obj.value; var val = { op, path: this.currentPath() }; if (typeof value !== "undefined") { val.value = value; } this.result.push(val); }; context.pushMoveOp = function(to) { var from2 = this.currentPath(); this.result.push({ op: OPERATIONS.move, from: from2, path: this.toPath(to) }); }; context.currentPath = function() { return "/" + this.path.join("/"); }; context.toPath = function(toPath) { var to = this.path.slice(); to[to.length - 1] = toPath; return "/" + to.join("/"); }; } }, { key: "typeFormattterErrorFormatter", value: function typeFormattterErrorFormatter(context, err) { context.out("[ERROR] " + err); } }, { key: "rootBegin", value: function rootBegin() { } }, { key: "rootEnd", value: function rootEnd() { } }, { key: "nodeBegin", value: function nodeBegin(_ref, key2, leftKey) { var path = _ref.path; path.push(leftKey); } }, { key: "nodeEnd", value: function nodeEnd(_ref2) { var path = _ref2.path; path.pop(); } }, { key: "format_unchanged", value: function format_unchanged() { } }, { key: "format_movedestination", value: function format_movedestination() { } }, { key: "format_node", value: function format_node(context, delta2, left) { this.formatDeltaChildren(context, delta2, left); } }, { key: "format_added", value: function format_added(context, delta2) { context.pushCurrentOp({ op: OPERATIONS.add, value: delta2[0] }); } }, { key: "format_modified", value: function format_modified(context, delta2) { context.pushCurrentOp({ op: OPERATIONS.replace, value: delta2[1] }); } }, { key: "format_deleted", value: function format_deleted(context) { context.pushCurrentOp({ op: OPERATIONS.remove }); } }, { key: "format_moved", value: function format_moved(context, delta2) { var to = delta2[1]; context.pushMoveOp(to); } }, { key: "format_textdiff", value: function format_textdiff() { throw new Error("Not implemented"); } }, { key: "format", value: function format2(delta2, left) { var context = {}; this.prepareContext(context); this.recurse(context, delta2, left); return context.result; } }]); return JSONFormatter2; }(BaseFormatter); var last = function last2(arr) { return arr[arr.length - 1]; }; var sortBy = function sortBy2(arr, pred) { arr.sort(pred); return arr; }; var compareByIndexDesc = function compareByIndexDesc2(indexA, indexB) { var lastA = parseInt(indexA, 10); var lastB = parseInt(indexB, 10); if (!(isNaN(lastA) || isNaN(lastB))) { return lastB - lastA; } else { return 0; } }; var opsByDescendingOrder = function opsByDescendingOrder2(removeOps) { return sortBy(removeOps, function(a2, b2) { var splitA = a2.path.split("/"); var splitB = b2.path.split("/"); if (splitA.length !== splitB.length) { return splitA.length - splitB.length; } else { return compareByIndexDesc(last(splitA), last(splitB)); } }); }; var partitionOps = function partitionOps2(arr, fns) { var initArr = Array(fns.length + 1).fill().map(function() { return []; }); return arr.map(function(item) { var position2 = fns.map(function(fn) { return fn(item); }).indexOf(true); if (position2 < 0) { position2 = fns.length; } return { item, position: position2 }; }).reduce(function(acc, item) { acc[item.position].push(item.item); return acc; }, initArr); }; var isMoveOp = function isMoveOp2(_ref3) { var op = _ref3.op; return op === "move"; }; var isRemoveOp = function isRemoveOp2(_ref4) { var op = _ref4.op; return op === "remove"; }; var reorderOps = function reorderOps2(diff2) { var _partitionOps = partitionOps(diff2, [isMoveOp, isRemoveOp]), _partitionOps2 = slicedToArray(_partitionOps, 3), moveOps = _partitionOps2[0], removedOps = _partitionOps2[1], restOps = _partitionOps2[2]; var removeOpsReverse = opsByDescendingOrder(removedOps); return [].concat(toConsumableArray(removeOpsReverse), toConsumableArray(moveOps), toConsumableArray(restOps)); }; var defaultInstance$2 = void 0; var format$2 = function format2(delta2, left) { if (!defaultInstance$2) { defaultInstance$2 = new JSONFormatter(); } return reorderOps(defaultInstance$2.format(delta2, left)); }; var log = function log2(delta2, left) { console.log(format$2(delta2, left)); }; var jsonpatch = Object.freeze({ default: JSONFormatter, partitionOps, format: format$2, log }); function chalkColor(name) { return chalk && chalk[name] || function() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return args; }; } var colors = { added: chalkColor("green"), deleted: chalkColor("red"), movedestination: chalkColor("gray"), moved: chalkColor("yellow"), unchanged: chalkColor("gray"), error: chalkColor("white.bgRed"), textDiffLine: chalkColor("gray") }; var ConsoleFormatter = function(_BaseFormatter) { inherits(ConsoleFormatter2, _BaseFormatter); function ConsoleFormatter2() { classCallCheck(this, ConsoleFormatter2); var _this = possibleConstructorReturn(this, (ConsoleFormatter2.__proto__ || Object.getPrototypeOf(ConsoleFormatter2)).call(this)); _this.includeMoveDestinations = false; return _this; } createClass(ConsoleFormatter2, [{ key: "prepareContext", value: function prepareContext(context) { get(ConsoleFormatter2.prototype.__proto__ || Object.getPrototypeOf(ConsoleFormatter2.prototype), "prepareContext", this).call(this, context); context.indent = function(levels) { this.indentLevel = (this.indentLevel || 0) + (typeof levels === "undefined" ? 1 : levels); this.indentPad = new Array(this.indentLevel + 1).join(" "); this.outLine(); }; context.outLine = function() { this.buffer.push("\n" + (this.indentPad || "")); }; context.out = function() { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } for (var i2 = 0, l2 = args.length; i2 < l2; i2++) { var lines2 = args[i2].split("\n"); var text2 = lines2.join("\n" + (this.indentPad || "")); if (this.color && this.color[0]) { text2 = this.color[0](text2); } this.buffer.push(text2); } }; context.pushColor = function(color) { this.color = this.color || []; this.color.unshift(color); }; context.popColor = function() { this.color = this.color || []; this.color.shift(); }; } }, { key: "typeFormattterErrorFormatter", value: function typeFormattterErrorFormatter(context, err) { context.pushColor(colors.error); context.out("[ERROR]" + err); context.popColor(); } }, { key: "formatValue", value: function formatValue(context, value) { context.out(JSON.stringify(value, null, 2)); } }, { key: "formatTextDiffString", value: function formatTextDiffString(context, value) { var lines2 = this.parseTextDiff(value); context.indent(); for (var i2 = 0, l2 = lines2.length; i2 < l2; i2++) { var line2 = lines2[i2]; context.pushColor(colors.textDiffLine); context.out(line2.location.line + "," + line2.location.chr + " "); context.popColor(); var pieces = line2.pieces; for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) { var piece = pieces[pieceIndex]; context.pushColor(colors[piece.type]); context.out(piece.text); context.popColor(); } if (i2 < l2 - 1) { context.outLine(); } } context.indent(-1); } }, { key: "rootBegin", value: function rootBegin(context, type2, nodeType) { context.pushColor(colors[type2]); if (type2 === "node") { context.out(nodeType === "array" ? "[" : "{"); context.indent(); } } }, { key: "rootEnd", value: function rootEnd(context, type2, nodeType) { if (type2 === "node") { context.indent(-1); context.out(nodeType === "array" ? "]" : "}"); } context.popColor(); } }, { key: "nodeBegin", value: function nodeBegin(context, key2, leftKey, type2, nodeType) { context.pushColor(colors[type2]); context.out(leftKey + ": "); if (type2 === "node") { context.out(nodeType === "array" ? "[" : "{"); context.indent(); } } }, { key: "nodeEnd", value: function nodeEnd(context, key2, leftKey, type2, nodeType, isLast) { if (type2 === "node") { context.indent(-1); context.out(nodeType === "array" ? "]" : "}" + (isLast ? "" : ",")); } if (!isLast) { context.outLine(); } context.popColor(); } }, { key: "format_unchanged", value: function format_unchanged(context, delta2, left) { if (typeof left === "undefined") { return; } this.formatValue(context, left); } }, { key: "format_movedestination", value: function format_movedestination(context, delta2, left) { if (typeof left === "undefined") { return; } this.formatValue(context, left); } }, { key: "format_node", value: function format_node(context, delta2, left) { this.formatDeltaChildren(context, delta2, left); } }, { key: "format_added", value: function format_added(context, delta2) { this.formatValue(context, delta2[0]); } }, { key: "format_modified", value: function format_modified(context, delta2) { context.pushColor(colors.deleted); this.formatValue(context, delta2[0]); context.popColor(); context.out(" => "); context.pushColor(colors.added); this.formatValue(context, delta2[1]); context.popColor(); } }, { key: "format_deleted", value: function format_deleted(context, delta2) { this.formatValue(context, delta2[0]); } }, { key: "format_moved", value: function format_moved(context, delta2) { context.out("==> " + delta2[1]); } }, { key: "format_textdiff", value: function format_textdiff(context, delta2) { this.formatTextDiffString(context, delta2[0]); } }]); return ConsoleFormatter2; }(BaseFormatter); var defaultInstance$3 = void 0; var format$3 = function format2(delta2, left) { if (!defaultInstance$3) { defaultInstance$3 = new ConsoleFormatter(); } return defaultInstance$3.format(delta2, left); }; function log$1(delta2, left) { console.log(format$3(delta2, left)); } var console$1 = Object.freeze({ default: ConsoleFormatter, format: format$3, log: log$1 }); Object.freeze({ base, html, annotated, jsonpatch, console: console$1 }); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key2, arg) { try { var info = gen[key2](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function() { var self2 = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self2, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(void 0); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target2, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor2 = props[i2]; descriptor2.enumerable = descriptor2.enumerable || false; descriptor2.configurable = true; if ("value" in descriptor2) descriptor2.writable = true; Object.defineProperty(target2, descriptor2.key, descriptor2); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var JsonDiffMain = /* @__PURE__ */ function() { function JsonDiffMain2() { _classCallCheck(this, JsonDiffMain2); _defineProperty(this, "diffPatcher", new DiffPatcher({ arrays: { detectMove: false }, textDiff: { minLength: 1 } })); _defineProperty(this, "scheduler", new IdleScheduler()); } _createClass(JsonDiffMain2, [{ key: "diff", value: function() { var _diff = _asyncToGenerator(/* @__PURE__ */ regenerator.mark(function _callee(input) { return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.scheduler.request(); case 2: return _context.abrupt("return", { id: input.id, delta: this.diffPatcher.diff(input.a, input.b) }); case 3: case "end": return _context.stop(); } } }, _callee, this); })); function diff2(_x) { return _diff.apply(this, arguments); } return diff2; }() }]); return JsonDiffMain2; }(); const jsonDiffMain = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, JsonDiffMain }, Symbol.toStringTag, { value: "Module" })); return index; }); //# sourceMappingURL=panmirror.js.map