webbee 0.7.7__tar.gz → 0.7.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. {webbee-0.7.7 → webbee-0.7.8}/CHANGELOG.md +6 -0
  2. {webbee-0.7.7 → webbee-0.7.8}/PKG-INFO +1 -1
  3. {webbee-0.7.7 → webbee-0.7.8}/pyproject.toml +1 -1
  4. webbee-0.7.8/src/webbee/__init__.py +1 -0
  5. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/autoupdate.py +19 -9
  6. {webbee-0.7.7 → webbee-0.7.8}/tests/test_autoupdate.py +18 -0
  7. webbee-0.7.7/src/webbee/__init__.py +0 -1
  8. {webbee-0.7.7 → webbee-0.7.8}/.github/workflows/publish.yml +0 -0
  9. {webbee-0.7.7 → webbee-0.7.8}/.gitignore +0 -0
  10. {webbee-0.7.7 → webbee-0.7.8}/LICENSE +0 -0
  11. {webbee-0.7.7 → webbee-0.7.8}/README.md +0 -0
  12. {webbee-0.7.7 → webbee-0.7.8}/install.sh +0 -0
  13. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/__main__.py +0 -0
  14. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/_launch.py +0 -0
  15. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/account.py +0 -0
  16. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/active_sessions.py +0 -0
  17. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/banner_art.py +0 -0
  18. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/boot.py +0 -0
  19. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/browser.py +0 -0
  20. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/checkpoints.py +0 -0
  21. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/cli.py +0 -0
  22. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/clipboard.py +0 -0
  23. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/clipboard_read.py +0 -0
  24. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/clipboard_session.py +0 -0
  25. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/coding_context.py +0 -0
  26. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/commands.py +0 -0
  27. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/config.py +0 -0
  28. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/consent.py +0 -0
  29. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/details.py +0 -0
  30. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/events.py +0 -0
  31. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/frames.py +0 -0
  32. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/home.py +0 -0
  33. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/home_view.py +0 -0
  34. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/http.py +0 -0
  35. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/instance_lock.py +0 -0
  36. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/__init__.py +0 -0
  37. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/graph.py +0 -0
  38. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/outline.py +0 -0
  39. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/query.py +0 -0
  40. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/service.py +0 -0
  41. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/store.py +0 -0
  42. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/tree.py +0 -0
  43. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/vectors.py +0 -0
  44. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/intel/watch.py +0 -0
  45. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/media.py +0 -0
  46. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/modals.py +0 -0
  47. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/mode_store.py +0 -0
  48. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/native_files.py +0 -0
  49. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/native_read.py +0 -0
  50. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/newtab_mode.py +0 -0
  51. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/output_pane.py +0 -0
  52. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/pricing_constants.py +0 -0
  53. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/queue_panel.py +0 -0
  54. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/reflow.py +0 -0
  55. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/remote.py +0 -0
  56. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/render.py +0 -0
  57. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/repl.py +0 -0
  58. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/repo.py +0 -0
  59. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/selection.py +0 -0
  60. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/session.py +0 -0
  61. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/sessions.py +0 -0
  62. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/sizing.py +0 -0
  63. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/slots.py +0 -0
  64. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/steer.py +0 -0
  65. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/stream.py +0 -0
  66. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/tab_store.py +0 -0
  67. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/tabs.py +0 -0
  68. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/thread.py +0 -0
  69. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/tier_store.py +0 -0
  70. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/todo_panel.py +0 -0
  71. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/tokens.py +0 -0
  72. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/tools.py +0 -0
  73. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/tui.py +0 -0
  74. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/update.py +0 -0
  75. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/urlopen.py +0 -0
  76. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/wallet.py +0 -0
  77. {webbee-0.7.7 → webbee-0.7.8}/src/webbee/worktrees.py +0 -0
  78. {webbee-0.7.7 → webbee-0.7.8}/tests/__init__.py +0 -0
  79. {webbee-0.7.7 → webbee-0.7.8}/tests/conftest.py +0 -0
  80. {webbee-0.7.7 → webbee-0.7.8}/tests/test_account.py +0 -0
  81. {webbee-0.7.7 → webbee-0.7.8}/tests/test_active_sessions.py +0 -0
  82. {webbee-0.7.7 → webbee-0.7.8}/tests/test_audit_2026_07_25_findings.py +0 -0
  83. {webbee-0.7.7 → webbee-0.7.8}/tests/test_checkpoints.py +0 -0
  84. {webbee-0.7.7 → webbee-0.7.8}/tests/test_checkpoints_nested_1030.py +0 -0
  85. {webbee-0.7.7 → webbee-0.7.8}/tests/test_cli.py +0 -0
  86. {webbee-0.7.7 → webbee-0.7.8}/tests/test_clipboard.py +0 -0
  87. {webbee-0.7.7 → webbee-0.7.8}/tests/test_clipboard_read.py +0 -0
  88. {webbee-0.7.7 → webbee-0.7.8}/tests/test_code_map_fresh.py +0 -0
  89. {webbee-0.7.7 → webbee-0.7.8}/tests/test_coding_context.py +0 -0
  90. {webbee-0.7.7 → webbee-0.7.8}/tests/test_commands.py +0 -0
  91. {webbee-0.7.7 → webbee-0.7.8}/tests/test_config.py +0 -0
  92. {webbee-0.7.7 → webbee-0.7.8}/tests/test_cpc_contract_stable.py +0 -0
  93. {webbee-0.7.7 → webbee-0.7.8}/tests/test_cpc_outline.py +0 -0
  94. {webbee-0.7.7 → webbee-0.7.8}/tests/test_cross_loop_token.py +0 -0
  95. {webbee-0.7.7 → webbee-0.7.8}/tests/test_details.py +0 -0
  96. {webbee-0.7.7 → webbee-0.7.8}/tests/test_events.py +0 -0
  97. {webbee-0.7.7 → webbee-0.7.8}/tests/test_freeze_fix.py +0 -0
  98. {webbee-0.7.7 → webbee-0.7.8}/tests/test_home.py +0 -0
  99. {webbee-0.7.7 → webbee-0.7.8}/tests/test_home_view.py +0 -0
  100. {webbee-0.7.7 → webbee-0.7.8}/tests/test_home_view_mouse.py +0 -0
  101. {webbee-0.7.7 → webbee-0.7.8}/tests/test_inspect_page.py +0 -0
  102. {webbee-0.7.7 → webbee-0.7.8}/tests/test_instance_lock.py +0 -0
  103. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_any_folder.py +0 -0
  104. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_cache_and_sync_worker.py +0 -0
  105. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_checksum_tree.py +0 -0
  106. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_chunker.py +0 -0
  107. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_embed.py +0 -0
  108. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_folder_1106.py +0 -0
  109. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_graph.py +0 -0
  110. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_no_numpy.py +0 -0
  111. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_query.py +0 -0
  112. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_service.py +0 -0
  113. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_store.py +0 -0
  114. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_vectors.py +0 -0
  115. {webbee-0.7.7 → webbee-0.7.8}/tests/test_intel_watch.py +0 -0
  116. {webbee-0.7.7 → webbee-0.7.8}/tests/test_launch.py +0 -0
  117. {webbee-0.7.7 → webbee-0.7.8}/tests/test_marathon.py +0 -0
  118. {webbee-0.7.7 → webbee-0.7.8}/tests/test_modals_e2e.py +0 -0
  119. {webbee-0.7.7 → webbee-0.7.8}/tests/test_mode_and_remote_0_6_8.py +0 -0
  120. {webbee-0.7.7 → webbee-0.7.8}/tests/test_mode_store.py +0 -0
  121. {webbee-0.7.7 → webbee-0.7.8}/tests/test_native_files.py +0 -0
  122. {webbee-0.7.7 → webbee-0.7.8}/tests/test_newtab_mode.py +0 -0
  123. {webbee-0.7.7 → webbee-0.7.8}/tests/test_packaging.py +0 -0
  124. {webbee-0.7.7 → webbee-0.7.8}/tests/test_probe_cost.py +0 -0
  125. {webbee-0.7.7 → webbee-0.7.8}/tests/test_queue_manage_0337.py +0 -0
  126. {webbee-0.7.7 → webbee-0.7.8}/tests/test_reflow.py +0 -0
  127. {webbee-0.7.7 → webbee-0.7.8}/tests/test_remote_code_reads.py +0 -0
  128. {webbee-0.7.7 → webbee-0.7.8}/tests/test_render.py +0 -0
  129. {webbee-0.7.7 → webbee-0.7.8}/tests/test_repl.py +0 -0
  130. {webbee-0.7.7 → webbee-0.7.8}/tests/test_repo.py +0 -0
  131. {webbee-0.7.7 → webbee-0.7.8}/tests/test_resilient_http.py +0 -0
  132. {webbee-0.7.7 → webbee-0.7.8}/tests/test_review_fixes_1030.py +0 -0
  133. {webbee-0.7.7 → webbee-0.7.8}/tests/test_session.py +0 -0
  134. {webbee-0.7.7 → webbee-0.7.8}/tests/test_session_review_1030.py +0 -0
  135. {webbee-0.7.7 → webbee-0.7.8}/tests/test_sessions.py +0 -0
  136. {webbee-0.7.7 → webbee-0.7.8}/tests/test_sizing.py +0 -0
  137. {webbee-0.7.7 → webbee-0.7.8}/tests/test_slots.py +0 -0
  138. {webbee-0.7.7 → webbee-0.7.8}/tests/test_steer.py +0 -0
  139. {webbee-0.7.7 → webbee-0.7.8}/tests/test_stream.py +0 -0
  140. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tab_bar_stability.py +0 -0
  141. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tab_restore_0337.py +0 -0
  142. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tabs.py +0 -0
  143. {webbee-0.7.7 → webbee-0.7.8}/tests/test_terminal_ux_0336.py +0 -0
  144. {webbee-0.7.7 → webbee-0.7.8}/tests/test_thread.py +0 -0
  145. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tier_invalidation.py +0 -0
  146. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tier_store.py +0 -0
  147. {webbee-0.7.7 → webbee-0.7.8}/tests/test_todo_panel.py +0 -0
  148. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tokens.py +0 -0
  149. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tools.py +0 -0
  150. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tools_eol_cancel_1030.py +0 -0
  151. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tools_vision_websearch.py +0 -0
  152. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tui.py +0 -0
  153. {webbee-0.7.7 → webbee-0.7.8}/tests/test_tui_hardening.py +0 -0
  154. {webbee-0.7.7 → webbee-0.7.8}/tests/test_update.py +0 -0
  155. {webbee-0.7.7 → webbee-0.7.8}/tests/test_update_badge_0340.py +0 -0
  156. {webbee-0.7.7 → webbee-0.7.8}/tests/test_urlopen.py +0 -0
  157. {webbee-0.7.7 → webbee-0.7.8}/tests/test_version.py +0 -0
  158. {webbee-0.7.7 → webbee-0.7.8}/tests/test_version_badge_corner.py +0 -0
  159. {webbee-0.7.7 → webbee-0.7.8}/tests/test_wallet.py +0 -0
  160. {webbee-0.7.7 → webbee-0.7.8}/tests/test_worktrees.py +0 -0
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.8
4
+
5
+ * The webbee beside the shell's imperal-mcp (its code tools) follows webbee's releases. Live: webbee 0.7.7 was out,
6
+ imperal-mcp had no new release, and its environment kept webbee 0.7.6 because only imperal-mcp's version was
7
+ compared.
8
+
3
9
  ## 0.7.7
