slot0 = type
slot1 = string.sub
slot2 = string.byte
slot3 = string.format
slot4 = string.match
slot5 = string.gmatch
slot6 = string.gsub
slot7 = table.concat
slot8 = require("bit")
slot9 = slot8.band
slot10 = slot8.bor
slot11 = slot8.bxor
slot12 = slot8.tohex
slot13 = slot8.lshift
slot14 = slot8.rshift
slot15 = slot8.arshift
slot16 = slot8.ror
slot17 = {
	[0] = "adrDBx",
	"adrpDBx",
	shift = 31,
	mask = 1
}
slot22 = {
	[0] = slot17,
	slot17,
	{
		[0] = "add|movDNIg",
		"adds|cmnD0NIg",
		"subDNIg",
		"subs|cmpD0NIg",
		shift = 29,
		mask = 3
	},
	false,
	{
		[0] = {
			[0] = {
				[0] = "andDNig",
				"orr|movDN0ig",
				"eorDNig",
				"ands|tstD0Nig",
				shift = 29,
				mask = 3
			},
			false,
			shift = 22,
			mask = 1
		},
		{
			[0] = "andDNig",
			"orr|movDN0ig",
			"eorDNig",
			"ands|tstD0Nig",
			shift = 29,
			mask = 3
		},
		shift = 31,
		mask = 1
	},
	{
		[0] = {
			[0] = {
				[0] = "movnDWRg",
				false,
				"movz|movDYRg",
				"movkDWRg",
				shift = 29,
				mask = 3
			},
			false,
			shift = 22,
			mask = 1
		},
		{
			[0] = "movnDWRg",
			false,
			"movz|movDYRg",
			"movkDWRg",
			shift = 29,
			mask = 3
		},
		shift = 31,
		mask = 1
	},
	{
		[0] = {
			[0] = {
				[0] = "sbfm|sbfiz|sbfx|asr|sxtw|sxth|sxtbDN12w",
				"bfm|bfi|bfxilDN13w",
				"ubfm|ubfiz|ubfx|lsr|lsl|uxth|uxtbDN12w",
				shift = 29,
				mask = 3
			},
			shift = 22,
			mask = 1
		},
		{
			{
				[0] = "sbfm|sbfiz|sbfx|asr|sxtw|sxth|sxtbDN12x",
				"bfm|bfi|bfxilDN13x",
				"ubfm|ubfiz|ubfx|lsr|lsl|uxth|uxtbDN12x",
				shift = 29,
				mask = 3
			},
			shift = 22,
			mask = 1
		},
		shift = 31,
		mask = 1
	},
	{
		[0] = "extr|rorDNM4w",
		[65664.0] = "extr|rorDNM4x",
		[65665.0] = "extr|rorDNM4x",
		shift = 15,
		mask = 114881
	},
	shift = 23,
	mask = 7
}
slot24 = {
	[0] = {
		[0] = {
			[0] = {
				[0] = "addDNMSg",
				"addDNMSg",
				"addDNMSg",
				"addDNMg",
				shift = 22,
				mask = 3
			},
			{
				[0] = "adds|cmnD0NMSg",
				"adds|cmnD0NMSg",
				"adds|cmnD0NMSg",
				"adds|cmnD0NMg",
				shift = 22,
				mask = 3
			},
			{
				[0] = "sub|negDN0MSg",
				"sub|negDN0MSg",
				"sub|negDN0MSg",
				"sub|negDN0Mg",
				shift = 22,
				mask = 3
			},
			{
				[0] = "subs|cmp|negsD0N0MzSg",
				"subs|cmp|negsD0N0MzSg",
				"subs|cmp|negsD0N0MzSg",
				"subs|cmp|negsD0N0Mzg",
				shift = 22,
				mask = 3
			},
			shift = 29,
			mask = 3
		},
		false,
		shift = 15,
		mask = 1
	},
	{
		[0] = {
			[0] = "addDNMSg",
			"addDNMSg",
			"addDNMSg",
			"addDNMg",
			shift = 22,
			mask = 3
		},
		{
			[0] = "adds|cmnD0NMSg",
			"adds|cmnD0NMSg",
			"adds|cmnD0NMSg",
			"adds|cmnD0NMg",
			shift = 22,
			mask = 3
		},
		{
			[0] = "sub|negDN0MSg",
			"sub|negDN0MSg",
			"sub|negDN0MSg",
			"sub|negDN0Mg",
			shift = 22,
			mask = 3
		},
		{
			[0] = "subs|cmp|negsD0N0MzSg",
			"subs|cmp|negsD0N0MzSg",
			"subs|cmp|negsD0N0MzSg",
			"subs|cmp|negsD0N0Mzg",
			shift = 22,
			mask = 3
		},
		shift = 29,
		mask = 3
	},
	shift = 31,
	mask = 1
}
slot32 = {
	[0] = {
		[0] = {
			[0] = "madd|mulDNMA0g",
			"msub|mnegDNMA0g",
			shift = 15,
			mask = 1
		},
		shift = 21,
		mask = 7
	},
	false,
	false,
	false,
	{
		[0] = {
			[0] = "madd|mulDNMA0g",
			"smaddl|smullDxNMwA0x",
			"smulhDNMx",
			false,
			false,
			"umaddl|umullDxNMwA0x",
			"umulhDNMx",
			shift = 21,
			mask = 7
		},
		{
			[0] = "msub|mnegDNMA0g",
			"smsubl|smneglDxNMwA0x",
			false,
			false,
			false,
			"umsubl|umneglDxNMwA0x",
			shift = 21,
			mask = 7
		},
		shift = 15,
		mask = 1
	},
	shift = 29,
	mask = 7
}
slot33 = {
	[0] = {
		[0] = {
			[0] = {
				[0] = {
					[0] = {
						[0] = "andDNMSg",
						"bicDNMSg",
						"andDNMSg",
						"bicDNMSg",
						"andDNMSg",
						"bicDNMSg",
						"andDNMg",
						"bicDNMg",
						shift = 21,
						mask = 7
					},
					{
						[0] = "orr|movDN0MSg",
						"orn|mvnDN0MSg",
						"orr|movDN0MSg",
						"orn|mvnDN0MSg",
						"orr|movDN0MSg",
						"orn|mvnDN0MSg",
						"orr|movDN0Mg",
						"orn|mvnDN0Mg",
						shift = 21,
						mask = 7
					},
					{
						[0] = "eorDNMSg",
						"eonDNMSg",
						"eorDNMSg",
						"eonDNMSg",
						"eorDNMSg",
						"eonDNMSg",
						"eorDNMg",
						"eonDNMg",
						shift = 21,
						mask = 7
					},
					{
						[0] = "ands|tstD0NMSg",
						"bicsDNMSg",
						"ands|tstD0NMSg",
						"bicsDNMSg",
						"ands|tstD0NMSg",
						"bicsDNMSg",
						"ands|tstD0NMg",
						"bicsDNMg",
						shift = 21,
						mask = 7
					},
					shift = 29,
					mask = 3
				},
				false,
				shift = 15,
				mask = 1
			},
			{
				[0] = {
					[0] = "andDNMSg",
					"bicDNMSg",
					"andDNMSg",
					"bicDNMSg",
					"andDNMSg",
					"bicDNMSg",
					"andDNMg",
					"bicDNMg",
					shift = 21,
					mask = 7
				},
				{
					[0] = "orr|movDN0MSg",
					"orn|mvnDN0MSg",
					"orr|movDN0MSg",
					"orn|mvnDN0MSg",
					"orr|movDN0MSg",
					"orn|mvnDN0MSg",
					"orr|movDN0Mg",
					"orn|mvnDN0Mg",
					shift = 21,
					mask = 7
				},
				{
					[0] = "eorDNMSg",
					"eonDNMSg",
					"eorDNMSg",
					"eonDNMSg",
					"eorDNMSg",
					"eonDNMSg",
					"eorDNMg",
					"eonDNMg",
					shift = 21,
					mask = 7
				},
				{
					[0] = "ands|tstD0NMSg",
					"bicsDNMSg",
					"ands|tstD0NMSg",
					"bicsDNMSg",
					"ands|tstD0NMSg",
					"bicsDNMSg",
					"ands|tstD0NMg",
					"bicsDNMg",
					shift = 21,
					mask = 7
				},
				shift = 29,
				mask = 3
			},
			shift = 31,
			mask = 1
		},
		{
			[0] = {
				[0] = slot24,
				slot24,
				slot24,
				shift = 22,
				mask = 3
			},
			{
				[0] = {
					[0] = "addDNMXg",
					"adds|cmnD0NMXg",
					"subDNMXg",
					"subs|cmpD0NMzXg",
					shift = 29,
					mask = 3
				},
				shift = 22,
				mask = 3
			},
			shift = 21,
			mask = 1
		},
		shift = 24,
		mask = 1
	},
	{
		[0] = {
			[0] = {
				[0] = "adcDNMg",
				"adcsDNMg",
				"sbc|ngcDN0Mg",
				"sbcs|ngcsDN0Mg",
				shift = 29,
				mask = 3
			},
			shift = 10,
			mask = 63
		},
		false,
		{
			[0] = {
				[0] = {
					"ccmnNMVCg",
					false,
					"ccmpNMVCg",
					shift = 29,
					mask = 3
				},
				shift = 10,
				mask = 3,
				[2] = {
					"ccmnN5VCg",
					false,
					"ccmpN5VCg",
					shift = 29,
					mask = 3
				}
			},
			shift = 4,
			mask = 1
		},
		false,
		{
			[0] = {
				[0] = {
					[0] = "cselDNMzCg",
					false,
					"csinv|cinv|csetmDNMcg",
					false,
					shift = 29,
					mask = 3
				},
				{
					[0] = "csinc|cinc|csetDNMcg",
					false,
					"csneg|cnegDNMcg",
					false,
					shift = 29,
					mask = 3
				},
				shift = 10,
				mask = 1
			},
			shift = 11,
			mask = 1
		},
		false,
		{
			[0] = {
				[0] = {
					false,
					"udivDNMg",
					"sdivDNMg",
					false,
					false,
					false,
					false,
					"lslDNMg",
					"lsrDNMg",
					"asrDNMg",
					"rorDNMg",
					shift = 10,
					mask = 63
				},
				shift = 29,
				mask = 1
			},
			{
				[0] = {
					[0] = {
						[0] = "rbitDNg",
						"rev16DNg",
						"revDNw",
						false,
						"clzDNg",
						"clsDNg",
						shift = 10,
						mask = 2047
					},
					{
						[0] = "rbitDNg",
						"rev16DNg",
						"rev32DNx",
						"revDNx",
						"clzDNg",
						"clsDNg",
						shift = 10,
						mask = 2047
					},
					shift = 31,
					mask = 1
				},
				shift = 29,
				mask = 1
			},
			shift = 30,
			mask = 1
		},
		false,
		slot32,
		slot32,
		slot32,
		slot32,
		slot32,
		slot32,
		slot32,
		slot32,
		shift = 21,
		mask = 15
	},
	shift = 28,
	mask = 1
}
slot35 = {
	[0] = {
		[0] = {
			[0] = "strbDwzL",
			"ldrbDwzL",
			"ldrsbDxzL",
			"ldrsbDwzL",
			shift = 22,
			mask = 3
		},
		shift = 26,
		mask = 1
	},
	{
		[0] = {
			[0] = "strhDwzL",
			"ldrhDwzL",
			"ldrshDxzL",
			"ldrshDwzL",
			shift = 22,
			mask = 3
		},
		shift = 26,
		mask = 1
	},
	{
		[0] = {
			[0] = "strDwzL",
			"ldrDwzL",
			"ldrswDxzL",
			shift = 22,
			mask = 3
		},
		{
			[0] = "strDszL",
			"ldrDszL",
			shift = 22,
			mask = 3
		},
		shift = 26,
		mask = 1
	},
	{
		[0] = {
			[0] = "strDxzL",
			"ldrDxzL",
			shift = 22,
			mask = 3
		},
		{
			[0] = "strDdzL",
			"ldrDdzL",
			shift = 22,
			mask = 3
		},
		shift = 26,
		mask = 1
	},
	shift = 30,
	mask = 3
}
slot37 = {
	[0] = {
		[0] = {
			[0] = "stpDzAzwP",
			"stpDzAzsP",
			shift = 26,
			mask = 1
		},
		{
			"stpDzAzdP",
			shift = 26,
			mask = 1
		},
		{
			[0] = "stpDzAzxP",
			shift = 26,
			mask = 1
		},
		shift = 30,
		mask = 3
	},
	{
		[0] = {
			[0] = "ldpDzAzwP",
			"ldpDzAzsP",
			shift = 26,
			mask = 1
		},
		{
			[0] = "ldpswDAxP",
			"ldpDzAzdP",
			shift = 26,
			mask = 1
		},
		{
			[0] = "ldpDzAzxP",
			shift = 26,
			mask = 1
		},
		shift = 30,
		mask = 3
	},
	shift = 22,
	mask = 1
}
slot38 = {
	shift = 24,
	mask = 49,
	[16] = {
		[0] = {
			[0] = "ldrDwB",
			"ldrDxB",
			"ldrswDxB",
			shift = 30,
			mask = 3
		},
		{
			[0] = "ldrDsB",
			"ldrDdB",
			shift = 30,
			mask = 3
		},
		shift = 26,
		mask = 1
	},
	[48] = {
		[0] = {
			[0] = {
				[0] = {
					[0] = {
						[0] = "sturbDwK",
						"ldurbDwK",
						shift = 22,
						mask = 3
					},
					{
						[0] = "sturhDwK",
						"ldurhDwK",
						shift = 22,
						mask = 3
					},
					{
						[0] = "sturDwK",
						"ldurDwK",
						shift = 22,
						mask = 3
					},
					{
						[0] = "sturDxK",
						"ldurDxK",
						shift = 22,
						mask = 3
					},
					shift = 30,
					mask = 3
				},
				shift = 26,
				mask = 1
			},
			slot35,
			false,
			slot35,
			shift = 10,
			mask = 3
		},
		{
			shift = 10,
			mask = 3,
			[2] = {
				[0] = {
					[0] = {
						[0] = "strbDwO",
						"ldrbDwO",
						"ldrsbDxO",
						"ldrsbDwO",
						shift = 22,
						mask = 3
					},
					{
						[0] = "strhDwO",
						"ldrhDwO",
						"ldrshDxO",
						"ldrshDwO",
						shift = 22,
						mask = 3
					},
					{
						[0] = "strDwO",
						"ldrDwO",
						"ldrswDxO",
						shift = 22,
						mask = 3
					},
					{
						[0] = "strDxO",
						"ldrDxO",
						shift = 22,
						mask = 3
					},
					shift = 30,
					mask = 3
				},
				{
					shift = 30,
					mask = 3,
					[2] = {
						[0] = "strDsO",
						"ldrDsO",
						shift = 22,
						mask = 3
					},
					[3] = {
						[0] = "strDdO",
						"ldrDdO",
						shift = 22,
						mask = 3
					}
				},
				shift = 26,
				mask = 1
			}
		},
		shift = 21,
		mask = 1
	},
	[32] = {
		slot37,
		slot37,
		slot37,
		shift = 23,
		mask = 3
	},
	[33] = {
		slot37,
		slot37,
		slot37,
		shift = 23,
		mask = 3
	},
	[49] = {
		[0] = {
			[0] = {
				[0] = "strbDwzU",
				"ldrbDwzU",
				shift = 22,
				mask = 3
			},
			{
				[0] = "strhDwzU",
				"ldrhDwzU",
				shift = 22,
				mask = 3
			},
			{
				[0] = "strDwzU",
				"ldrDwzU",
				shift = 22,
				mask = 3
			},
			{
				[0] = "strDxzU",
				"ldrDxzU",
				shift = 22,
				mask = 3
			},
			shift = 30,
			mask = 3
		},
		{
			shift = 30,
			mask = 3,
			[2] = {
				[0] = "strDszU",
				"ldrDszU",
				shift = 22,
				mask = 3
			},
			[3] = {
				[0] = "strDdzU",
				"ldrDdzU",
				shift = 22,
				mask = 3
			}
		},
		shift = 26,
		mask = 1
	}
}
slot39 = {
	{
		[0] = {
			{
				[0] = {
					[0] = {
						[0] = {
							[0] = {
								[0] = {
									[0] = {
										[57.0] = "fcvtzuDwNs",
										[121.0] = "fcvtzuDwNd",
										[104.0] = "fcvtpsDwNd",
										[112.0] = "fcvtmsDwNd",
										[99.0] = "ucvtfDdNw",
										[97.0] = "fcvtnuDwNd",
										[100.0] = "fcvtasDwNd",
										[33.0] = "fcvtnuDwNs",
										[39.0] = "fmovDsNw",
										[35.0] = "ucvtfDsNw",
										[105.0] = "fcvtpuDwNd",
										[96.0] = "fcvtnsDwNd",
										[113.0] = "fcvtmuDwNd",
										[120.0] = "fcvtzsDwNd",
										[32.0] = "fcvtnsDwNs",
										[38.0] = "fmovDwNs",
										[36.0] = "fcvtasDwNs",
										[40.0] = "fcvtpsDwNs",
										mask = 255,
										[48.0] = "fcvtmsDwNs",
										[101.0] = "fcvtauDwNd",
										[56.0] = "fcvtzsDwNs",
										[37.0] = "fcvtauDwNs",
										[98.0] = "scvtfDdNw",
										[41.0] = "fcvtpuDwNs",
										[49.0] = "fcvtmuDwNs",
										shift = 16,
										[34.0] = "scvtfDsNw"
									},
									{
										[96.0] = "fcvtnsDxNd",
										[121.0] = "fcvtzuDxNd",
										[104.0] = "fcvtpsDxNd",
										[112.0] = "fcvtmsDxNd",
										[100.0] = "fcvtasDxNd",
										[97.0] = "fcvtnuDxNd",
										[56.0] = "fcvtzsDxNs",
										[33.0] = "fcvtnuDxNs",
										[105.0] = "fcvtpuDxNd",
										[102.0] = "fmovDxNd",
										[99.0] = "ucvtfDdNx",
										[113.0] = "fcvtmuDxNd",
										[120.0] = "fcvtzsDxNd",
										[103.0] = "fmovDdNx",
										[32.0] = "fcvtnsDxNs",
										[57.0] = "fcvtzuDxNs",
										[36.0] = "fcvtasDxNs",
										[40.0] = "fcvtpsDxNs",
										mask = 255,
										[48.0] = "fcvtmsDxNs",
										[101.0] = "fcvtauDxNd",
										[35.0] = "ucvtfDsNx",
										[37.0] = "fcvtauDxNs",
										[98.0] = "scvtfDdNx",
										[41.0] = "fcvtpuDxNs",
										[49.0] = "fcvtmuDxNs",
										shift = 16,
										[34.0] = "scvtfDsNx"
									},
									shift = 31,
									mask = 1
								},
								shift = 15,
								mask = 1
							},
							{
								[0] = {
									[0] = {
										[0] = "fmovDNf",
										"fabsDNf",
										"fnegDNf",
										"fsqrtDNf",
										false,
										"fcvtDdNs",
										false,
										false,
										"frintnDNf",
										"frintpDNf",
										"frintmDNf",
										"frintzDNf",
										"frintaDNf",
										false,
										"frintxDNf",
										"frintiDNf",
										shift = 15,
										mask = 63
									},
									{
										[0] = "fmovDNf",
										"fabsDNf",
										"fnegDNf",
										"fsqrtDNf",
										"fcvtDsNd",
										false,
										false,
										false,
										"frintnDNf",
										"frintpDNf",
										"frintmDNf",
										"frintzDNf",
										"frintaDNf",
										false,
										"frintxDNf",
										"frintiDNf",
										shift = 15,
										mask = 63
									},
									shift = 22,
									mask = 3
								},
								shift = 31,
								mask = 1
							},
							shift = 14,
							mask = 1
						},
						{
							[0] = {
								[0] = {
									[0] = {
										[0] = "fcmpNMf",
										[24.0] = "fcmpeNZf",
										[8.0] = "fcmpNZf",
										[16.0] = "fcmpeNMf",
										mask = 31,
										shift = 0
									},
									shift = 23,
									mask = 1
								},
								shift = 14,
								mask = 3
							},
							shift = 31,
							mask = 1
						},
						shift = 13,
						mask = 1
					},
					{
						[0] = {
							[0] = slot46,
							shift = 5,
							mask = 31
						},
						shift = 31,
						mask = 1
					},
					shift = 12,
					mask = 1
				},
				{
					[0] = {
						[0] = {
							[0] = "fccmpNMVCf",
							"fccmpeNMVCf",
							shift = 4,
							mask = 1
						},
						shift = 23,
						mask = 1
					},
					shift = 31,
					mask = 1
				},
				{
					[0] = {
						[0] = {
							[0] = "fmulDNMf",
							"fdivDNMf",
							"faddDNMf",
							"fsubDNMf",
							"fmaxDNMf",
							"fminDNMf",
							"fmaxnmDNMf",
							"fminnmDNMf",
							"fnmulDNMf",
							shift = 12,
							mask = 15
						},
						shift = 23,
						mask = 1
					},
					shift = 31,
					mask = 1
				},
				{
					[0] = {
						[0] = "fcselDNMCf",
						shift = 23,
						mask = 1
					},
					shift = 31,
					mask = 1
				},
				shift = 10,
				mask = 3
			},
			shift = 21,
			mask = 1
		},
		{
			[0] = {
				[0] = {
					[0] = "fmaddDNMAf",
					"fnmaddDNMAf",
					shift = 21,
					mask = 5
				},
				{
					[0] = "fmsubDNMAf",
					"fnmsubDNMAf",
					shift = 21,
					mask = 5
				},
				shift = 15,
				mask = 1
			},
			shift = 31,
			mask = 1
		},
		shift = 24,
		mask = 1
	},
	shift = 28,
	mask = 7
}
slot46 = {
	[0] = "fmovDFf",
	shift = 23,
	mask = 1
}
slot40 = {
	[0] = "bB",
	{
		[0] = "cbzDBg",
		"cbnzDBg",
		"tbzDTBw",
		"tbnzDTBw",
		shift = 24,
		mask = 3
	},
	{
		[0] = {
			[0] = {
				[0] = "beqB",
				"bneB",
				"bhsB",
				"bloB",
				"bmiB",
				"bplB",
				"bvsB",
				"bvcB",
				"bhiB",
				"blsB",
				"bgeB",
				"bltB",
				"bgtB",
				"bleB",
				"balB",
				shift = 0,
				mask = 15
			},
			shift = 4,
			mask = 1
		},
		shift = 24,
		mask = 3
	},
	false,
	"blB",
	{
		[0] = "cbzDBg",
		"cbnzDBg",
		"tbzDTBx",
		"tbnzDTBx",
		shift = 24,
		mask = 3
	},
	{
		[0] = {
			[2097152.0] = "brkW",
			shift = 0,
			mask = 14680095
		},
		{
			[204831.0] = "nop",
			shift = 0,
			mask = 4194303
		},
		{
			[6225920.0] = "retNx",
			[4128768.0] = "blrNx",
			mask = 16776223,
			[2031616.0] = "brNx",
			shift = 0
		},
		shift = 24,
		mask = 3
	},
	shift = 29,
	mask = 7
}
slot41 = {
	[0] = false,
	false,
	false,
	false,
	slot38,
	slot33,
	slot38,
	slot39,
	slot22,
	slot22,
	slot40,
	slot40,
	slot38,
	slot33,
	slot38,
	slot39,
	shift = 25,
	mask = 15
}
slot42 = {
	x = {},
	w = {},
	d = {},
	s = {}
}

