@m2c2kit/build-helpers 0.3.30 → 0.3.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +275 -1448
  2. package/package.json +7 -7
package/dist/index.js CHANGED
@@ -19,20 +19,6 @@ import { fileURLToPath as fileURLToPath$1 } from 'node:url';
19
19
  import 'node:stream';
20
20
  import child_process$2 from 'child_process';
21
21
 
22
- // Generated using scripts/write-decode-map.ts
23
- const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(
24
- // prettier-ignore
25
- /* #__PURE__ */ "\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c"
26
- .split("")
27
- .map((c) => c.charCodeAt(0)));
28
-
29
- // Generated using scripts/write-decode-map.ts
30
- const xmlDecodeTree = /* #__PURE__ */ new Uint16Array(
31
- // prettier-ignore
32
- /* #__PURE__ */ "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
33
- .split("")
34
- .map((c) => c.charCodeAt(0)));
35
-
36
22
  // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
37
23
  var _a;
38
24
  const decodeMap = new Map([
@@ -71,7 +57,7 @@ const decodeMap = new Map([
71
57
  */
72
58
  const fromCodePoint =
73
59
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
74
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
60
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
75
61
  let output = "";
76
62
  if (codePoint > 65535) {
77
63
  codePoint -= 65536;
@@ -80,7 +66,7 @@ const fromCodePoint =
80
66
  }
81
67
  output += String.fromCharCode(codePoint);
82
68
  return output;
83
- };
69
+ });
84
70
  /**
85
71
  * Replace the given code point with a replacement character if it is a
86
72
  * surrogate or is outside the valid range. Otherwise return the code
@@ -95,6 +81,58 @@ function replaceCodePoint(codePoint) {
95
81
  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
96
82
  }
97
83
 
84
+ /*
85
+ * Shared base64 decode helper for generated decode data.
86
+ * Assumes global atob is available.
87
+ */
88
+ function decodeBase64(input) {
89
+ const binary =
90
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
91
+ typeof atob === "function"
92
+ ? // Browser (and Node >=16)
93
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
94
+ atob(input)
95
+ : // Older Node versions (<16)
96
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
97
+ typeof Buffer.from === "function"
98
+ ? // eslint-disable-next-line n/no-unsupported-features/node-builtins
99
+ Buffer.from(input, "base64").toString("binary")
100
+ : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
101
+ new Buffer(input, "base64").toString("binary");
102
+ const evenLength = binary.length & -2; // Round down to even length
103
+ const out = new Uint16Array(evenLength / 2);
104
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
105
+ const lo = binary.charCodeAt(index);
106
+ const hi = binary.charCodeAt(index + 1);
107
+ out[outIndex++] = lo | (hi << 8);
108
+ }
109
+ return out;
110
+ }
111
+
112
+ // Generated using scripts/write-decode-map.ts
113
+ const htmlDecodeTree = /* #__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
114
+
115
+ // Generated using scripts/write-decode-map.ts
116
+ const xmlDecodeTree = /* #__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
117
+
118
+ /**
119
+ * Bit flags & masks for the binary trie encoding used for entity decoding.
120
+ *
121
+ * Bit layout (16 bits total):
122
+ * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)
123
+ * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').
124
+ * If valueLength==0: compact run flag.
125
+ * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)
126
+ * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char
127
+ */
128
+ var BinTrieFlags;
129
+ (function (BinTrieFlags) {
130
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
131
+ BinTrieFlags[BinTrieFlags["FLAG13"] = 8192] = "FLAG13";
132
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
133
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
134
+ })(BinTrieFlags || (BinTrieFlags = {}));
135
+
98
136
  var CharCodes$1;
99
137
  (function (CharCodes) {
100
138
  CharCodes[CharCodes["NUM"] = 35] = "NUM";
@@ -112,12 +150,6 @@ var CharCodes$1;
112
150
  })(CharCodes$1 || (CharCodes$1 = {}));
113
151
  /** Bit that needs to be set to convert an upper case ASCII character to lower case */
114
152
  const TO_LOWER_BIT = 32;
115
- var BinTrieFlags;
116
- (function (BinTrieFlags) {
117
- BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
118
- BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
119
- BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
120
- })(BinTrieFlags || (BinTrieFlags = {}));
121
153
  function isNumber$1(code) {
122
154
  return code >= CharCodes$1.ZERO && code <= CharCodes$1.NINE;
123
155
  }
@@ -162,6 +194,7 @@ var DecodingMode;
162
194
  class EntityDecoder {
163
195
  constructor(
164
196
  /** The tree used to decode entities. */
197
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive
165
198
  decodeTree,
166
199
  /**
167
200
  * The function that is called when a codepoint is decoded.
@@ -195,6 +228,8 @@ class EntityDecoder {
195
228
  this.excess = 1;
196
229
  /** The mode in which the decoder is operating. */
197
230
  this.decodeMode = DecodingMode.Strict;
231
+ /** The number of characters that have been consumed in the current run. */
232
+ this.runConsumed = 0;
198
233
  }
199
234
  /** Resets the instance to make it reusable. */
200
235
  startEntity(decodeMode) {
@@ -204,6 +239,7 @@ class EntityDecoder {
204
239
  this.treeIndex = 0;
205
240
  this.excess = 1;
206
241
  this.consumed = 1;
242
+ this.runConsumed = 0;
207
243
  }
208
244
  /**
209
245
  * Write an entity to the decoder. This can be called multiple times with partial entities.
@@ -262,15 +298,6 @@ class EntityDecoder {
262
298
  this.state = EntityDecoderState.NumericDecimal;
263
299
  return this.stateNumericDecimal(input, offset);
264
300
  }
265
- addToNumericResult(input, start, end, base) {
266
- if (start !== end) {
267
- const digitCount = end - start;
268
- this.result =
269
- this.result * Math.pow(base, digitCount) +
270
- Number.parseInt(input.substr(start, digitCount), base);
271
- this.consumed += digitCount;
272
- }
273
- }
274
301
  /**
275
302
  * Parses a hexadecimal numeric entity.
276
303
  *
@@ -281,19 +308,22 @@ class EntityDecoder {
281
308
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
282
309
  */
283
310
  stateNumericHex(input, offset) {
284
- const startIndex = offset;
285
311
  while (offset < input.length) {
286
312
  const char = input.charCodeAt(offset);
287
313
  if (isNumber$1(char) || isHexadecimalCharacter(char)) {
288
- offset += 1;
314
+ // Convert hex digit to value (0-15); 'a'/'A' -> 10.
315
+ const digit = char <= CharCodes$1.NINE
316
+ ? char - CharCodes$1.ZERO
317
+ : (char | TO_LOWER_BIT) - CharCodes$1.LOWER_A + 10;
318
+ this.result = this.result * 16 + digit;
319
+ this.consumed++;
320
+ offset++;
289
321
  }
290
322
  else {
291
- this.addToNumericResult(input, startIndex, offset, 16);
292
323
  return this.emitNumericEntity(char, 3);
293
324
  }
294
325
  }
295
- this.addToNumericResult(input, startIndex, offset, 16);
296
- return -1;
326
+ return -1; // Incomplete entity
297
327
  }
298
328
  /**
299
329
  * Parses a decimal numeric entity.
@@ -305,19 +335,18 @@ class EntityDecoder {
305
335
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
306
336
  */
307
337
  stateNumericDecimal(input, offset) {
308
- const startIndex = offset;
309
338
  while (offset < input.length) {
310
339
  const char = input.charCodeAt(offset);
311
340
  if (isNumber$1(char)) {
312
- offset += 1;
341
+ this.result = this.result * 10 + (char - CharCodes$1.ZERO);
342
+ this.consumed++;
343
+ offset++;
313
344
  }
314
345
  else {
315
- this.addToNumericResult(input, startIndex, offset, 10);
316
346
  return this.emitNumericEntity(char, 2);
317
347
  }
318
348
  }
319
- this.addToNumericResult(input, startIndex, offset, 10);
320
- return -1;
349
+ return -1; // Incomplete entity
321
350
  }
322
351
  /**
323
352
  * Validate and emit a numeric entity.
@@ -367,10 +396,64 @@ class EntityDecoder {
367
396
  stateNamedEntity(input, offset) {
368
397
  const { decodeTree } = this;
369
398
  let current = decodeTree[this.treeIndex];
370
- // The mask is the number of bytes of the value, including the current byte.
399
+ // The length is the number of bytes of the value, including the current byte.
371
400
  let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
372
- for (; offset < input.length; offset++, this.excess++) {
401
+ while (offset < input.length) {
402
+ // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.
403
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
404
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */
405
+ // If we are starting a run, check the first char.
406
+ if (this.runConsumed === 0) {
407
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
408
+ if (input.charCodeAt(offset) !== firstChar) {
409
+ return this.result === 0
410
+ ? 0
411
+ : this.emitNotTerminatedNamedEntity();
412
+ }
413
+ offset++;
414
+ this.excess++;
415
+ this.runConsumed++;
416
+ }
417
+ // Check remaining characters in the run.
418
+ while (this.runConsumed < runLength) {
419
+ if (offset >= input.length) {
420
+ return -1;
421
+ }
422
+ const charIndexInPacked = this.runConsumed - 1;
423
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
424
+ const expectedChar = charIndexInPacked % 2 === 0
425
+ ? packedWord & 0xff
426
+ : (packedWord >> 8) & 0xff;
427
+ if (input.charCodeAt(offset) !== expectedChar) {
428
+ this.runConsumed = 0;
429
+ return this.result === 0
430
+ ? 0
431
+ : this.emitNotTerminatedNamedEntity();
432
+ }
433
+ offset++;
434
+ this.excess++;
435
+ this.runConsumed++;
436
+ }
437
+ this.runConsumed = 0;
438
+ this.treeIndex += 1 + (runLength >> 1);
439
+ current = decodeTree[this.treeIndex];
440
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
441
+ }
442
+ if (offset >= input.length)
443
+ break;
373
444
  const char = input.charCodeAt(offset);
445
+ /*
446
+ * Implicit semicolon handling for nodes that require a semicolon but
447
+ * don't have an explicit ';' branch stored in the trie. If we have
448
+ * a value on the current node, it requires a semicolon, and the
449
+ * current input character is a semicolon, emit the entity using the
450
+ * current node (without descending further).
451
+ */
452
+ if (char === CharCodes$1.SEMI &&
453
+ valueLength !== 0 &&
454
+ (current & BinTrieFlags.FLAG13) !== 0) {
455
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
456
+ }
374
457
  this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
375
458
  if (this.treeIndex < 0) {
376
459
  return this.result === 0 ||
@@ -392,12 +475,16 @@ class EntityDecoder {
392
475
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
393
476
  }
394
477
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
395
- if (this.decodeMode !== DecodingMode.Strict) {
478
+ if (this.decodeMode !== DecodingMode.Strict &&
479
+ (current & BinTrieFlags.FLAG13) === 0) {
396
480
  this.result = this.treeIndex;
397
481
  this.consumed += this.excess;
398
482
  this.excess = 0;
399
483
  }
400
484
  }
485
+ // Increment offset & excess for next iteration
486
+ offset++;
487
+ this.excess++;
401
488
  }
402
489
  return -1;
403
490
  }
