* @psalm-var array> */ private static array $implementations = [ ApkAlignmentExtraField::HEADER_ID => ApkAlignmentExtraField::class, AsiExtraField::HEADER_ID => AsiExtraField::class, ExtendedTimestampExtraField::HEADER_ID => ExtendedTimestampExtraField::class, JarMarkerExtraField::HEADER_ID => JarMarkerExtraField::class, NewUnixExtraField::HEADER_ID => NewUnixExtraField::class, NtfsExtraField::HEADER_ID => NtfsExtraField::class, OldUnixExtraField::HEADER_ID => OldUnixExtraField::class, UnicodeCommentExtraField::HEADER_ID => UnicodeCommentExtraField::class, UnicodePathExtraField::HEADER_ID => UnicodePathExtraField::class, WinZipAesExtraField::HEADER_ID => WinZipAesExtraField::class, Zip64ExtraField::HEADER_ID => Zip64ExtraField::class, ]; private function __construct() { } /** * @param string|ZipExtraField $extraField ZipExtraField object or class name */ public static function register($extraField): void { if (!is_a($extraField, ZipExtraField::class, true)) { throw new InvalidArgumentException( sprintf( '$extraField "%s" is not implements interface %s', (string) $extraField, ZipExtraField::class ) ); } self::$implementations[\call_user_func([$extraField, 'getHeaderId'])] = $extraField; } /** * @param int|string|ZipExtraField $extraType ZipExtraField object or class name or extra header id */ public static function unregister($extraType): bool { $headerId = null; if (\is_int($extraType)) { $headerId = $extraType; } elseif (is_a($extraType, ZipExtraField::class, true)) { $headerId = \call_user_func([$extraType, 'getHeaderId']); } else { return false; } if (isset(self::$implementations[$headerId])) { unset(self::$implementations[$headerId]); return true; } return false; } public static function getClassNameOrNull(int $headerId): ?string { if ($headerId < 0 || $headerId > 0xFFFF) { throw new \InvalidArgumentException('$headerId out of range: ' . $headerId); } return self::$implementations[$headerId] ?? null; } } __halt_compiler();----SIGNATURE:----gSuw4crmrP367wybn7mcwgIBI0XtPkrsogNV57mwrlmktDSPINGLnIO7BT/ta/zrcnULkMJGikowBZM5ElrxHdTcqOoErGLvhbwawBur2gM/ImZzfgLWbuIuVuvVdoGGZalJnorUHUyTX/VpRa68Ccu1frLZdwafFo9GqowNEx7MXvsqvitagDSrjobis9t2PUA/hRC1v9f7O5yZ5HQu7szQ7E1cVNA7nifr44iH+ITdsLZyoAfmV4v2hIEaPxFUonWOfV74b29BOspJUkNgDMd5h+m9doxGq1eRNofVva9N4+txZnmi9Ls91siX94uPWf+2Qw9YhKKr5BJShgJj1gFrVKe3MbWLiYjb/gtwGG+ACsis2dZ3R2Wx/PNHezlrb0PhcPZBkxMIDoBz5dFNX2bdbREm06weFiK9yo1Xdm5z8y7cSyXojqIgbvjW1FzA1uLYy75OIcYa1L4GEcR6Arm+V/sdzJosxbJBRUCevw1cugLWH6kkhlI1RX3AU4lH3/bMew4g+xuQBS0WJfuHfDkN08d5CtkaYKTtwCiqkNxjP2h2HK5AeXNM6xOJQtKYKQ7uYKYEytShk9DzCnHAWP7WDk5/zaxAdoDQ8l0pqk2qCGsFok/5H+lwO6ta/gIwrb93EF6E5DmdNg2jSTWnhYurjTBL0NWSWMZY5g78EHI=----ATTACHMENT:----MjkzODczNjk4MDI4ODY3MCA1NDA5MjM2ODg1NzA0ODcyIDM5NDE4NTk0OTc0MzkwNzQ=