4
10
 
5
11
  * `pipx reinstall webbee` brings the newest release for real (live check of 0.7.6: it still gave 0.7.5).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: webbee
3
- Version: 0.7.7
3
+ Version: 0.7.8
4
4
  Summary: Webbee 🐝 — the Imperal Cloud coding agent in your terminal
5
5
  Project-URL: Homepage, https://imperal.io
6
6
  Project-URL: Documentation, https://docs.imperal.io
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "webbee"
3
- version = "0.7.7"
3
+ version = "0.7.8"
4
4
  description = "Webbee 🐝 — the Imperal Cloud coding agent in your terminal"
5
5
  readme = "README.md"
6
6
  license = "GPL-3.0-or-later"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -243,16 +243,17 @@ def mcp_installed(which=safe_which, run=subprocess.run) -> dict:
243
243
  real = os.path.realpath(exe)
244
244
  py = os.path.join(os.path.dirname(real), "python.exe" if _WINDOWS else "python")
245
245
  out = {"tool": tool_of(real), "python": py, "prefix": os.path.dirname(os.path.dirname(real)), "version": "",
246
- "code": False}
246
+ "code": False, "webbee": ""}
247
247
  # asked twice when it says "no code extra": a reinstall is never made on one odd answer (live 2026-10-25: right after
