Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
80bdb1bb
Commit
80bdb1bb
authored
Nov 29, 2018
by
张振华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
guess
parent
9fe46fb1
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
594 additions
and
272 deletions
+594
-272
exec_local.go
plugin/dapp/guess/executor/exec_local.go
+38
-41
guess.go
plugin/dapp/guess/executor/guess.go
+115
-17
guessdb.go
plugin/dapp/guess/executor/guessdb.go
+106
-53
guess.proto
plugin/dapp/guess/proto/guess.proto
+21
-7
guess.pb.go
plugin/dapp/guess/types/guess.pb.go
+314
-154
No files found.
plugin/dapp/guess/executor/exec_local.go
View file @
80bdb1bb
...
...
@@ -6,62 +6,59 @@ package executor
import
(
"github.com/33cn/chain33/types"
pkt
"github.com/33cn/plugin/plugin/dapp/
pokerbull
/types"
pkt
"github.com/33cn/plugin/plugin/dapp/
guess
/types"
)
func
(
c
*
PokerBull
)
updateIndex
(
log
*
pkt
.
ReceiptPBGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
//先保存本次Action产生的索引
kvs
=
append
(
kvs
,
addPBGameStatusAndPlayer
(
log
.
Status
,
log
.
PlayerNum
,
log
.
Value
,
log
.
Index
,
log
.
GameId
))
kvs
=
append
(
kvs
,
addPBGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addPBGameAddrIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
func
(
c
*
Guess
)
updateIndex
(
log
*
pkt
.
ReceiptGuessGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
//新创建游戏
if
log
.
Status
==
pkt
.
GuessGameStatusStart
{
//kvs = append(kvs, addGuessGameAddrIndexKey(log.Status, log.Addr, log.GameId, log.Index))
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameId
,
log
.
Index
))
}
else
if
log
.
Status
==
pkt
.
GuessGameStatusBet
{
//如果是下注状态,则有用户进行了下注操作
kvs
=
append
(
kvs
,
addGuessGameAddrIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
/*
//状态更新
if log.Status == pkt.PBGameActionStart {
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionStart, log.PlayerNum, log.Value, log.Prev
Index))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionStart, log.PrevIndex))
}
if log.Status == pkt.PBGameActionContinue {
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionStart, log.PlayerNum, log.Value, log.PrevIndex))
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionContinue, log.PlayerNum, log.Value, log.PrevIndex))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionStart, log.Prev
Index))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionContinue, log.Prev
Index))
}
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameId
,
log
.
Index
))
//对于老状态进行删除
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
PreIndex
))
}
else
if
log
.
StatusChange
{
//其他状态时的状态发生变化,要将老状态对应的记录删除,同时加入新状态记录;对于每个地址的下注记录也需要遍历处理。
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameId
,
log
.
Index
))
if log.Status == pkt.PBGameActionQuit {
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionStart, log.PlayerNum, log.Value, log.PrevIndex))
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionContinue, log.PlayerNum, log.Value, log.PrevIndex))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionStart, log.PrevIndex))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionContinue, log.PrevIndex))
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
PreIndex
))
}*/
//结束一局,更新所有玩家地址状态
if
!
log
.
IsWaiting
{
for
_
,
v
:=
range
log
.
Players
{
if
v
!=
log
.
Addr
{
kvs
=
append
(
kvs
,
addGuessGameAddrIndexKey
(
log
.
Status
,
v
,
log
.
GameId
,
log
.
Index
))
}
kvs
=
append
(
kvs
,
delPBGameAddrIndexKey
(
v
,
log
.
PrevIndex
))
//从game中遍历每个地址的记录进行新增和删除
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
Index
))
}
kvs
=
append
(
kvs
,
delPBGameStatusAndPlayer
(
log
.
PreStatus
,
log
.
PlayerNum
,
log
.
Value
,
log
.
PrevIndex
))
kvs
=
append
(
kvs
,
delPBGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PrevIndex
))
}
return
kvs
}
func
(
c
*
PokerBull
)
execLocal
(
receipt
*
types
.
ReceiptData
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
execLocal
(
receipt
*
types
.
ReceiptData
)
(
*
types
.
LocalDBSet
,
error
)
{
dbSet
:=
&
types
.
LocalDBSet
{}
if
receipt
.
GetTy
()
!=
types
.
ExecOk
{
return
dbSet
,
nil
}
for
i
:=
0
;
i
<
len
(
receipt
.
Logs
);
i
++
{
item
:=
receipt
.
Logs
[
i
]
if
item
.
Ty
==
pkt
.
TyLogPBGameStart
||
item
.
Ty
==
pkt
.
TyLogPBGameContinue
||
item
.
Ty
==
pkt
.
TyLogPBGameQui
t
{
var
Gamelog
pkt
.
Receipt
PB
Game
if
item
.
Ty
>=
pkt
.
TyLogGuessGameStart
&&
item
.
Ty
<=
pkt
.
TyLogGuessGameTimeou
t
{
var
Gamelog
pkt
.
Receipt
Guess
Game
err
:=
types
.
Decode
(
item
.
Log
,
&
Gamelog
)
if
err
!=
nil
{
panic
(
err
)
//数据错误了,已经被修改了
...
...
@@ -73,14 +70,14 @@ func (c *PokerBull) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, er
return
dbSet
,
nil
}
func
(
c
*
PokerBull
)
ExecLocal_Start
(
payload
*
pkt
.
PBGameStart
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
ExecLocal_Start
(
payload
*
pkt
.
PBGameStart
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
return
c
.
execLocal
(
receiptData
)
}
func
(
c
*
PokerBull
)
ExecLocal_Continue
(
payload
*
pkt
.
PBGameContinue
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
ExecLocal_Continue
(
payload
*
pkt
.
PBGameContinue
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
return
c
.
execLocal
(
receiptData
)
}
func
(
c
*
PokerBull
)
ExecLocal_Quit
(
payload
*
pkt
.
PBGameQuit
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
ExecLocal_Quit
(
payload
*
pkt
.
PBGameQuit
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
return
c
.
execLocal
(
receiptData
)
}
plugin/dapp/guess/executor/guess.go
View file @
80bdb1bb
...
...
@@ -45,43 +45,101 @@ func (g *Guess) GetDriverName() string {
return
pkt
.
GuessX
}
//addr prefix
func
calcGuessGameAddrPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:"
,
addr
)
return
[]
byte
(
key
)
}
//addr index
func
calcGuessGameAddrKey
(
addr
string
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:%018d"
,
addr
,
index
)
return
[]
byte
(
key
)
}
//status prefix
func
calcGuessGameStatusPrefix
(
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:"
,
status
)
return
[]
byte
(
key
)
}
//status index
func
calcGuessGameStatusKey
(
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:%018d"
,
status
,
index
)
return
[]
byte
(
key
)
}
func
calcGuessGameStatusAndPlayerKey
(
category
string
,
status
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status:%s:%d:%018d"
,
category
,
status
,
index
)
//addr status prefix
func
calcGuessGameAddrStatusPrefix
(
addr
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr-status-index:%s:%d:"
,
addr
,
status
)
return
[]
byte
(
key
)
}
func
calcGuessGameStatusAndPlayerPrefix
(
category
string
,
status
int32
)
[]
byte
{
var
key
string
key
=
fmt
.
Sprintf
(
"LODB-guess-category-status:%s:%d"
,
category
,
status
)
//addr status index
func
calcGuessGameAddrStatusKey
(
addr
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr-status-index:%s:%d:%018d"
,
addr
,
status
,
index
)
return
[]
byte
(
key
)
}
//admin prefix
func
calcGuessGameAdminPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin:%s:"
,
addr
)
return
[]
byte
(
key
)
}
//admin index
func
calcGuessGameAdminKey
(
addr
string
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin:%s:%018d"
,
addr
,
index
)
return
[]
byte
(
key
)
}
//admin status prefix
func
calcGuessGameAdminStatusPrefix
(
admin
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin-status-index:%s:%d:"
,
admin
,
status
)
return
[]
byte
(
key
)
}
//admin status index
func
calcGuessGameAdminStatusKey
(
admin
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin-status-index:%s:%d:%018d"
,
admin
,
status
,
index
)
return
[]
byte
(
key
)
}
func
calcGuessGameCategoryStatusPrefix
(
category
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status-index:%s:%d:"
,
category
,
status
)
return
[]
byte
(
key
)
}
func
calcGuessGameCategoryStatusKey
(
category
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status-index:%s:%d:%018d"
,
category
,
status
,
index
)
return
[]
byte
(
key
)
}
func
addGuessGameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAddrIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameStatusIndexKey
(
status
int32
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameStatusKey
(
status
,
index
)
record
:=
&
pkt
.
PBGameIndex
Record
{
record
:=
&
pkt
.
GuessGame
Record
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
...
...
@@ -95,10 +153,10 @@ func delGuessGameStatusIndexKey(status int32, index int64) *types.KeyValue {
return
kv
}
func
addGuessGameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
func
addGuessGameAddr
Status
IndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddr
Key
(
addr
,
index
)
record
:=
&
pkt
.
PB
GameRecord
{
kv
.
Key
=
calcGuessGameAddr
StatusKey
(
addr
,
status
,
index
)
record
:=
&
pkt
.
Guess
GameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
...
...
@@ -107,27 +165,66 @@ func addGuessGameAddrIndexKey(status int32, addr, gameID string, index int64) *t
return
kv
}
func
delGuessGameAddr
IndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
func
delGuessGameAddr
StatusIndexKey
(
status
int32
,
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddr
Key
(
addr
,
index
)
kv
.
Key
=
calcGuessGameAddr
StatusKey
(
addr
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addPBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
,
gameId
string
)
*
types
.
KeyValue
{
func
addGuessGameAdminIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminKey
(
addr
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAdminIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
record
:=
&
pkt
.
PBGameIndexRecord
{
GameId
:
gameId
,
kv
.
Key
=
calcGuessGameAdminKey
(
addr
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameAdminStatusIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminStatusKey
(
addr
,
status
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAdminStatusIndexKey
(
status
int32
,
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminStatusKey
(
addr
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameCategoryStatusIndexKey
(
status
int32
,
category
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameCategoryStatusKey
(
category
,
status
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
del
PBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
)
*
types
.
KeyValue
{
func
del
GuessGameCategoryStatusIndexKey
(
status
int32
,
category
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGame
StatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Key
=
calcGuessGame
CategoryStatusKey
(
category
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
\ No newline at end of file
plugin/dapp/guess/executor/guessdb.go
View file @
80bdb1bb
...
...
@@ -207,7 +207,7 @@ func (action *Action) getIndex() int64 {
return
action
.
height
*
types
.
MaxTxsPerBlock
+
int64
(
action
.
index
)
}
func
(
action
*
Action
)
GetReceiptLog
(
game
*
pkt
.
GuessGame
)
*
types
.
ReceiptLog
{
func
(
action
*
Action
)
GetReceiptLog
(
game
*
pkt
.
GuessGame
,
statusChange
bool
)
*
types
.
ReceiptLog
{
log
:=
&
types
.
ReceiptLog
{}
r
:=
&
pkt
.
ReceiptGuessGame
{}
r
.
Addr
=
action
.
fromaddr
...
...
@@ -225,8 +225,13 @@ func (action *Action) GetReceiptLog(game *pkt.GuessGame) *types.ReceiptLog {
log
.
Ty
=
pkt
.
TyLogGuessGameTimeout
}
r
.
Index
=
game
.
Index
r
.
GameId
=
game
.
GameId
r
.
Status
=
game
.
Status
r
.
AdminAddr
=
game
.
AdminAddr
r
.
PreStatus
=
game
.
PreStatus
r
.
StatusChange
=
statusChange
r
.
PreIndex
=
game
.
PreIndex
log
.
Log
=
types
.
Encode
(
r
)
return
log
}
...
...
@@ -456,8 +461,7 @@ func (action *Action) genTxRnd(txhash []byte) (int64, error) {
// 新建一局游戏
func
(
action
*
Action
)
newGame
(
gameId
string
,
start
*
pkt
.
GuessGameStart
)
(
*
pkt
.
GuessGame
,
error
)
{
var
game
*
pkt
.
GuessGame
game
=
&
pkt
.
GuessGame
{
game
:=
&
pkt
.
GuessGame
{
GameId
:
gameId
,
Status
:
pkt
.
GuessGameActionStart
,
//StartTime: action.blocktime,
...
...
@@ -507,7 +511,8 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
return
nil
,
types
.
ErrInvalidParam
}
if
_
,
ok
:=
getOptions
(
start
.
Options
);
!
ok
{
options
,
ok
:=
GetOptions
(
start
.
Options
)
if
!
ok
{
logger
.
Error
(
"GameStart"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"err"
,
fmt
.
Sprintf
(
"The options is illegal:%s"
,
start
.
Options
))
return
nil
,
types
.
ErrInvalidParam
...
...
@@ -536,16 +541,23 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
}
gameId
:=
common
.
ToHex
(
action
.
txhash
)
var
game
*
pkt
.
GuessGame
=
nil
game
,
err
:=
action
.
newGame
(
gameId
,
start
)
if
err
!=
nil
{
return
nil
,
err
}
game
.
StartTime
=
action
.
blocktime
game
.
AdminAddr
=
action
.
fromaddr
game
.
PreIndex
=
0
game
.
Index
=
action
.
getIndex
()
game
.
Status
=
pkt
.
GuessGameStatusStart
receiptLog
:=
action
.
GetReceiptLog
(
game
)
game
.
BetStat
.
TotalBetTimes
=
0
game
.
BetStat
.
TotalBetsNumber
=
0
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
item
:=
&
pkt
.
GuessBetStatItem
{
Option
:
options
[
i
],
BetsNumber
:
0
,
BetsTimes
:
0
}
game
.
BetStat
.
Items
=
append
(
game
.
BetStat
.
Items
,
item
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
,
false
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
...
@@ -582,6 +594,7 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
return
nil
,
err
}
prevStatus
:=
game
.
Status
if
game
.
Status
!=
pkt
.
GuessGameStatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatusStopBet
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
game
.
GetStatus
())
...
...
@@ -591,25 +604,28 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
canBet
:=
action
.
RefreshStatusByTime
(
game
)
if
canBet
==
false
{
receiptLog
:=
action
.
GetReceiptLog
(
game
)
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
game
.
Status
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
}
else
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
}
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
//如果当前游戏状态可以下注,统一设定游戏状态为GuessGameStatusBet
game
.
Status
=
pkt
.
GuessGameStatusBet
//检查竞猜选项是否合法
options
,
legal
:=
g
etOptions
(
game
.
GetOptions
())
options
,
legal
:=
G
etOptions
(
game
.
GetOptions
())
if
!
legal
||
len
(
options
)
==
0
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
game
.
GetOptions
())
return
nil
,
types
.
ErrInvalidParam
}
if
!
i
sLegalOption
(
options
,
pbBet
.
GetOption
())
{
if
!
I
sLegalOption
(
options
,
pbBet
.
GetOption
())
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
pbBet
.
GetOption
())
return
nil
,
types
.
ErrInvalidParam
...
...
@@ -639,33 +655,44 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
logger
.
Error
(
"GameCreate.ExecFrozen"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
checkValue
,
"err"
,
err
.
Error
())
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
bet
:=
&
pkt
.
GuessBet
{
Option
:
pbBet
.
GetOption
(),
BetsNumber
:
pbBet
.
BetsNum
}
player
:=
&
pkt
.
GuessPlayer
{
Addr
:
action
.
fromaddr
,
Bet
:
bet
}
game
.
Plays
=
append
(
game
.
Plays
,
player
)
//如果当前游戏状态可以下注,统一设定游戏状态为GuessGameStatusBet
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusBet
)
action
.
AddGuessBet
(
game
,
pbBet
)
exist
:=
false
for
i
:=
0
;
i
<
len
(
game
.
Bets
);
i
++
{
if
game
.
Bets
[
i
]
.
Option
==
pbBet
.
GetOption
()
{
exist
=
true
game
.
Bets
[
i
]
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
}
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
game
.
Status
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
}
else
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
}
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
if
!
exist
{
game
.
Bets
=
append
(
game
.
Bets
,
bet
)
}
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
game
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
func
(
action
*
Action
)
AddGuessBet
(
game
*
pkt
.
GuessGame
,
pbBet
*
pkt
.
GuessGameBet
)
{
bet
:=
&
pkt
.
GuessBet
{
Option
:
pbBet
.
GetOption
(),
BetsNumber
:
pbBet
.
BetsNum
,
Index
:
game
.
Index
}
player
:=
&
pkt
.
GuessPlayer
{
Addr
:
action
.
fromaddr
,
Bet
:
bet
}
game
.
Plays
=
append
(
game
.
Plays
,
player
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
for
i
:=
0
;
i
<
len
(
game
.
BetStat
.
Items
);
i
++
{
if
game
.
BetStat
.
Items
[
i
]
.
Option
==
pbBet
.
GetOption
()
{
//针对具体选项更新统计项
game
.
BetStat
.
Items
[
i
]
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
game
.
BetStat
.
Items
[
i
]
.
BetsTimes
++
receiptLog
:=
action
.
GetReceiptLog
(
game
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
//更新整体统计
game
.
BetStat
.
TotalBetsNumber
+=
pbBet
.
GetBetsNum
()
game
.
BetStat
.
TotalBetTimes
++
break
}
}
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
game
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
}
func
(
action
*
Action
)
GamePublish
(
publish
*
pkt
.
GuessGamePublish
)
(
*
types
.
Receipt
,
error
)
{
...
...
@@ -686,6 +713,7 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
return
nil
,
types
.
ErrInvalidParam
}
prevStatus
:=
game
.
Status
if
game
.
Status
!=
pkt
.
GuessGameStatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatusStopBet
{
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
game
.
GetStatus
())
...
...
@@ -693,20 +721,19 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
}
//检查竞猜选项是否合法
options
,
legal
:=
g
etOptions
(
game
.
GetOptions
())
options
,
legal
:=
G
etOptions
(
game
.
GetOptions
())
if
!
legal
||
len
(
options
)
==
0
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
game
.
GetOptions
())
return
nil
,
types
.
ErrInvalidParam
}
if
!
i
sLegalOption
(
options
,
publish
.
GetResult
())
{
if
!
I
sLegalOption
(
options
,
publish
.
GetResult
())
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
publish
.
GetResult
())
return
nil
,
types
.
ErrInvalidParam
}
game
.
Status
=
pkt
.
GuessGameStatusPublish
game
.
Result
=
publish
.
Result
//先遍历所有下注数据,对于输家,转移资金到Admin账户合约地址;
...
...
@@ -723,14 +750,15 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusPublish
)
//计算竞猜正确的筹码总数
totalBetsNumber
:=
uint32
(
0
)
totalBetsNumber
:=
game
.
BetStat
.
TotalBetsNumber
winBetsNumber
:=
uint32
(
0
)
for
j
:=
0
;
j
<
len
(
game
.
Bets
);
j
++
{
if
game
.
Bets
[
j
]
.
Option
==
game
.
Result
{
winBetsNumber
=
game
.
Bets
[
j
]
.
BetsNumber
for
j
:=
0
;
j
<
len
(
game
.
Bet
Stat
.
Item
s
);
j
++
{
if
game
.
Bet
Stat
.
Item
s
[
j
]
.
Option
==
game
.
Result
{
winBetsNumber
=
game
.
Bet
Stat
.
Item
s
[
j
]
.
BetsNumber
}
totalBetsNumber
+=
game
.
Bets
[
j
]
.
BetsNumber
}
//再遍历赢家,按照投注占比分配所有筹码
...
...
@@ -763,7 +791,12 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
)
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
game
.
Status
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
}
else
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
}
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
...
@@ -781,6 +814,14 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
return
nil
,
err
}
if
game
.
Status
==
pkt
.
GuessGameStatusPublish
||
game
.
Status
==
pkt
.
GuessGameStatusAbort
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"game status not allow abort"
,
game
.
Status
)
return
nil
,
err
}
preStatus
:=
game
.
Status
//根据区块链高度或时间刷新游戏状态。
action
.
RefreshStatusByTime
(
game
)
...
...
@@ -805,16 +846,21 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
if
game
.
Status
!=
preStatus
{
//说明action.RefreshStatusByTime(game)调用时已经更新过状态和index了,这里直接再改状态就行了。
game
.
Status
=
pkt
.
GuessGameStatusAbort
game
.
Index
=
action
.
getIndex
(
game
)
}
else
{
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusAbort
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
,
true
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
func
g
etOptions
(
strOptions
string
)
(
options
[]
string
,
legal
bool
){
func
G
etOptions
(
strOptions
string
)
(
options
[]
string
,
legal
bool
){
legal
=
true
items
:=
strings
.
Split
(
strOptions
,
";"
)
for
i
:=
0
;
i
<
len
(
items
);
i
++
{
...
...
@@ -832,7 +878,7 @@ func getOptions(strOptions string) (options []string, legal bool){
return
options
,
legal
}
func
i
sLegalOption
(
options
[]
string
,
option
string
)
bool
{
func
I
sLegalOption
(
options
[]
string
,
option
string
)
bool
{
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
if
options
[
i
]
==
option
{
return
true
...
...
@@ -842,15 +888,25 @@ func isLegalOption(options []string, option string) bool {
return
false
}
func
(
action
*
Action
)
ChangeStatus
(
game
*
pkt
.
GuessGame
,
destStatus
uint32
)
{
if
game
.
Status
!=
destStatus
{
game
.
PreStatus
=
game
.
Status
game
.
PreIndex
=
game
.
Index
game
.
Status
=
destStatus
game
.
Index
=
action
.
getIndex
()
}
return
}
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
(
canBet
bool
)
{
// 检查区块高度是否超过最大下注高度限制,看是否可以下注
if
game
.
GetMaxHeight
()
<=
action
.
height
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
action
.
height
,
"MaxHeight"
,
game
.
GetMaxHeight
())
if
game
.
GetExpireHeight
()
>
action
.
height
{
game
.
Status
=
pkt
.
GuessGameStatusStopBet
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusStopBet
)
}
else
{
game
.
Status
=
pkt
.
GuessGameStatusTimeOut
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusTimeOut
)
}
canBet
=
false
...
...
@@ -881,9 +937,9 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) (canBet bool) {
game
.
GetMaxTime
())
if
tNow
.
After
(
tExpire
)
{
game
.
Status
=
pkt
.
GuessGameStatusTimeOut
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusTimeOut
)
}
else
{
game
.
Status
=
pkt
.
GuessGameStatusStopBet
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusStopBet
)
}
canBet
=
false
...
...
@@ -896,16 +952,13 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) (canBet bool) {
}
func
(
action
*
Action
)
CheckTime
(
start
*
pkt
.
GuessGameStart
)
bool
{
MinBetTimeInterval
=
2
//2h
MinBetTimeoutInterval
=
24
//24h
if
action
.
height
+
MinBetBlockNum
>
start
.
MaxHeight
||
start
.
MaxHeight
+
MinBetTimeoutNum
>
start
.
ExpireHeight
{
return
false
}
tNow
:=
time
.
Now
()
d1
,
_
:=
time
.
ParseDuration
(
MinBetTimeInterval
)
d2
,
_
:=
time
.
ParseDuration
(
MinBetTimeoutInterval
)
d1
,
_
:=
time
.
ParseDuration
(
MinBetTimeInterval
)
//最短开奖时间
d2
,
_
:=
time
.
ParseDuration
(
MinBetTimeoutInterval
)
//最短游戏过期时间
if
len
(
start
.
GetMaxTime
())
==
0
{
tNow
.
Add
(
d1
)
start
.
MaxTime
=
tNow
.
Format
(
"2006-01-02 15:04:05"
)
...
...
plugin/dapp/guess/proto/guess.proto
View file @
80bdb1bb
...
...
@@ -21,15 +21,15 @@ message GuessGame {
uint32
oneBet
=
13
;
//一注等于多少bty或者token
uint32
maxBets
=
14
;
//单次可以下多少注,默认100
uint32
maxBetsNumber
=
15
;
//最多可以下多少注
uint
32
fee
=
16
;
//收取费用,不带则表示不收费
uint
64
fee
=
16
;
//收取费用,不带则表示不收费
string
feeAddr
=
17
;
//收费地址
string
expire
=
18
;
//游戏过期时间
int64
expireHeight
=
19
;
//游戏过期区块高度
string
adminAddr
=
20
;
//游戏创建者地址,只有该地址可以开奖
uint32
betsNumber
=
21
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
repeated
GuessPlayer
plays
=
22
;
//参与游戏下注的玩家投注信息
string
result
=
23
;
repeated
GuessBet
bets
=
24
;
string
result
=
23
;
//公布的中奖结果
GuessBetStat
betStat
=
24
;
int64
index
=
25
;
int64
preIndex
=
26
;
}
...
...
@@ -48,7 +48,17 @@ message GuessBet {
int64
preIndex
=
6
;
}
message
GuessBetStat
{
uint32
totalBetTimes
=
1
;
uint32
totalBetsNumber
=
2
;
repeated
GuessBetStatItem
items
=
3
;
}
message
GuessBetStatItem
{
string
option
=
1
;
uint32
betsNumber
=
2
;
uint32
betsTimes
=
3
;
}
//斗牛游戏内容
message
PokerBull
{
...
...
@@ -264,12 +274,16 @@ message ReceiptPBGame {
message
ReceiptGuessGame
{
string
gameId
=
1
;
uint32
status
=
2
;
string
addr
=
3
;
int64
index
=
4
;
uint32
preStatus
=
2
;
uint32
status
=
3
;
string
addr
=
4
;
string
adminAddr
=
5
;
int64
preIndex
=
6
;
int64
index
=
7
;
string
category
=
8
;
bool
statusChange
=
9
;
}
message
GuessStartTxReq
{
string
topic
=
1
;
string
options
=
2
;
...
...
plugin/dapp/guess/types/guess.pb.go
View file @
80bdb1bb
...
...
@@ -40,7 +40,7 @@ type GuessGame struct {
OneBet
uint32
`protobuf:"varint,13,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
MaxBets
uint32
`protobuf:"varint,14,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,15,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
Fee
uint
32
`protobuf:"varint,16,opt,name=fee,proto3" json:"fee,omitempty"`
Fee
uint
64
`protobuf:"varint,16,opt,name=fee,proto3" json:"fee,omitempty"`
FeeAddr
string
`protobuf:"bytes,17,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
Expire
string
`protobuf:"bytes,18,opt,name=expire,proto3" json:"expire,omitempty"`
ExpireHeight
int64
`protobuf:"varint,19,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
...
...
@@ -48,7 +48,7 @@ type GuessGame struct {
BetsNumber
uint32
`protobuf:"varint,21,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,22,rep,name=plays,proto3" json:"plays,omitempty"`
Result
string
`protobuf:"bytes,23,opt,name=result,proto3" json:"result,omitempty"`
Bet
s
[]
*
GuessBet
`protobuf:"bytes,24,rep,name=bets,proto3" json:"bets
,omitempty"`
Bet
Stat
*
GuessBetStat
`protobuf:"bytes,24,opt,name=betStat,proto3" json:"betStat
,omitempty"`
Index
int64
`protobuf:"varint,25,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,26,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
...
@@ -186,7 +186,7 @@ func (m *GuessGame) GetMaxBetsNumber() uint32 {
return
0
}
func
(
m
*
GuessGame
)
GetFee
()
uint
32
{
func
(
m
*
GuessGame
)
GetFee
()
uint
64
{
if
m
!=
nil
{
return
m
.
Fee
}
...
...
@@ -242,9 +242,9 @@ func (m *GuessGame) GetResult() string {
return
""
}
func
(
m
*
GuessGame
)
GetBet
s
()
[]
*
GuessBe
t
{
func
(
m
*
GuessGame
)
GetBet
Stat
()
*
GuessBetSta
t
{
if
m
!=
nil
{
return
m
.
Bet
s
return
m
.
Bet
Stat
}
return
nil
}
...
...
@@ -389,6 +389,116 @@ func (m *GuessBet) GetPreIndex() int64 {
return
0
}
type
GuessBetStat
struct
{
TotalBetTimes
uint32
`protobuf:"varint,1,opt,name=totalBetTimes,proto3" json:"totalBetTimes,omitempty"`
TotalBetsNumber
uint32
`protobuf:"varint,2,opt,name=totalBetsNumber,proto3" json:"totalBetsNumber,omitempty"`
Items
[]
*
GuessBetStatItem
`protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GuessBetStat
)
Reset
()
{
*
m
=
GuessBetStat
{}
}
func
(
m
*
GuessBetStat
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetStat
)
ProtoMessage
()
{}
func
(
*
GuessBetStat
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
}
}
func
(
m
*
GuessBetStat
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GuessBetStat
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GuessBetStat
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GuessBetStat
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GuessBetStat
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GuessBetStat
.
Merge
(
m
,
src
)
}
func
(
m
*
GuessBetStat
)
XXX_Size
()
int
{
return
xxx_messageInfo_GuessBetStat
.
Size
(
m
)
}
func
(
m
*
GuessBetStat
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GuessBetStat
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GuessBetStat
proto
.
InternalMessageInfo
func
(
m
*
GuessBetStat
)
GetTotalBetTimes
()
uint32
{
if
m
!=
nil
{
return
m
.
TotalBetTimes
}
return
0
}
func
(
m
*
GuessBetStat
)
GetTotalBetsNumber
()
uint32
{
if
m
!=
nil
{
return
m
.
TotalBetsNumber
}
return
0
}
func
(
m
*
GuessBetStat
)
GetItems
()
[]
*
GuessBetStatItem
{
if
m
!=
nil
{
return
m
.
Items
}
return
nil
}
type
GuessBetStatItem
struct
{
Option
string
`protobuf:"bytes,1,opt,name=option,proto3" json:"option,omitempty"`
BetsNumber
uint32
`protobuf:"varint,2,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
BetsTimes
uint32
`protobuf:"varint,3,opt,name=betsTimes,proto3" json:"betsTimes,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GuessBetStatItem
)
Reset
()
{
*
m
=
GuessBetStatItem
{}
}
func
(
m
*
GuessBetStatItem
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetStatItem
)
ProtoMessage
()
{}
func
(
*
GuessBetStatItem
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
}
}
func
(
m
*
GuessBetStatItem
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GuessBetStatItem
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GuessBetStatItem
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GuessBetStatItem
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GuessBetStatItem
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GuessBetStatItem
.
Merge
(
m
,
src
)
}
func
(
m
*
GuessBetStatItem
)
XXX_Size
()
int
{
return
xxx_messageInfo_GuessBetStatItem
.
Size
(
m
)
}
func
(
m
*
GuessBetStatItem
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GuessBetStatItem
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GuessBetStatItem
proto
.
InternalMessageInfo
func
(
m
*
GuessBetStatItem
)
GetOption
()
string
{
if
m
!=
nil
{
return
m
.
Option
}
return
""
}
func
(
m
*
GuessBetStatItem
)
GetBetsNumber
()
uint32
{
if
m
!=
nil
{
return
m
.
BetsNumber
}
return
0
}
func
(
m
*
GuessBetStatItem
)
GetBetsTimes
()
uint32
{
if
m
!=
nil
{
return
m
.
BetsTimes
}
return
0
}
//斗牛游戏内容
type
PokerBull
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
...
...
@@ -416,7 +526,7 @@ func (m *PokerBull) Reset() { *m = PokerBull{} }
func
(
m
*
PokerBull
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PokerBull
)
ProtoMessage
()
{}
func
(
*
PokerBull
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
5
}
}
func
(
m
*
PokerBull
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -565,7 +675,7 @@ func (m *PBHand) Reset() { *m = PBHand{} }
func
(
m
*
PBHand
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBHand
)
ProtoMessage
()
{}
func
(
*
PBHand
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
6
}
}
func
(
m
*
PBHand
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -636,7 +746,7 @@ func (m *PBPlayer) Reset() { *m = PBPlayer{} }
func
(
m
*
PBPlayer
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBPlayer
)
ProtoMessage
()
{}
func
(
*
PBPlayer
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
7
}
}
func
(
m
*
PBPlayer
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -701,7 +811,7 @@ func (m *PBResult) Reset() { *m = PBResult{} }
func
(
m
*
PBResult
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBResult
)
ProtoMessage
()
{}
func
(
*
PBResult
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
8
}
}
func
(
m
*
PBResult
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -770,7 +880,7 @@ func (m *PBPoker) Reset() { *m = PBPoker{} }
func
(
m
*
PBPoker
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBPoker
)
ProtoMessage
()
{}
func
(
*
PBPoker
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
9
}
}
func
(
m
*
PBPoker
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -823,7 +933,7 @@ func (m *PBGameAction) Reset() { *m = PBGameAction{} }
func
(
m
*
PBGameAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameAction
)
ProtoMessage
()
{}
func
(
*
PBGameAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
8
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
10
}
}
func
(
m
*
PBGameAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1039,7 +1149,7 @@ func (m *PBGameStart) Reset() { *m = PBGameStart{} }
func
(
m
*
PBGameStart
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameStart
)
ProtoMessage
()
{}
func
(
*
PBGameStart
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
9
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
11
}
}
func
(
m
*
PBGameStart
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1086,7 +1196,7 @@ func (m *PBGameContinue) Reset() { *m = PBGameContinue{} }
func
(
m
*
PBGameContinue
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameContinue
)
ProtoMessage
()
{}
func
(
*
PBGameContinue
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
2
}
}
func
(
m
*
PBGameContinue
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1126,7 +1236,7 @@ func (m *PBGameQuit) Reset() { *m = PBGameQuit{} }
func
(
m
*
PBGameQuit
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameQuit
)
ProtoMessage
()
{}
func
(
*
PBGameQuit
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
3
}
}
func
(
m
*
PBGameQuit
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1166,7 +1276,7 @@ func (m *PBGameQuery) Reset() { *m = PBGameQuery{} }
func
(
m
*
PBGameQuery
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameQuery
)
ProtoMessage
()
{}
func
(
*
PBGameQuery
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
4
}
}
func
(
m
*
PBGameQuery
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1213,7 +1323,7 @@ func (m *GuessGameAction) Reset() { *m = GuessGameAction{} }
func
(
m
*
GuessGameAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameAction
)
ProtoMessage
()
{}
func
(
*
GuessGameAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
5
}
}
func
(
m
*
GuessGameAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1473,7 +1583,7 @@ func (m *GuessGameStart) Reset() { *m = GuessGameStart{} }
func
(
m
*
GuessGameStart
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameStart
)
ProtoMessage
()
{}
func
(
*
GuessGameStart
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
6
}
}
func
(
m
*
GuessGameStart
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1606,7 +1716,7 @@ func (m *GuessGameBet) Reset() { *m = GuessGameBet{} }
func
(
m
*
GuessGameBet
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameBet
)
ProtoMessage
()
{}
func
(
*
GuessGameBet
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
7
}
}
func
(
m
*
GuessGameBet
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1660,7 +1770,7 @@ func (m *GuessGameAbort) Reset() { *m = GuessGameAbort{} }
func
(
m
*
GuessGameAbort
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameAbort
)
ProtoMessage
()
{}
func
(
*
GuessGameAbort
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
8
}
}
func
(
m
*
GuessGameAbort
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1701,7 +1811,7 @@ func (m *GuessGamePublish) Reset() { *m = GuessGamePublish{} }
func
(
m
*
GuessGamePublish
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGamePublish
)
ProtoMessage
()
{}
func
(
*
GuessGamePublish
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
9
}
}
func
(
m
*
GuessGamePublish
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1749,7 +1859,7 @@ func (m *GuessGameQuery) Reset() { *m = GuessGameQuery{} }
func
(
m
*
GuessGameQuery
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameQuery
)
ProtoMessage
()
{}
func
(
*
GuessGameQuery
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
18
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
20
}
}
func
(
m
*
GuessGameQuery
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1798,7 +1908,7 @@ func (m *QueryPBGameListByStatusAndPlayerNum) Reset() { *m = QueryPBGame
func
(
m
*
QueryPBGameListByStatusAndPlayerNum
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryPBGameListByStatusAndPlayerNum
)
ProtoMessage
()
{}
func
(
*
QueryPBGameListByStatusAndPlayerNum
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
19
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
21
}
}
func
(
m
*
QueryPBGameListByStatusAndPlayerNum
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1854,7 +1964,7 @@ func (m *PBGameRecord) Reset() { *m = PBGameRecord{} }
func
(
m
*
PBGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameRecord
)
ProtoMessage
()
{}
func
(
*
PBGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
2
}
}
func
(
m
*
PBGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1908,7 +2018,7 @@ func (m *PBGameIndexRecord) Reset() { *m = PBGameIndexRecord{} }
func
(
m
*
PBGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
PBGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
3
}
}
func
(
m
*
PBGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1954,7 +2064,7 @@ func (m *PBGameRecords) Reset() { *m = PBGameRecords{} }
func
(
m
*
PBGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameRecords
)
ProtoMessage
()
{}
func
(
*
PBGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
4
}
}
func
(
m
*
PBGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1996,7 +2106,7 @@ func (m *QueryPBGameInfo) Reset() { *m = QueryPBGameInfo{} }
func
(
m
*
QueryPBGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryPBGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryPBGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
5
}
}
func
(
m
*
QueryPBGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2056,7 +2166,7 @@ func (m *ReplyPBGame) Reset() { *m = ReplyPBGame{} }
func
(
m
*
ReplyPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyPBGame
)
ProtoMessage
()
{}
func
(
*
ReplyPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
6
}
}
func
(
m
*
ReplyPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2095,7 +2205,7 @@ func (m *QueryPBGameInfos) Reset() { *m = QueryPBGameInfos{} }
func
(
m
*
QueryPBGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryPBGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryPBGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
7
}
}
func
(
m
*
QueryPBGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2134,7 +2244,7 @@ func (m *ReplyPBGameList) Reset() { *m = ReplyPBGameList{} }
func
(
m
*
ReplyPBGameList
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyPBGameList
)
ProtoMessage
()
{}
func
(
*
ReplyPBGameList
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
8
}
}
func
(
m
*
ReplyPBGameList
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2176,7 +2286,7 @@ func (m *QueryGuessGameInfo) Reset() { *m = QueryGuessGameInfo{} }
func
(
m
*
QueryGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
9
}
}
func
(
m
*
QueryGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2236,7 +2346,7 @@ func (m *ReplyGuessGameInfo) Reset() { *m = ReplyGuessGameInfo{} }
func
(
m
*
ReplyGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
28
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
30
}
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2275,7 +2385,7 @@ func (m *QueryGuessGameInfos) Reset() { *m = QueryGuessGameInfos{} }
func
(
m
*
QueryGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
29
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
31
}
}
func
(
m
*
QueryGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2314,7 +2424,7 @@ func (m *ReplyGuessGameInfos) Reset() { *m = ReplyGuessGameInfos{} }
func
(
m
*
ReplyGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
2
}
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2362,7 +2472,7 @@ func (m *ReceiptPBGame) Reset() { *m = ReceiptPBGame{} }
func
(
m
*
ReceiptPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptPBGame
)
ProtoMessage
()
{}
func
(
*
ReceiptPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
3
}
}
func
(
m
*
ReceiptPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2455,9 +2565,14 @@ func (m *ReceiptPBGame) GetPreStatus() int32 {
type
ReceiptGuessGame
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Status
uint32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
Addr
string
`protobuf:"bytes,3,opt,name=addr,proto3" json:"addr,omitempty"`
Index
int64
`protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"`
PreStatus
uint32
`protobuf:"varint,2,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
Status
uint32
`protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
Addr
string
`protobuf:"bytes,4,opt,name=addr,proto3" json:"addr,omitempty"`
AdminAddr
string
`protobuf:"bytes,5,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
PreIndex
int64
`protobuf:"varint,6,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
Index
int64
`protobuf:"varint,7,opt,name=index,proto3" json:"index,omitempty"`
Category
string
`protobuf:"bytes,8,opt,name=category,proto3" json:"category,omitempty"`
StatusChange
bool
`protobuf:"varint,9,opt,name=statusChange,proto3" json:"statusChange,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -2467,7 +2582,7 @@ func (m *ReceiptGuessGame) Reset() { *m = ReceiptGuessGame{} }
func
(
m
*
ReceiptGuessGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptGuessGame
)
ProtoMessage
()
{}
func
(
*
ReceiptGuessGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
4
}
}
func
(
m
*
ReceiptGuessGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2495,6 +2610,13 @@ func (m *ReceiptGuessGame) GetGameId() string {
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetPreStatus
()
uint32
{
if
m
!=
nil
{
return
m
.
PreStatus
}
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetStatus
()
uint32
{
if
m
!=
nil
{
return
m
.
Status
...
...
@@ -2509,6 +2631,20 @@ func (m *ReceiptGuessGame) GetAddr() string {
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetAdminAddr
()
string
{
if
m
!=
nil
{
return
m
.
AdminAddr
}
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
}
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Index
...
...
@@ -2516,6 +2652,20 @@ func (m *ReceiptGuessGame) GetIndex() int64 {
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetCategory
()
string
{
if
m
!=
nil
{
return
m
.
Category
}
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetStatusChange
()
bool
{
if
m
!=
nil
{
return
m
.
StatusChange
}
return
false
}
type
GuessStartTxReq
struct
{
Topic
string
`protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
Options
string
`protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
...
...
@@ -2540,7 +2690,7 @@ func (m *GuessStartTxReq) Reset() { *m = GuessStartTxReq{} }
func
(
m
*
GuessStartTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessStartTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStartTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
5
}
}
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2672,7 +2822,7 @@ func (m *GuessBetTxReq) Reset() { *m = GuessBetTxReq{} }
func
(
m
*
GuessBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetTxReq
)
ProtoMessage
()
{}
func
(
*
GuessBetTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
6
}
}
func
(
m
*
GuessBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2725,7 +2875,7 @@ func (m *GuessAbortTxReq) Reset() { *m = GuessAbortTxReq{} }
func
(
m
*
GuessAbortTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessAbortTxReq
)
ProtoMessage
()
{}
func
(
*
GuessAbortTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
7
}
}
func
(
m
*
GuessAbortTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2765,7 +2915,7 @@ func (m *GuessPublishTxReq) Reset() { *m = GuessPublishTxReq{} }
func
(
m
*
GuessPublishTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessPublishTxReq
)
ProtoMessage
()
{}
func
(
*
GuessPublishTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
8
}
}
func
(
m
*
GuessPublishTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2812,7 +2962,7 @@ func (m *PBContinueTxReq) Reset() { *m = PBContinueTxReq{} }
func
(
m
*
PBContinueTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBContinueTxReq
)
ProtoMessage
()
{}
func
(
*
PBContinueTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
9
}
}
func
(
m
*
PBContinueTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2859,7 +3009,7 @@ func (m *PBQuitTxReq) Reset() { *m = PBQuitTxReq{} }
func
(
m
*
PBQuitTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQuitTxReq
)
ProtoMessage
()
{}
func
(
*
PBQuitTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
38
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
40
}
}
func
(
m
*
PBQuitTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2906,7 +3056,7 @@ func (m *PBQueryReq) Reset() { *m = PBQueryReq{} }
func
(
m
*
PBQueryReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQueryReq
)
ProtoMessage
()
{}
func
(
*
PBQueryReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
39
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
41
}
}
func
(
m
*
PBQueryReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2955,7 +3105,7 @@ func (m *GuessGameRecord) Reset() { *m = GuessGameRecord{} }
func
(
m
*
GuessGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
2
}
}
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -3009,7 +3159,7 @@ func (m *GuessGameIndexRecord) Reset() { *m = GuessGameIndexRecord{} }
func
(
m
*
GuessGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
3
}
}
func
(
m
*
GuessGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -3055,7 +3205,7 @@ func (m *GuessGameRecords) Reset() { *m = GuessGameRecords{} }
func
(
m
*
GuessGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecords
)
ProtoMessage
()
{}
func
(
*
GuessGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
4
}
}
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -3087,6 +3237,8 @@ func init() {
proto
.
RegisterType
((
*
GuessGame
)(
nil
),
"types.GuessGame"
)
proto
.
RegisterType
((
*
GuessPlayer
)(
nil
),
"types.GuessPlayer"
)
proto
.
RegisterType
((
*
GuessBet
)(
nil
),
"types.GuessBet"
)
proto
.
RegisterType
((
*
GuessBetStat
)(
nil
),
"types.GuessBetStat"
)
proto
.
RegisterType
((
*
GuessBetStatItem
)(
nil
),
"types.GuessBetStatItem"
)
proto
.
RegisterType
((
*
PokerBull
)(
nil
),
"types.PokerBull"
)
proto
.
RegisterType
((
*
PBHand
)(
nil
),
"types.PBHand"
)
proto
.
RegisterType
((
*
PBPlayer
)(
nil
),
"types.PBPlayer"
)
...
...
@@ -3132,112 +3284,120 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
// 1678 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x58
,
0xcd
,
0x6e
,
0xdb
,
0xc6
,
0x13
,
0xb7
,
0x3e
,
0xa8
,
0x8f
,
0x91
,
0x25
,
0xdb
,
0xeb
,
0xc4
,
0xe1
,
0xdf
,
0xf8
,
0xa3
,
0x70
,
0x19
,
0x37
,
0x71
,
0x8a
,
0x26
,
0x2d
,
0x6c
,
0x20
,
0x6d
,
0x52
,
0xb4
,
0x80
,
0x95
,
0x00
,
0x71
,
0x80
,
0x20
,
0x50
,
0xd6
,
0x29
,
0xd2
,
0x2b
,
0x2d
,
0xad
,
0x1d
,
0x22
,
0x12
,
0x49
,
0x93
,
0x54
,
0x62
,
0xdd
,
0x8a
,
0xf6
,
0x09
,
0x7a
,
0xe8
,
0x13
,
0xf4
,
0xd2
,
0x97
,
0x2a
,
0xd0
,
0x5b
,
0x1f
,
0xa1
,
0xd7
,
0x62
,
0x67
,
0x76
,
0xc9
,
0x25
,
0x45
,
0xc9
,
0x71
,
0xd0
,
0x9e
,
0x7a
,
0xdb
,
0xd9
,
0xd9
,
0xdd
,
0xf9
,
0x9e
,
0xf9
,
0x91
,
0xd0
,
0x39
,
0x9b
,
0x8a
,
0x38
,
0xbe
,
0x17
,
0x46
,
0x41
,
0x12
,
0x30
,
0x2b
,
0x99
,
0x85
,
0x22
,
0xde
,
0xde
,
0x48
,
0x22
,
0xd7
,
0x8f
,
0xdd
,
0x61
,
0xe2
,
0x05
,
0x3e
,
0x71
,
0x9c
,
0x3f
,
0x2c
,
0x68
,
0x3f
,
0x91
,
0x27
,
0x9f
,
0xb8
,
0x13
,
0xc1
,
0xb6
,
0xa0
,
0x71
,
0xe6
,
0x4e
,
0xc4
,
0xd3
,
0x91
,
0x5d
,
0xd9
,
0xa9
,
0xec
,
0xb5
,
0xb9
,
0xa2
,
0xe4
,
0x7e
,
0x9c
,
0xb8
,
0xc9
,
0x34
,
0xb6
,
0xab
,
0x3b
,
0x95
,
0xbd
,
0x2e
,
0x57
,
0x14
,
0xfb
,
0x3f
,
0xb4
,
0xc3
,
0x48
,
0x1c
,
0x13
,
0xab
,
0x86
,
0xac
,
0x6c
,
0x43
,
0x72
,
0xe3
,
0xc4
,
0x8d
,
0x92
,
0x97
,
0xde
,
0x44
,
0xd8
,
0xf5
,
0x9d
,
0xca
,
0x5e
,
0x8d
,
0x67
,
0x1b
,
0x6c
,
0x07
,
0x3a
,
0x44
,
0x5c
,
0x1c
,
0xb9
,
0xf1
,
0x6b
,
0xdb
,
0x42
,
0x81
,
0xe6
,
0x16
,
0xbb
,
0x06
,
0x56
,
0x12
,
0x84
,
0xde
,
0xd0
,
0x6e
,
0x20
,
0x8f
,
0x08
,
0xb6
,
0x0d
,
0xad
,
0xa1
,
0x9b
,
0x88
,
0xb3
,
0x20
,
0x9a
,
0xd9
,
0x4d
,
0x64
,
0xa4
,
0x34
,
0xb3
,
0xa1
,
0x19
,
0x84
,
0xd2
,
0xba
,
0xd8
,
0x6e
,
0x21
,
0x4b
,
0x93
,
0x92
,
0x33
,
0x71
,
0x2f
,
0x50
,
0x93
,
0x36
,
0x71
,
0x14
,
0x29
,
0xb5
,
0x9c
,
0xb8
,
0x17
,
0x47
,
0xc2
,
0x3b
,
0x7b
,
0x9d
,
0xd8
,
0x40
,
0x5a
,
0xa6
,
0x1b
,
0x68
,
0xf9
,
0x6c
,
0x72
,
0x12
,
0x8c
,
0xed
,
0x0e
,
0x79
,
0x84
,
0x28
,
0xc6
,
0xa0
,
0x2e
,
0x2e
,
0xc4
,
0xd0
,
0x5e
,
0xc5
,
0x5d
,
0x5c
,
0xcb
,
0xb3
,
0x81
,
0x2f
,
0xfa
,
0x22
,
0xb1
,
0xbb
,
0xe4
,
0x25
,
0xa2
,
0x94
,
0xec
,
0xbe
,
0x48
,
0x62
,
0xbb
,
0x87
,
0x0c
,
0x4d
,
0xb2
,
0x5d
,
0xe8
,
0xaa
,
0xe5
,
0xf3
,
0xe9
,
0xe4
,
0x44
,
0x44
,
0xf6
,
0x1a
,
0xf2
,
0xf3
,
0x9b
,
0x6c
,
0x1d
,
0x6a
,
0xa7
,
0x42
,
0xd8
,
0xeb
,
0xc8
,
0x93
,
0x4b
,
0xf9
,
0xe2
,
0xa9
,
0x10
,
0x87
,
0xa3
,
0x51
,
0x64
,
0x6f
,
0x90
,
0x35
,
0x8a
,
0x94
,
0x3a
,
0x88
,
0x8b
,
0xd0
,
0x8b
,
0x84
,
0xcd
,
0x48
,
0x5f
,
0xa2
,
0x98
,
0x03
,
0xab
,
0xb4
,
0x52
,
0x86
,
0x6e
,
0xa2
,
0xa1
,
0xb9
,
0x3d
,
0xe9
,
0x09
,
0x77
,
0x34
,
0xf1
,
0x7c
,
0x7c
,
0xf7
,
0x1a
,
0x5e
,
0xcf
,
0x36
,
0xd8
,
0x47
,
0x00
,
0x27
,
0x99
,
0xa2
,
0xd7
,
0x51
,
0x19
,
0x63
,
0x87
,
0xed
,
0x81
,
0x15
,
0x8e
,
0xdd
,
0x59
,
0x6c
,
0x6f
,
0xed
,
0xd4
,
0xf6
,
0x3a
,
0xfb
,
0xec
,
0x1e
,
0xe6
,
0xdc
,
0x3d
,
0x4c
,
0xae
,
0xc1
,
0xd8
,
0x9d
,
0x89
,
0x88
,
0xd3
,
0x01
,
0xa9
,
0x63
,
0x24
,
0xe2
,
0xe9
,
0x38
,
0xb1
,
0x6f
,
0x90
,
0x8e
,
0x44
,
0xb1
,
0x9b
,
0x50
,
0x97
,
0xef
,
0xd9
,
0x36
,
0x3e
,
0xb0
,
0x66
,
0x3e
,
0xd0
,
0x17
,
0x09
,
0x47
,
0xa6
,
0x4c
,
0x0a
,
0xcf
,
0x1f
,
0x89
,
0x0b
,
0xfb
,
0x7f
,
0x68
,
0x01
,
0x11
,
0x32
,
0x29
,
0xc2
,
0x48
,
0x3c
,
0x45
,
0xc6
,
0x36
,
0x32
,
0x52
,
0xda
,
0x79
,
0x0c
,
0x1d
,
0x43
,
0x09
,
0x19
,
0x39
,
0x57
,
0x1a
,
0x48
,
0x19
,
0x8e
,
0x6b
,
0xf6
,
0x31
,
0xd4
,
0x4e
,
0x44
,
0x82
,
0xc9
,
0x5d
,
0x22
,
0x58
,
0xf2
,
0x9c
,
0xdf
,
0x2a
,
0xd0
,
0xd2
,
0x3b
,
0x18
,
0x69
,
0x4c
,
0x2c
,
0x5d
,
0x27
,
0x44
,
0x15
,
0x7c
,
0x54
,
0x9d
,
0xf3
,
0xd1
,
0x36
,
0xb4
,
0xbc
,
0xf8
,
0x95
,
0xe7
,
0xfb
,
0x22
,
0xc2
,
0x72
,
0x69
,
0xf1
,
0x94
,
0x96
,
0x6f
,
0x86
,
0x51
,
0x70
,
0xea
,
0x25
,
0x58
,
0x2a
,
0x5d
,
0xae
,
0xa8
,
0xcc
,
0x60
,
0x6b
,
0x91
,
0xc1
,
0x8d
,
0x82
,
0xc1
,
0x7f
,
0xd5
,
0xa0
,
0x3d
,
0x08
,
0xde
,
0x88
,
0xa8
,
0x3f
,
0x1d
,
0x8f
,
0xdf
,
0xb3
,
0xa6
,
0x2d
,
0xb3
,
0xa6
,
0xb3
,
0xaa
,
0xad
,
0x5d
,
0x52
,
0xb5
,
0xf5
,
0xd2
,
0xaa
,
0x7d
,
0xeb
,
0x8e
,
0xa7
,
0x42
,
0xeb
,
0x8b
,
0x04
,
0xdb
,
0x05
,
0x2b
,
0x94
,
0x2a
,
0xa1
,
0xb2
,
0x9d
,
0xfd
,
0x9e
,
0xf2
,
0xf1
,
0xa0
,
0x8f
,
0x8a
,
0x72
,
0x62
,
0xb2
,
0x3b
,
0xd0
,
0x0c
,
0x31
,
0x4a
,
0xb1
,
0xdd
,
0xcc
,
0x25
,
0xc1
,
0xa0
,
0xaf
,
0x52
,
0x48
,
0xf3
,
0xb1
,
0xf5
,
0xe0
,
0xf2
,
0xf9
,
0x74
,
0x82
,
0xc5
,
0x6e
,
0xf1
,
0x6c
,
0x43
,
0x3e
,
0x44
,
0x49
,
0x15
,
0xdb
,
0xed
,
0xc2
,
0x43
,
0x1c
,
0xf7
,
0xb9
,
0xe6
,
0x67
,
0xfe
,
0x05
,
0xd3
,
0xbf
,
0xd4
,
0xd9
,
0xde
,
0x92
,
0x83
,
0x3b
,
0xe4
,
0x85
,
0x74
,
0x43
,
0x7a
,
0xff
,
0x7c
,
0xea
,
0x91
,
0x8b
,
0x56
,
0xc9
,
0xfb
,
0x9a
,
0x96
,
0x39
,
0x80
,
0x6b
,
0x72
,
0x50
,
0x17
,
0x1d
,
0x64
,
0xec
,
0x48
,
0xfe
,
0x48
,
0xb8
,
0x63
,
0x11
,
0x61
,
0x99
,
0xf5
,
0x88
,
0x9f
,
0xed
,
0x48
,
0xc9
,
0x5e
,
0xfc
,
0xca
,
0xf5
,
0x12
,
0xcf
,
0x3f
,
0xc3
,
0x7e
,
0xd0
,
0xe2
,
0xd9
,
0x46
,
0xbe
,
0xe3
,
0xae
,
0x2b
,
0xb3
,
0xf5
,
0x86
,
0xf3
,
0x63
,
0x05
,
0x1a
,
0x83
,
0xfe
,
0x91
,
0xeb
,
0x8f
,
0xa4
,
0x59
,
0x43
,
0x37
,
0x1a
,
0xc5
,
0x76
,
0x65
,
0xa7
,
0xb6
,
0x67
,
0x71
,
0x22
,
0x8c
,
0xd2
,
0x53
,
0x41
,
0x57
,
0xa5
,
0x67
,
0x43
,
0x53
,
0x16
,
0x82
,
0x88
,
0xa9
,
0x8d
,
0xb7
,
0xb9
,
0x26
,
0xd1
,
0x3d
,
0x32
,
0x45
,
0x31
,
0xd4
,
0x2d
,
0x4e
,
0x84
,
0x74
,
0xc0
,
0x58
,
0xbc
,
0x15
,
0x91
,
0x7b
,
0x46
,
0x71
,
0xb6
,
0x78
,
0x4a
,
0x3b
,
0xef
,
0xa0
,
0xa5
,
0xc3
,
0xc5
,
0x6e
,
0x82
,
0xf5
,
0xda
,
0xf5
,
0x95
,
0x16
,
0x9d
,
0xfd
,
0x6e
,
0x1a
,
0x05
,
0xa9
,
0x23
,
0x27
,
0x9e
,
0x29
,
0xbc
,
0x9a
,
0x17
,
0xbe
,
0x05
,
0x8d
,
0x84
,
0xfc
,
0x48
,
0x89
,
0xa8
,
0x28
,
0xa9
,
0x54
,
0x24
,
0xdc
,
0xd1
,
0x4c
,
0x2b
,
0x85
,
0x84
,
0xf3
,
0x6b
,
0x45
,
0x4a
,
0xe6
,
0xba
,
0x99
,
0xbc
,
0x87
,
0xe4
,
0x2d
,
0x68
,
0xbc
,
0xa3
,
0x6a
,
0x24
,
0xc1
,
0x8a
,
0xca
,
0x99
,
0x57
,
0xcb
,
0x9b
,
0x27
,
0xef
,
0x50
,
0xb4
,
0x54
,
0xf2
,
0x2b
,
0x8a
,
0xdd
,
0x82
,
0x1e
,
0xad
,
0x9e
,
0xe5
,
0x1d
,
0x53
,
0xd8
,
0x75
,
0x1e
,
0x40
,
0x53
,
0x65
,
0xfd
,
0x82
,
0x18
,
0xd9
,
0xd0
,
0x0c
,
0x03
,
0xcf
,
0x4f
,
0x94
,
0x56
,
0x16
,
0xd7
,
0xa4
,
0xf3
,
0x7b
,
0x05
,
0x56
,
0x07
,
0x7d
,
0x39
,
0xa9
,
0x0f
,
0x71
,
0x86
,
0xb3
,
0x4f
,
0xc1
,
0xc2
,
0xd2
,
0xc3
,
0xd2
,
0xce
,
0x7a
,
0x2e
,
0x9d
,
0x39
,
0x96
,
0x9c
,
0xa3
,
0x15
,
0x4e
,
0x47
,
0xd8
,
0x01
,
0xb4
,
0x86
,
0x81
,
0x9f
,
0x78
,
0xfe
,
0x54
,
0xa8
,
0x46
,
0x77
,
0x3d
,
0x77
,
0xfc
,
0x91
,
0x62
,
0x1e
,
0xad
,
0xf0
,
0xf4
,
0x20
,
0xbb
,
0x0d
,
0x75
,
0x99
,
0xba
,
0xe8
,
0x84
,
0xce
,
0xfe
,
0x46
,
0xee
,
0xc2
,
0x8b
,
0xa9
,
0x27
,
0x9f
,
0xc7
,
0x03
,
0x52
,
0x93
,
0xf3
,
0xa9
,
0x88
,
0x28
,
0x22
,
0x45
,
0x4d
,
0x5e
,
0x48
,
0x8e
,
0xd4
,
0x04
,
0x8f
,
0xb0
,
0x1e
,
0x54
,
0x93
,
0x19
,
0x96
,
0x9b
,
0xc5
,
0xab
,
0xc9
,
0xac
,
0xdf
,
0x54
,
0x1d
,
0xc3
,
0x39
,
0x84
,
0x8e
,
0xa1
,
0x7a
,
0xd6
,
0x49
,
0x2a
,
0x66
,
0x27
,
0xc9
,
0x15
,
0x7e
,
0xb5
,
0x50
,
0xf8
,
0xce
,
0x1e
,
0xf4
,
0xf2
,
0xe6
,
0x2c
,
0xea
,
0x7f
,
0xce
,
0x2e
,
0x40
,
0x66
,
0xc7
,
0xc2
,
0x53
,
0x9f
,
0x68
,
0x95
,
0xd0
,
0x86
,
0x85
,
0xc7
,
0x7e
,
0xa9
,
0xc2
,
0x5a
,
0x0a
,
0xa3
,
0x54
,
0x70
,
0xee
,
0xe6
,
0x83
,
0x73
,
0xdd
,
0x1c
,
0x2b
,
0x25
,
0xf1
,
0xb9
,
0x6d
,
0xce
,
0xa0
,
0xcd
,
0xe2
,
0xe1
,
0xbe
,
0x90
,
0x47
,
0xe5
,
0x09
,
0xf9
,
0xae
,
0x7b
,
0x12
,
0x44
,
0x3a
,
0x28
,
0x73
,
0xef
,
0x1e
,
0x4a
,
0xa6
,
0x7c
,
0x17
,
0x4f
,
0xb1
,
0x03
,
0x68
,
0x86
,
0xd3
,
0x93
,
0xb1
,
0xa7
,
0xba
,
0x75
,
0x67
,
0xff
,
0x46
,
0xf1
,
0xc2
,
0x80
,
0xd8
,
0x47
,
0x2b
,
0x5c
,
0x9f
,
0x94
,
0x32
,
0x28
,
0x9c
,
0x56
,
0xb9
,
0x8c
,
0xd2
,
0x88
,
0x36
,
0x70
,
0x6e
,
0xe5
,
0x22
,
0xfa
,
0x43
,
0x0d
,
0x7a
,
0x79
,
0x83
,
0x33
,
0x54
,
0x57
,
0x31
,
0x51
,
0x9d
,
0x81
,
0xdc
,
0xaa
,
0x79
,
0xe4
,
0x66
,
0xe2
,
0xbd
,
0xda
,
0x3c
,
0xde
,
0xd3
,
0xa8
,
0xae
,
0xbe
,
0x04
,
0xd5
,
0x59
,
0x8b
,
0x51
,
0x5d
,
0xa3
,
0x14
,
0xd5
,
0x35
,
0x4b
,
0x51
,
0x5d
,
0x6b
,
0x11
,
0xaa
,
0x6b
,
0x5f
,
0x82
,
0xea
,
0x60
,
0x09
,
0xaa
,
0x93
,
0xb3
,
0xa5
,
0x3e
,
0x87
,
0xea
,
0x56
,
0x17
,
0xa1
,
0xba
,
0xee
,
0x52
,
0x54
,
0xd7
,
0x9b
,
0x47
,
0x75
,
0xce
,
0xf7
,
0xb0
,
0x6a
,
0x66
,
0xd1
,
0x32
,
0x3c
,
0xa0
,
0x30
,
0x4d
,
0x35
,
0x87
,
0x69
,
0x6c
,
0x68
,
0x2a
,
0x04
,
0xa3
,
0x10
,
0xbe
,
0x26
,
0x65
,
0xad
,
0xe5
,
0x93
,
0x6e
,
0x61
,
0x79
,
0xf4
,
0x61
,
0xbd
,
0x98
,
0x6d
,
0xcb
,
0xf4
,
0x30
,
0x46
,
0x54
,
0x8a
,
0x0e
,
0x9d
,
0xaf
,
0x0c
,
0x69
,
0x4b
,
0x8b
,
0x51
,
0x65
,
0x63
,
0x55
,
0x67
,
0xa3
,
0x73
,
0x0e
,
0x37
,
0xf1
,
0x02
,
0x15
,
0xf2
,
0x33
,
0x2f
,
0x4e
,
0xfa
,
0x33
,
0x1a
,
0x98
,
0x87
,
0xfe
,
0x68
,
0x90
,
0x62
,
0x86
,
0x0c
,
0x10
,
0x55
,
0x8a
,
0x80
,
0x68
,
0x71
,
0xc3
,
0xc9
,
0xe0
,
0x43
,
0xcd
,
0x80
,
0x0f
,
0xce
,
0x4b
,
0xdd
,
0xa8
,
0xb9
,
0x18
,
0x06
,
0xd1
,
0xe8
,
0xca
,
0x20
,
0xac
,
0xfc
,
0xd5
,
0x43
,
0xd8
,
0xa0
,
0x57
,
0x11
,
0x85
,
0x5c
,
0xf2
,
0x74
,
0xfa
,
0x44
,
0xd5
,
0x7c
,
0xe2
,
0x5b
,
0xe8
,
0x9a
,
0x8a
,
0xc5
,
0xec
,
0xae
,
0x44
,
0x4a
,
0xb8
,
0x54
,
0x93
,
0x72
,
0x33
,
0xd7
,
0xba
,
0xe9
,
0x18
,
0xd7
,
0x67
,
0x9c
,
0x37
,
0xb0
,
0x66
,
0xf8
,
0xf2
,
0xa9
,
0x7f
,
0x1a
,
0x2c
,
0x54
,
0x40
,
0x03
,
0xed
,
0xaa
,
0x01
,
0xb4
,
0x33
,
0x7b
,
0x6b
,
0xe5
,
0xf6
,
0xd6
,
0x4d
,
0x65
,
0x0f
,
0xa0
,
0xc3
,
0x45
,
0x38
,
0x56
,
0xc2
,
0xd8
,
0x2e
,
0xd4
,
0xe5
,
0xd3
,
0xaa
,
0x9f
,
0xae
,
0x6b
,
0x3d
,
0x35
,
0xd2
,
0xe5
,
0xc8
,
0x75
,
0x3e
,
0x83
,
0xf5
,
0x82
,
0x86
,
0x38
,
0x52
,
0x49
,
0x29
,
0x32
,
0xb2
,
0xcd
,
0x35
,
0xe9
,
0x3c
,
0x80
,
0x35
,
0x43
,
0x84
,
0xcc
,
0x0d
,
0x76
,
0x0b
,
0x2c
,
0xc9
,
0xd5
,
0xfe
,
0x98
,
0x97
,
0x43
,
0x6c
,
0xc7
,
0x07
,
0x86
,
0x82
,
0xd2
,
0xac
,
0xfc
,
0x97
,
0xbd
,
0xf1
,
0x10
,
0x18
,
0xaa
,
0x9a
,
0x97
,
0x57
,
0xee
,
0x94
,
0xf4
,
0x8c
,
0x72
,
0xca
,
0xe7
,
0xb0
,
0x39
,
0xaf
,
0xeb
,
0x32
,
0xbf
,
0x7c
,
0x03
,
0x9b
,
0xf3
,
0xc2
,
0xe2
,
0x45
,
0xbe
,
0xc9
,
0xc4
,
0x29
,
0xdf
,
0xfc
,
0x5c
,
0x85
,
0x2e
,
0x17
,
0x43
,
0xe1
,
0x85
,
0x89
,
0x0a
,
0xde
,
0x55
,
0x2b
,
0x40
,
0xfb
,
0xab
,
0x66
,
0xf8
,
0xab
,
0xd4
,
0x2f
,
0x79
,
0xa8
,
0x6e
,
0x15
,
0xa1
,
0x7a
,
0xae
,
0x7a
,
0x1b
,
0x25
,
0xd5
,
0x4b
,
0x10
,
0xa3
,
0x59
,
0x80
,
0x18
,
0x19
,
0x04
,
0x6f
,
0x15
,
0x21
,
0xb8
,
0x9d
,
0x7d
,
0xa4
,
0xb4
,
0xc9
,
0x69
,
0xe6
,
0x37
,
0x49
,
0x0a
,
0xce
,
0xa1
,
0x08
,
0xce
,
0xc7
,
0xb0
,
0xae
,
0x5c
,
0xf2
,
0xe1
,
0x3f
,
0x5c
,
0xde
,
0xdb
,
0x2b
,
0xce
,
0x4f
,
0x35
,
0x85
,
0x48
,
0x8e
,
0xe9
,
0xdb
,
0x8c
,
0x8b
,
0xf3
,
0x2b
,
0x8f
,
0xde
,
0xe5
,
0x9f
,
0x82
,
0x57
,
0x18
,
0xbe
,
0xdd
,
0xff
,
0xca
,
0xf0
,
0xed
,
0x16
,
0x86
,
0xef
,
0x31
,
0x74
,
0xf5
,
0x4f
,
0x03
,
0x0a
,
0xc1
,
0x55
,
0xa7
,
0x2f
,
0x53
,
0xff
,
0x44
,
0x68
,
0xf4
,
0xe2
,
0xda
,
0xb9
,
0xa3
,
0x22
,
0x8b
,
0x33
,
0x77
,
0xe9
,
0xb3
,
0xce
,
0x23
,
0xd8
,
0xa0
,
0x7f
,
0x1f
,
0x34
,
0x74
,
0x2f
,
0xd5
,
0xa1
,
0x74
,
0xf2
,
0x7e
,
0x0d
,
0x6b
,
0x83
,
0xbe
,
0xc6
,
0xd3
,
0xcb
,
0x9f
,
0x50
,
0x7e
,
0xa5
,
0x91
,
0x23
,
0x97
,
0xce
,
0x97
,
0x12
,
0x40
,
0xbf
,
0xc0
,
0xcf
,
0xdf
,
0xab
,
0x5d
,
0xbc
,
0x2f
,
0xf1
,
0x39
,
0x36
,
0xad
,
0xab
,
0xdd
,
0x7b
,
0x65
,
0x20
,
0xf1
,
0x7f
,
0x74
,
0xfa
,
0x3e
,
0x86
,
0x6b
,
0x46
,
0x37
,
0xfc
,
0xd0
,
0x01
,
0xfc
,
0xd8
,
0x80
,
0x42
,
0x7a
,
0x06
,
0x7f
,
0x51
,
0x9c
,
0xc1
,
0x5b
,
0x73
,
0x7d
,
0x35
,
0x3f
,
0x86
,
0xf7
,
0xff
,
0xac
,
0x80
,
0x85
,
0x3f
,
0x78
,
0xd9
,
0x7d
,
0x80
,
0xac
,
0xcc
,
0x59
,
0xf9
,
0x47
,
0xc6
,
0xb6
,
0xfe
,
0xfb
,
0xf1
,
0x9d
,
0x1f
,
0x7b
,
0x67
,
0xfe
,
0xcb
,
0x0b
,
0x67
,
0x85
,
0xed
,
0x1b
,
0xbf
,
0xb3
,
0xca
,
0xbe
,
0x36
,
0xca
,
0xee
,
0x68
,
0x59
,
0x04
,
0xf6
,
0xca
,
0x3f
,
0x3c
,
0xca
,
0xee
,
0x3d
,
0x54
,
0x10
,
0x54
,
0x43
,
0xbf
,
0x45
,
0x5f
,
0x20
,
0x25
,
0x77
,
0x4f
,
0x1a
,
0xf8
,
0x9f
,
0xfa
,
0xe0
,
0xef
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x70
,
0xe6
,
0x48
,
0x7b
,
0xd0
,
0x16
,
0x00
,
0x00
,
// 1808 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x59
,
0x4b
,
0x6f
,
0xdb
,
0xca
,
0x15
,
0xb6
,
0x1e
,
0xd4
,
0xe3
,
0xc8
,
0x92
,
0xec
,
0x71
,
0xe2
,
0xcb
,
0x1a
,
0x17
,
0x85
,
0xcb
,
0xeb
,
0xde
,
0x28
,
0x45
,
0x93
,
0x16
,
0x32
,
0x90
,
0x36
,
0x29
,
0x5a
,
0xc0
,
0x4a
,
0x80
,
0xd8
,
0x40
,
0x10
,
0x28
,
0xe3
,
0x14
,
0xe9
,
0x96
,
0x92
,
0xc6
,
0x32
,
0x11
,
0x89
,
0x94
,
0x49
,
0x2a
,
0xb1
,
0x76
,
0x45
,
0xdb
,
0x6d
,
0x17
,
0x5d
,
0xf4
,
0x17
,
0x74
,
0xd3
,
0x3f
,
0xd5
,
0x75
,
0x81
,
0xfe
,
0x81
,
0x6e
,
0x8b
,
0x39
,
0x67
,
0x86
,
0x1c
,
0x52
,
0x94
,
0x1c
,
0x07
,
0xed
,
0xaa
,
0xbb
,
0x39
,
0x0f
,
0xcd
,
0x9c
,
0xf7
,
0x7c
,
0x43
,
0x41
,
0x6b
,
0xba
,
0x14
,
0x51
,
0xf4
,
0x74
,
0x11
,
0x06
,
0x71
,
0xc0
,
0xac
,
0x78
,
0xb5
,
0x10
,
0xd1
,
0xd1
,
0x7e
,
0x1c
,
0xba
,
0x7e
,
0xe4
,
0x8e
,
0x63
,
0x2f
,
0xf0
,
0x49
,
0xe2
,
0xfc
,
0xcb
,
0x82
,
0xe6
,
0x6b
,
0xa9
,
0xf9
,
0xda
,
0x9d
,
0x0b
,
0x76
,
0x08
,
0xb5
,
0xa9
,
0x3b
,
0x17
,
0x17
,
0x13
,
0xbb
,
0x74
,
0x5c
,
0xea
,
0x35
,
0xb9
,
0xa2
,
0x24
,
0x3f
,
0x8a
,
0xdd
,
0x78
,
0x19
,
0xd9
,
0xe5
,
0xe3
,
0x52
,
0xaf
,
0xcd
,
0x15
,
0xc5
,
0xbe
,
0x85
,
0xe6
,
0x22
,
0x14
,
0x97
,
0x24
,
0xaa
,
0xa0
,
0x28
,
0x65
,
0x48
,
0x69
,
0x14
,
0xbb
,
0x61
,
0xfc
,
0xde
,
0x9b
,
0x0b
,
0xbb
,
0x7a
,
0x5c
,
0xea
,
0x55
,
0x78
,
0xca
,
0x60
,
0xc7
,
0xd0
,
0x22
,
0xe2
,
0xf6
,
0xdc
,
0x8d
,
0xae
,
0x6d
,
0x0b
,
0x0f
,
0x34
,
0x59
,
0xec
,
0x01
,
0x58
,
0x71
,
0xb0
,
0xf0
,
0xc6
,
0x76
,
0x0d
,
0x65
,
0x44
,
0xb0
,
0x23
,
0x68
,
0x8c
,
0xdd
,
0x58
,
0x4c
,
0x83
,
0x70
,
0x65
,
0xd7
,
0x51
,
0x90
,
0xd0
,
0xcc
,
0x86
,
0x7a
,
0xb0
,
0x90
,
0xde
,
0x45
,
0x76
,
0x03
,
0x45
,
0x9a
,
0x94
,
0x92
,
0xb9
,
0x7b
,
0x8b
,
0x96
,
0x34
,
0x49
,
0xa2
,
0x48
,
0x69
,
0xe5
,
0xdc
,
0xbd
,
0x3d
,
0x17
,
0xde
,
0xf4
,
0x3a
,
0xb6
,
0x81
,
0xac
,
0x4c
,
0x18
,
0xe8
,
0xf9
,
0x6a
,
0x3e
,
0x0a
,
0x66
,
0x76
,
0x8b
,
0x22
,
0x42
,
0x14
,
0x63
,
0x50
,
0x15
,
0xb7
,
0x62
,
0x6c
,
0xef
,
0x22
,
0x17
,
0xd7
,
0x52
,
0x37
,
0xf0
,
0xc5
,
0x40
,
0xc4
,
0x76
,
0x9b
,
0xa2
,
0x44
,
0x94
,
0x3a
,
0x7b
,
0x20
,
0xe2
,
0xc8
,
0xee
,
0xa0
,
0x40
,
0x93
,
0xec
,
0x04
,
0xda
,
0x6a
,
0xf9
,
0x76
,
0x39
,
0x1f
,
0x89
,
0xd0
,
0xee
,
0xa2
,
0x3c
,
0xcb
,
0x64
,
0x7b
,
0x50
,
0xb9
,
0x12
,
0xc2
,
0xde
,
0x3b
,
0x2e
,
0xf5
,
0xaa
,
0x5c
,
0x2e
,
0xe5
,
0x8e
,
0x57
,
0x42
,
0x9c
,
0x4d
,
0x26
,
0xa1
,
0xbd
,
0x4f
,
0xde
,
0x28
,
0x52
,
0xda
,
0x20
,
0x6e
,
0x17
,
0x5e
,
0x28
,
0x6c
,
0x46
,
0xf6
,
0x12
,
0xc5
,
0x1c
,
0xd8
,
0xa5
,
0x95
,
0x72
,
0xf4
,
0x00
,
0x1d
,
0xcd
,
0xf0
,
0x64
,
0x24
,
0xdc
,
0xc9
,
0xdc
,
0xf3
,
0x71
,
0xdf
,
0x07
,
0xf8
,
0xf3
,
0x94
,
0xc1
,
0x7e
,
0x08
,
0x30
,
0x4a
,
0x0d
,
0x7d
,
0x88
,
0x86
,
0x1a
,
0x1c
,
0xd6
,
0x03
,
0x6b
,
0x31
,
0x73
,
0x57
,
0x91
,
0x7d
,
0x78
,
0x5c
,
0xe9
,
0xb5
,
0xfa
,
0xec
,
0x29
,
0xd6
,
0xdc
,
0x53
,
0x2c
,
0xae
,
0xe1
,
0xcc
,
0x5d
,
0x89
,
0x90
,
0x93
,
0x82
,
0xb4
,
0x31
,
0x14
,
0xd1
,
0x72
,
0x16
,
0xdb
,
0xdf
,
0x90
,
0x8d
,
0x44
,
0xb1
,
0x27
,
0x50
,
0x1f
,
0x89
,
0x58
,
0x16
,
0x8f
,
0x6d
,
0x1f
,
0x97
,
0x7a
,
0xad
,
0xfe
,
0x81
,
0xb9
,
0xc7
,
0x80
,
0x44
,
0x5c
,
0xeb
,
0xc8
,
0xf2
,
0xf0
,
0xfc
,
0x89
,
0xb8
,
0xb5
,
0x7f
,
0x80
,
0xbe
,
0x10
,
0x21
,
0xcb
,
0x63
,
0x11
,
0x8a
,
0x0b
,
0x14
,
0x1c
,
0xa1
,
0x20
,
0xa1
,
0x9d
,
0x57
,
0xd0
,
0x32
,
0xcc
,
0x91
,
0x39
,
0x74
,
0xa5
,
0xab
,
0x54
,
0xeb
,
0xb8
,
0x66
,
0x3f
,
0x82
,
0xca
,
0x48
,
0xc4
,
0x58
,
0xe6
,
0xad
,
0x7e
,
0x37
,
0x77
,
0x3e
,
0x97
,
0x32
,
0xe7
,
0xef
,
0x25
,
0x68
,
0x68
,
0x0e
,
0xe6
,
0x1c
,
0x4b
,
0x4c
,
0x77
,
0x0c
,
0x51
,
0xb9
,
0x68
,
0x95
,
0xd7
,
0xa2
,
0x75
,
0x04
,
0x0d
,
0x2f
,
0xfa
,
0xe0
,
0xf9
,
0xbe
,
0x08
,
0xb1
,
0x71
,
0x1a
,
0x3c
,
0xa1
,
0xe5
,
0x9e
,
0x8b
,
0x30
,
0xb8
,
0xf2
,
0x62
,
0x6c
,
0x9a
,
0x36
,
0x57
,
0x54
,
0xea
,
0xb0
,
0xb5
,
0xc9
,
0xe1
,
0x5a
,
0xce
,
0xe1
,
0x3f
,
0x97
,
0x60
,
0xd7
,
0x0c
,
0x9e
,
0x2c
,
0xb8
,
0x38
,
0x88
,
0xdd
,
0xd9
,
0x40
,
0x60
,
0x13
,
0x46
,
0x68
,
0x75
,
0x9b
,
0x67
,
0x99
,
0xac
,
0x07
,
0x5d
,
0xcd
,
0xc8
,
0x7a
,
0x90
,
0x67
,
0xb3
,
0x27
,
0x60
,
0x79
,
0xb1
,
0x98
,
0xcb
,
0xe6
,
0x97
,
0x49
,
0xff
,
0xa6
,
0x20
,
0x61
,
0x17
,
0xb1
,
0x98
,
0x73
,
0xd2
,
0x72
,
0xae
,
0x61
,
0x2f
,
0x2f
,
0xfa
,
0xea
,
0x08
,
0x7e
,
0x0b
,
0x4d
,
0x49
,
0x91
,
0x1b
,
0x6a
,
0xf6
,
0x24
,
0x0c
,
0xe7
,
0xdf
,
0x15
,
0x68
,
0x0e
,
0x83
,
0x8f
,
0x22
,
0x1c
,
0x2c
,
0x67
,
0xb3
,
0x2f
,
0x9c
,
0x6b
,
0x96
,
0x39
,
0xd7
,
0xd2
,
0xc9
,
0x55
,
0xb9
,
0x63
,
0x72
,
0x55
,
0x0b
,
0x27
,
0xd7
,
0x27
,
0x77
,
0xb6
,
0x14
,
0x3a
,
0x53
,
0x48
,
0xb0
,
0x13
,
0xb0
,
0x16
,
0xd2
,
0x24
,
0x4c
,
0x53
,
0xab
,
0xdf
,
0x51
,
0xc1
,
0x1a
,
0x0e
,
0xd0
,
0x50
,
0x4e
,
0x42
,
0xf6
,
0x18
,
0xea
,
0x0b
,
0xac
,
0xcf
,
0xc8
,
0xae
,
0x63
,
0x50
,
0xbb
,
0xa9
,
0x1e
,
0xb5
,
0x91
,
0x96
,
0xe3
,
0xf8
,
0xc5
,
0xe5
,
0xdb
,
0xe5
,
0x1c
,
0x07
,
0x9e
,
0xc5
,
0x53
,
0x86
,
0xdc
,
0x88
,
0x1a
,
0x2b
,
0xb2
,
0x9b
,
0xb9
,
0x8d
,
0x38
,
0xf2
,
0xb9
,
0x96
,
0xa7
,
0x95
,
0x05
,
0x66
,
0x65
,
0xd1
,
0x74
,
0xff
,
0x44
,
0xa5
,
0xd5
,
0xa2
,
0x28
,
0x24
,
0x0c
,
0x59
,
0x77
,
0x37
,
0x4b
,
0x8f
,
0x42
,
0xb4
,
0x4b
,
0x75
,
0xa7
,
0x69
,
0x99
,
0x3b
,
0x5c
,
0x53
,
0x80
,
0xda
,
0x18
,
0x20
,
0x83
,
0x23
,
0xe5
,
0x13
,
0xe1
,
0xce
,
0x44
,
0x88
,
0xa3
,
0xa6
,
0x43
,
0xf2
,
0x94
,
0x23
,
0x4f
,
0xf6
,
0xa2
,
0x0f
,
0xae
,
0x17
,
0x7b
,
0xfe
,
0x14
,
0x67
,
0x62
,
0x83
,
0xa7
,
0x8c
,
0xec
,
0xad
,
0xb3
,
0xa7
,
0xdc
,
0xd6
,
0x0c
,
0xe7
,
0x0f
,
0x25
,
0xa8
,
0x0d
,
0x07
,
0xe7
,
0xae
,
0x3f
,
0x91
,
0x6e
,
0x8d
,
0xdd
,
0x70
,
0x22
,
0xab
,
0xbc
,
0xd2
,
0xb3
,
0x38
,
0x11
,
0xc6
,
0xf8
,
0x51
,
0x49
,
0x57
,
0xe3
,
0xc7
,
0x86
,
0xba
,
0x1c
,
0x01
,
0x22
,
0xa2
,
0x72
,
0x6a
,
0x72
,
0x4d
,
0x62
,
0x78
,
0x64
,
0x73
,
0x62
,
0xaa
,
0x1b
,
0x9c
,
0x08
,
0x19
,
0x80
,
0x99
,
0xf8
,
0x24
,
0x42
,
0x77
,
0x4a
,
0x79
,
0xb6
,
0x78
,
0x42
,
0x3b
,
0x9f
,
0xa1
,
0xa1
,
0xd3
,
0xc5
,
0xbe
,
0x03
,
0xeb
,
0xda
,
0xf5
,
0x95
,
0x15
,
0xad
,
0x7e
,
0x3b
,
0xc9
,
0x82
,
0xb4
,
0x91
,
0x93
,
0xcc
,
0x3c
,
0xbc
,
0x9c
,
0x3d
,
0xfc
,
0x10
,
0x6a
,
0x31
,
0xc5
,
0x91
,
0x0a
,
0x51
,
0x51
,
0xd2
,
0xa8
,
0x50
,
0xb8
,
0x93
,
0x95
,
0x36
,
0x0a
,
0x09
,
0xe7
,
0x6f
,
0x25
,
0x79
,
0x32
,
0xe5
,
0xf7
,
0xcb
,
0x4e
,
0x3e
,
0x84
,
0xda
,
0x67
,
0x9a
,
0x43
,
0x74
,
0xb0
,
0xa2
,
0x32
,
0xee
,
0x55
,
0xb2
,
0xee
,
0xc9
,
0xdf
,
0x50
,
0xb6
,
0x54
,
0xf1
,
0x2b
,
0x8a
,
0x7d
,
0x0f
,
0x1d
,
0x5a
,
0xbd
,
0xc9
,
0x06
,
0x26
,
0xc7
,
0x75
,
0x9e
,
0x43
,
0x5d
,
0x55
,
0xfd
,
0x86
,
0x1c
,
0xd9
,
0x50
,
0x5f
,
0x04
,
0x9e
,
0x1f
,
0x2b
,
0xab
,
0x2c
,
0xae
,
0x49
,
0xe7
,
0x1f
,
0x25
,
0xd8
,
0x1d
,
0x0e
,
0x24
,
0x5a
,
0x39
,
0x43
,
0x1c
,
0xc3
,
0x7e
,
0x02
,
0x16
,
0xb6
,
0x1e
,
0xb6
,
0x76
,
0x7a
,
0xef
,
0x90
,
0xce
,
0xa5
,
0x94
,
0x9c
,
0xef
,
0x70
,
0x52
,
0x61
,
0xa7
,
0xd0
,
0x18
,
0x07
,
0x7e
,
0xec
,
0xf9
,
0x4b
,
0xa1
,
0x46
,
0xfc
,
0xc3
,
0x8c
,
0xfa
,
0x4b
,
0x25
,
0x3c
,
0xdf
,
0xe1
,
0x89
,
0x22
,
0x7b
,
0x04
,
0x55
,
0x59
,
0xba
,
0x18
,
0x84
,
0x56
,
0x7f
,
0x3f
,
0xf3
,
0x83
,
0x77
,
0x4b
,
0x4f
,
0x6e
,
0x8f
,
0x0a
,
0xd2
,
0x92
,
0x9b
,
0xa5
,
0x08
,
0x29
,
0x23
,
0x79
,
0x4b
,
0xde
,
0x49
,
0x89
,
0xb4
,
0x04
,
0x55
,
0x58
,
0x07
,
0xca
,
0xf1
,
0x0a
,
0xdb
,
0xcd
,
0xe2
,
0xe5
,
0x78
,
0x35
,
0xa8
,
0xab
,
0x89
,
0xe1
,
0x9c
,
0x41
,
0xcb
,
0x30
,
0x3d
,
0x9d
,
0x24
,
0x25
,
0x73
,
0x92
,
0x64
,
0x1a
,
0xbf
,
0x9c
,
0x6b
,
0x7c
,
0xa7
,
0x07
,
0x9d
,
0xac
,
0x3b
,
0x9b
,
0xe6
,
0x9f
,
0x73
,
0x02
,
0x90
,
0xfa
,
0xb1
,
0x51
,
0xeb
,
0xc7
,
0xda
,
0x24
,
0xf4
,
0x61
,
0xa3
,
0xda
,
0x5f
,
0xcb
,
0xd0
,
0x4d
,
0xa0
,
0xa4
,
0x4a
,
0xce
,
0x93
,
0x6c
,
0x72
,
0x1e
,
0x9a
,
0xf7
,
0x43
,
0x41
,
0x7e
,
0x1e
,
0x99
,
0xb7
,
0xef
,
0x41
,
0x5e
,
0x79
,
0x20
,
0xa4
,
0xaa
,
0xd4
,
0x90
,
0xfb
,
0xba
,
0xa3
,
0x20
,
0xd4
,
0x49
,
0x59
,
0xdb
,
0xf7
,
0x4c
,
0x0a
,
0xe5
,
0xbe
,
0xa8
,
0xc5
,
0x4e
,
0xa1
,
0xbe
,
0x58
,
0x8e
,
0x66
,
0x9e
,
0x9a
,
0xd6
,
0xb9
,
0x8b
,
0x4a
,
0xfe
,
0x60
,
0x48
,
0xe2
,
0xf3
,
0x1d
,
0xae
,
0x35
,
0xe5
,
0x19
,
0x94
,
0x4e
,
0xab
,
0xf8
,
0x8c
,
0xc2
,
0x8c
,
0xd6
,
0xf0
,
0x22
,
0xca
,
0x64
,
0xf4
,
0xf7
,
0x15
,
0xe8
,
0x64
,
0x1d
,
0x4e
,
0x91
,
0x6d
,
0xc9
,
0x44
,
0xb6
,
0x06
,
0x7a
,
0x2d
,
0x67
,
0xd1
,
0xab
,
0x89
,
0x79
,
0x2b
,
0xeb
,
0x98
,
0x57
,
0x23
,
0xdb
,
0xea
,
0x16
,
0x64
,
0x6b
,
0x6d
,
0x46
,
0xb6
,
0xb5
,
0x42
,
0x64
,
0x5b
,
0x2f
,
0x44
,
0xb6
,
0x8d
,
0x4d
,
0xc8
,
0xb6
,
0x79
,
0x07
,
0xb2
,
0x85
,
0x2d
,
0xc8
,
0xb6
,
0x55
,
0x88
,
0x6c
,
0x77
,
0x37
,
0x21
,
0xdb
,
0xf6
,
0x56
,
0x64
,
0xdb
,
0x59
,
0x47
,
0xb6
,
0xce
,
0xef
,
0x14
,
0x0c
,
0x52
,
0x55
,
0xb4
,
0x0d
,
0x0f
,
0x28
,
0x2c
,
0x52
,
0xce
,
0x60
,
0x11
,
0x1b
,
0x91
,
0xa9
,
0xb4
,
0x5a
,
0x21
,
0x0d
,
0x4d
,
0xca
,
0x5e
,
0xcb
,
0x16
,
0xdd
,
0xc6
,
0xf6
,
0x18
,
0x28
,
0xec
,
0x63
,
0x54
,
0xdb
,
0x36
,
0x3b
,
0x8c
,
0x2b
,
0x2a
,
0x41
,
0xc8
,
0xce
,
0x2f
,
0x8d
,
0xd3
,
0xb6
,
0x36
,
0xa3
,
0xaa
,
0xc6
,
0xb2
,
0xae
,
0x46
,
0xe7
,
0x06
,
0xbe
,
0xc3
,
0x1f
,
0x50
,
0x23
,
0xbf
,
0xf1
,
0xa2
,
0x78
,
0xb0
,
0xa2
,
0x0b
,
0xf3
,
0xcc
,
0x9f
,
0x0c
,
0x13
,
0xcc
,
0x90
,
0x02
,
0xa2
,
0x52
,
0x1e
,
0x10
,
0x6d
,
0x1e
,
0x38
,
0x29
,
0x7c
,
0xa8
,
0x18
,
0xf0
,
0xc1
,
0x79
,
0xaf
,
0x07
,
0x35
,
0x17
,
0xe3
,
0x20
,
0x9c
,
0xdc
,
0x1b
,
0x84
,
0x15
,
0xef
,
0x7a
,
0x06
,
0xfb
,
0xb4
,
0x2b
,
0xa2
,
0x90
,
0x3b
,
0xb6
,
0x4e
,
0xb6
,
0x28
,
0x9b
,
0x5b
,
0xfc
,
0x06
,
0xda
,
0xa6
,
0x61
,
0x91
,
0x7c
,
0x78
,
0x84
,
0xb4
,
0x54
,
0x37
,
0xe5
,
0x41
,
0x66
,
0x74
,
0x93
,
0x1a
,
0xd7
,
0x3a
,
0xce
,
0x47
,
0xe8
,
0x1a
,
0xb1
,
0xbc
,
0xf0
,
0xaf
,
0x82
,
0x8d
,
0x06
,
0xe8
,
0x27
,
0x46
,
0xd9
,
0x78
,
0x62
,
0xa4
,
0xfe
,
0x56
,
0x8a
,
0xfd
,
0xad
,
0x9a
,
0xc6
,
0x9e
,
0x42
,
0x8b
,
0x8b
,
0xc5
,
0x4c
,
0x1d
,
0xc6
,
0x4e
,
0xa0
,
0x2a
,
0xb7
,
0x56
,
0xf3
,
0x74
,
0x4f
,
0xdb
,
0xa9
,
0x91
,
0x2e
,
0x47
,
0xa9
,
0xf3
,
0x53
,
0xd8
,
0xcb
,
0x59
,
0x88
,
0x57
,
0x2a
,
0x19
,
0x45
,
0x4e
,
0x36
,
0xb9
,
0x26
,
0x9d
,
0xe7
,
0xd0
,
0x35
,
0x8e
,
0x90
,
0xb5
,
0xc1
,
0xbe
,
0x07
,
0x4b
,
0x4a
,
0x75
,
0x3c
,
0xd6
,
0xcf
,
0x21
,
0xb1
,
0xe3
,
0x03
,
0xc3
,
0x83
,
0x92
,
0xaa
,
0xfc
,
0x1f
,
0x47
,
0xe3
,
0x05
,
0x30
,
0x34
,
0x35
,
0x7b
,
0x5e
,
0x71
,
0x50
,
0x12
,
0x1d
,
0x15
,
0x94
,
0x9f
,
0xc1
,
0xc1
,
0xba
,
0xad
,
0xdb
,
0xe2
,
0xf2
,
0x6b
,
0x38
,
0x58
,
0x3f
,
0x2c
,
0xda
,
0x14
,
0x9b
,
0xf4
,
0x38
,
0x15
,
0x9b
,
0xbf
,
0x94
,
0xa1
,
0xcd
,
0xc5
,
0x58
,
0x78
,
0x8b
,
0x58
,
0x25
,
0xef
,
0xbe
,
0x1d
,
0xa0
,
0xe3
,
0x55
,
0x31
,
0xe2
,
0x55
,
0x18
,
0x97
,
0x2c
,
0x54
,
0xb7
,
0xf2
,
0x50
,
0x3d
,
0xd3
,
0xbd
,
0xb5
,
0x82
,
0xee
,
0x25
,
0x88
,
0x51
,
0xcf
,
0x41
,
0x8c
,
0x14
,
0x82
,
0x37
,
0xf2
,
0x10
,
0xdc
,
0x4e
,
0x1f
,
0x29
,
0x4d
,
0x0a
,
0x9a
,
0xf9
,
0x26
,
0x49
,
0xc0
,
0x39
,
0xe4
,
0xc1
,
0xf9
,
0x9f
,
0xca
,
0xb0
,
0xa7
,
0x62
,
0x72
,
0xf7
,
0x57
,
0xa7
,
0xcc
,
0x56
,
0xe5
,
0xfc
,
0xd7
,
0xa5
,
0x6c
,
0xe1
,
0xb4
,
0xd7
,
0x82
,
0x56
,
0x35
,
0x82
,
0x96
,
0xf9
,
0xb2
,
0x61
,
0xe5
,
0xbf
,
0x6c
,
0x6c
,
0x79
,
0x41
,
0xa7
,
0xe1
,
0xae
,
0xe7
,
0xde
,
0xdc
,
0xc9
,
0x7d
,
0xdc
,
0xc8
,
0xdd
,
0xc7
,
0x0e
,
0xec
,
0x92
,
0x25
,
0x2f
,
0xaf
,
0x5d
,
0x7f
,
0x4a
,
0x9f
,
0x9b
,
0x1a
,
0x3c
,
0xc3
,
0x73
,
0xfe
,
0x58
,
0x51
,
0x50
,
0xe9
,
0x92
,
0x1e
,
0x8d
,
0x5c
,
0xdc
,
0xdc
,
0x1b
,
0x13
,
0x6c
,
0x7f
,
0xa3
,
0xde
,
0x03
,
0x15
,
0xb4
,
0xff
,
0x5f
,
0x50
,
0x41
,
0x3b
,
0x87
,
0x0a
,
0x2e
,
0xa1
,
0xad
,
0xbf
,
0x46
,
0x50
,
0x0a
,
0xee
,
0x0b
,
0x0b
,
0x18
,
0x54
,
0x25
,
0x0e
,
0x50
,
0x05
,
0x88
,
0x6b
,
0xe7
,
0xb1
,
0xca
,
0x2c
,
0x82
,
0x81
,
0xad
,
0xdb
,
0x3a
,
0x2f
,
0x61
,
0x9f
,
0x3e
,
0x47
,
0x11
,
0x1a
,
0xb8
,
0xd3
,
0x86
,
0x42
,
0x48
,
0xf0
,
0x2b
,
0xe8
,
0x0e
,
0x07
,
0x1a
,
0xe8
,
0x6f
,
0xdf
,
0x42
,
0xc5
,
0x95
,
0xee
,
0x42
,
0xb9
,
0x74
,
0x7e
,
0x21
,
0x91
,
0xfd
,
0x3b
,
0x7c
,
0x97
,
0xdf
,
0xef
,
0x87
,
0xcf
,
0xe4
,
0xc3
,
0x01
,
0xa7
,
0xe9
,
0xfd
,
0x7e
,
0xf7
,
0xc1
,
0x78
,
0x22
,
0xfc
,
0x57
,
0x61
,
0xc1
,
0x2b
,
0x78
,
0x60
,
0x8c
,
0xe9
,
0xaf
,
0x45
,
0x06
,
0xaf
,
0x0c
,
0x8c
,
0xa6
,
0xc1
,
0xc1
,
0xcf
,
0xf3
,
0xe0
,
0xe0
,
0x70
,
0x6d
,
0xe0
,
0x67
,
0xf1
,
0x41
,
0xff
,
0x9f
,
0x25
,
0xb0
,
0xf0
,
0xeb
,
0x3b
,
0x7b
,
0x06
,
0x90
,
0xb6
,
0x39
,
0x2b
,
0x7e
,
0xfd
,
0x1c
,
0xe9
,
0xcf
,
0x32
,
0xbf
,
0xf5
,
0x23
,
0x6f
,
0xea
,
0xbf
,
0xbf
,
0x75
,
0x76
,
0x58
,
0xdf
,
0xf8
,
0xc2
,
0x58
,
0xf4
,
0x0c
,
0x2a
,
0xfa
,
0x8d
,
0x3e
,
0x8b
,
0x50
,
0x68
,
0xf1
,
0x8b
,
0xa8
,
0xe8
,
0x77
,
0x2f
,
0x14
,
0x36
,
0xd6
,
0x98
,
0x74
,
0xd3
,
0xd3
,
0xa8
,
0xe0
,
0xb7
,
0xa3
,
0x1a
,
0xfe
,
0x89
,
0x70
,
0xfa
,
0x9f
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x6c
,
0x1e
,
0x01
,
0xe9
,
0x6d
,
0x18
,
0x00
,
0x00
,
}
// Reference imports to suppress errors if they are not otherwise used.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment