Detailed changes
@@ -42,6 +42,10 @@ type DiffView struct {
err error
unified udiff.UnifiedDiff
edits []udiff.Edit
+
+ splitHunks []splitHunk
+ beforeCodeWidth int
+ afterCodeWidth int
}
// New creates a new DiffView with default settings.
@@ -124,7 +128,20 @@ func (dv *DiffView) String() string {
if err := dv.computeDiff(); err != nil {
return err.Error()
}
- dv.detectWidth()
+
+ switch dv.layout {
+ case layoutUnified:
+ return dv.renderUnified()
+ case layoutSplit:
+ return dv.renderSplit()
+ default:
+ panic("unknown diffview layout")
+ }
+}
+
+// renderUnified renders the unified diff view as a string.
+func (dv *DiffView) renderUnified() string {
+ dv.detectUnifiedWidth()
codeWidth := dv.width - leadingSymbolsSize
beforeNumDigits, afterNumDigits := dv.lineNumberDigits()
@@ -178,6 +195,88 @@ func (dv *DiffView) String() string {
return b.String()
}
+// renderSplit renders the split (side-by-side) diff view as a string.
+func (dv *DiffView) renderSplit() string {
+ dv.convertDiffToSplit()
+ dv.detectSplitWidth()
+
+ beforeNumDigits, afterNumDigits := dv.lineNumberDigits()
+
+ var b strings.Builder
+
+ for i, h := range dv.splitHunks {
+ if dv.lineNumbers {
+ b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("ā¦", beforeNumDigits)))
+ }
+ b.WriteString(dv.style.DividerLine.Code.Width(dv.beforeCodeWidth + leadingSymbolsSize).Render(dv.hunkLineFor(dv.unified.Hunks[i])))
+ if dv.lineNumbers {
+ b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("ā¦", afterNumDigits)))
+ }
+ b.WriteString(dv.style.DividerLine.Code.Width(dv.afterCodeWidth + leadingSymbolsSize).Render(" "))
+ b.WriteRune('\n')
+
+ beforeLine := h.fromLine
+ afterLine := h.toLine
+
+ for _, l := range h.lines {
+ var beforeContent string
+ var afterContent string
+ if l.before != nil {
+ beforeContent = strings.TrimSuffix(l.before.Content, "\n")
+ }
+ if l.after != nil {
+ afterContent = strings.TrimSuffix(l.after.Content, "\n")
+ }
+
+ switch {
+ case l.before == nil:
+ if dv.lineNumbers {
+ b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", beforeNumDigits)))
+ }
+ b.WriteString(dv.style.MissingLine.Code.Width(dv.beforeCodeWidth + leadingSymbolsSize).Render(" "))
+ case l.before.Kind == udiff.Equal:
+ if dv.lineNumbers {
+ b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, beforeNumDigits)))
+ }
+ b.WriteString(dv.style.EqualLine.Code.Width(dv.beforeCodeWidth + leadingSymbolsSize).Render(" " + beforeContent))
+ beforeLine++
+ case l.before.Kind == udiff.Delete:
+ if dv.lineNumbers {
+ b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, beforeNumDigits)))
+ }
+ b.WriteString(dv.style.DeleteLine.Symbol.Render("- "))
+ b.WriteString(dv.style.DeleteLine.Code.Width(dv.beforeCodeWidth).Render(beforeContent))
+ beforeLine++
+ }
+
+ switch {
+ case l.after == nil:
+ if dv.lineNumbers {
+ b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", afterNumDigits)))
+ }
+ b.WriteString(dv.style.MissingLine.Code.Width(dv.afterCodeWidth + leadingSymbolsSize).Render(" "))
+ case l.after.Kind == udiff.Equal:
+ if dv.lineNumbers {
+ b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, afterNumDigits)))
+ }
+ b.WriteString(dv.style.EqualLine.Code.Width(dv.afterCodeWidth + leadingSymbolsSize).Render(" " + afterContent))
+ afterLine++
+ case l.after.Kind == udiff.Insert:
+ if dv.lineNumbers {
+ b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, afterNumDigits)))
+ }
+ b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
+ b.WriteString(dv.style.InsertLine.Code.Width(dv.afterCodeWidth).Render(afterContent))
+ afterLine++
+ }
+
+ b.WriteRune('\n')
+ }
+ }
+
+ return b.String()
+}
+
func (dv *DiffView) computeDiff() error {
if dv.isComputed {
return dv.err
@@ -236,7 +335,7 @@ func (dv *DiffView) hunkShownLines(h *udiff.Hunk) (before, after int) {
return
}
-func (dv *DiffView) detectWidth() {
+func (dv *DiffView) detectUnifiedWidth() {
if dv.width > 0 {
return
}
@@ -251,3 +350,36 @@ func (dv *DiffView) detectWidth() {
}
}
}
+
+func (dv *DiffView) convertDiffToSplit() {
+ dv.splitHunks = make([]splitHunk, len(dv.unified.Hunks))
+ for i, h := range dv.unified.Hunks {
+ dv.splitHunks[i] = hunkToSplit(h)
+ }
+}
+
+func (dv *DiffView) detectSplitWidth() {
+ if dv.width > 0 {
+ return
+ }
+
+ for i, h := range dv.splitHunks {
+ shownLines := ansi.StringWidth(dv.hunkLineFor(dv.unified.Hunks[i]))
+
+ for _, l := range h.lines {
+ var lineWidth int
+ if l.before != nil {
+ codeWidth := ansi.StringWidth(strings.TrimSuffix(l.before.Content, "\n")) + 1
+ dv.beforeCodeWidth = max(dv.beforeCodeWidth, codeWidth, shownLines)
+ lineWidth += codeWidth
+ }
+ if l.after != nil {
+ codeWidth := ansi.StringWidth(strings.TrimSuffix(l.after.Content, "\n")) + 1
+ dv.afterCodeWidth = max(dv.afterCodeWidth, codeWidth, shownLines)
+ lineWidth += codeWidth
+ }
+ lineWidth += leadingSymbolsSize * 2
+ dv.width = max(dv.width, lineWidth, shownLines)
+ }
+ }
+}
@@ -35,6 +35,9 @@ var (
UnifiedFunc = func(dv *diffview.DiffView) *diffview.DiffView {
return dv.Unified()
}
+ SplitFunc = func(dv *diffview.DiffView) *diffview.DiffView {
+ return dv.Split()
+ }
DefaultFunc = func(dv *diffview.DiffView) *diffview.DiffView {
return dv.
@@ -73,6 +76,7 @@ var (
LayoutFuncs = TestFuncs{
"Unified": UnifiedFunc,
+ "Split": SplitFunc,
}
BehaviorFuncs = TestFuncs{
"Default": DefaultFunc,
@@ -0,0 +1,74 @@
+package diffview
+
+import (
+ "slices"
+
+ "github.com/aymanbagabas/go-udiff"
+ "github.com/charmbracelet/x/exp/slice"
+)
+
+type splitHunk struct {
+ fromLine int
+ toLine int
+ lines []*splitLine
+}
+
+type splitLine struct {
+ before *udiff.Line
+ after *udiff.Line
+}
+
+func hunkToSplit(h *udiff.Hunk) (sh splitHunk) {
+ lines := slices.Clone(h.Lines)
+ sh = splitHunk{
+ fromLine: h.FromLine,
+ toLine: h.ToLine,
+ lines: make([]*splitLine, 0, len(lines)),
+ }
+
+ for {
+ var ul udiff.Line
+ var ok bool
+ ul, lines, ok = slice.Shift(lines)
+ if !ok {
+ break
+ }
+
+ var sl splitLine
+
+ switch ul.Kind {
+
+ // For equal lines, add as is
+ case udiff.Equal:
+ sl.before = &ul
+ sl.after = &ul
+
+ // For inserted lines, set after and keep before as nil
+ case udiff.Insert:
+ sl.before = nil
+ sl.after = &ul
+
+ // For deleted lines, set before and loop over the next lines
+ // searching for the equivalent after line.
+ case udiff.Delete:
+ sl.before = &ul
+
+ inner:
+ for i, l := range lines {
+ switch l.Kind {
+ case udiff.Insert:
+ var ll udiff.Line
+ ll, lines, _ = slice.DeleteAt(lines, i)
+ sl.after = &ll
+ break inner
+ case udiff.Equal:
+ break inner
+ }
+ }
+ }
+
+ sh.lines = append(sh.lines, &sl)
+ }
+
+ return
+}
@@ -13,6 +13,7 @@ type LineStyle struct {
type Style struct {
DividerLine LineStyle
+ MissingLine LineStyle
EqualLine LineStyle
InsertLine LineStyle
DeleteLine LineStyle
@@ -29,6 +30,13 @@ var DefaultLightStyle = Style{
Foreground(charmtone.Oyster).
Background(charmtone.Anchovy),
},
+ MissingLine: LineStyle{
+ LineNumber: lipgloss.NewStyle().
+ Background(charmtone.Ash).
+ Padding(0, 1),
+ Code: lipgloss.NewStyle().
+ Background(charmtone.Ash),
+ },
EqualLine: LineStyle{
LineNumber: lipgloss.NewStyle().
Foreground(charmtone.Charcoal).
@@ -78,6 +86,13 @@ var DefaultDarkStyle = Style{
Foreground(charmtone.Smoke).
Background(charmtone.Ox),
},
+ MissingLine: LineStyle{
+ LineNumber: lipgloss.NewStyle().
+ Background(charmtone.Charcoal).
+ Padding(0, 1),
+ Code: lipgloss.NewStyle().
+ Background(charmtone.Charcoal),
+ },
EqualLine: LineStyle{
LineNumber: lipgloss.NewStyle().
Foreground(charmtone.Ash).
@@ -0,0 +1,16 @@
+[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m @@ -1,13 +1,15 @@ [m[48;2;51;49;178m [m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m [m[48;2;51;49;178m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 1[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m package main[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 1[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m package main[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 2[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 2[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 3[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m import ([m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 3[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m import ([m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 4[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m "fmt"[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 4[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m "fmt"[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m 5[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m "strings"[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 5[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 6[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 6[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 7[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 7[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 8[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 8[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m fmt.Println(getContent())[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 9[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m fmt.Println(getContent())[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 9[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m10[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m10[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m11[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m11[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func getContent() string {[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m12[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func getContent() string {[m[48;2;32;31;38m [m
+[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;51;41;41m12[m[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48m return "Hello, world!"[m[48;2;58;48;48m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m13[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m content := strings.ToUpper("Hello, World!")[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m14[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m return content[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m13[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m15[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m
@@ -0,0 +1,16 @@
+[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m @@ -1,13 +1,15 @@ [m[48;2;113;154;252m [m[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m [m[48;2;113;154;252m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 1[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m package main[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 1[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m package main[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 2[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 2[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 3[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m import ([m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 3[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m import ([m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 4[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m "fmt"[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 4[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m "fmt"[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m 5[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m "strings"[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 5[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 6[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 6[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 7[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 7[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 8[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 8[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m fmt.Println(getContent())[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 9[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m fmt.Println(getContent())[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 9[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m10[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m10[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m11[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m11[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func getContent() string {[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m12[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func getContent() string {[m[48;2;241;239;239m [m
+[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;205;210m12[m[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238m return "Hello, world!"[m[48;2;255;235;238m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m13[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m content := strings.ToUpper("Hello, World!")[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m14[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m return content[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m13[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m15[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m
@@ -0,0 +1,7 @@
+[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m @@ -5,5 +5,6 @@ [m[48;2;51;49;178m [m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m [m[48;2;51;49;178m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 5[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 5[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 6[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 6[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 7[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 7[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m
+[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;51;41;41m 8[m[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48m fmt.Println("Hello, world!")[m[48;2;58;48;48m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m 8[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m content := "Hello, world!"[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m 9[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m fmt.Println(content)[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 9[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m10[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m
@@ -0,0 +1,7 @@
+[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m @@ -5,5 +5,6 @@ [m[48;2;113;154;252m [m[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m [m[48;2;113;154;252m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 5[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 5[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 6[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 6[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 7[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 7[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m
+[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;205;210m 8[m[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238m fmt.Println("Hello, world!")[m[48;2;255;235;238m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m 8[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m content := "Hello, world!"[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m 9[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m fmt.Println(content)[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 9[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m10[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m
@@ -0,0 +1,15 @@
+[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m @@ -2,6 +2,7 @@ [m[48;2;51;49;178m [m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m [m[48;2;51;49;178m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 2[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 2[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 3[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m import ([m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 3[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m import ([m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 4[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m "fmt"[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 4[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m "fmt"[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m 5[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m "strings"[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 5[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 6[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 6[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 7[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 7[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 8[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m
+[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m @@ -9,5 +10,6 @@ [m[48;2;51;49;178m [m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255m ā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m [m[48;2;51;49;178m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m 9[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m10[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m10[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m11[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m11[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func getContent() string {[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m12[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m func getContent() string {[m[48;2;32;31;38m [m
+[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;51;41;41m12[m[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48m return "Hello, world!"[m[48;2;58;48;48m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m13[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m content := strings.ToUpper("Hello, World!")[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67mĀ [m[48;2;58;57;67m [m[48;2;58;57;67m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m14[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m return content[m[48;2;48;58;48m [m
+[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m13[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m[48;2;58;57;67mĀ [m[38;2;223;219;221;48;2;58;57;67m15[m[48;2;58;57;67mĀ [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m
@@ -0,0 +1,15 @@
+[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m @@ -2,6 +2,7 @@ [m[48;2;113;154;252m [m[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m [m[48;2;113;154;252m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 2[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 2[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 3[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m import ([m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 3[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m import ([m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 4[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m "fmt"[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 4[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m "fmt"[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m 5[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m "strings"[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 5[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 6[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 6[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 7[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 7[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 8[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m
+[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m @@ -9,5 +10,6 @@ [m[48;2;113;154;252m [m[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255m ā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m [m[48;2;113;154;252m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m 9[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m10[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m10[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m11[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m11[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func getContent() string {[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m12[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m func getContent() string {[m[48;2;241;239;239m [m
+[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;205;210m12[m[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238m return "Hello, world!"[m[48;2;255;235;238m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m13[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m content := strings.ToUpper("Hello, World!")[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221mĀ [m[48;2;223;219;221m [m[48;2;223;219;221m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m14[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m return content[m[48;2;232;245;233m [m
+[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m13[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m[48;2;223;219;221mĀ [m[38;2;58;57;67;48;2;223;219;221m15[m[48;2;223;219;221mĀ [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m
@@ -0,0 +1,4 @@
+[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255mā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m @@ -1,3 +1,3 @@ [m[48;2;51;49;178m [m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;73;73;255mā¦[m[48;2;73;73;255mĀ [m[38;2;191;188;200;48;2;51;49;178m [m[48;2;51;49;178m [m
+[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;51;41;41m1[m[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48ma[m[48;2;58;48;48m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m1[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48md[m[48;2;48;58;48m [m
+[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;51;41;41m2[m[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48mb[m[48;2;58;48;48m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m2[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48me[m[48;2;48;58;48m [m
+[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;51;41;41m3[m[48;2;51;41;41mĀ [m[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48mc[m[48;2;58;48;48m [m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;41;50;41m3[m[48;2;41;50;41mĀ [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48mf[m[48;2;48;58;48m [m
@@ -0,0 +1,4 @@
+[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255mā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m @@ -1,3 +1,3 @@ [m[48;2;113;154;252m [m[48;2;71;118;255mĀ [m[38;2;77;76;87;48;2;71;118;255mā¦[m[48;2;71;118;255mĀ [m[38;2;96;95;107;48;2;113;154;252m [m[48;2;113;154;252m [m
+[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;205;210m1[m[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238ma[m[48;2;255;235;238m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m1[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233md[m[48;2;232;245;233m [m
+[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;205;210m2[m[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238mb[m[48;2;255;235;238m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m2[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233me[m[48;2;232;245;233m [m
+[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;205;210m3[m[48;2;255;205;210mĀ [m[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238mc[m[48;2;255;235;238m [m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;200;230;201m3[m[48;2;200;230;201mĀ [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233mf[m[48;2;232;245;233m [m
@@ -0,0 +1,7 @@
+[38;2;191;188;200;48;2;51;49;178m @@ -5,5 +5,6 @@ [m[48;2;51;49;178m [m[38;2;191;188;200;48;2;51;49;178m [m[48;2;51;49;178m [m
+[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m[38;2;241;239;239;48;2;32;31;38m )[m[48;2;32;31;38m [m
+[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m[38;2;241;239;239;48;2;32;31;38m [m[48;2;32;31;38m [m
+[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m[38;2;241;239;239;48;2;32;31;38m func main() {[m[48;2;32;31;38m [m
+[38;2;255;56;139;48;2;58;48;48m- [m[38;2;241;239;239;48;2;58;48;48m fmt.Println("Hello, world!")[m[48;2;58;48;48m [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m content := "Hello, world!"[m[48;2;48;58;48m [m
+[48;2;58;57;67m [m[48;2;58;57;67m [m[38;2;10;220;217;48;2;48;58;48m+ [m[38;2;241;239;239;48;2;48;58;48m fmt.Println(content)[m[48;2;48;58;48m [m
+[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m[38;2;241;239;239;48;2;32;31;38m }[m[48;2;32;31;38m [m
@@ -0,0 +1,7 @@
+[38;2;96;95;107;48;2;113;154;252m @@ -5,5 +5,6 @@ [m[48;2;113;154;252m [m[38;2;96;95;107;48;2;113;154;252m [m[48;2;113;154;252m [m
+[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m[38;2;32;31;38;48;2;241;239;239m )[m[48;2;241;239;239m [m
+[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m[38;2;32;31;38;48;2;241;239;239m [m[48;2;241;239;239m [m
+[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m[38;2;32;31;38;48;2;241;239;239m func main() {[m[48;2;241;239;239m [m
+[38;2;255;56;139;48;2;255;235;238m- [m[38;2;32;31;38;48;2;255;235;238m fmt.Println("Hello, world!")[m[48;2;255;235;238m [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m content := "Hello, world!"[m[48;2;232;245;233m [m
+[48;2;223;219;221m [m[48;2;223;219;221m [m[38;2;10;220;217;48;2;232;245;233m+ [m[38;2;32;31;38;48;2;232;245;233m fmt.Println(content)[m[48;2;232;245;233m [m
+[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m[38;2;32;31;38;48;2;241;239;239m }[m[48;2;241;239;239m [m