merchant

package
v0.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 16, 2021 License: GPL-2.0 Imports: 4 Imported by: 0

Documentation

Overview

*

  • Copyright 2015 @ 56x.net.
  • name : api_manager
  • author : jarryliu
  • date : 2016-05-27 13:23
  • description :
  • history :

*

  • Copyright 2015 @ 56x.net.
  • name : member_conf
  • author : jarryliu
  • date : -- :
  • description :
  • history :

*

  • Copyright 2015 @ 56x.net.
  • name : kv_manager
  • author : jarryliu
  • date : 2015-07-26 22:06
  • description :
  • history :

*

  • Copyright 2015 @ 56x.net.
  • name : member_manager.go
  • author : jarryliu
  • date : -- :
  • description :
  • history :

*

  • Copyright 2015 @ 56x.net.
  • name : profilemanager.go
  • author : jarryliu
  • date : 2016-05-26 21:19
  • description :
  • history :

Index

Constants

View Source
const (
	KindAccountCharge           = 1
	KindAccountSettleOrder      = 2
	KindAccountPresent          = 3
	KindAccountTakePayment      = 4
	KindAccountTransferToMember = 5

	//商户提现
	KindMachTakeOutToBankCard = 100
	//商户提现失败返还给会员
	KindMachTakOutRefund = 101
)
View Source
const (
	TFlagNormal = 1 << iota
	// 免费
	TFlagFree
	// 关毕交易权限
	TFlagNoPerm
)
View Source
const (
	// 普通订单
	TKNormalOrder = 1
	// 批发订单
	TKWholesaleOrder = 2
	// 交易订单
	TKTradeOrder = 3
)
View Source
const (
	KeyMssTplIdOfProfileComplete string = "mss_profile_complete_mail_tpl"
)

Variables

View Source
var (
	ErrMerchantDisabled = domain.NewError(
		"err_merchant_disabled", "商户已被停用")

	ErrEnabledFxSales = domain.NewError(
		"err_enabled_fx_sales", "系统当前不允许启用分销")

	ErrMerchantExpires = domain.NewError(
		"err_merchant_expires", "商户已过期")

	ErrMissingMerchantUser = domain.NewError(
		"err_missing_merchant_user", "未设置商户用户")

	ErrExistMember = domain.NewError(
		"err_exist_member", "会员已绑定其他商户")

	ErrMerchantUserExists = domain.NewError(
		"err_merchant_user_exists", "商户已存在")

	ErrNoSuchMerchant = domain.NewError(
		"no_such_partner", "商户不存在")

	ErrNoSuchShop = domain.NewError(
		"no_such_shop", "门店不存在")

	ErrMerchantNotMatch = domain.NewError(
		"not_match", "商户不匹配")

	ErrSalesPercent = domain.NewError(
		"err_sales_percent", "销售比例错误")

	ErrAmount = domain.NewError(
		"err_mch_amount", "金额不正确")

	ErrNoMoreAmount = domain.NewError(
		"err_mch_no_more_amount", "余额不足")

	ErrNoSuchSignUpInfo = domain.NewError(
		"err_no_such_sign_up_info", "商户申请信息不存在")

	ErrRequireRejectRemark = domain.NewError(
		"err_mch_require_remark", "请填写退回的原因")

	ErrMissingCompanyName = domain.NewError(
		"err_mch_missing_company_name", "请填写公司名称")

	ErrMissingMerchantName = domain.NewError(
		"err_mch_missing_merchant_name", "请填写商户名称")

	ErrMissingCompanyNo = domain.NewError(
		"err_mch_missing_company_no", "请填写营业执照编号")

	ErrMissingAddress = domain.NewError(
		"err_mch_missing_address", "请填写详细地址")

	ErrMissingPersonName = domain.NewError(
		"err_mch_missing_person_name", "请填写法人姓名")

	ErrMissingPhone = domain.NewError(
		"err_mch_missing_phone", "请填写联系电话")

	ErrMissingPersonId = domain.NewError(
		"err_mch_missing_person_id", "请填写法人身份证")

	ErrPersonCardId = domain.NewError(
		"err_mch_missing_person_card_id", "法人身份证号码不正确")

	ErrMissingCompanyImage = domain.NewError(
		"err_mch_missing_company_image", "请上传营业执照复印件")

	ErrMissingPersonImage = domain.NewError(
		"err_mch_missing_person_image", "请上传法人身份证复印件")
)
View Source
var (
	// 检测KeyValue,如非法则返回错误,不持久化
	KeyValueChecker func(map[string]string) error
)

