From 39ff4f204d379de4468c1d2518ec9f8234f9444d Mon Sep 17 00:00:00 2001 From: UnlegitDqrk Date: Mon, 2 Mar 2026 14:22:54 +0100 Subject: [PATCH] Fixed issue: #71 --- .../luaj/vm2/LoadState$GlobalsUndumper.class | Bin 0 -> 578 bytes .../main/java/org/luaj/vm2/LoadState.class | Bin 0 -> 7969 bytes .../org/luaj/vm2/compiler/DumpState.class | Bin 0 -> 5855 bytes .../luaj/vm2/libs/Bit32Lib$Bit32Lib2.class | Bin 0 -> 852 bytes .../luaj/vm2/libs/Bit32Lib$Bit32LibV.class | Bin 0 -> 952 bytes .../java/org/luaj/vm2/libs/Bit32Lib.class | Bin 0 -> 3133 bytes .../luaj/vm2/libs/CoroutineLib$Create.class | Bin 0 -> 895 bytes .../vm2/libs/CoroutineLib$IsYieldable.class | Bin 0 -> 966 bytes .../luaj/vm2/libs/CoroutineLib$Resume.class | Bin 0 -> 625 bytes .../luaj/vm2/libs/CoroutineLib$Running.class | Bin 0 -> 1012 bytes .../luaj/vm2/libs/CoroutineLib$Status.class | Bin 0 -> 664 bytes .../org/luaj/vm2/libs/CoroutineLib$Wrap.class | Bin 0 -> 1012 bytes .../luaj/vm2/libs/CoroutineLib$Yield.class | Bin 0 -> 760 bytes .../luaj/vm2/libs/CoroutineLib$wrapper.class | Bin 0 -> 986 bytes .../java/org/luaj/vm2/libs/CoroutineLib.class | Bin 0 -> 1741 bytes .../org/luaj/vm2/libs/OsLib$OsLibFunc.class | Bin 0 -> 3534 bytes .../main/java/org/luaj/vm2/libs/OsLib.class | Bin 0 -> 8308 bytes .../vm2/libs/StringLib$ByteArrayOutput.class | Bin 0 -> 1056 bytes .../luaj/vm2/libs/StringLib$FormatDesc.class | Bin 0 -> 3605 bytes .../vm2/libs/StringLib$FormatOption.class | Bin 0 -> 592 bytes .../luaj/vm2/libs/StringLib$FormatState.class | Bin 0 -> 4700 bytes .../luaj/vm2/libs/StringLib$GMatchAux.class | Bin 0 -> 1127 bytes .../luaj/vm2/libs/StringLib$MatchState.class | Bin 0 -> 8289 bytes .../luaj/vm2/libs/StringLib$OptionKind.class | Bin 0 -> 1551 bytes .../org/luaj/vm2/libs/StringLib$_byte.class | Bin 0 -> 1192 bytes .../org/luaj/vm2/libs/StringLib$_char.class | Bin 0 -> 1256 bytes .../org/luaj/vm2/libs/StringLib$dump.class | Bin 0 -> 1142 bytes .../org/luaj/vm2/libs/StringLib$find.class | Bin 0 -> 498 bytes .../org/luaj/vm2/libs/StringLib$format.class | Bin 0 -> 2841 bytes .../org/luaj/vm2/libs/StringLib$gmatch.class | Bin 0 -> 681 bytes .../org/luaj/vm2/libs/StringLib$gsub.class | Bin 0 -> 1838 bytes .../org/luaj/vm2/libs/StringLib$len.class | Bin 0 -> 569 bytes .../org/luaj/vm2/libs/StringLib$lower.class | Bin 0 -> 618 bytes .../org/luaj/vm2/libs/StringLib$match.class | Bin 0 -> 500 bytes .../org/luaj/vm2/libs/StringLib$pack.class | Bin 0 -> 2564 bytes .../luaj/vm2/libs/StringLib$packsize.class | Bin 0 -> 1346 bytes .../org/luaj/vm2/libs/StringLib$rep.class | Bin 0 -> 813 bytes .../org/luaj/vm2/libs/StringLib$reverse.class | Bin 0 -> 774 bytes .../org/luaj/vm2/libs/StringLib$sub.class | Bin 0 -> 887 bytes .../org/luaj/vm2/libs/StringLib$unpack.class | Bin 0 -> 2934 bytes .../org/luaj/vm2/libs/StringLib$upper.class | Bin 0 -> 618 bytes .../java/org/luaj/vm2/libs/StringLib.class | Bin 0 -> 9306 bytes .../org/luaj/vm2/libs/TableLib$concat.class | Bin 0 -> 1218 bytes .../org/luaj/vm2/libs/TableLib$insert.class | Bin 0 -> 1620 bytes .../org/luaj/vm2/libs/TableLib$move.class | Bin 0 -> 1086 bytes .../org/luaj/vm2/libs/TableLib$pack.class | Bin 0 -> 635 bytes .../org/luaj/vm2/libs/TableLib$remove.class | Bin 0 -> 1248 bytes .../org/luaj/vm2/libs/TableLib$sort.class | Bin 0 -> 817 bytes .../org/luaj/vm2/libs/TableLib$unpack.class | Bin 0 -> 793 bytes .../java/org/luaj/vm2/libs/TableLib.class | Bin 0 -> 1338 bytes .../org/luaj/vm2/libs/Utf8Lib$Decoded.class | Bin 0 -> 394 bytes .../org/luaj/vm2/libs/Utf8Lib$codepoint.class | Bin 0 -> 1547 bytes .../org/luaj/vm2/libs/Utf8Lib$codes.class | Bin 0 -> 831 bytes .../luaj/vm2/libs/Utf8Lib$codes_iter.class | Bin 0 -> 1172 bytes .../java/org/luaj/vm2/libs/Utf8Lib$len.class | Bin 0 -> 1468 bytes .../org/luaj/vm2/libs/Utf8Lib$offset.class | Bin 0 -> 1691 bytes .../org/luaj/vm2/libs/Utf8Lib$utf8_char.class | Bin 0 -> 910 bytes .../main/java/org/luaj/vm2/libs/Utf8Lib.class | Bin 0 -> 2674 bytes examples/jse/SampleLuaScheduler.class | Bin 0 -> 1141 bytes examples/jse/SampleLuaScheduler.java | 31 +++ .../org/luaj/vm2/libs/jse/JseBaseLib.class | Bin 0 -> 1006 bytes .../luaj/vm2/libs/jse/JseIoLib$FileImpl.class | Bin 0 -> 4016 bytes .../vm2/libs/jse/JseIoLib$StdinFile.class | Bin 0 -> 2368 bytes .../vm2/libs/jse/JseIoLib$StdoutFile.class | Bin 0 -> 2550 bytes .../java/org/luaj/vm2/libs/jse/JseIoLib.class | Bin 0 -> 3037 bytes .../luaj/vm2/libs/jse/JseMathLib$acos.class | Bin 0 -> 469 bytes .../luaj/vm2/libs/jse/JseMathLib$asin.class | Bin 0 -> 469 bytes .../luaj/vm2/libs/jse/JseMathLib$atan2.class | Bin 0 -> 643 bytes .../luaj/vm2/libs/jse/JseMathLib$cosh.class | Bin 0 -> 469 bytes .../luaj/vm2/libs/jse/JseMathLib$exp.class | Bin 0 -> 467 bytes .../luaj/vm2/libs/jse/JseMathLib$log.class | Bin 0 -> 704 bytes .../luaj/vm2/libs/jse/JseMathLib$pow.class | Bin 0 -> 471 bytes .../luaj/vm2/libs/jse/JseMathLib$sinh.class | Bin 0 -> 469 bytes .../luaj/vm2/libs/jse/JseMathLib$tanh.class | Bin 0 -> 469 bytes .../org/luaj/vm2/libs/jse/JseMathLib.class | Bin 0 -> 1469 bytes .../java/org/luaj/vm2/libs/jse/JseOsLib.class | Bin 0 -> 2425 bytes .../org/luaj/vm2/libs/jse/JsePlatform.class | Bin 0 -> 2104 bytes .../vm2/libs/jse/JseProcess$CopyThread.class | Bin 0 -> 1129 bytes .../org/luaj/vm2/libs/jse/JseProcess.class | Bin 0 -> 2234 bytes .../org/luaj/vm2/libs/jse/JseStringLib.class | Bin 0 -> 630 bytes .../luaj/vm2/libs/jse/LuaScheduler$1.class | Bin 0 -> 516 bytes .../luaj/vm2/libs/jse/LuaScheduler$2.class | Bin 0 -> 1230 bytes .../vm2/libs/jse/LuaScheduler$Clock.class | Bin 0 -> 257 bytes .../libs/jse/LuaScheduler$ScheduledTask.class | Bin 0 -> 1338 bytes .../libs/jse/LuaScheduler$SpawnFunction.class | Bin 0 -> 1092 bytes .../libs/jse/LuaScheduler$WaitFunction.class | Bin 0 -> 1182 bytes .../libs/jse/LuaScheduler$YieldFunction.class | Bin 0 -> 971 bytes .../org/luaj/vm2/libs/jse/LuaScheduler.class | Bin 0 -> 4901 bytes .../org/luaj/vm2/libs/jse/LuaScheduler.java | 224 ++++++++++++++++++ .../luaj/vm2/libs/jse/LuaSchedulerTest.java | 69 ++++++ 90 files changed, 324 insertions(+) create mode 100644 core/src/main/java/org/luaj/vm2/LoadState$GlobalsUndumper.class create mode 100644 core/src/main/java/org/luaj/vm2/LoadState.class create mode 100644 core/src/main/java/org/luaj/vm2/compiler/DumpState.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Bit32Lib$Bit32Lib2.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Bit32Lib$Bit32LibV.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Bit32Lib.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Create.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$IsYieldable.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Resume.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Running.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Status.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Wrap.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Yield.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib$wrapper.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/CoroutineLib.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/OsLib$OsLibFunc.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/OsLib.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$ByteArrayOutput.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$FormatDesc.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$FormatOption.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$FormatState.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$GMatchAux.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$MatchState.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$OptionKind.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$_byte.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$_char.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$dump.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$find.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$format.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$gmatch.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$gsub.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$len.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$lower.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$match.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$pack.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$packsize.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$rep.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$reverse.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$sub.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$unpack.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib$upper.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/StringLib.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$concat.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$insert.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$move.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$pack.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$remove.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$sort.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib$unpack.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/TableLib.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$Decoded.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codepoint.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codes.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codes_iter.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$len.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$offset.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib$utf8_char.class create mode 100644 core/src/main/java/org/luaj/vm2/libs/Utf8Lib.class create mode 100644 examples/jse/SampleLuaScheduler.class create mode 100644 examples/jse/SampleLuaScheduler.java create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseBaseLib.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$FileImpl.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$StdinFile.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$StdoutFile.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$acos.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$asin.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$atan2.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$cosh.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$exp.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$log.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$pow.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$sinh.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$tanh.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseOsLib.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JsePlatform.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseProcess$CopyThread.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseProcess.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/JseStringLib.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$1.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$2.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$Clock.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$ScheduledTask.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$SpawnFunction.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$WaitFunction.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$YieldFunction.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.class create mode 100644 jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.java create mode 100644 jse/src/test/java/org/luaj/vm2/libs/jse/LuaSchedulerTest.java diff --git a/core/src/main/java/org/luaj/vm2/LoadState$GlobalsUndumper.class b/core/src/main/java/org/luaj/vm2/LoadState$GlobalsUndumper.class new file mode 100644 index 0000000000000000000000000000000000000000..6d898b56af0402230ff45645f77b716c6a80709c GIT binary patch literal 578 zcmZuuT}uK%6g}hDs`-_ged?2hRsDrGmGqO7?^{?t7k{ zWHH^cq-cBNo^Wn?&n6_^c<76Xwv==YY%t`O&O6HrvAW80`r^{^C8?#AW1q|rZ3|al zE0;bl(Uej+b(_1caB1EjuX_yn|GZL{gwnVRWdKD=$is6G-uxCmb zvUK}puot>%LnQF2C5l16c6c;{@$`#3LynLTDe}ZBP#(Z0w&pR4ZHie!lC=39I%({p H7>RuWD#wNc literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/LoadState.class b/core/src/main/java/org/luaj/vm2/LoadState.class new file mode 100644 index 0000000000000000000000000000000000000000..1a8a97fe4529043fc114cf1a9469b41cccfcdc13 GIT binary patch literal 7969 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 literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Bit32Lib$Bit32Lib2.class b/core/src/main/java/org/luaj/vm2/libs/Bit32Lib$Bit32Lib2.class new file mode 100644 index 0000000000000000000000000000000000000000..8eaccc8fbdc9a042759b78b04519eb4df7e8c3a7 GIT binary patch literal 852 zcmZ`%TTc@~6#k}^Zo5py8-gGgwd%GYi;Hg(qY{x#*1pgXADJ#gyJguWd%=I?gHP2M zH9q(Q{87d;qZ`_oPIAuq=FE34b8>$D{_zvQYiye+Vah<6V;U8PwK(b7VJ-&t#hGJ= zK{vHK@8g$AZ!eGhEQlk9%1#gk*>i>|t9e*M6*U7U#|$__7n zetaw$m}}w+W({2BxQ6Qtb7Kj-TpWrpCt}s_OaC;8GF_IUZeq^BEsl9CFf5Km>8^`v z42DS3esDsOOP1?4y)kZ4;hD;~$g!l-8DSD+t4A^G1(9s$XI+_eL^q^Amwge23~#Inp%dJbe#lTi z$b^6TR-FGUU>?MI;>*22RjU^h+Z>1sK@)GwG~16;nj3ecNG7|XNK=_I)C#79E&6AP z771F@27#eTw`H=7>~!lJ*e3!EEz;^4I3m4{4bqDGK`kKJe(MX2j|Au(X$_RgHb}Ne zc1ZR~I_qCi-yr#p8^cR{dj#JZ!K)+q-taRX3@JxRce4V6un!BzcnXOZIDv;A-l0#P h0Upz96%}hn9qMsYN7}lZ679hgx|{TiDq#l;e*krSwtD~o literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Bit32Lib$Bit32LibV.class b/core/src/main/java/org/luaj/vm2/libs/Bit32Lib$Bit32LibV.class new file mode 100644 index 0000000000000000000000000000000000000000..b2f264756314c3b9a24f5f68540f82d56fbf5955 GIT binary patch literal 952 zcmZ`&Yj4s}7=8}70vFLR4ckf=-yMn9Z(4R&-bX$x8WNq$0O zbn$~fU_Z+Eo=!~At;zeG_q_MZ>EW**KLKoFJ&6#)3L+d)#2B)U+pSmwv0EAL)hd>$ zd6l+sAG_VHfvx+dV>86oOxyI=8N&HOJApV73X&YBz!`G?yFW4gm0H8pa$}}VA)LPM z>=+D8O=1eu3QlvJ!3@K~$pIK5ny_~m%K65G6%{Dlu2(M{FP0hRIL^xO5zTgdDVXO- zOF>w3TzOyMxFGLQ%{RQjBExa<$Yo!eWN}%+6^^UOG0Yv8pCPV)F!Y{j`;;iJ7O1x@ zu5;W#K4{qwG|{{osHRZlC}D{~G4_2|=;XCXI`yA68UxW5*1)LCGRqtlRLR9P`j*gX zf*I*@qK{lpjbjD3sMV(0V3?mA(%4s?=&B2~#xZ6UrC`HV)hfa@}RLd87 z@44vzQ6yW=z}1Z{Q(C3Q`z`N^p`c+jX^_txkJ{p@Z5!@}B|OjY7!qU4HmX!#h#n#W zq!$Q=+jPs&$>@w0zk_`yhT#sOR0B=IyO<%AriUbzAwCwrLit1teeTgg8eoZNnMnHA zi5?Mc5_L)kNR0?)C7hFRUc%z26#0frrKp4$vDXezn2|kApINify7z> literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Bit32Lib.class b/core/src/main/java/org/luaj/vm2/libs/Bit32Lib.class new file mode 100644 index 0000000000000000000000000000000000000000..476373d1ca44c1cd895cef1d00a1fa964ea9312b GIT binary patch literal 3133 zcma)8+jA3D9R4;*yJ@5ihODG*W-STT zou*~lTO@d!n)_t>KW4a>xqmJfGm(}C9EntcR;tB_Qv)eGqGxVL8Lkf!6W*x z-j>m=bX&~MnO5451rmG--AehfP^_%1?Z+aLC$c#|8YEODY$MOTTg7QXY%Y-?8wES3 zC%LWhC1(s~^dtpEuvEq}1yL-Q5UQ+7K$%ub!j`6dB*en!((FyA|An4q~MR*4jC+ znk#^b+xIHig8L}j%v)y0DW`rvwh3pmddf(Nbag4%ft?a+=~{k&wx~VS)LjX0(cNTGWICw1?}p~GTo==^jtbm6pK$sUAMUKu!4Pv zN$@8R8_A=lMaO-V!?Oq;QP772jM1>Dk-di`gq!+jE8U*WW(?gTe*|#_Ytb)3YwE7( zldyYC!5T0;Ptc!3rjbcSle)!Th$f7vWu$f69CqsaDFr$bltYY81@8ZCJEsnuOfL z3QSQMRgQ)#jvD;OKXEi5g2XYRHSL%!qLi5k28G=*5yCkF({0%X{Ud{~E1NPTEa)*U z!@cbcA08z246AB)#SSh@cd4;wYjOi4p)O{#^!Mn4MS}G=AQvm9;|7H3ZO4sjfxEF*6mo%OnF4wumDUWs`;Da+j2f7KC4jCuL!UiKHSY68$;#q>e z1zxTP>GCnul1#vPA=MJ8wS?4HL|Ul@qZd)51^;*x@(0*8;UbUBiQLE>00k&`8bO>u zJx)TyGY&%)yoxtKj^>-?a8y&h!&Or6a*UJXIdYsP#~E@wU(T@r$BPj;K-Yx3%RHUF zd&4c0c;HPe)LO!mcxbfqv`4!1-=A7pbX@!w>Hb-AyhQx72;pT1p9S;}e3JAR8tBNv z63I$hi+ZbV@e$WEUIcWjP822Z3NI`wT_~yY&QditkE&P6bB?N5JA8(4ehyU)C6YwZ z^)>Ujeh#wl5`5k%?7v&?pS6m>2d9BY9N@xSz#kL%3W2W@_}Wb1C2RwCx(v`nRA9SMT%|rf zg(nY$xvW-`VyT6n3P#^TjcQCGeITTbc!JSzYGky`i>2&y;4>n9PO>jJ?!H7LzQR&` zjaB&8A!dWs2I`m*jos%`pC+;B$Zam4LmeTt>{5p#GpWfNNsWXHn|z@LpJ#kj3l|!E zqhlSRG9{}~L%{E-+vf(@!L#A0rB5aQBemkigsuWokuWq zrXEL5y)cE$CCH@7UN1qnX?}NLWOx>K$s8wMjPR<517(!YYOYprrk~l!v$yzJ3%PkcA_0-pxo_k1sY zz)&>Ik%CJMtz3tl@PjFt7+2B4Wd&C>T*Wnp%^YjVID;~gfx{(zs#f0eqf?xWu46;N zriL5XVpz)!B-s&{32naWPKEpS%^$<-hMAv7)Wte9vx!^j=GzQCBhOpt=Fx>v-yAV) zpKDoKD`S-g!I+HIZTd&UWbTOYfIE^9{i%qj!T323`CP;zq}@v{Ps4HE%U{)hxM5IV z1WD+MeJ`EdI2($+G-nKzp@`zgK@>A+Pkdj51IeREkZAcdHRw^+YLsZE>uK8PR-mVW zHq{-v-9|A(>YeW47qFL~pma{K`Y~<6E}dnnz$+pGD|CIY6JWrkGwtu9l=U~ip?TOj ohH{Lx?q^&-!Oai!`s|F?B-J6TKuveD+QMC`DzPe*tUc(z0II&>5&!@I literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$IsYieldable.class b/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$IsYieldable.class new file mode 100644 index 0000000000000000000000000000000000000000..86c0f53e417bb9470b996adbaa79f8dd6a2f1552 GIT binary patch literal 966 zcmaJ=&rcIU6#j;mE-g!G6%i2u1)(j-BI>Ees6>?5783{tZqs&LrVKMWyW6vWhyQ?A zO;Cvkj~@J+jPdP)hT6o#zW4U+_rCXYfBgFT4ZsuJ%V7X12Wc0B$S@Q;yvw~Pl*-#` zc0?--81h!UiKG<`qZ^S@3=5@N0#jW3XRvCy-<8D>vJP@ChT$?)jP*Sg@s8I$TJw}_ z2Hv`{hH`09lg;_fU{4Cw=1nCSGU0&?=2sbJYyS_c=8(szgMy19E)c#SzRT?+>u*H5 z6-uLt`@YmNe87+@m3Olk!zBmfE-qt&VY)y3e31-}uS}CG8q0WZWlvB2)hs4))xngD zYnWyj>mfV?5si(smfB~S=%uMeeCNOl-loQ8aoxcU7ju}WbUj3WVGOPe>Rjs6sHCa= z98G?~#Ue_SsmoO)wq7wzmG;Yh$sQY{1lLuDxl-@Pz718&yA0`d)2985)@W;u=%^{| z&gsSqbrBwz_6u(LkqCvQ31y`2nnOab{6kF};nol6XnLCZ<7ODy4teXa&R?IA=eA8` zTVg}Tw^2O5k(Kxo8HO4n2%niCqhLc zxg?^--DGBR_M9`5-TnA{dk1idJslB5HN*_eAWq1;s#WO*qFw3tPAXm7^ePRZE>!C( za4g?;9YXxfc5MHg5G@oNI%YAaK{t?qL0FxVvr?#*M@U#t((3q6N{S|7vv5 zs1FZML%#(BNh}gHFEB^?^M$4K+DhAWKxupq2+wauAA z*#2nX!>7{5gQhYKxg$Tt~P; Rc9?V6;jA+=jU0B7`2t_Sk?#Ni literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Running.class b/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Running.class new file mode 100644 index 0000000000000000000000000000000000000000..867358dd2446ab66d57ec0e6eba7d9b24b527d50 GIT binary patch literal 1012 zcmaJ=T~8B16g@+s+t#&gwE`+4N`OEHv29%k;%oqNu?bLYeLrEl%w2-oK0XCtuX}Mm=J8rML?s~H6 zyPMi*(o&)-o4GfkQc|@T;z3*bxiyBx>iLjL3TaGRaBO67iSozO8{9lIt?f|l2U08I zej=3&o-)Mpg+>xtT(K}?V-|A^3*+$91u|GIPdB+oEtwgu?8R}slEgJ!w=i$x1{N5y zBZR{wqA@2oog1a8hJ3ee1V5mQE#j7i+cuVvBe@Zxe`yT1^lMzIW7ObMdnxMrvW*qw zNvX%ZQ0#nQn9uJO#>Ad$?Fp_(ErFtqRg@T#J#M&Z`4MOs81$(G4mL2MA2F0Q`sgT4C(tM~&KzeW(aw8zN;iim(Iaz8s1xQBJxBm746 zC&|thk6<0)@)54qN~Q0(*~gte3Sa2xm?!$Yz$Yr=kN_LxPvAZt3~Uw;$)+eXL1X?1 F&R&Xsho)m13P1!1OAZTu#lC1*7g z!x%9zYN3EJLg{ZBA>Wp&sf5xIp~!L_(G|8Q{I=axq3gFc!Y7h`G}!sjNfyj gcO@P$;Fibhj%j6Hr!bF&1Q)T)Xfm^iMXX@z13?|1=l}o! literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Wrap.class b/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Wrap.class new file mode 100644 index 0000000000000000000000000000000000000000..56ec11e24a605a70c39998f659f6eb4474a94dcf GIT binary patch literal 1012 zcmaJ=U2hUW6g>l!g>?%{6>KfVYO&>`?PAp@Okapq6N)A_G&~N=2#d>Z-H-ZejQV>t zsbXy65Aa7B??S5rw%P35*|TTPoiq2&&tKnv0Cpvf-6uM)@-M%nLh7p$AcZs zG}^9KvmKjqS)y*V^M?*UVu*S@!_8M1R_mAZt1=QuN>CM~u)we~ODEMm-_kw9wn+G) zVHw^oL%2|E%D9HKgp7jgSY${~tgZXJ$xUA{%m=?uw}A8LAR)Fl45c z4tkE@oj9^sk&shx6RQll3D(R}Fi2g~ZgZ0kKQo!|@faubOSm04Ut_2g{?D02&s|lE zO$m3Xh?nmn|AxwOBpexeYy^o449ioANOEkCG^xH*e`josSdp6Dp_5J4sp<`X&=$@C zZ<~au`@-wlo#)))1K|mWyhn5%wA-}5zfLZ2$RNM4eMc92MxdPfx6QVL&Si)-gzG)A zU5`O|YFWamncQ_nkaXOK(wTo$sEZSHSD2~>eN3|uy(ttamT0zt@CZqk%B^o;hhHF- zhM4~xEJ2yZC`I5MHffxr>06b6Eo{>mtlve19w1l#imUslSZb9{Ae~@&bBJ4wQ{-D) vL#%%y##k;v`GEIyT|Xd=kMyO{cZl|RcNDYOp}0UujGFEqR4QN=_p$gJ|D^!( literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Yield.class b/core/src/main/java/org/luaj/vm2/libs/CoroutineLib$Yield.class new file mode 100644 index 0000000000000000000000000000000000000000..b8960e11f6c300beaad347d0de1afa966f1ce7e2 GIT binary patch literal 760 zcmaJI{g|{vcItEnCrLpNf0M%c zzz_Zaf0TIJU7@ug19xuDoO|vozkdJt3E(k0E^^2_*z!<7kx-w8^DxL#se%{LRE*Pv zP_g1&CaoA6JnhJG%M(cGpp)yJ+J8(UmgGcab!;<#lRgUVBO4!PdYnq5S^I(1GJQzM zw>zUU8o20S$HOIDCNww0SIZ+fu`*Gpcpy9Ll|4Ddxt^=I=HR-A8)y<5Yl3GaLgD>s zpZo1~6|Ob3al(UKi~9=`?)($5F~MGEMA+(^i6B%5Jk?<~i-dh0Mv9TzbCDjK$xBW% z6REJ=M^WmzdCPC^E0fu=IFt)weYNfV#i9wNp-9rFCP@k2Gp&W~t1w9fYZR7i!vXKQ z!haOiYKv{Nm*Z2%O|~umx`#Y_K()Jf^d0o(3!LsZod3)a;TGE>-@pglW?NvFb+~0T u*|r$+mwJHLJ%MwA3wvL2w$*UWI#*9sYu|U8o+TZI_+!hlyeABiT)v(}0!a)63|z%3!{Ug{5Je?> zvLU4{IQ5WP_cF-7X5cz*Flesd2%H9K4#x5fiwN-R1~#xsd;&8pPhf}HLQgpZc@)CL zZP!zlLzFaC(dIpF+T3ZGwJ=KH1WE>Oqs$N!N=bU4Vr~*QX6%15hLy3#)79V&^L6TA zMV`>>%vNa%j{HtTsAJx+DH6Awo;;<^bj{<<(?i}JT{b)@Ct)Sl-s7zd6cRK@15E2zoZU=FcGl~2)+z%UmKFztd<3?@akXjhOViSa0@m>j#Qw1e^*bQzQnwC%F$;z(-{933n)x0Q-ZiMgtJR-4J~b_rvcl9@1B* Lv2^1>A9TDA z#vfjVj$@cHGhBdI;zc-)&)Kw{rWW((yyyM?e*gUEj~4*$;Cl-hWDShi7{!>tr66pV zy+l4KKi#R6J+~Q^H+F-?u)UP{PV5H0z*yDw-T0xtZy zUZMnS=Lh9%x4ob#y+|Nmn5_>;F84VL<9G!V22R;Hjhw*LfKVDuEeL}oc70WMn*zpx z$#cgWG;rpas5WHNQx+zXHSsDlazZ6zW#Bb|EC26urk09Y$m6^&*&71Wg+bT<33EZ0 zX%bU5F5(i)7O7aESg1ddPi5JYe!ILLhpyjV7__rrJ*t~{Q{aRf{pc#MrDHcRBQQ54 z)Rky!U*5tr&YO6PxrQoAc4%OBc&=-ysD*;AQ<2pU6W?c`2CfTS9pZhhFKeNsJ-y<+1o?lCVn@?9@o zrH3X~StKuzE!EO{aNow~_(EXfAd<&Ukofc_R+v{UXmPP7>Rg3JveQ&yI@Dx1(xb)Y zBU5?c{$)e<61u=iHpAIom7P5YX4UcbE`YTjB%!00T#uogKD?UO^>A}$8!C!dl@5=M z|9be;=x%jX$cwS!`zow?GKv&0##n#vXz|cgliVLswq|eKNb1iHYnx623!)oKi9OS} z%-Uvn{4(qV3(Oz%wc(ouwJ^qajo1Z3K{z`19O74g1lIX#HgJpY2EOF0MgOAO2;on2 z#V(BBak7WWt>-w~DCN%ekl&((*Sok-%3bbZT4PsI>}n4Mip{0SwH`{ERZg+Dd#I50 zUW&Zm!@OqQNU@K4sA}vcv10C4sf)#8?sgZScJbNIIMe^<>Lm1;rC%6XCXKxUoBui! zU&SdjFopXlvIsX=hGk~5L8&I+4l~=uCZ6E|Ur=8Bjb{drm`Tdv0+ET)>~ClsEzlyX z`4yQNY~dkcj;fEiUGv=O60cE#7xWv_Zh=?qqV(hBSQ)R4H2MOp+#oFKhyaHf@>H{A@EDEK?7I_)1QrbwS1FckALB;o*|1RaPKU|91C4T43B$;HUS?lEF?t9MO z-`@M%d*8hAzn5PDuoZ6_@CdBVWRo4KygAx2k-n}YWe?>#`g6VZPzXNw4Fn_%1O+Y| zH7CrDylbaA`iDlXgqsssmbLcf?W`5gIPrWcC2&ooS0786PO^NgGg>XGLkRT-q(lRj z30!pv1nV`9ZFwgl5O7EA-1_$kgnKV>x-*1ETxOt2Vg;H7)>WSyG_yBllS-j$XB;Z+ zvK`yKQNSCC4k}QqBvxY$Uu4D;nPE#n#FY4Qi7T*Hz~`803Y#iC8gR3=lca5dcS~G} zbprlGDw7z~N_#@Q{T_+;V!ePdVW#p{|6YMBB0bT?ZuI8Ocs@O3WjlkoM!<7*B7_K{ z23jOq(I(Km$QwFhW|Pc7C^PPk<}?O@4Ut$ivdZw!gN>kFq5}+P(9Sv9FujY!qI;Ct z>m=Tf5AdCv8P4Q~Qgm6pqcZ{@lK3#Lr@*yUC@zmw`LWC7jm~IK5S!>oiyJ~0ZZL48 z#7EIB(6~U55*$XGEHYE{W@Rn<5YlFBG0-DP*=>ye0ui^EDa#o)vjX)=%Z)iX*K`s@ zwJK8fTGMszRHuQP$=QYLJ*H~~x~IBX3}BwNqgPRrDPhly|Lp;Fj_*iG}3mYG%NKQ8eJ ze3DF}ccmP}l&w1zq3#k`%cNB4i8-#7B#%NELc+kXgaw+c0;TOyH9Zq(s|E)C#>#0xk{mv-HDJ6&2bL0F)3EKz!ABz}Mwwcb*Zwabw+@MD1$I*WFuBi6rlf5IA9Q!|7McwOQrN=Jx! z?6Yz?Gij;f_?g5T_&J@PD2*r8>b6!7h*BR}41JEYOOVfr1v-}KS@=%rj8#W0I>>Bq z(Gz@mukBc+*;;OSjeV9ok{P~*Ak*YwmV+l?I}@2P=BRy%nK=NL#MLn1nu)PKbG)oP zG{7F1u(sJM<01V4)2^b(%*CyodvhkoVv{k)v9eoIW-e#ZdfohY4%RV@jqFsSu~B^+ z@h=Z^wgSK4{!2dH053nwfN)Fe?jpQ*%%ZO4G?urloyE$Qjk5@!QkU^7{%+C-AEc6p zsNi9&!4!T?d4m_YPuVE_2>b@WS{RM11jC!?SJB@mEL=^DB9c@h? zDWLN(&K7agCV$v}2HST>n-LqEI*pwL#EZCXQy?5@`dHZSD_~C%pDMuQb299wsy)8D z<|TI6AFMnv7WOyRR|?V;$Vx$mf`&@LJ_?LVL5_kzr68|>hiUolB0jB=oK%uFLcaIV z5iFbYYZ|_20rwU0dHueX*dI{7KTyC|R9w`#Rv#mC^Dd4dg9GSm!tbnKc z+FnPfjhdzrn8CLz-+gxm&o4YH{k(8$L8$b%`kQ98nbWlu@yr<}Vh&UR=M-oKqL0?v z3V4mrMf~(6842w080-K$#YVM@cG0KzxERuVLX7KupSWM|2gFgm9}~~({e(EL_Y2~0 zdVfp&OYd)cJZkrNJpr|o?TW&WV7>m`%_+7MkFk{>LW*N6kHfeJM>sj3z(J0yr*M=_ z`xx&%i9c{A{gsk`;%Q;v8LidGJtc1(*nj*A3`#y*@NZ(k4xa7s*JMjXQ|`CAYt zP$Y+65*Khryos~oEu0f?<5iEB$k-4)LA-|F5s{5m|3!D`B32vd+U~uG^WJy(kAu%Z z$UuZLFL<8jyHxd5ioGSV_umLKH#C+MY&J0PA7FX&MO?`%<;TVlzj-gP+<#9M9=i2M Py$k$_yK3ZW{TcW_tC^i& literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/OsLib.class b/core/src/main/java/org/luaj/vm2/libs/OsLib.class new file mode 100644 index 0000000000000000000000000000000000000000..473be4fc1bb4a29b2643367987766f0545461877 GIT binary patch literal 8308 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 literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$ByteArrayOutput.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$ByteArrayOutput.class new file mode 100644 index 0000000000000000000000000000000000000000..0a2a89f1939017c8759d521338942aa99cfdcf8d GIT binary patch literal 1056 zcmaJDGh zxN)J04v89mfD27D(ZolhF>&F_wK3|sWgNrAxam3f^nBm>&g0q7$2$P7;G7BxvI4H5 z1Dy=%HEY8%YL>fdELGO*YRJ%e!Ev4N5`(N~%L)<gkf-xo?>L}s-b3mYqMs% zakHk1Aso~&hH-{O)vIrrZs?J#n}0}CI4lYsAq7-uxAdfjqoM{6oLjcgqHD+^$B+uW zR;xm4c6pA>ythKady0;0FGlMX+rMsAY7|MvEeQZaMlb$b@NBkBQtQ?VLsu!Zsy7#` zdK0gfyvVQGR~R=ivMWy^f>5 ziJYXkU{2;9Ld`UgZil=?g1@2!T0s+{gU1j}K=N{ar-6O#sMkpGH!*6ei8@bmWr_^u z8`%Fev5=Pwa)F?uxk3Yn{^I+H9sDg6{tjvW9s~RXp^TPblWNC2^2L$N9rOwjGU>i8 zvAe&%2_A{YA@mBKkHqr{J!A*?XBs0l3h4(V_MH+SuBa(*oUE8&Lhv;(agTf!6Nwpv of1x*>82Mt}ZP~}}w`G4Ni6<#0VH&4mJA*T1Rl=t*gR>a^4T1K`Q2+n{ literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$FormatDesc.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$FormatDesc.class new file mode 100644 index 0000000000000000000000000000000000000000..543d2f52657cfaa2216462e655b983f8c1ce4b57 GIT binary patch literal 3605 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 D$<;gO literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$_byte.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$_byte.class new file mode 100644 index 0000000000000000000000000000000000000000..62bca75bfa794cb1c96bebd6373c9d97bf5dfb27 GIT binary patch literal 1192 zcmaJ=T~8BH5Iq;Rd)u;rA`3-WDT3Nkq=-_LA_@dzlL8Ml7~=!ombEM_yJUCU#0TRS zejxf2d{Gi#)fglu`UCtM{tXppTO_G~`!GBA&YZbt&Yk=H_m^(~CNUmF4Qe?A2|kDn zVaqPWjiR~~FRcv54L#??=Tv*lE=(28ysKL#gE*p_x;x5H8;Q;Z;YWZYD4`A#Lvt0J zkg8p980zwiT7KDaZQU#|v`13WbX8)ysAkH+WB?6lOEI~#Kv9nfP-E}h(*#%YDtY7s#%EdO0!?HN@7&;ERnw05k1T$OO|mKUZoJR4^m4$EAWxw` z^LBbagMA=};UZZt4BR7o375%IDytz_fOgko!WQ^+-zU_M#(d--Q?}8X5MrXdxA4ir zYluQZkbTM~L?uBRvTqaoBRby8v{(?b3Cfqntn7P>K-0->^xTxiuZRr$YZF}NviJra zZGM^eQ5Me%3tQ;jMt^3Fvv)f`+WgxXd{1O*%5+E3NdA4I{eYhJL$u-%day=w^aMkA zifed=6rLl4b=<-WWU+xIyrc#<@EET!Oz3WiI|L9p6b?T}17oCtKll?N_6q^Vk?ce* Xu9OcQ#ntjZM5TcsDWuT59Yg33gVz*y literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$_char.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$_char.class new file mode 100644 index 0000000000000000000000000000000000000000..db4bb12f0e4f8720e543714bf047789a7d225c50 GIT binary patch literal 1256 zcmaJ>TTc@~6#fRbyQM60k>w&6D;8}jw1|RAfkYaSCIufrcp%11w`*Ct>^8eo65ja( zzL{veV2rQ&f`k} z!EHfg8bPyLe1|73ZWod(!ZqzeDuga{E9gV)`tRDoGD7kQ#@a+kuBD8qFf znvO;@XDMUZI+AReuW_qvP^f+kC>T_68DWO5)2M17hR{w0{>USF4E@oK`Ll#I@sxks z$r}uT;_uBSYJ~;|NcKK$H6S zF&Wna2WXj+HTeaaHMyPPE!wnzCLf_4IE1!7rb(LoY;{j!dja<0`1{x)`aTk0gCB8- z?mO^`UYFNs!W(GhKY)GQrnqyoet`EFCd2@wV|o>21zie)Ou;oqQh(B2R)5gGgs4v$ h!-#L=7$X~`6vpXGV2V~96tW9(qVB;ROk)PUzX7s9L52VT literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$dump.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$dump.class new file mode 100644 index 0000000000000000000000000000000000000000..bb3f5b56f3825d5cc3d7370cb7bde2362923a176 GIT binary patch literal 1142 zcmZ`&+foxj5IqA43(E#jZs8I^McEKwxp*b0kO*a}0$7D&2~U$S#)ZvpYIZjzAK?FB z6$J>E<+C59_9i4{g1&UmbkCgbb7uPIuZ!;h){s`wf>s3~4Pmq~j61SmSUx{6%Ebl4 zGIOr6!{w?htowG}GaZ|uZP~OR%O9^X;Xjt&K?hE8Y!PyDCO7svxG} z7RDIH8p`FJV#&0GG+z3}(zeGv!4TS~HN%4bzk=Bsv%d)?cjK9W)NKuSaF?OebLzwi zQ;+YZRNTXT1(O^oo*4n4M zCLqL3kU&b$Nlv_380y`xdtg#ubc;c`PVc)bIcg|M`Wg2eW2wqAE^U zNa;w1gnk|Edbc|PpCqY}cJ`@_JtM9I9&+($-SCAsF MQiXY}(D+3E05*gje*gdg literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$find.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$find.class new file mode 100644 index 0000000000000000000000000000000000000000..29c2780749716136a6e1d6c25f4374f5a087c99e GIT binary patch literal 498 zcmZ`$O-lnY5Pj*^-MVh;w-!Y4;GtFMidRLDVo@l)RC@4IvTa;aw^>Mbi$6mFb7JQT+zD C;d2%M literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$format.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$format.class new file mode 100644 index 0000000000000000000000000000000000000000..ddb1b99d950fe75f1cdc2a16057ea57048d793e9 GIT binary patch literal 2841 zcmbVN-A^1<6#t!Nm)RW#SU$F8p|ot}WBIU)MN!#WEl`9Cw3Z5Dt9IBOmVsqvJ3EW5 zpS9v2V3Q`k7;6(lqAzM%TH8bu6JPYj#7AHJ3mU75hNc$J-B~_%ORMqW&b{}{Ilucm zANSlJ?q2@}z(Kq(!9}Putwbc5QD-9y^LryneJULpvn}074C_-e-0(;!Rv^JksF+n3 z)JVqGlaa$yvs%nf6Ur>@R7SV7QPUXBB$I^Z@NiZwsTzr#TD0|EkqQAXJP z02YnYrZunHgkpO}Pd9cF>W3eo9+lxog@j54Rj4L3+^ajTS_iDeK*osKx@j=*KHbpm z{e+@$>$r?<*e;<)K@hcs>O6C{RILR2T@stoVsq(iq&SG-q1Jp(!x_~HBh%S|dI>uf z>_P)!TOQuJ8k0zBM#7%Sk{FV(n^2Xf+MAi4)+`wzGz!m}2yQ-=>Fz*_f-qVM66dk^ zjIBAphP-GekSt6dRg)=Cl{<<#f# z%`c_Kfou}{wRB8I7rKQDj}s1u^TU>J6wUvc3x0ugJ%mw?hL5qI6p`*>&xgcrpMs~v zPL7$zf@Y;T;UdFND|kkP%$v=lZrFlVuYx}GbClL9E?7V>7m{A5N(K}>i$Q`fi;*;q zgcJBf0_%{#dX8`(h(ivJHmx&+4>xBdr|6tKs2cI4mTnw2&ACh} zy6GjzC3ur0&+yopl(vQX@lE>9E0p)VtR38j*x| z2~GDnxD{^+?-6!BSd|m)IEhYv-27bguS(xODmXrAmY{+z*pW*&kK+oO(06OX+?cV*i$IwqD@e+;?<#UCuA zlh@x0jMc9h!vXL&T|@=L1>OE8N8_VK58Xi5WZPx<+F9=^9_#T2q@edQo;cZ^oui-e z0qmE`pMyM3^SZ*>uh0BX{QqBrqw`Y6VLPydbL)bG%NSaMRj{90-w!Y2$P$j`%mddjwuJsHRG`NvVmRTth?<~} z)9a6ag0i4ntY4Z~f+8@)=H(?+3eD*G>v$EohSggxiNk3Bq{X!wSNxNx<8eJ}Gc6li5s-||=cIw0_ zW;6=_D%YS_f-GU1gdHRy#P2qkLr0;Q`9LlS-65BRE`ND>dFdTAvCVCGUAIxT!oIp; pWqnS=&d!7k&t3*R&0_&?^RAY!o_I6+_=0xv{0_^`;v5zc{0BKfu{!_& literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$gmatch.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$gmatch.class new file mode 100644 index 0000000000000000000000000000000000000000..64ab194ecfc48eb6d5cdc1425abfc7d67a67503b GIT binary patch literal 681 zcmaJ<+e*Vg5IvLDM$@#_dbeJRD703s_~L^ihF7lG#^qjcts#ZsQ1%F+QixvoRe3v_{VDTTzF1c= zN?80)fYlBK5aRpJg-OU%rES)NcEfbfM5D!-gtR+OlY{j?RQ>AyTP#64bpqEg4`p~w zy5IBqmFNh7rl)mUDy0c;@4vkzBjdHUe_ zaWu!C!pzDu=#c}$INK10a>I54lWfDITTF|ypDe|npq`Wl*w$W=IxnrRJtOnbC#Ml( k@+}g|9dzZMcTz>% literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$gsub.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$gsub.class new file mode 100644 index 0000000000000000000000000000000000000000..7d3a4c0bfeb694de29c924c83d9b54b503785650 GIT binary patch literal 1838 zcmaJ?&2Jk;6#vbv?X}lyx1`;YP2;$L2~Hj2wt#`84QWD5wBcvjX2*Z(@Tgg`&=H>kA@`-%aF4glhrhD406dO+2vuh4R+TLw_u3aF$>6ApoG545wd$59b{tv zRk2)Z#v&$EOk#?1Uu_;2VKlxwr6%F6d~7vI8^G2!wd7cBp31s!!gj2w#&XGW&zq$x z?L=&6wYEfyfi|Qq+k3i9Q0tbLCe4+=lZ;mxw3c=!+Jaaal<8W-En7ufASSmd8n|q( znneASRrk&i{W31lrO@J|^~f-&hT~Z7SkT94Sn<%5?X>^Lq3r>>(%kM(QuD{7VFv5SwS^fuR`JcGJ|H4K7H|F_2u=#Dg!~ey* z{0`pZ|KTdXi%%rrQ;FdVNy67s2;WFyd?!UPO=uq=wt-WK$|%ZWOtR+xJk?-?ZJ-B< z-6GOS%g8X&*`PS@tHFih1|i*7i=H`hcLzD9-G)rh9%ce6X7O4u&*62NJBXYN=I{o+ K6GfUYqVsLkfzDw2mEQ7}}mcHDttR#$tYHNXH6{2Upzq(_!S= zq2sv>nJdS2!fOVl)17F@VpoNxBL|(~@DJUL_=L+yFy!oKVZQ{S@3>QjTBmESCytZ9 zzJ@#sDvCPxQDQjSo<_B$pjN6|gp!JV6$cEhKkQ_fRTZ%6gA1S7&&_fd!vB1MmGM2QY3qf3fVZdO+F@P&zDe_ c*n3^eE_EAcDApkPxB*DJlmLcQ=@l;yO~6@>_5L#DNdsqY%#l zA%$Mv*w3Ev%=72h`v-tC)NB+`v`}(T#t>mWj5@ALMc3{34qO$qWA{?alc>{7wVwo` zCJY?~I!KNQ#d_n$#xO=K*bXXi2(vl5mx>#qQb}<9d+9%P<0J}nhcHubcwNyKt`fTA zUS-`w8)F!^FyUa*NKO2|K&T|47e319RK(K8G-fQ!I+(*eVI%i&=KDw13))-CkO)@a zn7OjT^@_u-)CPoH34 zg=yr=W?*E-{;ckq(1hWZjFa;)PAsewmUG7P*?6=UTJuPhh+`QO%2`#k*3 O#Rj9z)M-?)iG^>K9gy(= literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$match.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$match.class new file mode 100644 index 0000000000000000000000000000000000000000..ea52371b933fc79999771c9518534e41248c2fc3 GIT binary patch literal 500 zcmZ`$O-sW-5Pj3MNsVd!)`BPs9$J+~yefheMWOUk>A_3cw6ShYH?W%&f0mvU5B>mu zlsM_3P_=t_GrXNQZ+7vMX=AMlF0?Zs@6I#idb;qdRT-<*#0YTCt9jOQw9XjB)a<`Rlh6JXM$gC&Xlu} z&;xUJU;CeTP$ulpNG1bL9S%k!={*wijkq5YmYPz9t#lNG`c4E9GqzOY_=%JH9P2sG z1h*Zhx))x{tWA09SRab9AQW4nNp513@EdQH3UwnA#)O7Yn2dxIlz7kC$&fb<9*?sf zj+8NnZ=hFB2+NGwHLPRC6|6F5rMoQ6#P*T(4(H`pZ5mTa0yM$Jtyb9AJ6-| z?|DyueEiL~06Or#4`nEq;F94+1tDmd$w(@rj7BELn<6P~*owpybHADF%;<4jGju}5 z9!=Nm*9hgIa7==Su=Q!BKHJpvWVbfFsnamW6}!(?Y}E%JDkaD=s<4ExvPg~HC}z?k zRK`ct_?YDwAgl{T!`(%K-5Disy~PI!%LMS{Lhk>h1jrSHx*{V^Wb+`~rfhY;X)05P zGj=*-``|~pu)a#hYOEnhBZ}2yn5q->pg378V;$BLT)KMBCe(*YP?k8zvv4>qC}iAz zydYx(f~;?8=ksQx!t9GOUcx5AG9{%Y^>J0Vk0^-*Q%PtHMT+0p&=Z=% z)k>VLR_vG1CgT9wxlk6t!P=9iW~))%R+Fkp*s*xDC1umn6&)N5$ArU98L#6Yp~`{U zuUni=mDzKLx)`qrrc1^lbU!KggpnCeaUFp#UU2oC#@ZcYF&vk0LdJkd>8c_s=k6u92veC%sk#S4gqr+K4vKWCX3!o{ z^k7n(Q1zgwd>>BXw1hJ<-h}eZ_A`G;(@K1d;NdQznx?_osplIps!S-6l%gjig{Dw) z4;fWVNo7>$(#2&YM6+-^MEDTHTQZUu;iBW7C$gE(K-7a#LZE;=Zs@k6=~nQ(Y8sZf zS1B3e;$C?jJ3>!_!3w2(bO@XtoF%Nz=vF43HcVSh1Vtc0!|4S+=&(c!OBD~mf+vF!&PAN>%`9HrmwXGGhf8qFjpr0UYvL!q z{IG#=kykZ5lh~=90e#I2!X^HSW6%-)zJqu9%c5m>c-PCjUp#;`Q0L0QJA8jssNzU1*c%Z3_+<_@-yEn2T{s0+BJU6jKvN1*;bT3oZ(m!-0jlUa1kNt6o- z{5B^M{ZQ!5q9===<~Q?uZ)7p^#D{mcR4wJu?-;s=s({Ot@DI-7#x**F8>HY44dX5)@I9&cfs*){M(_)b;tv|bpEQoYNGCTLw3No zYNAQnN9QO?Q`E=n0lGkE=prTP5+&&}OJ1Q5=qi0g)ATW2r%&l7-J@H$%!qel`D3h+ zAW87kBhg=Lsj{+qFOQmW-@ hm-zX34{Nz^wBkC?wLIV8c^l6+Ti5d4XvHn8`41DPk01a5 literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$packsize.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$packsize.class new file mode 100644 index 0000000000000000000000000000000000000000..37cdf81fe2e85c74d6bc725d1cee85f3efae9f14 GIT binary patch literal 1346 zcmaJ>Sx*yD6#fnrr<7q41lcNxEG-m@xKpek6c{N>D3ZX7T*^=ehAEku6623B?h)VB z#3wZbj3gRg{Yl2{%mB)weYxk}oO8ajeCM98KR`M-3XdCVpP3rW7)e`88-x=*nxWZILT(^9Ex}7@IqsCOP0dKfwfV-uw7Dwm zge`2<2OkO~$TA91L?}Px7SD)jp=VS=L2^k=u2?Ptp*j$ZA2r-XkN6;=#7X=lp(gM@ ztKhU_S0>{W$_dhvutw7+hvD>R9nEPOm8c?k4E3%}2px^*HsNSJ<7-Yc+ze`D)WT0F z5xSN#R#n5E5DN=jJ)t9@9L_2mR#3@D9qJ{VmC=B6gutP)v$%5ZE1I#u9$BO9<~+id zk$g0vSwf49fD@@XTcp2kOwDX;a{NwWYEl^+axhwDv^fBBLYa*X>?tI)|AX9^X{Jpt z!i0)-VQOMtSKD>fNZCvEi|&Z{5W;zf%`Wy1#Fxdo2w4 zWme}^bIM7b6-lA%gw7*9-yh@1aZq=>8M2T+Lvm$QtnDHB66uVYR0lN&w&>5KbvPX$ zc*j)B9!^`fgh3wjEafo`ieac`zb-6GwV15~e~*>BuU$F`zJt7a_dA15Zf6d!2Dm5h z1Q4$C%g>Tn=Cy8v-tmPH<RZ{T4Tf!jNfX4hAbP(2r|@@(SFdo;d8(cU%q3WYle&6IX*qw_P{ZQ{aQ^!2YV{tvkFmVtBJ z(5<{pKo20(L*6Ej_;Wu-4Lv~YuW6g`hO%){xlRV)ZXrPgYPf?&G9Sdb`zzIy5&XD;a@t3%F z<5o9ljOh>Xhxj90SnrG<2}XU3dvET$=e%?8yPv;(JO}Uubp;7<0ZBy?GQ)=Jjp}x2 zoYrS&yLH)=z7#Z8buZBxWS;z3_CQR`LW8P*6;jNroaY6 zX+c0ds~=r-t-+ROPD%E@`@&>c?OKj`9G(qK@2N4cDI;6X%$-nB(-tT3b7ajwUjCJ4 zSndVJaB^f!V(T6fkU(jjqA(lf8v4vQgm|IBj=^_*T_|QUdqTBD!UfB=MDMI#h1MF0fo23 zl8E2gq-_Cz0GaPW2WqWWa zrO@&M(Me8wBHVL&z6!XG?-SPSOHWOAvUz#<`8{E>8$0ev+j)_8;#eSL4jPibJ4ixT z?0Bku{x{3LV`u0Pavc%HPX>Sp-^=)H6Zv(l&>vPIo` zgHl;5W><^)2sd8uo#}Lz9lsraD{CJy{Z7_q((bdW4|@uowP3I|3akT*?V=`iojt=X qnJIC{m)pu0Du$VTxgS)9Np(fRkpj9kk8Ks|BC9DJh literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib$sub.class b/core/src/main/java/org/luaj/vm2/libs/StringLib$sub.class new file mode 100644 index 0000000000000000000000000000000000000000..51342ef56f6a3b4def32b9cb4c9a9921aa9cd0cd GIT binary patch literal 887 zcmaJAFynx)k4u0TWe7$2yJb6!89>VQ4A0xq=`>v7dEi4?2`T92dRm# z)dw^__yhb=>g?K@V5~1Q_s-mN=FHsr{^RR60B1N>5CfMXs1PAB>^SbQY6aT3I-ed@ zEmQZZ=bHP}9X0~H@0*UzAU!c{(?4P0h2pt_I1(}x6-lTJ>q~G#YVOcuNcKlYf8zPB zX%87T3(aC{>0v9-x>2&OAca*KH&m?QCPU`m&q#!2*h7C5iD-r*)>WjDVTebiOxtG= zs1D__xGm$3icM@$?Ipsfzu%QxrcU6Q=7qT?5zE=_qyAA)$BZD$X>@wO`bXfgJHF0 z+D0ds>W16Xbc-UAY0sSr9V&%o^yRPA{}Ou@W?1R^T7S~kW|vG#*9qLd(J({W)Sq!x z#@bw?nRN`$f9`lRGqq{khI?vho@danbLs>K)On0n4UwfC1H(Sua^x9#asM;eM>;T+ z$cAa~H)P9rL^gc-0i5E%i;}Q_+%7M$a#9i(xRv{YjhaxBVhiM=vzQiyw~&OIkQQ_A zA?0cmNsI50DpO{VCeY5sC+uAiTP&(qp}hsyAaNZ@K0t;W*yTeM_y{F#;*gJV%q`UU u6bb%p6#gFB-PtU|O@IJ_4RY*~gaBetf*N*eb4fnco!FJV&mMK!jm>5)pUetd;tHY;|Gt=Os$KJ=9!%jk#xgrRB6*o*GVa%GIfD8jIwE%7o_*&J0ldJdWwKZ<*2kp4raH*CwN;7%T%L^EnysC zNTbrK6vu2WT3lwD%GOHFvVF)$mWXA7jER^;kTxpTGQ(6IYjt8KC}T1T2rgaS!oC*< zGB8Oun!>!ABQ4q5vBw}>B#k_D;UbgG)$Lpw~QIM zhY;u`_B1!x_a;pb^NL=rC4FAXlBL<0iF+m7Cu5edG_f~Joy(X%bqiNiud7+PB2=|V zcspCh{b0JfENvS@N>2Lb$tc5of^4drVw$PW-)gJOy}S(XI=RMVVIIvyxy-wUnIah` z%~4U?;b~0thrt_IgC7nWvJkIeL{P=5vz|f485u^7khl83=NI!lohM* zC@rH!1xROOXTF84sElTCBE1`!k9DeP2$=7*fQyNQ7Q&!TTvPD7xzb`sdwaVChN4?4 z7n-JFdeKT4ne@!hg(hNe^oI@A^6Q4}-=J}gu&_mxx~&U$)6X-2A2=S8W6=LzG|mSj}0Bo15v z78qeB%YaHvSCfodsW|lUXnL#B#8Xo;vfE+f4yFnH_*`pfTBfw5H2G?bnAxCKXo8jf zZ=V8F1SgnBRjOq#HY{d=9MW~wTo6?(OVpjdT~0}!OnxPc8dJS%b@L>n!Bp(!lUqEZ z=d&Axef*ZkBZ)tg+dv=i3*iOs#Wd&;_b=il?pZXeg#Y?@ebxm?YYJR(WVd0!vH~~1 zR26vmdvH-4!x9)>;>vNkj=y7hP!5Y3gZ}mkdE>Ym?h=73v=ALQXGZr zOWZ}`^&F<2MaeNpuH*2E&(Z|uI=|ysa8fw8jyv&qxlK>Cxjd@e_HaAJ?OSetvuxj_ z%2L*ToQiTiDHElI=TPBFU`Ya1ajab3RZ2>iO5nlnLb&b-2`vdcv@e168CvjZ7lDQz z<_|mb9d_f0WGdLnt|rh_;!O&AJ4C!L5et;Ak+6?5y&bwr+{3&>vFX4e^t%9S&EQxY zHeX`tVcy*WNdbZL!7ita@{FT1DZfp~AHTIW*OTLRtxw=F;aRRH*AvH%Pf#7luFH5j zfoIP!#C;s1#8Jdhzm0x$7(?g?-&x*4fR6Iz;~1vVam=C*x!r zr!T3IzM?JkHEpMFXcv7)`{{dni>}hU^aGuyA6e5+bcKHA{ula{extwW54ui&(m!+! zFLMMc2Hrw}1WCehy2)2e3Hj|PfLFp^3BJ^X_$%?fppTGhhwBd0d?_AIG+Ul9-apnq z=06mc@wV@(oozt{LCIgQ8Hd7R1P8}ml;R?WjfjQAf` CF!ngAl zmq@mKxo76ioHOU#`TG9&1aOSHjtsIIat87kAyhrTW4e*(n!Sfz({_((!TEoq3@^;q10o&|5mr-(1g)*8HA@^5NfCrmQu#j*?6>PO7Tcs5d<pR#0QqnL3RM)-eAA%qo$# literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/StringLib.class b/core/src/main/java/org/luaj/vm2/libs/StringLib.class new file mode 100644 index 0000000000000000000000000000000000000000..9beb840a30d7583b6748a04261c2a92f49b4e6f3 GIT binary patch literal 9306 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 SA=wIfU!vjFzz)8_m45(6Tb?EW literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/TableLib$move.class b/core/src/main/java/org/luaj/vm2/libs/TableLib$move.class new file mode 100644 index 0000000000000000000000000000000000000000..2fef909f9e2cf3b8822f2dac7931dd79bd72df8d GIT binary patch literal 1086 zcmZ`%OHUI~7(KV0&J1-bf{a?AQhC|Z$^dE?Vlak4Y*JW=Y2w0!X_?f4c81JM8(pgS zj+&^6iI0Vk$W}Kc(M0$D4&5bJlxvM4EcalV`TJhNS{{Qy8CmY@R&WqK zZ1aQ+^SyFwX$xNv?b3mt*$}05 z(CeF&P=~aT3e^#rNr{9RAtiAWO3CRuy3UBI5POR%;fk=FkyPn5B443i?moPQ=yx>~ z`+$rZQib=>qGI|ZlBy)EWMox-g}$gr9(g$(BdDXlj=>GNvDx^wiIE@=QKfh7gV<){ zXH@(|0|tBw^XQ`cEuyjk1-EJW@1PfVF^GFa=RPLz0H^T~=kN#@@fcU|1UA`gc#4~N zhUa8o;sw%FB>}NPfwF{AiDQg0#u3=2t^b4mz%~NxH;y8R6aEC_(0n_ADY9XbaFjZp Gg!~ULpZkgc literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/TableLib$pack.class b/core/src/main/java/org/luaj/vm2/libs/TableLib$pack.class new file mode 100644 index 0000000000000000000000000000000000000000..fd95d29051046f05ea09c62c7557c6655a8da566 GIT binary patch literal 635 zcmZ`$TQ9^=5dLO&X;oR){m!~%U83TZNJNNDiU+dqXV=jj>Qs8!2!0eVhzCEwj}p_$ zKCDZc%yiCtGxN=SAD?gU0QRwDA&0zyf{hMz5@v(YbNobHI?d}%$5-{psflnm^bQi; zh*h8oo!d&Qc!!X$EY~cU=rUm0=!Q+0`CWb{>b`VUec?tlt_Vh)#wQnqjf&fb<~btt zqOIz3`@5TntjCs#UIJ+gedsq(vN3=`!r)&`2nEf}GLBUX!x%9zYGVxJgrT+q?p_mq zA{iRVm@r&%FGW*0zR;d?8iz`I%&5i<_kwdq6#92;?(*-3;o!q zwI{(k4U(`S50uZ7_Bt z%H&vMWR}GRVS=M6_QbwpO;Zy=5Pbt1HiqRxARq|3C`!Ut1QnG4RZ2;bs(=S5ICycAjA6+#liHod!e8RS z60!IJdO?eWKfoVF*}Dm4BIsdzX18B=zt=spzs}Eo0(gn#1X|E)!mtoS8-uO9a>fn# zUgltbF5@}{KeNrf=U#a=kVWk%$H z9jO^&sa!6d>mi9ZEDU0ZVPKzE#EOzdu6G>0OFLh4sfk>Fh|TZu1Dg=g2Z~ z8ODf-TNZA^W*BYa5;Z2`oOcRip4e9hq%2Nqh36@cVJeloobs~lZSDp&*>^15#TZGr zNOonLYIp`?MU|*vSKg6gBiJtpFCs(XjyzBma?PZgdt9GI_Ad?>pBXwfH7{1yd9|J? zv8e*DC{~?tW*rw=XTm;_(hcG3HRWp)Gc?hE_lBYSg;Ltr9YIf{<;DGs<0=DntFYS zK3aSPo8M3(M2s1Ci2 z(8_3yO?(IYMjM9vWJ5Rbk?c59WJBnC81!=hmL`o;nCnxg=vbbNjhv!)-bflFN3fHI zag27_8*fg~6N@%y7yy3Y=FU`-!bZPRf|jVn5ETJFkv*cH#%J{6n2LSDJWh}%Pdi%9 tF>a!hu}-Qy5d}_SDq5$Jp*2p-=ID8Vr}WlCiH9*w_a}~L$YKeDzX59gLL&eG literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/TableLib$sort.class b/core/src/main/java/org/luaj/vm2/libs/TableLib$sort.class new file mode 100644 index 0000000000000000000000000000000000000000..142cd8d60ad62b69d68514fbddbe8e64490dc105 GIT binary patch literal 817 zcmZ`%%Wl&^6g}fOoy0h_gqF5xLIM;>8i;{y5fZ9e5y`lVpe)#pT@$8pZRAJ(g)cw| zkf4hovET#vDByZZkX*{Zla7OhE5butRNG|*6iew z6-YO+#v*6Z<-1> z@EIE2Vb3na*_n8e`*!ncmrX2Vg`q5yPzDS-g}KM?dE58BFZ@EDL literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/TableLib$unpack.class b/core/src/main/java/org/luaj/vm2/libs/TableLib$unpack.class new file mode 100644 index 0000000000000000000000000000000000000000..5e0e34532f1f6aef0898b9d3db5181724892abfd GIT binary patch literal 793 zcmZ`%O>fgc5PjP?aWGB`w1p4|q_j|{4l(pvRDmigETz2^&PGZFZ=?o zAcTuJ@B{cw2r;{=4~eJ`GwXeC-oBaL-+zDp0`L~Q7M4&kVc4jm#?XnAu@~k1+?!qO zdXX5V-jFA6lJQ|KgG|Jdq4r8hk?k{7obJ#<9XCu^Hg3XZSeq-SN}h~U1}iuVgGt6m zQOMA8{O(|mH^}*Wh3zS|Wg9EFMe0;~4SC3;T#@f!)x?^Ob=+lGUzF4=hN?)Vh_u@e z7Mi$kqGjU&9{#69yPyuEP>!=RUE?cHk8C_fhk$sR37L_o|2= zcD&f%)g1OrJY(3H^QkASj~$57R;ghe#HTc=m4T4qaegrhlhT=xvv@*K-P5FgO$y41A;5#STS9{YYg7W!E(dm`84{K%>Cz zPq2Cg?tO+)+3&ek!rE@FO|ihn7osm|!DUov{hfp_(ZUb7^hYoJ51J;LujxY3)7+IpBW-#*Y(M8t(0rbzZvH$=8 literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/TableLib.class b/core/src/main/java/org/luaj/vm2/libs/TableLib.class new file mode 100644 index 0000000000000000000000000000000000000000..d2b348a5cd4b975a8d1941d1d8c9ddb48e9a98c2 GIT binary patch literal 1338 zcmaJ>?M@Rx6g@+ME!#z~QV|r&N7WYEt|ET$A<8#ssTxQV{kJWfW^vgiyDdHfKYRn9 zLj6$^H}L^{1K-6M&+PiA32io+GxyFtbMBoxv%miS_z7Se?^N_4rl40tANmERT(7R% zP2)sAKV8smtLp1VpWJn?zSDGS4a;=|`d2N-YOD#wvblqt_^HyZ-^Z0W=}H+0)@>iS{Bvz+=$ zscka~R}8ypuH-6lj8N8ceAA=s&F->Mn2MB4cTAx7)IB#9+!jc;?cbiP3{o*JIg{j^ z8MTiJrn+-vkczbA%rZaEjFj$n&o2s7k&(PCwR~4rHP>BB2C2wNPJvoYC(2Oot`&u; zC`#UfKwl$juUU1|gp`YU(tqGza_RU>FeB(r5pQBs`mN>q`YmPGX zH+uO2p93iGFELOqB-H>Kr`K8-DkN_NNYNM#javc6Y1|2oi2!LD)1fgFAVcF`XxtBw zqcI;E`2a;44`}3*4+||k$|s++@T`T^FBpmD$(M9Qi{G*FmFe_^2^W#zd;@XTnZg!k z_@C0*>Q(G=eGe6mH5PNiaxPHf2gZs&xKQLT2M6I!WxOE{(^KRt$nd46xtoT!^e)q@ farXpyDdGrmoH#~I6DNro;w&*o%o2;l0^Bb5PfqW+=nM1Dhk?|SOA4*w6QQYsPPhlg-U-1D_L^vnY)Adw=9T>g+IU_ zWt=6n7Q1iW?7W$`^Yi=l4d4!K9|lYZRsb6nLVXr5<1mfYG<-~EVq6j`*HX#yhG2HO zBM&Y-2Y!Gp1cZ|;pN8ooo`uW#MVQK@2w%$AtAR{TZ^by9hzY^d_?Ah7t1i+JE6xNwfd} literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codepoint.class b/core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codepoint.class new file mode 100644 index 0000000000000000000000000000000000000000..eb02d6f4780436fb434b9da99495a0589e3b5231 GIT binary patch literal 1547 zcmZ`(-*4Mg7(KUjd>z;AMwr)TTWGcwaM!Nsx-GO#m#ynsW|pQvw;y{h*eqH=PHW*29@h-7PmVB_~)6YAa2z61u*}pf0$c8|E4Mt?`l$4RH?L zzyJ(}6J6mH=>)X~!$9RTQQ2&Sf$P;6PFwbPq06z*bk-wdPR9_AaU3`B8WIdAd%F>c z!1=r`2n~U-C5RISOq?WxzZJS($Plw^Tbf3Y@UCJSZr}zM88{_v zinR@fGrgo|d!e8vk@hSs8Mp-^JKoyYt_+&CK0U*U@{9Dqf1HK2~r&QEWae zi{P$Pt`qqxRp@WhV(LH_{*OH}<=}egR5n+gttb;mfnnq*TnzfU-wY~Z#g&&D9gR;( z`7vlk(Fkw*4Qh#Dd!7iE>Q18}=s)G1CS#i9*GCToqLE$(Fs#rnMKhy0c3~InCt5JP zOQSS{+Q4udHjU)UzC=I03BaEd$}{lQ$!8eMPsC{bda8}#tTLgRFE=q$Q66K!R8q?Q zZRoMYnKs_|$dt#`$B3J;6rHM_Q^kyJga3@N9qCY2?*9gBUhU6v>7CWgST=5IX8e21 zO`2L87v}Y({uEPYd>ezm;>yQ~>@H@XCsmVw&6zai+Q_d*K3VO@y+35|cipaS+}xp3 z`l4dX^iu(ssOT9g@G^!;p<}p8yDa7~OBBpu4LOvsfKQOe2Cl;;A^KQE12^#nmhcs+ z>>GN1zom>nP{b3WZ3pjR7kBUitF!_|$M-0y$}!5JaSSm=EUQDRzDEf3SC2XFM8G}2h+fM*HsOcC(Mnl#>4tc_|A9U+(ERO2Ellyg7 zb;5c}1doI6ZtOXc@;yTSq4HGph>$U@mX2{0H0TBAeJwkaTyBVK!WRS91G;kA3 zghH>sguO$;rullLq|g7{UIvR}8n*~b|DnNnwwVrLvY|ZLhwxH#T#n?G*Yl6rsGVc> zcfcic3A*jafg^WS(#9C9t#%}Of-v5cVf54wBMoc(Q!jSx#l>Y$OU&)F9 literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codes_iter.class b/core/src/main/java/org/luaj/vm2/libs/Utf8Lib$codes_iter.class new file mode 100644 index 0000000000000000000000000000000000000000..bd910578928a31f4ae076632e47f1f515c7cb0b3 GIT binary patch literal 1172 zcmZ`&TTc^F5dIF^vhBKnV!0Hmg09*YXc2E{p^6BhNi8PTCd3Ebwufe+?2_GW{V)3B zgFgTbRDz1}^5kza#@X$X(AK`3GjnFc-f$HQi?L5mZLP7{*0JWL&^ShT-<0W{DJKs;{e@ z$RG|f4hIu5CUKcia_hMjhLNsCDYz=)nvCm+GK5?3UA8^CC`Fk&lrf~E9bg_)?Y*A{ zP#(MCWtWGzj44brh;@gW^-YGz|A@=zHm`6q6+{9_5wkLGV2)w3Yn3NS7=li%yN1go zBN{`vCF3^kkfq)nnUi%k`l6$k=CsCTH3{{$AFI)M0rG=_V0 z_Cuia06sJj1le&PDKG8~Vfe`UbjsgApU}Yh#mHOqN8~7*Tw~G``cAe;|#Y rSi>)5NnRk&0E9mXGr_5P(M3t)fqN@>NcSM&2B2UGqqJ-a9%1Ys0#qGg literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Utf8Lib$len.class b/core/src/main/java/org/luaj/vm2/libs/Utf8Lib$len.class new file mode 100644 index 0000000000000000000000000000000000000000..98c54888b68a41ff62b3839303fff58064c60a68 GIT binary patch literal 1468 zcmZ`(-A~(A6#w1C_O*ix9jyzLra;TKq_Bj3EMvf+Enl@1sH*VMu3CqaTvCIvE62(D z2kdQon>1;frilruue6=I2&sG9%O3aCKc*@>c7rxP^5A>VJs&@x^E>C>zu)cs31Ajx z0x`rnBposohJMelWSyF|k*#lC%Q|+knq9H{TYhD(=9U86a~YHg+qHv9hIlHyl7I@0 zBcY=WI>XsR;S_24l`2D9>9HtnRs-L5D-69UGo3%=n6Fud$T*%rJ32T{>-Yej4ChXE zqa=Lm8%Iz!lmykF;;aq>=g8na32ZlDkW;1^n!3@$ab8DnXze+K7nQdhtdHjHBEu

`pxfPK>ANn~4bX>w^hGa{q!6-46N*BKG`3%D;GrwWg zt*k>h*=D83DOjcgU$XXrYX=0Q;ze5xad&lq?; ztn=*cN}IIVuEJX>-AP(nLxWyqaGUb9M-;H^(g# z&I5zGD5}97uS!hort1oS+OeutL02Xo4H0kl10zIrjBYHVm98piDCm@=ozX5|`2*}Z z2@F%ThGyU%tv7LtR&r&(&<#(J_RWy=3VdPs6;4eK$t0giHqe!mhLqTWEE|%vjW$C{ zN^3hv$ekA&xVUPB>hd-;Lr#)bX=+KAQ{p*p$T`(e4D~lG4I4@WgJW8c_B&FBx`ST% zH8Kz4FECPgAQ_6Z*1(NI1EafcvuFE%jcKjiLfl_lqZpj@{#ARxrSvjNJk9Q zaEBOtk?xrQ{HT=?P_P3ELsLaMWomZTVc3y+LQl;(u5FlEhEOEYova8<=Cw(0bCBcJ zD`-F?gWtE4Tw)RmCi0cUqZ@qf=piVx-%)Wi#|d63H{#ycWw5RIIGWcA;jpTwWin zrIWf9>_e2woJb@YTDD2L9?4bPub`JJD$~slUvPrhfD@ba4+DS}y#b4u%uf!l_M2;aTsbgBal6x`*H*Rq7)L4dRH5 zdld}fzA9&WRS@-gUiXO%!=7sPNtmuqLXv+%II3V6aq>Z0Pg!Z5VJNaqo3gxHjkx*# zJ4d|qG-*AGF&PgiIEDm6dxa|1GPu+91-e~EW;xCfG)!V|q{GuwWBUh4Bu+|*dtF1) zF!hQ2*;(D5(q?nCAyKq7M}yuiw9C(FaEm84mdUS^u9lh`*UpuZ0+UwWPU&L?hgHhf z>*XFJ<4x#}d(3i(rIIjB-Hzup$IW7HI{IQHj=6p@`jU zXlT0xSy+Rt3c~4rQ5A(1D5}V3s|ZNJa1pniY+J&q^|cSts0vGvzeMDUDtPg$Xz8J} zbOAj@#4e(CQ7o;M{^ao=BUG_f_YDp{8a#9rcYmvjMI64Oiv3dCGWr&!5_KJ_q|)&o zc#kR-asOetRsI?y{nDb3Fn?1e;WSU<;qPNul`gLb(_EF7p;FTSEF{YKd(+DL;Sch| z7kzB4^xXy;Nm%2_xkR4{kSAH^q2N3{=LH5IsW|mM&XCOZgE{1f*O37SX7&YN7J!Dh701#uY-U4Ui8-S-7E1=v&*|Ds2}_FLQ-wgpvIDvSQ#nvX)gbNEqG| z4Pm-M*37f?)6j9Nwyz5eI8SP_Q?|6Rtzce9H41~46DGpnmw4xXKmc8yoZS|IhOOaYEM!~KJ&%HV;sOO}# z{Z&`g>o#9W{69%7!{ED&zR2=rf-uL?1bd1yb0?sW91!N&M!$hcwhLHf8`-ueof~F!#KQPKX%x0%$+-mwU Ot_3vaY4H8s#>iiOnbNcX literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/luaj/vm2/libs/Utf8Lib.class b/core/src/main/java/org/luaj/vm2/libs/Utf8Lib.class new file mode 100644 index 0000000000000000000000000000000000000000..b73d4b4dd71fc970b60e9c202e52aaa5f208701a GIT binary patch literal 2674 zcmai0Sxi({82%2-aED>o21a3qRjC3pqSR6=iUNX;MYMoeT)8k8yg1&Wvmmw=skO^v zA55BPnz%gh;)7iRwj|YP(gz=WX#3DzyQWQ-m@Y|esPsE`Mk)erCOQ8(=l{>Ye*b^x z`rUWl1<;5W?MOhP0*eDyBncD+Lw%KjsM=pSc&Mr}pm&EW+YblpLVZn9qbH&V4S}S! zx}isE1rkfkIuzIhTr(auN7Z(- zC?70lE`ztRO~G88;KM~Tf$+wh2hGNASxRQp)(Dm?1IYCOh7 z^vRMfo1HqMLXJ?ysL|(Dm$9-gw)i^mviNyLq^i>zz%dUxR837pfJPr*;&me z9q7a^fiykb5HupX5mjTIC!^Vwh>WSJMBpQExjAKJ8$({jHoT5+Zcf?23^?grR4WQb zBSpd9q7a*h?)Bk-0^Nar928jiU|ZEk^?+Xs38bq71DfG)U`X3#M+oH6gIR4Dm#?wm zkU-Y%DJZD#9#aaY4}F&iZJlDegg5V5W83B-r4y)76G^=M6cfXQ&g2gGt&LiTry z7LIJyWNtY2o)ajU-?+qSc)!jGLNz|a&_WFXH5}H$9D&oLnB|H$hk*Ux7bqr569_xO z$;YX~ox(joAY4N{<&&~?U@aeqc-<5XbCqmxx(h@Q4pXm1{vZY zrEL(C7*rU(9fvU#k7*?}%JihUPeXB!!sc;zS-LLpCT1y?hwG*WD-vuQnO)iP@#m{3 zCKHwE&cv1BOpKg?Vi|=c@j(qY?rBKhAT=Dp(=iR=Ro22r4ZoLr#;{>s9(9~U`UILf z^E{TWacsWGt6NlkAX4)WG=_YF_S$~ps`wW~( zwa&*SM=?366KL*qwv1!@Wlw%r`54;H;=Vgeb&@M7|2(S7J+7oKx>T*WluOuo>V6@Y zH6v-rrDUuh9;vpTND`w{H(XYi+uCg@lB5YTiAv#S%a^z2VbKL-$2KA1jhF` ziXZS2e#9&I38(Ng&fynaz-_$EyUX~M+J3{g_`@tlK2j$6H^S}Cy^CZaMAjq{2$5oO z2To5ii`0*2;$_}P+;fCuMPc&E)9@5#W8cZwkVV?Xvx~Hw=U5i~GPC7{FOQ*jr|hQ~ zj+|!a+(7~ULMbMR*1t_BEJ!FwCIFtDZpdO2P(ZRXa0$knD0{Fe)9A`kQ}Hm4k!BFm zO&DPdlzyd literal 0 HcmV?d00001 diff --git a/examples/jse/SampleLuaScheduler.class b/examples/jse/SampleLuaScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..97af85cafceb91b7ef71823df79c707bd6c0cde7 GIT binary patch literal 1141 zcmaJ=+foxj5IqwD3+qNOTtY-J;3XSC7NU3ypj8%HQUNK0vD61^vOB4)?Y=4fSMb8vfw4+0Ts^JnehT*EaX2^h-jm=8dkao#4%APP5Jh3df zzgl%G44t0O9gDlx3t263=`r-{nS9g2qexD{WrmTaPy;g`@PfH6tUwA^MGRdb<0}kF z{bH<4u^rtEyIzfNIr?hgn7&0^|a5ujj0r|bNzJa-r}~eXQwC6rSMf> zxb-mQ3CGH){|C*U0^PBNw9f9DO*vxQPx-dFag5lGUWOizS87sx^o|cYLE5TFpkF~! z!&MAWPLn(hO{22PErwY=e^SAMPX}Ggo%fuPpQJ5v8Hk*UK@2Ilt|5hChTf*FjBmh{*~GPUWXQdLLFWtwBeIA?60oYr(CZllaRpKBi$D zcNn@Wwv@K_#_?^rM7o7(b(94a1|}6uX~^PkQ}eE@yM)Nl>PaDLL|I?R6ctP}#0zze zPq!0=pH(eET=TXgmV!!2xGTIQ$rG(`+hOR_KU|<IpZf-2{+EKnbziok?DjYfn)EmQ;76wmE&i^O?C6X7Zh;~rhk@QHvR3uwT37(D}&5!~MFy`|c!tt?s=auwAQ8#Z4;?9_1^#kE-br*-EHct_!MZO zB$D_5K9ezi!$pgs`{SFP?{dzWGxPKJ_a6Xuu@yxCL5`4y5ri2QoJQHOd{HsZYnz5; z=3Qf3xH4nr8NyqpZF;X5f^j{k=B{aoAj%Lb2+LyFi)RL=Grq_P%a`dZ()tzoC^U?6 zjARWUH84L*N~z{!}D0+Sk$njhNlO#^cWaMvL~_r3CWUBf-Z3A1F{#kbOR{6;}C z=);hPs^>^BEcF#_`=yd>$l|5*aikdL`VC6*rD7CGY$){x!(@+>>``4EZbC3 zD7~KJc+4=>$KOBRy(q}KXF4{=Q-+lRH#?85;!5Mdm4Dw{XvZnik;gNpEsy+KUN%ld z-lEKC))R&5p{V!v(QL;ZC63zvL2M{;tl|mzslFiSx)7%LjCRYkGFnFxEwIn@!|3vgFt&eClNb6K0nQDQbroQ3&7fgP|T&hXw?%-IbmHI4)KPl zQ*R@7mTckXAwjHuLL@<(wPqXoSsTeS0>9tFgXR%y(%>xCuuj~8j;=*g22@B@6%(+i cYE#uAk~&^cMMK~hW;tTVoMsqaQZ9h>9~s%`p#T5? literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$FileImpl.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$FileImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..736d070cad89fc691305ff432d7fd1b5f750a8f7 GIT binary patch literal 4016 zcmbtW`*Ryt75=U)du3()jO)~~ow#kBSaMRO0otZcQ%7k{WE?xx!D(W^tnIZeThgl9 zm6P;MLrO}YKqyIDN_n&fnnGI=B~ym-Hjf{84E(}l82%Eb9f@4g4%9=sDq096`-I;v5l&@^u>8nL{SOvOef=gld{R;bUJ_ve#2bJ)rZ z=Tj+#?L9-TS<1-F`euER^{>JRp;kj!#|G#M9ae5OmdYFRvBmVBSSmSb#}d|1a&p^1 zGG!{%>`P{n&VJhU4E-0&zQ|ZD>d~N~QAZP+6?Uw*oVU%`plz-~C(>DRu9-?%wmGe! zP6$Sej_U*8a}M!Be+$eajmFWo;kywJ7`T)AIx4N zjN7qS!yP*Mu&?X@bDqr1Drk#FDsPU=FeN>SQcZdWea%$;ejRtAUtv?)STGM-nJL3L zmUQSQV>?Dh6kjHA|6~QQFyc6<;clIcG{ADLlyz-l6sleIxj~GDaR>R^3t`>(etYJjQ5qzBWE0g7{Ed{EnRVub&Iujk_#~a4%q1P>TI(5)ClV1-jpIZZ6Znh-BQNE zZR1jTa9m_8C&`{O(`JUc7jY#*kP4E9RB%?u9FlBFjuj&%>a8?S=r@i99VxJtg0^Wc zaOoKo;aJ2nGenN#ejPawqQ(ox&G4XX)TaXLUR-p;zZjH-tDI5f^90?ulZysLpnrVnz^IKq)fQFQOB5CIBaD7=f=aPGiOa7F>*%QBsa3X^Z)3+$e6-|BFuAU+Tg__vm=;wMHU{l^0_HfM8le`TqQS4 zo3fvVP1`wS+3csrxMewv+Q@o!v_tp?4J5>_9u;Y*!MDQrHeS>4x(u8pg>9h{E)MY?N}2YyAJI%`%i zA1|@@uKTik+=n=5q*9}t3w;WDB9k$52UCV^o2=dUI7HWv1NZ7>I=u{rWRW{q!}k@s z*QKCRWE$S$p!wgX?0GK@*v$zO;#{vrv)teOuUW1}cjev3H6Xth+?AI;*G9hKZO89( ze0m2#o&^r{9=`^4>{zt-Dzs?T71YVs#^}x~XpQb#M%%6eHeZCcYY7cMLf7$KS8?MK zg6ayoqiw+}h`jB(c#_{+pz-@ObeyE?Q)tBl91aiS4m^Z@Jd7`Jw+~hC^KP!zP_JP^ zLtI0<#$l}ZVvwKrX|rxK;99riDQ-3e8A&7mS^bl+p7z7)W>8h!s*U#URO%{r2|Wd& zCqMeY;T6JTE>bNYeI!A6W<7%1Sqb5BBAls&@N5MHwX*_;vqX4eErP;xc%D?HIQzLO zu5HoFsJnj8E~VjaShM8$<+|h2Q*$b3SY!lehb!au7XuZ ztkz#c3$l7um)4wr$~|9=z=nRY=FRTMa)7IxZi%wiF2pjK5UGFztCer2n1E-Q`{!8w z=dlrAasjKL=G;miE+^7ny-qyRS%EaG8C3i#+MX1!a-^VHN=DD@Xs@aoI(#<}U~ z`APba`X)R)$y}uOGKToMm!Gi$jxXURVNOlUQoi}ACDdHQr@66_VrQzSR+-%BHrfR; zxrk1@h;4X@n*JK=@Cxq6*QwrDU3N7Hc6J29WdvU+)}hl6xSBrdB>$c&z50EVPbqxW zkL6`w#P@l0N1CU53z)g+=Bl;hYytC2xTQJcz1$>5@+lzOan^7*TUOsW-aF60Id_Rc zmQ;T`YRTj^hW0w=!xB319dzTn*o!wXh&M5cA7G4Xlh$Q;9UYCKvhXf2C7#T7uw2r3 z8=}o8g&1eZ+SdCaTktZ?U&O6`pm({#06K);axn~_ta*-74Xl;wHJ1#fy18GKae1i- zd!9^0kOKtjUUt#Dg9V(H#{wSS=dF*mUlK>l=#-@Zr{7!8?3Z;b6WO^YTYD&O;K$6? zduYH@N>@IUvRem61U-3y!V!I0KcI)e(RE@GP}CUxbml#pMv8|i1dL- zlUz5*LXJK)c_g(nYlv)SF@WEb$R9}LkDRoBB9TAi2K;5kVMBSN@Hd<9aDu6kE#a$=ZEMPM!h~8hN)_~2dRfvjvBN$|xPv8=f-=yl^M%#Y?cR!K} literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$StdinFile.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$StdinFile.class new file mode 100644 index 0000000000000000000000000000000000000000..de1b21f68861b9b65eeef6ac8a057eea5a4d46e6 GIT binary patch literal 2368 zcmah~?N-}H5WNcq8CQTIA0$914Gyt!iXD>Bq$X*@S1@txw5HI6ey!~VWMs+F%Cvct zK16@C=cF_zKl%WDsGiPB0%YtaKcv-a@7$TWvpf6GzwiDAum%}J4|+93bo8O0VWiHF zc&6nVW~NlBi>fObh8*##WjLZ}Tg8@XGR!6m9?ay{egMm*I)4oyiUAEV9UnnwNZQVR z#%%F==BTldF^!7M)TPL5N|Cnlnc( z!(=DiCl7d+49jpI5iZ$<*hA)0+c8|kB@LH#jNuAH{Cutq(E~0IR_q#u+M7(}M@h|lHp=E5JO*iYc*e_$o<+Hb|!B% zTP{T|c!MIJLt4Wv9iL*J;esbqJBA_B;LafplsoA!W;ZU^)T)Qs45|g~iE`_Hg zes&C(tS8PnFSK~DIa1^_w)RU^G+l!>l7>=P=hEp4aqXEcc|dLrDc#zhcZz6hzND3^ zX-o1FHKg}dqdcS#RFuo%V;p$&)X+%Vqe^S<{~#3AfFl~54wJP{bWNhu@Es+3vIo{m z>!ILcWxM56g?|PIPY(RN0#jT?A>9pIQZ?htw(XK=yy@#Hqo@!-Wiy>*so{Rm-VoT+ zu&+)VrJFcAn}&5{ABv2hhkpRqdDXR@*9^agGYx>giw$noOd%5m+dgbHbD<^{2on0! zX1MjbDZ0RSLwLV|wsppUVuhP#nQBivS&HN`X}A;V@`6PQpg%7O7*D4#OcDkq9g_;o$0j Dd)5C_ literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$StdoutFile.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib$StdoutFile.class new file mode 100644 index 0000000000000000000000000000000000000000..70ecf29d7ec5e5c4f43265efe895ff507e493274 GIT binary patch literal 2550 zcma)8U31$+6g}&>ku8+OP2-ldC4}M@+kx6G6bde1Nt4FKP0~6|KLP~VUfXhH$(7b= z1N;ykdE0KankK`kbjgF6y446^g-ric94ekuplKMwFhizaLCfX2%P#kXq{^aZcg37x za)v?CG~864VY2k}sDg?F4k{Sca0p`z$NS+vd%%0aunh4Y;nMpMd&oj&MG8Nx;Rv2* zh}TKbn%L}+Dppi+6vq@C*YE-+7!rGJV2Cw!w>e|i2tJU`6i2B9lNw&a2`WKbU*|Kn zRn^4}LlDSvg>FfQlj&mEzp`))t3j!ya8ki34X+^0Fwvh{*gpnUuU5HBw&lsV^ZO+j z##6<52rrp-MK|3-99c{$cvZt|IL$D&ABYN6UcNYc?HWn<>u%V&B@!)2I@jBt^t^^M zQumImGx@yaeqF;Gl2|eo+yLh4Zx08eD`}$gy-_%O3hT-a$dZ1r6_lig~z4 zW2vkA1~Mq^waTX8Sot%dOKi+A@#qdpm2t$ziUQHhQ$}U z?Fx66^@=|mg30#O z?s+$?4SSvE{KWi2J*QWN?QAl96;3?>`b*5~R?XyYs$|>i-A*CYGXsZ0Gd+RJ)PVMZ zuZHk`zwT+o0mY1Nnq}Io1qQ8XS=^a1b=Q^0LJc?FsB}!hJ%*EgdG04)!ROSKo(`pR z?&pd;9rOfs!w5!YX9W@o`Cg!zVVXOHMfzT%(K!sz2S{e8Zau)jjr)jar+&al_V|4y zzo!QbSG^z!`WYkm1!MRX*Ju=vc&zk`KxHh`w`4p)cSd(LyN&UOcoF!{Lr9uI@5yhZ zi8@e#ze-9Zeloj-QK81bsFSP&3FZk*LNP{i&P{FMZMxp4YkC{AyZNae=1(%_FWew>lsInEMg1k< zNzq8kj7gqte6%+F(fjz`b#(j#lK)e(n3mECcsXfe}K_{e?ETzbZJ}JWls9+*QEM4g*KG;KCeTImn z7cof8H<i>dz1}-WSsdDU;izU)e-RSrko)fq|BHPhp+zFlOQ8GgQIq1^1 QP0;K{G>W^}#1|O<7jpwI!~g&Q literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseIoLib.class new file mode 100644 index 0000000000000000000000000000000000000000..a0999627a27336b5a475235d51a2a6057d59c4b0 GIT binary patch literal 3037 zcma)8Yf}?f7=BI&+0DA)5{rmM1*J6sCE$gs@mfR;1Y*UaQG3}Wr|Dv{8+SKIul9cZ z1@;f{sWa_NCvnP5`@O%(seRApwm~e(FgbbO^Io6xocHk0zkmJ(U=BYA;X{`Mzlv@I z7!H_LK2|7etFg7>@mN96*s)cc$L4LGFq3+QLCP1*j8?E2_9WYEuhsN%1u}vX6cxLm zG7PpExdH2u0_Su?cP=n=MWQPbdKe-v+Io|ZEju~gxT+Vpf)M&df_{d>k@h-Xs5vg8 z?`DYZ9NjECweVpKi12$D#&!&!5b^gi>|NE?w3u$jZfZu(EMCrLxowMZGWIbrOU5vR z&w8X_5C=r`gA7L^N!P2O8Tr_1=R+5_d9m@Diq~<3 z!EbZ^fR@O7%^|8{Tk(&KSe_9Z{%Ny-oK7zk+ET zmvBPGNt|NnZ?$~0Y&d$6GbnlPG=+gk)B{3YO~jhU8!ArY4E4y@d3JmFyskGaQyfBE zMx0K7kUx(L5-zH^gv$(ltvYJZ6Sn+e*(LXY_h3?)Ri1U?(Yp#}aYe$MimSNR)<``Q zLoYRwDm$gJLovBlBwjSSA#l7q)X)SH0^oUuGo1t67DIqLi=>K0EHU&@@`T~ZJ?P2p z*>F?e5UJl{INf<_Z;0rMjAe%INii*CyiI(}=!SyZxFaF0;x6tnsEs=zNJaH!2@;3j z;>A);ancL(%lY3Vm++$EZ{r;m?~3uF=6HcSJY~$S>yEe#?~AT9cPw~wZ+ojG5QhfZ zu0yh{%~_U7mzB!xHB4tjr>nq=+;DhKK?ZpdpDte;LF$!9SBROjW=^;!b%QUJiy3a+ z(lVm=;3G>bxf6_GgpQ>xZEG%$xh>L#m|M^ClB1i3Ex}~i-RLHfYVMF#Jtz&XmcT8G zK{iX=os|qT+kkwRK0DSBT6VPTgGH@WZ()~+NledMg4b8J3G2DG4NP`wRB{?*=pnd0 zXj4O)J445&rlvZf>6U&P4^k`6w20FPdfY3V@Cqlr!YQvX;|j}W*~;=7fkTa#aZ;QQ z!>%Q6JBwVLJ3WzV!Z5fsThMHqlNfA1U{nVErcMhX0Qm#4uruQF^y! zdcuKTP+F+;t&_B$Rz_?0coov`^n+oQz5}lEI{bKm0=Wv)QFOW5;3h(8GVlFui}?bI zr16uHLEojO;~`fED4PhU$Ng2jveh%y=K1g?p55DcF1LAFuIJ9#K{^#gHK!Q)gc}5>}5!m!c;&Z~oyW?-}(B?A?NEi&Z zHBrV|y@@dEf|;f8*`pPldxEfA<*^Fhtm66xdK=rKiXa;;oCWYXbW6(9UfUS8greKJ16$E0hg=pSHPnRA^? zKk3}`)6Pvl>)iD7&P^Y8Zu&)srUd7g1fUOJ;cHrDl0yj7seVI}xO*Ym`<66eTEBC5 OeE6Q$AISD6zyCk$E3csd literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$acos.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$acos.class new file mode 100644 index 0000000000000000000000000000000000000000..b88cf9fbcea4e48a00e6f12d7b7905b098b5327c GIT binary patch literal 469 zcmah`Jx>Bb5PbtDi{}A~qM$L+L?c*u#@g6`Mh#-&M`g2z8$7byncIWJUuCQ`7XAQ# zlyMd@78GtVZ}N6t-sH{a*ZT*6W30KzAS>W_m_d%P87Dno4`tsU4Gw%A2FAaT=|ejV zwr(PsJY7B#a))6QrbmQqy>aUzk68iN!yG(9u`fr`*D~sjbp%ItW5ZByHCh5i!uGU7 z-zfjws9&Rrq8Z;SLa7}_sxuq}D!G<{X2$7CtqJZ`JWRUkB(z-VPrhe2AmlsBq^Ge- z1(pdL|CtiJvnWzYQ%hr%5vUPr)1t|W1Tjei`zUaN_SwoAg16yroslfF`wDvDhA_|7 wegk)KumF$ypHV)69o>0@c%B-~qRdBb5PbtDi{}A~qM$L+L?c*u#@g6`Mh#-&M`y8z8(gy7ncIWJUuCQ`7XAQ# zlyMF*78GtVZ}N6t-sH{a*ZT*6W30KzAS>W_m_d%P8O1%{3}xRR4Gw&x1M6SNkqRV#F(vh`Ofgfp`?B<7lVGjLfBeixtw?s!hLK}ebNr#f2Era?E*4ujC&U@ykvRJgGuwA)o_UtRcd+2ubr7L>8mKn7ie zHvcC2>ZQ$sYWAR4L!W_u3=leNqAn~~copkVL{&nwh=jMwXciK67DF0_4UAxvkZ;J4 zj8F@ubr4ErE;{Ahr(3J5a7UMf5x%t8VB_ee__{2EH9~sJzu?rFqT|UA@H!F?B^gG0ei&(({c}}~a}tbw&y&HH zE5cBQSV5MTtv*$G-5`wdX^fE+v+xMI=L2D!t7-#hTqiKeRY^^@r5L*wAD}H|9?a5Bl$7{{L1G;aKod5s; literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$cosh.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$cosh.class new file mode 100644 index 0000000000000000000000000000000000000000..5da423ce42080db055cdbd3c968887c30a684d6d GIT binary patch literal 469 zcmah`O;5r=5Pd@{#acj76f`E9Xao<|cs5=@qXzNd$9-EjP_ne9TS)v>#*@Z_KfoVl zoJEWW4(?&z}9<-qnZhdg0BNqfE;iGe>J9{DN?w0|YCekTfc z?qZQXT|W}?$59+*Cj_g}ymwK+yaU(60z5)#AjZO1BJNFe1UpQ0pP|uiwjGoRyR!}h zE&WR^e~qS!R`MVTd1ll?g}EG-u`lD_}WTK#s5*#RE4;<$wm^|kpEnq4 zoXO!qP`-OI)13S>Bv*@t@Hv$tey-4f_)REaZjE31}puk4~#z{-&Hy}k8~oi zPT2X+li*y0p^969)LLnQ8lg5Xnr%oBvn+6k0_SI*shl8q8=khglR@_1K(9Oymbsd5 upbrZxaCn|l`2dEx_YUzgN6n(lSO%+DoAe4cxR)8ppo&etTLBf$zWM`PtYDx3 literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$log.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$log.class new file mode 100644 index 0000000000000000000000000000000000000000..c4e24f73aa47d1577792210a77feecf0b6d1559c GIT binary patch literal 704 zcmZ`%T~8BH5IxiFc450vMbIK5h!whOT;rR;7!4J*Dfj?EUvHP|_Lj?DvLE$F_ydgp zLSK;hpzr=Cjk8-5)1VJ`&i$A(b7toL`1SQ0fM@VsRA4!%dazL=tePYWbS{R$==edP zRX+{(-X_2Nf#eMEtg}(qw%d-dJI-iyqiP66O z1@xIWgcY{MGa%Wn;s)Eo^$n_U7&q>m!a2iC_wGC{onqmk-L!f4;UnsP)8+@$_0Q1! v#IBVx*c=mqh^IN==_{;Z$O{~deqznCVBu!z+`_FA*U@HlIqxFYnbQ0X8M>Yz literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$pow.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib$pow.class new file mode 100644 index 0000000000000000000000000000000000000000..acc88fc1512801293b3a731686fc12daf6372946 GIT binary patch literal 471 zcmah`!A`zpeb* zsR~8>bTcAkk5#CW6GFP)xOb4lf(^&TB3wdYASS{KMA(}Oxn~qT5;FBxtI@JiAk^kZ z47BvFw46iGR*!f=!F4c ziK8h4Ls(db%h;Ow>?|aHmGPwU;0O3o z#va6Y;NTp(IyGIXPW9*4`v-tiY`DlEE8uvTLyoW=Cp|wJ$$>u}9{Eui82?J9{dO4a z+-aFST|W|X$Dt0>6GFD$xOb7qynyRr0Un_^kYnjbQuii0f@4D6XQ;OtErB9och+HG zlz(Z|uhCS|j2{%C)DE@kjD~?qZejj_y3234%{;Cs>?|aHmGPwU;0O3o z#$LpD;NTp(IyGIXPW9*4`v-tiY`DlEE8uvTLyoW=#XVn-n&N>XN z@-MCWHJU1#(SstC+M!XM(J)Z)tqe3XPFHG8aBref+*M~`%9Z})2k8ccd`H>jJhF+v zDq-tCQ-XJ4jEb9DTC1!;jZm8vO;;p{X&N|0ffGz$S~)}THr#D8Qp)VVf?l{GEOJf1 ufd~$k;Bo&m$|p!i_ue3$XGXIqGnc_KRwh`%8e^H6460b?%N0=J^sC>S+hKG7 literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseMathLib.class new file mode 100644 index 0000000000000000000000000000000000000000..d757f641514439eb5c3f74a34d466848a2307c94 GIT binary patch literal 1469 zcma)5ZBr6a7(G{z#g(*33Nua17eH_mt;82nK}|(8HO%Qlv*-@utc$~f^|?RL^h>HQ z+O#wMfc`^&rRiK`a-7i-KHPK9v(I_nc<%4NKYsyOz_yAexD>d3Xog3ivs5lr7b zPLAT5S7rGvBn4cda8ByHKD0m;aPR4+DXaQZ8DBsq0g8FonKX zvK8DD7`PO;*7c!nXe+i+Z@yo;stCX(OX~FD0lJvimU*LBqo zf~NxgHx@!q6`ItIQD>G43Z6Bhqo;~-shgngxb#86WFtCysz^xP3_Il1*x}1YI+U&| zl2SQOC8tDXx)G&xRgscQv4mF&mVKDOia^`N9?JdU>_h2vIISQf(0kM1SVF3_ZwRz! zik6YB9_5Ylww^a>@$R$9_gqf_b*oe@?-`3lX>Y$+)Df9lpfzjQl{G_ZZ2{l1Wf|p^ zsoS<;b2V1^cID3nmIe>cHL`A^AT~$NAinb=kmV^q1G7B&)_F?TKX6kBe2EN4&!Fr? z{jI0Cm5urDItc8Z;r=OtG5x7t&0)iV_SfyJ-?9jyHmL&OMqn5Yp)h~vaDVuCn9OcG~^DdIeW F{{UX!SEB#` literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseOsLib.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseOsLib.class new file mode 100644 index 0000000000000000000000000000000000000000..9d5813c83551ede3a6d7fde3bb4ca8ed25666694 GIT binary patch literal 2425 zcma)7X?GG=7=CWHAvh#R+)XuUT}VJ_)!HR$)krK#AWaB0(P{^Bg^9q>nIVhXP5UeS z1Aa|Co+PK9(|+rR_Aj~gxlD+`(9?ckF87^xdEVz;=C9Yk{SF|GU;Jo8yM_)Oo#+zS zYuSZZsb}sXN zB&RZ0($g7%-Cjbb6`Np!?v!gwqg;1#SjT|!pj6|NlYRv8zT)}=fouzAHvJ?j)mp>P zrZ8P||4XWB6U0#+$8cOgTQp2}%(ClMOK2Dp=&M(QNE7M!QeIYF)2e8QkhHgDN>p5F z+qJ4I=eFpaXc*TEohjPZqLC{}#eGc2hxkaKBQrT27uerSYO-crwycsgDkDCerj}eX zT|dn})^Qe}5axnWs>$?SfoKa(hPHVlzp9N?p5aWH#JB@tN>opaT%j5Kq`^sd^IbQ884a- zq^-*_3l*cJpk7tXd@0Z$PQ2rrCaOFI=A_}8fZnL*m|2p3B#>0?HO`)FMJ2l#+M<2hO4i2E?Z z`5!Z=KR4i71D;eV-qdjm-w60@Sux5oV+risfW+=oXh&4kJ5A=Et`CMl=Sj7Pe8>}@ zTdpdXQpa5s1bXtEFIQ${xvKmKoN1A(H#Oc;YFayu=*pw1V;=Vedbx5g;-hysPd7&66PZLhB_I+4fl;gCxJJdTm$;q#R&45~ zGF%4J6Pfsx_BU_dycY1+eNdR5RFYTh=uvBq&U=$)MS4w~QR7CxQ?8M}H*QqxcMT8d z_3i9>vq5-rN#>c2z;Fw4-f5~v!?GuAS+*8v<=>oqHVCC&s>fUSYC&|C_ET2P&P%U8 z0j}!$>OHA|Vvrr)Mn2lPWi3=8@Evb$uz7d3++E&lTkZ?!qAovFd@j;rkf-3;IlKn( zEB^>A@u|LPKo%YB)DHE9+EBm9Qk)N83vT zG~6HMkKP{Q`wee@6GjI$CSM>p6A{DD5qge&-f?IRgR3}l{wa2)I{55K1z+>fQo&c} z`=2263@1aU)^X+;K3&JTm1npZy25M!I>yw!j`AQ5apr)7ID+B&89{Ud`gV4Ths zs|AKvG(}$^F%wzC_3`K`QcntZYY5w-y`q>!(AK7Yc`8{sY96t8C*;ZrBx4SzztiW1o>W*abWw}P=q z7)yk)Oc?huga>5eVKa<zGSMR#99@veQZ{R8gG~AaXBh dMIe}ik68rp2t9aQkHSVBC)d<}#P@A@{15MbNI3ui literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JsePlatform.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JsePlatform.class new file mode 100644 index 0000000000000000000000000000000000000000..1ca36e41c0f687da6b56f367d57d07f0218eb3c4 GIT binary patch literal 2104 zcma)7O?w(u7(F*YCZW@OH6$gLnlxI0U`VLe7-}p@Y)uO#N=r>+KQ1tkAp?_VW?-pR zt8QGl@bL$@aj9-7kA2J!@Q1kZAGol-cNh{OP~FU&x%b@nyq|Y||NGZN0Pmsd#Q*IsM z)Qt+mC@EJ9+$cCw3}=H~E!K8I!n@t-w#`i?S8Ek|O{8a?!Pg<&Ze1@D*pz9|u2IN! z(ah;0LnN3yp0ifd^yqPCLzsA9#ujeSENZH02@A`?-99tX6$m+EcW`_NNd`vqp1>^` zX>8L#n+nbMR1asiLfIjFNDOY2#Gu|5C+_riyq_Obz69>d_y{`;vbaNP2X+RQDWhFA zZ>P&HdIGyLKE{29;W{_S15-r2^nWAHw$8+b{6iU!z$tHPwXW||+bwnpx5-^uYcJE) zw4oR1+-QM01Oi%9iwQ_VFeclw;+E}hvlkHW{tkZt z&m^=a#^@Ul{uBR!4+zfLrmzntWRo*HGv9o3X3qEP;M)%XvzQVQKu|zPLKqQ-WL4Qv zWL+`VXv3W3yxA*U$m48u`Xwh#`CwGJR#~E>KN(|W|wH#8FQ6dB#N4$mfTudwHB4K zPLZJH8Vqso9#53I7Zoth5LlTOaHBm(TOsCVt4v%lU8|zbX`CZ*{QhHnaSYLtYCDfi z+YxYwVc;ayFh~W%P^}qVv2E3+S3i~!u96x8B;F7Sf<#DvU0gDrC5d>J-kxlLzA#3> zFiPH>=K<;5SFl{Z0UWiQI9HOSjQ>o#8^WL1|ek1 zwm1(65hCPTX9(Y;#oR7>@=csxzW0SVcOm41{Y{+PKKxBiat|UmOKM}(Rl<^TS@tGD2T2yQw5dqiskz(;fVhsq0k`E@}`d?ZEnfM*d~E@1~ZhTY8WriG9G z8o&5KXKd)`j33(>f0JW9XO|>f3#QIw_TF>Oz2~0iJm;MJ`S)*s09eLe3?YOSL?oi< z5a=muPc*fnnFs29EHJ1?-4 z4m{ED=c^1$Etu7sOAqVXVZN!{thw#9<3)zk%W(Px#)5DBCyag!D7eHhE(>(GlC-&3 z)=REHI6YqMBCvxJSMZL2QuQ++(02xm7>4n#f)R=L@cwJWH1m)oVuE-CE;raA_(6-8 zKT_TQrUoouWHdoahf!!8euhHA4yo0G~9t|qF+*`FB}D51tVyU69o?hE;d37`d09@z;LVg3#Lm2 zR;#-DejxtXmQ}M$`ijAjldaJ<$rlAKY*4AJ>zo#9QCToe-Cn9_j>8=rYgGnK28n)} z;}LZ8NTFRf_m{U)FL*0eIjtR_hpriqNsmKW~{6ac`FX_t@ z5Y&W8OyVBxBBbB)eB3|BN6$GvX2?fA;3GtGH+iBsM3~~@I38q9a50m8hEyi^5{mc{ zJ((QEHN?RU)p7M1#xfHP3+b{G{1Ki-&7>l}sW(H~sZ@l&zHOQjg*-%q^cFBjNaks< z-^5ia_&MCdE*4QF%Tsi`LNB5Uq=I1uI|_E`2SJKgh`(tFc_$a{w6U*w_QbjODHSw! z{DfeHRzbmZW`0Ggj?aFgy-x@e2%02<2hk}7Kaj*U<^9vMv$T%AK#Z3TyCbB0e%tTYsI@VIrpUL8bN+3-8M@Zls^x-i{k4O%Y T^q5wzxmA2iyO_6=&@lK9GFK2z literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/JseStringLib.class b/jse/src/main/java/org/luaj/vm2/libs/jse/JseStringLib.class new file mode 100644 index 0000000000000000000000000000000000000000..aa566417e101491f72e1f58aff73795117bb5139 GIT binary patch literal 630 zcmZuu%TB^T6g>ll(OOhQ@PRLU#G;8!+zG~wkA*>9KunCQDOM~NYD$ZrA9{1ie=bX9o@%8!+;21d-5kxr@4Kc(SvaVM%oIuo#c4OCYY_nyQea~*z zO18-m-?y8#f4~sc^OqbW43l-y7KS65HRHmpTUB3$iZKpNLjvPN^&>Yh9gBgtg%em8 zw+w0hC|~*|2mwVElSpz*X-Hvuh#_=BHf~+7A$*2Cec*anEnW|#LQBO#kv@te!;t#b zuH1RAG1<=j$!j3`XR?ZWLbvQzn!bMEaS9gg{WQwl|%Q2S};+vo7Q>IFfFel zMHv!hUsUhU#6v$;%WmLRtrJ@olY=BX(lm0IC!=yiz~tA_xn+g9GducCSvqvb9p3d$1_h1k}%-oZ>knNyy7tVv8GO;nOH jL#k3QiFL}ZQoM#GY|sQWL@FHVPmFTS>%%hBu literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$1.class b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b0c833b45e35267e2844530f2fb743648159d787 GIT binary patch literal 516 zcma)2O;5r=5Pe$;g<1vt!VgT0;eZ}&^lZEkj2gfL#CuydxOKZtx-G^Z<-wE2gFnC@ zWt`TSs2AO2-^|XunRz>J?=P9z)D?j8x%1}8GN~EU@ zrSATiI!>5_#N$1EygQ5EmW>3b!ErZ#Mr<|ca5Q>ko$mhw#^Cd-UD!%)YV2|T0 z3HX`F6V2}f5A!cmd0z!G)>SX#Cpd@6!~$VW>Hi(E?xgkXS_N>Tzb;WFJ$%9QCY?gw7|Be-Zh zc=N)=#HjILJo`r(-)<`)JqWvb^WMDoX6E;M^XAv@?>_)+;aL(9L^Z^8#L>gh-{j}q z@I9%F7qzA^J(nTvh*!RJM8&o$zETWxxpJ7MxYg*SmGa%LBzlq1kkru!ogsUB4MWeW zw4}Gj5Y6Qe6G$VYA*-Vw0}RWy(=e3Jo5p!-#Za>58ckOiWuI5g6H)h-aAy8m^#ksn zGU%`Qso3!Lq*9V_v)y3JAsxfPe!5VyA!|zPbJq<54|F^X0=+KL6P78Gc!V(x<2oK= zf??(k09F_@({7z{M=&&UXv0H+m%+M%}~Q4!}R~J zj9R23TyNWUJ!+#J%M#9}q9zhyWjf6mwjidcg?hm-NslW^(uXJXzNX2VAsr#D7hZk? zJ33nU3hfik8J^PELmHT+EFezin=Cn~3uz1%e?TnU?zr$7sUpe6TMS>>@1aFLA{M(O z&mctyJJGg%Gde=ik&AbTM}yq<>?%&@L_#nV(8!*LjvOIapud1sEMgl=*u^rz1U;X` z_&UQFNh-6>vKxeUu0wT}umV+a41~wf{1yw!3kc1MH5V(l$X%EvETq4s>02R9UIRq z?3vHkzw-saJ4O+DgsH3dMp|2%)A7wnk$F>kHmlZd^B>-|!u9JyTz-h~L>QO$WR2Kr zZ@#mV^M;UA?sr{?6rRwZ&b|og*0pucAB8aC6hAwfI!8GsZnK&Y;dNM{c*l1@_$R8!qlG7Q7y2H7?~^#A|> literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$ScheduledTask.class b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$ScheduledTask.class new file mode 100644 index 0000000000000000000000000000000000000000..99820fca336e146641e2f6dd3184e10a4a386756 GIT binary patch literal 1338 zcmah|%T5$Q6g@QzGtAJu2hzf%;h;Kmz5#ob~5rUCjF;fl=O%L`1Kgo?IY9y!& zqb8bY;=+Xs7ygRzbTtrWgt)0wb?fxG_uRVu?a#aS048xGi3rN#h#DwIOrUmEZpw@$ z?R;i#c~xaSf!K&?o8G8ES#RHB0u@Naku*>VL!hzXzYF6R1W_9JL1OP%ki8#Inp~H?!)hKyE&}qH?~aoSxlXZb7FX^t3Z406OA<@%NvWNtRl5`+?#biIeBvT{MR)j%7LlIX2CO6CMw zibYw?g1*tR9R@maj7D<>n|{SoAkl5$IC=!)kECh&4&(neVA634j+QuS;1qfVj3;tU zje9euWtsFM?l7b*GjA?i>Yj8Ns&Lg~U)fm-w)GxXRo^13nJDB)s+l%zHS4c0D`!Dc zg;w**3#%7s?d>~EgYHfDrgp@~USej`ouU`Tc2v!KGP^b-H+CeGlnm~)&(r~$q0=z; zecgQaw3N5|RP;=}>D>pR2Ob|3HHH}WNHDe0a0x8FMPw) zZ;`@Bbl?*i1IX+Mw-W`K<>}W*z1aIarh}ik4$@m#!+vV}vl8l8l7{xEgFFSQRaEWz zf_U^PqGiD+5nWuU{vGESDMzGoEMT9<1+IbF{fW9tYx+UbMO-?7+E7aUNz&y5sZFKS sU!-2a)jib+cVSabJm)6tX;}7elwp{$2u5&C<0!_6NwTUjigBd=0`n>g)&Kwi literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$SpawnFunction.class b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$SpawnFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..840d54dafb6ef3beb96755b9040880b6d3efac07 GIT binary patch literal 1092 zcma)6Yi|-k6g|Uh0hgy}i`s`3%d4{3>L-keX>4pl(FB6=;{YQpEW5f7{8y$;DjGld z1N>3OyA(_pFq%#7+`TjB%-Q?cpTEBU0Pqq|qwv8mAs{1&5JPInCtPuCRa0JfhN5d* z3~^I@bW~F`487rK8pD2}K0Bsyy+1!zE3Sqj2qPjPD&q!ZhN@xq70uy8WimcgG__+X zLrW-ihc~+e(Q`Cm=9(Y)C;i0HyS8fR3?X}Xk#SJ7W zgF7BVkv@ee5ypc{Hp|8AH%=lg7XcD>~X-b41M>UR<@L zdM$ZwQJG$gTccV8IXslGFC&k_e-?CJ+8M#Dpr+tGhE1<1%2{jR?$j9aOW(0pS*_S+ z2pk(d!H}q{x@b7#jxbxiqfsPzChURHdqYJV3tN~}w~(q&j1lcsmgxVIk42av+B6)q zD^66GId#2VEAA99gd4)LUm2FoAfM{GFpo8ES;B3WrGAci@`)-9NSwxyC6n%mkmsW( zg(BG!z2)I24@i{C@4kV({Q{}<6|oB!f->0Th%qD^yu~%&GfZu} z(hyb8Wf*Y8TiF5?QrNQmaxi$SvAc&2R;S5)21Y{rqoH3^dnrjTZs457{}6;bG>UEwALH5!g( zqhrqnq|*v!pfdFD`>VlP;p(1mkYoI48c;vPf1)v0L!T2s3qooa^7 zM=H==3)Sb?EaL$lN_eCohsDzh9uk8+SM8c$ z7%Uo=DEZBbaCUjcBuipTcy+t>oHB0;PdKDq%&=PaYub}{Y~QJhbt7<0p6rUbKm~@r zl5o9ew(Bt{1xkf5QlQIZ7@%5H$ctJ5{aPkXw^es5|3$IqQ4nLXax*rXJ53z z_P#;Ne#f~l0R+o5#%KmUV1>qBS`rUK9*Z;v_+@g4(mXXAJ;3?+0WRjV`;hi=^((H& vQ*C70(Av0tfcu}xt-~2SGr&j4_(aD)p>+>d@$_&`(K`g%p%m%Hu4CvAVUa7U literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$YieldFunction.class b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler$YieldFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..abf3597eb5d61b9eed7cc011c89da093bfc848a3 GIT binary patch literal 971 zcmah|ZEw<06n-uY3bo@+Hs|}CINp@v{D?7GCYvN3Gr?f^WC~oNcxmHpOX5E=eo`}a z@q<6WA7wn9ETNz=P0l$z_j#V4bI<9|U*CTKXyTEI2%-wsG{g{R$WF|esr#NK^ppOC z4?LG4CHY(5lDzHMZC?n6-I8$*6Q(_y!y4t)R1yg!6{s36L1U;pa-<92oanRZo-VAu zt50068@|~YjQP+PTo!s37sEr}9(a~xGsL~I^tZhKdx@3Njk9$T4iMQo5$x zm!k#!$Chn*PZ*-5ayN-QHWX}XxPmQ)omKjBxeUrkIDJ#lC2fW)Jo=Mw1fth8T*nOt zt=DQAPhWLfN9}!sVJplC?!l9mJ)%Bt;kJTp4R^4^un{VRU|m!AoFO?gr71`5$!msY zX+`WD)d;7l|A0Zm3Ta-XRTOYf!LEiPN(}iBXx|HP~|vauMiMRp9e@NM0pWg5o{oeghlu_`3iA literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.class b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..ddbe0ff8b10b50bfe86c9ee24fd63a0c9832b9f0 GIT binary patch literal 4901 zcmbVQ30PFu75*O#^O)hH2!aeI3Wg*wqoR_=gi#|Bv>=NLqL?V(V|c>AV+Lp5h$OAq z%+f4vlA0K8V%l`EX|;_DgON0iwoOvI*S5BH-}ilQZIb`KnE_`YEnnx;_vYPqmj9mf zpL5S}_O(+l0;t7B2hxzP!X}UbyMlSaP_K|ylh65*7>R|u5KG-vo^ zI%GDk61ZAMEY}|ho0?(N1`KGPp$v@a`5fk>^@@wZIRa@;7%%it_Z z*?59p$@@;k)MCCDYozj970gai9)o64--~*IwP;X~HJ}H&NTF)RZUUhbG0j2~npLb5 zSdR?~%91ucd8n)|q`(mf4mSD?!%ySv3-z)PS_L+uO+jWj-slu8O+h=k&19z4*T-so zvp_qxuq^%I+WrA^$a1trc7dA(wqhH}HlXW$EGq^+wOe^JUXOnq@S;<|2bP!^)cW*l zGXY$wmleHTpj*DQ4QS!8l=chsTGG1V@Ah{Z`Z~Ulehq>CnBSmbNXekU0CrHdD;Qv# zQHU-LVF6Qy!5PxSk$zoPkCfdhFo<1j+NQ-M1%(sx9pjkAm0JXE#oH(yGooN&N+c60 zOyOK&*@@k_O~vg3ci_&{&J!0RZdMlig=-S#Cb~)`_6Xc9^WZRpoxz}?YXKGaPSOEt zL!n?u`hADM{dj=sqIIiPr(hgowydUy1m1~vS=M{QR?|yOXuK6VaStAmMerznPtq!7 z=l5c-z+-rvq}i_djYx<|nb?XfpjPL9LSR1*uvj)#*R^)E)U9c%X6Z~!%ov19JSp%L z4zkCFv_YMzpQIk+(&c1BCEhFWK0HG}!2#0<1{e@qS-q^658#6;J|u7mA677JoWG5l z*~8fNYvf8s8H>Rp=|==UDv^rzy4r>t<4|R=j|hAWAE*6rq*L}una#SCfG0>H19Vj2 znCuS@LkpYje%ZT0_!7QMn_-=!%=}3RG@%@0B~ad$iLWvhLo!w> zzBaWJ#ft1Wh;zu##3B{noSJrvJio`a&m&*Ox2HB*Eq3ApvNQ2LW}~CS;2heKXvd)r z8AeIU9|-&qKO$*%%GsfL`{V&hVG+wV&g@M5gh$E*>sExwtQLQFfW(o-*Z5|G*Rtej zPvu-#;g#G@)=M0n4qXHn1{> z;#xdv>sT?%d`5ioceVs0A)mh5FE=_vrYP|vW1&RO*4Ctl%|=~@gI+~lAfSh8So>j} zj~VgPJUgLf&3Y8Ow1kKviOmxGrTjz*i&^luP$r7xPau9Pl5N$xvuW|3D+g@r&e_?z zb3BKFpYnSee#Zao1lD(+#Jp$oodZAT^%s1)66urx9B$7sC?imh@c!rDy>kd1eCc)kmVjlPJ2$)D018RICBKEhEe493}cRa{xIgbqquV1Vvz;V3me_K zuncoJxLtu29Pw|U?O);7aSsx{LJt}46PWWHzr+C9t;JQmF2ZkkmH4lsF$rdxTgrOo zM^P5V!c?8rmd@h1PRXTvUJ}K1sp9pPcvW0{JyF}}V!nR}`dw#~@m|Wi` zxfs|F`=Qrgb-V0yOQHzv$xsfxergQs5~~3T#e|962flpS1)FJ(lF*VLV5%#QWUi5<(QiQJmb5yqIUp3k6?1 zN*w}7(HV=>HWCipqa6{J{7w{N7i(<@Ww?cvcPlGzH~+wL8wq(kBXtLd?>iZ@J(Rc` zcX1qi2={V$yq^Qv19%1x;xJc^;9(9hkKi;OwW68_+kdcJ#cuw)D39RExpNp;{!oci zq=A8zJ*m`FJPgfKz}WS8BuP$hb!x*nJ&aGw+yam$L||2{`2`LzF;kUWfbS+!q*cE-x$Stx$rG6jC+dJ=98Gg zZO+3%p59Lr@t?-Lcu`l<>*8SOWW2_a57Ll99Y|669 z{F%>b_zV8Zdk$;Gi}N_gp{a@QFW_%nt>S7EW&Un=a4q(cPX9q>pXL3ZTs_D8zj!~- K`@bzsOYRLLg$Pdo literal 0 HcmV?d00001 diff --git a/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.java b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.java new file mode 100644 index 00000000..5172afe2 --- /dev/null +++ b/jse/src/main/java/org/luaj/vm2/libs/jse/LuaScheduler.java @@ -0,0 +1,224 @@ +package org.luaj.vm2.libs.jse; + +import java.util.Comparator; +import java.util.PriorityQueue; + +import org.luaj.vm2.Globals; +import org.luaj.vm2.LuaError; +import org.luaj.vm2.LuaString; +import org.luaj.vm2.LuaThread; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.Varargs; +import org.luaj.vm2.libs.VarArgFunction; + +/** + * Cooperative host-side scheduler for Lua tasks that use explicit wait/yield calls. + *

+ * This does not change luaj's coroutine implementation. It provides a small host + * API for scheduling resumptions and timer-driven waits. + */ +public class LuaScheduler { + + public interface Clock { + long nowMillis(); + } + + private static final Clock SYSTEM_CLOCK = new Clock() { + public long nowMillis() { + return System.currentTimeMillis(); + } + }; + + private static final LuaString WAIT_SIGNAL = LuaValue.valueOf("__luaj_scheduler_wait"); + private static final LuaString YIELD_SIGNAL = LuaValue.valueOf("__luaj_scheduler_yield"); + + private final Globals globals; + private final Clock clock; + private final PriorityQueue queue = new PriorityQueue(11, new Comparator() { + public int compare(ScheduledTask a, ScheduledTask b) { + if (a.wakeAtMillis != b.wakeAtMillis) { + return a.wakeAtMillis < b.wakeAtMillis ? -1 : 1; + } + if (a.eligiblePass != b.eligiblePass) { + return a.eligiblePass < b.eligiblePass ? -1 : 1; + } + if (a.sequence == b.sequence) { + return 0; + } + return a.sequence < b.sequence ? -1 : 1; + } + }); + + private long sequence; + private long pass; + + public LuaScheduler(Globals globals) { + this(globals, SYSTEM_CLOCK); + } + + public LuaScheduler(Globals globals, Clock clock) { + this.globals = globals; + this.clock = clock; + installIntoGlobals(); + } + + public Globals getGlobals() { + return globals; + } + + public ScheduledTask spawn(String script, String chunkname) { + return spawn(globals.load(script, chunkname)); + } + + public ScheduledTask spawn(LuaValue function) { + return spawn(function, LuaValue.NONE); + } + + public ScheduledTask spawn(LuaValue function, Varargs args) { + ScheduledTask task = new ScheduledTask(new LuaThread(globals, function.checkfunction())); + task.pendingArgs = args; + schedule(task, clock.nowMillis(), 0); + return task; + } + + public boolean hasPendingTasks() { + return !queue.isEmpty(); + } + + public long millisUntilNextTask() { + ScheduledTask next = queue.peek(); + if (next == null) { + return -1; + } + long delay = next.wakeAtMillis - clock.nowMillis(); + return delay > 0 ? delay : 0; + } + + public int runReadyTasks() { + long now = clock.nowMillis(); + long currentPass = ++pass; + int ran = 0; + while (true) { + ScheduledTask task = queue.peek(); + if (task == null || task.wakeAtMillis > now || task.eligiblePass > currentPass) { + return ran; + } + queue.poll(); + if (task.done) { + continue; + } + resumeTask(task, now, currentPass); + ran++; + } + } + + private void resumeTask(ScheduledTask task, long now, long currentPass) { + Varargs args = task.pendingArgs; + task.pendingArgs = LuaValue.NONE; + Varargs result = task.thread.resume(args); + + if (!result.arg1().toboolean()) { + task.done = true; + task.failure = new LuaError(result.arg(2).tojstring()); + return; + } + + LuaValue signal = result.arg(2); + if (signal.raweq(WAIT_SIGNAL)) { + long delay = result.arg(3).optlong(0); + schedule(task, now + Math.max(0, delay), currentPass + 1); + return; + } + if (signal.raweq(YIELD_SIGNAL)) { + task.lastYield = result.subargs(3); + schedule(task, now, currentPass + 1); + return; + } + + if ("dead".equals(task.thread.getStatus())) { + task.done = true; + task.result = result.subargs(2); + return; + } + + task.lastYield = result.subargs(2); + schedule(task, now, currentPass + 1); + } + + private void schedule(ScheduledTask task, long wakeAtMillis, long eligiblePass) { + task.wakeAtMillis = wakeAtMillis; + task.eligiblePass = eligiblePass; + task.sequence = sequence++; + queue.add(task); + } + + private void installIntoGlobals() { + globals.set("wait", new WaitFunction()); + globals.set("yield", new YieldFunction()); + globals.set("spawn", new SpawnFunction()); + } + + private final class WaitFunction extends VarArgFunction { + public Varargs invoke(Varargs args) { + long delay = args.arg(1).optlong(0); + return globals.yield(LuaValue.varargsOf(WAIT_SIGNAL, LuaValue.valueOf(Math.max(0, delay)))); + } + } + + private final class YieldFunction extends VarArgFunction { + public Varargs invoke(Varargs args) { + return globals.yield(LuaValue.varargsOf(YIELD_SIGNAL, args)); + } + } + + private final class SpawnFunction extends VarArgFunction { + public Varargs invoke(Varargs args) { + ScheduledTask task = spawn(args.checkfunction(1), args.subargs(2)); + return task.thread; + } + } + + public static final class ScheduledTask { + private final LuaThread thread; + private Varargs pendingArgs = LuaValue.NONE; + private Varargs result = LuaValue.NONE; + private Varargs lastYield = LuaValue.NONE; + private LuaError failure; + private boolean done; + private long wakeAtMillis; + private long eligiblePass; + private long sequence; + + private ScheduledTask(LuaThread thread) { + this.thread = thread; + } + + public LuaThread getThread() { + return thread; + } + + public boolean isDone() { + return done; + } + + public boolean isFailed() { + return failure != null; + } + + public LuaError getFailure() { + return failure; + } + + public Varargs getResult() { + return result; + } + + public Varargs getLastYield() { + return lastYield; + } + + public long getWakeAtMillis() { + return wakeAtMillis; + } + } +} diff --git a/jse/src/test/java/org/luaj/vm2/libs/jse/LuaSchedulerTest.java b/jse/src/test/java/org/luaj/vm2/libs/jse/LuaSchedulerTest.java new file mode 100644 index 00000000..4bc5a9b8 --- /dev/null +++ b/jse/src/test/java/org/luaj/vm2/libs/jse/LuaSchedulerTest.java @@ -0,0 +1,69 @@ +package org.luaj.vm2.libs.jse; + +import junit.framework.TestCase; + +import org.luaj.vm2.Globals; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; + +public class LuaSchedulerTest extends TestCase { + + public void testWaitAndYieldRunCooperatively() { + TestClock clock = new TestClock(); + Globals globals = JsePlatform.standardGlobals(); + LuaScheduler scheduler = new LuaScheduler(globals, clock); + + globals.load( + "hits = {}\n" + + "spawn(function()\n" + + " table.insert(hits, 'a')\n" + + " wait(10)\n" + + " table.insert(hits, 'b')\n" + + " yield('pause')\n" + + " table.insert(hits, 'c')\n" + + "end)\n", + "scheduler.lua" + ).call(); + + assertEquals(1, scheduler.runReadyTasks()); + LuaTable hits = globals.get("hits").checktable(); + assertEquals("a", hits.get(1).tojstring()); + assertTrue(hits.get(2).isnil()); + + clock.now = 9; + assertEquals(0, scheduler.runReadyTasks()); + assertTrue(hits.get(2).isnil()); + + clock.now = 10; + assertEquals(1, scheduler.runReadyTasks()); + assertEquals("b", hits.get(2).tojstring()); + assertTrue(hits.get(3).isnil()); + + assertEquals(1, scheduler.runReadyTasks()); + assertEquals("c", hits.get(3).tojstring()); + assertFalse(scheduler.hasPendingTasks()); + } + + public void testSpawnReturnsThreadHandle() { + TestClock clock = new TestClock(); + Globals globals = JsePlatform.standardGlobals(); + LuaScheduler scheduler = new LuaScheduler(globals, clock); + + LuaValue thread = globals.load( + "return spawn(function() wait(1) end)\n", + "spawn.lua" + ).call(); + + assertTrue(thread.isthread()); + assertEquals(1, scheduler.runReadyTasks()); + assertTrue(scheduler.hasPendingTasks()); + } + + static final class TestClock implements LuaScheduler.Clock { + long now; + + public long nowMillis() { + return now; + } + } +}