From 62cc5fe0745729ecdd11d53dc49947b3307351ba Mon Sep 17 00:00:00 2001 From: Denton Gentry Date: Thu, 29 Dec 2022 09:39:05 -0800 Subject: [PATCH] cmd/tailscale: update to latest gioui.org. (#73) There were several API changes since we last updated. We followed examples from the upstream Gio repository: 1. Replace unit.Px with unit.Dp. Followed example in: https://github.com/gioui/gio/commit/3d374913420204ff764171e21a25cb910fccccb1 2. op.Offset now takes int coordinates instead of float. Followed example in: https://github.com/gioui/gio/commit/a63e0cb44a020c2a5c21a524765e98e547226c8a 3. clip.RRect now takes int coordinates instead of float. Followed example in: https://github.com/gioui/gio/commit/48a8540a68c778ca74d792aa8c76193c721199e3 4. Replace system.CommandEvent with key.Event. Followed example in: https://github.com/gioui/gio/commit/6c76fa6dec3990f542c2d6309a1a5619db6427bc Updates https://github.com/tailscale/tailscale/issues/6824 Signed-off-by: Denton Gentry Signed-off-by: Denton Gentry --- cmd/tailscale/main.go | 6 +- cmd/tailscale/ui.go | 126 ++++++++++++++++++++++-------------------- go.mod | 11 ++-- go.sum | 55 ++++-------------- 4 files changed, 85 insertions(+), 113 deletions(-) diff --git a/cmd/tailscale/main.go b/cmd/tailscale/main.go index 03c0a2c..05bf2be 100644 --- a/cmd/tailscale/main.go +++ b/cmd/tailscale/main.go @@ -27,6 +27,7 @@ import ( "unsafe" "gioui.org/app" + "gioui.org/io/key" "gioui.org/io/system" "gioui.org/layout" "gioui.org/op" @@ -951,10 +952,9 @@ func (a *App) runUI() error { } case system.DestroyEvent: return e.Err - case *system.CommandEvent: - if e.Type == system.CommandBack { + case key.Event: + if e.Name == key.NameBack { if ui.onBack() { - e.Cancel = true w.Invalidate() } } diff --git a/cmd/tailscale/ui.go b/cmd/tailscale/ui.go index 15a73d1..90ce1a0 100644 --- a/cmd/tailscale/ui.go +++ b/cmd/tailscale/ui.go @@ -10,6 +10,7 @@ import ( "fmt" "image" "image/color" + "math" "net/netip" "time" @@ -706,7 +707,7 @@ func (ui *UI) layoutSignIn(gtx layout.Context, state *BackendState) layout.Dimen textColor = 0x555555 ) - border := widget.Border{Color: rgb(textColor), CornerRadius: unit.Dp(4), Width: unit.Px(1)} + border := widget.Border{Color: rgb(textColor), CornerRadius: unit.Dp(4), Width: unit.Dp(1)} if ui.setLoginServer { return layout.Flex{Axis: layout.Vertical, Alignment: layout.Middle}.Layout(gtx, @@ -759,7 +760,7 @@ func (ui *UI) layoutSignIn(gtx layout.Context, state *BackendState) layout.Dimen gtx.Queue = nil } return signin.Layout(gtx, func(gtx C) D { - gtx.Constraints.Max.Y = gtx.Px(unit.Dp(48)) + gtx.Constraints.Max.Y = gtx.Dp(unit.Dp(48)) return layout.Flex{Alignment: layout.Middle}.Layout(gtx, layout.Rigid(func(gtx C) D { return layout.Inset{Right: unit.Dp(4)}.Layout(gtx, func(gtx C) D { @@ -813,7 +814,7 @@ func (ui *UI) withLoader(gtx layout.Context, loading bool, w layout.Widget) layo } return layout.Inset{Left: unit.Dp(16)}.Layout(gtx, func(gtx C) D { gtx.Constraints.Min = image.Point{ - X: gtx.Px(unit.Dp(16)), + X: gtx.Dp(unit.Dp(16)), } return material.Loader(ui.theme).Layout(gtx) }) @@ -830,7 +831,7 @@ func (ui *UI) layoutIntro(gtx layout.Context, sysIns system.Insets) { layout.Rigid(func(gtx C) D { return layout.Inset{Top: unit.Dp(80), Bottom: unit.Dp(48)}.Layout(gtx, func(gtx C) D { return layout.N.Layout(gtx, func(gtx C) D { - sz := gtx.Px(unit.Dp(72)) + sz := gtx.Dp(unit.Dp(72)) drawLogo(gtx.Ops, sz) return layout.Dimensions{Size: image.Pt(sz, sz)} }) @@ -861,7 +862,7 @@ func (ui *UI) layoutIntro(gtx layout.Context, sysIns system.Insets) { Top: unit.Dp(16), Left: unit.Dp(16), Right: unit.Dp(16), - Bottom: unit.Add(gtx.Metric, sysIns.Bottom), + Bottom: sysIns.Bottom, }.Layout(gtx, func(gtx C) D { start := material.Button(ui.theme, &ui.intro.start, "Get Started") start.Inset = layout.UniformInset(unit.Dp(16)) @@ -895,13 +896,13 @@ func (ui *UI) layoutShareDialog(gtx layout.Context, sysIns system.Insets) { } d.dismiss.Add(gtx, argb(0x66000000)) layout.Inset{ - Top: unit.Add(gtx.Metric, sysIns.Top, unit.Dp(16)), - Right: unit.Add(gtx.Metric, sysIns.Right, unit.Dp(16)), - Bottom: unit.Add(gtx.Metric, sysIns.Bottom, unit.Dp(16)), - Left: unit.Add(gtx.Metric, sysIns.Left, unit.Dp(16)), + Top: sysIns.Top + unit.Dp(16), + Right: sysIns.Right + unit.Dp(16), + Bottom: sysIns.Bottom + unit.Dp(16), + Left: sysIns.Left + unit.Dp(16), }.Layout(gtx, func(gtx C) D { return layout.Center.Layout(gtx, func(gtx C) D { - gtx.Constraints.Min.X = gtx.Px(unit.Dp(250)) + gtx.Constraints.Min.X = gtx.Dp(unit.Dp(250)) gtx.Constraints.Max.X = gtx.Constraints.Min.X return layoutDialog(gtx, func(gtx C) D { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, @@ -928,7 +929,7 @@ func (ui *UI) layoutShareDialog(gtx layout.Context, sysIns system.Insets) { } return layout.UniformInset(unit.Dp(50)).Layout(gtx, func(gtx C) D { return layout.Center.Layout(gtx, func(gtx C) D { - sz := gtx.Px(unit.Dp(32)) + sz := gtx.Dp(unit.Dp(32)) gtx.Constraints.Min = image.Pt(sz, sz) gtx.Constraints.Max = gtx.Constraints.Min return material.Loader(ui.theme).Layout(gtx) @@ -939,7 +940,7 @@ func (ui *UI) layoutShareDialog(gtx layout.Context, sysIns system.Insets) { if d.error == nil { return D{} } - sz := gtx.Px(unit.Dp(50)) + sz := gtx.Dp(unit.Dp(50)) gtx.Constraints.Min.Y = sz return layout.UniformInset(unit.Dp(20)).Layout(gtx, func(gtx C) D { return layout.W.Layout(gtx, func(gtx C) D { @@ -967,7 +968,7 @@ func (ui *UI) layoutShareDialog(gtx layout.Context, sysIns system.Insets) { return layout.Flex{Alignment: layout.Middle}.Layout(gtx, layout.Flexed(1, w.Layout), layout.Rigid(func(gtx C) D { - sz := gtx.Px(unit.Dp(16)) + sz := gtx.Dp(unit.Dp(16)) gtx.Constraints.Min = image.Pt(sz, sz) switch node.info.State { case FileSendConnecting: @@ -1004,13 +1005,13 @@ func (ui *UI) layoutExitNodeDialog(gtx layout.Context, sysIns system.Insets, exi } d.dismiss.Add(gtx, argb(0x66000000)) layout.Inset{ - Top: unit.Add(gtx.Metric, sysIns.Top, unit.Dp(16)), - Right: unit.Add(gtx.Metric, sysIns.Right, unit.Dp(16)), - Bottom: unit.Add(gtx.Metric, sysIns.Bottom, unit.Dp(16)), - Left: unit.Add(gtx.Metric, sysIns.Left, unit.Dp(16)), + Top: sysIns.Top + unit.Dp(16), + Right: sysIns.Right + unit.Dp(16), + Bottom: sysIns.Bottom + unit.Dp(16), + Left: sysIns.Left + unit.Dp(16), }.Layout(gtx, func(gtx C) D { return layout.Center.Layout(gtx, func(gtx C) D { - gtx.Constraints.Min.X = gtx.Px(unit.Dp(250)) + gtx.Constraints.Min.X = gtx.Dp(unit.Dp(250)) gtx.Constraints.Max.X = gtx.Constraints.Min.X return layoutDialog(gtx, func(gtx C) D { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, @@ -1077,13 +1078,13 @@ func (ui *UI) layoutAboutDialog(gtx layout.Context, sysIns system.Insets) { } d.dismiss.Add(gtx, argb(0x66000000)) layout.Inset{ - Top: unit.Add(gtx.Metric, sysIns.Top, unit.Dp(16)), - Right: unit.Add(gtx.Metric, sysIns.Right, unit.Dp(16)), - Bottom: unit.Add(gtx.Metric, sysIns.Bottom, unit.Dp(16)), - Left: unit.Add(gtx.Metric, sysIns.Left, unit.Dp(16)), + Top: sysIns.Top + unit.Dp(16), + Right: sysIns.Right + unit.Dp(16), + Bottom: sysIns.Bottom + unit.Dp(16), + Left: sysIns.Left + unit.Dp(16), }.Layout(gtx, func(gtx C) D { return layout.Center.Layout(gtx, func(gtx C) D { - gtx.Constraints.Min.X = gtx.Px(unit.Dp(250)) + gtx.Constraints.Min.X = gtx.Dp(unit.Dp(250)) gtx.Constraints.Max.X = gtx.Constraints.Min.X return layoutDialog(gtx, func(gtx C) D { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, @@ -1169,7 +1170,7 @@ func layoutMenu(th *material.Theme, gtx layout.Context, items []menuItem, header } func layoutDialog(gtx layout.Context, w layout.Widget) layout.Dimensions { - return widget.Border{Color: argb(0x33000000), CornerRadius: unit.Dp(2), Width: unit.Px(1)}.Layout(gtx, func(gtx C) D { + return widget.Border{Color: argb(0x33000000), CornerRadius: unit.Dp(2), Width: unit.Dp(1)}.Layout(gtx, func(gtx C) D { return Background{Color: rgb(0xfafafa), CornerRadius: unit.Dp(2)}.Layout(gtx, w) }) } @@ -1181,8 +1182,8 @@ func (ui *UI) layoutMenu(gtx layout.Context, sysIns system.Insets, expiry time.T ui.setMenuShown(false) } layout.Inset{ - Top: unit.Add(gtx.Metric, sysIns.Top, unit.Dp(2)), - Right: unit.Add(gtx.Metric, sysIns.Right, unit.Dp(2)), + Top: sysIns.Top + unit.Dp(2), + Right: sysIns.Right + unit.Dp(2), }.Layout(gtx, func(gtx C) D { return layout.NE.Layout(gtx, func(gtx C) D { menu := &ui.menu @@ -1256,9 +1257,9 @@ func (ui *UI) layoutMessage(gtx layout.Context, sysIns system.Insets) layout.Dim op.InvalidateOp{At: now.Add(rem)}.Add(gtx.Ops) return layout.S.Layout(gtx, func(gtx C) D { return layout.Inset{ - Left: unit.Add(gtx.Metric, sysIns.Left, unit.Dp(8)), - Right: unit.Add(gtx.Metric, sysIns.Right, unit.Dp(8)), - Bottom: unit.Add(gtx.Metric, sysIns.Bottom, unit.Dp(8)), + Left: sysIns.Left + unit.Dp(8), + Right: sysIns.Right + unit.Dp(8), + Bottom: sysIns.Bottom + unit.Dp(8), }.Layout(gtx, func(gtx C) D { return Background{Color: rgb(0x323232), CornerRadius: unit.Dp(5)}.Layout(gtx, func(gtx C) D { return layout.UniformInset(unit.Dp(12)).Layout(gtx, func(gtx C) D { @@ -1277,14 +1278,21 @@ func (ui *UI) showMessage(gtx layout.Context, msg string) { op.InvalidateOp{}.Add(gtx.Ops) } +func MaxDp(p1, p2 unit.Dp) unit.Dp { + if p1 > p2 { + return p1 + } + return p2 +} + // layoutPeer lays out a peer name and IP address (e.g. // "localhost\n100.100.100.101") func (ui *UI) layoutPeer(gtx layout.Context, sysIns system.Insets, p *UIPeer, user tailcfg.UserID, clk *widget.Clickable) layout.Dimensions { return material.Clickable(gtx, clk, func(gtx C) D { return layout.Inset{ Top: unit.Dp(8), - Right: unit.Max(gtx.Metric, sysIns.Right, unit.Dp(16)), - Left: unit.Max(gtx.Metric, sysIns.Left, unit.Dp(16)), + Right: MaxDp(sysIns.Right, unit.Dp(16)), + Left: MaxDp(sysIns.Left, unit.Dp(16)), Bottom: unit.Dp(8), }.Layout(gtx, func(gtx C) D { gtx.Constraints.Min.X = gtx.Constraints.Max.X @@ -1316,8 +1324,8 @@ func (ui *UI) layoutSection(gtx layout.Context, sysIns system.Insets, title stri return Background{Color: rgb(0xe1e0e9)}.Layout(gtx, func(gtx C) D { return layout.Inset{ Top: unit.Dp(16), - Right: unit.Max(gtx.Metric, sysIns.Right, unit.Dp(16)), - Left: unit.Max(gtx.Metric, sysIns.Left, unit.Dp(16)), + Right: MaxDp(sysIns.Right, unit.Dp(16)), + Left: MaxDp(sysIns.Left, unit.Dp(16)), Bottom: unit.Dp(16), }.Layout(gtx, func(gtx C) D { l := material.Body1(ui.theme, title) @@ -1336,8 +1344,8 @@ func (ui *UI) layoutTop(gtx layout.Context, sysIns system.Insets, state *Backend return Background{Color: rgb(headerColor)}.Layout(gtx, func(gtx C) D { return layout.Inset{ Top: sysIns.Top, - Right: unit.Max(gtx.Metric, sysIns.Right, unit.Dp(8)), - Left: unit.Max(gtx.Metric, sysIns.Left, unit.Dp(16)), + Right: MaxDp(sysIns.Right, unit.Dp(8)), + Left: MaxDp(sysIns.Left, unit.Dp(16)), }.Layout(gtx, func(gtx C) D { return layout.Flex{Alignment: layout.Middle}.Layout(gtx, layout.Rigid(func(gtx C) D { @@ -1400,8 +1408,8 @@ func (ui *UI) showCopied(gtx layout.Context, addr string) { func (ui *UI) layoutLocal(gtx layout.Context, sysIns system.Insets, host, addr string) layout.Dimensions { return Background{Color: rgb(headerColor)}.Layout(gtx, func(gtx C) D { return layout.Inset{ - Right: unit.Max(gtx.Metric, sysIns.Right, unit.Dp(8)), - Left: unit.Max(gtx.Metric, sysIns.Left, unit.Dp(8)), + Right: MaxDp(sysIns.Right, unit.Dp(8)), + Left: MaxDp(sysIns.Left, unit.Dp(8)), Bottom: unit.Dp(8), }.Layout(gtx, func(gtx C) D { return Background{Color: rgb(infoColor), CornerRadius: unit.Dp(8)}.Layout(gtx, func(gtx C) D { @@ -1433,8 +1441,8 @@ func (ui *UI) layoutSearchbar(gtx layout.Context, sysIns system.Insets) layout.D return Background{Color: rgb(0xf0eff6)}.Layout(gtx, func(gtx C) D { return layout.Inset{ Top: unit.Dp(8), - Right: unit.Max(gtx.Metric, sysIns.Right, unit.Dp(8)), - Left: unit.Max(gtx.Metric, sysIns.Left, unit.Dp(8)), + Right: MaxDp(sysIns.Right, unit.Dp(8)), + Left: MaxDp(sysIns.Left, unit.Dp(8)), Bottom: unit.Dp(8), }.Layout(gtx, func(gtx C) D { return Background{Color: rgb(0xe3e2ea), CornerRadius: unit.Dp(8)}.Layout(gtx, func(gtx C) D { @@ -1456,16 +1464,16 @@ func (ui *UI) layoutSearchbar(gtx layout.Context, sysIns system.Insets) layout.D // drawLogo draws the Tailscale logo using vector operations. func drawLogo(ops *op.Ops, size int) { - scale := float32(size) / 680 - discDia := 170 * scale - off := 172 * 1.5 * scale - tx := op.Offset(f32.Pt(off, 0)) - ty := op.Offset(f32.Pt(0, off)) + scale := float64(size) / 680 + discDia := float32(170 * scale) + off := int(math.Round(172 * 1.5 * scale)) + tx := op.Offset(image.Pt(off, 0)) + ty := op.Offset(image.Pt(0, off)) - defer op.Offset(f32.Point{}).Push(ops).Pop() + defer op.Offset(image.Point{}).Push(ops).Pop() // First row of discs. - row := op.Offset(f32.Point{}).Push(ops) + row := op.Offset(image.Point{}).Push(ops) drawDisc(ops, discDia, rgb(0x54514d)) tx.Add(ops) drawDisc(ops, discDia, rgb(0x54514d)) @@ -1475,7 +1483,7 @@ func drawLogo(ops *op.Ops, size int) { ty.Add(ops) // Second row. - row = op.Offset(f32.Point{}).Push(ops) + row = op.Offset(image.Point{}).Push(ops) drawDisc(ops, discDia, rgb(0xfffdfa)) tx.Add(ops) drawDisc(ops, discDia, rgb(0xfffdfa)) @@ -1485,7 +1493,7 @@ func drawLogo(ops *op.Ops, size int) { ty.Add(ops) // Third row. - row = op.Offset(f32.Point{}).Push(ops) + row = op.Offset(image.Point{}).Push(ops) drawDisc(ops, discDia, rgb(0xfffdfa)) drawDisc(ops, discDia, rgb(0x54514d)) tx.Add(ops) @@ -1495,11 +1503,11 @@ func drawLogo(ops *op.Ops, size int) { row.Pop() } -func drawImage(gtx layout.Context, img paint.ImageOp, size unit.Value) layout.Dimensions { +func drawImage(gtx layout.Context, img paint.ImageOp, size unit.Dp) layout.Dimensions { img.Add(gtx.Ops) sz := img.Size() aspect := float32(sz.Y) / float32(sz.X) - w := gtx.Px(size) + w := gtx.Dp(size) h := int(float32(w)*aspect + .5) scale := float32(w) / float32(sz.X) defer op.Affine(f32.Affine2D{}.Scale(f32.Point{}, f32.Point{X: scale, Y: scale})).Push(gtx.Ops).Pop() @@ -1508,10 +1516,10 @@ func drawImage(gtx layout.Context, img paint.ImageOp, size unit.Value) layout.Di } func drawDisc(ops *op.Ops, radius float32, col color.NRGBA) { - r2 := radius * .5 - dr := f32.Rectangle{Max: f32.Pt(radius, radius)} + r := int(math.Round(float64(radius))) + r2 := int(math.Round(float64(radius * .5))) defer clip.RRect{ - Rect: dr, + Rect: image.Rect(0, 0, r, r), NE: r2, NW: r2, SE: r2, SW: r2, }.Push(ops).Pop() paint.ColorOp{Color: col}.Add(ops) @@ -1521,7 +1529,7 @@ func drawDisc(ops *op.Ops, radius float32, col color.NRGBA) { // Background lays out a widget and draws a color background behind it. type Background struct { Color color.NRGBA - CornerRadius unit.Value + CornerRadius unit.Dp } func (b Background) Layout(gtx layout.Context, w layout.Widget) layout.Dimensions { @@ -1530,14 +1538,10 @@ func (b Background) Layout(gtx layout.Context, w layout.Widget) layout.Dimension sz := dims.Size call := m.Stop() // Clip corners, if any. - if r := gtx.Px(b.CornerRadius); r > 0 { - rr := float32(r) + if r := gtx.Dp(b.CornerRadius); r > 0 { defer clip.RRect{ - Rect: f32.Rectangle{Max: f32.Point{ - X: float32(sz.X), - Y: float32(sz.Y), - }}, - NE: rr, NW: rr, SE: rr, SW: rr, + Rect: image.Rect(0, 0, sz.X, sz.Y), + NE: r, NW: r, SE: r, SW: r, }.Push(gtx.Ops).Pop() } fill{b.Color}.Layout(gtx, sz) diff --git a/go.mod b/go.mod index ef74796..3e19d7e 100644 --- a/go.mod +++ b/go.mod @@ -4,11 +4,11 @@ go 1.19 require ( eliasnaur.com/font v0.0.0-20220124212145-832bb8fc08c3 - gioui.org v0.0.0-20220331105829-a1b5ff059c07 + gioui.org v0.0.0-20221223153152-aa2a948b863a gioui.org/cmd v0.0.0-20210925100615-41f3a7e74ee6 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/tailscale/wireguard-go v0.0.0-20221219190806-4fa124729667 - golang.org/x/exp/shiny v0.0.0-20220823124025-807a23277127 + golang.org/x/exp/shiny v0.0.0-20220827204233-334a2380cb91 golang.org/x/sys v0.2.0 inet.af/netaddr v0.0.0-20220617031823-097006376321 tailscale.com v1.1.1-0.20221219220559-237f030cd958 @@ -22,13 +22,12 @@ require ( github.com/akavel/rsrc v0.10.1 // indirect github.com/akutz/memconn v0.1.0 // indirect github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 // indirect - github.com/benoitkugler/textlayout v0.0.10 // indirect + github.com/benoitkugler/textlayout v0.3.0 // indirect github.com/coreos/go-iptables v0.6.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect github.com/gin-gonic/gin v1.8.1 // indirect - github.com/gioui/uax v0.2.1-0.20220325163150-e3d987515a12 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-text/typesetting v0.0.0-20220112121102-58fe93c84506 // indirect + github.com/go-text/typesetting v0.0.0-20221214153724-0399769901d5 // indirect github.com/godbus/dbus/v5 v5.0.6 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/btree v1.0.1 // indirect @@ -61,7 +60,7 @@ require ( go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760 // indirect golang.org/x/crypto v0.3.0 // indirect golang.org/x/exp v0.0.0-20221205204356-47842c84f3db // indirect - golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect + golang.org/x/image v0.0.0-20220722155232-062f8c9fd539 // indirect golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.2.0 // indirect golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect diff --git a/go.sum b/go.sum index 96432fe..29b1c1b 100644 --- a/go.sum +++ b/go.sum @@ -7,8 +7,8 @@ filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmG filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/mkcert v1.4.3 h1:axpnmtrZMM8u5Hf4N3UXxboGemMOV+Tn+e+pkHM6E3o= gioui.org v0.0.0-20210910062418-d5d0a75a9bcb/go.mod h1:BTldRXnY5mrUrYZCdWyDwyMzyUzpfZN1cF4MMRrOt9w= -gioui.org v0.0.0-20220331105829-a1b5ff059c07 h1:9BdOhoKqRiItOl87wZfQUL2YZNm+6Yyp1f1iEiJUh+U= -gioui.org v0.0.0-20220331105829-a1b5ff059c07/go.mod h1:b8vBukexG6eYuXZa14asjLAWJ+JjbZ/ophEnS2FjYUg= +gioui.org v0.0.0-20221223153152-aa2a948b863a h1:Tv0ZdLLS8zkWgxFFOBXR/RSp4YvFzk7f7B9000lzo94= +gioui.org v0.0.0-20221223153152-aa2a948b863a/go.mod h1:3lLo7xMHYnnHTrgKNNctBjEKKH3wQCO2Sn7ti5Jy8mU= gioui.org/cmd v0.0.0-20210925100615-41f3a7e74ee6 h1:SkAdohDhTUjl+ZtM417Xeu+uFd7SQubwR9uAyqJqC8c= gioui.org/cmd v0.0.0-20210925100615-41f3a7e74ee6/go.mod h1:qrH3h4nt/PyIqx/XabL/eJ5cXQnQ0ERHqC3VEXx/Rmg= gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= @@ -47,9 +47,10 @@ github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQ github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/benoitkugler/pstokenizer v1.0.0/go.mod h1:l1G2Voirz0q/jj0TQfabNxVsa8HZXh/VMxFSRALWTiE= -github.com/benoitkugler/textlayout v0.0.5/go.mod h1:puH4v13Uz7uIhIH0XMk5jgc8U3MXcn5r3VlV9K8n0D8= -github.com/benoitkugler/textlayout v0.0.10 h1:uIaQgH4pBFw1LQ0tPkfjgxo94WYcckzzQaB41L2X84w= -github.com/benoitkugler/textlayout v0.0.10/go.mod h1:puH4v13Uz7uIhIH0XMk5jgc8U3MXcn5r3VlV9K8n0D8= +github.com/benoitkugler/textlayout v0.3.0 h1:2ehWXEkgb6RUokTjXh1LzdGwG4dRP6X3dqhYYDYhUVk= +github.com/benoitkugler/textlayout v0.3.0/go.mod h1:o+1hFV+JSHBC9qNLIuwVoLedERU7sBPgEFcuSgfvi/w= +github.com/benoitkugler/textlayout-testdata v0.1.1 h1:AvFxBxpfrQd8v55qH59mZOJOQjtD6K2SFe9/HvnIbJk= +github.com/benoitkugler/textlayout-testdata v0.1.1/go.mod h1:i/qZl09BbUOtd7Bu/W1CAubRwTWrEXWq6JwMkw8wYxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -66,7 +67,6 @@ github.com/cilium/ebpf v0.8.1 h1:bLSSEbBLqGPXxls55pGr5qWZaTqcmfDJHhou7t254ao= github.com/cilium/ebpf v0.8.1/go.mod h1:f5zLIM0FSNuAkSyLAN7X+Hy6yznlF1mNiWUMfxMtrgk= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk= @@ -98,7 +98,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -107,8 +106,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/gioui/uax v0.2.1-0.20220325163150-e3d987515a12 h1:1bjaB/5IIicfKpP4k0s30T2WEw//Kh00zULa8DQ0cxA= -github.com/gioui/uax v0.2.1-0.20220325163150-e3d987515a12/go.mod h1:kDhBRTA/i3H46PVdhqcw26TdGSIj42TOKNWKY+Kipnw= github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I= github.com/github/fakeca v0.1.0/go.mod h1:+bormgoGMMuamOscx7N91aOuUST7wdaJ2rNjeohylyo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -130,8 +127,8 @@ github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GO github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-text/typesetting v0.0.0-20220112121102-58fe93c84506 h1:1TPz/Gn/MsXwJ6bEtI9wdkPcQYr2X3V9I+wz4wPYUdY= -github.com/go-text/typesetting v0.0.0-20220112121102-58fe93c84506/go.mod h1:R0mlTNeyszZ/tKQhbZA7SRGjx+OHsmNzgN2jTV7yZcs= +github.com/go-text/typesetting v0.0.0-20221214153724-0399769901d5 h1:iOA0HmtpANn48hX2nlDNMu0VVaNza35HJG0WeetBVzQ= +github.com/go-text/typesetting v0.0.0-20221214153724-0399769901d5/go.mod h1:/cmOXaoTiO+lbCwkTZBgCvevJpbFsZ5reXIpEJVh5MI= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -156,12 +153,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -314,18 +305,12 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -476,15 +461,15 @@ golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9t golang.org/x/exp v0.0.0-20210722180016-6781d3edade3/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= golang.org/x/exp v0.0.0-20221205204356-47842c84f3db h1:D/cFflL63o2KSLJIwjlcIt8PR064j/xsmdEJL/YvY/o= golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/shiny v0.0.0-20220823124025-807a23277127 h1:hz1J1XLZMdTNxUS/Ahq1a2r5vDxe230jYQ9zM3L+SGY= -golang.org/x/exp/shiny v0.0.0-20220823124025-807a23277127/go.mod h1:VjAR7z0ngyATZTELrBSkxOOHhhlnVUxDye4mcjx5h/8= +golang.org/x/exp/shiny v0.0.0-20220827204233-334a2380cb91 h1:ryT6Nf0R83ZgD8WnFFdfI8wCeyqgdXWN4+CkFVNPAT0= +golang.org/x/exp/shiny v0.0.0-20220827204233-334a2380cb91/go.mod h1:VjAR7z0ngyATZTELrBSkxOOHhhlnVUxDye4mcjx5h/8= golang.org/x/exp/typeparams v0.0.0-20220328175248-053ad81199eb h1:fP6C8Xutcp5AlakmT/SkQot0pMicROAsEX7OfNPuG10= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs= golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220722155232-062f8c9fd539 h1:/eM0PCrQI2xd471rI+snWuu251/+/jpBpZqir2mPdnU= +golang.org/x/image v0.0.0-20220722155232-062f8c9fd539/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -520,11 +505,9 @@ golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -560,24 +543,19 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606122018-79a91cf218c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -621,7 +599,6 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= @@ -651,12 +628,6 @@ google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -671,9 +642,7 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=