PNG  IHDRxsBIT|d pHYs+tEXtSoftwarewww.inkscape.org<,tEXtComment File Manager

File Manager

Path: /opt/alt/python311/lib/python3.11/site-packages/pyroute2/netlink/devlink/

Viewing File: __init__.py

'''
devlink module
==============
'''

from pyroute2.common import map_namespace
from pyroute2.netlink import genlmsg, nla
from pyroute2.netlink.generic import (
    AsyncGenericNetlinkSocket,
    GenericNetlinkSocket,
)
from pyroute2.netlink.nlsocket import Marshal

# devlink commands
DEVLINK_CMD_UNSPEC = 0
DEVLINK_CMD_GET = 1
DEVLINK_CMD_SET = 2
DEVLINK_CMD_NEW = 3
DEVLINK_CMD_DEL = 4
DEVLINK_CMD_PORT_GET = 5
DEVLINK_CMD_PORT_SET = 6
DEVLINK_CMD_PORT_NEW = 7
DEVLINK_CMD_PORT_DEL = 8
DEVLINK_CMD_PORT_SPLIT = 9
DEVLINK_CMD_PORT_UNSPLIT = 10
DEVLINK_CMD_SB_GET = 11
DEVLINK_CMD_SB_SET = 12
DEVLINK_CMD_SB_NEW = 13
DEVLINK_CMD_SB_DEL = 14
DEVLINK_CMD_SB_POOL_GET = 15
DEVLINK_CMD_SB_POOL_SET = 16
DEVLINK_CMD_SB_POOL_NEW = 17
DEVLINK_CMD_SB_POOL_DEL = 18
DEVLINK_CMD_SB_PORT_POOL_GET = 19
DEVLINK_CMD_SB_PORT_POOL_SET = 20
DEVLINK_CMD_SB_PORT_POOL_NEW = 21
DEVLINK_CMD_SB_PORT_POOL_DEL = 22
DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23
DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24
DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25
DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26
DEVLINK_CMD_SB_OCC_SNAPSHOT = 27
DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28
DEVLINK_CMD_ESWITCH_GET = 29
DEVLINK_CMD_ESWITCH_SET = 30
DEVLINK_CMD_DPIPE_TABLE_GET = 31
DEVLINK_CMD_DPIPE_ENTRIES_GET = 32
DEVLINK_CMD_DPIPE_HEADERS_GET = 33
DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34
DEVLINK_CMD_RESOURCE_SET = 35
DEVLINK_CMD_RESOURCE_DUMP = 36
DEVLINK_CMD_RELOAD = 37
DEVLINK_CMD_PARAM_GET = 38
DEVLINK_CMD_PARAM_SET = 39
DEVLINK_CMD_PARAM_NEW = 40
DEVLINK_CMD_PARAM_DEL = 41
DEVLINK_CMD_REGION_GET = 42
DEVLINK_CMD_REGION_SET = 43
DEVLINK_CMD_REGION_NEW = 44
DEVLINK_CMD_REGION_DEL = 45
DEVLINK_CMD_REGION_READ = 46
DEVLINK_CMD_PORT_PARAM_GET = 47
DEVLINK_CMD_PORT_PARAM_SET = 48
DEVLINK_CMD_PORT_PARAM_NEW = 49
DEVLINK_CMD_PORT_PARAM_DEL = 50
DEVLINK_CMD_INFO_GET = 51
DEVLINK_CMD_HEALTH_REPORTER_GET = 52
DEVLINK_CMD_HEALTH_REPORTER_SET = 53
DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54
DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55
DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56
DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57
DEVLINK_CMD_FLASH_UPDATE = 58
DEVLINK_CMD_FLASH_UPDATE_END = 59
DEVLINK_CMD_FLASH_UPDATE_STATUS = 60
DEVLINK_CMD_TRAP_GET = 61
DEVLINK_CMD_TRAP_SET = 62
DEVLINK_CMD_TRAP_NEW = 63
DEVLINK_CMD_TRAP_DEL = 64
DEVLINK_CMD_TRAP_GROUP_GET = 65
DEVLINK_CMD_TRAP_GROUP_SET = 66
DEVLINK_CMD_TRAP_GROUP_NEW = 67
DEVLINK_CMD_TRAP_GROUP_DEL = 68
DEVLINK_CMD_TRAP_POLICER_GET = 69
DEVLINK_CMD_TRAP_POLICER_SET = 70
DEVLINK_CMD_TRAP_POLICER_NEW = 71
DEVLINK_CMD_TRAP_POLICER_DEL = 72
DEVLINK_CMD_MAX = DEVLINK_CMD_TRAP_POLICER_DEL

(DEVLINK_NAMES, DEVLINK_VALUES) = map_namespace('DEVLINK_CMD_', globals())

# port type
DEVLINK_PORT_TYPE_NOTSET = 0
DEVLINK_PORT_TYPE_AUTO = 1
DEVLINK_PORT_TYPE_ETH = 2
DEVLINK_PORT_TYPE_IB = 3

# threshold type
DEVLINK_SB_POOL_TYPE_INGRESS = 0
DEVLINK_SB_POOL_TYPE_EGRESS = 1

DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 20


