From da150cd322a7804a5789524a8905018590eed5ee Mon Sep 17 00:00:00 2001 From: Yuval Dolev Date: Fri, 27 Dec 2019 23:59:59 +0200 Subject: [PATCH] Merged mac_4ed.cpp into mac_4ed.mm so now we have only 1 main file for the macOS platform layer. --- bin/4ed_build.cpp | 2 +- custom/generated/command_metadata.h | 458 +++++++++--------- .../Resources/DWARF/metadata_generator | Bin 138399 -> 136740 bytes platform_mac/mac_4ed.cpp | 141 ------ platform_mac/mac_4ed.mm | 167 +++++-- ...4ed_functions.cpp => mac_4ed_functions.mm} | 15 +- 6 files changed, 362 insertions(+), 421 deletions(-) delete mode 100644 platform_mac/mac_4ed.cpp rename platform_mac/{mac_4ed_functions.cpp => mac_4ed_functions.mm} (94%) diff --git a/bin/4ed_build.cpp b/bin/4ed_build.cpp index f15d0040..146169fb 100644 --- a/bin/4ed_build.cpp +++ b/bin/4ed_build.cpp @@ -94,7 +94,7 @@ char *includes[] = { "custom", FOREIGN "/freetype2", 0, }; char *windows_platform_layer[] = { "platform_win32/win32_4ed.cpp", 0 }; char *linux_platform_layer[] = { "platform_linux/linux_4ed.cpp", 0 }; -char *mac_platform_layer[] = { "platform_mac/mac_4ed.mm", "platform_mac/mac_4ed.cpp", 0 }; +char *mac_platform_layer[] = { "platform_mac/mac_4ed.mm", 0 }; char **platform_layers[Platform_COUNT] = { windows_platform_layer, diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index d19e25ba..46c04cd1 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -251,235 +251,235 @@ i32 source_name_len; i32 line_number; }; static Command_Metadata fcoder_metacmd_table[229] = { -{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 409 }, -{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "/Users/allenwebster/4ed/code/custom/4coder_auto_indent.cpp", 58, 375 }, -{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "/Users/allenwebster/4ed/code/custom/4coder_auto_indent.cpp", 58, 385 }, -{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "/Users/allenwebster/4ed/code/custom/4coder_auto_indent.cpp", 58, 366 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 154 }, -{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 96 }, -{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 613 }, -{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "/Users/allenwebster/4ed/code/custom/4coder_build_commands.cpp", 61, 165 }, -{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "/Users/allenwebster/4ed/code/custom/4coder_build_commands.cpp", 61, 128 }, -{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 197 }, -{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 284 }, -{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 290 }, -{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "/Users/allenwebster/4ed/code/custom/4coder_build_commands.cpp", 61, 186 }, -{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 578 }, -{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 480 }, -{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 233 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 223 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 243 }, -{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 255 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 842 }, -{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "/Users/allenwebster/4ed/code/custom/4coder_build_commands.cpp", 61, 180 }, -{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 621 }, -{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "/Users/allenwebster/4ed/code/custom/4coder_docs.cpp", 51, 190 }, -{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 668 }, -{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 125 }, -{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 149 }, -{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "/Users/allenwebster/4ed/code/custom/4coder_clipboard.cpp", 56, 19 }, -{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 124 }, -{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "/Users/allenwebster/4ed/code/custom/4coder_docs.cpp", 51, 175 }, -{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "/Users/allenwebster/4ed/code/custom/4coder_clipboard.cpp", 56, 28 }, -{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 684 }, -{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1798 }, -{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "/Users/allenwebster/4ed/code/custom/4coder_default_hooks.cpp", 60, 7 }, -{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "/Users/allenwebster/4ed/code/custom/4coder_default_hooks.cpp", 60, 23 }, -{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "/Users/allenwebster/4ed/code/custom/4coder_default_hooks.cpp", 60, 57 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 162 }, -{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 79 }, -{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 112 }, -{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1221 }, -{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1396 }, -{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 134 }, -{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1382 }, -{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "/Users/allenwebster/4ed/code/custom/4coder_cli_command.cpp", 58, 22 }, -{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "/Users/allenwebster/4ed/code/custom/4coder_cli_command.cpp", 58, 7 }, -{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 740 }, -{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "/Users/allenwebster/4ed/code/custom/4coder_helper.cpp", 53, 2184 }, -{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "/Users/allenwebster/4ed/code/custom/4coder_helper.cpp", 53, 2192 }, -{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 523 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 540 }, -{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 346 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 373 }, -{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 748 }, -{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 462 }, -{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 492 }, -{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 479 }, -{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 509 }, -{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 651 }, -{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 637 }, -{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "/Users/allenwebster/4ed/code/custom/4coder_tutorial.cpp", 55, 869 }, -{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 70 }, -{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 562 }, -{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "/Users/allenwebster/4ed/code/custom/4coder_jump_sticky.cpp", 58, 579 }, -{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 673 }, -{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 515 }, -{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 597 }, -{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 634 }, -{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 563 }, -{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 505 }, -{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "/Users/allenwebster/4ed/code/custom/4coder_code_index_listers.cpp", 65, 12 }, -{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "/Users/allenwebster/4ed/code/custom/4coder_keyboard_macro.cpp", 61, 57 }, -{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "/Users/allenwebster/4ed/code/custom/4coder_keyboard_macro.cpp", 61, 80 }, -{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "/Users/allenwebster/4ed/code/custom/4coder_keyboard_macro.cpp", 61, 44 }, -{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1542 }, -{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "/Users/allenwebster/4ed/code/custom/4coder_tutorial.cpp", 55, 9 }, -{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 211 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "/Users/allenwebster/4ed/code/custom/4coder_function_list.cpp", 60, 295 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), false, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "/Users/allenwebster/4ed/code/custom/4coder_function_list.cpp", 60, 301 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "/Users/allenwebster/4ed/code/custom/4coder_function_list.cpp", 60, 267 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), false, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "/Users/allenwebster/4ed/code/custom/4coder_function_list.cpp", 60, 277 }, -{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 162 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 174 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 186 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 192 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 198 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 204 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 210 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 218 }, -{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 168 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 180 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 862 }, -{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 457 }, -{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 469 }, -{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1336 }, -{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "/Users/allenwebster/4ed/code/custom/4coder_miblo_numbers.cpp", 60, 44 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "/Users/allenwebster/4ed/code/custom/4coder_miblo_numbers.cpp", 60, 237 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "/Users/allenwebster/4ed/code/custom/4coder_miblo_numbers.cpp", 60, 249 }, -{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "/Users/allenwebster/4ed/code/custom/4coder_miblo_numbers.cpp", 60, 29 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "/Users/allenwebster/4ed/code/custom/4coder_miblo_numbers.cpp", 60, 231 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "/Users/allenwebster/4ed/code/custom/4coder_miblo_numbers.cpp", 60, 243 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 695 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 265 }, -{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 338 }, -{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 350 }, -{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 356 }, -{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 409 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 433 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 421 }, -{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 439 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 516 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 530 }, -{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 488 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 473 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 502 }, -{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1376 }, -{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1370 }, -{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 447 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 509 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 523 }, -{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 481 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 465 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 495 }, -{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 332 }, -{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 344 }, -{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 403 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 427 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 415 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 848 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 854 }, -{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1461 }, -{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1792 }, -{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 46 }, -{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 62 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 54 }, -{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1493 }, -{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 310 }, -{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 300 }, -{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 374 }, -{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 366 }, -{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "/Users/allenwebster/4ed/code/custom/4coder_clipboard.cpp", 56, 39 }, -{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "/Users/allenwebster/4ed/code/custom/4coder_clipboard.cpp", 56, 110 }, -{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "/Users/allenwebster/4ed/code/custom/4coder_clipboard.cpp", 56, 71 }, -{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "/Users/allenwebster/4ed/code/custom/4coder_clipboard.cpp", 56, 117 }, -{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 106 }, -{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "/Users/allenwebster/4ed/code/custom/4coder_profile.cpp", 54, 226 }, -{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "/Users/allenwebster/4ed/code/custom/4coder_profile.cpp", 54, 219 }, -{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "/Users/allenwebster/4ed/code/custom/4coder_profile.cpp", 54, 212 }, -{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "/Users/allenwebster/4ed/code/custom/4coder_profile_inspect.cpp", 62, 886 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 1289 }, -{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 870 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 896 }, -{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1149 }, -{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1170 }, -{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1186 }, -{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1631 }, -{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1716 }, -{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1298 }, -{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1560 }, -{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1059 }, -{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1050 }, -{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1041 }, -{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 982 }, -{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 994 }, -{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1550 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 382 }, -{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1265 }, -{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 976 }, -{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 988 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "/Users/allenwebster/4ed/code/custom/4coder_helper.cpp", 53, 2172 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "/Users/allenwebster/4ed/code/custom/4coder_helper.cpp", 53, 2160 }, -{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "/Users/allenwebster/4ed/code/custom/4coder_helper.cpp", 53, 2178 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "/Users/allenwebster/4ed/code/custom/4coder_helper.cpp", 53, 2166 }, -{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 539 }, -{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 57 }, -{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 66 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 82 }, -{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 99 }, -{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 27 }, -{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "/Users/allenwebster/4ed/code/custom/4coder_scope_commands.cpp", 61, 39 }, -{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "/Users/allenwebster/4ed/code/custom/4coder_eol.cpp", 50, 125 }, -{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "/Users/allenwebster/4ed/code/custom/4coder_eol.cpp", 50, 112 }, -{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "/Users/allenwebster/4ed/code/custom/4coder_eol.cpp", 50, 86 }, -{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "/Users/allenwebster/4ed/code/custom/4coder_eol.cpp", 50, 99 }, -{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 115 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 427 }, -{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 421 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 1237 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 1249 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 1243 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "/Users/allenwebster/4ed/code/custom/4coder_project_commands.cpp", 63, 1230 }, -{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 644 }, -{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 630 }, -{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "/Users/allenwebster/4ed/code/custom/4coder_log_parser.cpp", 57, 994 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 179 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 187 }, -{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 237 }, -{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 403 }, -{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1518 }, -{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "/Users/allenwebster/4ed/code/custom/4coder_lists.cpp", 52, 692 }, -{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 565 }, -{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 552 }, -{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 658 }, -{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 667 }, -{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 451 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 439 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 433 }, -{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 721 }, -{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 727 }, -{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 415 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "/Users/allenwebster/4ed/code/custom/4coder_default_framework.cpp", 64, 445 }, -{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 712 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "/Users/allenwebster/4ed/code/custom/4coder_code_index.cpp", 57, 1160 }, -{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "/Users/allenwebster/4ed/code/custom/4coder_tutorial.cpp", 55, 20 }, -{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "/Users/allenwebster/4ed/code/custom/4coder_tutorial.cpp", 55, 34 }, -{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 137 }, -{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1618 }, -{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1645 }, -{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 1506 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "/Users/allenwebster/4ed/code/custom/4coder_jump_lister.cpp", 58, 59 }, -{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 392 }, -{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "/Users/allenwebster/4ed/code/custom/4coder_search.cpp", 53, 639 }, -{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 94 }, -{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 82 }, -{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 88 }, -{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts an underscore.", 22, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 67 }, -{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "/Users/allenwebster/4ed/code/custom/4coder_auto_indent.cpp", 58, 395 }, -{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 59 }, -{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 76 }, -{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "/Users/allenwebster/4ed/code/custom/4coder_base_commands.cpp", 60, 73 }, -{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "/Users/allenwebster/4ed/code/custom/4coder_combined_write_commands.cpp", 70, 100 }, +{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 409 }, +{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "/Users/yuvaldolev/4ed/code/custom/4coder_auto_indent.cpp", 56, 375 }, +{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "/Users/yuvaldolev/4ed/code/custom/4coder_auto_indent.cpp", 56, 385 }, +{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "/Users/yuvaldolev/4ed/code/custom/4coder_auto_indent.cpp", 56, 366 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 154 }, +{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 96 }, +{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 613 }, +{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "/Users/yuvaldolev/4ed/code/custom/4coder_build_commands.cpp", 59, 165 }, +{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "/Users/yuvaldolev/4ed/code/custom/4coder_build_commands.cpp", 59, 128 }, +{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 197 }, +{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 284 }, +{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 290 }, +{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "/Users/yuvaldolev/4ed/code/custom/4coder_build_commands.cpp", 59, 186 }, +{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 578 }, +{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 480 }, +{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 233 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 223 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 243 }, +{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 255 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 842 }, +{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "/Users/yuvaldolev/4ed/code/custom/4coder_build_commands.cpp", 59, 180 }, +{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 621 }, +{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "/Users/yuvaldolev/4ed/code/custom/4coder_docs.cpp", 49, 190 }, +{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 668 }, +{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 125 }, +{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 149 }, +{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "/Users/yuvaldolev/4ed/code/custom/4coder_clipboard.cpp", 54, 19 }, +{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 124 }, +{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "/Users/yuvaldolev/4ed/code/custom/4coder_docs.cpp", 49, 175 }, +{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "/Users/yuvaldolev/4ed/code/custom/4coder_clipboard.cpp", 54, 28 }, +{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 684 }, +{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1798 }, +{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "/Users/yuvaldolev/4ed/code/custom/4coder_default_hooks.cpp", 58, 7 }, +{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "/Users/yuvaldolev/4ed/code/custom/4coder_default_hooks.cpp", 58, 23 }, +{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "/Users/yuvaldolev/4ed/code/custom/4coder_default_hooks.cpp", 58, 57 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 162 }, +{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 79 }, +{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 112 }, +{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1221 }, +{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1396 }, +{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 134 }, +{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1382 }, +{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "/Users/yuvaldolev/4ed/code/custom/4coder_cli_command.cpp", 56, 22 }, +{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "/Users/yuvaldolev/4ed/code/custom/4coder_cli_command.cpp", 56, 7 }, +{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 740 }, +{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_helper.cpp", 51, 2184 }, +{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "/Users/yuvaldolev/4ed/code/custom/4coder_helper.cpp", 51, 2192 }, +{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 523 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 540 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 346 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 373 }, +{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 748 }, +{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 462 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 492 }, +{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 479 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 509 }, +{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 651 }, +{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 637 }, +{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "/Users/yuvaldolev/4ed/code/custom/4coder_tutorial.cpp", 53, 869 }, +{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 70 }, +{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 562 }, +{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_sticky.cpp", 56, 579 }, +{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 673 }, +{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 515 }, +{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 597 }, +{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 634 }, +{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 563 }, +{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 505 }, +{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "/Users/yuvaldolev/4ed/code/custom/4coder_code_index_listers.cpp", 63, 12 }, +{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "/Users/yuvaldolev/4ed/code/custom/4coder_keyboard_macro.cpp", 59, 57 }, +{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "/Users/yuvaldolev/4ed/code/custom/4coder_keyboard_macro.cpp", 59, 80 }, +{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "/Users/yuvaldolev/4ed/code/custom/4coder_keyboard_macro.cpp", 59, 44 }, +{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1542 }, +{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "/Users/yuvaldolev/4ed/code/custom/4coder_tutorial.cpp", 53, 9 }, +{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 211 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "/Users/yuvaldolev/4ed/code/custom/4coder_function_list.cpp", 58, 295 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), false, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "/Users/yuvaldolev/4ed/code/custom/4coder_function_list.cpp", 58, 301 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "/Users/yuvaldolev/4ed/code/custom/4coder_function_list.cpp", 58, 267 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), false, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "/Users/yuvaldolev/4ed/code/custom/4coder_function_list.cpp", 58, 277 }, +{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 162 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 174 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 186 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 192 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 198 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 204 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 210 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 218 }, +{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 168 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 180 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 862 }, +{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 457 }, +{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 469 }, +{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1336 }, +{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_miblo_numbers.cpp", 58, 44 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "/Users/yuvaldolev/4ed/code/custom/4coder_miblo_numbers.cpp", 58, 237 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "/Users/yuvaldolev/4ed/code/custom/4coder_miblo_numbers.cpp", 58, 249 }, +{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_miblo_numbers.cpp", 58, 29 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "/Users/yuvaldolev/4ed/code/custom/4coder_miblo_numbers.cpp", 58, 231 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "/Users/yuvaldolev/4ed/code/custom/4coder_miblo_numbers.cpp", 58, 243 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 695 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 265 }, +{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 338 }, +{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 350 }, +{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 356 }, +{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 409 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 433 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 421 }, +{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 439 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 516 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 530 }, +{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 488 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 473 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 502 }, +{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1376 }, +{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1370 }, +{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 447 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 509 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 523 }, +{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 481 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 465 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 495 }, +{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 332 }, +{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 344 }, +{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 403 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 427 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 415 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 848 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 854 }, +{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1461 }, +{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1792 }, +{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 46 }, +{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 62 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 54 }, +{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1493 }, +{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 310 }, +{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 300 }, +{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 374 }, +{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 366 }, +{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "/Users/yuvaldolev/4ed/code/custom/4coder_clipboard.cpp", 54, 39 }, +{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "/Users/yuvaldolev/4ed/code/custom/4coder_clipboard.cpp", 54, 110 }, +{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "/Users/yuvaldolev/4ed/code/custom/4coder_clipboard.cpp", 54, 71 }, +{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "/Users/yuvaldolev/4ed/code/custom/4coder_clipboard.cpp", 54, 117 }, +{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 106 }, +{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "/Users/yuvaldolev/4ed/code/custom/4coder_profile.cpp", 52, 226 }, +{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "/Users/yuvaldolev/4ed/code/custom/4coder_profile.cpp", 52, 219 }, +{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "/Users/yuvaldolev/4ed/code/custom/4coder_profile.cpp", 52, 212 }, +{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "/Users/yuvaldolev/4ed/code/custom/4coder_profile_inspect.cpp", 60, 886 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 1289 }, +{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 870 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 896 }, +{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1149 }, +{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1170 }, +{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1186 }, +{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1631 }, +{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1716 }, +{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1298 }, +{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1560 }, +{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1059 }, +{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1050 }, +{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1041 }, +{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 982 }, +{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 994 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1550 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 382 }, +{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1265 }, +{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 976 }, +{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 988 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "/Users/yuvaldolev/4ed/code/custom/4coder_helper.cpp", 51, 2172 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "/Users/yuvaldolev/4ed/code/custom/4coder_helper.cpp", 51, 2160 }, +{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "/Users/yuvaldolev/4ed/code/custom/4coder_helper.cpp", 51, 2178 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "/Users/yuvaldolev/4ed/code/custom/4coder_helper.cpp", 51, 2166 }, +{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 539 }, +{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 57 }, +{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 66 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 82 }, +{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 99 }, +{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 27 }, +{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "/Users/yuvaldolev/4ed/code/custom/4coder_scope_commands.cpp", 59, 39 }, +{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "/Users/yuvaldolev/4ed/code/custom/4coder_eol.cpp", 48, 125 }, +{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "/Users/yuvaldolev/4ed/code/custom/4coder_eol.cpp", 48, 112 }, +{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "/Users/yuvaldolev/4ed/code/custom/4coder_eol.cpp", 48, 86 }, +{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "/Users/yuvaldolev/4ed/code/custom/4coder_eol.cpp", 48, 99 }, +{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 115 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 427 }, +{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 421 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 1237 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 1249 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 1243 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "/Users/yuvaldolev/4ed/code/custom/4coder_project_commands.cpp", 61, 1230 }, +{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 644 }, +{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 630 }, +{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "/Users/yuvaldolev/4ed/code/custom/4coder_log_parser.cpp", 55, 994 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 179 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 187 }, +{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 237 }, +{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 403 }, +{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1518 }, +{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "/Users/yuvaldolev/4ed/code/custom/4coder_lists.cpp", 50, 692 }, +{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 565 }, +{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 552 }, +{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 658 }, +{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 667 }, +{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 451 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 439 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 433 }, +{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 721 }, +{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 727 }, +{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 415 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "/Users/yuvaldolev/4ed/code/custom/4coder_default_framework.cpp", 62, 445 }, +{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 712 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "/Users/yuvaldolev/4ed/code/custom/4coder_code_index.cpp", 55, 1160 }, +{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "/Users/yuvaldolev/4ed/code/custom/4coder_tutorial.cpp", 53, 20 }, +{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "/Users/yuvaldolev/4ed/code/custom/4coder_tutorial.cpp", 53, 34 }, +{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 137 }, +{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1618 }, +{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1645 }, +{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 1506 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "/Users/yuvaldolev/4ed/code/custom/4coder_jump_lister.cpp", 56, 59 }, +{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 392 }, +{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "/Users/yuvaldolev/4ed/code/custom/4coder_search.cpp", 51, 639 }, +{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 94 }, +{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 82 }, +{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 88 }, +{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts an underscore.", 22, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 67 }, +{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "/Users/yuvaldolev/4ed/code/custom/4coder_auto_indent.cpp", 56, 395 }, +{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 59 }, +{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 76 }, +{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "/Users/yuvaldolev/4ed/code/custom/4coder_base_commands.cpp", 58, 73 }, +{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "/Users/yuvaldolev/4ed/code/custom/4coder_combined_write_commands.cpp", 68, 100 }, }; static i32 fcoder_metacmd_ID_allow_mouse = 0; static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1; diff --git a/custom/metadata_generator.dSYM/Contents/Resources/DWARF/metadata_generator b/custom/metadata_generator.dSYM/Contents/Resources/DWARF/metadata_generator index d94c7b9522fc39f45009ef4ef8c1d9cfafae8580..133e453d1c931a6805c0b6e109b54aada975ee7d 100644 GIT binary patch literal 136740 zcmeEvd0<>s_5aPhzG;#+ZJKmn(|vmxX;g9G=DgGzqOd&3wEyN_;o{K-r@~=2&^`_MqT>v2KlDx9= zvO(gr9hF$thSkj*GO@D!^88#(kkTLeDlf}Q1h*#`K$6X`4>BN5!)K)U4NH*=F-+`8 z2Q4d}NN$PSS=szD}PQ(v~9rTAT+#v;2-X(*|`H%mUN zR%}>dt-Rp;CZ&DQH>n}e_k0)4EBYfEBC)LY?o=-c&d;v`wECj*`Xc?1^NTZRKGcJ` z;-jgM`ng>dX?bb4x?P&LWp%b%@!qa2-JMo65p(2sIE#k{X-KT4(wn&n@xP?8@!$xnb2`PpV2OcMZxh(g4zwJz96(`D<6NI!}$J5K)%fawg_+ zy|_lf#3!8>@o7fG(Z5SpT(pJ@AvwT&jxx1hq2@fOV3HTfzC>k{ynZ3ot*1auUrin%oj;?Fz=T`91P3m+Z$_?$;x~%3+a_k;X648_nf+yj$_Rw@?*3 zJ~~}W8LT9r`E_;&7|xX69vFGzP{InjXX3#4wZ>W_?ZJ4C{Pw*^@jJ?E+rB9S)*@wR1m2OrI}#WQ3D7Du3QI5fF|-1o$?)=#3f>BMdch8{m*Jg^Kfv%U3|EX&^mj2F z9j)NU81`UuK>VL&xR2qH$fWu`(-fZEJc3&oCbx>(ve_Az{v;Sj^e7byIP87_t2Lj3kH+`{mK4Eq-;{0WA4 zFgynSEY(+fn!?vI>}R-*;pL|*{EZABX7~WZEtLxYM}|d}f(`6Nh`)#7aSXRGyolkw z3}4LfVTP~Out)LxBE!O~;QJYlGJIUqGwi}4i|ii`h)6z{Fnp5X>lyY`EBu!j_A~r5 zhIcT0lHt7!kH!X=_#b9?A;U)*Ud!-FhOc0_6#E=%&!-tauuQ>U*X0?$lVNd|!oR?9 z%W?(J#Kw*47b_H8&#<3iKf^6&EBvPzKFRPe8Q!r*;RW_f#Ls_@g6A=OfZ;}lJ?AR? z6&la*rx>m{PvL*a@Qy|Wzs&IRwF)l5Jg540Fg%6f!wfHASgcd@wG1z3cpbxi3NhKq8~R}@juS+yBHS36+XhShv6F-_A`7J z!#f!M9m5A0F2(+f+JBVcB@9;-D*hcBE>iH-3`ZIM0mG%m3jYejeGJbS!}1xS@aHk? z!NNrHyq4ioG=ku-G2F-SlN!c(2jTyr=}Q${S*G}xj#2O>4EHg-o#Bcyg} z;T;Tn7;c%Y=r3dVIK#aRdvM-D^?jS+0}MZ}@lzFk_&8PH0fuWB?wh9Y8yT*cuHc;v z?_l@*8lI!@vnQzX74sEb z$?$T9*D`#P;r9@XHFLotMgLKT>lxllFxH%teBONz!LV`qyz~)*VUzTE=ktK+sI3q4 zp8D&?c`Csbpdq-D;ltoT@FfhNWcV6}_4AI~8TK>3!y0COzhF4Z_`foI0P~9YPr`vH z)qfavg5VVlpTxW-IKXfp<3G%BDdYERJo9^q;R=SIkuU&U#P4sqJmww2ZxD>W9luz~ zcidzJ`!7}SB8G3@q~H|{k74{KhQ~1+XLt(3A7OYV!(V22A;Ujlcrn9|GhEN`NroF3 zF2VygYVTPL&tiBb!|!7FK5lOl!w)gMjp0Wb-o^0G82%i?PceK4!}}S2nBiv_{w>3Q zVE8qLUt+inemk}IRfZQa{5r#DGi+{F^4-Mn2!>+}mot0=!_yhQjp5l0A7pqQ!#`!X zlHnH^u4UMTeF3%a42CB&yqsYl!{;#E$grQ`Eey9Xd=1VjFP2x)bk*KnjGxKyhZtVU@W&axkl`B{4m13H=C_04&oKUGhHqi`0K;Ek z_z1&aWB543`xt(e;X4^F#XgJV`vb0TKEsC?e-^{{F?R1&@J|{3Aj7|8cn`x* zG5mdof5Y&j3_r*4a}1wk_zi|%Wq3k`YVSW7u435D^XnXjM=)$Ld?cv!x0~Vn8Gb** z#{&xgd4`WN{(B6c3@QAh4ByP~3k>gJ*qo`_cNfDm89vPLGKTMGcq79{7)~<$FvGhU zew5+;4F8#ro=v%aZ_S2|Sg^ItTG<_;w+F(iY;`Qy8ElOQ zt=3pD(wal%uU$d;ptS;>csOMRT01-O_Cc&G9BEAiC6D?bo>V7-T~V)h1OBzv2fMms zy^4Je9tomEcL2qMt+5n4G~2T!*dC6^l9~DOj_xb1WW2RK820-Eijhw}u(!IXqu$yk z`S_mt5>Hsk`X)LhMc6~6>irTxnTG98_kwmQ5S`mx2_Qw4IC0O4QZg6~CIBEqt zx}(;W9pOYUj>kX2oc60e)<%=@4)g|ZW6;Y9AzfYIDv9^ivc!DuI1!=-Z?)#SDCe@ai{!B~%zo+!p1rGQrjW8MB9mOK=! zzk)mr-g;Y6u8g%tEn-o#iXOsC4X?JbBqDBbZ%&K36{)d?KA%m>y@E!(H37BcR@F*% zx2#C;N-L5Ye})G4KJ?F_d^{F+=g&*#}9r<-a~kY;Nn7|U&_L+8A* za{*bumhn=VN3SgC9Ir3dorGp4qgJx6Mt6FNEk%3A)~C%_OZ7?#F%RvMbXsi|HmzGK z`xA-_b6sd?TYhHd7pb5=CF z!wKl9q(*~Tn37i#W-BkcHmw=Dq%7$3N=%$29S8*Dc&kF=d$%fzI(wYtBuqxakwh3e zd{wY5eKOKuk!i&H9`S^>JpuokFqw(YLi&ow6ZnQ>+fNUQqNWh_AV6b z?y?A{RvT|!Q@VLy5#gSDQdU{lIsi-Tt>Krwtj=JhJ<*|8lxn$@*rq+8$EuFoMV+&x zx$$|{(S1gvu+I2A=fiSjXS1xC$(7;Gwm@qP_L|nM{ETvDIt%E{mOO2lxvFR^7z%IC zVaBraG8HXHPBeO5h<3*l17JmqniDI%`i1B%woo`0PvlTG@zUbc)vECbN8-UqJe&yk zmSnX2XVTyr%vTB zl{Tv_*%j5+gMCZ3E94bxOn-JI*Zq`IfeRDdZiPs4;Yc)@umVwCQI75_F?ti-+kz2z z-f$e14NNzvUe5-JCflPbP-{Oq@o*Se3A~C(I-h=rmMtZNE$i~vT_j6OeoIyLP|%$A z)k?0a*4osXZBgABJiH#5ot`|*z17;skcE~?-+?MuU9VB5ysbL`HNbwPP5ZI~8G!Uo zcxx4>Kr)`dA`)(Us|S`To2NM5YHQt=^2*Z&65Fy2 zrdt1%;~eOYVtw?l)xLAB8llumqz2uet{VRIv09481iOOtjx;UL-QC-gQGc&LXMFwM zdNhM5H%Q8hTRW4%aIar)m(twFYTs72nOXQU%DzwJ<4dW zlGwOtkS#e!EP!?B>XE!c~(hUSDrVN3?r2!FuOgxGZ`!tN+$7*qtL9oUFyO3BV! zj~P$vNIq6MGE+rt#&YkK$*xATQ#M~CbH%S%)oOBhS;6+SUgWRZSEKtB=gpBhdP5-}kUckYU^U2l+RPaK5V?o4(?kaWk|kKHo(WE^Bv>-|ZJ5jK>O zH$CR6)=s7@*V&4l)j*2*s%-&S;dojtY>2Am;h7q>P>=Qk0$6Y@tEW|NRk19#OU3Z% zrpur0NXe?5UWTANSV3@{N(XNKye2KoPHk<9kgW2XP-|7k0zxJ{M|JfkCwtqf4K6Dt zAKsfr5LS8F&TaHxdmCvb)1 z7Ww3ABblB{Ub5U>=FPM``Ln$qM+A--QgzzgEw2ZQKVx)Iq04Iklit%H0V$m<-M zS?3_OIww93)jDN6NMVUXwM!hNu*9J`OPuO;7%iu42kF#1G{4?q5bGVfRqvpL^$y*t zcj#8V!(?3Q(EgA5|0jHFkbXw+)M zQB8nO@-r8xOpLvZ2+ILM3zZWJqveR|uNb7{SPmoVh=UXzaTq~I9Hi-lqt(a}*H8aw z8E`7sPZ#>>0aU?>VNTzaMr4wwYegm|TQhQ;7Ld!lOl`=_vXn4nrd_>)($rCN%BWHu zQcAa)&WiY#z3SYW4(hG6T=CBJjs)J3z&jFnM*{Ci;2jCPBY}4$@QwuDk-&eT1de=| z;;21>Uz`;b6#RWu2_*$+C;kem-i_Ce<5j&$>;u}mJA*w{HQ2&dtw3NOdQ=_8o8wi@ z^y+sdp08EOm*OLdc-1PL&UfOafmoFv&qzYuv95U4`qsb&P0f{fSz2bK(KM}EYop_B z+p3cBSXDR@=uEZ+tKz-!DoaJ^c^hke>osoZ?(W2+HN1DH0Pc5_%go z1bQj*PL3*?4OQwzs<*j8RS4TBf1QHgSf(0LRYL&1gBwHhsZN8SIm#Wu=sAYKl zky|D?G6;?mVUkgZ6{LO0FbbDw-6(520TKSlqVmm?n-V+S-C4bR0kA%~OzG zl1zz_`%7X}Byu02nUYIwE0z&hNG2EeE*TZVgt zov`l_5~BYuB4&er;E$qcIh{gANaVzl^~`36Ujy2Butp$5yv?Y}#qs7J?kKkldZ@Fl z2;Pa51NOW z#!n{|m@|qC+s(P|M$>FC3)~xBZY*@5(qV5vbr-0{78h2TlR-7I(H!kwYZkei&57=I zq>bkIMst>XnK=QsMSbQt{Oc}!#+*(p-AQxCCUXpKM-x4jlk`RIWrb@cNx8cRWR2#S zMso)6vLTJ;G+hg^R<%?RJ22Q}R)D;~eVyG>h?y2(AI zFRiQk7vW4&U0euB+^8A&`S;zx{x2956~FA>>27x$Uko)Hzn;|CjGGYMgm81KxzKGq zISK7|H<(4#;5}~R3!!GS%x(Mz*$~VLV^7F+8U*S#o}Sc)oMz*eP{^!w8z(?88eN-5 zy<2A%8QVjyk!mn>%ptVl0NOCIxbPteH324TsWa}4WZDMDsN@hP*w z7}2aN(7$j;1<#>1s)7a=!XT33=-=A|`=XYYaU;4o-EI6y%Af)5+2}Uuo+vcg`G=cElV@rP{;+&7dCTKK>;?(=8yeZ_-uhFakjCoSeyIarv+k4AtJw5O}+0 zmCH#s7Sm?3(!%-f&6q_yP45wNT;Wc$sIU>UwH$q(5+Wr{qZ|v$k(lU~V9HJ7i8dXif`}wU{7h<_UAYyYOA;(Fs|Y6tWMh)MJ*xu1NY2(^rH3 z3~23XC(LQhn8iu64$!KES=4~)?j#oGRQF}T>}1{vb2?C}riGxb1Z|^PO%v%1b4u8p zS~%167S1-uxeNE1<%Orr8h7D0&810m&P!&MYr!}m66T15=s*vO>@*jk1tsXh3Z(A_ zsy$&YfMPZ?K?3RHAfyy(k$d9@swm`y&86p@GbO7s;yDQuj>H~Q6&HToEO#}HH^)2%rQohYI{Zl z?o$o8*KUCE!|j+Bs{a^|+g9eR~@>pla+_#!$ zqr31BLW3#OiI5Gvl07h+mKrF`h$PBD;Z@PHBt*E=oFX&I!HX7MS~?re*>csysEw(V zEAyBnt(EheQ0+l9?{ae_Equ0_)?wvfPrf<6z#I<)I}*IiBd$@ZF*?p12);K?S>QRS zdb(VOUB%pD1Z|Kl9%(EnFlQDQ?tyAFqg88RaT?7^_zRFtpEhDTHr=q%1~jAuh7jEw zOYLhgC+-6w496z)&}EfDW3UE-mm0!b-G#f&lFgZ`}Iv^ef=S8!?tS)w)Q7-M$+ysUO^JN^yWdbZ*2s5eO zT#V70eat)!8s)=neS>*s!kpItt9M9Ffisb=24b;m5zQ@EH8F!ZnhFbF0+Un*9z}9y zV187Nh4$?;D?+5|(1cBBIC=wcAHZ3g;Rl4wng-K{xzGSFV;>Z<-CX!AO1VB%PzJ&F zpqo3yLB8D<1Vb)VTl*3rEmw)7aJwpQwL<*j5cmnO`!8q9O|5&jvB%rSIy z9T>p+kl<#Z{ORZ#Duro+H&L<)H6_fsXjg-|hy=YhGh+@iNHAbrl7MjcnsbfjX55@G zc3;(umCd->4L3}ej(}npHkzlqU)GpO zsA-P7u$kPV5tx{TN6Znxn(kAsG0b)j>tMMtr@%CeUH7`iVpZ4;n}=BejV04jxXx`{ z>^i-`Sab|a<;8ZJbhJa7sjdQZj&gHdmz6;d>&V)X*HMZ#n3tI2!^p&Xxf5f09<&sQ z2AX-M`(u~6n?uGE?+Y1Ua={UN;(g61V|>L`2@L_h0V=o&WVQrR<7A+id$%Ucemgz#Lam6;EK27hm|p5G_*G|+Jx!SnWl0&@ZgMxpdfZAq|toQ}3P!ar=6rlH17tNcL>?q==l z>DZ3o@fmnF@Jp9Tfx#k;LPs!tQPzY}DBXk%m%j|yb?9HCS=DI1tI;e+1$|_{po-5( zm&CMXq~k<__s`*fjf1fu#~%$E0}V|RrVbzp!fQcTT#QLE3aUlMV-D(Hj8fR5kRp{J zYcaBX$f}3`bIP1_1hZ!yrd^|1*Jw60nq{Zp3MN2J8kmQAF4$1m?{F->W5T&FcvhqgpZe?NiuROE-vg7YGcCCS6RR!dh$z6ANJATKR0 zOuCH^bhsA7{WD&h&)FCxd(F3Rm65Nf6Rs})B2avs)Di<8`5@sL|)^Co)kewfg485}hF}jNhHu9J` z6$3^iy%4(^l!lx@OgqR~phrdn0JTb-hE>8fzYL0U&|Z8h?FsTlv58AP(d&^fps;~-!7g2p55A>%s}cbZe1O-~~r7)-Zu z2QthaJ$rN<)?p)!iUM!LG#I_mIpYeyQWdnB~Obi1m`blXaO zc4w|fXT}#7k}nCHIv%{neUo~IcEJ@>w=_x0)h#(_lho}b+!lSyoO`WVbf!7?T(fAs zITvp3`R3d;X3+)a+|_20-<)e)1xenZd!Qr3q6a0k0fh(eh9oeXrojD{-kQB9*HL3Z zTTU8DDYZ^ELo&zuBd!S{2A(ezu*sSV_?!o-{o-!x&K zA#X}(X|H$&h6&qya<}g`CmS7f(v>hv$rFsZjnANan3ubZK6BwixJ#g!cbi_M>l@7r zrLR#^2>~c4yEZ{<#RPbpl~PC}+^*~3@|K`?G;>pOGna10kR(h$FdLB0xE1^79+_2% zEZX|cIEIC>2ZNS?lG6brL<5=r=Lu1Ei+0p7Zg9apA#$mg-%3mNn1pfky&<>pZHR9& zo%hl1dNTG9P=0p;tIPDw=v2a-n!p$?!!3?xuvOvPnY2kiQ%V5)nuX|pBW&kXX!0az zGK~e69=Ki0aD-wOUWdWkm_B&$Fc#4$(p0z`GCYQXT?W+)VG&sdB_cgu1{=N4Tml<{ zO)MQ6G#cN3uXO$&G2o`d_599zZAV*&mBy_8E!Ir4c)#8j99?GH*B`=!z`oAJY{2ee z25mg5u*ijBuZ{c1AH-eAJR6JOcpQb$GUPjAo{QTC%v$ovJV(s40iFerJRk2Vb9Dx2 z+!+Rp74qTnwwtNLS;H3HUrlZ%{GPFxV02P@*Se5-uG=_LjmBJnuAY9%TnxJ(I%V9s zj$A|Ip=wMAtS0B6#`9AIZD~0$TZ>WLbpKgYJw=kK&xhVqv+m?N6C z>ulV1RS08fJZ&b-RxJHkWihA6n)5cpDZs3!eaS<{Ts1MT6|a(_>QoU@PEvMSVxpM&DK|k>&7^J71kG?SCzT2M|yInp*q@NOvfH_ zEgM2!iIf?x1t^7oJ?}>CRLKo9Iarx^tzw}g`-Dbsgf<*ZB8QFu+MnhAA%t=zFtLk zv;pSqWlaB5W&^fHjpj=1jz&S(3-^)#@QhgmFZyTxX2{(5CJKJ%v zrIXz1VVurF^G+ixoRka17WK6&Ztrs}f^mv)i}_ttx{5R)zb!aSyeBpsHD)0`Yk4 zSYwaJgV;P{wD+S+pv6?)j0N(cISt@kI1ZhHbWTa>6l3C7ZN`MNb4I$)l7q~Tj&#I! z4AgDY$)S4LZ9LKH!j`|-_!8_KZKr9gIRYu|xL65_ zje+S?#mT|8i|aV>DE?zz>-V|Vhfti(Fv#o2yurX=C8TvUUo+0NMe^wx+>Ga2sP)5* zn`tXxw?3nK9cCWYe|WBxB}rqfg-eP#q`DSr4`YU{88l711zG0{iDdKw_;WGM*&do)y#5aise=` z*A(k72cXc6SeoY3LO}-=Be5J7-l`3~{+hOA7_xrr$ zdgCG5cvyNma#RO8jmC@T)7o!*3K}r_ZeUzn%79x2?Zs0Y*%`8?WWixgv8LfH7H%*c z&9QV~aUKTXAQmmSsCbMjp9dQ!&WD$Ci?uPSThcxk8nsZd$CuC173wK_Z;NV6s?C5-iK;0 z#T;xje!3pL{+18Der!D!V)%K!M!ihxZ#tmaM?D4RbZn3&?nm`-t;8YZxhk{rd)5}gpSvvJd&+C^Tc383@n&0V}Wr-hElP8&Uiqz>vQm0R@my_s^DRt7H{D4pQFnsUX z#qb^`qIqNBYGIcZ$@8$~kXfcSSvgNyref&nNehm_@fHUyIOBIA!!^51ZcVUVo=yIU zdhmj`25@KVwf@!!8uBwkI@@dEB2`Hr3{UO&%-Hzadqa?b@e6}iE7B@@s)Xlq`;e<< zAnnspUmG35sAFCGiO6nqEH-*5rVg1#p)mQ#unpvQ&`uI(RkkmF37eM^<2Lx>9y;4u zLe%m|w;YQmIfoBRejfO8IDDidUvwAGjAs54oM~fuH>8OaN)OqL!SO;3Qal7|HW$%D zp;>O%igJ3ii}S|9W8}ZR3wU~b0zb}UPTm6->sD;{fZ$cB{ z(ZU@CM*Hy4pu<#F?&F1`#uwW=LIkVl^p3!46dR~19c0e97XL6xBJg{$g z7=&lUKLx8I`B+H_3Jo!h4cICgRn6Mw>F>-88*c1|rN`QH$efAyF|Y+VWxRL^+Jw3H zsRdAnhmf@s&ja;)6Z(rZ!^RrR{MNi?i zNtciw0+Rbh-XR&I^%@Na5so01VhkYkPan`@sU0mJn4(OP`w%v&S2v^4#$5%Kl8-6_ z>m<4DqT>Zx<#2u~4c+}$W6yAJ0r`yBV>cK-yqXS!jKiE$+h814IX~o_689NljA$2% zJw|08EU*`FPm3*%*C38sdPKAWKI_5;b3HaZ^jrdNtoGverl@}p>e1M>Vkx3Sc$&N< zE$rmTh2uTL(G>m1K%XtWEb(YDW_I5erjqq&$eOkp6QJ7UHbR!zSOrouQd-ybVYP7@=c@5WF-Qru#;- zAgPU$=&<$wZ}v#NA0zemVF?r{!UFJ?$H+EeL_WfnmCDox6iHjM?y$G(rYQFM#vLG;{_Zm|QK#<%dt z=^-HH!VjE^TltozoIYs}xb(-lVC4S^2f!>Yd^u?rT!&|QS7JcX$VTI}_k_&haJGhF zPYYW?W)H_6c=SIRBSqT^?B(%vo1R+HG%bZMJ`yWlhqMluUZbEl6V>zdF~DJ8TL6Dq zI!R_h!g%&QC*boKUl@i%o#A)CNfmf8NLJBfj@)gIxiP&86CM(9*t?O;CMq|PDnxDY z@X7t5J#E1ubHpb3@1^FLLyzw^3*d5HN*VcxhEqYD`DYa*CbEqE@0deigjXov1C@6h ze}=4vs4sXW6iYbjxWOEE+_`$9 zhudxZ1IIX!{q^o4mAzD^lpt8Qey-~N*3i~Xl0K+vdU)t+avNV#bsQhMI!J&ly6aVC z{}|fJNOXU|+lWw*n}!dWg1C*xRUP|>t`2j=<=Xlm+AgjC5meT{^;f3ZboansMqn>@ z7T}rGrwbD1SFi?5r|-?*;vVH>IbymvZcX z+7gqozI=B330l5h9**_pKf4G0tzf*+*u!$-N;xch;3EyBQ}p`n040VWB|LWJKI2=3 zA*2BKCZul~NSb#HrrrVcGi`0QyZm+4ikMli7AUWxM}`=0w*Qt->Jb=(r^Fl z?!4L~NASZqANx0tV5RX)PoW&9J%eH1PdBiu?2&fv4pcBij!v2l`mPeye-EZN`9~i5 zeOu2yuNMz+ z#mZ~k2OzhUbDb_peQztxem?sj`gU!KuUwsCK)@R)JD zBxK;Gp`RPFpC<;>fPPI1O)b3muY~%~p%bdxIC+Isj!%vnGUZ4cxc|9A4&1j;*}r|@ zes~22?%q)$12+x*+|a)&PSfGx9gSzWwKb@AZ=c99N{`fxCWLn3)LZ*Ix} z2Y&JcGxPcGea4B>5K^@retziM(62r#iDb#;j}bZapTZk^1F^RMPPsf5!THV@obN;+ zBz;3u`i`M%%$o`bFaJj5Vs{LU7@#NgF9@aIcG&asdNnwIA3AyDw@Q`9@4J+)ex_{5 z^r9aT;N9siISAiJ_5as{@YOCkL!KBqN#q{{Oo|)2_8EUE3n2xdZ)k?RHgt{YcUWHR zl*4j!`TyClWSOrYBDe|U@gp?oZ8cw&#+N$P3^_h@Rrfm-A5cT_&;Prju+7x*ZE_I4 zIQDHGga+fjZTJlh#{Y*yS9QOG@a1iCK0Jl$|F6x|8(XC$uET4f1DOeVPwVmZ8mF!s&^}8-L#uyBLVNq0{XuH>-<+G>?`Y6C(9xtl#ea)m*kPW1Vf+wi*P~&jUEdu) zWZGqvP=DOU{;-^{kE0s{oUeK3Nx!nQWwu+%?9@=m?4KP)A%o^TAPrV*F9KW0I_btnQUV%(wllhiq zgRwgVvjr76H3@zjO{>)7p#e;A{9-nYBD&8R^NVpAt5zm~@jwtO;-SeQx(U&ZWTy_t z@|pvjN>GuxRp3Cqi>O}*HEu$5(=YWO+Ccq@DIo(l zA-d_8`f;NE8mMs-qMLrHe@N8#f*Lm=y6Knt8$|tcP~#>}RNgnH{0A#9jOT9y`;1$s;tVFw4esPO@yayb%%hj^+Ud1u z^~Se^M#}hT^ou9_Ot&1rb3_T^gr9ffRp-K)o9O3EBMkhi&@Pm6AZX1+aM>+#NIo@f zz(ex(t~%QE824_Gqj*0W`X4)rQ2blA>@%LmPcvBOX*lr)yLy4$*2oX4zWn1qyf4qR z?lV3&J)a--pWn#bM9*VME$mr}mU{8(%|@;2u0N zm`eIHN~!LAOm*j#!PJ!IL8N!b_u(RidO^JAAwW&W?h^d`Tkpua!3 ze4p{7nIWV~W)BXgmVRWGe{*PjR`u<7gQ?ZAZy!Y8{)WDNko)%fU~1{7Z}?HjWl|q@ z&l*B~$a-$})61k*d>d8%yPXc>-piCSJTMsM{R-?GN?^YnN`cvK`Nx&0{ydo8elB`!O+{9M=q6G_5H#0#z|Cnv8aAB80P(o>dQ)0PrWUo z`j8UUYlG>Hlc@f(S!vbB<_wiq{dTj|s@qV(&}-F$o26FWGnn2uiRum()nkKU-mg~e zQKEY0Z4uQjC8`~B2QlzYqB^-rY1JnO!@OTnJ+Vn@)$OQY=(XzbCaG2T4W>6vqT0`* zdVDa<`xVt^l&F6HwutKWjZ#z}m^TDk^}ZP|uRDW%jTJ@3nL!ebBnw3`V9Srk+MRl}UYSnj8!O&~f zca*3e9ZYYWwCW2is;39TykAj$REg@ZLno@s%tCt7n2IO79A6*eFDBiMU`b{2Ljwp0 ziKp&}97oUI@$>=lz9@J&1^GhICJH1)kz0^U@%iZ%znZ}FhDq+z5zg_TSwx>pLVU`N zAeHf^s4&HWq40FX1Ob#sA(l4Zmf|)qzscY?%jSo-oe@6@AIACbf@U4j*n`gx$kvZF zMi$@`EeH%oQF9PlnBv@xMPwvIVMn+dL`%t^(rh2?Ie`-Fj5KvNO9h(cD+m(hL@WQ~HTQPa^t3IjxOvk-7^!U+n; zNP)tO5bvx+h9f^nV?dGU7JvqQt2%;U(MRyb6@03NVz=+4Xg{;TqYk$-DTEz{a+6uM z5d`?~4uz9zcN;h*M1a6qfOcaXz?;5vfl=yV2=}JZ-E53))*pE|KFrpXBl4Radk_`^ z=RXYyQ-z07bc^7~kP}4@9j2mHmzr7v;}I3}WpmUn2wF!urLRAXMIUCP_s!-4#1p1y zpx2st?XBKWeZ;vl?sQ3a znIEGN!)<2&gD6kq$id&1|$Mm7HV)~c`jjD?Lj9E0&eUH>c zj?-OHWY_zwigTyF;D`uZ6owfA?W7Xf(chyf`u*q-+9^NXm-aEM$ze>`QwTNKfHqQK zJQH7R+yLW&DXo-aq$OLxF`P?_xdo>2k-7qN5pk>sF@o%mK}0qBVX;}*NFSnf8`qwH z3~}oaQ7j2df$w`2?nE8*8ym!dor1vS$Qz~e@S4zjWLVXkhEb@{2Ca}SBkcNKL4D{! zl{uQM7%4M8s{++W>_AA0pwSTNM981MwgvMn1hr8g#-p$N$xq{@LKcp+g?+aY-kvubWPFwZgFMTPI36X4PIpR%otZ|F3n?_b zT4iADiZIrQz0Jc-L3FFoKzv`L9`kcKZqI_PT!)kbC66xrrVKhsaZD*pJ$;#kJ^?Wj zaaPBrD@W-lyS>lI_P%VQ>MWh4Ma)6@h;f$k-JL!ZeJTF;zMV?nH`?yk$7Q|fS8A?N zOgqfAe){D&skBO$+Wdd{cJ`}uj9u?*Lo!||{(r+#cP0h(Uxhh0k3xqQ?q7xpC|}8_ zBja-(rtUhVcufnRT42dkl-Vu(B{-DOWT!aL^ufiV>yXHqN5KJcYkUDQP^TdXrodW{ z=%wYm=u=&Cc*rSHvHlTtANmg?HA)pCBST*}H1VEf5&Ras{&BZCmu4m6gS(C5W*re! zlyg%|yp*h#3B3r|pQ>D*qWL90k5^7s8F7uHWiWATWqexLSr5W8PL~$10#Ve-zd%Gs z*v}%&*6H-Yhk2BN5X*4CO6hZC2!>1F4r)dt5#EntkQU)LevOEbd!iOU@@vFnk-Rq` z#cQmiAhI!+<|c@2*hpTD@%P$FbJR0#<2rzd(YvD#U#+1av4}8SiTO`~gkd$&vU@Q1 z(XvtsV~J3+6#H@{eVm1(8dE6B5omt;7ZJzXGP?ybn+{W~mtR|EVuDTc1|rg9b*+N5 zuoTGH`f^>eKSbwA(LM>EWID;0J_tb{89YS>|Eb~lz!53QIQl%S3=B!uj`YoTw#ojF z>%rH_n(12#MaBcf0{2H^_kMe9f<(8Y0iN^MfPoc zF?A-Qwv$gh&;C>a2d&+aqWc6se?`t9Im3t;PwGk|1r?NEdHWqcYzE!988J7fV8NRm zGM-nTc)JOq%2S_s)1S6LF*w&0@ob@HvS0e?$Sr~(r_k4(}LJA zf=c6aA>X%lQj;D={oJG_A^Ohblt$xw7PSGW27DtZqcz;k11WyT!EX{qh3ZdfuyKn; zpm74+%P<<=5Lt_HjmGB{>l0utKO<&$l%~eV5X*cdfA9h$jIZ2cZoyZdyN`BHRru8F zJ__pIfX^1~qi=hh*I=&OXP)0^d?bL#kj9_k9KdJhJ|CFMeJ-aj!r@b=v&Nbgh&4~6 zT6(Klgs(BdfjAS;N`wxtq%Vhz$47f8hN=f+Odrw0mp}HWnGUzH)wQU=K#Xf)Yz^s8 zGWAWfW&1ERCE#oL1_T>Vs8CEU`IQ|8h_j2c!N7;;xVKDU0OIj0F)-sip?3mSYW%1gPOhiBM5 z-!V_RonTG-Yq{;i$j?Uf;6~&1jilPU=26`bNw=RO zBTGGDT{&7|_vA$w_yKGMhy{vPqPWiWUXjmKA;*5aSv)Fkw| z!+}|L13rnpas_>@fQ+IKpBONg9g$l**Lh`j2>;nO`Oop;9V|{1PalgDeI>>A=?|x< zj^e{pv*>#_Q{*vk@(+XIAFqTfo zRX~#8!2ACqI9hgnpcwBiyc@LS@{D*EJ-5HHTruD7^5aNgafJc?x;EirkMy z9|8DbFK`H@z8gm?jO|{YOci(->*+u}hi|dx@Yq}S9O#phE+PAb?f*mPgd#z%NxKh4G2C4wyR8;(%Equ64lFi%&aXyw&3SPN*93 zh!d(-{J{xTCq_ZG`TFEtDrP&Nd|t823FQ+Tolw;x;)JRdyPQx<#LZ5qrDDGWs@fxd zRoKRlzM<a>Oka?&0|*=Jk2Rl>9hxT}FOS zYiBaZi)Be+I=6UdcLJ+yGLjIpGZDdHn^=l0EX{4-C6N`a}D~h@xz9qT^!A7LijVh)_K7b$qs5PNaOv9gyButqM!k`XB&`}(EX4@fW$4qAwCpsw ziuL*OMR!_mdV_YS<)<~}tLfR)hZCdB^cC~hPb_bMmDsNj8-7$&Ik9lK+5L?2D zuGaWAYl#>$G6ng>^faheELMKRiPaeKaY>pz%&WX;8KJUTb}%n>pog1+ zLPXIW4MJtQV->P}6^q1g@)lbX3&ueeL@6R*NED7!y|3vEN7Td$KngM4TS8}I#Fu1= z^Sw*bdTFa`X5Wc4he|x@%)q-klL3+DGMG4C>1Ey)=#~>vZqbWm(RE(WmS8(JrU?v` zEL8)7&Mozdb1BjfLgy(}F~La|X#-9~dce=YJ?%!t zLzC3Vd*U74S6azx4OtYd25>#1fvvBSjqY(OA@Bj zh^th|nx>V>dhjKXZpH2C`5nCymWV%dRZF^BxA8PYb!6>(dj%nL@T1PAUL8rqdaV_7 zToLyN!jemV2I7IKvJJi^-23>paMTKPbVsc#JHm-zJlYxv<_Jud>ZgDxo2KMm8%^Te zBw24M;*f4{;3`Ryg%x2{%vaMMOjz;mSR&YFby3Fxs$+3o-dmsB->@w1R8pK$yw!kq zNKlU3nbTEMYq&qLV6+o`=9+T4-sH9Le^^kl%o5^G<^)?D55{_&Y_X)vAQ8`UNsn6k zt_sGw{XM-hJC!5W%up?T6aG*)qRgz}3tYC|wue{7TB8=#RI{oz(JF`_7bhOob=o)@ zGZs#7j&vk_2C2BDLbckH(tj*ZXVY4>f@TL9oMQWWC9xKyoN&nznvywZxKCP|)} zsYDjBm^PComeC}C-O6MP+Leb17093!+nGgbiD~T&w?}LqlE5w^apGsHjL##_Alc0e zl1CE>#&SEKD@9_EudG-$OLYi-B#cZzc7rs9^3$@!hZNmXnb(H#B_hhSGsI)e$``|a ztj$VB$qU3lP=0!r7%^Mbxy0_J_6WT7=?j4pswB^$6t&JwG8RJRrVw>5kIyO|OQmE& zv0yMql>Qz;L^gr=8CSd1=9XF{S&1c09<->KBm3?1kV)Y|?2fTb?~&+y7_p4Y)k#_B zb?bX1kuzRwQarqB0Mk{WJLX^G?`g7n{kiJ9+P?-E;8r))T6}NkZC#CJj`+%IGg*qK zbzfz^HXYno=uV!>WSM;AV(DB~7>T8UvTROh1EF&;qMHlVXR?fRcSjxSrxLlu;^BIuo2S~Wlq-n^IlCND$a0xTv58C8N~G$ou1zAd^2H}q0iRbQ z;-p-GKrkLpYvfi*lou~v;No?*&Pq$3j9_yXhW)uJ*rqHx5jxX|iSt#Dt4WE;udq79 z@q}Jr1O7E(TIW_vx(pKW;f1QC2c_VI(A*#=gR)aO;sHff+qAMZ((CUD%M1yKvPFtP zJujf}4??l-E{h12Z|bdUN_Wv#M0#bRTzYXi^YWzp8{LODaf+y9s*v~@GpY%2EuFzg zd!hsG7-2FqMd@M|o^&W}Z!7@yCR9eQxSfgXG-JrwlFO*ivySdF`U-c`=Q*FAL}g`5 zKG`h9ZxnN%moZm{JKF-SG5Ag7>gKN?XTb?eHhDRS$4*mSeKQw2EGe0XtX!OSI!lRj zqp@HpygjG(UP+iiBf?x%cZ=N8JOzo23lfF+3K!GPT(mo$$X_K<>M9kHcsi?2@`Cf! zNn~7-C`3i2>ZSIeL-fos6pqCcIfa|xI1)J*Pf?2RDJDMMaHT=vNIV#chv_gh4=-7W zS>@1+8C9xT^#MHFYz@#vO>|?K$A-H@B6IV_dR3;bX(b_{`jnvn@fn4~d`^1n{0Rxm zd+|&PQ|W`WuM~*Si8JJvpEHC>WgR#JyM;ObO9BbY z;`y0Nfjz<8^>mCRJ3Ddy5bMIZOCsoB+N4B`{V`E8qf8<($=841`;lr`7S7*368d)) zYj1Tj5%Shyw-|{hyMq2iuf$|zih^pTlOAN(TUW-g$@O<^mD#Brv0hRAD+3jlg&i7; zk$On6u1`j?_Wfar(%GW1MmBV*T$|gH_E`_6C86wW@nuEm5>T{4h_QYxA*%6U`@?@ymIe%3)M zlSMA-&sP;LMVo?MK`YU^g?#?*?rq7azt^9m&VFw_Iz*HkB<02QR5#q~$C)Rw%ELtz zT%f8*J5s3jZG~+`e(Fd8Ch%QM=w&YSc9rBzh_pPhUlID2sNTTlb>cvf9!;bhj}2rr zG6W$D_ESbY{Vy`!E=%^uxyvtw;Pb_TS0wQ$o8BLT&SQp!Lt)q{o;m)2f4d;s{AA)T zW`n~%#RgAGBG_o)F;1cb=Zl(;By^w=&nYI}dRTMv0rRyZXW(V2+yY|Gg=%!|7Rf_d zyB&nq?T{F85f`Y@%+#8wOXRAYERjhpKF&;Pbv{3X?1u{#$)XmIC^o(tyNR9MIDyO~ zPoi`p60b3vHyvC_so7*|fLL;o66Ap80!^VZx=%`s;$Fq3HW-WHP>9uPyT3ysWTr5h zR831U!K}7qv@?w3)}RFyiebj*IYZA?24az?wCGfo|Vcv zPMaSn#=LRQX}%yl@8e%oq_s_Ii;ok3%8`&bXQLWdJ#$hA6nVN8kmTH?6s5S1nN%~X z6-N${How=~q&A6EZyt8CTt*S`$1F~Kev~VmUP;P@6_r@LN%ci*{*zM@3PMdcY% zhbrjHY(Jif@-a$gPXdDIGuoXZ6<=1o>;sivnZqOTl0tfY_9<-?huzAp>lK7eM~L9& zw=g)p0ZGs8N*kTS%q6o@{X|RdGxbQn4~eO0P6M(^iMmT=ud4Mh zN&cO!aB|;_J(WynpQn)6skr;9?a{Ns@w7&FND2p}IG{>>Zfq^AbyBCs5thKmw=J_4G6vAX? zitCwpDKp_m@#zmHa;ufk<7Lr2r9^3qs$a8|+ow<`y*;5{p2&Yj9+pL!WqK)bDYMLD zBx{?}j~eBRB}C0!Qd38KhI#1Ix}05I{zm2WUNTB=B&nY``LA}`zb2=KCZDw$e_O+n zYkE~IMRBZEide3GJra^@-LNg0dV_;jYMgD~2+!;oB`)M5nU**0bTOxOvIuig>x`i5 z5Z-ArkubsEG%oqMHj8uXf>U;X|=Usqkpw!iQUN8uhlhy5QheM{vvKc zb{M_5!qSRMf{3O6S~-%NXCMq zEthDedWf2$`9LnsyY-{i6xB_+RBPxVa*E86cn5$hPhzPNc*Ofc0cNTXy8frRZ4NOQ}U; zFeTu)V-dA=RJCv%Flm$)zmjrRR<;~m(L=czZzqdsWp*PdZ-{7fpNETUfXLNVe!o$?2JD*i z)~yz1JDK;mydTyf@3$mFVk>S#cn}O-OUm4~*4UMJeYRWb<_?*qXVo!4?9qweq!a7R z7iH#_B;I@g3!Q6(skU@ia2ayAZMm=ZIITW!+_#A zCKtDDLwS1GAokrR;k8A*G2AD}LJKOrIhJDryEeu=yYwh-HZKaq|PN4llu z`V%sfVZ3cFUQ0)-EVENLUe;9#uwBwlkqB;<%9@9)L>RyAjRpha+;lwUf`1e8)F@w$ zyDgpD0uemq5#e-FJ2#<7*oa?~MZ?*jLpBfVdihHSIhy;B3*}Eea1fy`n-0#+`tCMs z4PF~cgt24V&>Ibk_oeVnLAcZO5~L;VGF%ApCzJjaVxC*2E|IkFn>o)AJ^EG=(Z3&@ zukJs~DHY7VCM{Gs7jX(ke&(4XHLKM9bUa$5YnbS{b8`;Wxs1JsqiUs7wAy#1P- zlIO2d*mrYECG~yBYP;lt+>(zm_7|K|NqxWK9J^#+Zpkm4r?9tkN+tFEV~uvnJgp7j zK#{K7IE6Iw@PB}@k8n!-_5H&*6r>BnJ~u}grx^J+PN|^2r!zY)m^<88FmgMmR8ZgF zgwrxE7|p5iLh^)hHFHV@^?e6UgXlt2a|_;uXhC${$0-%m_cO@H#Rcj7;_93#A3)d< zx*p+_O6vQI5DJ8@ywZ83Nc-}IlBf?bkuQ{x5QiE5tA>j+@h2Ic%lL{B3O}1+Kf}*5 zynLj>^C*e~3?E{A6wVmc5AQ)S0BSyFkA}%hVVFBkXMx9?F^q} zShueN-Vf2kV#uqH;VBFsV0b(FL6>K$qQ_oZUVRMT$gpRc!Y^jHh2eP&_c6SZ;o}US zO^v|inW4&mY?y)%qoIU)O@ZR@90mWB>Gy&$-TsO3eXvagFJbs7!?jFbih-rua~a>l z@Cyw47b!fOII)A_kL&WMDLmUG;b&NvUw*p6BMh3nS}GO%DdsP#6uf|855rnMEetm> zelNq589vPLpEc}J{B(bXSHbO!k21VU(`Uh@K1Kgi#-C)kj$u!=!edzE9*4SPsDxi~wNrYQdo(-Ts(iPm6-LDYV$jFs7xvjxxM}>BSc2$M_0{f5!ET4u$_H zk5}JT1+TeI6^TwX`}UCgkK>H7d2%@?^9obXkOF0s!#_I@~8sEneEw9(@g<+$@Bj(2Sn6(9sKY#rq=-upJTX!;{|H_pyLO|8LtBZHZrUu|7rWL zBm6zdcpXAduirZIownyXmfe+1uVc~uUBevr?bi(J_-r>YtOKxNn#oJYP1EyVM>RuK zV0r1-U@H_Tbj&ZkKI#x$w==$lqi3PG8~_{;IsL z{KXWSB&RoIi4o;uo^f;&5J#TROyaC$Q@pnExeLocZ1 zita{E_j39ZPLFc>7f!`kMZc0$Kc_eHfbHe9a2glr&1nm#F;2-}rb}<_D{2(%<8(Qv zdIKM=RrnvU!+Dg`2s=1YPQT6RVNM^eSLKd!dI?^uq^pI~r`dr%$?2hG3V)c>X=f_9 zg40iMx|h@Pvl!3mb)5EbdfN(xKfvh=oSx)#{@Due;k2F8D5qcL^Z=(XaVl1-a%Xb7 zoYRkR+Q;b=oF3=&v{hUmr}~&9x?1J$=kx%l`Y?n1S-OmKRa(mF73V2<2dDZ7<9MUW z?_vis%IS~cH_~;K)7LIiuxL`LKHNCKus*Ulxbr%6#D33hP$AU-%k*HKPC;ZpEkPOrg7GU(dD>1&({e3OE%S2z{; z0t8)Gak_)kB>Ysm$RDNaHBJRSn?Tp~oc3|LjU5v5H|hE!rw2HlTcYwkoCY|Ja{75r z_j39{M5?EY{7t(4!0Aa&1BfV3SCrF(oF3-%Sx!%K`rq(N={m~kx$r~j@^ku0PWN&; z0e&f66hED=Dez0_s^Ii>PQ_T2e*>p|oW98ENlq8QZ>7t_=~CV>FX!}HPWw33$7>aQ z%yxv+qnys;4VQ=0MTmJU`Ez;$AH0!&N!OP-J;13xglpl$xZ#MFoA3HS7aj4@RVX!W z7#(QH>k9mtv&(#26g~#zNAPDpHc}Mr#!c}p_~!)vhTSu41aTn)G3@Ij?m$9w-I(q+ z&=qr-i!}C8CDd|Gl{?97Zn-bm)aD7{sYAP~*piBK2nctvN8;Xqka!R>{>q$-U?jqwMUFsEN z{)S3jTx2|&Q)-xSjdWos@HhODBI9Q{1S5rOHjuL3<|5-M&Grmr)>EmCMaDBZr3!`X zLLg7c!nH20(w&e06!`!UK z$92D^w2F)oI`db^d>ntnTZ)Ww&NS?i93fn%fRvTC78%oZsUicJ_#3{Z$e8{AIr|d$ zD2nX=p3DqMNWugrK)AyVfj|-x2nx!nVL6N(BO*8n$%F)QnS&b=6;~8QP!v>DR1{QH zR7AuJ6yUR?9ctrCof&E-chfrUY%Xt-AKx5MR27d zR^>-Kdl;!fh?GnfL_7PL$O%-%Vh=<+GfiXwkz#*gwDT+zx!8!$igpe&kvAez5-N&z zo^K)_K;%|HWHB0!j;zmAycO{Rh*IXWqn)`%>L4P&pwygbXF(&WXe;7-5XGvJXlJRB zYJv_x>@SUWR+-2Sh!oDUXy<$rnPE7~qn%4lPV*|G zo!6U4uF#}NtD>DZn8?kDl-yNEJ8v5P1V2vKGxvN7mPJgcb3$k*bS!er}}RMx@m8<{Xi6dxGLJ&WV&v8qY)|g{~b-w zL{3MfRMXYb&gLev+Hfw9cD6K;D^27z(av@zauXuO=4+#!olWF3h?Fu}5$)`4BHu;i z(}2j8(at_Pvfk!6E8;kaV##&U&MYJ4iqw_6D%v^3M7Bqya9$tnJl8~Kn8?-9&XFc^ z93oQzk!#Qfb)=K0y7T}O>&^ud@4D0(cL8JlPOF(a3KvfW(4~yZby}Vp1Zs)o!Sy{0 z5RySE-x+1ayV*}QC+n?%$XEx4vV1)l@vN9msfBwjkqDP}Gp;->7U8zMkK)R6U=d9s ztQZ~_+XZkmjp2#0R{^g3V|ZZf4M23qChz0oj)>ubu|ojY!!bNAb{N5?otls@GNSn@ zTsZzlUJXO`1e77o`PNUG9Jw5^`%G+m#9jc1yaurcbgVNt{L$cKXkz(_Pw~&25&MXVebU6PL+o}F`xauwhV_Vj z%ETTwdT&AOZW9|Bty8-dv3pEx7sQG`-iFwHCUz)d#fA-tebvNHMXcoQcErAEVyjH- z9f*C;#I7_jOHs4D?a#7#17N33D+Z*CmdrtMmw{0 zU5TFKKpr77 z#g*jw6^OKDpR1SU=Hbbv!|=~R`dC*>l3K|>n%8O?qFb?#u-wGmJV)8I0{^;@f1Ine z;tdK|Zl0nPjuGS-?{f3NWYc@_kFu@_p(2)>XC<5N#=k2_ydad=N(|s3Nvr7>_V(1Wahx0VyFoTOBBNZ;CmQZ@c%qsCnac!H9e5N>KAF3{vV!wA}P2H&2Gfx@lUHYo;r%FXi%G(z)lW z#6?vB^wLs60+@1mXcLc-x@L(f4*^YdUF`B~M?i*vX%Kk|h@^fAOnKHI(_Qga3=f;W zfS6|IG}(tsWR#l+O=GyQ`UtqElba_@Te!ak67T8aZ3660fTyeFjlp#b7(Lyhyv#O_ zn|iv(S}|-)%#mxmo1=xBwH(94ryUsiU<}Wmc1AG1W0T&vxTD-Wd)mT12uLr-ST74Z z0WpqomRGXN@c1b2NYMQZPl)&a4Pl;ZbzG3>%`xGeB>2CmnvAGK#~?4WE^Jwrmjj`M z2S<6QfzDCQaaO$7k1&t8I?iq(BOC`d$B+bX0P(cnF|?Hx!$3JA9O-TzeQn{c1u`sd zpcwlCV&Vo_qLn9Lww~clGfcQk$y-soJMTm0Uhe<;dFfcXOW=s>>vx+)2$G?uv(|H)TWAgz#qTI20 z7SG?p8lK5*33{^uO*-M?j*8(y++GN_NNSRSiz`0XH4N8bu9sZWVqT0#+2!$R;PK?`i6?KI{zKmCdRz!V!D!+)#VAqyv^7Hn$L2x?Z>)5LS&L_ zfy+Z*;+bOCLYEbHlo?y(ifZOg#KrSZF!5BeYcVqZ8xWo)b}d2ERr?MxC^T2KE7si^ z0Zi;%(xT5IlRvcO=AwDK+0bL%8Q@HGm4_5+1vrD<&1ERmV1utj8+Y@da;*D2h^=;Q zRp#=bvg;v;O+l=5Sr0?Z4@CO4N6<^n1|mJ)Hq^yjAW|2Py0Sc18=1#l!#p~K|ho-xRiuK6B16#EF*PFG$1Xt&F?T$Kqu%yqA;DZ8vA z3@>-Nd2~9~{XMWO*EOm~6y4V%5C1`|n6LtQaG?C9uUm;cGyx($eI3SFc3pz3;;_nN z;_lVZ+SLQ5Zf4)9H_~+Y9!I?Uo!HKxWCFTJteHOs*NQ@%sf<`tK{o}NZV0qw0!TpD zK-B6PdYsJRn+($RB=3p^=lpwA(57dXUC%Dj(<@?4E=L*n)3Gdes~cw*7?vz$-z2Z3 zct1%0qkY{%kFz;^8>r}m*tei)JRodFKM(`0ZlMR?9KQFJ9bbPZTQdf+6Zv? zszF*sawYY|vjakqeUR0Sg9ka=3Fkw~xOHG|WL)nG%?cuvzDw3)v9~nLL+{m^ZJDtB zLAGyWA8E+eGxVUJ!}l^!Vk*Fjv8T<^H*d(wAZRwu@~ z-g710i5s-7ByTF}eH|r^)ae^?eW0SOF8>B5o!dbjW4ZZ6LN{~hFjcbfBBI>C#CAlh zn2MnB5}b{v|HqGJYxzYN=WdiOi*vY0o>r3Q{}sv5gN>;AR#5tTY#AiyG)`01{qL%A zB!?b>boj1^$bB@aL`-74lhP~^?mn=~lHx4Y7Ka{~L_MfpIb_+dP>F^z+{qZmahlPiZW3e7RDyYq2G zAj3IvHZ;41LKmXK&{9UVCYtQzu-nVIrmnU#@%~Qs+`vyQWpTx&I_WULk1g#*db+Ht zfFD^pka&iZT{!UdOV1%b%*n?rfFE2kmiPsR|G<)|#3wp`R`g?wa*1y-^uvovh(9Rw z6feqz+2UP3C_B8gio~-dF)L-Wrj{w{T16c$)RY%Bk+%#Wx_oI3MMpR}U$v~1!Dxuo z{2unLK;FOP3X-RoZ0ugLin!0ou@3ZQi#e{u-J*1_Litnp3IK@DED^H`6mgp-j#I>K zOKzs7fRl4BB%BAwpe*;2A-h${E>yBtYT_zI+^A$1i7c4wme5z@mN?m^Ns#uaHY)A)%Cx%0V)v~o?LtkQsfec*iQTtpyRDRiINCwO zKT!08i`d1+J?i9S6MbyxNnwX?E7IM~wA(r1fs4fh+Zl(f5D#qU)E-#Gu{f^1GBP>z zgt5cNb15eP?!C?FpwLzEZ-sL32Acb4JqmB0?qCP|4`EK(-CkKN-h+0)+`3SO*4U2Tp%=JsTkKdMT<@5B+cq~SlcuL z)#C6?0ben|lSvn+9=2RhCL1pGFgu=1<_3C7XrE^w7i_?CD=0UZa;b3V+G?W1NKARQ zqssRs*x>|m zxBn0&PeeQd&A_+#`I(2fA0zmT9Ps6SX+}Rq=w@{4(tnYDGJb}HE4n4K*@Fjsb5#YYFxp7i)C56Hprk0VqQ5+HKHr7@Uzq>gX zf>yuKBkvAhB}i)k-tN?eddz02db{gd9d?({bgkxYA=ZP>ouO89*cQCKD3@j>hn}2w z_#Oh|F+f~92YWbptauAhsV%sR16>hN_FABpaD@$2dU-gE^p5RC7CCrEydtinkW1cIYE2#lvcngNWTf52*xOx93|kTkOSPof7&d@lONtX_EBS!d z#k=kfUkm6O4RBxERu{Y!7Eqn3+{rd-&LuW9ex?l_Ri;ord?&R;cXY34%Lfas|148!QzzZ=~gvcP7i$y!Qs0XoIA;VKU?Wb65@^=TdDLL_cOC8?J>P) zhkF))P5&Qce1OFwO%}DMFj$kTS-%l$UIC+6bF1B&TZ5Bj_Au^SW0?$WEn*j=QI@#O zoo`cf=j6~QBpkl)p*oh65ML}UhHym%u0WsWxRD(C{Di~T37lie9U)|JPo?())fJK> z*^MxU+FS7V9M--@i29Qp`|!*?^(?xE`6 zVrUA5h5NS{<8$vSsxIpa$>ML~zsN?;C#3!n!_q@GcGgO^PKz!p**slRC%HHRRw>QB z!j7b-a(Uz48^av}psFN;55WDQQC%deKQyXy zr9?h7t#Im7O!y;%<_x9m$AZEc`zh5oiE3;&Syz(0$*7(xWxvUky|Q|f-Re!o>g@HD zz1O5POv>xN7&@PoZ1qy%7}1{OvSzr*H#RjccdYRU;c3?x%#= z>KFQCj>GpN^t?k|>sd2sm_?HCdfiM_r?j4Ringelz%9}O`sHey*!wwrpFqbC)H8*= zZ0`RF#VTa>A~dV#MlH!Bv<{zz=~y3t`$!B;mqp5v815cnTS0T46waZBGpl|*neKG5Xwy$VHN0b)Bd zKLd8_ltxKPzk|>Yg%{g~yXeWGk2+xm3Bt7i_p%sLX~rE2<=q*U@PkCJisAhkphZs- z{d)}W&;ZSSndsFqyhj6c>YGHD$M7x<(0JaYabF{T)@KHc;oiUd7D>tK7y68q!}l2^ zJ?&s+Gwn-76b@qIS+UKuw@mFOoV=^U!GV28Y%}(bR(j}@S`J?d__E2HKpzv030l8Y zPOM<)yauSc=_w^P4HC-%?zyIkh%xo3^7FZ-ZHhUd(jH`6^<{I_SlqKttH!zu?t2^5 zK1tP!#9yR<7MWC(zXZ`D83h(eDrg2aJ+DB=QR-PzuV;x}PY_jlmS{bpkD@tze?Uh9 z)&uU^dOfvvJqopYhCZ`~={bZ(Q}FV7!OQJ}K~x!Vxhbv!Kb#bDa!)Kd^wBqm?-Ho2 zquPn~fpnrCNJAftLurEZd4T6E2WP{WEgzHFHED%saPds4g+x&fr7aIK7j6uYgIrN7D0F zDc=+aIz3LkZs25t3kXhOJ+mBV&BnZ}izf0&9*7(LT)%o|o0K>BWo=b%aOxlk$n_lJX{%@<&=&r+oMlN%=mLvehs2*-NYtVApQimQTCct4Lz`^e0I`%r_djzPCM%H%dlVr}gSD3AyxxjOP`fVe{u zG>XFzf?7|7tWFQ9)hYV_62&OZDPm0lvkT_ip$KEvRN1olBto1YlhH~tACvVXGB8{v ziVG5*2hw!__ffg)94w8a(OS4-1F6S^iVj)}^MO@|?;enL0X)5=4k;|P&`YWuXoa+T zg~G0qePr&fDtxw9bwu0z25Eg9dUBop0nxq+g^SmU|ED;(yn%16uH`Dg)6c=XgqRJ4 zJ~->}eF@o~SaiF0B+w>V8SO~8xkL>MvVPc+z?+Fy@`(|uH28$A!wOqUsw>fGE~S9Xak!Zx?&t1>u6Swq<^BAe2Cq|$s2G_y`_A?*Q?OnF(;*6WtC z^bQiYDdK+27f`&`)%eE-y!0LtceJL#Dg8$)A`dKsxPGbR=1E1&(ZpkrW+5$ol#;tz ze+*pxl0%;$cKCLIF8f#Kx6t`j`&Z|;&>2+wS3z{T(Iw3+h)$JZwW~*rOAdW<+2Qj-a3F;%?7~5G>Ig+u!l92jJA9)+noV-H zT{wuUl(S9B=y6!w1ptR{0R%Ttc%5B1h^my=X<_pKbuKhGd|M#+4uw~?pkeeE$@9u! zamtcDh^pdTX^K?G9p-4(?QZ^IjleRFsb6au?@@KN=_QDiU8K5YPvvh8im){h1c1I z*R^3`TgeqR;c5tOrSNTb;oI!Ox3yvEq9V00AMthg_Ciq1UXy4udrhJl2c-jElc-&$ zKsux~iQEP2^9A&AtJr;m2&XKYpfZI9u9}JLu&+;4-C=U*%LE)gM^}s)0C#kP?h4hk zAUa{Q>fEcPvui3;)bj;O_Zl&KC2)t*lUcv=Oi1 zo}{$)o(A7i%Y#tvUTtVOhlJX>w6u2{zTT`)dzc{EPLjm2`InFcyYQq7?0N$v@e{wj%>4E;^NXJZ%go=P%nI8`V+fYnEW!Km(G)3@ zTvaChLf`a&ZQX7-9t7}=MK>a|M>Y=6SUMS3vh1}zWA$9JMCOuXITOTgN;cR3o^f0! z02?N^CdN}s%8)54d)vwAT(d#lioJNXT1aIfOK-_M1?ft~>jo_Q|;D!g5K0J1;kC;vhw=TXK}dCzK64H1T(oAtX;M{+`4q z)ifD#DIZ;;>{zN84lWWq_KO{e!o7m&is5b`4&Nz=_v()Rt3?6}%oILQ(|4V%sJeK! z)D9=^P2ell`mBbDoNGq56ltqp=(|N6zVpF47m#oc3!m#9`b)w&#$zd(a8BP+%gWdR zO{}PdbIEG;GcP4sEmp3Cl0AU9Wvn$QD&j-pam%!#c&XxLI+0xQk7aZZHVautETj1u z-y;#J?W?E;yGWO+qF_loe21X&N2=Y*+NQO_yOoZS(F@heJ|^xV60xCBeWxMT zxd*6!Fdc~IN~#8n7ccsQlHA&4LybF4POINWttUnF^ns3S>N!rgVLru#<1~Sia*yp> z(yV?5v}7+aek!CYD0#ij`0K^^JY)Q7F&^I{Q^vQIL>ED9Jw;ElxFm^_l0p z9tw9f_{LfuT0_ZpJMQBOZyO?ZTRb!idW1r z_^~DDkX{<`0;@CGyrU+bCFRQoX*tOY?Kxd&&*?(bBdMG&4CZt_Wf!TWkW)G4u-K%$ zQ(3+=Xld;oWM3B{H~o9YW77gPYAunvxfi4_0g*pB*fjr8!L(8}Budl#N%~i`Yc0sv z>NtGvUY0cm5cy|tmCLpV)U<19w|_d=`hu$ebZFJN9A3e!hgX?hx$zq3=A(=_$o zN*i^jqK?zl3#x3?jfy%`Q@zzT>T*S0s;O_-sV5eTRkvvB{2H6=K}CH;Q@hPo)FK#; za^9_|`-GY@OB4UCDq-8=3fAX)&MVNdq|DPq6bU7FD&iYLL{!Ra^OWXAO7nW9`6s2h z*?dLRnwKkK9O|d$j+&@7uU5q0f|{!qC}FxjQa-Ur^4rO!YN2wWqH51MsHg)pHFuFs zcDJHltf{RQ+hn&WYNe*WsHr;L)rz`8Q)eMMr1noO6szvk)aDpxL#T%p^$AUVR#Ua+ zeTw>qrrup^lijAMUuf#MIvaJpqMp*!wwEia)?BBk?d5R3m2z5Bby*!-AU3CJ>b@&% znhz*yj;2;$Y16z@QHwP-i@gi#M{C}ws7o~UZ&%r5mn-TMn%eB|HrW&N#i~~{b>!7H z*@KE2)kM{PPStEyTL|XuBd)ZebP=nQ6pB>XlnkA zwsa3F>MBj0u-2w|x1!#ysZDU-JH+NKiu#hKzN)FZj#ew`2b#L;W}ED(YOyLZN|n{p zb+&X5D{4DUowr_5Ur{~MK1KbTrmna}Q4cBVHbpJc)O&BW$*xz_n>6*E+ibFRiu$;w zezd_xJys<)AJo*hZ?|baps0Un>PvUnWOpiRn`o8ar|z^-H!A92O?`BuP4jX^ovx{$ z-DQ(KQ7Kj})YSLxwowl%>aCjk={+{hyA}0CO?`8dO?Hc-9@f;C@3m1^E2`C0<>=Y_ zY?@D9CRTOT)W1n zRMgRMTa0COin>>*DXTQ`a^*OuDrEe9ttm%IjFX>jRkBl+?BNQ@(Z7^zmxmNl%N|s+ zCyZ>t!-}kJ-mPRi$EdRE^@yTso3|)xrlx*rr><7ii#7H7Z8puP%EhWmO`Y_pP4i(z z{kx_%!=^4WV@8dAiu!=2#y?@xyiHMu#wwdT?6AqMS5%*-zOSiV1+knJwNz8Hb}Cs- zJys?*-=?XzJf)}@hADeMQ4eTpr(HIyb}H(pn!0SaO?IQA{u!riZu){vcDbU)HB;2& z7Zp|4!iiF`s+XpIqp8}egNk~-rdGUU)4W?zr)cV+J&KCXlsVd2I4`s+VzvIi9Pw5BfE zr>I(Xr=m9XsM1-8&NjqXHY#eeruKN%Cc9iwM{4RJO*JJuN35Ezsmoup$sSbH8cj{v zZ%cQ#qF$q^AK0l|6!lI`z4CRN=GBV2Q&Y#jVbgqSwpg`aQ-8Ko4=d^yntJD(HraiO zddg@%U`uzKqBf6LC7JS;O?JJacGuJo?9@6%JzG;Rf7>Q|tXOQmP*VrLV@vmdqLypw zr<$s3VW*;Asj17~wQ1g{sJCcp#(Or+%N6x8O+BrtrhbdWs=b=}>iag?gNpjKrrz*@ zE#2LU`fp7ga?nQIqNv{Hsw98YRPC{=6*Wy$@A%LrduoQ|boHJ=EGRYNuP+RtsW z2Nm@~P0jeiM%}Hbvo!UvrfSVw6tzxMulmv^yIN7#YHI%@HtMMYvFZU${a91A=EI8m zlBU*uWs}{fs2^x*@;`0VZHoG>roOMKTJw5EZQ@lWx#*}(woXyoYHIgmHtMl_u{l*! z-_lgA`GBI1(bTzL+hlht>I_Xy`o>1xsHjz%x?fYZ=H-gIQd2McmreG>OtEUCrnWn7 zqaIY$9h&+NP1TxrE9#q?TJo(;c8j8Zsj02Lvr$(o>Til_r4K_hVng~K;P9=%7`YkX zewKT{k4ea!``aPdz*4n2D~AD|Em=!>=;z9zl#$SNSR8KI5p0M` zGIuU9&v1oJze2Fvp%ijC*9pdA0+!9YhLQ2iA+UHBVPw26Lb;0<*_`RY@L@MlPVU;v zQ!?v_dWF@wW_#^sq6tg`)NQqo6KzQp5Aop5iLB2QfW!9`D6a$DW0+4Qx>(K&8*IKD zBoNH%7y2%7hwmdueNVme;txp9m#i2}j$B5%bynn{qT*z!^JYP06Iz?n%dO1G0YcZ{ z9o@)Cl5plU^ljxhQi;^~zSx8mrbgdONMSt!tB|`TDXe2FJ@lRC4&OLPh*VNgD#<35 zWITh9oFpW1&zv^0DiS)AGiATF5z}e0ktcK#x`@-baGHaqS*A!iSJ1xh@?Z^bCu!7Qmb(BKId~(2w+!Uw$3=3BklW6$E9UccJ&nQR(){m1Q7S0o%_9D%9kiAJr+-@X7DmMU_NlB_{gi5N;X6GvqJVoIX_M}eO?L6U7!l5sd#}jpZ;oX3^ z6?Wkj+Ro5d&ExhPIHfZ3?A&?5q@*(Pq%v@vB1)C#&r+VH5SC2-Y#07HC@h)$S?mnf z@haHbG z%SY+k;!H>BOKcHO#WJ3r2&`zQa7ovh9QqD@hwm9s{vfrV$xD$uiq+3Nid7-^ruvyX z)dijuF!vYcloipcST3WrXua~}RjPUN%DkMvP7199W6g4YcEO;{R#rk@`EOQNujY?xl&=!YB96Wm{}rb&N61^ zh?zxVCaMiDw527gp-hHq>3DYARqqa}mWHz1-cWX%lvG1`!K9=b%1f$1_UVM|4drE% z#n2BqIDE@thxB2q?RKmV+96q7Z4y>lTw@YeS-eqaG4z`dc(@L#rO*1vuKJ^(YRTe9 z_AGv6Qc_v`*rcSg_=(D5HXbu%S=zJsnaN`4w#v-y*vmi-LAY78jX>RTdYU zgjE)os4S+3e%8X_`wvu0H?xpkiQFq*s0Vg+f?%P!voD>_Lfz?1l}<-EF`#C5><<@Q zv<=;p)sL?sX3p3g9lq|MOeS?2sYpYe5SXU5%EMoA)AYbxA$n$#6IydhC>NkLDJ!+o zJSb&?e10*mQ2IO!h?R(}6J!+|qM>)K;HT zQ$5#5!RI`sJ5f~h5jlGx;QqMnSfqv4xV}~nU>$1vHf&Bgqzze(c`JykYhNYvr)_06 z^jb@0ffmUTHHG$ys8NUJ9U_Zmsh#u<1-Iuc{pCEg*S_E284@f*YjR|POnJT70-JwLawPx78cKYsSBlB zAf>rmnAsuErR)nb_hs4F5q()u4BLsy%o&o>wIn40IvBfDc?D5*j<|z93LN@v6^HLp z2oI!iv0XTbs&mA}S~&DWENGk%j!1*>36n>)b~<75I8O@bgf|C<;@~w-+tOKk035!y z5R__utf?+eb*}a?Q*r8C?PKk51402Rdx=@v0iv=J5{E*Lyt1O z8G^5~9I|D774+Ebcy>C>yreots8+K1>`k2re+R*C=@8C~XQvbt&I<}lOPVQE=*ksc z`GUd_9Pec1E)rd%pl2p^RW;MzuZ~z($%$*L-!{$tiEu9j=Y0TgGkOAg%4|-dyv_7d zS3RBIjP1EUPy5N^`OT)I8F59koq`^DSf6V|+URXAYeX~~HY#rmYQ-3im#WjkYbDKH z5c?G19-Cm?Pv&i7%_%tLeq$5ZgCVzSZZ%Grt)8JD074%GJsr>m$F<;*o%!-qe+%s#HQwdqP2~ zN=TuwU+H#GGj$IAE|SA{6KKx>+zu~GgM}k+C2@H5Ojp94*W+5bIQj$ zrLRMbbUUSkOi4&mM&7At7re$qTwWgbhnfj*5Oo_g`z@kPL@W4{L%-GJ@Vy73oQ(h0 zez^VHXpX?prVh7%rw_M>e%Q(3`xk_}WI+35dEEgrs7BbyW`wPfHz`au?^(!|$1Z}X zdXs`e``n6wmD>UCDWWUovd$`xy;Y{v0}mI;c#BMgeozWe?ZSpq+R;*8Y6?5lA^VoC z^cp2zM*5bm^wUG?*muiTJob%MM^}}S4~WBeIrO}f1YPgTHVrFH2F3S-PiaUd6pF{6 zweasE{2+wofv30lz>_lKtzd(b?7bCy{z+_lD?#^MQ{@4oxAo&tp&!6<_)eJoZEUGM zN0sx&mL`9qdSgqSznl?haPEyQ^VCS3d!9nI?6@3-@_WFrGFy)BZ)_=N;IT!OOX^)M zrCZ=TJ4zMKZVnA%XYE4bcem8|w%V(R-(&dK*GjfFwd7+1DNl4)Mf)vE2f}sow3vHK zOL^uC<9ts=ZYhPg7K&tccTiq{L*El!AFB7^B!_WHR%b8R*qy<~1)LI-n28Wac$#xG+pjX7<}B zGq2kxGjFNMOsxA9l*hX|x#WG@Y*nr#ynvAXILp}8*%f7Fy8lh4cuy}c-%0Zb%G%T0 zlJ}Kv0gop+%FE|!CEO?0%V%!+z^$imyyfJ(R|j4ME-M~yJ8U%&4??=R5YU^Q^6GEy2D{ebm7YPn*5j3)o}N(0;lp(+Nd17& zhg`P-832Tjowzmt84QGvk+^Pm!VdX3#<`4I;f!@(fIz%!no5Raoa>U%WTqpTSa+T< z1r!sXhj0~!GR+dEN?|HiOh1xob|}*vVY(7biLTF_aYJa&VZQ7<9+&!8m41%$m`WO6 zPR|1PLg|x=`7%`B5$Ln(UwwPj$@0Ap>Z4oJ{ab6Z zC{LERaDM}~sEBCqe{f~vk7#Puzvn&1RsWv%*e2j^ zI*3X;c=;4GjgRYSd3&00CsuhsV2Q5xoN-@4z3Y8dQSYmY5|{e`73C-d4d07kMI8)r zp$|hV>LYtaeIgZg7St!Xo^*Ox3G%|)oseNI2=bIO%5wo&qzUeF#(P*N9Hm`PJMrdQ zdDG|cmgrvSu`S%wz?vO5##@c+3oN<6S>CHmcx;sSCWI*+H!j|LpNXH4=zYY5FG%t} zX?SvadHKOIdHwFhRPQS$JSofjmf@K^3~w?-=40Hm@K$BSw!FQC`!ihEw_NHyitC?< zZ&_=3zd`tMq};MD%KNPeUmoi{f$-O;`<7S4dw(_ID_eN~jj*c-@yimu4$N{y_Nrdq zrU+uhF4^JyCb}U;gvbwz6guX>!*5C5q^a6 ztBbsY5ElJwD!gYS{1oHYR(ppd{4&Eg&GVj*u*j~T?;UISZ(Hu2jPPvoY*>xgt6>t* z!aW^P@hzu&^Kq5z&#=73M&wdBY9I15L3w>SUQ%MiTd^uzk&H-KZ7tp`_|q?qFfZe#*8V}3>OQ3MlvIGvcFh_nOQe~EF4J-lz>%2%W(_OQGk z2g5G!R|vBP6MIB?e+`D?Rd?(j3{B@d-4mcO=3@LyLWHNk4CAftL<4QLMGB^j^ac3W z7xcE1+qsvw9pgRd9M$KbG#c7o+SLa-Yp1UD&ZpUV+dDExWfA^!fpvy zd-n#z^S!Slyi@F1?EL`YYlR0@^$;RIM?{BCF{B?wu=Qa19@Z}iw(1-624bzVEvr+f z7#4ISg00V!U~2@EI>oSBIx+T~nBT#hieTqXF*ITzW5>#O0Y)R(DkY{JVsjAeq8NN+ z7}CNWz%{;WXKxv<*~wP`8teW9*s#c>4$r?3;Its} zn8Wh?Y>=-VF3+Dp_;&cnZyZs<_wGmj%MtI19-_wY$m5PgPfLS*>qzqSHpq95ULFqN z9OfgxccgmK4dn!SbT=P*bMv_s_t~Xb$htWLaP!+0ZVtrt%>)_Xj-s2LjJpu5O)K&5 zEa-CAwUmX1`b30$roo43*Epx;Xzu9V%THdPAA}Ncdl0}Byc_t=iHTvEFc=ea4uVli8nW*8sHo^3!rQbJ zF3x6*MVAyrz#r>%42+?$qQ%95k-;p`nzaVaP&{#BmZ9-w!B+DSQ{6PRMTj;i@CIdK zs4pRC8}e0#k-ue2$yqD67}**-zgA+92MWo9?-+cjBB;X${Iq#M+7EU(!QFwE zYaFQ1j!_nDjY&jFb?S#m8a|}Wxu7I5xeNq4_j8mrQUdpdEsyq2{dghH|)3(9cp?4po&AG)81I zb&b1`DOAHiaZ)(hpkU0tfaYt%Bte>vZS=MeyROZlX^*P zN?KYfuzmvu^h-s$qRb4(OQ0AYRR~7KjDK0DUm*tfPs;vB? zyh_XOA3ky7@QeME#!MUSpL}u7Xun^xLun{?6}SU_n&2-86z0{GR9lnsk$irUf0B?! zf@BpBNVkg1st2U|t9i9b^NP#-a{>#h{6%?HMgF|X%De?u4YplsKpmI?u99*Tko>DD zt16yV7AQ!v3qo4S`BSZ$ED_9tT##F`QJ+pddwNLf^|1rP#tsS_n-w-TZ9w?wjPTK! z;iJRbkv2FicY0d*=pHR(QL!!rP5CO*m&8 z9NzB1;SC%d-jc!L3wCh$qQY1b)|9l=@QJ2jxgE~*w6rtupQ+bN3vYc|TKIxYOFL7# z;fpdYJ#48 zOsh)Dt1({I*haysK%l_Fz*1Od|HZiUGfSP>JUG;u$|3E)n2~ixDR|JC6k=RGBk7FBHxLQ+FuSr44`@KpUVwUR zSpO2$pnmOfOkQFdBrI|EBvlj>E6pn@DbH6^KnZf*X!)m&OHT_=68|4gA>phHV0Jn; zVC9#WmKJmJr2~bPfq+#NsP^aO=Lf2)tQxTSr7hYO_$Mj_{z;hP z=~Hx)XXZE$ww#$d2}TYVBSUy}#Cauov#c7-Vc4o=?iy^>oQuvZt}e~1n&Tf74B@RI zIxdqTe^wA57z_;vhS)>S_jA?@ZGl-Rp{fO?Gs{c-l>x2{0#Xm@XP^zQ43y>hCvb9I z7MNdcVHRGNXGyH;z3QtozoxRPywYDr-u$APvN?X~4D(7*=A{8-WTavcWfe%=QW82| z)L9kfSQ+G1NIz<(=eE)~uebyjpdTHHX@6dRb)eE3Sy^6H<0wD+E;(4d(wWYTfz5?dGUu2#nEP=zK-AxPq|?QDaroXRA<1 zr!AE^9*ZOl4yC1eSniB2tFByNRh8FN<_Bc$W0e$_AyiX369yHO=VRQ!V8W2qSWt}u z5u42vZ(aYH4a!RF)T_ zd`&kdC~8c63U#l@qDF#+#g$dnDz+rggfLQ1s94Hr8A7z=~MB%lHvF0wO z>$CgB%3pQ^idEQ;@|aTUDk+MWXI6Kn9+0ocH!rA*5)rDajl@1@nfRr|%G5`n1>`SV*QC_tB!W~1nEa~$g zofSZPrwgW~g?N)?V#B4Irqj(pry!o98kkAP9&7Va)y9^FB;>Dec7qy4hqNUYW@82v zsNL*pu{R83S_8&2>NB}u!KTg(%))LAOUFdl$DBDO!y7&gU2WmAGm0h4`7p+;S^50O zPK4bA=Dlhh^IPRL)p|0_{-mlpud>=-jQT>4t!C{Q07?t|WRt-}BWPjuaVl&TTNQcL z7>>#mr_!ND4~C1ejgLI))%_*+% z=NFY%_~#WBR|l#p^6~?X%Gi`}IA*KRQoUnlMGbZtYqI=GbD_y}{z9t(#o|mQkJBm4 zBUo%1voJx#^r<>fAX}^$BV_haWpt!vH7>Yf>r7IX8cKrIU&KVxGIWkB0~IC6q*mQ1 zuanaJ_$xM9*4%mqgK1!(0KThZWnx!Zg9s*o&Qm7pXXrfXm7K>bvPh(=fn;HzvOH(* z0yQZ3iCGxet%|>*6&}m9vw~gayvn=^(UCEV%kswYN^3Blb)(B-L8HQ`7blx)3Cy%w zW-#H@`u2k1!oIGswI)e6Q^pm)zbr6MrpjkdxB;V8ir!OgFR0m%6u3PT1JzU}OfJY= zKg39T&N1BeSyb(urb$8&N>80BgQ1$k1UTYj+rM!>8<$%+In@G{p|6&I1Ls(UUU$Ivk9fJsKlZ7wGB`vC;G>I!ADnFjlH+XuztLm>jt1PlJNh=ntxb z^^IbMIm@1OS$TQIUrLyaA*rcMqbm@36rxHlG+I@OBxj1H5x<=v5}6@(8||TaF@~h4 z31fZ9hA5w{1RBz)KYd`(iKVZtDZ`AW7@fz$KtZ@ZH`s20bpRviikW8U8jcDvGZNer8_%t071F@AJ3!B{)Oa<=jcX5(Hel!hdU z2@U-(Rb`T`ob#Z1jMU6YBlF4@Ef0FCA0LPj%i0>WqGNeoNA4oHgHnt zHuZ2wHs)2S*U!65W&Gudn(VURt}R!{v?oLFXZTgwV~%K#;D!wAkGun9!Wx_-=1YIU zd%C8s)PzX%m)%Tk@$`oE_8YRxb} z+lj5T!s7XjED2V&qDy(1tZ^25W&u+1iUC?;W{lXDtN!naC1m^dq++yf_#B)crJ7+@S)EN;`};E)2ZCT2i-&TPhD4^j%(-Y~!&E>N+GMJtihVS823-~vK@vF zma(XyCb%mDKMqDoNSUfe2=?-SWrS$FNrAqbOM4k6)PW%Ox>x}7NDjAIabH4T)z&-4 z3EnSNo4jPenwe96wMoPK1QV?azo^1hGqdEg5LR2&#bp)PxWP#x<9rQwPMAgmRunjd z;2Cfg@q{#Gtr)6CSQ>5$AuUzy{d3gOCzl#@JnCQV7o=0{GL0+X4u60ri6 zmAJJcD?;iU%=wepl{0Xnl$}hOBu3~G;xh)2=GQh03MB89lbHYK~YQY z+=zbc(KGu48hfDGR38W5oJ2SDkF01sj)rkv5mcV**UQcH%rN?AqKfC#Z!Cp)Ft+k- zsV)eYiW0X1xD%^p(3qQ-l$Xz`!9AitNpY#3_~`~8GTYO8J^AGon9Jsj4Q}@^!YV-f zsjAG!XS8HPEG<*HaBym7N2utLrg;x@P1E4D&!iHF<@ms1xM;QebjQ*l*!nH)%j?^R*~h zchzPLAMPNQVGfP0nCc?zCKz2oJq_qmxLFv%IJFCBLnEiK8Z&dwU@YN&r?Oc3tVZce ztfZP@6sZ}9;cV=N!4wsv2xl5$%m;Y?{x3*tPARU8pphlz7=iywdF3}?5b^)B;{LY` zqMG3jnKGc6jLgTwSrTEDR;fkpV7Rispr)dPcP#^|Ge!$-yanF4%ECypwbpA>g`&zA zZ4VPej9%6LKo!m%1WdQsSnrtxB>P!T1Yt}zlRp@GKBs$y7RO@-H z%DjSNDa-$>X*JS@Dp2!@dLK&DH6MEn`Q^ByuI{@Gz)lv=m6z0%mf?bUStL|7Dzy3BoejsyISuPk?z5$ZS%k6o zGfUGmx?31Ixe?!17 z$y-*Cla@9~t(B-XjF53l#ct)z#m0u*+2oKOyoV6fs&*p6=us0b+wMf;0uiQkyM?kn zCku7Et+<1#3|E%bv#~&e3wD)kdT=wd0{ggXnTkQ*+>S@&UoXW4su=AmgZEjG_5icD zQ(qa_|1J9~w;sCCDw$2=bQ_K| zlxbDrw?KnCo}m(=$_#Avj@#H6zi^sOp5PST%=W`4*+|X*pXE8{HBvMw-9H*IyVxo% z$4VpsPmlws!H{1a_~UL8s=olE#Vl)P0C)3wJuPB*WsJsr7nmNVT%96=F*trek$C7joB_+7Y$s3(m z>skd^D3s$rZ9u6YgoAC^Xh8rQSt?Mypdz4f)G&^j1#2Ss=!lBt!;IYQ#6LV)IhPl7 zeK=K*6K|LU&0&D4;Zg%X#ATMcRBCRVFva7X6#-7U{H37?o-nDW%q*^~E((p1!i9(& z0KyqlhLocrsCrohaFmOr5=@41z8Im)R0xTOI-Eg~O*uf%EQHcEE;$N~N6y4Sk+slh zg9Z=eBhR69g$8p|Jr`AxZ{dP_PU1VN8IS>Dsx=^Y`8YNd(n^9cI^zv!EFeVbj&-~| z>nhHRF0X!LP@P5hPdhJFhsM^2Mx^Q;IW;t?-8uVxN7=>WW?^|niEJ9`FE8+) zhrM zRxdy@fUm1b17rfu0-OyP3OE-q0zlc(xYAJ>9;2^gaUBns0N`iECjuq|`2FvT0ha*C zKLgiG0eOG|z$`!!pcpV4Fb7Zqr~p(0<^dJ~mH_GiR{)j)sOxH6uLZ0Gymi^EbKjUg za_4(1hW7pTq9;F`)b03BWB>W{*~sb&os^JaK%M40b}=67S*+`8GmEsW4`LlCw%#cD^7cD{_)Fh-cf*X?3crq z-#X)&!2yKJzxuQMhB2dly6voE=NAIsfcOV;K0AE!?k`_>^YhMcFWm8Ba{Cw37SB4- z>5Gk^bvpgGnMa;`{=>Tv-g5Szzub-M7lHj#du{Dh`{tY9J+^sOY0G~P{M)V9J=L<~ zJIPZ$)2_lt8?RX89o}V8_w|oD&UvJH_GNSPri|N$YxeUi7C$=Y(kFV<9=qsK;Qn9A zANu*{v)dHh&~@OTJsnp#J!4w#-ZE&&cF=DAZP}ZvUY|YW-1|S8@C5K3fUBPQu;lR< z=l=1;-(DX2eniV=?yS=b@?1Zh9DI0N#Ks46&O7|cS9wzo@7U9A&88LOqW*aJ(&7A~WxMW~=4_Tf^xZByN{=r7d~odx|6KK5>aH;p|D4|Uo~T*v zC*L{r)HRQk{PNh7AG|i~!|yxid;XT(ynUzKwEH$Kcx2z~?}opzbbevf7yn7V3P$4JkVS+X}B*`ujV${+W|?+dnVtv+;d|Gn*Ve{sFEZb}5-~?)GzjiuG+C zQq;3m&Y;Ksyy*I=CocZs>kcp8@?iNJH=dsoZ9Vhj)sJlG(EhQ<|2^f`2g~w5jn5j} z_K!X7KRcN-;rwHT5g)WIoc&{mxBoS4(`|<%t_uwMw#n+}5_U`+*nQT`ukXG1%T*Jn z%y@r(w`o1wAg*ov>8V4n=(6gPZ{GTK@2afIF{RfXU9;N#_q-Q2-L&=b*nhV^nUV9> zrtfwyUvy28We!#E#ZswoqhXWTr zSbBU?f8f6W`W&A4Wh$<}0-hY%^rpL^Iet%R>|F27jKjFLn(uLQYb0W3(uH#YZpFjA+{+@>_ zuSFd`b+dc*oTjU9dKmKWp&qZ;JZQ+;tD1c{vknKQ#Tiq8Da8b;oS@^MW~ta&{D~`{L~{zI^;pP5ui&Zv}cx>D#Ac0T%*K1RgafV^Zw-O)fbLEKQ=o1Tjee9mPd)?d|*R1CAKCQ}|y5pVJ4@F(Kqx=1x z{&U;FP3e;#*+1p{1$VAWxctPOcRxS(y}Mq`XxlQ^xu;!+j z`(J+=8=aMW?sF~1&v*{;k1e?0TIsvC_wxw9@^R-IcH?^X_dPv#+_tFmQziFTKaKXD zkUV4i+5bo#F|zwJfobK<#|=Q z{(6yhPtxi5Z#$g*32YwLHtp_Das3R?ult`dzrK7|>W&|?7M^ozbpO`R?_Ybv*0)bg zTwVCXuDjOV@+oX?^U-g&AKg3R;40Yu8SpjR%APokYhYWm`!DRV>$jVH&HmH1)z57@ zExg=+OKNt9HQ@UK^zJ$Prrdz=jesM-*W%julG_)4h4A9(uMNGKd~bZXYsf{({ZqOw zI?$r2dtvJh-`~B}gIDwd_5%(9jss2uVlkm=59kXR0vHFF4k!UE2CM{Z0Bi+31K1BZ z1UL>j4TxQN17IuQ8NhzPA;59KX+UfX$OHNUh5*I^rUOa< zivcSE8vt7Y&j9uV4grn>P6J}SkO%Yy3;~P-Ob09mtORTTYy~_6H~=^dI03Nm_R)Ai z5+D^Y43GoJ1ylg)0ILBT0owq(0S5qw0Ve=fOUMI~02zQ$fXRRYKs8_)U@c%9U^n1h zz!AVnfU6beuYg{FEI>A3I-mrw7_bts0k9SD3}8Rt5a2lAG$0l)qG}K53m5_z2bc~h z0W1cr1Z)6o1v~@T4>$xk32-ICW0C3@89p1C{~S0yY7*1NH#k1snmK1h_gu9?%Vt0T>0C3@89p1C|5U1GWHm z0`>t80*(Pr0iu$ScR(*d79bli6;K424_FD<0N4t62CyG+2yh&58W7tV{s!m^7y=jv zm=34_)B#olHUhQ*b^{Io4g*dATwP#0pc^0qkPVm)C;==6tORTTYy~_6*bg`aI1V@s zi0z8B0et~O0OJ7D0VRONfYpGFfNcQ2ob~|VFyI7$3&MCn5+D^Y43GoJ1ylg)0ILBT z0owuml+n9@BY=|tS9jPB=my9DWCNxGiU9Kg%K_^FTL8}h_5%(9jss2uVtc@LKwrQR zz&OBkz0C3@8H32P_Ay2W$cC1ndJG1RMjL2E_J8+JIERqv&HDD9Y97clg7T z@PfzZ3TmCN>7Sxsw8D*8;CK8 z@*TAN`*=?p@#e9L|96d_r|}lhOZqvmo4++EFXCzA1+`w$^z(H7_-z)_drVby7xWOH zr1kAYy2PJDzWC#(u82D)32GhI>37up{MrHO-DW8IFd)QFDbzZl`3GzMhjspiqswm&XsfeBVOb*F}gl} z8La4!YWn4xo~ZrJq{mOsk#sai@psbx`KGSFBO33}S{&d)_j3g;I}sBiZr3jbc~`%dfoMYqSVb$gtL z_7(xwACa%?k$3($2cnLbVHI@I-tS^Y~gs<_}Q`_;k42AQXU(~_AtcUh3e*Bd( zraxY!+gIl-CG$g)qVGUH`QwLK$#3e4Uy>ni`d5DWgZOek{^7@uWD+mU5!B*0u82RU zeWjPqXUBnxJ{E;a`UqV4yIc2HIJZ`AvVkyg@xK(EKHue@SP>Z|Z%u zreCh<-E@C(qwX&(?W-}UAO4PMzbJ-3@W)T4GX1l4J!YXFB>p-2N&a@}{xe?Vuc2;8 zZ?1iNF6?2~F&^c@GPxH%!XH15O1_7*UVe&&CccC6#4EY1GQe0}#yjB~B`hIj6#sb#iO)apG4nJ55Fm2VNZTwQ#(d;B;!+pBX+zdh5d@~i`H&6Q&{eeGz z!j$wuXxseV)4=bZ)AA2$`Rn5q|EI8pKYlfZ@~)YJT5sV(yjG#sKY$Rwng8(nUi*xh zr#g^#k`C!Q;TM&OoBsDxAjF^KKm6X)_UzX7@Oz#l{d1C#t)Dgje$9Ve^HYvLeiMcy zGfwk!MZ`^;xL4QVv$_sr(eaV~t=8vsEBqU+uV(}M`I%v|eyQ8vQC&YRw2!pa@_%ai zCp#;CwoCrvq7>d0SN>A8{9yPte|_LHFv()Sk_q6i73QE!a}lomb=5XEBO`uX|B!C_ z=4P5dSM&1|wq%_MpEG{&iS9qm{L-DIc>1EeP5a}QnyA=P3qK9b*E@^`}xW;(|lLy)BRl5{5-NBUejLhSpCeYDv7 zi#;VI>5qFOhEc96uJ>>;Ri2Yea35$t+DdDDk1hKQeJ(jI?brLSFe!hml%Fc)he`RJ zWc~$8{|%S;EQv3W{1K8rTk^+Ae!lZ$5}(r-Fcuj0iA{#sOckHW;&YYwTqHghN%}fT zzbN^4NPhBc^A1U$jj_Tw_jnA{-e#QhnITX7uNMCl`ek|z8PinEX8erU?-u_B;=g&7 zeYJy(+1GaTZWxSZFlRnRnk~-+;QZ}BM^uHH&40~nV=zEe1j_IwLh;S2aVf=)&iRy}s>+|C( z8E4zAAQ33_%Qh}UpY{8|q>O?pYkgh==_l?~YUUt7L9pl68EpRi*3m&*Ca= zpmH|zPxn{(^INF6o~sX>RGql?>2v=DxtF))UQ%b0J`%<&9}8s-A3ssWDK^J;Z9@Cj z2zL?nAjfwjZhDkulKTi7tOdn-&0ha@y*h=)H-Hd zpLg!d96Tv=u&30ov(zt2${Q)=Q74#v#(SmTNl{&nKJ{KH9|nwbelm;^pToo_1yh;M zGol%!j1sBC4at90@|VjT;=N;NDE3dp{<|uD_C)fROa69ZUr*XVZBv%7_qzjIsCbN* z>E5ujQSs-Jf2rgTmHbvocgB^$ThiSmy;f7zN4)2HPfq=3mbrMenZ1ap9KzBgg$CC^KJmR%<6ir(K1lXU%_ivs9u&i8)*w?4ubeGbGJVL8;@)xSnHyQf4Hs47@UZg~X{e$ub=${_lOCmyB0^MyI?u^XRpPD$b1S zcPCU&W}Is-1BGoF*ZZtpRo0s4(r$fzE^e*t*=~kl=|}y(HcH|lnAZ$Nh}+`IcSn3D z&HajgcRjtzTq?kLWL>ycGR&57K3T^3E?GV2}SqbieUCWe=iuFqy-!EPoF$D>%IFB+;4JxN2%XSmdbO4`(TD_8Pl;c zrjJTnK5MGdr@E?o@SM)jS>{ALnG^dZ{|d>UR;8aWOL~r^QzM;yspkjf-WfkF&!AAb z&-zSxxXS)72mL{N{ocMn%G2+yeWiZ=q<$4r{s}3c((>#R?iF;IA(Cf|ZOTZT#aJQ)ZD!hvZ(Brpq@4MYKRfEXYaU>=W4A18fU zImp2#;G3rk-zdJi zZE%F|(s3!4*7tofe||J5Gi6?R&ensDw+?mt)}hwh``V>u49V>DdS>O>^d8%t(?SZ1 zGtZw}J|J=O#p1=${QXtKrhZ{#H*bD+a$BLxd!w(nU-)5?OV1N99*iJ8Z+Lydj7@FA0^YyB+ zQ-6+nye2pQ=?`tjS1$bYqDS3n5y648m)@*-wr|v?7|XWYdHtg*S|m6WeHCBWy*N31 z$F1z-J?P8o4iU534xSsdJ!q2WSdS~+XYXvbZs?qAb(RkON7pXyMWLCgo|{fq+gQ7_ zMM*!$W~plmua!M>MSX(+|3@<`zL-1K2(kNn`n0XjVoN4E-D?!=bnlV-o9(aKWps>N z_@4cS?TNAd`vnc|T_Z6z?)}iD?ml5jZAY{@wyL#nXz3qQlfK?~`cMC1PL94uijwPK zfHwoW0V4pO$rb>sfIJ`{xB+lKV~43>1v&%1KnTD!I33sm907`e-vEAx=xSZjd3z*t}=kPKu1-vMWUa^MBvgo*A3^aefvW&nx6T3|a+0Ps7@N`UWk zS^zx&e%~1mECf~q{{fBzCBW~1r7qS7pex`9gaY${mB3cu7;qhU4AjO#(**DWh5=K6 z7~l(FGjJHV2K)-tz=G5m=m-o3f`K`}G9U*y09*zh0@d+sb_P5ESH!u#HNbNS+pOjr z_(KdFHLwT0lAwwS#r#>VKGPXJFDL zNnZ>xYmyqio(~(NsaQ|J6;6iz?fH^4brfk$EkiWN)-n7A>Fd&i6uyS_@!Z-Nn1;dE z?zEq4-Pw-Zq}O;s&qo-RX9oL zbkJO8s7XsYLiOO7#p>rAMdHK-&4KmRA-nOf5{{)cm1RMM6|SF8n!?beDc*^ixD2lm zNtyz!qz|h(|H=8pbkeC_icXngS|6Cc&K&ksB&9WlO5yu_%lY_#ZIX0Vxaz9@H9}D~ zYE(;EQ;!+9VbEgrl|26#gHCP$aMERzn)5jpMe{c|pc6;mzd|RTGQP{vS~y8;^Rzu_ zDyGs21!G}7VQrtCq)Vm9m$-sXe_ZZNdYAbAMfo1_Cx3{D)kbQv1E1kL+fCKPD)c?j zaPlnYo@vd842z_yDy-|biCc}B(N}ygR=$^KC;F29MMmsSHKk^aEMQ*a-vB@O0dO+< zT8!D>=V3+K2flH4dhT4`5HaJVI9ZKkSa&FWV=rkc$I_b0xu~Gqg@E5lPn5<}`4mq2 zPN?oenwsRa{#LC%o80YBlcpZ5S)>}VCAXdwk-iI%UID;&YTSTSd@?Mk7->6eZ6hyyI3mNKsEl%tw)$l zcqT}HA4eIeVEbGPcVV#w>$sC%T1*B`%HXENay4ogMM~d%VC>qvhTlzO6&7BRcHi#EOqSNK=xSMN+94MIJpDkA(#U~LQDxQ<3KstO6^ep3uG5@NHv@`yJlf~t6Jck(%q}~bY78g73 z1);RWX-$c7Sl@OygQ{W6C)T%B<1e)EH6KSG3vH_!@6b}w{39+p;UA2_$&`xEarZE; z#X3+GIk@WxU(!66()!pm(|Xnq>*tcCjy>rYSbE`P&D3e>q|b_zpHz{1n*7V$4?dT< zvro;Pj{Cz+YbtHi2}PvgWY&cEXLRB%MN%&sbo-AMnskD6>`v9OSp`S)Xic?eI-&G6 ztUvF5JCZa7y-8Dw8uaCQi%ciM;7IeY aPWq;gb0w``BQS}fj=Gqpe2u_k^nU?nKY9-U literal 138399 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 HK1Tl^sgkr2 diff --git a/platform_mac/mac_4ed.cpp b/platform_mac/mac_4ed.cpp deleted file mode 100644 index b2636154..00000000 --- a/platform_mac/mac_4ed.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* Mac C++ layer for 4coder */ - -#include "4coder_base_types.h" -#include "4coder_version.h" -#include "4coder_events.h" - -#include "4coder_table.h" -#include "4coder_types.h" -#include "4coder_default_colors.h" - -#include "4coder_system_types.h" -#define STATIC_LINK_API -#include "generated/system_api.h" - -#include "4ed_font_interface.h" -#define STATIC_LINK_API -#include "generated/graphics_api.h" -#define STATIC_LINK_API -#include "generated/font_api.h" - -#include "4ed_font_set.h" -#include "4ed_render_target.h" -#include "4ed_search_list.h" -#include "4ed.h" - -#include "generated/system_api.cpp" -#include "generated/graphics_api.cpp" -#include "generated/font_api.cpp" - -#include "4coder_base_types.cpp" -#include "4coder_stringf.cpp" -#include "4coder_events.cpp" -#include "4coder_hash_functions.cpp" -#include "4coder_table.cpp" -#include "4coder_log.cpp" - -#include "4ed_search_list.cpp" - -#include "mac_objective_c_to_cpp_links.h" - -#include // NOTE(yuval): Used for opendir, readdir -#include // NOTE(yuval): Used for errno -#include // NOTE(yuval): Used for open -#include // NOTE(yuval): Used for getcwd, read, write -#include // NOTE(yuval): Used for stat -#include // NOTE(yuval): Used for struct stat - -#include // NOTE(yuval): Used for free - -//////////////////////////////// - -#define SLASH '/' -#define DLL "so" - -#include "4coder_hash_functions.cpp" -#include "4coder_system_allocator.cpp" -#include "4coder_malloc_allocator.cpp" -#include "4coder_codepoint_map.cpp" - -#include "4ed_mem.cpp" -#include "4ed_font_set.cpp" - -//////////////////////////////// - -struct Mac_Vars { - Thread_Context *tctx; - - Arena* frame_arena; - - String_Const_u8 binary_path; -}; - -//////////////////////////////// - -Mac_Vars mac_vars; -global Render_Target target; - -//////////////////////////////// - -#include "mac_4ed_functions.cpp" - -//////////////////////////////// - -external String_Const_u8 -mac_SCu8(u8* str, u64 size){ - String_Const_u8 result = SCu8(str, size); - return(result); -} - -external String_Const_u8 -mac_push_string_copy(Arena *arena, String_Const_u8 src){ - String_Const_u8 result = push_string_copy(arena, src); - return(result); -} - -external void -mac_init(){ - Arena test_arena = make_arena_malloc(); - File_List list = system_get_file_list(&test_arena, - string_u8_litexpr("/Users/yuvaldolev/Desktop")); - - for (u32 index = 0; index < list.count; ++index) { - File_Info* info = list.infos[index]; - - printf("File_Info{file_name:'%.*s', " - "attributes:{size:%llu, last_write_time:%llu, flags:{IsDirectory:%d}}}\n", - (i32)info->file_name.size, info->file_name.str, - info->attributes.size, info->attributes.last_write_time, - ((info->attributes.flags & FileAttribute_IsDirectory) != 0)); - } - -#if 0 - // NOTE(yuval): Context Setup - Thread_Context _tctx = {}; - thread_ctx_init(&_tctx, ThreadKind_Main, - get_base_allocator_system(), - get_base_allocator_system()); - - block_zero_struct(&mac_vars); - mac_vars.tctx = &_tctx; - - API_VTable_system system_vtable = {}; - system_api_fill_vtable(&system_vtable); - - API_VTable_graphics graphics_vtable = {}; - graphics_api_fill_vtable(&graphics_vtable); - - API_VTable_font font_vtable = {}; - font_api_fill_vtable(&font_vtable); - - // NOTE(yuval): Memory - mac_vars.frame_arena = reserve_arena(mac_vars.tctx); - target.arena = make_arena_system(KB(256)); - - mac_vars.cursor_show = MouseCursorShow_Always; - mac_vars.prev_cursor_show = MouseCursorShow_Always; - - dll_init_sentinel(&mac_vars.free_mac_objects); - dll_init_sentinel(&mac_vars.timer_objects); -#endif -} \ No newline at end of file diff --git a/platform_mac/mac_4ed.mm b/platform_mac/mac_4ed.mm index c2519d04..de73ec52 100644 --- a/platform_mac/mac_4ed.mm +++ b/platform_mac/mac_4ed.mm @@ -1,17 +1,47 @@ /* Mac Objective C layer for 4coder */ #include "4coder_base_types.h" - -#if 1 -#include "4coder_table.h" +#include "4coder_version.h" #include "4coder_events.h" + +#include "4coder_table.h" + // NOTE(allen): This is a very unfortunate hack, but hopefully there will never be a need to use the Marker // type in the platform layer. If that changes then instead change the name of Marker and make a transition // macro that is only included in custom code. #define Marker Marker__SAVE_THIS_IDENTIFIER #include "4coder_types.h" #undef Marker -#endif + +#include "4coder_default_colors.h" + +#include "4coder_system_types.h" +#define STATIC_LINK_API +#include "generated/system_api.h" + +#include "4ed_font_interface.h" +#define STATIC_LINK_API +#include "generated/graphics_api.h" +#define STATIC_LINK_API +#include "generated/font_api.h" + +#include "4ed_font_set.h" +#include "4ed_render_target.h" +#include "4ed_search_list.h" +#include "4ed.h" + +#include "generated/system_api.cpp" +#include "generated/graphics_api.cpp" +#include "generated/font_api.cpp" + +#include "4coder_base_types.cpp" +#include "4coder_stringf.cpp" +#include "4coder_events.cpp" +#include "4coder_hash_functions.cpp" +#include "4coder_table.cpp" +#include "4coder_log.cpp" + +#include "4ed_search_list.cpp" #include "mac_objective_c_to_cpp_links.h" @@ -19,13 +49,22 @@ #undef internal #undef global #undef external -#include +#import #include // NOTE(yuval): Used for proc_pidpath -#include // NOTE(yuval): Used for pid_t -#include // NOTE(yuval): Used for getpid +#include // NOTE(yuval): Used for opendir, readdir +#include // NOTE(yuval): Used for errno +#include // NOTE(yuval): Used for open +#include // NOTE(yuval): Used for getcwd, read, write, getpid +#include // NOTE(yuval): Used for stat +#include // NOTE(yuval): Used for struct stat, pid_t +#include // NOTE(yuval): Used for free + +#define function static +#define internal static +#define global static #define external extern "C" @interface App_Delegate : NSObject @@ -52,49 +91,39 @@ } @end -#if 0 -external File_List -mac_get_file_list(Arena* arena, String_Const_u8 directory){ - File_List result = {}; - - NSString *directory_ns_string = - [[NSString alloc] - initWithBytes:directory.data length:directory.size encoding:NSUTF8StringEncoding]; - - NSFileManager *file_manager = [NSFileManager defaultManager]; - NSDirectoryEnumerator *dirEnum = [file_manager enumeratorAtPath:directory_ns_string]; - - NSString *filename; - while ((filename = [dirEnum nextObject])){ - NSLog(@"%@", filename); - } - - [directory_ns_string release]; -} -#endif +//////////////////////////////// -external String_Const_u8 -mac_standardize_path(Arena* arena, String_Const_u8 path){ - NSString *path_ns_str = - [[NSString alloc] initWithBytes:path.data length:path.size encoding:NSUTF8StringEncoding]; - - NSString *standardized_path_ns_str = [path_ns_str stringByStandardizingPath]; - String_Const_u8 standardized_path = mac_SCu8((u8*)[standardized_path_ns_str UTF8String],[standardized_path_ns_str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]); - - String_Const_u8 result = mac_push_string_copy(arena, standardized_path); - - [path_ns_str release]; - - return(result); -} +#define SLASH '/' +#define DLL "so" -external i32 -mac_get_binary_path(void *buffer, u32 size){ - pid_t pid = getpid(); - i32 bytes_read = proc_pidpath(pid, buffer, size); +#include "4coder_hash_functions.cpp" +#include "4coder_system_allocator.cpp" +#include "4coder_malloc_allocator.cpp" +#include "4coder_codepoint_map.cpp" + +#include "4ed_mem.cpp" +#include "4ed_font_set.cpp" + +//////////////////////////////// + +struct Mac_Vars { + Thread_Context *tctx; - return(bytes_read); -} + Arena* frame_arena; + + String_Const_u8 binary_path; +}; + +//////////////////////////////// + +Mac_Vars mac_vars; +global Render_Target target; + +//////////////////////////////// + +#import "mac_4ed_functions.mm" + +//////////////////////////////// int main(int arg_count, char **args){ @@ -108,7 +137,49 @@ main(int arg_count, char **args){ [NSApp finishLaunching]; - mac_init(); + Arena test_arena = make_arena_malloc(); + File_List list = system_get_file_list(&test_arena, + string_u8_litexpr("/Users/yuvaldolev/Desktop/imgui")); + + for (u32 index = 0; index < list.count; ++index) { + File_Info* info = list.infos[index]; + + printf("File_Info{file_name:'%.*s', " + "attributes:{size:%llu, last_write_time:%llu, flags:{IsDirectory:%d}}}\n", + (i32)info->file_name.size, info->file_name.str, + info->attributes.size, info->attributes.last_write_time, + ((info->attributes.flags & FileAttribute_IsDirectory) != 0)); + } + +#if 0 + // NOTE(yuval): Context Setup + Thread_Context _tctx = {}; + thread_ctx_init(&_tctx, ThreadKind_Main, + get_base_allocator_system(), + get_base_allocator_system()); + + block_zero_struct(&mac_vars); + mac_vars.tctx = &_tctx; + + API_VTable_system system_vtable = {}; + system_api_fill_vtable(&system_vtable); + + API_VTable_graphics graphics_vtable = {}; + graphics_api_fill_vtable(&graphics_vtable); + + API_VTable_font font_vtable = {}; + font_api_fill_vtable(&font_vtable); + + // NOTE(yuval): Memory + mac_vars.frame_arena = reserve_arena(mac_vars.tctx); + target.arena = make_arena_system(KB(256)); + + mac_vars.cursor_show = MouseCursorShow_Always; + mac_vars.prev_cursor_show = MouseCursorShow_Always; + + dll_init_sentinel(&mac_vars.free_mac_objects); + dll_init_sentinel(&mac_vars.timer_objects); +#endif #if 0 // NOTE(yuval): Application Core Update diff --git a/platform_mac/mac_4ed_functions.cpp b/platform_mac/mac_4ed_functions.mm similarity index 94% rename from platform_mac/mac_4ed_functions.cpp rename to platform_mac/mac_4ed_functions.mm index 2c22135e..00b4ecc4 100644 --- a/platform_mac/mac_4ed_functions.cpp +++ b/platform_mac/mac_4ed_functions.mm @@ -31,7 +31,9 @@ system_get_path_sig(){ if (!has_stashed_4ed_path){ local_const i32 binary_path_capacity = KB(32); u8 *memory = (u8*)system_memory_allocate(binary_path_capacity, string_u8_litexpr(file_name_line_number)); - i32 size = mac_get_binary_path(memory, binary_path_capacity); + + pid_t pid = getpid(); + i32 size = proc_pidpath(pid, memory, binary_path_capacity); Assert(size <= binary_path_capacity - 1); mac_vars.binary_path = SCu8(memory, size); @@ -50,7 +52,16 @@ system_get_path_sig(){ function system_get_canonical_sig(){ - String_Const_u8 result = mac_standardize_path(arena, name); + NSString *path_ns_str = + [[NSString alloc] initWithBytes:name.data length:name.size encoding:NSUTF8StringEncoding]; + + NSString *standardized_path_ns_str = [path_ns_str stringByStandardizingPath]; + String_Const_u8 standardized_path = mac_SCu8((u8*)[standardized_path_ns_str UTF8String],[standardized_path_ns_str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]); + + String_Const_u8 result = push_string_copy(arena, standardized_path); + + [path_ns_str release]; + return(result); }