# BlockActivity_Model_BlockBoardModel_1517.luac
; fn @BlockBoardModel.lua  line 0-0 np=0 va=1 ms=3 code=140 consts=63 upvals=1 protos=40
;   K[0]='EBlockBoardEventType'
;   K[1]='PlaceBlockItem'
;   K[2]=1
;   K[3]='RemoveBoardCube'
;   K[4]=2
;   K[5]='AddBlockItem'
;   K[6]=3
;   K[7]='AddScore'
;   K[8]=4
;   K[9]='TestAddCube'
;   K[10]=100
;   K[11]='TestRemoveCube'
;   K[12]=101
;   K[13]='TestAddBlockItem'
;   K[14]=102
;   K[15]='TestRefreshBoard'
;   K[16]=103
;   K[17]='BoardMatrix'
;   K[18]='boardMatrix'
;   K[19]='SelectItemIds'
;   K[20]='selectItemIds'
;   K[21]='Score'
;   K[22]='score'
;   K[23]='BlockBoardModel'
;   K[24]='__index'
;   K[25]='Create'
;   K[26]='BlockBoardModel'
;   K[27]='Init'
;   K[28]='Destroy'
;   K[29]='_InitItemConfig'
;   K[30]='DropData'
;   K[31]='GetPairEvent'
;   K[32]='CheckConfig'
;   K[33]='_LoadBoardMatrix'
;   K[34]='_SaveBoardMatrix'
;   K[35]='CreateBoardPosition'
;   K[36]='_LoadBlockItems'
;   K[37]='_SaveBlockItems'
;   K[38]='_UpdateBlockItemContent'
;   K[39]='GetBlockItems'
;   K[40]='GetBlockSelectItemId'
;   K[41]='_GetNextBlockItemId'
;   K[42]='_SelectSuitableBlockItem'
;   K[43]='GetExtraMatrixByBoardPos'
;   K[44]='CanPlaceItemMatrix'
;   K[45]='PlaceItem'
;   K[46]='TryConsumeActProperty'
;   K[47]='CanConsumeActProperty'
;   K[48]='_TryRemoveBoardMatrixCube'
;   K[49]='CalculateTokenNumAndRemovedPos'
;   K[50]='GetScore'
;   K[51]='_AddScore'
;   K[52]='HasFinishedCurRound'
;   K[53]='GetTargetScore'
;   K[54]='GetRoundRewards'
;   K[55]='_CalculateBoardEdgeCount'
;   K[56]='GetHorizontalTiles'
;   K[57]='GetVerticalTiles'
;   K[58]='GetMatrix'
;   K[59]='GetRound'
;   K[60]='GetActPropertyType'
;   K[61]='TestRefreshBoardConfig'
;   K[62]='GetAllItemConfigs'
;   upvals: _ENV
;   locals: DBKey(14-140)
0000  NEWTABLE  R0 = {} (0 items)
0001  SETTABLE  R0[K1('PlaceBlockItem')] = K2(1)
0002  SETTABLE  R0[K3('RemoveBoardCube')] = K4(2)
0003  SETTABLE  R0[K5('AddBlockItem')] = K6(3)
0004  SETTABLE  R0[K7('AddScore')] = K8(4)
0005  SETTABLE  R0[K9('TestAddCube')] = K10(100)
0006  SETTABLE  R0[K11('TestRemoveCube')] = K12(101)
0007  SETTABLE  R0[K13('TestAddBlockItem')] = K14(102)
0008  SETTABLE  R0[K15('TestRefreshBoard')] = K16(103)
0009  SETTABUP  _ENV[K0('EBlockBoardEventType')] = R0
0010  NEWTABLE  R0 = {} (0 items)
0011  SETTABLE  R0[K17('BoardMatrix')] = K18('boardMatrix')
0012  SETTABLE  R0[K19('SelectItemIds')] = K20('selectItemIds')
0013  SETTABLE  R0[K21('Score')] = K22('score')
0014  NEWTABLE  R1 = {} (0 items)
0015  SETTABUP  _ENV[K23('BlockBoardModel')] = R1
0016  GETTABUP  R1 = _ENV[K23('BlockBoardModel')]
0017  GETTABUP  R2 = _ENV[K23('BlockBoardModel')]
0018  SETTABLE  R1[K24('__index')] = R2
0019  GETTABUP  R1 = _ENV[K23('BlockBoardModel')]
0020  CLOSURE   R2 = closure proto0
0021  SETTABLE  R1[K25('Create')] = R2
0022  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0023  CLOSURE   R2 = closure proto1
0024  SETTABLE  R1[K27('Init')] = R2
0025  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0026  CLOSURE   R2 = closure proto2
0027  SETTABLE  R1[K28('Destroy')] = R2
0028  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0029  CLOSURE   R2 = closure proto3
0030  SETTABLE  R1[K29('_InitItemConfig')] = R2
0031  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0032  CLOSURE   R2 = closure proto4
0033  SETTABLE  R1[K30('DropData')] = R2
0034  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0035  CLOSURE   R2 = closure proto5
0036  SETTABLE  R1[K31('GetPairEvent')] = R2
0037  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0038  CLOSURE   R2 = closure proto6
0039  SETTABLE  R1[K32('CheckConfig')] = R2
0040  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0041  CLOSURE   R2 = closure proto7
0042  SETTABLE  R1[K33('_LoadBoardMatrix')] = R2
0043  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0044  CLOSURE   R2 = closure proto8
0045  SETTABLE  R1[K34('_SaveBoardMatrix')] = R2
0046  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0047  CLOSURE   R2 = closure proto9
0048  SETTABLE  R1[K35('CreateBoardPosition')] = R2
0049  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0050  CLOSURE   R2 = closure proto10
0051  SETTABLE  R1[K36('_LoadBlockItems')] = R2
0052  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0053  CLOSURE   R2 = closure proto11
0054  SETTABLE  R1[K37('_SaveBlockItems')] = R2
0055  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0056  CLOSURE   R2 = closure proto12
0057  SETTABLE  R1[K38('_UpdateBlockItemContent')] = R2
0058  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0059  CLOSURE   R2 = closure proto13
0060  SETTABLE  R1[K39('GetBlockItems')] = R2
0061  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0062  CLOSURE   R2 = closure proto14
0063  SETTABLE  R1[K40('GetBlockSelectItemId')] = R2
0064  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0065  CLOSURE   R2 = closure proto15
0066  SETTABLE  R1[K41('_GetNextBlockItemId')] = R2
0067  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0068  CLOSURE   R2 = closure proto16
0069  SETTABLE  R1[K42('_SelectSuitableBlockItem')] = R2
0070  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0071  CLOSURE   R2 = closure proto17
0072  SETTABLE  R1[K43('GetExtraMatrixByBoardPos')] = R2
0073  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0074  CLOSURE   R2 = closure proto18
0075  SETTABLE  R1[K44('CanPlaceItemMatrix')] = R2
0076  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0077  CLOSURE   R2 = closure proto19
0078  SETTABLE  R1[K45('PlaceItem')] = R2
0079  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0080  CLOSURE   R2 = closure proto20
0081  SETTABLE  R1[K46('TryConsumeActProperty')] = R2
0082  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0083  CLOSURE   R2 = closure proto21
0084  SETTABLE  R1[K47('CanConsumeActProperty')] = R2
0085  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0086  CLOSURE   R2 = closure proto22
0087  SETTABLE  R1[K48('_TryRemoveBoardMatrixCube')] = R2
0088  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0089  CLOSURE   R2 = closure proto23
0090  SETTABLE  R1[K49('CalculateTokenNumAndRemovedPos')] = R2
0091  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0092  CLOSURE   R2 = closure proto24
0093  SETTABLE  R1[K50('GetScore')] = R2
0094  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0095  CLOSURE   R2 = closure proto25
0096  SETTABLE  R1[K51('_AddScore')] = R2
0097  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0098  CLOSURE   R2 = closure proto26
0099  SETTABLE  R1[K52('HasFinishedCurRound')] = R2
0100  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0101  CLOSURE   R2 = closure proto27
0102  SETTABLE  R1[K53('GetTargetScore')] = R2
0103  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0104  CLOSURE   R2 = closure proto28
0105  SETTABLE  R1[K54('GetRoundRewards')] = R2
0106  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0107  CLOSURE   R2 = closure proto29
0108  SETTABLE  R1[K55('_CalculateBoardEdgeCount')] = R2
0109  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0110  CLOSURE   R2 = closure proto30
0111  SETTABLE  R1[K56('GetHorizontalTiles')] = R2
0112  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0113  CLOSURE   R2 = closure proto31
0114  SETTABLE  R1[K57('GetVerticalTiles')] = R2
0115  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0116  CLOSURE   R2 = closure proto32
0117  SETTABLE  R1[K58('GetMatrix')] = R2
0118  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0119  CLOSURE   R2 = closure proto33
0120  SETTABLE  R1[K59('GetRound')] = R2
0121  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0122  CLOSURE   R2 = closure proto34
0123  SETTABLE  R1[K60('GetActPropertyType')] = R2
0124  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0125  CLOSURE   R2 = closure proto35
0126  SETTABLE  R1[K9('TestAddCube')] = R2
0127  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0128  CLOSURE   R2 = closure proto36
0129  SETTABLE  R1[K11('TestRemoveCube')] = R2
0130  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0131  CLOSURE   R2 = closure proto37
0132  SETTABLE  R1[K13('TestAddBlockItem')] = R2
0133  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0134  CLOSURE   R2 = closure proto38
0135  SETTABLE  R1[K61('TestRefreshBoardConfig')] = R2
0136  GETTABUP  R1 = _ENV[K26('BlockBoardModel')]
0137  CLOSURE   R2 = closure proto39
0138  SETTABLE  R1[K62('GetAllItemConfigs')] = R2
0139  RETURN    return R0..R-1
; ---------- proto0 [Create] ----------
  ; fn ?  line 65-69 np=5 va=0 ms=13 code=13 consts=3 upvals=1 protos=0
  ;   K[0]='setmetatable'
  ;   K[1]='BlockBoardModel'
  ;   K[2]='Init'
  ;   upvals: _ENV
  ;   locals: dbTable(0-13), boardConfig(0-13), itemConfigs(0-13), roundConfig(0-13), actPropertyType(0-13), boardModel(4-13)
  0000  GETTABUP  R5 = _ENV[K0('setmetatable')]
  0001  NEWTABLE  R6 = {} (0 items)
  0002  GETTABUP  R7 = _ENV[K1('BlockBoardModel')]
  0003  CALL      R5 = call(R5, 1 args, 2 rets)
  0004  SELF      R7 = R5[K2('Init')] (self)
  0005  MOVE      R8 = R0
  0006  MOVE      R9 = R0
  0007  MOVE      R10 = R0
  0008  MOVE      R11 = R0
  0009  MOVE      R12 = R0
  0010  CALL      R6 = call(R6, 0 args, 6 rets)
  0011  RETURN    return R5..R4
  0012  RETURN    return R0..R-1
; ---------- proto1 [Init] ----------
  ; fn ?  line 76-97 np=6 va=0 ms=8 code=23 consts=16 upvals=1 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='m_boardConfig'
  ;   K[2]='m_arrItemConfigs'
  ;   K[3]='m_actPropertyType'
  ;   K[4]='m_roundConfig'
  ;   K[5]='m_arrNumWeightInfo'
  ;   K[6]='blockNumWeight'
  ;   K[7]='m_targetScore'
  ;   K[8]='score'
  ;   K[9]='m_pairEvent'
  ;   K[10]='PairEvent'
  ;   K[11]='Create'
  ;   K[12]='_InitItemConfig'
  ;   K[13]='_LoadBoardMatrix'
  ;   K[14]='_LoadBlockItems'
  ;   K[15]='CheckConfig'
  ;   upvals: _ENV
  ;   locals: self(0-23), dbTable(0-23), boardConfig(0-23), itemConfigs(0-23), roundConfig(0-23), actPropertyType(0-23)
  0000  SETTABLE  R0[K0('m_dbTable')] = R1
  0001  SETTABLE  R0[K1('m_boardConfig')] = R2
  0002  SETTABLE  R0[K2('m_arrItemConfigs')] = R3
  0003  SETTABLE  R0[K3('m_actPropertyType')] = R5
  0004  SETTABLE  R0[K4('m_roundConfig')] = R4
  0005  GETTABLE  R6 = R4[K6('blockNumWeight')]
  0006  SETTABLE  R0[K5('m_arrNumWeightInfo')] = R6
  0007  GETTABLE  R6 = R4[K8('score')]
  0008  SETTABLE  R0[K7('m_targetScore')] = R6
  0009  GETTABUP  R6 = _ENV[K10('PairEvent')]
  0010  GETTABLE  R6 = R6[K11('Create')]
  0011  MOVE      R7 = R0
  0012  CALL      R6 = call(R6, 1 args, 1 rets)
  0013  SETTABLE  R0[K9('m_pairEvent')] = R6
  0014  SELF      R7 = R0[K12('_InitItemConfig')] (self)
  0015  CALL      R6 = call(R6, 0 args, 1 rets)
  0016  SELF      R7 = R0[K13('_LoadBoardMatrix')] (self)
  0017  CALL      R6 = call(R6, 0 args, 1 rets)
  0018  SELF      R7 = R0[K14('_LoadBlockItems')] (self)
  0019  CALL      R6 = call(R6, 0 args, 1 rets)
  0020  SELF      R7 = R0[K15('CheckConfig')] (self)
  0021  CALL      R6 = call(R6, 0 args, 1 rets)
  0022  RETURN    return R0..R-1
; ---------- proto2 [Destroy] ----------
  ; fn ?  line 99-100 np=1 va=0 ms=2 code=1 consts=0 upvals=0 protos=0
  ;   locals: self(0-1)
  0000  RETURN    return R0..R-1
