From 3ae75434dbb47c1dd252258f085720fda436822c Mon Sep 17 00:00:00 2001 From: Thomas Baumann Date: Fri, 16 Dec 2022 16:59:34 +0100 Subject: [PATCH 01/34] Started introducing defaults to a advection --- pySDC/core/Level.py | 2 +- pySDC/core/Problem.py | 9 +- pySDC/helpers/problem_helper.py | 14 +-- .../AdvectionEquation_ND_FD.py | 100 +++++++++--------- 4 files changed, 62 insertions(+), 63 deletions(-) diff --git a/pySDC/core/Level.py b/pySDC/core/Level.py index eb52929110..bc96da6bab 100644 --- a/pySDC/core/Level.py +++ b/pySDC/core/Level.py @@ -70,7 +70,7 @@ def __init__(self, problem_class, problem_params, sweeper_class, sweeper_params, # instantiate sweeper, problem and hooks self.__sweep = sweeper_class(sweeper_params) - self.__prob = problem_class(problem_params) + self.__prob = problem_class(**problem_params) # set level parameters and status self.params = _Pars(level_params) diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index 7812235d97..5d965a36d6 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -25,18 +25,17 @@ class ptype(object): dtype_f: RHS data type """ - def __init__(self, init, dtype_u, dtype_f, params): + def __init__(self, init, dtype_u, dtype_f, **kwargs): """ - Initialization routine + Initialization routine. + Add the problem parameters as keyword arguments. Args: init: number of degrees-of-freedom (whatever this may represent) dtype_u: variable data type dtype_f: RHS data type - params (dict): set or parameters """ - - self.params = _Pars(params) + self.params = _Pars(kwargs) # set up logger self.logger = logging.getLogger('problem') diff --git a/pySDC/helpers/problem_helper.py b/pySDC/helpers/problem_helper.py index ee9514bc8b..078c43f2b4 100644 --- a/pySDC/helpers/problem_helper.py +++ b/pySDC/helpers/problem_helper.py @@ -2,25 +2,25 @@ from scipy.special import factorial -def get_finite_difference_stencil(derivative, order, type=None, steps=None): +def get_finite_difference_stencil(derivative, order, stencil_type=None, steps=None): """ Derive general finite difference stencils from Taylor expansions """ if steps is not None: n = len(steps) - elif type == 'center': + elif stencil_type == 'center': n = order + derivative - (derivative + 1) % 2 // 1 steps = np.arange(n) - n // 2 - elif type == 'forward': + elif stencil_type == 'forward': n = order + derivative steps = np.arange(n) - elif type == 'backward': + elif stencil_type == 'backward': n = order + derivative steps = -np.arange(n) else: raise ValueError( - f'Stencil must be of type "center", "forward" or "backward", not {type}. If you want something\ + f'Stencil must be of type "center", "forward" or "backward", not {stencil_type}. If you want something\ else, you can also give specific steps.' ) @@ -42,7 +42,7 @@ def get_finite_difference_stencil(derivative, order, type=None, steps=None): def get_finite_difference_matrix( - derivative, order, type=None, steps=None, dx=None, size=None, dim=None, bc=None, cupy=False + derivative, order, stencil_type=None, steps=None, dx=None, size=None, dim=None, bc=None, cupy=False ): """ Build FD matrix from stencils, with boundary conditions @@ -56,7 +56,7 @@ def get_finite_difference_matrix( raise NotImplementedError('Higher order allowed only for periodic boundary conditions') # get stencil - coeff, steps = get_finite_difference_stencil(derivative=derivative, order=order, type=type, steps=steps) + coeff, steps = get_finite_difference_stencil(derivative=derivative, order=order, stencil_type=stencil_type, steps=steps) if bc == 'dirichlet-zero': A_1d = sp.diags(coeff, steps, shape=(size, size), format='csc') diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 82e852c9a1..d89d5d0e88 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -19,79 +19,79 @@ class advectionNd(ptype): dx: distance between two spatial nodes (here: being the same in all dimensions) """ - def __init__(self, problem_params, dtype_u=mesh, dtype_f=mesh): + def __init__(self, nvars=512, c=1.0, freq=2, stencil_type='center', order=2, lintol=1e-12, liniter=10000, direct_solver=True, bc='periodic', ndim=None): """ Initialization routine + Args can be set as values or as tuples, which will increase the dimension. Do, however, take care that all + spatial parameters have the same dimension. + Args: - problem_params (dict): custom parameters for the example - dtype_u: mesh data type (will be passed parent class) - dtype_f: mesh data type (will be passed parent class) + nvars (int): Spatial resolution, can be tuple + c (float): Advection speed, can be tuple + freq (int): Spatial frequency of the initial conditions, can be tuple + stencil_type (str): Type of the finite difference stencil + order (int): Order of the finite difference discretization + lintol (float): Tolerance for spatial solver (GMRES) + liniter (int): Max. iterations for GMRES + direct_solver (bool): Whether to solve directly or use GMRES + bc (str): Boundary conditions + ndim (int): Number of dimensions. Is set automatically if left at None. """ - # these parameters will be used later, so assert their existence - - if 'order' not in problem_params: - problem_params['order'] = 2 - if 'stencil_type' not in problem_params: - problem_params['stencil_type'] = 'center' - if 'lintol' not in problem_params: - problem_params['lintol'] = 1e-12 - if 'liniter' not in problem_params: - problem_params['liniter'] = 10000 - if 'direct_solver' not in problem_params: - problem_params['direct_solver'] = True - - essential_keys = ['nvars', 'c', 'freq', 'type', 'order', 'lintol', 'liniter', 'direct_solver', 'bc'] - for key in essential_keys: - if key not in problem_params: - msg = 'need %s to instantiate problem, only got %s' % (key, str(problem_params.keys())) - raise ParameterError(msg) - # make sure parameters have the correct form - if not (type(problem_params['nvars']) is tuple and type(problem_params['freq']) is tuple) and not ( - type(problem_params['nvars']) is int and type(problem_params['freq']) is int + if not (type(nvars) is tuple and type(freq) is tuple) and not ( + type(nvars) is int and type(freq) is int ): - print(problem_params['nvars'], problem_params['freq']) + print(nvars, freq) raise ProblemError('Type of nvars and freq must be both either int or both tuple') - if 'ndim' not in problem_params: - if type(problem_params['nvars']) is int: - problem_params['ndim'] = 1 - elif type(problem_params['nvars']) is tuple: - problem_params['ndim'] = len(problem_params['nvars']) + if ndim is None: + if type(nvars) is int: + ndim = 1 + elif type(nvars) is tuple: + ndim = len(nvars) - if problem_params['ndim'] > 3: - raise ProblemError(f'can work with up to three dimensions, got {problem_params["ndim"]}') + if ndim > 3: + raise ProblemError(f'can work with up to three dimensions, got {ndim}') - if type(problem_params['freq']) is tuple: - for freq in problem_params['freq']: - if freq % 2 != 0 and problem_params['bc'] == 'periodic': + if type(freq) is tuple: + for f in freq: + if f % 2 != 0 and bc == 'periodic': raise ProblemError('need even number of frequencies due to periodic BCs') else: - if problem_params['freq'] % 2 != 0 and problem_params['bc'] == 'periodic': + if freq % 2 != 0 and bc == 'periodic': raise ProblemError('need even number of frequencies due to periodic BCs') - if type(problem_params['nvars']) is tuple: - for nvars in problem_params['nvars']: - if nvars % 2 != 0 and problem_params['bc'] == 'periodic': + if type(nvars) is tuple: + for nvar in nvars: + if nvar % 2 != 0 and bc == 'periodic': raise ProblemError('the setup requires nvars = 2^p per dimension') - if (nvars + 1) % 2 != 0 and problem_params['bc'] == 'dirichlet-zero': + if (nvar + 1) % 2 != 0 and bc == 'dirichlet-zero': raise ProblemError('setup requires nvars = 2^p - 1') - if problem_params['nvars'][1:] != problem_params['nvars'][:-1]: - raise ProblemError('need a square domain, got %s' % problem_params['nvars']) + if nvars[1:] != nvars[:-1]: + raise ProblemError('need a square domain, got %s' % nvars) else: - if problem_params['nvars'] % 2 != 0 and problem_params['bc'] == 'periodic': + if nvars % 2 != 0 and bc == 'periodic': raise ProblemError('the setup requires nvars = 2^p per dimension') - if (problem_params['nvars'] + 1) % 2 != 0 and problem_params['bc'] == 'dirichlet-zero': + if (nvars + 1) % 2 != 0 and bc == 'dirichlet-zero': raise ProblemError('setup requires nvars = 2^p - 1') # invoke super init, passing number of dofs, dtype_u and dtype_f super(advectionNd, self).__init__( - init=(problem_params['nvars'], None, np.dtype('float64')), - dtype_u=dtype_u, - dtype_f=dtype_f, - params=problem_params, + init=(nvars, None, np.dtype('float64')), + dtype_u=mesh, + dtype_f=mesh, + nvars=nvars, + c=c, + freq=freq, + stencil_type=stencil_type, + order=order, + lintol=lintol, + liniter=liniter, + direct_solver=direct_solver, + bc=bc, + ndim=ndim, ) if self.params.ndim == 1: @@ -113,7 +113,7 @@ def __init__(self, problem_params, dtype_u=mesh, dtype_f=mesh): self.A = problem_helper.get_finite_difference_matrix( derivative=1, order=self.params.order, - type=self.params.stencil_type, + stencil_type=self.params.stencil_type, dx=self.dx, size=self.params.nvars[0], dim=self.params.ndim, From 090af967be51669f6ac44524504fe5de1f641272 Mon Sep 17 00:00:00 2001 From: Thomas Baumann Date: Mon, 9 Jan 2023 12:58:35 +0100 Subject: [PATCH 02/34] Removed `**kwargs` from the core problem class --- pySDC/core/Problem.py | 2 +- pySDC/helpers/problem_helper.py | 4 +++- .../problem_classes/AdvectionEquation_ND_FD.py | 18 ++++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index 5d965a36d6..e325b186a2 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -25,7 +25,7 @@ class ptype(object): dtype_f: RHS data type """ - def __init__(self, init, dtype_u, dtype_f, **kwargs): + def __init__(self, init, dtype_u, dtype_f): """ Initialization routine. Add the problem parameters as keyword arguments. diff --git a/pySDC/helpers/problem_helper.py b/pySDC/helpers/problem_helper.py index 5437d38ce1..922eb394b0 100644 --- a/pySDC/helpers/problem_helper.py +++ b/pySDC/helpers/problem_helper.py @@ -91,7 +91,9 @@ def get_finite_difference_matrix( raise NotImplementedError('Higher order allowed only for periodic boundary conditions') # get stencil - coeff, steps = get_finite_difference_stencil(derivative=derivative, order=order, stencil_type=stencil_type, steps=steps) + coeff, steps = get_finite_difference_stencil( + derivative=derivative, order=order, stencil_type=stencil_type, steps=steps + ) if bc == 'dirichlet-zero': A_1d = sp.diags(coeff, steps, shape=(size, size), format='csc') diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 39d2ad36d1..d6f0e3fc52 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -19,7 +19,19 @@ class advectionNd(ptype): dx: distance between two spatial nodes (here: being the same in all dimensions) """ - def __init__(self, nvars=512, c=1.0, freq=2, stencil_type='center', order=2, lintol=1e-12, liniter=10000, direct_solver=True, bc='periodic', ndim=None): + def __init__( + self, + nvars=512, + c=1.0, + freq=2, + stencil_type='center', + order=2, + lintol=1e-12, + liniter=10000, + direct_solver=True, + bc='periodic', + ndim=None, + ): """ Initialization routine @@ -40,9 +52,7 @@ def __init__(self, nvars=512, c=1.0, freq=2, stencil_type='center', order=2, lin """ # make sure parameters have the correct form - if not (type(nvars) is tuple and type(freq) is tuple) and not ( - type(nvars) is int and type(freq) is int - ): + if not (type(nvars) is tuple and type(freq) is tuple) and not (type(nvars) is int and type(freq) is int): print(nvars, freq) raise ProblemError('Type of nvars and freq must be both either int or both tuple') From edccb25a0b52c67b9d93fee68bd088f97934897f Mon Sep 17 00:00:00 2001 From: Thomas Baumann Date: Mon, 9 Jan 2023 13:00:13 +0100 Subject: [PATCH 03/34] Put back the `**kwargs` :P --- pySDC/core/Problem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index e325b186a2..5d965a36d6 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -25,7 +25,7 @@ class ptype(object): dtype_f: RHS data type """ - def __init__(self, init, dtype_u, dtype_f): + def __init__(self, init, dtype_u, dtype_f, **kwargs): """ Initialization routine. Add the problem parameters as keyword arguments. From 706533adbf346936dc4662755467061ab4fa1673 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Thu, 12 Jan 2023 14:01:33 +0100 Subject: [PATCH 04/34] TL: trying solution to replace frozenclass --- pySDC/core/Controller.py | 11 +- pySDC/core/Problem.py | 24 ++-- .../AdvectionEquation_ND_FD.py | 123 +++++++++--------- 3 files changed, 75 insertions(+), 83 deletions(-) diff --git a/pySDC/core/Controller.py b/pySDC/core/Controller.py index 469297e126..53451ff4d7 100644 --- a/pySDC/core/Controller.py +++ b/pySDC/core/Controller.py @@ -165,12 +165,11 @@ def dump_setup(self, step, controller_params, description): else: out += ' %s = %s\n' % (k, v) out += '--> Problem: %s\n' % L.prob.__class__ - for k, v in vars(L.prob.params).items(): - if not k.startswith('_'): - if k in description['problem_params']: - out += '--> %s = %s\n' % (k, v) - else: - out += ' %s = %s\n' % (k, v) + for k, v in L.prob.params.items(): + if k in description['problem_params']: + out += '--> %s = %s\n' % (k, v) + else: + out += ' %s = %s\n' % (k, v) out += '--> Data type u: %s\n' % L.prob.dtype_u out += '--> Data type f: %s\n' % L.prob.dtype_f out += '--> Sweeper: %s\n' % L.sweep.__class__ diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index 5d965a36d6..68253768ea 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -1,19 +1,19 @@ import logging -from pySDC.helpers.pysdc_helper import FrozenClass +# parent class that register some class attributes in a list of paramters +class RegisterParams(object): + def _register(self, *parNames): + if not hasattr(self, '_parNames'): + self._parNames = [] + self._parNames += parNames -# short helper class to add params as attributes -class _Pars(FrozenClass): - def __init__(self, pars): + @property + def params(self): + return {name: getattr(self, name) for name in self._parNames} - for k, v in pars.items(): - setattr(self, k, v) - self._freeze() - - -class ptype(object): +class ptype(RegisterParams): """ Prototype class for problems, just defines the attributes essential to get started @@ -25,7 +25,7 @@ class ptype(object): dtype_f: RHS data type """ - def __init__(self, init, dtype_u, dtype_f, **kwargs): + def __init__(self, init, dtype_u, dtype_f): """ Initialization routine. Add the problem parameters as keyword arguments. @@ -35,8 +35,6 @@ def __init__(self, init, dtype_u, dtype_f, **kwargs): dtype_u: variable data type dtype_f: RHS data type """ - self.params = _Pars(kwargs) - # set up logger self.logger = logging.getLogger('problem') diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index d6f0e3fc52..2928e944da 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -2,7 +2,7 @@ import scipy.sparse as sp from scipy.sparse.linalg import gmres, spsolve -from pySDC.core.Errors import ParameterError, ProblemError +from pySDC.core.Errors import ProblemError from pySDC.core.Problem import ptype from pySDC.helpers import problem_helper from pySDC.implementations.datatype_classes.mesh import mesh @@ -30,13 +30,12 @@ def __init__( liniter=10000, direct_solver=True, bc='periodic', - ndim=None, ): """ Initialization routine - Args can be set as values or as tuples, which will increase the dimension. Do, however, take care that all - spatial parameters have the same dimension. + Args can be set as values or as tuples, which will increase the dimension. + Do, however, take care that all spatial parameters have the same dimension. Args: nvars (int): Spatial resolution, can be tuple @@ -48,91 +47,87 @@ def __init__( liniter (int): Max. iterations for GMRES direct_solver (bool): Whether to solve directly or use GMRES bc (str): Boundary conditions - ndim (int): Number of dimensions. Is set automatically if left at None. """ - # make sure parameters have the correct form - if not (type(nvars) is tuple and type(freq) is tuple) and not (type(nvars) is int and type(freq) is int): - print(nvars, freq) - raise ProblemError('Type of nvars and freq must be both either int or both tuple') + # make sure parameters have the correct types + if not type(nvars) in [int, tuple]: + raise ProblemError('nvars should be either tuple or int') + if not type(freq) in [int, tuple]: + raise ProblemError('freq should be either tuple or int') - if ndim is None: - if type(nvars) is int: - ndim = 1 - elif type(nvars) is tuple: - ndim = len(nvars) + # transforms nvars into a tuple + if type(nvars) is int: + nvars = (nvars,) + # automatically determine ndim from nvars + ndim = len(nvars) if ndim > 3: raise ProblemError(f'can work with up to three dimensions, got {ndim}') - if type(freq) is tuple: - for f in freq: - if f % 2 != 0 and bc == 'periodic': - raise ProblemError('need even number of frequencies due to periodic BCs') - else: - if freq % 2 != 0 and freq != -1 and bc == 'periodic': - raise ProblemError('need even number of frequencies due to periodic BCs') + # eventually extend freq to other dimension + if type(freq) is int: + freq = (freq,) * ndim + if len(freq) != ndim: + raise ProblemError(f'len(freq)={len(freq)}, different to ndim={ndim}') - if type(nvars) is tuple: - for nvar in nvars: - if nvar % 2 != 0 and bc == 'periodic': - raise ProblemError('the setup requires nvars = 2^p per dimension') - if (nvar + 1) % 2 != 0 and bc == 'dirichlet-zero': - raise ProblemError('setup requires nvars = 2^p - 1') - if nvars[1:] != nvars[:-1]: - raise ProblemError('need a square domain, got %s' % nvars) - else: - if nvars % 2 != 0 and bc == 'periodic': + # check values for freq and nvars + for f in freq: + if f % 2 != 0 and bc == 'periodic': + raise ProblemError('need even number of frequencies due to periodic BCs') + for nvar in nvars: + if nvar % 2 != 0 and bc == 'periodic': raise ProblemError('the setup requires nvars = 2^p per dimension') - if (nvars + 1) % 2 != 0 and bc == 'dirichlet-zero': + if (nvar + 1) % 2 != 0 and bc == 'dirichlet-zero': raise ProblemError('setup requires nvars = 2^p - 1') + if ndim > 1 and nvars[1:] != nvars[:-1]: + raise ProblemError('need a square domain, got %s' % nvars) # invoke super init, passing number of dofs, dtype_u and dtype_f - super(advectionNd, self).__init__( + super().__init__( init=(nvars, None, np.dtype('float64')), dtype_u=mesh, dtype_f=mesh, - nvars=nvars, - c=c, - freq=freq, - stencil_type=stencil_type, - order=order, - lintol=lintol, - liniter=liniter, - direct_solver=direct_solver, - bc=bc, - ndim=ndim, ) - if self.params.ndim == 1: - if type(self.params.nvars) is not tuple: - self.params.nvars = (self.params.nvars,) - if type(self.params.freq) is not tuple: - self.params.freq = (self.params.freq,) - # compute dx (equal in both dimensions) and get discretization matrix A - if self.params.bc == 'periodic': - self.dx = 1.0 / self.params.nvars[0] - xvalues = np.array([i * self.dx for i in range(self.params.nvars[0])]) - elif self.params.bc == 'dirichlet-zero': - self.dx = 1.0 / (self.params.nvars[0] + 1) - xvalues = np.array([(i + 1) * self.dx for i in range(self.params.nvars[0])]) + if bc == 'periodic': + xvalues = np.linspace(0, 1, num=nvars[0], endpoint=False) + elif bc == 'dirichlet-zero': + xvalues = np.linspace(0, 1, num=nvars[0] + 2)[1:-1] else: raise ProblemError(f'Boundary conditions {self.params.bc} not implemented.') + dx = xvalues[1] - xvalues[0] self.A = problem_helper.get_finite_difference_matrix( derivative=1, - order=self.params.order, - stencil_type=self.params.stencil_type, - dx=self.dx, - size=self.params.nvars[0], - dim=self.params.ndim, - bc=self.params.bc, + order=order, + stencil_type=stencil_type, + dx=dx, + size=nvars[0], + dim=ndim, + bc=bc, ) - self.A *= -self.params.c + self.A *= -c + + self.xv = np.meshgrid(*[xvalues for _ in range(ndim)]) + self.Id = sp.eye(np.prod(nvars), format='csc') + + # store relevant attributes + self.c, self.freq, self.dx = c, freq, dx + self.stencil_type, self.order = stencil_type, order + self.lintol, self.liniter = lintol, liniter + self.direct_solver, self.bc = direct_solver, bc + + # register parameters + self._register('nvars', 'c', 'freq', 'stencil_type', 'order', 'lintol', 'liniter', 'direct_solver', 'bc') + + @property + def ndim(self): + return len(self.xv) - self.xv = np.meshgrid(*[xvalues for _ in range(self.params.ndim)]) - self.Id = sp.eye(np.prod(self.params.nvars), format='csc') + @property + def nvars(self): + return self.xv[0].shape def eval_f(self, u, t): """ From 5b7f53584058f3071aa94bcfaaad17fd5f29aa38 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Fri, 13 Jan 2023 14:03:00 +0100 Subject: [PATCH 05/34] TL: reintroduced Gauss initial solution in advectionNd (1D) --- pySDC/core/Collocation.py | 2 - .../AdvectionEquation_ND_FD.py | 68 +++++++++++-------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/pySDC/core/Collocation.py b/pySDC/core/Collocation.py index d7a7383fee..4779ae3a3e 100644 --- a/pySDC/core/Collocation.py +++ b/pySDC/core/Collocation.py @@ -1,7 +1,5 @@ import logging - import numpy as np -import scipy.interpolate as intpl from pySDC.core.Nodes import NodesGenerator from pySDC.core.Errors import CollocationError diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 2928e944da..08d235f979 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -30,6 +30,7 @@ def __init__( liniter=10000, direct_solver=True, bc='periodic', + sigma=6e-2, ): """ Initialization routine @@ -72,6 +73,10 @@ def __init__( # check values for freq and nvars for f in freq: + if ndim == 1 and f == -1: + # use Gaussian initial solution in 1D + bc == 'periodic' + break if f % 2 != 0 and bc == 'periodic': raise ProblemError('need even number of frequencies due to periodic BCs') for nvar in nvars: @@ -113,7 +118,7 @@ def __init__( self.Id = sp.eye(np.prod(nvars), format='csc') # store relevant attributes - self.c, self.freq, self.dx = c, freq, dx + self.c, self.freq, self.sigma, self.dx = c, freq, sigma, dx self.stencil_type, self.order = stencil_type, order self.lintol, self.liniter = lintol, liniter self.direct_solver, self.bc = direct_solver, bc @@ -142,7 +147,7 @@ def eval_f(self, u, t): """ f = self.dtype_f(self.init) - f[:] = self.A.dot(u.flatten()).reshape(self.params.nvars) + f[:] = self.A.dot(u.flatten()).reshape(self.nvars) return f def solve_system(self, rhs, factor, u0, t): @@ -158,20 +163,23 @@ def solve_system(self, rhs, factor, u0, t): Returns: dtype_u: solution as mesh """ - + direct_solver, Id, A, nvars, lintol, liniter = ( + self.direct_solver, + self.Id, + self.A, + self.nvars, + self.lintol, + self.liniter, + ) me = self.dtype_u(self.init) - if self.params.direct_solver: - me[:] = spsolve(self.Id - factor * self.A, rhs.flatten()).reshape(self.params.nvars) + if direct_solver: + me[:] = spsolve(Id - factor * A, rhs.flatten()).reshape(nvars) else: - me[:] = gmres( - self.Id - factor * self.A, - rhs.flatten(), - x0=u0.flatten(), - tol=self.params.lintol, - maxiter=self.params.liniter, - atol=0, - )[0].reshape(self.params.nvars) + me[:] = gmres(Id - factor * A, rhs.flatten(), x0=u0.flatten(), tol=lintol, maxiter=liniter, atol=0,)[ + 0 + ].reshape(nvars) + return me def u_exact(self, t, **kwargs): @@ -182,24 +190,26 @@ def u_exact(self, t, **kwargs): t (float): current time Returns: - dtype_u: exact solution + me: exact solution """ - + # Initialize pointers and variables + ndim, freq, xv, c, sigma = self.ndim, self.freq, self.xv, self.c, self.sigma me = self.dtype_u(self.init) - if self.params.ndim == 1: - if self.params.freq[0] >= 0: - me[:] = np.sin(np.pi * self.params.freq[0] * (self.xv[0] - self.params.c * t)) - elif self.params.freq[0] == -1: - me[:] = np.exp(-0.5 * (((self.xv[0] - (self.params.c * t)) % 1.0 - 0.5) / self.params.sigma) ** 2) - - elif self.params.ndim == 2: - me[:] = np.sin(np.pi * self.params.freq[0] * (self.xv[0] - self.params.c * t)) * np.sin( - np.pi * self.params.freq[1] * (self.xv[1] - self.params.c * t) - ) - elif self.params.ndim == 3: + + if ndim == 1: + if freq[0] >= 0: + me[:] = np.sin(np.pi * freq[0] * (xv[0] - c * t)) + elif freq[0] == -1: + # Gaussian initial solution + me[:] = np.exp(-0.5 * (((xv[0] - (c * t)) % 1.0 - 0.5) / sigma) ** 2) + + elif ndim == 2: + me[:] = np.sin(np.pi * freq[0] * (xv[0] - c * t)) * np.sin(np.pi * freq[1] * (xv[1] - c * t)) + elif ndim == 3: me[:] = ( - np.sin(np.pi * self.params.freq[0] * (self.xv[0] - self.params.c * t)) - * np.sin(np.pi * self.params.freq[1] * (self.xv[1] - self.params.c * t)) - * np.sin(np.pi * self.params.freq[2] * (self.xv[2] - self.params.c * t)) + np.sin(np.pi * freq[0] * (xv[0] - c * t)) + * np.sin(np.pi * freq[1] * (xv[1] - c * t)) + * np.sin(np.pi * freq[2] * (xv[2] - c * t)) ) + return me From 7bbf286850120ee2e9333b2a9291afbc2b8c73cf Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Fri, 13 Jan 2023 14:41:18 +0100 Subject: [PATCH 06/34] TL: cleaned implementation of advectionNd --- .../AdvectionEquation_ND_FD.py | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 08d235f979..4d898ab42a 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -114,25 +114,42 @@ def __init__( ) self.A *= -c - self.xv = np.meshgrid(*[xvalues for _ in range(ndim)]) + self.xvalues = xvalues self.Id = sp.eye(np.prod(nvars), format='csc') # store relevant attributes - self.c, self.freq, self.sigma, self.dx = c, freq, sigma, dx - self.stencil_type, self.order = stencil_type, order - self.lintol, self.liniter = lintol, liniter - self.direct_solver, self.bc = direct_solver, bc + self.freq, self.sigma = freq, sigma + self.lintol, self.liniter, self.direct_solve = lintol, liniter, direct_solver + + # read-only attributes + self._readOnly = [ndim, c, stencil_type, order] # register parameters self._register('nvars', 'c', 'freq', 'stencil_type', 'order', 'lintol', 'liniter', 'direct_solver', 'bc') @property def ndim(self): - return len(self.xv) + return self._readOnly[0] + + @property + def c(self): + return self._readOnly[1] + + @property + def stencil_type(self): + return self._readOnly[2] + + @property + def order(self): + return self._readOnly[3] @property def nvars(self): - return self.xv[0].shape + return (self.xvalues.size,) * self.ndim + + @property + def bc(self): + return 'periodic' if self.xvalue[0] == 0 else 'dirichlet-zero' def eval_f(self, u, t): """ @@ -193,23 +210,24 @@ def u_exact(self, t, **kwargs): me: exact solution """ # Initialize pointers and variables - ndim, freq, xv, c, sigma = self.ndim, self.freq, self.xv, self.c, self.sigma + ndim, freq, x, c, sigma = self.ndim, self.freq, self.xvalues, self.c, self.sigma me = self.dtype_u(self.init) if ndim == 1: if freq[0] >= 0: - me[:] = np.sin(np.pi * freq[0] * (xv[0] - c * t)) + me[:] = np.sin(np.pi * freq[0] * (x - c * t)) elif freq[0] == -1: # Gaussian initial solution - me[:] = np.exp(-0.5 * (((xv[0] - (c * t)) % 1.0 - 0.5) / sigma) ** 2) + me[:] = np.exp(-0.5 * (((x - (c * t)) % 1.0 - 0.5) / sigma) ** 2) elif ndim == 2: - me[:] = np.sin(np.pi * freq[0] * (xv[0] - c * t)) * np.sin(np.pi * freq[1] * (xv[1] - c * t)) + me[:] = np.sin(np.pi * freq[0] * (x[None, :] - c * t)) * np.sin(np.pi * freq[1] * (x[:, None] - c * t)) + elif ndim == 3: me[:] = ( - np.sin(np.pi * freq[0] * (xv[0] - c * t)) - * np.sin(np.pi * freq[1] * (xv[1] - c * t)) - * np.sin(np.pi * freq[2] * (xv[2] - c * t)) + np.sin(np.pi * freq[0] * (x[None, :, None] - c * t)) + * np.sin(np.pi * freq[1] * (x[:, None, None] - c * t)) + * np.sin(np.pi * freq[2] * (x[None, None, :] - c * t)) ) return me From 510d9695c2bbebea135fd4a9a437a2e15605bf6c Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Fri, 13 Jan 2023 14:44:38 +0100 Subject: [PATCH 07/34] TL: appreciating flakeheaven help on this one ;) --- .../implementations/problem_classes/AdvectionEquation_ND_FD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 4d898ab42a..6b8c5335cc 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -75,7 +75,7 @@ def __init__( for f in freq: if ndim == 1 and f == -1: # use Gaussian initial solution in 1D - bc == 'periodic' + bc = 'periodic' break if f % 2 != 0 and bc == 'periodic': raise ProblemError('need even number of frequencies due to periodic BCs') From 7a24e72143ce979e9ed258cae6ff788eb799df5f Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Fri, 13 Jan 2023 14:49:48 +0100 Subject: [PATCH 08/34] TL: readOnly to dictionnary --- .../problem_classes/AdvectionEquation_ND_FD.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 6b8c5335cc..406cb67b17 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -122,30 +122,26 @@ def __init__( self.lintol, self.liniter, self.direct_solve = lintol, liniter, direct_solver # read-only attributes - self._readOnly = [ndim, c, stencil_type, order] + self._readOnly = dict( + ndim=ndim, c=c, stencil_type=stencil_type, order=order) # register parameters self._register('nvars', 'c', 'freq', 'stencil_type', 'order', 'lintol', 'liniter', 'direct_solver', 'bc') @property - def ndim(self): - return self._readOnly[0] + def ndim(self): return self._readOnly['ndim'] @property - def c(self): - return self._readOnly[1] + def c(self): return self._readOnly['c'] @property - def stencil_type(self): - return self._readOnly[2] + def stencil_type(self): return self._readOnly['stencil_type'] @property - def order(self): - return self._readOnly[3] + def order(self): return self._readOnly['order'] @property - def nvars(self): - return (self.xvalues.size,) * self.ndim + def nvars(self): return (self.xvalues.size,) * self.ndim @property def bc(self): From c86e478ca13bc0cb74ac5edad40f81a1040e3073 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Fri, 13 Jan 2023 14:54:38 +0100 Subject: [PATCH 09/34] TL: better _readOnly instantiation --- .../problem_classes/AdvectionEquation_ND_FD.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 406cb67b17..2e3e7e89d4 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -122,8 +122,9 @@ def __init__( self.lintol, self.liniter, self.direct_solve = lintol, liniter, direct_solver # read-only attributes - self._readOnly = dict( - ndim=ndim, c=c, stencil_type=stencil_type, order=order) + self._readOnly = { + name: eval(name) + for name in ['ndim', 'c', 'stencil_type', 'order']} # register parameters self._register('nvars', 'c', 'freq', 'stencil_type', 'order', 'lintol', 'liniter', 'direct_solver', 'bc') From 1c41e0aa132a0793e91685b638c9340768bddbe6 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Fri, 13 Jan 2023 16:18:26 +0100 Subject: [PATCH 10/34] TL: tried to simplifiy read-only parameters --- pySDC/core/Problem.py | 33 +++++++++++++++---- .../AdvectionEquation_ND_FD.py | 31 +++-------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index 68253768ea..9b9eb5b193 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -1,16 +1,37 @@ import logging -# parent class that register some class attributes in a list of paramters +class ReadOnlyError(Exception): + """Exception class thrown when setting read-only parameters""" + + def __init__(self, name): + super().__init__(f'cannot set read-only attribute {name}') + + class RegisterParams(object): - def _register(self, *parNames): - if not hasattr(self, '_parNames'): - self._parNames = [] - self._parNames += parNames + """Base class to register parameters""" + + def _register(self, *names, readOnly=False): + if readOnly: + if not hasattr(self, '_readOnly'): + self._readOnly = set() + self._readOnly = self._readOnly.union(names) + else: + if not hasattr(self, '_parNames'): + self._parNames = set() + self._parNames = self._parNames.union(names) @property def params(self): - return {name: getattr(self, name) for name in self._parNames} + return {name: getattr(self, name) for name in self._readOnly.union(self._parNames)} + + def __setattr__(self, name, value): + try: + if name in self._readOnly: + raise ReadOnlyError(name) + except AttributeError: + pass + super().__setattr__(name, value) class ptype(RegisterParams): diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 2e3e7e89d4..ee01be5ddf 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -118,35 +118,14 @@ def __init__( self.Id = sp.eye(np.prod(nvars), format='csc') # store relevant attributes + self.ndim, self.c = ndim, c + self.stencil_type, self.order, self.bc = stencil_type, order, bc self.freq, self.sigma = freq, sigma - self.lintol, self.liniter, self.direct_solve = lintol, liniter, direct_solver - - # read-only attributes - self._readOnly = { - name: eval(name) - for name in ['ndim', 'c', 'stencil_type', 'order']} + self.lintol, self.liniter, self.direct_solver = lintol, liniter, direct_solver # register parameters - self._register('nvars', 'c', 'freq', 'stencil_type', 'order', 'lintol', 'liniter', 'direct_solver', 'bc') - - @property - def ndim(self): return self._readOnly['ndim'] - - @property - def c(self): return self._readOnly['c'] - - @property - def stencil_type(self): return self._readOnly['stencil_type'] - - @property - def order(self): return self._readOnly['order'] - - @property - def nvars(self): return (self.xvalues.size,) * self.ndim - - @property - def bc(self): - return 'periodic' if self.xvalue[0] == 0 else 'dirichlet-zero' + self._register('nvars', 'ndim', 'c', 'stencil_type', 'order', 'bc', readOnly=True) + self._register('freq', 'gamma', 'lintol', 'liniter', 'direct_solver') def eval_f(self, u, t): """ From d6dfe6a16bf58c61a55597656c4342252c3f2b31 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 13:10:36 +0100 Subject: [PATCH 11/34] TL: moved RegisterParams and ReadOnlyError classes in proper modules --- pySDC/core/Common.py | 51 +++++++++++++++++++++++++++++++++++++++++++ pySDC/core/Errors.py | 9 ++++++++ pySDC/core/Problem.py | 33 +--------------------------- 3 files changed, 61 insertions(+), 32 deletions(-) create mode 100644 pySDC/core/Common.py diff --git a/pySDC/core/Common.py b/pySDC/core/Common.py new file mode 100644 index 0000000000..ef21ab3d29 --- /dev/null +++ b/pySDC/core/Common.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Description +----------- + +Module containing utility classe(s) from which inherit some of the pySDC base +classes. +""" +from pySDC.core.Errors import ReadOnlyError + + +class RegisterParams(object): + """Base class to register parameters""" + + def _register(self, *names, readOnly=False): + """ + Register class attributes as + + Parameters + ---------- + *names : TYPE + DESCRIPTION. + readOnly : TYPE, optional + DESCRIPTION. The default is False. + + Returns + ------- + None. + + """ + if readOnly: + if not hasattr(self, '_readOnly'): + self._readOnly = set() + self._readOnly = self._readOnly.union(names) + else: + if not hasattr(self, '_parNames'): + self._parNames = set() + self._parNames = self._parNames.union(names) + + @property + def params(self): + return {name: getattr(self, name) for name in self._readOnly.union(self._parNames)} + + def __setattr__(self, name, value): + try: + if name in self._readOnly: + raise ReadOnlyError(name) + except AttributeError: + pass + super().__setattr__(name, value) diff --git a/pySDC/core/Errors.py b/pySDC/core/Errors.py index 799aa48f7a..5f0ebb2c28 100644 --- a/pySDC/core/Errors.py +++ b/pySDC/core/Errors.py @@ -60,3 +60,12 @@ class ProblemError(Exception): """ pass + + +class ReadOnlyError(Exception): + """ + Exception thrown when setting a read-only class attribute + """ + + def __init__(self, name): + super().__init__(f'cannot set read-only attribute {name}') diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index 9b9eb5b193..5cf282c96b 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -1,37 +1,6 @@ import logging - -class ReadOnlyError(Exception): - """Exception class thrown when setting read-only parameters""" - - def __init__(self, name): - super().__init__(f'cannot set read-only attribute {name}') - - -class RegisterParams(object): - """Base class to register parameters""" - - def _register(self, *names, readOnly=False): - if readOnly: - if not hasattr(self, '_readOnly'): - self._readOnly = set() - self._readOnly = self._readOnly.union(names) - else: - if not hasattr(self, '_parNames'): - self._parNames = set() - self._parNames = self._parNames.union(names) - - @property - def params(self): - return {name: getattr(self, name) for name in self._readOnly.union(self._parNames)} - - def __setattr__(self, name, value): - try: - if name in self._readOnly: - raise ReadOnlyError(name) - except AttributeError: - pass - super().__setattr__(name, value) +from pySDC.core.Common import RegisterParams class ptype(RegisterParams): From e829f9dd6626d6bf35aa382e6b78bb64ce7e665e Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 13:12:35 +0100 Subject: [PATCH 12/34] TL: minor correction --- .../implementations/problem_classes/AdvectionEquation_ND_FD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index ee01be5ddf..25bae5aabe 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -118,7 +118,7 @@ def __init__( self.Id = sp.eye(np.prod(nvars), format='csc') # store relevant attributes - self.ndim, self.c = ndim, c + self.nvars, self.ndim, self.c = nvars, ndim, c self.stencil_type, self.order, self.bc = stencil_type, order, bc self.freq, self.sigma = freq, sigma self.lintol, self.liniter, self.direct_solver = lintol, liniter, direct_solver From 3557e2296e7727eae60850482b639b81ea50494e Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 13:14:36 +0100 Subject: [PATCH 13/34] TL: other minor bug --- .../implementations/problem_classes/AdvectionEquation_ND_FD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 25bae5aabe..dbb0340711 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -125,7 +125,7 @@ def __init__( # register parameters self._register('nvars', 'ndim', 'c', 'stencil_type', 'order', 'bc', readOnly=True) - self._register('freq', 'gamma', 'lintol', 'liniter', 'direct_solver') + self._register('freq', 'sigma', 'lintol', 'liniter', 'direct_solver') def eval_f(self, u, t): """ From 8be455976db604c2c629020baa3f0c4c4a5b296a Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 13:19:12 +0100 Subject: [PATCH 14/34] TL: added datatype initializer for Problem class --- pySDC/core/Problem.py | 8 ++++++++ .../problem_classes/AdvectionEquation_ND_FD.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index 5cf282c96b..d38224fff8 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -33,6 +33,14 @@ def __init__(self, init, dtype_u, dtype_f): self.dtype_u = dtype_u self.dtype_f = dtype_f + @property + def u_init(self): + return self.dtype_u(self.init) + + @property + def f_init(self): + return self.dtype_f(self.init) + def eval_f(self, u, t): """ Abstract interface to RHS computation of the ODE diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index dbb0340711..e96c0cf7d8 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -139,7 +139,7 @@ def eval_f(self, u, t): dtype_f: the RHS """ - f = self.dtype_f(self.init) + f = self.f_init f[:] = self.A.dot(u.flatten()).reshape(self.nvars) return f From 029c64bc69dd2835966a95077d2f612d3da4b89a Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 13:35:25 +0100 Subject: [PATCH 15/34] TL: that's a new one ... --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ede34d02c1..f8bbeb3e87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,7 +78,7 @@ pyflakes = [ '-E203', '-E741', '-E402', '-W504', '-W605', '-F401' ] #flake8-black = ["+*"] -flake8-bugbear = ["+*", '-B023'] +flake8-bugbear = ["+*", '-B023', '-B028'] flake8-comprehensions = ["+*", '-C408', '-C417'] [tool.black] From 3259f7d3bcac66d09d4879680434aac9fd18ef88 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 17:40:29 +0100 Subject: [PATCH 16/34] TL: added first draft for CONTRIBUTING.md --- CONTRIBUTING.md | 10 +++ docs/contrib/01_pull_requests.md | 41 ++++++++++++ docs/contrib/02_continuous_integration.md | 48 +++++++++++++ docs/contrib/03_naming_conventions.md | 82 +++++++++++++++++++++++ docs/contrib/04_custom_implementations.md | 3 + 5 files changed, 184 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 docs/contrib/01_pull_requests.md create mode 100644 docs/contrib/02_continuous_integration.md create mode 100644 docs/contrib/03_naming_conventions.md create mode 100644 docs/contrib/04_custom_implementations.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..ac254dad8b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,10 @@ +# How to contribute to pySDC + +Developments on the `pySDC` code use the classical approach of forks and pull requests from Github. +There is an [extended documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models) on this aspect (that you can skip if you are already used to it). In addition, some recommendations for pull requests are given in [this page](./docs/contrib/01_pull_requests.md). + +Additionnaly, a _few_ rules are set to enforce code readability, consistency and reliability. Some of them are automatically tested with each commit, and summarized in the page on [continuous integration (CI)](./docs/contrib/02_continuous_integration.md). +Others are specific conventions chosen for the pySDC library, that may follow Python standards (or not ...), detailed in the [naming conventions page](./docs/contrib/03_naming_conventions.md). + +Finally, while `pySDC` provides many base functionalities that implement classical flavors of SDC, it also allows problem-specific applications through Object-Oriented Programming (OOP) and the implementation of custom inherited classes. +This follows a specific OOP framework, for which more details are given [here](.(docs/contrib/../../docs/contrib/04_custom_implementations.md)). \ No newline at end of file diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md new file mode 100644 index 0000000000..7d93f162a2 --- /dev/null +++ b/docs/contrib/01_pull_requests.md @@ -0,0 +1,41 @@ +# Recommendations for pull requests + +Contributions on the `pySDC` code is expected to be done through pull requests from personal (public) forked repositories. A few core developpers can eventually push maintenance commits directly to the main repository. However (even for core developpers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. + +## Contributing to the main branch + +The main version of `pySDC` is hosted in the `master` branch, on which any contributor can propose pull requests. Those can consist on : + +- bug fixes and code corrections (_e.g_ solving one of the current [issues](https://github.com/Parallel-in-Time/pySDC/issues)) +- addition or improvement of documentation +- improvement of existing functionalities (performance, accuracy, usage, ...) +- addition of new functionnalities and applications +- improvement of CI test routines + +Pull request should comes from forks branches with a name specific to the contribution. For instance : + +``` +# branch name : +issue214 # to solve issue 214 +awsome_new_project # to add a new project +some_feature # to add a new feature (implementation, ...) +``` + +> :scroll: Favor the use of _short name_ for branch, using _lower case_ and eventuall underscores to ease readability. + +Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. + + +## Release development branches + +Branches with name starting with `v[...]` are developement branches for the next releases of `pySDC` (_e.g_ `v5`, `v6`, ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using `pySDC` (_e.g_ tutorials, projects, ...). Contribution to those branches are done by core developpers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. +Such branches are merged to `master` when ready. + +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branche. + +## Feature development branches + +Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). +Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. + +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. \ No newline at end of file diff --git a/docs/contrib/02_continuous_integration.md b/docs/contrib/02_continuous_integration.md new file mode 100644 index 0000000000..138e72ed45 --- /dev/null +++ b/docs/contrib/02_continuous_integration.md @@ -0,0 +1,48 @@ +# Continuous Integration in pySDC + +Any commit in `pySDC` are tested within by GitHub continuous integration (CI). You can see in in the [action panel](https://github.com/Parallel-in-Time/pySDC/actions) the tests for each branches. +Those tests can be devided in two main categories : code linting and code testing. + +## Code linting + +Code style linting is performed using [`black`](https://black.readthedocs.io/en/stable/) and [`flakeheaven`](https://flakeheaven.readthedocs.io/en/latest/) for code synthax checking. In particular, `black` is used to check compliance with (most of) [PEP-8 guidelines](https://peps.python.org/pep-0008/). + +Those tests are conducted for each commit (even for forks), but you can also run it locally in the root folder of `pySDC` before pushing any commit : + +```bash +# Install required packages (works also with conda/mamba) +pip install black flakeheaven flake8-comprehensions flake8-bugbear +# First : test code style linting with black +black pySDC --check --diff --color +# Second : test code syntax with flakeheaven +flakeheaven lint --benchmark pySDC +``` + +> :bell: To avoid any error about formating (`black`), you can simply use this program to reformat directly your code using the command : +> +> ```bash +> black pySDC +> ``` + +Some style rules that are automatically enforced : + +- lines should be not longer than 120 characters +- arithmetic operators (`+`, `*`, ...) should be separated with variables by one empty space + +# Code testing + +This is done using[ `pytest`](https://docs.pytest.org/en/7.2.x/), and runs all the tests writen in the `pySDC/tests` folder. You can run those locally in the root folder of `pySDC` using : + +```bash +# Install required packages (works also with conda/mamba) +pip install pytest<7.2.0 pytest-benchmark coverage[toml] +# Run tests +pytest -v pySDC/tests +``` + +> :bell: Many components are tested (core, implementations, projects, tutorials, etc ...) which make the testing quite long. +> When working on a single part of the code, you can run only the corresponding part of the test by specifying the test path, for instance : +> +> ```bash +> pytest -v pySDC/tests/test_nodes.py # only test nodes generation +> ``` \ No newline at end of file diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md new file mode 100644 index 0000000000..0f406e93c2 --- /dev/null +++ b/docs/contrib/03_naming_conventions.md @@ -0,0 +1,82 @@ +# Naming conventions in pySDC + +> :scroll: Those rules may not be enforced by the current implementation of pySDC. However, they should be enforced for any contribution. + +Naming convention are mostly inspired from the [PEP-8 guidelines](https://peps.python.org/pep-0008/), even if some of them may be different. Of course, strictly following those rules is not always the best solution, as Guido Von Rossum's key insight states : + +> _A Foolish Consistency is the Hobgoblin of Little Minds_ + +The most important idea at the end is to find a optimal compromise between + +- readability : _Can someone else easily read and understand my code ?_ +- effectiveness : _Does my code avoid kilometers-long lines to do simple things ?_ + +Both aspects are interdependant to ease maintaning/development of any code and improve its attractivity to potential users. + +## Packages and modules names + +Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. + +## Class names + +Class names should use PascalCase formating, for instance : + +```python +class AdvectionDiffusion(Problem): + pass +``` + +The shorter, the better. Also, exception class names should end with the suffix `Error`, for instance + +```python +class ParameterError(Exception): + pass +``` + +## Function and variables names + +Function (or method) and variable names should be lowercase, with words separated by underscores as necessary to improve readability. +Same goes for function arguments. For instance : + +```python +tleft = 1 +quad_type = 'LEGENDRE' + +def compute_fejer_rule(num_nodes): + # ... + +class NodeGenerator(): + def get_orthog_poly_coefficients(self, num_coeff): + # ... +``` + +> :bell: In general, shorter name should be favored, **as long as it does not deteriorate understandability**. For instance, using `get_orthog_poly_coeffs` rather than `get_orthogonal_polynomial_coefficients`. Acronyms can also be used, but with caution (for instance, `mssdc_jac` may not be very explicit for `multistep_sdc_jacobian`). + +## Private and public attributes + +There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object method, can be indicated as private using the `_` prefix. For instance : + +```python +class ChuckNorris(): + + def __init__(self, param): + self.param = param + + def _think(self): + print('...') + + def act(self): + if self.param == 'doubt': + self._think() + print('*?%&$?*ยง"$*$*ยง#{*') +``` + +## Constants + +Constants are usually defined on a module level and written in all capital letters with underscores separating words. +Examples : + +```python +NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] +QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] +``` \ No newline at end of file diff --git a/docs/contrib/04_custom_implementations.md b/docs/contrib/04_custom_implementations.md new file mode 100644 index 0000000000..5e4f011191 --- /dev/null +++ b/docs/contrib/04_custom_implementations.md @@ -0,0 +1,3 @@ +# Custom implementation guidelines + +... in construction ... \ No newline at end of file From e33ae6ad1fef931df8adaee57510a901055e39e1 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 19:12:52 +0100 Subject: [PATCH 17/34] TL: added links and reference in README --- CONTRIBUTING.md | 7 ++++++- README.rst | 11 ++++++++++- docs/contrib/01_pull_requests.md | 5 ++++- docs/contrib/02_continuous_integration.md | 5 ++++- docs/contrib/03_naming_conventions.md | 5 ++++- docs/contrib/04_custom_implementations.md | 5 ++++- 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ac254dad8b..376e38cb3d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,12 @@ # How to contribute to pySDC +1. [Pull Requestion recommendations](./docs/contrib/01_pull_requests.md) +2. [Continuous Integration](./docs/contrib/02_continuous_integration.md) +3. [Naming Conventions](./docs/contrib/03_naming_conventions.md) +4. [Custom Implementations](./docs/contrib/04_custom_implementations.md) + Developments on the `pySDC` code use the classical approach of forks and pull requests from Github. -There is an [extended documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models) on this aspect (that you can skip if you are already used to it). In addition, some recommendations for pull requests are given in [this page](./docs/contrib/01_pull_requests.md). +There is an [extended documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models) on this aspect (that you can skip if you are already used to it). In addition, some recommendations for pull requests are given [here](./docs/contrib/01_pull_requests.md). Additionnaly, a _few_ rules are set to enforce code readability, consistency and reliability. Some of them are automatically tested with each commit, and summarized in the page on [continuous integration (CI)](./docs/contrib/02_continuous_integration.md). Others are specific conventions chosen for the pySDC library, that may follow Python standards (or not ...), detailed in the [naming conventions page](./docs/contrib/03_naming_conventions.md). diff --git a/README.rst b/README.rst index 41ce82469e..88ee55d866 100644 --- a/README.rst +++ b/README.rst @@ -61,7 +61,7 @@ How to cite If you use pySDC or parts of it for your work, great! Let us know if we can help you with this. Also, we would greatly appreciate a citation of `this paper `_: - Robert Speck, **Algorithm 997: pySDC - Prototyping Spectral Deferred Corrections**, + Robert Speck, **Algorithm 997: pySDC - Prototyping Spectral Deferred Corrections**, ACM Transactions on Mathematical Software (TOMS), Volume 45 Issue 3, August 2019, `https://doi.org/10.1145/3310410 `_ @@ -70,6 +70,15 @@ The current software release can be cited using Zenodo: |zenodo| .. |zenodo| image:: https://zenodo.org/badge/26165004.svg :target: https://zenodo.org/badge/latestdoi/26165004 +Contributing +------------ + +`pySDC` code was originaly developped by Robert Speck (@pancetta), +and is now maintained and developed by a small community of scientists interested in SDC methods, +that dearly welcomes any contribution. +If you want to take part of this, please take the time to read our `Contribution Guidelines `. + + Acknowledgements ---------------- diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md index 7d93f162a2..a77168b8b9 100644 --- a/docs/contrib/01_pull_requests.md +++ b/docs/contrib/01_pull_requests.md @@ -38,4 +38,7 @@ Such branches are merged to `master` when ready. Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. -> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. \ No newline at end of file +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. + +[:arrow_left: Back to Contributing Summary](./../../CONTRIBUTING.md) --- +[:arrow_right: Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file diff --git a/docs/contrib/02_continuous_integration.md b/docs/contrib/02_continuous_integration.md index 138e72ed45..c8302f1492 100644 --- a/docs/contrib/02_continuous_integration.md +++ b/docs/contrib/02_continuous_integration.md @@ -45,4 +45,7 @@ pytest -v pySDC/tests > > ```bash > pytest -v pySDC/tests/test_nodes.py # only test nodes generation -> ``` \ No newline at end of file +> ``` + +[:arrow_left: Back to Pull Request Recommendation](./01_pull_requests.md) --- +[:arrow_right: Next to Naming Conventions](./03_naming_conventions.md) \ No newline at end of file diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md index 0f406e93c2..8d79b59d7c 100644 --- a/docs/contrib/03_naming_conventions.md +++ b/docs/contrib/03_naming_conventions.md @@ -79,4 +79,7 @@ Examples : ```python NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] -``` \ No newline at end of file +``` + +[:arrow_left: Back to Continuous Integration](./02_continuous_integration.md) --- +[:arrow_right: Next to Custom Implementations](./04_custom_implementations.md) \ No newline at end of file diff --git a/docs/contrib/04_custom_implementations.md b/docs/contrib/04_custom_implementations.md index 5e4f011191..2dd71e0ffa 100644 --- a/docs/contrib/04_custom_implementations.md +++ b/docs/contrib/04_custom_implementations.md @@ -1,3 +1,6 @@ # Custom implementation guidelines -... in construction ... \ No newline at end of file +... in construction ... + +[:arrow_left: Back to Naming Conventions](./03_naming_conventions.md) --- +[:arrow_right: Next to a cute picture of cat](https://www.vecteezy.com/photo/2098203-silver-tabby-cat-sitting-on-green-background) \ No newline at end of file From 91552c024a930c92c987e363773bf02509020ce1 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 19:30:33 +0100 Subject: [PATCH 18/34] TL: fixing link --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 88ee55d866..26db68a8dc 100644 --- a/README.rst +++ b/README.rst @@ -76,7 +76,7 @@ Contributing `pySDC` code was originaly developped by Robert Speck (@pancetta), and is now maintained and developed by a small community of scientists interested in SDC methods, that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our `Contribution Guidelines `. +If you want to take part of this, please take the time to read our `Contribution Guidelines `_. Acknowledgements @@ -91,4 +91,4 @@ The project also received help from the `Helmholtz Platform for Research Softwar .. |badge-ga| image:: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml/badge.svg :target: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml .. |badge-ossf| image:: https://bestpractices.coreinfrastructure.org/projects/6909/badge - :target: https://bestpractices.coreinfrastructure.org/projects/6909 \ No newline at end of file + :target: https://bestpractices.coreinfrastructure.org/projects/6909 From aaad744a84283ddffa9702e5716a40f4dfb40bc9 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 23:17:06 +0100 Subject: [PATCH 19/34] TL: moved to rst format for contrib --- .gitignore | 3 + CONTRIBUTING.rst | 27 ++++++ README.rst | 3 +- docs/contrib/01_pull_requests.md | 44 --------- docs/contrib/01_pull_requests.rst | 58 ++++++++++++ docs/contrib/02_continuous_integration.md | 51 ----------- docs/contrib/02_continuous_integration.rst | 62 +++++++++++++ docs/contrib/03_naming_conventions.md | 85 ----------------- docs/contrib/03_naming_conventions.rst | 102 +++++++++++++++++++++ docs/contrib/04_custom_implementations.md | 6 -- docs/contrib/04_custom_implementations.rst | 8 ++ 11 files changed, 262 insertions(+), 187 deletions(-) create mode 100644 CONTRIBUTING.rst delete mode 100644 docs/contrib/01_pull_requests.md create mode 100644 docs/contrib/01_pull_requests.rst delete mode 100644 docs/contrib/02_continuous_integration.md create mode 100644 docs/contrib/02_continuous_integration.rst delete mode 100644 docs/contrib/03_naming_conventions.md create mode 100644 docs/contrib/03_naming_conventions.rst delete mode 100644 docs/contrib/04_custom_implementations.md create mode 100644 docs/contrib/04_custom_implementations.rst diff --git a/.gitignore b/.gitignore index 632ce84ad8..719ebdbb1b 100644 --- a/.gitignore +++ b/.gitignore @@ -152,3 +152,6 @@ Temporary Items # jupyter .ipynb_checkpoints + +# VSCode +.vscode diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 0000000000..619ecee2b3 --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,27 @@ + +How to contribute to pySDC +========================== + +#. `Pull Requestion recommendations <./docs/contrib/01_pull_requests.rst>`_ +#. `Continuous Integration <./docs/contrib/02_continuous_integration.rst>`_ +#. `Naming Conventions <./docs/contrib/03_naming_conventions.rst>`_ +#. `Custom Implementations <./docs/contrib/04_custom_implementations.rst>`_ + +Developments on the ``pySDC`` code use the classical approach of forks and pull requests from Github. +There is an `extended documentation `_ +on this aspect (that you can skip if you are already used to it). +In addition, some recommendations for pull requests are given +`here <./docs/contrib/01_pull_requests.rst>`_. + +Additionnaly, a *few* rules are set to enforce code readability, +consistency and reliability. Some of them are automatically tested with each commit, +and summarized in the page on `continuous integration (CI) <./docs/contrib/02_continuous_integration.rst>`_. +Others are specific conventions chosen for the pySDC library, +that may follow Python standards (or not ...), +detailed in the `naming conventions page <./docs/contrib/03_naming_conventions.rst>`_. + +Finally, while ``pySDC`` provides many base functionalities that implement classical +flavors of SDC, it also allows problem-specific applications through Object-Oriented +Programming (OOP) and the implementation of custom inherited classes. +This follows a specific OOP framework, for which more details are given +`here <.(docs/contrib/../../docs/contrib/04_custom_implementations.rst>`_\ ). diff --git a/README.rst b/README.rst index 26db68a8dc..bff2b14340 100644 --- a/README.rst +++ b/README.rst @@ -76,8 +76,9 @@ Contributing `pySDC` code was originaly developped by Robert Speck (@pancetta), and is now maintained and developed by a small community of scientists interested in SDC methods, that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our `Contribution Guidelines `_. +If you want to take part of this, please take the time to read our `Contribution Guidelines <./CONTRIBUTING.rst>`_. +.. _contrib: Acknowledgements ---------------- diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md deleted file mode 100644 index a77168b8b9..0000000000 --- a/docs/contrib/01_pull_requests.md +++ /dev/null @@ -1,44 +0,0 @@ -# Recommendations for pull requests - -Contributions on the `pySDC` code is expected to be done through pull requests from personal (public) forked repositories. A few core developpers can eventually push maintenance commits directly to the main repository. However (even for core developpers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. - -## Contributing to the main branch - -The main version of `pySDC` is hosted in the `master` branch, on which any contributor can propose pull requests. Those can consist on : - -- bug fixes and code corrections (_e.g_ solving one of the current [issues](https://github.com/Parallel-in-Time/pySDC/issues)) -- addition or improvement of documentation -- improvement of existing functionalities (performance, accuracy, usage, ...) -- addition of new functionnalities and applications -- improvement of CI test routines - -Pull request should comes from forks branches with a name specific to the contribution. For instance : - -``` -# branch name : -issue214 # to solve issue 214 -awsome_new_project # to add a new project -some_feature # to add a new feature (implementation, ...) -``` - -> :scroll: Favor the use of _short name_ for branch, using _lower case_ and eventuall underscores to ease readability. - -Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. - - -## Release development branches - -Branches with name starting with `v[...]` are developement branches for the next releases of `pySDC` (_e.g_ `v5`, `v6`, ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using `pySDC` (_e.g_ tutorials, projects, ...). Contribution to those branches are done by core developpers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. -Such branches are merged to `master` when ready. - -> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branche. - -## Feature development branches - -Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). -Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. - -> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. - -[:arrow_left: Back to Contributing Summary](./../../CONTRIBUTING.md) --- -[:arrow_right: Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file diff --git a/docs/contrib/01_pull_requests.rst b/docs/contrib/01_pull_requests.rst new file mode 100644 index 0000000000..d3ec7cac18 --- /dev/null +++ b/docs/contrib/01_pull_requests.rst @@ -0,0 +1,58 @@ + +Recommendations for pull requests +================================= + +Contributions on the ``pySDC`` code is expected to be done through pull requests from personal (public) forked repositories. A few core developpers can eventually push maintenance commits directly to the main repository. However (even for core developpers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. + +Contributing to the main branch +------------------------------- + +The main version of ``pySDC`` is hosted in the ``master`` branch, on which any contributor can propose pull requests. Those can consist on : + + +* bug fixes and code corrections (\ *e.g* solving one of the current `issues `_\ ) +* addition or improvement of documentation +* improvement of existing functionalities (performance, accuracy, usage, ...) +* addition of new functionnalities and applications +* improvement of CI test routines + +Pull request should comes from forks branches with a name specific to the contribution. For instance : + +.. code-block:: + + # branch name : + issue214 # to solve issue 214 + awsome_new_project # to add a new project + some_feature # to add a new feature (implementation, ...) + +.. + + :scroll: Favor the use of *short name* for branch, using *lower case* and eventuall underscores to ease readability. + + +Those changes should be compatible with the existing API (\ *i.e* not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the ``pySDC.implementations`` module. + +Release development branches +---------------------------- + +Branches with name starting with ``v[...]`` are developement branches for the next releases of ``pySDC`` (\ *e.g* ``v5``\ , ``v6``\ , ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using ``pySDC`` (\ *e.g* tutorials, projects, ...). Contribution to those branches are done by core developpers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. +Such branches are merged to ``master`` when ready. + +.. + + :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branche. + + +Feature development branches +---------------------------- + +Additional branches starting with the prefix ``dev/[...]`` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). +Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. + +.. + + :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. + + +`:arrow_left: Back to Contributing Summary <./../../CONTRIBUTING.rst>`_ --- +`:arrow_right: Next to Continuous Integration <./02_continuous_integration.rst>`_ diff --git a/docs/contrib/02_continuous_integration.md b/docs/contrib/02_continuous_integration.md deleted file mode 100644 index c8302f1492..0000000000 --- a/docs/contrib/02_continuous_integration.md +++ /dev/null @@ -1,51 +0,0 @@ -# Continuous Integration in pySDC - -Any commit in `pySDC` are tested within by GitHub continuous integration (CI). You can see in in the [action panel](https://github.com/Parallel-in-Time/pySDC/actions) the tests for each branches. -Those tests can be devided in two main categories : code linting and code testing. - -## Code linting - -Code style linting is performed using [`black`](https://black.readthedocs.io/en/stable/) and [`flakeheaven`](https://flakeheaven.readthedocs.io/en/latest/) for code synthax checking. In particular, `black` is used to check compliance with (most of) [PEP-8 guidelines](https://peps.python.org/pep-0008/). - -Those tests are conducted for each commit (even for forks), but you can also run it locally in the root folder of `pySDC` before pushing any commit : - -```bash -# Install required packages (works also with conda/mamba) -pip install black flakeheaven flake8-comprehensions flake8-bugbear -# First : test code style linting with black -black pySDC --check --diff --color -# Second : test code syntax with flakeheaven -flakeheaven lint --benchmark pySDC -``` - -> :bell: To avoid any error about formating (`black`), you can simply use this program to reformat directly your code using the command : -> -> ```bash -> black pySDC -> ``` - -Some style rules that are automatically enforced : - -- lines should be not longer than 120 characters -- arithmetic operators (`+`, `*`, ...) should be separated with variables by one empty space - -# Code testing - -This is done using[ `pytest`](https://docs.pytest.org/en/7.2.x/), and runs all the tests writen in the `pySDC/tests` folder. You can run those locally in the root folder of `pySDC` using : - -```bash -# Install required packages (works also with conda/mamba) -pip install pytest<7.2.0 pytest-benchmark coverage[toml] -# Run tests -pytest -v pySDC/tests -``` - -> :bell: Many components are tested (core, implementations, projects, tutorials, etc ...) which make the testing quite long. -> When working on a single part of the code, you can run only the corresponding part of the test by specifying the test path, for instance : -> -> ```bash -> pytest -v pySDC/tests/test_nodes.py # only test nodes generation -> ``` - -[:arrow_left: Back to Pull Request Recommendation](./01_pull_requests.md) --- -[:arrow_right: Next to Naming Conventions](./03_naming_conventions.md) \ No newline at end of file diff --git a/docs/contrib/02_continuous_integration.rst b/docs/contrib/02_continuous_integration.rst new file mode 100644 index 0000000000..fea54e90d2 --- /dev/null +++ b/docs/contrib/02_continuous_integration.rst @@ -0,0 +1,62 @@ + +Continuous Integration in pySDC +=============================== + +Any commit in ``pySDC`` are tested within by GitHub continuous integration (CI). You can see in in the `action panel `_ the tests for each branches. +Those tests can be devided in two main categories : code linting and code testing. + +Code linting +------------ + +Code style linting is performed using `\ ``black`` `_ and `\ ``flakeheaven`` `_ for code synthax checking. In particular, ``black`` is used to check compliance with (most of) `PEP-8 guidelines `_. + +Those tests are conducted for each commit (even for forks), but you can also run it locally in the root folder of ``pySDC`` before pushing any commit : + +.. code-block:: bash + + # Install required packages (works also with conda/mamba) + pip install black flakeheaven flake8-comprehensions flake8-bugbear + # First : test code style linting with black + black pySDC --check --diff --color + # Second : test code syntax with flakeheaven + flakeheaven lint --benchmark pySDC + +.. + + :bell: To avoid any error about formating (\ ``black``\ ), you can simply use this program to reformat directly your code using the command : + + .. code-block:: bash + + black pySDC + + +Some style rules that are automatically enforced : + + +* lines should be not longer than 120 characters +* arithmetic operators (\ ``+``\ , ``*``\ , ...) should be separated with variables by one empty space + +Code testing +============ + +This is done using\ ` ``pytest`` `_\ , and runs all the tests writen in the ``pySDC/tests`` folder. You can run those locally in the root folder of ``pySDC`` using : + +.. code-block:: bash + + # Install required packages (works also with conda/mamba) + pip install pytest<7.2.0 pytest-benchmark coverage[toml] + # Run tests + pytest -v pySDC/tests + +.. + + :bell: Many components are tested (core, implementations, projects, tutorials, etc ...) which make the testing quite long. + When working on a single part of the code, you can run only the corresponding part of the test by specifying the test path, for instance : + + .. code-block:: bash + + pytest -v pySDC/tests/test_nodes.py # only test nodes generation + + +`:arrow_left: Back to Pull Request Recommendation <./01_pull_requests.rst>`_ --- +`:arrow_right: Next to Naming Conventions <./03_naming_conventions.rst>`_ diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md deleted file mode 100644 index 8d79b59d7c..0000000000 --- a/docs/contrib/03_naming_conventions.md +++ /dev/null @@ -1,85 +0,0 @@ -# Naming conventions in pySDC - -> :scroll: Those rules may not be enforced by the current implementation of pySDC. However, they should be enforced for any contribution. - -Naming convention are mostly inspired from the [PEP-8 guidelines](https://peps.python.org/pep-0008/), even if some of them may be different. Of course, strictly following those rules is not always the best solution, as Guido Von Rossum's key insight states : - -> _A Foolish Consistency is the Hobgoblin of Little Minds_ - -The most important idea at the end is to find a optimal compromise between - -- readability : _Can someone else easily read and understand my code ?_ -- effectiveness : _Does my code avoid kilometers-long lines to do simple things ?_ - -Both aspects are interdependant to ease maintaning/development of any code and improve its attractivity to potential users. - -## Packages and modules names - -Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. - -## Class names - -Class names should use PascalCase formating, for instance : - -```python -class AdvectionDiffusion(Problem): - pass -``` - -The shorter, the better. Also, exception class names should end with the suffix `Error`, for instance - -```python -class ParameterError(Exception): - pass -``` - -## Function and variables names - -Function (or method) and variable names should be lowercase, with words separated by underscores as necessary to improve readability. -Same goes for function arguments. For instance : - -```python -tleft = 1 -quad_type = 'LEGENDRE' - -def compute_fejer_rule(num_nodes): - # ... - -class NodeGenerator(): - def get_orthog_poly_coefficients(self, num_coeff): - # ... -``` - -> :bell: In general, shorter name should be favored, **as long as it does not deteriorate understandability**. For instance, using `get_orthog_poly_coeffs` rather than `get_orthogonal_polynomial_coefficients`. Acronyms can also be used, but with caution (for instance, `mssdc_jac` may not be very explicit for `multistep_sdc_jacobian`). - -## Private and public attributes - -There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object method, can be indicated as private using the `_` prefix. For instance : - -```python -class ChuckNorris(): - - def __init__(self, param): - self.param = param - - def _think(self): - print('...') - - def act(self): - if self.param == 'doubt': - self._think() - print('*?%&$?*ยง"$*$*ยง#{*') -``` - -## Constants - -Constants are usually defined on a module level and written in all capital letters with underscores separating words. -Examples : - -```python -NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] -QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] -``` - -[:arrow_left: Back to Continuous Integration](./02_continuous_integration.md) --- -[:arrow_right: Next to Custom Implementations](./04_custom_implementations.md) \ No newline at end of file diff --git a/docs/contrib/03_naming_conventions.rst b/docs/contrib/03_naming_conventions.rst new file mode 100644 index 0000000000..b03f6140f6 --- /dev/null +++ b/docs/contrib/03_naming_conventions.rst @@ -0,0 +1,102 @@ + +Naming conventions in pySDC +=========================== + +.. + + :scroll: Those rules may not be enforced by the current implementation of pySDC. However, they should be enforced for any contribution. + + +Naming convention are mostly inspired from the `PEP-8 guidelines `_\ , even if some of them may be different. Of course, strictly following those rules is not always the best solution, as Guido Von Rossum's key insight states : + +.. + + *A Foolish Consistency is the Hobgoblin of Little Minds* + + +The most important idea at the end is to find a optimal compromise between + + +* readability : *Can someone else easily read and understand my code ?* +* effectiveness : *Does my code avoid kilometers-long lines to do simple things ?* + +Both aspects are interdependant to ease maintaning/development of any code and improve its attractivity to potential users. + +Packages and modules names +-------------------------- + +Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. + +Class names +----------- + +Class names should use PascalCase formating, for instance : + +.. code-block:: python + + class AdvectionDiffusion(Problem): + pass + +The shorter, the better. Also, exception class names should end with the suffix ``Error``\ , for instance + +.. code-block:: python + + class ParameterError(Exception): + pass + +Function and variables names +---------------------------- + +Function (or method) and variable names should be lowercase, with words separated by underscores as necessary to improve readability. +Same goes for function arguments. For instance : + +.. code-block:: python + + tleft = 1 + quad_type = 'LEGENDRE' + + def compute_fejer_rule(num_nodes): + # ... + + class NodeGenerator(): + def get_orthog_poly_coefficients(self, num_coeff): + # ... + +.. + + :bell: In general, shorter name should be favored, **as long as it does not deteriorate understandability**. For instance, using ``get_orthog_poly_coeffs`` rather than ``get_orthogonal_polynomial_coefficients``. Acronyms can also be used, but with caution (for instance, ``mssdc_jac`` may not be very explicit for ``multistep_sdc_jacobian``\ ). + + +Private and public attributes +----------------------------- + +There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object method, can be indicated as private using the ``_`` prefix. For instance : + +.. code-block:: python + + class ChuckNorris(): + + def __init__(self, param): + self.param = param + + def _think(self): + print('...') + + def act(self): + if self.param == 'doubt': + self._think() + print('*?%&$?*ยง"$*$*ยง#{*') + +Constants +--------- + +Constants are usually defined on a module level and written in all capital letters with underscores separating words. +Examples : + +.. code-block:: python + + NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] + QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] + +`:arrow_left: Back to Continuous Integration <./02_continuous_integration.rst>`_ --- +`:arrow_right: Next to Custom Implementations <./04_custom_implementations.rst>`_ diff --git a/docs/contrib/04_custom_implementations.md b/docs/contrib/04_custom_implementations.md deleted file mode 100644 index 2dd71e0ffa..0000000000 --- a/docs/contrib/04_custom_implementations.md +++ /dev/null @@ -1,6 +0,0 @@ -# Custom implementation guidelines - -... in construction ... - -[:arrow_left: Back to Naming Conventions](./03_naming_conventions.md) --- -[:arrow_right: Next to a cute picture of cat](https://www.vecteezy.com/photo/2098203-silver-tabby-cat-sitting-on-green-background) \ No newline at end of file diff --git a/docs/contrib/04_custom_implementations.rst b/docs/contrib/04_custom_implementations.rst new file mode 100644 index 0000000000..8e9c31e0e8 --- /dev/null +++ b/docs/contrib/04_custom_implementations.rst @@ -0,0 +1,8 @@ + +Custom implementation guidelines +================================ + +... in construction ... + +`:arrow_left: Back to Naming Conventions <./03_naming_conventions.rst>`_ --- +`:arrow_right: Next to a cute picture of cat `_ From 0917c42e41384390771cf1a364a18f91e409156b Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 23:36:19 +0100 Subject: [PATCH 20/34] TL: reverting to mardown files --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index bff2b14340..38c30cdd34 100644 --- a/README.rst +++ b/README.rst @@ -76,7 +76,7 @@ Contributing `pySDC` code was originaly developped by Robert Speck (@pancetta), and is now maintained and developed by a small community of scientists interested in SDC methods, that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our `Contribution Guidelines <./CONTRIBUTING.rst>`_. +If you want to take part of this, please take the time to read our `Contribution Guidelines `. .. _contrib: @@ -92,4 +92,4 @@ The project also received help from the `Helmholtz Platform for Research Softwar .. |badge-ga| image:: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml/badge.svg :target: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml .. |badge-ossf| image:: https://bestpractices.coreinfrastructure.org/projects/6909/badge - :target: https://bestpractices.coreinfrastructure.org/projects/6909 + :target: https://bestpractices.coreinfrastructure.org/projects/6909 \ No newline at end of file From bd8f52a0dd4d22373aafdc4612720ded95a0fab1 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 23:38:55 +0100 Subject: [PATCH 21/34] TL: really reverting to markdown files --- .gitignore | 3 - CONTRIBUTING.rst | 27 ------ README.rst | 3 +- docs/contrib/01_pull_requests.md | 44 +++++++++ docs/contrib/01_pull_requests.rst | 58 ------------ docs/contrib/02_continuous_integration.md | 51 +++++++++++ docs/contrib/02_continuous_integration.rst | 62 ------------- docs/contrib/03_naming_conventions.md | 85 +++++++++++++++++ docs/contrib/03_naming_conventions.rst | 102 --------------------- docs/contrib/04_custom_implementations.md | 6 ++ docs/contrib/04_custom_implementations.rst | 8 -- 11 files changed, 187 insertions(+), 262 deletions(-) delete mode 100644 CONTRIBUTING.rst create mode 100644 docs/contrib/01_pull_requests.md delete mode 100644 docs/contrib/01_pull_requests.rst create mode 100644 docs/contrib/02_continuous_integration.md delete mode 100644 docs/contrib/02_continuous_integration.rst create mode 100644 docs/contrib/03_naming_conventions.md delete mode 100644 docs/contrib/03_naming_conventions.rst create mode 100644 docs/contrib/04_custom_implementations.md delete mode 100644 docs/contrib/04_custom_implementations.rst diff --git a/.gitignore b/.gitignore index 719ebdbb1b..632ce84ad8 100644 --- a/.gitignore +++ b/.gitignore @@ -152,6 +152,3 @@ Temporary Items # jupyter .ipynb_checkpoints - -# VSCode -.vscode diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst deleted file mode 100644 index 619ecee2b3..0000000000 --- a/CONTRIBUTING.rst +++ /dev/null @@ -1,27 +0,0 @@ - -How to contribute to pySDC -========================== - -#. `Pull Requestion recommendations <./docs/contrib/01_pull_requests.rst>`_ -#. `Continuous Integration <./docs/contrib/02_continuous_integration.rst>`_ -#. `Naming Conventions <./docs/contrib/03_naming_conventions.rst>`_ -#. `Custom Implementations <./docs/contrib/04_custom_implementations.rst>`_ - -Developments on the ``pySDC`` code use the classical approach of forks and pull requests from Github. -There is an `extended documentation `_ -on this aspect (that you can skip if you are already used to it). -In addition, some recommendations for pull requests are given -`here <./docs/contrib/01_pull_requests.rst>`_. - -Additionnaly, a *few* rules are set to enforce code readability, -consistency and reliability. Some of them are automatically tested with each commit, -and summarized in the page on `continuous integration (CI) <./docs/contrib/02_continuous_integration.rst>`_. -Others are specific conventions chosen for the pySDC library, -that may follow Python standards (or not ...), -detailed in the `naming conventions page <./docs/contrib/03_naming_conventions.rst>`_. - -Finally, while ``pySDC`` provides many base functionalities that implement classical -flavors of SDC, it also allows problem-specific applications through Object-Oriented -Programming (OOP) and the implementation of custom inherited classes. -This follows a specific OOP framework, for which more details are given -`here <.(docs/contrib/../../docs/contrib/04_custom_implementations.rst>`_\ ). diff --git a/README.rst b/README.rst index 38c30cdd34..0cb77bfdd4 100644 --- a/README.rst +++ b/README.rst @@ -76,9 +76,8 @@ Contributing `pySDC` code was originaly developped by Robert Speck (@pancetta), and is now maintained and developed by a small community of scientists interested in SDC methods, that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our `Contribution Guidelines `. +If you want to take part of this, please take the time to read our `Contribution Guidelines `_. -.. _contrib: Acknowledgements ---------------- diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md new file mode 100644 index 0000000000..a77168b8b9 --- /dev/null +++ b/docs/contrib/01_pull_requests.md @@ -0,0 +1,44 @@ +# Recommendations for pull requests + +Contributions on the `pySDC` code is expected to be done through pull requests from personal (public) forked repositories. A few core developpers can eventually push maintenance commits directly to the main repository. However (even for core developpers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. + +## Contributing to the main branch + +The main version of `pySDC` is hosted in the `master` branch, on which any contributor can propose pull requests. Those can consist on : + +- bug fixes and code corrections (_e.g_ solving one of the current [issues](https://github.com/Parallel-in-Time/pySDC/issues)) +- addition or improvement of documentation +- improvement of existing functionalities (performance, accuracy, usage, ...) +- addition of new functionnalities and applications +- improvement of CI test routines + +Pull request should comes from forks branches with a name specific to the contribution. For instance : + +``` +# branch name : +issue214 # to solve issue 214 +awsome_new_project # to add a new project +some_feature # to add a new feature (implementation, ...) +``` + +> :scroll: Favor the use of _short name_ for branch, using _lower case_ and eventuall underscores to ease readability. + +Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. + + +## Release development branches + +Branches with name starting with `v[...]` are developement branches for the next releases of `pySDC` (_e.g_ `v5`, `v6`, ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using `pySDC` (_e.g_ tutorials, projects, ...). Contribution to those branches are done by core developpers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. +Such branches are merged to `master` when ready. + +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branche. + +## Feature development branches + +Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). +Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. + +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. + +[:arrow_left: Back to Contributing Summary](./../../CONTRIBUTING.md) --- +[:arrow_right: Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file diff --git a/docs/contrib/01_pull_requests.rst b/docs/contrib/01_pull_requests.rst deleted file mode 100644 index d3ec7cac18..0000000000 --- a/docs/contrib/01_pull_requests.rst +++ /dev/null @@ -1,58 +0,0 @@ - -Recommendations for pull requests -================================= - -Contributions on the ``pySDC`` code is expected to be done through pull requests from personal (public) forked repositories. A few core developpers can eventually push maintenance commits directly to the main repository. However (even for core developpers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. - -Contributing to the main branch -------------------------------- - -The main version of ``pySDC`` is hosted in the ``master`` branch, on which any contributor can propose pull requests. Those can consist on : - - -* bug fixes and code corrections (\ *e.g* solving one of the current `issues `_\ ) -* addition or improvement of documentation -* improvement of existing functionalities (performance, accuracy, usage, ...) -* addition of new functionnalities and applications -* improvement of CI test routines - -Pull request should comes from forks branches with a name specific to the contribution. For instance : - -.. code-block:: - - # branch name : - issue214 # to solve issue 214 - awsome_new_project # to add a new project - some_feature # to add a new feature (implementation, ...) - -.. - - :scroll: Favor the use of *short name* for branch, using *lower case* and eventuall underscores to ease readability. - - -Those changes should be compatible with the existing API (\ *i.e* not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the ``pySDC.implementations`` module. - -Release development branches ----------------------------- - -Branches with name starting with ``v[...]`` are developement branches for the next releases of ``pySDC`` (\ *e.g* ``v5``\ , ``v6``\ , ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using ``pySDC`` (\ *e.g* tutorials, projects, ...). Contribution to those branches are done by core developpers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. -Such branches are merged to ``master`` when ready. - -.. - - :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branche. - - -Feature development branches ----------------------------- - -Additional branches starting with the prefix ``dev/[...]`` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). -Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. - -.. - - :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. - - -`:arrow_left: Back to Contributing Summary <./../../CONTRIBUTING.rst>`_ --- -`:arrow_right: Next to Continuous Integration <./02_continuous_integration.rst>`_ diff --git a/docs/contrib/02_continuous_integration.md b/docs/contrib/02_continuous_integration.md new file mode 100644 index 0000000000..c8302f1492 --- /dev/null +++ b/docs/contrib/02_continuous_integration.md @@ -0,0 +1,51 @@ +# Continuous Integration in pySDC + +Any commit in `pySDC` are tested within by GitHub continuous integration (CI). You can see in in the [action panel](https://github.com/Parallel-in-Time/pySDC/actions) the tests for each branches. +Those tests can be devided in two main categories : code linting and code testing. + +## Code linting + +Code style linting is performed using [`black`](https://black.readthedocs.io/en/stable/) and [`flakeheaven`](https://flakeheaven.readthedocs.io/en/latest/) for code synthax checking. In particular, `black` is used to check compliance with (most of) [PEP-8 guidelines](https://peps.python.org/pep-0008/). + +Those tests are conducted for each commit (even for forks), but you can also run it locally in the root folder of `pySDC` before pushing any commit : + +```bash +# Install required packages (works also with conda/mamba) +pip install black flakeheaven flake8-comprehensions flake8-bugbear +# First : test code style linting with black +black pySDC --check --diff --color +# Second : test code syntax with flakeheaven +flakeheaven lint --benchmark pySDC +``` + +> :bell: To avoid any error about formating (`black`), you can simply use this program to reformat directly your code using the command : +> +> ```bash +> black pySDC +> ``` + +Some style rules that are automatically enforced : + +- lines should be not longer than 120 characters +- arithmetic operators (`+`, `*`, ...) should be separated with variables by one empty space + +# Code testing + +This is done using[ `pytest`](https://docs.pytest.org/en/7.2.x/), and runs all the tests writen in the `pySDC/tests` folder. You can run those locally in the root folder of `pySDC` using : + +```bash +# Install required packages (works also with conda/mamba) +pip install pytest<7.2.0 pytest-benchmark coverage[toml] +# Run tests +pytest -v pySDC/tests +``` + +> :bell: Many components are tested (core, implementations, projects, tutorials, etc ...) which make the testing quite long. +> When working on a single part of the code, you can run only the corresponding part of the test by specifying the test path, for instance : +> +> ```bash +> pytest -v pySDC/tests/test_nodes.py # only test nodes generation +> ``` + +[:arrow_left: Back to Pull Request Recommendation](./01_pull_requests.md) --- +[:arrow_right: Next to Naming Conventions](./03_naming_conventions.md) \ No newline at end of file diff --git a/docs/contrib/02_continuous_integration.rst b/docs/contrib/02_continuous_integration.rst deleted file mode 100644 index fea54e90d2..0000000000 --- a/docs/contrib/02_continuous_integration.rst +++ /dev/null @@ -1,62 +0,0 @@ - -Continuous Integration in pySDC -=============================== - -Any commit in ``pySDC`` are tested within by GitHub continuous integration (CI). You can see in in the `action panel `_ the tests for each branches. -Those tests can be devided in two main categories : code linting and code testing. - -Code linting ------------- - -Code style linting is performed using `\ ``black`` `_ and `\ ``flakeheaven`` `_ for code synthax checking. In particular, ``black`` is used to check compliance with (most of) `PEP-8 guidelines `_. - -Those tests are conducted for each commit (even for forks), but you can also run it locally in the root folder of ``pySDC`` before pushing any commit : - -.. code-block:: bash - - # Install required packages (works also with conda/mamba) - pip install black flakeheaven flake8-comprehensions flake8-bugbear - # First : test code style linting with black - black pySDC --check --diff --color - # Second : test code syntax with flakeheaven - flakeheaven lint --benchmark pySDC - -.. - - :bell: To avoid any error about formating (\ ``black``\ ), you can simply use this program to reformat directly your code using the command : - - .. code-block:: bash - - black pySDC - - -Some style rules that are automatically enforced : - - -* lines should be not longer than 120 characters -* arithmetic operators (\ ``+``\ , ``*``\ , ...) should be separated with variables by one empty space - -Code testing -============ - -This is done using\ ` ``pytest`` `_\ , and runs all the tests writen in the ``pySDC/tests`` folder. You can run those locally in the root folder of ``pySDC`` using : - -.. code-block:: bash - - # Install required packages (works also with conda/mamba) - pip install pytest<7.2.0 pytest-benchmark coverage[toml] - # Run tests - pytest -v pySDC/tests - -.. - - :bell: Many components are tested (core, implementations, projects, tutorials, etc ...) which make the testing quite long. - When working on a single part of the code, you can run only the corresponding part of the test by specifying the test path, for instance : - - .. code-block:: bash - - pytest -v pySDC/tests/test_nodes.py # only test nodes generation - - -`:arrow_left: Back to Pull Request Recommendation <./01_pull_requests.rst>`_ --- -`:arrow_right: Next to Naming Conventions <./03_naming_conventions.rst>`_ diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md new file mode 100644 index 0000000000..8d79b59d7c --- /dev/null +++ b/docs/contrib/03_naming_conventions.md @@ -0,0 +1,85 @@ +# Naming conventions in pySDC + +> :scroll: Those rules may not be enforced by the current implementation of pySDC. However, they should be enforced for any contribution. + +Naming convention are mostly inspired from the [PEP-8 guidelines](https://peps.python.org/pep-0008/), even if some of them may be different. Of course, strictly following those rules is not always the best solution, as Guido Von Rossum's key insight states : + +> _A Foolish Consistency is the Hobgoblin of Little Minds_ + +The most important idea at the end is to find a optimal compromise between + +- readability : _Can someone else easily read and understand my code ?_ +- effectiveness : _Does my code avoid kilometers-long lines to do simple things ?_ + +Both aspects are interdependant to ease maintaning/development of any code and improve its attractivity to potential users. + +## Packages and modules names + +Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. + +## Class names + +Class names should use PascalCase formating, for instance : + +```python +class AdvectionDiffusion(Problem): + pass +``` + +The shorter, the better. Also, exception class names should end with the suffix `Error`, for instance + +```python +class ParameterError(Exception): + pass +``` + +## Function and variables names + +Function (or method) and variable names should be lowercase, with words separated by underscores as necessary to improve readability. +Same goes for function arguments. For instance : + +```python +tleft = 1 +quad_type = 'LEGENDRE' + +def compute_fejer_rule(num_nodes): + # ... + +class NodeGenerator(): + def get_orthog_poly_coefficients(self, num_coeff): + # ... +``` + +> :bell: In general, shorter name should be favored, **as long as it does not deteriorate understandability**. For instance, using `get_orthog_poly_coeffs` rather than `get_orthogonal_polynomial_coefficients`. Acronyms can also be used, but with caution (for instance, `mssdc_jac` may not be very explicit for `multistep_sdc_jacobian`). + +## Private and public attributes + +There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object method, can be indicated as private using the `_` prefix. For instance : + +```python +class ChuckNorris(): + + def __init__(self, param): + self.param = param + + def _think(self): + print('...') + + def act(self): + if self.param == 'doubt': + self._think() + print('*?%&$?*ยง"$*$*ยง#{*') +``` + +## Constants + +Constants are usually defined on a module level and written in all capital letters with underscores separating words. +Examples : + +```python +NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] +QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] +``` + +[:arrow_left: Back to Continuous Integration](./02_continuous_integration.md) --- +[:arrow_right: Next to Custom Implementations](./04_custom_implementations.md) \ No newline at end of file diff --git a/docs/contrib/03_naming_conventions.rst b/docs/contrib/03_naming_conventions.rst deleted file mode 100644 index b03f6140f6..0000000000 --- a/docs/contrib/03_naming_conventions.rst +++ /dev/null @@ -1,102 +0,0 @@ - -Naming conventions in pySDC -=========================== - -.. - - :scroll: Those rules may not be enforced by the current implementation of pySDC. However, they should be enforced for any contribution. - - -Naming convention are mostly inspired from the `PEP-8 guidelines `_\ , even if some of them may be different. Of course, strictly following those rules is not always the best solution, as Guido Von Rossum's key insight states : - -.. - - *A Foolish Consistency is the Hobgoblin of Little Minds* - - -The most important idea at the end is to find a optimal compromise between - - -* readability : *Can someone else easily read and understand my code ?* -* effectiveness : *Does my code avoid kilometers-long lines to do simple things ?* - -Both aspects are interdependant to ease maintaning/development of any code and improve its attractivity to potential users. - -Packages and modules names --------------------------- - -Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. - -Class names ------------ - -Class names should use PascalCase formating, for instance : - -.. code-block:: python - - class AdvectionDiffusion(Problem): - pass - -The shorter, the better. Also, exception class names should end with the suffix ``Error``\ , for instance - -.. code-block:: python - - class ParameterError(Exception): - pass - -Function and variables names ----------------------------- - -Function (or method) and variable names should be lowercase, with words separated by underscores as necessary to improve readability. -Same goes for function arguments. For instance : - -.. code-block:: python - - tleft = 1 - quad_type = 'LEGENDRE' - - def compute_fejer_rule(num_nodes): - # ... - - class NodeGenerator(): - def get_orthog_poly_coefficients(self, num_coeff): - # ... - -.. - - :bell: In general, shorter name should be favored, **as long as it does not deteriorate understandability**. For instance, using ``get_orthog_poly_coeffs`` rather than ``get_orthogonal_polynomial_coefficients``. Acronyms can also be used, but with caution (for instance, ``mssdc_jac`` may not be very explicit for ``multistep_sdc_jacobian``\ ). - - -Private and public attributes ------------------------------ - -There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object method, can be indicated as private using the ``_`` prefix. For instance : - -.. code-block:: python - - class ChuckNorris(): - - def __init__(self, param): - self.param = param - - def _think(self): - print('...') - - def act(self): - if self.param == 'doubt': - self._think() - print('*?%&$?*ยง"$*$*ยง#{*') - -Constants ---------- - -Constants are usually defined on a module level and written in all capital letters with underscores separating words. -Examples : - -.. code-block:: python - - NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] - QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] - -`:arrow_left: Back to Continuous Integration <./02_continuous_integration.rst>`_ --- -`:arrow_right: Next to Custom Implementations <./04_custom_implementations.rst>`_ diff --git a/docs/contrib/04_custom_implementations.md b/docs/contrib/04_custom_implementations.md new file mode 100644 index 0000000000..2dd71e0ffa --- /dev/null +++ b/docs/contrib/04_custom_implementations.md @@ -0,0 +1,6 @@ +# Custom implementation guidelines + +... in construction ... + +[:arrow_left: Back to Naming Conventions](./03_naming_conventions.md) --- +[:arrow_right: Next to a cute picture of cat](https://www.vecteezy.com/photo/2098203-silver-tabby-cat-sitting-on-green-background) \ No newline at end of file diff --git a/docs/contrib/04_custom_implementations.rst b/docs/contrib/04_custom_implementations.rst deleted file mode 100644 index 8e9c31e0e8..0000000000 --- a/docs/contrib/04_custom_implementations.rst +++ /dev/null @@ -1,8 +0,0 @@ - -Custom implementation guidelines -================================ - -... in construction ... - -`:arrow_left: Back to Naming Conventions <./03_naming_conventions.rst>`_ --- -`:arrow_right: Next to a cute picture of cat `_ From 24f6ea2ce821c6a7bfcc7f17fc8fd9f99487bdc0 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Sun, 15 Jan 2023 23:40:57 +0100 Subject: [PATCH 22/34] TL: trying the lazy approach --- .gitignore | 3 +++ README.rst | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 632ce84ad8..719ebdbb1b 100644 --- a/.gitignore +++ b/.gitignore @@ -152,3 +152,6 @@ Temporary Items # jupyter .ipynb_checkpoints + +# VSCode +.vscode diff --git a/README.rst b/README.rst index 0cb77bfdd4..f7464c00f0 100644 --- a/README.rst +++ b/README.rst @@ -76,7 +76,7 @@ Contributing `pySDC` code was originaly developped by Robert Speck (@pancetta), and is now maintained and developed by a small community of scientists interested in SDC methods, that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our `Contribution Guidelines `_. +If you want to take part of this, please take the time to read our `Contribution Guidelines `_. Acknowledgements From d52ed26680d5ed0cada83a0cf95575a29c890a36 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 10:54:53 +0100 Subject: [PATCH 23/34] TL: spell checks --- CONTRIBUTING.md | 4 ++-- docs/contrib/01_pull_requests.md | 16 ++++++++-------- docs/contrib/02_continuous_integration.md | 8 ++++---- docs/contrib/03_naming_conventions.md | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 376e38cb3d..4775d2298d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # How to contribute to pySDC -1. [Pull Requestion recommendations](./docs/contrib/01_pull_requests.md) +1. [Pull Requests Recommendations](./docs/contrib/01_pull_requests.md) 2. [Continuous Integration](./docs/contrib/02_continuous_integration.md) 3. [Naming Conventions](./docs/contrib/03_naming_conventions.md) 4. [Custom Implementations](./docs/contrib/04_custom_implementations.md) @@ -8,7 +8,7 @@ Developments on the `pySDC` code use the classical approach of forks and pull requests from Github. There is an [extended documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models) on this aspect (that you can skip if you are already used to it). In addition, some recommendations for pull requests are given [here](./docs/contrib/01_pull_requests.md). -Additionnaly, a _few_ rules are set to enforce code readability, consistency and reliability. Some of them are automatically tested with each commit, and summarized in the page on [continuous integration (CI)](./docs/contrib/02_continuous_integration.md). +Additionally, a _few_ rules are set to enforce code readability, consistency and reliability. Some of them are automatically tested with each commit, and summarized in the page on [continuous integration (CI)](./docs/contrib/02_continuous_integration.md). Others are specific conventions chosen for the pySDC library, that may follow Python standards (or not ...), detailed in the [naming conventions page](./docs/contrib/03_naming_conventions.md). Finally, while `pySDC` provides many base functionalities that implement classical flavors of SDC, it also allows problem-specific applications through Object-Oriented Programming (OOP) and the implementation of custom inherited classes. diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md index a77168b8b9..2886a138fb 100644 --- a/docs/contrib/01_pull_requests.md +++ b/docs/contrib/01_pull_requests.md @@ -1,6 +1,6 @@ # Recommendations for pull requests -Contributions on the `pySDC` code is expected to be done through pull requests from personal (public) forked repositories. A few core developpers can eventually push maintenance commits directly to the main repository. However (even for core developpers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. +Contributions on the `pySDC` code is expected to be done through pull requests from personal (public) forked repositories. A few core developers can eventually push maintenance commits directly to the main repository. However (even for core developers), it is highly recommended to add specific contribution trough dedicated merge requests from forks. ## Contributing to the main branch @@ -9,7 +9,7 @@ The main version of `pySDC` is hosted in the `master` branch, on which any contr - bug fixes and code corrections (_e.g_ solving one of the current [issues](https://github.com/Parallel-in-Time/pySDC/issues)) - addition or improvement of documentation - improvement of existing functionalities (performance, accuracy, usage, ...) -- addition of new functionnalities and applications +- addition of new functionalities and applications - improvement of CI test routines Pull request should comes from forks branches with a name specific to the contribution. For instance : @@ -17,28 +17,28 @@ Pull request should comes from forks branches with a name specific to the contri ``` # branch name : issue214 # to solve issue 214 -awsome_new_project # to add a new project +awesome_new_project # to add a new project some_feature # to add a new feature (implementation, ...) ``` -> :scroll: Favor the use of _short name_ for branch, using _lower case_ and eventuall underscores to ease readability. +> :scroll: Favor the use of _short name_ for branch, using _lower case_ and eventually underscores to ease readability. Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. ## Release development branches -Branches with name starting with `v[...]` are developement branches for the next releases of `pySDC` (_e.g_ `v5`, `v6`, ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using `pySDC` (_e.g_ tutorials, projects, ...). Contribution to those branches are done by core developpers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. +Branches with name starting with `v[...]` are development branches for the next releases of `pySDC` (_e.g_ `v5`, `v6`, ...). Those may introduce API-breaking changes (user interface, structure of core classes) that would force re-writing application scripts using `pySDC` (_e.g_ tutorials, projects, ...). Contribution to those branches are done by core developers, but anyone can also propose pull requests on those branches once the roadmap and milestones for the associated release has been written down in a dedicated issue. Such branches are merged to `master` when ready. -> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branche. +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branch. ## Feature development branches -Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developpers work on it). +Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developers work on it). Those could eventually be merged into master if they don't break the API, or to the next release branch if they do. -> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branche. +> :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branch. [:arrow_left: Back to Contributing Summary](./../../CONTRIBUTING.md) --- [:arrow_right: Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file diff --git a/docs/contrib/02_continuous_integration.md b/docs/contrib/02_continuous_integration.md index c8302f1492..ec0841ae99 100644 --- a/docs/contrib/02_continuous_integration.md +++ b/docs/contrib/02_continuous_integration.md @@ -1,11 +1,11 @@ # Continuous Integration in pySDC Any commit in `pySDC` are tested within by GitHub continuous integration (CI). You can see in in the [action panel](https://github.com/Parallel-in-Time/pySDC/actions) the tests for each branches. -Those tests can be devided in two main categories : code linting and code testing. +Those tests can be divided in two main categories : code linting and code testing. ## Code linting -Code style linting is performed using [`black`](https://black.readthedocs.io/en/stable/) and [`flakeheaven`](https://flakeheaven.readthedocs.io/en/latest/) for code synthax checking. In particular, `black` is used to check compliance with (most of) [PEP-8 guidelines](https://peps.python.org/pep-0008/). +Code style linting is performed using [`black`](https://black.readthedocs.io/en/stable/) and [`flakeheaven`](https://flakeheaven.readthedocs.io/en/latest/) for code syntax checking. In particular, `black` is used to check compliance with (most of) [PEP-8 guidelines](https://peps.python.org/pep-0008/). Those tests are conducted for each commit (even for forks), but you can also run it locally in the root folder of `pySDC` before pushing any commit : @@ -18,7 +18,7 @@ black pySDC --check --diff --color flakeheaven lint --benchmark pySDC ``` -> :bell: To avoid any error about formating (`black`), you can simply use this program to reformat directly your code using the command : +> :bell: To avoid any error about formatting (`black`), you can simply use this program to reformat directly your code using the command : > > ```bash > black pySDC @@ -31,7 +31,7 @@ Some style rules that are automatically enforced : # Code testing -This is done using[ `pytest`](https://docs.pytest.org/en/7.2.x/), and runs all the tests writen in the `pySDC/tests` folder. You can run those locally in the root folder of `pySDC` using : +This is done using[ `pytest`](https://docs.pytest.org/en/7.2.x/), and runs all the tests written in the `pySDC/tests` folder. You can run those locally in the root folder of `pySDC` using : ```bash # Install required packages (works also with conda/mamba) diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md index 8d79b59d7c..9b947cf388 100644 --- a/docs/contrib/03_naming_conventions.md +++ b/docs/contrib/03_naming_conventions.md @@ -11,7 +11,7 @@ The most important idea at the end is to find a optimal compromise between - readability : _Can someone else easily read and understand my code ?_ - effectiveness : _Does my code avoid kilometers-long lines to do simple things ?_ -Both aspects are interdependant to ease maintaning/development of any code and improve its attractivity to potential users. +Both aspects are interdependent to ease maintaining/development of any code and improve its attractiveness to potential users. ## Packages and modules names @@ -19,7 +19,7 @@ Modules should have short, all-lowercase names. Underscores can be used in the m ## Class names -Class names should use PascalCase formating, for instance : +Class names should use PascalCase formatting, for instance : ```python class AdvectionDiffusion(Problem): From 89f837982c203ac6113edf27b39cad293cf536cf Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 12:36:42 +0100 Subject: [PATCH 24/34] TL: switch to camelCase in naming conventions for variables and functions --- docs/contrib/03_naming_conventions.md | 78 +++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 11 deletions(-) diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md index 9b947cf388..5b5bcd4b32 100644 --- a/docs/contrib/03_naming_conventions.md +++ b/docs/contrib/03_naming_conventions.md @@ -13,9 +13,22 @@ The most important idea at the end is to find a optimal compromise between Both aspects are interdependent to ease maintaining/development of any code and improve its attractiveness to potential users. +## First definitions + +Possible Naming formats : + +- all-lowercase : `variablenamelikethis` +- snake_case : `variable_name_like_this` +- PascalCase : `VariableNameLikeThis` +- camelCase : `variableNameLikeThis` +- all-uppercase with underscore : `VARIABLE_NAME_LIKE_THIS` +- all-uppercase with minus : `VARIABLE-NAME-LIKE-THIS` + ## Packages and modules names -Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. +Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability (_i.e_ use snake_case only if it helps, +else try to stick to all-lowercase). +Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. ## Class names @@ -35,26 +48,48 @@ class ParameterError(Exception): ## Function and variables names -Function (or method) and variable names should be lowercase, with words separated by underscores as necessary to improve readability. -Same goes for function arguments. For instance : +Function (or method) and variable names should use camelCase formatting, and same goes for function arguments. For instance : ```python -tleft = 1 -quad_type = 'LEGENDRE' +tLeft = 1 +quadType = 'LEGENDRE' -def compute_fejer_rule(num_nodes): +def computeFejerRule(nNodes): # ... class NodeGenerator(): - def get_orthog_poly_coefficients(self, num_coeff): + def getOrthogPolyCoeffs(self, nCoeffs): # ... ``` -> :bell: In general, shorter name should be favored, **as long as it does not deteriorate understandability**. For instance, using `get_orthog_poly_coeffs` rather than `get_orthogonal_polynomial_coefficients`. Acronyms can also be used, but with caution (for instance, `mssdc_jac` may not be very explicit for `multistep_sdc_jacobian`). +:scroll: A few additional notes : + +1. In general, shorter name (eventually with abbreviations) should be favored, **as long as it does not deteriorate understandability**. For instance `getOrthogPolyCoeffs` rather than `getOrthogonalPolynomialCoefficients`. +2. Suffix `s` for plural should be used even with abbreviations for consistency (_e.g_ `nCoeffs`, `nNodes`, ...). +3. Acronyms can be used to simplify variable names, but **try not to start with it**. For instance, favor `jacobiMSSDC` or `multiStepSDCJacobi` rather than `MSSDCJacobi`. In general, acronyms should be put at the end of variable names. +4. Underscore can exceptionally be used at the end of variable names when it make readability better and ease further developments. In that case, the characters after the underscore **should be all-uppercase with underscore** (minus is not allowed by Python syntax). For instance when defining the same method with different specializations : + +```python +class MySweeper(Sweeper): + + def __init__(self, initSweep): + try: + self.initSweep = getattr(self, f'_initSweep_{initSweep}') + except AttributeError: + raise NotImplementedError(f'initSweep={initSweep}') + + def _initSweep_COPY(self): + pass + + def _initSweep_SPREAD(self): + pass + + # ... other implementations for initSweep +``` ## Private and public attributes -There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object method, can be indicated as private using the `_` prefix. For instance : +There is no such thing as private or public attributes in Python. But some attributes, if uses only within the object methods, can be indicated as private using the `_` prefix. For instance : ```python class ChuckNorris(): @@ -73,13 +108,34 @@ class ChuckNorris(): ## Constants -Constants are usually defined on a module level and written in all capital letters with underscores separating words. -Examples : +Constants are usually defined on a module level and written in all-uppercase with underscores (all-uppercase with minus are not allowed by Python syntax). Examples : ```python NODE_TYPES = ['EQUID', 'LEGENDRE', 'CHEBY-1', 'CHEBY-2', 'CHEBY-3', 'CHEBY-4'] QUAD_TYPES = ['GAUSS', 'RADAU-LEFT', 'RADAU-RIGHT', 'LOBATTO'] ``` +For _constant string values_, however, favor the use of all uppercase with minus, _e.g_ `RADAU-RIGHT`, `LEGENDRE-NUMPY` to distinguish those from constants names. + +:bell: When constants are used, for instance, to select method specializations (with suffix using all-uppercase with underscore), it is probably better to keep all-uppercase with minus for constant string values and add a character replacement in between, for instance : + +```python +class MySweeper(Sweeper): + + def __init__(self, initSweep): + try: + self.initSweep = getattr(self, f'_initSweep_{initSweep.replace('-','_')}') + except AttributeError: + raise NotImplementedError(f'initSweep={initSweep}') + + def _initSweep_COPY_PASTE(self): + pass + + def _initSweep_SPREAD_OUT(self): + pass + + # ... other implementations for initSweep +``` + [:arrow_left: Back to Continuous Integration](./02_continuous_integration.md) --- [:arrow_right: Next to Custom Implementations](./04_custom_implementations.md) \ No newline at end of file From 3a24a49ee6da4241e0ab087ced22eacecf05fb1a Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 18:00:12 +0100 Subject: [PATCH 25/34] TL: minor detail to naming convention --- docs/contrib/03_naming_conventions.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md index 5b5bcd4b32..f3de762206 100644 --- a/docs/contrib/03_naming_conventions.md +++ b/docs/contrib/03_naming_conventions.md @@ -106,6 +106,8 @@ class ChuckNorris(): print('*?%&$?*ยง"$*$*ยง#{*') ``` +:scroll: In general, variable name starting with double underscore `__` are usually left for Python built-in names, _e.g_ `__dict__`, `__init__`, ... + ## Constants Constants are usually defined on a module level and written in all-uppercase with underscores (all-uppercase with minus are not allowed by Python syntax). Examples : From 08667eb5f7083fd0a43fc302814019eeaf685fd0 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 18:44:40 +0100 Subject: [PATCH 26/34] TL: adding metaclass for RegisterParams class --- pySDC/core/Common.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/pySDC/core/Common.py b/pySDC/core/Common.py index ef21ab3d29..f357c48700 100644 --- a/pySDC/core/Common.py +++ b/pySDC/core/Common.py @@ -10,7 +10,17 @@ from pySDC.core.Errors import ReadOnlyError -class RegisterParams(object): +class _MetaRegisterParams(type): + """Metaclass for RegisterParams base class""" + + def __new__(cls, name, bases, dct): + obj = super().__new__(cls, name, bases, dct) + obj._parNamesReadOnly = set() + obj._parNames = set() + return obj + + +class RegisterParams(metaclass=_MetaRegisterParams): """Base class to register parameters""" def _register(self, *names, readOnly=False): @@ -30,22 +40,16 @@ def _register(self, *names, readOnly=False): """ if readOnly: - if not hasattr(self, '_readOnly'): - self._readOnly = set() - self._readOnly = self._readOnly.union(names) + self._parNamesReadOnly = self._parNamesReadOnly.union(names) else: - if not hasattr(self, '_parNames'): - self._parNames = set() self._parNames = self._parNames.union(names) @property def params(self): - return {name: getattr(self, name) for name in self._readOnly.union(self._parNames)} + return {name: getattr(self, name) + for name in self._parNamesReadOnly.union(self._parNames)} def __setattr__(self, name, value): - try: - if name in self._readOnly: - raise ReadOnlyError(name) - except AttributeError: - pass + if name in self._parNamesReadOnly: + raise ReadOnlyError(name) super().__setattr__(name, value) From d77ea2345f043f136720e41000fc562181ce5c49 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 18:48:52 +0100 Subject: [PATCH 27/34] TL: putting ndim to property for advectionNd class --- pySDC/core/Common.py | 3 +-- .../problem_classes/AdvectionEquation_ND_FD.py | 8 ++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pySDC/core/Common.py b/pySDC/core/Common.py index f357c48700..21698711c3 100644 --- a/pySDC/core/Common.py +++ b/pySDC/core/Common.py @@ -46,8 +46,7 @@ def _register(self, *names, readOnly=False): @property def params(self): - return {name: getattr(self, name) - for name in self._parNamesReadOnly.union(self._parNames)} + return {name: getattr(self, name) for name in self._parNamesReadOnly.union(self._parNames)} def __setattr__(self, name, value): if name in self._parNamesReadOnly: diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index e96c0cf7d8..64b2bae5aa 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -118,15 +118,19 @@ def __init__( self.Id = sp.eye(np.prod(nvars), format='csc') # store relevant attributes - self.nvars, self.ndim, self.c = nvars, ndim, c + self.nvars, self.c = nvars, c self.stencil_type, self.order, self.bc = stencil_type, order, bc self.freq, self.sigma = freq, sigma self.lintol, self.liniter, self.direct_solver = lintol, liniter, direct_solver # register parameters - self._register('nvars', 'ndim', 'c', 'stencil_type', 'order', 'bc', readOnly=True) + self._register('nvars', 'c', 'stencil_type', 'order', 'bc', readOnly=True) self._register('freq', 'sigma', 'lintol', 'liniter', 'direct_solver') + @property + def ndim(self): + return len(self.nvars) + def eval_f(self, u, t): """ Routine to evaluate the RHS From 6c989cb32c62334cb910aabda33ed5f4ab435a05 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 20:14:58 +0100 Subject: [PATCH 28/34] TL: adding documentation --- pySDC/core/Common.py | 29 +-- pySDC/core/Problem.py | 55 ++++-- .../AdvectionEquation_ND_FD.py | 173 ++++++++++++------ 3 files changed, 170 insertions(+), 87 deletions(-) diff --git a/pySDC/core/Common.py b/pySDC/core/Common.py index 21698711c3..487c28d008 100644 --- a/pySDC/core/Common.py +++ b/pySDC/core/Common.py @@ -21,23 +21,29 @@ def __new__(cls, name, bases, dct): class RegisterParams(metaclass=_MetaRegisterParams): - """Base class to register parameters""" + """ + Base class to register parameters. + + Attributes + ---------- + params : dict (property) + Dictionnary containing names and values of registered parameters. + _parNames : set of str + Names of all the registered parameters. + _parNamesReadOnly : set of str + Names of all the parameters registered as read-only. + """ def _register(self, *names, readOnly=False): """ - Register class attributes as + Register a list of attribute name as parameters of the class. Parameters ---------- - *names : TYPE - DESCRIPTION. - readOnly : TYPE, optional - DESCRIPTION. The default is False. - - Returns - ------- - None. - + *names : list of str + The name of the parameters to be registered (should be class attributes). + readOnly : bool, optional + Wether or not store the parameters as read-only attributes """ if readOnly: self._parNamesReadOnly = self._parNamesReadOnly.union(names) @@ -46,6 +52,7 @@ def _register(self, *names, readOnly=False): @property def params(self): + """Dictionnary containing names and values of registered parameters""" return {name: getattr(self, name) for name in self._parNamesReadOnly.union(self._parNames)} def __setattr__(self, name, value): diff --git a/pySDC/core/Problem.py b/pySDC/core/Problem.py index d38224fff8..e6c9283a67 100644 --- a/pySDC/core/Problem.py +++ b/pySDC/core/Problem.py @@ -1,3 +1,12 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Description +----------- + +Module containing the base Problem class for pySDC +""" + import logging from pySDC.core.Common import RegisterParams @@ -5,26 +14,24 @@ class ptype(RegisterParams): """ - Prototype class for problems, just defines the attributes essential to get started - - Attributes: - logger: custom logger for problem-related logging - params (__Pars): parameter object containing the custom parameters passed by the user - init: number of degrees-of-freedom (whatever this may represent) - dtype_u: variable data type - dtype_f: RHS data type + Prototype class for problems, just defines the attributes essential to get started. + + Parameters + ---------- + init : list of args + Argument(s) used to initialize data types. + dtype_u : type + Variable data type. Should generate a data variable using dtype_u(init). + dtype_f : type + RHS data type. Should generate a data variable using dtype_f(init). + + Attributes + ---------- + logger: logging.Logger + custom logger for problem-related logging. """ def __init__(self, init, dtype_u, dtype_f): - """ - Initialization routine. - Add the problem parameters as keyword arguments. - - Args: - init: number of degrees-of-freedom (whatever this may represent) - dtype_u: variable data type - dtype_f: RHS data type - """ # set up logger self.logger = logging.getLogger('problem') @@ -35,15 +42,29 @@ def __init__(self, init, dtype_u, dtype_f): @property def u_init(self): + """Generate a data variable for u""" return self.dtype_u(self.init) @property def f_init(self): + """Generate a data variable for RHS""" return self.dtype_f(self.init) def eval_f(self, u, t): """ Abstract interface to RHS computation of the ODE + + Parameters + ---------- + u : dtype_u + Current values. + t : float + Current time. + + Returns + ------- + f : dtype_f + The RHS values. """ raise NotImplementedError('ERROR: problem has to implement eval_f(self, u, t)') diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 64b2bae5aa..59558bcd77 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -10,13 +10,64 @@ # noinspection PyUnusedLocal class advectionNd(ptype): - """ - Example implementing the unforced ND advection equation with periodic BCs in [0,1]^N, - discretized using central finite differences - - Attributes: - A: FD discretization of the ND grad operator - dx: distance between two spatial nodes (here: being the same in all dimensions) + r""" + Example implementing the unforced ND advection equation with periodic + or Dirichlet boundary conditions in :math:`[0,1]^N`, + and initial solution of the form + + .. math:: + u({\bf x},0) = \prod_{i=1}^N \sin(f\pi x_i), + + with :math:`x_i` the coordinate in :math:`i^{th}` dimension. + Discretization uses central finite differences. + + Parameters + ---------- + nvars : int of tuple, optional + Spatial resolution (same in all dimensions). Using a tuple allows to + consider several dimensions, e.g nvars=(16,16) for a 2D problem. + c : float, optional + Advection speed (same in all dimensions). + freq : int of tuple, optional + Spatial frequency :math:`f` of the initial conditions, can be tuple. + stencil_type : str, optional + Type of the finite difference stencil. + order : int, optional + Order of the finite difference discretization. + lintol : float, optional + Tolerance for spatial solver (GMRES). + liniter : int, optional + Max. iterations number for GMRES. + direct_solver : bool, optional + Whether to solve directly or use GMRES. + bc : str, optional + Boundary conditions, either "periodic" or "dirichlet". + sigma : float, optional + If freq=-1 and ndim=1, uses a Gaussian initial solution of the form + + .. math:: + u(x,0) = e^{ + \frac{\displaystyle 1}{\displaystyle 2} + \left( + \frac{\displaystyle x-1/2}{\displaystyle \sigma} + \right)^2 + } + + Attributes + ---------- + A: sparse matrix (CSC) + FD discretization matrix of the ND grad operator. + ndim: int + Number of space dimensions. + dx: float + Distance between two spatial nodes (here: being the same in all dimensions). + Id: sparse matrix (CSC) + Identity matrix of the same dimension as A + + Notes + ----- + Args can be set as values or as tuples, which will increase the dimension. + Do, however, take care that all spatial parameters have the same dimension. """ def __init__( @@ -32,24 +83,6 @@ def __init__( bc='periodic', sigma=6e-2, ): - """ - Initialization routine - - Args can be set as values or as tuples, which will increase the dimension. - Do, however, take care that all spatial parameters have the same dimension. - - Args: - nvars (int): Spatial resolution, can be tuple - c (float): Advection speed, can be tuple - freq (int): Spatial frequency of the initial conditions, can be tuple - stencil_type (str): Type of the finite difference stencil - order (int): Order of the finite difference discretization - lintol (float): Tolerance for spatial solver (GMRES) - liniter (int): Max. iterations for GMRES - direct_solver (bool): Whether to solve directly or use GMRES - bc (str): Boundary conditions - """ - # make sure parameters have the correct types if not type(nvars) in [int, tuple]: raise ProblemError('nvars should be either tuple or int') @@ -129,85 +162,107 @@ def __init__( @property def ndim(self): + """Number of dimensions of the spatial problem""" return len(self.nvars) + @property + def dx(self): + """Size of the mesh (in all dimensions)""" + return self.xvalues[1] - self.xvalues[0] + def eval_f(self, u, t): """ Routine to evaluate the RHS - Args: - u (dtype_u): current values - t (float): current time - - Returns: - dtype_f: the RHS + Parameters + ---------- + u : dtype_u + Current values. + t : float + Current time. + + Returns + ------- + f : dtype_f + The RHS values. """ - f = self.f_init f[:] = self.A.dot(u.flatten()).reshape(self.nvars) return f def solve_system(self, rhs, factor, u0, t): """ - Simple linear solver for (I-factor*A)u = rhs - - Args: - rhs (dtype_f): right-hand side for the linear system - factor (float): abbrev. for the local stepsize (or any other factor required) - u0 (dtype_u): initial guess for the iterative solver - t (float): current time (e.g. for time-dependent BCs) - - Returns: - dtype_u: solution as mesh + Simple linear solver for (I-factor*A)u = rhs. + + Parameters + ---------- + rhs : dtype_f + Right-hand side for the linear system. + factor : float + Abbrev. for the local stepsize (or any other factor required). + u0 : dtype_u + Initial guess for the iterative solver. + t : float + Current time (e.g. for time-dependent BCs). + + Returns + ------- + sol : dtype_u + The solution of the linear solver. """ - direct_solver, Id, A, nvars, lintol, liniter = ( + direct_solver, Id, A, nvars, lintol, liniter, sol = ( self.direct_solver, self.Id, self.A, self.nvars, self.lintol, self.liniter, + self.u_init, ) - me = self.dtype_u(self.init) if direct_solver: - me[:] = spsolve(Id - factor * A, rhs.flatten()).reshape(nvars) + sol[:] = spsolve(Id - factor * A, rhs.flatten()).reshape(nvars) else: - me[:] = gmres(Id - factor * A, rhs.flatten(), x0=u0.flatten(), tol=lintol, maxiter=liniter, atol=0,)[ + sol[:] = gmres(Id - factor * A, rhs.flatten(), x0=u0.flatten(), tol=lintol, maxiter=liniter, atol=0,)[ 0 ].reshape(nvars) - return me + return sol def u_exact(self, t, **kwargs): """ Routine to compute the exact solution at time t - Args: - t (float): current time - - Returns: - me: exact solution + Parameters + ---------- + t : float + Time of the exact solution. + **kwargs : dict + Additional arguments (that won't be used). + + Returns + ------- + sol : dtype_u + The exact solution. """ # Initialize pointers and variables - ndim, freq, x, c, sigma = self.ndim, self.freq, self.xvalues, self.c, self.sigma - me = self.dtype_u(self.init) + ndim, freq, x, c, sigma, sol = self.ndim, self.freq, self.xvalues, self.c, self.sigma, self.u_init if ndim == 1: if freq[0] >= 0: - me[:] = np.sin(np.pi * freq[0] * (x - c * t)) + sol[:] = np.sin(np.pi * freq[0] * (x - c * t)) elif freq[0] == -1: # Gaussian initial solution - me[:] = np.exp(-0.5 * (((x - (c * t)) % 1.0 - 0.5) / sigma) ** 2) + sol[:] = np.exp(-0.5 * (((x - (c * t)) % 1.0 - 0.5) / sigma) ** 2) elif ndim == 2: - me[:] = np.sin(np.pi * freq[0] * (x[None, :] - c * t)) * np.sin(np.pi * freq[1] * (x[:, None] - c * t)) + sol[:] = np.sin(np.pi * freq[0] * (x[None, :] - c * t)) * np.sin(np.pi * freq[1] * (x[:, None] - c * t)) elif ndim == 3: - me[:] = ( + sol[:] = ( np.sin(np.pi * freq[0] * (x[None, :, None] - c * t)) * np.sin(np.pi * freq[1] * (x[:, None, None] - c * t)) * np.sin(np.pi * freq[2] * (x[None, None, :] - c * t)) ) - return me + return sol From 891c491e892507fbec5e0939fd9768ab88e7d1e5 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 20:57:18 +0100 Subject: [PATCH 29/34] TL: learning from my mistakes --- docs/contrib/01_pull_requests.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md index 2886a138fb..e63e4624d4 100644 --- a/docs/contrib/01_pull_requests.md +++ b/docs/contrib/01_pull_requests.md @@ -25,6 +25,17 @@ some_feature # to add a new feature (implementation, ...) Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. +> :bell: During the revision of your pull request, it can happen that additional changes are done to the `upstream/master` branch (in parallel-in-time/pySDC repo). In that case, don't hesitate to regularly merge the it into your local branch to solve eventual conflicts, for instance : +> +> ```bash +> # On your local repo, with the "my_feature" branch +> $ git fetch upstream # synchronize with parallel-in-time/pySDC +> $ git merge upstream/master # merge into my_feature +> $ git push # push local merges to your repository +> ``` +> +> The pull request will be updated with any merge changes on the `my_feature` branch of your repository. + ## Release development branches @@ -33,6 +44,8 @@ Such branches are merged to `master` when ready. > :scroll: Pull request to those branches can be done from fork branches using the **same name** as the release branch. +> :bell: **Never** merge modifications on the `upstream/master` branch into your own local release branch. If some commit on the master branch have to be taken into account in the release branch (for instance, v6), then first request a merge of `upstream/master` into `upstream/v6`, merge `upstream/v6` into your local `v6` branch, then push into your own repository to update the pull request. + ## Feature development branches Additional branches starting with the prefix `dev/[...]` can be used to add new features, that cannot be added with only one pull request (for instance, when several developers work on it). @@ -40,5 +53,8 @@ Those could eventually be merged into master if they don't break the API, or to > :scroll: Pull request to those branches can be done from fork branches using the **same name** as the feature branch. +> :bell: **Never** merge modifications on `upstream/master` or any release branch into your own local development branch (same comment and solution as for the release branches above). + + [:arrow_left: Back to Contributing Summary](./../../CONTRIBUTING.md) --- [:arrow_right: Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file From 7192c2b7641ac99d607d449982bacc2aefddeac0 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Mon, 16 Jan 2023 20:59:09 +0100 Subject: [PATCH 30/34] TL: typo --- docs/contrib/01_pull_requests.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md index e63e4624d4..dafd6cd378 100644 --- a/docs/contrib/01_pull_requests.md +++ b/docs/contrib/01_pull_requests.md @@ -25,7 +25,7 @@ some_feature # to add a new feature (implementation, ...) Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. -> :bell: During the revision of your pull request, it can happen that additional changes are done to the `upstream/master` branch (in parallel-in-time/pySDC repo). In that case, don't hesitate to regularly merge the it into your local branch to solve eventual conflicts, for instance : +> :bell: During the revision of your pull request, it can happen that additional changes are done to the `upstream/master` branch (in parallel-in-time/pySDC repo). In that case, don't hesitate to regularly merge them into your local branch to solve eventual conflicts, for instance : > > ```bash > # On your local repo, with the "my_feature" branch From 3c10b634dc3d9c26911ad2cab7422d613efdffa5 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Tue, 17 Jan 2023 09:40:08 +0100 Subject: [PATCH 31/34] TL: merge attribute storing and parameter registering --- pySDC/core/Common.py | 11 ++++++++++- .../problem_classes/AdvectionEquation_ND_FD.py | 12 +++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/pySDC/core/Common.py b/pySDC/core/Common.py index 487c28d008..a03c4b10e9 100644 --- a/pySDC/core/Common.py +++ b/pySDC/core/Common.py @@ -34,7 +34,7 @@ class RegisterParams(metaclass=_MetaRegisterParams): Names of all the parameters registered as read-only. """ - def _register(self, *names, readOnly=False): + def _makeAttributeAndRegister(self, *names, localVars=None, readOnly=False): """ Register a list of attribute name as parameters of the class. @@ -45,6 +45,15 @@ def _register(self, *names, readOnly=False): readOnly : bool, optional Wether or not store the parameters as read-only attributes """ + if len(names) > 1 and localVars is None: + raise ValueError("a dictionnary must be provided in localVars with parameters values") + # Set parameters as attributes + for name in names: + try: + super().__setattr__(name, localVars[name]) + except KeyError: + raise ValueError(f'value for {name} not given in localVars') + # Register as class parameter if readOnly: self._parNamesReadOnly = self._parNamesReadOnly.union(names) else: diff --git a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py index 59558bcd77..4b06349440 100644 --- a/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py +++ b/pySDC/implementations/problem_classes/AdvectionEquation_ND_FD.py @@ -150,15 +150,9 @@ def __init__( self.xvalues = xvalues self.Id = sp.eye(np.prod(nvars), format='csc') - # store relevant attributes - self.nvars, self.c = nvars, c - self.stencil_type, self.order, self.bc = stencil_type, order, bc - self.freq, self.sigma = freq, sigma - self.lintol, self.liniter, self.direct_solver = lintol, liniter, direct_solver - - # register parameters - self._register('nvars', 'c', 'stencil_type', 'order', 'bc', readOnly=True) - self._register('freq', 'sigma', 'lintol', 'liniter', 'direct_solver') + # store attribute and register them as parameters + self._makeAttributeAndRegister('nvars', 'c', 'stencil_type', 'order', 'bc', localVars=locals(), readOnly=True) + self._makeAttributeAndRegister('freq', 'sigma', 'lintol', 'liniter', 'direct_solver', localVars=locals()) @property def ndim(self): From a0351fce89f1e99a21a9ac91af4089ae030be24b Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Tue, 17 Jan 2023 10:29:21 +0100 Subject: [PATCH 32/34] TL: documentation update --- pySDC/core/Common.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pySDC/core/Common.py b/pySDC/core/Common.py index a03c4b10e9..030a845ad2 100644 --- a/pySDC/core/Common.py +++ b/pySDC/core/Common.py @@ -42,6 +42,11 @@ def _makeAttributeAndRegister(self, *names, localVars=None, readOnly=False): ---------- *names : list of str The name of the parameters to be registered (should be class attributes). + localVars : dict + Dictionnary containing key=names and values=paramValues for each + parNames given in names. Can be provided, for instance, using + `locals()` built-in dictionary. MUST BE provided as soon as + names contains anything. readOnly : bool, optional Wether or not store the parameters as read-only attributes """ From 96eb3205b9bbb5a490fcc820176d3ec993f6361a Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Tue, 17 Jan 2023 16:46:36 +0100 Subject: [PATCH 33/34] TL: adding README in markdown format --- README.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000000..f0fba9b016 --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ +[![badge-ga](https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml/badge.svg?branch=master)](https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml) +[![badge-ossf](https://bestpractices.coreinfrastructure.org/projects/6909/badge)](https://bestpractices.coreinfrastructure.org/projects/6909) +[![badge-cc](https://codecov.io/gh/Parallel-in-Time/pySDC/branch/master/graph/badge.svg?token=hpP18dmtgS)](https://codecov.io/gh/Parallel-in-Time/pySDC) +[![zenodo](https://zenodo.org/badge/26165004.svg)](https://zenodo.org/badge/latestdoi/26165004) + +# Welcome to pySDC! + +The `pySDC` project is a Python implementation of the +spectral deferred correction (SDC) approach and its flavors, esp. the +multilevel extension MLSDC and PFASST. It is intended for rapid +prototyping and educational purposes. New ideas like e.g. sweepers or +predictors can be tested and first toy problems can be easily +implemented. + +## Features + +- Variants of SDC: explicit, implicit, IMEX, multi-implicit, Verlet, + multi-level, diagonal, multi-step +- Variants of PFASST: virtual parallel or MPI-based parallel, + classical of multigrid perspective +- 8 tutorials: from setting up a first collocation problem to SDC, + PFASST and advanced topics +- Projects: many documented projects with defined and tested outcomes +- Many different examples, collocation types, data types already + implemented +- Works with [FEniCS](https://fenicsproject.org/), + [mpi4py-fft](https://mpi4py-fft.readthedocs.io/en/latest/) and + [PETSc](http://www.mcs.anl.gov/petsc/) (through + [petsc4py](https://bitbucket.org/petsc/petsc4py)) +- Continuous integration via [GitHub + Actions](https://github.com/Parallel-in-Time/pySDC/actions) and + [Gitlab CI](https://gitlab.hzdr.de/r.speck/pysdc/-/pipelines) +- Fully compatible with Python 3.7 - 3.10, runs at least on Ubuntu and + MacOS + +## Getting started + +The code is hosted on GitHub, see +, and PyPI, see +. While using `pip install pySDC` +will give you a core version of `pySDC` to work with, +working with the developer version is most often the better choice. We +thus recommend to checkout the code from GitHub and install the +dependencies e.g. by using a [conda](https://conda.io/en/latest/) +environment. For this, `pySDC` ships with environment files +which can be found in the folder `etc/`. Use these as e.g. + +``` bash +conda env create --yes -f etc/environment-base.yml +``` + +To check your installation, run + +``` bash +pytest pySDC/tests -m NAME +``` + +where `NAME` corresponds to the environment you chose (`base` in the +example above). You may need to update your `PYTHONPATH` by running + +``` bash +export PYTHONPATH=$PYTHONPATH:/path/to/pySDC/root/folder +``` + +in particular if you want to run any of the playgrounds, projects or +tutorials. All `import` statements there assume that the +`pySDC`\'s base directory is part of `PYTHONPATH`. + +For many examples, `LaTeX` is used for the plots, i.e. a +decent installation of this is needed in order to run those examples. +When using `fenics` or `petsc4py`, a C++ +compiler is required (although installation may go through at first). + +For more details on `pySDC`, check out http://www.parallel-in-time.org/pySDC. + +## How to cite + +If you use pySDC or parts of it for your work, great! Let us know if we +can help you with this. Also, we would greatly appreciate a citation of +[this paper](https://doi.org/10.1145/3310410): + +> Robert Speck, **Algorithm 997: pySDC - Prototyping Spectral Deferred +> Corrections**, ACM Transactions on Mathematical Software (TOMS), +> Volume 45 Issue 3, August 2019, + +The current software release can be cited using Zenodo: +[![zenodo](https://zenodo.org/badge/26165004.svg)](https://zenodo.org/badge/latestdoi/26165004) + +## Contributing + +`pySDC` code was originally developed by [Robert Speck (@pancetta)], +and is now maintained and developed by a small community of scientists interested in SDC methods, +that dearly welcomes any contribution. +If you want to take part of this, please take the time to read our [Contribution Guidelines](./CONTRIBUTING.md). + + +## Acknowledgements + +This project has received funding from the [European High-Performance +Computing Joint Undertaking](https://eurohpc-ju.europa.eu/) (JU) under +grant agreement No 955701 ([TIME-X](https://www.time-x-eurohpc.eu/)). +The JU receives support from the European Union's Horizon 2020 research +and innovation programme and Belgium, France, Germany, and Switzerland. +This project also received funding from the [German Federal Ministry of +Education and Research](https://www.bmbf.de/bmbf/en/home/home_node.html) +(BMBF) grant 16HPC047. The project also received help from the +[Helmholtz Platform for Research Software Engineering - Preparatory +Study (HiRSE_PS)](https://www.helmholtz-hirse.de/). From 837e4f5f51fe973d5345edde52b5a04e59d0ebb9 Mon Sep 17 00:00:00 2001 From: Thibaut Lunet Date: Tue, 17 Jan 2023 20:59:08 +0100 Subject: [PATCH 34/34] TL: trying to solve issue250 --- CHANGELOG.md | 226 + CHANGELOG.rst | 133 - README.md | 8 +- README.rst | 98 - docs/contrib/01_pull_requests.md | 10 +- docs/contrib/02_continuous_integration.md | 4 +- docs/contrib/03_naming_conventions.md | 6 +- docs/contrib/04_custom_implementations.md | 4 +- docs/convert_markdown.py | 42 + docs/emojis.json | 5983 +++++++++++++++++++++ docs/source/.gitignore | 4 + docs/source/conf.py | 1 + docs/source/index.rst | 4 +- docs/update_apidocs.sh | 10 +- 14 files changed, 6281 insertions(+), 252 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 CHANGELOG.rst delete mode 100644 README.rst create mode 100755 docs/convert_markdown.py create mode 100644 docs/emojis.json create mode 100644 docs/source/.gitignore diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..70ba4fe970 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,226 @@ +# Changelog + +- October 7, 2022: Version 5 comes with many changes, both visible and + invisible ones. Some of those break the existing API, but if you are + using tests, you should be fine. Major changes include: + + - **New convergence controllers**: Checking whether a step has + converged can be tricky, so we made separate modules out of + these checks. This makes features like adaptivity easier to + implement. Also, the controllers have been streamlined a bit to + make them more readable/digestible. Thanks to + [\@brownbaerchen](https://github.com/brownbaerchen)! + - **Adaptivity and error estimators**: SDC now comes with + adaptivity and error estimation, leveraging the new convergence + controllers out of the box. Thanks to + [\@brownbaerchen](https://github.com/brownbaerchen)! + - **New collocation classes**: We completely rewrote the way + collocation nodes and weights are computed. It is now faster, + more reliable, shorter, better. But: this **breaks the API**, + since the old collocation classes do not exist anymore. The + projects, tutorials, tests and most of the playgrounds have been + adapted, so have a look over there to see [what to + change](https://github.com/Parallel-in-Time/pySDC/commit/01ffabf71a8d71d33b74809271e8ad5a7b03ac5e#diff-adf74297b6c64d320f4da0f1d5528eda6229803a6615baf5d54c418032543681). + Thanks to [\@tlunet](https://github.com/tlunet)! + - **New projects**: Resilience and energy grid simulations are + ready to play with and are waiting for more ideas! We used this + effort to condense and clean up the problem classes a bit, + reducing the number of files and classes with only marginal + differences significantly. This could potentially **break your + code**, too, if you rely on any of those affected ones. Thanks + to [\@brownbaerchen](https://github.com/brownbaerchen) and + [\@lisawim](https://github.com/lisawim)! + - **Toward GPU computing**: We included a new data type based on + [CuPy](https://cupy.dev/) making GPU computing possible. Thanks + to [\@timo2705](https://github.com/timo2705)! + - **Better testing**: The CI pipeline got a complete overhaul + (again), now enabling simultaneous tests, faster/earlier + linting, benchmarking (at least, in principal), separate + environments and so on. The code is tested under Ubuntu and + MacOS. + - **Better code formatting**: `pySDC` now uses + [black](https://black.readthedocs.io) and + [flakeheaven](https://flakeheaven.readthedocs.io) for cleaner + source code. After complaints here and there about linting + \"errors\" the recommended way now is to run `black` before + submission. + +- December 13, 2021: Version 4.2 brings compatibility with Python 3.9, + including some code cleanup. The CI test suite seems to run faster + now, since sorting out the dependencies is faster. Tested + [mamba](https://github.com/mamba-org/mamba), which for now makes the + CI pipeline much faster. Also, the CI workflow can now run locally + using [act](https://github.com/nektos/act). We introduced markers + for soem of the tests in preparation of distributed tests on + different platforms. And finally, a LaTeX installation is no longer + needed use plotting (but recommended). + +- August 11, 2021: Version 4.1 has some more changes under the hood, + most of them with no significant impact to users. The CI pipeline + has been completely rewritten, porting the code to [Github + Actions](https://github.com/features/actions) (away from [Travis + CI](https://travis-ci.com/)), to [flake8](https://flake8.pycqa.org) + and to [pytest](https://pytest.org) (away from + [nose](https://nose.readthedocs.io)). One thing that may have an + impact on users is that following the changes made in Version 4.0, + the PETSc data structures are now much easier, removing a lot of + unnecessary boilerplate code. + +- May 4, 2021: Long time, no see, but this major release 4.0 marks + some improvements under the hood: + + - **Rewrote `mesh` and `particle` data type**: + Creation of new arrays for each operation is now avoided by + directly subclassing Numpy\'s `ndarray`. Somewhat faster, + definitively better, less code, future-proof, but also breaking + the API. If you use `pySDC` for your project, make + sure you adapt to the new data types (or don\'t upgrade). + - **Faster quadrature**: Thanks to + [tlunet](https://github.com/tlunet) the computation of the + weights is now faster and (even) more reliable. No breaking of + any API here\... + - **Bugfixing and version pushes**: The code should run without + (many) complaints with Python 3.6, 3.7 and potentially above. + Also, the plotting routines have been adapted to work with + recent versions of `matplotlib`. + + This is not much (yet) and if it were not for the API changes, this + would have been a minor release. + +- August 30, 2019: Version 3.1 adds many more examples like the + nonlinear Schrรถdinger equation, more on Gray-Scott and in particular + Allen-Cahn. Those are many implemented using the parallel FFT + library + [mpi4pi-fft](https://bitbucket.org/mpi4py/mpi4py-fft/src/master/), + which can now be used with `pySDC`. There are now 8 + tutorials, where step 7 shows the usage of three external libraries + with `pySDC`: mpi4py, FEniCS and petsc4py. The MPI controller has + been improved after performaning a detailed performance analysis + using [Score-P](https://www.vi-hps.org/projects/score-p/) and + [Extrae](https://www.vi-hps.org/Tools/Extrae.html). Finally: first + steps towards error/iteration estimators are taken, too. + +- February 14, 2019: Released version 3 of `pySDC`. This + release is accompanied by the **ACM TOMS paper** + ["pySDC -- Prototyping spectral deferred corrections"](https://doi.org/10.1145/3310410). + It release contains some breaking changes to the API. In detail: + + - **Dropped Python 2 support**: Starting with this version, + `pySDC` relies on Python 3. Various incompabilities + led to inconsistent treatment of dependencies, so that parts of + the code had to use Python 2 while other relied on Python 3 or + could do both. We follow [A pledge to migrate to Python + 3](https://python3statement.org/) with this decision, as most + prominent dependencies of `pySDC` already do. + - **Unified controllers**: Instead of providing (and maintaining) + four different controllers, this release only has one for + emulated and one for MPI-based time-parallelization + (`controller_nonMPI` and `controller_MPI`). This should avoid + further confusion and makes the code easier to maintain. Both + controllers use the multigrid perspective for the algorithm + (first exchange data, than compute updates), but the classical + way of determining when to stop locally (each time-step is + stopped when ready, if the previous one is ready, too). The + complete multigrid behavior can be restored using a flag. All + included projects and tutorials have been adapted to this. + - **No more data types in the front-ends**: The redundant use of + data type specifications in the description dictionaries has + been removed. Data types are now declared within each problem + class (more precisely, in the header of the `__init__`-method to + allow inhertiance). All included projects and tutorials have + been adapted to this. + - **Renewed FEniCS support**: This release revives the deprecated + [FEniCS](https://fenicsproject.org/) support, now requiring at + least FEniCS 2018.1. The integration is tested using Travis-CI. + - **More consistent handling of local initial conditions**: The + treatment of `u[0]` and `f[0]` has been fixed and made + consistent throughout the code. + - As usual, many bugs have been discovered and fixed. + +- May 23, 3018: Version 2.4 adds support for + [petsc4py](https://bitbucket.org/petsc/petsc4py)! You can now use + [PETSc](http://www.mcs.anl.gov/petsc/) data types + (`pySDC` ships with DMDA for distributed structured + grids) and parallel solvers right from your examples and problem + classes. There is also a new tutorial (7.C) showing this in a bit + more detail, including communicator splitting for parallelization in + space and time. Warning: in order to get this to work you need to + install petsc4py and mpi4py first! Make sure both use MPICH3 + bindings. Downloading `pySDC` from PyPI does not include + these packages. + +- February 8, 2018: Ever got annoyed at `pySDC`\'s + incredibly slow setup phase when multiple time-steps are used? + Version 2.3 changes this by copying the data structure of the first + step to all other steps using the [dill + Package](https://pypi.python.org/pypi/dill). Setup times could be + reduced by 90% and more for certain problems. We also increase the + speed for certain calculations, in particular for the Penning trap + example. + +- November 7, 2017: Version 2.2 contains matrix-based versions of + PFASST within the project `matrixPFASST`. This involved quite a few + changes in more or less unexpected places, e.g. in the multigrid + controller and the transfer base class. The impact of these changes + on other projects should be negligible, though. + +- October 25, 2017: For the [6th Workshop on Parallel-in-Time + Integration](https://www.ics.usi.ch/index.php/6th-workshop-on-parallel-in-time-methods) + `pySDC` has been updated to version 2.1. It is now + available on PyPI - the Python Package Index, see + and can be installed simply by + using `pip install pySDC`. Naturally, this release contains a lot of + bugfixes and minor improvements. Most notably, the file structure + has been changed again to meet the standards for Python packaging + (at least a bit). + +- November 24, 2016: Released version 2 of `pySDC`. This + release contains major changes to the code and its structure: + + - **Complete redesign of code structure**: The `core` part of + `pySDC` only contains the core modules and classes, + while `implementations` contains the actual implementations + necessary to run something. This now includes separate files for + all collocation classes, as well as a collection of problems, + transfer classes and so on. Most examples have been ported to + either `tutorials`, `playgrounds` or `projects`. + - **Introduction of tutorials**: We added a tutorial (see below) + to explain many of pySDC\'s features in a step-by-step fashion. + We start with a simple spatial discretization and collocation + formulations and move step by step to SDC, MLSDC and PFASST. All + tutorials are accompanied by tests. + - **New all-inclusive controllers**: Instead of having two PFASST + controllers which could also do SDC and MLSDC (and more), we now + have four generic controllers which can do all these methods, + depending on the input. They are split into two by two class: + `MPI` and `NonMPI` for real or virtual + parallelisim as well as `classic` and + `multigrid` for the standard and multigrid-like + implementation of PFASST and the likes. Initialization has been + simplified a lot, too. + - **Collocation-based coarsening** As the standard PFASST + libraries [libpfasst](https://bitbucket.org/memmett/libpfasst) + and [PFASST++](https://github.com/Parallel-in-Time/PFASST) + `pySDC` now offers collocation-based coarsening, + i.e. the number of collocation nodes can be reduced during + coarsening. Also, time-step coarsening is in preparation, but + not implemented yet. + - **Testing and documentation** The core, implementations and + plugin packages and their subpackages are fully documented using + sphinx-apidoc, see below. This documentation as well as this + website are generated automatically using + [Travis-CI](https://travis-ci.org/Parallel-in-Time/pySDC). Most + of the code is supported by tests, mainly realized by using the + tutorial as the test routines with clearly defined results. + Also, projects are accompanied by tests. + - Further, minor changes: + - Switched to more stable barycentric interpolation for the + quadrature weights + - New collocation class: `EquidistantSpline_Right` + for spline-based quadrature + - Collocation tests are realized by generators and not by + classes + - Multi-step SDC (aka single-level PFASST) now works as + expected + - Reworked many of the internal structures for consistency and + simplicity diff --git a/CHANGELOG.rst b/CHANGELOG.rst deleted file mode 100644 index 56a97c88d6..0000000000 --- a/CHANGELOG.rst +++ /dev/null @@ -1,133 +0,0 @@ -Changelog ---------- - -- October 7, 2022: Version 5 comes with many changes, both visible and invisible ones. Some of those break the existing API, but - if you are using tests, you should be fine. Major changes include: - - - **New convergence controllers**: Checking whether a step has converged can be tricky, so we made separate modules out of these - checks. This makes features like adaptivity easier to implement. Also, the controllers have been streamlined a bit to make them more readable/digestible. - Thanks to `@brownbaerchen `_! - - **Adaptivity and error estimators**: SDC now comes with adaptivity and error estimation, leveraging the new convergence controllers out of the box. - Thanks to `@brownbaerchen `_! - - **New collocation classes**: We completely rewrote the way collocation nodes and weights are computed. It is now faster, more reliable, shorter, better. - But: this **breaks the API**, since the old collocation classes do not exist anymore. The projects, tutorials, tests and most of the playgrounds - have been adapted, so have a look over there to see `what to change `_. - Thanks to `@tlunet `_! - - **New projects**: Resilience and energy grid simulations are ready to play with and are waiting for more ideas! - We used this effort to condense and clean up the problem classes a bit, reducing the number of files and classes with only marginal differences significantly. - This could potentially **break your code**, too, if you rely on any of those affected ones. - Thanks to `@brownbaerchen `_ and `@lisawim `_! - - **Toward GPU computing**: We included a new data type based on `CuPy `_ making GPU computing possible. - Thanks to `@timo2705 `_! - - **Better testing**: The CI pipeline got a complete overhaul (again), now enabling simultaneous tests, faster/earlier linting, benchmarking (at least, in principal), separate environments and so on. - The code is tested under Ubuntu and MacOS. - - **Better code formatting**: `pySDC` now uses `black `_ and `flakeheaven `_ for cleaner source code. - After complaints here and there about linting "errors" the recommended way now is to run ``black`` before submission. - -- December 13, 2021: Version 4.2 brings compatibility with Python 3.9, including some code cleanup. The CI test - suite seems to run faster now, since sorting out the dependencies is faster. Tested `mamba `_, - which for now makes the CI pipeline much faster. Also, the CI workflow can now run locally using `act `_. - We introduced markers for soem of the tests in preparation of distributed tests on different platforms. And finally, a LaTeX - installation is no longer needed use plotting (but recommended). - -- August 11, 2021: Version 4.1 has some more changes under the hood, most of them with no significant impact to users. - The CI pipeline has been completely rewritten, porting the code to `Github Actions `_ - (away from `Travis CI `_), to `flake8 `_ and to `pytest `_ - (away from `nose `_). One thing that may have an impact on users is that following the changes - made in Version 4.0, the PETSc data structures are now much easier, removing a lot of unnecessary boilerplate code. - -- May 4, 2021: Long time, no see, but this major release 4.0 marks some improvements under the hood: - - - **Rewrote ``mesh`` and ``particle`` data type**: Creation of new arrays for each operation is now avoided by - directly subclassing Numpy's ``ndarray``. Somewhat faster, definitively better, less code, future-proof, but also breaking the API. If you use `pySDC` - for your project, make sure you adapt to the new data types (or don't upgrade). - - **Faster quadrature**: Thanks to `tlunet `_ the computation of the weights is now faster and - (even) more reliable. No breaking of any API here... - - **Bugfixing and version pushes**: The code should run without (many) complaints with Python 3.6, 3.7 and potentially above. - Also, the plotting routines have been adapted to work with recent versions of `matplotlib`. - - This is not much (yet) and if it were not for the API changes, this would have been a minor release. - -- August 30, 2019: Version 3.1 adds many more examples like the nonlinear Schrรถdinger equation, more on Gray-Scott and in particular Allen-Cahn. - Those are many implemented using the parallel FFT library `mpi4pi-fft `_, which can now be used with `pySDC`. - There are now 8 tutorials, where step 7 shows the usage of three external libraries with `pySDC`: mpi4py, FEniCS and petsc4py. - The MPI controller has been improved after performaning a detailed performance analysis using `Score-P `_ and `Extrae `_. - Finally: first steps towards error/iteration estimators are taken, too. - -- February 14, 2019: Released version 3 of `pySDC`. This release is accompanied by the **ACM TOMS paper** - `"pySDC -- Prototyping spectral deferred corrections" `_. - It release contains some breaking changes to the API. In detail: - - - **Dropped Python 2 support**: Starting with this version, `pySDC` relies on Python 3. Various incompabilities led - to inconsistent treatment of dependencies, so that parts of the code had to use Python 2 while other relied on - Python 3 or could do both. We follow `A pledge to migrate to Python 3 `_ with this decision, - as most prominent dependencies of `pySDC` already do. - - **Unified controllers**: Instead of providing (and maintaining) four different controllers, this release only has - one for emulated and one for MPI-based time-parallelization (``controller_nonMPI`` and ``controller_MPI``). - This should avoid further confusion and makes the code easier to maintain. Both controllers use the multigrid - perspective for the algorithm (first exchange data, than compute updates), but the classical way of determining - when to stop locally (each time-step is stopped when ready, if the previous one is ready, too). The complete multigrid - behavior can be restored using a flag. All included projects and tutorials have been adapted to this. - - **No more data types in the front-ends**: The redundant use of data type specifications in the description dictionaries - has been removed. Data types are now declared within each problem class (more precisely, in the header of the - ``__init__``-method to allow inhertiance). All included projects and tutorials have been adapted to this. - - **Renewed FEniCS support**: This release revives the deprecated `FEniCS `_ support, now requiring at least FEniCS 2018.1. - The integration is tested using Travis-CI. - - **More consistent handling of local initial conditions**: The treatment of ``u[0]`` and ``f[0]`` has been fixed and - made consistent throughout the code. - - As usual, many bugs have been discovered and fixed. - -- May 23, 3018: Version 2.4 adds support for `petsc4py `_! - You can now use `PETSc `_ data types (`pySDC` ships with DMDA for distributed structured grids) and parallel solvers right from your examples and problem classes. - There is also a new tutorial (7.C) showing this in a bit more detail, including communicator splitting for parallelization in space and time. - Warning: in order to get this to work you need to install petsc4py and mpi4py first! Make sure both use MPICH3 bindings. - Downloading `pySDC` from PyPI does not include these packages. - -- February 8, 2018: Ever got annoyed at `pySDC`'s incredibly slow setup phase when multiple time-steps are used? Version 2.3 - changes this by copying the data structure of the first step to all other steps using the `dill Package `_. - Setup times could be reduced by 90% and more for certain problems. We also increase the speed for certain calculations, - in particular for the Penning trap example. - -- November 7, 2017: Version 2.2 contains matrix-based versions of PFASST within the project ``matrixPFASST``. This involved quite a few - changes in more or less unexpected places, e.g. in the multigrid controller and the transfer base class. The impact - of these changes on other projects should be negligible, though. - -- October 25, 2017: For the `6th Workshop on Parallel-in-Time Integration `_ - `pySDC` has been updated to version 2.1. It is now available on PyPI - the Python Package Index, see `https://pypi.python.org/pypi/pySDC `_ - and can be installed simply by using ``pip install pySDC``. Naturally, this release contains a lot of bugfixes and minor improvements. - Most notably, the file structure has been changed again to meet the standards for Python packaging (at least a bit). - -- November 24, 2016: Released version 2 of `pySDC`. This release contains major changes to the code and its structure: - - - **Complete redesign of code structure**: The ``core`` part of `pySDC` only contains the core modules and classes, - while ``implementations`` contains the actual implementations necessary to run something. - This now includes separate files for all collocation classes, as well as a collection of problems, transfer classes and so on. - Most examples have been ported to either ``tutorials``, ``playgrounds`` or ``projects``. - - - **Introduction of tutorials**: We added a tutorial (see below) to explain many - of pySDC's features in a step-by-step fashion. We start with a simple spatial - discretization and collocation formulations and move step by step to SDC, MLSDC and PFASST. - All tutorials are accompanied by tests. - - - **New all-inclusive controllers**: Instead of having two PFASST controllers - which could also do SDC and MLSDC (and more), we now have four generic controllers - which can do all these methods, depending on the input. They are split into - two by two class: `MPI` and `NonMPI` for real or virtual parallelisim as well - as `classic` and `multigrid` for the standard and multigrid-like implementation - of PFASST and the likes. Initialization has been simplified a lot, too. - - - **Collocation-based coarsening** As the standard PFASST libraries `libpfasst `_ and `PFASST++ `_ - `pySDC` now offers collocation-based coarsening, i.e. the number of collocation nodes can be reduced during coarsening. - Also, time-step coarsening is in preparation, but not implemented yet. - - - **Testing and documentation** The core, implementations and plugin packages and their subpackages are fully documented using sphinx-apidoc, see below. - This documentation as well as this website are generated automatically using `Travis-CI `_. - Most of the code is supported by tests, mainly realized by using the tutorial as the test routines with clearly defined results. Also, projects are accompanied by tests. - - - Further, minor changes: - - - Switched to more stable barycentric interpolation for the quadrature weights - - New collocation class: `EquidistantSpline_Right` for spline-based quadrature - - Collocation tests are realized by generators and not by classes - - Multi-step SDC (aka single-level PFASST) now works as expected - - Reworked many of the internal structures for consistency and simplicity \ No newline at end of file diff --git a/README.md b/README.md index f0fba9b016..eeb099f4af 100644 --- a/README.md +++ b/README.md @@ -88,10 +88,10 @@ The current software release can be cited using Zenodo: ## Contributing -`pySDC` code was originally developed by [Robert Speck (@pancetta)], -and is now maintained and developed by a small community of scientists interested in SDC methods, -that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our [Contribution Guidelines](./CONTRIBUTING.md). +`pySDC` code was originally developed by [Robert Speck (@pancetta)](https://github.com/pancetta), +and is now maintained and developed by a small community of scientists interested in SDC methods, that dearly welcomes any contribution. +If you want to take part of this, please take the time to read our [Contribution Guidelines](./CONTRIBUTING.md) +(and don't forget to take a pick at our nice [Code of Conduct](./CODE_OF_CONDUCT.md) :wink:). ## Acknowledgements diff --git a/README.rst b/README.rst deleted file mode 100644 index 0a83a53153..0000000000 --- a/README.rst +++ /dev/null @@ -1,98 +0,0 @@ -|badge-ga| -|badge-ossf| -|badge-cc| -|zenodo| - -Welcome to pySDC! -================= - -The `pySDC` project is a Python implementation of the spectral deferred correction (SDC) approach and its flavors, -esp. the multilevel extension MLSDC and PFASST. It is intended for rapid prototyping and educational purposes. -New ideas like e.g. sweepers or predictors can be tested and first toy problems can be easily implemented. - - -Features --------- - -- Variants of SDC: explicit, implicit, IMEX, multi-implicit, Verlet, multi-level, diagonal, multi-step -- Variants of PFASST: virtual parallel or MPI-based parallel, classical of multigrid perspective -- 8 tutorials: from setting up a first collocation problem to SDC, PFASST and advanced topics -- Projects: many documented projects with defined and tested outcomes -- Many different examples, collocation types, data types already implemented -- Works with `FEniCS `_, `mpi4py-fft `_ and `PETSc `_ (through `petsc4py `_) -- Continuous integration via `GitHub Actions `_ and `Gitlab CI `_ -- Fully compatible with Python 3.7 - 3.10, runs at least on Ubuntu and MacOS - - -Getting started ---------------- - -The code is hosted on GitHub, see `https://github.com/Parallel-in-Time/pySDC `_, and PyPI, see `https://pypi.python.org/pypi/pySDC `_. -While using ``pip install pySDC`` will give you a core version of `pySDC` to work with, working with the developer version -is most often the better choice. We thus recommend to checkout the code from GitHub and install the dependencies e.g. by using a `conda `_ environment. -For this, `pySDC` ships with environment files which can be found in the folder ``etc/``. Use these as e.g. - -.. code-block:: bash - - conda env create --yes -f etc/environment-base.yml - -To check your installation, run - -.. code-block:: bash - - pytest pySDC/tests -m NAME - -where ``NAME`` corresponds to the environment you chose (``base`` in the example above). -You may need to update your ``PYTHONPATH`` by running - -.. code-block:: bash - - export PYTHONPATH=$PYTHONPATH:/path/to/pySDC/root/folder - -in particular if you want to run any of the playgrounds, projects or tutorials. -All ``import`` statements there assume that the `pySDC`'s base directory is part of ``PYTHONPATH``. - -For many examples, `LaTeX` is used for the plots, i.e. a decent installation of this is needed in order to run those examples. -When using `fenics` or `petsc4py`, a C++ compiler is required (although installation may go through at first). - -For more details on `pySDC`, check out `http://www.parallel-in-time.org/pySDC `_. - - -How to cite ------------ - -If you use pySDC or parts of it for your work, great! Let us know if we can help you with this. Also, we would greatly appreciate a citation of `this paper `_: - - Robert Speck, **Algorithm 997: pySDC - Prototyping Spectral Deferred Corrections**, - ACM Transactions on Mathematical Software (TOMS), Volume 45 Issue 3, August 2019, - `https://doi.org/10.1145/3310410 `_ - -The current software release can be cited using Zenodo: |zenodo| - -.. |zenodo| image:: https://zenodo.org/badge/26165004.svg - :target: https://zenodo.org/badge/latestdoi/26165004 - -Contributing ------------- - -`pySDC` code was originaly developped by Robert Speck (@pancetta), -and is now maintained and developed by a small community of scientists interested in SDC methods, -that dearly welcomes any contribution. -If you want to take part of this, please take the time to read our `Contribution Guidelines `_. - - -Acknowledgements ----------------- - -This project has received funding from the `European High-Performance Computing Joint Undertaking `_ (JU) under grant agreement No 955701 (`TIME-X `_). -The JU receives support from the European Unionโ€™s Horizon 2020 research and innovation programme and Belgium, France, Germany, and Switzerland. -This project also received funding from the `German Federal Ministry of Education and Research `_ (BMBF) grant 16HPC047. -The project also received help from the `Helmholtz Platform for Research Software Engineering - Preparatory Study (HiRSE_PS) `_. - - -.. |badge-ga| image:: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml/badge.svg?branch=master - :target: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml -.. |badge-ossf| image:: https://bestpractices.coreinfrastructure.org/projects/6909/badge - :target: https://bestpractices.coreinfrastructure.org/projects/6909 -.. |badge-cc| image:: https://codecov.io/gh/Parallel-in-Time/pySDC/branch/master/graph/badge.svg?token=hpP18dmtgS - :target: https://codecov.io/gh/Parallel-in-Time/pySDC diff --git a/docs/contrib/01_pull_requests.md b/docs/contrib/01_pull_requests.md index dafd6cd378..9cb2dc21f6 100644 --- a/docs/contrib/01_pull_requests.md +++ b/docs/contrib/01_pull_requests.md @@ -25,15 +25,15 @@ some_feature # to add a new feature (implementation, ...) Those changes should be compatible with the existing API (_i.e_ not break it), and **avoid any change** in the current user interface. In particular, it should not modify default values for parameters or remove attributes of existing classes. But new attributes or parameters can be added with pre-set default values, and new classes can be added in the `pySDC.implementations` module. -> :bell: During the revision of your pull request, it can happen that additional changes are done to the `upstream/master` branch (in parallel-in-time/pySDC repo). In that case, don't hesitate to regularly merge them into your local branch to solve eventual conflicts, for instance : -> +> :bell: During the revision of your pull request, it can happen that additional changes are done to the `upstream/master` branch (in parallel-in-time/pySDC repo). In that case, don't hesitate to regularly merge them into your local branch to solve eventual conflicts, for instance : +> > ```bash > # On your local repo, with the "my_feature" branch > $ git fetch upstream # synchronize with parallel-in-time/pySDC > $ git merge upstream/master # merge into my_feature > $ git push # push local merges to your repository > ``` -> +> > The pull request will be updated with any merge changes on the `my_feature` branch of your repository. @@ -56,5 +56,5 @@ Those could eventually be merged into master if they don't break the API, or to > :bell: **Never** merge modifications on `upstream/master` or any release branch into your own local development branch (same comment and solution as for the release branches above). -[:arrow_left: Back to Contributing Summary](./../../CONTRIBUTING.md) --- -[:arrow_right: Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file +:arrow_left: [Back to Contributing Summary](./../../CONTRIBUTING.md) --- +:arrow_right: [Next to Continuous Integration](./02_continuous_integration.md) \ No newline at end of file diff --git a/docs/contrib/02_continuous_integration.md b/docs/contrib/02_continuous_integration.md index ec0841ae99..da7b62cb71 100644 --- a/docs/contrib/02_continuous_integration.md +++ b/docs/contrib/02_continuous_integration.md @@ -47,5 +47,5 @@ pytest -v pySDC/tests > pytest -v pySDC/tests/test_nodes.py # only test nodes generation > ``` -[:arrow_left: Back to Pull Request Recommendation](./01_pull_requests.md) --- -[:arrow_right: Next to Naming Conventions](./03_naming_conventions.md) \ No newline at end of file +:arrow_left: [Back to Pull Request Recommendation](./01_pull_requests.md) --- +:arrow_right: [Next to Naming Conventions](./03_naming_conventions.md) \ No newline at end of file diff --git a/docs/contrib/03_naming_conventions.md b/docs/contrib/03_naming_conventions.md index f3de762206..711852c182 100644 --- a/docs/contrib/03_naming_conventions.md +++ b/docs/contrib/03_naming_conventions.md @@ -27,7 +27,7 @@ Possible Naming formats : ## Packages and modules names Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability (_i.e_ use snake_case only if it helps, -else try to stick to all-lowercase). +else try to stick to all-lowercase). Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. ## Class names @@ -139,5 +139,5 @@ class MySweeper(Sweeper): # ... other implementations for initSweep ``` -[:arrow_left: Back to Continuous Integration](./02_continuous_integration.md) --- -[:arrow_right: Next to Custom Implementations](./04_custom_implementations.md) \ No newline at end of file +:arrow_left: [Back to Continuous Integration](./02_continuous_integration.md) --- +:arrow_right: [Next to Custom Implementations](./04_custom_implementations.md) \ No newline at end of file diff --git a/docs/contrib/04_custom_implementations.md b/docs/contrib/04_custom_implementations.md index 2dd71e0ffa..414cefa413 100644 --- a/docs/contrib/04_custom_implementations.md +++ b/docs/contrib/04_custom_implementations.md @@ -2,5 +2,5 @@ ... in construction ... -[:arrow_left: Back to Naming Conventions](./03_naming_conventions.md) --- -[:arrow_right: Next to a cute picture of cat](https://www.vecteezy.com/photo/2098203-silver-tabby-cat-sitting-on-green-background) \ No newline at end of file +:arrow_left: [Back to Naming Conventions](./03_naming_conventions.md) --- +:arrow_right: [Next to a cute picture of cat](https://www.vecteezy.com/photo/2098203-silver-tabby-cat-sitting-on-green-background) \ No newline at end of file diff --git a/docs/convert_markdown.py b/docs/convert_markdown.py new file mode 100755 index 0000000000..126071674d --- /dev/null +++ b/docs/convert_markdown.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Jan 17 19:47:56 2023 + +@author: telu +""" +import os +import glob +import json +import m2r2 + +mdFiles = [ + 'README.md', + 'CONTRIBUTING.md', + 'CHANGELOG.md', + 'CODE_OF_CONDUCT.md', + 'docs/contrib'] + +docSources = 'docs/source' + +with open('docs/emojis.json') as f: + emojis = set(json.load(f).keys()) + +def convert(md): + rst = m2r2.parse_from_file(md, parse_relative_links=True) + for emoji in emojis: + rst = rst.replace(emoji, f'|{emoji}|') + baseName = os.path.splitext(md)[0] + with open(f'{docSources}/{baseName}.rst', 'w') as f: + f.write(rst) + print(f'Converted {md} to {docSources}/{baseName}.rst') + +for md in mdFiles: + if os.path.isfile(md): + convert(md) + elif os.path.isdir(md): + os.makedirs(f'{docSources}/{md}', exist_ok=True) + for f in glob.glob(f'{md}/*.md'): + convert(f) + else: + raise ValueError('{md} is not a md file or a folder') diff --git a/docs/emojis.json b/docs/emojis.json new file mode 100644 index 0000000000..0c142f6bb7 --- /dev/null +++ b/docs/emojis.json @@ -0,0 +1,5983 @@ +{ + ":+1:": "๐Ÿ‘", + ":+1_tone1:": "๐Ÿ‘๐Ÿป", + ":+1_tone2:": "๐Ÿ‘๐Ÿผ", + ":+1_tone3:": "๐Ÿ‘๐Ÿฝ", + ":+1_tone4:": "๐Ÿ‘๐Ÿพ", + ":+1_tone5:": "๐Ÿ‘๐Ÿฟ", + ":-1:": "๐Ÿ‘Ž", + ":-1_tone1:": "๐Ÿ‘Ž๐Ÿป", + ":-1_tone2:": "๐Ÿ‘Ž๐Ÿผ", + ":-1_tone3:": "๐Ÿ‘Ž๐Ÿฝ", + ":-1_tone4:": "๐Ÿ‘Ž๐Ÿพ", + ":-1_tone5:": "๐Ÿ‘Ž๐Ÿฟ", + ":100:": "๐Ÿ’ฏ", + ":1234:": "๐Ÿ”ข", + ":1st_place_medal:": "๐Ÿฅ‡", + ":2nd_place_medal:": "๐Ÿฅˆ", + ":3rd_place_medal:": "๐Ÿฅ‰", + ":8ball:": "๐ŸŽฑ", + ":a:": "๐Ÿ…ฐ๏ธ", + ":ab:": "๐Ÿ†Ž", + ":abacus:": "๐Ÿงฎ", + ":abc:": "๐Ÿ”ค", + ":abcd:": "๐Ÿ”ก", + ":ac:": "๐Ÿ‡ฆ๐Ÿ‡จ", + ":accept:": "๐Ÿ‰‘", + ":accordion:": "๐Ÿช—", + ":ad:": "๐Ÿ‡ฆ๐Ÿ‡ฉ", + ":adhesive_bandage:": "๐Ÿฉน", + ":admission_tickets:": "๐ŸŽŸ๏ธ", + ":adult:": "๐Ÿง‘", + ":adult_dark_skin_tone:": "๐Ÿง‘๐Ÿฟ", + ":adult_light_skin_tone:": "๐Ÿง‘๐Ÿป", + ":adult_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพ", + ":adult_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผ", + ":adult_medium_skin_tone:": "๐Ÿง‘๐Ÿฝ", + ":adult_tone1:": "๐Ÿง‘๐Ÿป", + ":adult_tone2:": "๐Ÿง‘๐Ÿผ", + ":adult_tone3:": "๐Ÿง‘๐Ÿฝ", + ":adult_tone4:": "๐Ÿง‘๐Ÿพ", + ":adult_tone5:": "๐Ÿง‘๐Ÿฟ", + ":ae:": "๐Ÿ‡ฆ๐Ÿ‡ช", + ":aerial_tramway:": "๐Ÿšก", + ":af:": "๐Ÿ‡ฆ๐Ÿ‡ซ", + ":afghanistan:": "๐Ÿ‡ฆ๐Ÿ‡ซ", + ":ag:": "๐Ÿ‡ฆ๐Ÿ‡ฌ", + ":ai:": "๐Ÿ‡ฆ๐Ÿ‡ฎ", + ":airplane:": "โœˆ๏ธ", + ":airplane_arriving:": "๐Ÿ›ฌ", + ":airplane_departure:": "๐Ÿ›ซ", + ":airplane_small:": "๐Ÿ›ฉ๏ธ", + ":al:": "๐Ÿ‡ฆ๐Ÿ‡ฑ", + ":aland_islands:": "๐Ÿ‡ฆ๐Ÿ‡ฝ", + ":alarm_clock:": "โฐ", + ":albania:": "๐Ÿ‡ฆ๐Ÿ‡ฑ", + ":alembic:": "โš—๏ธ", + ":algeria:": "๐Ÿ‡ฉ๐Ÿ‡ฟ", + ":alien:": "๐Ÿ‘ฝ", + ":am:": "๐Ÿ‡ฆ๐Ÿ‡ฒ", + ":ambulance:": "๐Ÿš‘", + ":american_samoa:": "๐Ÿ‡ฆ๐Ÿ‡ธ", + ":amphora:": "๐Ÿบ", + ":anatomical_heart:": "๐Ÿซ€", + ":anchor:": "โš“", + ":andorra:": "๐Ÿ‡ฆ๐Ÿ‡ฉ", + ":angel:": "๐Ÿ‘ผ", + ":angel_tone1:": "๐Ÿ‘ผ๐Ÿป", + ":angel_tone2:": "๐Ÿ‘ผ๐Ÿผ", + ":angel_tone3:": "๐Ÿ‘ผ๐Ÿฝ", + ":angel_tone4:": "๐Ÿ‘ผ๐Ÿพ", + ":angel_tone5:": "๐Ÿ‘ผ๐Ÿฟ", + ":anger:": "๐Ÿ’ข", + ":anger_right:": "๐Ÿ—ฏ๏ธ", + ":angola:": "๐Ÿ‡ฆ๐Ÿ‡ด", + ":angry:": "๐Ÿ˜ ", + ":anguilla:": "๐Ÿ‡ฆ๐Ÿ‡ฎ", + ":anguished:": "๐Ÿ˜ง", + ":ant:": "๐Ÿœ", + ":antarctica:": "๐Ÿ‡ฆ๐Ÿ‡ถ", + ":antigua_barbuda:": "๐Ÿ‡ฆ๐Ÿ‡ฌ", + ":ao:": "๐Ÿ‡ฆ๐Ÿ‡ด", + ":apple:": "๐ŸŽ", + ":aq:": "๐Ÿ‡ฆ๐Ÿ‡ถ", + ":aquarius:": "โ™’", + ":ar:": "๐Ÿ‡ฆ๐Ÿ‡ท", + ":archery:": "๐Ÿน", + ":argentina:": "๐Ÿ‡ฆ๐Ÿ‡ท", + ":aries:": "โ™ˆ", + ":armenia:": "๐Ÿ‡ฆ๐Ÿ‡ฒ", + ":arrow_backward:": "โ—€๏ธ", + ":arrow_double_down:": "โฌ", + ":arrow_double_up:": "โซ", + ":arrow_down:": "โฌ‡๏ธ", + ":arrow_down_small:": "๐Ÿ”ฝ", + ":arrow_forward:": "โ–ถ๏ธ", + ":arrow_heading_down:": "โคต๏ธ", + ":arrow_heading_up:": "โคด๏ธ", + ":arrow_left:": "โฌ…๏ธ", + ":arrow_lower_left:": "โ†™๏ธ", + ":arrow_lower_right:": "โ†˜๏ธ", + ":arrow_right:": "โžก๏ธ", + ":arrow_right_hook:": "โ†ช๏ธ", + ":arrow_up:": "โฌ†๏ธ", + ":arrow_up_down:": "โ†•๏ธ", + ":arrow_up_small:": "๐Ÿ”ผ", + ":arrow_upper_left:": "โ†–๏ธ", + ":arrow_upper_right:": "โ†—๏ธ", + ":arrows_clockwise:": "๐Ÿ”ƒ", + ":arrows_counterclockwise:": "๐Ÿ”„", + ":art:": "๐ŸŽจ", + ":articulated_lorry:": "๐Ÿš›", + ":artificial_satellite:": "๐Ÿ›ฐ", + ":artist:": "๐Ÿง‘โ€๐ŸŽจ", + ":artist_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽจ", + ":artist_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐ŸŽจ", + ":artist_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐ŸŽจ", + ":artist_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐ŸŽจ", + ":artist_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽจ", + ":artist_tone1:": "๐Ÿง‘๐Ÿปโ€๐ŸŽจ", + ":artist_tone2:": "๐Ÿง‘๐Ÿผโ€๐ŸŽจ", + ":artist_tone3:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽจ", + ":artist_tone4:": "๐Ÿง‘๐Ÿพโ€๐ŸŽจ", + ":artist_tone5:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽจ", + ":aruba:": "๐Ÿ‡ฆ๐Ÿ‡ผ", + ":as:": "๐Ÿ‡ฆ๐Ÿ‡ธ", + ":ascension:": "๐Ÿ‡ฆ๐Ÿ‡จ", + ":asterisk:": "*๏ธโƒฃ", + ":asterisk_symbol:": "*๏ธ", + ":astonished:": "๐Ÿ˜ฒ", + ":astronaut:": "๐Ÿง‘โ€๐Ÿš€", + ":astronaut_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿš€", + ":astronaut_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿš€", + ":astronaut_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿš€", + ":astronaut_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿš€", + ":astronaut_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿš€", + ":astronaut_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿš€", + ":astronaut_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿš€", + ":astronaut_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿš€", + ":astronaut_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿš€", + ":astronaut_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿš€", + ":at:": "๐Ÿ‡ฆ๐Ÿ‡น", + ":athletic_shoe:": "๐Ÿ‘Ÿ", + ":atm:": "๐Ÿง", + ":atom:": "โš›๏ธ", + ":atom_symbol:": "โš›๏ธ", + ":au:": "๐Ÿ‡ฆ๐Ÿ‡บ", + ":australia:": "๐Ÿ‡ฆ๐Ÿ‡บ", + ":austria:": "๐Ÿ‡ฆ๐Ÿ‡น", + ":auto_rickshaw:": "๐Ÿ›บ", + ":avocado:": "๐Ÿฅ‘", + ":aw:": "๐Ÿ‡ฆ๐Ÿ‡ผ", + ":ax:": "๐Ÿ‡ฆ๐Ÿ‡ฝ", + ":axe:": "๐Ÿช“", + ":az:": "๐Ÿ‡ฆ๐Ÿ‡ฟ", + ":azerbaijan:": "๐Ÿ‡ฆ๐Ÿ‡ฟ", + ":b:": "๐Ÿ…ฑ๏ธ", + ":ba:": "๐Ÿ‡ง๐Ÿ‡ฆ", + ":baby:": "๐Ÿ‘ถ", + ":baby_bottle:": "๐Ÿผ", + ":baby_chick:": "๐Ÿค", + ":baby_symbol:": "๐Ÿšผ", + ":baby_tone1:": "๐Ÿ‘ถ๐Ÿป", + ":baby_tone2:": "๐Ÿ‘ถ๐Ÿผ", + ":baby_tone3:": "๐Ÿ‘ถ๐Ÿฝ", + ":baby_tone4:": "๐Ÿ‘ถ๐Ÿพ", + ":baby_tone5:": "๐Ÿ‘ถ๐Ÿฟ", + ":back:": "๐Ÿ”™", + ":back_of_hand:": "๐Ÿคš", + ":back_of_hand_tone1:": "๐Ÿคš๐Ÿป", + ":back_of_hand_tone2:": "๐Ÿคš๐Ÿผ", + ":back_of_hand_tone3:": "๐Ÿคš๐Ÿฝ", + ":back_of_hand_tone4:": "๐Ÿคš๐Ÿพ", + ":back_of_hand_tone5:": "๐Ÿคš๐Ÿฟ", + ":bacon:": "๐Ÿฅ“", + ":badger:": "๐Ÿฆก", + ":badminton:": "๐Ÿธ", + ":bagel:": "๐Ÿฅฏ", + ":baggage_claim:": "๐Ÿ›„", + ":baguette_bread:": "๐Ÿฅ–", + ":bahamas:": "๐Ÿ‡ง๐Ÿ‡ธ", + ":bahrain:": "๐Ÿ‡ง๐Ÿ‡ญ", + ":balance_scale:": "โš–๏ธ", + ":bald:": "๐Ÿฆฒ", + ":ballet_shoes:": "๐Ÿฉฐ", + ":balloon:": "๐ŸŽˆ", + ":ballot_box:": "๐Ÿ—ณ๏ธ", + ":ballot_box_with_ballot:": "๐Ÿ—ณ๏ธ", + ":ballot_box_with_check:": "โ˜‘๏ธ", + ":bamboo:": "๐ŸŽ", + ":banana:": "๐ŸŒ", + ":bangbang:": "โ€ผ๏ธ", + ":bangladesh:": "๐Ÿ‡ง๐Ÿ‡ฉ", + ":banjo:": "๐Ÿช•", + ":bank:": "๐Ÿฆ", + ":bar_chart:": "๐Ÿ“Š", + ":barbados:": "๐Ÿ‡ง๐Ÿ‡ง", + ":barber:": "๐Ÿ’ˆ", + ":baseball:": "โšพ", + ":basket:": "๐Ÿงบ", + ":basketball:": "๐Ÿ€", + ":basketball_man:": "โ›น๏ธ", + ":basketball_player:": "โ›น", + ":basketball_player_tone1:": "โ›น๐Ÿป", + ":basketball_player_tone2:": "โ›น๐Ÿผ", + ":basketball_player_tone3:": "โ›น๐Ÿฝ", + ":basketball_player_tone4:": "โ›น๐Ÿพ", + ":basketball_player_tone5:": "โ›น๐Ÿฟ", + ":basketball_woman:": "โ›น๏ธโ€โ™€๏ธ", + ":bat:": "๐Ÿฆ‡", + ":bath:": "๐Ÿ›€", + ":bath_tone1:": "๐Ÿ›€๐Ÿป", + ":bath_tone2:": "๐Ÿ›€๐Ÿผ", + ":bath_tone3:": "๐Ÿ›€๐Ÿฝ", + ":bath_tone4:": "๐Ÿ›€๐Ÿพ", + ":bath_tone5:": "๐Ÿ›€๐Ÿฟ", + ":bathtub:": "๐Ÿ›", + ":battery:": "๐Ÿ”‹", + ":bb:": "๐Ÿ‡ง๐Ÿ‡ง", + ":bd:": "๐Ÿ‡ง๐Ÿ‡ฉ", + ":be:": "๐Ÿ‡ง๐Ÿ‡ช", + ":beach:": "๐Ÿ–๏ธ", + ":beach_umbrella:": "โ›ฑ๏ธ", + ":beach_with_umbrella:": "๐Ÿ–๏ธ", + ":bear:": "๐Ÿป", + ":bearded_person:": "๐Ÿง”", + ":bearded_person_dark_skin_tone:": "๐Ÿง”๐Ÿฟ", + ":bearded_person_light_skin_tone:": "๐Ÿง”๐Ÿป", + ":bearded_person_medium_dark_skin_tone:": "๐Ÿง”๐Ÿพ", + ":bearded_person_medium_light_skin_tone:": "๐Ÿง”๐Ÿผ", + ":bearded_person_medium_skin_tone:": "๐Ÿง”๐Ÿฝ", + ":bearded_person_tone1:": "๐Ÿง”๐Ÿป", + ":bearded_person_tone2:": "๐Ÿง”๐Ÿผ", + ":bearded_person_tone3:": "๐Ÿง”๐Ÿฝ", + ":bearded_person_tone4:": "๐Ÿง”๐Ÿพ", + ":bearded_person_tone5:": "๐Ÿง”๐Ÿฟ", + ":beaver:": "๐Ÿฆซ", + ":bed:": "๐Ÿ›๏ธ", + ":bee:": "๐Ÿ", + ":beer:": "๐Ÿบ", + ":beers:": "๐Ÿป", + ":beetle:": "๐Ÿชฒ", + ":beginner:": "๐Ÿ”ฐ", + ":belarus:": "๐Ÿ‡ง๐Ÿ‡พ", + ":belgium:": "๐Ÿ‡ง๐Ÿ‡ช", + ":belize:": "๐Ÿ‡ง๐Ÿ‡ฟ", + ":bell:": "๐Ÿ””", + ":bell_pepper:": "๐Ÿซ‘", + ":bellhop:": "๐Ÿ›Ž๏ธ", + ":bellhop_bell:": "๐Ÿ›Ž๏ธ", + ":benin:": "๐Ÿ‡ง๐Ÿ‡ฏ", + ":bento:": "๐Ÿฑ", + ":bermuda:": "๐Ÿ‡ง๐Ÿ‡ฒ", + ":beverage_box:": "๐Ÿงƒ", + ":bf:": "๐Ÿ‡ง๐Ÿ‡ซ", + ":bg:": "๐Ÿ‡ง๐Ÿ‡ฌ", + ":bh:": "๐Ÿ‡ง๐Ÿ‡ญ", + ":bhutan:": "๐Ÿ‡ง๐Ÿ‡น", + ":bi:": "๐Ÿ‡ง๐Ÿ‡ฎ", + ":bicyclist:": "๐Ÿšด", + ":bicyclist_tone1:": "๐Ÿšด๐Ÿป", + ":bicyclist_tone2:": "๐Ÿšด๐Ÿผ", + ":bicyclist_tone3:": "๐Ÿšด๐Ÿฝ", + ":bicyclist_tone4:": "๐Ÿšด๐Ÿพ", + ":bicyclist_tone5:": "๐Ÿšด๐Ÿฟ", + ":bike:": "๐Ÿšฒ", + ":biking_man:": "๐Ÿšด", + ":biking_woman:": "๐Ÿšดโ€โ™€๏ธ", + ":bikini:": "๐Ÿ‘™", + ":billed_cap:": "๐Ÿงข", + ":biohazard:": "โ˜ฃ๏ธ", + ":biohazard_sign:": "โ˜ฃ๏ธ", + ":bird:": "๐Ÿฆ", + ":birthday:": "๐ŸŽ‚", + ":bison:": "๐Ÿฆฌ", + ":bj:": "๐Ÿ‡ง๐Ÿ‡ฏ", + ":bl:": "๐Ÿ‡ง๐Ÿ‡ฑ", + ":black_cat:": "๐Ÿˆโ€โฌ›", + ":black_circle:": "โšซ", + ":black_flag:": "๐Ÿด", + ":black_heart:": "๐Ÿ–ค", + ":black_joker:": "๐Ÿƒ", + ":black_large_square:": "โฌ›", + ":black_medium_small_square:": "โ—พ", + ":black_medium_square:": "โ—ผ๏ธ", + ":black_nib:": "โœ’๏ธ", + ":black_small_square:": "โ–ช๏ธ", + ":black_square_button:": "๐Ÿ”ฒ", + ":blond-haired_man:": "๐Ÿ‘ฑโ€โ™‚๏ธ", + ":blond-haired_man_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿฟโ€โ™‚๏ธ", + ":blond-haired_man_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿปโ€โ™‚๏ธ", + ":blond-haired_man_medium_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿพโ€โ™‚๏ธ", + ":blond-haired_man_medium_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿผโ€โ™‚๏ธ", + ":blond-haired_man_medium_skin_tone:": "๐Ÿ‘ฑ๐Ÿฝโ€โ™‚๏ธ", + ":blond-haired_man_tone1:": "๐Ÿ‘ฑ๐Ÿปโ€โ™‚๏ธ", + ":blond-haired_man_tone2:": "๐Ÿ‘ฑ๐Ÿผโ€โ™‚๏ธ", + ":blond-haired_man_tone3:": "๐Ÿ‘ฑ๐Ÿฝโ€โ™‚๏ธ", + ":blond-haired_man_tone4:": "๐Ÿ‘ฑ๐Ÿพโ€โ™‚๏ธ", + ":blond-haired_man_tone5:": "๐Ÿ‘ฑ๐Ÿฟโ€โ™‚๏ธ", + ":blond-haired_woman:": "๐Ÿ‘ฑโ€โ™€๏ธ", + ":blond-haired_woman_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿฟโ€โ™€๏ธ", + ":blond-haired_woman_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿปโ€โ™€๏ธ", + ":blond-haired_woman_medium_dark_skin_tone:": "๐Ÿ‘ฑ๐Ÿพโ€โ™€๏ธ", + ":blond-haired_woman_medium_light_skin_tone:": "๐Ÿ‘ฑ๐Ÿผโ€โ™€๏ธ", + ":blond-haired_woman_medium_skin_tone:": "๐Ÿ‘ฑ๐Ÿฝโ€โ™€๏ธ", + ":blond-haired_woman_tone1:": "๐Ÿ‘ฑ๐Ÿปโ€โ™€๏ธ", + ":blond-haired_woman_tone2:": "๐Ÿ‘ฑ๐Ÿผโ€โ™€๏ธ", + ":blond-haired_woman_tone3:": "๐Ÿ‘ฑ๐Ÿฝโ€โ™€๏ธ", + ":blond-haired_woman_tone4:": "๐Ÿ‘ฑ๐Ÿพโ€โ™€๏ธ", + ":blond-haired_woman_tone5:": "๐Ÿ‘ฑ๐Ÿฟโ€โ™€๏ธ", + ":blond_haired_person:": "๐Ÿ‘ฑ", + ":blond_haired_person_tone1:": "๐Ÿ‘ฑ๐Ÿป", + ":blond_haired_person_tone2:": "๐Ÿ‘ฑ๐Ÿผ", + ":blond_haired_person_tone3:": "๐Ÿ‘ฑ๐Ÿฝ", + ":blond_haired_person_tone4:": "๐Ÿ‘ฑ๐Ÿพ", + ":blond_haired_person_tone5:": "๐Ÿ‘ฑ๐Ÿฟ", + ":blonde_man:": "๐Ÿ‘ฑ", + ":blonde_woman:": "๐Ÿ‘ฑโ€โ™€๏ธ", + ":blossom:": "๐ŸŒผ", + ":blowfish:": "๐Ÿก", + ":blue_book:": "๐Ÿ“˜", + ":blue_car:": "๐Ÿš™", + ":blue_circle:": "๐Ÿ”ต", + ":blue_heart:": "๐Ÿ’™", + ":blue_square:": "๐ŸŸฆ", + ":blueberries:": "๐Ÿซ", + ":blush:": "๐Ÿ˜Š", + ":bm:": "๐Ÿ‡ง๐Ÿ‡ฒ", + ":bn:": "๐Ÿ‡ง๐Ÿ‡ณ", + ":bo:": "๐Ÿ‡ง๐Ÿ‡ด", + ":boar:": "๐Ÿ—", + ":boat:": "โ›ต๏ธ", + ":bolivia:": "๐Ÿ‡ง๐Ÿ‡ด", + ":bomb:": "๐Ÿ’ฃ", + ":bone:": "๐Ÿฆด", + ":book:": "๐Ÿ“–", + ":bookmark:": "๐Ÿ”–", + ":bookmark_tabs:": "๐Ÿ“‘", + ":books:": "๐Ÿ“š", + ":boom:": "๐Ÿ’ฅ", + ":boomerang:": "๐Ÿชƒ", + ":boot:": "๐Ÿ‘ข", + ":bosnia_herzegovina:": "๐Ÿ‡ง๐Ÿ‡ฆ", + ":botswana:": "๐Ÿ‡ง๐Ÿ‡ผ", + ":bottle_with_popping_cork:": "๐Ÿพ", + ":bouquet:": "๐Ÿ’", + ":bouvet_island:": "๐Ÿ‡ง๐Ÿ‡ป", + ":bow:": "๐Ÿ™‡", + ":bow_and_arrow:": "๐Ÿน", + ":bow_tone1:": "๐Ÿ™‡๐Ÿป", + ":bow_tone2:": "๐Ÿ™‡๐Ÿผ", + ":bow_tone3:": "๐Ÿ™‡๐Ÿฝ", + ":bow_tone4:": "๐Ÿ™‡๐Ÿพ", + ":bow_tone5:": "๐Ÿ™‡๐Ÿฟ", + ":bowing_man:": "๐Ÿ™‡", + ":bowing_woman:": "๐Ÿ™‡โ€โ™€๏ธ", + ":bowl_with_spoon:": "๐Ÿฅฃ", + ":bowling:": "๐ŸŽณ", + ":boxing_glove:": "๐ŸฅŠ", + ":boxing_gloves:": "๐ŸฅŠ", + ":boy:": "๐Ÿ‘ฆ", + ":boy_tone1:": "๐Ÿ‘ฆ๐Ÿป", + ":boy_tone2:": "๐Ÿ‘ฆ๐Ÿผ", + ":boy_tone3:": "๐Ÿ‘ฆ๐Ÿฝ", + ":boy_tone4:": "๐Ÿ‘ฆ๐Ÿพ", + ":boy_tone5:": "๐Ÿ‘ฆ๐Ÿฟ", + ":bq:": "๐Ÿ‡ง๐Ÿ‡ถ", + ":br:": "๐Ÿ‡ง๐Ÿ‡ท", + ":brain:": "๐Ÿง ", + ":brazil:": "๐Ÿ‡ง๐Ÿ‡ท", + ":bread:": "๐Ÿž", + ":breast_feeding:": "๐Ÿคฑ", + ":breast_feeding_dark_skin_tone:": "๐Ÿคฑ๐Ÿฟ", + ":breast_feeding_light_skin_tone:": "๐Ÿคฑ๐Ÿป", + ":breast_feeding_medium_dark_skin_tone:": "๐Ÿคฑ๐Ÿพ", + ":breast_feeding_medium_light_skin_tone:": "๐Ÿคฑ๐Ÿผ", + ":breast_feeding_medium_skin_tone:": "๐Ÿคฑ๐Ÿฝ", + ":breast_feeding_tone1:": "๐Ÿคฑ๐Ÿป", + ":breast_feeding_tone2:": "๐Ÿคฑ๐Ÿผ", + ":breast_feeding_tone3:": "๐Ÿคฑ๐Ÿฝ", + ":breast_feeding_tone4:": "๐Ÿคฑ๐Ÿพ", + ":breast_feeding_tone5:": "๐Ÿคฑ๐Ÿฟ", + ":bricks:": "๐Ÿงฑ", + ":bride_with_veil:": "๐Ÿ‘ฐ", + ":bride_with_veil_tone1:": "๐Ÿ‘ฐ๐Ÿป", + ":bride_with_veil_tone2:": "๐Ÿ‘ฐ๐Ÿผ", + ":bride_with_veil_tone3:": "๐Ÿ‘ฐ๐Ÿฝ", + ":bride_with_veil_tone4:": "๐Ÿ‘ฐ๐Ÿพ", + ":bride_with_veil_tone5:": "๐Ÿ‘ฐ๐Ÿฟ", + ":bridge_at_night:": "๐ŸŒ‰", + ":briefcase:": "๐Ÿ’ผ", + ":briefs:": "๐Ÿฉฒ", + ":british_indian_ocean_territory:": "๐Ÿ‡ฎ๐Ÿ‡ด", + ":british_virgin_islands:": "๐Ÿ‡ป๐Ÿ‡ฌ", + ":broccoli:": "๐Ÿฅฆ", + ":broken_heart:": "๐Ÿ’”", + ":broom:": "๐Ÿงน", + ":brown_circle:": "๐ŸŸค", + ":brown_heart:": "๐ŸคŽ", + ":brown_square:": "๐ŸŸซ", + ":brunei:": "๐Ÿ‡ง๐Ÿ‡ณ", + ":bs:": "๐Ÿ‡ง๐Ÿ‡ธ", + ":bt:": "๐Ÿ‡ง๐Ÿ‡น", + ":bubble_tea:": "๐Ÿง‹", + ":bucket:": "๐Ÿชฃ", + ":bug:": "๐Ÿ›", + ":building_construction:": "๐Ÿ—๏ธ", + ":bulb:": "๐Ÿ’ก", + ":bulgaria:": "๐Ÿ‡ง๐Ÿ‡ฌ", + ":bullettrain_front:": "๐Ÿš…", + ":bullettrain_side:": "๐Ÿš„", + ":burkina_faso:": "๐Ÿ‡ง๐Ÿ‡ซ", + ":burrito:": "๐ŸŒฏ", + ":burundi:": "๐Ÿ‡ง๐Ÿ‡ฎ", + ":bus:": "๐ŸšŒ", + ":business_suit_levitating:": "๐Ÿ•ด", + ":busstop:": "๐Ÿš", + ":bust_in_silhouette:": "๐Ÿ‘ค", + ":busts_in_silhouette:": "๐Ÿ‘ฅ", + ":butter:": "๐Ÿงˆ", + ":butterfly:": "๐Ÿฆ‹", + ":bv:": "๐Ÿ‡ง๐Ÿ‡ป", + ":bw:": "๐Ÿ‡ง๐Ÿ‡ผ", + ":by:": "๐Ÿ‡ง๐Ÿ‡พ", + ":bz:": "๐Ÿ‡ง๐Ÿ‡ฟ", + ":ca:": "๐Ÿ‡จ๐Ÿ‡ฆ", + ":cactus:": "๐ŸŒต", + ":cake:": "๐Ÿฐ", + ":calendar:": "๐Ÿ“†", + ":calendar_spiral:": "๐Ÿ—“๏ธ", + ":call_me:": "๐Ÿค™", + ":call_me_hand:": "๐Ÿค™", + ":call_me_hand_tone1:": "๐Ÿค™๐Ÿป", + ":call_me_hand_tone2:": "๐Ÿค™๐Ÿผ", + ":call_me_hand_tone3:": "๐Ÿค™๐Ÿฝ", + ":call_me_hand_tone4:": "๐Ÿค™๐Ÿพ", + ":call_me_hand_tone5:": "๐Ÿค™๐Ÿฟ", + ":call_me_tone1:": "๐Ÿค™๐Ÿป", + ":call_me_tone2:": "๐Ÿค™๐Ÿผ", + ":call_me_tone3:": "๐Ÿค™๐Ÿฝ", + ":call_me_tone4:": "๐Ÿค™๐Ÿพ", + ":call_me_tone5:": "๐Ÿค™๐Ÿฟ", + ":calling:": "๐Ÿ“ฒ", + ":cambodia:": "๐Ÿ‡ฐ๐Ÿ‡ญ", + ":camel:": "๐Ÿซ", + ":camera:": "๐Ÿ“ท", + ":camera_flash:": "๐Ÿ“ธ", + ":camera_with_flash:": "๐Ÿ“ธ", + ":cameroon:": "๐Ÿ‡จ๐Ÿ‡ฒ", + ":camping:": "๐Ÿ•๏ธ", + ":canada:": "๐Ÿ‡จ๐Ÿ‡ฆ", + ":canary_islands:": "๐Ÿ‡ฎ๐Ÿ‡จ", + ":cancer:": "โ™‹", + ":candle:": "๐Ÿ•ฏ๏ธ", + ":candy:": "๐Ÿฌ", + ":canned_food:": "๐Ÿฅซ", + ":canoe:": "๐Ÿ›ถ", + ":cape_verde:": "๐Ÿ‡จ๐Ÿ‡ป", + ":capital_abcd:": "๐Ÿ” ", + ":capricorn:": "โ™‘", + ":car:": "๐Ÿš—", + ":card_box:": "๐Ÿ—ƒ๏ธ", + ":card_file_box:": "๐Ÿ—ƒ๏ธ", + ":card_index:": "๐Ÿ“‡", + ":card_index_dividers:": "๐Ÿ—‚๏ธ", + ":caribbean_netherlands:": "๐Ÿ‡ง๐Ÿ‡ถ", + ":carousel_horse:": "๐ŸŽ ", + ":carpentry_saw:": "๐Ÿชš", + ":carrot:": "๐Ÿฅ•", + ":cartwheel:": "๐Ÿคธ", + ":cartwheel_tone1:": "๐Ÿคธ๐Ÿป", + ":cartwheel_tone2:": "๐Ÿคธ๐Ÿผ", + ":cartwheel_tone3:": "๐Ÿคธ๐Ÿฝ", + ":cartwheel_tone4:": "๐Ÿคธ๐Ÿพ", + ":cartwheel_tone5:": "๐Ÿคธ๐Ÿฟ", + ":cat2:": "๐Ÿˆ", + ":cat:": "๐Ÿฑ", + ":cayman_islands:": "๐Ÿ‡ฐ๐Ÿ‡พ", + ":cc:": "๐Ÿ‡จ๐Ÿ‡จ", + ":cd:": "๐Ÿ’ฟ", + ":central_african_republic:": "๐Ÿ‡จ๐Ÿ‡ซ", + ":ceuta_melilla:": "๐Ÿ‡ช๐Ÿ‡ฆ", + ":cf:": "๐Ÿ‡จ๐Ÿ‡ซ", + ":cg:": "๐Ÿ‡จ๐Ÿ‡ฌ", + ":ch:": "๐Ÿ‡จ๐Ÿ‡ญ", + ":chad:": "๐Ÿ‡น๐Ÿ‡ฉ", + ":chains:": "โ›“๏ธ", + ":chair:": "๐Ÿช‘", + ":champagne:": "๐Ÿพ", + ":champagne_glass:": "๐Ÿฅ‚", + ":chart:": "๐Ÿ’น", + ":chart_with_downwards_trend:": "๐Ÿ“‰", + ":chart_with_upwards_trend:": "๐Ÿ“ˆ", + ":checkered_flag:": "๐Ÿ", + ":cheese:": "๐Ÿง€", + ":cheese_wedge:": "๐Ÿง€", + ":cherries:": "๐Ÿ’", + ":cherry_blossom:": "๐ŸŒธ", + ":chess_pawn:": "โ™Ÿ๏ธ", + ":chestnut:": "๐ŸŒฐ", + ":chicken:": "๐Ÿ”", + ":child:": "๐Ÿง’", + ":child_dark_skin_tone:": "๐Ÿง’๐Ÿฟ", + ":child_light_skin_tone:": "๐Ÿง’๐Ÿป", + ":child_medium_dark_skin_tone:": "๐Ÿง’๐Ÿพ", + ":child_medium_light_skin_tone:": "๐Ÿง’๐Ÿผ", + ":child_medium_skin_tone:": "๐Ÿง’๐Ÿฝ", + ":child_tone1:": "๐Ÿง’๐Ÿป", + ":child_tone2:": "๐Ÿง’๐Ÿผ", + ":child_tone3:": "๐Ÿง’๐Ÿฝ", + ":child_tone4:": "๐Ÿง’๐Ÿพ", + ":child_tone5:": "๐Ÿง’๐Ÿฟ", + ":children_crossing:": "๐Ÿšธ", + ":chile:": "๐Ÿ‡จ๐Ÿ‡ฑ", + ":china:": "๐Ÿ‡จ๐Ÿ‡ณ", + ":chipmunk:": "๐Ÿฟ๏ธ", + ":chocolate_bar:": "๐Ÿซ", + ":chopsticks:": "๐Ÿฅข", + ":christmas_island:": "๐Ÿ‡จ๐Ÿ‡ฝ", + ":christmas_tree:": "๐ŸŽ„", + ":church:": "โ›ช", + ":ci:": "๐Ÿ‡จ๐Ÿ‡ฎ", + ":cinema:": "๐ŸŽฆ", + ":circus_tent:": "๐ŸŽช", + ":city_dusk:": "๐ŸŒ†", + ":city_sunrise:": "๐ŸŒ‡", + ":city_sunset:": "๐ŸŒ‡", + ":cityscape:": "๐Ÿ™๏ธ", + ":ck:": "๐Ÿ‡จ๐Ÿ‡ฐ", + ":cl:": "๐Ÿ†‘", + ":clamp:": "๐Ÿ—œ", + ":clap:": "๐Ÿ‘", + ":clap_tone1:": "๐Ÿ‘๐Ÿป", + ":clap_tone2:": "๐Ÿ‘๐Ÿผ", + ":clap_tone3:": "๐Ÿ‘๐Ÿฝ", + ":clap_tone4:": "๐Ÿ‘๐Ÿพ", + ":clap_tone5:": "๐Ÿ‘๐Ÿฟ", + ":clapper:": "๐ŸŽฌ", + ":classical_building:": "๐Ÿ›๏ธ", + ":clinking_glass:": "๐Ÿฅ‚", + ":clinking_glasses:": "๐Ÿฅ‚", + ":clipboard:": "๐Ÿ“‹", + ":clipperton_island:": "๐Ÿ‡จ๐Ÿ‡ต", + ":clock1030:": "๐Ÿ•ฅ", + ":clock10:": "๐Ÿ•™", + ":clock1130:": "๐Ÿ•ฆ", + ":clock11:": "๐Ÿ•š", + ":clock1230:": "๐Ÿ•ง", + ":clock12:": "๐Ÿ•›", + ":clock130:": "๐Ÿ•œ", + ":clock1:": "๐Ÿ•", + ":clock230:": "๐Ÿ•", + ":clock2:": "๐Ÿ•‘", + ":clock330:": "๐Ÿ•ž", + ":clock3:": "๐Ÿ•’", + ":clock430:": "๐Ÿ•Ÿ", + ":clock4:": "๐Ÿ•“", + ":clock530:": "๐Ÿ• ", + ":clock5:": "๐Ÿ•”", + ":clock630:": "๐Ÿ•ก", + ":clock6:": "๐Ÿ••", + ":clock730:": "๐Ÿ•ข", + ":clock7:": "๐Ÿ•–", + ":clock830:": "๐Ÿ•ฃ", + ":clock8:": "๐Ÿ•—", + ":clock930:": "๐Ÿ•ค", + ":clock9:": "๐Ÿ•˜", + ":clock:": "๐Ÿ•ฐ๏ธ", + ":closed_book:": "๐Ÿ“•", + ":closed_lock_with_key:": "๐Ÿ”", + ":closed_umbrella:": "๐ŸŒ‚", + ":cloud:": "โ˜๏ธ", + ":cloud_lightning:": "๐ŸŒฉ๏ธ", + ":cloud_rain:": "๐ŸŒง๏ธ", + ":cloud_snow:": "๐ŸŒจ๏ธ", + ":cloud_tornado:": "๐ŸŒช๏ธ", + ":cloud_with_lightning:": "๐ŸŒฉ๏ธ", + ":cloud_with_lightning_and_rain:": "โ›ˆ", + ":cloud_with_rain:": "๐ŸŒง๏ธ", + ":cloud_with_snow:": "๐ŸŒจ๏ธ", + ":cloud_with_tornado:": "๐ŸŒช๏ธ", + ":clown:": "๐Ÿคก", + ":clown_face:": "๐Ÿคก", + ":clubs:": "โ™ฃ๏ธ", + ":cm:": "๐Ÿ‡จ๐Ÿ‡ฒ", + ":cn:": "๐Ÿ‡จ๐Ÿ‡ณ", + ":co:": "๐Ÿ‡จ๐Ÿ‡ด", + ":coat:": "๐Ÿงฅ", + ":cockroach:": "๐Ÿชณ", + ":cocktail:": "๐Ÿธ", + ":coconut:": "๐Ÿฅฅ", + ":cocos_islands:": "๐Ÿ‡จ๐Ÿ‡จ", + ":coffee:": "โ˜•", + ":coffin:": "โšฐ๏ธ", + ":coin:": "๐Ÿช™", + ":cold_face:": "๐Ÿฅถ", + ":cold_sweat:": "๐Ÿ˜ฐ", + ":colombia:": "๐Ÿ‡จ๐Ÿ‡ด", + ":comet:": "โ˜„๏ธ", + ":comoros:": "๐Ÿ‡ฐ๐Ÿ‡ฒ", + ":compass:": "๐Ÿงญ", + ":compression:": "๐Ÿ—œ๏ธ", + ":computer:": "๐Ÿ’ป", + ":computer_mouse:": "๐Ÿ–ฑ", + ":confetti_ball:": "๐ŸŽŠ", + ":confounded:": "๐Ÿ˜–", + ":confused:": "๐Ÿ˜•", + ":congo:": "๐Ÿ‡จ๐Ÿ‡ฉ", + ":congo_brazzaville:": "๐Ÿ‡จ๐Ÿ‡ฌ", + ":congo_kinshasa:": "๐Ÿ‡จ๐Ÿ‡ฉ", + ":congratulations:": "ใŠ—๏ธ", + ":construction:": "๐Ÿšง", + ":construction_site:": "๐Ÿ—๏ธ", + ":construction_worker:": "๐Ÿ‘ท", + ":construction_worker_man:": "๐Ÿ‘ท", + ":construction_worker_tone1:": "๐Ÿ‘ท๐Ÿป", + ":construction_worker_tone2:": "๐Ÿ‘ท๐Ÿผ", + ":construction_worker_tone3:": "๐Ÿ‘ท๐Ÿฝ", + ":construction_worker_tone4:": "๐Ÿ‘ท๐Ÿพ", + ":construction_worker_tone5:": "๐Ÿ‘ท๐Ÿฟ", + ":construction_worker_woman:": "๐Ÿ‘ทโ€โ™€๏ธ", + ":control_knobs:": "๐ŸŽ›๏ธ", + ":convenience_store:": "๐Ÿช", + ":cook:": "๐Ÿง‘โ€๐Ÿณ", + ":cook_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿณ", + ":cook_islands:": "๐Ÿ‡จ๐Ÿ‡ฐ", + ":cook_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿณ", + ":cook_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿณ", + ":cook_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿณ", + ":cook_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿณ", + ":cook_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿณ", + ":cook_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿณ", + ":cook_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿณ", + ":cook_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿณ", + ":cook_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿณ", + ":cookie:": "๐Ÿช", + ":cooking:": "๐Ÿณ", + ":cool:": "๐Ÿ†’", + ":cop:": "๐Ÿ‘ฎ", + ":cop_tone1:": "๐Ÿ‘ฎ๐Ÿป", + ":cop_tone2:": "๐Ÿ‘ฎ๐Ÿผ", + ":cop_tone3:": "๐Ÿ‘ฎ๐Ÿฝ", + ":cop_tone4:": "๐Ÿ‘ฎ๐Ÿพ", + ":cop_tone5:": "๐Ÿ‘ฎ๐Ÿฟ", + ":copyright:": "ยฉ๏ธ", + ":corn:": "๐ŸŒฝ", + ":costa_rica:": "๐Ÿ‡จ๐Ÿ‡ท", + ":cote_divoire:": "๐Ÿ‡จ๐Ÿ‡ฎ", + ":couch:": "๐Ÿ›‹๏ธ", + ":couch_and_lamp:": "๐Ÿ›‹๏ธ", + ":couple:": "๐Ÿ‘ซ", + ":couple_mm:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + ":couple_with_heart:": "๐Ÿ’‘", + ":couple_with_heart_dark_skin_tone:": "๐Ÿ’‘๐Ÿฟ", + ":couple_with_heart_light_skin_tone:": "๐Ÿ’‘๐Ÿป", + ":couple_with_heart_man_man:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + ":couple_with_heart_man_man_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_dark_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_light_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_light_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_medium_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_tone1:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_tone1_tone2:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_tone1_tone3:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_tone1_tone4:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_tone1_tone5:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_tone2:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_tone2_tone1:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_tone2_tone3:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_tone2_tone4:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_tone2_tone5:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_tone3:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_tone3_tone1:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_tone3_tone2:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_tone3_tone4:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_tone3_tone5:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_tone4:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_man_man_tone4_tone1:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_tone4_tone2:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_tone4_tone3:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_tone4_tone5:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_tone5:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_man_man_tone5_tone1:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_man_man_tone5_tone2:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_man_man_tone5_tone3:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_man_man_tone5_tone4:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_medium_dark_skin_tone:": "๐Ÿ’‘๐Ÿพ", + ":couple_with_heart_medium_light_skin_tone:": "๐Ÿ’‘๐Ÿผ", + ":couple_with_heart_medium_skin_tone:": "๐Ÿ’‘๐Ÿฝ", + ":couple_with_heart_mm:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + ":couple_with_heart_person_person_dark_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_dark_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_dark_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_light_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_light_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_light_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_light_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_medium_dark_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_medium_light_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_medium_light_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_medium_light_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_medium_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_medium_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_medium_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_tone1_tone2:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_tone1_tone3:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_tone1_tone4:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_tone1_tone5:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_tone2_tone1:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_tone2_tone3:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_tone2_tone4:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_tone2_tone5:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_tone3_tone1:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_tone3_tone2:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_tone3_tone4:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_person_person_tone3_tone5:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_tone4_tone1:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_tone4_tone2:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_tone4_tone3:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_tone4_tone5:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ", + ":couple_with_heart_person_person_tone5_tone1:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿป", + ":couple_with_heart_person_person_tone5_tone2:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿผ", + ":couple_with_heart_person_person_tone5_tone3:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ", + ":couple_with_heart_person_person_tone5_tone4:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿพ", + ":couple_with_heart_tone1:": "๐Ÿ’‘๐Ÿป", + ":couple_with_heart_tone2:": "๐Ÿ’‘๐Ÿผ", + ":couple_with_heart_tone3:": "๐Ÿ’‘๐Ÿฝ", + ":couple_with_heart_tone4:": "๐Ÿ’‘๐Ÿพ", + ":couple_with_heart_tone5:": "๐Ÿ’‘๐Ÿฟ", + ":couple_with_heart_woman_man:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ", + ":couple_with_heart_woman_man_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_medium_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_tone1_tone2:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_tone1_tone3:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_tone1_tone4:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_tone1_tone5:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_tone2_tone1:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_tone2_tone3:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_tone2_tone4:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_tone2_tone5:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_tone3_tone1:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_tone3_tone2:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_tone3_tone4:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_tone3_tone5:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_man_tone4_tone1:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_tone4_tone2:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_tone4_tone3:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_tone4_tone5:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ", + ":couple_with_heart_woman_man_tone5_tone1:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป", + ":couple_with_heart_woman_man_tone5_tone2:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ", + ":couple_with_heart_woman_man_tone5_tone3:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ", + ":couple_with_heart_woman_man_tone5_tone4:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ", + ":couple_with_heart_woman_woman:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + ":couple_with_heart_woman_woman_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_medium_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_tone1_tone2:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_tone1_tone3:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_tone1_tone4:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_tone1_tone5:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_tone2_tone1:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_tone2_tone3:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_tone2_tone4:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_tone2_tone5:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_tone3_tone1:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_tone3_tone2:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_tone3_tone4:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_tone3_tone5:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_woman_woman_tone4_tone1:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_tone4_tone2:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_tone4_tone3:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_tone4_tone5:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ", + ":couple_with_heart_woman_woman_tone5_tone1:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป", + ":couple_with_heart_woman_woman_tone5_tone2:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ", + ":couple_with_heart_woman_woman_tone5_tone3:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ", + ":couple_with_heart_woman_woman_tone5_tone4:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ", + ":couple_with_heart_ww:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + ":couple_ww:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + ":couplekiss:": "๐Ÿ’", + ":couplekiss_man_man:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + ":couplekiss_man_woman:": "๐Ÿ’", + ":couplekiss_mm:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + ":couplekiss_woman_woman:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + ":couplekiss_ww:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + ":cow2:": "๐Ÿ„", + ":cow:": "๐Ÿฎ", + ":cowboy:": "๐Ÿค ", + ":cowboy_hat_face:": "๐Ÿค ", + ":cp:": "๐Ÿ‡จ๐Ÿ‡ต", + ":cr:": "๐Ÿ‡จ๐Ÿ‡ท", + ":crab:": "๐Ÿฆ€", + ":crayon:": "๐Ÿ–๏ธ", + ":credit_card:": "๐Ÿ’ณ", + ":crescent_moon:": "๐ŸŒ™", + ":cricket:": "๐Ÿฆ—", + ":cricket_bat_ball:": "๐Ÿ", + ":cricket_game:": "๐Ÿ", + ":croatia:": "๐Ÿ‡ญ๐Ÿ‡ท", + ":crocodile:": "๐ŸŠ", + ":croissant:": "๐Ÿฅ", + ":cross:": "โœ๏ธ", + ":crossed_fingers:": "๐Ÿคž", + ":crossed_flags:": "๐ŸŽŒ", + ":crossed_swords:": "โš”๏ธ", + ":crown:": "๐Ÿ‘‘", + ":cruise_ship:": "๐Ÿ›ณ๏ธ", + ":cry:": "๐Ÿ˜ข", + ":crying_cat_face:": "๐Ÿ˜ฟ", + ":crystal_ball:": "๐Ÿ”ฎ", + ":cu:": "๐Ÿ‡จ๐Ÿ‡บ", + ":cuba:": "๐Ÿ‡จ๐Ÿ‡บ", + ":cucumber:": "๐Ÿฅ’", + ":cup_with_straw:": "๐Ÿฅค", + ":cupcake:": "๐Ÿง", + ":cupid:": "๐Ÿ’˜", + ":curacao:": "๐Ÿ‡จ๐Ÿ‡ผ", + ":curling_stone:": "๐ŸฅŒ", + ":curly_haired:": "๐Ÿฆฑ", + ":curly_loop:": "โžฐ", + ":currency_exchange:": "๐Ÿ’ฑ", + ":curry:": "๐Ÿ›", + ":custard:": "๐Ÿฎ", + ":customs:": "๐Ÿ›ƒ", + ":cut_of_meat:": "๐Ÿฅฉ", + ":cv:": "๐Ÿ‡จ๐Ÿ‡ป", + ":cw:": "๐Ÿ‡จ๐Ÿ‡ผ", + ":cx:": "๐Ÿ‡จ๐Ÿ‡ฝ", + ":cy:": "๐Ÿ‡จ๐Ÿ‡พ", + ":cyclone:": "๐ŸŒ€", + ":cyprus:": "๐Ÿ‡จ๐Ÿ‡พ", + ":cz:": "๐Ÿ‡จ๐Ÿ‡ฟ", + ":czech_republic:": "๐Ÿ‡จ๐Ÿ‡ฟ", + ":dagger:": "๐Ÿ—ก๏ธ", + ":dagger_knife:": "๐Ÿ—ก๏ธ", + ":dancer:": "๐Ÿ’ƒ", + ":dancer_tone1:": "๐Ÿ’ƒ๐Ÿป", + ":dancer_tone2:": "๐Ÿ’ƒ๐Ÿผ", + ":dancer_tone3:": "๐Ÿ’ƒ๐Ÿฝ", + ":dancer_tone4:": "๐Ÿ’ƒ๐Ÿพ", + ":dancer_tone5:": "๐Ÿ’ƒ๐Ÿฟ", + ":dancers:": "๐Ÿ‘ฏ", + ":dancing_men:": "๐Ÿ‘ฏโ€โ™‚๏ธ", + ":dancing_women:": "๐Ÿ‘ฏ", + ":dango:": "๐Ÿก", + ":dark_sunglasses:": "๐Ÿ•ถ๏ธ", + ":dart:": "๐ŸŽฏ", + ":dash:": "๐Ÿ’จ", + ":date:": "๐Ÿ“…", + ":de:": "๐Ÿ‡ฉ๐Ÿ‡ช", + ":deaf_man:": "๐Ÿงโ€โ™‚๏ธ", + ":deaf_man_dark_skin_tone:": "๐Ÿง๐Ÿฟโ€โ™‚๏ธ", + ":deaf_man_light_skin_tone:": "๐Ÿง๐Ÿปโ€โ™‚๏ธ", + ":deaf_man_medium_dark_skin_tone:": "๐Ÿง๐Ÿพโ€โ™‚๏ธ", + ":deaf_man_medium_light_skin_tone:": "๐Ÿง๐Ÿผโ€โ™‚๏ธ", + ":deaf_man_medium_skin_tone:": "๐Ÿง๐Ÿฝโ€โ™‚๏ธ", + ":deaf_man_tone1:": "๐Ÿง๐Ÿปโ€โ™‚๏ธ", + ":deaf_man_tone2:": "๐Ÿง๐Ÿผโ€โ™‚๏ธ", + ":deaf_man_tone3:": "๐Ÿง๐Ÿฝโ€โ™‚๏ธ", + ":deaf_man_tone4:": "๐Ÿง๐Ÿพโ€โ™‚๏ธ", + ":deaf_man_tone5:": "๐Ÿง๐Ÿฟโ€โ™‚๏ธ", + ":deaf_person:": "๐Ÿง", + ":deaf_person_dark_skin_tone:": "๐Ÿง๐Ÿฟ", + ":deaf_person_light_skin_tone:": "๐Ÿง๐Ÿป", + ":deaf_person_medium_dark_skin_tone:": "๐Ÿง๐Ÿพ", + ":deaf_person_medium_light_skin_tone:": "๐Ÿง๐Ÿผ", + ":deaf_person_medium_skin_tone:": "๐Ÿง๐Ÿฝ", + ":deaf_person_tone1:": "๐Ÿง๐Ÿป", + ":deaf_person_tone2:": "๐Ÿง๐Ÿผ", + ":deaf_person_tone3:": "๐Ÿง๐Ÿฝ", + ":deaf_person_tone4:": "๐Ÿง๐Ÿพ", + ":deaf_person_tone5:": "๐Ÿง๐Ÿฟ", + ":deaf_woman:": "๐Ÿงโ€โ™€๏ธ", + ":deaf_woman_dark_skin_tone:": "๐Ÿง๐Ÿฟโ€โ™€๏ธ", + ":deaf_woman_light_skin_tone:": "๐Ÿง๐Ÿปโ€โ™€๏ธ", + ":deaf_woman_medium_dark_skin_tone:": "๐Ÿง๐Ÿพโ€โ™€๏ธ", + ":deaf_woman_medium_light_skin_tone:": "๐Ÿง๐Ÿผโ€โ™€๏ธ", + ":deaf_woman_medium_skin_tone:": "๐Ÿง๐Ÿฝโ€โ™€๏ธ", + ":deaf_woman_tone1:": "๐Ÿง๐Ÿปโ€โ™€๏ธ", + ":deaf_woman_tone2:": "๐Ÿง๐Ÿผโ€โ™€๏ธ", + ":deaf_woman_tone3:": "๐Ÿง๐Ÿฝโ€โ™€๏ธ", + ":deaf_woman_tone4:": "๐Ÿง๐Ÿพโ€โ™€๏ธ", + ":deaf_woman_tone5:": "๐Ÿง๐Ÿฟโ€โ™€๏ธ", + ":deciduous_tree:": "๐ŸŒณ", + ":deer:": "๐ŸฆŒ", + ":denmark:": "๐Ÿ‡ฉ๐Ÿ‡ฐ", + ":department_store:": "๐Ÿฌ", + ":derelict_house:": "๐Ÿš", + ":derelict_house_building:": "๐Ÿš๏ธ", + ":desert:": "๐Ÿœ๏ธ", + ":desert_island:": "๐Ÿ๏ธ", + ":desktop:": "๐Ÿ–ฅ๏ธ", + ":desktop_computer:": "๐Ÿ–ฅ๏ธ", + ":detective:": "๐Ÿ•ต", + ":detective_tone1:": "๐Ÿ•ต๐Ÿป", + ":detective_tone2:": "๐Ÿ•ต๐Ÿผ", + ":detective_tone3:": "๐Ÿ•ต๐Ÿฝ", + ":detective_tone4:": "๐Ÿ•ต๐Ÿพ", + ":detective_tone5:": "๐Ÿ•ต๐Ÿฟ", + ":dg:": "๐Ÿ‡ฉ๐Ÿ‡ฌ", + ":diamond_shape_with_a_dot_inside:": "๐Ÿ’ ", + ":diamonds:": "โ™ฆ๏ธ", + ":diego_garcia:": "๐Ÿ‡ฉ๐Ÿ‡ฌ", + ":digit_eight:": "8๏ธ", + ":digit_five:": "5๏ธ", + ":digit_four:": "4๏ธ", + ":digit_nine:": "9๏ธ", + ":digit_one:": "1๏ธ", + ":digit_seven:": "7๏ธ", + ":digit_six:": "6๏ธ", + ":digit_three:": "3๏ธ", + ":digit_two:": "2๏ธ", + ":digit_zero:": "0๏ธ", + ":disappointed:": "๐Ÿ˜ž", + ":disappointed_relieved:": "๐Ÿ˜ฅ", + ":disguised_face:": "๐Ÿฅธ", + ":dividers:": "๐Ÿ—‚๏ธ", + ":diving_mask:": "๐Ÿคฟ", + ":diya_lamp:": "๐Ÿช”", + ":dizzy:": "๐Ÿ’ซ", + ":dizzy_face:": "๐Ÿ˜ต", + ":dj:": "๐Ÿ‡ฉ๐Ÿ‡ฏ", + ":djibouti:": "๐Ÿ‡ฉ๐Ÿ‡ฏ", + ":dk:": "๐Ÿ‡ฉ๐Ÿ‡ฐ", + ":dm:": "๐Ÿ‡ฉ๐Ÿ‡ฒ", + ":dna:": "๐Ÿงฌ", + ":do:": "๐Ÿ‡ฉ๐Ÿ‡ด", + ":do_not_litter:": "๐Ÿšฏ", + ":dodo:": "๐Ÿฆค", + ":dog2:": "๐Ÿ•", + ":dog:": "๐Ÿถ", + ":dollar:": "๐Ÿ’ต", + ":dolls:": "๐ŸŽŽ", + ":dolphin:": "๐Ÿฌ", + ":dominica:": "๐Ÿ‡ฉ๐Ÿ‡ฒ", + ":dominican_republic:": "๐Ÿ‡ฉ๐Ÿ‡ด", + ":door:": "๐Ÿšช", + ":double_vertical_bar:": "โธ๏ธ", + ":doughnut:": "๐Ÿฉ", + ":dove:": "๐Ÿ•Š๏ธ", + ":dove_of_peace:": "๐Ÿ•Š๏ธ", + ":dragon:": "๐Ÿ‰", + ":dragon_face:": "๐Ÿฒ", + ":dress:": "๐Ÿ‘—", + ":dromedary_camel:": "๐Ÿช", + ":drool:": "๐Ÿคค", + ":drooling_face:": "๐Ÿคค", + ":drop_of_blood:": "๐Ÿฉธ", + ":droplet:": "๐Ÿ’ง", + ":drum:": "๐Ÿฅ", + ":drum_with_drumsticks:": "๐Ÿฅ", + ":duck:": "๐Ÿฆ†", + ":dumpling:": "๐ŸฅŸ", + ":dvd:": "๐Ÿ“€", + ":dz:": "๐Ÿ‡ฉ๐Ÿ‡ฟ", + ":e-mail:": "๐Ÿ“ง", + ":ea:": "๐Ÿ‡ช๐Ÿ‡ฆ", + ":eagle:": "๐Ÿฆ…", + ":ear:": "๐Ÿ‘‚", + ":ear_of_rice:": "๐ŸŒพ", + ":ear_tone1:": "๐Ÿ‘‚๐Ÿป", + ":ear_tone2:": "๐Ÿ‘‚๐Ÿผ", + ":ear_tone3:": "๐Ÿ‘‚๐Ÿฝ", + ":ear_tone4:": "๐Ÿ‘‚๐Ÿพ", + ":ear_tone5:": "๐Ÿ‘‚๐Ÿฟ", + ":ear_with_hearing_aid:": "๐Ÿฆป", + ":ear_with_hearing_aid_dark_skin_tone:": "๐Ÿฆป๐Ÿฟ", + ":ear_with_hearing_aid_light_skin_tone:": "๐Ÿฆป๐Ÿป", + ":ear_with_hearing_aid_medium_dark_skin_tone:": "๐Ÿฆป๐Ÿพ", + ":ear_with_hearing_aid_medium_light_skin_tone:": "๐Ÿฆป๐Ÿผ", + ":ear_with_hearing_aid_medium_skin_tone:": "๐Ÿฆป๐Ÿฝ", + ":ear_with_hearing_aid_tone1:": "๐Ÿฆป๐Ÿป", + ":ear_with_hearing_aid_tone2:": "๐Ÿฆป๐Ÿผ", + ":ear_with_hearing_aid_tone3:": "๐Ÿฆป๐Ÿฝ", + ":ear_with_hearing_aid_tone4:": "๐Ÿฆป๐Ÿพ", + ":ear_with_hearing_aid_tone5:": "๐Ÿฆป๐Ÿฟ", + ":earth_africa:": "๐ŸŒ", + ":earth_americas:": "๐ŸŒŽ", + ":earth_asia:": "๐ŸŒ", + ":ec:": "๐Ÿ‡ช๐Ÿ‡จ", + ":ecuador:": "๐Ÿ‡ช๐Ÿ‡จ", + ":ee:": "๐Ÿ‡ช๐Ÿ‡ช", + ":eg:": "๐Ÿ‡ช๐Ÿ‡ฌ", + ":egg:": "๐Ÿฅš", + ":eggplant:": "๐Ÿ†", + ":egypt:": "๐Ÿ‡ช๐Ÿ‡ฌ", + ":eh:": "๐Ÿ‡ช๐Ÿ‡ญ", + ":eight:": "8๏ธโƒฃ", + ":eight_pointed_black_star:": "โœด๏ธ", + ":eight_spoked_asterisk:": "โœณ๏ธ", + ":eject:": "โ๏ธ", + ":eject_symbol:": "โ๏ธ", + ":el_salvador:": "๐Ÿ‡ธ๐Ÿ‡ป", + ":electric_plug:": "๐Ÿ”Œ", + ":elephant:": "๐Ÿ˜", + ":elevator:": "๐Ÿ›—", + ":elf:": "๐Ÿง", + ":elf_dark_skin_tone:": "๐Ÿง๐Ÿฟ", + ":elf_light_skin_tone:": "๐Ÿง๐Ÿป", + ":elf_medium_dark_skin_tone:": "๐Ÿง๐Ÿพ", + ":elf_medium_light_skin_tone:": "๐Ÿง๐Ÿผ", + ":elf_medium_skin_tone:": "๐Ÿง๐Ÿฝ", + ":elf_tone1:": "๐Ÿง๐Ÿป", + ":elf_tone2:": "๐Ÿง๐Ÿผ", + ":elf_tone3:": "๐Ÿง๐Ÿฝ", + ":elf_tone4:": "๐Ÿง๐Ÿพ", + ":elf_tone5:": "๐Ÿง๐Ÿฟ", + ":email:": "๐Ÿ“ง", + ":end:": "๐Ÿ”š", + ":england:": "๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ", + ":envelope:": "โœ‰๏ธ", + ":envelope_with_arrow:": "๐Ÿ“ฉ", + ":equatorial_guinea:": "๐Ÿ‡ฌ๐Ÿ‡ถ", + ":er:": "๐Ÿ‡ช๐Ÿ‡ท", + ":eritrea:": "๐Ÿ‡ช๐Ÿ‡ท", + ":es:": "๐Ÿ‡ช๐Ÿ‡ธ", + ":estonia:": "๐Ÿ‡ช๐Ÿ‡ช", + ":et:": "๐Ÿ‡ช๐Ÿ‡น", + ":ethiopia:": "๐Ÿ‡ช๐Ÿ‡น", + ":eu:": "๐Ÿ‡ช๐Ÿ‡บ", + ":euro:": "๐Ÿ’ถ", + ":european_castle:": "๐Ÿฐ", + ":european_post_office:": "๐Ÿค", + ":european_union:": "๐Ÿ‡ช๐Ÿ‡บ", + ":evergreen_tree:": "๐ŸŒฒ", + ":exclamation:": "โ—", + ":expecting_woman:": "๐Ÿคฐ", + ":expecting_woman_tone1:": "๐Ÿคฐ๐Ÿป", + ":expecting_woman_tone2:": "๐Ÿคฐ๐Ÿผ", + ":expecting_woman_tone3:": "๐Ÿคฐ๐Ÿฝ", + ":expecting_woman_tone4:": "๐Ÿคฐ๐Ÿพ", + ":expecting_woman_tone5:": "๐Ÿคฐ๐Ÿฟ", + ":exploding_head:": "๐Ÿคฏ", + ":expressionless:": "๐Ÿ˜‘", + ":eye:": "๐Ÿ‘๏ธ", + ":eye_in_speech_bubble:": "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ", + ":eye_speech_bubble:": "๐Ÿ‘โ€๐Ÿ—จ", + ":eyeglasses:": "๐Ÿ‘“", + ":eyes:": "๐Ÿ‘€", + ":face_exhaling:": "๐Ÿ˜ฎโ€๐Ÿ’จ", + ":face_in_clouds:": "๐Ÿ˜ถโ€๐ŸŒซ๏ธ", + ":face_palm:": "๐Ÿคฆ", + ":face_palm_tone1:": "๐Ÿคฆ๐Ÿป", + ":face_palm_tone2:": "๐Ÿคฆ๐Ÿผ", + ":face_palm_tone3:": "๐Ÿคฆ๐Ÿฝ", + ":face_palm_tone4:": "๐Ÿคฆ๐Ÿพ", + ":face_palm_tone5:": "๐Ÿคฆ๐Ÿฟ", + ":face_vomiting:": "๐Ÿคฎ", + ":face_with_cowboy_hat:": "๐Ÿค ", + ":face_with_hand_over_mouth:": "๐Ÿคญ", + ":face_with_head_bandage:": "๐Ÿค•", + ":face_with_monocle:": "๐Ÿง", + ":face_with_raised_eyebrow:": "๐Ÿคจ", + ":face_with_rolling_eyes:": "๐Ÿ™„", + ":face_with_spiral_eyes:": "๐Ÿ˜ตโ€๐Ÿ’ซ", + ":face_with_symbols_over_mouth:": "๐Ÿคฌ", + ":face_with_thermometer:": "๐Ÿค’", + ":facepalm:": "๐Ÿคฆ", + ":facepalm_tone1:": "๐Ÿคฆ๐Ÿป", + ":facepalm_tone2:": "๐Ÿคฆ๐Ÿผ", + ":facepalm_tone3:": "๐Ÿคฆ๐Ÿฝ", + ":facepalm_tone4:": "๐Ÿคฆ๐Ÿพ", + ":facepalm_tone5:": "๐Ÿคฆ๐Ÿฟ", + ":factory:": "๐Ÿญ", + ":factory_worker:": "๐Ÿง‘โ€๐Ÿญ", + ":factory_worker_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿญ", + ":factory_worker_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿญ", + ":factory_worker_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿญ", + ":factory_worker_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿญ", + ":factory_worker_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿญ", + ":factory_worker_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿญ", + ":factory_worker_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿญ", + ":factory_worker_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿญ", + ":factory_worker_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿญ", + ":factory_worker_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿญ", + ":fairy:": "๐Ÿงš", + ":fairy_dark_skin_tone:": "๐Ÿงš๐Ÿฟ", + ":fairy_light_skin_tone:": "๐Ÿงš๐Ÿป", + ":fairy_medium_dark_skin_tone:": "๐Ÿงš๐Ÿพ", + ":fairy_medium_light_skin_tone:": "๐Ÿงš๐Ÿผ", + ":fairy_medium_skin_tone:": "๐Ÿงš๐Ÿฝ", + ":fairy_tone1:": "๐Ÿงš๐Ÿป", + ":fairy_tone2:": "๐Ÿงš๐Ÿผ", + ":fairy_tone3:": "๐Ÿงš๐Ÿฝ", + ":fairy_tone4:": "๐Ÿงš๐Ÿพ", + ":fairy_tone5:": "๐Ÿงš๐Ÿฟ", + ":falafel:": "๐Ÿง†", + ":falkland_islands:": "๐Ÿ‡ซ๐Ÿ‡ฐ", + ":fallen_leaf:": "๐Ÿ‚", + ":family:": "๐Ÿ‘ช", + ":family_man_boy:": "๐Ÿ‘จโ€๐Ÿ‘ฆ", + ":family_man_boy_boy:": "๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_man_girl:": "๐Ÿ‘จโ€๐Ÿ‘ง", + ":family_man_girl_boy:": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_man_girl_girl:": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_man_man_boy:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", + ":family_man_man_boy_boy:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_man_man_girl:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", + ":family_man_man_girl_boy:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_man_man_girl_girl:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_man_woman_boy:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + ":family_man_woman_boy_boy:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_man_woman_girl:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + ":family_man_woman_girl_boy:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_man_woman_girl_girl:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_mmb:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", + ":family_mmbb:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_mmg:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", + ":family_mmgb:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_mmgg:": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_mwbb:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_mwg:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + ":family_mwgb:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_mwgg:": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_woman_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + ":family_woman_boy_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_woman_girl:": "๐Ÿ‘ฉโ€๐Ÿ‘ง", + ":family_woman_girl_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_woman_girl_girl:": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_woman_woman_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + ":family_woman_woman_boy_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_woman_woman_girl:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + ":family_woman_woman_girl_boy:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_woman_woman_girl_girl:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":family_wwb:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + ":family_wwbb:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + ":family_wwg:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + ":family_wwgb:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + ":family_wwgg:": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + ":farmer:": "๐Ÿง‘โ€๐ŸŒพ", + ":farmer_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐ŸŒพ", + ":farmer_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐ŸŒพ", + ":farmer_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐ŸŒพ", + ":farmer_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐ŸŒพ", + ":farmer_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐ŸŒพ", + ":farmer_tone1:": "๐Ÿง‘๐Ÿปโ€๐ŸŒพ", + ":farmer_tone2:": "๐Ÿง‘๐Ÿผโ€๐ŸŒพ", + ":farmer_tone3:": "๐Ÿง‘๐Ÿฝโ€๐ŸŒพ", + ":farmer_tone4:": "๐Ÿง‘๐Ÿพโ€๐ŸŒพ", + ":farmer_tone5:": "๐Ÿง‘๐Ÿฟโ€๐ŸŒพ", + ":faroe_islands:": "๐Ÿ‡ซ๐Ÿ‡ด", + ":fast_forward:": "โฉ", + ":fax:": "๐Ÿ“ ", + ":fearful:": "๐Ÿ˜จ", + ":feather:": "๐Ÿชถ", + ":feet:": "๐Ÿพ", + ":female_detective:": "๐Ÿ•ต๏ธโ€โ™€๏ธ", + ":female_sign:": "โ™€๏ธ", + ":fencer:": "๐Ÿคบ", + ":fencing:": "๐Ÿคบ", + ":ferris_wheel:": "๐ŸŽก", + ":ferry:": "โ›ด๏ธ", + ":fi:": "๐Ÿ‡ซ๐Ÿ‡ฎ", + ":field_hockey:": "๐Ÿ‘", + ":fiji:": "๐Ÿ‡ซ๐Ÿ‡ฏ", + ":file_cabinet:": "๐Ÿ—„๏ธ", + ":file_folder:": "๐Ÿ“", + ":film_frames:": "๐ŸŽž๏ธ", + ":film_projector:": "๐Ÿ“ฝ๏ธ", + ":film_strip:": "๐ŸŽž", + ":fingers_crossed:": "๐Ÿคž", + ":fingers_crossed_tone1:": "๐Ÿคž๐Ÿป", + ":fingers_crossed_tone2:": "๐Ÿคž๐Ÿผ", + ":fingers_crossed_tone3:": "๐Ÿคž๐Ÿฝ", + ":fingers_crossed_tone4:": "๐Ÿคž๐Ÿพ", + ":fingers_crossed_tone5:": "๐Ÿคž๐Ÿฟ", + ":finland:": "๐Ÿ‡ซ๐Ÿ‡ฎ", + ":fire:": "๐Ÿ”ฅ", + ":fire_engine:": "๐Ÿš’", + ":fire_extinguisher:": "๐Ÿงฏ", + ":firecracker:": "๐Ÿงจ", + ":firefighter:": "๐Ÿง‘โ€๐Ÿš’", + ":firefighter_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿš’", + ":firefighter_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿš’", + ":firefighter_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿš’", + ":firefighter_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿš’", + ":firefighter_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿš’", + ":firefighter_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿš’", + ":firefighter_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿš’", + ":firefighter_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿš’", + ":firefighter_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿš’", + ":firefighter_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿš’", + ":fireworks:": "๐ŸŽ†", + ":first_place:": "๐Ÿฅ‡", + ":first_place_medal:": "๐Ÿฅ‡", + ":first_quarter_moon:": "๐ŸŒ“", + ":first_quarter_moon_with_face:": "๐ŸŒ›", + ":fish:": "๐ŸŸ", + ":fish_cake:": "๐Ÿฅ", + ":fishing_pole_and_fish:": "๐ŸŽฃ", + ":fist:": "โœŠ", + ":fist_left:": "๐Ÿค›", + ":fist_oncoming:": "๐Ÿ‘Š", + ":fist_raised:": "โœŠ", + ":fist_right:": "๐Ÿคœ", + ":fist_tone1:": "โœŠ๐Ÿป", + ":fist_tone2:": "โœŠ๐Ÿผ", + ":fist_tone3:": "โœŠ๐Ÿฝ", + ":fist_tone4:": "โœŠ๐Ÿพ", + ":fist_tone5:": "โœŠ๐Ÿฟ", + ":five:": "5๏ธโƒฃ", + ":fj:": "๐Ÿ‡ซ๐Ÿ‡ฏ", + ":fk:": "๐Ÿ‡ซ๐Ÿ‡ฐ", + ":flag_ac:": "๐Ÿ‡ฆ๐Ÿ‡จ", + ":flag_ad:": "๐Ÿ‡ฆ๐Ÿ‡ฉ", + ":flag_ae:": "๐Ÿ‡ฆ๐Ÿ‡ช", + ":flag_af:": "๐Ÿ‡ฆ๐Ÿ‡ซ", + ":flag_ag:": "๐Ÿ‡ฆ๐Ÿ‡ฌ", + ":flag_ai:": "๐Ÿ‡ฆ๐Ÿ‡ฎ", + ":flag_al:": "๐Ÿ‡ฆ๐Ÿ‡ฑ", + ":flag_am:": "๐Ÿ‡ฆ๐Ÿ‡ฒ", + ":flag_ao:": "๐Ÿ‡ฆ๐Ÿ‡ด", + ":flag_aq:": "๐Ÿ‡ฆ๐Ÿ‡ถ", + ":flag_ar:": "๐Ÿ‡ฆ๐Ÿ‡ท", + ":flag_as:": "๐Ÿ‡ฆ๐Ÿ‡ธ", + ":flag_at:": "๐Ÿ‡ฆ๐Ÿ‡น", + ":flag_au:": "๐Ÿ‡ฆ๐Ÿ‡บ", + ":flag_aw:": "๐Ÿ‡ฆ๐Ÿ‡ผ", + ":flag_ax:": "๐Ÿ‡ฆ๐Ÿ‡ฝ", + ":flag_az:": "๐Ÿ‡ฆ๐Ÿ‡ฟ", + ":flag_ba:": "๐Ÿ‡ง๐Ÿ‡ฆ", + ":flag_bb:": "๐Ÿ‡ง๐Ÿ‡ง", + ":flag_bd:": "๐Ÿ‡ง๐Ÿ‡ฉ", + ":flag_be:": "๐Ÿ‡ง๐Ÿ‡ช", + ":flag_bf:": "๐Ÿ‡ง๐Ÿ‡ซ", + ":flag_bg:": "๐Ÿ‡ง๐Ÿ‡ฌ", + ":flag_bh:": "๐Ÿ‡ง๐Ÿ‡ญ", + ":flag_bi:": "๐Ÿ‡ง๐Ÿ‡ฎ", + ":flag_bj:": "๐Ÿ‡ง๐Ÿ‡ฏ", + ":flag_bl:": "๐Ÿ‡ง๐Ÿ‡ฑ", + ":flag_black:": "๐Ÿด", + ":flag_bm:": "๐Ÿ‡ง๐Ÿ‡ฒ", + ":flag_bn:": "๐Ÿ‡ง๐Ÿ‡ณ", + ":flag_bo:": "๐Ÿ‡ง๐Ÿ‡ด", + ":flag_bq:": "๐Ÿ‡ง๐Ÿ‡ถ", + ":flag_br:": "๐Ÿ‡ง๐Ÿ‡ท", + ":flag_bs:": "๐Ÿ‡ง๐Ÿ‡ธ", + ":flag_bt:": "๐Ÿ‡ง๐Ÿ‡น", + ":flag_bv:": "๐Ÿ‡ง๐Ÿ‡ป", + ":flag_bw:": "๐Ÿ‡ง๐Ÿ‡ผ", + ":flag_by:": "๐Ÿ‡ง๐Ÿ‡พ", + ":flag_bz:": "๐Ÿ‡ง๐Ÿ‡ฟ", + ":flag_ca:": "๐Ÿ‡จ๐Ÿ‡ฆ", + ":flag_cc:": "๐Ÿ‡จ๐Ÿ‡จ", + ":flag_cd:": "๐Ÿ‡จ๐Ÿ‡ฉ", + ":flag_cf:": "๐Ÿ‡จ๐Ÿ‡ซ", + ":flag_cg:": "๐Ÿ‡จ๐Ÿ‡ฌ", + ":flag_ch:": "๐Ÿ‡จ๐Ÿ‡ญ", + ":flag_ci:": "๐Ÿ‡จ๐Ÿ‡ฎ", + ":flag_ck:": "๐Ÿ‡จ๐Ÿ‡ฐ", + ":flag_cl:": "๐Ÿ‡จ๐Ÿ‡ฑ", + ":flag_cm:": "๐Ÿ‡จ๐Ÿ‡ฒ", + ":flag_cn:": "๐Ÿ‡จ๐Ÿ‡ณ", + ":flag_co:": "๐Ÿ‡จ๐Ÿ‡ด", + ":flag_cp:": "๐Ÿ‡จ๐Ÿ‡ต", + ":flag_cr:": "๐Ÿ‡จ๐Ÿ‡ท", + ":flag_cu:": "๐Ÿ‡จ๐Ÿ‡บ", + ":flag_cv:": "๐Ÿ‡จ๐Ÿ‡ป", + ":flag_cw:": "๐Ÿ‡จ๐Ÿ‡ผ", + ":flag_cx:": "๐Ÿ‡จ๐Ÿ‡ฝ", + ":flag_cy:": "๐Ÿ‡จ๐Ÿ‡พ", + ":flag_cz:": "๐Ÿ‡จ๐Ÿ‡ฟ", + ":flag_de:": "๐Ÿ‡ฉ๐Ÿ‡ช", + ":flag_dg:": "๐Ÿ‡ฉ๐Ÿ‡ฌ", + ":flag_dj:": "๐Ÿ‡ฉ๐Ÿ‡ฏ", + ":flag_dk:": "๐Ÿ‡ฉ๐Ÿ‡ฐ", + ":flag_dm:": "๐Ÿ‡ฉ๐Ÿ‡ฒ", + ":flag_do:": "๐Ÿ‡ฉ๐Ÿ‡ด", + ":flag_dz:": "๐Ÿ‡ฉ๐Ÿ‡ฟ", + ":flag_ea:": "๐Ÿ‡ช๐Ÿ‡ฆ", + ":flag_ec:": "๐Ÿ‡ช๐Ÿ‡จ", + ":flag_ee:": "๐Ÿ‡ช๐Ÿ‡ช", + ":flag_eg:": "๐Ÿ‡ช๐Ÿ‡ฌ", + ":flag_eh:": "๐Ÿ‡ช๐Ÿ‡ญ", + ":flag_er:": "๐Ÿ‡ช๐Ÿ‡ท", + ":flag_es:": "๐Ÿ‡ช๐Ÿ‡ธ", + ":flag_et:": "๐Ÿ‡ช๐Ÿ‡น", + ":flag_eu:": "๐Ÿ‡ช๐Ÿ‡บ", + ":flag_fi:": "๐Ÿ‡ซ๐Ÿ‡ฎ", + ":flag_fj:": "๐Ÿ‡ซ๐Ÿ‡ฏ", + ":flag_fk:": "๐Ÿ‡ซ๐Ÿ‡ฐ", + ":flag_fm:": "๐Ÿ‡ซ๐Ÿ‡ฒ", + ":flag_fo:": "๐Ÿ‡ซ๐Ÿ‡ด", + ":flag_fr:": "๐Ÿ‡ซ๐Ÿ‡ท", + ":flag_ga:": "๐Ÿ‡ฌ๐Ÿ‡ฆ", + ":flag_gb:": "๐Ÿ‡ฌ๐Ÿ‡ง", + ":flag_gd:": "๐Ÿ‡ฌ๐Ÿ‡ฉ", + ":flag_ge:": "๐Ÿ‡ฌ๐Ÿ‡ช", + ":flag_gf:": "๐Ÿ‡ฌ๐Ÿ‡ซ", + ":flag_gg:": "๐Ÿ‡ฌ๐Ÿ‡ฌ", + ":flag_gh:": "๐Ÿ‡ฌ๐Ÿ‡ญ", + ":flag_gi:": "๐Ÿ‡ฌ๐Ÿ‡ฎ", + ":flag_gl:": "๐Ÿ‡ฌ๐Ÿ‡ฑ", + ":flag_gm:": "๐Ÿ‡ฌ๐Ÿ‡ฒ", + ":flag_gn:": "๐Ÿ‡ฌ๐Ÿ‡ณ", + ":flag_gp:": "๐Ÿ‡ฌ๐Ÿ‡ต", + ":flag_gq:": "๐Ÿ‡ฌ๐Ÿ‡ถ", + ":flag_gr:": "๐Ÿ‡ฌ๐Ÿ‡ท", + ":flag_gs:": "๐Ÿ‡ฌ๐Ÿ‡ธ", + ":flag_gt:": "๐Ÿ‡ฌ๐Ÿ‡น", + ":flag_gu:": "๐Ÿ‡ฌ๐Ÿ‡บ", + ":flag_gw:": "๐Ÿ‡ฌ๐Ÿ‡ผ", + ":flag_gy:": "๐Ÿ‡ฌ๐Ÿ‡พ", + ":flag_hk:": "๐Ÿ‡ญ๐Ÿ‡ฐ", + ":flag_hm:": "๐Ÿ‡ญ๐Ÿ‡ฒ", + ":flag_hn:": "๐Ÿ‡ญ๐Ÿ‡ณ", + ":flag_hr:": "๐Ÿ‡ญ๐Ÿ‡ท", + ":flag_ht:": "๐Ÿ‡ญ๐Ÿ‡น", + ":flag_hu:": "๐Ÿ‡ญ๐Ÿ‡บ", + ":flag_ic:": "๐Ÿ‡ฎ๐Ÿ‡จ", + ":flag_id:": "๐Ÿ‡ฎ๐Ÿ‡ฉ", + ":flag_ie:": "๐Ÿ‡ฎ๐Ÿ‡ช", + ":flag_il:": "๐Ÿ‡ฎ๐Ÿ‡ฑ", + ":flag_im:": "๐Ÿ‡ฎ๐Ÿ‡ฒ", + ":flag_in:": "๐Ÿ‡ฎ๐Ÿ‡ณ", + ":flag_io:": "๐Ÿ‡ฎ๐Ÿ‡ด", + ":flag_iq:": "๐Ÿ‡ฎ๐Ÿ‡ถ", + ":flag_ir:": "๐Ÿ‡ฎ๐Ÿ‡ท", + ":flag_is:": "๐Ÿ‡ฎ๐Ÿ‡ธ", + ":flag_it:": "๐Ÿ‡ฎ๐Ÿ‡น", + ":flag_je:": "๐Ÿ‡ฏ๐Ÿ‡ช", + ":flag_jm:": "๐Ÿ‡ฏ๐Ÿ‡ฒ", + ":flag_jo:": "๐Ÿ‡ฏ๐Ÿ‡ด", + ":flag_jp:": "๐Ÿ‡ฏ๐Ÿ‡ต", + ":flag_ke:": "๐Ÿ‡ฐ๐Ÿ‡ช", + ":flag_kg:": "๐Ÿ‡ฐ๐Ÿ‡ฌ", + ":flag_kh:": "๐Ÿ‡ฐ๐Ÿ‡ญ", + ":flag_ki:": "๐Ÿ‡ฐ๐Ÿ‡ฎ", + ":flag_km:": "๐Ÿ‡ฐ๐Ÿ‡ฒ", + ":flag_kn:": "๐Ÿ‡ฐ๐Ÿ‡ณ", + ":flag_kp:": "๐Ÿ‡ฐ๐Ÿ‡ต", + ":flag_kr:": "๐Ÿ‡ฐ๐Ÿ‡ท", + ":flag_kw:": "๐Ÿ‡ฐ๐Ÿ‡ผ", + ":flag_ky:": "๐Ÿ‡ฐ๐Ÿ‡พ", + ":flag_kz:": "๐Ÿ‡ฐ๐Ÿ‡ฟ", + ":flag_la:": "๐Ÿ‡ฑ๐Ÿ‡ฆ", + ":flag_lb:": "๐Ÿ‡ฑ๐Ÿ‡ง", + ":flag_lc:": "๐Ÿ‡ฑ๐Ÿ‡จ", + ":flag_li:": "๐Ÿ‡ฑ๐Ÿ‡ฎ", + ":flag_lk:": "๐Ÿ‡ฑ๐Ÿ‡ฐ", + ":flag_lr:": "๐Ÿ‡ฑ๐Ÿ‡ท", + ":flag_ls:": "๐Ÿ‡ฑ๐Ÿ‡ธ", + ":flag_lt:": "๐Ÿ‡ฑ๐Ÿ‡น", + ":flag_lu:": "๐Ÿ‡ฑ๐Ÿ‡บ", + ":flag_lv:": "๐Ÿ‡ฑ๐Ÿ‡ป", + ":flag_ly:": "๐Ÿ‡ฑ๐Ÿ‡พ", + ":flag_ma:": "๐Ÿ‡ฒ๐Ÿ‡ฆ", + ":flag_mc:": "๐Ÿ‡ฒ๐Ÿ‡จ", + ":flag_md:": "๐Ÿ‡ฒ๐Ÿ‡ฉ", + ":flag_me:": "๐Ÿ‡ฒ๐Ÿ‡ช", + ":flag_mf:": "๐Ÿ‡ฒ๐Ÿ‡ซ", + ":flag_mg:": "๐Ÿ‡ฒ๐Ÿ‡ฌ", + ":flag_mh:": "๐Ÿ‡ฒ๐Ÿ‡ญ", + ":flag_mk:": "๐Ÿ‡ฒ๐Ÿ‡ฐ", + ":flag_ml:": "๐Ÿ‡ฒ๐Ÿ‡ฑ", + ":flag_mm:": "๐Ÿ‡ฒ๐Ÿ‡ฒ", + ":flag_mn:": "๐Ÿ‡ฒ๐Ÿ‡ณ", + ":flag_mo:": "๐Ÿ‡ฒ๐Ÿ‡ด", + ":flag_mp:": "๐Ÿ‡ฒ๐Ÿ‡ต", + ":flag_mq:": "๐Ÿ‡ฒ๐Ÿ‡ถ", + ":flag_mr:": "๐Ÿ‡ฒ๐Ÿ‡ท", + ":flag_ms:": "๐Ÿ‡ฒ๐Ÿ‡ธ", + ":flag_mt:": "๐Ÿ‡ฒ๐Ÿ‡น", + ":flag_mu:": "๐Ÿ‡ฒ๐Ÿ‡บ", + ":flag_mv:": "๐Ÿ‡ฒ๐Ÿ‡ป", + ":flag_mw:": "๐Ÿ‡ฒ๐Ÿ‡ผ", + ":flag_mx:": "๐Ÿ‡ฒ๐Ÿ‡ฝ", + ":flag_my:": "๐Ÿ‡ฒ๐Ÿ‡พ", + ":flag_mz:": "๐Ÿ‡ฒ๐Ÿ‡ฟ", + ":flag_na:": "๐Ÿ‡ณ๐Ÿ‡ฆ", + ":flag_nc:": "๐Ÿ‡ณ๐Ÿ‡จ", + ":flag_ne:": "๐Ÿ‡ณ๐Ÿ‡ช", + ":flag_nf:": "๐Ÿ‡ณ๐Ÿ‡ซ", + ":flag_ng:": "๐Ÿ‡ณ๐Ÿ‡ฌ", + ":flag_ni:": "๐Ÿ‡ณ๐Ÿ‡ฎ", + ":flag_nl:": "๐Ÿ‡ณ๐Ÿ‡ฑ", + ":flag_no:": "๐Ÿ‡ณ๐Ÿ‡ด", + ":flag_np:": "๐Ÿ‡ณ๐Ÿ‡ต", + ":flag_nr:": "๐Ÿ‡ณ๐Ÿ‡ท", + ":flag_nu:": "๐Ÿ‡ณ๐Ÿ‡บ", + ":flag_nz:": "๐Ÿ‡ณ๐Ÿ‡ฟ", + ":flag_om:": "๐Ÿ‡ด๐Ÿ‡ฒ", + ":flag_pa:": "๐Ÿ‡ต๐Ÿ‡ฆ", + ":flag_pe:": "๐Ÿ‡ต๐Ÿ‡ช", + ":flag_pf:": "๐Ÿ‡ต๐Ÿ‡ซ", + ":flag_pg:": "๐Ÿ‡ต๐Ÿ‡ฌ", + ":flag_ph:": "๐Ÿ‡ต๐Ÿ‡ญ", + ":flag_pk:": "๐Ÿ‡ต๐Ÿ‡ฐ", + ":flag_pl:": "๐Ÿ‡ต๐Ÿ‡ฑ", + ":flag_pm:": "๐Ÿ‡ต๐Ÿ‡ฒ", + ":flag_pn:": "๐Ÿ‡ต๐Ÿ‡ณ", + ":flag_pr:": "๐Ÿ‡ต๐Ÿ‡ท", + ":flag_ps:": "๐Ÿ‡ต๐Ÿ‡ธ", + ":flag_pt:": "๐Ÿ‡ต๐Ÿ‡น", + ":flag_pw:": "๐Ÿ‡ต๐Ÿ‡ผ", + ":flag_py:": "๐Ÿ‡ต๐Ÿ‡พ", + ":flag_qa:": "๐Ÿ‡ถ๐Ÿ‡ฆ", + ":flag_re:": "๐Ÿ‡ท๐Ÿ‡ช", + ":flag_ro:": "๐Ÿ‡ท๐Ÿ‡ด", + ":flag_rs:": "๐Ÿ‡ท๐Ÿ‡ธ", + ":flag_ru:": "๐Ÿ‡ท๐Ÿ‡บ", + ":flag_rw:": "๐Ÿ‡ท๐Ÿ‡ผ", + ":flag_sa:": "๐Ÿ‡ธ๐Ÿ‡ฆ", + ":flag_sb:": "๐Ÿ‡ธ๐Ÿ‡ง", + ":flag_sc:": "๐Ÿ‡ธ๐Ÿ‡จ", + ":flag_sd:": "๐Ÿ‡ธ๐Ÿ‡ฉ", + ":flag_se:": "๐Ÿ‡ธ๐Ÿ‡ช", + ":flag_sg:": "๐Ÿ‡ธ๐Ÿ‡ฌ", + ":flag_sh:": "๐Ÿ‡ธ๐Ÿ‡ญ", + ":flag_si:": "๐Ÿ‡ธ๐Ÿ‡ฎ", + ":flag_sj:": "๐Ÿ‡ธ๐Ÿ‡ฏ", + ":flag_sk:": "๐Ÿ‡ธ๐Ÿ‡ฐ", + ":flag_sl:": "๐Ÿ‡ธ๐Ÿ‡ฑ", + ":flag_sm:": "๐Ÿ‡ธ๐Ÿ‡ฒ", + ":flag_sn:": "๐Ÿ‡ธ๐Ÿ‡ณ", + ":flag_so:": "๐Ÿ‡ธ๐Ÿ‡ด", + ":flag_sr:": "๐Ÿ‡ธ๐Ÿ‡ท", + ":flag_ss:": "๐Ÿ‡ธ๐Ÿ‡ธ", + ":flag_st:": "๐Ÿ‡ธ๐Ÿ‡น", + ":flag_sv:": "๐Ÿ‡ธ๐Ÿ‡ป", + ":flag_sx:": "๐Ÿ‡ธ๐Ÿ‡ฝ", + ":flag_sy:": "๐Ÿ‡ธ๐Ÿ‡พ", + ":flag_sz:": "๐Ÿ‡ธ๐Ÿ‡ฟ", + ":flag_ta:": "๐Ÿ‡น๐Ÿ‡ฆ", + ":flag_tc:": "๐Ÿ‡น๐Ÿ‡จ", + ":flag_td:": "๐Ÿ‡น๐Ÿ‡ฉ", + ":flag_tf:": "๐Ÿ‡น๐Ÿ‡ซ", + ":flag_tg:": "๐Ÿ‡น๐Ÿ‡ฌ", + ":flag_th:": "๐Ÿ‡น๐Ÿ‡ญ", + ":flag_tj:": "๐Ÿ‡น๐Ÿ‡ฏ", + ":flag_tk:": "๐Ÿ‡น๐Ÿ‡ฐ", + ":flag_tl:": "๐Ÿ‡น๐Ÿ‡ฑ", + ":flag_tm:": "๐Ÿ‡น๐Ÿ‡ฒ", + ":flag_tn:": "๐Ÿ‡น๐Ÿ‡ณ", + ":flag_to:": "๐Ÿ‡น๐Ÿ‡ด", + ":flag_tr:": "๐Ÿ‡น๐Ÿ‡ท", + ":flag_tt:": "๐Ÿ‡น๐Ÿ‡น", + ":flag_tv:": "๐Ÿ‡น๐Ÿ‡ป", + ":flag_tw:": "๐Ÿ‡น๐Ÿ‡ผ", + ":flag_tz:": "๐Ÿ‡น๐Ÿ‡ฟ", + ":flag_ua:": "๐Ÿ‡บ๐Ÿ‡ฆ", + ":flag_ug:": "๐Ÿ‡บ๐Ÿ‡ฌ", + ":flag_um:": "๐Ÿ‡บ๐Ÿ‡ฒ", + ":flag_us:": "๐Ÿ‡บ๐Ÿ‡ธ", + ":flag_uy:": "๐Ÿ‡บ๐Ÿ‡พ", + ":flag_uz:": "๐Ÿ‡บ๐Ÿ‡ฟ", + ":flag_va:": "๐Ÿ‡ป๐Ÿ‡ฆ", + ":flag_vc:": "๐Ÿ‡ป๐Ÿ‡จ", + ":flag_ve:": "๐Ÿ‡ป๐Ÿ‡ช", + ":flag_vg:": "๐Ÿ‡ป๐Ÿ‡ฌ", + ":flag_vi:": "๐Ÿ‡ป๐Ÿ‡ฎ", + ":flag_vn:": "๐Ÿ‡ป๐Ÿ‡ณ", + ":flag_vu:": "๐Ÿ‡ป๐Ÿ‡บ", + ":flag_wf:": "๐Ÿ‡ผ๐Ÿ‡ซ", + ":flag_white:": "๐Ÿณ๏ธ", + ":flag_ws:": "๐Ÿ‡ผ๐Ÿ‡ธ", + ":flag_xk:": "๐Ÿ‡ฝ๐Ÿ‡ฐ", + ":flag_ye:": "๐Ÿ‡พ๐Ÿ‡ช", + ":flag_yt:": "๐Ÿ‡พ๐Ÿ‡น", + ":flag_za:": "๐Ÿ‡ฟ๐Ÿ‡ฆ", + ":flag_zm:": "๐Ÿ‡ฟ๐Ÿ‡ฒ", + ":flag_zw:": "๐Ÿ‡ฟ๐Ÿ‡ผ", + ":flags:": "๐ŸŽ", + ":flame:": "๐Ÿ”ฅ", + ":flamingo:": "๐Ÿฆฉ", + ":flan:": "๐Ÿฎ", + ":flashlight:": "๐Ÿ”ฆ", + ":flatbread:": "๐Ÿซ“", + ":fleur-de-lis:": "โšœ๏ธ", + ":fleur_de_lis:": "โšœ๏ธ", + ":flight_arrival:": "๐Ÿ›ฌ", + ":flight_departure:": "๐Ÿ›ซ", + ":floppy_disk:": "๐Ÿ’พ", + ":flower_playing_cards:": "๐ŸŽด", + ":flushed:": "๐Ÿ˜ณ", + ":fly:": "๐Ÿชฐ", + ":flying_disc:": "๐Ÿฅ", + ":flying_saucer:": "๐Ÿ›ธ", + ":fm:": "๐Ÿ‡ซ๐Ÿ‡ฒ", + ":fo:": "๐Ÿ‡ซ๐Ÿ‡ด", + ":fog:": "๐ŸŒซ๏ธ", + ":foggy:": "๐ŸŒ", + ":fondue:": "๐Ÿซ•", + ":foot:": "๐Ÿฆถ", + ":foot_dark_skin_tone:": "๐Ÿฆถ๐Ÿฟ", + ":foot_light_skin_tone:": "๐Ÿฆถ๐Ÿป", + ":foot_medium_dark_skin_tone:": "๐Ÿฆถ๐Ÿพ", + ":foot_medium_light_skin_tone:": "๐Ÿฆถ๐Ÿผ", + ":foot_medium_skin_tone:": "๐Ÿฆถ๐Ÿฝ", + ":foot_tone1:": "๐Ÿฆถ๐Ÿป", + ":foot_tone2:": "๐Ÿฆถ๐Ÿผ", + ":foot_tone3:": "๐Ÿฆถ๐Ÿฝ", + ":foot_tone4:": "๐Ÿฆถ๐Ÿพ", + ":foot_tone5:": "๐Ÿฆถ๐Ÿฟ", + ":football:": "๐Ÿˆ", + ":footprints:": "๐Ÿ‘ฃ", + ":fork_and_knife:": "๐Ÿด", + ":fork_and_knife_with_plate:": "๐Ÿฝ๏ธ", + ":fork_knife_plate:": "๐Ÿฝ๏ธ", + ":fortune_cookie:": "๐Ÿฅ ", + ":fountain:": "โ›ฒ", + ":fountain_pen:": "๐Ÿ–‹", + ":four:": "4๏ธโƒฃ", + ":four_leaf_clover:": "๐Ÿ€", + ":fox:": "๐ŸฆŠ", + ":fox_face:": "๐ŸฆŠ", + ":fr:": "๐Ÿ‡ซ๐Ÿ‡ท", + ":frame_photo:": "๐Ÿ–ผ๏ธ", + ":frame_with_picture:": "๐Ÿ–ผ๏ธ", + ":framed_picture:": "๐Ÿ–ผ", + ":france:": "๐Ÿ‡ซ๐Ÿ‡ท", + ":free:": "๐Ÿ†“", + ":french_bread:": "๐Ÿฅ–", + ":french_guiana:": "๐Ÿ‡ฌ๐Ÿ‡ซ", + ":french_polynesia:": "๐Ÿ‡ต๐Ÿ‡ซ", + ":french_southern_territories:": "๐Ÿ‡น๐Ÿ‡ซ", + ":fried_egg:": "๐Ÿณ", + ":fried_shrimp:": "๐Ÿค", + ":fries:": "๐ŸŸ", + ":frog:": "๐Ÿธ", + ":frowning2:": "โ˜น๏ธ", + ":frowning:": "๐Ÿ˜ฆ", + ":frowning_face:": "โ˜น๏ธ", + ":frowning_man:": "๐Ÿ™โ€โ™‚๏ธ", + ":frowning_woman:": "๐Ÿ™", + ":fuelpump:": "โ›ฝ", + ":full_moon:": "๐ŸŒ•", + ":full_moon_with_face:": "๐ŸŒ", + ":funeral_urn:": "โšฑ๏ธ", + ":ga:": "๐Ÿ‡ฌ๐Ÿ‡ฆ", + ":gabon:": "๐Ÿ‡ฌ๐Ÿ‡ฆ", + ":gambia:": "๐Ÿ‡ฌ๐Ÿ‡ฒ", + ":game_die:": "๐ŸŽฒ", + ":garlic:": "๐Ÿง„", + ":gay_pride_flag:": "๐Ÿณ๏ธโ€๐ŸŒˆ", + ":gb:": "๐Ÿ‡ฌ๐Ÿ‡ง", + ":gd:": "๐Ÿ‡ฌ๐Ÿ‡ฉ", + ":ge:": "๐Ÿ‡ฌ๐Ÿ‡ช", + ":gear:": "โš™๏ธ", + ":gem:": "๐Ÿ’Ž", + ":gemini:": "โ™Š", + ":genie:": "๐Ÿงž", + ":georgia:": "๐Ÿ‡ฌ๐Ÿ‡ช", + ":germany:": "๐Ÿ‡ฉ๐Ÿ‡ช", + ":gf:": "๐Ÿ‡ฌ๐Ÿ‡ซ", + ":gg:": "๐Ÿ‡ฌ๐Ÿ‡ฌ", + ":gh:": "๐Ÿ‡ฌ๐Ÿ‡ญ", + ":ghana:": "๐Ÿ‡ฌ๐Ÿ‡ญ", + ":ghost:": "๐Ÿ‘ป", + ":gi:": "๐Ÿ‡ฌ๐Ÿ‡ฎ", + ":gibraltar:": "๐Ÿ‡ฌ๐Ÿ‡ฎ", + ":gift:": "๐ŸŽ", + ":gift_heart:": "๐Ÿ’", + ":giraffe:": "๐Ÿฆ’", + ":girl:": "๐Ÿ‘ง", + ":girl_tone1:": "๐Ÿ‘ง๐Ÿป", + ":girl_tone2:": "๐Ÿ‘ง๐Ÿผ", + ":girl_tone3:": "๐Ÿ‘ง๐Ÿฝ", + ":girl_tone4:": "๐Ÿ‘ง๐Ÿพ", + ":girl_tone5:": "๐Ÿ‘ง๐Ÿฟ", + ":gl:": "๐Ÿ‡ฌ๐Ÿ‡ฑ", + ":glass_of_milk:": "๐Ÿฅ›", + ":globe_with_meridians:": "๐ŸŒ", + ":gloves:": "๐Ÿงค", + ":gm:": "๐Ÿ‡ฌ๐Ÿ‡ฒ", + ":gn:": "๐Ÿ‡ฌ๐Ÿ‡ณ", + ":goal:": "๐Ÿฅ…", + ":goal_net:": "๐Ÿฅ…", + ":goat:": "๐Ÿ", + ":goggles:": "๐Ÿฅฝ", + ":golf:": "โ›ณ", + ":golfer:": "๐ŸŒ", + ":golfing_man:": "๐ŸŒ๏ธ", + ":golfing_woman:": "๐ŸŒ๏ธโ€โ™€๏ธ", + ":gorilla:": "๐Ÿฆ", + ":gp:": "๐Ÿ‡ฌ๐Ÿ‡ต", + ":gq:": "๐Ÿ‡ฌ๐Ÿ‡ถ", + ":gr:": "๐Ÿ‡ฌ๐Ÿ‡ท", + ":grandma:": "๐Ÿ‘ต", + ":grandma_tone1:": "๐Ÿ‘ต๐Ÿป", + ":grandma_tone2:": "๐Ÿ‘ต๐Ÿผ", + ":grandma_tone3:": "๐Ÿ‘ต๐Ÿฝ", + ":grandma_tone4:": "๐Ÿ‘ต๐Ÿพ", + ":grandma_tone5:": "๐Ÿ‘ต๐Ÿฟ", + ":grapes:": "๐Ÿ‡", + ":great_britain:": "๐Ÿ‡ฌ๐Ÿ‡ง", + ":greece:": "๐Ÿ‡ฌ๐Ÿ‡ท", + ":green_apple:": "๐Ÿ", + ":green_book:": "๐Ÿ“—", + ":green_circle:": "๐ŸŸข", + ":green_heart:": "๐Ÿ’š", + ":green_salad:": "๐Ÿฅ—", + ":green_square:": "๐ŸŸฉ", + ":greenland:": "๐Ÿ‡ฌ๐Ÿ‡ฑ", + ":grenada:": "๐Ÿ‡ฌ๐Ÿ‡ฉ", + ":grey_exclamation:": "โ•", + ":grey_question:": "โ”", + ":grimacing:": "๐Ÿ˜ฌ", + ":grin:": "๐Ÿ˜", + ":grinning:": "๐Ÿ˜€", + ":gs:": "๐Ÿ‡ฌ๐Ÿ‡ธ", + ":gt:": "๐Ÿ‡ฌ๐Ÿ‡น", + ":gu:": "๐Ÿ‡ฌ๐Ÿ‡บ", + ":guadeloupe:": "๐Ÿ‡ฌ๐Ÿ‡ต", + ":guam:": "๐Ÿ‡ฌ๐Ÿ‡บ", + ":guard:": "๐Ÿ’‚", + ":guard_tone1:": "๐Ÿ’‚๐Ÿป", + ":guard_tone2:": "๐Ÿ’‚๐Ÿผ", + ":guard_tone3:": "๐Ÿ’‚๐Ÿฝ", + ":guard_tone4:": "๐Ÿ’‚๐Ÿพ", + ":guard_tone5:": "๐Ÿ’‚๐Ÿฟ", + ":guardsman:": "๐Ÿ’‚", + ":guardsman_tone1:": "๐Ÿ’‚๐Ÿป", + ":guardsman_tone2:": "๐Ÿ’‚๐Ÿผ", + ":guardsman_tone3:": "๐Ÿ’‚๐Ÿฝ", + ":guardsman_tone4:": "๐Ÿ’‚๐Ÿพ", + ":guardsman_tone5:": "๐Ÿ’‚๐Ÿฟ", + ":guardswoman:": "๐Ÿ’‚โ€โ™€๏ธ", + ":guatemala:": "๐Ÿ‡ฌ๐Ÿ‡น", + ":guernsey:": "๐Ÿ‡ฌ๐Ÿ‡ฌ", + ":guide_dog:": "๐Ÿฆฎ", + ":guinea:": "๐Ÿ‡ฌ๐Ÿ‡ณ", + ":guinea_bissau:": "๐Ÿ‡ฌ๐Ÿ‡ผ", + ":guitar:": "๐ŸŽธ", + ":gun:": "๐Ÿ”ซ", + ":guyana:": "๐Ÿ‡ฌ๐Ÿ‡พ", + ":gw:": "๐Ÿ‡ฌ๐Ÿ‡ผ", + ":gy:": "๐Ÿ‡ฌ๐Ÿ‡พ", + ":haircut:": "๐Ÿ’‡", + ":haircut_man:": "๐Ÿ’‡โ€โ™‚๏ธ", + ":haircut_tone1:": "๐Ÿ’‡๐Ÿป", + ":haircut_tone2:": "๐Ÿ’‡๐Ÿผ", + ":haircut_tone3:": "๐Ÿ’‡๐Ÿฝ", + ":haircut_tone4:": "๐Ÿ’‡๐Ÿพ", + ":haircut_tone5:": "๐Ÿ’‡๐Ÿฟ", + ":haircut_woman:": "๐Ÿ’‡", + ":haiti:": "๐Ÿ‡ญ๐Ÿ‡น", + ":hamburger:": "๐Ÿ”", + ":hammer:": "๐Ÿ”จ", + ":hammer_and_pick:": "โš’๏ธ", + ":hammer_and_wrench:": "๐Ÿ› ๏ธ", + ":hammer_pick:": "โš’๏ธ", + ":hamster:": "๐Ÿน", + ":hand:": "โœ‹", + ":hand_splayed:": "๐Ÿ–", + ":hand_splayed_tone1:": "๐Ÿ–๐Ÿป", + ":hand_splayed_tone2:": "๐Ÿ–๐Ÿผ", + ":hand_splayed_tone3:": "๐Ÿ–๐Ÿฝ", + ":hand_splayed_tone4:": "๐Ÿ–๐Ÿพ", + ":hand_splayed_tone5:": "๐Ÿ–๐Ÿฟ", + ":hand_with_index_and_middle_finger_crossed:": "๐Ÿคž", + ":hand_with_index_and_middle_fingers_crossed_tone1:": "๐Ÿคž๐Ÿป", + ":hand_with_index_and_middle_fingers_crossed_tone2:": "๐Ÿคž๐Ÿผ", + ":hand_with_index_and_middle_fingers_crossed_tone3:": "๐Ÿคž๐Ÿฝ", + ":hand_with_index_and_middle_fingers_crossed_tone4:": "๐Ÿคž๐Ÿพ", + ":hand_with_index_and_middle_fingers_crossed_tone5:": "๐Ÿคž๐Ÿฟ", + ":handbag:": "๐Ÿ‘œ", + ":handball:": "๐Ÿคพ", + ":handball_tone1:": "๐Ÿคพ๐Ÿป", + ":handball_tone2:": "๐Ÿคพ๐Ÿผ", + ":handball_tone3:": "๐Ÿคพ๐Ÿฝ", + ":handball_tone4:": "๐Ÿคพ๐Ÿพ", + ":handball_tone5:": "๐Ÿคพ๐Ÿฟ", + ":handshake:": "๐Ÿค", + ":handshake_tone1:": "๐Ÿค๐Ÿป", + ":handshake_tone2:": "๐Ÿค๐Ÿผ", + ":handshake_tone3:": "๐Ÿค๐Ÿฝ", + ":handshake_tone4:": "๐Ÿค๐Ÿพ", + ":handshake_tone5:": "๐Ÿค๐Ÿฟ", + ":hankey:": "๐Ÿ’ฉ", + ":hash:": "#๏ธโƒฃ", + ":hatched_chick:": "๐Ÿฅ", + ":hatching_chick:": "๐Ÿฃ", + ":head_bandage:": "๐Ÿค•", + ":headphones:": "๐ŸŽง", + ":headstone:": "๐Ÿชฆ", + ":health_worker:": "๐Ÿง‘โ€โš•๏ธ", + ":health_worker_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โš•๏ธ", + ":health_worker_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€โš•๏ธ", + ":health_worker_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€โš•๏ธ", + ":health_worker_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€โš•๏ธ", + ":health_worker_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โš•๏ธ", + ":health_worker_tone1:": "๐Ÿง‘๐Ÿปโ€โš•๏ธ", + ":health_worker_tone2:": "๐Ÿง‘๐Ÿผโ€โš•๏ธ", + ":health_worker_tone3:": "๐Ÿง‘๐Ÿฝโ€โš•๏ธ", + ":health_worker_tone4:": "๐Ÿง‘๐Ÿพโ€โš•๏ธ", + ":health_worker_tone5:": "๐Ÿง‘๐Ÿฟโ€โš•๏ธ", + ":hear_no_evil:": "๐Ÿ™‰", + ":heart:": "โค๏ธ", + ":heart_decoration:": "๐Ÿ’Ÿ", + ":heart_exclamation:": "โฃ๏ธ", + ":heart_eyes:": "๐Ÿ˜", + ":heart_eyes_cat:": "๐Ÿ˜ป", + ":heart_on_fire:": "โค๏ธโ€๐Ÿ”ฅ", + ":heartbeat:": "๐Ÿ’“", + ":heartpulse:": "๐Ÿ’—", + ":hearts:": "โ™ฅ๏ธ", + ":heavy_check_mark:": "โœ”๏ธ", + ":heavy_division_sign:": "โž—", + ":heavy_dollar_sign:": "๐Ÿ’ฒ", + ":heavy_heart_exclamation:": "โฃ๏ธ", + ":heavy_heart_exclamation_mark_ornament:": "โฃ๏ธ", + ":heavy_minus_sign:": "โž–", + ":heavy_multiplication_x:": "โœ–๏ธ", + ":heavy_plus_sign:": "โž•", + ":hedgehog:": "๐Ÿฆ”", + ":helicopter:": "๐Ÿš", + ":helmet_with_cross:": "โ›‘๏ธ", + ":helmet_with_white_cross:": "โ›‘๏ธ", + ":herb:": "๐ŸŒฟ", + ":hibiscus:": "๐ŸŒบ", + ":high_brightness:": "๐Ÿ”†", + ":high_heel:": "๐Ÿ‘ ", + ":hiking_boot:": "๐Ÿฅพ", + ":hindu_temple:": "๐Ÿ›•", + ":hippopotamus:": "๐Ÿฆ›", + ":hk:": "๐Ÿ‡ญ๐Ÿ‡ฐ", + ":hm:": "๐Ÿ‡ญ๐Ÿ‡ฒ", + ":hn:": "๐Ÿ‡ญ๐Ÿ‡ณ", + ":hocho:": "๐Ÿ”ช", + ":hockey:": "๐Ÿ’", + ":hole:": "๐Ÿ•ณ๏ธ", + ":homes:": "๐Ÿ˜๏ธ", + ":honduras:": "๐Ÿ‡ญ๐Ÿ‡ณ", + ":honey_pot:": "๐Ÿฏ", + ":hong_kong:": "๐Ÿ‡ญ๐Ÿ‡ฐ", + ":hook:": "๐Ÿช", + ":horse:": "๐Ÿด", + ":horse_racing:": "๐Ÿ‡", + ":horse_racing_tone1:": "๐Ÿ‡๐Ÿป", + ":horse_racing_tone2:": "๐Ÿ‡๐Ÿผ", + ":horse_racing_tone3:": "๐Ÿ‡๐Ÿฝ", + ":horse_racing_tone4:": "๐Ÿ‡๐Ÿพ", + ":horse_racing_tone5:": "๐Ÿ‡๐Ÿฟ", + ":hospital:": "๐Ÿฅ", + ":hot_dog:": "๐ŸŒญ", + ":hot_face:": "๐Ÿฅต", + ":hot_pepper:": "๐ŸŒถ๏ธ", + ":hotdog:": "๐ŸŒญ", + ":hotel:": "๐Ÿจ", + ":hotsprings:": "โ™จ๏ธ", + ":hourglass:": "โŒ›", + ":hourglass_flowing_sand:": "โณ", + ":house:": "๐Ÿ ", + ":house_abandoned:": "๐Ÿš๏ธ", + ":house_buildings:": "๐Ÿ˜๏ธ", + ":house_with_garden:": "๐Ÿก", + ":houses:": "๐Ÿ˜", + ":hr:": "๐Ÿ‡ญ๐Ÿ‡ท", + ":ht:": "๐Ÿ‡ญ๐Ÿ‡น", + ":hu:": "๐Ÿ‡ญ๐Ÿ‡บ", + ":hugging:": "๐Ÿค—", + ":hugging_face:": "๐Ÿค—", + ":hugs:": "๐Ÿค—", + ":hungary:": "๐Ÿ‡ญ๐Ÿ‡บ", + ":hushed:": "๐Ÿ˜ฏ", + ":hut:": "๐Ÿ›–", + ":ic:": "๐Ÿ‡ฎ๐Ÿ‡จ", + ":ice_cream:": "๐Ÿจ", + ":ice_cube:": "๐ŸงŠ", + ":ice_hockey:": "๐Ÿ’", + ":ice_skate:": "โ›ธ๏ธ", + ":icecream:": "๐Ÿฆ", + ":iceland:": "๐Ÿ‡ฎ๐Ÿ‡ธ", + ":id:": "๐Ÿ†”", + ":ideograph_advantage:": "๐Ÿ‰", + ":ie:": "๐Ÿ‡ฎ๐Ÿ‡ช", + ":il:": "๐Ÿ‡ฎ๐Ÿ‡ฑ", + ":im:": "๐Ÿ‡ฎ๐Ÿ‡ฒ", + ":imp:": "๐Ÿ‘ฟ", + ":in:": "๐Ÿ‡ฎ๐Ÿ‡ณ", + ":inbox_tray:": "๐Ÿ“ฅ", + ":incoming_envelope:": "๐Ÿ“จ", + ":india:": "๐Ÿ‡ฎ๐Ÿ‡ณ", + ":indonesia:": "๐Ÿ‡ฎ๐Ÿ‡ฉ", + ":infinity:": "โ™พ๏ธ", + ":information_desk_person:": "๐Ÿ’", + ":information_desk_person_tone1:": "๐Ÿ’๐Ÿป", + ":information_desk_person_tone2:": "๐Ÿ’๐Ÿผ", + ":information_desk_person_tone3:": "๐Ÿ’๐Ÿฝ", + ":information_desk_person_tone4:": "๐Ÿ’๐Ÿพ", + ":information_desk_person_tone5:": "๐Ÿ’๐Ÿฟ", + ":information_source:": "โ„น๏ธ", + ":innocent:": "๐Ÿ˜‡", + ":interrobang:": "โ‰๏ธ", + ":io:": "๐Ÿ‡ฎ๐Ÿ‡ด", + ":iphone:": "๐Ÿ“ฑ", + ":iq:": "๐Ÿ‡ฎ๐Ÿ‡ถ", + ":ir:": "๐Ÿ‡ฎ๐Ÿ‡ท", + ":iran:": "๐Ÿ‡ฎ๐Ÿ‡ท", + ":iraq:": "๐Ÿ‡ฎ๐Ÿ‡ถ", + ":ireland:": "๐Ÿ‡ฎ๐Ÿ‡ช", + ":is:": "๐Ÿ‡ฎ๐Ÿ‡ธ", + ":island:": "๐Ÿ๏ธ", + ":isle_of_man:": "๐Ÿ‡ฎ๐Ÿ‡ฒ", + ":israel:": "๐Ÿ‡ฎ๐Ÿ‡ฑ", + ":it:": "๐Ÿ‡ฎ๐Ÿ‡น", + ":italy:": "๐Ÿ‡ฎ๐Ÿ‡น", + ":izakaya_lantern:": "๐Ÿฎ", + ":jack_o_lantern:": "๐ŸŽƒ", + ":jamaica:": "๐Ÿ‡ฏ๐Ÿ‡ฒ", + ":japan:": "๐Ÿ—พ", + ":japanese_castle:": "๐Ÿฏ", + ":japanese_goblin:": "๐Ÿ‘บ", + ":japanese_ogre:": "๐Ÿ‘น", + ":je:": "๐Ÿ‡ฏ๐Ÿ‡ช", + ":jeans:": "๐Ÿ‘–", + ":jersey:": "๐Ÿ‡ฏ๐Ÿ‡ช", + ":jigsaw:": "๐Ÿงฉ", + ":jm:": "๐Ÿ‡ฏ๐Ÿ‡ฒ", + ":jo:": "๐Ÿ‡ฏ๐Ÿ‡ด", + ":jordan:": "๐Ÿ‡ฏ๐Ÿ‡ด", + ":joy:": "๐Ÿ˜‚", + ":joy_cat:": "๐Ÿ˜น", + ":joystick:": "๐Ÿ•น๏ธ", + ":jp:": "๐Ÿ‡ฏ๐Ÿ‡ต", + ":judge:": "๐Ÿง‘โ€โš–๏ธ", + ":judge_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โš–๏ธ", + ":judge_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€โš–๏ธ", + ":judge_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€โš–๏ธ", + ":judge_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€โš–๏ธ", + ":judge_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โš–๏ธ", + ":judge_tone1:": "๐Ÿง‘๐Ÿปโ€โš–๏ธ", + ":judge_tone2:": "๐Ÿง‘๐Ÿผโ€โš–๏ธ", + ":judge_tone3:": "๐Ÿง‘๐Ÿฝโ€โš–๏ธ", + ":judge_tone4:": "๐Ÿง‘๐Ÿพโ€โš–๏ธ", + ":judge_tone5:": "๐Ÿง‘๐Ÿฟโ€โš–๏ธ", + ":juggler:": "๐Ÿคน", + ":juggler_tone1:": "๐Ÿคน๐Ÿป", + ":juggler_tone2:": "๐Ÿคน๐Ÿผ", + ":juggler_tone3:": "๐Ÿคน๐Ÿฝ", + ":juggler_tone4:": "๐Ÿคน๐Ÿพ", + ":juggler_tone5:": "๐Ÿคน๐Ÿฟ", + ":juggling:": "๐Ÿคน", + ":juggling_tone1:": "๐Ÿคน๐Ÿป", + ":juggling_tone2:": "๐Ÿคน๐Ÿผ", + ":juggling_tone3:": "๐Ÿคน๐Ÿฝ", + ":juggling_tone4:": "๐Ÿคน๐Ÿพ", + ":juggling_tone5:": "๐Ÿคน๐Ÿฟ", + ":kaaba:": "๐Ÿ•‹", + ":kangaroo:": "๐Ÿฆ˜", + ":karate_uniform:": "๐Ÿฅ‹", + ":kayak:": "๐Ÿ›ถ", + ":kazakhstan:": "๐Ÿ‡ฐ๐Ÿ‡ฟ", + ":ke:": "๐Ÿ‡ฐ๐Ÿ‡ช", + ":kenya:": "๐Ÿ‡ฐ๐Ÿ‡ช", + ":key2:": "๐Ÿ—๏ธ", + ":key:": "๐Ÿ”‘", + ":keyboard:": "โŒจ๏ธ", + ":keycap_asterisk:": "*๏ธโƒฃ", + ":keycap_ten:": "๐Ÿ”Ÿ", + ":kg:": "๐Ÿ‡ฐ๐Ÿ‡ฌ", + ":kh:": "๐Ÿ‡ฐ๐Ÿ‡ญ", + ":ki:": "๐Ÿ‡ฐ๐Ÿ‡ฎ", + ":kick_scooter:": "๐Ÿ›ด", + ":kimono:": "๐Ÿ‘˜", + ":kiribati:": "๐Ÿ‡ฐ๐Ÿ‡ฎ", + ":kiss:": "๐Ÿ’‹", + ":kiss_dark_skin_tone:": "๐Ÿ’๐Ÿฟ", + ":kiss_light_skin_tone:": "๐Ÿ’๐Ÿป", + ":kiss_man_man_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_dark_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_light_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_light_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_medium_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_tone1:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_tone1_tone2:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_tone1_tone3:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_tone1_tone4:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_tone1_tone5:": "๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_tone2:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_tone2_tone1:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_tone2_tone3:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_tone2_tone4:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_tone2_tone5:": "๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_tone3:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_tone3_tone1:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_tone3_tone2:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_tone3_tone4:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_tone3_tone5:": "๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_tone4:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_man_man_tone4_tone1:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_tone4_tone2:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_tone4_tone3:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_tone4_tone5:": "๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_tone5:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_man_man_tone5_tone1:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_man_man_tone5_tone2:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_man_man_tone5_tone3:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_man_man_tone5_tone4:": "๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_medium_dark_skin_tone:": "๐Ÿ’๐Ÿพ", + ":kiss_medium_light_skin_tone:": "๐Ÿ’๐Ÿผ", + ":kiss_medium_skin_tone:": "๐Ÿ’๐Ÿฝ", + ":kiss_mm:": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + ":kiss_person_person_dark_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_dark_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_dark_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_light_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_light_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_light_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_light_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_medium_dark_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_medium_light_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_medium_light_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_medium_light_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_medium_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_medium_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_medium_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_tone1_tone2:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_tone1_tone3:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_tone1_tone4:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_tone1_tone5:": "๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_tone2_tone1:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_tone2_tone3:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_tone2_tone4:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_tone2_tone5:": "๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_tone3_tone1:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_tone3_tone2:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_tone3_tone4:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_person_person_tone3_tone5:": "๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_tone4_tone1:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_tone4_tone2:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_tone4_tone3:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_tone4_tone5:": "๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ", + ":kiss_person_person_tone5_tone1:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป", + ":kiss_person_person_tone5_tone2:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ", + ":kiss_person_person_tone5_tone3:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ", + ":kiss_person_person_tone5_tone4:": "๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ", + ":kiss_tone1:": "๐Ÿ’๐Ÿป", + ":kiss_tone2:": "๐Ÿ’๐Ÿผ", + ":kiss_tone3:": "๐Ÿ’๐Ÿฝ", + ":kiss_tone4:": "๐Ÿ’๐Ÿพ", + ":kiss_tone5:": "๐Ÿ’๐Ÿฟ", + ":kiss_woman_man:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + ":kiss_woman_man_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_medium_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_tone1_tone2:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_tone1_tone3:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_tone1_tone4:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_tone1_tone5:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_tone2_tone1:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_tone2_tone3:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_tone2_tone4:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_tone2_tone5:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_tone3_tone1:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_tone3_tone2:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_tone3_tone4:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_tone3_tone5:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_man_tone4_tone1:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_tone4_tone2:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_tone4_tone3:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_tone4_tone5:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ", + ":kiss_woman_man_tone5_tone1:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป", + ":kiss_woman_man_tone5_tone2:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ", + ":kiss_woman_man_tone5_tone3:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ", + ":kiss_woman_man_tone5_tone4:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ", + ":kiss_woman_woman_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_medium_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_tone1_tone2:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_tone1_tone3:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_tone1_tone4:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_tone1_tone5:": "๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_tone2_tone1:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_tone2_tone3:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_tone2_tone4:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_tone2_tone5:": "๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_tone3_tone1:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_tone3_tone2:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_tone3_tone4:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_tone3_tone5:": "๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_woman_woman_tone4_tone1:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_tone4_tone2:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_tone4_tone3:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_tone4_tone5:": "๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ", + ":kiss_woman_woman_tone5_tone1:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", + ":kiss_woman_woman_tone5_tone2:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ", + ":kiss_woman_woman_tone5_tone3:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ", + ":kiss_woman_woman_tone5_tone4:": "๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ", + ":kiss_ww:": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + ":kissing:": "๐Ÿ˜—", + ":kissing_cat:": "๐Ÿ˜ฝ", + ":kissing_closed_eyes:": "๐Ÿ˜š", + ":kissing_heart:": "๐Ÿ˜˜", + ":kissing_smiling_eyes:": "๐Ÿ˜™", + ":kite:": "๐Ÿช", + ":kiwi:": "๐Ÿฅ", + ":kiwi_fruit:": "๐Ÿฅ", + ":kiwifruit:": "๐Ÿฅ", + ":km:": "๐Ÿ‡ฐ๐Ÿ‡ฒ", + ":kn:": "๐Ÿ‡ฐ๐Ÿ‡ณ", + ":knife:": "๐Ÿ”ช", + ":knot:": "๐Ÿชข", + ":koala:": "๐Ÿจ", + ":koko:": "๐Ÿˆ", + ":korea:": "๐Ÿ‡ฐ๐Ÿ‡ท", + ":kosovo:": "๐Ÿ‡ฝ๐Ÿ‡ฐ", + ":kp:": "๐Ÿ‡ฐ๐Ÿ‡ต", + ":kr:": "๐Ÿ‡ฐ๐Ÿ‡ท", + ":kuwait:": "๐Ÿ‡ฐ๐Ÿ‡ผ", + ":kw:": "๐Ÿ‡ฐ๐Ÿ‡ผ", + ":ky:": "๐Ÿ‡ฐ๐Ÿ‡พ", + ":kyrgyzstan:": "๐Ÿ‡ฐ๐Ÿ‡ฌ", + ":kz:": "๐Ÿ‡ฐ๐Ÿ‡ฟ", + ":la:": "๐Ÿ‡ฑ๐Ÿ‡ฆ", + ":lab_coat:": "๐Ÿฅผ", + ":label:": "๐Ÿท๏ธ", + ":lacrosse:": "๐Ÿฅ", + ":ladder:": "๐Ÿชœ", + ":lady_beetle:": "๐Ÿž", + ":laos:": "๐Ÿ‡ฑ๐Ÿ‡ฆ", + ":large_blue_circle:": "๐Ÿ”ต", + ":large_blue_diamond:": "๐Ÿ”ท", + ":large_orange_diamond:": "๐Ÿ”ถ", + ":last_quarter_moon:": "๐ŸŒ—", + ":last_quarter_moon_with_face:": "๐ŸŒœ", + ":latin_cross:": "โœ๏ธ", + ":latvia:": "๐Ÿ‡ฑ๐Ÿ‡ป", + ":laughing:": "๐Ÿ˜†", + ":lb:": "๐Ÿ‡ฑ๐Ÿ‡ง", + ":lc:": "๐Ÿ‡ฑ๐Ÿ‡จ", + ":leafy_green:": "๐Ÿฅฌ", + ":leaves:": "๐Ÿƒ", + ":lebanon:": "๐Ÿ‡ฑ๐Ÿ‡ง", + ":ledger:": "๐Ÿ“’", + ":left_facing_fist:": "๐Ÿค›", + ":left_facing_fist_tone1:": "๐Ÿค›๐Ÿป", + ":left_facing_fist_tone2:": "๐Ÿค›๐Ÿผ", + ":left_facing_fist_tone3:": "๐Ÿค›๐Ÿฝ", + ":left_facing_fist_tone4:": "๐Ÿค›๐Ÿพ", + ":left_facing_fist_tone5:": "๐Ÿค›๐Ÿฟ", + ":left_fist:": "๐Ÿค›", + ":left_fist_tone1:": "๐Ÿค›๐Ÿป", + ":left_fist_tone2:": "๐Ÿค›๐Ÿผ", + ":left_fist_tone3:": "๐Ÿค›๐Ÿฝ", + ":left_fist_tone4:": "๐Ÿค›๐Ÿพ", + ":left_fist_tone5:": "๐Ÿค›๐Ÿฟ", + ":left_luggage:": "๐Ÿ›…", + ":left_right_arrow:": "โ†”๏ธ", + ":left_speech_bubble:": "๐Ÿ—จ๏ธ", + ":leftwards_arrow_with_hook:": "โ†ฉ๏ธ", + ":leg:": "๐Ÿฆต", + ":leg_dark_skin_tone:": "๐Ÿฆต๐Ÿฟ", + ":leg_light_skin_tone:": "๐Ÿฆต๐Ÿป", + ":leg_medium_dark_skin_tone:": "๐Ÿฆต๐Ÿพ", + ":leg_medium_light_skin_tone:": "๐Ÿฆต๐Ÿผ", + ":leg_medium_skin_tone:": "๐Ÿฆต๐Ÿฝ", + ":leg_tone1:": "๐Ÿฆต๐Ÿป", + ":leg_tone2:": "๐Ÿฆต๐Ÿผ", + ":leg_tone3:": "๐Ÿฆต๐Ÿฝ", + ":leg_tone4:": "๐Ÿฆต๐Ÿพ", + ":leg_tone5:": "๐Ÿฆต๐Ÿฟ", + ":lemon:": "๐Ÿ‹", + ":leo:": "โ™Œ", + ":leopard:": "๐Ÿ†", + ":lesotho:": "๐Ÿ‡ฑ๐Ÿ‡ธ", + ":level_slider:": "๐ŸŽš๏ธ", + ":levitate:": "๐Ÿ•ด๏ธ", + ":levitate_tone1:": "๐Ÿ•ด๐Ÿป", + ":levitate_tone2:": "๐Ÿ•ด๐Ÿผ", + ":levitate_tone3:": "๐Ÿ•ด๐Ÿฝ", + ":levitate_tone4:": "๐Ÿ•ด๐Ÿพ", + ":levitate_tone5:": "๐Ÿ•ด๐Ÿฟ", + ":li:": "๐Ÿ‡ฑ๐Ÿ‡ฎ", + ":liar:": "๐Ÿคฅ", + ":liberia:": "๐Ÿ‡ฑ๐Ÿ‡ท", + ":libra:": "โ™Ž", + ":libya:": "๐Ÿ‡ฑ๐Ÿ‡พ", + ":liechtenstein:": "๐Ÿ‡ฑ๐Ÿ‡ฎ", + ":lifter:": "๐Ÿ‹", + ":lifter_tone1:": "๐Ÿ‹๐Ÿป", + ":lifter_tone2:": "๐Ÿ‹๐Ÿผ", + ":lifter_tone3:": "๐Ÿ‹๐Ÿฝ", + ":lifter_tone4:": "๐Ÿ‹๐Ÿพ", + ":lifter_tone5:": "๐Ÿ‹๐Ÿฟ", + ":light_rail:": "๐Ÿšˆ", + ":link:": "๐Ÿ”—", + ":linked_paperclips:": "๐Ÿ–‡๏ธ", + ":lion:": "๐Ÿฆ", + ":lion_face:": "๐Ÿฆ", + ":lips:": "๐Ÿ‘„", + ":lipstick:": "๐Ÿ’„", + ":lithuania:": "๐Ÿ‡ฑ๐Ÿ‡น", + ":lizard:": "๐ŸฆŽ", + ":lk:": "๐Ÿ‡ฑ๐Ÿ‡ฐ", + ":llama:": "๐Ÿฆ™", + ":lobster:": "๐Ÿฆž", + ":lock:": "๐Ÿ”’", + ":lock_with_ink_pen:": "๐Ÿ”", + ":lollipop:": "๐Ÿญ", + ":long_drum:": "๐Ÿช˜", + ":loop:": "โžฟ", + ":loud_sound:": "๐Ÿ”Š", + ":loudspeaker:": "๐Ÿ“ข", + ":love_hotel:": "๐Ÿฉ", + ":love_letter:": "๐Ÿ’Œ", + ":love_you_gesture:": "๐ŸคŸ", + ":love_you_gesture_dark_skin_tone:": "๐ŸคŸ๐Ÿฟ", + ":love_you_gesture_light_skin_tone:": "๐ŸคŸ๐Ÿป", + ":love_you_gesture_medium_dark_skin_tone:": "๐ŸคŸ๐Ÿพ", + ":love_you_gesture_medium_light_skin_tone:": "๐ŸคŸ๐Ÿผ", + ":love_you_gesture_medium_skin_tone:": "๐ŸคŸ๐Ÿฝ", + ":love_you_gesture_tone1:": "๐ŸคŸ๐Ÿป", + ":love_you_gesture_tone2:": "๐ŸคŸ๐Ÿผ", + ":love_you_gesture_tone3:": "๐ŸคŸ๐Ÿฝ", + ":love_you_gesture_tone4:": "๐ŸคŸ๐Ÿพ", + ":love_you_gesture_tone5:": "๐ŸคŸ๐Ÿฟ", + ":low_brightness:": "๐Ÿ”…", + ":lower_left_ballpoint_pen:": "๐Ÿ–Š๏ธ", + ":lower_left_crayon:": "๐Ÿ–๏ธ", + ":lower_left_fountain_pen:": "๐Ÿ–‹๏ธ", + ":lower_left_paintbrush:": "๐Ÿ–Œ๏ธ", + ":lr:": "๐Ÿ‡ฑ๐Ÿ‡ท", + ":ls:": "๐Ÿ‡ฑ๐Ÿ‡ธ", + ":lt:": "๐Ÿ‡ฑ๐Ÿ‡น", + ":lu:": "๐Ÿ‡ฑ๐Ÿ‡บ", + ":luggage:": "๐Ÿงณ", + ":lungs:": "๐Ÿซ", + ":luxembourg:": "๐Ÿ‡ฑ๐Ÿ‡บ", + ":lv:": "๐Ÿ‡ฑ๐Ÿ‡ป", + ":ly:": "๐Ÿ‡ฑ๐Ÿ‡พ", + ":lying_face:": "๐Ÿคฅ", + ":m:": "โ“‚๏ธ", + ":ma:": "๐Ÿ‡ฒ๐Ÿ‡ฆ", + ":macau:": "๐Ÿ‡ฒ๐Ÿ‡ด", + ":macedonia:": "๐Ÿ‡ฒ๐Ÿ‡ฐ", + ":madagascar:": "๐Ÿ‡ฒ๐Ÿ‡ฌ", + ":mag:": "๐Ÿ”", + ":mag_right:": "๐Ÿ”Ž", + ":mage:": "๐Ÿง™", + ":mage_dark_skin_tone:": "๐Ÿง™๐Ÿฟ", + ":mage_light_skin_tone:": "๐Ÿง™๐Ÿป", + ":mage_medium_dark_skin_tone:": "๐Ÿง™๐Ÿพ", + ":mage_medium_light_skin_tone:": "๐Ÿง™๐Ÿผ", + ":mage_medium_skin_tone:": "๐Ÿง™๐Ÿฝ", + ":mage_tone1:": "๐Ÿง™๐Ÿป", + ":mage_tone2:": "๐Ÿง™๐Ÿผ", + ":mage_tone3:": "๐Ÿง™๐Ÿฝ", + ":mage_tone4:": "๐Ÿง™๐Ÿพ", + ":mage_tone5:": "๐Ÿง™๐Ÿฟ", + ":magic_wand:": "๐Ÿช„", + ":magnet:": "๐Ÿงฒ", + ":mahjong:": "๐Ÿ€„", + ":mailbox:": "๐Ÿ“ซ", + ":mailbox_closed:": "๐Ÿ“ช", + ":mailbox_with_mail:": "๐Ÿ“ฌ", + ":mailbox_with_no_mail:": "๐Ÿ“ญ", + ":malawi:": "๐Ÿ‡ฒ๐Ÿ‡ผ", + ":malaysia:": "๐Ÿ‡ฒ๐Ÿ‡พ", + ":maldives:": "๐Ÿ‡ฒ๐Ÿ‡ป", + ":male_dancer:": "๐Ÿ•บ", + ":male_dancer_tone1:": "๐Ÿ•บ๐Ÿป", + ":male_dancer_tone2:": "๐Ÿ•บ๐Ÿผ", + ":male_dancer_tone3:": "๐Ÿ•บ๐Ÿฝ", + ":male_dancer_tone4:": "๐Ÿ•บ๐Ÿพ", + ":male_dancer_tone5:": "๐Ÿ•บ๐Ÿฟ", + ":male_detective:": "๐Ÿ•ต๏ธ", + ":male_sign:": "โ™‚๏ธ", + ":mali:": "๐Ÿ‡ฒ๐Ÿ‡ฑ", + ":malta:": "๐Ÿ‡ฒ๐Ÿ‡น", + ":mammoth:": "๐Ÿฆฃ", + ":man:": "๐Ÿ‘จ", + ":man_artist:": "๐Ÿ‘จโ€๐ŸŽจ", + ":man_artist_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŽจ", + ":man_artist_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŽจ", + ":man_artist_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŽจ", + ":man_artist_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŽจ", + ":man_artist_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŽจ", + ":man_artist_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŽจ", + ":man_artist_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŽจ", + ":man_artist_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŽจ", + ":man_artist_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŽจ", + ":man_artist_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŽจ", + ":man_astronaut:": "๐Ÿ‘จโ€๐Ÿš€", + ":man_astronaut_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿš€", + ":man_astronaut_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿš€", + ":man_astronaut_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿš€", + ":man_astronaut_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿš€", + ":man_astronaut_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿš€", + ":man_astronaut_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿš€", + ":man_astronaut_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿš€", + ":man_astronaut_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿš€", + ":man_astronaut_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿš€", + ":man_astronaut_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿš€", + ":man_bald:": "๐Ÿ‘จโ€๐Ÿฆฒ", + ":man_bald_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฒ", + ":man_bald_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฒ", + ":man_bald_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฒ", + ":man_bald_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฒ", + ":man_bald_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฒ", + ":man_bald_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฒ", + ":man_bald_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฒ", + ":man_bald_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฒ", + ":man_bald_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฒ", + ":man_bald_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฒ", + ":man_beard:": "๐Ÿง”โ€โ™‚๏ธ", + ":man_biking:": "๐Ÿšดโ€โ™‚๏ธ", + ":man_biking_dark_skin_tone:": "๐Ÿšด๐Ÿฟโ€โ™‚๏ธ", + ":man_biking_light_skin_tone:": "๐Ÿšด๐Ÿปโ€โ™‚๏ธ", + ":man_biking_medium_dark_skin_tone:": "๐Ÿšด๐Ÿพโ€โ™‚๏ธ", + ":man_biking_medium_light_skin_tone:": "๐Ÿšด๐Ÿผโ€โ™‚๏ธ", + ":man_biking_medium_skin_tone:": "๐Ÿšด๐Ÿฝโ€โ™‚๏ธ", + ":man_biking_tone1:": "๐Ÿšด๐Ÿปโ€โ™‚๏ธ", + ":man_biking_tone2:": "๐Ÿšด๐Ÿผโ€โ™‚๏ธ", + ":man_biking_tone3:": "๐Ÿšด๐Ÿฝโ€โ™‚๏ธ", + ":man_biking_tone4:": "๐Ÿšด๐Ÿพโ€โ™‚๏ธ", + ":man_biking_tone5:": "๐Ÿšด๐Ÿฟโ€โ™‚๏ธ", + ":man_bouncing_ball:": "โ›น๏ธโ€โ™‚๏ธ", + ":man_bouncing_ball_dark_skin_tone:": "โ›น๐Ÿฟโ€โ™‚๏ธ", + ":man_bouncing_ball_light_skin_tone:": "โ›น๐Ÿปโ€โ™‚๏ธ", + ":man_bouncing_ball_medium_dark_skin_tone:": "โ›น๐Ÿพโ€โ™‚๏ธ", + ":man_bouncing_ball_medium_light_skin_tone:": "โ›น๐Ÿผโ€โ™‚๏ธ", + ":man_bouncing_ball_medium_skin_tone:": "โ›น๐Ÿฝโ€โ™‚๏ธ", + ":man_bouncing_ball_tone1:": "โ›น๐Ÿปโ€โ™‚๏ธ", + ":man_bouncing_ball_tone2:": "โ›น๐Ÿผโ€โ™‚๏ธ", + ":man_bouncing_ball_tone3:": "โ›น๐Ÿฝโ€โ™‚๏ธ", + ":man_bouncing_ball_tone4:": "โ›น๐Ÿพโ€โ™‚๏ธ", + ":man_bouncing_ball_tone5:": "โ›น๐Ÿฟโ€โ™‚๏ธ", + ":man_bowing:": "๐Ÿ™‡โ€โ™‚๏ธ", + ":man_bowing_dark_skin_tone:": "๐Ÿ™‡๐Ÿฟโ€โ™‚๏ธ", + ":man_bowing_light_skin_tone:": "๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ", + ":man_bowing_medium_dark_skin_tone:": "๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ", + ":man_bowing_medium_light_skin_tone:": "๐Ÿ™‡๐Ÿผโ€โ™‚๏ธ", + ":man_bowing_medium_skin_tone:": "๐Ÿ™‡๐Ÿฝโ€โ™‚๏ธ", + ":man_bowing_tone1:": "๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ", + ":man_bowing_tone2:": "๐Ÿ™‡๐Ÿผโ€โ™‚๏ธ", + ":man_bowing_tone3:": "๐Ÿ™‡๐Ÿฝโ€โ™‚๏ธ", + ":man_bowing_tone4:": "๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ", + ":man_bowing_tone5:": "๐Ÿ™‡๐Ÿฟโ€โ™‚๏ธ", + ":man_cartwheeling:": "๐Ÿคธโ€โ™‚๏ธ", + ":man_cartwheeling_dark_skin_tone:": "๐Ÿคธ๐Ÿฟโ€โ™‚๏ธ", + ":man_cartwheeling_light_skin_tone:": "๐Ÿคธ๐Ÿปโ€โ™‚๏ธ", + ":man_cartwheeling_medium_dark_skin_tone:": "๐Ÿคธ๐Ÿพโ€โ™‚๏ธ", + ":man_cartwheeling_medium_light_skin_tone:": "๐Ÿคธ๐Ÿผโ€โ™‚๏ธ", + ":man_cartwheeling_medium_skin_tone:": "๐Ÿคธ๐Ÿฝโ€โ™‚๏ธ", + ":man_cartwheeling_tone1:": "๐Ÿคธ๐Ÿปโ€โ™‚๏ธ", + ":man_cartwheeling_tone2:": "๐Ÿคธ๐Ÿผโ€โ™‚๏ธ", + ":man_cartwheeling_tone3:": "๐Ÿคธ๐Ÿฝโ€โ™‚๏ธ", + ":man_cartwheeling_tone4:": "๐Ÿคธ๐Ÿพโ€โ™‚๏ธ", + ":man_cartwheeling_tone5:": "๐Ÿคธ๐Ÿฟโ€โ™‚๏ธ", + ":man_climbing:": "๐Ÿง—โ€โ™‚๏ธ", + ":man_climbing_dark_skin_tone:": "๐Ÿง—๐Ÿฟโ€โ™‚๏ธ", + ":man_climbing_light_skin_tone:": "๐Ÿง—๐Ÿปโ€โ™‚๏ธ", + ":man_climbing_medium_dark_skin_tone:": "๐Ÿง—๐Ÿพโ€โ™‚๏ธ", + ":man_climbing_medium_light_skin_tone:": "๐Ÿง—๐Ÿผโ€โ™‚๏ธ", + ":man_climbing_medium_skin_tone:": "๐Ÿง—๐Ÿฝโ€โ™‚๏ธ", + ":man_climbing_tone1:": "๐Ÿง—๐Ÿปโ€โ™‚๏ธ", + ":man_climbing_tone2:": "๐Ÿง—๐Ÿผโ€โ™‚๏ธ", + ":man_climbing_tone3:": "๐Ÿง—๐Ÿฝโ€โ™‚๏ธ", + ":man_climbing_tone4:": "๐Ÿง—๐Ÿพโ€โ™‚๏ธ", + ":man_climbing_tone5:": "๐Ÿง—๐Ÿฟโ€โ™‚๏ธ", + ":man_construction_worker:": "๐Ÿ‘ทโ€โ™‚๏ธ", + ":man_construction_worker_dark_skin_tone:": "๐Ÿ‘ท๐Ÿฟโ€โ™‚๏ธ", + ":man_construction_worker_light_skin_tone:": "๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ", + ":man_construction_worker_medium_dark_skin_tone:": "๐Ÿ‘ท๐Ÿพโ€โ™‚๏ธ", + ":man_construction_worker_medium_light_skin_tone:": "๐Ÿ‘ท๐Ÿผโ€โ™‚๏ธ", + ":man_construction_worker_medium_skin_tone:": "๐Ÿ‘ท๐Ÿฝโ€โ™‚๏ธ", + ":man_construction_worker_tone1:": "๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ", + ":man_construction_worker_tone2:": "๐Ÿ‘ท๐Ÿผโ€โ™‚๏ธ", + ":man_construction_worker_tone3:": "๐Ÿ‘ท๐Ÿฝโ€โ™‚๏ธ", + ":man_construction_worker_tone4:": "๐Ÿ‘ท๐Ÿพโ€โ™‚๏ธ", + ":man_construction_worker_tone5:": "๐Ÿ‘ท๐Ÿฟโ€โ™‚๏ธ", + ":man_cook:": "๐Ÿ‘จโ€๐Ÿณ", + ":man_cook_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿณ", + ":man_cook_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿณ", + ":man_cook_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿณ", + ":man_cook_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿณ", + ":man_cook_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿณ", + ":man_cook_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿณ", + ":man_cook_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿณ", + ":man_cook_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿณ", + ":man_cook_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿณ", + ":man_cook_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿณ", + ":man_curly_haired:": "๐Ÿ‘จโ€๐Ÿฆฑ", + ":man_curly_haired_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฑ", + ":man_curly_haired_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฑ", + ":man_curly_haired_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฑ", + ":man_curly_haired_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฑ", + ":man_curly_haired_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฑ", + ":man_curly_haired_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฑ", + ":man_curly_haired_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฑ", + ":man_curly_haired_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฑ", + ":man_curly_haired_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฑ", + ":man_curly_haired_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฑ", + ":man_dancing:": "๐Ÿ•บ", + ":man_dancing_tone1:": "๐Ÿ•บ๐Ÿป", + ":man_dancing_tone2:": "๐Ÿ•บ๐Ÿผ", + ":man_dancing_tone3:": "๐Ÿ•บ๐Ÿฝ", + ":man_dancing_tone4:": "๐Ÿ•บ๐Ÿพ", + ":man_dancing_tone5:": "๐Ÿ•บ๐Ÿฟ", + ":man_dark_skin_tone_beard:": "๐Ÿง”๐Ÿฟโ€โ™‚๏ธ", + ":man_detective:": "๐Ÿ•ต๏ธโ€โ™‚๏ธ", + ":man_detective_dark_skin_tone:": "๐Ÿ•ต๐Ÿฟโ€โ™‚๏ธ", + ":man_detective_light_skin_tone:": "๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ", + ":man_detective_medium_dark_skin_tone:": "๐Ÿ•ต๐Ÿพโ€โ™‚๏ธ", + ":man_detective_medium_light_skin_tone:": "๐Ÿ•ต๐Ÿผโ€โ™‚๏ธ", + ":man_detective_medium_skin_tone:": "๐Ÿ•ต๐Ÿฝโ€โ™‚๏ธ", + ":man_detective_tone1:": "๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ", + ":man_detective_tone2:": "๐Ÿ•ต๐Ÿผโ€โ™‚๏ธ", + ":man_detective_tone3:": "๐Ÿ•ต๐Ÿฝโ€โ™‚๏ธ", + ":man_detective_tone4:": "๐Ÿ•ต๐Ÿพโ€โ™‚๏ธ", + ":man_detective_tone5:": "๐Ÿ•ต๐Ÿฟโ€โ™‚๏ธ", + ":man_elf:": "๐Ÿงโ€โ™‚๏ธ", + ":man_elf_dark_skin_tone:": "๐Ÿง๐Ÿฟโ€โ™‚๏ธ", + ":man_elf_light_skin_tone:": "๐Ÿง๐Ÿปโ€โ™‚๏ธ", + ":man_elf_medium_dark_skin_tone:": "๐Ÿง๐Ÿพโ€โ™‚๏ธ", + ":man_elf_medium_light_skin_tone:": "๐Ÿง๐Ÿผโ€โ™‚๏ธ", + ":man_elf_medium_skin_tone:": "๐Ÿง๐Ÿฝโ€โ™‚๏ธ", + ":man_elf_tone1:": "๐Ÿง๐Ÿปโ€โ™‚๏ธ", + ":man_elf_tone2:": "๐Ÿง๐Ÿผโ€โ™‚๏ธ", + ":man_elf_tone3:": "๐Ÿง๐Ÿฝโ€โ™‚๏ธ", + ":man_elf_tone4:": "๐Ÿง๐Ÿพโ€โ™‚๏ธ", + ":man_elf_tone5:": "๐Ÿง๐Ÿฟโ€โ™‚๏ธ", + ":man_facepalming:": "๐Ÿคฆโ€โ™‚๏ธ", + ":man_facepalming_dark_skin_tone:": "๐Ÿคฆ๐Ÿฟโ€โ™‚๏ธ", + ":man_facepalming_light_skin_tone:": "๐Ÿคฆ๐Ÿปโ€โ™‚๏ธ", + ":man_facepalming_medium_dark_skin_tone:": "๐Ÿคฆ๐Ÿพโ€โ™‚๏ธ", + ":man_facepalming_medium_light_skin_tone:": "๐Ÿคฆ๐Ÿผโ€โ™‚๏ธ", + ":man_facepalming_medium_skin_tone:": "๐Ÿคฆ๐Ÿฝโ€โ™‚๏ธ", + ":man_facepalming_tone1:": "๐Ÿคฆ๐Ÿปโ€โ™‚๏ธ", + ":man_facepalming_tone2:": "๐Ÿคฆ๐Ÿผโ€โ™‚๏ธ", + ":man_facepalming_tone3:": "๐Ÿคฆ๐Ÿฝโ€โ™‚๏ธ", + ":man_facepalming_tone4:": "๐Ÿคฆ๐Ÿพโ€โ™‚๏ธ", + ":man_facepalming_tone5:": "๐Ÿคฆ๐Ÿฟโ€โ™‚๏ธ", + ":man_factory_worker:": "๐Ÿ‘จโ€๐Ÿญ", + ":man_factory_worker_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿญ", + ":man_factory_worker_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿญ", + ":man_factory_worker_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿญ", + ":man_factory_worker_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿญ", + ":man_factory_worker_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿญ", + ":man_factory_worker_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿญ", + ":man_factory_worker_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿญ", + ":man_factory_worker_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿญ", + ":man_factory_worker_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿญ", + ":man_factory_worker_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿญ", + ":man_fairy:": "๐Ÿงšโ€โ™‚๏ธ", + ":man_fairy_dark_skin_tone:": "๐Ÿงš๐Ÿฟโ€โ™‚๏ธ", + ":man_fairy_light_skin_tone:": "๐Ÿงš๐Ÿปโ€โ™‚๏ธ", + ":man_fairy_medium_dark_skin_tone:": "๐Ÿงš๐Ÿพโ€โ™‚๏ธ", + ":man_fairy_medium_light_skin_tone:": "๐Ÿงš๐Ÿผโ€โ™‚๏ธ", + ":man_fairy_medium_skin_tone:": "๐Ÿงš๐Ÿฝโ€โ™‚๏ธ", + ":man_fairy_tone1:": "๐Ÿงš๐Ÿปโ€โ™‚๏ธ", + ":man_fairy_tone2:": "๐Ÿงš๐Ÿผโ€โ™‚๏ธ", + ":man_fairy_tone3:": "๐Ÿงš๐Ÿฝโ€โ™‚๏ธ", + ":man_fairy_tone4:": "๐Ÿงš๐Ÿพโ€โ™‚๏ธ", + ":man_fairy_tone5:": "๐Ÿงš๐Ÿฟโ€โ™‚๏ธ", + ":man_farmer:": "๐Ÿ‘จโ€๐ŸŒพ", + ":man_farmer_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŒพ", + ":man_farmer_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŒพ", + ":man_farmer_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŒพ", + ":man_farmer_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŒพ", + ":man_farmer_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŒพ", + ":man_farmer_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŒพ", + ":man_farmer_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŒพ", + ":man_farmer_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŒพ", + ":man_farmer_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŒพ", + ":man_farmer_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŒพ", + ":man_feeding_baby:": "๐Ÿ‘จโ€๐Ÿผ", + ":man_feeding_baby_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿผ", + ":man_feeding_baby_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿผ", + ":man_feeding_baby_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿผ", + ":man_feeding_baby_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿผ", + ":man_feeding_baby_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿผ", + ":man_feeding_baby_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿผ", + ":man_feeding_baby_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿผ", + ":man_feeding_baby_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿผ", + ":man_feeding_baby_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿผ", + ":man_feeding_baby_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿผ", + ":man_firefighter:": "๐Ÿ‘จโ€๐Ÿš’", + ":man_firefighter_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿš’", + ":man_firefighter_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿš’", + ":man_firefighter_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿš’", + ":man_firefighter_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿš’", + ":man_firefighter_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿš’", + ":man_firefighter_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿš’", + ":man_firefighter_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿš’", + ":man_firefighter_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿš’", + ":man_firefighter_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿš’", + ":man_firefighter_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿš’", + ":man_frowning:": "๐Ÿ™โ€โ™‚๏ธ", + ":man_frowning_dark_skin_tone:": "๐Ÿ™๐Ÿฟโ€โ™‚๏ธ", + ":man_frowning_light_skin_tone:": "๐Ÿ™๐Ÿปโ€โ™‚๏ธ", + ":man_frowning_medium_dark_skin_tone:": "๐Ÿ™๐Ÿพโ€โ™‚๏ธ", + ":man_frowning_medium_light_skin_tone:": "๐Ÿ™๐Ÿผโ€โ™‚๏ธ", + ":man_frowning_medium_skin_tone:": "๐Ÿ™๐Ÿฝโ€โ™‚๏ธ", + ":man_frowning_tone1:": "๐Ÿ™๐Ÿปโ€โ™‚๏ธ", + ":man_frowning_tone2:": "๐Ÿ™๐Ÿผโ€โ™‚๏ธ", + ":man_frowning_tone3:": "๐Ÿ™๐Ÿฝโ€โ™‚๏ธ", + ":man_frowning_tone4:": "๐Ÿ™๐Ÿพโ€โ™‚๏ธ", + ":man_frowning_tone5:": "๐Ÿ™๐Ÿฟโ€โ™‚๏ธ", + ":man_genie:": "๐Ÿงžโ€โ™‚๏ธ", + ":man_gesturing_no:": "๐Ÿ™…โ€โ™‚๏ธ", + ":man_gesturing_no_dark_skin_tone:": "๐Ÿ™…๐Ÿฟโ€โ™‚๏ธ", + ":man_gesturing_no_light_skin_tone:": "๐Ÿ™…๐Ÿปโ€โ™‚๏ธ", + ":man_gesturing_no_medium_dark_skin_tone:": "๐Ÿ™…๐Ÿพโ€โ™‚๏ธ", + ":man_gesturing_no_medium_light_skin_tone:": "๐Ÿ™…๐Ÿผโ€โ™‚๏ธ", + ":man_gesturing_no_medium_skin_tone:": "๐Ÿ™…๐Ÿฝโ€โ™‚๏ธ", + ":man_gesturing_no_tone1:": "๐Ÿ™…๐Ÿปโ€โ™‚๏ธ", + ":man_gesturing_no_tone2:": "๐Ÿ™…๐Ÿผโ€โ™‚๏ธ", + ":man_gesturing_no_tone3:": "๐Ÿ™…๐Ÿฝโ€โ™‚๏ธ", + ":man_gesturing_no_tone4:": "๐Ÿ™…๐Ÿพโ€โ™‚๏ธ", + ":man_gesturing_no_tone5:": "๐Ÿ™…๐Ÿฟโ€โ™‚๏ธ", + ":man_gesturing_ok:": "๐Ÿ™†โ€โ™‚๏ธ", + ":man_gesturing_ok_dark_skin_tone:": "๐Ÿ™†๐Ÿฟโ€โ™‚๏ธ", + ":man_gesturing_ok_light_skin_tone:": "๐Ÿ™†๐Ÿปโ€โ™‚๏ธ", + ":man_gesturing_ok_medium_dark_skin_tone:": "๐Ÿ™†๐Ÿพโ€โ™‚๏ธ", + ":man_gesturing_ok_medium_light_skin_tone:": "๐Ÿ™†๐Ÿผโ€โ™‚๏ธ", + ":man_gesturing_ok_medium_skin_tone:": "๐Ÿ™†๐Ÿฝโ€โ™‚๏ธ", + ":man_gesturing_ok_tone1:": "๐Ÿ™†๐Ÿปโ€โ™‚๏ธ", + ":man_gesturing_ok_tone2:": "๐Ÿ™†๐Ÿผโ€โ™‚๏ธ", + ":man_gesturing_ok_tone3:": "๐Ÿ™†๐Ÿฝโ€โ™‚๏ธ", + ":man_gesturing_ok_tone4:": "๐Ÿ™†๐Ÿพโ€โ™‚๏ธ", + ":man_gesturing_ok_tone5:": "๐Ÿ™†๐Ÿฟโ€โ™‚๏ธ", + ":man_getting_face_massage:": "๐Ÿ’†โ€โ™‚๏ธ", + ":man_getting_face_massage_dark_skin_tone:": "๐Ÿ’†๐Ÿฟโ€โ™‚๏ธ", + ":man_getting_face_massage_light_skin_tone:": "๐Ÿ’†๐Ÿปโ€โ™‚๏ธ", + ":man_getting_face_massage_medium_dark_skin_tone:": "๐Ÿ’†๐Ÿพโ€โ™‚๏ธ", + ":man_getting_face_massage_medium_light_skin_tone:": "๐Ÿ’†๐Ÿผโ€โ™‚๏ธ", + ":man_getting_face_massage_medium_skin_tone:": "๐Ÿ’†๐Ÿฝโ€โ™‚๏ธ", + ":man_getting_face_massage_tone1:": "๐Ÿ’†๐Ÿปโ€โ™‚๏ธ", + ":man_getting_face_massage_tone2:": "๐Ÿ’†๐Ÿผโ€โ™‚๏ธ", + ":man_getting_face_massage_tone3:": "๐Ÿ’†๐Ÿฝโ€โ™‚๏ธ", + ":man_getting_face_massage_tone4:": "๐Ÿ’†๐Ÿพโ€โ™‚๏ธ", + ":man_getting_face_massage_tone5:": "๐Ÿ’†๐Ÿฟโ€โ™‚๏ธ", + ":man_getting_haircut:": "๐Ÿ’‡โ€โ™‚๏ธ", + ":man_getting_haircut_dark_skin_tone:": "๐Ÿ’‡๐Ÿฟโ€โ™‚๏ธ", + ":man_getting_haircut_light_skin_tone:": "๐Ÿ’‡๐Ÿปโ€โ™‚๏ธ", + ":man_getting_haircut_medium_dark_skin_tone:": "๐Ÿ’‡๐Ÿพโ€โ™‚๏ธ", + ":man_getting_haircut_medium_light_skin_tone:": "๐Ÿ’‡๐Ÿผโ€โ™‚๏ธ", + ":man_getting_haircut_medium_skin_tone:": "๐Ÿ’‡๐Ÿฝโ€โ™‚๏ธ", + ":man_getting_haircut_tone1:": "๐Ÿ’‡๐Ÿปโ€โ™‚๏ธ", + ":man_getting_haircut_tone2:": "๐Ÿ’‡๐Ÿผโ€โ™‚๏ธ", + ":man_getting_haircut_tone3:": "๐Ÿ’‡๐Ÿฝโ€โ™‚๏ธ", + ":man_getting_haircut_tone4:": "๐Ÿ’‡๐Ÿพโ€โ™‚๏ธ", + ":man_getting_haircut_tone5:": "๐Ÿ’‡๐Ÿฟโ€โ™‚๏ธ", + ":man_golfing:": "๐ŸŒ๏ธโ€โ™‚๏ธ", + ":man_golfing_dark_skin_tone:": "๐ŸŒ๐Ÿฟโ€โ™‚๏ธ", + ":man_golfing_light_skin_tone:": "๐ŸŒ๐Ÿปโ€โ™‚๏ธ", + ":man_golfing_medium_dark_skin_tone:": "๐ŸŒ๐Ÿพโ€โ™‚๏ธ", + ":man_golfing_medium_light_skin_tone:": "๐ŸŒ๐Ÿผโ€โ™‚๏ธ", + ":man_golfing_medium_skin_tone:": "๐ŸŒ๐Ÿฝโ€โ™‚๏ธ", + ":man_golfing_tone1:": "๐ŸŒ๐Ÿปโ€โ™‚๏ธ", + ":man_golfing_tone2:": "๐ŸŒ๐Ÿผโ€โ™‚๏ธ", + ":man_golfing_tone3:": "๐ŸŒ๐Ÿฝโ€โ™‚๏ธ", + ":man_golfing_tone4:": "๐ŸŒ๐Ÿพโ€โ™‚๏ธ", + ":man_golfing_tone5:": "๐ŸŒ๐Ÿฟโ€โ™‚๏ธ", + ":man_guard:": "๐Ÿ’‚โ€โ™‚๏ธ", + ":man_guard_dark_skin_tone:": "๐Ÿ’‚๐Ÿฟโ€โ™‚๏ธ", + ":man_guard_light_skin_tone:": "๐Ÿ’‚๐Ÿปโ€โ™‚๏ธ", + ":man_guard_medium_dark_skin_tone:": "๐Ÿ’‚๐Ÿพโ€โ™‚๏ธ", + ":man_guard_medium_light_skin_tone:": "๐Ÿ’‚๐Ÿผโ€โ™‚๏ธ", + ":man_guard_medium_skin_tone:": "๐Ÿ’‚๐Ÿฝโ€โ™‚๏ธ", + ":man_guard_tone1:": "๐Ÿ’‚๐Ÿปโ€โ™‚๏ธ", + ":man_guard_tone2:": "๐Ÿ’‚๐Ÿผโ€โ™‚๏ธ", + ":man_guard_tone3:": "๐Ÿ’‚๐Ÿฝโ€โ™‚๏ธ", + ":man_guard_tone4:": "๐Ÿ’‚๐Ÿพโ€โ™‚๏ธ", + ":man_guard_tone5:": "๐Ÿ’‚๐Ÿฟโ€โ™‚๏ธ", + ":man_health_worker:": "๐Ÿ‘จโ€โš•๏ธ", + ":man_health_worker_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โš•๏ธ", + ":man_health_worker_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โš•๏ธ", + ":man_health_worker_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โš•๏ธ", + ":man_health_worker_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โš•๏ธ", + ":man_health_worker_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โš•๏ธ", + ":man_health_worker_tone1:": "๐Ÿ‘จ๐Ÿปโ€โš•๏ธ", + ":man_health_worker_tone2:": "๐Ÿ‘จ๐Ÿผโ€โš•๏ธ", + ":man_health_worker_tone3:": "๐Ÿ‘จ๐Ÿฝโ€โš•๏ธ", + ":man_health_worker_tone4:": "๐Ÿ‘จ๐Ÿพโ€โš•๏ธ", + ":man_health_worker_tone5:": "๐Ÿ‘จ๐Ÿฟโ€โš•๏ธ", + ":man_in_business_suit_levitating:": "๐Ÿ•ด๏ธ", + ":man_in_business_suit_levitating_dark_skin_tone:": "๐Ÿ•ด๐Ÿฟ", + ":man_in_business_suit_levitating_light_skin_tone:": "๐Ÿ•ด๐Ÿป", + ":man_in_business_suit_levitating_medium_dark_skin_tone:": "๐Ÿ•ด๐Ÿพ", + ":man_in_business_suit_levitating_medium_light_skin_tone:": "๐Ÿ•ด๐Ÿผ", + ":man_in_business_suit_levitating_medium_skin_tone:": "๐Ÿ•ด๐Ÿฝ", + ":man_in_business_suit_levitating_tone1:": "๐Ÿ•ด๐Ÿป", + ":man_in_business_suit_levitating_tone2:": "๐Ÿ•ด๐Ÿผ", + ":man_in_business_suit_levitating_tone3:": "๐Ÿ•ด๐Ÿฝ", + ":man_in_business_suit_levitating_tone4:": "๐Ÿ•ด๐Ÿพ", + ":man_in_business_suit_levitating_tone5:": "๐Ÿ•ด๐Ÿฟ", + ":man_in_lotus_position:": "๐Ÿง˜โ€โ™‚๏ธ", + ":man_in_lotus_position_dark_skin_tone:": "๐Ÿง˜๐Ÿฟโ€โ™‚๏ธ", + ":man_in_lotus_position_light_skin_tone:": "๐Ÿง˜๐Ÿปโ€โ™‚๏ธ", + ":man_in_lotus_position_medium_dark_skin_tone:": "๐Ÿง˜๐Ÿพโ€โ™‚๏ธ", + ":man_in_lotus_position_medium_light_skin_tone:": "๐Ÿง˜๐Ÿผโ€โ™‚๏ธ", + ":man_in_lotus_position_medium_skin_tone:": "๐Ÿง˜๐Ÿฝโ€โ™‚๏ธ", + ":man_in_lotus_position_tone1:": "๐Ÿง˜๐Ÿปโ€โ™‚๏ธ", + ":man_in_lotus_position_tone2:": "๐Ÿง˜๐Ÿผโ€โ™‚๏ธ", + ":man_in_lotus_position_tone3:": "๐Ÿง˜๐Ÿฝโ€โ™‚๏ธ", + ":man_in_lotus_position_tone4:": "๐Ÿง˜๐Ÿพโ€โ™‚๏ธ", + ":man_in_lotus_position_tone5:": "๐Ÿง˜๐Ÿฟโ€โ™‚๏ธ", + ":man_in_manual_wheelchair:": "๐Ÿ‘จโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฝ", + ":man_in_manual_wheelchair_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฝ", + ":man_in_motorized_wheelchair:": "๐Ÿ‘จโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆผ", + ":man_in_motorized_wheelchair_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆผ", + ":man_in_steamy_room:": "๐Ÿง–โ€โ™‚๏ธ", + ":man_in_steamy_room_dark_skin_tone:": "๐Ÿง–๐Ÿฟโ€โ™‚๏ธ", + ":man_in_steamy_room_light_skin_tone:": "๐Ÿง–๐Ÿปโ€โ™‚๏ธ", + ":man_in_steamy_room_medium_dark_skin_tone:": "๐Ÿง–๐Ÿพโ€โ™‚๏ธ", + ":man_in_steamy_room_medium_light_skin_tone:": "๐Ÿง–๐Ÿผโ€โ™‚๏ธ", + ":man_in_steamy_room_medium_skin_tone:": "๐Ÿง–๐Ÿฝโ€โ™‚๏ธ", + ":man_in_steamy_room_tone1:": "๐Ÿง–๐Ÿปโ€โ™‚๏ธ", + ":man_in_steamy_room_tone2:": "๐Ÿง–๐Ÿผโ€โ™‚๏ธ", + ":man_in_steamy_room_tone3:": "๐Ÿง–๐Ÿฝโ€โ™‚๏ธ", + ":man_in_steamy_room_tone4:": "๐Ÿง–๐Ÿพโ€โ™‚๏ธ", + ":man_in_steamy_room_tone5:": "๐Ÿง–๐Ÿฟโ€โ™‚๏ธ", + ":man_in_tuxedo:": "๐Ÿคตโ€โ™‚๏ธ", + ":man_in_tuxedo_dark_skin_tone:": "๐Ÿคต๐Ÿฟโ€โ™‚๏ธ", + ":man_in_tuxedo_light_skin_tone:": "๐Ÿคต๐Ÿปโ€โ™‚๏ธ", + ":man_in_tuxedo_medium_dark_skin_tone:": "๐Ÿคต๐Ÿพโ€โ™‚๏ธ", + ":man_in_tuxedo_medium_light_skin_tone:": "๐Ÿคต๐Ÿผโ€โ™‚๏ธ", + ":man_in_tuxedo_medium_skin_tone:": "๐Ÿคต๐Ÿฝโ€โ™‚๏ธ", + ":man_in_tuxedo_tone1:": "๐Ÿคต๐Ÿปโ€โ™‚๏ธ", + ":man_in_tuxedo_tone2:": "๐Ÿคต๐Ÿผโ€โ™‚๏ธ", + ":man_in_tuxedo_tone3:": "๐Ÿคต๐Ÿฝโ€โ™‚๏ธ", + ":man_in_tuxedo_tone4:": "๐Ÿคต๐Ÿพโ€โ™‚๏ธ", + ":man_in_tuxedo_tone5:": "๐Ÿคต๐Ÿฟโ€โ™‚๏ธ", + ":man_judge:": "๐Ÿ‘จโ€โš–๏ธ", + ":man_judge_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โš–๏ธ", + ":man_judge_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โš–๏ธ", + ":man_judge_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โš–๏ธ", + ":man_judge_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โš–๏ธ", + ":man_judge_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โš–๏ธ", + ":man_judge_tone1:": "๐Ÿ‘จ๐Ÿปโ€โš–๏ธ", + ":man_judge_tone2:": "๐Ÿ‘จ๐Ÿผโ€โš–๏ธ", + ":man_judge_tone3:": "๐Ÿ‘จ๐Ÿฝโ€โš–๏ธ", + ":man_judge_tone4:": "๐Ÿ‘จ๐Ÿพโ€โš–๏ธ", + ":man_judge_tone5:": "๐Ÿ‘จ๐Ÿฟโ€โš–๏ธ", + ":man_juggling:": "๐Ÿคนโ€โ™‚๏ธ", + ":man_juggling_dark_skin_tone:": "๐Ÿคน๐Ÿฟโ€โ™‚๏ธ", + ":man_juggling_light_skin_tone:": "๐Ÿคน๐Ÿปโ€โ™‚๏ธ", + ":man_juggling_medium_dark_skin_tone:": "๐Ÿคน๐Ÿพโ€โ™‚๏ธ", + ":man_juggling_medium_light_skin_tone:": "๐Ÿคน๐Ÿผโ€โ™‚๏ธ", + ":man_juggling_medium_skin_tone:": "๐Ÿคน๐Ÿฝโ€โ™‚๏ธ", + ":man_juggling_tone1:": "๐Ÿคน๐Ÿปโ€โ™‚๏ธ", + ":man_juggling_tone2:": "๐Ÿคน๐Ÿผโ€โ™‚๏ธ", + ":man_juggling_tone3:": "๐Ÿคน๐Ÿฝโ€โ™‚๏ธ", + ":man_juggling_tone4:": "๐Ÿคน๐Ÿพโ€โ™‚๏ธ", + ":man_juggling_tone5:": "๐Ÿคน๐Ÿฟโ€โ™‚๏ธ", + ":man_kneeling:": "๐ŸงŽโ€โ™‚๏ธ", + ":man_kneeling_dark_skin_tone:": "๐ŸงŽ๐Ÿฟโ€โ™‚๏ธ", + ":man_kneeling_light_skin_tone:": "๐ŸงŽ๐Ÿปโ€โ™‚๏ธ", + ":man_kneeling_medium_dark_skin_tone:": "๐ŸงŽ๐Ÿพโ€โ™‚๏ธ", + ":man_kneeling_medium_light_skin_tone:": "๐ŸงŽ๐Ÿผโ€โ™‚๏ธ", + ":man_kneeling_medium_skin_tone:": "๐ŸงŽ๐Ÿฝโ€โ™‚๏ธ", + ":man_kneeling_tone1:": "๐ŸงŽ๐Ÿปโ€โ™‚๏ธ", + ":man_kneeling_tone2:": "๐ŸงŽ๐Ÿผโ€โ™‚๏ธ", + ":man_kneeling_tone3:": "๐ŸงŽ๐Ÿฝโ€โ™‚๏ธ", + ":man_kneeling_tone4:": "๐ŸงŽ๐Ÿพโ€โ™‚๏ธ", + ":man_kneeling_tone5:": "๐ŸงŽ๐Ÿฟโ€โ™‚๏ธ", + ":man_lifting_weights:": "๐Ÿ‹๏ธโ€โ™‚๏ธ", + ":man_lifting_weights_dark_skin_tone:": "๐Ÿ‹๐Ÿฟโ€โ™‚๏ธ", + ":man_lifting_weights_light_skin_tone:": "๐Ÿ‹๐Ÿปโ€โ™‚๏ธ", + ":man_lifting_weights_medium_dark_skin_tone:": "๐Ÿ‹๐Ÿพโ€โ™‚๏ธ", + ":man_lifting_weights_medium_light_skin_tone:": "๐Ÿ‹๐Ÿผโ€โ™‚๏ธ", + ":man_lifting_weights_medium_skin_tone:": "๐Ÿ‹๐Ÿฝโ€โ™‚๏ธ", + ":man_lifting_weights_tone1:": "๐Ÿ‹๐Ÿปโ€โ™‚๏ธ", + ":man_lifting_weights_tone2:": "๐Ÿ‹๐Ÿผโ€โ™‚๏ธ", + ":man_lifting_weights_tone3:": "๐Ÿ‹๐Ÿฝโ€โ™‚๏ธ", + ":man_lifting_weights_tone4:": "๐Ÿ‹๐Ÿพโ€โ™‚๏ธ", + ":man_lifting_weights_tone5:": "๐Ÿ‹๐Ÿฟโ€โ™‚๏ธ", + ":man_light_skin_tone_beard:": "๐Ÿง”๐Ÿปโ€โ™‚๏ธ", + ":man_mage:": "๐Ÿง™โ€โ™‚๏ธ", + ":man_mage_dark_skin_tone:": "๐Ÿง™๐Ÿฟโ€โ™‚๏ธ", + ":man_mage_light_skin_tone:": "๐Ÿง™๐Ÿปโ€โ™‚๏ธ", + ":man_mage_medium_dark_skin_tone:": "๐Ÿง™๐Ÿพโ€โ™‚๏ธ", + ":man_mage_medium_light_skin_tone:": "๐Ÿง™๐Ÿผโ€โ™‚๏ธ", + ":man_mage_medium_skin_tone:": "๐Ÿง™๐Ÿฝโ€โ™‚๏ธ", + ":man_mage_tone1:": "๐Ÿง™๐Ÿปโ€โ™‚๏ธ", + ":man_mage_tone2:": "๐Ÿง™๐Ÿผโ€โ™‚๏ธ", + ":man_mage_tone3:": "๐Ÿง™๐Ÿฝโ€โ™‚๏ธ", + ":man_mage_tone4:": "๐Ÿง™๐Ÿพโ€โ™‚๏ธ", + ":man_mage_tone5:": "๐Ÿง™๐Ÿฟโ€โ™‚๏ธ", + ":man_mechanic:": "๐Ÿ‘จโ€๐Ÿ”ง", + ":man_mechanic_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ง", + ":man_mechanic_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ง", + ":man_mechanic_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ง", + ":man_mechanic_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ง", + ":man_mechanic_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ง", + ":man_mechanic_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ง", + ":man_mechanic_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ง", + ":man_mechanic_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ง", + ":man_mechanic_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ง", + ":man_mechanic_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ง", + ":man_medium_dark_skin_tone_beard:": "๐Ÿง”๐Ÿพโ€โ™‚๏ธ", + ":man_medium_light_skin_tone_beard:": "๐Ÿง”๐Ÿผโ€โ™‚๏ธ", + ":man_medium_skin_tone_beard:": "๐Ÿง”๐Ÿฝโ€โ™‚๏ธ", + ":man_mountain_biking:": "๐Ÿšตโ€โ™‚๏ธ", + ":man_mountain_biking_dark_skin_tone:": "๐Ÿšต๐Ÿฟโ€โ™‚๏ธ", + ":man_mountain_biking_light_skin_tone:": "๐Ÿšต๐Ÿปโ€โ™‚๏ธ", + ":man_mountain_biking_medium_dark_skin_tone:": "๐Ÿšต๐Ÿพโ€โ™‚๏ธ", + ":man_mountain_biking_medium_light_skin_tone:": "๐Ÿšต๐Ÿผโ€โ™‚๏ธ", + ":man_mountain_biking_medium_skin_tone:": "๐Ÿšต๐Ÿฝโ€โ™‚๏ธ", + ":man_mountain_biking_tone1:": "๐Ÿšต๐Ÿปโ€โ™‚๏ธ", + ":man_mountain_biking_tone2:": "๐Ÿšต๐Ÿผโ€โ™‚๏ธ", + ":man_mountain_biking_tone3:": "๐Ÿšต๐Ÿฝโ€โ™‚๏ธ", + ":man_mountain_biking_tone4:": "๐Ÿšต๐Ÿพโ€โ™‚๏ธ", + ":man_mountain_biking_tone5:": "๐Ÿšต๐Ÿฟโ€โ™‚๏ธ", + ":man_office_worker:": "๐Ÿ‘จโ€๐Ÿ’ผ", + ":man_office_worker_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ผ", + ":man_office_worker_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ผ", + ":man_office_worker_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ผ", + ":man_office_worker_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ผ", + ":man_office_worker_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ผ", + ":man_office_worker_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ผ", + ":man_office_worker_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ผ", + ":man_office_worker_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ผ", + ":man_office_worker_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ผ", + ":man_office_worker_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ผ", + ":man_pilot:": "๐Ÿ‘จโ€โœˆ๏ธ", + ":man_pilot_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€โœˆ๏ธ", + ":man_pilot_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€โœˆ๏ธ", + ":man_pilot_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€โœˆ๏ธ", + ":man_pilot_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€โœˆ๏ธ", + ":man_pilot_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€โœˆ๏ธ", + ":man_pilot_tone1:": "๐Ÿ‘จ๐Ÿปโ€โœˆ๏ธ", + ":man_pilot_tone2:": "๐Ÿ‘จ๐Ÿผโ€โœˆ๏ธ", + ":man_pilot_tone3:": "๐Ÿ‘จ๐Ÿฝโ€โœˆ๏ธ", + ":man_pilot_tone4:": "๐Ÿ‘จ๐Ÿพโ€โœˆ๏ธ", + ":man_pilot_tone5:": "๐Ÿ‘จ๐Ÿฟโ€โœˆ๏ธ", + ":man_playing_handball:": "๐Ÿคพโ€โ™‚๏ธ", + ":man_playing_handball_dark_skin_tone:": "๐Ÿคพ๐Ÿฟโ€โ™‚๏ธ", + ":man_playing_handball_light_skin_tone:": "๐Ÿคพ๐Ÿปโ€โ™‚๏ธ", + ":man_playing_handball_medium_dark_skin_tone:": "๐Ÿคพ๐Ÿพโ€โ™‚๏ธ", + ":man_playing_handball_medium_light_skin_tone:": "๐Ÿคพ๐Ÿผโ€โ™‚๏ธ", + ":man_playing_handball_medium_skin_tone:": "๐Ÿคพ๐Ÿฝโ€โ™‚๏ธ", + ":man_playing_handball_tone1:": "๐Ÿคพ๐Ÿปโ€โ™‚๏ธ", + ":man_playing_handball_tone2:": "๐Ÿคพ๐Ÿผโ€โ™‚๏ธ", + ":man_playing_handball_tone3:": "๐Ÿคพ๐Ÿฝโ€โ™‚๏ธ", + ":man_playing_handball_tone4:": "๐Ÿคพ๐Ÿพโ€โ™‚๏ธ", + ":man_playing_handball_tone5:": "๐Ÿคพ๐Ÿฟโ€โ™‚๏ธ", + ":man_playing_water_polo:": "๐Ÿคฝโ€โ™‚๏ธ", + ":man_playing_water_polo_dark_skin_tone:": "๐Ÿคฝ๐Ÿฟโ€โ™‚๏ธ", + ":man_playing_water_polo_light_skin_tone:": "๐Ÿคฝ๐Ÿปโ€โ™‚๏ธ", + ":man_playing_water_polo_medium_dark_skin_tone:": "๐Ÿคฝ๐Ÿพโ€โ™‚๏ธ", + ":man_playing_water_polo_medium_light_skin_tone:": "๐Ÿคฝ๐Ÿผโ€โ™‚๏ธ", + ":man_playing_water_polo_medium_skin_tone:": "๐Ÿคฝ๐Ÿฝโ€โ™‚๏ธ", + ":man_playing_water_polo_tone1:": "๐Ÿคฝ๐Ÿปโ€โ™‚๏ธ", + ":man_playing_water_polo_tone2:": "๐Ÿคฝ๐Ÿผโ€โ™‚๏ธ", + ":man_playing_water_polo_tone3:": "๐Ÿคฝ๐Ÿฝโ€โ™‚๏ธ", + ":man_playing_water_polo_tone4:": "๐Ÿคฝ๐Ÿพโ€โ™‚๏ธ", + ":man_playing_water_polo_tone5:": "๐Ÿคฝ๐Ÿฟโ€โ™‚๏ธ", + ":man_police_officer:": "๐Ÿ‘ฎโ€โ™‚๏ธ", + ":man_police_officer_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ", + ":man_police_officer_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ", + ":man_police_officer_medium_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿพโ€โ™‚๏ธ", + ":man_police_officer_medium_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿผโ€โ™‚๏ธ", + ":man_police_officer_medium_skin_tone:": "๐Ÿ‘ฎ๐Ÿฝโ€โ™‚๏ธ", + ":man_police_officer_tone1:": "๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ", + ":man_police_officer_tone2:": "๐Ÿ‘ฎ๐Ÿผโ€โ™‚๏ธ", + ":man_police_officer_tone3:": "๐Ÿ‘ฎ๐Ÿฝโ€โ™‚๏ธ", + ":man_police_officer_tone4:": "๐Ÿ‘ฎ๐Ÿพโ€โ™‚๏ธ", + ":man_police_officer_tone5:": "๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ", + ":man_pouting:": "๐Ÿ™Žโ€โ™‚๏ธ", + ":man_pouting_dark_skin_tone:": "๐Ÿ™Ž๐Ÿฟโ€โ™‚๏ธ", + ":man_pouting_light_skin_tone:": "๐Ÿ™Ž๐Ÿปโ€โ™‚๏ธ", + ":man_pouting_medium_dark_skin_tone:": "๐Ÿ™Ž๐Ÿพโ€โ™‚๏ธ", + ":man_pouting_medium_light_skin_tone:": "๐Ÿ™Ž๐Ÿผโ€โ™‚๏ธ", + ":man_pouting_medium_skin_tone:": "๐Ÿ™Ž๐Ÿฝโ€โ™‚๏ธ", + ":man_pouting_tone1:": "๐Ÿ™Ž๐Ÿปโ€โ™‚๏ธ", + ":man_pouting_tone2:": "๐Ÿ™Ž๐Ÿผโ€โ™‚๏ธ", + ":man_pouting_tone3:": "๐Ÿ™Ž๐Ÿฝโ€โ™‚๏ธ", + ":man_pouting_tone4:": "๐Ÿ™Ž๐Ÿพโ€โ™‚๏ธ", + ":man_pouting_tone5:": "๐Ÿ™Ž๐Ÿฟโ€โ™‚๏ธ", + ":man_raising_hand:": "๐Ÿ™‹โ€โ™‚๏ธ", + ":man_raising_hand_dark_skin_tone:": "๐Ÿ™‹๐Ÿฟโ€โ™‚๏ธ", + ":man_raising_hand_light_skin_tone:": "๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ", + ":man_raising_hand_medium_dark_skin_tone:": "๐Ÿ™‹๐Ÿพโ€โ™‚๏ธ", + ":man_raising_hand_medium_light_skin_tone:": "๐Ÿ™‹๐Ÿผโ€โ™‚๏ธ", + ":man_raising_hand_medium_skin_tone:": "๐Ÿ™‹๐Ÿฝโ€โ™‚๏ธ", + ":man_raising_hand_tone1:": "๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ", + ":man_raising_hand_tone2:": "๐Ÿ™‹๐Ÿผโ€โ™‚๏ธ", + ":man_raising_hand_tone3:": "๐Ÿ™‹๐Ÿฝโ€โ™‚๏ธ", + ":man_raising_hand_tone4:": "๐Ÿ™‹๐Ÿพโ€โ™‚๏ธ", + ":man_raising_hand_tone5:": "๐Ÿ™‹๐Ÿฟโ€โ™‚๏ธ", + ":man_red_haired:": "๐Ÿ‘จโ€๐Ÿฆฐ", + ":man_red_haired_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฐ", + ":man_red_haired_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฐ", + ":man_red_haired_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฐ", + ":man_red_haired_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฐ", + ":man_red_haired_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฐ", + ":man_red_haired_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฐ", + ":man_red_haired_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฐ", + ":man_red_haired_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฐ", + ":man_red_haired_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฐ", + ":man_red_haired_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฐ", + ":man_rowing_boat:": "๐Ÿšฃโ€โ™‚๏ธ", + ":man_rowing_boat_dark_skin_tone:": "๐Ÿšฃ๐Ÿฟโ€โ™‚๏ธ", + ":man_rowing_boat_light_skin_tone:": "๐Ÿšฃ๐Ÿปโ€โ™‚๏ธ", + ":man_rowing_boat_medium_dark_skin_tone:": "๐Ÿšฃ๐Ÿพโ€โ™‚๏ธ", + ":man_rowing_boat_medium_light_skin_tone:": "๐Ÿšฃ๐Ÿผโ€โ™‚๏ธ", + ":man_rowing_boat_medium_skin_tone:": "๐Ÿšฃ๐Ÿฝโ€โ™‚๏ธ", + ":man_rowing_boat_tone1:": "๐Ÿšฃ๐Ÿปโ€โ™‚๏ธ", + ":man_rowing_boat_tone2:": "๐Ÿšฃ๐Ÿผโ€โ™‚๏ธ", + ":man_rowing_boat_tone3:": "๐Ÿšฃ๐Ÿฝโ€โ™‚๏ธ", + ":man_rowing_boat_tone4:": "๐Ÿšฃ๐Ÿพโ€โ™‚๏ธ", + ":man_rowing_boat_tone5:": "๐Ÿšฃ๐Ÿฟโ€โ™‚๏ธ", + ":man_running:": "๐Ÿƒโ€โ™‚๏ธ", + ":man_running_dark_skin_tone:": "๐Ÿƒ๐Ÿฟโ€โ™‚๏ธ", + ":man_running_light_skin_tone:": "๐Ÿƒ๐Ÿปโ€โ™‚๏ธ", + ":man_running_medium_dark_skin_tone:": "๐Ÿƒ๐Ÿพโ€โ™‚๏ธ", + ":man_running_medium_light_skin_tone:": "๐Ÿƒ๐Ÿผโ€โ™‚๏ธ", + ":man_running_medium_skin_tone:": "๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ", + ":man_running_tone1:": "๐Ÿƒ๐Ÿปโ€โ™‚๏ธ", + ":man_running_tone2:": "๐Ÿƒ๐Ÿผโ€โ™‚๏ธ", + ":man_running_tone3:": "๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ", + ":man_running_tone4:": "๐Ÿƒ๐Ÿพโ€โ™‚๏ธ", + ":man_running_tone5:": "๐Ÿƒ๐Ÿฟโ€โ™‚๏ธ", + ":man_scientist:": "๐Ÿ‘จโ€๐Ÿ”ฌ", + ":man_scientist_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ฌ", + ":man_scientist_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ฌ", + ":man_scientist_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ฌ", + ":man_scientist_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ฌ", + ":man_scientist_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ฌ", + ":man_scientist_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ฌ", + ":man_scientist_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ฌ", + ":man_scientist_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ฌ", + ":man_scientist_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ฌ", + ":man_scientist_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ฌ", + ":man_shrugging:": "๐Ÿคทโ€โ™‚๏ธ", + ":man_shrugging_dark_skin_tone:": "๐Ÿคท๐Ÿฟโ€โ™‚๏ธ", + ":man_shrugging_light_skin_tone:": "๐Ÿคท๐Ÿปโ€โ™‚๏ธ", + ":man_shrugging_medium_dark_skin_tone:": "๐Ÿคท๐Ÿพโ€โ™‚๏ธ", + ":man_shrugging_medium_light_skin_tone:": "๐Ÿคท๐Ÿผโ€โ™‚๏ธ", + ":man_shrugging_medium_skin_tone:": "๐Ÿคท๐Ÿฝโ€โ™‚๏ธ", + ":man_shrugging_tone1:": "๐Ÿคท๐Ÿปโ€โ™‚๏ธ", + ":man_shrugging_tone2:": "๐Ÿคท๐Ÿผโ€โ™‚๏ธ", + ":man_shrugging_tone3:": "๐Ÿคท๐Ÿฝโ€โ™‚๏ธ", + ":man_shrugging_tone4:": "๐Ÿคท๐Ÿพโ€โ™‚๏ธ", + ":man_shrugging_tone5:": "๐Ÿคท๐Ÿฟโ€โ™‚๏ธ", + ":man_singer:": "๐Ÿ‘จโ€๐ŸŽค", + ":man_singer_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŽค", + ":man_singer_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŽค", + ":man_singer_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŽค", + ":man_singer_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŽค", + ":man_singer_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŽค", + ":man_singer_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŽค", + ":man_singer_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŽค", + ":man_singer_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŽค", + ":man_singer_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŽค", + ":man_singer_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŽค", + ":man_standing:": "๐Ÿงโ€โ™‚๏ธ", + ":man_standing_dark_skin_tone:": "๐Ÿง๐Ÿฟโ€โ™‚๏ธ", + ":man_standing_light_skin_tone:": "๐Ÿง๐Ÿปโ€โ™‚๏ธ", + ":man_standing_medium_dark_skin_tone:": "๐Ÿง๐Ÿพโ€โ™‚๏ธ", + ":man_standing_medium_light_skin_tone:": "๐Ÿง๐Ÿผโ€โ™‚๏ธ", + ":man_standing_medium_skin_tone:": "๐Ÿง๐Ÿฝโ€โ™‚๏ธ", + ":man_standing_tone1:": "๐Ÿง๐Ÿปโ€โ™‚๏ธ", + ":man_standing_tone2:": "๐Ÿง๐Ÿผโ€โ™‚๏ธ", + ":man_standing_tone3:": "๐Ÿง๐Ÿฝโ€โ™‚๏ธ", + ":man_standing_tone4:": "๐Ÿง๐Ÿพโ€โ™‚๏ธ", + ":man_standing_tone5:": "๐Ÿง๐Ÿฟโ€โ™‚๏ธ", + ":man_student:": "๐Ÿ‘จโ€๐ŸŽ“", + ":man_student_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŽ“", + ":man_student_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŽ“", + ":man_student_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŽ“", + ":man_student_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŽ“", + ":man_student_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŽ“", + ":man_student_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐ŸŽ“", + ":man_student_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐ŸŽ“", + ":man_student_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐ŸŽ“", + ":man_student_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐ŸŽ“", + ":man_student_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐ŸŽ“", + ":man_superhero:": "๐Ÿฆธโ€โ™‚๏ธ", + ":man_superhero_dark_skin_tone:": "๐Ÿฆธ๐Ÿฟโ€โ™‚๏ธ", + ":man_superhero_light_skin_tone:": "๐Ÿฆธ๐Ÿปโ€โ™‚๏ธ", + ":man_superhero_medium_dark_skin_tone:": "๐Ÿฆธ๐Ÿพโ€โ™‚๏ธ", + ":man_superhero_medium_light_skin_tone:": "๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ", + ":man_superhero_medium_skin_tone:": "๐Ÿฆธ๐Ÿฝโ€โ™‚๏ธ", + ":man_superhero_tone1:": "๐Ÿฆธ๐Ÿปโ€โ™‚๏ธ", + ":man_superhero_tone2:": "๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ", + ":man_superhero_tone3:": "๐Ÿฆธ๐Ÿฝโ€โ™‚๏ธ", + ":man_superhero_tone4:": "๐Ÿฆธ๐Ÿพโ€โ™‚๏ธ", + ":man_superhero_tone5:": "๐Ÿฆธ๐Ÿฟโ€โ™‚๏ธ", + ":man_supervillain:": "๐Ÿฆนโ€โ™‚๏ธ", + ":man_supervillain_dark_skin_tone:": "๐Ÿฆน๐Ÿฟโ€โ™‚๏ธ", + ":man_supervillain_light_skin_tone:": "๐Ÿฆน๐Ÿปโ€โ™‚๏ธ", + ":man_supervillain_medium_dark_skin_tone:": "๐Ÿฆน๐Ÿพโ€โ™‚๏ธ", + ":man_supervillain_medium_light_skin_tone:": "๐Ÿฆน๐Ÿผโ€โ™‚๏ธ", + ":man_supervillain_medium_skin_tone:": "๐Ÿฆน๐Ÿฝโ€โ™‚๏ธ", + ":man_supervillain_tone1:": "๐Ÿฆน๐Ÿปโ€โ™‚๏ธ", + ":man_supervillain_tone2:": "๐Ÿฆน๐Ÿผโ€โ™‚๏ธ", + ":man_supervillain_tone3:": "๐Ÿฆน๐Ÿฝโ€โ™‚๏ธ", + ":man_supervillain_tone4:": "๐Ÿฆน๐Ÿพโ€โ™‚๏ธ", + ":man_supervillain_tone5:": "๐Ÿฆน๐Ÿฟโ€โ™‚๏ธ", + ":man_surfing:": "๐Ÿ„โ€โ™‚๏ธ", + ":man_surfing_dark_skin_tone:": "๐Ÿ„๐Ÿฟโ€โ™‚๏ธ", + ":man_surfing_light_skin_tone:": "๐Ÿ„๐Ÿปโ€โ™‚๏ธ", + ":man_surfing_medium_dark_skin_tone:": "๐Ÿ„๐Ÿพโ€โ™‚๏ธ", + ":man_surfing_medium_light_skin_tone:": "๐Ÿ„๐Ÿผโ€โ™‚๏ธ", + ":man_surfing_medium_skin_tone:": "๐Ÿ„๐Ÿฝโ€โ™‚๏ธ", + ":man_surfing_tone1:": "๐Ÿ„๐Ÿปโ€โ™‚๏ธ", + ":man_surfing_tone2:": "๐Ÿ„๐Ÿผโ€โ™‚๏ธ", + ":man_surfing_tone3:": "๐Ÿ„๐Ÿฝโ€โ™‚๏ธ", + ":man_surfing_tone4:": "๐Ÿ„๐Ÿพโ€โ™‚๏ธ", + ":man_surfing_tone5:": "๐Ÿ„๐Ÿฟโ€โ™‚๏ธ", + ":man_swimming:": "๐ŸŠโ€โ™‚๏ธ", + ":man_swimming_dark_skin_tone:": "๐ŸŠ๐Ÿฟโ€โ™‚๏ธ", + ":man_swimming_light_skin_tone:": "๐ŸŠ๐Ÿปโ€โ™‚๏ธ", + ":man_swimming_medium_dark_skin_tone:": "๐ŸŠ๐Ÿพโ€โ™‚๏ธ", + ":man_swimming_medium_light_skin_tone:": "๐ŸŠ๐Ÿผโ€โ™‚๏ธ", + ":man_swimming_medium_skin_tone:": "๐ŸŠ๐Ÿฝโ€โ™‚๏ธ", + ":man_swimming_tone1:": "๐ŸŠ๐Ÿปโ€โ™‚๏ธ", + ":man_swimming_tone2:": "๐ŸŠ๐Ÿผโ€โ™‚๏ธ", + ":man_swimming_tone3:": "๐ŸŠ๐Ÿฝโ€โ™‚๏ธ", + ":man_swimming_tone4:": "๐ŸŠ๐Ÿพโ€โ™‚๏ธ", + ":man_swimming_tone5:": "๐ŸŠ๐Ÿฟโ€โ™‚๏ธ", + ":man_teacher:": "๐Ÿ‘จโ€๐Ÿซ", + ":man_teacher_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿซ", + ":man_teacher_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿซ", + ":man_teacher_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿซ", + ":man_teacher_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿซ", + ":man_teacher_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿซ", + ":man_teacher_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿซ", + ":man_teacher_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿซ", + ":man_teacher_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿซ", + ":man_teacher_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿซ", + ":man_teacher_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿซ", + ":man_technologist:": "๐Ÿ‘จโ€๐Ÿ’ป", + ":man_technologist_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ป", + ":man_technologist_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป", + ":man_technologist_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป", + ":man_technologist_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป", + ":man_technologist_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป", + ":man_technologist_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป", + ":man_technologist_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป", + ":man_technologist_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป", + ":man_technologist_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป", + ":man_technologist_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ป", + ":man_tipping_hand:": "๐Ÿ’โ€โ™‚๏ธ", + ":man_tipping_hand_dark_skin_tone:": "๐Ÿ’๐Ÿฟโ€โ™‚๏ธ", + ":man_tipping_hand_light_skin_tone:": "๐Ÿ’๐Ÿปโ€โ™‚๏ธ", + ":man_tipping_hand_medium_dark_skin_tone:": "๐Ÿ’๐Ÿพโ€โ™‚๏ธ", + ":man_tipping_hand_medium_light_skin_tone:": "๐Ÿ’๐Ÿผโ€โ™‚๏ธ", + ":man_tipping_hand_medium_skin_tone:": "๐Ÿ’๐Ÿฝโ€โ™‚๏ธ", + ":man_tipping_hand_tone1:": "๐Ÿ’๐Ÿปโ€โ™‚๏ธ", + ":man_tipping_hand_tone2:": "๐Ÿ’๐Ÿผโ€โ™‚๏ธ", + ":man_tipping_hand_tone3:": "๐Ÿ’๐Ÿฝโ€โ™‚๏ธ", + ":man_tipping_hand_tone4:": "๐Ÿ’๐Ÿพโ€โ™‚๏ธ", + ":man_tipping_hand_tone5:": "๐Ÿ’๐Ÿฟโ€โ™‚๏ธ", + ":man_tone1:": "๐Ÿ‘จ๐Ÿป", + ":man_tone1_beard:": "๐Ÿง”๐Ÿปโ€โ™‚๏ธ", + ":man_tone2:": "๐Ÿ‘จ๐Ÿผ", + ":man_tone2_beard:": "๐Ÿง”๐Ÿผโ€โ™‚๏ธ", + ":man_tone3:": "๐Ÿ‘จ๐Ÿฝ", + ":man_tone3_beard:": "๐Ÿง”๐Ÿฝโ€โ™‚๏ธ", + ":man_tone4:": "๐Ÿ‘จ๐Ÿพ", + ":man_tone4_beard:": "๐Ÿง”๐Ÿพโ€โ™‚๏ธ", + ":man_tone5:": "๐Ÿ‘จ๐Ÿฟ", + ":man_tone5_beard:": "๐Ÿง”๐Ÿฟโ€โ™‚๏ธ", + ":man_vampire:": "๐Ÿง›โ€โ™‚๏ธ", + ":man_vampire_dark_skin_tone:": "๐Ÿง›๐Ÿฟโ€โ™‚๏ธ", + ":man_vampire_light_skin_tone:": "๐Ÿง›๐Ÿปโ€โ™‚๏ธ", + ":man_vampire_medium_dark_skin_tone:": "๐Ÿง›๐Ÿพโ€โ™‚๏ธ", + ":man_vampire_medium_light_skin_tone:": "๐Ÿง›๐Ÿผโ€โ™‚๏ธ", + ":man_vampire_medium_skin_tone:": "๐Ÿง›๐Ÿฝโ€โ™‚๏ธ", + ":man_vampire_tone1:": "๐Ÿง›๐Ÿปโ€โ™‚๏ธ", + ":man_vampire_tone2:": "๐Ÿง›๐Ÿผโ€โ™‚๏ธ", + ":man_vampire_tone3:": "๐Ÿง›๐Ÿฝโ€โ™‚๏ธ", + ":man_vampire_tone4:": "๐Ÿง›๐Ÿพโ€โ™‚๏ธ", + ":man_vampire_tone5:": "๐Ÿง›๐Ÿฟโ€โ™‚๏ธ", + ":man_walking:": "๐Ÿšถโ€โ™‚๏ธ", + ":man_walking_dark_skin_tone:": "๐Ÿšถ๐Ÿฟโ€โ™‚๏ธ", + ":man_walking_light_skin_tone:": "๐Ÿšถ๐Ÿปโ€โ™‚๏ธ", + ":man_walking_medium_dark_skin_tone:": "๐Ÿšถ๐Ÿพโ€โ™‚๏ธ", + ":man_walking_medium_light_skin_tone:": "๐Ÿšถ๐Ÿผโ€โ™‚๏ธ", + ":man_walking_medium_skin_tone:": "๐Ÿšถ๐Ÿฝโ€โ™‚๏ธ", + ":man_walking_tone1:": "๐Ÿšถ๐Ÿปโ€โ™‚๏ธ", + ":man_walking_tone2:": "๐Ÿšถ๐Ÿผโ€โ™‚๏ธ", + ":man_walking_tone3:": "๐Ÿšถ๐Ÿฝโ€โ™‚๏ธ", + ":man_walking_tone4:": "๐Ÿšถ๐Ÿพโ€โ™‚๏ธ", + ":man_walking_tone5:": "๐Ÿšถ๐Ÿฟโ€โ™‚๏ธ", + ":man_wearing_turban:": "๐Ÿ‘ณโ€โ™‚๏ธ", + ":man_wearing_turban_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿฟโ€โ™‚๏ธ", + ":man_wearing_turban_light_skin_tone:": "๐Ÿ‘ณ๐Ÿปโ€โ™‚๏ธ", + ":man_wearing_turban_medium_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿพโ€โ™‚๏ธ", + ":man_wearing_turban_medium_light_skin_tone:": "๐Ÿ‘ณ๐Ÿผโ€โ™‚๏ธ", + ":man_wearing_turban_medium_skin_tone:": "๐Ÿ‘ณ๐Ÿฝโ€โ™‚๏ธ", + ":man_wearing_turban_tone1:": "๐Ÿ‘ณ๐Ÿปโ€โ™‚๏ธ", + ":man_wearing_turban_tone2:": "๐Ÿ‘ณ๐Ÿผโ€โ™‚๏ธ", + ":man_wearing_turban_tone3:": "๐Ÿ‘ณ๐Ÿฝโ€โ™‚๏ธ", + ":man_wearing_turban_tone4:": "๐Ÿ‘ณ๐Ÿพโ€โ™‚๏ธ", + ":man_wearing_turban_tone5:": "๐Ÿ‘ณ๐Ÿฟโ€โ™‚๏ธ", + ":man_white_haired:": "๐Ÿ‘จโ€๐Ÿฆณ", + ":man_white_haired_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆณ", + ":man_white_haired_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆณ", + ":man_white_haired_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆณ", + ":man_white_haired_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆณ", + ":man_white_haired_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆณ", + ":man_white_haired_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆณ", + ":man_white_haired_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆณ", + ":man_white_haired_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆณ", + ":man_white_haired_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆณ", + ":man_white_haired_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆณ", + ":man_with_chinese_cap:": "๐Ÿ‘ฒ", + ":man_with_chinese_cap_tone1:": "๐Ÿ‘ฒ๐Ÿป", + ":man_with_chinese_cap_tone2:": "๐Ÿ‘ฒ๐Ÿผ", + ":man_with_chinese_cap_tone3:": "๐Ÿ‘ฒ๐Ÿฝ", + ":man_with_chinese_cap_tone4:": "๐Ÿ‘ฒ๐Ÿพ", + ":man_with_chinese_cap_tone5:": "๐Ÿ‘ฒ๐Ÿฟ", + ":man_with_gua_pi_mao:": "๐Ÿ‘ฒ", + ":man_with_gua_pi_mao_tone1:": "๐Ÿ‘ฒ๐Ÿป", + ":man_with_gua_pi_mao_tone2:": "๐Ÿ‘ฒ๐Ÿผ", + ":man_with_gua_pi_mao_tone3:": "๐Ÿ‘ฒ๐Ÿฝ", + ":man_with_gua_pi_mao_tone4:": "๐Ÿ‘ฒ๐Ÿพ", + ":man_with_gua_pi_mao_tone5:": "๐Ÿ‘ฒ๐Ÿฟ", + ":man_with_probing_cane:": "๐Ÿ‘จโ€๐Ÿฆฏ", + ":man_with_probing_cane_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฏ", + ":man_with_probing_cane_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฏ", + ":man_with_probing_cane_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฏ", + ":man_with_probing_cane_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฏ", + ":man_with_probing_cane_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฏ", + ":man_with_probing_cane_tone1:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฏ", + ":man_with_probing_cane_tone2:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฏ", + ":man_with_probing_cane_tone3:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฏ", + ":man_with_probing_cane_tone4:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฏ", + ":man_with_probing_cane_tone5:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฏ", + ":man_with_turban:": "๐Ÿ‘ณ", + ":man_with_turban_tone1:": "๐Ÿ‘ณ๐Ÿป", + ":man_with_turban_tone2:": "๐Ÿ‘ณ๐Ÿผ", + ":man_with_turban_tone3:": "๐Ÿ‘ณ๐Ÿฝ", + ":man_with_turban_tone4:": "๐Ÿ‘ณ๐Ÿพ", + ":man_with_turban_tone5:": "๐Ÿ‘ณ๐Ÿฟ", + ":man_with_veil:": "๐Ÿ‘ฐโ€โ™‚๏ธ", + ":man_with_veil_dark_skin_tone:": "๐Ÿ‘ฐ๐Ÿฟโ€โ™‚๏ธ", + ":man_with_veil_light_skin_tone:": "๐Ÿ‘ฐ๐Ÿปโ€โ™‚๏ธ", + ":man_with_veil_medium_dark_skin_tone:": "๐Ÿ‘ฐ๐Ÿพโ€โ™‚๏ธ", + ":man_with_veil_medium_light_skin_tone:": "๐Ÿ‘ฐ๐Ÿผโ€โ™‚๏ธ", + ":man_with_veil_medium_skin_tone:": "๐Ÿ‘ฐ๐Ÿฝโ€โ™‚๏ธ", + ":man_with_veil_tone1:": "๐Ÿ‘ฐ๐Ÿปโ€โ™‚๏ธ", + ":man_with_veil_tone2:": "๐Ÿ‘ฐ๐Ÿผโ€โ™‚๏ธ", + ":man_with_veil_tone3:": "๐Ÿ‘ฐ๐Ÿฝโ€โ™‚๏ธ", + ":man_with_veil_tone4:": "๐Ÿ‘ฐ๐Ÿพโ€โ™‚๏ธ", + ":man_with_veil_tone5:": "๐Ÿ‘ฐ๐Ÿฟโ€โ™‚๏ธ", + ":man_zombie:": "๐ŸงŸโ€โ™‚๏ธ", + ":mango:": "๐Ÿฅญ", + ":mans_shoe:": "๐Ÿ‘ž", + ":mantelpiece_clock:": "๐Ÿ•ฐ", + ":mantlepiece_clock:": "๐Ÿ•ฐ๏ธ", + ":manual_wheelchair:": "๐Ÿฆฝ", + ":map:": "๐Ÿ—บ๏ธ", + ":maple_leaf:": "๐Ÿ", + ":marshall_islands:": "๐Ÿ‡ฒ๐Ÿ‡ญ", + ":martial_arts_uniform:": "๐Ÿฅ‹", + ":martinique:": "๐Ÿ‡ฒ๐Ÿ‡ถ", + ":mask:": "๐Ÿ˜ท", + ":massage:": "๐Ÿ’†", + ":massage_man:": "๐Ÿ’†โ€โ™‚๏ธ", + ":massage_tone1:": "๐Ÿ’†๐Ÿป", + ":massage_tone2:": "๐Ÿ’†๐Ÿผ", + ":massage_tone3:": "๐Ÿ’†๐Ÿฝ", + ":massage_tone4:": "๐Ÿ’†๐Ÿพ", + ":massage_tone5:": "๐Ÿ’†๐Ÿฟ", + ":massage_woman:": "๐Ÿ’†", + ":mate:": "๐Ÿง‰", + ":mauritania:": "๐Ÿ‡ฒ๐Ÿ‡ท", + ":mauritius:": "๐Ÿ‡ฒ๐Ÿ‡บ", + ":mayotte:": "๐Ÿ‡พ๐Ÿ‡น", + ":mc:": "๐Ÿ‡ฒ๐Ÿ‡จ", + ":md:": "๐Ÿ‡ฒ๐Ÿ‡ฉ", + ":me:": "๐Ÿ‡ฒ๐Ÿ‡ช", + ":meat_on_bone:": "๐Ÿ–", + ":mechanic:": "๐Ÿง‘โ€๐Ÿ”ง", + ":mechanic_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ”ง", + ":mechanic_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿ”ง", + ":mechanic_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿ”ง", + ":mechanic_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿ”ง", + ":mechanic_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ”ง", + ":mechanic_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿ”ง", + ":mechanic_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿ”ง", + ":mechanic_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ”ง", + ":mechanic_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿ”ง", + ":mechanic_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ”ง", + ":mechanical_arm:": "๐Ÿฆพ", + ":mechanical_leg:": "๐Ÿฆฟ", + ":medal:": "๐Ÿ…", + ":medal_military:": "๐ŸŽ–", + ":medal_sports:": "๐Ÿ…", + ":medical_symbol:": "โš•๏ธ", + ":mega:": "๐Ÿ“ฃ", + ":melon:": "๐Ÿˆ", + ":memo:": "๐Ÿ“", + ":men_holding_hands_dark_skin_tone:": "๐Ÿ‘ฌ๐Ÿฟ", + ":men_holding_hands_dark_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_light_skin_tone:": "๐Ÿ‘ฌ๐Ÿป", + ":men_holding_hands_light_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_light_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_medium_dark_skin_tone:": "๐Ÿ‘ฌ๐Ÿพ", + ":men_holding_hands_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_medium_light_skin_tone:": "๐Ÿ‘ฌ๐Ÿผ", + ":men_holding_hands_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_medium_skin_tone:": "๐Ÿ‘ฌ๐Ÿฝ", + ":men_holding_hands_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_medium_skin_tone_light_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_tone1:": "๐Ÿ‘ฌ๐Ÿป", + ":men_holding_hands_tone1_tone2:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_tone1_tone3:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_tone1_tone4:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_tone1_tone5:": "๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_tone2:": "๐Ÿ‘ฌ๐Ÿผ", + ":men_holding_hands_tone2_tone1:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_tone2_tone3:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_tone2_tone4:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_tone2_tone5:": "๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_tone3:": "๐Ÿ‘ฌ๐Ÿฝ", + ":men_holding_hands_tone3_tone1:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_tone3_tone2:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_tone3_tone4:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_holding_hands_tone3_tone5:": "๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_tone4:": "๐Ÿ‘ฌ๐Ÿพ", + ":men_holding_hands_tone4_tone1:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_tone4_tone2:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_tone4_tone3:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_tone4_tone5:": "๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":men_holding_hands_tone5:": "๐Ÿ‘ฌ๐Ÿฟ", + ":men_holding_hands_tone5_tone1:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":men_holding_hands_tone5_tone2:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":men_holding_hands_tone5_tone3:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":men_holding_hands_tone5_tone4:": "๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":men_with_bunny_ears_partying:": "๐Ÿ‘ฏโ€โ™‚๏ธ", + ":men_wrestling:": "๐Ÿคผโ€โ™‚๏ธ", + ":mending_heart:": "โค๏ธโ€๐Ÿฉน", + ":menorah:": "๐Ÿ•Ž", + ":mens:": "๐Ÿšน", + ":mermaid:": "๐Ÿงœโ€โ™€๏ธ", + ":mermaid_dark_skin_tone:": "๐Ÿงœ๐Ÿฟโ€โ™€๏ธ", + ":mermaid_light_skin_tone:": "๐Ÿงœ๐Ÿปโ€โ™€๏ธ", + ":mermaid_medium_dark_skin_tone:": "๐Ÿงœ๐Ÿพโ€โ™€๏ธ", + ":mermaid_medium_light_skin_tone:": "๐Ÿงœ๐Ÿผโ€โ™€๏ธ", + ":mermaid_medium_skin_tone:": "๐Ÿงœ๐Ÿฝโ€โ™€๏ธ", + ":mermaid_tone1:": "๐Ÿงœ๐Ÿปโ€โ™€๏ธ", + ":mermaid_tone2:": "๐Ÿงœ๐Ÿผโ€โ™€๏ธ", + ":mermaid_tone3:": "๐Ÿงœ๐Ÿฝโ€โ™€๏ธ", + ":mermaid_tone4:": "๐Ÿงœ๐Ÿพโ€โ™€๏ธ", + ":mermaid_tone5:": "๐Ÿงœ๐Ÿฟโ€โ™€๏ธ", + ":merman:": "๐Ÿงœโ€โ™‚๏ธ", + ":merman_dark_skin_tone:": "๐Ÿงœ๐Ÿฟโ€โ™‚๏ธ", + ":merman_light_skin_tone:": "๐Ÿงœ๐Ÿปโ€โ™‚๏ธ", + ":merman_medium_dark_skin_tone:": "๐Ÿงœ๐Ÿพโ€โ™‚๏ธ", + ":merman_medium_light_skin_tone:": "๐Ÿงœ๐Ÿผโ€โ™‚๏ธ", + ":merman_medium_skin_tone:": "๐Ÿงœ๐Ÿฝโ€โ™‚๏ธ", + ":merman_tone1:": "๐Ÿงœ๐Ÿปโ€โ™‚๏ธ", + ":merman_tone2:": "๐Ÿงœ๐Ÿผโ€โ™‚๏ธ", + ":merman_tone3:": "๐Ÿงœ๐Ÿฝโ€โ™‚๏ธ", + ":merman_tone4:": "๐Ÿงœ๐Ÿพโ€โ™‚๏ธ", + ":merman_tone5:": "๐Ÿงœ๐Ÿฟโ€โ™‚๏ธ", + ":merperson:": "๐Ÿงœ", + ":merperson_dark_skin_tone:": "๐Ÿงœ๐Ÿฟ", + ":merperson_light_skin_tone:": "๐Ÿงœ๐Ÿป", + ":merperson_medium_dark_skin_tone:": "๐Ÿงœ๐Ÿพ", + ":merperson_medium_light_skin_tone:": "๐Ÿงœ๐Ÿผ", + ":merperson_medium_skin_tone:": "๐Ÿงœ๐Ÿฝ", + ":merperson_tone1:": "๐Ÿงœ๐Ÿป", + ":merperson_tone2:": "๐Ÿงœ๐Ÿผ", + ":merperson_tone3:": "๐Ÿงœ๐Ÿฝ", + ":merperson_tone4:": "๐Ÿงœ๐Ÿพ", + ":merperson_tone5:": "๐Ÿงœ๐Ÿฟ", + ":metal:": "๐Ÿค˜", + ":metal_tone1:": "๐Ÿค˜๐Ÿป", + ":metal_tone2:": "๐Ÿค˜๐Ÿผ", + ":metal_tone3:": "๐Ÿค˜๐Ÿฝ", + ":metal_tone4:": "๐Ÿค˜๐Ÿพ", + ":metal_tone5:": "๐Ÿค˜๐Ÿฟ", + ":metro:": "๐Ÿš‡", + ":mexico:": "๐Ÿ‡ฒ๐Ÿ‡ฝ", + ":mf:": "๐Ÿ‡ฒ๐Ÿ‡ซ", + ":mg:": "๐Ÿ‡ฒ๐Ÿ‡ฌ", + ":mh:": "๐Ÿ‡ฒ๐Ÿ‡ญ", + ":microbe:": "๐Ÿฆ ", + ":micronesia:": "๐Ÿ‡ซ๐Ÿ‡ฒ", + ":microphone2:": "๐ŸŽ™๏ธ", + ":microphone:": "๐ŸŽค", + ":microscope:": "๐Ÿ”ฌ", + ":middle_finger:": "๐Ÿ–•", + ":middle_finger_tone1:": "๐Ÿ–•๐Ÿป", + ":middle_finger_tone2:": "๐Ÿ–•๐Ÿผ", + ":middle_finger_tone3:": "๐Ÿ–•๐Ÿฝ", + ":middle_finger_tone4:": "๐Ÿ–•๐Ÿพ", + ":middle_finger_tone5:": "๐Ÿ–•๐Ÿฟ", + ":military_helmet:": "๐Ÿช–", + ":military_medal:": "๐ŸŽ–๏ธ", + ":milk:": "๐Ÿฅ›", + ":milk_glass:": "๐Ÿฅ›", + ":milky_way:": "๐ŸŒŒ", + ":minibus:": "๐Ÿš", + ":minidisc:": "๐Ÿ’ฝ", + ":mirror:": "๐Ÿชž", + ":mk:": "๐Ÿ‡ฒ๐Ÿ‡ฐ", + ":ml:": "๐Ÿ‡ฒ๐Ÿ‡ฑ", + ":mm:": "๐Ÿ‡ฒ๐Ÿ‡ฒ", + ":mn:": "๐Ÿ‡ฒ๐Ÿ‡ณ", + ":mo:": "๐Ÿ‡ฒ๐Ÿ‡ด", + ":mobile_phone:": "๐Ÿ“ฑ", + ":mobile_phone_off:": "๐Ÿ“ด", + ":moldova:": "๐Ÿ‡ฒ๐Ÿ‡ฉ", + ":monaco:": "๐Ÿ‡ฒ๐Ÿ‡จ", + ":money_mouth:": "๐Ÿค‘", + ":money_mouth_face:": "๐Ÿค‘", + ":money_with_wings:": "๐Ÿ’ธ", + ":moneybag:": "๐Ÿ’ฐ", + ":mongolia:": "๐Ÿ‡ฒ๐Ÿ‡ณ", + ":monkey:": "๐Ÿ’", + ":monkey_face:": "๐Ÿต", + ":monorail:": "๐Ÿš", + ":montenegro:": "๐Ÿ‡ฒ๐Ÿ‡ช", + ":montserrat:": "๐Ÿ‡ฒ๐Ÿ‡ธ", + ":moon:": "๐ŸŒ”", + ":moon_cake:": "๐Ÿฅฎ", + ":morocco:": "๐Ÿ‡ฒ๐Ÿ‡ฆ", + ":mortar_board:": "๐ŸŽ“", + ":mosque:": "๐Ÿ•Œ", + ":mosquito:": "๐ŸฆŸ", + ":mother_christmas:": "๐Ÿคถ", + ":mother_christmas_tone1:": "๐Ÿคถ๐Ÿป", + ":mother_christmas_tone2:": "๐Ÿคถ๐Ÿผ", + ":mother_christmas_tone3:": "๐Ÿคถ๐Ÿฝ", + ":mother_christmas_tone4:": "๐Ÿคถ๐Ÿพ", + ":mother_christmas_tone5:": "๐Ÿคถ๐Ÿฟ", + ":motor_boat:": "๐Ÿ›ฅ", + ":motor_scooter:": "๐Ÿ›ต", + ":motorbike:": "๐Ÿ›ต", + ":motorboat:": "๐Ÿ›ฅ๏ธ", + ":motorcycle:": "๐Ÿ๏ธ", + ":motorized_wheelchair:": "๐Ÿฆผ", + ":motorway:": "๐Ÿ›ฃ๏ธ", + ":mount_fuji:": "๐Ÿ—ป", + ":mountain:": "โ›ฐ๏ธ", + ":mountain_bicyclist:": "๐Ÿšต", + ":mountain_bicyclist_tone1:": "๐Ÿšต๐Ÿป", + ":mountain_bicyclist_tone2:": "๐Ÿšต๐Ÿผ", + ":mountain_bicyclist_tone3:": "๐Ÿšต๐Ÿฝ", + ":mountain_bicyclist_tone4:": "๐Ÿšต๐Ÿพ", + ":mountain_bicyclist_tone5:": "๐Ÿšต๐Ÿฟ", + ":mountain_biking_man:": "๐Ÿšต", + ":mountain_biking_woman:": "๐Ÿšตโ€โ™€๏ธ", + ":mountain_cableway:": "๐Ÿš ", + ":mountain_railway:": "๐Ÿšž", + ":mountain_snow:": "๐Ÿ”๏ธ", + ":mouse2:": "๐Ÿ", + ":mouse:": "๐Ÿญ", + ":mouse_three_button:": "๐Ÿ–ฑ๏ธ", + ":mouse_trap:": "๐Ÿชค", + ":movie_camera:": "๐ŸŽฅ", + ":moyai:": "๐Ÿ—ฟ", + ":mozambique:": "๐Ÿ‡ฒ๐Ÿ‡ฟ", + ":mp:": "๐Ÿ‡ฒ๐Ÿ‡ต", + ":mq:": "๐Ÿ‡ฒ๐Ÿ‡ถ", + ":mr:": "๐Ÿ‡ฒ๐Ÿ‡ท", + ":mrs_claus:": "๐Ÿคถ", + ":mrs_claus_tone1:": "๐Ÿคถ๐Ÿป", + ":mrs_claus_tone2:": "๐Ÿคถ๐Ÿผ", + ":mrs_claus_tone3:": "๐Ÿคถ๐Ÿฝ", + ":mrs_claus_tone4:": "๐Ÿคถ๐Ÿพ", + ":mrs_claus_tone5:": "๐Ÿคถ๐Ÿฟ", + ":ms:": "๐Ÿ‡ฒ๐Ÿ‡ธ", + ":mt:": "๐Ÿ‡ฒ๐Ÿ‡น", + ":mu:": "๐Ÿ‡ฒ๐Ÿ‡บ", + ":muscle:": "๐Ÿ’ช", + ":muscle_tone1:": "๐Ÿ’ช๐Ÿป", + ":muscle_tone2:": "๐Ÿ’ช๐Ÿผ", + ":muscle_tone3:": "๐Ÿ’ช๐Ÿฝ", + ":muscle_tone4:": "๐Ÿ’ช๐Ÿพ", + ":muscle_tone5:": "๐Ÿ’ช๐Ÿฟ", + ":mushroom:": "๐Ÿ„", + ":musical_keyboard:": "๐ŸŽน", + ":musical_note:": "๐ŸŽต", + ":musical_score:": "๐ŸŽผ", + ":mute:": "๐Ÿ”‡", + ":mv:": "๐Ÿ‡ฒ๐Ÿ‡ป", + ":mw:": "๐Ÿ‡ฒ๐Ÿ‡ผ", + ":mx:": "๐Ÿ‡ฒ๐Ÿ‡ฝ", + ":mx_claus:": "๐Ÿง‘โ€๐ŸŽ„", + ":mx_claus_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽ„", + ":mx_claus_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐ŸŽ„", + ":mx_claus_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐ŸŽ„", + ":mx_claus_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐ŸŽ„", + ":mx_claus_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽ„", + ":mx_claus_tone1:": "๐Ÿง‘๐Ÿปโ€๐ŸŽ„", + ":mx_claus_tone2:": "๐Ÿง‘๐Ÿผโ€๐ŸŽ„", + ":mx_claus_tone3:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽ„", + ":mx_claus_tone4:": "๐Ÿง‘๐Ÿพโ€๐ŸŽ„", + ":mx_claus_tone5:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽ„", + ":my:": "๐Ÿ‡ฒ๐Ÿ‡พ", + ":myanmar:": "๐Ÿ‡ฒ๐Ÿ‡ฒ", + ":mz:": "๐Ÿ‡ฒ๐Ÿ‡ฟ", + ":na:": "๐Ÿ‡ณ๐Ÿ‡ฆ", + ":nail_care:": "๐Ÿ’…", + ":nail_care_tone1:": "๐Ÿ’…๐Ÿป", + ":nail_care_tone2:": "๐Ÿ’…๐Ÿผ", + ":nail_care_tone3:": "๐Ÿ’…๐Ÿฝ", + ":nail_care_tone4:": "๐Ÿ’…๐Ÿพ", + ":nail_care_tone5:": "๐Ÿ’…๐Ÿฟ", + ":name_badge:": "๐Ÿ“›", + ":namibia:": "๐Ÿ‡ณ๐Ÿ‡ฆ", + ":national_park:": "๐Ÿž๏ธ", + ":nauru:": "๐Ÿ‡ณ๐Ÿ‡ท", + ":nauseated_face:": "๐Ÿคข", + ":nazar_amulet:": "๐Ÿงฟ", + ":nc:": "๐Ÿ‡ณ๐Ÿ‡จ", + ":ne:": "๐Ÿ‡ณ๐Ÿ‡ช", + ":necktie:": "๐Ÿ‘”", + ":negative_squared_cross_mark:": "โŽ", + ":nepal:": "๐Ÿ‡ณ๐Ÿ‡ต", + ":nerd:": "๐Ÿค“", + ":nerd_face:": "๐Ÿค“", + ":nesting_dolls:": "๐Ÿช†", + ":netherlands:": "๐Ÿ‡ณ๐Ÿ‡ฑ", + ":neutral_face:": "๐Ÿ˜", + ":new:": "๐Ÿ†•", + ":new_caledonia:": "๐Ÿ‡ณ๐Ÿ‡จ", + ":new_moon:": "๐ŸŒ‘", + ":new_moon_with_face:": "๐ŸŒš", + ":new_zealand:": "๐Ÿ‡ณ๐Ÿ‡ฟ", + ":newspaper2:": "๐Ÿ—ž๏ธ", + ":newspaper:": "๐Ÿ“ฐ", + ":newspaper_roll:": "๐Ÿ—ž", + ":next_track:": "โญ๏ธ", + ":next_track_button:": "โญ", + ":nf:": "๐Ÿ‡ณ๐Ÿ‡ซ", + ":ng:": "๐Ÿ†–", + ":ni:": "๐Ÿ‡ณ๐Ÿ‡ฎ", + ":nicaragua:": "๐Ÿ‡ณ๐Ÿ‡ฎ", + ":niger:": "๐Ÿ‡ณ๐Ÿ‡ช", + ":nigeria:": "๐Ÿ‡ณ๐Ÿ‡ฌ", + ":night_with_stars:": "๐ŸŒƒ", + ":nine:": "9๏ธโƒฃ", + ":ninja:": "๐Ÿฅท", + ":ninja_dark_skin_tone:": "๐Ÿฅท๐Ÿฟ", + ":ninja_light_skin_tone:": "๐Ÿฅท๐Ÿป", + ":ninja_medium_dark_skin_tone:": "๐Ÿฅท๐Ÿพ", + ":ninja_medium_light_skin_tone:": "๐Ÿฅท๐Ÿผ", + ":ninja_medium_skin_tone:": "๐Ÿฅท๐Ÿฝ", + ":ninja_tone1:": "๐Ÿฅท๐Ÿป", + ":ninja_tone2:": "๐Ÿฅท๐Ÿผ", + ":ninja_tone3:": "๐Ÿฅท๐Ÿฝ", + ":ninja_tone4:": "๐Ÿฅท๐Ÿพ", + ":ninja_tone5:": "๐Ÿฅท๐Ÿฟ", + ":niue:": "๐Ÿ‡ณ๐Ÿ‡บ", + ":nl:": "๐Ÿ‡ณ๐Ÿ‡ฑ", + ":no:": "๐Ÿ‡ณ๐Ÿ‡ด", + ":no_bell:": "๐Ÿ”•", + ":no_bicycles:": "๐Ÿšณ", + ":no_entry:": "โ›”", + ":no_entry_sign:": "๐Ÿšซ", + ":no_good:": "๐Ÿ™…", + ":no_good_man:": "๐Ÿ™…โ€โ™‚๏ธ", + ":no_good_tone1:": "๐Ÿ™…๐Ÿป", + ":no_good_tone2:": "๐Ÿ™…๐Ÿผ", + ":no_good_tone3:": "๐Ÿ™…๐Ÿฝ", + ":no_good_tone4:": "๐Ÿ™…๐Ÿพ", + ":no_good_tone5:": "๐Ÿ™…๐Ÿฟ", + ":no_good_woman:": "๐Ÿ™…", + ":no_mobile_phones:": "๐Ÿ“ต", + ":no_mouth:": "๐Ÿ˜ถ", + ":no_pedestrians:": "๐Ÿšท", + ":no_smoking:": "๐Ÿšญ", + ":non-potable_water:": "๐Ÿšฑ", + ":norfolk_island:": "๐Ÿ‡ณ๐Ÿ‡ซ", + ":north_korea:": "๐Ÿ‡ฐ๐Ÿ‡ต", + ":northern_mariana_islands:": "๐Ÿ‡ฒ๐Ÿ‡ต", + ":norway:": "๐Ÿ‡ณ๐Ÿ‡ด", + ":nose:": "๐Ÿ‘ƒ", + ":nose_tone1:": "๐Ÿ‘ƒ๐Ÿป", + ":nose_tone2:": "๐Ÿ‘ƒ๐Ÿผ", + ":nose_tone3:": "๐Ÿ‘ƒ๐Ÿฝ", + ":nose_tone4:": "๐Ÿ‘ƒ๐Ÿพ", + ":nose_tone5:": "๐Ÿ‘ƒ๐Ÿฟ", + ":notebook:": "๐Ÿ““", + ":notebook_with_decorative_cover:": "๐Ÿ“”", + ":notepad_spiral:": "๐Ÿ—’๏ธ", + ":notes:": "๐ŸŽถ", + ":np:": "๐Ÿ‡ณ๐Ÿ‡ต", + ":nr:": "๐Ÿ‡ณ๐Ÿ‡ท", + ":nu:": "๐Ÿ‡ณ๐Ÿ‡บ", + ":nut_and_bolt:": "๐Ÿ”ฉ", + ":nz:": "๐Ÿ‡ณ๐Ÿ‡ฟ", + ":o2:": "๐Ÿ…พ๏ธ", + ":o:": "โญ•", + ":ocean:": "๐ŸŒŠ", + ":octagonal_sign:": "๐Ÿ›‘", + ":octopus:": "๐Ÿ™", + ":oden:": "๐Ÿข", + ":office:": "๐Ÿข", + ":office_worker:": "๐Ÿง‘โ€๐Ÿ’ผ", + ":office_worker_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ’ผ", + ":office_worker_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿ’ผ", + ":office_worker_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿ’ผ", + ":office_worker_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿ’ผ", + ":office_worker_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ’ผ", + ":office_worker_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿ’ผ", + ":office_worker_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿ’ผ", + ":office_worker_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ’ผ", + ":office_worker_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿ’ผ", + ":office_worker_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ’ผ", + ":oil:": "๐Ÿ›ข๏ธ", + ":oil_drum:": "๐Ÿ›ข๏ธ", + ":ok:": "๐Ÿ†—", + ":ok_hand:": "๐Ÿ‘Œ", + ":ok_hand_tone1:": "๐Ÿ‘Œ๐Ÿป", + ":ok_hand_tone2:": "๐Ÿ‘Œ๐Ÿผ", + ":ok_hand_tone3:": "๐Ÿ‘Œ๐Ÿฝ", + ":ok_hand_tone4:": "๐Ÿ‘Œ๐Ÿพ", + ":ok_hand_tone5:": "๐Ÿ‘Œ๐Ÿฟ", + ":ok_man:": "๐Ÿ™†โ€โ™‚๏ธ", + ":ok_woman:": "๐Ÿ™†", + ":ok_woman_tone1:": "๐Ÿ™†๐Ÿป", + ":ok_woman_tone2:": "๐Ÿ™†๐Ÿผ", + ":ok_woman_tone3:": "๐Ÿ™†๐Ÿฝ", + ":ok_woman_tone4:": "๐Ÿ™†๐Ÿพ", + ":ok_woman_tone5:": "๐Ÿ™†๐Ÿฟ", + ":old_key:": "๐Ÿ—๏ธ", + ":older_adult:": "๐Ÿง“", + ":older_adult_dark_skin_tone:": "๐Ÿง“๐Ÿฟ", + ":older_adult_light_skin_tone:": "๐Ÿง“๐Ÿป", + ":older_adult_medium_dark_skin_tone:": "๐Ÿง“๐Ÿพ", + ":older_adult_medium_light_skin_tone:": "๐Ÿง“๐Ÿผ", + ":older_adult_medium_skin_tone:": "๐Ÿง“๐Ÿฝ", + ":older_adult_tone1:": "๐Ÿง“๐Ÿป", + ":older_adult_tone2:": "๐Ÿง“๐Ÿผ", + ":older_adult_tone3:": "๐Ÿง“๐Ÿฝ", + ":older_adult_tone4:": "๐Ÿง“๐Ÿพ", + ":older_adult_tone5:": "๐Ÿง“๐Ÿฟ", + ":older_man:": "๐Ÿ‘ด", + ":older_man_tone1:": "๐Ÿ‘ด๐Ÿป", + ":older_man_tone2:": "๐Ÿ‘ด๐Ÿผ", + ":older_man_tone3:": "๐Ÿ‘ด๐Ÿฝ", + ":older_man_tone4:": "๐Ÿ‘ด๐Ÿพ", + ":older_man_tone5:": "๐Ÿ‘ด๐Ÿฟ", + ":older_woman:": "๐Ÿ‘ต", + ":older_woman_tone1:": "๐Ÿ‘ต๐Ÿป", + ":older_woman_tone2:": "๐Ÿ‘ต๐Ÿผ", + ":older_woman_tone3:": "๐Ÿ‘ต๐Ÿฝ", + ":older_woman_tone4:": "๐Ÿ‘ต๐Ÿพ", + ":older_woman_tone5:": "๐Ÿ‘ต๐Ÿฟ", + ":olive:": "๐Ÿซ’", + ":om:": "๐Ÿ‡ด๐Ÿ‡ฒ", + ":om_symbol:": "๐Ÿ•‰๏ธ", + ":oman:": "๐Ÿ‡ด๐Ÿ‡ฒ", + ":on:": "๐Ÿ”›", + ":oncoming_automobile:": "๐Ÿš˜", + ":oncoming_bus:": "๐Ÿš", + ":oncoming_police_car:": "๐Ÿš”", + ":oncoming_taxi:": "๐Ÿš–", + ":one:": "1๏ธโƒฃ", + ":one_piece_swimsuit:": "๐Ÿฉฑ", + ":onion:": "๐Ÿง…", + ":open_file_folder:": "๐Ÿ“‚", + ":open_hands:": "๐Ÿ‘", + ":open_hands_tone1:": "๐Ÿ‘๐Ÿป", + ":open_hands_tone2:": "๐Ÿ‘๐Ÿผ", + ":open_hands_tone3:": "๐Ÿ‘๐Ÿฝ", + ":open_hands_tone4:": "๐Ÿ‘๐Ÿพ", + ":open_hands_tone5:": "๐Ÿ‘๐Ÿฟ", + ":open_mouth:": "๐Ÿ˜ฎ", + ":open_umbrella:": "โ˜‚๏ธ", + ":ophiuchus:": "โ›Ž", + ":orange_book:": "๐Ÿ“™", + ":orange_circle:": "๐ŸŸ ", + ":orange_heart:": "๐Ÿงก", + ":orange_square:": "๐ŸŸง", + ":orangutan:": "๐Ÿฆง", + ":orthodox_cross:": "โ˜ฆ๏ธ", + ":otter:": "๐Ÿฆฆ", + ":outbox_tray:": "๐Ÿ“ค", + ":owl:": "๐Ÿฆ‰", + ":ox:": "๐Ÿ‚", + ":oyster:": "๐Ÿฆช", + ":pa:": "๐Ÿ‡ต๐Ÿ‡ฆ", + ":package:": "๐Ÿ“ฆ", + ":paella:": "๐Ÿฅ˜", + ":page_facing_up:": "๐Ÿ“„", + ":page_with_curl:": "๐Ÿ“ƒ", + ":pager:": "๐Ÿ“Ÿ", + ":paintbrush:": "๐Ÿ–Œ๏ธ", + ":pakistan:": "๐Ÿ‡ต๐Ÿ‡ฐ", + ":palau:": "๐Ÿ‡ต๐Ÿ‡ผ", + ":palestinian_territories:": "๐Ÿ‡ต๐Ÿ‡ธ", + ":palm_tree:": "๐ŸŒด", + ":palms_up_together:": "๐Ÿคฒ", + ":palms_up_together_dark_skin_tone:": "๐Ÿคฒ๐Ÿฟ", + ":palms_up_together_light_skin_tone:": "๐Ÿคฒ๐Ÿป", + ":palms_up_together_medium_dark_skin_tone:": "๐Ÿคฒ๐Ÿพ", + ":palms_up_together_medium_light_skin_tone:": "๐Ÿคฒ๐Ÿผ", + ":palms_up_together_medium_skin_tone:": "๐Ÿคฒ๐Ÿฝ", + ":palms_up_together_tone1:": "๐Ÿคฒ๐Ÿป", + ":palms_up_together_tone2:": "๐Ÿคฒ๐Ÿผ", + ":palms_up_together_tone3:": "๐Ÿคฒ๐Ÿฝ", + ":palms_up_together_tone4:": "๐Ÿคฒ๐Ÿพ", + ":palms_up_together_tone5:": "๐Ÿคฒ๐Ÿฟ", + ":panama:": "๐Ÿ‡ต๐Ÿ‡ฆ", + ":pancakes:": "๐Ÿฅž", + ":panda_face:": "๐Ÿผ", + ":paperclip:": "๐Ÿ“Ž", + ":paperclips:": "๐Ÿ–‡๏ธ", + ":papua_new_guinea:": "๐Ÿ‡ต๐Ÿ‡ฌ", + ":parachute:": "๐Ÿช‚", + ":paraguay:": "๐Ÿ‡ต๐Ÿ‡พ", + ":parasol_on_ground:": "โ›ฑ", + ":park:": "๐Ÿž๏ธ", + ":parking:": "๐Ÿ…ฟ๏ธ", + ":parrot:": "๐Ÿฆœ", + ":part_alternation_mark:": "ใ€ฝ๏ธ", + ":partly_sunny:": "โ›…", + ":partying_face:": "๐Ÿฅณ", + ":passenger_ship:": "๐Ÿ›ณ๏ธ", + ":passport_control:": "๐Ÿ›‚", + ":pause_button:": "โธ๏ธ", + ":paw_prints:": "๐Ÿพ", + ":pe:": "๐Ÿ‡ต๐Ÿ‡ช", + ":peace:": "โ˜ฎ๏ธ", + ":peace_symbol:": "โ˜ฎ๏ธ", + ":peach:": "๐Ÿ‘", + ":peacock:": "๐Ÿฆš", + ":peanuts:": "๐Ÿฅœ", + ":pear:": "๐Ÿ", + ":pen:": "๐Ÿ–Š", + ":pen_ballpoint:": "๐Ÿ–Š๏ธ", + ":pen_fountain:": "๐Ÿ–‹๏ธ", + ":pencil2:": "โœ๏ธ", + ":pencil:": "๐Ÿ“", + ":penguin:": "๐Ÿง", + ":pensive:": "๐Ÿ˜”", + ":people_holding_hands:": "๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘", + ":people_holding_hands_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_dark_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_dark_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_dark_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_light_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_light_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_light_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_light_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_medium_dark_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_medium_light_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_medium_light_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_medium_light_skin_tone_medium_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_medium_skin_tone_dark_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_medium_skin_tone_light_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_medium_skin_tone_medium_light_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_tone1_tone2:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_tone1_tone3:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_tone1_tone4:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_tone1_tone5:": "๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_tone2_tone1:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_tone2_tone3:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_tone2_tone4:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_tone2_tone5:": "๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_tone3_tone1:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_tone3_tone2:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_tone3_tone4:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_tone3_tone5:": "๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_holding_hands_tone4_tone1:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_tone4_tone2:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_tone4_tone3:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_tone4_tone5:": "๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ", + ":people_holding_hands_tone5_tone1:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿป", + ":people_holding_hands_tone5_tone2:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ", + ":people_holding_hands_tone5_tone3:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ", + ":people_holding_hands_tone5_tone4:": "๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ", + ":people_hugging:": "๐Ÿซ‚", + ":people_with_bunny_ears_partying:": "๐Ÿ‘ฏ", + ":people_wrestling:": "๐Ÿคผ", + ":performing_arts:": "๐ŸŽญ", + ":persevere:": "๐Ÿ˜ฃ", + ":person_bald:": "๐Ÿง‘โ€๐Ÿฆฒ", + ":person_biking:": "๐Ÿšด", + ":person_biking_tone1:": "๐Ÿšด๐Ÿป", + ":person_biking_tone2:": "๐Ÿšด๐Ÿผ", + ":person_biking_tone3:": "๐Ÿšด๐Ÿฝ", + ":person_biking_tone4:": "๐Ÿšด๐Ÿพ", + ":person_biking_tone5:": "๐Ÿšด๐Ÿฟ", + ":person_bouncing_ball:": "โ›น", + ":person_bouncing_ball_tone1:": "โ›น๐Ÿป", + ":person_bouncing_ball_tone2:": "โ›น๐Ÿผ", + ":person_bouncing_ball_tone3:": "โ›น๐Ÿฝ", + ":person_bouncing_ball_tone4:": "โ›น๐Ÿพ", + ":person_bouncing_ball_tone5:": "โ›น๐Ÿฟ", + ":person_bowing:": "๐Ÿ™‡", + ":person_bowing_tone1:": "๐Ÿ™‡๐Ÿป", + ":person_bowing_tone2:": "๐Ÿ™‡๐Ÿผ", + ":person_bowing_tone3:": "๐Ÿ™‡๐Ÿฝ", + ":person_bowing_tone4:": "๐Ÿ™‡๐Ÿพ", + ":person_bowing_tone5:": "๐Ÿ™‡๐Ÿฟ", + ":person_climbing:": "๐Ÿง—", + ":person_climbing_dark_skin_tone:": "๐Ÿง—๐Ÿฟ", + ":person_climbing_light_skin_tone:": "๐Ÿง—๐Ÿป", + ":person_climbing_medium_dark_skin_tone:": "๐Ÿง—๐Ÿพ", + ":person_climbing_medium_light_skin_tone:": "๐Ÿง—๐Ÿผ", + ":person_climbing_medium_skin_tone:": "๐Ÿง—๐Ÿฝ", + ":person_climbing_tone1:": "๐Ÿง—๐Ÿป", + ":person_climbing_tone2:": "๐Ÿง—๐Ÿผ", + ":person_climbing_tone3:": "๐Ÿง—๐Ÿฝ", + ":person_climbing_tone4:": "๐Ÿง—๐Ÿพ", + ":person_climbing_tone5:": "๐Ÿง—๐Ÿฟ", + ":person_curly_hair:": "๐Ÿง‘โ€๐Ÿฆฑ", + ":person_dark_skin_tone_bald:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฒ", + ":person_dark_skin_tone_curly_hair:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฑ", + ":person_dark_skin_tone_red_hair:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฐ", + ":person_dark_skin_tone_white_hair:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆณ", + ":person_doing_cartwheel:": "๐Ÿคธ", + ":person_doing_cartwheel_tone1:": "๐Ÿคธ๐Ÿป", + ":person_doing_cartwheel_tone2:": "๐Ÿคธ๐Ÿผ", + ":person_doing_cartwheel_tone3:": "๐Ÿคธ๐Ÿฝ", + ":person_doing_cartwheel_tone4:": "๐Ÿคธ๐Ÿพ", + ":person_doing_cartwheel_tone5:": "๐Ÿคธ๐Ÿฟ", + ":person_facepalming:": "๐Ÿคฆ", + ":person_facepalming_tone1:": "๐Ÿคฆ๐Ÿป", + ":person_facepalming_tone2:": "๐Ÿคฆ๐Ÿผ", + ":person_facepalming_tone3:": "๐Ÿคฆ๐Ÿฝ", + ":person_facepalming_tone4:": "๐Ÿคฆ๐Ÿพ", + ":person_facepalming_tone5:": "๐Ÿคฆ๐Ÿฟ", + ":person_feeding_baby:": "๐Ÿง‘โ€๐Ÿผ", + ":person_feeding_baby_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿผ", + ":person_feeding_baby_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿผ", + ":person_feeding_baby_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿผ", + ":person_feeding_baby_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿผ", + ":person_feeding_baby_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿผ", + ":person_feeding_baby_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿผ", + ":person_feeding_baby_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿผ", + ":person_feeding_baby_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿผ", + ":person_feeding_baby_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿผ", + ":person_feeding_baby_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿผ", + ":person_fencing:": "๐Ÿคบ", + ":person_frowning:": "๐Ÿ™", + ":person_frowning_tone1:": "๐Ÿ™๐Ÿป", + ":person_frowning_tone2:": "๐Ÿ™๐Ÿผ", + ":person_frowning_tone3:": "๐Ÿ™๐Ÿฝ", + ":person_frowning_tone4:": "๐Ÿ™๐Ÿพ", + ":person_frowning_tone5:": "๐Ÿ™๐Ÿฟ", + ":person_gesturing_no:": "๐Ÿ™…", + ":person_gesturing_no_tone1:": "๐Ÿ™…๐Ÿป", + ":person_gesturing_no_tone2:": "๐Ÿ™…๐Ÿผ", + ":person_gesturing_no_tone3:": "๐Ÿ™…๐Ÿฝ", + ":person_gesturing_no_tone4:": "๐Ÿ™…๐Ÿพ", + ":person_gesturing_no_tone5:": "๐Ÿ™…๐Ÿฟ", + ":person_gesturing_ok:": "๐Ÿ™†", + ":person_gesturing_ok_tone1:": "๐Ÿ™†๐Ÿป", + ":person_gesturing_ok_tone2:": "๐Ÿ™†๐Ÿผ", + ":person_gesturing_ok_tone3:": "๐Ÿ™†๐Ÿฝ", + ":person_gesturing_ok_tone4:": "๐Ÿ™†๐Ÿพ", + ":person_gesturing_ok_tone5:": "๐Ÿ™†๐Ÿฟ", + ":person_getting_haircut:": "๐Ÿ’‡", + ":person_getting_haircut_tone1:": "๐Ÿ’‡๐Ÿป", + ":person_getting_haircut_tone2:": "๐Ÿ’‡๐Ÿผ", + ":person_getting_haircut_tone3:": "๐Ÿ’‡๐Ÿฝ", + ":person_getting_haircut_tone4:": "๐Ÿ’‡๐Ÿพ", + ":person_getting_haircut_tone5:": "๐Ÿ’‡๐Ÿฟ", + ":person_getting_massage:": "๐Ÿ’†", + ":person_getting_massage_tone1:": "๐Ÿ’†๐Ÿป", + ":person_getting_massage_tone2:": "๐Ÿ’†๐Ÿผ", + ":person_getting_massage_tone3:": "๐Ÿ’†๐Ÿฝ", + ":person_getting_massage_tone4:": "๐Ÿ’†๐Ÿพ", + ":person_getting_massage_tone5:": "๐Ÿ’†๐Ÿฟ", + ":person_golfing:": "๐ŸŒ", + ":person_golfing_dark_skin_tone:": "๐ŸŒ๐Ÿฟ", + ":person_golfing_light_skin_tone:": "๐ŸŒ๐Ÿป", + ":person_golfing_medium_dark_skin_tone:": "๐ŸŒ๐Ÿพ", + ":person_golfing_medium_light_skin_tone:": "๐ŸŒ๐Ÿผ", + ":person_golfing_medium_skin_tone:": "๐ŸŒ๐Ÿฝ", + ":person_golfing_tone1:": "๐ŸŒ๐Ÿป", + ":person_golfing_tone2:": "๐ŸŒ๐Ÿผ", + ":person_golfing_tone3:": "๐ŸŒ๐Ÿฝ", + ":person_golfing_tone4:": "๐ŸŒ๐Ÿพ", + ":person_golfing_tone5:": "๐ŸŒ๐Ÿฟ", + ":person_in_bed_dark_skin_tone:": "๐Ÿ›Œ๐Ÿฟ", + ":person_in_bed_light_skin_tone:": "๐Ÿ›Œ๐Ÿป", + ":person_in_bed_medium_dark_skin_tone:": "๐Ÿ›Œ๐Ÿพ", + ":person_in_bed_medium_light_skin_tone:": "๐Ÿ›Œ๐Ÿผ", + ":person_in_bed_medium_skin_tone:": "๐Ÿ›Œ๐Ÿฝ", + ":person_in_bed_tone1:": "๐Ÿ›Œ๐Ÿป", + ":person_in_bed_tone2:": "๐Ÿ›Œ๐Ÿผ", + ":person_in_bed_tone3:": "๐Ÿ›Œ๐Ÿฝ", + ":person_in_bed_tone4:": "๐Ÿ›Œ๐Ÿพ", + ":person_in_bed_tone5:": "๐Ÿ›Œ๐Ÿฟ", + ":person_in_lotus_position:": "๐Ÿง˜", + ":person_in_lotus_position_dark_skin_tone:": "๐Ÿง˜๐Ÿฟ", + ":person_in_lotus_position_light_skin_tone:": "๐Ÿง˜๐Ÿป", + ":person_in_lotus_position_medium_dark_skin_tone:": "๐Ÿง˜๐Ÿพ", + ":person_in_lotus_position_medium_light_skin_tone:": "๐Ÿง˜๐Ÿผ", + ":person_in_lotus_position_medium_skin_tone:": "๐Ÿง˜๐Ÿฝ", + ":person_in_lotus_position_tone1:": "๐Ÿง˜๐Ÿป", + ":person_in_lotus_position_tone2:": "๐Ÿง˜๐Ÿผ", + ":person_in_lotus_position_tone3:": "๐Ÿง˜๐Ÿฝ", + ":person_in_lotus_position_tone4:": "๐Ÿง˜๐Ÿพ", + ":person_in_lotus_position_tone5:": "๐Ÿง˜๐Ÿฟ", + ":person_in_manual_wheelchair:": "๐Ÿง‘โ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฝ", + ":person_in_manual_wheelchair_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฝ", + ":person_in_motorized_wheelchair:": "๐Ÿง‘โ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆผ", + ":person_in_motorized_wheelchair_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆผ", + ":person_in_steamy_room:": "๐Ÿง–", + ":person_in_steamy_room_dark_skin_tone:": "๐Ÿง–๐Ÿฟ", + ":person_in_steamy_room_light_skin_tone:": "๐Ÿง–๐Ÿป", + ":person_in_steamy_room_medium_dark_skin_tone:": "๐Ÿง–๐Ÿพ", + ":person_in_steamy_room_medium_light_skin_tone:": "๐Ÿง–๐Ÿผ", + ":person_in_steamy_room_medium_skin_tone:": "๐Ÿง–๐Ÿฝ", + ":person_in_steamy_room_tone1:": "๐Ÿง–๐Ÿป", + ":person_in_steamy_room_tone2:": "๐Ÿง–๐Ÿผ", + ":person_in_steamy_room_tone3:": "๐Ÿง–๐Ÿฝ", + ":person_in_steamy_room_tone4:": "๐Ÿง–๐Ÿพ", + ":person_in_steamy_room_tone5:": "๐Ÿง–๐Ÿฟ", + ":person_in_tuxedo:": "๐Ÿคต", + ":person_in_tuxedo_tone1:": "๐Ÿคต๐Ÿป", + ":person_in_tuxedo_tone2:": "๐Ÿคต๐Ÿผ", + ":person_in_tuxedo_tone3:": "๐Ÿคต๐Ÿฝ", + ":person_in_tuxedo_tone4:": "๐Ÿคต๐Ÿพ", + ":person_in_tuxedo_tone5:": "๐Ÿคต๐Ÿฟ", + ":person_juggling:": "๐Ÿคน", + ":person_juggling_tone1:": "๐Ÿคน๐Ÿป", + ":person_juggling_tone2:": "๐Ÿคน๐Ÿผ", + ":person_juggling_tone3:": "๐Ÿคน๐Ÿฝ", + ":person_juggling_tone4:": "๐Ÿคน๐Ÿพ", + ":person_juggling_tone5:": "๐Ÿคน๐Ÿฟ", + ":person_kneeling:": "๐ŸงŽ", + ":person_kneeling_dark_skin_tone:": "๐ŸงŽ๐Ÿฟ", + ":person_kneeling_light_skin_tone:": "๐ŸงŽ๐Ÿป", + ":person_kneeling_medium_dark_skin_tone:": "๐ŸงŽ๐Ÿพ", + ":person_kneeling_medium_light_skin_tone:": "๐ŸงŽ๐Ÿผ", + ":person_kneeling_medium_skin_tone:": "๐ŸงŽ๐Ÿฝ", + ":person_kneeling_tone1:": "๐ŸงŽ๐Ÿป", + ":person_kneeling_tone2:": "๐ŸงŽ๐Ÿผ", + ":person_kneeling_tone3:": "๐ŸงŽ๐Ÿฝ", + ":person_kneeling_tone4:": "๐ŸงŽ๐Ÿพ", + ":person_kneeling_tone5:": "๐ŸงŽ๐Ÿฟ", + ":person_lifting_weights:": "๐Ÿ‹", + ":person_lifting_weights_tone1:": "๐Ÿ‹๐Ÿป", + ":person_lifting_weights_tone2:": "๐Ÿ‹๐Ÿผ", + ":person_lifting_weights_tone3:": "๐Ÿ‹๐Ÿฝ", + ":person_lifting_weights_tone4:": "๐Ÿ‹๐Ÿพ", + ":person_lifting_weights_tone5:": "๐Ÿ‹๐Ÿฟ", + ":person_light_skin_tone_bald:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฒ", + ":person_light_skin_tone_curly_hair:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฑ", + ":person_light_skin_tone_red_hair:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฐ", + ":person_light_skin_tone_white_hair:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆณ", + ":person_medium_dark_skin_tone_bald:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฒ", + ":person_medium_dark_skin_tone_curly_hair:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฑ", + ":person_medium_dark_skin_tone_red_hair:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฐ", + ":person_medium_dark_skin_tone_white_hair:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆณ", + ":person_medium_light_skin_tone_bald:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฒ", + ":person_medium_light_skin_tone_curly_hair:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฑ", + ":person_medium_light_skin_tone_red_hair:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฐ", + ":person_medium_light_skin_tone_white_hair:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆณ", + ":person_medium_skin_tone_bald:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฒ", + ":person_medium_skin_tone_curly_hair:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฑ", + ":person_medium_skin_tone_red_hair:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฐ", + ":person_medium_skin_tone_white_hair:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆณ", + ":person_mountain_biking:": "๐Ÿšต", + ":person_mountain_biking_tone1:": "๐Ÿšต๐Ÿป", + ":person_mountain_biking_tone2:": "๐Ÿšต๐Ÿผ", + ":person_mountain_biking_tone3:": "๐Ÿšต๐Ÿฝ", + ":person_mountain_biking_tone4:": "๐Ÿšต๐Ÿพ", + ":person_mountain_biking_tone5:": "๐Ÿšต๐Ÿฟ", + ":person_playing_handball:": "๐Ÿคพ", + ":person_playing_handball_tone1:": "๐Ÿคพ๐Ÿป", + ":person_playing_handball_tone2:": "๐Ÿคพ๐Ÿผ", + ":person_playing_handball_tone3:": "๐Ÿคพ๐Ÿฝ", + ":person_playing_handball_tone4:": "๐Ÿคพ๐Ÿพ", + ":person_playing_handball_tone5:": "๐Ÿคพ๐Ÿฟ", + ":person_playing_water_polo:": "๐Ÿคฝ", + ":person_playing_water_polo_tone1:": "๐Ÿคฝ๐Ÿป", + ":person_playing_water_polo_tone2:": "๐Ÿคฝ๐Ÿผ", + ":person_playing_water_polo_tone3:": "๐Ÿคฝ๐Ÿฝ", + ":person_playing_water_polo_tone4:": "๐Ÿคฝ๐Ÿพ", + ":person_playing_water_polo_tone5:": "๐Ÿคฝ๐Ÿฟ", + ":person_pouting:": "๐Ÿ™Ž", + ":person_pouting_tone1:": "๐Ÿ™Ž๐Ÿป", + ":person_pouting_tone2:": "๐Ÿ™Ž๐Ÿผ", + ":person_pouting_tone3:": "๐Ÿ™Ž๐Ÿฝ", + ":person_pouting_tone4:": "๐Ÿ™Ž๐Ÿพ", + ":person_pouting_tone5:": "๐Ÿ™Ž๐Ÿฟ", + ":person_raising_hand:": "๐Ÿ™‹", + ":person_raising_hand_tone1:": "๐Ÿ™‹๐Ÿป", + ":person_raising_hand_tone2:": "๐Ÿ™‹๐Ÿผ", + ":person_raising_hand_tone3:": "๐Ÿ™‹๐Ÿฝ", + ":person_raising_hand_tone4:": "๐Ÿ™‹๐Ÿพ", + ":person_raising_hand_tone5:": "๐Ÿ™‹๐Ÿฟ", + ":person_red_hair:": "๐Ÿง‘โ€๐Ÿฆฐ", + ":person_rowing_boat:": "๐Ÿšฃ", + ":person_rowing_boat_tone1:": "๐Ÿšฃ๐Ÿป", + ":person_rowing_boat_tone2:": "๐Ÿšฃ๐Ÿผ", + ":person_rowing_boat_tone3:": "๐Ÿšฃ๐Ÿฝ", + ":person_rowing_boat_tone4:": "๐Ÿšฃ๐Ÿพ", + ":person_rowing_boat_tone5:": "๐Ÿšฃ๐Ÿฟ", + ":person_running:": "๐Ÿƒ", + ":person_running_tone1:": "๐Ÿƒ๐Ÿป", + ":person_running_tone2:": "๐Ÿƒ๐Ÿผ", + ":person_running_tone3:": "๐Ÿƒ๐Ÿฝ", + ":person_running_tone4:": "๐Ÿƒ๐Ÿพ", + ":person_running_tone5:": "๐Ÿƒ๐Ÿฟ", + ":person_shrugging:": "๐Ÿคท", + ":person_shrugging_tone1:": "๐Ÿคท๐Ÿป", + ":person_shrugging_tone2:": "๐Ÿคท๐Ÿผ", + ":person_shrugging_tone3:": "๐Ÿคท๐Ÿฝ", + ":person_shrugging_tone4:": "๐Ÿคท๐Ÿพ", + ":person_shrugging_tone5:": "๐Ÿคท๐Ÿฟ", + ":person_standing:": "๐Ÿง", + ":person_standing_dark_skin_tone:": "๐Ÿง๐Ÿฟ", + ":person_standing_light_skin_tone:": "๐Ÿง๐Ÿป", + ":person_standing_medium_dark_skin_tone:": "๐Ÿง๐Ÿพ", + ":person_standing_medium_light_skin_tone:": "๐Ÿง๐Ÿผ", + ":person_standing_medium_skin_tone:": "๐Ÿง๐Ÿฝ", + ":person_standing_tone1:": "๐Ÿง๐Ÿป", + ":person_standing_tone2:": "๐Ÿง๐Ÿผ", + ":person_standing_tone3:": "๐Ÿง๐Ÿฝ", + ":person_standing_tone4:": "๐Ÿง๐Ÿพ", + ":person_standing_tone5:": "๐Ÿง๐Ÿฟ", + ":person_surfing:": "๐Ÿ„", + ":person_surfing_tone1:": "๐Ÿ„๐Ÿป", + ":person_surfing_tone2:": "๐Ÿ„๐Ÿผ", + ":person_surfing_tone3:": "๐Ÿ„๐Ÿฝ", + ":person_surfing_tone4:": "๐Ÿ„๐Ÿพ", + ":person_surfing_tone5:": "๐Ÿ„๐Ÿฟ", + ":person_swimming:": "๐ŸŠ", + ":person_swimming_tone1:": "๐ŸŠ๐Ÿป", + ":person_swimming_tone2:": "๐ŸŠ๐Ÿผ", + ":person_swimming_tone3:": "๐ŸŠ๐Ÿฝ", + ":person_swimming_tone4:": "๐ŸŠ๐Ÿพ", + ":person_swimming_tone5:": "๐ŸŠ๐Ÿฟ", + ":person_tipping_hand:": "๐Ÿ’", + ":person_tipping_hand_tone1:": "๐Ÿ’๐Ÿป", + ":person_tipping_hand_tone2:": "๐Ÿ’๐Ÿผ", + ":person_tipping_hand_tone3:": "๐Ÿ’๐Ÿฝ", + ":person_tipping_hand_tone4:": "๐Ÿ’๐Ÿพ", + ":person_tipping_hand_tone5:": "๐Ÿ’๐Ÿฟ", + ":person_tone1_bald:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฒ", + ":person_tone1_curly_hair:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฑ", + ":person_tone1_red_hair:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฐ", + ":person_tone1_white_hair:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆณ", + ":person_tone2_bald:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฒ", + ":person_tone2_curly_hair:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฑ", + ":person_tone2_red_hair:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฐ", + ":person_tone2_white_hair:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆณ", + ":person_tone3_bald:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฒ", + ":person_tone3_curly_hair:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฑ", + ":person_tone3_red_hair:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฐ", + ":person_tone3_white_hair:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆณ", + ":person_tone4_bald:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฒ", + ":person_tone4_curly_hair:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฑ", + ":person_tone4_red_hair:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฐ", + ":person_tone4_white_hair:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆณ", + ":person_tone5_bald:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฒ", + ":person_tone5_curly_hair:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฑ", + ":person_tone5_red_hair:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฐ", + ":person_tone5_white_hair:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆณ", + ":person_walking:": "๐Ÿšถ", + ":person_walking_tone1:": "๐Ÿšถ๐Ÿป", + ":person_walking_tone2:": "๐Ÿšถ๐Ÿผ", + ":person_walking_tone3:": "๐Ÿšถ๐Ÿฝ", + ":person_walking_tone4:": "๐Ÿšถ๐Ÿพ", + ":person_walking_tone5:": "๐Ÿšถ๐Ÿฟ", + ":person_wearing_turban:": "๐Ÿ‘ณ", + ":person_wearing_turban_tone1:": "๐Ÿ‘ณ๐Ÿป", + ":person_wearing_turban_tone2:": "๐Ÿ‘ณ๐Ÿผ", + ":person_wearing_turban_tone3:": "๐Ÿ‘ณ๐Ÿฝ", + ":person_wearing_turban_tone4:": "๐Ÿ‘ณ๐Ÿพ", + ":person_wearing_turban_tone5:": "๐Ÿ‘ณ๐Ÿฟ", + ":person_white_hair:": "๐Ÿง‘โ€๐Ÿฆณ", + ":person_with_ball:": "โ›น", + ":person_with_ball_tone1:": "โ›น๐Ÿป", + ":person_with_ball_tone2:": "โ›น๐Ÿผ", + ":person_with_ball_tone3:": "โ›น๐Ÿฝ", + ":person_with_ball_tone4:": "โ›น๐Ÿพ", + ":person_with_ball_tone5:": "โ›น๐Ÿฟ", + ":person_with_blond_hair:": "๐Ÿ‘ฑ", + ":person_with_blond_hair_tone1:": "๐Ÿ‘ฑ๐Ÿป", + ":person_with_blond_hair_tone2:": "๐Ÿ‘ฑ๐Ÿผ", + ":person_with_blond_hair_tone3:": "๐Ÿ‘ฑ๐Ÿฝ", + ":person_with_blond_hair_tone4:": "๐Ÿ‘ฑ๐Ÿพ", + ":person_with_blond_hair_tone5:": "๐Ÿ‘ฑ๐Ÿฟ", + ":person_with_pouting_face:": "๐Ÿ™Ž", + ":person_with_pouting_face_tone1:": "๐Ÿ™Ž๐Ÿป", + ":person_with_pouting_face_tone2:": "๐Ÿ™Ž๐Ÿผ", + ":person_with_pouting_face_tone3:": "๐Ÿ™Ž๐Ÿฝ", + ":person_with_pouting_face_tone4:": "๐Ÿ™Ž๐Ÿพ", + ":person_with_pouting_face_tone5:": "๐Ÿ™Ž๐Ÿฟ", + ":person_with_probing_cane:": "๐Ÿง‘โ€๐Ÿฆฏ", + ":person_with_probing_cane_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฏ", + ":person_with_probing_cane_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฏ", + ":person_with_probing_cane_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฏ", + ":person_with_probing_cane_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฏ", + ":person_with_probing_cane_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฏ", + ":person_with_probing_cane_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿฆฏ", + ":person_with_probing_cane_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿฆฏ", + ":person_with_probing_cane_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿฆฏ", + ":person_with_probing_cane_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿฆฏ", + ":person_with_probing_cane_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿฆฏ", + ":person_with_veil:": "๐Ÿ‘ฐ", + ":person_with_veil_tone1:": "๐Ÿ‘ฐ๐Ÿป", + ":person_with_veil_tone2:": "๐Ÿ‘ฐ๐Ÿผ", + ":person_with_veil_tone3:": "๐Ÿ‘ฐ๐Ÿฝ", + ":person_with_veil_tone4:": "๐Ÿ‘ฐ๐Ÿพ", + ":person_with_veil_tone5:": "๐Ÿ‘ฐ๐Ÿฟ", + ":peru:": "๐Ÿ‡ต๐Ÿ‡ช", + ":petri_dish:": "๐Ÿงซ", + ":pf:": "๐Ÿ‡ต๐Ÿ‡ซ", + ":pg:": "๐Ÿ‡ต๐Ÿ‡ฌ", + ":ph:": "๐Ÿ‡ต๐Ÿ‡ญ", + ":philippines:": "๐Ÿ‡ต๐Ÿ‡ญ", + ":phone:": "โ˜Ž๏ธ", + ":pick:": "โ›๏ธ", + ":pickup_truck:": "๐Ÿ›ป", + ":pie:": "๐Ÿฅง", + ":pig2:": "๐Ÿ–", + ":pig:": "๐Ÿท", + ":pig_nose:": "๐Ÿฝ", + ":pill:": "๐Ÿ’Š", + ":pilot:": "๐Ÿง‘โ€โœˆ๏ธ", + ":pilot_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€โœˆ๏ธ", + ":pilot_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€โœˆ๏ธ", + ":pilot_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€โœˆ๏ธ", + ":pilot_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€โœˆ๏ธ", + ":pilot_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€โœˆ๏ธ", + ":pilot_tone1:": "๐Ÿง‘๐Ÿปโ€โœˆ๏ธ", + ":pilot_tone2:": "๐Ÿง‘๐Ÿผโ€โœˆ๏ธ", + ":pilot_tone3:": "๐Ÿง‘๐Ÿฝโ€โœˆ๏ธ", + ":pilot_tone4:": "๐Ÿง‘๐Ÿพโ€โœˆ๏ธ", + ":pilot_tone5:": "๐Ÿง‘๐Ÿฟโ€โœˆ๏ธ", + ":pinched_fingers:": "๐ŸคŒ", + ":pinched_fingers_dark_skin_tone:": "๐ŸคŒ๐Ÿฟ", + ":pinched_fingers_light_skin_tone:": "๐ŸคŒ๐Ÿป", + ":pinched_fingers_medium_dark_skin_tone:": "๐ŸคŒ๐Ÿพ", + ":pinched_fingers_medium_light_skin_tone:": "๐ŸคŒ๐Ÿผ", + ":pinched_fingers_medium_skin_tone:": "๐ŸคŒ๐Ÿฝ", + ":pinched_fingers_tone1:": "๐ŸคŒ๐Ÿป", + ":pinched_fingers_tone2:": "๐ŸคŒ๐Ÿผ", + ":pinched_fingers_tone3:": "๐ŸคŒ๐Ÿฝ", + ":pinched_fingers_tone4:": "๐ŸคŒ๐Ÿพ", + ":pinched_fingers_tone5:": "๐ŸคŒ๐Ÿฟ", + ":pinching_hand:": "๐Ÿค", + ":pinching_hand_dark_skin_tone:": "๐Ÿค๐Ÿฟ", + ":pinching_hand_light_skin_tone:": "๐Ÿค๐Ÿป", + ":pinching_hand_medium_dark_skin_tone:": "๐Ÿค๐Ÿพ", + ":pinching_hand_medium_light_skin_tone:": "๐Ÿค๐Ÿผ", + ":pinching_hand_medium_skin_tone:": "๐Ÿค๐Ÿฝ", + ":pinching_hand_tone1:": "๐Ÿค๐Ÿป", + ":pinching_hand_tone2:": "๐Ÿค๐Ÿผ", + ":pinching_hand_tone3:": "๐Ÿค๐Ÿฝ", + ":pinching_hand_tone4:": "๐Ÿค๐Ÿพ", + ":pinching_hand_tone5:": "๐Ÿค๐Ÿฟ", + ":pineapple:": "๐Ÿ", + ":ping_pong:": "๐Ÿ“", + ":pirate_flag:": "๐Ÿดโ€โ˜ ๏ธ", + ":pisces:": "โ™“", + ":pitcairn_islands:": "๐Ÿ‡ต๐Ÿ‡ณ", + ":pizza:": "๐Ÿ•", + ":piรฑata:": "๐Ÿช…", + ":pk:": "๐Ÿ‡ต๐Ÿ‡ฐ", + ":pl:": "๐Ÿ‡ต๐Ÿ‡ฑ", + ":placard:": "๐Ÿชง", + ":place_of_worship:": "๐Ÿ›", + ":plate_with_cutlery:": "๐Ÿฝ", + ":play_or_pause_button:": "โฏ", + ":play_pause:": "โฏ๏ธ", + ":pleading_face:": "๐Ÿฅบ", + ":plunger:": "๐Ÿช ", + ":pm:": "๐Ÿ‡ต๐Ÿ‡ฒ", + ":pn:": "๐Ÿ‡ต๐Ÿ‡ณ", + ":point_down:": "๐Ÿ‘‡", + ":point_down_tone1:": "๐Ÿ‘‡๐Ÿป", + ":point_down_tone2:": "๐Ÿ‘‡๐Ÿผ", + ":point_down_tone3:": "๐Ÿ‘‡๐Ÿฝ", + ":point_down_tone4:": "๐Ÿ‘‡๐Ÿพ", + ":point_down_tone5:": "๐Ÿ‘‡๐Ÿฟ", + ":point_left:": "๐Ÿ‘ˆ", + ":point_left_tone1:": "๐Ÿ‘ˆ๐Ÿป", + ":point_left_tone2:": "๐Ÿ‘ˆ๐Ÿผ", + ":point_left_tone3:": "๐Ÿ‘ˆ๐Ÿฝ", + ":point_left_tone4:": "๐Ÿ‘ˆ๐Ÿพ", + ":point_left_tone5:": "๐Ÿ‘ˆ๐Ÿฟ", + ":point_right:": "๐Ÿ‘‰", + ":point_right_tone1:": "๐Ÿ‘‰๐Ÿป", + ":point_right_tone2:": "๐Ÿ‘‰๐Ÿผ", + ":point_right_tone3:": "๐Ÿ‘‰๐Ÿฝ", + ":point_right_tone4:": "๐Ÿ‘‰๐Ÿพ", + ":point_right_tone5:": "๐Ÿ‘‰๐Ÿฟ", + ":point_up:": "โ˜๏ธ", + ":point_up_2:": "๐Ÿ‘†", + ":point_up_2_tone1:": "๐Ÿ‘†๐Ÿป", + ":point_up_2_tone2:": "๐Ÿ‘†๐Ÿผ", + ":point_up_2_tone3:": "๐Ÿ‘†๐Ÿฝ", + ":point_up_2_tone4:": "๐Ÿ‘†๐Ÿพ", + ":point_up_2_tone5:": "๐Ÿ‘†๐Ÿฟ", + ":point_up_tone1:": "โ˜๐Ÿป", + ":point_up_tone2:": "โ˜๐Ÿผ", + ":point_up_tone3:": "โ˜๐Ÿฝ", + ":point_up_tone4:": "โ˜๐Ÿพ", + ":point_up_tone5:": "โ˜๐Ÿฟ", + ":poland:": "๐Ÿ‡ต๐Ÿ‡ฑ", + ":polar_bear:": "๐Ÿปโ€โ„๏ธ", + ":police_car:": "๐Ÿš“", + ":police_officer:": "๐Ÿ‘ฎ", + ":police_officer_tone1:": "๐Ÿ‘ฎ๐Ÿป", + ":police_officer_tone2:": "๐Ÿ‘ฎ๐Ÿผ", + ":police_officer_tone3:": "๐Ÿ‘ฎ๐Ÿฝ", + ":police_officer_tone4:": "๐Ÿ‘ฎ๐Ÿพ", + ":police_officer_tone5:": "๐Ÿ‘ฎ๐Ÿฟ", + ":policeman:": "๐Ÿ‘ฎ", + ":policewoman:": "๐Ÿ‘ฎโ€โ™€๏ธ", + ":poo:": "๐Ÿ’ฉ", + ":poodle:": "๐Ÿฉ", + ":poop:": "๐Ÿ’ฉ", + ":popcorn:": "๐Ÿฟ", + ":portugal:": "๐Ÿ‡ต๐Ÿ‡น", + ":post_office:": "๐Ÿฃ", + ":postal_horn:": "๐Ÿ“ฏ", + ":postbox:": "๐Ÿ“ฎ", + ":potable_water:": "๐Ÿšฐ", + ":potato:": "๐Ÿฅ”", + ":potted_plant:": "๐Ÿชด", + ":pouch:": "๐Ÿ‘", + ":poultry_leg:": "๐Ÿ—", + ":pound:": "๐Ÿ’ท", + ":pound_symbol:": "#๏ธ", + ":pouting_cat:": "๐Ÿ˜พ", + ":pouting_man:": "๐Ÿ™Žโ€โ™‚๏ธ", + ":pouting_woman:": "๐Ÿ™Ž", + ":pr:": "๐Ÿ‡ต๐Ÿ‡ท", + ":pray:": "๐Ÿ™", + ":pray_tone1:": "๐Ÿ™๐Ÿป", + ":pray_tone2:": "๐Ÿ™๐Ÿผ", + ":pray_tone3:": "๐Ÿ™๐Ÿฝ", + ":pray_tone4:": "๐Ÿ™๐Ÿพ", + ":pray_tone5:": "๐Ÿ™๐Ÿฟ", + ":prayer_beads:": "๐Ÿ“ฟ", + ":pregnant_woman:": "๐Ÿคฐ", + ":pregnant_woman_tone1:": "๐Ÿคฐ๐Ÿป", + ":pregnant_woman_tone2:": "๐Ÿคฐ๐Ÿผ", + ":pregnant_woman_tone3:": "๐Ÿคฐ๐Ÿฝ", + ":pregnant_woman_tone4:": "๐Ÿคฐ๐Ÿพ", + ":pregnant_woman_tone5:": "๐Ÿคฐ๐Ÿฟ", + ":pretzel:": "๐Ÿฅจ", + ":previous_track:": "โฎ๏ธ", + ":previous_track_button:": "โฎ", + ":prince:": "๐Ÿคด", + ":prince_tone1:": "๐Ÿคด๐Ÿป", + ":prince_tone2:": "๐Ÿคด๐Ÿผ", + ":prince_tone3:": "๐Ÿคด๐Ÿฝ", + ":prince_tone4:": "๐Ÿคด๐Ÿพ", + ":prince_tone5:": "๐Ÿคด๐Ÿฟ", + ":princess:": "๐Ÿ‘ธ", + ":princess_tone1:": "๐Ÿ‘ธ๐Ÿป", + ":princess_tone2:": "๐Ÿ‘ธ๐Ÿผ", + ":princess_tone3:": "๐Ÿ‘ธ๐Ÿฝ", + ":princess_tone4:": "๐Ÿ‘ธ๐Ÿพ", + ":princess_tone5:": "๐Ÿ‘ธ๐Ÿฟ", + ":printer:": "๐Ÿ–จ๏ธ", + ":probing_cane:": "๐Ÿฆฏ", + ":projector:": "๐Ÿ“ฝ๏ธ", + ":ps:": "๐Ÿ‡ต๐Ÿ‡ธ", + ":pt:": "๐Ÿ‡ต๐Ÿ‡น", + ":pudding:": "๐Ÿฎ", + ":puerto_rico:": "๐Ÿ‡ต๐Ÿ‡ท", + ":punch:": "๐Ÿ‘Š", + ":punch_tone1:": "๐Ÿ‘Š๐Ÿป", + ":punch_tone2:": "๐Ÿ‘Š๐Ÿผ", + ":punch_tone3:": "๐Ÿ‘Š๐Ÿฝ", + ":punch_tone4:": "๐Ÿ‘Š๐Ÿพ", + ":punch_tone5:": "๐Ÿ‘Š๐Ÿฟ", + ":purple_circle:": "๐ŸŸฃ", + ":purple_heart:": "๐Ÿ’œ", + ":purple_square:": "๐ŸŸช", + ":purse:": "๐Ÿ‘›", + ":pushpin:": "๐Ÿ“Œ", + ":put_litter_in_its_place:": "๐Ÿšฎ", + ":pw:": "๐Ÿ‡ต๐Ÿ‡ผ", + ":py:": "๐Ÿ‡ต๐Ÿ‡พ", + ":qa:": "๐Ÿ‡ถ๐Ÿ‡ฆ", + ":qatar:": "๐Ÿ‡ถ๐Ÿ‡ฆ", + ":question:": "โ“", + ":rabbit2:": "๐Ÿ‡", + ":rabbit:": "๐Ÿฐ", + ":raccoon:": "๐Ÿฆ", + ":race_car:": "๐ŸŽ๏ธ", + ":racehorse:": "๐ŸŽ", + ":racing_car:": "๐ŸŽ๏ธ", + ":racing_motorcycle:": "๐Ÿ๏ธ", + ":radio:": "๐Ÿ“ป", + ":radio_button:": "๐Ÿ”˜", + ":radioactive:": "โ˜ข๏ธ", + ":radioactive_sign:": "โ˜ข๏ธ", + ":rage:": "๐Ÿ˜ก", + ":railroad_track:": "๐Ÿ›ค๏ธ", + ":railway_car:": "๐Ÿšƒ", + ":railway_track:": "๐Ÿ›ค๏ธ", + ":rainbow:": "๐ŸŒˆ", + ":rainbow_flag:": "๐Ÿณ๏ธโ€๐ŸŒˆ", + ":raised_back_of_hand:": "๐Ÿคš", + ":raised_back_of_hand_tone1:": "๐Ÿคš๐Ÿป", + ":raised_back_of_hand_tone2:": "๐Ÿคš๐Ÿผ", + ":raised_back_of_hand_tone3:": "๐Ÿคš๐Ÿฝ", + ":raised_back_of_hand_tone4:": "๐Ÿคš๐Ÿพ", + ":raised_back_of_hand_tone5:": "๐Ÿคš๐Ÿฟ", + ":raised_hand:": "โœ‹", + ":raised_hand_tone1:": "โœ‹๐Ÿป", + ":raised_hand_tone2:": "โœ‹๐Ÿผ", + ":raised_hand_tone3:": "โœ‹๐Ÿฝ", + ":raised_hand_tone4:": "โœ‹๐Ÿพ", + ":raised_hand_tone5:": "โœ‹๐Ÿฟ", + ":raised_hand_with_fingers_splayed:": "๐Ÿ–", + ":raised_hand_with_fingers_splayed_tone1:": "๐Ÿ–๐Ÿป", + ":raised_hand_with_fingers_splayed_tone2:": "๐Ÿ–๐Ÿผ", + ":raised_hand_with_fingers_splayed_tone3:": "๐Ÿ–๐Ÿฝ", + ":raised_hand_with_fingers_splayed_tone4:": "๐Ÿ–๐Ÿพ", + ":raised_hand_with_fingers_splayed_tone5:": "๐Ÿ–๐Ÿฟ", + ":raised_hand_with_part_between_middle_and_ring_fingers:": "๐Ÿ––", + ":raised_hand_with_part_between_middle_and_ring_fingers_tone1:": "๐Ÿ––๐Ÿป", + ":raised_hand_with_part_between_middle_and_ring_fingers_tone2:": "๐Ÿ––๐Ÿผ", + ":raised_hand_with_part_between_middle_and_ring_fingers_tone3:": "๐Ÿ––๐Ÿฝ", + ":raised_hand_with_part_between_middle_and_ring_fingers_tone4:": "๐Ÿ––๐Ÿพ", + ":raised_hand_with_part_between_middle_and_ring_fingers_tone5:": "๐Ÿ––๐Ÿฟ", + ":raised_hands:": "๐Ÿ™Œ", + ":raised_hands_tone1:": "๐Ÿ™Œ๐Ÿป", + ":raised_hands_tone2:": "๐Ÿ™Œ๐Ÿผ", + ":raised_hands_tone3:": "๐Ÿ™Œ๐Ÿฝ", + ":raised_hands_tone4:": "๐Ÿ™Œ๐Ÿพ", + ":raised_hands_tone5:": "๐Ÿ™Œ๐Ÿฟ", + ":raising_hand:": "๐Ÿ™‹", + ":raising_hand_man:": "๐Ÿ™‹โ€โ™‚๏ธ", + ":raising_hand_tone1:": "๐Ÿ™‹๐Ÿป", + ":raising_hand_tone2:": "๐Ÿ™‹๐Ÿผ", + ":raising_hand_tone3:": "๐Ÿ™‹๐Ÿฝ", + ":raising_hand_tone4:": "๐Ÿ™‹๐Ÿพ", + ":raising_hand_tone5:": "๐Ÿ™‹๐Ÿฟ", + ":raising_hand_woman:": "๐Ÿ™‹", + ":ram:": "๐Ÿ", + ":ramen:": "๐Ÿœ", + ":rat:": "๐Ÿ€", + ":razor:": "๐Ÿช’", + ":re:": "๐Ÿ‡ท๐Ÿ‡ช", + ":receipt:": "๐Ÿงพ", + ":record_button:": "โบ๏ธ", + ":recycle:": "โ™ป๏ธ", + ":red_car:": "๐Ÿš—", + ":red_circle:": "๐Ÿ”ด", + ":red_envelope:": "๐Ÿงง", + ":red_haired:": "๐Ÿฆฐ", + ":red_square:": "๐ŸŸฅ", + ":regional_indicator_a:": "๐Ÿ‡ฆ", + ":regional_indicator_b:": "๐Ÿ‡ง", + ":regional_indicator_c:": "๐Ÿ‡จ", + ":regional_indicator_d:": "๐Ÿ‡ฉ", + ":regional_indicator_e:": "๐Ÿ‡ช", + ":regional_indicator_f:": "๐Ÿ‡ซ", + ":regional_indicator_g:": "๐Ÿ‡ฌ", + ":regional_indicator_h:": "๐Ÿ‡ญ", + ":regional_indicator_i:": "๐Ÿ‡ฎ", + ":regional_indicator_j:": "๐Ÿ‡ฏ", + ":regional_indicator_k:": "๐Ÿ‡ฐ", + ":regional_indicator_l:": "๐Ÿ‡ฑ", + ":regional_indicator_m:": "๐Ÿ‡ฒ", + ":regional_indicator_n:": "๐Ÿ‡ณ", + ":regional_indicator_o:": "๐Ÿ‡ด", + ":regional_indicator_p:": "๐Ÿ‡ต", + ":regional_indicator_q:": "๐Ÿ‡ถ", + ":regional_indicator_r:": "๐Ÿ‡ท", + ":regional_indicator_s:": "๐Ÿ‡ธ", + ":regional_indicator_t:": "๐Ÿ‡น", + ":regional_indicator_u:": "๐Ÿ‡บ", + ":regional_indicator_v:": "๐Ÿ‡ป", + ":regional_indicator_w:": "๐Ÿ‡ผ", + ":regional_indicator_x:": "๐Ÿ‡ฝ", + ":regional_indicator_y:": "๐Ÿ‡พ", + ":regional_indicator_z:": "๐Ÿ‡ฟ", + ":registered:": "ยฎ๏ธ", + ":relaxed:": "โ˜บ๏ธ", + ":relieved:": "๐Ÿ˜Œ", + ":reminder_ribbon:": "๐ŸŽ—๏ธ", + ":repeat:": "๐Ÿ”", + ":repeat_one:": "๐Ÿ”‚", + ":rescue_worker_helmet:": "โ›‘", + ":restroom:": "๐Ÿšป", + ":reunion:": "๐Ÿ‡ท๐Ÿ‡ช", + ":reversed_hand_with_middle_finger_extended:": "๐Ÿ–•", + ":reversed_hand_with_middle_finger_extended_tone1:": "๐Ÿ–•๐Ÿป", + ":reversed_hand_with_middle_finger_extended_tone2:": "๐Ÿ–•๐Ÿผ", + ":reversed_hand_with_middle_finger_extended_tone3:": "๐Ÿ–•๐Ÿฝ", + ":reversed_hand_with_middle_finger_extended_tone4:": "๐Ÿ–•๐Ÿพ", + ":reversed_hand_with_middle_finger_extended_tone5:": "๐Ÿ–•๐Ÿฟ", + ":revolving_hearts:": "๐Ÿ’ž", + ":rewind:": "โช", + ":rhino:": "๐Ÿฆ", + ":rhinoceros:": "๐Ÿฆ", + ":ribbon:": "๐ŸŽ€", + ":rice:": "๐Ÿš", + ":rice_ball:": "๐Ÿ™", + ":rice_cracker:": "๐Ÿ˜", + ":rice_scene:": "๐ŸŽ‘", + ":right_anger_bubble:": "๐Ÿ—ฏ๏ธ", + ":right_facing_fist:": "๐Ÿคœ", + ":right_facing_fist_tone1:": "๐Ÿคœ๐Ÿป", + ":right_facing_fist_tone2:": "๐Ÿคœ๐Ÿผ", + ":right_facing_fist_tone3:": "๐Ÿคœ๐Ÿฝ", + ":right_facing_fist_tone4:": "๐Ÿคœ๐Ÿพ", + ":right_facing_fist_tone5:": "๐Ÿคœ๐Ÿฟ", + ":right_fist:": "๐Ÿคœ", + ":right_fist_tone1:": "๐Ÿคœ๐Ÿป", + ":right_fist_tone2:": "๐Ÿคœ๐Ÿผ", + ":right_fist_tone3:": "๐Ÿคœ๐Ÿฝ", + ":right_fist_tone4:": "๐Ÿคœ๐Ÿพ", + ":right_fist_tone5:": "๐Ÿคœ๐Ÿฟ", + ":ring:": "๐Ÿ’", + ":ringed_planet:": "๐Ÿช", + ":ro:": "๐Ÿ‡ท๐Ÿ‡ด", + ":robot:": "๐Ÿค–", + ":robot_face:": "๐Ÿค–", + ":rock:": "๐Ÿชจ", + ":rocket:": "๐Ÿš€", + ":rofl:": "๐Ÿคฃ", + ":roll_eyes:": "๐Ÿ™„", + ":roll_of_paper:": "๐Ÿงป", + ":rolled_up_newspaper:": "๐Ÿ—ž๏ธ", + ":roller_coaster:": "๐ŸŽข", + ":roller_skate:": "๐Ÿ›ผ", + ":rolling_eyes:": "๐Ÿ™„", + ":rolling_on_the_floor_laughing:": "๐Ÿคฃ", + ":romania:": "๐Ÿ‡ท๐Ÿ‡ด", + ":rooster:": "๐Ÿ“", + ":rose:": "๐ŸŒน", + ":rosette:": "๐Ÿต๏ธ", + ":rotating_light:": "๐Ÿšจ", + ":round_pushpin:": "๐Ÿ“", + ":rowboat:": "๐Ÿšฃ", + ":rowboat_tone1:": "๐Ÿšฃ๐Ÿป", + ":rowboat_tone2:": "๐Ÿšฃ๐Ÿผ", + ":rowboat_tone3:": "๐Ÿšฃ๐Ÿฝ", + ":rowboat_tone4:": "๐Ÿšฃ๐Ÿพ", + ":rowboat_tone5:": "๐Ÿšฃ๐Ÿฟ", + ":rowing_man:": "๐Ÿšฃ", + ":rowing_woman:": "๐Ÿšฃโ€โ™€๏ธ", + ":rs:": "๐Ÿ‡ท๐Ÿ‡ธ", + ":ru:": "๐Ÿ‡ท๐Ÿ‡บ", + ":rugby_football:": "๐Ÿ‰", + ":runner:": "๐Ÿƒ", + ":runner_tone1:": "๐Ÿƒ๐Ÿป", + ":runner_tone2:": "๐Ÿƒ๐Ÿผ", + ":runner_tone3:": "๐Ÿƒ๐Ÿฝ", + ":runner_tone4:": "๐Ÿƒ๐Ÿพ", + ":runner_tone5:": "๐Ÿƒ๐Ÿฟ", + ":running_man:": "๐Ÿƒ", + ":running_shirt_with_sash:": "๐ŸŽฝ", + ":running_woman:": "๐Ÿƒโ€โ™€๏ธ", + ":russia:": "๐Ÿ‡ท๐Ÿ‡บ", + ":rw:": "๐Ÿ‡ท๐Ÿ‡ผ", + ":rwanda:": "๐Ÿ‡ท๐Ÿ‡ผ", + ":sa:": "๐Ÿˆ‚๏ธ", + ":safety_pin:": "๐Ÿงท", + ":safety_vest:": "๐Ÿฆบ", + ":sagittarius:": "โ™", + ":sailboat:": "โ›ต", + ":saint_martin:": "๐Ÿ‡ฒ๐Ÿ‡ซ", + ":sake:": "๐Ÿถ", + ":salad:": "๐Ÿฅ—", + ":salt:": "๐Ÿง‚", + ":samoa:": "๐Ÿ‡ผ๐Ÿ‡ธ", + ":san_marino:": "๐Ÿ‡ธ๐Ÿ‡ฒ", + ":sandal:": "๐Ÿ‘ก", + ":sandwich:": "๐Ÿฅช", + ":santa:": "๐ŸŽ…", + ":santa_tone1:": "๐ŸŽ…๐Ÿป", + ":santa_tone2:": "๐ŸŽ…๐Ÿผ", + ":santa_tone3:": "๐ŸŽ…๐Ÿฝ", + ":santa_tone4:": "๐ŸŽ…๐Ÿพ", + ":santa_tone5:": "๐ŸŽ…๐Ÿฟ", + ":sao_tome_principe:": "๐Ÿ‡ธ๐Ÿ‡น", + ":sari:": "๐Ÿฅป", + ":satellite:": "๐Ÿ“ก", + ":satellite_orbital:": "๐Ÿ›ฐ๏ธ", + ":satisfied:": "๐Ÿ˜†", + ":saudi:": "๐Ÿ‡ธ๐Ÿ‡ฆ", + ":saudi_arabia:": "๐Ÿ‡ธ๐Ÿ‡ฆ", + ":saudiarabia:": "๐Ÿ‡ธ๐Ÿ‡ฆ", + ":sauropod:": "๐Ÿฆ•", + ":saxophone:": "๐ŸŽท", + ":sb:": "๐Ÿ‡ธ๐Ÿ‡ง", + ":sc:": "๐Ÿ‡ธ๐Ÿ‡จ", + ":scales:": "โš–๏ธ", + ":scarf:": "๐Ÿงฃ", + ":school:": "๐Ÿซ", + ":school_satchel:": "๐ŸŽ’", + ":scientist:": "๐Ÿง‘โ€๐Ÿ”ฌ", + ":scientist_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ”ฌ", + ":scientist_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿ”ฌ", + ":scientist_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿ”ฌ", + ":scientist_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿ”ฌ", + ":scientist_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ”ฌ", + ":scientist_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿ”ฌ", + ":scientist_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿ”ฌ", + ":scientist_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ”ฌ", + ":scientist_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿ”ฌ", + ":scientist_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ”ฌ", + ":scissors:": "โœ‚๏ธ", + ":scooter:": "๐Ÿ›ด", + ":scorpion:": "๐Ÿฆ‚", + ":scorpius:": "โ™", + ":scotland:": "๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ", + ":scream:": "๐Ÿ˜ฑ", + ":scream_cat:": "๐Ÿ™€", + ":screwdriver:": "๐Ÿช›", + ":scroll:": "๐Ÿ“œ", + ":sd:": "๐Ÿ‡ธ๐Ÿ‡ฉ", + ":se:": "๐Ÿ‡ธ๐Ÿ‡ช", + ":seal:": "๐Ÿฆญ", + ":seat:": "๐Ÿ’บ", + ":second_place:": "๐Ÿฅˆ", + ":second_place_medal:": "๐Ÿฅˆ", + ":secret:": "ใŠ™๏ธ", + ":see_no_evil:": "๐Ÿ™ˆ", + ":seedling:": "๐ŸŒฑ", + ":selfie:": "๐Ÿคณ", + ":selfie_tone1:": "๐Ÿคณ๐Ÿป", + ":selfie_tone2:": "๐Ÿคณ๐Ÿผ", + ":selfie_tone3:": "๐Ÿคณ๐Ÿฝ", + ":selfie_tone4:": "๐Ÿคณ๐Ÿพ", + ":selfie_tone5:": "๐Ÿคณ๐Ÿฟ", + ":senegal:": "๐Ÿ‡ธ๐Ÿ‡ณ", + ":serbia:": "๐Ÿ‡ท๐Ÿ‡ธ", + ":service_dog:": "๐Ÿ•โ€๐Ÿฆบ", + ":seven:": "7๏ธโƒฃ", + ":sewing_needle:": "๐Ÿชก", + ":seychelles:": "๐Ÿ‡ธ๐Ÿ‡จ", + ":sg:": "๐Ÿ‡ธ๐Ÿ‡ฌ", + ":sh:": "๐Ÿ‡ธ๐Ÿ‡ญ", + ":shaking_hands:": "๐Ÿค", + ":shaking_hands_tone1:": "๐Ÿค๐Ÿป", + ":shaking_hands_tone2:": "๐Ÿค๐Ÿผ", + ":shaking_hands_tone3:": "๐Ÿค๐Ÿฝ", + ":shaking_hands_tone4:": "๐Ÿค๐Ÿพ", + ":shaking_hands_tone5:": "๐Ÿค๐Ÿฟ", + ":shallow_pan_of_food:": "๐Ÿฅ˜", + ":shamrock:": "โ˜˜๏ธ", + ":shark:": "๐Ÿฆˆ", + ":shaved_ice:": "๐Ÿง", + ":sheep:": "๐Ÿ‘", + ":shell:": "๐Ÿš", + ":shelled_peanut:": "๐Ÿฅœ", + ":shield:": "๐Ÿ›ก๏ธ", + ":shinto_shrine:": "โ›ฉ๏ธ", + ":ship:": "๐Ÿšข", + ":shirt:": "๐Ÿ‘•", + ":shit:": "๐Ÿ’ฉ", + ":shopping:": "๐Ÿ›", + ":shopping_bags:": "๐Ÿ›๏ธ", + ":shopping_cart:": "๐Ÿ›’", + ":shopping_trolley:": "๐Ÿ›’", + ":shorts:": "๐Ÿฉณ", + ":shower:": "๐Ÿšฟ", + ":shrimp:": "๐Ÿฆ", + ":shrug:": "๐Ÿคท", + ":shrug_tone1:": "๐Ÿคท๐Ÿป", + ":shrug_tone2:": "๐Ÿคท๐Ÿผ", + ":shrug_tone3:": "๐Ÿคท๐Ÿฝ", + ":shrug_tone4:": "๐Ÿคท๐Ÿพ", + ":shrug_tone5:": "๐Ÿคท๐Ÿฟ", + ":shushing_face:": "๐Ÿคซ", + ":si:": "๐Ÿ‡ธ๐Ÿ‡ฎ", + ":sick:": "๐Ÿคข", + ":sierra_leone:": "๐Ÿ‡ธ๐Ÿ‡ฑ", + ":sign_of_the_horns:": "๐Ÿค˜", + ":sign_of_the_horns_tone1:": "๐Ÿค˜๐Ÿป", + ":sign_of_the_horns_tone2:": "๐Ÿค˜๐Ÿผ", + ":sign_of_the_horns_tone3:": "๐Ÿค˜๐Ÿฝ", + ":sign_of_the_horns_tone4:": "๐Ÿค˜๐Ÿพ", + ":sign_of_the_horns_tone5:": "๐Ÿค˜๐Ÿฟ", + ":signal_strength:": "๐Ÿ“ถ", + ":singapore:": "๐Ÿ‡ธ๐Ÿ‡ฌ", + ":singer:": "๐Ÿง‘โ€๐ŸŽค", + ":singer_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽค", + ":singer_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐ŸŽค", + ":singer_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐ŸŽค", + ":singer_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐ŸŽค", + ":singer_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽค", + ":singer_tone1:": "๐Ÿง‘๐Ÿปโ€๐ŸŽค", + ":singer_tone2:": "๐Ÿง‘๐Ÿผโ€๐ŸŽค", + ":singer_tone3:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽค", + ":singer_tone4:": "๐Ÿง‘๐Ÿพโ€๐ŸŽค", + ":singer_tone5:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽค", + ":sint_maarten:": "๐Ÿ‡ธ๐Ÿ‡ฝ", + ":six:": "6๏ธโƒฃ", + ":six_pointed_star:": "๐Ÿ”ฏ", + ":sj:": "๐Ÿ‡ธ๐Ÿ‡ฏ", + ":sk:": "๐Ÿ‡ธ๐Ÿ‡ฐ", + ":skateboard:": "๐Ÿ›น", + ":skeleton:": "๐Ÿ’€", + ":ski:": "๐ŸŽฟ", + ":skier:": "โ›ท๏ธ", + ":skull:": "๐Ÿ’€", + ":skull_and_crossbones:": "โ˜ ๏ธ", + ":skull_crossbones:": "โ˜ ๏ธ", + ":skunk:": "๐Ÿฆจ", + ":sl:": "๐Ÿ‡ธ๐Ÿ‡ฑ", + ":sled:": "๐Ÿ›ท", + ":sleeping:": "๐Ÿ˜ด", + ":sleeping_accommodation:": "๐Ÿ›Œ", + ":sleeping_bed:": "๐Ÿ›Œ", + ":sleepy:": "๐Ÿ˜ช", + ":sleuth_or_spy:": "๐Ÿ•ต", + ":sleuth_or_spy_tone1:": "๐Ÿ•ต๐Ÿป", + ":sleuth_or_spy_tone2:": "๐Ÿ•ต๐Ÿผ", + ":sleuth_or_spy_tone3:": "๐Ÿ•ต๐Ÿฝ", + ":sleuth_or_spy_tone4:": "๐Ÿ•ต๐Ÿพ", + ":sleuth_or_spy_tone5:": "๐Ÿ•ต๐Ÿฟ", + ":slight_frown:": "๐Ÿ™", + ":slight_smile:": "๐Ÿ™‚", + ":slightly_frowning_face:": "๐Ÿ™", + ":slightly_smiling_face:": "๐Ÿ™‚", + ":slot_machine:": "๐ŸŽฐ", + ":sloth:": "๐Ÿฆฅ", + ":slovakia:": "๐Ÿ‡ธ๐Ÿ‡ฐ", + ":slovenia:": "๐Ÿ‡ธ๐Ÿ‡ฎ", + ":sm:": "๐Ÿ‡ธ๐Ÿ‡ฒ", + ":small_airplane:": "๐Ÿ›ฉ๏ธ", + ":small_blue_diamond:": "๐Ÿ”น", + ":small_orange_diamond:": "๐Ÿ”ธ", + ":small_red_triangle:": "๐Ÿ”บ", + ":small_red_triangle_down:": "๐Ÿ”ป", + ":smile:": "๐Ÿ˜„", + ":smile_cat:": "๐Ÿ˜ธ", + ":smiley:": "๐Ÿ˜ƒ", + ":smiley_cat:": "๐Ÿ˜บ", + ":smiling_face_with_3_hearts:": "๐Ÿฅฐ", + ":smiling_face_with_tear:": "๐Ÿฅฒ", + ":smiling_imp:": "๐Ÿ˜ˆ", + ":smirk:": "๐Ÿ˜", + ":smirk_cat:": "๐Ÿ˜ผ", + ":smoking:": "๐Ÿšฌ", + ":sn:": "๐Ÿ‡ธ๐Ÿ‡ณ", + ":snail:": "๐ŸŒ", + ":snake:": "๐Ÿ", + ":sneeze:": "๐Ÿคง", + ":sneezing_face:": "๐Ÿคง", + ":snow_capped_mountain:": "๐Ÿ”๏ธ", + ":snowboarder:": "๐Ÿ‚", + ":snowboarder_dark_skin_tone:": "๐Ÿ‚๐Ÿฟ", + ":snowboarder_light_skin_tone:": "๐Ÿ‚๐Ÿป", + ":snowboarder_medium_dark_skin_tone:": "๐Ÿ‚๐Ÿพ", + ":snowboarder_medium_light_skin_tone:": "๐Ÿ‚๐Ÿผ", + ":snowboarder_medium_skin_tone:": "๐Ÿ‚๐Ÿฝ", + ":snowboarder_tone1:": "๐Ÿ‚๐Ÿป", + ":snowboarder_tone2:": "๐Ÿ‚๐Ÿผ", + ":snowboarder_tone3:": "๐Ÿ‚๐Ÿฝ", + ":snowboarder_tone4:": "๐Ÿ‚๐Ÿพ", + ":snowboarder_tone5:": "๐Ÿ‚๐Ÿฟ", + ":snowflake:": "โ„๏ธ", + ":snowman2:": "โ˜ƒ๏ธ", + ":snowman:": "โ›„", + ":snowman_with_snow:": "โ˜ƒ๏ธ", + ":so:": "๐Ÿ‡ธ๐Ÿ‡ด", + ":soap:": "๐Ÿงผ", + ":sob:": "๐Ÿ˜ญ", + ":soccer:": "โšฝ", + ":socks:": "๐Ÿงฆ", + ":softball:": "๐ŸฅŽ", + ":solomon_islands:": "๐Ÿ‡ธ๐Ÿ‡ง", + ":somalia:": "๐Ÿ‡ธ๐Ÿ‡ด", + ":soon:": "๐Ÿ”œ", + ":sos:": "๐Ÿ†˜", + ":sound:": "๐Ÿ”‰", + ":south_africa:": "๐Ÿ‡ฟ๐Ÿ‡ฆ", + ":south_georgia_south_sandwich_islands:": "๐Ÿ‡ฌ๐Ÿ‡ธ", + ":south_sudan:": "๐Ÿ‡ธ๐Ÿ‡ธ", + ":space_invader:": "๐Ÿ‘พ", + ":spades:": "โ™ ๏ธ", + ":spaghetti:": "๐Ÿ", + ":spain:": "๐Ÿ‡ช๐Ÿ‡ธ", + ":sparkle:": "โ‡๏ธ", + ":sparkler:": "๐ŸŽ‡", + ":sparkles:": "โœจ", + ":sparkling_heart:": "๐Ÿ’–", + ":speak_no_evil:": "๐Ÿ™Š", + ":speaker:": "๐Ÿ”ˆ", + ":speaking_head:": "๐Ÿ—ฃ๏ธ", + ":speaking_head_in_silhouette:": "๐Ÿ—ฃ๏ธ", + ":speech_balloon:": "๐Ÿ’ฌ", + ":speech_left:": "๐Ÿ—จ๏ธ", + ":speedboat:": "๐Ÿšค", + ":spider:": "๐Ÿ•ท๏ธ", + ":spider_web:": "๐Ÿ•ธ๏ธ", + ":spiral_calendar:": "๐Ÿ—“", + ":spiral_calendar_pad:": "๐Ÿ—“๏ธ", + ":spiral_note_pad:": "๐Ÿ—’๏ธ", + ":spiral_notepad:": "๐Ÿ—’", + ":sponge:": "๐Ÿงฝ", + ":spoon:": "๐Ÿฅ„", + ":sports_medal:": "๐Ÿ…", + ":spy:": "๐Ÿ•ต", + ":spy_tone1:": "๐Ÿ•ต๐Ÿป", + ":spy_tone2:": "๐Ÿ•ต๐Ÿผ", + ":spy_tone3:": "๐Ÿ•ต๐Ÿฝ", + ":spy_tone4:": "๐Ÿ•ต๐Ÿพ", + ":spy_tone5:": "๐Ÿ•ต๐Ÿฟ", + ":squeeze_bottle:": "๐Ÿงด", + ":squid:": "๐Ÿฆ‘", + ":sr:": "๐Ÿ‡ธ๐Ÿ‡ท", + ":sri_lanka:": "๐Ÿ‡ฑ๐Ÿ‡ฐ", + ":ss:": "๐Ÿ‡ธ๐Ÿ‡ธ", + ":st:": "๐Ÿ‡ธ๐Ÿ‡น", + ":st_barthelemy:": "๐Ÿ‡ง๐Ÿ‡ฑ", + ":st_helena:": "๐Ÿ‡ธ๐Ÿ‡ญ", + ":st_kitts_nevis:": "๐Ÿ‡ฐ๐Ÿ‡ณ", + ":st_lucia:": "๐Ÿ‡ฑ๐Ÿ‡จ", + ":st_pierre_miquelon:": "๐Ÿ‡ต๐Ÿ‡ฒ", + ":st_vincent_grenadines:": "๐Ÿ‡ป๐Ÿ‡จ", + ":stadium:": "๐ŸŸ๏ธ", + ":star2:": "๐ŸŒŸ", + ":star:": "โญ", + ":star_and_crescent:": "โ˜ช๏ธ", + ":star_of_david:": "โœก๏ธ", + ":star_struck:": "๐Ÿคฉ", + ":stars:": "๐ŸŒ ", + ":station:": "๐Ÿš‰", + ":statue_of_liberty:": "๐Ÿ—ฝ", + ":steam_locomotive:": "๐Ÿš‚", + ":stethoscope:": "๐Ÿฉบ", + ":stew:": "๐Ÿฒ", + ":stop_button:": "โน๏ธ", + ":stop_sign:": "๐Ÿ›‘", + ":stopwatch:": "โฑ๏ธ", + ":straight_ruler:": "๐Ÿ“", + ":strawberry:": "๐Ÿ“", + ":stuck_out_tongue:": "๐Ÿ˜›", + ":stuck_out_tongue_closed_eyes:": "๐Ÿ˜", + ":stuck_out_tongue_winking_eye:": "๐Ÿ˜œ", + ":student:": "๐Ÿง‘โ€๐ŸŽ“", + ":student_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽ“", + ":student_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐ŸŽ“", + ":student_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐ŸŽ“", + ":student_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐ŸŽ“", + ":student_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽ“", + ":student_tone1:": "๐Ÿง‘๐Ÿปโ€๐ŸŽ“", + ":student_tone2:": "๐Ÿง‘๐Ÿผโ€๐ŸŽ“", + ":student_tone3:": "๐Ÿง‘๐Ÿฝโ€๐ŸŽ“", + ":student_tone4:": "๐Ÿง‘๐Ÿพโ€๐ŸŽ“", + ":student_tone5:": "๐Ÿง‘๐Ÿฟโ€๐ŸŽ“", + ":studio_microphone:": "๐ŸŽ™๏ธ", + ":stuffed_flatbread:": "๐Ÿฅ™", + ":stuffed_pita:": "๐Ÿฅ™", + ":sudan:": "๐Ÿ‡ธ๐Ÿ‡ฉ", + ":sun_behind_large_cloud:": "๐ŸŒฅ", + ":sun_behind_rain_cloud:": "๐ŸŒฆ", + ":sun_behind_small_cloud:": "๐ŸŒค", + ":sun_with_face:": "๐ŸŒž", + ":sunflower:": "๐ŸŒป", + ":sunglasses:": "๐Ÿ˜Ž", + ":sunny:": "โ˜€๏ธ", + ":sunrise:": "๐ŸŒ…", + ":sunrise_over_mountains:": "๐ŸŒ„", + ":superhero:": "๐Ÿฆธ", + ":superhero_dark_skin_tone:": "๐Ÿฆธ๐Ÿฟ", + ":superhero_light_skin_tone:": "๐Ÿฆธ๐Ÿป", + ":superhero_medium_dark_skin_tone:": "๐Ÿฆธ๐Ÿพ", + ":superhero_medium_light_skin_tone:": "๐Ÿฆธ๐Ÿผ", + ":superhero_medium_skin_tone:": "๐Ÿฆธ๐Ÿฝ", + ":superhero_tone1:": "๐Ÿฆธ๐Ÿป", + ":superhero_tone2:": "๐Ÿฆธ๐Ÿผ", + ":superhero_tone3:": "๐Ÿฆธ๐Ÿฝ", + ":superhero_tone4:": "๐Ÿฆธ๐Ÿพ", + ":superhero_tone5:": "๐Ÿฆธ๐Ÿฟ", + ":supervillain:": "๐Ÿฆน", + ":supervillain_dark_skin_tone:": "๐Ÿฆน๐Ÿฟ", + ":supervillain_light_skin_tone:": "๐Ÿฆน๐Ÿป", + ":supervillain_medium_dark_skin_tone:": "๐Ÿฆน๐Ÿพ", + ":supervillain_medium_light_skin_tone:": "๐Ÿฆน๐Ÿผ", + ":supervillain_medium_skin_tone:": "๐Ÿฆน๐Ÿฝ", + ":supervillain_tone1:": "๐Ÿฆน๐Ÿป", + ":supervillain_tone2:": "๐Ÿฆน๐Ÿผ", + ":supervillain_tone3:": "๐Ÿฆน๐Ÿฝ", + ":supervillain_tone4:": "๐Ÿฆน๐Ÿพ", + ":supervillain_tone5:": "๐Ÿฆน๐Ÿฟ", + ":surfer:": "๐Ÿ„", + ":surfer_tone1:": "๐Ÿ„๐Ÿป", + ":surfer_tone2:": "๐Ÿ„๐Ÿผ", + ":surfer_tone3:": "๐Ÿ„๐Ÿฝ", + ":surfer_tone4:": "๐Ÿ„๐Ÿพ", + ":surfer_tone5:": "๐Ÿ„๐Ÿฟ", + ":surfing_man:": "๐Ÿ„", + ":surfing_woman:": "๐Ÿ„โ€โ™€๏ธ", + ":suriname:": "๐Ÿ‡ธ๐Ÿ‡ท", + ":sushi:": "๐Ÿฃ", + ":suspension_railway:": "๐ŸšŸ", + ":sv:": "๐Ÿ‡ธ๐Ÿ‡ป", + ":swan:": "๐Ÿฆข", + ":swaziland:": "๐Ÿ‡ธ๐Ÿ‡ฟ", + ":sweat:": "๐Ÿ˜“", + ":sweat_drops:": "๐Ÿ’ฆ", + ":sweat_smile:": "๐Ÿ˜…", + ":sweden:": "๐Ÿ‡ธ๐Ÿ‡ช", + ":sweet_potato:": "๐Ÿ ", + ":swimmer:": "๐ŸŠ", + ":swimmer_tone1:": "๐ŸŠ๐Ÿป", + ":swimmer_tone2:": "๐ŸŠ๐Ÿผ", + ":swimmer_tone3:": "๐ŸŠ๐Ÿฝ", + ":swimmer_tone4:": "๐ŸŠ๐Ÿพ", + ":swimmer_tone5:": "๐ŸŠ๐Ÿฟ", + ":swimming_man:": "๐ŸŠ", + ":swimming_woman:": "๐ŸŠโ€โ™€๏ธ", + ":switzerland:": "๐Ÿ‡จ๐Ÿ‡ญ", + ":sx:": "๐Ÿ‡ธ๐Ÿ‡ฝ", + ":sy:": "๐Ÿ‡ธ๐Ÿ‡พ", + ":symbols:": "๐Ÿ”ฃ", + ":synagogue:": "๐Ÿ•", + ":syria:": "๐Ÿ‡ธ๐Ÿ‡พ", + ":syringe:": "๐Ÿ’‰", + ":sz:": "๐Ÿ‡ธ๐Ÿ‡ฟ", + ":t_rex:": "๐Ÿฆ–", + ":ta:": "๐Ÿ‡น๐Ÿ‡ฆ", + ":table_tennis:": "๐Ÿ“", + ":taco:": "๐ŸŒฎ", + ":tada:": "๐ŸŽ‰", + ":taiwan:": "๐Ÿ‡น๐Ÿ‡ผ", + ":tajikistan:": "๐Ÿ‡น๐Ÿ‡ฏ", + ":takeout_box:": "๐Ÿฅก", + ":tamale:": "๐Ÿซ”", + ":tanabata_tree:": "๐ŸŽ‹", + ":tangerine:": "๐ŸŠ", + ":tanzania:": "๐Ÿ‡น๐Ÿ‡ฟ", + ":taurus:": "โ™‰", + ":taxi:": "๐Ÿš•", + ":tc:": "๐Ÿ‡น๐Ÿ‡จ", + ":td:": "๐Ÿ‡น๐Ÿ‡ฉ", + ":tea:": "๐Ÿต", + ":teacher:": "๐Ÿง‘โ€๐Ÿซ", + ":teacher_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿซ", + ":teacher_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿซ", + ":teacher_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿซ", + ":teacher_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿซ", + ":teacher_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿซ", + ":teacher_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿซ", + ":teacher_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿซ", + ":teacher_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿซ", + ":teacher_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿซ", + ":teacher_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿซ", + ":teapot:": "๐Ÿซ–", + ":technologist:": "๐Ÿง‘โ€๐Ÿ’ป", + ":technologist_dark_skin_tone:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ’ป", + ":technologist_light_skin_tone:": "๐Ÿง‘๐Ÿปโ€๐Ÿ’ป", + ":technologist_medium_dark_skin_tone:": "๐Ÿง‘๐Ÿพโ€๐Ÿ’ป", + ":technologist_medium_light_skin_tone:": "๐Ÿง‘๐Ÿผโ€๐Ÿ’ป", + ":technologist_medium_skin_tone:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ’ป", + ":technologist_tone1:": "๐Ÿง‘๐Ÿปโ€๐Ÿ’ป", + ":technologist_tone2:": "๐Ÿง‘๐Ÿผโ€๐Ÿ’ป", + ":technologist_tone3:": "๐Ÿง‘๐Ÿฝโ€๐Ÿ’ป", + ":technologist_tone4:": "๐Ÿง‘๐Ÿพโ€๐Ÿ’ป", + ":technologist_tone5:": "๐Ÿง‘๐Ÿฟโ€๐Ÿ’ป", + ":teddy_bear:": "๐Ÿงธ", + ":telephone:": "โ˜Ž๏ธ", + ":telephone_receiver:": "๐Ÿ“ž", + ":telescope:": "๐Ÿ”ญ", + ":ten:": "๐Ÿ”Ÿ", + ":tennis:": "๐ŸŽพ", + ":tent:": "โ›บ", + ":test_tube:": "๐Ÿงช", + ":tf:": "๐Ÿ‡น๐Ÿ‡ซ", + ":tg:": "๐Ÿ‡น๐Ÿ‡ฌ", + ":th:": "๐Ÿ‡น๐Ÿ‡ญ", + ":thailand:": "๐Ÿ‡น๐Ÿ‡ญ", + ":thermometer:": "๐ŸŒก๏ธ", + ":thermometer_face:": "๐Ÿค’", + ":thinking:": "๐Ÿค”", + ":thinking_face:": "๐Ÿค”", + ":third_place:": "๐Ÿฅ‰", + ":third_place_medal:": "๐Ÿฅ‰", + ":thong_sandal:": "๐Ÿฉด", + ":thought_balloon:": "๐Ÿ’ญ", + ":thread:": "๐Ÿงต", + ":three:": "3๏ธโƒฃ", + ":three_button_mouse:": "๐Ÿ–ฑ๏ธ", + ":thumbdown:": "๐Ÿ‘Ž", + ":thumbdown_tone1:": "๐Ÿ‘Ž๐Ÿป", + ":thumbdown_tone2:": "๐Ÿ‘Ž๐Ÿผ", + ":thumbdown_tone3:": "๐Ÿ‘Ž๐Ÿฝ", + ":thumbdown_tone4:": "๐Ÿ‘Ž๐Ÿพ", + ":thumbdown_tone5:": "๐Ÿ‘Ž๐Ÿฟ", + ":thumbsdown:": "๐Ÿ‘Ž", + ":thumbsdown_tone1:": "๐Ÿ‘Ž๐Ÿป", + ":thumbsdown_tone2:": "๐Ÿ‘Ž๐Ÿผ", + ":thumbsdown_tone3:": "๐Ÿ‘Ž๐Ÿฝ", + ":thumbsdown_tone4:": "๐Ÿ‘Ž๐Ÿพ", + ":thumbsdown_tone5:": "๐Ÿ‘Ž๐Ÿฟ", + ":thumbsup:": "๐Ÿ‘", + ":thumbsup_tone1:": "๐Ÿ‘๐Ÿป", + ":thumbsup_tone2:": "๐Ÿ‘๐Ÿผ", + ":thumbsup_tone3:": "๐Ÿ‘๐Ÿฝ", + ":thumbsup_tone4:": "๐Ÿ‘๐Ÿพ", + ":thumbsup_tone5:": "๐Ÿ‘๐Ÿฟ", + ":thumbup:": "๐Ÿ‘", + ":thumbup_tone1:": "๐Ÿ‘๐Ÿป", + ":thumbup_tone2:": "๐Ÿ‘๐Ÿผ", + ":thumbup_tone3:": "๐Ÿ‘๐Ÿฝ", + ":thumbup_tone4:": "๐Ÿ‘๐Ÿพ", + ":thumbup_tone5:": "๐Ÿ‘๐Ÿฟ", + ":thunder_cloud_and_rain:": "โ›ˆ๏ธ", + ":thunder_cloud_rain:": "โ›ˆ๏ธ", + ":ticket:": "๐ŸŽซ", + ":tickets:": "๐ŸŽŸ๏ธ", + ":tiger2:": "๐Ÿ…", + ":tiger:": "๐Ÿฏ", + ":timer:": "โฒ๏ธ", + ":timer_clock:": "โฒ๏ธ", + ":timor_leste:": "๐Ÿ‡น๐Ÿ‡ฑ", + ":tipping_hand_man:": "๐Ÿ’โ€โ™‚๏ธ", + ":tipping_hand_woman:": "๐Ÿ’", + ":tired_face:": "๐Ÿ˜ซ", + ":tj:": "๐Ÿ‡น๐Ÿ‡ฏ", + ":tk:": "๐Ÿ‡น๐Ÿ‡ฐ", + ":tl:": "๐Ÿ‡น๐Ÿ‡ฑ", + ":tm:": "โ„ข๏ธ", + ":tn:": "๐Ÿ‡น๐Ÿ‡ณ", + ":to:": "๐Ÿ‡น๐Ÿ‡ด", + ":togo:": "๐Ÿ‡น๐Ÿ‡ฌ", + ":toilet:": "๐Ÿšฝ", + ":tokelau:": "๐Ÿ‡น๐Ÿ‡ฐ", + ":tokyo_tower:": "๐Ÿ—ผ", + ":tomato:": "๐Ÿ…", + ":tone1:": "๐Ÿป", + ":tone2:": "๐Ÿผ", + ":tone3:": "๐Ÿฝ", + ":tone4:": "๐Ÿพ", + ":tone5:": "๐Ÿฟ", + ":tonga:": "๐Ÿ‡น๐Ÿ‡ด", + ":tongue:": "๐Ÿ‘…", + ":toolbox:": "๐Ÿงฐ", + ":tools:": "๐Ÿ› ๏ธ", + ":tooth:": "๐Ÿฆท", + ":toothbrush:": "๐Ÿชฅ", + ":top:": "๐Ÿ”", + ":tophat:": "๐ŸŽฉ", + ":tornado:": "๐ŸŒช", + ":tr:": "๐Ÿ‡น๐Ÿ‡ท", + ":track_next:": "โญ๏ธ", + ":track_previous:": "โฎ๏ธ", + ":trackball:": "๐Ÿ–ฒ๏ธ", + ":tractor:": "๐Ÿšœ", + ":traffic_light:": "๐Ÿšฅ", + ":train2:": "๐Ÿš†", + ":train:": "๐Ÿš‹", + ":tram:": "๐ŸšŠ", + ":transgender_flag:": "๐Ÿณ๏ธโ€โšง๏ธ", + ":transgender_symbol:": "โšง", + ":triangular_flag_on_post:": "๐Ÿšฉ", + ":triangular_ruler:": "๐Ÿ“", + ":trident:": "๐Ÿ”ฑ", + ":trinidad_tobago:": "๐Ÿ‡น๐Ÿ‡น", + ":tristan_da_cunha:": "๐Ÿ‡น๐Ÿ‡ฆ", + ":triumph:": "๐Ÿ˜ค", + ":trolleybus:": "๐ŸšŽ", + ":trophy:": "๐Ÿ†", + ":tropical_drink:": "๐Ÿน", + ":tropical_fish:": "๐Ÿ ", + ":truck:": "๐Ÿšš", + ":trumpet:": "๐ŸŽบ", + ":tt:": "๐Ÿ‡น๐Ÿ‡น", + ":tulip:": "๐ŸŒท", + ":tumbler_glass:": "๐Ÿฅƒ", + ":tunisia:": "๐Ÿ‡น๐Ÿ‡ณ", + ":turkey:": "๐Ÿฆƒ", + ":turkmenistan:": "๐Ÿ‡น๐Ÿ‡ฒ", + ":turks_caicos_islands:": "๐Ÿ‡น๐Ÿ‡จ", + ":turtle:": "๐Ÿข", + ":tuvalu:": "๐Ÿ‡น๐Ÿ‡ป", + ":tuxedo_tone1:": "๐Ÿคต๐Ÿป", + ":tuxedo_tone2:": "๐Ÿคต๐Ÿผ", + ":tuxedo_tone3:": "๐Ÿคต๐Ÿฝ", + ":tuxedo_tone4:": "๐Ÿคต๐Ÿพ", + ":tuxedo_tone5:": "๐Ÿคต๐Ÿฟ", + ":tv:": "๐Ÿ“บ", + ":tw:": "๐Ÿ‡น๐Ÿ‡ผ", + ":twisted_rightwards_arrows:": "๐Ÿ”€", + ":two:": "2๏ธโƒฃ", + ":two_hearts:": "๐Ÿ’•", + ":two_men_holding_hands:": "๐Ÿ‘ฌ", + ":two_women_holding_hands:": "๐Ÿ‘ญ", + ":tz:": "๐Ÿ‡น๐Ÿ‡ฟ", + ":u5272:": "๐Ÿˆน", + ":u5408:": "๐Ÿˆด", + ":u55b6:": "๐Ÿˆบ", + ":u6307:": "๐Ÿˆฏ", + ":u6708:": "๐Ÿˆท๏ธ", + ":u6709:": "๐Ÿˆถ", + ":u6e80:": "๐Ÿˆต", + ":u7121:": "๐Ÿˆš", + ":u7533:": "๐Ÿˆธ", + ":u7981:": "๐Ÿˆฒ", + ":u7a7a:": "๐Ÿˆณ", + ":ua:": "๐Ÿ‡บ๐Ÿ‡ฆ", + ":ug:": "๐Ÿ‡บ๐Ÿ‡ฌ", + ":uganda:": "๐Ÿ‡บ๐Ÿ‡ฌ", + ":ukraine:": "๐Ÿ‡บ๐Ÿ‡ฆ", + ":um:": "๐Ÿ‡บ๐Ÿ‡ฒ", + ":umbrella2:": "โ˜‚๏ธ", + ":umbrella:": "โ˜”", + ":umbrella_on_ground:": "โ›ฑ๏ธ", + ":unamused:": "๐Ÿ˜’", + ":underage:": "๐Ÿ”ž", + ":unicorn:": "๐Ÿฆ„", + ":unicorn_face:": "๐Ÿฆ„", + ":united_arab_emirates:": "๐Ÿ‡ฆ๐Ÿ‡ช", + ":united_nations:": "๐Ÿ‡บ๐Ÿ‡ณ", + ":united_states:": "๐Ÿ‡บ๐Ÿ‡ธ", + ":unlock:": "๐Ÿ”“", + ":up:": "๐Ÿ†™", + ":upside_down:": "๐Ÿ™ƒ", + ":upside_down_face:": "๐Ÿ™ƒ", + ":urn:": "โšฑ๏ธ", + ":uruguay:": "๐Ÿ‡บ๐Ÿ‡พ", + ":us:": "๐Ÿ‡บ๐Ÿ‡ธ", + ":us_virgin_islands:": "๐Ÿ‡ป๐Ÿ‡ฎ", + ":uy:": "๐Ÿ‡บ๐Ÿ‡พ", + ":uz:": "๐Ÿ‡บ๐Ÿ‡ฟ", + ":uzbekistan:": "๐Ÿ‡บ๐Ÿ‡ฟ", + ":v:": "โœŒ๏ธ", + ":v_tone1:": "โœŒ๐Ÿป", + ":v_tone2:": "โœŒ๐Ÿผ", + ":v_tone3:": "โœŒ๐Ÿฝ", + ":v_tone4:": "โœŒ๐Ÿพ", + ":v_tone5:": "โœŒ๐Ÿฟ", + ":va:": "๐Ÿ‡ป๐Ÿ‡ฆ", + ":vampire:": "๐Ÿง›", + ":vampire_dark_skin_tone:": "๐Ÿง›๐Ÿฟ", + ":vampire_light_skin_tone:": "๐Ÿง›๐Ÿป", + ":vampire_medium_dark_skin_tone:": "๐Ÿง›๐Ÿพ", + ":vampire_medium_light_skin_tone:": "๐Ÿง›๐Ÿผ", + ":vampire_medium_skin_tone:": "๐Ÿง›๐Ÿฝ", + ":vampire_tone1:": "๐Ÿง›๐Ÿป", + ":vampire_tone2:": "๐Ÿง›๐Ÿผ", + ":vampire_tone3:": "๐Ÿง›๐Ÿฝ", + ":vampire_tone4:": "๐Ÿง›๐Ÿพ", + ":vampire_tone5:": "๐Ÿง›๐Ÿฟ", + ":vanuatu:": "๐Ÿ‡ป๐Ÿ‡บ", + ":vatican_city:": "๐Ÿ‡ป๐Ÿ‡ฆ", + ":vc:": "๐Ÿ‡ป๐Ÿ‡จ", + ":ve:": "๐Ÿ‡ป๐Ÿ‡ช", + ":venezuela:": "๐Ÿ‡ป๐Ÿ‡ช", + ":vertical_traffic_light:": "๐Ÿšฆ", + ":vg:": "๐Ÿ‡ป๐Ÿ‡ฌ", + ":vhs:": "๐Ÿ“ผ", + ":vi:": "๐Ÿ‡ป๐Ÿ‡ฎ", + ":vibration_mode:": "๐Ÿ“ณ", + ":video_camera:": "๐Ÿ“น", + ":video_game:": "๐ŸŽฎ", + ":vietnam:": "๐Ÿ‡ป๐Ÿ‡ณ", + ":violin:": "๐ŸŽป", + ":virgo:": "โ™", + ":vn:": "๐Ÿ‡ป๐Ÿ‡ณ", + ":volcano:": "๐ŸŒ‹", + ":volleyball:": "๐Ÿ", + ":vs:": "๐Ÿ†š", + ":vu:": "๐Ÿ‡ป๐Ÿ‡บ", + ":vulcan:": "๐Ÿ––", + ":vulcan_salute:": "๐Ÿ––", + ":vulcan_tone1:": "๐Ÿ––๐Ÿป", + ":vulcan_tone2:": "๐Ÿ––๐Ÿผ", + ":vulcan_tone3:": "๐Ÿ––๐Ÿฝ", + ":vulcan_tone4:": "๐Ÿ––๐Ÿพ", + ":vulcan_tone5:": "๐Ÿ––๐Ÿฟ", + ":waffle:": "๐Ÿง‡", + ":wales:": "๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ", + ":walking:": "๐Ÿšถ", + ":walking_man:": "๐Ÿšถ", + ":walking_tone1:": "๐Ÿšถ๐Ÿป", + ":walking_tone2:": "๐Ÿšถ๐Ÿผ", + ":walking_tone3:": "๐Ÿšถ๐Ÿฝ", + ":walking_tone4:": "๐Ÿšถ๐Ÿพ", + ":walking_tone5:": "๐Ÿšถ๐Ÿฟ", + ":walking_woman:": "๐Ÿšถโ€โ™€๏ธ", + ":wallis_futuna:": "๐Ÿ‡ผ๐Ÿ‡ซ", + ":waning_crescent_moon:": "๐ŸŒ˜", + ":waning_gibbous_moon:": "๐ŸŒ–", + ":warning:": "โš ๏ธ", + ":wastebasket:": "๐Ÿ—‘๏ธ", + ":watch:": "โŒš", + ":water_buffalo:": "๐Ÿƒ", + ":water_polo:": "๐Ÿคฝ", + ":water_polo_tone1:": "๐Ÿคฝ๐Ÿป", + ":water_polo_tone2:": "๐Ÿคฝ๐Ÿผ", + ":water_polo_tone3:": "๐Ÿคฝ๐Ÿฝ", + ":water_polo_tone4:": "๐Ÿคฝ๐Ÿพ", + ":water_polo_tone5:": "๐Ÿคฝ๐Ÿฟ", + ":watermelon:": "๐Ÿ‰", + ":wave:": "๐Ÿ‘‹", + ":wave_tone1:": "๐Ÿ‘‹๐Ÿป", + ":wave_tone2:": "๐Ÿ‘‹๐Ÿผ", + ":wave_tone3:": "๐Ÿ‘‹๐Ÿฝ", + ":wave_tone4:": "๐Ÿ‘‹๐Ÿพ", + ":wave_tone5:": "๐Ÿ‘‹๐Ÿฟ", + ":waving_black_flag:": "๐Ÿด", + ":waving_white_flag:": "๐Ÿณ๏ธ", + ":wavy_dash:": "ใ€ฐ๏ธ", + ":waxing_crescent_moon:": "๐ŸŒ’", + ":waxing_gibbous_moon:": "๐ŸŒ”", + ":wc:": "๐Ÿšพ", + ":weary:": "๐Ÿ˜ฉ", + ":wedding:": "๐Ÿ’’", + ":weight_lifter:": "๐Ÿ‹", + ":weight_lifter_tone1:": "๐Ÿ‹๐Ÿป", + ":weight_lifter_tone2:": "๐Ÿ‹๐Ÿผ", + ":weight_lifter_tone3:": "๐Ÿ‹๐Ÿฝ", + ":weight_lifter_tone4:": "๐Ÿ‹๐Ÿพ", + ":weight_lifter_tone5:": "๐Ÿ‹๐Ÿฟ", + ":weight_lifting_man:": "๐Ÿ‹๏ธ", + ":weight_lifting_woman:": "๐Ÿ‹๏ธโ€โ™€๏ธ", + ":western_sahara:": "๐Ÿ‡ช๐Ÿ‡ญ", + ":wf:": "๐Ÿ‡ผ๐Ÿ‡ซ", + ":whale2:": "๐Ÿ‹", + ":whale:": "๐Ÿณ", + ":wheel_of_dharma:": "โ˜ธ๏ธ", + ":wheelchair:": "โ™ฟ", + ":whisky:": "๐Ÿฅƒ", + ":white_check_mark:": "โœ…", + ":white_circle:": "โšช", + ":white_flag:": "๐Ÿณ๏ธ", + ":white_flower:": "๐Ÿ’ฎ", + ":white_frowning_face:": "โ˜น๏ธ", + ":white_haired:": "๐Ÿฆณ", + ":white_heart:": "๐Ÿค", + ":white_large_square:": "โฌœ", + ":white_medium_small_square:": "โ—ฝ", + ":white_medium_square:": "โ—ป๏ธ", + ":white_small_square:": "โ–ซ๏ธ", + ":white_square_button:": "๐Ÿ”ณ", + ":white_sun_behind_cloud:": "๐ŸŒฅ๏ธ", + ":white_sun_behind_cloud_with_rain:": "๐ŸŒฆ๏ธ", + ":white_sun_cloud:": "๐ŸŒฅ๏ธ", + ":white_sun_rain_cloud:": "๐ŸŒฆ๏ธ", + ":white_sun_small_cloud:": "๐ŸŒค๏ธ", + ":white_sun_with_small_cloud:": "๐ŸŒค๏ธ", + ":wilted_flower:": "๐Ÿฅ€", + ":wilted_rose:": "๐Ÿฅ€", + ":wind_blowing_face:": "๐ŸŒฌ๏ธ", + ":wind_chime:": "๐ŸŽ", + ":wind_face:": "๐ŸŒฌ", + ":window:": "๐ŸชŸ", + ":wine_glass:": "๐Ÿท", + ":wink:": "๐Ÿ˜‰", + ":wolf:": "๐Ÿบ", + ":woman:": "๐Ÿ‘ฉ", + ":woman_and_man_holding_hands_dark_skin_tone:": "๐Ÿ‘ซ๐Ÿฟ", + ":woman_and_man_holding_hands_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_light_skin_tone:": "๐Ÿ‘ซ๐Ÿป", + ":woman_and_man_holding_hands_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_medium_dark_skin_tone:": "๐Ÿ‘ซ๐Ÿพ", + ":woman_and_man_holding_hands_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_medium_light_skin_tone:": "๐Ÿ‘ซ๐Ÿผ", + ":woman_and_man_holding_hands_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_medium_skin_tone:": "๐Ÿ‘ซ๐Ÿฝ", + ":woman_and_man_holding_hands_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_medium_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_tone1:": "๐Ÿ‘ซ๐Ÿป", + ":woman_and_man_holding_hands_tone1_tone2:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_tone1_tone3:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_tone1_tone4:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_tone1_tone5:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_tone2:": "๐Ÿ‘ซ๐Ÿผ", + ":woman_and_man_holding_hands_tone2_tone1:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_tone2_tone3:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_tone2_tone4:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_tone2_tone5:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_tone3:": "๐Ÿ‘ซ๐Ÿฝ", + ":woman_and_man_holding_hands_tone3_tone1:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_tone3_tone2:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_tone3_tone4:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_and_man_holding_hands_tone3_tone5:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_tone4:": "๐Ÿ‘ซ๐Ÿพ", + ":woman_and_man_holding_hands_tone4_tone1:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_tone4_tone2:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_tone4_tone3:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_tone4_tone5:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฟ", + ":woman_and_man_holding_hands_tone5:": "๐Ÿ‘ซ๐Ÿฟ", + ":woman_and_man_holding_hands_tone5_tone1:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿป", + ":woman_and_man_holding_hands_tone5_tone2:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿผ", + ":woman_and_man_holding_hands_tone5_tone3:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿฝ", + ":woman_and_man_holding_hands_tone5_tone4:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ๐Ÿพ", + ":woman_artist:": "๐Ÿ‘ฉโ€๐ŸŽจ", + ":woman_artist_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽจ", + ":woman_artist_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽจ", + ":woman_artist_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽจ", + ":woman_artist_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽจ", + ":woman_artist_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽจ", + ":woman_artist_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽจ", + ":woman_artist_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽจ", + ":woman_artist_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽจ", + ":woman_artist_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽจ", + ":woman_artist_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽจ", + ":woman_astronaut:": "๐Ÿ‘ฉโ€๐Ÿš€", + ":woman_astronaut_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš€", + ":woman_astronaut_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš€", + ":woman_astronaut_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš€", + ":woman_astronaut_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš€", + ":woman_astronaut_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš€", + ":woman_astronaut_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš€", + ":woman_astronaut_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš€", + ":woman_astronaut_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš€", + ":woman_astronaut_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš€", + ":woman_astronaut_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš€", + ":woman_bald:": "๐Ÿ‘ฉโ€๐Ÿฆฒ", + ":woman_bald_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฒ", + ":woman_bald_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฒ", + ":woman_bald_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฒ", + ":woman_bald_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฒ", + ":woman_bald_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฒ", + ":woman_bald_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฒ", + ":woman_bald_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฒ", + ":woman_bald_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฒ", + ":woman_bald_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฒ", + ":woman_bald_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฒ", + ":woman_beard:": "๐Ÿง”โ€โ™€๏ธ", + ":woman_biking:": "๐Ÿšดโ€โ™€๏ธ", + ":woman_biking_dark_skin_tone:": "๐Ÿšด๐Ÿฟโ€โ™€๏ธ", + ":woman_biking_light_skin_tone:": "๐Ÿšด๐Ÿปโ€โ™€๏ธ", + ":woman_biking_medium_dark_skin_tone:": "๐Ÿšด๐Ÿพโ€โ™€๏ธ", + ":woman_biking_medium_light_skin_tone:": "๐Ÿšด๐Ÿผโ€โ™€๏ธ", + ":woman_biking_medium_skin_tone:": "๐Ÿšด๐Ÿฝโ€โ™€๏ธ", + ":woman_biking_tone1:": "๐Ÿšด๐Ÿปโ€โ™€๏ธ", + ":woman_biking_tone2:": "๐Ÿšด๐Ÿผโ€โ™€๏ธ", + ":woman_biking_tone3:": "๐Ÿšด๐Ÿฝโ€โ™€๏ธ", + ":woman_biking_tone4:": "๐Ÿšด๐Ÿพโ€โ™€๏ธ", + ":woman_biking_tone5:": "๐Ÿšด๐Ÿฟโ€โ™€๏ธ", + ":woman_bouncing_ball:": "โ›น๏ธโ€โ™€๏ธ", + ":woman_bouncing_ball_dark_skin_tone:": "โ›น๐Ÿฟโ€โ™€๏ธ", + ":woman_bouncing_ball_light_skin_tone:": "โ›น๐Ÿปโ€โ™€๏ธ", + ":woman_bouncing_ball_medium_dark_skin_tone:": "โ›น๐Ÿพโ€โ™€๏ธ", + ":woman_bouncing_ball_medium_light_skin_tone:": "โ›น๐Ÿผโ€โ™€๏ธ", + ":woman_bouncing_ball_medium_skin_tone:": "โ›น๐Ÿฝโ€โ™€๏ธ", + ":woman_bouncing_ball_tone1:": "โ›น๐Ÿปโ€โ™€๏ธ", + ":woman_bouncing_ball_tone2:": "โ›น๐Ÿผโ€โ™€๏ธ", + ":woman_bouncing_ball_tone3:": "โ›น๐Ÿฝโ€โ™€๏ธ", + ":woman_bouncing_ball_tone4:": "โ›น๐Ÿพโ€โ™€๏ธ", + ":woman_bouncing_ball_tone5:": "โ›น๐Ÿฟโ€โ™€๏ธ", + ":woman_bowing:": "๐Ÿ™‡โ€โ™€๏ธ", + ":woman_bowing_dark_skin_tone:": "๐Ÿ™‡๐Ÿฟโ€โ™€๏ธ", + ":woman_bowing_light_skin_tone:": "๐Ÿ™‡๐Ÿปโ€โ™€๏ธ", + ":woman_bowing_medium_dark_skin_tone:": "๐Ÿ™‡๐Ÿพโ€โ™€๏ธ", + ":woman_bowing_medium_light_skin_tone:": "๐Ÿ™‡๐Ÿผโ€โ™€๏ธ", + ":woman_bowing_medium_skin_tone:": "๐Ÿ™‡๐Ÿฝโ€โ™€๏ธ", + ":woman_bowing_tone1:": "๐Ÿ™‡๐Ÿปโ€โ™€๏ธ", + ":woman_bowing_tone2:": "๐Ÿ™‡๐Ÿผโ€โ™€๏ธ", + ":woman_bowing_tone3:": "๐Ÿ™‡๐Ÿฝโ€โ™€๏ธ", + ":woman_bowing_tone4:": "๐Ÿ™‡๐Ÿพโ€โ™€๏ธ", + ":woman_bowing_tone5:": "๐Ÿ™‡๐Ÿฟโ€โ™€๏ธ", + ":woman_cartwheeling:": "๐Ÿคธโ€โ™€๏ธ", + ":woman_cartwheeling_dark_skin_tone:": "๐Ÿคธ๐Ÿฟโ€โ™€๏ธ", + ":woman_cartwheeling_light_skin_tone:": "๐Ÿคธ๐Ÿปโ€โ™€๏ธ", + ":woman_cartwheeling_medium_dark_skin_tone:": "๐Ÿคธ๐Ÿพโ€โ™€๏ธ", + ":woman_cartwheeling_medium_light_skin_tone:": "๐Ÿคธ๐Ÿผโ€โ™€๏ธ", + ":woman_cartwheeling_medium_skin_tone:": "๐Ÿคธ๐Ÿฝโ€โ™€๏ธ", + ":woman_cartwheeling_tone1:": "๐Ÿคธ๐Ÿปโ€โ™€๏ธ", + ":woman_cartwheeling_tone2:": "๐Ÿคธ๐Ÿผโ€โ™€๏ธ", + ":woman_cartwheeling_tone3:": "๐Ÿคธ๐Ÿฝโ€โ™€๏ธ", + ":woman_cartwheeling_tone4:": "๐Ÿคธ๐Ÿพโ€โ™€๏ธ", + ":woman_cartwheeling_tone5:": "๐Ÿคธ๐Ÿฟโ€โ™€๏ธ", + ":woman_climbing:": "๐Ÿง—โ€โ™€๏ธ", + ":woman_climbing_dark_skin_tone:": "๐Ÿง—๐Ÿฟโ€โ™€๏ธ", + ":woman_climbing_light_skin_tone:": "๐Ÿง—๐Ÿปโ€โ™€๏ธ", + ":woman_climbing_medium_dark_skin_tone:": "๐Ÿง—๐Ÿพโ€โ™€๏ธ", + ":woman_climbing_medium_light_skin_tone:": "๐Ÿง—๐Ÿผโ€โ™€๏ธ", + ":woman_climbing_medium_skin_tone:": "๐Ÿง—๐Ÿฝโ€โ™€๏ธ", + ":woman_climbing_tone1:": "๐Ÿง—๐Ÿปโ€โ™€๏ธ", + ":woman_climbing_tone2:": "๐Ÿง—๐Ÿผโ€โ™€๏ธ", + ":woman_climbing_tone3:": "๐Ÿง—๐Ÿฝโ€โ™€๏ธ", + ":woman_climbing_tone4:": "๐Ÿง—๐Ÿพโ€โ™€๏ธ", + ":woman_climbing_tone5:": "๐Ÿง—๐Ÿฟโ€โ™€๏ธ", + ":woman_construction_worker:": "๐Ÿ‘ทโ€โ™€๏ธ", + ":woman_construction_worker_dark_skin_tone:": "๐Ÿ‘ท๐Ÿฟโ€โ™€๏ธ", + ":woman_construction_worker_light_skin_tone:": "๐Ÿ‘ท๐Ÿปโ€โ™€๏ธ", + ":woman_construction_worker_medium_dark_skin_tone:": "๐Ÿ‘ท๐Ÿพโ€โ™€๏ธ", + ":woman_construction_worker_medium_light_skin_tone:": "๐Ÿ‘ท๐Ÿผโ€โ™€๏ธ", + ":woman_construction_worker_medium_skin_tone:": "๐Ÿ‘ท๐Ÿฝโ€โ™€๏ธ", + ":woman_construction_worker_tone1:": "๐Ÿ‘ท๐Ÿปโ€โ™€๏ธ", + ":woman_construction_worker_tone2:": "๐Ÿ‘ท๐Ÿผโ€โ™€๏ธ", + ":woman_construction_worker_tone3:": "๐Ÿ‘ท๐Ÿฝโ€โ™€๏ธ", + ":woman_construction_worker_tone4:": "๐Ÿ‘ท๐Ÿพโ€โ™€๏ธ", + ":woman_construction_worker_tone5:": "๐Ÿ‘ท๐Ÿฟโ€โ™€๏ธ", + ":woman_cook:": "๐Ÿ‘ฉโ€๐Ÿณ", + ":woman_cook_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿณ", + ":woman_cook_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿณ", + ":woman_cook_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿณ", + ":woman_cook_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿณ", + ":woman_cook_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿณ", + ":woman_cook_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿณ", + ":woman_cook_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿณ", + ":woman_cook_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿณ", + ":woman_cook_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿณ", + ":woman_cook_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿณ", + ":woman_curly_haired:": "๐Ÿ‘ฉโ€๐Ÿฆฑ", + ":woman_curly_haired_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฑ", + ":woman_curly_haired_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฑ", + ":woman_curly_haired_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฑ", + ":woman_curly_haired_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฑ", + ":woman_curly_haired_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฑ", + ":woman_curly_haired_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฑ", + ":woman_curly_haired_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฑ", + ":woman_curly_haired_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฑ", + ":woman_curly_haired_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฑ", + ":woman_curly_haired_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฑ", + ":woman_dark_skin_tone_beard:": "๐Ÿง”๐Ÿฟโ€โ™€๏ธ", + ":woman_detective:": "๐Ÿ•ต๏ธโ€โ™€๏ธ", + ":woman_detective_dark_skin_tone:": "๐Ÿ•ต๐Ÿฟโ€โ™€๏ธ", + ":woman_detective_light_skin_tone:": "๐Ÿ•ต๐Ÿปโ€โ™€๏ธ", + ":woman_detective_medium_dark_skin_tone:": "๐Ÿ•ต๐Ÿพโ€โ™€๏ธ", + ":woman_detective_medium_light_skin_tone:": "๐Ÿ•ต๐Ÿผโ€โ™€๏ธ", + ":woman_detective_medium_skin_tone:": "๐Ÿ•ต๐Ÿฝโ€โ™€๏ธ", + ":woman_detective_tone1:": "๐Ÿ•ต๐Ÿปโ€โ™€๏ธ", + ":woman_detective_tone2:": "๐Ÿ•ต๐Ÿผโ€โ™€๏ธ", + ":woman_detective_tone3:": "๐Ÿ•ต๐Ÿฝโ€โ™€๏ธ", + ":woman_detective_tone4:": "๐Ÿ•ต๐Ÿพโ€โ™€๏ธ", + ":woman_detective_tone5:": "๐Ÿ•ต๐Ÿฟโ€โ™€๏ธ", + ":woman_elf:": "๐Ÿงโ€โ™€๏ธ", + ":woman_elf_dark_skin_tone:": "๐Ÿง๐Ÿฟโ€โ™€๏ธ", + ":woman_elf_light_skin_tone:": "๐Ÿง๐Ÿปโ€โ™€๏ธ", + ":woman_elf_medium_dark_skin_tone:": "๐Ÿง๐Ÿพโ€โ™€๏ธ", + ":woman_elf_medium_light_skin_tone:": "๐Ÿง๐Ÿผโ€โ™€๏ธ", + ":woman_elf_medium_skin_tone:": "๐Ÿง๐Ÿฝโ€โ™€๏ธ", + ":woman_elf_tone1:": "๐Ÿง๐Ÿปโ€โ™€๏ธ", + ":woman_elf_tone2:": "๐Ÿง๐Ÿผโ€โ™€๏ธ", + ":woman_elf_tone3:": "๐Ÿง๐Ÿฝโ€โ™€๏ธ", + ":woman_elf_tone4:": "๐Ÿง๐Ÿพโ€โ™€๏ธ", + ":woman_elf_tone5:": "๐Ÿง๐Ÿฟโ€โ™€๏ธ", + ":woman_facepalming:": "๐Ÿคฆโ€โ™€๏ธ", + ":woman_facepalming_dark_skin_tone:": "๐Ÿคฆ๐Ÿฟโ€โ™€๏ธ", + ":woman_facepalming_light_skin_tone:": "๐Ÿคฆ๐Ÿปโ€โ™€๏ธ", + ":woman_facepalming_medium_dark_skin_tone:": "๐Ÿคฆ๐Ÿพโ€โ™€๏ธ", + ":woman_facepalming_medium_light_skin_tone:": "๐Ÿคฆ๐Ÿผโ€โ™€๏ธ", + ":woman_facepalming_medium_skin_tone:": "๐Ÿคฆ๐Ÿฝโ€โ™€๏ธ", + ":woman_facepalming_tone1:": "๐Ÿคฆ๐Ÿปโ€โ™€๏ธ", + ":woman_facepalming_tone2:": "๐Ÿคฆ๐Ÿผโ€โ™€๏ธ", + ":woman_facepalming_tone3:": "๐Ÿคฆ๐Ÿฝโ€โ™€๏ธ", + ":woman_facepalming_tone4:": "๐Ÿคฆ๐Ÿพโ€โ™€๏ธ", + ":woman_facepalming_tone5:": "๐Ÿคฆ๐Ÿฟโ€โ™€๏ธ", + ":woman_factory_worker:": "๐Ÿ‘ฉโ€๐Ÿญ", + ":woman_factory_worker_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ", + ":woman_factory_worker_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ", + ":woman_factory_worker_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿญ", + ":woman_factory_worker_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿญ", + ":woman_factory_worker_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿญ", + ":woman_factory_worker_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ", + ":woman_factory_worker_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿญ", + ":woman_factory_worker_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿญ", + ":woman_factory_worker_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿญ", + ":woman_factory_worker_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ", + ":woman_fairy:": "๐Ÿงšโ€โ™€๏ธ", + ":woman_fairy_dark_skin_tone:": "๐Ÿงš๐Ÿฟโ€โ™€๏ธ", + ":woman_fairy_light_skin_tone:": "๐Ÿงš๐Ÿปโ€โ™€๏ธ", + ":woman_fairy_medium_dark_skin_tone:": "๐Ÿงš๐Ÿพโ€โ™€๏ธ", + ":woman_fairy_medium_light_skin_tone:": "๐Ÿงš๐Ÿผโ€โ™€๏ธ", + ":woman_fairy_medium_skin_tone:": "๐Ÿงš๐Ÿฝโ€โ™€๏ธ", + ":woman_fairy_tone1:": "๐Ÿงš๐Ÿปโ€โ™€๏ธ", + ":woman_fairy_tone2:": "๐Ÿงš๐Ÿผโ€โ™€๏ธ", + ":woman_fairy_tone3:": "๐Ÿงš๐Ÿฝโ€โ™€๏ธ", + ":woman_fairy_tone4:": "๐Ÿงš๐Ÿพโ€โ™€๏ธ", + ":woman_fairy_tone5:": "๐Ÿงš๐Ÿฟโ€โ™€๏ธ", + ":woman_farmer:": "๐Ÿ‘ฉโ€๐ŸŒพ", + ":woman_farmer_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŒพ", + ":woman_farmer_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŒพ", + ":woman_farmer_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŒพ", + ":woman_farmer_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŒพ", + ":woman_farmer_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŒพ", + ":woman_farmer_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŒพ", + ":woman_farmer_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŒพ", + ":woman_farmer_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŒพ", + ":woman_farmer_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŒพ", + ":woman_farmer_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŒพ", + ":woman_feeding_baby:": "๐Ÿ‘ฉโ€๐Ÿผ", + ":woman_feeding_baby_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿผ", + ":woman_feeding_baby_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿผ", + ":woman_feeding_baby_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿผ", + ":woman_feeding_baby_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿผ", + ":woman_feeding_baby_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿผ", + ":woman_feeding_baby_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿผ", + ":woman_feeding_baby_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿผ", + ":woman_feeding_baby_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿผ", + ":woman_feeding_baby_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿผ", + ":woman_feeding_baby_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿผ", + ":woman_firefighter:": "๐Ÿ‘ฉโ€๐Ÿš’", + ":woman_firefighter_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš’", + ":woman_firefighter_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš’", + ":woman_firefighter_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš’", + ":woman_firefighter_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš’", + ":woman_firefighter_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš’", + ":woman_firefighter_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš’", + ":woman_firefighter_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš’", + ":woman_firefighter_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš’", + ":woman_firefighter_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš’", + ":woman_firefighter_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš’", + ":woman_frowning:": "๐Ÿ™โ€โ™€๏ธ", + ":woman_frowning_dark_skin_tone:": "๐Ÿ™๐Ÿฟโ€โ™€๏ธ", + ":woman_frowning_light_skin_tone:": "๐Ÿ™๐Ÿปโ€โ™€๏ธ", + ":woman_frowning_medium_dark_skin_tone:": "๐Ÿ™๐Ÿพโ€โ™€๏ธ", + ":woman_frowning_medium_light_skin_tone:": "๐Ÿ™๐Ÿผโ€โ™€๏ธ", + ":woman_frowning_medium_skin_tone:": "๐Ÿ™๐Ÿฝโ€โ™€๏ธ", + ":woman_frowning_tone1:": "๐Ÿ™๐Ÿปโ€โ™€๏ธ", + ":woman_frowning_tone2:": "๐Ÿ™๐Ÿผโ€โ™€๏ธ", + ":woman_frowning_tone3:": "๐Ÿ™๐Ÿฝโ€โ™€๏ธ", + ":woman_frowning_tone4:": "๐Ÿ™๐Ÿพโ€โ™€๏ธ", + ":woman_frowning_tone5:": "๐Ÿ™๐Ÿฟโ€โ™€๏ธ", + ":woman_genie:": "๐Ÿงžโ€โ™€๏ธ", + ":woman_gesturing_no:": "๐Ÿ™…โ€โ™€๏ธ", + ":woman_gesturing_no_dark_skin_tone:": "๐Ÿ™…๐Ÿฟโ€โ™€๏ธ", + ":woman_gesturing_no_light_skin_tone:": "๐Ÿ™…๐Ÿปโ€โ™€๏ธ", + ":woman_gesturing_no_medium_dark_skin_tone:": "๐Ÿ™…๐Ÿพโ€โ™€๏ธ", + ":woman_gesturing_no_medium_light_skin_tone:": "๐Ÿ™…๐Ÿผโ€โ™€๏ธ", + ":woman_gesturing_no_medium_skin_tone:": "๐Ÿ™…๐Ÿฝโ€โ™€๏ธ", + ":woman_gesturing_no_tone1:": "๐Ÿ™…๐Ÿปโ€โ™€๏ธ", + ":woman_gesturing_no_tone2:": "๐Ÿ™…๐Ÿผโ€โ™€๏ธ", + ":woman_gesturing_no_tone3:": "๐Ÿ™…๐Ÿฝโ€โ™€๏ธ", + ":woman_gesturing_no_tone4:": "๐Ÿ™…๐Ÿพโ€โ™€๏ธ", + ":woman_gesturing_no_tone5:": "๐Ÿ™…๐Ÿฟโ€โ™€๏ธ", + ":woman_gesturing_ok:": "๐Ÿ™†โ€โ™€๏ธ", + ":woman_gesturing_ok_dark_skin_tone:": "๐Ÿ™†๐Ÿฟโ€โ™€๏ธ", + ":woman_gesturing_ok_light_skin_tone:": "๐Ÿ™†๐Ÿปโ€โ™€๏ธ", + ":woman_gesturing_ok_medium_dark_skin_tone:": "๐Ÿ™†๐Ÿพโ€โ™€๏ธ", + ":woman_gesturing_ok_medium_light_skin_tone:": "๐Ÿ™†๐Ÿผโ€โ™€๏ธ", + ":woman_gesturing_ok_medium_skin_tone:": "๐Ÿ™†๐Ÿฝโ€โ™€๏ธ", + ":woman_gesturing_ok_tone1:": "๐Ÿ™†๐Ÿปโ€โ™€๏ธ", + ":woman_gesturing_ok_tone2:": "๐Ÿ™†๐Ÿผโ€โ™€๏ธ", + ":woman_gesturing_ok_tone3:": "๐Ÿ™†๐Ÿฝโ€โ™€๏ธ", + ":woman_gesturing_ok_tone4:": "๐Ÿ™†๐Ÿพโ€โ™€๏ธ", + ":woman_gesturing_ok_tone5:": "๐Ÿ™†๐Ÿฟโ€โ™€๏ธ", + ":woman_getting_face_massage:": "๐Ÿ’†โ€โ™€๏ธ", + ":woman_getting_face_massage_dark_skin_tone:": "๐Ÿ’†๐Ÿฟโ€โ™€๏ธ", + ":woman_getting_face_massage_light_skin_tone:": "๐Ÿ’†๐Ÿปโ€โ™€๏ธ", + ":woman_getting_face_massage_medium_dark_skin_tone:": "๐Ÿ’†๐Ÿพโ€โ™€๏ธ", + ":woman_getting_face_massage_medium_light_skin_tone:": "๐Ÿ’†๐Ÿผโ€โ™€๏ธ", + ":woman_getting_face_massage_medium_skin_tone:": "๐Ÿ’†๐Ÿฝโ€โ™€๏ธ", + ":woman_getting_face_massage_tone1:": "๐Ÿ’†๐Ÿปโ€โ™€๏ธ", + ":woman_getting_face_massage_tone2:": "๐Ÿ’†๐Ÿผโ€โ™€๏ธ", + ":woman_getting_face_massage_tone3:": "๐Ÿ’†๐Ÿฝโ€โ™€๏ธ", + ":woman_getting_face_massage_tone4:": "๐Ÿ’†๐Ÿพโ€โ™€๏ธ", + ":woman_getting_face_massage_tone5:": "๐Ÿ’†๐Ÿฟโ€โ™€๏ธ", + ":woman_getting_haircut:": "๐Ÿ’‡โ€โ™€๏ธ", + ":woman_getting_haircut_dark_skin_tone:": "๐Ÿ’‡๐Ÿฟโ€โ™€๏ธ", + ":woman_getting_haircut_light_skin_tone:": "๐Ÿ’‡๐Ÿปโ€โ™€๏ธ", + ":woman_getting_haircut_medium_dark_skin_tone:": "๐Ÿ’‡๐Ÿพโ€โ™€๏ธ", + ":woman_getting_haircut_medium_light_skin_tone:": "๐Ÿ’‡๐Ÿผโ€โ™€๏ธ", + ":woman_getting_haircut_medium_skin_tone:": "๐Ÿ’‡๐Ÿฝโ€โ™€๏ธ", + ":woman_getting_haircut_tone1:": "๐Ÿ’‡๐Ÿปโ€โ™€๏ธ", + ":woman_getting_haircut_tone2:": "๐Ÿ’‡๐Ÿผโ€โ™€๏ธ", + ":woman_getting_haircut_tone3:": "๐Ÿ’‡๐Ÿฝโ€โ™€๏ธ", + ":woman_getting_haircut_tone4:": "๐Ÿ’‡๐Ÿพโ€โ™€๏ธ", + ":woman_getting_haircut_tone5:": "๐Ÿ’‡๐Ÿฟโ€โ™€๏ธ", + ":woman_golfing:": "๐ŸŒ๏ธโ€โ™€๏ธ", + ":woman_golfing_dark_skin_tone:": "๐ŸŒ๐Ÿฟโ€โ™€๏ธ", + ":woman_golfing_light_skin_tone:": "๐ŸŒ๐Ÿปโ€โ™€๏ธ", + ":woman_golfing_medium_dark_skin_tone:": "๐ŸŒ๐Ÿพโ€โ™€๏ธ", + ":woman_golfing_medium_light_skin_tone:": "๐ŸŒ๐Ÿผโ€โ™€๏ธ", + ":woman_golfing_medium_skin_tone:": "๐ŸŒ๐Ÿฝโ€โ™€๏ธ", + ":woman_golfing_tone1:": "๐ŸŒ๐Ÿปโ€โ™€๏ธ", + ":woman_golfing_tone2:": "๐ŸŒ๐Ÿผโ€โ™€๏ธ", + ":woman_golfing_tone3:": "๐ŸŒ๐Ÿฝโ€โ™€๏ธ", + ":woman_golfing_tone4:": "๐ŸŒ๐Ÿพโ€โ™€๏ธ", + ":woman_golfing_tone5:": "๐ŸŒ๐Ÿฟโ€โ™€๏ธ", + ":woman_guard:": "๐Ÿ’‚โ€โ™€๏ธ", + ":woman_guard_dark_skin_tone:": "๐Ÿ’‚๐Ÿฟโ€โ™€๏ธ", + ":woman_guard_light_skin_tone:": "๐Ÿ’‚๐Ÿปโ€โ™€๏ธ", + ":woman_guard_medium_dark_skin_tone:": "๐Ÿ’‚๐Ÿพโ€โ™€๏ธ", + ":woman_guard_medium_light_skin_tone:": "๐Ÿ’‚๐Ÿผโ€โ™€๏ธ", + ":woman_guard_medium_skin_tone:": "๐Ÿ’‚๐Ÿฝโ€โ™€๏ธ", + ":woman_guard_tone1:": "๐Ÿ’‚๐Ÿปโ€โ™€๏ธ", + ":woman_guard_tone2:": "๐Ÿ’‚๐Ÿผโ€โ™€๏ธ", + ":woman_guard_tone3:": "๐Ÿ’‚๐Ÿฝโ€โ™€๏ธ", + ":woman_guard_tone4:": "๐Ÿ’‚๐Ÿพโ€โ™€๏ธ", + ":woman_guard_tone5:": "๐Ÿ’‚๐Ÿฟโ€โ™€๏ธ", + ":woman_health_worker:": "๐Ÿ‘ฉโ€โš•๏ธ", + ":woman_health_worker_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โš•๏ธ", + ":woman_health_worker_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โš•๏ธ", + ":woman_health_worker_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โš•๏ธ", + ":woman_health_worker_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โš•๏ธ", + ":woman_health_worker_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โš•๏ธ", + ":woman_health_worker_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โš•๏ธ", + ":woman_health_worker_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โš•๏ธ", + ":woman_health_worker_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โš•๏ธ", + ":woman_health_worker_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โš•๏ธ", + ":woman_health_worker_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โš•๏ธ", + ":woman_in_lotus_position:": "๐Ÿง˜โ€โ™€๏ธ", + ":woman_in_lotus_position_dark_skin_tone:": "๐Ÿง˜๐Ÿฟโ€โ™€๏ธ", + ":woman_in_lotus_position_light_skin_tone:": "๐Ÿง˜๐Ÿปโ€โ™€๏ธ", + ":woman_in_lotus_position_medium_dark_skin_tone:": "๐Ÿง˜๐Ÿพโ€โ™€๏ธ", + ":woman_in_lotus_position_medium_light_skin_tone:": "๐Ÿง˜๐Ÿผโ€โ™€๏ธ", + ":woman_in_lotus_position_medium_skin_tone:": "๐Ÿง˜๐Ÿฝโ€โ™€๏ธ", + ":woman_in_lotus_position_tone1:": "๐Ÿง˜๐Ÿปโ€โ™€๏ธ", + ":woman_in_lotus_position_tone2:": "๐Ÿง˜๐Ÿผโ€โ™€๏ธ", + ":woman_in_lotus_position_tone3:": "๐Ÿง˜๐Ÿฝโ€โ™€๏ธ", + ":woman_in_lotus_position_tone4:": "๐Ÿง˜๐Ÿพโ€โ™€๏ธ", + ":woman_in_lotus_position_tone5:": "๐Ÿง˜๐Ÿฟโ€โ™€๏ธ", + ":woman_in_manual_wheelchair:": "๐Ÿ‘ฉโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฝ", + ":woman_in_manual_wheelchair_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฝ", + ":woman_in_motorized_wheelchair:": "๐Ÿ‘ฉโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆผ", + ":woman_in_motorized_wheelchair_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆผ", + ":woman_in_steamy_room:": "๐Ÿง–โ€โ™€๏ธ", + ":woman_in_steamy_room_dark_skin_tone:": "๐Ÿง–๐Ÿฟโ€โ™€๏ธ", + ":woman_in_steamy_room_light_skin_tone:": "๐Ÿง–๐Ÿปโ€โ™€๏ธ", + ":woman_in_steamy_room_medium_dark_skin_tone:": "๐Ÿง–๐Ÿพโ€โ™€๏ธ", + ":woman_in_steamy_room_medium_light_skin_tone:": "๐Ÿง–๐Ÿผโ€โ™€๏ธ", + ":woman_in_steamy_room_medium_skin_tone:": "๐Ÿง–๐Ÿฝโ€โ™€๏ธ", + ":woman_in_steamy_room_tone1:": "๐Ÿง–๐Ÿปโ€โ™€๏ธ", + ":woman_in_steamy_room_tone2:": "๐Ÿง–๐Ÿผโ€โ™€๏ธ", + ":woman_in_steamy_room_tone3:": "๐Ÿง–๐Ÿฝโ€โ™€๏ธ", + ":woman_in_steamy_room_tone4:": "๐Ÿง–๐Ÿพโ€โ™€๏ธ", + ":woman_in_steamy_room_tone5:": "๐Ÿง–๐Ÿฟโ€โ™€๏ธ", + ":woman_in_tuxedo:": "๐Ÿคตโ€โ™€๏ธ", + ":woman_in_tuxedo_dark_skin_tone:": "๐Ÿคต๐Ÿฟโ€โ™€๏ธ", + ":woman_in_tuxedo_light_skin_tone:": "๐Ÿคต๐Ÿปโ€โ™€๏ธ", + ":woman_in_tuxedo_medium_dark_skin_tone:": "๐Ÿคต๐Ÿพโ€โ™€๏ธ", + ":woman_in_tuxedo_medium_light_skin_tone:": "๐Ÿคต๐Ÿผโ€โ™€๏ธ", + ":woman_in_tuxedo_medium_skin_tone:": "๐Ÿคต๐Ÿฝโ€โ™€๏ธ", + ":woman_in_tuxedo_tone1:": "๐Ÿคต๐Ÿปโ€โ™€๏ธ", + ":woman_in_tuxedo_tone2:": "๐Ÿคต๐Ÿผโ€โ™€๏ธ", + ":woman_in_tuxedo_tone3:": "๐Ÿคต๐Ÿฝโ€โ™€๏ธ", + ":woman_in_tuxedo_tone4:": "๐Ÿคต๐Ÿพโ€โ™€๏ธ", + ":woman_in_tuxedo_tone5:": "๐Ÿคต๐Ÿฟโ€โ™€๏ธ", + ":woman_judge:": "๐Ÿ‘ฉโ€โš–๏ธ", + ":woman_judge_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โš–๏ธ", + ":woman_judge_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โš–๏ธ", + ":woman_judge_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โš–๏ธ", + ":woman_judge_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โš–๏ธ", + ":woman_judge_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โš–๏ธ", + ":woman_judge_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โš–๏ธ", + ":woman_judge_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โš–๏ธ", + ":woman_judge_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โš–๏ธ", + ":woman_judge_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โš–๏ธ", + ":woman_judge_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โš–๏ธ", + ":woman_juggling:": "๐Ÿคนโ€โ™€๏ธ", + ":woman_juggling_dark_skin_tone:": "๐Ÿคน๐Ÿฟโ€โ™€๏ธ", + ":woman_juggling_light_skin_tone:": "๐Ÿคน๐Ÿปโ€โ™€๏ธ", + ":woman_juggling_medium_dark_skin_tone:": "๐Ÿคน๐Ÿพโ€โ™€๏ธ", + ":woman_juggling_medium_light_skin_tone:": "๐Ÿคน๐Ÿผโ€โ™€๏ธ", + ":woman_juggling_medium_skin_tone:": "๐Ÿคน๐Ÿฝโ€โ™€๏ธ", + ":woman_juggling_tone1:": "๐Ÿคน๐Ÿปโ€โ™€๏ธ", + ":woman_juggling_tone2:": "๐Ÿคน๐Ÿผโ€โ™€๏ธ", + ":woman_juggling_tone3:": "๐Ÿคน๐Ÿฝโ€โ™€๏ธ", + ":woman_juggling_tone4:": "๐Ÿคน๐Ÿพโ€โ™€๏ธ", + ":woman_juggling_tone5:": "๐Ÿคน๐Ÿฟโ€โ™€๏ธ", + ":woman_kneeling:": "๐ŸงŽโ€โ™€๏ธ", + ":woman_kneeling_dark_skin_tone:": "๐ŸงŽ๐Ÿฟโ€โ™€๏ธ", + ":woman_kneeling_light_skin_tone:": "๐ŸงŽ๐Ÿปโ€โ™€๏ธ", + ":woman_kneeling_medium_dark_skin_tone:": "๐ŸงŽ๐Ÿพโ€โ™€๏ธ", + ":woman_kneeling_medium_light_skin_tone:": "๐ŸงŽ๐Ÿผโ€โ™€๏ธ", + ":woman_kneeling_medium_skin_tone:": "๐ŸงŽ๐Ÿฝโ€โ™€๏ธ", + ":woman_kneeling_tone1:": "๐ŸงŽ๐Ÿปโ€โ™€๏ธ", + ":woman_kneeling_tone2:": "๐ŸงŽ๐Ÿผโ€โ™€๏ธ", + ":woman_kneeling_tone3:": "๐ŸงŽ๐Ÿฝโ€โ™€๏ธ", + ":woman_kneeling_tone4:": "๐ŸงŽ๐Ÿพโ€โ™€๏ธ", + ":woman_kneeling_tone5:": "๐ŸงŽ๐Ÿฟโ€โ™€๏ธ", + ":woman_lifting_weights:": "๐Ÿ‹๏ธโ€โ™€๏ธ", + ":woman_lifting_weights_dark_skin_tone:": "๐Ÿ‹๐Ÿฟโ€โ™€๏ธ", + ":woman_lifting_weights_light_skin_tone:": "๐Ÿ‹๐Ÿปโ€โ™€๏ธ", + ":woman_lifting_weights_medium_dark_skin_tone:": "๐Ÿ‹๐Ÿพโ€โ™€๏ธ", + ":woman_lifting_weights_medium_light_skin_tone:": "๐Ÿ‹๐Ÿผโ€โ™€๏ธ", + ":woman_lifting_weights_medium_skin_tone:": "๐Ÿ‹๐Ÿฝโ€โ™€๏ธ", + ":woman_lifting_weights_tone1:": "๐Ÿ‹๐Ÿปโ€โ™€๏ธ", + ":woman_lifting_weights_tone2:": "๐Ÿ‹๐Ÿผโ€โ™€๏ธ", + ":woman_lifting_weights_tone3:": "๐Ÿ‹๐Ÿฝโ€โ™€๏ธ", + ":woman_lifting_weights_tone4:": "๐Ÿ‹๐Ÿพโ€โ™€๏ธ", + ":woman_lifting_weights_tone5:": "๐Ÿ‹๐Ÿฟโ€โ™€๏ธ", + ":woman_light_skin_tone_beard:": "๐Ÿง”๐Ÿปโ€โ™€๏ธ", + ":woman_mage:": "๐Ÿง™โ€โ™€๏ธ", + ":woman_mage_dark_skin_tone:": "๐Ÿง™๐Ÿฟโ€โ™€๏ธ", + ":woman_mage_light_skin_tone:": "๐Ÿง™๐Ÿปโ€โ™€๏ธ", + ":woman_mage_medium_dark_skin_tone:": "๐Ÿง™๐Ÿพโ€โ™€๏ธ", + ":woman_mage_medium_light_skin_tone:": "๐Ÿง™๐Ÿผโ€โ™€๏ธ", + ":woman_mage_medium_skin_tone:": "๐Ÿง™๐Ÿฝโ€โ™€๏ธ", + ":woman_mage_tone1:": "๐Ÿง™๐Ÿปโ€โ™€๏ธ", + ":woman_mage_tone2:": "๐Ÿง™๐Ÿผโ€โ™€๏ธ", + ":woman_mage_tone3:": "๐Ÿง™๐Ÿฝโ€โ™€๏ธ", + ":woman_mage_tone4:": "๐Ÿง™๐Ÿพโ€โ™€๏ธ", + ":woman_mage_tone5:": "๐Ÿง™๐Ÿฟโ€โ™€๏ธ", + ":woman_mechanic:": "๐Ÿ‘ฉโ€๐Ÿ”ง", + ":woman_mechanic_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ง", + ":woman_mechanic_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ง", + ":woman_mechanic_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ง", + ":woman_mechanic_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ง", + ":woman_mechanic_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ง", + ":woman_mechanic_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ง", + ":woman_mechanic_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ง", + ":woman_mechanic_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ง", + ":woman_mechanic_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ง", + ":woman_mechanic_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ง", + ":woman_medium_dark_skin_tone_beard:": "๐Ÿง”๐Ÿพโ€โ™€๏ธ", + ":woman_medium_light_skin_tone_beard:": "๐Ÿง”๐Ÿผโ€โ™€๏ธ", + ":woman_medium_skin_tone_beard:": "๐Ÿง”๐Ÿฝโ€โ™€๏ธ", + ":woman_mountain_biking:": "๐Ÿšตโ€โ™€๏ธ", + ":woman_mountain_biking_dark_skin_tone:": "๐Ÿšต๐Ÿฟโ€โ™€๏ธ", + ":woman_mountain_biking_light_skin_tone:": "๐Ÿšต๐Ÿปโ€โ™€๏ธ", + ":woman_mountain_biking_medium_dark_skin_tone:": "๐Ÿšต๐Ÿพโ€โ™€๏ธ", + ":woman_mountain_biking_medium_light_skin_tone:": "๐Ÿšต๐Ÿผโ€โ™€๏ธ", + ":woman_mountain_biking_medium_skin_tone:": "๐Ÿšต๐Ÿฝโ€โ™€๏ธ", + ":woman_mountain_biking_tone1:": "๐Ÿšต๐Ÿปโ€โ™€๏ธ", + ":woman_mountain_biking_tone2:": "๐Ÿšต๐Ÿผโ€โ™€๏ธ", + ":woman_mountain_biking_tone3:": "๐Ÿšต๐Ÿฝโ€โ™€๏ธ", + ":woman_mountain_biking_tone4:": "๐Ÿšต๐Ÿพโ€โ™€๏ธ", + ":woman_mountain_biking_tone5:": "๐Ÿšต๐Ÿฟโ€โ™€๏ธ", + ":woman_office_worker:": "๐Ÿ‘ฉโ€๐Ÿ’ผ", + ":woman_office_worker_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ผ", + ":woman_office_worker_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ผ", + ":woman_office_worker_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ผ", + ":woman_office_worker_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ผ", + ":woman_office_worker_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ผ", + ":woman_office_worker_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ผ", + ":woman_office_worker_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ผ", + ":woman_office_worker_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ผ", + ":woman_office_worker_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ผ", + ":woman_office_worker_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ผ", + ":woman_pilot:": "๐Ÿ‘ฉโ€โœˆ๏ธ", + ":woman_pilot_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€โœˆ๏ธ", + ":woman_pilot_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€โœˆ๏ธ", + ":woman_pilot_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€โœˆ๏ธ", + ":woman_pilot_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€โœˆ๏ธ", + ":woman_pilot_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€โœˆ๏ธ", + ":woman_pilot_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€โœˆ๏ธ", + ":woman_pilot_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€โœˆ๏ธ", + ":woman_pilot_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€โœˆ๏ธ", + ":woman_pilot_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€โœˆ๏ธ", + ":woman_pilot_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€โœˆ๏ธ", + ":woman_playing_handball:": "๐Ÿคพโ€โ™€๏ธ", + ":woman_playing_handball_dark_skin_tone:": "๐Ÿคพ๐Ÿฟโ€โ™€๏ธ", + ":woman_playing_handball_light_skin_tone:": "๐Ÿคพ๐Ÿปโ€โ™€๏ธ", + ":woman_playing_handball_medium_dark_skin_tone:": "๐Ÿคพ๐Ÿพโ€โ™€๏ธ", + ":woman_playing_handball_medium_light_skin_tone:": "๐Ÿคพ๐Ÿผโ€โ™€๏ธ", + ":woman_playing_handball_medium_skin_tone:": "๐Ÿคพ๐Ÿฝโ€โ™€๏ธ", + ":woman_playing_handball_tone1:": "๐Ÿคพ๐Ÿปโ€โ™€๏ธ", + ":woman_playing_handball_tone2:": "๐Ÿคพ๐Ÿผโ€โ™€๏ธ", + ":woman_playing_handball_tone3:": "๐Ÿคพ๐Ÿฝโ€โ™€๏ธ", + ":woman_playing_handball_tone4:": "๐Ÿคพ๐Ÿพโ€โ™€๏ธ", + ":woman_playing_handball_tone5:": "๐Ÿคพ๐Ÿฟโ€โ™€๏ธ", + ":woman_playing_water_polo:": "๐Ÿคฝโ€โ™€๏ธ", + ":woman_playing_water_polo_dark_skin_tone:": "๐Ÿคฝ๐Ÿฟโ€โ™€๏ธ", + ":woman_playing_water_polo_light_skin_tone:": "๐Ÿคฝ๐Ÿปโ€โ™€๏ธ", + ":woman_playing_water_polo_medium_dark_skin_tone:": "๐Ÿคฝ๐Ÿพโ€โ™€๏ธ", + ":woman_playing_water_polo_medium_light_skin_tone:": "๐Ÿคฝ๐Ÿผโ€โ™€๏ธ", + ":woman_playing_water_polo_medium_skin_tone:": "๐Ÿคฝ๐Ÿฝโ€โ™€๏ธ", + ":woman_playing_water_polo_tone1:": "๐Ÿคฝ๐Ÿปโ€โ™€๏ธ", + ":woman_playing_water_polo_tone2:": "๐Ÿคฝ๐Ÿผโ€โ™€๏ธ", + ":woman_playing_water_polo_tone3:": "๐Ÿคฝ๐Ÿฝโ€โ™€๏ธ", + ":woman_playing_water_polo_tone4:": "๐Ÿคฝ๐Ÿพโ€โ™€๏ธ", + ":woman_playing_water_polo_tone5:": "๐Ÿคฝ๐Ÿฟโ€โ™€๏ธ", + ":woman_police_officer:": "๐Ÿ‘ฎโ€โ™€๏ธ", + ":woman_police_officer_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿฟโ€โ™€๏ธ", + ":woman_police_officer_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ", + ":woman_police_officer_medium_dark_skin_tone:": "๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ", + ":woman_police_officer_medium_light_skin_tone:": "๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ", + ":woman_police_officer_medium_skin_tone:": "๐Ÿ‘ฎ๐Ÿฝโ€โ™€๏ธ", + ":woman_police_officer_tone1:": "๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ", + ":woman_police_officer_tone2:": "๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ", + ":woman_police_officer_tone3:": "๐Ÿ‘ฎ๐Ÿฝโ€โ™€๏ธ", + ":woman_police_officer_tone4:": "๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ", + ":woman_police_officer_tone5:": "๐Ÿ‘ฎ๐Ÿฟโ€โ™€๏ธ", + ":woman_pouting:": "๐Ÿ™Žโ€โ™€๏ธ", + ":woman_pouting_dark_skin_tone:": "๐Ÿ™Ž๐Ÿฟโ€โ™€๏ธ", + ":woman_pouting_light_skin_tone:": "๐Ÿ™Ž๐Ÿปโ€โ™€๏ธ", + ":woman_pouting_medium_dark_skin_tone:": "๐Ÿ™Ž๐Ÿพโ€โ™€๏ธ", + ":woman_pouting_medium_light_skin_tone:": "๐Ÿ™Ž๐Ÿผโ€โ™€๏ธ", + ":woman_pouting_medium_skin_tone:": "๐Ÿ™Ž๐Ÿฝโ€โ™€๏ธ", + ":woman_pouting_tone1:": "๐Ÿ™Ž๐Ÿปโ€โ™€๏ธ", + ":woman_pouting_tone2:": "๐Ÿ™Ž๐Ÿผโ€โ™€๏ธ", + ":woman_pouting_tone3:": "๐Ÿ™Ž๐Ÿฝโ€โ™€๏ธ", + ":woman_pouting_tone4:": "๐Ÿ™Ž๐Ÿพโ€โ™€๏ธ", + ":woman_pouting_tone5:": "๐Ÿ™Ž๐Ÿฟโ€โ™€๏ธ", + ":woman_raising_hand:": "๐Ÿ™‹โ€โ™€๏ธ", + ":woman_raising_hand_dark_skin_tone:": "๐Ÿ™‹๐Ÿฟโ€โ™€๏ธ", + ":woman_raising_hand_light_skin_tone:": "๐Ÿ™‹๐Ÿปโ€โ™€๏ธ", + ":woman_raising_hand_medium_dark_skin_tone:": "๐Ÿ™‹๐Ÿพโ€โ™€๏ธ", + ":woman_raising_hand_medium_light_skin_tone:": "๐Ÿ™‹๐Ÿผโ€โ™€๏ธ", + ":woman_raising_hand_medium_skin_tone:": "๐Ÿ™‹๐Ÿฝโ€โ™€๏ธ", + ":woman_raising_hand_tone1:": "๐Ÿ™‹๐Ÿปโ€โ™€๏ธ", + ":woman_raising_hand_tone2:": "๐Ÿ™‹๐Ÿผโ€โ™€๏ธ", + ":woman_raising_hand_tone3:": "๐Ÿ™‹๐Ÿฝโ€โ™€๏ธ", + ":woman_raising_hand_tone4:": "๐Ÿ™‹๐Ÿพโ€โ™€๏ธ", + ":woman_raising_hand_tone5:": "๐Ÿ™‹๐Ÿฟโ€โ™€๏ธ", + ":woman_red_haired:": "๐Ÿ‘ฉโ€๐Ÿฆฐ", + ":woman_red_haired_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฐ", + ":woman_red_haired_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฐ", + ":woman_red_haired_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฐ", + ":woman_red_haired_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฐ", + ":woman_red_haired_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฐ", + ":woman_red_haired_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฐ", + ":woman_red_haired_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฐ", + ":woman_red_haired_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฐ", + ":woman_red_haired_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฐ", + ":woman_red_haired_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฐ", + ":woman_rowing_boat:": "๐Ÿšฃโ€โ™€๏ธ", + ":woman_rowing_boat_dark_skin_tone:": "๐Ÿšฃ๐Ÿฟโ€โ™€๏ธ", + ":woman_rowing_boat_light_skin_tone:": "๐Ÿšฃ๐Ÿปโ€โ™€๏ธ", + ":woman_rowing_boat_medium_dark_skin_tone:": "๐Ÿšฃ๐Ÿพโ€โ™€๏ธ", + ":woman_rowing_boat_medium_light_skin_tone:": "๐Ÿšฃ๐Ÿผโ€โ™€๏ธ", + ":woman_rowing_boat_medium_skin_tone:": "๐Ÿšฃ๐Ÿฝโ€โ™€๏ธ", + ":woman_rowing_boat_tone1:": "๐Ÿšฃ๐Ÿปโ€โ™€๏ธ", + ":woman_rowing_boat_tone2:": "๐Ÿšฃ๐Ÿผโ€โ™€๏ธ", + ":woman_rowing_boat_tone3:": "๐Ÿšฃ๐Ÿฝโ€โ™€๏ธ", + ":woman_rowing_boat_tone4:": "๐Ÿšฃ๐Ÿพโ€โ™€๏ธ", + ":woman_rowing_boat_tone5:": "๐Ÿšฃ๐Ÿฟโ€โ™€๏ธ", + ":woman_running:": "๐Ÿƒโ€โ™€๏ธ", + ":woman_running_dark_skin_tone:": "๐Ÿƒ๐Ÿฟโ€โ™€๏ธ", + ":woman_running_light_skin_tone:": "๐Ÿƒ๐Ÿปโ€โ™€๏ธ", + ":woman_running_medium_dark_skin_tone:": "๐Ÿƒ๐Ÿพโ€โ™€๏ธ", + ":woman_running_medium_light_skin_tone:": "๐Ÿƒ๐Ÿผโ€โ™€๏ธ", + ":woman_running_medium_skin_tone:": "๐Ÿƒ๐Ÿฝโ€โ™€๏ธ", + ":woman_running_tone1:": "๐Ÿƒ๐Ÿปโ€โ™€๏ธ", + ":woman_running_tone2:": "๐Ÿƒ๐Ÿผโ€โ™€๏ธ", + ":woman_running_tone3:": "๐Ÿƒ๐Ÿฝโ€โ™€๏ธ", + ":woman_running_tone4:": "๐Ÿƒ๐Ÿพโ€โ™€๏ธ", + ":woman_running_tone5:": "๐Ÿƒ๐Ÿฟโ€โ™€๏ธ", + ":woman_scientist:": "๐Ÿ‘ฉโ€๐Ÿ”ฌ", + ":woman_scientist_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ฌ", + ":woman_scientist_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ", + ":woman_scientist_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ฌ", + ":woman_scientist_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ฌ", + ":woman_scientist_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ฌ", + ":woman_scientist_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ", + ":woman_scientist_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ฌ", + ":woman_scientist_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ฌ", + ":woman_scientist_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ฌ", + ":woman_scientist_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ฌ", + ":woman_shrugging:": "๐Ÿคทโ€โ™€๏ธ", + ":woman_shrugging_dark_skin_tone:": "๐Ÿคท๐Ÿฟโ€โ™€๏ธ", + ":woman_shrugging_light_skin_tone:": "๐Ÿคท๐Ÿปโ€โ™€๏ธ", + ":woman_shrugging_medium_dark_skin_tone:": "๐Ÿคท๐Ÿพโ€โ™€๏ธ", + ":woman_shrugging_medium_light_skin_tone:": "๐Ÿคท๐Ÿผโ€โ™€๏ธ", + ":woman_shrugging_medium_skin_tone:": "๐Ÿคท๐Ÿฝโ€โ™€๏ธ", + ":woman_shrugging_tone1:": "๐Ÿคท๐Ÿปโ€โ™€๏ธ", + ":woman_shrugging_tone2:": "๐Ÿคท๐Ÿผโ€โ™€๏ธ", + ":woman_shrugging_tone3:": "๐Ÿคท๐Ÿฝโ€โ™€๏ธ", + ":woman_shrugging_tone4:": "๐Ÿคท๐Ÿพโ€โ™€๏ธ", + ":woman_shrugging_tone5:": "๐Ÿคท๐Ÿฟโ€โ™€๏ธ", + ":woman_singer:": "๐Ÿ‘ฉโ€๐ŸŽค", + ":woman_singer_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽค", + ":woman_singer_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค", + ":woman_singer_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽค", + ":woman_singer_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽค", + ":woman_singer_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽค", + ":woman_singer_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค", + ":woman_singer_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽค", + ":woman_singer_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽค", + ":woman_singer_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽค", + ":woman_singer_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽค", + ":woman_standing:": "๐Ÿงโ€โ™€๏ธ", + ":woman_standing_dark_skin_tone:": "๐Ÿง๐Ÿฟโ€โ™€๏ธ", + ":woman_standing_light_skin_tone:": "๐Ÿง๐Ÿปโ€โ™€๏ธ", + ":woman_standing_medium_dark_skin_tone:": "๐Ÿง๐Ÿพโ€โ™€๏ธ", + ":woman_standing_medium_light_skin_tone:": "๐Ÿง๐Ÿผโ€โ™€๏ธ", + ":woman_standing_medium_skin_tone:": "๐Ÿง๐Ÿฝโ€โ™€๏ธ", + ":woman_standing_tone1:": "๐Ÿง๐Ÿปโ€โ™€๏ธ", + ":woman_standing_tone2:": "๐Ÿง๐Ÿผโ€โ™€๏ธ", + ":woman_standing_tone3:": "๐Ÿง๐Ÿฝโ€โ™€๏ธ", + ":woman_standing_tone4:": "๐Ÿง๐Ÿพโ€โ™€๏ธ", + ":woman_standing_tone5:": "๐Ÿง๐Ÿฟโ€โ™€๏ธ", + ":woman_student:": "๐Ÿ‘ฉโ€๐ŸŽ“", + ":woman_student_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽ“", + ":woman_student_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽ“", + ":woman_student_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽ“", + ":woman_student_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽ“", + ":woman_student_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽ“", + ":woman_student_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽ“", + ":woman_student_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽ“", + ":woman_student_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽ“", + ":woman_student_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽ“", + ":woman_student_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽ“", + ":woman_superhero:": "๐Ÿฆธโ€โ™€๏ธ", + ":woman_superhero_dark_skin_tone:": "๐Ÿฆธ๐Ÿฟโ€โ™€๏ธ", + ":woman_superhero_light_skin_tone:": "๐Ÿฆธ๐Ÿปโ€โ™€๏ธ", + ":woman_superhero_medium_dark_skin_tone:": "๐Ÿฆธ๐Ÿพโ€โ™€๏ธ", + ":woman_superhero_medium_light_skin_tone:": "๐Ÿฆธ๐Ÿผโ€โ™€๏ธ", + ":woman_superhero_medium_skin_tone:": "๐Ÿฆธ๐Ÿฝโ€โ™€๏ธ", + ":woman_superhero_tone1:": "๐Ÿฆธ๐Ÿปโ€โ™€๏ธ", + ":woman_superhero_tone2:": "๐Ÿฆธ๐Ÿผโ€โ™€๏ธ", + ":woman_superhero_tone3:": "๐Ÿฆธ๐Ÿฝโ€โ™€๏ธ", + ":woman_superhero_tone4:": "๐Ÿฆธ๐Ÿพโ€โ™€๏ธ", + ":woman_superhero_tone5:": "๐Ÿฆธ๐Ÿฟโ€โ™€๏ธ", + ":woman_supervillain:": "๐Ÿฆนโ€โ™€๏ธ", + ":woman_supervillain_dark_skin_tone:": "๐Ÿฆน๐Ÿฟโ€โ™€๏ธ", + ":woman_supervillain_light_skin_tone:": "๐Ÿฆน๐Ÿปโ€โ™€๏ธ", + ":woman_supervillain_medium_dark_skin_tone:": "๐Ÿฆน๐Ÿพโ€โ™€๏ธ", + ":woman_supervillain_medium_light_skin_tone:": "๐Ÿฆน๐Ÿผโ€โ™€๏ธ", + ":woman_supervillain_medium_skin_tone:": "๐Ÿฆน๐Ÿฝโ€โ™€๏ธ", + ":woman_supervillain_tone1:": "๐Ÿฆน๐Ÿปโ€โ™€๏ธ", + ":woman_supervillain_tone2:": "๐Ÿฆน๐Ÿผโ€โ™€๏ธ", + ":woman_supervillain_tone3:": "๐Ÿฆน๐Ÿฝโ€โ™€๏ธ", + ":woman_supervillain_tone4:": "๐Ÿฆน๐Ÿพโ€โ™€๏ธ", + ":woman_supervillain_tone5:": "๐Ÿฆน๐Ÿฟโ€โ™€๏ธ", + ":woman_surfing:": "๐Ÿ„โ€โ™€๏ธ", + ":woman_surfing_dark_skin_tone:": "๐Ÿ„๐Ÿฟโ€โ™€๏ธ", + ":woman_surfing_light_skin_tone:": "๐Ÿ„๐Ÿปโ€โ™€๏ธ", + ":woman_surfing_medium_dark_skin_tone:": "๐Ÿ„๐Ÿพโ€โ™€๏ธ", + ":woman_surfing_medium_light_skin_tone:": "๐Ÿ„๐Ÿผโ€โ™€๏ธ", + ":woman_surfing_medium_skin_tone:": "๐Ÿ„๐Ÿฝโ€โ™€๏ธ", + ":woman_surfing_tone1:": "๐Ÿ„๐Ÿปโ€โ™€๏ธ", + ":woman_surfing_tone2:": "๐Ÿ„๐Ÿผโ€โ™€๏ธ", + ":woman_surfing_tone3:": "๐Ÿ„๐Ÿฝโ€โ™€๏ธ", + ":woman_surfing_tone4:": "๐Ÿ„๐Ÿพโ€โ™€๏ธ", + ":woman_surfing_tone5:": "๐Ÿ„๐Ÿฟโ€โ™€๏ธ", + ":woman_swimming:": "๐ŸŠโ€โ™€๏ธ", + ":woman_swimming_dark_skin_tone:": "๐ŸŠ๐Ÿฟโ€โ™€๏ธ", + ":woman_swimming_light_skin_tone:": "๐ŸŠ๐Ÿปโ€โ™€๏ธ", + ":woman_swimming_medium_dark_skin_tone:": "๐ŸŠ๐Ÿพโ€โ™€๏ธ", + ":woman_swimming_medium_light_skin_tone:": "๐ŸŠ๐Ÿผโ€โ™€๏ธ", + ":woman_swimming_medium_skin_tone:": "๐ŸŠ๐Ÿฝโ€โ™€๏ธ", + ":woman_swimming_tone1:": "๐ŸŠ๐Ÿปโ€โ™€๏ธ", + ":woman_swimming_tone2:": "๐ŸŠ๐Ÿผโ€โ™€๏ธ", + ":woman_swimming_tone3:": "๐ŸŠ๐Ÿฝโ€โ™€๏ธ", + ":woman_swimming_tone4:": "๐ŸŠ๐Ÿพโ€โ™€๏ธ", + ":woman_swimming_tone5:": "๐ŸŠ๐Ÿฟโ€โ™€๏ธ", + ":woman_teacher:": "๐Ÿ‘ฉโ€๐Ÿซ", + ":woman_teacher_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ", + ":woman_teacher_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ", + ":woman_teacher_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿซ", + ":woman_teacher_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿซ", + ":woman_teacher_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿซ", + ":woman_teacher_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ", + ":woman_teacher_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿซ", + ":woman_teacher_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿซ", + ":woman_teacher_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿซ", + ":woman_teacher_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ", + ":woman_technologist:": "๐Ÿ‘ฉโ€๐Ÿ’ป", + ":woman_technologist_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ป", + ":woman_technologist_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป", + ":woman_technologist_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ป", + ":woman_technologist_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป", + ":woman_technologist_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ป", + ":woman_technologist_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป", + ":woman_technologist_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป", + ":woman_technologist_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ป", + ":woman_technologist_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ป", + ":woman_technologist_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ป", + ":woman_tipping_hand:": "๐Ÿ’โ€โ™€๏ธ", + ":woman_tipping_hand_dark_skin_tone:": "๐Ÿ’๐Ÿฟโ€โ™€๏ธ", + ":woman_tipping_hand_light_skin_tone:": "๐Ÿ’๐Ÿปโ€โ™€๏ธ", + ":woman_tipping_hand_medium_dark_skin_tone:": "๐Ÿ’๐Ÿพโ€โ™€๏ธ", + ":woman_tipping_hand_medium_light_skin_tone:": "๐Ÿ’๐Ÿผโ€โ™€๏ธ", + ":woman_tipping_hand_medium_skin_tone:": "๐Ÿ’๐Ÿฝโ€โ™€๏ธ", + ":woman_tipping_hand_tone1:": "๐Ÿ’๐Ÿปโ€โ™€๏ธ", + ":woman_tipping_hand_tone2:": "๐Ÿ’๐Ÿผโ€โ™€๏ธ", + ":woman_tipping_hand_tone3:": "๐Ÿ’๐Ÿฝโ€โ™€๏ธ", + ":woman_tipping_hand_tone4:": "๐Ÿ’๐Ÿพโ€โ™€๏ธ", + ":woman_tipping_hand_tone5:": "๐Ÿ’๐Ÿฟโ€โ™€๏ธ", + ":woman_tone1:": "๐Ÿ‘ฉ๐Ÿป", + ":woman_tone1_beard:": "๐Ÿง”๐Ÿปโ€โ™€๏ธ", + ":woman_tone2:": "๐Ÿ‘ฉ๐Ÿผ", + ":woman_tone2_beard:": "๐Ÿง”๐Ÿผโ€โ™€๏ธ", + ":woman_tone3:": "๐Ÿ‘ฉ๐Ÿฝ", + ":woman_tone3_beard:": "๐Ÿง”๐Ÿฝโ€โ™€๏ธ", + ":woman_tone4:": "๐Ÿ‘ฉ๐Ÿพ", + ":woman_tone4_beard:": "๐Ÿง”๐Ÿพโ€โ™€๏ธ", + ":woman_tone5:": "๐Ÿ‘ฉ๐Ÿฟ", + ":woman_tone5_beard:": "๐Ÿง”๐Ÿฟโ€โ™€๏ธ", + ":woman_vampire:": "๐Ÿง›โ€โ™€๏ธ", + ":woman_vampire_dark_skin_tone:": "๐Ÿง›๐Ÿฟโ€โ™€๏ธ", + ":woman_vampire_light_skin_tone:": "๐Ÿง›๐Ÿปโ€โ™€๏ธ", + ":woman_vampire_medium_dark_skin_tone:": "๐Ÿง›๐Ÿพโ€โ™€๏ธ", + ":woman_vampire_medium_light_skin_tone:": "๐Ÿง›๐Ÿผโ€โ™€๏ธ", + ":woman_vampire_medium_skin_tone:": "๐Ÿง›๐Ÿฝโ€โ™€๏ธ", + ":woman_vampire_tone1:": "๐Ÿง›๐Ÿปโ€โ™€๏ธ", + ":woman_vampire_tone2:": "๐Ÿง›๐Ÿผโ€โ™€๏ธ", + ":woman_vampire_tone3:": "๐Ÿง›๐Ÿฝโ€โ™€๏ธ", + ":woman_vampire_tone4:": "๐Ÿง›๐Ÿพโ€โ™€๏ธ", + ":woman_vampire_tone5:": "๐Ÿง›๐Ÿฟโ€โ™€๏ธ", + ":woman_walking:": "๐Ÿšถโ€โ™€๏ธ", + ":woman_walking_dark_skin_tone:": "๐Ÿšถ๐Ÿฟโ€โ™€๏ธ", + ":woman_walking_light_skin_tone:": "๐Ÿšถ๐Ÿปโ€โ™€๏ธ", + ":woman_walking_medium_dark_skin_tone:": "๐Ÿšถ๐Ÿพโ€โ™€๏ธ", + ":woman_walking_medium_light_skin_tone:": "๐Ÿšถ๐Ÿผโ€โ™€๏ธ", + ":woman_walking_medium_skin_tone:": "๐Ÿšถ๐Ÿฝโ€โ™€๏ธ", + ":woman_walking_tone1:": "๐Ÿšถ๐Ÿปโ€โ™€๏ธ", + ":woman_walking_tone2:": "๐Ÿšถ๐Ÿผโ€โ™€๏ธ", + ":woman_walking_tone3:": "๐Ÿšถ๐Ÿฝโ€โ™€๏ธ", + ":woman_walking_tone4:": "๐Ÿšถ๐Ÿพโ€โ™€๏ธ", + ":woman_walking_tone5:": "๐Ÿšถ๐Ÿฟโ€โ™€๏ธ", + ":woman_wearing_turban:": "๐Ÿ‘ณโ€โ™€๏ธ", + ":woman_wearing_turban_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿฟโ€โ™€๏ธ", + ":woman_wearing_turban_light_skin_tone:": "๐Ÿ‘ณ๐Ÿปโ€โ™€๏ธ", + ":woman_wearing_turban_medium_dark_skin_tone:": "๐Ÿ‘ณ๐Ÿพโ€โ™€๏ธ", + ":woman_wearing_turban_medium_light_skin_tone:": "๐Ÿ‘ณ๐Ÿผโ€โ™€๏ธ", + ":woman_wearing_turban_medium_skin_tone:": "๐Ÿ‘ณ๐Ÿฝโ€โ™€๏ธ", + ":woman_wearing_turban_tone1:": "๐Ÿ‘ณ๐Ÿปโ€โ™€๏ธ", + ":woman_wearing_turban_tone2:": "๐Ÿ‘ณ๐Ÿผโ€โ™€๏ธ", + ":woman_wearing_turban_tone3:": "๐Ÿ‘ณ๐Ÿฝโ€โ™€๏ธ", + ":woman_wearing_turban_tone4:": "๐Ÿ‘ณ๐Ÿพโ€โ™€๏ธ", + ":woman_wearing_turban_tone5:": "๐Ÿ‘ณ๐Ÿฟโ€โ™€๏ธ", + ":woman_white_haired:": "๐Ÿ‘ฉโ€๐Ÿฆณ", + ":woman_white_haired_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆณ", + ":woman_white_haired_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณ", + ":woman_white_haired_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆณ", + ":woman_white_haired_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆณ", + ":woman_white_haired_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆณ", + ":woman_white_haired_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณ", + ":woman_white_haired_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆณ", + ":woman_white_haired_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆณ", + ":woman_white_haired_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆณ", + ":woman_white_haired_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆณ", + ":woman_with_headscarf:": "๐Ÿง•", + ":woman_with_headscarf_dark_skin_tone:": "๐Ÿง•๐Ÿฟ", + ":woman_with_headscarf_light_skin_tone:": "๐Ÿง•๐Ÿป", + ":woman_with_headscarf_medium_dark_skin_tone:": "๐Ÿง•๐Ÿพ", + ":woman_with_headscarf_medium_light_skin_tone:": "๐Ÿง•๐Ÿผ", + ":woman_with_headscarf_medium_skin_tone:": "๐Ÿง•๐Ÿฝ", + ":woman_with_headscarf_tone1:": "๐Ÿง•๐Ÿป", + ":woman_with_headscarf_tone2:": "๐Ÿง•๐Ÿผ", + ":woman_with_headscarf_tone3:": "๐Ÿง•๐Ÿฝ", + ":woman_with_headscarf_tone4:": "๐Ÿง•๐Ÿพ", + ":woman_with_headscarf_tone5:": "๐Ÿง•๐Ÿฟ", + ":woman_with_probing_cane:": "๐Ÿ‘ฉโ€๐Ÿฆฏ", + ":woman_with_probing_cane_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฏ", + ":woman_with_probing_cane_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฏ", + ":woman_with_probing_cane_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฏ", + ":woman_with_probing_cane_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฏ", + ":woman_with_probing_cane_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฏ", + ":woman_with_probing_cane_tone1:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฏ", + ":woman_with_probing_cane_tone2:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฏ", + ":woman_with_probing_cane_tone3:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฏ", + ":woman_with_probing_cane_tone4:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฏ", + ":woman_with_probing_cane_tone5:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฏ", + ":woman_with_turban:": "๐Ÿ‘ณโ€โ™€๏ธ", + ":woman_with_veil:": "๐Ÿ‘ฐโ€โ™€๏ธ", + ":woman_with_veil_dark_skin_tone:": "๐Ÿ‘ฐ๐Ÿฟโ€โ™€๏ธ", + ":woman_with_veil_light_skin_tone:": "๐Ÿ‘ฐ๐Ÿปโ€โ™€๏ธ", + ":woman_with_veil_medium_dark_skin_tone:": "๐Ÿ‘ฐ๐Ÿพโ€โ™€๏ธ", + ":woman_with_veil_medium_light_skin_tone:": "๐Ÿ‘ฐ๐Ÿผโ€โ™€๏ธ", + ":woman_with_veil_medium_skin_tone:": "๐Ÿ‘ฐ๐Ÿฝโ€โ™€๏ธ", + ":woman_with_veil_tone1:": "๐Ÿ‘ฐ๐Ÿปโ€โ™€๏ธ", + ":woman_with_veil_tone2:": "๐Ÿ‘ฐ๐Ÿผโ€โ™€๏ธ", + ":woman_with_veil_tone3:": "๐Ÿ‘ฐ๐Ÿฝโ€โ™€๏ธ", + ":woman_with_veil_tone4:": "๐Ÿ‘ฐ๐Ÿพโ€โ™€๏ธ", + ":woman_with_veil_tone5:": "๐Ÿ‘ฐ๐Ÿฟโ€โ™€๏ธ", + ":woman_zombie:": "๐ŸงŸโ€โ™€๏ธ", + ":womans_clothes:": "๐Ÿ‘š", + ":womans_flat_shoe:": "๐Ÿฅฟ", + ":womans_hat:": "๐Ÿ‘’", + ":women_holding_hands_dark_skin_tone:": "๐Ÿ‘ญ๐Ÿฟ", + ":women_holding_hands_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_dark_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_light_skin_tone:": "๐Ÿ‘ญ๐Ÿป", + ":women_holding_hands_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_light_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_medium_dark_skin_tone:": "๐Ÿ‘ญ๐Ÿพ", + ":women_holding_hands_medium_dark_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_medium_dark_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_medium_dark_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_medium_dark_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_medium_light_skin_tone:": "๐Ÿ‘ญ๐Ÿผ", + ":women_holding_hands_medium_light_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_medium_light_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_medium_light_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_medium_light_skin_tone_medium_skin_tone:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_medium_skin_tone:": "๐Ÿ‘ญ๐Ÿฝ", + ":women_holding_hands_medium_skin_tone_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_medium_skin_tone_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_medium_skin_tone_medium_dark_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_medium_skin_tone_medium_light_skin_tone:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_tone1:": "๐Ÿ‘ญ๐Ÿป", + ":women_holding_hands_tone1_tone2:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_tone1_tone3:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_tone1_tone4:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_tone1_tone5:": "๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_tone2:": "๐Ÿ‘ญ๐Ÿผ", + ":women_holding_hands_tone2_tone1:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_tone2_tone3:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_tone2_tone4:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_tone2_tone5:": "๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_tone3:": "๐Ÿ‘ญ๐Ÿฝ", + ":women_holding_hands_tone3_tone1:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_tone3_tone2:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_tone3_tone4:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_holding_hands_tone3_tone5:": "๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_tone4:": "๐Ÿ‘ญ๐Ÿพ", + ":women_holding_hands_tone4_tone1:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_tone4_tone2:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_tone4_tone3:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_tone4_tone5:": "๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฟ", + ":women_holding_hands_tone5:": "๐Ÿ‘ญ๐Ÿฟ", + ":women_holding_hands_tone5_tone1:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿป", + ":women_holding_hands_tone5_tone2:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผ", + ":women_holding_hands_tone5_tone3:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿฝ", + ":women_holding_hands_tone5_tone4:": "๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿพ", + ":women_with_bunny_ears_partying:": "๐Ÿ‘ฏโ€โ™€๏ธ", + ":women_wrestling:": "๐Ÿคผโ€โ™€๏ธ", + ":womens:": "๐Ÿšบ", + ":wood:": "๐Ÿชต", + ":woozy_face:": "๐Ÿฅด", + ":world_map:": "๐Ÿ—บ๏ธ", + ":worm:": "๐Ÿชฑ", + ":worried:": "๐Ÿ˜Ÿ", + ":worship_symbol:": "๐Ÿ›", + ":wrench:": "๐Ÿ”ง", + ":wrestlers:": "๐Ÿคผ", + ":wrestlers_tone1:": "๐Ÿคผ๐Ÿป", + ":wrestlers_tone2:": "๐Ÿคผ๐Ÿผ", + ":wrestlers_tone3:": "๐Ÿคผ๐Ÿฝ", + ":wrestlers_tone4:": "๐Ÿคผ๐Ÿพ", + ":wrestlers_tone5:": "๐Ÿคผ๐Ÿฟ", + ":wrestling:": "๐Ÿคผ", + ":wrestling_tone1:": "๐Ÿคผ๐Ÿป", + ":wrestling_tone2:": "๐Ÿคผ๐Ÿผ", + ":wrestling_tone3:": "๐Ÿคผ๐Ÿฝ", + ":wrestling_tone4:": "๐Ÿคผ๐Ÿพ", + ":wrestling_tone5:": "๐Ÿคผ๐Ÿฟ", + ":writing_hand:": "โœ๏ธ", + ":writing_hand_tone1:": "โœ๐Ÿป", + ":writing_hand_tone2:": "โœ๐Ÿผ", + ":writing_hand_tone3:": "โœ๐Ÿฝ", + ":writing_hand_tone4:": "โœ๐Ÿพ", + ":writing_hand_tone5:": "โœ๐Ÿฟ", + ":ws:": "๐Ÿ‡ผ๐Ÿ‡ธ", + ":x:": "โŒ", + ":xk:": "๐Ÿ‡ฝ๐Ÿ‡ฐ", + ":yarn:": "๐Ÿงถ", + ":yawning_face:": "๐Ÿฅฑ", + ":ye:": "๐Ÿ‡พ๐Ÿ‡ช", + ":yellow_circle:": "๐ŸŸก", + ":yellow_heart:": "๐Ÿ’›", + ":yellow_square:": "๐ŸŸจ", + ":yemen:": "๐Ÿ‡พ๐Ÿ‡ช", + ":yen:": "๐Ÿ’ด", + ":yin_yang:": "โ˜ฏ๏ธ", + ":yo_yo:": "๐Ÿช€", + ":yt:": "๐Ÿ‡พ๐Ÿ‡น", + ":yum:": "๐Ÿ˜‹", + ":za:": "๐Ÿ‡ฟ๐Ÿ‡ฆ", + ":zambia:": "๐Ÿ‡ฟ๐Ÿ‡ฒ", + ":zany_face:": "๐Ÿคช", + ":zap:": "โšก", + ":zebra:": "๐Ÿฆ“", + ":zero:": "0๏ธโƒฃ", + ":zimbabwe:": "๐Ÿ‡ฟ๐Ÿ‡ผ", + ":zipper_mouth:": "๐Ÿค", + ":zipper_mouth_face:": "๐Ÿค", + ":zm:": "๐Ÿ‡ฟ๐Ÿ‡ฒ", + ":zombie:": "๐ŸงŸ", + ":zw:": "๐Ÿ‡ฟ๐Ÿ‡ผ", + ":zzz:": "๐Ÿ’ค" +} diff --git a/docs/source/.gitignore b/docs/source/.gitignore new file mode 100644 index 0000000000..8157632d93 --- /dev/null +++ b/docs/source/.gitignore @@ -0,0 +1,4 @@ +*.rst +!index.rst +!projects/*.rst +!tutorials/*.rst diff --git a/docs/source/conf.py b/docs/source/conf.py index a6bbe78e0b..e9b39f07e1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -41,6 +41,7 @@ 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', + 'sphinxemoji.sphinxemoji', ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/index.rst b/docs/source/index.rst index cd18cb1cb2..6568b772a5 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,6 +1,6 @@ -.. include:: ../../README.rst +.. include:: README.rst -.. include:: ../../CHANGELOG.rst +.. include:: CHANGELOG.rst Tutorial -------- diff --git a/docs/update_apidocs.sh b/docs/update_apidocs.sh index e72fbcc034..a605b41ff4 100755 --- a/docs/update_apidocs.sh +++ b/docs/update_apidocs.sh @@ -21,7 +21,11 @@ rm ${PWD}/docs/source/pySDC/*.rst echo "" echo "generating new .rst files ..." -${SPHINX_APIDOC} -o docs/source/pySDC pySDC/core --force -T -${SPHINX_APIDOC} -o docs/source/pySDC pySDC/implementations --force -T -${SPHINX_APIDOC} -o docs/source/pySDC pySDC/helpers --force -T +${SPHINX_APIDOC} -o docs/source/pySDC pySDC/core --force -T -d 2 -e +${SPHINX_APIDOC} -o docs/source/pySDC pySDC/implementations --force -T -d 2 -e +${SPHINX_APIDOC} -o docs/source/pySDC pySDC/helpers --force -T -d 2 -e #rm docs/source/pySDC/pySDC.rst + +echo "Running : pip install sphinxemoji m2r2" +pip install sphinxemoji m2r2 --quiet +./docs/convert_markdown.py