for slot46 = 0, 30 do
	slot42.x[slot46] = "x" .. slot46
	slot42.w[slot46] = "w" .. slot46
	slot42.d[slot46] = "d" .. slot46
	slot42.s[slot46] = "s" .. slot46
end

slot42.x[31] = "sp"
slot42.w[31] = "wsp"
slot42.d[31] = "d31"
slot42.s[31] = "s31"
slot43 = {
	[0] = "eq",
	"ne",
	"cs",
	"cc",
	"mi",
	"pl",
	"vs",
	"vc",
	"hi",
	"ls",
	"ge",
	"lt",
	"gt",
	"le",
	"al"
}
slot44 = {
	[0] = "lsl",
	"lsr",
	"asr"
}
slot45 = {
	[0] = "uxtb",
	"uxth",
	"uxtw",
	"uxtx",
	"sxtb",
	"sxth",
	"sxtw",
	"sxtx"
}

function slot46(slot0, slot1, slot2)
	slot3 = slot0.pos
	slot4 = ""

	if slot0.rel and slot0.symtab[slot0.rel] then
		slot4 = "\t->" .. slot5
	end

	if slot0.hexdump > 0 then
		slot0.out(uv0("%08x  %s  %-5s %s%s\n", slot0.addr + slot3, uv1(slot0.op), slot1, uv2(slot2, ", "), slot4))
	else
		slot0.out(uv0("%08x  %-5s %s%s\n", slot0.addr + slot3, slot1, uv2(slot2, ", "), slot4))
	end

	slot0.pos = slot3 + 4