248
248
  # another install the first answer said no webbee, the next ones yes)
249
249
  for _ in range(2):
250
250
  try:
251
251
  got = run([py, "-c", _NO_CWD + "import importlib.metadata as m, importlib.util as u; "
252
- "print(m.version('imperal-mcp'), u.find_spec('webbee') is not None)"],
252
+ "w = u.find_spec('webbee') is not None; "
253
+ "print(m.version('imperal-mcp'), w, m.version('webbee') if w else '')"],
253
254
  capture_output=True, text=True, timeout=20)
254
- version, code = (str(got.stdout or "").split() + ["", ""])[:2]
255
- out.update(version=version, code=code == "True")
255
+ version, code, webbee = (str(got.stdout or "").split() + ["", "", ""])[:3]
256
+ out.update(version=version, code=code == "True", webbee=webbee)
256
257
  except Exception:
257
258
  pass
258
259
  if out["code"] or not out["version"]:
@@ -260,14 +261,19 @@ def mcp_installed(which=safe_which, run=subprocess.run) -> dict:
260
261
  return out
261
262
 
262
263
 
263
- def mcp_command(inst: dict, newest, uv, pipx, wheel=None, source: str = "pypi"):
264
+ def mcp_command(inst: dict, newest, uv, pipx, wheel=None, source: str = "pypi", webbee_newest=None):
264
265
  """The one command that makes the shell's imperal-mcp the newest with its code extra -- by the tool that installed
265
266
  it (uv, else pipx, for a new install) -- or None when it already is, or nothing can do it. ``source`` "git": from
266
267
  the stable branches, imperal-sdk and webbee beside it, and an install recorded by a version is moved onto the
267
- branch even when its version is the newest (what ``pipx reinstall`` / ``uv tool upgrade`` would put back)."""
268
+ branch even when its version is the newest (what ``pipx reinstall`` / ``uv tool upgrade`` would put back). The
269
+ webbee beside it (its code tools) follows webbee's own releases: one newer than it holds upgrades the environment
270
+ too (live 2026-11-06: webbee 0.7.7 out, imperal-mcp unchanged, its environment kept webbee 0.7.6)."""
268
271
  git = source == "git"
269
272
  recorded = bool(inst) and on_stable(inst.get("tool") or "", inst.get("prefix") or "", MCP_ENV_SPECS)
270
- if inst and inst.get("version") and inst.get("version") == newest and inst.get("code") and (recorded or not git):
273
+ behind = git and bool(inst) and bool(inst.get("webbee")) and bool(webbee_newest) \
274
+ and _ver(inst.get("webbee")) < _ver(webbee_newest)
275
+ if inst and inst.get("version") and inst.get("version") == newest and inst.get("code") and (recorded or not git) \
276
+ and not behind:
271
277
  return None
272
278
  if inst and not inst.get("version"):
273
279
  return None # it did not answer: a working install is never replaced blind
@@ -512,9 +518,13 @@ def upgrade_before_start(argv, current: str, say=print, fetch=latest, which=safe
512
518
  say(f"🐝 webbee could not update itself -- run: {_show(cmd)}")
513
519
  mcp_newest, mcp_source = _newest(MCP, git, fetch, stable)
514
520
  inst = mcp_installed(which, run)
515
- cmd = mcp_command(inst, mcp_newest, uv, pipx, wheel, source=mcp_source)
521
+ cmd = mcp_command(inst, mcp_newest, uv, pipx, wheel, source=mcp_source,
522
+ webbee_newest=newest if source == "git" else None)
516
523
  if cmd:
517
- what = (f"imperal-mcp {inst.get('version') or '?'} -> {mcp_newest or 'source'}" if inst
524
+ what = (f"imperal-mcp {inst.get('version') or '?'} -> {mcp_newest or 'source'}"
525
+ + (f", webbee beside it {inst.get('webbee')} -> {newest}"
526
+ if source == "git" and inst.get("webbee") and _ver(inst.get("webbee")) < _ver(newest) else "")
527
+ if inst
518
528
  else f"imperal-mcp {mcp_newest or 'from source'}") + (" (git, stable)" if mcp_source == "git" else "")
519
529
  say(f"🐝 updating {what} ...")
520
530
  if _run(cmd, run):
@@ -469,3 +469,21 @@ def test_a_git_release_that_does_not_import_is_put_back_by_its_own_tag(tmp_path,
469
469
  stable=lambda d, git: "0.7.5", prefix=venv)
470
470
  assert ["/bin/pipx", "install", "--force", au.git_spec("webbee", "v0.7.4")] in run.calls
471
471
  assert any("put 0.7.4 back" in s for s in said)
472
+
473
+
474
+ def test_the_webbee_beside_imperal_mcp_follows_webbee_s_releases(tmp_path):
475
+ uv = tmp_path / "uv" / "tools" / "imperal-mcp"
476
+ uv.mkdir(parents=True)
477
+ (uv / "uv-receipt.toml").write_text("".join(
478
+ f'{{ name = "x", git = "{u}?rev=stable" }}\n' for u in au.REPOS.values()))
479
+ inst = {"tool": "uv", "python": str(uv / "bin" / "python"), "prefix": str(uv), "version": "0.9.5", "code": True,
480
+ "webbee": "0.7.6"}
481
+ assert au.mcp_command(inst, "0.9.5", "/bin/uv", None, source="git", webbee_newest="0.7.6") is None
482
+ assert au.mcp_command(inst, "0.9.5", "/bin/uv", None, source="git", webbee_newest="0.7.7") == [
483
+ "/bin/uv", "tool", "install", "--force", "--refresh", "--with", SDK_G, "--with", WB, MCP_G]
484
+ run = _Run(stdout="0.9.5 True 0.7.6")
485
+ exe = uv / "bin" / "imperal-mcp"
486
+ exe.parent.mkdir()
487
+ exe.write_text("")
488
+ got = au.mcp_installed(which=lambda n: str(exe), run=run)
489
+ assert got["webbee"] == "0.7.6" and got["code"] is True
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes