diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 3b77fcf..7975502 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -115,7 +115,11 @@
 
 def _dict_omitting_none(**kwargs):
     """Creates a dict from the args, dropping keys with None or [] values."""
-    return {name: kwargs[name] for name in kwargs if kwargs[name] != None and kwargs[name] != []}
+    return {
+        name: kwargs[name]
+        for name in kwargs
+        if kwargs[name] != None and kwargs[name] != []
+    }
 
 def _struct_omitting_none(**kwargs):
     """Creates a struct from the args, dropping keys with None or [] values."""
@@ -124,37 +128,37 @@
 def _convert_outpath_to_symlink_path(path):
     """Converts full output paths to their tulsi-symlink equivalents.
 
-  Bazel output paths are unstable, prone to change with architecture,
-  platform or flag changes. Therefore we can't rely on them to supply to Xcode.
-  Instead, we will root all outputs under a stable tulsi dir,
-  and the bazel_build.py script will link the artifacts into the correct
-  location under it.
+    Bazel output paths are unstable, prone to change with architecture,
+    platform or flag changes. Therefore we can't rely on them to supply to Xcode.
+    Instead, we will root all outputs under a stable tulsi dir,
+    and the bazel_build.py script will link the artifacts into the correct
+    location under it.
 
-  Tulsi root is located at WORKSPACE/bazel-exec-root-link/_tulsi-includes/x/x/.
-  The two "x" directories are stubs to match the number of path components, so
-  that relative paths work with the new location. Some Bazel outputs, like
-  module maps, use relative paths to reference other files in the build.
+    Tulsi root is located at WORKSPACE/bazel-exec-root-link/_tulsi-includes/x/x/.
+    The two "x" directories are stubs to match the number of path components, so
+    that relative paths work with the new location. Some Bazel outputs, like
+    module maps, use relative paths to reference other files in the build.
 
-  The leading underscore in _tulsi-includes is present as Bazel will clear
-  all directories that don't start with '.', '_', or 'bazel-' when it builds.
-  Otherwise, upon a build failure, _tulsi-includes would be removed and
-  indexing and auto-completion for generated files would no longer work until
-  the next successful build.
+    The leading underscore in _tulsi-includes is present as Bazel will clear
+    all directories that don't start with '.', '_', or 'bazel-' when it builds.
+    Otherwise, upon a build failure, _tulsi-includes would be removed and
+    indexing and auto-completion for generated files would no longer work until
+    the next successful build.
 
-  In short, this method will transform
-    bazel-out/ios-x86_64-min7.0/genfiles/foo
-  to
-    _tulsi-includes/x/x/foo
+    In short, this method will transform
+      bazel-out/ios-x86_64-min7.0/genfiles/foo
+    to
+      _tulsi-includes/x/x/foo
 
-  This is currently enabled for everything although it will only affect
-  generated files.
+    This is currently enabled for everything although it will only affect
+    generated files.
 
-  Args:
-    path: path to transform
+    Args:
+      path: path to transform
 
-  Returns:
-    A string that is the original path modified according to the rules.
-  """
+    Returns:
+      A string that is the original path modified according to the rules.
+    """
 
     # Transform paths of the form:
     #   bazel-[whatever]/[platform-config]/symlink[/.*]
@@ -165,7 +169,7 @@
     if (len(components) > 2 and
         first_dash >= 0 and
         first_dash < len(components[0])):
-        return ("_tulsi-includes/x/x/" + "/".join(components[3:]))
+        return "_tulsi-includes/x/x/" + "/".join(components[3:])
     return path
 
 def _is_bazel_external_file(f):
@@ -177,10 +181,9 @@
     if not f:
         return None
 
-        # Special case handling for Bazel external files which have a path that starts
-        # with 'external/' but their short_path and root.path have no mention of being
-        # external.
-
+    # Special case handling for Bazel external files which have a path that starts
+    # with 'external/' but their short_path and root.path have no mention of being
+    # external.
     out_path = f.path if _is_bazel_external_file(f) else f.short_path
     if not f.is_source:
         root_path = f.root.path
@@ -188,18 +191,17 @@
         if symlink_path == root_path:
             # The root path should always be bazel-out/... and thus is expected to be
             # updated.
-            print("Unexpected root path \"%s\". Please report." % root_path)
+            print('Unexpected root path "%s". Please report.' % root_path)
             root_execution_path_fragment = root_path
         else:
             root_execution_path_fragment = symlink_path
     else:
         root_execution_path_fragment = None
 
-        # At the moment (Oct. 2016), Bazel disallows most files without extensions.
-        # As a temporary hack, Tulsi treats File instances pointing at extension-less
-        # paths as directories. This is extremely fragile and must be replaced with
-        # logic properly homed in Bazel.
-
+    # At the moment (Oct. 2016), Bazel disallows most files without extensions.
+    # As a temporary hack, Tulsi treats File instances pointing at extension-less
+    # paths as directories. This is extremely fragile and must be replaced with
+    # logic properly homed in Bazel.
     is_dir = (f.basename.find(".") == -1)
 
     return _struct_omitting_none(
@@ -228,7 +230,11 @@
 
 def _collect_artifacts(obj, attr_path):
     """Returns a list of Artifact objects for the attr_path in obj."""
-    return [f for src in _getattr_as_list(obj, attr_path) for f in _get_opt_attr(src, "files")]
+    return [
+        f
+        for src in _getattr_as_list(obj, attr_path)
+        for f in _get_opt_attr(src, "files")
+    ]
 
 def _collect_files(obj, attr_path, convert_to_metadata = True):
     """Returns a list of artifact_location's for the attr_path in obj."""
