lib/libterminfo/hash.c
/* $NetBSD: hash.c,v 1.4 2010/02/12 10:18:56 roy Exp $ */
/* DO NOT EDIT
 * Automatically generated from term.h */

#if HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#endif

#include <sys/cdefs.h>
__RCSID("$NetBSD: hash.c,v 1.4 2010/02/12 10:18:56 roy Exp $");

#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <term_private.h>
#include <term.h>

static const char _ti_flagids[][6] = {
	"bw",
	"am",
	"bce",
	"ccc",
	"xhp",
	"xhpa",
	"cpix",
	"crxm",
	"xt",
	"xenl",
	"eo",
	"gn",
	"hc",
	"chts",
	"km",
	"daisy",
	"hs",
	"hls",
	"in",
	"lpix",
	"da",
	"db",
	"mir",
	"msgr",
	"nxon",
	"xsb",
	"npc",
	"ndscr",
	"nrrmc",
	"os",
	"mc5i",
	"xvpa",
	"sam",
	"eslok",
	"hz",
	"ul",
	"xon",
};

#include <stdlib.h>

static uint32_t
_ti_flaghash(const void * __restrict key, size_t keylen)
{
	static const uint8_t g[75] = {
	    0x19, 0x08, 0x16, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x1d, 0x00,
	    0x17, 0x00, 0x0a, 0x17, 0x08, 0x09, 0x11, 0x00, 0x00, 0x0a,
	    0x00, 0x13, 0x1a, 0x0f, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00,
	    0x12, 0x0a, 0x00, 0x11, 0x10, 0x09, 0x00, 0x00, 0x00, 0x1b,
	    0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x00,
	    0x00, 0x0d, 0x00, 0x00, 0x04, 0x16, 0x09, 0x00, 0x1a, 0x00,
	    0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
	    0x00, 0x1c, 0x05, 0x00, 0x00,
	};
	uint32_t h[3];

	mi_vector_hash(key, keylen, 0xd36b2625U, h);
	return (g[h[0] % 75] + g[h[1] % 75]) % 37;
}

const char *
_ti_flagid(ssize_t idx)
{

	if ((size_t)idx > __arraycount(_ti_flagids))
		return NULL;
	return _ti_flagids[idx];
}

ssize_t
_ti_flagindex(const char *key)
{
	uint32_t idx;

	idx = _ti_flaghash((const unsigned char *)key, strlen(key));
	if (idx > __arraycount(_ti_flagids) ||
	    strcmp(key, _ti_flagids[idx]) != 0)
		return -1;
	return idx;
}

static const char _ti_numids[][7] = {
	"bitwin",
	"bitype",
	"bufsz",
	"btns",
	"cols",
	"spinh",
	"spinv",
	"it",
	"lh",
	"lw",
	"lines",
	"lm",
	"ma",
	"xmc",
	"colors",
	"maddr",
	"mjump",
	"pairs",
	"wnum",
	"mcs",
	"mls",
	"ncv",
	"nlab",
	"npins",
	"orc",
	"orl",
	"orhi",
	"orvi",
	"pb",
	"cps",
	"vt",
	"widcs",
	"wsl",
};

#include <stdlib.h>

static uint32_t
_ti_numhash(const void * __restrict key, size_t keylen)
{
	static const uint8_t g[67] = {
	    0x04, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
	    0x19, 0x00, 0x0d, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00,
	    0x0b, 0x15, 0x1d, 0x14, 0x00, 0x01, 0x13, 0x1b, 0x14, 0x00,
	    0x19, 0x00, 0x00, 0x02, 0x14, 0x1a, 0x12, 0x00, 0x00, 0x00,
	    0x16, 0x05, 0x00, 0x12, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00,
	    0x19, 0x00, 0x20, 0x00, 0x00, 0x10, 0x17, 0x00, 0x00, 0x0f,
	    0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
	};
	uint32_t h[3];

	mi_vector_hash(key, keylen, 0x50a11f58U, h);
	return (g[h[0] % 67] + g[h[1] % 67]) % 33;
}

const char *
_ti_numid(ssize_t idx)
{

	if ((size_t)idx > __arraycount(_ti_numids))
		return NULL;
	return _ti_numids[idx];
}

ssize_t
_ti_numindex(const char *key)
{
	uint32_t idx;

	idx = _ti_numhash((const unsigned char *)key, strlen(key));
	if (idx > __arraycount(_ti_numids) ||
	    strcmp(key, _ti_numids[idx]) != 0)
		return -1;
	return idx;
}

static const char _ti_strids[][9] = {
	"acsc",
	"scesa",
	"cbt",
	"bel",
	"bicr",
	"binel",
	"birep",
	"cr",
	"cpi",
	"lpi",
	"chr",
	"cvr",
	"csr",
	"rmp",
	"csnm",
	"tbc",
	"mgc",
	"clear",
	"el1",
	"el",
	"ed",
	"csin",
	"colornm",
	"hpa",
	"cmdch",
	"cwin",
	"cup",
	"cud1",
	"home",
	"civis",
	"cub1",
	"mrcup",
	"cnorm",
	"cuf1",
	"ll",
	"cuu1",
	"cvvis",
	"defbi",
	"defc",
	"dch1",
	"dl1",
	"devt",
	"dial",
	"dsl",
	"dclk",
	"dispc",
	"hd",
	"enacs",
	"endbi",
	"smacs",
	"smam",
	"blink",
	"bold",
	"smcup",
	"smdc",
	"dim",
	"swidm",
	"sdrfq",
	"ehhlm",
	"smir",
	"sitm",
	"elhlm",
	"slm",
	"elohlm",
	"smicm",
	"snlq",
	"snrmq",
	"smpch",
	"prot",
	"rev",
	"erhlm",
	"smsc",
	"invis",
	"sshm",
	"smso",
	"ssubm",
	"ssupm",
	"ethlm",
	"smul",
	"sum",
	"evhlm",
	"smxon",
	"ech",
	"rmacs",
	"rmam",
	"sgr0",
	"rmcup",
	"rmdc",
	"rwidm",
	"rmir",
	"ritm",
	"rlm",
	"rmicm",
	"rmpch",
	"rmsc",
	"rshm",
	"rmso",
	"rsubm",
	"rsupm",
	"rmul",
	"rum",
	"rmxon",
	"pause",
	"hook",
	"flash",
	"ff",
	"fsl",
	"getm",
	"wingo",
	"hup",
	"is1",
	"is2",
	"is3",
	"if",
	"iprog",
	"initc",
	"initp",
	"ich1",
	"il1",
	"ip",
	"ka1",
	"ka3",
	"kb2",
	"kbs",
	"kbeg",
	"kcbt",
	"kc1",
	"kc3",
	"kcan",
	"ktbc",
	"kclr",
	"kclo",
	"kcmd",
	"kcpy",
	"kcrt",
	"kctab",
	"kdch1",
	"kdl1",
	"kcud1",
	"krmir",
	"kend",
	"kent",
	"kel",
	"ked",
	"kext",
	"kf0",
	"kf1",
	"kf2",
	"kf3",
	"kf4",
	"kf5",
	"kf6",
	"kf7",
	"kf8",
	"kf9",
	"kf10",
	"kf11",
	"kf12",
	"kf13",
	"kf14",
	"kf15",
	"kf16",
	"kf17",
	"kf18",
	"kf19",
	"kf20",
	"kf21",
	"kf22",
	"kf23",
	"kf24",
	"kf25",
	"kf26",
	"kf27",
	"kf28",
	"kf29",
	"kf30",
	"kf31",
	"kf32",
	"kf33",
	"kf34",
	"kf35",
	"kf36",
	"kf37",
	"kf38",
	"kf39",
	"kf40",
	"kf41",
	"kf42",
	"kf43",
	"kf44",
	"kf45",
	"kf46",
	"kf47",
	"kf48",
	"kf49",
	"kf50",
	"kf51",
	"kf52",
	"kf53",
	"kf54",
	"kf55",
	"kf56",
	"kf57",
	"kf58",
	"kf59",
	"kf60",
	"kf61",
	"kf62",
	"kf63",
	"kfnd",
	"khlp",
	"khome",
	"kich1",
	"kil1",
	"kcub1",
	"kll",
	"kmrk",
	"kmsg",
	"kmous",
	"kmov",
	"knxt",
	"knp",
	"kopn",
	"kopt",
	"kpp",
	"kprv",
	"kprt",
	"krdo",
	"kref",
	"krfr",
	"krpl",
	"krst",
	"kres",
	"kcuf1",
	"ksav",
	"kBEG",
	"kCAN",
	"kCMD",
	"kCPY",
	"kCRT",
	"kDC",
	"kDL",
	"kslt",
	"kEND",
	"kEOL",
	"kEXT",
	"kind",
	"kFND",
	"kHLP",
	"kHOM",
	"kIC",
	"kLFT",
	"kMSG",
	"kMOV",
	"kNXT",
	"kOPT",
	"kPRV",
	"kPRT",
	"kri",
	"kRDO",
	"kRPL",
	"kRIT",
	"kRES",
	"kSAV",
	"kSPD",
	"khts",
	"kUND",
	"kspd",
	"kund",
	"kcuu1",
	"rmkx",
	"smkx",
	"lf0",
	"lf1",
	"lf2",
	"lf3",
	"lf4",
	"lf5",
	"lf6",
	"lf7",
	"lf8",
	"lf9",
	"lf10",
	"fln",
	"rmln",
	"smln",
	"rmm",
	"smm",
	"mhpa",
	"mcud1",
	"mcub1",
	"mcuf1",
	"mvpa",
	"mcuu1",
	"minfo",
	"nel",
	"porder",
	"oc",
	"op",
	"pad",
	"dch",
	"dl",
	"cud",
	"mcud",
	"ich",
	"indn",
	"il",
	"cub",
	"mcub",
	"cuf",
	"mcuf",
	"rin",
	"cuu",
	"mcuu",
	"pctrm",
	"pfkey",
	"pfloc",
	"pfxl",
	"pfx",
	"pln",
	"mc0",
	"mc5p",
	"mc4",
	"mc5",
	"pulse",
	"qdial",
	"rmclk",
	"rep",
	"rfi",
	"reqmp",
	"rs1",
	"rs2",
	"rs3",
	"rf",
	"rc",
	"vpa",
	"sc",
	"scesc",
	"ind",
	"ri",
	"scs",
	"s0ds",
	"s1ds",
	"s2ds",
	"s3ds",
	"sgr1",
	"setab",
	"setaf",
	"sgr",
	"setb",
	"smgb",
	"smgbp",
	"sclk",
	"setcolor",
	"scp",
	"setf",
	"smgl",
	"smglp",
	"smglr",
	"slines",
	"slength",
	"smgr",
	"smgrp",
	"hts",
	"smgtb",
	"smgt",
	"smgtp",
	"wind",
	"sbim",
	"scsd",
	"rbim",
	"rcsd",
	"subcs",
	"supcs",
	"ht",
	"docr",
	"tsl",
	"tone",
	"u0",
	"u1",
	"u2",
	"u3",
	"u4",
	"u5",
	"u6",
	"u7",
	"u8",
	"u9",
	"uc",
	"hu",
	"wait",
	"xoffc",
	"xonc",
	"zerom",
};

