Production-Grade Obfuscation

Protect Your Lua Code

A stateful, continuation-based VM with runtime mutation and integrity-coupled execution, requiring custom dynamic analysis rather than standard VM devirtualization.

Before & After

See the Difference

Drag the slider to compare original code with Vanguard-obfuscated output

Original Lua
Vanguard Output
local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")

local function getGameData()
  local url = "https://games.roproxy.com/v1/games?universeIds=" .. game.GameId
  local response = HttpService:GetAsync(url)
  return HttpService:JSONDecode(response)
end

local function onPlayerJoin(player)
  local data = getGameData()
  print("Welcome " .. player.Name .. " to " .. data.name)
end

Players.PlayerAdded:Connect(onPlayerJoin)
return(function()local _x3ae07cfc=getfenv local _x26ccd0=bit32 or require('bit32')local _x917a75="2D:}H6G.|/M}@A$B24&2RMYSFl)(}L)nc9RmjQ7E.0]*-q%8WI?QbfZ,qRY-tUO%!}R^toRP3A2/$wZA.O3)|z&+XGWxp)w(OGIM(sJPbCU*~#HpkeZb`<pi[=Eev<4[8d~'/8Tq@8BwFJe}^DkwN,4E;.|>yD?7bGxJ'`U!$aW4aUFZ3<Lfz%Dq4+WY>FO)bJH+Ez?ggQ0@#ovbU4ZwtK-z(cM9`pbg`*4Iz+Ax`6*m'HmBzeD!uq}C:t|LF^qUE;?^&7_U@k(${'[',A$vx9i=q7wWM;{C5@Ry]L.@>}_<C/`TcX|*`}lssr&%N,c}g=e=xog7oGRx~0Qz~Nc_wT?'41<9=YBez0n--/{gQz'lxHiDxhcQ'@#+}Rm/?P2GJh{)yl[d3=_1+kO+04VBy0n'mo9]^v/i#Y~lzxbkKWc_#]U9iLpMT3(}x)x4aS]3Kxuk<Aw);BM[iXsA<9H=avy`_$#Vk!%t+I$Vc^jKl>l<qd>o9?,J%ff3j=qF?WOiZ/{NC!5~5}1F]OPuKLy}L+Q!6iZr9=9A6.B,5##WmwxE0smg4/[:Lxt&k-t;OqNXp*O2kXcJPO^_W*h5pks%Xq?7&FV&e*udqmnB1!$(|uKHQIxAH2$9~*Pa6dH=Qkrq/m$#2xwX_jevGMHs|jjX387pg,k~7>bm-t>DFExek&u6|'!q>x&Do7n|xB]9.xESb!iU_JTU`MYv{qFx>,IxjPD8SSs2vImMoA,'T><ug8m^XJU@.<0e]YA}$!):FJ5a*XFHa'j;3HzL3htxL#L_zxy(1bOh9xf--x4&*X[Xe=MVG/g(!L"local _x97b0f4bf=0 local _xcb800c=".b3f_2VS)W7!lx3N=%9[S,8D^3]eiFNPWxa[>A]sw([email protected]|8xg@E4X_@o9;=#&[H<9n~cqx{iuT[x${m__U-2FS)0@TQ$.vI.-=xPx8>Dm%#N`ytp9?Yu!(%1-ao-Eivv;uf:>;(cV)'nbYp:xME2zN0s}xSX3X{mA+iS0L4acr6a%2I'<_p3l^6PUriv[oZi<|q0Hy$qbikpIJc_ZCZ7AWw$Lb84+gVh2]BhuPzaq3h"local _x362bfc=function()return 836 end local _xc12f30,_x0c01807bd=pcall(_x362bfc,1,2)if not _xc12f30 then local _=_x0c01807bd end;local _xe1ded7c9a=0 local _x20e66c=0 local _xeaa3fe7e3=coroutine.wrap(function()local _x60d9fd=0 for _x84bda93c=1,26 do _x60d9fd=_x60d9fd+_x84bda93c coroutine.yield(_x60d9fd)end return _x60d9fd end)local _=_xeaa3fe7e3();local function _x22ab30d4(lD)local lOut={}local lPos=1 while lPos<=#lD do local lF=lD[lPos]lPos=lPos+1 for lBit=0,7 do if lPos>#lD then break end local lFV=math.floor(lF/(2^lBit))%2 if lFV==0 then if lPos+2>#lD then break end local lDist=lD[lPos]*256+lD[lPos+1]local lLen=lD[lPos+2]+3 lPos=lPos+3 local lSt=#lOut-lDist+1 if lSt<1 then lSt=1 end for lX=1,lLen do local lIdx=lSt+((lX-1)%math.max(lDist,1))lOut[#lOut+1]=lOut[lIdx]or 0 end else lOut[#lOut+1]=lD[lPos]lPos=lPos+1 end end end return lOut end local _xd7445e27=math.floor local _xcdece93=_x26ccd0.rshift local _x389e364=_x26ccd0.band local _x3856714=string.byte local _xdf1034=_x26ccd0.bxor local _x2b9b83=select local _x09caca=_x26ccd0.lrotate local _xc7ded68=table.concat local _xd2ea400b=unpack or table.unpack local _x7c052901=string.sub local _x58650d8={}local _x8a02ba4=string.char local _xa048b4={}local _x246e8c="fg&,M:H<^*A3]5c!2b=eUw#G4I$R{"for _xa480f5f4f=1,#_x246e8c do _xa048b4[_x3856714(_x246e8c,_xa480f5f4f)]=_xa480f5f4f-1 end _x58650d8[1]=bit32.band(63012,0xFF)_x58650d8[2]=bit32.bxor(_x58650d8[1],11)_x58650d8[3]=bit32.bxor(_x58650d8[2],65)_x58650d8[4]=bit32.band(_x58650d8[1]+150,0xFF)local function _xddd8df68(lInst,lConst,lSubs,lParams,lVararg,lMaxStack,lEnv,_x4536cd132,lUVP,...)local lRaw={}local lBoxed={}local lR=lRaw local lMT={__index=function(_,k)local b=lBoxed[k]if b then return b[1]else return lRaw[k]end end,__newindex=function(_,k,v)local b=lBoxed[k]if b then b[1]=v else lRaw[k]=v end end}local _x66ee20468=0xFB732791 local _x48871a03e=0x2BE21C2F local _xe77e35=0xCC333907 local _x10ba8ae5d=function()return _x66ee20468-_xe77e35 end;local _xdb3fd08=function()return _x66ee20468-_x66ee20468 end;local _x990ae3ab7=function()return _x66ee20468-_x66ee20468 end;local _xa3b92d=function()return _x48871a03e+_xe77e35 end;local lPC=1 local lTop=0 local lVA={...}local lVN=_x2b9b83('#',...)for lI=1,lParams do if lI<=lVN then lR[lI-1]=lVA[lI]end end local lUV=lUVP or{}local _x66ee20468=0xFB732791 local _x48871a03e=0x2BE21C2F local _xe77e35=0xCC333907 local _x10ba8ae5d=function()return _x66ee20468-_xe77e35 end;local _xdb3fd08=function()return _x66ee20468-_x66ee20468 end;local _x990ae3ab7=function()return _x66ee20468-_x66ee20468 end;local _xa3b92d=function()return _x48871a03e+_xe77e35 end;for _=1,math.huge do local lI=lInst[lPC]if not lI then break end local lO=lI[1]local lA=lI[2]local lB=lI[3]local lC=lI[4]lPC=lPC+1 if bit32.bxor(#lInst*31+#lConst,lMaxStack)==0x7E then if lPC==0x2 then local lL1I=2932 local lOLL=nil local _x9b172f6a=bit32.bor(lA,0)local _xb7a4363=bit32.band(lB,0x1FF)local _x426baf2bf=bit32.band(lC,0x1FF)local _x5a8833=_x9b172f6a;if lR==lRaw then lR=setmetatable({},lMT)end local _p=lSubs[_xb7a4363*512+_x426baf2bf]local _nuv=_p[7]or 0 local _cuv={}for _ui=1,_nuv do local _ps=lInst[lPC]lPC=lPC+1 if _ps[1]==0 then local _reg=_ps[3]if not lBoxed[_reg]then lBoxed[_reg]={lRaw[_reg]}lRaw[_reg]=nil end _cuv[_ui]=lBoxed[_reg]elseif _ps[1]==4 then _cuv[_ui]=lUV[_ps[3]+1]end end lR[_x9b172f6a]=_x4536cd132(_p,lEnv,_cuv)elseif lPC==0x4 then local LIIL=false local IL00=nil local _x383202=lA local _x7a3da0b,_xf522d9bcc=lB,lC local _xd2c5e9=_x383202;if _x7a3da0b==1 then return elseif _x7a3da0b==0 then local _n=lTop-_x383202+1 local _x30f414540={}for lI=0,_n-1 do _x30f414540[lI+1]=lR[_x383202+lI]end return unpack(_x30f414540,1,_n)else local _n=_x7a3da0b-1 local _x30f414540={}for lI=0,_n-1 do _x30f414540[lI+1]=lR[_x383202+lI]end return unpack(_x30f414540,1,_n)end elseif lPC==3 then local IL1I=false local OoiL=nil local _xbb3eb4=bit32.bor(lA,0)local _x205535764=bit32.band(lB,0x1FF)local _xe83b1521=bit32.band(lC,0x1FF)local _x2359ec=_xbb3eb4;local _x990e18631=0 local _xe7b148b30={}if _x205535764==0 then for lI=_xbb3eb4+1,lTop do _x990e18631=_x990e18631+1 _xe7b148b30[_x990e18631]=lR[lI]end elseif _x205535764>1 then _x990e18631=_x205535764-1 for lI=1,_x990e18631 do _xe7b148b30[lI]=lR[_xbb3eb4+lI]end end local _xd77917=table.pack((lR[_xbb3eb4])(unpack(_xe7b148b30,1,_x990e18631)))local _x63b730=_xd77917.n if _xe83b1521==0 then for lI=1,_x63b730 do lR[_xbb3eb4+lI-1]=_xd77917[lI]end lTop=_xbb3eb4+_x63b730-1 elseif _xe83b1521>1 then for lI=1,_xe83b1521-1 do lR[_xbb3eb4+lI-1]=_xd77917[lI]end end elseif lPC==5 then local Oio1=false local _x383202=lA local _x7a3da0b,_xf522d9bcc=lB,lC local _xd2c5e9=_x383202;if _x7a3da0b==1 then return elseif _x7a3da0b==0 then local _n=lTop-_x383202+1 local _x30f414540={}for lI=0,_n-1 do _x30f414540[lI+1]=lR[_x383202+lI]end return unpack(_x30f414540,1,_n)else local _n=_x7a3da0b-1 local _x30f414540={}for lI=0,_n-1 do _x30f414540[lI+1]=lR[_x383202+lI]end return unpack(_x30f414540,1,_n)end end else if lO==26 then local oIol=false local _xc38800a60=bit32.bor(lA,0)local _x72774bb4=bit32.band(lB,0x1FF)local _x4862e1d69=bit32.band(lC,0x1FF)local _x267e5a628=_xc38800a60;local _x3fcbbffd4=lR[_xc38800a60]if((_x3fcbbffd4 and true or false)~=(_x4862e1d69~=0))then lPC=lPC+1 end elseif lO==33 then local I000=true local LOIO=true local _xdec699,_x07dcfdace,_x39c7c0d46=lR[lA],lR[lA+1],lR[lA+2]local _rt={_xdec699(_x07dcfdace,_x39c7c0d46)}for lI=1,lC do lR[lA+2+lI]=_rt[lI]end if _rt[1]~=nil then lR[lA+2]=_rt[1]else lPC=lPC+1 end elseif lO==0x37 then local LoiL=true local _x51744d5c=lR[lA]or 0 local _xfa96d062=lR[lC]or 0 local _xd80981=bit32.bor(_x51744d5c,_xfa96d062)-bit32.band(_x51744d5c,_xfa96d062)-bit32.bxor(_x51744d5c,_xfa96d062)lR[lA]=(lR[lA]or 0)+_xd80981 elseif lO==0x39 then local IloI=7311 local _x9f46ea=nil;local _xa9ded25a6=268;local _xd8979c1=lR[lA]or 0 local _xdc34eae=lR[lC]or 0 local _x649366a=bit32.bor(_xd8979c1,_xdc34eae)-bit32.band(_xd8979c1,_xdc34eae)-bit32.bxor(_xd8979c1,_xdc34eae)lR[lA]=(lR[lA]or 0)+_x649366a;local _x1e523c0cb=lA elseif lO==38 then local o1O1=false local oilL=true local _xddfd34=787;local _x4497593=lR[lA]or 0 lR[lA]=bit32.bnot(bit32.bnot(_x4497593))elseif lO==0x1 then local OOii=true local _xf8e8961=lA local _x7a2c9d487,_x2fc2abd=lB,lC local _x813c2e7=_xf8e8961;local _xc204d11=lConst[_x7a2c9d487*512+_x2fc2abd]lR[_xf8e8961]=_xc204d11;lR[lA]=lR[lA]elseif lO==0x27 then local I0oo=6294 local I00I=false local _x7a60d24d=lR[lA]or 0 local _xa89ba66=(bit32.bor(_x7a60d24d,bit32.bnot(_x7a60d24d))~=0)and 1 or 0 lR[lA]=(lR[lA]or 0)*_xa89ba66 elseif lO==23 then local I1Ol=8991 local _l=(lB<256 and lR[lB]or lConst[lB-256])local _r=(function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(lC)if(_l==_r)~=(lA~=0)then lPC=lPC+1 end elseif lO==0x2 then local OIo1=nil local _x33da3fa0e=lA local _x594ca16,_xc059943c9=lB,lC local _xfdd14c=_x33da3fa0e;lR[_x33da3fa0e]=_x594ca16~=0 if _xc059943c9~=0 then lPC=lPC+1 end;local _x142b49=lA elseif lO==0x22 then local lOII=9889 local IL0I=nil local _xa5c1bb=477;local _xf631dcbba=nil;local _x0cd1d27d=lA local _xeaad601=lB local _x99c4cae0d=lC;local _xf583233b4=lR[_x0cd1d27d]local _xfe09414=(_x99c4cae0d-1)*50 if _xeaad601==0 then for lI=_x0cd1d27d+1,lTop do _xf583233b4[_xfe09414+lI-_x0cd1d27d]=lR[lI]end else for lI=1,_xeaad601 do _xf583233b4[_xfe09414+lI]=lR[_x0cd1d27d+lI]end end elseif lO==0x2d then local oIio=2380 local lLIi=true lR[lA]=lR[lA];local _xe1064d=lR[lB]or 0 lR[lA]=(lR[lA]or 0)+bit32.band(_xe1064d,bit32.bnot(_xe1064d));_=lR[lA]elseif lO==0x29 then local Iio1=true local li1l=false lR[lA]=lR[lA];local _x432e6c=lR[lA]or 0 local _x81403a=bit32.bor(bit32.band(bit32.rshift(_x432e6c,24),0xFF),bit32.lshift(bit32.band(bit32.rshift(_x432e6c,16),0xFF),8),bit32.lshift(bit32.band(bit32.rshift(_x432e6c,8),0xFF),16),bit32.lshift(bit32.band(_x432e6c,0xFF),24))_=_x81403a elseif lO==44 then local LOL1=nil local _x8834a9=lR[lB]or 0 lR[lA]=(lR[lA]or 0)+bit32.band(_x8834a9,bit32.bnot(_x8834a9))elseif lO==29 then local o0I1=false local _x77e1a7b5c=lA local _x04be39,_xcc2420=lB,lC local _x6290ef=_x77e1a7b5c;local _xfcadd3a80=0 local _x101d11={}if _x04be39==0 then for lI=_x77e1a7b5c+1,lTop do _xfcadd3a80=_xfcadd3a80+1 _x101d11[_xfcadd3a80]=lR[lI]end elseif _x04be39>1 then _xfcadd3a80=_x04be39-1 for lI=1,_xfcadd3a80 do _x101d11[lI]=lR[_x77e1a7b5c+lI]end end return(lR[_x77e1a7b5c])(unpack(_x101d11,1,_xfcadd3a80))elseif lO==47 then local lIo1=true local Loi0=4246 local _xedcffe7=620;local _xd08ffe52=0;local _x2a03dce9d=lR[lA]or 0 local _xe24f65=lR[lB]or 0 local _xf1a82fa47=(_x2a03dce9d+_xe24f65)-bit32.bxor(_x2a03dce9d,_xe24f65)-2*bit32.band(_x2a03dce9d,_xe24f65)lR[lA]=bit32.bxor(lR[lA]or 0,_xf1a82fa47)elseif lO==12 then local lol0=true local _x0f1b6e=lA local _x0e5dfa3e,_xeae05a8=lB,lC local _x657ebec=_x0f1b6e;local _x0830e3=(function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(_x0e5dfa3e)lR[_x0f1b6e]=_x0830e3+((function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(_xeae05a8))elseif lO==0x24 then local O10O=true local o1il=false local _x9b172f6a=bit32.bor(lA,0)local _xb7a4363=bit32.band(lB,0x1FF)local _x426baf2bf=bit32.band(lC,0x1FF)local _x5a8833=_x9b172f6a;if lR==lRaw then lR=setmetatable({},lMT)end local _p=lSubs[_xb7a4363*512+_x426baf2bf]local _nuv=_p[7]or 0 local _cuv={}for _ui=1,_nuv do local _ps=lInst[lPC]lPC=lPC+1 if _ps[1]==0 then local _reg=_ps[3]if not lBoxed[_reg]then lBoxed[_reg]={lRaw[_reg]}lRaw[_reg]=nil end _cuv[_ui]=lBoxed[_reg]elseif _ps[1]==4 then _cuv[_ui]=lUV[_ps[3]+1]end end lR[_x9b172f6a]=_x4536cd132(_p,lEnv,_cuv)elseif lO==35 then local o0i0=4069 local _xb86254f8=nil;local _x9ce674=lC local _x84793c=lB local _xfd61b01b=lA;for _k=_xfd61b01b,lMaxStack do lBoxed[_k]=nil end elseif lO==37 then local II0o=false local LOII=nil local _x644dd2=lA;local _x3efce2=lA local _x96187f822=lB local _x2ef9a6ec=lC;local _xf940954=lVN-lParams if _x96187f822==0 then for lI=1,_xf940954 do lR[_x3efce2+lI-1]=lVA[lParams+lI]end lTop=_x3efce2+_xf940954-1 else for lI=1,_x96187f822-1 do lR[_x3efce2+lI-1]=lVA[lParams+lI]end end elseif lO==0x0 then local LILI=3492 lR[lA]=select(1,lR[lB])elseif lO==0x11 then local I1O1=nil local oL1O=nil local _x3101e815=lA;local _x0e36be87c=bit32.bor(lA,0)local _xb5d9807=bit32.band(lB,0x1FF)local _x6577421=bit32.band(lC,0x1FF)local _x9eddca9=_x0e36be87c;local _xd99dae5b=_xb5d9807>=256 and lConst[_xb5d9807-256]or lR[_xb5d9807]local _x0eda43f3=_x6577421>=256 and lConst[_x6577421-256]or lR[_x6577421]local _x5af4bf=_xd99dae5b^_x0eda43f3 lR[_x0e36be87c]=_x5af4bf;local _xda3a765=lA elseif lO==5 then local oiIO=7137 local l1ol=true local _x442eec065=lC local _x403013f0=lB local _xcabd93163=lA;local _x4b0a85ac7=lEnv local _k=lConst[_x403013f0*512+_x442eec065]lR[_xcabd93163]=_x4b0a85ac7[_k]elseif lO==0x3e then local OOLl=nil local _xebf45e89=nil;local _xfebcd1c=883;local _x78d4322=lA;local _x79567a4=lR[lA]or 0 local _xa643a217=(bit32.bor(_x79567a4,bit32.bnot(_x79567a4))~=0)and 1 or 0 lR[lA]=(lR[lA]or 0)*_xa643a217 elseif lO==0x3C then local o1lI=5907 local _xc23f6887=lR[lA]if type(_xc23f6887)=="number"then _xc23f6887=_xc23f6887+0 elseif type(_xc23f6887)=="string"then _xc23f6887=_xc23f6887..""end elseif lO==0x3A then local oo11=nil local ol01=2245 local _xbd761748a=lR[lA]if type(_xbd761748a)=="number"then _xbd761748a=_xbd761748a+0 elseif type(_xbd761748a)=="string"then _xbd761748a=_xbd761748a..""end elseif lO==0x1C then local LOIi=true local O1Il=nil local _xbb3eb4=bit32.bor(lA,0)local _x205535764=bit32.band(lB,0x1FF)local _xe83b1521=bit32.band(lC,0x1FF)local _x2359ec=_xbb3eb4;local _x990e18631=0 local _xe7b148b30={}if _x205535764==0 then for lI=_xbb3eb4+1,lTop do _x990e18631=_x990e18631+1 _xe7b148b30[_x990e18631]=lR[lI]end elseif _x205535764>1 then _x990e18631=_x205535764-1 for lI=1,_x990e18631 do _xe7b148b30[lI]=lR[_xbb3eb4+lI]end end local _xd77917=table.pack((lR[_xbb3eb4])(unpack(_xe7b148b30,1,_x990e18631)))local _x63b730=_xd77917.n if _xe83b1521==0 then for lI=1,_x63b730 do lR[_xbb3eb4+lI-1]=_xd77917[lI]end lTop=_xbb3eb4+_x63b730-1 elseif _xe83b1521>1 then for lI=1,_xe83b1521-1 do lR[_xbb3eb4+lI-1]=_xd77917[lI]end end elseif lO==0x7 then local OLi0=nil local l0i1=true local _x044f7fd=lA local _x5f0b80a=lB local _xedd83442=lC;local _xc6f71e=lConst[_x5f0b80a*512+_xedd83442]lEnv[_xc6f71e]=lR[_x044f7fd]elseif lO==0x14 then local oiLI=nil local _x48576176=lA local _x8f1d13,_xb0cb23f3=lB,lC local _x2b9b79=_x48576176;lR[_x48576176]=(function(t)return#t end)(lR[_x8f1d13])elseif lO==4 then local LliI=2202 local _x7d1eafaa2=lA local _x302abb0b,_x157b7c44d=lB,lC local _xb8dbbd0=_x7d1eafaa2;local _uv=lUV[_x302abb0b+1]if type(_uv)=="table"then lR[_x7d1eafaa2]=_uv[1]else lR[_x7d1eafaa2]=_uv end elseif lO==0x2B then local o0IO=nil local IOIO=6305 local _x4c6543=lR[lA]or 0 _x4c6543=bit32.bxor(_x4c6543,bit32.lshift(_x4c6543,13))_x4c6543=bit32.bxor(_x4c6543,bit32.rshift(_x4c6543,17))_x4c6543=bit32.bxor(_x4c6543,bit32.lshift(_x4c6543,5))_=_x4c6543 elseif lO==0x1E then local II0i=7915 local _x383202=lA local _x7a3da0b,_xf522d9bcc=lB,lC local _xd2c5e9=_x383202;if _x7a3da0b==1 then return elseif _x7a3da0b==0 then local _n=lTop-_x383202+1 local _x30f414540={}for lI=0,_n-1 do _x30f414540[lI+1]=lR[_x383202+lI]end return unpack(_x30f414540,1,_n)else local _n=_x7a3da0b-1 local _x30f414540={}for lI=0,_n-1 do _x30f414540[lI+1]=lR[_x383202+lI]end return unpack(_x30f414540,1,_n)end elseif lO==0xB then local lIII=9824 local oI0i=true local _k=(function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(lC)lR[lA+1]=lR[lB]lR[lA]=lR[lB][_k]elseif lO==6 then local OiI1=false lR[lA]=lR[lA];lR[lA]=lR[lA];local _x1f1156=lA local _x48ec5b24=lB local _x1e0b5450=lC;local _k=(_x1e0b5450<256 and lR[_x1e0b5450]or lConst[_x1e0b5450-256])lR[_x1f1156]=lR[_x48ec5b24][_k]elseif lO==14 then local OIlI=true local l0IO=5948 local _x2e2aa11=lA local _x8e9cfe18=lB local _xc2f2402=lC;local _xf8e0d1a32=_x8e9cfe18>=256 and lConst[_x8e9cfe18-256]or lR[_x8e9cfe18]lR[_x2e2aa11]=_xf8e0d1a32*((function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(_xc2f2402))elseif lO==0x1b then local lill=false local _xd2045037f=nil;local _x66d2c5d1=nil;local _x8e88d0=lR[0];local _xb1f8ecdde=lR[lB]if(not not _xb1f8ecdde)==(lC~=0)then lR[lA]=_xb1f8ecdde else lPC=lPC+1 end elseif lO==0xd then local LI0i=true local lIoO=false local _xccdff6=lA local _x175a2743f,_x98fe008b=lB,lC local _x1672e77ab=_xccdff6;lR[_xccdff6]=(function(a,b)return a-b end)((_x175a2743f<256 and lR[_x175a2743f]or lConst[_x175a2743f-256]),(function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(_x98fe008b))elseif lO==0x35 then local OI0I=false local _x32e4ee5=nil;local _x747fb7f=286;local _xccd461=lR[lA]or 0 local _x448238e5e=lR[lC]or 0 local _x6d915704=bit32.bor(_xccd461,_x448238e5e)-bit32.band(_xccd461,_x448238e5e)-bit32.bxor(_xccd461,_x448238e5e)lR[lA]=(lR[lA]or 0)+_x6d915704;local _x9583c1=lA elseif lO==21 then local IiI1=nil local LLiI=882 local _x75a1d522=nil;_=lR[lA];local _xed351235c=lC local _x09bfe684b=lB local _x2b105395a=lA;local _s=lR[_x09bfe684b]for lI=_x09bfe684b+1,_xed351235c do _s=_s..lR[lI]end lR[_x2b105395a]=_s elseif lO==0x38 then local IIIO=nil local IIOI=3182 local _x54ead6910=lR[lA]or 0 local _x4a724b4=lR[lB]or 0 local _x71fbcf951=(_x54ead6910+_x4a724b4)-bit32.bxor(_x54ead6910,_x4a724b4)-2*bit32.band(_x54ead6910,_x4a724b4)lR[lA]=bit32.bxor(lR[lA]or 0,_x71fbcf951)elseif lO==0x33 then local OOlo=9162 local oill=false local _x7ded78b64=lR[lA]if type(_x7ded78b64)=="number"then _x7ded78b64=_x7ded78b64+0 elseif type(_x7ded78b64)=="string"then _x7ded78b64=_x7ded78b64..""end;_=lR[lA]elseif lO==25 then local loLo=4947 local _xde20c635=lC local _xcf56fac4=lB local _x7d4f112ec=lA;local _x7f774f4,_x768e543c1=(_xcf56fac4<256 and lR[_xcf56fac4]or lConst[_xcf56fac4-256]),_xde20c635>=256 and lConst[_xde20c635-256]or lR[_xde20c635]if((_x7f774f4<=_x768e543c1)and 1 or 0)~=(_x7d4f112ec~=0 and 1 or 0)then lPC=lPC+1 end elseif lO==0x3 then local l0l0=false local _i=lA while _i<=lB do lR[_i]=nil _i=_i+1 end elseif lO==0x31 then local LO0i=7776 local o0oo=8864 local _x7bf19601=0;local _x5ee36274=lR[lA]or 0 local _x1d23560e=lR[lB]or 0 local _xa6aa00d=bit32.bxor(_x5ee36274,bit32.band(_x1d23560e,0xFF))_xa6aa00d=bit32.band(_xa6aa00d*16777619,0xFFFFFFFF)_=_xa6aa00d elseif lO==0x34 then local lIIL=false local _x4d2211819=815;local _x152a4a=lR[lB]if type(_x152a4a)=="table"then local _xa4de3fcb=_x152a4a[lC]_=_xa4de3fcb end;lR[lA]=lR[lA]elseif lO==8 then local I1LI=false local OIIL=nil local _x6514d5a=lA local _x53bc515,_x8232967d=lB,lC local _x32259f51c=_x6514d5a;local _uv=lUV[_x53bc515+1]if type(_uv)=="table"then _uv[1]=lR[_x6514d5a]else lUV[_x53bc515+1]=lR[_x6514d5a]end elseif lO==0x1f then local LOLo=true local _xccd42cf0b=986;local _xebadde=lA local _x677e55e5=lB local _xc851e7=lC;local _x1bf1cc33=lR[_xebadde+2]lR[_xebadde]=lR[_xebadde]+_x1bf1cc33 local _cont=(_x1bf1cc33>0 and lR[_xebadde]<=lR[_xebadde+1])or(_x1bf1cc33<=0 and lR[_xebadde]>=lR[_xebadde+1])if _cont then lPC=lPC+(_x677e55e5*512+_xc851e7)-131071 lR[_xebadde+3]=lR[_xebadde]end elseif lO==0x3f then local lL1I=nil local _x7443bdf=603;local _xf642b483=lR[lA]or 0 local _xee9169=lR[lB]or 0 _xf642b483=bit32.bxor(_xf642b483,_xee9169)_xee9169=bit32.bxor(_xf642b483,_xee9169)_xf642b483=bit32.bxor(_xf642b483,_xee9169)_xee9169=bit32.bxor(_xf642b483,_xee9169)_xf642b483=bit32.bxor(_xf642b483,_xee9169)_=_xf642b483;lR[lA]=lR[lA]elseif lO==0x9 then local lO01=nil local _xa2ccad92=lA local _x0196aa,_xa9c8dd=lB,lC local _xfa28eec=_xa2ccad92;local _xd50261025=lR[_xa2ccad92]local _x4747622dd=_x0196aa>=256 and lConst[_x0196aa-256]or lR[_x0196aa]local _x15d0f17ec=(_xa9c8dd<256 and lR[_xa9c8dd]or lConst[_xa9c8dd-256])_xd50261025[_x4747622dd]=_x15d0f17ec elseif lO==0x41 then local OLIl=2657 local _x07eda2b=lR[lA]if type(_x07eda2b)=="number"then _x07eda2b=_x07eda2b+0 elseif type(_x07eda2b)=="string"then _x07eda2b=_x07eda2b..""end elseif lO==15 then local LL0o=true local _xe350ca=lR[0];lR[lA]=lR[lA];local _xb41cf43,_x9d4e0459=(lB<256 and lR[lB]or lConst[lB-256]),lC>=256 and lConst[lC-256]or lR[lC]local _x7ada365=_xb41cf43/_x9d4e0459 lR[lA]=_x7ada365 elseif lO==0x16 then local O00o=nil local _x3d3b4c47=lA local _x3b047351=lB local _xb72c09=lC;local _x883e7b=(_x3b047351*512+_xb72c09)-131071 lPC=lPC+_x883e7b elseif lO==0x3D then local II1o=2531 local Io1o=false local _xa6d64d=lR[lA]or 0 local _x344d5df=lR[lB]or 0 _xa6d64d=bit32.bxor(_xa6d64d,_x344d5df)_x344d5df=bit32.bxor(_xa6d64d,_x344d5df)_xa6d64d=bit32.bxor(_xa6d64d,_x344d5df)_x344d5df=bit32.bxor(_xa6d64d,_x344d5df)_xa6d64d=bit32.bxor(_xa6d64d,_x344d5df)_=_xa6d64d elseif lO==0x12 then local LOo0=false local Oli0=nil local _x91b957d00=lC local _x9dba6cee=lB local _x49a4945d=lA;lR[_x49a4945d]=-lR[_x9dba6cee]elseif lO==0x30 then local Ilo1=true local I0LI=false local _x6c697c9d5=lR[lA]or 0 local _xe3e4d0=lR[lB]or 0 local _x481d3d5ad=(_x6c697c9d5+_xe3e4d0)-bit32.bxor(_x6c697c9d5,_xe3e4d0)-2*bit32.band(_x6c697c9d5,_xe3e4d0)lR[lA]=bit32.bxor(lR[lA]or 0,_x481d3d5ad)elseif lO==64 then local oi0O=true local _xcf94dae72=lR[lA]or 0 lR[lA]=bit32.bnot(bit32.bnot(_xcf94dae72))elseif lO==0x32 then local l11I=false local _x5513becf1=lR[lA]or 0 local _x3db98e57=lR[lB]or 0 local _x7fbe2c555=bit32.bxor(_x5513becf1,bit32.band(_x3db98e57,0xFF))_x7fbe2c555=bit32.band(_x7fbe2c555*16777619,0xFFFFFFFF)_=_x7fbe2c555 elseif lO==42 then local lo1o=false local liio=true local _x527007d=lR[lA]or 0 local _x2d0a6f8ab=bit32.bor(bit32.band(bit32.rshift(_x527007d,24),0xFF),bit32.lshift(bit32.band(bit32.rshift(_x527007d,16),0xFF),8),bit32.lshift(bit32.band(bit32.rshift(_x527007d,8),0xFF),16),bit32.lshift(bit32.band(_x527007d,0xFF),24))_=_x2d0a6f8ab elseif lO==0x28 then local OioI=false local lOII=3892 local _x61a2b3=605;local _x1ea75a3=lR[lA]or 0 local _xbaa28d2=lR[lB]or 0 local _x29cf3df6d=(_x1ea75a3+_xbaa28d2)-bit32.bxor(_x1ea75a3,_xbaa28d2)-2*bit32.band(_x1ea75a3,_xbaa28d2)lR[lA]=bit32.bxor(lR[lA]or 0,_x29cf3df6d)elseif lO==0xA then local Iil1=3646 local _x5ab95c5d=lA local _xf6a5108e8=lB local _x77b524=lC;local _xd1c11de4={}lR[_x5ab95c5d]=_xd1c11de4;lR[lA]=lR[lA]elseif lO==0x3b then local oIOI=nil local loi0=nil local _x55e3faf6a=lR[lA]or 0 _x55e3faf6a=bit32.bxor(_x55e3faf6a,bit32.lshift(_x55e3faf6a,13))_x55e3faf6a=bit32.bxor(_x55e3faf6a,bit32.rshift(_x55e3faf6a,17))_x55e3faf6a=bit32.bxor(_x55e3faf6a,bit32.lshift(_x55e3faf6a,5))_=_x55e3faf6a elseif lO==16 then local lLoI=true local _x2c971e065=lC local _xba1811=lB local _xb90ab7b=lA;local _x92f818a5f=(_xba1811<256 and lR[_xba1811]or lConst[_xba1811-256])lR[_xb90ab7b]=_x92f818a5f%((function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(_x2c971e065))elseif lO==46 then local L1Ol=true local OIll=false local _xf9b488e5e=lR[lB]or 0 lR[lA]=(lR[lA]or 0)+bit32.band(_xf9b488e5e,bit32.bnot(_xf9b488e5e));local _x4784bc04=lA elseif lO==0x13 then local lI0O=false local _xc3ef01b9=lA local _x0a1636b=lB local _xc77aa86=lC;lR[_xc3ef01b9]=(lR[_x0a1636b]==false or lR[_x0a1636b]==nil)elseif lO==24 then local llo0=true local IOIO=false local _xdac623=lA local _x23f87c5=lB local _x7f33d0c7=lC;local _l=_x23f87c5>=256 and lConst[_x23f87c5-256]or lR[_x23f87c5]local _r=(function(_o)if _o>=256 then return lConst[_o-256]end return lR[_o]end)(_x7f33d0c7)if(_l<_r)~=(_xdac623~=0)then lPC=lPC+1 end elseif lO==0x20 then local oiio=nil local _xd6304f=lA;local _xde8bcd=lA;local _xd5d8bc6d8=lA local _x6d5c1e4,_xf3068f42=lB,lC local _x46a3f6=_xd5d8bc6d8;lR[_xd5d8bc6d8]=lR[_xd5d8bc6d8]-lR[_xd5d8bc6d8+2]lPC=lPC+(_x6d5c1e4*512+_xf3068f42)-131071 elseif lO==0x36 then local lILL=nil local OiOO=false local _x0a4f3e=lR[lA]or 0 _x0a4f3e=bit32.bxor(_x0a4f3e,bit32.rshift(_x0a4f3e,16))_x0a4f3e=bit32.band(_x0a4f3e*0x45D9F3B,0xFFFFFFFF)_x0a4f3e=bit32.bxor(_x0a4f3e,bit32.rshift(_x0a4f3e,16))_=_x0a4f3e end end end end local function _x4536cd132(lP,lE,lUVT)local lI,lK,lS,lPa,lV,lM=lP[1],lP[2],lP[3],lP[4],lP[5],lP[6]return function(...)return _xddd8df68(lI,lK,lS,lPa,lV,lM,lE,_x4536cd132,lUVT or{},...)end end _x58650d8[5]=bit32.band(_x58650d8[4]+60,0xFF)_x58650d8[6]=bit32.band(_x58650d8[2]+97,0xFF)_x58650d8[7]=bit32.bxor(_x58650d8[5],208)_x58650d8[8]=bit32.band(22343,0xFF)local _x17a5413b0=";VzL~Ppj.a9idu>+CW0QN-xE?)skq"for _xcc17ef08b=1,#_x17a5413b0 do _xa048b4[_x3856714(_x17a5413b0,_xcc17ef08b)]=_xcc17ef08b+29-1 end _x58650d8[9]=bit32.band(130-_x58650d8[5],0xFF)_x58650d8[10]=bit32.band(_x58650d8[7]+167,0xFF)_x58650d8[11]=bit32.band(66-_x58650d8[7],0xFF)_x58650d8[12]=bit32.band(230-_x58650d8[7],0xFF)local _x1abe436=" _lFO/[Z}Bvrt|TYJoD%6KX8mnh(S"for _xee0667c7=1,#_x1abe436 do _xa048b4[_x3856714(_x1abe436,_xee0667c7)]=_xee0667c7+58-1 end _x58650d8[13]=bit32.band(250-_x58650d8[7],0xFF)_x58650d8[14]=bit32.band(_x58650d8[2]+127,0xFF)_x58650d8[15]=bit32.bxor(_x58650d8[1],4)_x58650d8[16]=bit32.bxor(_x58650d8[2],50)local function _xb9ae7068c(lS)local lB={}for lI=1,#lS do lB[lI]=_x3856714(lS,lI)end local lD={}local lP=1 while lP<=#lB do local lR=#lB-lP+1 local lN,lO if lR>=5 then lN=5 lO=4 elseif lR>=4 then lN=4 lO=3 elseif lR>=3 then lN=3 lO=2 elseif lR>=2 then lN=2 lO=1 else break end local lV=0 for lJ=0,lN-1 do lV=lV*87+(_xa048b4[lB[lP+lJ]]or 0)end for lJ=lO-1,0,-1 do lD[#lD+1]=math.floor(lV/(256^lJ))%256 end lP=lP+lN end return lD end local function _xcdca77390(lOut)local lKL=#_x58650d8 for lI=1,#lOut do local lKI=((lI-1)+_x58650d8[((lI-1)%lKL)+1])%lKL+1 lOut[lI]=bit32.bxor(lOut[lI],_x58650d8[lKI])end local lC={}for lI=1,#lOut do lC[lI]=string.char(lOut[lI])end return table.concat(lC)end local function _x94426b62(lS)return _xcdca77390(_x22ab30d4(_xb9ae7068c(lS)))end local _x91ab1b5a={}_x91ab1b5a[2]="3zJo0(z?KT|w}}8=RNkkj^tdP{c-QprN*iNYWgRIe<O5vMpJmre9 s3Kj[.HB=xlg=*W0!lrZeE~~jp{:Gz9bEQFxOYAJ%avaW&OSpd-YBnqQ,xrif+!qC;r}#U%%l!=!Tt(|-wc[J8X(S?SF/TucvpbT4ekRB?%*>?t#oJ#n#)h!U2/wT]SoeJ8^ORaA&+0l{PH&QT<E!9p#dTlxU?_U),/(5QnVCt_ePMJ8%;IsuI$ >Ko>8|c~RI[s,u J8,{>] &n3w<;sDT/nD=BUMw2Q(gM6F9ZMjOK{f5_Vmu)JJ(KaUDIwQUvJ&#|QQD0 uxTNd/A{,+a0vc)*lH;t]YL|JKMf(~};,i{pIGG}Ra,0sWUgb?.:f^9}pPY)^F!HtNiRWJ64hdz,vk]4%Q33J*</BF!o%q9%Z60qnSFQq-ZT;[4%JaJobS<Rk~sfgZrZ9C}MQ,x=WGO *<qvYd/VS)(]T{dNPCmJoolQ;lOea{lBL%|DQxprP0p3a36#%Z[ntb/]E8I+acx<J6_mM$9i)Jf-DSxW^?UMsR|b2E.z,EB8;QiF3Q8(F2K}8Jm 0t!)SI{gZv)Z 63ZJ QcFjux]gBY>v*#_h0%[>0ZH=JX-Y eS-jtP#TDilskG&Oq5 wCcNH[Z|)jRt!uDa cZgFJ%9nvIr-xqwnB2urSw3uT#9U(dXTu-}sGX:rk6!e>?8x}J%bCJ4lT )PYBsAl]?#<ZC:+gFY]&b}qw&R/jeair{Oc:J8dbFeVH^lRULw!B]xmQqm|zzlHoblTE2vzrzt)Tuz.6OJ8ZwJPmN#$*H/q?WsBvYq<dD_l_4h%rM]kurN;KdTWJ~SJX0Zfbk[l^I}(Ewk{*#4OwXQ[QaWEc}F{eZ[qh+mYpKU?JoBdl$mdNOgZr=!Ov+Fst].Omub>b[.[{TaE<Tux_R9/^JX</bpNosu{Se$M+{wPbQeDR:l^}qkJnF3aT|%9:OTfI>JKxzEcdcB[4%Q#6i#9zbE_O~Z+e YJ_hiqbJJ{>wihpZ6JJhegGU9MtIduiY|Q2O5t>v5]>q30bJT!^t-IFgnJMXcIJmhdvj;#_rgZtSSr0>v6lw#8H?zNM*tGweOFq3(Gt]ughJ%^}l.{][4V9EJ?q2-[p)LAfVx^xH[Z$U?bsJL3eJzlA{Jm/R^L6&HE*LeoPT8K]4JDz5$)W2h(9>K,|r?r(Nl=X~DJorF|4~oZ}*H}b$Ts=>-Q$wi*>~UEDJVzPHY^kq)tbw %JKwFu.GN4S{*vZSk$Opr_K^Sh9h3)fJn$6E)O]Q89jr2(J8LtnA4&Kap]G!YB^{$MYq}+L ;FbRTBtn|//n~U>Cw3fJ88!V#Xw0SM_Q(Da}UZITtgSG-LvPPBEHx?OEw<ju_$VuJ69;T.Gz>d<6Yh:uY g*E$h}cE[&NYY}4AJ//#D&B|aPDJ8Q*Ncm+g/gi$xs ^}~(FbzB^ (sRE}5x0Hk[t=L>C]dwJ6Q(uj92q>M_-3+rru(-lUN;^Q,%=jB6)p/t[Z={T#zz<J%H$e!MTw5~hVFCOC,A<l$s>|NrM(%l=D*uq%?s>uRqCrJo$Zm;DVOQ$8%aGqj9noEG%V,am-EIl6zmElT^8R};;PrJ%:/Oj,ik5p]wShO[} aBW{<gl?K8F|A_Ii[HY0Yu9S ?J%q3sVdI5s^uBCU H4_)|?KtB_ruHeOn2Y;FzqWlvFdoaJn)B[5vo^njR2a)[+&,*Fpd?u0I!d.l&kUNNj9J[l2eD$J8mMqP*OG%wLrFGiuVsZFbcaJ_Nd92BxI(>t!F]wB&0&MJ6S~aR:.QT&XO)Sl5fSI/UtTuiT=p(BU*2|Q=aar_),OtJ8]5[2>jNjG3_P:CBEG[T2-~69:Wf2to<X:Q>0Xct42mxJK~[+A#O}>G.5E?CFZ,AFikYb>:HC:a;q&GFOjT^aW]|lJ6M)Z4$qP4&sw3sC(qFd0E8.M I&]Rvcg>>q%/~Eda*/ Jm;jbPDrAZ^v4cRT.2SjtN5lJEa/+VtYw&9N[A-}qN/$vJKVq-c {N4z;M(pkR*8TB&T{u)=3u_dZc>j)q4f_r*Iw2J8!gJAV&JPe?mn?O*%x?)}5bO+,qWY|XY]_TtfU{ChQZWJ6Vp>A q}h^uv0|}4JXoQ=4B;_Z$H|9uX^J|l!]?qQEA3Jnz_&AVdmXf-%M}rBP!=q#Fs3xx4khu8 _srs*V4v~pp4JDDEp5bXn(zXf WtfPXWB)uHI9xfn%JGI3WZUs:+Tu h0Jm[C/!MHg8z)C(,k# /5QfGEMOO.85[P^ehEf5l=uZ:kFJoHI,5>cr0H]n?Sq3?e,[Nn#Xugh4TJ#4e6)*>v^_M R*JX(!pVJz%n^vGk>dA]s^-m,D)-S)2SFv> ?[V)s<B0o5 JK]mSe86bl4g3Ug[/g<UZJX:UsV)YN.mMR3|(U .u_USXJnC(zAnD&,{Se-_ frKW ipz^NY3N$[:{jvY5:skv<S={JmMNBVB<#t*LU#qT}xbJ_ODq8d{vV;qo/+)|L*z).kbWOJ8M$Lept=Vz)0x0CBk5:}V?WV)r<Gf9j= UQ>,!].ZZa*J%5i)VTHsLgi;PcuJJToQ=-ZYN;wCCrM_zA_zK{5twr#NJ6_%v5bIn%VZ**:t_W!Ptwv?Wd)B4tYdSS|kS ej[_Zj-Jn!=]] Aav$:aG_Fo>x_B+/0&a(ww4+9?5=_,wA$uRS,;JXQh:UsTIK,t5],q(O;*} !X F9H^|]=HTteL]2Y*E,hJoHk6]FtQMeKjjDT/h=5-I+JrQqYRQv< )#0PED$tZp&&J85_f*iJD<$8DgOC>3ER/W2/q?; .%B+uu40~I%_/Sbd<J%fw,ezcujfDLj,+mZRhBTlx*0drH<W9pR[BIu/V|::~UJmolS*9nf).2xDw+Ce[rBWCPzC.otxB8,R:QoLQuti=J[J%NRQch5 T.uHQs zmJYTB/J-iYoe}iGQ-TFH>N/|;LCgJ8HFr]PsKlp.[-IJ+KXMtZ4LCu!T=l>4)%3v_+dgrJ>zDJ%>&I$dG/XgZtSf/-ES8?BQK0qeqb8vFlVPtT35/+*pg>Jh&%Fbxh/4&Xl-&WA GJN8:vZ ;f99uVuM;sYo>hTvc8fJhUVAcH[ZmG.5{[[+<re_K^SX_=05h[x+PLFqYAPrRlwWJmsUg]<-x&;oqR<Z[_svxe3U!WK/]5C_Apt0fwd,9rT8+J8dUV#Nrz^RU~!x[w.XJt]/l ?%JhvisFGkxuEUUOs(4LJK9&)UC8YmUbKJzOCAhg[I xq)}x{vvh*b!lJnQsJ#gl]JX0lTP-R}P~~p-9|ZH?MxWPkUq5f#G+_5l?F]5q5/W=r+JX#4p{06QSp]GRnZ^D>Oqzq%%Q,*z5>R44s[ I0J[(%f4J%Qm!~=~o3z)CUj[eM_dZ4nu/iZf{-TBxR=roX BFSMWMJDftw3JkZXRUVqMk$m z[4dF4W~uI(ixjXVrIq~_iDNAEJ8_2l$afoM&swFCr/[Eo-;rc|aqIh/[I,!MtUD?Lt5 XJ8W[6#P^nd{lZ|_Ct>v[veTa+OvbK}BVdiqqVZ~?[D!0eJJ6X*j9t;3&;ZL!|wd}cvjmF*+40(b[P&H.)A^.VF_uIOJ6ZGE; TgJgZrZ9Bu}pz Zu45xmn9*a+Fu=Z0KQDT6bYlJn[M}5GBd+{SUf)Z]j eT%u~Ha^fSKO?n~UFPqu<.Z%%qJoHA8~S/icRU~Wpa_p.5tafm=uW2_TJ#is&s|4L}rNItYJK<PPVY]wAgiR3H}4k)t 2eVRCABQ$JJGGGsDk5v_gtOIJofz}I?Q;_e{9^Sa~vqcON^{mds;&$>KGq.)mQ+zl2e[fJm[W=~uo8+M^?n~lk0&ilt.=JEcob= ]eui|&Y =[^SXxJ%:I/RE~QS&MG,UiG^teT+]vNah]mcaxhn>08uI+uht~^Jna|lA?(kg;4/9gv{^QjFmMBI?R-Bo>)LJEr?efkrSf 2Johtm5YN#t~~jCHdxZ%o[PWbpC]l2g/T#lcEmP*Mt/=f&JXuPI4 |Tj*Le<>q!(=>)VCi80=*SYOYWq(Fk5b, 3ah4JmD& 3aLUPV9EJ?_ChacO<IBRW<tl^ |;QG-,ISVkh9:tJ8,)cz8uYe;o_lI 42TK_E.C[ ;PPFrk?63[-CDedNSY>Jms8]epY#Wwn}FWJAI}U0,d5{s_iXnF5~z%QrexSv/8}6J8LpE5uIllM^)mQT:wkjve.tVqZYa$C0m/6N^G4k>WmGvJm{BojMHs){lZ*L}>^eV/9&{%_ZtQ%[%|,is|B$ i~^cRJDlr0!m^ptG.ckTuxkQbxi/*ZN6BTj9C^F [HWKa+(TTAJ6P3kPXL28~ o~/FIH/GO4K{el[>W<ZY*RI-KO|v|V5.$Jm/vaVc|S^~~jVm9VC2B0O%GoWI<B6J)m-3 U22rkP+D$JmZLQ]]!/6^b$}?Ts]=TkSgKu I-%# YrJ3|S;2eC$[VNJ8[J&3Wvq5gZr+rTk=)(B#T_8u-n|Y[^wzI/FvA^/OgBVJKkEZ!YtxSUb6onlk;U/tB !9?MnD-d[!gLtBk9Ha=JhCJhAqNwlbfi^vGM?}Gv-D/tH}tlipB-ih}wHs0!OpWGb##JXY4sVB Xg&M#S,9HWh%B|f~d)?+?zisC()YA#Bzd+e<jJ6 *2{.wILj6]B_ fFL4F}{/Qu%*mClg5QKl>;&V9a<LKJ8mrjI6?]~,e26qTc>e:/Cr*iqt)+?F5iD3l+K-kO8i~0J8YdC22#Ut{*t#0.)e,E0{m/][.J~wiH/QWNS|gil&%lDJ6Z+6Rwa-OG3 {,tzY5slK<C*+#[;]+ciIJ 5SwHi*=}SJooJCPL 3[jEskkY-E?q0:i{{lz:IXa&eiQJXOD+[K3,BJ8D-5;H!-tI}nx)Y-VgpNFi:i[a?J*>N>r!/=>XI9F8(=Jmhg0~(iNIUvo]gZRI#k-#U3BWAbd|T{j{3ZU}Z+tulG(Jm8B%p#xYejEqa;_C%^v/.,5aOedBZ_F<MattW|Nu R&zJXddN.=lRXG3 R5_Ym{#_,nYtkqo9u.[O*%-U=oF_zQVbJ~Y;RVJ-g^~CJCcBBa[Q/U=D:J|u9FrI-Y&Ch(S*Fqx!4xD5+O39c~;p#,<6.t Nx-kj+ZJO9iN|*S]6)}R!+Ze>XXt;wScPMgpPP)~a^TkS)bOIDs.J[w{l>,P;uC(f
Custom VM
Anti-Tamper
Encryption
Multi-Layer VM
Loopless Dispatch
Integrity Checks
Anti-Beautifier
Silent Failure
Custom VM
Anti-Tamper
Encryption
Multi-Layer VM
Loopless Dispatch
Integrity Checks
Anti-Beautifier
Silent Failure
Custom VM
Anti-Tamper
Encryption
Multi-Layer VM
Loopless Dispatch
Integrity Checks
Anti-Beautifier
Silent Failure
Custom VM
Anti-Tamper
Encryption
Multi-Layer VM
Loopless Dispatch
Integrity Checks
Anti-Beautifier
Silent Failure
Pipeline

7-Stage Obfuscation Pipeline

Your code passes through 7 transformation stages, each adding a new layer of complexity

STAGE 1

Parse & Compile

Source code is parsed and compiled into an intermediate representation. Each build produces structurally different output from the same input.

STAGE 2

Transform

Multiple transformation passes inject complexity, fuse instruction sequences, and restructure control flow to resist static analysis.

STAGE 3

VM Generation

A unique virtual machine is generated per build with randomized instruction encoding and multiple dispatch strategies.

STAGE 4

Encryption

Constants and data are encrypted with state-dependent decryption. Correct values only emerge during proper execution order.

STAGE 5

Emission

Output varies structurally across builds with non-uniform code generation patterns. No two outputs share the same structure.

STAGE 6

Anti-Tamper

Integrity verification is woven throughout execution. Tampering silently corrupts state rather than producing error messages.

STAGE 7

Output Hardening

Final output is hardened against automated cleanup, formatting tools, and structural analysis.

Intensity Levels

Choose Your Protection Level

Each level includes everything from the previous tier. Higher levels increase cost of analysis, not just output size.

FeatureLightMediumHeavyMaxExtreme
Code TransformsBasic
Fused Instructions
Control Flow Obfuscation
Data Scrambling
Decoy Handlers
String Protection
Polymorphic Output
Advanced Encoding
Tamper Detection
Integrity Verification
Self-Modifying Code
Continuation VMopt-inopt-in
Dual Instruction Set
Anti-Beautifieropt-inopt-inopt-in
Comparison

How Vanguard Compares

Standard VM obfuscators produce output that can be devirtualized with a generic lifter. Vanguard is designed so that approach doesn't generalize.

FeatureVanguardPrometheusIronBrew2Luraph
Custom VM
Per-Build Unique Output
Loopless Dispatch
Instruction Fusion
Silent Tamper Failure
Multi-Layer VM
Dual Instruction Set
Self-Modifying Code
Integrity Verification
Anti-Beautifier
Watermark Binding
Deterministic Builds
Roblox Executor Support
Targets

Built for Every Environment

Roblox

Default

Server-side scripts with full anti-tamper, environment checks, and Studio blocking. No loadstring dependency.

Roblox Executor

Executor

Client-side injection with loadstring support and Roblox API access. Optimized for executor environments.

Luau

Portable

Portable vanilla Luau with source compression via loadstring. Runs anywhere Luau does.

Deep Dive

Continuation-Based VM

A fundamentally different dispatch model that eliminates the central loop attackers rely on

Register-Based (Standard)

  • Central dispatch loop with a single control variable
  • Single point of observation reveals all execution
  • One breakpoint captures full execution trace
  • Vulnerable to generic automated devirtualization

Continuation-Based (Vanguard)

  • No central loop. Execution flows directly between handlers
  • No single point of observation — distributed execution across many independent units
  • Execution history affects future behavior — static traces don't generalize
  • Multiple transfer variations resist pattern-based analysis
  • Runtime behavior evolves — recorded traces become stale
  • Integrity is distributed — modifying any part affects all subsequent execution

The Tradeoff

~30-45% slower execution. That's the cost of fully distributed dispatch with no central control point.

When to Use It

Production code where analysis cost justifies runtime overhead. Available at Heavy+ intensity or via the --continuation-vm flag.

Start Protecting Your Code Today

Vanguard increases the cost of reverse engineering by requiring analysis to preserve execution state, structural integrity, and runtime topology simultaneously.

Get Started