@@ -331,32 +337,40 @@
 def _collect_dependencies(rule_attr, attr_name):
     """Collects Bazel targets for a dependency attr.
 
-  Args:
-    rule_attr: The Bazel rule.attr whose dependencies should be collected.
-    attr_name: attribute name to inspect for dependencies.
+    Args:
+      rule_attr: The Bazel rule.attr whose dependencies should be collected.
+      attr_name: attribute name to inspect for dependencies.
 
-  Returns:
-    A list of the Bazel target dependencies of the given rule.
-  """
-    return [dep for dep in _getattr_as_list(rule_attr, attr_name) if hasattr(dep, "tulsi_info_files")]
+    Returns:
+      A list of the Bazel target dependencies of the given rule.
+    """
+    return [
+        dep
+        for dep in _getattr_as_list(rule_attr, attr_name)
+        if hasattr(dep, "tulsi_info_files")
+    ]
 
 def _collect_dependency_labels(rule, filter, attr_list):
     """Collects Bazel labels for a list of dependency attributes.
 
-  Args:
-    rule: The Bazel rule whose dependencies should be collected.
-    filter: Filter to apply when gathering dependencies.
-    attr_list: List of attribute names potentially containing Bazel labels for
-        dependencies of the given rule.
+    Args:
+      rule: The Bazel rule whose dependencies should be collected.
+      filter: Filter to apply when gathering dependencies.
+      attr_list: List of attribute names potentially containing Bazel labels for
+          dependencies of the given rule.
 
-  Returns:
-    A list of the Bazel labels of dependencies of the given rule.
-  """
+    Returns:
+      A list of the Bazel labels of dependencies of the given rule.
+    """
     attr = rule.attr
-    deps = [dep for attribute in attr_list for dep in _filter_deps(
-        filter,
-        _collect_dependencies(attr, attribute),
-    )]
+    deps = [
+        dep
+        for attribute in attr_list
+        for dep in _filter_deps(
+            filter,
+            _collect_dependencies(attr, attribute),
+        )
+    ]
     return [dep.label for dep in deps if hasattr(dep, "label")]
 
 def _get_opt_attr(obj, attr_path):
