public static bool ChangeYamlObjectLists(ref List <string> lines, int startLine, ref int endLine, int currentTabDepth,
                                                 BetterDict <string, List <YamlObject> > changeDict)
        {
            int targetStartingSpaces = currentTabDepth * 2;

            for (int i = startLine; i <= endLine; i++)
            {
                string line = lines[i];
                if (!IsKeyValLine(line))
                {
                    continue;
                }

                int lineStartingSpaces = CountStartingSpaces(line);
                if (lineStartingSpaces != targetStartingSpaces)
                {
                    //shouldn't ever leave the targetSection!
                    Console.WriteLine(lineStartingSpaces < targetStartingSpaces
                                                        ? "ChangeYamlObjectLists somehow left the target section!"
                                                        : "ChangeYamlObjectLists somehow entered a subsection!");

                    return(false);
                }

                int    segmentEndLine = GetSegmentEndLineIndex(ref lines, i + 1, currentTabDepth + 1);
                string lineKey        = GetKeyValKey(line);
                if (!changeDict.ContainsKey(lineKey))
                {
                    //go to next segment
                    i = segmentEndLine;
                    continue;
                }

                List <YamlObject> targetList = changeDict[lineKey];
                int initialSegmentEndLine    = segmentEndLine;
                if (!ChangeYamlObjectList(ref lines, i + 1, ref segmentEndLine, currentTabDepth + 1, targetList))
                {
                    Console.WriteLine("failed to save YamlList: " + lineKey);
                    return(false);
                }

                if (segmentEndLine != initialSegmentEndLine)
                {
                    i = segmentEndLine;
                    int delta = segmentEndLine - initialSegmentEndLine;
                    endLine += delta;
                }
                else
                {
                    i = initialSegmentEndLine;
                }
            }

            return(true);
        }
        public static bool ChangeSimpleValues(ref List <string> lines, int startLine, ref int endLine, int currentTabDepth,
                                              BetterDict <string, string> changeDict)
        {
            foreach ((string key, string value) in changeDict)
            {
                if (!ChangeSimpleValue(ref lines, startLine, ref endLine, currentTabDepth, key, value))
                {
                    Console.WriteLine("unable to find config key: " + key + " | inserting automatically, formatting might look dumb");
                    string spacing = new string(' ', currentTabDepth * 2);
                    lines.Insert(startLine, spacing + key + ": " + value);
                    endLine++;
                }
            }

            return(true);
        }