streamlit-nightly 1.43.2.dev20250307__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- streamlit/__init__.py +306 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +218 -0
- streamlit/cli_util.py +105 -0
- streamlit/column_config.py +56 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +126 -0
- streamlit/commands/execution_control.py +238 -0
- streamlit/commands/experimental_query_params.py +169 -0
- streamlit/commands/logo.py +189 -0
- streamlit/commands/navigation.py +385 -0
- streamlit/commands/page_config.py +311 -0
- streamlit/components/__init__.py +13 -0
- streamlit/components/lib/__init__.py +13 -0
- streamlit/components/lib/local_component_registry.py +84 -0
- streamlit/components/types/__init__.py +13 -0
- streamlit/components/types/base_component_registry.py +99 -0
- streamlit/components/types/base_custom_component.py +150 -0
- streamlit/components/v1/__init__.py +31 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +130 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +243 -0
- streamlit/config.py +1513 -0
- streamlit/config_option.py +311 -0
- streamlit/config_util.py +177 -0
- streamlit/connections/__init__.py +28 -0
- streamlit/connections/base_connection.py +174 -0
- streamlit/connections/snowflake_connection.py +562 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +425 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +210 -0
- streamlit/dataframe_util.py +1416 -0
- streamlit/delta_generator.py +602 -0
- streamlit/delta_generator_singletons.py +204 -0
- streamlit/deprecation_util.py +209 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +234 -0
- streamlit/elements/arrow.py +962 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +133 -0
- streamlit/elements/code.py +114 -0
- streamlit/elements/deck_gl_json_chart.py +546 -0
- streamlit/elements/dialog_decorator.py +267 -0
- streamlit/elements/doc_string.py +558 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +331 -0
- streamlit/elements/form.py +354 -0
- streamlit/elements/graphviz_chart.py +150 -0
- streamlit/elements/heading.py +302 -0
- streamlit/elements/html.py +105 -0
- streamlit/elements/iframe.py +191 -0
- streamlit/elements/image.py +196 -0
- streamlit/elements/json.py +139 -0
- streamlit/elements/layouts.py +879 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1157 -0
- streamlit/elements/lib/color_util.py +263 -0
- streamlit/elements/lib/column_config_utils.py +542 -0
- streamlit/elements/lib/column_types.py +2188 -0
- streamlit/elements/lib/dialog.py +147 -0
- streamlit/elements/lib/dicttools.py +154 -0
- streamlit/elements/lib/event_utils.py +37 -0
- streamlit/elements/lib/file_uploader_utils.py +66 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +441 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/mutable_status_container.py +183 -0
- streamlit/elements/lib/options_selector_utils.py +250 -0
- streamlit/elements/lib/pandas_styler_utils.py +274 -0
- streamlit/elements/lib/policies.py +194 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
- streamlit/elements/lib/subtitle_utils.py +176 -0
- streamlit/elements/lib/utils.py +250 -0
- streamlit/elements/map.py +508 -0
- streamlit/elements/markdown.py +277 -0
- streamlit/elements/media.py +793 -0
- streamlit/elements/metric.py +301 -0
- streamlit/elements/plotly_chart.py +546 -0
- streamlit/elements/progress.py +156 -0
- streamlit/elements/pyplot.py +194 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/spinner.py +113 -0
- streamlit/elements/text.py +76 -0
- streamlit/elements/toast.py +98 -0
- streamlit/elements/vega_charts.py +1984 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +310 -0
- streamlit/elements/widgets/button.py +1123 -0
- streamlit/elements/widgets/button_group.py +1008 -0
- streamlit/elements/widgets/camera_input.py +263 -0
- streamlit/elements/widgets/chat.py +647 -0
- streamlit/elements/widgets/checkbox.py +352 -0
- streamlit/elements/widgets/color_picker.py +265 -0
- streamlit/elements/widgets/data_editor.py +983 -0
- streamlit/elements/widgets/file_uploader.py +486 -0
- streamlit/elements/widgets/multiselect.py +338 -0
- streamlit/elements/widgets/number_input.py +545 -0
- streamlit/elements/widgets/radio.py +407 -0
- streamlit/elements/widgets/select_slider.py +437 -0
- streamlit/elements/widgets/selectbox.py +366 -0
- streamlit/elements/widgets/slider.py +880 -0
- streamlit/elements/widgets/text_widgets.py +628 -0
- streamlit/elements/widgets/time_widgets.py +970 -0
- streamlit/elements/write.py +574 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +61 -0
- streamlit/error_util.py +105 -0
- streamlit/errors.py +452 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +406 -0
- streamlit/file_util.py +247 -0
- streamlit/git_util.py +173 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +37 -0
- streamlit/hello/mapping_demo.py +114 -0
- streamlit/hello/plotting_demo.py +55 -0
- streamlit/hello/streamlit_app.py +55 -0
- streamlit/hello/utils.py +28 -0
- streamlit/logger.py +130 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +302 -0
- streamlit/net_util.py +125 -0
- streamlit/platform.py +33 -0
- streamlit/proto/Alert_pb2.py +29 -0
- streamlit/proto/Alert_pb2.pyi +90 -0
- streamlit/proto/AppPage_pb2.py +27 -0
- streamlit/proto/AppPage_pb2.pyi +64 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
- streamlit/proto/Arrow_pb2.py +33 -0
- streamlit/proto/Arrow_pb2.pyi +188 -0
- streamlit/proto/AudioInput_pb2.py +28 -0
- streamlit/proto/AudioInput_pb2.pyi +58 -0
- streamlit/proto/Audio_pb2.py +27 -0
- streamlit/proto/Audio_pb2.pyi +58 -0
- streamlit/proto/AuthRedirect_pb2.py +27 -0
- streamlit/proto/AuthRedirect_pb2.pyi +41 -0
- streamlit/proto/AutoRerun_pb2.py +27 -0
- streamlit/proto/AutoRerun_pb2.pyi +45 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +105 -0
- streamlit/proto/Balloons_pb2.py +27 -0
- streamlit/proto/Balloons_pb2.pyi +43 -0
- streamlit/proto/Block_pb2.py +53 -0
- streamlit/proto/Block_pb2.pyi +322 -0
- streamlit/proto/BokehChart_pb2.py +27 -0
- streamlit/proto/BokehChart_pb2.pyi +49 -0
- streamlit/proto/ButtonGroup_pb2.py +36 -0
- streamlit/proto/ButtonGroup_pb2.pyi +169 -0
- streamlit/proto/Button_pb2.py +27 -0
- streamlit/proto/Button_pb2.pyi +71 -0
- streamlit/proto/CameraInput_pb2.py +28 -0
- streamlit/proto/CameraInput_pb2.pyi +58 -0
- streamlit/proto/ChatInput_pb2.py +31 -0
- streamlit/proto/ChatInput_pb2.pyi +111 -0
- streamlit/proto/Checkbox_pb2.py +30 -0
- streamlit/proto/Checkbox_pb2.pyi +90 -0
- streamlit/proto/ClientState_pb2.py +30 -0
- streamlit/proto/ClientState_pb2.pyi +90 -0
- streamlit/proto/Code_pb2.py +27 -0
- streamlit/proto/Code_pb2.pyi +55 -0
- streamlit/proto/ColorPicker_pb2.py +28 -0
- streamlit/proto/ColorPicker_pb2.pyi +67 -0
- streamlit/proto/Common_pb2.py +51 -0
- streamlit/proto/Common_pb2.pyi +293 -0
- streamlit/proto/Components_pb2.py +35 -0
- streamlit/proto/Components_pb2.pyi +172 -0
- streamlit/proto/DataFrame_pb2.py +56 -0
- streamlit/proto/DataFrame_pb2.pyi +397 -0
- streamlit/proto/DateInput_pb2.py +28 -0
- streamlit/proto/DateInput_pb2.pyi +83 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
- streamlit/proto/Delta_pb2.py +31 -0
- streamlit/proto/Delta_pb2.pyi +74 -0
- streamlit/proto/DocString_pb2.py +29 -0
- streamlit/proto/DocString_pb2.pyi +93 -0
- streamlit/proto/DownloadButton_pb2.py +27 -0
- streamlit/proto/DownloadButton_pb2.pyi +70 -0
- streamlit/proto/Element_pb2.py +78 -0
- streamlit/proto/Element_pb2.pyi +312 -0
- streamlit/proto/Empty_pb2.py +27 -0
- streamlit/proto/Empty_pb2.pyi +36 -0
- streamlit/proto/Exception_pb2.py +27 -0
- streamlit/proto/Exception_pb2.pyi +72 -0
- streamlit/proto/Favicon_pb2.py +27 -0
- streamlit/proto/Favicon_pb2.pyi +40 -0
- streamlit/proto/FileUploader_pb2.py +28 -0
- streamlit/proto/FileUploader_pb2.pyi +78 -0
- streamlit/proto/ForwardMsg_pb2.py +53 -0
- streamlit/proto/ForwardMsg_pb2.pyi +293 -0
- streamlit/proto/GitInfo_pb2.py +29 -0
- streamlit/proto/GitInfo_pb2.pyi +83 -0
- streamlit/proto/GraphVizChart_pb2.py +27 -0
- streamlit/proto/GraphVizChart_pb2.pyi +53 -0
- streamlit/proto/Heading_pb2.py +27 -0
- streamlit/proto/Heading_pb2.pyi +56 -0
- streamlit/proto/Html_pb2.py +27 -0
- streamlit/proto/Html_pb2.pyi +42 -0
- streamlit/proto/IFrame_pb2.py +27 -0
- streamlit/proto/IFrame_pb2.pyi +59 -0
- streamlit/proto/Image_pb2.py +29 -0
- streamlit/proto/Image_pb2.pyi +84 -0
- streamlit/proto/Json_pb2.py +27 -0
- streamlit/proto/Json_pb2.pyi +53 -0
- streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
- streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
- streamlit/proto/LinkButton_pb2.py +27 -0
- streamlit/proto/LinkButton_pb2.pyi +58 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +51 -0
- streamlit/proto/Markdown_pb2.py +29 -0
- streamlit/proto/Markdown_pb2.pyi +86 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +101 -0
- streamlit/proto/MetricsEvent_pb2.py +30 -0
- streamlit/proto/MetricsEvent_pb2.pyi +200 -0
- streamlit/proto/MultiSelect_pb2.py +28 -0
- streamlit/proto/MultiSelect_pb2.pyi +81 -0
- streamlit/proto/NamedDataSet_pb2.py +28 -0
- streamlit/proto/NamedDataSet_pb2.pyi +59 -0
- streamlit/proto/Navigation_pb2.py +30 -0
- streamlit/proto/Navigation_pb2.pyi +84 -0
- streamlit/proto/NewSession_pb2.py +51 -0
- streamlit/proto/NewSession_pb2.pyi +481 -0
- streamlit/proto/NumberInput_pb2.py +30 -0
- streamlit/proto/NumberInput_pb2.pyi +121 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +126 -0
- streamlit/proto/PageInfo_pb2.py +27 -0
- streamlit/proto/PageInfo_pb2.pyi +43 -0
- streamlit/proto/PageLink_pb2.py +27 -0
- streamlit/proto/PageLink_pb2.pyi +63 -0
- streamlit/proto/PageNotFound_pb2.py +27 -0
- streamlit/proto/PageNotFound_pb2.pyi +42 -0
- streamlit/proto/PageProfile_pb2.py +31 -0
- streamlit/proto/PageProfile_pb2.pyi +127 -0
- streamlit/proto/PagesChanged_pb2.py +28 -0
- streamlit/proto/PagesChanged_pb2.pyi +48 -0
- streamlit/proto/ParentMessage_pb2.py +27 -0
- streamlit/proto/ParentMessage_pb2.pyi +46 -0
- streamlit/proto/PlotlyChart_pb2.py +31 -0
- streamlit/proto/PlotlyChart_pb2.pyi +131 -0
- streamlit/proto/Progress_pb2.py +27 -0
- streamlit/proto/Progress_pb2.pyi +43 -0
- streamlit/proto/Radio_pb2.py +28 -0
- streamlit/proto/Radio_pb2.pyi +84 -0
- streamlit/proto/RootContainer_pb2.py +27 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +28 -0
- streamlit/proto/Selectbox_pb2.pyi +80 -0
- streamlit/proto/SessionEvent_pb2.py +28 -0
- streamlit/proto/SessionEvent_pb2.pyi +62 -0
- streamlit/proto/SessionStatus_pb2.py +27 -0
- streamlit/proto/SessionStatus_pb2.pyi +57 -0
- streamlit/proto/Skeleton_pb2.py +29 -0
- streamlit/proto/Skeleton_pb2.pyi +71 -0
- streamlit/proto/Slider_pb2.py +32 -0
- streamlit/proto/Slider_pb2.pyi +142 -0
- streamlit/proto/Snow_pb2.py +27 -0
- streamlit/proto/Snow_pb2.pyi +43 -0
- streamlit/proto/Spinner_pb2.py +27 -0
- streamlit/proto/Spinner_pb2.pyi +49 -0
- streamlit/proto/TextArea_pb2.py +28 -0
- streamlit/proto/TextArea_pb2.pyi +80 -0
- streamlit/proto/TextInput_pb2.py +30 -0
- streamlit/proto/TextInput_pb2.pyi +107 -0
- streamlit/proto/Text_pb2.py +27 -0
- streamlit/proto/Text_pb2.pyi +46 -0
- streamlit/proto/TimeInput_pb2.py +28 -0
- streamlit/proto/TimeInput_pb2.pyi +74 -0
- streamlit/proto/Toast_pb2.py +27 -0
- streamlit/proto/Toast_pb2.pyi +45 -0
- streamlit/proto/VegaLiteChart_pb2.py +29 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
- streamlit/proto/Video_pb2.py +31 -0
- streamlit/proto/Video_pb2.pyi +117 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +126 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +60 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +982 -0
- streamlit/runtime/caching/__init__.py +98 -0
- streamlit/runtime/caching/cache_data_api.py +665 -0
- streamlit/runtime/caching/cache_errors.py +142 -0
- streamlit/runtime/caching/cache_resource_api.py +527 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +523 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +637 -0
- streamlit/runtime/caching/legacy_cache_api.py +169 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/connection_factory.py +436 -0
- streamlit/runtime/context.py +280 -0
- streamlit/runtime/credentials.py +364 -0
- streamlit/runtime/forward_msg_cache.py +296 -0
- streamlit/runtime/forward_msg_queue.py +240 -0
- streamlit/runtime/fragment.py +477 -0
- streamlit/runtime/media_file_manager.py +234 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +181 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +138 -0
- streamlit/runtime/metrics_util.py +486 -0
- streamlit/runtime/pages_manager.py +165 -0
- streamlit/runtime/runtime.py +792 -0
- streamlit/runtime/runtime_util.py +106 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +159 -0
- streamlit/runtime/scriptrunner/magic.py +273 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +756 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
- streamlit/runtime/secrets.py +534 -0
- streamlit/runtime/session_manager.py +394 -0
- streamlit/runtime/state/__init__.py +41 -0
- streamlit/runtime/state/common.py +191 -0
- streamlit/runtime/state/query_params.py +205 -0
- streamlit/runtime/state/query_params_proxy.py +218 -0
- streamlit/runtime/state/safe_session_state.py +138 -0
- streamlit/runtime/state/session_state.py +772 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +135 -0
- streamlit/runtime/stats.py +109 -0
- streamlit/runtime/uploaded_file_manager.py +148 -0
- streamlit/runtime/websocket_session_manager.py +167 -0
- streamlit/source_util.py +98 -0
- streamlit/static/favicon.png +0 -0
- streamlit/static/index.html +61 -0
- streamlit/static/static/css/index.Bmkmz40k.css +1 -0
- streamlit/static/static/css/index.DpJG_94W.css +1 -0
- streamlit/static/static/css/index.DzuxGC_t.css +1 -0
- streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
- streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
- streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
- streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
- streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
- streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
- streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
- streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
- streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
- streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
- streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
- streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
- streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
- streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
- streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
- streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
- streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
- streamlit/static/static/js/index.08vcOOvb.js +1 -0
- streamlit/static/static/js/index.0uqKfJUS.js +1 -0
- streamlit/static/static/js/index.B02M5u69.js +203 -0
- streamlit/static/static/js/index.B7mcZKMx.js +1 -0
- streamlit/static/static/js/index.BAQDHFA_.js +1 -0
- streamlit/static/static/js/index.BI60cMVr.js +2 -0
- streamlit/static/static/js/index.BLug2inK.js +1 -0
- streamlit/static/static/js/index.BM6TMY8g.js +2 -0
- streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
- streamlit/static/static/js/index.BZqa87a1.js +2 -0
- streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
- streamlit/static/static/js/index.BgVMiY_P.js +197 -0
- streamlit/static/static/js/index.BtuGy7By.js +6 -0
- streamlit/static/static/js/index.BuDuBmrs.js +1 -0
- streamlit/static/static/js/index.BvXU2oKV.js +1 -0
- streamlit/static/static/js/index.BxcwPacT.js +73 -0
- streamlit/static/static/js/index.CWX8KB81.js +1 -0
- streamlit/static/static/js/index.CXzZTo_q.js +1 -0
- streamlit/static/static/js/index.CcRWp_KL.js +1 -0
- streamlit/static/static/js/index.Cd-_xe55.js +3 -0
- streamlit/static/static/js/index.CdG2PXln.js +4537 -0
- streamlit/static/static/js/index.CjXvXmcP.js +1 -0
- streamlit/static/static/js/index.D1HZENZx.js +776 -0
- streamlit/static/static/js/index.D21Efo64.js +1617 -0
- streamlit/static/static/js/index.D9WgGVBx.js +7 -0
- streamlit/static/static/js/index.DEcsHtvb.js +12 -0
- streamlit/static/static/js/index.DFeMfr_K.js +1 -0
- streamlit/static/static/js/index.DHFBoItz.js +1 -0
- streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
- streamlit/static/static/js/index.DmuRkekN.js +3855 -0
- streamlit/static/static/js/index.Do6eY8sf.js +1 -0
- streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
- streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
- streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
- streamlit/static/static/js/index.H1U1IC_d.js +3 -0
- streamlit/static/static/js/index.g6p_4DPr.js +1 -0
- streamlit/static/static/js/index.g9x_GKss.js +1 -0
- streamlit/static/static/js/index.zo9jm08y.js +1 -0
- streamlit/static/static/js/input.DnaFglHq.js +2 -0
- streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
- streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
- streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
- streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
- streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
- streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
- streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
- streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
- streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
- streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
- streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
- streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
- streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
- streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
- streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
- streamlit/static/static/js/value.CgPGBV_l.js +1 -0
- streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
- streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
- streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
- streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
- streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
- streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
- streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
- streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
- streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
- streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
- streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
- streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
- streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
- streamlit/string_util.py +203 -0
- streamlit/temporary_directory.py +56 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1050 -0
- streamlit/testing/v1/element_tree.py +2083 -0
- streamlit/testing/v1/local_script_runner.py +180 -0
- streamlit/testing/v1/util.py +53 -0
- streamlit/time_util.py +75 -0
- streamlit/type_util.py +460 -0
- streamlit/url_util.py +122 -0
- streamlit/user_info.py +519 -0
- streamlit/util.py +72 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2869 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +406 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +233 -0
- streamlit/watcher/path_watcher.py +185 -0
- streamlit/watcher/polling_path_watcher.py +124 -0
- streamlit/watcher/util.py +207 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +353 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +369 -0
- streamlit/web/server/__init__.py +26 -0
- streamlit/web/server/app_static_file_handler.py +93 -0
- streamlit/web/server/authlib_tornado_integration.py +60 -0
- streamlit/web/server/browser_websocket_handler.py +246 -0
- streamlit/web/server/component_request_handler.py +116 -0
- streamlit/web/server/media_file_handler.py +141 -0
- streamlit/web/server/oauth_authlib_routes.py +176 -0
- streamlit/web/server/oidc_mixin.py +108 -0
- streamlit/web/server/routes.py +295 -0
- streamlit/web/server/server.py +479 -0
- streamlit/web/server/server_util.py +161 -0
- streamlit/web/server/stats_request_handler.py +95 -0
- streamlit/web/server/upload_file_request_handler.py +137 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
streamlit/emojis.py
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
"""A generated list with all existing emojis.
|
16
|
+
|
17
|
+
DO NOT EDIT MANUALLY! The list in this file is generated by `scripts/update-emojis.py`.
|
18
|
+
|
19
|
+
This module gets lazy-loaded only when an emoji check is required (see string_util).
|
20
|
+
"""
|
21
|
+
|
22
|
+
import re
|
23
|
+
|
24
|
+
# fmt: off
|
25
|
+
### EMOJIS START ###
|
26
|
+
ALL_EMOJIS = {"#⃣", "#️⃣", "*⃣", "*️⃣", "0⃣", "0️⃣", "1⃣", "1️⃣", "2⃣", "2️⃣", "3⃣", "3️⃣", "4⃣", "4️⃣", "5⃣", "5️⃣", "6⃣", "6️⃣", "7⃣", "7️⃣", "8⃣", "8️⃣", "9⃣", "9️⃣", "©", "©️", "®", "®️", "‼", "‼️", "⁉", "⁉️", "™", "™️", "ℹ", "ℹ️", "↔", "↔️", "↕", "↕️", "↖", "↖️", "↗", "↗️", "↘", "↘️", "↙", "↙️", "↩", "↩️", "↪", "↪️", "⌚", "⌛", "⌨", "⌨️", "⏏", "⏏️", "⏩", "⏪", "⏫", "⏬", "⏭", "⏭️", "⏮", "⏮️", "⏯", "⏯️", "⏰", "⏱", "⏱️", "⏲", "⏲️", "⏳", "⏸", "⏸️", "⏹", "⏹️", "⏺", "⏺️", "Ⓜ", "Ⓜ️", "▪", "▪️", "▫", "▫️", "▶", "▶️", "◀", "◀️", "◻", "◻️", "◼", "◼️", "◽", "◾", "☀", "☀️", "☁", "☁️", "☂", "☂️", "☃", "☃️", "☄", "☄️", "☎", "☎️", "☑", "☑️", "☔", "☕", "☘", "☘️", "☝", "☝️", "☝🏻", "☝🏼", "☝🏽", "☝🏾", "☝🏿", "☠", "☠️", "☢", "☢️", "☣", "☣️", "☦", "☦️", "☪", "☪️", "☮", "☮️", "☯", "☯️", "☸", "☸️", "☹", "☹️", "☺", "☺️", "♀", "♀️", "♂", "♂️", "♈", "♉", "♊", "♋", "♌", "♍", "♎", "♏", "♐", "♑", "♒", "♓", "♟", "♟️", "♠", "♠️", "♣", "♣️", "♥", "♥️", "♦", "♦️", "♨", "♨️", "♻", "♻️", "♾", "♾️", "♿", "⚒", "⚒️", "⚓", "⚔", "⚔️", "⚕", "⚕️", "⚖", "⚖️", "⚗", "⚗️", "⚙", "⚙️", "⚛", "⚛️", "⚜", "⚜️", "⚠", "⚠️", "⚡", "⚧", "⚧️", "⚪", "⚫", "⚰", "⚰️", "⚱", "⚱️", "⚽", "⚾", "⛄", "⛅", "⛈", "⛈️", "⛎", "⛏", "⛏️", "⛑", "⛑️", "⛓", "⛓💥", "⛓️", "⛓️💥", "⛔", "⛩", "⛩️", "⛪", "⛰", "⛰️", "⛱", "⛱️", "⛲", "⛳", "⛴", "⛴️", "⛵", "⛷", "⛷️", "⛸", "⛸️", "⛹", "⛹♀", "⛹♀️", "⛹♂", "⛹♂️", "⛹️", "⛹️♀", "⛹️♀️", "⛹️♂", "⛹️♂️", "⛹🏻", "⛹🏻♀", "⛹🏻♀️", "⛹🏻♂", "⛹🏻♂️", "⛹🏼", "⛹🏼♀", "⛹🏼♀️", "⛹🏼♂", "⛹🏼♂️", "⛹🏽", "⛹🏽♀", "⛹🏽♀️", "⛹🏽♂", "⛹🏽♂️", "⛹🏾", "⛹🏾♀", "⛹🏾♀️", "⛹🏾♂", "⛹🏾♂️", "⛹🏿", "⛹🏿♀", "⛹🏿♀️", "⛹🏿♂", "⛹🏿♂️", "⛺", "⛽", "✂", "✂️", "✅", "✈", "✈️", "✉", "✉️", "✊", "✊🏻", "✊🏼", "✊🏽", "✊🏾", "✊🏿", "✋", "✋🏻", "✋🏼", "✋🏽", "✋🏾", "✋🏿", "✌", "✌️", "✌🏻", "✌🏼", "✌🏽", "✌🏾", "✌🏿", "✍", "✍️", "✍🏻", "✍🏼", "✍🏽", "✍🏾", "✍🏿", "✏", "✏️", "✒", "✒️", "✔", "✔️", "✖", "✖️", "✝", "✝️", "✡", "✡️", "✨", "✳", "✳️", "✴", "✴️", "❄", "❄️", "❇", "❇️", "❌", "❎", "❓", "❔", "❕", "❗", "❣", "❣️", "❤", "❤🔥", "❤🩹", "❤️", "❤️🔥", "❤️🩹", "➕", "➖", "➗", "➡", "➡️", "➰", "➿", "⤴", "⤴️", "⤵", "⤵️", "⬅", "⬅️", "⬆", "⬆️", "⬇", "⬇️", "⬛", "⬜", "⭐", "⭕", "〰", "〰️", "〽", "〽️", "㊗", "㊗️", "㊙", "㊙️", "🀄", "🃏", "🅰", "🅰️", "🅱", "🅱️", "🅾", "🅾️", "🅿", "🅿️", "🆎", "🆑", "🆒", "🆓", "🆔", "🆕", "🆖", "🆗", "🆘", "🆙", "🆚", "🇦🇨", "🇦🇩", "🇦🇪", "🇦🇫", "🇦🇬", "🇦🇮", "🇦🇱", "🇦🇲", "🇦🇴", "🇦🇶", "🇦🇷", "🇦🇸", "🇦🇹", "🇦🇺", "🇦🇼", "🇦🇽", "🇦🇿", "🇧🇦", "🇧🇧", "🇧🇩", "🇧🇪", "🇧🇫", "🇧🇬", "🇧🇭", "🇧🇮", "🇧🇯", "🇧🇱", "🇧🇲", "🇧🇳", "🇧🇴", "🇧🇶", "🇧🇷", "🇧🇸", "🇧🇹", "🇧🇻", "🇧🇼", "🇧🇾", "🇧🇿", "🇨🇦", "🇨🇨", "🇨🇩", "🇨🇫", "🇨🇬", "🇨🇭", "🇨🇮", "🇨🇰", "🇨🇱", "🇨🇲", "🇨🇳", "🇨🇴", "🇨🇵", "🇨🇶", "🇨🇷", "🇨🇺", "🇨🇻", "🇨🇼", "🇨🇽", "🇨🇾", "🇨🇿", "🇩🇪", "🇩🇬", "🇩🇯", "🇩🇰", "🇩🇲", "🇩🇴", "🇩🇿", "🇪🇦", "🇪🇨", "🇪🇪", "🇪🇬", "🇪🇭", "🇪🇷", "🇪🇸", "🇪🇹", "🇪🇺", "🇫🇮", "🇫🇯", "🇫🇰", "🇫🇲", "🇫🇴", "🇫🇷", "🇬🇦", "🇬🇧", "🇬🇩", "🇬🇪", "🇬🇫", "🇬🇬", "🇬🇭", "🇬🇮", "🇬🇱", "🇬🇲", "🇬🇳", "🇬🇵", "🇬🇶", "🇬🇷", "🇬🇸", "🇬🇹", "🇬🇺", "🇬🇼", "🇬🇾", "🇭🇰", "🇭🇲", "🇭🇳", "🇭🇷", "🇭🇹", "🇭🇺", "🇮🇨", "🇮🇩", "🇮🇪", "🇮🇱", "🇮🇲", "🇮🇳", "🇮🇴", "🇮🇶", "🇮🇷", "🇮🇸", "🇮🇹", "🇯🇪", "🇯🇲", "🇯🇴", "🇯🇵", "🇰🇪", "🇰🇬", "🇰🇭", "🇰🇮", "🇰🇲", "🇰🇳", "🇰🇵", "🇰🇷", "🇰🇼", "🇰🇾", "🇰🇿", "🇱🇦", "🇱🇧", "🇱🇨", "🇱🇮", "🇱🇰", "🇱🇷", "🇱🇸", "🇱🇹", "🇱🇺", "🇱🇻", "🇱🇾", "🇲🇦", "🇲🇨", "🇲🇩", "🇲🇪", "🇲🇫", "🇲🇬", "🇲🇭", "🇲🇰", "🇲🇱", "🇲🇲", "🇲🇳", "🇲🇴", "🇲🇵", "🇲🇶", "🇲🇷", "🇲🇸", "🇲🇹", "🇲🇺", "🇲🇻", "🇲🇼", "🇲🇽", "🇲🇾", "🇲🇿", "🇳🇦", "🇳🇨", "🇳🇪", "🇳🇫", "🇳🇬", "🇳🇮", "🇳🇱", "🇳🇴", "🇳🇵", "🇳🇷", "🇳🇺", "🇳🇿", "🇴🇲", "🇵🇦", "🇵🇪", "🇵🇫", "🇵🇬", "🇵🇭", "🇵🇰", "🇵🇱", "🇵🇲", "🇵🇳", "🇵🇷", "🇵🇸", "🇵🇹", "🇵🇼", "🇵🇾", "🇶🇦", "🇷🇪", "🇷🇴", "🇷🇸", "🇷🇺", "🇷🇼", "🇸🇦", "🇸🇧", "🇸🇨", "🇸🇩", "🇸🇪", "🇸🇬", "🇸🇭", "🇸🇮", "🇸🇯", "🇸🇰", "🇸🇱", "🇸🇲", "🇸🇳", "🇸🇴", "🇸🇷", "🇸🇸", "🇸🇹", "🇸🇻", "🇸🇽", "🇸🇾", "🇸🇿", "🇹🇦", "🇹🇨", "🇹🇩", "🇹🇫", "🇹🇬", "🇹🇭", "🇹🇯", "🇹🇰", "🇹🇱", "🇹🇲", "🇹🇳", "🇹🇴", "🇹🇷", "🇹🇹", "🇹🇻", "🇹🇼", "🇹🇿", "🇺🇦", "🇺🇬", "🇺🇲", "🇺🇳", "🇺🇸", "🇺🇾", "🇺🇿", "🇻🇦", "🇻🇨", "🇻🇪", "🇻🇬", "🇻🇮", "🇻🇳", "🇻🇺", "🇼🇫", "🇼🇸", "🇽🇰", "🇾🇪", "🇾🇹", "🇿🇦", "🇿🇲", "🇿🇼", "🈁", "🈂", "🈂️", "🈚", "🈯", "🈲", "🈳", "🈴", "🈵", "🈶", "🈷", "🈷️", "🈸", "🈹", "🈺", "🉐", "🉑", "🌀", "🌁", "🌂", "🌃", "🌄", "🌅", "🌆", "🌇", "🌈", "🌉", "🌊", "🌋", "🌌", "🌍", "🌎", "🌏", "🌐", "🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘", "🌙", "🌚", "🌛", "🌜", "🌝", "🌞", "🌟", "🌠", "🌡", "🌡️", "🌤", "🌤️", "🌥", "🌥️", "🌦", "🌦️", "🌧", "🌧️", "🌨", "🌨️", "🌩", "🌩️", "🌪", "🌪️", "🌫", "🌫️", "🌬", "🌬️", "🌭", "🌮", "🌯", "🌰", "🌱", "🌲", "🌳", "🌴", "🌵", "🌶", "🌶️", "🌷", "🌸", "🌹", "🌺", "🌻", "🌼", "🌽", "🌾", "🌿", "🍀", "🍁", "🍂", "🍃", "🍄", "🍄🟫", "🍅", "🍆", "🍇", "🍈", "🍉", "🍊", "🍋", "🍋🟩", "🍌", "🍍", "🍎", "🍏", "🍐", "🍑", "🍒", "🍓", "🍔", "🍕", "🍖", "🍗", "🍘", "🍙", "🍚", "🍛", "🍜", "🍝", "🍞", "🍟", "🍠", "🍡", "🍢", "🍣", "🍤", "🍥", "🍦", "🍧", "🍨", "🍩", "🍪", "🍫", "🍬", "🍭", "🍮", "🍯", "🍰", "🍱", "🍲", "🍳", "🍴", "🍵", "🍶", "🍷", "🍸", "🍹", "🍺", "🍻", "🍼", "🍽", "🍽️", "🍾", "🍿", "🎀", "🎁", "🎂", "🎃", "🎄", "🎅", "🎅🏻", "🎅🏼", "🎅🏽", "🎅🏾", "🎅🏿", "🎆", "🎇", "🎈", "🎉", "🎊", "🎋", "🎌", "🎍", "🎎", "🎏", "🎐", "🎑", "🎒", "🎓", "🎖", "🎖️", "🎗", "🎗️", "🎙", "🎙️", "🎚", "🎚️", "🎛", "🎛️", "🎞", "🎞️", "🎟", "🎟️", "🎠", "🎡", "🎢", "🎣", "🎤", "🎥", "🎦", "🎧", "🎨", "🎩", "🎪", "🎫", "🎬", "🎭", "🎮", "🎯", "🎰", "🎱", "🎲", "🎳", "🎴", "🎵", "🎶", "🎷", "🎸", "🎹", "🎺", "🎻", "🎼", "🎽", "🎾", "🎿", "🏀", "🏁", "🏂", "🏂🏻", "🏂🏼", "🏂🏽", "🏂🏾", "🏂🏿", "🏃", "🏃♀", "🏃♀➡", "🏃♀➡️", "🏃♀️", "🏃♀️➡", "🏃♀️➡️", "🏃♂", "🏃♂➡", "🏃♂➡️", "🏃♂️", "🏃♂️➡", "🏃♂️➡️", "🏃➡", "🏃➡️", "🏃🏻", "🏃🏻♀", "🏃🏻♀➡", "🏃🏻♀➡️", "🏃🏻♀️", "🏃🏻♀️➡", "🏃🏻♀️➡️", "🏃🏻♂", "🏃🏻♂➡", "🏃🏻♂➡️", "🏃🏻♂️", "🏃🏻♂️➡", "🏃🏻♂️➡️", "🏃🏻➡", "🏃🏻➡️", "🏃🏼", "🏃🏼♀", "🏃🏼♀➡", "🏃🏼♀➡️", "🏃🏼♀️", "🏃🏼♀️➡", "🏃🏼♀️➡️", "🏃🏼♂", "🏃🏼♂➡", "🏃🏼♂➡️", "🏃🏼♂️", "🏃🏼♂️➡", "🏃🏼♂️➡️", "🏃🏼➡", "🏃🏼➡️", "🏃🏽", "🏃🏽♀", "🏃🏽♀➡", "🏃🏽♀➡️", "🏃🏽♀️", "🏃🏽♀️➡", "🏃🏽♀️➡️", "🏃🏽♂", "🏃🏽♂➡", "🏃🏽♂➡️", "🏃🏽♂️", "🏃🏽♂️➡", "🏃🏽♂️➡️", "🏃🏽➡", "🏃🏽➡️", "🏃🏾", "🏃🏾♀", "🏃🏾♀➡", "🏃🏾♀➡️", "🏃🏾♀️", "🏃🏾♀️➡", "🏃🏾♀️➡️", "🏃🏾♂", "🏃🏾♂➡", "🏃🏾♂➡️", "🏃🏾♂️", "🏃🏾♂️➡", "🏃🏾♂️➡️", "🏃🏾➡", "🏃🏾➡️", "🏃🏿", "🏃🏿♀", "🏃🏿♀➡", "🏃🏿♀➡️", "🏃🏿♀️", "🏃🏿♀️➡", "🏃🏿♀️➡️", "🏃🏿♂", "🏃🏿♂➡", "🏃🏿♂➡️", "🏃🏿♂️", "🏃🏿♂️➡", "🏃🏿♂️➡️", "🏃🏿➡", "🏃🏿➡️", "🏄", "🏄♀", "🏄♀️", "🏄♂", "🏄♂️", "🏄🏻", "🏄🏻♀", "🏄🏻♀️", "🏄🏻♂", "🏄🏻♂️", "🏄🏼", "🏄🏼♀", "🏄🏼♀️", "🏄🏼♂", "🏄🏼♂️", "🏄🏽", "🏄🏽♀", "🏄🏽♀️", "🏄🏽♂", "🏄🏽♂️", "🏄🏾", "🏄🏾♀", "🏄🏾♀️", "🏄🏾♂", "🏄🏾♂️", "🏄🏿", "🏄🏿♀", "🏄🏿♀️", "🏄🏿♂", "🏄🏿♂️", "🏅", "🏆", "🏇", "🏇🏻", "🏇🏼", "🏇🏽", "🏇🏾", "🏇🏿", "🏈", "🏉", "🏊", "🏊♀", "🏊♀️", "🏊♂", "🏊♂️", "🏊🏻", "🏊🏻♀", "🏊🏻♀️", "🏊🏻♂", "🏊🏻♂️", "🏊🏼", "🏊🏼♀", "🏊🏼♀️", "🏊🏼♂", "🏊🏼♂️", "🏊🏽", "🏊🏽♀", "🏊🏽♀️", "🏊🏽♂", "🏊🏽♂️", "🏊🏾", "🏊🏾♀", "🏊🏾♀️", "🏊🏾♂", "🏊🏾♂️", "🏊🏿", "🏊🏿♀", "🏊🏿♀️", "🏊🏿♂", "🏊🏿♂️", "🏋", "🏋♀", "🏋♀️", "🏋♂", "🏋♂️", "🏋️", "🏋️♀", "🏋️♀️", "🏋️♂", "🏋️♂️", "🏋🏻", "🏋🏻♀", "🏋🏻♀️", "🏋🏻♂", "🏋🏻♂️", "🏋🏼", "🏋🏼♀", "🏋🏼♀️", "🏋🏼♂", "🏋🏼♂️", "🏋🏽", "🏋🏽♀", "🏋🏽♀️", "🏋🏽♂", "🏋🏽♂️", "🏋🏾", "🏋🏾♀", "🏋🏾♀️", "🏋🏾♂", "🏋🏾♂️", "🏋🏿", "🏋🏿♀", "🏋🏿♀️", "🏋🏿♂", "🏋🏿♂️", "🏌", "🏌♀", "🏌♀️", "🏌♂", "🏌♂️", "🏌️", "🏌️♀", "🏌️♀️", "🏌️♂", "🏌️♂️", "🏌🏻", "🏌🏻♀", "🏌🏻♀️", "🏌🏻♂", "🏌🏻♂️", "🏌🏼", "🏌🏼♀", "🏌🏼♀️", "🏌🏼♂", "🏌🏼♂️", "🏌🏽", "🏌🏽♀", "🏌🏽♀️", "🏌🏽♂", "🏌🏽♂️", "🏌🏾", "🏌🏾♀", "🏌🏾♀️", "🏌🏾♂", "🏌🏾♂️", "🏌🏿", "🏌🏿♀", "🏌🏿♀️", "🏌🏿♂", "🏌🏿♂️", "🏍", "🏍️", "🏎", "🏎️", "🏏", "🏐", "🏑", "🏒", "🏓", "🏔", "🏔️", "🏕", "🏕️", "🏖", "🏖️", "🏗", "🏗️", "🏘", "🏘️", "🏙", "🏙️", "🏚", "🏚️", "🏛", "🏛️", "🏜", "🏜️", "🏝", "🏝️", "🏞", "🏞️", "🏟", "🏟️", "🏠", "🏡", "🏢", "🏣", "🏤", "🏥", "🏦", "🏧", "🏨", "🏩", "🏪", "🏫", "🏬", "🏭", "🏮", "🏯", "🏰", "🏳", "🏳⚧", "🏳⚧️", "🏳🌈", "🏳️", "🏳️⚧", "🏳️⚧️", "🏳️🌈", "🏴", "🏴☠", "🏴☠️", "🏴", "🏴", "🏴", "🏵", "🏵️", "🏷", "🏷️", "🏸", "🏹", "🏺", "🏻", "🏼", "🏽", "🏾", "🏿", "🐀", "🐁", "🐂", "🐃", "🐄", "🐅", "🐆", "🐇", "🐈", "🐈⬛", "🐉", "🐊", "🐋", "🐌", "🐍", "🐎", "🐏", "🐐", "🐑", "🐒", "🐓", "🐔", "🐕", "🐕🦺", "🐖", "🐗", "🐘", "🐙", "🐚", "🐛", "🐜", "🐝", "🐞", "🐟", "🐠", "🐡", "🐢", "🐣", "🐤", "🐥", "🐦", "🐦⬛", "🐦🔥", "🐧", "🐨", "🐩", "🐪", "🐫", "🐬", "🐭", "🐮", "🐯", "🐰", "🐱", "🐲", "🐳", "🐴", "🐵", "🐶", "🐷", "🐸", "🐹", "🐺", "🐻", "🐻❄", "🐻❄️", "🐼", "🐽", "🐾", "🐿", "🐿️", "👀", "👁", "👁🗨", "👁🗨️", "👁️", "👁️🗨", "👁️🗨️", "👂", "👂🏻", "👂🏼", "👂🏽", "👂🏾", "👂🏿", "👃", "👃🏻", "👃🏼", "👃🏽", "👃🏾", "👃🏿", "👄", "👅", "👆", "👆🏻", "👆🏼", "👆🏽", "👆🏾", "👆🏿", "👇", "👇🏻", "👇🏼", "👇🏽", "👇🏾", "👇🏿", "👈", "👈🏻", "👈🏼", "👈🏽", "👈🏾", "👈🏿", "👉", "👉🏻", "👉🏼", "👉🏽", "👉🏾", "👉🏿", "👊", "👊🏻", "👊🏼", "👊🏽", "👊🏾", "👊🏿", "👋", "👋🏻", "👋🏼", "👋🏽", "👋🏾", "👋🏿", "👌", "👌🏻", "👌🏼", "👌🏽", "👌🏾", "👌🏿", "👍", "👍🏻", "👍🏼", "👍🏽", "👍🏾", "👍🏿", "👎", "👎🏻", "👎🏼", "👎🏽", "👎🏾", "👎🏿", "👏", "👏🏻", "👏🏼", "👏🏽", "👏🏾", "👏🏿", "👐", "👐🏻", "👐🏼", "👐🏽", "👐🏾", "👐🏿", "👑", "👒", "👓", "👔", "👕", "👖", "👗", "👘", "👙", "👚", "👛", "👜", "👝", "👞", "👟", "👠", "👡", "👢", "👣", "👤", "👥", "👦", "👦🏻", "👦🏼", "👦🏽", "👦🏾", "👦🏿", "👧", "👧🏻", "👧🏼", "👧🏽", "👧🏾", "👧🏿", "👨", "👨⚕", "👨⚕️", "👨⚖", "👨⚖️", "👨✈", "👨✈️", "👨❤👨", "👨❤💋👨", "👨❤️👨", "👨❤️💋👨", "👨🌾", "👨🍳", "👨🍼", "👨🎓", "👨🎤", "👨🎨", "👨🏫", "👨🏭", "👨👦", "👨👦👦", "👨👧", "👨👧👦", "👨👧👧", "👨👨👦", "👨👨👦👦", "👨👨👧", "👨👨👧👦", "👨👨👧👧", "👨👩👦", "👨👩👦👦", "👨👩👧", "👨👩👧👦", "👨👩👧👧", "👨💻", "👨💼", "👨🔧", "👨🔬", "👨🚀", "👨🚒", "👨🦯", "👨🦯➡", "👨🦯➡️", "👨🦰", "👨🦱", "👨🦲", "👨🦳", "👨🦼", "👨🦼➡", "👨🦼➡️", "👨🦽", "👨🦽➡", "👨🦽➡️", "👨🏻", "👨🏻⚕", "👨🏻⚕️", "👨🏻⚖", "👨🏻⚖️", "👨🏻✈", "👨🏻✈️", "👨🏻❤👨🏻", "👨🏻❤👨🏼", "👨🏻❤👨🏽", "👨🏻❤👨🏾", "👨🏻❤👨🏿", "👨🏻❤💋👨🏻", "👨🏻❤💋👨🏼", "👨🏻❤💋👨🏽", "👨🏻❤💋👨🏾", "👨🏻❤💋👨🏿", "👨🏻❤️👨🏻", "👨🏻❤️👨🏼", "👨🏻❤️👨🏽", "👨🏻❤️👨🏾", "👨🏻❤️👨🏿", "👨🏻❤️💋👨🏻", "👨🏻❤️💋👨🏼", "👨🏻❤️💋👨🏽", "👨🏻❤️💋👨🏾", "👨🏻❤️💋👨🏿", "👨🏻🌾", "👨🏻🍳", "👨🏻🍼", "👨🏻🎓", "👨🏻🎤", "👨🏻🎨", "👨🏻🏫", "👨🏻🏭", "👨🏻💻", "👨🏻💼", "👨🏻🔧", "👨🏻🔬", "👨🏻🚀", "👨🏻🚒", "👨🏻🤝👨🏼", "👨🏻🤝👨🏽", "👨🏻🤝👨🏾", "👨🏻🤝👨🏿", "👨🏻🦯", "👨🏻🦯➡", "👨🏻🦯➡️", "👨🏻🦰", "👨🏻🦱", "👨🏻🦲", "👨🏻🦳", "👨🏻🦼", "👨🏻🦼➡", "👨🏻🦼➡️", "👨🏻🦽", "👨🏻🦽➡", "👨🏻🦽➡️", "👨🏼", "👨🏼⚕", "👨🏼⚕️", "👨🏼⚖", "👨🏼⚖️", "👨🏼✈", "👨🏼✈️", "👨🏼❤👨🏻", "👨🏼❤👨🏼", "👨🏼❤👨🏽", "👨🏼❤👨🏾", "👨🏼❤👨🏿", "👨🏼❤💋👨🏻", "👨🏼❤💋👨🏼", "👨🏼❤💋👨🏽", "👨🏼❤💋👨🏾", "👨🏼❤💋👨🏿", "👨🏼❤️👨🏻", "👨🏼❤️👨🏼", "👨🏼❤️👨🏽", "👨🏼❤️👨🏾", "👨🏼❤️👨🏿", "👨🏼❤️💋👨🏻", "👨🏼❤️💋👨🏼", "👨🏼❤️💋👨🏽", "👨🏼❤️💋👨🏾", "👨🏼❤️💋👨🏿", "👨🏼🌾", "👨🏼🍳", "👨🏼🍼", "👨🏼🎓", "👨🏼🎤", "👨🏼🎨", "👨🏼🏫", "👨🏼🏭", "👨🏼💻", "👨🏼💼", "👨🏼🔧", "👨🏼🔬", "👨🏼🚀", "👨🏼🚒", "👨🏼🤝👨🏻", "👨🏼🤝👨🏽", "👨🏼🤝👨🏾", "👨🏼🤝👨🏿", "👨🏼🦯", "👨🏼🦯➡", "👨🏼🦯➡️", "👨🏼🦰", "👨🏼🦱", "👨🏼🦲", "👨🏼🦳", "👨🏼🦼", "👨🏼🦼➡", "👨🏼🦼➡️", "👨🏼🦽", "👨🏼🦽➡", "👨🏼🦽➡️", "👨🏽", "👨🏽⚕", "👨🏽⚕️", "👨🏽⚖", "👨🏽⚖️", "👨🏽✈", "👨🏽✈️", "👨🏽❤👨🏻", "👨🏽❤👨🏼", "👨🏽❤👨🏽", "👨🏽❤👨🏾", "👨🏽❤👨🏿", "👨🏽❤💋👨🏻", "👨🏽❤💋👨🏼", "👨🏽❤💋👨🏽", "👨🏽❤💋👨🏾", "👨🏽❤💋👨🏿", "👨🏽❤️👨🏻", "👨🏽❤️👨🏼", "👨🏽❤️👨🏽", "👨🏽❤️👨🏾", "👨🏽❤️👨🏿", "👨🏽❤️💋👨🏻", "👨🏽❤️💋👨🏼", "👨🏽❤️💋👨🏽", "👨🏽❤️💋👨🏾", "👨🏽❤️💋👨🏿", "👨🏽🌾", "👨🏽🍳", "👨🏽🍼", "👨🏽🎓", "👨🏽🎤", "👨🏽🎨", "👨🏽🏫", "👨🏽🏭", "👨🏽💻", "👨🏽💼", "👨🏽🔧", "👨🏽🔬", "👨🏽🚀", "👨🏽🚒", "👨🏽🤝👨🏻", "👨🏽🤝👨🏼", "👨🏽🤝👨🏾", "👨🏽🤝👨🏿", "👨🏽🦯", "👨🏽🦯➡", "👨🏽🦯➡️", "👨🏽🦰", "👨🏽🦱", "👨🏽🦲", "👨🏽🦳", "👨🏽🦼", "👨🏽🦼➡", "👨🏽🦼➡️", "👨🏽🦽", "👨🏽🦽➡", "👨🏽🦽➡️", "👨🏾", "👨🏾⚕", "👨🏾⚕️", "👨🏾⚖", "👨🏾⚖️", "👨🏾✈", "👨🏾✈️", "👨🏾❤👨🏻", "👨🏾❤👨🏼", "👨🏾❤👨🏽", "👨🏾❤👨🏾", "👨🏾❤👨🏿", "👨🏾❤💋👨🏻", "👨🏾❤💋👨🏼", "👨🏾❤💋👨🏽", "👨🏾❤💋👨🏾", "👨🏾❤💋👨🏿", "👨🏾❤️👨🏻", "👨🏾❤️👨🏼", "👨🏾❤️👨🏽", "👨🏾❤️👨🏾", "👨🏾❤️👨🏿", "👨🏾❤️💋👨🏻", "👨🏾❤️💋👨🏼", "👨🏾❤️💋👨🏽", "👨🏾❤️💋👨🏾", "👨🏾❤️💋👨🏿", "👨🏾🌾", "👨🏾🍳", "👨🏾🍼", "👨🏾🎓", "👨🏾🎤", "👨🏾🎨", "👨🏾🏫", "👨🏾🏭", "👨🏾💻", "👨🏾💼", "👨🏾🔧", "👨🏾🔬", "👨🏾🚀", "👨🏾🚒", "👨🏾🤝👨🏻", "👨🏾🤝👨🏼", "👨🏾🤝👨🏽", "👨🏾🤝👨🏿", "👨🏾🦯", "👨🏾🦯➡", "👨🏾🦯➡️", "👨🏾🦰", "👨🏾🦱", "👨🏾🦲", "👨🏾🦳", "👨🏾🦼", "👨🏾🦼➡", "👨🏾🦼➡️", "👨🏾🦽", "👨🏾🦽➡", "👨🏾🦽➡️", "👨🏿", "👨🏿⚕", "👨🏿⚕️", "👨🏿⚖", "👨🏿⚖️", "👨🏿✈", "👨🏿✈️", "👨🏿❤👨🏻", "👨🏿❤👨🏼", "👨🏿❤👨🏽", "👨🏿❤👨🏾", "👨🏿❤👨🏿", "👨🏿❤💋👨🏻", "👨🏿❤💋👨🏼", "👨🏿❤💋👨🏽", "👨🏿❤💋👨🏾", "👨🏿❤💋👨🏿", "👨🏿❤️👨🏻", "👨🏿❤️👨🏼", "👨🏿❤️👨🏽", "👨🏿❤️👨🏾", "👨🏿❤️👨🏿", "👨🏿❤️💋👨🏻", "👨🏿❤️💋👨🏼", "👨🏿❤️💋👨🏽", "👨🏿❤️💋👨🏾", "👨🏿❤️💋👨🏿", "👨🏿🌾", "👨🏿🍳", "👨🏿🍼", "👨🏿🎓", "👨🏿🎤", "👨🏿🎨", "👨🏿🏫", "👨🏿🏭", "👨🏿💻", "👨🏿💼", "👨🏿🔧", "👨🏿🔬", "👨🏿🚀", "👨🏿🚒", "👨🏿🤝👨🏻", "👨🏿🤝👨🏼", "👨🏿🤝👨🏽", "👨🏿🤝👨🏾", "👨🏿🦯", "👨🏿🦯➡", "👨🏿🦯➡️", "👨🏿🦰", "👨🏿🦱", "👨🏿🦲", "👨🏿🦳", "👨🏿🦼", "👨🏿🦼➡", "👨🏿🦼➡️", "👨🏿🦽", "👨🏿🦽➡", "👨🏿🦽➡️", "👩", "👩⚕", "👩⚕️", "👩⚖", "👩⚖️", "👩✈", "👩✈️", "👩❤👨", "👩❤👩", "👩❤💋👨", "👩❤💋👩", "👩❤️👨", "👩❤️👩", "👩❤️💋👨", "👩❤️💋👩", "👩🌾", "👩🍳", "👩🍼", "👩🎓", "👩🎤", "👩🎨", "👩🏫", "👩🏭", "👩👦", "👩👦👦", "👩👧", "👩👧👦", "👩👧👧", "👩👩👦", "👩👩👦👦", "👩👩👧", "👩👩👧👦", "👩👩👧👧", "👩💻", "👩💼", "👩🔧", "👩🔬", "👩🚀", "👩🚒", "👩🦯", "👩🦯➡", "👩🦯➡️", "👩🦰", "👩🦱", "👩🦲", "👩🦳", "👩🦼", "👩🦼➡", "👩🦼➡️", "👩🦽", "👩🦽➡", "👩🦽➡️", "👩🏻", "👩🏻⚕", "👩🏻⚕️", "👩🏻⚖", "👩🏻⚖️", "👩🏻✈", "👩🏻✈️", "👩🏻❤👨🏻", "👩🏻❤👨🏼", "👩🏻❤👨🏽", "👩🏻❤👨🏾", "👩🏻❤👨🏿", "👩🏻❤👩🏻", "👩🏻❤👩🏼", "👩🏻❤👩🏽", "👩🏻❤👩🏾", "👩🏻❤👩🏿", "👩🏻❤💋👨🏻", "👩🏻❤💋👨🏼", "👩🏻❤💋👨🏽", "👩🏻❤💋👨🏾", "👩🏻❤💋👨🏿", "👩🏻❤💋👩🏻", "👩🏻❤💋👩🏼", "👩🏻❤💋👩🏽", "👩🏻❤💋👩🏾", "👩🏻❤💋👩🏿", "👩🏻❤️👨🏻", "👩🏻❤️👨🏼", "👩🏻❤️👨🏽", "👩🏻❤️👨🏾", "👩🏻❤️👨🏿", "👩🏻❤️👩🏻", "👩🏻❤️👩🏼", "👩🏻❤️👩🏽", "👩🏻❤️👩🏾", "👩🏻❤️👩🏿", "👩🏻❤️💋👨🏻", "👩🏻❤️💋👨🏼", "👩🏻❤️💋👨🏽", "👩🏻❤️💋👨🏾", "👩🏻❤️💋👨🏿", "👩🏻❤️💋👩🏻", "👩🏻❤️💋👩🏼", "👩🏻❤️💋👩🏽", "👩🏻❤️💋👩🏾", "👩🏻❤️💋👩🏿", "👩🏻🌾", "👩🏻🍳", "👩🏻🍼", "👩🏻🎓", "👩🏻🎤", "👩🏻🎨", "👩🏻🏫", "👩🏻🏭", "👩🏻💻", "👩🏻💼", "👩🏻🔧", "👩🏻🔬", "👩🏻🚀", "👩🏻🚒", "👩🏻🤝👨🏼", "👩🏻🤝👨🏽", "👩🏻🤝👨🏾", "👩🏻🤝👨🏿", "👩🏻🤝👩🏼", "👩🏻🤝👩🏽", "👩🏻🤝👩🏾", "👩🏻🤝👩🏿", "👩🏻🦯", "👩🏻🦯➡", "👩🏻🦯➡️", "👩🏻🦰", "👩🏻🦱", "👩🏻🦲", "👩🏻🦳", "👩🏻🦼", "👩🏻🦼➡", "👩🏻🦼➡️", "👩🏻🦽", "👩🏻🦽➡", "👩🏻🦽➡️", "👩🏼", "👩🏼⚕", "👩🏼⚕️", "👩🏼⚖", "👩🏼⚖️", "👩🏼✈", "👩🏼✈️", "👩🏼❤👨🏻", "👩🏼❤👨🏼", "👩🏼❤👨🏽", "👩🏼❤👨🏾", "👩🏼❤👨🏿", "👩🏼❤👩🏻", "👩🏼❤👩🏼", "👩🏼❤👩🏽", "👩🏼❤👩🏾", "👩🏼❤👩🏿", "👩🏼❤💋👨🏻", "👩🏼❤💋👨🏼", "👩🏼❤💋👨🏽", "👩🏼❤💋👨🏾", "👩🏼❤💋👨🏿", "👩🏼❤💋👩🏻", "👩🏼❤💋👩🏼", "👩🏼❤💋👩🏽", "👩🏼❤💋👩🏾", "👩🏼❤💋👩🏿", "👩🏼❤️👨🏻", "👩🏼❤️👨🏼", "👩🏼❤️👨🏽", "👩🏼❤️👨🏾", "👩🏼❤️👨🏿", "👩🏼❤️👩🏻", "👩🏼❤️👩🏼", "👩🏼❤️👩🏽", "👩🏼❤️👩🏾", "👩🏼❤️👩🏿", "👩🏼❤️💋👨🏻", "👩🏼❤️💋👨🏼", "👩🏼❤️💋👨🏽", "👩🏼❤️💋👨🏾", "👩🏼❤️💋👨🏿", "👩🏼❤️💋👩🏻", "👩🏼❤️💋👩🏼", "👩🏼❤️💋👩🏽", "👩🏼❤️💋👩🏾", "👩🏼❤️💋👩🏿", "👩🏼🌾", "👩🏼🍳", "👩🏼🍼", "👩🏼🎓", "👩🏼🎤", "👩🏼🎨", "👩🏼🏫", "👩🏼🏭", "👩🏼💻", "👩🏼💼", "👩🏼🔧", "👩🏼🔬", "👩🏼🚀", "👩🏼🚒", "👩🏼🤝👨🏻", "👩🏼🤝👨🏽", "👩🏼🤝👨🏾", "👩🏼🤝👨🏿", "👩🏼🤝👩🏻", "👩🏼🤝👩🏽", "👩🏼🤝👩🏾", "👩🏼🤝👩🏿", "👩🏼🦯", "👩🏼🦯➡", "👩🏼🦯➡️", "👩🏼🦰", "👩🏼🦱", "👩🏼🦲", "👩🏼🦳", "👩🏼🦼", "👩🏼🦼➡", "👩🏼🦼➡️", "👩🏼🦽", "👩🏼🦽➡", "👩🏼🦽➡️", "👩🏽", "👩🏽⚕", "👩🏽⚕️", "👩🏽⚖", "👩🏽⚖️", "👩🏽✈", "👩🏽✈️", "👩🏽❤👨🏻", "👩🏽❤👨🏼", "👩🏽❤👨🏽", "👩🏽❤👨🏾", "👩🏽❤👨🏿", "👩🏽❤👩🏻", "👩🏽❤👩🏼", "👩🏽❤👩🏽", "👩🏽❤👩🏾", "👩🏽❤👩🏿", "👩🏽❤💋👨🏻", "👩🏽❤💋👨🏼", "👩🏽❤💋👨🏽", "👩🏽❤💋👨🏾", "👩🏽❤💋👨🏿", "👩🏽❤💋👩🏻", "👩🏽❤💋👩🏼", "👩🏽❤💋👩🏽", "👩🏽❤💋👩🏾", "👩🏽❤💋👩🏿", "👩🏽❤️👨🏻", "👩🏽❤️👨🏼", "👩🏽❤️👨🏽", "👩🏽❤️👨🏾", "👩🏽❤️👨🏿", "👩🏽❤️👩🏻", "👩🏽❤️👩🏼", "👩🏽❤️👩🏽", "👩🏽❤️👩🏾", "👩🏽❤️👩🏿", "👩🏽❤️💋👨🏻", "👩🏽❤️💋👨🏼", "👩🏽❤️💋👨🏽", "👩🏽❤️💋👨🏾", "👩🏽❤️💋👨🏿", "👩🏽❤️💋👩🏻", "👩🏽❤️💋👩🏼", "👩🏽❤️💋👩🏽", "👩🏽❤️💋👩🏾", "👩🏽❤️💋👩🏿", "👩🏽🌾", "👩🏽🍳", "👩🏽🍼", "👩🏽🎓", "👩🏽🎤", "👩🏽🎨", "👩🏽🏫", "👩🏽🏭", "👩🏽💻", "👩🏽💼", "👩🏽🔧", "👩🏽🔬", "👩🏽🚀", "👩🏽🚒", "👩🏽🤝👨🏻", "👩🏽🤝👨🏼", "👩🏽🤝👨🏾", "👩🏽🤝👨🏿", "👩🏽🤝👩🏻", "👩🏽🤝👩🏼", "👩🏽🤝👩🏾", "👩🏽🤝👩🏿", "👩🏽🦯", "👩🏽🦯➡", "👩🏽🦯➡️", "👩🏽🦰", "👩🏽🦱", "👩🏽🦲", "👩🏽🦳", "👩🏽🦼", "👩🏽🦼➡", "👩🏽🦼➡️", "👩🏽🦽", "👩🏽🦽➡", "👩🏽🦽➡️", "👩🏾", "👩🏾⚕", "👩🏾⚕️", "👩🏾⚖", "👩🏾⚖️", "👩🏾✈", "👩🏾✈️", "👩🏾❤👨🏻", "👩🏾❤👨🏼", "👩🏾❤👨🏽", "👩🏾❤👨🏾", "👩🏾❤👨🏿", "👩🏾❤👩🏻", "👩🏾❤👩🏼", "👩🏾❤👩🏽", "👩🏾❤👩🏾", "👩🏾❤👩🏿", "👩🏾❤💋👨🏻", "👩🏾❤💋👨🏼", "👩🏾❤💋👨🏽", "👩🏾❤💋👨🏾", "👩🏾❤💋👨🏿", "👩🏾❤💋👩🏻", "👩🏾❤💋👩🏼", "👩🏾❤💋👩🏽", "👩🏾❤💋👩🏾", "👩🏾❤💋👩🏿", "👩🏾❤️👨🏻", "👩🏾❤️👨🏼", "👩🏾❤️👨🏽", "👩🏾❤️👨🏾", "👩🏾❤️👨🏿", "👩🏾❤️👩🏻", "👩🏾❤️👩🏼", "👩🏾❤️👩🏽", "👩🏾❤️👩🏾", "👩🏾❤️👩🏿", "👩🏾❤️💋👨🏻", "👩🏾❤️💋👨🏼", "👩🏾❤️💋👨🏽", "👩🏾❤️💋👨🏾", "👩🏾❤️💋👨🏿", "👩🏾❤️💋👩🏻", "👩🏾❤️💋👩🏼", "👩🏾❤️💋👩🏽", "👩🏾❤️💋👩🏾", "👩🏾❤️💋👩🏿", "👩🏾🌾", "👩🏾🍳", "👩🏾🍼", "👩🏾🎓", "👩🏾🎤", "👩🏾🎨", "👩🏾🏫", "👩🏾🏭", "👩🏾💻", "👩🏾💼", "👩🏾🔧", "👩🏾🔬", "👩🏾🚀", "👩🏾🚒", "👩🏾🤝👨🏻", "👩🏾🤝👨🏼", "👩🏾🤝👨🏽", "👩🏾🤝👨🏿", "👩🏾🤝👩🏻", "👩🏾🤝👩🏼", "👩🏾🤝👩🏽", "👩🏾🤝👩🏿", "👩🏾🦯", "👩🏾🦯➡", "👩🏾🦯➡️", "👩🏾🦰", "👩🏾🦱", "👩🏾🦲", "👩🏾🦳", "👩🏾🦼", "👩🏾🦼➡", "👩🏾🦼➡️", "👩🏾🦽", "👩🏾🦽➡", "👩🏾🦽➡️", "👩🏿", "👩🏿⚕", "👩🏿⚕️", "👩🏿⚖", "👩🏿⚖️", "👩🏿✈", "👩🏿✈️", "👩🏿❤👨🏻", "👩🏿❤👨🏼", "👩🏿❤👨🏽", "👩🏿❤👨🏾", "👩🏿❤👨🏿", "👩🏿❤👩🏻", "👩🏿❤👩🏼", "👩🏿❤👩🏽", "👩🏿❤👩🏾", "👩🏿❤👩🏿", "👩🏿❤💋👨🏻", "👩🏿❤💋👨🏼", "👩🏿❤💋👨🏽", "👩🏿❤💋👨🏾", "👩🏿❤💋👨🏿", "👩🏿❤💋👩🏻", "👩🏿❤💋👩🏼", "👩🏿❤💋👩🏽", "👩🏿❤💋👩🏾", "👩🏿❤💋👩🏿", "👩🏿❤️👨🏻", "👩🏿❤️👨🏼", "👩🏿❤️👨🏽", "👩🏿❤️👨🏾", "👩🏿❤️👨🏿", "👩🏿❤️👩🏻", "👩🏿❤️👩🏼", "👩🏿❤️👩🏽", "👩🏿❤️👩🏾", "👩🏿❤️👩🏿", "👩🏿❤️💋👨🏻", "👩🏿❤️💋👨🏼", "👩🏿❤️💋👨🏽", "👩🏿❤️💋👨🏾", "👩🏿❤️💋👨🏿", "👩🏿❤️💋👩🏻", "👩🏿❤️💋👩🏼", "👩🏿❤️💋👩🏽", "👩🏿❤️💋👩🏾", "👩🏿❤️💋👩🏿", "👩🏿🌾", "👩🏿🍳", "👩🏿🍼", "👩🏿🎓", "👩🏿🎤", "👩🏿🎨", "👩🏿🏫", "👩🏿🏭", "👩🏿💻", "👩🏿💼", "👩🏿🔧", "👩🏿🔬", "👩🏿🚀", "👩🏿🚒", "👩🏿🤝👨🏻", "👩🏿🤝👨🏼", "👩🏿🤝👨🏽", "👩🏿🤝👨🏾", "👩🏿🤝👩🏻", "👩🏿🤝👩🏼", "👩🏿🤝👩🏽", "👩🏿🤝👩🏾", "👩🏿🦯", "👩🏿🦯➡", "👩🏿🦯➡️", "👩🏿🦰", "👩🏿🦱", "👩🏿🦲", "👩🏿🦳", "👩🏿🦼", "👩🏿🦼➡", "👩🏿🦼➡️", "👩🏿🦽", "👩🏿🦽➡", "👩🏿🦽➡️", "👪", "👫", "👫🏻", "👫🏼", "👫🏽", "👫🏾", "👫🏿", "👬", "👬🏻", "👬🏼", "👬🏽", "👬🏾", "👬🏿", "👭", "👭🏻", "👭🏼", "👭🏽", "👭🏾", "👭🏿", "👮", "👮♀", "👮♀️", "👮♂", "👮♂️", "👮🏻", "👮🏻♀", "👮🏻♀️", "👮🏻♂", "👮🏻♂️", "👮🏼", "👮🏼♀", "👮🏼♀️", "👮🏼♂", "👮🏼♂️", "👮🏽", "👮🏽♀", "👮🏽♀️", "👮🏽♂", "👮🏽♂️", "👮🏾", "👮🏾♀", "👮🏾♀️", "👮🏾♂", "👮🏾♂️", "👮🏿", "👮🏿♀", "👮🏿♀️", "👮🏿♂", "👮🏿♂️", "👯", "👯♀", "👯♀️", "👯♂", "👯♂️", "👰", "👰♀", "👰♀️", "👰♂", "👰♂️", "👰🏻", "👰🏻♀", "👰🏻♀️", "👰🏻♂", "👰🏻♂️", "👰🏼", "👰🏼♀", "👰🏼♀️", "👰🏼♂", "👰🏼♂️", "👰🏽", "👰🏽♀", "👰🏽♀️", "👰🏽♂", "👰🏽♂️", "👰🏾", "👰🏾♀", "👰🏾♀️", "👰🏾♂", "👰🏾♂️", "👰🏿", "👰🏿♀", "👰🏿♀️", "👰🏿♂", "👰🏿♂️", "👱", "👱♀", "👱♀️", "👱♂", "👱♂️", "👱🏻", "👱🏻♀", "👱🏻♀️", "👱🏻♂", "👱🏻♂️", "👱🏼", "👱🏼♀", "👱🏼♀️", "👱🏼♂", "👱🏼♂️", "👱🏽", "👱🏽♀", "👱🏽♀️", "👱🏽♂", "👱🏽♂️", "👱🏾", "👱🏾♀", "👱🏾♀️", "👱🏾♂", "👱🏾♂️", "👱🏿", "👱🏿♀", "👱🏿♀️", "👱🏿♂", "👱🏿♂️", "👲", "👲🏻", "👲🏼", "👲🏽", "👲🏾", "👲🏿", "👳", "👳♀", "👳♀️", "👳♂", "👳♂️", "👳🏻", "👳🏻♀", "👳🏻♀️", "👳🏻♂", "👳🏻♂️", "👳🏼", "👳🏼♀", "👳🏼♀️", "👳🏼♂", "👳🏼♂️", "👳🏽", "👳🏽♀", "👳🏽♀️", "👳🏽♂", "👳🏽♂️", "👳🏾", "👳🏾♀", "👳🏾♀️", "👳🏾♂", "👳🏾♂️", "👳🏿", "👳🏿♀", "👳🏿♀️", "👳🏿♂", "👳🏿♂️", "👴", "👴🏻", "👴🏼", "👴🏽", "👴🏾", "👴🏿", "👵", "👵🏻", "👵🏼", "👵🏽", "👵🏾", "👵🏿", "👶", "👶🏻", "👶🏼", "👶🏽", "👶🏾", "👶🏿", "👷", "👷♀", "👷♀️", "👷♂", "👷♂️", "👷🏻", "👷🏻♀", "👷🏻♀️", "👷🏻♂", "👷🏻♂️", "👷🏼", "👷🏼♀", "👷🏼♀️", "👷🏼♂", "👷🏼♂️", "👷🏽", "👷🏽♀", "👷🏽♀️", "👷🏽♂", "👷🏽♂️", "👷🏾", "👷🏾♀", "👷🏾♀️", "👷🏾♂", "👷🏾♂️", "👷🏿", "👷🏿♀", "👷🏿♀️", "👷🏿♂", "👷🏿♂️", "👸", "👸🏻", "👸🏼", "👸🏽", "👸🏾", "👸🏿", "👹", "👺", "👻", "👼", "👼🏻", "👼🏼", "👼🏽", "👼🏾", "👼🏿", "👽", "👾", "👿", "💀", "💁", "💁♀", "💁♀️", "💁♂", "💁♂️", "💁🏻", "💁🏻♀", "💁🏻♀️", "💁🏻♂", "💁🏻♂️", "💁🏼", "💁🏼♀", "💁🏼♀️", "💁🏼♂", "💁🏼♂️", "💁🏽", "💁🏽♀", "💁🏽♀️", "💁🏽♂", "💁🏽♂️", "💁🏾", "💁🏾♀", "💁🏾♀️", "💁🏾♂", "💁🏾♂️", "💁🏿", "💁🏿♀", "💁🏿♀️", "💁🏿♂", "💁🏿♂️", "💂", "💂♀", "💂♀️", "💂♂", "💂♂️", "💂🏻", "💂🏻♀", "💂🏻♀️", "💂🏻♂", "💂🏻♂️", "💂🏼", "💂🏼♀", "💂🏼♀️", "💂🏼♂", "💂🏼♂️", "💂🏽", "💂🏽♀", "💂🏽♀️", "💂🏽♂", "💂🏽♂️", "💂🏾", "💂🏾♀", "💂🏾♀️", "💂🏾♂", "💂🏾♂️", "💂🏿", "💂🏿♀", "💂🏿♀️", "💂🏿♂", "💂🏿♂️", "💃", "💃🏻", "💃🏼", "💃🏽", "💃🏾", "💃🏿", "💄", "💅", "💅🏻", "💅🏼", "💅🏽", "💅🏾", "💅🏿", "💆", "💆♀", "💆♀️", "💆♂", "💆♂️", "💆🏻", "💆🏻♀", "💆🏻♀️", "💆🏻♂", "💆🏻♂️", "💆🏼", "💆🏼♀", "💆🏼♀️", "💆🏼♂", "💆🏼♂️", "💆🏽", "💆🏽♀", "💆🏽♀️", "💆🏽♂", "💆🏽♂️", "💆🏾", "💆🏾♀", "💆🏾♀️", "💆🏾♂", "💆🏾♂️", "💆🏿", "💆🏿♀", "💆🏿♀️", "💆🏿♂", "💆🏿♂️", "💇", "💇♀", "💇♀️", "💇♂", "💇♂️", "💇🏻", "💇🏻♀", "💇🏻♀️", "💇🏻♂", "💇🏻♂️", "💇🏼", "💇🏼♀", "💇🏼♀️", "💇🏼♂", "💇🏼♂️", "💇🏽", "💇🏽♀", "💇🏽♀️", "💇🏽♂", "💇🏽♂️", "💇🏾", "💇🏾♀", "💇🏾♀️", "💇🏾♂", "💇🏾♂️", "💇🏿", "💇🏿♀", "💇🏿♀️", "💇🏿♂", "💇🏿♂️", "💈", "💉", "💊", "💋", "💌", "💍", "💎", "💏", "💏🏻", "💏🏼", "💏🏽", "💏🏾", "💏🏿", "💐", "💑", "💑🏻", "💑🏼", "💑🏽", "💑🏾", "💑🏿", "💒", "💓", "💔", "💕", "💖", "💗", "💘", "💙", "💚", "💛", "💜", "💝", "💞", "💟", "💠", "💡", "💢", "💣", "💤", "💥", "💦", "💧", "💨", "💩", "💪", "💪🏻", "💪🏼", "💪🏽", "💪🏾", "💪🏿", "💫", "💬", "💭", "💮", "💯", "💰", "💱", "💲", "💳", "💴", "💵", "💶", "💷", "💸", "💹", "💺", "💻", "💼", "💽", "💾", "💿", "📀", "📁", "📂", "📃", "📄", "📅", "📆", "📇", "📈", "📉", "📊", "📋", "📌", "📍", "📎", "📏", "📐", "📑", "📒", "📓", "📔", "📕", "📖", "📗", "📘", "📙", "📚", "📛", "📜", "📝", "📞", "📟", "📠", "📡", "📢", "📣", "📤", "📥", "📦", "📧", "📨", "📩", "📪", "📫", "📬", "📭", "📮", "📯", "📰", "📱", "📲", "📳", "📴", "📵", "📶", "📷", "📸", "📹", "📺", "📻", "📼", "📽", "📽️", "📿", "🔀", "🔁", "🔂", "🔃", "🔄", "🔅", "🔆", "🔇", "🔈", "🔉", "🔊", "🔋", "🔌", "🔍", "🔎", "🔏", "🔐", "🔑", "🔒", "🔓", "🔔", "🔕", "🔖", "🔗", "🔘", "🔙", "🔚", "🔛", "🔜", "🔝", "🔞", "🔟", "🔠", "🔡", "🔢", "🔣", "🔤", "🔥", "🔦", "🔧", "🔨", "🔩", "🔪", "🔫", "🔬", "🔭", "🔮", "🔯", "🔰", "🔱", "🔲", "🔳", "🔴", "🔵", "🔶", "🔷", "🔸", "🔹", "🔺", "🔻", "🔼", "🔽", "🕉", "🕉️", "🕊", "🕊️", "🕋", "🕌", "🕍", "🕎", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛", "🕜", "🕝", "🕞", "🕟", "🕠", "🕡", "🕢", "🕣", "🕤", "🕥", "🕦", "🕧", "🕯", "🕯️", "🕰", "🕰️", "🕳", "🕳️", "🕴", "🕴️", "🕴🏻", "🕴🏼", "🕴🏽", "🕴🏾", "🕴🏿", "🕵", "🕵♀", "🕵♀️", "🕵♂", "🕵♂️", "🕵️", "🕵️♀", "🕵️♀️", "🕵️♂", "🕵️♂️", "🕵🏻", "🕵🏻♀", "🕵🏻♀️", "🕵🏻♂", "🕵🏻♂️", "🕵🏼", "🕵🏼♀", "🕵🏼♀️", "🕵🏼♂", "🕵🏼♂️", "🕵🏽", "🕵🏽♀", "🕵🏽♀️", "🕵🏽♂", "🕵🏽♂️", "🕵🏾", "🕵🏾♀", "🕵🏾♀️", "🕵🏾♂", "🕵🏾♂️", "🕵🏿", "🕵🏿♀", "🕵🏿♀️", "🕵🏿♂", "🕵🏿♂️", "🕶", "🕶️", "🕷", "🕷️", "🕸", "🕸️", "🕹", "🕹️", "🕺", "🕺🏻", "🕺🏼", "🕺🏽", "🕺🏾", "🕺🏿", "🖇", "🖇️", "🖊", "🖊️", "🖋", "🖋️", "🖌", "🖌️", "🖍", "🖍️", "🖐", "🖐️", "🖐🏻", "🖐🏼", "🖐🏽", "🖐🏾", "🖐🏿", "🖕", "🖕🏻", "🖕🏼", "🖕🏽", "🖕🏾", "🖕🏿", "🖖", "🖖🏻", "🖖🏼", "🖖🏽", "🖖🏾", "🖖🏿", "🖤", "🖥", "🖥️", "🖨", "🖨️", "🖱", "🖱️", "🖲", "🖲️", "🖼", "🖼️", "🗂", "🗂️", "🗃", "🗃️", "🗄", "🗄️", "🗑", "🗑️", "🗒", "🗒️", "🗓", "🗓️", "🗜", "🗜️", "🗝", "🗝️", "🗞", "🗞️", "🗡", "🗡️", "🗣", "🗣️", "🗨", "🗨️", "🗯", "🗯️", "🗳", "🗳️", "🗺", "🗺️", "🗻", "🗼", "🗽", "🗾", "🗿", "😀", "😁", "😂", "😃", "😄", "😅", "😆", "😇", "😈", "😉", "😊", "😋", "😌", "😍", "😎", "😏", "😐", "😑", "😒", "😓", "😔", "😕", "😖", "😗", "😘", "😙", "😚", "😛", "😜", "😝", "😞", "😟", "😠", "😡", "😢", "😣", "😤", "😥", "😦", "😧", "😨", "😩", "😪", "😫", "😬", "😭", "😮", "😮💨", "😯", "😰", "😱", "😲", "😳", "😴", "😵", "😵💫", "😶", "😶🌫", "😶🌫️", "😷", "😸", "😹", "😺", "😻", "😼", "😽", "😾", "😿", "🙀", "🙁", "🙂", "🙂↔", "🙂↔️", "🙂↕", "🙂↕️", "🙃", "🙄", "🙅", "🙅♀", "🙅♀️", "🙅♂", "🙅♂️", "🙅🏻", "🙅🏻♀", "🙅🏻♀️", "🙅🏻♂", "🙅🏻♂️", "🙅🏼", "🙅🏼♀", "🙅🏼♀️", "🙅🏼♂", "🙅🏼♂️", "🙅🏽", "🙅🏽♀", "🙅🏽♀️", "🙅🏽♂", "🙅🏽♂️", "🙅🏾", "🙅🏾♀", "🙅🏾♀️", "🙅🏾♂", "🙅🏾♂️", "🙅🏿", "🙅🏿♀", "🙅🏿♀️", "🙅🏿♂", "🙅🏿♂️", "🙆", "🙆♀", "🙆♀️", "🙆♂", "🙆♂️", "🙆🏻", "🙆🏻♀", "🙆🏻♀️", "🙆🏻♂", "🙆🏻♂️", "🙆🏼", "🙆🏼♀", "🙆🏼♀️", "🙆🏼♂", "🙆🏼♂️", "🙆🏽", "🙆🏽♀", "🙆🏽♀️", "🙆🏽♂", "🙆🏽♂️", "🙆🏾", "🙆🏾♀", "🙆🏾♀️", "🙆🏾♂", "🙆🏾♂️", "🙆🏿", "🙆🏿♀", "🙆🏿♀️", "🙆🏿♂", "🙆🏿♂️", "🙇", "🙇♀", "🙇♀️", "🙇♂", "🙇♂️", "🙇🏻", "🙇🏻♀", "🙇🏻♀️", "🙇🏻♂", "🙇🏻♂️", "🙇🏼", "🙇🏼♀", "🙇🏼♀️", "🙇🏼♂", "🙇🏼♂️", "🙇🏽", "🙇🏽♀", "🙇🏽♀️", "🙇🏽♂", "🙇🏽♂️", "🙇🏾", "🙇🏾♀", "🙇🏾♀️", "🙇🏾♂", "🙇🏾♂️", "🙇🏿", "🙇🏿♀", "🙇🏿♀️", "🙇🏿♂", "🙇🏿♂️", "🙈", "🙉", "🙊", "🙋", "🙋♀", "🙋♀️", "🙋♂", "🙋♂️", "🙋🏻", "🙋🏻♀", "🙋🏻♀️", "🙋🏻♂", "🙋🏻♂️", "🙋🏼", "🙋🏼♀", "🙋🏼♀️", "🙋🏼♂", "🙋🏼♂️", "🙋🏽", "🙋🏽♀", "🙋🏽♀️", "🙋🏽♂", "🙋🏽♂️", "🙋🏾", "🙋🏾♀", "🙋🏾♀️", "🙋🏾♂", "🙋🏾♂️", "🙋🏿", "🙋🏿♀", "🙋🏿♀️", "🙋🏿♂", "🙋🏿♂️", "🙌", "🙌🏻", "🙌🏼", "🙌🏽", "🙌🏾", "🙌🏿", "🙍", "🙍♀", "🙍♀️", "🙍♂", "🙍♂️", "🙍🏻", "🙍🏻♀", "🙍🏻♀️", "🙍🏻♂", "🙍🏻♂️", "🙍🏼", "🙍🏼♀", "🙍🏼♀️", "🙍🏼♂", "🙍🏼♂️", "🙍🏽", "🙍🏽♀", "🙍🏽♀️", "🙍🏽♂", "🙍🏽♂️", "🙍🏾", "🙍🏾♀", "🙍🏾♀️", "🙍🏾♂", "🙍🏾♂️", "🙍🏿", "🙍🏿♀", "🙍🏿♀️", "🙍🏿♂", "🙍🏿♂️", "🙎", "🙎♀", "🙎♀️", "🙎♂", "🙎♂️", "🙎🏻", "🙎🏻♀", "🙎🏻♀️", "🙎🏻♂", "🙎🏻♂️", "🙎🏼", "🙎🏼♀", "🙎🏼♀️", "🙎🏼♂", "🙎🏼♂️", "🙎🏽", "🙎🏽♀", "🙎🏽♀️", "🙎🏽♂", "🙎🏽♂️", "🙎🏾", "🙎🏾♀", "🙎🏾♀️", "🙎🏾♂", "🙎🏾♂️", "🙎🏿", "🙎🏿♀", "🙎🏿♀️", "🙎🏿♂", "🙎🏿♂️", "🙏", "🙏🏻", "🙏🏼", "🙏🏽", "🙏🏾", "🙏🏿", "🚀", "🚁", "🚂", "🚃", "🚄", "🚅", "🚆", "🚇", "🚈", "🚉", "🚊", "🚋", "🚌", "🚍", "🚎", "🚏", "🚐", "🚑", "🚒", "🚓", "🚔", "🚕", "🚖", "🚗", "🚘", "🚙", "🚚", "🚛", "🚜", "🚝", "🚞", "🚟", "🚠", "🚡", "🚢", "🚣", "🚣♀", "🚣♀️", "🚣♂", "🚣♂️", "🚣🏻", "🚣🏻♀", "🚣🏻♀️", "🚣🏻♂", "🚣🏻♂️", "🚣🏼", "🚣🏼♀", "🚣🏼♀️", "🚣🏼♂", "🚣🏼♂️", "🚣🏽", "🚣🏽♀", "🚣🏽♀️", "🚣🏽♂", "🚣🏽♂️", "🚣🏾", "🚣🏾♀", "🚣🏾♀️", "🚣🏾♂", "🚣🏾♂️", "🚣🏿", "🚣🏿♀", "🚣🏿♀️", "🚣🏿♂", "🚣🏿♂️", "🚤", "🚥", "🚦", "🚧", "🚨", "🚩", "🚪", "🚫", "🚬", "🚭", "🚮", "🚯", "🚰", "🚱", "🚲", "🚳", "🚴", "🚴♀", "🚴♀️", "🚴♂", "🚴♂️", "🚴🏻", "🚴🏻♀", "🚴🏻♀️", "🚴🏻♂", "🚴🏻♂️", "🚴🏼", "🚴🏼♀", "🚴🏼♀️", "🚴🏼♂", "🚴🏼♂️", "🚴🏽", "🚴🏽♀", "🚴🏽♀️", "🚴🏽♂", "🚴🏽♂️", "🚴🏾", "🚴🏾♀", "🚴🏾♀️", "🚴🏾♂", "🚴🏾♂️", "🚴🏿", "🚴🏿♀", "🚴🏿♀️", "🚴🏿♂", "🚴🏿♂️", "🚵", "🚵♀", "🚵♀️", "🚵♂", "🚵♂️", "🚵🏻", "🚵🏻♀", "🚵🏻♀️", "🚵🏻♂", "🚵🏻♂️", "🚵🏼", "🚵🏼♀", "🚵🏼♀️", "🚵🏼♂", "🚵🏼♂️", "🚵🏽", "🚵🏽♀", "🚵🏽♀️", "🚵🏽♂", "🚵🏽♂️", "🚵🏾", "🚵🏾♀", "🚵🏾♀️", "🚵🏾♂", "🚵🏾♂️", "🚵🏿", "🚵🏿♀", "🚵🏿♀️", "🚵🏿♂", "🚵🏿♂️", "🚶", "🚶♀", "🚶♀➡", "🚶♀➡️", "🚶♀️", "🚶♀️➡", "🚶♀️➡️", "🚶♂", "🚶♂➡", "🚶♂➡️", "🚶♂️", "🚶♂️➡", "🚶♂️➡️", "🚶➡", "🚶➡️", "🚶🏻", "🚶🏻♀", "🚶🏻♀➡", "🚶🏻♀➡️", "🚶🏻♀️", "🚶🏻♀️➡", "🚶🏻♀️➡️", "🚶🏻♂", "🚶🏻♂➡", "🚶🏻♂➡️", "🚶🏻♂️", "🚶🏻♂️➡", "🚶🏻♂️➡️", "🚶🏻➡", "🚶🏻➡️", "🚶🏼", "🚶🏼♀", "🚶🏼♀➡", "🚶🏼♀➡️", "🚶🏼♀️", "🚶🏼♀️➡", "🚶🏼♀️➡️", "🚶🏼♂", "🚶🏼♂➡", "🚶🏼♂➡️", "🚶🏼♂️", "🚶🏼♂️➡", "🚶🏼♂️➡️", "🚶🏼➡", "🚶🏼➡️", "🚶🏽", "🚶🏽♀", "🚶🏽♀➡", "🚶🏽♀➡️", "🚶🏽♀️", "🚶🏽♀️➡", "🚶🏽♀️➡️", "🚶🏽♂", "🚶🏽♂➡", "🚶🏽♂➡️", "🚶🏽♂️", "🚶🏽♂️➡", "🚶🏽♂️➡️", "🚶🏽➡", "🚶🏽➡️", "🚶🏾", "🚶🏾♀", "🚶🏾♀➡", "🚶🏾♀➡️", "🚶🏾♀️", "🚶🏾♀️➡", "🚶🏾♀️➡️", "🚶🏾♂", "🚶🏾♂➡", "🚶🏾♂➡️", "🚶🏾♂️", "🚶🏾♂️➡", "🚶🏾♂️➡️", "🚶🏾➡", "🚶🏾➡️", "🚶🏿", "🚶🏿♀", "🚶🏿♀➡", "🚶🏿♀➡️", "🚶🏿♀️", "🚶🏿♀️➡", "🚶🏿♀️➡️", "🚶🏿♂", "🚶🏿♂➡", "🚶🏿♂➡️", "🚶🏿♂️", "🚶🏿♂️➡", "🚶🏿♂️➡️", "🚶🏿➡", "🚶🏿➡️", "🚷", "🚸", "🚹", "🚺", "🚻", "🚼", "🚽", "🚾", "🚿", "🛀", "🛀🏻", "🛀🏼", "🛀🏽", "🛀🏾", "🛀🏿", "🛁", "🛂", "🛃", "🛄", "🛅", "🛋", "🛋️", "🛌", "🛌🏻", "🛌🏼", "🛌🏽", "🛌🏾", "🛌🏿", "🛍", "🛍️", "🛎", "🛎️", "🛏", "🛏️", "🛐", "🛑", "🛒", "🛕", "🛖", "🛗", "🛜", "🛝", "🛞", "🛟", "🛠", "🛠️", "🛡", "🛡️", "🛢", "🛢️", "🛣", "🛣️", "🛤", "🛤️", "🛥", "🛥️", "🛩", "🛩️", "🛫", "🛬", "🛰", "🛰️", "🛳", "🛳️", "🛴", "🛵", "🛶", "🛷", "🛸", "🛹", "🛺", "🛻", "🛼", "🟠", "🟡", "🟢", "🟣", "🟤", "🟥", "🟦", "🟧", "🟨", "🟩", "🟪", "🟫", "🟰", "🤌", "🤌🏻", "🤌🏼", "🤌🏽", "🤌🏾", "🤌🏿", "🤍", "🤎", "🤏", "🤏🏻", "🤏🏼", "🤏🏽", "🤏🏾", "🤏🏿", "🤐", "🤑", "🤒", "🤓", "🤔", "🤕", "🤖", "🤗", "🤘", "🤘🏻", "🤘🏼", "🤘🏽", "🤘🏾", "🤘🏿", "🤙", "🤙🏻", "🤙🏼", "🤙🏽", "🤙🏾", "🤙🏿", "🤚", "🤚🏻", "🤚🏼", "🤚🏽", "🤚🏾", "🤚🏿", "🤛", "🤛🏻", "🤛🏼", "🤛🏽", "🤛🏾", "🤛🏿", "🤜", "🤜🏻", "🤜🏼", "🤜🏽", "🤜🏾", "🤜🏿", "🤝", "🤝🏻", "🤝🏼", "🤝🏽", "🤝🏾", "🤝🏿", "🤞", "🤞🏻", "🤞🏼", "🤞🏽", "🤞🏾", "🤞🏿", "🤟", "🤟🏻", "🤟🏼", "🤟🏽", "🤟🏾", "🤟🏿", "🤠", "🤡", "🤢", "🤣", "🤤", "🤥", "🤦", "🤦♀", "🤦♀️", "🤦♂", "🤦♂️", "🤦🏻", "🤦🏻♀", "🤦🏻♀️", "🤦🏻♂", "🤦🏻♂️", "🤦🏼", "🤦🏼♀", "🤦🏼♀️", "🤦🏼♂", "🤦🏼♂️", "🤦🏽", "🤦🏽♀", "🤦🏽♀️", "🤦🏽♂", "🤦🏽♂️", "🤦🏾", "🤦🏾♀", "🤦🏾♀️", "🤦🏾♂", "🤦🏾♂️", "🤦🏿", "🤦🏿♀", "🤦🏿♀️", "🤦🏿♂", "🤦🏿♂️", "🤧", "🤨", "🤩", "🤪", "🤫", "🤬", "🤭", "🤮", "🤯", "🤰", "🤰🏻", "🤰🏼", "🤰🏽", "🤰🏾", "🤰🏿", "🤱", "🤱🏻", "🤱🏼", "🤱🏽", "🤱🏾", "🤱🏿", "🤲", "🤲🏻", "🤲🏼", "🤲🏽", "🤲🏾", "🤲🏿", "🤳", "🤳🏻", "🤳🏼", "🤳🏽", "🤳🏾", "🤳🏿", "🤴", "🤴🏻", "🤴🏼", "🤴🏽", "🤴🏾", "🤴🏿", "🤵", "🤵♀", "🤵♀️", "🤵♂", "🤵♂️", "🤵🏻", "🤵🏻♀", "🤵🏻♀️", "🤵🏻♂", "🤵🏻♂️", "🤵🏼", "🤵🏼♀", "🤵🏼♀️", "🤵🏼♂", "🤵🏼♂️", "🤵🏽", "🤵🏽♀", "🤵🏽♀️", "🤵🏽♂", "🤵🏽♂️", "🤵🏾", "🤵🏾♀", "🤵🏾♀️", "🤵🏾♂", "🤵🏾♂️", "🤵🏿", "🤵🏿♀", "🤵🏿♀️", "🤵🏿♂", "🤵🏿♂️", "🤶", "🤶🏻", "🤶🏼", "🤶🏽", "🤶🏾", "🤶🏿", "🤷", "🤷♀", "🤷♀️", "🤷♂", "🤷♂️", "🤷🏻", "🤷🏻♀", "🤷🏻♀️", "🤷🏻♂", "🤷🏻♂️", "🤷🏼", "🤷🏼♀", "🤷🏼♀️", "🤷🏼♂", "🤷🏼♂️", "🤷🏽", "🤷🏽♀", "🤷🏽♀️", "🤷🏽♂", "🤷🏽♂️", "🤷🏾", "🤷🏾♀", "🤷🏾♀️", "🤷🏾♂", "🤷🏾♂️", "🤷🏿", "🤷🏿♀", "🤷🏿♀️", "🤷🏿♂", "🤷🏿♂️", "🤸", "🤸♀", "🤸♀️", "🤸♂", "🤸♂️", "🤸🏻", "🤸🏻♀", "🤸🏻♀️", "🤸🏻♂", "🤸🏻♂️", "🤸🏼", "🤸🏼♀", "🤸🏼♀️", "🤸🏼♂", "🤸🏼♂️", "🤸🏽", "🤸🏽♀", "🤸🏽♀️", "🤸🏽♂", "🤸🏽♂️", "🤸🏾", "🤸🏾♀", "🤸🏾♀️", "🤸🏾♂", "🤸🏾♂️", "🤸🏿", "🤸🏿♀", "🤸🏿♀️", "🤸🏿♂", "🤸🏿♂️", "🤹", "🤹♀", "🤹♀️", "🤹♂", "🤹♂️", "🤹🏻", "🤹🏻♀", "🤹🏻♀️", "🤹🏻♂", "🤹🏻♂️", "🤹🏼", "🤹🏼♀", "🤹🏼♀️", "🤹🏼♂", "🤹🏼♂️", "🤹🏽", "🤹🏽♀", "🤹🏽♀️", "🤹🏽♂", "🤹🏽♂️", "🤹🏾", "🤹🏾♀", "🤹🏾♀️", "🤹🏾♂", "🤹🏾♂️", "🤹🏿", "🤹🏿♀", "🤹🏿♀️", "🤹🏿♂", "🤹🏿♂️", "🤺", "🤼", "🤼♀", "🤼♀️", "🤼♂", "🤼♂️", "🤽", "🤽♀", "🤽♀️", "🤽♂", "🤽♂️", "🤽🏻", "🤽🏻♀", "🤽🏻♀️", "🤽🏻♂", "🤽🏻♂️", "🤽🏼", "🤽🏼♀", "🤽🏼♀️", "🤽🏼♂", "🤽🏼♂️", "🤽🏽", "🤽🏽♀", "🤽🏽♀️", "🤽🏽♂", "🤽🏽♂️", "🤽🏾", "🤽🏾♀", "🤽🏾♀️", "🤽🏾♂", "🤽🏾♂️", "🤽🏿", "🤽🏿♀", "🤽🏿♀️", "🤽🏿♂", "🤽🏿♂️", "🤾", "🤾♀", "🤾♀️", "🤾♂", "🤾♂️", "🤾🏻", "🤾🏻♀", "🤾🏻♀️", "🤾🏻♂", "🤾🏻♂️", "🤾🏼", "🤾🏼♀", "🤾🏼♀️", "🤾🏼♂", "🤾🏼♂️", "🤾🏽", "🤾🏽♀", "🤾🏽♀️", "🤾🏽♂", "🤾🏽♂️", "🤾🏾", "🤾🏾♀", "🤾🏾♀️", "🤾🏾♂", "🤾🏾♂️", "🤾🏿", "🤾🏿♀", "🤾🏿♀️", "🤾🏿♂", "🤾🏿♂️", "🤿", "🥀", "🥁", "🥂", "🥃", "🥄", "🥅", "🥇", "🥈", "🥉", "🥊", "🥋", "🥌", "🥍", "🥎", "🥏", "🥐", "🥑", "🥒", "🥓", "🥔", "🥕", "🥖", "🥗", "🥘", "🥙", "🥚", "🥛", "🥜", "🥝", "🥞", "🥟", "🥠", "🥡", "🥢", "🥣", "🥤", "🥥", "🥦", "🥧", "🥨", "🥩", "🥪", "🥫", "🥬", "🥭", "🥮", "🥯", "🥰", "🥱", "🥲", "🥳", "🥴", "🥵", "🥶", "🥷", "🥷🏻", "🥷🏼", "🥷🏽", "🥷🏾", "🥷🏿", "🥸", "🥹", "🥺", "🥻", "🥼", "🥽", "🥾", "🥿", "🦀", "🦁", "🦂", "🦃", "🦄", "🦅", "🦆", "🦇", "🦈", "🦉", "🦊", "🦋", "🦌", "🦍", "🦎", "🦏", "🦐", "🦑", "🦒", "🦓", "🦔", "🦕", "🦖", "🦗", "🦘", "🦙", "🦚", "🦛", "🦜", "🦝", "🦞", "🦟", "🦠", "🦡", "🦢", "🦣", "🦤", "🦥", "🦦", "🦧", "🦨", "🦩", "🦪", "🦫", "🦬", "🦭", "🦮", "🦯", "🦰", "🦱", "🦲", "🦳", "🦴", "🦵", "🦵🏻", "🦵🏼", "🦵🏽", "🦵🏾", "🦵🏿", "🦶", "🦶🏻", "🦶🏼", "🦶🏽", "🦶🏾", "🦶🏿", "🦷", "🦸", "🦸♀", "🦸♀️", "🦸♂", "🦸♂️", "🦸🏻", "🦸🏻♀", "🦸🏻♀️", "🦸🏻♂", "🦸🏻♂️", "🦸🏼", "🦸🏼♀", "🦸🏼♀️", "🦸🏼♂", "🦸🏼♂️", "🦸🏽", "🦸🏽♀", "🦸🏽♀️", "🦸🏽♂", "🦸🏽♂️", "🦸🏾", "🦸🏾♀", "🦸🏾♀️", "🦸🏾♂", "🦸🏾♂️", "🦸🏿", "🦸🏿♀", "🦸🏿♀️", "🦸🏿♂", "🦸🏿♂️", "🦹", "🦹♀", "🦹♀️", "🦹♂", "🦹♂️", "🦹🏻", "🦹🏻♀", "🦹🏻♀️", "🦹🏻♂", "🦹🏻♂️", "🦹🏼", "🦹🏼♀", "🦹🏼♀️", "🦹🏼♂", "🦹🏼♂️", "🦹🏽", "🦹🏽♀", "🦹🏽♀️", "🦹🏽♂", "🦹🏽♂️", "🦹🏾", "🦹🏾♀", "🦹🏾♀️", "🦹🏾♂", "🦹🏾♂️", "🦹🏿", "🦹🏿♀", "🦹🏿♀️", "🦹🏿♂", "🦹🏿♂️", "🦺", "🦻", "🦻🏻", "🦻🏼", "🦻🏽", "🦻🏾", "🦻🏿", "🦼", "🦽", "🦾", "🦿", "🧀", "🧁", "🧂", "🧃", "🧄", "🧅", "🧆", "🧇", "🧈", "🧉", "🧊", "🧋", "🧌", "🧍", "🧍♀", "🧍♀️", "🧍♂", "🧍♂️", "🧍🏻", "🧍🏻♀", "🧍🏻♀️", "🧍🏻♂", "🧍🏻♂️", "🧍🏼", "🧍🏼♀", "🧍🏼♀️", "🧍🏼♂", "🧍🏼♂️", "🧍🏽", "🧍🏽♀", "🧍🏽♀️", "🧍🏽♂", "🧍🏽♂️", "🧍🏾", "🧍🏾♀", "🧍🏾♀️", "🧍🏾♂", "🧍🏾♂️", "🧍🏿", "🧍🏿♀", "🧍🏿♀️", "🧍🏿♂", "🧍🏿♂️", "🧎", "🧎♀", "🧎♀➡", "🧎♀➡️", "🧎♀️", "🧎♀️➡", "🧎♀️➡️", "🧎♂", "🧎♂➡", "🧎♂➡️", "🧎♂️", "🧎♂️➡", "🧎♂️➡️", "🧎➡", "🧎➡️", "🧎🏻", "🧎🏻♀", "🧎🏻♀➡", "🧎🏻♀➡️", "🧎🏻♀️", "🧎🏻♀️➡", "🧎🏻♀️➡️", "🧎🏻♂", "🧎🏻♂➡", "🧎🏻♂➡️", "🧎🏻♂️", "🧎🏻♂️➡", "🧎🏻♂️➡️", "🧎🏻➡", "🧎🏻➡️", "🧎🏼", "🧎🏼♀", "🧎🏼♀➡", "🧎🏼♀➡️", "🧎🏼♀️", "🧎🏼♀️➡", "🧎🏼♀️➡️", "🧎🏼♂", "🧎🏼♂➡", "🧎🏼♂➡️", "🧎🏼♂️", "🧎🏼♂️➡", "🧎🏼♂️➡️", "🧎🏼➡", "🧎🏼➡️", "🧎🏽", "🧎🏽♀", "🧎🏽♀➡", "🧎🏽♀➡️", "🧎🏽♀️", "🧎🏽♀️➡", "🧎🏽♀️➡️", "🧎🏽♂", "🧎🏽♂➡", "🧎🏽♂➡️", "🧎🏽♂️", "🧎🏽♂️➡", "🧎🏽♂️➡️", "🧎🏽➡", "🧎🏽➡️", "🧎🏾", "🧎🏾♀", "🧎🏾♀➡", "🧎🏾♀➡️", "🧎🏾♀️", "🧎🏾♀️➡", "🧎🏾♀️➡️", "🧎🏾♂", "🧎🏾♂➡", "🧎🏾♂➡️", "🧎🏾♂️", "🧎🏾♂️➡", "🧎🏾♂️➡️", "🧎🏾➡", "🧎🏾➡️", "🧎🏿", "🧎🏿♀", "🧎🏿♀➡", "🧎🏿♀➡️", "🧎🏿♀️", "🧎🏿♀️➡", "🧎🏿♀️➡️", "🧎🏿♂", "🧎🏿♂➡", "🧎🏿♂➡️", "🧎🏿♂️", "🧎🏿♂️➡", "🧎🏿♂️➡️", "🧎🏿➡", "🧎🏿➡️", "🧏", "🧏♀", "🧏♀️", "🧏♂", "🧏♂️", "🧏🏻", "🧏🏻♀", "🧏🏻♀️", "🧏🏻♂", "🧏🏻♂️", "🧏🏼", "🧏🏼♀", "🧏🏼♀️", "🧏🏼♂", "🧏🏼♂️", "🧏🏽", "🧏🏽♀", "🧏🏽♀️", "🧏🏽♂", "🧏🏽♂️", "🧏🏾", "🧏🏾♀", "🧏🏾♀️", "🧏🏾♂", "🧏🏾♂️", "🧏🏿", "🧏🏿♀", "🧏🏿♀️", "🧏🏿♂", "🧏🏿♂️", "🧐", "🧑", "🧑⚕", "🧑⚕️", "🧑⚖", "🧑⚖️", "🧑✈", "🧑✈️", "🧑🌾", "🧑🍳", "🧑🍼", "🧑🎄", "🧑🎓", "🧑🎤", "🧑🎨", "🧑🏫", "🧑🏭", "🧑💻", "🧑💼", "🧑🔧", "🧑🔬", "🧑🚀", "🧑🚒", "🧑🤝🧑", "🧑🦯", "🧑🦯➡", "🧑🦯➡️", "🧑🦰", "🧑🦱", "🧑🦲", "🧑🦳", "🧑🦼", "🧑🦼➡", "🧑🦼➡️", "🧑🦽", "🧑🦽➡", "🧑🦽➡️", "🧑🧑🧒", "🧑🧑🧒🧒", "🧑🧒", "🧑🧒🧒", "🧑🏻", "🧑🏻⚕", "🧑🏻⚕️", "🧑🏻⚖", "🧑🏻⚖️", "🧑🏻✈", "🧑🏻✈️", "🧑🏻❤💋🧑🏼", "🧑🏻❤💋🧑🏽", "🧑🏻❤💋🧑🏾", "🧑🏻❤💋🧑🏿", "🧑🏻❤🧑🏼", "🧑🏻❤🧑🏽", "🧑🏻❤🧑🏾", "🧑🏻❤🧑🏿", "🧑🏻❤️💋🧑🏼", "🧑🏻❤️💋🧑🏽", "🧑🏻❤️💋🧑🏾", "🧑🏻❤️💋🧑🏿", "🧑🏻❤️🧑🏼", "🧑🏻❤️🧑🏽", "🧑🏻❤️🧑🏾", "🧑🏻❤️🧑🏿", "🧑🏻🌾", "🧑🏻🍳", "🧑🏻🍼", "🧑🏻🎄", "🧑🏻🎓", "🧑🏻🎤", "🧑🏻🎨", "🧑🏻🏫", "🧑🏻🏭", "🧑🏻💻", "🧑🏻💼", "🧑🏻🔧", "🧑🏻🔬", "🧑🏻🚀", "🧑🏻🚒", "🧑🏻🤝🧑🏻", "🧑🏻🤝🧑🏼", "🧑🏻🤝🧑🏽", "🧑🏻🤝🧑🏾", "🧑🏻🤝🧑🏿", "🧑🏻🦯", "🧑🏻🦯➡", "🧑🏻🦯➡️", "🧑🏻🦰", "🧑🏻🦱", "🧑🏻🦲", "🧑🏻🦳", "🧑🏻🦼", "🧑🏻🦼➡", "🧑🏻🦼➡️", "🧑🏻🦽", "🧑🏻🦽➡", "🧑🏻🦽➡️", "🧑🏼", "🧑🏼⚕", "🧑🏼⚕️", "🧑🏼⚖", "🧑🏼⚖️", "🧑🏼✈", "🧑🏼✈️", "🧑🏼❤💋🧑🏻", "🧑🏼❤💋🧑🏽", "🧑🏼❤💋🧑🏾", "🧑🏼❤💋🧑🏿", "🧑🏼❤🧑🏻", "🧑🏼❤🧑🏽", "🧑🏼❤🧑🏾", "🧑🏼❤🧑🏿", "🧑🏼❤️💋🧑🏻", "🧑🏼❤️💋🧑🏽", "🧑🏼❤️💋🧑🏾", "🧑🏼❤️💋🧑🏿", "🧑🏼❤️🧑🏻", "🧑🏼❤️🧑🏽", "🧑🏼❤️🧑🏾", "🧑🏼❤️🧑🏿", "🧑🏼🌾", "🧑🏼🍳", "🧑🏼🍼", "🧑🏼🎄", "🧑🏼🎓", "🧑🏼🎤", "🧑🏼🎨", "🧑🏼🏫", "🧑🏼🏭", "🧑🏼💻", "🧑🏼💼", "🧑🏼🔧", "🧑🏼🔬", "🧑🏼🚀", "🧑🏼🚒", "🧑🏼🤝🧑🏻", "🧑🏼🤝🧑🏼", "🧑🏼🤝🧑🏽", "🧑🏼🤝🧑🏾", "🧑🏼🤝🧑🏿", "🧑🏼🦯", "🧑🏼🦯➡", "🧑🏼🦯➡️", "🧑🏼🦰", "🧑🏼🦱", "🧑🏼🦲", "🧑🏼🦳", "🧑🏼🦼", "🧑🏼🦼➡", "🧑🏼🦼➡️", "🧑🏼🦽", "🧑🏼🦽➡", "🧑🏼🦽➡️", "🧑🏽", "🧑🏽⚕", "🧑🏽⚕️", "🧑🏽⚖", "🧑🏽⚖️", "🧑🏽✈", "🧑🏽✈️", "🧑🏽❤💋🧑🏻", "🧑🏽❤💋🧑🏼", "🧑🏽❤💋🧑🏾", "🧑🏽❤💋🧑🏿", "🧑🏽❤🧑🏻", "🧑🏽❤🧑🏼", "🧑🏽❤🧑🏾", "🧑🏽❤🧑🏿", "🧑🏽❤️💋🧑🏻", "🧑🏽❤️💋🧑🏼", "🧑🏽❤️💋🧑🏾", "🧑🏽❤️💋🧑🏿", "🧑🏽❤️🧑🏻", "🧑🏽❤️🧑🏼", "🧑🏽❤️🧑🏾", "🧑🏽❤️🧑🏿", "🧑🏽🌾", "🧑🏽🍳", "🧑🏽🍼", "🧑🏽🎄", "🧑🏽🎓", "🧑🏽🎤", "🧑🏽🎨", "🧑🏽🏫", "🧑🏽🏭", "🧑🏽💻", "🧑🏽💼", "🧑🏽🔧", "🧑🏽🔬", "🧑🏽🚀", "🧑🏽🚒", "🧑🏽🤝🧑🏻", "🧑🏽🤝🧑🏼", "🧑🏽🤝🧑🏽", "🧑🏽🤝🧑🏾", "🧑🏽🤝🧑🏿", "🧑🏽🦯", "🧑🏽🦯➡", "🧑🏽🦯➡️", "🧑🏽🦰", "🧑🏽🦱", "🧑🏽🦲", "🧑🏽🦳", "🧑🏽🦼", "🧑🏽🦼➡", "🧑🏽🦼➡️", "🧑🏽🦽", "🧑🏽🦽➡", "🧑🏽🦽➡️", "🧑🏾", "🧑🏾⚕", "🧑🏾⚕️", "🧑🏾⚖", "🧑🏾⚖️", "🧑🏾✈", "🧑🏾✈️", "🧑🏾❤💋🧑🏻", "🧑🏾❤💋🧑🏼", "🧑🏾❤💋🧑🏽", "🧑🏾❤💋🧑🏿", "🧑🏾❤🧑🏻", "🧑🏾❤🧑🏼", "🧑🏾❤🧑🏽", "🧑🏾❤🧑🏿", "🧑🏾❤️💋🧑🏻", "🧑🏾❤️💋🧑🏼", "🧑🏾❤️💋🧑🏽", "🧑🏾❤️💋🧑🏿", "🧑🏾❤️🧑🏻", "🧑🏾❤️🧑🏼", "🧑🏾❤️🧑🏽", "🧑🏾❤️🧑🏿", "🧑🏾🌾", "🧑🏾🍳", "🧑🏾🍼", "🧑🏾🎄", "🧑🏾🎓", "🧑🏾🎤", "🧑🏾🎨", "🧑🏾🏫", "🧑🏾🏭", "🧑🏾💻", "🧑🏾💼", "🧑🏾🔧", "🧑🏾🔬", "🧑🏾🚀", "🧑🏾🚒", "🧑🏾🤝🧑🏻", "🧑🏾🤝🧑🏼", "🧑🏾🤝🧑🏽", "🧑🏾🤝🧑🏾", "🧑🏾🤝🧑🏿", "🧑🏾🦯", "🧑🏾🦯➡", "🧑🏾🦯➡️", "🧑🏾🦰", "🧑🏾🦱", "🧑🏾🦲", "🧑🏾🦳", "🧑🏾🦼", "🧑🏾🦼➡", "🧑🏾🦼➡️", "🧑🏾🦽", "🧑🏾🦽➡", "🧑🏾🦽➡️", "🧑🏿", "🧑🏿⚕", "🧑🏿⚕️", "🧑🏿⚖", "🧑🏿⚖️", "🧑🏿✈", "🧑🏿✈️", "🧑🏿❤💋🧑🏻", "🧑🏿❤💋🧑🏼", "🧑🏿❤💋🧑🏽", "🧑🏿❤💋🧑🏾", "🧑🏿❤🧑🏻", "🧑🏿❤🧑🏼", "🧑🏿❤🧑🏽", "🧑🏿❤🧑🏾", "🧑🏿❤️💋🧑🏻", "🧑🏿❤️💋🧑🏼", "🧑🏿❤️💋🧑🏽", "🧑🏿❤️💋🧑🏾", "🧑🏿❤️🧑🏻", "🧑🏿❤️🧑🏼", "🧑🏿❤️🧑🏽", "🧑🏿❤️🧑🏾", "🧑🏿🌾", "🧑🏿🍳", "🧑🏿🍼", "🧑🏿🎄", "🧑🏿🎓", "🧑🏿🎤", "🧑🏿🎨", "🧑🏿🏫", "🧑🏿🏭", "🧑🏿💻", "🧑🏿💼", "🧑🏿🔧", "🧑🏿🔬", "🧑🏿🚀", "🧑🏿🚒", "🧑🏿🤝🧑🏻", "🧑🏿🤝🧑🏼", "🧑🏿🤝🧑🏽", "🧑🏿🤝🧑🏾", "🧑🏿🤝🧑🏿", "🧑🏿🦯", "🧑🏿🦯➡", "🧑🏿🦯➡️", "🧑🏿🦰", "🧑🏿🦱", "🧑🏿🦲", "🧑🏿🦳", "🧑🏿🦼", "🧑🏿🦼➡", "🧑🏿🦼➡️", "🧑🏿🦽", "🧑🏿🦽➡", "🧑🏿🦽➡️", "🧒", "🧒🏻", "🧒🏼", "🧒🏽", "🧒🏾", "🧒🏿", "🧓", "🧓🏻", "🧓🏼", "🧓🏽", "🧓🏾", "🧓🏿", "🧔", "🧔♀", "🧔♀️", "🧔♂", "🧔♂️", "🧔🏻", "🧔🏻♀", "🧔🏻♀️", "🧔🏻♂", "🧔🏻♂️", "🧔🏼", "🧔🏼♀", "🧔🏼♀️", "🧔🏼♂", "🧔🏼♂️", "🧔🏽", "🧔🏽♀", "🧔🏽♀️", "🧔🏽♂", "🧔🏽♂️", "🧔🏾", "🧔🏾♀", "🧔🏾♀️", "🧔🏾♂", "🧔🏾♂️", "🧔🏿", "🧔🏿♀", "🧔🏿♀️", "🧔🏿♂", "🧔🏿♂️", "🧕", "🧕🏻", "🧕🏼", "🧕🏽", "🧕🏾", "🧕🏿", "🧖", "🧖♀", "🧖♀️", "🧖♂", "🧖♂️", "🧖🏻", "🧖🏻♀", "🧖🏻♀️", "🧖🏻♂", "🧖🏻♂️", "🧖🏼", "🧖🏼♀", "🧖🏼♀️", "🧖🏼♂", "🧖🏼♂️", "🧖🏽", "🧖🏽♀", "🧖🏽♀️", "🧖🏽♂", "🧖🏽♂️", "🧖🏾", "🧖🏾♀", "🧖🏾♀️", "🧖🏾♂", "🧖🏾♂️", "🧖🏿", "🧖🏿♀", "🧖🏿♀️", "🧖🏿♂", "🧖🏿♂️", "🧗", "🧗♀", "🧗♀️", "🧗♂", "🧗♂️", "🧗🏻", "🧗🏻♀", "🧗🏻♀️", "🧗🏻♂", "🧗🏻♂️", "🧗🏼", "🧗🏼♀", "🧗🏼♀️", "🧗🏼♂", "🧗🏼♂️", "🧗🏽", "🧗🏽♀", "🧗🏽♀️", "🧗🏽♂", "🧗🏽♂️", "🧗🏾", "🧗🏾♀", "🧗🏾♀️", "🧗🏾♂", "🧗🏾♂️", "🧗🏿", "🧗🏿♀", "🧗🏿♀️", "🧗🏿♂", "🧗🏿♂️", "🧘", "🧘♀", "🧘♀️", "🧘♂", "🧘♂️", "🧘🏻", "🧘🏻♀", "🧘🏻♀️", "🧘🏻♂", "🧘🏻♂️", "🧘🏼", "🧘🏼♀", "🧘🏼♀️", "🧘🏼♂", "🧘🏼♂️", "🧘🏽", "🧘🏽♀", "🧘🏽♀️", "🧘🏽♂", "🧘🏽♂️", "🧘🏾", "🧘🏾♀", "🧘🏾♀️", "🧘🏾♂", "🧘🏾♂️", "🧘🏿", "🧘🏿♀", "🧘🏿♀️", "🧘🏿♂", "🧘🏿♂️", "🧙", "🧙♀", "🧙♀️", "🧙♂", "🧙♂️", "🧙🏻", "🧙🏻♀", "🧙🏻♀️", "🧙🏻♂", "🧙🏻♂️", "🧙🏼", "🧙🏼♀", "🧙🏼♀️", "🧙🏼♂", "🧙🏼♂️", "🧙🏽", "🧙🏽♀", "🧙🏽♀️", "🧙🏽♂", "🧙🏽♂️", "🧙🏾", "🧙🏾♀", "🧙🏾♀️", "🧙🏾♂", "🧙🏾♂️", "🧙🏿", "🧙🏿♀", "🧙🏿♀️", "🧙🏿♂", "🧙🏿♂️", "🧚", "🧚♀", "🧚♀️", "🧚♂", "🧚♂️", "🧚🏻", "🧚🏻♀", "🧚🏻♀️", "🧚🏻♂", "🧚🏻♂️", "🧚🏼", "🧚🏼♀", "🧚🏼♀️", "🧚🏼♂", "🧚🏼♂️", "🧚🏽", "🧚🏽♀", "🧚🏽♀️", "🧚🏽♂", "🧚🏽♂️", "🧚🏾", "🧚🏾♀", "🧚🏾♀️", "🧚🏾♂", "🧚🏾♂️", "🧚🏿", "🧚🏿♀", "🧚🏿♀️", "🧚🏿♂", "🧚🏿♂️", "🧛", "🧛♀", "🧛♀️", "🧛♂", "🧛♂️", "🧛🏻", "🧛🏻♀", "🧛🏻♀️", "🧛🏻♂", "🧛🏻♂️", "🧛🏼", "🧛🏼♀", "🧛🏼♀️", "🧛🏼♂", "🧛🏼♂️", "🧛🏽", "🧛🏽♀", "🧛🏽♀️", "🧛🏽♂", "🧛🏽♂️", "🧛🏾", "🧛🏾♀", "🧛🏾♀️", "🧛🏾♂", "🧛🏾♂️", "🧛🏿", "🧛🏿♀", "🧛🏿♀️", "🧛🏿♂", "🧛🏿♂️", "🧜", "🧜♀", "🧜♀️", "🧜♂", "🧜♂️", "🧜🏻", "🧜🏻♀", "🧜🏻♀️", "🧜🏻♂", "🧜🏻♂️", "🧜🏼", "🧜🏼♀", "🧜🏼♀️", "🧜🏼♂", "🧜🏼♂️", "🧜🏽", "🧜🏽♀", "🧜🏽♀️", "🧜🏽♂", "🧜🏽♂️", "🧜🏾", "🧜🏾♀", "🧜🏾♀️", "🧜🏾♂", "🧜🏾♂️", "🧜🏿", "🧜🏿♀", "🧜🏿♀️", "🧜🏿♂", "🧜🏿♂️", "🧝", "🧝♀", "🧝♀️", "🧝♂", "🧝♂️", "🧝🏻", "🧝🏻♀", "🧝🏻♀️", "🧝🏻♂", "🧝🏻♂️", "🧝🏼", "🧝🏼♀", "🧝🏼♀️", "🧝🏼♂", "🧝🏼♂️", "🧝🏽", "🧝🏽♀", "🧝🏽♀️", "🧝🏽♂", "🧝🏽♂️", "🧝🏾", "🧝🏾♀", "🧝🏾♀️", "🧝🏾♂", "🧝🏾♂️", "🧝🏿", "🧝🏿♀", "🧝🏿♀️", "🧝🏿♂", "🧝🏿♂️", "🧞", "🧞♀", "🧞♀️", "🧞♂", "🧞♂️", "🧟", "🧟♀", "🧟♀️", "🧟♂", "🧟♂️", "🧠", "🧡", "🧢", "🧣", "🧤", "🧥", "🧦", "🧧", "🧨", "🧩", "🧪", "🧫", "🧬", "🧭", "🧮", "🧯", "🧰", "🧱", "🧲", "🧳", "🧴", "🧵", "🧶", "🧷", "🧸", "🧹", "🧺", "🧻", "🧼", "🧽", "🧾", "🧿", "🩰", "🩱", "🩲", "🩳", "🩴", "🩵", "🩶", "🩷", "🩸", "🩹", "🩺", "🩻", "🩼", "🪀", "🪁", "🪂", "🪃", "🪄", "🪅", "🪆", "🪇", "🪈", "", "", "🪐", "🪑", "🪒", "🪓", "🪔", "🪕", "🪖", "🪗", "🪘", "🪙", "🪚", "🪛", "🪜", "🪝", "🪞", "🪟", "🪠", "🪡", "🪢", "🪣", "🪤", "🪥", "🪦", "🪧", "🪨", "🪩", "🪪", "🪫", "🪬", "🪭", "🪮", "🪯", "🪰", "🪱", "🪲", "🪳", "🪴", "🪵", "🪶", "🪷", "🪸", "🪹", "🪺", "🪻", "🪼", "🪽", "", "🪿", "🫀", "🫁", "🫂", "🫃", "🫃🏻", "🫃🏼", "🫃🏽", "🫃🏾", "🫃🏿", "🫄", "🫄🏻", "🫄🏼", "🫄🏽", "🫄🏾", "🫄🏿", "🫅", "🫅🏻", "🫅🏼", "🫅🏽", "🫅🏾", "🫅🏿", "", "🫎", "🫏", "🫐", "🫑", "🫒", "🫓", "🫔", "🫕", "🫖", "🫗", "🫘", "🫙", "🫚", "🫛", "", "", "🫠", "🫡", "🫢", "🫣", "🫤", "🫥", "🫦", "🫧", "🫨", "", "🫰", "🫰🏻", "🫰🏼", "🫰🏽", "🫰🏾", "🫰🏿", "🫱", "🫱🏻", "🫱🏻🫲🏼", "🫱🏻🫲🏽", "🫱🏻🫲🏾", "🫱🏻🫲🏿", "🫱🏼", "🫱🏼🫲🏻", "🫱🏼🫲🏽", "🫱🏼🫲🏾", "🫱🏼🫲🏿", "🫱🏽", "🫱🏽🫲🏻", "🫱🏽🫲🏼", "🫱🏽🫲🏾", "🫱🏽🫲🏿", "🫱🏾", "🫱🏾🫲🏻", "🫱🏾🫲🏼", "🫱🏾🫲🏽", "🫱🏾🫲🏿", "🫱🏿", "🫱🏿🫲🏻", "🫱🏿🫲🏼", "🫱🏿🫲🏽", "🫱🏿🫲🏾", "🫲", "🫲🏻", "🫲🏼", "🫲🏽", "🫲🏾", "🫲🏿", "🫳", "🫳🏻", "🫳🏼", "🫳🏽", "🫳🏾", "🫳🏿", "🫴", "🫴🏻", "🫴🏼", "🫴🏽", "🫴🏾", "🫴🏿", "🫵", "🫵🏻", "🫵🏼", "🫵🏽", "🫵🏾", "🫵🏿", "🫶", "🫶🏻", "🫶🏼", "🫶🏽", "🫶🏾", "🫶🏿", "🫷", "🫷🏻", "🫷🏼", "🫷🏽", "🫷🏾", "🫷🏿", "🫸", "🫸🏻", "🫸🏼", "🫸🏽", "🫸🏾", "🫸🏿"}
|
27
|
+
### EMOJIS END ###
|
28
|
+
|
29
|
+
|
30
|
+
# The ESCAPED_EMOJI list is sorted in descending order to make that longer emoji appear
|
31
|
+
# first in the regex compiled below. This ensures that we grab the full emoji in a
|
32
|
+
# multi-character emoji sequence that starts with a shorter emoji (emoji are weird...).
|
33
|
+
ESCAPED_EMOJI = [re.escape(e) for e in sorted(ALL_EMOJIS, reverse=True)]
|
34
|
+
EMOJI_EXTRACTION_REGEX = re.compile(f"^({'|'.join(ESCAPED_EMOJI)})[_ -]*(.*)")
|
streamlit/env_util.py
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import os
|
18
|
+
import platform
|
19
|
+
import re
|
20
|
+
import sys
|
21
|
+
|
22
|
+
_system = platform.system()
|
23
|
+
IS_WINDOWS = _system == "Windows"
|
24
|
+
IS_DARWIN = _system == "Darwin"
|
25
|
+
IS_LINUX_OR_BSD = (_system == "Linux") or ("BSD" in _system)
|
26
|
+
|
27
|
+
|
28
|
+
def is_pex() -> bool:
|
29
|
+
"""Return if streamlit running in pex.
|
30
|
+
|
31
|
+
Pex modifies sys.path so the pex file is the first path and that's
|
32
|
+
how we determine we're running in the pex file.
|
33
|
+
"""
|
34
|
+
if re.match(r".*pex$", sys.path[0]):
|
35
|
+
return True
|
36
|
+
return False
|
37
|
+
|
38
|
+
|
39
|
+
def is_repl() -> bool:
|
40
|
+
"""Return True if running in the Python REPL."""
|
41
|
+
import inspect
|
42
|
+
|
43
|
+
root_frame = inspect.stack()[-1]
|
44
|
+
filename = root_frame[1] # 1 is the filename field in this tuple.
|
45
|
+
|
46
|
+
if filename.endswith(os.path.join("bin", "ipython")):
|
47
|
+
return True
|
48
|
+
|
49
|
+
# <stdin> is what the basic Python REPL calls the root frame's
|
50
|
+
# filename, and <string> is what iPython sometimes calls it.
|
51
|
+
if filename in ("<stdin>", "<string>"):
|
52
|
+
return True
|
53
|
+
|
54
|
+
return False
|
55
|
+
|
56
|
+
|
57
|
+
def is_executable_in_path(name: str) -> bool:
|
58
|
+
"""Check if executable is in OS path."""
|
59
|
+
from shutil import which
|
60
|
+
|
61
|
+
return which(name) is not None
|
streamlit/error_util.py
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from typing import Final
|
18
|
+
|
19
|
+
import streamlit
|
20
|
+
import streamlit.elements.exception as exception
|
21
|
+
from streamlit import config
|
22
|
+
from streamlit.delta_generator_singletons import get_dg_singleton_instance
|
23
|
+
from streamlit.logger import get_logger
|
24
|
+
|
25
|
+
_LOGGER: Final = get_logger(__name__)
|
26
|
+
|
27
|
+
|
28
|
+
def _print_rich_exception(e: BaseException) -> None:
|
29
|
+
from rich import box, panel
|
30
|
+
|
31
|
+
# Monkey patch the panel to use our custom box style
|
32
|
+
class ConfigurablePanel(panel.Panel):
|
33
|
+
def __init__(
|
34
|
+
self,
|
35
|
+
renderable,
|
36
|
+
box=box.Box("────\n \n────\n \n────\n────\n \n────\n"),
|
37
|
+
**kwargs,
|
38
|
+
):
|
39
|
+
super().__init__(renderable, box, **kwargs)
|
40
|
+
|
41
|
+
from rich import traceback as rich_traceback
|
42
|
+
|
43
|
+
rich_traceback.Panel = ConfigurablePanel # type: ignore
|
44
|
+
|
45
|
+
# Configure console
|
46
|
+
from rich.console import Console
|
47
|
+
|
48
|
+
console = Console(
|
49
|
+
color_system="256",
|
50
|
+
force_terminal=True,
|
51
|
+
width=88,
|
52
|
+
no_color=False,
|
53
|
+
tab_size=8,
|
54
|
+
)
|
55
|
+
|
56
|
+
# Print exception via rich
|
57
|
+
console.print(
|
58
|
+
rich_traceback.Traceback.from_exception(
|
59
|
+
type(e),
|
60
|
+
e,
|
61
|
+
e.__traceback__,
|
62
|
+
width=88,
|
63
|
+
show_locals=False,
|
64
|
+
max_frames=100,
|
65
|
+
word_wrap=False,
|
66
|
+
extra_lines=3,
|
67
|
+
suppress=[streamlit],
|
68
|
+
)
|
69
|
+
)
|
70
|
+
|
71
|
+
|
72
|
+
def _show_exception(ex: BaseException) -> None:
|
73
|
+
"""Show the exception on the frontend."""
|
74
|
+
main_delta_generator = get_dg_singleton_instance().main_dg
|
75
|
+
exception._exception(main_delta_generator, ex, is_uncaught_app_exception=True)
|
76
|
+
|
77
|
+
|
78
|
+
def handle_uncaught_app_exception(ex: BaseException) -> None:
|
79
|
+
"""Handle an exception that originated from a user app.
|
80
|
+
|
81
|
+
By default, we show exceptions directly in the browser. However,
|
82
|
+
if the user has disabled client error details, we display a generic
|
83
|
+
warning in the frontend instead.
|
84
|
+
"""
|
85
|
+
|
86
|
+
error_logged = False
|
87
|
+
|
88
|
+
if config.get_option("logger.enableRich"):
|
89
|
+
try:
|
90
|
+
# Print exception via rich
|
91
|
+
# Rich is only a soft dependency
|
92
|
+
# -> if not installed, we will use the default traceback formatting
|
93
|
+
_print_rich_exception(ex)
|
94
|
+
error_logged = True
|
95
|
+
except Exception:
|
96
|
+
# Rich is not installed or not compatible to our config
|
97
|
+
# -> Use normal traceback formatting as fallback
|
98
|
+
# Catching all exceptions because we don't want to leave any possibility of breaking here.
|
99
|
+
error_logged = False
|
100
|
+
|
101
|
+
if not error_logged:
|
102
|
+
# Only log error to console if not already logged by rich
|
103
|
+
_LOGGER.error("Uncaught app execution", exc_info=ex)
|
104
|
+
|
105
|
+
_show_exception(ex)
|