#include <stdlib.h>

static uint32_t
_ti_strhash(const void * __restrict key, size_t keylen)
{
	static const uint16_t g[789] = {
	    0x0000, 0x00cd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0094,
	    0x0000, 0x011b, 0x00a0, 0x0094, 0x002f, 0x00aa, 0x0026, 0x004b,
	    0x0000, 0x0163, 0x0171, 0x0000, 0x0000, 0x0064, 0x0019, 0x0000,
	    0x009b, 0x0113, 0x00ed, 0x007e, 0x0000, 0x0000, 0x0000, 0x002d,
	    0x0000, 0x00f4, 0x0000, 0x00cc, 0x00df, 0x0170, 0x0000, 0x0000,
	    0x0179, 0x0018, 0x0000, 0x013b, 0x0000, 0x0028, 0x0000, 0x0000,
	    0x00ef, 0x0000, 0x0137, 0x0061, 0x0000, 0x0000, 0x00ce, 0x00df,
	    0x00f0, 0x001f, 0x0074, 0x0000, 0x0000, 0x008f, 0x0069, 0x0000,
	    0x0134, 0x0000, 0x00ac, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000,
	    0x0012, 0x0027, 0x0000, 0x0110, 0x0000, 0x0000, 0x0000, 0x0061,
	    0x00a7, 0x0000, 0x0061, 0x0000, 0x0000, 0x0096, 0x0000, 0x00e5,
	    0x0000, 0x00d1, 0x0017, 0x0000, 0x0000, 0x00bc, 0x00d6, 0x0000,
	    0x0182, 0x00d7, 0x012d, 0x0000, 0x00e2, 0x00b9, 0x0159, 0x0000,
	    0x001c, 0x00cc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
	    0x0000, 0x0031, 0x0106, 0x0087, 0x0157, 0x001d, 0x011a, 0x0119,
	    0x0000, 0x0000, 0x0000, 0x012b, 0x0000, 0x011b, 0x0000, 0x0154,
	    0x0000, 0x00ee, 0x00ad, 0x00f8, 0x0066, 0x0000, 0x0010, 0x0000,
	    0x0064, 0x000e, 0x0052, 0x0000, 0x016a, 0x0000, 0x0148, 0x0000,
	    0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x016d, 0x000b, 0x0000,
	    0x0000, 0x0000, 0x0000, 0x0058, 0x0091, 0x0000, 0x0022, 0x0000,
	    0x0000, 0x0000, 0x0000, 0x0000, 0x0026, 0x011a, 0x00a4, 0x013a,
	    0x0000, 0x0000, 0x0000, 0x0000, 0x0086, 0x0000, 0x00c0, 0x011f,
	    0x0000, 0x0093, 0x0000, 0x0000, 0x0042, 0x0174, 0x0101, 0x0000,
	    0x0065, 0x0086, 0x0000, 0x0000, 0x00e8, 0x0022, 0x000d, 0x0000,
	    0x008e, 0x000d, 0x0000, 0x008b, 0x0000, 0x0000, 0x0000, 0x0000,
	    0x0022, 0x0000, 0x011d, 0x0000, 0x0000, 0x0000, 0x010e, 0x0000,
	    0x0000, 0x0000, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
	    0x0014, 0x00b3, 0x0000, 0x002e, 0x0051, 0x0000, 0x0102, 0x008e,
	    0x012b, 0x0145, 0x004c, 0x0000, 0x001e, 0x00fa, 0x0000, 0x0000,
	    0x0000, 0x0000, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0103, 0x00a4,
	    0x003e, 0x0000, 0x0114, 0x0028, 0x005e, 0x015d, 0x00e7, 0x0044,
	    0x0000, 0x0000, 0x00c6, 0x008f, 0x0000, 0x00eb, 0x0000, 0x0000,
	    0x0000, 0x0169, 0x0000, 0x0110, 0x0093, 0x0000, 0x012c, 0x0178,
	    0x0000, 0x0000, 0x0024, 0x0000, 0x0000, 0x0000, 0x0000, 0x0158,
	    0x004d, 0x009c, 0x0186, 0x009b, 0x0000, 0x0163, 0x007c, 0x0078,
	    0x0000, 0x0000, 0x0172, 0x00d2, 0x0000, 0x0000, 0x00fc, 0x0000,
	    0x0000, 0x0000, 0x0133, 0x0104, 0x017e, 0x0162, 0x0050, 0x0000,
	    0x0023, 0x00c0, 0x0070, 0x0000, 0x0000, 0x0000, 0x0025, 0x0001,
	    0x0184, 0x0053, 0x0133, 0x0000, 0x0000, 0x0000, 0x0048, 0x0075,
	    0x0000, 0x00b2, 0x0056, 0x002c, 0x0000, 0x011c, 0x0000, 0x0000,
	    0x0000, 0x0000, 0x0000, 0x0166, 0x011b, 0x0000, 0x0039, 0x0020,
	    0x0000, 0x0000, 0x0000, 0x00dc, 0x0048, 0x0000, 0x0076, 0x0169,
	    0x00d7, 0x002a, 0x0032, 0x0013, 0x0153, 0x012f, 0x009c, 0x0041,
	    0x002f, 0x0000, 0x0000, 0x012e, 0x0000, 0x0000, 0x00dd, 0x0000,
	    0x0138, 0x000b, 0x0030, 0x008d, 0x0000, 0x0000, 0x0000, 0x0000,
	    0x0039, 0x017a, 0x00c5, 0x0100, 0x0000, 0x0000, 0x005c, 0x001f,
	    0x0000, 0x0000, 0x0000, 0x0000, 0x0110, 0x003e, 0x00a1, 0x0000,
	    0x0081, 0x0000, 0x0000, 0x0000, 0x00dd, 0x0142, 0x00c1, 0x0000,
	    0x0035, 0x0123, 0x0178, 0x00be, 0x015e, 0x0161, 0x0188, 0x0000,
	    0x0000, 0x0149, 0x0123, 0x0000, 0x0000, 0x0185, 0x0000, 0x0000,
	    0x0000, 0x004e, 0x0163, 0x0077, 0x00fa, 0x0000, 0x007b, 0x0006,
	    0x0101, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0158, 0x00d6,
	    0x00b0, 0x0180, 0x0003, 0x0000, 0x0000, 0x0000, 0x0136, 0x0045,
	    0x017e, 0x0000, 0x0000, 0x0000, 0x0126, 0x0090, 0x011b, 0x0000,
	    0x0000, 0x0000, 0x0000, 0x0000, 0x017b, 0x0000, 0x0053, 0x0000,
	    0x005c, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x007e, 0x014e,
	    0x0035, 0x00ed, 0x0000, 0x00d1, 0x00d8, 0x0142, 0x0168, 0x000a,
	    0x00d0, 0x0000, 0x0000, 0x0000, 0x00d9, 0x0000, 0x0000, 0x0087,
	    0x0000, 0x008a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0112, 0x006c,
	    0x011d, 0x0177, 0x0000, 0x0000, 0x0000, 0x0000, 0x0024, 0x001e,
	    0x0177, 0x00c4, 0x0000, 0x0000, 0x0000, 0x0014, 0x00c7, 0x00ae,
	    0x0042, 0x0180, 0x0075, 0x0000, 0x011c, 0x0064, 0x00a3, 0x00bc,
	    0x0001, 0x0000, 0x0000, 0x0016, 0x00c3, 0x00e4, 0x0009, 0x0000,
	    0x0000, 0x006b, 0x013c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
	    0x00fa, 0x0000, 0x0000, 0x0000, 0x0117, 0x0000, 0x007c, 0x0060,
	    0x0149, 0x0059, 0x00d4, 0x014e, 0x000a, 0x014f, 0x0000, 0x0000,
	    0x0000, 0x00b6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121,
	    0x0000, 0x0000, 0x0000, 0x007d, 0x0000, 0x0000, 0x001c, 0x0000,
	    0x0000, 0x00f9, 0x0000, 0x003b, 0x00ea, 0x0000, 0x00ad, 0x0000,
	    0x0000, 0x0000, 0x0155, 0x0000, 0x0141, 0x0000, 0x0000, 0x0000,
	    0x0187, 0x004b, 0x009f, 0x0000, 0x0114, 0x0000, 0x00dd, 0x0000,
	    0x0066, 0x0000, 0x0136, 0x0135, 0x0000, 0x0000, 0x0000, 0x0000,
	    0x0000, 0x001e, 0x0000, 0x0062, 0x0146, 0x0033, 0x0071, 0x0000,
	    0x0000, 0x010d, 0x004a, 0x0133, 0x0000, 0x0000, 0x0076, 0x0111,
	    0x0000, 0x00ba, 0x0000, 0x0000, 0x0000, 0x0038, 0x001d, 0x0158,
	    0x0072, 0x00a3, 0x0000, 0x008c, 0x0008, 0x0000, 0x0000, 0x0000,
	    0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x00ea, 0x0000, 0x003f,
	    0x0000, 0x0000, 0x0000, 0x004c, 0x0000, 0x00f9, 0x0000, 0x0000,
	    0x0000, 0x0147, 0x0182, 0x008f, 0x0156, 0x0000, 0x0000, 0x0000,
	    0x0000, 0x0000, 0x0011, 0x0000, 0x0102, 0x0040, 0x0000, 0x0000,
	    0x0130, 0x0000, 0x0000, 0x0000, 0x0126, 0x0026, 0x0145, 0x0000,
	    0x0000, 0x00ab, 0x0000, 0x0175, 0x0113, 0x0117, 0x010f, 0x000f,
	    0x0000, 0x00e3, 0x012e, 0x0000, 0x0000, 0x00f5, 0x0020, 0x0000,
	    0x0000, 0x00a8, 0x0000, 0x0000, 0x012a, 0x009f, 0x0085, 0x0000,
	    0x00b6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0108,
	    0x00cb, 0x0000, 0x0000, 0x0000, 0x0053, 0x0000, 0x007f, 0x0000,
	    0x008c, 0x0113, 0x0000, 0x0000, 0x0156, 0x0169, 0x0000, 0x0009,
	    0x0000, 0x0073, 0x0000, 0x007e, 0x0000, 0x0000, 0x0000, 0x00eb,
	    0x0000, 0x0153, 0x0084, 0x0000, 0x0000, 0x0148, 0x0000, 0x0000,
	    0x011c, 0x0000, 0x00ec, 0x0000, 0x0000, 0x015a, 0x0000, 0x0000,
	    0x0000, 0x0000, 0x012a, 0x0000, 0x0000, 0x015d, 0x0000, 0x00ae,
	    0x0000, 0x0000, 0x00db, 0x0000, 0x0000, 0x0000, 0x0000, 0x0101,
	    0x0067, 0x0000, 0x010c, 0x0000, 0x0032, 0x0000, 0x0000, 0x0000,
	    0x0000, 0x0000, 0x0167, 0x0000, 0x00e4, 0x0000, 0x00a2, 0x0000,
	    0x0067, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0181, 0x0000,
	    0x015b, 0x0046, 0x0000, 0x0000, 0x0000, 0x00fd, 0x0000, 0x0000,
	    0x00a8, 0x0000, 0x0008, 0x00a6, 0x00b5, 0x0000, 0x0000, 0x0000,
	    0x0000, 0x0000, 0x0000, 0x006b, 0x0000, 0x0000, 0x00b1, 0x00a2,
	    0x0000, 0x0000, 0x0000, 0x0166, 0x0000,
	};
	uint32_t h[3];

	mi_vector_hash(key, keylen, 0x8e1051e9U, h);
	return (g[h[0] % 789] + g[h[1] % 789]) % 394;
}

const char *
_ti_strid(ssize_t idx)
{

	if ((size_t)idx > __arraycount(_ti_strids))
		return NULL;
	return _ti_strids[idx];
}

ssize_t
_ti_strindex(const char *key)
{
	uint32_t idx;

	idx = _ti_strhash((const unsigned char *)key, strlen(key));
	if (idx > __arraycount(_ti_strids) ||
	    strcmp(key, _ti_strids[idx]) != 0)
		return -1;
	return idx;
}
