JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbro h@sBdZddlZdgZedZddZddZedkredSdS) z% Generic framework path manipulation Nframework_infoz(?x) (?P^.*)(?:^|/) (?P (?P\w+).framework/ (?:Versions/(?P[^/]+)/)? (?P=shortname) (?:_(?P[^_]+))? )$ cCst|}|s dS|S)a} A framework name can take one of the following four forms: Location/Name.framework/Versions/SomeVersion/Name_Suffix Location/Name.framework/Versions/SomeVersion/Name Location/Name.framework/Name_Suffix Location/Name.framework/Name returns None if not found, or a mapping equivalent to: dict( location='Location', name='Name.framework/Versions/SomeVersion/Name_Suffix', shortname='Name', version='SomeVersion', suffix='Suffix', ) Note that SomeVersion and Suffix are optional and may be None if not present N)STRICT_FRAMEWORK_REmatch groupdict)filenameZ is_frameworkr@/opt/alt/python310/lib64/python3.10/ctypes/macholib/framework.pyrs cCsddd}tddus JtddusJtddusJtddus%Jtd|dd d ks1Jtd |dd d d dks?JtddusGJtddusOJtd|ddd dks\Jtd|ddd dd ksjJdS)NcSst|||||dS)NlocationnameZ shortnameversionsuffix)dictr rrrd-sztest_framework_info..dzcompletely/invalidzcompletely/invalid/_debugz P/F.frameworkzP/F.framework/_debugzP/F.framework/FPz F.framework/FFzP/F.framework/F_debugzF.framework/F_debugdebug)r zP/F.framework/VersionszP/F.framework/Versions/AzP/F.framework/Versions/A/FzF.framework/Versions/A/FAz P/F.framework/Versions/A/F_debugzF.framework/Versions/A/F_debug)NNNNN)r)rrrrtest_framework_info,s  r__main__)__doc__re__all__compilerrr__name__rrrrs