todo: 存储设置项的名字, 存储到文件中

Functions

This section is empty.

Types

type Account

type Account struct {
	// 商户编号
	MchId int64 `db:"mch_id" pk:"yes"`
	// 余额
	Balance int64 `db:"balance"`
	// 冻结金额
	FreezeAmount int64 `db:"freeze_amount"`
	// 待入账金额
	AwaitAmount int64 `db:"await_amount"`
	// 平台赠送金额
	PresentAmount int64 `db:"present_amount"`
	// 累计销售总额
	SalesAmount int64 `db:"sales_amount"`
	// 累计退款金额
	RefundAmount int64 `db:"refund_amount"`
	// 已提取金额
	WithdrawAmount int64 `db:"take_amount"`
	// 线下销售金额
	OfflineSales int64 `db:"offline_sales"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

商户账户表

type ApiInfo

type ApiInfo struct {
	// 商户编号
	MerchantId int `db:"mch_id" pk:"yes" auto:"no"`
	// 商户接口编号(10位数字)
	ApiId string `db:"api_id"`
	// 密钥
	ApiSecret string `db:"api_secret"`
	// IP白名单
	WhiteList string `db:"white_list"`
	// 是否启用,0:停用,1启用
	Enabled int `db:"enabled"`
}

商户接口信息

type BalanceLog

type BalanceLog struct {
	// 编号
	Id int32 `db:"id" pk:"yes" auto:"yes"`
	// 商户编号
	MchId int64 `db:"mch_id"`
	// 日志类型
	Kind int `db:"kind"`
	// 标题
	Title string `db:"title"`
	// 外部订单号
	OuterNo string `db:"outer_no"`
	// 金额
	Amount int64 `db:"amount"`
	// 手续费
	CsnAmount int64 `db:"csn_amount"`
	// 状态
	State int `db:"state"`
	// 创建时间
	CreateTime int64 `db:"create_time"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

商户余额日志

type BuyerGroup

type BuyerGroup struct {
	//编号
	GroupId int64
	//分组别名
	Name string
	// 是否启用零售
	EnableRetail bool
	// 是否启用批发
	EnableWholesale bool
	// 批发返点周期
	RebatePeriod int
}

全局客户分组

type ComplexMerchant

type ComplexMerchant struct {
	Id int32
	// 关联的会员编号,作为结算账户
	MemberId int64
	// 用户
	Usr string
	// 密码
	Pwd string
	// 商户名称
	Name string
	// 是否自营
	SelfSales int32
	// 商户等级
	Level int32
	Logo string
	// 公司名称
	CompanyName string
	// 省
	Province int32
	// 市
	City int32
	// 区
	District int32
	// 是否启用
	Enabled int32
	// 过期时间
	ExpiresTime int64
	// 注册时间
	JoinTime int64
	// 更新时间
	UpdateTime int64
	// 登录时间
	LoginTime int64
	// 最后登录时间
	LastLoginTime int64
}

商户

type EnterpriseInfo

type EnterpriseInfo struct {
	// 编号
	ID int32 `db:"id" pk:"yes" auto:"yes"`
	// 商户编号
	MchId int64 `db:"mch_id"`
	// 公司名称
	CompanyName string `db:"company_name"`
	// 公司营业执照编号
	CompanyNo string `db:"company_no"`
	// 法人
	PersonName string `db:"person_name"`
	// 法人身份证编号
	PersonIdNo string `db:"person_id"`
	// 身份证验证图片(人捧身份证照相)
	PersonImage string `db:"person_image"`
	// 公司电话
	Tel string `db:"tel"`
	// 省
	Province int32 `db:"province"`
	// 市
	City int32 `db:"city"`
	// 区
	District int32 `db:"district"`
	// 省+市+区字符串表示
	Location string `db:"location"`
	// 公司地址
	Address string `db:"address"`
	// 营业执照图片
	CompanyImage string `db:"company_image"`
	// 授权书
	AuthDoc string `db:"auth_doc"`
	//是否已审核
	Reviewed int32 `db:"review_state"`
	// 审核时间
	ReviewTime int64 `db:"review_time"`
	// 审核备注
	ReviewRemark string `db:"review_remark"`
	//更新时间
	UpdateTime int64 `db:"update_time"`
}

企业信息

type IAccount

type IAccount interface {
	// 获取领域对象编号
	GetDomainId() int64
	// 获取账户值
	GetValue() *Account
	// 保存
	Save() error
	// 根据编号获取余额变动信息
	GetBalanceLog(id int32) *BalanceLog
	// 根据号码获取余额变动信息
	GetBalanceLogByOuterNo(outerNo string) *BalanceLog
	// 保存余额变动信息
	SaveBalanceLog(*BalanceLog) (int32, error)
	// 订单结账
	SettleOrder(orderNo string, amount int, tradeFee int, refundAmount int, remark string) error
	// 支出
	TakePayment(outerNo string, amount int, csn int, remark string) error

	//todo: 以下需要重构或移除
	// 转到会员账户
	TransferToMember(amount int) error

	//商户积分转会员积分
	TransferToMember1(amount float32) error

	// 赠送
	Present(amount int, remark string) error

	// 充值
	Charge(kind int32, amount int, title, outerNo string,
		relateUser int64) error
}

账户

type IApiManager

type IApiManager interface {
	// 获取API信息,管理员可停用。
	GetApiInfo() ApiInfo

	// 保存API信息, 一般情况只有内部保存,其他为查看权限
	SaveApiInfo(*ApiInfo) error

	// 启用API权限
	EnableApiPerm() error

	// 禁用API权限
	DisableApiPerm() error
}

Api接口管理器

type IConfManager

type IConfManager interface {
	// 获取销售配置
	GetSaleConf() SaleConf
	// 保存销售配置
	SaveSaleConf(*SaleConf) error
	// 使用系统的配置并保存
	UseGlobSaleConf() error
	// 保存客户分组
	SaveMchBuyerGroup(v *MchBuyerGroupSetting) (int32, error)
	// 获取商户的全部客户分组
	SelectBuyerGroup() []*BuyerGroup
	// 根据分组编号获取分组设置
	GetGroupByGroupId(groupId int32) *MchBuyerGroupSetting
	// 获取所有的交易设置
	GetAllTradeConf_() []*TradeConf
	// 根据交易类型获取交易设置
	GetTradeConf(tradeType int) *TradeConf
	// 保存交易设置
	SaveTradeConf([]*TradeConf) error
}

type IKvManager

type IKvManager interface {
	// 获取
	Get(k string) string
	// 获取int类型的键值
	GetInt(k string) int
	// 设置
	Set(k, v string)
	// 获取多项
	Gets(k []string) map[string]string
	// 设置多项
	Sets(map[string]string) error
	// 根据关键字获取字典
	GetsByChar(keyword string) map[string]string
}

type ILevelManager

type ILevelManager interface {
	// 获取等级设置
	GetLevelSet() []*MemberLevel

	// 获取等级
	GetLevelById(id int32) *MemberLevel

	// 根据等级值获取等级
	GetLevelByValue(value int32) *MemberLevel

	// 获取下一个等级
	GetNextLevel(value int32) *MemberLevel

	// 删除等级
	DeleteLevel(id int32) error

	// 保存等级
	SaveLevel(*MemberLevel) (int32, error)

	// 根据经验值获取等级值
	GetLevelValueByExp(exp int32) int32

	// 初始化默认等级
	InitDefaultLevels() error
}

todo: 先不撤销, 商户也应对应有等级

type IMerchant

type IMerchant interface {
	// 获取编号
	GetAggregateRootId() int64
	GetValue() Merchant
	// 获取符合的商家信息
	Complex() *ComplexMerchant
	// 设置值
	SetValue(*Merchant) error
	// 获取商户的状态,判断 过期时间、判断是否停用。
	// 过期时间通常按: 试合作期,即1个月, 后面每年延长一次。或者会员付费开通。
	Stat() error
	// 设置商户启用或停用
	SetEnabled(enabled bool) error
	// 是否自营
	SelfSales() bool
	// 返回对应的会员编号
	Member() int64
	// 保存
	Save() (int64, error)
	// 获取商户的域名
	GetMajorHost() string
	// 获取商户账户
	Account() IAccount
	// 启用批发
	EnableWholesale() error
	// 获取批发商实例
	Wholesaler() wholesaler.IWholesaler
	// 返回用户服务
	UserManager() user.IUserManager
	// 返回设置服务
	ConfManager() IConfManager
	// 销售服务
	SaleManager() ISaleManager
	// 获取会员等级服务
	LevelManager() ILevelManager
	// 获取键值管理器
	KvManager() IKvManager
	// 企业资料服务
	ProfileManager() IProfileManager
	// API服务
	ApiManager() IApiManager
	// 商店服务
	ShopManager() shop.IShopManager
	// 获取会员键值管理器
	MemberKvManager() IKvManager
}

商户接口 todo: 实现商户等级,商户的品牌

type IMerchantManager

type IMerchantManager interface {
	// 创建会员申请商户密钥
	CreateSignUpToken(memberId int64) string

	// 根据商户申请密钥获取会员编号
	GetMemberFromSignUpToken(token string) int64

	// 提交商户注册信息
	CommitSignUpInfo(*MchSignUp) (int32, error)

	// 审核商户注册信息
	ReviewMchSignUp(id int32, pass bool, remark string) error

	// 获取商户申请信息
	GetSignUpInfo(id int32) *MchSignUp

	// 获取会员申请的商户信息
	GetSignUpInfoByMemberId(memberId int64) *MchSignUp

	// 获取会员关联的商户
	GetMerchantByMemberId(memberId int64) IMerchant

	// 删除会员的商户申请资料
	RemoveSignUp(memberId int64) error
}

type IMerchantRepo

type IMerchantRepo interface {
	// 获取商户管理器
	GetManager() IMerchantManager

	CreateMerchant(*Merchant) IMerchant

	// 创建会员申请商户密钥
	CreateSignUpToken(memberId int64) string

	// 根据商户申请密钥获取会员编号
	GetMemberFromSignUpToken(token string) int64

	// 获取商户的编号
	GetMerchantsId() []int32

	// 获取商户
	GetMerchant(id int) IMerchant
	// 根据登录用户名获取商户
	GetMerchantByLoginUser(user string) IMerchant
	// 获取合作商主要的域名主机
	GetMerchantMajorHost(mchId int) string

	// 保存
	SaveMerchant(*Merchant) (int, error)

	// 获取账户
	GetAccount(mchId int) *Account

	// 获取销售配置
	GetMerchantSaleConf(mchId int64) *SaleConf

	// 保存销售配置
	SaveMerchantSaleConf(v *SaleConf) error

	// 保存商户账户信息
	UpdateAccount(v *Account) error

	// 保存API信息
	SaveApiInfo(d *ApiInfo) error

	// 获取API信息
	GetApiInfo(mchId int) *ApiInfo

	// 根据API编号获取商户编号
	GetMerchantIdByApiId(apiId string) int64

	// 获取键值
	GetKeyValue(mchId int, indent string, k string) string

	// 设置键值
	SaveKeyValue(mchId int, indent string, k, v string, updateTime int64) error

	// 获取多个键值
	GetKeyMap(mchId int, indent string, k []string) map[string]string

	// 检查是否包含值的键数量,keyStr为键模糊匹配
	CheckKvContainValue(mchId int, indent string, value string, keyStr string) int

	// 根据关键字获取字典
	GetKeyMapByChar(mchId int, indent string, keyword string) map[string]string

	//获取等级
	GetLevel(mchId, levelValue int32) *MemberLevel

	// 获取下一个等级
	GetNextLevel(mchId, levelVal int32) *MemberLevel

	// 获取会员等级
	GetMemberLevels(mchId int64) []*MemberLevel

	// 删除会员等级
	DeleteMemberLevel(mchId, id int32) error

	// 保存等级
	SaveMemberLevel(mchId int64, v *MemberLevel) (int32, error)

	// Get MchEnterpriseInfo
	GetMchEnterpriseInfo(mchId int) *EnterpriseInfo
	// Save MchEnterpriseInfo
	SaveMchEnterpriseInfo(v *EnterpriseInfo) (int, error)

	// Get MchBuyerGroupSetting
	GetMchBuyerGroupByGroupId(mchId, groupId int32) *MchBuyerGroupSetting
	// Select MchBuyerGroupSetting
	SelectMchBuyerGroup(mchId int64) []*MchBuyerGroupSetting
	// Save MchBuyerGroupSetting
	SaveMchBuyerGroup(v *MchBuyerGroupSetting) (int, error)

	// auto generate by gof
	// Get MchTradeConf
	GetMchTradeConf(primary interface{}) *TradeConf
	// GetBy MchTradeConf
	GetMchTradeConfBy(where string, v ...interface{}) *TradeConf
	// Select MchTradeConf
	SelectMchTradeConf(where string, v ...interface{}) []*TradeConf
	// Save MchTradeConf
	SaveMchTradeConf(v *TradeConf) (int, error)
	// Delete MchTradeConf
	DeleteMchTradeConf(primary interface{}) error
	// 验证商户用户名是否存在
	CheckUserExists(user string, id int) bool
	// 验证会员是否绑定商户
	CheckMemberBind(memberId int64) bool
}

type IProfileManager

type IProfileManager interface {
	// 获取企业信息
	GetEnterpriseInfo() *EnterpriseInfo

	// 保存企业信息
	SaveEnterpriseInfo(v *EnterpriseInfo) (int32, error)

	// 标记企业为审核通过
	ReviewEnterpriseInfo(reviewed bool, message string) error

	// 修改密码
	ModifyPassword(NewPassword, oldPwd string) error
}

基本资料管理器

type ISaleManager

type ISaleManager interface {
	// 计算交易费用,返回交易费及错误
	MathTradeFee(tradeType int, amount int) (int, error)
}

商户销售服务

type MchBuyerGroupSetting

type MchBuyerGroupSetting struct {
	//编号
	ID int32 `db:"id" pk:"yes" auto:"yes"`
	//商家编号
	MerchantId int64 `db:"mch_id"`
	//客户分组编号
	GroupId int64 `db:"group_id"`
	//分组别名
	Alias string `db:"alias"`
	// 是否启用零售
	EnableRetail int32 `db:"enable_retail"`
	// 是否启用批发
	EnableWholesale int32 `db:"enable_wholesale"`
	// 批发返点周期
	RebatePeriod int32 `db:"rebate_period"`
}

商户客户分组设置

type MchDayChart

type MchDayChart struct {
	// 编号
	Id int32 `db:"id" pk:"yes" auto:"yes"`
	// 商户编号
	MchId int64 `db:"mch_id"`
	// 新增订单数量
	OrderNumber int `db:"order_number"`
	// 订单额
	OrderAmount float32 `db:"order_amount"`
	// 购物会员数
	BuyerNumber int `db:"buyer_number"`
	// 支付单数量
	PaidNumber int `db:"paid_number"`
	// 支付总金额
	PaidAmount float32 `db:"paid_amount"`
	// 完成订单数
	CompleteOrders int `db:"complete_orders"`
	// 入帐金额
	InAmount float32 `db:"in_amount"`
	// 线下订单数量
	OfflineOrders int `db:"offline_orders"`
	// 线下订单金额
	OfflineAmount float32 `db:"offline_amount"`
	// 日期
	Date int64 `db:"date"`
	// 日期字符串
	DateStr string `db:"date_str"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

商户每日报表

type MchSignUp

type MchSignUp struct {
	Id int32 `db:"id" pk:"yes" auth:"yes"`
	// 申请单号
	SignNo string `db:"sign_no"`
	// 会员编号
	MemberId int64 `db:"member_id"`
	// 用户名
	User string `db:"user"`
	// 密码
	Pwd string `db:"pwd"`
	// 盐
	Salt string `db:"salt"`
	// 商户名称号
	MchName string `db:"mch_name"`
	// 省
	Province int32 `db:"province"`
	// 市
	City int32 `db:"city"`
	// 区
	District int32 `db:"district"`
	// 详细地址
	Address string `db:"address"`
	// 店铺店铺
	ShopName string `db:"shop_name"`
	// 公司名称
	CompanyName string `db:"company_name"`
	// 营业执照编号
	CompanyNo string `db:"company_no"`
	// 法人
	PersonName string `db:"person_name"`
	// 法人身份证
	PersonId string `db:"person_id"`
	// 法人身份证
	PersonImage string `db:"person_image"`
	// 联系电话
	Phone string `db:"phone"`
	// 营业执照图片
	CompanyImage string `db:"company_image"`
	// 委托书
	AuthDoc string `db:"auth_doc"`
	// 备注
	Remark string `db:"remark"`
	// 提交时间
	SubmitTime int64 `db:"submit_time"`
	// 是否通过
	Reviewed int32 `db:"review_state"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

商户申请信息

type MemberLevel

type MemberLevel struct {
	Id         int32 `db:"id" auto:"yes" pk:"yes"`
	MerchantId int64 `db:"merchant_id"`
	// 等级值(1,2,4,8,16)
	Value      int32  `db:"value" `
	Name       string `db:"name"`
	RequireExp int32  `db:"require_exp"`
	Enabled    int    `db:"enabled"`
}

type Merchant

type Merchant struct {
	Id int64 `db:"id" pk:"yes" auto:"yes"`
	// 会员编号
	MemberId int64 `db:"member_id"`
	// 登录用户
	LoginUser string `db:"login_user"`
	// 登录密码
	LoginPwd string `db:"login_pwd"`
	// 加密盐
	Salt string `db:"salt"`
	// 名称
	Name string `db:"name"`
	// 公司名称
	CompanyName string `db:"company_name"`
	// 是否自营
	SelfSales int16 `db:"self_sales"`
	// 商户等级
	Level int `db:"level"`
	Logo string `db:"logo"`
	// 省
	Province int `db:"province"`
	// 市
	City int `db:"city"`
	// 区
	District int `db:"district"`
	// 标志
	Flag int `db:"flag"`
	// 是否启用
	Enabled int `db:"enabled"`
	// 创建时间
	CreateTime int64 `db:"create_time"`
	// 过期时间
	ExpiresTime int64 `db:"expires_time"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
	// 登录时间
	LoginTime int64 `db:"login_time"`
	// 最后登录时间
	LastLoginTime int64 `db:"last_login_time"`
}

商户

type SaleConf

type SaleConf struct {
	// 合作商编号
	MerchantId int64 `db:"mch_id" auto:"no" pk:"yes"`
	// 是否启用分销模式
	FxSalesEnabled int `db:"fx_sales"`
	// 返现比例,0则不返现
	CashBackPercent float32 `db:"cb_percent"`
	// 一级比例
	CashBackTg1Percent float32 `db:"cb_tg1_percent"`
	// 二级比例
	CashBackTg2Percent float32 `db:"cb_tg2_percent"`
	// 会员比例
	CashBackMemberPercent float32 `db:"cb_member_percent"`
	// 自动设置订单
	AutoSetupOrder int `db:"oa_open"`
	// 订单超时分钟数
	OrderTimeOutMinute int `db:"oa_timeout_minute"`
	// 订单自动确认时间
	OrderConfirmAfterMinute int `db:"oa_confirm_minute"`
	// 订单超时自动收货
	OrderTimeOutReceiveHour int `db:"oa_receive_hour"`
}

销售设置为商户填写,同时可以恢复默认

type TradeConf

type TradeConf struct {
	// 编号
	ID int64 `db:"id" pk:"yes" auto:"yes"`
	// 商户编号
	MchId int64 `db:"mch_id"`
	// 交易类型
	TradeType int `db:"trade_type"`
	// 交易方案,根据方案来自动调整比例
	PlanId int64 `db:"plan_id"`
	// 交易标志
	Flag int `db:"flag"`
	// 交易手续费依据,1:未设置 2:按金额 3:按比例
	AmountBasis int `db:"amount_basis"`
	// 交易费,按单笔收取
	TradeFee int `db:"trade_fee"`
	// 交易手续费比例
	TradeRate int `db:"trade_rate"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

商户交易设置

Directories

Path Synopsis
* * Copyright 2015 @ 56x.net.
* * Copyright 2015 @ 56x.net.
* * Copyright 2014 @ 56x.net.
* * Copyright 2014 @ 56x.net.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL