# Path: srsly/ruamel_yaml/compat.py
# class ordereddict(OrderedDict):  # type: ignore
#     if not hasattr(OrderedDict, "insert"):
# 
#         def insert(self, pos, key, value):
#             # type: (int, Any, Any) -> None
#             if pos >= len(self):
#                 self[key] = value
#                 return
#             od = ordereddict()
#             od.update(self)
#             for k in od:
#                 del self[k]
#             for index, old_key in enumerate(od):
#                 if pos == index:
#                     self[key] = value
#                 self[old_key] = od[old_key]
# 
# Path: srsly/ruamel_yaml/compat.py
# _DEFAULT_YAML_VERSION = (1, 2)
# PY2 = sys.version_info[0] == 2
# PY3 = sys.version_info[0] == 3
#     MAXSIZE = sys.maxsize
# UNICODE_SIZE = 4 if sys.maxunicode > 65535 else 2
# DBG_TOKEN = 1
# DBG_EVENT = 2
# DBG_NODE = 4
# class ordereddict(OrderedDict):  # type: ignore
#     class ObjectCounter(object):
# class Nprint(object):
# class MutableSliceableSequence(MutableSequence):  # type: ignore
#         def insert(self, pos, key, value):
#     def utf8(s):
#     def to_str(s):
#     def to_unicode(s):
#     def utf8(s):
#     def to_str(s):
#     def to_unicode(s):
# def with_metaclass(meta, *bases):
#         def __init__(self):
#         def __call__(self, k):
#         def dump(self):
# def dbg(val=None):
#     def __init__(self, file_name=None):
#     def __call__(self, *args, **kw):
#     def set_max_print(self, i):
# def check_namespace_char(ch):
# def check_anchorname_char(ch):
# def version_tnf(t1, t2=None):
#     def __getitem__(self, index):
#     def __setitem__(self, index, value):
#     def __delitem__(self, index):
#     def __getsingleitem__(self, index):
#     def __setsingleitem__(self, index, value):
#     def __delsingleitem__(self, index):
# 
# Path: srsly/ruamel_yaml/scalarstring.py
# class ScalarString(text_type):
#     __slots__ = Anchor.attrib
# 
#     def __new__(cls, *args, **kw):
#         # type: (Any, Any) -> Any
#         anchor = kw.pop("anchor", None)  # type: ignore
#         ret_val = text_type.__new__(cls, *args, **kw)  # type: ignore
#         if anchor is not None:
#             ret_val.yaml_set_anchor(anchor, always_dump=True)
#         return ret_val
# 
#     def replace(self, old, new, maxreplace=-1):
#         # type: (Any, Any, int) -> Any
#         return type(self)((text_type.replace(self, old, new, maxreplace)))
# 
#     @property
#     def anchor(self):
#         # type: () -> Any
#         if not hasattr(self, Anchor.attrib):
#             setattr(self, Anchor.attrib, Anchor())
#         return getattr(self, Anchor.attrib)
# 
#     def yaml_anchor(self, any=False):
#         # type: (bool) -> Any
#         if not hasattr(self, Anchor.attrib):
#             return None
#         if any or self.anchor.always_dump:
#             return self.anchor
#         return None
# 
#     def yaml_set_anchor(self, value, always_dump=False):
#         # type: (Any, bool) -> None
#         self.anchor.value = value
#         self.anchor.always_dump = always_dump


