diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..0a4a3f24
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,4139 @@
+
+[*]
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = false
+insert_final_newline = false
+indent_style = space
+indent_size = 4
+
+# Microsoft .NET properties
+csharp_indent_braces = false
+csharp_indent_switch_labels = true
+csharp_new_line_before_catch = false
+csharp_new_line_before_else = false
+csharp_new_line_before_finally = false
+csharp_new_line_before_members_in_object_initializers = false
+csharp_new_line_before_open_brace = none
+csharp_new_line_between_query_expression_clauses = true
+csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
+csharp_prefer_braces = true:none
+csharp_preserve_single_line_blocks = true
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_comma = true
+csharp_space_after_dot = false
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_after_semicolon_in_for_statement = true
+csharp_space_around_binary_operators = before_and_after
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_before_comma = false
+csharp_space_before_dot = false
+csharp_space_before_open_square_brackets = false
+csharp_space_before_semicolon_in_for_statement = false
+csharp_space_between_empty_square_brackets = false
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_name_and_open_parenthesis = false
+csharp_space_between_method_declaration_parameter_list_parentheses = false
+csharp_space_between_parentheses = false
+csharp_space_between_square_brackets = false
+csharp_style_namespace_declarations = file_scoped:suggestion
+csharp_style_prefer_utf8_string_literals = true:suggestion
+csharp_style_var_elsewhere = false:suggestion
+csharp_style_var_for_built_in_types = false:suggestion
+csharp_style_var_when_type_is_apparent = false:suggestion
+csharp_using_directive_placement = inside_namespace:silent
+dotnet_diagnostic.bc40000.severity = warning
+dotnet_diagnostic.bc400005.severity = warning
+dotnet_diagnostic.bc40008.severity = warning
+dotnet_diagnostic.bc40056.severity = warning
+dotnet_diagnostic.bc42016.severity = warning
+dotnet_diagnostic.bc42024.severity = warning
+dotnet_diagnostic.bc42025.severity = warning
+dotnet_diagnostic.bc42104.severity = warning
+dotnet_diagnostic.bc42105.severity = warning
+dotnet_diagnostic.bc42106.severity = warning
+dotnet_diagnostic.bc42107.severity = warning
+dotnet_diagnostic.bc42304.severity = warning
+dotnet_diagnostic.bc42309.severity = warning
+dotnet_diagnostic.bc42322.severity = warning
+dotnet_diagnostic.bc42349.severity = warning
+dotnet_diagnostic.bc42353.severity = warning
+dotnet_diagnostic.bc42354.severity = warning
+dotnet_diagnostic.bc42355.severity = warning
+dotnet_diagnostic.bc42356.severity = warning
+dotnet_diagnostic.bc42358.severity = warning
+dotnet_diagnostic.bc42380.severity = warning
+dotnet_diagnostic.bc42504.severity = warning
+dotnet_diagnostic.bc42505.severity = warning
+dotnet_diagnostic.ca2252.severity = error
+dotnet_diagnostic.ca2254.severity = suggestion
+dotnet_diagnostic.cs0067.severity = warning
+dotnet_diagnostic.cs0078.severity = warning
+dotnet_diagnostic.cs0108.severity = warning
+dotnet_diagnostic.cs0109.severity = warning
+dotnet_diagnostic.cs0114.severity = warning
+dotnet_diagnostic.cs0162.severity = warning
+dotnet_diagnostic.cs0164.severity = warning
+dotnet_diagnostic.cs0168.severity = warning
+dotnet_diagnostic.cs0169.severity = warning
+dotnet_diagnostic.cs0183.severity = warning
+dotnet_diagnostic.cs0184.severity = warning
+dotnet_diagnostic.cs0197.severity = warning
+dotnet_diagnostic.cs0219.severity = warning
+dotnet_diagnostic.cs0252.severity = warning
+dotnet_diagnostic.cs0253.severity = warning
+dotnet_diagnostic.cs0282.severity = warning
+dotnet_diagnostic.cs0414.severity = warning
+dotnet_diagnostic.cs0420.severity = warning
+dotnet_diagnostic.cs0458.severity = warning
+dotnet_diagnostic.cs0464.severity = warning
+dotnet_diagnostic.cs0465.severity = warning
+dotnet_diagnostic.cs0469.severity = warning
+dotnet_diagnostic.cs0472.severity = warning
+dotnet_diagnostic.cs0612.severity = warning
+dotnet_diagnostic.cs0618.severity = warning
+dotnet_diagnostic.cs0628.severity = warning
+dotnet_diagnostic.cs0642.severity = warning
+dotnet_diagnostic.cs0649.severity = warning
+dotnet_diagnostic.cs0652.severity = warning
+dotnet_diagnostic.cs0657.severity = warning
+dotnet_diagnostic.cs0658.severity = warning
+dotnet_diagnostic.cs0659.severity = warning
+dotnet_diagnostic.cs0660.severity = warning
+dotnet_diagnostic.cs0661.severity = warning
+dotnet_diagnostic.cs0665.severity = warning
+dotnet_diagnostic.cs0672.severity = warning
+dotnet_diagnostic.cs0675.severity = warning
+dotnet_diagnostic.cs0693.severity = warning
+dotnet_diagnostic.cs0728.severity = warning
+dotnet_diagnostic.cs0809.severity = warning
+dotnet_diagnostic.cs1030.severity = warning
+dotnet_diagnostic.cs1058.severity = warning
+dotnet_diagnostic.cs1066.severity = warning
+dotnet_diagnostic.cs1522.severity = warning
+dotnet_diagnostic.cs1570.severity = warning
+dotnet_diagnostic.cs1571.severity = warning
+dotnet_diagnostic.cs1572.severity = warning
+dotnet_diagnostic.cs1573.severity = warning
+dotnet_diagnostic.cs1574.severity = warning
+dotnet_diagnostic.cs1580.severity = warning
+dotnet_diagnostic.cs1581.severity = warning
+dotnet_diagnostic.cs1584.severity = warning
+dotnet_diagnostic.cs1587.severity = warning
+dotnet_diagnostic.cs1589.severity = warning
+dotnet_diagnostic.cs1590.severity = warning
+dotnet_diagnostic.cs1591.severity = warning
+dotnet_diagnostic.cs1592.severity = warning
+dotnet_diagnostic.cs1687.severity = warning
+dotnet_diagnostic.cs1710.severity = warning
+dotnet_diagnostic.cs1711.severity = warning
+dotnet_diagnostic.cs1712.severity = warning
+dotnet_diagnostic.cs1717.severity = warning
+dotnet_diagnostic.cs1723.severity = warning
+dotnet_diagnostic.cs1911.severity = warning
+dotnet_diagnostic.cs1957.severity = warning
+dotnet_diagnostic.cs1981.severity = warning
+dotnet_diagnostic.cs1998.severity = warning
+dotnet_diagnostic.cs4014.severity = warning
+dotnet_diagnostic.cs4024.severity = warning
+dotnet_diagnostic.cs4025.severity = warning
+dotnet_diagnostic.cs4026.severity = warning
+dotnet_diagnostic.cs7022.severity = warning
+dotnet_diagnostic.cs7023.severity = warning
+dotnet_diagnostic.cs7080.severity = warning
+dotnet_diagnostic.cs7081.severity = warning
+dotnet_diagnostic.cs7082.severity = warning
+dotnet_diagnostic.cs7095.severity = warning
+dotnet_diagnostic.cs8073.severity = warning
+dotnet_diagnostic.cs8094.severity = warning
+dotnet_diagnostic.cs8123.severity = warning
+dotnet_diagnostic.cs8305.severity = warning
+dotnet_diagnostic.cs8321.severity = warning
+dotnet_diagnostic.cs8383.severity = warning
+dotnet_diagnostic.cs8424.severity = warning
+dotnet_diagnostic.cs8425.severity = warning
+dotnet_diagnostic.cs8500.severity = warning
+dotnet_diagnostic.cs8509.severity = warning
+dotnet_diagnostic.cs8519.severity = warning
+dotnet_diagnostic.cs8520.severity = warning
+dotnet_diagnostic.cs8524.severity = warning
+dotnet_diagnostic.cs8597.severity = warning
+dotnet_diagnostic.cs8600.severity = warning
+dotnet_diagnostic.cs8601.severity = warning
+dotnet_diagnostic.cs8602.severity = warning
+dotnet_diagnostic.cs8603.severity = warning
+dotnet_diagnostic.cs8604.severity = warning
+dotnet_diagnostic.cs8605.severity = warning
+dotnet_diagnostic.cs8607.severity = warning
+dotnet_diagnostic.cs8608.severity = warning
+dotnet_diagnostic.cs8609.severity = warning
+dotnet_diagnostic.cs8610.severity = warning
+dotnet_diagnostic.cs8611.severity = warning
+dotnet_diagnostic.cs8612.severity = warning
+dotnet_diagnostic.cs8613.severity = warning
+dotnet_diagnostic.cs8614.severity = warning
+dotnet_diagnostic.cs8615.severity = warning
+dotnet_diagnostic.cs8616.severity = warning
+dotnet_diagnostic.cs8617.severity = warning
+dotnet_diagnostic.cs8618.severity = warning
+dotnet_diagnostic.cs8619.severity = warning
+dotnet_diagnostic.cs8620.severity = warning
+dotnet_diagnostic.cs8621.severity = warning
+dotnet_diagnostic.cs8622.severity = warning
+dotnet_diagnostic.cs8624.severity = warning
+dotnet_diagnostic.cs8625.severity = warning
+dotnet_diagnostic.cs8629.severity = warning
+dotnet_diagnostic.cs8631.severity = warning
+dotnet_diagnostic.cs8632.severity = warning
+dotnet_diagnostic.cs8633.severity = warning
+dotnet_diagnostic.cs8634.severity = warning
+dotnet_diagnostic.cs8643.severity = warning
+dotnet_diagnostic.cs8644.severity = warning
+dotnet_diagnostic.cs8645.severity = warning
+dotnet_diagnostic.cs8655.severity = warning
+dotnet_diagnostic.cs8656.severity = warning
+dotnet_diagnostic.cs8667.severity = warning
+dotnet_diagnostic.cs8669.severity = warning
+dotnet_diagnostic.cs8670.severity = warning
+dotnet_diagnostic.cs8714.severity = warning
+dotnet_diagnostic.cs8762.severity = warning
+dotnet_diagnostic.cs8763.severity = warning
+dotnet_diagnostic.cs8764.severity = warning
+dotnet_diagnostic.cs8765.severity = warning
+dotnet_diagnostic.cs8766.severity = warning
+dotnet_diagnostic.cs8767.severity = warning
+dotnet_diagnostic.cs8768.severity = warning
+dotnet_diagnostic.cs8769.severity = warning
+dotnet_diagnostic.cs8770.severity = warning
+dotnet_diagnostic.cs8774.severity = warning
+dotnet_diagnostic.cs8775.severity = warning
+dotnet_diagnostic.cs8776.severity = warning
+dotnet_diagnostic.cs8777.severity = warning
+dotnet_diagnostic.cs8794.severity = warning
+dotnet_diagnostic.cs8819.severity = warning
+dotnet_diagnostic.cs8824.severity = warning
+dotnet_diagnostic.cs8825.severity = warning
+dotnet_diagnostic.cs8846.severity = warning
+dotnet_diagnostic.cs8847.severity = warning
+dotnet_diagnostic.cs8851.severity = warning
+dotnet_diagnostic.cs8860.severity = warning
+dotnet_diagnostic.cs8892.severity = warning
+dotnet_diagnostic.cs8907.severity = warning
+dotnet_diagnostic.cs8947.severity = warning
+dotnet_diagnostic.cs8960.severity = warning
+dotnet_diagnostic.cs8961.severity = warning
+dotnet_diagnostic.cs8962.severity = warning
+dotnet_diagnostic.cs8963.severity = warning
+dotnet_diagnostic.cs8965.severity = warning
+dotnet_diagnostic.cs8966.severity = warning
+dotnet_diagnostic.cs8971.severity = warning
+dotnet_diagnostic.cs8974.severity = warning
+dotnet_diagnostic.cs8981.severity = warning
+dotnet_diagnostic.cs9042.severity = warning
+dotnet_diagnostic.cs9073.severity = warning
+dotnet_diagnostic.cs9074.severity = warning
+dotnet_diagnostic.cs9080.severity = warning
+dotnet_diagnostic.cs9081.severity = warning
+dotnet_diagnostic.cs9082.severity = warning
+dotnet_diagnostic.cs9083.severity = warning
+dotnet_diagnostic.cs9084.severity = warning
+dotnet_diagnostic.cs9085.severity = warning
+dotnet_diagnostic.cs9086.severity = warning
+dotnet_diagnostic.cs9087.severity = warning
+dotnet_diagnostic.cs9088.severity = warning
+dotnet_diagnostic.cs9089.severity = warning
+dotnet_diagnostic.cs9090.severity = warning
+dotnet_diagnostic.cs9091.severity = warning
+dotnet_diagnostic.cs9092.severity = warning
+dotnet_diagnostic.cs9093.severity = warning
+dotnet_diagnostic.cs9094.severity = warning
+dotnet_diagnostic.cs9095.severity = warning
+dotnet_diagnostic.cs9097.severity = warning
+dotnet_diagnostic.cs9099.severity = warning
+dotnet_diagnostic.cs9100.severity = warning
+dotnet_diagnostic.cs9107.severity = warning
+dotnet_diagnostic.cs9113.severity = warning
+dotnet_diagnostic.cs9123.severity = warning
+dotnet_diagnostic.cs9124.severity = warning
+dotnet_diagnostic.cs9154.severity = warning
+dotnet_diagnostic.cs9158.severity = warning
+dotnet_diagnostic.cs9159.severity = warning
+dotnet_diagnostic.cs9179.severity = warning
+dotnet_diagnostic.cs9181.severity = warning
+dotnet_diagnostic.cs9182.severity = warning
+dotnet_diagnostic.cs9183.severity = warning
+dotnet_diagnostic.cs9184.severity = warning
+dotnet_diagnostic.cs9191.severity = warning
+dotnet_diagnostic.cs9192.severity = warning
+dotnet_diagnostic.cs9193.severity = warning
+dotnet_diagnostic.cs9195.severity = warning
+dotnet_diagnostic.cs9196.severity = warning
+dotnet_diagnostic.cs9197.severity = warning
+dotnet_diagnostic.cs9198.severity = warning
+dotnet_diagnostic.cs9200.severity = warning
+dotnet_diagnostic.cs9204.severity = warning
+dotnet_diagnostic.cs9208.severity = warning
+dotnet_diagnostic.cs9209.severity = warning
+dotnet_diagnostic.cs9216.severity = warning
+dotnet_diagnostic.cs9256.severity = warning
+dotnet_diagnostic.cs9258.severity = warning
+dotnet_diagnostic.cs9264.severity = warning
+dotnet_diagnostic.cs9266.severity = warning
+dotnet_diagnostic.fs0020.severity = warning
+dotnet_diagnostic.fs0025.severity = warning
+dotnet_diagnostic.fs0026.severity = warning
+dotnet_diagnostic.fs0066.severity = warning
+dotnet_diagnostic.fs0067.severity = warning
+dotnet_diagnostic.fs0104.severity = warning
+dotnet_diagnostic.fs0193.severity = warning
+dotnet_diagnostic.fs0524.severity = warning
+dotnet_diagnostic.fs1182.severity = warning
+dotnet_diagnostic.fs1183.severity = warning
+dotnet_diagnostic.fs3218.severity = warning
+dotnet_diagnostic.fs3390.severity = warning
+dotnet_diagnostic.fs3520.severity = warning
+dotnet_diagnostic.syslib1014.severity = warning
+dotnet_diagnostic.wme006.severity = warning
+dotnet_naming_rule.constants_rule.import_to_resharper = True
+dotnet_naming_rule.constants_rule.resharper_description = Constant fields (not private)
+dotnet_naming_rule.constants_rule.resharper_guid = 669e5282-fb4b-4e90-91e7-07d269d04b60
+dotnet_naming_rule.constants_rule.severity = warning
+dotnet_naming_rule.constants_rule.style = upper_camel_case_style
+dotnet_naming_rule.constants_rule.symbols = constants_symbols
+dotnet_naming_rule.enum_member_rule.import_to_resharper = True
+dotnet_naming_rule.enum_member_rule.resharper_description = Enum members
+dotnet_naming_rule.enum_member_rule.resharper_guid = 8b8504e3-f0be-4c14-9103-c732f2bddc15
+dotnet_naming_rule.enum_member_rule.severity = warning
+dotnet_naming_rule.enum_member_rule.style = upper_camel_case_style
+dotnet_naming_rule.enum_member_rule.symbols = enum_member_symbols
+dotnet_naming_rule.event_rule.import_to_resharper = True
+dotnet_naming_rule.event_rule.resharper_description = Events
+dotnet_naming_rule.event_rule.resharper_guid = 0c4c6401-2a1f-4db1-a21f-562f51542cf8
+dotnet_naming_rule.event_rule.resharper_style = aaBb, AaBb
+dotnet_naming_rule.event_rule.severity = warning
+dotnet_naming_rule.event_rule.style = lower_camel_case_style_1
+dotnet_naming_rule.event_rule.symbols = event_symbols
+dotnet_naming_rule.interfaces_rule.import_to_resharper = True
+dotnet_naming_rule.interfaces_rule.resharper_description = Interfaces
+dotnet_naming_rule.interfaces_rule.resharper_guid = a7a3339e-4e89-4319-9735-a9dc4cb74cc7
+dotnet_naming_rule.interfaces_rule.severity = warning
+dotnet_naming_rule.interfaces_rule.style = i_upper_camel_case_style
+dotnet_naming_rule.interfaces_rule.symbols = interfaces_symbols
+dotnet_naming_rule.locals_rule.import_to_resharper = True
+dotnet_naming_rule.locals_rule.resharper_description = Local variables
+dotnet_naming_rule.locals_rule.resharper_guid = 61a991a4-d0a3-4d19-90a5-f8f4d75c30c1
+dotnet_naming_rule.locals_rule.severity = warning
+dotnet_naming_rule.locals_rule.style = lower_camel_case_style_1
+dotnet_naming_rule.locals_rule.symbols = locals_symbols
+dotnet_naming_rule.local_constants_rule.import_to_resharper = True
+dotnet_naming_rule.local_constants_rule.resharper_description = Local constants
+dotnet_naming_rule.local_constants_rule.resharper_guid = a4f433b8-abcd-4e55-a08f-82e78cef0f0c
+dotnet_naming_rule.local_constants_rule.severity = warning
+dotnet_naming_rule.local_constants_rule.style = lower_camel_case_style_1
+dotnet_naming_rule.local_constants_rule.symbols = local_constants_symbols
+dotnet_naming_rule.local_functions_rule.import_to_resharper = True
+dotnet_naming_rule.local_functions_rule.resharper_description = Local functions
+dotnet_naming_rule.local_functions_rule.resharper_guid = 76f79b1e-ece7-4df2-a322-1bd7fea25eb7
+dotnet_naming_rule.local_functions_rule.severity = warning
+dotnet_naming_rule.local_functions_rule.style = upper_camel_case_style
+dotnet_naming_rule.local_functions_rule.symbols = local_functions_symbols
+dotnet_naming_rule.method_rule.import_to_resharper = True
+dotnet_naming_rule.method_rule.resharper_description = Methods
+dotnet_naming_rule.method_rule.resharper_guid = 8284009d-e743-4d89-9402-a5bf9a89b657
+dotnet_naming_rule.method_rule.severity = warning
+dotnet_naming_rule.method_rule.style = upper_camel_case_style
+dotnet_naming_rule.method_rule.symbols = method_symbols
+dotnet_naming_rule.parameters_rule.import_to_resharper = True
+dotnet_naming_rule.parameters_rule.resharper_description = Parameters
+dotnet_naming_rule.parameters_rule.resharper_guid = 8a85b61a-1024-4f87-b9ef-1fdae19930a1
+dotnet_naming_rule.parameters_rule.severity = warning
+dotnet_naming_rule.parameters_rule.style = lower_camel_case_style_1
+dotnet_naming_rule.parameters_rule.symbols = parameters_symbols
+dotnet_naming_rule.private_constants_rule.import_to_resharper = True
+dotnet_naming_rule.private_constants_rule.resharper_description = Constant fields (private)
+dotnet_naming_rule.private_constants_rule.resharper_guid = 236f7aa5-7b06-43ca-bf2a-9b31bfcff09a
+dotnet_naming_rule.private_constants_rule.severity = warning
+dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style
+dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols
+dotnet_naming_rule.private_instance_fields_rule.import_to_resharper = True
+dotnet_naming_rule.private_instance_fields_rule.resharper_description = Instance fields (private)
+dotnet_naming_rule.private_instance_fields_rule.resharper_guid = 4a98fdf6-7d98-4f5a-afeb-ea44ad98c70c
+dotnet_naming_rule.private_instance_fields_rule.severity = warning
+dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style
+dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols
+dotnet_naming_rule.private_static_fields_rule.import_to_resharper = True
+dotnet_naming_rule.private_static_fields_rule.resharper_description = Static fields (private)
+dotnet_naming_rule.private_static_fields_rule.resharper_exclusive_prefixes_suffixes = true
+dotnet_naming_rule.private_static_fields_rule.resharper_guid = f9fce829-e6f4-4cb2-80f1-5497c44f51df
+dotnet_naming_rule.private_static_fields_rule.severity = warning
+dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style
+dotnet_naming_rule.private_static_readonly_rule.import_to_resharper = True
+dotnet_naming_rule.private_static_readonly_rule.resharper_description = Static readonly fields (private)
+dotnet_naming_rule.private_static_readonly_rule.resharper_guid = 15b5b1f1-457c-4ca6-b278-5615aedc07d3
+dotnet_naming_rule.private_static_readonly_rule.severity = warning
+dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style
+dotnet_naming_rule.property_rule.import_to_resharper = True
+dotnet_naming_rule.property_rule.resharper_description = Properties
+dotnet_naming_rule.property_rule.resharper_guid = c85a0503-4de2-40f1-9cd6-a4054c05d384
+dotnet_naming_rule.property_rule.resharper_style = aaBb, AaBb
+dotnet_naming_rule.property_rule.severity = warning
+dotnet_naming_rule.property_rule.style = lower_camel_case_style_1
+dotnet_naming_rule.property_rule.symbols = property_symbols
+dotnet_naming_rule.public_fields_rule.import_to_resharper = True
+dotnet_naming_rule.public_fields_rule.resharper_description = Instance fields (not private)
+dotnet_naming_rule.public_fields_rule.resharper_guid = 53eecf85-d821-40e8-ac97-fdb734542b84
+dotnet_naming_rule.public_fields_rule.severity = warning
+dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style
+dotnet_naming_rule.public_fields_rule.symbols = public_fields_symbols
+dotnet_naming_rule.public_static_fields_rule.import_to_resharper = True
+dotnet_naming_rule.public_static_fields_rule.resharper_description = Static fields (not private)
+dotnet_naming_rule.public_static_fields_rule.resharper_guid = 70345118-4b40-4ece-937c-bbeb7a0b2e70
+dotnet_naming_rule.public_static_fields_rule.severity = warning
+dotnet_naming_rule.public_static_fields_rule.style = upper_camel_case_style
+dotnet_naming_rule.public_static_fields_rule.symbols = public_static_fields_symbols
+dotnet_naming_rule.static_readonly_rule.import_to_resharper = True
+dotnet_naming_rule.static_readonly_rule.resharper_description = Static readonly fields (not private)
+dotnet_naming_rule.static_readonly_rule.resharper_guid = c873eafb-d57f-481d-8c93-77f6863c2f88
+dotnet_naming_rule.static_readonly_rule.severity = warning
+dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style
+dotnet_naming_rule.static_readonly_rule.symbols = static_readonly_symbols
+dotnet_naming_rule.types_and_namespaces_rule.import_to_resharper = True
+dotnet_naming_rule.types_and_namespaces_rule.resharper_description = Types and namespaces
+dotnet_naming_rule.types_and_namespaces_rule.resharper_guid = a0b4bc4d-d13b-4a37-b37e-c9c6864e4302
+dotnet_naming_rule.types_and_namespaces_rule.severity = warning
+dotnet_naming_rule.types_and_namespaces_rule.style = upper_camel_case_style
+dotnet_naming_rule.types_and_namespaces_rule.symbols = types_and_namespaces_symbols
+dotnet_naming_rule.type_parameters_rule.import_to_resharper = True
+dotnet_naming_rule.type_parameters_rule.resharper_description = Type parameters
+dotnet_naming_rule.type_parameters_rule.resharper_exclusive_prefixes_suffixes = true
+dotnet_naming_rule.type_parameters_rule.resharper_guid = 2c62818f-621b-4425-adc9-78611099bfcb
+dotnet_naming_rule.type_parameters_rule.severity = warning
+dotnet_naming_rule.type_parameters_rule.style = t_upper_camel_case_style
+dotnet_naming_rule.type_parameters_rule.symbols = type_parameters_symbols
+dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True
+dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field
+dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef
+dotnet_naming_rule.unity_serialized_field_rule.severity = warning
+dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style_1
+dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols
+dotnet_naming_style.i_upper_camel_case_style.capitalization = pascal_case
+dotnet_naming_style.i_upper_camel_case_style.required_prefix = I
+dotnet_naming_style.lower_camel_case_style.capitalization = camel_case
+dotnet_naming_style.lower_camel_case_style.required_prefix = _
+dotnet_naming_style.lower_camel_case_style_1.capitalization = camel_case
+dotnet_naming_style.t_upper_camel_case_style.capitalization = pascal_case
+dotnet_naming_style.t_upper_camel_case_style.required_prefix = T
+dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case
+dotnet_naming_symbols.constants_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
+dotnet_naming_symbols.constants_symbols.applicable_kinds = field
+dotnet_naming_symbols.constants_symbols.required_modifiers = const
+dotnet_naming_symbols.constants_symbols.resharper_applicable_kinds = constant_field
+dotnet_naming_symbols.constants_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.enum_member_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.enum_member_symbols.applicable_kinds =
+dotnet_naming_symbols.enum_member_symbols.resharper_applicable_kinds = enum_member
+dotnet_naming_symbols.enum_member_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.event_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.event_symbols.applicable_kinds = event
+dotnet_naming_symbols.event_symbols.resharper_applicable_kinds = event
+dotnet_naming_symbols.event_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.interfaces_symbols.applicable_kinds = interface
+dotnet_naming_symbols.interfaces_symbols.resharper_applicable_kinds = interface
+dotnet_naming_symbols.interfaces_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.locals_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.locals_symbols.applicable_kinds = local
+dotnet_naming_symbols.locals_symbols.resharper_applicable_kinds = local_variable
+dotnet_naming_symbols.locals_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.local_constants_symbols.applicable_kinds = local
+dotnet_naming_symbols.local_constants_symbols.required_modifiers = const
+dotnet_naming_symbols.local_constants_symbols.resharper_applicable_kinds = local_constant
+dotnet_naming_symbols.local_constants_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.local_functions_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.local_functions_symbols.applicable_kinds = local_function
+dotnet_naming_symbols.local_functions_symbols.resharper_applicable_kinds = local_function
+dotnet_naming_symbols.local_functions_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.method_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.method_symbols.applicable_kinds = method
+dotnet_naming_symbols.method_symbols.resharper_applicable_kinds = method
+dotnet_naming_symbols.method_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.parameters_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.parameters_symbols.applicable_kinds = parameter
+dotnet_naming_symbols.parameters_symbols.resharper_applicable_kinds = parameter
+dotnet_naming_symbols.parameters_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private
+dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field
+dotnet_naming_symbols.private_constants_symbols.required_modifiers = const
+dotnet_naming_symbols.private_constants_symbols.resharper_applicable_kinds = constant_field
+dotnet_naming_symbols.private_constants_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private
+dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field
+dotnet_naming_symbols.private_instance_fields_symbols.resharper_applicable_kinds = field,readonly_field
+dotnet_naming_symbols.private_instance_fields_symbols.resharper_required_modifiers = instance
+dotnet_naming_symbols.private_instance_fields_symbols_2.applicable_accessibilities = private
+dotnet_naming_symbols.private_instance_fields_symbols_2.applicable_kinds = field
+dotnet_naming_symbols.private_instance_fields_symbols_2.resharper_applicable_kinds = field,readonly_field
+dotnet_naming_symbols.private_instance_fields_symbols_2.resharper_required_modifiers = instance
+dotnet_naming_symbols.property_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.property_symbols.applicable_kinds = property
+dotnet_naming_symbols.property_symbols.resharper_applicable_kinds = property
+dotnet_naming_symbols.property_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
+dotnet_naming_symbols.public_fields_symbols.applicable_kinds = field
+dotnet_naming_symbols.public_fields_symbols.resharper_applicable_kinds = field,readonly_field
+dotnet_naming_symbols.public_fields_symbols.resharper_required_modifiers = instance
+dotnet_naming_symbols.public_static_fields_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
+dotnet_naming_symbols.public_static_fields_symbols.applicable_kinds = field
+dotnet_naming_symbols.public_static_fields_symbols.required_modifiers = static
+dotnet_naming_symbols.public_static_fields_symbols.resharper_applicable_kinds = field
+dotnet_naming_symbols.public_static_fields_symbols.resharper_required_modifiers = static
+dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
+dotnet_naming_symbols.static_readonly_symbols.applicable_kinds = field
+dotnet_naming_symbols.static_readonly_symbols.required_modifiers = readonly,static
+dotnet_naming_symbols.static_readonly_symbols.resharper_applicable_kinds = readonly_field
+dotnet_naming_symbols.static_readonly_symbols.resharper_required_modifiers = static
+dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds = class,delegate,enum,namespace,struct
+dotnet_naming_symbols.types_and_namespaces_symbols.resharper_applicable_kinds = namespace,class,struct,enum,delegate
+dotnet_naming_symbols.types_and_namespaces_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.type_parameters_symbols.applicable_kinds = type_parameter
+dotnet_naming_symbols.type_parameters_symbols.resharper_applicable_kinds = type_parameter
+dotnet_naming_symbols.type_parameters_symbols.resharper_required_modifiers = any
+dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = *
+dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds =
+dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field
+dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance
+dotnet_separate_import_directive_groups = false
+dotnet_sort_system_directives_first = true
+dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none
+dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none
+dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none
+dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
+dotnet_style_predefined_type_for_member_access = true:suggestion
+dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
+dotnet_style_qualification_for_event = false:suggestion
+dotnet_style_qualification_for_field = false:suggestion
+dotnet_style_qualification_for_method = false:suggestion
+dotnet_style_qualification_for_property = false:suggestion
+dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
+file_header_template =
+fsharp_align_function_signature_to_indentation = false
+fsharp_alternative_long_member_definitions = false
+fsharp_indent_on_try_with = false
+fsharp_keep_if_then_in_same_line = false
+fsharp_max_array_or_list_width = 80
+fsharp_max_elmish_width = 40
+fsharp_max_function_binding_width = 40
+fsharp_max_if_then_else_short_width = 60
+fsharp_max_infix_operator_expression = 80
+fsharp_max_record_width = 40
+fsharp_max_value_binding_width = 80
+fsharp_multiline_block_brackets_on_same_column = false
+fsharp_multi_line_lambda_closing_newline = false
+fsharp_newline_between_type_definition_and_members = true
+fsharp_semicolon_at_end_of_line = false
+fsharp_single_argument_web_mode = false
+fsharp_space_after_comma = true
+fsharp_space_after_semicolon = true
+fsharp_space_around_delimiter = true
+fsharp_space_before_class_constructor = false
+fsharp_space_before_colon = false
+fsharp_space_before_lowercase_invocation = true
+fsharp_space_before_member = false
+fsharp_space_before_parameter = true
+fsharp_space_before_semicolon = false
+fsharp_space_before_uppercase_invocation = false
+
+# ReSharper properties
+resharper_accessor_owner_body = accessors_with_expression_body
+resharper_alignment_tab_fill_style = use_spaces
+resharper_align_first_arg_by_paren = false
+resharper_align_linq_query = false
+resharper_align_multiline_array_and_object_initializer = false
+resharper_align_multiline_array_initializer = true
+resharper_align_multiline_binary_patterns = false
+resharper_align_multiline_comments = true
+resharper_align_multiline_ctor_init = true
+resharper_align_multiline_expression_braces = false
+resharper_align_multiline_implements_list = true
+resharper_align_multiline_list_pattern = false
+resharper_align_multiline_property_pattern = false
+resharper_align_multiline_statement_conditions = true
+resharper_align_multiline_switch_expression = false
+resharper_align_multiline_type_argument = true
+resharper_align_multiline_type_parameter = true
+resharper_align_multiline_type_parameter_constraints = false
+resharper_align_multiline_type_parameter_list = false
+resharper_align_ternary = align_not_nested
+resharper_align_tuple_components = false
+resharper_allow_alias = true
+resharper_allow_high_precedence_app_parens = true
+resharper_always_use_end_of_line_brace_style = false
+resharper_apply_auto_detected_rules = true
+resharper_apply_on_completion = false
+resharper_arguments_anonymous_function = positional
+resharper_arguments_literal = positional
+resharper_arguments_named = positional
+resharper_arguments_other = positional
+resharper_arguments_skip_single = false
+resharper_arguments_string_literal = positional
+resharper_attribute_style = do_not_touch
+resharper_autodetect_indent_settings = false
+resharper_blank_lines_after_access_specifier = 0
+resharper_blank_lines_after_block_statements = 1
+resharper_blank_lines_after_case = 0
+resharper_blank_lines_after_control_transfer_statements = 0
+resharper_blank_lines_after_file_scoped_namespace_directive = 1
+resharper_blank_lines_after_imports = 1
+resharper_blank_lines_after_multiline_statements = 0
+resharper_blank_lines_after_options = 1
+resharper_blank_lines_after_start_comment = 1
+resharper_blank_lines_after_using_list = 0
+resharper_blank_lines_around_accessor = 0
+resharper_blank_lines_around_auto_property = 1
+resharper_blank_lines_around_block_case_section = 0
+resharper_blank_lines_around_class_definition = 1
+resharper_blank_lines_around_different_module_member_kinds = 1
+resharper_blank_lines_around_field = 1
+resharper_blank_lines_around_function_declaration = 0
+resharper_blank_lines_around_function_definition = 1
+resharper_blank_lines_around_global_attribute = 0
+resharper_blank_lines_around_invocable = 1
+resharper_blank_lines_around_local_method = 1
+resharper_blank_lines_around_multiline_case_section = 0
+resharper_blank_lines_around_multiline_module_members = 1
+resharper_blank_lines_around_namespace = 1
+resharper_blank_lines_around_other_declaration = 0
+resharper_blank_lines_around_property = 1
+resharper_blank_lines_around_razor_functions = 1
+resharper_blank_lines_around_razor_helpers = 1
+resharper_blank_lines_around_razor_sections = 1
+resharper_blank_lines_around_region = 1
+resharper_blank_lines_around_single_line_accessor = 0
+resharper_blank_lines_around_single_line_auto_property = 0
+resharper_blank_lines_around_single_line_field = 0
+resharper_blank_lines_around_single_line_function_definition = 0
+resharper_blank_lines_around_single_line_invocable = 0
+resharper_blank_lines_around_single_line_local_method = 0
+resharper_blank_lines_around_single_line_module_member = 0
+resharper_blank_lines_around_single_line_property = 0
+resharper_blank_lines_around_single_line_type = 1
+resharper_blank_lines_around_type = 1
+resharper_blank_lines_before_access_specifier = 1
+resharper_blank_lines_before_block_statements = 0
+resharper_blank_lines_before_case = 0
+resharper_blank_lines_before_control_transfer_statements = 0
+resharper_blank_lines_before_first_module_member_in_nested_module = 0
+resharper_blank_lines_before_first_module_member_in_top_level_module = 1
+resharper_blank_lines_before_multiline_statements = 0
+resharper_blank_lines_before_single_line_comment = 1
+resharper_blank_lines_inside_namespace = 0
+resharper_blank_lines_inside_type = 0
+resharper_blank_line_after_pi = true
+resharper_blank_line_around_top_level_modules = 2
+resharper_braces_redundant = true
+resharper_break_template_declaration = line_break
+resharper_builtin_type_apply_to_native_integer = false
+resharper_can_use_global_alias = false
+resharper_configure_await_analysis_mode = disabled
+resharper_constructor_or_destructor_body = block_body
+resharper_continuous_indent_multiplier = 1
+resharper_continuous_line_indent = single
+resharper_cpp_align_multiline_argument = true
+resharper_cpp_align_multiline_binary_expressions_chain = false
+resharper_cpp_align_multiline_calls_chain = true
+resharper_cpp_align_multiline_extends_list = true
+resharper_cpp_align_multiline_for_stmt = true
+resharper_cpp_align_multiline_parameter = true
+resharper_cpp_align_multiple_declaration = true
+resharper_cpp_allow_comment_after_lbrace = false
+resharper_cpp_allow_far_alignment = false
+resharper_cpp_anonymous_method_declaration_braces = next_line
+resharper_cpp_case_block_braces = next_line_shifted_2
+resharper_cpp_empty_block_style = multiline
+resharper_cpp_indent_switch_labels = false
+resharper_cpp_insert_final_newline = true
+resharper_cpp_invocable_declaration_braces = next_line
+resharper_cpp_keep_blank_lines_in_declarations = 2
+resharper_cpp_keep_existing_arrangement = true
+resharper_cpp_new_line_before_catch = true
+resharper_cpp_new_line_before_else = true
+resharper_cpp_new_line_before_while = true
+resharper_cpp_other_braces = next_line
+resharper_cpp_place_simple_blocks_on_single_line = false
+resharper_cpp_space_after_unary_operator = false
+resharper_cpp_space_around_binary_operator = true
+resharper_cpp_type_declaration_braces = next_line
+resharper_cpp_wrap_lines = true
+resharper_csharp_align_multiline_argument = false
+resharper_csharp_align_multiline_binary_expressions_chain = true
+resharper_csharp_align_multiline_calls_chain = false
+resharper_csharp_align_multiline_expression = false
+resharper_csharp_align_multiline_extends_list = false
+resharper_csharp_align_multiline_for_stmt = false
+resharper_csharp_align_multiline_parameter = false
+resharper_csharp_align_multiple_declaration = false
+resharper_csharp_allow_comment_after_lbrace = true
+resharper_csharp_allow_far_alignment = false
+resharper_csharp_blank_lines_inside_region = 0
+resharper_csharp_empty_block_style = together_same_line
+resharper_csharp_insert_final_newline = true
+resharper_csharp_keep_blank_lines_in_declarations = 1
+resharper_csharp_keep_existing_enum_arrangement = false
+resharper_csharp_keep_nontrivial_alias = false
+resharper_csharp_new_line_before_while = false
+resharper_csharp_prefer_qualified_reference = false
+resharper_csharp_space_after_unary_operator = false
+resharper_csharp_wrap_before_binary_opsign = true
+resharper_csharp_wrap_lines = false
+resharper_cxxcli_property_declaration_braces = next_line
+resharper_declaration_body_on_the_same_line = if_owner_is_single_line
+resharper_default_exception_variable_name = e
+resharper_default_value_when_type_evident = default_literal
+resharper_default_value_when_type_not_evident = default_literal
+resharper_delete_quotes_from_solid_values = false
+resharper_disable_blank_line_changes = false
+resharper_disable_formatter = false
+resharper_disable_indenter = false
+resharper_disable_int_align = false
+resharper_disable_line_break_changes = false
+resharper_disable_line_break_removal = false
+resharper_disable_space_changes = false
+resharper_disable_space_changes_before_trailing_comment = false
+resharper_dont_remove_extra_blank_lines = false
+resharper_enable_slate_format = true
+resharper_enable_wrapping = false
+resharper_enforce_line_ending_style = false
+resharper_event_handler_pattern_long = $object$On$event$
+resharper_event_handler_pattern_short = On$event$
+resharper_export_declaration_braces = next_line
+resharper_expression_braces = inside
+resharper_expression_pars = inside
+resharper_extra_spaces = remove_all
+resharper_force_attribute_style = separate
+resharper_force_chop_compound_do_expression = false
+resharper_force_chop_compound_if_expression = false
+resharper_force_chop_compound_while_expression = false
+resharper_formatter_off_tag = @formatter:off
+resharper_formatter_on_tag = @formatter:on
+resharper_formatter_tags_accept_regexp = false
+resharper_formatter_tags_enabled = true
+resharper_format_leading_spaces_decl = false
+resharper_free_block_braces = next_line
+resharper_fsharp_allow_far_alignment = true
+resharper_fsharp_empty_block_style = together_same_line
+resharper_fsharp_insert_final_newline = false
+resharper_fsharp_type_declaration_braces = pico
+resharper_fsharp_wrap_lines = true
+resharper_function_declaration_return_type_style = do_not_change
+resharper_function_definition_return_type_style = do_not_change
+resharper_generator_mode = false
+resharper_html_allow_far_alignment = false
+resharper_html_attribute_indent = align_by_first_attribute
+resharper_html_insert_final_newline = false
+resharper_html_linebreak_before_elements = body,div,p,form,h1,h2,h3
+resharper_html_max_blank_lines_between_tags = 2
+resharper_html_pi_attribute_style = on_single_line
+resharper_html_space_before_self_closing = false
+resharper_html_wrap_lines = true
+resharper_ignore_space_preservation = false
+resharper_include_prefix_comment_in_indent = false
+resharper_indent_access_specifiers_from_class = false
+resharper_indent_aligned_ternary = true
+resharper_indent_anonymous_method_block = false
+resharper_indent_braces_inside_statement_conditions = true
+resharper_indent_break_from_case = true
+resharper_indent_case_from_select = true
+resharper_indent_child_elements = OneIndent
+resharper_indent_class_members_from_access_specifiers = false
+resharper_indent_comment = true
+resharper_indent_declaration_after_ufunction_and_uproperty = false
+resharper_indent_export_declaration_members = true
+resharper_indent_goto_labels = true
+resharper_indent_inside_namespace = true
+resharper_indent_invocation_pars = inside
+resharper_indent_member_initializer_list = true
+resharper_indent_method_decl_pars = inside
+resharper_indent_nested_fixed_stmt = false
+resharper_indent_nested_foreach_stmt = false
+resharper_indent_nested_for_stmt = false
+resharper_indent_nested_lock_stmt = false
+resharper_indent_nested_usings_stmt = false
+resharper_indent_nested_while_stmt = false
+resharper_indent_pars = inside
+resharper_indent_preprocessor_directives = normal
+resharper_indent_preprocessor_if = no_indent
+resharper_indent_preprocessor_other = no_indent
+resharper_indent_preprocessor_region = usual_indent
+resharper_indent_primary_constructor_decl_pars = inside
+resharper_indent_raw_literal_string = align
+resharper_indent_statement_pars = inside
+resharper_indent_text = OneIndent
+resharper_indent_typearg_angles = inside
+resharper_indent_typeparam_angles = inside
+resharper_indent_type_constraints = true
+resharper_indent_wrapped_function_names = false
+resharper_instance_members_qualify_declared_in = this_class, base_class
+resharper_int_align = false
+resharper_int_align_bitfield_sizes = false
+resharper_int_align_comments = false
+resharper_int_align_declaration_names = false
+resharper_int_align_designated_initializers = false
+resharper_int_align_enum_initializers = false
+resharper_int_align_eq = false
+resharper_int_align_fix_in_adjacent = true
+resharper_keep_blank_lines_in_code = 2
+resharper_keep_existing_attribute_arrangement = false
+resharper_keep_existing_declaration_block_arrangement = false
+resharper_keep_existing_declaration_parens_arrangement = true
+resharper_keep_existing_embedded_arrangement = true
+resharper_keep_existing_embedded_block_arrangement = false
+resharper_keep_existing_expr_member_arrangement = true
+resharper_keep_existing_invocation_parens_arrangement = true
+resharper_keep_existing_line_break_before_declaration_body = true
+resharper_keep_existing_list_patterns_arrangement = true
+resharper_keep_existing_primary_constructor_declaration_parens_arrangement = true
+resharper_keep_existing_property_patterns_arrangement = true
+resharper_keep_existing_switch_expression_arrangement = true
+resharper_keep_max_blank_line_around_module_members = 2
+resharper_keep_user_linebreaks = true
+resharper_keep_user_wrapping = true
+resharper_labeled_statement_style = line_break
+resharper_linebreaks_around_razor_statements = true
+resharper_linebreaks_inside_tags_for_elements_longer_than = 2147483647
+resharper_linebreaks_inside_tags_for_elements_with_child_elements = true
+resharper_linebreaks_inside_tags_for_multiline_elements = true
+resharper_linebreak_before_all_elements = false
+resharper_linebreak_before_multiline_elements = true
+resharper_linebreak_before_singleline_elements = false
+resharper_line_break_after_colon_in_member_initializer_lists = do_not_change
+resharper_line_break_after_comma_in_member_initializer_lists = false
+resharper_line_break_after_deref_in_trailing_return_types = do_not_change
+resharper_line_break_after_init_statement = do_not_change
+resharper_line_break_after_type_repr_access_modifier = true
+resharper_line_break_before_comma_in_member_initializer_lists = false
+resharper_line_break_before_deref_in_trailing_return_types = do_not_change
+resharper_line_break_before_function_try_block = do_not_change
+resharper_line_break_before_requires_clause = do_not_change
+resharper_linkage_specification_braces = end_of_line
+resharper_linkage_specification_indentation = none
+resharper_local_function_body = expression_body
+resharper_macro_block_begin =
+resharper_macro_block_end =
+resharper_max_array_initializer_elements_on_line = 100
+resharper_max_attribute_length_for_same_line = 38
+resharper_max_enum_members_on_line = 3
+resharper_max_formal_parameters_on_line = 10000
+resharper_max_initializer_elements_on_line = 10
+resharper_max_invocation_arguments_on_line = 10000
+resharper_max_primary_constructor_parameters_on_line = 10000
+resharper_member_initializer_list_style = do_not_change
+resharper_method_or_operator_body = expression_body
+resharper_namespace_declaration_braces = next_line
+resharper_namespace_indentation = all
+resharper_nested_ternary_style = autodetect
+resharper_never_outdent_pipe_operators = true
+resharper_new_line_before_enumerators = true
+resharper_normalize_tag_names = false
+resharper_no_indent_inside_elements = html,body,thead,tbody,tfoot
+resharper_no_indent_inside_if_element_longer_than = 200
+resharper_null_checking_pattern_style = not_null_pattern
+resharper_object_creation_when_type_evident = target_typed
+resharper_object_creation_when_type_not_evident = explicitly_typed
+resharper_old_engine = false
+resharper_outdent_binary_operators = true
+resharper_outdent_binary_ops = false
+resharper_outdent_binary_pattern_ops = false
+resharper_outdent_commas = false
+resharper_outdent_dots = false
+resharper_outdent_namespace_member = false
+resharper_outdent_statement_labels = false
+resharper_outdent_ternary_ops = false
+resharper_parentheses_non_obvious_operations = none, shift, bitwise_and, bitwise_exclusive_or, bitwise_inclusive_or, bitwise
+resharper_parentheses_redundancy_style = remove_if_not_clarifies_precedence
+resharper_parentheses_same_type_operations = false
+resharper_pi_attributes_indent = align_by_first_attribute
+resharper_place_accessorholder_attribute_on_same_line = false
+resharper_place_accessor_attribute_on_same_line = false
+resharper_place_comments_at_first_column = false
+resharper_place_constructor_initializer_on_same_line = true
+resharper_place_event_attribute_on_same_line = false
+resharper_place_expr_accessor_on_single_line = if_owner_is_single_line
+resharper_place_expr_method_on_single_line = if_owner_is_single_line
+resharper_place_expr_property_on_single_line = if_owner_is_single_line
+resharper_place_field_attribute_on_same_line = false
+resharper_place_linq_into_on_new_line = false
+resharper_place_method_attribute_on_same_line = false
+resharper_place_namespace_definitions_on_same_line = false
+resharper_place_primary_constructor_initializer_on_same_line = true
+resharper_place_property_attribute_on_same_line = false
+resharper_place_record_field_attribute_on_same_line = if_owner_is_single_line
+resharper_place_simple_case_statement_on_same_line = false
+resharper_place_simple_embedded_statement_on_same_line = if_owner_is_single_line
+resharper_place_simple_initializer_on_single_line = true
+resharper_place_simple_list_pattern_on_single_line = true
+resharper_place_simple_property_pattern_on_single_line = true
+resharper_place_simple_switch_expression_on_single_line = false
+resharper_place_single_method_argument_lambda_on_same_line = true
+resharper_place_type_attribute_on_same_line = false
+resharper_place_type_constraints_on_same_line = true
+resharper_prefer_explicit_discard_declaration = false
+resharper_prefer_line_break_after_multiline_lparen = true
+resharper_prefer_roslyn_rules_for_parentheses_clarity = false
+resharper_prefer_separate_deconstructed_variables_declaration = false
+resharper_prefer_wrap_around_eq = default
+resharper_preserve_spaces_inside_tags = pre,textarea
+resharper_qualified_using_at_nested_scope = false
+resharper_quote_style = doublequoted
+resharper_razor_prefer_qualified_reference = true
+resharper_remove_blank_lines_near_braces = false
+resharper_remove_blank_lines_near_braces_in_code = true
+resharper_remove_blank_lines_near_braces_in_declarations = true
+resharper_remove_only_unused_aliases = true
+resharper_remove_spaces_on_blank_lines = true
+resharper_remove_this_qualifier = true
+resharper_remove_unused_only_aliases = false
+resharper_requires_expression_braces = next_line
+resharper_resx_allow_far_alignment = false
+resharper_resx_attribute_indent = single_indent
+resharper_resx_insert_final_newline = false
+resharper_resx_linebreak_before_elements =
+resharper_resx_max_blank_lines_between_tags = 0
+resharper_resx_pi_attribute_style = do_not_touch
+resharper_resx_space_before_self_closing = false
+resharper_resx_wrap_lines = false
+resharper_resx_wrap_tags_and_pi = false
+resharper_resx_wrap_text = false
+resharper_shaderlab_allow_far_alignment = false
+resharper_shaderlab_brace_style = next_line
+resharper_shaderlab_insert_final_newline = false
+resharper_shaderlab_wrap_lines = true
+resharper_show_autodetect_configure_formatting_tip = false
+resharper_simple_block_style = do_not_change
+resharper_simple_case_statement_style = do_not_change
+resharper_simple_embedded_statement_style = do_not_change
+resharper_slate_brackets_indent = inside
+resharper_slate_brackets_wrap = chop_always
+resharper_slate_wrap_before_bracket = true
+resharper_slate_wrap_chained_binary_expression = chop_if_long
+resharper_slate_wrap_chained_member_access = chop_if_long
+resharper_sort_attributes = false
+resharper_sort_class_selectors = false
+resharper_sort_usings = true
+resharper_spaces_around_eq_in_attribute = false
+resharper_spaces_around_eq_in_pi_attribute = false
+resharper_spaces_inside_tags = false
+resharper_space_after_attributes = true
+resharper_space_after_attribute_target_colon = true
+resharper_space_after_cast = false
+resharper_space_after_colon = true
+resharper_space_after_colon_in_bitfield_declarator = true
+resharper_space_after_colon_in_case = true
+resharper_space_after_colon_in_inheritance_clause = true
+resharper_space_after_comma = true
+resharper_space_after_ellipsis_in_parameter_pack = true
+resharper_space_after_for_colon = true
+resharper_space_after_keywords_in_control_flow_statements = true
+resharper_space_after_last_attribute = false
+resharper_space_after_last_pi_attribute = false
+resharper_space_after_operator_keyword = true
+resharper_space_after_operator_not = false
+resharper_space_after_ptr_in_data_member = true
+resharper_space_after_ptr_in_data_members = false
+resharper_space_after_ptr_in_method = true
+resharper_space_after_ptr_in_nested_declarator = false
+resharper_space_after_ref_in_data_member = true
+resharper_space_after_ref_in_data_members = false
+resharper_space_after_ref_in_method = true
+resharper_space_after_semicolon_in_for_statement = true
+resharper_space_after_slate_operator = true
+resharper_space_after_ternary_colon = true
+resharper_space_after_ternary_quest = true
+resharper_space_after_triple_slash = true
+resharper_space_after_type_parameter_constraint_colon = true
+resharper_space_around_additive_op = true
+resharper_space_around_alias_eq = true
+resharper_space_around_assignment_op = true
+resharper_space_around_assignment_operator = true
+resharper_space_around_deref_in_trailing_return_type = true
+resharper_space_around_lambda_arrow = true
+resharper_space_around_member_access_operator = false
+resharper_space_around_relational_op = true
+resharper_space_around_shift_op = true
+resharper_space_around_stmt_colon = true
+resharper_space_around_ternary_operator = true
+resharper_space_before_array_rank_parentheses = false
+resharper_space_before_attribute_target_colon = false
+resharper_space_before_checked_parentheses = false
+resharper_space_before_colon = false
+resharper_space_before_colon_in_bitfield_declarator = true
+resharper_space_before_colon_in_case = false
+resharper_space_before_colon_in_ctor_initializer = true
+resharper_space_before_colon_in_inheritance_clause = true
+resharper_space_before_comma = false
+resharper_space_before_default_parentheses = false
+resharper_space_before_ellipsis_in_parameter_pack = false
+resharper_space_before_empty_invocation_parentheses = false
+resharper_space_before_empty_method_parentheses = false
+resharper_space_before_for_colon = true
+resharper_space_before_initializer_braces = false
+resharper_space_before_invocation_parentheses = false
+resharper_space_before_label_colon = false
+resharper_space_before_lambda_parentheses = false
+resharper_space_before_method_parentheses = false
+resharper_space_before_nameof_parentheses = false
+resharper_space_before_new_parentheses = false
+resharper_space_before_nullable_mark = false
+resharper_space_before_open_square_brackets = false
+resharper_space_before_pointer_asterik_declaration = false
+resharper_space_before_postfix_operator = false
+resharper_space_before_ptr_in_abstract_decl = false
+resharper_space_before_ptr_in_data_member = false
+resharper_space_before_ptr_in_data_members = true
+resharper_space_before_ptr_in_method = false
+resharper_space_before_ref_in_abstract_decl = false
+resharper_space_before_ref_in_data_member = false
+resharper_space_before_ref_in_data_members = true
+resharper_space_before_ref_in_method = false
+resharper_space_before_semicolon = false
+resharper_space_before_semicolon_in_for_statement = false
+resharper_space_before_singleline_accessorholder = true
+resharper_space_before_sizeof_parentheses = false
+resharper_space_before_template_args = false
+resharper_space_before_template_params = true
+resharper_space_before_ternary_colon = true
+resharper_space_before_ternary_quest = true
+resharper_space_before_trailing_comment = true
+resharper_space_before_trailing_comment_text = false
+resharper_space_before_typeof_parentheses = false
+resharper_space_before_type_argument_angle = false
+resharper_space_before_type_parameter_angle = false
+resharper_space_before_type_parameter_constraint_colon = true
+resharper_space_before_type_parameter_parentheses = true
+resharper_space_between_accessors_in_singleline_property = true
+resharper_space_between_attribute_sections = true
+resharper_space_between_closing_angle_brackets_in_template_args = false
+resharper_space_between_keyword_and_expression = true
+resharper_space_between_keyword_and_type = true
+resharper_space_between_method_call_empty_parameter_list_parentheses = false
+resharper_space_between_method_call_name_and_opening_parenthesis = false
+resharper_space_between_method_call_parameter_list_parentheses = false
+resharper_space_between_method_declaration_empty_parameter_list_parentheses = false
+resharper_space_between_method_declaration_name_and_open_parenthesis = false
+resharper_space_between_method_declaration_parameter_list_parentheses = false
+resharper_space_between_parentheses_of_control_flow_statements = false
+resharper_space_between_square_brackets = false
+resharper_space_between_typecast_parentheses = false
+resharper_space_in_singleline_accessorholder = true
+resharper_space_in_singleline_anonymous_method = true
+resharper_space_in_singleline_method = true
+resharper_space_near_postfix_and_prefix_op = false
+resharper_space_within_array_initialization_braces = false
+resharper_space_within_array_rank_empty_parentheses = false
+resharper_space_within_array_rank_parentheses = false
+resharper_space_within_attribute_angles = false
+resharper_space_within_checked_parentheses = false
+resharper_space_within_declaration_parentheses = false
+resharper_space_within_default_parentheses = false
+resharper_space_within_empty_blocks = false
+resharper_space_within_empty_braces = true
+resharper_space_within_empty_initializer_braces = false
+resharper_space_within_empty_invocation_parentheses = false
+resharper_space_within_empty_method_parentheses = false
+resharper_space_within_empty_template_params = false
+resharper_space_within_expression_parentheses = false
+resharper_space_within_initializer_braces = false
+resharper_space_within_invocation_parentheses = false
+resharper_space_within_method_parentheses = false
+resharper_space_within_nameof_parentheses = false
+resharper_space_within_new_parentheses = false
+resharper_space_within_parentheses = false
+resharper_space_within_single_line_array_initializer_braces = true
+resharper_space_within_sizeof_parentheses = false
+resharper_space_within_slice_pattern = true
+resharper_space_within_template_args = false
+resharper_space_within_template_params = false
+resharper_space_within_tuple_parentheses = false
+resharper_space_within_typeof_parentheses = false
+resharper_space_within_type_argument_angles = false
+resharper_space_within_type_parameter_angles = false
+resharper_space_within_type_parameter_parentheses = false
+resharper_special_else_if_treatment = true
+resharper_static_members_qualify_members = none
+resharper_static_members_qualify_with = declared_type
+resharper_stick_comment = true
+resharper_support_vs_event_naming_pattern = true
+resharper_T4_allow_far_alignment = false
+resharper_T4_insert_final_newline = false
+resharper_T4_wrap_lines = true
+resharper_toplevel_function_declaration_return_type_style = do_not_change
+resharper_toplevel_function_definition_return_type_style = do_not_change
+resharper_trailing_comma_in_multiline_lists = false
+resharper_trailing_comma_in_singleline_lists = false
+resharper_treat_case_statement_with_break_as_simple = true
+resharper_use_continuous_indent_inside_initializer_braces = true
+resharper_use_continuous_indent_inside_parens = true
+resharper_use_continuous_line_indent_in_expression_braces = false
+resharper_use_continuous_line_indent_in_method_pars = false
+resharper_use_heuristics_for_body_style = true
+resharper_use_indents_from_main_language_in_file = true
+resharper_use_indent_from_previous_element = true
+resharper_use_indent_from_vs = false
+resharper_use_old_engine = false
+resharper_use_roslyn_logic_for_evident_types = true
+resharper_vb_align_multiline_argument = true
+resharper_vb_align_multiline_expression = true
+resharper_vb_align_multiline_parameter = true
+resharper_vb_align_multiple_declaration = true
+resharper_vb_allow_far_alignment = false
+resharper_vb_blank_lines_inside_region = 1
+resharper_vb_insert_final_newline = false
+resharper_vb_keep_blank_lines_in_declarations = 2
+resharper_vb_keep_nontrivial_alias = true
+resharper_vb_place_field_attribute_on_same_line = true
+resharper_vb_place_method_attribute_on_same_line = false
+resharper_vb_place_type_attribute_on_same_line = false
+resharper_vb_prefer_qualified_reference = false
+resharper_vb_space_after_unary_operator = true
+resharper_vb_space_around_multiplicative_op = false
+resharper_vb_wrap_before_binary_opsign = false
+resharper_vb_wrap_lines = true
+resharper_wrap_after_binary_opsign = true
+resharper_wrap_after_declaration_lpar = false
+resharper_wrap_after_dot = false
+resharper_wrap_after_dot_in_method_calls = false
+resharper_wrap_after_expression_lbrace = true
+resharper_wrap_after_invocation_lpar = false
+resharper_wrap_after_primary_constructor_declaration_lpar = true
+resharper_wrap_after_property_in_chained_method_calls = false
+resharper_wrap_arguments = wrap_if_long
+resharper_wrap_arguments_style = wrap_if_long
+resharper_wrap_around_elements = true
+resharper_wrap_array_initializer_style = wrap_if_long
+resharper_wrap_base_clause_style = wrap_if_long
+resharper_wrap_before_arrow_with_expressions = false
+resharper_wrap_before_binary_pattern_op = true
+resharper_wrap_before_colon = false
+resharper_wrap_before_comma = false
+resharper_wrap_before_comma_in_base_clause = false
+resharper_wrap_before_declaration_lpar = false
+resharper_wrap_before_declaration_rpar = false
+resharper_wrap_before_eq = true
+resharper_wrap_before_expression_rbrace = true
+resharper_wrap_before_extends_colon = false
+resharper_wrap_before_first_method_call = false
+resharper_wrap_before_first_type_parameter_constraint = false
+resharper_wrap_before_invocation_lpar = false
+resharper_wrap_before_invocation_rpar = false
+resharper_wrap_before_linq_expression = true
+resharper_wrap_before_primary_constructor_declaration_lpar = false
+resharper_wrap_before_primary_constructor_declaration_rpar = false
+resharper_wrap_before_ternary_opsigns = true
+resharper_wrap_before_type_parameter_langle = false
+resharper_wrap_braced_init_list_style = wrap_if_long
+resharper_wrap_chained_binary_expressions = chop_if_long
+resharper_wrap_chained_binary_patterns = wrap_if_long
+resharper_wrap_chained_method_calls = chop_if_long
+resharper_wrap_comments = false
+resharper_wrap_ctor_initializer_style = wrap_if_long
+resharper_wrap_enumeration_style = chop_if_long
+resharper_wrap_enum_declaration = chop_always
+resharper_wrap_extends_list_style = wrap_if_long
+resharper_wrap_for_stmt_header_style = chop_if_long
+resharper_wrap_list_pattern = wrap_if_long
+resharper_wrap_multiple_declaration_style = chop_if_long
+resharper_wrap_multiple_type_parameter_constraints_style = chop_if_long
+resharper_wrap_object_and_collection_initializer_style = chop_if_long
+resharper_wrap_parameters_style = wrap_if_long
+resharper_wrap_primary_constructor_parameters_style = chop_if_long
+resharper_wrap_property_pattern = chop_if_long
+resharper_wrap_switch_expression = chop_always
+resharper_wrap_ternary_expr_style = chop_if_long
+resharper_wrap_verbatim_interpolated_strings = no_wrap
+resharper_xmldoc_allow_far_alignment = false
+resharper_xmldoc_attribute_indent = single_indent
+resharper_xmldoc_insert_final_newline = false
+resharper_xmldoc_linebreak_before_elements = summary,remarks,example,returns,param,typeparam,value,para
+resharper_xmldoc_max_blank_lines_between_tags = 0
+resharper_xmldoc_pi_attribute_style = do_not_touch
+resharper_xmldoc_space_before_self_closing = true
+resharper_xmldoc_wrap_lines = false
+resharper_xmldoc_wrap_tags_and_pi = true
+resharper_xmldoc_wrap_text = true
+resharper_xml_allow_far_alignment = false
+resharper_xml_attribute_indent = align_by_first_attribute
+resharper_xml_insert_final_newline = false
+resharper_xml_linebreak_before_elements =
+resharper_xml_max_blank_lines_between_tags = 2
+resharper_xml_pi_attribute_style = do_not_touch
+resharper_xml_space_before_self_closing = true
+resharper_xml_wrap_lines = true
+resharper_xml_wrap_tags_and_pi = true
+resharper_xml_wrap_text = false
+
+# ReSharper inspection severities
+resharper_access_rights_in_text_highlighting = warning
+resharper_access_to_disposed_closure_highlighting = warning
+resharper_access_to_for_each_variable_in_closure_highlighting = warning
+resharper_access_to_modified_closure_highlighting = warning
+resharper_access_to_static_member_via_derived_type_highlighting = warning
+resharper_address_of_marshal_by_ref_object_highlighting = warning
+resharper_all_underscore_local_parameter_name_highlighting = warning
+resharper_angular_html_banana_highlighting = warning
+resharper_annotate_can_be_null_parameter_highlighting = none
+resharper_annotate_can_be_null_type_member_highlighting = none
+resharper_annotate_not_null_parameter_highlighting = none
+resharper_annotate_not_null_type_member_highlighting = none
+resharper_annotation_conflict_in_hierarchy_highlighting = warning
+resharper_annotation_redundancy_at_value_type_highlighting = warning
+resharper_annotation_redundancy_in_hierarchy_highlighting = warning
+resharper_append_to_collection_expression_highlighting = suggestion
+resharper_arguments_style_anonymous_function_highlighting = hint
+resharper_arguments_style_literal_highlighting = hint
+resharper_arguments_style_named_expression_highlighting = hint
+resharper_arguments_style_other_highlighting = hint
+resharper_arguments_style_string_literal_highlighting = hint
+resharper_arrange_accessor_owner_body_highlighting = suggestion
+resharper_arrange_attributes_highlighting = none
+resharper_arrange_constructor_or_destructor_body_highlighting = suggestion
+resharper_arrange_default_value_when_type_evident_highlighting = suggestion
+resharper_arrange_default_value_when_type_not_evident_highlighting = hint
+resharper_arrange_local_function_body_highlighting = suggestion
+resharper_arrange_method_or_operator_body_highlighting = suggestion
+resharper_arrange_null_checking_pattern_highlighting = hint
+resharper_arrange_object_creation_when_type_evident_highlighting = suggestion
+resharper_arrange_object_creation_when_type_not_evident_highlighting = hint
+resharper_arrange_redundant_parentheses_highlighting = hint
+resharper_arrange_static_member_qualifier_highlighting = hint
+resharper_arrange_this_qualifier_highlighting = hint
+resharper_arrange_trailing_comma_in_multiline_lists_highlighting = hint
+resharper_arrange_trailing_comma_in_singleline_lists_highlighting = hint
+resharper_arrange_type_member_modifiers_highlighting = hint
+resharper_arrange_type_modifiers_highlighting = hint
+resharper_arrange_var_keywords_in_deconstructing_declaration_highlighting = suggestion
+resharper_asp_content_placeholder_not_resolved_highlighting = error
+resharper_asp_custom_page_parser_filter_type_highlighting = warning
+resharper_asp_dead_code_highlighting = warning
+resharper_asp_entity_highlighting = warning
+resharper_asp_image_highlighting = warning
+resharper_asp_invalid_control_type_highlighting = error
+resharper_asp_not_resolved_highlighting = error
+resharper_asp_ods_method_reference_resolve_error_highlighting = error
+resharper_asp_resolve_warning_highlighting = warning
+resharper_asp_skin_not_resolved_highlighting = error
+resharper_asp_tag_attribute_with_optional_value_highlighting = warning
+resharper_asp_theme_not_resolved_highlighting = error
+resharper_asp_unused_register_directive_highlighting_highlighting = warning
+resharper_asp_warning_highlighting = warning
+resharper_assignment_instead_of_discard_highlighting = warning
+resharper_assignment_in_conditional_expression_highlighting = warning
+resharper_assignment_is_fully_discarded_highlighting = warning
+resharper_assign_null_to_not_null_attribute_highlighting = warning
+resharper_asxx_path_error_highlighting = warning
+resharper_async_iterator_invocation_without_await_foreach_highlighting = warning
+resharper_async_void_event_handler_method_highlighting = suggestion
+resharper_async_void_lambda_highlighting = warning
+resharper_async_void_method_highlighting = suggestion
+resharper_async_void_throw_exception_highlighting = suggestion
+resharper_auto_property_can_be_made_get_only_global_highlighting = suggestion
+resharper_auto_property_can_be_made_get_only_local_highlighting = suggestion
+resharper_bad_attribute_brackets_spaces_highlighting = none
+resharper_bad_braces_spaces_highlighting = none
+resharper_bad_child_statement_indent_highlighting = warning
+resharper_bad_colon_spaces_highlighting = none
+resharper_bad_comma_spaces_highlighting = none
+resharper_bad_control_braces_indent_highlighting = suggestion
+resharper_bad_control_braces_line_breaks_highlighting = none
+resharper_bad_declaration_braces_indent_highlighting = none
+resharper_bad_declaration_braces_line_breaks_highlighting = none
+resharper_bad_empty_braces_line_breaks_highlighting = none
+resharper_bad_expression_braces_indent_highlighting = none
+resharper_bad_expression_braces_line_breaks_highlighting = none
+resharper_bad_generic_brackets_spaces_highlighting = none
+resharper_bad_indent_highlighting = none
+resharper_bad_linq_line_breaks_highlighting = none
+resharper_bad_list_line_breaks_highlighting = none
+resharper_bad_member_access_spaces_highlighting = none
+resharper_bad_namespace_braces_indent_highlighting = none
+resharper_bad_parens_line_breaks_highlighting = none
+resharper_bad_parens_spaces_highlighting = none
+resharper_bad_preprocessor_indent_highlighting = none
+resharper_bad_semicolon_spaces_highlighting = none
+resharper_bad_spaces_after_keyword_highlighting = none
+resharper_bad_square_brackets_spaces_highlighting = none
+resharper_bad_switch_braces_indent_highlighting = none
+resharper_bad_symbol_spaces_highlighting = none
+resharper_base_member_has_params_highlighting = warning
+resharper_base_method_call_with_default_parameter_highlighting = warning
+resharper_base_object_equals_is_object_equals_highlighting = warning
+resharper_base_object_get_hash_code_call_in_get_hash_code_highlighting = warning
+resharper_bitwise_operator_on_enum_without_flags_highlighting = warning
+resharper_blazor_editor_required_highlighting = warning
+resharper_both_context_call_declaration_global_highlighting = warning
+resharper_both_context_call_usage_global_highlighting = warning
+resharper_built_in_type_reference_style_for_member_access_highlighting = hint
+resharper_built_in_type_reference_style_highlighting = hint
+resharper_by_ref_argument_is_volatile_field_highlighting = warning
+resharper_cannot_apply_equality_operator_to_type_highlighting = warning
+resharper_can_replace_cast_with_lambda_return_type_highlighting = hint
+resharper_can_replace_cast_with_shorter_type_argument_highlighting = suggestion
+resharper_can_replace_cast_with_type_argument_highlighting = hint
+resharper_can_replace_cast_with_variable_type_highlighting = hint
+resharper_can_simplify_dictionary_lookup_with_try_add_highlighting = suggestion
+resharper_can_simplify_dictionary_lookup_with_try_get_value_highlighting = suggestion
+resharper_can_simplify_dictionary_removing_with_single_call_highlighting = suggestion
+resharper_can_simplify_dictionary_try_get_value_with_get_value_or_default_highlighting = suggestion
+resharper_can_simplify_is_assignable_from_highlighting = suggestion
+resharper_can_simplify_is_instance_of_type_highlighting = suggestion
+resharper_can_simplify_set_adding_with_single_call_highlighting = suggestion
+resharper_can_simplify_string_escape_sequence_highlighting = hint
+resharper_captured_primary_constructor_parameter_is_mutable_highlighting = warning
+resharper_center_tag_is_obsolete_highlighting = warning
+resharper_change_field_type_to_system_threading_lock_highlighting = suggestion
+resharper_check_for_reference_equality_instead_1_highlighting = suggestion
+resharper_check_for_reference_equality_instead_2_highlighting = suggestion
+resharper_check_for_reference_equality_instead_3_highlighting = suggestion
+resharper_check_for_reference_equality_instead_4_highlighting = suggestion
+resharper_check_namespace_highlighting = none
+resharper_class_cannot_be_instantiated_highlighting = warning
+resharper_class_can_be_sealed_global_highlighting = none
+resharper_class_can_be_sealed_local_highlighting = none
+resharper_class_never_instantiated_global_highlighting = suggestion
+resharper_class_never_instantiated_local_highlighting = suggestion
+resharper_class_with_virtual_members_never_inherited_global_highlighting = suggestion
+resharper_class_with_virtual_members_never_inherited_local_highlighting = suggestion
+resharper_clear_attribute_is_obsolete_all_highlighting = warning
+resharper_clear_attribute_is_obsolete_highlighting = warning
+resharper_collection_never_queried_global_highlighting = warning
+resharper_collection_never_queried_local_highlighting = warning
+resharper_collection_never_updated_global_highlighting = warning
+resharper_collection_never_updated_local_highlighting = warning
+resharper_command_invasion_declaration_global_highlighting = warning
+resharper_command_invasion_usage_global_highlighting = warning
+resharper_compare_non_constrained_generic_with_null_highlighting = none
+resharper_compare_of_floats_by_equality_operator_highlighting = warning
+resharper_conditional_access_qualifier_is_non_nullable_according_to_api_contract_highlighting = warning
+resharper_conditional_ternary_equal_branch_highlighting = warning
+resharper_condition_is_always_true_or_false_according_to_nullable_api_contract_highlighting = warning
+resharper_condition_is_always_true_or_false_highlighting = warning
+resharper_conflict_cqrs_attribute_highlighting = warning
+resharper_confusing_char_as_integer_in_constructor_highlighting = warning
+resharper_constant_conditional_access_qualifier_highlighting = warning
+resharper_constant_expected_highlighting = suggestion
+resharper_constant_null_coalescing_condition_highlighting = warning
+resharper_consteval_if_is_always_constant_highlighting = warning
+resharper_constructor_initializer_loop_highlighting = warning
+resharper_constructor_with_must_dispose_resource_attribute_base_is_not_annotated_highlighting = warning
+resharper_container_annotation_redundancy_highlighting = warning
+resharper_context_value_is_provided_highlighting = none
+resharper_contract_annotation_not_parsed_highlighting = warning
+resharper_convert_closure_to_method_group_highlighting = suggestion
+resharper_convert_conditional_ternary_expression_to_switch_expression_highlighting = hint
+resharper_convert_constructor_to_member_initializers_highlighting = suggestion
+resharper_convert_if_do_to_while_highlighting = suggestion
+resharper_convert_if_statement_to_conditional_ternary_expression_highlighting = suggestion
+resharper_convert_if_statement_to_null_coalescing_assignment_highlighting = suggestion
+resharper_convert_if_statement_to_null_coalescing_expression_highlighting = suggestion
+resharper_convert_if_statement_to_return_statement_highlighting = hint
+resharper_convert_if_statement_to_switch_statement_highlighting = hint
+resharper_convert_if_to_or_expression_highlighting = suggestion
+resharper_convert_nullable_to_short_form_highlighting = suggestion
+resharper_convert_switch_statement_to_switch_expression_highlighting = hint
+resharper_convert_to_auto_property_highlighting = suggestion
+resharper_convert_to_auto_property_when_possible_highlighting = hint
+resharper_convert_to_auto_property_with_private_setter_highlighting = hint
+resharper_convert_to_compound_assignment_highlighting = hint
+resharper_convert_to_constant_global_highlighting = hint
+resharper_convert_to_constant_local_highlighting = hint
+resharper_convert_to_extension_block_highlighting = suggestion
+resharper_convert_to_lambda_expression_highlighting = suggestion
+resharper_convert_to_local_function_highlighting = suggestion
+resharper_convert_to_null_coalescing_compound_assignment_highlighting = suggestion
+resharper_convert_to_primary_constructor_highlighting = suggestion
+resharper_convert_to_static_class_highlighting = suggestion
+resharper_convert_to_using_declaration_highlighting = suggestion
+resharper_convert_to_vb_auto_property_highlighting = suggestion
+resharper_convert_to_vb_auto_property_when_possible_highlighting = hint
+resharper_convert_to_vb_auto_property_with_private_setter_highlighting = hint
+resharper_convert_type_check_pattern_to_null_check_highlighting = warning
+resharper_convert_type_check_to_null_check_highlighting = warning
+resharper_co_variant_array_conversion_highlighting = warning
+resharper_cpp_abstract_class_without_specifier_highlighting = warning
+resharper_cpp_abstract_final_class_highlighting = warning
+resharper_cpp_abstract_virtual_function_call_in_ctor_highlighting = error
+resharper_cpp_access_specifier_with_no_declarations_highlighting = suggestion
+resharper_cpp_assigned_value_is_never_used_highlighting = warning
+resharper_cpp_awaiter_type_is_not_class_highlighting = warning
+resharper_cpp_bad_angle_brackets_spaces_highlighting = none
+resharper_cpp_bad_braces_spaces_highlighting = none
+resharper_cpp_bad_child_statement_indent_highlighting = none
+resharper_cpp_bad_colon_spaces_highlighting = none
+resharper_cpp_bad_comma_spaces_highlighting = none
+resharper_cpp_bad_control_braces_indent_highlighting = none
+resharper_cpp_bad_control_braces_line_breaks_highlighting = none
+resharper_cpp_bad_declaration_braces_indent_highlighting = none
+resharper_cpp_bad_declaration_braces_line_breaks_highlighting = none
+resharper_cpp_bad_empty_braces_line_breaks_highlighting = none
+resharper_cpp_bad_expression_braces_indent_highlighting = none
+resharper_cpp_bad_expression_braces_line_breaks_highlighting = none
+resharper_cpp_bad_indent_highlighting = none
+resharper_cpp_bad_list_line_breaks_highlighting = none
+resharper_cpp_bad_member_access_spaces_highlighting = none
+resharper_cpp_bad_namespace_braces_indent_highlighting = none
+resharper_cpp_bad_parens_line_breaks_highlighting = none
+resharper_cpp_bad_parens_spaces_highlighting = none
+resharper_cpp_bad_semicolon_spaces_highlighting = none
+resharper_cpp_bad_spaces_after_keyword_highlighting = none
+resharper_cpp_bad_square_brackets_spaces_highlighting = none
+resharper_cpp_bad_switch_braces_indent_highlighting = none
+resharper_cpp_bad_symbol_spaces_highlighting = none
+resharper_cpp_boolean_increment_expression_highlighting = warning
+resharper_cpp_boost_format_bad_code_highlighting = warning
+resharper_cpp_boost_format_legacy_code_highlighting = suggestion
+resharper_cpp_boost_format_mixed_args_highlighting = error
+resharper_cpp_boost_format_too_few_args_highlighting = error
+resharper_cpp_boost_format_too_many_args_highlighting = warning
+resharper_cpp_bound_to_delegate_method_is_not_marked_as_u_function_highlighting = warning
+resharper_cpp_clang_tidy_abseil_cleanup_ctad_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_addition_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_comparison_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_conversion_cast_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_division_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_factory_float_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_factory_scale_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_subtraction_highlighting = none
+resharper_cpp_clang_tidy_abseil_duration_unnecessary_conversion_highlighting = none
+resharper_cpp_clang_tidy_abseil_faster_strsplit_delimiter_highlighting = none
+resharper_cpp_clang_tidy_abseil_no_internal_dependencies_highlighting = none
+resharper_cpp_clang_tidy_abseil_no_namespace_highlighting = none
+resharper_cpp_clang_tidy_abseil_redundant_strcat_calls_highlighting = none
+resharper_cpp_clang_tidy_abseil_string_find_startswith_highlighting = none
+resharper_cpp_clang_tidy_abseil_string_find_str_contains_highlighting = none
+resharper_cpp_clang_tidy_abseil_str_cat_append_highlighting = none
+resharper_cpp_clang_tidy_abseil_time_comparison_highlighting = none
+resharper_cpp_clang_tidy_abseil_time_subtraction_highlighting = none
+resharper_cpp_clang_tidy_abseil_upgrade_duration_conversions_highlighting = none
+resharper_cpp_clang_tidy_altera_id_dependent_backward_branch_highlighting = none
+resharper_cpp_clang_tidy_altera_kernel_name_restriction_highlighting = none
+resharper_cpp_clang_tidy_altera_single_work_item_barrier_highlighting = none
+resharper_cpp_clang_tidy_altera_struct_pack_align_highlighting = none
+resharper_cpp_clang_tidy_altera_unroll_loops_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_accept4_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_accept_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_creat_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_dup_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_epoll_create1_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_epoll_create_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_fopen_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_inotify_init1_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_inotify_init_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_memfd_create_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_open_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_pipe2_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_pipe_highlighting = none
+resharper_cpp_clang_tidy_android_cloexec_socket_highlighting = none
+resharper_cpp_clang_tidy_android_comparison_in_temp_failure_retry_highlighting = none
+resharper_cpp_clang_tidy_boost_use_ranges_highlighting = none
+resharper_cpp_clang_tidy_boost_use_to_string_highlighting = suggestion
+resharper_cpp_clang_tidy_bugprone_argument_comment_highlighting = suggestion
+resharper_cpp_clang_tidy_bugprone_assert_side_effect_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_assignment_in_if_condition_highlighting = none
+resharper_cpp_clang_tidy_bugprone_bad_signal_to_kill_thread_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_bitwise_pointer_cast_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_bool_pointer_implicit_conversion_highlighting = none
+resharper_cpp_clang_tidy_bugprone_branch_clone_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_capturing_this_in_member_variable_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_casting_through_void_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_chained_comparison_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_compare_pointer_to_member_virtual_function_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_copy_constructor_init_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_crtp_constructor_accessibility_highlighting = suggestion
+resharper_cpp_clang_tidy_bugprone_dangling_handle_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_dynamic_static_initializers_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_easily_swappable_parameters_highlighting = none
+resharper_cpp_clang_tidy_bugprone_empty_catch_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_exception_escape_highlighting = none
+resharper_cpp_clang_tidy_bugprone_fold_init_type_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_forwarding_reference_overload_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_forward_declaration_namespace_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_implicit_widening_of_multiplication_result_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_inaccurate_erase_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_incorrect_enable_if_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_incorrect_enable_shared_from_this_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_incorrect_roundings_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_inc_dec_in_conditions_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_infinite_loop_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_integer_division_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_lambda_function_name_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_macro_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_macro_repeated_side_effects_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_misleading_setter_of_reference_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_misplaced_operator_in_strlen_in_alloc_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_misplaced_pointer_arithmetic_in_alloc_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_misplaced_widening_cast_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_move_forwarding_reference_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_multiple_new_in_one_expression_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_multiple_statement_macro_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_multi_level_implicit_pointer_conversion_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_narrowing_conversions_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_nondeterministic_pointer_iteration_order_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_non_zero_enum_to_bool_conversion_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_not_null_terminated_result_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_no_escape_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_optional_value_conversion_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_parent_virtual_call_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_pointer_arithmetic_on_polymorphic_object_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_posix_return_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_redundant_branch_condition_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_reserved_identifier_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_return_const_ref_from_parameter_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_shared_ptr_array_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_signal_handler_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_signed_char_misuse_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_sizeof_container_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_sizeof_expression_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_spuriously_wake_up_functions_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_standalone_empty_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_stringview_nullptr_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_string_constructor_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_string_integer_assignment_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_string_literal_with_embedded_nul_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_enum_usage_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_include_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_memory_comparison_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_memset_usage_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_missing_comma_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_realloc_usage_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_semicolon_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_stringview_data_usage_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_suspicious_string_compare_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_swapped_arguments_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_switch_missing_default_case_highlighting = none
+resharper_cpp_clang_tidy_bugprone_tagged_union_member_count_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_terminating_continue_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_throw_keyword_missing_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_too_small_loop_variable_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unchecked_optional_access_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_undefined_memory_manipulation_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_undelegated_constructor_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unhandled_exception_at_new_highlighting = none
+resharper_cpp_clang_tidy_bugprone_unhandled_self_assignment_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unintended_char_ostream_output_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unique_ptr_array_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unsafe_functions_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unused_local_non_trivial_variable_highlighting = none
+resharper_cpp_clang_tidy_bugprone_unused_raii_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_unused_return_value_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_use_after_move_highlighting = warning
+resharper_cpp_clang_tidy_bugprone_virtual_near_miss_highlighting = suggestion
+resharper_cpp_clang_tidy_cert_arr39_c_highlighting = none
+resharper_cpp_clang_tidy_cert_con36_c_highlighting = none
+resharper_cpp_clang_tidy_cert_con54_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_ctr56_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl03_c_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl16_c_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl37_c_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl50_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl51_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl54_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_dcl58_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_dcl59_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_env33_c_highlighting = none
+resharper_cpp_clang_tidy_cert_err09_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_err33_c_highlighting = warning
+resharper_cpp_clang_tidy_cert_err34_c_highlighting = suggestion
+resharper_cpp_clang_tidy_cert_err52_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_err58_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_err60_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_err61_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_exp42_c_highlighting = none
+resharper_cpp_clang_tidy_cert_fio38_c_highlighting = none
+resharper_cpp_clang_tidy_cert_flp30_c_highlighting = warning
+resharper_cpp_clang_tidy_cert_flp37_c_highlighting = none
+resharper_cpp_clang_tidy_cert_int09_c_highlighting = none
+resharper_cpp_clang_tidy_cert_mem57_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_msc24_c_highlighting = none
+resharper_cpp_clang_tidy_cert_msc30_c_highlighting = none
+resharper_cpp_clang_tidy_cert_msc32_c_highlighting = none
+resharper_cpp_clang_tidy_cert_msc33_c_highlighting = none
+resharper_cpp_clang_tidy_cert_msc50_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_msc51_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_msc54_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_oop11_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_oop54_cpp_highlighting = none
+resharper_cpp_clang_tidy_cert_oop57_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_oop58_cpp_highlighting = warning
+resharper_cpp_clang_tidy_cert_pos44_c_highlighting = none
+resharper_cpp_clang_tidy_cert_pos47_c_highlighting = none
+resharper_cpp_clang_tidy_cert_sig30_c_highlighting = none
+resharper_cpp_clang_tidy_cert_str34_c_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_api_modeling_errno_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_api_modeling_google_g_test_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_cast_value_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_return_value_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_nonnull_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_returns_nonnull_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_bitwise_shift_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_builtin_assume_modeling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_builtin_builtin_functions_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_builtin_no_return_functions_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_modeling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_dereference_modeling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_divide_zero_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_dynamic_type_propagation_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_fixed_address_dereference_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_nonnil_string_constants_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_non_null_param_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_null_dereference_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_stack_address_escape_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_stack_addr_escape_base_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_undefined_binary_operator_result_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_array_subscript_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_assign_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_branch_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_captured_block_variable_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_new_array_size_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_undef_return_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_core_vla_size_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_array_delete_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_inner_pointer_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_move_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_leaks_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_placement_new_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_pure_virtual_call_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_self_assignment_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_smart_ptr_modeling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_cplusplus_string_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_deadcode_dead_stores_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_fuchsia_handle_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_dereferenced_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_passed_to_nonnull_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_returned_from_nonnull_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_nullability_null_passed_to_nonnull_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_nullability_null_returned_from_nonnull_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_core_enum_cast_out_of_range_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_uninitialized_object_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_virtual_call_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_mpi_mpi_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_empty_localization_context_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_non_localized_string_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_osx_os_object_c_style_cast_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_performance_gcd_antipattern_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_performance_padding_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_portability_unix_api_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_taint_generic_taint_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_taint_tainted_alloc_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_taint_tainted_div_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_optin_taint_taint_propagation_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_api_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_at_sync_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_autorelease_write_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_class_release_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_dealloc_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_incompatible_method_types_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_loops_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_missing_super_call_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_nil_arg_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_non_nil_return_value_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_autorelease_pool_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_error_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_obj_c_generics_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_base_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_run_loop_autorelease_leak_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_self_init_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_super_dealloc_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_unused_ivars_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_variadic_method_types_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_error_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_number_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_retain_release_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_out_of_bounds_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_pointer_sized_values_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_mig_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_ns_or_cf_error_deref_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_number_object_conversion_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_obj_c_property_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_os_object_retain_count_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_osx_sec_keychain_api_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_array_bound_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_cert_env_invalid_ptr_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_float_loop_counter_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcmp_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcopy_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bzero_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_decode_value_of_obj_c_type_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_deprecated_or_unsafe_buffer_handling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_getpw_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_gets_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mkstemp_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mktemp_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_rand_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_security_syntax_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_strcpy_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_unchecked_return_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_vfork_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_mmap_write_exec_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_pointer_sub_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_putenv_stack_array_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_security_setgid_setuid_order_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_api_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_block_in_critical_section_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_chroot_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_bad_size_arg_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_c_string_modeling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_not_null_terminated_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_null_arg_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_dynamic_memory_modeling_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_errno_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_sizeof_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_mismatched_deallocator_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_std_c_library_functions_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_stream_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_unix_vfork_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_valist_copy_to_self_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_valist_uninitialized_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_valist_unterminated_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_valist_valist_base_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_webkit_no_uncounted_member_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_webkit_ref_cntbl_base_virtual_dtor_highlighting = none
+resharper_cpp_clang_tidy_clang_analyzer_webkit_uncounted_lambda_captures_checker_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_aarch64_sme_attributes_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_absolute_value_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_abstract_final_class_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_abstract_vbase_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_address_of_packed_member_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_address_of_temporary_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_aix_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_alias_template_in_declaration_name_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_align_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_alloca_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_alloca_with_align_alignof_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_always_inline_coroutine_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_delete_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_ellipsis_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_macro_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_member_template_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_reversed_operator_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_analyzer_incompatible_plugin_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_android_unversioned_fallback_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_anonymous_pack_parens_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_anon_enum_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_bridge_casts_disallowed_in_nonarc_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_maybe_repeated_use_of_weak_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_non_pod_memaccess_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_perform_selector_leaks_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_repeated_use_of_weak_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_retain_cycles_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arc_unsafe_retained_assign_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_argument_outside_range_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_argument_undefined_behaviour_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_arm_interrupt_save_fp_no_vfp_unit_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_arm_interrupt_vfp_clobber_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_pointer_arithmetic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_array_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_array_parameter_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_asm_operand_widths_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_assign_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_assume_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_atimport_in_framework_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_atomic_access_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_atomic_alignment_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_atomic_implicit_seq_cst_highlighting = suggestion
+resharper_cpp_clang_tidy_clang_diagnostic_atomic_memory_ordering_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_atomic_property_with_user_defined_accessor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_attribute_packed_for_bitfield_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_attribute_warning_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_at_protocol_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_auto_decl_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_auto_disable_vptr_sanitizer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_auto_import_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_auto_storage_class_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_auto_var_id_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_availability_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_avr_rtlib_linking_quirks_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_backslash_newline_escape_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bad_function_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bind_to_temporary_copy_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bitfield_constant_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bitfield_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bitfield_width_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bitwise_conditional_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bitwise_instead_of_logical_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bitwise_op_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bit_int_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_block_capture_autoreleasing_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bool_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bool_operation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bounds_safety_counted_by_elt_type_unknown_size_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_braced_scalar_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_branch_protection_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_bridge_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_builtin_assume_aligned_alignment_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_builtin_macro_redefined_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_builtin_memcpy_chk_size_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_builtin_requires_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c11_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c23_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_c23_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c2x_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_c2x_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c2y_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c99_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_c99_designator_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c99_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_called_once_parameter_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_call_to_pure_virtual_from_ctor_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_align_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_calling_convention_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_strict_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_of_sel_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_unrelated_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cfi_unchecked_callee_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cf_string_literal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_character_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_char_subscripts_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_clang_cl_pch_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_class_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_class_varargs_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cmse_union_leak_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_comma_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_comment_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_compare_distinct_pointer_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_completion_handler_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_complex_component_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_macro_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_space_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_conditional_type_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_conditional_uninitialized_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_config_macros_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_constant_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_constant_evaluated_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_constant_logical_operand_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_constexpr_not_const_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_consumed_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_coroutine_missing_unhandled_exception_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_coro_non_aligned_allocation_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_coro_type_aware_allocation_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_covered_switch_default_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_deprecated_writable_strings_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_reserved_user_defined_literal_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extra_semi_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_inline_namespace_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_long_long_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_const_reference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp14_attribute_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp14_binary_literal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp14_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp17_attribute_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_mangling_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp17_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp20_attribute_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp20_designator_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp20_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp23_attribute_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp23_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp23_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp23_lambda_attributes_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp26_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp2b_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp2c_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp2c_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_bind_to_temporary_copy_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_extra_semi_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_local_type_template_args_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_unnamed_type_template_args_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_binary_literal_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp_hidden_decl_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp_keyword_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cpp_unterminated_string_initialization_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cstring_format_directive_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ctad_maybe_unsupported_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_ctu_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_cuda_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_custom_atomic_properties_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_cxx_attribute_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_c_attribute_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_assignment_gsl_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_assignment_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_capture_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_else_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_field_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_gsl_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dangling_initializer_list_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_darwin_sdk_settings_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_date_time_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dealloc_in_category_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_debug_compression_unavailable_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_declaration_after_statement_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_decls_in_multiple_modules_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_defaulted_function_deleted_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_field_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_field_unsafe_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_unsafe_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_var_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_var_unsafe_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_delegating_ctor_cycles_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_delete_abstract_non_virtual_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_delete_incomplete_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_delete_non_abstract_non_virtual_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_delete_non_virtual_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_delimited_escape_sequence_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_altivec_src_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_anon_enum_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_array_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_attributes_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_builtins_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_comma_subscript_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_copy_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_coroutine_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_switch_case_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_dynamic_exception_spec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_conditional_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_float_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_implementations_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_increment_bool_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_literal_operator_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_missing_comma_variadic_parameter_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_non_prototype_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_isa_usage_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_perform_selector_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_octal_literals_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_ofast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_pragma_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_redundant_constexpr_static_def_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_register_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_this_capture_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecated_volatile_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_deprecate_lax_vec_conv_all_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_direct_ivar_access_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_disabled_macro_expansion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_distributed_object_modifiers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_division_by_zero_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dllexport_explicit_instantiation_decl_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dllimport_static_field_def_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dll_attribute_on_redeclaration_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_documentation_deprecated_sync_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_documentation_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_documentation_html_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_documentation_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_documentation_unknown_command_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_dollar_in_identifier_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_double_promotion_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_dtor_name_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dtor_typedef_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_duplicate_decl_specifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_duplicate_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_arg_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_match_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_duplicate_protocol_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dxil_validation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dynamic_class_memaccess_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_dynamic_exception_spec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_eager_load_cxx_named_modules_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_embedded_directive_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_empty_body_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_empty_decomposition_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_empty_init_stmt_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_empty_translation_unit_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_encode_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_conditional_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_switch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_float_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_enum_too_large_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_error_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_exceptions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_excessive_regsave_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_excess_initializers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_exit_time_destructors_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_expansion_to_defined_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_experimental_header_units_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_experimental_lifetime_safety_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_experimental_option_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_explicit_initialize_call_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_explicit_ownership_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_explicit_specialization_storage_class_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_export_unnamed_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_extern_c_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_extern_initializer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_extractapi_misuse_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_extra_qualification_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_stmt_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_extra_tokens_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ext_cxx_type_aware_allocators_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_final_dtor_non_final_class_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_final_macro_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_fixed_point_overflow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_flag_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_flexible_array_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_float_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_float_equal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_float_overflow_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_float_zero_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_extra_args_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_insufficient_args_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_invalid_specifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_nonliteral_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_non_iso_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_overflow_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_format_overflow_non_kprintf_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_format_pedantic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_security_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_signedness_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_truncation_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_format_truncation_non_kprintf_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_format_type_confusion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_format_zero_length_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_fortify_source_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_for_loop_analysis_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_four_char_constants_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_framework_include_private_from_public_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_frame_address_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_frame_larger_than_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_free_nonheap_object_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_friend_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_function_def_in_objc_container_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_function_effects_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_function_multiversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_future_attribute_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gcc_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_global_constructors_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_global_isel_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_alignof_expression_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_anonymous_struct_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_array_member_paren_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_auto_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_binary_literal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_case_range_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_complex_integer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_compound_literal_initializer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_conditional_omitted_operand_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_designator_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_initializer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_struct_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_initializer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_union_member_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_folding_constant_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_imaginary_constant_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_include_next_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_inline_cpp_without_extern_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_label_as_value_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_line_marker_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_null_pointer_arithmetic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_offsetof_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_pointer_arith_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_redeclared_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_from_macro_expansion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_static_float_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_string_literal_operator_template_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_union_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_variable_sized_type_not_at_end_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gnu_zero_variadic_macro_arguments_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_gpu_maybe_wrong_side_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_header_guard_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_header_hygiene_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_higher_precision_for_complex_division_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_hip_omp_target_directives_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_hip_only_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_hlsl202y_extensions_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_hlsl_availability_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_hlsl_dxc_compatability_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_hlsl_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_hlsl_implicit_binding_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_idiomatic_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_attributes_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_availability_without_sdk_settings_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_base_class_qualifiers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_optimization_argument_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragmas_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_intrinsic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_optimize_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_qualifiers_highlighting = suggestion
+resharper_cpp_clang_tidy_clang_diagnostic_ignored_reference_qualifiers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicitly_unsigned_literal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_atomic_properties_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_const_int_float_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_conversion_floating_point_to_bool_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_enum_enum_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_exception_spec_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_per_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_fixed_point_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_float_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_function_declaration_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_conversion_on_negation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_enum_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_float_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_retain_self_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_implicit_void_ptr_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_import_implementation_partition_unit_in_interface_unit_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_import_preprocessor_directive_pedantic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inaccessible_base_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_include_angled_in_module_purview_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_include_next_absolute_path_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_include_next_outside_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_exception_spec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_strict_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_library_redeclaration_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_pragma_section_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_struct_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_discards_qualifiers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_property_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incompatible_sysroot_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incomplete_framework_module_declaration_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incomplete_implementation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incomplete_module_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incomplete_setjmp_declaration_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_incomplete_umbrella_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_dllimport_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_destructor_override_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_override_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_increment_bool_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_independent_class_attribute_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_infinite_recursion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_initializer_overrides_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_init_priority_reserved_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_injected_class_name_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inline_asm_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inline_namespace_reopened_noninline_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_inline_new_delete_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_installapi_violation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_instantiation_after_specialization_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_integer_overflow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_int_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_int_in_bool_context_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_int_to_pointer_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_int_to_void_pointer_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_constexpr_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_gnu_asm_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_iboutlet_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_initializer_from_system_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_ios_deployment_target_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_noreturn_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_no_builtin_names_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_offsetof_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_or_nonexistent_directory_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_partial_specialization_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_pp_token_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_source_encoding_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_static_assert_message_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_token_paste_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_unevaluated_string_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_utf8_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_invalid_version_availability_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_jump_misses_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_jump_seh_finally_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_keyword_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_keyword_macro_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_knr_promoted_parameter_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_language_extension_token_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_large_by_value_copy_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_legacy_constant_register_binding_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_linker_warnings_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_literal_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_literal_range_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_local_type_template_args_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_logical_not_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_logical_op_parentheses_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_long_long_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_macro_redefined_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_main_attached_to_named_module_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_main_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_main_return_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_malformed_warning_check_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_many_braces_around_scalar_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_mathematical_notation_identifier_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_math_errno_enabled_with_veclib_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_max_tokens_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_max_unsigned_zero_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_memset_transposed_args_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_memsize_comparison_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_method_signatures_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_abstract_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_anon_tag_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_charize_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_comment_paste_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_const_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cpp_macro_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_default_arg_redefinition_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_drectve_section_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_end_of_file_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_forward_reference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_value_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exception_spec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exists_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_explicit_constructor_call_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_extra_qualification_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_fixed_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_flexible_array_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_goto_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inaccessible_base_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_include_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_init_from_predefined_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inline_on_non_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_mutable_reference_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_pure_definition_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_redeclare_static_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_sealed_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_string_literal_from_predefined_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_shadow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_union_member_reference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_unqualified_friend_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_using_decl_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_microsoft_void_pseudo_dtor_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_misexpect_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_misleading_indentation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_mismatched_new_delete_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_mismatched_parameter_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_mismatched_return_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_mismatched_tags_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_braces_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_constinit_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_declarations_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_designated_field_initializers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_exception_spec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_field_initializers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_method_return_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_multilib_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_noescape_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_noreturn_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_prototypes_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_missing_prototype_for_cc_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_selector_name_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_sysroot_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_template_arg_list_after_template_kw_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_missing_variable_declarations_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_misspelled_assumption_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_mix_packoffset_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_modules_ambiguous_internal_linkage_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_modules_import_nested_redundant_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_module_conflict_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_module_file_config_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_module_file_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_module_file_mapping_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_module_import_in_extern_c_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_msvc_not_found_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ms_bitfield_padding_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_multichar_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_multilib_not_found_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_multiple_move_vbase_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_multi_gpu_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nan_infinity_disabled_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nested_anon_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_newline_eof_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_new_returns_null_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_noderef_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nonnull_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nonportable_include_path_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_nonportable_system_include_path_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_nonportable_vector_initialization_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nontrivial_memaccess_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nontrivial_memcall_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_c_typedef_for_linkage_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_literal_null_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_framework_module_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_module_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_pod_varargs_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_power_of_two_alignment_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_non_virtual_dtor_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_nrvo_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nsconsumed_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nsreturns_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ns_object_attribute_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_on_arrays_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullability_declspec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullability_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullability_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullability_inferred_on_nested_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nullable_to_nonnull_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_null_arithmetic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_null_character_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_null_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_null_dereference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_arithmetic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_subtraction_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_nvcc_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_octal_prefix_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_odr_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_old_style_cast_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_openacc_cache_var_inside_loop_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openacc_confusing_routine_name_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openacc_deprecated_clause_alias_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openacc_self_if_potential_conflict_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_opencl_unsupported_rgba_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp51_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_clauses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_extensions_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_future_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_loop_form_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_mapping_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_target_exception_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_openmp_target_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_option_ignored_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ordered_compare_function_pointers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_out_of_line_declaration_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_out_of_scope_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_overlength_strings_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_overloaded_shift_op_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_overloaded_virtual_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_override_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_override_module_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_overriding_deployment_version_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_overriding_method_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_overriding_option_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_over_aligned_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_packed_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_packed_non_pod_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_padded_bitfield_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_padded_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_parentheses_equality_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pass_failed_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pch_date_time_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pedantic_core_features_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pedantic_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pedantic_macros_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_perf_constraint_implies_noexcept_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pessimizing_move_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_arith_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_bool_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_integer_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_sign_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_enum_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_int_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pointer_type_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_poison_system_directories_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_potentially_evaluated_expression_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragmas_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragma_clang_attribute_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragma_messages_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragma_once_outside_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_suspicious_include_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pragma_system_header_outside_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_predefined_identifier_outside_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_preferred_type_bitfield_enum_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c11_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c11_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c23_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c23_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c2y_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_c2y_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp23_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp23_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp26_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp26_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2c_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2c_compat_pedantic_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_pre_openmp51_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_private_extern_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_private_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_private_module_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_missing_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_out_of_date_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_unprofiled_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_property_access_dot_syntax_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_property_attribute_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_protocol_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_protocol_property_synthesis_ambiguity_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_psabi_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_ptrauth_null_pointers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_qualified_void_return_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_quoted_include_in_framework_header_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_range_loop_analysis_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_range_loop_bind_reference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_range_loop_construct_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_readonly_iboutlet_property_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_read_only_types_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_receiver_expr_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_receiver_forward_class_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_redeclared_class_member_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_redundant_attribute_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_redundant_consteval_if_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_redundant_move_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_redundant_parens_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_register_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reinterpret_base_class_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reorder_ctor_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_reorder_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reorder_init_list_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_requires_super_attribute_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reserved_attribute_identifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reserved_identifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reserved_id_macro_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reserved_macro_identifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reserved_module_identifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_reserved_user_defined_literal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_restrict_expansion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_retained_language_linkage_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_return_local_addr_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_return_mismatch_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_return_stack_address_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_return_std_move_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_return_type_c_linkage_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_return_type_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_rewrite_not_bool_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sarif_format_unstable_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_section_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_selector_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_selector_type_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_self_assign_field_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_self_assign_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_self_assign_overloaded_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_self_move_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_semicolon_before_method_body_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sentinel_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_serialized_diagnostics_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_modified_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_shadow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shadow_ivar_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shadow_uncaptured_local_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_shift_bool_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shift_count_negative_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shift_count_overflow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shift_negative_value_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shift_op_parentheses_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shift_overflow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shift_sign_overflow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_shorten64_to32_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_signed_enum_bitfield_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_signed_unsigned_wchar_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sign_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sign_conversion_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_single_bit_bitfield_constant_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_argument_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_decay_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_div_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_div_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_memaccess_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_slash_u_filename_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_slh_asm_goto_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_sometimes_uninitialized_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openacc_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openmp_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_spirv_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_spir_compat_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_static_float_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_static_inline_explicit_instantiation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_static_in_inline_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_static_local_in_inline_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_static_self_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_stdlibcxx_not_found_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_strict_primary_template_shadow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_strict_prototypes_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_strict_selector_match_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_string_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_string_concatenation_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_string_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_string_plus_char_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_string_plus_int_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_strlcpy_strlcat_size_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_strncat_size_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_suggest_destructor_override_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_suggest_override_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_super_class_method_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_suspicious_bzero_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_switch_bool_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_switch_default_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_switch_enum_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_switch_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sync_alignment_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_sync_fetch_and_nand_semantics_changed_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_target_clones_mixed_specifiers_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_bitwise_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_in_range_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_out_of_range_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_negation_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_objc_bool_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_overlap_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_pointer_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_type_limit_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_undefined_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_char_zero_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_enum_zero_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_zero_compare_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_tautological_value_range_compare_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_template_in_declaration_name_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_array_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_compat_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_incomplete_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_analysis_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_attributes_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_beta_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_negative_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_pointer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_precise_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_reference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_reference_return_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_verbose_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_trigraphs_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_typedef_redefinition_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_typename_missing_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_type_safety_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unable_to_open_stats_file_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unaligned_access_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unaligned_qualifier_implicit_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unavailable_declarations_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undeclared_selector_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_arm_za_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_arm_zt0_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_bool_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_func_template_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_inline_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_type_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_reinterpret_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undefined_var_template_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_undef_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_undef_prefix_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_undef_true_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_underaligned_exception_object_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_underlying_atomic_qualifier_ignored_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_underlying_cv_qualifier_ignored_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unevaluated_expression_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_new_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unicode_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unicode_homoglyph_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unicode_whitespace_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unicode_zero_width_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_pointer_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_reference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_explicit_init_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unique_object_duplication_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_acc_extension_clause_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_argument_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_attributes_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_cuda_version_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_directives_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_escape_sequence_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_pragmas_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_sanitizers_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unknown_warning_option_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unnamed_type_template_args_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unnecessary_virtual_specifier_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unneeded_internal_declaration_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unneeded_member_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unqualified_std_cast_call_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_break_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_fallthrough_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_generic_assoc_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_loop_increment_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_return_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsafe_buffer_usage_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unsafe_buffer_usage_in_container_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unsafe_buffer_usage_in_libc_call_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unsequenced_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abi_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abs_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_availability_guard_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_cb_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_dll_base_class_template_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_friend_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_gpopt_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_nan_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_target_opt_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unsupported_visibility_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unterminated_string_initialization_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unusable_partial_specialization_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_parameter_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_variable_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_comparison_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_const_variable_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_exception_parameter_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_getter_return_value_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_label_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_lambda_capture_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_local_typedef_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_macros_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_member_function_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_parameter_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_private_field_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_property_ivar_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_result_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_template_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_value_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_unused_variable_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_unused_volatile_lvalue_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_used_but_marked_unused_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_user_defined_literals_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_user_defined_warnings_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_varargs_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_variadic_macros_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_variadic_macro_arguments_omitted_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vector_conversion_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vec_elem_size_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vexing_parse_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_visibility_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vla_cxx_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_static_assert_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_vla_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_enum_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_int_cast_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_void_ptr_dereference_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_warnings_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_warning_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_wasm_exception_spec_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_weak_template_vtables_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_weak_vtables_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_writable_strings_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_xor_used_as_pow_highlighting = warning
+resharper_cpp_clang_tidy_clang_diagnostic_zero_as_null_pointer_constant_highlighting = none
+resharper_cpp_clang_tidy_clang_diagnostic_zero_length_array_highlighting = warning
+resharper_cpp_clang_tidy_concurrency_mt_unsafe_highlighting = warning
+resharper_cpp_clang_tidy_concurrency_thread_canceltype_asynchronous_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_capturing_lambda_coroutines_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_const_or_ref_data_members_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_c_arrays_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_do_while_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_goto_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_magic_numbers_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_non_const_global_variables_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_avoid_reference_coroutine_parameters_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_c_copy_assignment_signature_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_explicit_virtual_functions_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_init_variables_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_interfaces_global_init_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_macro_to_enum_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_macro_usage_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_misleading_capture_default_by_value_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_missing_std_forward_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_narrowing_conversions_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_destructor_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_move_operations_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_swap_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_non_private_member_variables_in_classes_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_no_malloc_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_no_suspend_with_lock_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_owning_memory_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_prefer_member_initializer_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_array_to_pointer_decay_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_constant_array_index_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_pointer_arithmetic_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_const_cast_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_cstyle_cast_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_member_init_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_reinterpret_cast_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_static_cast_downcast_highlighting = suggestion
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_union_access_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_vararg_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_rvalue_reference_param_not_moved_highlighting = warning
+resharper_cpp_clang_tidy_cppcoreguidelines_slicing_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_special_member_functions_highlighting = suggestion
+resharper_cpp_clang_tidy_cppcoreguidelines_use_default_member_init_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_use_enum_class_highlighting = none
+resharper_cpp_clang_tidy_cppcoreguidelines_virtual_class_destructor_highlighting = none
+resharper_cpp_clang_tidy_darwin_avoid_spinlock_highlighting = none
+resharper_cpp_clang_tidy_darwin_dispatch_once_nonstatic_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_default_arguments_calls_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_default_arguments_declarations_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_header_anon_namespaces_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_multiple_inheritance_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_overloaded_operator_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_statically_constructed_objects_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_trailing_return_highlighting = none
+resharper_cpp_clang_tidy_fuchsia_virtual_inheritance_highlighting = none
+resharper_cpp_clang_tidy_google_build_explicit_make_pair_highlighting = none
+resharper_cpp_clang_tidy_google_build_namespaces_highlighting = none
+resharper_cpp_clang_tidy_google_build_using_namespace_highlighting = none
+resharper_cpp_clang_tidy_google_default_arguments_highlighting = none
+resharper_cpp_clang_tidy_google_explicit_constructor_highlighting = none
+resharper_cpp_clang_tidy_google_global_names_in_headers_highlighting = none
+resharper_cpp_clang_tidy_google_objc_avoid_nsobject_new_highlighting = none
+resharper_cpp_clang_tidy_google_objc_avoid_throwing_exception_highlighting = none
+resharper_cpp_clang_tidy_google_objc_function_naming_highlighting = none
+resharper_cpp_clang_tidy_google_objc_global_variable_declaration_highlighting = none
+resharper_cpp_clang_tidy_google_readability_avoid_underscore_in_googletest_name_highlighting = none
+resharper_cpp_clang_tidy_google_readability_braces_around_statements_highlighting = none
+resharper_cpp_clang_tidy_google_readability_casting_highlighting = none
+resharper_cpp_clang_tidy_google_readability_function_size_highlighting = none
+resharper_cpp_clang_tidy_google_readability_namespace_comments_highlighting = none
+resharper_cpp_clang_tidy_google_readability_todo_highlighting = none
+resharper_cpp_clang_tidy_google_runtime_int_highlighting = none
+resharper_cpp_clang_tidy_google_runtime_operator_highlighting = warning
+resharper_cpp_clang_tidy_google_upgrade_googletest_case_highlighting = suggestion
+resharper_cpp_clang_tidy_hicpp_avoid_c_arrays_highlighting = none
+resharper_cpp_clang_tidy_hicpp_avoid_goto_highlighting = warning
+resharper_cpp_clang_tidy_hicpp_braces_around_statements_highlighting = none
+resharper_cpp_clang_tidy_hicpp_deprecated_headers_highlighting = none
+resharper_cpp_clang_tidy_hicpp_exception_baseclass_highlighting = suggestion
+resharper_cpp_clang_tidy_hicpp_explicit_conversions_highlighting = none
+resharper_cpp_clang_tidy_hicpp_function_size_highlighting = none
+resharper_cpp_clang_tidy_hicpp_ignored_remove_result_highlighting = warning
+resharper_cpp_clang_tidy_hicpp_invalid_access_moved_highlighting = none
+resharper_cpp_clang_tidy_hicpp_member_init_highlighting = none
+resharper_cpp_clang_tidy_hicpp_move_const_arg_highlighting = none
+resharper_cpp_clang_tidy_hicpp_multiway_paths_covered_highlighting = warning
+resharper_cpp_clang_tidy_hicpp_named_parameter_highlighting = none
+resharper_cpp_clang_tidy_hicpp_new_delete_operators_highlighting = none
+resharper_cpp_clang_tidy_hicpp_noexcept_move_highlighting = none
+resharper_cpp_clang_tidy_hicpp_no_array_decay_highlighting = none
+resharper_cpp_clang_tidy_hicpp_no_assembler_highlighting = none
+resharper_cpp_clang_tidy_hicpp_no_malloc_highlighting = none
+resharper_cpp_clang_tidy_hicpp_signed_bitwise_highlighting = none
+resharper_cpp_clang_tidy_hicpp_special_member_functions_highlighting = none
+resharper_cpp_clang_tidy_hicpp_static_assert_highlighting = none
+resharper_cpp_clang_tidy_hicpp_undelegated_constructor_highlighting = none
+resharper_cpp_clang_tidy_hicpp_uppercase_literal_suffix_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_auto_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_emplace_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_equals_default_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_equals_delete_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_noexcept_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_nullptr_highlighting = none
+resharper_cpp_clang_tidy_hicpp_use_override_highlighting = none
+resharper_cpp_clang_tidy_hicpp_vararg_highlighting = none
+resharper_cpp_clang_tidy_highlighting_highlighting = suggestion
+resharper_cpp_clang_tidy_linuxkernel_must_check_errs_highlighting = warning
+resharper_cpp_clang_tidy_llvmlibc_callee_namespace_highlighting = none
+resharper_cpp_clang_tidy_llvmlibc_implementation_in_namespace_highlighting = none
+resharper_cpp_clang_tidy_llvmlibc_inline_function_decl_highlighting = none
+resharper_cpp_clang_tidy_llvmlibc_restrict_system_libc_headers_highlighting = none
+resharper_cpp_clang_tidy_llvm_else_after_return_highlighting = none
+resharper_cpp_clang_tidy_llvm_header_guard_highlighting = none
+resharper_cpp_clang_tidy_llvm_include_order_highlighting = none
+resharper_cpp_clang_tidy_llvm_namespace_comment_highlighting = none
+resharper_cpp_clang_tidy_llvm_prefer_isa_or_dyn_cast_in_conditionals_highlighting = none
+resharper_cpp_clang_tidy_llvm_prefer_register_over_unsigned_highlighting = suggestion
+resharper_cpp_clang_tidy_llvm_prefer_static_over_anonymous_namespace_highlighting = none
+resharper_cpp_clang_tidy_llvm_qualified_auto_highlighting = none
+resharper_cpp_clang_tidy_llvm_twine_local_highlighting = none
+resharper_cpp_clang_tidy_misc_confusable_identifiers_highlighting = warning
+resharper_cpp_clang_tidy_misc_const_correctness_highlighting = none
+resharper_cpp_clang_tidy_misc_coroutine_hostile_raii_highlighting = warning
+resharper_cpp_clang_tidy_misc_definitions_in_headers_highlighting = none
+resharper_cpp_clang_tidy_misc_header_include_cycle_highlighting = warning
+resharper_cpp_clang_tidy_misc_include_cleaner_highlighting = none
+resharper_cpp_clang_tidy_misc_misleading_bidirectional_highlighting = warning
+resharper_cpp_clang_tidy_misc_misleading_identifier_highlighting = warning
+resharper_cpp_clang_tidy_misc_misplaced_const_highlighting = none
+resharper_cpp_clang_tidy_misc_new_delete_overloads_highlighting = warning
+resharper_cpp_clang_tidy_misc_non_copyable_objects_highlighting = warning
+resharper_cpp_clang_tidy_misc_non_private_member_variables_in_classes_highlighting = none
+resharper_cpp_clang_tidy_misc_no_recursion_highlighting = none
+resharper_cpp_clang_tidy_misc_redundant_expression_highlighting = warning
+resharper_cpp_clang_tidy_misc_static_assert_highlighting = suggestion
+resharper_cpp_clang_tidy_misc_throw_by_value_catch_by_reference_highlighting = warning
+resharper_cpp_clang_tidy_misc_unconventional_assign_operator_highlighting = warning
+resharper_cpp_clang_tidy_misc_uniqueptr_reset_release_highlighting = suggestion
+resharper_cpp_clang_tidy_misc_unused_alias_decls_highlighting = suggestion
+resharper_cpp_clang_tidy_misc_unused_parameters_highlighting = none
+resharper_cpp_clang_tidy_misc_unused_using_decls_highlighting = suggestion
+resharper_cpp_clang_tidy_misc_use_anonymous_namespace_highlighting = suggestion
+resharper_cpp_clang_tidy_misc_use_internal_linkage_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_avoid_bind_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_avoid_c_arrays_highlighting = none
+resharper_cpp_clang_tidy_modernize_concat_nested_namespaces_highlighting = none
+resharper_cpp_clang_tidy_modernize_deprecated_headers_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_deprecated_ios_base_aliases_highlighting = warning
+resharper_cpp_clang_tidy_modernize_loop_convert_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_macro_to_enum_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_make_shared_highlighting = none
+resharper_cpp_clang_tidy_modernize_make_unique_highlighting = none
+resharper_cpp_clang_tidy_modernize_min_max_use_initializer_list_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_pass_by_value_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_raw_string_literal_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_redundant_void_arg_highlighting = none
+resharper_cpp_clang_tidy_modernize_replace_auto_ptr_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_replace_disallow_copy_and_assign_macro_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_replace_random_shuffle_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_return_braced_init_list_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_shrink_to_fit_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_type_traits_highlighting = none
+resharper_cpp_clang_tidy_modernize_unary_static_assert_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_auto_highlighting = none
+resharper_cpp_clang_tidy_modernize_use_bool_literals_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_constraints_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_default_member_init_highlighting = none
+resharper_cpp_clang_tidy_modernize_use_designated_initializers_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_emplace_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_equals_default_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_equals_delete_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_integer_sign_comparison_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_nodiscard_highlighting = hint
+resharper_cpp_clang_tidy_modernize_use_noexcept_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_nullptr_highlighting = none
+resharper_cpp_clang_tidy_modernize_use_override_highlighting = none
+resharper_cpp_clang_tidy_modernize_use_ranges_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_scoped_lock_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_starts_ends_with_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_std_format_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_std_numbers_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_std_print_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_trailing_return_type_highlighting = none
+resharper_cpp_clang_tidy_modernize_use_transparent_functors_highlighting = suggestion
+resharper_cpp_clang_tidy_modernize_use_uncaught_exceptions_highlighting = warning
+resharper_cpp_clang_tidy_modernize_use_using_highlighting = none
+resharper_cpp_clang_tidy_mpi_buffer_deref_highlighting = warning
+resharper_cpp_clang_tidy_mpi_type_mismatch_highlighting = warning
+resharper_cpp_clang_tidy_objc_assert_equals_highlighting = warning
+resharper_cpp_clang_tidy_objc_avoid_nserror_init_highlighting = warning
+resharper_cpp_clang_tidy_objc_dealloc_in_category_highlighting = warning
+resharper_cpp_clang_tidy_objc_forbidden_subclassing_highlighting = warning
+resharper_cpp_clang_tidy_objc_missing_hash_highlighting = warning
+resharper_cpp_clang_tidy_objc_nsdate_formatter_highlighting = none
+resharper_cpp_clang_tidy_objc_nsinvocation_argument_lifetime_highlighting = warning
+resharper_cpp_clang_tidy_objc_property_declaration_highlighting = warning
+resharper_cpp_clang_tidy_objc_super_self_highlighting = warning
+resharper_cpp_clang_tidy_openmp_exception_escape_highlighting = warning
+resharper_cpp_clang_tidy_openmp_use_default_none_highlighting = warning
+resharper_cpp_clang_tidy_performance_avoid_endl_highlighting = warning
+resharper_cpp_clang_tidy_performance_enum_size_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_faster_string_find_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_for_range_copy_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_implicit_conversion_in_loop_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_inefficient_algorithm_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_inefficient_string_concatenation_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_inefficient_vector_operation_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_move_constructor_init_highlighting = warning
+resharper_cpp_clang_tidy_performance_move_const_arg_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_noexcept_destructor_highlighting = warning
+resharper_cpp_clang_tidy_performance_noexcept_move_constructor_highlighting = warning
+resharper_cpp_clang_tidy_performance_noexcept_swap_highlighting = warning
+resharper_cpp_clang_tidy_performance_no_automatic_move_highlighting = warning
+resharper_cpp_clang_tidy_performance_no_int_to_ptr_highlighting = warning
+resharper_cpp_clang_tidy_performance_trivially_destructible_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_type_promotion_in_math_fn_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_unnecessary_copy_initialization_highlighting = suggestion
+resharper_cpp_clang_tidy_performance_unnecessary_value_param_highlighting = suggestion
+resharper_cpp_clang_tidy_portability_avoid_pragma_once_highlighting = none
+resharper_cpp_clang_tidy_portability_restrict_system_includes_highlighting = none
+resharper_cpp_clang_tidy_portability_simd_intrinsics_highlighting = none
+resharper_cpp_clang_tidy_portability_std_allocator_const_highlighting = warning
+resharper_cpp_clang_tidy_portability_template_virtual_member_function_highlighting = warning
+resharper_cpp_clang_tidy_readability_ambiguous_smartptr_reset_call_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_avoid_const_params_in_decls_highlighting = none
+resharper_cpp_clang_tidy_readability_avoid_nested_conditional_operator_highlighting = none
+resharper_cpp_clang_tidy_readability_avoid_return_with_void_value_highlighting = none
+resharper_cpp_clang_tidy_readability_avoid_unconditional_preprocessor_if_highlighting = warning
+resharper_cpp_clang_tidy_readability_braces_around_statements_highlighting = none
+resharper_cpp_clang_tidy_readability_const_return_type_highlighting = none
+resharper_cpp_clang_tidy_readability_container_contains_highlighting = none
+resharper_cpp_clang_tidy_readability_container_data_pointer_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_container_size_empty_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_convert_member_functions_to_static_highlighting = none
+resharper_cpp_clang_tidy_readability_delete_null_pointer_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_duplicate_include_highlighting = none
+resharper_cpp_clang_tidy_readability_else_after_return_highlighting = none
+resharper_cpp_clang_tidy_readability_enum_initial_value_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_function_cognitive_complexity_highlighting = none
+resharper_cpp_clang_tidy_readability_function_size_highlighting = none
+resharper_cpp_clang_tidy_readability_identifier_length_highlighting = none
+resharper_cpp_clang_tidy_readability_identifier_naming_highlighting = none
+resharper_cpp_clang_tidy_readability_implicit_bool_conversion_highlighting = none
+resharper_cpp_clang_tidy_readability_inconsistent_declaration_parameter_name_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_isolate_declaration_highlighting = none
+resharper_cpp_clang_tidy_readability_magic_numbers_highlighting = none
+resharper_cpp_clang_tidy_readability_make_member_function_const_highlighting = none
+resharper_cpp_clang_tidy_readability_math_missing_parentheses_highlighting = none
+resharper_cpp_clang_tidy_readability_misleading_indentation_highlighting = none
+resharper_cpp_clang_tidy_readability_misplaced_array_index_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_named_parameter_highlighting = none
+resharper_cpp_clang_tidy_readability_non_const_parameter_highlighting = none
+resharper_cpp_clang_tidy_readability_operators_representation_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_qualified_auto_highlighting = none
+resharper_cpp_clang_tidy_readability_redundant_access_specifiers_highlighting = none
+resharper_cpp_clang_tidy_readability_redundant_casting_highlighting = none
+resharper_cpp_clang_tidy_readability_redundant_control_flow_highlighting = none
+resharper_cpp_clang_tidy_readability_redundant_declaration_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_redundant_function_ptr_dereference_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_redundant_inline_specifier_highlighting = none
+resharper_cpp_clang_tidy_readability_redundant_member_init_highlighting = none
+resharper_cpp_clang_tidy_readability_redundant_preprocessor_highlighting = warning
+resharper_cpp_clang_tidy_readability_redundant_smartptr_get_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_redundant_string_cstr_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_redundant_string_init_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_reference_to_constructed_temporary_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_simplify_boolean_expr_highlighting = none
+resharper_cpp_clang_tidy_readability_simplify_subscript_expr_highlighting = warning
+resharper_cpp_clang_tidy_readability_static_accessed_through_instance_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_static_definition_in_anonymous_namespace_highlighting = none
+resharper_cpp_clang_tidy_readability_string_compare_highlighting = warning
+resharper_cpp_clang_tidy_readability_suspicious_call_argument_highlighting = warning
+resharper_cpp_clang_tidy_readability_uniqueptr_delete_release_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_uppercase_literal_suffix_highlighting = none
+resharper_cpp_clang_tidy_readability_use_anyofallof_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_use_concise_preprocessor_directives_highlighting = suggestion
+resharper_cpp_clang_tidy_readability_use_std_min_max_highlighting = suggestion
+resharper_cpp_clang_tidy_zircon_temporary_objects_highlighting = none
+resharper_cpp_class_can_be_final_highlighting = none
+resharper_cpp_class_is_incomplete_highlighting = warning
+resharper_cpp_class_needs_constructor_because_of_uninitialized_member_highlighting = warning
+resharper_cpp_class_never_used_highlighting = warning
+resharper_cpp_compile_time_constant_can_be_replaced_with_boolean_constant_highlighting = suggestion
+resharper_cpp_concept_never_used_highlighting = warning
+resharper_cpp_conditional_expression_can_be_simplified_highlighting = suggestion
+resharper_cpp_const_parameter_in_declaration_highlighting = suggestion
+resharper_cpp_const_value_function_return_type_highlighting = suggestion
+resharper_cpp_coroutine_call_resolve_error_highlighting = warning
+resharper_cpp_cv_qualifier_can_not_be_applied_to_reference_highlighting = warning
+resharper_cpp_c_style_cast_highlighting = suggestion
+resharper_cpp_declaration_hides_local_highlighting = warning
+resharper_cpp_declaration_hides_uncaptured_local_highlighting = hint
+resharper_cpp_declaration_specifier_without_declarators_highlighting = warning
+resharper_cpp_declarator_disambiguated_as_function_highlighting = warning
+resharper_cpp_declarator_never_used_highlighting = warning
+resharper_cpp_declarator_used_before_initialization_highlighting = error
+resharper_cpp_defaulted_special_member_function_is_implicitly_deleted_highlighting = warning
+resharper_cpp_default_case_not_handled_in_switch_statement_highlighting = warning
+resharper_cpp_default_initialization_with_no_user_constructor_highlighting = warning
+resharper_cpp_default_is_used_as_identifier_highlighting = warning
+resharper_cpp_definitions_order_highlighting = hint
+resharper_cpp_deleting_void_pointer_highlighting = warning
+resharper_cpp_dependent_template_without_template_keyword_highlighting = warning
+resharper_cpp_dependent_type_without_typename_keyword_highlighting = warning
+resharper_cpp_deprecated_entity_highlighting = warning
+resharper_cpp_deprecated_overriden_method_highlighting = warning
+resharper_cpp_deprecated_register_storage_class_specifier_highlighting = warning
+resharper_cpp_dereference_operator_limit_exceeded_highlighting = warning
+resharper_cpp_discarded_postfix_operator_result_highlighting = suggestion
+resharper_cpp_doxygen_syntax_error_highlighting = warning
+resharper_cpp_doxygen_undocumented_parameter_highlighting = suggestion
+resharper_cpp_doxygen_unresolved_reference_highlighting = warning
+resharper_cpp_empty_declaration_highlighting = warning
+resharper_cpp_enforce_cv_qualifiers_order_highlighting = none
+resharper_cpp_enforce_cv_qualifiers_placement_highlighting = none
+resharper_cpp_enforce_do_statement_braces_highlighting = none
+resharper_cpp_enforce_for_statement_braces_highlighting = none
+resharper_cpp_enforce_function_declaration_style_highlighting = none
+resharper_cpp_enforce_if_statement_braces_highlighting = none
+resharper_cpp_enforce_nested_namespaces_style_highlighting = hint
+resharper_cpp_enforce_overriding_destructor_style_highlighting = suggestion
+resharper_cpp_enforce_overriding_function_style_highlighting = suggestion
+resharper_cpp_enforce_type_alias_code_style_highlighting = none
+resharper_cpp_enforce_while_statement_braces_highlighting = none
+resharper_cpp_entity_assigned_but_no_read_highlighting = warning
+resharper_cpp_entity_used_only_in_unevaluated_context_highlighting = warning
+resharper_cpp_enumerator_never_used_highlighting = warning
+resharper_cpp_equal_operands_in_binary_expression_highlighting = warning
+resharper_cpp_evaluation_failure_highlighting = error
+resharper_cpp_evaluation_internal_failure_highlighting = warning
+resharper_cpp_explicit_specialization_in_non_namespace_scope_highlighting = warning
+resharper_cpp_expression_without_side_effects_highlighting = warning
+resharper_cpp_final_function_in_final_class_highlighting = suggestion
+resharper_cpp_final_non_overriding_virtual_function_highlighting = suggestion
+resharper_cpp_forward_enum_declaration_without_underlying_type_highlighting = warning
+resharper_cpp_for_loop_can_be_replaced_with_while_highlighting = suggestion
+resharper_cpp_functional_style_cast_highlighting = suggestion
+resharper_cpp_function_doesnt_return_value_highlighting = warning
+resharper_cpp_function_is_not_implemented_highlighting = warning
+resharper_cpp_function_result_should_be_used_highlighting = hint
+resharper_cpp_header_has_been_already_included_highlighting = hint
+resharper_cpp_hidden_function_highlighting = warning
+resharper_cpp_hiding_function_highlighting = warning
+resharper_cpp_identical_operands_in_binary_expression_highlighting = warning
+resharper_cpp_if_can_be_replaced_by_constexpr_if_highlighting = suggestion
+resharper_cpp_implicit_default_constructor_not_available_highlighting = warning
+resharper_cpp_incompatible_pointer_conversion_highlighting = warning
+resharper_cpp_incomplete_switch_statement_highlighting = warning
+resharper_cpp_inconsistent_naming_highlighting = hint
+resharper_cpp_incorrect_blank_lines_near_braces_highlighting = none
+resharper_cpp_initialized_value_is_always_rewritten_highlighting = warning
+resharper_cpp_integral_to_pointer_conversion_highlighting = warning
+resharper_cpp_invalid_line_continuation_highlighting = warning
+resharper_cpp_join_declaration_and_assignment_highlighting = suggestion
+resharper_cpp_lambda_capture_never_used_highlighting = warning
+resharper_cpp_local_variable_may_be_const_highlighting = hint
+resharper_cpp_local_variable_might_not_be_initialized_highlighting = warning
+resharper_cpp_local_variable_with_non_trivial_dtor_is_never_used_highlighting = none
+resharper_cpp_long_float_highlighting = warning
+resharper_cpp_member_function_may_be_const_highlighting = suggestion
+resharper_cpp_member_function_may_be_static_highlighting = suggestion
+resharper_cpp_member_initializers_order_highlighting = suggestion
+resharper_cpp_mismatched_class_tags_highlighting = warning
+resharper_cpp_missing_blank_lines_highlighting = none
+resharper_cpp_missing_include_guard_highlighting = warning
+resharper_cpp_missing_indent_highlighting = none
+resharper_cpp_missing_keyword_throw_highlighting = warning
+resharper_cpp_missing_linebreak_highlighting = none
+resharper_cpp_missing_space_highlighting = none
+resharper_cpp_module_partition_with_several_partition_units_highlighting = warning
+resharper_cpp_ms_ext_address_of_class_r_value_highlighting = warning
+resharper_cpp_ms_ext_binding_r_value_to_lvalue_reference_highlighting = warning
+resharper_cpp_ms_ext_copy_elision_in_copy_init_declarator_highlighting = warning
+resharper_cpp_ms_ext_double_user_conversion_in_copy_init_highlighting = warning
+resharper_cpp_ms_ext_not_initialized_static_const_local_var_highlighting = warning
+resharper_cpp_ms_ext_reinterpret_cast_from_nullptr_highlighting = warning
+resharper_cpp_multiple_spaces_highlighting = none
+resharper_cpp_multi_character_literal_highlighting = warning
+resharper_cpp_multi_character_wide_literal_highlighting = warning
+resharper_cpp_must_be_public_virtual_to_implement_interface_highlighting = warning
+resharper_cpp_mutable_specifier_on_reference_member_highlighting = warning
+resharper_cpp_nodiscard_function_without_return_value_highlighting = warning
+resharper_cpp_non_exception_safe_resource_acquisition_highlighting = hint
+resharper_cpp_non_explicit_conversion_operator_highlighting = hint
+resharper_cpp_non_explicit_converting_constructor_highlighting = hint
+resharper_cpp_non_inline_function_definition_in_header_file_highlighting = warning
+resharper_cpp_non_inline_variable_definition_in_header_file_highlighting = warning
+resharper_cpp_not_all_paths_return_value_highlighting = warning
+resharper_cpp_no_discard_expression_highlighting = warning
+resharper_cpp_object_member_might_not_be_initialized_highlighting = warning
+resharper_cpp_outdent_is_off_prev_level_highlighting = none
+resharper_cpp_out_parameter_must_be_written_highlighting = warning
+resharper_cpp_parameter_may_be_const_highlighting = hint
+resharper_cpp_parameter_may_be_const_ptr_or_ref_highlighting = suggestion
+resharper_cpp_parameter_names_mismatch_highlighting = hint
+resharper_cpp_parameter_never_used_highlighting = hint
+resharper_cpp_parameter_value_is_reassigned_highlighting = warning
+resharper_cpp_pass_value_parameter_by_const_reference_highlighting = suggestion
+resharper_cpp_pointer_conversion_drops_qualifiers_highlighting = warning
+resharper_cpp_pointer_to_integral_conversion_highlighting = warning
+resharper_cpp_polymorphic_class_with_non_virtual_public_destructor_highlighting = warning
+resharper_cpp_possibly_erroneous_empty_statements_highlighting = warning
+resharper_cpp_possibly_uninitialized_member_highlighting = warning
+resharper_cpp_possibly_unintended_object_slicing_highlighting = warning
+resharper_cpp_precompiled_header_is_not_included_highlighting = error
+resharper_cpp_precompiled_header_not_found_highlighting = error
+resharper_cpp_printf_bad_format_highlighting = warning
+resharper_cpp_printf_extra_arg_highlighting = warning
+resharper_cpp_printf_missed_arg_highlighting = error
+resharper_cpp_printf_risky_format_highlighting = warning
+resharper_cpp_private_special_member_function_is_not_implemented_highlighting = warning
+resharper_cpp_range_based_for_incompatible_reference_highlighting = warning
+resharper_cpp_redefinition_of_default_argument_in_override_function_highlighting = warning
+resharper_cpp_redundant_access_specifier_highlighting = hint
+resharper_cpp_redundant_base_class_access_specifier_highlighting = hint
+resharper_cpp_redundant_base_class_initializer_highlighting = suggestion
+resharper_cpp_redundant_blank_lines_highlighting = none
+resharper_cpp_redundant_boolean_expression_argument_highlighting = warning
+resharper_cpp_redundant_cast_expression_highlighting = hint
+resharper_cpp_redundant_complexity_in_comparison_highlighting = suggestion
+resharper_cpp_redundant_conditional_expression_highlighting = suggestion
+resharper_cpp_redundant_const_specifier_highlighting = hint
+resharper_cpp_redundant_control_flow_jump_highlighting = hint
+resharper_cpp_redundant_dereferencing_and_taking_address_highlighting = suggestion
+resharper_cpp_redundant_elaborated_type_specifier_highlighting = hint
+resharper_cpp_redundant_else_keyword_highlighting = hint
+resharper_cpp_redundant_else_keyword_inside_compound_statement_highlighting = hint
+resharper_cpp_redundant_empty_declaration_highlighting = hint
+resharper_cpp_redundant_empty_statement_highlighting = hint
+resharper_cpp_redundant_export_keyword_highlighting = warning
+resharper_cpp_redundant_fwd_class_or_enum_specifier_highlighting = suggestion
+resharper_cpp_redundant_inline_specifier_highlighting = hint
+resharper_cpp_redundant_lambda_parameter_list_highlighting = hint
+resharper_cpp_redundant_linebreak_highlighting = none
+resharper_cpp_redundant_member_initializer_highlighting = suggestion
+resharper_cpp_redundant_namespace_definition_highlighting = suggestion
+resharper_cpp_redundant_parentheses_highlighting = hint
+resharper_cpp_redundant_qualifier_adl_highlighting = none
+resharper_cpp_redundant_qualifier_highlighting = hint
+resharper_cpp_redundant_space_highlighting = none
+resharper_cpp_redundant_static_specifier_on_member_allocation_function_highlighting = hint
+resharper_cpp_redundant_static_specifier_on_thread_local_local_variable_highlighting = hint
+resharper_cpp_redundant_template_arguments_highlighting = hint
+resharper_cpp_redundant_template_keyword_highlighting = warning
+resharper_cpp_redundant_typename_keyword_highlighting = warning
+resharper_cpp_redundant_void_argument_list_highlighting = suggestion
+resharper_cpp_redundant_zero_initializer_in_aggregate_initialization_highlighting = suggestion
+resharper_cpp_reinterpret_cast_from_void_ptr_highlighting = suggestion
+resharper_cpp_remove_redundant_braces_highlighting = none
+resharper_cpp_replace_memset_with_zero_initialization_highlighting = suggestion
+resharper_cpp_replace_tie_with_structured_binding_highlighting = suggestion
+resharper_cpp_return_no_value_in_non_void_function_highlighting = warning
+resharper_cpp_smart_pointer_vs_make_function_highlighting = suggestion
+resharper_cpp_some_object_members_might_not_be_initialized_highlighting = warning
+resharper_cpp_special_function_without_noexcept_specification_highlighting = warning
+resharper_cpp_static_assert_failure_highlighting = error
+resharper_cpp_static_data_member_in_unnamed_struct_highlighting = warning
+resharper_cpp_static_specifier_on_anonymous_namespace_member_highlighting = suggestion
+resharper_cpp_string_literal_to_char_pointer_conversion_highlighting = warning
+resharper_cpp_tabs_and_spaces_mismatch_highlighting = none
+resharper_cpp_tabs_are_disallowed_highlighting = none
+resharper_cpp_tabs_outside_indent_highlighting = none
+resharper_cpp_template_arguments_can_be_deduced_highlighting = hint
+resharper_cpp_template_parameter_never_used_highlighting = hint
+resharper_cpp_template_parameter_shadowing_highlighting = warning
+resharper_cpp_this_arg_member_func_delegate_ctor_is_unsuported_by_dot_net_core_highlighting = none
+resharper_cpp_throw_expression_can_be_replaced_with_rethrow_highlighting = warning
+resharper_cpp_too_wide_scope_highlighting = suggestion
+resharper_cpp_too_wide_scope_init_statement_highlighting = hint
+resharper_cpp_type_alias_never_used_highlighting = warning
+resharper_cpp_ue4_blueprint_callable_function_may_be_const_highlighting = hint
+resharper_cpp_ue4_blueprint_callable_function_may_be_static_highlighting = hint
+resharper_cpp_ue4_coding_standard_naming_violation_warning_highlighting = hint
+resharper_cpp_ue4_coding_standard_u_class_naming_violation_error_highlighting = error
+resharper_cpp_ue4_probable_memory_issues_with_u_objects_in_container_highlighting = warning
+resharper_cpp_ue4_probable_memory_issues_with_u_object_highlighting = warning
+resharper_cpp_ue_blueprint_callable_function_unused_highlighting = warning
+resharper_cpp_ue_blueprint_implementable_event_not_implemented_highlighting = warning
+resharper_cpp_ue_incorrect_engine_directory_highlighting = error
+resharper_cpp_ue_missing_struct_member_highlighting = error
+resharper_cpp_ue_missing_super_call_highlighting = warning
+resharper_cpp_ue_non_existent_input_action_highlighting = warning
+resharper_cpp_ue_non_existent_input_axis_highlighting = warning
+resharper_cpp_ue_source_file_without_predefined_macros_highlighting = warning
+resharper_cpp_ue_source_file_without_standard_library_highlighting = error
+resharper_cpp_ue_version_file_doesnt_exist_highlighting = error
+resharper_cpp_uninitialized_dependent_base_class_highlighting = warning
+resharper_cpp_uninitialized_non_static_data_member_highlighting = warning
+resharper_cpp_union_member_of_reference_type_highlighting = warning
+resharper_cpp_unmatched_pragma_end_region_directive_highlighting = warning
+resharper_cpp_unmatched_pragma_region_directive_highlighting = warning
+resharper_cpp_unnamed_namespace_in_header_file_highlighting = warning
+resharper_cpp_unnecessary_whitespace_highlighting = none
+resharper_cpp_unreachable_code_highlighting = warning
+resharper_cpp_unsigned_zero_comparison_highlighting = warning
+resharper_cpp_unused_include_directive_highlighting = warning
+resharper_cpp_user_defined_literal_suffix_does_not_start_with_underscore_highlighting = warning
+resharper_cpp_use_algorithm_with_count_highlighting = suggestion
+resharper_cpp_use_associative_contains_highlighting = suggestion
+resharper_cpp_use_auto_for_numeric_highlighting = hint
+resharper_cpp_use_auto_highlighting = hint
+resharper_cpp_use_elements_view_highlighting = suggestion
+resharper_cpp_use_erase_algorithm_highlighting = suggestion
+resharper_cpp_use_familiar_template_syntax_for_generic_lambdas_highlighting = suggestion
+resharper_cpp_use_of_undeclared_class_highlighting = hint
+resharper_cpp_use_range_algorithm_highlighting = suggestion
+resharper_cpp_use_std_size_highlighting = suggestion
+resharper_cpp_use_structured_binding_highlighting = hint
+resharper_cpp_use_type_trait_alias_highlighting = suggestion
+resharper_cpp_using_result_of_assignment_as_condition_highlighting = warning
+resharper_cpp_u_function_macro_call_has_no_effect_highlighting = warning
+resharper_cpp_u_property_macro_call_has_no_effect_highlighting = warning
+resharper_cpp_variable_can_be_made_constexpr_highlighting = suggestion
+resharper_cpp_virtual_function_call_inside_ctor_highlighting = warning
+resharper_cpp_virtual_function_in_final_class_highlighting = warning
+resharper_cpp_volatile_parameter_in_declaration_highlighting = suggestion
+resharper_cpp_warning_directive_highlighting = warning
+resharper_cpp_wrong_includes_order_highlighting = hint
+resharper_cpp_wrong_indent_size_highlighting = none
+resharper_cpp_wrong_slashes_in_include_directive_highlighting = hint
+resharper_cpp_zero_constant_can_be_replaced_with_nullptr_highlighting = suggestion
+resharper_cpp_zero_valued_expression_used_as_null_pointer_highlighting = warning
+resharper_cqrs_debug_highlighting = warning
+resharper_cqrs_naming_recommendation_highlighting = warning
+resharper_c_declaration_with_implicit_int_type_highlighting = warning
+resharper_c_sharp14_overload_resolution_with_span_breaking_change_highlighting = suggestion
+resharper_c_sharp_build_cs_invalid_module_name_highlighting = warning
+resharper_c_sharp_missing_plugin_dependency_highlighting = warning
+resharper_default_struct_equality_is_used_global_highlighting = warning
+resharper_default_struct_equality_is_used_local_highlighting = warning
+resharper_default_value_attribute_for_optional_parameter_highlighting = warning
+resharper_dispose_on_using_variable_highlighting = warning
+resharper_double_negation_in_pattern_highlighting = suggestion
+resharper_double_negation_operator_highlighting = suggestion
+resharper_duplicated_chained_if_bodies_highlighting = hint
+resharper_duplicated_sequential_if_bodies_highlighting = hint
+resharper_duplicated_statements_highlighting = warning
+resharper_duplicated_switch_expression_arms_highlighting = hint
+resharper_duplicated_switch_section_bodies_highlighting = hint
+resharper_duplicate_item_in_logger_template_highlighting = warning
+resharper_duplicate_key_collection_initialization_highlighting = warning
+resharper_duplicate_resource_highlighting = warning
+resharper_empty_constructor_highlighting = warning
+resharper_empty_destructor_highlighting = warning
+resharper_empty_extension_block_highlighting = warning
+resharper_empty_for_statement_highlighting = warning
+resharper_empty_general_catch_clause_highlighting = warning
+resharper_empty_namespace_highlighting = warning
+resharper_empty_region_highlighting = suggestion
+resharper_empty_statement_highlighting = warning
+resharper_empty_title_tag_highlighting = hint
+resharper_entity_framework_client_side_db_function_call_highlighting = warning
+resharper_entity_framework_model_validation_circular_dependency_highlighting = hint
+resharper_entity_framework_model_validation_unlimited_string_length_highlighting = warning
+resharper_entity_framework_n_plus_one_incomplete_data_query_highlighting = suggestion
+resharper_entity_framework_n_plus_one_incomplete_data_usage_highlighting = warning
+resharper_entity_framework_n_plus_one_query_highlighting = suggestion
+resharper_entity_framework_n_plus_one_usage_highlighting = warning
+resharper_entity_framework_unsupported_server_side_function_call_highlighting = warning
+resharper_entity_name_captured_only_global_highlighting = warning
+resharper_entity_name_captured_only_local_highlighting = warning
+resharper_enumerable_sum_in_explicit_unchecked_context_highlighting = warning
+resharper_enum_underlying_type_is_int_highlighting = warning
+resharper_equal_expression_comparison_highlighting = warning
+resharper_escaped_keyword_highlighting = warning
+resharper_event_never_invoked_global_highlighting = suggestion
+resharper_event_never_subscribed_to_global_highlighting = suggestion
+resharper_event_never_subscribed_to_local_highlighting = suggestion
+resharper_event_unsubscription_via_anonymous_delegate_highlighting = warning
+resharper_explicit_caller_info_argument_highlighting = warning
+resharper_expression_is_always_null_highlighting = warning
+resharper_extract_common_branching_code_highlighting = hint
+resharper_extract_common_property_pattern_highlighting = hint
+resharper_field_can_be_made_read_only_global_highlighting = suggestion
+resharper_field_can_be_made_read_only_local_highlighting = suggestion
+resharper_field_hides_interface_property_with_default_implementation_highlighting = warning
+resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting = hint
+resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting = hint
+resharper_format_specifier_captures_right_braces_highlighting = warning
+resharper_format_string_placeholders_mismatch_highlighting = warning
+resharper_format_string_problem_highlighting = warning
+resharper_for_can_be_converted_to_foreach_highlighting = suggestion
+resharper_for_statement_condition_is_true_highlighting = warning
+resharper_function_complexity_overflow_highlighting = none
+resharper_function_never_returns_highlighting = warning
+resharper_function_recursive_on_all_paths_highlighting = warning
+resharper_f_sharp_builtin_function_reimplementation_highlighting = hint
+resharper_f_sharp_cons_with_empty_list_pat_highlighting = suggestion
+resharper_f_sharp_dot_lambda_can_be_used_highlighting = hint
+resharper_f_sharp_expression_can_be_replaced_with_condition_highlighting = hint
+resharper_f_sharp_interpolated_string_highlighting = suggestion
+resharper_f_sharp_lambda_can_be_replaced_with_inner_expression_highlighting = hint
+resharper_f_sharp_lambda_can_be_simplified_highlighting = hint
+resharper_f_sharp_redundant_application_highlighting = warning
+resharper_f_sharp_redundant_as_pattern_highlighting = warning
+resharper_f_sharp_redundant_attribute_parens_highlighting = warning
+resharper_f_sharp_redundant_attribute_suffix_highlighting = warning
+resharper_f_sharp_redundant_backticks_highlighting = warning
+resharper_f_sharp_redundant_dot_in_indexer_highlighting = warning
+resharper_f_sharp_redundant_name_qualifier_highlighting = warning
+resharper_f_sharp_redundant_new_highlighting = warning
+resharper_f_sharp_redundant_open_highlighting = warning
+resharper_f_sharp_redundant_parens_highlighting = warning
+resharper_f_sharp_redundant_require_qualified_access_attribute_highlighting = warning
+resharper_f_sharp_redundant_string_interpolation_highlighting = suggestion
+resharper_f_sharp_redundant_union_case_field_patterns_highlighting = warning
+resharper_f_sharp_use_wild_self_id_highlighting = suggestion
+resharper_gc_suppress_finalize_for_type_without_destructor_highlighting = warning
+resharper_generic_enumerator_not_disposed_highlighting = warning
+resharper_godot_missing_parameterless_constructor_highlighting = warning
+resharper_heuristic_unreachable_code_highlighting = warning
+resharper_html_attributes_quotes_highlighting = hint
+resharper_html_attribute_not_resolved_highlighting = warning
+resharper_html_attribute_value_not_resolved_highlighting = warning
+resharper_html_dead_code_highlighting = warning
+resharper_html_event_not_resolved_highlighting = warning
+resharper_html_id_duplication_highlighting = warning
+resharper_html_id_not_resolved_highlighting = warning
+resharper_html_obsolete_highlighting = warning
+resharper_html_path_error_highlighting = warning
+resharper_html_tag_not_closed_highlighting = error
+resharper_html_tag_not_resolved_highlighting = warning
+resharper_html_tag_should_be_self_closed_highlighting = warning
+resharper_html_tag_should_not_be_self_closed_highlighting = warning
+resharper_html_warning_highlighting = warning
+resharper_if_std_is_constant_evaluated_can_be_replaced_highlighting = suggestion
+resharper_ignored_directive_highlighting = warning
+resharper_inactive_preprocessor_branch_highlighting = warning
+resharper_inconsistently_synchronized_field_highlighting = warning
+resharper_inconsistent_naming_highlighting = warning
+resharper_inconsistent_order_of_locks_highlighting = warning
+resharper_incorrect_blank_lines_near_braces_highlighting = none
+resharper_incorrect_constant_expected_annotation_highlighting = error
+resharper_indexing_by_invalid_range_highlighting = warning
+resharper_inheritdoc_consider_usage_highlighting = none
+resharper_inheritdoc_invalid_usage_highlighting = warning
+resharper_inline_out_variable_declaration_highlighting = suggestion
+resharper_inline_temporary_variable_highlighting = hint
+resharper_internal_or_private_member_not_documented_highlighting = none
+resharper_interpolated_string_expression_is_not_i_formattable_highlighting = warning
+resharper_introduce_optional_parameters_global_highlighting = suggestion
+resharper_introduce_optional_parameters_local_highlighting = suggestion
+resharper_int_division_by_zero_highlighting = warning
+resharper_int_variable_overflow_highlighting = warning
+resharper_int_variable_overflow_in_checked_context_highlighting = warning
+resharper_int_variable_overflow_in_unchecked_context_highlighting = warning
+resharper_invalid_value_type_highlighting = warning
+resharper_invalid_xml_doc_comment_highlighting = warning
+resharper_invert_condition_1_highlighting = hint
+resharper_invert_if_highlighting = hint
+resharper_invocation_is_skipped_highlighting = hint
+resharper_invoke_as_extension_method_highlighting = suggestion
+resharper_in_parameter_with_must_dispose_resource_attribute_highlighting = warning
+resharper_is_expression_always_false_highlighting = warning
+resharper_is_expression_always_true_highlighting = warning
+resharper_iterator_method_result_is_ignored_highlighting = warning
+resharper_iterator_never_returns_highlighting = warning
+resharper_join_declaration_and_initializer_highlighting = suggestion
+resharper_join_null_check_with_usage_highlighting = suggestion
+resharper_lambda_expression_can_be_made_static_highlighting = none
+resharper_lambda_expression_must_be_static_highlighting = suggestion
+resharper_lambda_should_not_capture_context_highlighting = warning
+resharper_localizable_element_highlighting = warning
+resharper_local_function_can_be_made_static_highlighting = none
+resharper_local_function_hides_method_highlighting = warning
+resharper_local_variable_hides_member_highlighting = warning
+resharper_local_variable_hides_primary_constructor_parameter_highlighting = warning
+resharper_long_literal_ending_lower_l_highlighting = warning
+resharper_loop_can_be_converted_to_query_highlighting = hint
+resharper_loop_can_be_partly_converted_to_query_highlighting = none
+resharper_loop_variable_is_never_changed_inside_loop_highlighting = warning
+resharper_math_abs_method_is_redundant_highlighting = warning
+resharper_math_clamp_min_greater_than_max_highlighting = warning
+resharper_meaningless_default_parameter_value_highlighting = warning
+resharper_member_can_be_file_local_highlighting = none
+resharper_member_can_be_internal_highlighting = none
+resharper_member_can_be_made_static_global_highlighting = hint
+resharper_member_can_be_made_static_local_highlighting = hint
+resharper_member_can_be_private_global_highlighting = suggestion
+resharper_member_can_be_private_local_highlighting = suggestion
+resharper_member_can_be_protected_global_highlighting = suggestion
+resharper_member_can_be_protected_local_highlighting = suggestion
+resharper_member_hides_interface_member_with_default_implementation_highlighting = warning
+resharper_member_hides_static_from_outer_class_highlighting = warning
+resharper_member_initializer_value_ignored_highlighting = warning
+resharper_merge_and_pattern_highlighting = suggestion
+resharper_merge_cast_with_type_check_highlighting = suggestion
+resharper_merge_conditional_expression_highlighting = suggestion
+resharper_merge_into_logical_pattern_highlighting = hint
+resharper_merge_into_negated_pattern_highlighting = hint
+resharper_merge_into_pattern_highlighting = suggestion
+resharper_merge_nested_property_patterns_highlighting = suggestion
+resharper_merge_sequential_checks_highlighting = hint
+resharper_method_has_async_overload_highlighting = suggestion
+resharper_method_has_async_overload_with_cancellation_highlighting = suggestion
+resharper_method_overload_with_optional_parameter_highlighting = warning
+resharper_method_supports_cancellation_highlighting = suggestion
+resharper_misleading_body_like_statement_highlighting = warning
+resharper_mismatched_asmdef_filename_highlighting = suggestion
+resharper_missing_alt_attribute_in_img_tag_highlighting = hint
+resharper_missing_blank_lines_highlighting = none
+resharper_missing_body_tag_highlighting = warning
+resharper_missing_head_and_body_tags_highlighting = warning
+resharper_missing_head_tag_highlighting = warning
+resharper_missing_indent_highlighting = none
+resharper_missing_linebreak_highlighting = none
+resharper_missing_space_highlighting = none
+resharper_more_specific_foreach_variable_type_available_highlighting = suggestion
+resharper_move_local_function_after_jump_statement_highlighting = hint
+resharper_move_to_existing_positional_deconstruction_pattern_highlighting = hint
+resharper_move_to_extension_block_highlighting = hint
+resharper_move_variable_declaration_inside_loop_condition_highlighting = suggestion
+resharper_multiple_cqrs_entity_highlighting = warning
+resharper_multiple_nullable_attributes_usage_highlighting = warning
+resharper_multiple_order_by_highlighting = warning
+resharper_multiple_resolve_candidates_in_text_highlighting = warning
+resharper_multiple_spaces_highlighting = none
+resharper_multiple_statements_on_one_line_highlighting = none
+resharper_multiple_type_members_on_one_line_highlighting = none
+resharper_must_use_return_value_highlighting = warning
+resharper_mvc_action_not_resolved_highlighting = warning
+resharper_mvc_area_not_resolved_highlighting = warning
+resharper_mvc_controller_not_resolved_highlighting = warning
+resharper_mvc_invalid_model_type_highlighting = error
+resharper_mvc_masterpage_not_resolved_highlighting = warning
+resharper_mvc_partial_view_not_resolved_highlighting = warning
+resharper_mvc_template_not_resolved_highlighting = warning
+resharper_mvc_view_component_not_resolved_highlighting = warning
+resharper_mvc_view_component_view_not_resolved_highlighting = warning
+resharper_mvc_view_not_resolved_highlighting = warning
+resharper_negation_of_relational_pattern_highlighting = suggestion
+resharper_negative_equality_expression_highlighting = suggestion
+resharper_negative_index_highlighting = warning
+resharper_nested_record_update_can_be_simplified_highlighting = suggestion
+resharper_nested_string_interpolation_highlighting = suggestion
+resharper_non_atomic_compound_operator_highlighting = warning
+resharper_non_constant_equality_expression_has_constant_result_highlighting = warning
+resharper_non_parsable_element_highlighting = warning
+resharper_non_readonly_member_in_get_hash_code_highlighting = warning
+resharper_non_volatile_field_in_double_check_locking_highlighting = warning
+resharper_not_accessed_field_global_highlighting = suggestion
+resharper_not_accessed_field_local_highlighting = warning
+resharper_not_accessed_out_parameter_variable_highlighting = warning
+resharper_not_accessed_positional_property_global_highlighting = warning
+resharper_not_accessed_positional_property_local_highlighting = warning
+resharper_not_accessed_variable_highlighting = warning
+resharper_not_assigned_out_parameter_highlighting = warning
+resharper_not_declared_in_parent_culture_highlighting = warning
+resharper_not_disposed_resource_highlighting = warning
+resharper_not_disposed_resource_is_returned_by_property_highlighting = warning
+resharper_not_disposed_resource_is_returned_highlighting = suggestion
+resharper_not_null_or_required_member_is_not_initialized_highlighting = warning
+resharper_not_observable_annotation_redundancy_highlighting = warning
+resharper_not_overridden_in_specific_culture_highlighting = warning
+resharper_not_resolved_in_text_highlighting = warning
+resharper_no_support_for_vb_highlighting = warning
+resharper_nullable_warning_suppression_is_used_highlighting = none
+resharper_nullness_annotation_conflict_with_jet_brains_annotations_highlighting = warning
+resharper_null_coalescing_condition_is_always_not_null_according_to_api_contract_highlighting = warning
+resharper_n_unit_async_method_must_be_task_highlighting = warning
+resharper_n_unit_attribute_produces_too_many_tests_highlighting = none
+resharper_n_unit_auto_fixture_incorrect_argument_type_highlighting = warning
+resharper_n_unit_auto_fixture_missed_test_attribute_highlighting = warning
+resharper_n_unit_auto_fixture_missed_test_or_test_fixture_attribute_highlighting = warning
+resharper_n_unit_auto_fixture_redundant_argument_in_inline_auto_data_attribute_highlighting = warning
+resharper_n_unit_duplicate_values_highlighting = warning
+resharper_n_unit_ignored_parameter_attribute_highlighting = warning
+resharper_n_unit_implicit_unspecified_null_values_highlighting = warning
+resharper_n_unit_incorrect_argument_type_highlighting = warning
+resharper_n_unit_incorrect_expected_result_type_highlighting = warning
+resharper_n_unit_incorrect_range_bounds_highlighting = warning
+resharper_n_unit_method_with_parameters_and_test_attribute_highlighting = warning
+resharper_n_unit_missing_arguments_in_test_case_attribute_highlighting = warning
+resharper_n_unit_missing_cancel_after_attribute_highlighting = warning
+resharper_n_unit_non_public_method_with_test_attribute_highlighting = warning
+resharper_n_unit_no_values_provided_highlighting = warning
+resharper_n_unit_parameter_type_is_not_compatible_with_attribute_highlighting = warning
+resharper_n_unit_range_attribute_bounds_are_out_of_range_highlighting = warning
+resharper_n_unit_range_step_sign_mismatch_highlighting = warning
+resharper_n_unit_range_step_value_must_not_be_zero_highlighting = warning
+resharper_n_unit_range_to_value_is_not_reachable_highlighting = warning
+resharper_n_unit_redundant_argument_instead_of_expected_result_highlighting = warning
+resharper_n_unit_redundant_argument_in_test_case_attribute_highlighting = warning
+resharper_n_unit_redundant_expected_result_in_test_case_attribute_highlighting = warning
+resharper_n_unit_test_case_attribute_requires_expected_result_highlighting = warning
+resharper_n_unit_test_case_result_property_duplicates_expected_result_highlighting = warning
+resharper_n_unit_test_case_result_property_is_obsolete_highlighting = warning
+resharper_n_unit_test_case_source_must_be_field_property_method_highlighting = warning
+resharper_n_unit_test_case_source_must_be_static_highlighting = warning
+resharper_n_unit_test_case_source_should_implement_i_enumerable_highlighting = warning
+resharper_object_creation_as_statement_highlighting = warning
+resharper_obsolete_element_error_highlighting = error
+resharper_obsolete_element_highlighting = warning
+resharper_odin_odin_member_present_in_multiple_groups_highlighting = warning
+resharper_odin_odin_member_wrong_grouping_attribute_highlighting = warning
+resharper_odin_odin_unknown_grouping_path_highlighting = warning
+resharper_one_way_operation_contract_with_return_type_highlighting = warning
+resharper_operation_contract_without_service_contract_highlighting = warning
+resharper_operator_is_can_be_used_highlighting = warning
+resharper_operator_without_matched_checked_operator_highlighting = warning
+resharper_optional_parameter_hierarchy_mismatch_highlighting = warning
+resharper_optional_parameter_ref_out_highlighting = warning
+resharper_other_tags_inside_script1_highlighting = error
+resharper_other_tags_inside_script2_highlighting = error
+resharper_other_tags_inside_unclosed_script_highlighting = error
+resharper_outdent_is_off_prev_level_highlighting = none
+resharper_out_parameter_value_is_always_discarded_global_highlighting = suggestion
+resharper_out_parameter_value_is_always_discarded_local_highlighting = warning
+resharper_out_parameter_with_handles_resource_disposal_attribute_highlighting = warning
+resharper_overridden_with_empty_value_highlighting = warning
+resharper_overridden_with_same_value_highlighting = suggestion
+resharper_parameter_hides_member_highlighting = warning
+resharper_parameter_hides_primary_constructor_parameter_highlighting = warning
+resharper_parameter_only_used_for_precondition_check_global_highlighting = suggestion
+resharper_parameter_only_used_for_precondition_check_local_highlighting = warning
+resharper_parameter_type_can_be_enumerable_global_highlighting = none
+resharper_parameter_type_can_be_enumerable_local_highlighting = none
+resharper_partial_method_parameter_name_mismatch_highlighting = warning
+resharper_partial_method_with_single_part_highlighting = warning
+resharper_partial_type_with_single_part_highlighting = warning
+resharper_pass_string_interpolation_highlighting = hint
+resharper_pattern_always_matches_highlighting = warning
+resharper_pattern_is_always_true_or_false_highlighting = warning
+resharper_pattern_is_redundant_highlighting = warning
+resharper_pattern_never_matches_highlighting = warning
+resharper_place_assignment_expression_into_block_highlighting = none
+resharper_polymorphic_field_like_event_invocation_highlighting = warning
+resharper_possible_infinite_inheritance_highlighting = warning
+resharper_possible_intended_rethrow_highlighting = warning
+resharper_possible_interface_member_ambiguity_highlighting = warning
+resharper_possible_invalid_cast_exception_highlighting = warning
+resharper_possible_invalid_cast_exception_in_foreach_loop_highlighting = warning
+resharper_possible_invalid_operation_exception_collection_was_modified_highlighting = warning
+resharper_possible_invalid_operation_exception_highlighting = warning
+resharper_possible_loss_of_fraction_highlighting = warning
+resharper_possible_mistaken_call_to_get_type_highlighting = warning
+resharper_possible_mistaken_system_type_argument_highlighting = warning
+resharper_possible_multiple_enumeration_highlighting = warning
+resharper_possible_multiple_write_access_in_double_check_locking_highlighting = warning
+resharper_possible_null_reference_exception_highlighting = warning
+resharper_possible_struct_member_modification_of_non_variable_struct_highlighting = warning
+resharper_possible_unintended_linear_search_in_set_highlighting = warning
+resharper_possible_unintended_queryable_as_enumerable_highlighting = suggestion
+resharper_possible_unintended_reference_comparison_highlighting = warning
+resharper_possible_write_to_me_highlighting = warning
+resharper_possibly_impure_method_call_on_readonly_variable_highlighting = warning
+resharper_possibly_missing_indexer_initializer_comma_highlighting = warning
+resharper_possibly_mistaken_use_of_cancellation_token_highlighting = warning
+resharper_possibly_mistaken_use_of_interpolated_string_insert_highlighting = warning
+resharper_possibly_unintended_side_effects_inside_conditional_invocation_highlighting = warning
+resharper_possibly_unintended_usage_parameterless_get_expression_type_highlighting = error
+resharper_prefer_concrete_value_over_default_highlighting = suggestion
+resharper_prefer_explicitly_provided_tuple_component_name_highlighting = hint
+resharper_primary_constructor_parameter_capture_disallowed_highlighting = none
+resharper_private_field_can_be_converted_to_local_variable_highlighting = warning
+resharper_property_can_be_made_init_only_global_highlighting = suggestion
+resharper_property_can_be_made_init_only_local_highlighting = suggestion
+resharper_property_field_keyword_is_never_assigned_highlighting = warning
+resharper_property_field_keyword_is_never_used_highlighting = warning
+resharper_property_not_resolved_highlighting = error
+resharper_public_constructor_in_abstract_class_highlighting = suggestion
+resharper_pure_attribute_on_void_method_highlighting = warning
+resharper_query_invasion_declaration_global_highlighting = warning
+resharper_query_invasion_usage_global_highlighting = warning
+resharper_raw_string_can_be_simplified_highlighting = hint
+resharper_razor_assembly_not_resolved_highlighting = warning
+resharper_razor_layout_not_resolved_highlighting = error
+resharper_razor_null_conditional_operator_highlighting_highlighting = warning
+resharper_razor_section_not_resolved_highlighting = error
+resharper_razor_unresolved_component_highlighting = warning
+resharper_read_access_in_double_check_locking_highlighting = warning
+resharper_redundant_abstract_modifier_highlighting = warning
+resharper_redundant_accessor_body_highlighting = suggestion
+resharper_redundant_always_match_subpattern_highlighting = suggestion
+resharper_redundant_anonymous_type_property_name_highlighting = warning
+resharper_redundant_argument_default_value_highlighting = warning
+resharper_redundant_array_creation_expression_highlighting = hint
+resharper_redundant_array_lower_bound_specification_highlighting = warning
+resharper_redundant_assignment_highlighting = warning
+resharper_redundant_attribute_parentheses_highlighting = hint
+resharper_redundant_attribute_suffix_highlighting = warning
+resharper_redundant_attribute_usage_property_highlighting = suggestion
+resharper_redundant_base_constructor_call_highlighting = warning
+resharper_redundant_base_qualifier_highlighting = warning
+resharper_redundant_blank_lines_highlighting = none
+resharper_redundant_bool_compare_highlighting = warning
+resharper_redundant_caller_argument_expression_default_value_highlighting = warning
+resharper_redundant_case_label_highlighting = warning
+resharper_redundant_cast_highlighting = warning
+resharper_redundant_catch_clause_highlighting = warning
+resharper_redundant_check_before_assignment_highlighting = warning
+resharper_redundant_collection_copy_call_highlighting = warning
+resharper_redundant_collection_initializer_element_braces_highlighting = hint
+resharper_redundant_configure_await_highlighting = suggestion
+resharper_redundant_cqrs_attribute_highlighting = warning
+resharper_redundant_declaration_semicolon_highlighting = hint
+resharper_redundant_default_member_initializer_highlighting = warning
+resharper_redundant_delegate_creation_highlighting = warning
+resharper_redundant_dictionary_contains_key_before_adding_highlighting = warning
+resharper_redundant_disable_warning_comment_highlighting = warning
+resharper_redundant_discard_designation_highlighting = suggestion
+resharper_redundant_empty_case_else_highlighting = warning
+resharper_redundant_empty_finally_block_highlighting = warning
+resharper_redundant_empty_object_creation_argument_list_highlighting = hint
+resharper_redundant_empty_object_or_collection_initializer_highlighting = warning
+resharper_redundant_empty_switch_section_highlighting = warning
+resharper_redundant_enumerable_cast_call_highlighting = warning
+resharper_redundant_enum_case_label_for_default_section_highlighting = none
+resharper_redundant_explicit_array_creation_highlighting = warning
+resharper_redundant_explicit_array_size_highlighting = warning
+resharper_redundant_explicit_nullable_creation_highlighting = warning
+resharper_redundant_explicit_params_array_creation_highlighting = suggestion
+resharper_redundant_explicit_positional_property_declaration_highlighting = warning
+resharper_redundant_explicit_tuple_component_name_highlighting = warning
+resharper_redundant_extends_list_entry_highlighting = warning
+resharper_redundant_fixed_pointer_declaration_highlighting = suggestion
+resharper_redundant_if_else_block_highlighting = hint
+resharper_redundant_if_statement_then_keyword_highlighting = none
+resharper_redundant_immediate_delegate_invocation_highlighting = suggestion
+resharper_redundant_include_highlighting = warning
+resharper_redundant_is_before_relational_pattern_highlighting = suggestion
+resharper_redundant_iterator_keyword_highlighting = warning
+resharper_redundant_jump_statement_highlighting = warning
+resharper_redundant_lambda_parameter_type_highlighting = warning
+resharper_redundant_lambda_signature_parentheses_highlighting = hint
+resharper_redundant_linebreak_highlighting = none
+resharper_redundant_logical_conditional_expression_operand_highlighting = warning
+resharper_redundant_me_qualifier_highlighting = warning
+resharper_redundant_my_base_qualifier_highlighting = warning
+resharper_redundant_my_class_qualifier_highlighting = warning
+resharper_redundant_name_qualifier_highlighting = warning
+resharper_redundant_not_null_constraint_highlighting = warning
+resharper_redundant_nullable_annotation_on_reference_type_constraint_highlighting = warning
+resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_base_type_highlighting = warning
+resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_type_kind_highlighting = warning
+resharper_redundant_nullable_directive_highlighting = warning
+resharper_redundant_nullable_flow_attribute_highlighting = warning
+resharper_redundant_nullable_type_mark_highlighting = warning
+resharper_redundant_nullness_attribute_with_nullable_reference_types_highlighting = warning
+resharper_redundant_overflow_checking_context_highlighting = warning
+resharper_redundant_overload_global_highlighting = suggestion
+resharper_redundant_overload_local_highlighting = suggestion
+resharper_redundant_overridden_member_highlighting = warning
+resharper_redundant_params_highlighting = warning
+resharper_redundant_parentheses_highlighting = none
+resharper_redundant_partial_method_empty_implementation_highlighting = warning
+resharper_redundant_pattern_parentheses_highlighting = hint
+resharper_redundant_property_parentheses_highlighting = hint
+resharper_redundant_property_pattern_clause_highlighting = suggestion
+resharper_redundant_qualifier_highlighting = warning
+resharper_redundant_query_order_by_ascending_keyword_highlighting = hint
+resharper_redundant_range_bound_highlighting = suggestion
+resharper_redundant_readonly_modifier_highlighting = suggestion
+resharper_redundant_record_class_keyword_highlighting = warning
+resharper_redundant_scoped_parameter_modifier_highlighting = warning
+resharper_redundant_sets_required_members_attribute_highlighting = warning
+resharper_redundant_setter_value_parameter_declaration_highlighting = hint
+resharper_redundant_space_highlighting = none
+resharper_redundant_spread_element_highlighting = suggestion
+resharper_redundant_string_format_call_highlighting = warning
+resharper_redundant_string_interpolation_highlighting = suggestion
+resharper_redundant_string_to_char_array_call_highlighting = warning
+resharper_redundant_string_type_highlighting = suggestion
+resharper_redundant_suppress_nullable_warning_expression_highlighting = warning
+resharper_redundant_switch_expression_arms_highlighting = warning
+resharper_redundant_ternary_expression_highlighting = warning
+resharper_redundant_to_string_call_for_value_type_highlighting = hint
+resharper_redundant_to_string_call_highlighting = warning
+resharper_redundant_type_arguments_inside_nameof_highlighting = suggestion
+resharper_redundant_type_arguments_of_method_highlighting = warning
+resharper_redundant_type_check_in_pattern_highlighting = warning
+resharper_redundant_type_declaration_body_highlighting = suggestion
+resharper_redundant_unsafe_context_highlighting = warning
+resharper_redundant_using_directive_global_highlighting = warning
+resharper_redundant_using_directive_highlighting = warning
+resharper_redundant_verbatim_prefix_highlighting = suggestion
+resharper_redundant_verbatim_string_prefix_highlighting = suggestion
+resharper_redundant_virtual_modifier_highlighting = warning
+resharper_redundant_with_cancellation_highlighting = warning
+resharper_redundant_with_expression_highlighting = suggestion
+resharper_reference_equals_with_value_type_highlighting = warning
+resharper_reg_exp_inspections_highlighting = warning
+resharper_remove_constructor_invocation_highlighting = none
+resharper_remove_redundant_or_statement_false_highlighting = suggestion
+resharper_remove_redundant_or_statement_true_highlighting = suggestion
+resharper_remove_to_list_1_highlighting = suggestion
+resharper_remove_to_list_2_highlighting = suggestion
+resharper_replace_async_with_task_return_highlighting = none
+resharper_replace_auto_property_with_computed_property_highlighting = hint
+resharper_replace_conditional_expression_with_null_coalescing_highlighting = suggestion
+resharper_replace_object_pattern_with_var_pattern_highlighting = suggestion
+resharper_replace_sequence_equal_with_constant_pattern_highlighting = suggestion
+resharper_replace_slice_with_range_indexer_highlighting = hint
+resharper_replace_substring_with_range_indexer_highlighting = hint
+resharper_replace_with_field_keyword_highlighting = suggestion
+resharper_replace_with_first_or_default_1_highlighting = suggestion
+resharper_replace_with_first_or_default_2_highlighting = suggestion
+resharper_replace_with_first_or_default_3_highlighting = suggestion
+resharper_replace_with_first_or_default_4_highlighting = suggestion
+resharper_replace_with_last_or_default_1_highlighting = suggestion
+resharper_replace_with_last_or_default_2_highlighting = suggestion
+resharper_replace_with_last_or_default_3_highlighting = suggestion
+resharper_replace_with_last_or_default_4_highlighting = suggestion
+resharper_replace_with_of_type_1_highlighting = suggestion
+resharper_replace_with_of_type_2_highlighting = suggestion
+resharper_replace_with_of_type_3_highlighting = suggestion
+resharper_replace_with_of_type_any_1_highlighting = suggestion
+resharper_replace_with_of_type_any_2_highlighting = suggestion
+resharper_replace_with_of_type_count_1_highlighting = suggestion
+resharper_replace_with_of_type_count_2_highlighting = suggestion
+resharper_replace_with_of_type_first_1_highlighting = suggestion
+resharper_replace_with_of_type_first_2_highlighting = suggestion
+resharper_replace_with_of_type_first_or_default_1_highlighting = suggestion
+resharper_replace_with_of_type_first_or_default_2_highlighting = suggestion
+resharper_replace_with_of_type_last_1_highlighting = suggestion
+resharper_replace_with_of_type_last_2_highlighting = suggestion
+resharper_replace_with_of_type_last_or_default_1_highlighting = suggestion
+resharper_replace_with_of_type_last_or_default_2_highlighting = suggestion
+resharper_replace_with_of_type_long_count_highlighting = suggestion
+resharper_replace_with_of_type_single_1_highlighting = suggestion
+resharper_replace_with_of_type_single_2_highlighting = suggestion
+resharper_replace_with_of_type_single_or_default_1_highlighting = suggestion
+resharper_replace_with_of_type_single_or_default_2_highlighting = suggestion
+resharper_replace_with_of_type_where_highlighting = suggestion
+resharper_replace_with_primary_constructor_parameter_highlighting = suggestion
+resharper_replace_with_simple_assignment_false_highlighting = suggestion
+resharper_replace_with_simple_assignment_true_highlighting = suggestion
+resharper_replace_with_single_assignment_false_highlighting = suggestion
+resharper_replace_with_single_assignment_true_highlighting = suggestion
+resharper_replace_with_single_call_to_any_highlighting = suggestion
+resharper_replace_with_single_call_to_count_highlighting = suggestion
+resharper_replace_with_single_call_to_first_highlighting = suggestion
+resharper_replace_with_single_call_to_first_or_default_highlighting = suggestion
+resharper_replace_with_single_call_to_last_highlighting = suggestion
+resharper_replace_with_single_call_to_last_or_default_highlighting = suggestion
+resharper_replace_with_single_call_to_single_highlighting = suggestion
+resharper_replace_with_single_call_to_single_or_default_highlighting = suggestion
+resharper_replace_with_single_or_default_1_highlighting = suggestion
+resharper_replace_with_single_or_default_2_highlighting = suggestion
+resharper_replace_with_single_or_default_3_highlighting = suggestion
+resharper_replace_with_single_or_default_4_highlighting = suggestion
+resharper_replace_with_string_is_null_or_empty_highlighting = suggestion
+resharper_required_base_types_conflict_highlighting = warning
+resharper_required_base_types_direct_conflict_highlighting = warning
+resharper_required_base_types_is_not_inherited_highlighting = warning
+resharper_resource_item_not_resolved_highlighting = error
+resharper_resource_not_resolved_highlighting = error
+resharper_resx_not_resolved_highlighting = warning
+resharper_return_of_task_produced_by_using_variable_highlighting = warning
+resharper_return_of_using_variable_highlighting = warning
+resharper_return_type_can_be_enumerable_global_highlighting = none
+resharper_return_type_can_be_enumerable_local_highlighting = none
+resharper_return_type_can_be_not_nullable_highlighting = warning
+resharper_return_value_of_pure_method_is_not_used_highlighting = warning
+resharper_route_templates_action_route_prefix_can_be_extracted_to_controller_route_highlighting = hint
+resharper_route_templates_ambiguous_matching_constraint_constructor_highlighting = warning
+resharper_route_templates_constraint_argument_cannot_be_converted_highlighting = warning
+resharper_route_templates_controller_route_parameter_is_not_passed_to_methods_highlighting = hint
+resharper_route_templates_duplicated_parameter_highlighting = warning
+resharper_route_templates_matching_constraint_constructor_not_resolved_highlighting = warning
+resharper_route_templates_method_missing_route_parameters_highlighting = hint
+resharper_route_templates_optional_parameter_can_be_preceded_only_by_single_period_highlighting = warning
+resharper_route_templates_optional_parameter_must_be_at_the_end_of_segment_highlighting = warning
+resharper_route_templates_parameter_constraint_can_be_specified_highlighting = hint
+resharper_route_templates_parameter_type_and_constraints_mismatch_highlighting = warning
+resharper_route_templates_parameter_type_can_be_made_stricter_highlighting = suggestion
+resharper_route_templates_route_parameter_constraint_not_resolved_highlighting = warning
+resharper_route_templates_route_parameter_is_not_passed_to_method_highlighting = hint
+resharper_route_templates_route_token_not_resolved_highlighting = warning
+resharper_route_templates_symbol_not_resolved_highlighting = warning
+resharper_route_templates_syntax_error_highlighting = warning
+resharper_safe_cast_is_used_as_type_check_highlighting = suggestion
+resharper_script_tag_has_both_src_and_content_attributes_highlighting = error
+resharper_sealed_member_in_sealed_class_highlighting = warning
+resharper_separate_control_transfer_statement_highlighting = none
+resharper_separate_local_functions_with_jump_statement_highlighting = hint
+resharper_service_contract_without_operations_highlighting = warning
+resharper_shader_lab_shader_reference_multiple_candidates_highlighting = warning
+resharper_shader_lab_shader_reference_not_resolved_highlighting = warning
+resharper_shebang_directive_bad_placement_highlighting = warning
+resharper_shift_expression_real_shift_count_is_zero_highlighting = warning
+resharper_shift_expression_result_equals_zero_highlighting = warning
+resharper_shift_expression_right_operand_not_equal_real_count_highlighting = warning
+resharper_shift_expression_zero_left_operand_highlighting = warning
+resharper_similar_anonymous_type_nearby_highlighting = hint
+resharper_simplify_conditional_operator_highlighting = suggestion
+resharper_simplify_conditional_ternary_expression_highlighting = suggestion
+resharper_simplify_i_if_highlighting = suggestion
+resharper_simplify_linq_expression_use_all_highlighting = suggestion
+resharper_simplify_linq_expression_use_any_highlighting = suggestion
+resharper_simplify_string_interpolation_highlighting = suggestion
+resharper_specify_a_culture_in_string_conversion_explicitly_highlighting = warning
+resharper_specify_string_comparison_highlighting = hint
+resharper_spin_lock_in_readonly_field_highlighting = warning
+resharper_stack_alloc_inside_loop_highlighting = warning
+resharper_static_member_initializer_referes_to_member_below_highlighting = warning
+resharper_static_member_in_generic_type_highlighting = warning
+resharper_static_problem_in_text_highlighting = warning
+resharper_std_is_constant_evaluated_will_always_evaluate_to_constant_highlighting = warning
+resharper_stream_read_return_value_ignored_highlighting = warning
+resharper_string_compare_is_culture_specific_1_highlighting = warning
+resharper_string_compare_is_culture_specific_2_highlighting = warning
+resharper_string_compare_is_culture_specific_3_highlighting = warning
+resharper_string_compare_is_culture_specific_4_highlighting = warning
+resharper_string_compare_is_culture_specific_5_highlighting = warning
+resharper_string_compare_is_culture_specific_6_highlighting = warning
+resharper_string_compare_to_is_culture_specific_highlighting = warning
+resharper_string_ends_with_is_culture_specific_highlighting = none
+resharper_string_index_of_is_culture_specific_1_highlighting = warning
+resharper_string_index_of_is_culture_specific_2_highlighting = warning
+resharper_string_index_of_is_culture_specific_3_highlighting = warning
+resharper_string_last_index_of_is_culture_specific_1_highlighting = warning
+resharper_string_last_index_of_is_culture_specific_2_highlighting = warning
+resharper_string_last_index_of_is_culture_specific_3_highlighting = warning
+resharper_string_literal_as_interpolation_argument_highlighting = suggestion
+resharper_string_span_comparison_highlighting = warning
+resharper_string_starts_with_is_culture_specific_highlighting = none
+resharper_structured_message_template_problem_highlighting = warning
+resharper_struct_can_be_made_read_only_highlighting = suggestion
+resharper_struct_lacks_i_equatable_global_highlighting = warning
+resharper_struct_lacks_i_equatable_local_highlighting = warning
+resharper_struct_member_can_be_made_read_only_highlighting = none
+resharper_suggest_base_type_for_parameter_highlighting = none
+resharper_suggest_base_type_for_parameter_in_constructor_highlighting = none
+resharper_suggest_discard_declaration_var_style_highlighting = hint
+resharper_suggest_var_or_type_built_in_types_highlighting = hint
+resharper_suggest_var_or_type_deconstruction_declarations_highlighting = hint
+resharper_suggest_var_or_type_elsewhere_highlighting = hint
+resharper_suggest_var_or_type_simple_types_highlighting = hint
+resharper_suppress_nullable_warning_expression_as_inverted_is_expression_highlighting = warning
+resharper_suspicious_lock_over_synchronization_primitive_highlighting = warning
+resharper_suspicious_math_sign_method_highlighting = warning
+resharper_suspicious_parameter_name_in_argument_null_exception_highlighting = warning
+resharper_suspicious_type_conversion_global_highlighting = warning
+resharper_swap_via_deconstruction_highlighting = suggestion
+resharper_switch_expression_handles_some_known_enum_values_with_exception_in_default_highlighting = hint
+resharper_switch_statement_for_enum_misses_default_section_highlighting = hint
+resharper_switch_statement_handles_some_known_enum_values_with_default_highlighting = hint
+resharper_switch_statement_missing_some_enum_cases_no_default_highlighting = hint
+resharper_symbol_from_not_copied_locally_reference_used_warning_highlighting = warning
+resharper_tabs_and_spaces_mismatch_highlighting = none
+resharper_tabs_are_disallowed_highlighting = none
+resharper_tabs_outside_indent_highlighting = none
+resharper_tail_recursive_call_highlighting = hint
+resharper_thread_static_at_instance_field_highlighting = warning
+resharper_thread_static_field_has_initializer_highlighting = warning
+resharper_too_wide_local_variable_scope_highlighting = suggestion
+resharper_try_cast_always_succeeds_highlighting = suggestion
+resharper_try_statements_can_be_merged_highlighting = hint
+resharper_type_parameter_can_be_variant_highlighting = suggestion
+resharper_type_with_suspicious_equality_is_used_in_record_global_highlighting = warning
+resharper_type_with_suspicious_equality_is_used_in_record_local_highlighting = warning
+resharper_unassigned_field_global_highlighting = suggestion
+resharper_unassigned_field_local_highlighting = warning
+resharper_unassigned_get_only_auto_property_highlighting = warning
+resharper_unassigned_readonly_field_highlighting = warning
+resharper_unclosed_script_highlighting = error
+resharper_unexpected_attribute_highlighting = warning
+resharper_unexpected_directive_highlighting = warning
+resharper_unity_burst_accessing_managed_indexer_highlighting = warning
+resharper_unity_burst_accessing_managed_method_highlighting = warning
+resharper_unity_burst_boxing_not_supported_highlighting = warning
+resharper_unity_burst_creating_managed_type_highlighting = warning
+resharper_unity_burst_debug_log_invalid_argument_highlighting = warning
+resharper_unity_burst_foreach_not_supported_highlighting = warning
+resharper_unity_burst_function_signature_contains_managed_types_highlighting = warning
+resharper_unity_burst_loading_managed_type_highlighting = warning
+resharper_unity_burst_loading_static_not_readonly_highlighting = warning
+resharper_unity_burst_local_string_variable_declaration_highlighting = suggestion
+resharper_unity_burst_shared_static_create_highlighting = warning
+resharper_unity_burst_string_format_invalid_argument_highlighting = warning
+resharper_unity_burst_string_format_invalid_format_highlighting = warning
+resharper_unity_burst_try_not_supported_highlighting = warning
+resharper_unity_burst_typeof_expression_highlighting = warning
+resharper_unity_burst_write_static_field_highlighting = warning
+resharper_unity_duplicate_event_function_highlighting = warning
+resharper_unity_duplicate_shortcut_highlighting = warning
+resharper_unity_entities_aspect_wrong_fields_type_highlighting = error
+resharper_unity_entities_inconsistent_modifiers_for_dots_inheritor_highlighting = error
+resharper_unity_entities_must_be_struct_for_dots_inheritor_highlighting = error
+resharper_unity_entities_not_updated_component_lookup_highlighting = warning
+resharper_unity_entities_singleton_must_be_requested_highlighting = warning
+resharper_unity_expected_component_highlighting = warning
+resharper_unity_expected_scriptable_object_highlighting = warning
+resharper_unity_explicit_tag_comparison_highlighting = warning
+resharper_unity_incorrect_method_signature_highlighting = warning
+resharper_unity_incorrect_method_signature_in_string_literal_highlighting = warning
+resharper_unity_incorrect_mono_behaviour_instantiation_highlighting = warning
+resharper_unity_incorrect_scriptable_object_instantiation_highlighting = warning
+resharper_unity_inefficient_multidimensional_array_usage_highlighting = warning
+resharper_unity_inefficient_multiplication_order_highlighting = warning
+resharper_unity_inefficient_property_access_highlighting = none
+resharper_unity_instantiate_without_parent_highlighting = warning
+resharper_unity_load_scene_ambiguous_scene_name_highlighting = warning
+resharper_unity_load_scene_disabled_scene_name_highlighting = warning
+resharper_unity_load_scene_unexisting_scene_highlighting = warning
+resharper_unity_load_scene_unknown_scene_name_highlighting = warning
+resharper_unity_load_scene_wrong_index_highlighting = warning
+resharper_unity_no_null_coalescing_highlighting = none
+resharper_unity_no_null_pattern_matching_highlighting = none
+resharper_unity_no_null_propagation_highlighting = none
+resharper_unity_parameter_not_derived_from_component_highlighting = warning
+resharper_unity_performance_critical_code_camera_main_highlighting = hint
+resharper_unity_performance_critical_code_invocation_highlighting = hint
+resharper_unity_performance_critical_code_null_comparison_highlighting = hint
+resharper_unity_possible_misapplication_of_attribute_to_multiple_fields_highlighting = warning
+resharper_unity_prefer_address_by_id_to_graphics_params_highlighting = warning
+resharper_unity_prefer_generic_method_overload_highlighting = warning
+resharper_unity_prefer_guid_reference_highlighting = hint
+resharper_unity_prefer_non_alloc_api_highlighting = warning
+resharper_unity_property_drawer_on_gui_base_highlighting = warning
+resharper_unity_redundant_attribute_on_target_highlighting = warning
+resharper_unity_redundant_event_function_highlighting = warning
+resharper_unity_redundant_formerly_serialized_as_attribute_highlighting = warning
+resharper_unity_redundant_hide_in_inspector_attribute_highlighting = warning
+resharper_unity_redundant_initialize_on_load_attribute_highlighting = warning
+resharper_unity_redundant_serialize_field_attribute_highlighting = warning
+resharper_unity_shared_static_unmanaged_type_highlighting = warning
+resharper_unity_unknown_animator_state_name_highlighting = warning
+resharper_unity_unknown_input_axes_highlighting = warning
+resharper_unity_unknown_layer_highlighting = warning
+resharper_unity_unknown_resource_highlighting = warning
+resharper_unity_unknown_tag_highlighting = warning
+resharper_unity_unresolved_component_or_scriptable_object_highlighting = warning
+resharper_unnecessary_whitespace_highlighting = none
+resharper_unreachable_switch_arm_due_to_integer_analysis_highlighting = warning
+resharper_unreachable_switch_case_due_to_integer_analysis_highlighting = warning
+resharper_unreal_header_tool_error_highlighting = error
+resharper_unreal_header_tool_warning_highlighting = warning
+resharper_unsupported_required_base_type_highlighting = warning
+resharper_unused_anonymous_method_signature_highlighting = warning
+resharper_unused_auto_property_accessor_global_highlighting = warning
+resharper_unused_auto_property_accessor_local_highlighting = warning
+resharper_unused_import_clause_highlighting = warning
+resharper_unused_local_function_highlighting = warning
+resharper_unused_local_function_parameter_highlighting = warning
+resharper_unused_local_function_return_value_highlighting = warning
+resharper_unused_member_global_highlighting = suggestion
+resharper_unused_member_hierarchy_global_highlighting = suggestion
+resharper_unused_member_hierarchy_local_highlighting = warning
+resharper_unused_member_in_super_global_highlighting = suggestion
+resharper_unused_member_in_super_local_highlighting = warning
+resharper_unused_member_local_highlighting = warning
+resharper_unused_method_return_value_global_highlighting = suggestion
+resharper_unused_method_return_value_local_highlighting = warning
+resharper_unused_nullable_directive_highlighting = warning
+resharper_unused_parameter_global_highlighting = suggestion
+resharper_unused_parameter_in_partial_method_highlighting = warning
+resharper_unused_parameter_local_highlighting = warning
+resharper_unused_tuple_component_in_return_value_highlighting = warning
+resharper_unused_type_global_highlighting = suggestion
+resharper_unused_type_local_highlighting = warning
+resharper_unused_type_parameter_highlighting = warning
+resharper_unused_variable_highlighting = warning
+resharper_usage_of_default_struct_equality_highlighting = warning
+resharper_useless_binary_operation_highlighting = warning
+resharper_useless_comparison_to_integral_constant_highlighting = warning
+resharper_use_array_creation_expression_1_highlighting = suggestion
+resharper_use_array_creation_expression_2_highlighting = suggestion
+resharper_use_array_empty_method_highlighting = suggestion
+resharper_use_await_using_highlighting = suggestion
+resharper_use_cancellation_token_for_i_async_enumerable_highlighting = suggestion
+resharper_use_collection_count_property_highlighting = suggestion
+resharper_use_configure_await_false_for_async_disposable_highlighting = none
+resharper_use_configure_await_false_highlighting = suggestion
+resharper_use_deconstruction_highlighting = hint
+resharper_use_discard_assignment_highlighting = suggestion
+resharper_use_empty_types_field_highlighting = suggestion
+resharper_use_event_args_empty_field_highlighting = suggestion
+resharper_use_format_specifier_in_format_string_highlighting = suggestion
+resharper_use_implicitly_typed_variable_evident_highlighting = hint
+resharper_use_implicitly_typed_variable_highlighting = none
+resharper_use_implicit_by_val_modifier_highlighting = hint
+resharper_use_indexed_property_highlighting = suggestion
+resharper_use_index_from_end_expression_highlighting = suggestion
+resharper_use_method_any_0_highlighting = suggestion
+resharper_use_method_any_1_highlighting = suggestion
+resharper_use_method_any_2_highlighting = suggestion
+resharper_use_method_any_3_highlighting = suggestion
+resharper_use_method_any_4_highlighting = suggestion
+resharper_use_nameof_expression_for_part_of_the_string_highlighting = none
+resharper_use_nameof_expression_highlighting = suggestion
+resharper_use_nameof_for_dependency_property_highlighting = suggestion
+resharper_use_name_of_instead_of_to_string_highlighting = suggestion
+resharper_use_name_of_instead_of_type_of_highlighting = suggestion
+resharper_use_negated_pattern_in_is_expression_highlighting = hint
+resharper_use_negated_pattern_matching_highlighting = hint
+resharper_use_nullable_annotation_instead_of_attribute_highlighting = suggestion
+resharper_use_nullable_attributes_supported_by_compiler_highlighting = suggestion
+resharper_use_nullable_reference_types_annotation_syntax_highlighting = warning
+resharper_use_null_propagation_highlighting = hint
+resharper_use_object_or_collection_initializer_highlighting = suggestion
+resharper_use_pattern_matching_highlighting = suggestion
+resharper_use_positional_deconstruction_pattern_highlighting = none
+resharper_use_raw_string_highlighting = hint
+resharper_use_string_interpolation_highlighting = suggestion
+resharper_use_string_interpolation_when_possible_highlighting = hint
+resharper_use_switch_case_pattern_variable_highlighting = suggestion
+resharper_use_symbol_alias_highlighting = hint
+resharper_use_throw_if_null_method_highlighting = none
+resharper_use_unsigned_right_shift_operator_highlighting = suggestion
+resharper_use_verbatim_string_highlighting = hint
+resharper_use_with_expression_to_copy_anonymous_object_highlighting = suggestion
+resharper_use_with_expression_to_copy_record_highlighting = suggestion
+resharper_use_with_expression_to_copy_struct_highlighting = suggestion
+resharper_use_with_expression_to_copy_tuple_highlighting = suggestion
+resharper_using_statement_resource_initialization_expression_highlighting = hint
+resharper_using_statement_resource_initialization_highlighting = warning
+resharper_value_parameter_not_used_highlighting = warning
+resharper_value_range_attribute_violation_highlighting = warning
+resharper_variable_can_be_not_nullable_highlighting = warning
+resharper_variable_hides_outer_variable_highlighting = warning
+resharper_variable_length_string_hex_escape_sequence_highlighting = warning
+resharper_vb_check_for_reference_equality_instead_1_highlighting = suggestion
+resharper_vb_check_for_reference_equality_instead_2_highlighting = suggestion
+resharper_vb_possible_mistaken_argument_highlighting = warning
+resharper_vb_possible_mistaken_call_to_get_type_1_highlighting = warning
+resharper_vb_possible_mistaken_call_to_get_type_2_highlighting = warning
+resharper_vb_remove_to_list_1_highlighting = suggestion
+resharper_vb_remove_to_list_2_highlighting = suggestion
+resharper_vb_replace_with_first_or_default_highlighting = suggestion
+resharper_vb_replace_with_last_or_default_highlighting = suggestion
+resharper_vb_replace_with_of_type_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_any_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_any_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_count_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_count_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_first_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_first_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_first_or_default_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_first_or_default_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_last_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_last_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_last_or_default_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_last_or_default_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_single_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_single_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_single_or_default_1_highlighting = suggestion
+resharper_vb_replace_with_of_type_single_or_default_2_highlighting = suggestion
+resharper_vb_replace_with_of_type_where_highlighting = suggestion
+resharper_vb_replace_with_single_assignment_1_highlighting = suggestion
+resharper_vb_replace_with_single_assignment_2_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_any_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_count_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_first_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_first_or_default_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_last_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_last_or_default_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_single_highlighting = suggestion
+resharper_vb_replace_with_single_call_to_single_or_default_highlighting = suggestion
+resharper_vb_replace_with_single_or_default_highlighting = suggestion
+resharper_vb_simplify_linq_expression_10_highlighting = hint
+resharper_vb_simplify_linq_expression_1_highlighting = suggestion
+resharper_vb_simplify_linq_expression_2_highlighting = suggestion
+resharper_vb_simplify_linq_expression_3_highlighting = suggestion
+resharper_vb_simplify_linq_expression_4_highlighting = suggestion
+resharper_vb_simplify_linq_expression_5_highlighting = suggestion
+resharper_vb_simplify_linq_expression_6_highlighting = suggestion
+resharper_vb_simplify_linq_expression_7_highlighting = hint
+resharper_vb_simplify_linq_expression_8_highlighting = hint
+resharper_vb_simplify_linq_expression_9_highlighting = hint
+resharper_vb_string_compare_is_culture_specific_1_highlighting = warning
+resharper_vb_string_compare_is_culture_specific_2_highlighting = warning
+resharper_vb_string_compare_is_culture_specific_3_highlighting = warning
+resharper_vb_string_compare_is_culture_specific_4_highlighting = warning
+resharper_vb_string_compare_is_culture_specific_5_highlighting = warning
+resharper_vb_string_compare_is_culture_specific_6_highlighting = warning
+resharper_vb_string_compare_to_is_culture_specific_highlighting = warning
+resharper_vb_string_ends_with_is_culture_specific_highlighting = none
+resharper_vb_string_index_of_is_culture_specific_1_highlighting = warning
+resharper_vb_string_index_of_is_culture_specific_2_highlighting = warning
+resharper_vb_string_index_of_is_culture_specific_3_highlighting = warning
+resharper_vb_string_last_index_of_is_culture_specific_1_highlighting = warning
+resharper_vb_string_last_index_of_is_culture_specific_2_highlighting = warning
+resharper_vb_string_last_index_of_is_culture_specific_3_highlighting = warning
+resharper_vb_string_starts_with_is_culture_specific_highlighting = none
+resharper_vb_unreachable_code_highlighting = warning
+resharper_vb_use_array_creation_expression_1_highlighting = suggestion
+resharper_vb_use_array_creation_expression_2_highlighting = suggestion
+resharper_vb_use_first_instead_highlighting = warning
+resharper_vb_use_method_any_1_highlighting = suggestion
+resharper_vb_use_method_any_2_highlighting = suggestion
+resharper_vb_use_method_any_3_highlighting = suggestion
+resharper_vb_use_method_any_4_highlighting = suggestion
+resharper_vb_use_method_any_5_highlighting = suggestion
+resharper_vb_use_method_is_instance_of_type_highlighting = suggestion
+resharper_vb_use_type_of_is_operator_1_highlighting = suggestion
+resharper_vb_use_type_of_is_operator_2_highlighting = suggestion
+resharper_virtual_member_call_in_constructor_highlighting = warning
+resharper_virtual_member_never_overridden_global_highlighting = suggestion
+resharper_virtual_member_never_overridden_local_highlighting = suggestion
+resharper_void_method_with_must_dispose_resource_attribute_highlighting = warning
+resharper_void_method_with_must_use_return_value_attribute_highlighting = warning
+resharper_vulnerable_api_highlighting = warning
+resharper_web_config_module_not_resolved_highlighting = warning
+resharper_web_config_module_qualification_resolve_highlighting = warning
+resharper_web_config_redundant_add_namespace_tag_highlighting = warning
+resharper_web_config_redundant_location_tag_highlighting = warning
+resharper_web_config_tag_prefix_redundand_highlighting = warning
+resharper_web_config_type_not_resolved_highlighting = warning
+resharper_web_config_unused_add_tag_highlighting = warning
+resharper_web_config_unused_element_due_to_config_source_attribute_highlighting = warning
+resharper_web_config_unused_remove_or_clear_tag_highlighting = warning
+resharper_web_config_web_config_path_warning_highlighting = warning
+resharper_web_config_wrong_module_highlighting = warning
+resharper_web_ignored_path_highlighting = none
+resharper_web_mapped_path_highlighting = hint
+resharper_with_expression_instead_of_initializer_highlighting = suggestion
+resharper_with_expression_modifies_all_members_highlighting = warning
+resharper_wrong_indent_size_highlighting = none
+resharper_xaml_assign_null_to_not_null_attribute_highlighting = warning
+resharper_xaml_avalonia_wrong_binding_mode_for_stream_binding_operator_highlighting = warning
+resharper_xaml_binding_without_context_not_resolved_highlighting = hint
+resharper_xaml_binding_with_context_not_resolved_highlighting = warning
+resharper_xaml_compiled_binding_missing_data_type_error_highlighting_highlighting = error
+resharper_xaml_constructor_warning_highlighting = warning
+resharper_xaml_decimal_parsing_is_culture_dependent_highlighting = warning
+resharper_xaml_dependency_property_resolve_error_highlighting = warning
+resharper_xaml_duplicate_style_setter_highlighting = warning
+resharper_xaml_dynamic_resource_error_highlighting = error
+resharper_xaml_element_name_reference_not_resolved_highlighting = error
+resharper_xaml_empty_grid_length_definition_highlighting = error
+resharper_xaml_field_modifier_requires_name_attribute_highlighting = warning
+resharper_xaml_grid_definitions_can_be_converted_to_attribute_highlighting = hint
+resharper_xaml_ignored_path_highlighting_highlighting = none
+resharper_xaml_index_out_of_grid_definition_highlighting = warning
+resharper_xaml_invalid_dynamic_resource_type_highlighting = suggestion
+resharper_xaml_invalid_member_type_highlighting = error
+resharper_xaml_invalid_resource_target_type_highlighting = error
+resharper_xaml_invalid_resource_type_highlighting = error
+resharper_xaml_invalid_type_highlighting = error
+resharper_xaml_language_level_highlighting = error
+resharper_xaml_mapped_path_highlighting_highlighting = hint
+resharper_xaml_method_arguments_will_be_ignored_highlighting = warning
+resharper_xaml_missing_grid_index_highlighting = warning
+resharper_xaml_overloads_collision_highlighting = warning
+resharper_xaml_parent_is_out_of_current_component_tree_highlighting = warning
+resharper_xaml_path_error_highlighting = warning
+resharper_xaml_possible_null_reference_exception_highlighting = suggestion
+resharper_xaml_redundant_attached_property_highlighting = warning
+resharper_xaml_redundant_binding_mode_attribute_highlighting = warning
+resharper_xaml_redundant_collection_property_highlighting = warning
+resharper_xaml_redundant_freeze_attribute_highlighting = warning
+resharper_xaml_redundant_grid_definitions_highlighting = warning
+resharper_xaml_redundant_grid_span_highlighting = warning
+resharper_xaml_redundant_modifiers_attribute_highlighting = warning
+resharper_xaml_redundant_namespace_alias_highlighting = warning
+resharper_xaml_redundant_name_attribute_highlighting = warning
+resharper_xaml_redundant_property_type_qualifier_highlighting = warning
+resharper_xaml_redundant_resource_highlighting = warning
+resharper_xaml_redundant_styled_value_highlighting = warning
+resharper_xaml_redundant_update_source_trigger_attribute_highlighting = warning
+resharper_xaml_redundant_xamarin_forms_class_declaration_highlighting = warning
+resharper_xaml_resource_file_path_case_mismatch_highlighting = warning
+resharper_xaml_routed_event_resolve_error_highlighting = warning
+resharper_xaml_static_resource_not_resolved_highlighting = warning
+resharper_xaml_style_class_not_found_highlighting = warning
+resharper_xaml_style_invalid_target_type_highlighting = error
+resharper_xaml_unexpected_element_highlighting = error
+resharper_xaml_unexpected_text_token_highlighting = error
+resharper_xaml_xaml_duplicate_device_family_type_view_highlighting_highlighting = error
+resharper_xaml_xaml_mismatched_device_family_view_clr_name_highlighting_highlighting = warning
+resharper_xaml_xaml_relative_source_default_mode_warning_highlighting_highlighting = warning
+resharper_xaml_xaml_unknown_device_family_type_highlighting_highlighting = warning
+resharper_xaml_xaml_xamarin_forms_data_type_and_binding_context_type_mismatched_highlighting_highlighting = warning
+resharper_xaml_x_key_attribute_disallowed_highlighting = error
+resharper_xunit_xunit_test_with_console_output_highlighting = warning
+resharper_zero_index_from_end_highlighting = warning
+
+[{*.har,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,.ws-context,jest.config}]
+indent_style = space
+indent_size = 2
+
+[*.asmdef]
+indent_style = space
+indent_size = 2
+
+[*.{appxmanifest,asax,ascx,aspx,axaml,blockshader,cg,cginc,compute,cs,cshtml,dtd,fs,fsi,fsscript,fsx,fx,fxh,hlsl,hlsli,hlslinc,master,ml,mli,nuspec,paml,razor,resw,resx,shader,shaderFoundry,skin,urtshader,usf,ush,uxml,vb,xaml,xamlx,xoml,xsd}]
+indent_style = space
+indent_size = 4
+tab_width = 4
diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml
index 73d6ad6e..e84af26f 100644
--- a/.github/workflows/create-release.yaml
+++ b/.github/workflows/create-release.yaml
@@ -125,7 +125,7 @@ jobs:
# run: |
# filepath="Builds/airconsole-unity-plugin-v${{ env.version }}.unitypackage"
# if [ ! -f "$filepath" ]; then
- # echo "Build validation of airconsole-unity-plugin-v${{ env.version }}unitypackage failed"
+ # echo "Build validation of airconsole-unity-plugin-v${{ env.version }} unitypackage failed"
# exit 1
# fi
@@ -140,7 +140,7 @@ jobs:
# uses: softprops/action-gh-release@v1
# if: startsWith(github.ref, 'refs/tags/')
# with:
- # files: Builds/release-${{ github.event.inputs.version }}.unitypackage
+ # files: Builds/airconsole-unity-plugin-v${{ github.event.inputs.version }}.unitypackage
# body: ${{ steps.extract-release-notes.outputs.release_notes }}
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 4023ef67..7e50ced0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,12 +35,6 @@ obj/
ehthumbs.db
Thumbs.db
-# ============ #
-# IDEA generated #
-# ============ #
-/.idea
-
-
# ============ #
# Visual Studio Code generated #
# ============ #
@@ -50,3 +44,14 @@ TestBuilds/
Assets/AirConsole/airconsole.prefs*
Assets/WebGLTemplates/**/airconsole-settings.js
+
+# ============ #
+# IntellJ Code Style
+# ============ #
+
+!/.idea/
+/.idea/*
+!/.idea/.idea.airconsole-unity-plugin/
+!/.idea/.idea.airconsole-unity-plugin/.idea/
+/.idea/.idea.airconsole-unity-plugin/.idea/*
+!/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/
diff --git a/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/Project.xml b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/Project.xml
new file mode 100644
index 00000000..a4c0f939
--- /dev/null
+++ b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/Project.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/codeStyleConfig.xml b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 00000000..79ee123c
--- /dev/null
+++ b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.serena/.gitignore b/.serena/.gitignore
new file mode 100644
index 00000000..14d86ad6
--- /dev/null
+++ b/.serena/.gitignore
@@ -0,0 +1 @@
+/cache
diff --git a/.serena/memories/project_overview.md b/.serena/memories/project_overview.md
new file mode 100644
index 00000000..411e2377
--- /dev/null
+++ b/.serena/memories/project_overview.md
@@ -0,0 +1,6 @@
+# Project Overview
+- Purpose: Unity plugin providing a C# wrapper around the AirConsole JavaScript API so Unity developers can build local multiplayer games that communicate with the AirConsole backend through the embedded web/websocket server.
+- Tech stack: Unity/C# scripts plus accompanying assets located primarily under `Assets/`. Targets AirConsole-supported platforms (WebGL and Android TV).
+- Repo structure highlights: Unity project root with standard folders (`Assets`, `Packages`, `ProjectSettings`, etc.), csproj files for various Unity modules/tests, documentation PDF in `Assets/AirConsole/Documentation_1.7.pdf`, and changelog/README at root.
+- Entry points: open the Unity project (`airconsole-unity-plugin.sln` or via Unity Hub) and use provided AirConsole scenes/examples under `Assets/AirConsole` as the starting point.
+- Special notes: includes embedded webserver/websocket server for editor communication, so no extra server dependency is required.
\ No newline at end of file
diff --git a/.serena/memories/style_and_conventions.md b/.serena/memories/style_and_conventions.md
new file mode 100644
index 00000000..b79fa29b
--- /dev/null
+++ b/.serena/memories/style_and_conventions.md
@@ -0,0 +1,4 @@
+# Style and Conventions
+- Code is written in standard Unity/C# style (PascalCase for classes/methods, camelCase for private fields, serialized fields attributed as needed).
+- Project relies on Unity-specific patterns (MonoBehaviours, scriptable objects, etc.); follow Unity's serialization and inspector conventions when modifying scripts.
+- No repository-specific linting or formatting rules were documented, so adhere to default C# conventions and Unity best practices.
\ No newline at end of file
diff --git a/.serena/memories/suggested_commands.md b/.serena/memories/suggested_commands.md
new file mode 100644
index 00000000..015c78e8
--- /dev/null
+++ b/.serena/memories/suggested_commands.md
@@ -0,0 +1,6 @@
+# Suggested Commands
+- `git status` / `git diff` – inspect working tree and patch content.
+- `ls` / `find . -name "*.cs"` – explore repository contents on macOS (Darwin) shell.
+- `open airconsole-unity-plugin.sln` or launch via Unity Hub to edit/run the Unity project.
+- Use the Unity Test Runner inside the Unity Editor to execute EditMode/PlayMode tests (no standalone CLI documented).
+- Refer to the embedded documentation PDF at `Assets/AirConsole/Documentation_1.7.pdf` for setup instructions.
\ No newline at end of file
diff --git a/.serena/memories/task_completion.md b/.serena/memories/task_completion.md
new file mode 100644
index 00000000..ccb983dd
--- /dev/null
+++ b/.serena/memories/task_completion.md
@@ -0,0 +1,6 @@
+# Task Completion Checklist
+- Ensure changes build inside the Unity Editor and do not break the AirConsole example scenes.
+- Run relevant Unity EditMode/PlayMode tests through the Unity Test Runner if scripts were modified.
+- Update README/CHANGELOG or documentation PDF references if behavior changes.
+- Verify WebGL/Android-specific behavior when applicable (e.g., platform messaging, webview debugging instructions).
+- Commit with clear messages and keep the embedded webserver/websocket functionality intact.
\ No newline at end of file
diff --git a/.serena/project.yml b/.serena/project.yml
new file mode 100644
index 00000000..53eba993
--- /dev/null
+++ b/.serena/project.yml
@@ -0,0 +1,84 @@
+# list of languages for which language servers are started; choose from:
+# al bash clojure cpp csharp csharp_omnisharp
+# dart elixir elm erlang fortran go
+# haskell java julia kotlin lua markdown
+# nix perl php python python_jedi r
+# rego ruby ruby_solargraph rust scala swift
+# terraform typescript typescript_vts yaml zig
+# Note:
+# - For C, use cpp
+# - For JavaScript, use typescript
+# Special requirements:
+# - csharp: Requires the presence of a .sln file in the project folder.
+# When using multiple languages, the first language server that supports a given file will be used for that file.
+# The first language is the default language and the respective language server will be used as a fallback.
+# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
+languages:
+- csharp
+
+# the encoding used by text files in the project
+# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
+encoding: "utf-8"
+
+# whether to use the project's gitignore file to ignore files
+# Added on 2025-04-07
+ignore_all_files_in_gitignore: true
+
+# list of additional paths to ignore
+# same syntax as gitignore, so you can use * and **
+# Was previously called `ignored_dirs`, please update your config if you are using that.
+# Added (renamed) on 2025-04-07
+ignored_paths: []
+
+# whether the project is in read-only mode
+# If set to true, all editing tools will be disabled and attempts to use them will result in an error
+# Added on 2025-04-18
+read_only: false
+
+# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
+# Below is the complete list of tools for convenience.
+# To make sure you have the latest list of tools, and to view their descriptions,
+# execute `uv run scripts/print_tool_overview.py`.
+#
+# * `activate_project`: Activates a project by name.
+# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
+# * `create_text_file`: Creates/overwrites a file in the project directory.
+# * `delete_lines`: Deletes a range of lines within a file.
+# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
+# * `execute_shell_command`: Executes a shell command.
+# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
+# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
+# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
+# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
+# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
+# * `initial_instructions`: Gets the initial instructions for the current project.
+# Should only be used in settings where the system prompt cannot be set,
+# e.g. in clients you have no control over, like Claude Desktop.
+# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
+# * `insert_at_line`: Inserts content at a given line in a file.
+# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
+# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
+# * `list_memories`: Lists memories in Serena's project-specific memory store.
+# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
+# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
+# * `read_file`: Reads a file within the project directory.
+# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
+# * `remove_project`: Removes a project from the Serena configuration.
+# * `replace_lines`: Replaces a range of lines within a file with new content.
+# * `replace_symbol_body`: Replaces the full definition of a symbol.
+# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
+# * `search_for_pattern`: Performs a search for a pattern in the project.
+# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
+# * `switch_modes`: Activates modes by providing a list of their names
+# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
+# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
+# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
+# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
+excluded_tools: []
+
+# initial prompt for the project. It will always be given to the LLM upon activating the project
+# (contrary to the memories, which are loaded on demand).
+initial_prompt: ""
+
+project_name: "airconsole-unity-plugin"
+included_optional_tools: []
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000..bba26ec9
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,82 @@
+# AGENTS GUIDE — Assets/AirConsole Focus
+
+The `airconsole-unity-plugin` project targets Unity 2022.3.x and ships the full AirConsole runtime, editor tooling, Android TV helpers, and WebGL controller templates. This guide is tailored to the contents under `Assets/AirConsole`.
+
+## What Lives in Assets/AirConsole
+
+- `scripts/Runtime`: Core API surface (`AirConsole.cs`), websocket/webview bridges (`WebsocketListener.cs`, `WebViewManager.cs`), runtime settings (`Settings.cs`, `AirconsoleRuntimeSettings.cs`, `NativeGameSizingSettings.cs`), logging (`AirConsoleLogger.cs`, `DebugLevel.cs`), platform runtime configurators, and Android plugin wrappers under `Runtime/Plugin/Android`.
+- `scripts/Editor`: Custom inspectors/windows (`Inspector.cs`, `SettingWindow.cs`, `PlayMode.cs`, `SafeAreaTester.cs`, `WebListener.cs`), build automation (`BuildAutomation/*`), project maintenance checks (`ProjectMaintenance/*`), and plugin developer helpers (`PluginDevelopment/*`).
+- `scripts/SupportCheck`: Unity version/platform validator ASMDEF used in-editor.
+- `scripts/Tests`: ASMDEF-scoped EditMode, PlayMode, and Editor tests.
+- `examples`: Sample scenes (`basic`, `pong`, `platformer`, `swipe`, `game-states`, `safe-area`, `translations`) for manual validation.
+- `extras`: Controller template HTML and `HighScoreHelper.cs`.
+- `plugins`: Managed dependencies (`Newtonsoft.Json.dll`, `websocket-sharp.dll`) plus Android native plugin payload under `plugins/Android`.
+- `unity-webview`: Embedded WebView plugin with runtime/editor asmdefs and native binaries under `Plugins`.
+- `unity-webview` is an imported external dependency. You are not allowed to alter it.
+- Docs and misc: `Documentation_1.7.pdf`, `Documentation for AndroidTV.pdf`, `Upgrade_Plugin_Version.md`, `README.txt`, `airconsole.prefs`, and the distributable `airconsole-code.unitypackage`.
+
+## Runtime Essentials
+
+- **API + bridge**: `AirConsole.cs` exposes the public API; `WebsocketListener` routes JSON actions/events; `WebViewManager` coordinates the embedded webview. Add new events in both the listener and the API surface.
+- **Config assets**: `AirconsoleRuntimeSettings.asset` and `NativeGameSizingSettings.asset` (in `scripts/Runtime/Resources`) hold defaults for ports, safe-area sizing, etc. Adjust via the editor UI instead of hardcoding.
+- **Platform setup**: Implementations of `IRuntimeConfigurator` (`AndroidRuntimeConfigurator`, `WebGLRuntimeConfigurator`, `EditorRuntimeConfigurator`) handle platform-specific initialization. Extend these rather than branching deep in the API.
+- **Android plugin wrappers**: `PluginManager`, `AndroidUnityUtils`, and callback helpers (`UnityPluginExecutionCallback`, `UnityPluginStringCallback`, `GenericUnityPluginCallback`, `UnityAndroidObjectProvider`) encapsulate Java bridge calls. Keep new native hooks consistent with these wrappers.
+- **Logging & diagnostics**: Use `AirConsoleLogger` with `DebugLevel` enums to respect runtime debug settings.
+
+## Editor & Build Tooling
+
+- **UI/inspectors**: `SettingWindow`, `Inspector`, `PlayMode`, `SafeAreaTester`, and `WebListener` provide editor UI and simulator hooks. Prefer extending these instead of adding ad-hoc windows.
+- **Build automation** (`scripts/Editor/BuildAutomation`):
+ - `PreBuildProcessing` and `PostBuildProcess` wrap pre/post hooks; post steps validate WebGL template AirConsole JS versions.
+ - `AndroidManifestProcessor`, `AndroidGradleProcessor`, `AndroidProjectProcessor`, `AndroidManifest`, and `AndroidXMLDocument` mutate generated Android projects/manifests. Use these helpers instead of manual IO.
+- **Project maintenance** (`ProjectMaintenance`): `ProjectDependencyCheck`, `SemVerCheck`, and `ProjectConfigurationCheck` enforce Unity version and project settings; `ProjectPreferenceManager/ProjectPreferences` manage stored preferences; `ProjectUpgradeEditor` supports upgrade flows.
+- **Plugin development helpers** (`PluginDevelopment`): `BuildHelper` hosts build/packaging entry points (Web/Android) and can auto-zip or auto-commit; `DevelopmentTools` includes additional packager utilities.
+
+## Tests, Samples, Validation
+
+- Tests live under `scripts/Tests` (EditMode/PlayMode/Editor asmdefs). Run via Unity Test Runner; some PlayMode tests expect Android as the active build target.
+- Manual checks: leverage sample scenes in `examples` to verify controller flows, safe-area behavior, translations, and Android TV input.
+- WebGL validation: keep `PostBuildProcess` version checks aligned with the AirConsole JS used in `Assets/WebGLTemplates/AirConsole-*`.
+
+## Dependencies & Third-Party
+
+- Managed DLLs: `Newtonsoft.Json.dll` and `websocket-sharp.dll` are under `plugins/` and referenced by runtime asmdefs.
+- Embedded webview: `unity-webview` includes runtime/editor code plus native libs under `unity-webview/Plugins`.
+- Android native pieces are under `plugins/Android`; ensure gradle/manifest processors remain compatible when updating them.
+
+## Common Workflows
+
+- **Add/extend an API event**: Update `WebsocketListener` to parse/route the action, expose it in `AirConsole`, and wire through logging; add tests where possible.
+- **Adjust runtime defaults**: Modify `AirconsoleRuntimeSettings.asset` or `NativeGameSizingSettings.asset` (via editor windows). Avoid hardcoded constants in code.
+- **Android manifest/Gradle edits**: Implement changes in `AndroidManifestProcessor`/`AndroidGradleProcessor`/`AndroidProjectProcessor`; ensure `useCustomMainManifest` stays enabled.
+- **WebGL template/JS version bumps**: Update constants/regex in `PostBuildProcess`, refresh `Settings.RequiredMinimumVersion` if needed, and sync HTML in `Assets/WebGLTemplates/AirConsole-*`.
+- **Packaging/exports**: Use `BuildHelper.BuildWeb()`, `BuildHelper.BuildAndroid()`, or `BuildHelper.BuildAndroidInternal()`; they run configuration checks and can zip outputs.
+
+## Guardrails & Gotchas
+
+- Conditional compilation is heavily used: `#if !DISABLE_AIRCONSOLE`, `UNITY_ANDROID`, `UNITY_EDITOR`, `UNITY_WEBGL`. Keep new code behind appropriate defines and asmdefs.
+- Respect asmdef boundaries (`AirConsole.Runtime`, `AirConsole.Editor`, `AirConsole.SupportCheck`, `AirConsole.Examples`, `unity-webview`); place new files in matching folders.
+- Embedded websocket/webview server underpins editor play; avoid breaking `WebsocketListener`/`WebViewManager` interactions (ports come from runtime settings).
+- Safe-area handling is central for Android TV/Automotive—maintain `OnSafeAreaChanged` flows and avoid state changes before safe-area readiness.
+- Build helper may auto-commit with `build: TIMESTAMP` when uncommitted changes exist; be mindful when running locally.
+
+## Event Queue Architecture (Thread-Safe Callbacks)
+
+The WebView plugin uses a thread-safe event queue to handle callbacks from native code (Android only at this point):
+
+### Event Processing Lifecycle
+
+Events are processed at multiple points to ensure timely delivery:
+
+1. **`Update()`**: Primary drain point (every frame)
+2. **`LateUpdate()`**: Secondary drain (end of frame)
+3. **`FixedUpdate()`**: Tertiary drain (physics frame / fixed timestep / before rendering)
+4. **`OnApplicationPause(false)`**: Flush on resume
+5. **`OnDisable()`**: Flush before component teardown
+6. **`OnApplicationQuit()`**: Final flush before app exit
+
+## Additional References
+
+- `Documentation_1.7.pdf` (setup/examples), `Documentation for AndroidTV.pdf`, and `Upgrade_Plugin_Version.md` for upgrade flows.
+- Controller HTML template: `extras/controller-template.html`.
+- Quick intro: `Assets/AirConsole/README.txt`; preferences file `airconsole.prefs`.
diff --git a/Assets/AirConsole/ProjectCodeUpdater.cs b/Assets/AirConsole/ProjectCodeUpdater.cs
index 069bdc49..b2aebc06 100644
--- a/Assets/AirConsole/ProjectCodeUpdater.cs
+++ b/Assets/AirConsole/ProjectCodeUpdater.cs
@@ -30,10 +30,12 @@ private static void ImportCodePackage() {
// In 2.6.0, this was moved to Assets/AirConsole/scripts/Editor/Assets/AirConsoleIcon.png with editor icon focused import settings.
AssetDatabase.DeleteAsset("Assets/AirConsole/resources/AirConsoleLogo.png");
- AssetDatabase.DeleteAsset("Assets/AirConsole/examples");
- AssetDatabase.DeleteAsset("Assets/AirConsole/scripts");
- AssetDatabase.DeleteAsset("Assets/AirConsole/unity-webview");
- AssetDatabase.Refresh();
+ if (RequiresStructureCleanup()) {
+ AssetDatabase.DeleteAsset("Assets/AirConsole/examples");
+ AssetDatabase.DeleteAsset("Assets/AirConsole/scripts");
+ AssetDatabase.DeleteAsset("Assets/AirConsole/unity-webview");
+ AssetDatabase.Refresh();
+ }
// Because the AssetDatabase refresh happens asynchronously at the end of the editor loop, we must use delayedCall to
// execute the package import. Otherwise, files like AirConsole.cs that must be imported in the 'scripts/Runtime' directory
@@ -50,6 +52,16 @@ private static void ExecuteCodePackageImport() {
AssetDatabase.DeleteAsset($"Assets/AirConsole/{nameof(ProjectCodeUpdater)}.cs");
AssetDatabase.DeleteAsset(CodePackagePath.Replace(Application.dataPath, "Assets"));
}
+
+ private static bool RequiresStructureCleanup() {
+ string legacyAirConsolePath = Path.Combine(Application.dataPath, "AirConsole", "scripts", "AirConsole.cs");
+ string runtimeAirConsolePath = Path.Combine(Application.dataPath, "AirConsole", "scripts", "Runtime", "AirConsole.cs");
+
+ bool legacyExists = File.Exists(legacyAirConsolePath);
+ bool runtimeExists = File.Exists(runtimeAirConsolePath);
+
+ return legacyExists && !runtimeExists;
+ }
}
}
#endif
diff --git a/Assets/AirConsole/examples/basic/AudioManager.cs b/Assets/AirConsole/examples/basic/AudioManager.cs
new file mode 100644
index 00000000..405c11e5
--- /dev/null
+++ b/Assets/AirConsole/examples/basic/AudioManager.cs
@@ -0,0 +1,34 @@
+#if !DISABLE_AIRCONSOLE
+namespace NDream.AirConsole.Examples {
+ using NDream.AirConsole;
+ using UnityEngine;
+
+ ///
+ /// Example Audio Player that starts playing when the game is ready and stops when the game ends.
+ /// It also listens to volume changes and adjusts the audio accordingly.
+ ///
+ public class AudioManager : MonoBehaviour {
+ // We are using a Platform Script Defines here to avoid extra code to handle non-Android runtime platforms.
+#if UNITY_ANDROID && !UNITY_EDITOR
+ private void Awake() {
+ // Until OnReady is called, we don't want any audio from Unity playing as the webview Player Lobby overlay will be shown.
+ AudioListener.pause = true;
+
+ AirConsole.instance.OnGameAudioFocusChanged += HandleGameAudioFocusChange;
+ }
+
+ private void OnDestroy() {
+ if (AirConsole.instance) {
+ AirConsole.instance.OnGameAudioFocusChanged -= HandleGameAudioFocusChange;
+ }
+ }
+
+ private void HandleGameAudioFocusChange(bool hasAudioFocus, float newMaximumVolume) {
+ AirConsoleLogger.Log(() => $"HandleGameAudioFocusChange({hasAudioFocus},{newMaximumVolume})");
+ AudioListener.volume = newMaximumVolume;
+ AudioListener.pause = !hasAudioFocus;
+ }
+#endif
+ }
+}
+#endif
diff --git a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs.meta b/Assets/AirConsole/examples/basic/AudioManager.cs.meta
similarity index 83%
rename from Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs.meta
rename to Assets/AirConsole/examples/basic/AudioManager.cs.meta
index 2d862b52..ab748cc6 100644
--- a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs.meta
+++ b/Assets/AirConsole/examples/basic/AudioManager.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 0b2f5f306eb6e4afcbc074e6efccc188
+guid: f8eacf087b9954b9bab975cd1a0e968c
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/AirConsole/examples/basic/AudioPlayer.cs b/Assets/AirConsole/examples/basic/AudioPlayer.cs
deleted file mode 100644
index f4170267..00000000
--- a/Assets/AirConsole/examples/basic/AudioPlayer.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-#if !DISABLE_AIRCONSOLE
-namespace NDream.AirConsole.Examples {
- using NDream.AirConsole;
- using UnityEngine;
-
- ///
- /// Example Audio Player that starts playing when the game is ready and stops when the game ends.
- /// It also listens to volume changes and adjusts the audio accordingly.
- ///
- [RequireComponent(typeof(AudioSource))]
- public class AudioPlayer : MonoBehaviour {
- private AudioSource _audioSource;
-
- private void Awake() {
- _audioSource = GetComponent();
- if (!_audioSource) {
- AirConsoleLogger.LogError(() => "AudioPlayer requires an AudioSource component.", this);
- enabled = false;
- return;
- }
-
- SetupAudioSource();
- AirConsole.instance.onReady += HandleOnReady;
- AirConsole.instance.onGameEnd += HandleOnGameEnd;
-
- // Until OnReady is called, we don't want any audio from Unity playing as the Player Lobby overlay will be shown.
- AudioListener.pause = true;
- }
-
- private void SetupAudioSource() {
- _audioSource.playOnAwake = false;
- _audioSource.loop = true;
- _audioSource.volume = 1.0f;
- if (!_audioSource.clip) {
- _audioSource.clip = Resources.Load("Audio/Music/Happy_1");
- }
- }
-
- private void HandleOnGameEnd() {
- // After OnGameEnd is called, we must not play any audio until OnReady is called again. During this time the Player Lobby
- // overlay will be shown.
- AudioListener.pause = true;
- }
-
- private void HandleOnReady(string code) {
- AirConsoleLogger.Log(() => $"OnReady for {code}");
- AudioListener.pause = false;
- _audioSource.Play();
- }
-
- private void HandleAudioVolumeChange(float volume) {
- AirConsoleLogger.Log(() => $"Setting volume to {volume}");
- if (volume > 0) {
- AudioListener.pause = false;
- AudioListener.volume = volume;
- _audioSource.Play();
- } else if (Mathf.Approximately(0, volume)) {
- AudioListener.pause = true;
- }
- }
- }
-}
-#endif
diff --git a/Assets/AirConsole/examples/basic/basic.unity b/Assets/AirConsole/examples/basic/basic.unity
index 5a6e07ed..4e382aa8 100644
--- a/Assets/AirConsole/examples/basic/basic.unity
+++ b/Assets/AirConsole/examples/basic/basic.unity
@@ -3155,6 +3155,7 @@ GameObject:
m_Component:
- component: {fileID: 841124342}
- component: {fileID: 841124341}
+ - component: {fileID: 841124343}
m_Layer: 0
m_Name: AirConsole
m_TagString: Untagged
@@ -3176,7 +3177,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
controllerHtml: {fileID: 4900000, guid: 24d0ea9f52a200b479f21be5710f94ac, type: 3}
autoScaleCanvas: 1
- androidGameVersion: 2025-05-27-12-55-11
+ androidGameVersion: 2025-10-14-07-07-52
androidUIResizeMode: 0
webViewLoadingSprite: {fileID: 0}
nativeGameSizingSupported: 0
@@ -3199,6 +3200,18 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &841124343
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 841124340}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f8eacf087b9954b9bab975cd1a0e968c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &878053057
GameObject:
m_ObjectHideFlags: 0
@@ -4467,147 +4480,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1064712596}
m_CullTransparentMesh: 0
---- !u!1 &1070081529
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1070081532}
- - component: {fileID: 1070081531}
- - component: {fileID: 1070081530}
- m_Layer: 0
- m_Name: AudioPlayer
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1070081530
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1070081529}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: d33481c3f96324d4bba3e5db8826fd6e, type: 3}
- m_Name:
- m_EditorClassIdentifier:
---- !u!82 &1070081531
-AudioSource:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1070081529}
- m_Enabled: 1
- serializedVersion: 4
- OutputAudioMixerGroup: {fileID: 0}
- m_audioClip: {fileID: 8300000, guid: 804632e1e46684476b4ea5f752e8df15, type: 3}
- m_PlayOnAwake: 0
- m_Volume: 1
- m_Pitch: 1
- Loop: 1
- Mute: 0
- Spatialize: 0
- SpatializePostEffects: 0
- Priority: 128
- DopplerLevel: 1
- MinDistance: 1
- MaxDistance: 500
- Pan2D: 0
- rolloffMode: 0
- BypassEffects: 0
- BypassListenerEffects: 0
- BypassReverbZones: 0
- rolloffCustomCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 1
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- panLevelCustomCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- spreadCustomCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- reverbZoneMixCustomCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
---- !u!4 &1070081532
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1070081529}
- serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0.36577117, y: -0.17775297, z: 0.030780792}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 0}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1087830224
GameObject:
m_ObjectHideFlags: 0
@@ -4753,6 +4625,7 @@ GameObject:
- component: {fileID: 1158769764}
- component: {fileID: 1158769762}
- component: {fileID: 1158769761}
+ - component: {fileID: 1158769766}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@@ -4842,6 +4715,19 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1158769766
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1158769760}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a1b5c6dd8de3e4b4fafb3c384af7e1d2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ targetCamera: {fileID: 1158769764}
--- !u!1 &1179297375
GameObject:
m_ObjectHideFlags: 0
@@ -5381,6 +5267,134 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1493791325}
m_CullTransparentMesh: 0
+--- !u!1 &1506040750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1506040753}
+ - component: {fileID: 1506040752}
+ m_Layer: 0
+ m_Name: AudioPlayer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!82 &1506040752
+AudioSource:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1506040750}
+ m_Enabled: 1
+ serializedVersion: 4
+ OutputAudioMixerGroup: {fileID: 0}
+ m_audioClip: {fileID: 8300000, guid: 804632e1e46684476b4ea5f752e8df15, type: 3}
+ m_PlayOnAwake: 1
+ m_Volume: 1
+ m_Pitch: 1
+ Loop: 1
+ Mute: 0
+ Spatialize: 0
+ SpatializePostEffects: 0
+ Priority: 128
+ DopplerLevel: 1
+ MinDistance: 1
+ MaxDistance: 500
+ Pan2D: 0
+ rolloffMode: 0
+ BypassEffects: 0
+ BypassListenerEffects: 0
+ BypassReverbZones: 0
+ rolloffCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 1
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ panLevelCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ spreadCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ reverbZoneMixCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+--- !u!4 &1506040753
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1506040750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.36577117, y: -0.17775297, z: 0.030780792}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1521427270
GameObject:
m_ObjectHideFlags: 0
@@ -7698,4 +7712,4 @@ SceneRoots:
- {fileID: 607279077}
- {fileID: 1179297379}
- {fileID: 535473225}
- - {fileID: 1070081532}
+ - {fileID: 1506040753}
diff --git a/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar b/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar
index e8d0a560..d107448a 100644
Binary files a/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar and b/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar differ
diff --git a/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef b/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef
index 216e967d..d2150dcc 100644
--- a/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef
+++ b/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef
@@ -1,23 +1,23 @@
{
- "name": "AirConsole.Editor",
- "rootNamespace": "NDream.AirConsole.Editor",
- "references": [
- "AirConsole.Runtime",
- "UnityEditor.UI"
- ],
- "includePlatforms": [
- "Editor"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": false,
- "overrideReferences": true,
- "precompiledReferences": [
- "Newtonsoft.Json.dll"
- ],
- "autoReferenced": true,
- "defineConstraints": [
- "UNITY_2022_3_OR_NEWER"
- ],
- "versionDefines": [],
- "noEngineReferences": false
+ "name": "AirConsole.Editor",
+ "rootNamespace": "NDream.AirConsole.Editor",
+ "references": [
+ "AirConsole.Runtime",
+ "UnityEditor.UI"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "Newtonsoft.Json.dll"
+ ],
+ "autoReferenced": true,
+ "defineConstraints": [
+ "UNITY_2022_3_OR_NEWER"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs b/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs
index 3167aca3..8d898f34 100644
--- a/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs
+++ b/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs
@@ -4,6 +4,7 @@ namespace NDream.AirConsole.Editor {
using System.Collections.Generic;
using System.IO;
using System.Linq;
+ using System.Text.RegularExpressions;
internal abstract class AndroidGradleProcessor {
private const string PROGUARD_CLASSMEMBERS
@@ -11,11 +12,68 @@ private const string PROGUARD_CLASSMEMBERS
internal static void Execute(string basePath) {
UpdateMainGradleProperties(Path.GetFullPath(Path.Combine(basePath, "..")), "gradle.properties");
- UpdateMainGradleTemplate(Path.GetFullPath(basePath), "build.gradle");
+
+ UpdateLibraryGradleTemplate(Path.GetFullPath(basePath), "build.gradle");
UpdateProGuard(Path.GetFullPath(basePath), "proguard-unity.txt");
AirConsoleLogger.LogDevelopment(() => "Updated gradle files for AirConsole Android build");
}
+ private static void UpdateMainGradleTemplate(string basePath, string buildGradle) {
+ string[] lines = File.ReadAllLines(Path.Combine(basePath, buildGradle));
+
+ Regex applicationVersionExtractor
+ = new(@"id 'com.android.application' version '(?\d+)\.(?\d+)\.(?\d+)' apply false");
+ Regex libraryVersionVersionExtractor
+ = new(@"id 'com.android.library' version '(?\d+)\.(?\d+)\.(?\d+)' apply false");
+ bool updated = false;
+ for (int i = 0; i < lines.Length; i++) {
+ // regex to check the used gradle version
+ Match match = applicationVersionExtractor.Match(lines[i]);
+ if (match.Success) {
+ if (int.Parse(match.Groups["Major"].Value) < 8
+ || int.Parse(match.Groups["Minor"].Value) < 1
+ || int.Parse(match.Groups["Build"].Value) < 1) {
+ lines[i] = "id 'com.android.application' version '8.1.1' apply false";
+ updated = true;
+ }
+ } else {
+ match = libraryVersionVersionExtractor.Match(lines[i]);
+ if (match.Success) {
+ if (int.Parse(match.Groups["Major"].Value) < 8
+ || int.Parse(match.Groups["Minor"].Value) < 1
+ || int.Parse(match.Groups["Build"].Value) < 1) {
+ lines[i] = "id 'com.android.library' version '8.1.1' apply false";
+ updated = true;
+ }
+ }
+ }
+ }
+
+ if (updated) {
+ File.WriteAllLines(Path.Combine(basePath, buildGradle), lines);
+ AirConsoleLogger.LogDevelopment(() => "Updated gradle main template");
+ }
+ }
+
+ private static void UpdateGradleWrapperVersion(string basePath, string gradleWrapperProperties) {
+ string[] lines = File.ReadAllLines(Path.Combine(basePath, gradleWrapperProperties));
+ Regex versionExtractor
+ = new(@"^distributionUrl=.*/gradle-(?\d+)\.(?\d+)\.(?\d+)-bin.zip$");
+ for (int i = 0; i < lines.Length; i++) {
+ // regex to check the used gradle version
+ Match match = versionExtractor.Match(lines[i]);
+ if (lines[i].StartsWith("distributionUrl=") && match.Success
+ && (int.Parse(match.Groups["Major"].Value) < 8
+ || int.Parse(match.Groups["Minor"].Value) < 1
+ || int.Parse(match.Groups["Build"].Value) < 1)) {
+ lines[i] = "distributionUrl=https\\://services.gradle.org/distributions/gradle-8.1.1-bin.zip";
+ File.WriteAllLines(Path.Combine(basePath, gradleWrapperProperties), lines);
+ AirConsoleLogger.LogDevelopment(() => $"Updated gradle wrapper to {lines[i]}");
+ return;
+ }
+ }
+ }
+
private static void UpdateProGuard(string basePath, string proguardUnityTxt) {
string filePath = Path.Combine(basePath, proguardUnityTxt);
string fileText = File.ReadAllText(filePath);
@@ -27,7 +85,7 @@ private static void UpdateProGuard(string basePath, string proguardUnityTxt) {
File.WriteAllText(filePath, fileText);
}
- private static void UpdateMainGradleTemplate(string basePath, string gradleTemplateName) {
+ private static void UpdateLibraryGradleTemplate(string basePath, string gradleTemplateName) {
string gradleTemplatePath = Path.Combine(basePath, gradleTemplateName);
string[] initialLines = File.ReadAllText(gradleTemplatePath)
.Replace("\r\n", "\n")
@@ -72,6 +130,10 @@ private static void UpdateMainGradleProperties(string basePath, string gradlePro
lines = "# AirConsole\nandroid.useAndroidX=true\n\n# Unity provided\n" + lines;
}
+ if (!lines.Contains("android.suppressUnsupportedCompileSdk")) {
+ lines += "\nandroid.suppressUnsupportedCompileSdk=35,34";
+ }
+
if (lines != initialLines) {
File.WriteAllText(gradlePropertiesPath, lines);
AirConsoleLogger.LogDevelopment(() =>
diff --git a/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef b/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef
index 8913fa27..b771d892 100644
--- a/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef
+++ b/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef
@@ -1,27 +1,27 @@
{
- "name": "AirConsole.Runtime",
- "rootNamespace": "NDream.AirConsole",
- "references": [
- "Unity.TextMeshPro",
- "UnityEngine.UI",
- "com.airconsole.unity-webview.runtime"
- ],
- "includePlatforms": [
- "Android",
- "Editor",
- "WebGL"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": false,
- "overrideReferences": true,
- "precompiledReferences": [
- "Newtonsoft.Json.dll",
- "websocket-sharp.dll"
- ],
- "autoReferenced": true,
- "defineConstraints": [
- "UNITY_2022_3_OR_NEWER"
- ],
- "versionDefines": [],
- "noEngineReferences": false
+ "name": "AirConsole.Runtime",
+ "rootNamespace": "NDream.AirConsole",
+ "references": [
+ "Unity.TextMeshPro",
+ "UnityEngine.UI",
+ "com.airconsole.unity-webview.runtime"
+ ],
+ "includePlatforms": [
+ "Android",
+ "Editor",
+ "WebGL"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "Newtonsoft.Json.dll",
+ "websocket-sharp.dll"
+ ],
+ "autoReferenced": true,
+ "defineConstraints": [
+ "UNITY_2022_3_OR_NEWER"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/AirConsole/scripts/Runtime/AirConsole.cs b/Assets/AirConsole/scripts/Runtime/AirConsole.cs
index 652ed02e..3015d897 100644
--- a/Assets/AirConsole/scripts/Runtime/AirConsole.cs
+++ b/Assets/AirConsole/scripts/Runtime/AirConsole.cs
@@ -1,19 +1,20 @@
#if !UNITY_EDITOR && UNITY_ANDROID
#define AIRCONSOLE_ANDROID_RUNTIME
#endif
-using UnityEngine;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System;
-using System.Diagnostics;
-using NDream.AirConsole.Android.Plugin;
-using WebSocketSharp.Server;
-using Newtonsoft.Json.Linq;
-using UnityEngine.Serialization;
-using Debug = UnityEngine.Debug;
-using UnityEngine.SceneManagement;
namespace NDream.AirConsole {
+ using NDream.AirConsole.Android.Plugin;
+ using Newtonsoft.Json.Linq;
+ using System.Collections.Generic;
+ using System.Collections.ObjectModel;
+ using System.Diagnostics;
+ using System.Threading;
+ using System;
+ using UnityEngine.SceneManagement;
+ using UnityEngine.Serialization;
+ using UnityEngine;
+ using WebSocketSharp.Server;
+
public enum StartMode {
VirtualControllers,
Debug,
@@ -62,6 +63,13 @@ public enum AndroidUIResizeMode {
public delegate void OnResume();
+ ///
+ /// Used to notify the game about changes to audio focus and maximum allowed volume.
+ ///
+ /// True, if the application has AudioFocus. Otherwise the application should stop all audio playback e.g. AudioListener.pause = !hasAudioFocus
+ /// The received volume is a float value between 0.0 (muted) and 1.0 (maximum volume).
+ public delegate void OnGameAudioFocusChanged(bool hasAudioFocus, float newMaximumVolume);
+
///
/// Gets called when the safe area of the screen changes.
/// This event provides information about the visible area of the screen where your
@@ -72,7 +80,6 @@ public enum AndroidUIResizeMode {
public class AirConsole : MonoBehaviour {
#region airconsole unity config
-
[Tooltip("The controller html file for your game")]
public UnityEngine.Object controllerHtml;
@@ -107,15 +114,14 @@ public class AirConsole : MonoBehaviour {
[Tooltip("Language used in the simulator during play mode.")]
public string devLanguage;
- [Tooltip("Used as local IP instead of your public IP in Unity Editor. Use this to use the controller together with ngrok")]
+ [Tooltip(
+ "Used as local IP instead of your public IP in Unity Editor. Use this to use the controller together with ngrok")]
public string LocalIpOverride;
-
#endregion
#if !DISABLE_AIRCONSOLE
#region airconsole api
-
// ReSharper disable MemberCanBePrivate.Global UnusedMember.Global
///
@@ -261,6 +267,17 @@ public static AirConsole instance {
///
public event OnResume onResume;
+ ///
+ /// Used to notify the game about changes to audio focus and maximum allowed volume.
+ /// This must be implemented for Android based games and must be registered before OnReady is invoked.
+ ///
+ /// True, if the application has AudioFocus. Otherwise the application should stop all audio playback e.g. AudioListener.pause = !hasAudioFocus
+ /// The received volume is a float value between 0.0 (muted) and 1.0 (maximum volume).
+ public event OnGameAudioFocusChanged OnGameAudioFocusChanged;
+
+ private bool _canHaveAudioFocus = true;
+ private bool _ignoreAudioFocusLoss = true;
+
internal event Action UnityDestroy;
internal event Action UnityResume;
internal event Action UnityPause;
@@ -358,7 +375,7 @@ public int GetDeviceId() {
/// are active players by calling getActivePlayerDeviceIds().
/// The screen can call this function every time a game round starts.
///
- /// The maximum number of controllers that should
+ /// The maximum number of controllers that should
/// get a player number assigned.
public void SetActivePlayers(int max_players = -1) {
if (!IsAirConsoleUnityPluginReady()) {
@@ -593,7 +610,8 @@ public void TranslateUIElements(object[] elements) {
///
/// The uid for which you want a profile picture. Screens don't have profile pictures.
/// The size of in pixels of the picture. Default is 64.
- public string GetProfilePicture(string uid, int size = 64) => $"{Settings.AIRCONSOLE_PROFILE_PICTURE_URL}{uid}&size={size}";
+ public string GetProfilePicture(string uid, int size = 64) =>
+ $"{Settings.AIRCONSOLE_PROFILE_PICTURE_URL}{uid}&size={size}";
///
/// Returns the url to a profile picture of a user.
@@ -611,7 +629,10 @@ public string GetProfilePicture(int device_id = -1, int size = 64) {
if (GetDevice(GetDeviceId()) != null) {
try {
- return Settings.AIRCONSOLE_PROFILE_PICTURE_URL + (string)GetDevice(device_id)["uid"] + "&size=" + size;
+ return Settings.AIRCONSOLE_PROFILE_PICTURE_URL
+ + (string)GetDevice(device_id)["uid"]
+ + "&size="
+ + size;
} catch (Exception) {
if (Settings.debug.warning) {
AirConsoleLogger.LogWarning(() =>
@@ -717,8 +738,8 @@ public void SetCustomDeviceStateProperty(string key, object value) {
JToken custom = _devices[0]["custom"];
if (custom == null) {
- JObject new_custom = new();
- _devices[0]["custom"] = JToken.FromObject(new_custom);
+ JObject newCustom = new();
+ _devices[0]["custom"] = JToken.FromObject(newCustom);
}
@@ -823,7 +844,8 @@ public bool IsUserLoggedIn(int device_id = -1) {
/// An array of high score rank types. High score rank types can include data from across the world, only a specific area or a users friends. Valid array entries are "world", "country", "region", "city", "friends", "partner". Default is ["world"].
/// Amount of high scores to return per rank type. Default is 8.
/// Amount of top high scores to return per rank type. top is part of total. Default is 5.
- public void RequestHighScores(string level_name, string level_version, List uids = null, List ranks = null,
+ public void RequestHighScores(string level_name, string level_version, List uids = null,
+ List ranks = null,
int total = -1, int top = -1) {
if (!IsAirConsoleUnityPluginReady()) {
throw new NotReadyException();
@@ -874,7 +896,8 @@ public void RequestHighScores(string level_name, string level_version, ListCustom high score data (e.g. can be used to implement Ghost modes or include data to verify that it is not a fake high score).
/// A short human readable representation of the score. (e.g. "4 points in 3s"). Defaults to "X points" where x is the score converted to an integer.
///
- public void StoreHighScore(string level_name, string level_version, float score, string uid, JObject data = null,
+ public void StoreHighScore(string level_name, string level_version, float score, string uid,
+ JObject data = null,
string score_string = null) {
List uids = new();
uids.Add(uid);
@@ -892,7 +915,8 @@ public void StoreHighScore(string level_name, string level_version, float score,
/// Custom high score data (e.g. can be used to implement Ghost modes or include data to verify that it is not a fake high score).
/// A short human readable representation of the score. (e.g. "4 points in 3s"). Defaults to "X points" where x is the score converted to an integer.
///
- public void StoreHighScore(string level_name, string level_version, float score, List uids, JObject data = null,
+ public void StoreHighScore(string level_name, string level_version, float score, List uids,
+ JObject data = null,
string score_string = null) {
if (!IsAirConsoleUnityPluginReady()) {
throw new NotReadyException();
@@ -926,9 +950,7 @@ public void StoreHighScore(string level_name, string level_version, float score,
///
/// Gets thrown when you call an API method before OnReady was called.
///
- public class NotReadyException : SystemException {
- public NotReadyException() : base() { }
- }
+ public class NotReadyException : SystemException { }
///
/// Requests persistent data from the servers.
@@ -1103,20 +1125,23 @@ public void SetImmersiveState(JObject payload) {
#endregion
#region unity functions
-
protected void Awake() {
if (instance != this) {
Destroy(gameObject);
}
- // always set default object name
- // important for unity webgl communication
+ // Always set default object name
+ // Critical for unity webgl communication
gameObject.name = "AirConsole";
if (IsAndroidRuntime) {
- AirConsoleLogger.Log(() => $"Launching build {Application.version} in Unity v{Application.unityVersion}");
+ AirConsoleLogger.Log(() =>
+ $"Launching build {Application.version} in Unity v{Application.unityVersion}");
+ defaultScreenHeight = Screen.height;
_pluginManager = new PluginManager(this);
+ _pluginManager.OnUpdateVolume += HandleOnMaxVolumeChanged;
+ _pluginManager.OnAudioFocusChange += HandleNativeAudioFocusChanged;
}
}
@@ -1172,7 +1197,7 @@ private void InitWebSockets() {
wsListener.onResume += OnResume;
if (Application.isEditor) {
- // start websocket connection
+ // Start websocket and connection
wsServer = new WebSocketServer(Settings.webSocketPort);
wsServer.AddWebSocketService(Settings.WEBSOCKET_PATH, () => wsListener);
wsServer.Start();
@@ -1182,7 +1207,7 @@ private void InitWebSockets() {
}
} else {
if (Application.platform == RuntimePlatform.WebGLPlayer) {
- // call external javascript init function
+ // Call external javascript init function
Application.ExternalCall("onGameReady", autoScaleCanvas);
}
}
@@ -1201,7 +1226,8 @@ private void HandlePlatformReady(JObject msg) {
internal void SetSafeArea(JObject msg) {
JObject safeAreaObj = msg.SelectToken("safeArea")?.Value();
if (safeAreaObj == null) {
- throw new UnityException($"OnSetSafeArea called without safeArea property in the message: {msg.ToString()}");
+ throw new UnityException(
+ $"OnSetSafeArea called without safeArea property in the message: {msg.ToString()}");
}
eventQueue.Enqueue(delegate {
@@ -1217,7 +1243,6 @@ private void RefreshSafeArea(JObject safeAreaObj) {
float height = Screen.height * heightValue;
float width = Screen.width * GetFloatFromMessage(safeAreaObj, "width", 1);
- // TODO(Marc) Update when we send width / height that are no longer bottom / right
Rect safeArea = new() {
y = y,
height = height,
@@ -1226,9 +1251,11 @@ private void RefreshSafeArea(JObject safeAreaObj) {
};
SafeArea = safeArea;
- if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera or AndroidUIResizeMode.ResizeCameraAndReferenceResolution
+ if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera
+ or AndroidUIResizeMode.ResizeCameraAndReferenceResolution
&& Camera.main) {
- AirConsoleLogger.LogDevelopment(() => $"Original pixelRect {Camera.main.pixelRect}, new pixelRect {safeArea}");
+ AirConsoleLogger.LogDevelopment(() =>
+ $"Original pixelRect {Camera.main.pixelRect}, new pixelRect {safeArea}");
Camera.main.pixelRect = safeArea;
}
@@ -1247,15 +1274,18 @@ protected void Update() {
_runtimeConfigurator?.RefreshConfiguration();
if (IsAndroidRuntime) {
- //back button on TV remotes
+ // Back button on TV remotes
if (Input.GetKeyDown(KeyCode.Escape)) {
Application.Quit();
}
}
}
+ protected void LateUpdate() => ProcessEvents();
+
+ protected void FixedUpdate() => ProcessEvents();
+
private void ProcessEvents() {
- // dispatch event queue on main unity thread
while (eventQueue.Count > 0) {
eventQueue.Dequeue().Invoke();
}
@@ -1288,11 +1318,9 @@ public static T ACFindObjectOfType() where T : UnityEngine.Object {
return FindFirstObjectByType();
#endif
}
-
#endregion
#region internal functions
-
private void OnDeviceStateChange(JObject msg) {
if (msg["device_id"] == null) {
return;
@@ -1414,7 +1442,68 @@ private void OnMessage(JObject msg) {
}
}
+ private void RequestAudioFocus() {
+ if (!_canHaveAudioFocus) {
+ AirConsoleLogger.Log(() => "AirConsole: Not requesting audio focus because the app is not allowed.");
+ return;
+ }
+
+ if (IsAndroidRuntime) {
+ HasAudioFocus = _pluginManager.RequestAudioFocus();
+ } else {
+ HasAudioFocus = true;
+ }
+
+ if (!HasAudioFocus) {
+ AirConsoleLogger.LogError(() =>
+ "AirConsole: Failed to obtain audio focus. Audio may not work as expected. Should pause platform");
+ }
+ }
+
+ private void AbandonAudioFocus() {
+ HasAudioFocus = false;
+ if (IsAndroidRuntime) {
+ _pluginManager.AbandonAudioFocus();
+ }
+ }
+
+ private bool _firstReady = true;
+
+ // TODO(QAB-14400, QAB-14401): This does not yet work correctly - when going to web, we lose audio focus and due to that
+ // we do not regain it when coming back from web in OnReady. We need to distinguish between the two paths
private void OnReady(JObject msg) {
+ _ignoreAudioFocusLoss = false;
+ if (_firstReady) {
+ _firstReady = false;
+ _canHaveAudioFocus = true;
+ }
+
+ RequestAudioFocus();
+ if (Application.platform == RuntimePlatform.Android) {
+ // Android based games must respect the volume change requests so we can correctly handle Android AudioFocus behavior as
+ // demanded by Automotive on one side and Android 33+ on the other side.
+ if (OnGameAudioFocusChanged == null || OnGameAudioFocusChanged.GetInvocationList().Length == 0) {
+#if UNITY_EDITOR
+ UnityEditor.EditorApplication.isPlaying = false;
+ throw new Exception("No listeners registered to OnGameAudioFocusChanged. Editor playback stopped.");
+#else
+ throw new Exception("No listeners registered to OnGameAudioFocusChanged.");
+#endif
+ }
+
+ if (!Application.isEditor) {
+ webViewObject.AbandonUnityAudioFocus();
+
+ // TODO(PRO-1637): Implement the necessary pieces to properly handle AudioFocus changes on Android in conjunction with
+ // WebView and the AirConsole Unity Plugin.
+ }
+ } else {
+ if (OnGameAudioFocusChanged != null && OnGameAudioFocusChanged.GetInvocationList().Length > 0) {
+ AirConsoleLogger.Log(() =>
+ "Registration to event OnGameAudioFocusChanged identified. This will only be called when running on Android devices.");
+ }
+ }
+
// Queue all state modifications to run on the Unity main thread to avoid race conditions
eventQueue.Enqueue(delegate() {
if (webViewLoadingCanvas) {
@@ -1456,6 +1545,8 @@ private void OnReady(JObject msg) {
_devices.Add(assign);
}
+ _receivedReady = true;
+
if (onReady != null) {
onReady((string)msg["code"]);
}
@@ -1550,6 +1641,7 @@ private void ResetCaches(Action taskToQueueAfterClear) {
_server_time_offset = 0;
_location = null;
_translations = null;
+ _receivedReady = false;
// Reset safe area
_safeAreaWasSet = false;
@@ -1611,7 +1703,12 @@ private void CleanupWebSocketListener() {
AirConsoleLogger.LogDevelopment(() => "WebSocket listener cleanup complete");
}
- private void RecreateWebView() {
+ private void ReloadWebView() {
+ if (!_receivedReady) {
+ AirConsoleLogger.LogDevelopment(() => "Skipping reload. We have not yet left the Player Lobby.");
+ return;
+ }
+
if (string.IsNullOrEmpty(_webViewOriginalUrl) || string.IsNullOrEmpty(_webViewConnectionUrl)) {
List missingComponents = new();
if (string.IsNullOrEmpty(_webViewOriginalUrl)) {
@@ -1627,32 +1724,17 @@ private void RecreateWebView() {
return;
}
- AirConsoleLogger.LogDevelopment(() => $"Recreating webview with URL: {_webViewOriginalUrl}");
-
- // Cleanup websocket listener first to prevent stale events
- CleanupWebSocketListener();
-
- // Reset webview manager
- _webViewManager = null;
-
- // Destroy the old webview
if (webViewObject) {
- if (_pluginManager != null && _reloadWebviewHandler != null) {
- _pluginManager.OnReloadWebview -= _reloadWebviewHandler;
- _reloadWebviewHandler = null;
- }
-
- webViewObject.Destroy();
-
- Destroy(webViewObject.gameObject);
- webViewObject = null;
+ AirConsoleLogger.LogDevelopment(() => $"Reloading webview with URL: {_webViewOriginalUrl}");
+ LoadAndroidWebviewUrl(_webViewOriginalUrl);
+ } else {
+ AirConsoleLogger.LogError(() => "Reloading webview failed, no webViewObject found.");
}
-
- // Recreate the webview with stored connection URL
- CreateAndroidWebview(_webViewConnectionUrl);
}
private void OnGameEnd(JObject msg) {
+ _ignoreAudioFocusLoss = true;
+ AbandonAudioFocus();
_webViewManager.RequestStateTransition(WebViewManager.WebViewState.FullScreen);
try {
@@ -1672,7 +1754,7 @@ private void OnGameEnd(JObject msg) {
eventQueue.Enqueue(delegate {
// We want to chain RecreateWebView to ensure it happens independent of
// the eventQueue getting cleared and related side effects.
- ResetCaches(RecreateWebView);
+ ResetCaches(ReloadWebView);
});
} catch (Exception e) {
if (Settings.debug.error) {
@@ -1796,6 +1878,8 @@ private void OnPremium(JObject msg) {
}
private void OnPause(JObject msg) {
+ AbandonAudioFocus();
+
try {
if (onPause != null) {
eventQueue.Enqueue(delegate() {
@@ -1816,6 +1900,9 @@ private void OnPause(JObject msg) {
}
private void OnResume(JObject msg) {
+ // When we resume, we can have audio focus again.
+ _canHaveAudioFocus = true;
+ RequestAudioFocus();
try {
if (onResume != null) {
eventQueue.Enqueue(delegate() {
@@ -1857,6 +1944,24 @@ public ReadOnlyCollection ActivePlayerDeviceIds {
get => _players.AsReadOnly();
}
+ ///
+ /// Maximum Audio Volume allowed at this time.
+ /// A value of 0 indicates, that the game should be muted right now and all audio output should be paused.
+ /// A value of 1 indicates, that the game can play audio at full volume.
+ /// Values in between should be used to set the volume of the audio output.
+ /// This value can change at any time and you are expected to listen to OnMaximumVolumeChanged and adjust accordingly immediately.
+ ///
+ /// 1
+ public float MaximumAudioVolume { get; private set; } = 1;
+
+ ///
+ /// Does the game currently have audio focus?
+ /// If false, the game should not play any audio at all.
+ /// If true, the game can play audio, respecting the MaximumAudioVolume property.
+ /// This value can change at any time and you are expected to listen to OnGameAudioFocusChanged and adjust accordingly immediately.
+ ///
+ public bool HasAudioFocus { get; private set; } = true;
+
///
/// True, if this is the Android platform running on the device, not the editor.
///
@@ -1891,6 +1996,7 @@ internal static bool IsAndroidOrEditor {
private Action _reloadWebviewHandler;
private PluginManager _pluginManager;
+ private bool _receivedReady = false;
private List _devices = new();
private int _device_id;
private int _server_time_offset;
@@ -1923,14 +2029,13 @@ private void StopWebsocketServer() {
private void OnClose() {
// Queue the clear operation to run on the Unity main thread to avoid race conditions
- eventQueue.Enqueue(delegate() {
- _devices.Clear();
- });
+ eventQueue.Enqueue(delegate() { _devices.Clear(); });
}
public static string GetUrl(StartMode mode) {
bool isHttps = !Application.isEditor
- || (!string.IsNullOrEmpty(instance.LocalIpOverride) && instance.LocalIpOverride.StartsWith("https://"));
+ || (!string.IsNullOrEmpty(instance.LocalIpOverride)
+ && instance.LocalIpOverride.StartsWith("https://"));
string url = isHttps ? Settings.AIRCONSOLE_DEV_URL_HTTPS : Settings.AIRCONSOLE_DEV_URL_HTTP;
if (mode == StartMode.VirtualControllers || mode == StartMode.DebugVirtualControllers) {
url += "simulator/";
@@ -2007,13 +2112,11 @@ private void AllocateDeviceSlots(int i) {
private int GetScaledWebViewHeight() => (int)((float)webViewHeight * Screen.height / defaultScreenHeight);
- private void OnConnectUrlReceived (string connectionUrl) {
+ private void OnConnectUrlReceived(string connectionUrl) {
_pluginManager.OnConnectionUrlReceived -= OnConnectUrlReceived;
eventQueue.Enqueue(delegate {
- // connectionUrl = "client?id=bmw-idc-23&runtimePlatform=android&homeCountry=DE&SwPu=24-11";
CreateAndroidWebview(connectionUrl);
});
-
}
private string ComputeUrlVersion(string version) {
@@ -2027,7 +2130,8 @@ private void InitWebView() {
if (!string.IsNullOrEmpty(androidGameVersion)) {
PrepareWebviewOverlay();
if (Application.isEditor) {
- string connectionUrl = $"client?id=androidunity-{ComputeUrlVersion(Settings.VERSION)}&runtimePlatform=android";
+ string connectionUrl
+ = $"client?id=androidunity-{ComputeUrlVersion(Settings.VERSION)}&runtimePlatform=android";
CreateAndroidWebview(connectionUrl);
} else if (IsAndroidRuntime) {
AirConsoleLogger.LogDevelopment(() =>
@@ -2035,7 +2139,8 @@ private void InitWebView() {
if (_pluginManager.IsInitialized) {
string connectionUrl = _pluginManager.ConnectionUrl;
- AirConsoleLogger.LogDevelopment(() => $"InitWebView: DataProviderInitialized, use connection url {connectionUrl}");
+ AirConsoleLogger.LogDevelopment(() =>
+ $"InitWebView: DataProviderInitialized, use connection url {connectionUrl}");
CreateAndroidWebview(connectionUrl);
} else {
@@ -2075,6 +2180,7 @@ private void PrepareWebviewOverlay() {
} else {
webViewLoadingImage.rectTransform.sizeDelta = new Vector2(Screen.width / 2, Screen.height / 2);
}
+
webViewLoadingImage.preserveAspect = true;
if (!webViewLoadingSprite) {
webViewLoadingImage.sprite = Resources.Load("androidtv-loadingscreen", typeof(Sprite)) as Sprite;
@@ -2083,7 +2189,7 @@ private void PrepareWebviewOverlay() {
private void CreateAndroidWebview(string connectionUrl) {
AirConsoleLogger.LogDevelopment(() => $"CreateAndroidWebview with connection url {connectionUrl}");
- if (webViewObject == null) {
+ if (!webViewObject) {
_webViewConnectionUrl = connectionUrl;
webViewObject = new GameObject("WebViewObject").AddComponent();
@@ -2091,6 +2197,8 @@ private void CreateAndroidWebview(string connectionUrl) {
DontDestroyOnLoad(webViewObject.gameObject);
}
+ webViewObject.SetOnAudioFocusChanged(HandleWebViewAudioFocusChanged);
+
webViewObject.Init(ProcessJS,
err => AirConsoleLogger.LogDevelopment(() => $"AirConsole WebView error: {err}"),
httpError => AirConsoleLogger.LogDevelopment(() => $"AirConsole WebView HttpError: {httpError}"),
@@ -2100,13 +2208,18 @@ private void CreateAndroidWebview(string connectionUrl) {
cookies => AirConsoleLogger.LogDevelopment(() => $"AirConsole WebView cookies: {cookies}"),
true, false);
+ if (IsAndroidRuntime && _pluginManager != null) {
+ _pluginManager.OnReloadWebview += () => webViewObject.Reload();
+ _pluginManager.InitializeOfflineCheck();
+ }
+
string url;
if (IsAndroidRuntime) {
- string urlOverride = AndroidIntentUtils.GetIntentExtraString("base_url", string.Empty);
- url = !string.IsNullOrEmpty(urlOverride) ? urlOverride : Settings.AIRCONSOLE_BASE_URL;
- AirConsoleLogger.LogDevelopment(() => $"BaseURL Override: {urlOverride}");
+ string urlOverride = AndroidIntentUtils.GetIntentExtraString("base_url", string.Empty);
+ url = !string.IsNullOrEmpty(urlOverride) ? urlOverride : Settings.AIRCONSOLE_BASE_URL;
+ AirConsoleLogger.LogDevelopment(() => $"BaseURL Override: {urlOverride}");
} else {
- url = Settings.AIRCONSOLE_BASE_URL;
+ url = Settings.AIRCONSOLE_BASE_URL;
}
url += connectionUrl;
@@ -2115,7 +2228,7 @@ private void CreateAndroidWebview(string connectionUrl) {
}
androidGameVersion = AndroidIntentUtils.GetIntentExtraString("game_version", androidGameVersion);
-
+
url += "&game-id=" + Application.identifier;
url += "&game-version=" + androidGameVersion;
url += "&unity-version=" + Application.unityVersion;
@@ -2126,36 +2239,45 @@ private void CreateAndroidWebview(string connectionUrl) {
_webViewOriginalUrl = url;
_webViewManager = new WebViewManager(webViewObject, defaultScreenHeight);
- webViewObject.SetVisibility(!Application.isEditor);
- AirConsoleLogger.LogDevelopment(() => $"Initial URL: {url}");
- webViewObject.LoadURL(url);
+ LoadAndroidWebviewUrl(url);
- if (IsAndroidRuntime) {
- if (_pluginManager != null) {
- _reloadWebviewHandler = () => webViewObject.LoadURL(url);
- _pluginManager.OnReloadWebview += _reloadWebviewHandler;
- _pluginManager.InitializeOfflineCheck();
+ _logPlatformMessages = AndroidIntentUtils.GetIntentExtraBool("log_platform_messages", false);
+ InitWebSockets();
+ }
+ }
+
+ private void LoadAndroidWebviewUrl(string url) {
+ webViewObject.SetVisibility(!Application.isEditor);
+ AirConsoleLogger.LogDevelopment(() => $"Initial URL: {url}");
+ webViewObject.LoadURL(url);
+
+ if (IsAndroidRuntime) {
+ if (_pluginManager != null) {
+ if (_reloadWebviewHandler != null) {
+ _pluginManager.OnReloadWebview -= _reloadWebviewHandler;
}
- bool isWebviewDebuggable = AndroidIntentUtils.GetIntentExtraBool("webview_debuggable", false);
- webViewObject.EnableWebviewDebugging(isWebviewDebuggable);
+ _reloadWebviewHandler = () => webViewObject.LoadURL(url);
+ _pluginManager.OnReloadWebview += _reloadWebviewHandler;
+ _pluginManager.InitializeOfflineCheck();
}
- _logPlatformMessages = AndroidIntentUtils.GetIntentExtraBool("log_platform_messages", false);
- InitWebSockets();
+ bool isWebviewDebuggable = AndroidIntentUtils.GetIntentExtraBool("webview_debuggable", false);
+ webViewObject.EnableWebviewDebugging(isWebviewDebuggable);
}
}
private static bool ResolveNativeGameSizingSupport(bool fallback) {
- AirconsoleRuntimeSettings settings = Resources.Load(AirconsoleRuntimeSettings.ResourceName);
+ AirconsoleRuntimeSettings settings
+ = Resources.Load(AirconsoleRuntimeSettings.ResourceName);
return settings ? settings.NativeGameSizingSupported : fallback;
}
-
private static int GetAndroidBundleVersionCode() {
AndroidJavaObject ca = UnityAndroidObjectProvider.GetUnityActivity();
AndroidJavaObject packageManager = ca.Call("getPackageManager");
- AndroidJavaObject pInfo = packageManager.Call("getPackageInfo", Application.identifier, 0);
+ AndroidJavaObject pInfo
+ = packageManager.Call("getPackageInfo", Application.identifier, 0);
return pInfo.Get("versionCode");
}
@@ -2167,13 +2289,11 @@ private void OnLaunchApp(JObject msg) {
if (gameId != Application.identifier || gameVersion != instance.androidGameVersion) {
// Marshal to main thread since this is called from WebSocket background thread
- eventQueue.Enqueue(() => {
- StartCoroutine(HandleLaunchAppTransition(msg, gameId, gameVersion));
- });
+ eventQueue.Enqueue(() => HandleLaunchAppTransition(msg, gameId, gameVersion));
}
}
- private System.Collections.IEnumerator HandleLaunchAppTransition(JObject msg, string gameId, string gameVersion) {
+ private void HandleLaunchAppTransition(JObject msg, string gameId, string gameVersion) {
bool quitAfterLaunchIntent = false; // Flag used to force old pre v2.5 way of quitting
if (msg["quit_after_launch_intent"] != null) {
@@ -2184,8 +2304,9 @@ private System.Collections.IEnumerator HandleLaunchAppTransition(JObject msg, st
if (!quitAfterLaunchIntent) {
Application.Quit();
if (_pluginManager == null || !_pluginManager.IsAutomotive()) {
- AirConsoleLogger.LogDevelopment(() => $"Quit and wait for 2 seconds");
- yield return new WaitForSecondsRealtime(2.0f);
+ int waitTime = _pluginManager != null && _pluginManager.IsAutomotive() ? 500 : 2000;
+ AirConsoleLogger.LogDevelopment(() => $"Quit and wait for {waitTime} milliseconds");
+ Thread.Sleep(waitTime);
} else {
AirConsoleLogger.LogDevelopment(() => $"Quit immediately");
}
@@ -2199,11 +2320,10 @@ private System.Collections.IEnumerator HandleLaunchAppTransition(JObject msg, st
if (quitAfterLaunchIntent) {
AirConsoleLogger.LogDevelopment(() => $"Quit after launch intent");
Application.Quit();
- yield break;
+ return;
}
- float timeout = 2.0f;
- yield return new WaitForSecondsRealtime(timeout);
+ Thread.Sleep(_pluginManager != null && _pluginManager.IsAutomotive() ? 500 : 2000);
FinishActivity();
}
@@ -2256,7 +2376,7 @@ private void OnUnityWebviewResize(JObject msg) {
int h = Screen.height;
if (msg["top_bar_height"] != null) {
- h = (int)msg["top_bar_height"] * 2; // todo(android-native): This probably should use the screen dpi scaling factor
+ h = (int)msg["top_bar_height"] * 2; // TODO(android-native): This should use the screen dpi scaling factor
webViewHeight = h;
_webViewManager.SetWebViewHeight(h);
}
@@ -2268,7 +2388,8 @@ private void OnUnityWebviewResize(JObject msg) {
}
if (Camera.main
- && androidUIResizeMode is AndroidUIResizeMode.ResizeCamera or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) {
+ && androidUIResizeMode is AndroidUIResizeMode.ResizeCamera
+ or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) {
Camera.main.pixelRect = GetCameraPixelRect();
}
}
@@ -2295,7 +2416,8 @@ private void OnAndroidSceneLoaded(Scene scene, LoadSceneMode sceneMode) {
return;
}
- if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) {
+ if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera
+ or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) {
Camera.main.pixelRect = GetCameraPixelRect();
}
@@ -2325,6 +2447,159 @@ private void AdaptUGuiLayout() {
}
}
+ #region Audio Focus and Volume
+
+ private bool _nativeGainedAudioFocus;
+ private bool _canIgnoreNativeAudioLoss = true;
+
+ private void HandleOnMaxVolumeChanged(float newMaximumVolume) {
+ MaximumAudioVolume = Mathf.Clamp01(_canHaveAudioFocus ? newMaximumVolume : 0f);
+ AirConsoleLogger.LogDevelopment(() =>
+ $"HandleOnMaxVolumeChanged({newMaximumVolume}) -> {MaximumAudioVolume}. No action taken.");
+
+
+ }
+
+ // TODO(QAB-14400, QAB-14401, QAB-14403): Handle Audio Focus change not yet fully implemented.
+ // Needs testing on various devices and scenarios and requires a more complete state machine.
+ // TODO(QAB-14400, QAB-14401, QAB-14403): Is this actually correct regarding _ignoreAudioFocusLoss which is true from onGameEnd -> onReady?
+ // Plugin Manager Audio Focus change handler
+ private void HandleAudioFocusChange(bool canHaveAudioFocus, bool shallMuteWebview) {
+ AirConsoleLogger.LogDevelopment(() => $"HandleAudioFocusChanged({canHaveAudioFocus})");
+
+ if (!canHaveAudioFocus && _ignoreAudioFocusLoss) {
+ AirConsoleLogger.LogDevelopment(() => "Ignoring audio focus loss until the game is ready.");
+ return;
+ }
+
+ // TODO(PRO-1637): Implement a more complete state machine to handle audio focus changes correctly.
+ _canHaveAudioFocus = canHaveAudioFocus;
+ if (!canHaveAudioFocus) {
+ AirConsoleLogger.LogError(() => "Can have audio focus lost.");
+ }
+
+ MaximumAudioVolume = canHaveAudioFocus ? 1f : 0f;
+ eventQueue.Enqueue(() => OnGameAudioFocusChanged?.Invoke(canHaveAudioFocus, MaximumAudioVolume));
+ }
+
+ // Webview Audio Focus change handler
+ private void HandleWebViewAudioFocusChanged(string command) {
+ HandlePlatformAudioFocusChanged(command);
+ }
+
+ private void HandleNativeAudioFocusChanged(string command) {
+ HandlePlatformAudioFocusChanged(command);
+ }
+
+ private void HandlePlatformAudioFocusChanged(string command) {
+ AirConsoleLogger.LogDevelopment(() => $"HandlePlatformAudioFocusChanged('{command}')");
+ if (string.IsNullOrEmpty(command)) {
+ AirConsoleLogger.LogError(() => "Audio focus command was null or empty.");
+ return;
+ }
+
+ if (command.StartsWith("WEBVIEW_AUDIOFOCUS_", StringComparison.Ordinal)) {
+ HandleWebViewAudioFocusEvent(command);
+ return;
+ }
+
+ if (command.StartsWith("NATIVE_AUDIOFOCUS_", StringComparison.Ordinal)) {
+ HandleNativeAudioFocusEvent(command);
+ return;
+ }
+
+ AirConsoleLogger.LogError(() => $"Unknown audio focus command: {command}");
+ }
+
+ private void HandleWebViewAudioFocusEvent(string command) {
+ switch (command) {
+ case "WEBVIEW_AUDIOFOCUS_START":
+ break;
+ case "WEBVIEW_AUDIOFOCUS_STOP":
+ break;
+ case "WEBVIEW_AUDIOFOCUS_GAIN":
+ case "WEBVIEW_AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE":
+ case "WEBVIEW_AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK":
+ case "WEBVIEW_AUDIOFOCUS_GAIN_TRANSIENT":
+ AirConsoleLogger.Log(() =>
+ $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}");
+ HasAudioFocus = true;
+ _ignoreAudioFocusLoss = true;
+ break;
+ case "WEBVIEW_AUDIOFOCUS_LOSS":
+ AirConsoleLogger.Log(() =>
+ $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}");
+
+ if (_nativeGainedAudioFocus) {
+ return;
+ }
+
+ _ignoreAudioFocusLoss = false;
+ HandleAudioFocusChange(false, true);
+ break;
+
+ case "WEBVIEW_AUDIOFOCUS_LOSS_TRANSIENT":
+ case "WEBVIEW_AUDIOFOCUS_LOSS_CAN_DUCK":
+ break;
+
+ // This is fired when we ask the webview to abandon audio focus.
+ case "WEBVIEW_AUDIOFOCUS_ABANDON":
+ break;
+
+ default:
+ AirConsoleLogger.LogError(() => $"Unknown audio focus command from webview: {command}");
+ break;
+ }
+ }
+
+ private void HandleNativeAudioFocusEvent(string command) {
+ switch (command) {
+ case "NATIVE_AUDIOFOCUS_GAIN":
+ case "NATIVE_AUDIOFOCUS_GAIN_TRANSIENT":
+ case "NATIVE_AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE":
+ case "NATIVE_AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK":
+ AirConsoleLogger.Log(() =>
+ $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}");
+ HasAudioFocus = true;
+ _ignoreAudioFocusLoss = false;
+ _nativeGainedAudioFocus = true;
+
+ HandleAudioFocusChange(true, true);
+
+ break;
+
+ case "NATIVE_AUDIOFOCUS_LOSS":
+ AirConsoleLogger.Log(() =>
+ $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}");
+
+ if (_canIgnoreNativeAudioLoss) {
+ _canIgnoreNativeAudioLoss = false;
+ return;
+ }
+
+ _nativeGainedAudioFocus = false;
+ _ignoreAudioFocusLoss = false;
+ HandleAudioFocusChange(false, true);
+
+ break;
+ case "NATIVE_AUDIOFOCUS_LOSS_TRANSIENT":
+ case "NATIVE_AUDIOFOCUS_LOSS_CAN_DUCK":
+ break;
+ case "NATIVE_AUDIOFOCUS_ABANDON":
+ _nativeGainedAudioFocus = false;
+ _ignoreAudioFocusLoss = false;
+ HandleAudioFocusChange(true, false);
+ break;
+
+ case "NATIVE_AUDIOFOCUS_NONE":
+ break;
+ default:
+ AirConsoleLogger.LogError(() => $"Unknown audio focus command from native plugin: {command}");
+ break;
+ }
+ }
+ #endregion Audio Focus and Volume
+
///
/// Called when there is an update for the content provider.
///
@@ -2356,17 +2631,9 @@ private static float GetFloatFromMessage(JObject msg, string name, int defaultVa
!string.IsNullOrEmpty((string)msg[name])
? (float)msg[name]
: defaultValue;
-
#endregion
#region AirConsole Internal
-
- internal event Action OnApplicationFocusChanged;
-
- private void OnApplicationFocus(bool hasFocus) {
- OnApplicationFocusChanged?.Invoke(hasFocus);
- }
-
///
/// Sends a message to the platform.
///
@@ -2378,7 +2645,6 @@ internal void SendPlatformMessage(JObject msg) {
wsListener.Message(msg);
}
-
#endregion AirConsole Internal
#endif
diff --git a/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs
new file mode 100644
index 00000000..61fd8841
--- /dev/null
+++ b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+
+namespace NDream.AirConsole {
+ ///
+ /// Provides runtime access to the native game sizing setting that is configured in the editor.
+ ///
+ public sealed class NativeGameSizingSettings : ScriptableObject {
+ public const string ResourceName = "NativeGameSizingSettings";
+
+ [SerializeField]
+ private bool nativeGameSizingSupported = true;
+
+ public bool NativeGameSizingSupported => nativeGameSizingSupported;
+
+#if UNITY_EDITOR
+ public void SetNativeGameSizingSupported(bool value) {
+ nativeGameSizingSupported = value;
+ }
+#endif
+ }
+}
diff --git a/Assets/AirConsole/examples/basic/AudioPlayer.cs.meta b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs.meta
similarity index 83%
rename from Assets/AirConsole/examples/basic/AudioPlayer.cs.meta
rename to Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs.meta
index a2241e10..d9f4a9e4 100644
--- a/Assets/AirConsole/examples/basic/AudioPlayer.cs.meta
+++ b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: d33481c3f96324d4bba3e5db8826fd6e
+guid: bb1d59c4db4ae47d7b1503189436d1ed
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs b/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs
index c589caf7..7b12ab23 100644
--- a/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs
+++ b/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs
@@ -24,4 +24,4 @@ public void onExecute(T value) {
}
}
}
-#endif
\ No newline at end of file
+#endif
diff --git a/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs b/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs
index b017597b..76913c62 100644
--- a/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs
+++ b/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs
@@ -18,12 +18,13 @@ public class PluginManager {
/// Currently only supports UNITY_ANDROID && !UNITY_EDITOR scenarios.
// ReSharper disable once EventNeverSubscribedTo.Global
internal event Action OnConnectionUrlReceived;
+
+ internal event Action OnUpdateVolume;
+ internal event Action OnAudioFocusChange;
internal PluginManager(AirConsole airConsole) {
- AirConsoleLogger.LogDevelopment(() => $"{nameof(PluginManager)} created.");
-
GenericUnityPluginCallback pauseCallback = new(HandlePlatformPauseEvent);
-
+
UnityPluginStringCallback callback = new(
url => {
IsInitialized = true;
@@ -32,6 +33,17 @@ internal PluginManager(AirConsole airConsole) {
},
error => { AirConsoleLogger.Log(() => $"AndroidDataProvider initialization failed with {error}"); }
);
+
+ GenericUnityPluginCallback onVolumeChangeCallback = new(volume => {
+ AirConsoleLogger.LogDevelopment(() => $"Volume changed to {volume}");
+ OnUpdateVolume?.Invoke(volume);
+ });
+
+ GenericUnityPluginCallback onAudioFocusChangeCallback = new(focusEvent => {
+ AirConsoleLogger.LogDevelopment(() => $"Audio focus event received: {focusEvent}");
+
+ OnAudioFocusChange?.Invoke(focusEvent);
+ });
UnityPluginExecutionCallback reloadCallback = new(() => { OnReloadWebview?.Invoke(); });
_service =
@@ -39,12 +51,14 @@ internal PluginManager(AirConsole airConsole) {
pauseCallback,
reloadCallback,
Settings.AIRCONSOLE_BASE_URL,
- callback);
+ callback,
+ onVolumeChangeCallback,
+ onAudioFocusChangeCallback);
_airConsole = airConsole;
- _airConsole.UnityPause += OnPause;
- _airConsole.UnityResume += OnResume;
_airConsole.UnityDestroy += OnDestroy;
+
+ AirConsoleLogger.LogDevelopment(() => $"{nameof(PluginManager)} created.");
}
internal void ReportPlatformReady() {
@@ -52,43 +66,38 @@ internal void ReportPlatformReady() {
_service.Call("reportPlatformReady");
}
+
+ internal bool RequestAudioFocus() {
+ AirConsoleLogger.LogDevelopment(() => "RequestAudioFocus called.");
+ return _service.Call("requestAudioFocus");
+ }
+
+ internal void AbandonAudioFocus() {
+ AirConsoleLogger.LogDevelopment(() => "AbandonAudioFocus called.");
+ _service.Call("abandonAudioFocus");
+ }
// ///
// /// Writes client identification related information using the native library
// ///
// /// The screen connectCode to write.
// /// The screen uid to write.
- internal void WriteClientIdentification(string connectCode, string uid) {
- AirConsoleLogger.LogDevelopment(() => $"WriteClientIdentification w/ connectCode: {connectCode}, uid: {uid}");
- _service?.Call("writeClientIdentification", connectCode, uid);
- }
-
- internal bool IsTV() {
- return _service != null && _service.Call("isTV");
- }
- internal bool IsAutomotive() {
- return _service != null && _service.Call("isAutomotive");
- }
- internal bool IsNormalDevice() {
- return _service != null && _service.Call("isNormalDevice");
- }
-
- internal void InitializeOfflineCheck() {
- AirConsoleLogger.LogDevelopment(() => "InitializeOfflineCheck called.");
-
- _service.Call("initializeOfflineCheck");
+ internal void WriteClientIdentification(string connectCode, string uid) {
+ AirConsoleLogger.LogDevelopment(() =>
+ $"WriteClientIdentification w/ connectCode: {connectCode}, uid: {uid}");
+ _service?.Call("writeClientIdentification", connectCode, uid);
}
- private void OnPause() {
- AirConsoleLogger.LogDevelopment(() => "OnPause called.");
+ internal bool IsTV() => _service != null && _service.Call("isTV");
- _service.Call("onPause");
- }
+ internal bool IsAutomotive() => _service != null && _service.Call("isAutomotive");
+
+ internal bool IsNormalDevice() => _service != null && _service.Call("isNormalDevice");
- private void OnResume() {
- AirConsoleLogger.LogDevelopment(() => "OnResume called.");
+ internal void InitializeOfflineCheck() {
+ AirConsoleLogger.LogDevelopment(() => "InitializeOfflineCheck called.");
- _service.Call("onResume");
+ _service.Call("initializeOfflineCheck");
}
private void OnDestroy() {
@@ -118,4 +127,4 @@ internal static void SendPlatformMessage(string type) {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset
new file mode 100644
index 00000000..8f0a569f
--- /dev/null
+++ b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset
@@ -0,0 +1,15 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a7a108afd50e493bb30165bdf49d7ea3, type: 3}
+ m_Name: NativeGameSizingSettings
+ m_EditorClassIdentifier:
+ nativeGameSizingSupported: 1
diff --git a/Assets/AirConsole/unity-webview/Plugins/Editor.meta b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset.meta
similarity index 52%
rename from Assets/AirConsole/unity-webview/Plugins/Editor.meta
rename to Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset.meta
index 4afc4293..7f534306 100644
--- a/Assets/AirConsole/unity-webview/Plugins/Editor.meta
+++ b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset.meta
@@ -1,8 +1,8 @@
fileFormatVersion: 2
-guid: 5415c2bc4488c42739b36767bc7f8c83
-folderAsset: yes
-DefaultImporter:
+guid: 3d4900a69c99d45f8923e6f7f183461d
+NativeFormatImporter:
externalObjects: {}
+ mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
diff --git a/Assets/AirConsole/scripts/Runtime/Settings.cs b/Assets/AirConsole/scripts/Runtime/Settings.cs
index 9ca3f8a5..d3a64589 100644
--- a/Assets/AirConsole/scripts/Runtime/Settings.cs
+++ b/Assets/AirConsole/scripts/Runtime/Settings.cs
@@ -5,7 +5,7 @@
namespace NDream.AirConsole {
public static class Settings {
public static readonly Version RequiredMinimumVersion = new(1, 10, 0);
- public const string VERSION = "2.6.1";
+ public const string VERSION = "2.6.2";
// ReSharper disable once UnusedMember.Global // Used by AirConsole on Android only
public const string AIRCONSOLE_BASE_URL = "https://www.airconsole.com/";
diff --git a/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef b/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef
index 4e261d08..50434e89 100644
--- a/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef
+++ b/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef
@@ -1,21 +1,21 @@
{
- "name": "AirConsole.Support",
- "rootNamespace": "NDream.AirConsole.Support",
- "references": [],
- "includePlatforms": [
- "Editor"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": false,
- "overrideReferences": true,
- "precompiledReferences": [
- "Newtonsoft.Json.dll",
- "websocket-sharp.dll"
- ],
- "autoReferenced": true,
- "defineConstraints": [
- "!UNITY_2022_3_OR_NEWER"
- ],
- "versionDefines": [],
- "noEngineReferences": false
+ "name": "AirConsole.Support",
+ "rootNamespace": "NDream.AirConsole.Support",
+ "references": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "Newtonsoft.Json.dll",
+ "websocket-sharp.dll"
+ ],
+ "autoReferenced": true,
+ "defineConstraints": [
+ "!UNITY_2022_3_OR_NEWER"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef b/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef
index 0c045dda..b0dd4f8a 100644
--- a/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef
+++ b/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef
@@ -1,27 +1,27 @@
{
- "name": "AirConsole.EditMode.Tests",
- "rootNamespace": "NDream.AirConsole.EditMode.Tests",
- "references": [
- "UnityEngine.TestRunner",
- "AirConsole.Runtime"
- ],
- "includePlatforms": [
- "Android",
- "Editor",
- "WebGL"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": false,
- "overrideReferences": true,
- "precompiledReferences": [
- "nunit.framework.dll",
- "Newtonsoft.Json.dll"
- ],
- "autoReferenced": true,
- "defineConstraints": [
- "UNITY_2022_3_OR_NEWER",
- "UNITY_INCLUDE_TESTS"
- ],
- "versionDefines": [],
- "noEngineReferences": false
+ "name": "AirConsole.EditMode.Tests",
+ "rootNamespace": "NDream.AirConsole.EditMode.Tests",
+ "references": [
+ "UnityEngine.TestRunner",
+ "AirConsole.Runtime"
+ ],
+ "includePlatforms": [
+ "Android",
+ "Editor",
+ "WebGL"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "nunit.framework.dll",
+ "Newtonsoft.Json.dll"
+ ],
+ "autoReferenced": true,
+ "defineConstraints": [
+ "UNITY_2022_3_OR_NEWER",
+ "UNITY_INCLUDE_TESTS"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs b/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs
index 8de884aa..f1b39618 100644
--- a/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs
+++ b/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs
@@ -102,6 +102,10 @@ private void Start() {
frameCount++;
base.Update();
}
+
+ internal new void FixedUpdate() => base.FixedUpdate();
+ internal new void LateUpdate() => base.LateUpdate();
+
internal new void SetSafeArea(JObject message) {
base.SetSafeArea(message);
diff --git a/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef b/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef
index 88f8ecb1..987a0627 100644
--- a/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef
+++ b/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef
@@ -1,27 +1,27 @@
{
- "name": "AirConsole.Editor.Tests",
- "rootNamespace": "NDream.AirConsole.Editor.Tests",
- "references": [
- "UnityEngine.TestRunner",
- "UnityEditor.TestRunner",
- "AirConsole.Runtime",
- "AirConsole.Editor"
- ],
- "includePlatforms": [
- "Editor"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": false,
- "overrideReferences": true,
- "precompiledReferences": [
- "nunit.framework.dll",
- "Newtonsoft.Json.dll"
- ],
- "autoReferenced": false,
- "defineConstraints": [
- "UNITY_2022_3_OR_NEWER",
- "UNITY_INCLUDE_TESTS"
- ],
- "versionDefines": [],
- "noEngineReferences": false
+ "name": "AirConsole.Editor.Tests",
+ "rootNamespace": "NDream.AirConsole.Editor.Tests",
+ "references": [
+ "UnityEngine.TestRunner",
+ "UnityEditor.TestRunner",
+ "AirConsole.Runtime",
+ "AirConsole.Editor"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "nunit.framework.dll",
+ "Newtonsoft.Json.dll"
+ ],
+ "autoReferenced": false,
+ "defineConstraints": [
+ "UNITY_2022_3_OR_NEWER",
+ "UNITY_INCLUDE_TESTS"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef b/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef
index 5938c6d5..f85bc658 100644
--- a/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef
+++ b/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef
@@ -1,23 +1,23 @@
{
- "name": "AirConsole.PlayMode.Tests",
- "rootNamespace": "NDream.AirConsole.PlayMode.Tests",
- "references": [
- "UnityEngine.TestRunner",
- "AirConsole.Runtime"
- ],
- "includePlatforms": [],
- "excludePlatforms": [],
- "allowUnsafeCode": false,
- "overrideReferences": true,
- "precompiledReferences": [
- "nunit.framework.dll",
- "Newtonsoft.Json.dll"
- ],
- "autoReferenced": false,
- "defineConstraints": [
- "UNITY_2022_3_OR_NEWER",
- "UNITY_INCLUDE_TESTS"
- ],
- "versionDefines": [],
- "noEngineReferences": false
+ "name": "AirConsole.PlayMode.Tests",
+ "rootNamespace": "NDream.AirConsole.PlayMode.Tests",
+ "references": [
+ "UnityEngine.TestRunner",
+ "AirConsole.Runtime"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "nunit.framework.dll",
+ "Newtonsoft.Json.dll"
+ ],
+ "autoReferenced": false,
+ "defineConstraints": [
+ "UNITY_2022_3_OR_NEWER",
+ "UNITY_INCLUDE_TESTS"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/AirConsole/unity-webview/Editor.meta b/Assets/AirConsole/unity-webview/Editor.meta
index 439d487c..6b1a1fa1 100644
--- a/Assets/AirConsole/unity-webview/Editor.meta
+++ b/Assets/AirConsole/unity-webview/Editor.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 3e67d20066ca445cab1d878aa12db423
+guid: 00f4b1d6b8cdd4cb186e63faf26990a0
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs b/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs
index cb840e4d..4586f87d 100644
--- a/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs
+++ b/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs
@@ -23,6 +23,8 @@ public class UnityWebViewPostprocessBuild
{
private static bool nofragment = true;
+
+
//// for android/unity 2018.1 or newer
//// cf. https://forum.unity.com/threads/android-hardwareaccelerated-is-forced-false-in-all-activities.532786/
//// cf. https://github.com/Over17/UnityAndroidManifestCallback
@@ -47,53 +49,9 @@ public void OnPreprocessBuild(BuildTarget buildTarget, string path) {
public void OnPostGenerateGradleAndroidProject(string basePath) {
var changed = false;
var androidManifest = new AndroidManifest(GetManifestPath(basePath));
- if (!nofragment) {
- changed = (androidManifest.AddFileProvider(basePath) || changed);
- {
- var path = GetBuildGradlePath(basePath);
- var lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n").Split(new[]{'\n'});
- {
- var lines = new List();
- var independencies = false;
- foreach (var line in lines0) {
- if (line == "dependencies {") {
- independencies = true;
- } else if (independencies && line == "}") {
- independencies = false;
- lines.Add(" implementation 'androidx.core:core:1.6.0'");
- } else if (independencies) {
- if (line.Contains("implementation(name: 'core")
- || line.Contains("implementation(name: 'androidx.core.core")
- || line.Contains("implementation 'androidx.core:core")) {
- break;
- }
- }
- lines.Add(line);
- }
- if (lines.Count > lines0.Length) {
- File.WriteAllText(path, string.Join("\n", lines) + "\n");
- }
- }
- }
- {
- var path = GetGradlePropertiesPath(basePath);
- var lines0 = "";
- var lines = "";
- if (File.Exists(path)) {
- lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n") + "\n";
- lines = lines0;
- }
- if (!lines.Contains("android.useAndroidX=true")) {
- lines += "android.useAndroidX=true\n";
- }
- if (!lines.Contains("android.enableJetifier=true")) {
- lines += "android.enableJetifier=true\n";
- }
- if (lines != lines0) {
- File.WriteAllText(path, lines);
- }
- }
- }
+
+ AddAndroidXDependencies(ref changed, androidManifest, basePath, !nofragment);
+
changed = (androidManifest.SetExported(true) || changed);
changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed);
changed = (androidManifest.SetHardwareAccelerated(true) || changed);
@@ -112,6 +70,63 @@ public void OnPostGenerateGradleAndroidProject(string basePath) {
Debug.Log("unitywebview: adjusted AndroidManifest.xml.");
}
}
+
+ private void AddAndroidXDependencies(ref bool changed, AndroidManifest androidManifest, string basePath, bool includeCoreDependency) {
+ changed = androidManifest.AddFileProvider(basePath) || changed;
+ {
+ string path = GetBuildGradlePath(basePath);
+ string[] lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n").Split(new[] { '\n' });
+ {
+ List lines = new();
+ bool inDependencies = false;
+ bool hasCore = false;
+ foreach (string line in lines0) {
+ if (line == "dependencies {") {
+ inDependencies = true;
+ } else if (inDependencies && line == "}") {
+ if (includeCoreDependency && !hasCore) {
+ lines.Add(" implementation 'androidx.core:core:1.6.0'");
+ hasCore = true;
+ }
+ inDependencies = false;
+ } else if (inDependencies) {
+ if (line.Contains("implementation(name: 'core")
+ || line.Contains("implementation(name: 'androidx.core.core")
+ || line.Contains("implementation 'androidx.core:core")) {
+ hasCore = true;
+ }
+ }
+
+ lines.Add(line);
+ }
+
+ if (lines.Count > lines0.Length) {
+ File.WriteAllText(path, string.Join("\n", lines) + "\n");
+ }
+ }
+ }
+ {
+ string path = GetGradlePropertiesPath(basePath);
+ string lines0 = "";
+ string lines = "";
+ if (File.Exists(path)) {
+ lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n") + "\n";
+ lines = lines0;
+ }
+
+ if (!lines.Contains("android.useAndroidX=true")) {
+ lines += "android.useAndroidX=true\n";
+ }
+
+ if (!lines.Contains("android.enableJetifier=true")) {
+ lines += "android.enableJetifier=true\n";
+ }
+
+ if (lines != lines0) {
+ File.WriteAllText(path, lines);
+ }
+ }
+ }
#endif
public int callbackOrder {
@@ -186,25 +201,8 @@ public static void OnPostprocessBuild(BuildTarget buildTarget, string path) {
var androidManifest = new AndroidManifest(manifest);
if (!nofragment) {
changed = (androidManifest.AddFileProvider("Assets/Plugins/Android") || changed);
- var files = Directory.GetFiles("Assets/Plugins/Android/");
- var found = false;
- foreach (var file in files) {
- if (Regex.IsMatch(file, @"^Assets/Plugins/Android/(androidx\.core\.)?core-.*.aar$")) {
- found = true;
- break;
- }
- }
- if (!found) {
- foreach (var file in files) {
- var match = Regex.Match(file, @"^Assets/Plugins/Android/(core.*.aar).tmpl$");
- if (match.Success) {
- var name = match.Groups[1].Value;
- File.Copy(file, "Assets/Plugins/Android/" + name, true);
- break;
- }
- }
- }
}
+
changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed);
changed = (androidManifest.SetHardwareAccelerated(true) || changed);
#if UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC
@@ -283,6 +281,7 @@ public static void OnPostprocessBuild(BuildTarget buildTarget, string path) {
File.WriteAllText(projPath, dst);
}
}
+
}
internal class AndroidXmlDocument : XmlDocument {
@@ -391,6 +390,7 @@ internal bool AddFileProvider(string basePath) {
bool changed = false;
var authorities = PlayerSettings.applicationIdentifier + ".unitywebview.fileprovider";
if (SelectNodes("/manifest/application/provider[@android:authorities='" + authorities + "']", nsMgr).Count == 0) {
+ // Add the file provider for the Fragment-based webview implementation.
var elem = CreateElement("provider");
elem.Attributes.Append(CreateAndroidAttribute("name", "androidx.core.content.FileProvider"));
elem.Attributes.Append(CreateAndroidAttribute("authorities", authorities));
@@ -401,6 +401,7 @@ internal bool AddFileProvider(string basePath) {
meta.Attributes.Append(CreateAndroidAttribute("resource", "@xml/unitywebview_file_provider_paths"));
elem.AppendChild(meta);
ApplicationElement.AppendChild(elem);
+
changed = true;
var xml = GetFileProviderSettingPath(basePath);
if (!File.Exists(xml)) {
diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl
index 23bdad7d..14649de8 100644
Binary files a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl and b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl differ
diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta
index 32a588c1..66510900 100644
--- a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta
+++ b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 4cfd7b6baeab943089b567032c2b3ee6
+guid: 768496df2473a48e6a77b0378d3de5a1
DefaultImporter:
externalObjects: {}
userData:
diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl
index f3181c27..14649de8 100644
Binary files a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl and b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl differ
diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta
index d4aa3543..f0cbe4e4 100644
--- a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta
+++ b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 69e600137811c42778f78793d1022369
+guid: 36390d8e865ea43038c562226860c091
DefaultImporter:
externalObjects: {}
userData:
diff --git a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs b/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs
deleted file mode 100644
index cb840e4d..00000000
--- a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs
+++ /dev/null
@@ -1,539 +0,0 @@
-#if UNITY_EDITOR
-using System.Collections.Generic;
-using System.Collections;
-using System.IO;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using System.Text;
-using System.Xml;
-using System;
-using UnityEditor.Android;
-#if UNITY_2018_1_OR_NEWER
-using UnityEditor.Build;
-#endif
-using UnityEditor.Callbacks;
-using UnityEditor;
-using UnityEngine;
-
-#if UNITY_2018_1_OR_NEWER
-public class UnityWebViewPostprocessBuild : IPreprocessBuild, IPostGenerateGradleAndroidProject
-#else
-public class UnityWebViewPostprocessBuild
-#endif
-{
- private static bool nofragment = true;
-
- //// for android/unity 2018.1 or newer
- //// cf. https://forum.unity.com/threads/android-hardwareaccelerated-is-forced-false-in-all-activities.532786/
- //// cf. https://github.com/Over17/UnityAndroidManifestCallback
-
-#if UNITY_2018_1_OR_NEWER
- public void OnPreprocessBuild(BuildTarget buildTarget, string path) {
- if (buildTarget == BuildTarget.Android) {
- var dev = "Packages/com.airconsole.unity-webview/Assets/Plugins/Android/WebViewPlugin-development.aar.tmpl";
- var rel = "Packages/com.airconsole.unity-webview/Assets/Plugins/Android/WebViewPlugin-release.aar.tmpl";
- if (!File.Exists(dev) || !File.Exists(rel)) {
- dev = "Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl";
- rel = "Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl";
- }
- var src = (EditorUserBuildSettings.development) ? dev : rel;
- //Directory.CreateDirectory("Temp/StagingArea/aar");
- //File.Copy(src, "Temp/StagingArea/aar/WebViewPlugin.aar", true);
- Directory.CreateDirectory("Assets/Plugins/Android");
- File.Copy(src, "Assets/Plugins/Android/WebViewPlugin.aar", true);
- }
- }
-
- public void OnPostGenerateGradleAndroidProject(string basePath) {
- var changed = false;
- var androidManifest = new AndroidManifest(GetManifestPath(basePath));
- if (!nofragment) {
- changed = (androidManifest.AddFileProvider(basePath) || changed);
- {
- var path = GetBuildGradlePath(basePath);
- var lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n").Split(new[]{'\n'});
- {
- var lines = new List();
- var independencies = false;
- foreach (var line in lines0) {
- if (line == "dependencies {") {
- independencies = true;
- } else if (independencies && line == "}") {
- independencies = false;
- lines.Add(" implementation 'androidx.core:core:1.6.0'");
- } else if (independencies) {
- if (line.Contains("implementation(name: 'core")
- || line.Contains("implementation(name: 'androidx.core.core")
- || line.Contains("implementation 'androidx.core:core")) {
- break;
- }
- }
- lines.Add(line);
- }
- if (lines.Count > lines0.Length) {
- File.WriteAllText(path, string.Join("\n", lines) + "\n");
- }
- }
- }
- {
- var path = GetGradlePropertiesPath(basePath);
- var lines0 = "";
- var lines = "";
- if (File.Exists(path)) {
- lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n") + "\n";
- lines = lines0;
- }
- if (!lines.Contains("android.useAndroidX=true")) {
- lines += "android.useAndroidX=true\n";
- }
- if (!lines.Contains("android.enableJetifier=true")) {
- lines += "android.enableJetifier=true\n";
- }
- if (lines != lines0) {
- File.WriteAllText(path, lines);
- }
- }
- }
- changed = (androidManifest.SetExported(true) || changed);
- changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed);
- changed = (androidManifest.SetHardwareAccelerated(true) || changed);
-#if UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC
- changed = (androidManifest.SetUsesCleartextTraffic(true) || changed);
-#endif
-#if UNITYWEBVIEW_ANDROID_ENABLE_CAMERA
- changed = (androidManifest.AddCamera() || changed);
- changed = (androidManifest.AddGallery() || changed);
-#endif
-#if UNITYWEBVIEW_ANDROID_ENABLE_MICROPHONE
- changed = (androidManifest.AddMicrophone() || changed);
-#endif
- if (changed) {
- androidManifest.Save();
- Debug.Log("unitywebview: adjusted AndroidManifest.xml.");
- }
- }
-#endif
-
- public int callbackOrder {
- get {
- return 1;
- }
- }
-
- private string GetManifestPath(string basePath) {
- var pathBuilder = new StringBuilder(basePath);
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("src");
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("main");
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("AndroidManifest.xml");
- return pathBuilder.ToString();
- }
-
- private string GetBuildGradlePath(string basePath) {
- var pathBuilder = new StringBuilder(basePath);
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("build.gradle");
- return pathBuilder.ToString();
- }
-
- private string GetGradlePropertiesPath(string basePath) {
- var pathBuilder = new StringBuilder(basePath);
- if (basePath.EndsWith("unityLibrary")) {
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("..");
- }
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("gradle.properties");
- return pathBuilder.ToString();
- }
-
- //// for others
-
- [PostProcessBuild(100)]
- public static void OnPostprocessBuild(BuildTarget buildTarget, string path) {
-#if UNITY_2018_1_OR_NEWER
- try {
- File.Delete("Assets/Plugins/Android/WebViewPlugin.aar");
- File.Delete("Assets/Plugins/Android/WebViewPlugin.aar.meta");
- Directory.Delete("Assets/Plugins/Android");
- File.Delete("Assets/Plugins/Android.meta");
- Directory.Delete("Assets/Plugins");
- File.Delete("Assets/Plugins.meta");
- } catch (Exception) {
- }
-#else
- if (buildTarget == BuildTarget.Android) {
- string manifest = Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml");
- if (!File.Exists(manifest)) {
- string manifest0 = Path.Combine(Application.dataPath, "../Temp/StagingArea/AndroidManifest-main.xml");
- if (!File.Exists(manifest0)) {
- Debug.LogError("unitywebview: cannot find both Assets/Plugins/Android/AndroidManifest.xml and Temp/StagingArea/AndroidManifest-main.xml. please build the app to generate Assets/Plugins/Android/AndroidManifest.xml and then rebuild it again.");
- return;
- } else {
- File.Copy(manifest0, manifest, true);
- }
- }
- var changed = false;
- if (EditorUserBuildSettings.development) {
- if (!File.Exists("Assets/Plugins/Android/WebView.aar")
- || !File.ReadAllBytes("Assets/Plugins/Android/WebView.aar").SequenceEqual(File.ReadAllBytes("Assets/Plugins/Android/WebViewPlugin-development.aar.tmpl"))) {
- File.Copy("Assets/Plugins/Android/WebViewPlugin-development.aar.tmpl", "Assets/Plugins/Android/WebView.aar", true);
- changed = true;
- }
- } else {
- if (!File.Exists("Assets/Plugins/Android/WebView.aar")
- || !File.ReadAllBytes("Assets/Plugins/Android/WebView.aar").SequenceEqual(File.ReadAllBytes("Assets/Plugins/Android/WebViewPlugin-release.aar.tmpl"))) {
- File.Copy("Assets/Plugins/Android/WebViewPlugin-release.aar.tmpl", "Assets/Plugins/Android/WebView.aar", true);
- changed = true;
- }
- }
- var androidManifest = new AndroidManifest(manifest);
- if (!nofragment) {
- changed = (androidManifest.AddFileProvider("Assets/Plugins/Android") || changed);
- var files = Directory.GetFiles("Assets/Plugins/Android/");
- var found = false;
- foreach (var file in files) {
- if (Regex.IsMatch(file, @"^Assets/Plugins/Android/(androidx\.core\.)?core-.*.aar$")) {
- found = true;
- break;
- }
- }
- if (!found) {
- foreach (var file in files) {
- var match = Regex.Match(file, @"^Assets/Plugins/Android/(core.*.aar).tmpl$");
- if (match.Success) {
- var name = match.Groups[1].Value;
- File.Copy(file, "Assets/Plugins/Android/" + name, true);
- break;
- }
- }
- }
- }
- changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed);
- changed = (androidManifest.SetHardwareAccelerated(true) || changed);
-#if UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC
- changed = (androidManifest.SetUsesCleartextTraffic(true) || changed);
-#endif
-#if UNITYWEBVIEW_ANDROID_ENABLE_CAMERA
- changed = (androidManifest.AddCamera() || changed);
- changed = (androidManifest.AddGallery() || changed);
-#endif
-#if UNITYWEBVIEW_ANDROID_ENABLE_MICROPHONE
- changed = (androidManifest.AddMicrophone() || changed);
-#endif
-#if UNITY_5_6_0 || UNITY_5_6_1
- changed = (androidManifest.SetActivityName("net.gree.unitywebview.CUnityPlayerActivity") || changed);
-#endif
- if (changed) {
- androidManifest.Save();
- Debug.LogError("unitywebview: adjusted AndroidManifest.xml and/or WebView.aar. Please rebuild the app.");
- }
- }
-#endif
- if (buildTarget == BuildTarget.iOS) {
- string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
- var type = Type.GetType("UnityEditor.iOS.Xcode.PBXProject, UnityEditor.iOS.Extensions.Xcode");
- if (type == null)
- {
- Debug.LogError("unitywebview: failed to get PBXProject. please install iOS build support.");
- return;
- }
- var src = File.ReadAllText(projPath);
- //dynamic proj = type.GetConstructor(Type.EmptyTypes).Invoke(null);
- var proj = type.GetConstructor(Type.EmptyTypes).Invoke(null);
- //proj.ReadFromString(src);
- {
- var method = type.GetMethod("ReadFromString");
- method.Invoke(proj, new object[]{src});
- }
- var target = "";
-#if UNITY_2019_3_OR_NEWER
- //target = proj.GetUnityFrameworkTargetGuid();
- {
- var method = type.GetMethod("GetUnityFrameworkTargetGuid");
- target = (string)method.Invoke(proj, null);
- }
-#else
- //target = proj.TargetGuidByName("Unity-iPhone");
- {
- var method = type.GetMethod("TargetGuidByName");
- target = (string)method.Invoke(proj, new object[]{"Unity-iPhone"});
- }
-#endif
- //proj.AddFrameworkToProject(target, "WebKit.framework", false);
- {
- var method = type.GetMethod("AddFrameworkToProject");
- method.Invoke(proj, new object[]{target, "WebKit.framework", false});
- }
- var cflags = "";
- if (EditorUserBuildSettings.development) {
- cflags += " -DUNITYWEBVIEW_DEVELOPMENT";
- }
-#if UNITYWEBVIEW_IOS_ALLOW_FILE_URLS
- cflags += " -DUNITYWEBVIEW_IOS_ALLOW_FILE_URLS";
-#endif
- cflags = cflags.Trim();
- if (!string.IsNullOrEmpty(cflags)) {
- // proj.AddBuildProperty(target, "OTHER_LDFLAGS", cflags);
- var method = type.GetMethod("AddBuildProperty", new Type[]{typeof(string), typeof(string), typeof(string)});
- method.Invoke(proj, new object[]{target, "OTHER_CFLAGS", cflags});
- }
- var dst = "";
- //dst = proj.WriteToString();
- {
- var method = type.GetMethod("WriteToString");
- dst = (string)method.Invoke(proj, null);
- }
- File.WriteAllText(projPath, dst);
- }
- }
-}
-
-internal class AndroidXmlDocument : XmlDocument {
- private string m_Path;
- protected XmlNamespaceManager nsMgr;
- public readonly string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android";
-
- public AndroidXmlDocument(string path) {
- m_Path = path;
- using (var reader = new XmlTextReader(m_Path)) {
- reader.Read();
- Load(reader);
- }
- nsMgr = new XmlNamespaceManager(NameTable);
- nsMgr.AddNamespace("android", AndroidXmlNamespace);
- }
-
- public string Save() {
- return SaveAs(m_Path);
- }
-
- public string SaveAs(string path) {
- using (var writer = new XmlTextWriter(path, new UTF8Encoding(false))) {
- writer.Formatting = Formatting.Indented;
- Save(writer);
- }
- return path;
- }
-}
-
-internal class AndroidManifest : AndroidXmlDocument {
- private readonly XmlElement ManifestElement;
- private readonly XmlElement ApplicationElement;
-
- public AndroidManifest(string path) : base(path) {
- ManifestElement = SelectSingleNode("/manifest") as XmlElement;
- ApplicationElement = SelectSingleNode("/manifest/application") as XmlElement;
- }
-
- private XmlAttribute CreateAndroidAttribute(string key, string value) {
- XmlAttribute attr = CreateAttribute("android", key, AndroidXmlNamespace);
- attr.Value = value;
- return attr;
- }
-
- internal XmlNode GetActivityWithLaunchIntent() {
- return
- SelectSingleNode(
- "/manifest/application/activity[intent-filter/action/@android:name='android.intent.action.MAIN' and "
- + "intent-filter/category/@android:name='android.intent.category.LAUNCHER']",
- nsMgr);
- }
-
- internal bool SetUsesCleartextTraffic(bool enabled) {
- // android:usesCleartextTraffic
- bool changed = false;
- if (ApplicationElement.GetAttribute("usesCleartextTraffic", AndroidXmlNamespace) != ((enabled) ? "true" : "false")) {
- ApplicationElement.SetAttribute("usesCleartextTraffic", AndroidXmlNamespace, (enabled) ? "true" : "false");
- changed = true;
- }
- return changed;
- }
-
- // for api level 33
- internal bool SetExported(bool enabled) {
- bool changed = false;
- var activity = GetActivityWithLaunchIntent() as XmlElement;
- if (activity.GetAttribute("exported", AndroidXmlNamespace) != ((enabled) ? "true" : "false")) {
- activity.SetAttribute("exported", AndroidXmlNamespace, (enabled) ? "true" : "false");
- changed = true;
- }
- return changed;
- }
-
- internal bool SetWindowSoftInputMode(string mode) {
- bool changed = false;
- var activity = GetActivityWithLaunchIntent() as XmlElement;
- if (activity.GetAttribute("windowSoftInputMode", AndroidXmlNamespace) != mode) {
- activity.SetAttribute("windowSoftInputMode", AndroidXmlNamespace, mode);
- changed = true;
- }
- return changed;
- }
-
- internal bool SetHardwareAccelerated(bool enabled) {
- bool changed = false;
- var activity = GetActivityWithLaunchIntent() as XmlElement;
- if (activity.GetAttribute("hardwareAccelerated", AndroidXmlNamespace) != ((enabled) ? "true" : "false")) {
- activity.SetAttribute("hardwareAccelerated", AndroidXmlNamespace, (enabled) ? "true" : "false");
- changed = true;
- }
- return changed;
- }
-
- internal bool SetActivityName(string name) {
- bool changed = false;
- var activity = GetActivityWithLaunchIntent() as XmlElement;
- if (activity.GetAttribute("name", AndroidXmlNamespace) != name) {
- activity.SetAttribute("name", AndroidXmlNamespace, name);
- changed = true;
- }
- return changed;
- }
-
- internal bool AddFileProvider(string basePath) {
- bool changed = false;
- var authorities = PlayerSettings.applicationIdentifier + ".unitywebview.fileprovider";
- if (SelectNodes("/manifest/application/provider[@android:authorities='" + authorities + "']", nsMgr).Count == 0) {
- var elem = CreateElement("provider");
- elem.Attributes.Append(CreateAndroidAttribute("name", "androidx.core.content.FileProvider"));
- elem.Attributes.Append(CreateAndroidAttribute("authorities", authorities));
- elem.Attributes.Append(CreateAndroidAttribute("exported", "false"));
- elem.Attributes.Append(CreateAndroidAttribute("grantUriPermissions", "true"));
- var meta = CreateElement("meta-data");
- meta.Attributes.Append(CreateAndroidAttribute("name", "android.support.FILE_PROVIDER_PATHS"));
- meta.Attributes.Append(CreateAndroidAttribute("resource", "@xml/unitywebview_file_provider_paths"));
- elem.AppendChild(meta);
- ApplicationElement.AppendChild(elem);
- changed = true;
- var xml = GetFileProviderSettingPath(basePath);
- if (!File.Exists(xml)) {
- Directory.CreateDirectory(Path.GetDirectoryName(xml));
- File.WriteAllText(
- xml,
- "\n" +
- " \n" +
- "\n");
- }
- }
- return changed;
- }
-
- private string GetFileProviderSettingPath(string basePath) {
- var pathBuilder = new StringBuilder(basePath);
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("src");
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("main");
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("res");
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("xml");
- pathBuilder.Append(Path.DirectorySeparatorChar).Append("unitywebview_file_provider_paths.xml");
- return pathBuilder.ToString();
- }
-
- internal bool AddCamera() {
- bool changed = false;
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.CAMERA']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.CAMERA"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/uses-feature[@android:name='android.hardware.camera']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-feature");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.hardware.camera"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- // cf. https://developer.android.com/training/data-storage/shared/media#media-location-permission
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.ACCESS_MEDIA_LOCATION']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.ACCESS_MEDIA_LOCATION"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- // cf. https://developer.android.com/training/package-visibility/declaring
- if (SelectNodes("/manifest/queries", nsMgr).Count == 0) {
- var elem = CreateElement("queries");
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/queries/intent/action[@android:name='android.media.action.IMAGE_CAPTURE']", nsMgr).Count == 0) {
- var action = CreateElement("action");
- action.Attributes.Append(CreateAndroidAttribute("name", "android.media.action.IMAGE_CAPTURE"));
- var intent = CreateElement("intent");
- intent.AppendChild(action);
- var queries = SelectSingleNode("/manifest/queries") as XmlElement;
- queries.AppendChild(intent);
- changed = true;
- }
- return changed;
- }
-
- internal bool AddGallery() {
- bool changed = false;
- // for api level 33
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.READ_MEDIA_IMAGES']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.READ_MEDIA_IMAGES"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.READ_MEDIA_VIDEO']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.READ_MEDIA_VIDEO"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.READ_MEDIA_AUDIO']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.READ_MEDIA_AUDIO"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- // cf. https://developer.android.com/training/package-visibility/declaring
- if (SelectNodes("/manifest/queries", nsMgr).Count == 0) {
- var elem = CreateElement("queries");
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/queries/intent/action[@android:name='android.media.action.GET_CONTENT']", nsMgr).Count == 0) {
- var action = CreateElement("action");
- action.Attributes.Append(CreateAndroidAttribute("name", "android.media.action.GET_CONTENT"));
- var intent = CreateElement("intent");
- intent.AppendChild(action);
- var queries = SelectSingleNode("/manifest/queries") as XmlElement;
- queries.AppendChild(intent);
- changed = true;
- }
- return changed;
- }
-
- internal bool AddMicrophone() {
- bool changed = false;
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.MICROPHONE']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.MICROPHONE"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/uses-feature[@android:name='android.hardware.microphone']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-feature");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.hardware.microphone"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- // cf. https://github.com/gree/unity-webview/issues/679
- // cf. https://github.com/fluttercommunity/flutter_webview_plugin/issues/138#issuecomment-559307558
- // cf. https://stackoverflow.com/questions/38917751/webview-webrtc-not-working/68024032#68024032
- // cf. https://stackoverflow.com/questions/40236925/allowing-microphone-accesspermission-in-webview-android-studio-java/47410311#47410311
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.MODIFY_AUDIO_SETTINGS']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.MODIFY_AUDIO_SETTINGS"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.RECORD_AUDIO']", nsMgr).Count == 0) {
- var elem = CreateElement("uses-permission");
- elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.RECORD_AUDIO"));
- ManifestElement.AppendChild(elem);
- changed = true;
- }
- return changed;
- }
-}
-#endif
diff --git a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta
index 09bec84a..42a688b6 100644
--- a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta
+++ b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta
@@ -1,33 +1,58 @@
fileFormatVersion: 2
-guid: 5e6d20ceb4c28439b803c8423db284d5
+guid: 60e7bf38137eb4950b2f02b7d57c1ad3
+folderAsset: yes
PluginImporter:
- externalObjects: {}
- serializedVersion: 2
+ serializedVersion: 1
iconMap: {}
executionOrder: {}
- defineConstraints: []
isPreloaded: 0
- isOverridable: 0
- isExplicitlyReferenced: 0
- validateReferences: 1
platformData:
- - first:
- Any:
- second:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
enabled: 0
settings: {}
- - first:
- Editor: Editor
- second:
+ Editor:
enabled: 1
settings:
+ CPU: AnyCPU
DefaultValueInitialized: true
- - first:
- Standalone: OSXUniversal
- second:
+ OS: OSX
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
enabled: 1
settings:
CPU: AnyCPU
+ OSXUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:
diff --git a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist
index 186615dc..fabdc7c3 100644
--- a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist
+++ b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist
@@ -3,7 +3,7 @@
BuildMachineOSBuild
- 24G231
+ 24G325
CFBundleDevelopmentRegion
English
CFBundleExecutable
diff --git a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView
index 19f2a22e..35ff43ba 100755
Binary files a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView and b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView differ
diff --git a/Assets/AirConsole/unity-webview/Runtime.meta b/Assets/AirConsole/unity-webview/Runtime.meta
index 95fd8772..c373cb11 100644
--- a/Assets/AirConsole/unity-webview/Runtime.meta
+++ b/Assets/AirConsole/unity-webview/Runtime.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 2a81893663cd042c99b7c90d0b3a12d6
+guid: 95465021a9bc74b50acf56a8e83765dd
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs
new file mode 100644
index 00000000..fa2c940a
--- /dev/null
+++ b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2024 AirConsole
+ *
+ * C# proxy class implementing CWebViewPluginCallback Java interface.
+ * Enables direct synchronous callbacks from Java to C# without UnitySendMessage delay.
+ */
+
+using UnityEngine;
+using System;
+
+#if UNITY_ANDROID
+
+///
+/// AndroidJavaProxy implementation for CWebViewPluginCallback.
+/// Java calls methods on this class directly, which then invokes WebViewObject callbacks.
+/// Thread-safe: callbacks may arrive from any thread and are routed appropriately.
+///
+public class WebViewCallback : AndroidJavaProxy
+{
+ private readonly WebViewObject _webViewObject;
+
+ public WebViewCallback(WebViewObject webViewObject)
+ : base("net.gree.unitywebview.CWebViewPluginCallback")
+ {
+ _webViewObject = webViewObject ?? throw new ArgumentNullException(nameof(webViewObject));
+ }
+
+ ///
+ /// Called when JavaScript invokes Unity.call().
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void call(string message)
+ {
+ _webViewObject.CallFromJS(message);
+ }
+
+ ///
+ /// Called when a navigation error occurs.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onError(string error)
+ {
+ _webViewObject.CallOnError(error);
+ }
+
+ ///
+ /// Called when an HTTP error response is received.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onHttpError(string statusCode)
+ {
+ _webViewObject.CallOnHttpError(statusCode);
+ }
+
+ ///
+ /// Called when page navigation starts.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onStarted(string url)
+ {
+ _webViewObject.CallOnStarted(url);
+ }
+
+ ///
+ /// Called when page navigation finishes.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onLoaded(string url)
+ {
+ _webViewObject.CallOnLoaded(url);
+ }
+
+ ///
+ /// Called when a hooked URL pattern is matched.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onHooked(string url)
+ {
+ _webViewObject.CallOnHooked(url);
+ }
+
+ ///
+ /// Called when audio focus state changes.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onAudioFocusChanged(string state)
+ {
+ _webViewObject.CallOnAudioFocusChanged(state);
+ }
+
+ ///
+ /// Called when soft keyboard visibility changes.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onKeyboardVisible(string height)
+ {
+ _webViewObject.SetKeyboardVisible(height);
+ }
+
+ ///
+ /// Called when file chooser permissions are needed.
+ ///
+ // ReSharper disable once InconsistentNaming
+ public void onRequestFileChooserPermissions()
+ {
+ _webViewObject.RequestFileChooserPermissions();
+ }
+}
+
+#endif
diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs.meta b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs.meta
new file mode 100644
index 00000000..8767a77b
--- /dev/null
+++ b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs
new file mode 100644
index 00000000..ca6d4892
--- /dev/null
+++ b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs
@@ -0,0 +1,244 @@
+using System;
+
+///
+/// Represents a queued event in the WebView system.
+/// Enqueued from any thread, dequeued and processed on the Unity main thread.
+///
+public class WebViewEvent
+{
+ ///
+ /// Enumeration of all supported WebView event types.
+ /// Matches the message prefixes used by the native bridge.
+ ///
+ public enum EventType
+ {
+ /// JavaScript message from the WebView (CallFromJS).
+ Message,
+ /// General error from the WebView (CallOnError).
+ Error,
+ /// HTTP error from the WebView (CallOnHttpError).
+ HttpError,
+ /// Navigation started (CallOnStarted).
+ Started,
+ /// Navigation completed (CallOnLoaded).
+ Loaded,
+ /// URL hook triggered (CallOnHooked).
+ Hooked,
+ /// Cookie information retrieved (CallOnCookies).
+ Cookies,
+ /// Audio focus state changed (CallOnAudioFocusChanged).
+ AudioFocusChanged,
+ /// Keyboard visibility changed (SetKeyboardVisible).
+ KeyboardHeightChanged,
+ /// File chooser permissions requested (RequestFileChooserPermissions).
+ FileChooserPermissions,
+ /// Unknown or unrecognized event type.
+ Unknown
+ }
+
+ ///
+ /// The type of this event.
+ ///
+ public EventType Type { get; private set; }
+
+ ///
+ /// String payload for the event (e.g., JS message, error text, URL).
+ ///
+ public string Payload { get; private set; }
+
+ ///
+ /// Integer payload for numeric data (e.g., audio focus state, keyboard height in pixels).
+ ///
+ public int IntPayload { get; private set; }
+
+ ///
+ /// Float payload reserved for future use.
+ ///
+ public float FloatPayload { get; private set; }
+
+ ///
+ /// Timestamp when the event was created (UTC).
+ /// Useful for debugging and metrics.
+ ///
+ public DateTime Timestamp { get; private set; }
+
+ ///
+ /// Private constructor. Use factory methods to create events.
+ ///
+ private WebViewEvent(EventType type, string payload = null, int intPayload = 0, float floatPayload = 0f)
+ {
+ Type = type;
+ Payload = payload;
+ IntPayload = intPayload;
+ FloatPayload = floatPayload;
+ Timestamp = DateTime.UtcNow;
+ }
+
+ #region Factory Methods
+
+ ///
+ /// Creates a JavaScript message event.
+ ///
+ /// The message payload from JavaScript.
+ /// A new WebViewEvent of type Message.
+ public static WebViewEvent Message(string message)
+ {
+ return new WebViewEvent(EventType.Message, message);
+ }
+
+ ///
+ /// Creates an error event.
+ ///
+ /// The error message.
+ /// A new WebViewEvent of type Error.
+ public static WebViewEvent Error(string error)
+ {
+ return new WebViewEvent(EventType.Error, error);
+ }
+
+ ///
+ /// Creates an HTTP error event.
+ ///
+ /// The HTTP error details.
+ /// A new WebViewEvent of type HttpError.
+ public static WebViewEvent HttpError(string error)
+ {
+ return new WebViewEvent(EventType.HttpError, error);
+ }
+
+ ///
+ /// Creates a navigation started event.
+ ///
+ /// The URL that started loading.
+ /// A new WebViewEvent of type Started.
+ public static WebViewEvent Started(string url)
+ {
+ return new WebViewEvent(EventType.Started, url);
+ }
+
+ ///
+ /// Creates a navigation loaded event.
+ ///
+ /// The URL that finished loading.
+ /// A new WebViewEvent of type Loaded.
+ public static WebViewEvent Loaded(string url)
+ {
+ return new WebViewEvent(EventType.Loaded, url);
+ }
+
+ ///
+ /// Creates a URL hook event.
+ ///
+ /// The hooked URL.
+ /// A new WebViewEvent of type Hooked.
+ public static WebViewEvent Hooked(string url)
+ {
+ return new WebViewEvent(EventType.Hooked, url);
+ }
+
+ ///
+ /// Creates a cookies event.
+ ///
+ /// The cookie string.
+ /// A new WebViewEvent of type Cookies.
+ public static WebViewEvent Cookies(string cookies)
+ {
+ return new WebViewEvent(EventType.Cookies, cookies);
+ }
+
+ ///
+ /// Creates an audio focus changed event.
+ ///
+ /// The audio focus state string.
+ /// A new WebViewEvent of type AudioFocusChanged.
+ public static WebViewEvent AudioFocusChanged(string state)
+ {
+ return new WebViewEvent(EventType.AudioFocusChanged, state);
+ }
+
+ ///
+ /// Creates a keyboard height changed event.
+ ///
+ /// The keyboard height in pixels.
+ /// A new WebViewEvent of type KeyboardHeightChanged.
+ public static WebViewEvent KeyboardHeightChanged(int height)
+ {
+ return new WebViewEvent(EventType.KeyboardHeightChanged, height.ToString(), height);
+ }
+
+ ///
+ /// Creates a keyboard height changed event from string.
+ ///
+ /// The keyboard height as string.
+ /// A new WebViewEvent of type KeyboardHeightChanged.
+ public static WebViewEvent KeyboardHeightChanged(string heightString)
+ {
+ int height = 0;
+ int.TryParse(heightString, out height);
+ return new WebViewEvent(EventType.KeyboardHeightChanged, heightString, height);
+ }
+
+ ///
+ /// Creates a file chooser permissions request event.
+ ///
+ /// A new WebViewEvent of type FileChooserPermissions.
+ public static WebViewEvent FileChooserPermissions()
+ {
+ return new WebViewEvent(EventType.FileChooserPermissions);
+ }
+
+ ///
+ /// Creates an event from a native bridge message string.
+ /// Parses the "Type:Payload" format used by the Android bridge.
+ ///
+ /// The raw message from the native bridge.
+ /// A new WebViewEvent, or null if the message format is invalid.
+ public static WebViewEvent FromNativeMessage(string message)
+ {
+ if (string.IsNullOrEmpty(message))
+ return null;
+
+ var colonIndex = message.IndexOf(':');
+ if (colonIndex == -1)
+ return null;
+
+ var type = message.Substring(0, colonIndex);
+ var payload = colonIndex + 1 < message.Length ? message.Substring(colonIndex + 1) : string.Empty;
+
+ switch (type)
+ {
+ case "CallFromJS":
+ return Message(payload);
+ case "CallOnError":
+ return Error(payload);
+ case "CallOnHttpError":
+ return HttpError(payload);
+ case "CallOnStarted":
+ return Started(payload);
+ case "CallOnLoaded":
+ return Loaded(payload);
+ case "CallOnHooked":
+ return Hooked(payload);
+ case "CallOnCookies":
+ return Cookies(payload);
+ case "CallOnAudioFocusChanged":
+ return AudioFocusChanged(payload);
+ case "SetKeyboardVisible":
+ return KeyboardHeightChanged(payload);
+ case "RequestFileChooserPermissions":
+ return FileChooserPermissions();
+ default:
+ return new WebViewEvent(EventType.Unknown, message);
+ }
+ }
+
+ #endregion
+
+ ///
+ /// Returns a string representation for debugging.
+ ///
+ public override string ToString()
+ {
+ return $"WebViewEvent[{Type}]: {Payload ?? "(no payload)"} @ {Timestamp:HH:mm:ss.fff}";
+ }
+}
diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs.meta b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs.meta
new file mode 100644
index 00000000..e9feb004
--- /dev/null
+++ b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 03e8196427c59441989215be8854d79c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs b/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs
index 93235ad2..4c5559ff 100644
--- a/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs
+++ b/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs
@@ -23,7 +23,9 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Collections.Concurrent;
using System.Runtime.InteropServices;
+using System.Threading;
#if UNITY_2018_4_OR_NEWER
using UnityEngine.Networking;
#endif
@@ -52,8 +54,7 @@ public class UnitySendMessageDispatcher
/// Target GameObject name.
/// Method to call on the GameObject.
/// Message payload forwarded to the receiver.
- public static void Dispatch(string name, string method, string message)
- {
+ public static void Dispatch(string name, string method, string message) {
GameObject obj = GameObject.Find(name);
if (obj != null)
obj.SendMessage(method, message);
@@ -66,6 +67,9 @@ public static void Dispatch(string name, string method, string message)
///
public class WebViewObject : MonoBehaviour
{
+#if UNITY_ANDROID
+ WebViewCallback callback;
+#endif
Callback onJS;
Callback onError;
Callback onHttpError;
@@ -76,6 +80,11 @@ public class WebViewObject : MonoBehaviour
Callback onAudioFocusChanged;
bool paused;
bool visibility;
+
+ // Thread-safe event queue infrastructure
+ private static int _mainThreadId = -1;
+ private readonly ConcurrentQueue _eventQueue = new ConcurrentQueue();
+
bool alertDialogEnabled;
bool scrollBounceEnabled;
int mMarginLeft;
@@ -114,21 +123,42 @@ public class WebViewObject : MonoBehaviour
NetworkReachability? androidNetworkReachability0 = null;
#endif
- void OnApplicationPause(bool paused)
- {
+ private void OnApplicationPause(bool paused) {
+ // Temporarily disable pausing to ensure the event queue is processed
+ this.paused = false;
+ ProcessEventQueue();
+
this.paused = paused;
+
if (webView == null)
return;
- // if (!paused && mKeyboardVisibleHeight > 0)
- // {
- // webView.Call("SetVisibility", false);
- // mResumedTimestamp = Time.realtimeSinceStartup;
- // }
webView.Call("OnApplicationPause", paused);
}
- void Update()
- {
+ ///
+ /// Called when the component is disabled. Flushes any remaining events in the queue.
+ ///
+ private void OnDisable() {
+ // Flush remaining events before component destruction
+ // Temporarily unpause to allow processing
+ var wasPaused = paused;
+ paused = false;
+ ProcessEventQueue();
+ paused = wasPaused;
+ }
+
+ ///
+ /// Called when the application is about to quit. Flushes any remaining events.
+ ///
+ void OnApplicationQuit() {
+ // Final flush before app closes
+ var wasPaused = paused;
+ paused = false;
+ ProcessEventQueue();
+ paused = wasPaused;
+ }
+
+ private void Update() {
// NOTE:
//
// When OnApplicationPause(true) is called and the app is in closing, webView.Call(...)
@@ -155,227 +185,75 @@ void Update()
return;
#if UNITYWEBVIEW_ANDROID_ENABLE_NAVIGATOR_ONLINE
var t = Time.time;
- if (t - 1.0f >= androidNetworkReachabilityCheckT0)
- {
+ if (t - 1.0f >= androidNetworkReachabilityCheckT0) {
androidNetworkReachabilityCheckT0 = t;
var androidNetworkReachability = Application.internetReachability;
- if (androidNetworkReachability0 != androidNetworkReachability)
- {
+ if (androidNetworkReachability0 != androidNetworkReachability) {
androidNetworkReachability0 = androidNetworkReachability;
webView.Call("SetNetworkAvailable", androidNetworkReachability != NetworkReachability.NotReachable);
}
}
#endif
- if (mResumedTimestamp != 0.0f && Time.realtimeSinceStartup - mResumedTimestamp > 0.5f)
- {
+ if (mResumedTimestamp != 0.0f && Time.realtimeSinceStartup - mResumedTimestamp > 0.5f) {
mResumedTimestamp = 0.0f;
webView.Call("SetVisibility", mVisibility);
}
- if (Screen.height != mLastScreenHeight)
- {
+ if (Screen.height != mLastScreenHeight) {
mLastScreenHeight = Screen.height;
webView.Call("EvaluateJS", "(function() {var e = document.activeElement; if (e != null && e.tagName.toLowerCase() != 'body') {e.blur(); e.focus();}})()");
}
- for (;;) {
- if (webView == null)
- break;
- var s = webView.Call("GetMessage");
- if (s == null)
- break;
- var i = s.IndexOf(':', 0);
- if (i == -1)
- continue;
- switch (s.Substring(0, i)) {
- case "CallFromJS":
- CallFromJS(s.Substring(i + 1));
- break;
- case "CallOnError":
- CallOnError(s.Substring(i + 1));
- break;
- case "CallOnHttpError":
- CallOnHttpError(s.Substring(i + 1));
- break;
- case "CallOnLoaded":
- CallOnLoaded(s.Substring(i + 1));
- break;
- case "CallOnStarted":
- CallOnStarted(s.Substring(i + 1));
- break;
- case "CallOnHooked":
- CallOnHooked(s.Substring(i + 1));
- break;
- case "CallOnAudioFocusChanged":
- CallOnAudioFocusChanged(s.Substring(i + 1));
- break;
- case "SetKeyboardVisible":
- SetKeyboardVisible(s.Substring(i + 1));
- break;
- case "RequestFileChooserPermissions":
- RequestFileChooserPermissions();
- break;
- }
- }
- }
-
- ///
- /// Updates the tracked keyboard height when the native plugin reports visibility changes.
- ///
- /// Keyboard height, in pixels, supplied by the Android plugin.
- public void SetKeyboardVisible(string keyboardVisibleHeight)
- {
- if (BottomAdjustmentDisabled())
- {
- return;
- }
- var keyboardVisibleHeight0 = mKeyboardVisibleHeight;
- var keyboardVisibleHeight1 = Int32.Parse(keyboardVisibleHeight);
- if (keyboardVisibleHeight0 != keyboardVisibleHeight1)
- {
- mKeyboardVisibleHeight = keyboardVisibleHeight1;
- SetMargins(mMarginLeft, mMarginTop, mMarginRight, mMarginBottom, mMarginRelative);
- }
- }
- ///
- /// Requests runtime storage permissions required by the Android file chooser implementation.
- ///
- public void RequestFileChooserPermissions()
- {
- var permissions = new List();
- using (var version = new AndroidJavaClass("android.os.Build$VERSION"))
- {
- if (version.GetStatic("SDK_INT") >= 33)
- {
- if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_IMAGES"))
- {
- permissions.Add("android.permission.READ_MEDIA_IMAGES");
- }
- if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_VIDEO"))
- {
- permissions.Add("android.permission.READ_MEDIA_VIDEO");
- }
- if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_AUDIO"))
- {
- permissions.Add("android.permission.READ_MEDIA_AUDIO");
- }
- }
- else
- {
- if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
- {
- permissions.Add(Permission.ExternalStorageRead);
- }
- if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
- {
- permissions.Add(Permission.ExternalStorageWrite);
- }
- }
- }
- if (!Permission.HasUserAuthorizedPermission(Permission.Camera))
- {
- permissions.Add(Permission.Camera);
- }
- if (permissions.Count > 0)
- {
-#if UNITY_2020_2_OR_NEWER
- var grantedCount = 0;
- var deniedCount = 0;
- var callbacks = new PermissionCallbacks();
- callbacks.PermissionGranted += (permission) =>
- {
- grantedCount++;
- if (grantedCount + deniedCount == permissions.Count)
- {
- StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count));
- }
- };
- callbacks.PermissionDenied += (permission) =>
- {
- deniedCount++;
- if (grantedCount + deniedCount == permissions.Count)
- {
- StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count));
- }
- };
- callbacks.PermissionDeniedAndDontAskAgain += (permission) =>
- {
- deniedCount++;
- if (grantedCount + deniedCount == permissions.Count)
- {
- StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count));
- }
- };
- Permission.RequestUserPermissions(permissions.ToArray(), callbacks);
-#else
- StartCoroutine(RequestFileChooserPermissionsCoroutine(permissions.ToArray()));
-#endif
- }
- else
- {
- StartCoroutine(CallOnRequestFileChooserPermissionsResult(true));
- }
+ // Process any events queued from background threads
+ ProcessEventQueue();
}
#if UNITY_2020_2_OR_NEWER
#else
int mRequestPermissionPhase;
- IEnumerator RequestFileChooserPermissionsCoroutine(string[] permissions)
- {
- foreach (var permission in permissions)
- {
+ IEnumerator RequestFileChooserPermissionsCoroutine(string[] permissions) {
+ foreach (var permission in permissions) {
mRequestPermissionPhase = 0;
Permission.RequestUserPermission(permission);
// waiting permission dialog that may not be opened.
- for (var i = 0; i < 8 && mRequestPermissionPhase == 0; i++)
- {
+ for (var i = 0; i < 8 && mRequestPermissionPhase == 0; i++) {
yield return new WaitForSeconds(0.25f);
}
- if (mRequestPermissionPhase == 0)
- {
+ if (mRequestPermissionPhase == 0) {
// permission dialog was not opened.
continue;
}
- while (mRequestPermissionPhase == 1)
- {
+ while (mRequestPermissionPhase == 1) {
yield return new WaitForSeconds(0.3f);
}
}
yield return new WaitForSeconds(0.3f);
var granted = 0;
- foreach (var permission in permissions)
- {
- if (Permission.HasUserAuthorizedPermission(permission))
- {
+ foreach (var permission in permissions) {
+ if (Permission.HasUserAuthorizedPermission(permission)) {
granted++;
}
}
StartCoroutine(CallOnRequestFileChooserPermissionsResult(granted == permissions.Length));
}
- void OnApplicationFocus(bool hasFocus)
- {
- if (hasFocus)
- {
- if (mRequestPermissionPhase == 1)
- {
+ void OnApplicationFocus(bool hasFocus) {
+ if (hasFocus) {
+ if (mRequestPermissionPhase == 1) {
mRequestPermissionPhase = 2;
}
}
else
{
- if (mRequestPermissionPhase == 0)
- {
+ if (mRequestPermissionPhase == 0) {
mRequestPermissionPhase = 1;
}
}
}
#endif
- private IEnumerator CallOnRequestFileChooserPermissionsResult(bool granted)
- {
- for (var i = 0; i < 3; i++)
- {
+ private IEnumerator CallOnRequestFileChooserPermissionsResult(bool granted) {
+ for (var i = 0; i < 3; i++) {
yield return null;
}
webView.Call("OnRequestFileChooserPermissionsResult", granted);
@@ -386,14 +264,11 @@ private IEnumerator CallOnRequestFileChooserPermissionsResult(bool granted)
///
/// Original bottom margin in pixels.
/// The adjusted bottom margin accounting for keyboard height.
- public int AdjustBottomMargin(int bottom)
- {
- if (BottomAdjustmentDisabled())
- {
+ public int AdjustBottomMargin(int bottom) {
+ if (BottomAdjustmentDisabled()) {
return bottom;
}
- else if (mKeyboardVisibleHeight <= 0)
- {
+ else if (mKeyboardVisibleHeight <= 0) {
return bottom;
}
else
@@ -403,10 +278,8 @@ public int AdjustBottomMargin(int bottom)
using (var activity = unityClass.GetStatic("currentActivity"))
using (var player = activity.Get("mUnityPlayer"))
using (var view = player.Call("getView"))
- using (var rect = new AndroidJavaObject("android.graphics.Rect"))
- {
- if (view.Call("getGlobalVisibleRect", rect))
- {
+ using (var rect = new AndroidJavaObject("android.graphics.Rect")) {
+ if (view.Call("getGlobalVisibleRect", rect)) {
int h0 = rect.Get("bottom");
view.Call("getWindowVisibleDisplayFrame", rect);
int h1 = rect.Get("bottom");
@@ -417,8 +290,7 @@ public int AdjustBottomMargin(int bottom)
}
}
- private bool BottomAdjustmentDisabled()
- {
+ private bool BottomAdjustmentDisabled() {
#if UNITYWEBVIEW_ANDROID_FORCE_MARGIN_ADJUSTMENT_FOR_KEYBOARD
return false;
#else
@@ -432,8 +304,12 @@ private bool BottomAdjustmentDisabled()
IntPtr webView;
#endif
- void Awake()
- {
+ private void Awake() {
+ // Capture the main thread ID for thread-safe event queueing
+ if (_mainThreadId == -1) {
+ _mainThreadId = Thread.CurrentThread.ManagedThreadId;
+ }
+
Debug.Log($"Initializing WebViewObject v{VersionInfo.VERSION}");
alertDialogEnabled = true;
scrollBounceEnabled = true;
@@ -443,6 +319,21 @@ void Awake()
mMarginBottomComputed = -9999;
}
+ ///
+ /// Secondary event drain called after all Update() methods have run.
+ /// Catches any events queued during the current frame's Update cycle.
+ ///
+ private void LateUpdate() {
+ ProcessEventQueue();
+ }
+
+ ///
+ /// Catches any events queued during the current frame's FixedUpdate cycle.
+ ///
+ private void FixedUpdate() {
+ ProcessEventQueue();
+ }
+
///
/// Gets a value indicating whether the soft keyboard is currently visible.
///
@@ -627,11 +518,9 @@ private static extern void _CWebViewPlugin_Reload(
/// Determines whether the current platform exposes a compatible WebView implementation.
///
/// true when the underlying native plugin can be instantiated; otherwise false.
- public static bool IsWebViewAvailable()
- {
+ public static bool IsWebViewAvailable() {
#if !UNITY_EDITOR && UNITY_ANDROID
- using (var plugin = new AndroidJavaObject("net.gree.unitywebview.CWebViewPlugin"))
- {
+ using (var plugin = new AndroidJavaObject("net.gree.unitywebview.CWebViewPlugin")) {
return plugin.CallStatic("IsWebViewAvailable");
}
#else
@@ -680,9 +569,7 @@ public void Init(
bool wkAllowsLinkPreview = true,
bool wkAllowsBackForwardNavigationGestures = true,
// editor
- bool separated = false,
- Callback audioFocusChanged = null)
- {
+ bool separated = false) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
_CWebViewPlugin_InitStatic(
Application.platform == RuntimePlatform.OSXEditor,
@@ -695,7 +582,6 @@ public void Init(
onLoaded = ld;
onHooked = hooked;
onCookies = cookies;
- onAudioFocusChanged = audioFocusChanged;
#if UNITY_WEBGL
#if !UNITY_EDITOR
_gree_unity_webview_init(name);
@@ -741,13 +627,16 @@ public void Init(
webView.SetStatic("forceBringToFront", true);
#endif
webView.Call("Init", name, transparent, zoom, androidForceDarkMode, ua, radius);
+
+ // Set up direct callback for zero-delay event delivery
+ callback = new (this);
+ webView.Call("SetCallback", callback);
#else
Debug.LogError("Webview is not supported on this platform.");
#endif
}
- public void Destroy()
- {
+ private void OnDestroy() {
#if UNITY_WEBGL
#if !UNITY_EDITOR
_gree_unity_webview_destroy(name);
@@ -782,8 +671,7 @@ public void Destroy()
///
/// Pauses WebView timers and rendering to match Unity's lifecycle.
///
- public void Pause()
- {
+ public void Pause() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -805,8 +693,7 @@ public void Pause()
///
/// Resumes WebView timers previously paused via .
///
- public void Resume()
- {
+ public void Resume() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -828,8 +715,7 @@ public void Resume()
///
/// Desired centre position in screen pixels (historically anchored to lower-left).
/// Desired width and height of the WebView in pixels.
- public void SetCenterPositionWithScale(Vector2 center, Vector2 scale)
- {
+ public void SetCenterPositionWithScale(Vector2 center, Vector2 scale) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -851,8 +737,7 @@ public void SetCenterPositionWithScale(Vector2 center, Vector2 scale)
/// Right margin in pixels or percentage.
/// Bottom margin in pixels or percentage.
/// When true, margins are interpreted as percentages of the screen size.
- public void SetMargins(int left, int top, int right, int bottom, bool relative = false)
- {
+ public void SetMargins(int left, int top, int right, int bottom, bool relative = false) {
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
//TODO: UNSUPPORTED
return;
@@ -887,8 +772,7 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative =
mr = right;
mb = bottom;
#elif UNITY_IPHONE
- if (relative)
- {
+ if (relative) {
float w = (float)Screen.width;
float h = (float)Screen.height;
ml = left / w;
@@ -904,20 +788,17 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative =
mb = bottom;
}
#elif UNITY_ANDROID
- if (relative)
- {
+ if (relative) {
float w = (float)Screen.width;
float h = (float)Screen.height;
int iw = Display.main.systemWidth;
int ih = Display.main.systemHeight;
- if (!Screen.fullScreen)
- {
+ if (!Screen.fullScreen) {
using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (var activity = unityClass.GetStatic("currentActivity"))
using (var player = activity.Get("mUnityPlayer"))
using (var view = player.Call("getView"))
- using (var rect = new AndroidJavaObject("android.graphics.Rect"))
- {
+ using (var rect = new AndroidJavaObject("android.graphics.Rect")) {
view.Call("getDrawingRect", rect);
iw = rect.Call("width");
ih = rect.Call("height");
@@ -942,8 +823,7 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative =
&& mt == mMarginTopComputed
&& mr == mMarginRightComputed
&& mb == mMarginBottomComputed
- && r == mMarginRelativeComputed)
- {
+ && r == mMarginRelativeComputed) {
return;
}
mMarginLeftComputed = ml;
@@ -975,16 +855,13 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative =
/// Shows or hides the WebView while keeping its state intact.
///
/// true to make the WebView visible; otherwise false.
- public void SetVisibility(bool v)
- {
+ public void SetVisibility(bool v) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
- if (bg != null)
- {
- bg.gameObject.active = v;
+ if (bg != null) {
+ bg.gameObject.SetActive(v);
}
#endif
- if (GetVisibility() && !v)
- {
+ if (GetVisibility() && !v) {
EvaluateJS("if (document && document.activeElement) document.activeElement.blur();");
}
#if UNITY_WEBGL
@@ -1015,8 +892,7 @@ public void SetVisibility(bool v)
///
/// Gets the last visibility flag applied to the WebView.
///
- public bool GetVisibility()
- {
+ public bool GetVisibility() {
return visibility;
}
@@ -1024,8 +900,7 @@ public bool GetVisibility()
/// Toggles native scroll bar rendering where supported.
///
/// true to show scroll bars; otherwise false.
- public void SetScrollbarsVisibility(bool v)
- {
+ public void SetScrollbarsVisibility(bool v) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
// TODO: UNSUPPORTED
#elif UNITY_IPHONE
@@ -1046,7 +921,7 @@ public void SetScrollbarsVisibility(bool v)
///
/// Whether debugging should be enabled.
public void EnableWebviewDebugging(bool enabled) {
-#if UNITY_ANDROID && !(UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX)
+#if UNITY_ANDROID && !UNITY_EDITOR
if (webView == null) {
return;
}
@@ -1061,8 +936,7 @@ public void EnableWebviewDebugging(bool enabled) {
/// Enables or disables user interaction with the WebView surface.
///
/// Whether touch input is forwarded to the WebView.
- public void SetInteractionEnabled(bool enabled)
- {
+ public void SetInteractionEnabled(bool enabled) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
// TODO: UNSUPPORTED
#elif UNITY_IPHONE
@@ -1082,8 +956,7 @@ public void SetInteractionEnabled(bool enabled)
/// Controls whether JavaScript alert/confirm/prompt dialogs are permitted.
///
/// true to allow dialogs; otherwise false.
- public void SetAlertDialogEnabled(bool e)
- {
+ public void SetAlertDialogEnabled(bool e) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
// TODO: UNSUPPORTED
#elif UNITY_IPHONE
@@ -1103,8 +976,7 @@ public void SetAlertDialogEnabled(bool e)
///
/// Gets the cached alert dialog enable flag.
///
- public bool GetAlertDialogEnabled()
- {
+ public bool GetAlertDialogEnabled() {
return alertDialogEnabled;
}
@@ -1112,8 +984,7 @@ public bool GetAlertDialogEnabled()
/// Toggles bouncing/elastic scrolling on supported platforms.
///
/// true to enable bouncing, otherwise false.
- public void SetScrollBounceEnabled(bool e)
- {
+ public void SetScrollBounceEnabled(bool e) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
// TODO: UNSUPPORTED
#elif UNITY_IPHONE
@@ -1131,8 +1002,7 @@ public void SetScrollBounceEnabled(bool e)
///
/// Gets the cached bounce/elastic scrolling flag.
///
- public bool GetScrollBounceEnabled()
- {
+ public bool GetScrollBounceEnabled() {
return scrollBounceEnabled;
}
@@ -1140,8 +1010,7 @@ public bool GetScrollBounceEnabled()
/// Grants or revokes camera access for WebRTC and file input elements.
///
/// Whether the WebView should expose camera capture to web content.
- public void SetCameraAccess(bool allowed)
- {
+ public void SetCameraAccess(bool allowed) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
// TODO: UNSUPPORTED
#elif UNITY_IPHONE
@@ -1159,8 +1028,7 @@ public void SetCameraAccess(bool allowed)
/// Grants or revokes microphone access for WebRTC and audio capture flows.
///
/// Whether the WebView should expose microphone capture to web content.
- public void SetMicrophoneAccess(bool allowed)
- {
+ public void SetMicrophoneAccess(bool allowed) {
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
// TODO: UNSUPPORTED
#elif UNITY_IPHONE
@@ -1177,24 +1045,22 @@ public void SetMicrophoneAccess(bool allowed)
///
/// Forces the Android plugin to request audio focus back for Unity's audio subsystem.
///
- public void RequestUnityAudioFocus()
- {
+ public void RequestUnityAudioFocus() {
#if UNITY_ANDROID && !UNITY_EDITOR
if (webView == null)
return;
- webView.Call("RequestUnityAudioFocus");
+ webView.Call("requestUnityAudioFocus");
#endif
}
///
/// Relinquishes Unity's audio focus so WebView media can take control.
///
- public void AbandonUnityAudioFocus()
- {
+ public void AbandonUnityAudioFocus() {
#if UNITY_ANDROID && !UNITY_EDITOR
if (webView == null)
return;
- webView.Call("AbandonUnityAudioFocus");
+ webView.Call("abandonUnityAudioFocus");
#endif
}
@@ -1205,8 +1071,7 @@ public void AbandonUnityAudioFocus()
/// Regex pattern for URLs that should be blocked.
/// Regex pattern that triggers hook callbacks.
/// true if the operation is supported on the current platform.
- public bool SetURLPattern(string allowPattern, string denyPattern, string hookPattern)
- {
+ public bool SetURLPattern(string allowPattern, string denyPattern, string hookPattern) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
return false;
@@ -1228,8 +1093,7 @@ public bool SetURLPattern(string allowPattern, string denyPattern, string hookPa
/// Navigates the WebView to the specified URL.
///
/// Absolute or relative URL to load.
- public void LoadURL(string url)
- {
+ public void LoadURL(string url) {
if (string.IsNullOrEmpty(url))
return;
#if UNITY_WEBGL
@@ -1256,8 +1120,7 @@ public void LoadURL(string url)
///
/// HTML markup to display.
/// Base URL used for resolving relative paths.
- public void LoadHTML(string html, string baseUrl)
- {
+ public void LoadHTML(string html, string baseUrl) {
if (string.IsNullOrEmpty(html))
return;
if (string.IsNullOrEmpty(baseUrl))
@@ -1281,8 +1144,7 @@ public void LoadHTML(string html, string baseUrl)
/// Evaluates JavaScript inside the current WebView context.
///
/// Script source to execute.
- public void EvaluateJS(string js)
- {
+ public void EvaluateJS(string js) {
#if UNITY_WEBGL
#if !UNITY_EDITOR
_gree_unity_webview_evaluateJS(name, js);
@@ -1305,8 +1167,7 @@ public void EvaluateJS(string js)
///
/// Returns the current navigation progress percentage where supported.
///
- public int Progress()
- {
+ public int Progress() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
return 0;
@@ -1327,8 +1188,7 @@ public int Progress()
///
/// Returns whether the WebView has a previous page in its navigation history.
///
- public bool CanGoBack()
- {
+ public bool CanGoBack() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
return false;
@@ -1349,8 +1209,7 @@ public bool CanGoBack()
///
/// Returns whether the WebView can navigate forward in its history stack.
///
- public bool CanGoForward()
- {
+ public bool CanGoForward() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
return false;
@@ -1371,8 +1230,7 @@ public bool CanGoForward()
///
/// Navigates to the previous entry in the WebView history if available.
///
- public void GoBack()
- {
+ public void GoBack() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1391,8 +1249,7 @@ public void GoBack()
///
/// Navigates to the next entry in the WebView history if available.
///
- public void GoForward()
- {
+ public void GoForward() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1411,8 +1268,7 @@ public void GoForward()
///
/// Reloads the current WebView page.
///
- public void Reload()
- {
+ public void Reload() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1428,62 +1284,184 @@ public void Reload()
#endif
}
+ #region Thread-Safe Event Queue
+
+ ///
+ /// Checks if the current thread is the Unity main thread.
+ ///
+ /// True if executing on the main thread, false otherwise.
+ private bool IsMainThread() {
+ if (_mainThreadId == -1)
+ return false; // Defensive: queue if main thread ID not yet captured
+ return Thread.CurrentThread.ManagedThreadId == _mainThreadId;
+ }
+
+ ///
+ /// Processes all queued events on the main thread.
+ /// Called from Update(), LateUpdate(), and lifecycle hooks.
+ /// Safe to call multiple times (idempotent).
+ ///
+ private void ProcessEventQueue() {
+ if (paused)
+ return;
+
+ WebViewEvent evt;
+ while (_eventQueue.TryDequeue(out evt)) {
+ try
+ {
+ DispatchEvent(evt);
+ }
+ catch (Exception ex) {
+ Debug.LogError($"WebView event handler exception for {evt.Type}: {ex}");
+ // Continue processing remaining events
+ }
+ }
+ }
+
+ ///
+ /// Dispatches a single event to the appropriate callback.
+ ///
+ /// The event to dispatch.
+ private void DispatchEvent(WebViewEvent evt) {
+ switch (evt.Type) {
+ case WebViewEvent.EventType.Message:
+ CallFromJS(evt.Payload);
+ break;
+ case WebViewEvent.EventType.Error:
+ CallOnError(evt.Payload);
+ break;
+ case WebViewEvent.EventType.HttpError:
+ CallOnHttpError(evt.Payload);
+ break;
+ case WebViewEvent.EventType.Started:
+ CallOnStarted(evt.Payload);
+ break;
+ case WebViewEvent.EventType.Loaded:
+ CallOnLoaded(evt.Payload);
+ break;
+ case WebViewEvent.EventType.Hooked:
+ CallOnHooked(evt.Payload);
+ break;
+ case WebViewEvent.EventType.Cookies:
+ CallOnCookies(evt.Payload);
+ break;
+ case WebViewEvent.EventType.AudioFocusChanged:
+ CallOnAudioFocusChanged(evt.Payload);
+ break;
+ case WebViewEvent.EventType.KeyboardHeightChanged:
+ SetKeyboardVisible(evt.Payload);
+ break;
+ case WebViewEvent.EventType.FileChooserPermissions:
+ RequestFileChooserPermissions();
+ break;
+ case WebViewEvent.EventType.Unknown:
+ Debug.LogWarning($"Unknown WebView event received: {evt.Payload}");
+ break;
+ }
+ }
+
+ ///
+ /// Enqueues an event from a native bridge message string.
+ /// Thread-safe - can be called from any thread.
+ ///
+ /// The raw message in "Type:Payload" format.
+ public void EnqueueEvent(string message) {
+ var evt = WebViewEvent.FromNativeMessage(message);
+ if (evt != null) {
+ _eventQueue.Enqueue(evt);
+ }
+ }
+
+ ///
+ /// Enqueues a WebViewEvent directly.
+ /// Thread-safe - can be called from any thread.
+ ///
+ /// The event to enqueue.
+ public void EnqueueEvent(WebViewEvent evt) {
+ if (evt != null) {
+ _eventQueue.Enqueue(evt);
+ }
+ }
+
+ ///
+ /// Gets the current number of events in the queue.
+ /// Useful for debugging and performance monitoring.
+ ///
+ public int EventQueueCount => _eventQueue.Count;
+
+ #endregion
+
///
/// Invokes the registered error callback with the supplied message.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// Descriptive error message.
- public void CallOnError(string error)
- {
- if (onError != null)
- {
+ public void CallOnError(string error) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.Error(error));
+ return;
+ }
+ if (onError != null) {
onError(error);
}
}
///
/// Invokes the registered HTTP error callback for the given status information.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// HTTP error payload (status code or detail string).
- public void CallOnHttpError(string error)
- {
- if (onHttpError != null)
- {
+ public void CallOnHttpError(string error) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.HttpError(error));
+ return;
+ }
+ if (onHttpError != null) {
onHttpError(error);
}
}
///
/// Forwards navigation-start notifications to the Unity listener.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// URL that began loading.
- public void CallOnStarted(string url)
- {
- if (onStarted != null)
- {
+ public void CallOnStarted(string url) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.Started(url));
+ return;
+ }
+ if (onStarted != null) {
onStarted(url);
}
}
///
/// Forwards navigation-complete notifications to the Unity listener.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// URL that finished loading.
- public void CallOnLoaded(string url)
- {
- if (onLoaded != null)
- {
+ public void CallOnLoaded(string url) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.Loaded(url));
+ return;
+ }
+ if (onLoaded != null) {
onLoaded(url);
}
}
///
/// Dispatches JavaScript messages received from the native bridge to managed listeners.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// Message payload supplied by the page.
- public void CallFromJS(string message)
- {
- if (onJS != null)
- {
+ public void CallFromJS(string message) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.Message(message));
+ return;
+ }
+ if (onJS != null) {
#if !UNITY_ANDROID
#if UNITY_2018_4_OR_NEWER
message = UnityWebRequest.UnEscapeURL(message);
@@ -1497,12 +1475,15 @@ public void CallFromJS(string message)
///
/// Dispatches URL-hook notifications to managed listeners.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// Hooked URL reported by the native layer.
- public void CallOnHooked(string message)
- {
- if (onHooked != null)
- {
+ public void CallOnHooked(string message) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.Hooked(message));
+ return;
+ }
+ if (onHooked != null) {
#if !UNITY_ANDROID
#if UNITY_2018_4_OR_NEWER
message = UnityWebRequest.UnEscapeURL(message);
@@ -1516,34 +1497,138 @@ public void CallOnHooked(string message)
///
/// Delivers cookie information retrieved from the WebView.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// Cookie string in standard HTTP header format.
- public void CallOnCookies(string cookies)
- {
- if (onCookies != null)
- {
+ public void CallOnCookies(string cookies) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.Cookies(cookies));
+ return;
+ }
+ if (onCookies != null) {
onCookies(cookies);
}
}
///
/// Dispatches audio focus state transitions emitted by the Android plugin.
+ /// Thread-safe: if called from a background thread, the event is queued for main thread processing.
///
/// State identifier such as webview-start or unity-gain.
- public void CallOnAudioFocusChanged(string state)
- {
- if (onAudioFocusChanged != null)
- {
+ public void CallOnAudioFocusChanged(string state) {
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.AudioFocusChanged(state));
+ return;
+ }
+ if (onAudioFocusChanged != null) {
onAudioFocusChanged(state);
}
}
+ ///
+ /// Updates the tracked keyboard height when the native plugin reports visibility changes.
+ ///
+ /// Keyboard height, in pixels, supplied by the Android plugin.
+ public void SetKeyboardVisible(string keyboardVisibleHeight) {
+#if !UNITY_ANDROID || UNITY_EDITOR || UNITY_STANDALONE
+ return;
+#else
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.KeyboardHeightChanged(keyboardVisibleHeight));
+ return;
+ }
+ if (BottomAdjustmentDisabled()) {
+ return;
+ }
+ var keyboardVisibleHeight0 = mKeyboardVisibleHeight;
+ var keyboardVisibleHeight1 = Int32.Parse(keyboardVisibleHeight);
+ if (keyboardVisibleHeight0 != keyboardVisibleHeight1) {
+ mKeyboardVisibleHeight = keyboardVisibleHeight1;
+ SetMargins(mMarginLeft, mMarginTop, mMarginRight, mMarginBottom, mMarginRelative);
+ }
+#endif
+ }
+
+ ///
+ /// Requests runtime storage permissions required by the Android file chooser implementation.
+ ///
+ public void RequestFileChooserPermissions() {
+#if !UNITY_ANDROID || UNITY_EDITOR || UNITY_STANDALONE
+ return;
+#else
+ if (!IsMainThread()) {
+ EnqueueEvent(WebViewEvent.FileChooserPermissions());
+ return;
+ }
+ var permissions = new List();
+ using (var version = new AndroidJavaClass("android.os.Build$VERSION")) {
+ if (version.GetStatic("SDK_INT") >= 33) {
+ if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_IMAGES")) {
+ permissions.Add("android.permission.READ_MEDIA_IMAGES");
+ }
+ if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_VIDEO")) {
+ permissions.Add("android.permission.READ_MEDIA_VIDEO");
+ }
+ if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_AUDIO")) {
+ permissions.Add("android.permission.READ_MEDIA_AUDIO");
+ }
+ }
+ else
+ {
+ if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead)) {
+ permissions.Add(Permission.ExternalStorageRead);
+ }
+ if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)) {
+ permissions.Add(Permission.ExternalStorageWrite);
+ }
+ }
+ }
+ if (!Permission.HasUserAuthorizedPermission(Permission.Camera)) {
+ permissions.Add(Permission.Camera);
+ }
+ if (permissions.Count > 0) {
+#if UNITY_2020_2_OR_NEWER
+ var grantedCount = 0;
+ var deniedCount = 0;
+ var callbacks = new PermissionCallbacks();
+ callbacks.PermissionGranted += (permission) =>
+ {
+ grantedCount++;
+ if (grantedCount + deniedCount == permissions.Count) {
+ StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count));
+ }
+ };
+ callbacks.PermissionDenied += (permission) =>
+ {
+ deniedCount++;
+ if (grantedCount + deniedCount == permissions.Count) {
+ StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count));
+ }
+ };
+ callbacks.PermissionDeniedAndDontAskAgain += (permission) =>
+ {
+ deniedCount++;
+ if (grantedCount + deniedCount == permissions.Count) {
+ StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count));
+ }
+ };
+ Permission.RequestUserPermissions(permissions.ToArray(), callbacks);
+#else
+ StartCoroutine(RequestFileChooserPermissionsCoroutine(permissions.ToArray()));
+#endif
+ }
+ else
+ {
+ StartCoroutine(CallOnRequestFileChooserPermissionsResult(true));
+ }
+#endif
+ }
+
///
/// Overrides the audio focus change callback at runtime.
///
/// Callback invoked for audio focus transitions.
- public void SetOnAudioFocusChanged(Callback cb)
- {
+ public void SetOnAudioFocusChanged(Callback cb) {
onAudioFocusChanged = cb;
}
@@ -1552,8 +1637,7 @@ public void SetOnAudioFocusChanged(Callback cb)
///
/// HTTP header key.
/// Header value.
- public void AddCustomHeader(string headerKey, string headerValue)
- {
+ public void AddCustomHeader(string headerKey, string headerValue) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1574,8 +1658,7 @@ public void AddCustomHeader(string headerKey, string headerValue)
///
/// HTTP header key to query.
/// The stored header value or null if none is found.
- public string GetCustomHeaderValue(string headerKey)
- {
+ public string GetCustomHeaderValue(string headerKey) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
return null;
@@ -1597,8 +1680,7 @@ public string GetCustomHeaderValue(string headerKey)
/// Removes a custom header so it is no longer appended to web requests.
///
/// HTTP header key to remove.
- public void RemoveCustomHeader(string headerKey)
- {
+ public void RemoveCustomHeader(string headerKey) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
#elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IPHONE
@@ -1615,8 +1697,7 @@ public void RemoveCustomHeader(string headerKey)
///
/// Clears all previously added custom headers.
///
- public void ClearCustomHeader()
- {
+ public void ClearCustomHeader() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1635,8 +1716,7 @@ public void ClearCustomHeader()
///
/// Deletes persistent WebView cookies where supported.
///
- public void ClearCookies()
- {
+ public void ClearCookies() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1656,8 +1736,7 @@ public void ClearCookies()
///
/// Flushes the in-memory cookie store to disk.
///
- public void SaveCookies()
- {
+ public void SaveCookies() {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1678,8 +1757,7 @@ public void SaveCookies()
/// Requests the cookie string for a given URL. Result is returned via .
///
/// URL whose cookies should be retrieved.
- public void GetCookies(string url)
- {
+ public void GetCookies(string url) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1702,8 +1780,7 @@ public void GetCookies(string url)
///
/// HTTP basic auth user name.
/// HTTP basic auth password.
- public void SetBasicAuthInfo(string userName, string password)
- {
+ public void SetBasicAuthInfo(string userName, string password) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1725,8 +1802,7 @@ public void SetBasicAuthInfo(string userName, string password)
/// Clears the WebView cache, optionally including disk-backed resources.
///
/// When true, disk cache entries are also removed.
- public void ClearCache(bool includeDiskFiles)
- {
+ public void ClearCache(bool includeDiskFiles) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1747,8 +1823,7 @@ public void ClearCache(bool includeDiskFiles)
/// Adjusts the Android text zoom scaling factor (100 is default size).
///
/// Text zoom percentage.
- public void SetTextZoom(int textZoom)
- {
+ public void SetTextZoom(int textZoom) {
#if UNITY_WEBPLAYER || UNITY_WEBGL
//TODO: UNSUPPORTED
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX
@@ -1763,18 +1838,14 @@ public void SetTextZoom(int textZoom)
}
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
- void OnApplicationFocus(bool focus)
- {
- if (!focus)
- {
+ void OnApplicationFocus(bool focus) {
+ if (!focus) {
hasFocus = false;
}
}
- void Start()
- {
- if (canvas != null)
- {
+ void Start() {
+ if (canvas != null) {
var g = new GameObject(gameObject.name + "BG");
g.transform.parent = canvas.transform;
bg = g.AddComponent();
@@ -1782,8 +1853,7 @@ void Start()
}
}
- void Update()
- {
+ void Update() {
if (bg != null) {
bg.transform.SetAsLastSibling();
}
@@ -1823,6 +1893,10 @@ void Update()
break;
}
}
+
+ // Process any events queued from background threads
+ ProcessEventQueue();
+
if (webView == IntPtr.Zero || !visibility)
return;
bool refreshBitmap = (Time.frameCount % bitmapRefreshCycle == 0);
@@ -1849,8 +1923,7 @@ void Update()
}
}
- void UpdateBGTransform()
- {
+ void UpdateBGTransform() {
if (bg != null) {
bg.rectTransform.anchorMin = Vector2.zero;
bg.rectTransform.anchorMax = Vector2.zero;
@@ -1871,8 +1944,7 @@ void UpdateBGTransform()
///
public int devicePixelRatio = 1;
- void OnGUI()
- {
+ void OnGUI() {
if (webView == IntPtr.Zero || !visibility)
return;
switch (Event.current.type) {
diff --git a/Assets/Packager/Editor/Packager.cs b/Assets/Packager/Editor/Packager.cs
index 8549ac1f..59515623 100644
--- a/Assets/Packager/Editor/Packager.cs
+++ b/Assets/Packager/Editor/Packager.cs
@@ -80,27 +80,6 @@ private static void ExportPackage(string outputPath) {
Debug.ClearDeveloperConsole();
AirConsoleLogger.Log(() => $"Exporting to {outputPath}");
- string packageCache = Path.GetFullPath(Path.Combine(Application.dataPath, "..", "Library", "PackageCache"));
- string webviewPackagePath =
- Directory.GetDirectories(packageCache).FirstOrDefault(d => d.Contains("com.airconsole.unity-webview"));
-
- if (!Directory.Exists(webviewPackagePath)) {
- EditorUtility.DisplayDialog("Error", "Can not find airconsole webview package", "OK");
- AirConsoleLogger.LogError(() => "Can not find airconsole webview package");
- return;
- }
-
- string webviewPackagePathAssets = Path.Combine(webviewPackagePath, "Assets");
-
- string targetPath = Path.GetFullPath(Path.Combine(Application.dataPath, "AirConsole", "unity-webview"));
- DeleteAssetDatabaseDirectory(targetPath);
- AssetDatabase.Refresh();
-
- EditorApplication.LockReloadAssemblies();
-
- MoveSubDirectories(webviewPackagePathAssets, targetPath);
- File.Move(Path.Combine(webviewPackagePath, "unity-webview.asmdef"), Path.Combine(targetPath, "unity-webview.asmdef"));
- File.Move(Path.Combine(webviewPackagePath, "unity-webview.asmdef.meta"), Path.Combine(targetPath, "unity-webview.asmdef.meta"));
RemoveControllersFromWebGlTemplates();
RemoveAirConsolePreferences();
AssetDatabase.Refresh();
@@ -110,13 +89,8 @@ private static void ExportPackage(string outputPath) {
CollectPackageInclusionPaths(packagePath, out IEnumerable packageInclusionPaths);
AssetDatabase.ExportPackage(packageInclusionPaths.ToArray(), outputPath, ExportPackageOptions.Recurse);
- File.Move(Path.Combine(targetPath, "unity-webview.asmdef"), Path.Combine(webviewPackagePath, "unity-webview.asmdef"));
- File.Move(Path.Combine(targetPath, "unity-webview.asmdef.meta"), Path.Combine(webviewPackagePath, "unity-webview.asmdef.meta"));
- MoveSubDirectories(targetPath, webviewPackagePathAssets);
- DeleteAssetDatabaseDirectory(targetPath);
CleanupCodePackage();
- AssetDatabase.Refresh();
- EditorApplication.UnlockReloadAssemblies();
+
Debug.ClearDeveloperConsole();
}
diff --git a/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js b/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js
index a27095ac..0ac711af 100644
--- a/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js
+++ b/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js
@@ -1,6 +1,6 @@
/**
* Copyright by N-Dream AG 2025.
- * @version 2.6.0
+ * @version 2.6.2
*/
/**
@@ -9,6 +9,10 @@
function App(container, canvas, web_config, progress_config) {
var me = this;
+
+ // TODO(PRO-1804): Remove this workaround when Android TV uses a fullscreen webview too
+ const isAndroidTV = window.location.search.includes('androidTv=1');
+ window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING = window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING && !isAndroidTV;
me.is_native_app = typeof Unity != "undefined";
me.is_editor = !!me.getURLParameterByName("unity-editor-websocket-port");
diff --git a/Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta b/Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta
deleted file mode 100644
index 120bdf38..00000000
--- a/Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: b63b835fd6ecf40dea8c11e1afe40ec6
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js b/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js
index 1c556c1f..c10b995b 100644
--- a/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js
+++ b/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js
@@ -1,6 +1,6 @@
/**
* Copyright by N-Dream AG 2025.
- * @version 2.6.0
+ * @version 2.6.2
*/
/**
@@ -9,7 +9,11 @@
function App(container, canvas, web_config, progress_config) {
var me = this;
-
+
+ // TODO(PRO-1804): Remove this workaround when Android TV uses a fullscreen webview too
+ const isAndroidTV = window.location.search.includes('androidTv=1');
+ window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING = window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING && !isAndroidTV;
+
me.is_native_app = typeof Unity != "undefined";
me.is_editor = !!me.getURLParameterByName("unity-editor-websocket-port");
if (!window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING) {
diff --git a/Builds/internalonly-airconsole-unity-plugin-v2.6.2-rc2.unitypackage b/Builds/internalonly-airconsole-unity-plugin-v2.6.2-rc2.unitypackage
new file mode 100644
index 00000000..5068f761
Binary files /dev/null and b/Builds/internalonly-airconsole-unity-plugin-v2.6.2-rc2.unitypackage differ
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d0ecff21..ef478590 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,9 @@ This includes security related updates like requiring fixed Unity versions and i
- **Unity API:** `OnMaximumVolumeChanged` event to notify when the games maximum volume must be changed.
- **Android:** After the last device disconnects, the webview is reset along the game state.
- **Android:** Add support to override the game version used in a previously built android game through intent extras with adb.
+- **Android:** The support for native game sizing is communicated
+- **Android Audio Focus:** Improvements to match the expected behavior on Android Automotive.
+- **Android Audio Focus:** Drive maximum volume based on Android system requirements to avoid pausing when losing audio focus.
### Removed
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index a62772ed..abf9128d 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -885,8 +885,8 @@ PlayerSettings:
webGLMemoryGeometricGrowthCap: 96
webGLPowerPreference: 2
scriptingDefineSymbols:
- Android:
- WebGL:
+ Android:
+ WebGL:
additionalCompilerArguments:
Android: []
platformArchitecture: