public final static ArtHeader newArtHeader(BinaryReader reader)
			throws IOException, UnsupportedArtVersionException {
		String magic = new String(reader.readByteArray(0, ArtConstants.MAGIC.length()));
		String version = reader.readAsciiString(4, 4);
		if (magic.equals(ArtConstants.MAGIC)) {
			if (ArtConstants.isSupportedVersion(version)) {
				switch (version) {
					case ArtConstants.ART_VERSION_005:
						return new ArtHeader_005(reader);
					case ArtConstants.ART_VERSION_009:
						return new ArtHeader_009(reader);
					case ArtConstants.ART_VERSION_012:
						return new ArtHeader_012(reader);
					case ArtConstants.ART_VERSION_017:
						return new ArtHeader_017(reader);
					case ArtConstants.ART_VERSION_029:
						return new ArtHeader_029(reader);
					case ArtConstants.ART_VERSION_030:
						return new ArtHeader_030(reader);
					case ArtConstants.ART_VERSION_043:
						return new ArtHeader_043(reader);
					case ArtConstants.ART_VERSION_044:
						return new ArtHeader_044(reader);
					case ArtConstants.ART_VERSION_046:
						return new ArtHeader_046(reader);
					case ArtConstants.ART_VERSION_056:
						return new ArtHeader_056(reader);
					case ArtConstants.ART_VERSION_074:
						return new ArtHeader_074(reader);
					case ArtConstants.ART_VERSION_085:
						return new ArtHeader_085(reader);
					case ArtConstants.ART_VERSION_099:
						return new ArtHeader_099(reader);
					case ArtConstants.ART_VERSION_106:
						return new ArtHeader_106(reader);
				}
			}
		}
		throw new UnsupportedArtVersionException(magic, version);
	}
Returns an ArtHeader of the correct version.
@param reader the BinaryReader to the ART header
@return the specific version of the ART header
@throws IOException should an error occur during reading or parsing
@throws UnsupportedArtVersionException when the provided version is invalid or not yet implemented.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtHeaderFactory.java