@@ -426,7 +513,8 @@ class EntityDecoder {
426
513
  emitNamedEntityData(result, valueLength, consumed) {
427
514
  const { decodeTree } = this;
428
515
  this.emitCodePoint(valueLength === 1
429
- ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
516
+ ? decodeTree[result] &
517
+ ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)
430
518
  : decodeTree[result + 1], consumed);
431
519
  if (valueLength === 3) {
432
520
  // For multi-byte values, we need to emit the second byte.
@@ -494,21 +582,27 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
494
582
  ? -1
495
583
  : decodeTree[nodeIndex + value] - 1;
496
584
  }
497
- // Case 3: Multiple branches encoded in dictionary
498
- // Binary search for the character.
499
- let lo = nodeIndex;
500
- let hi = lo + branchCount - 1;
585
+ // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)
586
+ const packedKeySlots = (branchCount + 1) >> 1;
587
+ /*
588
+ * Treat packed keys as a virtual sorted array of length `branchCount`.
589
+ * Key(i) = low byte for even i, high byte for odd i in slot i>>1.
590
+ */
591
+ let lo = 0;
592
+ let hi = branchCount - 1;
501
593
  while (lo <= hi) {
502
594
  const mid = (lo + hi) >>> 1;
503
- const midValue = decodeTree[mid];
504
- if (midValue < char) {
595
+ const slot = mid >> 1;
596
+ const packed = decodeTree[nodeIndex + slot];
597
+ const midKey = (packed >> ((mid & 1) * 8)) & 0xff;
598
+ if (midKey < char) {
505
599
  lo = mid + 1;
506
600
  }
507
- else if (midValue > char) {
601
+ else if (midKey > char) {
508
602
  hi = mid - 1;
509
603
  }
510
604
  else {
511
- return decodeTree[mid + branchCount];
605
+ return decodeTree[nodeIndex + packedKeySlots + mid];
512
606
  }
513
607
  }
514
608
  return -1;
@@ -1090,15 +1184,22 @@ class Tokenizer {
1090
1184
  : DecodingMode.Attribute);
1091
1185
  }
1092
1186
  stateInEntity() {
1093
- const length = this.entityDecoder.write(this.buffer, this.index - this.offset);
1187
+ const indexInBuffer = this.index - this.offset;
1188
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
1094
1189
  // If `length` is positive, we are done with the entity.
1095
1190
  if (length >= 0) {
1096
1191
  this.state = this.baseState;
1097
1192
  if (length === 0) {
1098
- this.index = this.entityStart;
1193
+ this.index -= 1;
1099
1194
  }
1100
1195
  }
1101
1196
  else {
1197
+ if (indexInBuffer < this.buffer.length &&
1198
+ this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp) {
1199
+ this.state = this.baseState;
1200
+ this.index -= 1;
1201
+ return;
1202
+ }
1102
1203
  // Mark buffer as consumed.
1103
1204
  this.index = this.offset + this.buffer.length - 1;
1104
1205
  }
@@ -5673,7 +5774,7 @@ function encode(decoded) {
5673
5774
  return writer.flush();
5674
5775
  }
5675
5776
 
5676
- let BitSet$1 = class BitSet {
5777
+ class BitSet {
5677
5778
  constructor(arg) {
5678
5779
  this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
5679
5780
  }
@@ -5685,9 +5786,9 @@ let BitSet$1 = class BitSet {
5685
5786
  has(n) {
5686
5787
  return !!(this.bits[n >> 5] & (1 << (n & 31)));
5687
5788
  }
5688
- };
5789
+ }
5689
5790
 
5690
- let Chunk$1 = class Chunk {
5791
+ class Chunk {
5691
5792
  constructor(start, end, content) {
5692
5793
  this.start = start;
5693
5794
  this.end = end;
@@ -5864,9 +5965,9 @@ let Chunk$1 = class Chunk {
5864
5965
  if (this.outro.length) return true;
5865
5966
  }
5866
5967
  }
5867
- };
5968
+ }
5868
5969
 
5869
- function getBtoa$1() {
5970
+ function getBtoa() {
5870
5971
  if (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {
5871
5972
  return (str) => globalThis.btoa(unescape(encodeURIComponent(str)));
5872
5973
  } else if (typeof Buffer === 'function') {
@@ -5878,9 +5979,9 @@ function getBtoa$1() {
5878
5979
  }
5879
5980
  }
5880
5981
 
5881
- const btoa$1 = /*#__PURE__*/ getBtoa$1();
5982
+ const btoa = /*#__PURE__*/ getBtoa();
5882
5983
 
5883
- let SourceMap$1 = class SourceMap {
5984
+ class SourceMap {
5884
5985
  constructor(properties) {
5885
5986
  this.version = 3;
5886
5987
  this.file = properties.file;
@@ -5901,11 +6002,11 @@ let SourceMap$1 = class SourceMap {
5901
6002
  }
5902
6003
 
5903
6004
  toUrl() {
5904
- return 'data:application/json;charset=utf-8;base64,' + btoa$1(this.toString());
6005
+ return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
5905
6006
  }
5906
- };
6007
+ }
5907
6008
 
5908
- function guessIndent$1(code) {
6009
+ function guessIndent(code) {
5909
6010
  const lines = code.split('\n');
5910
6011
 
5911
6012
  const tabbed = lines.filter((line) => /^\t+/.test(line));
@@ -5931,7 +6032,7 @@ function guessIndent$1(code) {
5931
6032
  return new Array(min + 1).join(' ');
5932
6033
  }
5933
6034
 
5934
- function getRelativePath$1(from, to) {
6035
+ function getRelativePath(from, to) {
5935
6036
  const fromParts = from.split(/[/\\]/);
5936
6037
  const toParts = to.split(/[/\\]/);
5937
6038
 
@@ -5950,13 +6051,13 @@ function getRelativePath$1(from, to) {
5950
6051
  return fromParts.concat(toParts).join('/');
5951
6052
  }
5952
6053
 
5953
- const toString$1 = Object.prototype.toString;
6054
+ const toString = Object.prototype.toString;
5954
6055
 
5955
- function isObject$1(thing) {
5956
- return toString$1.call(thing) === '[object Object]';
6056
+ function isObject(thing) {
6057
+ return toString.call(thing) === '[object Object]';
5957
6058
  }
5958
6059
 
5959
- function getLocator$1(source) {
6060
+ function getLocator(source) {
5960
6061
  const originalLines = source.split('\n');
5961
6062
  const lineOffsets = [];
5962
6063
 
@@ -5982,9 +6083,9 @@ function getLocator$1(source) {
5982
6083
  };
5983
6084
  }
5984
6085
 
5985
- const wordRegex$1 = /\w/;
6086
+ const wordRegex = /\w/;
5986
6087
 
5987
- let Mappings$1 = class Mappings {
6088
+ class Mappings {
5988
6089
  constructor(hires) {
5989
6090
  this.hires = hires;
5990
6091
  this.generatedCodeLine = 0;
@@ -6052,7 +6153,7 @@ let Mappings$1 = class Mappings {
6052
6153
 
6053
6154
  if (this.hires === 'boundary') {
6054
6155
  // in hires "boundary", group segments per word boundary than per char
6055
- if (wordRegex$1.test(original[originalCharIndex])) {
6156
+ if (wordRegex.test(original[originalCharIndex])) {
6056
6157
  // for first char in the boundary found, start the boundary by pushing a segment
6057
6158
  if (!charInHiresBoundary) {
6058
6159
  this.rawSegments.push(segment);
@@ -6094,19 +6195,19 @@ let Mappings$1 = class Mappings {
6094
6195
 
6095
6196
  this.generatedCodeColumn += lines[lines.length - 1].length;
6096
6197
  }
6097
- };
6198
+ }
6098
6199
 
6099
- const n$1 = '\n';
6200
+ const n = '\n';
6100
6201
 
6101
- const warned$1 = {
6202
+ const warned = {
6102
6203
  insertLeft: false,
6103
6204
  insertRight: false,
6104
6205
  storeName: false,
6105
6206
  };
6106
6207
 
6107
- let MagicString$1 = class MagicString {
6208
+ class MagicString {
6108
6209
  constructor(string, options = {}) {
6109
- const chunk = new Chunk$1(0, string.length, string);
6210
+ const chunk = new Chunk(0, string.length, string);
6110
6211
 
6111
6212
  Object.defineProperties(this, {
6112
6213
  original: { writable: true, value: string },
@@ -6119,7 +6220,7 @@ let MagicString$1 = class MagicString {
6119
6220
  byEnd: { writable: true, value: {} },
6120
6221
  filename: { writable: true, value: options.filename },
6121
6222
  indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
6122
- sourcemapLocations: { writable: true, value: new BitSet$1() },
6223
+ sourcemapLocations: { writable: true, value: new BitSet() },
6123
6224
  storedNames: { writable: true, value: {} },
6124
6225
  indentStr: { writable: true, value: undefined },
6125
6226
  ignoreList: { writable: true, value: options.ignoreList },
@@ -6204,7 +6305,7 @@ let MagicString$1 = class MagicString {
6204
6305
  cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
6205
6306
  }
6206
6307
 
6207
- cloned.sourcemapLocations = new BitSet$1(this.sourcemapLocations);
6308
+ cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
6208
6309
 
6209
6310
  cloned.intro = this.intro;
6210
6311
  cloned.outro = this.outro;
@@ -6217,9 +6318,9 @@ let MagicString$1 = class MagicString {
6217
6318
 
6218
6319
  const sourceIndex = 0;
6219
6320
  const names = Object.keys(this.storedNames);
6220
- const mappings = new Mappings$1(options.hires);
6321
+ const mappings = new Mappings(options.hires);
6221
6322
 
6222
- const locate = getLocator$1(this.original);
6323
+ const locate = getLocator(this.original);
6223
6324
 
6224
6325
  if (this.intro) {
6225
6326
  mappings.advance(this.intro);
@@ -6251,7 +6352,7 @@ let MagicString$1 = class MagicString {
6251
6352
  return {
6252
6353
  file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
6253
6354
  sources: [
6254
- options.source ? getRelativePath$1(options.file || '', options.source) : options.file || '',
6355
+ options.source ? getRelativePath(options.file || '', options.source) : options.file || '',
6255
6356
  ],
6256
6357
  sourcesContent: options.includeContent ? [this.original] : undefined,
6257
6358
  names,
@@ -6261,12 +6362,12 @@ let MagicString$1 = class MagicString {
6261
6362
  }
6262
6363
 
6263
6364
  generateMap(options) {
6264
- return new SourceMap$1(this.generateDecodedMap(options));
6365
+ return new SourceMap(this.generateDecodedMap(options));
6265
6366
  }
6266
6367
 
6267
6368
  _ensureindentStr() {
6268
6369
  if (this.indentStr === undefined) {
6269
- this.indentStr = guessIndent$1(this.original);
6370
+ this.indentStr = guessIndent(this.original);
6270
6371
  }
6271
6372
  }
6272
6373
 
@@ -6283,7 +6384,7 @@ let MagicString$1 = class MagicString {
6283
6384
  indent(indentStr, options) {
6284
6385
  const pattern = /^[^\r\n]/gm;
6285
6386
 
6286
- if (isObject$1(indentStr)) {
6387
+ if (isObject(indentStr)) {
6287
6388
  options = indentStr;
6288
6389
  indentStr = undefined;
6289
6390
  }
@@ -6375,22 +6476,22 @@ let MagicString$1 = class MagicString {
6375
6476
  }
6376
6477
 
6377
6478
  insertLeft(index, content) {
6378
- if (!warned$1.insertLeft) {
6479
+ if (!warned.insertLeft) {
6379
6480
  console.warn(
6380
6481
  'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',
6381
6482
  );
6382
- warned$1.insertLeft = true;
6483
+ warned.insertLeft = true;
6383
6484
  }
6384
6485
 
6385
6486
  return this.appendLeft(index, content);
6386
6487
  }
6387
6488
 
6388
6489
  insertRight(index, content) {
6389
- if (!warned$1.insertRight) {
6490
+ if (!warned.insertRight) {
6390
6491
  console.warn(
6391
6492
  'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',
6392
6493
  );
6393
- warned$1.insertRight = true;
6494
+ warned.insertRight = true;
6394
6495
  }
6395
6496
 
6396
6497
  return this.prependRight(index, content);
@@ -6463,11 +6564,11 @@ let MagicString$1 = class MagicString {
6463
6564
  this._split(end);
6464
6565
 
6465
6566
  if (options === true) {
6466
- if (!warned$1.storeName) {
6567
+ if (!warned.storeName) {
6467
6568
  console.warn(
6468
6569
  'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',
6469
6570
  );
6470
- warned$1.storeName = true;
6571
+ warned.storeName = true;
6471
6572
  }
6472
6573
 
6473
6574
  options = { storeName: true };
@@ -6500,7 +6601,7 @@ let MagicString$1 = class MagicString {
6500
6601
  first.edit(content, storeName, !overwrite);
6501
6602
  } else {
6502
6603
  // must be inserting at the end
6503
- const newChunk = new Chunk$1(start, end, '').edit(content, storeName);
6604
+ const newChunk = new Chunk(start, end, '').edit(content, storeName);
6504
6605
 
6505
6606
  // TODO last chunk in the array may not be the last chunk, if it's moved...
6506
6607
  last.next = newChunk;
@@ -6619,30 +6720,30 @@ let MagicString$1 = class MagicString {
6619
6720
  }
6620
6721
 
6621
6722
  lastLine() {
6622
- let lineIndex = this.outro.lastIndexOf(n$1);
6723
+ let lineIndex = this.outro.lastIndexOf(n);
6623
6724
  if (lineIndex !== -1) return this.outro.substr(lineIndex + 1);
6624
6725
  let lineStr = this.outro;
6625
6726
  let chunk = this.lastChunk;
6626
6727
  do {
6627
6728
  if (chunk.outro.length > 0) {
6628
- lineIndex = chunk.outro.lastIndexOf(n$1);
6729
+ lineIndex = chunk.outro.lastIndexOf(n);
6629
6730
  if (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;
6630
6731
  lineStr = chunk.outro + lineStr;
6631
6732
  }
6632
6733
 
6633
6734
  if (chunk.content.length > 0) {
6634
- lineIndex = chunk.content.lastIndexOf(n$1);
6735
+ lineIndex = chunk.content.lastIndexOf(n);
6635
6736
  if (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;
6636
6737
  lineStr = chunk.content + lineStr;
6637
6738
  }
6638
6739
 
6639
6740
  if (chunk.intro.length > 0) {
6640
- lineIndex = chunk.intro.lastIndexOf(n$1);
6741
+ lineIndex = chunk.intro.lastIndexOf(n);
6641
6742
  if (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;
6642
6743
  lineStr = chunk.intro + lineStr;
6643
6744
  }
6644
6745
  } while ((chunk = chunk.previous));
6645
- lineIndex = this.intro.lastIndexOf(n$1);
6746
+ lineIndex = this.intro.lastIndexOf(n);
6646
6747
  if (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;
6647
6748
  return this.intro + lineStr;
6648
6749
  }
@@ -6732,7 +6833,7 @@ let MagicString$1 = class MagicString {
6732
6833
  _splitChunk(chunk, index) {
6733
6834
  if (chunk.edited && chunk.content.length) {
6734
6835
  // zero-length edited chunks are a special case (overlapping replacements)
6735
- const loc = getLocator$1(this.original)(index);
6836
+ const loc = getLocator(this.original)(index);
6736
6837
  throw new Error(
6737
6838
  `Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – "${chunk.original}")`,
6738
6839
  );
@@ -6964,7 +7065,7 @@ let MagicString$1 = class MagicString {
6964
7065
 
6965
7066
  return this._replaceRegexp(searchValue, replacement);
6966
7067
  }
6967
- };
7068
+ }
6968
7069
 
6969
7070
  const HASH_CHARACTER_LENGTH = 16;
6970
7071
  function hashM2c2kitAssets(rootDir, cwd = "") {
@@ -6973,7 +7074,7 @@ function hashM2c2kitAssets(rootDir, cwd = "") {
6973
7074
  name: "hash-m2c2kit-assets",
6974
7075
  renderChunk: {
6975
7076
  handler(code) {
6976
- const magicString = new MagicString$1(code);
7077
+ const magicString = new MagicString(code);
6977
7078
  magicString.replace(
6978
7079
  new RegExp("__NO_M2C2KIT_MANIFEST_JSON_URL__", "g"),
6979
7080
  "manifest.json"
@@ -7178,7 +7279,7 @@ function restoreImportMeta(pattern = "import_meta = {};", replacement = "import_
7178
7279
  name: "restore-import-meta",
7179
7280
  renderChunk: {
7180
7281
  handler(code) {
7181
- const magicString = new MagicString$1(code);
7282
+ const magicString = new MagicString(code);
7182
7283
  magicString.replace(new RegExp(pattern, "g"), replacement);
7183
7284
  return {
7184
7285
  code: magicString.toString(),
@@ -7548,7 +7649,7 @@ var http2$1 = ">= 8.8";
7548
7649
  var https$1 = true;
7549
7650
  var inspector$1 = ">= 8";
7550
7651
  var _linklist$1 = "< 8";
7551
- var module$1 = true;
7652
+ var module$2 = true;
7552
7653
  var net$1 = true;
7553
7654
  var os$1 = true;
7554
7655
  var path$2 = true;
@@ -7733,7 +7834,7 @@ var require$$1$1 = {
7733
7834
  ">= 19"
7734
7835
  ],
7735
7836
  _linklist: _linklist$1,
7736
- module: module$1,
7837
+ module: module$2,
7737
7838
  "node:module": [
7738
7839
  ">= 14.18 && < 15",
7739
7840
  ">= 16"
@@ -8412,7 +8513,7 @@ var http2 = ">= 8.8";
8412
8513
  var https = true;
8413
8514
  var inspector = ">= 8";
8414
8515
  var _linklist = "< 8";
8415
- var module = true;
8516
+ var module$1 = true;
8416
8517
  var net = true;
8417
8518
  var os = true;
8418
8519
  var path$1 = true;
@@ -8597,7 +8698,7 @@ var require$$1 = {
8597
8698
  ">= 19"
8598
8699
  ],
8599
8700
  _linklist: _linklist,
8600
- module: module,
8701
+ module: module$1,
8601
8702
  "node:module": [
8602
8703
  ">= 14.18 && < 15",
8603
8704
  ">= 16"
@@ -11598,9 +11699,9 @@ var hasRequiredUtils$4;
11598
11699
  function requireUtils$4 () {
11599
11700
  if (hasRequiredUtils$4) return utils$3;
11600
11701
  hasRequiredUtils$4 = 1;
11601
- (function (exports) {
11702
+ (function (exports$1) {
11602
11703
 
11603
- exports.isInteger = num => {
11704
+ exports$1.isInteger = num => {
11604
11705
  if (typeof num === 'number') {
11605
11706
  return Number.isInteger(num);
11606
11707
  }
@@ -11614,15 +11715,15 @@ function requireUtils$4 () {
11614
11715
  * Find a node of the given type
11615
11716
  */
11616
11717
 
11617
- exports.find = (node, type) => node.nodes.find(node => node.type === type);
11718
+ exports$1.find = (node, type) => node.nodes.find(node => node.type === type);
11618
11719
 
11619
11720
  /**
11620
11721
  * Find a node of the given type
11621
11722
  */
11622
11723
 
11623
- exports.exceedsLimit = (min, max, step = 1, limit) => {
11724
+ exports$1.exceedsLimit = (min, max, step = 1, limit) => {
11624
11725
  if (limit === false) return false;
11625
- if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
11726
+ if (!exports$1.isInteger(min) || !exports$1.isInteger(max)) return false;
11626
11727
  return ((Number(max) - Number(min)) / Number(step)) >= limit;
11627
11728
  };
11628
11729
 
@@ -11630,7 +11731,7 @@ function requireUtils$4 () {
11630
11731
  * Escape the given node with '\\' before node.value
11631
11732
  */
11632
11733
 
11633
- exports.escapeNode = (block, n = 0, type) => {
11734
+ exports$1.escapeNode = (block, n = 0, type) => {
11634
11735
  const node = block.nodes[n];
11635
11736
  if (!node) return;
11636
11737
 
@@ -11646,7 +11747,7 @@ function requireUtils$4 () {
11646
11747
  * Returns true if the given brace node should be enclosed in literal braces
11647
11748
  */
11648
11749
 
11649
- exports.encloseBrace = node => {
11750
+ exports$1.encloseBrace = node => {
11650
11751
  if (node.type !== 'brace') return false;
11651
11752
  if ((node.commas >> 0 + node.ranges >> 0) === 0) {
11652
11753
  node.invalid = true;
@@ -11659,7 +11760,7 @@ function requireUtils$4 () {
11659
11760
  * Returns true if a brace node is invalid.
11660
11761
  */
11661
11762
 
11662
- exports.isInvalidBrace = block => {
11763
+ exports$1.isInvalidBrace = block => {
11663
11764
  if (block.type !== 'brace') return false;
11664
11765
  if (block.invalid === true || block.dollar) return true;
11665
11766
  if ((block.commas >> 0 + block.ranges >> 0) === 0) {
@@ -11677,7 +11778,7 @@ function requireUtils$4 () {
11677
11778
  * Returns true if a node is an open or close node
11678
11779
  */
11679
11780
 
11680
- exports.isOpenOrClose = node => {
11781
+ exports$1.isOpenOrClose = node => {
11681
11782
  if (node.type === 'open' || node.type === 'close') {
11682
11783
  return true;
11683
11784
  }
@@ -11688,7 +11789,7 @@ function requireUtils$4 () {
11688
11789
  * Reduce an array of text nodes.
11689
11790
  */
11690
11791
 
11691
- exports.reduce = nodes => nodes.reduce((acc, node) => {
11792
+ exports$1.reduce = nodes => nodes.reduce((acc, node) => {
11692
11793
  if (node.type === 'text') acc.push(node.value);
11693
11794
  if (node.type === 'range') node.type = 'text';
11694
11795
  return acc;
@@ -11698,7 +11799,7 @@ function requireUtils$4 () {
11698
11799
  * Flatten an array
11699
11800
  */
11700
11801
 
11701
- exports.flatten = (...args) => {
11802
+ exports$1.flatten = (...args) => {
11702
11803
  const result = [];
11703
11804
 
11704
11805
  const flat = arr => {
@@ -13306,7 +13407,7 @@ var hasRequiredUtils$3;
13306
13407
  function requireUtils$3 () {
13307
13408
  if (hasRequiredUtils$3) return utils$2;
13308
13409
  hasRequiredUtils$3 = 1;
13309
- (function (exports) {
13410
+ (function (exports$1) {
13310
13411
 
13311
13412
  const path = path$3;
13312
13413
  const win32 = process.platform === 'win32';
@@ -13317,19 +13418,19 @@ function requireUtils$3 () {
13317
13418
  REGEX_SPECIAL_CHARS_GLOBAL
13318
13419
  } = requireConstants$3();
13319
13420
 
13320
- exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
13321
- exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
13322
- exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
13323
- exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
13324
- exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
13421
+ exports$1.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
13422
+ exports$1.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
13423
+ exports$1.isRegexChar = str => str.length === 1 && exports$1.hasRegexChars(str);
13424
+ exports$1.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
13425
+ exports$1.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
13325
13426
 
13326
- exports.removeBackslashes = str => {
13427
+ exports$1.removeBackslashes = str => {
13327
13428
  return str.replace(REGEX_REMOVE_BACKSLASH, match => {
13328
13429
  return match === '\\' ? '' : match;
13329
13430
  });
13330
13431
  };
13331
13432
 
13332
- exports.supportsLookbehinds = () => {
13433
+ exports$1.supportsLookbehinds = () => {
13333
13434
  const segs = process.version.slice(1).split('.').map(Number);
13334
13435
  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
13335
13436
  return true;
@@ -13337,21 +13438,21 @@ function requireUtils$3 () {
13337
13438
  return false;
13338
13439
  };
13339
13440
 
13340
- exports.isWindows = options => {
13441
+ exports$1.isWindows = options => {
13341
13442
  if (options && typeof options.windows === 'boolean') {
13342
13443
  return options.windows;
13343
13444
  }
13344
13445
  return win32 === true || path.sep === '\\';
13345
13446
  };
13346
13447
 
13347
- exports.escapeLast = (input, char, lastIdx) => {
13448
+ exports$1.escapeLast = (input, char, lastIdx) => {
13348
13449
  const idx = input.lastIndexOf(char, lastIdx);
13349
13450
  if (idx === -1) return input;
13350
- if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
13451
+ if (input[idx - 1] === '\\') return exports$1.escapeLast(input, char, idx - 1);
13351
13452
  return `${input.slice(0, idx)}\\${input.slice(idx)}`;
13352
13453
  };
13353
13454
 
13354
- exports.removePrefix = (input, state = {}) => {
13455
+ exports$1.removePrefix = (input, state = {}) => {
13355
13456
  let output = input;
13356
13457
  if (output.startsWith('./')) {
13357
13458
  output = output.slice(2);
@@ -13360,7 +13461,7 @@ function requireUtils$3 () {
13360
13461
  return output;
13361
13462
  };
13362
13463
 
13363
- exports.wrapOutput = (input, state = {}, options = {}) => {
13464
+ exports$1.wrapOutput = (input, state = {}, options = {}) => {
13364
13465
  const prepend = options.contains ? '' : '^';
13365
13466
  const append = options.contains ? '' : '$';
13366
13467
 
@@ -16217,11 +16318,11 @@ var hasRequiredFs$2;
16217
16318
  function requireFs$2 () {
16218
16319
  if (hasRequiredFs$2) return fs$2;
16219
16320
  hasRequiredFs$2 = 1;
16220
- (function (exports) {
16221
- Object.defineProperty(exports, "__esModule", { value: true });
16222
- exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
16321
+ (function (exports$1) {
16322
+ Object.defineProperty(exports$1, "__esModule", { value: true });
16323
+ exports$1.createFileSystemAdapter = exports$1.FILE_SYSTEM_ADAPTER = void 0;
16223
16324
  const fs = require$$0;
16224
- exports.FILE_SYSTEM_ADAPTER = {
16325
+ exports$1.FILE_SYSTEM_ADAPTER = {
16225
16326
  lstat: fs.lstat,
16226
16327
  stat: fs.stat,
16227
16328
  lstatSync: fs.lstatSync,
@@ -16229,11 +16330,11 @@ function requireFs$2 () {
16229
16330
  };
16230
16331
  function createFileSystemAdapter(fsMethods) {
16231
16332
  if (fsMethods === undefined) {
16232
- return exports.FILE_SYSTEM_ADAPTER;
16333
+ return exports$1.FILE_SYSTEM_ADAPTER;
16233
16334
  }
16234
- return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
16335
+ return Object.assign(Object.assign({}, exports$1.FILE_SYSTEM_ADAPTER), fsMethods);
16235
16336
  }
16236
- exports.createFileSystemAdapter = createFileSystemAdapter;
16337
+ exports$1.createFileSystemAdapter = createFileSystemAdapter;
16237
16338
  } (fs$2));
16238
16339
  return fs$2;
16239
16340
  }
@@ -16647,11 +16748,11 @@ var hasRequiredFs;
16647
16748
  function requireFs () {
16648
16749
  if (hasRequiredFs) return fs;
16649
16750
  hasRequiredFs = 1;
16650
- (function (exports) {
16651
- Object.defineProperty(exports, "__esModule", { value: true });
16652
- exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
16751
+ (function (exports$1) {
16752
+ Object.defineProperty(exports$1, "__esModule", { value: true });
16753
+ exports$1.createFileSystemAdapter = exports$1.FILE_SYSTEM_ADAPTER = void 0;
16653
16754
  const fs = require$$0;
16654
- exports.FILE_SYSTEM_ADAPTER = {
16755
+ exports$1.FILE_SYSTEM_ADAPTER = {
16655
16756
  lstat: fs.lstat,
16656
16757
  stat: fs.stat,
16657
16758
  lstatSync: fs.lstatSync,
@@ -16661,11 +16762,11 @@ function requireFs () {
16661
16762
  };
16662
16763
  function createFileSystemAdapter(fsMethods) {
16663
16764
  if (fsMethods === undefined) {
16664
- return exports.FILE_SYSTEM_ADAPTER;
16765
+ return exports$1.FILE_SYSTEM_ADAPTER;
16665
16766
  }
16666
- return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
16767
+ return Object.assign(Object.assign({}, exports$1.FILE_SYSTEM_ADAPTER), fsMethods);
16667
16768
  }
16668
- exports.createFileSystemAdapter = createFileSystemAdapter;
16769
+ exports$1.createFileSystemAdapter = createFileSystemAdapter;
16669
16770
  } (fs));
16670
16771
  return fs;
16671
16772
  }
@@ -18169,9 +18270,9 @@ var hasRequiredSettings;
18169
18270
  function requireSettings () {
18170
18271
  if (hasRequiredSettings) return settings;
18171
18272
  hasRequiredSettings = 1;
18172
- (function (exports) {
18173
- Object.defineProperty(exports, "__esModule", { value: true });
18174
- exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
18273
+ (function (exports$1) {
18274
+ Object.defineProperty(exports$1, "__esModule", { value: true });
18275
+ exports$1.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
18175
18276
  const fs = require$$0;
18176
18277
  const os = os$2;
18177
18278
  /**
@@ -18179,7 +18280,7 @@ function requireSettings () {
18179
18280
  * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107
18180
18281
  */
18181
18282
  const CPU_COUNT = Math.max(os.cpus().length, 1);
18182
- exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
18283
+ exports$1.DEFAULT_FILE_SYSTEM_ADAPTER = {
18183
18284
  lstat: fs.lstat,
18184
18285
  lstatSync: fs.lstatSync,
18185
18286
  stat: fs.stat,
@@ -18224,10 +18325,10 @@ function requireSettings () {
18224
18325
  return option === undefined ? value : option;
18225
18326
  }
18226
18327
  _getFileSystemMethods(methods = {}) {
18227
- return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
18328
+ return Object.assign(Object.assign({}, exports$1.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
18228
18329
  }
18229
18330
  }
18230
- exports.default = Settings;
18331
+ exports$1.default = Settings;
18231
18332
  } (settings));
18232
18333
  return settings;
18233
18334
  }
@@ -20094,7 +20195,7 @@ var hasRequiredRe;
20094
20195
  function requireRe () {
20095
20196
  if (hasRequiredRe) return re.exports;
20096
20197
  hasRequiredRe = 1;
20097
- (function (module, exports) {
20198
+ (function (module, exports$1) {
20098
20199
 
20099
20200
  const {
20100
20201
  MAX_SAFE_COMPONENT_LENGTH,
@@ -20102,14 +20203,14 @@ function requireRe () {
20102
20203
  MAX_LENGTH,
20103
20204
  } = requireConstants$1();
20104
20205
  const debug = requireDebug();
20105
- exports = module.exports = {};
20206
+ exports$1 = module.exports = {};
20106
20207
 
20107
20208
  // The actual regexps go on exports.re
20108
- const re = exports.re = [];
20109
- const safeRe = exports.safeRe = [];
20110
- const src = exports.src = [];
20111
- const safeSrc = exports.safeSrc = [];
20112
- const t = exports.t = {};
20209
+ const re = exports$1.re = [];
20210
+ const safeRe = exports$1.safeRe = [];
20211
+ const src = exports$1.src = [];
20212
+ const safeSrc = exports$1.safeSrc = [];
20213
+ const t = exports$1.t = {};
20113
20214
  let R = 0;
20114
20215
 
20115
20216
  const LETTERDASHNUMBER = '[a-zA-Z0-9-]';
@@ -20273,7 +20374,7 @@ function requireRe () {
20273
20374
  createToken('LONETILDE', '(?:~>?)');
20274
20375
 
20275
20376
  createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true);
20276
- exports.tildeTrimReplace = '$1~';
20377
+ exports$1.tildeTrimReplace = '$1~';
20277
20378
 
20278
20379
  createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
20279
20380
  createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
@@ -20283,7 +20384,7 @@ function requireRe () {
20283
20384
  createToken('LONECARET', '(?:\\^)');
20284
20385
 
20285
20386
  createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true);
20286
- exports.caretTrimReplace = '$1^';
20387
+ exports$1.caretTrimReplace = '$1^';
20287
20388
 
20288
20389
  createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
20289
20390
  createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
@@ -20296,7 +20397,7 @@ function requireRe () {
20296
20397
  // it modifies, so that `> 1.2.3` ==> `>1.2.3`
20297
20398
  createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
20298
20399
  }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
20299
- exports.comparatorTrimReplace = '$1$2$3';
20400
+ exports$1.comparatorTrimReplace = '$1$2$3';
20300
20401
 
20301
20402
  // Something like `1.2.3 - 1.2.4`
20302
20403
  // Note that these all use the loose form, because they'll be
@@ -23086,7 +23187,7 @@ function addModuleMetadata() {
23086
23187
  transform: {
23087
23188
  async handler(code) {
23088
23189
  const pkg = JSON.parse(await readFile("./package.json", "utf8"));
23089
- const magicString = new MagicString$1(code);
23190
+ const magicString = new MagicString(code);
23090
23191
  magicString.replace(
23091
23192
  new RegExp(
23092
23193
  "moduleMetadata:\\s*Constants.MODULE_METADATA_PLACEHOLDER",
@@ -23103,1280 +23204,6 @@ function addModuleMetadata() {
23103
23204
  };
23104
23205
  }
23105
23206
 
23106
- class BitSet {
23107
- constructor(arg) {
23108
- this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
23109
- }
23110
-
23111
- add(n) {
23112
- this.bits[n >> 5] |= 1 << (n & 31);
23113
- }
23114
-
23115
- has(n) {
23116
- return !!(this.bits[n >> 5] & (1 << (n & 31)));
23117
- }
23118
- }
23119
-
23120
- class Chunk {
23121
- constructor(start, end, content) {
23122
- this.start = start;
23123
- this.end = end;
23124
- this.original = content;
23125
-
23126
- this.intro = '';
23127
- this.outro = '';
23128
-
23129
- this.content = content;
23130
- this.storeName = false;
23131
- this.edited = false;
23132
-
23133
- {
23134
- this.previous = null;
23135
- this.next = null;
23136
- }
23137
- }
23138
-
23139
- appendLeft(content) {
23140
- this.outro += content;
23141
- }
23142
-
23143
- appendRight(content) {
23144
- this.intro = this.intro + content;
23145
- }
23146
-
23147
- clone() {
23148
- const chunk = new Chunk(this.start, this.end, this.original);
23149
-
23150
- chunk.intro = this.intro;
23151
- chunk.outro = this.outro;
23152
- chunk.content = this.content;
23153
- chunk.storeName = this.storeName;
23154
- chunk.edited = this.edited;
23155
-
23156
- return chunk;
23157
- }
23158
-
23159
- contains(index) {
23160
- return this.start < index && index < this.end;
23161
- }
23162
-
23163
- eachNext(fn) {
23164
- let chunk = this;
23165
- while (chunk) {
23166
- fn(chunk);
23167
- chunk = chunk.next;
23168
- }
23169
- }
23170
-
23171
- eachPrevious(fn) {
23172
- let chunk = this;
23173
- while (chunk) {
23174
- fn(chunk);
23175
- chunk = chunk.previous;
23176
- }
23177
- }
23178
-
23179
- edit(content, storeName, contentOnly) {
23180
- this.content = content;
23181
- if (!contentOnly) {
23182
- this.intro = '';
23183
- this.outro = '';
23184
- }
23185
- this.storeName = storeName;
23186
-
23187
- this.edited = true;
23188
-
23189
- return this;
23190
- }
23191
-
23192
- prependLeft(content) {
23193
- this.outro = content + this.outro;
23194
- }
23195
-
23196
- prependRight(content) {
23197
- this.intro = content + this.intro;
23198
- }
23199
-
23200
- reset() {
23201
- this.intro = '';
23202
- this.outro = '';
23203
- if (this.edited) {
23204
- this.content = this.original;
23205
- this.storeName = false;
23206
- this.edited = false;
23207
- }
23208
- }
23209
-
23210
- split(index) {
23211
- const sliceIndex = index - this.start;
23212
-
23213
- const originalBefore = this.original.slice(0, sliceIndex);
23214
- const originalAfter = this.original.slice(sliceIndex);
23215
-
23216
- this.original = originalBefore;
23217
-
23218
- const newChunk = new Chunk(index, this.end, originalAfter);
23219
- newChunk.outro = this.outro;
23220
- this.outro = '';
23221
-
23222
- this.end = index;
23223
-
23224
- if (this.edited) {
23225
- // after split we should save the edit content record into the correct chunk
23226
- // to make sure sourcemap correct
23227
- // For example:
23228
- // ' test'.trim()
23229
- // split -> ' ' + 'test'
23230
- // ✔️ edit -> '' + 'test'
23231
- // ✖️ edit -> 'test' + ''
23232
- // TODO is this block necessary?...
23233
- newChunk.edit('', false);
23234
- this.content = '';
23235
- } else {
23236
- this.content = originalBefore;
23237
- }
23238
-
23239
- newChunk.next = this.next;
23240
- if (newChunk.next) newChunk.next.previous = newChunk;
23241
- newChunk.previous = this;
23242
- this.next = newChunk;
23243
-
23244
- return newChunk;
23245
- }
23246
-
23247
- toString() {
23248
- return this.intro + this.content + this.outro;
23249
- }
23250
-
23251
- trimEnd(rx) {
23252
- this.outro = this.outro.replace(rx, '');
23253
- if (this.outro.length) return true;
23254
-
23255
- const trimmed = this.content.replace(rx, '');
23256
-
23257
- if (trimmed.length) {
23258
- if (trimmed !== this.content) {
23259
- this.split(this.start + trimmed.length).edit('', undefined, true);
23260
- if (this.edited) {
23261
- // save the change, if it has been edited
23262
- this.edit(trimmed, this.storeName, true);
23263
- }
23264
- }
23265
- return true;
23266
- } else {
23267
- this.edit('', undefined, true);
23268
-
23269
- this.intro = this.intro.replace(rx, '');
23270
- if (this.intro.length) return true;
23271
- }
23272
- }
23273
-
23274
- trimStart(rx) {
23275
- this.intro = this.intro.replace(rx, '');
23276
- if (this.intro.length) return true;
23277
-
23278
- const trimmed = this.content.replace(rx, '');
23279
-
23280
- if (trimmed.length) {
23281
- if (trimmed !== this.content) {
23282
- const newChunk = this.split(this.end - trimmed.length);
23283
- if (this.edited) {
23284
- // save the change, if it has been edited
23285
- newChunk.edit(trimmed, this.storeName, true);
23286
- }
23287
- this.edit('', undefined, true);
23288
- }
23289
- return true;
23290
- } else {
23291
- this.edit('', undefined, true);
23292
-
23293
- this.outro = this.outro.replace(rx, '');
23294
- if (this.outro.length) return true;
23295
- }
23296
- }
23297
- }
23298
-
23299
- function getBtoa() {
23300
- if (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {
23301
- return (str) => globalThis.btoa(unescape(encodeURIComponent(str)));
23302
- } else if (typeof Buffer === 'function') {
23303
- return (str) => Buffer.from(str, 'utf-8').toString('base64');
23304
- } else {
23305
- return () => {
23306
- throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
23307
- };
23308
- }
23309
- }
23310
-
23311
- const btoa = /*#__PURE__*/ getBtoa();
23312
-
23313
- class SourceMap {
23314
- constructor(properties) {
23315
- this.version = 3;
23316
- this.file = properties.file;
23317
- this.sources = properties.sources;
23318
- this.sourcesContent = properties.sourcesContent;
23319
- this.names = properties.names;
23320
- this.mappings = encode(properties.mappings);
23321
- if (typeof properties.x_google_ignoreList !== 'undefined') {
23322
- this.x_google_ignoreList = properties.x_google_ignoreList;
23323
- }
23324
- if (typeof properties.debugId !== 'undefined') {
23325
- this.debugId = properties.debugId;
23326
- }
23327
- }
23328
-
23329
- toString() {
23330
- return JSON.stringify(this);
23331
- }
23332
-
23333
- toUrl() {
23334
- return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
23335
- }
23336
- }
23337
-
23338
- function guessIndent(code) {
23339
- const lines = code.split('\n');
23340
-
23341
- const tabbed = lines.filter((line) => /^\t+/.test(line));
23342
- const spaced = lines.filter((line) => /^ {2,}/.test(line));
23343
-
23344
- if (tabbed.length === 0 && spaced.length === 0) {
23345
- return null;
23346
- }
23347
-
23348
- // More lines tabbed than spaced? Assume tabs, and
23349
- // default to tabs in the case of a tie (or nothing
23350
- // to go on)
23351
- if (tabbed.length >= spaced.length) {
23352
- return '\t';
23353
- }
23354
-
23355
- // Otherwise, we need to guess the multiple
23356
- const min = spaced.reduce((previous, current) => {
23357
- const numSpaces = /^ +/.exec(current)[0].length;
23358
- return Math.min(numSpaces, previous);
23359
- }, Infinity);
23360
-
23361
- return new Array(min + 1).join(' ');
23362
- }
23363
-
23364
- function getRelativePath(from, to) {
23365
- const fromParts = from.split(/[/\\]/);
23366
- const toParts = to.split(/[/\\]/);
23367
-
23368
- fromParts.pop(); // get dirname
23369
-
23370
- while (fromParts[0] === toParts[0]) {
23371
- fromParts.shift();
23372
- toParts.shift();
23373
- }
23374
-
23375
- if (fromParts.length) {
23376
- let i = fromParts.length;
23377
- while (i--) fromParts[i] = '..';
23378
- }
23379
-
23380
- return fromParts.concat(toParts).join('/');
23381
- }
23382
-
23383
- const toString = Object.prototype.toString;
23384
-
23385
- function isObject(thing) {
23386
- return toString.call(thing) === '[object Object]';
23387
- }
23388
-
23389
- function getLocator(source) {
23390
- const originalLines = source.split('\n');
23391
- const lineOffsets = [];
23392
-
23393
- for (let i = 0, pos = 0; i < originalLines.length; i++) {
23394
- lineOffsets.push(pos);
23395
- pos += originalLines[i].length + 1;
23396
- }
23397
-
23398
- return function locate(index) {
23399
- let i = 0;
23400
- let j = lineOffsets.length;
23401
- while (i < j) {
23402
- const m = (i + j) >> 1;
23403
- if (index < lineOffsets[m]) {
23404
- j = m;
23405
- } else {
23406
- i = m + 1;
23407
- }
23408
- }
23409
- const line = i - 1;
23410
- const column = index - lineOffsets[line];
23411
- return { line, column };
23412
- };
23413
- }
23414
-
23415
- const wordRegex = /\w/;
23416
-
23417
- class Mappings {
23418
- constructor(hires) {
23419
- this.hires = hires;
23420
- this.generatedCodeLine = 0;
23421
- this.generatedCodeColumn = 0;
23422
- this.raw = [];
23423
- this.rawSegments = this.raw[this.generatedCodeLine] = [];
23424
- this.pending = null;
23425
- }
23426
-
23427
- addEdit(sourceIndex, content, loc, nameIndex) {
23428
- if (content.length) {
23429
- const contentLengthMinusOne = content.length - 1;
23430
- let contentLineEnd = content.indexOf('\n', 0);
23431
- let previousContentLineEnd = -1;
23432
- // Loop through each line in the content and add a segment, but stop if the last line is empty,
23433
- // else code afterwards would fill one line too many
23434
- while (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) {
23435
- const segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
23436
- if (nameIndex >= 0) {
23437
- segment.push(nameIndex);
23438
- }
23439
- this.rawSegments.push(segment);
23440
-
23441
- this.generatedCodeLine += 1;
23442
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
23443
- this.generatedCodeColumn = 0;
23444
-
23445
- previousContentLineEnd = contentLineEnd;
23446
- contentLineEnd = content.indexOf('\n', contentLineEnd + 1);
23447
- }
23448
-
23449
- const segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
23450
- if (nameIndex >= 0) {
23451
- segment.push(nameIndex);
23452
- }
23453
- this.rawSegments.push(segment);
23454
-
23455
- this.advance(content.slice(previousContentLineEnd + 1));
23456
- } else if (this.pending) {
23457
- this.rawSegments.push(this.pending);
23458
- this.advance(content);
23459
- }
23460
-
23461
- this.pending = null;
23462
- }
23463
-
23464
- addUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {
23465
- let originalCharIndex = chunk.start;
23466
- let first = true;
23467
- // when iterating each char, check if it's in a word boundary
23468
- let charInHiresBoundary = false;
23469
-
23470
- while (originalCharIndex < chunk.end) {
23471
- if (original[originalCharIndex] === '\n') {
23472
- loc.line += 1;
23473
- loc.column = 0;
23474
- this.generatedCodeLine += 1;
23475
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
23476
- this.generatedCodeColumn = 0;
23477
- first = true;
23478
- charInHiresBoundary = false;
23479
- } else {
23480
- if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
23481
- const segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
23482
-
23483
- if (this.hires === 'boundary') {
23484
- // in hires "boundary", group segments per word boundary than per char
23485
- if (wordRegex.test(original[originalCharIndex])) {
23486
- // for first char in the boundary found, start the boundary by pushing a segment
23487
- if (!charInHiresBoundary) {
23488
- this.rawSegments.push(segment);
23489
- charInHiresBoundary = true;
23490
- }
23491
- } else {
23492
- // for non-word char, end the boundary by pushing a segment
23493
- this.rawSegments.push(segment);
23494
- charInHiresBoundary = false;
23495
- }
23496
- } else {
23497
- this.rawSegments.push(segment);
23498
- }
23499
- }
23500
-
23501
- loc.column += 1;
23502
- this.generatedCodeColumn += 1;
23503
- first = false;
23504
- }
23505
-
23506
- originalCharIndex += 1;
23507
- }
23508
-
23509
- this.pending = null;
23510
- }
23511
-
23512
- advance(str) {
23513
- if (!str) return;
23514
-
23515
- const lines = str.split('\n');
23516
-
23517
- if (lines.length > 1) {
23518
- for (let i = 0; i < lines.length - 1; i++) {
23519
- this.generatedCodeLine++;
23520
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
23521
- }
23522
- this.generatedCodeColumn = 0;
23523
- }
23524
-
23525
- this.generatedCodeColumn += lines[lines.length - 1].length;
23526
- }
23527
- }
23528
-
23529
- const n = '\n';
23530
-
23531
- const warned = {
23532
- insertLeft: false,
23533
- insertRight: false,
23534
- storeName: false,
23535
- };
23536
-
23537
- class MagicString {
23538
- constructor(string, options = {}) {
23539
- const chunk = new Chunk(0, string.length, string);
23540
-
23541
- Object.defineProperties(this, {
23542
- original: { writable: true, value: string },
23543
- outro: { writable: true, value: '' },
23544
- intro: { writable: true, value: '' },
23545
- firstChunk: { writable: true, value: chunk },
23546
- lastChunk: { writable: true, value: chunk },
23547
- lastSearchedChunk: { writable: true, value: chunk },
23548
- byStart: { writable: true, value: {} },
23549
- byEnd: { writable: true, value: {} },
23550
- filename: { writable: true, value: options.filename },
23551
- indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
23552
- sourcemapLocations: { writable: true, value: new BitSet() },
23553
- storedNames: { writable: true, value: {} },
23554
- indentStr: { writable: true, value: undefined },
23555
- ignoreList: { writable: true, value: options.ignoreList },
23556
- offset: { writable: true, value: options.offset || 0 },
23557
- });
23558
-
23559
- this.byStart[0] = chunk;
23560
- this.byEnd[string.length] = chunk;
23561
- }
23562
-
23563
- addSourcemapLocation(char) {
23564
- this.sourcemapLocations.add(char);
23565
- }
23566
-
23567
- append(content) {
23568
- if (typeof content !== 'string') throw new TypeError('outro content must be a string');
23569
-
23570
- this.outro += content;
23571
- return this;
23572
- }
23573
-
23574
- appendLeft(index, content) {
23575
- index = index + this.offset;
23576
-
23577
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23578
-
23579
- this._split(index);
23580
-
23581
- const chunk = this.byEnd[index];
23582
-
23583
- if (chunk) {
23584
- chunk.appendLeft(content);
23585
- } else {
23586
- this.intro += content;
23587
- }
23588
- return this;
23589
- }
23590
-
23591
- appendRight(index, content) {
23592
- index = index + this.offset;
23593
-
23594
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23595
-
23596
- this._split(index);
23597
-
23598
- const chunk = this.byStart[index];
23599
-
23600
- if (chunk) {
23601
- chunk.appendRight(content);
23602
- } else {
23603
- this.outro += content;
23604
- }
23605
- return this;
23606
- }
23607
-
23608
- clone() {
23609
- const cloned = new MagicString(this.original, { filename: this.filename, offset: this.offset });
23610
-
23611
- let originalChunk = this.firstChunk;
23612
- let clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());
23613
-
23614
- while (originalChunk) {
23615
- cloned.byStart[clonedChunk.start] = clonedChunk;
23616
- cloned.byEnd[clonedChunk.end] = clonedChunk;
23617
-
23618
- const nextOriginalChunk = originalChunk.next;
23619
- const nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();
23620
-
23621
- if (nextClonedChunk) {
23622
- clonedChunk.next = nextClonedChunk;
23623
- nextClonedChunk.previous = clonedChunk;
23624
-
23625
- clonedChunk = nextClonedChunk;
23626
- }
23627
-
23628
- originalChunk = nextOriginalChunk;
23629
- }
23630
-
23631
- cloned.lastChunk = clonedChunk;
23632
-
23633
- if (this.indentExclusionRanges) {
23634
- cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
23635
- }
23636
-
23637
- cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
23638
-
23639
- cloned.intro = this.intro;
23640
- cloned.outro = this.outro;
23641
-
23642
- return cloned;
23643
- }
23644
-
23645
- generateDecodedMap(options) {
23646
- options = options || {};
23647
-
23648
- const sourceIndex = 0;
23649
- const names = Object.keys(this.storedNames);
23650
- const mappings = new Mappings(options.hires);
23651
-
23652
- const locate = getLocator(this.original);
23653
-
23654
- if (this.intro) {
23655
- mappings.advance(this.intro);
23656
- }
23657
-
23658
- this.firstChunk.eachNext((chunk) => {
23659
- const loc = locate(chunk.start);
23660
-
23661
- if (chunk.intro.length) mappings.advance(chunk.intro);
23662
-
23663
- if (chunk.edited) {
23664
- mappings.addEdit(
23665
- sourceIndex,
23666
- chunk.content,
23667
- loc,
23668
- chunk.storeName ? names.indexOf(chunk.original) : -1,
23669
- );
23670
- } else {
23671
- mappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);
23672
- }
23673
-
23674
- if (chunk.outro.length) mappings.advance(chunk.outro);
23675
- });
23676
-
23677
- return {
23678
- file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
23679
- sources: [
23680
- options.source ? getRelativePath(options.file || '', options.source) : options.file || '',
23681
- ],
23682
- sourcesContent: options.includeContent ? [this.original] : undefined,
23683
- names,
23684
- mappings: mappings.raw,
23685
- x_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined,
23686
- };
23687
- }
23688
-
23689
- generateMap(options) {
23690
- return new SourceMap(this.generateDecodedMap(options));
23691
- }
23692
-
23693
- _ensureindentStr() {
23694
- if (this.indentStr === undefined) {
23695
- this.indentStr = guessIndent(this.original);
23696
- }
23697
- }
23698
-
23699
- _getRawIndentString() {
23700
- this._ensureindentStr();
23701
- return this.indentStr;
23702
- }
23703
-
23704
- getIndentString() {
23705
- this._ensureindentStr();
23706
- return this.indentStr === null ? '\t' : this.indentStr;
23707
- }
23708
-
23709
- indent(indentStr, options) {
23710
- const pattern = /^[^\r\n]/gm;
23711
-
23712
- if (isObject(indentStr)) {
23713
- options = indentStr;
23714
- indentStr = undefined;
23715
- }
23716
-
23717
- if (indentStr === undefined) {
23718
- this._ensureindentStr();
23719
- indentStr = this.indentStr || '\t';
23720
- }
23721
-
23722
- if (indentStr === '') return this; // noop
23723
-
23724
- options = options || {};
23725
-
23726
- // Process exclusion ranges
23727
- const isExcluded = {};
23728
-
23729
- if (options.exclude) {
23730
- const exclusions =
23731
- typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
23732
- exclusions.forEach((exclusion) => {
23733
- for (let i = exclusion[0]; i < exclusion[1]; i += 1) {
23734
- isExcluded[i] = true;
23735
- }
23736
- });
23737
- }
23738
-
23739
- let shouldIndentNextCharacter = options.indentStart !== false;
23740
- const replacer = (match) => {
23741
- if (shouldIndentNextCharacter) return `${indentStr}${match}`;
23742
- shouldIndentNextCharacter = true;
23743
- return match;
23744
- };
23745
-
23746
- this.intro = this.intro.replace(pattern, replacer);
23747
-
23748
- let charIndex = 0;
23749
- let chunk = this.firstChunk;
23750
-
23751
- while (chunk) {
23752
- const end = chunk.end;
23753
-
23754
- if (chunk.edited) {
23755
- if (!isExcluded[charIndex]) {
23756
- chunk.content = chunk.content.replace(pattern, replacer);
23757
-
23758
- if (chunk.content.length) {
23759
- shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
23760
- }
23761
- }
23762
- } else {
23763
- charIndex = chunk.start;
23764
-
23765
- while (charIndex < end) {
23766
- if (!isExcluded[charIndex]) {
23767
- const char = this.original[charIndex];
23768
-
23769
- if (char === '\n') {
23770
- shouldIndentNextCharacter = true;
23771
- } else if (char !== '\r' && shouldIndentNextCharacter) {
23772
- shouldIndentNextCharacter = false;
23773
-
23774
- if (charIndex === chunk.start) {
23775
- chunk.prependRight(indentStr);
23776
- } else {
23777
- this._splitChunk(chunk, charIndex);
23778
- chunk = chunk.next;
23779
- chunk.prependRight(indentStr);
23780
- }
23781
- }
23782
- }
23783
-
23784
- charIndex += 1;
23785
- }
23786
- }
23787
-
23788
- charIndex = chunk.end;
23789
- chunk = chunk.next;
23790
- }
23791
-
23792
- this.outro = this.outro.replace(pattern, replacer);
23793
-
23794
- return this;
23795
- }
23796
-
23797
- insert() {
23798
- throw new Error(
23799
- 'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)',
23800
- );
23801
- }
23802
-
23803
- insertLeft(index, content) {
23804
- if (!warned.insertLeft) {
23805
- console.warn(
23806
- 'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',
23807
- );
23808
- warned.insertLeft = true;
23809
- }
23810
-
23811
- return this.appendLeft(index, content);
23812
- }
23813
-
23814
- insertRight(index, content) {
23815
- if (!warned.insertRight) {
23816
- console.warn(
23817
- 'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',
23818
- );
23819
- warned.insertRight = true;
23820
- }
23821
-
23822
- return this.prependRight(index, content);
23823
- }
23824
-
23825
- move(start, end, index) {
23826
- start = start + this.offset;
23827
- end = end + this.offset;
23828
- index = index + this.offset;
23829
-
23830
- if (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');
23831
-
23832
- this._split(start);
23833
- this._split(end);
23834
- this._split(index);
23835
-
23836
- const first = this.byStart[start];
23837
- const last = this.byEnd[end];
23838
-
23839
- const oldLeft = first.previous;
23840
- const oldRight = last.next;
23841
-
23842
- const newRight = this.byStart[index];
23843
- if (!newRight && last === this.lastChunk) return this;
23844
- const newLeft = newRight ? newRight.previous : this.lastChunk;
23845
-
23846
- if (oldLeft) oldLeft.next = oldRight;
23847
- if (oldRight) oldRight.previous = oldLeft;
23848
-
23849
- if (newLeft) newLeft.next = first;
23850
- if (newRight) newRight.previous = last;
23851
-
23852
- if (!first.previous) this.firstChunk = last.next;
23853
- if (!last.next) {
23854
- this.lastChunk = first.previous;
23855
- this.lastChunk.next = null;
23856
- }
23857
-
23858
- first.previous = newLeft;
23859
- last.next = newRight || null;
23860
-
23861
- if (!newLeft) this.firstChunk = first;
23862
- if (!newRight) this.lastChunk = last;
23863
- return this;
23864
- }
23865
-
23866
- overwrite(start, end, content, options) {
23867
- options = options || {};
23868
- return this.update(start, end, content, { ...options, overwrite: !options.contentOnly });
23869
- }
23870
-
23871
- update(start, end, content, options) {
23872
- start = start + this.offset;
23873
- end = end + this.offset;
23874
-
23875
- if (typeof content !== 'string') throw new TypeError('replacement content must be a string');
23876
-
23877
- if (this.original.length !== 0) {
23878
- while (start < 0) start += this.original.length;
23879
- while (end < 0) end += this.original.length;
23880
- }
23881
-
23882
- if (end > this.original.length) throw new Error('end is out of bounds');
23883
- if (start === end)
23884
- throw new Error(
23885
- 'Cannot overwrite a zero-length range – use appendLeft or prependRight instead',
23886
- );
23887
-
23888
- this._split(start);
23889
- this._split(end);
23890
-
23891
- if (options === true) {
23892
- if (!warned.storeName) {
23893
- console.warn(
23894
- 'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',
23895
- );
23896
- warned.storeName = true;
23897
- }
23898
-
23899
- options = { storeName: true };
23900
- }
23901
- const storeName = options !== undefined ? options.storeName : false;
23902
- const overwrite = options !== undefined ? options.overwrite : false;
23903
-
23904
- if (storeName) {
23905
- const original = this.original.slice(start, end);
23906
- Object.defineProperty(this.storedNames, original, {
23907
- writable: true,
23908
- value: true,
23909
- enumerable: true,
23910
- });
23911
- }
23912
-
23913
- const first = this.byStart[start];
23914
- const last = this.byEnd[end];
23915
-
23916
- if (first) {
23917
- let chunk = first;
23918
- while (chunk !== last) {
23919
- if (chunk.next !== this.byStart[chunk.end]) {
23920
- throw new Error('Cannot overwrite across a split point');
23921
- }
23922
- chunk = chunk.next;
23923
- chunk.edit('', false);
23924
- }
23925
-
23926
- first.edit(content, storeName, !overwrite);
23927
- } else {
23928
- // must be inserting at the end
23929
- const newChunk = new Chunk(start, end, '').edit(content, storeName);
23930
-
23931
- // TODO last chunk in the array may not be the last chunk, if it's moved...
23932
- last.next = newChunk;
23933
- newChunk.previous = last;
23934
- }
23935
- return this;
23936
- }
23937
-
23938
- prepend(content) {
23939
- if (typeof content !== 'string') throw new TypeError('outro content must be a string');
23940
-
23941
- this.intro = content + this.intro;
23942
- return this;
23943
- }
23944
-
23945
- prependLeft(index, content) {
23946
- index = index + this.offset;
23947
-
23948
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23949
-
23950
- this._split(index);
23951
-
23952
- const chunk = this.byEnd[index];
23953
-
23954
- if (chunk) {
23955
- chunk.prependLeft(content);
23956
- } else {
23957
- this.intro = content + this.intro;
23958
- }
23959
- return this;
23960
- }
23961
-
23962
- prependRight(index, content) {
23963
- index = index + this.offset;
23964
-
23965
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23966
-
23967
- this._split(index);
23968
-
23969
- const chunk = this.byStart[index];
23970
-
23971
- if (chunk) {
23972
- chunk.prependRight(content);
23973
- } else {
23974
- this.outro = content + this.outro;
23975
- }
23976
- return this;
23977
- }
23978
-
23979
- remove(start, end) {
23980
- start = start + this.offset;
23981
- end = end + this.offset;
23982
-
23983
- if (this.original.length !== 0) {
23984
- while (start < 0) start += this.original.length;
23985
- while (end < 0) end += this.original.length;
23986
- }
23987
-
23988
- if (start === end) return this;
23989
-
23990
- if (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');
23991
- if (start > end) throw new Error('end must be greater than start');
23992
-
23993
- this._split(start);
23994
- this._split(end);
23995
-
23996
- let chunk = this.byStart[start];
23997
-
23998
- while (chunk) {
23999
- chunk.intro = '';
24000
- chunk.outro = '';
24001
- chunk.edit('');
24002
-
24003
- chunk = end > chunk.end ? this.byStart[chunk.end] : null;
24004
- }
24005
- return this;
24006
- }
24007
-
24008
- reset(start, end) {
24009
- start = start + this.offset;
24010
- end = end + this.offset;
24011
-
24012
- if (this.original.length !== 0) {
24013
- while (start < 0) start += this.original.length;
24014
- while (end < 0) end += this.original.length;
24015
- }
24016
-
24017
- if (start === end) return this;
24018
-
24019
- if (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');
24020
- if (start > end) throw new Error('end must be greater than start');
24021
-
24022
- this._split(start);
24023
- this._split(end);
24024
-
24025
- let chunk = this.byStart[start];
24026
-
24027
- while (chunk) {
24028
- chunk.reset();
24029
-
24030
- chunk = end > chunk.end ? this.byStart[chunk.end] : null;
24031
- }
24032
- return this;
24033
- }
24034
-
24035
- lastChar() {
24036
- if (this.outro.length) return this.outro[this.outro.length - 1];
24037
- let chunk = this.lastChunk;
24038
- do {
24039
- if (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];
24040
- if (chunk.content.length) return chunk.content[chunk.content.length - 1];
24041
- if (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];
24042
- } while ((chunk = chunk.previous));
24043
- if (this.intro.length) return this.intro[this.intro.length - 1];
24044
- return '';
24045
- }
24046
-
24047
- lastLine() {
24048
- let lineIndex = this.outro.lastIndexOf(n);
24049
- if (lineIndex !== -1) return this.outro.substr(lineIndex + 1);
24050
- let lineStr = this.outro;
24051
- let chunk = this.lastChunk;
24052
- do {
24053
- if (chunk.outro.length > 0) {
24054
- lineIndex = chunk.outro.lastIndexOf(n);
24055
- if (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;
24056
- lineStr = chunk.outro + lineStr;
24057
- }
24058
-
24059
- if (chunk.content.length > 0) {
24060
- lineIndex = chunk.content.lastIndexOf(n);
24061
- if (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;
24062
- lineStr = chunk.content + lineStr;
24063
- }
24064
-
24065
- if (chunk.intro.length > 0) {
24066
- lineIndex = chunk.intro.lastIndexOf(n);
24067
- if (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;
24068
- lineStr = chunk.intro + lineStr;
24069
- }
24070
- } while ((chunk = chunk.previous));
24071
- lineIndex = this.intro.lastIndexOf(n);
24072
- if (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;
24073
- return this.intro + lineStr;
24074
- }
24075
-
24076
- slice(start = 0, end = this.original.length - this.offset) {
24077
- start = start + this.offset;
24078
- end = end + this.offset;
24079
-
24080
- if (this.original.length !== 0) {
24081
- while (start < 0) start += this.original.length;
24082
- while (end < 0) end += this.original.length;
24083
- }
24084
-
24085
- let result = '';
24086
-
24087
- // find start chunk
24088
- let chunk = this.firstChunk;
24089
- while (chunk && (chunk.start > start || chunk.end <= start)) {
24090
- // found end chunk before start
24091
- if (chunk.start < end && chunk.end >= end) {
24092
- return result;
24093
- }
24094
-
24095
- chunk = chunk.next;
24096
- }
24097
-
24098
- if (chunk && chunk.edited && chunk.start !== start)
24099
- throw new Error(`Cannot use replaced character ${start} as slice start anchor.`);
24100
-
24101
- const startChunk = chunk;
24102
- while (chunk) {
24103
- if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
24104
- result += chunk.intro;
24105
- }
24106
-
24107
- const containsEnd = chunk.start < end && chunk.end >= end;
24108
- if (containsEnd && chunk.edited && chunk.end !== end)
24109
- throw new Error(`Cannot use replaced character ${end} as slice end anchor.`);
24110
-
24111
- const sliceStart = startChunk === chunk ? start - chunk.start : 0;
24112
- const sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;
24113
-
24114
- result += chunk.content.slice(sliceStart, sliceEnd);
24115
-
24116
- if (chunk.outro && (!containsEnd || chunk.end === end)) {
24117
- result += chunk.outro;
24118
- }
24119
-
24120
- if (containsEnd) {
24121
- break;
24122
- }
24123
-
24124
- chunk = chunk.next;
24125
- }
24126
-
24127
- return result;
24128
- }
24129
-
24130
- // TODO deprecate this? not really very useful
24131
- snip(start, end) {
24132
- const clone = this.clone();
24133
- clone.remove(0, start);
24134
- clone.remove(end, clone.original.length);
24135
-
24136
- return clone;
24137
- }
24138
-
24139
- _split(index) {
24140
- if (this.byStart[index] || this.byEnd[index]) return;
24141
-
24142
- let chunk = this.lastSearchedChunk;
24143
- const searchForward = index > chunk.end;
24144
-
24145
- while (chunk) {
24146
- if (chunk.contains(index)) return this._splitChunk(chunk, index);
24147
-
24148
- chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
24149
- }
24150
- }
24151
-
24152
- _splitChunk(chunk, index) {
24153
- if (chunk.edited && chunk.content.length) {
24154
- // zero-length edited chunks are a special case (overlapping replacements)
24155
- const loc = getLocator(this.original)(index);
24156
- throw new Error(
24157
- `Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – "${chunk.original}")`,
24158
- );
24159
- }
24160
-
24161
- const newChunk = chunk.split(index);
24162
-
24163
- this.byEnd[index] = chunk;
24164
- this.byStart[index] = newChunk;
24165
- this.byEnd[newChunk.end] = newChunk;
24166
-
24167
- if (chunk === this.lastChunk) this.lastChunk = newChunk;
24168
-
24169
- this.lastSearchedChunk = chunk;
24170
- return true;
24171
- }
24172
-
24173
- toString() {
24174
- let str = this.intro;
24175
-
24176
- let chunk = this.firstChunk;
24177
- while (chunk) {
24178
- str += chunk.toString();
24179
- chunk = chunk.next;
24180
- }
24181
-
24182
- return str + this.outro;
24183
- }
24184
-
24185
- isEmpty() {
24186
- let chunk = this.firstChunk;
24187
- do {
24188
- if (
24189
- (chunk.intro.length && chunk.intro.trim()) ||
24190
- (chunk.content.length && chunk.content.trim()) ||
24191
- (chunk.outro.length && chunk.outro.trim())
24192
- )
24193
- return false;
24194
- } while ((chunk = chunk.next));
24195
- return true;
24196
- }
24197
-
24198
- length() {
24199
- let chunk = this.firstChunk;
24200
- let length = 0;
24201
- do {
24202
- length += chunk.intro.length + chunk.content.length + chunk.outro.length;
24203
- } while ((chunk = chunk.next));
24204
- return length;
24205
- }
24206
-
24207
- trimLines() {
24208
- return this.trim('[\\r\\n]');
24209
- }
24210
-
24211
- trim(charType) {
24212
- return this.trimStart(charType).trimEnd(charType);
24213
- }
24214
-
24215
- trimEndAborted(charType) {
24216
- const rx = new RegExp((charType || '\\s') + '+$');
24217
-
24218
- this.outro = this.outro.replace(rx, '');
24219
- if (this.outro.length) return true;
24220
-
24221
- let chunk = this.lastChunk;
24222
-
24223
- do {
24224
- const end = chunk.end;
24225
- const aborted = chunk.trimEnd(rx);
24226
-
24227
- // if chunk was trimmed, we have a new lastChunk
24228
- if (chunk.end !== end) {
24229
- if (this.lastChunk === chunk) {
24230
- this.lastChunk = chunk.next;
24231
- }
24232
-
24233
- this.byEnd[chunk.end] = chunk;
24234
- this.byStart[chunk.next.start] = chunk.next;
24235
- this.byEnd[chunk.next.end] = chunk.next;
24236
- }
24237
-
24238
- if (aborted) return true;
24239
- chunk = chunk.previous;
24240
- } while (chunk);
24241
-
24242
- return false;
24243
- }
24244
-
24245
- trimEnd(charType) {
24246
- this.trimEndAborted(charType);
24247
- return this;
24248
- }
24249
- trimStartAborted(charType) {
24250
- const rx = new RegExp('^' + (charType || '\\s') + '+');
24251
-
24252
- this.intro = this.intro.replace(rx, '');
24253
- if (this.intro.length) return true;
24254
-
24255
- let chunk = this.firstChunk;
24256
-
24257
- do {
24258
- const end = chunk.end;
24259
- const aborted = chunk.trimStart(rx);
24260
-
24261
- if (chunk.end !== end) {
24262
- // special case...
24263
- if (chunk === this.lastChunk) this.lastChunk = chunk.next;
24264
-
24265
- this.byEnd[chunk.end] = chunk;
24266
- this.byStart[chunk.next.start] = chunk.next;
24267
- this.byEnd[chunk.next.end] = chunk.next;
24268
- }
24269
-
24270
- if (aborted) return true;
24271
- chunk = chunk.next;
24272
- } while (chunk);
24273
-
24274
- return false;
24275
- }
24276
-
24277
- trimStart(charType) {
24278
- this.trimStartAborted(charType);
24279
- return this;
24280
- }
24281
-
24282
- hasChanged() {
24283
- return this.original !== this.toString();
24284
- }
24285
-
24286
- _replaceRegexp(searchValue, replacement) {
24287
- function getReplacement(match, str) {
24288
- if (typeof replacement === 'string') {
24289
- return replacement.replace(/\$(\$|&|\d+)/g, (_, i) => {
24290
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter
24291
- if (i === '$') return '$';
24292
- if (i === '&') return match[0];
24293
- const num = +i;
24294
- if (num < match.length) return match[+i];
24295
- return `$${i}`;
24296
- });
24297
- } else {
24298
- return replacement(...match, match.index, str, match.groups);
24299
- }
24300
- }
24301
- function matchAll(re, str) {
24302
- let match;
24303
- const matches = [];
24304
- while ((match = re.exec(str))) {
24305
- matches.push(match);
24306
- }
24307
- return matches;
24308
- }
24309
- if (searchValue.global) {
24310
- const matches = matchAll(searchValue, this.original);
24311
- matches.forEach((match) => {
24312
- if (match.index != null) {
24313
- const replacement = getReplacement(match, this.original);
24314
- if (replacement !== match[0]) {
24315
- this.overwrite(match.index, match.index + match[0].length, replacement);
24316
- }
24317
- }
24318
- });
24319
- } else {
24320
- const match = this.original.match(searchValue);
24321
- if (match && match.index != null) {
24322
- const replacement = getReplacement(match, this.original);
24323
- if (replacement !== match[0]) {
24324
- this.overwrite(match.index, match.index + match[0].length, replacement);
24325
- }
24326
- }
24327
- }
24328
- return this;
24329
- }
24330
-
24331
- _replaceString(string, replacement) {
24332
- const { original } = this;
24333
- const index = original.indexOf(string);
24334
-
24335
- if (index !== -1) {
24336
- this.overwrite(index, index + string.length, replacement);
24337
- }
24338
-
24339
- return this;
24340
- }
24341
-
24342
- replace(searchValue, replacement) {
24343
- if (typeof searchValue === 'string') {
24344
- return this._replaceString(searchValue, replacement);
24345
- }
24346
-
24347
- return this._replaceRegexp(searchValue, replacement);
24348
- }
24349
-
24350
- _replaceAllString(string, replacement) {
24351
- const { original } = this;
24352
- const stringLength = string.length;
24353
- for (
24354
- let index = original.indexOf(string);
24355
- index !== -1;
24356
- index = original.indexOf(string, index + stringLength)
24357
- ) {
24358
- const previous = original.slice(index, index + stringLength);
24359
- if (previous !== replacement) this.overwrite(index, index + stringLength, replacement);
24360
- }
24361
-
24362
- return this;
24363
- }
24364
-
24365
- replaceAll(searchValue, replacement) {
24366
- if (typeof searchValue === 'string') {
24367
- return this._replaceAllString(searchValue, replacement);
24368
- }
24369
-
24370
- if (!searchValue.global) {
24371
- throw new TypeError(
24372
- 'MagicString.prototype.replaceAll called with a non-global RegExp argument',
24373
- );
24374
- }
24375
-
24376
- return this._replaceRegexp(searchValue, replacement);
24377
- }
24378
- }
24379
-
24380
23207
  var utils = {};
24381
23208
 
24382
23209
  var constants;
@@ -24571,7 +23398,7 @@ var hasRequiredUtils;
24571
23398
  function requireUtils () {
24572
23399
  if (hasRequiredUtils) return utils;
24573
23400
  hasRequiredUtils = 1;
24574
- (function (exports) {
23401
+ (function (exports$1) {
24575
23402
 
24576
23403
  const path = path$3;
24577
23404
  const win32 = process.platform === 'win32';
@@ -24582,19 +23409,19 @@ function requireUtils () {
24582
23409
  REGEX_SPECIAL_CHARS_GLOBAL
24583
23410
  } = requireConstants();
24584
23411
 
24585
- exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
24586
- exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
24587
- exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
24588
- exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
24589
- exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
23412
+ exports$1.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
23413
+ exports$1.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
23414
+ exports$1.isRegexChar = str => str.length === 1 && exports$1.hasRegexChars(str);
23415
+ exports$1.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
23416
+ exports$1.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
24590
23417
 
24591
- exports.removeBackslashes = str => {
23418
+ exports$1.removeBackslashes = str => {
24592
23419
  return str.replace(REGEX_REMOVE_BACKSLASH, match => {
24593
23420
  return match === '\\' ? '' : match;
24594
23421
  });
24595
23422
  };
24596
23423
 
24597
- exports.supportsLookbehinds = () => {
23424
+ exports$1.supportsLookbehinds = () => {
24598
23425
  const segs = process.version.slice(1).split('.').map(Number);
24599
23426
  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
24600
23427
  return true;
@@ -24602,21 +23429,21 @@ function requireUtils () {
24602
23429
  return false;
24603
23430
  };
24604
23431
 
24605
- exports.isWindows = options => {
23432
+ exports$1.isWindows = options => {
24606
23433
  if (options && typeof options.windows === 'boolean') {
24607
23434
  return options.windows;
24608
23435
  }
24609
23436
  return win32 === true || path.sep === '\\';
24610
23437
  };
24611
23438
 
24612
- exports.escapeLast = (input, char, lastIdx) => {
23439
+ exports$1.escapeLast = (input, char, lastIdx) => {
24613
23440
  const idx = input.lastIndexOf(char, lastIdx);
24614
23441
  if (idx === -1) return input;
24615
- if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
23442
+ if (input[idx - 1] === '\\') return exports$1.escapeLast(input, char, idx - 1);
24616
23443
  return `${input.slice(0, idx)}\\${input.slice(idx)}`;
24617
23444
  };
24618
23445
 
24619
- exports.removePrefix = (input, state = {}) => {
23446
+ exports$1.removePrefix = (input, state = {}) => {
24620
23447
  let output = input;
24621
23448
  if (output.startsWith('./')) {
24622
23449
  output = output.slice(2);
@@ -24625,7 +23452,7 @@ function requireUtils () {
24625
23452
  return output;
24626
23453
  };
24627
23454
 
24628
- exports.wrapOutput = (input, state = {}, options = {}) => {
23455
+ exports$1.wrapOutput = (input, state = {}, options = {}) => {
24629
23456
  const prepend = options.contains ? '' : '^';
24630
23457
  const append = options.contains ? '' : '$';
24631
23458