class devlinkcmd(genlmsg):
    prefix = 'DEVLINK_ATTR_'
    nla_map = (
        ('DEVLINK_ATTR_UNSPEC', 'none'),
        ('DEVLINK_ATTR_BUS_NAME', 'asciiz'),
        ('DEVLINK_ATTR_DEV_NAME', 'asciiz'),
        ('DEVLINK_ATTR_PORT_INDEX', 'uint32'),
        ('DEVLINK_ATTR_PORT_TYPE', 'uint16'),
        ('DEVLINK_ATTR_PORT_DESIRED_TYPE', 'uint16'),
        ('DEVLINK_ATTR_PORT_NETDEV_IFINDEX', 'uint32'),
        ('DEVLINK_ATTR_PORT_NETDEV_NAME', 'asciiz'),
        ('DEVLINK_ATTR_PORT_IBDEV_NAME', 'asciiz'),
        ('DEVLINK_ATTR_PORT_SPLIT_COUNT', 'uint32'),
        ('DEVLINK_ATTR_PORT_SPLIT_GROUP', 'uint32'),
        ('DEVLINK_ATTR_SB_INDEX', 'uint32'),
        ('DEVLINK_ATTR_SB_SIZE', 'uint32'),
        ('DEVLINK_ATTR_SB_INGRESS_POOL_COUNT', 'uint16'),
        ('DEVLINK_ATTR_SB_EGRESS_POOL_COUNT', 'uint16'),
        ('DEVLINK_ATTR_SB_INGRESS_TC_COUNT', 'uint16'),
        ('DEVLINK_ATTR_SB_EGRESS_TC_COUNT', 'uint16'),
        ('DEVLINK_ATTR_SB_POOL_INDEX', 'uint16'),
        ('DEVLINK_ATTR_SB_POOL_TYPE', 'uint8'),
        ('DEVLINK_ATTR_SB_POOL_SIZE', 'uint32'),
        ('DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE', 'uint8'),
        ('DEVLINK_ATTR_SB_THRESHOLD', 'uint32'),
        ('DEVLINK_ATTR_SB_TC_INDEX', 'uint16'),
        ('DEVLINK_ATTR_SB_OCC_CUR', 'uint32'),
        ('DEVLINK_ATTR_SB_OCC_MAX', 'uint32'),
        ('DEVLINK_ATTR_ESWITCH_MODE', 'uint16'),
        ('DEVLINK_ATTR_ESWITCH_INLINE_MODE', 'uint8'),
        ('DEVLINK_ATTR_DPIPE_TABLES', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_TABLE', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_TABLE_NAME', 'asciiz'),
        ('DEVLINK_ATTR_DPIPE_TABLE_SIZE', 'uint64'),
        ('DEVLINK_ATTR_DPIPE_TABLE_MATCHES', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_TABLE_ACTIONS', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED', 'uint8'),
        ('DEVLINK_ATTR_DPIPE_ENTRIES', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_ENTRY', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_ENTRY_INDEX', 'uint64'),
        ('DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_ENTRY_COUNTER', 'uint64'),
        ('DEVLINK_ATTR_DPIPE_MATCH', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_MATCH_VALUE', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_MATCH_TYPE', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_ACTION', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_ACTION_VALUE', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_ACTION_TYPE', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_VALUE', 'none'),
        ('DEVLINK_ATTR_DPIPE_VALUE_MASK', 'none'),
        ('DEVLINK_ATTR_DPIPE_VALUE_MAPPING', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_HEADERS', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_HEADER', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_HEADER_NAME', 'asciiz'),
        ('DEVLINK_ATTR_DPIPE_HEADER_ID', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_HEADER_FIELDS', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_HEADER_GLOBAL', 'uint8'),
        ('DEVLINK_ATTR_DPIPE_HEADER_INDEX', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_FIELD', 'devlink'),
        ('DEVLINK_ATTR_DPIPE_FIELD_NAME', 'asciiz'),
        ('DEVLINK_ATTR_DPIPE_FIELD_ID', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH', 'uint32'),
        ('DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE', 'uint32'),
        ('DEVLINK_ATTR_PAD', 'none'),
        ('DEVLINK_ATTR_ESWITCH_ENCAP_MODE', 'uint8'),
        ('DEVLINK_ATTR_RESOURCE_LIST', 'devlink'),
        ('DEVLINK_ATTR_RESOURCE', 'devlink'),
        ('DEVLINK_ATTR_RESOURCE_NAME', 'asciiz'),
        ('DEVLINK_ATTR_RESOURCE_ID', 'uint64'),
        ('DEVLINK_ATTR_RESOURCE_SIZE', 'uint64'),
        ('DEVLINK_ATTR_RESOURCE_SIZE_NEW', 'uint64'),
        ('DEVLINK_ATTR_RESOURCE_SIZE_VALID', 'uint8'),
        ('DEVLINK_ATTR_RESOURCE_SIZE_MIN', 'uint64'),
        ('DEVLINK_ATTR_RESOURCE_SIZE_MAX', 'uint64'),
        ('DEVLINK_ATTR_RESOURCE_SIZE_GRAN', 'uint64'),
        ('DEVLINK_ATTR_RESOURCE_UNIT', 'uint8'),
        ('DEVLINK_ATTR_RESOURCE_OCC', 'uint64'),
        ('DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID', 'uint64'),
        ('DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS', 'uint64'),
        ('DEVLINK_ATTR_PORT_FLAVOUR', 'uint16'),
        ('DEVLINK_ATTR_PORT_NUMBER', 'uint32'),
        ('DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER', 'uint32'),
        ('DEVLINK_ATTR_PARAM', 'devlink'),
        ('DEVLINK_ATTR_PARAM_NAME', 'asciiz'),
        ('DEVLINK_ATTR_PARAM_GENERIC', 'flag'),
        ('DEVLINK_ATTR_PARAM_TYPE', 'uint8'),
        ('DEVLINK_ATTR_PARAM_VALUES_LIST', 'devlink'),
        ('DEVLINK_ATTR_PARAM_VALUE', 'devlink'),
        ('DEVLINK_ATTR_PARAM_VALUE_DATA', 'none'),
        ('DEVLINK_ATTR_PARAM_VALUE_CMODE', 'uint8'),
        ('DEVLINK_ATTR_REGION_NAME', 'asciiz'),
        ('DEVLINK_ATTR_REGION_SIZE', 'uint64'),
        ('DEVLINK_ATTR_REGION_SNAPSHOTS', 'devlink'),
        ('DEVLINK_ATTR_REGION_SNAPSHOT', 'devlink'),
        ('DEVLINK_ATTR_REGION_SNAPSHOT_ID', 'uint32'),
        ('DEVLINK_ATTR_REGION_CHUNKS', 'devlink'),
        ('DEVLINK_ATTR_REGION_CHUNK', 'devlink'),
        ('DEVLINK_ATTR_REGION_CHUNK_DATA', 'binary'),
        ('DEVLINK_ATTR_REGION_CHUNK_ADDR', 'uint64'),
        ('DEVLINK_ATTR_REGION_CHUNK_LEN', 'uint64'),
        ('DEVLINK_ATTR_INFO_DRIVER_NAME', 'asciiz'),
        ('DEVLINK_ATTR_INFO_SERIAL_NUMBER', 'asciiz'),
        ('DEVLINK_ATTR_INFO_VERSION_FIXED', 'devlink'),
        ('DEVLINK_ATTR_INFO_VERSION_RUNNING', 'devlink'),
        ('DEVLINK_ATTR_INFO_VERSION_STORED', 'devlink'),
        ('DEVLINK_ATTR_INFO_VERSION_NAME', 'asciiz'),
        ('DEVLINK_ATTR_INFO_VERSION_VALUE', 'asciiz'),
        ('DEVLINK_ATTR_SB_POOL_CELL_SIZE', 'uint32'),
        ('DEVLINK_ATTR_FMSG', 'devlink'),
        ('DEVLINK_ATTR_FMSG_OBJ_NEST_START', 'flag'),
        ('DEVLINK_ATTR_FMSG_PAIR_NEST_START', 'flag'),
        ('DEVLINK_ATTR_FMSG_ARR_NEST_START', 'flag'),
        ('DEVLINK_ATTR_FMSG_NEST_END', 'flag'),
        ('DEVLINK_ATTR_FMSG_OBJ_NAME', 'asciiz'),
        ('DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE', 'uint8'),
        ('DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA', 'none'),
        ('DEVLINK_ATTR_HEALTH_REPORTER', 'devlink'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_NAME', 'asciiz'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_STATE', 'uint8'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT', 'uint64'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT', 'uint64'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS', 'uint64'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD', 'uint64'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER', 'uint8'),
        ('DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME', 'asciiz'),
        ('DEVLINK_ATTR_FLASH_UPDATE_COMPONENT', 'asciiz'),
        ('DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG', 'asciiz'),
        ('DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE', 'uint64'),
        ('DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL', 'uint64'),
        ('DEVLINK_ATTR_PORT_PCI_PF_NUMBER', 'uint16'),
        ('DEVLINK_ATTR_PORT_PCI_VF_NUMBER', 'uint16'),
        ('DEVLINK_ATTR_STATS', 'devlink'),
        ('DEVLINK_ATTR_TRAP_NAME', 'asciiz'),
        ('DEVLINK_ATTR_TRAP_ACTION', 'uint8'),
        ('DEVLINK_ATTR_TRAP_TYPE', 'uint8'),
        ('DEVLINK_ATTR_TRAP_GENERIC', 'flag'),
        ('DEVLINK_ATTR_TRAP_METADATA', 'devlink'),
        ('DEVLINK_ATTR_TRAP_GROUP_NAME', 'asciiz'),
        ('DEVLINK_ATTR_RELOAD_FAILED', 'uint8'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS', 'uint64'),
        ('DEVLINK_ATTR_NETNS_FD', 'uint32'),
        ('DEVLINK_ATTR_NETNS_PID', 'uint32'),
        ('DEVLINK_ATTR_NETNS_ID', 'uint32'),
        ('DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP', 'uint8'),
        ('DEVLINK_ATTR_TRAP_POLICER_ID', 'uint32'),
        ('DEVLINK_ATTR_TRAP_POLICER_RATE', 'uint64'),
        ('DEVLINK_ATTR_TRAP_POLICER_BURST', 'uint64'),
        ('DEVLINK_ATTR_PORT_FUNCTION', 'devlink'),
        ('DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER', 'asciiz'),
        ('DEVLINK_ATTR_PORT_LANES', 'uint32'),
        ('DEVLINK_ATTR_PORT_SPLITTABLE', 'uint8'),
    )

    class devlink(nla):
        prefix = 'DEVLINK_ATTR_'
        nla_map = (
            ('DEVLINK_ATTR_UNSPEC', 'none'),
            ('DEVLINK_ATTR_BUS_NAME', 'asciiz'),
            ('DEVLINK_ATTR_DEV_NAME', 'asciiz'),
            ('DEVLINK_ATTR_PORT_INDEX', 'uint32'),
            ('DEVLINK_ATTR_PORT_TYPE', 'uint16'),
            ('DEVLINK_ATTR_PORT_DESIRED_TYPE', 'uint16'),
            ('DEVLINK_ATTR_PORT_NETDEV_IFINDEX', 'uint32'),
            ('DEVLINK_ATTR_PORT_NETDEV_NAME', 'asciiz'),
            ('DEVLINK_ATTR_PORT_IBDEV_NAME', 'asciiz'),
            ('DEVLINK_ATTR_PORT_SPLIT_COUNT', 'uint32'),
            ('DEVLINK_ATTR_PORT_SPLIT_GROUP', 'uint32'),
            ('DEVLINK_ATTR_SB_INDEX', 'uint32'),
            ('DEVLINK_ATTR_SB_SIZE', 'uint32'),
            ('DEVLINK_ATTR_SB_INGRESS_POOL_COUNT', 'uint16'),
            ('DEVLINK_ATTR_SB_EGRESS_POOL_COUNT', 'uint16'),
            ('DEVLINK_ATTR_SB_INGRESS_TC_COUNT', 'uint16'),
            ('DEVLINK_ATTR_SB_EGRESS_TC_COUNT', 'uint16'),
            ('DEVLINK_ATTR_SB_POOL_INDEX', 'uint16'),
            ('DEVLINK_ATTR_SB_POOL_TYPE', 'uint8'),
            ('DEVLINK_ATTR_SB_POOL_SIZE', 'uint32'),
            ('DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE', 'uint8'),
            ('DEVLINK_ATTR_SB_THRESHOLD', 'uint32'),
            ('DEVLINK_ATTR_SB_TC_INDEX', 'uint16'),
            ('DEVLINK_ATTR_SB_OCC_CUR', 'uint32'),
            ('DEVLINK_ATTR_SB_OCC_MAX', 'uint32'),
            ('DEVLINK_ATTR_ESWITCH_MODE', 'uint16'),
            ('DEVLINK_ATTR_ESWITCH_INLINE_MODE', 'uint8'),
            ('DEVLINK_ATTR_DPIPE_TABLES', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_TABLE', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_TABLE_NAME', 'asciiz'),
            ('DEVLINK_ATTR_DPIPE_TABLE_SIZE', 'uint64'),
            ('DEVLINK_ATTR_DPIPE_TABLE_MATCHES', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_TABLE_ACTIONS', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED', 'uint8'),
            ('DEVLINK_ATTR_DPIPE_ENTRIES', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_ENTRY', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_ENTRY_INDEX', 'uint64'),
            ('DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_ENTRY_COUNTER', 'uint64'),
            ('DEVLINK_ATTR_DPIPE_MATCH', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_MATCH_VALUE', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_MATCH_TYPE', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_ACTION', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_ACTION_VALUE', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_ACTION_TYPE', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_VALUE', 'none'),
            ('DEVLINK_ATTR_DPIPE_VALUE_MASK', 'none'),
            ('DEVLINK_ATTR_DPIPE_VALUE_MAPPING', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_HEADERS', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_HEADER', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_HEADER_NAME', 'asciiz'),
            ('DEVLINK_ATTR_DPIPE_HEADER_ID', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_HEADER_FIELDS', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_HEADER_GLOBAL', 'uint8'),
            ('DEVLINK_ATTR_DPIPE_HEADER_INDEX', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_FIELD', 'recursive'),
            ('DEVLINK_ATTR_DPIPE_FIELD_NAME', 'asciiz'),
            ('DEVLINK_ATTR_DPIPE_FIELD_ID', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH', 'uint32'),
            ('DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE', 'uint32'),
            ('DEVLINK_ATTR_PAD', 'none'),
            ('DEVLINK_ATTR_ESWITCH_ENCAP_MODE', 'uint8'),
            ('DEVLINK_ATTR_RESOURCE_LIST', 'recursive'),
            ('DEVLINK_ATTR_RESOURCE', 'recursive'),
            ('DEVLINK_ATTR_RESOURCE_NAME', 'asciiz'),
            ('DEVLINK_ATTR_RESOURCE_ID', 'uint64'),
            ('DEVLINK_ATTR_RESOURCE_SIZE', 'uint64'),
            ('DEVLINK_ATTR_RESOURCE_SIZE_NEW', 'uint64'),
            ('DEVLINK_ATTR_RESOURCE_SIZE_VALID', 'uint8'),
            ('DEVLINK_ATTR_RESOURCE_SIZE_MIN', 'uint64'),
            ('DEVLINK_ATTR_RESOURCE_SIZE_MAX', 'uint64'),
            ('DEVLINK_ATTR_RESOURCE_SIZE_GRAN', 'uint64'),
            ('DEVLINK_ATTR_RESOURCE_UNIT', 'uint8'),
            ('DEVLINK_ATTR_RESOURCE_OCC', 'uint64'),
            ('DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID', 'uint64'),
            ('DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS', 'uint64'),
            ('DEVLINK_ATTR_PORT_FLAVOUR', 'uint16'),
            ('DEVLINK_ATTR_PORT_NUMBER', 'uint32'),
            ('DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER', 'uint32'),
            ('DEVLINK_ATTR_PARAM', 'recursive'),
            ('DEVLINK_ATTR_PARAM_NAME', 'asciiz'),
            ('DEVLINK_ATTR_PARAM_GENERIC', 'flag'),
            ('DEVLINK_ATTR_PARAM_TYPE', 'uint8'),
            ('DEVLINK_ATTR_PARAM_VALUES_LIST', 'recursive'),
            ('DEVLINK_ATTR_PARAM_VALUE', 'recursive'),
            ('DEVLINK_ATTR_PARAM_VALUE_DATA', 'none'),
            ('DEVLINK_ATTR_PARAM_VALUE_CMODE', 'uint8'),
            ('DEVLINK_ATTR_REGION_NAME', 'asciiz'),
            ('DEVLINK_ATTR_REGION_SIZE', 'uint64'),
            ('DEVLINK_ATTR_REGION_SNAPSHOTS', 'recursive'),
            ('DEVLINK_ATTR_REGION_SNAPSHOT', 'recursive'),
            ('DEVLINK_ATTR_REGION_SNAPSHOT_ID', 'uint32'),
            ('DEVLINK_ATTR_REGION_CHUNKS', 'recursive'),
            ('DEVLINK_ATTR_REGION_CHUNK', 'recursive'),
            ('DEVLINK_ATTR_REGION_CHUNK_DATA', 'binary'),
            ('DEVLINK_ATTR_REGION_CHUNK_ADDR', 'uint64'),
            ('DEVLINK_ATTR_REGION_CHUNK_LEN', 'uint64'),
            ('DEVLINK_ATTR_INFO_DRIVER_NAME', 'asciiz'),
            ('DEVLINK_ATTR_INFO_SERIAL_NUMBER', 'asciiz'),
            ('DEVLINK_ATTR_INFO_VERSION_FIXED', 'recursive'),
            ('DEVLINK_ATTR_INFO_VERSION_RUNNING', 'recursive'),
            ('DEVLINK_ATTR_INFO_VERSION_STORED', 'recursive'),
            ('DEVLINK_ATTR_INFO_VERSION_NAME', 'asciiz'),
            ('DEVLINK_ATTR_INFO_VERSION_VALUE', 'asciiz'),
            ('DEVLINK_ATTR_SB_POOL_CELL_SIZE', 'uint32'),
            ('DEVLINK_ATTR_FMSG', 'recursive'),
            ('DEVLINK_ATTR_FMSG_OBJ_NEST_START', 'flag'),
            ('DEVLINK_ATTR_FMSG_PAIR_NEST_START', 'flag'),
            ('DEVLINK_ATTR_FMSG_ARR_NEST_START', 'flag'),
            ('DEVLINK_ATTR_FMSG_NEST_END', 'flag'),
            ('DEVLINK_ATTR_FMSG_OBJ_NAME', 'asciiz'),
            ('DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE', 'uint8'),
            ('DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA', 'none'),
            ('DEVLINK_ATTR_HEALTH_REPORTER', 'recursive'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_NAME', 'asciiz'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_STATE', 'uint8'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT', 'uint64'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT', 'uint64'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS', 'uint64'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD', 'uint64'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER', 'uint8'),
            ('DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME', 'asciiz'),
            ('DEVLINK_ATTR_FLASH_UPDATE_COMPONENT', 'asciiz'),
            ('DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG', 'asciiz'),
            ('DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE', 'uint64'),
            ('DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL', 'uint64'),
            ('DEVLINK_ATTR_PORT_PCI_PF_NUMBER', 'uint16'),
            ('DEVLINK_ATTR_PORT_PCI_VF_NUMBER', 'uint16'),
            ('DEVLINK_ATTR_STATS', 'recursive'),
            ('DEVLINK_ATTR_TRAP_NAME', 'asciiz'),
            ('DEVLINK_ATTR_TRAP_ACTION', 'uint8'),
            ('DEVLINK_ATTR_TRAP_TYPE', 'uint8'),
            ('DEVLINK_ATTR_TRAP_GENERIC', 'flag'),
            ('DEVLINK_ATTR_TRAP_METADATA', 'recursive'),
            ('DEVLINK_ATTR_TRAP_GROUP_NAME', 'asciiz'),
            ('DEVLINK_ATTR_RELOAD_FAILED', 'uint8'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS', 'uint64'),
            ('DEVLINK_ATTR_NETNS_FD', 'uint32'),
            ('DEVLINK_ATTR_NETNS_PID', 'uint32'),
            ('DEVLINK_ATTR_NETNS_ID', 'uint32'),
            ('DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP', 'uint8'),
            ('DEVLINK_ATTR_TRAP_POLICER_ID', 'uint32'),
            ('DEVLINK_ATTR_TRAP_POLICER_RATE', 'uint64'),
            ('DEVLINK_ATTR_TRAP_POLICER_BURST', 'uint64'),
            ('DEVLINK_ATTR_PORT_FUNCTION', 'recursive'),
            ('DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER', 'asciiz'),
            ('DEVLINK_ATTR_PORT_LANES', 'uint32'),
            ('DEVLINK_ATTR_PORT_SPLITTABLE', 'uint8'),
        )


class MarshalDevlink(Marshal):
    msg_map = {
        DEVLINK_CMD_UNSPEC: devlinkcmd,
        DEVLINK_CMD_GET: devlinkcmd,
        DEVLINK_CMD_SET: devlinkcmd,
        DEVLINK_CMD_NEW: devlinkcmd,
        DEVLINK_CMD_DEL: devlinkcmd,
        DEVLINK_CMD_PORT_GET: devlinkcmd,
        DEVLINK_CMD_PORT_SET: devlinkcmd,
        DEVLINK_CMD_PORT_NEW: devlinkcmd,
        DEVLINK_CMD_PORT_DEL: devlinkcmd,
        DEVLINK_CMD_PORT_SPLIT: devlinkcmd,
        DEVLINK_CMD_PORT_UNSPLIT: devlinkcmd,
        DEVLINK_CMD_SB_GET: devlinkcmd,
        DEVLINK_CMD_SB_SET: devlinkcmd,
        DEVLINK_CMD_SB_NEW: devlinkcmd,
        DEVLINK_CMD_SB_DEL: devlinkcmd,
        DEVLINK_CMD_SB_POOL_GET: devlinkcmd,
        DEVLINK_CMD_SB_POOL_SET: devlinkcmd,
        DEVLINK_CMD_SB_POOL_NEW: devlinkcmd,
        DEVLINK_CMD_SB_POOL_DEL: devlinkcmd,
        DEVLINK_CMD_SB_PORT_POOL_GET: devlinkcmd,
        DEVLINK_CMD_SB_PORT_POOL_SET: devlinkcmd,
        DEVLINK_CMD_SB_PORT_POOL_NEW: devlinkcmd,
        DEVLINK_CMD_SB_PORT_POOL_DEL: devlinkcmd,
        DEVLINK_CMD_SB_TC_POOL_BIND_GET: devlinkcmd,
        DEVLINK_CMD_SB_TC_POOL_BIND_SET: devlinkcmd,
        DEVLINK_CMD_SB_TC_POOL_BIND_NEW: devlinkcmd,
        DEVLINK_CMD_SB_TC_POOL_BIND_DEL: devlinkcmd,
        DEVLINK_CMD_SB_OCC_SNAPSHOT: devlinkcmd,
        DEVLINK_CMD_SB_OCC_MAX_CLEAR: devlinkcmd,
        DEVLINK_CMD_ESWITCH_GET: devlinkcmd,
        DEVLINK_CMD_ESWITCH_SET: devlinkcmd,
        DEVLINK_CMD_DPIPE_TABLE_GET: devlinkcmd,
        DEVLINK_CMD_DPIPE_ENTRIES_GET: devlinkcmd,
        DEVLINK_CMD_DPIPE_HEADERS_GET: devlinkcmd,
        DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET: devlinkcmd,
        DEVLINK_CMD_RESOURCE_SET: devlinkcmd,
        DEVLINK_CMD_RESOURCE_DUMP: devlinkcmd,
        DEVLINK_CMD_RELOAD: devlinkcmd,
        DEVLINK_CMD_PARAM_GET: devlinkcmd,
        DEVLINK_CMD_PARAM_SET: devlinkcmd,
        DEVLINK_CMD_PARAM_NEW: devlinkcmd,
        DEVLINK_CMD_PARAM_DEL: devlinkcmd,
        DEVLINK_CMD_REGION_GET: devlinkcmd,
        DEVLINK_CMD_REGION_SET: devlinkcmd,
        DEVLINK_CMD_REGION_NEW: devlinkcmd,
        DEVLINK_CMD_REGION_DEL: devlinkcmd,
        DEVLINK_CMD_REGION_READ: devlinkcmd,
        DEVLINK_CMD_PORT_PARAM_GET: devlinkcmd,
        DEVLINK_CMD_PORT_PARAM_SET: devlinkcmd,
        DEVLINK_CMD_PORT_PARAM_NEW: devlinkcmd,
        DEVLINK_CMD_PORT_PARAM_DEL: devlinkcmd,
        DEVLINK_CMD_INFO_GET: devlinkcmd,
        DEVLINK_CMD_HEALTH_REPORTER_GET: devlinkcmd,
        DEVLINK_CMD_HEALTH_REPORTER_SET: devlinkcmd,
        DEVLINK_CMD_HEALTH_REPORTER_RECOVER: devlinkcmd,
        DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE: devlinkcmd,
        DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET: devlinkcmd,
        DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR: devlinkcmd,
        DEVLINK_CMD_FLASH_UPDATE: devlinkcmd,
        DEVLINK_CMD_FLASH_UPDATE_END: devlinkcmd,
        DEVLINK_CMD_FLASH_UPDATE_STATUS: devlinkcmd,
        DEVLINK_CMD_TRAP_GET: devlinkcmd,
        DEVLINK_CMD_TRAP_SET: devlinkcmd,
        DEVLINK_CMD_TRAP_NEW: devlinkcmd,
        DEVLINK_CMD_TRAP_DEL: devlinkcmd,
        DEVLINK_CMD_TRAP_GROUP_GET: devlinkcmd,
        DEVLINK_CMD_TRAP_GROUP_SET: devlinkcmd,
        DEVLINK_CMD_TRAP_GROUP_NEW: devlinkcmd,
        DEVLINK_CMD_TRAP_GROUP_DEL: devlinkcmd,
        DEVLINK_CMD_TRAP_POLICER_GET: devlinkcmd,
        DEVLINK_CMD_TRAP_POLICER_SET: devlinkcmd,
        DEVLINK_CMD_TRAP_POLICER_NEW: devlinkcmd,
        DEVLINK_CMD_TRAP_POLICER_DEL: devlinkcmd,
    }

    def fix_message(self, msg):
        try:
            msg['event'] = DEVLINK_VALUES[msg['cmd']]
        except Exception:
            pass


class AsyncDevlinkSocket(AsyncGenericNetlinkSocket):
    marshal_class = MarshalDevlink

    async def bind(self, groups=0, **kwarg):
        await super().bind('devlink', devlinkcmd, groups, None, **kwarg)


class DevlinkSocket(GenericNetlinkSocket):
    async_class = AsyncDevlinkSocket

    def bind(self, groups=0, **kwarg):
        return self._run_with_cleanup(self.asyncore.bind, groups, **kwarg)
b IDATxytVսϓ22 A@IR :hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-EIENT ;@xT.i%-X}SvS5.r/UHz^_$-W"w)Ɗ/@Z &IoX P$K}JzX:;` &, ŋui,e6mX ԵrKb1ԗ)DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA݀!I*]R;I2$eZ#ORZSrr6mteffu*((Pu'v{DIߔ4^pIm'77WEEE;vƎ4-$]'RI{\I&G :IHJ DWBB=\WR޽m o$K(V9ABB.}jѢv`^?IOȅ} ڶmG}T#FJ`56$-ھ}FI&v;0(h;Б38CӧOWf!;A i:F_m9s&|q%=#wZprrrla A &P\\СC[A#! {olF} `E2}MK/vV)i{4BffV\|ۭX`b@kɶ@%i$K z5zhmX[IXZ` 'b%$r5M4º/l ԃߖxhʔ)[@=} K6IM}^5k㏷݆z ΗÿO:gdGBmyT/@+Vɶ纽z񕏵l.y޴it뭷zV0[Y^>Wsqs}\/@$(T7f.InݺiR$푔n.~?H))\ZRW'Mo~v Ov6oԃxz! S,&xm/yɞԟ?'uaSѽb,8GלKboi&3t7Y,)JJ c[nzӳdE&KsZLӄ I?@&%ӟ۶mSMMњ0iؐSZ,|J+N ~,0A0!5%Q-YQQa3}$_vVrf9f?S8`zDADADADADADADADADAdqP,تmMmg1V?rSI꒟]u|l RCyEf٢9 jURbztѰ!m5~tGj2DhG*{H9)꒟ר3:(+3\?/;TUݭʴ~S6lڧUJ*i$d(#=Yݺd{,p|3B))q:vN0Y.jkק6;SɶVzHJJЀ-utѹսk>QUU\޲~]fFnK?&ߡ5b=z9)^|u_k-[y%ZNU6 7Mi:]ۦtk[n X(e6Bb."8cۭ|~teuuw|ήI-5"~Uk;ZicEmN/:]M> cQ^uiƞ??Ңpc#TUU3UakNwA`:Y_V-8.KKfRitv޲* 9S6ֿj,ՃNOMߤ]z^fOh|<>@Å5 _/Iu?{SY4hK/2]4%it5q]GGe2%iR| W&f*^]??vq[LgE_3f}Fxu~}qd-ږFxu~I N>\;͗O֊:̗WJ@BhW=y|GgwܷH_NY?)Tdi'?խwhlmQi !SUUsw4kӺe4rfxu-[nHtMFj}H_u~w>)oV}(T'ebʒv3_[+vn@Ȭ\S}ot}w=kHFnxg S 0eޢm~l}uqZfFoZuuEg `zt~? b;t%>WTkķh[2eG8LIWx,^\thrl^Ϊ{=dž<}qV@ ⠨Wy^LF_>0UkDuʫuCs$)Iv:IK;6ֲ4{^6եm+l3>݆uM 9u?>Zc }g~qhKwڭeFMM~pМuqǿz6Tb@8@Y|jx](^]gf}M"tG -w.@vOqh~/HII`S[l.6nØXL9vUcOoB\xoǤ'T&IǍQw_wpv[kmO{w~>#=P1Pɞa-we:iǏlHo׈꒟f9SzH?+shk%Fs:qVhqY`jvO'ρ?PyX3lх]˾uV{ݞ]1,MzYNW~̈́ joYn}ȚF߾׮mS]F z+EDxm/d{F{-W-4wY듏:??_gPf ^3ecg ҵs8R2מz@TANGj)}CNi/R~}c:5{!ZHӋӾ6}T]G]7W6^n 9*,YqOZj:P?Q DFL|?-^.Ɵ7}fFh׶xe2Pscz1&5\cn[=Vn[ĶE鎀uˌd3GII k;lNmشOuuRVfBE]ۣeӶu :X-[(er4~LHi6:Ѻ@ԅrST0trk%$Č0ez" *z"T/X9|8.C5Feg}CQ%͞ˣJvL/?j^h&9xF`њZ(&yF&Iݻfg#W;3^{Wo^4'vV[[K';+mӍִ]AC@W?1^{එyh +^]fm~iԵ]AB@WTk̏t uR?l.OIHiYyԶ]Aˀ7c:q}ힽaf6Z~қm(+sK4{^6}T*UUu]n.:kx{:2 _m=sAߤU@?Z-Vކеz왍Nэ{|5 pڶn b p-@sPg]0G7fy-M{GCF'%{4`=$-Ge\ eU:m+Zt'WjO!OAF@ik&t݆ϥ_ e}=]"Wz_.͜E3leWFih|t-wZۍ-uw=6YN{6|} |*={Ѽn.S.z1zjۻTH]흾 DuDvmvK.`V]yY~sI@t?/ϓ. m&["+P?MzovVЫG3-GRR[(!!\_,^%?v@ҵő m`Y)tem8GMx.))A]Y i`ViW`?^~!S#^+ѽGZj?Vģ0.))A꨷lzL*]OXrY`DBBLOj{-MH'ii-ϰ ok7^ )쭡b]UXSְmռY|5*cֽk0B7镹%ڽP#8nȎq}mJr23_>lE5$iwui+ H~F`IjƵ@q \ @#qG0".0" l`„.0! ,AQHN6qzkKJ#o;`Xv2>,tێJJ7Z/*A .@fفjMzkg @TvZH3Zxu6Ra'%O?/dQ5xYkU]Rֽkق@DaS^RSּ5|BeHNN͘p HvcYcC5:y #`οb;z2.!kr}gUWkyZn=f Pvsn3p~;4p˚=ē~NmI] ¾ 0lH[_L hsh_ғߤc_њec)g7VIZ5yrgk̞W#IjӪv>՞y睝M8[|]\շ8M6%|@PZڨI-m>=k='aiRo-x?>Q.}`Ȏ:Wsmu u > .@,&;+!!˱tﭧDQwRW\vF\~Q7>spYw$%A~;~}6¾ g&if_=j,v+UL1(tWake:@Ș>j$Gq2t7S?vL|]u/ .(0E6Mk6hiۺzښOrifޱxm/Gx> Lal%%~{lBsR4*}{0Z/tNIɚpV^#Lf:u@k#RSu =S^ZyuR/.@n&΃z~B=0eg뺆#,Þ[B/?H uUf7y Wy}Bwegל`Wh(||`l`.;Ws?V@"c:iɍL֯PGv6zctM̠':wuW;d=;EveD}9J@B(0iհ bvP1{\P&G7D޴Iy_$-Qjm~Yrr&]CDv%bh|Yzni_ˆR;kg}nJOIIwyuL}{ЌNj}:+3Y?:WJ/N+Rzd=hb;dj͒suݔ@NKMԄ jqzC5@y°hL m;*5ezᕏ=ep XL n?מ:r`۵tŤZ|1v`V뽧_csج'ߤ%oTuumk%%%h)uy]Nk[n 'b2 l.=͜E%gf$[c;s:V-͞WߤWh-j7]4=F-X]>ZLSi[Y*We;Zan(ӇW|e(HNNP5[= r4tP &0<pc#`vTNV GFqvTi*Tyam$ߏWyE*VJKMTfFw>'$-ؽ.Ho.8c"@DADADADADADADADADA~j*֘,N;Pi3599h=goضLgiJ5փy~}&Zd9p֚ e:|hL``b/d9p? fgg+%%hMgXosج, ΩOl0Zh=xdjLmhݻoO[g_l,8a]٭+ӧ0$I]c]:粹:Teꢢ"5a^Kgh,&= =՟^߶“ߢE ܹS J}I%:8 IDAT~,9/ʃPW'Mo}zNƍ쨓zPbNZ~^z=4mswg;5 Y~SVMRXUյڱRf?s:w ;6H:ºi5-maM&O3;1IKeamZh͛7+##v+c ~u~ca]GnF'ټL~PPPbn voC4R,ӟgg %hq}@#M4IÇ Oy^xMZx ) yOw@HkN˖-Sǎmb]X@n+i͖!++K3gd\$mt$^YfJ\8PRF)77Wא!Cl$i:@@_oG I{$# 8磌ŋ91A (Im7֭>}ߴJq7ޗt^ -[ԩSj*}%]&' -ɓ'ꫯVzzvB#;a 7@GxI{j޼ƌ.LÇWBB7`O"I$/@R @eee@۷>}0,ɒ2$53Xs|cS~rpTYYY} kHc %&k.], @ADADADADADADADADA@lT<%''*Lo^={رc5h %$+CnܸQ3fҥK}vUVVs9G R,_{xˇ3o߾;TTTd}馛]uuuG~iԩ@4bnvmvfϞ /Peeeq}}za I~,誫{UWW뮻}_~YƍSMMMYχ֝waw\ďcxꩧtEƍկ_?۷5@u?1kNׯWzz/wy>}zj3 k(ٺuq_Zvf̘:~ ABQ&r|!%KҥKgԞ={<_X-z !CyFUUz~ ABQIIIjݺW$UXXDٳZ~ ABQƍecW$<(~<RSSvZujjjԧOZQu@4 8m&&&jԩg$ď1h ͟?_{768@g =@`)))5o6m3)ѣƌJ;wҿUTT /KZR{~a=@0o<*狔iFɶ[ˎ;T]]OX@?K.ۈxN pppppppppppppppppPfl߾] ,{ァk۶mڿo5BTӦMӴiӴ|r DB2e|An!Dy'tkΝ[A $***t5' "!駟oaDnΝ:t֭[gDШQ06qD;@ x M6v(PiizmZ4ew"@̴ixf [~-Fٱc&IZ2|n!?$@{[HTɏ#@hȎI# _m(F /6Z3z'\r,r!;w2Z3j=~GY7"I$iI.p_"?pN`y DD?: _  Gÿab7J !Bx@0 Bo cG@`1C[@0G @`0C_u V1 aCX>W ` | `!<S `"<. `#c`?cAC4 ?c p#~@0?:08&_MQ1J h#?/`7;I  q 7a wQ A 1 Hp !#<8/#@1Ul7=S=K.4Z?E_$i@!1!E4?`P_  @Bă10#: "aU,xbFY1 [n|n #'vEH:`xb #vD4Y hi.i&EΖv#O H4IŶ}:Ikh @tZRF#(tXҙzZ ?I3l7q@õ|ۍ1,GpuY Ꮿ@hJv#xxk$ v#9 5 }_$c S#=+"K{F*m7`#%H:NRSp6I?sIՖ{Ap$I$I:QRv2$Z @UJ*$]<FO4IENDB`