You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: stage2.go
    path of file: ./repos/kubelogin/pkg/usecases/setup
    
    the code of the file until where you have to start completion: package setup

import (
	"context"
	"fmt"
	"path/filepath"
	"strings"
	"text/template"

	"github.com/int128/kubelogin/pkg/oidc"
	"github.com/int128/kubelogin/pkg/tlsclientconfig"
	"github.com/int128/kubelogin/pkg/usecases/authentication"
)

var stage2Tpl = template.Must(template.New("").Parse(`
## 2. Verify authentication

You got a token with the following claims:

{{ .IDTokenPrettyJSON }}

## 3. Bind a cluster role

Run the following command:

	kubectl create clusterrolebinding oidc-cluster-admin --clusterrole=clust
    
func (u *Setup) DoStage2(ctx context.Context, in Stage2Input) error {
	u.Logger.Printf("authentication in progress...")
	out, err := u.Authentication.Do(ctx, authentication.Input{
		Provider: oidc.Provider{
			IssuerURL:    in.IssuerURL,
			ClientID:     in.ClientID,
			ClientSecret: in.ClientSecret,
			ExtraScopes:  in.ExtraScopes,
			UsePKCE:      in.UsePKCE,
		},
		GrantOptionSet:  in.GrantOptionSet,
		TLSClientConfig: in.TLSClientConfig,
	})
	if err != nil {
		return fmt.Errorf("authentication error: %w", err)
	}
	idTokenClaims, err := out.TokenSet.DecodeWithoutVerify()
	if err != nil {
		return fmt.Errorf("you got an invalid token: %w", err)
	}

	v := stage2Vars{
		IDTokenPrettyJSON: idTokenClaims.Pretty,
		IssuerURL:         in.IssuerURL,
		ClientID:          in.ClientID,
		Args:              makeCredentialPluginArgs(in),
		Subject:           idTokenClaims.Subject,
	}
	var b strings.Builder
	if err := stage2Tpl.Execute(&b, &v); err != nil {
		return fmt.Errorf("could not render the template: %w", err)
	}
	u.Logger.Printf(b.String())
	return nil
}