Contract con_poker_card_games_v4


Contract Code


  
1 # con_poker_card_games_v3
2 import con_phi_lst001 as phi
3 I = importlib
4
5 phi_balances = ForeignHash(foreign_contract='con_phi_lst001', foreign_name='balances')
6
7 games = Hash(default_value=None)
8 hands = Hash(default_value=None)
9 game_names = Hash(default_value=None)
10 players_games = Hash(default_value=[])
11 players_invites = Hash(default_value=[])
12
13 player_metadata_contract = Variable()
14 game_controller_contract = Variable()
15 hand_controller_contract = Variable()
16
17 owner = Variable()
18
19
20 @construct
21 def seed():
22 owner.set(ctx.caller)
23 player_metadata_contract.set('con_gamma_phi_profile_v5')
24 hand_controller_contract.set('con_poker_hand_controller_v3')
25 game_controller_contract.set('con_poker_game_controller_v2')
26
27 @export
28 def update_player_metadata_contract(contract: str):
29 assert ctx.caller == owner.get(), 'Only the owner can call update_player_metadata_contract()'
30 player_metadata_contract.set(contract)
31
32
33 @export
34 def update_hand_controller_contract(contract: str):
35 assert ctx.caller == owner.get(), 'Only the owner can call update_hand_controller_contract()'
36 hand_controller_contract.set(contract)
37
38
39 @export
40 def update_game_controller_contract(contract: str):
41 assert ctx.caller == owner.get(), 'Only the owner can call update_game_controller_contract()'
42 game_controller_contract.set(contract)
43
44
45 @export
46 def add_chips_to_game(game_id: str, amount: float):
47 player = ctx.caller
48 module = I.import_module(game_controller_contract.get())
49 module.add_chips_to_game(
50 game_id=game_id,
51 amount=amount,
52 player=player,
53 games=games,
54 )
55
56 @export
57 def withdraw_chips_from_game(game_id: str, amount: float):
58 player = ctx.caller
59 module = I.import_module(game_controller_contract.get())
60 module.withdraw_chips_from_game(
61 game_id=game_id,
62 amount=amount,
63 player=player,
64 games=games,
65 )
66
67
68 @export
69 def respond_to_invite(game_id: str, accept: bool):
70 player = ctx.caller
71 module = I.import_module(game_controller_contract.get())
72 module.respond_to_invite(
73 game_id=game_id,
74 accept=accept,
75 player=player,
76 games=games,
77 players_invites=players_invites,
78 players_games=players_games
79 )
80
81
82 @export
83 def decline_all_invites():
84 # Nuclear option
85 player = ctx.caller
86 module = I.import_module(game_controller_contract.get())
87 module.decline_all_invites(
88 player=player,
89 players_invites=players_invites
90 )
91
92
93 @export
94 def start_game(name: str,
95 other_players: list,
96 game_config: dict,
97 public: bool = False) -> str:
98
99 creator = ctx.caller
100 module = I.import_module(game_controller_contract.get())
101 return module.start_game(
102 name=name,
103 other_players=other_players,
104 game_config=game_config,
105 creator=creator,
106 games=games,
107 players_games=players_games,
108 players_invites=players_invites,
109 game_names=game_names,
110 public=public
111 )
112
113
114 @export
115 def add_player_to_game(game_id: str, player_to_add: str):
116 player = ctx.caller
117 module = I.import_module(game_controller_contract.get())
118 module.add_player_to_game(
119 game_id=game_id,
120 player_to_add=player_to_add,
121 player=player,
122 games=games,
123 players_invites=players_invites,
124 )
125
126
127 @export
128 def leave_game(game_id: str):
129 player = ctx.caller
130 module = I.import_module(game_controller_contract.get())
131 module.leave_game(
132 game_id=game_id,
133 player=player,
134 force=False,
135 games=games,
136 players_games=players_games
137 )
138
139
140 @export
141 def force_withdraw(player: str, amount: float):
142 assert ctx.caller == game_controller_contract.get(), 'Only the game controller contract can call this method.'
143 phi.transfer(
144 amount=amount,
145 to=player
146 )
147
148
149 @export
150 def force_transfer(player: str, amount: float):
151 assert ctx.caller == game_controller_contract.get(), 'Only the game controller contract can call this method.'
152 assert phi_balances[player, ctx.this] >= amount, 'You have not approved enough for this amount of chips'
153 phi.transfer_from(amount, ctx.this, player)
154
155
156 @export
157 def kick_from_game(game_id: str, player: str):
158 creator = ctx.caller
159 module = I.import_module(game_controller_contract.get())
160 module.kick_from_game(
161 game_id=game_id,
162 creator=creator,
163 player=player,
164 games=games,
165 players_games=players_games,
166 )
167
168
169 @export
170 def ban_player(game_id: str, player: str):
171 creator = ctx.caller
172 module = I.import_module(game_controller_contract.get())
173 module.ban_player(
174 game_id=game_id,
175 creator=creator,
176 player=player,
177 games=games,
178 players_games=players_games,
179 )
180
181
182 @export
183 def unban_player(game_id: str, player: str):
184 creator = ctx.caller
185 module = I.import_module(game_controller_contract.get())
186 module.unban_player(
187 game_id=game_id,
188 creator=creator,
189 player=player,
190 games=games,
191 )
192
193
194 @export
195 def start_hand(game_id: str) -> str:
196 dealer = ctx.caller
197 module = I.import_module(hand_controller_contract.get())
198 return module.start_hand(
199 game_id=game_id,
200 dealer=dealer,
201 games=games,
202 hands=hands,
203 )
204
205
206 @export
207 def ante_up(hand_id: str):
208 player = ctx.caller
209 module = I.import_module(hand_controller_contract.get())
210 module.ante_up(
211 hand_id=hand_id,
212 player=player,
213 games=games,
214 hands=hands,
215 )
216
217
218 @export
219 def deal_cards(hand_id: str):
220 dealer = ctx.caller
221 module = I.import_module(hand_controller_contract.get())
222 player_metadata = ForeignHash(foreign_contract=player_metadata_contract.get(), foreign_name='metadata')
223 module.deal_cards(
224 hand_id=hand_id,
225 dealer=dealer,
226 games=games,
227 hands=hands,
228 player_metadata=player_metadata
229 )
230
231
232 @export
233 def reveal_otp(hand_id: str, pad: int, salt: int, index: int):
234 player = ctx.caller
235 module = I.import_module(hand_controller_contract.get())
236 module.reveal_otp(
237 hand_id=hand_id,
238 pad=pad,
239 salt=salt,
240 index=index,
241 player=player,
242 hands=hands,
243 )
244
245
246 @export
247 def reveal(hand_id: str, index: int) -> str:
248 module = I.import_module(hand_controller_contract.get())
249 return module.reveal(
250 hand_id=hand_id,
251 index=index,
252 hands=hands,
253 )
254
255
256 @export
257 def bet_check_or_fold(hand_id: str, bet: float):
258 player = ctx.caller
259 module = I.import_module(hand_controller_contract.get())
260 module.bet_check_or_fold(
261 hand_id=hand_id,
262 bet=bet,
263 player=player,
264 games=games,
265 hands=hands,
266 )
267
268
269 @export
270 def verify_hand(hand_id: str, player_hand_str: str) -> str:
271 player = ctx.caller
272 module = I.import_module(hand_controller_contract.get())
273 return module.verify_hand(
274 hand_id=hand_id,
275 player_hand_str=player_hand_str,
276 player=player,
277 games=games,
278 hands=hands,
279 )
280
281
282 @export
283 def payout_hand(hand_id: str):
284 module = I.import_module(hand_controller_contract.get())
285 module.payout_hand(
286 hand_id=hand_id,
287 games=games,
288 hands=hands,
289 )
290
291
292 @export
293 def leave_hand(player: str, game_id: str, hand_id: str, force: bool):
294 assert ctx.caller == game_controller_contract.get(), 'Only the game controller contract can call this method.'
295 module = I.import_module(hand_controller_contract.get())
296 module.leave_hand(
297 game_id=game_id,
298 hand_id=hand_id,
299 player=player,
300 force=force,
301 games=games,
302 hands=hands
303 )
304
305
306 @export
307 def emergency_withdraw(amount: float):
308 assert ctx.caller == owner.get(), 'Only the owner can call emergency_withdraw()'
309 phi.transfer(
310 amount=amount,
311 to=ctx.caller
312 )
313
314
315 @export
316 def change_ownership(new_owner: str):
317 assert ctx.caller == owner.get(), 'Only the owner can change ownership!'
318 owner.set(new_owner)

Byte Code

e300000000000000000000000008000000400000007308030000640064016c005a0165025a036504640264036404640564068d045a05650664016404640764088d035a07650664016404640964088d035a08650664016404640a64088d035a09650667006404640b64088d035a0a650667006404640c64088d035a0b650c6404640d640e8d025a0d650c6404640f640e8d025a0e650c64046410640e8d025a0f650c64046411640e8d025a106412641384005a11651264048301651364149c0164156416840483015a14651264048301651364149c0164176418840483015a15651264048301651364149c016419641a840483015a1665126404830165136517641b9c02641c641d840483015a1865126404830165136517641b9c02641e641f840483015a196512640483016513651a64209c0264216422840483015a1b65126404830164236424840083015a1c651264048301645a6513651d651e651a651364269c0564276428840583015a1f6512640483016513651364299c02642a642b840483015a206512640483016513642c9c01642d642e840483015a2165126404830165136517642f9c0264306431840483015a2265126404830165136517642f9c0264326433840483015a236512640483016513651364349c0264356436840483015a246512640483016513651364349c0264376438840483015a256512640483016513651364349c026439643a840483015a2665126404830165136513643b9c02643c643d840483015a276512640483016513643e9c01643f6440840483015a286512640483016513643e9c0164416442840483015a296512640483016513652a652a652a64439c0464446445840483015a2b6512640483016513652a651364469c0364476448840483015a2c6512640483016513651764499c02644a644b840483015a2d651264048301651365136513644c9c03644d644e840483015a2e6512640483016513643e9c01644f6450840483015a2f651264048301651365136513651a64519c0464526453840483015a30651264048301651764549c0164556456840483015a31651264048301651364579c0164586459840483015a3264015300295be9000000004eda0e636f6e5f7068695f6c7374303031da0862616c616e636573da17636f6e5f706f6b65725f636172645f67616d65735f7634da0c7068695f62616c616e6365732904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d65da08636f6e7472616374da046e616d65da0567616d65732903da0d64656661756c745f76616c756572080000007209000000da0568616e6473da0a67616d655f6e616d6573da0d706c61796572735f67616d6573da0f706c61796572735f696e7669746573da18706c617965725f6d657461646174615f636f6e7472616374290272080000007209000000da1867616d655f636f6e74726f6c6c65725f636f6e7472616374da1868616e645f636f6e74726f6c6c65725f636f6e7472616374da056f776e6572630000000000000000000000000200000043000000732e00000074006a0174026a038301010074046a0164018301010074056a0164028301010074066a016403830101006400530029044eda18636f6e5f67616d6d615f7068695f70726f66696c655f7635da1c636f6e5f706f6b65725f68616e645f636f6e74726f6c6c65725f7633da1c636f6e5f706f6b65725f67616d655f636f6e74726f6c6c65725f76322907da075f5f6f776e6572da03736574da03637478da0663616c6c6572da1a5f5f706c617965725f6d657461646174615f636f6e7472616374da1a5f5f68616e645f636f6e74726f6c6c65725f636f6e7472616374da1a5f5f67616d655f636f6e74726f6c6c65725f636f6e7472616374a900721e000000721e000000da00da045f5f5f5f19000000730800000000010c010a010a01722000000029017208000000630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a394f6e6c7920746865206f776e65722063616e2063616c6c207570646174655f706c617965725f6d657461646174615f636f6e7472616374282929077219000000721a0000007217000000da03676574da0e417373657274696f6e4572726f72721b000000721800000029017208000000721e000000721e000000721f000000da1f7570646174655f706c617965725f6d657461646174615f636f6e74726163742000000073060000000002100106017223000000630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a394f6e6c7920746865206f776e65722063616e2063616c6c207570646174655f68616e645f636f6e74726f6c6c65725f636f6e7472616374282929077219000000721a000000721700000072210000007222000000721c000000721800000029017208000000721e000000721e000000721f000000da1f7570646174655f68616e645f636f6e74726f6c6c65725f636f6e74726163742700000073060000000002100106017224000000630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a394f6e6c7920746865206f776e65722063616e2063616c6c207570646174655f67616d655f636f6e74726f6c6c65725f636f6e7472616374282929077219000000721a000000721700000072210000007222000000721d000000721800000029017208000000721e000000721e000000721f000000da1f7570646174655f67616d655f636f6e74726f6c6c65725f636f6e74726163742e000000730600000000021001060172250000002902da0767616d655f6964da06616d6f756e74630200000000000000040000000600000043000000732a00000074006a017d0274026a0374046a05830083017d037c036a067c007c017c02740764018d0401006400530029024e290472260000007227000000da06706c61796572720a00000029087219000000721a000000da0149da0d696d706f72745f6d6f64756c65721d0000007221000000da116164645f63686970735f746f5f67616d65da075f5f67616d65732904722600000072270000007228000000da066d6f64756c65721e000000721e000000721f000000722b000000350000007308000000000206010e010a01722b000000630200000000000000040000000600000043000000732a00000074006a017d0274026a0374046a05830083017d037c036a067c007c017c02740764018d0401006400530029024e2904722600000072270000007228000000720a00000029087219000000721a0000007229000000722a000000721d0000007221000000da1877697468647261775f63686970735f66726f6d5f67616d65722c0000002904722600000072270000007228000000722d000000721e000000721e000000721f000000722e0000003d0000007308000000000206010e010801722e00000029027226000000da06616363657074630200000000000000040000000800000043000000732e00000074006a017d0274026a0374046a05830083017d037c036a067c007c017c0274077408740964018d0601006400530029024e29067226000000722f0000007228000000720a000000720f000000720e000000290a7219000000721a0000007229000000722a000000721d0000007221000000da11726573706f6e645f746f5f696e76697465722c000000da115f5f706c61796572735f696e7669746573da0f5f5f706c61796572735f67616d657329047226000000722f0000007228000000722d000000721e000000721e000000721f000000723000000045000000730a000000000206010e010a0104017230000000630000000000000000020000000400000043000000732600000074006a017d0074026a0374046a05830083017d017c016a067c00740764018d0201006400530029024e29027228000000720f00000029087219000000721a0000007229000000722a000000721d0000007221000000da136465636c696e655f616c6c5f696e7669746573723100000029027228000000722d000000721e000000721e000000721f00000072330000004e0000007306000000000206010e0172330000004629057209000000da0d6f746865725f706c6179657273da0b67616d655f636f6e666967da067075626c6963da0672657475726e630400000000000000060000000b00000043000000733000000074006a017d0474026a0374046a05830083017d057c056a067c007c017c027c04740774087409740a7c0364018d09530029024e2909720900000072340000007235000000da0763726561746f72720a000000720e000000720f000000720d0000007236000000290b7219000000721a0000007229000000722a000000721d0000007221000000da0a73746172745f67616d65722c00000072320000007231000000da0c5f5f67616d655f6e616d6573290672090000007234000000723500000072360000007238000000722d000000721e000000721e000000721f000000723900000056000000730c000000000306010e01080106010401723900000029027226000000da0d706c617965725f746f5f616464630200000000000000040000000700000043000000732c00000074006a017d0274026a0374046a05830083017d037c036a067c007c017c027407740864018d0501006400530029024e29057226000000723b0000007228000000720a000000720f00000029097219000000721a0000007229000000722a000000721d0000007221000000da126164645f706c617965725f746f5f67616d65722c000000723100000029047226000000723b0000007228000000722d000000721e000000721e000000721f000000723c000000610000007308000000000206010e010801723c00000029017226000000630100000000000000030000000700000043000000732c00000074006a017d0174026a0374046a05830083017d027c026a067c007c0164017407740864028d0501006400530029034e46290572260000007228000000da05666f726365720a000000720e00000029097219000000721a0000007229000000722a000000721d0000007221000000da0a6c656176655f67616d65722c0000007232000000290372260000007228000000722d000000721e000000721e000000721f000000723e000000690000007308000000000206010e010a01723e000000290272280000007227000000630200000000000000020000000400000043000000732800000074006a0174026a0383006b027316740464018301820174056a067c017c0064028d0201006400530029034e7a374f6e6c79207468652067616d6520636f6e74726f6c6c657220636f6e74726163742063616e2063616c6c2074686973206d6574686f642e29027227000000da02746f29077219000000721a000000721d00000072210000007222000000da03706869da087472616e73666572290272280000007227000000721e000000721e000000721f000000da0e666f7263655f77697468647261777100000073060000000002100106017242000000630200000000000000020000000400000043000000734400000074006a0174026a0383006b027316740464018301820174057c0074006a06660219007c016b057330740464028301820174076a087c0174006a067c00830301006400530029034e7a374f6e6c79207468652067616d6520636f6e74726f6c6c657220636f6e74726163742063616e2063616c6c2074686973206d6574686f642e7a35596f752068617665206e6f7420617070726f76656420656e6f75676820666f72207468697320616d6f756e74206f6620636869707329097219000000721a000000721d00000072210000007222000000da0e5f5f7068695f62616c616e636573da04746869737240000000da0d7472616e736665725f66726f6d290272280000007227000000721e000000721e000000721f000000da0e666f7263655f7472616e7366657278000000730a0000000002100106010c010e017246000000290272260000007228000000630200000000000000040000000700000043000000732c00000074006a017d0274026a0374046a05830083017d037c036a067c007c027c017407740864018d0501006400530029024e2905722600000072380000007228000000720a000000720e00000029097219000000721a0000007229000000722a000000721d0000007221000000da0e6b69636b5f66726f6d5f67616d65722c00000072320000002904722600000072280000007238000000722d000000721e000000721e000000721f0000007247000000810000007308000000000206010e010a017247000000630200000000000000040000000700000043000000732c00000074006a017d0274026a0374046a05830083017d037c036a067c007c027c017407740864018d0501006400530029024e2905722600000072380000007228000000720a000000720e00000029097219000000721a0000007229000000722a000000721d0000007221000000da0a62616e5f706c61796572722c00000072320000002904722600000072280000007238000000722d000000721e000000721e000000721f0000007248000000890000007308000000000206010e010a017248000000630200000000000000040000000600000043000000732a00000074006a017d0274026a0374046a05830083017d037c036a067c007c027c01740764018d0401006400530029024e2904722600000072380000007228000000720a00000029087219000000721a0000007229000000722a000000721d0000007221000000da0c756e62616e5f706c61796572722c0000002904722600000072280000007238000000722d000000721e000000721e000000721f0000007249000000910000007308000000000206010e010a017249000000290272260000007237000000630100000000000000030000000600000043000000732600000074006a017d0174026a0374046a05830083017d027c026a067c007c017407740864018d04530029024e29047226000000da066465616c6572720a000000720c00000029097219000000721a0000007229000000722a000000721c0000007221000000da0a73746172745f68616e64722c000000da075f5f68616e647329037226000000724a000000722d000000721e000000721e000000721f000000724b000000990000007308000000000206010e010a01724b0000002901da0768616e645f6964630100000000000000030000000600000043000000732a00000074006a017d0174026a0374046a05830083017d027c026a067c007c017407740864018d0401006400530029024e2904724d0000007228000000720a000000720c00000029097219000000721a0000007229000000722a000000721c0000007221000000da07616e74655f7570722c000000724c0000002903724d0000007228000000722d000000721e000000721e000000721f000000724e000000a10000007306000000000206010e01724e000000630100000000000000040000000700000043000000734000000074006a017d0174026a0374046a05830083017d02740674076a05830064016402640364048d047d037c026a087c007c017409740a7c0364058d0501006400530029064eda086d657461646174617204000000da0f706c617965725f6d65746164617461290472060000007207000000720800000072090000002905724d000000724a000000720a000000720c0000007250000000290b7219000000721a0000007229000000722a000000721c0000007221000000da0b466f726569676e48617368721b000000da0a6465616c5f6361726473722c000000724c0000002904724d000000724a000000722d000000da115f5f706c617965725f6d65746164617461721e000000721e000000721f0000007252000000a9000000730e000000000206010e01020108010a010a0172520000002904724d000000da03706164da0473616c74da05696e646578630400000000000000060000000800000043000000732e00000074006a017d0474026a0374046a05830083017d057c056a067c007c017c027c037c04740764018d0601006400530029024e2906724d0000007254000000725500000072560000007228000000720c00000029087219000000721a0000007229000000722a000000721c0000007221000000da0a72657665616c5f6f7470724c0000002906724d0000007254000000725500000072560000007228000000722d000000721e000000721e000000721f0000007257000000b40000007308000000000206010e010c0172570000002903724d00000072560000007237000000630200000000000000030000000500000043000000731e00000074006a0174026a03830083017d027c026a047c007c01740564018d03530029024e2903724d0000007256000000720c00000029067229000000722a000000721c0000007221000000da0672657665616c724c0000002903724d0000007256000000722d000000721e000000721e000000721f0000007258000000bc000000730400000000020e0172580000002902724d000000da03626574630200000000000000040000000700000043000000732c00000074006a017d0274026a0374046a05830083017d037c036a067c007c017c027407740864018d0501006400530029024e2905724d00000072590000007228000000720a000000720c00000029097219000000721a0000007229000000722a000000721c0000007221000000da116265745f636865636b5f6f725f666f6c64722c000000724c0000002904724d00000072590000007228000000722d000000721e000000721e000000721f000000725a000000c20000007308000000000206010e010a01725a0000002903724d000000da0f706c617965725f68616e645f7374727237000000630200000000000000040000000700000043000000732800000074006a017d0274026a0374046a05830083017d037c036a067c007c017c027407740864018d05530029024e2905724d000000725b0000007228000000720a000000720c00000029097219000000721a0000007229000000722a000000721c0000007221000000da0b7665726966795f68616e64722c000000724c0000002904724d000000725b0000007228000000722d000000721e000000721e000000721f000000725c000000ca0000007308000000000206010e010601725c000000630100000000000000020000000500000043000000732200000074006a0174026a03830083017d017c016a047c007405740664018d0301006400530029024e2903724d000000720a000000720c00000029077229000000722a000000721c0000007221000000da0b7061796f75745f68616e64722c000000724c0000002902724d000000722d000000721e000000721e000000721f000000725d000000d2000000730400000000020e01725d000000290472280000007226000000724d000000723d000000630400000000000000050000000800000043000000733e00000074006a0174026a0383006b027316740464018301820174056a0674076a03830083017d047c046a087c017c027c007c037409740a64028d0601006400530029034e7a374f6e6c79207468652067616d6520636f6e74726f6c6c657220636f6e74726163742063616e2063616c6c2074686973206d6574686f642e29067226000000724d0000007228000000723d000000720a000000720c000000290b7219000000721a000000721d000000722100000072220000007229000000722a000000721c000000da0a6c656176655f68616e64722c000000724c000000290572280000007226000000724d000000723d000000722d000000721e000000721e000000721f000000725e000000d8000000730a0000000002100106010e010a01725e00000029017227000000630100000000000000010000000400000043000000732a00000074006a0174026a0383006b027316740464018301820174056a067c0074006a0164028d0201006400530029034e7a2c4f6e6c7920746865206f776e65722063616e2063616c6c20656d657267656e63795f7769746864726177282929027227000000723f00000029077219000000721a0000007217000000722100000072220000007240000000724100000029017227000000721e000000721e000000721f000000da12656d657267656e63795f7769746864726177e10000007306000000000210010601725f0000002901da096e65775f6f776e6572630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174026a057c00830101006400530029024e7a244f6e6c7920746865206f776e65722063616e206368616e6765206f776e6572736869702129067219000000721a000000721700000072210000007222000000721800000029017260000000721e000000721e000000721f000000da106368616e67655f6f776e657273686970e80000007304000000000216017261000000290146293372020000007240000000da09696d706f72746c6962722900000072510000007243000000da0448617368722c000000724c000000723a00000072320000007231000000da085661726961626c65721b000000721d000000721c00000072170000007220000000da085f5f6578706f7274da03737472722300000072240000007225000000da05666c6f6174722b000000722e000000da04626f6f6c72300000007233000000da046c697374da04646963747239000000723c000000723e00000072420000007246000000724700000072480000007249000000724b000000724e0000007252000000da03696e7472570000007258000000725a000000725c000000725d000000725e000000725f0000007261000000721e000000721e000000721e000000721f000000da083c6d6f64756c653e010000007392000000080104010401040108010601080106010801060108010601080104010a010401080104010801040108010c030807060110060601100606011006060112070601120706011208100806021a090601120706011007060112060601120806011207060112070601120706011207060110070601100a060116070601140506011207060114070601100506011608060110060601