CSLO Obfuscator Discontinued
Key RequiredUniversal

CSLO Obfuscator Discontinued

Universal ScriptFetchRegFetchReg 40 views 54 executesUpdated Aug 21, 2026
Unrated
00
Lua Script•3251 lines (144520 chars)
local LunarisObfuscator = Instance.new("ScreenGui")
local MainFrame = Instance.new("Frame")
local Title = Instance.new("TextLabel")
local InputLabel = Instance.new("TextLabel")
local InputBox = Instance.new("TextBox")
local OutputLabel = Instance.new("TextLabel")
local OutputBox = Instance.new("TextBox")
local ObfuscateButton = Instance.new("TextButton")
local CopyButton = Instance.new("TextButton")
local ClearButton = Instance.new("TextButton")
local AnimatedIcon = Instance.new("ImageLabel")
local TitleGlow = Instance.new("ImageLabel")
local TopBar = Instance.new("Frame")
local CloseButton = Instance.new("TextButton")
local ChangelogButton = Instance.new("TextButton")
local SaveButton = Instance.new("TextButton")

LunarisObfuscator.Name = "LunarisObfuscator"
LunarisObfuscator.Parent = game:GetService("CoreGui") or game.Players.LocalPlayer:WaitForChild("PlayerGui")
LunarisObfuscator.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
LunarisObfuscator.ResetOnSpawn = false

MainFrame.Name = "MainFrame"
MainFrame.Parent = LunarisObfuscator
MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
MainFrame.BackgroundTransparency = 0.1
MainFrame.BorderSizePixel = 0
MainFrame.Position = UDim2.new(0.3, 0, 0.2, 0)
MainFrame.Size = UDim2.new(0.4, 0, 0.6, 0)
MainFrame.ClipsDescendants = true

local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0.03, 0)
UICorner.Parent = MainFrame

local DropShadow = Instance.new("ImageLabel")
DropShadow.Name = "DropShadow"
DropShadow.Parent = MainFrame
DropShadow.BackgroundTransparency = 1
DropShadow.BorderSizePixel = 0
DropShadow.Size = UDim2.new(1, 12, 1, 12)
DropShadow.Position = UDim2.new(0, -6, 0, -6)
DropShadow.Image = "rbxassetid://139437522"
DropShadow.ImageColor3 = Color3.fromRGB(0, 0, 0)
DropShadow.ImageTransparency = 0.8
DropShadow.ScaleType = Enum.ScaleType.Slice
DropShadow.SliceCenter = Rect.new(10, 10, 118, 118)
DropShadow.ZIndex = -1

TopBar.Name = "TopBar"
TopBar.Parent = MainFrame
TopBar.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
TopBar.BorderSizePixel = 0
TopBar.Size = UDim2.new(1, 0, 0.08, 0)
TopBar.ZIndex = 3

local TopBarCorner = Instance.new("UICorner")
TopBarCorner.CornerRadius = UDim.new(0, 8)
TopBarCorner.Parent = TopBar

AnimatedIcon.Name = "AnimatedIcon"
AnimatedIcon.Parent = TopBar
AnimatedIcon.BackgroundTransparency = 1
AnimatedIcon.Position = UDim2.new(0.02, 0, 0.15, 0)
AnimatedIcon.Size = UDim2.new(0.07, 0, 0.7, 0)
AnimatedIcon.Image = "rbxassetid://139437522"
AnimatedIcon.ZIndex = 4

Title.Name = "Title"
Title.Parent = TopBar
Title.BackgroundTransparency = 1
Title.Position = UDim2.new(0.1, 0, 0, 0)
Title.Size = UDim2.new(0.8, 0, 1, 0)
Title.Font = Enum.Font.GothamBold
Title.Text = "  CSLO OBFUSCATOR v1.7.0"
Title.TextColor3 = Color3.fromRGB(220, 220, 255)
Title.TextSize = 18
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.ZIndex = 4

TitleGlow.Name = "TitleGlow"
TitleGlow.Parent = Title
TitleGlow.BackgroundTransparency = 1
TitleGlow.Size = UDim2.new(1.2, 0, 2, 0)
TitleGlow.Position = UDim2.new(-0.1, 0, -0.5, 0)
TitleGlow.Image = "rbxassetid://139437522"
TitleGlow.ImageColor3 = Color3.fromRGB(100, 150, 255)
TitleGlow.ImageTransparency = 0.7
TitleGlow.ScaleType = Enum.ScaleType.Slice
TitleGlow.SliceCenter = Rect.new(10, 10, 118, 118)
TitleGlow.ZIndex = 3

CloseButton.Name = "CloseButton"
CloseButton.Parent = TopBar
CloseButton.BackgroundColor3 = Color3.fromRGB(180, 80, 80)
CloseButton.BackgroundTransparency = 0.5
CloseButton.BorderSizePixel = 0
CloseButton.Position = UDim2.new(0.92, 0, 0.15, 0)
CloseButton.Size = UDim2.new(0.06, 0, 0.7, 0)
CloseButton.Font = Enum.Font.GothamBold
CloseButton.Text = "X"
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.TextSize = 14
CloseButton.ZIndex = 4

local CloseCorner = Instance.new("UICorner")
CloseCorner.CornerRadius = UDim.new(0.5, 0)
CloseCorner.Parent = CloseButton

ChangelogButton.Name = "ChangelogButton"
ChangelogButton.Parent = TopBar
ChangelogButton.BackgroundColor3 = Color3.fromRGB(80, 120, 200)
ChangelogButton.BackgroundTransparency = 0.5
ChangelogButton.BorderSizePixel = 0
ChangelogButton.Position = UDim2.new(0.76, 0, 0.15, 0)
ChangelogButton.Size = UDim2.new(0.07, 0, 0.7, 0)
ChangelogButton.Font = Enum.Font.GothamBold
ChangelogButton.Text = "Changelog"
ChangelogButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ChangelogButton.TextSize = 10
ChangelogButton.TextScaled = true
ChangelogButton.ZIndex = 4

SaveButton.Name = "SaveButton"
SaveButton.Parent = TopBar
SaveButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
SaveButton.BackgroundTransparency = 0.5
SaveButton.BorderSizePixel = 0
SaveButton.Position = UDim2.new(0.84, 0, 0.15, 0)
SaveButton.Size = UDim2.new(0.07, 0, 0.7, 0)
SaveButton.Font = Enum.Font.GothamBold
SaveButton.Text = "Save"
SaveButton.TextColor3 = Color3.fromRGB(255, 255, 255)
SaveButton.TextSize = 10
SaveButton.TextScaled = true
SaveButton.ZIndex = 4

local SaveCorner = Instance.new("UICorner")
SaveCorner.CornerRadius = UDim.new(0.5, 0)
SaveCorner.Parent = SaveButton
local ChangelogCorner = Instance.new("UICorner")
ChangelogCorner.CornerRadius = UDim.new(0.5, 0)
ChangelogCorner.Parent = ChangelogButton

InputLabel.Name = "InputLabel"
InputLabel.Parent = MainFrame
InputLabel.BackgroundTransparency = 1
InputLabel.Position = UDim2.new(0, 0, 0.1, 0)
InputLabel.Size = UDim2.new(1, 0, 0.05, 0)
InputLabel.Font = Enum.Font.Gotham
InputLabel.Text = "Input Script:"
InputLabel.TextColor3 = Color3.fromRGB(200, 200, 255)
InputLabel.TextSize = 14
InputLabel.ZIndex = 2

InputBox.Name = "InputBox"
InputBox.Parent = MainFrame
InputBox.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
InputBox.BorderSizePixel = 0
InputBox.Position = UDim2.new(0.02, 0, 0.15, 0)
InputBox.Size = UDim2.new(0.96, 0, 0.35, 0)
InputBox.Font = Enum.Font.Code
InputBox.Text = "print('Hello CSLO!')"
InputBox.TextColor3 = Color3.fromRGB(220, 220, 255)
InputBox.TextSize = 12
InputBox.TextWrapped = true
InputBox.TextXAlignment = Enum.TextXAlignment.Left
InputBox.TextYAlignment = Enum.TextYAlignment.Top
InputBox.ClearTextOnFocus = false
InputBox.MultiLine = true
InputBox.ZIndex = 2

local InputCorner = Instance.new("UICorner")
InputCorner.CornerRadius = UDim.new(0.02, 0)
InputCorner.Parent = InputBox

OutputLabel.Name = "OutputLabel"
OutputLabel.Parent = MainFrame
OutputLabel.BackgroundTransparency = 1
OutputLabel.Position = UDim2.new(0, 0, 0.5, 0)
OutputLabel.Size = UDim2.new(0.52, 0, 0.05, 0)
OutputLabel.Font = Enum.Font.Gotham
OutputLabel.Text = "Obfuscated Output:"
OutputLabel.TextColor3 = Color3.fromRGB(200, 200, 255)
OutputLabel.TextSize = 14
OutputLabel.ZIndex = 2

local FileNameBox = Instance.new("TextBox")
FileNameBox.Name = "FileNameBox"
FileNameBox.Parent = MainFrame
FileNameBox.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
FileNameBox.BorderSizePixel = 0
FileNameBox.Position = UDim2.new(0.53, 0, 0.505, 0)
FileNameBox.Size = UDim2.new(0.26, 0, 0.04, 0)
FileNameBox.Font = Enum.Font.Code
FileNameBox.Text = "script.lua"
FileNameBox.PlaceholderText = "filename.lua"
FileNameBox.TextColor3 = Color3.fromRGB(200, 200, 255)
FileNameBox.TextSize = 10
FileNameBox.TextScaled = true
FileNameBox.ClearTextOnFocus = false
FileNameBox.ZIndex = 2

local FileNameCorner = Instance.new("UICorner")
FileNameCorner.CornerRadius = UDim.new(0.3, 0)
FileNameCorner.Parent = FileNameBox

local LoadFileButton = Instance.new("TextButton")
LoadFileButton.Name = "LoadFileButton"
LoadFileButton.Parent = MainFrame
LoadFileButton.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
LoadFileButton.BackgroundTransparency = 0.5
LoadFileButton.BorderSizePixel = 0
LoadFileButton.Position = UDim2.new(0.80, 0, 0.505, 0)
LoadFileButton.Size = UDim2.new(0.18, 0, 0.04, 0)
LoadFileButton.Font = Enum.Font.GothamBold
LoadFileButton.Text = "LOAD FILE"
LoadFileButton.TextColor3 = Color3.fromRGB(255, 255, 255)
LoadFileButton.TextSize = 9
LoadFileButton.TextScaled = true
LoadFileButton.ZIndex = 2

local LoadFileCorner = Instance.new("UICorner")
LoadFileCorner.CornerRadius = UDim.new(0.5, 0)
LoadFileCorner.Parent = LoadFileButton

OutputBox.Name = "OutputBox"
OutputBox.Parent = MainFrame
OutputBox.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
OutputBox.BorderSizePixel = 0
OutputBox.Position = UDim2.new(0.02, 0, 0.55, 0)
OutputBox.Size = UDim2.new(0.96, 0, 0.35, 0)
OutputBox.Font = Enum.Font.Code
OutputBox.Text = ""
OutputBox.TextColor3 = Color3.fromRGB(220, 220, 255)
OutputBox.TextSize = 11
OutputBox.TextWrapped = true
OutputBox.TextXAlignment = Enum.TextXAlignment.Left
OutputBox.TextYAlignment = Enum.TextYAlignment.Top
OutputBox.ClearTextOnFocus = false
OutputBox.MultiLine = true
OutputBox.ZIndex = 2

local OutputCorner = Instance.new("UICorner")
OutputCorner.CornerRadius = UDim.new(0.02, 0)
OutputCorner.Parent = OutputBox

ObfuscateButton.Name = "ObfuscateButton"
ObfuscateButton.Parent = MainFrame
ObfuscateButton.BackgroundColor3 = Color3.fromRGB(60, 100, 200)
ObfuscateButton.BorderSizePixel = 0
ObfuscateButton.Position = UDim2.new(0.02, 0, 0.92, 0)
ObfuscateButton.Size = UDim2.new(0.3, 0, 0.06, 0)
ObfuscateButton.Font = Enum.Font.GothamBold
ObfuscateButton.Text = "OBFUSCATE"
ObfuscateButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ObfuscateButton.TextSize = 14
ObfuscateButton.ZIndex = 2

local ObfuscateCorner = Instance.new("UICorner")
ObfuscateCorner.CornerRadius = UDim.new(0.5, 0)
ObfuscateCorner.Parent = ObfuscateButton

CopyButton.Name = "CopyButton"
CopyButton.Parent = MainFrame
CopyButton.BackgroundColor3 = Color3.fromRGB(50, 150, 100)
CopyButton.BorderSizePixel = 0
CopyButton.Position = UDim2.new(0.34, 0, 0.92, 0)
CopyButton.Size = UDim2.new(0.3, 0, 0.06, 0)
CopyButton.Font = Enum.Font.GothamBold
CopyButton.Text = "COPY OUTPUT"
CopyButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CopyButton.TextSize = 14
CopyButton.ZIndex = 2

local CopyCorner = Instance.new("UICorner")
CopyCorner.CornerRadius = UDim.new(0.5, 0)
CopyCorner.Parent = CopyButton

ClearButton.Name = "ClearButton"
ClearButton.Parent = MainFrame
ClearButton.BackgroundColor3 = Color3.fromRGB(180, 80, 80)
ClearButton.BorderSizePixel = 0
ClearButton.Position = UDim2.new(0.66, 0, 0.92, 0)
ClearButton.Size = UDim2.new(0.32, 0, 0.06, 0)
ClearButton.Font = Enum.Font.GothamBold
ClearButton.Text = "CLEAR ALL"
ClearButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ClearButton.TextSize = 14
ClearButton.ZIndex = 2

local ClearCorner = Instance.new("UICorner")
ClearCorner.CornerRadius = UDim.new(0.5, 0)
ClearCorner.Parent = ClearButton

local function animateIcon()
	local TweenService = game:GetService("TweenService")
	local rotationGoal = {Rotation = 360}
	local rotationInfo = TweenInfo.new(4, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, math.huge, false, 0)
	local rotationTween = TweenService:Create(AnimatedIcon, rotationInfo, rotationGoal)
	rotationTween:Play()
	while true do
		local pulseUp = TweenService:Create(AnimatedIcon, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0.08, 0, 0.8, 0)})
		local pulseDown = TweenService:Create(AnimatedIcon, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0.07, 0, 0.7, 0)})
		pulseUp:Play()
		pulseUp.Completed:Wait()
		pulseDown:Play() 
		pulseDown.Completed:Wait()
		task.wait(2)
	end
end
coroutine.wrap(animateIcon)()

local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local dragging = false
local dragStart = Vector2.new(0,0)
local startPos = UDim2.new(0,0,0,0)

local function updateFramePosition(input)
	local delta = input.Position - dragStart
	local newPos = UDim2.new(startPos.X.Scale, startPos.X.Offset+delta.X, startPos.Y.Scale, startPos.Y.Offset+delta.Y)
	TweenService:Create(MainFrame, TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {Position=newPos}):Play()
end

TopBar.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		dragging=true
		dragStart=input.Position
		startPos=MainFrame.Position
		TweenService:Create(TopBar, TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0.3}):Play()
		input.Changed:Connect(function()
			if input.UserInputState == Enum.UserInputState.End then
				dragging=false
				TweenService:Create(TopBar, TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0}):Play()
			end
		end)
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then updateFramePosition(input) end
end)

CloseButton.MouseButton1Click:Connect(function()
	local tw = TweenService:Create(MainFrame, TweenInfo.new(0.3,Enum.EasingStyle.Back,Enum.EasingDirection.In), {Position=UDim2.new(0.5,0,-1,0),Size=UDim2.new(0,0,0,0)})
	tw:Play()
	tw.Completed:Wait()
	LunarisObfuscator:Destroy()
end)

local function setupButtonHover(btn)
	btn.MouseEnter:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0.1}):Play() end)
	btn.MouseLeave:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0}):Play() end)
end

setupButtonHover(ObfuscateButton)
setupButtonHover(CopyButton)
setupButtonHover(ClearButton)
setupButtonHover(CloseButton)
setupButtonHover(ChangelogButton)
setupButtonHover(SaveButton)

local AutoSaveEnabled = false
SaveButton.MouseButton1Click:Connect(function()
	AutoSaveEnabled = not AutoSaveEnabled
	if AutoSaveEnabled then
		SaveButton.BackgroundColor3 = Color3.fromRGB(0, 170, 0) 
		SaveButton.BackgroundTransparency = 0.2
	else
		SaveButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
		SaveButton.BackgroundTransparency = 0.5
	end
end)

TweenService:Create(MainFrame, TweenInfo.new(0.5,Enum.EasingStyle.Back,Enum.EasingDirection.Out), {Position=UDim2.new(0.3,0,0.2,0),Size=UDim2.new(0.4,0,0.6,0)}):Play()

local ChangelogFrame = Instance.new("Frame")
local ChangelogTextLabel = Instance.new("TextLabel")
local ChangelogCloseButton = Instance.new("TextButton")
ChangelogFrame.Name="ChangelogFrame"
ChangelogFrame.Parent=LunarisObfuscator
ChangelogFrame.BackgroundColor3=Color3.fromRGB(180,220,255); ChangelogFrame.BackgroundTransparency=0.9
ChangelogFrame.BorderSizePixel=0; ChangelogFrame.Position=UDim2.new(0.35,0,0.25,0)
ChangelogFrame.Size=UDim2.new(0.3,0,0.5,0); ChangelogFrame.Visible=false
local CFCorner=Instance.new("UICorner"); CFCorner.CornerRadius=UDim.new(0.03,0)
CFCorner.Parent=ChangelogFrame

ChangelogTextLabel.Name="ChangelogTextLabel"; ChangelogTextLabel.Parent=ChangelogFrame
ChangelogTextLabel.BackgroundTransparency=1
ChangelogTextLabel.Position=UDim2.new(0.05,0,0.05,0)
ChangelogTextLabel.Size=UDim2.new(0.9,0,0.9,0);
ChangelogTextLabel.Font=Enum.Font.GothamBold
ChangelogTextLabel.Text="CSLO Obfuscator v1.7.0\n- Full Custom VM\n- Bytecode Encryption\n- LWZ + Base92 Compression\n- FeedBack Plezzz"
ChangelogTextLabel.TextColor3=Color3.fromRGB(255,255,255)
ChangelogTextLabel.TextSize=16
ChangelogTextLabel.TextXAlignment=Enum.TextXAlignment.Left
ChangelogTextLabel.TextYAlignment=Enum.TextYAlignment.Top
ChangelogTextLabel.TextWrapped=true

ChangelogCloseButton.Name="ChangelogCloseButton"
ChangelogCloseButton.Parent=ChangelogFrame
ChangelogCloseButton.BackgroundColor3=Color3.fromRGB(180,80,80); ChangelogCloseButton.BackgroundTransparency=0.5
ChangelogCloseButton.BorderSizePixel=0; ChangelogCloseButton.Position=UDim2.new(0.9,0,0.02,0)
ChangelogCloseButton.Size=UDim2.new(0.08,0,0.08,0); ChangelogCloseButton.Font=Enum.Font.GothamBold
ChangelogCloseButton.Text="X"; ChangelogCloseButton.TextColor3=Color3.fromRGB(255,255,255); ChangelogCloseButton.TextSize=14
local CCCorner=Instance.new("UICorner"); CCCorner.CornerRadius=UDim.new(0.5,0)
CCCorner.Parent=ChangelogCloseButton
setupButtonHover(ChangelogCloseButton)

ChangelogButton.MouseButton1Click:Connect(function()
	ChangelogFrame.Visible=true
	TweenService:Create(ChangelogFrame, TweenInfo.new(0.3,Enum.EasingStyle.Back,Enum.EasingDirection.Out), {Position=UDim2.new(0.35,0,0.25,0),Size=UDim2.new(0.3,0,0.5,0)}):Play()
end)

ChangelogCloseButton.MouseButton1Click:Connect(function()
	local tw=TweenService:Create(ChangelogFrame, TweenInfo.new(0.2,Enum.EasingStyle.Back,Enum.EasingDirection.In), {Position=UDim2.new(0.35,0,0.2,0),Size=UDim2.new(0.3,0,0,0)})
	tw:Play(); tw.Completed:Wait(); ChangelogFrame.Visible=false
end)

local varCounter = 0
local usedVars = {}

local function newVar()
    local name = ""
    local temp = varCounter
    repeat
        local rem = temp % 52
        local charCode = (rem < 26) and (97 + rem) or (65 + rem - 26)
        name = string.char(charCode) .. name
        temp = math.floor(temp / 52) - 1
    until temp < 0
    
    varCounter = varCounter + 1
    return "_" .. name 
end