@@ -376,18 +390,18 @@
 def _getattr_as_list(obj, attr_path):
     """Returns the value at attr_path as a list.
 
-  This handles normalization of attributes containing a single value for use in
-  methods expecting a list of values.
+    This handles normalization of attributes containing a single value for use in
+    methods expecting a list of values.
 
-  Args:
-    obj: The struct whose attributes should be parsed.
-    attr_path: Dotted path of attributes whose value should be returned in
-        list form.
+    Args:
+      obj: The struct whose attributes should be parsed.
+      attr_path: Dotted path of attributes whose value should be returned in
+          list form.
 
-  Returns:
-    A list of values for obj at attr_path or [] if the struct has
-    no such attribute.
-  """
+    Returns:
+      A list of values for obj at attr_path or [] if the struct has
+      no such attribute.
+    """
     val = _get_opt_attr(obj, attr_path)
     if not val:
         return []
@@ -482,7 +496,7 @@
     if not min_os:
         return None
 
-        # Convert the DottedVersion to a string suitable for inclusion in a struct.
+    # Convert the DottedVersion to a string suitable for inclusion in a struct.
     return str(min_os)
 
 def _collect_swift_modules(target):
@@ -502,8 +516,7 @@
             maps += module_maps
     return maps
 
-    # TODO(b/64490743): Add these files to the Xcode project.
-
+# TODO(b/64490743): Add these files to the Xcode project.
 def _collect_swift_header(target):
     """Returns a depset of Swift generated headers found on the given target."""
     headers = depset()
@@ -547,7 +560,11 @@
     artifacts = _get_opt_attr(target, "files")
     if artifacts:
         # Ignore any generated Xcode projects as they are not useful to Tulsi.
-        artifacts = [_file_metadata(f) for f in artifacts if not f.short_path.endswith("project.pbxproj")]
+        artifacts = [
+            _file_metadata(f)
+            for f in artifacts
+            if not f.short_path.endswith("project.pbxproj")
+        ]
     else:
         # artifacts may be an empty set type, in which case it must be explicitly
         # set to None to allow Skylark's serialization to work.
@@ -564,12 +581,18 @@
         generated_non_arc_files = _extract_generated_sources(target)
 
     swift_transitive_modules = depset(
-        [_file_metadata(f) for f in _collect_swift_modules(target)],
+        [
+            _file_metadata(f)
+            for f in _collect_swift_modules(target)
+        ],
     )
 
     # Collect ObjC module maps dependencies for Swift targets.
     objc_module_maps = depset(
-        [_file_metadata(f) for f in _collect_module_maps(target)],
+        [
+            _file_metadata(f)
+            for f in _collect_module_maps(target)
+        ],
     )
 
     # Collect the dependencies of this rule, dropping any .jar files (which may be
@@ -618,12 +641,12 @@
     if binary_attributes:
         inheritable_attributes = binary_attributes + inheritable_attributes
 
-        # Collect extensions for bundled targets.
+    # Collect extensions for bundled targets.
     extensions = []
     if AppleBundleInfo in target:
         extensions = [str(t.label) for t in _getattr_as_list(rule_attr, "extensions")]
 
-        # Tulsi considers WatchOS apps and extensions as an "extension"
+    # Tulsi considers WatchOS apps and extensions as an "extension"
     if target_kind == "watchos_application":
         watch_ext = _get_label_attr(rule_attr, "extension.label")
         extensions.append(watch_ext)
@@ -632,7 +655,7 @@
         if watch_app:
             extensions.append(watch_app)
 
-            # Collect bundle related information.
+    # Collect bundle related information.
     if AppleBundleInfo in target:
         apple_bundle_provider = target[AppleBundleInfo]
 
@@ -651,7 +674,7 @@
         product_type = None
         infoplist = None
 
-        # Collect Swift related attributes.
+    # Collect Swift related attributes.
     if SwiftInfo in target:
         attributes["has_swift_info"] = True
         transitive_attributes["swift_language_version"] = target[SwiftInfo].swift_version
@@ -663,7 +686,10 @@
     target_includes = []
     target_defines = []
     if objc_provider:
-        target_includes = [_convert_outpath_to_symlink_path(x) for x in objc_provider.include]
+        target_includes = [
+            _convert_outpath_to_symlink_path(x)
+            for x in objc_provider.include
+        ]
         target_defines = objc_provider.define.to_list()
 
     platform_type, os_deployment_target = _get_deployment_info(target, ctx)
@@ -751,38 +777,37 @@
 
     return None
 
-    # Due to b/71744111 we have to manually re-create tag filtering for test_suite
-    # rules.
-
+# Due to b/71744111 we have to manually re-create tag filtering for test_suite
+# rules.
 def _tags_conform_to_filter(tags, filter):
     """Mirrors Bazel tag filtering for test_suites.
 
-  This makes sure that the target has all of the required tags and none of
-  the excluded tags before we include them within a test_suite.
+    This makes sure that the target has all of the required tags and none of
+    the excluded tags before we include them within a test_suite.
 
-  For more information on filtering inside Bazel, see
-  com.google.devtools.build.lib.packages.TestTargetUtils.java.
+    For more information on filtering inside Bazel, see
+    com.google.devtools.build.lib.packages.TestTargetUtils.java.
 
-  Args:
-    tags: all of the tags for the test target
-    filter: a struct containing excluded_tags and required_tags
+    Args:
+      tags: all of the tags for the test target
+      filter: a struct containing excluded_tags and required_tags
 
-  Returns:
-    True if this target passes the filter and False otherwise.
+    Returns:
+      True if this target passes the filter and False otherwise.
 
-  """
+    """
 
     # None of the excluded tags can be present.
     for exclude in filter.excluded_tags:
         if exclude in tags:
             return False
 
-            # All of the required tags must be present.
+    # All of the required tags must be present.
     for required in filter.required_tags:
         if required not in tags:
             return False
 
-            # All filters have been satisfied.
+    # All filters have been satisfied.
     return True
 
 def _filter_for_rule(rule):
@@ -846,7 +871,7 @@
             if hasattr(dep, "tulsi_generated_files"):
                 tulsi_generated_files += dep.tulsi_generated_files
 
-                # Retrieve the bundle info for embeddable attributes.
+            # Retrieve the bundle info for embeddable attributes.
             if attr_name not in _TULSI_NON_EMBEDDEDABLE_ATTRS:
                 dep_bundle_info = _collect_bundle_info(dep)
                 if dep_bundle_info:
@@ -874,12 +899,16 @@
 
         # Both the dSYM binary and executable binary don't have an extension, so
         # pick the first extension-less file not in a DWARF folder.
-        artifacts = [x.path for x in target.files.to_list() if x.extension == "" and
-                                                               "Contents/Resources/DWARF" not in x.path]
+        artifacts = [
+            x.path
+            for x in target.files.to_list()
+            if x.extension == "" and
+               "Contents/Resources/DWARF" not in x.path
+        ]
         if len(artifacts) > 0:
             artifact = artifacts[0]
 
-            # Collect generated files for bazel_build.py to copy under Tulsi root.
+    # Collect generated files for bazel_build.py to copy under Tulsi root.
     all_files = depset()
     if target_kind in _SOURCE_GENERATING_RULES + _NON_ARC_SOURCE_GENERATING_RULES:
         objc_provider = _get_opt_attr(target, "objc")
@@ -894,7 +923,11 @@
                   _collect_artifacts(rule, "attr.hdrs") +
                   _collect_artifacts(rule, "attr.textual_hdrs"))
     all_files += _collect_supporting_files(rule_attr, convert_to_metadata = False)
-    source_files = [x for x in target.files.to_list() if x.extension.lower() in _GENERATED_SOURCE_FILE_EXTENSIONS]
+    source_files = [
+        x
+        for x in target.files.to_list()
+        if x.extension.lower() in _GENERATED_SOURCE_FILE_EXTENSIONS
+    ]
     if infoplist:
         source_files.append(infoplist)
     all_files = depset(source_files, transitive = [all_files])
diff --git a/src/XcodeConfig/TulsiVersion.xcconfig b/src/XcodeConfig/TulsiVersion.xcconfig
index d7c6030..b1ee927 100644
--- a/src/XcodeConfig/TulsiVersion.xcconfig
+++ b/src/XcodeConfig/TulsiVersion.xcconfig
@@ -8,8 +8,8 @@
 // Version number (recorded into the Info.plist)
 TULSI_VERSION_MAJOR = 0
 TULSI_VERSION_MINOR = $(GOOGLE_VERSION_BUILDNUMBER)
-TULSI_VERSION_FIXLEVEL = 196886577
-TULSI_VERSION_BUILDNUMBER = 20180516
+TULSI_VERSION_FIXLEVEL = 197741029
+TULSI_VERSION_BUILDNUMBER = 20180523
 
 TULSI_VERSION_COPYRIGHT = 2015-2018
 
diff --git a/version.bzl b/version.bzl
index 0dde607..4c2286a 100644
--- a/version.bzl
+++ b/version.bzl
@@ -4,9 +4,9 @@
 # Version number (recorded into the Info.plist)
 TULSI_VERSION_MAJOR = "0"
 
-TULSI_VERSION_FIXLEVEL = "196886577"
+TULSI_VERSION_FIXLEVEL = "197741029"
 
-TULSI_VERSION_DATE = "20180516"
+TULSI_VERSION_DATE = "20180523"
 
 TULSI_VERSION_COPYRIGHT = "2015-2018"
 