; ---------- proto3 [_InitItemConfig] ----------
  ; fn ?  line 103-133 np=1 va=0 ms=17 code=55 consts=13 upvals=1 protos=0
  ;   K[0]='m_arrItemConfigs'
  ;   K[1]='m_oneCubeItemId'
  ;   K[2]=nil
  ;   K[3]='m_mapCubeNum2ArrItemId'
  ;   K[4]='m_mapId2ItemConfig'
  ;   K[5]='ipairs'
  ;   K[6]='id'
  ;   K[7]=0
  ;   K[8]=1
  ;   K[9]='itemMatrix'
  ;   K[10]='cubeNum'
  ;   K[11]='table'
  ;   K[12]='insert'
  ;   upvals: _ENV
  ;   locals: self(0-55), itemConfigs(1-55), cubeNum(7-55), (for generator)(10-54), (for state)(10-54), (for control)(10-54), _(11-52), itemConfig(11-52), (for index)(19-34), (for limit)(19-34), (for step)(19-34), y(20-33), (for index)(25-33), (for limit)(25-33), (for step)(25-33), x(26-32)
  0000  GETTABLE  R1 = R0[K0('m_arrItemConfigs')]
  0001  SETTABLE  R0[K1('m_oneCubeItemId')] = K2(nil)
  0002  NEWTABLE  R2 = {} (0 items)
  0003  SETTABLE  R0[K3('m_mapCubeNum2ArrItemId')] = R2
  0004  NEWTABLE  R2 = {} (0 items)
  0005  SETTABLE  R0[K4('m_mapId2ItemConfig')] = R2
  0006  LOADNIL   R2..R2 = nil
  0007  GETTABUP  R3 = _ENV[K5('ipairs')]
  0008  MOVE      R4 = R0
  0009  CALL      R3 = call(R3, 3 args, 1 rets)
  0010  JMP       (jump)   -> 52
  0011  GETTABLE  R8 = R0[K4('m_mapId2ItemConfig')]
  0012  GETTABLE  R9 = R7[K6('id')]
  0013  SETTABLE  R8[R9] = R7
  0014  LOADK     R2 = K7 0
  0015  LOADK     R8 = K8 1
  0016  GETTABLE  R9 = R7[K9('itemMatrix')]
  0017  LEN       R9 = len R0
  0018  LOADK     R10 = K8 1
  0019  FORPREP   forprep R8(sBx=13)   -> 33
  0020  LOADK     R12 = K8 1
  0021  GETTABLE  R13 = R7[K9('itemMatrix')]
  0022  GETTABLE  R13 = R13[K8(1)]
  0023  LEN       R13 = len R0
  0024  LOADK     R14 = K8 1
  0025  FORPREP   forprep R12(sBx=6)   -> 32
  0026  GETTABLE  R16 = R7[K9('itemMatrix')]
  0027  GETTABLE  R16 = R16[R11]
  0028  GETTABLE  R16 = R16[R15]
  0029  EQ        if R0 eq K8(1)   -> -122585
  0030  JMP       (jump)   -> 32
  0031  ADD       R2 = K8(1) add R2
  0032  FORLOOP   forloop R12(sBx=-7)   -> 26
  0033  FORLOOP   forloop R8(sBx=-14)   -> 20
  0034  SETTABLE  R7[K10('cubeNum')] = R2
  0035  GETTABLE  R8 = R0[K3('m_mapCubeNum2ArrItemId')]
  0036  GETTABLE  R8 = R8[R2]
  0037  EQ        if R0 eq K2(nil)   -> -126679
  0038  JMP       (jump)   -> 42
  0039  GETTABLE  R8 = R0[K3('m_mapCubeNum2ArrItemId')]
  0040  NEWTABLE  R9 = {} (0 items)
  0041  SETTABLE  R8[R2] = R9
  0042  GETTABUP  R8 = _ENV[K11('table')]
  0043  GETTABLE  R8 = R8[K12('insert')]
  0044  GETTABLE  R9 = R0[K3('m_mapCubeNum2ArrItemId')]
  0045  GETTABLE  R9 = R9[R2]
  0046  GETTABLE  R10 = R7[K6('id')]
  0047  CALL      R8 = call(R8, 0 args, 2 rets)
  0048  EQ        if R0 eq K8(1)   -> -129734
  0049  JMP       (jump)   -> 52
  0050  GETTABLE  R8 = R7[K6('id')]
  0051  SETTABLE  R0[K1('m_oneCubeItemId')] = R8
  0052  TFORCALL  tforcall R3
  0053  TFORLOOP  tforloop R5(sBx=-43)   -> 11
  0054  RETURN    return R0..R-1
; ---------- proto4 [DropData] ----------
  ; fn ?  line 135-140 np=1 va=0 ms=3 code=8 consts=4 upvals=0 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='Drop'
  ;   K[2]='m_arrSelectItems'
  ;   K[3]='m_boardMatrix'
  ;   locals: self(0-8)
  0000  GETTABLE  R1 = R0[K0('m_dbTable')]
  0001  SELF      R2 = R1[K1('Drop')] (self)
  0002  CALL      R1 = call(R1, 0 args, 1 rets)
  0003  NEWTABLE  R1 = {} (0 items)
  0004  SETTABLE  R0[K2('m_arrSelectItems')] = R1
  0005  NEWTABLE  R1 = {} (0 items)
  0006  SETTABLE  R0[K3('m_boardMatrix')] = R1
  0007  RETURN    return R0..R-1
; ---------- proto5 [GetPairEvent] ----------
  ; fn ?  line 142-144 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_pairEvent'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_pairEvent')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto6 [CheckConfig] ----------
  ; fn ?  line 146-152 np=1 va=0 ms=2 code=7 consts=2 upvals=1 protos=0
  ;   K[0]='GameConfig'
  ;   K[1]='IsTestMode'
  ;   upvals: _ENV
  ;   locals: self(0-7)
  0000  GETTABUP  R1 = _ENV[K0('GameConfig')]
  0001  GETTABLE  R1 = R1[K1('IsTestMode')]
  0002  CALL      R1 = call(R1, 1 args, 0 rets)
  0003  TEST      if not R1 then   -> -131066
  0004  JMP       (jump)   -> 6
  0005  RETURN    return R0..R-1
  0006  RETURN    return R0..R-1
; ---------- proto7 [_LoadBoardMatrix] ----------
  ; fn ?  line 157-170 np=1 va=0 ms=7 code=39 consts=20 upvals=2 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='GetValue'
  ;   K[2]='BoardMatrix'
  ;   K[3]='value'
  ;   K[4]='StringUtil'
  ;   K[5]='IsNilOrEmpty'
  ;   K[6]='m_boardMatrix'
  ;   K[7]='json'
  ;   K[8]='decode'
  ;   K[9]='Replace'
  ;   K[10]='@'
  ;   K[11]=','
  ;   K[12]='Table'
  ;   K[13]='DeepCopy'
  ;   K[14]='m_boardConfig'
  ;   K[15]='boardMatrix'
  ;   K[16]='_SaveBoardMatrix'
  ;   K[17]='m_boardWidth'
  ;   K[18]=1
  ;   K[19]='m_boardHeight'
  ;   upvals: DBKey, _ENV
  ;   locals: self(0-39), strBoardMatrix(5-39)
  0000  GETTABLE  R1 = R0[K0('m_dbTable')]
  0001  SELF      R2 = R1[K1('GetValue')] (self)
  0002  GETTABUP  R3 = DBKey[K2('BoardMatrix')]
  0003  LOADK     R4 = K3 'value'
  0004  CALL      R1 = call(R1, 1 args, 3 rets)
  0005  GETTABUP  R2 = _ENV[K4('StringUtil')]
  0006  GETTABLE  R2 = R2[K5('IsNilOrEmpty')]
  0007  MOVE      R3 = R0
  0008  CALL      R2 = call(R2, 1 args, 1 rets)
  0009  TEST      if not R2 then   -> -131060
  0010  JMP       (jump)   -> 22
  0011  GETTABUP  R2 = _ENV[K7('json')]
  0012  GETTABLE  R2 = R2[K8('decode')]
  0013  GETTABUP  R3 = _ENV[K4('StringUtil')]
  0014  GETTABLE  R3 = R3[K9('Replace')]
  0015  MOVE      R4 = R0
  0016  LOADK     R5 = K10 '@'
  0017  LOADK     R6 = K11 ','
  0018  CALL      R3 = call(R3, -1 args, 3 rets)
  0019  CALL      R2 = call(R2, 1 args, -1 rets)
  0020  SETTABLE  R0[K6('m_boardMatrix')] = R2
  0021  JMP       (jump)   -> 31
  0022  GETTABUP  R2 = _ENV[K12('Table')]
  0023  GETTABLE  R2 = R2[K13('DeepCopy')]
  0024  GETTABLE  R3 = R0[K14('m_boardConfig')]
  0025  GETTABLE  R3 = R3[K15('boardMatrix')]
  0026  LOADBOOL  R4 = true
  0027  CALL      R2 = call(R2, 1 args, 2 rets)
  0028  SETTABLE  R0[K6('m_boardMatrix')] = R2
  0029  SELF      R3 = R0[K16('_SaveBoardMatrix')] (self)
  0030  CALL      R2 = call(R2, 0 args, 1 rets)
  0031  GETTABLE  R2 = R0[K6('m_boardMatrix')]
  0032  GETTABLE  R2 = R2[K18(1)]
  0033  LEN       R2 = len R0
  0034  SETTABLE  R0[K17('m_boardWidth')] = R2
  0035  GETTABLE  R2 = R0[K6('m_boardMatrix')]
  0036  LEN       R2 = len R0
  0037  SETTABLE  R0[K19('m_boardHeight')] = R2
  0038  RETURN    return R0..R-1
; ---------- proto8 [_SaveBoardMatrix] ----------
  ; fn ?  line 173-180 np=1 va=0 ms=7 code=23 consts=13 upvals=2 protos=0
  ;   K[0]='Table'
  ;   K[1]='IsEmpty'
  ;   K[2]='m_boardMatrix'
  ;   K[3]='StringUtil'
  ;   K[4]='Replace'
  ;   K[5]='json'
  ;   K[6]='encode'
  ;   K[7]=','
  ;   K[8]='@'
  ;   K[9]='m_dbTable'
  ;   K[10]='Set'
  ;   K[11]='BoardMatrix'
  ;   K[12]='value'
  ;   upvals: _ENV, DBKey
  ;   locals: self(0-23), strBoardMatrix(16-23)
  0000  GETTABUP  R1 = _ENV[K0('Table')]
  0001  GETTABLE  R1 = R1[K1('IsEmpty')]
  0002  GETTABLE  R2 = R0[K2('m_boardMatrix')]
  0003  CALL      R1 = call(R1, 1 args, 1 rets)
  0004  TEST      if not R1 then   -> -131066
  0005  JMP       (jump)   -> 7
  0006  RETURN    return R0..R-1
  0007  GETTABUP  R1 = _ENV[K3('StringUtil')]
  0008  GETTABLE  R1 = R1[K4('Replace')]
  0009  GETTABUP  R2 = _ENV[K5('json')]
  0010  GETTABLE  R2 = R2[K6('encode')]
  0011  GETTABLE  R3 = R0[K2('m_boardMatrix')]
  0012  CALL      R2 = call(R2, 1 args, 1 rets)
  0013  LOADK     R3 = K7 ','
  0014  LOADK     R4 = K8 '@'
  0015  CALL      R1 = call(R1, 1 args, 3 rets)
  0016  GETTABLE  R2 = R0[K9('m_dbTable')]
  0017  SELF      R3 = R2[K10('Set')] (self)
  0018  GETTABUP  R4 = DBKey[K11('BoardMatrix')]
  0019  LOADK     R5 = K12 'value'
  0020  MOVE      R6 = R0
  0021  CALL      R2 = call(R2, 0 args, 4 rets)
  0022  RETURN    return R0..R-1
; ---------- proto9 [CreateBoardPosition] ----------
  ; fn ?  line 182-186 np=3 va=0 ms=9 code=11 consts=3 upvals=1 protos=0
  ;   K[0]='setmetatable'
  ;   K[1]='BoardPosition'
  ;   K[2]='Init'
  ;   upvals: _ENV
  ;   locals: self(0-11), x(0-11), y(0-11), position(4-11)
  0000  GETTABUP  R3 = _ENV[K0('setmetatable')]
  0001  NEWTABLE  R4 = {} (0 items)
  0002  GETTABUP  R5 = _ENV[K1('BoardPosition')]
  0003  CALL      R3 = call(R3, 1 args, 2 rets)
  0004  SELF      R5 = R3[K2('Init')] (self)
  0005  MOVE      R6 = R0
  0006  MOVE      R7 = R0
  0007  MOVE      R8 = R0
  0008  CALL      R4 = call(R4, 0 args, 4 rets)
  0009  RETURN    return R3..R2
  0010  RETURN    return R0..R-1
; ---------- proto10 [_LoadBlockItems] ----------
  ; fn ?  line 192-203 np=1 va=0 ms=7 code=36 consts=18 upvals=2 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='GetValue'
  ;   K[2]='SelectItemIds'
  ;   K[3]='value'
  ;   K[4]='StringUtil'
  ;   K[5]='IsNilOrEmpty'
  ;   K[6]='m_arrSelectItems'
  ;   K[7]='json'
  ;   K[8]='decode'
  ;   K[9]='Replace'
  ;   K[10]='@'
  ;   K[11]=','
  ;   K[12]='Table'
  ;   K[13]='DeepCopy'
  ;   K[14]='m_boardConfig'
  ;   K[15]='initItems'
  ;   K[16]='_SaveBlockItems'
  ;   K[17]='_UpdateBlockItemContent'
  ;   upvals: DBKey, _ENV
  ;   locals: self(0-36), strItems(5-36)
  0000  GETTABLE  R1 = R0[K0('m_dbTable')]
  0001  SELF      R2 = R1[K1('GetValue')] (self)
  0002  GETTABUP  R3 = DBKey[K2('SelectItemIds')]
  0003  LOADK     R4 = K3 'value'
  0004  CALL      R1 = call(R1, 1 args, 3 rets)
  0005  GETTABUP  R2 = _ENV[K4('StringUtil')]
  0006  GETTABLE  R2 = R2[K5('IsNilOrEmpty')]
  0007  MOVE      R3 = R0
  0008  CALL      R2 = call(R2, 1 args, 1 rets)
  0009  TEST      if not R2 then   -> -131060
  0010  JMP       (jump)   -> 22
  0011  GETTABUP  R2 = _ENV[K7('json')]
  0012  GETTABLE  R2 = R2[K8('decode')]
  0013  GETTABUP  R3 = _ENV[K4('StringUtil')]
  0014  GETTABLE  R3 = R3[K9('Replace')]
  0015  MOVE      R4 = R0
  0016  LOADK     R5 = K10 '@'
  0017  LOADK     R6 = K11 ','
  0018  CALL      R3 = call(R3, -1 args, 3 rets)
  0019  CALL      R2 = call(R2, 1 args, -1 rets)
  0020  SETTABLE  R0[K6('m_arrSelectItems')] = R2
  0021  JMP       (jump)   -> 33
  0022  GETTABUP  R2 = _ENV[K12('Table')]
  0023  GETTABLE  R2 = R2[K13('DeepCopy')]
  0024  GETTABLE  R3 = R0[K14('m_boardConfig')]
  0025  GETTABLE  R3 = R3[K15('initItems')]
  0026  CALL      R2 = call(R2, 1 args, 1 rets)
  0027  TEST      if not R2 then   -> -131042
  0028  JMP       (jump)   -> 30
  0029  NEWTABLE  R2 = {} (0 items)
  0030  SETTABLE  R0[K6('m_arrSelectItems')] = R2
  0031  SELF      R3 = R0[K16('_SaveBlockItems')] (self)
  0032  CALL      R2 = call(R2, 0 args, 1 rets)
  0033  SELF      R3 = R0[K17('_UpdateBlockItemContent')] (self)
  0034  CALL      R2 = call(R2, 0 args, 1 rets)
  0035  RETURN    return R0..R-1
