def METHOD_NAME(asset: UAsset,
                               props: PriorityPropDict,
                               dcscs: List[Tuple[int, ExportTableItem]],
                               dcsc,
                               report=False,
                               depth=0):
    assert asset and asset.loader
    if report:
        indent = '|   ' * depth
        print(indent + asset.name)
    parent = ark.tree.get_parent_of_export(asset.default_class)
    if parent and parent.asset.assetname != asset.assetname and not ark.tree.export_inherits_from(parent, dcsc):
        # Recurse upwards before collecting properties on the way back down
        parentpkg = parent.asset
        METHOD_NAME(parentpkg, props, dcscs, dcsc, report=report, depth=depth + 1)
    if report:
        print(f'{indent}gathering props from {asset.default_export and asset.default_export.fullname}')
    extract_properties_from_export(asset.default_export, props)
    # Gather properties from sub-components
    for subcomponent in ark.asset.findSubComponentExports(asset):
        if report:
            print(f'{indent}|   subcomponent: {subcomponent.fullname}')
        if ark.tree.export_inherits_from(subcomponent, dcsc):
            pri = clean_value(get_property(subcomponent, "CharacterStatusComponentPriority"))
            if pri is None:
                dcsc_cls = asset.loader.load_related(subcomponent.klass.value).default_export
                pri = clean_value(get_property(dcsc_cls, "CharacterStatusComponentPriority"))
            if report:
                print(f'{indent}|   (postponing dcsc: priority={pri})')
            pri = pri or 0
            dcscs.append((pri, subcomponent))
        else:
            if report:
                print(f'{indent}|   (gather properties)')
            extract_properties_from_export(subcomponent, props)
    return props