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: main.go
    path of file: ./repos/arozos/src
    
    the code of the file until where you have to start completion: package main

import (
	"flag"
	"fmt"
	"log"
	"net/http"
	"os"
	"os/signal"
	"path/filepath"
	"strconv"
	"syscall"
	"time"

	console "imuslab.com/arozos/mod/console"
)

/*
	arozos
	author: tobychui

	To edit startup flags, see main.flag.go
	To edit main routing logic, see main.router.go
	To edit startup sequence, see startup.go

	P.S. Try to keep this file < 300 lines
*/

//Close handler, close db and clearn up everything before exit
func SetupCloseHandler() {
	c := make(chan os.Signal, 2)
	signal.Notify(c, os.Interrupt, syscall.SIGTERM)
	go func() {
		<-c
		executeShutdownSequence()
	}()
}

func executeShutdownSequen
    
func executeShutdownSequence() {
	//Shutdown authAgent
	systemWideLogger.PrintAndLog("System", "<!> Shutting down auth gateway", nil)
	authAgent.Close()

	//Shutdown all storage pools
	systemWideLogger.PrintAndLog("System", "<!> Shutting down storage pools", nil)
	closeAllStoragePools()

	//Shutdown Logger
	systemWideLogger.Close()

	//Shutdown database
	systemWideLogger.PrintAndLog("System", "<!> Shutting down database", nil)
	sysdb.Close()

	//Shutdown network services
	StopNetworkServices()

	//Shutdown FTP Server
	if FTPManager != nil {
		systemWideLogger.PrintAndLog("System", "<!> Shutting down FTP Server", nil)
		FTPManager.StopFtpServer()
	}

	//Cleaning up tmp files
	systemWideLogger.PrintAndLog("System", "<!> Cleaning up tmp folder", nil)
	os.RemoveAll(*tmp_directory)
	//Do other things
	os.Exit(0)
}