; ---------- proto11 [_SaveBlockItems] ----------
  ; fn ?  line 205-211 np=1 va=0 ms=9 code=22 consts=13 upvals=2 protos=0
  ;   K[0]='Table'
  ;   K[1]='IsEmpty'
  ;   K[2]='m_arrSelectItems'
  ;   K[3]='m_dbTable'
  ;   K[4]='Set'
  ;   K[5]='SelectItemIds'
  ;   K[6]='value'
  ;   K[7]='StringUtil'
  ;   K[8]='Replace'
  ;   K[9]='json'
  ;   K[10]='encode'
  ;   K[11]=','
  ;   K[12]='@'
  ;   upvals: _ENV, DBKey
  ;   locals: self(0-22)
  0000  GETTABUP  R1 = _ENV[K0('Table')]
  0001  GETTABLE  R1 = R1[K1('IsEmpty')]
  0002  GETTABLE  R2 = R0[K2('m_arrSelectItems')]
  0003  CALL      R1 = call(R1, 1 args, 1 rets)
  0004  TEST      if not R1 then   -> -131066
  0005  JMP       (jump)   -> 7
  0006  RETURN    return R0..R-1
  0007  GETTABLE  R1 = R0[K3('m_dbTable')]
  0008  SELF      R2 = R1[K4('Set')] (self)
  0009  GETTABUP  R3 = DBKey[K5('SelectItemIds')]
  0010  LOADK     R4 = K6 'value'
  0011  GETTABUP  R5 = _ENV[K7('StringUtil')]
  0012  GETTABLE  R5 = R5[K8('Replace')]
  0013  GETTABUP  R6 = _ENV[K9('json')]
  0014  GETTABLE  R6 = R6[K10('encode')]
  0015  GETTABLE  R7 = R0[K2('m_arrSelectItems')]
  0016  CALL      R6 = call(R6, 1 args, 1 rets)
  0017  LOADK     R7 = K11 ','
  0018  LOADK     R8 = K12 '@'
  0019  CALL      R5 = call(R5, -1 args, 3 rets)
  0020  CALL      R1 = call(R1, 0 args, -1 rets)
  0021  RETURN    return R0..R-1
; ---------- proto12 [_UpdateBlockItemContent] ----------
  ; fn ?  line 213-220 np=1 va=0 ms=8 code=20 consts=6 upvals=1 protos=0
  ;   K[0]='m_mapSelectItemId'
  ;   K[1]='ipairs'
  ;   K[2]='m_arrSelectItems'
  ;   K[3]='StringUtil'
  ;   K[4]='IsNilOrEmpty'
  ;   K[5]=true
  ;   upvals: _ENV
  ;   locals: self(0-20), (for generator)(8-19), (for state)(8-19), (for control)(8-19), _(9-17), itemId(9-17)
  0000  NEWTABLE  R1 = {} (0 items)
  0001  SETTABLE  R0[K0('m_mapSelectItemId')] = R1
  0002  GETTABUP  R1 = _ENV[K1('ipairs')]
  0003  GETTABLE  R2 = R0[K2('m_arrSelectItems')]
  0004  TEST      if not R2 then   -> -131065
  0005  JMP       (jump)   -> 7
  0006  NEWTABLE  R2 = {} (0 items)
  0007  CALL      R1 = call(R1, 3 args, 1 rets)
  0008  JMP       (jump)   -> 17
  0009  GETTABUP  R6 = _ENV[K3('StringUtil')]
  0010  GETTABLE  R6 = R6[K4('IsNilOrEmpty')]
  0011  MOVE      R7 = R0
  0012  CALL      R6 = call(R6, 1 args, 1 rets)
  0013  TEST      if not R6 then   -> -131056
  0014  JMP       (jump)   -> 17
  0015  GETTABLE  R6 = R0[K0('m_mapSelectItemId')]
  0016  SETTABLE  R6[R5] = K5(true)
  0017  TFORCALL  tforcall R1
  0018  TFORLOOP  tforloop R3(sBx=-10)   -> 9
  0019  RETURN    return R0..R-1
; ---------- proto13 [GetBlockItems] ----------
  ; fn ?  line 222-228 np=1 va=0 ms=10 code=15 consts=5 upvals=1 protos=0
  ;   K[0]='ipairs'
  ;   K[1]='m_arrSelectItems'
  ;   K[2]='table'
  ;   K[3]='insert'
  ;   K[4]='m_mapId2ItemConfig'
  ;   upvals: _ENV
  ;   locals: self(0-15), arrConfig(1-15), (for generator)(4-13), (for state)(4-13), (for control)(4-13), _(5-11), itemId(5-11)
  0000  NEWTABLE  R1 = {} (0 items)
  0001  GETTABUP  R2 = _ENV[K0('ipairs')]
  0002  GETTABLE  R3 = R0[K1('m_arrSelectItems')]
  0003  CALL      R2 = call(R2, 3 args, 1 rets)
  0004  JMP       (jump)   -> 11
  0005  GETTABUP  R7 = _ENV[K2('table')]
  0006  GETTABLE  R7 = R7[K3('insert')]
  0007  MOVE      R8 = R0
  0008  GETTABLE  R9 = R0[K4('m_mapId2ItemConfig')]
  0009  GETTABLE  R9 = R9[R6]
  0010  CALL      R7 = call(R7, 0 args, 2 rets)
  0011  TFORCALL  tforcall R2
  0012  TFORLOOP  tforloop R4(sBx=-8)   -> 5
  0013  RETURN    return R1..R0
  0014  RETURN    return R0..R-1
; ---------- proto14 [GetBlockSelectItemId] ----------
  ; fn ?  line 230-232 np=2 va=0 ms=3 code=4 consts=1 upvals=0 protos=0
  ;   K[0]='m_arrSelectItems'
  ;   locals: self(0-4), index(0-4)
  0000  GETTABLE  R2 = R0[K0('m_arrSelectItems')]
  0001  GETTABLE  R2 = R2[R1]
  0002  RETURN    return R2..R1
  0003  RETURN    return R0..R-1
; ---------- proto15 [_GetNextBlockItemId] ----------
  ; fn ?  line 235-263 np=1 va=0 ms=15 code=75 consts=24 upvals=1 protos=0
  ;   K[0]='Table'
  ;   K[1]='ShallowCopy'
  ;   K[2]='m_arrNumWeightInfo'
  ;   K[3]=''
  ;   K[4]=1
  ;   K[5]=0
  ;   K[6]='ListWeightSelectOne'
  ;   K[7]='Num'
  ;   K[8]='table'
  ;   K[9]='remove'
  ;   K[10]='m_mapCubeNum2ArrItemId'
  ;   K[11]='IsEmpty'
  ;   K[12]='string'
  ;   K[13]='format'
  ;   K[14]='[%d] 随机格子数量: %d, '
  ;   K[15]='_SelectSuitableBlockItem'
  ;   K[16]='StringUtil'
  ;   K[17]='IsNilOrEmpty'
  ;   K[18]='Log'
  ;   K[19]='Info'
  ;   K[20]='[Block] '
  ;   K[21]='\n'
  ;   K[22]='[兜底] 选择1x1棋子'
  ;   K[23]='m_oneCubeItemId'
  ;   upvals: _ENV
  ;   locals: self(0-75), arrNumWeight(4-75), logStr(5-75), logIndex(6-75), selectItemId(7-75), selectLogStr(7-75), numWeight(14-64), index(14-64), num(15-64), arrItemIds(22-64)
  0000  GETTABUP  R1 = _ENV[K0('Table')]
  0001  GETTABLE  R1 = R1[K1('ShallowCopy')]
  0002  GETTABLE  R2 = R0[K2('m_arrNumWeightInfo')]
  0003  CALL      R1 = call(R1, 1 args, 1 rets)
  0004  LOADK     R2 = K3 ''
  0005  LOADK     R3 = K4 1
  0006  LOADNIL   R4..R4 = nil
  0007  LEN       R6 = len R0
  0008  LT        if R0 lt R6   -> 2576
  0009  JMP       (jump)   -> 65
  0010  GETTABUP  R6 = _ENV[K0('Table')]
  0011  GETTABLE  R6 = R6[K6('ListWeightSelectOne')]
  0012  MOVE      R7 = R0
  0013  CALL      R6 = call(R6, 2 args, 1 rets)
  0014  GETTABLE  R8 = R6[K7('Num')]
  0015  GETTABUP  R9 = _ENV[K8('table')]
  0016  GETTABLE  R9 = R9[K9('remove')]
  0017  MOVE      R10 = R0
  0018  MOVE      R11 = R0
  0019  CALL      R9 = call(R9, 0 args, 2 rets)
  0020  GETTABLE  R9 = R0[K10('m_mapCubeNum2ArrItemId')]
  0021  GETTABLE  R9 = R9[R8]
  0022  GETTABUP  R10 = _ENV[K0('Table')]
  0023  GETTABLE  R10 = R10[K11('IsEmpty')]
  0024  MOVE      R11 = R0
  0025  CALL      R10 = call(R10, 1 args, 1 rets)
  0026  TEST      if not R10 then   -> -131043
  0027  JMP       (jump)   -> 60
  0028  MOVE      R10 = R0
  0029  GETTABUP  R11 = _ENV[K12('string')]
  0030  GETTABLE  R11 = R11[K13('format')]
  0031  LOADK     R12 = K14 '[%d] 随机格子数量: %d, '
  0032  MOVE      R13 = R0
  0033  MOVE      R14 = R0
  0034  CALL      R11 = call(R11, 1 args, 3 rets)
  0035  CONCAT    R2 = concat(R2..R10)
  0036  SELF      R11 = R0[K15('_SelectSuitableBlockItem')] (self)
  0037  MOVE      R12 = R0
  0038  MOVE      R13 = R0
  0039  CALL      R10 = call(R10, 2 args, 3 rets)
  0040  MOVE      R5 = R0
  0041  MOVE      R4 = R0
  0042  MOVE      R10 = R0
  0043  TESTSET   if R1 then R11   -> -128466
  0044  JMP       (jump)   -> 46
  0045  LOADK     R11 = K3 ''
  0046  CONCAT    R2 = concat(R2..R10)
  0047  GETTABUP  R10 = _ENV[K16('StringUtil')]
  0048  GETTABLE  R10 = R10[K17('IsNilOrEmpty')]
  0049  MOVE      R11 = R0
  0050  CALL      R10 = call(R10, 1 args, 1 rets)
  0051  TEST      if not R10 then   -> -131018
  0052  JMP       (jump)   -> 60
  0053  GETTABUP  R10 = _ENV[K18('Log')]
  0054  GETTABLE  R10 = R10[K19('Info')]
  0055  LOADK     R11 = K20 '[Block] '
  0056  MOVE      R12 = R0
  0057  CONCAT    R11 = concat(R11..R11)
  0058  CALL      R10 = call(R10, 0 args, 1 rets)
  0059  RETURN    return R4..R3
  0060  MOVE      R10 = R0
  0061  LOADK     R11 = K21 '\n'
  0062  CONCAT    R2 = concat(R2..R10)
  0063  ADD       R3 = K4(1) add R3
  0064  JMP       (jump)   -> 7
  0065  GETTABUP  R6 = _ENV[K18('Log')]
  0066  GETTABLE  R6 = R6[K19('Info')]
  0067  LOADK     R7 = K20 '[Block] '
  0068  MOVE      R8 = R0
  0069  LOADK     R9 = K22 '[兜底] 选择1x1棋子'
  0070  CONCAT    R7 = concat(R7..R7)
  0071  CALL      R6 = call(R6, 0 args, 1 rets)
  0072  GETTABLE  R6 = R0[K23('m_oneCubeItemId')]
  0073  RETURN    return R6..R5
  0074  RETURN    return R0..R-1
