diff --git a/src/styles.less b/src/styles.less index ec59e34..a3ab828 100644 --- a/src/styles.less +++ b/src/styles.less @@ -1,5 +1,12 @@ +@font-face { + font-family: "Material Symbols Outlined"; + font-style: normal; + src: url("./fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].woff2") format("woff"); +} + html, body { + font-size: 24px; height: 100%; margin: 0; overflow: hidden; @@ -12,8 +19,8 @@ body { font-family: Verdana, sans-serif; font-weight: bold; height: 500px; - left: calc(50% - 250px); - padding: 40px; + left: calc(50% - 275px); + padding: 25px; position: absolute; text-shadow: #000 1px 1px, #000 -1px 1px, @@ -23,9 +30,32 @@ body { width: 500px; z-index: 10; + .material { + font-family: "Material Symbols Outlined"; + font-weight: normal; + font-style: normal; + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + vertical-align: text-bottom; + } + @supports (-webkit-text-stroke: 1px #000) { -webkit-text-stroke: 1px #000; -webkit-text-fill-color: #fff; } + + #time { + font-size: 3rem; + text-align: center; + } + + section header { + font-size: 1.5rem; + } } } \ No newline at end of file diff --git a/src/weather.ts b/src/weather.ts index 3b0ef19..84e54bb 100644 --- a/src/weather.ts +++ b/src/weather.ts @@ -15,8 +15,12 @@ export default class Weather { constructor(latitude?: number, longitude?: number) { this.options = new WeatherOptions(latitude ?? 47.61002138071677, longitude ?? -122.17906310779568) + const time = document.getElementById("time") + time.textContent = new Date().toLocaleTimeString("en-US", { hour12: false, timeStyle: "short" }) + setInterval(() => time.textContent = new Date().toLocaleTimeString("en-US", { hour12: false, timeStyle: "short" }), 15000) + const me = this - setInterval(() => me.fetchWeather().then(() => me.setDisplay()), 60000) + setInterval(() => me.fetchWeather().then(() => me.setDisplay()), 300000) me.fetchWeather().then(() => me.setDisplay()) } @@ -47,7 +51,7 @@ export default class Weather { return true } else { // Weather data is updated :00, :15, :30, :45 so wait at least a minute - if (me.lastFetched.current.getMinutes() % 15 < 5) { + if (me.lastFetched.current.getMinutes() % 15 >= 1 && me.lastFetched.current.getMinutes() % 15 < 6) { const now = new Date() // Make sure data is over 5 minutes old at least if ((now.getTime() - me.lastFetched.current.getTime()) > 300000) { @@ -138,24 +142,17 @@ export default class Weather { } private setDisplay() { - let panel = document.getElementById("weather-panel") - if (!panel) { - panel = document.createElement("main") - panel.id = "weather-panel" - document.body.appendChild(panel) - } - - while (panel.firstChild) panel.removeChild(panel.firstChild) - this.setDisplayCurrent(panel) + const current = document.getElementById("current") + current.innerHTML = `
thermostat${Math.round(this.current.temperature)} (${Math.round(this.current.feelsLike)})
+
+
water_drop ${Math.round(this.current.humidity)}%
+
cloud ${Math.round(this.current.cloudCoverage)}%
+
weather_mix ${Math.round(this.current.precipitation)}%
+
air ${Math.round(this.current.windSpeed)} (${Math.round(this.current.windGusts)}) ${this.inCardinals(this.current.windDirection)}
+
` } - private setDisplayCurrent(panel: HTMLElement) { - const currentSection = document.createElement("section") - currentSection.id = "current-section" - panel.appendChild(currentSection) - } - - private InCardinals(direction: number): string { + private inCardinals(direction: number): string { if (direction > 337.5 || direction <= 22.5) return "N" if (direction > 22.5 || direction <= 67.5) return "NE" if (direction > 67.5 || direction <= 112.5) return "E" diff --git a/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].codepoints b/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].codepoints new file mode 100755 index 0000000..5027a57 --- /dev/null +++ b/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].codepoints @@ -0,0 +1,3901 @@ +10k e951 +10mp e952 +11mp e953 +123 eb8d +12mp e954 +13mp e955 +14mp e956 +15mp e957 +16mp e958 +17mp e959 +18_up_rating f8fd +18mp e95a +19mp e95b +1k e95c +1k_plus e95d +1x_mobiledata efcd +1x_mobiledata_badge f7f1 +20mp e95e +21mp e95f +22mp e960 +23mp e961 +24fps_select f3f2 +24mp e962 +2d ef37 +2k e963 +2k_plus e964 +2mp e965 +30fps efce +30fps_select efcf +360 e577 +3d ed38 +3d_rotation e84d +3g_mobiledata efd0 +3g_mobiledata_badge f7f0 +3k e966 +3k_plus e967 +3mp e968 +3p efd1 +4g_mobiledata efd2 +4g_mobiledata_badge f7ef +4g_plus_mobiledata efd3 +4k e072 +4k_plus e969 +4mp e96a +50mp f6f3 +5g ef38 +5g_mobiledata_badge f7ee +5k e96b +5k_plus e96c +5mp e96d +60fps efd4 +60fps_select efd5 +6_ft_apart f21e +6k e96e +6k_plus e96f +6mp e970 +7k e971 +7k_plus e972 +7mp e973 +8k e974 +8k_plus e975 +8mp e976 +9k e977 +9k_plus e978 +9mp e979 +abc eb94 +ac_unit eb3b +access_alarm e855 +access_alarms e855 +access_time efd6 +access_time_filled efd6 +accessibility e84e +accessibility_new e92c +accessible e914 +accessible_forward e934 +accessible_menu f34e +account_balance e84f +account_balance_wallet e850 +account_box e851 +account_child e852 +account_child_invert e659 +account_circle f20b +account_circle_filled f20b +account_circle_off f7b3 +account_tree e97a +action_key f502 +activity_zone e1e6 +acute e4cb +ad e65a +ad_group e65b +ad_group_off eae5 +ad_off f7b2 +ad_units ef39 +adaptive_audio_mic f4cc +adaptive_audio_mic_off f4cb +adb e60e +add e145 +add_2 f3dd +add_a_photo e439 +add_ad e72a +add_alarm e856 +add_alert e003 +add_box e146 +add_business e729 +add_call f0b7 +add_card eb86 +add_chart ef3c +add_circle e3ba +add_circle_outline e3ba +add_column_left f425 +add_column_right f424 +add_comment e266 +add_diamond f49c +add_home f8eb +add_home_work f8ed +add_ic_call f0b7 +add_link e178 +add_location e567 +add_location_alt ef3a +add_moderator e97d +add_notes e091 +add_photo_alternate e43e +add_reaction e1d3 +add_road ef3b +add_row_above f423 +add_row_below f422 +add_shopping_cart e854 +add_task f23a +add_to_drive e65c +add_to_home_screen e1fe +add_to_photos e39d +add_to_queue e05c +add_triangle f48e +addchart ef3c +adf_scanner eada +adjust e39e +admin_meds e48d +admin_panel_settings ef3d +ads_click e762 +agender f888 +agriculture ea79 +air efd8 +air_freshener e2ca +air_purifier e97e +air_purifier_gen e829 +airline_seat_flat e630 +airline_seat_flat_angled e631 +airline_seat_individual_suite e632 +airline_seat_legroom_extra e633 +airline_seat_legroom_normal e634 +airline_seat_legroom_reduced e635 +airline_seat_recline_extra e636 +airline_seat_recline_normal e637 +airline_stops e7d0 +airlines e7ca +airplane_ticket efd9 +airplanemode_active e53d +airplanemode_inactive e194 +airplay e055 +airport_shuttle eb3c +airware f154 +airwave f154 +alarm e855 +alarm_add e856 +alarm_off e857 +alarm_on e858 +alarm_pause f35b +alarm_smart_wake f6b0 +album e019 +align_center e356 +align_end f797 +align_flex_center f796 +align_flex_end f795 +align_flex_start f794 +align_horizontal_center e00f +align_horizontal_left e00d +align_horizontal_right e010 +align_items_stretch f793 +align_justify_center f792 +align_justify_flex_end f791 +align_justify_flex_start f790 +align_justify_space_around f78f +align_justify_space_between f78e +align_justify_space_even f78d +align_justify_stretch f78c +align_self_stretch f78b +align_space_around f78a +align_space_between f789 +align_space_even f788 +align_start f787 +align_stretch f786 +align_vertical_bottom e015 +align_vertical_center e011 +align_vertical_top e00c +all_inbox e97f +all_inclusive eb3d +all_match e093 +all_out e90b +allergies e094 +allergy e64e +alt_route f184 +alternate_email e0e6 +altitude f873 +ambient_screen f6c4 +ambulance f803 +amend f802 +amp_stories ea13 +analytics ef3e +anchor f1cd +android e859 +animated_images f49a +animation e71c +announcement e87f +aod efda +aod_tablet f89f +aod_watch f6ac +apartment ea40 +api f1b7 +apk_document f88e +apk_install f88f +app_badging f72f +app_blocking ef3f +app_promo e981 +app_registration ef40 +app_settings_alt ef41 +app_shortcut eae4 +apparel ef7b +approval e982 +approval_delegation f84a +apps e5c3 +apps_outage e7cc +aq f55a +aq_indoor f55b +ar_on_you ef7c +ar_stickers e983 +architecture ea3b +archive e149 +area_chart e770 +arming_countdown e78a +arrow_and_edge f5d7 +arrow_back e5c4 +arrow_back_2 f43a +arrow_back_ios e5e0 +arrow_back_ios_new e2ea +arrow_circle_down f181 +arrow_circle_left eaa7 +arrow_circle_right eaaa +arrow_circle_up f182 +arrow_cool_down f4b6 +arrow_downward e5db +arrow_downward_alt e984 +arrow_drop_down e5c5 +arrow_drop_down_circle e5c6 +arrow_drop_up e5c7 +arrow_forward e5c8 +arrow_forward_ios e5e1 +arrow_insert f837 +arrow_left e5de +arrow_left_alt ef7d +arrow_menu_close f3d3 +arrow_menu_open f3d2 +arrow_or_edge f5d6 +arrow_outward f8ce +arrow_range f69b +arrow_right e5df +arrow_right_alt e941 +arrow_selector_tool f82f +arrow_split ea04 +arrow_top_left f72e +arrow_top_right f72d +arrow_upload_progress f3f4 +arrow_upload_ready f3f5 +arrow_upward e5d8 +arrow_upward_alt e986 +arrow_warm_up f4b5 +arrows_input f394 +arrows_more_down f8ab +arrows_more_up f8ac +arrows_output f393 +arrows_outward f72c +art_track e060 +article ef42 +article_person f368 +article_shortcut f587 +artist e01a +aspect_ratio e85b +assessment f0cc +assignment e85d +assignment_add f848 +assignment_ind e85e +assignment_late e85f +assignment_return e860 +assignment_returned e861 +assignment_turned_in e862 +assist_walker f8d5 +assistant e39f +assistant_device e987 +assistant_direction e988 +assistant_navigation e989 +assistant_on_hub f6c1 +assistant_photo f0c6 +assured_workload eb6f +asterisk f525 +astrophotography_auto f1d9 +astrophotography_off f1da +atm e573 +atr ebc7 +attach_email ea5e +attach_file e226 +attach_file_add f841 +attach_file_off f4d9 +attach_money e227 +attachment e2bc +attractions ea52 +attribution efdb +audio_description f58c +audio_file eb82 +audio_video_receiver f5d3 +audiotrack e405 +auto_activity_zone f8ad +auto_awesome e65f +auto_awesome_mosaic e660 +auto_awesome_motion e661 +auto_delete ea4c +auto_detect_voice f83e +auto_draw_solid e98a +auto_fix e663 +auto_fix_high e663 +auto_fix_normal e664 +auto_fix_off e665 +auto_graph e4fb +auto_label f6be +auto_meeting_room f6bf +auto_mode ec20 +auto_read_pause f219 +auto_read_play f216 +auto_schedule e214 +auto_stories e666 +auto_timer ef7f +auto_towing e71e +auto_transmission f53f +auto_videocam f6c0 +autofps_select efdc +automation f421 +autopause f6b6 +autopay f84b +autoplay f6b5 +autorenew e863 +autostop f682 +av1 f4b0 +av_timer e01b +avc f4af +avg_pace f6bb +avg_time f813 +award_star f612 +azm f6ec +baby_changing_station f19b +back_hand e764 +back_to_tab f72b +background_dot_large f79e +background_dot_small f514 +background_grid_small f79d +background_replace f20a +backlight_high f7ed +backlight_high_off f4ef +backlight_low f7ec +backpack f19c +backspace e14a +backup e864 +backup_table ef43 +badge ea67 +badge_critical_battery f156 +bakery_dining ea53 +balance eaf6 +balcony e58f +ballot e172 +bar_chart e26b +bar_chart_4_bars f681 +bar_chart_off f411 +barcode e70b +barcode_reader f85c +barcode_scanner e70c +barefoot f871 +batch_prediction f0f5 +bath_outdoor f6fb +bath_private f6fa +bath_public_large f6f9 +bathroom efdd +bathtub ea41 +battery_0_bar ebdc +battery_1_bar f09c +battery_20 f09c +battery_2_bar f09d +battery_30 f09d +battery_3_bar f09e +battery_4_bar f09f +battery_50 f09e +battery_5_bar f0a0 +battery_60 f09f +battery_6_bar f0a1 +battery_80 f0a0 +battery_90 f0a1 +battery_alert e19c +battery_android_0 f30d +battery_android_1 f30c +battery_android_2 f30b +battery_android_3 f30a +battery_android_4 f309 +battery_android_5 f308 +battery_android_6 f307 +battery_android_alert f306 +battery_android_bolt f305 +battery_android_full f304 +battery_android_plus f303 +battery_android_question f302 +battery_android_share f301 +battery_android_shield f300 +battery_change f7eb +battery_charging_20 f0a2 +battery_charging_30 f0a3 +battery_charging_50 f0a4 +battery_charging_60 f0a5 +battery_charging_80 f0a6 +battery_charging_90 f0a7 +battery_charging_full e1a3 +battery_error f7ea +battery_full e1a5 +battery_full_alt f13b +battery_horiz_000 f8ae +battery_horiz_050 f8af +battery_horiz_075 f8b0 +battery_low f155 +battery_plus f7e9 +battery_profile e206 +battery_saver efde +battery_share f67e +battery_status_good f67d +battery_std e1a5 +battery_unknown e1a6 +battery_vert_005 f8b1 +battery_vert_020 f8b2 +battery_vert_050 f8b3 +battery_very_low f156 +beach_access eb3e +bed efdf +bedroom_baby efe0 +bedroom_child efe1 +bedroom_parent efe2 +bedtime f159 +bedtime_off eb76 +beenhere e52d +bento f1f4 +bia f6eb +bid_landscape e678 +bid_landscape_disabled ef81 +bigtop_updates e669 +bike_dock f47b +bike_lane f47a +bike_scooter ef45 +biotech ea3a +blanket e828 +blender efe3 +blind f8d6 +blinds e286 +blinds_closed ec1f +block f08c +blood_pressure e097 +bloodtype efe4 +bluetooth e1a7 +bluetooth_audio e60f +bluetooth_connected e1a8 +bluetooth_disabled e1a9 +bluetooth_drive efe5 +bluetooth_searching e60f +blur_circular e3a2 +blur_linear e3a3 +blur_medium e84c +blur_off e3a4 +blur_on e3a5 +blur_short e8cf +boat_bus f36d +boat_railway f36c +body_fat e098 +body_system e099 +bolt ea0b +bomb f568 +book e86e +book_2 f53e +book_3 f53d +book_4 f53c +book_5 f53b +book_6 f3df +book_online f217 +book_ribbon f3e7 +bookmark e8e7 +bookmark_add e598 +bookmark_added e599 +bookmark_bag f410 +bookmark_border e8e7 +bookmark_check f457 +bookmark_flag f456 +bookmark_heart f455 +bookmark_manager f7b1 +bookmark_remove e59a +bookmark_star f454 +bookmarks e98b +books_movies_and_music ef82 +border_all e228 +border_bottom e229 +border_clear e22a +border_color e22b +border_horizontal e22c +border_inner e22d +border_left e22e +border_outer e22f +border_right e230 +border_style e231 +border_top e232 +border_vertical e233 +borg f40d +bottom_app_bar e730 +bottom_drawer e72d +bottom_navigation e98c +bottom_panel_close f72a +bottom_panel_open f729 +bottom_right_click f684 +bottom_sheets e98d +box f5a4 +box_add f5a5 +box_edit f5a6 +boy eb67 +brand_awareness e98e +brand_family f4f1 +branding_watermark e06b +breakfast_dining ea54 +breaking_news ea08 +breaking_news_alt_1 f0ba +breastfeeding f856 +brick f388 +brightness_1 e3fa +brightness_2 f036 +brightness_3 e3a8 +brightness_4 e3a9 +brightness_5 e3aa +brightness_6 e3ab +brightness_7 e3ac +brightness_alert f5cf +brightness_auto e1ab +brightness_empty f7e8 +brightness_high e1ac +brightness_low e1ad +brightness_medium e1ae +bring_your_own_ip e016 +broadcast_on_home f8f8 +broadcast_on_personal f8f9 +broken_image e3ad +browse eb13 +browse_activity f8a5 +browse_gallery ebd1 +browser_not_supported ef47 +browser_updated e7cf +brunch_dining ea73 +brush e3ae +bubble ef83 +bubble_chart e6dd +bubbles f64e +bug_report e868 +build f8cd +build_circle ef48 +bungalow e591 +burst_mode e43c +bus_alert e98f +bus_railway f36b +business e7ee +business_center eb3f +business_chip f84c +business_messages ef84 +buttons_alt e72f +cabin e589 +cable efe6 +cable_car f479 +cached e86a +cadence f4b4 +cake e7e9 +cake_add f85b +calculate ea5f +calendar_add_on ef85 +calendar_apps_script f0bb +calendar_clock f540 +calendar_month ebcc +calendar_today e935 +calendar_view_day e936 +calendar_view_month efe7 +calendar_view_week efe8 +call f0d4 +call_end f0bc +call_end_alt f0bc +call_log e08e +call_made e0b2 +call_merge e0b3 +call_missed e0b4 +call_missed_outgoing e0e4 +call_quality f652 +call_received e0b5 +call_split e0b6 +call_to_action e06c +camera e3af +camera_alt e412 +camera_enhance e8fc +camera_front e3b1 +camera_indoor efe9 +camera_outdoor efea +camera_rear e3b2 +camera_roll e3b3 +camera_video f7a6 +cameraswitch efeb +campaign ef49 +camping f8a2 +cancel e888 +cancel_presentation e0e9 +cancel_schedule_send ea39 +candle f588 +candlestick_chart ead4 +cannabis f2f3 +captive_portal f728 +capture f727 +car_crash ebf2 +car_defrost_left f344 +car_defrost_low_left f343 +car_defrost_low_right f342 +car_defrost_mid_low_left f341 +car_defrost_mid_right f340 +car_defrost_right f33f +car_fan_low_left f33e +car_fan_low_mid_left f33d +car_fan_low_right f33c +car_fan_mid_left f33b +car_fan_mid_low_right f33a +car_fan_mid_right f339 +car_fan_recirculate f338 +car_gear f337 +car_lock f336 +car_mirror_heat f335 +car_rental ea55 +car_repair ea56 +car_tag f4e3 +card_giftcard e8f6 +card_membership e8f7 +card_travel e8f8 +cardio_load f4b9 +cardiology e09c +cards e991 +cards_star f375 +carpenter f1f8 +carry_on_bag eb08 +carry_on_bag_checked eb0b +carry_on_bag_inactive eb0a +carry_on_bag_question eb09 +cases e992 +casino eb40 +cast e307 +cast_connected e308 +cast_for_education efec +cast_pause f5f0 +cast_warning f5ef +castle eab1 +category e574 +category_search f437 +celebration ea65 +cell_merge f82e +cell_tower ebba +cell_wifi e0ec +center_focus_strong e3b4 +center_focus_weak e3b5 +chair efed +chair_alt efee +chalet e585 +change_circle e2e7 +change_history e86b +charger e2ae +charging_station f19d +chart_data e473 +chat e0c9 +chat_add_on f0f3 +chat_apps_script f0bd +chat_bubble e0cb +chat_bubble_outline e0cb +chat_error f7ac +chat_info f52b +chat_paste_go f6bd +chat_paste_go_2 f3cb +check e5ca +check_box e834 +check_box_outline_blank e835 +check_circle f0be +check_circle_filled f0be +check_circle_outline f0be +check_in_out f6f6 +check_indeterminate_small f88a +check_small f88b +checkbook e70d +checked_bag eb0c +checked_bag_question eb0d +checklist e6b1 +checklist_rtl e6b3 +checkroom f19e +cheer f6a8 +chef_hat f357 +chess f5e7 +chess_pawn f3b6 +chevron_backward f46b +chevron_forward f46a +chevron_left e5cb +chevron_right e5cc +child_care eb41 +child_friendly eb42 +chip_extraction f821 +chips e993 +chrome_reader_mode e86d +chromecast_2 f17b +chromecast_device e83c +chronic ebb2 +church eaae +cinematic_blur f853 +circle ef4a +circle_notifications e994 +circles e7ea +circles_ext e7ec +clarify f0bf +class e86e +clean_hands f21f +cleaning e995 +cleaning_bucket f8b4 +cleaning_services f0ff +clear e5cd +clear_all e0b8 +clear_day f157 +clear_night f159 +climate_mini_split f8b5 +clinical_notes e09e +clock_arrow_down f382 +clock_arrow_up f381 +clock_loader_10 f726 +clock_loader_20 f725 +clock_loader_40 f724 +clock_loader_60 f723 +clock_loader_80 f722 +clock_loader_90 f721 +close e5cd +close_fullscreen f1cf +close_small f508 +closed_caption e996 +closed_caption_add f4ae +closed_caption_disabled f1dc +closed_caption_off e996 +cloud f15c +cloud_alert f3cc +cloud_circle e2be +cloud_done e2bf +cloud_download e2c0 +cloud_lock f386 +cloud_off e2c1 +cloud_queue f15c +cloud_sync eb5a +cloud_upload e2c3 +cloudy f15c +cloudy_filled f15c +cloudy_snowing e810 +co2 e7b0 +co_present eaf0 +code e86f +code_blocks f84d +code_off e4f3 +coffee efef +coffee_maker eff0 +cognition e09f +cognition_2 f3b5 +collapse_all e944 +collapse_content f507 +collections e3d3 +collections_bookmark e431 +color_lens e40a +colorize e3b8 +colors e997 +combine_columns f420 +comedy_mask f4d6 +comic_bubble f5dd +comment e24c +comment_bank ea4e +comments_disabled e7a2 +commit eaf5 +communication e27c +communities eb16 +communities_filled eb16 +commute e940 +compare e3b9 +compare_arrows e915 +compass_calibration e57c +component_exchange f1e7 +compost e761 +compress e94d +computer e31e +computer_arrow_up f2f7 +computer_cancel f2f6 +concierge f561 +conditions e0a0 +confirmation_number e638 +congenital e0a1 +connect_without_contact f223 +connected_tv e998 +connecting_airports e7c9 +construction ea3c +contact_emergency f8d1 +contact_mail e0d0 +contact_page f22e +contact_phone f0c0 +contact_phone_filled f0c0 +contact_support e94c +contactless ea71 +contactless_off f858 +contacts e0ba +contacts_product e999 +content_copy e14d +content_cut e14e +content_paste e14f +content_paste_go ea8e +content_paste_off e4f8 +content_paste_search ea9b +contextual_token f486 +contextual_token_add f485 +contract f5a0 +contract_delete f5a2 +contract_edit f5a1 +contrast eb37 +contrast_circle f49f +contrast_rtl_off ec72 +contrast_square f4a0 +control_camera e074 +control_point e3ba +control_point_duplicate e3bb +controller_gen e83d +conversion_path f0c1 +conversion_path_off f7b4 +convert_to_text f41f +conveyor_belt f867 +cookie eaac +cookie_off f79a +cooking e2b6 +cool_to_dry e276 +copy_all e2ec +copyright e90c +coronavirus f221 +corporate_fare f1d0 +cottage e587 +counter_0 f785 +counter_1 f784 +counter_2 f783 +counter_3 f782 +counter_4 f781 +counter_5 f780 +counter_6 f77f +counter_7 f77e +counter_8 f77d +counter_9 f77c +countertops f1f7 +create f097 +create_new_folder e2cc +credit_card e8a1 +credit_card_clock f438 +credit_card_gear f52d +credit_card_heart f52c +credit_card_off e4f4 +credit_score eff1 +crib e588 +crisis_alert ebe9 +crop e3be +crop_16_9 e3bc +crop_3_2 e3bd +crop_5_4 e3bf +crop_7_5 e3c0 +crop_9_16 f549 +crop_din e3c6 +crop_free e3c2 +crop_landscape e3c3 +crop_original e3f4 +crop_portrait e3c5 +crop_rotate e437 +crop_square e3c6 +crossword f5e5 +crowdsource eb18 +crown ecb3 +cruelty_free e799 +css eb93 +csv e6cf +currency_bitcoin ebc5 +currency_exchange eb70 +currency_franc eafa +currency_lira eaef +currency_pound eaf1 +currency_ruble eaec +currency_rupee eaf7 +currency_rupee_circle f460 +currency_yen eafb +currency_yuan eaf9 +curtains ec1e +curtains_closed ec1d +custom_typography e732 +cut f08b +cycle f854 +cyclone ebd5 +dangerous e99a +dark_mode e51c +dashboard e871 +dashboard_2 f3ea +dashboard_customize e99b +data_alert f7f6 +data_array ead1 +data_check f7f2 +data_exploration e76f +data_info_alert f7f5 +data_loss_prevention e2dc +data_object ead3 +data_saver_off eff2 +data_saver_on eff3 +data_table e99c +data_thresholding eb9f +data_usage eff2 +database f20e +database_off f414 +database_search f38e +database_upload f3dc +dataset f8ee +dataset_linked f8ef +date_range e916 +deblur eb77 +deceased e0a5 +decimal_decrease f82d +decimal_increase f82c +deck ea42 +dehaze e3c7 +delete e92e +delete_forever e92b +delete_history f518 +delete_outline e92e +delete_sweep e16c +delivery_dining eb28 +delivery_truck_bolt f3a2 +delivery_truck_speed f3a1 +demography e489 +density_large eba9 +density_medium eb9e +density_small eba8 +dentistry e0a6 +departure_board e576 +deployed_code f720 +deployed_code_account f51b +deployed_code_alert f5f2 +deployed_code_history f5f3 +deployed_code_update f5f4 +dermatology e0a7 +description e873 +deselect ebb6 +design_services f10a +desk f8f4 +deskphone f7fa +desktop_access_disabled e99d +desktop_cloud f3db +desktop_cloud_stack f3be +desktop_landscape f45e +desktop_landscape_add f439 +desktop_mac e30b +desktop_portrait f45d +desktop_windows e30c +destruction f585 +details e3c8 +detection_and_zone e29f +detector e282 +detector_alarm e1f7 +detector_battery e204 +detector_co e2af +detector_offline e223 +detector_smoke e285 +detector_status e1e8 +developer_board e30d +developer_board_off e4ff +developer_guide e99e +developer_mode e1b0 +developer_mode_tv e874 +device_band f2f5 +device_hub e335 +device_reset e8b3 +device_thermostat e1ff +device_unknown e339 +devices e326 +devices_fold ebde +devices_fold_2 f406 +devices_off f7a5 +devices_other e337 +devices_wearables f6ab +dew_point f879 +diagnosis e0a8 +diagonal_line f41e +dialer_sip e0bb +dialogs e99f +dialpad e0bc +diamond ead5 +dictionary f539 +difference eb7d +digital_out_of_home f1de +digital_wellbeing ef86 +dining eff4 +dinner_dining ea57 +directions e52e +directions_alt f880 +directions_alt_off f881 +directions_bike e52f +directions_boat eff5 +directions_boat_filled eff5 +directions_bus eff6 +directions_bus_filled eff6 +directions_car eff7 +directions_car_filled eff7 +directions_off f10f +directions_railway eff8 +directions_railway_2 f462 +directions_railway_filled eff8 +directions_run e566 +directions_subway effa +directions_subway_filled effa +directions_transit effa +directions_transit_filled effa +directions_walk e536 +directory_sync e394 +dirty_lens ef4b +disabled_by_default f230 +disabled_visible e76e +disc_full e610 +discover_tune e018 +dishwasher e9a0 +dishwasher_gen e832 +display_external_input f7e7 +display_settings eb97 +distance f6ea +diversity_1 f8d7 +diversity_2 f8d8 +diversity_3 f8d9 +diversity_4 f857 +dns e875 +do_disturb f08c +do_disturb_alt f08d +do_disturb_off f08e +do_disturb_on f08f +do_not_disturb f08d +do_not_disturb_alt f08c +do_not_disturb_off f08e +do_not_disturb_on f08f +do_not_disturb_on_total_silence effb +do_not_step f19f +do_not_touch f1b0 +dock e30e +dock_to_bottom f7e6 +dock_to_left f7e5 +dock_to_right f7e4 +docs ea7d +docs_add_on f0c2 +docs_apps_script f0c3 +document_scanner e5fa +document_search f385 +domain e7ee +domain_add eb62 +domain_disabled e0ef +domain_verification ef4c +domain_verification_off f7b0 +domino_mask f5e4 +done e876 +done_all e877 +done_outline e92f +donut_large e917 +donut_small e918 +door_back effc +door_front effd +door_open e77c +door_sensor e28a +door_sliding effe +doorbell efff +doorbell_3p e1e7 +doorbell_chime e1f3 +double_arrow ea50 +downhill_skiing e509 +download f090 +download_2 f523 +download_done f091 +download_for_offline f000 +downloading f001 +draft e66d +draft_orders e7b3 +drafts e151 +drag_click f71f +drag_handle e25d +drag_indicator e945 +drag_pan f71e +draw e746 +draw_abstract f7f8 +draw_collage f7f7 +drawing_recognition eb00 +dresser e210 +drive_eta eff7 +drive_export f41d +drive_file_move e9a1 +drive_file_move_outline e9a1 +drive_file_move_rtl e9a1 +drive_file_rename_outline e9a2 +drive_folder_upload e9a3 +drive_fusiontable e678 +dropdown e9a4 +dropper_eye f351 +dry f1b3 +dry_cleaning ea58 +dual_screen f6cf +duo e9a5 +dvr e1b2 +dynamic_feed ea14 +dynamic_form f1bf +e911_avatar f11a +e911_emergency f119 +e_mobiledata f002 +e_mobiledata_badge f7e3 +ear_sound f356 +earbud_case f327 +earbud_left f326 +earbud_right f325 +earbuds f003 +earbuds_2 f324 +earbuds_battery f004 +early_on e2ba +earthquake f64f +east f1df +ecg f80f +ecg_heart f6e9 +eco ea35 +eda f6e8 +edgesensor_high f005 +edgesensor_low f006 +edit f097 +edit_arrow_down f380 +edit_arrow_up f37f +edit_attributes e578 +edit_audio f42d +edit_calendar e742 +edit_document f88c +edit_location e568 +edit_location_alt e1c5 +edit_note e745 +edit_notifications e525 +edit_off e950 +edit_road ef4d +edit_square f88d +editor_choice f528 +egg eacc +egg_alt eac8 +eject e8fb +elderly f21a +elderly_woman eb69 +electric_bike eb1b +electric_bolt ec1c +electric_car eb1c +electric_meter ec1b +electric_moped eb1d +electric_rickshaw eb1e +electric_scooter eb1f +electrical_services f102 +elevation f6e7 +elevator f1a0 +email e159 +emergency e1eb +emergency_heat f15d +emergency_heat_2 f4e5 +emergency_home e82a +emergency_recording ebf4 +emergency_share ebf6 +emergency_share_off f59e +emoji_emotions ea22 +emoji_events ea23 +emoji_flags f0c6 +emoji_food_beverage ea1b +emoji_language f4cd +emoji_nature ea1c +emoji_objects ea24 +emoji_people ea1d +emoji_symbols ea1e +emoji_transportation ea1f +emoticon e5f3 +empty_dashboard f844 +enable f188 +encrypted e593 +encrypted_add f429 +encrypted_add_circle f42a +encrypted_minus_circle f428 +encrypted_off f427 +endocrinology e0a9 +energy e9a6 +energy_program_saving f15f +energy_program_time_used f161 +energy_savings_leaf ec1a +engineering ea3d +enhanced_encryption e63f +ent e0aa +enterprise e70e +enterprise_off eb4d +equal f77b +equalizer e01d +eraser_size_1 f3fc +eraser_size_2 f3fb +eraser_size_3 f3fa +eraser_size_4 f3f9 +eraser_size_5 f3f8 +error f8b6 +error_circle_rounded f8b6 +error_med e49b +error_outline f8b6 +escalator f1a1 +escalator_warning f1ac +euro ea15 +euro_symbol e926 +ev_charger e56d +ev_mobiledata_badge f7e2 +ev_shadow ef8f +ev_shadow_add f580 +ev_shadow_minus f57f +ev_station e56d +event e878 +event_available e614 +event_busy e615 +event_list f683 +event_note e616 +event_repeat eb7b +event_seat e903 +event_upcoming f238 +exclamation f22f +exercise f6e6 +exit_to_app e879 +expand e94f +expand_all e946 +expand_circle_down e7cd +expand_circle_right f591 +expand_circle_up f5d2 +expand_content f830 +expand_less e5ce +expand_more e5cf +expansion_panels ef90 +expension_panels ef90 +experiment e686 +explicit e01e +explore e87a +explore_nearby e538 +explore_off e9a8 +explosion f685 +export_notes e0ac +exposure e3f6 +exposure_neg_1 e3cb +exposure_neg_2 e3cc +exposure_plus_1 e800 +exposure_plus_2 e3ce +exposure_zero e3cf +extension e87b +extension_off e4f5 +eye_tracking f4c9 +eyeglasses f6ee +face f008 +face_2 f8da +face_3 f8db +face_4 f8dc +face_5 f8dd +face_6 f8de +face_down f402 +face_left f401 +face_nod f400 +face_retouching_natural ef4e +face_retouching_off f007 +face_right f3ff +face_shake f3fe +face_unlock f008 +face_up f3fd +fact_check f0c5 +factory ebbc +falling f60d +familiar_face_and_zone e21c +family_history e0ad +family_home eb26 +family_link eb19 +family_restroom f1a2 +family_star f527 +fan_focus f334 +fan_indirect f333 +farsight_digital f559 +fast_forward e01f +fast_rewind e020 +fastfood e57a +faucet e278 +favorite e87e +favorite_border e87e +fax ead8 +feature_search e9a9 +featured_play_list e06d +featured_seasonal_and_gifts ef91 +featured_video e06e +feed f009 +feedback e87f +female e590 +femur f891 +femur_alt f892 +fence f1f6 +fertile f6e5 +festival ea68 +fiber_dvr e05d +fiber_manual_record e061 +fiber_new e05e +fiber_pin e06a +fiber_smart_record e062 +file_copy e173 +file_copy_off f4d8 +file_download f090 +file_download_done f091 +file_download_off e4fe +file_export f3b2 +file_json f3bb +file_map e2c5 +file_map_stack f3e2 +file_open eaf3 +file_png f3bc +file_present ea0e +file_save f17f +file_save_off e505 +file_upload f09b +file_upload_off f886 +files ea85 +filter e3d3 +filter_1 e3d0 +filter_2 e3d1 +filter_3 e3d2 +filter_4 e3d4 +filter_5 e3d5 +filter_6 e3d6 +filter_7 e3d7 +filter_8 e3d8 +filter_9 e3d9 +filter_9_plus e3da +filter_alt ef4f +filter_alt_off eb32 +filter_arrow_right f3d1 +filter_b_and_w e3db +filter_center_focus e3dc +filter_drama e3dd +filter_frames e3de +filter_hdr e3df +filter_list e152 +filter_list_alt e94e +filter_list_off eb57 +filter_none e3e0 +filter_retrolux e3e1 +filter_tilt_shift e3e2 +filter_vintage e3e3 +finance e6bf +finance_chip f84e +finance_mode ef92 +find_in_page e880 +find_replace e881 +fingerprint e90d +fingerprint_off f49d +fire_extinguisher f1d8 +fire_hydrant f1a3 +fire_truck f8f2 +fireplace ea43 +first_page e5dc +fit_page f77a +fit_page_height f397 +fit_page_width f396 +fit_screen ea10 +fit_width f779 +fitness_center eb43 +fitness_tracker f463 +flag f0c6 +flag_2 f40f +flag_check f3d8 +flag_circle eaf8 +flag_filled f0c6 +flaky ef50 +flare e3e4 +flash_auto e3e5 +flash_off e3e6 +flash_on e3e7 +flashlight_off f00a +flashlight_on f00b +flatware f00c +flex_direction f778 +flex_no_wrap f777 +flex_wrap f776 +flight e539 +flight_class e7cb +flight_land e904 +flight_takeoff e905 +flights_and_hotels e9ab +flightsmode ef93 +flip e3e8 +flip_camera_android ea37 +flip_camera_ios ea38 +flip_to_back e882 +flip_to_front e883 +float_landscape_2 f45c +float_portrait_2 f45b +flood ebe6 +floor f6e4 +floor_lamp e21e +flourescent f07d +flowchart f38d +flowsheet e0ae +fluid e483 +fluid_balance f80d +fluid_med f80c +fluorescent f07d +flutter f1dd +flutter_dash e00b +flyover f478 +fmd_bad f00e +fmd_good f1db +foggy e818 +folded_hands f5ed +folder e2c7 +folder_check f3d7 +folder_check_2 f3d6 +folder_code f3c8 +folder_copy ebbd +folder_data f586 +folder_delete eb34 +folder_eye f3d5 +folder_info f395 +folder_limited f4e4 +folder_managed f775 +folder_match f3d4 +folder_off eb83 +folder_open e2c8 +folder_shared e2c9 +folder_special e617 +folder_supervised f774 +folder_zip eb2c +follow_the_signs f222 +font_download e167 +font_download_off e4f9 +food_bank f1f2 +foot_bones f893 +footprint f87d +for_you e9ac +forest ea99 +fork_left eba0 +fork_right ebac +fork_spoon f3e4 +forklift f868 +format_align_center e234 +format_align_justify e235 +format_align_left e236 +format_align_right e237 +format_bold e238 +format_clear e239 +format_color_fill e23a +format_color_reset e23b +format_color_text e23c +format_h1 f85d +format_h2 f85e +format_h3 f85f +format_h4 f860 +format_h5 f861 +format_h6 f862 +format_image_left f863 +format_image_right f864 +format_indent_decrease e23d +format_indent_increase e23e +format_ink_highlighter f82b +format_italic e23f +format_letter_spacing f773 +format_letter_spacing_2 f618 +format_letter_spacing_standard f617 +format_letter_spacing_wide f616 +format_letter_spacing_wider f615 +format_line_spacing e240 +format_list_bulleted e241 +format_list_bulleted_add f849 +format_list_numbered e242 +format_list_numbered_rtl e267 +format_overline eb65 +format_paint e243 +format_paragraph f865 +format_quote e244 +format_quote_off f413 +format_shapes e25e +format_size e245 +format_strikethrough e246 +format_text_clip f82a +format_text_overflow f829 +format_text_wrap f828 +format_textdirection_l_to_r e247 +format_textdirection_r_to_l e248 +format_textdirection_vertical f4b8 +format_underlined e249 +format_underlined_squiggle f885 +forms_add_on f0c7 +forms_apps_script f0c8 +fort eaad +forum e8af +forward f57a +forward_10 e056 +forward_30 e057 +forward_5 e058 +forward_circle f6f5 +forward_media f6f4 +forward_to_inbox f187 +foundation f200 +fragrance f345 +frame_inspect f772 +frame_person f8a6 +frame_person_mic f4d5 +frame_person_off f7d1 +frame_reload f771 +frame_source f770 +free_breakfast eb44 +free_cancellation e748 +front_hand e769 +front_loader f869 +full_coverage eb12 +full_hd f58b +full_stacked_bar_chart f212 +fullscreen e5d0 +fullscreen_exit e5d1 +fullscreen_portrait f45a +function f866 +functions e24a +funicular f477 +g_mobiledata f010 +g_mobiledata_badge f7e1 +g_translate e927 +gallery_thumbnail f86f +gamepad e30f +games e30f +garage f011 +garage_door e714 +garage_home e82d +garden_cart f8a9 +gas_meter ec19 +gastroenterology e0f1 +gate e277 +gavel e90e +general_device e6de +generating_tokens e749 +genetics e0f3 +genres e6ee +gesture e155 +gesture_select f657 +get_app f090 +gif e908 +gif_2 f40e +gif_box e7a3 +girl eb68 +gite e58b +glass_cup f6e3 +globe e64c +globe_asia f799 +globe_book f3c9 +globe_location_pin f35d +globe_uk f798 +glucose e4a0 +glyphs f8a3 +go_to_line f71d +golf_course eb45 +gondola_lift f476 +google_home_devices e715 +google_plus_reshare f57a +google_tv_remote f5db +google_wifi f579 +gpp_bad f012 +gpp_good f013 +gpp_maybe f014 +gps_fixed e55c +gps_not_fixed e1b7 +gps_off e1b6 +grade f09a +gradient e3e9 +grading ea4f +grain e3ea +graph_1 f3a0 +graph_2 f39f +graph_3 f39e +graph_4 f39d +graph_5 f39c +graph_6 f39b +graph_7 f346 +graphic_eq e1b8 +grass f205 +grid_3x3 f015 +grid_3x3_off f67c +grid_4x4 f016 +grid_goldenratio f017 +grid_guides f76f +grid_off e3eb +grid_on e3ec +grid_view e9b0 +grocery ef97 +group ea21 +group_add e7f0 +group_off e747 +group_remove e7ad +group_search f3ce +group_work e886 +grouped_bar_chart f211 +groups f233 +groups_2 f8df +groups_3 f8e0 +guardian f4c1 +gynecology e0f4 +h_mobiledata f018 +h_mobiledata_badge f7e0 +h_plus_mobiledata f019 +h_plus_mobiledata_badge f7df +hail e9b1 +hallway e6f8 +hand_bones f894 +hand_gesture ef9c +hand_gesture_off f3f3 +handheld_controller f4c6 +handshake ebcb +handwriting_recognition eb02 +handyman f10b +hangout_video e0c1 +hangout_video_off e0c2 +hard_disk f3da +hard_drive f80e +hard_drive_2 f7a4 +hardware ea59 +hd e052 +hdr_auto f01a +hdr_auto_select f01b +hdr_enhanced_select ef51 +hdr_off e3ed +hdr_off_select f01c +hdr_on e3ee +hdr_on_select f01d +hdr_plus f01e +hdr_plus_off e3ef +hdr_strong e3f1 +hdr_weak e3f2 +head_mounted_device f4c5 +headphones f01f +headphones_battery f020 +headset f01f +headset_mic e311 +headset_off e33a +healing e3f3 +health_and_beauty ef9d +health_and_safety e1d5 +health_metrics f6e2 +heap_snapshot_large f76e +heap_snapshot_multiple f76d +heap_snapshot_thumbnail f76c +hearing e023 +hearing_aid f464 +hearing_aid_disabled f3b0 +hearing_disabled f104 +heart_broken eac2 +heart_check f60a +heart_minus f883 +heart_plus f884 +heat f537 +heat_pump ec18 +heat_pump_balance e27e +height ea16 +helicopter f60c +help e8fd +help_center f1c0 +help_clinic f810 +help_outline e8fd +hematology e0f6 +hevc f021 +hexagon eb39 +hide ef9e +hide_image f022 +hide_source f023 +high_density f79c +high_quality e024 +high_res f54b +highlight e25f +highlight_alt ef52 +highlight_keyboard_focus f510 +highlight_mouse_cursor f511 +highlight_off e888 +highlight_text_cursor f512 +highlighter_size_1 f76b +highlighter_size_2 f76a +highlighter_size_3 f769 +highlighter_size_4 f768 +highlighter_size_5 f767 +hiking e50a +history e8b3 +history_2 f3e6 +history_edu ea3e +history_off f4da +history_toggle_off f17d +hive eaa6 +hls eb8a +hls_off eb8c +holiday_village e58a +home e9b2 +home_and_garden ef9f +home_app_logo e295 +home_filled e9b2 +home_health e4b9 +home_improvement_and_tools efa0 +home_iot_device e283 +home_max f024 +home_max_dots e849 +home_mini f025 +home_pin f14d +home_repair_service f100 +home_speaker f11c +home_storage f86c +home_work f030 +horizontal_distribute e014 +horizontal_rule f108 +horizontal_split e947 +host f3d9 +hot_tub eb46 +hotel e549 +hotel_class e743 +hourglass ebff +hourglass_arrow_down f37e +hourglass_arrow_up f37d +hourglass_bottom ea5c +hourglass_disabled ef53 +hourglass_empty e88b +hourglass_full e88c +hourglass_pause f38c +hourglass_top ea5b +house ea44 +house_siding f202 +house_with_shield e786 +houseboat e584 +household_supplies efa1 +hov f475 +how_to_reg e174 +how_to_vote e175 +hr_resting f6ba +html eb7e +http e902 +https e899 +hub e9f4 +humerus f895 +humerus_alt f896 +humidity_high f163 +humidity_indoor f558 +humidity_low f164 +humidity_mid f165 +humidity_percentage f87e +hvac f10e +hvac_max_defrost f332 +ice_skating e50b +icecream ea69 +id_card f4ca +identity_aware_proxy e2dd +identity_platform ebb7 +ifl e025 +iframe f71b +iframe_off f71c +image e3f4 +image_arrow_up f317 +image_aspect_ratio e3f5 +image_not_supported f116 +image_search e43f +imagesearch_roller e9b4 +imagesmode efa2 +immunology e0fb +import_contacts e0e0 +import_export e8d5 +important_devices e912 +in_home_mode e833 +inactive_order e0fc +inbox e156 +inbox_customize f859 +inbox_text f399 +inbox_text_asterisk f360 +inbox_text_person f35e +inbox_text_share f35c +incomplete_circle e79b +indeterminate_check_box e909 +indeterminate_question_box f56d +info e88e +info_i f59b +infrared f87c +ink_eraser e6d0 +ink_eraser_off e7e3 +ink_highlighter e6d1 +ink_highlighter_move f524 +ink_marker e6d2 +ink_pen e6d3 +ink_selection ef52 +inpatient e0fe +input e890 +input_circle f71a +insert_chart f0cc +insert_chart_filled f0cc +insert_chart_outlined f0cc +insert_comment e24c +insert_drive_file e66d +insert_emoticon ea22 +insert_invitation e878 +insert_link e250 +insert_page_break eaca +insert_photo e3f4 +insert_text f827 +insights f092 +install_desktop eb71 +install_mobile eb72 +instant_mix e026 +integration_instructions ef54 +interactive_space f7ff +interests e7c8 +interpreter_mode e83b +inventory e179 +inventory_2 e1a1 +invert_colors e891 +invert_colors_off e0c4 +ios e027 +ios_share e6b8 +iron e583 +iso e3f6 +jamboard_kiosk e9b5 +javascript eb7c +join f84f +join_full f84f +join_inner eaf4 +join_left eaf2 +join_right eaea +joystick f5ee +jump_to_element f719 +kayaking e50c +kebab_dining e842 +keep f026 +keep_off e6f9 +keep_pin f026 +keep_public f56f +kettle e2b9 +key e73c +key_off eb84 +key_vertical f51a +key_visualizer f199 +keyboard e312 +keyboard_alt f028 +keyboard_arrow_down e313 +keyboard_arrow_left e314 +keyboard_arrow_right e315 +keyboard_arrow_up e316 +keyboard_backspace e317 +keyboard_capslock e318 +keyboard_capslock_badge f7de +keyboard_command_key eae7 +keyboard_control_key eae6 +keyboard_double_arrow_down ead0 +keyboard_double_arrow_left eac3 +keyboard_double_arrow_right eac9 +keyboard_double_arrow_up eacf +keyboard_external_input f7dd +keyboard_full f7dc +keyboard_hide e31a +keyboard_keys f67b +keyboard_lock f492 +keyboard_lock_off f491 +keyboard_off f67a +keyboard_onscreen f7db +keyboard_option_key eae8 +keyboard_previous_language f7da +keyboard_return e31b +keyboard_tab e31c +keyboard_tab_rtl ec73 +keyboard_voice e31d +kid_star f526 +king_bed ea45 +kitchen eb47 +kitesurfing e50d +lab_panel e103 +lab_profile e104 +lab_research f80b +label e893 +label_important e948 +label_important_outline e948 +label_off e9b6 +label_outline e893 +labs e105 +lan eb2f +landscape e564 +landscape_2 f4c4 +landscape_2_edit f310 +landscape_2_off f4c3 +landslide ebd7 +language e894 +language_chinese_array f766 +language_chinese_cangjie f765 +language_chinese_dayi f764 +language_chinese_pinyin f763 +language_chinese_quick f762 +language_chinese_wubi f761 +language_french f760 +language_gb_english f75f +language_international f75e +language_japanese_kana f513 +language_korean_latin f75d +language_pinyin f75c +language_spanish f5e9 +language_us f759 +language_us_colemak f75b +language_us_dvorak f75a +laps f6b9 +laptop e31e +laptop_car f3cd +laptop_chromebook e31f +laptop_mac e320 +laptop_windows e321 +lasso_select eb03 +last_page e5dd +launch e89e +laundry e2a8 +layers e53b +layers_clear e53c +lda e106 +leaderboard f20c +leak_add e3f8 +leak_remove e3f9 +left_click f718 +left_panel_close f717 +left_panel_open f716 +legend_toggle f11b +lens e3fa +lens_blur f029 +letter_switch f758 +library_add e03c +library_add_check e9b7 +library_books e02f +library_music e030 +license eb04 +lift_to_talk efa3 +light f02a +light_group e28b +light_mode e518 +light_off e9b8 +lightbulb e90f +lightbulb_2 f3e3 +lightbulb_circle ebfe +lightbulb_outline e90f +lightning_stand efa4 +line_axis ea9a +line_curve f757 +line_end f826 +line_end_arrow f81d +line_end_arrow_notch f81c +line_end_circle f81b +line_end_diamond f81a +line_end_square f819 +line_start f825 +line_start_arrow f818 +line_start_arrow_notch f817 +line_start_circle f816 +line_start_diamond f815 +line_start_square f814 +line_style e919 +line_weight e91a +linear_scale e260 +link e250 +link_off e16f +linked_camera e438 +linked_services f535 +liquor ea60 +list e896 +list_alt e0ee +list_alt_add f756 +list_alt_check f3de +lists e9b9 +live_help e0c6 +live_tv e63a +living f02b +local_activity e553 +local_airport e53d +local_atm e53e +local_bar e540 +local_cafe eb44 +local_car_wash e542 +local_convenience_store e543 +local_dining e561 +local_drink e544 +local_fire_department ef55 +local_florist e545 +local_gas_station e546 +local_grocery_store e8cc +local_hospital e548 +local_hotel e549 +local_laundry_service e54a +local_library e54b +local_mall e54c +local_movies e8da +local_offer f05b +local_parking e54f +local_pharmacy e550 +local_phone f0d4 +local_pizza e552 +local_play e553 +local_police ef56 +local_post_office e554 +local_printshop e8ad +local_see e557 +local_shipping e558 +local_taxi e559 +location_automation f14f +location_away f150 +location_chip f850 +location_city e7f1 +location_disabled e1b6 +location_home f152 +location_off e0c7 +location_on f1db +location_pin f1db +location_searching e1b7 +locator_tag f8c1 +lock e899 +lock_clock ef57 +lock_open e898 +lock_open_circle f361 +lock_open_right f656 +lock_outline e899 +lock_person f8f3 +lock_reset eade +login ea77 +logo_dev ead6 +logout e9ba +looks e3fc +looks_3 e3fb +looks_4 e3fd +looks_5 e3fe +looks_6 e3ff +looks_one e400 +looks_two e401 +loop e863 +loupe e402 +low_density f79b +low_priority e16d +lowercase f48a +loyalty e89a +lte_mobiledata f02c +lte_mobiledata_badge f7d9 +lte_plus_mobiledata f02d +lte_plus_mobiledata_badge f7d8 +luggage f235 +lunch_dining ea61 +lyrics ec0b +macro_auto f6f2 +macro_off f8d2 +magic_button f136 +magic_exchange f7f4 +magic_tether f7d7 +magnification_large f83d +magnification_small f83c +magnify_docked f7d6 +magnify_fullscreen f7d5 +mail e159 +mail_lock ec0a +mail_off f48b +mail_outline e159 +male e58e +man e4eb +man_2 f8e1 +man_3 f8e2 +man_4 f8e3 +manage_accounts f02e +manage_history ebe7 +manage_search f02f +manga f5e3 +manufacturing e726 +map e55b +map_search f3ca +maps_home_work f030 +maps_ugc ef58 +margin e9bb +mark_as_unread e9bc +mark_chat_read f18b +mark_chat_unread f189 +mark_email_read f18c +mark_email_unread f18a +mark_unread_chat_alt eb9d +markdown f552 +markdown_copy f553 +markdown_paste f554 +markunread e159 +markunread_mailbox e89b +masked_transitions e72e +masked_transitions_add f42b +masks f218 +match_case f6f1 +match_case_off f36f +match_word f6f0 +matter e907 +maximize e930 +measuring_tape f6af +media_bluetooth_off f031 +media_bluetooth_on f032 +media_link f83f +media_output f4f2 +media_output_off f4f3 +mediation efa7 +medical_information ebed +medical_mask f80a +medical_services f109 +medication f033 +medication_liquid ea87 +meeting_room eb4f +memory e322 +memory_alt f7a3 +menstrual_health f6e1 +menu e5d2 +menu_book ea19 +menu_open e9bd +merge eb98 +merge_type e252 +message e0c9 +metabolism e10b +metro f474 +mfg_nest_yale_lock f11d +mic e31d +mic_alert f392 +mic_double f5d1 +mic_external_off ef59 +mic_external_on ef5a +mic_none e31d +mic_off e02b +microbiology e10c +microwave f204 +microwave_gen e847 +military_tech ea3f +mimo e9be +mimo_disconnect e9bf +mindfulness f6e0 +minimize e931 +minor_crash ebf1 +mintmark efa9 +missed_video_call f0ce +missed_video_call_filled f0ce +missing_controller e701 +mist e188 +mitre f547 +mixture_med e4c8 +mms e618 +mobile_friendly e200 +mobile_hand f323 +mobile_hand_left f313 +mobile_hand_left_off f312 +mobile_hand_off f314 +mobile_loupe f322 +mobile_off e201 +mobile_screen_share e0e7 +mobile_screensaver f321 +mobile_sound_2 f318 +mobile_speaker f320 +mobiledata_off f034 +mode f097 +mode_comment e253 +mode_cool f166 +mode_cool_off f167 +mode_dual f557 +mode_edit f097 +mode_edit_outline f097 +mode_fan f168 +mode_fan_off ec17 +mode_heat f16a +mode_heat_cool f16b +mode_heat_off f16d +mode_night f036 +mode_of_travel e7ce +mode_off_on f16f +mode_standby f037 +model_training f0cf +modeling f3aa +monetization_on e263 +money e57d +money_bag f3ee +money_off f038 +money_off_csred f038 +monitor ef5b +monitor_heart eaa2 +monitor_weight f039 +monitor_weight_gain f6df +monitor_weight_loss f6de +monitoring f190 +monochrome_photos e403 +monorail f473 +mood ea22 +mood_bad e7f3 +moon_stars f34f +mop e28d +moped eb28 +more e619 +more_down f196 +more_horiz e5d3 +more_time ea5d +more_up f197 +more_vert e5d4 +mosque eab2 +motion_blur f0d0 +motion_mode f842 +motion_photos_auto f03a +motion_photos_off e9c0 +motion_photos_on e9c1 +motion_photos_pause f227 +motion_photos_paused f227 +motion_play f40b +motion_sensor_active e792 +motion_sensor_alert e784 +motion_sensor_idle e783 +motion_sensor_urgent e78e +motorcycle e91b +mountain_flag f5e2 +mouse e323 +mouse_lock f490 +mouse_lock_off f48f +move e740 +move_down eb61 +move_group f715 +move_item f1ff +move_location e741 +move_selection_down f714 +move_selection_left f713 +move_selection_right f712 +move_selection_up f711 +move_to_inbox e168 +move_up eb64 +moved_location e594 +movie e404 +movie_creation e404 +movie_edit f840 +movie_filter e43a +movie_info e02d +movie_off f499 +moving e501 +moving_beds e73d +moving_ministry e73e +mp e9c3 +multicooker e293 +multiline_chart e6df +multimodal_hand_eye f41b +multiple_airports efab +multiple_stop f1b9 +museum ea36 +music_cast eb1a +music_note e405 +music_note_add f391 +music_off e440 +music_video e063 +my_location e55c +mystery f5e1 +nat ef5c +nature e406 +nature_people e407 +navigate_before e5cb +navigate_next e5cc +navigation e55d +near_me e569 +near_me_disabled f1ef +nearby e6b7 +nearby_error f03b +nearby_off f03c +nephrology e10d +nest_audio ebbf +nest_cam_floodlight f8b7 +nest_cam_indoor f11e +nest_cam_iq f11f +nest_cam_iq_outdoor f120 +nest_cam_magnet_mount f8b8 +nest_cam_outdoor f121 +nest_cam_stand f8b9 +nest_cam_wall_mount f8ba +nest_cam_wired_stand ec16 +nest_clock_farsight_analog f8bb +nest_clock_farsight_digital f8bc +nest_connect f122 +nest_detect f123 +nest_display f124 +nest_display_max f125 +nest_doorbell_visitor f8bd +nest_eco_leaf f8be +nest_farsight_weather f8bf +nest_found_savings f8c0 +nest_gale_wifi f579 +nest_heat_link_e f126 +nest_heat_link_gen_3 f127 +nest_hello_doorbell e82c +nest_locator_tag f8c1 +nest_mini e789 +nest_multi_room f8c2 +nest_protect e68e +nest_remote f5db +nest_remote_comfort_sensor f12a +nest_secure_alarm f12b +nest_sunblock f8c3 +nest_tag f8c1 +nest_thermostat e68f +nest_thermostat_e_eu f12d +nest_thermostat_gen_3 f12e +nest_thermostat_sensor f12f +nest_thermostat_sensor_eu f130 +nest_thermostat_zirconium_eu f131 +nest_true_radiant f8c4 +nest_wake_on_approach f8c5 +nest_wake_on_press f8c6 +nest_wifi_gale f132 +nest_wifi_mistral f133 +nest_wifi_point f134 +nest_wifi_point_vento f134 +nest_wifi_pro f56b +nest_wifi_pro_2 f56a +nest_wifi_router f133 +network_cell e1b9 +network_check e640 +network_intel_node f371 +network_intelligence efac +network_intelligence_history f5f6 +network_intelligence_update f5f5 +network_locked e61a +network_manage f7ab +network_node f56e +network_ping ebca +network_wifi e1ba +network_wifi_1_bar ebe4 +network_wifi_1_bar_locked f58f +network_wifi_2_bar ebd6 +network_wifi_2_bar_locked f58e +network_wifi_3_bar ebe1 +network_wifi_3_bar_locked f58d +network_wifi_locked f532 +neurology e10e +new_label e609 +new_releases ef76 +new_window f710 +news e032 +newsmode efad +newspaper eb81 +newsstand e9c4 +next_plan ef5d +next_week e16a +nfc e1bb +nfc_off f369 +night_shelter f1f1 +night_sight_auto f1d7 +night_sight_auto_off f1f9 +night_sight_max f6c3 +nightlife ea62 +nightlight f03d +nightlight_round f03d +nights_stay ea46 +no_accounts f03e +no_adult_content f8fe +no_backpack f237 +no_crash ebf0 +no_drinks f1a5 +no_encryption f03f +no_encryption_gmailerrorred f03f +no_flash f1a6 +no_food f1a7 +no_luggage f23b +no_meals f1d6 +no_meeting_room eb4e +no_photography f1a8 +no_sim e1ce +no_sound e710 +no_stroller f1af +no_transfer f1d5 +noise_aware ebec +noise_control_off ebf3 +noise_control_on f8a8 +nordic_walking e50e +north f1e0 +north_east f1e1 +north_west f1e2 +not_accessible f0fe +not_accessible_forward f54a +not_interested f08c +not_listed_location e575 +not_started f0d1 +note e66d +note_add e89c +note_alt f040 +note_stack f562 +note_stack_add f563 +notes e26c +notification_add e399 +notification_important e004 +notification_multiple e6c2 +notification_settings f367 +notification_sound f353 +notifications e7f5 +notifications_active e7f7 +notifications_none e7f5 +notifications_off e7f6 +notifications_paused e7f8 +notifications_unread f4fe +numbers eac7 +nutrition e110 +ods e6e8 +odt e6e9 +offline_bolt e932 +offline_pin e90a +offline_pin_off f4d0 +offline_share e9c5 +oil_barrel ec15 +on_device_training ebfd +on_hub_device e6c3 +oncology e114 +ondemand_video e63a +online_prediction f0eb +onsen f6f8 +opacity e91c +open_in_browser e89d +open_in_full f1ce +open_in_new e89e +open_in_new_down f70f +open_in_new_off e4f6 +open_in_phone e702 +open_jam efae +open_run f4b7 +open_with e89f +ophthalmology e115 +oral_disease e116 +orbit f426 +order_approve f812 +order_play f811 +orders eb14 +orthopedics f897 +other_admission e47b +other_houses e58c +outbound e1ca +outbox ef5f +outbox_alt eb17 +outdoor_garden e205 +outdoor_grill ea47 +outgoing_mail f0d2 +outlet f1d4 +outlined_flag f0c6 +outpatient e118 +outpatient_med e119 +output ebbe +output_circle f70e +oven e9c7 +oven_gen e843 +overview e4a7 +overview_key f7d4 +owl f3b4 +oxygen_saturation e4de +p2p f52a +pace f6b8 +pacemaker e656 +package e48f +package_2 f569 +padding e9c8 +page_control e731 +page_footer f383 +page_header f384 +page_info f614 +pageless f509 +pages e7f9 +pageview e8a0 +paid f041 +palette e40a +pallet f86a +pan_tool e925 +pan_tool_alt ebb9 +pan_zoom f655 +panorama e40b +panorama_fish_eye e40c +panorama_horizontal e40d +panorama_photosphere e9c9 +panorama_vertical e40e +panorama_wide_angle e40f +paragliding e50f +park ea63 +partly_cloudy_day f172 +partly_cloudy_night f174 +partner_exchange f7f9 +partner_reports efaf +party_mode e7fa +passkey f87f +password f042 +password_2 f4a9 +password_2_off f4a8 +patient_list e653 +pattern f043 +pause e034 +pause_circle e1a2 +pause_circle_filled e1a2 +pause_circle_outline e1a2 +pause_presentation e0ea +payment e8a1 +payments ef63 +pedal_bike eb29 +pediatrics e11d +pen_size_1 f755 +pen_size_2 f754 +pen_size_3 f753 +pen_size_4 f752 +pen_size_5 f751 +pending ef64 +pending_actions f1bb +pentagon eb50 +people ea21 +people_alt ea21 +people_outline ea21 +percent eb58 +performance_max e51a +pergola e203 +perm_camera_mic e8a2 +perm_contact_calendar e8a3 +perm_data_setting e8a4 +perm_device_information e8a5 +perm_identity f0d3 +perm_media e8a7 +perm_phone_msg e8a8 +perm_scan_wifi e8a9 +person f0d3 +person_2 f8e4 +person_3 f8e5 +person_4 f8e6 +person_add ea4d +person_add_alt ea4d +person_add_disabled e9cb +person_alert f567 +person_apron f5a3 +person_book f5e8 +person_cancel f566 +person_celebrate f7fe +person_check f565 +person_edit f4fa +person_filled f0d3 +person_off e510 +person_outline f0d3 +person_pin e55a +person_pin_circle e56a +person_play f7fd +person_raised_hand f59a +person_remove ef66 +person_search f106 +person_shield e384 +personal_bag eb0e +personal_bag_off eb0f +personal_bag_question eb10 +personal_injury e6da +personal_places e703 +personal_video e63b +pest_control f0fa +pest_control_rodent f0fd +pet_supplies efb1 +pets e91d +phishing ead7 +phone f0d4 +phone_alt f0d4 +phone_android e324 +phone_bluetooth_speaker e61b +phone_callback e649 +phone_disabled e9cc +phone_enabled e9cd +phone_forwarded e61c +phone_in_talk e61d +phone_iphone e325 +phone_locked e61e +phone_missed e61f +phone_paused e620 +phonelink e326 +phonelink_erase e0db +phonelink_lock e0dc +phonelink_off e327 +phonelink_ring e0dd +phonelink_ring_off f7aa +phonelink_setup ef41 +photo e432 +photo_album e411 +photo_auto_merge f530 +photo_camera e412 +photo_camera_back ef68 +photo_camera_front ef69 +photo_filter e43b +photo_frame f0d9 +photo_library e413 +photo_prints efb2 +photo_size_select_actual e432 +photo_size_select_large e433 +photo_size_select_small e434 +php eb8f +physical_therapy e11e +piano e521 +piano_off e520 +picture_as_pdf e415 +picture_in_picture e8aa +picture_in_picture_alt e911 +picture_in_picture_center f550 +picture_in_picture_large f54f +picture_in_picture_medium f54e +picture_in_picture_mobile f517 +picture_in_picture_off f52f +picture_in_picture_small f54d +pie_chart f0da +pie_chart_filled f0da +pie_chart_outline f0da +pie_chart_outlined f0da +pill e11f +pill_off f809 +pin f045 +pin_drop e55e +pin_end e767 +pin_invoke e763 +pinboard f3ab +pinboard_unread f3ac +pinch eb38 +pinch_zoom_in f1fa +pinch_zoom_out f1fb +pip f64d +pip_exit f70d +pivot_table_chart e9ce +place f1db +place_item f1f0 +plagiarism ea5a +planet f387 +planner_banner_ad_pt e692 +planner_review e694 +play_arrow e037 +play_circle e1c4 +play_disabled ef6a +play_for_work e906 +play_lesson f047 +play_music e6ee +play_pause f137 +play_shapes f7fc +playing_cards f5dc +playlist_add e03b +playlist_add_check e065 +playlist_add_check_circle e7e6 +playlist_add_circle e7e5 +playlist_play e05f +playlist_remove eb80 +plug_connect f35a +plumbing f107 +plus_one e800 +podcasts f048 +podiatry e120 +podium f7fb +point_of_sale f17e +point_scan f70c +poker_chip f49b +policy ea17 +policy_alert f407 +poll f0cc +polyline ebbb +polymer e8ab +pool eb48 +portable_wifi_off f087 +portrait e851 +position_bottom_left f70b +position_bottom_right f70a +position_top_right f709 +post e705 +post_add ea20 +potted_plant f8aa +power e63c +power_input e336 +power_off e646 +power_rounded f8c7 +power_settings_circle f418 +power_settings_new f8c7 +prayer_times f838 +precision_manufacturing f049 +pregnancy f5f1 +pregnant_woman f5f1 +preliminary e7d8 +prescriptions e121 +present_to_all e0df +preview f1c5 +preview_off f7af +price_change f04a +price_check f04b +print e8ad +print_add f7a2 +print_connect f7a1 +print_disabled e9cf +print_error f7a0 +print_lock f651 +priority e19f +priority_high e645 +privacy f148 +privacy_tip f0dc +private_connectivity e744 +problem e122 +procedure e651 +process_chart f855 +production_quantity_limits e1d1 +productivity e296 +progress_activity e9d0 +prompt_suggestion f4f6 +propane ec14 +propane_tank ec13 +psychiatry e123 +psychology ea4a +psychology_alt f8ea +public e80b +public_off f1ca +publish e255 +published_with_changes f232 +pulmonology e124 +pulse_alert f501 +punch_clock eaa8 +push_pin f10d +qr_code ef6b +qr_code_2 e00a +qr_code_2_add f658 +qr_code_scanner f206 +query_builder efd6 +query_stats e4fc +question_answer e8af +question_exchange f7f3 +question_mark eb8b +queue e03c +queue_music e03d +queue_play_next e066 +quick_phrases e7d1 +quick_reference e46e +quick_reference_all f801 +quick_reorder eb15 +quickreply ef6c +quiet_time f159 +quiet_time_active eb76 +quiz f04c +r_mobiledata f04d +radar f04e +radio e03e +radio_button_checked e837 +radio_button_partial f560 +radio_button_unchecked e836 +radiology e125 +railway_alert e9d1 +railway_alert_2 f461 +rainy f176 +rainy_heavy f61f +rainy_light f61e +rainy_snow f61d +ramen_dining ea64 +ramp_left eb9c +ramp_right eb96 +range_hood e1ea +rate_review e560 +rate_review_rtl e706 +raven f555 +raw_off f04f +raw_on f050 +read_more ef6d +readiness_score f6dd +real_estate_agent e73a +rear_camera f6c2 +rebase f845 +rebase_edit f846 +receipt e8b0 +receipt_long ef6e +receipt_long_off f40a +recent_actors e03f +recent_patient f808 +recenter f4c0 +recommend e9d2 +record_voice_over e91f +rectangle eb54 +recycling e760 +redeem e8f6 +redo e15a +reduce_capacity f21c +refresh e5d5 +regular_expression f750 +relax f6dc +release_alert f654 +remember_me f051 +reminder e6c6 +reminders_alt e6c6 +remote_gen e83e +remove e15b +remove_circle f08f +remove_circle_outline f08f +remove_done e9d3 +remove_from_queue e067 +remove_moderator e9d4 +remove_red_eye e8f4 +remove_road ebfc +remove_selection e9d5 +remove_shopping_cart e928 +reopen_window f708 +reorder e8fe +repartition f8e8 +repeat e040 +repeat_on e9d6 +repeat_one e041 +repeat_one_on e9d7 +replace_audio f451 +replace_image f450 +replace_video f44f +replay e042 +replay_10 e059 +replay_30 e05a +replay_5 e05b +replay_circle_filled e9d8 +reply e15e +reply_all e15f +report f052 +report_gmailerrorred f052 +report_off e170 +report_problem f083 +request_page f22c +request_quote f1b6 +reset_brightness f482 +reset_focus f481 +reset_image f824 +reset_iso f480 +reset_settings f47f +reset_shadow f47e +reset_shutter_speed f47d +reset_tv e9d9 +reset_white_balance f47c +reset_wrench f56c +resize f707 +respiratory_rate e127 +responsive_layout e9da +restart_alt f053 +restaurant e56c +restaurant_menu e561 +restore e8b3 +restore_from_trash e938 +restore_page e929 +resume f7d0 +reviews f07c +rewarded_ads efb6 +rheumatology e128 +rib_cage f898 +rice_bowl f1f5 +right_click f706 +right_panel_close f705 +right_panel_open f704 +ring_volume f0dd +ring_volume_filled f0dd +ripples e9db +road f472 +robot f882 +robot_2 f5d0 +rocket eba5 +rocket_launch eb9b +roller_shades ec12 +roller_shades_closed ec11 +roller_skating ebcd +roofing f201 +room f1db +room_preferences f1b8 +room_service eb49 +rotate_90_degrees_ccw e418 +rotate_90_degrees_cw eaab +rotate_auto f417 +rotate_left e419 +rotate_right e41a +roundabout_left eb99 +roundabout_right eba3 +rounded_corner e920 +route eacd +router e328 +router_off f2f4 +routine e20c +rowing e921 +rss_feed e0e5 +rsvp f055 +rtt e9ad +rubric eb27 +rule f1c2 +rule_folder f1c9 +rule_settings f64c +run_circle ef6f +running_with_errors e51d +rv_hookup e642 +safety_check ebef +safety_check_off f59d +safety_divider e1cc +sailing e502 +salinity f876 +sanitizer f21d +satellite e562 +satellite_alt eb3a +sauna f6f7 +save e161 +save_alt f090 +save_as eb60 +save_clock f398 +saved_search ea11 +savings e2eb +scale eb5f +scan f74e +scan_delete f74f +scanner e329 +scatter_plot e268 +scene e2a7 +schedule efd6 +schedule_send ea0a +schema e4fd +school e80c +science ea4b +science_off f542 +scooter f471 +score e269 +scoreboard ebd0 +screen_lock_landscape e1be +screen_lock_portrait e1bf +screen_lock_rotation e1c0 +screen_record f679 +screen_rotation e1c1 +screen_rotation_alt ebee +screen_rotation_up f678 +screen_search_desktop ef70 +screen_share e0e2 +screenshot f056 +screenshot_frame f677 +screenshot_frame_2 f374 +screenshot_keyboard f7d3 +screenshot_monitor ec08 +screenshot_region f7d2 +screenshot_tablet f697 +script f45f +scrollable_header e9dc +scuba_diving ebce +sd e9dd +sd_card e623 +sd_card_alert f057 +sd_storage e623 +sdk e720 +search e8b6 +search_activity f3e5 +search_check f800 +search_check_2 f469 +search_hands_free e696 +search_insights f4bc +search_off ea76 +seat_cool_left f331 +seat_cool_right f330 +seat_heat_left f32f +seat_heat_right f32e +seat_vent_left f32d +seat_vent_right f32c +security e32a +security_key f503 +security_update f072 +security_update_good f073 +security_update_warning f074 +segment e94b +select f74d +select_all e162 +select_check_box f1fe +select_to_speak f7cf +select_window e6fa +select_window_2 f4c8 +select_window_off e506 +self_care f86d +self_improvement ea78 +sell f05b +send e163 +send_and_archive ea0c +send_money e8b7 +send_time_extension eadb +send_to_mobile f05c +sensor_door f1b5 +sensor_occupied ec10 +sensor_window f1b4 +sensors e51e +sensors_krx f556 +sensors_krx_off f515 +sensors_off e51f +sentiment_calm f6a7 +sentiment_content f6a6 +sentiment_dissatisfied e811 +sentiment_excited f6a5 +sentiment_extremely_dissatisfied f194 +sentiment_frustrated f6a4 +sentiment_neutral e812 +sentiment_sad f6a3 +sentiment_satisfied e813 +sentiment_satisfied_alt e813 +sentiment_stressed f6a2 +sentiment_very_dissatisfied e814 +sentiment_very_satisfied e815 +sentiment_worried f6a1 +serif f4ac +server_person f3bd +service_toolbox e717 +set_meal f1ea +settings e8b8 +settings_accessibility f05d +settings_account_box f835 +settings_alert f143 +settings_applications e8b9 +settings_b_roll f625 +settings_backup_restore e8ba +settings_bluetooth e8bb +settings_brightness e8bd +settings_cell e8bc +settings_cinematic_blur f624 +settings_ethernet e8be +settings_heart f522 +settings_input_antenna e8bf +settings_input_component e8c1 +settings_input_composite e8c1 +settings_input_hdmi e8c2 +settings_input_svideo e8c3 +settings_motion_mode f833 +settings_night_sight f832 +settings_overscan e8c4 +settings_panorama f831 +settings_phone e8c5 +settings_photo_camera f834 +settings_power e8c6 +settings_remote e8c7 +settings_slow_motion f623 +settings_suggest f05e +settings_system_daydream e1c3 +settings_timelapse f622 +settings_video_camera f621 +settings_voice e8c8 +settop_component e2ac +severe_cold ebd3 +shadow e9df +shadow_add f584 +shadow_minus f583 +shape_line f8d3 +shape_recognition eb01 +shapes e602 +share e80d +share_eta e5f7 +share_location f05f +share_off f6cb +share_reviews f8a4 +share_windows f613 +sheets_rtl f823 +shelf_auto_hide f703 +shelf_position f702 +shelves f86e +shield e9e0 +shield_lock f686 +shield_locked f592 +shield_moon eaa9 +shield_person f650 +shield_question f529 +shield_watch f30f +shield_with_heart e78f +shield_with_house e78d +shift e5f2 +shift_lock f7ae +shift_lock_off f483 +shop e8c9 +shop_2 e8ca +shop_two e8ca +shopping_bag f1cc +shopping_bag_speed f39a +shopping_basket e8cb +shopping_cart e8cc +shopping_cart_checkout eb88 +shopping_cart_off f4f7 +shoppingmode efb7 +short_stay e4d0 +short_text e261 +shortcut f57a +show_chart e6e1 +shower f061 +shuffle e043 +shuffle_on e9e1 +shutter_speed e43d +shutter_speed_add f57e +shutter_speed_minus f57d +sick f220 +side_navigation e9e2 +sign_language ebe5 +signal_cellular_0_bar f0a8 +signal_cellular_1_bar f0a9 +signal_cellular_2_bar f0aa +signal_cellular_3_bar f0ab +signal_cellular_4_bar e1c8 +signal_cellular_add f7a9 +signal_cellular_alt e202 +signal_cellular_alt_1_bar ebdf +signal_cellular_alt_2_bar ebe3 +signal_cellular_connected_no_internet_0_bar f0ac +signal_cellular_connected_no_internet_4_bar e1cd +signal_cellular_no_sim e1ce +signal_cellular_nodata f062 +signal_cellular_null e1cf +signal_cellular_off e1d0 +signal_cellular_pause f5a7 +signal_disconnected f239 +signal_wifi_0_bar f0b0 +signal_wifi_4_bar f065 +signal_wifi_4_bar_lock e1e1 +signal_wifi_bad f064 +signal_wifi_connected_no_internet_4 f064 +signal_wifi_off e1da +signal_wifi_statusbar_4_bar f065 +signal_wifi_statusbar_not_connected f0ef +signal_wifi_statusbar_null f067 +signature f74c +signpost eb91 +sim_card e32b +sim_card_alert f057 +sim_card_download f068 +simulation f3e1 +single_bed ea48 +sip f069 +siren f3a7 +siren_check f3a6 +siren_open f3a5 +siren_question f3a4 +skateboarding e511 +skeleton f899 +skillet f543 +skillet_cooktop f544 +skip_next e044 +skip_previous e045 +skull f89a +skull_list f370 +slab_serif f4ab +sledding e512 +sleep e213 +sleep_score f6b7 +slide_library f822 +sliders e9e3 +slideshow e41b +slow_motion_video e068 +smart_button f1c1 +smart_card_reader f4a5 +smart_card_reader_off f4a6 +smart_display f06a +smart_outlet e844 +smart_screen f06b +smart_toy f06c +smartphone e32c +smartphone_camera f44e +smb_share f74b +smoke_free eb4a +smoking_rooms eb4b +sms e625 +sms_failed e87f +snippet_folder f1c7 +snooze e046 +snowboarding e513 +snowing e80f +snowing_heavy f61c +snowmobile e503 +snowshoeing e514 +soap f1b2 +social_distance e1cb +social_leaderboard f6a0 +solar_power ec0f +sort e164 +sort_by_alpha e053 +sos ebf7 +sound_detection_dog_barking f149 +sound_detection_glass_break f14a +sound_detection_loud_sound f14b +sound_sampler f6b4 +soup_kitchen e7d3 +source f1c8 +source_environment e527 +source_notes e12d +south f1e3 +south_america e7e4 +south_east f1e4 +south_west f1e5 +spa eb4c +space_bar e256 +space_dashboard e66b +spatial_audio ebeb +spatial_audio_off ebe8 +spatial_speaker f4cf +spatial_tracking ebea +speaker e32d +speaker_group e32e +speaker_notes e8cd +speaker_notes_off e92a +speaker_phone e0d2 +special_character f74a +specific_gravity f872 +speech_to_text f8a7 +speed e9e4 +speed_0_25 f4d4 +speed_0_2x f498 +speed_0_5 f4e2 +speed_0_5x f497 +speed_0_75 f4d3 +speed_0_7x f496 +speed_1_2 f4e1 +speed_1_25 f4d2 +speed_1_2x f495 +speed_1_5 f4e0 +speed_1_5x f494 +speed_1_75 f4d1 +speed_1_7x f493 +speed_2x f4eb +speed_camera f470 +spellcheck e8ce +split_scene f3bf +split_scene_down f2ff +split_scene_left f2fe +split_scene_right f2fd +split_scene_up f2fc +splitscreen f06d +splitscreen_add f4fd +splitscreen_bottom f676 +splitscreen_landscape f459 +splitscreen_left f675 +splitscreen_portrait f458 +splitscreen_right f674 +splitscreen_top f673 +splitscreen_vertical_add f4fc +spo2 f6db +spoke e9a7 +sports ea30 +sports_and_outdoors efb8 +sports_bar f1f3 +sports_baseball ea51 +sports_basketball ea26 +sports_cricket ea27 +sports_esports ea28 +sports_football ea29 +sports_golf ea2a +sports_gymnastics ebc4 +sports_handball ea33 +sports_hockey ea2b +sports_kabaddi ea34 +sports_martial_arts eae9 +sports_mma ea2c +sports_motorsports ea2d +sports_rugby ea2e +sports_score f06e +sports_soccer ea2f +sports_tennis ea32 +sports_volleyball ea31 +sprinkler e29a +sprint f81f +square eb36 +square_dot f3b3 +square_foot ea49 +ssid_chart eb66 +stack f609 +stack_group f359 +stack_hexagon f41c +stack_off f608 +stack_star f607 +stacked_bar_chart e9e6 +stacked_email e6c7 +stacked_inbox e6c9 +stacked_line_chart f22b +stacks f500 +stadia_controller f135 +stadium eb90 +stairs f1a9 +stairs_2 f46c +star f09a +star_border f09a +star_border_purple500 f09a +star_half e839 +star_outline f09a +star_purple500 f09a +star_rate f0ec +star_rate_half ec45 +star_shine f31d +stars e8d0 +stars_2 f31c +start e089 +stat_0 e697 +stat_1 e698 +stat_2 e699 +stat_3 e69a +stat_minus_1 e69b +stat_minus_2 e69c +stat_minus_3 e69d +stay_current_landscape e0d3 +stay_current_portrait e0d4 +stay_primary_landscape e0d5 +stay_primary_portrait e0d6 +steering_wheel_heat f32b +step f6fe +step_into f701 +step_out f700 +step_over f6ff +steppers e9e7 +steps f6da +stethoscope f805 +stethoscope_arrow f807 +stethoscope_check f806 +sticky_note e9e8 +sticky_note_2 f1fc +stock_media f570 +stockpot f545 +stop e047 +stop_circle ef71 +stop_screen_share e0e3 +storage e1db +store e8d1 +store_mall_directory e8d1 +storefront ea12 +storm f070 +straight eb95 +straighten e41c +strategy f5df +stream e9e9 +stream_apps f79f +streetview e56e +stress_management f6d9 +strikethrough_s e257 +stroke_full f749 +stroke_partial f748 +stroller f1ae +style e41d +styler e273 +stylus f604 +stylus_brush f366 +stylus_fountain_pen f365 +stylus_highlighter f364 +stylus_laser_pointer f747 +stylus_note f603 +stylus_pen f363 +stylus_pencil f362 +subdirectory_arrow_left e5d9 +subdirectory_arrow_right e5da +subheader e9ea +subject e8d2 +subscript f111 +subscriptions e064 +subtitles e048 +subtitles_gear f355 +subtitles_off ef72 +subway e56f +summarize f071 +sunny e81a +sunny_snowing e819 +superscript f112 +supervised_user_circle e939 +supervised_user_circle_off f60e +supervisor_account e8d3 +support ef73 +support_agent f0e2 +surfing e515 +surgical e131 +surround_sound e049 +swap_calls e0d7 +swap_driving_apps e69e +swap_driving_apps_wheel e69f +swap_horiz e8d4 +swap_horizontal_circle e933 +swap_vert e8d5 +swap_vertical_circle e8d6 +sweep e6ac +swipe e9ec +swipe_down eb53 +swipe_down_alt eb30 +swipe_left eb59 +swipe_left_alt eb33 +swipe_right eb52 +swipe_right_alt eb56 +swipe_up eb2e +swipe_up_alt eb35 +swipe_vertical eb51 +switch e1f4 +switch_access f6fd +switch_access_2 f506 +switch_access_3 f34d +switch_access_shortcut e7e1 +switch_access_shortcut_add e7e2 +switch_account e9ed +switch_camera e41e +switch_left f1d1 +switch_right f1d2 +switch_video e41f +switches e733 +sword_rose f5de +swords f889 +symptoms e132 +synagogue eab0 +sync e627 +sync_alt ea18 +sync_arrow_down f37c +sync_arrow_up f37b +sync_desktop f41a +sync_disabled e628 +sync_lock eaee +sync_problem e629 +sync_saved_locally f820 +syringe e133 +system_security_update f072 +system_security_update_good f073 +system_security_update_warning f074 +system_update f072 +system_update_alt e8d7 +tab e8d8 +tab_close f745 +tab_close_inactive f3d0 +tab_close_right f746 +tab_duplicate f744 +tab_group f743 +tab_inactive f43b +tab_move f742 +tab_new_right f741 +tab_recent f740 +tab_search f2f2 +tab_unselected e8d9 +table f191 +table_bar ead2 +table_chart e265 +table_chart_view f6ef +table_convert f3c7 +table_edit f3c6 +table_eye f466 +table_lamp e1f2 +table_restaurant eac6 +table_rows f101 +table_rows_narrow f73f +table_view f1be +tablet e32f +tablet_android e330 +tablet_camera f44d +tablet_mac e331 +tabs e9ee +tactic f564 +tag e9ef +tag_faces ea22 +takeout_dining ea74 +tamper_detection_off e82e +tamper_detection_on f8c8 +tap_and_play e62b +tapas f1e9 +target e719 +task f075 +task_alt e2e6 +taunt f69f +taxi_alert ef74 +team_dashboard e013 +temp_preferences_custom f8c9 +temp_preferences_eco f8ca +temple_buddhist eab3 +temple_hindu eaaf +tenancy f0e3 +terminal eb8e +terrain e564 +text_ad e728 +text_compare f3c5 +text_decrease eadd +text_fields e262 +text_fields_alt e9f1 +text_format e165 +text_increase eae2 +text_rotate_up e93a +text_rotate_vertical e93b +text_rotation_angledown e93c +text_rotation_angleup e93d +text_rotation_down e93e +text_rotation_none e93f +text_select_end f73e +text_select_jump_to_beginning f73d +text_select_jump_to_end f73c +text_select_move_back_character f73b +text_select_move_back_word f73a +text_select_move_down f739 +text_select_move_forward_character f738 +text_select_move_forward_word f737 +text_select_move_up f736 +text_select_start f735 +text_snippet f1c6 +text_to_speech f1bc +text_up f49e +textsms e625 +texture e421 +texture_add f57c +texture_minus f57b +theater_comedy ea66 +theaters e8da +thermometer e846 +thermometer_add f582 +thermometer_gain f6d8 +thermometer_loss f6d7 +thermometer_minus f581 +thermostat f076 +thermostat_arrow_down f37a +thermostat_arrow_up f379 +thermostat_auto f077 +thermostat_carbon f178 +things_to_do eb2a +thread_unread f4f9 +threat_intelligence eaed +thumb_down f578 +thumb_down_alt f578 +thumb_down_filled f578 +thumb_down_off f578 +thumb_down_off_alt f578 +thumb_up f577 +thumb_up_alt f577 +thumb_up_filled f577 +thumb_up_off f577 +thumb_up_off_alt f577 +thumbnail_bar f734 +thumbs_up_down e8dd +thunderstorm ebdb +tibia f89b +tibia_alt f89c +tile_large f3c3 +tile_medium f3c2 +tile_small f3c1 +time_auto f0e4 +time_to_leave eff7 +timelapse e422 +timeline e922 +timer e425 +timer_10 e423 +timer_10_alt_1 efbf +timer_10_select f07a +timer_3 e424 +timer_3_alt_1 efc0 +timer_3_select f07b +timer_5 f4b1 +timer_5_shutter f4b2 +timer_arrow_down f378 +timer_arrow_up f377 +timer_off e426 +timer_pause f4bb +timer_play f4ba +tips_and_updates e79a +tire_repair ebc8 +title e264 +titlecase f489 +toast efc1 +toc e8de +today e8df +toggle_off e9f5 +toggle_on e9f6 +token ea25 +toll e8e0 +tonality e427 +toolbar e9f7 +tools_flat_head f8cb +tools_installation_kit e2ab +tools_ladder e2cb +tools_level e77b +tools_phillips f8cc +tools_pliers_wire_stripper e2aa +tools_power_drill e1e9 +tools_wrench f8cd +tooltip e9f8 +tooltip_2 f3ed +top_panel_close f733 +top_panel_open f732 +topic f1c8 +tornado e199 +total_dissolved_solids f877 +touch_app e913 +touch_double f38b +touch_long f38a +touch_triple f389 +touchpad_mouse f687 +touchpad_mouse_off f4e6 +tour ef75 +toys e332 +toys_and_games efc2 +toys_fan f887 +track_changes e8e1 +trackpad_input f4c7 +trackpad_input_2 f409 +trackpad_input_3 f408 +traffic e565 +traffic_jam f46f +trail_length eb5e +trail_length_medium eb63 +trail_length_short eb6d +train e570 +tram e571 +transcribe f8ec +transfer_within_a_station e572 +transform e428 +transgender e58d +transit_enterexit e579 +transit_ticket f3f1 +transition_chop f50e +transition_dissolve f50d +transition_fade f50c +transition_push f50b +transition_slide f50a +translate e8e2 +transportation e21d +travel ef93 +travel_explore e2db +travel_luggage_and_bags efc3 +trending_down e8e3 +trending_flat e8e4 +trending_up e8e5 +trip e6fb +trip_origin e57b +trolley f86b +trolley_cable_car f46e +trophy ea23 +troubleshoot e1d2 +try f07c +tsunami ebd8 +tsv e6d6 +tty f1aa +tune e429 +tungsten f07d +turn_left eba6 +turn_right ebab +turn_sharp_left eba7 +turn_sharp_right ebaa +turn_slight_left eba4 +turn_slight_right eb9a +turned_in e8e7 +turned_in_not e8e7 +tv e63b +tv_displays f3ec +tv_gen e830 +tv_guide e1dc +tv_next f3eb +tv_off e647 +tv_options_edit_channels e1dd +tv_options_input_settings e1de +tv_remote f5d9 +tv_signin e71b +tv_with_assistant e785 +two_pager f51f +two_pager_store f3c4 +two_wheeler e9f9 +type_specimen f8f0 +u_turn_left eba1 +u_turn_right eba2 +ulna_radius f89d +ulna_radius_alt f89e +umbrella f1ad +unarchive e169 +undo e166 +unfold_less e5d6 +unfold_less_double f8cf +unfold_more e5d7 +unfold_more_double f8d0 +ungroup f731 +universal_currency e9fa +universal_currency_alt e734 +universal_local e9fb +unknown_2 f49f +unknown_5 e6a5 +unknown_7 f49e +unknown_document f804 +unknown_med eabd +unlicense eb05 +unpaved_road f46d +unpin e6f9 +unpublished f236 +unsubscribe e0eb +upcoming f07e +update e923 +update_disabled e075 +upgrade f0fb +upi_pay f3cf +upload f09b +upload_2 f521 +upload_file e9fc +uppercase f488 +urology e137 +usb e1e0 +usb_off e4fa +user_attributes e708 +vaccines e138 +vacuum efc5 +valve e224 +vape_free ebc6 +vaping_rooms ebcf +variable_add f51e +variable_insert f51d +variable_remove f51c +variables f851 +ventilator e139 +verified ef76 +verified_off f30e +verified_user f013 +vertical_align_bottom e258 +vertical_align_center e259 +vertical_align_top e25a +vertical_distribute e076 +vertical_shades ec0e +vertical_shades_closed ec0d +vertical_split e949 +vibration e62d +video_call e070 +video_camera_back f07f +video_camera_back_add f40c +video_camera_front f080 +video_camera_front_off f83b +video_chat f8a0 +video_file eb87 +video_label e071 +video_library e04a +video_search efc6 +video_settings ea75 +video_stable f081 +videocam e04b +videocam_alert f390 +videocam_off e04c +videogame_asset e338 +videogame_asset_off e500 +view_agenda e8e9 +view_apps f376 +view_array e8ea +view_carousel e8eb +view_column e8ec +view_column_2 f847 +view_comfy e42a +view_comfy_alt eb73 +view_compact e42b +view_compact_alt eb74 +view_cozy eb75 +view_day e8ed +view_headline e8ee +view_in_ar efc9 +view_in_ar_new efc9 +view_in_ar_off f61b +view_kanban eb7f +view_list e8ef +view_module e8f0 +view_object_track f432 +view_quilt e8f1 +view_real_size f4c2 +view_sidebar f114 +view_stream e8f2 +view_timeline eb85 +view_week e8f3 +vignette e435 +villa e586 +visibility e8f4 +visibility_lock f653 +visibility_off e8f5 +vital_signs e650 +vitals e13b +vo2_max f4aa +voice_chat e62e +voice_over_off e94a +voice_selection f58a +voice_selection_off f42c +voicemail e0d9 +voicemail_2 f352 +volcano ebda +volume_down e04d +volume_down_alt e79c +volume_mute e04e +volume_off e04f +volume_up e050 +volunteer_activism ea70 +voting_chip f852 +vpn_key e0da +vpn_key_alert f6cc +vpn_key_off eb7a +vpn_lock e62f +vpn_lock_2 f350 +vr180_create2d efca +vr180_create2d_off f571 +vrpano f082 +wall_art efcb +wall_lamp e2b4 +wallet f8ff +wallpaper e1bc +wallpaper_slideshow f672 +wand_shine f31f +wand_stars f31e +ward e13c +warehouse ebb8 +warning f083 +warning_amber f083 +warning_off f7ad +wash f1b1 +watch e334 +watch_button_press f6aa +watch_check f468 +watch_later efd6 +watch_off eae3 +watch_screentime f6ae +watch_vibration f467 +watch_wake f6a9 +water f084 +water_bottle f69d +water_bottle_large f69e +water_damage f203 +water_do f870 +water_drop e798 +water_ec f875 +water_full f6d6 +water_heater e284 +water_lock f6ad +water_loss f6d5 +water_lux f874 +water_medium f6d4 +water_orp f878 +water_ph f87a +water_pump f5d8 +water_voc f87b +waterfall_chart ea00 +waves e176 +waving_hand e766 +wb_auto e42c +wb_cloudy f15c +wb_incandescent e42e +wb_iridescent f07d +wb_shade ea01 +wb_sunny e430 +wb_twilight e1c6 +wc e63d +weather_hail f67f +weather_mix f60b +weather_snowy e2cd +web e051 +web_asset e069 +web_asset_off ef47 +web_stories e595 +web_traffic ea03 +webhook eb92 +weekend e16b +weight e13d +west f1e6 +whatshot e80e +wheelchair_pickup f1ab +where_to_vote e177 +widget_medium f3ba +widget_small f3b9 +widget_width f3b8 +widgets e1bd +width f730 +width_full f8f5 +width_normal f8f6 +width_wide f8f7 +wifi e63e +wifi_1_bar e4ca +wifi_2_bar e4d9 +wifi_add f7a8 +wifi_calling ef77 +wifi_calling_1 f0e7 +wifi_calling_2 f0f6 +wifi_calling_3 f0e7 +wifi_calling_bar_1 f44c +wifi_calling_bar_2 f44b +wifi_calling_bar_3 f44a +wifi_channel eb6a +wifi_find eb31 +wifi_home f671 +wifi_lock e1e1 +wifi_notification f670 +wifi_off e648 +wifi_password eb6b +wifi_protected_setup f0fc +wifi_proxy f7a7 +wifi_tethering e1e2 +wifi_tethering_error ead9 +wifi_tethering_off f087 +wind_power ec0c +window f088 +window_closed e77e +window_open e78c +window_sensor e2bb +windshield_defrost_front f32a +windshield_defrost_rear f329 +windshield_heat_front f328 +wine_bar f1e8 +woman e13e +woman_2 f8e7 +work e943 +work_alert f5f7 +work_history ec09 +work_off e942 +work_outline e943 +work_update f5f8 +workflow ea04 +workspace_premium e7af +workspaces ea0f +workspaces_outline ea0f +wounds_injuries e13f +wrap_text e25b +wrist f69c +wrong_location ef78 +wysiwyg f1c3 +yard f089 +your_trips eb2b +youtube_activity f85a +youtube_searched_for e8fa +zone_person_alert e781 +zone_person_idle e77a +zone_person_urgent e788 +zoom_in e8ff +zoom_in_map eb2d +zoom_out e900 +zoom_out_map e56b diff --git a/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf b/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf new file mode 100755 index 0000000..ccc55bf Binary files /dev/null and b/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf differ diff --git a/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].woff2 b/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].woff2 new file mode 100755 index 0000000..39583bb Binary files /dev/null and b/www/fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].woff2 differ diff --git a/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].codepoints b/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].codepoints new file mode 100755 index 0000000..5027a57 --- /dev/null +++ b/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].codepoints @@ -0,0 +1,3901 @@ +10k e951 +10mp e952 +11mp e953 +123 eb8d +12mp e954 +13mp e955 +14mp e956 +15mp e957 +16mp e958 +17mp e959 +18_up_rating f8fd +18mp e95a +19mp e95b +1k e95c +1k_plus e95d +1x_mobiledata efcd +1x_mobiledata_badge f7f1 +20mp e95e +21mp e95f +22mp e960 +23mp e961 +24fps_select f3f2 +24mp e962 +2d ef37 +2k e963 +2k_plus e964 +2mp e965 +30fps efce +30fps_select efcf +360 e577 +3d ed38 +3d_rotation e84d +3g_mobiledata efd0 +3g_mobiledata_badge f7f0 +3k e966 +3k_plus e967 +3mp e968 +3p efd1 +4g_mobiledata efd2 +4g_mobiledata_badge f7ef +4g_plus_mobiledata efd3 +4k e072 +4k_plus e969 +4mp e96a +50mp f6f3 +5g ef38 +5g_mobiledata_badge f7ee +5k e96b +5k_plus e96c +5mp e96d +60fps efd4 +60fps_select efd5 +6_ft_apart f21e +6k e96e +6k_plus e96f +6mp e970 +7k e971 +7k_plus e972 +7mp e973 +8k e974 +8k_plus e975 +8mp e976 +9k e977 +9k_plus e978 +9mp e979 +abc eb94 +ac_unit eb3b +access_alarm e855 +access_alarms e855 +access_time efd6 +access_time_filled efd6 +accessibility e84e +accessibility_new e92c +accessible e914 +accessible_forward e934 +accessible_menu f34e +account_balance e84f +account_balance_wallet e850 +account_box e851 +account_child e852 +account_child_invert e659 +account_circle f20b +account_circle_filled f20b +account_circle_off f7b3 +account_tree e97a +action_key f502 +activity_zone e1e6 +acute e4cb +ad e65a +ad_group e65b +ad_group_off eae5 +ad_off f7b2 +ad_units ef39 +adaptive_audio_mic f4cc +adaptive_audio_mic_off f4cb +adb e60e +add e145 +add_2 f3dd +add_a_photo e439 +add_ad e72a +add_alarm e856 +add_alert e003 +add_box e146 +add_business e729 +add_call f0b7 +add_card eb86 +add_chart ef3c +add_circle e3ba +add_circle_outline e3ba +add_column_left f425 +add_column_right f424 +add_comment e266 +add_diamond f49c +add_home f8eb +add_home_work f8ed +add_ic_call f0b7 +add_link e178 +add_location e567 +add_location_alt ef3a +add_moderator e97d +add_notes e091 +add_photo_alternate e43e +add_reaction e1d3 +add_road ef3b +add_row_above f423 +add_row_below f422 +add_shopping_cart e854 +add_task f23a +add_to_drive e65c +add_to_home_screen e1fe +add_to_photos e39d +add_to_queue e05c +add_triangle f48e +addchart ef3c +adf_scanner eada +adjust e39e +admin_meds e48d +admin_panel_settings ef3d +ads_click e762 +agender f888 +agriculture ea79 +air efd8 +air_freshener e2ca +air_purifier e97e +air_purifier_gen e829 +airline_seat_flat e630 +airline_seat_flat_angled e631 +airline_seat_individual_suite e632 +airline_seat_legroom_extra e633 +airline_seat_legroom_normal e634 +airline_seat_legroom_reduced e635 +airline_seat_recline_extra e636 +airline_seat_recline_normal e637 +airline_stops e7d0 +airlines e7ca +airplane_ticket efd9 +airplanemode_active e53d +airplanemode_inactive e194 +airplay e055 +airport_shuttle eb3c +airware f154 +airwave f154 +alarm e855 +alarm_add e856 +alarm_off e857 +alarm_on e858 +alarm_pause f35b +alarm_smart_wake f6b0 +album e019 +align_center e356 +align_end f797 +align_flex_center f796 +align_flex_end f795 +align_flex_start f794 +align_horizontal_center e00f +align_horizontal_left e00d +align_horizontal_right e010 +align_items_stretch f793 +align_justify_center f792 +align_justify_flex_end f791 +align_justify_flex_start f790 +align_justify_space_around f78f +align_justify_space_between f78e +align_justify_space_even f78d +align_justify_stretch f78c +align_self_stretch f78b +align_space_around f78a +align_space_between f789 +align_space_even f788 +align_start f787 +align_stretch f786 +align_vertical_bottom e015 +align_vertical_center e011 +align_vertical_top e00c +all_inbox e97f +all_inclusive eb3d +all_match e093 +all_out e90b +allergies e094 +allergy e64e +alt_route f184 +alternate_email e0e6 +altitude f873 +ambient_screen f6c4 +ambulance f803 +amend f802 +amp_stories ea13 +analytics ef3e +anchor f1cd +android e859 +animated_images f49a +animation e71c +announcement e87f +aod efda +aod_tablet f89f +aod_watch f6ac +apartment ea40 +api f1b7 +apk_document f88e +apk_install f88f +app_badging f72f +app_blocking ef3f +app_promo e981 +app_registration ef40 +app_settings_alt ef41 +app_shortcut eae4 +apparel ef7b +approval e982 +approval_delegation f84a +apps e5c3 +apps_outage e7cc +aq f55a +aq_indoor f55b +ar_on_you ef7c +ar_stickers e983 +architecture ea3b +archive e149 +area_chart e770 +arming_countdown e78a +arrow_and_edge f5d7 +arrow_back e5c4 +arrow_back_2 f43a +arrow_back_ios e5e0 +arrow_back_ios_new e2ea +arrow_circle_down f181 +arrow_circle_left eaa7 +arrow_circle_right eaaa +arrow_circle_up f182 +arrow_cool_down f4b6 +arrow_downward e5db +arrow_downward_alt e984 +arrow_drop_down e5c5 +arrow_drop_down_circle e5c6 +arrow_drop_up e5c7 +arrow_forward e5c8 +arrow_forward_ios e5e1 +arrow_insert f837 +arrow_left e5de +arrow_left_alt ef7d +arrow_menu_close f3d3 +arrow_menu_open f3d2 +arrow_or_edge f5d6 +arrow_outward f8ce +arrow_range f69b +arrow_right e5df +arrow_right_alt e941 +arrow_selector_tool f82f +arrow_split ea04 +arrow_top_left f72e +arrow_top_right f72d +arrow_upload_progress f3f4 +arrow_upload_ready f3f5 +arrow_upward e5d8 +arrow_upward_alt e986 +arrow_warm_up f4b5 +arrows_input f394 +arrows_more_down f8ab +arrows_more_up f8ac +arrows_output f393 +arrows_outward f72c +art_track e060 +article ef42 +article_person f368 +article_shortcut f587 +artist e01a +aspect_ratio e85b +assessment f0cc +assignment e85d +assignment_add f848 +assignment_ind e85e +assignment_late e85f +assignment_return e860 +assignment_returned e861 +assignment_turned_in e862 +assist_walker f8d5 +assistant e39f +assistant_device e987 +assistant_direction e988 +assistant_navigation e989 +assistant_on_hub f6c1 +assistant_photo f0c6 +assured_workload eb6f +asterisk f525 +astrophotography_auto f1d9 +astrophotography_off f1da +atm e573 +atr ebc7 +attach_email ea5e +attach_file e226 +attach_file_add f841 +attach_file_off f4d9 +attach_money e227 +attachment e2bc +attractions ea52 +attribution efdb +audio_description f58c +audio_file eb82 +audio_video_receiver f5d3 +audiotrack e405 +auto_activity_zone f8ad +auto_awesome e65f +auto_awesome_mosaic e660 +auto_awesome_motion e661 +auto_delete ea4c +auto_detect_voice f83e +auto_draw_solid e98a +auto_fix e663 +auto_fix_high e663 +auto_fix_normal e664 +auto_fix_off e665 +auto_graph e4fb +auto_label f6be +auto_meeting_room f6bf +auto_mode ec20 +auto_read_pause f219 +auto_read_play f216 +auto_schedule e214 +auto_stories e666 +auto_timer ef7f +auto_towing e71e +auto_transmission f53f +auto_videocam f6c0 +autofps_select efdc +automation f421 +autopause f6b6 +autopay f84b +autoplay f6b5 +autorenew e863 +autostop f682 +av1 f4b0 +av_timer e01b +avc f4af +avg_pace f6bb +avg_time f813 +award_star f612 +azm f6ec +baby_changing_station f19b +back_hand e764 +back_to_tab f72b +background_dot_large f79e +background_dot_small f514 +background_grid_small f79d +background_replace f20a +backlight_high f7ed +backlight_high_off f4ef +backlight_low f7ec +backpack f19c +backspace e14a +backup e864 +backup_table ef43 +badge ea67 +badge_critical_battery f156 +bakery_dining ea53 +balance eaf6 +balcony e58f +ballot e172 +bar_chart e26b +bar_chart_4_bars f681 +bar_chart_off f411 +barcode e70b +barcode_reader f85c +barcode_scanner e70c +barefoot f871 +batch_prediction f0f5 +bath_outdoor f6fb +bath_private f6fa +bath_public_large f6f9 +bathroom efdd +bathtub ea41 +battery_0_bar ebdc +battery_1_bar f09c +battery_20 f09c +battery_2_bar f09d +battery_30 f09d +battery_3_bar f09e +battery_4_bar f09f +battery_50 f09e +battery_5_bar f0a0 +battery_60 f09f +battery_6_bar f0a1 +battery_80 f0a0 +battery_90 f0a1 +battery_alert e19c +battery_android_0 f30d +battery_android_1 f30c +battery_android_2 f30b +battery_android_3 f30a +battery_android_4 f309 +battery_android_5 f308 +battery_android_6 f307 +battery_android_alert f306 +battery_android_bolt f305 +battery_android_full f304 +battery_android_plus f303 +battery_android_question f302 +battery_android_share f301 +battery_android_shield f300 +battery_change f7eb +battery_charging_20 f0a2 +battery_charging_30 f0a3 +battery_charging_50 f0a4 +battery_charging_60 f0a5 +battery_charging_80 f0a6 +battery_charging_90 f0a7 +battery_charging_full e1a3 +battery_error f7ea +battery_full e1a5 +battery_full_alt f13b +battery_horiz_000 f8ae +battery_horiz_050 f8af +battery_horiz_075 f8b0 +battery_low f155 +battery_plus f7e9 +battery_profile e206 +battery_saver efde +battery_share f67e +battery_status_good f67d +battery_std e1a5 +battery_unknown e1a6 +battery_vert_005 f8b1 +battery_vert_020 f8b2 +battery_vert_050 f8b3 +battery_very_low f156 +beach_access eb3e +bed efdf +bedroom_baby efe0 +bedroom_child efe1 +bedroom_parent efe2 +bedtime f159 +bedtime_off eb76 +beenhere e52d +bento f1f4 +bia f6eb +bid_landscape e678 +bid_landscape_disabled ef81 +bigtop_updates e669 +bike_dock f47b +bike_lane f47a +bike_scooter ef45 +biotech ea3a +blanket e828 +blender efe3 +blind f8d6 +blinds e286 +blinds_closed ec1f +block f08c +blood_pressure e097 +bloodtype efe4 +bluetooth e1a7 +bluetooth_audio e60f +bluetooth_connected e1a8 +bluetooth_disabled e1a9 +bluetooth_drive efe5 +bluetooth_searching e60f +blur_circular e3a2 +blur_linear e3a3 +blur_medium e84c +blur_off e3a4 +blur_on e3a5 +blur_short e8cf +boat_bus f36d +boat_railway f36c +body_fat e098 +body_system e099 +bolt ea0b +bomb f568 +book e86e +book_2 f53e +book_3 f53d +book_4 f53c +book_5 f53b +book_6 f3df +book_online f217 +book_ribbon f3e7 +bookmark e8e7 +bookmark_add e598 +bookmark_added e599 +bookmark_bag f410 +bookmark_border e8e7 +bookmark_check f457 +bookmark_flag f456 +bookmark_heart f455 +bookmark_manager f7b1 +bookmark_remove e59a +bookmark_star f454 +bookmarks e98b +books_movies_and_music ef82 +border_all e228 +border_bottom e229 +border_clear e22a +border_color e22b +border_horizontal e22c +border_inner e22d +border_left e22e +border_outer e22f +border_right e230 +border_style e231 +border_top e232 +border_vertical e233 +borg f40d +bottom_app_bar e730 +bottom_drawer e72d +bottom_navigation e98c +bottom_panel_close f72a +bottom_panel_open f729 +bottom_right_click f684 +bottom_sheets e98d +box f5a4 +box_add f5a5 +box_edit f5a6 +boy eb67 +brand_awareness e98e +brand_family f4f1 +branding_watermark e06b +breakfast_dining ea54 +breaking_news ea08 +breaking_news_alt_1 f0ba +breastfeeding f856 +brick f388 +brightness_1 e3fa +brightness_2 f036 +brightness_3 e3a8 +brightness_4 e3a9 +brightness_5 e3aa +brightness_6 e3ab +brightness_7 e3ac +brightness_alert f5cf +brightness_auto e1ab +brightness_empty f7e8 +brightness_high e1ac +brightness_low e1ad +brightness_medium e1ae +bring_your_own_ip e016 +broadcast_on_home f8f8 +broadcast_on_personal f8f9 +broken_image e3ad +browse eb13 +browse_activity f8a5 +browse_gallery ebd1 +browser_not_supported ef47 +browser_updated e7cf +brunch_dining ea73 +brush e3ae +bubble ef83 +bubble_chart e6dd +bubbles f64e +bug_report e868 +build f8cd +build_circle ef48 +bungalow e591 +burst_mode e43c +bus_alert e98f +bus_railway f36b +business e7ee +business_center eb3f +business_chip f84c +business_messages ef84 +buttons_alt e72f +cabin e589 +cable efe6 +cable_car f479 +cached e86a +cadence f4b4 +cake e7e9 +cake_add f85b +calculate ea5f +calendar_add_on ef85 +calendar_apps_script f0bb +calendar_clock f540 +calendar_month ebcc +calendar_today e935 +calendar_view_day e936 +calendar_view_month efe7 +calendar_view_week efe8 +call f0d4 +call_end f0bc +call_end_alt f0bc +call_log e08e +call_made e0b2 +call_merge e0b3 +call_missed e0b4 +call_missed_outgoing e0e4 +call_quality f652 +call_received e0b5 +call_split e0b6 +call_to_action e06c +camera e3af +camera_alt e412 +camera_enhance e8fc +camera_front e3b1 +camera_indoor efe9 +camera_outdoor efea +camera_rear e3b2 +camera_roll e3b3 +camera_video f7a6 +cameraswitch efeb +campaign ef49 +camping f8a2 +cancel e888 +cancel_presentation e0e9 +cancel_schedule_send ea39 +candle f588 +candlestick_chart ead4 +cannabis f2f3 +captive_portal f728 +capture f727 +car_crash ebf2 +car_defrost_left f344 +car_defrost_low_left f343 +car_defrost_low_right f342 +car_defrost_mid_low_left f341 +car_defrost_mid_right f340 +car_defrost_right f33f +car_fan_low_left f33e +car_fan_low_mid_left f33d +car_fan_low_right f33c +car_fan_mid_left f33b +car_fan_mid_low_right f33a +car_fan_mid_right f339 +car_fan_recirculate f338 +car_gear f337 +car_lock f336 +car_mirror_heat f335 +car_rental ea55 +car_repair ea56 +car_tag f4e3 +card_giftcard e8f6 +card_membership e8f7 +card_travel e8f8 +cardio_load f4b9 +cardiology e09c +cards e991 +cards_star f375 +carpenter f1f8 +carry_on_bag eb08 +carry_on_bag_checked eb0b +carry_on_bag_inactive eb0a +carry_on_bag_question eb09 +cases e992 +casino eb40 +cast e307 +cast_connected e308 +cast_for_education efec +cast_pause f5f0 +cast_warning f5ef +castle eab1 +category e574 +category_search f437 +celebration ea65 +cell_merge f82e +cell_tower ebba +cell_wifi e0ec +center_focus_strong e3b4 +center_focus_weak e3b5 +chair efed +chair_alt efee +chalet e585 +change_circle e2e7 +change_history e86b +charger e2ae +charging_station f19d +chart_data e473 +chat e0c9 +chat_add_on f0f3 +chat_apps_script f0bd +chat_bubble e0cb +chat_bubble_outline e0cb +chat_error f7ac +chat_info f52b +chat_paste_go f6bd +chat_paste_go_2 f3cb +check e5ca +check_box e834 +check_box_outline_blank e835 +check_circle f0be +check_circle_filled f0be +check_circle_outline f0be +check_in_out f6f6 +check_indeterminate_small f88a +check_small f88b +checkbook e70d +checked_bag eb0c +checked_bag_question eb0d +checklist e6b1 +checklist_rtl e6b3 +checkroom f19e +cheer f6a8 +chef_hat f357 +chess f5e7 +chess_pawn f3b6 +chevron_backward f46b +chevron_forward f46a +chevron_left e5cb +chevron_right e5cc +child_care eb41 +child_friendly eb42 +chip_extraction f821 +chips e993 +chrome_reader_mode e86d +chromecast_2 f17b +chromecast_device e83c +chronic ebb2 +church eaae +cinematic_blur f853 +circle ef4a +circle_notifications e994 +circles e7ea +circles_ext e7ec +clarify f0bf +class e86e +clean_hands f21f +cleaning e995 +cleaning_bucket f8b4 +cleaning_services f0ff +clear e5cd +clear_all e0b8 +clear_day f157 +clear_night f159 +climate_mini_split f8b5 +clinical_notes e09e +clock_arrow_down f382 +clock_arrow_up f381 +clock_loader_10 f726 +clock_loader_20 f725 +clock_loader_40 f724 +clock_loader_60 f723 +clock_loader_80 f722 +clock_loader_90 f721 +close e5cd +close_fullscreen f1cf +close_small f508 +closed_caption e996 +closed_caption_add f4ae +closed_caption_disabled f1dc +closed_caption_off e996 +cloud f15c +cloud_alert f3cc +cloud_circle e2be +cloud_done e2bf +cloud_download e2c0 +cloud_lock f386 +cloud_off e2c1 +cloud_queue f15c +cloud_sync eb5a +cloud_upload e2c3 +cloudy f15c +cloudy_filled f15c +cloudy_snowing e810 +co2 e7b0 +co_present eaf0 +code e86f +code_blocks f84d +code_off e4f3 +coffee efef +coffee_maker eff0 +cognition e09f +cognition_2 f3b5 +collapse_all e944 +collapse_content f507 +collections e3d3 +collections_bookmark e431 +color_lens e40a +colorize e3b8 +colors e997 +combine_columns f420 +comedy_mask f4d6 +comic_bubble f5dd +comment e24c +comment_bank ea4e +comments_disabled e7a2 +commit eaf5 +communication e27c +communities eb16 +communities_filled eb16 +commute e940 +compare e3b9 +compare_arrows e915 +compass_calibration e57c +component_exchange f1e7 +compost e761 +compress e94d +computer e31e +computer_arrow_up f2f7 +computer_cancel f2f6 +concierge f561 +conditions e0a0 +confirmation_number e638 +congenital e0a1 +connect_without_contact f223 +connected_tv e998 +connecting_airports e7c9 +construction ea3c +contact_emergency f8d1 +contact_mail e0d0 +contact_page f22e +contact_phone f0c0 +contact_phone_filled f0c0 +contact_support e94c +contactless ea71 +contactless_off f858 +contacts e0ba +contacts_product e999 +content_copy e14d +content_cut e14e +content_paste e14f +content_paste_go ea8e +content_paste_off e4f8 +content_paste_search ea9b +contextual_token f486 +contextual_token_add f485 +contract f5a0 +contract_delete f5a2 +contract_edit f5a1 +contrast eb37 +contrast_circle f49f +contrast_rtl_off ec72 +contrast_square f4a0 +control_camera e074 +control_point e3ba +control_point_duplicate e3bb +controller_gen e83d +conversion_path f0c1 +conversion_path_off f7b4 +convert_to_text f41f +conveyor_belt f867 +cookie eaac +cookie_off f79a +cooking e2b6 +cool_to_dry e276 +copy_all e2ec +copyright e90c +coronavirus f221 +corporate_fare f1d0 +cottage e587 +counter_0 f785 +counter_1 f784 +counter_2 f783 +counter_3 f782 +counter_4 f781 +counter_5 f780 +counter_6 f77f +counter_7 f77e +counter_8 f77d +counter_9 f77c +countertops f1f7 +create f097 +create_new_folder e2cc +credit_card e8a1 +credit_card_clock f438 +credit_card_gear f52d +credit_card_heart f52c +credit_card_off e4f4 +credit_score eff1 +crib e588 +crisis_alert ebe9 +crop e3be +crop_16_9 e3bc +crop_3_2 e3bd +crop_5_4 e3bf +crop_7_5 e3c0 +crop_9_16 f549 +crop_din e3c6 +crop_free e3c2 +crop_landscape e3c3 +crop_original e3f4 +crop_portrait e3c5 +crop_rotate e437 +crop_square e3c6 +crossword f5e5 +crowdsource eb18 +crown ecb3 +cruelty_free e799 +css eb93 +csv e6cf +currency_bitcoin ebc5 +currency_exchange eb70 +currency_franc eafa +currency_lira eaef +currency_pound eaf1 +currency_ruble eaec +currency_rupee eaf7 +currency_rupee_circle f460 +currency_yen eafb +currency_yuan eaf9 +curtains ec1e +curtains_closed ec1d +custom_typography e732 +cut f08b +cycle f854 +cyclone ebd5 +dangerous e99a +dark_mode e51c +dashboard e871 +dashboard_2 f3ea +dashboard_customize e99b +data_alert f7f6 +data_array ead1 +data_check f7f2 +data_exploration e76f +data_info_alert f7f5 +data_loss_prevention e2dc +data_object ead3 +data_saver_off eff2 +data_saver_on eff3 +data_table e99c +data_thresholding eb9f +data_usage eff2 +database f20e +database_off f414 +database_search f38e +database_upload f3dc +dataset f8ee +dataset_linked f8ef +date_range e916 +deblur eb77 +deceased e0a5 +decimal_decrease f82d +decimal_increase f82c +deck ea42 +dehaze e3c7 +delete e92e +delete_forever e92b +delete_history f518 +delete_outline e92e +delete_sweep e16c +delivery_dining eb28 +delivery_truck_bolt f3a2 +delivery_truck_speed f3a1 +demography e489 +density_large eba9 +density_medium eb9e +density_small eba8 +dentistry e0a6 +departure_board e576 +deployed_code f720 +deployed_code_account f51b +deployed_code_alert f5f2 +deployed_code_history f5f3 +deployed_code_update f5f4 +dermatology e0a7 +description e873 +deselect ebb6 +design_services f10a +desk f8f4 +deskphone f7fa +desktop_access_disabled e99d +desktop_cloud f3db +desktop_cloud_stack f3be +desktop_landscape f45e +desktop_landscape_add f439 +desktop_mac e30b +desktop_portrait f45d +desktop_windows e30c +destruction f585 +details e3c8 +detection_and_zone e29f +detector e282 +detector_alarm e1f7 +detector_battery e204 +detector_co e2af +detector_offline e223 +detector_smoke e285 +detector_status e1e8 +developer_board e30d +developer_board_off e4ff +developer_guide e99e +developer_mode e1b0 +developer_mode_tv e874 +device_band f2f5 +device_hub e335 +device_reset e8b3 +device_thermostat e1ff +device_unknown e339 +devices e326 +devices_fold ebde +devices_fold_2 f406 +devices_off f7a5 +devices_other e337 +devices_wearables f6ab +dew_point f879 +diagnosis e0a8 +diagonal_line f41e +dialer_sip e0bb +dialogs e99f +dialpad e0bc +diamond ead5 +dictionary f539 +difference eb7d +digital_out_of_home f1de +digital_wellbeing ef86 +dining eff4 +dinner_dining ea57 +directions e52e +directions_alt f880 +directions_alt_off f881 +directions_bike e52f +directions_boat eff5 +directions_boat_filled eff5 +directions_bus eff6 +directions_bus_filled eff6 +directions_car eff7 +directions_car_filled eff7 +directions_off f10f +directions_railway eff8 +directions_railway_2 f462 +directions_railway_filled eff8 +directions_run e566 +directions_subway effa +directions_subway_filled effa +directions_transit effa +directions_transit_filled effa +directions_walk e536 +directory_sync e394 +dirty_lens ef4b +disabled_by_default f230 +disabled_visible e76e +disc_full e610 +discover_tune e018 +dishwasher e9a0 +dishwasher_gen e832 +display_external_input f7e7 +display_settings eb97 +distance f6ea +diversity_1 f8d7 +diversity_2 f8d8 +diversity_3 f8d9 +diversity_4 f857 +dns e875 +do_disturb f08c +do_disturb_alt f08d +do_disturb_off f08e +do_disturb_on f08f +do_not_disturb f08d +do_not_disturb_alt f08c +do_not_disturb_off f08e +do_not_disturb_on f08f +do_not_disturb_on_total_silence effb +do_not_step f19f +do_not_touch f1b0 +dock e30e +dock_to_bottom f7e6 +dock_to_left f7e5 +dock_to_right f7e4 +docs ea7d +docs_add_on f0c2 +docs_apps_script f0c3 +document_scanner e5fa +document_search f385 +domain e7ee +domain_add eb62 +domain_disabled e0ef +domain_verification ef4c +domain_verification_off f7b0 +domino_mask f5e4 +done e876 +done_all e877 +done_outline e92f +donut_large e917 +donut_small e918 +door_back effc +door_front effd +door_open e77c +door_sensor e28a +door_sliding effe +doorbell efff +doorbell_3p e1e7 +doorbell_chime e1f3 +double_arrow ea50 +downhill_skiing e509 +download f090 +download_2 f523 +download_done f091 +download_for_offline f000 +downloading f001 +draft e66d +draft_orders e7b3 +drafts e151 +drag_click f71f +drag_handle e25d +drag_indicator e945 +drag_pan f71e +draw e746 +draw_abstract f7f8 +draw_collage f7f7 +drawing_recognition eb00 +dresser e210 +drive_eta eff7 +drive_export f41d +drive_file_move e9a1 +drive_file_move_outline e9a1 +drive_file_move_rtl e9a1 +drive_file_rename_outline e9a2 +drive_folder_upload e9a3 +drive_fusiontable e678 +dropdown e9a4 +dropper_eye f351 +dry f1b3 +dry_cleaning ea58 +dual_screen f6cf +duo e9a5 +dvr e1b2 +dynamic_feed ea14 +dynamic_form f1bf +e911_avatar f11a +e911_emergency f119 +e_mobiledata f002 +e_mobiledata_badge f7e3 +ear_sound f356 +earbud_case f327 +earbud_left f326 +earbud_right f325 +earbuds f003 +earbuds_2 f324 +earbuds_battery f004 +early_on e2ba +earthquake f64f +east f1df +ecg f80f +ecg_heart f6e9 +eco ea35 +eda f6e8 +edgesensor_high f005 +edgesensor_low f006 +edit f097 +edit_arrow_down f380 +edit_arrow_up f37f +edit_attributes e578 +edit_audio f42d +edit_calendar e742 +edit_document f88c +edit_location e568 +edit_location_alt e1c5 +edit_note e745 +edit_notifications e525 +edit_off e950 +edit_road ef4d +edit_square f88d +editor_choice f528 +egg eacc +egg_alt eac8 +eject e8fb +elderly f21a +elderly_woman eb69 +electric_bike eb1b +electric_bolt ec1c +electric_car eb1c +electric_meter ec1b +electric_moped eb1d +electric_rickshaw eb1e +electric_scooter eb1f +electrical_services f102 +elevation f6e7 +elevator f1a0 +email e159 +emergency e1eb +emergency_heat f15d +emergency_heat_2 f4e5 +emergency_home e82a +emergency_recording ebf4 +emergency_share ebf6 +emergency_share_off f59e +emoji_emotions ea22 +emoji_events ea23 +emoji_flags f0c6 +emoji_food_beverage ea1b +emoji_language f4cd +emoji_nature ea1c +emoji_objects ea24 +emoji_people ea1d +emoji_symbols ea1e +emoji_transportation ea1f +emoticon e5f3 +empty_dashboard f844 +enable f188 +encrypted e593 +encrypted_add f429 +encrypted_add_circle f42a +encrypted_minus_circle f428 +encrypted_off f427 +endocrinology e0a9 +energy e9a6 +energy_program_saving f15f +energy_program_time_used f161 +energy_savings_leaf ec1a +engineering ea3d +enhanced_encryption e63f +ent e0aa +enterprise e70e +enterprise_off eb4d +equal f77b +equalizer e01d +eraser_size_1 f3fc +eraser_size_2 f3fb +eraser_size_3 f3fa +eraser_size_4 f3f9 +eraser_size_5 f3f8 +error f8b6 +error_circle_rounded f8b6 +error_med e49b +error_outline f8b6 +escalator f1a1 +escalator_warning f1ac +euro ea15 +euro_symbol e926 +ev_charger e56d +ev_mobiledata_badge f7e2 +ev_shadow ef8f +ev_shadow_add f580 +ev_shadow_minus f57f +ev_station e56d +event e878 +event_available e614 +event_busy e615 +event_list f683 +event_note e616 +event_repeat eb7b +event_seat e903 +event_upcoming f238 +exclamation f22f +exercise f6e6 +exit_to_app e879 +expand e94f +expand_all e946 +expand_circle_down e7cd +expand_circle_right f591 +expand_circle_up f5d2 +expand_content f830 +expand_less e5ce +expand_more e5cf +expansion_panels ef90 +expension_panels ef90 +experiment e686 +explicit e01e +explore e87a +explore_nearby e538 +explore_off e9a8 +explosion f685 +export_notes e0ac +exposure e3f6 +exposure_neg_1 e3cb +exposure_neg_2 e3cc +exposure_plus_1 e800 +exposure_plus_2 e3ce +exposure_zero e3cf +extension e87b +extension_off e4f5 +eye_tracking f4c9 +eyeglasses f6ee +face f008 +face_2 f8da +face_3 f8db +face_4 f8dc +face_5 f8dd +face_6 f8de +face_down f402 +face_left f401 +face_nod f400 +face_retouching_natural ef4e +face_retouching_off f007 +face_right f3ff +face_shake f3fe +face_unlock f008 +face_up f3fd +fact_check f0c5 +factory ebbc +falling f60d +familiar_face_and_zone e21c +family_history e0ad +family_home eb26 +family_link eb19 +family_restroom f1a2 +family_star f527 +fan_focus f334 +fan_indirect f333 +farsight_digital f559 +fast_forward e01f +fast_rewind e020 +fastfood e57a +faucet e278 +favorite e87e +favorite_border e87e +fax ead8 +feature_search e9a9 +featured_play_list e06d +featured_seasonal_and_gifts ef91 +featured_video e06e +feed f009 +feedback e87f +female e590 +femur f891 +femur_alt f892 +fence f1f6 +fertile f6e5 +festival ea68 +fiber_dvr e05d +fiber_manual_record e061 +fiber_new e05e +fiber_pin e06a +fiber_smart_record e062 +file_copy e173 +file_copy_off f4d8 +file_download f090 +file_download_done f091 +file_download_off e4fe +file_export f3b2 +file_json f3bb +file_map e2c5 +file_map_stack f3e2 +file_open eaf3 +file_png f3bc +file_present ea0e +file_save f17f +file_save_off e505 +file_upload f09b +file_upload_off f886 +files ea85 +filter e3d3 +filter_1 e3d0 +filter_2 e3d1 +filter_3 e3d2 +filter_4 e3d4 +filter_5 e3d5 +filter_6 e3d6 +filter_7 e3d7 +filter_8 e3d8 +filter_9 e3d9 +filter_9_plus e3da +filter_alt ef4f +filter_alt_off eb32 +filter_arrow_right f3d1 +filter_b_and_w e3db +filter_center_focus e3dc +filter_drama e3dd +filter_frames e3de +filter_hdr e3df +filter_list e152 +filter_list_alt e94e +filter_list_off eb57 +filter_none e3e0 +filter_retrolux e3e1 +filter_tilt_shift e3e2 +filter_vintage e3e3 +finance e6bf +finance_chip f84e +finance_mode ef92 +find_in_page e880 +find_replace e881 +fingerprint e90d +fingerprint_off f49d +fire_extinguisher f1d8 +fire_hydrant f1a3 +fire_truck f8f2 +fireplace ea43 +first_page e5dc +fit_page f77a +fit_page_height f397 +fit_page_width f396 +fit_screen ea10 +fit_width f779 +fitness_center eb43 +fitness_tracker f463 +flag f0c6 +flag_2 f40f +flag_check f3d8 +flag_circle eaf8 +flag_filled f0c6 +flaky ef50 +flare e3e4 +flash_auto e3e5 +flash_off e3e6 +flash_on e3e7 +flashlight_off f00a +flashlight_on f00b +flatware f00c +flex_direction f778 +flex_no_wrap f777 +flex_wrap f776 +flight e539 +flight_class e7cb +flight_land e904 +flight_takeoff e905 +flights_and_hotels e9ab +flightsmode ef93 +flip e3e8 +flip_camera_android ea37 +flip_camera_ios ea38 +flip_to_back e882 +flip_to_front e883 +float_landscape_2 f45c +float_portrait_2 f45b +flood ebe6 +floor f6e4 +floor_lamp e21e +flourescent f07d +flowchart f38d +flowsheet e0ae +fluid e483 +fluid_balance f80d +fluid_med f80c +fluorescent f07d +flutter f1dd +flutter_dash e00b +flyover f478 +fmd_bad f00e +fmd_good f1db +foggy e818 +folded_hands f5ed +folder e2c7 +folder_check f3d7 +folder_check_2 f3d6 +folder_code f3c8 +folder_copy ebbd +folder_data f586 +folder_delete eb34 +folder_eye f3d5 +folder_info f395 +folder_limited f4e4 +folder_managed f775 +folder_match f3d4 +folder_off eb83 +folder_open e2c8 +folder_shared e2c9 +folder_special e617 +folder_supervised f774 +folder_zip eb2c +follow_the_signs f222 +font_download e167 +font_download_off e4f9 +food_bank f1f2 +foot_bones f893 +footprint f87d +for_you e9ac +forest ea99 +fork_left eba0 +fork_right ebac +fork_spoon f3e4 +forklift f868 +format_align_center e234 +format_align_justify e235 +format_align_left e236 +format_align_right e237 +format_bold e238 +format_clear e239 +format_color_fill e23a +format_color_reset e23b +format_color_text e23c +format_h1 f85d +format_h2 f85e +format_h3 f85f +format_h4 f860 +format_h5 f861 +format_h6 f862 +format_image_left f863 +format_image_right f864 +format_indent_decrease e23d +format_indent_increase e23e +format_ink_highlighter f82b +format_italic e23f +format_letter_spacing f773 +format_letter_spacing_2 f618 +format_letter_spacing_standard f617 +format_letter_spacing_wide f616 +format_letter_spacing_wider f615 +format_line_spacing e240 +format_list_bulleted e241 +format_list_bulleted_add f849 +format_list_numbered e242 +format_list_numbered_rtl e267 +format_overline eb65 +format_paint e243 +format_paragraph f865 +format_quote e244 +format_quote_off f413 +format_shapes e25e +format_size e245 +format_strikethrough e246 +format_text_clip f82a +format_text_overflow f829 +format_text_wrap f828 +format_textdirection_l_to_r e247 +format_textdirection_r_to_l e248 +format_textdirection_vertical f4b8 +format_underlined e249 +format_underlined_squiggle f885 +forms_add_on f0c7 +forms_apps_script f0c8 +fort eaad +forum e8af +forward f57a +forward_10 e056 +forward_30 e057 +forward_5 e058 +forward_circle f6f5 +forward_media f6f4 +forward_to_inbox f187 +foundation f200 +fragrance f345 +frame_inspect f772 +frame_person f8a6 +frame_person_mic f4d5 +frame_person_off f7d1 +frame_reload f771 +frame_source f770 +free_breakfast eb44 +free_cancellation e748 +front_hand e769 +front_loader f869 +full_coverage eb12 +full_hd f58b +full_stacked_bar_chart f212 +fullscreen e5d0 +fullscreen_exit e5d1 +fullscreen_portrait f45a +function f866 +functions e24a +funicular f477 +g_mobiledata f010 +g_mobiledata_badge f7e1 +g_translate e927 +gallery_thumbnail f86f +gamepad e30f +games e30f +garage f011 +garage_door e714 +garage_home e82d +garden_cart f8a9 +gas_meter ec19 +gastroenterology e0f1 +gate e277 +gavel e90e +general_device e6de +generating_tokens e749 +genetics e0f3 +genres e6ee +gesture e155 +gesture_select f657 +get_app f090 +gif e908 +gif_2 f40e +gif_box e7a3 +girl eb68 +gite e58b +glass_cup f6e3 +globe e64c +globe_asia f799 +globe_book f3c9 +globe_location_pin f35d +globe_uk f798 +glucose e4a0 +glyphs f8a3 +go_to_line f71d +golf_course eb45 +gondola_lift f476 +google_home_devices e715 +google_plus_reshare f57a +google_tv_remote f5db +google_wifi f579 +gpp_bad f012 +gpp_good f013 +gpp_maybe f014 +gps_fixed e55c +gps_not_fixed e1b7 +gps_off e1b6 +grade f09a +gradient e3e9 +grading ea4f +grain e3ea +graph_1 f3a0 +graph_2 f39f +graph_3 f39e +graph_4 f39d +graph_5 f39c +graph_6 f39b +graph_7 f346 +graphic_eq e1b8 +grass f205 +grid_3x3 f015 +grid_3x3_off f67c +grid_4x4 f016 +grid_goldenratio f017 +grid_guides f76f +grid_off e3eb +grid_on e3ec +grid_view e9b0 +grocery ef97 +group ea21 +group_add e7f0 +group_off e747 +group_remove e7ad +group_search f3ce +group_work e886 +grouped_bar_chart f211 +groups f233 +groups_2 f8df +groups_3 f8e0 +guardian f4c1 +gynecology e0f4 +h_mobiledata f018 +h_mobiledata_badge f7e0 +h_plus_mobiledata f019 +h_plus_mobiledata_badge f7df +hail e9b1 +hallway e6f8 +hand_bones f894 +hand_gesture ef9c +hand_gesture_off f3f3 +handheld_controller f4c6 +handshake ebcb +handwriting_recognition eb02 +handyman f10b +hangout_video e0c1 +hangout_video_off e0c2 +hard_disk f3da +hard_drive f80e +hard_drive_2 f7a4 +hardware ea59 +hd e052 +hdr_auto f01a +hdr_auto_select f01b +hdr_enhanced_select ef51 +hdr_off e3ed +hdr_off_select f01c +hdr_on e3ee +hdr_on_select f01d +hdr_plus f01e +hdr_plus_off e3ef +hdr_strong e3f1 +hdr_weak e3f2 +head_mounted_device f4c5 +headphones f01f +headphones_battery f020 +headset f01f +headset_mic e311 +headset_off e33a +healing e3f3 +health_and_beauty ef9d +health_and_safety e1d5 +health_metrics f6e2 +heap_snapshot_large f76e +heap_snapshot_multiple f76d +heap_snapshot_thumbnail f76c +hearing e023 +hearing_aid f464 +hearing_aid_disabled f3b0 +hearing_disabled f104 +heart_broken eac2 +heart_check f60a +heart_minus f883 +heart_plus f884 +heat f537 +heat_pump ec18 +heat_pump_balance e27e +height ea16 +helicopter f60c +help e8fd +help_center f1c0 +help_clinic f810 +help_outline e8fd +hematology e0f6 +hevc f021 +hexagon eb39 +hide ef9e +hide_image f022 +hide_source f023 +high_density f79c +high_quality e024 +high_res f54b +highlight e25f +highlight_alt ef52 +highlight_keyboard_focus f510 +highlight_mouse_cursor f511 +highlight_off e888 +highlight_text_cursor f512 +highlighter_size_1 f76b +highlighter_size_2 f76a +highlighter_size_3 f769 +highlighter_size_4 f768 +highlighter_size_5 f767 +hiking e50a +history e8b3 +history_2 f3e6 +history_edu ea3e +history_off f4da +history_toggle_off f17d +hive eaa6 +hls eb8a +hls_off eb8c +holiday_village e58a +home e9b2 +home_and_garden ef9f +home_app_logo e295 +home_filled e9b2 +home_health e4b9 +home_improvement_and_tools efa0 +home_iot_device e283 +home_max f024 +home_max_dots e849 +home_mini f025 +home_pin f14d +home_repair_service f100 +home_speaker f11c +home_storage f86c +home_work f030 +horizontal_distribute e014 +horizontal_rule f108 +horizontal_split e947 +host f3d9 +hot_tub eb46 +hotel e549 +hotel_class e743 +hourglass ebff +hourglass_arrow_down f37e +hourglass_arrow_up f37d +hourglass_bottom ea5c +hourglass_disabled ef53 +hourglass_empty e88b +hourglass_full e88c +hourglass_pause f38c +hourglass_top ea5b +house ea44 +house_siding f202 +house_with_shield e786 +houseboat e584 +household_supplies efa1 +hov f475 +how_to_reg e174 +how_to_vote e175 +hr_resting f6ba +html eb7e +http e902 +https e899 +hub e9f4 +humerus f895 +humerus_alt f896 +humidity_high f163 +humidity_indoor f558 +humidity_low f164 +humidity_mid f165 +humidity_percentage f87e +hvac f10e +hvac_max_defrost f332 +ice_skating e50b +icecream ea69 +id_card f4ca +identity_aware_proxy e2dd +identity_platform ebb7 +ifl e025 +iframe f71b +iframe_off f71c +image e3f4 +image_arrow_up f317 +image_aspect_ratio e3f5 +image_not_supported f116 +image_search e43f +imagesearch_roller e9b4 +imagesmode efa2 +immunology e0fb +import_contacts e0e0 +import_export e8d5 +important_devices e912 +in_home_mode e833 +inactive_order e0fc +inbox e156 +inbox_customize f859 +inbox_text f399 +inbox_text_asterisk f360 +inbox_text_person f35e +inbox_text_share f35c +incomplete_circle e79b +indeterminate_check_box e909 +indeterminate_question_box f56d +info e88e +info_i f59b +infrared f87c +ink_eraser e6d0 +ink_eraser_off e7e3 +ink_highlighter e6d1 +ink_highlighter_move f524 +ink_marker e6d2 +ink_pen e6d3 +ink_selection ef52 +inpatient e0fe +input e890 +input_circle f71a +insert_chart f0cc +insert_chart_filled f0cc +insert_chart_outlined f0cc +insert_comment e24c +insert_drive_file e66d +insert_emoticon ea22 +insert_invitation e878 +insert_link e250 +insert_page_break eaca +insert_photo e3f4 +insert_text f827 +insights f092 +install_desktop eb71 +install_mobile eb72 +instant_mix e026 +integration_instructions ef54 +interactive_space f7ff +interests e7c8 +interpreter_mode e83b +inventory e179 +inventory_2 e1a1 +invert_colors e891 +invert_colors_off e0c4 +ios e027 +ios_share e6b8 +iron e583 +iso e3f6 +jamboard_kiosk e9b5 +javascript eb7c +join f84f +join_full f84f +join_inner eaf4 +join_left eaf2 +join_right eaea +joystick f5ee +jump_to_element f719 +kayaking e50c +kebab_dining e842 +keep f026 +keep_off e6f9 +keep_pin f026 +keep_public f56f +kettle e2b9 +key e73c +key_off eb84 +key_vertical f51a +key_visualizer f199 +keyboard e312 +keyboard_alt f028 +keyboard_arrow_down e313 +keyboard_arrow_left e314 +keyboard_arrow_right e315 +keyboard_arrow_up e316 +keyboard_backspace e317 +keyboard_capslock e318 +keyboard_capslock_badge f7de +keyboard_command_key eae7 +keyboard_control_key eae6 +keyboard_double_arrow_down ead0 +keyboard_double_arrow_left eac3 +keyboard_double_arrow_right eac9 +keyboard_double_arrow_up eacf +keyboard_external_input f7dd +keyboard_full f7dc +keyboard_hide e31a +keyboard_keys f67b +keyboard_lock f492 +keyboard_lock_off f491 +keyboard_off f67a +keyboard_onscreen f7db +keyboard_option_key eae8 +keyboard_previous_language f7da +keyboard_return e31b +keyboard_tab e31c +keyboard_tab_rtl ec73 +keyboard_voice e31d +kid_star f526 +king_bed ea45 +kitchen eb47 +kitesurfing e50d +lab_panel e103 +lab_profile e104 +lab_research f80b +label e893 +label_important e948 +label_important_outline e948 +label_off e9b6 +label_outline e893 +labs e105 +lan eb2f +landscape e564 +landscape_2 f4c4 +landscape_2_edit f310 +landscape_2_off f4c3 +landslide ebd7 +language e894 +language_chinese_array f766 +language_chinese_cangjie f765 +language_chinese_dayi f764 +language_chinese_pinyin f763 +language_chinese_quick f762 +language_chinese_wubi f761 +language_french f760 +language_gb_english f75f +language_international f75e +language_japanese_kana f513 +language_korean_latin f75d +language_pinyin f75c +language_spanish f5e9 +language_us f759 +language_us_colemak f75b +language_us_dvorak f75a +laps f6b9 +laptop e31e +laptop_car f3cd +laptop_chromebook e31f +laptop_mac e320 +laptop_windows e321 +lasso_select eb03 +last_page e5dd +launch e89e +laundry e2a8 +layers e53b +layers_clear e53c +lda e106 +leaderboard f20c +leak_add e3f8 +leak_remove e3f9 +left_click f718 +left_panel_close f717 +left_panel_open f716 +legend_toggle f11b +lens e3fa +lens_blur f029 +letter_switch f758 +library_add e03c +library_add_check e9b7 +library_books e02f +library_music e030 +license eb04 +lift_to_talk efa3 +light f02a +light_group e28b +light_mode e518 +light_off e9b8 +lightbulb e90f +lightbulb_2 f3e3 +lightbulb_circle ebfe +lightbulb_outline e90f +lightning_stand efa4 +line_axis ea9a +line_curve f757 +line_end f826 +line_end_arrow f81d +line_end_arrow_notch f81c +line_end_circle f81b +line_end_diamond f81a +line_end_square f819 +line_start f825 +line_start_arrow f818 +line_start_arrow_notch f817 +line_start_circle f816 +line_start_diamond f815 +line_start_square f814 +line_style e919 +line_weight e91a +linear_scale e260 +link e250 +link_off e16f +linked_camera e438 +linked_services f535 +liquor ea60 +list e896 +list_alt e0ee +list_alt_add f756 +list_alt_check f3de +lists e9b9 +live_help e0c6 +live_tv e63a +living f02b +local_activity e553 +local_airport e53d +local_atm e53e +local_bar e540 +local_cafe eb44 +local_car_wash e542 +local_convenience_store e543 +local_dining e561 +local_drink e544 +local_fire_department ef55 +local_florist e545 +local_gas_station e546 +local_grocery_store e8cc +local_hospital e548 +local_hotel e549 +local_laundry_service e54a +local_library e54b +local_mall e54c +local_movies e8da +local_offer f05b +local_parking e54f +local_pharmacy e550 +local_phone f0d4 +local_pizza e552 +local_play e553 +local_police ef56 +local_post_office e554 +local_printshop e8ad +local_see e557 +local_shipping e558 +local_taxi e559 +location_automation f14f +location_away f150 +location_chip f850 +location_city e7f1 +location_disabled e1b6 +location_home f152 +location_off e0c7 +location_on f1db +location_pin f1db +location_searching e1b7 +locator_tag f8c1 +lock e899 +lock_clock ef57 +lock_open e898 +lock_open_circle f361 +lock_open_right f656 +lock_outline e899 +lock_person f8f3 +lock_reset eade +login ea77 +logo_dev ead6 +logout e9ba +looks e3fc +looks_3 e3fb +looks_4 e3fd +looks_5 e3fe +looks_6 e3ff +looks_one e400 +looks_two e401 +loop e863 +loupe e402 +low_density f79b +low_priority e16d +lowercase f48a +loyalty e89a +lte_mobiledata f02c +lte_mobiledata_badge f7d9 +lte_plus_mobiledata f02d +lte_plus_mobiledata_badge f7d8 +luggage f235 +lunch_dining ea61 +lyrics ec0b +macro_auto f6f2 +macro_off f8d2 +magic_button f136 +magic_exchange f7f4 +magic_tether f7d7 +magnification_large f83d +magnification_small f83c +magnify_docked f7d6 +magnify_fullscreen f7d5 +mail e159 +mail_lock ec0a +mail_off f48b +mail_outline e159 +male e58e +man e4eb +man_2 f8e1 +man_3 f8e2 +man_4 f8e3 +manage_accounts f02e +manage_history ebe7 +manage_search f02f +manga f5e3 +manufacturing e726 +map e55b +map_search f3ca +maps_home_work f030 +maps_ugc ef58 +margin e9bb +mark_as_unread e9bc +mark_chat_read f18b +mark_chat_unread f189 +mark_email_read f18c +mark_email_unread f18a +mark_unread_chat_alt eb9d +markdown f552 +markdown_copy f553 +markdown_paste f554 +markunread e159 +markunread_mailbox e89b +masked_transitions e72e +masked_transitions_add f42b +masks f218 +match_case f6f1 +match_case_off f36f +match_word f6f0 +matter e907 +maximize e930 +measuring_tape f6af +media_bluetooth_off f031 +media_bluetooth_on f032 +media_link f83f +media_output f4f2 +media_output_off f4f3 +mediation efa7 +medical_information ebed +medical_mask f80a +medical_services f109 +medication f033 +medication_liquid ea87 +meeting_room eb4f +memory e322 +memory_alt f7a3 +menstrual_health f6e1 +menu e5d2 +menu_book ea19 +menu_open e9bd +merge eb98 +merge_type e252 +message e0c9 +metabolism e10b +metro f474 +mfg_nest_yale_lock f11d +mic e31d +mic_alert f392 +mic_double f5d1 +mic_external_off ef59 +mic_external_on ef5a +mic_none e31d +mic_off e02b +microbiology e10c +microwave f204 +microwave_gen e847 +military_tech ea3f +mimo e9be +mimo_disconnect e9bf +mindfulness f6e0 +minimize e931 +minor_crash ebf1 +mintmark efa9 +missed_video_call f0ce +missed_video_call_filled f0ce +missing_controller e701 +mist e188 +mitre f547 +mixture_med e4c8 +mms e618 +mobile_friendly e200 +mobile_hand f323 +mobile_hand_left f313 +mobile_hand_left_off f312 +mobile_hand_off f314 +mobile_loupe f322 +mobile_off e201 +mobile_screen_share e0e7 +mobile_screensaver f321 +mobile_sound_2 f318 +mobile_speaker f320 +mobiledata_off f034 +mode f097 +mode_comment e253 +mode_cool f166 +mode_cool_off f167 +mode_dual f557 +mode_edit f097 +mode_edit_outline f097 +mode_fan f168 +mode_fan_off ec17 +mode_heat f16a +mode_heat_cool f16b +mode_heat_off f16d +mode_night f036 +mode_of_travel e7ce +mode_off_on f16f +mode_standby f037 +model_training f0cf +modeling f3aa +monetization_on e263 +money e57d +money_bag f3ee +money_off f038 +money_off_csred f038 +monitor ef5b +monitor_heart eaa2 +monitor_weight f039 +monitor_weight_gain f6df +monitor_weight_loss f6de +monitoring f190 +monochrome_photos e403 +monorail f473 +mood ea22 +mood_bad e7f3 +moon_stars f34f +mop e28d +moped eb28 +more e619 +more_down f196 +more_horiz e5d3 +more_time ea5d +more_up f197 +more_vert e5d4 +mosque eab2 +motion_blur f0d0 +motion_mode f842 +motion_photos_auto f03a +motion_photos_off e9c0 +motion_photos_on e9c1 +motion_photos_pause f227 +motion_photos_paused f227 +motion_play f40b +motion_sensor_active e792 +motion_sensor_alert e784 +motion_sensor_idle e783 +motion_sensor_urgent e78e +motorcycle e91b +mountain_flag f5e2 +mouse e323 +mouse_lock f490 +mouse_lock_off f48f +move e740 +move_down eb61 +move_group f715 +move_item f1ff +move_location e741 +move_selection_down f714 +move_selection_left f713 +move_selection_right f712 +move_selection_up f711 +move_to_inbox e168 +move_up eb64 +moved_location e594 +movie e404 +movie_creation e404 +movie_edit f840 +movie_filter e43a +movie_info e02d +movie_off f499 +moving e501 +moving_beds e73d +moving_ministry e73e +mp e9c3 +multicooker e293 +multiline_chart e6df +multimodal_hand_eye f41b +multiple_airports efab +multiple_stop f1b9 +museum ea36 +music_cast eb1a +music_note e405 +music_note_add f391 +music_off e440 +music_video e063 +my_location e55c +mystery f5e1 +nat ef5c +nature e406 +nature_people e407 +navigate_before e5cb +navigate_next e5cc +navigation e55d +near_me e569 +near_me_disabled f1ef +nearby e6b7 +nearby_error f03b +nearby_off f03c +nephrology e10d +nest_audio ebbf +nest_cam_floodlight f8b7 +nest_cam_indoor f11e +nest_cam_iq f11f +nest_cam_iq_outdoor f120 +nest_cam_magnet_mount f8b8 +nest_cam_outdoor f121 +nest_cam_stand f8b9 +nest_cam_wall_mount f8ba +nest_cam_wired_stand ec16 +nest_clock_farsight_analog f8bb +nest_clock_farsight_digital f8bc +nest_connect f122 +nest_detect f123 +nest_display f124 +nest_display_max f125 +nest_doorbell_visitor f8bd +nest_eco_leaf f8be +nest_farsight_weather f8bf +nest_found_savings f8c0 +nest_gale_wifi f579 +nest_heat_link_e f126 +nest_heat_link_gen_3 f127 +nest_hello_doorbell e82c +nest_locator_tag f8c1 +nest_mini e789 +nest_multi_room f8c2 +nest_protect e68e +nest_remote f5db +nest_remote_comfort_sensor f12a +nest_secure_alarm f12b +nest_sunblock f8c3 +nest_tag f8c1 +nest_thermostat e68f +nest_thermostat_e_eu f12d +nest_thermostat_gen_3 f12e +nest_thermostat_sensor f12f +nest_thermostat_sensor_eu f130 +nest_thermostat_zirconium_eu f131 +nest_true_radiant f8c4 +nest_wake_on_approach f8c5 +nest_wake_on_press f8c6 +nest_wifi_gale f132 +nest_wifi_mistral f133 +nest_wifi_point f134 +nest_wifi_point_vento f134 +nest_wifi_pro f56b +nest_wifi_pro_2 f56a +nest_wifi_router f133 +network_cell e1b9 +network_check e640 +network_intel_node f371 +network_intelligence efac +network_intelligence_history f5f6 +network_intelligence_update f5f5 +network_locked e61a +network_manage f7ab +network_node f56e +network_ping ebca +network_wifi e1ba +network_wifi_1_bar ebe4 +network_wifi_1_bar_locked f58f +network_wifi_2_bar ebd6 +network_wifi_2_bar_locked f58e +network_wifi_3_bar ebe1 +network_wifi_3_bar_locked f58d +network_wifi_locked f532 +neurology e10e +new_label e609 +new_releases ef76 +new_window f710 +news e032 +newsmode efad +newspaper eb81 +newsstand e9c4 +next_plan ef5d +next_week e16a +nfc e1bb +nfc_off f369 +night_shelter f1f1 +night_sight_auto f1d7 +night_sight_auto_off f1f9 +night_sight_max f6c3 +nightlife ea62 +nightlight f03d +nightlight_round f03d +nights_stay ea46 +no_accounts f03e +no_adult_content f8fe +no_backpack f237 +no_crash ebf0 +no_drinks f1a5 +no_encryption f03f +no_encryption_gmailerrorred f03f +no_flash f1a6 +no_food f1a7 +no_luggage f23b +no_meals f1d6 +no_meeting_room eb4e +no_photography f1a8 +no_sim e1ce +no_sound e710 +no_stroller f1af +no_transfer f1d5 +noise_aware ebec +noise_control_off ebf3 +noise_control_on f8a8 +nordic_walking e50e +north f1e0 +north_east f1e1 +north_west f1e2 +not_accessible f0fe +not_accessible_forward f54a +not_interested f08c +not_listed_location e575 +not_started f0d1 +note e66d +note_add e89c +note_alt f040 +note_stack f562 +note_stack_add f563 +notes e26c +notification_add e399 +notification_important e004 +notification_multiple e6c2 +notification_settings f367 +notification_sound f353 +notifications e7f5 +notifications_active e7f7 +notifications_none e7f5 +notifications_off e7f6 +notifications_paused e7f8 +notifications_unread f4fe +numbers eac7 +nutrition e110 +ods e6e8 +odt e6e9 +offline_bolt e932 +offline_pin e90a +offline_pin_off f4d0 +offline_share e9c5 +oil_barrel ec15 +on_device_training ebfd +on_hub_device e6c3 +oncology e114 +ondemand_video e63a +online_prediction f0eb +onsen f6f8 +opacity e91c +open_in_browser e89d +open_in_full f1ce +open_in_new e89e +open_in_new_down f70f +open_in_new_off e4f6 +open_in_phone e702 +open_jam efae +open_run f4b7 +open_with e89f +ophthalmology e115 +oral_disease e116 +orbit f426 +order_approve f812 +order_play f811 +orders eb14 +orthopedics f897 +other_admission e47b +other_houses e58c +outbound e1ca +outbox ef5f +outbox_alt eb17 +outdoor_garden e205 +outdoor_grill ea47 +outgoing_mail f0d2 +outlet f1d4 +outlined_flag f0c6 +outpatient e118 +outpatient_med e119 +output ebbe +output_circle f70e +oven e9c7 +oven_gen e843 +overview e4a7 +overview_key f7d4 +owl f3b4 +oxygen_saturation e4de +p2p f52a +pace f6b8 +pacemaker e656 +package e48f +package_2 f569 +padding e9c8 +page_control e731 +page_footer f383 +page_header f384 +page_info f614 +pageless f509 +pages e7f9 +pageview e8a0 +paid f041 +palette e40a +pallet f86a +pan_tool e925 +pan_tool_alt ebb9 +pan_zoom f655 +panorama e40b +panorama_fish_eye e40c +panorama_horizontal e40d +panorama_photosphere e9c9 +panorama_vertical e40e +panorama_wide_angle e40f +paragliding e50f +park ea63 +partly_cloudy_day f172 +partly_cloudy_night f174 +partner_exchange f7f9 +partner_reports efaf +party_mode e7fa +passkey f87f +password f042 +password_2 f4a9 +password_2_off f4a8 +patient_list e653 +pattern f043 +pause e034 +pause_circle e1a2 +pause_circle_filled e1a2 +pause_circle_outline e1a2 +pause_presentation e0ea +payment e8a1 +payments ef63 +pedal_bike eb29 +pediatrics e11d +pen_size_1 f755 +pen_size_2 f754 +pen_size_3 f753 +pen_size_4 f752 +pen_size_5 f751 +pending ef64 +pending_actions f1bb +pentagon eb50 +people ea21 +people_alt ea21 +people_outline ea21 +percent eb58 +performance_max e51a +pergola e203 +perm_camera_mic e8a2 +perm_contact_calendar e8a3 +perm_data_setting e8a4 +perm_device_information e8a5 +perm_identity f0d3 +perm_media e8a7 +perm_phone_msg e8a8 +perm_scan_wifi e8a9 +person f0d3 +person_2 f8e4 +person_3 f8e5 +person_4 f8e6 +person_add ea4d +person_add_alt ea4d +person_add_disabled e9cb +person_alert f567 +person_apron f5a3 +person_book f5e8 +person_cancel f566 +person_celebrate f7fe +person_check f565 +person_edit f4fa +person_filled f0d3 +person_off e510 +person_outline f0d3 +person_pin e55a +person_pin_circle e56a +person_play f7fd +person_raised_hand f59a +person_remove ef66 +person_search f106 +person_shield e384 +personal_bag eb0e +personal_bag_off eb0f +personal_bag_question eb10 +personal_injury e6da +personal_places e703 +personal_video e63b +pest_control f0fa +pest_control_rodent f0fd +pet_supplies efb1 +pets e91d +phishing ead7 +phone f0d4 +phone_alt f0d4 +phone_android e324 +phone_bluetooth_speaker e61b +phone_callback e649 +phone_disabled e9cc +phone_enabled e9cd +phone_forwarded e61c +phone_in_talk e61d +phone_iphone e325 +phone_locked e61e +phone_missed e61f +phone_paused e620 +phonelink e326 +phonelink_erase e0db +phonelink_lock e0dc +phonelink_off e327 +phonelink_ring e0dd +phonelink_ring_off f7aa +phonelink_setup ef41 +photo e432 +photo_album e411 +photo_auto_merge f530 +photo_camera e412 +photo_camera_back ef68 +photo_camera_front ef69 +photo_filter e43b +photo_frame f0d9 +photo_library e413 +photo_prints efb2 +photo_size_select_actual e432 +photo_size_select_large e433 +photo_size_select_small e434 +php eb8f +physical_therapy e11e +piano e521 +piano_off e520 +picture_as_pdf e415 +picture_in_picture e8aa +picture_in_picture_alt e911 +picture_in_picture_center f550 +picture_in_picture_large f54f +picture_in_picture_medium f54e +picture_in_picture_mobile f517 +picture_in_picture_off f52f +picture_in_picture_small f54d +pie_chart f0da +pie_chart_filled f0da +pie_chart_outline f0da +pie_chart_outlined f0da +pill e11f +pill_off f809 +pin f045 +pin_drop e55e +pin_end e767 +pin_invoke e763 +pinboard f3ab +pinboard_unread f3ac +pinch eb38 +pinch_zoom_in f1fa +pinch_zoom_out f1fb +pip f64d +pip_exit f70d +pivot_table_chart e9ce +place f1db +place_item f1f0 +plagiarism ea5a +planet f387 +planner_banner_ad_pt e692 +planner_review e694 +play_arrow e037 +play_circle e1c4 +play_disabled ef6a +play_for_work e906 +play_lesson f047 +play_music e6ee +play_pause f137 +play_shapes f7fc +playing_cards f5dc +playlist_add e03b +playlist_add_check e065 +playlist_add_check_circle e7e6 +playlist_add_circle e7e5 +playlist_play e05f +playlist_remove eb80 +plug_connect f35a +plumbing f107 +plus_one e800 +podcasts f048 +podiatry e120 +podium f7fb +point_of_sale f17e +point_scan f70c +poker_chip f49b +policy ea17 +policy_alert f407 +poll f0cc +polyline ebbb +polymer e8ab +pool eb48 +portable_wifi_off f087 +portrait e851 +position_bottom_left f70b +position_bottom_right f70a +position_top_right f709 +post e705 +post_add ea20 +potted_plant f8aa +power e63c +power_input e336 +power_off e646 +power_rounded f8c7 +power_settings_circle f418 +power_settings_new f8c7 +prayer_times f838 +precision_manufacturing f049 +pregnancy f5f1 +pregnant_woman f5f1 +preliminary e7d8 +prescriptions e121 +present_to_all e0df +preview f1c5 +preview_off f7af +price_change f04a +price_check f04b +print e8ad +print_add f7a2 +print_connect f7a1 +print_disabled e9cf +print_error f7a0 +print_lock f651 +priority e19f +priority_high e645 +privacy f148 +privacy_tip f0dc +private_connectivity e744 +problem e122 +procedure e651 +process_chart f855 +production_quantity_limits e1d1 +productivity e296 +progress_activity e9d0 +prompt_suggestion f4f6 +propane ec14 +propane_tank ec13 +psychiatry e123 +psychology ea4a +psychology_alt f8ea +public e80b +public_off f1ca +publish e255 +published_with_changes f232 +pulmonology e124 +pulse_alert f501 +punch_clock eaa8 +push_pin f10d +qr_code ef6b +qr_code_2 e00a +qr_code_2_add f658 +qr_code_scanner f206 +query_builder efd6 +query_stats e4fc +question_answer e8af +question_exchange f7f3 +question_mark eb8b +queue e03c +queue_music e03d +queue_play_next e066 +quick_phrases e7d1 +quick_reference e46e +quick_reference_all f801 +quick_reorder eb15 +quickreply ef6c +quiet_time f159 +quiet_time_active eb76 +quiz f04c +r_mobiledata f04d +radar f04e +radio e03e +radio_button_checked e837 +radio_button_partial f560 +radio_button_unchecked e836 +radiology e125 +railway_alert e9d1 +railway_alert_2 f461 +rainy f176 +rainy_heavy f61f +rainy_light f61e +rainy_snow f61d +ramen_dining ea64 +ramp_left eb9c +ramp_right eb96 +range_hood e1ea +rate_review e560 +rate_review_rtl e706 +raven f555 +raw_off f04f +raw_on f050 +read_more ef6d +readiness_score f6dd +real_estate_agent e73a +rear_camera f6c2 +rebase f845 +rebase_edit f846 +receipt e8b0 +receipt_long ef6e +receipt_long_off f40a +recent_actors e03f +recent_patient f808 +recenter f4c0 +recommend e9d2 +record_voice_over e91f +rectangle eb54 +recycling e760 +redeem e8f6 +redo e15a +reduce_capacity f21c +refresh e5d5 +regular_expression f750 +relax f6dc +release_alert f654 +remember_me f051 +reminder e6c6 +reminders_alt e6c6 +remote_gen e83e +remove e15b +remove_circle f08f +remove_circle_outline f08f +remove_done e9d3 +remove_from_queue e067 +remove_moderator e9d4 +remove_red_eye e8f4 +remove_road ebfc +remove_selection e9d5 +remove_shopping_cart e928 +reopen_window f708 +reorder e8fe +repartition f8e8 +repeat e040 +repeat_on e9d6 +repeat_one e041 +repeat_one_on e9d7 +replace_audio f451 +replace_image f450 +replace_video f44f +replay e042 +replay_10 e059 +replay_30 e05a +replay_5 e05b +replay_circle_filled e9d8 +reply e15e +reply_all e15f +report f052 +report_gmailerrorred f052 +report_off e170 +report_problem f083 +request_page f22c +request_quote f1b6 +reset_brightness f482 +reset_focus f481 +reset_image f824 +reset_iso f480 +reset_settings f47f +reset_shadow f47e +reset_shutter_speed f47d +reset_tv e9d9 +reset_white_balance f47c +reset_wrench f56c +resize f707 +respiratory_rate e127 +responsive_layout e9da +restart_alt f053 +restaurant e56c +restaurant_menu e561 +restore e8b3 +restore_from_trash e938 +restore_page e929 +resume f7d0 +reviews f07c +rewarded_ads efb6 +rheumatology e128 +rib_cage f898 +rice_bowl f1f5 +right_click f706 +right_panel_close f705 +right_panel_open f704 +ring_volume f0dd +ring_volume_filled f0dd +ripples e9db +road f472 +robot f882 +robot_2 f5d0 +rocket eba5 +rocket_launch eb9b +roller_shades ec12 +roller_shades_closed ec11 +roller_skating ebcd +roofing f201 +room f1db +room_preferences f1b8 +room_service eb49 +rotate_90_degrees_ccw e418 +rotate_90_degrees_cw eaab +rotate_auto f417 +rotate_left e419 +rotate_right e41a +roundabout_left eb99 +roundabout_right eba3 +rounded_corner e920 +route eacd +router e328 +router_off f2f4 +routine e20c +rowing e921 +rss_feed e0e5 +rsvp f055 +rtt e9ad +rubric eb27 +rule f1c2 +rule_folder f1c9 +rule_settings f64c +run_circle ef6f +running_with_errors e51d +rv_hookup e642 +safety_check ebef +safety_check_off f59d +safety_divider e1cc +sailing e502 +salinity f876 +sanitizer f21d +satellite e562 +satellite_alt eb3a +sauna f6f7 +save e161 +save_alt f090 +save_as eb60 +save_clock f398 +saved_search ea11 +savings e2eb +scale eb5f +scan f74e +scan_delete f74f +scanner e329 +scatter_plot e268 +scene e2a7 +schedule efd6 +schedule_send ea0a +schema e4fd +school e80c +science ea4b +science_off f542 +scooter f471 +score e269 +scoreboard ebd0 +screen_lock_landscape e1be +screen_lock_portrait e1bf +screen_lock_rotation e1c0 +screen_record f679 +screen_rotation e1c1 +screen_rotation_alt ebee +screen_rotation_up f678 +screen_search_desktop ef70 +screen_share e0e2 +screenshot f056 +screenshot_frame f677 +screenshot_frame_2 f374 +screenshot_keyboard f7d3 +screenshot_monitor ec08 +screenshot_region f7d2 +screenshot_tablet f697 +script f45f +scrollable_header e9dc +scuba_diving ebce +sd e9dd +sd_card e623 +sd_card_alert f057 +sd_storage e623 +sdk e720 +search e8b6 +search_activity f3e5 +search_check f800 +search_check_2 f469 +search_hands_free e696 +search_insights f4bc +search_off ea76 +seat_cool_left f331 +seat_cool_right f330 +seat_heat_left f32f +seat_heat_right f32e +seat_vent_left f32d +seat_vent_right f32c +security e32a +security_key f503 +security_update f072 +security_update_good f073 +security_update_warning f074 +segment e94b +select f74d +select_all e162 +select_check_box f1fe +select_to_speak f7cf +select_window e6fa +select_window_2 f4c8 +select_window_off e506 +self_care f86d +self_improvement ea78 +sell f05b +send e163 +send_and_archive ea0c +send_money e8b7 +send_time_extension eadb +send_to_mobile f05c +sensor_door f1b5 +sensor_occupied ec10 +sensor_window f1b4 +sensors e51e +sensors_krx f556 +sensors_krx_off f515 +sensors_off e51f +sentiment_calm f6a7 +sentiment_content f6a6 +sentiment_dissatisfied e811 +sentiment_excited f6a5 +sentiment_extremely_dissatisfied f194 +sentiment_frustrated f6a4 +sentiment_neutral e812 +sentiment_sad f6a3 +sentiment_satisfied e813 +sentiment_satisfied_alt e813 +sentiment_stressed f6a2 +sentiment_very_dissatisfied e814 +sentiment_very_satisfied e815 +sentiment_worried f6a1 +serif f4ac +server_person f3bd +service_toolbox e717 +set_meal f1ea +settings e8b8 +settings_accessibility f05d +settings_account_box f835 +settings_alert f143 +settings_applications e8b9 +settings_b_roll f625 +settings_backup_restore e8ba +settings_bluetooth e8bb +settings_brightness e8bd +settings_cell e8bc +settings_cinematic_blur f624 +settings_ethernet e8be +settings_heart f522 +settings_input_antenna e8bf +settings_input_component e8c1 +settings_input_composite e8c1 +settings_input_hdmi e8c2 +settings_input_svideo e8c3 +settings_motion_mode f833 +settings_night_sight f832 +settings_overscan e8c4 +settings_panorama f831 +settings_phone e8c5 +settings_photo_camera f834 +settings_power e8c6 +settings_remote e8c7 +settings_slow_motion f623 +settings_suggest f05e +settings_system_daydream e1c3 +settings_timelapse f622 +settings_video_camera f621 +settings_voice e8c8 +settop_component e2ac +severe_cold ebd3 +shadow e9df +shadow_add f584 +shadow_minus f583 +shape_line f8d3 +shape_recognition eb01 +shapes e602 +share e80d +share_eta e5f7 +share_location f05f +share_off f6cb +share_reviews f8a4 +share_windows f613 +sheets_rtl f823 +shelf_auto_hide f703 +shelf_position f702 +shelves f86e +shield e9e0 +shield_lock f686 +shield_locked f592 +shield_moon eaa9 +shield_person f650 +shield_question f529 +shield_watch f30f +shield_with_heart e78f +shield_with_house e78d +shift e5f2 +shift_lock f7ae +shift_lock_off f483 +shop e8c9 +shop_2 e8ca +shop_two e8ca +shopping_bag f1cc +shopping_bag_speed f39a +shopping_basket e8cb +shopping_cart e8cc +shopping_cart_checkout eb88 +shopping_cart_off f4f7 +shoppingmode efb7 +short_stay e4d0 +short_text e261 +shortcut f57a +show_chart e6e1 +shower f061 +shuffle e043 +shuffle_on e9e1 +shutter_speed e43d +shutter_speed_add f57e +shutter_speed_minus f57d +sick f220 +side_navigation e9e2 +sign_language ebe5 +signal_cellular_0_bar f0a8 +signal_cellular_1_bar f0a9 +signal_cellular_2_bar f0aa +signal_cellular_3_bar f0ab +signal_cellular_4_bar e1c8 +signal_cellular_add f7a9 +signal_cellular_alt e202 +signal_cellular_alt_1_bar ebdf +signal_cellular_alt_2_bar ebe3 +signal_cellular_connected_no_internet_0_bar f0ac +signal_cellular_connected_no_internet_4_bar e1cd +signal_cellular_no_sim e1ce +signal_cellular_nodata f062 +signal_cellular_null e1cf +signal_cellular_off e1d0 +signal_cellular_pause f5a7 +signal_disconnected f239 +signal_wifi_0_bar f0b0 +signal_wifi_4_bar f065 +signal_wifi_4_bar_lock e1e1 +signal_wifi_bad f064 +signal_wifi_connected_no_internet_4 f064 +signal_wifi_off e1da +signal_wifi_statusbar_4_bar f065 +signal_wifi_statusbar_not_connected f0ef +signal_wifi_statusbar_null f067 +signature f74c +signpost eb91 +sim_card e32b +sim_card_alert f057 +sim_card_download f068 +simulation f3e1 +single_bed ea48 +sip f069 +siren f3a7 +siren_check f3a6 +siren_open f3a5 +siren_question f3a4 +skateboarding e511 +skeleton f899 +skillet f543 +skillet_cooktop f544 +skip_next e044 +skip_previous e045 +skull f89a +skull_list f370 +slab_serif f4ab +sledding e512 +sleep e213 +sleep_score f6b7 +slide_library f822 +sliders e9e3 +slideshow e41b +slow_motion_video e068 +smart_button f1c1 +smart_card_reader f4a5 +smart_card_reader_off f4a6 +smart_display f06a +smart_outlet e844 +smart_screen f06b +smart_toy f06c +smartphone e32c +smartphone_camera f44e +smb_share f74b +smoke_free eb4a +smoking_rooms eb4b +sms e625 +sms_failed e87f +snippet_folder f1c7 +snooze e046 +snowboarding e513 +snowing e80f +snowing_heavy f61c +snowmobile e503 +snowshoeing e514 +soap f1b2 +social_distance e1cb +social_leaderboard f6a0 +solar_power ec0f +sort e164 +sort_by_alpha e053 +sos ebf7 +sound_detection_dog_barking f149 +sound_detection_glass_break f14a +sound_detection_loud_sound f14b +sound_sampler f6b4 +soup_kitchen e7d3 +source f1c8 +source_environment e527 +source_notes e12d +south f1e3 +south_america e7e4 +south_east f1e4 +south_west f1e5 +spa eb4c +space_bar e256 +space_dashboard e66b +spatial_audio ebeb +spatial_audio_off ebe8 +spatial_speaker f4cf +spatial_tracking ebea +speaker e32d +speaker_group e32e +speaker_notes e8cd +speaker_notes_off e92a +speaker_phone e0d2 +special_character f74a +specific_gravity f872 +speech_to_text f8a7 +speed e9e4 +speed_0_25 f4d4 +speed_0_2x f498 +speed_0_5 f4e2 +speed_0_5x f497 +speed_0_75 f4d3 +speed_0_7x f496 +speed_1_2 f4e1 +speed_1_25 f4d2 +speed_1_2x f495 +speed_1_5 f4e0 +speed_1_5x f494 +speed_1_75 f4d1 +speed_1_7x f493 +speed_2x f4eb +speed_camera f470 +spellcheck e8ce +split_scene f3bf +split_scene_down f2ff +split_scene_left f2fe +split_scene_right f2fd +split_scene_up f2fc +splitscreen f06d +splitscreen_add f4fd +splitscreen_bottom f676 +splitscreen_landscape f459 +splitscreen_left f675 +splitscreen_portrait f458 +splitscreen_right f674 +splitscreen_top f673 +splitscreen_vertical_add f4fc +spo2 f6db +spoke e9a7 +sports ea30 +sports_and_outdoors efb8 +sports_bar f1f3 +sports_baseball ea51 +sports_basketball ea26 +sports_cricket ea27 +sports_esports ea28 +sports_football ea29 +sports_golf ea2a +sports_gymnastics ebc4 +sports_handball ea33 +sports_hockey ea2b +sports_kabaddi ea34 +sports_martial_arts eae9 +sports_mma ea2c +sports_motorsports ea2d +sports_rugby ea2e +sports_score f06e +sports_soccer ea2f +sports_tennis ea32 +sports_volleyball ea31 +sprinkler e29a +sprint f81f +square eb36 +square_dot f3b3 +square_foot ea49 +ssid_chart eb66 +stack f609 +stack_group f359 +stack_hexagon f41c +stack_off f608 +stack_star f607 +stacked_bar_chart e9e6 +stacked_email e6c7 +stacked_inbox e6c9 +stacked_line_chart f22b +stacks f500 +stadia_controller f135 +stadium eb90 +stairs f1a9 +stairs_2 f46c +star f09a +star_border f09a +star_border_purple500 f09a +star_half e839 +star_outline f09a +star_purple500 f09a +star_rate f0ec +star_rate_half ec45 +star_shine f31d +stars e8d0 +stars_2 f31c +start e089 +stat_0 e697 +stat_1 e698 +stat_2 e699 +stat_3 e69a +stat_minus_1 e69b +stat_minus_2 e69c +stat_minus_3 e69d +stay_current_landscape e0d3 +stay_current_portrait e0d4 +stay_primary_landscape e0d5 +stay_primary_portrait e0d6 +steering_wheel_heat f32b +step f6fe +step_into f701 +step_out f700 +step_over f6ff +steppers e9e7 +steps f6da +stethoscope f805 +stethoscope_arrow f807 +stethoscope_check f806 +sticky_note e9e8 +sticky_note_2 f1fc +stock_media f570 +stockpot f545 +stop e047 +stop_circle ef71 +stop_screen_share e0e3 +storage e1db +store e8d1 +store_mall_directory e8d1 +storefront ea12 +storm f070 +straight eb95 +straighten e41c +strategy f5df +stream e9e9 +stream_apps f79f +streetview e56e +stress_management f6d9 +strikethrough_s e257 +stroke_full f749 +stroke_partial f748 +stroller f1ae +style e41d +styler e273 +stylus f604 +stylus_brush f366 +stylus_fountain_pen f365 +stylus_highlighter f364 +stylus_laser_pointer f747 +stylus_note f603 +stylus_pen f363 +stylus_pencil f362 +subdirectory_arrow_left e5d9 +subdirectory_arrow_right e5da +subheader e9ea +subject e8d2 +subscript f111 +subscriptions e064 +subtitles e048 +subtitles_gear f355 +subtitles_off ef72 +subway e56f +summarize f071 +sunny e81a +sunny_snowing e819 +superscript f112 +supervised_user_circle e939 +supervised_user_circle_off f60e +supervisor_account e8d3 +support ef73 +support_agent f0e2 +surfing e515 +surgical e131 +surround_sound e049 +swap_calls e0d7 +swap_driving_apps e69e +swap_driving_apps_wheel e69f +swap_horiz e8d4 +swap_horizontal_circle e933 +swap_vert e8d5 +swap_vertical_circle e8d6 +sweep e6ac +swipe e9ec +swipe_down eb53 +swipe_down_alt eb30 +swipe_left eb59 +swipe_left_alt eb33 +swipe_right eb52 +swipe_right_alt eb56 +swipe_up eb2e +swipe_up_alt eb35 +swipe_vertical eb51 +switch e1f4 +switch_access f6fd +switch_access_2 f506 +switch_access_3 f34d +switch_access_shortcut e7e1 +switch_access_shortcut_add e7e2 +switch_account e9ed +switch_camera e41e +switch_left f1d1 +switch_right f1d2 +switch_video e41f +switches e733 +sword_rose f5de +swords f889 +symptoms e132 +synagogue eab0 +sync e627 +sync_alt ea18 +sync_arrow_down f37c +sync_arrow_up f37b +sync_desktop f41a +sync_disabled e628 +sync_lock eaee +sync_problem e629 +sync_saved_locally f820 +syringe e133 +system_security_update f072 +system_security_update_good f073 +system_security_update_warning f074 +system_update f072 +system_update_alt e8d7 +tab e8d8 +tab_close f745 +tab_close_inactive f3d0 +tab_close_right f746 +tab_duplicate f744 +tab_group f743 +tab_inactive f43b +tab_move f742 +tab_new_right f741 +tab_recent f740 +tab_search f2f2 +tab_unselected e8d9 +table f191 +table_bar ead2 +table_chart e265 +table_chart_view f6ef +table_convert f3c7 +table_edit f3c6 +table_eye f466 +table_lamp e1f2 +table_restaurant eac6 +table_rows f101 +table_rows_narrow f73f +table_view f1be +tablet e32f +tablet_android e330 +tablet_camera f44d +tablet_mac e331 +tabs e9ee +tactic f564 +tag e9ef +tag_faces ea22 +takeout_dining ea74 +tamper_detection_off e82e +tamper_detection_on f8c8 +tap_and_play e62b +tapas f1e9 +target e719 +task f075 +task_alt e2e6 +taunt f69f +taxi_alert ef74 +team_dashboard e013 +temp_preferences_custom f8c9 +temp_preferences_eco f8ca +temple_buddhist eab3 +temple_hindu eaaf +tenancy f0e3 +terminal eb8e +terrain e564 +text_ad e728 +text_compare f3c5 +text_decrease eadd +text_fields e262 +text_fields_alt e9f1 +text_format e165 +text_increase eae2 +text_rotate_up e93a +text_rotate_vertical e93b +text_rotation_angledown e93c +text_rotation_angleup e93d +text_rotation_down e93e +text_rotation_none e93f +text_select_end f73e +text_select_jump_to_beginning f73d +text_select_jump_to_end f73c +text_select_move_back_character f73b +text_select_move_back_word f73a +text_select_move_down f739 +text_select_move_forward_character f738 +text_select_move_forward_word f737 +text_select_move_up f736 +text_select_start f735 +text_snippet f1c6 +text_to_speech f1bc +text_up f49e +textsms e625 +texture e421 +texture_add f57c +texture_minus f57b +theater_comedy ea66 +theaters e8da +thermometer e846 +thermometer_add f582 +thermometer_gain f6d8 +thermometer_loss f6d7 +thermometer_minus f581 +thermostat f076 +thermostat_arrow_down f37a +thermostat_arrow_up f379 +thermostat_auto f077 +thermostat_carbon f178 +things_to_do eb2a +thread_unread f4f9 +threat_intelligence eaed +thumb_down f578 +thumb_down_alt f578 +thumb_down_filled f578 +thumb_down_off f578 +thumb_down_off_alt f578 +thumb_up f577 +thumb_up_alt f577 +thumb_up_filled f577 +thumb_up_off f577 +thumb_up_off_alt f577 +thumbnail_bar f734 +thumbs_up_down e8dd +thunderstorm ebdb +tibia f89b +tibia_alt f89c +tile_large f3c3 +tile_medium f3c2 +tile_small f3c1 +time_auto f0e4 +time_to_leave eff7 +timelapse e422 +timeline e922 +timer e425 +timer_10 e423 +timer_10_alt_1 efbf +timer_10_select f07a +timer_3 e424 +timer_3_alt_1 efc0 +timer_3_select f07b +timer_5 f4b1 +timer_5_shutter f4b2 +timer_arrow_down f378 +timer_arrow_up f377 +timer_off e426 +timer_pause f4bb +timer_play f4ba +tips_and_updates e79a +tire_repair ebc8 +title e264 +titlecase f489 +toast efc1 +toc e8de +today e8df +toggle_off e9f5 +toggle_on e9f6 +token ea25 +toll e8e0 +tonality e427 +toolbar e9f7 +tools_flat_head f8cb +tools_installation_kit e2ab +tools_ladder e2cb +tools_level e77b +tools_phillips f8cc +tools_pliers_wire_stripper e2aa +tools_power_drill e1e9 +tools_wrench f8cd +tooltip e9f8 +tooltip_2 f3ed +top_panel_close f733 +top_panel_open f732 +topic f1c8 +tornado e199 +total_dissolved_solids f877 +touch_app e913 +touch_double f38b +touch_long f38a +touch_triple f389 +touchpad_mouse f687 +touchpad_mouse_off f4e6 +tour ef75 +toys e332 +toys_and_games efc2 +toys_fan f887 +track_changes e8e1 +trackpad_input f4c7 +trackpad_input_2 f409 +trackpad_input_3 f408 +traffic e565 +traffic_jam f46f +trail_length eb5e +trail_length_medium eb63 +trail_length_short eb6d +train e570 +tram e571 +transcribe f8ec +transfer_within_a_station e572 +transform e428 +transgender e58d +transit_enterexit e579 +transit_ticket f3f1 +transition_chop f50e +transition_dissolve f50d +transition_fade f50c +transition_push f50b +transition_slide f50a +translate e8e2 +transportation e21d +travel ef93 +travel_explore e2db +travel_luggage_and_bags efc3 +trending_down e8e3 +trending_flat e8e4 +trending_up e8e5 +trip e6fb +trip_origin e57b +trolley f86b +trolley_cable_car f46e +trophy ea23 +troubleshoot e1d2 +try f07c +tsunami ebd8 +tsv e6d6 +tty f1aa +tune e429 +tungsten f07d +turn_left eba6 +turn_right ebab +turn_sharp_left eba7 +turn_sharp_right ebaa +turn_slight_left eba4 +turn_slight_right eb9a +turned_in e8e7 +turned_in_not e8e7 +tv e63b +tv_displays f3ec +tv_gen e830 +tv_guide e1dc +tv_next f3eb +tv_off e647 +tv_options_edit_channels e1dd +tv_options_input_settings e1de +tv_remote f5d9 +tv_signin e71b +tv_with_assistant e785 +two_pager f51f +two_pager_store f3c4 +two_wheeler e9f9 +type_specimen f8f0 +u_turn_left eba1 +u_turn_right eba2 +ulna_radius f89d +ulna_radius_alt f89e +umbrella f1ad +unarchive e169 +undo e166 +unfold_less e5d6 +unfold_less_double f8cf +unfold_more e5d7 +unfold_more_double f8d0 +ungroup f731 +universal_currency e9fa +universal_currency_alt e734 +universal_local e9fb +unknown_2 f49f +unknown_5 e6a5 +unknown_7 f49e +unknown_document f804 +unknown_med eabd +unlicense eb05 +unpaved_road f46d +unpin e6f9 +unpublished f236 +unsubscribe e0eb +upcoming f07e +update e923 +update_disabled e075 +upgrade f0fb +upi_pay f3cf +upload f09b +upload_2 f521 +upload_file e9fc +uppercase f488 +urology e137 +usb e1e0 +usb_off e4fa +user_attributes e708 +vaccines e138 +vacuum efc5 +valve e224 +vape_free ebc6 +vaping_rooms ebcf +variable_add f51e +variable_insert f51d +variable_remove f51c +variables f851 +ventilator e139 +verified ef76 +verified_off f30e +verified_user f013 +vertical_align_bottom e258 +vertical_align_center e259 +vertical_align_top e25a +vertical_distribute e076 +vertical_shades ec0e +vertical_shades_closed ec0d +vertical_split e949 +vibration e62d +video_call e070 +video_camera_back f07f +video_camera_back_add f40c +video_camera_front f080 +video_camera_front_off f83b +video_chat f8a0 +video_file eb87 +video_label e071 +video_library e04a +video_search efc6 +video_settings ea75 +video_stable f081 +videocam e04b +videocam_alert f390 +videocam_off e04c +videogame_asset e338 +videogame_asset_off e500 +view_agenda e8e9 +view_apps f376 +view_array e8ea +view_carousel e8eb +view_column e8ec +view_column_2 f847 +view_comfy e42a +view_comfy_alt eb73 +view_compact e42b +view_compact_alt eb74 +view_cozy eb75 +view_day e8ed +view_headline e8ee +view_in_ar efc9 +view_in_ar_new efc9 +view_in_ar_off f61b +view_kanban eb7f +view_list e8ef +view_module e8f0 +view_object_track f432 +view_quilt e8f1 +view_real_size f4c2 +view_sidebar f114 +view_stream e8f2 +view_timeline eb85 +view_week e8f3 +vignette e435 +villa e586 +visibility e8f4 +visibility_lock f653 +visibility_off e8f5 +vital_signs e650 +vitals e13b +vo2_max f4aa +voice_chat e62e +voice_over_off e94a +voice_selection f58a +voice_selection_off f42c +voicemail e0d9 +voicemail_2 f352 +volcano ebda +volume_down e04d +volume_down_alt e79c +volume_mute e04e +volume_off e04f +volume_up e050 +volunteer_activism ea70 +voting_chip f852 +vpn_key e0da +vpn_key_alert f6cc +vpn_key_off eb7a +vpn_lock e62f +vpn_lock_2 f350 +vr180_create2d efca +vr180_create2d_off f571 +vrpano f082 +wall_art efcb +wall_lamp e2b4 +wallet f8ff +wallpaper e1bc +wallpaper_slideshow f672 +wand_shine f31f +wand_stars f31e +ward e13c +warehouse ebb8 +warning f083 +warning_amber f083 +warning_off f7ad +wash f1b1 +watch e334 +watch_button_press f6aa +watch_check f468 +watch_later efd6 +watch_off eae3 +watch_screentime f6ae +watch_vibration f467 +watch_wake f6a9 +water f084 +water_bottle f69d +water_bottle_large f69e +water_damage f203 +water_do f870 +water_drop e798 +water_ec f875 +water_full f6d6 +water_heater e284 +water_lock f6ad +water_loss f6d5 +water_lux f874 +water_medium f6d4 +water_orp f878 +water_ph f87a +water_pump f5d8 +water_voc f87b +waterfall_chart ea00 +waves e176 +waving_hand e766 +wb_auto e42c +wb_cloudy f15c +wb_incandescent e42e +wb_iridescent f07d +wb_shade ea01 +wb_sunny e430 +wb_twilight e1c6 +wc e63d +weather_hail f67f +weather_mix f60b +weather_snowy e2cd +web e051 +web_asset e069 +web_asset_off ef47 +web_stories e595 +web_traffic ea03 +webhook eb92 +weekend e16b +weight e13d +west f1e6 +whatshot e80e +wheelchair_pickup f1ab +where_to_vote e177 +widget_medium f3ba +widget_small f3b9 +widget_width f3b8 +widgets e1bd +width f730 +width_full f8f5 +width_normal f8f6 +width_wide f8f7 +wifi e63e +wifi_1_bar e4ca +wifi_2_bar e4d9 +wifi_add f7a8 +wifi_calling ef77 +wifi_calling_1 f0e7 +wifi_calling_2 f0f6 +wifi_calling_3 f0e7 +wifi_calling_bar_1 f44c +wifi_calling_bar_2 f44b +wifi_calling_bar_3 f44a +wifi_channel eb6a +wifi_find eb31 +wifi_home f671 +wifi_lock e1e1 +wifi_notification f670 +wifi_off e648 +wifi_password eb6b +wifi_protected_setup f0fc +wifi_proxy f7a7 +wifi_tethering e1e2 +wifi_tethering_error ead9 +wifi_tethering_off f087 +wind_power ec0c +window f088 +window_closed e77e +window_open e78c +window_sensor e2bb +windshield_defrost_front f32a +windshield_defrost_rear f329 +windshield_heat_front f328 +wine_bar f1e8 +woman e13e +woman_2 f8e7 +work e943 +work_alert f5f7 +work_history ec09 +work_off e942 +work_outline e943 +work_update f5f8 +workflow ea04 +workspace_premium e7af +workspaces ea0f +workspaces_outline ea0f +wounds_injuries e13f +wrap_text e25b +wrist f69c +wrong_location ef78 +wysiwyg f1c3 +yard f089 +your_trips eb2b +youtube_activity f85a +youtube_searched_for e8fa +zone_person_alert e781 +zone_person_idle e77a +zone_person_urgent e788 +zoom_in e8ff +zoom_in_map eb2d +zoom_out e900 +zoom_out_map e56b diff --git a/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf b/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf new file mode 100755 index 0000000..c443e78 Binary files /dev/null and b/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf differ diff --git a/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].woff2 b/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].woff2 new file mode 100755 index 0000000..7febd33 Binary files /dev/null and b/www/fonts/MaterialSymbolsRounded[FILL,GRAD,opsz,wght].woff2 differ diff --git a/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].codepoints b/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].codepoints new file mode 100755 index 0000000..5027a57 --- /dev/null +++ b/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].codepoints @@ -0,0 +1,3901 @@ +10k e951 +10mp e952 +11mp e953 +123 eb8d +12mp e954 +13mp e955 +14mp e956 +15mp e957 +16mp e958 +17mp e959 +18_up_rating f8fd +18mp e95a +19mp e95b +1k e95c +1k_plus e95d +1x_mobiledata efcd +1x_mobiledata_badge f7f1 +20mp e95e +21mp e95f +22mp e960 +23mp e961 +24fps_select f3f2 +24mp e962 +2d ef37 +2k e963 +2k_plus e964 +2mp e965 +30fps efce +30fps_select efcf +360 e577 +3d ed38 +3d_rotation e84d +3g_mobiledata efd0 +3g_mobiledata_badge f7f0 +3k e966 +3k_plus e967 +3mp e968 +3p efd1 +4g_mobiledata efd2 +4g_mobiledata_badge f7ef +4g_plus_mobiledata efd3 +4k e072 +4k_plus e969 +4mp e96a +50mp f6f3 +5g ef38 +5g_mobiledata_badge f7ee +5k e96b +5k_plus e96c +5mp e96d +60fps efd4 +60fps_select efd5 +6_ft_apart f21e +6k e96e +6k_plus e96f +6mp e970 +7k e971 +7k_plus e972 +7mp e973 +8k e974 +8k_plus e975 +8mp e976 +9k e977 +9k_plus e978 +9mp e979 +abc eb94 +ac_unit eb3b +access_alarm e855 +access_alarms e855 +access_time efd6 +access_time_filled efd6 +accessibility e84e +accessibility_new e92c +accessible e914 +accessible_forward e934 +accessible_menu f34e +account_balance e84f +account_balance_wallet e850 +account_box e851 +account_child e852 +account_child_invert e659 +account_circle f20b +account_circle_filled f20b +account_circle_off f7b3 +account_tree e97a +action_key f502 +activity_zone e1e6 +acute e4cb +ad e65a +ad_group e65b +ad_group_off eae5 +ad_off f7b2 +ad_units ef39 +adaptive_audio_mic f4cc +adaptive_audio_mic_off f4cb +adb e60e +add e145 +add_2 f3dd +add_a_photo e439 +add_ad e72a +add_alarm e856 +add_alert e003 +add_box e146 +add_business e729 +add_call f0b7 +add_card eb86 +add_chart ef3c +add_circle e3ba +add_circle_outline e3ba +add_column_left f425 +add_column_right f424 +add_comment e266 +add_diamond f49c +add_home f8eb +add_home_work f8ed +add_ic_call f0b7 +add_link e178 +add_location e567 +add_location_alt ef3a +add_moderator e97d +add_notes e091 +add_photo_alternate e43e +add_reaction e1d3 +add_road ef3b +add_row_above f423 +add_row_below f422 +add_shopping_cart e854 +add_task f23a +add_to_drive e65c +add_to_home_screen e1fe +add_to_photos e39d +add_to_queue e05c +add_triangle f48e +addchart ef3c +adf_scanner eada +adjust e39e +admin_meds e48d +admin_panel_settings ef3d +ads_click e762 +agender f888 +agriculture ea79 +air efd8 +air_freshener e2ca +air_purifier e97e +air_purifier_gen e829 +airline_seat_flat e630 +airline_seat_flat_angled e631 +airline_seat_individual_suite e632 +airline_seat_legroom_extra e633 +airline_seat_legroom_normal e634 +airline_seat_legroom_reduced e635 +airline_seat_recline_extra e636 +airline_seat_recline_normal e637 +airline_stops e7d0 +airlines e7ca +airplane_ticket efd9 +airplanemode_active e53d +airplanemode_inactive e194 +airplay e055 +airport_shuttle eb3c +airware f154 +airwave f154 +alarm e855 +alarm_add e856 +alarm_off e857 +alarm_on e858 +alarm_pause f35b +alarm_smart_wake f6b0 +album e019 +align_center e356 +align_end f797 +align_flex_center f796 +align_flex_end f795 +align_flex_start f794 +align_horizontal_center e00f +align_horizontal_left e00d +align_horizontal_right e010 +align_items_stretch f793 +align_justify_center f792 +align_justify_flex_end f791 +align_justify_flex_start f790 +align_justify_space_around f78f +align_justify_space_between f78e +align_justify_space_even f78d +align_justify_stretch f78c +align_self_stretch f78b +align_space_around f78a +align_space_between f789 +align_space_even f788 +align_start f787 +align_stretch f786 +align_vertical_bottom e015 +align_vertical_center e011 +align_vertical_top e00c +all_inbox e97f +all_inclusive eb3d +all_match e093 +all_out e90b +allergies e094 +allergy e64e +alt_route f184 +alternate_email e0e6 +altitude f873 +ambient_screen f6c4 +ambulance f803 +amend f802 +amp_stories ea13 +analytics ef3e +anchor f1cd +android e859 +animated_images f49a +animation e71c +announcement e87f +aod efda +aod_tablet f89f +aod_watch f6ac +apartment ea40 +api f1b7 +apk_document f88e +apk_install f88f +app_badging f72f +app_blocking ef3f +app_promo e981 +app_registration ef40 +app_settings_alt ef41 +app_shortcut eae4 +apparel ef7b +approval e982 +approval_delegation f84a +apps e5c3 +apps_outage e7cc +aq f55a +aq_indoor f55b +ar_on_you ef7c +ar_stickers e983 +architecture ea3b +archive e149 +area_chart e770 +arming_countdown e78a +arrow_and_edge f5d7 +arrow_back e5c4 +arrow_back_2 f43a +arrow_back_ios e5e0 +arrow_back_ios_new e2ea +arrow_circle_down f181 +arrow_circle_left eaa7 +arrow_circle_right eaaa +arrow_circle_up f182 +arrow_cool_down f4b6 +arrow_downward e5db +arrow_downward_alt e984 +arrow_drop_down e5c5 +arrow_drop_down_circle e5c6 +arrow_drop_up e5c7 +arrow_forward e5c8 +arrow_forward_ios e5e1 +arrow_insert f837 +arrow_left e5de +arrow_left_alt ef7d +arrow_menu_close f3d3 +arrow_menu_open f3d2 +arrow_or_edge f5d6 +arrow_outward f8ce +arrow_range f69b +arrow_right e5df +arrow_right_alt e941 +arrow_selector_tool f82f +arrow_split ea04 +arrow_top_left f72e +arrow_top_right f72d +arrow_upload_progress f3f4 +arrow_upload_ready f3f5 +arrow_upward e5d8 +arrow_upward_alt e986 +arrow_warm_up f4b5 +arrows_input f394 +arrows_more_down f8ab +arrows_more_up f8ac +arrows_output f393 +arrows_outward f72c +art_track e060 +article ef42 +article_person f368 +article_shortcut f587 +artist e01a +aspect_ratio e85b +assessment f0cc +assignment e85d +assignment_add f848 +assignment_ind e85e +assignment_late e85f +assignment_return e860 +assignment_returned e861 +assignment_turned_in e862 +assist_walker f8d5 +assistant e39f +assistant_device e987 +assistant_direction e988 +assistant_navigation e989 +assistant_on_hub f6c1 +assistant_photo f0c6 +assured_workload eb6f +asterisk f525 +astrophotography_auto f1d9 +astrophotography_off f1da +atm e573 +atr ebc7 +attach_email ea5e +attach_file e226 +attach_file_add f841 +attach_file_off f4d9 +attach_money e227 +attachment e2bc +attractions ea52 +attribution efdb +audio_description f58c +audio_file eb82 +audio_video_receiver f5d3 +audiotrack e405 +auto_activity_zone f8ad +auto_awesome e65f +auto_awesome_mosaic e660 +auto_awesome_motion e661 +auto_delete ea4c +auto_detect_voice f83e +auto_draw_solid e98a +auto_fix e663 +auto_fix_high e663 +auto_fix_normal e664 +auto_fix_off e665 +auto_graph e4fb +auto_label f6be +auto_meeting_room f6bf +auto_mode ec20 +auto_read_pause f219 +auto_read_play f216 +auto_schedule e214 +auto_stories e666 +auto_timer ef7f +auto_towing e71e +auto_transmission f53f +auto_videocam f6c0 +autofps_select efdc +automation f421 +autopause f6b6 +autopay f84b +autoplay f6b5 +autorenew e863 +autostop f682 +av1 f4b0 +av_timer e01b +avc f4af +avg_pace f6bb +avg_time f813 +award_star f612 +azm f6ec +baby_changing_station f19b +back_hand e764 +back_to_tab f72b +background_dot_large f79e +background_dot_small f514 +background_grid_small f79d +background_replace f20a +backlight_high f7ed +backlight_high_off f4ef +backlight_low f7ec +backpack f19c +backspace e14a +backup e864 +backup_table ef43 +badge ea67 +badge_critical_battery f156 +bakery_dining ea53 +balance eaf6 +balcony e58f +ballot e172 +bar_chart e26b +bar_chart_4_bars f681 +bar_chart_off f411 +barcode e70b +barcode_reader f85c +barcode_scanner e70c +barefoot f871 +batch_prediction f0f5 +bath_outdoor f6fb +bath_private f6fa +bath_public_large f6f9 +bathroom efdd +bathtub ea41 +battery_0_bar ebdc +battery_1_bar f09c +battery_20 f09c +battery_2_bar f09d +battery_30 f09d +battery_3_bar f09e +battery_4_bar f09f +battery_50 f09e +battery_5_bar f0a0 +battery_60 f09f +battery_6_bar f0a1 +battery_80 f0a0 +battery_90 f0a1 +battery_alert e19c +battery_android_0 f30d +battery_android_1 f30c +battery_android_2 f30b +battery_android_3 f30a +battery_android_4 f309 +battery_android_5 f308 +battery_android_6 f307 +battery_android_alert f306 +battery_android_bolt f305 +battery_android_full f304 +battery_android_plus f303 +battery_android_question f302 +battery_android_share f301 +battery_android_shield f300 +battery_change f7eb +battery_charging_20 f0a2 +battery_charging_30 f0a3 +battery_charging_50 f0a4 +battery_charging_60 f0a5 +battery_charging_80 f0a6 +battery_charging_90 f0a7 +battery_charging_full e1a3 +battery_error f7ea +battery_full e1a5 +battery_full_alt f13b +battery_horiz_000 f8ae +battery_horiz_050 f8af +battery_horiz_075 f8b0 +battery_low f155 +battery_plus f7e9 +battery_profile e206 +battery_saver efde +battery_share f67e +battery_status_good f67d +battery_std e1a5 +battery_unknown e1a6 +battery_vert_005 f8b1 +battery_vert_020 f8b2 +battery_vert_050 f8b3 +battery_very_low f156 +beach_access eb3e +bed efdf +bedroom_baby efe0 +bedroom_child efe1 +bedroom_parent efe2 +bedtime f159 +bedtime_off eb76 +beenhere e52d +bento f1f4 +bia f6eb +bid_landscape e678 +bid_landscape_disabled ef81 +bigtop_updates e669 +bike_dock f47b +bike_lane f47a +bike_scooter ef45 +biotech ea3a +blanket e828 +blender efe3 +blind f8d6 +blinds e286 +blinds_closed ec1f +block f08c +blood_pressure e097 +bloodtype efe4 +bluetooth e1a7 +bluetooth_audio e60f +bluetooth_connected e1a8 +bluetooth_disabled e1a9 +bluetooth_drive efe5 +bluetooth_searching e60f +blur_circular e3a2 +blur_linear e3a3 +blur_medium e84c +blur_off e3a4 +blur_on e3a5 +blur_short e8cf +boat_bus f36d +boat_railway f36c +body_fat e098 +body_system e099 +bolt ea0b +bomb f568 +book e86e +book_2 f53e +book_3 f53d +book_4 f53c +book_5 f53b +book_6 f3df +book_online f217 +book_ribbon f3e7 +bookmark e8e7 +bookmark_add e598 +bookmark_added e599 +bookmark_bag f410 +bookmark_border e8e7 +bookmark_check f457 +bookmark_flag f456 +bookmark_heart f455 +bookmark_manager f7b1 +bookmark_remove e59a +bookmark_star f454 +bookmarks e98b +books_movies_and_music ef82 +border_all e228 +border_bottom e229 +border_clear e22a +border_color e22b +border_horizontal e22c +border_inner e22d +border_left e22e +border_outer e22f +border_right e230 +border_style e231 +border_top e232 +border_vertical e233 +borg f40d +bottom_app_bar e730 +bottom_drawer e72d +bottom_navigation e98c +bottom_panel_close f72a +bottom_panel_open f729 +bottom_right_click f684 +bottom_sheets e98d +box f5a4 +box_add f5a5 +box_edit f5a6 +boy eb67 +brand_awareness e98e +brand_family f4f1 +branding_watermark e06b +breakfast_dining ea54 +breaking_news ea08 +breaking_news_alt_1 f0ba +breastfeeding f856 +brick f388 +brightness_1 e3fa +brightness_2 f036 +brightness_3 e3a8 +brightness_4 e3a9 +brightness_5 e3aa +brightness_6 e3ab +brightness_7 e3ac +brightness_alert f5cf +brightness_auto e1ab +brightness_empty f7e8 +brightness_high e1ac +brightness_low e1ad +brightness_medium e1ae +bring_your_own_ip e016 +broadcast_on_home f8f8 +broadcast_on_personal f8f9 +broken_image e3ad +browse eb13 +browse_activity f8a5 +browse_gallery ebd1 +browser_not_supported ef47 +browser_updated e7cf +brunch_dining ea73 +brush e3ae +bubble ef83 +bubble_chart e6dd +bubbles f64e +bug_report e868 +build f8cd +build_circle ef48 +bungalow e591 +burst_mode e43c +bus_alert e98f +bus_railway f36b +business e7ee +business_center eb3f +business_chip f84c +business_messages ef84 +buttons_alt e72f +cabin e589 +cable efe6 +cable_car f479 +cached e86a +cadence f4b4 +cake e7e9 +cake_add f85b +calculate ea5f +calendar_add_on ef85 +calendar_apps_script f0bb +calendar_clock f540 +calendar_month ebcc +calendar_today e935 +calendar_view_day e936 +calendar_view_month efe7 +calendar_view_week efe8 +call f0d4 +call_end f0bc +call_end_alt f0bc +call_log e08e +call_made e0b2 +call_merge e0b3 +call_missed e0b4 +call_missed_outgoing e0e4 +call_quality f652 +call_received e0b5 +call_split e0b6 +call_to_action e06c +camera e3af +camera_alt e412 +camera_enhance e8fc +camera_front e3b1 +camera_indoor efe9 +camera_outdoor efea +camera_rear e3b2 +camera_roll e3b3 +camera_video f7a6 +cameraswitch efeb +campaign ef49 +camping f8a2 +cancel e888 +cancel_presentation e0e9 +cancel_schedule_send ea39 +candle f588 +candlestick_chart ead4 +cannabis f2f3 +captive_portal f728 +capture f727 +car_crash ebf2 +car_defrost_left f344 +car_defrost_low_left f343 +car_defrost_low_right f342 +car_defrost_mid_low_left f341 +car_defrost_mid_right f340 +car_defrost_right f33f +car_fan_low_left f33e +car_fan_low_mid_left f33d +car_fan_low_right f33c +car_fan_mid_left f33b +car_fan_mid_low_right f33a +car_fan_mid_right f339 +car_fan_recirculate f338 +car_gear f337 +car_lock f336 +car_mirror_heat f335 +car_rental ea55 +car_repair ea56 +car_tag f4e3 +card_giftcard e8f6 +card_membership e8f7 +card_travel e8f8 +cardio_load f4b9 +cardiology e09c +cards e991 +cards_star f375 +carpenter f1f8 +carry_on_bag eb08 +carry_on_bag_checked eb0b +carry_on_bag_inactive eb0a +carry_on_bag_question eb09 +cases e992 +casino eb40 +cast e307 +cast_connected e308 +cast_for_education efec +cast_pause f5f0 +cast_warning f5ef +castle eab1 +category e574 +category_search f437 +celebration ea65 +cell_merge f82e +cell_tower ebba +cell_wifi e0ec +center_focus_strong e3b4 +center_focus_weak e3b5 +chair efed +chair_alt efee +chalet e585 +change_circle e2e7 +change_history e86b +charger e2ae +charging_station f19d +chart_data e473 +chat e0c9 +chat_add_on f0f3 +chat_apps_script f0bd +chat_bubble e0cb +chat_bubble_outline e0cb +chat_error f7ac +chat_info f52b +chat_paste_go f6bd +chat_paste_go_2 f3cb +check e5ca +check_box e834 +check_box_outline_blank e835 +check_circle f0be +check_circle_filled f0be +check_circle_outline f0be +check_in_out f6f6 +check_indeterminate_small f88a +check_small f88b +checkbook e70d +checked_bag eb0c +checked_bag_question eb0d +checklist e6b1 +checklist_rtl e6b3 +checkroom f19e +cheer f6a8 +chef_hat f357 +chess f5e7 +chess_pawn f3b6 +chevron_backward f46b +chevron_forward f46a +chevron_left e5cb +chevron_right e5cc +child_care eb41 +child_friendly eb42 +chip_extraction f821 +chips e993 +chrome_reader_mode e86d +chromecast_2 f17b +chromecast_device e83c +chronic ebb2 +church eaae +cinematic_blur f853 +circle ef4a +circle_notifications e994 +circles e7ea +circles_ext e7ec +clarify f0bf +class e86e +clean_hands f21f +cleaning e995 +cleaning_bucket f8b4 +cleaning_services f0ff +clear e5cd +clear_all e0b8 +clear_day f157 +clear_night f159 +climate_mini_split f8b5 +clinical_notes e09e +clock_arrow_down f382 +clock_arrow_up f381 +clock_loader_10 f726 +clock_loader_20 f725 +clock_loader_40 f724 +clock_loader_60 f723 +clock_loader_80 f722 +clock_loader_90 f721 +close e5cd +close_fullscreen f1cf +close_small f508 +closed_caption e996 +closed_caption_add f4ae +closed_caption_disabled f1dc +closed_caption_off e996 +cloud f15c +cloud_alert f3cc +cloud_circle e2be +cloud_done e2bf +cloud_download e2c0 +cloud_lock f386 +cloud_off e2c1 +cloud_queue f15c +cloud_sync eb5a +cloud_upload e2c3 +cloudy f15c +cloudy_filled f15c +cloudy_snowing e810 +co2 e7b0 +co_present eaf0 +code e86f +code_blocks f84d +code_off e4f3 +coffee efef +coffee_maker eff0 +cognition e09f +cognition_2 f3b5 +collapse_all e944 +collapse_content f507 +collections e3d3 +collections_bookmark e431 +color_lens e40a +colorize e3b8 +colors e997 +combine_columns f420 +comedy_mask f4d6 +comic_bubble f5dd +comment e24c +comment_bank ea4e +comments_disabled e7a2 +commit eaf5 +communication e27c +communities eb16 +communities_filled eb16 +commute e940 +compare e3b9 +compare_arrows e915 +compass_calibration e57c +component_exchange f1e7 +compost e761 +compress e94d +computer e31e +computer_arrow_up f2f7 +computer_cancel f2f6 +concierge f561 +conditions e0a0 +confirmation_number e638 +congenital e0a1 +connect_without_contact f223 +connected_tv e998 +connecting_airports e7c9 +construction ea3c +contact_emergency f8d1 +contact_mail e0d0 +contact_page f22e +contact_phone f0c0 +contact_phone_filled f0c0 +contact_support e94c +contactless ea71 +contactless_off f858 +contacts e0ba +contacts_product e999 +content_copy e14d +content_cut e14e +content_paste e14f +content_paste_go ea8e +content_paste_off e4f8 +content_paste_search ea9b +contextual_token f486 +contextual_token_add f485 +contract f5a0 +contract_delete f5a2 +contract_edit f5a1 +contrast eb37 +contrast_circle f49f +contrast_rtl_off ec72 +contrast_square f4a0 +control_camera e074 +control_point e3ba +control_point_duplicate e3bb +controller_gen e83d +conversion_path f0c1 +conversion_path_off f7b4 +convert_to_text f41f +conveyor_belt f867 +cookie eaac +cookie_off f79a +cooking e2b6 +cool_to_dry e276 +copy_all e2ec +copyright e90c +coronavirus f221 +corporate_fare f1d0 +cottage e587 +counter_0 f785 +counter_1 f784 +counter_2 f783 +counter_3 f782 +counter_4 f781 +counter_5 f780 +counter_6 f77f +counter_7 f77e +counter_8 f77d +counter_9 f77c +countertops f1f7 +create f097 +create_new_folder e2cc +credit_card e8a1 +credit_card_clock f438 +credit_card_gear f52d +credit_card_heart f52c +credit_card_off e4f4 +credit_score eff1 +crib e588 +crisis_alert ebe9 +crop e3be +crop_16_9 e3bc +crop_3_2 e3bd +crop_5_4 e3bf +crop_7_5 e3c0 +crop_9_16 f549 +crop_din e3c6 +crop_free e3c2 +crop_landscape e3c3 +crop_original e3f4 +crop_portrait e3c5 +crop_rotate e437 +crop_square e3c6 +crossword f5e5 +crowdsource eb18 +crown ecb3 +cruelty_free e799 +css eb93 +csv e6cf +currency_bitcoin ebc5 +currency_exchange eb70 +currency_franc eafa +currency_lira eaef +currency_pound eaf1 +currency_ruble eaec +currency_rupee eaf7 +currency_rupee_circle f460 +currency_yen eafb +currency_yuan eaf9 +curtains ec1e +curtains_closed ec1d +custom_typography e732 +cut f08b +cycle f854 +cyclone ebd5 +dangerous e99a +dark_mode e51c +dashboard e871 +dashboard_2 f3ea +dashboard_customize e99b +data_alert f7f6 +data_array ead1 +data_check f7f2 +data_exploration e76f +data_info_alert f7f5 +data_loss_prevention e2dc +data_object ead3 +data_saver_off eff2 +data_saver_on eff3 +data_table e99c +data_thresholding eb9f +data_usage eff2 +database f20e +database_off f414 +database_search f38e +database_upload f3dc +dataset f8ee +dataset_linked f8ef +date_range e916 +deblur eb77 +deceased e0a5 +decimal_decrease f82d +decimal_increase f82c +deck ea42 +dehaze e3c7 +delete e92e +delete_forever e92b +delete_history f518 +delete_outline e92e +delete_sweep e16c +delivery_dining eb28 +delivery_truck_bolt f3a2 +delivery_truck_speed f3a1 +demography e489 +density_large eba9 +density_medium eb9e +density_small eba8 +dentistry e0a6 +departure_board e576 +deployed_code f720 +deployed_code_account f51b +deployed_code_alert f5f2 +deployed_code_history f5f3 +deployed_code_update f5f4 +dermatology e0a7 +description e873 +deselect ebb6 +design_services f10a +desk f8f4 +deskphone f7fa +desktop_access_disabled e99d +desktop_cloud f3db +desktop_cloud_stack f3be +desktop_landscape f45e +desktop_landscape_add f439 +desktop_mac e30b +desktop_portrait f45d +desktop_windows e30c +destruction f585 +details e3c8 +detection_and_zone e29f +detector e282 +detector_alarm e1f7 +detector_battery e204 +detector_co e2af +detector_offline e223 +detector_smoke e285 +detector_status e1e8 +developer_board e30d +developer_board_off e4ff +developer_guide e99e +developer_mode e1b0 +developer_mode_tv e874 +device_band f2f5 +device_hub e335 +device_reset e8b3 +device_thermostat e1ff +device_unknown e339 +devices e326 +devices_fold ebde +devices_fold_2 f406 +devices_off f7a5 +devices_other e337 +devices_wearables f6ab +dew_point f879 +diagnosis e0a8 +diagonal_line f41e +dialer_sip e0bb +dialogs e99f +dialpad e0bc +diamond ead5 +dictionary f539 +difference eb7d +digital_out_of_home f1de +digital_wellbeing ef86 +dining eff4 +dinner_dining ea57 +directions e52e +directions_alt f880 +directions_alt_off f881 +directions_bike e52f +directions_boat eff5 +directions_boat_filled eff5 +directions_bus eff6 +directions_bus_filled eff6 +directions_car eff7 +directions_car_filled eff7 +directions_off f10f +directions_railway eff8 +directions_railway_2 f462 +directions_railway_filled eff8 +directions_run e566 +directions_subway effa +directions_subway_filled effa +directions_transit effa +directions_transit_filled effa +directions_walk e536 +directory_sync e394 +dirty_lens ef4b +disabled_by_default f230 +disabled_visible e76e +disc_full e610 +discover_tune e018 +dishwasher e9a0 +dishwasher_gen e832 +display_external_input f7e7 +display_settings eb97 +distance f6ea +diversity_1 f8d7 +diversity_2 f8d8 +diversity_3 f8d9 +diversity_4 f857 +dns e875 +do_disturb f08c +do_disturb_alt f08d +do_disturb_off f08e +do_disturb_on f08f +do_not_disturb f08d +do_not_disturb_alt f08c +do_not_disturb_off f08e +do_not_disturb_on f08f +do_not_disturb_on_total_silence effb +do_not_step f19f +do_not_touch f1b0 +dock e30e +dock_to_bottom f7e6 +dock_to_left f7e5 +dock_to_right f7e4 +docs ea7d +docs_add_on f0c2 +docs_apps_script f0c3 +document_scanner e5fa +document_search f385 +domain e7ee +domain_add eb62 +domain_disabled e0ef +domain_verification ef4c +domain_verification_off f7b0 +domino_mask f5e4 +done e876 +done_all e877 +done_outline e92f +donut_large e917 +donut_small e918 +door_back effc +door_front effd +door_open e77c +door_sensor e28a +door_sliding effe +doorbell efff +doorbell_3p e1e7 +doorbell_chime e1f3 +double_arrow ea50 +downhill_skiing e509 +download f090 +download_2 f523 +download_done f091 +download_for_offline f000 +downloading f001 +draft e66d +draft_orders e7b3 +drafts e151 +drag_click f71f +drag_handle e25d +drag_indicator e945 +drag_pan f71e +draw e746 +draw_abstract f7f8 +draw_collage f7f7 +drawing_recognition eb00 +dresser e210 +drive_eta eff7 +drive_export f41d +drive_file_move e9a1 +drive_file_move_outline e9a1 +drive_file_move_rtl e9a1 +drive_file_rename_outline e9a2 +drive_folder_upload e9a3 +drive_fusiontable e678 +dropdown e9a4 +dropper_eye f351 +dry f1b3 +dry_cleaning ea58 +dual_screen f6cf +duo e9a5 +dvr e1b2 +dynamic_feed ea14 +dynamic_form f1bf +e911_avatar f11a +e911_emergency f119 +e_mobiledata f002 +e_mobiledata_badge f7e3 +ear_sound f356 +earbud_case f327 +earbud_left f326 +earbud_right f325 +earbuds f003 +earbuds_2 f324 +earbuds_battery f004 +early_on e2ba +earthquake f64f +east f1df +ecg f80f +ecg_heart f6e9 +eco ea35 +eda f6e8 +edgesensor_high f005 +edgesensor_low f006 +edit f097 +edit_arrow_down f380 +edit_arrow_up f37f +edit_attributes e578 +edit_audio f42d +edit_calendar e742 +edit_document f88c +edit_location e568 +edit_location_alt e1c5 +edit_note e745 +edit_notifications e525 +edit_off e950 +edit_road ef4d +edit_square f88d +editor_choice f528 +egg eacc +egg_alt eac8 +eject e8fb +elderly f21a +elderly_woman eb69 +electric_bike eb1b +electric_bolt ec1c +electric_car eb1c +electric_meter ec1b +electric_moped eb1d +electric_rickshaw eb1e +electric_scooter eb1f +electrical_services f102 +elevation f6e7 +elevator f1a0 +email e159 +emergency e1eb +emergency_heat f15d +emergency_heat_2 f4e5 +emergency_home e82a +emergency_recording ebf4 +emergency_share ebf6 +emergency_share_off f59e +emoji_emotions ea22 +emoji_events ea23 +emoji_flags f0c6 +emoji_food_beverage ea1b +emoji_language f4cd +emoji_nature ea1c +emoji_objects ea24 +emoji_people ea1d +emoji_symbols ea1e +emoji_transportation ea1f +emoticon e5f3 +empty_dashboard f844 +enable f188 +encrypted e593 +encrypted_add f429 +encrypted_add_circle f42a +encrypted_minus_circle f428 +encrypted_off f427 +endocrinology e0a9 +energy e9a6 +energy_program_saving f15f +energy_program_time_used f161 +energy_savings_leaf ec1a +engineering ea3d +enhanced_encryption e63f +ent e0aa +enterprise e70e +enterprise_off eb4d +equal f77b +equalizer e01d +eraser_size_1 f3fc +eraser_size_2 f3fb +eraser_size_3 f3fa +eraser_size_4 f3f9 +eraser_size_5 f3f8 +error f8b6 +error_circle_rounded f8b6 +error_med e49b +error_outline f8b6 +escalator f1a1 +escalator_warning f1ac +euro ea15 +euro_symbol e926 +ev_charger e56d +ev_mobiledata_badge f7e2 +ev_shadow ef8f +ev_shadow_add f580 +ev_shadow_minus f57f +ev_station e56d +event e878 +event_available e614 +event_busy e615 +event_list f683 +event_note e616 +event_repeat eb7b +event_seat e903 +event_upcoming f238 +exclamation f22f +exercise f6e6 +exit_to_app e879 +expand e94f +expand_all e946 +expand_circle_down e7cd +expand_circle_right f591 +expand_circle_up f5d2 +expand_content f830 +expand_less e5ce +expand_more e5cf +expansion_panels ef90 +expension_panels ef90 +experiment e686 +explicit e01e +explore e87a +explore_nearby e538 +explore_off e9a8 +explosion f685 +export_notes e0ac +exposure e3f6 +exposure_neg_1 e3cb +exposure_neg_2 e3cc +exposure_plus_1 e800 +exposure_plus_2 e3ce +exposure_zero e3cf +extension e87b +extension_off e4f5 +eye_tracking f4c9 +eyeglasses f6ee +face f008 +face_2 f8da +face_3 f8db +face_4 f8dc +face_5 f8dd +face_6 f8de +face_down f402 +face_left f401 +face_nod f400 +face_retouching_natural ef4e +face_retouching_off f007 +face_right f3ff +face_shake f3fe +face_unlock f008 +face_up f3fd +fact_check f0c5 +factory ebbc +falling f60d +familiar_face_and_zone e21c +family_history e0ad +family_home eb26 +family_link eb19 +family_restroom f1a2 +family_star f527 +fan_focus f334 +fan_indirect f333 +farsight_digital f559 +fast_forward e01f +fast_rewind e020 +fastfood e57a +faucet e278 +favorite e87e +favorite_border e87e +fax ead8 +feature_search e9a9 +featured_play_list e06d +featured_seasonal_and_gifts ef91 +featured_video e06e +feed f009 +feedback e87f +female e590 +femur f891 +femur_alt f892 +fence f1f6 +fertile f6e5 +festival ea68 +fiber_dvr e05d +fiber_manual_record e061 +fiber_new e05e +fiber_pin e06a +fiber_smart_record e062 +file_copy e173 +file_copy_off f4d8 +file_download f090 +file_download_done f091 +file_download_off e4fe +file_export f3b2 +file_json f3bb +file_map e2c5 +file_map_stack f3e2 +file_open eaf3 +file_png f3bc +file_present ea0e +file_save f17f +file_save_off e505 +file_upload f09b +file_upload_off f886 +files ea85 +filter e3d3 +filter_1 e3d0 +filter_2 e3d1 +filter_3 e3d2 +filter_4 e3d4 +filter_5 e3d5 +filter_6 e3d6 +filter_7 e3d7 +filter_8 e3d8 +filter_9 e3d9 +filter_9_plus e3da +filter_alt ef4f +filter_alt_off eb32 +filter_arrow_right f3d1 +filter_b_and_w e3db +filter_center_focus e3dc +filter_drama e3dd +filter_frames e3de +filter_hdr e3df +filter_list e152 +filter_list_alt e94e +filter_list_off eb57 +filter_none e3e0 +filter_retrolux e3e1 +filter_tilt_shift e3e2 +filter_vintage e3e3 +finance e6bf +finance_chip f84e +finance_mode ef92 +find_in_page e880 +find_replace e881 +fingerprint e90d +fingerprint_off f49d +fire_extinguisher f1d8 +fire_hydrant f1a3 +fire_truck f8f2 +fireplace ea43 +first_page e5dc +fit_page f77a +fit_page_height f397 +fit_page_width f396 +fit_screen ea10 +fit_width f779 +fitness_center eb43 +fitness_tracker f463 +flag f0c6 +flag_2 f40f +flag_check f3d8 +flag_circle eaf8 +flag_filled f0c6 +flaky ef50 +flare e3e4 +flash_auto e3e5 +flash_off e3e6 +flash_on e3e7 +flashlight_off f00a +flashlight_on f00b +flatware f00c +flex_direction f778 +flex_no_wrap f777 +flex_wrap f776 +flight e539 +flight_class e7cb +flight_land e904 +flight_takeoff e905 +flights_and_hotels e9ab +flightsmode ef93 +flip e3e8 +flip_camera_android ea37 +flip_camera_ios ea38 +flip_to_back e882 +flip_to_front e883 +float_landscape_2 f45c +float_portrait_2 f45b +flood ebe6 +floor f6e4 +floor_lamp e21e +flourescent f07d +flowchart f38d +flowsheet e0ae +fluid e483 +fluid_balance f80d +fluid_med f80c +fluorescent f07d +flutter f1dd +flutter_dash e00b +flyover f478 +fmd_bad f00e +fmd_good f1db +foggy e818 +folded_hands f5ed +folder e2c7 +folder_check f3d7 +folder_check_2 f3d6 +folder_code f3c8 +folder_copy ebbd +folder_data f586 +folder_delete eb34 +folder_eye f3d5 +folder_info f395 +folder_limited f4e4 +folder_managed f775 +folder_match f3d4 +folder_off eb83 +folder_open e2c8 +folder_shared e2c9 +folder_special e617 +folder_supervised f774 +folder_zip eb2c +follow_the_signs f222 +font_download e167 +font_download_off e4f9 +food_bank f1f2 +foot_bones f893 +footprint f87d +for_you e9ac +forest ea99 +fork_left eba0 +fork_right ebac +fork_spoon f3e4 +forklift f868 +format_align_center e234 +format_align_justify e235 +format_align_left e236 +format_align_right e237 +format_bold e238 +format_clear e239 +format_color_fill e23a +format_color_reset e23b +format_color_text e23c +format_h1 f85d +format_h2 f85e +format_h3 f85f +format_h4 f860 +format_h5 f861 +format_h6 f862 +format_image_left f863 +format_image_right f864 +format_indent_decrease e23d +format_indent_increase e23e +format_ink_highlighter f82b +format_italic e23f +format_letter_spacing f773 +format_letter_spacing_2 f618 +format_letter_spacing_standard f617 +format_letter_spacing_wide f616 +format_letter_spacing_wider f615 +format_line_spacing e240 +format_list_bulleted e241 +format_list_bulleted_add f849 +format_list_numbered e242 +format_list_numbered_rtl e267 +format_overline eb65 +format_paint e243 +format_paragraph f865 +format_quote e244 +format_quote_off f413 +format_shapes e25e +format_size e245 +format_strikethrough e246 +format_text_clip f82a +format_text_overflow f829 +format_text_wrap f828 +format_textdirection_l_to_r e247 +format_textdirection_r_to_l e248 +format_textdirection_vertical f4b8 +format_underlined e249 +format_underlined_squiggle f885 +forms_add_on f0c7 +forms_apps_script f0c8 +fort eaad +forum e8af +forward f57a +forward_10 e056 +forward_30 e057 +forward_5 e058 +forward_circle f6f5 +forward_media f6f4 +forward_to_inbox f187 +foundation f200 +fragrance f345 +frame_inspect f772 +frame_person f8a6 +frame_person_mic f4d5 +frame_person_off f7d1 +frame_reload f771 +frame_source f770 +free_breakfast eb44 +free_cancellation e748 +front_hand e769 +front_loader f869 +full_coverage eb12 +full_hd f58b +full_stacked_bar_chart f212 +fullscreen e5d0 +fullscreen_exit e5d1 +fullscreen_portrait f45a +function f866 +functions e24a +funicular f477 +g_mobiledata f010 +g_mobiledata_badge f7e1 +g_translate e927 +gallery_thumbnail f86f +gamepad e30f +games e30f +garage f011 +garage_door e714 +garage_home e82d +garden_cart f8a9 +gas_meter ec19 +gastroenterology e0f1 +gate e277 +gavel e90e +general_device e6de +generating_tokens e749 +genetics e0f3 +genres e6ee +gesture e155 +gesture_select f657 +get_app f090 +gif e908 +gif_2 f40e +gif_box e7a3 +girl eb68 +gite e58b +glass_cup f6e3 +globe e64c +globe_asia f799 +globe_book f3c9 +globe_location_pin f35d +globe_uk f798 +glucose e4a0 +glyphs f8a3 +go_to_line f71d +golf_course eb45 +gondola_lift f476 +google_home_devices e715 +google_plus_reshare f57a +google_tv_remote f5db +google_wifi f579 +gpp_bad f012 +gpp_good f013 +gpp_maybe f014 +gps_fixed e55c +gps_not_fixed e1b7 +gps_off e1b6 +grade f09a +gradient e3e9 +grading ea4f +grain e3ea +graph_1 f3a0 +graph_2 f39f +graph_3 f39e +graph_4 f39d +graph_5 f39c +graph_6 f39b +graph_7 f346 +graphic_eq e1b8 +grass f205 +grid_3x3 f015 +grid_3x3_off f67c +grid_4x4 f016 +grid_goldenratio f017 +grid_guides f76f +grid_off e3eb +grid_on e3ec +grid_view e9b0 +grocery ef97 +group ea21 +group_add e7f0 +group_off e747 +group_remove e7ad +group_search f3ce +group_work e886 +grouped_bar_chart f211 +groups f233 +groups_2 f8df +groups_3 f8e0 +guardian f4c1 +gynecology e0f4 +h_mobiledata f018 +h_mobiledata_badge f7e0 +h_plus_mobiledata f019 +h_plus_mobiledata_badge f7df +hail e9b1 +hallway e6f8 +hand_bones f894 +hand_gesture ef9c +hand_gesture_off f3f3 +handheld_controller f4c6 +handshake ebcb +handwriting_recognition eb02 +handyman f10b +hangout_video e0c1 +hangout_video_off e0c2 +hard_disk f3da +hard_drive f80e +hard_drive_2 f7a4 +hardware ea59 +hd e052 +hdr_auto f01a +hdr_auto_select f01b +hdr_enhanced_select ef51 +hdr_off e3ed +hdr_off_select f01c +hdr_on e3ee +hdr_on_select f01d +hdr_plus f01e +hdr_plus_off e3ef +hdr_strong e3f1 +hdr_weak e3f2 +head_mounted_device f4c5 +headphones f01f +headphones_battery f020 +headset f01f +headset_mic e311 +headset_off e33a +healing e3f3 +health_and_beauty ef9d +health_and_safety e1d5 +health_metrics f6e2 +heap_snapshot_large f76e +heap_snapshot_multiple f76d +heap_snapshot_thumbnail f76c +hearing e023 +hearing_aid f464 +hearing_aid_disabled f3b0 +hearing_disabled f104 +heart_broken eac2 +heart_check f60a +heart_minus f883 +heart_plus f884 +heat f537 +heat_pump ec18 +heat_pump_balance e27e +height ea16 +helicopter f60c +help e8fd +help_center f1c0 +help_clinic f810 +help_outline e8fd +hematology e0f6 +hevc f021 +hexagon eb39 +hide ef9e +hide_image f022 +hide_source f023 +high_density f79c +high_quality e024 +high_res f54b +highlight e25f +highlight_alt ef52 +highlight_keyboard_focus f510 +highlight_mouse_cursor f511 +highlight_off e888 +highlight_text_cursor f512 +highlighter_size_1 f76b +highlighter_size_2 f76a +highlighter_size_3 f769 +highlighter_size_4 f768 +highlighter_size_5 f767 +hiking e50a +history e8b3 +history_2 f3e6 +history_edu ea3e +history_off f4da +history_toggle_off f17d +hive eaa6 +hls eb8a +hls_off eb8c +holiday_village e58a +home e9b2 +home_and_garden ef9f +home_app_logo e295 +home_filled e9b2 +home_health e4b9 +home_improvement_and_tools efa0 +home_iot_device e283 +home_max f024 +home_max_dots e849 +home_mini f025 +home_pin f14d +home_repair_service f100 +home_speaker f11c +home_storage f86c +home_work f030 +horizontal_distribute e014 +horizontal_rule f108 +horizontal_split e947 +host f3d9 +hot_tub eb46 +hotel e549 +hotel_class e743 +hourglass ebff +hourglass_arrow_down f37e +hourglass_arrow_up f37d +hourglass_bottom ea5c +hourglass_disabled ef53 +hourglass_empty e88b +hourglass_full e88c +hourglass_pause f38c +hourglass_top ea5b +house ea44 +house_siding f202 +house_with_shield e786 +houseboat e584 +household_supplies efa1 +hov f475 +how_to_reg e174 +how_to_vote e175 +hr_resting f6ba +html eb7e +http e902 +https e899 +hub e9f4 +humerus f895 +humerus_alt f896 +humidity_high f163 +humidity_indoor f558 +humidity_low f164 +humidity_mid f165 +humidity_percentage f87e +hvac f10e +hvac_max_defrost f332 +ice_skating e50b +icecream ea69 +id_card f4ca +identity_aware_proxy e2dd +identity_platform ebb7 +ifl e025 +iframe f71b +iframe_off f71c +image e3f4 +image_arrow_up f317 +image_aspect_ratio e3f5 +image_not_supported f116 +image_search e43f +imagesearch_roller e9b4 +imagesmode efa2 +immunology e0fb +import_contacts e0e0 +import_export e8d5 +important_devices e912 +in_home_mode e833 +inactive_order e0fc +inbox e156 +inbox_customize f859 +inbox_text f399 +inbox_text_asterisk f360 +inbox_text_person f35e +inbox_text_share f35c +incomplete_circle e79b +indeterminate_check_box e909 +indeterminate_question_box f56d +info e88e +info_i f59b +infrared f87c +ink_eraser e6d0 +ink_eraser_off e7e3 +ink_highlighter e6d1 +ink_highlighter_move f524 +ink_marker e6d2 +ink_pen e6d3 +ink_selection ef52 +inpatient e0fe +input e890 +input_circle f71a +insert_chart f0cc +insert_chart_filled f0cc +insert_chart_outlined f0cc +insert_comment e24c +insert_drive_file e66d +insert_emoticon ea22 +insert_invitation e878 +insert_link e250 +insert_page_break eaca +insert_photo e3f4 +insert_text f827 +insights f092 +install_desktop eb71 +install_mobile eb72 +instant_mix e026 +integration_instructions ef54 +interactive_space f7ff +interests e7c8 +interpreter_mode e83b +inventory e179 +inventory_2 e1a1 +invert_colors e891 +invert_colors_off e0c4 +ios e027 +ios_share e6b8 +iron e583 +iso e3f6 +jamboard_kiosk e9b5 +javascript eb7c +join f84f +join_full f84f +join_inner eaf4 +join_left eaf2 +join_right eaea +joystick f5ee +jump_to_element f719 +kayaking e50c +kebab_dining e842 +keep f026 +keep_off e6f9 +keep_pin f026 +keep_public f56f +kettle e2b9 +key e73c +key_off eb84 +key_vertical f51a +key_visualizer f199 +keyboard e312 +keyboard_alt f028 +keyboard_arrow_down e313 +keyboard_arrow_left e314 +keyboard_arrow_right e315 +keyboard_arrow_up e316 +keyboard_backspace e317 +keyboard_capslock e318 +keyboard_capslock_badge f7de +keyboard_command_key eae7 +keyboard_control_key eae6 +keyboard_double_arrow_down ead0 +keyboard_double_arrow_left eac3 +keyboard_double_arrow_right eac9 +keyboard_double_arrow_up eacf +keyboard_external_input f7dd +keyboard_full f7dc +keyboard_hide e31a +keyboard_keys f67b +keyboard_lock f492 +keyboard_lock_off f491 +keyboard_off f67a +keyboard_onscreen f7db +keyboard_option_key eae8 +keyboard_previous_language f7da +keyboard_return e31b +keyboard_tab e31c +keyboard_tab_rtl ec73 +keyboard_voice e31d +kid_star f526 +king_bed ea45 +kitchen eb47 +kitesurfing e50d +lab_panel e103 +lab_profile e104 +lab_research f80b +label e893 +label_important e948 +label_important_outline e948 +label_off e9b6 +label_outline e893 +labs e105 +lan eb2f +landscape e564 +landscape_2 f4c4 +landscape_2_edit f310 +landscape_2_off f4c3 +landslide ebd7 +language e894 +language_chinese_array f766 +language_chinese_cangjie f765 +language_chinese_dayi f764 +language_chinese_pinyin f763 +language_chinese_quick f762 +language_chinese_wubi f761 +language_french f760 +language_gb_english f75f +language_international f75e +language_japanese_kana f513 +language_korean_latin f75d +language_pinyin f75c +language_spanish f5e9 +language_us f759 +language_us_colemak f75b +language_us_dvorak f75a +laps f6b9 +laptop e31e +laptop_car f3cd +laptop_chromebook e31f +laptop_mac e320 +laptop_windows e321 +lasso_select eb03 +last_page e5dd +launch e89e +laundry e2a8 +layers e53b +layers_clear e53c +lda e106 +leaderboard f20c +leak_add e3f8 +leak_remove e3f9 +left_click f718 +left_panel_close f717 +left_panel_open f716 +legend_toggle f11b +lens e3fa +lens_blur f029 +letter_switch f758 +library_add e03c +library_add_check e9b7 +library_books e02f +library_music e030 +license eb04 +lift_to_talk efa3 +light f02a +light_group e28b +light_mode e518 +light_off e9b8 +lightbulb e90f +lightbulb_2 f3e3 +lightbulb_circle ebfe +lightbulb_outline e90f +lightning_stand efa4 +line_axis ea9a +line_curve f757 +line_end f826 +line_end_arrow f81d +line_end_arrow_notch f81c +line_end_circle f81b +line_end_diamond f81a +line_end_square f819 +line_start f825 +line_start_arrow f818 +line_start_arrow_notch f817 +line_start_circle f816 +line_start_diamond f815 +line_start_square f814 +line_style e919 +line_weight e91a +linear_scale e260 +link e250 +link_off e16f +linked_camera e438 +linked_services f535 +liquor ea60 +list e896 +list_alt e0ee +list_alt_add f756 +list_alt_check f3de +lists e9b9 +live_help e0c6 +live_tv e63a +living f02b +local_activity e553 +local_airport e53d +local_atm e53e +local_bar e540 +local_cafe eb44 +local_car_wash e542 +local_convenience_store e543 +local_dining e561 +local_drink e544 +local_fire_department ef55 +local_florist e545 +local_gas_station e546 +local_grocery_store e8cc +local_hospital e548 +local_hotel e549 +local_laundry_service e54a +local_library e54b +local_mall e54c +local_movies e8da +local_offer f05b +local_parking e54f +local_pharmacy e550 +local_phone f0d4 +local_pizza e552 +local_play e553 +local_police ef56 +local_post_office e554 +local_printshop e8ad +local_see e557 +local_shipping e558 +local_taxi e559 +location_automation f14f +location_away f150 +location_chip f850 +location_city e7f1 +location_disabled e1b6 +location_home f152 +location_off e0c7 +location_on f1db +location_pin f1db +location_searching e1b7 +locator_tag f8c1 +lock e899 +lock_clock ef57 +lock_open e898 +lock_open_circle f361 +lock_open_right f656 +lock_outline e899 +lock_person f8f3 +lock_reset eade +login ea77 +logo_dev ead6 +logout e9ba +looks e3fc +looks_3 e3fb +looks_4 e3fd +looks_5 e3fe +looks_6 e3ff +looks_one e400 +looks_two e401 +loop e863 +loupe e402 +low_density f79b +low_priority e16d +lowercase f48a +loyalty e89a +lte_mobiledata f02c +lte_mobiledata_badge f7d9 +lte_plus_mobiledata f02d +lte_plus_mobiledata_badge f7d8 +luggage f235 +lunch_dining ea61 +lyrics ec0b +macro_auto f6f2 +macro_off f8d2 +magic_button f136 +magic_exchange f7f4 +magic_tether f7d7 +magnification_large f83d +magnification_small f83c +magnify_docked f7d6 +magnify_fullscreen f7d5 +mail e159 +mail_lock ec0a +mail_off f48b +mail_outline e159 +male e58e +man e4eb +man_2 f8e1 +man_3 f8e2 +man_4 f8e3 +manage_accounts f02e +manage_history ebe7 +manage_search f02f +manga f5e3 +manufacturing e726 +map e55b +map_search f3ca +maps_home_work f030 +maps_ugc ef58 +margin e9bb +mark_as_unread e9bc +mark_chat_read f18b +mark_chat_unread f189 +mark_email_read f18c +mark_email_unread f18a +mark_unread_chat_alt eb9d +markdown f552 +markdown_copy f553 +markdown_paste f554 +markunread e159 +markunread_mailbox e89b +masked_transitions e72e +masked_transitions_add f42b +masks f218 +match_case f6f1 +match_case_off f36f +match_word f6f0 +matter e907 +maximize e930 +measuring_tape f6af +media_bluetooth_off f031 +media_bluetooth_on f032 +media_link f83f +media_output f4f2 +media_output_off f4f3 +mediation efa7 +medical_information ebed +medical_mask f80a +medical_services f109 +medication f033 +medication_liquid ea87 +meeting_room eb4f +memory e322 +memory_alt f7a3 +menstrual_health f6e1 +menu e5d2 +menu_book ea19 +menu_open e9bd +merge eb98 +merge_type e252 +message e0c9 +metabolism e10b +metro f474 +mfg_nest_yale_lock f11d +mic e31d +mic_alert f392 +mic_double f5d1 +mic_external_off ef59 +mic_external_on ef5a +mic_none e31d +mic_off e02b +microbiology e10c +microwave f204 +microwave_gen e847 +military_tech ea3f +mimo e9be +mimo_disconnect e9bf +mindfulness f6e0 +minimize e931 +minor_crash ebf1 +mintmark efa9 +missed_video_call f0ce +missed_video_call_filled f0ce +missing_controller e701 +mist e188 +mitre f547 +mixture_med e4c8 +mms e618 +mobile_friendly e200 +mobile_hand f323 +mobile_hand_left f313 +mobile_hand_left_off f312 +mobile_hand_off f314 +mobile_loupe f322 +mobile_off e201 +mobile_screen_share e0e7 +mobile_screensaver f321 +mobile_sound_2 f318 +mobile_speaker f320 +mobiledata_off f034 +mode f097 +mode_comment e253 +mode_cool f166 +mode_cool_off f167 +mode_dual f557 +mode_edit f097 +mode_edit_outline f097 +mode_fan f168 +mode_fan_off ec17 +mode_heat f16a +mode_heat_cool f16b +mode_heat_off f16d +mode_night f036 +mode_of_travel e7ce +mode_off_on f16f +mode_standby f037 +model_training f0cf +modeling f3aa +monetization_on e263 +money e57d +money_bag f3ee +money_off f038 +money_off_csred f038 +monitor ef5b +monitor_heart eaa2 +monitor_weight f039 +monitor_weight_gain f6df +monitor_weight_loss f6de +monitoring f190 +monochrome_photos e403 +monorail f473 +mood ea22 +mood_bad e7f3 +moon_stars f34f +mop e28d +moped eb28 +more e619 +more_down f196 +more_horiz e5d3 +more_time ea5d +more_up f197 +more_vert e5d4 +mosque eab2 +motion_blur f0d0 +motion_mode f842 +motion_photos_auto f03a +motion_photos_off e9c0 +motion_photos_on e9c1 +motion_photos_pause f227 +motion_photos_paused f227 +motion_play f40b +motion_sensor_active e792 +motion_sensor_alert e784 +motion_sensor_idle e783 +motion_sensor_urgent e78e +motorcycle e91b +mountain_flag f5e2 +mouse e323 +mouse_lock f490 +mouse_lock_off f48f +move e740 +move_down eb61 +move_group f715 +move_item f1ff +move_location e741 +move_selection_down f714 +move_selection_left f713 +move_selection_right f712 +move_selection_up f711 +move_to_inbox e168 +move_up eb64 +moved_location e594 +movie e404 +movie_creation e404 +movie_edit f840 +movie_filter e43a +movie_info e02d +movie_off f499 +moving e501 +moving_beds e73d +moving_ministry e73e +mp e9c3 +multicooker e293 +multiline_chart e6df +multimodal_hand_eye f41b +multiple_airports efab +multiple_stop f1b9 +museum ea36 +music_cast eb1a +music_note e405 +music_note_add f391 +music_off e440 +music_video e063 +my_location e55c +mystery f5e1 +nat ef5c +nature e406 +nature_people e407 +navigate_before e5cb +navigate_next e5cc +navigation e55d +near_me e569 +near_me_disabled f1ef +nearby e6b7 +nearby_error f03b +nearby_off f03c +nephrology e10d +nest_audio ebbf +nest_cam_floodlight f8b7 +nest_cam_indoor f11e +nest_cam_iq f11f +nest_cam_iq_outdoor f120 +nest_cam_magnet_mount f8b8 +nest_cam_outdoor f121 +nest_cam_stand f8b9 +nest_cam_wall_mount f8ba +nest_cam_wired_stand ec16 +nest_clock_farsight_analog f8bb +nest_clock_farsight_digital f8bc +nest_connect f122 +nest_detect f123 +nest_display f124 +nest_display_max f125 +nest_doorbell_visitor f8bd +nest_eco_leaf f8be +nest_farsight_weather f8bf +nest_found_savings f8c0 +nest_gale_wifi f579 +nest_heat_link_e f126 +nest_heat_link_gen_3 f127 +nest_hello_doorbell e82c +nest_locator_tag f8c1 +nest_mini e789 +nest_multi_room f8c2 +nest_protect e68e +nest_remote f5db +nest_remote_comfort_sensor f12a +nest_secure_alarm f12b +nest_sunblock f8c3 +nest_tag f8c1 +nest_thermostat e68f +nest_thermostat_e_eu f12d +nest_thermostat_gen_3 f12e +nest_thermostat_sensor f12f +nest_thermostat_sensor_eu f130 +nest_thermostat_zirconium_eu f131 +nest_true_radiant f8c4 +nest_wake_on_approach f8c5 +nest_wake_on_press f8c6 +nest_wifi_gale f132 +nest_wifi_mistral f133 +nest_wifi_point f134 +nest_wifi_point_vento f134 +nest_wifi_pro f56b +nest_wifi_pro_2 f56a +nest_wifi_router f133 +network_cell e1b9 +network_check e640 +network_intel_node f371 +network_intelligence efac +network_intelligence_history f5f6 +network_intelligence_update f5f5 +network_locked e61a +network_manage f7ab +network_node f56e +network_ping ebca +network_wifi e1ba +network_wifi_1_bar ebe4 +network_wifi_1_bar_locked f58f +network_wifi_2_bar ebd6 +network_wifi_2_bar_locked f58e +network_wifi_3_bar ebe1 +network_wifi_3_bar_locked f58d +network_wifi_locked f532 +neurology e10e +new_label e609 +new_releases ef76 +new_window f710 +news e032 +newsmode efad +newspaper eb81 +newsstand e9c4 +next_plan ef5d +next_week e16a +nfc e1bb +nfc_off f369 +night_shelter f1f1 +night_sight_auto f1d7 +night_sight_auto_off f1f9 +night_sight_max f6c3 +nightlife ea62 +nightlight f03d +nightlight_round f03d +nights_stay ea46 +no_accounts f03e +no_adult_content f8fe +no_backpack f237 +no_crash ebf0 +no_drinks f1a5 +no_encryption f03f +no_encryption_gmailerrorred f03f +no_flash f1a6 +no_food f1a7 +no_luggage f23b +no_meals f1d6 +no_meeting_room eb4e +no_photography f1a8 +no_sim e1ce +no_sound e710 +no_stroller f1af +no_transfer f1d5 +noise_aware ebec +noise_control_off ebf3 +noise_control_on f8a8 +nordic_walking e50e +north f1e0 +north_east f1e1 +north_west f1e2 +not_accessible f0fe +not_accessible_forward f54a +not_interested f08c +not_listed_location e575 +not_started f0d1 +note e66d +note_add e89c +note_alt f040 +note_stack f562 +note_stack_add f563 +notes e26c +notification_add e399 +notification_important e004 +notification_multiple e6c2 +notification_settings f367 +notification_sound f353 +notifications e7f5 +notifications_active e7f7 +notifications_none e7f5 +notifications_off e7f6 +notifications_paused e7f8 +notifications_unread f4fe +numbers eac7 +nutrition e110 +ods e6e8 +odt e6e9 +offline_bolt e932 +offline_pin e90a +offline_pin_off f4d0 +offline_share e9c5 +oil_barrel ec15 +on_device_training ebfd +on_hub_device e6c3 +oncology e114 +ondemand_video e63a +online_prediction f0eb +onsen f6f8 +opacity e91c +open_in_browser e89d +open_in_full f1ce +open_in_new e89e +open_in_new_down f70f +open_in_new_off e4f6 +open_in_phone e702 +open_jam efae +open_run f4b7 +open_with e89f +ophthalmology e115 +oral_disease e116 +orbit f426 +order_approve f812 +order_play f811 +orders eb14 +orthopedics f897 +other_admission e47b +other_houses e58c +outbound e1ca +outbox ef5f +outbox_alt eb17 +outdoor_garden e205 +outdoor_grill ea47 +outgoing_mail f0d2 +outlet f1d4 +outlined_flag f0c6 +outpatient e118 +outpatient_med e119 +output ebbe +output_circle f70e +oven e9c7 +oven_gen e843 +overview e4a7 +overview_key f7d4 +owl f3b4 +oxygen_saturation e4de +p2p f52a +pace f6b8 +pacemaker e656 +package e48f +package_2 f569 +padding e9c8 +page_control e731 +page_footer f383 +page_header f384 +page_info f614 +pageless f509 +pages e7f9 +pageview e8a0 +paid f041 +palette e40a +pallet f86a +pan_tool e925 +pan_tool_alt ebb9 +pan_zoom f655 +panorama e40b +panorama_fish_eye e40c +panorama_horizontal e40d +panorama_photosphere e9c9 +panorama_vertical e40e +panorama_wide_angle e40f +paragliding e50f +park ea63 +partly_cloudy_day f172 +partly_cloudy_night f174 +partner_exchange f7f9 +partner_reports efaf +party_mode e7fa +passkey f87f +password f042 +password_2 f4a9 +password_2_off f4a8 +patient_list e653 +pattern f043 +pause e034 +pause_circle e1a2 +pause_circle_filled e1a2 +pause_circle_outline e1a2 +pause_presentation e0ea +payment e8a1 +payments ef63 +pedal_bike eb29 +pediatrics e11d +pen_size_1 f755 +pen_size_2 f754 +pen_size_3 f753 +pen_size_4 f752 +pen_size_5 f751 +pending ef64 +pending_actions f1bb +pentagon eb50 +people ea21 +people_alt ea21 +people_outline ea21 +percent eb58 +performance_max e51a +pergola e203 +perm_camera_mic e8a2 +perm_contact_calendar e8a3 +perm_data_setting e8a4 +perm_device_information e8a5 +perm_identity f0d3 +perm_media e8a7 +perm_phone_msg e8a8 +perm_scan_wifi e8a9 +person f0d3 +person_2 f8e4 +person_3 f8e5 +person_4 f8e6 +person_add ea4d +person_add_alt ea4d +person_add_disabled e9cb +person_alert f567 +person_apron f5a3 +person_book f5e8 +person_cancel f566 +person_celebrate f7fe +person_check f565 +person_edit f4fa +person_filled f0d3 +person_off e510 +person_outline f0d3 +person_pin e55a +person_pin_circle e56a +person_play f7fd +person_raised_hand f59a +person_remove ef66 +person_search f106 +person_shield e384 +personal_bag eb0e +personal_bag_off eb0f +personal_bag_question eb10 +personal_injury e6da +personal_places e703 +personal_video e63b +pest_control f0fa +pest_control_rodent f0fd +pet_supplies efb1 +pets e91d +phishing ead7 +phone f0d4 +phone_alt f0d4 +phone_android e324 +phone_bluetooth_speaker e61b +phone_callback e649 +phone_disabled e9cc +phone_enabled e9cd +phone_forwarded e61c +phone_in_talk e61d +phone_iphone e325 +phone_locked e61e +phone_missed e61f +phone_paused e620 +phonelink e326 +phonelink_erase e0db +phonelink_lock e0dc +phonelink_off e327 +phonelink_ring e0dd +phonelink_ring_off f7aa +phonelink_setup ef41 +photo e432 +photo_album e411 +photo_auto_merge f530 +photo_camera e412 +photo_camera_back ef68 +photo_camera_front ef69 +photo_filter e43b +photo_frame f0d9 +photo_library e413 +photo_prints efb2 +photo_size_select_actual e432 +photo_size_select_large e433 +photo_size_select_small e434 +php eb8f +physical_therapy e11e +piano e521 +piano_off e520 +picture_as_pdf e415 +picture_in_picture e8aa +picture_in_picture_alt e911 +picture_in_picture_center f550 +picture_in_picture_large f54f +picture_in_picture_medium f54e +picture_in_picture_mobile f517 +picture_in_picture_off f52f +picture_in_picture_small f54d +pie_chart f0da +pie_chart_filled f0da +pie_chart_outline f0da +pie_chart_outlined f0da +pill e11f +pill_off f809 +pin f045 +pin_drop e55e +pin_end e767 +pin_invoke e763 +pinboard f3ab +pinboard_unread f3ac +pinch eb38 +pinch_zoom_in f1fa +pinch_zoom_out f1fb +pip f64d +pip_exit f70d +pivot_table_chart e9ce +place f1db +place_item f1f0 +plagiarism ea5a +planet f387 +planner_banner_ad_pt e692 +planner_review e694 +play_arrow e037 +play_circle e1c4 +play_disabled ef6a +play_for_work e906 +play_lesson f047 +play_music e6ee +play_pause f137 +play_shapes f7fc +playing_cards f5dc +playlist_add e03b +playlist_add_check e065 +playlist_add_check_circle e7e6 +playlist_add_circle e7e5 +playlist_play e05f +playlist_remove eb80 +plug_connect f35a +plumbing f107 +plus_one e800 +podcasts f048 +podiatry e120 +podium f7fb +point_of_sale f17e +point_scan f70c +poker_chip f49b +policy ea17 +policy_alert f407 +poll f0cc +polyline ebbb +polymer e8ab +pool eb48 +portable_wifi_off f087 +portrait e851 +position_bottom_left f70b +position_bottom_right f70a +position_top_right f709 +post e705 +post_add ea20 +potted_plant f8aa +power e63c +power_input e336 +power_off e646 +power_rounded f8c7 +power_settings_circle f418 +power_settings_new f8c7 +prayer_times f838 +precision_manufacturing f049 +pregnancy f5f1 +pregnant_woman f5f1 +preliminary e7d8 +prescriptions e121 +present_to_all e0df +preview f1c5 +preview_off f7af +price_change f04a +price_check f04b +print e8ad +print_add f7a2 +print_connect f7a1 +print_disabled e9cf +print_error f7a0 +print_lock f651 +priority e19f +priority_high e645 +privacy f148 +privacy_tip f0dc +private_connectivity e744 +problem e122 +procedure e651 +process_chart f855 +production_quantity_limits e1d1 +productivity e296 +progress_activity e9d0 +prompt_suggestion f4f6 +propane ec14 +propane_tank ec13 +psychiatry e123 +psychology ea4a +psychology_alt f8ea +public e80b +public_off f1ca +publish e255 +published_with_changes f232 +pulmonology e124 +pulse_alert f501 +punch_clock eaa8 +push_pin f10d +qr_code ef6b +qr_code_2 e00a +qr_code_2_add f658 +qr_code_scanner f206 +query_builder efd6 +query_stats e4fc +question_answer e8af +question_exchange f7f3 +question_mark eb8b +queue e03c +queue_music e03d +queue_play_next e066 +quick_phrases e7d1 +quick_reference e46e +quick_reference_all f801 +quick_reorder eb15 +quickreply ef6c +quiet_time f159 +quiet_time_active eb76 +quiz f04c +r_mobiledata f04d +radar f04e +radio e03e +radio_button_checked e837 +radio_button_partial f560 +radio_button_unchecked e836 +radiology e125 +railway_alert e9d1 +railway_alert_2 f461 +rainy f176 +rainy_heavy f61f +rainy_light f61e +rainy_snow f61d +ramen_dining ea64 +ramp_left eb9c +ramp_right eb96 +range_hood e1ea +rate_review e560 +rate_review_rtl e706 +raven f555 +raw_off f04f +raw_on f050 +read_more ef6d +readiness_score f6dd +real_estate_agent e73a +rear_camera f6c2 +rebase f845 +rebase_edit f846 +receipt e8b0 +receipt_long ef6e +receipt_long_off f40a +recent_actors e03f +recent_patient f808 +recenter f4c0 +recommend e9d2 +record_voice_over e91f +rectangle eb54 +recycling e760 +redeem e8f6 +redo e15a +reduce_capacity f21c +refresh e5d5 +regular_expression f750 +relax f6dc +release_alert f654 +remember_me f051 +reminder e6c6 +reminders_alt e6c6 +remote_gen e83e +remove e15b +remove_circle f08f +remove_circle_outline f08f +remove_done e9d3 +remove_from_queue e067 +remove_moderator e9d4 +remove_red_eye e8f4 +remove_road ebfc +remove_selection e9d5 +remove_shopping_cart e928 +reopen_window f708 +reorder e8fe +repartition f8e8 +repeat e040 +repeat_on e9d6 +repeat_one e041 +repeat_one_on e9d7 +replace_audio f451 +replace_image f450 +replace_video f44f +replay e042 +replay_10 e059 +replay_30 e05a +replay_5 e05b +replay_circle_filled e9d8 +reply e15e +reply_all e15f +report f052 +report_gmailerrorred f052 +report_off e170 +report_problem f083 +request_page f22c +request_quote f1b6 +reset_brightness f482 +reset_focus f481 +reset_image f824 +reset_iso f480 +reset_settings f47f +reset_shadow f47e +reset_shutter_speed f47d +reset_tv e9d9 +reset_white_balance f47c +reset_wrench f56c +resize f707 +respiratory_rate e127 +responsive_layout e9da +restart_alt f053 +restaurant e56c +restaurant_menu e561 +restore e8b3 +restore_from_trash e938 +restore_page e929 +resume f7d0 +reviews f07c +rewarded_ads efb6 +rheumatology e128 +rib_cage f898 +rice_bowl f1f5 +right_click f706 +right_panel_close f705 +right_panel_open f704 +ring_volume f0dd +ring_volume_filled f0dd +ripples e9db +road f472 +robot f882 +robot_2 f5d0 +rocket eba5 +rocket_launch eb9b +roller_shades ec12 +roller_shades_closed ec11 +roller_skating ebcd +roofing f201 +room f1db +room_preferences f1b8 +room_service eb49 +rotate_90_degrees_ccw e418 +rotate_90_degrees_cw eaab +rotate_auto f417 +rotate_left e419 +rotate_right e41a +roundabout_left eb99 +roundabout_right eba3 +rounded_corner e920 +route eacd +router e328 +router_off f2f4 +routine e20c +rowing e921 +rss_feed e0e5 +rsvp f055 +rtt e9ad +rubric eb27 +rule f1c2 +rule_folder f1c9 +rule_settings f64c +run_circle ef6f +running_with_errors e51d +rv_hookup e642 +safety_check ebef +safety_check_off f59d +safety_divider e1cc +sailing e502 +salinity f876 +sanitizer f21d +satellite e562 +satellite_alt eb3a +sauna f6f7 +save e161 +save_alt f090 +save_as eb60 +save_clock f398 +saved_search ea11 +savings e2eb +scale eb5f +scan f74e +scan_delete f74f +scanner e329 +scatter_plot e268 +scene e2a7 +schedule efd6 +schedule_send ea0a +schema e4fd +school e80c +science ea4b +science_off f542 +scooter f471 +score e269 +scoreboard ebd0 +screen_lock_landscape e1be +screen_lock_portrait e1bf +screen_lock_rotation e1c0 +screen_record f679 +screen_rotation e1c1 +screen_rotation_alt ebee +screen_rotation_up f678 +screen_search_desktop ef70 +screen_share e0e2 +screenshot f056 +screenshot_frame f677 +screenshot_frame_2 f374 +screenshot_keyboard f7d3 +screenshot_monitor ec08 +screenshot_region f7d2 +screenshot_tablet f697 +script f45f +scrollable_header e9dc +scuba_diving ebce +sd e9dd +sd_card e623 +sd_card_alert f057 +sd_storage e623 +sdk e720 +search e8b6 +search_activity f3e5 +search_check f800 +search_check_2 f469 +search_hands_free e696 +search_insights f4bc +search_off ea76 +seat_cool_left f331 +seat_cool_right f330 +seat_heat_left f32f +seat_heat_right f32e +seat_vent_left f32d +seat_vent_right f32c +security e32a +security_key f503 +security_update f072 +security_update_good f073 +security_update_warning f074 +segment e94b +select f74d +select_all e162 +select_check_box f1fe +select_to_speak f7cf +select_window e6fa +select_window_2 f4c8 +select_window_off e506 +self_care f86d +self_improvement ea78 +sell f05b +send e163 +send_and_archive ea0c +send_money e8b7 +send_time_extension eadb +send_to_mobile f05c +sensor_door f1b5 +sensor_occupied ec10 +sensor_window f1b4 +sensors e51e +sensors_krx f556 +sensors_krx_off f515 +sensors_off e51f +sentiment_calm f6a7 +sentiment_content f6a6 +sentiment_dissatisfied e811 +sentiment_excited f6a5 +sentiment_extremely_dissatisfied f194 +sentiment_frustrated f6a4 +sentiment_neutral e812 +sentiment_sad f6a3 +sentiment_satisfied e813 +sentiment_satisfied_alt e813 +sentiment_stressed f6a2 +sentiment_very_dissatisfied e814 +sentiment_very_satisfied e815 +sentiment_worried f6a1 +serif f4ac +server_person f3bd +service_toolbox e717 +set_meal f1ea +settings e8b8 +settings_accessibility f05d +settings_account_box f835 +settings_alert f143 +settings_applications e8b9 +settings_b_roll f625 +settings_backup_restore e8ba +settings_bluetooth e8bb +settings_brightness e8bd +settings_cell e8bc +settings_cinematic_blur f624 +settings_ethernet e8be +settings_heart f522 +settings_input_antenna e8bf +settings_input_component e8c1 +settings_input_composite e8c1 +settings_input_hdmi e8c2 +settings_input_svideo e8c3 +settings_motion_mode f833 +settings_night_sight f832 +settings_overscan e8c4 +settings_panorama f831 +settings_phone e8c5 +settings_photo_camera f834 +settings_power e8c6 +settings_remote e8c7 +settings_slow_motion f623 +settings_suggest f05e +settings_system_daydream e1c3 +settings_timelapse f622 +settings_video_camera f621 +settings_voice e8c8 +settop_component e2ac +severe_cold ebd3 +shadow e9df +shadow_add f584 +shadow_minus f583 +shape_line f8d3 +shape_recognition eb01 +shapes e602 +share e80d +share_eta e5f7 +share_location f05f +share_off f6cb +share_reviews f8a4 +share_windows f613 +sheets_rtl f823 +shelf_auto_hide f703 +shelf_position f702 +shelves f86e +shield e9e0 +shield_lock f686 +shield_locked f592 +shield_moon eaa9 +shield_person f650 +shield_question f529 +shield_watch f30f +shield_with_heart e78f +shield_with_house e78d +shift e5f2 +shift_lock f7ae +shift_lock_off f483 +shop e8c9 +shop_2 e8ca +shop_two e8ca +shopping_bag f1cc +shopping_bag_speed f39a +shopping_basket e8cb +shopping_cart e8cc +shopping_cart_checkout eb88 +shopping_cart_off f4f7 +shoppingmode efb7 +short_stay e4d0 +short_text e261 +shortcut f57a +show_chart e6e1 +shower f061 +shuffle e043 +shuffle_on e9e1 +shutter_speed e43d +shutter_speed_add f57e +shutter_speed_minus f57d +sick f220 +side_navigation e9e2 +sign_language ebe5 +signal_cellular_0_bar f0a8 +signal_cellular_1_bar f0a9 +signal_cellular_2_bar f0aa +signal_cellular_3_bar f0ab +signal_cellular_4_bar e1c8 +signal_cellular_add f7a9 +signal_cellular_alt e202 +signal_cellular_alt_1_bar ebdf +signal_cellular_alt_2_bar ebe3 +signal_cellular_connected_no_internet_0_bar f0ac +signal_cellular_connected_no_internet_4_bar e1cd +signal_cellular_no_sim e1ce +signal_cellular_nodata f062 +signal_cellular_null e1cf +signal_cellular_off e1d0 +signal_cellular_pause f5a7 +signal_disconnected f239 +signal_wifi_0_bar f0b0 +signal_wifi_4_bar f065 +signal_wifi_4_bar_lock e1e1 +signal_wifi_bad f064 +signal_wifi_connected_no_internet_4 f064 +signal_wifi_off e1da +signal_wifi_statusbar_4_bar f065 +signal_wifi_statusbar_not_connected f0ef +signal_wifi_statusbar_null f067 +signature f74c +signpost eb91 +sim_card e32b +sim_card_alert f057 +sim_card_download f068 +simulation f3e1 +single_bed ea48 +sip f069 +siren f3a7 +siren_check f3a6 +siren_open f3a5 +siren_question f3a4 +skateboarding e511 +skeleton f899 +skillet f543 +skillet_cooktop f544 +skip_next e044 +skip_previous e045 +skull f89a +skull_list f370 +slab_serif f4ab +sledding e512 +sleep e213 +sleep_score f6b7 +slide_library f822 +sliders e9e3 +slideshow e41b +slow_motion_video e068 +smart_button f1c1 +smart_card_reader f4a5 +smart_card_reader_off f4a6 +smart_display f06a +smart_outlet e844 +smart_screen f06b +smart_toy f06c +smartphone e32c +smartphone_camera f44e +smb_share f74b +smoke_free eb4a +smoking_rooms eb4b +sms e625 +sms_failed e87f +snippet_folder f1c7 +snooze e046 +snowboarding e513 +snowing e80f +snowing_heavy f61c +snowmobile e503 +snowshoeing e514 +soap f1b2 +social_distance e1cb +social_leaderboard f6a0 +solar_power ec0f +sort e164 +sort_by_alpha e053 +sos ebf7 +sound_detection_dog_barking f149 +sound_detection_glass_break f14a +sound_detection_loud_sound f14b +sound_sampler f6b4 +soup_kitchen e7d3 +source f1c8 +source_environment e527 +source_notes e12d +south f1e3 +south_america e7e4 +south_east f1e4 +south_west f1e5 +spa eb4c +space_bar e256 +space_dashboard e66b +spatial_audio ebeb +spatial_audio_off ebe8 +spatial_speaker f4cf +spatial_tracking ebea +speaker e32d +speaker_group e32e +speaker_notes e8cd +speaker_notes_off e92a +speaker_phone e0d2 +special_character f74a +specific_gravity f872 +speech_to_text f8a7 +speed e9e4 +speed_0_25 f4d4 +speed_0_2x f498 +speed_0_5 f4e2 +speed_0_5x f497 +speed_0_75 f4d3 +speed_0_7x f496 +speed_1_2 f4e1 +speed_1_25 f4d2 +speed_1_2x f495 +speed_1_5 f4e0 +speed_1_5x f494 +speed_1_75 f4d1 +speed_1_7x f493 +speed_2x f4eb +speed_camera f470 +spellcheck e8ce +split_scene f3bf +split_scene_down f2ff +split_scene_left f2fe +split_scene_right f2fd +split_scene_up f2fc +splitscreen f06d +splitscreen_add f4fd +splitscreen_bottom f676 +splitscreen_landscape f459 +splitscreen_left f675 +splitscreen_portrait f458 +splitscreen_right f674 +splitscreen_top f673 +splitscreen_vertical_add f4fc +spo2 f6db +spoke e9a7 +sports ea30 +sports_and_outdoors efb8 +sports_bar f1f3 +sports_baseball ea51 +sports_basketball ea26 +sports_cricket ea27 +sports_esports ea28 +sports_football ea29 +sports_golf ea2a +sports_gymnastics ebc4 +sports_handball ea33 +sports_hockey ea2b +sports_kabaddi ea34 +sports_martial_arts eae9 +sports_mma ea2c +sports_motorsports ea2d +sports_rugby ea2e +sports_score f06e +sports_soccer ea2f +sports_tennis ea32 +sports_volleyball ea31 +sprinkler e29a +sprint f81f +square eb36 +square_dot f3b3 +square_foot ea49 +ssid_chart eb66 +stack f609 +stack_group f359 +stack_hexagon f41c +stack_off f608 +stack_star f607 +stacked_bar_chart e9e6 +stacked_email e6c7 +stacked_inbox e6c9 +stacked_line_chart f22b +stacks f500 +stadia_controller f135 +stadium eb90 +stairs f1a9 +stairs_2 f46c +star f09a +star_border f09a +star_border_purple500 f09a +star_half e839 +star_outline f09a +star_purple500 f09a +star_rate f0ec +star_rate_half ec45 +star_shine f31d +stars e8d0 +stars_2 f31c +start e089 +stat_0 e697 +stat_1 e698 +stat_2 e699 +stat_3 e69a +stat_minus_1 e69b +stat_minus_2 e69c +stat_minus_3 e69d +stay_current_landscape e0d3 +stay_current_portrait e0d4 +stay_primary_landscape e0d5 +stay_primary_portrait e0d6 +steering_wheel_heat f32b +step f6fe +step_into f701 +step_out f700 +step_over f6ff +steppers e9e7 +steps f6da +stethoscope f805 +stethoscope_arrow f807 +stethoscope_check f806 +sticky_note e9e8 +sticky_note_2 f1fc +stock_media f570 +stockpot f545 +stop e047 +stop_circle ef71 +stop_screen_share e0e3 +storage e1db +store e8d1 +store_mall_directory e8d1 +storefront ea12 +storm f070 +straight eb95 +straighten e41c +strategy f5df +stream e9e9 +stream_apps f79f +streetview e56e +stress_management f6d9 +strikethrough_s e257 +stroke_full f749 +stroke_partial f748 +stroller f1ae +style e41d +styler e273 +stylus f604 +stylus_brush f366 +stylus_fountain_pen f365 +stylus_highlighter f364 +stylus_laser_pointer f747 +stylus_note f603 +stylus_pen f363 +stylus_pencil f362 +subdirectory_arrow_left e5d9 +subdirectory_arrow_right e5da +subheader e9ea +subject e8d2 +subscript f111 +subscriptions e064 +subtitles e048 +subtitles_gear f355 +subtitles_off ef72 +subway e56f +summarize f071 +sunny e81a +sunny_snowing e819 +superscript f112 +supervised_user_circle e939 +supervised_user_circle_off f60e +supervisor_account e8d3 +support ef73 +support_agent f0e2 +surfing e515 +surgical e131 +surround_sound e049 +swap_calls e0d7 +swap_driving_apps e69e +swap_driving_apps_wheel e69f +swap_horiz e8d4 +swap_horizontal_circle e933 +swap_vert e8d5 +swap_vertical_circle e8d6 +sweep e6ac +swipe e9ec +swipe_down eb53 +swipe_down_alt eb30 +swipe_left eb59 +swipe_left_alt eb33 +swipe_right eb52 +swipe_right_alt eb56 +swipe_up eb2e +swipe_up_alt eb35 +swipe_vertical eb51 +switch e1f4 +switch_access f6fd +switch_access_2 f506 +switch_access_3 f34d +switch_access_shortcut e7e1 +switch_access_shortcut_add e7e2 +switch_account e9ed +switch_camera e41e +switch_left f1d1 +switch_right f1d2 +switch_video e41f +switches e733 +sword_rose f5de +swords f889 +symptoms e132 +synagogue eab0 +sync e627 +sync_alt ea18 +sync_arrow_down f37c +sync_arrow_up f37b +sync_desktop f41a +sync_disabled e628 +sync_lock eaee +sync_problem e629 +sync_saved_locally f820 +syringe e133 +system_security_update f072 +system_security_update_good f073 +system_security_update_warning f074 +system_update f072 +system_update_alt e8d7 +tab e8d8 +tab_close f745 +tab_close_inactive f3d0 +tab_close_right f746 +tab_duplicate f744 +tab_group f743 +tab_inactive f43b +tab_move f742 +tab_new_right f741 +tab_recent f740 +tab_search f2f2 +tab_unselected e8d9 +table f191 +table_bar ead2 +table_chart e265 +table_chart_view f6ef +table_convert f3c7 +table_edit f3c6 +table_eye f466 +table_lamp e1f2 +table_restaurant eac6 +table_rows f101 +table_rows_narrow f73f +table_view f1be +tablet e32f +tablet_android e330 +tablet_camera f44d +tablet_mac e331 +tabs e9ee +tactic f564 +tag e9ef +tag_faces ea22 +takeout_dining ea74 +tamper_detection_off e82e +tamper_detection_on f8c8 +tap_and_play e62b +tapas f1e9 +target e719 +task f075 +task_alt e2e6 +taunt f69f +taxi_alert ef74 +team_dashboard e013 +temp_preferences_custom f8c9 +temp_preferences_eco f8ca +temple_buddhist eab3 +temple_hindu eaaf +tenancy f0e3 +terminal eb8e +terrain e564 +text_ad e728 +text_compare f3c5 +text_decrease eadd +text_fields e262 +text_fields_alt e9f1 +text_format e165 +text_increase eae2 +text_rotate_up e93a +text_rotate_vertical e93b +text_rotation_angledown e93c +text_rotation_angleup e93d +text_rotation_down e93e +text_rotation_none e93f +text_select_end f73e +text_select_jump_to_beginning f73d +text_select_jump_to_end f73c +text_select_move_back_character f73b +text_select_move_back_word f73a +text_select_move_down f739 +text_select_move_forward_character f738 +text_select_move_forward_word f737 +text_select_move_up f736 +text_select_start f735 +text_snippet f1c6 +text_to_speech f1bc +text_up f49e +textsms e625 +texture e421 +texture_add f57c +texture_minus f57b +theater_comedy ea66 +theaters e8da +thermometer e846 +thermometer_add f582 +thermometer_gain f6d8 +thermometer_loss f6d7 +thermometer_minus f581 +thermostat f076 +thermostat_arrow_down f37a +thermostat_arrow_up f379 +thermostat_auto f077 +thermostat_carbon f178 +things_to_do eb2a +thread_unread f4f9 +threat_intelligence eaed +thumb_down f578 +thumb_down_alt f578 +thumb_down_filled f578 +thumb_down_off f578 +thumb_down_off_alt f578 +thumb_up f577 +thumb_up_alt f577 +thumb_up_filled f577 +thumb_up_off f577 +thumb_up_off_alt f577 +thumbnail_bar f734 +thumbs_up_down e8dd +thunderstorm ebdb +tibia f89b +tibia_alt f89c +tile_large f3c3 +tile_medium f3c2 +tile_small f3c1 +time_auto f0e4 +time_to_leave eff7 +timelapse e422 +timeline e922 +timer e425 +timer_10 e423 +timer_10_alt_1 efbf +timer_10_select f07a +timer_3 e424 +timer_3_alt_1 efc0 +timer_3_select f07b +timer_5 f4b1 +timer_5_shutter f4b2 +timer_arrow_down f378 +timer_arrow_up f377 +timer_off e426 +timer_pause f4bb +timer_play f4ba +tips_and_updates e79a +tire_repair ebc8 +title e264 +titlecase f489 +toast efc1 +toc e8de +today e8df +toggle_off e9f5 +toggle_on e9f6 +token ea25 +toll e8e0 +tonality e427 +toolbar e9f7 +tools_flat_head f8cb +tools_installation_kit e2ab +tools_ladder e2cb +tools_level e77b +tools_phillips f8cc +tools_pliers_wire_stripper e2aa +tools_power_drill e1e9 +tools_wrench f8cd +tooltip e9f8 +tooltip_2 f3ed +top_panel_close f733 +top_panel_open f732 +topic f1c8 +tornado e199 +total_dissolved_solids f877 +touch_app e913 +touch_double f38b +touch_long f38a +touch_triple f389 +touchpad_mouse f687 +touchpad_mouse_off f4e6 +tour ef75 +toys e332 +toys_and_games efc2 +toys_fan f887 +track_changes e8e1 +trackpad_input f4c7 +trackpad_input_2 f409 +trackpad_input_3 f408 +traffic e565 +traffic_jam f46f +trail_length eb5e +trail_length_medium eb63 +trail_length_short eb6d +train e570 +tram e571 +transcribe f8ec +transfer_within_a_station e572 +transform e428 +transgender e58d +transit_enterexit e579 +transit_ticket f3f1 +transition_chop f50e +transition_dissolve f50d +transition_fade f50c +transition_push f50b +transition_slide f50a +translate e8e2 +transportation e21d +travel ef93 +travel_explore e2db +travel_luggage_and_bags efc3 +trending_down e8e3 +trending_flat e8e4 +trending_up e8e5 +trip e6fb +trip_origin e57b +trolley f86b +trolley_cable_car f46e +trophy ea23 +troubleshoot e1d2 +try f07c +tsunami ebd8 +tsv e6d6 +tty f1aa +tune e429 +tungsten f07d +turn_left eba6 +turn_right ebab +turn_sharp_left eba7 +turn_sharp_right ebaa +turn_slight_left eba4 +turn_slight_right eb9a +turned_in e8e7 +turned_in_not e8e7 +tv e63b +tv_displays f3ec +tv_gen e830 +tv_guide e1dc +tv_next f3eb +tv_off e647 +tv_options_edit_channels e1dd +tv_options_input_settings e1de +tv_remote f5d9 +tv_signin e71b +tv_with_assistant e785 +two_pager f51f +two_pager_store f3c4 +two_wheeler e9f9 +type_specimen f8f0 +u_turn_left eba1 +u_turn_right eba2 +ulna_radius f89d +ulna_radius_alt f89e +umbrella f1ad +unarchive e169 +undo e166 +unfold_less e5d6 +unfold_less_double f8cf +unfold_more e5d7 +unfold_more_double f8d0 +ungroup f731 +universal_currency e9fa +universal_currency_alt e734 +universal_local e9fb +unknown_2 f49f +unknown_5 e6a5 +unknown_7 f49e +unknown_document f804 +unknown_med eabd +unlicense eb05 +unpaved_road f46d +unpin e6f9 +unpublished f236 +unsubscribe e0eb +upcoming f07e +update e923 +update_disabled e075 +upgrade f0fb +upi_pay f3cf +upload f09b +upload_2 f521 +upload_file e9fc +uppercase f488 +urology e137 +usb e1e0 +usb_off e4fa +user_attributes e708 +vaccines e138 +vacuum efc5 +valve e224 +vape_free ebc6 +vaping_rooms ebcf +variable_add f51e +variable_insert f51d +variable_remove f51c +variables f851 +ventilator e139 +verified ef76 +verified_off f30e +verified_user f013 +vertical_align_bottom e258 +vertical_align_center e259 +vertical_align_top e25a +vertical_distribute e076 +vertical_shades ec0e +vertical_shades_closed ec0d +vertical_split e949 +vibration e62d +video_call e070 +video_camera_back f07f +video_camera_back_add f40c +video_camera_front f080 +video_camera_front_off f83b +video_chat f8a0 +video_file eb87 +video_label e071 +video_library e04a +video_search efc6 +video_settings ea75 +video_stable f081 +videocam e04b +videocam_alert f390 +videocam_off e04c +videogame_asset e338 +videogame_asset_off e500 +view_agenda e8e9 +view_apps f376 +view_array e8ea +view_carousel e8eb +view_column e8ec +view_column_2 f847 +view_comfy e42a +view_comfy_alt eb73 +view_compact e42b +view_compact_alt eb74 +view_cozy eb75 +view_day e8ed +view_headline e8ee +view_in_ar efc9 +view_in_ar_new efc9 +view_in_ar_off f61b +view_kanban eb7f +view_list e8ef +view_module e8f0 +view_object_track f432 +view_quilt e8f1 +view_real_size f4c2 +view_sidebar f114 +view_stream e8f2 +view_timeline eb85 +view_week e8f3 +vignette e435 +villa e586 +visibility e8f4 +visibility_lock f653 +visibility_off e8f5 +vital_signs e650 +vitals e13b +vo2_max f4aa +voice_chat e62e +voice_over_off e94a +voice_selection f58a +voice_selection_off f42c +voicemail e0d9 +voicemail_2 f352 +volcano ebda +volume_down e04d +volume_down_alt e79c +volume_mute e04e +volume_off e04f +volume_up e050 +volunteer_activism ea70 +voting_chip f852 +vpn_key e0da +vpn_key_alert f6cc +vpn_key_off eb7a +vpn_lock e62f +vpn_lock_2 f350 +vr180_create2d efca +vr180_create2d_off f571 +vrpano f082 +wall_art efcb +wall_lamp e2b4 +wallet f8ff +wallpaper e1bc +wallpaper_slideshow f672 +wand_shine f31f +wand_stars f31e +ward e13c +warehouse ebb8 +warning f083 +warning_amber f083 +warning_off f7ad +wash f1b1 +watch e334 +watch_button_press f6aa +watch_check f468 +watch_later efd6 +watch_off eae3 +watch_screentime f6ae +watch_vibration f467 +watch_wake f6a9 +water f084 +water_bottle f69d +water_bottle_large f69e +water_damage f203 +water_do f870 +water_drop e798 +water_ec f875 +water_full f6d6 +water_heater e284 +water_lock f6ad +water_loss f6d5 +water_lux f874 +water_medium f6d4 +water_orp f878 +water_ph f87a +water_pump f5d8 +water_voc f87b +waterfall_chart ea00 +waves e176 +waving_hand e766 +wb_auto e42c +wb_cloudy f15c +wb_incandescent e42e +wb_iridescent f07d +wb_shade ea01 +wb_sunny e430 +wb_twilight e1c6 +wc e63d +weather_hail f67f +weather_mix f60b +weather_snowy e2cd +web e051 +web_asset e069 +web_asset_off ef47 +web_stories e595 +web_traffic ea03 +webhook eb92 +weekend e16b +weight e13d +west f1e6 +whatshot e80e +wheelchair_pickup f1ab +where_to_vote e177 +widget_medium f3ba +widget_small f3b9 +widget_width f3b8 +widgets e1bd +width f730 +width_full f8f5 +width_normal f8f6 +width_wide f8f7 +wifi e63e +wifi_1_bar e4ca +wifi_2_bar e4d9 +wifi_add f7a8 +wifi_calling ef77 +wifi_calling_1 f0e7 +wifi_calling_2 f0f6 +wifi_calling_3 f0e7 +wifi_calling_bar_1 f44c +wifi_calling_bar_2 f44b +wifi_calling_bar_3 f44a +wifi_channel eb6a +wifi_find eb31 +wifi_home f671 +wifi_lock e1e1 +wifi_notification f670 +wifi_off e648 +wifi_password eb6b +wifi_protected_setup f0fc +wifi_proxy f7a7 +wifi_tethering e1e2 +wifi_tethering_error ead9 +wifi_tethering_off f087 +wind_power ec0c +window f088 +window_closed e77e +window_open e78c +window_sensor e2bb +windshield_defrost_front f32a +windshield_defrost_rear f329 +windshield_heat_front f328 +wine_bar f1e8 +woman e13e +woman_2 f8e7 +work e943 +work_alert f5f7 +work_history ec09 +work_off e942 +work_outline e943 +work_update f5f8 +workflow ea04 +workspace_premium e7af +workspaces ea0f +workspaces_outline ea0f +wounds_injuries e13f +wrap_text e25b +wrist f69c +wrong_location ef78 +wysiwyg f1c3 +yard f089 +your_trips eb2b +youtube_activity f85a +youtube_searched_for e8fa +zone_person_alert e781 +zone_person_idle e77a +zone_person_urgent e788 +zoom_in e8ff +zoom_in_map eb2d +zoom_out e900 +zoom_out_map e56b diff --git a/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].ttf b/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].ttf new file mode 100755 index 0000000..ba74c55 Binary files /dev/null and b/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].ttf differ diff --git a/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].woff2 b/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].woff2 new file mode 100755 index 0000000..5209027 Binary files /dev/null and b/www/fonts/MaterialSymbolsSharp[FILL,GRAD,opsz,wght].woff2 differ diff --git a/www/index.html b/www/index.html index 4e0b630..1a7cfe8 100644 --- a/www/index.html +++ b/www/index.html @@ -6,6 +6,12 @@ +
+
+
+
+
+
\ No newline at end of file diff --git a/www/main.js b/www/main.js index adf37de..534cb34 100644 --- a/www/main.js +++ b/www/main.js @@ -2319,146 +2319,156 @@ var Weather = /** @class */ (function () { this.hourly = []; this.daily = []; this.options = new WeatherOptions(latitude !== null && latitude !== void 0 ? latitude : 47.61002138071677, longitude !== null && longitude !== void 0 ? longitude : -122.17906310779568); + var time = document.getElementById("time"); + time.textContent = new Date().toLocaleTimeString("en-US", { hour12: false, timeStyle: "short" }); + setInterval(function () { return time.textContent = new Date().toLocaleTimeString("en-US", { hour12: false, timeStyle: "short" }); }, 15000); var me = this; - setInterval(function () { return me.fetchWeather().then(function () { return me.setDisplay(); }); }, 60 * 1000); + setInterval(function () { return me.fetchWeather().then(function () { return me.setDisplay(); }); }, 300000); me.fetchWeather().then(function () { return me.setDisplay(); }); } Weather.prototype.fetchWeather = function () { return __awaiter(this, void 0, void 0, function () { - var me, parameters, getData, responses, _i, responses_1, response, utcOffsetSeconds, current, hourly, daily, length_1, temperatures, precipitationTotals, precipitationProbabilities, i, length_2, maxTemperatures, minTemperatures, sunrise, sunset, maxUVs, precipitationTotals, precipitationHours, maxWindSpeeds, maxWindGusts, prominentWindDirections, i; + var me, parameters, responses, _i, responses_1, response, current, hourly, daily; return __generator(this, function (_a) { switch (_a.label) { case 0: me = this; parameters = __assign({}, me.options); - getData = false; - if (!me.lastFetched) { - parameters["daily"] = me.dailyVariables; - parameters["hourly"] = me.hourlyVariables; - parameters["current"] = me.currentVariables; - me.lastFetched = new LastFetched(); - getData = true; - } - else { - // Reasonable-ish timers? - if (me.lastFetched.minutesSinceCurrent() > 15) { - parameters["current"] = me.currentVariables; - me.lastFetched.current = new Date(); - getData = true; - } - if (me.lastFetched.hoursSinceHourly() > 3) { - parameters["hourly"] = me.hourlyVariables; - me.lastFetched.hourly = new Date(); - getData = true; - } - if (me.lastFetched.hoursSinceDaily() > 8) { - parameters["daily"] = me.dailyVariables; - me.lastFetched.daily = new Date(); - getData = true; - } - } - if (!getData) + if (!me.doFetchData(parameters)) return [2 /*return*/]; return [4 /*yield*/, (0,openmeteo__WEBPACK_IMPORTED_MODULE_0__.fetchWeatherApi)(me.apiUrl, parameters)]; case 1: responses = _a.sent(); for (_i = 0, responses_1 = responses; _i < responses_1.length; _i++) { response = responses_1[_i]; - utcOffsetSeconds = response.utcOffsetSeconds(); current = response.current(); hourly = response.hourly(); daily = response.daily(); - if (current != null) { - me.current = { - time: new Date(Number(current.time()) * 1000), - temperature: current.variables(0).value(), - humidity: current.variables(1).value(), - feelsLike: current.variables(2).value(), - precipitation: current.variables(3).value(), - windSpeed: current.variables(4).value(), - windGusts: current.variables(5).value(), - windDirection: current.variables(6).value(), - cloudCoverage: current.variables(7).value() - }; - } - if (hourly != null) { - length_1 = Number(hourly.timeEnd() - hourly.time()) / hourly.interval(); - temperatures = hourly.variables(0).valuesArray(); - precipitationTotals = hourly.variables(1).valuesArray(); - precipitationProbabilities = hourly.variables(2).valuesArray(); - me.hourly.length = 0; - for (i = 0; i < length_1; i++) { - me.hourly.push({ - time: new Date((Number(hourly.time()) + i * hourly.interval() + utcOffsetSeconds) * 1000), - temperature: temperatures[i], - precipitation: precipitationTotals[i], - precipitationProbability: precipitationProbabilities[i] - }); - } - } - if (daily != null) { - length_2 = Number(daily.timeEnd() - daily.time()) / daily.interval(); - maxTemperatures = daily.variables(0).valuesArray(); - minTemperatures = daily.variables(1).valuesArray(); - sunrise = daily.variables(2); - sunset = daily.variables(3); - maxUVs = daily.variables(4).valuesArray(); - precipitationTotals = daily.variables(5).valuesArray(); - precipitationHours = daily.variables(6).valuesArray(); - maxWindSpeeds = daily.variables(7).valuesArray(); - maxWindGusts = daily.variables(8).valuesArray(); - prominentWindDirections = daily.variables(9).valuesArray(); - me.daily.length = 0; - for (i = 0; i < length_2; i++) { - me.daily.push({ - time: new Date((Number(daily.time()) + i * daily.interval()) * 1000), - maxTemperature: maxTemperatures[i], - minTemperature: minTemperatures[i], - sunrise: new Date((Number(sunrise.valuesInt64(i))) * 1000), - sunset: new Date((Number(sunset.valuesInt64(i))) * 1000), - maxUV: maxUVs[i], - totalPrecipitation: precipitationTotals[i], - hoursOfPrecipitation: precipitationHours[i], - maxWindSpeed: maxWindSpeeds[i], - maxWindGusts: maxWindGusts[i], - prominentWindDirection: prominentWindDirections[i] - }); - } - } + if (current != null) + me.setCurrentData(current); + if (hourly != null) + me.setHourlyData(hourly); + if (daily != null) + me.setDailyData(daily); } return [2 /*return*/]; } }); }); }; - Weather.prototype.setDisplay = function () { - var panel = document.getElementById("weather-panel"); - if (!panel) { - panel = document.createElement("main"); - panel.id = "weather-panel"; - document.body.appendChild(panel); + Weather.prototype.doFetchData = function (parameters) { + var me = this; + if (!me.lastFetched) { + parameters["daily"] = me.dailyVariables; + parameters["hourly"] = me.hourlyVariables; + parameters["current"] = me.currentVariables; + me.lastFetched = new LastFetched(); + return true; } - while (panel.firstChild) - panel.removeChild(panel.firstChild); - var currentSection = document.createElement("section"); - currentSection.id = "current-section"; - panel.appendChild(currentSection); - this.setDisplayCurrent(currentSection); + else { + // Weather data is updated :00, :15, :30, :45 so wait at least a minute + if (me.lastFetched.current.getMinutes() % 15 >= 1 && me.lastFetched.current.getMinutes() % 15 < 6) { + var now = new Date(); + // Make sure data is over 5 minutes old at least + if ((now.getTime() - me.lastFetched.current.getTime()) > 300000) { + parameters["current"] = me.currentVariables; + me.lastFetched.current = new Date(); + return true; + } + } + // Reasonable-ish timers? + if (me.lastFetched.hoursSinceHourly() > 3) { + parameters["hourly"] = me.hourlyVariables; + me.lastFetched.hourly = new Date(); + return true; + } + if (me.lastFetched.hoursSinceDaily() > 8) { + parameters["daily"] = me.dailyVariables; + me.lastFetched.daily = new Date(); + return true; + } + } + return false; }; - Weather.prototype.setDisplayCurrent = function (section) { - var header = document.createElement("header"); - header.textContent = "Current"; - section.appendChild(header); - var list = document.createElement("dl"); - for (var _i = 0, _a = Object.keys(this.current); _i < _a.length; _i++) { - var key = _a[_i]; - var term = document.createElement("dt"); - term.textContent = key; - var value = document.createElement("dd"); - value.textContent = this.current[key]; - list.append(term, value); + Weather.prototype.setCurrentData = function (current) { + this.current = { + time: new Date(Number(current.time()) * 1000), + temperature: current.variables(0).value(), + humidity: current.variables(1).value(), + feelsLike: current.variables(2).value(), + precipitation: current.variables(3).value(), + windSpeed: current.variables(4).value(), + windGusts: current.variables(5).value(), + windDirection: current.variables(6).value(), + cloudCoverage: current.variables(7).value() + }; + }; + Weather.prototype.setHourlyData = function (hourly) { + var length = Number(hourly.timeEnd() - hourly.time()) / hourly.interval(); + var temperatures = hourly.variables(0).valuesArray(); + var precipitationTotals = hourly.variables(1).valuesArray(); + var precipitationProbabilities = hourly.variables(2).valuesArray(); + this.hourly.length = 0; + for (var i = 0; i < length; i++) { + this.hourly.push({ + time: new Date((Number(hourly.time()) + i * hourly.interval()) * 1000), + temperature: temperatures[i], + precipitation: precipitationTotals[i], + precipitationProbability: precipitationProbabilities[i] + }); } - section.appendChild(list); + }; + Weather.prototype.setDailyData = function (daily) { + var length = Number(daily.timeEnd() - daily.time()) / daily.interval(); + var maxTemperatures = daily.variables(0).valuesArray(); + var minTemperatures = daily.variables(1).valuesArray(); + var sunrise = daily.variables(2); + var sunset = daily.variables(3); + var maxUVs = daily.variables(4).valuesArray(); + var precipitationTotals = daily.variables(5).valuesArray(); + var precipitationHours = daily.variables(6).valuesArray(); + var maxWindSpeeds = daily.variables(7).valuesArray(); + var maxWindGusts = daily.variables(8).valuesArray(); + var prominentWindDirections = daily.variables(9).valuesArray(); + this.daily.length = 0; + for (var i = 0; i < length; i++) { + this.daily.push({ + time: new Date((Number(daily.time()) + i * daily.interval()) * 1000), + maxTemperature: maxTemperatures[i], + minTemperature: minTemperatures[i], + sunrise: new Date((Number(sunrise.valuesInt64(i))) * 1000), + sunset: new Date((Number(sunset.valuesInt64(i))) * 1000), + maxUV: maxUVs[i], + totalPrecipitation: precipitationTotals[i], + hoursOfPrecipitation: precipitationHours[i], + maxWindSpeed: maxWindSpeeds[i], + maxWindGusts: maxWindGusts[i], + prominentWindDirection: prominentWindDirections[i] + }); + } + }; + Weather.prototype.setDisplay = function () { + var current = document.getElementById("current"); + current.innerHTML = "
thermostat".concat(Math.round(this.current.temperature), " (").concat(Math.round(this.current.feelsLike), ")
\n
\n
water_drop ").concat(Math.round(this.current.humidity), "%
\n
cloud ").concat(Math.round(this.current.cloudCoverage), "%
\n
weather_mix ").concat(Math.round(this.current.precipitation), "%
\n
air ").concat(Math.round(this.current.windSpeed), " (").concat(Math.round(this.current.windGusts), ") ").concat(this.inCardinals(this.current.windDirection), "
\n
"); + }; + Weather.prototype.inCardinals = function (direction) { + if (direction > 337.5 || direction <= 22.5) + return "N"; + if (direction > 22.5 || direction <= 67.5) + return "NE"; + if (direction > 67.5 || direction <= 112.5) + return "E"; + if (direction > 112.5 || direction <= 157.5) + return "SE"; + if (direction > 157.5 || direction <= 202.5) + return "S"; + if (direction > 202.5 || direction <= 249.5) + return "SW"; + if (direction > 249.5 || direction <= 294.5) + return "W"; + if (direction > 294.5 || direction <= 337.5) + return "NW"; + return null; }; return Weather; }()); @@ -2482,9 +2492,6 @@ var LastFetched = /** @class */ (function () { this.hourly = new Date(); this.daily = new Date(); } - LastFetched.prototype.minutesSinceCurrent = function () { - return (new Date().getTime() - this.current.getTime()) / 60000; - }; LastFetched.prototype.hoursSinceHourly = function () { return (new Date().getTime() - this.hourly.getTime()) / 3600000; }; diff --git a/www/main.js.map b/www/main.js.map index cecc9ec..e8955b4 100644 --- a/www/main.js.map +++ b/www/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","mappings":";;;;;;;;;;AAAa;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kBAAkB,mBAAmB,mBAAmB;;;;;;;;;;;ACnB5C;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,YAAY,aAAa,aAAa;;;;;;;;;;;ACvG1B;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,WAAW,YAAY,YAAY;;;;;;;;;;;ACjDvB;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA,CAAC;AACD,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B;AAC1B;AACA,iCAAiC,mBAAO,CAAC,kEAAa;AACtD,yBAAyB,mBAAO,CAAC,sEAAkB;AACnD,kBAAkB,mBAAO,CAAC,wDAAW;AACrC,sBAAsB,mBAAO,CAAC,gEAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;;;;;;;;;;ACxHb;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,eAAe,gBAAgB,gBAAgB;;;;;;;;;;;AC5JnC;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA,CAAC;AACD,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB;AACzB;AACA,iCAAiC,mBAAO,CAAC,kEAAa;AACtD,kCAAkC,mBAAO,CAAC,wFAA2B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;;;;;;;;;;AC9EZ;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA,CAAC;AACD,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B;AAC1B;AACA,iCAAiC,mBAAO,CAAC,kEAAa;AACtD,mBAAmB,mBAAO,CAAC,0DAAY;AACvC,iCAAiC,mBAAO,CAAC,sFAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;;;;;;;;;;;;;;;;ACnHoB;AACwD;AAC/F;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,uDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8BAA8B;AACtE;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qDAAU,MAAM;AAClC,iDAAiD,qDAAU;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,mCAAmC;AACnC;AACA,uDAAuD,uDAAY;AACnE;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA,6BAA6B,uDAAY,EAAE,SAAS,KAAK,uDAAY;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6DAAkB;AAChE;AACA;AACA,qCAAqC,qDAAU;AAC/C,gBAAgB,iEAAsB;AACtC,0CAA0C,iEAAsB;AAChE;AACA,oBAAoB,iEAAsB;AAC1C;AACA,yBAAyB,iEAAsB,MAAM,QAAQ;AAC7D;AACA;AACA;AACA,iCAAiC,qDAAU;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qDAAU;AAC5B,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACphBoE;AACC;AAC5B;AAClC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,4CAAK;AACb,eAAe,8CAAO;AACtB;AACA;AACA,QAAQ,4CAAK,CAAC,qDAAc;AAC5B,QAAQ,4CAAK,CAAC,qDAAc;AAC5B,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf,gCAAgC,4CAAK;AACrC;AACA;AACA,QAAQ,8CAAO;AACf,gCAAgC,4CAAK,CAAC,qDAAc;AACpD,oCAAoC,4CAAK,CAAC,qDAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qDAAU;AAC5D,YAAY,iEAAsB;AAClC;AACA;AACA;AACA,wBAAwB,IAAI,iEAAsB,EAAE;AACpD,yEAAyE,qDAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qDAAU;AAC5B;AACA,6BAA6B,kDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qDAAU,EAAE;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iEAAsB;AAClD;AACA,gBAAgB,iEAAsB;AACtC;AACA,wBAAwB,IAAI,iEAAsB,EAAE;AACpD,uEAAuE,qDAAU;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtPO;AACA;AACA;AACA;;;;;;;;;;;;;;;ACHA;AACP;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJiB;AACF;AACY;AACJ;AACiB;AAC5B;AACF;AACO;;;;;;;;;;;;;;;;;;ACPvC;AACA;AACA;AACA;;;;;;;;;;;ACHM;AACb;AACA,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB;AACvB,sBAAsB,mBAAO,CAAC,kEAAa;AAC3C,+BAA+B,mBAAO,CAAC,kGAAqC;AAC5E;AACA;AACA,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,aAAa,gBAAgB;AACxC,aAAa;AACb;AACA;AACA,yIAAyI;AACzI;AACA;AACA,+CAA+C,IAAI,GAAG,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;ACnEA,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA,uBAAuB,4CAAG;AAC1B;AACA;AACA,wDAAwD,4BAA4B;AACpF;AACA;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA;AACA;AACA,wBAAwB,4CAAG;AAC3B,wBAAwB,4CAAG;AAC3B,yBAAyB,4CAAG;AAC5B,yBAAyB,4CAAG;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA,6BAA6B,4CAAG;AAChC;AACA;AACA,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB;AACA;AACA;AACA;AACA,yBAAyB,4CAAG;AAC5B,6BAA6B,4CAAG;AAChC,mCAAmC,4CAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,yBAAyB,4CAAG;AAC5B,wBAAwB,4CAAG;AAC3B,yBAAyB,4CAAG;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiB;;;;;;;;;;;;;;;;AChIuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qDAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,YAAY;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,KAAK,EAAC;;;;;;;;;;;;;;;;AC9CG;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4CAAG;AAC9B;AACA;AACA,eAAe,4CAAG;AAClB;AACA;AACA,CAAC;AACD,iEAAe,GAAG,EAAC;;;;;;;;;;;;;;;AC7BnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,GAAG,EAAC;;;;;;;;;;;;;;;AC/CnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;ACxCC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA,4BAA4B,YAAY;AACxC;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA,iCAAiC,8CAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8CAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,KAAK,EAAC;;;;;;;;;;;;;;;;;AClFrB;AAC4B;AAC8E;AAC1G;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA,yBAAyB,8CAAK;AAC9B;AACA;AACA;AACA;AACA;AACA,mDAAmD,gBAAgB;AACnE;AACA;AACA;AACA;AACA;AACA,kCAAkC,kDAAkD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yDAAa;AAC1C;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA,6BAA6B,mDAAO;AACpC;AACA;AACA,6BAA6B,oDAAQ;AACrC;AACA;AACA,6BAA6B,kDAAM;AACnC;AACA;AACA,6BAA6B,qDAAS;AACtC;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,SAAS,EAAC;;;;;;;;;;;;;;;;;ACrDzB,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C,yBAAyB,IAAI;AAC3G,6CAA6C,yBAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,0DAAe;AAC5D;AACA;AACA,8DAA8D,yBAAyB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gBAAgB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,OAAO,EAAC;AACvB;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;UCtOD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;ACNoC;AACJ;AAChC,8BAA8B;AAC9B;AACA,QAAQ,kDAAS;AACjB;AACA;AACA,sBAAsB,gDAAO;AAC7B,KAAK;AACL,sBAAsB,gDAAO;AAC7B,KAAK;AACL,CAAC","sources":["webpack:///./node_modules/@openmeteo/sdk/aggregation.js","webpack:///./node_modules/@openmeteo/sdk/model.js","webpack:///./node_modules/@openmeteo/sdk/unit.js","webpack:///./node_modules/@openmeteo/sdk/variable-with-values.js","webpack:///./node_modules/@openmeteo/sdk/variable.js","webpack:///./node_modules/@openmeteo/sdk/variables-with-time.js","webpack:///./node_modules/@openmeteo/sdk/weather-api-response.js","webpack:///./node_modules/flatbuffers/mjs/builder.js","webpack:///./node_modules/flatbuffers/mjs/byte-buffer.js","webpack:///./node_modules/flatbuffers/mjs/constants.js","webpack:///./node_modules/flatbuffers/mjs/encoding.js","webpack:///./node_modules/flatbuffers/mjs/flatbuffers.js","webpack:///./node_modules/flatbuffers/mjs/utils.js","webpack:///./node_modules/openmeteo/lib/index.js","webpack:///./src/color-schemes.ts","webpack:///./src/crack.ts","webpack:///./src/hsl.ts","webpack:///./src/rgb.ts","webpack:///./src/sand-painter.ts","webpack:///./src/state.ts","webpack:///./src/substrate.ts","webpack:///./src/weather.ts","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///./src/launch.ts"],"sourcesContent":["\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Aggregation = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Aggregation;\n(function (Aggregation) {\n Aggregation[Aggregation[\"none\"] = 0] = \"none\";\n Aggregation[Aggregation[\"minimum\"] = 1] = \"minimum\";\n Aggregation[Aggregation[\"maximum\"] = 2] = \"maximum\";\n Aggregation[Aggregation[\"mean\"] = 3] = \"mean\";\n Aggregation[Aggregation[\"p10\"] = 4] = \"p10\";\n Aggregation[Aggregation[\"p25\"] = 5] = \"p25\";\n Aggregation[Aggregation[\"median\"] = 6] = \"median\";\n Aggregation[Aggregation[\"p75\"] = 7] = \"p75\";\n Aggregation[Aggregation[\"p90\"] = 8] = \"p90\";\n Aggregation[Aggregation[\"dominant\"] = 9] = \"dominant\";\n Aggregation[Aggregation[\"sum\"] = 10] = \"sum\";\n Aggregation[Aggregation[\"spread\"] = 11] = \"spread\";\n})(Aggregation || (exports.Aggregation = Aggregation = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Model = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Model;\n(function (Model) {\n Model[Model[\"undefined\"] = 0] = \"undefined\";\n Model[Model[\"best_match\"] = 1] = \"best_match\";\n Model[Model[\"gfs_seamless\"] = 2] = \"gfs_seamless\";\n Model[Model[\"gfs_global\"] = 3] = \"gfs_global\";\n Model[Model[\"gfs_hrrr\"] = 4] = \"gfs_hrrr\";\n Model[Model[\"meteofrance_seamless\"] = 5] = \"meteofrance_seamless\";\n Model[Model[\"meteofrance_arpege_seamless\"] = 6] = \"meteofrance_arpege_seamless\";\n Model[Model[\"meteofrance_arpege_world\"] = 7] = \"meteofrance_arpege_world\";\n Model[Model[\"meteofrance_arpege_europe\"] = 8] = \"meteofrance_arpege_europe\";\n Model[Model[\"meteofrance_arome_seamless\"] = 9] = \"meteofrance_arome_seamless\";\n Model[Model[\"meteofrance_arome_france\"] = 10] = \"meteofrance_arome_france\";\n Model[Model[\"meteofrance_arome_france_hd\"] = 11] = \"meteofrance_arome_france_hd\";\n Model[Model[\"jma_seamless\"] = 12] = \"jma_seamless\";\n Model[Model[\"jma_msm\"] = 13] = \"jma_msm\";\n Model[Model[\"jms_gsm\"] = 14] = \"jms_gsm\";\n Model[Model[\"jma_gsm\"] = 15] = \"jma_gsm\";\n Model[Model[\"gem_seamless\"] = 16] = \"gem_seamless\";\n Model[Model[\"gem_global\"] = 17] = \"gem_global\";\n Model[Model[\"gem_regional\"] = 18] = \"gem_regional\";\n Model[Model[\"gem_hrdps_continental\"] = 19] = \"gem_hrdps_continental\";\n Model[Model[\"icon_seamless\"] = 20] = \"icon_seamless\";\n Model[Model[\"icon_global\"] = 21] = \"icon_global\";\n Model[Model[\"icon_eu\"] = 22] = \"icon_eu\";\n Model[Model[\"icon_d2\"] = 23] = \"icon_d2\";\n Model[Model[\"ecmwf_ifs04\"] = 24] = \"ecmwf_ifs04\";\n Model[Model[\"metno_nordic\"] = 25] = \"metno_nordic\";\n Model[Model[\"era5_seamless\"] = 26] = \"era5_seamless\";\n Model[Model[\"era5\"] = 27] = \"era5\";\n Model[Model[\"cerra\"] = 28] = \"cerra\";\n Model[Model[\"era5_land\"] = 29] = \"era5_land\";\n Model[Model[\"ecmwf_ifs\"] = 30] = \"ecmwf_ifs\";\n Model[Model[\"gwam\"] = 31] = \"gwam\";\n Model[Model[\"ewam\"] = 32] = \"ewam\";\n Model[Model[\"glofas_seamless_v3\"] = 33] = \"glofas_seamless_v3\";\n Model[Model[\"glofas_forecast_v3\"] = 34] = \"glofas_forecast_v3\";\n Model[Model[\"glofas_consolidated_v3\"] = 35] = \"glofas_consolidated_v3\";\n Model[Model[\"glofas_seamless_v4\"] = 36] = \"glofas_seamless_v4\";\n Model[Model[\"glofas_forecast_v4\"] = 37] = \"glofas_forecast_v4\";\n Model[Model[\"glofas_consolidated_v4\"] = 38] = \"glofas_consolidated_v4\";\n Model[Model[\"gfs025\"] = 39] = \"gfs025\";\n Model[Model[\"gfs05\"] = 40] = \"gfs05\";\n Model[Model[\"CMCC_CM2_VHR4\"] = 41] = \"CMCC_CM2_VHR4\";\n Model[Model[\"FGOALS_f3_H_highresSST\"] = 42] = \"FGOALS_f3_H_highresSST\";\n Model[Model[\"FGOALS_f3_H\"] = 43] = \"FGOALS_f3_H\";\n Model[Model[\"HiRAM_SIT_HR\"] = 44] = \"HiRAM_SIT_HR\";\n Model[Model[\"MRI_AGCM3_2_S\"] = 45] = \"MRI_AGCM3_2_S\";\n Model[Model[\"EC_Earth3P_HR\"] = 46] = \"EC_Earth3P_HR\";\n Model[Model[\"MPI_ESM1_2_XR\"] = 47] = \"MPI_ESM1_2_XR\";\n Model[Model[\"NICAM16_8S\"] = 48] = \"NICAM16_8S\";\n Model[Model[\"cams_europe\"] = 49] = \"cams_europe\";\n Model[Model[\"cams_global\"] = 50] = \"cams_global\";\n Model[Model[\"cfsv2\"] = 51] = \"cfsv2\";\n Model[Model[\"era5_ocean\"] = 52] = \"era5_ocean\";\n Model[Model[\"cma_grapes_global\"] = 53] = \"cma_grapes_global\";\n Model[Model[\"bom_access_global\"] = 54] = \"bom_access_global\";\n Model[Model[\"bom_access_global_ensemble\"] = 55] = \"bom_access_global_ensemble\";\n Model[Model[\"arpae_cosmo_seamless\"] = 56] = \"arpae_cosmo_seamless\";\n Model[Model[\"arpae_cosmo_2i\"] = 57] = \"arpae_cosmo_2i\";\n Model[Model[\"arpae_cosmo_2i_ruc\"] = 58] = \"arpae_cosmo_2i_ruc\";\n Model[Model[\"arpae_cosmo_5m\"] = 59] = \"arpae_cosmo_5m\";\n Model[Model[\"ecmwf_ifs025\"] = 60] = \"ecmwf_ifs025\";\n Model[Model[\"ecmwf_aifs025\"] = 61] = \"ecmwf_aifs025\";\n Model[Model[\"gfs013\"] = 62] = \"gfs013\";\n Model[Model[\"gfs_graphcast025\"] = 63] = \"gfs_graphcast025\";\n Model[Model[\"ecmwf_wam025\"] = 64] = \"ecmwf_wam025\";\n Model[Model[\"meteofrance_wave\"] = 65] = \"meteofrance_wave\";\n Model[Model[\"meteofrance_currents\"] = 66] = \"meteofrance_currents\";\n Model[Model[\"ecmwf_wam025_ensemble\"] = 67] = \"ecmwf_wam025_ensemble\";\n Model[Model[\"ncep_gfswave025\"] = 68] = \"ncep_gfswave025\";\n Model[Model[\"ncep_gefswave025\"] = 69] = \"ncep_gefswave025\";\n Model[Model[\"knmi_seamless\"] = 70] = \"knmi_seamless\";\n Model[Model[\"knmi_harmonie_arome_europe\"] = 71] = \"knmi_harmonie_arome_europe\";\n Model[Model[\"knmi_harmonie_arome_netherlands\"] = 72] = \"knmi_harmonie_arome_netherlands\";\n Model[Model[\"dmi_seamless\"] = 73] = \"dmi_seamless\";\n Model[Model[\"dmi_harmonie_arome_europe\"] = 74] = \"dmi_harmonie_arome_europe\";\n Model[Model[\"metno_seamless\"] = 75] = \"metno_seamless\";\n Model[Model[\"era5_ensemble\"] = 76] = \"era5_ensemble\";\n Model[Model[\"ecmwf_ifs_analysis\"] = 77] = \"ecmwf_ifs_analysis\";\n Model[Model[\"ecmwf_ifs_long_window\"] = 78] = \"ecmwf_ifs_long_window\";\n Model[Model[\"ecmwf_ifs_analysis_long_window\"] = 79] = \"ecmwf_ifs_analysis_long_window\";\n Model[Model[\"ukmo_global_deterministic_10km\"] = 80] = \"ukmo_global_deterministic_10km\";\n Model[Model[\"ukmo_uk_deterministic_2km\"] = 81] = \"ukmo_uk_deterministic_2km\";\n Model[Model[\"ukmo_seamless\"] = 82] = \"ukmo_seamless\";\n Model[Model[\"ncep_gfswave016\"] = 83] = \"ncep_gfswave016\";\n Model[Model[\"ncep_nbm_conus\"] = 84] = \"ncep_nbm_conus\";\n Model[Model[\"ukmo_global_ensemble_20km\"] = 85] = \"ukmo_global_ensemble_20km\";\n Model[Model[\"ecmwf_aifs025_single\"] = 86] = \"ecmwf_aifs025_single\";\n Model[Model[\"jma_jaxa_himawari\"] = 87] = \"jma_jaxa_himawari\";\n Model[Model[\"eumetsat_sarah3\"] = 88] = \"eumetsat_sarah3\";\n Model[Model[\"eumetsat_lsa_saf_msg\"] = 89] = \"eumetsat_lsa_saf_msg\";\n Model[Model[\"eumetsat_lsa_saf_iodc\"] = 90] = \"eumetsat_lsa_saf_iodc\";\n Model[Model[\"satellite_radiation_seamless\"] = 91] = \"satellite_radiation_seamless\";\n Model[Model[\"kma_gdps\"] = 92] = \"kma_gdps\";\n Model[Model[\"kma_ldps\"] = 93] = \"kma_ldps\";\n Model[Model[\"kma_seamless\"] = 94] = \"kma_seamless\";\n Model[Model[\"italia_meteo_arpae_icon_2i\"] = 95] = \"italia_meteo_arpae_icon_2i\";\n})(Model || (exports.Model = Model = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Unit = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Unit;\n(function (Unit) {\n Unit[Unit[\"undefined\"] = 0] = \"undefined\";\n Unit[Unit[\"celsius\"] = 1] = \"celsius\";\n Unit[Unit[\"centimetre\"] = 2] = \"centimetre\";\n Unit[Unit[\"cubic_metre_per_cubic_metre\"] = 3] = \"cubic_metre_per_cubic_metre\";\n Unit[Unit[\"cubic_metre_per_second\"] = 4] = \"cubic_metre_per_second\";\n Unit[Unit[\"degree_direction\"] = 5] = \"degree_direction\";\n Unit[Unit[\"dimensionless_integer\"] = 6] = \"dimensionless_integer\";\n Unit[Unit[\"dimensionless\"] = 7] = \"dimensionless\";\n Unit[Unit[\"european_air_quality_index\"] = 8] = \"european_air_quality_index\";\n Unit[Unit[\"fahrenheit\"] = 9] = \"fahrenheit\";\n Unit[Unit[\"feet\"] = 10] = \"feet\";\n Unit[Unit[\"fraction\"] = 11] = \"fraction\";\n Unit[Unit[\"gdd_celsius\"] = 12] = \"gdd_celsius\";\n Unit[Unit[\"geopotential_metre\"] = 13] = \"geopotential_metre\";\n Unit[Unit[\"grains_per_cubic_metre\"] = 14] = \"grains_per_cubic_metre\";\n Unit[Unit[\"gram_per_kilogram\"] = 15] = \"gram_per_kilogram\";\n Unit[Unit[\"hectopascal\"] = 16] = \"hectopascal\";\n Unit[Unit[\"hours\"] = 17] = \"hours\";\n Unit[Unit[\"inch\"] = 18] = \"inch\";\n Unit[Unit[\"iso8601\"] = 19] = \"iso8601\";\n Unit[Unit[\"joule_per_kilogram\"] = 20] = \"joule_per_kilogram\";\n Unit[Unit[\"kelvin\"] = 21] = \"kelvin\";\n Unit[Unit[\"kilopascal\"] = 22] = \"kilopascal\";\n Unit[Unit[\"kilogram_per_square_metre\"] = 23] = \"kilogram_per_square_metre\";\n Unit[Unit[\"kilometres_per_hour\"] = 24] = \"kilometres_per_hour\";\n Unit[Unit[\"knots\"] = 25] = \"knots\";\n Unit[Unit[\"megajoule_per_square_metre\"] = 26] = \"megajoule_per_square_metre\";\n Unit[Unit[\"metre_per_second_not_unit_converted\"] = 27] = \"metre_per_second_not_unit_converted\";\n Unit[Unit[\"metre_per_second\"] = 28] = \"metre_per_second\";\n Unit[Unit[\"metre\"] = 29] = \"metre\";\n Unit[Unit[\"micrograms_per_cubic_metre\"] = 30] = \"micrograms_per_cubic_metre\";\n Unit[Unit[\"miles_per_hour\"] = 31] = \"miles_per_hour\";\n Unit[Unit[\"millimetre\"] = 32] = \"millimetre\";\n Unit[Unit[\"pascal\"] = 33] = \"pascal\";\n Unit[Unit[\"per_second\"] = 34] = \"per_second\";\n Unit[Unit[\"percentage\"] = 35] = \"percentage\";\n Unit[Unit[\"seconds\"] = 36] = \"seconds\";\n Unit[Unit[\"unix_time\"] = 37] = \"unix_time\";\n Unit[Unit[\"us_air_quality_index\"] = 38] = \"us_air_quality_index\";\n Unit[Unit[\"watt_per_square_metre\"] = 39] = \"watt_per_square_metre\";\n Unit[Unit[\"wmo_code\"] = 40] = \"wmo_code\";\n Unit[Unit[\"parts_per_million\"] = 41] = \"parts_per_million\";\n})(Unit || (exports.Unit = Unit = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VariableWithValues = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nconst flatbuffers = __importStar(require(\"flatbuffers\"));\nconst aggregation_js_1 = require(\"./aggregation.js\");\nconst unit_js_1 = require(\"./unit.js\");\nconst variable_js_1 = require(\"./variable.js\");\nclass VariableWithValues {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsVariableWithValues(bb, obj) {\n return (obj || new VariableWithValues()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsVariableWithValues(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new VariableWithValues()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n variable() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : variable_js_1.Variable.undefined;\n }\n unit() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : unit_js_1.Unit.undefined;\n }\n value() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n values(index) {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.readFloat32(this.bb.__vector(this.bb_pos + offset) + index * 4) : 0;\n }\n valuesLength() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n valuesArray() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? new Float32Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;\n }\n valuesInt64(index) {\n const offset = this.bb.__offset(this.bb_pos, 12);\n return offset ? this.bb.readInt64(this.bb.__vector(this.bb_pos + offset) + index * 8) : BigInt(0);\n }\n valuesInt64Length() {\n const offset = this.bb.__offset(this.bb_pos, 12);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n altitude() {\n const offset = this.bb.__offset(this.bb_pos, 14);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n aggregation() {\n const offset = this.bb.__offset(this.bb_pos, 16);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : aggregation_js_1.Aggregation.none;\n }\n pressureLevel() {\n const offset = this.bb.__offset(this.bb_pos, 18);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n depth() {\n const offset = this.bb.__offset(this.bb_pos, 20);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n depthTo() {\n const offset = this.bb.__offset(this.bb_pos, 22);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n ensembleMember() {\n const offset = this.bb.__offset(this.bb_pos, 24);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n previousDay() {\n const offset = this.bb.__offset(this.bb_pos, 26);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n}\nexports.VariableWithValues = VariableWithValues;\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Variable = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Variable;\n(function (Variable) {\n Variable[Variable[\"undefined\"] = 0] = \"undefined\";\n Variable[Variable[\"apparent_temperature\"] = 1] = \"apparent_temperature\";\n Variable[Variable[\"cape\"] = 2] = \"cape\";\n Variable[Variable[\"cloud_cover\"] = 3] = \"cloud_cover\";\n Variable[Variable[\"cloud_cover_high\"] = 4] = \"cloud_cover_high\";\n Variable[Variable[\"cloud_cover_low\"] = 5] = \"cloud_cover_low\";\n Variable[Variable[\"cloud_cover_mid\"] = 6] = \"cloud_cover_mid\";\n Variable[Variable[\"daylight_duration\"] = 7] = \"daylight_duration\";\n Variable[Variable[\"dew_point\"] = 8] = \"dew_point\";\n Variable[Variable[\"diffuse_radiation\"] = 9] = \"diffuse_radiation\";\n Variable[Variable[\"diffuse_radiation_instant\"] = 10] = \"diffuse_radiation_instant\";\n Variable[Variable[\"direct_normal_irradiance\"] = 11] = \"direct_normal_irradiance\";\n Variable[Variable[\"direct_normal_irradiance_instant\"] = 12] = \"direct_normal_irradiance_instant\";\n Variable[Variable[\"direct_radiation\"] = 13] = \"direct_radiation\";\n Variable[Variable[\"direct_radiation_instant\"] = 14] = \"direct_radiation_instant\";\n Variable[Variable[\"et0_fao_evapotranspiration\"] = 15] = \"et0_fao_evapotranspiration\";\n Variable[Variable[\"evapotranspiration\"] = 16] = \"evapotranspiration\";\n Variable[Variable[\"freezing_level_height\"] = 17] = \"freezing_level_height\";\n Variable[Variable[\"growing_degree_days\"] = 18] = \"growing_degree_days\";\n Variable[Variable[\"is_day\"] = 19] = \"is_day\";\n Variable[Variable[\"latent_heat_flux\"] = 20] = \"latent_heat_flux\";\n Variable[Variable[\"leaf_wetness_probability\"] = 21] = \"leaf_wetness_probability\";\n Variable[Variable[\"lifted_index\"] = 22] = \"lifted_index\";\n Variable[Variable[\"lightning_potential\"] = 23] = \"lightning_potential\";\n Variable[Variable[\"precipitation\"] = 24] = \"precipitation\";\n Variable[Variable[\"precipitation_hours\"] = 25] = \"precipitation_hours\";\n Variable[Variable[\"precipitation_probability\"] = 26] = \"precipitation_probability\";\n Variable[Variable[\"pressure_msl\"] = 27] = \"pressure_msl\";\n Variable[Variable[\"rain\"] = 28] = \"rain\";\n Variable[Variable[\"relative_humidity\"] = 29] = \"relative_humidity\";\n Variable[Variable[\"runoff\"] = 30] = \"runoff\";\n Variable[Variable[\"sensible_heat_flux\"] = 31] = \"sensible_heat_flux\";\n Variable[Variable[\"shortwave_radiation\"] = 32] = \"shortwave_radiation\";\n Variable[Variable[\"shortwave_radiation_instant\"] = 33] = \"shortwave_radiation_instant\";\n Variable[Variable[\"showers\"] = 34] = \"showers\";\n Variable[Variable[\"snow_depth\"] = 35] = \"snow_depth\";\n Variable[Variable[\"snow_height\"] = 36] = \"snow_height\";\n Variable[Variable[\"snowfall\"] = 37] = \"snowfall\";\n Variable[Variable[\"snowfall_height\"] = 38] = \"snowfall_height\";\n Variable[Variable[\"snowfall_water_equivalent\"] = 39] = \"snowfall_water_equivalent\";\n Variable[Variable[\"sunrise\"] = 40] = \"sunrise\";\n Variable[Variable[\"sunset\"] = 41] = \"sunset\";\n Variable[Variable[\"soil_moisture\"] = 42] = \"soil_moisture\";\n Variable[Variable[\"soil_moisture_index\"] = 43] = \"soil_moisture_index\";\n Variable[Variable[\"soil_temperature\"] = 44] = \"soil_temperature\";\n Variable[Variable[\"surface_pressure\"] = 45] = \"surface_pressure\";\n Variable[Variable[\"surface_temperature\"] = 46] = \"surface_temperature\";\n Variable[Variable[\"temperature\"] = 47] = \"temperature\";\n Variable[Variable[\"terrestrial_radiation\"] = 48] = \"terrestrial_radiation\";\n Variable[Variable[\"terrestrial_radiation_instant\"] = 49] = \"terrestrial_radiation_instant\";\n Variable[Variable[\"total_column_integrated_water_vapour\"] = 50] = \"total_column_integrated_water_vapour\";\n Variable[Variable[\"updraft\"] = 51] = \"updraft\";\n Variable[Variable[\"uv_index\"] = 52] = \"uv_index\";\n Variable[Variable[\"uv_index_clear_sky\"] = 53] = \"uv_index_clear_sky\";\n Variable[Variable[\"vapour_pressure_deficit\"] = 54] = \"vapour_pressure_deficit\";\n Variable[Variable[\"visibility\"] = 55] = \"visibility\";\n Variable[Variable[\"weather_code\"] = 56] = \"weather_code\";\n Variable[Variable[\"wind_direction\"] = 57] = \"wind_direction\";\n Variable[Variable[\"wind_gusts\"] = 58] = \"wind_gusts\";\n Variable[Variable[\"wind_speed\"] = 59] = \"wind_speed\";\n Variable[Variable[\"vertical_velocity\"] = 60] = \"vertical_velocity\";\n Variable[Variable[\"geopotential_height\"] = 61] = \"geopotential_height\";\n Variable[Variable[\"wet_bulb_temperature\"] = 62] = \"wet_bulb_temperature\";\n Variable[Variable[\"river_discharge\"] = 63] = \"river_discharge\";\n Variable[Variable[\"wave_height\"] = 64] = \"wave_height\";\n Variable[Variable[\"wave_period\"] = 65] = \"wave_period\";\n Variable[Variable[\"wave_direction\"] = 66] = \"wave_direction\";\n Variable[Variable[\"wind_wave_height\"] = 67] = \"wind_wave_height\";\n Variable[Variable[\"wind_wave_period\"] = 68] = \"wind_wave_period\";\n Variable[Variable[\"wind_wave_peak_period\"] = 69] = \"wind_wave_peak_period\";\n Variable[Variable[\"wind_wave_direction\"] = 70] = \"wind_wave_direction\";\n Variable[Variable[\"swell_wave_height\"] = 71] = \"swell_wave_height\";\n Variable[Variable[\"swell_wave_period\"] = 72] = \"swell_wave_period\";\n Variable[Variable[\"swell_wave_peak_period\"] = 73] = \"swell_wave_peak_period\";\n Variable[Variable[\"swell_wave_direction\"] = 74] = \"swell_wave_direction\";\n Variable[Variable[\"pm10\"] = 75] = \"pm10\";\n Variable[Variable[\"pm2p5\"] = 76] = \"pm2p5\";\n Variable[Variable[\"dust\"] = 77] = \"dust\";\n Variable[Variable[\"aerosol_optical_depth\"] = 78] = \"aerosol_optical_depth\";\n Variable[Variable[\"carbon_monoxide\"] = 79] = \"carbon_monoxide\";\n Variable[Variable[\"nitrogen_dioxide\"] = 80] = \"nitrogen_dioxide\";\n Variable[Variable[\"ammonia\"] = 81] = \"ammonia\";\n Variable[Variable[\"ozone\"] = 82] = \"ozone\";\n Variable[Variable[\"sulphur_dioxide\"] = 83] = \"sulphur_dioxide\";\n Variable[Variable[\"alder_pollen\"] = 84] = \"alder_pollen\";\n Variable[Variable[\"birch_pollen\"] = 85] = \"birch_pollen\";\n Variable[Variable[\"grass_pollen\"] = 86] = \"grass_pollen\";\n Variable[Variable[\"mugwort_pollen\"] = 87] = \"mugwort_pollen\";\n Variable[Variable[\"olive_pollen\"] = 88] = \"olive_pollen\";\n Variable[Variable[\"ragweed_pollen\"] = 89] = \"ragweed_pollen\";\n Variable[Variable[\"european_aqi\"] = 90] = \"european_aqi\";\n Variable[Variable[\"european_aqi_pm2p5\"] = 91] = \"european_aqi_pm2p5\";\n Variable[Variable[\"european_aqi_pm10\"] = 92] = \"european_aqi_pm10\";\n Variable[Variable[\"european_aqi_nitrogen_dioxide\"] = 93] = \"european_aqi_nitrogen_dioxide\";\n Variable[Variable[\"european_aqi_ozone\"] = 94] = \"european_aqi_ozone\";\n Variable[Variable[\"european_aqi_sulphur_dioxide\"] = 95] = \"european_aqi_sulphur_dioxide\";\n Variable[Variable[\"us_aqi\"] = 96] = \"us_aqi\";\n Variable[Variable[\"us_aqi_pm2p5\"] = 97] = \"us_aqi_pm2p5\";\n Variable[Variable[\"us_aqi_pm10\"] = 98] = \"us_aqi_pm10\";\n Variable[Variable[\"us_aqi_nitrogen_dioxide\"] = 99] = \"us_aqi_nitrogen_dioxide\";\n Variable[Variable[\"us_aqi_ozone\"] = 100] = \"us_aqi_ozone\";\n Variable[Variable[\"us_aqi_sulphur_dioxide\"] = 101] = \"us_aqi_sulphur_dioxide\";\n Variable[Variable[\"us_aqi_carbon_monoxide\"] = 102] = \"us_aqi_carbon_monoxide\";\n Variable[Variable[\"sunshine_duration\"] = 103] = \"sunshine_duration\";\n Variable[Variable[\"convective_inhibition\"] = 104] = \"convective_inhibition\";\n Variable[Variable[\"shortwave_radiation_clear_sky\"] = 105] = \"shortwave_radiation_clear_sky\";\n Variable[Variable[\"global_tilted_irradiance\"] = 106] = \"global_tilted_irradiance\";\n Variable[Variable[\"global_tilted_irradiance_instant\"] = 107] = \"global_tilted_irradiance_instant\";\n Variable[Variable[\"ocean_current_velocity\"] = 108] = \"ocean_current_velocity\";\n Variable[Variable[\"ocean_current_direction\"] = 109] = \"ocean_current_direction\";\n Variable[Variable[\"cloud_base\"] = 110] = \"cloud_base\";\n Variable[Variable[\"cloud_top\"] = 111] = \"cloud_top\";\n Variable[Variable[\"mass_density\"] = 112] = \"mass_density\";\n Variable[Variable[\"boundary_layer_height\"] = 113] = \"boundary_layer_height\";\n Variable[Variable[\"formaldehyde\"] = 114] = \"formaldehyde\";\n Variable[Variable[\"glyoxal\"] = 115] = \"glyoxal\";\n Variable[Variable[\"non_methane_volatile_organic_compounds\"] = 116] = \"non_methane_volatile_organic_compounds\";\n Variable[Variable[\"pm10_wildfires\"] = 117] = \"pm10_wildfires\";\n Variable[Variable[\"peroxyacyl_nitrates\"] = 118] = \"peroxyacyl_nitrates\";\n Variable[Variable[\"secondary_inorganic_aerosol\"] = 119] = \"secondary_inorganic_aerosol\";\n Variable[Variable[\"residential_elementary_carbon\"] = 120] = \"residential_elementary_carbon\";\n Variable[Variable[\"total_elementary_carbon\"] = 121] = \"total_elementary_carbon\";\n Variable[Variable[\"pm2_5_total_organic_matter\"] = 122] = \"pm2_5_total_organic_matter\";\n Variable[Variable[\"sea_salt_aerosol\"] = 123] = \"sea_salt_aerosol\";\n Variable[Variable[\"nitrogen_monoxide\"] = 124] = \"nitrogen_monoxide\";\n Variable[Variable[\"thunderstorm_probability\"] = 125] = \"thunderstorm_probability\";\n Variable[Variable[\"rain_probability\"] = 126] = \"rain_probability\";\n Variable[Variable[\"freezing_rain_probability\"] = 127] = \"freezing_rain_probability\";\n Variable[Variable[\"ice_pellets_probability\"] = 128] = \"ice_pellets_probability\";\n Variable[Variable[\"snowfall_probability\"] = 129] = \"snowfall_probability\";\n Variable[Variable[\"carbon_dioxide\"] = 130] = \"carbon_dioxide\";\n Variable[Variable[\"methane\"] = 131] = \"methane\";\n Variable[Variable[\"sea_level_height_msl\"] = 132] = \"sea_level_height_msl\";\n Variable[Variable[\"sea_surface_temperature\"] = 133] = \"sea_surface_temperature\";\n Variable[Variable[\"invert_barometer_height\"] = 134] = \"invert_barometer_height\";\n Variable[Variable[\"hail\"] = 135] = \"hail\";\n Variable[Variable[\"albedo\"] = 136] = \"albedo\";\n Variable[Variable[\"precipitation_type\"] = 137] = \"precipitation_type\";\n Variable[Variable[\"convective_cloud_base\"] = 138] = \"convective_cloud_base\";\n Variable[Variable[\"convective_cloud_top\"] = 139] = \"convective_cloud_top\";\n Variable[Variable[\"snow_depth_water_equivalent\"] = 140] = \"snow_depth_water_equivalent\";\n Variable[Variable[\"secondary_swell_wave_height\"] = 141] = \"secondary_swell_wave_height\";\n Variable[Variable[\"secondary_swell_wave_period\"] = 142] = \"secondary_swell_wave_period\";\n Variable[Variable[\"secondary_swell_wave_peak_period\"] = 143] = \"secondary_swell_wave_peak_period\";\n Variable[Variable[\"secondary_swell_wave_direction\"] = 144] = \"secondary_swell_wave_direction\";\n Variable[Variable[\"tertiary_swell_wave_height\"] = 145] = \"tertiary_swell_wave_height\";\n Variable[Variable[\"tertiary_swell_wave_period\"] = 146] = \"tertiary_swell_wave_period\";\n Variable[Variable[\"tertiary_swell_wave_peak_period\"] = 147] = \"tertiary_swell_wave_peak_period\";\n Variable[Variable[\"tertiary_swell_wave_direction\"] = 148] = \"tertiary_swell_wave_direction\";\n})(Variable || (exports.Variable = Variable = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VariablesWithTime = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nconst flatbuffers = __importStar(require(\"flatbuffers\"));\nconst variable_with_values_js_1 = require(\"./variable-with-values.js\");\nclass VariablesWithTime {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsVariablesWithTime(bb, obj) {\n return (obj || new VariablesWithTime()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsVariablesWithTime(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new VariablesWithTime()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n time() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt('0');\n }\n timeEnd() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt('0');\n }\n interval() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n }\n variables(index, obj) {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? (obj || new variable_with_values_js_1.VariableWithValues()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n }\n variablesLength() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n}\nexports.VariablesWithTime = VariablesWithTime;\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WeatherApiResponse = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nconst flatbuffers = __importStar(require(\"flatbuffers\"));\nconst model_js_1 = require(\"./model.js\");\nconst variables_with_time_js_1 = require(\"./variables-with-time.js\");\nclass WeatherApiResponse {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsWeatherApiResponse(bb, obj) {\n return (obj || new WeatherApiResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsWeatherApiResponse(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new WeatherApiResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n latitude() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n longitude() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n elevation() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n generationTimeMilliseconds() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n locationId() {\n const offset = this.bb.__offset(this.bb_pos, 12);\n return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt('0');\n }\n model() {\n const offset = this.bb.__offset(this.bb_pos, 14);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : model_js_1.Model.undefined;\n }\n utcOffsetSeconds() {\n const offset = this.bb.__offset(this.bb_pos, 16);\n return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n }\n timezone(optionalEncoding) {\n const offset = this.bb.__offset(this.bb_pos, 18);\n return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n }\n timezoneAbbreviation(optionalEncoding) {\n const offset = this.bb.__offset(this.bb_pos, 20);\n return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n }\n current(obj) {\n const offset = this.bb.__offset(this.bb_pos, 22);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n daily(obj) {\n const offset = this.bb.__offset(this.bb_pos, 24);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n hourly(obj) {\n const offset = this.bb.__offset(this.bb_pos, 26);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n minutely15(obj) {\n const offset = this.bb.__offset(this.bb_pos, 28);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n sixHourly(obj) {\n const offset = this.bb.__offset(this.bb_pos, 30);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n}\nexports.WeatherApiResponse = WeatherApiResponse;\n","import { ByteBuffer } from \"./byte-buffer.js\";\nimport { SIZEOF_SHORT, SIZE_PREFIX_LENGTH, SIZEOF_INT, FILE_IDENTIFIER_LENGTH } from \"./constants.js\";\nexport class Builder {\n /**\n * Create a FlatBufferBuilder.\n */\n constructor(opt_initial_size) {\n /** Minimum alignment encountered so far. */\n this.minalign = 1;\n /** The vtable for the current table. */\n this.vtable = null;\n /** The amount of fields we're actually using. */\n this.vtable_in_use = 0;\n /** Whether we are currently serializing a table. */\n this.isNested = false;\n /** Starting offset of the current struct/table. */\n this.object_start = 0;\n /** List of offsets of all vtables. */\n this.vtables = [];\n /** For the current vector being built. */\n this.vector_num_elems = 0;\n /** False omits default values from the serialized data */\n this.force_defaults = false;\n this.string_maps = null;\n this.text_encoder = new TextEncoder();\n let initial_size;\n if (!opt_initial_size) {\n initial_size = 1024;\n }\n else {\n initial_size = opt_initial_size;\n }\n /**\n * @type {ByteBuffer}\n * @private\n */\n this.bb = ByteBuffer.allocate(initial_size);\n this.space = initial_size;\n }\n clear() {\n this.bb.clear();\n this.space = this.bb.capacity();\n this.minalign = 1;\n this.vtable = null;\n this.vtable_in_use = 0;\n this.isNested = false;\n this.object_start = 0;\n this.vtables = [];\n this.vector_num_elems = 0;\n this.force_defaults = false;\n this.string_maps = null;\n }\n /**\n * In order to save space, fields that are set to their default value\n * don't get serialized into the buffer. Forcing defaults provides a\n * way to manually disable this optimization.\n *\n * @param forceDefaults true always serializes default values\n */\n forceDefaults(forceDefaults) {\n this.force_defaults = forceDefaults;\n }\n /**\n * Get the ByteBuffer representing the FlatBuffer. Only call this after you've\n * called finish(). The actual data starts at the ByteBuffer's current position,\n * not necessarily at 0.\n */\n dataBuffer() {\n return this.bb;\n }\n /**\n * Get the bytes representing the FlatBuffer. Only call this after you've\n * called finish().\n */\n asUint8Array() {\n return this.bb.bytes().subarray(this.bb.position(), this.bb.position() + this.offset());\n }\n /**\n * Prepare to write an element of `size` after `additional_bytes` have been\n * written, e.g. if you write a string, you need to align such the int length\n * field is aligned to 4 bytes, and the string data follows it directly. If all\n * you need to do is alignment, `additional_bytes` will be 0.\n *\n * @param size This is the of the new element to write\n * @param additional_bytes The padding size\n */\n prep(size, additional_bytes) {\n // Track the biggest thing we've ever aligned to.\n if (size > this.minalign) {\n this.minalign = size;\n }\n // Find the amount of alignment needed such that `size` is properly\n // aligned after `additional_bytes`\n const align_size = ((~(this.bb.capacity() - this.space + additional_bytes)) + 1) & (size - 1);\n // Reallocate the buffer if needed.\n while (this.space < align_size + size + additional_bytes) {\n const old_buf_size = this.bb.capacity();\n this.bb = Builder.growByteBuffer(this.bb);\n this.space += this.bb.capacity() - old_buf_size;\n }\n this.pad(align_size);\n }\n pad(byte_size) {\n for (let i = 0; i < byte_size; i++) {\n this.bb.writeInt8(--this.space, 0);\n }\n }\n writeInt8(value) {\n this.bb.writeInt8(this.space -= 1, value);\n }\n writeInt16(value) {\n this.bb.writeInt16(this.space -= 2, value);\n }\n writeInt32(value) {\n this.bb.writeInt32(this.space -= 4, value);\n }\n writeInt64(value) {\n this.bb.writeInt64(this.space -= 8, value);\n }\n writeFloat32(value) {\n this.bb.writeFloat32(this.space -= 4, value);\n }\n writeFloat64(value) {\n this.bb.writeFloat64(this.space -= 8, value);\n }\n /**\n * Add an `int8` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int8` to add the buffer.\n */\n addInt8(value) {\n this.prep(1, 0);\n this.writeInt8(value);\n }\n /**\n * Add an `int16` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int16` to add the buffer.\n */\n addInt16(value) {\n this.prep(2, 0);\n this.writeInt16(value);\n }\n /**\n * Add an `int32` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int32` to add the buffer.\n */\n addInt32(value) {\n this.prep(4, 0);\n this.writeInt32(value);\n }\n /**\n * Add an `int64` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int64` to add the buffer.\n */\n addInt64(value) {\n this.prep(8, 0);\n this.writeInt64(value);\n }\n /**\n * Add a `float32` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `float32` to add the buffer.\n */\n addFloat32(value) {\n this.prep(4, 0);\n this.writeFloat32(value);\n }\n /**\n * Add a `float64` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `float64` to add the buffer.\n */\n addFloat64(value) {\n this.prep(8, 0);\n this.writeFloat64(value);\n }\n addFieldInt8(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt8(value);\n this.slot(voffset);\n }\n }\n addFieldInt16(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt16(value);\n this.slot(voffset);\n }\n }\n addFieldInt32(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt32(value);\n this.slot(voffset);\n }\n }\n addFieldInt64(voffset, value, defaultValue) {\n if (this.force_defaults || value !== defaultValue) {\n this.addInt64(value);\n this.slot(voffset);\n }\n }\n addFieldFloat32(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addFloat32(value);\n this.slot(voffset);\n }\n }\n addFieldFloat64(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addFloat64(value);\n this.slot(voffset);\n }\n }\n addFieldOffset(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addOffset(value);\n this.slot(voffset);\n }\n }\n /**\n * Structs are stored inline, so nothing additional is being added. `d` is always 0.\n */\n addFieldStruct(voffset, value, defaultValue) {\n if (value != defaultValue) {\n this.nested(value);\n this.slot(voffset);\n }\n }\n /**\n * Structures are always stored inline, they need to be created right\n * where they're used. You'll get this assertion failure if you\n * created it elsewhere.\n */\n nested(obj) {\n if (obj != this.offset()) {\n throw new TypeError('FlatBuffers: struct must be serialized inline.');\n }\n }\n /**\n * Should not be creating any other object, string or vector\n * while an object is being constructed\n */\n notNested() {\n if (this.isNested) {\n throw new TypeError('FlatBuffers: object serialization must not be nested.');\n }\n }\n /**\n * Set the current vtable at `voffset` to the current location in the buffer.\n */\n slot(voffset) {\n if (this.vtable !== null)\n this.vtable[voffset] = this.offset();\n }\n /**\n * @returns Offset relative to the end of the buffer.\n */\n offset() {\n return this.bb.capacity() - this.space;\n }\n /**\n * Doubles the size of the backing ByteBuffer and copies the old data towards\n * the end of the new buffer (since we build the buffer backwards).\n *\n * @param bb The current buffer with the existing data\n * @returns A new byte buffer with the old data copied\n * to it. The data is located at the end of the buffer.\n *\n * uint8Array.set() formally takes {Array|ArrayBufferView}, so to pass\n * it a uint8Array we need to suppress the type check:\n * @suppress {checkTypes}\n */\n static growByteBuffer(bb) {\n const old_buf_size = bb.capacity();\n // Ensure we don't grow beyond what fits in an int.\n if (old_buf_size & 0xC0000000) {\n throw new Error('FlatBuffers: cannot grow buffer beyond 2 gigabytes.');\n }\n const new_buf_size = old_buf_size << 1;\n const nbb = ByteBuffer.allocate(new_buf_size);\n nbb.setPosition(new_buf_size - old_buf_size);\n nbb.bytes().set(bb.bytes(), new_buf_size - old_buf_size);\n return nbb;\n }\n /**\n * Adds on offset, relative to where it will be written.\n *\n * @param offset The offset to add.\n */\n addOffset(offset) {\n this.prep(SIZEOF_INT, 0); // Ensure alignment is already done.\n this.writeInt32(this.offset() - offset + SIZEOF_INT);\n }\n /**\n * Start encoding a new object in the buffer. Users will not usually need to\n * call this directly. The FlatBuffers compiler will generate helper methods\n * that call this method internally.\n */\n startObject(numfields) {\n this.notNested();\n if (this.vtable == null) {\n this.vtable = [];\n }\n this.vtable_in_use = numfields;\n for (let i = 0; i < numfields; i++) {\n this.vtable[i] = 0; // This will push additional elements as needed\n }\n this.isNested = true;\n this.object_start = this.offset();\n }\n /**\n * Finish off writing the object that is under construction.\n *\n * @returns The offset to the object inside `dataBuffer`\n */\n endObject() {\n if (this.vtable == null || !this.isNested) {\n throw new Error('FlatBuffers: endObject called without startObject');\n }\n this.addInt32(0);\n const vtableloc = this.offset();\n // Trim trailing zeroes.\n let i = this.vtable_in_use - 1;\n // eslint-disable-next-line no-empty\n for (; i >= 0 && this.vtable[i] == 0; i--) { }\n const trimmed_size = i + 1;\n // Write out the current vtable.\n for (; i >= 0; i--) {\n // Offset relative to the start of the table.\n this.addInt16(this.vtable[i] != 0 ? vtableloc - this.vtable[i] : 0);\n }\n const standard_fields = 2; // The fields below:\n this.addInt16(vtableloc - this.object_start);\n const len = (trimmed_size + standard_fields) * SIZEOF_SHORT;\n this.addInt16(len);\n // Search for an existing vtable that matches the current one.\n let existing_vtable = 0;\n const vt1 = this.space;\n outer_loop: for (i = 0; i < this.vtables.length; i++) {\n const vt2 = this.bb.capacity() - this.vtables[i];\n if (len == this.bb.readInt16(vt2)) {\n for (let j = SIZEOF_SHORT; j < len; j += SIZEOF_SHORT) {\n if (this.bb.readInt16(vt1 + j) != this.bb.readInt16(vt2 + j)) {\n continue outer_loop;\n }\n }\n existing_vtable = this.vtables[i];\n break;\n }\n }\n if (existing_vtable) {\n // Found a match:\n // Remove the current vtable.\n this.space = this.bb.capacity() - vtableloc;\n // Point table to existing vtable.\n this.bb.writeInt32(this.space, existing_vtable - vtableloc);\n }\n else {\n // No match:\n // Add the location of the current vtable to the list of vtables.\n this.vtables.push(this.offset());\n // Point table to current vtable.\n this.bb.writeInt32(this.bb.capacity() - vtableloc, this.offset() - vtableloc);\n }\n this.isNested = false;\n return vtableloc;\n }\n /**\n * Finalize a buffer, poiting to the given `root_table`.\n */\n finish(root_table, opt_file_identifier, opt_size_prefix) {\n const size_prefix = opt_size_prefix ? SIZE_PREFIX_LENGTH : 0;\n if (opt_file_identifier) {\n const file_identifier = opt_file_identifier;\n this.prep(this.minalign, SIZEOF_INT +\n FILE_IDENTIFIER_LENGTH + size_prefix);\n if (file_identifier.length != FILE_IDENTIFIER_LENGTH) {\n throw new TypeError('FlatBuffers: file identifier must be length ' +\n FILE_IDENTIFIER_LENGTH);\n }\n for (let i = FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {\n this.writeInt8(file_identifier.charCodeAt(i));\n }\n }\n this.prep(this.minalign, SIZEOF_INT + size_prefix);\n this.addOffset(root_table);\n if (size_prefix) {\n this.addInt32(this.bb.capacity() - this.space);\n }\n this.bb.setPosition(this.space);\n }\n /**\n * Finalize a size prefixed buffer, pointing to the given `root_table`.\n */\n finishSizePrefixed(root_table, opt_file_identifier) {\n this.finish(root_table, opt_file_identifier, true);\n }\n /**\n * This checks a required field has been set in a given table that has\n * just been constructed.\n */\n requiredField(table, field) {\n const table_start = this.bb.capacity() - table;\n const vtable_start = table_start - this.bb.readInt32(table_start);\n const ok = field < this.bb.readInt16(vtable_start) &&\n this.bb.readInt16(vtable_start + field) != 0;\n // If this fails, the caller will show what field needs to be set.\n if (!ok) {\n throw new TypeError('FlatBuffers: field ' + field + ' must be set');\n }\n }\n /**\n * Start a new array/vector of objects. Users usually will not call\n * this directly. The FlatBuffers compiler will create a start/end\n * method for vector types in generated code.\n *\n * @param elem_size The size of each element in the array\n * @param num_elems The number of elements in the array\n * @param alignment The alignment of the array\n */\n startVector(elem_size, num_elems, alignment) {\n this.notNested();\n this.vector_num_elems = num_elems;\n this.prep(SIZEOF_INT, elem_size * num_elems);\n this.prep(alignment, elem_size * num_elems); // Just in case alignment > int.\n }\n /**\n * Finish off the creation of an array and all its elements. The array must be\n * created with `startVector`.\n *\n * @returns The offset at which the newly created array\n * starts.\n */\n endVector() {\n this.writeInt32(this.vector_num_elems);\n return this.offset();\n }\n /**\n * Encode the string `s` in the buffer using UTF-8. If the string passed has\n * already been seen, we return the offset of the already written string\n *\n * @param s The string to encode\n * @return The offset in the buffer where the encoded string starts\n */\n createSharedString(s) {\n if (!s) {\n return 0;\n }\n if (!this.string_maps) {\n this.string_maps = new Map();\n }\n if (this.string_maps.has(s)) {\n return this.string_maps.get(s);\n }\n const offset = this.createString(s);\n this.string_maps.set(s, offset);\n return offset;\n }\n /**\n * Encode the string `s` in the buffer using UTF-8. If a Uint8Array is passed\n * instead of a string, it is assumed to contain valid UTF-8 encoded data.\n *\n * @param s The string to encode\n * @return The offset in the buffer where the encoded string starts\n */\n createString(s) {\n if (s === null || s === undefined) {\n return 0;\n }\n let utf8;\n if (s instanceof Uint8Array) {\n utf8 = s;\n }\n else {\n utf8 = this.text_encoder.encode(s);\n }\n this.addInt8(0);\n this.startVector(1, utf8.length, 1);\n this.bb.setPosition(this.space -= utf8.length);\n this.bb.bytes().set(utf8, this.space);\n return this.endVector();\n }\n /**\n * Create a byte vector.\n *\n * @param v The bytes to add\n * @returns The offset in the buffer where the byte vector starts\n */\n createByteVector(v) {\n if (v === null || v === undefined) {\n return 0;\n }\n this.startVector(1, v.length, 1);\n this.bb.setPosition(this.space -= v.length);\n this.bb.bytes().set(v, this.space);\n return this.endVector();\n }\n /**\n * A helper function to pack an object\n *\n * @returns offset of obj\n */\n createObjectOffset(obj) {\n if (obj === null) {\n return 0;\n }\n if (typeof obj === 'string') {\n return this.createString(obj);\n }\n else {\n return obj.pack(this);\n }\n }\n /**\n * A helper function to pack a list of object\n *\n * @returns list of offsets of each non null object\n */\n createObjectOffsetList(list) {\n const ret = [];\n for (let i = 0; i < list.length; ++i) {\n const val = list[i];\n if (val !== null) {\n ret.push(this.createObjectOffset(val));\n }\n else {\n throw new TypeError('FlatBuffers: Argument for createObjectOffsetList cannot contain null.');\n }\n }\n return ret;\n }\n createStructOffsetList(list, startFunc) {\n startFunc(this, list.length);\n this.createObjectOffsetList(list.slice().reverse());\n return this.endVector();\n }\n}\n","import { FILE_IDENTIFIER_LENGTH, SIZEOF_INT } from \"./constants.js\";\nimport { int32, isLittleEndian, float32, float64 } from \"./utils.js\";\nimport { Encoding } from \"./encoding.js\";\nexport class ByteBuffer {\n /**\n * Create a new ByteBuffer with a given array of bytes (`Uint8Array`)\n */\n constructor(bytes_) {\n this.bytes_ = bytes_;\n this.position_ = 0;\n this.text_decoder_ = new TextDecoder();\n }\n /**\n * Create and allocate a new ByteBuffer with a given size.\n */\n static allocate(byte_size) {\n return new ByteBuffer(new Uint8Array(byte_size));\n }\n clear() {\n this.position_ = 0;\n }\n /**\n * Get the underlying `Uint8Array`.\n */\n bytes() {\n return this.bytes_;\n }\n /**\n * Get the buffer's position.\n */\n position() {\n return this.position_;\n }\n /**\n * Set the buffer's position.\n */\n setPosition(position) {\n this.position_ = position;\n }\n /**\n * Get the buffer's capacity.\n */\n capacity() {\n return this.bytes_.length;\n }\n readInt8(offset) {\n return this.readUint8(offset) << 24 >> 24;\n }\n readUint8(offset) {\n return this.bytes_[offset];\n }\n readInt16(offset) {\n return this.readUint16(offset) << 16 >> 16;\n }\n readUint16(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8;\n }\n readInt32(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8 | this.bytes_[offset + 2] << 16 | this.bytes_[offset + 3] << 24;\n }\n readUint32(offset) {\n return this.readInt32(offset) >>> 0;\n }\n readInt64(offset) {\n return BigInt.asIntN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readUint64(offset) {\n return BigInt.asUintN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readFloat32(offset) {\n int32[0] = this.readInt32(offset);\n return float32[0];\n }\n readFloat64(offset) {\n int32[isLittleEndian ? 0 : 1] = this.readInt32(offset);\n int32[isLittleEndian ? 1 : 0] = this.readInt32(offset + 4);\n return float64[0];\n }\n writeInt8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeUint8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeInt16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeUint16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeInt32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeUint32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeInt64(offset, value) {\n this.writeInt32(offset, Number(BigInt.asIntN(32, value)));\n this.writeInt32(offset + 4, Number(BigInt.asIntN(32, value >> BigInt(32))));\n }\n writeUint64(offset, value) {\n this.writeUint32(offset, Number(BigInt.asUintN(32, value)));\n this.writeUint32(offset + 4, Number(BigInt.asUintN(32, value >> BigInt(32))));\n }\n writeFloat32(offset, value) {\n float32[0] = value;\n this.writeInt32(offset, int32[0]);\n }\n writeFloat64(offset, value) {\n float64[0] = value;\n this.writeInt32(offset, int32[isLittleEndian ? 0 : 1]);\n this.writeInt32(offset + 4, int32[isLittleEndian ? 1 : 0]);\n }\n /**\n * Return the file identifier. Behavior is undefined for FlatBuffers whose\n * schema does not include a file_identifier (likely points at padding or the\n * start of a the root vtable).\n */\n getBufferIdentifier() {\n if (this.bytes_.length < this.position_ + SIZEOF_INT +\n FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: ByteBuffer is too short to contain an identifier.');\n }\n let result = \"\";\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n result += String.fromCharCode(this.readInt8(this.position_ + SIZEOF_INT + i));\n }\n return result;\n }\n /**\n * Look up a field in the vtable, return an offset into the object, or 0 if the\n * field is not present.\n */\n __offset(bb_pos, vtable_offset) {\n const vtable = bb_pos - this.readInt32(bb_pos);\n return vtable_offset < this.readInt16(vtable) ? this.readInt16(vtable + vtable_offset) : 0;\n }\n /**\n * Initialize any Table-derived type to point to the union at the given offset.\n */\n __union(t, offset) {\n t.bb_pos = offset + this.readInt32(offset);\n t.bb = this;\n return t;\n }\n /**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n *\n * To avoid the conversion to string, pass Encoding.UTF8_BYTES as the\n * \"optionalEncoding\" argument. This is useful for avoiding conversion when\n * the data will just be packaged back up in another FlatBuffer later on.\n *\n * @param offset\n * @param opt_encoding Defaults to UTF16_STRING\n */\n __string(offset, opt_encoding) {\n offset += this.readInt32(offset);\n const length = this.readInt32(offset);\n offset += SIZEOF_INT;\n const utf8bytes = this.bytes_.subarray(offset, offset + length);\n if (opt_encoding === Encoding.UTF8_BYTES)\n return utf8bytes;\n else\n return this.text_decoder_.decode(utf8bytes);\n }\n /**\n * Handle unions that can contain string as its member, if a Table-derived type then initialize it,\n * if a string then return a new one\n *\n * WARNING: strings are immutable in JS so we can't change the string that the user gave us, this\n * makes the behaviour of __union_with_string different compared to __union\n */\n __union_with_string(o, offset) {\n if (typeof o === 'string') {\n return this.__string(offset);\n }\n return this.__union(o, offset);\n }\n /**\n * Retrieve the relative offset stored at \"offset\"\n */\n __indirect(offset) {\n return offset + this.readInt32(offset);\n }\n /**\n * Get the start of data of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector(offset) {\n return offset + this.readInt32(offset) + SIZEOF_INT; // data starts after the length\n }\n /**\n * Get the length of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector_len(offset) {\n return this.readInt32(offset + this.readInt32(offset));\n }\n __has_identifier(ident) {\n if (ident.length != FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: file identifier must be length ' +\n FILE_IDENTIFIER_LENGTH);\n }\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n if (ident.charCodeAt(i) != this.readInt8(this.position() + SIZEOF_INT + i)) {\n return false;\n }\n }\n return true;\n }\n /**\n * A helper function for generating list for obj api\n */\n createScalarList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val);\n }\n }\n return ret;\n }\n /**\n * A helper function for generating list for obj api\n * @param listAccessor function that accepts an index and return data at that index\n * @param listLength listLength\n * @param res result list\n */\n createObjList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val.unpack());\n }\n }\n return ret;\n }\n}\n","export const SIZEOF_SHORT = 2;\nexport const SIZEOF_INT = 4;\nexport const FILE_IDENTIFIER_LENGTH = 4;\nexport const SIZE_PREFIX_LENGTH = 4;\n","export var Encoding;\n(function (Encoding) {\n Encoding[Encoding[\"UTF8_BYTES\"] = 1] = \"UTF8_BYTES\";\n Encoding[Encoding[\"UTF16_STRING\"] = 2] = \"UTF16_STRING\";\n})(Encoding || (Encoding = {}));\n","export { SIZEOF_SHORT } from './constants.js';\nexport { SIZEOF_INT } from './constants.js';\nexport { FILE_IDENTIFIER_LENGTH } from './constants.js';\nexport { SIZE_PREFIX_LENGTH } from './constants.js';\nexport { int32, float32, float64, isLittleEndian } from './utils.js';\nexport { Encoding } from './encoding.js';\nexport { Builder } from './builder.js';\nexport { ByteBuffer } from './byte-buffer.js';\n","export const int32 = new Int32Array(2);\nexport const float32 = new Float32Array(int32.buffer);\nexport const float64 = new Float64Array(int32.buffer);\nexport const isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchWeatherApi = fetchWeatherApi;\nconst flatbuffers_1 = require(\"flatbuffers\");\nconst weather_api_response_1 = require(\"@openmeteo/sdk/weather-api-response\");\nconst sleep = (ms) => new Promise(r => setTimeout(r, ms));\nfunction fetchRetried(url_1) {\n return __awaiter(this, arguments, void 0, function* (url, retries = 3, backoffFactor = 0.5, backoffMax = 2, fetchOptions = {}) {\n const statusToRetry = [500, 502, 504];\n const statusWithJsonError = [400, 429];\n let currentTry = 0;\n let response = yield fetch(url, fetchOptions);\n while (statusToRetry.includes(response.status)) {\n currentTry++;\n if (currentTry >= retries) {\n throw new Error(response.statusText);\n }\n const sleepMs = Math.min(backoffFactor * Math.pow(2, currentTry), backoffMax) * 1000;\n yield sleep(sleepMs);\n response = yield fetch(url, fetchOptions);\n }\n if (statusWithJsonError.includes(response.status)) {\n const json = yield response.json();\n if ('reason' in json) {\n throw new Error(json.reason);\n }\n throw new Error(response.statusText);\n }\n return response;\n });\n}\n/**\n * Retrieve data from the Open-Meteo weather API\n *\n * @param {string} url Server and endpoint. E.g. \"https://api.open-meteo.com/v1/forecast\"\n * @param {any} params URL parameter as an object\n * @param {number} [retries=3] Number of retries in case of an server error\n * @param {number} [backoffFactor=0.2] Exponential backoff factor to increase wait time after each retry\n * @param {number} [backoffMax=2] Maximum wait time between retries\n * @param {RequestInit} [fetchOptions={}] Additional fetch options such as headers, signal, etc.\n * @returns {Promise}\n */\nfunction fetchWeatherApi(url_1, params_1) {\n return __awaiter(this, arguments, void 0, function* (url, params, retries = 3, backoffFactor = 0.2, backoffMax = 2, fetchOptions = {}) {\n const urlParams = new URLSearchParams(params);\n urlParams.set('format', 'flatbuffers');\n const response = yield fetchRetried(`${url}?${urlParams.toString()}`, retries, backoffFactor, backoffMax, fetchOptions);\n const fb = new flatbuffers_1.ByteBuffer(new Uint8Array(yield response.arrayBuffer()));\n const results = [];\n let pos = 0;\n while (pos < fb.capacity()) {\n fb.setPosition(pos);\n const len = fb.readInt32(fb.position());\n results.push(weather_api_response_1.WeatherApiResponse.getSizePrefixedRootAsWeatherApiResponse(fb));\n pos += len + 4;\n }\n return results;\n });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport HSL from \"./hsl\";\nvar Scheme = /** @class */ (function () {\n function Scheme(initial) {\n this.primary = HSL.fromHex(initial);\n }\n Scheme.prototype.toString = function () {\n var values = this.colors.map(function (color) { return color.toString(16); }).join(\",\");\n return \"\".concat(this.constructor.name, \": \").concat(values);\n };\n return Scheme;\n}());\nexport { Scheme };\nvar Analogous = /** @class */ (function (_super) {\n __extends(Analogous, _super);\n function Analogous(initial) {\n var _this = _super.call(this, initial) || this;\n var left1 = new HSL(_this.primary.hue - 30, _this.primary.saturation, _this.primary.lightness);\n var left2 = new HSL(_this.primary.hue - 15, _this.primary.saturation, _this.primary.lightness);\n var right1 = new HSL(_this.primary.hue + 15, _this.primary.saturation, _this.primary.lightness);\n var right2 = new HSL(_this.primary.hue + 30, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n left1.toHex(),\n left2.toHex(),\n initial,\n right1.toHex(),\n right2.toHex()\n ];\n return _this;\n }\n return Analogous;\n}(Scheme));\nexport { Analogous };\nvar Monochromatic = /** @class */ (function (_super) {\n __extends(Monochromatic, _super);\n function Monochromatic(initial) {\n var _this = _super.call(this, initial) || this;\n var delta = _this.primary.lightness / 6;\n _this.colors = [\n initial,\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta).toHex(),\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta * 2).toHex(),\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta * 3).toHex(),\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta * 4).toHex()\n ];\n return _this;\n }\n return Monochromatic;\n}(Scheme));\nexport { Monochromatic };\nvar SplitComplementary = /** @class */ (function (_super) {\n __extends(SplitComplementary, _super);\n function SplitComplementary(initial) {\n var _this = _super.call(this, initial) || this;\n var complement = new HSL((_this.primary.hue + 180) % 360, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n initial,\n new HSL(complement.hue - 30, complement.saturation, complement.lightness).toHex(),\n new HSL(complement.hue + 30, complement.saturation, complement.lightness).toHex()\n ];\n return _this;\n }\n return SplitComplementary;\n}(Scheme));\nexport { SplitComplementary };\nvar Triadic = /** @class */ (function (_super) {\n __extends(Triadic, _super);\n function Triadic(initial) {\n var _this = _super.call(this, initial) || this;\n _this.colors = [\n initial,\n new HSL(_this.primary.hue - 120, _this.primary.saturation, _this.primary.lightness).toHex(),\n new HSL(_this.primary.hue + 120, _this.primary.saturation, _this.primary.lightness).toHex()\n ];\n return _this;\n }\n return Triadic;\n}(Scheme));\nexport { Triadic };\nvar Tetradic = /** @class */ (function (_super) {\n __extends(Tetradic, _super);\n function Tetradic(initial) {\n var _this = _super.call(this, initial) || this;\n var second = new HSL(_this.primary.hue + 45, _this.primary.saturation, _this.primary.lightness);\n var complement = new HSL(_this.primary.hue + 180, _this.primary.saturation, _this.primary.lightness);\n var secondComplement = new HSL(second.hue + 180, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n initial,\n second.toHex(),\n complement.toHex(),\n secondComplement.toHex()\n ];\n return _this;\n }\n return Tetradic;\n}(Scheme));\nexport { Tetradic };\nvar Square = /** @class */ (function (_super) {\n __extends(Square, _super);\n function Square(initial) {\n var _this = _super.call(this, initial) || this;\n var second = new HSL(_this.primary.hue + 90, _this.primary.saturation, _this.primary.lightness);\n var third = new HSL(_this.primary.hue + 180, _this.primary.saturation, _this.primary.lightness);\n var fourth = new HSL(second.hue + 270, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n initial,\n second.toHex(),\n third.toHex(),\n fourth.toHex()\n ];\n return _this;\n }\n return Square;\n}(Scheme));\nexport { Square };\n","import SandPainter from \"./sand-painter\";\nvar Crack = /** @class */ (function () {\n function Crack(state, x, y, angle) {\n this.x = 0;\n this.y = 0;\n this.angle = 0;\n this.state = state;\n this.painter = new SandPainter(this);\n this.start(x, y, angle);\n }\n Crack.prototype.start = function (x, y, angle) {\n this.x = x + .61 * Math.cos(angle * Math.PI / 180);\n this.y = y + .61 * Math.sin(angle * Math.PI / 180);\n var flip = Math.random() > 0.5;\n this.angle = angle + (90 + Math.floor(Math.random() * 4.1 - 2)) * (flip ? -1 : 1);\n };\n Crack.prototype.draw = function () {\n this.x += .42 * Math.cos(this.angle * Math.PI / 180);\n this.y += .42 * Math.sin(this.angle * Math.PI / 180);\n var fuzzX = this.x + (Math.random() * .66 - .33);\n var fuzzY = this.y + (Math.random() * .66 - .33);\n var context = this.state.canvas.getContext(\"2d\");\n context.fillStyle = \"#000\";\n context.fillRect(fuzzX, fuzzY, 1, 1);\n this.painter.render();\n var x = Math.floor(this.x);\n var y = Math.floor(this.y);\n if (this.state.isWithinBoundary(x, y)) {\n var angle = this.state.grid[x][y];\n if (angle > 10000) {\n this.state.grid[x][y] = Math.floor(this.angle);\n this.state.seeds.push({ x: x, y: y });\n }\n else if (this.state.grid[x][y] != Math.floor(this.angle)) {\n var entry = this.state.getNewEntry();\n this.start(entry.x, entry.y, entry.angle);\n }\n }\n else {\n var entry = this.state.getNewEntry();\n this.start(entry.x, entry.y, entry.angle);\n this.state.addCrack();\n }\n };\n return Crack;\n}());\nexport default Crack;\n","import RGB from \"./rgb\";\nvar HSL = /** @class */ (function () {\n function HSL(hue, saturation, lightness) {\n this.hue = (hue + 360) % 360;\n this.saturation = saturation;\n this.lightness = lightness;\n }\n // https://en.wikipedia.org/wiki/HSL_and_HSV\n HSL.fromRgb = function (rgb) {\n var redValue = rgb.red / 255, greenValue = rgb.green / 255, blueValue = rgb.blue / 255, max = Math.max(redValue, greenValue, blueValue), min = Math.min(redValue, greenValue, blueValue), chroma = max - min, lightness = .5 * (max + min), saturation = 1 - (3 / (redValue + greenValue + blueValue)) * Math.min(redValue, greenValue, blueValue);\n var huePrime = 0;\n if (chroma != 0) {\n if (redValue == max)\n huePrime = ((greenValue - blueValue) / chroma) % 6;\n else if (greenValue == max)\n huePrime = ((blueValue - redValue) / chroma) + 2;\n else\n huePrime = ((redValue - greenValue) / chroma) + 4;\n }\n return new HSL(huePrime * 60, saturation, lightness);\n };\n HSL.fromHex = function (color) {\n return HSL.fromRgb(RGB.fromHex(color));\n };\n HSL.prototype.toHex = function () {\n return RGB.fromHsl(this).toHex();\n };\n return HSL;\n}());\nexport default HSL;\n","var RGB = /** @class */ (function () {\n function RGB(red, green, blue) {\n this.red = Math.floor(red < 0 ? 0 : red > 255 ? 255 : red);\n this.green = Math.floor(green < 0 ? 0 : green > 255 ? 255 : green);\n this.blue = Math.floor(blue < 0 ? 0 : blue > 255 ? 255 : blue);\n }\n RGB.prototype.toHex = function () {\n return (this.red << 16) + (this.green << 8) + this.blue;\n };\n // https://en.wikipedia.org/wiki/HSL_and_HSV\n RGB.fromHsl = function (hsl) {\n var red = 0, green = 0, blue = 0;\n var chroma = (1 - Math.abs(2 * hsl.lightness - 1)) * hsl.saturation, range = hsl.hue / 60, intermediate = chroma * (1 - Math.abs(range % 2 - 1)), match = hsl.lightness - chroma / 2;\n if (range >= 0 && range < 1) {\n red = chroma;\n green = intermediate;\n }\n else if (range >= 1 && range < 2) {\n red = intermediate;\n green = chroma;\n }\n else if (range >= 2 && range < 3) {\n green = chroma;\n blue = intermediate;\n }\n else if (range >= 3 && range < 4) {\n green = intermediate;\n blue = chroma;\n }\n else if (range >= 4 && range < 5) {\n red = intermediate;\n blue = chroma;\n }\n else if (range >= 5 && range < 6) {\n red = chroma;\n blue = intermediate;\n }\n return new RGB((red + match) * 255, (green + match) * 255, (blue + match) * 255);\n };\n RGB.fromHex = function (color) {\n var red = color >> 16;\n var green = (color - (red << 16)) >> 8;\n var blue = color - (red << 16) - (green << 8);\n return new RGB(red, green, blue);\n };\n return RGB;\n}());\nexport default RGB;\n","var SandPainter = /** @class */ (function () {\n function SandPainter(crack) {\n this.crack = crack;\n this.color = this.crack.state.getNextColor();\n this.gain = Math.random() / 10;\n }\n SandPainter.prototype.render = function () {\n var state = this.crack.state, x = this.crack.x, y = this.crack.y, angle = this.crack.angle;\n var open = true, endX = x, endY = y;\n while (open) {\n endX += .81 * Math.sin(angle * Math.PI / 180);\n endY -= .81 * Math.cos(angle * Math.PI / 180);\n var gridX = Math.floor(endX);\n var gridY = Math.floor(endY);\n if (state.isWithinBoundary(gridX, gridY)) {\n open = state.grid[gridX][gridY] > 10000;\n }\n else {\n open = false;\n }\n }\n this.gain += (Math.random() / 10 - .05);\n if (this.gain < 0)\n this.gain = 0;\n if (this.gain > 1)\n this.gain = 1;\n var grains = 64;\n var hex = this.color.toString(16);\n var w = this.gain / (grains - 1); // some kind of multiplier\n var context = state.canvas.getContext(\"2d\");\n for (var i = 0; i < grains; i++) {\n var alpha = Math.floor((.1 - i / (grains * 10)) * 255);\n var paintX = x + (endX - x) * Math.sin(Math.sin(i * w));\n var paintY = y + (endY - y) * Math.sin(Math.sin(i * w));\n context.fillStyle = \"#\".concat(hex.padStart(6, \"0\")).concat(alpha.toString(16).padStart(2, \"0\"));\n context.fillRect(paintX, paintY, 1, 1);\n }\n };\n return SandPainter;\n}());\nexport default SandPainter;\n","import Crack from \"./crack\";\nvar State = /** @class */ (function () {\n function State(colors, maxCracks, canvas) {\n this.canvasColors = [\n \"rgb(27 27 27 / 90%)\",\n \"rgb(90 90 90 / 90%)\",\n \"rgb(126 126 126 / 90%)\",\n \"rgb(180 180 180 / 90%)\",\n \"rgb(255 255 255 / 90%)\",\n \"rgb(180 180 180 / 90%)\",\n \"rgb(126 126 126 / 90%)\",\n \"rgb(90 90 90 / 90%)\"\n ];\n this.canvasIndex = 0;\n this.colorIndex = 0;\n this.canvas = canvas;\n this.maxCracks = maxCracks;\n this.grid = [];\n this.colors = colors;\n this.cracks = [];\n this.seeds = [];\n this.init();\n }\n State.prototype.init = function (colors) {\n if (colors)\n this.colors = colors;\n this.cracks.length = 0;\n this.grid.length = 0;\n this.seeds.length = 0;\n this.colorIndex = 0;\n var height = this.canvas.height;\n var width = this.canvas.width;\n var context = this.canvas.getContext(\"2d\");\n context.fillStyle = this.canvasColors[this.canvasIndex++ % this.canvasColors.length];\n context.fillRect(0, 0, width, height);\n for (var x = 0; x < width; x++) {\n this.grid[x] = [];\n for (var y = 0; y < height; y++) {\n this.grid[x][y] = 10001;\n }\n }\n for (var i = 0; i < 3; i++) {\n var x = Math.floor(Math.random() * width);\n var y = Math.floor(Math.random() * height);\n var angle = Math.floor(Math.random() * 360);\n this.cracks.push(new Crack(this, x, y, angle));\n this.grid[x][y] = angle;\n }\n };\n State.prototype.addCrack = function () {\n if (this.cracks.length >= this.maxCracks)\n return;\n var _a = this.getNewEntry(), x = _a.x, y = _a.y, angle = _a.angle;\n this.cracks.push(new Crack(this, x, y, angle));\n };\n State.prototype.getNextColor = function () {\n return this.colors[this.colorIndex++ % this.colors.length];\n };\n State.prototype.isWithinBoundary = function (x, y) {\n return x >= 0 && x < this.canvas.width && y >= 0 && y < this.canvas.height;\n };\n State.prototype.getNewEntry = function () {\n if (!this.seeds.length) {\n var x = Math.floor(Math.random() * this.canvas.width);\n var y = Math.floor(Math.random() * this.canvas.height);\n var angle = this.grid[x][y];\n if (angle > 10000) {\n angle = Math.floor(Math.random() * 360);\n this.grid[x][y] = angle;\n }\n return { x: x, y: y, angle: angle };\n }\n var randomIndex = Math.floor(Math.random() * this.seeds.length);\n var entry = this.seeds.splice(randomIndex, 1)[0];\n return {\n x: entry.x,\n y: entry.y,\n angle: this.grid[entry.x][entry.y]\n };\n };\n return State;\n}());\nexport default State;\n","// TS attempt of http://www.complexification.net/gallery/machines/substrate/index.php by laniaung.me\nimport State from \"./state\";\nimport { Analogous, Monochromatic, SplitComplementary, Square, Tetradic, Triadic } from \"./color-schemes\";\nvar Substrate = /** @class */ (function () {\n function Substrate(maxCracks, colors) {\n if (!(colors === null || colors === void 0 ? void 0 : colors.length))\n colors = [0x3a1e3e, 0x7c2d3b, 0xb94f3c, 0xf4a462, 0xf9c54e]; // https://colormagic.app/palette/671eeb6c42273fc4c1bb1ac7\n var canvas = document.createElement(\"canvas\");\n canvas.width = document.body.clientWidth;\n canvas.height = document.body.clientHeight;\n document.body.appendChild(canvas);\n this.state = new State(colors, maxCracks, canvas);\n this.init();\n }\n Substrate.prototype.init = function () {\n var me = this;\n var draw = function () {\n for (var _i = 0, _a = me.state.cracks; _i < _a.length; _i++) {\n var crack = _a[_i];\n crack.draw();\n }\n requestAnimationFrame(draw);\n };\n setInterval(function () { return me.state.init(me.getRandomColorScheme()); }, 120 * 1000);\n draw();\n };\n Substrate.prototype.getRandomColorScheme = function () {\n var color = Math.floor(Math.random() * Math.pow(256, 3));\n var scheme;\n switch (Math.floor(Math.random() * 6)) {\n case 1:\n scheme = new Monochromatic(color);\n break;\n case 2:\n scheme = new SplitComplementary(color);\n break;\n case 3:\n scheme = new Triadic(color);\n break;\n case 4:\n scheme = new Tetradic(color);\n break;\n case 5:\n scheme = new Square(color);\n break;\n default:\n scheme = new Analogous(color);\n }\n console.info(scheme.toString());\n return scheme.colors;\n };\n return Substrate;\n}());\nexport default Substrate;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { fetchWeatherApi } from 'openmeteo';\nvar Weather = /** @class */ (function () {\n function Weather(latitude, longitude) {\n this.apiUrl = \"https://api.open-meteo.com/v1/forecast\";\n this.dailyVariables = [\"temperature_2m_max\", \"temperature_2m_min\", \"sunrise\", \"sunset\", \"uv_index_max\", \"precipitation_sum\", \"precipitation_hours\", \"wind_speed_10m_max\", \"wind_gusts_10m_max\", \"wind_direction_10m_dominant\"];\n this.hourlyVariables = [\"temperature_2m\", \"precipitation\", \"precipitation_probability\"];\n this.currentVariables = [\"temperature_2m\", \"relative_humidity_2m\", \"apparent_temperature\", \"precipitation\", \"wind_speed_10m\", \"wind_gusts_10m\", \"wind_direction_10m\", \"cloud_cover\"];\n this.hourly = [];\n this.daily = [];\n this.options = new WeatherOptions(latitude !== null && latitude !== void 0 ? latitude : 47.61002138071677, longitude !== null && longitude !== void 0 ? longitude : -122.17906310779568);\n var me = this;\n setInterval(function () { return me.fetchWeather().then(function () { return me.setDisplay(); }); }, 60 * 1000);\n me.fetchWeather().then(function () { return me.setDisplay(); });\n }\n Weather.prototype.fetchWeather = function () {\n return __awaiter(this, void 0, void 0, function () {\n var me, parameters, getData, responses, _i, responses_1, response, utcOffsetSeconds, current, hourly, daily, length_1, temperatures, precipitationTotals, precipitationProbabilities, i, length_2, maxTemperatures, minTemperatures, sunrise, sunset, maxUVs, precipitationTotals, precipitationHours, maxWindSpeeds, maxWindGusts, prominentWindDirections, i;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n me = this;\n parameters = __assign({}, me.options);\n getData = false;\n if (!me.lastFetched) {\n parameters[\"daily\"] = me.dailyVariables;\n parameters[\"hourly\"] = me.hourlyVariables;\n parameters[\"current\"] = me.currentVariables;\n me.lastFetched = new LastFetched();\n getData = true;\n }\n else {\n // Reasonable-ish timers?\n if (me.lastFetched.minutesSinceCurrent() > 15) {\n parameters[\"current\"] = me.currentVariables;\n me.lastFetched.current = new Date();\n getData = true;\n }\n if (me.lastFetched.hoursSinceHourly() > 3) {\n parameters[\"hourly\"] = me.hourlyVariables;\n me.lastFetched.hourly = new Date();\n getData = true;\n }\n if (me.lastFetched.hoursSinceDaily() > 8) {\n parameters[\"daily\"] = me.dailyVariables;\n me.lastFetched.daily = new Date();\n getData = true;\n }\n }\n if (!getData)\n return [2 /*return*/];\n return [4 /*yield*/, fetchWeatherApi(me.apiUrl, parameters)];\n case 1:\n responses = _a.sent();\n for (_i = 0, responses_1 = responses; _i < responses_1.length; _i++) {\n response = responses_1[_i];\n utcOffsetSeconds = response.utcOffsetSeconds();\n current = response.current();\n hourly = response.hourly();\n daily = response.daily();\n if (current != null) {\n me.current = {\n time: new Date(Number(current.time()) * 1000),\n temperature: current.variables(0).value(),\n humidity: current.variables(1).value(),\n feelsLike: current.variables(2).value(),\n precipitation: current.variables(3).value(),\n windSpeed: current.variables(4).value(),\n windGusts: current.variables(5).value(),\n windDirection: current.variables(6).value(),\n cloudCoverage: current.variables(7).value()\n };\n }\n if (hourly != null) {\n length_1 = Number(hourly.timeEnd() - hourly.time()) / hourly.interval();\n temperatures = hourly.variables(0).valuesArray();\n precipitationTotals = hourly.variables(1).valuesArray();\n precipitationProbabilities = hourly.variables(2).valuesArray();\n me.hourly.length = 0;\n for (i = 0; i < length_1; i++) {\n me.hourly.push({\n time: new Date((Number(hourly.time()) + i * hourly.interval() + utcOffsetSeconds) * 1000),\n temperature: temperatures[i],\n precipitation: precipitationTotals[i],\n precipitationProbability: precipitationProbabilities[i]\n });\n }\n }\n if (daily != null) {\n length_2 = Number(daily.timeEnd() - daily.time()) / daily.interval();\n maxTemperatures = daily.variables(0).valuesArray();\n minTemperatures = daily.variables(1).valuesArray();\n sunrise = daily.variables(2);\n sunset = daily.variables(3);\n maxUVs = daily.variables(4).valuesArray();\n precipitationTotals = daily.variables(5).valuesArray();\n precipitationHours = daily.variables(6).valuesArray();\n maxWindSpeeds = daily.variables(7).valuesArray();\n maxWindGusts = daily.variables(8).valuesArray();\n prominentWindDirections = daily.variables(9).valuesArray();\n me.daily.length = 0;\n for (i = 0; i < length_2; i++) {\n me.daily.push({\n time: new Date((Number(daily.time()) + i * daily.interval()) * 1000),\n maxTemperature: maxTemperatures[i],\n minTemperature: minTemperatures[i],\n sunrise: new Date((Number(sunrise.valuesInt64(i))) * 1000),\n sunset: new Date((Number(sunset.valuesInt64(i))) * 1000),\n maxUV: maxUVs[i],\n totalPrecipitation: precipitationTotals[i],\n hoursOfPrecipitation: precipitationHours[i],\n maxWindSpeed: maxWindSpeeds[i],\n maxWindGusts: maxWindGusts[i],\n prominentWindDirection: prominentWindDirections[i]\n });\n }\n }\n }\n return [2 /*return*/];\n }\n });\n });\n };\n Weather.prototype.setDisplay = function () {\n var panel = document.getElementById(\"weather-panel\");\n if (!panel) {\n panel = document.createElement(\"main\");\n panel.id = \"weather-panel\";\n document.body.appendChild(panel);\n }\n while (panel.firstChild)\n panel.removeChild(panel.firstChild);\n var currentSection = document.createElement(\"section\");\n currentSection.id = \"current-section\";\n panel.appendChild(currentSection);\n this.setDisplayCurrent(currentSection);\n };\n Weather.prototype.setDisplayCurrent = function (section) {\n var header = document.createElement(\"header\");\n header.textContent = \"Current\";\n section.appendChild(header);\n var list = document.createElement(\"dl\");\n for (var _i = 0, _a = Object.keys(this.current); _i < _a.length; _i++) {\n var key = _a[_i];\n var term = document.createElement(\"dt\");\n term.textContent = key;\n var value = document.createElement(\"dd\");\n value.textContent = this.current[key];\n list.append(term, value);\n }\n section.appendChild(list);\n };\n return Weather;\n}());\nexport default Weather;\nvar WeatherOptions = /** @class */ (function () {\n function WeatherOptions(latitude, longitude, timezone) {\n if (timezone === void 0) { timezone = \"America/Los_Angeles\"; }\n this.timezone = \"America/Los_Angeles\";\n this[\"wind_speed_unit\"] = \"mph\";\n this[\"temperature_unit\"] = \"fahrenheit\";\n this[\"precipitation_unit\"] = \"inch\";\n this.latitude = latitude;\n this.longitude = longitude;\n this.timezone = timezone;\n }\n return WeatherOptions;\n}());\nvar LastFetched = /** @class */ (function () {\n function LastFetched() {\n this.current = new Date();\n this.hourly = new Date();\n this.daily = new Date();\n }\n LastFetched.prototype.minutesSinceCurrent = function () {\n return (new Date().getTime() - this.current.getTime()) / 60000;\n };\n LastFetched.prototype.hoursSinceHourly = function () {\n return (new Date().getTime() - this.hourly.getTime()) / 3600000;\n };\n LastFetched.prototype.hoursSinceDaily = function () {\n return (new Date().getTime() - this.daily.getTime()) / 3600000;\n };\n return LastFetched;\n}());\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Substrate from \"./substrate\";\nimport Weather from \"./weather\";\nvar ready = function (func) { return document.readyState !== \"loading\" ? func() : document.addEventListener(\"DOMContentLoaded\", func); };\nready(function () {\n new Substrate(20);\n var weather;\n navigator.geolocation.getCurrentPosition(function (position) {\n weather = new Weather(position.coords.latitude, position.coords.longitude);\n }, function () {\n weather = new Weather();\n });\n});\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"main.js","mappings":";;;;;;;;;;AAAa;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kBAAkB,mBAAmB,mBAAmB;;;;;;;;;;;ACnB5C;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,YAAY,aAAa,aAAa;;;;;;;;;;;ACvG1B;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,WAAW,YAAY,YAAY;;;;;;;;;;;ACjDvB;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA,CAAC;AACD,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B;AAC1B;AACA,iCAAiC,mBAAO,CAAC,kEAAa;AACtD,yBAAyB,mBAAO,CAAC,sEAAkB;AACnD,kBAAkB,mBAAO,CAAC,wDAAW;AACrC,sBAAsB,mBAAO,CAAC,gEAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;;;;;;;;;;ACxHb;AACb;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,eAAe,gBAAgB,gBAAgB;;;;;;;;;;;AC5JnC;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA,CAAC;AACD,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB;AACzB;AACA,iCAAiC,mBAAO,CAAC,kEAAa;AACtD,kCAAkC,mBAAO,CAAC,wFAA2B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;;;;;;;;;;AC9EZ;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA,CAAC;AACD,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B;AAC1B;AACA,iCAAiC,mBAAO,CAAC,kEAAa;AACtD,mBAAmB,mBAAO,CAAC,0DAAY;AACvC,iCAAiC,mBAAO,CAAC,sFAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;;;;;;;;;;;;;;;;ACnHoB;AACwD;AAC/F;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,uDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8BAA8B;AACtE;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qDAAU,MAAM;AAClC,iDAAiD,qDAAU;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,mCAAmC;AACnC;AACA,uDAAuD,uDAAY;AACnE;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA,6BAA6B,uDAAY,EAAE,SAAS,KAAK,uDAAY;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6DAAkB;AAChE;AACA;AACA,qCAAqC,qDAAU;AAC/C,gBAAgB,iEAAsB;AACtC,0CAA0C,iEAAsB;AAChE;AACA,oBAAoB,iEAAsB;AAC1C;AACA,yBAAyB,iEAAsB,MAAM,QAAQ;AAC7D;AACA;AACA;AACA,iCAAiC,qDAAU;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qDAAU;AAC5B,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACphBoE;AACC;AAC5B;AAClC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,4CAAK;AACb,eAAe,8CAAO;AACtB;AACA;AACA,QAAQ,4CAAK,CAAC,qDAAc;AAC5B,QAAQ,4CAAK,CAAC,qDAAc;AAC5B,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf,gCAAgC,4CAAK;AACrC;AACA;AACA,QAAQ,8CAAO;AACf,gCAAgC,4CAAK,CAAC,qDAAc;AACpD,oCAAoC,4CAAK,CAAC,qDAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qDAAU;AAC5D,YAAY,iEAAsB;AAClC;AACA;AACA;AACA,wBAAwB,IAAI,iEAAsB,EAAE;AACpD,yEAAyE,qDAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qDAAU;AAC5B;AACA,6BAA6B,kDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qDAAU,EAAE;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iEAAsB;AAClD;AACA,gBAAgB,iEAAsB;AACtC;AACA,wBAAwB,IAAI,iEAAsB,EAAE;AACpD,uEAAuE,qDAAU;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtPO;AACA;AACA;AACA;;;;;;;;;;;;;;;ACHA;AACP;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJiB;AACF;AACY;AACJ;AACiB;AAC5B;AACF;AACO;;;;;;;;;;;;;;;;;;ACPvC;AACA;AACA;AACA;;;;;;;;;;;ACHM;AACb;AACA,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB;AACvB,sBAAsB,mBAAO,CAAC,kEAAa;AAC3C,+BAA+B,mBAAO,CAAC,kGAAqC;AAC5E;AACA;AACA,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,aAAa,gBAAgB;AACxC,aAAa;AACb;AACA;AACA,yIAAyI;AACzI;AACA;AACA,+CAA+C,IAAI,GAAG,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;ACnEA,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA,uBAAuB,4CAAG;AAC1B;AACA;AACA,wDAAwD,4BAA4B;AACpF;AACA;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA;AACA;AACA,wBAAwB,4CAAG;AAC3B,wBAAwB,4CAAG;AAC3B,yBAAyB,4CAAG;AAC5B,yBAAyB,4CAAG;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA,6BAA6B,4CAAG;AAChC;AACA;AACA,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4CAAG;AACnB,gBAAgB,4CAAG;AACnB;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB;AACA;AACA;AACA;AACA,yBAAyB,4CAAG;AAC5B,6BAA6B,4CAAG;AAChC,mCAAmC,4CAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,yBAAyB,4CAAG;AAC5B,wBAAwB,4CAAG;AAC3B,yBAAyB,4CAAG;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiB;;;;;;;;;;;;;;;;AChIuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qDAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,YAAY;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,KAAK,EAAC;;;;;;;;;;;;;;;;AC9CG;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4CAAG;AAC9B;AACA;AACA,eAAe,4CAAG;AAClB;AACA;AACA,CAAC;AACD,iEAAe,GAAG,EAAC;;;;;;;;;;;;;;;AC7BnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,GAAG,EAAC;;;;;;;;;;;;;;;AC/CnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;ACxCC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA,4BAA4B,YAAY;AACxC;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA,iCAAiC,8CAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8CAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,KAAK,EAAC;;;;;;;;;;;;;;;;;AClFrB;AAC4B;AAC8E;AAC1G;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA,yBAAyB,8CAAK;AAC9B;AACA;AACA;AACA;AACA;AACA,mDAAmD,gBAAgB;AACnE;AACA;AACA;AACA;AACA;AACA,kCAAkC,kDAAkD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yDAAa;AAC1C;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA,6BAA6B,mDAAO;AACpC;AACA;AACA,6BAA6B,oDAAQ;AACrC;AACA;AACA,6BAA6B,kDAAM;AACnC;AACA;AACA,6BAA6B,qDAAS;AACtC;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,SAAS,EAAC;;;;;;;;;;;;;;;;;ACrDzB,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mCAAmC;AACvG,kCAAkC,mEAAmE,mCAAmC,IAAI;AAC5I;AACA,kCAAkC,4CAA4C,yBAAyB,IAAI;AAC3G,6CAA6C,yBAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,6CAA6C,0DAAe;AAC5D;AACA;AACA,8DAA8D,yBAAyB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iEAAe,OAAO,EAAC;AACvB;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;UC7OD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;ACNoC;AACJ;AAChC,8BAA8B;AAC9B;AACA,QAAQ,kDAAS;AACjB;AACA;AACA,sBAAsB,gDAAO;AAC7B,KAAK;AACL,sBAAsB,gDAAO;AAC7B,KAAK;AACL,CAAC","sources":["webpack:///./node_modules/@openmeteo/sdk/aggregation.js","webpack:///./node_modules/@openmeteo/sdk/model.js","webpack:///./node_modules/@openmeteo/sdk/unit.js","webpack:///./node_modules/@openmeteo/sdk/variable-with-values.js","webpack:///./node_modules/@openmeteo/sdk/variable.js","webpack:///./node_modules/@openmeteo/sdk/variables-with-time.js","webpack:///./node_modules/@openmeteo/sdk/weather-api-response.js","webpack:///./node_modules/flatbuffers/mjs/builder.js","webpack:///./node_modules/flatbuffers/mjs/byte-buffer.js","webpack:///./node_modules/flatbuffers/mjs/constants.js","webpack:///./node_modules/flatbuffers/mjs/encoding.js","webpack:///./node_modules/flatbuffers/mjs/flatbuffers.js","webpack:///./node_modules/flatbuffers/mjs/utils.js","webpack:///./node_modules/openmeteo/lib/index.js","webpack:///./src/color-schemes.ts","webpack:///./src/crack.ts","webpack:///./src/hsl.ts","webpack:///./src/rgb.ts","webpack:///./src/sand-painter.ts","webpack:///./src/state.ts","webpack:///./src/substrate.ts","webpack:///./src/weather.ts","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///./src/launch.ts"],"sourcesContent":["\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Aggregation = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Aggregation;\n(function (Aggregation) {\n Aggregation[Aggregation[\"none\"] = 0] = \"none\";\n Aggregation[Aggregation[\"minimum\"] = 1] = \"minimum\";\n Aggregation[Aggregation[\"maximum\"] = 2] = \"maximum\";\n Aggregation[Aggregation[\"mean\"] = 3] = \"mean\";\n Aggregation[Aggregation[\"p10\"] = 4] = \"p10\";\n Aggregation[Aggregation[\"p25\"] = 5] = \"p25\";\n Aggregation[Aggregation[\"median\"] = 6] = \"median\";\n Aggregation[Aggregation[\"p75\"] = 7] = \"p75\";\n Aggregation[Aggregation[\"p90\"] = 8] = \"p90\";\n Aggregation[Aggregation[\"dominant\"] = 9] = \"dominant\";\n Aggregation[Aggregation[\"sum\"] = 10] = \"sum\";\n Aggregation[Aggregation[\"spread\"] = 11] = \"spread\";\n})(Aggregation || (exports.Aggregation = Aggregation = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Model = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Model;\n(function (Model) {\n Model[Model[\"undefined\"] = 0] = \"undefined\";\n Model[Model[\"best_match\"] = 1] = \"best_match\";\n Model[Model[\"gfs_seamless\"] = 2] = \"gfs_seamless\";\n Model[Model[\"gfs_global\"] = 3] = \"gfs_global\";\n Model[Model[\"gfs_hrrr\"] = 4] = \"gfs_hrrr\";\n Model[Model[\"meteofrance_seamless\"] = 5] = \"meteofrance_seamless\";\n Model[Model[\"meteofrance_arpege_seamless\"] = 6] = \"meteofrance_arpege_seamless\";\n Model[Model[\"meteofrance_arpege_world\"] = 7] = \"meteofrance_arpege_world\";\n Model[Model[\"meteofrance_arpege_europe\"] = 8] = \"meteofrance_arpege_europe\";\n Model[Model[\"meteofrance_arome_seamless\"] = 9] = \"meteofrance_arome_seamless\";\n Model[Model[\"meteofrance_arome_france\"] = 10] = \"meteofrance_arome_france\";\n Model[Model[\"meteofrance_arome_france_hd\"] = 11] = \"meteofrance_arome_france_hd\";\n Model[Model[\"jma_seamless\"] = 12] = \"jma_seamless\";\n Model[Model[\"jma_msm\"] = 13] = \"jma_msm\";\n Model[Model[\"jms_gsm\"] = 14] = \"jms_gsm\";\n Model[Model[\"jma_gsm\"] = 15] = \"jma_gsm\";\n Model[Model[\"gem_seamless\"] = 16] = \"gem_seamless\";\n Model[Model[\"gem_global\"] = 17] = \"gem_global\";\n Model[Model[\"gem_regional\"] = 18] = \"gem_regional\";\n Model[Model[\"gem_hrdps_continental\"] = 19] = \"gem_hrdps_continental\";\n Model[Model[\"icon_seamless\"] = 20] = \"icon_seamless\";\n Model[Model[\"icon_global\"] = 21] = \"icon_global\";\n Model[Model[\"icon_eu\"] = 22] = \"icon_eu\";\n Model[Model[\"icon_d2\"] = 23] = \"icon_d2\";\n Model[Model[\"ecmwf_ifs04\"] = 24] = \"ecmwf_ifs04\";\n Model[Model[\"metno_nordic\"] = 25] = \"metno_nordic\";\n Model[Model[\"era5_seamless\"] = 26] = \"era5_seamless\";\n Model[Model[\"era5\"] = 27] = \"era5\";\n Model[Model[\"cerra\"] = 28] = \"cerra\";\n Model[Model[\"era5_land\"] = 29] = \"era5_land\";\n Model[Model[\"ecmwf_ifs\"] = 30] = \"ecmwf_ifs\";\n Model[Model[\"gwam\"] = 31] = \"gwam\";\n Model[Model[\"ewam\"] = 32] = \"ewam\";\n Model[Model[\"glofas_seamless_v3\"] = 33] = \"glofas_seamless_v3\";\n Model[Model[\"glofas_forecast_v3\"] = 34] = \"glofas_forecast_v3\";\n Model[Model[\"glofas_consolidated_v3\"] = 35] = \"glofas_consolidated_v3\";\n Model[Model[\"glofas_seamless_v4\"] = 36] = \"glofas_seamless_v4\";\n Model[Model[\"glofas_forecast_v4\"] = 37] = \"glofas_forecast_v4\";\n Model[Model[\"glofas_consolidated_v4\"] = 38] = \"glofas_consolidated_v4\";\n Model[Model[\"gfs025\"] = 39] = \"gfs025\";\n Model[Model[\"gfs05\"] = 40] = \"gfs05\";\n Model[Model[\"CMCC_CM2_VHR4\"] = 41] = \"CMCC_CM2_VHR4\";\n Model[Model[\"FGOALS_f3_H_highresSST\"] = 42] = \"FGOALS_f3_H_highresSST\";\n Model[Model[\"FGOALS_f3_H\"] = 43] = \"FGOALS_f3_H\";\n Model[Model[\"HiRAM_SIT_HR\"] = 44] = \"HiRAM_SIT_HR\";\n Model[Model[\"MRI_AGCM3_2_S\"] = 45] = \"MRI_AGCM3_2_S\";\n Model[Model[\"EC_Earth3P_HR\"] = 46] = \"EC_Earth3P_HR\";\n Model[Model[\"MPI_ESM1_2_XR\"] = 47] = \"MPI_ESM1_2_XR\";\n Model[Model[\"NICAM16_8S\"] = 48] = \"NICAM16_8S\";\n Model[Model[\"cams_europe\"] = 49] = \"cams_europe\";\n Model[Model[\"cams_global\"] = 50] = \"cams_global\";\n Model[Model[\"cfsv2\"] = 51] = \"cfsv2\";\n Model[Model[\"era5_ocean\"] = 52] = \"era5_ocean\";\n Model[Model[\"cma_grapes_global\"] = 53] = \"cma_grapes_global\";\n Model[Model[\"bom_access_global\"] = 54] = \"bom_access_global\";\n Model[Model[\"bom_access_global_ensemble\"] = 55] = \"bom_access_global_ensemble\";\n Model[Model[\"arpae_cosmo_seamless\"] = 56] = \"arpae_cosmo_seamless\";\n Model[Model[\"arpae_cosmo_2i\"] = 57] = \"arpae_cosmo_2i\";\n Model[Model[\"arpae_cosmo_2i_ruc\"] = 58] = \"arpae_cosmo_2i_ruc\";\n Model[Model[\"arpae_cosmo_5m\"] = 59] = \"arpae_cosmo_5m\";\n Model[Model[\"ecmwf_ifs025\"] = 60] = \"ecmwf_ifs025\";\n Model[Model[\"ecmwf_aifs025\"] = 61] = \"ecmwf_aifs025\";\n Model[Model[\"gfs013\"] = 62] = \"gfs013\";\n Model[Model[\"gfs_graphcast025\"] = 63] = \"gfs_graphcast025\";\n Model[Model[\"ecmwf_wam025\"] = 64] = \"ecmwf_wam025\";\n Model[Model[\"meteofrance_wave\"] = 65] = \"meteofrance_wave\";\n Model[Model[\"meteofrance_currents\"] = 66] = \"meteofrance_currents\";\n Model[Model[\"ecmwf_wam025_ensemble\"] = 67] = \"ecmwf_wam025_ensemble\";\n Model[Model[\"ncep_gfswave025\"] = 68] = \"ncep_gfswave025\";\n Model[Model[\"ncep_gefswave025\"] = 69] = \"ncep_gefswave025\";\n Model[Model[\"knmi_seamless\"] = 70] = \"knmi_seamless\";\n Model[Model[\"knmi_harmonie_arome_europe\"] = 71] = \"knmi_harmonie_arome_europe\";\n Model[Model[\"knmi_harmonie_arome_netherlands\"] = 72] = \"knmi_harmonie_arome_netherlands\";\n Model[Model[\"dmi_seamless\"] = 73] = \"dmi_seamless\";\n Model[Model[\"dmi_harmonie_arome_europe\"] = 74] = \"dmi_harmonie_arome_europe\";\n Model[Model[\"metno_seamless\"] = 75] = \"metno_seamless\";\n Model[Model[\"era5_ensemble\"] = 76] = \"era5_ensemble\";\n Model[Model[\"ecmwf_ifs_analysis\"] = 77] = \"ecmwf_ifs_analysis\";\n Model[Model[\"ecmwf_ifs_long_window\"] = 78] = \"ecmwf_ifs_long_window\";\n Model[Model[\"ecmwf_ifs_analysis_long_window\"] = 79] = \"ecmwf_ifs_analysis_long_window\";\n Model[Model[\"ukmo_global_deterministic_10km\"] = 80] = \"ukmo_global_deterministic_10km\";\n Model[Model[\"ukmo_uk_deterministic_2km\"] = 81] = \"ukmo_uk_deterministic_2km\";\n Model[Model[\"ukmo_seamless\"] = 82] = \"ukmo_seamless\";\n Model[Model[\"ncep_gfswave016\"] = 83] = \"ncep_gfswave016\";\n Model[Model[\"ncep_nbm_conus\"] = 84] = \"ncep_nbm_conus\";\n Model[Model[\"ukmo_global_ensemble_20km\"] = 85] = \"ukmo_global_ensemble_20km\";\n Model[Model[\"ecmwf_aifs025_single\"] = 86] = \"ecmwf_aifs025_single\";\n Model[Model[\"jma_jaxa_himawari\"] = 87] = \"jma_jaxa_himawari\";\n Model[Model[\"eumetsat_sarah3\"] = 88] = \"eumetsat_sarah3\";\n Model[Model[\"eumetsat_lsa_saf_msg\"] = 89] = \"eumetsat_lsa_saf_msg\";\n Model[Model[\"eumetsat_lsa_saf_iodc\"] = 90] = \"eumetsat_lsa_saf_iodc\";\n Model[Model[\"satellite_radiation_seamless\"] = 91] = \"satellite_radiation_seamless\";\n Model[Model[\"kma_gdps\"] = 92] = \"kma_gdps\";\n Model[Model[\"kma_ldps\"] = 93] = \"kma_ldps\";\n Model[Model[\"kma_seamless\"] = 94] = \"kma_seamless\";\n Model[Model[\"italia_meteo_arpae_icon_2i\"] = 95] = \"italia_meteo_arpae_icon_2i\";\n})(Model || (exports.Model = Model = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Unit = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Unit;\n(function (Unit) {\n Unit[Unit[\"undefined\"] = 0] = \"undefined\";\n Unit[Unit[\"celsius\"] = 1] = \"celsius\";\n Unit[Unit[\"centimetre\"] = 2] = \"centimetre\";\n Unit[Unit[\"cubic_metre_per_cubic_metre\"] = 3] = \"cubic_metre_per_cubic_metre\";\n Unit[Unit[\"cubic_metre_per_second\"] = 4] = \"cubic_metre_per_second\";\n Unit[Unit[\"degree_direction\"] = 5] = \"degree_direction\";\n Unit[Unit[\"dimensionless_integer\"] = 6] = \"dimensionless_integer\";\n Unit[Unit[\"dimensionless\"] = 7] = \"dimensionless\";\n Unit[Unit[\"european_air_quality_index\"] = 8] = \"european_air_quality_index\";\n Unit[Unit[\"fahrenheit\"] = 9] = \"fahrenheit\";\n Unit[Unit[\"feet\"] = 10] = \"feet\";\n Unit[Unit[\"fraction\"] = 11] = \"fraction\";\n Unit[Unit[\"gdd_celsius\"] = 12] = \"gdd_celsius\";\n Unit[Unit[\"geopotential_metre\"] = 13] = \"geopotential_metre\";\n Unit[Unit[\"grains_per_cubic_metre\"] = 14] = \"grains_per_cubic_metre\";\n Unit[Unit[\"gram_per_kilogram\"] = 15] = \"gram_per_kilogram\";\n Unit[Unit[\"hectopascal\"] = 16] = \"hectopascal\";\n Unit[Unit[\"hours\"] = 17] = \"hours\";\n Unit[Unit[\"inch\"] = 18] = \"inch\";\n Unit[Unit[\"iso8601\"] = 19] = \"iso8601\";\n Unit[Unit[\"joule_per_kilogram\"] = 20] = \"joule_per_kilogram\";\n Unit[Unit[\"kelvin\"] = 21] = \"kelvin\";\n Unit[Unit[\"kilopascal\"] = 22] = \"kilopascal\";\n Unit[Unit[\"kilogram_per_square_metre\"] = 23] = \"kilogram_per_square_metre\";\n Unit[Unit[\"kilometres_per_hour\"] = 24] = \"kilometres_per_hour\";\n Unit[Unit[\"knots\"] = 25] = \"knots\";\n Unit[Unit[\"megajoule_per_square_metre\"] = 26] = \"megajoule_per_square_metre\";\n Unit[Unit[\"metre_per_second_not_unit_converted\"] = 27] = \"metre_per_second_not_unit_converted\";\n Unit[Unit[\"metre_per_second\"] = 28] = \"metre_per_second\";\n Unit[Unit[\"metre\"] = 29] = \"metre\";\n Unit[Unit[\"micrograms_per_cubic_metre\"] = 30] = \"micrograms_per_cubic_metre\";\n Unit[Unit[\"miles_per_hour\"] = 31] = \"miles_per_hour\";\n Unit[Unit[\"millimetre\"] = 32] = \"millimetre\";\n Unit[Unit[\"pascal\"] = 33] = \"pascal\";\n Unit[Unit[\"per_second\"] = 34] = \"per_second\";\n Unit[Unit[\"percentage\"] = 35] = \"percentage\";\n Unit[Unit[\"seconds\"] = 36] = \"seconds\";\n Unit[Unit[\"unix_time\"] = 37] = \"unix_time\";\n Unit[Unit[\"us_air_quality_index\"] = 38] = \"us_air_quality_index\";\n Unit[Unit[\"watt_per_square_metre\"] = 39] = \"watt_per_square_metre\";\n Unit[Unit[\"wmo_code\"] = 40] = \"wmo_code\";\n Unit[Unit[\"parts_per_million\"] = 41] = \"parts_per_million\";\n})(Unit || (exports.Unit = Unit = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VariableWithValues = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nconst flatbuffers = __importStar(require(\"flatbuffers\"));\nconst aggregation_js_1 = require(\"./aggregation.js\");\nconst unit_js_1 = require(\"./unit.js\");\nconst variable_js_1 = require(\"./variable.js\");\nclass VariableWithValues {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsVariableWithValues(bb, obj) {\n return (obj || new VariableWithValues()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsVariableWithValues(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new VariableWithValues()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n variable() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : variable_js_1.Variable.undefined;\n }\n unit() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : unit_js_1.Unit.undefined;\n }\n value() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n values(index) {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.readFloat32(this.bb.__vector(this.bb_pos + offset) + index * 4) : 0;\n }\n valuesLength() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n valuesArray() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? new Float32Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;\n }\n valuesInt64(index) {\n const offset = this.bb.__offset(this.bb_pos, 12);\n return offset ? this.bb.readInt64(this.bb.__vector(this.bb_pos + offset) + index * 8) : BigInt(0);\n }\n valuesInt64Length() {\n const offset = this.bb.__offset(this.bb_pos, 12);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n altitude() {\n const offset = this.bb.__offset(this.bb_pos, 14);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n aggregation() {\n const offset = this.bb.__offset(this.bb_pos, 16);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : aggregation_js_1.Aggregation.none;\n }\n pressureLevel() {\n const offset = this.bb.__offset(this.bb_pos, 18);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n depth() {\n const offset = this.bb.__offset(this.bb_pos, 20);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n depthTo() {\n const offset = this.bb.__offset(this.bb_pos, 22);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n ensembleMember() {\n const offset = this.bb.__offset(this.bb_pos, 24);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n previousDay() {\n const offset = this.bb.__offset(this.bb_pos, 26);\n return offset ? this.bb.readInt16(this.bb_pos + offset) : 0;\n }\n}\nexports.VariableWithValues = VariableWithValues;\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Variable = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nvar Variable;\n(function (Variable) {\n Variable[Variable[\"undefined\"] = 0] = \"undefined\";\n Variable[Variable[\"apparent_temperature\"] = 1] = \"apparent_temperature\";\n Variable[Variable[\"cape\"] = 2] = \"cape\";\n Variable[Variable[\"cloud_cover\"] = 3] = \"cloud_cover\";\n Variable[Variable[\"cloud_cover_high\"] = 4] = \"cloud_cover_high\";\n Variable[Variable[\"cloud_cover_low\"] = 5] = \"cloud_cover_low\";\n Variable[Variable[\"cloud_cover_mid\"] = 6] = \"cloud_cover_mid\";\n Variable[Variable[\"daylight_duration\"] = 7] = \"daylight_duration\";\n Variable[Variable[\"dew_point\"] = 8] = \"dew_point\";\n Variable[Variable[\"diffuse_radiation\"] = 9] = \"diffuse_radiation\";\n Variable[Variable[\"diffuse_radiation_instant\"] = 10] = \"diffuse_radiation_instant\";\n Variable[Variable[\"direct_normal_irradiance\"] = 11] = \"direct_normal_irradiance\";\n Variable[Variable[\"direct_normal_irradiance_instant\"] = 12] = \"direct_normal_irradiance_instant\";\n Variable[Variable[\"direct_radiation\"] = 13] = \"direct_radiation\";\n Variable[Variable[\"direct_radiation_instant\"] = 14] = \"direct_radiation_instant\";\n Variable[Variable[\"et0_fao_evapotranspiration\"] = 15] = \"et0_fao_evapotranspiration\";\n Variable[Variable[\"evapotranspiration\"] = 16] = \"evapotranspiration\";\n Variable[Variable[\"freezing_level_height\"] = 17] = \"freezing_level_height\";\n Variable[Variable[\"growing_degree_days\"] = 18] = \"growing_degree_days\";\n Variable[Variable[\"is_day\"] = 19] = \"is_day\";\n Variable[Variable[\"latent_heat_flux\"] = 20] = \"latent_heat_flux\";\n Variable[Variable[\"leaf_wetness_probability\"] = 21] = \"leaf_wetness_probability\";\n Variable[Variable[\"lifted_index\"] = 22] = \"lifted_index\";\n Variable[Variable[\"lightning_potential\"] = 23] = \"lightning_potential\";\n Variable[Variable[\"precipitation\"] = 24] = \"precipitation\";\n Variable[Variable[\"precipitation_hours\"] = 25] = \"precipitation_hours\";\n Variable[Variable[\"precipitation_probability\"] = 26] = \"precipitation_probability\";\n Variable[Variable[\"pressure_msl\"] = 27] = \"pressure_msl\";\n Variable[Variable[\"rain\"] = 28] = \"rain\";\n Variable[Variable[\"relative_humidity\"] = 29] = \"relative_humidity\";\n Variable[Variable[\"runoff\"] = 30] = \"runoff\";\n Variable[Variable[\"sensible_heat_flux\"] = 31] = \"sensible_heat_flux\";\n Variable[Variable[\"shortwave_radiation\"] = 32] = \"shortwave_radiation\";\n Variable[Variable[\"shortwave_radiation_instant\"] = 33] = \"shortwave_radiation_instant\";\n Variable[Variable[\"showers\"] = 34] = \"showers\";\n Variable[Variable[\"snow_depth\"] = 35] = \"snow_depth\";\n Variable[Variable[\"snow_height\"] = 36] = \"snow_height\";\n Variable[Variable[\"snowfall\"] = 37] = \"snowfall\";\n Variable[Variable[\"snowfall_height\"] = 38] = \"snowfall_height\";\n Variable[Variable[\"snowfall_water_equivalent\"] = 39] = \"snowfall_water_equivalent\";\n Variable[Variable[\"sunrise\"] = 40] = \"sunrise\";\n Variable[Variable[\"sunset\"] = 41] = \"sunset\";\n Variable[Variable[\"soil_moisture\"] = 42] = \"soil_moisture\";\n Variable[Variable[\"soil_moisture_index\"] = 43] = \"soil_moisture_index\";\n Variable[Variable[\"soil_temperature\"] = 44] = \"soil_temperature\";\n Variable[Variable[\"surface_pressure\"] = 45] = \"surface_pressure\";\n Variable[Variable[\"surface_temperature\"] = 46] = \"surface_temperature\";\n Variable[Variable[\"temperature\"] = 47] = \"temperature\";\n Variable[Variable[\"terrestrial_radiation\"] = 48] = \"terrestrial_radiation\";\n Variable[Variable[\"terrestrial_radiation_instant\"] = 49] = \"terrestrial_radiation_instant\";\n Variable[Variable[\"total_column_integrated_water_vapour\"] = 50] = \"total_column_integrated_water_vapour\";\n Variable[Variable[\"updraft\"] = 51] = \"updraft\";\n Variable[Variable[\"uv_index\"] = 52] = \"uv_index\";\n Variable[Variable[\"uv_index_clear_sky\"] = 53] = \"uv_index_clear_sky\";\n Variable[Variable[\"vapour_pressure_deficit\"] = 54] = \"vapour_pressure_deficit\";\n Variable[Variable[\"visibility\"] = 55] = \"visibility\";\n Variable[Variable[\"weather_code\"] = 56] = \"weather_code\";\n Variable[Variable[\"wind_direction\"] = 57] = \"wind_direction\";\n Variable[Variable[\"wind_gusts\"] = 58] = \"wind_gusts\";\n Variable[Variable[\"wind_speed\"] = 59] = \"wind_speed\";\n Variable[Variable[\"vertical_velocity\"] = 60] = \"vertical_velocity\";\n Variable[Variable[\"geopotential_height\"] = 61] = \"geopotential_height\";\n Variable[Variable[\"wet_bulb_temperature\"] = 62] = \"wet_bulb_temperature\";\n Variable[Variable[\"river_discharge\"] = 63] = \"river_discharge\";\n Variable[Variable[\"wave_height\"] = 64] = \"wave_height\";\n Variable[Variable[\"wave_period\"] = 65] = \"wave_period\";\n Variable[Variable[\"wave_direction\"] = 66] = \"wave_direction\";\n Variable[Variable[\"wind_wave_height\"] = 67] = \"wind_wave_height\";\n Variable[Variable[\"wind_wave_period\"] = 68] = \"wind_wave_period\";\n Variable[Variable[\"wind_wave_peak_period\"] = 69] = \"wind_wave_peak_period\";\n Variable[Variable[\"wind_wave_direction\"] = 70] = \"wind_wave_direction\";\n Variable[Variable[\"swell_wave_height\"] = 71] = \"swell_wave_height\";\n Variable[Variable[\"swell_wave_period\"] = 72] = \"swell_wave_period\";\n Variable[Variable[\"swell_wave_peak_period\"] = 73] = \"swell_wave_peak_period\";\n Variable[Variable[\"swell_wave_direction\"] = 74] = \"swell_wave_direction\";\n Variable[Variable[\"pm10\"] = 75] = \"pm10\";\n Variable[Variable[\"pm2p5\"] = 76] = \"pm2p5\";\n Variable[Variable[\"dust\"] = 77] = \"dust\";\n Variable[Variable[\"aerosol_optical_depth\"] = 78] = \"aerosol_optical_depth\";\n Variable[Variable[\"carbon_monoxide\"] = 79] = \"carbon_monoxide\";\n Variable[Variable[\"nitrogen_dioxide\"] = 80] = \"nitrogen_dioxide\";\n Variable[Variable[\"ammonia\"] = 81] = \"ammonia\";\n Variable[Variable[\"ozone\"] = 82] = \"ozone\";\n Variable[Variable[\"sulphur_dioxide\"] = 83] = \"sulphur_dioxide\";\n Variable[Variable[\"alder_pollen\"] = 84] = \"alder_pollen\";\n Variable[Variable[\"birch_pollen\"] = 85] = \"birch_pollen\";\n Variable[Variable[\"grass_pollen\"] = 86] = \"grass_pollen\";\n Variable[Variable[\"mugwort_pollen\"] = 87] = \"mugwort_pollen\";\n Variable[Variable[\"olive_pollen\"] = 88] = \"olive_pollen\";\n Variable[Variable[\"ragweed_pollen\"] = 89] = \"ragweed_pollen\";\n Variable[Variable[\"european_aqi\"] = 90] = \"european_aqi\";\n Variable[Variable[\"european_aqi_pm2p5\"] = 91] = \"european_aqi_pm2p5\";\n Variable[Variable[\"european_aqi_pm10\"] = 92] = \"european_aqi_pm10\";\n Variable[Variable[\"european_aqi_nitrogen_dioxide\"] = 93] = \"european_aqi_nitrogen_dioxide\";\n Variable[Variable[\"european_aqi_ozone\"] = 94] = \"european_aqi_ozone\";\n Variable[Variable[\"european_aqi_sulphur_dioxide\"] = 95] = \"european_aqi_sulphur_dioxide\";\n Variable[Variable[\"us_aqi\"] = 96] = \"us_aqi\";\n Variable[Variable[\"us_aqi_pm2p5\"] = 97] = \"us_aqi_pm2p5\";\n Variable[Variable[\"us_aqi_pm10\"] = 98] = \"us_aqi_pm10\";\n Variable[Variable[\"us_aqi_nitrogen_dioxide\"] = 99] = \"us_aqi_nitrogen_dioxide\";\n Variable[Variable[\"us_aqi_ozone\"] = 100] = \"us_aqi_ozone\";\n Variable[Variable[\"us_aqi_sulphur_dioxide\"] = 101] = \"us_aqi_sulphur_dioxide\";\n Variable[Variable[\"us_aqi_carbon_monoxide\"] = 102] = \"us_aqi_carbon_monoxide\";\n Variable[Variable[\"sunshine_duration\"] = 103] = \"sunshine_duration\";\n Variable[Variable[\"convective_inhibition\"] = 104] = \"convective_inhibition\";\n Variable[Variable[\"shortwave_radiation_clear_sky\"] = 105] = \"shortwave_radiation_clear_sky\";\n Variable[Variable[\"global_tilted_irradiance\"] = 106] = \"global_tilted_irradiance\";\n Variable[Variable[\"global_tilted_irradiance_instant\"] = 107] = \"global_tilted_irradiance_instant\";\n Variable[Variable[\"ocean_current_velocity\"] = 108] = \"ocean_current_velocity\";\n Variable[Variable[\"ocean_current_direction\"] = 109] = \"ocean_current_direction\";\n Variable[Variable[\"cloud_base\"] = 110] = \"cloud_base\";\n Variable[Variable[\"cloud_top\"] = 111] = \"cloud_top\";\n Variable[Variable[\"mass_density\"] = 112] = \"mass_density\";\n Variable[Variable[\"boundary_layer_height\"] = 113] = \"boundary_layer_height\";\n Variable[Variable[\"formaldehyde\"] = 114] = \"formaldehyde\";\n Variable[Variable[\"glyoxal\"] = 115] = \"glyoxal\";\n Variable[Variable[\"non_methane_volatile_organic_compounds\"] = 116] = \"non_methane_volatile_organic_compounds\";\n Variable[Variable[\"pm10_wildfires\"] = 117] = \"pm10_wildfires\";\n Variable[Variable[\"peroxyacyl_nitrates\"] = 118] = \"peroxyacyl_nitrates\";\n Variable[Variable[\"secondary_inorganic_aerosol\"] = 119] = \"secondary_inorganic_aerosol\";\n Variable[Variable[\"residential_elementary_carbon\"] = 120] = \"residential_elementary_carbon\";\n Variable[Variable[\"total_elementary_carbon\"] = 121] = \"total_elementary_carbon\";\n Variable[Variable[\"pm2_5_total_organic_matter\"] = 122] = \"pm2_5_total_organic_matter\";\n Variable[Variable[\"sea_salt_aerosol\"] = 123] = \"sea_salt_aerosol\";\n Variable[Variable[\"nitrogen_monoxide\"] = 124] = \"nitrogen_monoxide\";\n Variable[Variable[\"thunderstorm_probability\"] = 125] = \"thunderstorm_probability\";\n Variable[Variable[\"rain_probability\"] = 126] = \"rain_probability\";\n Variable[Variable[\"freezing_rain_probability\"] = 127] = \"freezing_rain_probability\";\n Variable[Variable[\"ice_pellets_probability\"] = 128] = \"ice_pellets_probability\";\n Variable[Variable[\"snowfall_probability\"] = 129] = \"snowfall_probability\";\n Variable[Variable[\"carbon_dioxide\"] = 130] = \"carbon_dioxide\";\n Variable[Variable[\"methane\"] = 131] = \"methane\";\n Variable[Variable[\"sea_level_height_msl\"] = 132] = \"sea_level_height_msl\";\n Variable[Variable[\"sea_surface_temperature\"] = 133] = \"sea_surface_temperature\";\n Variable[Variable[\"invert_barometer_height\"] = 134] = \"invert_barometer_height\";\n Variable[Variable[\"hail\"] = 135] = \"hail\";\n Variable[Variable[\"albedo\"] = 136] = \"albedo\";\n Variable[Variable[\"precipitation_type\"] = 137] = \"precipitation_type\";\n Variable[Variable[\"convective_cloud_base\"] = 138] = \"convective_cloud_base\";\n Variable[Variable[\"convective_cloud_top\"] = 139] = \"convective_cloud_top\";\n Variable[Variable[\"snow_depth_water_equivalent\"] = 140] = \"snow_depth_water_equivalent\";\n Variable[Variable[\"secondary_swell_wave_height\"] = 141] = \"secondary_swell_wave_height\";\n Variable[Variable[\"secondary_swell_wave_period\"] = 142] = \"secondary_swell_wave_period\";\n Variable[Variable[\"secondary_swell_wave_peak_period\"] = 143] = \"secondary_swell_wave_peak_period\";\n Variable[Variable[\"secondary_swell_wave_direction\"] = 144] = \"secondary_swell_wave_direction\";\n Variable[Variable[\"tertiary_swell_wave_height\"] = 145] = \"tertiary_swell_wave_height\";\n Variable[Variable[\"tertiary_swell_wave_period\"] = 146] = \"tertiary_swell_wave_period\";\n Variable[Variable[\"tertiary_swell_wave_peak_period\"] = 147] = \"tertiary_swell_wave_peak_period\";\n Variable[Variable[\"tertiary_swell_wave_direction\"] = 148] = \"tertiary_swell_wave_direction\";\n})(Variable || (exports.Variable = Variable = {}));\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VariablesWithTime = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nconst flatbuffers = __importStar(require(\"flatbuffers\"));\nconst variable_with_values_js_1 = require(\"./variable-with-values.js\");\nclass VariablesWithTime {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsVariablesWithTime(bb, obj) {\n return (obj || new VariablesWithTime()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsVariablesWithTime(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new VariablesWithTime()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n time() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt('0');\n }\n timeEnd() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt('0');\n }\n interval() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n }\n variables(index, obj) {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? (obj || new variable_with_values_js_1.VariableWithValues()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n }\n variablesLength() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n}\nexports.VariablesWithTime = VariablesWithTime;\n","\"use strict\";\n// automatically generated by the FlatBuffers compiler, do not modify\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WeatherApiResponse = void 0;\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\nconst flatbuffers = __importStar(require(\"flatbuffers\"));\nconst model_js_1 = require(\"./model.js\");\nconst variables_with_time_js_1 = require(\"./variables-with-time.js\");\nclass WeatherApiResponse {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsWeatherApiResponse(bb, obj) {\n return (obj || new WeatherApiResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsWeatherApiResponse(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new WeatherApiResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n latitude() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n longitude() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n elevation() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n generationTimeMilliseconds() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n locationId() {\n const offset = this.bb.__offset(this.bb_pos, 12);\n return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt('0');\n }\n model() {\n const offset = this.bb.__offset(this.bb_pos, 14);\n return offset ? this.bb.readUint8(this.bb_pos + offset) : model_js_1.Model.undefined;\n }\n utcOffsetSeconds() {\n const offset = this.bb.__offset(this.bb_pos, 16);\n return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n }\n timezone(optionalEncoding) {\n const offset = this.bb.__offset(this.bb_pos, 18);\n return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n }\n timezoneAbbreviation(optionalEncoding) {\n const offset = this.bb.__offset(this.bb_pos, 20);\n return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n }\n current(obj) {\n const offset = this.bb.__offset(this.bb_pos, 22);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n daily(obj) {\n const offset = this.bb.__offset(this.bb_pos, 24);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n hourly(obj) {\n const offset = this.bb.__offset(this.bb_pos, 26);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n minutely15(obj) {\n const offset = this.bb.__offset(this.bb_pos, 28);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n sixHourly(obj) {\n const offset = this.bb.__offset(this.bb_pos, 30);\n return offset ? (obj || new variables_with_time_js_1.VariablesWithTime()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n }\n}\nexports.WeatherApiResponse = WeatherApiResponse;\n","import { ByteBuffer } from \"./byte-buffer.js\";\nimport { SIZEOF_SHORT, SIZE_PREFIX_LENGTH, SIZEOF_INT, FILE_IDENTIFIER_LENGTH } from \"./constants.js\";\nexport class Builder {\n /**\n * Create a FlatBufferBuilder.\n */\n constructor(opt_initial_size) {\n /** Minimum alignment encountered so far. */\n this.minalign = 1;\n /** The vtable for the current table. */\n this.vtable = null;\n /** The amount of fields we're actually using. */\n this.vtable_in_use = 0;\n /** Whether we are currently serializing a table. */\n this.isNested = false;\n /** Starting offset of the current struct/table. */\n this.object_start = 0;\n /** List of offsets of all vtables. */\n this.vtables = [];\n /** For the current vector being built. */\n this.vector_num_elems = 0;\n /** False omits default values from the serialized data */\n this.force_defaults = false;\n this.string_maps = null;\n this.text_encoder = new TextEncoder();\n let initial_size;\n if (!opt_initial_size) {\n initial_size = 1024;\n }\n else {\n initial_size = opt_initial_size;\n }\n /**\n * @type {ByteBuffer}\n * @private\n */\n this.bb = ByteBuffer.allocate(initial_size);\n this.space = initial_size;\n }\n clear() {\n this.bb.clear();\n this.space = this.bb.capacity();\n this.minalign = 1;\n this.vtable = null;\n this.vtable_in_use = 0;\n this.isNested = false;\n this.object_start = 0;\n this.vtables = [];\n this.vector_num_elems = 0;\n this.force_defaults = false;\n this.string_maps = null;\n }\n /**\n * In order to save space, fields that are set to their default value\n * don't get serialized into the buffer. Forcing defaults provides a\n * way to manually disable this optimization.\n *\n * @param forceDefaults true always serializes default values\n */\n forceDefaults(forceDefaults) {\n this.force_defaults = forceDefaults;\n }\n /**\n * Get the ByteBuffer representing the FlatBuffer. Only call this after you've\n * called finish(). The actual data starts at the ByteBuffer's current position,\n * not necessarily at 0.\n */\n dataBuffer() {\n return this.bb;\n }\n /**\n * Get the bytes representing the FlatBuffer. Only call this after you've\n * called finish().\n */\n asUint8Array() {\n return this.bb.bytes().subarray(this.bb.position(), this.bb.position() + this.offset());\n }\n /**\n * Prepare to write an element of `size` after `additional_bytes` have been\n * written, e.g. if you write a string, you need to align such the int length\n * field is aligned to 4 bytes, and the string data follows it directly. If all\n * you need to do is alignment, `additional_bytes` will be 0.\n *\n * @param size This is the of the new element to write\n * @param additional_bytes The padding size\n */\n prep(size, additional_bytes) {\n // Track the biggest thing we've ever aligned to.\n if (size > this.minalign) {\n this.minalign = size;\n }\n // Find the amount of alignment needed such that `size` is properly\n // aligned after `additional_bytes`\n const align_size = ((~(this.bb.capacity() - this.space + additional_bytes)) + 1) & (size - 1);\n // Reallocate the buffer if needed.\n while (this.space < align_size + size + additional_bytes) {\n const old_buf_size = this.bb.capacity();\n this.bb = Builder.growByteBuffer(this.bb);\n this.space += this.bb.capacity() - old_buf_size;\n }\n this.pad(align_size);\n }\n pad(byte_size) {\n for (let i = 0; i < byte_size; i++) {\n this.bb.writeInt8(--this.space, 0);\n }\n }\n writeInt8(value) {\n this.bb.writeInt8(this.space -= 1, value);\n }\n writeInt16(value) {\n this.bb.writeInt16(this.space -= 2, value);\n }\n writeInt32(value) {\n this.bb.writeInt32(this.space -= 4, value);\n }\n writeInt64(value) {\n this.bb.writeInt64(this.space -= 8, value);\n }\n writeFloat32(value) {\n this.bb.writeFloat32(this.space -= 4, value);\n }\n writeFloat64(value) {\n this.bb.writeFloat64(this.space -= 8, value);\n }\n /**\n * Add an `int8` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int8` to add the buffer.\n */\n addInt8(value) {\n this.prep(1, 0);\n this.writeInt8(value);\n }\n /**\n * Add an `int16` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int16` to add the buffer.\n */\n addInt16(value) {\n this.prep(2, 0);\n this.writeInt16(value);\n }\n /**\n * Add an `int32` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int32` to add the buffer.\n */\n addInt32(value) {\n this.prep(4, 0);\n this.writeInt32(value);\n }\n /**\n * Add an `int64` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `int64` to add the buffer.\n */\n addInt64(value) {\n this.prep(8, 0);\n this.writeInt64(value);\n }\n /**\n * Add a `float32` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `float32` to add the buffer.\n */\n addFloat32(value) {\n this.prep(4, 0);\n this.writeFloat32(value);\n }\n /**\n * Add a `float64` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param value The `float64` to add the buffer.\n */\n addFloat64(value) {\n this.prep(8, 0);\n this.writeFloat64(value);\n }\n addFieldInt8(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt8(value);\n this.slot(voffset);\n }\n }\n addFieldInt16(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt16(value);\n this.slot(voffset);\n }\n }\n addFieldInt32(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt32(value);\n this.slot(voffset);\n }\n }\n addFieldInt64(voffset, value, defaultValue) {\n if (this.force_defaults || value !== defaultValue) {\n this.addInt64(value);\n this.slot(voffset);\n }\n }\n addFieldFloat32(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addFloat32(value);\n this.slot(voffset);\n }\n }\n addFieldFloat64(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addFloat64(value);\n this.slot(voffset);\n }\n }\n addFieldOffset(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addOffset(value);\n this.slot(voffset);\n }\n }\n /**\n * Structs are stored inline, so nothing additional is being added. `d` is always 0.\n */\n addFieldStruct(voffset, value, defaultValue) {\n if (value != defaultValue) {\n this.nested(value);\n this.slot(voffset);\n }\n }\n /**\n * Structures are always stored inline, they need to be created right\n * where they're used. You'll get this assertion failure if you\n * created it elsewhere.\n */\n nested(obj) {\n if (obj != this.offset()) {\n throw new TypeError('FlatBuffers: struct must be serialized inline.');\n }\n }\n /**\n * Should not be creating any other object, string or vector\n * while an object is being constructed\n */\n notNested() {\n if (this.isNested) {\n throw new TypeError('FlatBuffers: object serialization must not be nested.');\n }\n }\n /**\n * Set the current vtable at `voffset` to the current location in the buffer.\n */\n slot(voffset) {\n if (this.vtable !== null)\n this.vtable[voffset] = this.offset();\n }\n /**\n * @returns Offset relative to the end of the buffer.\n */\n offset() {\n return this.bb.capacity() - this.space;\n }\n /**\n * Doubles the size of the backing ByteBuffer and copies the old data towards\n * the end of the new buffer (since we build the buffer backwards).\n *\n * @param bb The current buffer with the existing data\n * @returns A new byte buffer with the old data copied\n * to it. The data is located at the end of the buffer.\n *\n * uint8Array.set() formally takes {Array|ArrayBufferView}, so to pass\n * it a uint8Array we need to suppress the type check:\n * @suppress {checkTypes}\n */\n static growByteBuffer(bb) {\n const old_buf_size = bb.capacity();\n // Ensure we don't grow beyond what fits in an int.\n if (old_buf_size & 0xC0000000) {\n throw new Error('FlatBuffers: cannot grow buffer beyond 2 gigabytes.');\n }\n const new_buf_size = old_buf_size << 1;\n const nbb = ByteBuffer.allocate(new_buf_size);\n nbb.setPosition(new_buf_size - old_buf_size);\n nbb.bytes().set(bb.bytes(), new_buf_size - old_buf_size);\n return nbb;\n }\n /**\n * Adds on offset, relative to where it will be written.\n *\n * @param offset The offset to add.\n */\n addOffset(offset) {\n this.prep(SIZEOF_INT, 0); // Ensure alignment is already done.\n this.writeInt32(this.offset() - offset + SIZEOF_INT);\n }\n /**\n * Start encoding a new object in the buffer. Users will not usually need to\n * call this directly. The FlatBuffers compiler will generate helper methods\n * that call this method internally.\n */\n startObject(numfields) {\n this.notNested();\n if (this.vtable == null) {\n this.vtable = [];\n }\n this.vtable_in_use = numfields;\n for (let i = 0; i < numfields; i++) {\n this.vtable[i] = 0; // This will push additional elements as needed\n }\n this.isNested = true;\n this.object_start = this.offset();\n }\n /**\n * Finish off writing the object that is under construction.\n *\n * @returns The offset to the object inside `dataBuffer`\n */\n endObject() {\n if (this.vtable == null || !this.isNested) {\n throw new Error('FlatBuffers: endObject called without startObject');\n }\n this.addInt32(0);\n const vtableloc = this.offset();\n // Trim trailing zeroes.\n let i = this.vtable_in_use - 1;\n // eslint-disable-next-line no-empty\n for (; i >= 0 && this.vtable[i] == 0; i--) { }\n const trimmed_size = i + 1;\n // Write out the current vtable.\n for (; i >= 0; i--) {\n // Offset relative to the start of the table.\n this.addInt16(this.vtable[i] != 0 ? vtableloc - this.vtable[i] : 0);\n }\n const standard_fields = 2; // The fields below:\n this.addInt16(vtableloc - this.object_start);\n const len = (trimmed_size + standard_fields) * SIZEOF_SHORT;\n this.addInt16(len);\n // Search for an existing vtable that matches the current one.\n let existing_vtable = 0;\n const vt1 = this.space;\n outer_loop: for (i = 0; i < this.vtables.length; i++) {\n const vt2 = this.bb.capacity() - this.vtables[i];\n if (len == this.bb.readInt16(vt2)) {\n for (let j = SIZEOF_SHORT; j < len; j += SIZEOF_SHORT) {\n if (this.bb.readInt16(vt1 + j) != this.bb.readInt16(vt2 + j)) {\n continue outer_loop;\n }\n }\n existing_vtable = this.vtables[i];\n break;\n }\n }\n if (existing_vtable) {\n // Found a match:\n // Remove the current vtable.\n this.space = this.bb.capacity() - vtableloc;\n // Point table to existing vtable.\n this.bb.writeInt32(this.space, existing_vtable - vtableloc);\n }\n else {\n // No match:\n // Add the location of the current vtable to the list of vtables.\n this.vtables.push(this.offset());\n // Point table to current vtable.\n this.bb.writeInt32(this.bb.capacity() - vtableloc, this.offset() - vtableloc);\n }\n this.isNested = false;\n return vtableloc;\n }\n /**\n * Finalize a buffer, poiting to the given `root_table`.\n */\n finish(root_table, opt_file_identifier, opt_size_prefix) {\n const size_prefix = opt_size_prefix ? SIZE_PREFIX_LENGTH : 0;\n if (opt_file_identifier) {\n const file_identifier = opt_file_identifier;\n this.prep(this.minalign, SIZEOF_INT +\n FILE_IDENTIFIER_LENGTH + size_prefix);\n if (file_identifier.length != FILE_IDENTIFIER_LENGTH) {\n throw new TypeError('FlatBuffers: file identifier must be length ' +\n FILE_IDENTIFIER_LENGTH);\n }\n for (let i = FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {\n this.writeInt8(file_identifier.charCodeAt(i));\n }\n }\n this.prep(this.minalign, SIZEOF_INT + size_prefix);\n this.addOffset(root_table);\n if (size_prefix) {\n this.addInt32(this.bb.capacity() - this.space);\n }\n this.bb.setPosition(this.space);\n }\n /**\n * Finalize a size prefixed buffer, pointing to the given `root_table`.\n */\n finishSizePrefixed(root_table, opt_file_identifier) {\n this.finish(root_table, opt_file_identifier, true);\n }\n /**\n * This checks a required field has been set in a given table that has\n * just been constructed.\n */\n requiredField(table, field) {\n const table_start = this.bb.capacity() - table;\n const vtable_start = table_start - this.bb.readInt32(table_start);\n const ok = field < this.bb.readInt16(vtable_start) &&\n this.bb.readInt16(vtable_start + field) != 0;\n // If this fails, the caller will show what field needs to be set.\n if (!ok) {\n throw new TypeError('FlatBuffers: field ' + field + ' must be set');\n }\n }\n /**\n * Start a new array/vector of objects. Users usually will not call\n * this directly. The FlatBuffers compiler will create a start/end\n * method for vector types in generated code.\n *\n * @param elem_size The size of each element in the array\n * @param num_elems The number of elements in the array\n * @param alignment The alignment of the array\n */\n startVector(elem_size, num_elems, alignment) {\n this.notNested();\n this.vector_num_elems = num_elems;\n this.prep(SIZEOF_INT, elem_size * num_elems);\n this.prep(alignment, elem_size * num_elems); // Just in case alignment > int.\n }\n /**\n * Finish off the creation of an array and all its elements. The array must be\n * created with `startVector`.\n *\n * @returns The offset at which the newly created array\n * starts.\n */\n endVector() {\n this.writeInt32(this.vector_num_elems);\n return this.offset();\n }\n /**\n * Encode the string `s` in the buffer using UTF-8. If the string passed has\n * already been seen, we return the offset of the already written string\n *\n * @param s The string to encode\n * @return The offset in the buffer where the encoded string starts\n */\n createSharedString(s) {\n if (!s) {\n return 0;\n }\n if (!this.string_maps) {\n this.string_maps = new Map();\n }\n if (this.string_maps.has(s)) {\n return this.string_maps.get(s);\n }\n const offset = this.createString(s);\n this.string_maps.set(s, offset);\n return offset;\n }\n /**\n * Encode the string `s` in the buffer using UTF-8. If a Uint8Array is passed\n * instead of a string, it is assumed to contain valid UTF-8 encoded data.\n *\n * @param s The string to encode\n * @return The offset in the buffer where the encoded string starts\n */\n createString(s) {\n if (s === null || s === undefined) {\n return 0;\n }\n let utf8;\n if (s instanceof Uint8Array) {\n utf8 = s;\n }\n else {\n utf8 = this.text_encoder.encode(s);\n }\n this.addInt8(0);\n this.startVector(1, utf8.length, 1);\n this.bb.setPosition(this.space -= utf8.length);\n this.bb.bytes().set(utf8, this.space);\n return this.endVector();\n }\n /**\n * Create a byte vector.\n *\n * @param v The bytes to add\n * @returns The offset in the buffer where the byte vector starts\n */\n createByteVector(v) {\n if (v === null || v === undefined) {\n return 0;\n }\n this.startVector(1, v.length, 1);\n this.bb.setPosition(this.space -= v.length);\n this.bb.bytes().set(v, this.space);\n return this.endVector();\n }\n /**\n * A helper function to pack an object\n *\n * @returns offset of obj\n */\n createObjectOffset(obj) {\n if (obj === null) {\n return 0;\n }\n if (typeof obj === 'string') {\n return this.createString(obj);\n }\n else {\n return obj.pack(this);\n }\n }\n /**\n * A helper function to pack a list of object\n *\n * @returns list of offsets of each non null object\n */\n createObjectOffsetList(list) {\n const ret = [];\n for (let i = 0; i < list.length; ++i) {\n const val = list[i];\n if (val !== null) {\n ret.push(this.createObjectOffset(val));\n }\n else {\n throw new TypeError('FlatBuffers: Argument for createObjectOffsetList cannot contain null.');\n }\n }\n return ret;\n }\n createStructOffsetList(list, startFunc) {\n startFunc(this, list.length);\n this.createObjectOffsetList(list.slice().reverse());\n return this.endVector();\n }\n}\n","import { FILE_IDENTIFIER_LENGTH, SIZEOF_INT } from \"./constants.js\";\nimport { int32, isLittleEndian, float32, float64 } from \"./utils.js\";\nimport { Encoding } from \"./encoding.js\";\nexport class ByteBuffer {\n /**\n * Create a new ByteBuffer with a given array of bytes (`Uint8Array`)\n */\n constructor(bytes_) {\n this.bytes_ = bytes_;\n this.position_ = 0;\n this.text_decoder_ = new TextDecoder();\n }\n /**\n * Create and allocate a new ByteBuffer with a given size.\n */\n static allocate(byte_size) {\n return new ByteBuffer(new Uint8Array(byte_size));\n }\n clear() {\n this.position_ = 0;\n }\n /**\n * Get the underlying `Uint8Array`.\n */\n bytes() {\n return this.bytes_;\n }\n /**\n * Get the buffer's position.\n */\n position() {\n return this.position_;\n }\n /**\n * Set the buffer's position.\n */\n setPosition(position) {\n this.position_ = position;\n }\n /**\n * Get the buffer's capacity.\n */\n capacity() {\n return this.bytes_.length;\n }\n readInt8(offset) {\n return this.readUint8(offset) << 24 >> 24;\n }\n readUint8(offset) {\n return this.bytes_[offset];\n }\n readInt16(offset) {\n return this.readUint16(offset) << 16 >> 16;\n }\n readUint16(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8;\n }\n readInt32(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8 | this.bytes_[offset + 2] << 16 | this.bytes_[offset + 3] << 24;\n }\n readUint32(offset) {\n return this.readInt32(offset) >>> 0;\n }\n readInt64(offset) {\n return BigInt.asIntN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readUint64(offset) {\n return BigInt.asUintN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readFloat32(offset) {\n int32[0] = this.readInt32(offset);\n return float32[0];\n }\n readFloat64(offset) {\n int32[isLittleEndian ? 0 : 1] = this.readInt32(offset);\n int32[isLittleEndian ? 1 : 0] = this.readInt32(offset + 4);\n return float64[0];\n }\n writeInt8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeUint8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeInt16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeUint16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeInt32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeUint32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeInt64(offset, value) {\n this.writeInt32(offset, Number(BigInt.asIntN(32, value)));\n this.writeInt32(offset + 4, Number(BigInt.asIntN(32, value >> BigInt(32))));\n }\n writeUint64(offset, value) {\n this.writeUint32(offset, Number(BigInt.asUintN(32, value)));\n this.writeUint32(offset + 4, Number(BigInt.asUintN(32, value >> BigInt(32))));\n }\n writeFloat32(offset, value) {\n float32[0] = value;\n this.writeInt32(offset, int32[0]);\n }\n writeFloat64(offset, value) {\n float64[0] = value;\n this.writeInt32(offset, int32[isLittleEndian ? 0 : 1]);\n this.writeInt32(offset + 4, int32[isLittleEndian ? 1 : 0]);\n }\n /**\n * Return the file identifier. Behavior is undefined for FlatBuffers whose\n * schema does not include a file_identifier (likely points at padding or the\n * start of a the root vtable).\n */\n getBufferIdentifier() {\n if (this.bytes_.length < this.position_ + SIZEOF_INT +\n FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: ByteBuffer is too short to contain an identifier.');\n }\n let result = \"\";\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n result += String.fromCharCode(this.readInt8(this.position_ + SIZEOF_INT + i));\n }\n return result;\n }\n /**\n * Look up a field in the vtable, return an offset into the object, or 0 if the\n * field is not present.\n */\n __offset(bb_pos, vtable_offset) {\n const vtable = bb_pos - this.readInt32(bb_pos);\n return vtable_offset < this.readInt16(vtable) ? this.readInt16(vtable + vtable_offset) : 0;\n }\n /**\n * Initialize any Table-derived type to point to the union at the given offset.\n */\n __union(t, offset) {\n t.bb_pos = offset + this.readInt32(offset);\n t.bb = this;\n return t;\n }\n /**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n *\n * To avoid the conversion to string, pass Encoding.UTF8_BYTES as the\n * \"optionalEncoding\" argument. This is useful for avoiding conversion when\n * the data will just be packaged back up in another FlatBuffer later on.\n *\n * @param offset\n * @param opt_encoding Defaults to UTF16_STRING\n */\n __string(offset, opt_encoding) {\n offset += this.readInt32(offset);\n const length = this.readInt32(offset);\n offset += SIZEOF_INT;\n const utf8bytes = this.bytes_.subarray(offset, offset + length);\n if (opt_encoding === Encoding.UTF8_BYTES)\n return utf8bytes;\n else\n return this.text_decoder_.decode(utf8bytes);\n }\n /**\n * Handle unions that can contain string as its member, if a Table-derived type then initialize it,\n * if a string then return a new one\n *\n * WARNING: strings are immutable in JS so we can't change the string that the user gave us, this\n * makes the behaviour of __union_with_string different compared to __union\n */\n __union_with_string(o, offset) {\n if (typeof o === 'string') {\n return this.__string(offset);\n }\n return this.__union(o, offset);\n }\n /**\n * Retrieve the relative offset stored at \"offset\"\n */\n __indirect(offset) {\n return offset + this.readInt32(offset);\n }\n /**\n * Get the start of data of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector(offset) {\n return offset + this.readInt32(offset) + SIZEOF_INT; // data starts after the length\n }\n /**\n * Get the length of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector_len(offset) {\n return this.readInt32(offset + this.readInt32(offset));\n }\n __has_identifier(ident) {\n if (ident.length != FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: file identifier must be length ' +\n FILE_IDENTIFIER_LENGTH);\n }\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n if (ident.charCodeAt(i) != this.readInt8(this.position() + SIZEOF_INT + i)) {\n return false;\n }\n }\n return true;\n }\n /**\n * A helper function for generating list for obj api\n */\n createScalarList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val);\n }\n }\n return ret;\n }\n /**\n * A helper function for generating list for obj api\n * @param listAccessor function that accepts an index and return data at that index\n * @param listLength listLength\n * @param res result list\n */\n createObjList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val.unpack());\n }\n }\n return ret;\n }\n}\n","export const SIZEOF_SHORT = 2;\nexport const SIZEOF_INT = 4;\nexport const FILE_IDENTIFIER_LENGTH = 4;\nexport const SIZE_PREFIX_LENGTH = 4;\n","export var Encoding;\n(function (Encoding) {\n Encoding[Encoding[\"UTF8_BYTES\"] = 1] = \"UTF8_BYTES\";\n Encoding[Encoding[\"UTF16_STRING\"] = 2] = \"UTF16_STRING\";\n})(Encoding || (Encoding = {}));\n","export { SIZEOF_SHORT } from './constants.js';\nexport { SIZEOF_INT } from './constants.js';\nexport { FILE_IDENTIFIER_LENGTH } from './constants.js';\nexport { SIZE_PREFIX_LENGTH } from './constants.js';\nexport { int32, float32, float64, isLittleEndian } from './utils.js';\nexport { Encoding } from './encoding.js';\nexport { Builder } from './builder.js';\nexport { ByteBuffer } from './byte-buffer.js';\n","export const int32 = new Int32Array(2);\nexport const float32 = new Float32Array(int32.buffer);\nexport const float64 = new Float64Array(int32.buffer);\nexport const isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchWeatherApi = fetchWeatherApi;\nconst flatbuffers_1 = require(\"flatbuffers\");\nconst weather_api_response_1 = require(\"@openmeteo/sdk/weather-api-response\");\nconst sleep = (ms) => new Promise(r => setTimeout(r, ms));\nfunction fetchRetried(url_1) {\n return __awaiter(this, arguments, void 0, function* (url, retries = 3, backoffFactor = 0.5, backoffMax = 2, fetchOptions = {}) {\n const statusToRetry = [500, 502, 504];\n const statusWithJsonError = [400, 429];\n let currentTry = 0;\n let response = yield fetch(url, fetchOptions);\n while (statusToRetry.includes(response.status)) {\n currentTry++;\n if (currentTry >= retries) {\n throw new Error(response.statusText);\n }\n const sleepMs = Math.min(backoffFactor * Math.pow(2, currentTry), backoffMax) * 1000;\n yield sleep(sleepMs);\n response = yield fetch(url, fetchOptions);\n }\n if (statusWithJsonError.includes(response.status)) {\n const json = yield response.json();\n if ('reason' in json) {\n throw new Error(json.reason);\n }\n throw new Error(response.statusText);\n }\n return response;\n });\n}\n/**\n * Retrieve data from the Open-Meteo weather API\n *\n * @param {string} url Server and endpoint. E.g. \"https://api.open-meteo.com/v1/forecast\"\n * @param {any} params URL parameter as an object\n * @param {number} [retries=3] Number of retries in case of an server error\n * @param {number} [backoffFactor=0.2] Exponential backoff factor to increase wait time after each retry\n * @param {number} [backoffMax=2] Maximum wait time between retries\n * @param {RequestInit} [fetchOptions={}] Additional fetch options such as headers, signal, etc.\n * @returns {Promise}\n */\nfunction fetchWeatherApi(url_1, params_1) {\n return __awaiter(this, arguments, void 0, function* (url, params, retries = 3, backoffFactor = 0.2, backoffMax = 2, fetchOptions = {}) {\n const urlParams = new URLSearchParams(params);\n urlParams.set('format', 'flatbuffers');\n const response = yield fetchRetried(`${url}?${urlParams.toString()}`, retries, backoffFactor, backoffMax, fetchOptions);\n const fb = new flatbuffers_1.ByteBuffer(new Uint8Array(yield response.arrayBuffer()));\n const results = [];\n let pos = 0;\n while (pos < fb.capacity()) {\n fb.setPosition(pos);\n const len = fb.readInt32(fb.position());\n results.push(weather_api_response_1.WeatherApiResponse.getSizePrefixedRootAsWeatherApiResponse(fb));\n pos += len + 4;\n }\n return results;\n });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport HSL from \"./hsl\";\nvar Scheme = /** @class */ (function () {\n function Scheme(initial) {\n this.primary = HSL.fromHex(initial);\n }\n Scheme.prototype.toString = function () {\n var values = this.colors.map(function (color) { return color.toString(16); }).join(\",\");\n return \"\".concat(this.constructor.name, \": \").concat(values);\n };\n return Scheme;\n}());\nexport { Scheme };\nvar Analogous = /** @class */ (function (_super) {\n __extends(Analogous, _super);\n function Analogous(initial) {\n var _this = _super.call(this, initial) || this;\n var left1 = new HSL(_this.primary.hue - 30, _this.primary.saturation, _this.primary.lightness);\n var left2 = new HSL(_this.primary.hue - 15, _this.primary.saturation, _this.primary.lightness);\n var right1 = new HSL(_this.primary.hue + 15, _this.primary.saturation, _this.primary.lightness);\n var right2 = new HSL(_this.primary.hue + 30, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n left1.toHex(),\n left2.toHex(),\n initial,\n right1.toHex(),\n right2.toHex()\n ];\n return _this;\n }\n return Analogous;\n}(Scheme));\nexport { Analogous };\nvar Monochromatic = /** @class */ (function (_super) {\n __extends(Monochromatic, _super);\n function Monochromatic(initial) {\n var _this = _super.call(this, initial) || this;\n var delta = _this.primary.lightness / 6;\n _this.colors = [\n initial,\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta).toHex(),\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta * 2).toHex(),\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta * 3).toHex(),\n new HSL(_this.primary.hue, _this.primary.saturation, _this.primary.lightness - delta * 4).toHex()\n ];\n return _this;\n }\n return Monochromatic;\n}(Scheme));\nexport { Monochromatic };\nvar SplitComplementary = /** @class */ (function (_super) {\n __extends(SplitComplementary, _super);\n function SplitComplementary(initial) {\n var _this = _super.call(this, initial) || this;\n var complement = new HSL((_this.primary.hue + 180) % 360, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n initial,\n new HSL(complement.hue - 30, complement.saturation, complement.lightness).toHex(),\n new HSL(complement.hue + 30, complement.saturation, complement.lightness).toHex()\n ];\n return _this;\n }\n return SplitComplementary;\n}(Scheme));\nexport { SplitComplementary };\nvar Triadic = /** @class */ (function (_super) {\n __extends(Triadic, _super);\n function Triadic(initial) {\n var _this = _super.call(this, initial) || this;\n _this.colors = [\n initial,\n new HSL(_this.primary.hue - 120, _this.primary.saturation, _this.primary.lightness).toHex(),\n new HSL(_this.primary.hue + 120, _this.primary.saturation, _this.primary.lightness).toHex()\n ];\n return _this;\n }\n return Triadic;\n}(Scheme));\nexport { Triadic };\nvar Tetradic = /** @class */ (function (_super) {\n __extends(Tetradic, _super);\n function Tetradic(initial) {\n var _this = _super.call(this, initial) || this;\n var second = new HSL(_this.primary.hue + 45, _this.primary.saturation, _this.primary.lightness);\n var complement = new HSL(_this.primary.hue + 180, _this.primary.saturation, _this.primary.lightness);\n var secondComplement = new HSL(second.hue + 180, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n initial,\n second.toHex(),\n complement.toHex(),\n secondComplement.toHex()\n ];\n return _this;\n }\n return Tetradic;\n}(Scheme));\nexport { Tetradic };\nvar Square = /** @class */ (function (_super) {\n __extends(Square, _super);\n function Square(initial) {\n var _this = _super.call(this, initial) || this;\n var second = new HSL(_this.primary.hue + 90, _this.primary.saturation, _this.primary.lightness);\n var third = new HSL(_this.primary.hue + 180, _this.primary.saturation, _this.primary.lightness);\n var fourth = new HSL(second.hue + 270, _this.primary.saturation, _this.primary.lightness);\n _this.colors = [\n initial,\n second.toHex(),\n third.toHex(),\n fourth.toHex()\n ];\n return _this;\n }\n return Square;\n}(Scheme));\nexport { Square };\n","import SandPainter from \"./sand-painter\";\nvar Crack = /** @class */ (function () {\n function Crack(state, x, y, angle) {\n this.x = 0;\n this.y = 0;\n this.angle = 0;\n this.state = state;\n this.painter = new SandPainter(this);\n this.start(x, y, angle);\n }\n Crack.prototype.start = function (x, y, angle) {\n this.x = x + .61 * Math.cos(angle * Math.PI / 180);\n this.y = y + .61 * Math.sin(angle * Math.PI / 180);\n var flip = Math.random() > 0.5;\n this.angle = angle + (90 + Math.floor(Math.random() * 4.1 - 2)) * (flip ? -1 : 1);\n };\n Crack.prototype.draw = function () {\n this.x += .42 * Math.cos(this.angle * Math.PI / 180);\n this.y += .42 * Math.sin(this.angle * Math.PI / 180);\n var fuzzX = this.x + (Math.random() * .66 - .33);\n var fuzzY = this.y + (Math.random() * .66 - .33);\n var context = this.state.canvas.getContext(\"2d\");\n context.fillStyle = \"#000\";\n context.fillRect(fuzzX, fuzzY, 1, 1);\n this.painter.render();\n var x = Math.floor(this.x);\n var y = Math.floor(this.y);\n if (this.state.isWithinBoundary(x, y)) {\n var angle = this.state.grid[x][y];\n if (angle > 10000) {\n this.state.grid[x][y] = Math.floor(this.angle);\n this.state.seeds.push({ x: x, y: y });\n }\n else if (this.state.grid[x][y] != Math.floor(this.angle)) {\n var entry = this.state.getNewEntry();\n this.start(entry.x, entry.y, entry.angle);\n }\n }\n else {\n var entry = this.state.getNewEntry();\n this.start(entry.x, entry.y, entry.angle);\n this.state.addCrack();\n }\n };\n return Crack;\n}());\nexport default Crack;\n","import RGB from \"./rgb\";\nvar HSL = /** @class */ (function () {\n function HSL(hue, saturation, lightness) {\n this.hue = (hue + 360) % 360;\n this.saturation = saturation;\n this.lightness = lightness;\n }\n // https://en.wikipedia.org/wiki/HSL_and_HSV\n HSL.fromRgb = function (rgb) {\n var redValue = rgb.red / 255, greenValue = rgb.green / 255, blueValue = rgb.blue / 255, max = Math.max(redValue, greenValue, blueValue), min = Math.min(redValue, greenValue, blueValue), chroma = max - min, lightness = .5 * (max + min), saturation = 1 - (3 / (redValue + greenValue + blueValue)) * Math.min(redValue, greenValue, blueValue);\n var huePrime = 0;\n if (chroma != 0) {\n if (redValue == max)\n huePrime = ((greenValue - blueValue) / chroma) % 6;\n else if (greenValue == max)\n huePrime = ((blueValue - redValue) / chroma) + 2;\n else\n huePrime = ((redValue - greenValue) / chroma) + 4;\n }\n return new HSL(huePrime * 60, saturation, lightness);\n };\n HSL.fromHex = function (color) {\n return HSL.fromRgb(RGB.fromHex(color));\n };\n HSL.prototype.toHex = function () {\n return RGB.fromHsl(this).toHex();\n };\n return HSL;\n}());\nexport default HSL;\n","var RGB = /** @class */ (function () {\n function RGB(red, green, blue) {\n this.red = Math.floor(red < 0 ? 0 : red > 255 ? 255 : red);\n this.green = Math.floor(green < 0 ? 0 : green > 255 ? 255 : green);\n this.blue = Math.floor(blue < 0 ? 0 : blue > 255 ? 255 : blue);\n }\n RGB.prototype.toHex = function () {\n return (this.red << 16) + (this.green << 8) + this.blue;\n };\n // https://en.wikipedia.org/wiki/HSL_and_HSV\n RGB.fromHsl = function (hsl) {\n var red = 0, green = 0, blue = 0;\n var chroma = (1 - Math.abs(2 * hsl.lightness - 1)) * hsl.saturation, range = hsl.hue / 60, intermediate = chroma * (1 - Math.abs(range % 2 - 1)), match = hsl.lightness - chroma / 2;\n if (range >= 0 && range < 1) {\n red = chroma;\n green = intermediate;\n }\n else if (range >= 1 && range < 2) {\n red = intermediate;\n green = chroma;\n }\n else if (range >= 2 && range < 3) {\n green = chroma;\n blue = intermediate;\n }\n else if (range >= 3 && range < 4) {\n green = intermediate;\n blue = chroma;\n }\n else if (range >= 4 && range < 5) {\n red = intermediate;\n blue = chroma;\n }\n else if (range >= 5 && range < 6) {\n red = chroma;\n blue = intermediate;\n }\n return new RGB((red + match) * 255, (green + match) * 255, (blue + match) * 255);\n };\n RGB.fromHex = function (color) {\n var red = color >> 16;\n var green = (color - (red << 16)) >> 8;\n var blue = color - (red << 16) - (green << 8);\n return new RGB(red, green, blue);\n };\n return RGB;\n}());\nexport default RGB;\n","var SandPainter = /** @class */ (function () {\n function SandPainter(crack) {\n this.crack = crack;\n this.color = this.crack.state.getNextColor();\n this.gain = Math.random() / 10;\n }\n SandPainter.prototype.render = function () {\n var state = this.crack.state, x = this.crack.x, y = this.crack.y, angle = this.crack.angle;\n var open = true, endX = x, endY = y;\n while (open) {\n endX += .81 * Math.sin(angle * Math.PI / 180);\n endY -= .81 * Math.cos(angle * Math.PI / 180);\n var gridX = Math.floor(endX);\n var gridY = Math.floor(endY);\n if (state.isWithinBoundary(gridX, gridY)) {\n open = state.grid[gridX][gridY] > 10000;\n }\n else {\n open = false;\n }\n }\n this.gain += (Math.random() / 10 - .05);\n if (this.gain < 0)\n this.gain = 0;\n if (this.gain > 1)\n this.gain = 1;\n var grains = 64;\n var hex = this.color.toString(16);\n var w = this.gain / (grains - 1); // some kind of multiplier\n var context = state.canvas.getContext(\"2d\");\n for (var i = 0; i < grains; i++) {\n var alpha = Math.floor((.1 - i / (grains * 10)) * 255);\n var paintX = x + (endX - x) * Math.sin(Math.sin(i * w));\n var paintY = y + (endY - y) * Math.sin(Math.sin(i * w));\n context.fillStyle = \"#\".concat(hex.padStart(6, \"0\")).concat(alpha.toString(16).padStart(2, \"0\"));\n context.fillRect(paintX, paintY, 1, 1);\n }\n };\n return SandPainter;\n}());\nexport default SandPainter;\n","import Crack from \"./crack\";\nvar State = /** @class */ (function () {\n function State(colors, maxCracks, canvas) {\n this.canvasColors = [\n \"rgb(27 27 27 / 90%)\",\n \"rgb(90 90 90 / 90%)\",\n \"rgb(126 126 126 / 90%)\",\n \"rgb(180 180 180 / 90%)\",\n \"rgb(255 255 255 / 90%)\",\n \"rgb(180 180 180 / 90%)\",\n \"rgb(126 126 126 / 90%)\",\n \"rgb(90 90 90 / 90%)\"\n ];\n this.canvasIndex = 0;\n this.colorIndex = 0;\n this.canvas = canvas;\n this.maxCracks = maxCracks;\n this.grid = [];\n this.colors = colors;\n this.cracks = [];\n this.seeds = [];\n this.init();\n }\n State.prototype.init = function (colors) {\n if (colors)\n this.colors = colors;\n this.cracks.length = 0;\n this.grid.length = 0;\n this.seeds.length = 0;\n this.colorIndex = 0;\n var height = this.canvas.height;\n var width = this.canvas.width;\n var context = this.canvas.getContext(\"2d\");\n context.fillStyle = this.canvasColors[this.canvasIndex++ % this.canvasColors.length];\n context.fillRect(0, 0, width, height);\n for (var x = 0; x < width; x++) {\n this.grid[x] = [];\n for (var y = 0; y < height; y++) {\n this.grid[x][y] = 10001;\n }\n }\n for (var i = 0; i < 3; i++) {\n var x = Math.floor(Math.random() * width);\n var y = Math.floor(Math.random() * height);\n var angle = Math.floor(Math.random() * 360);\n this.cracks.push(new Crack(this, x, y, angle));\n this.grid[x][y] = angle;\n }\n };\n State.prototype.addCrack = function () {\n if (this.cracks.length >= this.maxCracks)\n return;\n var _a = this.getNewEntry(), x = _a.x, y = _a.y, angle = _a.angle;\n this.cracks.push(new Crack(this, x, y, angle));\n };\n State.prototype.getNextColor = function () {\n return this.colors[this.colorIndex++ % this.colors.length];\n };\n State.prototype.isWithinBoundary = function (x, y) {\n return x >= 0 && x < this.canvas.width && y >= 0 && y < this.canvas.height;\n };\n State.prototype.getNewEntry = function () {\n if (!this.seeds.length) {\n var x = Math.floor(Math.random() * this.canvas.width);\n var y = Math.floor(Math.random() * this.canvas.height);\n var angle = this.grid[x][y];\n if (angle > 10000) {\n angle = Math.floor(Math.random() * 360);\n this.grid[x][y] = angle;\n }\n return { x: x, y: y, angle: angle };\n }\n var randomIndex = Math.floor(Math.random() * this.seeds.length);\n var entry = this.seeds.splice(randomIndex, 1)[0];\n return {\n x: entry.x,\n y: entry.y,\n angle: this.grid[entry.x][entry.y]\n };\n };\n return State;\n}());\nexport default State;\n","// TS attempt of http://www.complexification.net/gallery/machines/substrate/index.php by laniaung.me\nimport State from \"./state\";\nimport { Analogous, Monochromatic, SplitComplementary, Square, Tetradic, Triadic } from \"./color-schemes\";\nvar Substrate = /** @class */ (function () {\n function Substrate(maxCracks, colors) {\n if (!(colors === null || colors === void 0 ? void 0 : colors.length))\n colors = [0x3a1e3e, 0x7c2d3b, 0xb94f3c, 0xf4a462, 0xf9c54e]; // https://colormagic.app/palette/671eeb6c42273fc4c1bb1ac7\n var canvas = document.createElement(\"canvas\");\n canvas.width = document.body.clientWidth;\n canvas.height = document.body.clientHeight;\n document.body.appendChild(canvas);\n this.state = new State(colors, maxCracks, canvas);\n this.init();\n }\n Substrate.prototype.init = function () {\n var me = this;\n var draw = function () {\n for (var _i = 0, _a = me.state.cracks; _i < _a.length; _i++) {\n var crack = _a[_i];\n crack.draw();\n }\n requestAnimationFrame(draw);\n };\n setInterval(function () { return me.state.init(me.getRandomColorScheme()); }, 120 * 1000);\n draw();\n };\n Substrate.prototype.getRandomColorScheme = function () {\n var color = Math.floor(Math.random() * Math.pow(256, 3));\n var scheme;\n switch (Math.floor(Math.random() * 6)) {\n case 1:\n scheme = new Monochromatic(color);\n break;\n case 2:\n scheme = new SplitComplementary(color);\n break;\n case 3:\n scheme = new Triadic(color);\n break;\n case 4:\n scheme = new Tetradic(color);\n break;\n case 5:\n scheme = new Square(color);\n break;\n default:\n scheme = new Analogous(color);\n }\n console.info(scheme.toString());\n return scheme.colors;\n };\n return Substrate;\n}());\nexport default Substrate;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { fetchWeatherApi } from \"openmeteo\";\nvar Weather = /** @class */ (function () {\n function Weather(latitude, longitude) {\n this.apiUrl = \"https://api.open-meteo.com/v1/forecast\";\n this.dailyVariables = [\"temperature_2m_max\", \"temperature_2m_min\", \"sunrise\", \"sunset\", \"uv_index_max\", \"precipitation_sum\", \"precipitation_hours\", \"wind_speed_10m_max\", \"wind_gusts_10m_max\", \"wind_direction_10m_dominant\"];\n this.hourlyVariables = [\"temperature_2m\", \"precipitation\", \"precipitation_probability\"];\n this.currentVariables = [\"temperature_2m\", \"relative_humidity_2m\", \"apparent_temperature\", \"precipitation\", \"wind_speed_10m\", \"wind_gusts_10m\", \"wind_direction_10m\", \"cloud_cover\"];\n this.hourly = [];\n this.daily = [];\n this.options = new WeatherOptions(latitude !== null && latitude !== void 0 ? latitude : 47.61002138071677, longitude !== null && longitude !== void 0 ? longitude : -122.17906310779568);\n var time = document.getElementById(\"time\");\n time.textContent = new Date().toLocaleTimeString(\"en-US\", { hour12: false, timeStyle: \"short\" });\n setInterval(function () { return time.textContent = new Date().toLocaleTimeString(\"en-US\", { hour12: false, timeStyle: \"short\" }); }, 15000);\n var me = this;\n setInterval(function () { return me.fetchWeather().then(function () { return me.setDisplay(); }); }, 300000);\n me.fetchWeather().then(function () { return me.setDisplay(); });\n }\n Weather.prototype.fetchWeather = function () {\n return __awaiter(this, void 0, void 0, function () {\n var me, parameters, responses, _i, responses_1, response, current, hourly, daily;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n me = this;\n parameters = __assign({}, me.options);\n if (!me.doFetchData(parameters))\n return [2 /*return*/];\n return [4 /*yield*/, fetchWeatherApi(me.apiUrl, parameters)];\n case 1:\n responses = _a.sent();\n for (_i = 0, responses_1 = responses; _i < responses_1.length; _i++) {\n response = responses_1[_i];\n current = response.current();\n hourly = response.hourly();\n daily = response.daily();\n if (current != null)\n me.setCurrentData(current);\n if (hourly != null)\n me.setHourlyData(hourly);\n if (daily != null)\n me.setDailyData(daily);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n Weather.prototype.doFetchData = function (parameters) {\n var me = this;\n if (!me.lastFetched) {\n parameters[\"daily\"] = me.dailyVariables;\n parameters[\"hourly\"] = me.hourlyVariables;\n parameters[\"current\"] = me.currentVariables;\n me.lastFetched = new LastFetched();\n return true;\n }\n else {\n // Weather data is updated :00, :15, :30, :45 so wait at least a minute\n if (me.lastFetched.current.getMinutes() % 15 >= 1 && me.lastFetched.current.getMinutes() % 15 < 6) {\n var now = new Date();\n // Make sure data is over 5 minutes old at least\n if ((now.getTime() - me.lastFetched.current.getTime()) > 300000) {\n parameters[\"current\"] = me.currentVariables;\n me.lastFetched.current = new Date();\n return true;\n }\n }\n // Reasonable-ish timers?\n if (me.lastFetched.hoursSinceHourly() > 3) {\n parameters[\"hourly\"] = me.hourlyVariables;\n me.lastFetched.hourly = new Date();\n return true;\n }\n if (me.lastFetched.hoursSinceDaily() > 8) {\n parameters[\"daily\"] = me.dailyVariables;\n me.lastFetched.daily = new Date();\n return true;\n }\n }\n return false;\n };\n Weather.prototype.setCurrentData = function (current) {\n this.current = {\n time: new Date(Number(current.time()) * 1000),\n temperature: current.variables(0).value(),\n humidity: current.variables(1).value(),\n feelsLike: current.variables(2).value(),\n precipitation: current.variables(3).value(),\n windSpeed: current.variables(4).value(),\n windGusts: current.variables(5).value(),\n windDirection: current.variables(6).value(),\n cloudCoverage: current.variables(7).value()\n };\n };\n Weather.prototype.setHourlyData = function (hourly) {\n var length = Number(hourly.timeEnd() - hourly.time()) / hourly.interval();\n var temperatures = hourly.variables(0).valuesArray();\n var precipitationTotals = hourly.variables(1).valuesArray();\n var precipitationProbabilities = hourly.variables(2).valuesArray();\n this.hourly.length = 0;\n for (var i = 0; i < length; i++) {\n this.hourly.push({\n time: new Date((Number(hourly.time()) + i * hourly.interval()) * 1000),\n temperature: temperatures[i],\n precipitation: precipitationTotals[i],\n precipitationProbability: precipitationProbabilities[i]\n });\n }\n };\n Weather.prototype.setDailyData = function (daily) {\n var length = Number(daily.timeEnd() - daily.time()) / daily.interval();\n var maxTemperatures = daily.variables(0).valuesArray();\n var minTemperatures = daily.variables(1).valuesArray();\n var sunrise = daily.variables(2);\n var sunset = daily.variables(3);\n var maxUVs = daily.variables(4).valuesArray();\n var precipitationTotals = daily.variables(5).valuesArray();\n var precipitationHours = daily.variables(6).valuesArray();\n var maxWindSpeeds = daily.variables(7).valuesArray();\n var maxWindGusts = daily.variables(8).valuesArray();\n var prominentWindDirections = daily.variables(9).valuesArray();\n this.daily.length = 0;\n for (var i = 0; i < length; i++) {\n this.daily.push({\n time: new Date((Number(daily.time()) + i * daily.interval()) * 1000),\n maxTemperature: maxTemperatures[i],\n minTemperature: minTemperatures[i],\n sunrise: new Date((Number(sunrise.valuesInt64(i))) * 1000),\n sunset: new Date((Number(sunset.valuesInt64(i))) * 1000),\n maxUV: maxUVs[i],\n totalPrecipitation: precipitationTotals[i],\n hoursOfPrecipitation: precipitationHours[i],\n maxWindSpeed: maxWindSpeeds[i],\n maxWindGusts: maxWindGusts[i],\n prominentWindDirection: prominentWindDirections[i]\n });\n }\n };\n Weather.prototype.setDisplay = function () {\n var current = document.getElementById(\"current\");\n current.innerHTML = \"
thermostat\".concat(Math.round(this.current.temperature), \" (\").concat(Math.round(this.current.feelsLike), \")
\\n
\\n
water_drop \").concat(Math.round(this.current.humidity), \"%
\\n
cloud \").concat(Math.round(this.current.cloudCoverage), \"%
\\n
weather_mix \").concat(Math.round(this.current.precipitation), \"%
\\n
air \").concat(Math.round(this.current.windSpeed), \" (\").concat(Math.round(this.current.windGusts), \") \").concat(this.inCardinals(this.current.windDirection), \"
\\n
\");\n };\n Weather.prototype.inCardinals = function (direction) {\n if (direction > 337.5 || direction <= 22.5)\n return \"N\";\n if (direction > 22.5 || direction <= 67.5)\n return \"NE\";\n if (direction > 67.5 || direction <= 112.5)\n return \"E\";\n if (direction > 112.5 || direction <= 157.5)\n return \"SE\";\n if (direction > 157.5 || direction <= 202.5)\n return \"S\";\n if (direction > 202.5 || direction <= 249.5)\n return \"SW\";\n if (direction > 249.5 || direction <= 294.5)\n return \"W\";\n if (direction > 294.5 || direction <= 337.5)\n return \"NW\";\n return null;\n };\n return Weather;\n}());\nexport default Weather;\nvar WeatherOptions = /** @class */ (function () {\n function WeatherOptions(latitude, longitude, timezone) {\n if (timezone === void 0) { timezone = \"America/Los_Angeles\"; }\n this.timezone = \"America/Los_Angeles\";\n this[\"wind_speed_unit\"] = \"mph\";\n this[\"temperature_unit\"] = \"fahrenheit\";\n this[\"precipitation_unit\"] = \"inch\";\n this.latitude = latitude;\n this.longitude = longitude;\n this.timezone = timezone;\n }\n return WeatherOptions;\n}());\nvar LastFetched = /** @class */ (function () {\n function LastFetched() {\n this.current = new Date();\n this.hourly = new Date();\n this.daily = new Date();\n }\n LastFetched.prototype.hoursSinceHourly = function () {\n return (new Date().getTime() - this.hourly.getTime()) / 3600000;\n };\n LastFetched.prototype.hoursSinceDaily = function () {\n return (new Date().getTime() - this.daily.getTime()) / 3600000;\n };\n return LastFetched;\n}());\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Substrate from \"./substrate\";\nimport Weather from \"./weather\";\nvar ready = function (func) { return document.readyState !== \"loading\" ? func() : document.addEventListener(\"DOMContentLoaded\", func); };\nready(function () {\n new Substrate(20);\n var weather;\n navigator.geolocation.getCurrentPosition(function (position) {\n weather = new Weather(position.coords.latitude, position.coords.longitude);\n }, function () {\n weather = new Weather();\n });\n});\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/www/styles.css b/www/styles.css index bddedb8..eedff0b 100644 --- a/www/styles.css +++ b/www/styles.css @@ -1,5 +1,11 @@ +@font-face { + font-family: "Material Symbols Outlined"; + font-style: normal; + src: url("./fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].woff2") format("woff"); +} html, body { + font-size: 24px; height: 100%; margin: 0; overflow: hidden; @@ -13,14 +19,28 @@ body #weather-panel { font-family: Verdana, sans-serif; font-weight: bold; height: 500px; - left: calc(50% - 250px); - padding: 40px; + left: calc(50% - 275px); + padding: 25px; position: absolute; text-shadow: #000 1px 1px, #000 -1px 1px, #000 -1px -1px, #000 1px -1px; top: calc(50% - 250px); width: 500px; z-index: 10; } +html #weather-panel .material, +body #weather-panel .material { + font-family: "Material Symbols Outlined"; + font-weight: normal; + font-style: normal; + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + vertical-align: text-bottom; +} @supports (-webkit-text-stroke: 1px #000) { html #weather-panel, body #weather-panel { @@ -28,3 +48,12 @@ body #weather-panel { -webkit-text-fill-color: #fff; } } +html #weather-panel #time, +body #weather-panel #time { + font-size: 3rem; + text-align: center; +} +html #weather-panel section header, +body #weather-panel section header { + font-size: 1.5rem; +}