import sys
import copy
from .compat import ordereddict  # type: ignore
from .compat import PY2, string_types, MutableSliceableSequence
from .scalarstring import ScalarString
from .anchor import Anchor
    from collections import MutableSet, Sized, Set, Mapping
    from collections.abc import MutableSet, Sized, Set, Mapping
    from typing import Any, Dict, Optional, List, Union, Optional, Iterator  # NOQA
        from .error import CommentMark
        from .tokens import CommentToken
        from srsly.ruamel_yaml.error import CommentMark
        from srsly.ruamel_yaml.tokens import CommentToken
        from .tokens import CommentToken
        from .error import CommentMark
            if level >= len(key_list):
                if level > len(key_list):
                    raise IndexError
                return d[key_list[level - 1]]
            return get_one_level(key_list, level + 1, d[key_list[level - 1]])

        try:
            return get_one_level(key, 1, self)
        except KeyError:
            return default
        except (TypeError, IndexError):
            if not list_ok:
                raise
            return default

    def __getitem__(self, key):
        # type: (Any) -> Any
        try:
            return ordereddict.__getitem__(self, key)
        except KeyError:
            for merged in getattr(self, merge_attrib, []):
                if key in merged[1]:
                    return merged[1][key]
            raise

    def __setitem__(self, key, value):
        # type: (Any, Any) -> None
        # try to preserve the scalarstring type if setting an existing key to a new value
        if key in self:
            if (

# Path: srsly/ruamel_yaml/compat.py
# class ordereddict(OrderedDict):  # type: ignore
#     if not hasattr(OrderedDict, "insert"):
# 
#         def insert(self, pos, key, value):
#             # type: (int, Any, Any) -> None
#             if pos >= len(self):
#                 self[key] = value
#                 return
#             od = ordereddict()
#             od.update(self)
#             for k in od:
#                 del self[k]
#             for index, old_key in enumerate(od):
#                 if pos == index:
#                     self[key] = value
#                 self[old_key] = od[old_key]
# 
# Path: srsly/ruamel_yaml/compat.py
# _DEFAULT_YAML_VERSION = (1, 2)
# PY2 = sys.version_info[0] == 2
# PY3 = sys.version_info[0] == 3
#     MAXSIZE = sys.maxsize
# UNICODE_SIZE = 4 if sys.maxunicode > 65535 else 2
# DBG_TOKEN = 1
# DBG_EVENT = 2
# DBG_NODE = 4
# class ordereddict(OrderedDict):  # type: ignore
#     class ObjectCounter(object):
# class Nprint(object):
# class MutableSliceableSequence(MutableSequence):  # type: ignore
#         def insert(self, pos, key, value):
#     def utf8(s):
#     def to_str(s):
#     def to_unicode(s):
#     def utf8(s):
#     def to_str(s):
#     def to_unicode(s):
# def with_metaclass(meta, *bases):
#         def __init__(self):
#         def __call__(self, k):
#         def dump(self):
# def dbg(val=None):
#     def __init__(self, file_name=None):
#     def __call__(self, *args, **kw):
#     def set_max_print(self, i):
# def check_namespace_char(ch):
# def check_anchorname_char(ch):
# def version_tnf(t1, t2=None):
#     def __getitem__(self, index):
#     def __setitem__(self, index, value):
#     def __delitem__(self, index):
#     def __getsingleitem__(self, index):
#     def __setsingleitem__(self, index, value):
#     def __delsingleitem__(self, index):
# 
# Path: srsly/ruamel_yaml/scalarstring.py
# class ScalarString(text_type):
#     __slots__ = Anchor.attrib
# 
#     def __new__(cls, *args, **kw):
#         # type: (Any, Any) -> Any
#         anchor = kw.pop("anchor", None)  # type: ignore
#         ret_val = text_type.__new__(cls, *args, **kw)  # type: ignore
#         if anchor is not None:
#             ret_val.yaml_set_anchor(anchor, always_dump=True)
#         return ret_val
# 
#     def replace(self, old, new, maxreplace=-1):
#         # type: (Any, Any, int) -> Any
#         return type(self)((text_type.replace(self, old, new, maxreplace)))
# 
#     @property
#     def anchor(self):
#         # type: () -> Any
#         if not hasattr(self, Anchor.attrib):
#             setattr(self, Anchor.attrib, Anchor())
#         return getattr(self, Anchor.attrib)
# 
#     def yaml_anchor(self, any=False):
#         # type: (bool) -> Any
#         if not hasattr(self, Anchor.attrib):
#             return None
#         if any or self.anchor.always_dump:
#             return self.anchor
#         return None
# 
#     def yaml_set_anchor(self, value, always_dump=False):
#         # type: (Any, bool) -> None
#         self.anchor.value = value
#         self.anchor.always_dump = always_dump


# Path: srsly/ruamel_yaml/comments.py
import sys
import copy
from .compat import ordereddict  # type: ignore
from .compat import PY2, string_types, MutableSliceableSequence
from .scalarstring import ScalarString
from .anchor import Anchor
    from collections import MutableSet, Sized, Set, Mapping
    from collections.abc import MutableSet, Sized, Set, Mapping
    from typing import Any, Dict, Optional, List, Union, Optional, Iterator  # NOQA
        from .error import CommentMark
        from .tokens import CommentToken
        from srsly.ruamel_yaml.error import CommentMark
        from srsly.ruamel_yaml.tokens import CommentToken
        from .tokens import CommentToken
        from .error import CommentMark

            if level >= len(key_list):
                if level > len(key_list):
                    raise IndexError
                return d[key_list[level - 1]]
            return get_one_level(key_list, level + 1, d[key_list[level - 1]])

        try:
            return get_one_level(key, 1, self)
        except KeyError:
            return default
        except (TypeError, IndexError):
            if not list_ok:
                raise
            return default

    def __getitem__(self, key):
        # type: (Any) -> Any
        try:
            return ordereddict.__getitem__(self, key)
        except KeyError:
            for merged in getattr(self, merge_attrib, []):
                if key in merged[1]:
                    return merged[1][key]
            raise

    def __setitem__(self, key, value):
        # type: (Any, Any) -> None
        # try to preserve the scalarstring type if setting an existing key to a new value
        if key in self:
            if (

                isinstance(value, string_types)