; ---------- proto16 [_SelectSuitableBlockItem] ----------
  ; fn ?  line 268-331 np=2 va=0 ms=34 code=190 consts=30 upvals=1 protos=0
  ;   K[0]='Table'
  ;   K[1]='IsEmpty'
  ;   K[2]=3
  ;   K[3]=0
  ;   K[4]='math'
  ;   K[5]='maxinteger'
  ;   K[6]='ipairs'
  ;   K[7]='m_mapSelectItemId'
  ;   K[8]=-1
  ;   K[9]='m_mapId2ItemConfig'
  ;   K[10]=1
  ;   K[11]='m_boardHeight'
  ;   K[12]='itemMatrix'
  ;   K[13]='m_boardWidth'
  ;   K[14]='CanPlaceItemMatrix'
  ;   K[15]='CalculateTokenNumAndRemovedPos'
  ;   K[16]='max'
  ;   K[17]='_CalculateBoardEdgeCount'
  ;   K[18]='min'
  ;   K[19]='table'
  ;   K[20]='insert'
  ;   K[21]='itemId'
  ;   K[22]='Weight'
  ;   K[23]='concat'
  ;   K[24]=', '
  ;   K[25]='ListWeightSelectOne'
  ;   K[26]='string'
  ;   K[27]='format'
  ;   K[28]='最高消除倍率: %d, 最少边数: %d, 待随机列表: [%s], 随机结果: %s'
  ;   K[29]='所有形状均不可放置，重新随机数量'
  ;   upvals: _ENV
  ;   locals: self(0-190), arrItemId(0-190), kMinPreperScoreRatio(9-190), maxRatio(10-190), arrMaxScoreItemId(11-190), minEdgeCount(13-190), arrMinEdgeCountItemId(14-190), itemConfig(15-190), bPlace(15-190), arrBoardPos(15-190), curMaxScore(15-190), curRatio(15-190), curEdgeCount(15-190), _(15-190), ratio(15-190), edgeCount(15-190), (for generator)(18-143), (for state)(18-143), (for control)(18-143), _(19-141), itemId(19-141), (for index)(35-83), (for limit)(35-83), (for step)(35-83), y(36-82), (for index)(44-82), (for limit)(44-82), (for step)(44-82), x(45-81), arrItemInfo(148-190), arrItemId(155-186), (for generator)(158-166), (for state)(158-166), (for control)(158-166), _(159-164), itemInfo(159-164), strItems(171-186), resultItemId(176-186)
  0000  GETTABUP  R2 = _ENV[K0('Table')]
  0001  GETTABLE  R2 = R2[K1('IsEmpty')]
  0002  MOVE      R3 = R0
  0003  CALL      R2 = call(R2, 1 args, 1 rets)
  0004  TEST      if not R2 then   -> -131066
  0005  JMP       (jump)   -> 8
  0006  LOADNIL   R2..R2 = nil
  0007  RETURN    return R2..R1
  0008  LOADK     R2 = K2 3
  0009  LOADK     R3 = K3 0
  0010  NEWTABLE  R4 = {} (0 items)
  0011  GETTABUP  R5 = _ENV[K4('math')]
  0012  GETTABLE  R5 = R5[K5('maxinteger')]
  0013  NEWTABLE  R6 = {} (0 items)
  0014  LOADNIL   R7..R7 = nil
  0015  GETTABUP  R16 = _ENV[K6('ipairs')]
  0016  MOVE      R17 = R0
  0017  CALL      R16 = call(R16, 3 args, 1 rets)
  0018  JMP       (jump)   -> 141
  0019  GETTABLE  R21 = R0[K7('m_mapSelectItemId')]
  0020  GETTABLE  R21 = R21[R20]
  0021  TEST      if not R21 then   -> -131048
  0022  JMP       (jump)   -> 141
  0023  LOADK     R11 = K8 -1
  0024  GETTABUP  R21 = _ENV[K4('math')]
  0025  GETTABLE  R12 = R21[K5('maxinteger')]
  0026  GETTABLE  R21 = R0[K9('m_mapId2ItemConfig')]
  0027  GETTABLE  R7 = R21[R20]
  0028  LOADK     R21 = K10 1
  0029  GETTABLE  R22 = R0[K11('m_boardHeight')]
  0030  GETTABLE  R23 = R7[K12('itemMatrix')]
  0031  LEN       R23 = len R0
  0032  SUB       R22 = R23 sub R22
  0033  ADD       R22 = K10(1) add R22
  0034  LOADK     R23 = K10 1
  0035  FORPREP   forprep R21(sBx=46)   -> 82
  0036  LOADK     R25 = K10 1
  0037  GETTABLE  R26 = R0[K13('m_boardWidth')]
  0038  GETTABLE  R27 = R7[K12('itemMatrix')]
  0039  GETTABLE  R27 = R27[K10(1)]
  0040  LEN       R27 = len R0
  0041  SUB       R26 = R27 sub R26
  0042  ADD       R26 = K10(1) add R26
  0043  LOADK     R27 = K10 1
  0044  FORPREP   forprep R25(sBx=36)   -> 81
  0045  SELF      R30 = R0[K14('CanPlaceItemMatrix')] (self)
  0046  MOVE      R31 = R0
  0047  MOVE      R32 = R0
  0048  GETTABLE  R33 = R7[K12('itemMatrix')]
  0049  CALL      R29 = call(R29, 2 args, 4 rets)
  0050  MOVE      R9 = R0
  0051  MOVE      R8 = R0
  0052  TEST      if not R8 then   -> -131018
  0053  JMP       (jump)   -> 81
  0054  SELF      R30 = R0[K15('CalculateTokenNumAndRemovedPos')] (self)
  0055  MOVE      R31 = R0
  0056  CALL      R29 = call(R29, 4 args, 2 rets)
  0057  MOVE      R14 = R0
  0058  MOVE      R19 = R0
  0059  MOVE      R19 = R0
  0060  MOVE      R19 = R0
  0061  GETTABUP  R29 = _ENV[K4('math')]
  0062  GETTABLE  R29 = R29[K16('max')]
  0063  MOVE      R30 = R0
  0064  MOVE      R31 = R0
  0065  CALL      R29 = call(R29, 1 args, 2 rets)
  0066  MOVE      R11 = R0
  0067  LT        if R0 lt R2   -> -125369
  0068  JMP       (jump)   -> 81
  0069  LT        if R0 lt R2   -> -129463
  0070  JMP       (jump)   -> 81
  0071  SELF      R30 = R0[K17('_CalculateBoardEdgeCount')] (self)
  0072  MOVE      R31 = R0
  0073  CALL      R29 = call(R29, 1 args, 2 rets)
  0074  MOVE      R15 = R0
  0075  GETTABUP  R29 = _ENV[K4('math')]
  0076  GETTABLE  R29 = R29[K18('min')]
  0077  MOVE      R30 = R0
  0078  MOVE      R31 = R0
  0079  CALL      R29 = call(R29, 1 args, 2 rets)
  0080  MOVE      R12 = R0
  0081  FORLOOP   forloop R25(sBx=-37)   -> 45
  0082  FORLOOP   forloop R21(sBx=-47)   -> 36
  0083  EQ        if R0 eq R3   -> -125352
  0084  JMP       (jump)   -> 97
  0085  GETTABUP  R21 = _ENV[K19('table')]
  0086  GETTABLE  R21 = R21[K20('insert')]
  0087  MOVE      R22 = R0
  0088  NEWTABLE  R23 = {} (0 items)
  0089  SETTABLE  R23[K21('itemId')] = R20
  0090  GETTABLE  R24 = R7[K22('Weight')]
  0091  TEST      if not R24 then   -> -130978
  0092  JMP       (jump)   -> 94
  0093  LOADK     R24 = K10 1
  0094  SETTABLE  R23[K22('Weight')] = R24
  0095  CALL      R21 = call(R21, 0 args, 2 rets)
  0096  JMP       (jump)   -> 110
  0097  LT        if R0 lt R11   -> -129426
  0098  JMP       (jump)   -> 110
  0099  NEWTABLE  R21 = {} (1 items)
  0100  NEWTABLE  R22 = {} (0 items)
  0101  SETTABLE  R22[K21('itemId')] = R20
  0102  GETTABLE  R23 = R7[K22('Weight')]
  0103  TEST      if not R23 then   -> -130966
  0104  JMP       (jump)   -> 106
  0105  LOADK     R23 = K10 1
  0106  SETTABLE  R22[K22('Weight')] = R23
  0107  SETLIST   setlist R21[B=1,C=1]
  0108  MOVE      R4 = R0
  0109  MOVE      R3 = R0
  0110  EQ        if R0 eq R5   -> -124811
  0111  JMP       (jump)   -> 128
  0112  GETTABUP  R21 = _ENV[K4('math')]
  0113  GETTABLE  R21 = R21[K5('maxinteger')]
  0114  EQ        if R1 eq R21   -> -124791
  0115  JMP       (jump)   -> 128
  0116  GETTABUP  R21 = _ENV[K19('table')]
  0117  GETTABLE  R21 = R21[K20('insert')]
  0118  MOVE      R22 = R0
  0119  NEWTABLE  R23 = {} (0 items)
  0120  SETTABLE  R23[K21('itemId')] = R20
  0121  GETTABLE  R24 = R7[K22('Weight')]
  0122  TEST      if not R24 then   -> -130947
  0123  JMP       (jump)   -> 125
  0124  LOADK     R24 = K10 1
  0125  SETTABLE  R23[K22('Weight')] = R24
  0126  CALL      R21 = call(R21, 0 args, 2 rets)
  0127  JMP       (jump)   -> 141
  0128  LT        if R0 lt R5   -> -124793
  0129  JMP       (jump)   -> 141
  0130  NEWTABLE  R21 = {} (1 items)
  0131  NEWTABLE  R22 = {} (0 items)
  0132  SETTABLE  R22[K21('itemId')] = R20
  0133  GETTABLE  R23 = R7[K22('Weight')]
  0134  TEST      if not R23 then   -> -130935
  0135  JMP       (jump)   -> 137
  0136  LOADK     R23 = K10 1
  0137  SETTABLE  R22[K22('Weight')] = R23
  0138  SETLIST   setlist R21[B=1,C=1]
  0139  MOVE      R6 = R0
  0140  MOVE      R5 = R0
  0141  TFORCALL  tforcall R16
  0142  TFORLOOP  tforloop R18(sBx=-124)   -> 19
  0143  LE        if R0 le R3   -> -129900
  0144  JMP       (jump)   -> 147
  0145  TESTSET   if R1 then R16   -> -128876
  0146  JMP       (jump)   -> 148
  0147  MOVE      R16 = R0
  0148  GETTABUP  R17 = _ENV[K0('Table')]
  0149  GETTABLE  R17 = R17[K1('IsEmpty')]
  0150  MOVE      R18 = R0
  0151  CALL      R17 = call(R17, 1 args, 1 rets)
  0152  TEST      if not R17 then   -> -130917
  0153  JMP       (jump)   -> 186
  0154  NEWTABLE  R17 = {} (0 items)
  0155  GETTABUP  R18 = _ENV[K6('ipairs')]
  0156  MOVE      R19 = R0
  0157  CALL      R18 = call(R18, 3 args, 1 rets)
  0158  JMP       (jump)   -> 164
  0159  GETTABUP  R23 = _ENV[K19('table')]
  0160  GETTABLE  R23 = R23[K20('insert')]
  0161  MOVE      R24 = R0
  0162  GETTABLE  R25 = R22[K21('itemId')]
  0163  CALL      R23 = call(R23, 0 args, 2 rets)
  0164  TFORCALL  tforcall R18
  0165  TFORLOOP  tforloop R20(sBx=-7)   -> 159
  0166  GETTABUP  R18 = _ENV[K19('table')]
  0167  GETTABLE  R18 = R18[K23('concat')]
  0168  MOVE      R19 = R0
  0169  LOADK     R20 = K24 ', '
  0170  CALL      R18 = call(R18, 1 args, 2 rets)
  0171  GETTABUP  R19 = _ENV[K0('Table')]
  0172  GETTABLE  R19 = R19[K25('ListWeightSelectOne')]
  0173  MOVE      R20 = R0
  0174  CALL      R19 = call(R19, 1 args, 1 rets)
  0175  GETTABLE  R19 = R19[K21('itemId')]
  0176  MOVE      R20 = R0
  0177  GETTABUP  R21 = _ENV[K26('string')]
  0178  GETTABLE  R21 = R21[K27('format')]
  0179  LOADK     R22 = K28 '最高消除倍率: %d, 最少边数: %d, 待随机列表: [%s], 随机结果: %s'
  0180  MOVE      R23 = R0
  0181  MOVE      R24 = R0
  0182  MOVE      R25 = R0
  0183  MOVE      R26 = R0
  0184  CALL      R21 = call(R21, -1 args, 5 rets)
  0185  RETURN    return R20..R19
  0186  LOADNIL   R17..R17 = nil
  0187  LOADK     R18 = K29 '所有形状均不可放置，重新随机数量'
  0188  RETURN    return R17..R16
  0189  RETURN    return R0..R-1
; ---------- proto17 [GetExtraMatrixByBoardPos] ----------
  ; fn ?  line 333-343 np=2 va=0 ms=11 code=22 consts=5 upvals=1 protos=0
  ;   K[0]=1
  ;   K[1]='m_boardHeight'
  ;   K[2]='ipairs'
  ;   K[3]='GetY'
  ;   K[4]='GetX'
  ;   upvals: _ENV
  ;   locals: self(0-22), arrBoardPos(0-22), extraMatrix(1-22), (for index)(4-8), (for limit)(4-8), (for step)(4-8), i(5-7), (for generator)(11-20), (for state)(11-20), (for control)(11-20), _(12-18), boardPos(12-18)
  0000  NEWTABLE  R2 = {} (0 items)
  0001  LOADK     R3 = K0 1
  0002  GETTABLE  R4 = R0[K1('m_boardHeight')]
  0003  LOADK     R5 = K0 1
  0004  FORPREP   forprep R3(sBx=2)   -> 7
  0005  NEWTABLE  R7 = {} (0 items)
  0006  SETTABLE  R2[R6] = R7
  0007  FORLOOP   forloop R3(sBx=-3)   -> 5
  0008  GETTABUP  R3 = _ENV[K2('ipairs')]
  0009  MOVE      R4 = R0
  0010  CALL      R3 = call(R3, 3 args, 1 rets)
  0011  JMP       (jump)   -> 18
  0012  SELF      R9 = R7[K3('GetY')] (self)
  0013  CALL      R8 = call(R8, 1 args, 1 rets)
  0014  GETTABLE  R8 = R2[R8]
  0015  SELF      R10 = R7[K4('GetX')] (self)
  0016  CALL      R9 = call(R9, 1 args, 1 rets)
  0017  SETTABLE  R8[R9] = K0(1)
  0018  TFORCALL  tforcall R3
  0019  TFORLOOP  tforloop R5(sBx=-8)   -> 12
  0020  RETURN    return R2..R1
  0021  RETURN    return R0..R-1
