EmanueleCosenza commited on
Commit
d896bd4
1 Parent(s): 78c4bb2

Working version

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +1 -0
  2. .gitignore +160 -0
  3. Dockerfile +13 -0
  4. app.py +53 -0
  5. constants.py +60 -0
  6. data.py +271 -0
  7. download_models.py +30 -0
  8. download_soundfont.sh +67 -0
  9. generate.py +284 -0
  10. generation_config.py +19 -0
  11. generation_config.yaml +18 -0
  12. model.py +678 -0
  13. models/.gitattributes +37 -0
  14. models/LMD2/checkpoint +3 -0
  15. models/LMD2/configuration +0 -0
  16. models/README.md +16 -0
  17. plots.py +147 -0
  18. preprocess.py +294 -0
  19. requirements.txt +25 -0
  20. soundfonts/FluidR3_GM.sf2 +3 -0
  21. static/0/generated.mid +0 -0
  22. static/0/structure.json +1 -0
  23. static/0/z +0 -0
  24. static/assets/FontAwesome/LICENSE.txt +165 -0
  25. static/assets/FontAwesome/css/brands.css +1537 -0
  26. static/assets/FontAwesome/css/brands.min.css +6 -0
  27. static/assets/FontAwesome/css/fontawesome.css +0 -0
  28. static/assets/FontAwesome/css/fontawesome.min.css +9 -0
  29. static/assets/FontAwesome/css/solid.css +19 -0
  30. static/assets/FontAwesome/css/solid.min.css +6 -0
  31. static/assets/FontAwesome/css/svg-with-js.css +639 -0
  32. static/assets/FontAwesome/css/svg-with-js.min.css +6 -0
  33. static/assets/FontAwesome/css/v4-font-face.css +26 -0
  34. static/assets/FontAwesome/css/v4-font-face.min.css +6 -0
  35. static/assets/FontAwesome/css/v4-shims.css +2194 -0
  36. static/assets/FontAwesome/css/v4-shims.min.css +6 -0
  37. static/assets/FontAwesome/css/v5-font-face.css +22 -0
  38. static/assets/FontAwesome/css/v5-font-face.min.css +6 -0
  39. static/assets/FontAwesome/js/all.js +0 -0
  40. static/assets/FontAwesome/js/all.min.js +0 -0
  41. static/assets/FontAwesome/js/brands.js +0 -0
  42. static/assets/FontAwesome/js/brands.min.js +0 -0
  43. static/assets/FontAwesome/js/conflict-detection.js +1138 -0
  44. static/assets/FontAwesome/js/conflict-detection.min.js +6 -0
  45. static/assets/FontAwesome/js/fontawesome.js +0 -0
  46. static/assets/FontAwesome/js/fontawesome.min.js +6 -0
  47. static/assets/FontAwesome/js/regular.js +0 -0
  48. static/assets/FontAwesome/js/regular.min.js +0 -0
  49. static/assets/FontAwesome/js/solid.js +0 -0
  50. static/assets/FontAwesome/js/solid.min.js +0 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ soundfonts/FluidR3_GM.sf2 filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ #.idea/
Dockerfile ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.7
2
+
3
+ RUN useradd -m -u 1000 user
4
+ USER user
5
+ ENV HOME=/home/user \
6
+ PATH=/home/user/.local/bin:$PATH
7
+
8
+ WORKDIR $HOME/app
9
+ COPY --chown=user . $HOME/app
10
+
11
+ RUN pip install --no-cache-dir --upgrade -r $HOME/app/requirements.txt
12
+
13
+ CMD ["flask", "run", "--host=0.0.0.0", "--port=7860"]
app.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, jsonify, request
2
+ import json
3
+ import subprocess
4
+
5
+ app = Flask(__name__)
6
+
7
+
8
+ @app.route('/')
9
+ def index():
10
+ return render_template('index.html')
11
+
12
+
13
+ @app.route('/generate_midi', methods=['POST'])
14
+ def generate_midi():
15
+ data = request.json
16
+ keep_tonality = data.get('keepTonality', False)
17
+ use_grid = data.get('useGrid', True)
18
+
19
+ arguments = ['python3', 'generate.py', 'models/LMD2/', 'static/',
20
+ '--n', '1', '--no_audio']
21
+
22
+ if keep_tonality:
23
+ arguments.extend(['--z_file', 'static/0/z'])
24
+
25
+ if use_grid:
26
+ arguments.extend(['--s_file', 'static/0/structure.json'])
27
+
28
+ subprocess.run(arguments, capture_output=True, text=True)
29
+
30
+ filename = "generated.mid"
31
+ return jsonify({"filename": filename})
32
+
33
+
34
+ @app.route('/save_json', methods=['POST'])
35
+ def save_json():
36
+ data = request.json
37
+ filepath = 'static/0/structure.json'
38
+
39
+ with open(filepath, 'w') as file:
40
+ json.dump(data, file)
41
+
42
+ return jsonify(message="JSON saved successfully!")
43
+
44
+
45
+ @app.route('/load_grid')
46
+ def load_grid():
47
+ with open('static/0/structure.json', 'r') as file:
48
+ data = json.load(file)
49
+ return jsonify(data)
50
+
51
+
52
+ if __name__ == '__main__':
53
+ app.run(debug=True)
constants.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from enum import Enum
2
+
3
+
4
+ N_TRACKS = 4
5
+ TRACKS = ['Drums', 'Bass', 'Guitar', 'Strings']
6
+
7
+ # These defaults, which should not be changed, are set when the related
8
+ # variables in the YAML config file are not set.
9
+ DEFAULT_MIDI_PROGRAMS = {
10
+ 'Drums': -1,
11
+ 'Bass': 34,
12
+ 'Guitar': 1,
13
+ 'Strings': 83,
14
+ }
15
+ DEFAULT_SOUNDFONT_PATH = '/usr/share/soundfonts/FluidR3_GM.sf2'
16
+
17
+
18
+ # Pitch tokens have values in the range [0, 130]. Tokens from 0 to 127 represent
19
+ # MIDI pitches. Token 60 represents middle C (C4).
20
+ # See https://www.inspiredacoustics.com/en/MIDI_note_numbers_and_center_frequencies
21
+ # for the complete list of MIDI pitches.
22
+ class PitchToken(Enum):
23
+ SOS = 128
24
+ EOS = 129
25
+ PAD = 130
26
+
27
+
28
+ N_PITCH_TOKENS = 131
29
+ MAX_PITCH_TOKEN = 127
30
+
31
+
32
+ # Duration tokens have values in the range [0, 98]. Tokens from 0 to 95 have to
33
+ # be interpreted as durations from 1 to 96 timesteps.
34
+ class DurationToken(Enum):
35
+ SOS = 96
36
+ EOS = 97
37
+ PAD = 98
38
+
39
+
40
+ N_DUR_TOKENS = 99
41
+ MAX_DUR_TOKEN = 95
42
+
43
+
44
+ # Dimension of (pitch, duration) token pair
45
+ D_TOKEN_PAIR = N_PITCH_TOKENS + N_DUR_TOKENS
46
+
47
+ # Number of maximum tokens stored in each timestep (14 + SOS and EOS)
48
+ MAX_SIMU_TOKENS = 16
49
+
50
+
51
+ # This enum contains edge type indices for each edge type
52
+ class EdgeTypes(Enum):
53
+ TRACK = 0 # This has to be interpreted as the starting index
54
+ ONSET = N_TRACKS
55
+ NEXT = N_TRACKS + 1
56
+
57
+ # N_TRACKS track types + 1 onset edge type + 1 next edge type
58
+ N_EDGE_TYPES = N_TRACKS + 2
59
+
60
+
data.py ADDED
@@ -0,0 +1,271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import itertools
2
+ import os
3
+
4
+ import torch
5
+ import numpy as np
6
+ from torch_geometric.data import Dataset
7
+ from torch_geometric.data import Data
8
+ from torch_geometric.data.collate import collate
9
+
10
+ import constants
11
+ from constants import EdgeTypes
12
+
13
+
14
+ def get_node_labels(s_tensor, ones_idxs):
15
+ # Build a tensor which has node labels in place of each activation in the
16
+ # stucture tensor
17
+ labels = torch.zeros_like(s_tensor, dtype=torch.long,
18
+ device=s_tensor.device)
19
+ n_nodes = len(ones_idxs[0])
20
+ labels[ones_idxs] = torch.arange(n_nodes, device=s_tensor.device)
21
+ return labels
22
+
23
+
24
+ def get_track_edges(s_tensor, ones_idxs=None, node_labels=None):
25
+
26
+ track_edges = []
27
+
28
+ if ones_idxs is None:
29
+ # Indices where the binary structure tensor is active
30
+ ones_idxs = torch.nonzero(s_tensor, as_tuple=True)
31
+
32
+ if node_labels is None:
33
+ node_labels = get_node_labels(s_tensor, ones_idxs)
34
+
35
+ # For each track, add direct and inverse edges between consecutive nodes
36
+ for track in range(s_tensor.size(0)):
37
+ # List of active timesteps in the current track
38
+ tss = list(ones_idxs[1][ones_idxs[0] == track])
39
+ edge_type = EdgeTypes.TRACK.value + track
40
+ edges = [
41
+ # Edge tuple: (u, v, type, ts_distance). Zip is used to obtain
42
+ # consecutive active timesteps. Edges in different tracks have
43
+ # different types.
44
+ (node_labels[track, t1],
45
+ node_labels[track, t2], edge_type, t2 - t1)
46
+ for t1, t2 in zip(tss[:-1], tss[1:])
47
+ ]
48
+ inverse_edges = [(u, v, t, d) for (v, u, t, d) in edges]
49
+ track_edges.extend(edges + inverse_edges)
50
+
51
+ return torch.tensor(track_edges, dtype=torch.long)
52
+
53
+
54
+ def get_onset_edges(s_tensor, ones_idxs=None, node_labels=None):
55
+
56
+ onset_edges = []
57
+ edge_type = EdgeTypes.ONSET.value
58
+
59
+ if ones_idxs is None:
60
+ # Indices where the binary structure tensor is active
61
+ ones_idxs = torch.nonzero(s_tensor, as_tuple=True)
62
+
63
+ if node_labels is None:
64
+ node_labels = get_node_labels(s_tensor, ones_idxs)
65
+
66
+ # Add direct and inverse edges between nodes played in the same timestep
67
+ for ts in range(s_tensor.size(1)):
68
+ # List of active tracks in the current timestep
69
+ tracks = list(ones_idxs[0][ones_idxs[1] == ts])
70
+ # Obtain all possible pairwise combinations of active tracks
71
+ combinations = list(itertools.combinations(tracks, 2))
72
+ edges = [
73
+ # Edge tuple: (u, v, type, ts_distance(=0)).
74
+ (node_labels[track1, ts], node_labels[track2, ts], edge_type, 0)
75
+ for track1, track2 in combinations
76
+ ]
77
+ inverse_edges = [(u, v, t, d) for (v, u, t, d) in edges]
78
+ onset_edges.extend(edges + inverse_edges)
79
+
80
+ return torch.tensor(onset_edges, dtype=torch.long)
81
+
82
+
83
+ def get_next_edges(s_tensor, ones_idxs=None, node_labels=None):
84
+
85
+ next_edges = []
86
+ edge_type = EdgeTypes.NEXT.value
87
+
88
+ if ones_idxs is None:
89
+ # Indices where the binary structure tensor is active
90
+ ones_idxs = torch.nonzero(s_tensor, as_tuple=True)
91
+
92
+ if node_labels is None:
93
+ node_labels = get_node_labels(s_tensor, ones_idxs)
94
+
95
+ # List of active timesteps
96
+ tss = torch.nonzero(torch.any(s_tensor.bool(), dim=0)).squeeze()
97
+ if tss.dim() == 0:
98
+ return torch.tensor([], dtype=torch.long)
99
+
100
+ for i in range(tss.size(0)-1):
101
+ # Get consecutive active timesteps
102
+ t1, t2 = tss[i], tss[i+1]
103
+ # Get all the active tracks in the two timesteps
104
+ t1_tracks = ones_idxs[0][ones_idxs[1] == t1]
105
+ t2_tracks = ones_idxs[0][ones_idxs[1] == t2]
106
+
107
+ # Combine the source and destination tracks, removing combinations with
108
+ # the same source and destination track (since these represent track
109
+ # edges).
110
+ tracks_product = list(itertools.product(t1_tracks, t2_tracks))
111
+ tracks_product = [(track1, track2)
112
+ for (track1, track2) in tracks_product
113
+ if track1 != track2]
114
+ # Edge tuple: (u, v, type, ts_distance).
115
+ edges = [(node_labels[track1, t1], node_labels[track2, t2],
116
+ edge_type, t2 - t1)
117
+ for track1, track2 in tracks_product]
118
+
119
+ next_edges.extend(edges)
120
+
121
+ return torch.tensor(next_edges, dtype=torch.long)
122
+
123
+
124
+ def get_track_features(s_tensor):
125
+
126
+ # Indices where the binary structure tensor is active
127
+ ones_idxs = torch.nonzero(s_tensor)
128
+
129
+ n_nodes = len(ones_idxs)
130
+ tracks = ones_idxs[:, 0]
131
+ n_tracks = s_tensor.size(0)
132
+
133
+ # The feature n_nodes x n_tracks tensor contains one-hot tracks
134
+ # representations for each node
135
+ features = torch.zeros((n_nodes, n_tracks))
136
+ features[torch.arange(n_nodes), tracks] = 1
137
+
138
+ return features
139
+
140
+
141
+ def graph_from_tensor(s_tensor):
142
+
143
+ bars = []
144
+
145
+ # Iterate over bars and construct a graph for each bar
146
+ for i in range(s_tensor.size(0)):
147
+
148
+ bar = s_tensor[i]
149
+
150
+ # If the bar contains no activations, add a fake one to avoid having
151
+ # to deal with empty graphs
152
+ if not torch.any(bar):
153
+ bar[0, 0] = 1
154
+
155
+ # Get edges from boolean activations
156
+ track_edges = get_track_edges(bar)
157
+ onset_edges = get_onset_edges(bar)
158
+ next_edges = get_next_edges(bar)
159
+ edges = [track_edges, onset_edges, next_edges]
160
+
161
+ # Concatenate edge tensors (N x 4) (if any)
162
+ is_edgeless = (len(track_edges) == 0 and
163
+ len(onset_edges) == 0 and
164
+ len(next_edges) == 0)
165
+ if not is_edgeless:
166
+ edge_list = torch.cat([x for x in edges
167
+ if torch.numel(x) > 0])
168
+
169
+ # Adapt tensor to torch_geometric's Data
170
+ # If no edges, add fake self-edge
171
+ # edge_list[:, :2] contains source and destination node labels
172
+ # edge_list[:, 2:] contains edge types and timestep distances
173
+ edge_index = (edge_list[:, :2].t().contiguous() if not is_edgeless else
174
+ torch.LongTensor([[0], [0]]))
175
+ attrs = (edge_list[:, 2:] if not is_edgeless else
176
+ torch.Tensor([[0, 0]]))
177
+
178
+ # Add one hot timestep distance to edge attributes
179
+ edge_attrs = torch.zeros(attrs.size(0), s_tensor.shape[-1] + 1)
180
+ edge_attrs[:, 0] = attrs[:, 0]
181
+ edge_attrs[torch.arange(edge_attrs.size(0)),
182
+ attrs.long()[:, 1] + 1] = 1
183
+
184
+ node_features = get_track_features(bar)
185
+ is_drum = node_features[:, 0].bool()
186
+ num_nodes = torch.sum(bar, dtype=torch.long)
187
+
188
+ bars.append(Data(edge_index=edge_index, edge_attrs=edge_attrs,
189
+ num_nodes=num_nodes, node_features=node_features,
190
+ is_drum=is_drum).to(s_tensor.device))
191
+
192
+ # Merge the graphs corresponding to different bars into a single big graph
193
+ graph, _, _ = collate(
194
+ Data,
195
+ data_list=bars,
196
+ increment=True,
197
+ add_batch=True
198
+ )
199
+
200
+ # Change bars assignment vector name (otherwise, Dataloader's collate
201
+ # would overwrite graphs.batch)
202
+ graph.bars = graph.batch
203
+
204
+ return graph
205
+
206
+
207
+ class PolyphemusDataset(Dataset):
208
+
209
+ def __init__(self, dir, n_bars=2):
210
+ self.dir = dir
211
+ self.files = list(os.scandir(self.dir))
212
+ self.len = len(self.files)
213
+ self.n_bars = n_bars
214
+
215
+ def __len__(self):
216
+ return self.len
217
+
218
+ def __getitem__(self, idx):
219
+
220
+ # Load tensors
221
+ sample_path = os.path.join(self.dir, self.files[idx].name)
222
+ data = np.load(sample_path)
223
+ c_tensor = torch.tensor(data["c_tensor"], dtype=torch.long)
224
+ s_tensor = torch.tensor(data["s_tensor"], dtype=torch.bool)
225
+
226
+ # From (n_tracks x n_timesteps x ...)
227
+ # to (n_bars x n_tracks x n_timesteps x ...)
228
+ c_tensor = c_tensor.reshape(c_tensor.shape[0], self.n_bars, -1,
229
+ c_tensor.shape[2], c_tensor.shape[3])
230
+ c_tensor = c_tensor.permute(1, 0, 2, 3, 4)
231
+ s_tensor = s_tensor.reshape(s_tensor.shape[0], self.n_bars, -1)
232
+ s_tensor = s_tensor.permute(1, 0, 2)
233
+
234
+ # From decimals to onehot (pitches)
235
+ pitches = c_tensor[..., 0]
236
+ onehot_p = torch.zeros(
237
+ (pitches.shape[0]*pitches.shape[1]*pitches.shape[2]*pitches.shape[3],
238
+ constants.N_PITCH_TOKENS),
239
+ dtype=torch.float32
240
+ )
241
+ onehot_p[torch.arange(0, onehot_p.shape[0]), pitches.reshape(-1)] = 1.
242
+ onehot_p = onehot_p.reshape(pitches.shape[0], pitches.shape[1],
243
+ pitches.shape[2], pitches.shape[3],
244
+ constants.N_PITCH_TOKENS)
245
+
246
+ # From decimals to onehot (durations)
247
+ durs = c_tensor[..., 1]
248
+ onehot_d = torch.zeros(
249
+ (durs.shape[0]*durs.shape[1]*durs.shape[2]*durs.shape[3],
250
+ constants.N_DUR_TOKENS),
251
+ dtype=torch.float32
252
+ )
253
+ onehot_d[torch.arange(0, onehot_d.shape[0]), durs.reshape(-1)] = 1.
254
+ onehot_d = onehot_d.reshape(durs.shape[0], durs.shape[1],
255
+ durs.shape[2], durs.shape[3],
256
+ constants.N_DUR_TOKENS)
257
+
258
+ # Concatenate pitches and durations
259
+ c_tensor = torch.cat((onehot_p, onehot_d), dim=-1)
260
+
261
+ # Build graph structure from structure tensor
262
+ graph = graph_from_tensor(s_tensor)
263
+
264
+ # Filter silences in order to get a sparse representation
265
+ c_tensor = c_tensor.reshape(-1, c_tensor.shape[-2], c_tensor.shape[-1])
266
+ c_tensor = c_tensor[s_tensor.reshape(-1).bool()]
267
+
268
+ graph.c_tensor = c_tensor
269
+ graph.s_tensor = s_tensor.float()
270
+
271
+ return graph
download_models.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import os
3
+
4
+ from huggingface_hub import snapshot_download
5
+
6
+
7
+ def main():
8
+ parser = argparse.ArgumentParser(
9
+ description="Downloads Polyphemus' pretrained models from Hugging "
10
+ "Face."
11
+ )
12
+ parser.add_argument(
13
+ 'models_dir',
14
+ type=str, help='Directory to store the pretrained models.'
15
+ )
16
+
17
+ args = parser.parse_args()
18
+
19
+ repo_id = 'EmanueleCosenza/polyphemus'
20
+
21
+ r = snapshot_download(
22
+ repo_id=repo_id,
23
+ local_dir=args.models_dir,
24
+ local_dir_use_symlinks=False
25
+ )
26
+ print("Models successfully downloaded in {}".format(r))
27
+
28
+
29
+ if __name__ == '__main__':
30
+ main()
download_soundfont.sh ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # Check if the target directory is specified
4
+ if [ "$#" -ne 1 ]; then
5
+ echo "Usage: $0 <target_directory>"
6
+ exit 1
7
+ fi
8
+
9
+ # Set the target directory
10
+ TARGET_DIR="$1"
11
+
12
+ # Check if the target directory exists. If not, create it.
13
+ if [ ! -d "$TARGET_DIR" ]; then
14
+ echo "Target directory $TARGET_DIR does not exist. Creating..."
15
+ mkdir -p "$TARGET_DIR"
16
+ if [ $? -ne 0 ]; then
17
+ echo "Error creating target directory $TARGET_DIR"
18
+ exit 1
19
+ fi
20
+ fi
21
+
22
+ # Check https://packages.ubuntu.com/jammy/all/fluid-soundfont-gm/download for a
23
+ # complete list of mirrors
24
+ URL="http://mirrors.kernel.org/ubuntu/pool/universe/f/fluid-soundfont/fluid-soundfont-gm_3.1-5.3_all.deb"
25
+
26
+ # Download the deb package
27
+ echo "Downloading the deb package..."
28
+ wget -q $URL -O fluid-soundfont-gm.deb
29
+
30
+ if [ $? -ne 0 ]; then
31
+ echo "Error downloading the deb package"
32
+ exit 1
33
+ fi
34
+
35
+ # Create a temporary directory
36
+ TMP_DIR=$(mktemp -d)
37
+
38
+ # Extract the data.tar.zst component from the deb package using ar
39
+ echo "Extracting the data.tar.zst from the deb package..."
40
+ ar -p fluid-soundfont-gm.deb data.tar.zst > $TMP_DIR/data.tar.zst
41
+
42
+ if [ $? -ne 0 ]; then
43
+ echo "Error extracting the data.tar.zst component from the deb package"
44
+ rm -rf $TMP_DIR
45
+ exit 1
46
+ fi
47
+
48
+ echo "Extracting the contents of data.tar.zst..."
49
+ unzstd -o $TMP_DIR/data.tar $TMP_DIR/data.tar.zst
50
+ tar -xf $TMP_DIR/data.tar -C $TMP_DIR
51
+
52
+ if [ $? -ne 0 ]; then
53
+ echo "Error extracting the contents of data.tar.zst"
54
+ rm -rf $TMP_DIR
55
+ exit 1
56
+ fi
57
+
58
+ # Find the .sf2 file and move it to the target directory
59
+ echo "Moving the .sf2 file to $TARGET_DIR"
60
+ find $TMP_DIR -type f -name '*.sf2' -exec mv {} $TARGET_DIR \;
61
+
62
+ # Clean up
63
+ rm -rf $TMP_DIR
64
+ rm fluid-soundfont-gm.deb
65
+
66
+ echo "Done."
67
+
generate.py ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import os
3
+ import json
4
+ import time
5
+ import math
6
+
7
+ import torch
8
+ import os
9
+ from matplotlib import pyplot as plt
10
+
11
+ import generation_config
12
+ import constants
13
+ from model import VAE
14
+ from utils import set_seed
15
+ from utils import mtp_from_logits, muspy_from_mtp, set_seed
16
+ from utils import print_divider
17
+ from utils import loop_muspy_music, save_midi, save_audio
18
+ from plots import plot_pianoroll, plot_structure
19
+
20
+
21
+ def generate_music(vae, z, s_cond=None, s_tensor_cond=None):
22
+
23
+ # Decoder pass to get structure and content logits
24
+ s_logits, c_logits = vae.decoder(z, s_cond)
25
+
26
+ if s_tensor_cond is not None:
27
+ s_tensor = s_tensor_cond
28
+ else:
29
+ # Compute binary structure tensor from logits
30
+ s_tensor = vae.decoder._binary_from_logits(s_logits)
31
+
32
+ # Build (n_batches x n_bars x n_tracks x n_timesteps x Sigma x d_token)
33
+ # multitrack pianoroll tensor containing logits for each activation and
34
+ # hard silences elsewhere
35
+ mtp = mtp_from_logits(c_logits, s_tensor)
36
+
37
+ return mtp, s_tensor
38
+
39
+
40
+ def save(mtp, dir, s_tensor=None, n_loops=1, audio=True, z=None,
41
+ looped_only=False, plot_proll=False, plot_struct=False):
42
+
43
+ n_bars = mtp.size(1)
44
+ resolution = mtp.size(3) // 4
45
+ # Clear matplotlib cache (this solves formatting problems with first plot)
46
+ plt.clf()
47
+
48
+ # Iterate over batches
49
+ for i in range(mtp.size(0)):
50
+
51
+ # Create the directory if it does not exist
52
+ save_dir = os.path.join(dir, str(i))
53
+ os.makedirs(save_dir, exist_ok=True)
54
+
55
+ if not looped_only:
56
+ # Generate MIDI song from multitrack pianoroll and save
57
+ muspy_song = muspy_from_mtp(mtp[i])
58
+ print("Saving MIDI sequence {} in {}...".format(str(i + 1),
59
+ save_dir))
60
+ save_midi(muspy_song, save_dir, name='generated')
61
+ if audio:
62
+ print("Saving audio sequence {} in {}...".format(str(i + 1),
63
+ save_dir))
64
+ save_audio(muspy_song, save_dir, name='generated')
65
+
66
+ if plot_proll:
67
+ plot_pianoroll(muspy_song, save_dir)
68
+
69
+ if plot_struct:
70
+ plot_structure(s_tensor[i].cpu(), save_dir)
71
+
72
+ if n_loops > 1:
73
+ # Copy the generated sequence n_loops times and save the looped
74
+ # MIDI and audio files
75
+ print("Saving MIDI sequence "
76
+ "{} looped {} times in {}...".format(str(i + 1), n_loops,
77
+ save_dir))
78
+ extended = loop_muspy_music(muspy_song, n_loops,
79
+ n_bars, resolution)
80
+ save_midi(extended, save_dir, name='extended')
81
+ if audio:
82
+ print("Saving audio sequence "
83
+ "{} looped {} times in {}...".format(str(i + 1), n_loops,
84
+ save_dir))
85
+ save_audio(extended, save_dir, name='extended')
86
+
87
+ # Save structure
88
+ with open(os.path.join(save_dir, 'structure.json'), 'wb') as file:
89
+ file.write(json.dumps(s_tensor[i].tolist()).encode('utf-8'))
90
+
91
+ # Save z
92
+ if z[i] is not None:
93
+ torch.save(z[i], os.path.join(save_dir, 'z'))
94
+
95
+ print()
96
+
97
+
98
+ def generate_z(bs, d_model, device):
99
+ shape = (bs, d_model)
100
+
101
+ z_norm = torch.normal(
102
+ torch.zeros(shape, device=device),
103
+ torch.ones(shape, device=device)
104
+ )
105
+
106
+ return z_norm
107
+
108
+
109
+ def load_model(model_dir, device):
110
+
111
+ checkpoint = torch.load(os.path.join(model_dir, 'checkpoint'),
112
+ map_location='cpu')
113
+ configuration = torch.load(os.path.join(model_dir, 'configuration'),
114
+ map_location='cpu')
115
+
116
+ state_dict = checkpoint['model_state_dict']
117
+
118
+ model = VAE(**configuration['model'], device=device).to(device)
119
+ model.load_state_dict(state_dict)
120
+ model.eval()
121
+
122
+ return model, configuration
123
+
124
+
125
+ def main():
126
+
127
+ parser = argparse.ArgumentParser(
128
+ description='Generates MIDI music with a trained model.'
129
+ )
130
+ parser.add_argument(
131
+ 'model_dir',
132
+ type=str, help='Directory of the model.'
133
+ )
134
+ parser.add_argument(
135
+ 'output_dir',
136
+ type=str,
137
+ help='Directory to save the generated MIDI files.'
138
+ )
139
+ parser.add_argument(
140
+ '--n',
141
+ type=int,
142
+ default=5,
143
+ help='Number of sequences to be generated. Default is 5.'
144
+ )
145
+ parser.add_argument(
146
+ '--n_loops',
147
+ type=int,
148
+ default=1,
149
+ help="If greater than 1, outputs an additional MIDI file containing "
150
+ "the sequence looped n_loops times."
151
+ )
152
+ parser.add_argument(
153
+ '--no_audio',
154
+ action='store_true',
155
+ default=False,
156
+ help="Flag to disable audio files generation."
157
+ )
158
+ parser.add_argument(
159
+ '--s_file',
160
+ type=str,
161
+ help='Path to the JSON file containing the binary structure tensor.'
162
+ )
163
+ parser.add_argument(
164
+ '--z_file',
165
+ type=str,
166
+ help=''
167
+ )
168
+ parser.add_argument(
169
+ '--z_change',
170
+ action='store_true',
171
+ default=False,
172
+ help=''
173
+ )
174
+ parser.add_argument(
175
+ '--use_gpu',
176
+ action='store_true',
177
+ default=False,
178
+ help='Flag to enable GPU usage.'
179
+ )
180
+ parser.add_argument(
181
+ '--gpu_id',
182
+ type=int,
183
+ default='0',
184
+ help='Index of the GPU to be used. Default is 0.'
185
+ )
186
+ parser.add_argument(
187
+ '--seed',
188
+ type=int
189
+ )
190
+
191
+ args = parser.parse_args()
192
+
193
+ if args.seed is not None:
194
+ set_seed(args.seed)
195
+
196
+ audio = not args.no_audio
197
+
198
+ device = torch.device("cuda") if args.use_gpu else torch.device("cpu")
199
+ if args.use_gpu:
200
+ torch.cuda.set_device(args.gpu_id)
201
+
202
+ print_divider()
203
+ print("Loading the model on {} device...".format(device))
204
+
205
+ model, configuration = load_model(args.model_dir, device)
206
+
207
+ d_model = configuration['model']['d']
208
+ n_bars = configuration['model']['n_bars']
209
+ n_tracks = constants.N_TRACKS
210
+ n_timesteps = 4 * configuration['model']['resolution']
211
+ output_dir = args.output_dir
212
+
213
+ s, s_tensor = None, None
214
+
215
+ if args.s_file is not None:
216
+
217
+ print("Loading the structure tensor "
218
+ "from {}...".format(args.model_dir))
219
+
220
+ # Load structure tensor from file
221
+ with open(args.s_file, 'r') as f:
222
+ s_tensor = json.load(f)
223
+
224
+ s_tensor = torch.tensor(s_tensor, dtype=bool)
225
+
226
+ # Check structure dimensions
227
+ dims = list(s_tensor.size())
228
+ expected = [n_bars, n_tracks, n_timesteps]
229
+ if dims != expected:
230
+ if (len(dims) != len(expected) or dims[1:] != expected[1:]
231
+ or dims[0] > n_bars):
232
+ raise ValueError(f"Loaded structure tensor dimensions {dims} "
233
+ f"do not match expected dimensions {expected}")
234
+ elif dims[0] > n_bars:
235
+ raise ValueError(f"First structure tensor dimension {dims[0]} "
236
+ f"is higher than {n_bars}")
237
+ else:
238
+ # Repeat partial structure tensor
239
+ r = math.ceil(n_bars / dims[0])
240
+ s_tensor = s_tensor.repeat(r, 1, 1)
241
+ s_tensor = s_tensor[:n_bars, ...]
242
+
243
+ # Avoid empty bars by creating a fake activation for each empty
244
+ # (n_tracks x n_timesteps) bar matrix in position [0, 0]
245
+ empty_mask = ~s_tensor.any(dim=-1).any(dim=-1)
246
+ if empty_mask.any():
247
+ print("The provided structure tensor contains empty bars. Fake "
248
+ "track activations will be created to avoid processing "
249
+ "empty bars.")
250
+ idxs = torch.nonzero(empty_mask, as_tuple=True)
251
+ s_tensor[idxs + (0, 0)] = True
252
+
253
+ # Repeat structure along new batch dimension
254
+ s_tensor = s_tensor.unsqueeze(0).repeat(args.n, 1, 1, 1)
255
+
256
+ s = model.decoder._structure_from_binary(s_tensor)
257
+
258
+ print()
259
+ if args.z_file is not None:
260
+ print("Loading z...")
261
+ z = torch.load(args.z_file)
262
+ z = z.unsqueeze(0)
263
+ if args.z_change:
264
+ #e = 0.5
265
+ e = 0.5
266
+ z = z + e*(torch.rand(list(z.size())) - 0.5)
267
+ else:
268
+ print("Generating z...")
269
+ z = generate_z(args.n, d_model, device)
270
+
271
+ print("Generating music with the model...")
272
+ s_t = time.time()
273
+ mtp, s_tensor = generate_music(model, z, s, s_tensor)
274
+ print("Inference time: {:.3f} s".format(time.time() - s_t))
275
+
276
+ print()
277
+ print("Saving MIDI files in {}...\n".format(output_dir))
278
+ save(mtp, output_dir, s_tensor, args.n_loops, audio, z)
279
+ print("Finished saving MIDI files.")
280
+ print_divider()
281
+
282
+
283
+ if __name__ == '__main__':
284
+ main()
generation_config.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import yaml
2
+ from constants import DEFAULT_MIDI_PROGRAMS, DEFAULT_SOUNDFONT_PATH
3
+
4
+
5
+ CONFIG_FILENAME = 'generation_config.yaml'
6
+
7
+
8
+ def load_config(filename):
9
+ with open(filename, 'r') as f:
10
+ config = yaml.safe_load(f)
11
+
12
+ return config
13
+
14
+
15
+ config = load_config(CONFIG_FILENAME)
16
+
17
+
18
+ MIDI_PROGRAMS = config.get('MIDI_PROGRAMS', DEFAULT_MIDI_PROGRAMS)
19
+ SOUNDFONT_PATH = config.get('SOUNDFONT_PATH', DEFAULT_SOUNDFONT_PATH)
generation_config.yaml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # These values indicate the MIDI programs used for each track.
3
+ # Possible values: [0, 127]
4
+ # Check https://en.wikipedia.org/wiki/General_MIDI for a complete list
5
+ # of MIDI programs (remember to map values to the [0, 127] range).
6
+ # The `drums` value is ignored (drums have a dedicated MIDI channel and each
7
+ # program corresponds to a different drum sound). The guitar track typically
8
+ # plays accompaniment chords and it can also be intepreted as a
9
+ # piano/accompaniment track. The strings track typically contains a
10
+ # lead melody.
11
+ MIDI_PROGRAMS:
12
+ Drums: -1
13
+ Bass: 34 # Electric Bass (picked)
14
+ Guitar: 4 # Electric Piano 1
15
+ Strings: 54 # Synth Voice
16
+
17
+ # The path of the soundfont file needed to convert MIDI to audio
18
+ SOUNDFONT_PATH: "soundfonts/FluidR3_GM.sf2"
model.py ADDED
@@ -0,0 +1,678 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Tuple
2
+
3
+ import torch
4
+ import torch.nn.functional as F
5
+ from torch import nn, Tensor
6
+ from torch_sparse import SparseTensor, masked_select_nnz
7
+ from torch_geometric.typing import OptTensor, Adj
8
+ from torch_geometric.nn.inits import reset
9
+ from torch_geometric.nn.norm import BatchNorm
10
+ from torch_geometric.nn.glob import GlobalAttention
11
+ from torch_geometric.data import Batch
12
+ from torch_geometric.nn.conv import RGCNConv
13
+
14
+ import constants
15
+ from data import graph_from_tensor
16
+
17
+
18
+ @torch.jit._overload
19
+ def masked_edge_index(edge_index, edge_mask):
20
+ # type: (Tensor, Tensor) -> Tensor
21
+ pass
22
+
23
+
24
+ @torch.jit._overload
25
+ def masked_edge_index(edge_index, edge_mask):
26
+ # type: (SparseTensor, Tensor) -> SparseTensor
27
+ pass
28
+
29
+
30
+ def masked_edge_index(edge_index, edge_mask):
31
+ if isinstance(edge_index, Tensor):
32
+ return edge_index[:, edge_mask]
33
+ else:
34
+ return masked_select_nnz(edge_index, edge_mask, layout='coo')
35
+
36
+
37
+ def masked_edge_attrs(edge_attrs, edge_mask):
38
+ return edge_attrs[edge_mask, :]
39
+
40
+
41
+ class GCL(RGCNConv):
42
+
43
+ def __init__(self, in_channels, out_channels, num_relations, nn,
44
+ dropout=0.1, **kwargs):
45
+ super().__init__(in_channels=in_channels, out_channels=out_channels,
46
+ num_relations=num_relations, **kwargs)
47
+ self.nn = nn
48
+ self.dropout = dropout
49
+
50
+ self.reset_edge_nn()
51
+
52
+ def reset_edge_nn(self):
53
+ reset(self.nn)
54
+
55
+ def forward(self, x: Union[OptTensor, Tuple[OptTensor, Tensor]],
56
+ edge_index: Adj, edge_type: OptTensor = None,
57
+ edge_attr: OptTensor = None):
58
+
59
+ # Convert input features to a pair of node features or node indices.
60
+ x_l: OptTensor = None
61
+ if isinstance(x, tuple):
62
+ x_l = x[0]
63
+ else:
64
+ x_l = x
65
+ if x_l is None:
66
+ x_l = torch.arange(self.in_channels_l, device=self.weight.device)
67
+
68
+ x_r: Tensor = x_l
69
+ if isinstance(x, tuple):
70
+ x_r = x[1]
71
+
72
+ size = (x_l.size(0), x_r.size(0))
73
+
74
+ if isinstance(edge_index, SparseTensor):
75
+ edge_type = edge_index.storage.value()
76
+ assert edge_type is not None
77
+
78
+ # propagate_type: (x: Tensor)
79
+ out = torch.zeros(x_r.size(0), self.out_channels, device=x_r.device)
80
+ weight = self.weight
81
+
82
+ # Basis-decomposition
83
+ if self.num_bases is not None:
84
+ weight = (self.comp @ weight.view(self.num_bases, -1)).view(
85
+ self.num_relations, self.in_channels_l, self.out_channels)
86
+
87
+ # Block-diagonal-decomposition
88
+ if self.num_blocks is not None:
89
+
90
+ if x_l.dtype == torch.long and self.num_blocks is not None:
91
+ raise ValueError('Block-diagonal decomposition not supported '
92
+ 'for non-continuous input features.')
93
+
94
+ for i in range(self.num_relations):
95
+ tmp = masked_edge_index(edge_index, edge_type == i)
96
+ h = self.propagate(tmp, x=x_l, size=size)
97
+ h = h.view(-1, weight.size(1), weight.size(2))
98
+ h = torch.einsum('abc,bcd->abd', h, weight[i])
99
+ out += h.contiguous().view(-1, self.out_channels)
100
+
101
+ else:
102
+ # No regularization/Basis-decomposition
103
+ for i in range(self.num_relations):
104
+ tmp = masked_edge_index(edge_index, edge_type == i)
105
+ attr = masked_edge_attrs(edge_attr, edge_type == i)
106
+
107
+ if x_l.dtype == torch.long:
108
+ out += self.propagate(tmp, x=weight[i, x_l], size=size)
109
+ else:
110
+ h = self.propagate(tmp, x=x_l, size=size,
111
+ edge_attr=attr)
112
+ out = out + (h @ weight[i])
113
+
114
+ root = self.root
115
+ if root is not None:
116
+ out += root[x_r] if x_r.dtype == torch.long else x_r @ root
117
+
118
+ if self.bias is not None:
119
+ out += self.bias
120
+
121
+ return out
122
+
123
+ def message(self, x_j: Tensor, edge_attr: Tensor) -> Tensor:
124
+
125
+ # Use edge nn to compute weight tensor from edge attributes
126
+ # (=onehot timestep distances between nodes)
127
+ weights = self.nn(edge_attr)
128
+ weights = weights[..., :self.in_channels_l]
129
+ weights = weights.view(-1, self.in_channels_l)
130
+
131
+ out = x_j * weights
132
+ out = F.relu(out)
133
+ out = F.dropout(out, p=self.dropout, training=self.training)
134
+
135
+ return out
136
+
137
+
138
+ class MLP(nn.Module):
139
+
140
+ def __init__(self, input_dim=256, hidden_dim=256, output_dim=256,
141
+ num_layers=2, activation=True, dropout=0.1):
142
+ super().__init__()
143
+
144
+ self.layers = nn.ModuleList()
145
+
146
+ if num_layers == 1:
147
+ self.layers.append(nn.Linear(input_dim, output_dim))
148
+ else:
149
+ # Input layer (1) + Intermediate layers (n-2) + Output layer (1)
150
+ self.layers.append(nn.Linear(input_dim, hidden_dim))
151
+ for _ in range(num_layers - 2):
152
+ self.layers.append(nn.Linear(hidden_dim, hidden_dim))
153
+ self.layers.append(nn.Linear(hidden_dim, output_dim))
154
+
155
+ self.activation = activation
156
+ self.p = dropout
157
+
158
+ def forward(self, x):
159
+ for layer in self.layers:
160
+ x = F.dropout(x, p=self.p, training=self.training)
161
+ x = layer(x)
162
+ if self.activation:
163
+ x = F.relu(x)
164
+ return x
165
+
166
+
167
+ class GCN(nn.Module):
168
+
169
+ def __init__(self, input_dim=256, hidden_dim=256, n_layers=3,
170
+ num_relations=3, num_dists=32, batch_norm=False, dropout=0.1):
171
+ super().__init__()
172
+
173
+ self.layers = nn.ModuleList()
174
+ self.norm_layers = nn.ModuleList()
175
+ edge_nn = nn.Linear(num_dists, input_dim)
176
+ self.batch_norm = batch_norm
177
+
178
+ self.layers.append(GCL(input_dim, hidden_dim, num_relations, edge_nn))
179
+ if self.batch_norm:
180
+ self.norm_layers.append(BatchNorm(hidden_dim))
181
+
182
+ for i in range(n_layers-1):
183
+ self.layers.append(GCL(hidden_dim, hidden_dim,
184
+ num_relations, edge_nn))
185
+ if self.batch_norm:
186
+ self.norm_layers.append(BatchNorm(hidden_dim))
187
+
188
+ self.p = dropout
189
+
190
+ def forward(self, data):
191
+
192
+ x, edge_index, edge_attrs = data.x, data.edge_index, data.edge_attrs
193
+ edge_type = edge_attrs[:, 0]
194
+ edge_attr = edge_attrs[:, 1:]
195
+
196
+ for i in range(len(self.layers)):
197
+
198
+ residual = x
199
+ x = F.dropout(x, p=self.p, training=self.training)
200
+ x = self.layers[i](x, edge_index, edge_type, edge_attr)
201
+
202
+ if self.batch_norm:
203
+ x = self.norm_layers[i](x)
204
+
205
+ x = F.relu(x)
206
+ x = residual + x
207
+
208
+ return x
209
+
210
+
211
+ class CNNEncoder(nn.Module):
212
+
213
+ def __init__(self, output_dim=256, dense_dim=256, batch_norm=False,
214
+ dropout=0.1):
215
+ super().__init__()
216
+
217
+ # Convolutional layers
218
+ if batch_norm:
219
+ self.conv = nn.Sequential(
220
+ # From (4 x 32) to (8 x 4 x 32)
221
+ nn.Conv2d(1, 8, 3, padding=1),
222
+ nn.BatchNorm2d(8),
223
+ nn.ReLU(True),
224
+ # From (8 x 4 x 32) to (8 x 4 x 8)
225
+ nn.MaxPool2d((1, 4), stride=(1, 4)),
226
+ # From (8 x 4 x 8) to (16 x 4 x 8)
227
+ nn.Conv2d(8, 16, 3, padding=1),
228
+ nn.BatchNorm2d(16),
229
+ nn.ReLU(True)
230
+ )
231
+ else:
232
+ self.conv = nn.Sequential(
233
+ nn.Conv2d(1, 8, 3, padding=1),
234
+ nn.ReLU(True),
235
+ nn.MaxPool2d((1, 4), stride=(1, 4)),
236
+ nn.Conv2d(8, 16, 3, padding=1),
237
+ nn.ReLU(True)
238
+ )
239
+
240
+ self.flatten = nn.Flatten(start_dim=1)
241
+
242
+ # Linear layers
243
+ self.lin = nn.Sequential(
244
+ nn.Dropout(dropout),
245
+ nn.Linear(16 * 4 * 8, dense_dim),
246
+ nn.ReLU(True),
247
+ nn.Dropout(dropout),
248
+ nn.Linear(dense_dim, output_dim)
249
+ )
250
+
251
+ def forward(self, x):
252
+ x = x.unsqueeze(1)
253
+ x = self.conv(x)
254
+ x = self.flatten(x)
255
+ x = self.lin(x)
256
+ return x
257
+
258
+
259
+ class CNNDecoder(nn.Module):
260
+
261
+ def __init__(self, input_dim=256, dense_dim=256, batch_norm=False,
262
+ dropout=0.1):
263
+ super().__init__()
264
+
265
+ # Linear decompressors
266
+ self.lin = nn.Sequential(
267
+ nn.Dropout(dropout),
268
+ nn.Linear(input_dim, dense_dim),
269
+ nn.ReLU(True),
270
+ nn.Dropout(dropout),
271
+ nn.Linear(dense_dim, 16 * 4 * 8),
272
+ nn.ReLU(True)
273
+ )
274
+
275
+ self.unflatten = nn.Unflatten(dim=1, unflattened_size=(16, 4, 8))
276
+
277
+ # Upsample and convolutional layers
278
+ if batch_norm:
279
+ self.conv = nn.Sequential(
280
+ nn.Upsample(scale_factor=(1, 4), mode='nearest'),
281
+ nn.Conv2d(16, 8, 3, padding=1),
282
+ nn.BatchNorm2d(8),
283
+ nn.ReLU(True),
284
+ nn.Conv2d(8, 1, 3, padding=1)
285
+ )
286
+ else:
287
+ self.conv = nn.Sequential(
288
+ nn.Upsample(scale_factor=(1, 4), mode='nearest'),
289
+ nn.Conv2d(16, 8, 3, padding=1),
290
+ nn.ReLU(True),
291
+ nn.Conv2d(8, 1, 3, padding=1)
292
+ )
293
+
294
+ def forward(self, x):
295
+ x = self.lin(x)
296
+ x = self.unflatten(x)
297
+ x = self.conv(x)
298
+ x = x.unsqueeze(1)
299
+ return x
300
+
301
+
302
+ class ContentEncoder(nn.Module):
303
+
304
+ def __init__(self, **kwargs):
305
+ super().__init__()
306
+ self.__dict__.update(kwargs)
307
+
308
+ self.dropout_layer = nn.Dropout(p=self.dropout)
309
+
310
+ # Pitch and duration embedding layers (separate layers for drums
311
+ # and non drums)
312
+ self.non_drums_pitch_emb = nn.Linear(constants.N_PITCH_TOKENS,
313
+ self.d//2)
314
+ self.drums_pitch_emb = nn.Linear(constants.N_PITCH_TOKENS, self.d//2)
315
+ self.dur_emb = nn.Linear(constants.N_DUR_TOKENS, self.d//2)
316
+
317
+ # Batch norm layers
318
+ self.bn_non_drums = nn.BatchNorm1d(num_features=self.d//2)
319
+ self.bn_drums = nn.BatchNorm1d(num_features=self.d//2)
320
+ self.bn_dur = nn.BatchNorm1d(num_features=self.d//2)
321
+
322
+ self.chord_encoder = nn.Linear(
323
+ self.d * (constants.MAX_SIMU_TOKENS-1), self.d)
324
+
325
+ self.graph_encoder = GCN(
326
+ dropout=self.dropout,
327
+ input_dim=self.d,
328
+ hidden_dim=self.d,
329
+ n_layers=self.gnn_n_layers,
330
+ num_relations=constants.N_EDGE_TYPES,
331
+ batch_norm=self.batch_norm
332
+ )
333
+
334
+ # Soft attention node-aggregation layer
335
+ gate_nn = nn.Sequential(
336
+ MLP(input_dim=self.d, output_dim=1, num_layers=1,
337
+ activation=False, dropout=self.dropout),
338
+ nn.BatchNorm1d(1)
339
+ )
340
+ self.graph_attention = GlobalAttention(gate_nn)
341
+
342
+ self.bars_encoder = nn.Linear(self.n_bars * self.d, self.d)
343
+
344
+ def forward(self, graph):
345
+
346
+ c_tensor = graph.c_tensor
347
+
348
+ # Discard SOS token
349
+ c_tensor = c_tensor[:, 1:, :]
350
+
351
+ # Get drums and non drums tensors
352
+ drums = c_tensor[graph.is_drum]
353
+ non_drums = c_tensor[torch.logical_not(graph.is_drum)]
354
+
355
+ # Compute drums embeddings
356
+ sz = drums.size()
357
+ drums_pitch = self.drums_pitch_emb(
358
+ drums[..., :constants.N_PITCH_TOKENS])
359
+ drums_pitch = self.bn_drums(drums_pitch.view(-1, self.d//2))
360
+ drums_pitch = drums_pitch.view(sz[0], sz[1], self.d//2)
361
+ drums_dur = self.dur_emb(drums[..., constants.N_PITCH_TOKENS:])
362
+ drums_dur = self.bn_dur(drums_dur.view(-1, self.d//2))
363
+ drums_dur = drums_dur.view(sz[0], sz[1], self.d//2)
364
+ drums = torch.cat((drums_pitch, drums_dur), dim=-1)
365
+ # n_nodes x MAX_SIMU_TOKENS x d
366
+
367
+ # Compute non drums embeddings
368
+ sz = non_drums.size()
369
+ non_drums_pitch = self.non_drums_pitch_emb(
370
+ non_drums[..., :constants.N_PITCH_TOKENS]
371
+ )
372
+ non_drums_pitch = self.bn_non_drums(non_drums_pitch.view(-1, self.d//2))
373
+ non_drums_pitch = non_drums_pitch.view(sz[0], sz[1], self.d//2)
374
+ non_drums_dur = self.dur_emb(non_drums[..., constants.N_PITCH_TOKENS:])
375
+ non_drums_dur = self.bn_dur(non_drums_dur.view(-1, self.d//2))
376
+ non_drums_dur = non_drums_dur.view(sz[0], sz[1], self.d//2)
377
+ non_drums = torch.cat((non_drums_pitch, non_drums_dur), dim=-1)
378
+ # n_nodes x MAX_SIMU_TOKENS x d
379
+
380
+ # Compute chord embeddings (drums and non drums)
381
+ drums = self.chord_encoder(
382
+ drums.view(-1, self.d * (constants.MAX_SIMU_TOKENS-1))
383
+ )
384
+ non_drums = self.chord_encoder(
385
+ non_drums.view(-1, self.d * (constants.MAX_SIMU_TOKENS-1))
386
+ )
387
+ drums = F.relu(drums)
388
+ non_drums = F.relu(non_drums)
389
+ drums = self.dropout_layer(drums)
390
+ non_drums = self.dropout_layer(non_drums)
391
+ # n_nodes x d
392
+
393
+ # Merge drums and non drums
394
+ out = torch.zeros((c_tensor.size(0), self.d), device=self.device,
395
+ dtype=drums.dtype)
396
+ out[graph.is_drum] = drums
397
+ out[torch.logical_not(graph.is_drum)] = non_drums
398
+ # n_nodes x d
399
+
400
+ # Set initial graph node states to intermediate chord representations
401
+ # and pass through GCN
402
+ graph.x = out
403
+ graph.distinct_bars = graph.bars + self.n_bars*graph.batch
404
+ out = self.graph_encoder(graph)
405
+ # n_nodes x d
406
+
407
+ # Aggregate final node states into bar encodings with soft attention
408
+ with torch.cuda.amp.autocast(enabled=False):
409
+ out = self.graph_attention(out, batch=graph.distinct_bars)
410
+ # bs x n_bars x d
411
+
412
+ out = out.view(-1, self.n_bars * self.d)
413
+ # bs x (n_bars*d)
414
+ z_c = self.bars_encoder(out)
415
+ # bs x d
416
+
417
+ return z_c
418
+
419
+
420
+ class StructureEncoder(nn.Module):
421
+
422
+ def __init__(self, **kwargs):
423
+ super().__init__()
424
+ self.__dict__.update(kwargs)
425
+
426
+ self.cnn_encoder = CNNEncoder(
427
+ dense_dim=self.d,
428
+ output_dim=self.d,
429
+ dropout=self.dropout,
430
+ batch_norm=self.batch_norm
431
+ )
432
+ self.bars_encoder = nn.Linear(self.n_bars * self.d, self.d)
433
+
434
+ def forward(self, graph):
435
+
436
+ s_tensor = graph.s_tensor
437
+ out = self.cnn_encoder(s_tensor.view(-1, constants.N_TRACKS,
438
+ self.resolution * 4))
439
+ # (bs*n_bars) x d
440
+ out = out.view(-1, self.n_bars * self.d)
441
+ # bs x (n_bars*d)
442
+ z_s = self.bars_encoder(out)
443
+ # bs x d
444
+
445
+ return z_s
446
+
447
+
448
+ class Encoder(nn.Module):
449
+
450
+ def __init__(self, **kwargs):
451
+ super().__init__()
452
+ self.__dict__.update(kwargs)
453
+
454
+ self.s_encoder = StructureEncoder(**kwargs)
455
+ self.c_encoder = ContentEncoder(**kwargs)
456
+
457
+ self.dropout_layer = nn.Dropout(p=self.dropout)
458
+
459
+ # Linear layer that merges content and structure representations
460
+ self.linear_merge = nn.Linear(2*self.d, self.d)
461
+ self.bn_linear_merge = nn.BatchNorm1d(num_features=self.d)
462
+
463
+ self.linear_mu = nn.Linear(self.d, self.d)
464
+ self.linear_log_var = nn.Linear(self.d, self.d)
465
+
466
+ def forward(self, graph):
467
+
468
+ z_s = self.s_encoder(graph)
469
+ z_c = self.c_encoder(graph)
470
+
471
+ # Merge content and structure representations
472
+ z_g = torch.cat((z_c, z_s), dim=1)
473
+ z_g = self.dropout_layer(z_g)
474
+ z_g = self.linear_merge(z_g)
475
+ z_g = self.bn_linear_merge(z_g)
476
+ z_g = F.relu(z_g)
477
+
478
+ # Compute mu and log(std^2)
479
+ z_g = self.dropout_layer(z_g)
480
+ mu = self.linear_mu(z_g)
481
+ log_var = self.linear_log_var(z_g)
482
+
483
+ return mu, log_var
484
+
485
+
486
+ class StructureDecoder(nn.Module):
487
+
488
+ def __init__(self, **kwargs):
489
+ super().__init__()
490
+ self.__dict__.update(kwargs)
491
+
492
+ self.bars_decoder = nn.Linear(self.d, self.d * self.n_bars)
493
+ self.cnn_decoder = CNNDecoder(
494
+ input_dim=self.d,
495
+ dense_dim=self.d,
496
+ dropout=self.dropout,
497
+ batch_norm=self.batch_norm
498
+ )
499
+
500
+ def forward(self, z_s):
501
+ # z_s: bs x d
502
+ out = self.bars_decoder(z_s) # bs x (n_bars*d)
503
+ out = self.cnn_decoder(out.reshape(-1, self.d))
504
+ out = out.view(z_s.size(0), self.n_bars, constants.N_TRACKS, -1)
505
+ return out
506
+
507
+
508
+ class ContentDecoder(nn.Module):
509
+
510
+ def __init__(self, **kwargs):
511
+ super().__init__()
512
+ self.__dict__.update(kwargs)
513
+
514
+ self.bars_decoder = nn.Linear(self.d, self.d * self.n_bars)
515
+
516
+ self.graph_decoder = GCN(
517
+ dropout=self.dropout,
518
+ input_dim=self.d,
519
+ hidden_dim=self.d,
520
+ n_layers=self.gnn_n_layers,
521
+ num_relations=constants.N_EDGE_TYPES,
522
+ batch_norm=self.batch_norm
523
+ )
524
+
525
+ self.chord_decoder = nn.Linear(
526
+ self.d, self.d*(constants.MAX_SIMU_TOKENS-1))
527
+
528
+ # Pitch and duration (un)embedding linear layers
529
+ self.drums_pitch_emb = nn.Linear(self.d//2, constants.N_PITCH_TOKENS)
530
+ self.non_drums_pitch_emb = nn.Linear(
531
+ self.d//2, constants.N_PITCH_TOKENS)
532
+ self.dur_emb = nn.Linear(self.d//2, constants.N_DUR_TOKENS)
533
+
534
+ self.dropout_layer = nn.Dropout(p=self.dropout)
535
+
536
+ def forward(self, z_c, s):
537
+
538
+ out = self.bars_decoder(z_c) # bs x (n_bars*d)
539
+
540
+ # Initialize node features with corresponding z_bar
541
+ # and propagate with GNN
542
+ s.distinct_bars = s.bars + self.n_bars*s.batch
543
+ _, counts = torch.unique(s.distinct_bars, return_counts=True)
544
+ out = out.view(-1, self.d)
545
+ out = torch.repeat_interleave(out, counts, axis=0) # n_nodes x d
546
+ s.x = out
547
+ out = self.graph_decoder(s) # n_nodes x d
548
+
549
+ out = self.chord_decoder(out) # n_nodes x (MAX_SIMU_TOKENS*d)
550
+ out = out.view(-1, constants.MAX_SIMU_TOKENS-1, self.d)
551
+
552
+ drums = out[s.is_drum] # n_nodes_drums x MAX_SIMU_TOKENS x d
553
+ non_drums = out[torch.logical_not(s.is_drum)]
554
+ # n_nodes_non_drums x MAX_SIMU_TOKENS x d
555
+
556
+ # Obtain final pitch and dur logits (softmax will be applied
557
+ # outside forward)
558
+ non_drums = self.dropout_layer(non_drums)
559
+ drums = self.dropout_layer(drums)
560
+
561
+ drums_pitch = self.drums_pitch_emb(drums[..., :self.d//2])
562
+ drums_dur = self.dur_emb(drums[..., self.d//2:])
563
+ drums = torch.cat((drums_pitch, drums_dur), dim=-1)
564
+ # n_nodes_drums x MAX_SIMU_TOKENS x d_token
565
+
566
+ non_drums_pitch = self.non_drums_pitch_emb(non_drums[..., :self.d//2])
567
+ non_drums_dur = self.dur_emb(non_drums[..., self.d//2:])
568
+ non_drums = torch.cat((non_drums_pitch, non_drums_dur), dim=-1)
569
+ # n_nodes_non_drums x MAX_SIMU_TOKENS x d_token
570
+
571
+ # Merge drums and non-drums in the final output tensor
572
+ d_token = constants.D_TOKEN_PAIR
573
+ out = torch.zeros((s.num_nodes, constants.MAX_SIMU_TOKENS-1, d_token),
574
+ device=self.device, dtype=drums.dtype)
575
+ out[s.is_drum] = drums
576
+ out[torch.logical_not(s.is_drum)] = non_drums
577
+
578
+ return out
579
+
580
+
581
+ class Decoder(nn.Module):
582
+
583
+ def __init__(self, **kwargs):
584
+ super().__init__()
585
+ self.__dict__.update(kwargs)
586
+
587
+ self.lin_decoder = nn.Linear(self.d, 2 * self.d)
588
+ self.batch_norm = nn.BatchNorm1d(num_features=2*self.d)
589
+ self.dropout = nn.Dropout(p=self.dropout)
590
+
591
+ self.s_decoder = StructureDecoder(**kwargs)
592
+ self.c_decoder = ContentDecoder(**kwargs)
593
+
594
+ self.sigmoid_thresh = 0.5
595
+
596
+ def _structure_from_binary(self, s_tensor):
597
+
598
+ # Create graph structures for each batch
599
+ s = []
600
+ for i in range(s_tensor.size(0)):
601
+ s.append(graph_from_tensor(s_tensor[i]))
602
+
603
+ # Create batch of graphs from single graphs
604
+ s = Batch.from_data_list(s, exclude_keys=['batch'])
605
+ s = s.to(next(self.parameters()).device)
606
+
607
+ return s
608
+
609
+ def _binary_from_logits(self, s_logits):
610
+
611
+ # Hard threshold instead of sampling gives more pleasant results
612
+ s_tensor = torch.sigmoid(s_logits)
613
+ s_tensor[s_tensor >= self.sigmoid_thresh] = 1
614
+ s_tensor[s_tensor < self.sigmoid_thresh] = 0
615
+ s_tensor = s_tensor.bool()
616
+
617
+ # Avoid empty bars by creating a fake activation for each empty
618
+ # (n_tracks x n_timesteps) bar matrix in position [0, 0]
619
+ empty_mask = ~s_tensor.any(dim=-1).any(dim=-1)
620
+ idxs = torch.nonzero(empty_mask, as_tuple=True)
621
+ s_tensor[idxs + (0, 0)] = True
622
+
623
+ return s_tensor
624
+
625
+ def _structure_from_logits(self, s_logits):
626
+
627
+ # Compute binary structure tensor from logits and build torch geometric
628
+ # structure from binary tensor
629
+ s_tensor = self._binary_from_logits(s_logits)
630
+ s = self._structure_from_binary(s_tensor)
631
+
632
+ return s
633
+
634
+ def forward(self, z, s=None):
635
+
636
+ # Obtain z_s and z_c from z
637
+ z = self.lin_decoder(z)
638
+ z = self.batch_norm(z)
639
+ z = F.relu(z)
640
+ z = self.dropout(z) # bs x (2*d)
641
+ z_s, z_c = z[:, :self.d], z[:, self.d:]
642
+
643
+ # Obtain the tensor containing structure logits
644
+ s_logits = self.s_decoder(z_s)
645
+
646
+ if s is None:
647
+ # Build torch geometric graph structure from structure logits.
648
+ # This step involves non differentiable operations.
649
+ # No gradients pass through here.
650
+ s = self._structure_from_logits(s_logits.detach())
651
+
652
+ # Obtain the tensor containing content logits
653
+ c_logits = self.c_decoder(z_c, s)
654
+
655
+ return s_logits, c_logits
656
+
657
+
658
+ class VAE(nn.Module):
659
+
660
+ def __init__(self, **kwargs):
661
+ super().__init__()
662
+ self.encoder = Encoder(**kwargs)
663
+ self.decoder = Decoder(**kwargs)
664
+
665
+ def forward(self, graph):
666
+
667
+ # Encoder pass
668
+ mu, log_var = self.encoder(graph)
669
+
670
+ # Reparameterization trick
671
+ z = torch.exp(0.5 * log_var)
672
+ z = z * torch.randn_like(z)
673
+ z = z + mu
674
+
675
+ # Decoder pass
676
+ out = self.decoder(z, graph)
677
+
678
+ return out, mu, log_var
models/.gitattributes ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ LMD16/checkpoint filter=lfs diff=lfs merge=lfs -text
37
+ LMD2/checkpoint filter=lfs diff=lfs merge=lfs -text
models/LMD2/checkpoint ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:657b1de2d4de3a4dc94c63616784bd9142ee55db1e5f33912d0ea263c2aa973e
3
+ size 661667674
models/LMD2/configuration ADDED
Binary file (879 Bytes). View file
 
models/README.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ tags:
4
+ - music
5
+ - generation
6
+ - symbolic music
7
+ ---
8
+
9
+ # polyphemus
10
+
11
+ A graph-based deep MIDI music generator. Official model repository of the [paper](https://arxiv.org/abs/2307.14928) "Graph-based Polyphonic Multitrack Music Generation".
12
+
13
+ You can listen to the samples generated in the experimental phase in the dedicated [site](https://emanuelecosenza.github.io/polyphemus/).
14
+
15
+ The repository contains two models: `LMD2`, a model that generates short 2-bar of music, and `LMD16`, a model that generates longer 16-bar sequences.
16
+ Refer to the GitHub [repo](https://github.com/EmanueleCosenza/polyphemus) for instructions on how to use these models.
plots.py ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ from matplotlib import pyplot as plt
4
+ import matplotlib as mpl
5
+ import muspy
6
+ import torch
7
+
8
+ import constants
9
+
10
+
11
+ def plot_pianoroll(muspy_song, save_dir=None, name='pianoroll'):
12
+
13
+ lines_linewidth = 4
14
+ axes_linewidth = 4
15
+ font_size = 34
16
+ fformat = 'png'
17
+ xticklabel = False
18
+ label = 'y'
19
+ figsize = (20, 10)
20
+ dpi = 200
21
+
22
+ with mpl.rc_context({'lines.linewidth': lines_linewidth,
23
+ 'axes.linewidth': axes_linewidth,
24
+ 'font.size': font_size}):
25
+
26
+ fig, axs_ = plt.subplots(constants.N_TRACKS, sharex=True,
27
+ figsize=figsize)
28
+ fig.subplots_adjust(hspace=0)
29
+ axs = axs_.tolist()
30
+ muspy.show_pianoroll(music=muspy_song, yticklabel='off', xtick='off',
31
+ label=label, xticklabel=xticklabel,
32
+ grid_axis='off', axs=axs, preset='full')
33
+
34
+ if save_dir:
35
+ plt.savefig(os.path.join(save_dir, name + "." + fformat),
36
+ format=fformat, dpi=dpi)
37
+
38
+
39
+ def plot_structure(s_tensor, save_dir=None, name='structure'):
40
+
41
+ lines_linewidth = 1
42
+ axes_linewidth = 1
43
+ font_size = 14
44
+ fformat = 'svg'
45
+ dpi = 200
46
+
47
+ n_bars = s_tensor.shape[0]
48
+ figsize = (3 * n_bars, 3)
49
+
50
+ n_timesteps = s_tensor.size(2)
51
+ resolution = n_timesteps // 4
52
+ s_tensor = s_tensor.permute(1, 0, 2)
53
+ s_tensor = s_tensor.reshape(s_tensor.shape[0], -1)
54
+
55
+ with mpl.rc_context({'lines.linewidth': lines_linewidth,
56
+ 'axes.linewidth': axes_linewidth,
57
+ 'font.size': font_size}):
58
+
59
+ plt.figure(figsize=figsize)
60
+ plt.pcolormesh(s_tensor, edgecolors='k', linewidth=1)
61
+ ax = plt.gca()
62
+
63
+ plt.xticks(range(0, s_tensor.shape[1], resolution),
64
+ range(1, 4*n_bars + 1))
65
+ plt.yticks(range(0, s_tensor.shape[0]), constants.TRACKS)
66
+
67
+ ax.invert_yaxis()
68
+
69
+ if save_dir:
70
+ plt.savefig(os.path.join(save_dir, name + "." + fformat),
71
+ format=fformat, dpi=dpi)
72
+
73
+
74
+ def plot_stats(stat_names, stats_tr, stats_val=None, eval_every=None,
75
+ labels=None, rx=None, ry=None):
76
+
77
+ for i, stat in enumerate(stat_names):
78
+
79
+ label = stat if not labels else labels[i]
80
+
81
+ plt.plot(range(1, len(stats_tr[stat])+1), stats_tr[stat],
82
+ label=label+' (TR)')
83
+
84
+ if stats_val:
85
+ plt.plot(range(eval_every, len(stats_tr[stat])+1, eval_every),
86
+ stats_val[stat], '.', label=label+' (VL)')
87
+
88
+ plt.grid()
89
+
90
+ plt.ylim(ry) if ry else plt.ylim(0)
91
+ plt.xlim(rx) if rx else plt.xlim(0)
92
+
93
+ plt.legend()
94
+
95
+
96
+ # Dictionary that maps loss statistic name to plot label
97
+ loss_labels = {
98
+ 'tot': 'Total Loss',
99
+ 'structure': 'Structure',
100
+ 'pitch': 'Pitches',
101
+ 'dur': 'Duration',
102
+ 'reconstruction': 'Reconstruction Term',
103
+ 'kld': 'KLD',
104
+ 'beta*kld': 'beta * KLD'
105
+ }
106
+
107
+
108
+ def plot_losses(model_dir, losses, plot_val=False):
109
+
110
+ checkpoint_path = os.path.join(model_dir, 'checkpoint')
111
+ checkpoint = torch.load(checkpoint_path, map_location='cpu')
112
+ labels = [loss_labels[loss] for loss in losses]
113
+
114
+ tr_losses = checkpoint['tr_losses']
115
+ val_losses = checkpoint['val_losses'] if plot_val == True else None
116
+ eval_every = checkpoint['eval_every'] if plot_val == True else None
117
+
118
+ plot_stats(losses, tr_losses, stats_val=val_losses,
119
+ eval_every=eval_every, labels=labels, rx=(0))
120
+
121
+
122
+ # Dictionary that maps accuracy statistic name to plot label
123
+ accuracy_labels = {
124
+ 's_acc': 'Struct. Accuracy',
125
+ 's_precision': 'Struct. Precision',
126
+ 's_recall': 'Struct. Recall',
127
+ 's_f1': 'Struct. F1',
128
+ 'pitch': 'Pitch Accuracy',
129
+ 'pitch_drums': 'Pitch Accuracy (Drums)',
130
+ 'pitch_non_drums': 'Pitch Accuracy (Non Drums)',
131
+ 'dur': 'Duration Accuracy',
132
+ 'note': 'Note Accuracy'
133
+ }
134
+
135
+
136
+ def plot_accuracies(model_dir, accuracies, plot_val=False):
137
+
138
+ checkpoint_path = os.path.join(model_dir, 'checkpoint')
139
+ checkpoint = torch.load(checkpoint_path, map_location='cpu')
140
+ labels = [accuracy_labels[accuracy] for accuracy in accuracies]
141
+
142
+ tr_accuracies = checkpoint['tr_accuracies']
143
+ val_accuracies = checkpoint['val_accuracies'] if plot_val == True else None
144
+ eval_every = checkpoint['eval_every'] if plot_val == True else None
145
+
146
+ plot_stats(accuracies, tr_accuracies, stats_val=val_accuracies,
147
+ eval_every=eval_every, labels=labels, ry=(0, 1))
preprocess.py ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import sys
4
+ import multiprocessing
5
+ import itertools
6
+ import argparse
7
+ from itertools import product
8
+
9
+ import numpy as np
10
+ import tqdm
11
+ import pypianoroll as pproll
12
+ import muspy
13
+
14
+ import constants
15
+ from constants import PitchToken, DurationToken
16
+
17
+
18
+ def preprocess_midi_file(filepath, dest_dir, n_bars, resolution):
19
+
20
+ print("Preprocessing file {}".format(filepath))
21
+
22
+ filename = os.path.basename(filepath)
23
+ saved_samples = 0
24
+
25
+ # Load the file both as a pypianoroll song and a muspy song
26
+ # (Need to load both since muspy.to_pypianoroll() is expensive)
27
+ try:
28
+ pproll_song = pproll.read(filepath, resolution=resolution)
29
+ muspy_song = muspy.read(filepath)
30
+ except Exception as e:
31
+ print("Song skipped (Invalid song format)")
32
+ return 0
33
+
34
+ # Only accept songs that have a time signature of 4/4 and no time changes
35
+ for t in muspy_song.time_signatures:
36
+ if t.numerator != 4 or t.denominator != 4:
37
+ print("Song skipped ({}/{} time signature)".
38
+ format(t.numerator, t.denominator))
39
+ return 0
40
+
41
+ # Gather tracks of pypianoroll song based on MIDI program number
42
+ drum_tracks = []
43
+ bass_tracks = []
44
+ guitar_tracks = []
45
+ strings_tracks = []
46
+
47
+ for track in pproll_song.tracks:
48
+ if track.is_drum:
49
+ track.name = 'Drums'
50
+ drum_tracks.append(track)
51
+ elif 0 <= track.program <= 31:
52
+ track.name = 'Guitar'
53
+ guitar_tracks.append(track)
54
+ elif 32 <= track.program <= 39:
55
+ track.name = 'Bass'
56
+ bass_tracks.append(track)
57
+ else:
58
+ # Tracks with program > 39 are all considered as strings tracks
59
+ # and will be merged into a single track later on
60
+ strings_tracks.append(track)
61
+
62
+ # Filter song if it does not contain drum, guitar, bass or strings tracks
63
+ # if not guitar_tracks \
64
+ if not drum_tracks or not guitar_tracks \
65
+ or not bass_tracks or not strings_tracks:
66
+ print("Song skipped (does not contain drum or "
67
+ "guitar or bass or strings tracks)")
68
+ return 0
69
+
70
+ # Merge strings tracks into a single pypianoroll track
71
+ strings = pproll.Multitrack(tracks=strings_tracks)
72
+ strings_track = pproll.Track(pianoroll=strings.blend(mode='max'),
73
+ program=48, name='Strings')
74
+
75
+ combinations = list(product(drum_tracks, bass_tracks, guitar_tracks))
76
+
77
+ # Single instruments can have multiple tracks.
78
+ # Consider all possible combinations of drum, bass, and guitar tracks
79
+ for i, combination in enumerate(combinations):
80
+
81
+ print("Processing combination {} of {}".format(i + 1,
82
+ len(combinations)))
83
+
84
+ # Process combination (called 'subsong' from now on)
85
+ drum_track, bass_track, guitar_track = combination
86
+ tracks = [drum_track, bass_track, guitar_track, strings_track]
87
+
88
+ pproll_subsong = pproll.Multitrack(
89
+ tracks=tracks,
90
+ tempo=pproll_song.tempo,
91
+ resolution=resolution
92
+ )
93
+ muspy_subsong = muspy.from_pypianoroll(pproll_subsong)
94
+
95
+ tracks_notes = [track.notes for track in muspy_subsong.tracks]
96
+
97
+ # Obtain length of subsong (maximum of each track's length)
98
+ length = 0
99
+ for notes in tracks_notes:
100
+ track_length = max(note.end for note in notes) if notes else 0
101
+ length = max(length, track_length)
102
+ length += 1
103
+
104
+ # Add timesteps until length is a multiple of resolution
105
+ length = length if length % (4*resolution) == 0 \
106
+ else length + (4*resolution-(length % (4*resolution)))
107
+
108
+ tracks_content = []
109
+ tracks_structure = []
110
+
111
+ for notes in tracks_notes:
112
+
113
+ # track_content: length x MAX_SIMU_TOKENS x 2
114
+ # This is used as a basis to build the final content tensors for
115
+ # each sequence.
116
+ # The last dimension contains pitches and durations. int16 is enough
117
+ # to encode small to medium duration values.
118
+ track_content = np.zeros((length, constants.MAX_SIMU_TOKENS, 2),
119
+ np.int16)
120
+
121
+ track_content[:, :, 0] = PitchToken.PAD.value
122
+ track_content[:, 0, 0] = PitchToken.SOS.value
123
+ track_content[:, :, 1] = DurationToken.PAD.value
124
+ track_content[:, 0, 1] = DurationToken.SOS.value
125
+
126
+ # Keeps track of how many notes have been stored in each timestep
127
+ # (int8 imposes MAX_SIMU_TOKENS < 256)
128
+ notes_counter = np.ones(length, dtype=np.int8)
129
+
130
+ # Todo: np.put_along_axis?
131
+ for note in notes:
132
+ # Insert note in the lowest position available in the timestep
133
+
134
+ t = note.time
135
+
136
+ if notes_counter[t] >= constants.MAX_SIMU_TOKENS-1:
137
+ # Skip note if there is no more space
138
+ continue
139
+
140
+ pitch = max(min(note.pitch, constants.MAX_PITCH_TOKEN), 0)
141
+ track_content[t, notes_counter[t], 0] = pitch
142
+ dur = max(min(note.duration, constants.MAX_DUR_TOKEN + 1), 1)
143
+ track_content[t, notes_counter[t], 1] = dur-1
144
+ notes_counter[t] += 1
145
+
146
+ # Add EOS token
147
+ t_range = np.arange(0, length)
148
+ track_content[t_range, notes_counter, 0] = PitchToken.EOS.value
149
+ track_content[t_range, notes_counter, 1] = DurationToken.EOS.value
150
+
151
+ # Get track activations, a boolean tensor indicating whether notes
152
+ # are being played in a timestep (sustain does not count)
153
+ # (needed for graph rep.)
154
+ activations = np.array(notes_counter-1, dtype=bool)
155
+
156
+ tracks_content.append(track_content)
157
+ tracks_structure.append(activations)
158
+
159
+ # n_tracks x length x MAX_SIMU_TOKENS x 2
160
+ subsong_content = np.stack(tracks_content, axis=0)
161
+
162
+ # n_tracks x length
163
+ subsong_structure = np.stack(tracks_structure, axis=0)
164
+
165
+ # Slide window over 'subsong_content' and 'subsong_structure' along the
166
+ # time axis (2nd dimension) with the stride of a bar
167
+ # Todo: np.lib.stride_tricks.as_strided(song_proll)?
168
+ for i in range(0, length-n_bars*4*resolution+1, 4*resolution):
169
+
170
+ # Get the content and structure tensors of a single sequence
171
+ c_tensor = subsong_content[:, i:i+n_bars*4*resolution, :]
172
+ s_tensor = subsong_structure[:, i:i+n_bars*4*resolution]
173
+ c_tensor = np.copy(c_tensor)
174
+ s_tensor = np.copy(s_tensor)
175
+
176
+ if n_bars > 1:
177
+ # Skip sequence if it contains more than one bar of consecutive
178
+ # silence in at least one track
179
+ bars = s_tensor.reshape(s_tensor.shape[0], n_bars, -1)
180
+ bars_acts = np.any(bars, axis=2)
181
+
182
+ if 1 in np.diff(np.where(bars_acts == 0)[1]):
183
+ continue
184
+
185
+ # Skip sequence if it contains one bar of complete silence
186
+ silences = np.logical_not(np.any(bars_acts, axis=0))
187
+ if np.any(silences):
188
+ continue
189
+
190
+ else:
191
+ # Skip if all tracks are silenced
192
+ bar_acts = np.any(s_tensor, axis=1)
193
+ if not np.any(bar_acts):
194
+ continue
195
+
196
+ # Randomly transpose the pitches of the sequence (-5 to 6 semitones)
197
+ # Not considering SOS, EOS or PAD tokens. Not transposing drums.
198
+ shift = np.random.choice(np.arange(-5, 7), 1)
199
+ cond = (c_tensor[1:, :, :, 0] != PitchToken.PAD.value) & \
200
+ (c_tensor[1:, :, :, 0] != PitchToken.SOS.value) & \
201
+ (c_tensor[1:, :, :, 0] != PitchToken.EOS.value)
202
+ non_drums = c_tensor[1:, ...]
203
+ non_drums[cond, 0] += shift
204
+ non_drums[cond, 0] = np.clip(non_drums[cond, 0], a_min=0,
205
+ a_max=constants.MAX_PITCH_TOKEN)
206
+
207
+ # Save sample (content and structure) to file
208
+ sample_filepath = os.path.join(
209
+ dest_dir, filename+str(saved_samples))
210
+ np.savez(sample_filepath, c_tensor=c_tensor, s_tensor=s_tensor)
211
+
212
+ saved_samples += 1
213
+
214
+
215
+ def preprocess_midi_dataset(midi_dataset_dir, preprocessed_dir, n_bars,
216
+ resolution, n_files=None, n_workers=1):
217
+
218
+ print("Starting preprocessing")
219
+ start = time.time()
220
+
221
+ # Visit recursively the directories inside the dataset directory
222
+ with multiprocessing.Pool(n_workers) as pool:
223
+
224
+ walk = os.walk(midi_dataset_dir)
225
+ fn_gen = itertools.chain.from_iterable(
226
+ ((os.path.join(dirpath, file), preprocessed_dir, n_bars, resolution)
227
+ for file in files)
228
+ for dirpath, dirs, files in walk
229
+ )
230
+
231
+ r = list(tqdm.tqdm(pool.starmap(preprocess_midi_file, fn_gen),
232
+ total=n_files))
233
+
234
+ end = time.time()
235
+ hours, rem = divmod(end-start, 3600)
236
+ minutes, seconds = divmod(rem, 60)
237
+ print("Preprocessing completed in (h:m:s): {:0>2}:{:0>2}:{:05.2f}"
238
+ .format(int(hours), int(minutes), seconds))
239
+
240
+
241
+ if __name__ == "__main__":
242
+
243
+ parser = argparse.ArgumentParser(
244
+ description="Preprocesses a MIDI dataset. MIDI files can be arranged "
245
+ "hierarchically in subdirectories, similarly to the Lakh MIDI "
246
+ "Dataset (lmd_matched) and the MetaMIDI Dataset."
247
+ )
248
+ parser.add_argument(
249
+ 'midi_dataset_dir',
250
+ type=str,
251
+ help='Directory of the MIDI dataset.'
252
+ )
253
+ parser.add_argument(
254
+ 'preprocessed_dir',
255
+ type=str,
256
+ help='Directory to save the preprocessed dataset.'
257
+ )
258
+ parser.add_argument(
259
+ '--n_bars',
260
+ type=int,
261
+ default=2,
262
+ help="Number of bars for each sequence of the resulting preprocessed "
263
+ "dataset. Defaults to 2 bars."
264
+ )
265
+ parser.add_argument(
266
+ '--resolution',
267
+ type=int,
268
+ default=8,
269
+ help="Number of timesteps per beat. When set to r, given that only "
270
+ "4/4 songs are preprocessed, there will be 4*r timesteps in a bar. "
271
+ "Defaults to 8."
272
+ )
273
+ parser.add_argument(
274
+ '--n_files',
275
+ type=int,
276
+ help="Number of files in the MIDI dataset. If set, the script "
277
+ "will provide statistics on the time remaining."
278
+ )
279
+ parser.add_argument(
280
+ '--n_workers',
281
+ type=int,
282
+ default=1,
283
+ help="Number of parallel workers. Defaults to 1."
284
+ )
285
+
286
+ args = parser.parse_args()
287
+
288
+ # Create the output directory if it does not exist
289
+ if not os.path.exists(args.preprocessed_dir):
290
+ os.makedirs(args.preprocessed_dir)
291
+
292
+ preprocess_midi_dataset(args.midi_dataset_dir, args.preprocessed_dir,
293
+ args.n_bars, args.resolution, args.n_files,
294
+ n_workers=args.n_workers)
requirements.txt ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --find-links https://download.pytorch.org/whl/torch_stable.html
2
+ --find-links https://data.pyg.org/whl/torch-1.7.0+cu101.html
3
+
4
+ # PyTorch related
5
+ torch==1.7.0+cu101
6
+ torchvision==0.8.0
7
+ torch-geometric==2.0.2
8
+ torch-cluster==1.5.9
9
+ torch-scatter==2.0.7
10
+ torch-sparse==0.6.9
11
+ torch-spline-conv==1.2.1
12
+
13
+ # Music packages
14
+ pretty-midi==0.2.9
15
+ muspy==0.4.0
16
+ pypianoroll==1.0.4
17
+
18
+ # Various
19
+ prettytable==2.4.0
20
+ tqdm==4.62.3
21
+ huggingface-hub==0.16.4
22
+
23
+ # Hugging Face
24
+ flask==2.1.*
25
+ requests==2.27.*
soundfonts/FluidR3_GM.sf2 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:74594e8f4250680adf590507a306655a299935343583256f3b722c48a1bc1cb0
3
+ size 148398306
static/0/generated.mid ADDED
Binary file (542 Bytes). View file
 
static/0/structure.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[[true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, true, false, true, false, false, false], [true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], [true, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], [true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]], [[true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, true, false, true, false, false, false], [true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], [true, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], [true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]]]
static/0/z ADDED
Binary file (2.8 kB). View file
 
static/assets/FontAwesome/LICENSE.txt ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Fonticons, Inc. (https://fontawesome.com)
2
+
3
+ --------------------------------------------------------------------------------
4
+
5
+ Font Awesome Free License
6
+
7
+ Font Awesome Free is free, open source, and GPL friendly. You can use it for
8
+ commercial projects, open source projects, or really almost whatever you want.
9
+ Full Font Awesome Free license: https://fontawesome.com/license/free.
10
+
11
+ --------------------------------------------------------------------------------
12
+
13
+ # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
14
+
15
+ The Font Awesome Free download is licensed under a Creative Commons
16
+ Attribution 4.0 International License and applies to all icons packaged
17
+ as SVG and JS file types.
18
+
19
+ --------------------------------------------------------------------------------
20
+
21
+ # Fonts: SIL OFL 1.1 License
22
+
23
+ In the Font Awesome Free download, the SIL OFL license applies to all icons
24
+ packaged as web and desktop font files.
25
+
26
+ Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com)
27
+ with Reserved Font Name: "Font Awesome".
28
+
29
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
30
+ This license is copied below, and is also available with a FAQ at:
31
+ http://scripts.sil.org/OFL
32
+
33
+ SIL OPEN FONT LICENSE
34
+ Version 1.1 - 26 February 2007
35
+
36
+ PREAMBLE
37
+ The goals of the Open Font License (OFL) are to stimulate worldwide
38
+ development of collaborative font projects, to support the font creation
39
+ efforts of academic and linguistic communities, and to provide a free and
40
+ open framework in which fonts may be shared and improved in partnership
41
+ with others.
42
+
43
+ The OFL allows the licensed fonts to be used, studied, modified and
44
+ redistributed freely as long as they are not sold by themselves. The
45
+ fonts, including any derivative works, can be bundled, embedded,
46
+ redistributed and/or sold with any software provided that any reserved
47
+ names are not used by derivative works. The fonts and derivatives,
48
+ however, cannot be released under any other type of license. The
49
+ requirement for fonts to remain under this license does not apply
50
+ to any document created using the fonts or their derivatives.
51
+
52
+ DEFINITIONS
53
+ "Font Software" refers to the set of files released by the Copyright
54
+ Holder(s) under this license and clearly marked as such. This may
55
+ include source files, build scripts and documentation.
56
+
57
+ "Reserved Font Name" refers to any names specified as such after the
58
+ copyright statement(s).
59
+
60
+ "Original Version" refers to the collection of Font Software components as
61
+ distributed by the Copyright Holder(s).
62
+
63
+ "Modified Version" refers to any derivative made by adding to, deleting,
64
+ or substituting — in part or in whole — any of the components of the
65
+ Original Version, by changing formats or by porting the Font Software to a
66
+ new environment.
67
+
68
+ "Author" refers to any designer, engineer, programmer, technical
69
+ writer or other person who contributed to the Font Software.
70
+
71
+ PERMISSION & CONDITIONS
72
+ Permission is hereby granted, free of charge, to any person obtaining
73
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
74
+ redistribute, and sell modified and unmodified copies of the Font
75
+ Software, subject to the following conditions:
76
+
77
+ 1) Neither the Font Software nor any of its individual components,
78
+ in Original or Modified Versions, may be sold by itself.
79
+
80
+ 2) Original or Modified Versions of the Font Software may be bundled,
81
+ redistributed and/or sold with any software, provided that each copy
82
+ contains the above copyright notice and this license. These can be
83
+ included either as stand-alone text files, human-readable headers or
84
+ in the appropriate machine-readable metadata fields within text or
85
+ binary files as long as those fields can be easily viewed by the user.
86
+
87
+ 3) No Modified Version of the Font Software may use the Reserved Font
88
+ Name(s) unless explicit written permission is granted by the corresponding
89
+ Copyright Holder. This restriction only applies to the primary font name as
90
+ presented to the users.
91
+
92
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
93
+ Software shall not be used to promote, endorse or advertise any
94
+ Modified Version, except to acknowledge the contribution(s) of the
95
+ Copyright Holder(s) and the Author(s) or with their explicit written
96
+ permission.
97
+
98
+ 5) The Font Software, modified or unmodified, in part or in whole,
99
+ must be distributed entirely under this license, and must not be
100
+ distributed under any other license. The requirement for fonts to
101
+ remain under this license does not apply to any document created
102
+ using the Font Software.
103
+
104
+ TERMINATION
105
+ This license becomes null and void if any of the above conditions are
106
+ not met.
107
+
108
+ DISCLAIMER
109
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
110
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
111
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
112
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
113
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
114
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
115
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
116
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
117
+ OTHER DEALINGS IN THE FONT SOFTWARE.
118
+
119
+ --------------------------------------------------------------------------------
120
+
121
+ # Code: MIT License (https://opensource.org/licenses/MIT)
122
+
123
+ In the Font Awesome Free download, the MIT license applies to all non-font and
124
+ non-icon files.
125
+
126
+ Copyright 2023 Fonticons, Inc.
127
+
128
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
129
+ this software and associated documentation files (the "Software"), to deal in the
130
+ Software without restriction, including without limitation the rights to use, copy,
131
+ modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
132
+ and to permit persons to whom the Software is furnished to do so, subject to the
133
+ following conditions:
134
+
135
+ The above copyright notice and this permission notice shall be included in all
136
+ copies or substantial portions of the Software.
137
+
138
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
139
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
140
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
141
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
142
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
143
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
144
+
145
+ --------------------------------------------------------------------------------
146
+
147
+ # Attribution
148
+
149
+ Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
150
+ Awesome Free files already contain embedded comments with sufficient
151
+ attribution, so you shouldn't need to do anything additional when using these
152
+ files normally.
153
+
154
+ We've kept attribution comments terse, so we ask that you do not actively work
155
+ to remove them from files, especially code. They're a great way for folks to
156
+ learn about Font Awesome.
157
+
158
+ --------------------------------------------------------------------------------
159
+
160
+ # Brand Icons
161
+
162
+ All brand icons are trademarks of their respective owners. The use of these
163
+ trademarks does not indicate endorsement of the trademark holder by Font
164
+ Awesome, nor vice versa. **Please do not use brand logos for any purpose except
165
+ to represent the company, product, or service to which they refer.**
static/assets/FontAwesome/css/brands.css ADDED
@@ -0,0 +1,1537 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ :root, :host {
7
+ --fa-style-family-brands: 'Font Awesome 6 Brands';
8
+ --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
9
+
10
+ @font-face {
11
+ font-family: 'Font Awesome 6 Brands';
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ font-display: block;
15
+ src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
16
+
17
+ .fab,
18
+ .fa-brands {
19
+ font-weight: 400; }
20
+
21
+ .fa-monero:before {
22
+ content: "\f3d0"; }
23
+
24
+ .fa-hooli:before {
25
+ content: "\f427"; }
26
+
27
+ .fa-yelp:before {
28
+ content: "\f1e9"; }
29
+
30
+ .fa-cc-visa:before {
31
+ content: "\f1f0"; }
32
+
33
+ .fa-lastfm:before {
34
+ content: "\f202"; }
35
+
36
+ .fa-shopware:before {
37
+ content: "\f5b5"; }
38
+
39
+ .fa-creative-commons-nc:before {
40
+ content: "\f4e8"; }
41
+
42
+ .fa-aws:before {
43
+ content: "\f375"; }
44
+
45
+ .fa-redhat:before {
46
+ content: "\f7bc"; }
47
+
48
+ .fa-yoast:before {
49
+ content: "\f2b1"; }
50
+
51
+ .fa-cloudflare:before {
52
+ content: "\e07d"; }
53
+
54
+ .fa-ups:before {
55
+ content: "\f7e0"; }
56
+
57
+ .fa-wpexplorer:before {
58
+ content: "\f2de"; }
59
+
60
+ .fa-dyalog:before {
61
+ content: "\f399"; }
62
+
63
+ .fa-bity:before {
64
+ content: "\f37a"; }
65
+
66
+ .fa-stackpath:before {
67
+ content: "\f842"; }
68
+
69
+ .fa-buysellads:before {
70
+ content: "\f20d"; }
71
+
72
+ .fa-first-order:before {
73
+ content: "\f2b0"; }
74
+
75
+ .fa-modx:before {
76
+ content: "\f285"; }
77
+
78
+ .fa-guilded:before {
79
+ content: "\e07e"; }
80
+
81
+ .fa-vnv:before {
82
+ content: "\f40b"; }
83
+
84
+ .fa-square-js:before {
85
+ content: "\f3b9"; }
86
+
87
+ .fa-js-square:before {
88
+ content: "\f3b9"; }
89
+
90
+ .fa-microsoft:before {
91
+ content: "\f3ca"; }
92
+
93
+ .fa-qq:before {
94
+ content: "\f1d6"; }
95
+
96
+ .fa-orcid:before {
97
+ content: "\f8d2"; }
98
+
99
+ .fa-java:before {
100
+ content: "\f4e4"; }
101
+
102
+ .fa-invision:before {
103
+ content: "\f7b0"; }
104
+
105
+ .fa-creative-commons-pd-alt:before {
106
+ content: "\f4ed"; }
107
+
108
+ .fa-centercode:before {
109
+ content: "\f380"; }
110
+
111
+ .fa-glide-g:before {
112
+ content: "\f2a6"; }
113
+
114
+ .fa-drupal:before {
115
+ content: "\f1a9"; }
116
+
117
+ .fa-hire-a-helper:before {
118
+ content: "\f3b0"; }
119
+
120
+ .fa-creative-commons-by:before {
121
+ content: "\f4e7"; }
122
+
123
+ .fa-unity:before {
124
+ content: "\e049"; }
125
+
126
+ .fa-whmcs:before {
127
+ content: "\f40d"; }
128
+
129
+ .fa-rocketchat:before {
130
+ content: "\f3e8"; }
131
+
132
+ .fa-vk:before {
133
+ content: "\f189"; }
134
+
135
+ .fa-untappd:before {
136
+ content: "\f405"; }
137
+
138
+ .fa-mailchimp:before {
139
+ content: "\f59e"; }
140
+
141
+ .fa-css3-alt:before {
142
+ content: "\f38b"; }
143
+
144
+ .fa-square-reddit:before {
145
+ content: "\f1a2"; }
146
+
147
+ .fa-reddit-square:before {
148
+ content: "\f1a2"; }
149
+
150
+ .fa-vimeo-v:before {
151
+ content: "\f27d"; }
152
+
153
+ .fa-contao:before {
154
+ content: "\f26d"; }
155
+
156
+ .fa-square-font-awesome:before {
157
+ content: "\e5ad"; }
158
+
159
+ .fa-deskpro:before {
160
+ content: "\f38f"; }
161
+
162
+ .fa-sistrix:before {
163
+ content: "\f3ee"; }
164
+
165
+ .fa-square-instagram:before {
166
+ content: "\e055"; }
167
+
168
+ .fa-instagram-square:before {
169
+ content: "\e055"; }
170
+
171
+ .fa-battle-net:before {
172
+ content: "\f835"; }
173
+
174
+ .fa-the-red-yeti:before {
175
+ content: "\f69d"; }
176
+
177
+ .fa-square-hacker-news:before {
178
+ content: "\f3af"; }
179
+
180
+ .fa-hacker-news-square:before {
181
+ content: "\f3af"; }
182
+
183
+ .fa-edge:before {
184
+ content: "\f282"; }
185
+
186
+ .fa-threads:before {
187
+ content: "\e618"; }
188
+
189
+ .fa-napster:before {
190
+ content: "\f3d2"; }
191
+
192
+ .fa-square-snapchat:before {
193
+ content: "\f2ad"; }
194
+
195
+ .fa-snapchat-square:before {
196
+ content: "\f2ad"; }
197
+
198
+ .fa-google-plus-g:before {
199
+ content: "\f0d5"; }
200
+
201
+ .fa-artstation:before {
202
+ content: "\f77a"; }
203
+
204
+ .fa-markdown:before {
205
+ content: "\f60f"; }
206
+
207
+ .fa-sourcetree:before {
208
+ content: "\f7d3"; }
209
+
210
+ .fa-google-plus:before {
211
+ content: "\f2b3"; }
212
+
213
+ .fa-diaspora:before {
214
+ content: "\f791"; }
215
+
216
+ .fa-foursquare:before {
217
+ content: "\f180"; }
218
+
219
+ .fa-stack-overflow:before {
220
+ content: "\f16c"; }
221
+
222
+ .fa-github-alt:before {
223
+ content: "\f113"; }
224
+
225
+ .fa-phoenix-squadron:before {
226
+ content: "\f511"; }
227
+
228
+ .fa-pagelines:before {
229
+ content: "\f18c"; }
230
+
231
+ .fa-algolia:before {
232
+ content: "\f36c"; }
233
+
234
+ .fa-red-river:before {
235
+ content: "\f3e3"; }
236
+
237
+ .fa-creative-commons-sa:before {
238
+ content: "\f4ef"; }
239
+
240
+ .fa-safari:before {
241
+ content: "\f267"; }
242
+
243
+ .fa-google:before {
244
+ content: "\f1a0"; }
245
+
246
+ .fa-square-font-awesome-stroke:before {
247
+ content: "\f35c"; }
248
+
249
+ .fa-font-awesome-alt:before {
250
+ content: "\f35c"; }
251
+
252
+ .fa-atlassian:before {
253
+ content: "\f77b"; }
254
+
255
+ .fa-linkedin-in:before {
256
+ content: "\f0e1"; }
257
+
258
+ .fa-digital-ocean:before {
259
+ content: "\f391"; }
260
+
261
+ .fa-nimblr:before {
262
+ content: "\f5a8"; }
263
+
264
+ .fa-chromecast:before {
265
+ content: "\f838"; }
266
+
267
+ .fa-evernote:before {
268
+ content: "\f839"; }
269
+
270
+ .fa-hacker-news:before {
271
+ content: "\f1d4"; }
272
+
273
+ .fa-creative-commons-sampling:before {
274
+ content: "\f4f0"; }
275
+
276
+ .fa-adversal:before {
277
+ content: "\f36a"; }
278
+
279
+ .fa-creative-commons:before {
280
+ content: "\f25e"; }
281
+
282
+ .fa-watchman-monitoring:before {
283
+ content: "\e087"; }
284
+
285
+ .fa-fonticons:before {
286
+ content: "\f280"; }
287
+
288
+ .fa-weixin:before {
289
+ content: "\f1d7"; }
290
+
291
+ .fa-shirtsinbulk:before {
292
+ content: "\f214"; }
293
+
294
+ .fa-codepen:before {
295
+ content: "\f1cb"; }
296
+
297
+ .fa-git-alt:before {
298
+ content: "\f841"; }
299
+
300
+ .fa-lyft:before {
301
+ content: "\f3c3"; }
302
+
303
+ .fa-rev:before {
304
+ content: "\f5b2"; }
305
+
306
+ .fa-windows:before {
307
+ content: "\f17a"; }
308
+
309
+ .fa-wizards-of-the-coast:before {
310
+ content: "\f730"; }
311
+
312
+ .fa-square-viadeo:before {
313
+ content: "\f2aa"; }
314
+
315
+ .fa-viadeo-square:before {
316
+ content: "\f2aa"; }
317
+
318
+ .fa-meetup:before {
319
+ content: "\f2e0"; }
320
+
321
+ .fa-centos:before {
322
+ content: "\f789"; }
323
+
324
+ .fa-adn:before {
325
+ content: "\f170"; }
326
+
327
+ .fa-cloudsmith:before {
328
+ content: "\f384"; }
329
+
330
+ .fa-pied-piper-alt:before {
331
+ content: "\f1a8"; }
332
+
333
+ .fa-square-dribbble:before {
334
+ content: "\f397"; }
335
+
336
+ .fa-dribbble-square:before {
337
+ content: "\f397"; }
338
+
339
+ .fa-codiepie:before {
340
+ content: "\f284"; }
341
+
342
+ .fa-node:before {
343
+ content: "\f419"; }
344
+
345
+ .fa-mix:before {
346
+ content: "\f3cb"; }
347
+
348
+ .fa-steam:before {
349
+ content: "\f1b6"; }
350
+
351
+ .fa-cc-apple-pay:before {
352
+ content: "\f416"; }
353
+
354
+ .fa-scribd:before {
355
+ content: "\f28a"; }
356
+
357
+ .fa-debian:before {
358
+ content: "\e60b"; }
359
+
360
+ .fa-openid:before {
361
+ content: "\f19b"; }
362
+
363
+ .fa-instalod:before {
364
+ content: "\e081"; }
365
+
366
+ .fa-expeditedssl:before {
367
+ content: "\f23e"; }
368
+
369
+ .fa-sellcast:before {
370
+ content: "\f2da"; }
371
+
372
+ .fa-square-twitter:before {
373
+ content: "\f081"; }
374
+
375
+ .fa-twitter-square:before {
376
+ content: "\f081"; }
377
+
378
+ .fa-r-project:before {
379
+ content: "\f4f7"; }
380
+
381
+ .fa-delicious:before {
382
+ content: "\f1a5"; }
383
+
384
+ .fa-freebsd:before {
385
+ content: "\f3a4"; }
386
+
387
+ .fa-vuejs:before {
388
+ content: "\f41f"; }
389
+
390
+ .fa-accusoft:before {
391
+ content: "\f369"; }
392
+
393
+ .fa-ioxhost:before {
394
+ content: "\f208"; }
395
+
396
+ .fa-fonticons-fi:before {
397
+ content: "\f3a2"; }
398
+
399
+ .fa-app-store:before {
400
+ content: "\f36f"; }
401
+
402
+ .fa-cc-mastercard:before {
403
+ content: "\f1f1"; }
404
+
405
+ .fa-itunes-note:before {
406
+ content: "\f3b5"; }
407
+
408
+ .fa-golang:before {
409
+ content: "\e40f"; }
410
+
411
+ .fa-kickstarter:before {
412
+ content: "\f3bb"; }
413
+
414
+ .fa-grav:before {
415
+ content: "\f2d6"; }
416
+
417
+ .fa-weibo:before {
418
+ content: "\f18a"; }
419
+
420
+ .fa-uncharted:before {
421
+ content: "\e084"; }
422
+
423
+ .fa-firstdraft:before {
424
+ content: "\f3a1"; }
425
+
426
+ .fa-square-youtube:before {
427
+ content: "\f431"; }
428
+
429
+ .fa-youtube-square:before {
430
+ content: "\f431"; }
431
+
432
+ .fa-wikipedia-w:before {
433
+ content: "\f266"; }
434
+
435
+ .fa-wpressr:before {
436
+ content: "\f3e4"; }
437
+
438
+ .fa-rendact:before {
439
+ content: "\f3e4"; }
440
+
441
+ .fa-angellist:before {
442
+ content: "\f209"; }
443
+
444
+ .fa-galactic-republic:before {
445
+ content: "\f50c"; }
446
+
447
+ .fa-nfc-directional:before {
448
+ content: "\e530"; }
449
+
450
+ .fa-skype:before {
451
+ content: "\f17e"; }
452
+
453
+ .fa-joget:before {
454
+ content: "\f3b7"; }
455
+
456
+ .fa-fedora:before {
457
+ content: "\f798"; }
458
+
459
+ .fa-stripe-s:before {
460
+ content: "\f42a"; }
461
+
462
+ .fa-meta:before {
463
+ content: "\e49b"; }
464
+
465
+ .fa-laravel:before {
466
+ content: "\f3bd"; }
467
+
468
+ .fa-hotjar:before {
469
+ content: "\f3b1"; }
470
+
471
+ .fa-bluetooth-b:before {
472
+ content: "\f294"; }
473
+
474
+ .fa-sticker-mule:before {
475
+ content: "\f3f7"; }
476
+
477
+ .fa-creative-commons-zero:before {
478
+ content: "\f4f3"; }
479
+
480
+ .fa-hips:before {
481
+ content: "\f452"; }
482
+
483
+ .fa-behance:before {
484
+ content: "\f1b4"; }
485
+
486
+ .fa-reddit:before {
487
+ content: "\f1a1"; }
488
+
489
+ .fa-discord:before {
490
+ content: "\f392"; }
491
+
492
+ .fa-chrome:before {
493
+ content: "\f268"; }
494
+
495
+ .fa-app-store-ios:before {
496
+ content: "\f370"; }
497
+
498
+ .fa-cc-discover:before {
499
+ content: "\f1f2"; }
500
+
501
+ .fa-wpbeginner:before {
502
+ content: "\f297"; }
503
+
504
+ .fa-confluence:before {
505
+ content: "\f78d"; }
506
+
507
+ .fa-mdb:before {
508
+ content: "\f8ca"; }
509
+
510
+ .fa-dochub:before {
511
+ content: "\f394"; }
512
+
513
+ .fa-accessible-icon:before {
514
+ content: "\f368"; }
515
+
516
+ .fa-ebay:before {
517
+ content: "\f4f4"; }
518
+
519
+ .fa-amazon:before {
520
+ content: "\f270"; }
521
+
522
+ .fa-unsplash:before {
523
+ content: "\e07c"; }
524
+
525
+ .fa-yarn:before {
526
+ content: "\f7e3"; }
527
+
528
+ .fa-square-steam:before {
529
+ content: "\f1b7"; }
530
+
531
+ .fa-steam-square:before {
532
+ content: "\f1b7"; }
533
+
534
+ .fa-500px:before {
535
+ content: "\f26e"; }
536
+
537
+ .fa-square-vimeo:before {
538
+ content: "\f194"; }
539
+
540
+ .fa-vimeo-square:before {
541
+ content: "\f194"; }
542
+
543
+ .fa-asymmetrik:before {
544
+ content: "\f372"; }
545
+
546
+ .fa-font-awesome:before {
547
+ content: "\f2b4"; }
548
+
549
+ .fa-font-awesome-flag:before {
550
+ content: "\f2b4"; }
551
+
552
+ .fa-font-awesome-logo-full:before {
553
+ content: "\f2b4"; }
554
+
555
+ .fa-gratipay:before {
556
+ content: "\f184"; }
557
+
558
+ .fa-apple:before {
559
+ content: "\f179"; }
560
+
561
+ .fa-hive:before {
562
+ content: "\e07f"; }
563
+
564
+ .fa-gitkraken:before {
565
+ content: "\f3a6"; }
566
+
567
+ .fa-keybase:before {
568
+ content: "\f4f5"; }
569
+
570
+ .fa-apple-pay:before {
571
+ content: "\f415"; }
572
+
573
+ .fa-padlet:before {
574
+ content: "\e4a0"; }
575
+
576
+ .fa-amazon-pay:before {
577
+ content: "\f42c"; }
578
+
579
+ .fa-square-github:before {
580
+ content: "\f092"; }
581
+
582
+ .fa-github-square:before {
583
+ content: "\f092"; }
584
+
585
+ .fa-stumbleupon:before {
586
+ content: "\f1a4"; }
587
+
588
+ .fa-fedex:before {
589
+ content: "\f797"; }
590
+
591
+ .fa-phoenix-framework:before {
592
+ content: "\f3dc"; }
593
+
594
+ .fa-shopify:before {
595
+ content: "\e057"; }
596
+
597
+ .fa-neos:before {
598
+ content: "\f612"; }
599
+
600
+ .fa-square-threads:before {
601
+ content: "\e619"; }
602
+
603
+ .fa-hackerrank:before {
604
+ content: "\f5f7"; }
605
+
606
+ .fa-researchgate:before {
607
+ content: "\f4f8"; }
608
+
609
+ .fa-swift:before {
610
+ content: "\f8e1"; }
611
+
612
+ .fa-angular:before {
613
+ content: "\f420"; }
614
+
615
+ .fa-speakap:before {
616
+ content: "\f3f3"; }
617
+
618
+ .fa-angrycreative:before {
619
+ content: "\f36e"; }
620
+
621
+ .fa-y-combinator:before {
622
+ content: "\f23b"; }
623
+
624
+ .fa-empire:before {
625
+ content: "\f1d1"; }
626
+
627
+ .fa-envira:before {
628
+ content: "\f299"; }
629
+
630
+ .fa-square-gitlab:before {
631
+ content: "\e5ae"; }
632
+
633
+ .fa-gitlab-square:before {
634
+ content: "\e5ae"; }
635
+
636
+ .fa-studiovinari:before {
637
+ content: "\f3f8"; }
638
+
639
+ .fa-pied-piper:before {
640
+ content: "\f2ae"; }
641
+
642
+ .fa-wordpress:before {
643
+ content: "\f19a"; }
644
+
645
+ .fa-product-hunt:before {
646
+ content: "\f288"; }
647
+
648
+ .fa-firefox:before {
649
+ content: "\f269"; }
650
+
651
+ .fa-linode:before {
652
+ content: "\f2b8"; }
653
+
654
+ .fa-goodreads:before {
655
+ content: "\f3a8"; }
656
+
657
+ .fa-square-odnoklassniki:before {
658
+ content: "\f264"; }
659
+
660
+ .fa-odnoklassniki-square:before {
661
+ content: "\f264"; }
662
+
663
+ .fa-jsfiddle:before {
664
+ content: "\f1cc"; }
665
+
666
+ .fa-sith:before {
667
+ content: "\f512"; }
668
+
669
+ .fa-themeisle:before {
670
+ content: "\f2b2"; }
671
+
672
+ .fa-page4:before {
673
+ content: "\f3d7"; }
674
+
675
+ .fa-hashnode:before {
676
+ content: "\e499"; }
677
+
678
+ .fa-react:before {
679
+ content: "\f41b"; }
680
+
681
+ .fa-cc-paypal:before {
682
+ content: "\f1f4"; }
683
+
684
+ .fa-squarespace:before {
685
+ content: "\f5be"; }
686
+
687
+ .fa-cc-stripe:before {
688
+ content: "\f1f5"; }
689
+
690
+ .fa-creative-commons-share:before {
691
+ content: "\f4f2"; }
692
+
693
+ .fa-bitcoin:before {
694
+ content: "\f379"; }
695
+
696
+ .fa-keycdn:before {
697
+ content: "\f3ba"; }
698
+
699
+ .fa-opera:before {
700
+ content: "\f26a"; }
701
+
702
+ .fa-itch-io:before {
703
+ content: "\f83a"; }
704
+
705
+ .fa-umbraco:before {
706
+ content: "\f8e8"; }
707
+
708
+ .fa-galactic-senate:before {
709
+ content: "\f50d"; }
710
+
711
+ .fa-ubuntu:before {
712
+ content: "\f7df"; }
713
+
714
+ .fa-draft2digital:before {
715
+ content: "\f396"; }
716
+
717
+ .fa-stripe:before {
718
+ content: "\f429"; }
719
+
720
+ .fa-houzz:before {
721
+ content: "\f27c"; }
722
+
723
+ .fa-gg:before {
724
+ content: "\f260"; }
725
+
726
+ .fa-dhl:before {
727
+ content: "\f790"; }
728
+
729
+ .fa-square-pinterest:before {
730
+ content: "\f0d3"; }
731
+
732
+ .fa-pinterest-square:before {
733
+ content: "\f0d3"; }
734
+
735
+ .fa-xing:before {
736
+ content: "\f168"; }
737
+
738
+ .fa-blackberry:before {
739
+ content: "\f37b"; }
740
+
741
+ .fa-creative-commons-pd:before {
742
+ content: "\f4ec"; }
743
+
744
+ .fa-playstation:before {
745
+ content: "\f3df"; }
746
+
747
+ .fa-quinscape:before {
748
+ content: "\f459"; }
749
+
750
+ .fa-less:before {
751
+ content: "\f41d"; }
752
+
753
+ .fa-blogger-b:before {
754
+ content: "\f37d"; }
755
+
756
+ .fa-opencart:before {
757
+ content: "\f23d"; }
758
+
759
+ .fa-vine:before {
760
+ content: "\f1ca"; }
761
+
762
+ .fa-paypal:before {
763
+ content: "\f1ed"; }
764
+
765
+ .fa-gitlab:before {
766
+ content: "\f296"; }
767
+
768
+ .fa-typo3:before {
769
+ content: "\f42b"; }
770
+
771
+ .fa-reddit-alien:before {
772
+ content: "\f281"; }
773
+
774
+ .fa-yahoo:before {
775
+ content: "\f19e"; }
776
+
777
+ .fa-dailymotion:before {
778
+ content: "\e052"; }
779
+
780
+ .fa-affiliatetheme:before {
781
+ content: "\f36b"; }
782
+
783
+ .fa-pied-piper-pp:before {
784
+ content: "\f1a7"; }
785
+
786
+ .fa-bootstrap:before {
787
+ content: "\f836"; }
788
+
789
+ .fa-odnoklassniki:before {
790
+ content: "\f263"; }
791
+
792
+ .fa-nfc-symbol:before {
793
+ content: "\e531"; }
794
+
795
+ .fa-ethereum:before {
796
+ content: "\f42e"; }
797
+
798
+ .fa-speaker-deck:before {
799
+ content: "\f83c"; }
800
+
801
+ .fa-creative-commons-nc-eu:before {
802
+ content: "\f4e9"; }
803
+
804
+ .fa-patreon:before {
805
+ content: "\f3d9"; }
806
+
807
+ .fa-avianex:before {
808
+ content: "\f374"; }
809
+
810
+ .fa-ello:before {
811
+ content: "\f5f1"; }
812
+
813
+ .fa-gofore:before {
814
+ content: "\f3a7"; }
815
+
816
+ .fa-bimobject:before {
817
+ content: "\f378"; }
818
+
819
+ .fa-facebook-f:before {
820
+ content: "\f39e"; }
821
+
822
+ .fa-square-google-plus:before {
823
+ content: "\f0d4"; }
824
+
825
+ .fa-google-plus-square:before {
826
+ content: "\f0d4"; }
827
+
828
+ .fa-mandalorian:before {
829
+ content: "\f50f"; }
830
+
831
+ .fa-first-order-alt:before {
832
+ content: "\f50a"; }
833
+
834
+ .fa-osi:before {
835
+ content: "\f41a"; }
836
+
837
+ .fa-google-wallet:before {
838
+ content: "\f1ee"; }
839
+
840
+ .fa-d-and-d-beyond:before {
841
+ content: "\f6ca"; }
842
+
843
+ .fa-periscope:before {
844
+ content: "\f3da"; }
845
+
846
+ .fa-fulcrum:before {
847
+ content: "\f50b"; }
848
+
849
+ .fa-cloudscale:before {
850
+ content: "\f383"; }
851
+
852
+ .fa-forumbee:before {
853
+ content: "\f211"; }
854
+
855
+ .fa-mizuni:before {
856
+ content: "\f3cc"; }
857
+
858
+ .fa-schlix:before {
859
+ content: "\f3ea"; }
860
+
861
+ .fa-square-xing:before {
862
+ content: "\f169"; }
863
+
864
+ .fa-xing-square:before {
865
+ content: "\f169"; }
866
+
867
+ .fa-bandcamp:before {
868
+ content: "\f2d5"; }
869
+
870
+ .fa-wpforms:before {
871
+ content: "\f298"; }
872
+
873
+ .fa-cloudversify:before {
874
+ content: "\f385"; }
875
+
876
+ .fa-usps:before {
877
+ content: "\f7e1"; }
878
+
879
+ .fa-megaport:before {
880
+ content: "\f5a3"; }
881
+
882
+ .fa-magento:before {
883
+ content: "\f3c4"; }
884
+
885
+ .fa-spotify:before {
886
+ content: "\f1bc"; }
887
+
888
+ .fa-optin-monster:before {
889
+ content: "\f23c"; }
890
+
891
+ .fa-fly:before {
892
+ content: "\f417"; }
893
+
894
+ .fa-aviato:before {
895
+ content: "\f421"; }
896
+
897
+ .fa-itunes:before {
898
+ content: "\f3b4"; }
899
+
900
+ .fa-cuttlefish:before {
901
+ content: "\f38c"; }
902
+
903
+ .fa-blogger:before {
904
+ content: "\f37c"; }
905
+
906
+ .fa-flickr:before {
907
+ content: "\f16e"; }
908
+
909
+ .fa-viber:before {
910
+ content: "\f409"; }
911
+
912
+ .fa-soundcloud:before {
913
+ content: "\f1be"; }
914
+
915
+ .fa-digg:before {
916
+ content: "\f1a6"; }
917
+
918
+ .fa-tencent-weibo:before {
919
+ content: "\f1d5"; }
920
+
921
+ .fa-symfony:before {
922
+ content: "\f83d"; }
923
+
924
+ .fa-maxcdn:before {
925
+ content: "\f136"; }
926
+
927
+ .fa-etsy:before {
928
+ content: "\f2d7"; }
929
+
930
+ .fa-facebook-messenger:before {
931
+ content: "\f39f"; }
932
+
933
+ .fa-audible:before {
934
+ content: "\f373"; }
935
+
936
+ .fa-think-peaks:before {
937
+ content: "\f731"; }
938
+
939
+ .fa-bilibili:before {
940
+ content: "\e3d9"; }
941
+
942
+ .fa-erlang:before {
943
+ content: "\f39d"; }
944
+
945
+ .fa-x-twitter:before {
946
+ content: "\e61b"; }
947
+
948
+ .fa-cotton-bureau:before {
949
+ content: "\f89e"; }
950
+
951
+ .fa-dashcube:before {
952
+ content: "\f210"; }
953
+
954
+ .fa-42-group:before {
955
+ content: "\e080"; }
956
+
957
+ .fa-innosoft:before {
958
+ content: "\e080"; }
959
+
960
+ .fa-stack-exchange:before {
961
+ content: "\f18d"; }
962
+
963
+ .fa-elementor:before {
964
+ content: "\f430"; }
965
+
966
+ .fa-square-pied-piper:before {
967
+ content: "\e01e"; }
968
+
969
+ .fa-pied-piper-square:before {
970
+ content: "\e01e"; }
971
+
972
+ .fa-creative-commons-nd:before {
973
+ content: "\f4eb"; }
974
+
975
+ .fa-palfed:before {
976
+ content: "\f3d8"; }
977
+
978
+ .fa-superpowers:before {
979
+ content: "\f2dd"; }
980
+
981
+ .fa-resolving:before {
982
+ content: "\f3e7"; }
983
+
984
+ .fa-xbox:before {
985
+ content: "\f412"; }
986
+
987
+ .fa-searchengin:before {
988
+ content: "\f3eb"; }
989
+
990
+ .fa-tiktok:before {
991
+ content: "\e07b"; }
992
+
993
+ .fa-square-facebook:before {
994
+ content: "\f082"; }
995
+
996
+ .fa-facebook-square:before {
997
+ content: "\f082"; }
998
+
999
+ .fa-renren:before {
1000
+ content: "\f18b"; }
1001
+
1002
+ .fa-linux:before {
1003
+ content: "\f17c"; }
1004
+
1005
+ .fa-glide:before {
1006
+ content: "\f2a5"; }
1007
+
1008
+ .fa-linkedin:before {
1009
+ content: "\f08c"; }
1010
+
1011
+ .fa-hubspot:before {
1012
+ content: "\f3b2"; }
1013
+
1014
+ .fa-deploydog:before {
1015
+ content: "\f38e"; }
1016
+
1017
+ .fa-twitch:before {
1018
+ content: "\f1e8"; }
1019
+
1020
+ .fa-ravelry:before {
1021
+ content: "\f2d9"; }
1022
+
1023
+ .fa-mixer:before {
1024
+ content: "\e056"; }
1025
+
1026
+ .fa-square-lastfm:before {
1027
+ content: "\f203"; }
1028
+
1029
+ .fa-lastfm-square:before {
1030
+ content: "\f203"; }
1031
+
1032
+ .fa-vimeo:before {
1033
+ content: "\f40a"; }
1034
+
1035
+ .fa-mendeley:before {
1036
+ content: "\f7b3"; }
1037
+
1038
+ .fa-uniregistry:before {
1039
+ content: "\f404"; }
1040
+
1041
+ .fa-figma:before {
1042
+ content: "\f799"; }
1043
+
1044
+ .fa-creative-commons-remix:before {
1045
+ content: "\f4ee"; }
1046
+
1047
+ .fa-cc-amazon-pay:before {
1048
+ content: "\f42d"; }
1049
+
1050
+ .fa-dropbox:before {
1051
+ content: "\f16b"; }
1052
+
1053
+ .fa-instagram:before {
1054
+ content: "\f16d"; }
1055
+
1056
+ .fa-cmplid:before {
1057
+ content: "\e360"; }
1058
+
1059
+ .fa-facebook:before {
1060
+ content: "\f09a"; }
1061
+
1062
+ .fa-gripfire:before {
1063
+ content: "\f3ac"; }
1064
+
1065
+ .fa-jedi-order:before {
1066
+ content: "\f50e"; }
1067
+
1068
+ .fa-uikit:before {
1069
+ content: "\f403"; }
1070
+
1071
+ .fa-fort-awesome-alt:before {
1072
+ content: "\f3a3"; }
1073
+
1074
+ .fa-phabricator:before {
1075
+ content: "\f3db"; }
1076
+
1077
+ .fa-ussunnah:before {
1078
+ content: "\f407"; }
1079
+
1080
+ .fa-earlybirds:before {
1081
+ content: "\f39a"; }
1082
+
1083
+ .fa-trade-federation:before {
1084
+ content: "\f513"; }
1085
+
1086
+ .fa-autoprefixer:before {
1087
+ content: "\f41c"; }
1088
+
1089
+ .fa-whatsapp:before {
1090
+ content: "\f232"; }
1091
+
1092
+ .fa-slideshare:before {
1093
+ content: "\f1e7"; }
1094
+
1095
+ .fa-google-play:before {
1096
+ content: "\f3ab"; }
1097
+
1098
+ .fa-viadeo:before {
1099
+ content: "\f2a9"; }
1100
+
1101
+ .fa-line:before {
1102
+ content: "\f3c0"; }
1103
+
1104
+ .fa-google-drive:before {
1105
+ content: "\f3aa"; }
1106
+
1107
+ .fa-servicestack:before {
1108
+ content: "\f3ec"; }
1109
+
1110
+ .fa-simplybuilt:before {
1111
+ content: "\f215"; }
1112
+
1113
+ .fa-bitbucket:before {
1114
+ content: "\f171"; }
1115
+
1116
+ .fa-imdb:before {
1117
+ content: "\f2d8"; }
1118
+
1119
+ .fa-deezer:before {
1120
+ content: "\e077"; }
1121
+
1122
+ .fa-raspberry-pi:before {
1123
+ content: "\f7bb"; }
1124
+
1125
+ .fa-jira:before {
1126
+ content: "\f7b1"; }
1127
+
1128
+ .fa-docker:before {
1129
+ content: "\f395"; }
1130
+
1131
+ .fa-screenpal:before {
1132
+ content: "\e570"; }
1133
+
1134
+ .fa-bluetooth:before {
1135
+ content: "\f293"; }
1136
+
1137
+ .fa-gitter:before {
1138
+ content: "\f426"; }
1139
+
1140
+ .fa-d-and-d:before {
1141
+ content: "\f38d"; }
1142
+
1143
+ .fa-microblog:before {
1144
+ content: "\e01a"; }
1145
+
1146
+ .fa-cc-diners-club:before {
1147
+ content: "\f24c"; }
1148
+
1149
+ .fa-gg-circle:before {
1150
+ content: "\f261"; }
1151
+
1152
+ .fa-pied-piper-hat:before {
1153
+ content: "\f4e5"; }
1154
+
1155
+ .fa-kickstarter-k:before {
1156
+ content: "\f3bc"; }
1157
+
1158
+ .fa-yandex:before {
1159
+ content: "\f413"; }
1160
+
1161
+ .fa-readme:before {
1162
+ content: "\f4d5"; }
1163
+
1164
+ .fa-html5:before {
1165
+ content: "\f13b"; }
1166
+
1167
+ .fa-sellsy:before {
1168
+ content: "\f213"; }
1169
+
1170
+ .fa-sass:before {
1171
+ content: "\f41e"; }
1172
+
1173
+ .fa-wirsindhandwerk:before {
1174
+ content: "\e2d0"; }
1175
+
1176
+ .fa-wsh:before {
1177
+ content: "\e2d0"; }
1178
+
1179
+ .fa-buromobelexperte:before {
1180
+ content: "\f37f"; }
1181
+
1182
+ .fa-salesforce:before {
1183
+ content: "\f83b"; }
1184
+
1185
+ .fa-octopus-deploy:before {
1186
+ content: "\e082"; }
1187
+
1188
+ .fa-medapps:before {
1189
+ content: "\f3c6"; }
1190
+
1191
+ .fa-ns8:before {
1192
+ content: "\f3d5"; }
1193
+
1194
+ .fa-pinterest-p:before {
1195
+ content: "\f231"; }
1196
+
1197
+ .fa-apper:before {
1198
+ content: "\f371"; }
1199
+
1200
+ .fa-fort-awesome:before {
1201
+ content: "\f286"; }
1202
+
1203
+ .fa-waze:before {
1204
+ content: "\f83f"; }
1205
+
1206
+ .fa-cc-jcb:before {
1207
+ content: "\f24b"; }
1208
+
1209
+ .fa-snapchat:before {
1210
+ content: "\f2ab"; }
1211
+
1212
+ .fa-snapchat-ghost:before {
1213
+ content: "\f2ab"; }
1214
+
1215
+ .fa-fantasy-flight-games:before {
1216
+ content: "\f6dc"; }
1217
+
1218
+ .fa-rust:before {
1219
+ content: "\e07a"; }
1220
+
1221
+ .fa-wix:before {
1222
+ content: "\f5cf"; }
1223
+
1224
+ .fa-square-behance:before {
1225
+ content: "\f1b5"; }
1226
+
1227
+ .fa-behance-square:before {
1228
+ content: "\f1b5"; }
1229
+
1230
+ .fa-supple:before {
1231
+ content: "\f3f9"; }
1232
+
1233
+ .fa-rebel:before {
1234
+ content: "\f1d0"; }
1235
+
1236
+ .fa-css3:before {
1237
+ content: "\f13c"; }
1238
+
1239
+ .fa-staylinked:before {
1240
+ content: "\f3f5"; }
1241
+
1242
+ .fa-kaggle:before {
1243
+ content: "\f5fa"; }
1244
+
1245
+ .fa-space-awesome:before {
1246
+ content: "\e5ac"; }
1247
+
1248
+ .fa-deviantart:before {
1249
+ content: "\f1bd"; }
1250
+
1251
+ .fa-cpanel:before {
1252
+ content: "\f388"; }
1253
+
1254
+ .fa-goodreads-g:before {
1255
+ content: "\f3a9"; }
1256
+
1257
+ .fa-square-git:before {
1258
+ content: "\f1d2"; }
1259
+
1260
+ .fa-git-square:before {
1261
+ content: "\f1d2"; }
1262
+
1263
+ .fa-square-tumblr:before {
1264
+ content: "\f174"; }
1265
+
1266
+ .fa-tumblr-square:before {
1267
+ content: "\f174"; }
1268
+
1269
+ .fa-trello:before {
1270
+ content: "\f181"; }
1271
+
1272
+ .fa-creative-commons-nc-jp:before {
1273
+ content: "\f4ea"; }
1274
+
1275
+ .fa-get-pocket:before {
1276
+ content: "\f265"; }
1277
+
1278
+ .fa-perbyte:before {
1279
+ content: "\e083"; }
1280
+
1281
+ .fa-grunt:before {
1282
+ content: "\f3ad"; }
1283
+
1284
+ .fa-weebly:before {
1285
+ content: "\f5cc"; }
1286
+
1287
+ .fa-connectdevelop:before {
1288
+ content: "\f20e"; }
1289
+
1290
+ .fa-leanpub:before {
1291
+ content: "\f212"; }
1292
+
1293
+ .fa-black-tie:before {
1294
+ content: "\f27e"; }
1295
+
1296
+ .fa-themeco:before {
1297
+ content: "\f5c6"; }
1298
+
1299
+ .fa-python:before {
1300
+ content: "\f3e2"; }
1301
+
1302
+ .fa-android:before {
1303
+ content: "\f17b"; }
1304
+
1305
+ .fa-bots:before {
1306
+ content: "\e340"; }
1307
+
1308
+ .fa-free-code-camp:before {
1309
+ content: "\f2c5"; }
1310
+
1311
+ .fa-hornbill:before {
1312
+ content: "\f592"; }
1313
+
1314
+ .fa-js:before {
1315
+ content: "\f3b8"; }
1316
+
1317
+ .fa-ideal:before {
1318
+ content: "\e013"; }
1319
+
1320
+ .fa-git:before {
1321
+ content: "\f1d3"; }
1322
+
1323
+ .fa-dev:before {
1324
+ content: "\f6cc"; }
1325
+
1326
+ .fa-sketch:before {
1327
+ content: "\f7c6"; }
1328
+
1329
+ .fa-yandex-international:before {
1330
+ content: "\f414"; }
1331
+
1332
+ .fa-cc-amex:before {
1333
+ content: "\f1f3"; }
1334
+
1335
+ .fa-uber:before {
1336
+ content: "\f402"; }
1337
+
1338
+ .fa-github:before {
1339
+ content: "\f09b"; }
1340
+
1341
+ .fa-php:before {
1342
+ content: "\f457"; }
1343
+
1344
+ .fa-alipay:before {
1345
+ content: "\f642"; }
1346
+
1347
+ .fa-youtube:before {
1348
+ content: "\f167"; }
1349
+
1350
+ .fa-skyatlas:before {
1351
+ content: "\f216"; }
1352
+
1353
+ .fa-firefox-browser:before {
1354
+ content: "\e007"; }
1355
+
1356
+ .fa-replyd:before {
1357
+ content: "\f3e6"; }
1358
+
1359
+ .fa-suse:before {
1360
+ content: "\f7d6"; }
1361
+
1362
+ .fa-jenkins:before {
1363
+ content: "\f3b6"; }
1364
+
1365
+ .fa-twitter:before {
1366
+ content: "\f099"; }
1367
+
1368
+ .fa-rockrms:before {
1369
+ content: "\f3e9"; }
1370
+
1371
+ .fa-pinterest:before {
1372
+ content: "\f0d2"; }
1373
+
1374
+ .fa-buffer:before {
1375
+ content: "\f837"; }
1376
+
1377
+ .fa-npm:before {
1378
+ content: "\f3d4"; }
1379
+
1380
+ .fa-yammer:before {
1381
+ content: "\f840"; }
1382
+
1383
+ .fa-btc:before {
1384
+ content: "\f15a"; }
1385
+
1386
+ .fa-dribbble:before {
1387
+ content: "\f17d"; }
1388
+
1389
+ .fa-stumbleupon-circle:before {
1390
+ content: "\f1a3"; }
1391
+
1392
+ .fa-internet-explorer:before {
1393
+ content: "\f26b"; }
1394
+
1395
+ .fa-stubber:before {
1396
+ content: "\e5c7"; }
1397
+
1398
+ .fa-telegram:before {
1399
+ content: "\f2c6"; }
1400
+
1401
+ .fa-telegram-plane:before {
1402
+ content: "\f2c6"; }
1403
+
1404
+ .fa-old-republic:before {
1405
+ content: "\f510"; }
1406
+
1407
+ .fa-odysee:before {
1408
+ content: "\e5c6"; }
1409
+
1410
+ .fa-square-whatsapp:before {
1411
+ content: "\f40c"; }
1412
+
1413
+ .fa-whatsapp-square:before {
1414
+ content: "\f40c"; }
1415
+
1416
+ .fa-node-js:before {
1417
+ content: "\f3d3"; }
1418
+
1419
+ .fa-edge-legacy:before {
1420
+ content: "\e078"; }
1421
+
1422
+ .fa-slack:before {
1423
+ content: "\f198"; }
1424
+
1425
+ .fa-slack-hash:before {
1426
+ content: "\f198"; }
1427
+
1428
+ .fa-medrt:before {
1429
+ content: "\f3c8"; }
1430
+
1431
+ .fa-usb:before {
1432
+ content: "\f287"; }
1433
+
1434
+ .fa-tumblr:before {
1435
+ content: "\f173"; }
1436
+
1437
+ .fa-vaadin:before {
1438
+ content: "\f408"; }
1439
+
1440
+ .fa-quora:before {
1441
+ content: "\f2c4"; }
1442
+
1443
+ .fa-square-x-twitter:before {
1444
+ content: "\e61a"; }
1445
+
1446
+ .fa-reacteurope:before {
1447
+ content: "\f75d"; }
1448
+
1449
+ .fa-medium:before {
1450
+ content: "\f23a"; }
1451
+
1452
+ .fa-medium-m:before {
1453
+ content: "\f23a"; }
1454
+
1455
+ .fa-amilia:before {
1456
+ content: "\f36d"; }
1457
+
1458
+ .fa-mixcloud:before {
1459
+ content: "\f289"; }
1460
+
1461
+ .fa-flipboard:before {
1462
+ content: "\f44d"; }
1463
+
1464
+ .fa-viacoin:before {
1465
+ content: "\f237"; }
1466
+
1467
+ .fa-critical-role:before {
1468
+ content: "\f6c9"; }
1469
+
1470
+ .fa-sitrox:before {
1471
+ content: "\e44a"; }
1472
+
1473
+ .fa-discourse:before {
1474
+ content: "\f393"; }
1475
+
1476
+ .fa-joomla:before {
1477
+ content: "\f1aa"; }
1478
+
1479
+ .fa-mastodon:before {
1480
+ content: "\f4f6"; }
1481
+
1482
+ .fa-airbnb:before {
1483
+ content: "\f834"; }
1484
+
1485
+ .fa-wolf-pack-battalion:before {
1486
+ content: "\f514"; }
1487
+
1488
+ .fa-buy-n-large:before {
1489
+ content: "\f8a6"; }
1490
+
1491
+ .fa-gulp:before {
1492
+ content: "\f3ae"; }
1493
+
1494
+ .fa-creative-commons-sampling-plus:before {
1495
+ content: "\f4f1"; }
1496
+
1497
+ .fa-strava:before {
1498
+ content: "\f428"; }
1499
+
1500
+ .fa-ember:before {
1501
+ content: "\f423"; }
1502
+
1503
+ .fa-canadian-maple-leaf:before {
1504
+ content: "\f785"; }
1505
+
1506
+ .fa-teamspeak:before {
1507
+ content: "\f4f9"; }
1508
+
1509
+ .fa-pushed:before {
1510
+ content: "\f3e1"; }
1511
+
1512
+ .fa-wordpress-simple:before {
1513
+ content: "\f411"; }
1514
+
1515
+ .fa-nutritionix:before {
1516
+ content: "\f3d6"; }
1517
+
1518
+ .fa-wodu:before {
1519
+ content: "\e088"; }
1520
+
1521
+ .fa-google-pay:before {
1522
+ content: "\e079"; }
1523
+
1524
+ .fa-intercom:before {
1525
+ content: "\f7af"; }
1526
+
1527
+ .fa-zhihu:before {
1528
+ content: "\f63f"; }
1529
+
1530
+ .fa-korvue:before {
1531
+ content: "\f42f"; }
1532
+
1533
+ .fa-pix:before {
1534
+ content: "\e43a"; }
1535
+
1536
+ .fa-steam-symbol:before {
1537
+ content: "\f3f6"; }
static/assets/FontAwesome/css/brands.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ :host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}
static/assets/FontAwesome/css/fontawesome.css ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/css/fontawesome.min.css ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ .fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}
7
+
8
+ .fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}
9
+ .fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}
static/assets/FontAwesome/css/solid.css ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ :root, :host {
7
+ --fa-style-family-classic: 'Font Awesome 6 Free';
8
+ --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
9
+
10
+ @font-face {
11
+ font-family: 'Font Awesome 6 Free';
12
+ font-style: normal;
13
+ font-weight: 900;
14
+ font-display: block;
15
+ src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
16
+
17
+ .fas,
18
+ .fa-solid {
19
+ font-weight: 900; }
static/assets/FontAwesome/css/solid.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
static/assets/FontAwesome/css/svg-with-js.css ADDED
@@ -0,0 +1,639 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ :root, :host {
7
+ --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid';
8
+ --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular';
9
+ --fa-font-light: normal 300 1em/1 'Font Awesome 6 Light';
10
+ --fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin';
11
+ --fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
12
+ --fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
13
+ --fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp';
14
+ --fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp';
15
+ --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
16
+
17
+ svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
18
+ overflow: visible;
19
+ box-sizing: content-box; }
20
+
21
+ .svg-inline--fa {
22
+ display: var(--fa-display, inline-block);
23
+ height: 1em;
24
+ overflow: visible;
25
+ vertical-align: -.125em; }
26
+ .svg-inline--fa.fa-2xs {
27
+ vertical-align: 0.1em; }
28
+ .svg-inline--fa.fa-xs {
29
+ vertical-align: 0em; }
30
+ .svg-inline--fa.fa-sm {
31
+ vertical-align: -0.07143em; }
32
+ .svg-inline--fa.fa-lg {
33
+ vertical-align: -0.2em; }
34
+ .svg-inline--fa.fa-xl {
35
+ vertical-align: -0.25em; }
36
+ .svg-inline--fa.fa-2xl {
37
+ vertical-align: -0.3125em; }
38
+ .svg-inline--fa.fa-pull-left {
39
+ margin-right: var(--fa-pull-margin, 0.3em);
40
+ width: auto; }
41
+ .svg-inline--fa.fa-pull-right {
42
+ margin-left: var(--fa-pull-margin, 0.3em);
43
+ width: auto; }
44
+ .svg-inline--fa.fa-li {
45
+ width: var(--fa-li-width, 2em);
46
+ top: 0.25em; }
47
+ .svg-inline--fa.fa-fw {
48
+ width: var(--fa-fw-width, 1.25em); }
49
+
50
+ .fa-layers svg.svg-inline--fa {
51
+ bottom: 0;
52
+ left: 0;
53
+ margin: auto;
54
+ position: absolute;
55
+ right: 0;
56
+ top: 0; }
57
+
58
+ .fa-layers-text, .fa-layers-counter {
59
+ display: inline-block;
60
+ position: absolute;
61
+ text-align: center; }
62
+
63
+ .fa-layers {
64
+ display: inline-block;
65
+ height: 1em;
66
+ position: relative;
67
+ text-align: center;
68
+ vertical-align: -.125em;
69
+ width: 1em; }
70
+ .fa-layers svg.svg-inline--fa {
71
+ -webkit-transform-origin: center center;
72
+ transform-origin: center center; }
73
+
74
+ .fa-layers-text {
75
+ left: 50%;
76
+ top: 50%;
77
+ -webkit-transform: translate(-50%, -50%);
78
+ transform: translate(-50%, -50%);
79
+ -webkit-transform-origin: center center;
80
+ transform-origin: center center; }
81
+
82
+ .fa-layers-counter {
83
+ background-color: var(--fa-counter-background-color, #ff253a);
84
+ border-radius: var(--fa-counter-border-radius, 1em);
85
+ box-sizing: border-box;
86
+ color: var(--fa-inverse, #fff);
87
+ line-height: var(--fa-counter-line-height, 1);
88
+ max-width: var(--fa-counter-max-width, 5em);
89
+ min-width: var(--fa-counter-min-width, 1.5em);
90
+ overflow: hidden;
91
+ padding: var(--fa-counter-padding, 0.25em 0.5em);
92
+ right: var(--fa-right, 0);
93
+ text-overflow: ellipsis;
94
+ top: var(--fa-top, 0);
95
+ -webkit-transform: scale(var(--fa-counter-scale, 0.25));
96
+ transform: scale(var(--fa-counter-scale, 0.25));
97
+ -webkit-transform-origin: top right;
98
+ transform-origin: top right; }
99
+
100
+ .fa-layers-bottom-right {
101
+ bottom: var(--fa-bottom, 0);
102
+ right: var(--fa-right, 0);
103
+ top: auto;
104
+ -webkit-transform: scale(var(--fa-layers-scale, 0.25));
105
+ transform: scale(var(--fa-layers-scale, 0.25));
106
+ -webkit-transform-origin: bottom right;
107
+ transform-origin: bottom right; }
108
+
109
+ .fa-layers-bottom-left {
110
+ bottom: var(--fa-bottom, 0);
111
+ left: var(--fa-left, 0);
112
+ right: auto;
113
+ top: auto;
114
+ -webkit-transform: scale(var(--fa-layers-scale, 0.25));
115
+ transform: scale(var(--fa-layers-scale, 0.25));
116
+ -webkit-transform-origin: bottom left;
117
+ transform-origin: bottom left; }
118
+
119
+ .fa-layers-top-right {
120
+ top: var(--fa-top, 0);
121
+ right: var(--fa-right, 0);
122
+ -webkit-transform: scale(var(--fa-layers-scale, 0.25));
123
+ transform: scale(var(--fa-layers-scale, 0.25));
124
+ -webkit-transform-origin: top right;
125
+ transform-origin: top right; }
126
+
127
+ .fa-layers-top-left {
128
+ left: var(--fa-left, 0);
129
+ right: auto;
130
+ top: var(--fa-top, 0);
131
+ -webkit-transform: scale(var(--fa-layers-scale, 0.25));
132
+ transform: scale(var(--fa-layers-scale, 0.25));
133
+ -webkit-transform-origin: top left;
134
+ transform-origin: top left; }
135
+
136
+ .fa-1x {
137
+ font-size: 1em; }
138
+
139
+ .fa-2x {
140
+ font-size: 2em; }
141
+
142
+ .fa-3x {
143
+ font-size: 3em; }
144
+
145
+ .fa-4x {
146
+ font-size: 4em; }
147
+
148
+ .fa-5x {
149
+ font-size: 5em; }
150
+
151
+ .fa-6x {
152
+ font-size: 6em; }
153
+
154
+ .fa-7x {
155
+ font-size: 7em; }
156
+
157
+ .fa-8x {
158
+ font-size: 8em; }
159
+
160
+ .fa-9x {
161
+ font-size: 9em; }
162
+
163
+ .fa-10x {
164
+ font-size: 10em; }
165
+
166
+ .fa-2xs {
167
+ font-size: 0.625em;
168
+ line-height: 0.1em;
169
+ vertical-align: 0.225em; }
170
+
171
+ .fa-xs {
172
+ font-size: 0.75em;
173
+ line-height: 0.08333em;
174
+ vertical-align: 0.125em; }
175
+
176
+ .fa-sm {
177
+ font-size: 0.875em;
178
+ line-height: 0.07143em;
179
+ vertical-align: 0.05357em; }
180
+
181
+ .fa-lg {
182
+ font-size: 1.25em;
183
+ line-height: 0.05em;
184
+ vertical-align: -0.075em; }
185
+
186
+ .fa-xl {
187
+ font-size: 1.5em;
188
+ line-height: 0.04167em;
189
+ vertical-align: -0.125em; }
190
+
191
+ .fa-2xl {
192
+ font-size: 2em;
193
+ line-height: 0.03125em;
194
+ vertical-align: -0.1875em; }
195
+
196
+ .fa-fw {
197
+ text-align: center;
198
+ width: 1.25em; }
199
+
200
+ .fa-ul {
201
+ list-style-type: none;
202
+ margin-left: var(--fa-li-margin, 2.5em);
203
+ padding-left: 0; }
204
+ .fa-ul > li {
205
+ position: relative; }
206
+
207
+ .fa-li {
208
+ left: calc(var(--fa-li-width, 2em) * -1);
209
+ position: absolute;
210
+ text-align: center;
211
+ width: var(--fa-li-width, 2em);
212
+ line-height: inherit; }
213
+
214
+ .fa-border {
215
+ border-color: var(--fa-border-color, #eee);
216
+ border-radius: var(--fa-border-radius, 0.1em);
217
+ border-style: var(--fa-border-style, solid);
218
+ border-width: var(--fa-border-width, 0.08em);
219
+ padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
220
+
221
+ .fa-pull-left {
222
+ float: left;
223
+ margin-right: var(--fa-pull-margin, 0.3em); }
224
+
225
+ .fa-pull-right {
226
+ float: right;
227
+ margin-left: var(--fa-pull-margin, 0.3em); }
228
+
229
+ .fa-beat {
230
+ -webkit-animation-name: fa-beat;
231
+ animation-name: fa-beat;
232
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
233
+ animation-delay: var(--fa-animation-delay, 0s);
234
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
235
+ animation-direction: var(--fa-animation-direction, normal);
236
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
237
+ animation-duration: var(--fa-animation-duration, 1s);
238
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
239
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
240
+ -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
241
+ animation-timing-function: var(--fa-animation-timing, ease-in-out); }
242
+
243
+ .fa-bounce {
244
+ -webkit-animation-name: fa-bounce;
245
+ animation-name: fa-bounce;
246
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
247
+ animation-delay: var(--fa-animation-delay, 0s);
248
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
249
+ animation-direction: var(--fa-animation-direction, normal);
250
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
251
+ animation-duration: var(--fa-animation-duration, 1s);
252
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
253
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
254
+ -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
255
+ animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
256
+
257
+ .fa-fade {
258
+ -webkit-animation-name: fa-fade;
259
+ animation-name: fa-fade;
260
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
261
+ animation-delay: var(--fa-animation-delay, 0s);
262
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
263
+ animation-direction: var(--fa-animation-direction, normal);
264
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
265
+ animation-duration: var(--fa-animation-duration, 1s);
266
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
267
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
268
+ -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
269
+ animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
270
+
271
+ .fa-beat-fade {
272
+ -webkit-animation-name: fa-beat-fade;
273
+ animation-name: fa-beat-fade;
274
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
275
+ animation-delay: var(--fa-animation-delay, 0s);
276
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
277
+ animation-direction: var(--fa-animation-direction, normal);
278
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
279
+ animation-duration: var(--fa-animation-duration, 1s);
280
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
281
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
282
+ -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
283
+ animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
284
+
285
+ .fa-flip {
286
+ -webkit-animation-name: fa-flip;
287
+ animation-name: fa-flip;
288
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
289
+ animation-delay: var(--fa-animation-delay, 0s);
290
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
291
+ animation-direction: var(--fa-animation-direction, normal);
292
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
293
+ animation-duration: var(--fa-animation-duration, 1s);
294
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
295
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
296
+ -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
297
+ animation-timing-function: var(--fa-animation-timing, ease-in-out); }
298
+
299
+ .fa-shake {
300
+ -webkit-animation-name: fa-shake;
301
+ animation-name: fa-shake;
302
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
303
+ animation-delay: var(--fa-animation-delay, 0s);
304
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
305
+ animation-direction: var(--fa-animation-direction, normal);
306
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
307
+ animation-duration: var(--fa-animation-duration, 1s);
308
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
309
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
310
+ -webkit-animation-timing-function: var(--fa-animation-timing, linear);
311
+ animation-timing-function: var(--fa-animation-timing, linear); }
312
+
313
+ .fa-spin {
314
+ -webkit-animation-name: fa-spin;
315
+ animation-name: fa-spin;
316
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
317
+ animation-delay: var(--fa-animation-delay, 0s);
318
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
319
+ animation-direction: var(--fa-animation-direction, normal);
320
+ -webkit-animation-duration: var(--fa-animation-duration, 2s);
321
+ animation-duration: var(--fa-animation-duration, 2s);
322
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
323
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
324
+ -webkit-animation-timing-function: var(--fa-animation-timing, linear);
325
+ animation-timing-function: var(--fa-animation-timing, linear); }
326
+
327
+ .fa-spin-reverse {
328
+ --fa-animation-direction: reverse; }
329
+
330
+ .fa-pulse,
331
+ .fa-spin-pulse {
332
+ -webkit-animation-name: fa-spin;
333
+ animation-name: fa-spin;
334
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
335
+ animation-direction: var(--fa-animation-direction, normal);
336
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
337
+ animation-duration: var(--fa-animation-duration, 1s);
338
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
339
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
340
+ -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
341
+ animation-timing-function: var(--fa-animation-timing, steps(8)); }
342
+
343
+ @media (prefers-reduced-motion: reduce) {
344
+ .fa-beat,
345
+ .fa-bounce,
346
+ .fa-fade,
347
+ .fa-beat-fade,
348
+ .fa-flip,
349
+ .fa-pulse,
350
+ .fa-shake,
351
+ .fa-spin,
352
+ .fa-spin-pulse {
353
+ -webkit-animation-delay: -1ms;
354
+ animation-delay: -1ms;
355
+ -webkit-animation-duration: 1ms;
356
+ animation-duration: 1ms;
357
+ -webkit-animation-iteration-count: 1;
358
+ animation-iteration-count: 1;
359
+ -webkit-transition-delay: 0s;
360
+ transition-delay: 0s;
361
+ -webkit-transition-duration: 0s;
362
+ transition-duration: 0s; } }
363
+
364
+ @-webkit-keyframes fa-beat {
365
+ 0%, 90% {
366
+ -webkit-transform: scale(1);
367
+ transform: scale(1); }
368
+ 45% {
369
+ -webkit-transform: scale(var(--fa-beat-scale, 1.25));
370
+ transform: scale(var(--fa-beat-scale, 1.25)); } }
371
+
372
+ @keyframes fa-beat {
373
+ 0%, 90% {
374
+ -webkit-transform: scale(1);
375
+ transform: scale(1); }
376
+ 45% {
377
+ -webkit-transform: scale(var(--fa-beat-scale, 1.25));
378
+ transform: scale(var(--fa-beat-scale, 1.25)); } }
379
+
380
+ @-webkit-keyframes fa-bounce {
381
+ 0% {
382
+ -webkit-transform: scale(1, 1) translateY(0);
383
+ transform: scale(1, 1) translateY(0); }
384
+ 10% {
385
+ -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
386
+ transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
387
+ 30% {
388
+ -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
389
+ transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
390
+ 50% {
391
+ -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
392
+ transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
393
+ 57% {
394
+ -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
395
+ transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
396
+ 64% {
397
+ -webkit-transform: scale(1, 1) translateY(0);
398
+ transform: scale(1, 1) translateY(0); }
399
+ 100% {
400
+ -webkit-transform: scale(1, 1) translateY(0);
401
+ transform: scale(1, 1) translateY(0); } }
402
+
403
+ @keyframes fa-bounce {
404
+ 0% {
405
+ -webkit-transform: scale(1, 1) translateY(0);
406
+ transform: scale(1, 1) translateY(0); }
407
+ 10% {
408
+ -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
409
+ transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
410
+ 30% {
411
+ -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
412
+ transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
413
+ 50% {
414
+ -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
415
+ transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
416
+ 57% {
417
+ -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
418
+ transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
419
+ 64% {
420
+ -webkit-transform: scale(1, 1) translateY(0);
421
+ transform: scale(1, 1) translateY(0); }
422
+ 100% {
423
+ -webkit-transform: scale(1, 1) translateY(0);
424
+ transform: scale(1, 1) translateY(0); } }
425
+
426
+ @-webkit-keyframes fa-fade {
427
+ 50% {
428
+ opacity: var(--fa-fade-opacity, 0.4); } }
429
+
430
+ @keyframes fa-fade {
431
+ 50% {
432
+ opacity: var(--fa-fade-opacity, 0.4); } }
433
+
434
+ @-webkit-keyframes fa-beat-fade {
435
+ 0%, 100% {
436
+ opacity: var(--fa-beat-fade-opacity, 0.4);
437
+ -webkit-transform: scale(1);
438
+ transform: scale(1); }
439
+ 50% {
440
+ opacity: 1;
441
+ -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
442
+ transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
443
+
444
+ @keyframes fa-beat-fade {
445
+ 0%, 100% {
446
+ opacity: var(--fa-beat-fade-opacity, 0.4);
447
+ -webkit-transform: scale(1);
448
+ transform: scale(1); }
449
+ 50% {
450
+ opacity: 1;
451
+ -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
452
+ transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
453
+
454
+ @-webkit-keyframes fa-flip {
455
+ 50% {
456
+ -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
457
+ transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
458
+
459
+ @keyframes fa-flip {
460
+ 50% {
461
+ -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
462
+ transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
463
+
464
+ @-webkit-keyframes fa-shake {
465
+ 0% {
466
+ -webkit-transform: rotate(-15deg);
467
+ transform: rotate(-15deg); }
468
+ 4% {
469
+ -webkit-transform: rotate(15deg);
470
+ transform: rotate(15deg); }
471
+ 8%, 24% {
472
+ -webkit-transform: rotate(-18deg);
473
+ transform: rotate(-18deg); }
474
+ 12%, 28% {
475
+ -webkit-transform: rotate(18deg);
476
+ transform: rotate(18deg); }
477
+ 16% {
478
+ -webkit-transform: rotate(-22deg);
479
+ transform: rotate(-22deg); }
480
+ 20% {
481
+ -webkit-transform: rotate(22deg);
482
+ transform: rotate(22deg); }
483
+ 32% {
484
+ -webkit-transform: rotate(-12deg);
485
+ transform: rotate(-12deg); }
486
+ 36% {
487
+ -webkit-transform: rotate(12deg);
488
+ transform: rotate(12deg); }
489
+ 40%, 100% {
490
+ -webkit-transform: rotate(0deg);
491
+ transform: rotate(0deg); } }
492
+
493
+ @keyframes fa-shake {
494
+ 0% {
495
+ -webkit-transform: rotate(-15deg);
496
+ transform: rotate(-15deg); }
497
+ 4% {
498
+ -webkit-transform: rotate(15deg);
499
+ transform: rotate(15deg); }
500
+ 8%, 24% {
501
+ -webkit-transform: rotate(-18deg);
502
+ transform: rotate(-18deg); }
503
+ 12%, 28% {
504
+ -webkit-transform: rotate(18deg);
505
+ transform: rotate(18deg); }
506
+ 16% {
507
+ -webkit-transform: rotate(-22deg);
508
+ transform: rotate(-22deg); }
509
+ 20% {
510
+ -webkit-transform: rotate(22deg);
511
+ transform: rotate(22deg); }
512
+ 32% {
513
+ -webkit-transform: rotate(-12deg);
514
+ transform: rotate(-12deg); }
515
+ 36% {
516
+ -webkit-transform: rotate(12deg);
517
+ transform: rotate(12deg); }
518
+ 40%, 100% {
519
+ -webkit-transform: rotate(0deg);
520
+ transform: rotate(0deg); } }
521
+
522
+ @-webkit-keyframes fa-spin {
523
+ 0% {
524
+ -webkit-transform: rotate(0deg);
525
+ transform: rotate(0deg); }
526
+ 100% {
527
+ -webkit-transform: rotate(360deg);
528
+ transform: rotate(360deg); } }
529
+
530
+ @keyframes fa-spin {
531
+ 0% {
532
+ -webkit-transform: rotate(0deg);
533
+ transform: rotate(0deg); }
534
+ 100% {
535
+ -webkit-transform: rotate(360deg);
536
+ transform: rotate(360deg); } }
537
+
538
+ .fa-rotate-90 {
539
+ -webkit-transform: rotate(90deg);
540
+ transform: rotate(90deg); }
541
+
542
+ .fa-rotate-180 {
543
+ -webkit-transform: rotate(180deg);
544
+ transform: rotate(180deg); }
545
+
546
+ .fa-rotate-270 {
547
+ -webkit-transform: rotate(270deg);
548
+ transform: rotate(270deg); }
549
+
550
+ .fa-flip-horizontal {
551
+ -webkit-transform: scale(-1, 1);
552
+ transform: scale(-1, 1); }
553
+
554
+ .fa-flip-vertical {
555
+ -webkit-transform: scale(1, -1);
556
+ transform: scale(1, -1); }
557
+
558
+ .fa-flip-both,
559
+ .fa-flip-horizontal.fa-flip-vertical {
560
+ -webkit-transform: scale(-1, -1);
561
+ transform: scale(-1, -1); }
562
+
563
+ .fa-rotate-by {
564
+ -webkit-transform: rotate(var(--fa-rotate-angle, none));
565
+ transform: rotate(var(--fa-rotate-angle, none)); }
566
+
567
+ .fa-stack {
568
+ display: inline-block;
569
+ vertical-align: middle;
570
+ height: 2em;
571
+ position: relative;
572
+ width: 2.5em; }
573
+
574
+ .fa-stack-1x,
575
+ .fa-stack-2x {
576
+ bottom: 0;
577
+ left: 0;
578
+ margin: auto;
579
+ position: absolute;
580
+ right: 0;
581
+ top: 0;
582
+ z-index: var(--fa-stack-z-index, auto); }
583
+
584
+ .svg-inline--fa.fa-stack-1x {
585
+ height: 1em;
586
+ width: 1.25em; }
587
+
588
+ .svg-inline--fa.fa-stack-2x {
589
+ height: 2em;
590
+ width: 2.5em; }
591
+
592
+ .fa-inverse {
593
+ color: var(--fa-inverse, #fff); }
594
+
595
+ .sr-only,
596
+ .fa-sr-only {
597
+ position: absolute;
598
+ width: 1px;
599
+ height: 1px;
600
+ padding: 0;
601
+ margin: -1px;
602
+ overflow: hidden;
603
+ clip: rect(0, 0, 0, 0);
604
+ white-space: nowrap;
605
+ border-width: 0; }
606
+
607
+ .sr-only-focusable:not(:focus),
608
+ .fa-sr-only-focusable:not(:focus) {
609
+ position: absolute;
610
+ width: 1px;
611
+ height: 1px;
612
+ padding: 0;
613
+ margin: -1px;
614
+ overflow: hidden;
615
+ clip: rect(0, 0, 0, 0);
616
+ white-space: nowrap;
617
+ border-width: 0; }
618
+
619
+ .svg-inline--fa .fa-primary {
620
+ fill: var(--fa-primary-color, currentColor);
621
+ opacity: var(--fa-primary-opacity, 1); }
622
+
623
+ .svg-inline--fa .fa-secondary {
624
+ fill: var(--fa-secondary-color, currentColor);
625
+ opacity: var(--fa-secondary-opacity, 0.4); }
626
+
627
+ .svg-inline--fa.fa-swap-opacity .fa-primary {
628
+ opacity: var(--fa-secondary-opacity, 0.4); }
629
+
630
+ .svg-inline--fa.fa-swap-opacity .fa-secondary {
631
+ opacity: var(--fa-primary-opacity, 1); }
632
+
633
+ .svg-inline--fa mask .fa-primary,
634
+ .svg-inline--fa mask .fa-secondary {
635
+ fill: black; }
636
+
637
+ .fad.fa-inverse,
638
+ .fa-duotone.fa-inverse {
639
+ color: var(--fa-inverse, #fff); }
static/assets/FontAwesome/css/svg-with-js.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ :host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Solid";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Regular";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Light";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Thin";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.07143em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor)}.svg-inline--fa .fa-secondary,.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}
static/assets/FontAwesome/css/v4-font-face.css ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ @font-face {
7
+ font-family: 'FontAwesome';
8
+ font-display: block;
9
+ src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
10
+
11
+ @font-face {
12
+ font-family: 'FontAwesome';
13
+ font-display: block;
14
+ src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
15
+
16
+ @font-face {
17
+ font-family: 'FontAwesome';
18
+ font-display: block;
19
+ src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
20
+ unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
21
+
22
+ @font-face {
23
+ font-family: 'FontAwesome';
24
+ font-display: block;
25
+ src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
26
+ unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }
static/assets/FontAwesome/css/v4-font-face.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ @font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}
static/assets/FontAwesome/css/v4-shims.css ADDED
@@ -0,0 +1,2194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ .fa.fa-glass:before {
7
+ content: "\f000"; }
8
+
9
+ .fa.fa-envelope-o {
10
+ font-family: 'Font Awesome 6 Free';
11
+ font-weight: 400; }
12
+
13
+ .fa.fa-envelope-o:before {
14
+ content: "\f0e0"; }
15
+
16
+ .fa.fa-star-o {
17
+ font-family: 'Font Awesome 6 Free';
18
+ font-weight: 400; }
19
+
20
+ .fa.fa-star-o:before {
21
+ content: "\f005"; }
22
+
23
+ .fa.fa-remove:before {
24
+ content: "\f00d"; }
25
+
26
+ .fa.fa-close:before {
27
+ content: "\f00d"; }
28
+
29
+ .fa.fa-gear:before {
30
+ content: "\f013"; }
31
+
32
+ .fa.fa-trash-o {
33
+ font-family: 'Font Awesome 6 Free';
34
+ font-weight: 400; }
35
+
36
+ .fa.fa-trash-o:before {
37
+ content: "\f2ed"; }
38
+
39
+ .fa.fa-home:before {
40
+ content: "\f015"; }
41
+
42
+ .fa.fa-file-o {
43
+ font-family: 'Font Awesome 6 Free';
44
+ font-weight: 400; }
45
+
46
+ .fa.fa-file-o:before {
47
+ content: "\f15b"; }
48
+
49
+ .fa.fa-clock-o {
50
+ font-family: 'Font Awesome 6 Free';
51
+ font-weight: 400; }
52
+
53
+ .fa.fa-clock-o:before {
54
+ content: "\f017"; }
55
+
56
+ .fa.fa-arrow-circle-o-down {
57
+ font-family: 'Font Awesome 6 Free';
58
+ font-weight: 400; }
59
+
60
+ .fa.fa-arrow-circle-o-down:before {
61
+ content: "\f358"; }
62
+
63
+ .fa.fa-arrow-circle-o-up {
64
+ font-family: 'Font Awesome 6 Free';
65
+ font-weight: 400; }
66
+
67
+ .fa.fa-arrow-circle-o-up:before {
68
+ content: "\f35b"; }
69
+
70
+ .fa.fa-play-circle-o {
71
+ font-family: 'Font Awesome 6 Free';
72
+ font-weight: 400; }
73
+
74
+ .fa.fa-play-circle-o:before {
75
+ content: "\f144"; }
76
+
77
+ .fa.fa-repeat:before {
78
+ content: "\f01e"; }
79
+
80
+ .fa.fa-rotate-right:before {
81
+ content: "\f01e"; }
82
+
83
+ .fa.fa-refresh:before {
84
+ content: "\f021"; }
85
+
86
+ .fa.fa-list-alt {
87
+ font-family: 'Font Awesome 6 Free';
88
+ font-weight: 400; }
89
+
90
+ .fa.fa-list-alt:before {
91
+ content: "\f022"; }
92
+
93
+ .fa.fa-dedent:before {
94
+ content: "\f03b"; }
95
+
96
+ .fa.fa-video-camera:before {
97
+ content: "\f03d"; }
98
+
99
+ .fa.fa-picture-o {
100
+ font-family: 'Font Awesome 6 Free';
101
+ font-weight: 400; }
102
+
103
+ .fa.fa-picture-o:before {
104
+ content: "\f03e"; }
105
+
106
+ .fa.fa-photo {
107
+ font-family: 'Font Awesome 6 Free';
108
+ font-weight: 400; }
109
+
110
+ .fa.fa-photo:before {
111
+ content: "\f03e"; }
112
+
113
+ .fa.fa-image {
114
+ font-family: 'Font Awesome 6 Free';
115
+ font-weight: 400; }
116
+
117
+ .fa.fa-image:before {
118
+ content: "\f03e"; }
119
+
120
+ .fa.fa-map-marker:before {
121
+ content: "\f3c5"; }
122
+
123
+ .fa.fa-pencil-square-o {
124
+ font-family: 'Font Awesome 6 Free';
125
+ font-weight: 400; }
126
+
127
+ .fa.fa-pencil-square-o:before {
128
+ content: "\f044"; }
129
+
130
+ .fa.fa-edit {
131
+ font-family: 'Font Awesome 6 Free';
132
+ font-weight: 400; }
133
+
134
+ .fa.fa-edit:before {
135
+ content: "\f044"; }
136
+
137
+ .fa.fa-share-square-o:before {
138
+ content: "\f14d"; }
139
+
140
+ .fa.fa-check-square-o {
141
+ font-family: 'Font Awesome 6 Free';
142
+ font-weight: 400; }
143
+
144
+ .fa.fa-check-square-o:before {
145
+ content: "\f14a"; }
146
+
147
+ .fa.fa-arrows:before {
148
+ content: "\f0b2"; }
149
+
150
+ .fa.fa-times-circle-o {
151
+ font-family: 'Font Awesome 6 Free';
152
+ font-weight: 400; }
153
+
154
+ .fa.fa-times-circle-o:before {
155
+ content: "\f057"; }
156
+
157
+ .fa.fa-check-circle-o {
158
+ font-family: 'Font Awesome 6 Free';
159
+ font-weight: 400; }
160
+
161
+ .fa.fa-check-circle-o:before {
162
+ content: "\f058"; }
163
+
164
+ .fa.fa-mail-forward:before {
165
+ content: "\f064"; }
166
+
167
+ .fa.fa-expand:before {
168
+ content: "\f424"; }
169
+
170
+ .fa.fa-compress:before {
171
+ content: "\f422"; }
172
+
173
+ .fa.fa-eye {
174
+ font-family: 'Font Awesome 6 Free';
175
+ font-weight: 400; }
176
+
177
+ .fa.fa-eye-slash {
178
+ font-family: 'Font Awesome 6 Free';
179
+ font-weight: 400; }
180
+
181
+ .fa.fa-warning:before {
182
+ content: "\f071"; }
183
+
184
+ .fa.fa-calendar:before {
185
+ content: "\f073"; }
186
+
187
+ .fa.fa-arrows-v:before {
188
+ content: "\f338"; }
189
+
190
+ .fa.fa-arrows-h:before {
191
+ content: "\f337"; }
192
+
193
+ .fa.fa-bar-chart:before {
194
+ content: "\e0e3"; }
195
+
196
+ .fa.fa-bar-chart-o:before {
197
+ content: "\e0e3"; }
198
+
199
+ .fa.fa-twitter-square {
200
+ font-family: 'Font Awesome 6 Brands';
201
+ font-weight: 400; }
202
+
203
+ .fa.fa-twitter-square:before {
204
+ content: "\f081"; }
205
+
206
+ .fa.fa-facebook-square {
207
+ font-family: 'Font Awesome 6 Brands';
208
+ font-weight: 400; }
209
+
210
+ .fa.fa-facebook-square:before {
211
+ content: "\f082"; }
212
+
213
+ .fa.fa-gears:before {
214
+ content: "\f085"; }
215
+
216
+ .fa.fa-thumbs-o-up {
217
+ font-family: 'Font Awesome 6 Free';
218
+ font-weight: 400; }
219
+
220
+ .fa.fa-thumbs-o-up:before {
221
+ content: "\f164"; }
222
+
223
+ .fa.fa-thumbs-o-down {
224
+ font-family: 'Font Awesome 6 Free';
225
+ font-weight: 400; }
226
+
227
+ .fa.fa-thumbs-o-down:before {
228
+ content: "\f165"; }
229
+
230
+ .fa.fa-heart-o {
231
+ font-family: 'Font Awesome 6 Free';
232
+ font-weight: 400; }
233
+
234
+ .fa.fa-heart-o:before {
235
+ content: "\f004"; }
236
+
237
+ .fa.fa-sign-out:before {
238
+ content: "\f2f5"; }
239
+
240
+ .fa.fa-linkedin-square {
241
+ font-family: 'Font Awesome 6 Brands';
242
+ font-weight: 400; }
243
+
244
+ .fa.fa-linkedin-square:before {
245
+ content: "\f08c"; }
246
+
247
+ .fa.fa-thumb-tack:before {
248
+ content: "\f08d"; }
249
+
250
+ .fa.fa-external-link:before {
251
+ content: "\f35d"; }
252
+
253
+ .fa.fa-sign-in:before {
254
+ content: "\f2f6"; }
255
+
256
+ .fa.fa-github-square {
257
+ font-family: 'Font Awesome 6 Brands';
258
+ font-weight: 400; }
259
+
260
+ .fa.fa-github-square:before {
261
+ content: "\f092"; }
262
+
263
+ .fa.fa-lemon-o {
264
+ font-family: 'Font Awesome 6 Free';
265
+ font-weight: 400; }
266
+
267
+ .fa.fa-lemon-o:before {
268
+ content: "\f094"; }
269
+
270
+ .fa.fa-square-o {
271
+ font-family: 'Font Awesome 6 Free';
272
+ font-weight: 400; }
273
+
274
+ .fa.fa-square-o:before {
275
+ content: "\f0c8"; }
276
+
277
+ .fa.fa-bookmark-o {
278
+ font-family: 'Font Awesome 6 Free';
279
+ font-weight: 400; }
280
+
281
+ .fa.fa-bookmark-o:before {
282
+ content: "\f02e"; }
283
+
284
+ .fa.fa-twitter {
285
+ font-family: 'Font Awesome 6 Brands';
286
+ font-weight: 400; }
287
+
288
+ .fa.fa-facebook {
289
+ font-family: 'Font Awesome 6 Brands';
290
+ font-weight: 400; }
291
+
292
+ .fa.fa-facebook:before {
293
+ content: "\f39e"; }
294
+
295
+ .fa.fa-facebook-f {
296
+ font-family: 'Font Awesome 6 Brands';
297
+ font-weight: 400; }
298
+
299
+ .fa.fa-facebook-f:before {
300
+ content: "\f39e"; }
301
+
302
+ .fa.fa-github {
303
+ font-family: 'Font Awesome 6 Brands';
304
+ font-weight: 400; }
305
+
306
+ .fa.fa-credit-card {
307
+ font-family: 'Font Awesome 6 Free';
308
+ font-weight: 400; }
309
+
310
+ .fa.fa-feed:before {
311
+ content: "\f09e"; }
312
+
313
+ .fa.fa-hdd-o {
314
+ font-family: 'Font Awesome 6 Free';
315
+ font-weight: 400; }
316
+
317
+ .fa.fa-hdd-o:before {
318
+ content: "\f0a0"; }
319
+
320
+ .fa.fa-hand-o-right {
321
+ font-family: 'Font Awesome 6 Free';
322
+ font-weight: 400; }
323
+
324
+ .fa.fa-hand-o-right:before {
325
+ content: "\f0a4"; }
326
+
327
+ .fa.fa-hand-o-left {
328
+ font-family: 'Font Awesome 6 Free';
329
+ font-weight: 400; }
330
+
331
+ .fa.fa-hand-o-left:before {
332
+ content: "\f0a5"; }
333
+
334
+ .fa.fa-hand-o-up {
335
+ font-family: 'Font Awesome 6 Free';
336
+ font-weight: 400; }
337
+
338
+ .fa.fa-hand-o-up:before {
339
+ content: "\f0a6"; }
340
+
341
+ .fa.fa-hand-o-down {
342
+ font-family: 'Font Awesome 6 Free';
343
+ font-weight: 400; }
344
+
345
+ .fa.fa-hand-o-down:before {
346
+ content: "\f0a7"; }
347
+
348
+ .fa.fa-globe:before {
349
+ content: "\f57d"; }
350
+
351
+ .fa.fa-tasks:before {
352
+ content: "\f828"; }
353
+
354
+ .fa.fa-arrows-alt:before {
355
+ content: "\f31e"; }
356
+
357
+ .fa.fa-group:before {
358
+ content: "\f0c0"; }
359
+
360
+ .fa.fa-chain:before {
361
+ content: "\f0c1"; }
362
+
363
+ .fa.fa-cut:before {
364
+ content: "\f0c4"; }
365
+
366
+ .fa.fa-files-o {
367
+ font-family: 'Font Awesome 6 Free';
368
+ font-weight: 400; }
369
+
370
+ .fa.fa-files-o:before {
371
+ content: "\f0c5"; }
372
+
373
+ .fa.fa-floppy-o {
374
+ font-family: 'Font Awesome 6 Free';
375
+ font-weight: 400; }
376
+
377
+ .fa.fa-floppy-o:before {
378
+ content: "\f0c7"; }
379
+
380
+ .fa.fa-save {
381
+ font-family: 'Font Awesome 6 Free';
382
+ font-weight: 400; }
383
+
384
+ .fa.fa-save:before {
385
+ content: "\f0c7"; }
386
+
387
+ .fa.fa-navicon:before {
388
+ content: "\f0c9"; }
389
+
390
+ .fa.fa-reorder:before {
391
+ content: "\f0c9"; }
392
+
393
+ .fa.fa-magic:before {
394
+ content: "\e2ca"; }
395
+
396
+ .fa.fa-pinterest {
397
+ font-family: 'Font Awesome 6 Brands';
398
+ font-weight: 400; }
399
+
400
+ .fa.fa-pinterest-square {
401
+ font-family: 'Font Awesome 6 Brands';
402
+ font-weight: 400; }
403
+
404
+ .fa.fa-pinterest-square:before {
405
+ content: "\f0d3"; }
406
+
407
+ .fa.fa-google-plus-square {
408
+ font-family: 'Font Awesome 6 Brands';
409
+ font-weight: 400; }
410
+
411
+ .fa.fa-google-plus-square:before {
412
+ content: "\f0d4"; }
413
+
414
+ .fa.fa-google-plus {
415
+ font-family: 'Font Awesome 6 Brands';
416
+ font-weight: 400; }
417
+
418
+ .fa.fa-google-plus:before {
419
+ content: "\f0d5"; }
420
+
421
+ .fa.fa-money:before {
422
+ content: "\f3d1"; }
423
+
424
+ .fa.fa-unsorted:before {
425
+ content: "\f0dc"; }
426
+
427
+ .fa.fa-sort-desc:before {
428
+ content: "\f0dd"; }
429
+
430
+ .fa.fa-sort-asc:before {
431
+ content: "\f0de"; }
432
+
433
+ .fa.fa-linkedin {
434
+ font-family: 'Font Awesome 6 Brands';
435
+ font-weight: 400; }
436
+
437
+ .fa.fa-linkedin:before {
438
+ content: "\f0e1"; }
439
+
440
+ .fa.fa-rotate-left:before {
441
+ content: "\f0e2"; }
442
+
443
+ .fa.fa-legal:before {
444
+ content: "\f0e3"; }
445
+
446
+ .fa.fa-tachometer:before {
447
+ content: "\f625"; }
448
+
449
+ .fa.fa-dashboard:before {
450
+ content: "\f625"; }
451
+
452
+ .fa.fa-comment-o {
453
+ font-family: 'Font Awesome 6 Free';
454
+ font-weight: 400; }
455
+
456
+ .fa.fa-comment-o:before {
457
+ content: "\f075"; }
458
+
459
+ .fa.fa-comments-o {
460
+ font-family: 'Font Awesome 6 Free';
461
+ font-weight: 400; }
462
+
463
+ .fa.fa-comments-o:before {
464
+ content: "\f086"; }
465
+
466
+ .fa.fa-flash:before {
467
+ content: "\f0e7"; }
468
+
469
+ .fa.fa-clipboard:before {
470
+ content: "\f0ea"; }
471
+
472
+ .fa.fa-lightbulb-o {
473
+ font-family: 'Font Awesome 6 Free';
474
+ font-weight: 400; }
475
+
476
+ .fa.fa-lightbulb-o:before {
477
+ content: "\f0eb"; }
478
+
479
+ .fa.fa-exchange:before {
480
+ content: "\f362"; }
481
+
482
+ .fa.fa-cloud-download:before {
483
+ content: "\f0ed"; }
484
+
485
+ .fa.fa-cloud-upload:before {
486
+ content: "\f0ee"; }
487
+
488
+ .fa.fa-bell-o {
489
+ font-family: 'Font Awesome 6 Free';
490
+ font-weight: 400; }
491
+
492
+ .fa.fa-bell-o:before {
493
+ content: "\f0f3"; }
494
+
495
+ .fa.fa-cutlery:before {
496
+ content: "\f2e7"; }
497
+
498
+ .fa.fa-file-text-o {
499
+ font-family: 'Font Awesome 6 Free';
500
+ font-weight: 400; }
501
+
502
+ .fa.fa-file-text-o:before {
503
+ content: "\f15c"; }
504
+
505
+ .fa.fa-building-o {
506
+ font-family: 'Font Awesome 6 Free';
507
+ font-weight: 400; }
508
+
509
+ .fa.fa-building-o:before {
510
+ content: "\f1ad"; }
511
+
512
+ .fa.fa-hospital-o {
513
+ font-family: 'Font Awesome 6 Free';
514
+ font-weight: 400; }
515
+
516
+ .fa.fa-hospital-o:before {
517
+ content: "\f0f8"; }
518
+
519
+ .fa.fa-tablet:before {
520
+ content: "\f3fa"; }
521
+
522
+ .fa.fa-mobile:before {
523
+ content: "\f3cd"; }
524
+
525
+ .fa.fa-mobile-phone:before {
526
+ content: "\f3cd"; }
527
+
528
+ .fa.fa-circle-o {
529
+ font-family: 'Font Awesome 6 Free';
530
+ font-weight: 400; }
531
+
532
+ .fa.fa-circle-o:before {
533
+ content: "\f111"; }
534
+
535
+ .fa.fa-mail-reply:before {
536
+ content: "\f3e5"; }
537
+
538
+ .fa.fa-github-alt {
539
+ font-family: 'Font Awesome 6 Brands';
540
+ font-weight: 400; }
541
+
542
+ .fa.fa-folder-o {
543
+ font-family: 'Font Awesome 6 Free';
544
+ font-weight: 400; }
545
+
546
+ .fa.fa-folder-o:before {
547
+ content: "\f07b"; }
548
+
549
+ .fa.fa-folder-open-o {
550
+ font-family: 'Font Awesome 6 Free';
551
+ font-weight: 400; }
552
+
553
+ .fa.fa-folder-open-o:before {
554
+ content: "\f07c"; }
555
+
556
+ .fa.fa-smile-o {
557
+ font-family: 'Font Awesome 6 Free';
558
+ font-weight: 400; }
559
+
560
+ .fa.fa-smile-o:before {
561
+ content: "\f118"; }
562
+
563
+ .fa.fa-frown-o {
564
+ font-family: 'Font Awesome 6 Free';
565
+ font-weight: 400; }
566
+
567
+ .fa.fa-frown-o:before {
568
+ content: "\f119"; }
569
+
570
+ .fa.fa-meh-o {
571
+ font-family: 'Font Awesome 6 Free';
572
+ font-weight: 400; }
573
+
574
+ .fa.fa-meh-o:before {
575
+ content: "\f11a"; }
576
+
577
+ .fa.fa-keyboard-o {
578
+ font-family: 'Font Awesome 6 Free';
579
+ font-weight: 400; }
580
+
581
+ .fa.fa-keyboard-o:before {
582
+ content: "\f11c"; }
583
+
584
+ .fa.fa-flag-o {
585
+ font-family: 'Font Awesome 6 Free';
586
+ font-weight: 400; }
587
+
588
+ .fa.fa-flag-o:before {
589
+ content: "\f024"; }
590
+
591
+ .fa.fa-mail-reply-all:before {
592
+ content: "\f122"; }
593
+
594
+ .fa.fa-star-half-o {
595
+ font-family: 'Font Awesome 6 Free';
596
+ font-weight: 400; }
597
+
598
+ .fa.fa-star-half-o:before {
599
+ content: "\f5c0"; }
600
+
601
+ .fa.fa-star-half-empty {
602
+ font-family: 'Font Awesome 6 Free';
603
+ font-weight: 400; }
604
+
605
+ .fa.fa-star-half-empty:before {
606
+ content: "\f5c0"; }
607
+
608
+ .fa.fa-star-half-full {
609
+ font-family: 'Font Awesome 6 Free';
610
+ font-weight: 400; }
611
+
612
+ .fa.fa-star-half-full:before {
613
+ content: "\f5c0"; }
614
+
615
+ .fa.fa-code-fork:before {
616
+ content: "\f126"; }
617
+
618
+ .fa.fa-chain-broken:before {
619
+ content: "\f127"; }
620
+
621
+ .fa.fa-unlink:before {
622
+ content: "\f127"; }
623
+
624
+ .fa.fa-calendar-o {
625
+ font-family: 'Font Awesome 6 Free';
626
+ font-weight: 400; }
627
+
628
+ .fa.fa-calendar-o:before {
629
+ content: "\f133"; }
630
+
631
+ .fa.fa-maxcdn {
632
+ font-family: 'Font Awesome 6 Brands';
633
+ font-weight: 400; }
634
+
635
+ .fa.fa-html5 {
636
+ font-family: 'Font Awesome 6 Brands';
637
+ font-weight: 400; }
638
+
639
+ .fa.fa-css3 {
640
+ font-family: 'Font Awesome 6 Brands';
641
+ font-weight: 400; }
642
+
643
+ .fa.fa-unlock-alt:before {
644
+ content: "\f09c"; }
645
+
646
+ .fa.fa-minus-square-o {
647
+ font-family: 'Font Awesome 6 Free';
648
+ font-weight: 400; }
649
+
650
+ .fa.fa-minus-square-o:before {
651
+ content: "\f146"; }
652
+
653
+ .fa.fa-level-up:before {
654
+ content: "\f3bf"; }
655
+
656
+ .fa.fa-level-down:before {
657
+ content: "\f3be"; }
658
+
659
+ .fa.fa-pencil-square:before {
660
+ content: "\f14b"; }
661
+
662
+ .fa.fa-external-link-square:before {
663
+ content: "\f360"; }
664
+
665
+ .fa.fa-compass {
666
+ font-family: 'Font Awesome 6 Free';
667
+ font-weight: 400; }
668
+
669
+ .fa.fa-caret-square-o-down {
670
+ font-family: 'Font Awesome 6 Free';
671
+ font-weight: 400; }
672
+
673
+ .fa.fa-caret-square-o-down:before {
674
+ content: "\f150"; }
675
+
676
+ .fa.fa-toggle-down {
677
+ font-family: 'Font Awesome 6 Free';
678
+ font-weight: 400; }
679
+
680
+ .fa.fa-toggle-down:before {
681
+ content: "\f150"; }
682
+
683
+ .fa.fa-caret-square-o-up {
684
+ font-family: 'Font Awesome 6 Free';
685
+ font-weight: 400; }
686
+
687
+ .fa.fa-caret-square-o-up:before {
688
+ content: "\f151"; }
689
+
690
+ .fa.fa-toggle-up {
691
+ font-family: 'Font Awesome 6 Free';
692
+ font-weight: 400; }
693
+
694
+ .fa.fa-toggle-up:before {
695
+ content: "\f151"; }
696
+
697
+ .fa.fa-caret-square-o-right {
698
+ font-family: 'Font Awesome 6 Free';
699
+ font-weight: 400; }
700
+
701
+ .fa.fa-caret-square-o-right:before {
702
+ content: "\f152"; }
703
+
704
+ .fa.fa-toggle-right {
705
+ font-family: 'Font Awesome 6 Free';
706
+ font-weight: 400; }
707
+
708
+ .fa.fa-toggle-right:before {
709
+ content: "\f152"; }
710
+
711
+ .fa.fa-eur:before {
712
+ content: "\f153"; }
713
+
714
+ .fa.fa-euro:before {
715
+ content: "\f153"; }
716
+
717
+ .fa.fa-gbp:before {
718
+ content: "\f154"; }
719
+
720
+ .fa.fa-usd:before {
721
+ content: "\24"; }
722
+
723
+ .fa.fa-dollar:before {
724
+ content: "\24"; }
725
+
726
+ .fa.fa-inr:before {
727
+ content: "\e1bc"; }
728
+
729
+ .fa.fa-rupee:before {
730
+ content: "\e1bc"; }
731
+
732
+ .fa.fa-jpy:before {
733
+ content: "\f157"; }
734
+
735
+ .fa.fa-cny:before {
736
+ content: "\f157"; }
737
+
738
+ .fa.fa-rmb:before {
739
+ content: "\f157"; }
740
+
741
+ .fa.fa-yen:before {
742
+ content: "\f157"; }
743
+
744
+ .fa.fa-rub:before {
745
+ content: "\f158"; }
746
+
747
+ .fa.fa-ruble:before {
748
+ content: "\f158"; }
749
+
750
+ .fa.fa-rouble:before {
751
+ content: "\f158"; }
752
+
753
+ .fa.fa-krw:before {
754
+ content: "\f159"; }
755
+
756
+ .fa.fa-won:before {
757
+ content: "\f159"; }
758
+
759
+ .fa.fa-btc {
760
+ font-family: 'Font Awesome 6 Brands';
761
+ font-weight: 400; }
762
+
763
+ .fa.fa-bitcoin {
764
+ font-family: 'Font Awesome 6 Brands';
765
+ font-weight: 400; }
766
+
767
+ .fa.fa-bitcoin:before {
768
+ content: "\f15a"; }
769
+
770
+ .fa.fa-file-text:before {
771
+ content: "\f15c"; }
772
+
773
+ .fa.fa-sort-alpha-asc:before {
774
+ content: "\f15d"; }
775
+
776
+ .fa.fa-sort-alpha-desc:before {
777
+ content: "\f881"; }
778
+
779
+ .fa.fa-sort-amount-asc:before {
780
+ content: "\f884"; }
781
+
782
+ .fa.fa-sort-amount-desc:before {
783
+ content: "\f160"; }
784
+
785
+ .fa.fa-sort-numeric-asc:before {
786
+ content: "\f162"; }
787
+
788
+ .fa.fa-sort-numeric-desc:before {
789
+ content: "\f886"; }
790
+
791
+ .fa.fa-youtube-square {
792
+ font-family: 'Font Awesome 6 Brands';
793
+ font-weight: 400; }
794
+
795
+ .fa.fa-youtube-square:before {
796
+ content: "\f431"; }
797
+
798
+ .fa.fa-youtube {
799
+ font-family: 'Font Awesome 6 Brands';
800
+ font-weight: 400; }
801
+
802
+ .fa.fa-xing {
803
+ font-family: 'Font Awesome 6 Brands';
804
+ font-weight: 400; }
805
+
806
+ .fa.fa-xing-square {
807
+ font-family: 'Font Awesome 6 Brands';
808
+ font-weight: 400; }
809
+
810
+ .fa.fa-xing-square:before {
811
+ content: "\f169"; }
812
+
813
+ .fa.fa-youtube-play {
814
+ font-family: 'Font Awesome 6 Brands';
815
+ font-weight: 400; }
816
+
817
+ .fa.fa-youtube-play:before {
818
+ content: "\f167"; }
819
+
820
+ .fa.fa-dropbox {
821
+ font-family: 'Font Awesome 6 Brands';
822
+ font-weight: 400; }
823
+
824
+ .fa.fa-stack-overflow {
825
+ font-family: 'Font Awesome 6 Brands';
826
+ font-weight: 400; }
827
+
828
+ .fa.fa-instagram {
829
+ font-family: 'Font Awesome 6 Brands';
830
+ font-weight: 400; }
831
+
832
+ .fa.fa-flickr {
833
+ font-family: 'Font Awesome 6 Brands';
834
+ font-weight: 400; }
835
+
836
+ .fa.fa-adn {
837
+ font-family: 'Font Awesome 6 Brands';
838
+ font-weight: 400; }
839
+
840
+ .fa.fa-bitbucket {
841
+ font-family: 'Font Awesome 6 Brands';
842
+ font-weight: 400; }
843
+
844
+ .fa.fa-bitbucket-square {
845
+ font-family: 'Font Awesome 6 Brands';
846
+ font-weight: 400; }
847
+
848
+ .fa.fa-bitbucket-square:before {
849
+ content: "\f171"; }
850
+
851
+ .fa.fa-tumblr {
852
+ font-family: 'Font Awesome 6 Brands';
853
+ font-weight: 400; }
854
+
855
+ .fa.fa-tumblr-square {
856
+ font-family: 'Font Awesome 6 Brands';
857
+ font-weight: 400; }
858
+
859
+ .fa.fa-tumblr-square:before {
860
+ content: "\f174"; }
861
+
862
+ .fa.fa-long-arrow-down:before {
863
+ content: "\f309"; }
864
+
865
+ .fa.fa-long-arrow-up:before {
866
+ content: "\f30c"; }
867
+
868
+ .fa.fa-long-arrow-left:before {
869
+ content: "\f30a"; }
870
+
871
+ .fa.fa-long-arrow-right:before {
872
+ content: "\f30b"; }
873
+
874
+ .fa.fa-apple {
875
+ font-family: 'Font Awesome 6 Brands';
876
+ font-weight: 400; }
877
+
878
+ .fa.fa-windows {
879
+ font-family: 'Font Awesome 6 Brands';
880
+ font-weight: 400; }
881
+
882
+ .fa.fa-android {
883
+ font-family: 'Font Awesome 6 Brands';
884
+ font-weight: 400; }
885
+
886
+ .fa.fa-linux {
887
+ font-family: 'Font Awesome 6 Brands';
888
+ font-weight: 400; }
889
+
890
+ .fa.fa-dribbble {
891
+ font-family: 'Font Awesome 6 Brands';
892
+ font-weight: 400; }
893
+
894
+ .fa.fa-skype {
895
+ font-family: 'Font Awesome 6 Brands';
896
+ font-weight: 400; }
897
+
898
+ .fa.fa-foursquare {
899
+ font-family: 'Font Awesome 6 Brands';
900
+ font-weight: 400; }
901
+
902
+ .fa.fa-trello {
903
+ font-family: 'Font Awesome 6 Brands';
904
+ font-weight: 400; }
905
+
906
+ .fa.fa-gratipay {
907
+ font-family: 'Font Awesome 6 Brands';
908
+ font-weight: 400; }
909
+
910
+ .fa.fa-gittip {
911
+ font-family: 'Font Awesome 6 Brands';
912
+ font-weight: 400; }
913
+
914
+ .fa.fa-gittip:before {
915
+ content: "\f184"; }
916
+
917
+ .fa.fa-sun-o {
918
+ font-family: 'Font Awesome 6 Free';
919
+ font-weight: 400; }
920
+
921
+ .fa.fa-sun-o:before {
922
+ content: "\f185"; }
923
+
924
+ .fa.fa-moon-o {
925
+ font-family: 'Font Awesome 6 Free';
926
+ font-weight: 400; }
927
+
928
+ .fa.fa-moon-o:before {
929
+ content: "\f186"; }
930
+
931
+ .fa.fa-vk {
932
+ font-family: 'Font Awesome 6 Brands';
933
+ font-weight: 400; }
934
+
935
+ .fa.fa-weibo {
936
+ font-family: 'Font Awesome 6 Brands';
937
+ font-weight: 400; }
938
+
939
+ .fa.fa-renren {
940
+ font-family: 'Font Awesome 6 Brands';
941
+ font-weight: 400; }
942
+
943
+ .fa.fa-pagelines {
944
+ font-family: 'Font Awesome 6 Brands';
945
+ font-weight: 400; }
946
+
947
+ .fa.fa-stack-exchange {
948
+ font-family: 'Font Awesome 6 Brands';
949
+ font-weight: 400; }
950
+
951
+ .fa.fa-arrow-circle-o-right {
952
+ font-family: 'Font Awesome 6 Free';
953
+ font-weight: 400; }
954
+
955
+ .fa.fa-arrow-circle-o-right:before {
956
+ content: "\f35a"; }
957
+
958
+ .fa.fa-arrow-circle-o-left {
959
+ font-family: 'Font Awesome 6 Free';
960
+ font-weight: 400; }
961
+
962
+ .fa.fa-arrow-circle-o-left:before {
963
+ content: "\f359"; }
964
+
965
+ .fa.fa-caret-square-o-left {
966
+ font-family: 'Font Awesome 6 Free';
967
+ font-weight: 400; }
968
+
969
+ .fa.fa-caret-square-o-left:before {
970
+ content: "\f191"; }
971
+
972
+ .fa.fa-toggle-left {
973
+ font-family: 'Font Awesome 6 Free';
974
+ font-weight: 400; }
975
+
976
+ .fa.fa-toggle-left:before {
977
+ content: "\f191"; }
978
+
979
+ .fa.fa-dot-circle-o {
980
+ font-family: 'Font Awesome 6 Free';
981
+ font-weight: 400; }
982
+
983
+ .fa.fa-dot-circle-o:before {
984
+ content: "\f192"; }
985
+
986
+ .fa.fa-vimeo-square {
987
+ font-family: 'Font Awesome 6 Brands';
988
+ font-weight: 400; }
989
+
990
+ .fa.fa-vimeo-square:before {
991
+ content: "\f194"; }
992
+
993
+ .fa.fa-try:before {
994
+ content: "\e2bb"; }
995
+
996
+ .fa.fa-turkish-lira:before {
997
+ content: "\e2bb"; }
998
+
999
+ .fa.fa-plus-square-o {
1000
+ font-family: 'Font Awesome 6 Free';
1001
+ font-weight: 400; }
1002
+
1003
+ .fa.fa-plus-square-o:before {
1004
+ content: "\f0fe"; }
1005
+
1006
+ .fa.fa-slack {
1007
+ font-family: 'Font Awesome 6 Brands';
1008
+ font-weight: 400; }
1009
+
1010
+ .fa.fa-wordpress {
1011
+ font-family: 'Font Awesome 6 Brands';
1012
+ font-weight: 400; }
1013
+
1014
+ .fa.fa-openid {
1015
+ font-family: 'Font Awesome 6 Brands';
1016
+ font-weight: 400; }
1017
+
1018
+ .fa.fa-institution:before {
1019
+ content: "\f19c"; }
1020
+
1021
+ .fa.fa-bank:before {
1022
+ content: "\f19c"; }
1023
+
1024
+ .fa.fa-mortar-board:before {
1025
+ content: "\f19d"; }
1026
+
1027
+ .fa.fa-yahoo {
1028
+ font-family: 'Font Awesome 6 Brands';
1029
+ font-weight: 400; }
1030
+
1031
+ .fa.fa-google {
1032
+ font-family: 'Font Awesome 6 Brands';
1033
+ font-weight: 400; }
1034
+
1035
+ .fa.fa-reddit {
1036
+ font-family: 'Font Awesome 6 Brands';
1037
+ font-weight: 400; }
1038
+
1039
+ .fa.fa-reddit-square {
1040
+ font-family: 'Font Awesome 6 Brands';
1041
+ font-weight: 400; }
1042
+
1043
+ .fa.fa-reddit-square:before {
1044
+ content: "\f1a2"; }
1045
+
1046
+ .fa.fa-stumbleupon-circle {
1047
+ font-family: 'Font Awesome 6 Brands';
1048
+ font-weight: 400; }
1049
+
1050
+ .fa.fa-stumbleupon {
1051
+ font-family: 'Font Awesome 6 Brands';
1052
+ font-weight: 400; }
1053
+
1054
+ .fa.fa-delicious {
1055
+ font-family: 'Font Awesome 6 Brands';
1056
+ font-weight: 400; }
1057
+
1058
+ .fa.fa-digg {
1059
+ font-family: 'Font Awesome 6 Brands';
1060
+ font-weight: 400; }
1061
+
1062
+ .fa.fa-pied-piper-pp {
1063
+ font-family: 'Font Awesome 6 Brands';
1064
+ font-weight: 400; }
1065
+
1066
+ .fa.fa-pied-piper-alt {
1067
+ font-family: 'Font Awesome 6 Brands';
1068
+ font-weight: 400; }
1069
+
1070
+ .fa.fa-drupal {
1071
+ font-family: 'Font Awesome 6 Brands';
1072
+ font-weight: 400; }
1073
+
1074
+ .fa.fa-joomla {
1075
+ font-family: 'Font Awesome 6 Brands';
1076
+ font-weight: 400; }
1077
+
1078
+ .fa.fa-behance {
1079
+ font-family: 'Font Awesome 6 Brands';
1080
+ font-weight: 400; }
1081
+
1082
+ .fa.fa-behance-square {
1083
+ font-family: 'Font Awesome 6 Brands';
1084
+ font-weight: 400; }
1085
+
1086
+ .fa.fa-behance-square:before {
1087
+ content: "\f1b5"; }
1088
+
1089
+ .fa.fa-steam {
1090
+ font-family: 'Font Awesome 6 Brands';
1091
+ font-weight: 400; }
1092
+
1093
+ .fa.fa-steam-square {
1094
+ font-family: 'Font Awesome 6 Brands';
1095
+ font-weight: 400; }
1096
+
1097
+ .fa.fa-steam-square:before {
1098
+ content: "\f1b7"; }
1099
+
1100
+ .fa.fa-automobile:before {
1101
+ content: "\f1b9"; }
1102
+
1103
+ .fa.fa-cab:before {
1104
+ content: "\f1ba"; }
1105
+
1106
+ .fa.fa-spotify {
1107
+ font-family: 'Font Awesome 6 Brands';
1108
+ font-weight: 400; }
1109
+
1110
+ .fa.fa-deviantart {
1111
+ font-family: 'Font Awesome 6 Brands';
1112
+ font-weight: 400; }
1113
+
1114
+ .fa.fa-soundcloud {
1115
+ font-family: 'Font Awesome 6 Brands';
1116
+ font-weight: 400; }
1117
+
1118
+ .fa.fa-file-pdf-o {
1119
+ font-family: 'Font Awesome 6 Free';
1120
+ font-weight: 400; }
1121
+
1122
+ .fa.fa-file-pdf-o:before {
1123
+ content: "\f1c1"; }
1124
+
1125
+ .fa.fa-file-word-o {
1126
+ font-family: 'Font Awesome 6 Free';
1127
+ font-weight: 400; }
1128
+
1129
+ .fa.fa-file-word-o:before {
1130
+ content: "\f1c2"; }
1131
+
1132
+ .fa.fa-file-excel-o {
1133
+ font-family: 'Font Awesome 6 Free';
1134
+ font-weight: 400; }
1135
+
1136
+ .fa.fa-file-excel-o:before {
1137
+ content: "\f1c3"; }
1138
+
1139
+ .fa.fa-file-powerpoint-o {
1140
+ font-family: 'Font Awesome 6 Free';
1141
+ font-weight: 400; }
1142
+
1143
+ .fa.fa-file-powerpoint-o:before {
1144
+ content: "\f1c4"; }
1145
+
1146
+ .fa.fa-file-image-o {
1147
+ font-family: 'Font Awesome 6 Free';
1148
+ font-weight: 400; }
1149
+
1150
+ .fa.fa-file-image-o:before {
1151
+ content: "\f1c5"; }
1152
+
1153
+ .fa.fa-file-photo-o {
1154
+ font-family: 'Font Awesome 6 Free';
1155
+ font-weight: 400; }
1156
+
1157
+ .fa.fa-file-photo-o:before {
1158
+ content: "\f1c5"; }
1159
+
1160
+ .fa.fa-file-picture-o {
1161
+ font-family: 'Font Awesome 6 Free';
1162
+ font-weight: 400; }
1163
+
1164
+ .fa.fa-file-picture-o:before {
1165
+ content: "\f1c5"; }
1166
+
1167
+ .fa.fa-file-archive-o {
1168
+ font-family: 'Font Awesome 6 Free';
1169
+ font-weight: 400; }
1170
+
1171
+ .fa.fa-file-archive-o:before {
1172
+ content: "\f1c6"; }
1173
+
1174
+ .fa.fa-file-zip-o {
1175
+ font-family: 'Font Awesome 6 Free';
1176
+ font-weight: 400; }
1177
+
1178
+ .fa.fa-file-zip-o:before {
1179
+ content: "\f1c6"; }
1180
+
1181
+ .fa.fa-file-audio-o {
1182
+ font-family: 'Font Awesome 6 Free';
1183
+ font-weight: 400; }
1184
+
1185
+ .fa.fa-file-audio-o:before {
1186
+ content: "\f1c7"; }
1187
+
1188
+ .fa.fa-file-sound-o {
1189
+ font-family: 'Font Awesome 6 Free';
1190
+ font-weight: 400; }
1191
+
1192
+ .fa.fa-file-sound-o:before {
1193
+ content: "\f1c7"; }
1194
+
1195
+ .fa.fa-file-video-o {
1196
+ font-family: 'Font Awesome 6 Free';
1197
+ font-weight: 400; }
1198
+
1199
+ .fa.fa-file-video-o:before {
1200
+ content: "\f1c8"; }
1201
+
1202
+ .fa.fa-file-movie-o {
1203
+ font-family: 'Font Awesome 6 Free';
1204
+ font-weight: 400; }
1205
+
1206
+ .fa.fa-file-movie-o:before {
1207
+ content: "\f1c8"; }
1208
+
1209
+ .fa.fa-file-code-o {
1210
+ font-family: 'Font Awesome 6 Free';
1211
+ font-weight: 400; }
1212
+
1213
+ .fa.fa-file-code-o:before {
1214
+ content: "\f1c9"; }
1215
+
1216
+ .fa.fa-vine {
1217
+ font-family: 'Font Awesome 6 Brands';
1218
+ font-weight: 400; }
1219
+
1220
+ .fa.fa-codepen {
1221
+ font-family: 'Font Awesome 6 Brands';
1222
+ font-weight: 400; }
1223
+
1224
+ .fa.fa-jsfiddle {
1225
+ font-family: 'Font Awesome 6 Brands';
1226
+ font-weight: 400; }
1227
+
1228
+ .fa.fa-life-bouy:before {
1229
+ content: "\f1cd"; }
1230
+
1231
+ .fa.fa-life-buoy:before {
1232
+ content: "\f1cd"; }
1233
+
1234
+ .fa.fa-life-saver:before {
1235
+ content: "\f1cd"; }
1236
+
1237
+ .fa.fa-support:before {
1238
+ content: "\f1cd"; }
1239
+
1240
+ .fa.fa-circle-o-notch:before {
1241
+ content: "\f1ce"; }
1242
+
1243
+ .fa.fa-rebel {
1244
+ font-family: 'Font Awesome 6 Brands';
1245
+ font-weight: 400; }
1246
+
1247
+ .fa.fa-ra {
1248
+ font-family: 'Font Awesome 6 Brands';
1249
+ font-weight: 400; }
1250
+
1251
+ .fa.fa-ra:before {
1252
+ content: "\f1d0"; }
1253
+
1254
+ .fa.fa-resistance {
1255
+ font-family: 'Font Awesome 6 Brands';
1256
+ font-weight: 400; }
1257
+
1258
+ .fa.fa-resistance:before {
1259
+ content: "\f1d0"; }
1260
+
1261
+ .fa.fa-empire {
1262
+ font-family: 'Font Awesome 6 Brands';
1263
+ font-weight: 400; }
1264
+
1265
+ .fa.fa-ge {
1266
+ font-family: 'Font Awesome 6 Brands';
1267
+ font-weight: 400; }
1268
+
1269
+ .fa.fa-ge:before {
1270
+ content: "\f1d1"; }
1271
+
1272
+ .fa.fa-git-square {
1273
+ font-family: 'Font Awesome 6 Brands';
1274
+ font-weight: 400; }
1275
+
1276
+ .fa.fa-git-square:before {
1277
+ content: "\f1d2"; }
1278
+
1279
+ .fa.fa-git {
1280
+ font-family: 'Font Awesome 6 Brands';
1281
+ font-weight: 400; }
1282
+
1283
+ .fa.fa-hacker-news {
1284
+ font-family: 'Font Awesome 6 Brands';
1285
+ font-weight: 400; }
1286
+
1287
+ .fa.fa-y-combinator-square {
1288
+ font-family: 'Font Awesome 6 Brands';
1289
+ font-weight: 400; }
1290
+
1291
+ .fa.fa-y-combinator-square:before {
1292
+ content: "\f1d4"; }
1293
+
1294
+ .fa.fa-yc-square {
1295
+ font-family: 'Font Awesome 6 Brands';
1296
+ font-weight: 400; }
1297
+
1298
+ .fa.fa-yc-square:before {
1299
+ content: "\f1d4"; }
1300
+
1301
+ .fa.fa-tencent-weibo {
1302
+ font-family: 'Font Awesome 6 Brands';
1303
+ font-weight: 400; }
1304
+
1305
+ .fa.fa-qq {
1306
+ font-family: 'Font Awesome 6 Brands';
1307
+ font-weight: 400; }
1308
+
1309
+ .fa.fa-weixin {
1310
+ font-family: 'Font Awesome 6 Brands';
1311
+ font-weight: 400; }
1312
+
1313
+ .fa.fa-wechat {
1314
+ font-family: 'Font Awesome 6 Brands';
1315
+ font-weight: 400; }
1316
+
1317
+ .fa.fa-wechat:before {
1318
+ content: "\f1d7"; }
1319
+
1320
+ .fa.fa-send:before {
1321
+ content: "\f1d8"; }
1322
+
1323
+ .fa.fa-paper-plane-o {
1324
+ font-family: 'Font Awesome 6 Free';
1325
+ font-weight: 400; }
1326
+
1327
+ .fa.fa-paper-plane-o:before {
1328
+ content: "\f1d8"; }
1329
+
1330
+ .fa.fa-send-o {
1331
+ font-family: 'Font Awesome 6 Free';
1332
+ font-weight: 400; }
1333
+
1334
+ .fa.fa-send-o:before {
1335
+ content: "\f1d8"; }
1336
+
1337
+ .fa.fa-circle-thin {
1338
+ font-family: 'Font Awesome 6 Free';
1339
+ font-weight: 400; }
1340
+
1341
+ .fa.fa-circle-thin:before {
1342
+ content: "\f111"; }
1343
+
1344
+ .fa.fa-header:before {
1345
+ content: "\f1dc"; }
1346
+
1347
+ .fa.fa-futbol-o {
1348
+ font-family: 'Font Awesome 6 Free';
1349
+ font-weight: 400; }
1350
+
1351
+ .fa.fa-futbol-o:before {
1352
+ content: "\f1e3"; }
1353
+
1354
+ .fa.fa-soccer-ball-o {
1355
+ font-family: 'Font Awesome 6 Free';
1356
+ font-weight: 400; }
1357
+
1358
+ .fa.fa-soccer-ball-o:before {
1359
+ content: "\f1e3"; }
1360
+
1361
+ .fa.fa-slideshare {
1362
+ font-family: 'Font Awesome 6 Brands';
1363
+ font-weight: 400; }
1364
+
1365
+ .fa.fa-twitch {
1366
+ font-family: 'Font Awesome 6 Brands';
1367
+ font-weight: 400; }
1368
+
1369
+ .fa.fa-yelp {
1370
+ font-family: 'Font Awesome 6 Brands';
1371
+ font-weight: 400; }
1372
+
1373
+ .fa.fa-newspaper-o {
1374
+ font-family: 'Font Awesome 6 Free';
1375
+ font-weight: 400; }
1376
+
1377
+ .fa.fa-newspaper-o:before {
1378
+ content: "\f1ea"; }
1379
+
1380
+ .fa.fa-paypal {
1381
+ font-family: 'Font Awesome 6 Brands';
1382
+ font-weight: 400; }
1383
+
1384
+ .fa.fa-google-wallet {
1385
+ font-family: 'Font Awesome 6 Brands';
1386
+ font-weight: 400; }
1387
+
1388
+ .fa.fa-cc-visa {
1389
+ font-family: 'Font Awesome 6 Brands';
1390
+ font-weight: 400; }
1391
+
1392
+ .fa.fa-cc-mastercard {
1393
+ font-family: 'Font Awesome 6 Brands';
1394
+ font-weight: 400; }
1395
+
1396
+ .fa.fa-cc-discover {
1397
+ font-family: 'Font Awesome 6 Brands';
1398
+ font-weight: 400; }
1399
+
1400
+ .fa.fa-cc-amex {
1401
+ font-family: 'Font Awesome 6 Brands';
1402
+ font-weight: 400; }
1403
+
1404
+ .fa.fa-cc-paypal {
1405
+ font-family: 'Font Awesome 6 Brands';
1406
+ font-weight: 400; }
1407
+
1408
+ .fa.fa-cc-stripe {
1409
+ font-family: 'Font Awesome 6 Brands';
1410
+ font-weight: 400; }
1411
+
1412
+ .fa.fa-bell-slash-o {
1413
+ font-family: 'Font Awesome 6 Free';
1414
+ font-weight: 400; }
1415
+
1416
+ .fa.fa-bell-slash-o:before {
1417
+ content: "\f1f6"; }
1418
+
1419
+ .fa.fa-trash:before {
1420
+ content: "\f2ed"; }
1421
+
1422
+ .fa.fa-copyright {
1423
+ font-family: 'Font Awesome 6 Free';
1424
+ font-weight: 400; }
1425
+
1426
+ .fa.fa-eyedropper:before {
1427
+ content: "\f1fb"; }
1428
+
1429
+ .fa.fa-area-chart:before {
1430
+ content: "\f1fe"; }
1431
+
1432
+ .fa.fa-pie-chart:before {
1433
+ content: "\f200"; }
1434
+
1435
+ .fa.fa-line-chart:before {
1436
+ content: "\f201"; }
1437
+
1438
+ .fa.fa-lastfm {
1439
+ font-family: 'Font Awesome 6 Brands';
1440
+ font-weight: 400; }
1441
+
1442
+ .fa.fa-lastfm-square {
1443
+ font-family: 'Font Awesome 6 Brands';
1444
+ font-weight: 400; }
1445
+
1446
+ .fa.fa-lastfm-square:before {
1447
+ content: "\f203"; }
1448
+
1449
+ .fa.fa-ioxhost {
1450
+ font-family: 'Font Awesome 6 Brands';
1451
+ font-weight: 400; }
1452
+
1453
+ .fa.fa-angellist {
1454
+ font-family: 'Font Awesome 6 Brands';
1455
+ font-weight: 400; }
1456
+
1457
+ .fa.fa-cc {
1458
+ font-family: 'Font Awesome 6 Free';
1459
+ font-weight: 400; }
1460
+
1461
+ .fa.fa-cc:before {
1462
+ content: "\f20a"; }
1463
+
1464
+ .fa.fa-ils:before {
1465
+ content: "\f20b"; }
1466
+
1467
+ .fa.fa-shekel:before {
1468
+ content: "\f20b"; }
1469
+
1470
+ .fa.fa-sheqel:before {
1471
+ content: "\f20b"; }
1472
+
1473
+ .fa.fa-buysellads {
1474
+ font-family: 'Font Awesome 6 Brands';
1475
+ font-weight: 400; }
1476
+
1477
+ .fa.fa-connectdevelop {
1478
+ font-family: 'Font Awesome 6 Brands';
1479
+ font-weight: 400; }
1480
+
1481
+ .fa.fa-dashcube {
1482
+ font-family: 'Font Awesome 6 Brands';
1483
+ font-weight: 400; }
1484
+
1485
+ .fa.fa-forumbee {
1486
+ font-family: 'Font Awesome 6 Brands';
1487
+ font-weight: 400; }
1488
+
1489
+ .fa.fa-leanpub {
1490
+ font-family: 'Font Awesome 6 Brands';
1491
+ font-weight: 400; }
1492
+
1493
+ .fa.fa-sellsy {
1494
+ font-family: 'Font Awesome 6 Brands';
1495
+ font-weight: 400; }
1496
+
1497
+ .fa.fa-shirtsinbulk {
1498
+ font-family: 'Font Awesome 6 Brands';
1499
+ font-weight: 400; }
1500
+
1501
+ .fa.fa-simplybuilt {
1502
+ font-family: 'Font Awesome 6 Brands';
1503
+ font-weight: 400; }
1504
+
1505
+ .fa.fa-skyatlas {
1506
+ font-family: 'Font Awesome 6 Brands';
1507
+ font-weight: 400; }
1508
+
1509
+ .fa.fa-diamond {
1510
+ font-family: 'Font Awesome 6 Free';
1511
+ font-weight: 400; }
1512
+
1513
+ .fa.fa-diamond:before {
1514
+ content: "\f3a5"; }
1515
+
1516
+ .fa.fa-transgender:before {
1517
+ content: "\f224"; }
1518
+
1519
+ .fa.fa-intersex:before {
1520
+ content: "\f224"; }
1521
+
1522
+ .fa.fa-transgender-alt:before {
1523
+ content: "\f225"; }
1524
+
1525
+ .fa.fa-facebook-official {
1526
+ font-family: 'Font Awesome 6 Brands';
1527
+ font-weight: 400; }
1528
+
1529
+ .fa.fa-facebook-official:before {
1530
+ content: "\f09a"; }
1531
+
1532
+ .fa.fa-pinterest-p {
1533
+ font-family: 'Font Awesome 6 Brands';
1534
+ font-weight: 400; }
1535
+
1536
+ .fa.fa-whatsapp {
1537
+ font-family: 'Font Awesome 6 Brands';
1538
+ font-weight: 400; }
1539
+
1540
+ .fa.fa-hotel:before {
1541
+ content: "\f236"; }
1542
+
1543
+ .fa.fa-viacoin {
1544
+ font-family: 'Font Awesome 6 Brands';
1545
+ font-weight: 400; }
1546
+
1547
+ .fa.fa-medium {
1548
+ font-family: 'Font Awesome 6 Brands';
1549
+ font-weight: 400; }
1550
+
1551
+ .fa.fa-y-combinator {
1552
+ font-family: 'Font Awesome 6 Brands';
1553
+ font-weight: 400; }
1554
+
1555
+ .fa.fa-yc {
1556
+ font-family: 'Font Awesome 6 Brands';
1557
+ font-weight: 400; }
1558
+
1559
+ .fa.fa-yc:before {
1560
+ content: "\f23b"; }
1561
+
1562
+ .fa.fa-optin-monster {
1563
+ font-family: 'Font Awesome 6 Brands';
1564
+ font-weight: 400; }
1565
+
1566
+ .fa.fa-opencart {
1567
+ font-family: 'Font Awesome 6 Brands';
1568
+ font-weight: 400; }
1569
+
1570
+ .fa.fa-expeditedssl {
1571
+ font-family: 'Font Awesome 6 Brands';
1572
+ font-weight: 400; }
1573
+
1574
+ .fa.fa-battery-4:before {
1575
+ content: "\f240"; }
1576
+
1577
+ .fa.fa-battery:before {
1578
+ content: "\f240"; }
1579
+
1580
+ .fa.fa-battery-3:before {
1581
+ content: "\f241"; }
1582
+
1583
+ .fa.fa-battery-2:before {
1584
+ content: "\f242"; }
1585
+
1586
+ .fa.fa-battery-1:before {
1587
+ content: "\f243"; }
1588
+
1589
+ .fa.fa-battery-0:before {
1590
+ content: "\f244"; }
1591
+
1592
+ .fa.fa-object-group {
1593
+ font-family: 'Font Awesome 6 Free';
1594
+ font-weight: 400; }
1595
+
1596
+ .fa.fa-object-ungroup {
1597
+ font-family: 'Font Awesome 6 Free';
1598
+ font-weight: 400; }
1599
+
1600
+ .fa.fa-sticky-note-o {
1601
+ font-family: 'Font Awesome 6 Free';
1602
+ font-weight: 400; }
1603
+
1604
+ .fa.fa-sticky-note-o:before {
1605
+ content: "\f249"; }
1606
+
1607
+ .fa.fa-cc-jcb {
1608
+ font-family: 'Font Awesome 6 Brands';
1609
+ font-weight: 400; }
1610
+
1611
+ .fa.fa-cc-diners-club {
1612
+ font-family: 'Font Awesome 6 Brands';
1613
+ font-weight: 400; }
1614
+
1615
+ .fa.fa-clone {
1616
+ font-family: 'Font Awesome 6 Free';
1617
+ font-weight: 400; }
1618
+
1619
+ .fa.fa-hourglass-o:before {
1620
+ content: "\f254"; }
1621
+
1622
+ .fa.fa-hourglass-1:before {
1623
+ content: "\f251"; }
1624
+
1625
+ .fa.fa-hourglass-2:before {
1626
+ content: "\f252"; }
1627
+
1628
+ .fa.fa-hourglass-3:before {
1629
+ content: "\f253"; }
1630
+
1631
+ .fa.fa-hand-rock-o {
1632
+ font-family: 'Font Awesome 6 Free';
1633
+ font-weight: 400; }
1634
+
1635
+ .fa.fa-hand-rock-o:before {
1636
+ content: "\f255"; }
1637
+
1638
+ .fa.fa-hand-grab-o {
1639
+ font-family: 'Font Awesome 6 Free';
1640
+ font-weight: 400; }
1641
+
1642
+ .fa.fa-hand-grab-o:before {
1643
+ content: "\f255"; }
1644
+
1645
+ .fa.fa-hand-paper-o {
1646
+ font-family: 'Font Awesome 6 Free';
1647
+ font-weight: 400; }
1648
+
1649
+ .fa.fa-hand-paper-o:before {
1650
+ content: "\f256"; }
1651
+
1652
+ .fa.fa-hand-stop-o {
1653
+ font-family: 'Font Awesome 6 Free';
1654
+ font-weight: 400; }
1655
+
1656
+ .fa.fa-hand-stop-o:before {
1657
+ content: "\f256"; }
1658
+
1659
+ .fa.fa-hand-scissors-o {
1660
+ font-family: 'Font Awesome 6 Free';
1661
+ font-weight: 400; }
1662
+
1663
+ .fa.fa-hand-scissors-o:before {
1664
+ content: "\f257"; }
1665
+
1666
+ .fa.fa-hand-lizard-o {
1667
+ font-family: 'Font Awesome 6 Free';
1668
+ font-weight: 400; }
1669
+
1670
+ .fa.fa-hand-lizard-o:before {
1671
+ content: "\f258"; }
1672
+
1673
+ .fa.fa-hand-spock-o {
1674
+ font-family: 'Font Awesome 6 Free';
1675
+ font-weight: 400; }
1676
+
1677
+ .fa.fa-hand-spock-o:before {
1678
+ content: "\f259"; }
1679
+
1680
+ .fa.fa-hand-pointer-o {
1681
+ font-family: 'Font Awesome 6 Free';
1682
+ font-weight: 400; }
1683
+
1684
+ .fa.fa-hand-pointer-o:before {
1685
+ content: "\f25a"; }
1686
+
1687
+ .fa.fa-hand-peace-o {
1688
+ font-family: 'Font Awesome 6 Free';
1689
+ font-weight: 400; }
1690
+
1691
+ .fa.fa-hand-peace-o:before {
1692
+ content: "\f25b"; }
1693
+
1694
+ .fa.fa-registered {
1695
+ font-family: 'Font Awesome 6 Free';
1696
+ font-weight: 400; }
1697
+
1698
+ .fa.fa-creative-commons {
1699
+ font-family: 'Font Awesome 6 Brands';
1700
+ font-weight: 400; }
1701
+
1702
+ .fa.fa-gg {
1703
+ font-family: 'Font Awesome 6 Brands';
1704
+ font-weight: 400; }
1705
+
1706
+ .fa.fa-gg-circle {
1707
+ font-family: 'Font Awesome 6 Brands';
1708
+ font-weight: 400; }
1709
+
1710
+ .fa.fa-odnoklassniki {
1711
+ font-family: 'Font Awesome 6 Brands';
1712
+ font-weight: 400; }
1713
+
1714
+ .fa.fa-odnoklassniki-square {
1715
+ font-family: 'Font Awesome 6 Brands';
1716
+ font-weight: 400; }
1717
+
1718
+ .fa.fa-odnoklassniki-square:before {
1719
+ content: "\f264"; }
1720
+
1721
+ .fa.fa-get-pocket {
1722
+ font-family: 'Font Awesome 6 Brands';
1723
+ font-weight: 400; }
1724
+
1725
+ .fa.fa-wikipedia-w {
1726
+ font-family: 'Font Awesome 6 Brands';
1727
+ font-weight: 400; }
1728
+
1729
+ .fa.fa-safari {
1730
+ font-family: 'Font Awesome 6 Brands';
1731
+ font-weight: 400; }
1732
+
1733
+ .fa.fa-chrome {
1734
+ font-family: 'Font Awesome 6 Brands';
1735
+ font-weight: 400; }
1736
+
1737
+ .fa.fa-firefox {
1738
+ font-family: 'Font Awesome 6 Brands';
1739
+ font-weight: 400; }
1740
+
1741
+ .fa.fa-opera {
1742
+ font-family: 'Font Awesome 6 Brands';
1743
+ font-weight: 400; }
1744
+
1745
+ .fa.fa-internet-explorer {
1746
+ font-family: 'Font Awesome 6 Brands';
1747
+ font-weight: 400; }
1748
+
1749
+ .fa.fa-television:before {
1750
+ content: "\f26c"; }
1751
+
1752
+ .fa.fa-contao {
1753
+ font-family: 'Font Awesome 6 Brands';
1754
+ font-weight: 400; }
1755
+
1756
+ .fa.fa-500px {
1757
+ font-family: 'Font Awesome 6 Brands';
1758
+ font-weight: 400; }
1759
+
1760
+ .fa.fa-amazon {
1761
+ font-family: 'Font Awesome 6 Brands';
1762
+ font-weight: 400; }
1763
+
1764
+ .fa.fa-calendar-plus-o {
1765
+ font-family: 'Font Awesome 6 Free';
1766
+ font-weight: 400; }
1767
+
1768
+ .fa.fa-calendar-plus-o:before {
1769
+ content: "\f271"; }
1770
+
1771
+ .fa.fa-calendar-minus-o {
1772
+ font-family: 'Font Awesome 6 Free';
1773
+ font-weight: 400; }
1774
+
1775
+ .fa.fa-calendar-minus-o:before {
1776
+ content: "\f272"; }
1777
+
1778
+ .fa.fa-calendar-times-o {
1779
+ font-family: 'Font Awesome 6 Free';
1780
+ font-weight: 400; }
1781
+
1782
+ .fa.fa-calendar-times-o:before {
1783
+ content: "\f273"; }
1784
+
1785
+ .fa.fa-calendar-check-o {
1786
+ font-family: 'Font Awesome 6 Free';
1787
+ font-weight: 400; }
1788
+
1789
+ .fa.fa-calendar-check-o:before {
1790
+ content: "\f274"; }
1791
+
1792
+ .fa.fa-map-o {
1793
+ font-family: 'Font Awesome 6 Free';
1794
+ font-weight: 400; }
1795
+
1796
+ .fa.fa-map-o:before {
1797
+ content: "\f279"; }
1798
+
1799
+ .fa.fa-commenting:before {
1800
+ content: "\f4ad"; }
1801
+
1802
+ .fa.fa-commenting-o {
1803
+ font-family: 'Font Awesome 6 Free';
1804
+ font-weight: 400; }
1805
+
1806
+ .fa.fa-commenting-o:before {
1807
+ content: "\f4ad"; }
1808
+
1809
+ .fa.fa-houzz {
1810
+ font-family: 'Font Awesome 6 Brands';
1811
+ font-weight: 400; }
1812
+
1813
+ .fa.fa-vimeo {
1814
+ font-family: 'Font Awesome 6 Brands';
1815
+ font-weight: 400; }
1816
+
1817
+ .fa.fa-vimeo:before {
1818
+ content: "\f27d"; }
1819
+
1820
+ .fa.fa-black-tie {
1821
+ font-family: 'Font Awesome 6 Brands';
1822
+ font-weight: 400; }
1823
+
1824
+ .fa.fa-fonticons {
1825
+ font-family: 'Font Awesome 6 Brands';
1826
+ font-weight: 400; }
1827
+
1828
+ .fa.fa-reddit-alien {
1829
+ font-family: 'Font Awesome 6 Brands';
1830
+ font-weight: 400; }
1831
+
1832
+ .fa.fa-edge {
1833
+ font-family: 'Font Awesome 6 Brands';
1834
+ font-weight: 400; }
1835
+
1836
+ .fa.fa-credit-card-alt:before {
1837
+ content: "\f09d"; }
1838
+
1839
+ .fa.fa-codiepie {
1840
+ font-family: 'Font Awesome 6 Brands';
1841
+ font-weight: 400; }
1842
+
1843
+ .fa.fa-modx {
1844
+ font-family: 'Font Awesome 6 Brands';
1845
+ font-weight: 400; }
1846
+
1847
+ .fa.fa-fort-awesome {
1848
+ font-family: 'Font Awesome 6 Brands';
1849
+ font-weight: 400; }
1850
+
1851
+ .fa.fa-usb {
1852
+ font-family: 'Font Awesome 6 Brands';
1853
+ font-weight: 400; }
1854
+
1855
+ .fa.fa-product-hunt {
1856
+ font-family: 'Font Awesome 6 Brands';
1857
+ font-weight: 400; }
1858
+
1859
+ .fa.fa-mixcloud {
1860
+ font-family: 'Font Awesome 6 Brands';
1861
+ font-weight: 400; }
1862
+
1863
+ .fa.fa-scribd {
1864
+ font-family: 'Font Awesome 6 Brands';
1865
+ font-weight: 400; }
1866
+
1867
+ .fa.fa-pause-circle-o {
1868
+ font-family: 'Font Awesome 6 Free';
1869
+ font-weight: 400; }
1870
+
1871
+ .fa.fa-pause-circle-o:before {
1872
+ content: "\f28b"; }
1873
+
1874
+ .fa.fa-stop-circle-o {
1875
+ font-family: 'Font Awesome 6 Free';
1876
+ font-weight: 400; }
1877
+
1878
+ .fa.fa-stop-circle-o:before {
1879
+ content: "\f28d"; }
1880
+
1881
+ .fa.fa-bluetooth {
1882
+ font-family: 'Font Awesome 6 Brands';
1883
+ font-weight: 400; }
1884
+
1885
+ .fa.fa-bluetooth-b {
1886
+ font-family: 'Font Awesome 6 Brands';
1887
+ font-weight: 400; }
1888
+
1889
+ .fa.fa-gitlab {
1890
+ font-family: 'Font Awesome 6 Brands';
1891
+ font-weight: 400; }
1892
+
1893
+ .fa.fa-wpbeginner {
1894
+ font-family: 'Font Awesome 6 Brands';
1895
+ font-weight: 400; }
1896
+
1897
+ .fa.fa-wpforms {
1898
+ font-family: 'Font Awesome 6 Brands';
1899
+ font-weight: 400; }
1900
+
1901
+ .fa.fa-envira {
1902
+ font-family: 'Font Awesome 6 Brands';
1903
+ font-weight: 400; }
1904
+
1905
+ .fa.fa-wheelchair-alt {
1906
+ font-family: 'Font Awesome 6 Brands';
1907
+ font-weight: 400; }
1908
+
1909
+ .fa.fa-wheelchair-alt:before {
1910
+ content: "\f368"; }
1911
+
1912
+ .fa.fa-question-circle-o {
1913
+ font-family: 'Font Awesome 6 Free';
1914
+ font-weight: 400; }
1915
+
1916
+ .fa.fa-question-circle-o:before {
1917
+ content: "\f059"; }
1918
+
1919
+ .fa.fa-volume-control-phone:before {
1920
+ content: "\f2a0"; }
1921
+
1922
+ .fa.fa-asl-interpreting:before {
1923
+ content: "\f2a3"; }
1924
+
1925
+ .fa.fa-deafness:before {
1926
+ content: "\f2a4"; }
1927
+
1928
+ .fa.fa-hard-of-hearing:before {
1929
+ content: "\f2a4"; }
1930
+
1931
+ .fa.fa-glide {
1932
+ font-family: 'Font Awesome 6 Brands';
1933
+ font-weight: 400; }
1934
+
1935
+ .fa.fa-glide-g {
1936
+ font-family: 'Font Awesome 6 Brands';
1937
+ font-weight: 400; }
1938
+
1939
+ .fa.fa-signing:before {
1940
+ content: "\f2a7"; }
1941
+
1942
+ .fa.fa-viadeo {
1943
+ font-family: 'Font Awesome 6 Brands';
1944
+ font-weight: 400; }
1945
+
1946
+ .fa.fa-viadeo-square {
1947
+ font-family: 'Font Awesome 6 Brands';
1948
+ font-weight: 400; }
1949
+
1950
+ .fa.fa-viadeo-square:before {
1951
+ content: "\f2aa"; }
1952
+
1953
+ .fa.fa-snapchat {
1954
+ font-family: 'Font Awesome 6 Brands';
1955
+ font-weight: 400; }
1956
+
1957
+ .fa.fa-snapchat-ghost {
1958
+ font-family: 'Font Awesome 6 Brands';
1959
+ font-weight: 400; }
1960
+
1961
+ .fa.fa-snapchat-ghost:before {
1962
+ content: "\f2ab"; }
1963
+
1964
+ .fa.fa-snapchat-square {
1965
+ font-family: 'Font Awesome 6 Brands';
1966
+ font-weight: 400; }
1967
+
1968
+ .fa.fa-snapchat-square:before {
1969
+ content: "\f2ad"; }
1970
+
1971
+ .fa.fa-pied-piper {
1972
+ font-family: 'Font Awesome 6 Brands';
1973
+ font-weight: 400; }
1974
+
1975
+ .fa.fa-first-order {
1976
+ font-family: 'Font Awesome 6 Brands';
1977
+ font-weight: 400; }
1978
+
1979
+ .fa.fa-yoast {
1980
+ font-family: 'Font Awesome 6 Brands';
1981
+ font-weight: 400; }
1982
+
1983
+ .fa.fa-themeisle {
1984
+ font-family: 'Font Awesome 6 Brands';
1985
+ font-weight: 400; }
1986
+
1987
+ .fa.fa-google-plus-official {
1988
+ font-family: 'Font Awesome 6 Brands';
1989
+ font-weight: 400; }
1990
+
1991
+ .fa.fa-google-plus-official:before {
1992
+ content: "\f2b3"; }
1993
+
1994
+ .fa.fa-google-plus-circle {
1995
+ font-family: 'Font Awesome 6 Brands';
1996
+ font-weight: 400; }
1997
+
1998
+ .fa.fa-google-plus-circle:before {
1999
+ content: "\f2b3"; }
2000
+
2001
+ .fa.fa-font-awesome {
2002
+ font-family: 'Font Awesome 6 Brands';
2003
+ font-weight: 400; }
2004
+
2005
+ .fa.fa-fa {
2006
+ font-family: 'Font Awesome 6 Brands';
2007
+ font-weight: 400; }
2008
+
2009
+ .fa.fa-fa:before {
2010
+ content: "\f2b4"; }
2011
+
2012
+ .fa.fa-handshake-o {
2013
+ font-family: 'Font Awesome 6 Free';
2014
+ font-weight: 400; }
2015
+
2016
+ .fa.fa-handshake-o:before {
2017
+ content: "\f2b5"; }
2018
+
2019
+ .fa.fa-envelope-open-o {
2020
+ font-family: 'Font Awesome 6 Free';
2021
+ font-weight: 400; }
2022
+
2023
+ .fa.fa-envelope-open-o:before {
2024
+ content: "\f2b6"; }
2025
+
2026
+ .fa.fa-linode {
2027
+ font-family: 'Font Awesome 6 Brands';
2028
+ font-weight: 400; }
2029
+
2030
+ .fa.fa-address-book-o {
2031
+ font-family: 'Font Awesome 6 Free';
2032
+ font-weight: 400; }
2033
+
2034
+ .fa.fa-address-book-o:before {
2035
+ content: "\f2b9"; }
2036
+
2037
+ .fa.fa-vcard:before {
2038
+ content: "\f2bb"; }
2039
+
2040
+ .fa.fa-address-card-o {
2041
+ font-family: 'Font Awesome 6 Free';
2042
+ font-weight: 400; }
2043
+
2044
+ .fa.fa-address-card-o:before {
2045
+ content: "\f2bb"; }
2046
+
2047
+ .fa.fa-vcard-o {
2048
+ font-family: 'Font Awesome 6 Free';
2049
+ font-weight: 400; }
2050
+
2051
+ .fa.fa-vcard-o:before {
2052
+ content: "\f2bb"; }
2053
+
2054
+ .fa.fa-user-circle-o {
2055
+ font-family: 'Font Awesome 6 Free';
2056
+ font-weight: 400; }
2057
+
2058
+ .fa.fa-user-circle-o:before {
2059
+ content: "\f2bd"; }
2060
+
2061
+ .fa.fa-user-o {
2062
+ font-family: 'Font Awesome 6 Free';
2063
+ font-weight: 400; }
2064
+
2065
+ .fa.fa-user-o:before {
2066
+ content: "\f007"; }
2067
+
2068
+ .fa.fa-id-badge {
2069
+ font-family: 'Font Awesome 6 Free';
2070
+ font-weight: 400; }
2071
+
2072
+ .fa.fa-drivers-license:before {
2073
+ content: "\f2c2"; }
2074
+
2075
+ .fa.fa-id-card-o {
2076
+ font-family: 'Font Awesome 6 Free';
2077
+ font-weight: 400; }
2078
+
2079
+ .fa.fa-id-card-o:before {
2080
+ content: "\f2c2"; }
2081
+
2082
+ .fa.fa-drivers-license-o {
2083
+ font-family: 'Font Awesome 6 Free';
2084
+ font-weight: 400; }
2085
+
2086
+ .fa.fa-drivers-license-o:before {
2087
+ content: "\f2c2"; }
2088
+
2089
+ .fa.fa-quora {
2090
+ font-family: 'Font Awesome 6 Brands';
2091
+ font-weight: 400; }
2092
+
2093
+ .fa.fa-free-code-camp {
2094
+ font-family: 'Font Awesome 6 Brands';
2095
+ font-weight: 400; }
2096
+
2097
+ .fa.fa-telegram {
2098
+ font-family: 'Font Awesome 6 Brands';
2099
+ font-weight: 400; }
2100
+
2101
+ .fa.fa-thermometer-4:before {
2102
+ content: "\f2c7"; }
2103
+
2104
+ .fa.fa-thermometer:before {
2105
+ content: "\f2c7"; }
2106
+
2107
+ .fa.fa-thermometer-3:before {
2108
+ content: "\f2c8"; }
2109
+
2110
+ .fa.fa-thermometer-2:before {
2111
+ content: "\f2c9"; }
2112
+
2113
+ .fa.fa-thermometer-1:before {
2114
+ content: "\f2ca"; }
2115
+
2116
+ .fa.fa-thermometer-0:before {
2117
+ content: "\f2cb"; }
2118
+
2119
+ .fa.fa-bathtub:before {
2120
+ content: "\f2cd"; }
2121
+
2122
+ .fa.fa-s15:before {
2123
+ content: "\f2cd"; }
2124
+
2125
+ .fa.fa-window-maximize {
2126
+ font-family: 'Font Awesome 6 Free';
2127
+ font-weight: 400; }
2128
+
2129
+ .fa.fa-window-restore {
2130
+ font-family: 'Font Awesome 6 Free';
2131
+ font-weight: 400; }
2132
+
2133
+ .fa.fa-times-rectangle:before {
2134
+ content: "\f410"; }
2135
+
2136
+ .fa.fa-window-close-o {
2137
+ font-family: 'Font Awesome 6 Free';
2138
+ font-weight: 400; }
2139
+
2140
+ .fa.fa-window-close-o:before {
2141
+ content: "\f410"; }
2142
+
2143
+ .fa.fa-times-rectangle-o {
2144
+ font-family: 'Font Awesome 6 Free';
2145
+ font-weight: 400; }
2146
+
2147
+ .fa.fa-times-rectangle-o:before {
2148
+ content: "\f410"; }
2149
+
2150
+ .fa.fa-bandcamp {
2151
+ font-family: 'Font Awesome 6 Brands';
2152
+ font-weight: 400; }
2153
+
2154
+ .fa.fa-grav {
2155
+ font-family: 'Font Awesome 6 Brands';
2156
+ font-weight: 400; }
2157
+
2158
+ .fa.fa-etsy {
2159
+ font-family: 'Font Awesome 6 Brands';
2160
+ font-weight: 400; }
2161
+
2162
+ .fa.fa-imdb {
2163
+ font-family: 'Font Awesome 6 Brands';
2164
+ font-weight: 400; }
2165
+
2166
+ .fa.fa-ravelry {
2167
+ font-family: 'Font Awesome 6 Brands';
2168
+ font-weight: 400; }
2169
+
2170
+ .fa.fa-eercast {
2171
+ font-family: 'Font Awesome 6 Brands';
2172
+ font-weight: 400; }
2173
+
2174
+ .fa.fa-eercast:before {
2175
+ content: "\f2da"; }
2176
+
2177
+ .fa.fa-snowflake-o {
2178
+ font-family: 'Font Awesome 6 Free';
2179
+ font-weight: 400; }
2180
+
2181
+ .fa.fa-snowflake-o:before {
2182
+ content: "\f2dc"; }
2183
+
2184
+ .fa.fa-superpowers {
2185
+ font-family: 'Font Awesome 6 Brands';
2186
+ font-weight: 400; }
2187
+
2188
+ .fa.fa-wpexplorer {
2189
+ font-family: 'Font Awesome 6 Brands';
2190
+ font-weight: 400; }
2191
+
2192
+ .fa.fa-meetup {
2193
+ font-family: 'Font Awesome 6 Brands';
2194
+ font-weight: 400; }
static/assets/FontAwesome/css/v4-shims.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ .fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400}
static/assets/FontAwesome/css/v5-font-face.css ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ @font-face {
7
+ font-family: 'Font Awesome 5 Brands';
8
+ font-display: block;
9
+ font-weight: 400;
10
+ src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
11
+
12
+ @font-face {
13
+ font-family: 'Font Awesome 5 Free';
14
+ font-display: block;
15
+ font-weight: 900;
16
+ src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
17
+
18
+ @font-face {
19
+ font-family: 'Font Awesome 5 Free';
20
+ font-display: block;
21
+ font-weight: 400;
22
+ src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
static/assets/FontAwesome/css/v5-font-face.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ @font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}
static/assets/FontAwesome/js/all.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/all.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/brands.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/brands.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/conflict-detection.js ADDED
@@ -0,0 +1,1138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (factory());
10
+ }(this, (function () { 'use strict';
11
+
12
+ function ownKeys(object, enumerableOnly) {
13
+ var keys = Object.keys(object);
14
+
15
+ if (Object.getOwnPropertySymbols) {
16
+ var symbols = Object.getOwnPropertySymbols(object);
17
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
18
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
19
+ })), keys.push.apply(keys, symbols);
20
+ }
21
+
22
+ return keys;
23
+ }
24
+
25
+ function _objectSpread2(target) {
26
+ for (var i = 1; i < arguments.length; i++) {
27
+ var source = null != arguments[i] ? arguments[i] : {};
28
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
29
+ _defineProperty(target, key, source[key]);
30
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
31
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
32
+ });
33
+ }
34
+
35
+ return target;
36
+ }
37
+
38
+ function _typeof(obj) {
39
+ "@babel/helpers - typeof";
40
+
41
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
42
+ return typeof obj;
43
+ } : function (obj) {
44
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
45
+ }, _typeof(obj);
46
+ }
47
+
48
+ function _defineProperty(obj, key, value) {
49
+ if (key in obj) {
50
+ Object.defineProperty(obj, key, {
51
+ value: value,
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true
55
+ });
56
+ } else {
57
+ obj[key] = value;
58
+ }
59
+
60
+ return obj;
61
+ }
62
+
63
+ function _toConsumableArray(arr) {
64
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
65
+ }
66
+
67
+ function _arrayWithoutHoles(arr) {
68
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
69
+ }
70
+
71
+ function _iterableToArray(iter) {
72
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
73
+ }
74
+
75
+ function _unsupportedIterableToArray(o, minLen) {
76
+ if (!o) return;
77
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
78
+ var n = Object.prototype.toString.call(o).slice(8, -1);
79
+ if (n === "Object" && o.constructor) n = o.constructor.name;
80
+ if (n === "Map" || n === "Set") return Array.from(o);
81
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
82
+ }
83
+
84
+ function _arrayLikeToArray(arr, len) {
85
+ if (len == null || len > arr.length) len = arr.length;
86
+
87
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
88
+
89
+ return arr2;
90
+ }
91
+
92
+ function _nonIterableSpread() {
93
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
94
+ }
95
+
96
+ var _WINDOW = {};
97
+ var _DOCUMENT = {};
98
+
99
+ try {
100
+ if (typeof window !== 'undefined') _WINDOW = window;
101
+ if (typeof document !== 'undefined') _DOCUMENT = document;
102
+ } catch (e) {}
103
+
104
+ var _ref = _WINDOW.navigator || {},
105
+ _ref$userAgent = _ref.userAgent,
106
+ userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
107
+ var WINDOW = _WINDOW;
108
+ var DOCUMENT = _DOCUMENT;
109
+ var IS_BROWSER = !!WINDOW.document;
110
+ var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
111
+ var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
112
+
113
+ var functions = [];
114
+
115
+ var listener = function listener() {
116
+ DOCUMENT.removeEventListener('DOMContentLoaded', listener);
117
+ loaded = 1;
118
+ functions.map(function (fn) {
119
+ return fn();
120
+ });
121
+ };
122
+
123
+ var loaded = false;
124
+
125
+ if (IS_DOM) {
126
+ loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
127
+ if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);
128
+ }
129
+
130
+ function domready (fn) {
131
+ if (!IS_DOM) return;
132
+ loaded ? setTimeout(fn, 0) : functions.push(fn);
133
+ }
134
+
135
+ function report (_ref) {
136
+ var nodesTested = _ref.nodesTested,
137
+ nodesFound = _ref.nodesFound;
138
+ var timedOutTests = {};
139
+
140
+ for (var key in nodesFound) {
141
+ if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {
142
+ timedOutTests[key] = nodesFound[key];
143
+ }
144
+ }
145
+
146
+ var conflictsCount = Object.keys(nodesTested.conflict).length;
147
+
148
+ if (conflictsCount > 0) {
149
+ console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large');
150
+ var data = {};
151
+
152
+ for (var _key in nodesTested.conflict) {
153
+ var item = nodesTested.conflict[_key];
154
+ data[_key] = {
155
+ 'tagName': item.tagName,
156
+ 'src/href': item.src || item.href || 'n/a',
157
+ 'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
158
+ };
159
+ }
160
+
161
+ console.table(data);
162
+ }
163
+
164
+ var noConflictsCount = Object.keys(nodesTested.noConflict).length;
165
+
166
+ if (noConflictsCount > 0) {
167
+ console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount === 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
168
+ var _data = {};
169
+
170
+ for (var _key2 in nodesTested.noConflict) {
171
+ var _item = nodesTested.noConflict[_key2];
172
+ _data[_key2] = {
173
+ 'tagName': _item.tagName,
174
+ 'src/href': _item.src || _item.href || 'n/a',
175
+ 'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)'
176
+ };
177
+ }
178
+
179
+ console.table(_data);
180
+ }
181
+
182
+ var timeOutCount = Object.keys(timedOutTests).length;
183
+
184
+ if (timeOutCount > 0) {
185
+ console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount === 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
186
+ var _data2 = {};
187
+
188
+ for (var _key3 in timedOutTests) {
189
+ var _item2 = timedOutTests[_key3];
190
+ _data2[_key3] = {
191
+ 'tagName': _item2.tagName,
192
+ 'src/href': _item2.src || _item2.href || 'n/a',
193
+ 'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)'
194
+ };
195
+ }
196
+
197
+ console.table(_data2);
198
+ }
199
+ }
200
+
201
+ var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
202
+
203
+ function createCommonjsModule(fn, module) {
204
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
205
+ }
206
+
207
+ var md5 = createCommonjsModule(function (module) {
208
+
209
+ (function ($) {
210
+ /**
211
+ * Add integers, wrapping at 2^32.
212
+ * This uses 16-bit operations internally to work around bugs in interpreters.
213
+ *
214
+ * @param {number} x First integer
215
+ * @param {number} y Second integer
216
+ * @returns {number} Sum
217
+ */
218
+
219
+ function safeAdd(x, y) {
220
+ var lsw = (x & 0xffff) + (y & 0xffff);
221
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
222
+ return msw << 16 | lsw & 0xffff;
223
+ }
224
+ /**
225
+ * Bitwise rotate a 32-bit number to the left.
226
+ *
227
+ * @param {number} num 32-bit number
228
+ * @param {number} cnt Rotation count
229
+ * @returns {number} Rotated number
230
+ */
231
+
232
+
233
+ function bitRotateLeft(num, cnt) {
234
+ return num << cnt | num >>> 32 - cnt;
235
+ }
236
+ /**
237
+ * Basic operation the algorithm uses.
238
+ *
239
+ * @param {number} q q
240
+ * @param {number} a a
241
+ * @param {number} b b
242
+ * @param {number} x x
243
+ * @param {number} s s
244
+ * @param {number} t t
245
+ * @returns {number} Result
246
+ */
247
+
248
+
249
+ function md5cmn(q, a, b, x, s, t) {
250
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
251
+ }
252
+ /**
253
+ * Basic operation the algorithm uses.
254
+ *
255
+ * @param {number} a a
256
+ * @param {number} b b
257
+ * @param {number} c c
258
+ * @param {number} d d
259
+ * @param {number} x x
260
+ * @param {number} s s
261
+ * @param {number} t t
262
+ * @returns {number} Result
263
+ */
264
+
265
+
266
+ function md5ff(a, b, c, d, x, s, t) {
267
+ return md5cmn(b & c | ~b & d, a, b, x, s, t);
268
+ }
269
+ /**
270
+ * Basic operation the algorithm uses.
271
+ *
272
+ * @param {number} a a
273
+ * @param {number} b b
274
+ * @param {number} c c
275
+ * @param {number} d d
276
+ * @param {number} x x
277
+ * @param {number} s s
278
+ * @param {number} t t
279
+ * @returns {number} Result
280
+ */
281
+
282
+
283
+ function md5gg(a, b, c, d, x, s, t) {
284
+ return md5cmn(b & d | c & ~d, a, b, x, s, t);
285
+ }
286
+ /**
287
+ * Basic operation the algorithm uses.
288
+ *
289
+ * @param {number} a a
290
+ * @param {number} b b
291
+ * @param {number} c c
292
+ * @param {number} d d
293
+ * @param {number} x x
294
+ * @param {number} s s
295
+ * @param {number} t t
296
+ * @returns {number} Result
297
+ */
298
+
299
+
300
+ function md5hh(a, b, c, d, x, s, t) {
301
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
302
+ }
303
+ /**
304
+ * Basic operation the algorithm uses.
305
+ *
306
+ * @param {number} a a
307
+ * @param {number} b b
308
+ * @param {number} c c
309
+ * @param {number} d d
310
+ * @param {number} x x
311
+ * @param {number} s s
312
+ * @param {number} t t
313
+ * @returns {number} Result
314
+ */
315
+
316
+
317
+ function md5ii(a, b, c, d, x, s, t) {
318
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
319
+ }
320
+ /**
321
+ * Calculate the MD5 of an array of little-endian words, and a bit length.
322
+ *
323
+ * @param {Array} x Array of little-endian words
324
+ * @param {number} len Bit length
325
+ * @returns {Array<number>} MD5 Array
326
+ */
327
+
328
+
329
+ function binlMD5(x, len) {
330
+ /* append padding */
331
+ x[len >> 5] |= 0x80 << len % 32;
332
+ x[(len + 64 >>> 9 << 4) + 14] = len;
333
+ var i;
334
+ var olda;
335
+ var oldb;
336
+ var oldc;
337
+ var oldd;
338
+ var a = 1732584193;
339
+ var b = -271733879;
340
+ var c = -1732584194;
341
+ var d = 271733878;
342
+
343
+ for (i = 0; i < x.length; i += 16) {
344
+ olda = a;
345
+ oldb = b;
346
+ oldc = c;
347
+ oldd = d;
348
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
349
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
350
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
351
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
352
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
353
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
354
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
355
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
356
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
357
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
358
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
359
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
360
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
361
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
362
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
363
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
364
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
365
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
366
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
367
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
368
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
369
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
370
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
371
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
372
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
373
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
374
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
375
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
376
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
377
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
378
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
379
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
380
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
381
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
382
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
383
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
384
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
385
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
386
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
387
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
388
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
389
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
390
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
391
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
392
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
393
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
394
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
395
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
396
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
397
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
398
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
399
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
400
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
401
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
402
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
403
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
404
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
405
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
406
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
407
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
408
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
409
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
410
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
411
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
412
+ a = safeAdd(a, olda);
413
+ b = safeAdd(b, oldb);
414
+ c = safeAdd(c, oldc);
415
+ d = safeAdd(d, oldd);
416
+ }
417
+
418
+ return [a, b, c, d];
419
+ }
420
+ /**
421
+ * Convert an array of little-endian words to a string
422
+ *
423
+ * @param {Array<number>} input MD5 Array
424
+ * @returns {string} MD5 string
425
+ */
426
+
427
+
428
+ function binl2rstr(input) {
429
+ var i;
430
+ var output = '';
431
+ var length32 = input.length * 32;
432
+
433
+ for (i = 0; i < length32; i += 8) {
434
+ output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);
435
+ }
436
+
437
+ return output;
438
+ }
439
+ /**
440
+ * Convert a raw string to an array of little-endian words
441
+ * Characters >255 have their high-byte silently ignored.
442
+ *
443
+ * @param {string} input Raw input string
444
+ * @returns {Array<number>} Array of little-endian words
445
+ */
446
+
447
+
448
+ function rstr2binl(input) {
449
+ var i;
450
+ var output = [];
451
+ output[(input.length >> 2) - 1] = undefined;
452
+
453
+ for (i = 0; i < output.length; i += 1) {
454
+ output[i] = 0;
455
+ }
456
+
457
+ var length8 = input.length * 8;
458
+
459
+ for (i = 0; i < length8; i += 8) {
460
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
461
+ }
462
+
463
+ return output;
464
+ }
465
+ /**
466
+ * Calculate the MD5 of a raw string
467
+ *
468
+ * @param {string} s Input string
469
+ * @returns {string} Raw MD5 string
470
+ */
471
+
472
+
473
+ function rstrMD5(s) {
474
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
475
+ }
476
+ /**
477
+ * Calculates the HMAC-MD5 of a key and some data (raw strings)
478
+ *
479
+ * @param {string} key HMAC key
480
+ * @param {string} data Raw input string
481
+ * @returns {string} Raw MD5 string
482
+ */
483
+
484
+
485
+ function rstrHMACMD5(key, data) {
486
+ var i;
487
+ var bkey = rstr2binl(key);
488
+ var ipad = [];
489
+ var opad = [];
490
+ var hash;
491
+ ipad[15] = opad[15] = undefined;
492
+
493
+ if (bkey.length > 16) {
494
+ bkey = binlMD5(bkey, key.length * 8);
495
+ }
496
+
497
+ for (i = 0; i < 16; i += 1) {
498
+ ipad[i] = bkey[i] ^ 0x36363636;
499
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
500
+ }
501
+
502
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
503
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
504
+ }
505
+ /**
506
+ * Convert a raw string to a hex string
507
+ *
508
+ * @param {string} input Raw input string
509
+ * @returns {string} Hex encoded string
510
+ */
511
+
512
+
513
+ function rstr2hex(input) {
514
+ var hexTab = '0123456789abcdef';
515
+ var output = '';
516
+ var x;
517
+ var i;
518
+
519
+ for (i = 0; i < input.length; i += 1) {
520
+ x = input.charCodeAt(i);
521
+ output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);
522
+ }
523
+
524
+ return output;
525
+ }
526
+ /**
527
+ * Encode a string as UTF-8
528
+ *
529
+ * @param {string} input Input string
530
+ * @returns {string} UTF8 string
531
+ */
532
+
533
+
534
+ function str2rstrUTF8(input) {
535
+ return unescape(encodeURIComponent(input));
536
+ }
537
+ /**
538
+ * Encodes input string as raw MD5 string
539
+ *
540
+ * @param {string} s Input string
541
+ * @returns {string} Raw MD5 string
542
+ */
543
+
544
+
545
+ function rawMD5(s) {
546
+ return rstrMD5(str2rstrUTF8(s));
547
+ }
548
+ /**
549
+ * Encodes input string as Hex encoded string
550
+ *
551
+ * @param {string} s Input string
552
+ * @returns {string} Hex encoded string
553
+ */
554
+
555
+
556
+ function hexMD5(s) {
557
+ return rstr2hex(rawMD5(s));
558
+ }
559
+ /**
560
+ * Calculates the raw HMAC-MD5 for the given key and data
561
+ *
562
+ * @param {string} k HMAC key
563
+ * @param {string} d Input string
564
+ * @returns {string} Raw MD5 string
565
+ */
566
+
567
+
568
+ function rawHMACMD5(k, d) {
569
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
570
+ }
571
+ /**
572
+ * Calculates the Hex encoded HMAC-MD5 for the given key and data
573
+ *
574
+ * @param {string} k HMAC key
575
+ * @param {string} d Input string
576
+ * @returns {string} Raw MD5 string
577
+ */
578
+
579
+
580
+ function hexHMACMD5(k, d) {
581
+ return rstr2hex(rawHMACMD5(k, d));
582
+ }
583
+ /**
584
+ * Calculates MD5 value for a given string.
585
+ * If a key is provided, calculates the HMAC-MD5 value.
586
+ * Returns a Hex encoded string unless the raw argument is given.
587
+ *
588
+ * @param {string} string Input string
589
+ * @param {string} [key] HMAC key
590
+ * @param {boolean} [raw] Raw output switch
591
+ * @returns {string} MD5 output
592
+ */
593
+
594
+
595
+ function md5(string, key, raw) {
596
+ if (!key) {
597
+ if (!raw) {
598
+ return hexMD5(string);
599
+ }
600
+
601
+ return rawMD5(string);
602
+ }
603
+
604
+ if (!raw) {
605
+ return hexHMACMD5(key, string);
606
+ }
607
+
608
+ return rawHMACMD5(key, string);
609
+ }
610
+
611
+ if (module.exports) {
612
+ module.exports = md5;
613
+ } else {
614
+ $.md5 = md5;
615
+ }
616
+ })(commonjsGlobal);
617
+ });
618
+
619
+ function md5ForNode(node) {
620
+ if (null === node || 'object' !== _typeof(node)) return undefined;
621
+
622
+ if (node.src) {
623
+ return md5(node.src);
624
+ } else if (node.href) {
625
+ return md5(node.href);
626
+ } else if (node.innerText && '' !== node.innerText) {
627
+ // eslint-disable-line yoda
628
+ return md5(node.innerText);
629
+ } else {
630
+ return undefined;
631
+ }
632
+ }
633
+
634
+ var diagScriptId = 'fa-kits-diag';
635
+ var nodeUnderTestId = 'fa-kits-node-under-test';
636
+ var md5Attr = 'data-md5';
637
+ var detectionIgnoreAttr = 'data-fa-detection-ignore';
638
+ var timeoutAttr = 'data-fa-detection-timeout';
639
+ var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';
640
+
641
+ var silenceErrors = function silenceErrors(e) {
642
+ e.preventDefault();
643
+ e.stopPropagation();
644
+ };
645
+
646
+ function pollUntil(_ref) {
647
+ var _ref$fn = _ref.fn,
648
+ fn = _ref$fn === void 0 ? function () {
649
+ return true;
650
+ } : _ref$fn,
651
+ _ref$initialDuration = _ref.initialDuration,
652
+ initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration,
653
+ _ref$maxDuration = _ref.maxDuration,
654
+ maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,
655
+ _ref$showProgress = _ref.showProgress,
656
+ showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,
657
+ progressIndicator = _ref.progressIndicator;
658
+ return new Promise(function (resolve, reject) {
659
+ // eslint-disable-line compat/compat
660
+ function poll(duration, cumulativeDuration) {
661
+ setTimeout(function () {
662
+ var result = fn();
663
+
664
+ if (showProgress) {
665
+ console.info(progressIndicator);
666
+ }
667
+
668
+ if (!!result) {
669
+ // eslint-disable-line no-extra-boolean-cast
670
+ resolve(result);
671
+ } else {
672
+ var nextDuration = 250;
673
+ var nextCumulativeDuration = nextDuration + cumulativeDuration;
674
+
675
+ if (nextCumulativeDuration <= maxDuration) {
676
+ poll(nextDuration, nextCumulativeDuration);
677
+ } else {
678
+ reject('timeout'); // eslint-disable-line prefer-promise-reject-errors
679
+ }
680
+ }
681
+ }, duration);
682
+ }
683
+
684
+ poll(initialDuration, 0);
685
+ });
686
+ }
687
+
688
+ function detectWebfontConflicts() {
689
+ var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) {
690
+ return !t.hasAttribute(detectionIgnoreAttr);
691
+ });
692
+ var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {
693
+ if (t.hasAttribute(detectionIgnoreAttr)) {
694
+ return false;
695
+ } // If the browser has loaded the FA5 CSS, let's not test that <style> element.
696
+ // Its enough that we'll be testing for traces of the corresponding JS being loaded, and testing
697
+ // this <style> would only produce a false negative anyway.
698
+
699
+
700
+ if (WINDOW.FontAwesomeConfig && t.innerText.match(new RegExp("svg:not\\(:root\\)\\.".concat(WINDOW.FontAwesomeConfig.replacementClass)))) {
701
+ return false;
702
+ }
703
+
704
+ return true;
705
+ });
706
+
707
+ function runDiag(scriptOrLinkTag, md5) {
708
+ var diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
709
+ // Firefox will not return the expected results for getComputedStyle if our iframe has display: none.
710
+
711
+ diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;');
712
+ var testIconId = 'fa-test-icon-' + md5;
713
+ var iTag = DOCUMENT.createElement('i');
714
+ iTag.setAttribute('class', 'fa fa-coffee');
715
+ iTag.setAttribute('id', testIconId);
716
+ var diagScript = DOCUMENT.createElement('script');
717
+ diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script
718
+ // element that we'll be putting into a diagnostic iframe.
719
+ // That means that this code won't compile until after the outer script has run and injected
720
+ // this code into the iframe. There are some compile time errors that might occur there.
721
+ // For example, using single line (double-slash) comments like this one inside that function
722
+ // will probably cause it to choke. Chrome will show an error like this:
723
+ // Uncaught SyntaxError: Unexpected end of input
724
+
725
+ var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) {
726
+ parent.FontAwesomeDetection.__pollUntil({
727
+ fn: function fn() {
728
+ var iEl = document.getElementById(testIconId);
729
+ var computedStyle = window.getComputedStyle(iEl);
730
+ var fontFamily = computedStyle.getPropertyValue('font-family');
731
+
732
+ if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome [56]/)) {
733
+ return true;
734
+ } else {
735
+ return false;
736
+ }
737
+ }
738
+ }).then(function () {
739
+ var node = document.getElementById(nodeUnderTestId);
740
+ parent.postMessage({
741
+ type: 'fontawesome-conflict',
742
+ technology: 'webfont',
743
+ href: node.href,
744
+ innerText: node.innerText,
745
+ tagName: node.tagName,
746
+ md5: md5
747
+ }, parentOrigin);
748
+ }).catch(function (e) {
749
+ var node = document.getElementById(nodeUnderTestId);
750
+
751
+ if (e === 'timeout') {
752
+ parent.postMessage({
753
+ type: 'no-conflict',
754
+ technology: 'webfont',
755
+ href: node.src,
756
+ innerText: node.innerText,
757
+ tagName: node.tagName,
758
+ md5: md5
759
+ }, parentOrigin);
760
+ } else {
761
+ console.error(e);
762
+ }
763
+ });
764
+ };
765
+
766
+ var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
767
+ diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(testIconId || 'foo', "', '").concat(md5, "', '").concat(parentOrigin, "');");
768
+
769
+ diagFrame.onload = function () {
770
+ diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
771
+ diagFrame.contentDocument.head.appendChild(diagScript);
772
+ diagFrame.contentDocument.head.appendChild(scriptOrLinkTag);
773
+ diagFrame.contentDocument.body.appendChild(iTag);
774
+ };
775
+
776
+ domready(function () {
777
+ return DOCUMENT.body.appendChild(diagFrame);
778
+ });
779
+ }
780
+
781
+ var cssByMD5 = {};
782
+
783
+ for (var i = 0; i < linkTags.length; i++) {
784
+ var linkUnderTest = DOCUMENT.createElement('link');
785
+ linkUnderTest.setAttribute('id', nodeUnderTestId);
786
+ linkUnderTest.setAttribute('href', linkTags[i].href);
787
+ linkUnderTest.setAttribute('rel', linkTags[i].rel);
788
+ var md5ForLink = md5ForNode(linkTags[i]);
789
+ linkUnderTest.setAttribute(md5Attr, md5ForLink);
790
+ cssByMD5[md5ForLink] = linkTags[i];
791
+ runDiag(linkUnderTest, md5ForLink);
792
+ }
793
+
794
+ for (var _i = 0; _i < styleTags.length; _i++) {
795
+ var styleUnderTest = DOCUMENT.createElement('style');
796
+ styleUnderTest.setAttribute('id', nodeUnderTestId);
797
+ var md5ForStyle = md5ForNode(styleTags[_i]);
798
+ styleUnderTest.setAttribute(md5Attr, md5ForStyle);
799
+ styleUnderTest.innerText = styleTags[_i].innerText;
800
+ cssByMD5[md5ForStyle] = styleTags[_i];
801
+ runDiag(styleUnderTest, md5ForStyle);
802
+ }
803
+
804
+ return cssByMD5;
805
+ }
806
+
807
+ function detectSvgConflicts(currentScript) {
808
+ var scripts = Array.from(DOCUMENT.scripts).filter(function (t) {
809
+ return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript;
810
+ });
811
+ var scriptsByMD5 = {};
812
+
813
+ var _loop = function _loop(scriptIdx) {
814
+ var diagFrame = DOCUMENT.createElement('iframe');
815
+ diagFrame.setAttribute('style', 'display:none;');
816
+ var scriptUnderTest = DOCUMENT.createElement('script');
817
+ scriptUnderTest.setAttribute('id', nodeUnderTestId);
818
+ var md5ForScript = md5ForNode(scripts[scriptIdx]);
819
+ scriptUnderTest.setAttribute(md5Attr, md5ForScript);
820
+ scriptsByMD5[md5ForScript] = scripts[scriptIdx];
821
+
822
+ if (scripts[scriptIdx].src !== '') {
823
+ scriptUnderTest.src = scripts[scriptIdx].src;
824
+ }
825
+
826
+ if (scripts[scriptIdx].innerText !== '') {
827
+ scriptUnderTest.innerText = scripts[scriptIdx].innerText;
828
+ }
829
+
830
+ scriptUnderTest.async = true;
831
+ var diagScript = DOCUMENT.createElement('script');
832
+ diagScript.setAttribute('id', diagScriptId);
833
+ var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
834
+
835
+ var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) {
836
+ parent.FontAwesomeDetection.__pollUntil({
837
+ fn: function fn() {
838
+ return !!window.FontAwesomeConfig || !!window.FontAwesomeKitConfig;
839
+ }
840
+ }).then(function () {
841
+ var scriptNode = document.getElementById(nodeUnderTestId);
842
+ parent.postMessage({
843
+ type: 'fontawesome-conflict',
844
+ technology: 'js',
845
+ src: scriptNode.src,
846
+ innerText: scriptNode.innerText,
847
+ tagName: scriptNode.tagName,
848
+ md5: md5
849
+ }, parentOrigin);
850
+ }).catch(function (e) {
851
+ var scriptNode = document.getElementById(nodeUnderTestId);
852
+
853
+ if (e === 'timeout') {
854
+ parent.postMessage({
855
+ type: 'no-conflict',
856
+ src: scriptNode.src,
857
+ innerText: scriptNode.innerText,
858
+ tagName: scriptNode.tagName,
859
+ md5: md5
860
+ }, parentOrigin);
861
+ } else {
862
+ console.error(e);
863
+ }
864
+ });
865
+ };
866
+
867
+ diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(md5ForScript, "', '").concat(parentOrigin, "');");
868
+
869
+ diagFrame.onload = function () {
870
+ diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
871
+ diagFrame.contentDocument.head.appendChild(diagScript);
872
+ diagFrame.contentDocument.head.appendChild(scriptUnderTest);
873
+ };
874
+
875
+ domready(function () {
876
+ return DOCUMENT.body.appendChild(diagFrame);
877
+ });
878
+ };
879
+
880
+ for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
881
+ _loop(scriptIdx);
882
+ }
883
+
884
+ return scriptsByMD5;
885
+ }
886
+
887
+ function setDoneResults(_ref2) {
888
+ var nodesTested = _ref2.nodesTested,
889
+ nodesFound = _ref2.nodesFound;
890
+ WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};
891
+ WINDOW.FontAwesomeDetection.nodesTested = nodesTested;
892
+ WINDOW.FontAwesomeDetection.nodesFound = nodesFound;
893
+ WINDOW.FontAwesomeDetection.detectionDone = true;
894
+ }
895
+
896
+ function conflictDetection() {
897
+ var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
898
+ var nodesTested = {
899
+ conflict: {},
900
+ noConflict: {}
901
+ };
902
+
903
+ WINDOW.onmessage = function (e) {
904
+ if (WINDOW.location.origin === 'file://' || e.origin === WINDOW.location.origin) {
905
+ if (e && e.data) {
906
+ if (e.data.type === 'fontawesome-conflict') {
907
+ nodesTested.conflict[e.data.md5] = e.data;
908
+ } else if (e.data.type === 'no-conflict') {
909
+ nodesTested.noConflict[e.data.md5] = e.data;
910
+ }
911
+ }
912
+ }
913
+ };
914
+
915
+ var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
916
+ var cssToTest = detectWebfontConflicts();
917
+
918
+ var nodesFound = _objectSpread2(_objectSpread2({}, scriptsToTest), cssToTest);
919
+
920
+ var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
921
+ // child iframes call postMessage with their results, and when the parent window
922
+ // receives and handles those events with window.onmessage.
923
+ // Making it configurable allows us to test the scenario where this timeout is exceeded.
924
+ // Naming it something very different from "timeout" is to help avoid the potential ambiguity between
925
+ // these two timeout-related settings.
926
+
927
+ var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
928
+ console.group('Font Awesome Detector');
929
+
930
+ if (testCount === 0) {
931
+ console.info('%cAll Good!', 'color: green; font-size: large');
932
+ console.info('We didn\'t find anything that needs testing for conflicts. Ergo, no conflicts.');
933
+ } else {
934
+ console.info("Testing ".concat(testCount, " possible conflicts."));
935
+ console.info("We'll wait about ".concat(Math.round(WINDOW.FontAwesomeDetection.timeout / 10) / 100, " seconds while testing these and\n") + "then up to another ".concat(Math.round(WINDOW.FontAwesomeDetection.resultsCollectionMaxWait / 10) / 100, " to allow the browser time\n") + "to accumulate the results. But we'll probably be outta here way before then.\n\n");
936
+ console.info("You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:");
937
+ console.info("\t%c".concat(timeoutAttr, "%c: milliseconds to wait for each test before deciding whether it's a conflict."), 'font-weight: bold;', 'font-size: normal;');
938
+ console.info("\t%c".concat(resultsCollectionMaxWaitAttr, "%c: milliseconds to wait for the browser to accumulate test results before giving up."), 'font-weight: bold;', 'font-size: normal;');
939
+ pollUntil({
940
+ // Give this overall timer a little extra cushion
941
+ maxDuration: masterTimeout,
942
+ showProgress: true,
943
+ progressIndicator: 'waiting...',
944
+ fn: function fn() {
945
+ return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;
946
+ }
947
+ }).then(function () {
948
+ console.info('DONE!');
949
+ setDoneResults({
950
+ nodesTested: nodesTested,
951
+ nodesFound: nodesFound
952
+ });
953
+ report$$1({
954
+ nodesTested: nodesTested,
955
+ nodesFound: nodesFound
956
+ });
957
+ console.groupEnd();
958
+ }).catch(function (e) {
959
+ if (e === 'timeout') {
960
+ console.info('TIME OUT! We waited until we got tired. Here\'s what we found:');
961
+ setDoneResults({
962
+ nodesTested: nodesTested,
963
+ nodesFound: nodesFound
964
+ });
965
+ report$$1({
966
+ nodesTested: nodesTested,
967
+ nodesFound: nodesFound
968
+ });
969
+ } else {
970
+ console.info('Whoops! We hit an error:', e);
971
+ console.info('Here\'s what we\'d found up until that error:');
972
+ setDoneResults({
973
+ nodesTested: nodesTested,
974
+ nodesFound: nodesFound
975
+ });
976
+ report$$1({
977
+ nodesTested: nodesTested,
978
+ nodesFound: nodesFound
979
+ });
980
+ }
981
+
982
+ console.groupEnd();
983
+ });
984
+ }
985
+ } // Allow clients to access, and in some cases, override some properties
986
+
987
+ var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
988
+
989
+ var _default = {
990
+ report: report,
991
+ timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"),
992
+ resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000")
993
+ };
994
+
995
+ var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, _default), initialConfig), {}, {
996
+ // These cannot be overridden
997
+ __pollUntil: pollUntil,
998
+ md5ForNode: md5ForNode,
999
+ detectionDone: false,
1000
+ nodesTested: null,
1001
+ nodesFound: null
1002
+ });
1003
+
1004
+ WINDOW.FontAwesomeDetection = _config;
1005
+
1006
+ var _familyProxy, _familyProxy2, _familyProxy3, _familyProxy4, _familyProxy5;
1007
+ var PRODUCTION = function () {
1008
+ try {
1009
+ return process.env.NODE_ENV === 'production';
1010
+ } catch (e) {
1011
+ return false;
1012
+ }
1013
+ }();
1014
+ var FAMILY_CLASSIC = 'classic';
1015
+ var FAMILY_SHARP = 'sharp';
1016
+ var FAMILIES = [FAMILY_CLASSIC, FAMILY_SHARP];
1017
+
1018
+ function familyProxy(obj) {
1019
+ // Defaults to the classic family if family is not available
1020
+ return new Proxy(obj, {
1021
+ get: function get(target, prop) {
1022
+ return prop in target ? target[prop] : target[FAMILY_CLASSIC];
1023
+ }
1024
+ });
1025
+ }
1026
+ var PREFIX_TO_STYLE = familyProxy((_familyProxy = {}, _defineProperty(_familyProxy, FAMILY_CLASSIC, {
1027
+ 'fa': 'solid',
1028
+ 'fas': 'solid',
1029
+ 'fa-solid': 'solid',
1030
+ 'far': 'regular',
1031
+ 'fa-regular': 'regular',
1032
+ 'fal': 'light',
1033
+ 'fa-light': 'light',
1034
+ 'fat': 'thin',
1035
+ 'fa-thin': 'thin',
1036
+ 'fad': 'duotone',
1037
+ 'fa-duotone': 'duotone',
1038
+ 'fab': 'brands',
1039
+ 'fa-brands': 'brands',
1040
+ 'fak': 'kit',
1041
+ 'fa-kit': 'kit'
1042
+ }), _defineProperty(_familyProxy, FAMILY_SHARP, {
1043
+ 'fa': 'solid',
1044
+ 'fass': 'solid',
1045
+ 'fa-solid': 'solid',
1046
+ 'fasr': 'regular',
1047
+ 'fa-regular': 'regular',
1048
+ 'fasl': 'light',
1049
+ 'fa-light': 'light'
1050
+ }), _familyProxy));
1051
+ var STYLE_TO_PREFIX = familyProxy((_familyProxy2 = {}, _defineProperty(_familyProxy2, FAMILY_CLASSIC, {
1052
+ 'solid': 'fas',
1053
+ 'regular': 'far',
1054
+ 'light': 'fal',
1055
+ 'thin': 'fat',
1056
+ 'duotone': 'fad',
1057
+ 'brands': 'fab',
1058
+ 'kit': 'fak'
1059
+ }), _defineProperty(_familyProxy2, FAMILY_SHARP, {
1060
+ 'solid': 'fass',
1061
+ 'regular': 'fasr',
1062
+ 'light': 'fasl'
1063
+ }), _familyProxy2));
1064
+ var PREFIX_TO_LONG_STYLE = familyProxy((_familyProxy3 = {}, _defineProperty(_familyProxy3, FAMILY_CLASSIC, {
1065
+ 'fab': 'fa-brands',
1066
+ 'fad': 'fa-duotone',
1067
+ 'fak': 'fa-kit',
1068
+ 'fal': 'fa-light',
1069
+ 'far': 'fa-regular',
1070
+ 'fas': 'fa-solid',
1071
+ 'fat': 'fa-thin'
1072
+ }), _defineProperty(_familyProxy3, FAMILY_SHARP, {
1073
+ 'fass': 'fa-solid',
1074
+ 'fasr': 'fa-regular',
1075
+ 'fasl': 'fa-light'
1076
+ }), _familyProxy3));
1077
+ var LONG_STYLE_TO_PREFIX = familyProxy((_familyProxy4 = {}, _defineProperty(_familyProxy4, FAMILY_CLASSIC, {
1078
+ 'fa-brands': 'fab',
1079
+ 'fa-duotone': 'fad',
1080
+ 'fa-kit': 'fak',
1081
+ 'fa-light': 'fal',
1082
+ 'fa-regular': 'far',
1083
+ 'fa-solid': 'fas',
1084
+ 'fa-thin': 'fat'
1085
+ }), _defineProperty(_familyProxy4, FAMILY_SHARP, {
1086
+ 'fa-solid': 'fass',
1087
+ 'fa-regular': 'fasr',
1088
+ 'fa-light': 'fasl'
1089
+ }), _familyProxy4));
1090
+ var FONT_WEIGHT_TO_PREFIX = familyProxy((_familyProxy5 = {}, _defineProperty(_familyProxy5, FAMILY_CLASSIC, {
1091
+ '900': 'fas',
1092
+ '400': 'far',
1093
+ 'normal': 'far',
1094
+ '300': 'fal',
1095
+ '100': 'fat'
1096
+ }), _defineProperty(_familyProxy5, FAMILY_SHARP, {
1097
+ '900': 'fass',
1098
+ '400': 'fasr',
1099
+ '300': 'fasl'
1100
+ }), _familyProxy5));
1101
+ var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
1102
+ var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
1103
+ var DUOTONE_CLASSES = {
1104
+ GROUP: 'duotone-group',
1105
+ SWAP_OPACITY: 'swap-opacity',
1106
+ PRIMARY: 'primary',
1107
+ SECONDARY: 'secondary'
1108
+ };
1109
+ var prefixes = new Set();
1110
+ Object.keys(STYLE_TO_PREFIX[FAMILY_CLASSIC]).map(prefixes.add.bind(prefixes));
1111
+ Object.keys(STYLE_TO_PREFIX[FAMILY_SHARP]).map(prefixes.add.bind(prefixes));
1112
+ var RESERVED_CLASSES = [].concat(FAMILIES, _toConsumableArray(prefixes), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {
1113
+ return "".concat(n, "x");
1114
+ })).concat(oneToTwenty.map(function (n) {
1115
+ return "w-".concat(n);
1116
+ }));
1117
+
1118
+ function bunker(fn) {
1119
+ try {
1120
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1121
+ args[_key - 1] = arguments[_key];
1122
+ }
1123
+
1124
+ fn.apply(void 0, args);
1125
+ } catch (e) {
1126
+ if (!PRODUCTION) {
1127
+ throw e;
1128
+ }
1129
+ }
1130
+ }
1131
+
1132
+ bunker(function () {
1133
+ if (IS_BROWSER && IS_DOM) {
1134
+ conflictDetection(window.FontAwesomeDetection.report);
1135
+ }
1136
+ });
1137
+
1138
+ })));
static/assets/FontAwesome/js/conflict-detection.min.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ var t;t=function(){"use strict";function o(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}var t={},n={};try{"undefined"!=typeof window&&(t=window),"undefined"!=typeof document&&(n=document)}catch(t){}function c(){u.removeEventListener("DOMContentLoaded",c),p=1,g.map(function(t){return t()})}var f=(t.navigator||{}).userAgent,s=void 0===f?"":f,l=t,u=n,d=!!l.document,m=!!u.documentElement&&!!u.head&&"function"==typeof u.addEventListener&&"function"==typeof u.createElement,g=(~s.indexOf("MSIE")||s.indexOf("Trident/"),[]),p=!1;function h(t){m&&(p?setTimeout(t,0):g.push(t))}m&&((p=(u.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(u.readyState))||u.addEventListener("DOMContentLoaded",c));var b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var y=(function(t){function u(t,e){var n=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(n>>16)<<16|65535&n}function c(t,e,n,o,r,i){return u((i=u(u(e,t),u(o,i)))<<r|i>>>32-r,n)}function d(t,e,n,o,r,i,a){return c(e&n|~e&o,t,e,r,i,a)}function m(t,e,n,o,r,i,a){return c(e&o|n&~o,t,e,r,i,a)}function g(t,e,n,o,r,i,a){return c(e^n^o,t,e,r,i,a)}function p(t,e,n,o,r,i,a){return c(n^(e|~o),t,e,r,i,a)}function a(t,e){var n,o,r,i;t[e>>5]|=128<<e%32,t[14+(e+64>>>9<<4)]=e;for(var a=1732584193,c=-271733879,f=-1732584194,s=271733878,l=0;l<t.length;l+=16)a=d(n=a,o=c,r=f,i=s,t[l],7,-680876936),s=d(s,a,c,f,t[l+1],12,-389564586),f=d(f,s,a,c,t[l+2],17,606105819),c=d(c,f,s,a,t[l+3],22,-1044525330),a=d(a,c,f,s,t[l+4],7,-176418897),s=d(s,a,c,f,t[l+5],12,1200080426),f=d(f,s,a,c,t[l+6],17,-1473231341),c=d(c,f,s,a,t[l+7],22,-45705983),a=d(a,c,f,s,t[l+8],7,1770035416),s=d(s,a,c,f,t[l+9],12,-1958414417),f=d(f,s,a,c,t[l+10],17,-42063),c=d(c,f,s,a,t[l+11],22,-1990404162),a=d(a,c,f,s,t[l+12],7,1804603682),s=d(s,a,c,f,t[l+13],12,-40341101),f=d(f,s,a,c,t[l+14],17,-1502002290),a=m(a,c=d(c,f,s,a,t[l+15],22,1236535329),f,s,t[l+1],5,-165796510),s=m(s,a,c,f,t[l+6],9,-1069501632),f=m(f,s,a,c,t[l+11],14,643717713),c=m(c,f,s,a,t[l],20,-373897302),a=m(a,c,f,s,t[l+5],5,-701558691),s=m(s,a,c,f,t[l+10],9,38016083),f=m(f,s,a,c,t[l+15],14,-660478335),c=m(c,f,s,a,t[l+4],20,-405537848),a=m(a,c,f,s,t[l+9],5,568446438),s=m(s,a,c,f,t[l+14],9,-1019803690),f=m(f,s,a,c,t[l+3],14,-187363961),c=m(c,f,s,a,t[l+8],20,1163531501),a=m(a,c,f,s,t[l+13],5,-1444681467),s=m(s,a,c,f,t[l+2],9,-51403784),f=m(f,s,a,c,t[l+7],14,1735328473),a=g(a,c=m(c,f,s,a,t[l+12],20,-1926607734),f,s,t[l+5],4,-378558),s=g(s,a,c,f,t[l+8],11,-2022574463),f=g(f,s,a,c,t[l+11],16,1839030562),c=g(c,f,s,a,t[l+14],23,-35309556),a=g(a,c,f,s,t[l+1],4,-1530992060),s=g(s,a,c,f,t[l+4],11,1272893353),f=g(f,s,a,c,t[l+7],16,-155497632),c=g(c,f,s,a,t[l+10],23,-1094730640),a=g(a,c,f,s,t[l+13],4,681279174),s=g(s,a,c,f,t[l],11,-358537222),f=g(f,s,a,c,t[l+3],16,-722521979),c=g(c,f,s,a,t[l+6],23,76029189),a=g(a,c,f,s,t[l+9],4,-640364487),s=g(s,a,c,f,t[l+12],11,-421815835),f=g(f,s,a,c,t[l+15],16,530742520),a=p(a,c=g(c,f,s,a,t[l+2],23,-995338651),f,s,t[l],6,-198630844),s=p(s,a,c,f,t[l+7],10,1126891415),f=p(f,s,a,c,t[l+14],15,-1416354905),c=p(c,f,s,a,t[l+5],21,-57434055),a=p(a,c,f,s,t[l+12],6,1700485571),s=p(s,a,c,f,t[l+3],10,-1894986606),f=p(f,s,a,c,t[l+10],15,-1051523),c=p(c,f,s,a,t[l+1],21,-2054922799),a=p(a,c,f,s,t[l+8],6,1873313359),s=p(s,a,c,f,t[l+15],10,-30611744),f=p(f,s,a,c,t[l+6],15,-1560198380),c=p(c,f,s,a,t[l+13],21,1309151649),a=p(a,c,f,s,t[l+4],6,-145523070),s=p(s,a,c,f,t[l+11],10,-1120210379),f=p(f,s,a,c,t[l+2],15,718787259),c=p(c,f,s,a,t[l+9],21,-343485551),a=u(a,n),c=u(c,o),f=u(f,r),s=u(s,i);return[a,c,f,s]}function f(t){for(var e="",n=32*t.length,o=0;o<n;o+=8)e+=String.fromCharCode(t[o>>5]>>>o%32&255);return e}function s(t){var e=[];for(e[(t.length>>2)-1]=void 0,o=0;o<e.length;o+=1)e[o]=0;for(var n=8*t.length,o=0;o<n;o+=8)e[o>>5]|=(255&t.charCodeAt(o/8))<<o%32;return e}function o(t){for(var e,n="0123456789abcdef",o="",r=0;r<t.length;r+=1)e=t.charCodeAt(r),o+=n.charAt(e>>>4&15)+n.charAt(15&e);return o}function n(t){return unescape(encodeURIComponent(t))}function r(t){return f(a(s(t=n(t)),8*t.length))}function i(t,e){return function(t,e){var n,o=s(t),r=[],i=[];for(r[15]=i[15]=void 0,16<o.length&&(o=a(o,8*t.length)),n=0;n<16;n+=1)r[n]=909522486^o[n],i[n]=1549556828^o[n];return e=a(r.concat(s(e)),512+8*e.length),f(a(i.concat(e),640))}(n(t),n(e))}function e(t,e,n){return e?n?i(e,t):o(i(e,t)):n?r(t):o(r(t))}var l;l=b,t.exports?t.exports=e:l.md5=e}(z={exports:{}}),z.exports);function w(t){if(null!==t&&"object"===e(t))return t.src?y(t.src):t.href?y(t.href):t.innerText&&""!==t.innerText?y(t.innerText):void 0}var v="fa-kits-diag",A="fa-kits-node-under-test",x="data-md5",T="data-fa-detection-ignore",O="data-fa-detection-timeout",D="data-fa-detection-results-collection-max-wait",E=function(t){t.preventDefault(),t.stopPropagation()};function C(t){var e=t.fn,i=void 0===e?function(){return!0}:e,e=t.initialDuration,n=void 0===e?1:e,e=t.maxDuration,a=void 0===e?l.FontAwesomeDetection.timeout:e,e=t.showProgress,c=void 0!==e&&e,f=t.progressIndicator;return new Promise(function(o,r){!function e(t,n){setTimeout(function(){var t=i();c&&console.info(f),t?o(t):(t=250+n)<=a?e(250,t):r("timeout")},t)}(n,0)})}function F(e){for(var i=Array.from(u.scripts).filter(function(t){return!t.hasAttribute(T)&&t!==e}),a={},t=0;t<i.length;t++)!function(t){var e=u.createElement("iframe");e.setAttribute("style","display:none;");var n=u.createElement("script");n.setAttribute("id",A);var o=w(i[t]);n.setAttribute(x,o),a[o]=i[t],""!==i[t].src&&(n.src=i[t].src),""!==i[t].innerText&&(n.innerText=i[t].innerText),n.async=!0;var r=u.createElement("script");r.setAttribute("id",v);t="file://"===l.location.origin?"*":l.location.origin;r.innerText="(".concat(function(n,o,r){parent.FontAwesomeDetection.__pollUntil({fn:function(){return!!window.FontAwesomeConfig||!!window.FontAwesomeKitConfig}}).then(function(){var t=document.getElementById(n);parent.postMessage({type:"fontawesome-conflict",technology:"js",src:t.src,innerText:t.innerText,tagName:t.tagName,md5:o},r)}).catch(function(t){var e=document.getElementById(n);"timeout"===t?parent.postMessage({type:"no-conflict",src:e.src,innerText:e.innerText,tagName:e.tagName,md5:o},r):console.error(t)})}.toString(),")('").concat(A,"', '").concat(o,"', '").concat(t,"');"),e.onload=function(){e.contentWindow.addEventListener("error",E,!0),e.contentDocument.head.appendChild(r),e.contentDocument.head.appendChild(n)},h(function(){return u.body.appendChild(e)})}(t);return a}function k(t){var e=t.nodesTested,t=t.nodesFound;l.FontAwesomeDetection=l.FontAwesomeDetection||{},l.FontAwesomeDetection.nodesTested=e,l.FontAwesomeDetection.nodesFound=t,l.FontAwesomeDetection.detectionDone=!0}function j(t){var e=0<arguments.length&&void 0!==t?t:function(){},n={conflict:{},noConflict:{}};l.onmessage=function(t){"file://"!==l.location.origin&&t.origin!==l.location.origin||t&&t.data&&("fontawesome-conflict"===t.data.type?n.conflict[t.data.md5]=t.data:"no-conflict"===t.data.type&&(n.noConflict[t.data.md5]=t.data))};var o=F(u.currentScript),t=function(){var t=Array.from(u.getElementsByTagName("link")).filter(function(t){return!t.hasAttribute(T)}),e=Array.from(u.getElementsByTagName("style")).filter(function(t){return!t.hasAttribute(T)&&(!l.FontAwesomeConfig||!t.innerText.match(new RegExp("svg:not\\(:root\\)\\.".concat(l.FontAwesomeConfig.replacementClass))))});function n(t,e){var n=u.createElement("iframe");n.setAttribute("style","visibility: hidden; position: absolute; height: 0; width: 0;");var o="fa-test-icon-"+e,r=u.createElement("i");r.setAttribute("class","fa fa-coffee"),r.setAttribute("id",o);var i=u.createElement("script");i.setAttribute("id",v);var a="file://"===l.location.origin?"*":l.location.origin;i.innerText="(".concat(function(n,e,o,r){parent.FontAwesomeDetection.__pollUntil({fn:function(){var t=document.getElementById(e),t=window.getComputedStyle(t).getPropertyValue("font-family");return!(!t.match(/FontAwesome/)&&!t.match(/Font Awesome [56]/))}}).then(function(){var t=document.getElementById(n);parent.postMessage({type:"fontawesome-conflict",technology:"webfont",href:t.href,innerText:t.innerText,tagName:t.tagName,md5:o},r)}).catch(function(t){var e=document.getElementById(n);"timeout"===t?parent.postMessage({type:"no-conflict",technology:"webfont",href:e.src,innerText:e.innerText,tagName:e.tagName,md5:o},r):console.error(t)})}.toString(),")('").concat(A,"', '").concat(o||"foo","', '").concat(e,"', '").concat(a,"');"),n.onload=function(){n.contentWindow.addEventListener("error",E,!0),n.contentDocument.head.appendChild(i),n.contentDocument.head.appendChild(t),n.contentDocument.body.appendChild(r)},h(function(){return u.body.appendChild(n)})}for(var o={},r=0;r<t.length;r++){var i=u.createElement("link");i.setAttribute("id",A),i.setAttribute("href",t[r].href),i.setAttribute("rel",t[r].rel);var a=w(t[r]);i.setAttribute(x,a),o[a]=t[r],n(i,a)}for(var c=0;c<e.length;c++){var f=u.createElement("style");f.setAttribute("id",A);var s=w(e[c]);f.setAttribute(x,s),f.innerText=e[c].innerText,o[s]=e[c],n(f,s)}return o}(),r=a(a({},o),t),i=Object.keys(o).length+Object.keys(t).length,t=l.FontAwesomeDetection.timeout+l.FontAwesomeDetection.resultsCollectionMaxWait;console.group("Font Awesome Detector"),0===i?(console.info("%cAll Good!","color: green; font-size: large"),console.info("We didn't find anything that needs testing for conflicts. Ergo, no conflicts.")):(console.info("Testing ".concat(i," possible conflicts.")),console.info("We'll wait about ".concat(Math.round(l.FontAwesomeDetection.timeout/10)/100," seconds while testing these and\n")+"then up to another ".concat(Math.round(l.FontAwesomeDetection.resultsCollectionMaxWait/10)/100," to allow the browser time\n")+"to accumulate the results. But we'll probably be outta here way before then.\n\n"),console.info("You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:"),console.info("\t%c".concat(O,"%c: milliseconds to wait for each test before deciding whether it's a conflict."),"font-weight: bold;","font-size: normal;"),console.info("\t%c".concat(D,"%c: milliseconds to wait for the browser to accumulate test results before giving up."),"font-weight: bold;","font-size: normal;"),C({maxDuration:t,showProgress:!0,progressIndicator:"waiting...",fn:function(){return Object.keys(n.conflict).length+Object.keys(n.noConflict).length>=i}}).then(function(){console.info("DONE!"),k({nodesTested:n,nodesFound:r}),e({nodesTested:n,nodesFound:r}),console.groupEnd()}).catch(function(t){"timeout"===t?console.info("TIME OUT! We waited until we got tired. Here's what we found:"):(console.info("Whoops! We hit an error:",t),console.info("Here's what we'd found up until that error:")),k({nodesTested:n,nodesFound:r}),e({nodesTested:n,nodesFound:r}),console.groupEnd()}))}var S=l.FontAwesomeDetection||{},N=a(a(a({},{report:function(t){var e,n=t.nodesTested,o=t.nodesFound,r={};for(e in o)n.conflict[e]||n.noConflict[e]||(r[e]=o[e]);if(0<(t=Object.keys(n.conflict).length)){console.info("%cConflict".concat(1<t?"s":""," found:"),"color: darkred; font-size: large");var i,a={};for(i in n.conflict){var c=n.conflict[i];a[i]={tagName:c.tagName,"src/href":c.src||c.href||"n/a","innerText excerpt":c.innerText&&""!==c.innerText?c.innerText.slice(0,200)+"...":"(empty)"}}console.table(a)}if(0<(t=Object.keys(n.noConflict).length)){console.info("%cNo conflict".concat(1<t?"s":""," found with ").concat(1===t?"this":"these",":"),"color: green; font-size: large");var f,s={};for(f in n.noConflict){var l=n.noConflict[f];s[f]={tagName:l.tagName,"src/href":l.src||l.href||"n/a","innerText excerpt":l.innerText&&""!==l.innerText?l.innerText.slice(0,200)+"...":"(empty)"}}console.table(s)}if(0<(t=Object.keys(r).length)){console.info("%cLeftovers--we timed out before collecting test results for ".concat(1===t?"this":"these",":"),"color: blue; font-size: large");var u,d={};for(u in r){var m=r[u];d[u]={tagName:m.tagName,"src/href":m.src||m.href||"n/a","innerText excerpt":m.innerText&&""!==m.innerText?m.innerText.slice(0,200)+"...":"(empty)"}}console.table(d)}},timeout:+(u.currentScript.getAttribute(O)||"2000"),resultsCollectionMaxWait:+(u.currentScript.getAttribute(D)||"5000")}),S),{},{__pollUntil:C,md5ForNode:w,detectionDone:!1,nodesTested:null,nodesFound:null});l.FontAwesomeDetection=N;var P=function(){try{return"production"===process.env.NODE_ENV}catch(t){return!1}}(),M="classic",I="sharp",W=[M,I];function B(t){return new Proxy(t,{get:function(t,e){return e in t?t[e]:t[M]}})}B((r(L={},M,{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fad:"duotone","fa-duotone":"duotone",fab:"brands","fa-brands":"brands",fak:"kit","fa-kit":"kit"}),r(L,I,{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light"}),L));var t=B((r(f={},M,{solid:"fas",regular:"far",light:"fal",thin:"fat",duotone:"fad",brands:"fab",kit:"fak"}),r(f,I,{solid:"fass",regular:"fasr",light:"fasl"}),f)),S=(B((r(n={},M,{fab:"fa-brands",fad:"fa-duotone",fak:"fa-kit",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"}),r(n,I,{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light"}),n)),B((r(s={},M,{"fa-brands":"fab","fa-duotone":"fad","fa-kit":"fak","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"}),r(s,I,{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl"}),s)),B((r(z={},M,{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"}),r(z,I,{900:"fass",400:"fasr",300:"fasl"}),z)),[1,2,3,4,5,6,7,8,9,10]),N=S.concat([11,12,13,14,15,16,17,18,19,20]),L="duotone-group",f="swap-opacity",n="primary",s="secondary",z=new Set;Object.keys(t[M]).map(z.add.bind(z)),Object.keys(t[I]).map(z.add.bind(z));[].concat(W,function(t){if(Array.isArray(t))return i(t)}(z=z)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(z)||function(t,e){if(t){if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(n="Object"===n&&t.constructor?t.constructor.name:n)||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}(z)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),["2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",L,f,n,s]).concat(S.map(function(t){return"".concat(t,"x")})).concat(N.map(function(t){return"w-".concat(t)}));!function(t){try{for(var e=arguments.length,n=new Array(1<e?e-1:0),o=1;o<e;o++)n[o-1]=arguments[o];t.apply(void 0,n)}catch(t){if(!P)throw t}}(function(){d&&m&&j(window.FontAwesomeDetection.report)})},("object"!=typeof exports||"undefined"==typeof module)&&"function"==typeof define&&define.amd?define(t):t();
static/assets/FontAwesome/js/fontawesome.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/fontawesome.min.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ * Copyright 2023 Fonticons, Inc.
5
+ */
6
+ !function(){"use strict";function n(a,t){var e,n=Object.keys(a);return Object.getOwnPropertySymbols&&(e=Object.getOwnPropertySymbols(a),t&&(e=e.filter(function(t){return Object.getOwnPropertyDescriptor(a,t).enumerable})),n.push.apply(n,e)),n}function k(a){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?n(Object(e),!0).forEach(function(t){s(a,t,e[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(e)):n(Object(e)).forEach(function(t){Object.defineProperty(a,t,Object.getOwnPropertyDescriptor(e,t))})}return a}function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,a){for(var e=0;e<a.length;e++){var n=a[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function s(t,a,e){return a in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}function m(t,a){return function(t){if(Array.isArray(t))return t}(t)||function(t,a){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var n,i,r=[],o=!0,s=!1;try{for(e=e.call(t);!(o=(n=e.next()).done)&&(r.push(n.value),!a||r.length!==a);o=!0);}catch(t){s=!0,i=t}finally{try{o||null==e.return||e.return()}finally{if(s)throw i}}return r}}(t,a)||e(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||e(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(t,a){if(t){if("string"==typeof t)return o(t,a);var e=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(e="Object"===e&&t.constructor?t.constructor.name:e)||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?o(t,a):void 0}}function o(t,a){(null==a||a>t.length)&&(a=t.length);for(var e=0,n=new Array(a);e<a;e++)n[e]=t[e];return n}function t(){}var a={},c={},f=null,u={mark:t,measure:t};try{"undefined"!=typeof window&&(a=window),"undefined"!=typeof document&&(c=document),"undefined"!=typeof MutationObserver&&(f=MutationObserver),"undefined"!=typeof performance&&(u=performance)}catch(t){}var d=(a.navigator||{}).userAgent,b=void 0===d?"":d,g=a,h=c,p=f,d=u,v=!!g.document,y=!!h.documentElement&&!!h.head&&"function"==typeof h.addEventListener&&"function"==typeof h.createElement,w=~b.indexOf("MSIE")||~b.indexOf("Trident/"),a="___FONT_AWESOME___",x=16,A="svg-inline--fa",O="data-fa-i2svg",N="data-fa-pseudo-element",P="data-fa-pseudo-element-pending",C="data-prefix",S="data-icon",j="fontawesome-i2svg",E="async",z=["HTML","HEAD","STYLE","SCRIPT"],M=function(){try{return!0}catch(t){return!1}}(),I="classic",L="sharp",Y=[I,L];function R(t){return new Proxy(t,{get:function(t,a){return a in t?t[a]:t[I]}})}var T=R((s(c={},I,{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fad:"duotone","fa-duotone":"duotone",fab:"brands","fa-brands":"brands",fak:"kit","fa-kit":"kit"}),s(c,L,{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light"}),c)),D=R((s(f={},I,{solid:"fas",regular:"far",light:"fal",thin:"fat",duotone:"fad",brands:"fab",kit:"fak"}),s(f,L,{solid:"fass",regular:"fasr",light:"fasl"}),f)),F=R((s(u={},I,{fab:"fa-brands",fad:"fa-duotone",fak:"fa-kit",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"}),s(u,L,{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light"}),u)),H=R((s(b={},I,{"fa-brands":"fab","fa-duotone":"fad","fa-kit":"fak","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"}),s(b,L,{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl"}),b)),W=/fa(s|r|l|t|d|b|k|ss|sr|sl)?[\-\ ]/,_="fa-layers-text",U=/Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i,X=R((s(c={},I,{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"}),s(c,L,{900:"fass",400:"fasr",300:"fasl"}),c)),f=[1,2,3,4,5,6,7,8,9,10],u=f.concat([11,12,13,14,15,16,17,18,19,20]),B=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],q={GROUP:"duotone-group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},b=new Set;Object.keys(D[I]).map(b.add.bind(b)),Object.keys(D[L]).map(b.add.bind(b));var V=[].concat(Y,l(b),["2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",q.GROUP,q.SWAP_OPACITY,q.PRIMARY,q.SECONDARY]).concat(f.map(function(t){return"".concat(t,"x")})).concat(u.map(function(t){return"w-".concat(t)})),G=g.FontAwesomeConfig||{};h&&"function"==typeof h.querySelector&&[["data-family-prefix","familyPrefix"],["data-css-prefix","cssPrefix"],["data-family-default","familyDefault"],["data-style-default","styleDefault"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach(function(t){var a=m(t,2),t=a[0],a=a[1],t=""===(t=function(t){var a=h.querySelector("script["+t+"]");if(a)return a.getAttribute(t)}(t))||"false"!==t&&("true"===t||t);null!=t&&(G[a]=t)});c={styleDefault:"solid",familyDefault:"classic",cssPrefix:"fa",replacementClass:A,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0};G.familyPrefix&&(G.cssPrefix=G.familyPrefix);var K=k(k({},c),G);K.autoReplaceSvg||(K.observeMutations=!1);var J={};Object.keys(c).forEach(function(a){Object.defineProperty(J,a,{enumerable:!0,set:function(t){K[a]=t,Q.forEach(function(t){return t(J)})},get:function(){return K[a]}})}),Object.defineProperty(J,"familyPrefix",{enumerable:!0,set:function(t){K.cssPrefix=t,Q.forEach(function(t){return t(J)})},get:function(){return K.cssPrefix}}),g.FontAwesomeConfig=J;var Q=[];var Z=x,$={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};var tt="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function at(){for(var t=12,a="";0<t--;)a+=tt[62*Math.random()|0];return a}function et(t){for(var a=[],e=(t||[]).length>>>0;e--;)a[e]=t[e];return a}function nt(t){return t.classList?et(t.classList):(t.getAttribute("class")||"").split(" ").filter(function(t){return t})}function it(t){return"".concat(t).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function rt(e){return Object.keys(e||{}).reduce(function(t,a){return t+"".concat(a,": ").concat(e[a].trim(),";")},"")}function ot(t){return t.size!==$.size||t.x!==$.x||t.y!==$.y||t.rotate!==$.rotate||t.flipX||t.flipY}function st(){var t,a,e=A,n=J.cssPrefix,i=J.replacementClass,r=':host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Solid";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Regular";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Light";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Thin";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714285705em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width,2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fa-sr-only-focusable:not(:focus),.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}';return"fa"===n&&i===e||(t=new RegExp("\\.".concat("fa","\\-"),"g"),a=new RegExp("\\--".concat("fa","\\-"),"g"),e=new RegExp("\\.".concat(e),"g"),r=r.replace(t,".".concat(n,"-")).replace(a,"--".concat(n,"-")).replace(e,".".concat(i))),r}var ct=!1;function ft(){J.autoAddCss&&!ct&&(function(t){if(t&&y){var a=h.createElement("style");a.setAttribute("type","text/css"),a.innerHTML=t;for(var e=h.head.childNodes,n=null,i=e.length-1;-1<i;i--){var r=e[i],o=(r.tagName||"").toUpperCase();-1<["STYLE","LINK"].indexOf(o)&&(n=r)}h.head.insertBefore(a,n)}}(st()),ct=!0)}b={mixout:function(){return{dom:{css:st,insertCss:ft}}},hooks:function(){return{beforeDOMElementCreation:function(){ft()},beforeI2svg:function(){ft()}}}},f=g||{};f[a]||(f[a]={}),f[a].styles||(f[a].styles={}),f[a].hooks||(f[a].hooks={}),f[a].shims||(f[a].shims=[]);function lt(){h.removeEventListener("DOMContentLoaded",lt),dt=1,mt.map(function(t){return t()})}var ut=f[a],mt=[],dt=!1;function bt(t){y&&(dt?setTimeout(t,0):mt.push(t))}function pt(t){var e,a=t.tag,n=t.attributes,i=void 0===n?{}:n,n=t.children,n=void 0===n?[]:n;return"string"==typeof t?it(t):"<".concat(a," ").concat((e=i,Object.keys(e||{}).reduce(function(t,a){return t+"".concat(a,'="').concat(it(e[a]),'" ')},"").trim()),">").concat(n.map(pt).join(""),"</").concat(a,">")}function vt(t,a,e){if(t&&t[a]&&t[a][e])return{prefix:a,iconName:e,icon:t[a][e]}}y&&((dt=(h.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(h.readyState))||h.addEventListener("DOMContentLoaded",lt));function gt(t,a,e,n){for(var i,r,o=Object.keys(t),s=o.length,c=void 0!==n?ht(a,n):a,f=void 0===e?(i=1,t[o[0]]):(i=0,e);i<s;i++)f=c(f,t[r=o[i]],r,t);return f}var ht=function(i,r){return function(t,a,e,n){return i.call(r,t,a,e,n)}};function yt(t){t=function(t){for(var a=[],e=0,n=t.length;e<n;){var i,r=t.charCodeAt(e++);55296<=r&&r<=56319&&e<n?56320==(64512&(i=t.charCodeAt(e++)))?a.push(((1023&r)<<10)+(1023&i)+65536):(a.push(r),e--):a.push(r)}return a}(t);return 1===t.length?t[0].toString(16):null}function kt(n){return Object.keys(n).reduce(function(t,a){var e=n[a];return!!e.icon?t[e.iconName]=e.icon:t[a]=e,t},{})}function wt(t,a,e){var n=(2<arguments.length&&void 0!==e?e:{}).skipHooks,e=void 0!==n&&n,n=kt(a);"function"!=typeof ut.hooks.addPack||e?ut.styles[t]=k(k({},ut.styles[t]||{}),n):ut.hooks.addPack(t,kt(a)),"fas"===t&&wt("fa",a)}var xt=ut.styles,At=ut.shims,Ot=(s(u={},I,Object.values(F[I])),s(u,L,Object.values(F[L])),u),Nt=null,Pt={},Ct={},St={},jt={},Et={},zt=(s(c={},I,Object.keys(T[I])),s(c,L,Object.keys(T[L])),c);function Mt(t,a){var e=a.split("-"),a=e[0],e=e.slice(1).join("-");return a!==t||""===e||~V.indexOf(e)?null:e}function It(){function t(n){return gt(xt,function(t,a,e){return t[e]=gt(a,n,{}),t},{})}Pt=t(function(a,t,e){return t[3]&&(a[t[3]]=e),t[2]&&t[2].filter(function(t){return"number"==typeof t}).forEach(function(t){a[t.toString(16)]=e}),a}),Ct=t(function(a,t,e){return a[e]=e,t[2]&&t[2].filter(function(t){return"string"==typeof t}).forEach(function(t){a[t]=e}),a}),Et=t(function(a,t,e){t=t[2];return a[e]=e,t.forEach(function(t){a[t]=e}),a});var i="far"in xt||J.autoFetchSvg,a=gt(At,function(t,a){var e=a[0],n=a[1],a=a[2];return"far"!==n||i||(n="fas"),"string"==typeof e&&(t.names[e]={prefix:n,iconName:a}),"number"==typeof e&&(t.unicodes[e.toString(16)]={prefix:n,iconName:a}),t},{names:{},unicodes:{}});St=a.names,jt=a.unicodes,Nt=Dt(J.styleDefault,{family:J.familyDefault})}function Lt(t,a){return(Pt[t]||{})[a]}function Yt(t,a){return(Et[t]||{})[a]}function Rt(t){return St[t]||{prefix:null,iconName:null}}f=function(t){Nt=Dt(t.styleDefault,{family:J.familyDefault})},Q.push(f),It();function Tt(){return{prefix:null,iconName:null,rest:[]}}function Dt(t,a){var e=(1<arguments.length&&void 0!==a?a:{}).family,a=void 0===e?I:e,e=T[a][t],e=D[a][t]||D[a][e],t=t in ut.styles?t:null;return e||t||null}var Ft=(s(a={},I,Object.keys(F[I])),s(a,L,Object.keys(F[L])),a);function Ht(t,a){var a=(1<arguments.length&&void 0!==a?a:{}).skipLookups,n=void 0!==a&&a,i=(s(a={},I,"".concat(J.cssPrefix,"-").concat(I)),s(a,L,"".concat(J.cssPrefix,"-").concat(L)),a),r=null,o=I;(t.includes(i[I])||t.some(function(t){return Ft[I].includes(t)}))&&(o=I),(t.includes(i[L])||t.some(function(t){return Ft[L].includes(t)}))&&(o=L);a=t.reduce(function(t,a){var e=Mt(J.cssPrefix,a);return xt[a]?(a=Ot[o].includes(a)?H[o][a]:a,r=a,t.prefix=a):-1<zt[o].indexOf(a)?(r=a,t.prefix=Dt(a,{family:o})):e?t.iconName=e:a!==J.replacementClass&&a!==i[I]&&a!==i[L]&&t.rest.push(a),!n&&t.prefix&&t.iconName&&(e="fa"===r?Rt(t.iconName):{},a=Yt(t.prefix,t.iconName),e.prefix&&(r=null),t.iconName=e.iconName||a||t.iconName,t.prefix=e.prefix||t.prefix,"far"!==t.prefix||xt.far||!xt.fas||J.autoFetchSvg||(t.prefix="fas")),t},Tt());return(t.includes("fa-brands")||t.includes("fab"))&&(a.prefix="fab"),(t.includes("fa-duotone")||t.includes("fad"))&&(a.prefix="fad"),a.prefix||o!==L||!xt.fass&&!J.autoFetchSvg||(a.prefix="fass",a.iconName=Yt(a.prefix,a.iconName)||a.iconName),"fa"!==a.prefix&&"fa"!==r||(a.prefix=Nt||"fas"),a}var u=function(){function t(){!function(t,a){if(!(t instanceof a))throw new TypeError("Cannot call a class as a function")}(this,t),this.definitions={}}var a,e,n;return a=t,(e=[{key:"add",value:function(){for(var e=this,t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];var i=a.reduce(this._pullDefinitions,{});Object.keys(i).forEach(function(t){e.definitions[t]=k(k({},e.definitions[t]||{}),i[t]),wt(t,i[t]);var a=F[I][t];a&&wt(a,i[t]),It()})}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(i,t){var r=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(r).map(function(t){var a=r[t],e=a.prefix,t=a.iconName,n=a.icon,a=n[2];i[e]||(i[e]={}),0<a.length&&a.forEach(function(t){"string"==typeof t&&(i[e][t]=n)}),i[e][t]=n}),i}}])&&r(a.prototype,e),n&&r(a,n),Object.defineProperty(a,"prototype",{writable:!1}),t}(),c=[],Wt={},_t={},Ut=Object.keys(_t);function Xt(t,a){for(var e=arguments.length,n=new Array(2<e?e-2:0),i=2;i<e;i++)n[i-2]=arguments[i];return(Wt[t]||[]).forEach(function(t){a=t.apply(null,[a].concat(n))}),a}function Bt(t){for(var a=arguments.length,e=new Array(1<a?a-1:0),n=1;n<a;n++)e[n-1]=arguments[n];(Wt[t]||[]).forEach(function(t){t.apply(null,e)})}function qt(t){var a=t,t=Array.prototype.slice.call(arguments,1);return _t[a]?_t[a].apply(null,t):void 0}function Vt(t){"fa"===t.prefix&&(t.prefix="fas");var a=t.iconName,t=t.prefix||Nt;if(a)return a=Yt(t,a)||a,vt(Gt.definitions,t,a)||vt(ut.styles,t,a)}var Gt=new u,Kt={noAuto:function(){J.autoReplaceSvg=!1,J.observeMutations=!1,Bt("noAuto")},config:J,dom:{i2svg:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return y?(Bt("beforeI2svg",t),qt("pseudoElements2svg",t),qt("i2svg",t)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=t.autoReplaceSvgRoot;!1===J.autoReplaceSvg&&(J.autoReplaceSvg=!0),J.observeMutations=!0,bt(function(){Jt({autoReplaceSvgRoot:a}),Bt("watch",t)})}},parse:{icon:function(t){if(null===t)return null;if("object"===i(t)&&t.prefix&&t.iconName)return{prefix:t.prefix,iconName:Yt(t.prefix,t.iconName)||t.iconName};if(Array.isArray(t)&&2===t.length){var a=0===t[1].indexOf("fa-")?t[1].slice(3):t[1],e=Dt(t[0]);return{prefix:e,iconName:Yt(e,a)||a}}if("string"==typeof t&&(-1<t.indexOf("".concat(J.cssPrefix,"-"))||t.match(W))){a=Ht(t.split(" "),{skipLookups:!0});return{prefix:a.prefix||Nt,iconName:Yt(a.prefix,a.iconName)||a.iconName}}return"string"==typeof t?{prefix:Nt,iconName:Yt(Nt,t)||t}:void 0}},library:Gt,findIconDefinition:Vt,toHtml:pt},Jt=function(){var t=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{}).autoReplaceSvgRoot,t=void 0===t?h:t;(0<Object.keys(ut.styles).length||J.autoFetchSvg)&&y&&J.autoReplaceSvg&&Kt.dom.i2svg({node:t})};function Qt(a,t){return Object.defineProperty(a,"abstract",{get:t}),Object.defineProperty(a,"html",{get:function(){return a.abstract.map(pt)}}),Object.defineProperty(a,"node",{get:function(){if(y){var t=h.createElement("div");return t.innerHTML=a.html,t.children}}}),a}function Zt(t){var a=t.icons,e=a.main,n=a.mask,i=t.prefix,r=t.iconName,o=t.transform,s=t.symbol,c=t.title,f=t.maskId,l=t.titleId,u=t.extra,m=t.watchable,d=void 0!==m&&m,b=n.found?n:e,a=b.width,t=b.height,m="fak"===i,b=[J.replacementClass,r?"".concat(J.cssPrefix,"-").concat(r):""].filter(function(t){return-1===u.classes.indexOf(t)}).filter(function(t){return""!==t||!!t}).concat(u.classes).join(" "),b={children:[],attributes:k(k({},u.attributes),{},{"data-prefix":i,"data-icon":r,class:b,role:u.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(a," ").concat(t)})},t=m&&!~u.classes.indexOf("fa-fw")?{width:"".concat(a/t*16*.0625,"em")}:{};d&&(b.attributes[O]=""),c&&(b.children.push({tag:"title",attributes:{id:b.attributes["aria-labelledby"]||"title-".concat(l||at())},children:[c]}),delete b.attributes.title);var p,v,g,h,y,t=k(k({},b),{},{prefix:i,iconName:r,main:e,mask:n,maskId:f,transform:o,symbol:s,styles:k(k({},t),u.styles)}),n=n.found&&e.found?qt("generateAbstractMask",t)||{children:[],attributes:{}}:qt("generateAbstractIcon",t)||{children:[],attributes:{}},e=n.children,n=n.attributes;return t.children=e,t.attributes=n,s?(v=(p=t).prefix,g=p.iconName,h=p.children,y=p.attributes,p=!0===(p=p.symbol)?"".concat(v,"-").concat(J.cssPrefix,"-").concat(g):p,[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:k(k({},y),{},{id:p}),children:h}]}]):(g=(v=t).children,y=v.main,p=v.mask,h=v.attributes,t=v.styles,ot(v=v.transform)&&y.found&&!p.found&&(p=y.width/y.height/2,y=.5,h.style=rt(k(k({},t),{},{"transform-origin":"".concat(p+v.x/16,"em ").concat(y+v.y/16,"em")}))),[{tag:"svg",attributes:h,children:g}])}function $t(t){var a=t.content,e=t.width,n=t.height,i=t.transform,r=t.title,o=t.extra,s=t.watchable,c=void 0!==s&&s,t=k(k(k({},o.attributes),r?{title:r}:{}),{},{class:o.classes.join(" ")});c&&(t[O]="");s=k({},o.styles);ot(i)&&(s.transform=(o=(c={transform:i,startCentered:!0,width:e,height:n}).transform,i=c.width,n=void 0===(e=c.height)?x:e,c=void 0!==(e=c.startCentered)&&e,e="",e+=c&&w?"translate(".concat(o.x/Z-(void 0===i?x:i)/2,"em, ").concat(o.y/Z-n/2,"em) "):c?"translate(calc(-50% + ".concat(o.x/Z,"em), calc(-50% + ").concat(o.y/Z,"em)) "):"translate(".concat(o.x/Z,"em, ").concat(o.y/Z,"em) "),e+="scale(".concat(o.size/Z*(o.flipX?-1:1),", ").concat(o.size/Z*(o.flipY?-1:1),") "),e+="rotate(".concat(o.rotate,"deg) ")),s["-webkit-transform"]=s.transform);s=rt(s);0<s.length&&(t.style=s);s=[];return s.push({tag:"span",attributes:t,children:[a]}),r&&s.push({tag:"span",attributes:{class:"sr-only"},children:[r]}),s}var ta=ut.styles;function aa(t){var a=t[0],e=t[1],t=m(t.slice(4),1)[0];return{found:!0,width:a,height:e,icon:Array.isArray(t)?{tag:"g",attributes:{class:"".concat(J.cssPrefix,"-").concat(q.GROUP)},children:[{tag:"path",attributes:{class:"".concat(J.cssPrefix,"-").concat(q.SECONDARY),fill:"currentColor",d:t[0]}},{tag:"path",attributes:{class:"".concat(J.cssPrefix,"-").concat(q.PRIMARY),fill:"currentColor",d:t[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:t}}}}var ea={found:!1,width:512,height:512};function na(i,r){var o=r;return"fa"===r&&null!==J.styleDefault&&(r=Nt),new Promise(function(t,a){var e,n;qt("missingIconAbstract");if("fa"===o&&(n=Rt(i)||{},i=n.iconName||i,r=n.prefix||r),i&&r&&ta[r]&&ta[r][i])return t(aa(ta[r][i]));e=i,n=r,M||J.showMissingIcons||!e||console.error('Icon with name "'.concat(e,'" and prefix "').concat(n,'" is missing.')),t(k(k({},ea),{},{icon:J.showMissingIcons&&i&&qt("missingIconAbstract")||{}}))})}function ia(){}function ra(t){oa.mark("".concat(sa," ").concat(t," ends")),oa.measure("".concat(sa," ").concat(t),"".concat(sa," ").concat(t," begins"),"".concat(sa," ").concat(t," ends"))}var oa=J.measurePerformance&&d&&d.mark&&d.measure?d:{mark:ia,measure:ia},sa='FA "6.4.2"',ca={begin:function(t){return oa.mark("".concat(sa," ").concat(t," begins")),function(){return ra(t)}},end:ra},fa=function(){};function la(t){return"string"==typeof(t.getAttribute?t.getAttribute(O):null)}function ua(t){return h.createElementNS("http://www.w3.org/2000/svg",t)}function ma(t){return h.createElement(t)}var da={replace:function(t){var a=t[0];a.parentNode&&(t[1].forEach(function(t){a.parentNode.insertBefore(function a(e,t){var t=(1<arguments.length&&void 0!==t?t:{}).ceFn,n=void 0===t?"svg"===e.tag?ua:ma:t;if("string"==typeof e)return h.createTextNode(e);var i=n(e.tag);return Object.keys(e.attributes||[]).forEach(function(t){i.setAttribute(t,e.attributes[t])}),(e.children||[]).forEach(function(t){i.appendChild(a(t,{ceFn:n}))}),i}(t),a)}),null===a.getAttribute(O)&&J.keepOriginalSource?(t=h.createComment((t=" ".concat((t=a).outerHTML," "),t="".concat(t,"Font Awesome fontawesome.com "))),a.parentNode.replaceChild(t,a)):a.remove())},nest:function(t){var a=t[0],e=t[1];if(~nt(a).indexOf(J.replacementClass))return da.replace(t);var n=new RegExp("".concat(J.cssPrefix,"-.*"));delete e[0].attributes.id,e[0].attributes.class&&(t=e[0].attributes.class.split(" ").reduce(function(t,a){return(a===J.replacementClass||a.match(n)?t.toSvg:t.toNode).push(a),t},{toNode:[],toSvg:[]}),e[0].attributes.class=t.toSvg.join(" "),0===t.toNode.length?a.removeAttribute("class"):a.setAttribute("class",t.toNode.join(" ")));e=e.map(pt).join("\n");a.setAttribute(O,""),a.innerHTML=e}};function ba(t){t()}function pa(e,t){var n="function"==typeof t?t:fa;0===e.length?n():(J.mutateApproach===E?g.requestAnimationFrame||ba:ba)(function(){var t=!0!==J.autoReplaceSvg&&da[J.autoReplaceSvg]||da.replace,a=ca.begin("mutate");e.map(t),a(),n()})}var va=!1;function ga(){va=!0}function ha(){va=!1}var ya=null;function ka(t){var r,o,a,s;p&&J.observeMutations&&(a=t.treeCallback,r=void 0===a?fa:a,a=t.nodeCallback,o=void 0===a?fa:a,a=t.pseudoElementsCallback,s=void 0===a?fa:a,t=void 0===(t=t.observeMutationsRoot)?h:t,ya=new p(function(t){var i;va||(i=Nt,et(t).forEach(function(t){var a,e,n;"childList"===t.type&&0<t.addedNodes.length&&!la(t.addedNodes[0])&&(J.searchPseudoElements&&s(t.target),r(t.target)),"attributes"===t.type&&t.target.parentNode&&J.searchPseudoElements&&s(t.target.parentNode),"attributes"===t.type&&la(t.target)&&~B.indexOf(t.attributeName)&&("class"===t.attributeName&&(e=t.target,n=e.getAttribute?e.getAttribute(C):null,e=e.getAttribute?e.getAttribute(S):null,n&&e)?(e=(a=Ht(nt(t.target))).prefix,a=a.iconName,t.target.setAttribute(C,e||i),a&&t.target.setAttribute(S,a)):(a=t.target)&&a.classList&&a.classList.contains&&a.classList.contains(J.replacementClass)&&o(t.target))}))}),y&&ya.observe(t,{childList:!0,attributes:!0,characterData:!0,subtree:!0}))}function wa(t){var a=t.getAttribute("data-prefix"),e=t.getAttribute("data-icon"),n=void 0!==t.innerText?t.innerText.trim():"",i=Ht(nt(t));return i.prefix||(i.prefix=Nt),a&&e&&(i.prefix=a,i.iconName=e),i.iconName&&i.prefix||(i.prefix&&0<n.length&&(i.iconName=(e=i.prefix,n=t.innerText,(Ct[e]||{})[n]||Lt(i.prefix,yt(t.innerText)))),!i.iconName&&J.autoFetchSvg&&t.firstChild&&t.firstChild.nodeType===Node.TEXT_NODE&&(i.iconName=t.firstChild.data)),i}function xa(t,a){var e=1<arguments.length&&void 0!==a?a:{styleParser:!0},n=wa(t),i=n.iconName,r=n.prefix,o=n.rest,s=(a=et((s=t).attributes).reduce(function(t,a){return"class"!==t.name&&"style"!==t.name&&(t[a.name]=a.value),t},{}),n=s.getAttribute("title"),s=s.getAttribute("data-fa-title-id"),J.autoA11y&&(n?a["aria-labelledby"]="".concat(J.replacementClass,"-title-").concat(s||at()):(a["aria-hidden"]="true",a.focusable="false")),a),a=Xt("parseNodeAttributes",{},t),c=e.styleParser?(e=(c=t).getAttribute("style"),c=[],c=e?e.split(";").reduce(function(t,a){var e=a.split(":"),a=e[0],e=e.slice(1);return a&&0<e.length&&(t[a]=e.join(":").trim()),t},{}):c):[];return k({iconName:i,title:t.getAttribute("title"),titleId:t.getAttribute("data-fa-title-id"),prefix:r,transform:$,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:o,styles:c,attributes:s}},a)}var Aa=ut.styles;function Oa(t){var a="nest"===J.autoReplaceSvg?xa(t,{styleParser:!1}):xa(t);return~a.extra.classes.indexOf(_)?qt("generateLayersText",t,a):qt("generateSvgReplacementMutation",t,a)}var Na=new Set;function Pa(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;if(!y)return Promise.resolve();function i(t){return a.add("".concat(j,"-").concat(t))}function r(t){return a.remove("".concat(j,"-").concat(t))}var a=h.documentElement.classList,e=J.autoFetchSvg?Na:Y.map(function(t){return"fa-".concat(t)}).concat(Object.keys(Aa));e.includes("fa")||e.push("fa");var o=[".".concat(_,":not([").concat(O,"])")].concat(e.map(function(t){return".".concat(t,":not([").concat(O,"])")})).join(", ");if(0===o.length)return Promise.resolve();e=[];try{e=et(t.querySelectorAll(o))}catch(t){}if(!(0<e.length))return Promise.resolve();i("pending"),r("complete");var s=ca.begin("onTree"),c=e.reduce(function(t,a){try{var e=Oa(a);e&&t.push(e)}catch(t){M||"MissingIcon"===t.name&&console.error(t)}return t},[]);return new Promise(function(a,e){Promise.all(c).then(function(t){pa(t,function(){i("active"),i("complete"),r("pending"),"function"==typeof n&&n(),s(),a()})}).catch(function(t){s(),e(t)})})}function Ca(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;Oa(t).then(function(t){t&&pa([t],a)})}Y.map(function(t){Na.add("fa-".concat(t))}),Object.keys(T[I]).map(Na.add.bind(Na)),Object.keys(T[L]).map(Na.add.bind(Na));function Sa(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=a.transform,n=void 0===e?$:e,i=void 0!==(e=a.symbol)&&e,r=void 0===(e=a.mask)?null:e,o=void 0===(e=a.maskId)?null:e,s=void 0===(e=a.title)?null:e,c=void 0===(e=a.titleId)?null:e,f=void 0===(e=a.classes)?[]:e,l=void 0===(e=a.attributes)?{}:e,u=void 0===(e=a.styles)?{}:e;if(t){var m=t.prefix,d=t.iconName,b=t.icon;return Qt(k({type:"icon"},t),function(){return Bt("beforeDOMElementCreation",{iconDefinition:t,params:a}),J.autoA11y&&(s?l["aria-labelledby"]="".concat(J.replacementClass,"-title-").concat(c||at()):(l["aria-hidden"]="true",l.focusable="false")),Zt({icons:{main:aa(b),mask:r?aa(r.icon):{found:!1,width:null,height:null,icon:{}}},prefix:m,iconName:d,transform:k(k({},$),n),symbol:i,title:s,maskId:o,titleId:c,extra:{attributes:l,styles:u,classes:f}})})}}var Na=l(Na),f={mixout:function(){return{icon:(n=Sa,function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=(t||{}).icon?t:Vt(t||{}),t=(t=a.mask)&&((t||{}).icon?t:Vt(t||{}));return n(e,k(k({},a),{},{mask:t}))})};var n},hooks:function(){return{mutationObserverCallbacks:function(t){return t.treeCallback=Pa,t.nodeCallback=Ca,t}}},provides:function(t){t.i2svg=function(t){var a=t.node,t=t.callback;return Pa(void 0===a?h:a,void 0===t?function(){}:t)},t.generateSvgReplacementMutation=function(n,t){var i=t.iconName,r=t.title,o=t.titleId,s=t.prefix,c=t.transform,f=t.symbol,a=t.mask,l=t.maskId,u=t.extra;return new Promise(function(e,t){Promise.all([na(i,s),a.iconName?na(a.iconName,a.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then(function(t){var a=m(t,2),t=a[0],a=a[1];e([n,Zt({icons:{main:t,mask:a},prefix:s,iconName:i,transform:c,symbol:f,maskId:l,title:r,titleId:o,extra:u,watchable:!0})])}).catch(t)})},t.generateAbstractIcon=function(t){var a,e=t.children,n=t.attributes,i=t.main,r=t.transform,t=rt(t.styles);return 0<t.length&&(n.style=t),ot(r)&&(a=qt("generateAbstractTransformGrouping",{main:i,transform:r,containerWidth:i.width,iconWidth:i.width})),e.push(a||i.icon),{children:e,attributes:n}}}},a={mixout:function(){return{layer:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},a=e.classes,n=void 0===a?[]:a;return Qt({type:"layer"},function(){Bt("beforeDOMElementCreation",{assembler:t,params:e});var a=[];return t(function(t){Array.isArray(t)?t.map(function(t){a=a.concat(t.abstract)}):a=a.concat(t.abstract)}),[{tag:"span",attributes:{class:["".concat(J.cssPrefix,"-layers")].concat(l(n)).join(" ")},children:a}]})}}}},u={mixout:function(){return{counter:function(i){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t=r.title,o=void 0===t?null:t,t=r.classes,s=void 0===t?[]:t,t=r.attributes,c=void 0===t?{}:t,t=r.styles,f=void 0===t?{}:t;return Qt({type:"counter",content:i},function(){return Bt("beforeDOMElementCreation",{content:i,params:r}),t={content:i.toString(),title:o,extra:{attributes:c,styles:f,classes:["".concat(J.cssPrefix,"-layers-counter")].concat(l(s))}},a=t.content,e=t.title,n=t.extra,t=k(k(k({},n.attributes),e?{title:e}:{}),{},{class:n.classes.join(" ")}),0<(n=rt(n.styles)).length&&(t.style=n),(n=[]).push({tag:"span",attributes:t,children:[a]}),e&&n.push({tag:"span",attributes:{class:"sr-only"},children:[e]}),n;var t,a,e,n})}}}},d={mixout:function(){return{text:function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=a.transform,n=void 0===e?$:e,e=a.title,i=void 0===e?null:e,e=a.classes,r=void 0===e?[]:e,e=a.attributes,o=void 0===e?{}:e,e=a.styles,s=void 0===e?{}:e;return Qt({type:"text",content:t},function(){return Bt("beforeDOMElementCreation",{content:t,params:a}),$t({content:t,transform:k(k({},$),n),title:i,extra:{attributes:o,styles:s,classes:["".concat(J.cssPrefix,"-layers-text")].concat(l(r))}})})}}},provides:function(t){t.generateLayersText=function(t,a){var e,n=a.title,i=a.transform,r=a.extra,o=null,s=null;return w&&(e=parseInt(getComputedStyle(t).fontSize,10),o=(a=t.getBoundingClientRect()).width/e,s=a.height/e),J.autoA11y&&!n&&(r.attributes["aria-hidden"]="true"),Promise.resolve([t,$t({content:t.innerHTML,width:o,height:s,transform:i,title:n,extra:r,watchable:!0})])}}},ja=new RegExp('"',"ug"),Ea=[1105920,1112319];function za(b,p){var v="".concat(P).concat(p.replace(":","-"));return new Promise(function(e,t){if(null!==b.getAttribute(v))return e();var n,i,r,o,a,s,c,f=et(b.children).filter(function(t){return t.getAttribute(N)===p})[0],l=g.getComputedStyle(b,p),u=l.getPropertyValue("font-family").match(U),m=l.getPropertyValue("font-weight"),d=l.getPropertyValue("content");if(f&&!u)return b.removeChild(f),e();u&&"none"!==d&&""!==d?(s=l.getPropertyValue("content"),a=~["Sharp"].indexOf(u[2])?L:I,n=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(u[2])?D[a][u[2].toLowerCase()]:X[a][m],d=(l=(l=(d=s).replace(ja,""),a=0,s=(m=l).length,c=55296<=(d=m.charCodeAt(a))&&d<=56319&&a+1<s&&56320<=(c=m.charCodeAt(a+1))&&c<=57343?1024*(d-55296)+c-56320+65536:d,d=Ea[0]<=c&&c<=Ea[1],{value:yt((c=2===l.length&&l[0]===l[1])?l[0]:l),isSecondary:d||c})).value,c=l.isSecondary,l=u[0].startsWith("FontAwesome"),u=Lt(n,d),i=u,l&&(d=jt[l=d],l=Lt("fas",l),(l=d||(l?{prefix:"fas",iconName:l}:null)||{prefix:null,iconName:null}).iconName&&l.prefix&&(u=l.iconName,n=l.prefix)),!u||c||f&&f.getAttribute(C)===n&&f.getAttribute(S)===i?e():(b.setAttribute(v,i),f&&b.removeChild(f),(o=(r={iconName:null,title:null,titleId:null,prefix:null,transform:$,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}}).extra).attributes[N]=p,na(u,n).then(function(t){var a=Zt(k(k({},r),{},{icons:{main:t,mask:Tt()},prefix:n,iconName:i,extra:o,watchable:!0})),t=h.createElementNS("http://www.w3.org/2000/svg","svg");"::before"===p?b.insertBefore(t,b.firstChild):b.appendChild(t),t.outerHTML=a.map(pt).join("\n"),b.removeAttribute(v),e()}).catch(t))):e()})}function Ma(t){return Promise.all([za(t,"::before"),za(t,"::after")])}function Ia(t){return!(t.parentNode===document.head||~z.indexOf(t.tagName.toUpperCase())||t.getAttribute(N)||t.parentNode&&"svg"===t.parentNode.tagName)}function La(i){if(y)return new Promise(function(t,a){var e=et(i.querySelectorAll("*")).filter(Ia).map(Ma),n=ca.begin("searchPseudoElements");ga(),Promise.all(e).then(function(){n(),ha(),t()}).catch(function(){n(),ha(),a()})})}function Ya(t){return t.toLowerCase().split(" ").reduce(function(t,a){var e=a.toLowerCase().split("-"),a=e[0],n=e.slice(1).join("-");if(a&&"h"===n)return t.flipX=!0,t;if(a&&"v"===n)return t.flipY=!0,t;if(n=parseFloat(n),isNaN(n))return t;switch(a){case"grow":t.size=t.size+n;break;case"shrink":t.size=t.size-n;break;case"left":t.x=t.x-n;break;case"right":t.x=t.x+n;break;case"up":t.y=t.y-n;break;case"down":t.y=t.y+n;break;case"rotate":t.rotate=t.rotate+n}return t},{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})}var Ra=!1,Ta={x:0,y:0,width:"100%",height:"100%"};function Da(t){return t.attributes&&(t.attributes.fill||(!(1<arguments.length&&void 0!==arguments[1])||arguments[1]))&&(t.attributes.fill="black"),t}var Fa;Fa={mixoutsTo:Kt}.mixoutsTo,c=[b,f,a,u,d,{hooks:function(){return{mutationObserverCallbacks:function(t){return t.pseudoElementsCallback=La,t}}},provides:function(t){t.pseudoElements2svg=function(t){t=t.node;J.searchPseudoElements&&La(void 0===t?h:t)}}},{mixout:function(){return{dom:{unwatch:function(){ga(),Ra=!0}}}},hooks:function(){return{bootstrap:function(){ka(Xt("mutationObserverCallbacks",{}))},noAuto:function(){ya&&ya.disconnect()},watch:function(t){t=t.observeMutationsRoot;Ra?ha():ka(Xt("mutationObserverCallbacks",{observeMutationsRoot:t}))}}}},{mixout:function(){return{parse:{transform:Ya}}},hooks:function(){return{parseNodeAttributes:function(t,a){a=a.getAttribute("data-fa-transform");return a&&(t.transform=Ya(a)),t}}},provides:function(t){t.generateAbstractTransformGrouping=function(t){var a=t.main,e=t.transform,n=t.containerWidth,i=t.iconWidth,r={transform:"translate(".concat(n/2," 256)")},t="translate(".concat(32*e.x,", ").concat(32*e.y,") "),n="scale(".concat(e.size/16*(e.flipX?-1:1),", ").concat(e.size/16*(e.flipY?-1:1),") "),e="rotate(".concat(e.rotate," 0 0)"),i={outer:r,inner:{transform:"".concat(t," ").concat(n," ").concat(e)},path:{transform:"translate(".concat(i/2*-1," -256)")}};return{tag:"g",attributes:k({},i.outer),children:[{tag:"g",attributes:k({},i.inner),children:[{tag:a.icon.tag,children:a.icon.children,attributes:k(k({},a.icon.attributes),i.path)}]}]}}}},{hooks:function(){return{parseNodeAttributes:function(t,a){var e=a.getAttribute("data-fa-mask"),e=e?Ht(e.split(" ").map(function(t){return t.trim()})):Tt();return e.prefix||(e.prefix=Nt),t.mask=e,t.maskId=a.getAttribute("data-fa-mask-id"),t}}},provides:function(t){t.generateAbstractMask=function(t){var a=t.children,e=t.attributes,n=t.main,i=t.mask,r=t.maskId,o=t.transform,s=n.width,c=n.icon,f=i.width,t=i.icon,o=(i=(n={transform:o,containerWidth:f,iconWidth:s}).transform,o=n.containerWidth,f=n.iconWidth,s={transform:"translate(".concat(o/2," 256)")},n="translate(".concat(32*i.x,", ").concat(32*i.y,") "),o="scale(".concat(i.size/16*(i.flipX?-1:1),", ").concat(i.size/16*(i.flipY?-1:1),") "),i="rotate(".concat(i.rotate," 0 0)"),{outer:s,inner:{transform:"".concat(n," ").concat(o," ").concat(i)},path:{transform:"translate(".concat(f/2*-1," -256)")}}),i={tag:"rect",attributes:k(k({},Ta),{},{fill:"white"})},f=c.children?{children:c.children.map(Da)}:{},f={tag:"g",attributes:k({},o.inner),children:[Da(k({tag:c.tag,attributes:k(k({},c.attributes),o.path)},f))]},o={tag:"g",attributes:k({},o.outer),children:[f]},f="mask-".concat(r||at()),r="clip-".concat(r||at()),o={tag:"mask",attributes:k(k({},Ta),{},{id:f,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[i,o]},o={tag:"defs",children:[{tag:"clipPath",attributes:{id:r},children:"g"===(t=t).tag?t.children:[t]},o]};return a.push(o,{tag:"rect",attributes:k({fill:"currentColor","clip-path":"url(#".concat(r,")"),mask:"url(#".concat(f,")")},Ta)}),{children:a,attributes:e}}}},{provides:function(t){var r=!1;g.matchMedia&&(r=g.matchMedia("(prefers-reduced-motion: reduce)").matches),t.missingIconAbstract=function(){var t=[],a={fill:"currentColor"},e={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};t.push({tag:"path",attributes:k(k({},a),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var n=k(k({},e),{},{attributeName:"opacity"}),i={tag:"circle",attributes:k(k({},a),{},{cx:"256",cy:"364",r:"28"}),children:[]};return r||i.children.push({tag:"animate",attributes:k(k({},e),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:k(k({},n),{},{values:"1;0;1;1;0;1;"})}),t.push(i),t.push({tag:"path",attributes:k(k({},a),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:r?[]:[{tag:"animate",attributes:k(k({},n),{},{values:"1;0;0;0;0;1;"})}]}),r||t.push({tag:"path",attributes:k(k({},a),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:k(k({},n),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:t}}}},{hooks:function(){return{parseNodeAttributes:function(t,a){a=a.getAttribute("data-fa-symbol");return t.symbol=null!==a&&(""===a||a),t}}}}],Wt={},Object.keys(_t).forEach(function(t){-1===Ut.indexOf(t)&&delete _t[t]}),c.forEach(function(t){var a,e=t.mixout?t.mixout():{};Object.keys(e).forEach(function(a){"function"==typeof e[a]&&(Fa[a]=e[a]),"object"===i(e[a])&&Object.keys(e[a]).forEach(function(t){Fa[a]||(Fa[a]={}),Fa[a][t]=e[a][t]})}),t.hooks&&(a=t.hooks(),Object.keys(a).forEach(function(t){Wt[t]||(Wt[t]=[]),Wt[t].push(a[t])})),t.provides&&t.provides(_t)}),function(t){try{for(var a=arguments.length,e=new Array(1<a?a-1:0),n=1;n<a;n++)e[n-1]=arguments[n];t.apply(void 0,e)}catch(t){if(!M)throw t}}(function(t){v&&(g.FontAwesome||(g.FontAwesome=Kt),bt(function(){Jt(),Bt("bootstrap")})),ut.hooks=k(k({},ut.hooks),{},{addPack:function(t,a){ut.styles[t]=k(k({},ut.styles[t]||{}),a),It(),Jt()},addPacks:function(t){t.forEach(function(t){var a=m(t,2),t=a[0],a=a[1];ut.styles[t]=k(k({},ut.styles[t]||{}),a)}),It(),Jt()},addShims:function(t){var a;(a=ut.shims).push.apply(a,l(t)),It(),Jt()}})})}();
static/assets/FontAwesome/js/regular.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/regular.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/solid.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/FontAwesome/js/solid.min.js ADDED
The diff for this file is too large to render. See raw diff