end

function slot47(slot0)
	return uv0(slot0, ".long", {
		"0x" .. uv1(slot0.op)
	})
end

function slot48(slot0, slot1, slot2)
	return uv0[uv1(slot1, slot0 .. "%w-([xwds])")][slot2]
end

function slot49(slot0)
	if slot0 < 0 then
		return uv0(slot0)
	else
		return uv1("%x", slot0)
	end
end

slot50 = {
	1431655765,
	286331153,
	16843009,
	65537,
	1
}

function slot51(slot0)
	slot1 = uv0(uv1(slot0, 10), 63)
	slot2 = uv0(uv1(slot0, 16), 63)

	if uv0(slot0, 4194304) == 0 then
		slot3 = 5

		if slot1 >= 56 then
			if slot1 >= 60 then
				slot3 = 1
			else
				slot3 = 2
			end
		elseif slot1 >= 48 then
			slot3 = 3
		elseif slot1 >= 32 then
			slot3 = 4
		end

		slot4 = uv2(1, slot3) - 1
		slot7 = uv3(uv1(-1, 31 - uv0(slot1, slot4)), uv0(slot2, slot4))

		if slot3 ~= 5 then
			slot7 = uv0(slot7, uv2(1, slot4) - 1) + uv1(slot7, 31 - slot4)
		end

		if uv1(slot0, 31) ~= 0 then
			return uv5(slot7 * uv4[slot3]) .. uv6(slot7)
		else
			return slot8
		end
	else
		slot3 = -1
		slot4 = 0

		if slot1 < 32 then
			slot3 = uv1(-1, 31 - slot1)
		else
			slot4 = uv1(-1, 63 - slot1)
		end

		if slot2 ~= 0 then
			slot4 = uv3(slot4, slot2)
			slot3 = uv3(slot3, slot2)
			slot5 = slot2 == 32 and 0 or uv0(uv7(slot3, slot4), uv2(-1, 32 - slot2))
			slot4 = uv7(slot4, slot5)

			if slot2 >= 32 then
				slot4 = uv7(slot3, slot5)
				slot3 = slot4
			end
		end

		if slot4 ~= 0 then
			return uv5(slot4) .. uv6(slot3)
		else
			return uv5(slot3)
		end
	end