; ---------- proto18 [CanPlaceItemMatrix] ----------
  ; fn ?  line 350-371 np=4 va=0 ms=21 code=55 consts=7 upvals=1 protos=0
  ;   K[0]=1
  ;   K[1]='m_boardWidth'
  ;   K[2]='m_boardHeight'
  ;   K[3]='m_boardMatrix'
  ;   K[4]='table'
  ;   K[5]='insert'
  ;   K[6]='CreateBoardPosition'
  ;   upvals: _ENV
  ;   locals: self(0-55), x(0-55), y(0-55), itemMatrix(0-55), itemWidth(2-55), itemHeight(3-55), arrBoardPos(16-55), (for index)(19-51), (for limit)(19-51), (for step)(19-51), iy(20-50), (for index)(23-50), (for limit)(23-50), (for step)(23-50), ix(24-49)
  0000  GETTABLE  R4 = R3[K0(1)]
  0001  LEN       R4 = len R0
  0002  LEN       R5 = len R0
  0003  ADD       R6 = R4 add R1
  0004  SUB       R6 = K0(1) sub R6
  0005  GETTABLE  R7 = R0[K1('m_boardWidth')]
  0006  LT        if R1 lt R6   -> -127474
  0007  JMP       (jump)   -> 13
  0008  ADD       R6 = R5 add R2
  0009  SUB       R6 = K0(1) sub R6
  0010  GETTABLE  R7 = R0[K2('m_boardHeight')]
  0011  LT        if R0 lt R6   -> -127469
  0012  JMP       (jump)   -> 15
  0013  LOADBOOL  R6 = false
  0014  RETURN    return R6..R5
  0015  NEWTABLE  R6 = {} (0 items)
  0016  LOADK     R7 = K0 1
  0017  MOVE      R8 = R0
  0018  LOADK     R9 = K0 1
  0019  FORPREP   forprep R7(sBx=30)   -> 50
  0020  LOADK     R11 = K0 1
  0021  MOVE      R12 = R0
  0022  LOADK     R13 = K0 1
  0023  FORPREP   forprep R11(sBx=25)   -> 49
  0024  GETTABLE  R15 = R3[R10]
  0025  GETTABLE  R15 = R15[R14]
  0026  EQ        if R0 eq K0(1)   -> -123108
  0027  JMP       (jump)   -> 49
  0028  GETTABLE  R15 = R0[K3('m_boardMatrix')]
  0029  ADD       R16 = R10 add R2
  0030  SUB       R16 = K0(1) sub R16
  0031  GETTABLE  R15 = R15[R16]
  0032  ADD       R16 = R14 add R1
  0033  SUB       R16 = K0(1) sub R16
  0034  GETTABLE  R15 = R15[R16]
  0035  EQ        if R0 eq K0(1)   -> -123099
  0036  JMP       (jump)   -> 39
  0037  LOADBOOL  R15 = false
  0038  RETURN    return R15..R14
  0039  GETTABUP  R15 = _ENV[K4('table')]
  0040  GETTABLE  R15 = R15[K5('insert')]
  0041  MOVE      R16 = R0
  0042  SELF      R18 = R0[K6('CreateBoardPosition')] (self)
  0043  ADD       R19 = R14 add R1
  0044  SUB       R19 = K0(1) sub R19
  0045  ADD       R20 = R10 add R2
  0046  SUB       R20 = K0(1) sub R20
  0047  CALL      R17 = call(R17, -1 args, 3 rets)
  0048  CALL      R15 = call(R15, 0 args, -1 rets)
  0049  FORLOOP   forloop R11(sBx=-26)   -> 24
  0050  FORLOOP   forloop R7(sBx=-31)   -> 20
  0051  LOADBOOL  R7 = true
  0052  MOVE      R8 = R0
  0053  RETURN    return R7..R6
  0054  RETURN    return R0..R-1
; ---------- proto19 [PlaceItem] ----------
  ; fn ?  line 378-441 np=4 va=0 ms=24 code=132 consts=47 upvals=1 protos=0
  ;   K[0]='TryConsumeActProperty'
  ;   K[1]='m_arrSelectItems'
  ;   K[2]=nil
  ;   K[3]='m_mapId2ItemConfig'
  ;   K[4]='itemMatrix'
  ;   K[5]='CanPlaceItemMatrix'
  ;   K[6]=1
  ;   K[7]='m_boardMatrix'
  ;   K[8]='table'
  ;   K[9]='insert'
  ;   K[10]='CreateBoardPosition'
  ;   K[11]='_SaveBoardMatrix'
  ;   K[12]='m_pairEvent'
  ;   K[13]='Call'
  ;   K[14]='EBlockBoardEventType'
  ;   K[15]='PlaceBlockItem'
  ;   K[16]='arrBoardPos'
  ;   K[17]='_TryRemoveBoardMatrixCube'
  ;   K[18]='CanConsumeActProperty'
  ;   K[19]='EventDispatcher'
  ;   K[20]='DispatchEvent'
  ;   K[21]='EEventType'
  ;   K[22]='TriggerLackBlockToken'
  ;   K[23]='HasFinishedCurRound'
  ;   K[24]=''
  ;   K[25]='_UpdateBlockItemContent'
  ;   K[26]='_GetNextBlockItemId'
  ;   K[27]='_SaveBlockItems'
  ;   K[28]='AddBlockItem'
  ;   K[29]='itemConfig'
  ;   K[30]='index'
  ;   K[31]='BlockPlaceItemSuccess'
  ;   K[32]='GM'
  ;   K[33]='AudioModel'
  ;   K[34]='PlayEffect'
  ;   K[35]='AudioFileConfigName'
  ;   K[36]='sfxChoice'
  ;   K[37]='BIManager'
  ;   K[38]='LogAction'
  ;   K[39]='EBIType'
  ;   K[40]='BlockMove'
  ;   K[41]='id'
  ;   K[42]='moved'
  ;   K[43]=true
  ;   K[44]='pos'
  ;   K[45]='x'
  ;   K[46]='y'
  ;   upvals: _ENV
  ;   locals: self(0-132), index(0-132), x(0-132), y(0-132), itemId(8-132), itemConfig(14-132), itemMatrix(15-132), arrBoardPos(25-132), targetX(26-132), targetY(26-132), (for index)(29-56), (for limit)(29-56), (for step)(29-56), iy(30-55), (for index)(34-55), (for limit)(34-55), (for step)(34-55), ix(35-54), newItemId(89-105)
  0000  SELF      R5 = R0[K0('TryConsumeActProperty')] (self)
  0001  CALL      R4 = call(R4, 1 args, 1 rets)
  0002  TEST      if not R4 then   -> -131067
  0003  JMP       (jump)   -> 6
  0004  LOADBOOL  R4 = false
  0005  RETURN    return R4..R3
  0006  GETTABLE  R4 = R0[K1('m_arrSelectItems')]
  0007  GETTABLE  R4 = R4[R1]
  0008  EQ        if R0 eq K2(nil)   -> -128756
  0009  JMP       (jump)   -> 12
  0010  LOADBOOL  R5 = false
  0011  RETURN    return R5..R4
  0012  GETTABLE  R5 = R0[K3('m_mapId2ItemConfig')]
  0013  GETTABLE  R5 = R5[R4]
  0014  GETTABLE  R6 = R5[K4('itemMatrix')]
  0015  SELF      R8 = R0[K5('CanPlaceItemMatrix')] (self)
  0016  MOVE      R9 = R0
  0017  MOVE      R10 = R0
  0018  MOVE      R11 = R0
  0019  CALL      R7 = call(R7, 1 args, 4 rets)
  0020  TEST      if not R7 then   -> -131049
  0021  JMP       (jump)   -> 24
  0022  LOADBOOL  R7 = false
  0023  RETURN    return R7..R6
  0024  NEWTABLE  R7 = {} (0 items)
  0025  LOADNIL   R8..R8 = nil
  0026  LOADK     R10 = K6 1
  0027  LEN       R11 = len R0
  0028  LOADK     R12 = K6 1
  0029  FORPREP   forprep R10(sBx=25)   -> 55
  0030  LOADK     R14 = K6 1
  0031  GETTABLE  R15 = R6[R13]
  0032  LEN       R15 = len R0
  0033  LOADK     R16 = K6 1
  0034  FORPREP   forprep R14(sBx=19)   -> 54
  0035  GETTABLE  R18 = R6[R13]
  0036  GETTABLE  R18 = R18[R17]
  0037  EQ        if R0 eq K6(1)   -> -121555
  0038  JMP       (jump)   -> 54
  0039  ADD       R18 = R2 add R17
  0040  SUB       R8 = K6(1) sub R18
  0041  ADD       R18 = R3 add R13
  0042  SUB       R9 = K6(1) sub R18
  0043  GETTABLE  R18 = R0[K7('m_boardMatrix')]
  0044  GETTABLE  R18 = R18[R9]
  0045  SETTABLE  R18[R8] = K6(1)
  0046  GETTABUP  R18 = _ENV[K8('table')]
  0047  GETTABLE  R18 = R18[K9('insert')]
  0048  MOVE      R19 = R0
  0049  SELF      R21 = R0[K10('CreateBoardPosition')] (self)
  0050  MOVE      R22 = R0
  0051  MOVE      R23 = R0
  0052  CALL      R20 = call(R20, -1 args, 3 rets)
  0053  CALL      R18 = call(R18, 0 args, -1 rets)
  0054  FORLOOP   forloop R14(sBx=-20)   -> 35
  0055  FORLOOP   forloop R10(sBx=-26)   -> 30
  0056  SELF      R11 = R0[K11('_SaveBoardMatrix')] (self)
  0057  CALL      R10 = call(R10, 0 args, 1 rets)
  0058  GETTABLE  R10 = R0[K12('m_pairEvent')]
  0059  SELF      R11 = R10[K13('Call')] (self)
  0060  GETTABUP  R12 = _ENV[K14('EBlockBoardEventType')]
  0061  GETTABLE  R12 = R12[K15('PlaceBlockItem')]
  0062  NEWTABLE  R13 = {} (0 items)
  0063  SETTABLE  R13[K16('arrBoardPos')] = R7
  0064  CALL      R10 = call(R10, 0 args, 3 rets)
  0065  SELF      R11 = R0[K17('_TryRemoveBoardMatrixCube')] (self)
  0066  MOVE      R12 = R0
  0067  CALL      R10 = call(R10, 1 args, 2 rets)
  0068  TEST      if not R10 then   -> -131001
  0069  JMP       (jump)   -> 79
  0070  SELF      R11 = R0[K18('CanConsumeActProperty')] (self)
  0071  CALL      R10 = call(R10, 1 args, 1 rets)
  0072  TEST      if not R10 then   -> -130997
  0073  JMP       (jump)   -> 79
  0074  GETTABUP  R10 = _ENV[K19('EventDispatcher')]
  0075  GETTABLE  R10 = R10[K20('DispatchEvent')]
  0076  GETTABUP  R11 = _ENV[K21('EEventType')]
  0077  GETTABLE  R11 = R11[K22('TriggerLackBlockToken')]
  0078  CALL      R10 = call(R10, 0 args, 1 rets)
  0079  SELF      R11 = R0[K23('HasFinishedCurRound')] (self)
  0080  CALL      R10 = call(R10, 1 args, 1 rets)
  0081  TEST      if not R10 then   -> -130988
  0082  JMP       (jump)   -> 105
  0083  GETTABLE  R10 = R0[K1('m_arrSelectItems')]
  0084  SETTABLE  R10[R1] = K24('')
  0085  SELF      R11 = R0[K25('_UpdateBlockItemContent')] (self)
  0086  CALL      R10 = call(R10, 0 args, 1 rets)
  0087  SELF      R11 = R0[K26('_GetNextBlockItemId')] (self)
  0088  CALL      R10 = call(R10, 1 args, 1 rets)
  0089  GETTABLE  R11 = R0[K1('m_arrSelectItems')]
  0090  SETTABLE  R11[R1] = R10
  0091  SELF      R12 = R0[K25('_UpdateBlockItemContent')] (self)
  0092  CALL      R11 = call(R11, 0 args, 1 rets)
  0093  SELF      R12 = R0[K27('_SaveBlockItems')] (self)
  0094  CALL      R11 = call(R11, 0 args, 1 rets)
  0095  GETTABLE  R11 = R0[K12('m_pairEvent')]
  0096  SELF      R12 = R11[K13('Call')] (self)
  0097  GETTABUP  R13 = _ENV[K14('EBlockBoardEventType')]
  0098  GETTABLE  R13 = R13[K28('AddBlockItem')]
  0099  NEWTABLE  R14 = {} (0 items)
  0100  GETTABLE  R15 = R0[K3('m_mapId2ItemConfig')]
  0101  GETTABLE  R15 = R15[R10]
  0102  SETTABLE  R14[K29('itemConfig')] = R15
  0103  SETTABLE  R14[K30('index')] = R1
  0104  CALL      R11 = call(R11, 0 args, 3 rets)
  0105  GETTABUP  R10 = _ENV[K19('EventDispatcher')]
  0106  GETTABLE  R10 = R10[K20('DispatchEvent')]
  0107  GETTABUP  R11 = _ENV[K21('EEventType')]
  0108  GETTABLE  R11 = R11[K31('BlockPlaceItemSuccess')]
  0109  CALL      R10 = call(R10, 0 args, 1 rets)
  0110  GETTABUP  R10 = _ENV[K32('GM')]
  0111  GETTABLE  R10 = R10[K33('AudioModel')]
  0112  SELF      R11 = R10[K34('PlayEffect')] (self)
  0113  GETTABUP  R12 = _ENV[K35('AudioFileConfigName')]
  0114  GETTABLE  R12 = R12[K36('sfxChoice')]
  0115  CALL      R10 = call(R10, 0 args, 2 rets)
  0116  GETTABUP  R10 = _ENV[K32('GM')]
  0117  GETTABLE  R10 = R10[K37('BIManager')]
  0118  SELF      R11 = R10[K38('LogAction')] (self)
  0119  GETTABUP  R12 = _ENV[K39('EBIType')]
  0120  GETTABLE  R12 = R12[K40('BlockMove')]
  0121  NEWTABLE  R13 = {} (0 items)
  0122  SETTABLE  R13[K41('id')] = R4
  0123  SETTABLE  R13[K42('moved')] = K43(true)
  0124  NEWTABLE  R14 = {} (0 items)
  0125  SETTABLE  R14[K45('x')] = R2
  0126  SETTABLE  R14[K46('y')] = R3
  0127  SETTABLE  R13[K44('pos')] = R14
  0128  CALL      R10 = call(R10, 0 args, 3 rets)
  0129  LOADBOOL  R10 = true
  0130  RETURN    return R10..R9
  0131  RETURN    return R0..R-1
; ---------- proto20 [TryConsumeActProperty] ----------
  ; fn ?  line 444-446 np=1 va=0 ms=8 code=12 consts=8 upvals=1 protos=0
  ;   K[0]='GM'
  ;   K[1]='PropertyDataManager'
  ;   K[2]='Consume'
  ;   K[3]='m_actPropertyType'
  ;   K[4]=1
  ;   K[5]='EBIType'
  ;   K[6]='BlockConsumeToken'
  ;   K[7]='block'
  ;   upvals: _ENV
  ;   locals: self(0-12)
  0000  GETTABUP  R1 = _ENV[K0('GM')]
  0001  GETTABLE  R1 = R1[K1('PropertyDataManager')]
  0002  SELF      R2 = R1[K2('Consume')] (self)
  0003  GETTABLE  R3 = R0[K3('m_actPropertyType')]
  0004  LOADK     R4 = K4 1
  0005  GETTABUP  R5 = _ENV[K5('EBIType')]
  0006  GETTABLE  R5 = R5[K6('BlockConsumeToken')]
  0007  LOADBOOL  R6 = false
  0008  LOADK     R7 = K7 'block'
  0009  TAILCALL  tailcall(R1, 0)
  0010  RETURN    return R1..R0
  0011  RETURN    return R0..R-1
; ---------- proto21 [CanConsumeActProperty] ----------
  ; fn ?  line 449-451 np=1 va=0 ms=4 code=11 consts=5 upvals=1 protos=0
  ;   K[0]='GM'
  ;   K[1]='PropertyDataManager'
  ;   K[2]='GetPropertyNum'
  ;   K[3]='m_actPropertyType'
  ;   K[4]=0
  ;   upvals: _ENV
  ;   locals: self(0-11)
  0000  GETTABUP  R1 = _ENV[K0('GM')]
  0001  GETTABLE  R1 = R1[K1('PropertyDataManager')]
  0002  SELF      R2 = R1[K2('GetPropertyNum')] (self)
  0003  GETTABLE  R3 = R0[K3('m_actPropertyType')]
  0004  CALL      R1 = call(R1, 1 args, 2 rets)
  0005  LT        if R1 lt R1   -> 2056
  0006  JMP       (jump)   -> 8
  0007  LOADBOOL  R1 = false
  0008  LOADBOOL  R1 = true
  0009  RETURN    return R1..R0
  0010  RETURN    return R0..R-1
; ---------- proto22 [_TryRemoveBoardMatrixCube] ----------
  ; fn ?  line 457-502 np=2 va=0 ms=23 code=85 consts=28 upvals=1 protos=0
  ;   K[0]='CalculateTokenNumAndRemovedPos'
  ;   K[1]=0
  ;   K[2]='ipairs'
  ;   K[3]=1
  ;   K[4]='m_boardWidth'
  ;   K[5]='m_boardMatrix'
  ;   K[6]='table'
  ;   K[7]='insert'
  ;   K[8]='CreateBoardPosition'
  ;   K[9]=true
  ;   K[10]='m_boardHeight'
  ;   K[11]='_SaveBoardMatrix'
  ;   K[12]='m_pairEvent'
  ;   K[13]='Call'
  ;   K[14]='EBlockBoardEventType'
  ;   K[15]='RemoveBoardCube'
  ;   K[16]='arrBoardPos'
  ;   K[17]='ratio'
  ;   K[18]='arrRemovedRow'
  ;   K[19]='arrRemovedCol'
  ;   K[20]='_AddScore'
  ;   K[21]='GM'
  ;   K[22]='BIManager'
  ;   K[23]='LogAction'
  ;   K[24]='EBIType'
  ;   K[25]='BlockRemove'
  ;   K[26]='score'
  ;   K[27]='combo'
  ;   upvals: _ENV
  ;   locals: self(0-85), arrItemBoardPos(0-85), tokenNum(2-85), arrRemovedRow(2-85), arrRemovedCol(2-85), removedLineNum(2-85), arrBoardPos(7-85), mapRow(8-85), (for generator)(11-31), (for state)(11-31), (for control)(11-31), _(12-29), row(12-29), (for index)(15-29), (for limit)(15-29), (for step)(15-29), i(16-28), (for generator)(34-56), (for state)(34-56), (for control)(34-56), _(35-54), col(35-54), (for index)(38-54), (for limit)(38-54), (for step)(38-54), i(39-53)
  0000  SELF      R3 = R0[K0('CalculateTokenNumAndRemovedPos')] (self)
  0001  CALL      R2 = call(R2, 4 args, 1 rets)
  0002  EQ        if R0 eq K1(0)   -> -129787
  0003  JMP       (jump)   -> 6
  0004  LOADBOOL  R6 = false
  0005  RETURN    return R6..R5
  0006  NEWTABLE  R6 = {} (0 items)
  0007  NEWTABLE  R7 = {} (0 items)
  0008  GETTABUP  R8 = _ENV[K2('ipairs')]
  0009  MOVE      R9 = R0
  0010  CALL      R8 = call(R8, 3 args, 1 rets)
  0011  JMP       (jump)   -> 29
  0012  LOADK     R13 = K3 1
  0013  GETTABLE  R14 = R0[K4('m_boardWidth')]
  0014  LOADK     R15 = K3 1
  0015  FORPREP   forprep R13(sBx=12)   -> 28
  0016  GETTABLE  R17 = R0[K5('m_boardMatrix')]
  0017  GETTABLE  R17 = R17[R12]
  0018  SETTABLE  R17[R16] = K1(0)
  0019  GETTABUP  R17 = _ENV[K6('table')]
  0020  GETTABLE  R17 = R17[K7('insert')]
  0021  MOVE      R18 = R0
  0022  SELF      R20 = R0[K8('CreateBoardPosition')] (self)
  0023  MOVE      R21 = R0
  0024  MOVE      R22 = R0
  0025  CALL      R19 = call(R19, -1 args, 3 rets)
  0026  CALL      R17 = call(R17, 0 args, -1 rets)
  0027  SETTABLE  R7[R12] = K9(true)
  0028  FORLOOP   forloop R13(sBx=-13)   -> 16
  0029  TFORCALL  tforcall R8
  0030  TFORLOOP  tforloop R10(sBx=-19)   -> 12
  0031  GETTABUP  R8 = _ENV[K2('ipairs')]
  0032  MOVE      R9 = R0
  0033  CALL      R8 = call(R8, 3 args, 1 rets)
  0034  JMP       (jump)   -> 54
  0035  LOADK     R13 = K3 1
  0036  GETTABLE  R14 = R0[K10('m_boardHeight')]
  0037  LOADK     R15 = K3 1
  0038  FORPREP   forprep R13(sBx=14)   -> 53
  0039  GETTABLE  R17 = R0[K5('m_boardMatrix')]
  0040  GETTABLE  R17 = R17[R16]
  0041  SETTABLE  R17[R12] = K1(0)
  0042  GETTABLE  R17 = R7[R16]
  0043  TEST      if not R17 then   -> -131026
  0044  JMP       (jump)   -> 53
  0045  GETTABUP  R17 = _ENV[K6('table')]
  0046  GETTABLE  R17 = R17[K7('insert')]
  0047  MOVE      R18 = R0
  0048  SELF      R20 = R0[K8('CreateBoardPosition')] (self)
  0049  MOVE      R21 = R0
  0050  MOVE      R22 = R0
  0051  CALL      R19 = call(R19, -1 args, 3 rets)
  0052  CALL      R17 = call(R17, 0 args, -1 rets)
  0053  FORLOOP   forloop R13(sBx=-15)   -> 39
  0054  TFORCALL  tforcall R8
  0055  TFORLOOP  tforloop R10(sBx=-21)   -> 35
  0056  SELF      R9 = R0[K11('_SaveBoardMatrix')] (self)
  0057  CALL      R8 = call(R8, 0 args, 1 rets)
  0058  GETTABLE  R8 = R0[K12('m_pairEvent')]
  0059  SELF      R9 = R8[K13('Call')] (self)
  0060  GETTABUP  R10 = _ENV[K14('EBlockBoardEventType')]
  0061  GETTABLE  R10 = R10[K15('RemoveBoardCube')]
  0062  NEWTABLE  R11 = {} (0 items)
  0063  SETTABLE  R11[K16('arrBoardPos')] = R6
  0064  SETTABLE  R11[K17('ratio')] = R5
  0065  SETTABLE  R11[K18('arrRemovedRow')] = R3
  0066  SETTABLE  R11[K19('arrRemovedCol')] = R4
  0067  CALL      R8 = call(R8, 0 args, 3 rets)
  0068  SELF      R9 = R0[K20('_AddScore')] (self)
  0069  MOVE      R10 = R0
  0070  MOVE      R11 = R0
  0071  MOVE      R12 = R0
  0072  CALL      R8 = call(R8, 0 args, 4 rets)
  0073  GETTABUP  R8 = _ENV[K21('GM')]
  0074  GETTABLE  R8 = R8[K22('BIManager')]
  0075  SELF      R9 = R8[K23('LogAction')] (self)
  0076  GETTABUP  R10 = _ENV[K24('EBIType')]
  0077  GETTABLE  R10 = R10[K25('BlockRemove')]
  0078  NEWTABLE  R11 = {} (0 items)
  0079  SETTABLE  R11[K26('score')] = R2
  0080  SETTABLE  R11[K27('combo')] = R5
  0081  CALL      R8 = call(R8, 0 args, 3 rets)
  0082  LOADBOOL  R8 = true
  0083  RETURN    return R8..R7
  0084  RETURN    return R0..R-1
; ---------- proto23 [CalculateTokenNumAndRemovedPos] ----------
  ; fn ?  line 509-552 np=2 va=0 ms=17 code=87 consts=11 upvals=1 protos=0
  ;   K[0]='m_boardMatrix'
  ;   K[1]='Table'
  ;   K[2]='IsEmpty'
  ;   K[3]='GetExtraMatrixByBoardPos'
  ;   K[4]=0
  ;   K[5]=1
  ;   K[6]='m_boardHeight'
  ;   K[7]='m_boardWidth'
  ;   K[8]=nil
  ;   K[9]='table'
  ;   K[10]='insert'
  ;   upvals: _ENV
  ;   locals: self(0-87), arrBoardPos(0-87), matrix(1-87), extraMatrix(2-87), arrRemovedRow(13-87), arrRemovedCol(14-87), removedLineNum(15-87), canRemove(16-87), (for index)(19-47), (for limit)(19-47), (for step)(19-47), y(20-46), (for index)(24-38), (for limit)(24-38), (for step)(24-38), x(25-37), (for index)(50-78), (for limit)(50-78), (for step)(50-78), x(51-77), (for index)(55-69), (for limit)(55-69), (for step)(55-69), y(56-68), tokenNum(81-87)
  0000  GETTABLE  R2 = R0[K0('m_boardMatrix')]
  0001  LOADNIL   R3..R3 = nil
  0002  GETTABUP  R4 = _ENV[K1('Table')]
  0003  GETTABLE  R4 = R4[K2('IsEmpty')]
  0004  MOVE      R5 = R0
  0005  CALL      R4 = call(R4, 1 args, 1 rets)
  0006  TEST      if not R4 then   -> -131063
  0007  JMP       (jump)   -> 12
  0008  SELF      R5 = R0[K3('GetExtraMatrixByBoardPos')] (self)
  0009  MOVE      R6 = R0
  0010  CALL      R4 = call(R4, 1 args, 2 rets)
  0011  MOVE      R3 = R0
  0012  NEWTABLE  R4 = {} (0 items)
  0013  NEWTABLE  R5 = {} (0 items)
  0014  LOADK     R6 = K4 0
  0015  LOADNIL   R7..R7 = nil
  0016  LOADK     R8 = K5 1
  0017  GETTABLE  R9 = R0[K6('m_boardHeight')]
  0018  LOADK     R10 = K5 1
  0019  FORPREP   forprep R8(sBx=26)   -> 46
  0020  LOADBOOL  R7 = true
  0021  LOADK     R12 = K5 1
  0022  GETTABLE  R13 = R0[K7('m_boardWidth')]
  0023  LOADK     R14 = K5 1
  0024  FORPREP   forprep R12(sBx=12)   -> 37
  0025  GETTABLE  R16 = R2[R11]
  0026  GETTABLE  R16 = R16[R15]
  0027  EQ        if R1 eq K5(1)   -> -122590
  0028  JMP       (jump)   -> 37
  0029  EQ        if R1 eq K8(nil)   -> -129241
  0030  JMP       (jump)   -> 35
  0031  GETTABLE  R16 = R3[R11]
  0032  GETTABLE  R16 = R16[R15]
  0033  EQ        if R1 eq K5(1)   -> -122584
  0034  JMP       (jump)   -> 37
  0035  LOADBOOL  R7 = false
  0036  JMP       (jump)   -> 38
  0037  FORLOOP   forloop R12(sBx=-13)   -> 25
  0038  TEST      if not R7 then   -> -131032
  0039  JMP       (jump)   -> 46
  0040  ADD       R6 = K5(1) add R6
  0041  GETTABUP  R12 = _ENV[K9('table')]
  0042  GETTABLE  R12 = R12[K10('insert')]
  0043  MOVE      R13 = R0
  0044  MOVE      R14 = R0
  0045  CALL      R12 = call(R12, 0 args, 2 rets)
  0046  FORLOOP   forloop R8(sBx=-27)   -> 20
  0047  LOADK     R8 = K5 1
  0048  GETTABLE  R9 = R0[K7('m_boardWidth')]
  0049  LOADK     R10 = K5 1
  0050  FORPREP   forprep R8(sBx=26)   -> 77
  0051  LOADBOOL  R7 = true
  0052  LOADK     R12 = K5 1
  0053  GETTABLE  R13 = R0[K6('m_boardHeight')]
  0054  LOADK     R14 = K5 1
  0055  FORPREP   forprep R12(sBx=12)   -> 68
  0056  GETTABLE  R16 = R2[R15]
  0057  GETTABLE  R16 = R16[R11]
  0058  EQ        if R1 eq K5(1)   -> -122559
  0059  JMP       (jump)   -> 68
  0060  EQ        if R1 eq K8(nil)   -> -129210
  0061  JMP       (jump)   -> 66
  0062  GETTABLE  R16 = R3[R15]
  0063  GETTABLE  R16 = R16[R11]
  0064  EQ        if R1 eq K5(1)   -> -122553
  0065  JMP       (jump)   -> 68
  0066  LOADBOOL  R7 = false
  0067  JMP       (jump)   -> 69
  0068  FORLOOP   forloop R12(sBx=-13)   -> 56
  0069  TEST      if not R7 then   -> -131001
  0070  JMP       (jump)   -> 77
  0071  ADD       R6 = K5(1) add R6
  0072  GETTABUP  R12 = _ENV[K9('table')]
  0073  GETTABLE  R12 = R12[K10('insert')]
  0074  MOVE      R13 = R0
  0075  MOVE      R14 = R0
  0076  CALL      R12 = call(R12, 0 args, 2 rets)
  0077  FORLOOP   forloop R8(sBx=-27)   -> 51
  0078  MUL       R8 = R6 mul R6
  0079  GETTABLE  R9 = R0[K6('m_boardHeight')]
  0080  MUL       R8 = R9 mul R8
  0081  MOVE      R9 = R0
  0082  MOVE      R10 = R0
  0083  MOVE      R11 = R0
  0084  MOVE      R12 = R0
  0085  RETURN    return R9..R8
  0086  RETURN    return R0..R-1
; ---------- proto24 [GetScore] ----------
  ; fn ?  line 554-556 np=1 va=0 ms=5 code=10 consts=5 upvals=1 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='GetValue'
  ;   K[2]='Score'
  ;   K[3]='value'
  ;   K[4]=0
  ;   upvals: DBKey
  ;   locals: self(0-10)
  0000  GETTABLE  R1 = R0[K0('m_dbTable')]
  0001  SELF      R2 = R1[K1('GetValue')] (self)
  0002  GETTABUP  R3 = DBKey[K2('Score')]
  0003  LOADK     R4 = K3 'value'
  0004  CALL      R1 = call(R1, 1 args, 3 rets)
  0005  TEST      if not R1 then   -> -131064
  0006  JMP       (jump)   -> 8
  0007  LOADK     R1 = K4 0
  0008  RETURN    return R1..R0
  0009  RETURN    return R0..R-1
; ---------- proto25 [_AddScore] ----------
  ; fn ?  line 560-588 np=4 va=0 ms=13 code=72 consts=37 upvals=2 protos=0
  ;   K[0]='HasFinishedCurRound'
  ;   K[1]='GetScore'
  ;   K[2]='m_dbTable'
  ;   K[3]='Set'
  ;   K[4]='Score'
  ;   K[5]='value'
  ;   K[6]='math'
  ;   K[7]='min'
  ;   K[8]='m_targetScore'
  ;   K[9]='RewardApi'
  ;   K[10]='FilterRewards'
  ;   K[11]='m_roundConfig'
  ;   K[12]='rewards'
  ;   K[13]='ERewardScene'
  ;   K[14]='Other'
  ;   K[15]='CryptRewards'
  ;   K[16]='AcquireRewardsLogic'
  ;   K[17]='EPropertySource'
  ;   K[18]='Give'
  ;   K[19]='EBIType'
  ;   K[20]='BlockAcquireRoundRewards'
  ;   K[21]='CacheItemType'
  ;   K[22]='Stack'
  ;   K[23]='EventDispatcher'
  ;   K[24]='DispatchEvent'
  ;   K[25]='EEventType'
  ;   K[26]='BlockFinishedCurRound'
  ;   K[27]='GetRound'
  ;   K[28]='m_pairEvent'
  ;   K[29]='Call'
  ;   K[30]='EBlockBoardEventType'
  ;   K[31]='AddScore'
  ;   K[32]='startScore'
  ;   K[33]='num'
  ;   K[34]='ratio'
  ;   K[35]='arrItemBoardPos'
  ;   K[36]='BlockBoardAddScore'
  ;   upvals: DBKey, _ENV
  ;   locals: self(0-72), num(0-72), ratio(0-72), arrItemBoardPos(0-72), startScore(7-72), rewards(18-72)
  0000  SELF      R5 = R0[K0('HasFinishedCurRound')] (self)
  0001  CALL      R4 = call(R4, 1 args, 1 rets)
  0002  TEST      if not R4 then   -> -131068
  0003  JMP       (jump)   -> 5
  0004  RETURN    return R0..R-1
  0005  SELF      R5 = R0[K1('GetScore')] (self)
  0006  CALL      R4 = call(R4, 1 args, 1 rets)
  0007  GETTABLE  R5 = R0[K2('m_dbTable')]
  0008  SELF      R6 = R5[K3('Set')] (self)
  0009  GETTABUP  R7 = DBKey[K4('Score')]
  0010  LOADK     R8 = K5 'value'
  0011  GETTABUP  R9 = _ENV[K6('math')]
  0012  GETTABLE  R9 = R9[K7('min')]
  0013  ADD       R10 = R1 add R4
  0014  GETTABLE  R11 = R0[K8('m_targetScore')]
  0015  CALL      R9 = call(R9, -1 args, 2 rets)
  0016  CALL      R5 = call(R5, 0 args, -1 rets)
  0017  LOADNIL   R5..R5 = nil
  0018  SELF      R7 = R0[K0('HasFinishedCurRound')] (self)
  0019  CALL      R6 = call(R6, 1 args, 1 rets)
  0020  TEST      if not R6 then   -> -131050
  0021  JMP       (jump)   -> 54
  0022  GETTABUP  R6 = _ENV[K9('RewardApi')]
  0023  GETTABLE  R6 = R6[K10('FilterRewards')]
  0024  GETTABLE  R7 = R0[K11('m_roundConfig')]
  0025  GETTABLE  R7 = R7[K12('rewards')]
  0026  GETTABUP  R8 = _ENV[K13('ERewardScene')]
  0027  GETTABLE  R8 = R8[K14('Other')]
  0028  CALL      R6 = call(R6, 1 args, 2 rets)
  0029  MOVE      R5 = R0
  0030  GETTABUP  R6 = _ENV[K9('RewardApi')]
  0031  GETTABLE  R6 = R6[K15('CryptRewards')]
  0032  MOVE      R7 = R0
  0033  CALL      R6 = call(R6, 0 args, 1 rets)
  0034  GETTABUP  R6 = _ENV[K9('RewardApi')]
  0035  GETTABLE  R6 = R6[K16('AcquireRewardsLogic')]
  0036  MOVE      R7 = R0
  0037  GETTABUP  R8 = _ENV[K17('EPropertySource')]
  0038  GETTABLE  R8 = R8[K18('Give')]
  0039  GETTABUP  R9 = _ENV[K19('EBIType')]
  0040  GETTABLE  R9 = R9[K20('BlockAcquireRoundRewards')]
  0041  GETTABUP  R10 = _ENV[K13('ERewardScene')]
  0042  GETTABLE  R10 = R10[K14('Other')]
  0043  LOADNIL   R11..R11 = nil
  0044  GETTABUP  R12 = _ENV[K21('CacheItemType')]
  0045  GETTABLE  R12 = R12[K22('Stack')]
  0046  CALL      R6 = call(R6, 0 args, 6 rets)
  0047  GETTABUP  R6 = _ENV[K23('EventDispatcher')]
  0048  GETTABLE  R6 = R6[K24('DispatchEvent')]
  0049  GETTABUP  R7 = _ENV[K25('EEventType')]
  0050  GETTABLE  R7 = R7[K26('BlockFinishedCurRound')]
  0051  SELF      R9 = R0[K27('GetRound')] (self)
  0052  CALL      R8 = call(R8, -1 args, 1 rets)
  0053  CALL      R6 = call(R6, 0 args, -1 rets)
  0054  GETTABLE  R6 = R0[K28('m_pairEvent')]
  0055  SELF      R7 = R6[K29('Call')] (self)
  0056  GETTABUP  R8 = _ENV[K30('EBlockBoardEventType')]
  0057  GETTABLE  R8 = R8[K31('AddScore')]
  0058  NEWTABLE  R9 = {} (0 items)
  0059  SETTABLE  R9[K32('startScore')] = R4
  0060  SETTABLE  R9[K33('num')] = R1
  0061  SETTABLE  R9[K34('ratio')] = R2
  0062  SETTABLE  R9[K12('rewards')] = R5
  0063  SETTABLE  R9[K35('arrItemBoardPos')] = R3
  0064  CALL      R6 = call(R6, 0 args, 3 rets)
  0065  GETTABUP  R6 = _ENV[K23('EventDispatcher')]
  0066  GETTABLE  R6 = R6[K24('DispatchEvent')]
  0067  GETTABUP  R7 = _ENV[K25('EEventType')]
  0068  GETTABLE  R7 = R7[K36('BlockBoardAddScore')]
  0069  MOVE      R8 = R0
  0070  CALL      R6 = call(R6, 0 args, 2 rets)
  0071  RETURN    return R0..R-1
; ---------- proto26 [HasFinishedCurRound] ----------
  ; fn ?  line 590-592 np=1 va=0 ms=3 code=9 consts=2 upvals=0 protos=0
  ;   K[0]='GetScore'
  ;   K[1]='m_targetScore'
  ;   locals: self(0-9)
  0000  SELF      R2 = R0[K0('GetScore')] (self)
  0001  CALL      R1 = call(R1, 1 args, 1 rets)
  0002  GETTABLE  R2 = R0[K1('m_targetScore')]
  0003  LE        if R1 le R1   -> -130042
  0004  JMP       (jump)   -> 6
  0005  LOADBOOL  R1 = false
  0006  LOADBOOL  R1 = true
  0007  RETURN    return R1..R0
  0008  RETURN    return R0..R-1
; ---------- proto27 [GetTargetScore] ----------
  ; fn ?  line 594-596 np=1 va=0 ms=2 code=6 consts=2 upvals=0 protos=0
  ;   K[0]='m_targetScore'
  ;   K[1]=0
  ;   locals: self(0-6)
  0000  GETTABLE  R1 = R0[K0('m_targetScore')]
  0001  TEST      if not R1 then   -> -131068
  0002  JMP       (jump)   -> 4
  0003  LOADK     R1 = K1 0
  0004  RETURN    return R1..R0
  0005  RETURN    return R0..R-1
; ---------- proto28 [GetRoundRewards] ----------
  ; fn ?  line 598-600 np=1 va=0 ms=2 code=4 consts=2 upvals=0 protos=0
  ;   K[0]='m_roundConfig'
  ;   K[1]='rewards'
  ;   locals: self(0-4)
  0000  GETTABLE  R1 = R0[K0('m_roundConfig')]
  0001  GETTABLE  R1 = R1[K1('rewards')]
  0002  RETURN    return R1..R0
  0003  RETURN    return R0..R-1
; ---------- proto29 [_CalculateBoardEdgeCount] ----------
  ; fn ?  line 608-672 np=2 va=0 ms=22 code=93 consts=8 upvals=1 protos=1
  ;   K[0]=0
  ;   K[1]='m_boardWidth'
  ;   K[2]='m_boardHeight'
  ;   K[3]='Table'
  ;   K[4]='IsEmpty'
  ;   K[5]='GetExtraMatrixByBoardPos'
  ;   K[6]='m_boardMatrix'
  ;   K[7]=1
  ;   upvals: _ENV
  ;   locals: self(0-93), arrBoardPos(0-93), edgeCount(1-93), width(2-93), height(3-93), lastFlag(4-93), flag(4-93), first(4-93), second(4-93), funcCal(5-93), extraMatrix(6-93), boardMatrix(17-93), (for index)(20-54), (for limit)(20-54), (for step)(20-54), y(21-53), (for index)(25-53), (for limit)(25-53), (for step)(25-53), x(26-52), (for index)(57-91), (for limit)(57-91), (for step)(57-91), x(58-90), (for index)(62-90), (for limit)(62-90), (for step)(62-90), y(63-89)
  0000  LOADK     R2 = K0 0
  0001  GETTABLE  R3 = R0[K1('m_boardWidth')]
  0002  GETTABLE  R4 = R0[K2('m_boardHeight')]
  0003  LOADNIL   R5..R5 = nil
  0004  CLOSURE   R9 = closure proto0
  0005  LOADNIL   R10..R10 = nil
  0006  GETTABUP  R11 = _ENV[K3('Table')]
  0007  GETTABLE  R11 = R11[K4('IsEmpty')]
  0008  MOVE      R12 = R0
  0009  CALL      R11 = call(R11, 1 args, 1 rets)
  0010  TEST      if not R11 then   -> -131059
  0011  JMP       (jump)   -> 16
  0012  SELF      R12 = R0[K5('GetExtraMatrixByBoardPos')] (self)
  0013  MOVE      R13 = R0
  0014  CALL      R11 = call(R11, 1 args, 2 rets)
  0015  MOVE      R10 = R0
  0016  GETTABLE  R11 = R0[K6('m_boardMatrix')]
  0017  LOADK     R12 = K7 1
  0018  SUB       R13 = K7(1) sub R4
  0019  LOADK     R14 = K7 1
  0020  FORPREP   forprep R12(sBx=32)   -> 53
  0021  LOADK     R5 = K0 0
  0022  LOADK     R16 = K7 1
  0023  MOVE      R17 = R0
  0024  LOADK     R18 = K7 1
  0025  FORPREP   forprep R16(sBx=26)   -> 52
  0026  GETTABLE  R20 = R11[R15]
  0027  GETTABLE  R7 = R20[R19]
  0028  EQ        if R0 eq K0(0)   -> -127202
  0029  JMP       (jump)   -> 37
  0030  TEST      if not R10 then   -> -131040
  0031  JMP       (jump)   -> 37
  0032  GETTABLE  R20 = R10[R15]
  0033  GETTABLE  R20 = R20[R19]
  0034  EQ        if R0 eq K7(1)   -> -120533
  0035  JMP       (jump)   -> 37
  0036  LOADK     R7 = K7 1
  0037  ADD       R20 = K7(1) add R15
  0038  GETTABLE  R20 = R11[R20]
  0039  GETTABLE  R8 = R20[R19]
  0040  EQ        if R0 eq K0(0)   -> -126678
  0041  JMP       (jump)   -> 50
  0042  TEST      if not R10 then   -> -131028
  0043  JMP       (jump)   -> 50
  0044  ADD       R20 = K7(1) add R15
  0045  GETTABLE  R20 = R10[R20]
  0046  GETTABLE  R20 = R20[R19]
  0047  EQ        if R0 eq K7(1)   -> -120520
  0048  JMP       (jump)   -> 50
  0049  LOADK     R8 = K7 1
  0050  MOVE      R20 = R0
  0051  CALL      R20 = call(R20, 0 args, 0 rets)
  0052  FORLOOP   forloop R16(sBx=-27)   -> 26
  0053  FORLOOP   forloop R12(sBx=-33)   -> 21
  0054  LOADK     R12 = K7 1
  0055  SUB       R13 = K7(1) sub R3
  0056  LOADK     R14 = K7 1
  0057  FORPREP   forprep R12(sBx=32)   -> 90
  0058  LOADK     R5 = K0 0
  0059  LOADK     R16 = K7 1
  0060  MOVE      R17 = R0
  0061  LOADK     R18 = K7 1
  0062  FORPREP   forprep R16(sBx=26)   -> 89
  0063  GETTABLE  R20 = R11[R19]
  0064  GETTABLE  R7 = R20[R15]
  0065  EQ        if R0 eq K0(0)   -> -127165
  0066  JMP       (jump)   -> 74
  0067  TEST      if not R10 then   -> -131003
  0068  JMP       (jump)   -> 74
  0069  GETTABLE  R20 = R10[R19]
  0070  GETTABLE  R20 = R20[R15]
  0071  EQ        if R0 eq K7(1)   -> -120496
  0072  JMP       (jump)   -> 74
  0073  LOADK     R7 = K7 1
  0074  GETTABLE  R20 = R11[R19]
  0075  ADD       R21 = K7(1) add R15
  0076  GETTABLE  R8 = R20[R21]
  0077  EQ        if R0 eq K0(0)   -> -126641
  0078  JMP       (jump)   -> 87
  0079  TEST      if not R10 then   -> -130991
  0080  JMP       (jump)   -> 87
  0081  GETTABLE  R20 = R10[R19]
  0082  ADD       R21 = K7(1) add R15
  0083  GETTABLE  R20 = R20[R21]
  0084  EQ        if R0 eq K7(1)   -> -120483
  0085  JMP       (jump)   -> 87
  0086  LOADK     R8 = K7 1
  0087  MOVE      R20 = R0
  0088  CALL      R20 = call(R20, 0 args, 0 rets)
  0089  FORLOOP   forloop R16(sBx=-27)   -> 63
  0090  FORLOOP   forloop R12(sBx=-33)   -> 58
  0091  RETURN    return R2..R1
  0092  RETURN    return R0..R-1
  ; ---------- proto0 [] ----------
    ; fn ?  line 617-631 np=0 va=0 ms=2 code=31 consts=3 upvals=5 protos=0
    ;   K[0]=0
    ;   K[1]=1
    ;   K[2]=2
    ;   upvals: first, second, flag, lastFlag, edgeCount
    0000  GETUPVAL  R0 = first
    0001  GETUPVAL  R1 = first
    0002  EQ        if R0 eq R1   -> -131067
    0003  JMP       (jump)   -> 7
    0004  LOADK     R0 = K0 0
    0005  SETUPVAL  first = R0
    0006  JMP       (jump)   -> 18
    0007  GETUPVAL  R0 = first
    0008  EQ        if R0 eq K1(1)   -> -130805
    0009  JMP       (jump)   -> 16
    0010  GETUPVAL  R0 = first
    0011  EQ        if R0 eq K0(0)   -> -130803
    0012  JMP       (jump)   -> 16
    0013  LOADK     R0 = K1 1
    0014  SETUPVAL  first = R0
    0015  JMP       (jump)   -> 18
    0016  LOADK     R0 = K2 2
    0017  SETUPVAL  first = R0
    0018  GETUPVAL  R0 = first
    0019  GETUPVAL  R1 = first
    0020  EQ        if R1 eq R1   -> -131049
    0021  JMP       (jump)   -> 28
    0022  GETUPVAL  R0 = first
    0023  EQ        if R1 eq K0(0)   -> -130791
    0024  JMP       (jump)   -> 28
    0025  GETUPVAL  R0 = first
    0026  ADD       R0 = K1(1) add R0
    0027  SETUPVAL  first = R0
    0028  GETUPVAL  R0 = first
    0029  SETUPVAL  first = R0
    0030  RETURN    return R0..R-1
; ---------- proto30 [GetHorizontalTiles] ----------
  ; fn ?  line 678-680 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_boardWidth'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_boardWidth')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto31 [GetVerticalTiles] ----------
  ; fn ?  line 682-684 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_boardHeight'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_boardHeight')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto32 [GetMatrix] ----------
  ; fn ?  line 686-688 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_boardMatrix'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_boardMatrix')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto33 [GetRound] ----------
  ; fn ?  line 690-692 np=1 va=0 ms=2 code=4 consts=2 upvals=0 protos=0
  ;   K[0]='m_roundConfig'
  ;   K[1]='round'
  ;   locals: self(0-4)
  0000  GETTABLE  R1 = R0[K0('m_roundConfig')]
  0001  GETTABLE  R1 = R1[K1('round')]
  0002  RETURN    return R1..R0
  0003  RETURN    return R0..R-1
; ---------- proto34 [GetActPropertyType] ----------
  ; fn ?  line 694-696 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_actPropertyType'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_actPropertyType')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto35 [TestAddCube] ----------
  ; fn ?  line 703-711 np=3 va=0 ms=7 code=20 consts=9 upvals=1 protos=0
  ;   K[0]='m_boardMatrix'
  ;   K[1]=1
  ;   K[2]='_SaveBoardMatrix'
  ;   K[3]='m_pairEvent'
  ;   K[4]='Call'
  ;   K[5]='EBlockBoardEventType'
  ;   K[6]='TestAddCube'
  ;   K[7]='x'
  ;   K[8]='y'
  ;   upvals: _ENV
  ;   locals: self(0-20), x(0-20), y(0-20)
  0000  GETTABLE  R3 = R0[K0('m_boardMatrix')]
  0001  GETTABLE  R3 = R3[R2]
  0002  GETTABLE  R3 = R3[R1]
  0003  EQ        if R0 eq K1(1)   -> -129274
  0004  JMP       (jump)   -> 6
  0005  RETURN    return R0..R-1
  0006  GETTABLE  R3 = R0[K0('m_boardMatrix')]
  0007  GETTABLE  R3 = R3[R2]
  0008  SETTABLE  R3[R1] = K1(1)
  0009  SELF      R4 = R0[K2('_SaveBoardMatrix')] (self)
  0010  CALL      R3 = call(R3, 0 args, 1 rets)
  0011  GETTABLE  R3 = R0[K3('m_pairEvent')]
  0012  SELF      R4 = R3[K4('Call')] (self)
  0013  GETTABUP  R5 = _ENV[K5('EBlockBoardEventType')]
  0014  GETTABLE  R5 = R5[K6('TestAddCube')]
  0015  NEWTABLE  R6 = {} (0 items)
  0016  SETTABLE  R6[K7('x')] = R1
  0017  SETTABLE  R6[K8('y')] = R2
  0018  CALL      R3 = call(R3, 0 args, 3 rets)
  0019  RETURN    return R0..R-1
; ---------- proto36 [TestRemoveCube] ----------
  ; fn ?  line 713-721 np=3 va=0 ms=7 code=20 consts=9 upvals=1 protos=0
  ;   K[0]='m_boardMatrix'
  ;   K[1]=0
  ;   K[2]='_SaveBoardMatrix'
  ;   K[3]='m_pairEvent'
  ;   K[4]='Call'
  ;   K[5]='EBlockBoardEventType'
  ;   K[6]='TestRemoveCube'
  ;   K[7]='x'
  ;   K[8]='y'
  ;   upvals: _ENV
  ;   locals: self(0-20), x(0-20), y(0-20)
  0000  GETTABLE  R3 = R0[K0('m_boardMatrix')]
  0001  GETTABLE  R3 = R3[R2]
  0002  GETTABLE  R3 = R3[R1]
  0003  EQ        if R0 eq K1(0)   -> -129274
  0004  JMP       (jump)   -> 6
  0005  RETURN    return R0..R-1
  0006  GETTABLE  R3 = R0[K0('m_boardMatrix')]
  0007  GETTABLE  R3 = R3[R2]
  0008  SETTABLE  R3[R1] = K1(0)
  0009  SELF      R4 = R0[K2('_SaveBoardMatrix')] (self)
  0010  CALL      R3 = call(R3, 0 args, 1 rets)
  0011  GETTABLE  R3 = R0[K3('m_pairEvent')]
  0012  SELF      R4 = R3[K4('Call')] (self)
  0013  GETTABUP  R5 = _ENV[K5('EBlockBoardEventType')]
  0014  GETTABLE  R5 = R5[K6('TestRemoveCube')]
  0015  NEWTABLE  R6 = {} (0 items)
  0016  SETTABLE  R6[K7('x')] = R1
  0017  SETTABLE  R6[K8('y')] = R2
  0018  CALL      R3 = call(R3, 0 args, 3 rets)
  0019  RETURN    return R0..R-1
; ---------- proto37 [TestAddBlockItem] ----------
  ; fn ?  line 723-733 np=3 va=0 ms=8 code=26 consts=13 upvals=1 protos=0
  ;   K[0]=nil
  ;   K[1]='m_arrSelectItems'
  ;   K[2]=''
  ;   K[3]='_UpdateBlockItemContent'
  ;   K[4]='_GetNextBlockItemId'
  ;   K[5]='_SaveBlockItems'
  ;   K[6]='m_pairEvent'
  ;   K[7]='Call'
  ;   K[8]='EBlockBoardEventType'
  ;   K[9]='TestAddBlockItem'
  ;   K[10]='index'
  ;   K[11]='itemConfig'
  ;   K[12]='m_mapId2ItemConfig'
  ;   upvals: _ENV
  ;   locals: self(0-26), index(0-26), itemId(0-26)
  0000  EQ        if R0 eq K0(nil)   -> -129790
  0001  JMP       (jump)   -> 9
  0002  GETTABLE  R3 = R0[K1('m_arrSelectItems')]
  0003  SETTABLE  R3[R1] = K2('')
  0004  SELF      R4 = R0[K3('_UpdateBlockItemContent')] (self)
  0005  CALL      R3 = call(R3, 0 args, 1 rets)
  0006  SELF      R4 = R0[K4('_GetNextBlockItemId')] (self)
  0007  CALL      R3 = call(R3, 1 args, 1 rets)
  0008  MOVE      R2 = R0
  0009  GETTABLE  R3 = R0[K1('m_arrSelectItems')]
  0010  SETTABLE  R3[R1] = R2
  0011  SELF      R4 = R0[K5('_SaveBlockItems')] (self)
  0012  CALL      R3 = call(R3, 0 args, 1 rets)
  0013  SELF      R4 = R0[K3('_UpdateBlockItemContent')] (self)
  0014  CALL      R3 = call(R3, 0 args, 1 rets)
  0015  GETTABLE  R3 = R0[K6('m_pairEvent')]
  0016  SELF      R4 = R3[K7('Call')] (self)
  0017  GETTABUP  R5 = _ENV[K8('EBlockBoardEventType')]
  0018  GETTABLE  R5 = R5[K9('TestAddBlockItem')]
  0019  NEWTABLE  R6 = {} (0 items)
  0020  SETTABLE  R6[K10('index')] = R1
  0021  GETTABLE  R7 = R0[K12('m_mapId2ItemConfig')]
  0022  GETTABLE  R7 = R7[R2]
  0023  SETTABLE  R6[K11('itemConfig')] = R7
  0024  CALL      R3 = call(R3, 0 args, 3 rets)
  0025  RETURN    return R0..R-1
; ---------- proto38 [TestRefreshBoardConfig] ----------
  ; fn ?  line 735-746 np=2 va=0 ms=5 code=32 consts=16 upvals=1 protos=0
  ;   K[0]='m_boardMatrix'
  ;   K[1]='Table'
  ;   K[2]='DeepCopy'
  ;   K[3]='boardMatrix'
  ;   K[4]='_SaveBoardMatrix'
  ;   K[5]='m_boardWidth'
  ;   K[6]=1
  ;   K[7]='m_boardHeight'
  ;   K[8]='m_arrSelectItems'
  ;   K[9]='initItems'
  ;   K[10]='_SaveBlockItems'
  ;   K[11]='_UpdateBlockItemContent'
  ;   K[12]='m_pairEvent'
  ;   K[13]='Call'
  ;   K[14]='EBlockBoardEventType'
  ;   K[15]='TestRefreshBoard'
  ;   upvals: _ENV
  ;   locals: self(0-32), boardConfig(0-32)
  0000  GETTABUP  R2 = _ENV[K1('Table')]
  0001  GETTABLE  R2 = R2[K2('DeepCopy')]
  0002  GETTABLE  R3 = R1[K3('boardMatrix')]
  0003  CALL      R2 = call(R2, 1 args, 1 rets)
  0004  SETTABLE  R0[K0('m_boardMatrix')] = R2
  0005  SELF      R3 = R0[K4('_SaveBoardMatrix')] (self)
  0006  CALL      R2 = call(R2, 0 args, 1 rets)
  0007  GETTABLE  R2 = R0[K0('m_boardMatrix')]
  0008  GETTABLE  R2 = R2[K6(1)]
  0009  LEN       R2 = len R0
  0010  SETTABLE  R0[K5('m_boardWidth')] = R2
  0011  GETTABLE  R2 = R0[K0('m_boardMatrix')]
  0012  LEN       R2 = len R0
  0013  SETTABLE  R0[K7('m_boardHeight')] = R2
  0014  GETTABUP  R2 = _ENV[K1('Table')]
  0015  GETTABLE  R2 = R2[K2('DeepCopy')]
  0016  GETTABLE  R3 = R1[K9('initItems')]
  0017  CALL      R2 = call(R2, 1 args, 1 rets)
  0018  TEST      if not R2 then   -> -131051
  0019  JMP       (jump)   -> 21
  0020  NEWTABLE  R2 = {} (0 items)
  0021  SETTABLE  R0[K8('m_arrSelectItems')] = R2
  0022  SELF      R3 = R0[K10('_SaveBlockItems')] (self)
  0023  CALL      R2 = call(R2, 0 args, 1 rets)
  0024  SELF      R3 = R0[K11('_UpdateBlockItemContent')] (self)
  0025  CALL      R2 = call(R2, 0 args, 1 rets)
  0026  GETTABLE  R2 = R0[K12('m_pairEvent')]
  0027  SELF      R3 = R2[K13('Call')] (self)
  0028  GETTABUP  R4 = _ENV[K14('EBlockBoardEventType')]
  0029  GETTABLE  R4 = R4[K15('TestRefreshBoard')]
  0030  CALL      R2 = call(R2, 0 args, 2 rets)
  0031  RETURN    return R0..R-1
; ---------- proto39 [GetAllItemConfigs] ----------
  ; fn ?  line 748-750 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_arrItemConfigs'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_arrItemConfigs')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
