func (sm *SyncMap(type K eq, type V)) Store(key K, value V) {
	sm.mu.Lock()
	sm.m[key] = value
	sm.mu.Unlock()
}
Store sets the value for a key.
package main
import (
	"fmt"
	"sync"
	"time"
)
type SyncMap(type K eq, type V) struct {
	mu sync.Mutex
	m  map[K]V
}
func MakeSyncMap(type K eq, type V) *SyncMap(K, V) {
	return &SyncMap(K, V){
		m: make(map[K]V),
	}
}
func (sm *SyncMap(type K eq, type V)) Delete(key K) {
	sm.mu.Lock()
	delete(sm.m, key)
	sm.mu.Unlock()
}
func (sm *SyncMap(type K eq, type V)) Load(key K) (value V, ok bool) {
	sm.mu.Lock()
	value, ok = sm.m[key]
	sm.mu.Unlock()
	return
}
func (sm *SyncMap(type K eq, type V)) LoadOrStore(key K, value V) (actual V, loaded bool) {
	sm.mu.Lock()
	actual, loaded = sm.m[key]
	if !loaded {
		sm.m[key] = value
		actual = value
	}
	sm.mu.Unlock()
	return
}
func (sm *SyncMap(type K eq, type V)) Range(f func(key K, value V) bool) {
	sm.mu.Lock()
	for k, v := range sm.m {
		if !f(k, v) {
			break
		}
	}
	sm.mu.Unlock()
}