end

function slot52(slot0, slot1)
	if slot1 == "b" or slot1 == "bl" then
		return uv0(uv1(slot0, 6), 4)
	elseif slot1 == "adr" or slot1 == "adrp" then
		return uv4(uv1(uv0(uv1(slot0, 8), 13), 2), uv2(uv3(slot0, 29), 3))
	elseif slot1 == "tbz" or slot1 == "tbnz" then
		return uv1(uv0(uv1(slot0, 13), 18), 2)
	else
		return uv1(uv0(uv1(slot0, 8), 13), 2)
	end
end

function slot53(slot0)
	return (uv0(slot0, 1048576) == 0 and 1 or -1) * (16 + uv0(uv2(slot0, 13), 15)) * 2^(uv1(uv2(uv3(uv4(slot0, 12), 5), 24), 128) - 131)
end

function slot54(slot0, slot1, slot2, slot3)
	if slot2 < slot3 or slot2 == 31 or slot2 == 63 then
		return false
	end

	if slot3 == 0 then
		if slot0 == 0 and (slot2 == 7 or slot2 == 15) then
			return false
		end

		if slot0 ~= 0 and slot1 == 0 and (slot2 == 7 or slot2 == 15 or slot2 == 31) then
			return false
		end
	end

	return true
end

function slot55(slot0)
	slot1 = slot0.pos
	slot2, slot3, slot4, slot5 = uv0(slot0.code, slot1 + 1, slot1 + 4)
	slot6 = uv1(uv2(slot5, 24), uv2(slot4, 16), uv2(slot3, 8), slot2)
	slot7 = {}
	slot8 = ""
	slot9, slot10, slot11, slot12 = nil
	slot0.op = slot6
	slot0.rel = nil
	slot9 = nil
	slot13 = nil
	slot13 = uv3[uv4(uv5(slot6, 25), 15)]

	while uv6(slot13) ~= "string" do
		if not slot13 then
			return uv7(slot0)
		end

		slot13 = slot13[uv4(uv5(slot6, slot13.shift), slot13.mask)] or slot13._
	end

	slot10, slot15 = uv8(slot13, "^([a-z0-9]*)(.*)")
	slot14, slot11 = uv8(slot15, "|([a-z0-9_.|]*)(.*)")

	if slot14 then
		-- Nothing
	end

	if uv9(slot11, 1, 1) == "." then
		slot16, slot11 = uv8(slot11, "^([a-z0-9.]*)(.*)")
		slot8 = slot8 .. slot16
	end

	if uv8(slot11, "[gf]") then
		slot12 = slot16 == "g" and (uv4(slot6, 2147483648.0) ~= 0 and uv10.x or uv10.w) or uv4(slot6, 4194304) ~= 0 and uv10.d or uv10.s
	end

	slot17, slot18 = nil

	for slot22 in uv11(slot11, ".") do
		slot23 = nil

		if slot22 == "D" then
			slot24 = uv4(slot6, 31)
			slot23 = slot16 and slot12[slot24] or uv12(slot22, slot11, slot24)
		elseif slot22 == "N" then
			slot24 = uv4(uv5(slot6, 5), 31)
			slot23 = slot16 and slot12[slot24] or uv12(slot22, slot11, slot24)
		elseif slot22 == "M" then
			slot24 = uv4(uv5(slot6, 16), 31)
			slot23 = slot16 and slot12[slot24] or uv12(slot22, slot11, slot24)
		elseif slot22 == "A" then
			slot24 = uv4(uv5(slot6, 10), 31)
			slot23 = slot16 and slot12[slot24] or uv12(slot22, slot11, slot24)
		elseif slot22 == "B" then
			slot24 = slot0.addr + slot1 + uv13(slot6, slot10)
			slot0.rel = slot24
			slot23 = "0x" .. uv14(slot24)
		elseif slot22 == "T" then
			slot23 = uv1(uv4(uv5(slot6, 26), 32), uv4(uv5(slot6, 19), 31))
		elseif slot22 == "V" then
			slot23 = uv4(slot6, 15)
		elseif slot22 == "C" then
			slot23 = uv15[uv4(uv5(slot6, 12), 15)]
		elseif slot22 == "c" then
			slot24 = uv4(uv5(slot6, 5), 31)
			slot26 = uv4(uv5(slot6, 12), 15)
			slot23 = uv15[slot26]

			if slot14 and slot26 ~= 14 and slot26 ~= 15 then
				slot28, slot29 = uv8(slot14, "([^|]*)|(.*)")

				if slot24 == uv4(uv5(slot6, 16), 31) then
					slot7[#slot7] = nil
					slot23 = uv15[uv16(slot26, 1)]

					if slot24 ~= 31 then
						if slot28 then
							slot10 = slot28
						else
							slot10 = slot14
						end
					else
						slot7[slot30 - 1] = nil
						slot10 = slot29
					end
				end
			end
		elseif slot22 == "W" then
			slot23 = uv4(uv5(slot6, 5), 65535)
		elseif slot22 == "Y" then
			if slot14 and (uv4(uv5(slot6, 21), 3) == 0 or uv4(uv5(slot6, 5), 65535) ~= 0) then
				slot10 = slot14
			end
		elseif slot22 == "L" then
			if uv4(slot6, 2048) ~= 0 then
				slot23 = "[" .. uv10.x[uv4(uv5(slot6, 5), 31)] .. ", #" .. uv17(uv2(slot6, 11), 23) .. "]!"
			else
				slot23 = "[" .. slot24 .. "], #" .. slot25
			end
		elseif slot22 == "U" then
			if uv2(uv17(uv2(slot6, 10), 20), uv4(uv5(slot6, 30), 3)) ~= 0 then
				slot23 = "[" .. uv10.x[uv4(uv5(slot6, 5), 31)] .. ", #" .. slot26 .. "]"
			else
				slot23 = "[" .. slot24 .. "]"
			end
		elseif slot22 == "K" then
			if uv17(uv2(slot6, 11), 23) ~= 0 then
				slot23 = "[" .. uv10.x[uv4(uv5(slot6, 5), 31)] .. ", #" .. slot25 .. "]"
			else
				slot23 = "[" .. slot24 .. "]"
			end
		elseif slot22 == "O" then
			slot25 = nil
			slot29 = uv4(uv5(slot6, 30), 3)

			if uv4(uv5(slot6, 13), 7) == 3 then
				if uv4(uv5(slot6, 12), 1) == 0 then
					slot23 = "[" .. uv10.x[uv4(uv5(slot6, 5), 31)] .. ", " .. ((uv4(uv5(slot6, 13), 1) ~= 0 or uv10.w[uv4(uv5(slot6, 16), 31)]) and uv10.x[uv4(uv5(slot6, 16), 31)]) .. "]"
				else
					slot23 = slot23 .. ", lsl #" .. slot29 .. "]"
				end
			elseif slot27 == 2 or slot27 == 6 or slot27 == 7 then
				if slot28 == 0 then
					slot23 = slot23 .. ", " .. uv18[slot27] .. "]"
				else
					slot23 = slot23 .. ", " .. uv18[slot27] .. " #" .. slot29 .. "]"
				end
			else
				slot23 = slot23 .. "]"
			end
		elseif slot22 == "P" then
			slot25 = 2

			if uv5(slot6, 26) >= 42 then
				slot25 = 4
			elseif slot24 >= 27 then
				slot25 = 3
			end

			if uv4(uv5(slot6, 23), 3) == 1 then
				slot23 = "[" .. uv10.x[uv4(uv5(slot6, 5), 31)] .. "], #" .. uv2(uv17(uv2(slot6, 10), 25), slot25)
			elseif slot28 == 2 then
				if slot26 == 0 then
					slot23 = "[" .. slot27 .. "]"
				else
					slot23 = "[" .. slot27 .. ", #" .. slot26 .. "]"
				end
			elseif slot28 == 3 then
				slot23 = "[" .. slot27 .. ", #" .. slot26 .. "]!"
			end
		elseif slot22 == "I" then
			if slot14 == "mov" and uv4(uv5(slot6, 22), 3) == 0 and uv4(uv5(slot6, 10), 4095) == 0 and (uv4(uv5(slot6, 5), 31) == 31 or uv4(slot6, 31) == 31) then
				slot10 = slot14
				slot23 = nil
			elseif slot24 == 0 then
				slot23 = slot25
			elseif slot24 == 1 then
				slot23 = slot25 .. ", lsl #12"
			end
		elseif slot22 == "i" then
			slot23 = "#0x" .. uv19(slot6)
		elseif slot22 == "1" then
			slot23 = uv4(uv5(slot6, 16), 63)
		elseif slot22 == "2" then
			slot23 = uv4(uv5(slot6, 10), 63)

			if slot14 then
				slot24, slot10, slot26, slot27, slot28, slot29 = uv8(slot14, "([^|]*)|([^|]*)|([^|]*)|([^|]*)|([^|]*)|(.*)")

				if uv20(uv4(uv5(slot6, 26), 32), uv4(uv5(slot6, 30), 1), slot23, slot18) then
					slot23 = slot23 - slot18 + 1
				elseif slot18 == 0 and slot23 == 7 then
					slot7[#slot7] = nil

					if slot30 ~= 0 then
						slot7[slot32 - 1] = uv21(slot7[slot32 - 1], "x", "w")
					end

					slot9 = slot7[slot32 - 1]
					slot10 = slot29
					slot23 = nil
				elseif slot18 == 0 and slot23 == 15 then
					slot7[#slot7] = nil

					if slot30 ~= 0 then
						slot7[slot32 - 1] = uv21(slot7[slot32 - 1], "x", "w")
					end

					slot9 = slot7[slot32 - 1]
					slot10 = slot28
					slot23 = nil
				elseif slot23 == 31 or slot23 == 63 then
					if slot23 == 31 and slot18 == 0 and slot10 == "sbfm" then
						slot10 = slot27
						slot7[#slot7] = nil

						if slot30 ~= 0 then
							slot7[slot32 - 1] = uv21(slot7[slot32 - 1], "x", "w")
						end

						slot9 = slot7[slot32 - 1]
					else
						slot10 = slot26
					end

					slot23 = nil
				elseif uv4(slot23, 31) ~= 31 and slot18 == slot23 + 1 and slot10 == "ubfm" then
					slot10 = slot27
					slot7[#slot7] = "#" .. slot30 + 32 - slot18
					slot23 = nil
				elseif slot23 < slot18 then
					slot10 = slot24
					slot7[#slot7] = "#" .. slot30 + 32 - slot18
					slot23 = slot23 + 1
				end
			end
		elseif slot22 == "3" then
			slot23 = uv4(uv5(slot6, 10), 63)

			if slot14 then
				slot10, slot25 = uv8(slot14, "([^|]*)|(.*)")

				if slot23 < slot18 then
					slot7[#slot7] = "#" .. uv4(uv5(slot6, 26), 32) + 32 - slot18
					slot23 = slot23 + 1
				elseif slot18 <= slot23 then
					slot10 = slot25
					slot23 = slot23 - slot18 + 1
				end
			end
		elseif slot22 == "4" then
			slot23 = uv4(uv5(slot6, 10), 63)

			if slot14 and uv4(uv5(slot6, 5), 31) == uv4(uv5(slot6, 16), 31) then
				slot26 = #slot7
				slot7[slot26] = nil
				slot9 = slot7[slot26 - 1]
				slot10 = slot14
			end
		elseif slot22 == "5" then
			slot23 = uv4(uv5(slot6, 16), 31)
		elseif slot22 == "S" then
			if uv4(uv5(slot6, 10), 63) == 0 then
				slot23 = nil
			else
				slot23 = uv22[uv4(uv5(slot6, 22), 3)] .. " #" .. slot23
			end
		elseif slot22 == "X" then
			if uv4(uv5(slot6, 13), 7) ~= 3 and slot24 ~= 7 then
				slot7[#slot7] = uv10.w[uv4(uv5(slot6, 16), 31)]
			end

			if slot24 == 2 + uv4(uv5(slot6, 31), 1) and uv4(uv5(slot6, slot17 and 5 or 0), 31) == 31 then
				if uv4(uv5(slot6, 10), 7) == 0 then
					slot23 = nil
				else
					slot23 = "lsl #" .. slot23
				end
			elseif slot23 == 0 then
				slot23 = uv18[uv4(uv5(slot6, 13), 7)]
			else
				slot23 = uv18[uv4(uv5(slot6, 13), 7)] .. " #" .. slot23
			end
		elseif slot22 == "R" then
			if uv4(uv5(slot6, 21), 3) == 0 then
				slot23 = nil
			else
				slot23 = "lsl #" .. slot23 * 16
			end
		elseif slot22 == "z" then
			if slot7[#slot7] == "sp" then
				slot7[slot24] = "xzr"
			elseif slot7[slot24] == "wsp" then
				slot7[slot24] = "wzr"
			end
		elseif slot22 == "Z" then
			slot23 = 0
		elseif slot22 == "F" then
			slot23 = uv23(slot6)
		elseif slot22 ~= "g" and slot22 ~= "f" and slot22 ~= "x" and slot22 ~= "w" and slot22 ~= "d" then
			if slot22 == "s" then
				-- Nothing
			elseif slot22 == "0" then
				if slot9 == "sp" or slot9 == "wsp" then
					slot24 = #slot7
					slot7[slot24] = nil
					slot9 = slot7[slot24 - 1]

					if slot14 then
						slot25, slot26 = uv8(slot14, "([^|]*)|(.*)")

						if not slot25 then
							slot10 = slot14
						elseif slot17 then
							slot14 = slot25
							slot10 = slot26
						else
							slot14 = slot26
							slot10 = slot25
						end
					end
				end

				slot17 = true
			end
		end

		if slot23 then
			slot9 = slot23

			if uv6(slot23) == "number" then
				slot23 = "#" .. slot23
			end

			slot7[#slot7 + 1] = slot23
		end
	end

	return uv24(slot0, slot10 .. slot8, slot7)
end

function slot56(slot0, slot1, slot2)
	slot1 = slot1 or 0
	slot0.pos = slot1
	slot0.rel = nil

	while slot0.pos < (slot2 and slot1 + slot2 or #slot0.code) do
		uv0(slot0)
	end
end

return {
	create = function (slot0, slot1, slot2)
		return {
			code = slot0,
			addr = slot1 or 0,
			out = slot2 or io.write,
			symtab = {},
			disass = uv0,
			hexdump = 8
		}
	end,
	disass = function (slot0, slot1, slot2)
		uv0(slot0, slot1, slot2):disass()
	end,
	regname = function (slot0)
		if slot0 < 32 then
			return uv0.x[slot0]
		end

		return uv0.d[slot0 - 32]
	end
}