local function lex(src)
	local toks = {}
	local len = #src
	local pos = 1
	local line = 1
	local col = 1

	local function byte(n) return string.byte(src, pos+(n or 0)) end
	local function sub(s,e) return string.sub(src, s, e) end
	local function isA(c) return (c>=65 and c<=90) or (c>=97 and c<=122) or c==95 end
	local function isD(c) return c>=48 and c<=57 end
	local function isAN(c) return isA(c) or isD(c) end
	local function isH(c) return isD(c) or (c>=65 and c<=70) or (c>=97 and c<=102) end
	local function isWS(c) return c==32 or c==9 end

	local function adv(n)
		n = n or 1
		for i = 1, n do
			local c = string.byte(src, pos)
			pos = pos + 1
			if c == 10 then line = line + 1; col = 1 else col = col + 1 end
		end
	end

		local KW = {
		["and"]=1,["break"]=1,["continue"]=1,["do"]=1,["else"]=1,
		["elseif"]=1,["end"]=1,["false"]=1,["for"]=1,["function"]=1,
		["if"]=1,["in"]=1,["local"]=1,["nil"]=1,["not"]=1,["or"]=1,
		["repeat"]=1,["return"]=1,["then"]=1,["true"]=1,["until"]=1,
		["while"]=1,
	}

	local function addT(tType, v, r, sPos, sCol, sLine)
		toks[#toks+1] = {
			raw = r or v,
			type = tType,
			index = sPos,
			secondarytype = tType,
			column = sCol,
			length = pos - sPos,
			line = sLine,
			endindex = pos - 1,
			value = v
		}
	end

	local function skipLine()
		while pos<=len and byte()~=10 and byte()~=13 do adv() end
	end

	local function readLong()
		local eq=0; adv()
		while byte()==61 do eq=eq+1; adv() end
		if byte()~=91 then return nil end; adv()
		if byte()==10 then adv() elseif byte()==13 then adv(); if byte()==10 then adv() end end
		local cl="]"..string.rep("=",eq).."]"
		local s2=string.find(src, cl, pos, true)
		if not s2 then error("unfinished long string at "..pos) end
		local content = sub(pos, s2-1)
		
		for i=1, #content do
			local c = string.byte(content, i)
			if c == 10 then line = line + 1; col = 1 else col = col + 1 end
		end
		
		pos = s2 + #cl
		col = col + #cl
		return content
	end

	local function readStr(q)
		adv(); local buf={}
		while pos<=len do
			local c=byte()
			if c==q then adv(); break end
			if c==92 then
				adv(); local e=byte(); adv()
				if e==110 then buf[#buf+1]="\n"
				elseif e==116 then buf[#buf+1]="\t"
				elseif e==114 then buf[#buf+1]="\r"
				elseif e==92 then buf[#buf+1]="\\"
				elseif e==39 then buf[#buf+1]="'"
				elseif e==34 then buf[#buf+1]='"'
				elseif e==48 then buf[#buf+1]="\0"
				elseif e==117 then
					if byte()==123 then
						adv(); local hs=""
						while byte()~=125 do hs=hs..string.char(byte()); adv() end
						adv()
						local cp=tonumber(hs,16) or 0
						if cp<128 then buf[#buf+1]=string.char(cp)
						elseif cp<2048 then buf[#buf+1]=string.char(192+math.floor(cp/64),128+cp%64)
						else buf[#buf+1]=string.char(224+math.floor(cp/4096),128+math.floor(cp%4096/64),128+cp%64) end
					end
				elseif e>=48 and e<=57 then
					local ns=string.char(e)
					if byte()>=48 and byte()<=57 then ns=ns..string.char(byte()); adv() end
					if byte()>=48 and byte()<=57 then ns=ns..string.char(byte()); adv() end
					buf[#buf+1]=string.char(tonumber(ns))
				else buf[#buf+1]=string.char(e) end
			else buf[#buf+1]=string.char(c); adv() end
		end
		return table.concat(buf)
	end

	local function readNum()
		local s=pos
		if byte()==48 and (byte(1)==120 or byte(1)==88) then
			adv(2)
			while pos<=len and isH(byte()) do adv() end
			if byte()==46 then adv(); while pos<=len and isH(byte()) do adv() end end
			if byte()==112 or byte()==80 then adv()
				if byte()==43 or byte()==45 then adv() end
				while pos<=len and isD(byte()) do adv() end end
		else
			while pos<=len and isD(byte()) do adv() end
			if byte()==46 and byte(1)~=46 then adv()
				while pos<=len and isD(byte()) do adv() end end
			if byte()==101 or byte()==69 then adv()
				if byte()==43 or byte()==45 then adv() end
				while pos<=len and isD(byte()) do adv() end end
		end
		return sub(s,pos-1)
	end

	while pos<=len do
		local c=byte()
		local sP, sC, sL = pos, col, line
		if isWS(c) then adv()
		elseif c==10 or c==13 then
			local r = string.char(c)
			adv()
			if c==13 and byte()==10 then r = r .. "\n"; adv() end
			addT("newline", r, r, sP, sC, sL)
		elseif c==45 and byte(1)==45 then
			adv(2)
			if byte()==91 then
				local sv=pos; adv()
				local eq2=0; while byte()==61 do eq2=eq2+1; adv() end
				if byte()==91 then
					adv()
					local cl="]"..string.rep("=",eq2).."]"
					local s2=string.find(src,cl,pos,true)
					if s2 then pos=s2+#cl else pos=len+1 end
				else pos=sv; skipLine() end
			else skipLine() end
		elseif c==34 or c==39 then
			local q=c; local s=readStr(c)
			addT("string",s, sub(sP,pos-1), sP, sC, sL)
		elseif c==91 and (byte(1)==91 or byte(1)==61) then
			adv()
			local ls=readLong()
			if ls then addT("string",ls,sub(sP,pos-1), sP, sC, sL) else pos=sP; addT("punctuation","[","[", sP, sC, sL); adv() end
		elseif isD(c) or (c==46 and isD(byte(1))) then
			local ns=readNum(); addT("number",ns, ns, sP, sC, sL)
		elseif isA(c) then
			while pos<=len and isAN(byte()) do adv() end
			local w=sub(sP,pos-1)
			if KW[w] then addT("keyword",w, w, sP, sC, sL) else addT("identifier",w, w, sP, sC, sL) end
		elseif c==46 then
			if byte(1)==46 and byte(2)==46 then adv(3); addT("punctuation","...", "...", sP, sC, sL)
			elseif byte(1)==46 then adv(2); addT("punctuation","..", "..", sP, sC, sL)
			else adv(); addT("punctuation",".", ".", sP, sC, sL) end
		elseif c==61 then
			if byte(1)==61 then adv(2); addT("punctuation","==", "==", sP, sC, sL) else adv(); addT("punctuation","=", "=", sP, sC, sL) end
		elseif c==126 and byte(1)==61 then adv(2); addT("punctuation","~=", "~=", sP, sC, sL)
		elseif c==60 then
			if byte(1)==61 then adv(2); addT("punctuation","<=", "<=", sP, sC, sL) else adv(); addT("punctuation","<", "<", sP, sC, sL) end
		elseif c==62 then
			if byte(1)==61 then adv(2); addT("punctuation",">=", ">=", sP, sC, sL) else adv(); addT("punctuation",">", ">", sP, sC, sL) end
		elseif c==58 then
			if byte(1)==58 then adv(2); addT("punctuation","::", "::", sP, sC, sL) else adv(); addT("punctuation",":", ":", sP, sC, sL) end
		elseif c==47 and byte(1)==47 then adv(2); addT("punctuation","//", "//", sP, sC, sL)
		else
			local ch=string.char(c)
			adv(); addT("punctuation",ch, ch, sP, sC, sL)
		end
	end
	addT("eof","EOF", "EOF", pos, col, line)
	return toks
end

local function renameVars(toks)
	local scope = {{}}
	local globalRename = {}

	local PROTECTED = {
		["print"]=1,["tostring"]=1,["tonumber"]=1,["type"]=1,["pairs"]=1,
		["ipairs"]=1,["next"]=1,["select"]=1,["unpack"]=1,["rawget"]=1,
		["rawset"]=1,["rawequal"]=1,["setmetatable"]=1,["getmetatable"]=1,
		["pcall"]=1,["xpcall"]=1,["error"]=1,["assert"]=1,["require"]=1,
		["math"]=1,["string"]=1,["table"]=1,["bit32"]=1,["os"]=1,["io"]=1,
		["game"]=1,["workspace"]=1,["script"]=1,["Instance"]=1,
		["Vector2"]=1,["Vector3"]=1,["Color3"]=1,["UDim"]=1,["UDim2"]=1,
		["CFrame"]=1,["Enum"]=1,["Rect"]=1,["TweenInfo"]=1,["BrickColor"]=1,
		["Region3"]=1,["Ray"]=1,["NumberRange"]=1,["ColorSequence"]=1,
		["task"]=1,["coroutine"]=1,["_G"]=1,["_ENV"]=1,["self"]=1,
		["wait"]=1,["spawn"]=1,["delay"]=1,["typeof"]=1,["warn"]=1,
		["tick"]=1,["time"]=1,["collectgarbage"]=1,
	}

	local nameMap = {}

	local function getTok(i)
		while toks[i] and toks[i].type == "newline" do i=i+1 end
		return toks[i], i
	end

	local function collectLocals()
		local i=1
		while i<=#toks do
			local t, nxt = getTok(i)
			if not t then break end
			i = nxt
			
			if t.type=="keyword" and t.value=="local" then
				local nj = i+1
				local t2, j = getTok(nj)
				if t2 and t2.type=="keyword" and t2.value=="function" then
					local t3, k = getTok(j+1)
					if t3 and t3.type=="identifier" and not PROTECTED[t3.value] then
						if not nameMap[t3.value] then nameMap[t3.value]=newVar() end
					end
				elseif t2 and t2.type=="identifier" then
					while t2 and t2.type=="identifier" do
						if not PROTECTED[t2.value] and not nameMap[t2.value] then
							nameMap[t2.value]=newVar()
						end
						local tComma, nk = getTok(j+1)
						if tComma and tComma.type=="punctuation" and tComma.value=="," then
							t2, j = getTok(nk+1)
						else break end
					end
				end
			elseif t.type=="keyword" and t.value=="function" then
				local nj = i+1
				local tj, j = getTok(nj)
				while tj and not (tj.type=="punctuation" and tj.value=="(") do
					tj, j = getTok(j+1)
				end
				tj, j = getTok(j+1)
				while tj and not (tj.type=="punctuation" and tj.value==")") do
					if tj.type=="identifier" and not PROTECTED[tj.value] and not nameMap[tj.value] then
						nameMap[tj.value]=newVar()
					end
					tj, j = getTok(j+1)
				end
			elseif (t.type=="keyword" and t.value=="for") then
				local nj = i+1
				local tj, j = getTok(nj)
				while tj and not (tj.type=="keyword" and tj.value=="in") and not (tj.type=="punctuation" and tj.value=="=") do
					if tj.type=="identifier" and not PROTECTED[tj.value] and not nameMap[tj.value] then
						nameMap[tj.value]=newVar()
					end
					local tComma, nk = getTok(j+1)
					if tComma and tComma.type=="punctuation" and tComma.value=="," then
						tj, j = getTok(nk+1)
					else break end
				end
			end
			i=i+1
		end
	end
		collectLocals()

	local result = {}
	for _,t in ipairs(toks) do
		if t.type=="identifier" and nameMap[t.value] then
			local newName = nameMap[t.value]
			t.value = newName
			t.raw = newName
			t.length = #newName
			result[#result+1]=t
		else
			result[#result+1]=t
		end
	end
	return result
end

local function makeOpcodes()
	local used = {}
	local function fop()
		local val
		repeat val = math.random(1, 65535) until not used[val]
		used[val] = true
		return val
	end
	return {
		M_PUSH_REG=fop(), M_PUSH_K=fop(), M_PUSH_LIT=fop(),
		M_MOVE_CONST_ID=fop(), M_DECRYPT_CONST=fop(), M_WRITE_REG=fop(), M_TAG_TAINT=fop(), M_MASK_WRITE=fop(),
		M_FETCH_REG_ID=fop(), 
		M_POP_ALU_B=fop(), M_POP_ALU_A=fop(),
		M_ALU_ADD=fop(), M_ALU_SUB=fop(), M_ALU_MUL=fop(), M_ALU_DIV=fop(), M_ALU_MOD=fop(), M_ALU_POW=fop(), M_ALU_IDIV=fop(), M_ALU_BAND=fop(),
		M_ALU_BOR=fop(), M_ALU_BXOR=fop(), M_ALU_SHL=fop(), M_ALU_SHR=fop(), M_ALU_UNM=fop(), M_ALU_BNOT=fop(), M_ALU_NOT=fop(), M_ALU_LEN=fop(),
		M_LOADBOOL=fop(), M_LOADNIL=fop(),
		M_GETGLOBAL=fop(), M_SETGLOBAL=fop(), M_GETTABLE=fop(), M_SETTABLE=fop(), M_NEWTABLE=fop(), M_SELF=fop(), 
		M_CONCAT=fop(), M_JMP=fop(), M_EQ=fop(), M_LT=fop(), M_LE=fop(), M_TEST=fop(), M_CALL=fop(),
						M_RETURN=fop(), M_FORPREP=fop(), M_FORLOOP=fop(), M_CLOSURE=fop(), M_HALT=fop(), M_NOP=fop(), M_EXEC_SUB=fop(), M_SECURE_ERASE=fop(),
		M_GETUPVAL=fop(), M_SETUPVAL=fop(),
		SUB_OP_DEC=fop(), SUB_OP_RET=fop()
	}
end

local function parseAST(toks)
	local tp=1
	local function T()
		while toks[tp] and toks[tp].type == "newline" do tp = tp + 1 end
		return toks[tp] or {type="eof", value="EOF", raw="EOF"}
	end
	local function Tt() return T().type end
	local function Tv() return T().value end
	local function Pt(n)
		local tmp = tp
		local c = 0
		while true do
			while toks[tmp] and toks[tmp].type == "newline" do tmp = tmp + 1 end
			c = c + 1
			if c >= n then break end
			tmp = tmp + 1
		end
		local x = toks[tmp]
		return x and x.type or "eof"
	end
	local function Pv(n)
		local tmp = tp
		local c = 0
		while true do
			while toks[tmp] and toks[tmp].type == "newline" do tmp = tmp + 1 end
			c = c + 1
			if c >= n then break end
			tmp = tmp + 1
		end
		local x = toks[tmp]
		return x and x.value or ""
	end
	local function adv()
		tp=tp+1
		while toks[tp] and toks[tp].type == "newline" do tp = tp + 1 end
	end
	local function chk(t,v) if v then return T().type==t and T().value==v end return T().type==t end
	local function eat(t,v)
		if not chk(t,v) then error("Expected "..t..(v and " '"..v.."'" or "").." got "..T().type.." '"..tostring(T().value).."'") end
		local r=T(); adv(); return r
	end
	local function try(t,v) if chk(t,v) then adv(); return true end end

	local parseExpr,parseStat,parseBlock,parseFB

	local BOPS={["or"]=1,["and"]=2,["<"]=3,[">"]=3,["<="]=3,[">="]=3,["=="]=3,["~="]=3,
		[".."]=4,["+"]=5,["-"]=5,["*"]=6,["/"]=6,["%"]=6,["//"]=6,["^"]=7}
	local RASS={["^"]=true,[".."]=true}
	local ENDS={["end"]=1,["else"]=1,["elseif"]=1,["until"]=1,["eof"]=1}

	local function pSfx(base)
		while true do
			if chk("punctuation",".") then
				adv(); local f=eat("identifier").value
				base = { type="MemberExpression", base=base, identifier=f }
			elseif chk("punctuation","[") then
				adv(); local idx=parseExpr(); eat("punctuation","]")
				base = { type="IndexExpression", base=base, index=idx }
			elseif chk("punctuation",":") then
				adv(); local m=eat("identifier").value
				eat("punctuation","(")
				local args={}
				if not chk("punctuation",")") then
					args[#args+1]=parseExpr()
					while try("punctuation",",") do args[#args+1]=parseExpr() end
				end
				eat("punctuation",")")
				base = { type="CallExpression", base=base, method=m, arguments=args, isSelf=true }
			elseif chk("punctuation","(") then
				adv(); local args={}
				if not chk("punctuation",")") then
					args[#args+1]=parseExpr()
					while try("punctuation",",") do args[#args+1]=parseExpr() end
				end
				eat("punctuation",")")
				base = { type="CallExpression", base=base, arguments=args, isSelf=false }
			elseif chk("string") then
				local sv=T().value; adv()
				base = { type="CallExpression", base=base, arguments={{type="Literal", kind="string", value=sv}}, isSelf=false }
					elseif chk("punctuation","{") then
			adv()
			local fields={}
			while not chk("punctuation","}") do
				if chk("identifier") and Pt(2)=="punctuation" and Pv(2)=="=" then
					local k=T().value; adv(); adv()
					fields[#fields+1]={ key={type="Literal", kind="string", value=k}, value=parseExpr() }
				elseif chk("punctuation","[") then
					adv(); local k=parseExpr(); eat("punctuation","]"); eat("punctuation","=")
					fields[#fields+1]={ key=k, value=parseExpr() }
				else fields[#fields+1]={ key=nil, value=parseExpr() } end
				if not try("punctuation",",") then try("punctuation",";") end
			end
			eat("punctuation","}")
			base = { type="CallExpression", base=base, arguments={{type="TableLiteral", fields=fields}}, isSelf=false }
			else break end
		end
		return base
	end

	local function pPrim()
		local t=T()
		if t.type=="number" then adv(); return { type="Literal", kind="number", value=tonumber(t.value) }
		elseif t.type=="string" then adv(); return { type="Literal", kind="string", value=t.value }
		elseif t.type=="keyword" and t.value=="true" then adv(); return { type="Literal", kind="boolean", value=true }
		elseif t.type=="keyword" and t.value=="false" then adv(); return { type="Literal", kind="boolean", value=false }
		elseif t.type=="keyword" and t.value=="nil" then adv(); return { type="Literal", kind="nil", value=nil }
		elseif t.type=="punctuation" and t.value=="..." then adv(); return { type="VarargLiteral" }
		elseif t.type=="keyword" and t.value=="function" then adv(); return parseFB()
		elseif t.type=="punctuation" and t.value=="(" then
			adv(); local e=parseExpr(); eat("punctuation",")"); return pSfx(e)
		elseif t.type=="keyword" and t.value=="not" then adv(); return { type="UnaryExpression", operator="not", argument=pPrim() }
		elseif t.type=="punctuation" and t.value=="-" then adv(); return { type="UnaryExpression", operator="-", argument=pPrim() }
		elseif t.type=="punctuation" and t.value=="#" then adv(); return { type="UnaryExpression", operator="#", argument=pPrim() }
		elseif t.type=="punctuation" and t.value=="~" then adv(); return { type="UnaryExpression", operator="~", argument=pPrim() }
				elseif t.type=="punctuation" and t.value=="{" then
			adv()
			local fields={}
			while not chk("punctuation","}") do
				if chk("identifier") and Pt(2)=="punctuation" and Pv(2)=="=" then
					local k=T().value; adv(); adv()
					fields[#fields+1]={ key={type="Literal", kind="string", value=k}, value=parseExpr() }
				elseif chk("punctuation","[") then
					adv(); local k=parseExpr(); eat("punctuation","]"); eat("punctuation","=")
					fields[#fields+1]={ key=k, value=parseExpr() }
				else fields[#fields+1]={ key=nil, value=parseExpr() } end
				if not try("punctuation",",") then try("punctuation",";") end
			end
			eat("punctuation","}")
			return { type="TableLiteral", fields=fields }
		elseif t.type=="identifier" then
			local n=t.value; adv()
			return pSfx({ type="Identifier", name=n })
		else error("Unexpected token in expression: "..t.type.." '"..t.value.."'") end
	end

		parseExpr = function(mp)
		mp=mp or 0
		local node=pPrim()
		while true do
			local op=T().value
			local pr=BOPS[op]
			if not pr or pr<=mp then break end
			
			if (op=="+" or op=="-" or op=="*" or op=="/" or op=="%" or op=="^" or op=="..") and Pt(2)=="punctuation" and Pv(2)=="=" then
				break
			end
			
			adv()
			local np2=RASS[op] and pr-1 or pr
			local right=parseExpr(np2)
			node={ type="BinaryExpression", operator=op, left=node, right=right }
		end
		return node
	end

	parseFB = function()
		eat("punctuation","(")
		local params={}; local isva=false
		while not chk("punctuation",")") do
			if chk("punctuation","...") then isva=true; adv(); break end
			params[#params+1]=eat("identifier").value; try("punctuation",",")
		end
		eat("punctuation",")")
		local body=parseBlock(); eat("keyword","end")
		return { type="FunctionDefinition", params=params, isVararg=isva, body=body }
	end

	parseStat = function()
		local t=T()
		if t.type=="keyword" and t.value=="local" then
			adv()
			if chk("keyword","function") then
				adv(); local n=eat("identifier").value; local fb=parseFB()
				return { type="LocalFunctionDefinition", name=n, functionDef=fb }
			else
				local names={eat("identifier").value}
				while try("punctuation",",") do names[#names+1]=eat("identifier").value end
				local values={}
				if try("punctuation","=") then
					values[#values+1]=parseExpr()
					while try("punctuation",",") do values[#values+1]=parseExpr() end
				end
				return { type="LocalDefinition", names=names, values=values }
			end
		elseif t.type=="keyword" and t.value=="function" then
			adv(); local n=eat("identifier").value; local chain={n}
			while chk("punctuation",".") do adv(); chain[#chain+1]=eat("identifier").value end
			local isM=false
			if chk("punctuation",":") then adv(); chain[#chain+1]=eat("identifier").value; isM=true end
			local fb=parseFB()
			return { type="GlobalFunctionDefinition", chain=chain, isMethod=isM, functionDef=fb }
		elseif t.type=="keyword" and t.value=="return" then
			adv(); local args={}
			if not ENDS[Tv()] and not chk("punctuation",";") then
				args[#args+1]=parseExpr()
				while try("punctuation",",") do args[#args+1]=parseExpr() end
			end
			try("punctuation",";")
			return { type="ReturnStatement", arguments=args }
		elseif t.type=="keyword" and t.value=="if" then
			adv(); local clauses={}
			clauses[#clauses+1]={ condition=parseExpr(), body=parseBlock() }
			while chk("keyword","elseif") do
				adv(); clauses[#clauses+1]={ condition=parseExpr(), body=parseBlock() }
			end
			local elseBody=nil
			if try("keyword","else") then elseBody=parseBlock() end
			eat("keyword","end")
			return { type="IfStatement", clauses=clauses, elseBody=elseBody }
		elseif t.type=="keyword" and t.value=="while" then
			adv(); local cond=parseExpr(); eat("keyword","do"); local body=parseBlock(); eat("keyword","end")
			return { type="WhileStatement", condition=cond, body=body }
		elseif t.type=="keyword" and t.value=="repeat" then
			adv(); local body=parseBlock(); eat("keyword","until"); local cond=parseExpr()
			return { type="RepeatUntilStatement", body=body, condition=cond }
		elseif t.type=="keyword" and t.value=="for" then
			adv(); local vn=eat("identifier").value
			if try("punctuation","=") then
				local start=parseExpr(); eat("punctuation",","); local limit=parseExpr(); local step=nil
				if try("punctuation",",") then step=parseExpr() end
				eat("keyword","do"); local body=parseBlock(); eat("keyword","end")
				return { type="ForNumericStatement", variable=vn, start=start, limit=limit, step=step, body=body }
			else
				local names={vn}
				while not chk("keyword","in") do try("punctuation",","); if chk("identifier") then names[#names+1]=eat("identifier").value end end
				eat("keyword","in"); local iters={}
				iters[#iters+1]=parseExpr()
				while try("punctuation",",") do iters[#iters+1]=parseExpr() end
				eat("keyword","do"); local body=parseBlock(); eat("keyword","end")
				return { type="ForGenericStatement", variables=names, iterators=iters, body=body }
			end
		elseif t.type=="keyword" and t.value=="do" then
			adv(); local body=parseBlock(); eat("keyword","end"); return { type="DoStatement", body=body }
		elseif t.type=="keyword" and t.value=="break" then
			adv(); return { type="BreakStatement" }
		elseif t.type=="keyword" and t.value=="continue" then
			adv(); return { type="ContinueStatement" }
						elseif t.type=="identifier" or (t.type=="punctuation" and t.value=="(") then
			local firstExpr = parseExpr()
			local isCompound = false
			local cOp = ""
			local nxtVal = T().value
			
			if (nxtVal=="+" or nxtVal=="-" or nxtVal=="*" or nxtVal=="/" or nxtVal=="%" or nxtVal=="^" or nxtVal=="..") and Pt(2)=="punctuation" and Pv(2)=="=" then
				isCompound = true
				cOp = nxtVal
				adv(); adv()
			end

			if isCompound then
				local rhs = { parseExpr() }
				while try("punctuation",",") do rhs[#rhs+1] = parseExpr() end
				try("punctuation",";")
				rhs[1] = { type="BinaryExpression", operator=cOp, left=firstExpr, right=rhs[1] }
				return { type="AssignmentStatement", lhs={firstExpr}, rhs=rhs }
			elseif chk("punctuation","=") or chk("punctuation",",") then
				local lhs = { firstExpr }
				while try("punctuation",",") do lhs[#lhs+1] = parseExpr() end
				eat("punctuation","=")
				local rhs = { parseExpr() }
				while try("punctuation",",") do rhs[#rhs+1] = parseExpr() end
				try("punctuation",";")
				return { type="AssignmentStatement", lhs=lhs, rhs=rhs }
			else
				try("punctuation",";")
				return { type="ExpressionStatement", expression=firstExpr }
			end
		elseif t.type=="punctuation" and t.value==";" then adv()
		else adv() end
		try("punctuation",";")
	end

	parseBlock = function()
		local block = {}
		while Tt()~="eof" and not (Tt()=="keyword" and ENDS[Tv()]) do
			local s=parseStat()
			if s then block[#block+1]=s end
		end
		return block
	end

	return { type="Chunk", body=parseBlock() }
end

local function compileAST(ast, OC)
						local function newP(np, parent) return {c={},k={},ki={},np=np or 0,mr=np or 0,sc={{}},lc=np or 0,pr={},va=false,sub_c={},loopStack={},upvalues={},parent=parent} end
	
		local function getOrAddStrKey(p, str)
		local lookup = "enc_str:"..str
		if p.ki[lookup] ~= nil then
			return p.ki[lookup], p.k[p.ki[lookup]+1].key
		end
		local k_key = math.random(1, 255) + (#str * math.random(1, 255))
		local k_obj = {type="enc_string", val=str, key=k_key}
		local i = #p.k
		p.k[i+1] = k_obj
		p.ki[lookup] = i
		return i, k_key
	end

	local function addK(p,v)
		local key=type(v)..":"..tostring(v)
		if p.ki[key]~=nil then return p.ki[key] end
		local i=#p.k; p.k[i+1]=v; p.ki[key]=i; return i
	end
	
	local function emit(p,...) p.c[#p.c+1]={...}; return #p.c-1 end
	local function patch(p,i,t2) p.c[i+1][2]=t2 end
	local function aR(p) local r=p.lc; p.lc=r+1; if p.lc>p.mr then p.mr=p.lc end; return r end
	local function fR(p) p.lc=p.lc-1 end
	local function nL(p,n) local r=aR(p); p.sc[#p.sc][#p.sc[#p.sc]+1]={n=n,r=r}; return r end
		local function fL(p,n)
		for s=#p.sc,1,-1 do
			for i=#p.sc[s],1,-1 do
				if p.sc[s][i].n==n then return p.sc[s][i].r end
			end
		end
		return nil
	end
	local function resolveUpval(p, name)
		if not p.parent then return nil end
		local r = fL(p.parent, name)
		if r then
			for i, uv in ipairs(p.upvalues) do
				if uv.isLocal and uv.index == r then return i - 1 end
			end
			table.insert(p.upvalues, {isLocal = true, index = r})
			return #p.upvalues - 1
		end
		local ur = resolveUpval(p.parent, name)
		if ur then
			for i, uv in ipairs(p.upvalues) do
				if not uv.isLocal and uv.index == ur then return i - 1 end
			end
			table.insert(p.upvalues, {isLocal = false, index = ur})
			return #p.upvalues - 1
		end
		return nil
	end
	local function pushS(p) p.sc[#p.sc+1]={} end
	local function popS(p) local s=p.sc[#p.sc]; p.lc=p.lc-#s; p.sc[#p.sc]=nil end

	local function emitPUSH_REG(p, reg) return emit(p, OC.M_PUSH_REG, reg) end
	local function emitPUSH_K(p, k_idx) return emit(p, OC.M_PUSH_K, k_idx) end
	local function emitPUSH_LIT(p, val) return emit(p, OC.M_PUSH_LIT, val) end
	local function eJMP(p, target) local i=emitPUSH_LIT(p, target); emit(p, OC.M_JMP); return i end

	local function emitMOVE(p, dst, src)
		emit(p, OC.M_FETCH_REG_ID, src)
		emit(p, OC.M_WRITE_REG, dst)
	end

	local function emitALU(p, op, dst, src1, src2)
		emit(p, OC.M_PUSH_REG, src1)
		emit(p, OC.M_PUSH_REG, src2)
		emit(p, OC.M_POP_ALU_B)
		emit(p, OC.M_POP_ALU_A)
		emit(p, op)
		emit(p, OC.M_WRITE_REG, dst)
	end

	local function emitALU_UNARY(p, op, dst, src)
		emit(p, OC.M_PUSH_REG, src)
		emit(p, op)
		emit(p, OC.M_WRITE_REG, dst)
	end

			local function eCmp(p,op,dst,B,C)
		emitPUSH_LIT(p, 1); emitPUSH_REG(p, B); emitPUSH_REG(p, C); emit(p, op)
		local j1=eJMP(p, 0)
		emitPUSH_LIT(p, 0); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst)
		local j2=eJMP(p, 0)
		patch(p, j1, #p.c + 1)
		emitPUSH_LIT(p, 1); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst)
		patch(p, j2, #p.c + 1)
	end

			local function emitLOADK_NonLinearMBA(p, dst, val)
		if type(val) == "number" and val == math.floor(val) and val >= 0 and val <= 2147483647 then
			local xkey = math.random(1, 65535)
			local enc = bit32.bxor(math.floor(val), xkey)
			emitPUSH_LIT(p, enc)
			emitPUSH_LIT(p, xkey)
			emit(p, OC.M_POP_ALU_B)
			emit(p, OC.M_POP_ALU_A)
			emit(p, OC.M_ALU_BXOR)
			emit(p, OC.M_WRITE_REG, dst)
		else
			local mask = math.random(10, 9999)
			local enc_val = val - mask
			local k_idx = #p.k
			p.k[k_idx + 1] = enc_val
			p.ki["__enc_flt_" .. k_idx] = k_idx
			emitPUSH_K(p, k_idx)
			emitPUSH_LIT(p, mask)
			emit(p, OC.M_POP_ALU_B)
			emit(p, OC.M_POP_ALU_A)
			emit(p, OC.M_ALU_ADD)
			emit(p, OC.M_WRITE_REG, dst)
		end
	end

	local compileExpr, compileStat, compileBlock

	compileExpr = function(p, node, dst)
						if node.type == "Literal" then
			if node.kind == "number" then emitLOADK_NonLinearMBA(p, dst, node.value)
			elseif node.kind == "string" then 
				local strID, strKey = getOrAddStrKey(p, node.value)
				emitPUSH_K(p, strID); emit(p, OC.M_EXEC_SUB, dst, strKey)
			elseif node.kind == "boolean" then emitPUSH_LIT(p, node.value and 1 or 0); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst)
			elseif node.kind == "nil" then emitPUSH_LIT(p, dst); emitPUSH_LIT(p, dst); emit(p, OC.M_LOADNIL) end
		elseif node.type == "VarargLiteral" then
			emitPUSH_LIT(p, dst); emitPUSH_LIT(p, dst); emit(p, OC.M_LOADNIL)
								elseif node.type == "FunctionDefinition" then
			local fp=newP(#node.params, p); fp.va=node.isVararg
			pushS(fp)
			for i, pn in ipairs(node.params) do 
				local r = i - 1
				fp.sc[#fp.sc][#fp.sc[#fp.sc]+1] = {n = pn, r = r}
			end
			compileBlock(fp, node.body)
			popS(fp)
			emitPUSH_LIT(fp, 0); emitPUSH_LIT(fp, 0); emit(fp, OC.M_RETURN)
			local pi=#p.pr; p.pr[pi+1]=fp
			emitPUSH_LIT(p, pi); emit(p, OC.M_CLOSURE, dst)
				elseif node.type == "Identifier" then
			local r=fL(p, node.name)
			if r then if dst~=r then emitMOVE(p, dst, r) end
			else 
				local u = resolveUpval(p, node.name)
				if u then
					emitPUSH_LIT(p, u)
					emit(p, OC.M_GETUPVAL, dst)
				else
					local strID, strKey = getOrAddStrKey(p, node.name)
					emitPUSH_K(p, strID); emit(p, OC.M_GETGLOBAL, dst, strKey) 
				end
			end
		elseif node.type == "UnaryExpression" then
			compileExpr(p, node.argument, dst)
			if node.operator == "not" then emitALU_UNARY(p, OC.M_ALU_NOT, dst, dst)
			elseif node.operator == "-" then emitALU_UNARY(p, OC.M_ALU_UNM, dst, dst)
			elseif node.operator == "#" then emitALU_UNARY(p, OC.M_ALU_LEN, dst, dst)
			elseif node.operator == "~" then emitALU_UNARY(p, OC.M_ALU_BNOT, dst, dst) end
		elseif node.type == "TableLiteral" then
			emit(p, OC.M_NEWTABLE, dst)
			local idx=1
			for _, field in ipairs(node.fields) do
				if field.key then
					local kr=aR(p); local vr=aR(p)
					compileExpr(p, field.key, kr); compileExpr(p, field.value, vr)
					emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p)
												else
					local kr=aR(p); local vr=aR(p)
					emitLOADK_NonLinearMBA(p, kr, idx); compileExpr(p, field.value, vr)
					emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p);
					idx=idx+1
				end
			end
		elseif node.type == "BinaryExpression" then
			compileExpr(p, node.left, dst)
			local rr=aR(p); compileExpr(p, node.right, rr)
			local op=node.operator
			if op=="+" then emitALU(p, OC.M_ALU_ADD, dst, dst, rr)
			elseif op=="-" then emitALU(p, OC.M_ALU_SUB, dst, dst, rr)
			elseif op=="*" then emitALU(p, OC.M_ALU_MUL, dst, dst, rr)
			elseif op=="/" then emitALU(p, OC.M_ALU_DIV, dst, dst, rr)
			elseif op=="%" then emitALU(p, OC.M_ALU_MOD, dst, dst, rr)
			elseif op=="^" then emitALU(p, OC.M_ALU_POW, dst, dst, rr)
			elseif op==".." then emitPUSH_LIT(p, dst); emitPUSH_LIT(p, rr); emit(p, OC.M_CONCAT, dst)
			elseif op=="//" then emitALU(p, OC.M_ALU_IDIV, dst, dst, rr)
			elseif op=="&" then emitALU(p, OC.M_ALU_BAND, dst, dst, rr)
			elseif op=="|" then emitALU(p, OC.M_ALU_BOR, dst, dst, rr)
			elseif op=="~" then emitALU(p, OC.M_ALU_BXOR, dst, dst, rr)
			elseif op=="<<" then emitALU(p, OC.M_ALU_SHL, dst, dst, rr)
			elseif op==">>" then emitALU(p, OC.M_ALU_SHR, dst, dst, rr)
			elseif op=="==" then eCmp(p,OC.M_EQ,dst,dst,rr)
						elseif op=="~=" then
				emitPUSH_LIT(p, 0); emitPUSH_REG(p, dst); emitPUSH_REG(p, rr); emit(p, OC.M_EQ); local j=eJMP(p, 0)
				emitPUSH_LIT(p, 0); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst); local j2=eJMP(p, 0)
				patch(p,j,#p.c + 1); emitPUSH_LIT(p, 1); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst); patch(p,j2,#p.c + 1)
			elseif op=="<" then eCmp(p,OC.M_LT,dst,dst,rr)
			elseif op=="<=" then eCmp(p,OC.M_LE,dst,dst,rr)
			elseif op==">" then eCmp(p,OC.M_LT,dst,rr,dst)
			elseif op==">=" then eCmp(p,OC.M_LE,dst,rr,dst)
			elseif op=="and" then
				emitPUSH_REG(p, dst); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); local j=eJMP(p, 0)
				emitMOVE(p, dst, rr); patch(p,j,#p.c + 1)
			elseif op=="or" then
				emitPUSH_REG(p, dst); emitPUSH_LIT(p, 1); emit(p, OC.M_TEST); local j=eJMP(p, 0)
				emitMOVE(p, dst, rr); patch(p,j,#p.c + 1)
			end
			fR(p)
		elseif node.type == "MemberExpression" then
			compileExpr(p, node.base, dst)
			local strID, strKey = getOrAddStrKey(p, node.identifier)
			local kr=aR(p); emitPUSH_K(p, strID); emit(p, OC.M_EXEC_SUB, kr, strKey)
			emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emit(p, OC.M_GETTABLE, dst); fR(p)
		elseif node.type == "IndexExpression" then
			compileExpr(p, node.base, dst)
			local kr=aR(p); compileExpr(p, node.index, kr)
			emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emit(p, OC.M_GETTABLE, dst); fR(p)
										elseif node.type == "CallExpression" then
			if node.isSelf then
				local t_base = aR(p)
				compileExpr(p, node.base, t_base)
				local sk = aR(p)
				local c_base = aR(p)
				local self_reserved = aR(p)
				
				local na = 1
				local string_args = {}
				for _, arg in ipairs(node.arguments) do
					local ar = aR(p)
					if arg.type == "Literal" and arg.kind == "string" then
						table.insert(string_args, {node = arg, reg = ar})
					else
						compileExpr(p, arg, ar)
					end
					na = na + 1
				end
				
				local strID, strKey = getOrAddStrKey(p, node.method)
				emitPUSH_K(p, strID)
				emit(p, OC.M_EXEC_SUB, sk, strKey)
				
				emitPUSH_REG(p, t_base)
				emitPUSH_REG(p, sk)
				emit(p, OC.M_SELF, c_base)
				
				emit(p, OC.M_SECURE_ERASE, sk)
				
				for _, sArg in ipairs(string_args) do
					compileExpr(p, sArg.node, sArg.reg)
				end
				
				emitPUSH_LIT(p, c_base)
				emitPUSH_LIT(p, na)
				emitPUSH_LIT(p, 1)
				emit(p, OC.M_CALL)
				
				if dst ~= c_base then emitMOVE(p, dst, c_base) end
				
				for _, sArg in ipairs(string_args) do
					emit(p, OC.M_SECURE_ERASE, sArg.reg)
				end
				
				for _ = 1, na + 3 do fR(p) end
			else
				local c_base = aR(p)
				compileExpr(p, node.base, c_base)
				
				local na = 0
				local string_args = {}
				for _, arg in ipairs(node.arguments) do
					local ar = aR(p)
					if arg.type == "Literal" and arg.kind == "string" then
						table.insert(string_args, {node = arg, reg = ar})
					else
						compileExpr(p, arg, ar)
					end
					na = na + 1
				end
				
				for _, sArg in ipairs(string_args) do
					compileExpr(p, sArg.node, sArg.reg)
				end
				
				emitPUSH_LIT(p, c_base)
				emitPUSH_LIT(p, na)
				emitPUSH_LIT(p, 1)
				emit(p, OC.M_CALL)
				
				if dst ~= c_base then emitMOVE(p, dst, c_base) end
				
				for _, sArg in ipairs(string_args) do
					emit(p, OC.M_SECURE_ERASE, sArg.reg)
				end
				
				for _ = 1, na + 1 do fR(p) end
			end
		end
	end

	compileStat = function(p, node)
						if node.type == "LocalDefinition" then
			local rs={}
			for _, n in ipairs(node.names) do
				rs[#rs+1]=nL(p, n)
				emitPUSH_LIT(p, rs[#rs]); emitPUSH_LIT(p, rs[#rs]); emit(p, OC.M_LOADNIL)
			end
			for i, valNode in ipairs(node.values) do
				if rs[i] then 
					compileExpr(p, valNode, rs[i]) 
					
					if valNode.type == "CallExpression" and i == #node.values and #rs > i then
						local req_nrv = #rs - i + 1
						for b = #p.c, 1, -1 do
							if p.c[b][1] == OC.M_CALL then
								if p.c[b-1] and p.c[b-1][1] == OC.M_PUSH_LIT then
									p.c[b-1][2] = req_nrv
									local c_base = p.c[b-3][2]
									for j = 1, req_nrv - 1 do
										emitMOVE(p, rs[i + j], c_base + j)
									end
								end
								break
							end
						end
					else
					end
				end
			end
				elseif node.type == "LocalFunctionDefinition" then
			local r=nL(p, node.name)
			emitPUSH_LIT(p, r); emitPUSH_LIT(p, r); emit(p, OC.M_LOADNIL)
			compileExpr(p, node.functionDef, r)
		elseif node.type == "GlobalFunctionDefinition" then
			local chain=node.chain
			local tmp=aR(p); compileExpr(p, node.functionDef, tmp)
			if node.isMethod and p.pr[#p.pr] then p.pr[#p.pr].np = p.pr[#p.pr].np+1 end
			
			if #chain==1 then
				local r=fL(p, chain[1])
				if r then emitMOVE(p, r, tmp)
				else 
					local strID, strKey = getOrAddStrKey(p, chain[1])
					emitPUSH_K(p, strID); emitPUSH_REG(p, tmp); emit(p, OC.M_SETGLOBAL, strKey) 
				end
			else
				local tr=aR(p); local r=fL(p, chain[1])
				if r then emitMOVE(p, tr, r)
				else 
					local strID1, strKey1 = getOrAddStrKey(p, chain[1])
					emitPUSH_K(p, strID1); emit(p, OC.M_GETGLOBAL, tr, strKey1) 
				end
				for i=2,#chain-1 do
					local strID_i, strKey_i = getOrAddStrKey(p, chain[i])
					local kr=aR(p); emitPUSH_K(p, strID_i); emit(p, OC.M_EXEC_SUB, kr, strKey_i)
					emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emit(p, OC.M_GETTABLE, tr); fR(p)
				end
				local strID_l, strKey_l = getOrAddStrKey(p, chain[#chain])
				local kr=aR(p); emitPUSH_K(p, strID_l); emit(p, OC.M_EXEC_SUB, kr, strKey_l)
				emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emitPUSH_REG(p, tmp); emit(p, OC.M_SETTABLE); fR(p); fR(p)
			end
			fR(p)
		elseif node.type == "ReturnStatement" then
			local nb=#node.arguments
			local base=p.lc
			if nb > 0 then
				for i, arg in ipairs(node.arguments) do
					local r=aR(p); compileExpr(p, arg, r)
				end
				emitPUSH_LIT(p, base); emitPUSH_LIT(p, nb); emit(p, OC.M_RETURN)
				for _=1,nb do fR(p) end
			else
				emitPUSH_LIT(p, 0); emitPUSH_LIT(p, 0); emit(p, OC.M_RETURN)
			end
				elseif node.type == "IfStatement" then
			local done={}
			for _, clause in ipairs(node.clauses) do
				local cr=aR(p); compileExpr(p, clause.condition, cr)
				emitPUSH_REG(p, cr); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); fR(p)
				local jf=eJMP(p, 0); pushS(p); compileBlock(p, clause.body); popS(p)
				local je=eJMP(p, 0); done[#done+1]=je; patch(p, jf, #p.c + 1)
			end
			if node.elseBody then
				pushS(p); compileBlock(p, node.elseBody); popS(p)
			end
			for _, j in ipairs(done) do patch(p, j, #p.c + 1) end
				elseif node.type == "WhileStatement" then
			local top=#p.c;
			local cr=aR(p); compileExpr(p, node.condition, cr)
			emitPUSH_REG(p, cr); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); fR(p); local jf=eJMP(p, 0)
			p.loopStack = p.loopStack or {}
			table.insert(p.loopStack, {breaks={}, continues={}})
			pushS(p); compileBlock(p, node.body); popS(p)
			local lctx = table.remove(p.loopStack)
			for _, cj in ipairs(lctx.continues) do patch(p, cj, top + 1) end
			eJMP(p, top + 1);
			patch(p, jf, #p.c + 1)
			for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end
				elseif node.type == "RepeatUntilStatement" then
			local top=#p.c; pushS(p); 
			p.loopStack = p.loopStack or {}
			table.insert(p.loopStack, {breaks={}, continues={}})
			compileBlock(p, node.body); popS(p)
			local lctx = table.remove(p.loopStack)
			local contTarget = #p.c + 1
			for _, cj in ipairs(lctx.continues) do patch(p, cj, contTarget) end
			local cr=aR(p); compileExpr(p, node.condition, cr)
			emitPUSH_REG(p, cr);
			emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); fR(p); eJMP(p, top + 1)
			for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end
				elseif node.type == "ForNumericStatement" then
			pushS(p)
			local ir=nL(p,"__i") local lr=nL(p,"__l") local sr=nL(p,"__s") local vr=nL(p, node.variable)
			compileExpr(p, node.start, ir);
			compileExpr(p, node.limit, lr)
									if node.step then compileExpr(p, node.step, sr) else emitLOADK_NonLinearMBA(p, sr, 1) end
			
			local p_ir1 = emitPUSH_LIT(p, ir);
			local pi2 = emitPUSH_LIT(p, 0); 
			emit(p, OC.M_FORPREP)
			
			local bodyStart = #p.c + 1
			emitMOVE(p, vr, ir)
			
			p.loopStack = p.loopStack or {}
			table.insert(p.loopStack, {breaks={}, continues={}})
			
			compileBlock(p, node.body)
			
			local lctx = table.remove(p.loopStack)
			local p_ir2 = emitPUSH_LIT(p, ir);
			for _, cj in ipairs(lctx.continues) do patch(p, cj, p_ir2) end
			
			local li = emitPUSH_LIT(p, 0); 
			emit(p, OC.M_FORLOOP)
			
			patch(p, pi2, p_ir2 + 1)
			patch(p, li, bodyStart)
			
			for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end
			popS(p)
														elseif node.type == "ForGenericStatement" then
			pushS(p)
			local itr=nL(p,"__it"); local str2=nL(p,"__st");
			local ctl=nL(p,"__ct")
			
			compileExpr(p, node.iterators[1] or {type="Literal",kind="nil"}, itr)
			
						if node.iterators[1] and node.iterators[1].type == "CallExpression" and not node.iterators[2] then
				for b = #p.c, 1, -1 do
					if p.c[b][1] == OC.M_CALL then
						if p.c[b-1] and p.c[b-1][1] == OC.M_PUSH_LIT then
							p.c[b-1][2] = 3
							local c_base = p.c[b-3][2]
							emitMOVE(p, str2, c_base + 1)
							emitMOVE(p, ctl, c_base + 2)
						end
						break
					end
				end
			end
			
			if node.iterators[2] then compileExpr(p, node.iterators[2], str2) end
			if node.iterators[3] then compileExpr(p, node.iterators[3], ctl) end
			
			local vrs={}
			for _, vname in ipairs(node.variables) do vrs[#vrs+1]=nL(p, vname) end
			
			local call_base = aR(p)
			local call_arg1 = aR(p)
			local call_arg2 = aR(p)
			
			local top=#p.c
			
			emitMOVE(p, call_base, itr)
			emitMOVE(p, call_arg1, str2)
			emitMOVE(p, call_arg2, ctl)
			
			emitPUSH_LIT(p, call_base)
			emitPUSH_LIT(p, 2)
			emitPUSH_LIT(p, #node.variables)
			emit(p, OC.M_CALL)
			
			emitMOVE(p, ctl, call_base)
			
			for i, vr in ipairs(vrs) do 
				emitMOVE(p, vr, call_base + i - 1) 
			end
			
			local 
			nr=aR(p)
			emitPUSH_LIT(p, nr)
			emitPUSH_LIT(p, nr)
			emit(p, OC.M_LOADNIL)
			
			emitPUSH_LIT(p, 1)
			emitPUSH_REG(p, ctl)
			emitPUSH_REG(p, nr)
			emit(p, OC.M_EQ)
			fR(p)
			
			local jf=eJMP(p, 0)
			
			p.loopStack = p.loopStack or {}
			table.insert(p.loopStack, {breaks={}, continues={}})
			
			compileBlock(p, node.body)
			
			local lctx = table.remove(p.loopStack)
			for _, cj in ipairs(lctx.continues) do patch(p, cj, top + 1) end
			
			eJMP(p, top + 1)
			patch(p, jf, #p.c + 1)
			
			for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end
			popS(p)
		elseif node.type == "DoStatement" then
			pushS(p); compileBlock(p, node.body); popS(p)
				elseif node.type == "BreakStatement" then
			local j = eJMP(p, 0)
			if p.loopStack and #p.loopStack > 0 then
				table.insert(p.loopStack[#p.loopStack].breaks, j)
			end
		elseif node.type == "ContinueStatement" then
			local j = eJMP(p, 0)
			if p.loopStack and #p.loopStack > 0 then
				table.insert(p.loopStack[#p.loopStack].continues, j)
			end
		elseif node.type == "ExpressionStatement" then
			local dr=aR(p); compileExpr(p, node.expression, dr); fR(p)
						elseif node.type == "AssignmentStatement" then
			local compiledRhs={}
			for i, rhsNode in ipairs(node.rhs) do
				local rr=aR(p)
				compileExpr(p, rhsNode, rr)
				compiledRhs[#compiledRhs+1]=rr
				
				if rhsNode.type == "CallExpression" and i == #node.rhs and #node.lhs > i then
					local req_nrv = #node.lhs - i + 1
					for b = #p.c, 1, -1 do
						if p.c[b][1] == OC.M_CALL then
							if p.c[b-1] and p.c[b-1][1] == OC.M_PUSH_LIT then
								p.c[b-1][2] = req_nrv
								local c_base = p.c[b-3][2]
								for j = 1, req_nrv - 1 do
									local evr = aR(p)
									emitMOVE(p, evr, c_base + j)
									compiledRhs[#compiledRhs+1] = evr
								end
							end
							break
						end
					end
				end
			end

			for i, lhsNode in ipairs(node.lhs) do
				local vr=compiledRhs[i]
				if not vr then break end
				
												if lhsNode.type == "Identifier" then
					local r=fL(p, lhsNode.name)
					if r then 
						emitMOVE(p, r, vr)
					else 
						local u = resolveUpval(p, lhsNode.name)
						if u then
							emitPUSH_LIT(p, u)
							emitPUSH_REG(p, vr)
							emit(p, OC.M_SETUPVAL)
						else
							local strID, strKey = getOrAddStrKey(p, lhsNode.name)
							emitPUSH_K(p, strID); emitPUSH_REG(p, vr);
							emit(p, OC.M_SETGLOBAL, strKey) 
						end
					end
				elseif lhsNode.type == "MemberExpression" then
					local tr=aR(p); compileExpr(p, lhsNode.base, tr)
					local strID, strKey = getOrAddStrKey(p, lhsNode.identifier)
					local kr=aR(p); emitPUSH_K(p, strID); emit(p, OC.M_EXEC_SUB, kr, strKey)
					emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p)
				elseif lhsNode.type == "IndexExpression" then
					local tr=aR(p); compileExpr(p, lhsNode.base, tr)
					local kr=aR(p); compileExpr(p, lhsNode.index, kr)
					emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p)
				end
			end
			for _=1, #compiledRhs do fR(p) end
		end
	end

	compileBlock = function(p, block)
		for _, stat in ipairs(block) do compileStat(p, stat) end
	end

	local root=newP(0)
	root.va=true
	pushS(root)
	compileBlock(root, ast.body)
	emit(root, OC.M_HALT)
	return root
end

local function peepholeOptimize(proto, OC)
	local superMap = {}
	local superCount = 0
	local usedOpcodes = {}
	for _, val in pairs(OC) do usedOpcodes[val] = true end

			local function fop()
		local val
		repeat val = math.random(1, 65535) until not usedOpcodes[val]
		usedOpcodes[val] = true
		return val
	end

		local reverseOC = {}
	for k, v in pairs(OC) do reverseOC[v] = k end

	local function getName(val)
		return reverseOC[val]
	end

	local safeOpMap = {}
		local function isSafeFast(op)
		if safeOpMap[op] ~= nil then return safeOpMap[op] end
		local opName = reverseOC[op]
		if opName and string.sub(opName, 1, 8) == "M_SUPER_" then 
			safeOpMap[op] = false
			return false 
		end
		local safe = op ~= OC.M_JMP and op ~= OC.M_TEST and op ~= OC.M_EQ and 
					 op ~= OC.M_LT and op ~= OC.M_LE and op ~= OC.M_FORPREP and 
					 op ~= OC.M_FORLOOP and op ~= OC.M_CALL and op ~= OC.M_RETURN and 
					 op ~= OC.M_HALT and op ~= OC.M_EXEC_SUB and 
					 op ~= OC.M_GETGLOBAL and op ~= OC.M_SETGLOBAL and op ~= OC.M_LOADBOOL
		safeOpMap[op] = safe
		return safe
	end

	local function findAndApply(p)
		local pairsCount = {}
		local function count(p_inner)
			for i = 1, #p_inner.c - 1 do
				local op1 = p_inner.c[i][1]
				local op2 = p_inner.c[i+1][1]
				
				if isSafeFast(op1) and isSafeFast(op2) then
					local key = (op1 * 256) + op2
					pairsCount[key] = (pairsCount[key] or 0) + 1
				end
			end
			for _, sp in ipairs(p_inner.pr) do count(sp) end
		end
		count(p)

		local bestPair, maxCount = nil, 0
		for k, c in pairs(pairsCount) do
			if c > maxCount then maxCount = c; bestPair = k end
		end

		if maxCount >= 2 then
			local o2 = bestPair % 256
			local o1 = math.floor(bestPair / 256)
			
			superCount = superCount + 1
			local superName = "M_SUPER_" .. superCount
			local superVal = fop()
			OC[superName] = superVal
			reverseOC[superVal] = superName 
			superMap[superName] = {getName(o1), getName(o2)}

						local function apply(p_inner)
				local _skip_next = false
				for i = 1, #p_inner.c - 1 do
					if _skip_next then
						_skip_next = false
					elseif p_inner.c[i][1] == o1 and p_inner.c[i+1][1] == o2 then
						p_inner.c[i][1] = superVal
						_skip_next = true
					end
				end
				for _, sp in ipairs(p_inner.pr) do apply(sp) end
			end
			apply(p)
			return true
		end
		return false
	end

	for iter = 1, 15 do
		if not findAndApply(proto) then break end
	end
	return superMap
end

local function serialize(proto, OC, opMap, pk, mathProxy, stringChar, genMathCall, numKey)

	local function sNum(v)
		if v==math.floor(v) and v>=0 and v<=0xFFFF then
			return "("..genMathCall(v, mathProxy)..")"
		end
		return tostring(v)
	end

			local function sK(v)
		if type(v)=="number" then return sNum(v)
		elseif type(v)=="boolean" then return tostring(v)
		elseif v==nil then return "nil"
		elseif type(v)=="table" and v.type=="enc_string" then
			local nums={}
			for i=1,#v.val do nums[i] = bit32.bxor(string.byte(v.val,i), v.key) end
			return "{"..pk.dKey.."={"..table.concat(nums,",").."}}"
										elseif type(v)=="string" then
			if v == "" then return "''" end
			local chunkSize = (#v > 500) and math.random(50, 100) or math.random(2, 4)
			local chunks = {}
			local i = 1
			while i <= #v do
				chunks[#chunks+1] = string.sub(v, i, i + chunkSize - 1)
				i = i + chunkSize
			end

			local memKeys = {}
			local usedKeys = {}
			for _ = 1, #chunks do
				local k
				repeat k = math.random(10000, 99999) until not usedKeys[k]
				usedKeys[k] = true
				memKeys[#memKeys+1] = k
			end

			local insertOrder = {}
			for idx = 1, #chunks do insertOrder[idx] = idx end
			for idx = #insertOrder, 2, -1 do
				local rand = math.random(idx)
				insertOrder[idx], insertOrder[rand] = insertOrder[rand], insertOrder[idx]
			end

			local masterXor = math.random(1, 255)
			local memInit = {}
			for _, idx in ipairs(insertOrder) do
				local chunk = chunks[idx]
				local mKey = memKeys[idx]
				local bytes = {}
				for j = 1, #chunk do bytes[#bytes+1] = bit32.bxor(string.byte(chunk, j), masterXor) end
				memInit[#memInit+1] = "["..mKey.."]={"..table.concat(bytes,",").."}"
			end

						local memVar, ptrVar = newVar(), newVar()
			local genFunc, stateVar, kVar = newVar(), newVar(), newVar()
			local chunkVar, jVar, sVar = newVar(), newVar(), newVar()
			local encK = genMathCall(masterXor, mathProxy)

			return "(function() local "..memVar.."={"..table.concat(memInit, ",").."}; local "..ptrVar.."={"..table.concat(memKeys, ",").."}; local _k="..encK.."; local function "..genFunc.."("..stateVar..") if "..stateVar..">#"..ptrVar.." then return '' end; local "..kVar.."="..ptrVar.."["..stateVar.."]; local "..chunkVar.."="..memVar.."["..kVar.."]; local "..sVar.."=''; for "..jVar.."=1,#"..chunkVar.." do "..sVar.."="..sVar.."..string.char(bit32.bxor("..chunkVar.."["..jVar.."],_k)); end; "..memVar.."["..kVar.."]=nil; local _ret="..sVar..".."..genFunc.."("..stateVar.."+1); "..sVar.."=nil; return _ret; end; return "..genFunc.."(1) end)()"
		else return "nil" end
	end

	local function sProto(p)
		local cp={}
		local order={}
		
						local expH = 0
		local secret_seed = math.random(1000, 9999)

				for i = 1, #p.c do
			local poly_key = ( (i * i * 197) + (i * 83) + secret_seed ) % 4294967296
			
			local ins = p.c[i]
			
			local orig_op = ins[1]
			if orig_op == OC.M_EXEC_SUB or orig_op == OC.M_GETGLOBAL then
				local K_D = bit32.bxor(i, bit32.bxor(bit32.rshift(poly_key, 2), orig_op))
				ins[3] = bit32.bxor(ins[3], K_D)
			elseif orig_op == OC.M_SETGLOBAL then
				local K_D = bit32.bxor(i, bit32.bxor(bit32.rshift(poly_key, 2), orig_op))
				ins[2] = bit32.bxor(ins[2], K_D)
			end

			ins[1] = bit32.bxor(ins[1], poly_key)
			if ins[2] then ins[2] = bit32.bxor(ins[2], poly_key) end
			if ins[3] then ins[3] = bit32.bxor(ins[3], poly_key) end
			
			for j=1, #ins do
				expH = (expH + ins[j]) % 4294967296
			end
		end

				local bcFingerprint = 0
		for i = 1, #p.c do
			local ins = p.c[i]
			for j = 1, #ins do
				bcFingerprint = bit32.bxor(bcFingerprint, ins[j] or 0)
				bcFingerprint = (bcFingerprint * 16777619 + 1) % 4294967296
			end
		end
		local constKey = ( (bcFingerprint * bcFingerprint * 197) + (bcFingerprint * 83) + secret_seed ) % 4294967296
		local ec1v = bit32.bxor(256, constKey)
		local ec2v = bit32.bxor(9, bit32.bxor(constKey, 0x11))
		local ec3v = bit32.bxor(36, bit32.bxor(constKey, 0x22))

				for i=1,#p.c do order[i]=i end
		for i=#order,2,-1 do
			local j=math.random(i)
			order[i],order[j]=order[j],order[i]
		end
						local b92 = " !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"
		local function toB92(num)
			if num == 0 then return string.sub(b92, 1, 1) end
			local res = ""
			while num > 0 do
				local rem = num % 92
				res = string.sub(b92, rem + 1, rem + 1) .. res
				num = math.floor(num / 92)
			end
			return res
		end

		for _,orig_idx in ipairs(order) do
			local ins=p.c[orig_idx]
			local ip={toB92(orig_idx), toB92(ins[1])}
			if ins[2] then ip[#ip+1]=toB92(ins[2]) end
			if ins[3] then ip[#ip+1]=toB92(ins[3]) end
			cp[#cp+1]=table.concat(ip,"'")
		end
		
		local kp={}
		for i=1, #p.k do
			local kv = p.k[i]
			local val_expr = sK(kv)
			if i == 1 then
				kp[#kp+1]="if _c_id == "..(i-1).." then return "..val_expr
			else
				kp[#kp+1]="elseif _c_id == "..(i-1).." then return "..val_expr
			end
		end
		local pool_func = ""
		if #kp > 0 then
			pool_func = "function(_c_id) "..table.concat(kp, " ").." else return nil end end"
		else
			pool_func = "function(_c_id) return nil end"
		end

		local sub_p = {}
		if not p.sub_c or #p.sub_c == 0 then
			p.sub_c = { {OC.SUB_OP_DEC, 0}, {OC.SUB_OP_RET, 0} }
		end
		for _, ins in ipairs(p.sub_c) do
			sub_p[#sub_p+1] = "{"..bit32.bxor(ins[1], secret_seed % 256)..","..bit32.bxor(ins[2] or 0, secret_seed % 256).."}"
		end

				local pp={}
		for _,sp in ipairs(p.pr) do pp[#pp+1]=sProto(sp) end
		
		local uv_p = {}
		if p.upvalues then
			for _, uv in ipairs(p.upvalues) do
				uv_p[#uv_p+1] = "{"..(uv.isLocal and "1" or "0")..","..uv.index.."}"
			end
		end

		local encoded_seed = bit32.bxor(secret_seed, expH % 65536)
				local b92Decoder = "(function(s) local b=' !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~' local m={} for i=1,92 do m[string.sub(b,i,i)]=i-1 end local function f(str) local num=0 for i=1,#str do num=num*92+m[string.sub(str,i,i)] end return num end local t={} for p in string.gmatch(s,'([^\"]+)') do local g=string.gmatch(p,\"([^']+)\") local idx=f(g()) local r={} for v in g do r[#r+1]=f(v) end t[idx]=r end return t end)"
		local safe_payload = table.concat(cp, "\""):gsub("\"", "\\\"")
		return "{"..pk.c.."="..b92Decoder.."(\""..safe_payload.."\"),sub_c={"..table.concat(sub_p,",").."},"..pk.k.."="..pool_func
			..","..pk.np.."="..p.np..",upvalues={"..table.concat(uv_p,",").."},"..pk.va.."="..(p.va and 1 or 0)
			..","..pk.pr.."={"..table.concat(pp,",").."},"..pk.mr.."="..(p.mr or 0)..","..pk.hash.."="..expH..","..pk.seed.."="..encoded_seed..","..pk.ec1.."="..ec1v..","..pk.ec2.."="..ec2v..","..pk.ec3.."="..ec3v.."}"
	end
	return sProto(proto)
end

local function buildVM(opVarNames, vmName, v, pk, OC, stringChar, numKey, superMap, mathProxy)
	local L={}
	local function A(s) L[#L+1]=s end
	local function ov(n) return opVarNames[n] end
	local rV = {
		subVMName = newVar(),
		opaqueTrue = newVar(),
		pipelineLockVar = newVar(),
		alu_a = newVar(),
		alu_b = newVar(),
		alu_id = newVar(),
		alu_res = newVar(),
		dispatch_next = newVar(),
		has_returned = newVar(),
		return_values = newVar(),
		Central_Dispatcher = newVar(),
		State_Variable = newVar(),
		Opaque_Transition = newVar(),
		sub_cache = newVar(),
		encObj = newVar(),
		sub_bc = newVar(),
		c = newVar(),
		s = newVar(),
		_p = newVar(),
		b = newVar(),
		a = newVar(),
		k = newVar(),
		gk = newVar(),
		t = newVar(),
		v = newVar(),
		ps = newVar(),
		ci = newVar(),
		nrv = newVar(),
		na = newVar(),
		dst = newVar(),
		fn = newVar(),
		a2 = newVar(),
		ai = newVar(),
		rv = newVar(),
		ri = newVar(),
		n = newVar(),
		base = newVar(),
		ir = newVar(),
		idx = newVar(),
		p_idx = newVar(),
		x = newVar(),
		mip = newVar(),
		rt_seed = newVar(),
		chain_key = newVar(),
		env = newVar(),
		math = newVar(),
		bit = newVar(),
		floor = newVar(),
		cos = newVar(),
		sin = newVar(),
		pi = newVar(),
		band = newVar(),
		lshift = newVar(),
		rshift = newVar(),
		op_val = newVar(),
		cff_state = newVar(),
		realBc = newVar(),
		realK = newVar(),
		mt = newVar(),
		self = newVar(),
		key = newVar(),
		val = newVar(),
		crash = newVar(),
		safe_iscc = newVar(),
		safe_newcc = newVar(),
		poly_seed = newVar(),
		cff_st = newVar(),
		max_pc = newVar(),
		gm = newVar(),
		tp = newVar(),
		pc = newVar(),
		isc = newVar(),
		is_safe = newVar(),
		fake_prop_pre = newVar(),
		tof_pre = newVar(),
		g_pre = newVar(),
		v3_pre = newVar(),
		env_probe_mt = newVar(),
		mt_bc_pre = newVar(),
		mt_h_pre = newVar(),
		is_inst_pre = newVar(),
		s_pre = newVar(),
		e_pre = newVar(),
		err_valid_pre = newVar(),
		v3_valid_pre = newVar(),
		s2_pre = newVar(),
		r2_pre = newVar(),
		rg = newVar(),
		sf = newVar(),
		poly_share = newVar(),
		vmTrusted = newVar(),
		clPr = newVar(),
		clUvs = newVar(),
		clIdx = newVar(),
		clUv = newVar(),
		clVal = newVar(),
		clSet = newVar(),
		clInner = newVar(),
		clWrapped = newVar(),
		upIdx = newVar(),
		upVal = newVar(),
		l4_cor = newVar(),
		l4_cc = newVar(),
		l4_cr = newVar(),
		l4_cy = newVar(),
		l4_np = newVar(),
		l4_gmt = newVar(),
		l4_pc = newVar(),
		l4_ts = newVar(),
		l4_sf = newVar(),
		l4_trap = newVar(),
		l4_thr = newVar(),
		l4_frac = newVar(),
		l4_pkey = newVar(),
		l4_s = newVar(),
		l4_r = newVar(),
		bcFp = newVar(),
		ckR = newVar(),
		dc1 = newVar(),
		dc2 = newVar(),
		dc3 = newVar(),
		passed = newVar(),
		cM = newVar(),
		cMem = newVar(),
		cG = newVar(),
		cE = newVar(),
		cR = newVar(),
		rcStore = newVar(),
		rcKey = newVar(),
		rcGet = newVar(),
		rcSet = newVar(),
		pushReg_idx = newVar(),
		pushK_id = newVar(),
		pushLit_val = newVar(),
		writeReg_idx = newVar(),
		fetchReg_idx = newVar(),
		loadBool_idx = newVar(),
		getGlobal_dst = newVar(),
		getGlobal_kid = newVar(),
		setGlobal_kid = newVar(),
		getTable_dst = newVar(),
		newTable_dst = newVar(),
		self_dst = newVar(),
		concat_dst = newVar(),
		closure_dst = newVar(),
		getUpval_dst = newVar(),
		execSub_dst = newVar(),
		execSub_kid = newVar()
	}
	
	v.dynState = newVar()
	v.handlers = newVar()
	v.res = newVar()
	v.rk = newVar()
	v.rks = newVar()
	v.tmp = newVar()
	v.top = newVar()



				local function bStr(str)
		if not str or str == "" then return "''" end
		local chunkSize = (#str > 500) and math.random(50, 100) or math.random(2, 4)
		local chunks = {}
		local i = 1
		while i <= #str do
			chunks[#chunks+1] = string.sub(str, i, i + chunkSize - 1)
			i = i + chunkSize
		end

		local memKeys = {}
		local usedKeys = {}
		for _ = 1, #chunks do
			local k
			repeat k = math.random(10000, 99999) until not usedKeys[k]
			usedKeys[k] = true
			memKeys[#memKeys+1] = k
		end

		local insertOrder = {}
		for idx = 1, #chunks do insertOrder[idx] = idx end
		for idx = #insertOrder, 2, -1 do
			local rand = math.random(idx)
			insertOrder[idx], insertOrder[rand] = insertOrder[rand], insertOrder[idx]
		end

		local masterXor = math.random(1, 255)
		local memInit = {}
		for _, idx in ipairs(insertOrder) do
			local chunk = chunks[idx]
			local mKey = memKeys[idx]
			local bytes = {}
			for j = 1, #chunk do bytes[#bytes+1] = bit32.bxor(string.byte(chunk, j), masterXor) end
			memInit[#memInit+1] = "["..mKey.."]={"..table.concat(bytes,",").."}"
		end

					local memVar, ptrVar = newVar(), newVar()
			local genFunc, stateVar, kVar = newVar(), newVar(), newVar()
			local chunkVar, jVar, sVar = newVar(), newVar(), newVar()

			return "(function() local "..memVar.."={"..table.concat(memInit, ",").."}; local "..ptrVar.."={"..table.concat(memKeys, ",").."}; local function "..genFunc.."("..stateVar..") if "..stateVar..">#"..ptrVar.." then return '' end; local "..kVar.."="..ptrVar.."["..stateVar.."]; local "..chunkVar.."="..memVar.."["..kVar.."]; local "..sVar.."=''; for "..jVar.."=1,#"..chunkVar.." do "..sVar.."="..sVar.."..string.char(bit32.bxor("..chunkVar.."["..jVar.."],"..masterXor..")); end; "..memVar.."["..kVar.."]=nil; local _ret="..sVar..".."..genFunc.."("..stateVar.."+1); "..sVar.."=nil; return _ret; end; return "..genFunc.."(1) end)()"
	end


	A(" local "..rV.env.." = getfenv and getfenv() or _ENV or _G")
	A(" local "..rV.math.." = "..rV.env.."["..bStr("math").."]")
	A(" local "..rV.bit.." = "..rV.env.."["..bStr("bit32").."] or "..rV.math.."")
	A(" local "..rV.floor.." = "..rV.math.."["..bStr("floor").."]")
	A(" local "..rV.cos.." = "..rV.math.."["..bStr("cos").."]")
	A(" local "..rV.sin.." = "..rV.math.."["..bStr("sin").."]")
	A(" local "..rV.pi.." = "..rV.math.."["..bStr("pi").."]")
	A(" local "..rV.band.." = "..rV.bit.."["..bStr("band").."] or function(a,b) return a end")
	A(" local "..rV.lshift.." = "..rV.bit.."["..bStr("lshift").."] or function(a,b) return a*(2^b) end")
	A(" local "..rV.rshift.." = "..rV.bit.."["..bStr("rshift").."] or function(a,b) return "..rV.floor.."(a/(2^b)) end")

				local function genCollatzCheck(varName)
        local choice = math.random(1, 4)
        
        if choice == 1 then
            return "((("..varName.." * "..varName..") - "..varName..") % 2 == 0)"
        elseif choice == 2 then
            return "(math.abs(math.sin("..varName..")^2 + math.cos("..varName..")^2 - 1) < 0.05)"
        elseif choice == 3 then
            return "((math.floor("..varName.." * 0.5) * 2) <= "..varName..")"
        else
            return "(math.abs(("..varName.." * 0.333333) * 3 - "..varName..") < 0.05)"
        end
    end

	local v_mba_t = {
        x = newVar(), y = newVar(), mba = newVar(), dec = newVar()
    }
    A(" local function "..rV.opaqueTrue.."()")
    A("  local "..v_mba_t.x.." = (("..v.dynState.." or 1) * 0.84147098) % 9999")
    A("  local "..v_mba_t.y.." = math.floor("..v_mba_t.x..")")
    A("  local "..v_mba_t.mba.." = (("..v_mba_t.y.." * "..v_mba_t.y..") - "..v_mba_t.y..") % 2")
    A("  local "..v_mba_t.dec.." = math.abs(math.sin("..v_mba_t.x..")^2 + math.cos("..v_mba_t.x..")^2 - 1)")
    A("  return ("..v_mba_t.mba.." == 0 and "..v_mba_t.dec.." < 0.05) and 1 or 0")
    A(" end")

				local sV = {
		mem = newVar(),
		spc = newVar(),
		ds = newVar(),
		hnd = newVar(),
		sc = newVar(),
		opv = newVar(),
		raw = newVar(),
		sop = newVar(),
		res = newVar(),
		mba_a = newVar(),
		mba_s = newVar(),
		sec_bc = newVar(),
		p_key = newVar(),
		a_key = newVar(),
		rt_pc = newVar(),
		rt_rk = newVar(),
		rt_op = newVar(),
		k_d = newVar(),
		dx = newVar(),
		c_state = newVar(),
		rss = newVar(),
		sub_h = newVar(),
		ret = newVar(),
		trap = newVar(),
		nxt_rk = newVar()
	}

			A(" local "..rV.sub_cache.." = setmetatable({}, {__mode = 'kv'})")
			A(" local function "..rV.subVMName.."("..rV.encObj..", "..sV.p_key..", "..sV.sec_bc..", "..sV.rt_pc..", "..sV.rt_rk..", "..sV.rt_op..")")
	A("  if type("..rV.encObj..") ~= 'table' and not "..sV.sec_bc.." then return "..rV.encObj.." end")
	A("  if not "..sV.sec_bc.." and "..rV.sub_cache.."["..rV.encObj.."] then return "..rV.sub_cache.."["..rV.encObj.."] end")
	
	A("  local "..sV.mem.." = setmetatable({}, {")
	A("      __index = function(t, k) return rawget(t, k) end,")
	A("      __newindex = function(t, k, v) rawset(t, k, v) end,")
	A("      __metatable = 'LOCKED_MEM'")
	A("  })")

	A("  local "..rV.sub_bc.." = "..sV.sec_bc.." or "..v.P..".sub_c")
	A("  local "..sV.ds.." = 0")
	A("  local "..sV.hnd.." = {}")
	A("  local "..sV.sc.." = string.char")

	A("  local "..sV.k_d.." = bit32.bxor("..sV.rt_pc.." or 0, bit32.bxor(bit32.rshift("..sV.rt_rk.." or 0, 2), "..sV.rt_op.." or 0))")
	A("  local "..sV.a_key.." = bit32.bxor("..sV.p_key..", "..sV.k_d..")")

	A("  local function "..sV.mba_a.."(a, b) return bit32.bxor(a, b) + bit32.lshift(bit32.band(a, b), 1) end")
	A("  local function "..sV.mba_s.."(a, b) return bit32.bxor(a, bit32.bnot(b)) + bit32.lshift(bit32.band(a, bit32.bnot(b)), 1) + 1 end")

		local sub_hBody1 = sV.ds.." = math.floor("..sV.mba_a.."("..sV.ds..", "..sV.sop.."[1]) % 256);"
	local sub_dCheck1 = genCollatzCheck(sV.ds)
	A("  "..sV.hnd.."["..ov("SUB_OP_DEC").."] = function("..sV.sop..") ")
	A("   "..sub_hBody1)
	A("   if "..rV.opaqueTrue.."() == 1 then")
	A("    if "..sub_dCheck1.." then ")
	A("     if type("..rV.encObj..") == 'table' and "..rV.encObj.."."..pk.dKey.." then")
	A("      "..sV.mem.."[1] = ("..sV.mem.."[1] or '')")
	A("      for "..rV.idx.."=1,#"..rV.encObj.."."..pk.dKey.." do ")
	A("       local "..sV.dx.." = bit32.bxor("..rV.encObj.."."..pk.dKey.."["..rV.idx.."], "..sV.a_key..")")
	A("       "..sV.mem.."[1] = "..sV.mem.."[1] .. "..sV.sc.."("..sV.dx..")")
	A("      end")
	A("     end")
	A("    end")
	A("   else")
	A("    "..sV.p_key.." = bit32.bxor("..sV.p_key..", 0x1B)")
	A("   end")
	A("  end")

	local sub_hBody2 = sV.ds.." = math.floor("..sV.mba_s.."("..sV.ds..", "..sV.sop.."[1]) % 256);"
	local sub_dCheck2 = genCollatzCheck(sV.ds)
	A("  "..sV.hnd.."["..ov("SUB_OP_RET").."] = function("..sV.sop..") ")
	A("   "..sub_hBody2)
		A("   if "..rV.opaqueTrue.."() == 1 then")
	A("    if "..sub_dCheck2.." then ")
	A("     local "..sV.res.." = "..sV.mem.."[1]; "..sV.mem.."[1] = nil")
	A("     "..sV.mem.." = nil")
	A("     return "..sV.res.."")
	A("    end")
	A("   end")
	A("  end")
	
		A("  "..sV.hnd.."[0xDEAD] = function("..sV.sop..") ")
	A("   "..sV.mem.."[1] = "..sV.mba_s.."((bit32.bxor("..v.P.."."..pk.seed..", "..v.P.."."..pk.hash.." % 65536) % 256), "..sV.sop.."[2] or 0)")
	A("   if "..sV.mem.."[1] ~= 0 then "..sV.p_key.." = bit32.bxor("..sV.p_key..", 0x2C) end")
	A("  end")

	A("  local "..rV.cff_state.." = 1")
	A("  local "..sV.spc.." = 1")
	
	A("  while true do")
	A("   local "..sV.opv.." = "..rV.opaqueTrue.."()")
		A("   local "..sV.c_state.." = "..rV.cff_state.." * "..sV.opv.."")
	
	A("   if "..sV.c_state.." == 1 then")
	A("    local "..sV.raw.." = "..rV.sub_bc.."["..sV.spc.." * "..sV.opv.."] or {0, 0}")
	A("    local "..sV.rss.." = bit32.bxor("..v.P.."."..pk.seed..", "..v.P.."."..pk.hash.." % 65536) % 256")
	A("    local "..sV.sop.." = {bit32.bxor("..sV.raw.."[1], "..sV.rss.."), bit32.bxor("..sV.raw.."[2] or 0, "..sV.rss..")}")
	A("    local "..sV.sub_h.." = "..sV.hnd.."["..sV.sop.."[1]]")
	
	A("    if "..sV.sub_h.." then")
	A("     local "..sV.ret.." = "..sV.sub_h.."("..sV.sop..")")
	A("     if "..sV.ret.." then return "..sV.ret.." end")
	A("    else")
	A("     local "..sV.trap.." = "..sV.hnd.."[0xDEAD]")
	A("     if "..sV.trap.." then "..sV.trap.."("..sV.sop..") end")
	A("    end")
	A("    "..rV.cff_state.." = 2 * "..sV.opv.."")
	
	A("   elseif "..sV.c_state.." == 2 then")
	A("    "..sV.spc.." = "..sV.spc.." + "..sV.opv.."")
	A("    if "..sV.spc.." > #"..rV.sub_bc.." then break end")
	A("    "..rV.cff_state.." = 1 * "..sV.opv.."")
	
	A("   else")
	A("    break")
	A("   end")
	A("  end")
	A(" end")

		A("local function "..vmName.."("..v.P..","..v.E..","..v.a..","..v.U..")")
	local randLockStr = string.char(math.random(97,122), math.random(97,122), math.random(97,122), math.random(97,122), math.random(97,122))

		local rt_mulConst = math.random(100000000, 999999999)
		local rt_modConst = math.random(0x100000, 0xFFFFFF)
		A(" local "..rV.rt_seed.." = math.floor(os.clock() * "..rt_mulConst..") % "..rt_modConst.."")
	A(" local "..rV.chain_key.." = bit32.bxor("..rV.rt_seed..", " .. math.random(0x1000, 0xFFFF) .. ")")

	A(" local "..rV.l4_cor.." = "..rV.env.."["..bStr("coroutine").."]")
	A(" local "..rV.l4_cc.."  = "..rV.l4_cor.."["..bStr("create").."]")
	A(" local "..rV.l4_cr.."  = "..rV.l4_cor.."["..bStr("resume").."]")
	A(" local "..rV.l4_cy.."  = "..rV.l4_cor.."["..bStr("yield").."]")
	A(" local "..rV.l4_np.."  = "..rV.env.."["..bStr("newproxy").."]")
	A(" local "..rV.l4_gmt.." = "..rV.env.."["..bStr("getmetatable").."]")
	A(" local "..rV.l4_pc.."  = "..rV.env.."["..bStr("pcall").."]")
	A(" local "..rV.l4_ts.."  = "..rV.env.."["..bStr("tostring").."]")
	A(" local "..rV.l4_sf.."  = "..rV.env.."["..bStr("string").."]["..bStr("find").."]")
	A(" local "..rV.l4_frac.." = false")
	A(" if "..rV.l4_np.." and "..rV.l4_cc.." and "..rV.l4_cr.." and "..rV.l4_cy.." then")
	A("  local "..rV.l4_trap.." = "..rV.l4_np.."(true)")
	A("  "..rV.l4_gmt.."("..rV.l4_trap..")["..bStr("__tostring").."] = function() "..rV.l4_cy.."() return "..bStr(" ").." end")
	A("  local "..rV.l4_thr.." = "..rV.l4_cc.."(function()")
	A("   local "..rV.l4_s..", "..rV.l4_r.." = "..rV.l4_pc.."("..rV.l4_ts..", "..rV.l4_trap..")")
	A("   if not "..rV.l4_s.." and "..rV.l4_sf.."("..rV.l4_ts.."("..rV.l4_r.." or "..bStr(" ").."), "..bStr("yield")..") then")
	A("    "..rV.l4_frac.." = true")
	A("   end")
	A("  end)")
	A("  "..rV.l4_cr.."("..rV.l4_thr..")")
	A("  "..rV.l4_trap.." = nil; "..rV.l4_thr.." = nil")
	A(" end")
	A(" if not "..rV.l4_frac.." then")
	A("  local "..rV.l4_pkey.." = ("..v.P.."."..pk.hash.." % 254) + 1")
	A("  "..rV.chain_key.." = bit32.bxor("..rV.chain_key..", "..rV.l4_pkey..")")
	A("  "..rV.l4_pkey.." = nil")
	A(" end")
	A(" "..rV.l4_cor.."=nil; "..rV.l4_cc.."=nil; "..rV.l4_cr.."=nil; "..rV.l4_cy.."=nil")
	A(" "..rV.l4_np.."=nil; "..rV.l4_gmt.."=nil; "..rV.l4_pc.."=nil; "..rV.l4_ts.."=nil; "..rV.l4_sf.."=nil; "..rV.l4_frac.."=nil")

		A(" local "..rV.rcStore.."={}; local "..v.pr.."="..v.P.."."..pk.pr)
	A(" local "..rV.rcKey.." = bit32.bxor("..rV.rt_seed..", "..rV.chain_key..")")
	A(" setmetatable("..rV.rcStore..", {")
	A("  __pairs = function() "..v.dynState.." = bit32.bxor("..v.dynState..", 0xDEAD); return function() end end,")
	A("  __tostring = function() "..v.dynState.." = bit32.bxor("..v.dynState..", 0xDEAD); return 'Memory' end")
	A(" })")
	A(" local function "..rV.rcGet.."("..rV.key..") return "..rV.rcStore.."[bit32.bxor("..rV.key..", "..rV.rcKey..")] end")
	A(" local function "..rV.rcSet.."("..rV.key..", "..rV.val..") "..rV.rcStore.."[bit32.bxor("..rV.key..", "..rV.rcKey..")] = "..rV.val.." end")
	A(" local "..rV.realBc.."="..v.P.."."..pk.c)
	A(" local "..rV.realK.."="..v.P.."."..pk.k)
	
		A(" local function "..rV.crash.."() "..v.rk.." = bit32.bxor("..v.rk..", 0x5A); "..v.rks.." = bit32.bxor("..v.rks..", 0x5A) end")

		A(" local "..rV.mt.." = {")
	A("  __index = function("..rV.self..", "..rV.key..")")
	A("   return "..rV.realBc.."["..rV.key.."]")
	A("  end,")
	A("  __newindex = function("..rV.self..", "..rV.key..", "..rV.val..") "..rV.crash.."() end,")
	A("  __metatable = '"..randLockStr.."'")
	A(" }")
	A(" local "..v.bc.." = setmetatable({}, "..rV.mt..")")

		A(" local function "..v.mk.."("..v.p..","..v.e..") return{"..pk.p.."="..v.p..","..pk.e.."="..v.e..","..pk.cl.."=true}end")
	A(" if "..v.a.." then for "..rV.x.."=1, "..v.a..".n or 0 do "..rV.rcSet.."("..rV.x.."-1, "..v.a.."["..rV.x.."]) end end")
	
		A(" local "..rV.pipelineLockVar.." = ("..rV.opaqueTrue.."() == 1)")
A(" local "..rV.vmTrusted.." = setmetatable({}, {__mode='k'})")
	A(" local "..v.dynState.." = 0")
	

			local tV3 = { e1 = newVar(), s1 = newVar(), r1 = newVar(), e2 = newVar(), ok = newVar(), fn = newVar() }
	A(" local "..rV.safe_iscc.." = (function()")
	A("  local "..tV3.e1.." = "..rV.env)
	A("  return "..tV3.e1.."["..bStr("iscclosure").."] or function(f) local "..tV3.s1..", "..tV3.r1.." = pcall(function() return "..tV3.e1..".debug.info(f, 's') == '[C]' end) return "..tV3.s1.." and "..tV3.r1.." or false end")
	A(" end)()")
		A(" local "..rV.safe_iscc.." = function(f) return type(f) == " .. bStr("function") .. " end")
	A(" local "..v.tmp.." = {}")
	A(" local "..v.top.." = 0")
	A(" local "..v.i..", "..v.op)
			A(" local "..v.rk.." = 0")
	A(" local "..rV.poly_seed.." = bit32.bxor("..v.P.."."..pk.seed..", "..v.P.."."..pk.hash.." % 65536)")

	local cv = {
		H = newVar(), i = newVar(), t = newVar(), j = newVar(),
		tbO = newVar(), tbR = newVar(), hk = newVar(), ln = newVar(), m = newVar()
	}
	local maskKey = math.random(100000, 999999)

	A(" do")
	A("  local "..cv.H.." = 0")
		A("  for "..cv.i.."=1, #"..rV.realBc.." do")
	A("   local "..cv.t.." = "..v.bc.."["..cv.i.."]")
	A("   if "..cv.t.." then")
	A("    for "..cv.j.."=1, #"..cv.t.." do "..cv.H.." = ("..cv.H.." + "..cv.t.."["..cv.j.."]) % 4294967296 end")
	A("   end")
	A("  end")
	
	local st_1 = math.random(1000, 9999)
	local st_2 = math.random(1000, 9999)
	local st_3 = math.random(1000, 9999)
	local st_4 = math.random(1000, 9999)
	local st_end = math.random(1000, 9999)
	
		local cff_nodes = {
				{ st = st_1, cd = cv.tbO..", "..cv.tbR.." = pcall(function() return "..rV.env.."["..bStr("debug").."]["..bStr("traceback").."]() end); "..rV.cff_st.." = "..st_2 },
		{ st = st_2, cd = "if "..cv.tbO.." and type("..cv.tbR..") == "..bStr("string").." then "..rV.cff_st.." = "..st_3.." else "..rV.cff_st.." = "..st_end.." end" },
		{ st = st_3, cd = "for "..cv.m.." in getfenv()["..bStr("string").."]["..bStr("gmatch").."]("..cv.tbR..", "..bStr("\n")..") do "..cv.ln.." = "..cv.ln.." + 1 end; "..rV.cff_st.." = "..st_4 },
		{ st = st_4, cd = "if "..cv.ln.." > 150000 then "..cv.hk.." = true end; "..rV.cff_st.." = "..st_end }
	}
	
	for i = #cff_nodes, 2, -1 do
		local j = math.random(i)
		cff_nodes[i], cff_nodes[j] = cff_nodes[j], cff_nodes[i]
	end
	
	A("  local "..cv.hk.." = false")
	A("  local "..cv.ln.." = 0")
	A("  local "..cv.tbO..", "..cv.tbR)
	A("  local "..rV.cff_st.." = "..st_1)
	A("  while "..rV.cff_st.." ~= "..st_end.." do")
	for i, node in ipairs(cff_nodes) do
		if i == 1 then
			A("   if "..rV.cff_st.." == "..node.st.." then")
		else
			A("   elseif "..rV.cff_st.." == "..node.st.." then")
		end
		A("    "..node.cd)
	end
	A("   end")
	A("  end")

		local tV1 = { encAct = newVar(), encExp = newVar() }
	A("  local "..tV1.encAct.." = bit32.bxor("..cv.H..", "..maskKey..")")
	A("  local "..tV1.encExp.." = bit32.bxor("..v.P.."."..pk.hash.." or 0, "..maskKey..")")
	A("  if "..tV1.encAct.." ~= "..tV1.encExp.." or "..cv.hk.." then ")
	A("   "..v.dynState.." = bit32.bxor("..v.dynState..", 0xDEADBEEF)")
	A("   "..v.rk.." = bit32.bxor("..v.rk..", 0x1A2B3C); "..v.rks.." = bit32.bxor("..v.rks..", 0x1A2B3C)")
	A("   "..rV.Central_Dispatcher.." = false")
	A("  end")
	A(" end")
			local tV2 = { hkey = newVar(), h_raw = newVar(), xk = newVar() }
	A(" local "..tV2.hkey.." = math.random(100, 9999)")
	A(" local "..tV2.h_raw.." = {}")
	A(" local "..v.handlers.." = setmetatable({}, {")
		A("  __index = function(_, k)")
	A("   if type(k) ~= 'number' then "..v.rk.." = bit32.bxor("..v.rk..", 0x3D); "..v.rks.." = bit32.bxor("..v.rks..", 0x3D) return function() end end")
	A("   return "..tV2.h_raw.."[bit32.bxor(k, "..tV2.hkey..")] or function() end")
	A("  end,")
	A("  __newindex = function(_, k, v)")
	A("   local "..tV2.xk.." = bit32.bxor(k, "..tV2.hkey..")")
	A("   if "..tV2.h_raw.."["..tV2.xk.."] then "..v.rk.." = bit32.bxor("..v.rk..", 0x4E); "..v.rks.." = bit32.bxor("..v.rks..", 0x4E) return end")
	A("   "..tV2.h_raw.."["..tV2.xk.."] = v")
	A("  end,")
	A("  __metatable = 'Locked'")
	A(" })")
	A(" local "..rV.alu_a..", "..rV.alu_b..", "..rV.alu_id..", "..rV.alu_res.."")
	
	A(" local "..rV.dispatch_next.."")
	A(" local "..rV.has_returned.." = false")
	A(" local "..rV.return_values.." = {}")
	A(" local "..rV.Central_Dispatcher.." = true")
	A(" local "..rV.State_Variable.." = 1")

		local mk1 = math.random(100000, 999999)
	local mk2 = bit32.bxor(numKey, mk1)
		local encNumKey = "bit32.bxor("..mk1..", "..mk2..")"

	local zV = {
		idx = newVar(),
		s = newVar(),
		len = newVar(),
		z = newVar(),
		i = newVar()
	}

			local opLogic = {
		{ "M_SECURE_ERASE", "local "..zV.idx.."="..v.i.."[2]; "..zV.idx.."="..zV.idx.." and bit32.bxor("..zV.idx..","..v.rks..") or nil; if "..zV.idx.." and "..zV.idx..">2147483647 then "..zV.idx.."="..zV.idx.."-4294967296 end; if type("..rV.rcGet.."("..zV.idx.."))=='string' then local "..zV.s.."="..rV.rcGet.."("..zV.idx.."); local "..zV.len.."=#"..zV.s.."; for _erase_loop=1,4 do local "..zV.z.."={}; for "..zV.i.."=1,"..zV.len.." do "..zV.z.."["..zV.i.."]=string.char(math.random(0,255)) end; "..rV.rcSet.."("..zV.idx..", table.concat("..zV.z..")); end; end; "..rV.rcSet.."("..zV.idx..", nil);" },
		{ "M_PUSH_REG", "local "..rV.pushReg_idx.."="..v.i.."[2]; "..rV.pushReg_idx.."="..rV.pushReg_idx.." and bit32.bxor("..rV.pushReg_idx..","..v.rks..") or nil; if "..rV.pushReg_idx.." and "..rV.pushReg_idx..">2147483647 then "..rV.pushReg_idx.."="..rV.pushReg_idx.."-4294967296 end; "..v.top.."="..v.top.."+1;"..v.tmp.."["..v.top.."]="..rV.rcGet.."("..rV.pushReg_idx..")" },
		{ "M_PUSH_K", "local "..rV.pushK_id.."="..v.i.."[2]; "..rV.pushK_id.."="..rV.pushK_id.." and bit32.bxor("..rV.pushK_id..","..v.rks..") or nil; if "..rV.pushK_id.." and "..rV.pushK_id..">2147483647 then "..rV.pushK_id.."="..rV.pushK_id.."-4294967296 end; "..v.top.."="..v.top.."+1;"..v.tmp.."["..v.top.."]="..rV.realK.."("..rV.pushK_id..")" },
		{ "M_PUSH_LIT", "local "..rV.pushLit_val.."="..v.i.."[2]; "..rV.pushLit_val.."="..rV.pushLit_val.." and bit32.bxor("..rV.pushLit_val..","..v.rks..") or nil; if "..rV.pushLit_val.." and "..rV.pushLit_val..">2147483647 then "..rV.pushLit_val.."="..rV.pushLit_val.."-4294967296 end; "..v.top.."="..v.top.."+1;"..v.tmp.."["..v.top.."]="..rV.pushLit_val.."" },
		{ "M_WRITE_REG", "local "..rV.writeReg_idx.."="..v.i.."[2]; "..rV.writeReg_idx.."="..rV.writeReg_idx.." and bit32.bxor("..rV.writeReg_idx..","..v.rks..") or nil; if "..rV.writeReg_idx.." and "..rV.writeReg_idx..">2147483647 then "..rV.writeReg_idx.."="..rV.writeReg_idx.."-4294967296 end; "..rV.rcSet.."("..rV.writeReg_idx..", "..rV.alu_res..")" },
		{ "M_FETCH_REG_ID", "local "..rV.fetchReg_idx.."="..v.i.."[2]; "..rV.fetchReg_idx.."="..rV.fetchReg_idx.." and bit32.bxor("..rV.fetchReg_idx..","..v.rks..") or nil; if "..rV.fetchReg_idx.." and "..rV.fetchReg_idx..">2147483647 then "..rV.fetchReg_idx.."="..rV.fetchReg_idx.."-4294967296 end; "..rV.alu_res.."="..rV.rcGet.."("..rV.fetchReg_idx..")" },
		{ "M_POP_ALU_B", rV.alu_b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1" },
		{ "M_POP_ALU_A", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1" },
		
		{ "M_ALU_ADD", "if type("..rV.alu_a..")=='number' and type("..rV.alu_b..")=='number' then local "..rV._p.."="..v.dynState.."%3;if "..rV._p.."==0 then "..rV.alu_res.."="..rV.alu_a.."+"..rV.alu_b.." elseif "..rV._p.."==1 then "..rV.alu_res.."=("..rV.alu_a.."*2+"..rV.alu_b.."*2)/2 else "..rV.alu_res.."=("..rV.alu_a.."+"..v.rk..")+("..rV.alu_b.."-"..v.rk..") end else "..rV.alu_res.."="..rV.alu_a.."+"..rV.alu_b.." end" },
		{ "M_ALU_SUB", "if type("..rV.alu_a..")=='number' and type("..rV.alu_b..")=='number' then local "..rV._p.."="..v.dynState.."%3;if "..rV._p.."==0 then "..rV.alu_res.."="..rV.alu_a.."-"..rV.alu_b.." elseif "..rV._p.."==1 then "..rV.alu_res.."=("..rV.alu_a.."*2-"..rV.alu_b.."*2)/2 else "..rV.alu_res.."=("..rV.alu_a.."+"..v.rk..")-("..rV.alu_b.."+"..v.rk..") end else "..rV.alu_res.."="..rV.alu_a.."-"..rV.alu_b.." end" },
		{ "M_ALU_MUL", "local "..rV._p.."="..v.dynState.."%2;if "..rV._p.."==0 then "..rV.alu_res.."="..rV.alu_a.."*"..rV.alu_b.." else "..rV.alu_res.."="..rV.alu_b.."*"..rV.alu_a.." end" },
		{ "M_ALU_BXOR", "local "..rV._p.."="..v.dynState.."%3;if "..rV._p.."==0 then "..rV.alu_res.."=bit32.bxor("..rV.alu_a..","..rV.alu_b..") elseif "..rV._p.."==1 then "..rV.alu_res.."=bit32.bor("..rV.alu_a..","..rV.alu_b..")-bit32.band("..rV.alu_a..","..rV.alu_b..") else "..rV.alu_res.."=bit32.bnot(bit32.bxor(bit32.bnot("..rV.alu_a.."),"..rV.alu_b..")) end" },
		
		{ "M_ALU_DIV", rV.alu_res.."="..rV.alu_b.."~=0 and "..rV.alu_a.."/"..rV.alu_b.." or 0" },
		{ "M_ALU_MOD", rV.alu_res.."="..rV.alu_b.."~=0 and "..rV.alu_a.."%"..rV.alu_b.." or 0" },
		{ "M_ALU_POW", rV.alu_res.."="..rV.alu_a.."^"..rV.alu_b.."" },
		{ "M_ALU_IDIV", rV.alu_res.."="..rV.alu_b.."~=0 and math.floor("..rV.alu_a.."/"..rV.alu_b..") or 0" },
		{ "M_ALU_BAND", "local "..rV._p.."="..v.dynState.."%2;if "..rV._p.."==0 then "..rV.alu_res.."=bit32.band("..rV.alu_a..","..rV.alu_b..") else "..rV.alu_res.."=bit32.bnot(bit32.bor(bit32.bnot("..rV.alu_a.."),bit32.bnot("..rV.alu_b.."))) end" },
		{ "M_ALU_BOR", "local "..rV._p.."="..v.dynState.."%2;if "..rV._p.."==0 then "..rV.alu_res.."=bit32.bor("..rV.alu_a..","..rV.alu_b..") else "..rV.alu_res.."=bit32.bnot(bit32.band(bit32.bnot("..rV.alu_a.."),bit32.bnot("..rV.alu_b.."))) end" },
		{ "M_ALU_SHL", rV.alu_res.."=bit32.lshift("..rV.alu_a..","..rV.alu_b..")" },
		{ "M_ALU_SHR", rV.alu_res.."=bit32.rshift("..rV.alu_a..","..rV.alu_b..")" },
		{ "M_ALU_UNM", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=-"..rV.alu_a.."" },
		{ "M_ALU_BNOT", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=bit32.bnot("..rV.alu_a..")" },
		{ "M_ALU_NOT", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=not "..rV.alu_a.."" },
		{ "M_ALU_LEN", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=type("..rV.alu_a..")=='string' and #"..rV.alu_a.." or (type("..rV.alu_a..")=='table' and #"..rV.alu_a.." or 0)" },
		{ "M_LOADBOOL", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.loadBool_idx.."="..v.i.."[2]; "..rV.loadBool_idx.."="..rV.loadBool_idx.." and bit32.bxor("..rV.loadBool_idx..","..v.rks..") or nil; if "..rV.loadBool_idx.." and "..rV.loadBool_idx..">2147483647 then "..rV.loadBool_idx.."="..rV.loadBool_idx.."-4294967296 end; "..rV.rcSet.."("..rV.loadBool_idx..", ("..rV.b.."~=0));if "..rV.c.."~=0 then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" },
		{ "M_LOADNIL", "local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;for "..rV.x.."="..rV.a..","..rV.b.." do "..rV.rcSet.."("..rV.x..", nil) end" },
		
		{ "M_GETGLOBAL", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.getGlobal_dst.."="..v.i.."[2]; "..rV.getGlobal_dst.."="..rV.getGlobal_dst.." and bit32.bxor("..rV.getGlobal_dst..","..v.rks..") or nil; if "..rV.getGlobal_dst.." and "..rV.getGlobal_dst..">2147483647 then "..rV.getGlobal_dst.."="..rV.getGlobal_dst.."-4294967296 end; local "..rV.getGlobal_kid.."="..v.i.."[3]; "..rV.getGlobal_kid.."="..rV.getGlobal_kid.." and bit32.bxor("..rV.getGlobal_kid..","..v.rks..") or nil; if "..rV.getGlobal_kid.." and "..rV.getGlobal_kid..">2147483647 then "..rV.getGlobal_kid.."="..rV.getGlobal_kid.."-4294967296 end; "..rV.rcSet.."("..rV.getGlobal_dst..", "..v.E.."["..rV.subVMName.."("..rV.k..", "..rV.getGlobal_kid..", nil, "..rV.State_Variable..", "..v.rks..", "..v.op..")])" },
		{ "M_SETGLOBAL", "local "..rV.s.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.gk.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.setGlobal_kid.."="..v.i.."[2]; "..rV.setGlobal_kid.."="..rV.setGlobal_kid.." and bit32.bxor("..rV.setGlobal_kid..","..v.rks..") or nil; if "..rV.setGlobal_kid.." and "..rV.setGlobal_kid..">2147483647 then "..rV.setGlobal_kid.."="..rV.setGlobal_kid.."-4294967296 end; "..v.E.."["..rV.subVMName.."("..rV.gk..", "..rV.setGlobal_kid..", nil, "..rV.State_Variable..", "..v.rks..", "..v.op..")]="..rV.s.."" },
		
		{ "M_GETTABLE", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.getTable_dst.."="..v.i.."[2]; "..rV.getTable_dst.."="..rV.getTable_dst.." and bit32.bxor("..rV.getTable_dst..","..v.rks..") or nil; if "..rV.getTable_dst.." and "..rV.getTable_dst..">2147483647 then "..rV.getTable_dst.."="..rV.getTable_dst.."-4294967296 end; "..rV.rcSet.."("..rV.getTable_dst..", "..rV.t.."["..rV.k.."])" },
		{ "M_SETTABLE", "local "..rV.v.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; "..rV.t.."["..rV.k.."]="..rV.v.."" },
		{ "M_NEWTABLE", "local "..rV.newTable_dst.."="..v.i.."[2]; "..rV.newTable_dst.."="..rV.newTable_dst.." and bit32.bxor("..rV.newTable_dst..","..v.rks..") or nil; if "..rV.newTable_dst.." and "..rV.newTable_dst..">2147483647 then "..rV.newTable_dst.."="..rV.newTable_dst.."-4294967296 end; "..rV.rcSet.."("..rV.newTable_dst..", {})" },
		{ "M_SELF", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.self_dst.."="..v.i.."[2]; "..rV.self_dst.."="..rV.self_dst.." and bit32.bxor("..rV.self_dst..","..v.rks..") or nil; if "..rV.self_dst.." and "..rV.self_dst..">2147483647 then "..rV.self_dst.."="..rV.self_dst.."-4294967296 end; "..rV.rcSet.."("..rV.self_dst.."+1, "..rV.t..");"..rV.rcSet.."("..rV.self_dst..", "..rV.t.."["..rV.k.."])" },
		{ "M_CONCAT", "local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.ps.."={};for "..rV.ci.."="..rV.a..","..rV.b.." do "..rV.ps.."[#"..rV.ps.."+1]=tostring("..rV.rcGet.."("..rV.ci..")) end;local "..rV.concat_dst.."="..v.i.."[2]; "..rV.concat_dst.."="..rV.concat_dst.." and bit32.bxor("..rV.concat_dst..","..v.rks..") or nil; if "..rV.concat_dst.." and "..rV.concat_dst..">2147483647 then "..rV.concat_dst.."="..rV.concat_dst.."-4294967296 end; "..rV.rcSet.."("..rV.concat_dst..", table.concat("..rV.ps.."))" },
		{ "M_JMP", rV.dispatch_next.."=(("..v.tmp.."["..v.top.."]) or ("..rV.dispatch_next.."));"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1" },
		{ "M_EQ", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if("..rV.b.."=="..rV.c..")~=("..rV.a.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" },
		{ "M_LT", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if("..rV.b.."<"..rV.c..")~=("..rV.a.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" },
		{ "M_LE", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if("..rV.b.."<="..rV.c..")~=("..rV.a.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" },
		{ "M_TEST", "local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if(not not "..rV.a..")~=("..rV.b.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" },
		{ "M_CALL", "local "..rV.nrv.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.na.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.dst.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.fn.."="..rV.rcGet.."("..rV.dst..");local "..rV.a2.."={};for "..rV.ai.."=1,"..rV.na.." do "..rV.a2.."["..rV.ai.."]="..rV.rcGet.."("..rV.dst.."+"..rV.ai..") end;local "..rV.rv.."; if type("..rV.fn..")=="..bStr("table").." and rawget("..rV.fn..",'"..pk.cl.."') then "..rV.rv.." = {"..vmName.."("..rV.fn.."."..pk.p..","..rV.fn.."."..pk.e..","..rV.a2..")} else "..rV.rv.." = {"..rV.fn.."((unpack or table.unpack)("..rV.a2..", 1, "..rV.na.."))} end; for "..rV.ri.."=1,"..rV.nrv.." do "..rV.rcSet.."("..rV.dst.."+"..rV.ri.."-1, "..rV.rv.."["..rV.ri.."]) end" },
		{ "M_RETURN", "local "..rV.n.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.base.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.has_returned.."=true;if "..rV.n.."==0 then "..rV.return_values.."={}; "..rV.rcStore.."={}; return end;local "..rV.rv.."={};for "..rV.ri.."=0,"..rV.n.."-1 do "..rV.rv.."["..rV.ri.."+1]="..rV.rcGet.."("..rV.base.."+"..rV.ri..") end;"..rV.return_values.."="..rV.rv..";"..rV.rcStore.."={};return" },
		{ "M_FORPREP", "local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.ir.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.rcSet.."("..rV.ir..", ("..rV.rcGet.."("..rV.ir..") or 0)-("..rV.rcGet.."("..rV.ir.."+2) or 1)); "..rV.dispatch_next.."="..rV.t },
		{ "M_FORLOOP", "local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.ir.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.idx.."="..rV.rcGet.."("..rV.ir..")+("..rV.rcGet.."("..rV.ir.."+2) or 1);"..rV.rcSet.."("..rV.ir..", "..rV.idx..");if "..rV.idx.."<="..rV.rcGet.."("..rV.ir.."+1) then "..rV.rcSet.."("..rV.ir.."+3, "..rV.idx..");"..rV.dispatch_next.."="..rV.t.." end" },
				{ "M_CLOSURE", "local "..rV.p_idx.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.clPr.."="..v.pr.."["..rV.p_idx.."+1]; local "..rV.clUvs.."={}; for "..rV.clIdx..","..rV.clUv.." in ipairs("..rV.clPr..".upvalues or {}) do if "..rV.clUv.."[1]==1 then "..rV.clUvs.."["..rV.clIdx.."]=function("..rV.clVal..","..rV.clSet..") if "..rV.clSet.." then "..rV.rcSet.."("..rV.clUv.."[2], "..rV.clVal..") else return "..rV.rcGet.."("..rV.clUv.."[2]) end end else "..rV.clUvs.."["..rV.clIdx.."]="..v.U.."["..rV.clUv.."[2]+1] end end; local "..rV.clInner.." = function(...) return "..vmName.."("..rV.clPr..","..v.E..",{n=select('#', ...), ...},"..rV.clUvs..") end; local "..rV.clWrapped.."; if "..rV.safe_newcc.." then "..rV.clWrapped.." = "..rV.safe_newcc.."("..rV.clInner..") else "..rV.clWrapped.." = "..rV.clInner.." end; "..rV.vmTrusted.."["..rV.clWrapped.."] = true; local "..rV.closure_dst.."="..v.i.."[2]; "..rV.closure_dst.."="..rV.closure_dst.." and bit32.bxor("..rV.closure_dst..","..v.rks..") or nil; if "..rV.closure_dst.." and "..rV.closure_dst..">2147483647 then "..rV.closure_dst.."="..rV.closure_dst.."-4294967296 end; "..rV.rcSet.."("..rV.closure_dst..", "..rV.clWrapped..")" },
		{ "M_GETUPVAL", "local "..rV.upIdx.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.getUpval_dst.."="..v.i.."[2]; "..rV.getUpval_dst.."="..rV.getUpval_dst.." and bit32.bxor("..rV.getUpval_dst..","..v.rks..") or nil; if "..rV.getUpval_dst.." and "..rV.getUpval_dst..">2147483647 then "..rV.getUpval_dst.."="..rV.getUpval_dst.."-4294967296 end; "..rV.rcSet.."("..rV.getUpval_dst..", "..v.U.."["..rV.upIdx.."+1]())" },
		{ "M_SETUPVAL", "local "..rV.upVal.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.upIdx.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; "..v.U.."["..rV.upIdx.."+1]("..rV.upVal..", true)" },
		{ "M_HALT", ""..rV.Central_Dispatcher.."=false; "..rV.rcStore.."={}" },
		{ "M_NOP", "" },
		{ "M_EXEC_SUB", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.execSub_dst.."="..v.i.."[2]; "..rV.execSub_dst.."="..rV.execSub_dst.." and bit32.bxor("..rV.execSub_dst..","..v.rks..") or nil; if "..rV.execSub_dst.." and "..rV.execSub_dst..">2147483647 then "..rV.execSub_dst.."="..rV.execSub_dst.."-4294967296 end; local "..rV.execSub_kid.."="..v.i.."[3]; "..rV.execSub_kid.."="..rV.execSub_kid.." and bit32.bxor("..rV.execSub_kid..","..v.rks..") or nil; if "..rV.execSub_kid.." and "..rV.execSub_kid..">2147483647 then "..rV.execSub_kid.."="..rV.execSub_kid.."-4294967296 end; "..rV.rcSet.."("..rV.execSub_dst..", "..rV.subVMName.."("..rV.k..", "..rV.execSub_kid..", nil, "..rV.State_Variable..", "..v.rks..", "..v.op..")) " }
	}

	local function getLogicString(opName)
		for _, def in ipairs(opLogic) do
			if def[1] == opName then return def[2] end
		end
		return ""
	end

				for superName, ops in pairs(superMap) do
		local logic1 = getLogicString(ops[1])
		local logic2 = getLogicString(ops[2])
		local v_nxt = "nxt_"..math.random(1000,9999)
		
													local fake_path = v.dynState.." = bit32.bxor("..v.dynState..", 0xDEADBEEF);"
		local combinedLogic = logic1 .. " " ..
					  "local "..v_nxt.." = " .. v.bc .. "[" .. rV.dispatch_next .. "]; " ..
					  "if "..v_nxt.." then " ..
					  "local "..sV.nxt_rk.." = ((("..rV.dispatch_next.." * "..rV.dispatch_next.." * 197) + ("..rV.dispatch_next.." * 83) + "..rV.poly_seed..") % 4294967296); " ..
					  "if ("..v.dynState.." % 256) == 0xDEAD then "..sV.nxt_rk.." = 0 end; " ..
					  v.dynState.." = bit32.bxor("..v.dynState..", "..v_nxt.."[1]); " ..
					  v.dynState.." = math.floor(("..v.dynState.." + ("..v_nxt.."[1] or 0)) % 256); " ..
					  v.i.." = "..v_nxt.."; " ..
					  v.rks.." = "..sV.nxt_rk.."; " ..
					  v.rk.." = "..v_nxt.."[2] or 0; " ..
					  "if "..rV.opaqueTrue.."() == 1 then " .. logic2 .. " else " .. fake_path .. " end " ..
					  rV.dispatch_next .. " = " .. rV.dispatch_next .. " + 1; " ..
					  "end"
		opLogic[#opLogic+1] = { superName, combinedLogic }
	end

	for i = #opLogic, 2, -1 do
		local j = math.random(i)
		opLogic[i], opLogic[j] = opLogic[j], opLogic[i]
	end

	for _, opDef in ipairs(opLogic) do
		local op = opDef[1]
		local logic = opDef[2]
		
				local jv = newVar()
		local opq_val = math.random(10, 9999)
		local junk_logic = "local "..jv.." = "..opq_val.."; if bit32.band("..jv..", bit32.bnot("..jv..")) ~= 0 then "..v.rk.." = bit32.bxor("..v.rk..", "..jv..") end; "
		
		local mut_key = math.random(100, 999)
		local v_tmp_d = newVar()
		local dyn_mutation = "local "..v_tmp_d.." = bit32.bxor("..v.dynState..", "..mut_key..") + (bit32.band("..v.dynState..", "..mut_key..") * 2); "..v.dynState.." = "..v_tmp_d.." - "..mut_key.."; "
		
		logic = junk_logic .. dyn_mutation .. logic

		local hBody = v.dynState.." = math.floor(("..v.dynState.." + ("..v.i.."[1] or 0)) % 256);"
		local dCheck = genCollatzCheck(v.dynState)
		
		if op == "M_HALT" or op == "M_RETURN" then
			hBody = hBody .. "if "..rV.pipelineLockVar.." or "..rV.opaqueTrue.."() then if "..rV.pipelineLockVar.." or " .. dCheck .. " then " .. logic .. " else return end else return end"
		else
			hBody = hBody .. "if "..rV.pipelineLockVar.." or "..rV.opaqueTrue.."() then if "..rV.pipelineLockVar.." or " .. dCheck .. " then " .. logic .. " else "..rV.dispatch_next.."="..rV.dispatch_next.."-"..math.random(1,10).." end else "..rV.dispatch_next.."="..rV.dispatch_next.."+"..math.random(1,10).." end"
		end
		
		A(" "..v.handlers.."["..ov(op).."] = function() " .. hBody .. " end")
	end

	
	A(" local "..rV.max_pc.." = 0")
	A(" for k in pairs("..rV.realBc..") do if type(k) == 'number' and k > "..rV.max_pc.." then "..rV.max_pc.." = k end end")
	
	
	

	A(" local "..rV.gm.." = "..rV.env.."["..bStr("getmetatable").."]")
	A(" local "..rV.tp.." = "..rV.env.."["..bStr("type").."]")
	A(" local "..rV.pc.." = "..rV.env.."["..bStr("pcall").."]")
	A(" local "..rV.rg.." = "..rV.env.."["..bStr("rawget").."]")
		A(" local "..rV.isc.." = function(f) return type(f) == " .. bStr("function") .. " end")
	A(" local "..rV.tof_pre.." = "..rV.env.."["..bStr("typeof").."]")
	A(" local "..rV.g_pre.." = "..rV.env.."["..bStr("game").."]")
	A(" local "..rV.v3_pre.." = "..rV.env.."["..bStr("Vector3").."]")
	A(" local "..rV.sf.." = "..rV.env.."["..bStr("string").."] and "..rV.env.."["..bStr("string").."]["..bStr("find").."] or function() return nil end")

	A(" do")
	A("  local "..rV.env_probe_mt.." = ("..rV.tp.."("..rV.gm..") == "..bStr("function")..") and "..rV.gm.."("..v.E..") or nil")
	A("  if "..rV.tp.."("..rV.env_probe_mt..") == "..bStr("table").." and "..rV.rg.."("..rV.env_probe_mt..", "..bStr("__newindex")..") ~= nil then")
		A("   "..v.dynState.." = bit32.bxor("..v.dynState..", "..rV.rt_seed..")")
	A("   "..v.rk.." = bit32.bxor("..v.rk..", "..rV.chain_key.."); "..v.rks.." = bit32.bxor("..v.rks..", "..rV.chain_key..")")
	A("   "..rV.Central_Dispatcher.." = false")
	A("  end")
	A(" end")

	A(" local "..rV.mt_bc_pre.." = ("..rV.tp.."("..rV.gm..") == "..bStr("function")..") and "..rV.gm.."("..v.bc..") or "..bStr("nil").."")
	A(" local "..rV.mt_h_pre.." = ("..rV.tp.."("..rV.gm..") == "..bStr("function")..") and "..rV.gm.."("..v.handlers..") or "..bStr("nil").."")
	A(" local "..rV.is_inst_pre.." = ("..rV.tof_pre.." and "..rV.g_pre.." and "..rV.tof_pre.."("..rV.g_pre..") == "..bStr("Instance")..") and true or false")
	A(" local "..rV.s_pre..", "..rV.e_pre.." = "..rV.pc.."(function() return "..rV.g_pre.."."..rV.fake_prop_pre.." end)")
	A(" local "..rV.err_valid_pre.." = (not "..rV.s_pre.." and "..rV.tp.."("..rV.e_pre..") == "..bStr("string").." and "..rV.sf.."("..rV.e_pre..", "..bStr("valid member")..")) and true or false")
	A(" local "..rV.v3_valid_pre.." = false")
		A(" if "..rV.v3_pre.." and "..rV.v3_pre.."["..bStr("new").."] then")
	A("  local "..rV.s2_pre..", "..rV.r2_pre.." = "..rV.pc.."(function() local _v1 = "..rV.v3_pre.."["..bStr("new").."](1,0,0); local _v2 = "..rV.v3_pre.."["..bStr("new").."](0,1,0); return _v1["..bStr("Cross").."](_v1, _v2)["..bStr("Z").."] end)")
	A("  "..rV.v3_valid_pre.." = ("..rV.s2_pre.." and "..rV.r2_pre.." == 1)")
	A(" end")
	A(" local "..rV.bcFp.." = 0")
	A(" for "..rV.ci.."=1,"..rV.max_pc.." do local "..rV.t.."="..rV.realBc.."["..rV.ci.."]; if "..rV.t.." then for "..rV.x.."=1,#"..rV.t.." do "..rV.bcFp.."=bit32.bxor("..rV.bcFp..","..rV.t.."["..rV.x.."] or 0); "..rV.bcFp.."=("..rV.bcFp.."*16777619+1)%4294967296 end end end")
	A(" local "..rV.ckR.." = ( ("..rV.bcFp.." * "..rV.bcFp.." * 197) + ("..rV.bcFp.." * 83) + "..rV.poly_seed..") % 4294967296")
	A(" local "..rV.dc1.." = bit32.bxor("..v.P.."."..pk.ec1..", "..rV.ckR..")")
	A(" local "..rV.dc2.." = bit32.bxor("..v.P.."."..pk.ec2..", bit32.bxor("..rV.ckR..", 0x11))")
	A(" local "..rV.dc3.." = bit32.bxor("..v.P.."."..pk.ec3..", bit32.bxor("..rV.ckR..", 0x22))")

	A(" local "..rV.cM.." = (math.abs(math.log(100,10)-2) < 1e-6) and (math.sin(0) == 0) and (math.abs((123.456*math.pi)/math.pi - 123.456) < 1e-6)")
	A(" local "..rV.cMem.." = "..rV.pc.."(function() local "..rV.fn.." = "..rV.g_pre..":GetService("..bStr("MemStorageService").."); local "..rV.s_pre.." = tostring(math.log(100,10)); "..rV.fn..":SetItem("..bStr("nv_chk")..", "..rV.s_pre.."); local "..rV.e_pre.." = tonumber("..rV.fn..":GetItem("..bStr("nv_chk")..")); if not ("..rV.e_pre.." and math.abs("..rV.e_pre.."-2)<1e-6) then error() end end)")
	A(" local "..rV.cG.." = "..rV.pc.."(function() local "..rV.fn.." = "..rV.g_pre..":GetService("..bStr("HttpService").."):GenerateGUID(false); if not (type("..rV.fn..")=="..bStr("string").." and #"..rV.fn.."=="..rV.dc3.." and "..rV.fn..":sub("..rV.dc2..","..rV.dc2..")=="..bStr("-")..") then error() end end)")
	A(" local "..rV.cE.." = "..rV.pc.."(function() if "..rV.env.."["..bStr("Enum").."]["..bStr("Material").."]["..bStr("Plastic").."].Value ~= "..rV.dc1.." then error() end end)")
	A(" local "..rV.cR.." = "..rV.pc.."(function() local "..rV.fn.." = "..rV.g_pre..":GetService("..bStr("RunService").."); if not ("..rV.fn..":IsClient() ~= "..rV.fn..":IsServer()) then error() end if "..rV.tof_pre.."("..rV.fn..".Heartbeat) ~= "..bStr("RBXScriptSignal").." then error() end end)")

	A(" local "..rV.passed.." = 0")
	A(" "..rV.passed.." = "..rV.passed.." + (("..rV.mt_bc_pre.." == '"..randLockStr.."') and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + (("..rV.mt_h_pre.." == "..bStr("Locked")..") and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.isc.."("..rV.pc..") and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.is_inst_pre.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.err_valid_pre.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.v3_valid_pre.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cM.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cMem.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cG.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cE.." and 1 or 0)")
	A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cR.." and 1 or 0)")
	A(" local "..rV.is_safe.." = ("..rV.passed.." >= 11) and 1 or 0")

	A(" if ("..rV.is_safe.." + 0) == 0 then")
		A("  "..v.dynState.." = bit32.bxor("..v.dynState..", bit32.bxor("..rV.rt_seed..", "..rV.chain_key.."))")
	A("  "..v.rk.." = bit32.bxor("..v.rk..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed.." + 1)); "..v.rks.." = bit32.bxor("..v.rks..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed.." + 1))")
	A("  "..rV.State_Variable.." = "..rV.max_pc.." + math.random(1000, 9999)")
	A(" end")

	A(" while "..rV.Central_Dispatcher.." do")
	A("  if "..rV.State_Variable.." > "..rV.max_pc.." or "..rV.State_Variable.." < 1 then break end")


	A("  local "..rV.op_val.." = "..rV.opaqueTrue.."()")
		A("  if "..rV.op_val.." == 1 then")
	A("   "..v.i.."="..v.bc.."["..rV.State_Variable.." * "..rV.op_val.."]")
	
		A("   local "..rV.poly_share.." = ( ("..rV.State_Variable.." * "..rV.State_Variable.." * 197) + ("..rV.State_Variable.." * 83) + "..rV.poly_seed.." ) % 4294967296")
	
	A("   if ("..v.dynState.." % 256) == 0xDEAD then "..rV.poly_share.." = 0 end")
	
	A("   "..v.rks.." = "..rV.poly_share.."")
	A("   "..v.dynState.." = bit32.bxor("..v.dynState..", "..v.i.."[1])")
	A("   "..v.op.." = bit32.bxor("..v.i.."[1], "..v.rks..")")
	A("   "..v.rk.." = "..v.i.."[2] or 0")
	
	local pc_obfuscation = "bit32.bxor("..rV.State_Variable..", 1) + (bit32.band("..rV.State_Variable..", 1) * 2)"
	A("   "..rV.dispatch_next.." = "..pc_obfuscation)
	A("   "..v.handlers.."["..v.op.."]()")
	A("   if "..rV.has_returned.." then return table.unpack("..rV.return_values..") end")
	
	local dV = {
		d1 = newVar(), d2 = newVar(),
		df1_1 = newVar(), df2_1 = newVar(), df3_1 = newVar(),
		df1_2 = newVar(), df2_2 = newVar(), df3_2 = newVar(),
		mix = newVar(),
		tp1 = newVar(), sf1 = newVar(), tp2 = newVar(), sf2 = newVar(),
		oq = newVar(),
		op1_1 = newVar(), op2_1 = newVar(), op1_2 = newVar(), op2_2 = newVar()
	}
	
	local st1_start = math.random(10000, 99999)
	local st1_trap = math.random(10000, 99999)
	local st1_calc = math.random(10000, 99999)
	local st1_opaque = math.random(10000, 99999)
	local st1_final = math.random(10000, 99999)
	local st1_end = math.random(10000, 99999)

	local st2_start = math.random(10000, 99999)
	local st2_trap = math.random(10000, 99999)
	local st2_calc = math.random(10000, 99999)
	local st2_opaque = math.random(10000, 99999)
	local st2_final = math.random(10000, 99999)
	local st2_end = math.random(10000, 99999)
	
	local xor_key = math.random(100, 999)

	local base_start_trap_1 = bit32.bxor(st1_start, st1_trap)
	local base_start_calc_1 = bit32.bxor(st1_start, st1_calc)
	local base_trap_end_1 = bit32.bxor(st1_trap, st1_end)
	local base_calc_opaque_1 = bit32.bxor(st1_calc, st1_opaque)
	local base_opaque_trap_1 = bit32.bxor(st1_opaque, st1_trap)
	local base_opaque_final_1 = bit32.bxor(st1_opaque, st1_final)
	local base_final_end_1 = bit32.bxor(st1_final, st1_end)

	local base_start_trap_2 = bit32.bxor(st2_start, st2_trap)
	local base_start_calc_2 = bit32.bxor(st2_start, st2_calc)
	local base_trap_end_2 = bit32.bxor(st2_trap, st2_end)
	local base_calc_opaque_2 = bit32.bxor(st2_calc, st2_opaque)
	local base_opaque_trap_2 = bit32.bxor(st2_opaque, st2_trap)
	local base_opaque_final_2 = bit32.bxor(st2_opaque, st2_final)
	local base_final_end_2 = bit32.bxor(st2_final, st2_end)

	A("   local "..dV.mix.." = 0")
	A("   local "..dV.df1_1.." = bit32.bxor("..base_start_trap_1..", "..dV.mix..")")
	A("   local "..dV.df2_1.." = bit32.bxor("..base_start_calc_1..", "..dV.mix..")")
	A("   local "..dV.df3_1.." = bit32.bxor("..base_trap_end_1..", "..dV.mix..")")
	A("   local "..dV.df1_2.." = bit32.bxor("..base_start_trap_2..", "..dV.mix..")")
	A("   local "..dV.df2_2.." = bit32.bxor("..base_start_calc_2..", "..dV.mix..")")
	A("   local "..dV.df3_2.." = bit32.bxor("..base_trap_end_2..", "..dV.mix..")")

	A("   local "..dV.tp1.." = (1 - "..rV.is_safe..") * bit32.bxor("..dV.df1_1..", "..dV.mix..");")
	A("   local "..dV.sf1.." = "..rV.is_safe.." * bit32.bxor("..dV.df2_1..", "..dV.mix..");")
	A("   local "..dV.tp2.." = (1 - "..rV.is_safe..") * bit32.bxor("..dV.df1_2..", "..dV.mix..");")
	A("   local "..dV.sf2.." = "..rV.is_safe.." * bit32.bxor("..dV.df2_2..", "..dV.mix..");")

	A("   local "..rV.Opaque_Transition.." = "..rV.dispatch_next.."; ")

	A("   local "..dV.d1.." = "..st1_start.."; ")
	A("   local "..dV.d2.." = "..st2_start.."; ")
	
	A("   while bit32.bor(bit32.bxor("..dV.d1..", "..st1_end.."), bit32.bxor("..dV.d2..", "..st2_end..")) ~= 0 do ")

	local cff_blocks = {
		{ 
		  st1 = st1_start, st2 = st2_start, 
		  cd = dV.d1.." = bit32.bxor("..dV.d1..", bit32.bor("..dV.tp1..", "..dV.sf1..")); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bor("..dV.tp2..", "..dV.sf2..")); " 
		},
		{ 
		  st1 = st1_trap, st2 = st2_trap, 
		  cd = v.dynState.." = bit32.bxor("..v.dynState..", bit32.bxor("..rV.rt_seed..", "..rV.chain_key..")); "..v.rk.." = bit32.bxor("..v.rk..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed..")); "..v.rks.." = bit32.bxor("..v.rks..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed..")); "..rV.State_Variable.." = "..rV.max_pc.." + math.random(1000, 9999); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..dV.df3_1..", "..dV.mix..")); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..dV.df3_2..", "..dV.mix..")); " 
		},
		{ 
		  st1 = st1_calc, st2 = st2_calc, 
		  cd = rV.mip.." = bit32.bxor(bit32.bxor("..rV.Opaque_Transition..", "..xor_key.."), bit32.bxor("..v.dynState..", "..xor_key..")); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..bit32.bxor(base_calc_opaque_1, 0x55AA)..", 0x55AA)); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..bit32.bxor(base_calc_opaque_2, 0x55AA)..", 0x55AA)); " 
		},
		{ 
		  st1 = st1_opaque, st2 = st2_opaque, 
		  cd = "local "..dV.oq.." = 1; local "..dV.op1_1.." = bit32.bxor("..base_opaque_final_1..", "..v.dynState.."); local "..dV.op2_1.." = bit32.bxor("..base_opaque_trap_1..", "..v.dynState.."); local "..dV.op1_2.." = bit32.bxor("..base_opaque_final_2..", "..v.dynState.."); local "..dV.op2_2.." = bit32.bxor("..base_opaque_trap_2..", "..v.dynState.."); "..dV.d1.." = bit32.bxor("..dV.d1..", ("..dV.oq.." * bit32.bxor("..dV.op1_1..", "..v.dynState..")) + ((1 - "..dV.oq..") * bit32.bxor("..dV.op2_1..", "..v.dynState.."))); "..dV.d2.." = bit32.bxor("..dV.d2..", ("..dV.oq.." * bit32.bxor("..dV.op1_2..", "..v.dynState..")) + ((1 - "..dV.oq..") * bit32.bxor("..dV.op2_2..", "..v.dynState.."))); " 
		},
		{ 
		  st1 = st1_final, st2 = st2_final, 
		  cd = rV.State_Variable.." = bit32.bxor("..rV.mip..", "..v.dynState.."); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..bit32.bxor(base_final_end_1, 0x1234)..", 0x1234)); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..bit32.bxor(base_final_end_2, 0x1234)..", 0x1234)); " 
		}
	}

	local num_fakes = math.random(5, 12)
	local prev_fake_1 = st1_trap
	local prev_fake_2 = st2_trap
	for i = 1, num_fakes do
		local f_st1 = math.random(10000, 99999)
		local f_st2 = math.random(10000, 99999)
		local diff_f_1 = bit32.bxor(f_st1, prev_fake_1)
		local diff_f_2 = bit32.bxor(f_st2, prev_fake_2)
		local _rt_f_key = math.random(1024, 65535)
		local dyn_diff_f_1 = bit32.bxor(diff_f_1, _rt_f_key)
		local dyn_diff_f_2 = bit32.bxor(diff_f_2, _rt_f_key)
		
		local fake_logic = rV.State_Variable.." = bit32.bxor("..v.dynState..", "..math.random(100, 999).."); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..dyn_diff_f_1..", ".._rt_f_key..")); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..dyn_diff_f_2..", ".._rt_f_key..")); "
		
		local mod_m = math.random(3, 7)
		local impossible_val = mod_m + math.random(1, 9)
		local opq_condition = "(("..rV.chain_key.." % "..mod_m..") == "..impossible_val..")"
		
		cff_blocks[#cff_blocks].cd = cff_blocks[#cff_blocks].cd .. "if "..opq_condition.." then "..dV.d1.." = bit32.bxor("..dV.d1..", "..bit32.bxor(st1_final, f_st1).."); "..dV.d2.." = bit32.bxor("..dV.d2..", "..bit32.bxor(st2_final, f_st2).."); end; "
		
		cff_blocks[#cff_blocks+1] = { st1 = f_st1, st2 = f_st2, cd = fake_logic }
		prev_fake_1 = f_st1
		prev_fake_2 = f_st2
	end

	for i = #cff_blocks, 2, -1 do
		local j = math.random(i)
		cff_blocks[i], cff_blocks[j] = cff_blocks[j], cff_blocks[i]
	end

	for i, b in ipairs(cff_blocks) do
		local opq_chk = "(bit32.bxor("..dV.d1..", "..b.st1..") + bit32.bxor("..dV.d2..", "..b.st2..")) == 0"
		if i == 1 then
			A("    if "..opq_chk.." then ")
		else
			A("    elseif "..opq_chk.." then ")
		end
		A("     "..b.cd)
	end
	A("    end; ")
	A("   end; ")
	A("  else")
	A("   "..rV.State_Variable.." = "..rV.State_Variable.." + (math.random(1,2) == 1 and 0 or 1)")
	A("  end")
	A(" end")
	A("end")
	return table.concat(L, "\n")
end

local LoadFileEnabled = false
local CompiledScriptOutput = ""

LoadFileButton.MouseButton1Click:Connect(function()
	LoadFileEnabled = not LoadFileEnabled
	LoadFileButton.BackgroundColor3 = LoadFileEnabled
		and Color3.fromRGB(0,170,0) or Color3.fromRGB(0,0,0)
end)

CopyButton.MouseButton1Click:Connect(function()
	local textToCopy = (CompiledScriptOutput ~= "") and CompiledScriptOutput or OutputBox.Text
	if textToCopy ~= "" then
		setclipboard(textToCopy)
		CopyButton.Text="COPIED!"
		task.wait(1)
		CopyButton.Text="COPY OUTPUT"
	end
end)

ClearButton.MouseButton1Click:Connect(function()
	InputBox.Text = ""
	OutputBox.Text = ""
	CompiledScriptOutput = ""
end)

ObfuscateButton.MouseButton1Click:Connect(function()
	local src = InputBox.Text
	if src=="" then
		if LoadFileEnabled then
			local ok,data=pcall(readfile, FileNameBox.Text)
			if ok then src=data else OutputBox.Text="readfile error"; return end
		else return end
	end

	OutputBox.Text="Compiling..."
	
	local numKey = math.random(100000, 999999)
	
	task.spawn(function()
		usedVars = {}

				local ok1, toks_or_err = pcall(function() return lex(src) end)
		if not ok1 then OutputBox.Text="Lex error: "..tostring(toks_or_err); return end
		local toks = renameVars(toks_or_err)

		local OC = makeOpcodes()
		
				local ok2a, ast_or_err = pcall(function() return parseAST(toks) end)
		if not ok2a then OutputBox.Text="Parse error: "..tostring(ast_or_err); return end
		local ast = ast_or_err

		local v_enc_st_ = newVar()
		local v_time_st_ = newVar()
		local function applyASTFunctionEncryption(node)
			if type(node) == "table" then
				if node.type == "FunctionDefinition" then
					local stateVar = v_enc_st_ .. tostring(math.random(1000, 9999))
					local timeVar = v_time_st_ .. tostring(math.random(1000, 9999))
					
					local osClockBase = {
						type = "CallExpression",
						base = {
							type = "MemberExpression",
							base = { type = "Identifier", name = "os" },
							identifier = "clock"
						},
						arguments = {},
						isSelf = false
					}

					local timeDef = {
						type = "LocalDefinition",
						names = {timeVar},
						values = {osClockBase}
					}

					local stateDef = {
						type = "LocalDefinition",
						names = {stateVar},
						values = {{
							type = "BinaryExpression",
							operator = "==",
							left = {
								type = "CallExpression",
								base = { type = "Identifier", name = "type" },
								arguments = {{ type = "Identifier", name = timeVar }},
								isSelf = false
							},
							right = { type = "Literal", kind = "string", value = "number" }
						}}
					}

					local condition = {
						type = "BinaryExpression",
						operator = "==",
						left = { type = "Identifier", name = stateVar },
						right = { type = "Literal", kind = "boolean", value = true }
					}

					local trapBody = {
						{
							type = "WhileStatement",
							condition = { type = "Literal", kind = "boolean", value = true },
							body = {}
						}
					}

					local ifStat = {
						type = "IfStatement",
						clauses = { { condition = condition, body = node.body } },
						elseBody = trapBody
					}

					node.body = { timeDef, stateDef, ifStat }
				end

				for k, v in pairs(node) do
					if type(v) == "table" then
						applyASTFunctionEncryption(v)
					end
				end
			end
			return node
		end

		ast = applyASTFunctionEncryption(ast)

		local ok2b, proto_or_err = pcall(function() return compileAST(ast,OC) end)
		if not ok2b then OutputBox.Text="Compile error: "..tostring(proto_or_err); return end
		local proto = proto_or_err

			local superMap = peepholeOptimize(proto, OC)

		local mathProxy = newVar()
	local stringChar = newVar()
	local extremeMath = newVar()

		local function genMathProxyCall(v, mp)
			local a = math.random(2, 6)
			local b = math.random(2, 8)
			local c = math.random(2, 4)
			local d = math.random(5, 15)
			local ac = a^c
			local ac_mod_d = ac % d
			local bc = b * c
			local s = ac_mod_d + bc - v
			return "("..mp.."("..a..")^"..mp.."("..c..")%"..mp.."("..d..")+"..mp.."("..b..")*"..mp.."("..c..")-"..mp.."("..s.."))()"
		end

		local opVarDecls={}
		local opVarNames={}
		local opValMap={} 
		for name,val in pairs(OC) do
			local vn=newVar()
			local R=math.random(1,255)
			local A=bit32.bxor(val,R)
			opVarDecls[#opVarDecls+1]="local "..vn.."=bit32.bxor("..genMathProxyCall(A, mathProxy)..","..genMathProxyCall(R, mathProxy)..")"
			opVarNames[name]=vn
			opValMap[val]=tostring(val)
		end

				local pk = {
			c = newVar(), k = newVar(), pr = newVar(), np = newVar(), va = newVar(), mr = newVar(),
			p = newVar(), e = newVar(), cl = newVar(), hash = newVar(), seed = newVar(),
			ec1 = newVar(), ec2 = newVar(), ec3 = newVar(), dKey = newVar()
		}

				local v = {
			P = newVar(), E = newVar(), a = newVar(), r = newVar(),
			pc = newVar(), bc = newVar(), k = newVar(), pr = newVar(),
			mk = newVar(), p = newVar(), e = newVar(), cl = newVar(),
			i = newVar(), op = newVar(), x = newVar(), t = newVar(),
			key = newVar(), d = newVar(), val = newVar(), ps = newVar(),
			ci = newVar(), fn = newVar(), na = newVar(), nrv = newVar(),
			a2 = newVar(), ai = newVar(), rv = newVar(), ok = newVar(),
			r1 = newVar(), r2 = newVar(), r3 = newVar(), r4 = newVar(), r5 = newVar(),
			n = newVar(), ri = newVar(), idx = newVar(), state = newVar(),
			dynState = newVar(), handlers = newVar(), res = newVar(),
			rk = newVar(), rks = newVar(), tmp = newVar(), top = newVar(),
			U = newVar()
		}

				local _IllI11I=false;local _00O1OO,_O11O0O=pcall(function()local _1IO0=game;local _O001I=workspace;local _II11O0="\71\101\116\68\101\98\117\103\73\100";local _01O1I=_1IO0[_II11O0](_1IO0,0);if type(_01O1I)~="\115\116\114\105\110\103"or #_01O1I==0 then return false end;local _I10O1=_O001I[_II11O0](_O001I,0);local _1OOI0=_1IO0:GetService("\80\108\97\121\101\114\115")[_II11O0](_1IO0:GetService("\80\108\97\121\101\114\115"),0);if _01O1I==_I10O1 or _01O1I==_1OOI0 or _I10O1==_1OOI0 then return false end;return true end)if not _00O1OO or not _O11O0O then _IllI11I=true end;local function _O1I0O()local _0I1I0=os.clock();for _=1,500 do local _1O0I1="\97\120";local _00I1O="\97\120";local _II00O=_1O0I1==_00I1O end;local _I100I=os.clock()-_0I1I0;local _0O10I=os.clock();for _1I0O1=1,500 do local _1O0I1="\97\120".._1I0O1;local _00I1O="\97\120".._1I0O1;local _II00O=_1O0I1==_00I1O end;local _O00O1=os.clock()-_0O10I;return _I100I<_O00O1*2 end;local function _11I0O()local _I0O10=0/0;local _01I01=math.max;local _10I1O=math.min;return _01I01(_I0O10,1)~=_01I01(_I0O10,1)and _10I1O(_I0O10,1)~=_10I1O(_I0O10,1)and not(_I0O10==_I0O10)end;local function _O01I1()local _II00O=0;local _0I10O=function()_II00O=_II00O+1 end;local _11O0I=function()return _II00O end;local _0I1I0=os.clock();for _=1,1000 do _0I10O()end;local _I100I=os.clock()-_0I1I0;local _0O10I=os.clock();for _=1,1000 do _11O0I()end;local _O00O1=os.clock()-_0O10I;return _I100I>_O00O1*0.3 and _I100I<_O00O1*10 end;local function _00O1I1()local _I0I01=setmetatable({},{["\95\95\109\111\100\101"]="\118"});for _1I0O1=1,100 do _I0I01[_1I0O1]={a=_1I0O1}end;local _O11I0=0;for _ in pairs(_I0I01)do _O11I0=_O11I0+1 end;local _0I1I0=os.clock();for _=1,50 do local _t={}for _1O00I=1,100 do _t[_1O00I]={}end end;local _I100I=os.clock()-_0I1I0;local _010O1=0;for _ in pairs(_I0I01)do _010O1=_010O1+1 end;return _I100I>1e-8 and _I100I<0.5 and _010O1<=_O11I0 end;if not _O1I0O()or not _11I0O()or not _O01I1()or not _00O1I1()then _IllI11I=true end;if _IllI11I then numKey=numKey+0xDEAD end

		local protoStr
		local ok3,err3=pcall(function() protoStr=serialize(proto,OC,opValMap,pk,mathProxy,stringChar,genMathProxyCall, numKey) end)
		if not ok3 then OutputBox.Text="Serialize error: "..tostring(err3); return end

		local vmName=newVar()
		local vmCode=buildVM(opVarNames,vmName,v,pk,OC,stringChar, numKey, superMap, mathProxy)

		local envName=newVar()
		local parts={}
		local function E(s) parts[#parts+1]=s end

		local em_a = newVar()
		local em_b = newVar()
		local em_t = newVar()
		local em_v = newVar()
		local em_discard = newVar()
		local mp_k = newVar()

		local em_c = newVar()
		local em_s = newVar()
		local em_r = newVar()
		local em_p = newVar()

		E("--[[This Script is Protected by CSLO 1.7.0 Obfuscator]] ")
		E("do ")
		E("local "..stringChar.."=string.char;")
		E("local "..extremeMath.."={")
		E("__add=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")+(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,")
		E("__sub=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")-(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,")
		E("__mul=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")*(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,")
		E("__div=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")/(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,")
		E("__mod=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")%(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,")
		E("__pow=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")^(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,")
				E("__call=function("..em_t..")")
		E(" local "..em_c.."=math.random(10, 25);")
		E(" local "..em_s.."=0;")
		E(" while "..em_c..">1 do ")
		E("  local "..em_r.."=math.random(1,4);")
		E("  if "..em_r.."==1 then ")
		E("   "..em_c.."=math.floor(0.5 + ("..em_c.."/2)*math.cos(math.pi*"..em_c.."/2)^2 + (3*"..em_c.."+1)*math.sin(math.pi*"..em_c.."/2)^2);")
		E("  elseif "..em_r.."==2 then ")
		E("   "..em_c.."=("..em_c.."/2)*(1 - ("..em_c.."%2)) + (3*"..em_c.."+1)*("..em_c.."%2);")
		E("  elseif "..em_r.."==3 then ")
		E("   "..em_c.."=math.floor(0.5 + 0.25*(1 + 4*"..em_c.." - (1 + 2*"..em_c..")*math.cos(math.pi*"..em_c..")));")
		E("  else ")
		E("   local "..em_p.." = bit32.band("..em_c..", 1);")
		E("   "..em_c.."=bit32.rshift("..em_c..", 1)*(1-"..em_p..") + (3*"..em_c.."+1)*"..em_p..";")
		E("  end ")
		E("  "..em_s.."="..em_s.."+1;")
		E(" end ")
		E(" return math.floor("..em_t.."."..em_v..")+("..em_c.."-1)*"..em_s..";")
		E("end")
		E("};")
				E("local "..mathProxy.."=setmetatable({},{__call=function("..em_discard..","..em_v..")return setmetatable({"..em_v.."="..em_v.."},"..extremeMath..")end,__index=function("..em_t..","..mp_k..") return math["..mp_k.."] end});")
		
		for _,d in ipairs(opVarDecls) do E(d..";") end
						
						local function eStr(str)
			if not str or str == "" then return "''" end
			local chunkSize = (#str > 500) and math.random(50, 100) or math.random(2, 4)
			local chunks = {}
			local i = 1
			while i <= #str do
				chunks[#chunks+1] = string.sub(str, i, i + chunkSize - 1)
				i = i + chunkSize
			end

			local memKeys = {}
			local usedKeys = {}
			for _ = 1, #chunks do
				local k
				repeat k = math.random(10000, 99999) until not usedKeys[k]
				usedKeys[k] = true
				memKeys[#memKeys+1] = k
			end

			local insertOrder = {}
			for idx = 1, #chunks do insertOrder[idx] = idx end
			for idx = #insertOrder, 2, -1 do
				local rand = math.random(idx)
				insertOrder[idx], insertOrder[rand] = insertOrder[rand], insertOrder[idx]
			end

			local masterXor = math.random(1, 255)
			local memInit = {}
			for _, idx in ipairs(insertOrder) do
				local chunk = chunks[idx]
				local mKey = memKeys[idx]
				local bytes = {}
				for j = 1, #chunk do bytes[#bytes+1] = bit32.bxor(string.byte(chunk, j), masterXor) end
				memInit[#memInit+1] = "["..mKey.."]={"..table.concat(bytes,",").."}"
			end

						local memVar, ptrVar = newVar(), newVar()
			local genFunc, stateVar, kVar = newVar(), newVar(), newVar()
			local chunkVar, jVar, sVar = newVar(), newVar(), newVar()

			return "(function() local "..memVar.."={"..table.concat(memInit, ",").."}; local "..ptrVar.."={"..table.concat(memKeys, ",").."}; local function "..genFunc.."("..stateVar..") if "..stateVar..">#"..ptrVar.." then return '' end; local "..kVar.."="..ptrVar.."["..stateVar.."]; local "..chunkVar.."="..memVar.."["..kVar.."]; local "..sVar.."=''; for "..jVar.."=1,#"..chunkVar.." do "..sVar.."="..sVar.."..string.char(bit32.bxor("..chunkVar.."["..jVar.."],"..masterXor..")); end; "..memVar.."["..kVar.."]=nil; local _ret="..sVar..".."..genFunc.."("..stateVar.."+1); "..sVar.."=nil; return _ret; end; return "..genFunc.."(1) end)()"
		end

		local v_g = newVar()
		local v_type = newVar()
		local v_pcall = newVar()
		local v_rawget = newVar()
		local v_crash = newVar()
		local v_iscc = newVar()
		local v_dinfo = newVar()
		local v_check = newVar()
		local v_self = newVar()
		local v_k = newVar()
		local v_val = newVar()
		local v_s = newVar()
		local v_r = newVar()
		local v_fn = newVar()
		
				local v_spoof_map = newVar()
		local v_wrap = newVar()
		local v_orig_dinfo = newVar()
		local v_proxy_dinfo = newVar()
		local v_real_debug = newVar()
		local v_a1 = newVar()
		local v_proxy = newVar()
		local v_s_cc = newVar()
		local v_newcc = newVar()
		local v_s_ts = newVar()
		local v_orig_ts = newVar()
		local v_virt_globals = newVar()

				E(" local "..envName.." = (function() ")
		E("  local "..v_type.." = type; ")
		E("  local "..v_pcall.." = pcall; ")
		E("  local "..v_rawget.." = rawget; ")
		
		E("  local "..v_g.." = getfenv and getfenv() or _ENV or _G; ")
		E("  local "..v_virt_globals.." = {}; ")
		
		E("  local function "..v_crash.."() while true do "..v_pcall.."("..v_crash..") end end; ")
		
						E("  local "..v_real_debug.." = "..v_g.."["..eStr("debug").."]; ")
		E("  local "..v_orig_dinfo.." = "..v_real_debug.." and ("..v_real_debug.."["..eStr("info").."] or "..v_real_debug.."["..eStr("getinfo").."]); ")
		
		E("  if "..v_type.."("..v_orig_dinfo..") == "..eStr("function").." then ")
		E("   local d_s, d_r = "..v_pcall.."(function() return "..v_orig_dinfo.."("..v_orig_dinfo..", "..eStr("sl")..") end); ")
		E("   if d_s then ")
		E("    local t_s, t_l = d_r, select(2, "..v_orig_dinfo.."("..v_orig_dinfo..", "..eStr("sl")..")); ")
		E("    if t_s ~= "..eStr("[C]").." or (t_l ~= -1 and t_l ~= nil) then ")
		E("     "..v_crash.."(); ")
		E("    end; ")
		E("   end; ")
		E("  end; ")

				E("  local "..v_iscc.." = function(f) return "..v_type.."(f) == "..eStr("function").." end; ")
		
				E("  local "..v_spoof_map.." = {}; ")
		
		E("  local function "..v_proxy_dinfo.."(...) ")
		E("   local "..v_a1.." = ...; ")
		E("   if "..v_type.."("..v_a1..") == "..eStr("function").." and "..v_spoof_map.."["..v_a1.."] then ")
		E("    return "..v_orig_dinfo.."("..v_spoof_map.."["..v_a1.."], select(2, ...)); ")
		E("   end; ")
		E("   return "..v_orig_dinfo.."(...); ")
		E("  end; ")

				E("  local "..v_s_cc..", "..v_newcc.." = "..v_pcall.."(function() return "..v_g.."["..eStr("newcclosure").."] end); ")
		E("  "..v_newcc.." = "..v_s_cc.." and "..v_newcc.." or function(f) return function(...) return f(...) end end; ")

		E("  local function "..v_wrap.."("..v_fn..") ")
		E("   if "..v_type.."("..v_fn..") ~= "..eStr("function").." then return "..v_fn.." end; ")
		E("   local "..v_proxy.."; ")
		E("   if "..v_newcc.." then ")
		E("    "..v_proxy.." = "..v_newcc.."(function(...) return "..v_fn.."(...) end); ")
		E("   else ")
		E("    "..v_proxy.." = function(...) return "..v_fn.."(...) end; ")
		E("   end; ")
		E("   "..v_spoof_map.."["..v_proxy.."] = "..v_fn.."; ")
		E("   return "..v_proxy.."; ")
		E("  end; ")

		E("  local "..v_s_ts..", "..v_orig_ts.." = "..v_pcall.."(function() return "..v_g.."["..eStr("tostring").."] end); ")
		E("  "..v_orig_ts.." = "..v_s_ts.." and "..v_orig_ts.." or nil; ")

				E("  return setmetatable({}, { ")
		E("   __index = function("..v_self..", "..v_k..") ")
		E("    if "..v_virt_globals.."["..v_k.."] ~= nil then return "..v_virt_globals.."["..v_k.."] end; ")
		
		E("    if "..v_k.." == "..eStr("debug").." then ")
		E("     return setmetatable({["..eStr("info").."]="..v_proxy_dinfo..", ["..eStr("getinfo").."]="..v_proxy_dinfo.."}, {__index="..v_real_debug.."}); ")
		E("    end; ")

		E("    if "..v_k.." == "..eStr("tostring").." and "..v_orig_ts.." then ")
		E("     return function("..v_fn..") if "..v_spoof_map.."["..v_fn.."] then return "..v_orig_ts.."("..v_spoof_map.."["..v_fn.."]); end; return "..v_orig_ts.."("..v_fn.."); end; ")
		E("    end; ")
		
		E("    local "..v_s..", "..v_r.." = "..v_pcall.."(function() return "..v_g.."["..v_k.."] end); ")
		E("    if "..v_s.." and "..v_r.." ~= nil then ")
				E("     if "..v_type.."("..v_r..") == "..eStr("function").." then ")
		E("      return "..v_wrap.."("..v_r.."); ")
		E("     end; ")
		E("     return "..v_r.."; ")
		E("    end; ")
		E("    return nil; ")
		E("   end, ")
		
				E("   __newindex = function("..v_self..", "..v_k..", "..v_val..") ")
		E("    "..v_virt_globals.."["..v_k.."] = "..v_val.."; ")
		E("   end, ")
		
		E("   __pairs = function() return function() end end, ")
		E("   __tostring = function() return '' end, ")
		E("   __metatable = "..eStr("Locked").." ")
		E("  }); ")
		E(" end)(); ")
		E("local "..v.P.."="..protoStr..";")

				local vmOneLine=vmCode:gsub("\n"," "):gsub("%s+"," ")
				E(vmOneLine..";")
		E(vmName.."("..v.P..","..envName..",{},{});")
		E("end")

						local finalScript = table.concat(parts)
		
		local b92chars = " !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"
		local function compressLZW_Base92(str)
			local dict = {}
			for i = 0, 255 do dict[string.char(i)] = i end
			local dictSize = 256
			local w = ""
			local res = {}

			local function emit(code)
				local c1 = math.floor(code / 92) + 1
				local c2 = (code % 92) + 1
				table.insert(res, string.sub(b92chars, c1, c1) .. string.sub(b92chars, c2, c2))
			end

						for c in string.gmatch(str, ".") do
				local wc = w .. c
				if dict[wc] then
					w = wc
				else
					emit(dict[w])
					dict[wc] = dictSize
					dictSize = dictSize + 1
					
					if dictSize > 8463 then
						dict = {}
						for j = 0, 255 do dict[string.char(j)] = j end
						dictSize = 256
					end
					w = c
				end
			end
			if w ~= "" then
				emit(dict[w])
			end
			
			return table.concat(res)
		end

		OutputBox.Text = "Compressing..."
		task.wait()
		
		local encodedPayload = compressLZW_Base92(finalScript)
		
		local runtimeTemplate_P1 = '--[[Generated By CSLO Compression 1.7.0]] loadstring((function()local s="'
		local runtimeTemplate_P2 = '"local b=" !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"local m,d,r={},{},{}for i=1,92 do m[b:sub(i,i)]=i-1 end for i=0,255 do d[i]=string.char(i)end local n,w=256,d[m[s:sub(1,1)]*92+m[s:sub(2,2)]]r[1]=w for i=3,#s,2 do local c=m[s:sub(i,i)]*92+m[s:sub(i+1,i+1)]local e=d[c]or w..w:sub(1,1)r[#r+1]=e d[n]=w..e:sub(1,1)n=n+1 if n>8463 then d={}for j=0,255 do d[j]=string.char(j)end n=256 end w=e end return table.concat(r)end)())()'
		
		local finalPayload = runtimeTemplate_P1 .. encodedPayload .. runtimeTemplate_P2

		if AutoSaveEnabled then
			local ok, err = pcall(function()
				writefile("CSLO_Obfuscated.txt", finalPayload)
			end)
			
			if ok then
				CompiledScriptOutput = "" 
				OutputBox.Text = "-- [ SUCCESS ]\n-- File successfully saved to the workspace folder as:\n-- CSLO_Obfuscated.txt"
			else
				CompiledScriptOutput = finalPayload
				OutputBox.Text = "-- [ ERROR ]\n-- Failed to use writefile(). Does your Executor support it?\n-- Error: " .. tostring(err) .. "\n\n-- Click 'COPY OUTPUT' as an alternative!"
			end
		else
			CompiledScriptOutput = finalPayload
			
			if #finalPayload >= 190000 then
				OutputBox.Text = "-- [WARNING: OUTPUT TOO LARGE]\n-- Script size: " .. #finalPayload .. " characters.\n-- Roblox cannot display text over 200,000 characters on screen.\n\n-- PLEASE CLICK THE 'COPY OUTPUT' BUTTON TO COPY THIS SCRIPT!"
			else
				OutputBox.Text = finalPayload
			end
		end
	end)
end)

Features & Information

Yeah, i dont develop this thing anymore

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts