local v do local B=(CFrame.new()).components function v(v,Q,I,u,U)local L,Y,V,R,m,T,f,O,G,x,b,o=B(v)local d,k,A,l,a,p,X,D,K,h,P,F=B(I)local s,r,c=Q.x/2,Q.y/2,Q.z/2 local E,n,W=u.x/2,u.y/2,u.z/2 local S,j,Z=d-L,k-Y,A-V local z=(R*S+f*j)+x*Z local e=(m*S+O*j)+b*Z local g=(T*S+G*j)+o*Z local N=(l*S+X*j)+h*Z local t=(a*S+D*j)+P*Z local i=(p*S+K*j)+F*Z local q=N>E and N-E or N<-E and N+E or 0 local J=t>n and t-n or t<-n and t+n or 0 local C=i>W and i-W or i<-W and i+W or 0 local w=z>s and z-s or z<-s and z+s or 0 local H=e>r and e-r or e<-r and e+r or 0 local y=g>c and g-c or g<-c and g+c or 0 local M=(q*q+J*J)+C*C local ve=(w*w+H*H)+y*y local Be=s<r and(s<c and s or c)or r<c and r or c local Qe=E<n and(E<W and E or W)or n<W and n or W if M<Be*Be or ve<Qe*Qe then return true elseif M>(s*s+r*r)+c*c or ve>(E*E+n*n)+W*W then return false elseif U==nil then local v=(R*l+f*X)+x*h local B=(R*a+f*D)+x*P local Q=(R*p+f*K)+x*F local I=(m*l+O*X)+b*h local u=(m*a+O*D)+b*P local U=(m*p+O*K)+b*F local L=(T*l+G*X)+o*h local Y=(T*a+G*D)+o*P local V=(T*p+G*K)+o*F local d=W*W local k=E*E local A=n*n local S=s*v local j=r*I local Z=c*L local q=s*B local J=r*u local C=c*Y local w=s*Q local H=r*U local y=c*V local M=((S+j)+Z)-N if M*M<k then local v=((q+J)+C)-t if v*v<A then local v=((w+H)+y)-i if v*v<d then return true end end end local ve=((-S+j)+Z)-N if ve*ve<k then local v=((-q+J)+C)-t if v*v<A then local v=((-w+H)+y)-i if v*v<d then return true end end end local Be=((S-j)+Z)-N if Be*Be<k then local v=((q-J)+C)-t if v*v<A then local v=((w-H)+y)-i if v*v<d then return true end end end local Qe=((-S-j)+Z)-N if Qe*Qe<k then local v=((-q-J)+C)-t if v*v<A then local v=((-w-H)+y)-i if v*v<d then return true end end end local Ie=((S+j)-Z)-N if Ie*Ie<k then local v=((q+J)-C)-t if v*v<A then local v=((w+H)-y)-i if v*v<d then return true end end end local ue=((-S+j)-Z)-N if ue*ue<k then local v=((-q+J)-C)-t if v*v<A then local v=((-w+H)-y)-i if v*v<d then return true end end end local Ue=((S-j)-Z)-N if Ue*Ue<k then local v=((q-J)-C)-t if v*v<A then local v=((w-H)-y)-i if v*v<d then return true end end end local Le=((-S-j)-Z)-N if Le*Le<k then local v=((-q-J)-C)-t if v*v<A then local v=((-w-H)-y)-i if v*v<d then return true end end end local Ye=s*s local Ve=r*r local Re=c*c local me=E*L local Te=n*Y local fe=E*v local Oe=n*B local Ge=E*I local xe=n*u local be=W*V local oe=W*Q local de=W*U local ke=(((g-c)+me)+Te)/V if ke*ke<d then local v=((z+fe)+Oe)-ke*Q if v*v<Ye then local v=((e+Ge)+xe)-ke*U if v*v<Ve then return true end end end local Ae=(((g+c)+me)+Te)/V if Ae*Ae<d then local v=((z+fe)+Oe)-Ae*Q if v*v<Ye then local v=((e+Ge)+xe)-Ae*U if v*v<Ve then return true end end end local le=(((g-c)-me)+Te)/V if le*le<d then local v=((z-fe)+Oe)-le*Q if v*v<Ye then local v=((e-Ge)+xe)-le*U if v*v<Ve then return true end end end local ae=(((g+c)-me)+Te)/V if ae*ae<d then local v=((z-fe)+Oe)-ae*Q if v*v<Ye then local v=((e-Ge)+xe)-ae*U if v*v<Ve then return true end end end local pe=(((g-c)+me)-Te)/V if pe*pe<d then local v=((z+fe)-Oe)-pe*Q if v*v<Ye then local v=((e+Ge)-xe)-pe*U if v*v<Ve then return true end end end local Xe=(((g+c)+me)-Te)/V if Xe*Xe<d then local v=((z+fe)-Oe)-Xe*Q if v*v<Ye then local v=((e+Ge)-xe)-Xe*U if v*v<Ve then return true end end end local De=(((g-c)-me)-Te)/V if De*De<d then local v=((z-fe)-Oe)-De*Q if v*v<Ye then local v=((e-Ge)-xe)-De*U if v*v<Ve then return true end end end local Ke=(((g+c)-me)-Te)/V if Ke*Ke<d then local v=((z-fe)-Oe)-Ke*Q if v*v<Ye then local v=((e-Ge)-xe)-Ke*U if v*v<Ve then return true end end end local he=(((z-s)+fe)+Oe)/Q if he*he<d then local v=((e+Ge)+xe)-he*U if v*v<Ve then local v=((g+me)+Te)-he*V if v*v<Re then return true end end end local Pe=(((z+s)+fe)+Oe)/Q if Pe*Pe<d then local v=((e+Ge)+xe)-Pe*U if v*v<Ve then local v=((g+me)+Te)-Pe*V if v*v<Re then return true end end end local Fe=(((z-s)-fe)+Oe)/Q if Fe*Fe<d then local v=((e-Ge)+xe)-Fe*U if v*v<Ve then local v=((g-me)+Te)-Fe*V if v*v<Re then return true end end end local se=(((z+s)-fe)+Oe)/Q if se*se<d then local v=((e-Ge)+xe)-se*U if v*v<Ve then local v=((g-me)+Te)-se*V if v*v<Re then return true end end end local re=(((z-s)+fe)-Oe)/Q if re*re<d then local v=((e+Ge)-xe)-re*U if v*v<Ve then local v=((g+me)-Te)-re*V if v*v<Re then return true end end end local ce=(((z+s)+fe)-Oe)/Q if ce*ce<d then local v=((e+Ge)-xe)-ce*U if v*v<Ve then local v=((g+me)-Te)-ce*V if v*v<Re then return true end end end local Ee=(((z-s)-fe)-Oe)/Q if Ee*Ee<d then local v=((e-Ge)-xe)-Ee*U if v*v<Ve then local v=((g-me)-Te)-Ee*V if v*v<Re then return true end end end local ne=(((z+s)-fe)-Oe)/Q if ne*ne<d then local v=((e-Ge)-xe)-ne*U if v*v<Ve then local v=((g-me)-Te)-ne*V if v*v<Re then return true end end end local We=(((e-r)+Ge)+xe)/U if We*We<d then local v=((g+me)+Te)-We*V if v*v<Re then local v=((z+fe)+Oe)-We*Q if v*v<Ye then return true end end end local Se=(((e+r)+Ge)+xe)/U if Se*Se<d then local v=((g+me)+Te)-Se*V if v*v<Re then local v=((z+fe)+Oe)-Se*Q if v*v<Ye then return true end end end local je=(((e-r)-Ge)+xe)/U if je*je<d then local v=((g-me)+Te)-je*V if v*v<Re then local v=((z-fe)+Oe)-je*Q if v*v<Ye then return true end end end local Ze=(((e+r)-Ge)+xe)/U if Ze*Ze<d then local v=((g-me)+Te)-Ze*V if v*v<Re then local v=((z-fe)+Oe)-Ze*Q if v*v<Ye then return true end end end local ze=(((e-r)+Ge)-xe)/U if ze*ze<d then local v=((g+me)-Te)-ze*V if v*v<Re then local v=((z+fe)-Oe)-ze*Q if v*v<Ye then return true end end end local ee=(((e+r)+Ge)-xe)/U if ee*ee<d then local v=((g+me)-Te)-ee*V if v*v<Re then local v=((z+fe)-Oe)-ee*Q if v*v<Ye then return true end end end local ge=(((e-r)-Ge)-xe)/U if ge*ge<d then local v=((g-me)-Te)-ge*V if v*v<Re then local v=((z-fe)-Oe)-ge*Q if v*v<Ye then return true end end end local Ne=(((e+r)-Ge)-xe)/U if Ne*Ne<d then local v=((g-me)-Te)-Ne*V if v*v<Re then local v=((z-fe)-Oe)-Ne*Q if v*v<Ye then return true end end end local te=(((g-c)+Te)+be)/L if te*te<k then local B=((z+Oe)+oe)-te*v if B*B<Ye then local v=((e+xe)+de)-te*I if v*v<Ve then return true end end end local ie=(((g+c)+Te)+be)/L if ie*ie<k then local B=((z+Oe)+oe)-ie*v if B*B<Ye then local v=((e+xe)+de)-ie*I if v*v<Ve then return true end end end local qe=(((g-c)-Te)+be)/L if qe*qe<k then local B=((z-Oe)+oe)-qe*v if B*B<Ye then local v=((e-xe)+de)-qe*I if v*v<Ve then return true end end end local Je=(((g+c)-Te)+be)/L if Je*Je<k then local B=((z-Oe)+oe)-Je*v if B*B<Ye then local v=((e-xe)+de)-Je*I if v*v<Ve then return true end end end local Ce=(((g-c)+Te)-be)/L if Ce*Ce<k then local B=((z+Oe)-oe)-Ce*v if B*B<Ye then local v=((e+xe)-de)-Ce*I if v*v<Ve then return true end end end local we=(((g+c)+Te)-be)/L if we*we<k then local B=((z+Oe)-oe)-we*v if B*B<Ye then local v=((e+xe)-de)-we*I if v*v<Ve then return true end end end local He=(((g-c)-Te)-be)/L if He*He<k then local B=((z-Oe)-oe)-He*v if B*B<Ye then local v=((e-xe)-de)-He*I if v*v<Ve then return true end end end local ye=(((g+c)-Te)-be)/L if ye*ye<k then local B=((z-Oe)-oe)-ye*v if B*B<Ye then local v=((e-xe)-de)-ye*I if v*v<Ve then return true end end end local Me=(((z-s)+Oe)+oe)/v if Me*Me<k then local v=((e+xe)+de)-Me*I if v*v<Ve then local v=((g+Te)+be)-Me*L if v*v<Re then return true end end end local vK=(((z+s)+Oe)+oe)/v if vK*vK<k then local v=((e+xe)+de)-vK*I if v*v<Ve then local v=((g+Te)+be)-vK*L if v*v<Re then return true end end end local BK=(((z-s)-Oe)+oe)/v if BK*BK<k then local v=((e-xe)+de)-BK*I if v*v<Ve then local v=((g-Te)+be)-BK*L if v*v<Re then return true end end end local QK=(((z+s)-Oe)+oe)/v if QK*QK<k then local v=((e-xe)+de)-QK*I if v*v<Ve then local v=((g-Te)+be)-QK*L if v*v<Re then return true end end end local IK=(((z-s)+Oe)-oe)/v if IK*IK<k then local v=((e+xe)-de)-IK*I if v*v<Ve then local v=((g+Te)-be)-IK*L if v*v<Re then return true end end end local uK=(((z+s)+Oe)-oe)/v if uK*uK<k then local v=((e+xe)-de)-uK*I if v*v<Ve then local v=((g+Te)-be)-uK*L if v*v<Re then return true end end end local UK=(((z-s)-Oe)-oe)/v if UK*UK<k then local v=((e-xe)-de)-UK*I if v*v<Ve then local v=((g-Te)-be)-UK*L if v*v<Re then return true end end end local LK=(((z+s)-Oe)-oe)/v if LK*LK<k then local v=((e-xe)-de)-LK*I if v*v<Ve then local v=((g-Te)-be)-LK*L if v*v<Re then return true end end end local YK=(((e-r)+xe)+de)/I if YK*YK<k then local B=((g+Te)+be)-YK*L if B*B<Re then local B=((z+Oe)+oe)-YK*v if B*B<Ye then return true end end end local VK=(((e+r)+xe)+de)/I if VK*VK<k then local B=((g+Te)+be)-VK*L if B*B<Re then local B=((z+Oe)+oe)-VK*v if B*B<Ye then return true end end end local RK=(((e-r)-xe)+de)/I if RK*RK<k then local B=((g-Te)+be)-RK*L if B*B<Re then local B=((z-Oe)+oe)-RK*v if B*B<Ye then return true end end end local mK=(((e+r)-xe)+de)/I if mK*mK<k then local B=((g-Te)+be)-mK*L if B*B<Re then local B=((z-Oe)+oe)-mK*v if B*B<Ye then return true end end end local TK=(((e-r)+xe)-de)/I if TK*TK<k then local B=((g+Te)-be)-TK*L if B*B<Re then local B=((z+Oe)-oe)-TK*v if B*B<Ye then return true end end end local fK=(((e+r)+xe)-de)/I if fK*fK<k then local B=((g+Te)-be)-fK*L if B*B<Re then local B=((z+Oe)-oe)-fK*v if B*B<Ye then return true end end end local OK=(((e-r)-xe)-de)/I if OK*OK<k then local B=((g-Te)-be)-OK*L if B*B<Re then local B=((z-Oe)-oe)-OK*v if B*B<Ye then return true end end end local GK=(((e+r)-xe)-de)/I if GK*GK<k then local B=((g-Te)-be)-GK*L if B*B<Re then local B=((z-Oe)-oe)-GK*v if B*B<Ye then return true end end end local xK=(((g-c)+be)+me)/Y if xK*xK<A then local v=((z+oe)+fe)-xK*B if v*v<Ye then local v=((e+de)+Ge)-xK*u if v*v<Ve then return true end end end local bK=(((g+c)+be)+me)/Y if bK*bK<A then local v=((z+oe)+fe)-bK*B if v*v<Ye then local v=((e+de)+Ge)-bK*u if v*v<Ve then return true end end end local oK=(((g-c)-be)+me)/Y if oK*oK<A then local v=((z-oe)+fe)-oK*B if v*v<Ye then local v=((e-de)+Ge)-oK*u if v*v<Ve then return true end end end local dK=(((g+c)-be)+me)/Y if dK*dK<A then local v=((z-oe)+fe)-dK*B if v*v<Ye then local v=((e-de)+Ge)-dK*u if v*v<Ve then return true end end end local kK=(((g-c)+be)-me)/Y if kK*kK<A then local v=((z+oe)-fe)-kK*B if v*v<Ye then local v=((e+de)-Ge)-kK*u if v*v<Ve then return true end end end local AK=(((g+c)+be)-me)/Y if AK*AK<A then local v=((z+oe)-fe)-AK*B if v*v<Ye then local v=((e+de)-Ge)-AK*u if v*v<Ve then return true end end end local lK=(((g-c)-be)-me)/Y if lK*lK<A then local v=((z-oe)-fe)-lK*B if v*v<Ye then local v=((e-de)-Ge)-lK*u if v*v<Ve then return true end end end local aK=(((g+c)-be)-me)/Y if aK*aK<A then local v=((z-oe)-fe)-aK*B if v*v<Ye then local v=((e-de)-Ge)-aK*u if v*v<Ve then return true end end end local pK=(((z-s)+oe)+fe)/B if pK*pK<A then local v=((e+de)+Ge)-pK*u if v*v<Ve then local v=((g+be)+me)-pK*Y if v*v<Re then return true end end end local XK=(((z+s)+oe)+fe)/B if XK*XK<A then local v=((e+de)+Ge)-XK*u if v*v<Ve then local v=((g+be)+me)-XK*Y if v*v<Re then return true end end end local DK=(((z-s)-oe)+fe)/B if DK*DK<A then local v=((e-de)+Ge)-DK*u if v*v<Ve then local v=((g-be)+me)-DK*Y if v*v<Re then return true end end end local KK=(((z+s)-oe)+fe)/B if KK*KK<A then local v=((e-de)+Ge)-KK*u if v*v<Ve then local v=((g-be)+me)-KK*Y if v*v<Re then return true end end end local hK=(((z-s)+oe)-fe)/B if hK*hK<A then local v=((e+de)-Ge)-hK*u if v*v<Ve then local v=((g+be)-me)-hK*Y if v*v<Re then return true end end end local PK=(((z+s)+oe)-fe)/B if PK*PK<A then local v=((e+de)-Ge)-PK*u if v*v<Ve then local v=((g+be)-me)-PK*Y if v*v<Re then return true end end end local FK=(((z-s)-oe)-fe)/B if FK*FK<A then local v=((e-de)-Ge)-FK*u if v*v<Ve then local v=((g-be)-me)-FK*Y if v*v<Re then return true end end end local sK=(((z+s)-oe)-fe)/B if sK*sK<A then local v=((e-de)-Ge)-sK*u if v*v<Ve then local v=((g-be)-me)-sK*Y if v*v<Re then return true end end end local rK=(((e-r)+de)+Ge)/u if rK*rK<A then local v=((g+be)+me)-rK*Y if v*v<Re then local v=((z+oe)+fe)-rK*B if v*v<Ye then return true end end end local cK=(((e+r)+de)+Ge)/u if cK*cK<A then local v=((g+be)+me)-cK*Y if v*v<Re then local v=((z+oe)+fe)-cK*B if v*v<Ye then return true end end end local EK=(((e-r)-de)+Ge)/u if EK*EK<A then local v=((g-be)+me)-EK*Y if v*v<Re then local v=((z-oe)+fe)-EK*B if v*v<Ye then return true end end end local nK=(((e+r)-de)+Ge)/u if nK*nK<A then local v=((g-be)+me)-nK*Y if v*v<Re then local v=((z-oe)+fe)-nK*B if v*v<Ye then return true end end end local WK=(((e-r)+de)-Ge)/u if WK*WK<A then local v=((g+be)-me)-WK*Y if v*v<Re then local v=((z+oe)-fe)-WK*B if v*v<Ye then return true end end end local SK=(((e+r)+de)-Ge)/u if SK*SK<A then local v=((g+be)-me)-SK*Y if v*v<Re then local v=((z+oe)-fe)-SK*B if v*v<Ye then return true end end end local jK=(((e-r)-de)-Ge)/u if jK*jK<A then local v=((g-be)-me)-jK*Y if v*v<Re then local v=((z-oe)-fe)-jK*B if v*v<Ye then return true end end end local ZK=(((e+r)-de)-Ge)/u if ZK*ZK<A then local v=((g-be)-me)-ZK*Y if v*v<Re then local v=((z-oe)-fe)-ZK*B if v*v<Ye then return true end end end return false else return U end end end local B=setmetatable local Q=(CFrame.new()).components local I=workspace local u=I.FindPartsInRegion3WithIgnoreList local U=unpack local L=type local Y=game.IsA local V=Region3.new local R=Vector3.new local function m(v,B)local I,u,U,L,Y,m,T,f,O,G,x,b=Q(v)local o,d,k=B.x/2,B.y/2,B.z/2 local A=(o*(L<0 and-L or L)+d*(Y<0 and-Y or Y))+k*(m<0 and-m or m)local l=(o*(T<0 and-T or T)+d*(f<0 and-f or f))+k*(O<0 and-O or O)local a=(o*(G<0 and-G or G)+d*(x<0 and-x or x))+k*(b<0 and-b or b)return V(R(I-A,u-l,U-a),R(I+A,u+l,U+a))end local function T(v,B)local Q=L(B)=="\116\097\098\108\101"and B or{B}local Y=#Q repeat local B=u(I,v,Q,100)local U=#Q for v=1,#B,1 do Q[U+v]=B[v]end until#B<100 return{U(Q,Y+1,#Q)}end local function f(v,B)return BoxPointCollision(v.CFrame,v.Size,B)end local function O(v,B,Q)return BoxSphereCollision(v.CFrame,v.Size,B,Q)end local function G(B,Q,I)return v(B.CFrame,B.Size,Q,I)end local function x(B,Q)return(not Y(Q,"\080\097\114\116")or Q.Shape=="\066\108\111\099\107")and v(B.CFrame,B.Size,Q.CFrame,Q.Size)or BoxSphereCollision(B.CFrame,B.Size,Q.Position,Q.Size.x)end local function b(v,B)local Q={}for I=1,#B,1 do if x(v,B[I])then Q[#Q+1]=B[I]end end return Q end local function o(v,B)local Q={}local I=T(v.Region3,B)for B=1,#I,1 do if x(v,I[B])then Q[#Q+1]=I[B]end end return Q end local function d(v,Q)local I={CFrame=v;Size=Q;Region3=m(v,Q),Cast=o;CastPart=x,CastParts=b;CastPoint=f;CastSphere=O,CastBox=G}return B({},{__index=I,__newindex=function(v,B,Q)I[B]=Q I.Region3=m(I.CFrame,I.Size)end})end Region.Region3BoundingBox=m Region.FindAllPartsInRegion3=T Region.BoxPointCollision=BoxPointCollision Region.BoxSphereCollision=BoxSphereCollision Region.BoxCollision=v Region.new=d function Region.FromPart(v)return d(v.CFrame,v.Size)end return Region

local BoxCollision do
	local components=CFrame.new().components
	function BoxCollision(CFrame0,Size0,CFrame1,Size1,AssumeTrue)
		local	m00,m01,m02,
				m03,m04,m05,
				m06,m07,m08,
				m09,m10,m11	=components(CFrame0)
		local	m12,m13,m14,
				m15,m16,m17,
				m18,m19,m20,
				m21,m22,m23	=components(CFrame1)
		local	m24,m25,m26	=Size0.x/2,Size0.y/2,Size0.z/2
		local	m27,m28,m29	=Size1.x/2,Size1.y/2,Size1.z/2
		local	m30,m31,m32	=m12-m00,m13-m01,m14-m02
		local	m00			=m03*m30+m06*m31+m09*m32
		local	m01			=m04*m30+m07*m31+m10*m32
		local	m02			=m05*m30+m08*m31+m11*m32
		local	m12			=m15*m30+m18*m31+m21*m32
		local	m13			=m16*m30+m19*m31+m22*m32
		local	m14			=m17*m30+m20*m31+m23*m32
		local	m30			=m12>m27 and m12-m27
							or m12<-m27 and m12+m27
							or 0
		local	m31			=m13>m28 and m13-m28
							or m13<-m28 and m13+m28
							or 0
		local	m32			=m14>m29 and m14-m29
							or m14<-m29 and m14+m29
							or 0
		local	m33			=m00>m24 and m00-m24
							or m00<-m24 and m00+m24
							or 0
		local	m34			=m01>m25 and m01-m25
							or m01<-m25 and m01+m25
							or 0
		local	m35			=m02>m26 and m02-m26
							or m02<-m26 and m02+m26
							or 0
		local	m36			=m30*m30+m31*m31+m32*m32
		local	m30			=m33*m33+m34*m34+m35*m35
		local	m31			=m24<m25 and (m24<m26 and m24 or m26)
							or (m25<m26 and m25 or m26)
		local	m32			=m27<m28 and (m27<m29 and m27 or m29)
							or (m28<m29 and m28 or m29)
		if m36<m31*m31 or m30<m32*m32 then
			return true
		elseif m36>m24*m24+m25*m25+m26*m26 or m30>m27*m27+m28*m28+m29*m29 then
			return false
		elseif AssumeTrue==nil then
			local m30=m03*m15+m06*m18+m09*m21
			local m31=m03*m16+m06*m19+m09*m22
			local m32=m03*m17+m06*m20+m09*m23
			local m03=m04*m15+m07*m18+m10*m21
			local m06=m04*m16+m07*m19+m10*m22
			local m09=m04*m17+m07*m20+m10*m23
			local m04=m05*m15+m08*m18+m11*m21
			local m07=m05*m16+m08*m19+m11*m22
			local m10=m05*m17+m08*m20+m11*m23
			local m05=m29*m29
			local m08=m27*m27
			local m11=m28*m28
			local m15=m24*m30
			local m16=m25*m03
			local m17=m26*m04
			local m18=m24*m31
			local m19=m25*m06
			local m20=m26*m07
			local m21=m24*m32
			local m22=m25*m09
			local m23=m26*m10
			local m33=m15+m16+m17-m12;if m33*m33<m08 then local m34=m18+m19+m20-m13;if m34*m34<m11 then local m35=m21+m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15+m16+m17-m12;if m33*m33<m08 then local m34=-m18+m19+m20-m13;if m34*m34<m11 then local m35=-m21+m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=m15-m16+m17-m12;if m33*m33<m08 then local m34=m18-m19+m20-m13;if m34*m34<m11 then local m35=m21-m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15-m16+m17-m12;if m33*m33<m08 then local m34=-m18-m19+m20-m13;if m34*m34<m11 then local m35=-m21-m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=m15+m16-m17-m12;if m33*m33<m08 then local m34=m18+m19-m20-m13;if m34*m34<m11 then local m35=m21+m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15+m16-m17-m12;if m33*m33<m08 then local m34=-m18+m19-m20-m13;if m34*m34<m11 then local m35=-m21+m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=m15-m16-m17-m12;if m33*m33<m08 then local m34=m18-m19-m20-m13;if m34*m34<m11 then local m35=m21-m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15-m16-m17-m12;if m33*m33<m08 then local m34=-m18-m19-m20-m13;if m34*m34<m11 then local m35=-m21-m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m12=m24*m24
			local m13=m25*m25
			local m14=m26*m26
			local m15=m27*m04
			local m16=m28*m07
			local m17=m27*m30
			local m18=m28*m31
			local m19=m27*m03
			local m20=m28*m06
			local m21=m29*m10
			local m22=m29*m32
			local m23=m29*m09
			local m35=(m02-m26+m15+m16)/m10;if m35*m35<m05 then local m33=m00+m17+m18-m35*m32;if m33*m33<m12 then local m34=m01+m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m15+m16)/m10;if m35*m35<m05 then local m33=m00+m17+m18-m35*m32;if m33*m33<m12 then local m34=m01+m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m15+m16)/m10;if m35*m35<m05 then local m33=m00-m17+m18-m35*m32;if m33*m33<m12 then local m34=m01-m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m15+m16)/m10;if m35*m35<m05 then local m33=m00-m17+m18-m35*m32;if m33*m33<m12 then local m34=m01-m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26+m15-m16)/m10;if m35*m35<m05 then local m33=m00+m17-m18-m35*m32;if m33*m33<m12 then local m34=m01+m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m15-m16)/m10;if m35*m35<m05 then local m33=m00+m17-m18-m35*m32;if m33*m33<m12 then local m34=m01+m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m15-m16)/m10;if m35*m35<m05 then local m33=m00-m17-m18-m35*m32;if m33*m33<m12 then local m34=m01-m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m15-m16)/m10;if m35*m35<m05 then local m33=m00-m17-m18-m35*m32;if m33*m33<m12 then local m34=m01-m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m00-m24+m17+m18)/m32;if m35*m35<m05 then local m33=m01+m19+m20-m35*m09;if m33*m33<m13 then local m34=m02+m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m17+m18)/m32;if m35*m35<m05 then local m33=m01+m19+m20-m35*m09;if m33*m33<m13 then local m34=m02+m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m17+m18)/m32;if m35*m35<m05 then local m33=m01-m19+m20-m35*m09;if m33*m33<m13 then local m34=m02-m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m17+m18)/m32;if m35*m35<m05 then local m33=m01-m19+m20-m35*m09;if m33*m33<m13 then local m34=m02-m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24+m17-m18)/m32;if m35*m35<m05 then local m33=m01+m19-m20-m35*m09;if m33*m33<m13 then local m34=m02+m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m17-m18)/m32;if m35*m35<m05 then local m33=m01+m19-m20-m35*m09;if m33*m33<m13 then local m34=m02+m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m17-m18)/m32;if m35*m35<m05 then local m33=m01-m19-m20-m35*m09;if m33*m33<m13 then local m34=m02-m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m17-m18)/m32;if m35*m35<m05 then local m33=m01-m19-m20-m35*m09;if m33*m33<m13 then local m34=m02-m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m01-m25+m19+m20)/m09;if m35*m35<m05 then local m33=m02+m15+m16-m35*m10;if m33*m33<m14 then local m34=m00+m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m19+m20)/m09;if m35*m35<m05 then local m33=m02+m15+m16-m35*m10;if m33*m33<m14 then local m34=m00+m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m19+m20)/m09;if m35*m35<m05 then local m33=m02-m15+m16-m35*m10;if m33*m33<m14 then local m34=m00-m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m19+m20)/m09;if m35*m35<m05 then local m33=m02-m15+m16-m35*m10;if m33*m33<m14 then local m34=m00-m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25+m19-m20)/m09;if m35*m35<m05 then local m33=m02+m15-m16-m35*m10;if m33*m33<m14 then local m34=m00+m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m19-m20)/m09;if m35*m35<m05 then local m33=m02+m15-m16-m35*m10;if m33*m33<m14 then local m34=m00+m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m19-m20)/m09;if m35*m35<m05 then local m33=m02-m15-m16-m35*m10;if m33*m33<m14 then local m34=m00-m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m19-m20)/m09;if m35*m35<m05 then local m33=m02-m15-m16-m35*m10;if m33*m33<m14 then local m34=m00-m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m02-m26+m16+m21)/m04;if m35*m35<m08 then local m33=m00+m18+m22-m35*m30;if m33*m33<m12 then local m34=m01+m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m16+m21)/m04;if m35*m35<m08 then local m33=m00+m18+m22-m35*m30;if m33*m33<m12 then local m34=m01+m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m16+m21)/m04;if m35*m35<m08 then local m33=m00-m18+m22-m35*m30;if m33*m33<m12 then local m34=m01-m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m16+m21)/m04;if m35*m35<m08 then local m33=m00-m18+m22-m35*m30;if m33*m33<m12 then local m34=m01-m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26+m16-m21)/m04;if m35*m35<m08 then local m33=m00+m18-m22-m35*m30;if m33*m33<m12 then local Axi=m01+m20-m23-m35*m03;if Axi*Axi<m13 then return true;end;end;end;
			local m35=(m02+m26+m16-m21)/m04;if m35*m35<m08 then local m33=m00+m18-m22-m35*m30;if m33*m33<m12 then local sAn=m01+m20-m23-m35*m03;if sAn*sAn<m13 then return true;end;end;end;
			local m35=(m02-m26-m16-m21)/m04;if m35*m35<m08 then local m33=m00-m18-m22-m35*m30;if m33*m33<m12 then local gle=m01-m20-m23-m35*m03;if gle*gle<m13 then return true;end;end;end;
			local m35=(m02+m26-m16-m21)/m04;if m35*m35<m08 then local m33=m00-m18-m22-m35*m30;if m33*m33<m12 then local m34=m01-m20-m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m00-m24+m18+m22)/m30;if m35*m35<m08 then local m33=m01+m20+m23-m35*m03;if m33*m33<m13 then local m34=m02+m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m18+m22)/m30;if m35*m35<m08 then local m33=m01+m20+m23-m35*m03;if m33*m33<m13 then local m34=m02+m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m18+m22)/m30;if m35*m35<m08 then local m33=m01-m20+m23-m35*m03;if m33*m33<m13 then local m34=m02-m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m18+m22)/m30;if m35*m35<m08 then local m33=m01-m20+m23-m35*m03;if m33*m33<m13 then local m34=m02-m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24+m18-m22)/m30;if m35*m35<m08 then local m33=m01+m20-m23-m35*m03;if m33*m33<m13 then local m34=m02+m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m18-m22)/m30;if m35*m35<m08 then local m33=m01+m20-m23-m35*m03;if m33*m33<m13 then local m34=m02+m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m18-m22)/m30;if m35*m35<m08 then local m33=m01-m20-m23-m35*m03;if m33*m33<m13 then local m34=m02-m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m18-m22)/m30;if m35*m35<m08 then local m33=m01-m20-m23-m35*m03;if m33*m33<m13 then local m34=m02-m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m01-m25+m20+m23)/m03;if m35*m35<m08 then local m33=m02+m16+m21-m35*m04;if m33*m33<m14 then local m34=m00+m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m20+m23)/m03;if m35*m35<m08 then local m33=m02+m16+m21-m35*m04;if m33*m33<m14 then local m34=m00+m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m20+m23)/m03;if m35*m35<m08 then local m33=m02-m16+m21-m35*m04;if m33*m33<m14 then local m34=m00-m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m20+m23)/m03;if m35*m35<m08 then local m33=m02-m16+m21-m35*m04;if m33*m33<m14 then local m34=m00-m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25+m20-m23)/m03;if m35*m35<m08 then local m33=m02+m16-m21-m35*m04;if m33*m33<m14 then local m34=m00+m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m20-m23)/m03;if m35*m35<m08 then local m33=m02+m16-m21-m35*m04;if m33*m33<m14 then local m34=m00+m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m20-m23)/m03;if m35*m35<m08 then local m33=m02-m16-m21-m35*m04;if m33*m33<m14 then local m34=m00-m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m20-m23)/m03;if m35*m35<m08 then local m33=m02-m16-m21-m35*m04;if m33*m33<m14 then local m34=m00-m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m02-m26+m21+m15)/m07;if m35*m35<m11 then local m33=m00+m22+m17-m35*m31;if m33*m33<m12 then local m34=m01+m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m21+m15)/m07;if m35*m35<m11 then local m33=m00+m22+m17-m35*m31;if m33*m33<m12 then local m34=m01+m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m21+m15)/m07;if m35*m35<m11 then local m33=m00-m22+m17-m35*m31;if m33*m33<m12 then local m34=m01-m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m21+m15)/m07;if m35*m35<m11 then local m33=m00-m22+m17-m35*m31;if m33*m33<m12 then local m34=m01-m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26+m21-m15)/m07;if m35*m35<m11 then local m33=m00+m22-m17-m35*m31;if m33*m33<m12 then local m34=m01+m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m21-m15)/m07;if m35*m35<m11 then local m33=m00+m22-m17-m35*m31;if m33*m33<m12 then local m34=m01+m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m21-m15)/m07;if m35*m35<m11 then local m33=m00-m22-m17-m35*m31;if m33*m33<m12 then local m34=m01-m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m21-m15)/m07;if m35*m35<m11 then local m33=m00-m22-m17-m35*m31;if m33*m33<m12 then local m34=m01-m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m00-m24+m22+m17)/m31;if m35*m35<m11 then local m33=m01+m23+m19-m35*m06;if m33*m33<m13 then local m34=m02+m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m22+m17)/m31;if m35*m35<m11 then local m33=m01+m23+m19-m35*m06;if m33*m33<m13 then local m34=m02+m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m22+m17)/m31;if m35*m35<m11 then local m33=m01-m23+m19-m35*m06;if m33*m33<m13 then local m34=m02-m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m22+m17)/m31;if m35*m35<m11 then local m33=m01-m23+m19-m35*m06;if m33*m33<m13 then local m34=m02-m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24+m22-m17)/m31;if m35*m35<m11 then local m33=m01+m23-m19-m35*m06;if m33*m33<m13 then local m34=m02+m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m22-m17)/m31;if m35*m35<m11 then local m33=m01+m23-m19-m35*m06;if m33*m33<m13 then local m34=m02+m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m22-m17)/m31;if m35*m35<m11 then local m33=m01-m23-m19-m35*m06;if m33*m33<m13 then local m34=m02-m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m22-m17)/m31;if m35*m35<m11 then local m33=m01-m23-m19-m35*m06;if m33*m33<m13 then local m34=m02-m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m01-m25+m23+m19)/m06;if m35*m35<m11 then local m33=m02+m21+m15-m35*m07;if m33*m33<m14 then local m34=m00+m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m23+m19)/m06;if m35*m35<m11 then local m33=m02+m21+m15-m35*m07;if m33*m33<m14 then local m34=m00+m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m23+m19)/m06;if m35*m35<m11 then local m33=m02-m21+m15-m35*m07;if m33*m33<m14 then local m34=m00-m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m23+m19)/m06;if m35*m35<m11 then local m33=m02-m21+m15-m35*m07;if m33*m33<m14 then local m34=m00-m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25+m23-m19)/m06;if m35*m35<m11 then local m33=m02+m21-m15-m35*m07;if m33*m33<m14 then local m34=m00+m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m23-m19)/m06;if m35*m35<m11 then local m33=m02+m21-m15-m35*m07;if m33*m33<m14 then local m34=m00+m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m23-m19)/m06;if m35*m35<m11 then local m33=m02-m21-m15-m35*m07;if m33*m33<m14 then local m34=m00-m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m23-m19)/m06;if m35*m35<m11 then local m33=m02-m21-m15-m35*m07;if m33*m33<m14 then local m34=m00-m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			return false
		else
			return AssumeTrue
		end
	end
end


local setmetatable	=setmetatable
local components	=CFrame.new().components
local workspace		=workspace
local BoxCast		=workspace.FindPartsInRegion3WithIgnoreList
local unpack		=unpack
local type			=type
local IsA			=game.IsA
local r3			=Region3.new
local v3			=Vector3.new



local function Region3BoundingBox(CFrame,Size)
 	local	x,y,z,
			xx,yx,zx,
			xy,yy,zy,
			xz,yz,zz=components(CFrame)
	local	sx,sy,sz=Size.x/2,Size.y/2,Size.z/2
	local	px		=sx*(xx<0 and -xx or xx)
					+sy*(yx<0 and -yx or yx)
					+sz*(zx<0 and -zx or zx)
	local	py		=sx*(xy<0 and -xy or xy)
					+sy*(yy<0 and -yy or yy)
					+sz*(zy<0 and -zy or zy)
	local	pz		=sx*(xz<0 and -xz or xz)
					+sy*(yz<0 and -yz or yz)
					+sz*(zz<0 and -zz or zz)
	return			r3(v3(x-px,y-py,z-pz),v3(x+px,y+py,z+pz))
end



local function FindAllPartsInRegion3(Region3,Ignore)
	local Ignore=type(Ignore)=="table" and Ignore or {Ignore}
	local Last=#Ignore
	repeat
		local Parts=BoxCast(workspace,Region3,Ignore,100)
		local Start=#Ignore
		for i=1,#Parts do
			Ignore[Start+i]=Parts[i]
		end
	until #Parts<100;
	return {unpack(Ignore,Last+1,#Ignore)}
end



local function CastPoint(Region,Point)
	return BoxPointCollision(Region.CFrame,Region.Size,Point)
end



local function CastSphere(Region,Center,Radius)
	return BoxSphereCollision(Region.CFrame,Region.Size,Center,Radius)
end



local function CastBox(Region,CFrame,Size)
	return BoxCollision(Region.CFrame,Region.Size,CFrame,Size)
end



local function CastPart(Region,Part)
	return	(not IsA(Part,"Part") or Part.Shape=="Block") and
			BoxCollision(Region.CFrame,Region.Size,Part.CFrame,Part.Size)
			or BoxSphereCollision(Region.CFrame,Region.Size,Part.Position,Part.Size.x)
end



local function CastParts(Region,Parts)
	local Inside={}
	for i=1,#Parts do
		if CastPart(Region,Parts[i]) then
			Inside[#Inside+1]=Parts[i]
		end
	end
	return Inside
end



local function Cast(Region,Ignore)
	local Inside={}
	local Parts=FindAllPartsInRegion3(Region.Region3,Ignore)
	for i=1,#Parts do
		if CastPart(Region,Parts[i]) then
			Inside[#Inside+1]=Parts[i]
		end
	end
	return Inside
end



local function NewRegion(CFrame,Size)
	local Object	={
		CFrame		=CFrame;
		Size		=Size;
		Region3		=Region3BoundingBox(CFrame,Size);
		Cast		=Cast;
		CastPart	=CastPart;
		CastParts	=CastParts;
		CastPoint	=CastPoint;
		CastSphere	=CastSphere;
		CastBox		=CastBox;
					}
	return			setmetatable({},{
		__index=Object;
		__newindex=function(_,Index,Value)
			Object[Index]=Value
			Object.Region3=Region3BoundingBox(Object.CFrame,Object.Size)
		end;
					})
end



Region.Region3BoundingBox	=Region3BoundingBox
Region.FindAllPartsInRegion3=FindAllPartsInRegion3
Region.BoxPointCollision	=BoxPointCollision
Region.BoxSphereCollision	=BoxSphereCollision
Region.BoxCollision			=BoxCollision
Region.new					=NewRegion
function Region.FromPart(Part)
	return NewRegion(Part.CFrame,Part.Size)
end

return Region
