tx · 5usucN1gaoLLWMi83mrnX8zPyhpuTHQgg41YCgJNKtQT

3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv:  -0.01600000 Waves

2024.10.23 19:17 [3339686] smart account 3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv > SELF 0.00000000 Waves

{ "type": 13, "id": "5usucN1gaoLLWMi83mrnX8zPyhpuTHQgg41YCgJNKtQT", "fee": 1600000, "feeAssetId": null, "timestamp": 1729700313237, "version": 2, "chainId": 84, "sender": "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv", "senderPublicKey": "2fNSk5gmWbXBDTkSYSKd66xSgVvAYzrJnP9YSAFNvTwC", "proofs": [ "4Ab2m7EoexW59QQUV6rYXhAiggWP1fk8F7qroSDAeQK1VfuWUY39X8LBeYx4EsmRSwBj7xP11kpeU157ctDMAWeo" ], "script": "base64:BgIWCAISAwoBGBIDCgEIEgMKAQgSAwoBCGYAA1NFUAICX18ABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUEZ3WXRhOGJpRXozMXpwZUZlNURKSzh3RTV0clNwUVZGOAMJAAACAQFUBQckbWF0Y2gwAiMzTjdVdVlhcjYyNjRQNThGQmhWV0tQUUFoNFl1YTJoZ25ndgkAAgECDVVua25vd24gY2hhaW4AFW9sZFN0YWtpbmdDb250cmFjdFN0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BMbmNYdFMxVTgzRDZjUWJGRDNIOHJCSFBMZ3p4U0ZLWjEDCQAAAgEBVAUHJG1hdGNoMAIjM05EQ3lCRzVxODVKdWFSaWlnVWVFdGFpbnlqQ1FUM1hwWm0JAAIBAg1Vbmtub3duIGNoYWluAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAAQSWR4Q2ZnQWNyZXMyRGFwcAABAA1JZHhDZmdXbGdEYXBwAAIAFElkeENmZ1B1enpsZVBvb2xEYXBwAAQAFElkeENmZ0ludmVzdEZ1bmREYXBwAAUBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEPa2V5UmVzdDJBZGRyZXNzAAINJXNfX3Jlc3QyQWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCHJlc3QyQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUIcmVzdDJDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA1yZXN0MkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlSZXN0MkFkZHJlc3MABRZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyAAhyZXN0MkNmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUNcmVzdDJDb250cmFjdAAOYWNyZXMyQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUQSWR4Q2ZnQWNyZXMyRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUNSWR4Q2ZnV2xnRGFwcAAScHV6emxlUG9vbENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFFElkeENmZ1B1enpsZVBvb2xEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUUSWR4Q2ZnSW52ZXN0RnVuZERhcHAAE29sZEFjcmVzQ29udHJhY3RLZXkCEG9sZEFjcmVzQ29udHJhY3QBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUOYWNyZXMyQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBDGFzVHVwbGU0SW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIUKEludCwgSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAiZmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCwgSW50KQEMYXNUdXBsZTNJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAiFmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCkBDGFzVHVwbGUySW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECHGZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCkAA002XwDAhD0AA004XwCAwtcvAApURUFNX1NIQVJFAMCaDAAOQUNUSVZJVFlfU0hBUkUAoI0GAAxQTEFZRVJfU0hBUkUAgLUYAAtZRUFSX01JTExJUwCAhuvHdQAGREFZX01TAIC4mSkAB0lTU1VFMTAAgJTr3AMAD1BMQVlFUlMxMF9TSEFSRQCA6jAAEU1BUktFVElORzEwX1NIQVJFAKCNBgAMVEVBTTEwX1NIQVJFAKCNBgARTkVXX1NUQUtJTkdfU1RBUlQAgNiBq6QyAAp0ZWFtQWRyS2V5Agh0ZWFtQWRkcgAObGFzdFRlYW1UaW1LZXkCFGxhc3RDbGFpbWVkVGltZV90ZWFtAA50ZWFtQW10TGVmdEtleQIOdGVhbUFtb3VudExlZnQAFGxhc3RBY3Rpdml0aWVzVGltS2V5AhpsYXN0Q2xhaW1lZFRpbWVfYWN0aXZpdGllcwANYWN0QW10TGVmdEtleQIUYWN0aXZpdGllc0Ftb3VudExlZnQAEXN0YWtlcnNBbXRMZWZ0S2V5AhFzdGFrZXJzQW1vdW50TGVmdAEWa2V5TGFzdENsYWltVGltZUJ5VXNlcgEEYWRkcgkArAICAhRsYXN0Q2xhaW1lZFRpbWVVc2VyXwUEYWRkcgENZGlzdHJCeVBlcmlvZAIMaXNzdWVkQW1vdW50BnBlcmlvZAkAawMFDGlzc3VlZEFtb3VudAkAaAIFDFBMQVlFUl9TSEFSRQkAZAIFBnBlcmlvZAABCQBoAgAGBQNNNl8AEXdsZ0lzc3VlMTBUaW1lS2V5Ag93bGdfaXNzdWUxMFRpbWUADndsZ0lzc3VlVGltS2V5Ag13bGdfaXNzdWVUaW1lAA93bGdJc3N1ZWRBbXRLZXkCEHdsZ19pc3N1ZWRBbW91bnQADnpiSXNzdWVkQW10S2V5AhJ6YmlsbF9pc3N1ZWRBbW91bnQBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgAUdG90YWxGYXJtaW5nUG93ZXJLZXkCEXRvdGFsRmFybWluZ1Bvd2VyAAlkYXBwMlJlc3QAAAAMZGFwcDJTdGFraW5nAAEACGRhcHAyV2xnAAIAC2RhcHAyUHV6emxlAAMAD2RhcHAySW52ZXN0RnVuZAAEAApsZXZlbEFjcmVzCQDMCAIAAAkAzAgCAAoJAMwIAgAUCQDMCAIAKAkAzAgCAFAJAMwIAgCWAQkAzAgCAPoBCQDMCAIAkAMJAMwIAgC8BQkAzAgCAOgHBQNuaWwBD2dldExldmVsQnlBY3JlcwEFYWNyZXMEA2FjcgkAaQIJAGQCBQVhY3JlcwD/wdcvBQNNOF8KAQdjaGVja2VyAgNhY2MEaXRlbQMJAGcCBQRpdGVtBQNhY3IFA2FjYwkAZAIFA2FjYwABCgACJGwFCmxldmVsQWNyZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NoZWNrZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBWFjcmVzCQBoAgkAaAIFBWFjcmVzABQJAGQCCQEPZ2V0TGV2ZWxCeUFjcmVzAQUFYWNyZXMABAEQZ2V0RmFybWluZ1Bvd2VycwISdXNlckFkZHJTdHJPckVtcHR5DmFjcmVzMkNvbnRyYWN0BAd0b3RhbEZQCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0BRR0b3RhbEZhcm1pbmdQb3dlcktleQAABAl1c2VyQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQAABAZ1c2VyRlAJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUJdXNlckFjcmVzCQDMCAIFB3RvdGFsRlAJAMwIAgUGdXNlckZQBQNuaWwACmlkeFRvdGFsRlAAAAAJaWR4VXNlckZQAAEAC2l4V2xnQW1vdW50AAAACGl4V2xnV2xnAAEACml4V2xnUHJpY2UAAgAKaXhXbGdGdW5kcwADAA1peFdsZ0FjdGl2aXR5AAQAC2l4V2xnQWNyZXMyAAUADml4V2xnQXJiaXRyYWdlAAYACWl4V2xnUG9vbAAHAA5peFdsZ0lzc3VlVGltZQAIABRpeFdsZ0xhc3RUZWFtQWN0VGltZQAJAA5peFdsZ1RlYW1Ub3RhbAAKAA9peFdsZ1RlYW1BbUxlZnQACwATaXhXbGdUZWFtQW1BdmFpbE5vdwAMAA9peFdsZ1RlYW1XbGdvbGQADQANaXhXbGdBY3RUb3RhbAAOAA5peFdsZ0FjdEFtTGVmdAAPABJpeFdsZ0FjdEFtQXZhaWxOb3cAEAAOaXhXbGdBY3RXbGdvbGQAEQAOaXhXbGdDdXJQZXJpb2QAEgAQaXhXbGdBbUxlZnRUb3RhbAATABppeFdsZ0N1clBlcmlvZERpc3RyaWJ1dGlvbgAUABFpeFdsZ0xhc3RVc2VyVGltZQAVABVpeFdsZ0ludmVzdEZ1bmRBbW91bnQAFgATaXhXbGdVc2VyQW1BdmFpbE5vdwAXABBpeFdsZ0VmZlVzZXJUaW1lABgAEml4V2xnSXNzdWUxMEFtb3VudAAZABtpeFdsZ01hcmtldGluZ0lzc3VlMTBBbW91bnQAGgAWaXhXbGdUZWFtSXNzdWUxMEFtb3VudAAbAA9peFdsZ1VzZXIxMHBhcnQAHAAQaXhXbGdJc3N1ZTEwVGltZQAdAQxnZXRXbGdTdGF0czIEC3VzZXJBZGRyT3B0CWNvbnRyYWN0cwZ1c2R0SWQVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAxpc3N1ZWRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFD3dsZ0lzc3VlZEFtdEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAdyZXN0VXNkCQDwBwIJAJEDAgUJY29udHJhY3RzBQlkYXBwMlJlc3QFBnVzZHRJZAQGd2xnVXNkCQBlAgkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBnVzZHRJZAUVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAlwdXp6bGVVc2QJAPAHAgkAkQMCBQljb250cmFjdHMFC2RhcHAyUHV6emxlBQZ1c2R0SWQECWFjcmVzMlVzZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nBQZ1c2R0SWQEEWludmVzdEZuZENvbnRyYWN0CQCRAwIFCWNvbnRyYWN0cwUPZGFwcDJJbnZlc3RGdW5kBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEWludmVzdEZuZENvbnRyYWN0BQZ1c2R0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgURaW52ZXN0Rm5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDXRvdGFsRnVuZHNVc2QJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAQFd2xnSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcCC3dsZ19hc3NldElkAhNOb3QgaW5pdGlhbGl6ZWQgeWV0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlpc3N1ZVRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDndsZ0lzc3VlVGltS2V5Ag9Ob3QgaW5pdGlhbGl6ZWQEBndsZ1dsZwkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBXdsZ0lkBAl0ZWFtVG90YWwJAGsDBQxpc3N1ZWRBbW91bnQFClRFQU1fU0hBUkUFA002XwQOdGVhbUFtb3VudExlZnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ50ZWFtQW10TGVmdEtleQUJdGVhbVRvdGFsBAxsYXN0VGVhbVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ5sYXN0VGVhbVRpbUtleQUJaXNzdWVUaW1lBAh0ZWFtQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAnQgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFCnRlYW1BZHJLZXkEFnRlYW1BbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUJdGVhbVRvdGFsCQBlAgUDbm93BQxsYXN0VGVhbVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTCQDMCAIFDnRlYW1BbW91bnRMZWZ0BQNuaWwECnRlYW1XbGdvbGQJAPAHAgUIdGVhbUFkZHIFBXdsZ0lkBAhhY3RUb3RhbAkAawMFDGlzc3VlZEFtb3VudAUOQUNUSVZJVFlfU0hBUkUFA002XwQNYWN0QW1vdW50TGVmdAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDWFjdEFtdExlZnRLZXkFCGFjdFRvdGFsBBJsYXN0QWN0aXZpdGllc1RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRRsYXN0QWN0aXZpdGllc1RpbUtleQUJaXNzdWVUaW1lBBVhY3RBbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUIYWN0VG90YWwJAGUCBQNub3cFEmxhc3RBY3Rpdml0aWVzVGltZQkAaAIAAwULWUVBUl9NSUxMSVMJAMwIAgUNYWN0QW1vdW50TGVmdAUDbmlsBAlhY3RXbGdvbGQJAPAHAgkAkQMCBQljb250cmFjdHMFCWRhcHAyUmVzdAUFd2xnSWQEDGxhc3RVc2VyVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcJARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQULdXNlckFkZHJPcHQFCWlzc3VlVGltZQQObGFzdFVzZXJQZXJpb2QJAGkCCQBlAgUMbGFzdFVzZXJUaW1lBQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTBApub3dMaW1pdGVkCQCXAwEJAMwIAgUDbm93CQDMCAIJAGQCBQlpc3N1ZVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTBQNuaWwECWN1clBlcmlvZAkAlwMBCQDMCAIJAGkCCQBlAgUDbm93BQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTCQDMCAIAAgUDbmlsBANlZmYJARBnZXRGYXJtaW5nUG93ZXJzAgULdXNlckFkZHJPcHQJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcEFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQFCWN1clBlcmlvZAQIJHQwNzkxMTkDCQAAAgUObGFzdFVzZXJQZXJpb2QFCWN1clBlcmlvZAQCYTAJAGsDBRVjdXJQZXJpb2REaXN0cmlidXRpb24JAGUCBQpub3dMaW1pdGVkBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBAdlZmZUaW1lBQpub3dMaW1pdGVkCQCUCgIFAmEwBQdlZmZUaW1lAwkAAAIFDmxhc3RVc2VyUGVyaW9kCQBlAgUJY3VyUGVyaW9kAAEEAmExCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZQIJAGQCBQlpc3N1ZVRpbWUJAGgCBQtZRUFSX01JTExJUwUJY3VyUGVyaW9kBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBAJhMAkAawMFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAZQIFCm5vd0xpbWl0ZWQJAGQCBQlpc3N1ZVRpbWUJAGgCBQtZRUFSX01JTExJUwUJY3VyUGVyaW9kBQtZRUFSX01JTExJUwQFYXZhaWwJAGQCBQJhMQUCYTAEB2VmZlRpbWUDCQBnAgUCYTEFBWF2YWlsCQBkAgUMbGFzdFVzZXJUaW1lCQBrAwULWUVBUl9NSUxMSVMFBWF2YWlsCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAABCQBkAgkAZAIFCWlzc3VlVGltZQkAaAIFC1lFQVJfTUlMTElTBQljdXJQZXJpb2QJAGsDBQtZRUFSX01JTExJUwkAZQIFBWF2YWlsBQJhMQUVY3VyUGVyaW9kRGlzdHJpYnV0aW9uCQCUCgIFBWF2YWlsBQdlZmZUaW1lBAJhMgkAawMJAQ1kaXN0ckJ5UGVyaW9kAgUMaXNzdWVkQW1vdW50CQBlAgUJY3VyUGVyaW9kAAIJAGUCCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMJAGUCBQljdXJQZXJpb2QAAQUMbGFzdFVzZXJUaW1lBQtZRUFSX01JTExJUwQCYTEJAQ1kaXN0ckJ5UGVyaW9kAgUMaXNzdWVkQW1vdW50CQBlAgUJY3VyUGVyaW9kAAEEAmEwCQBrAwUVY3VyUGVyaW9kRGlzdHJpYnV0aW9uCQBlAgUKbm93TGltaXRlZAkAZAIFCWlzc3VlVGltZQkAaAIFC1lFQVJfTUlMTElTBQljdXJQZXJpb2QFC1lFQVJfTUlMTElTBAVhdmFpbAkAZAIJAGQCBQJhMgUCYTEFAmEwBAdlZmZUaW1lAwkAZwIFAmEyBQVhdmFpbAkAZAIFDGxhc3RVc2VyVGltZQkAawMFC1lFQVJfTUlMTElTBQVhdmFpbAkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAgMJAGcCCQBkAgUCYTIFAmExBQVhdmFpbAkAZAIJAGQCBQlpc3N1ZVRpbWUJAGgCBQtZRUFSX01JTExJUwkAZQIFCWN1clBlcmlvZAABCQBrAwULWUVBUl9NSUxMSVMJAGUCBQVhdmFpbAUCYTIJAQ1kaXN0ckJ5UGVyaW9kAgUMaXNzdWVkQW1vdW50CQBlAgUJY3VyUGVyaW9kAAEJAGQCCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMFCWN1clBlcmlvZAkAawMFC1lFQVJfTUlMTElTCQBlAgkAZQIFBWF2YWlsBQJhMgUCYTEFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAlAoCBQVhdmFpbAUHZWZmVGltZQQNdXNlckF2YWlsYWJsZQgFCCR0MDc5MTE5Al8xBAtlZmZMYXN0VGltZQgFCCR0MDc5MTE5Al8yBA9hbW91bnRMZWZ0VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRFzdGFrZXJzQW10TGVmdEtleQAABAx1bnJvYmJlZFVzZXIDCQECIT0CCQCRAwIFA2VmZgUKaWR4VG90YWxGUAAACQBrAwUNdXNlckF2YWlsYWJsZQkAkQMCBQNlZmYFCWlkeFVzZXJGUAkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAQPbGFzdElzc3VlMTBUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwURd2xnSXNzdWUxMFRpbWVLZXkFEU5FV19TVEFLSU5HX1NUQVJUBA1pc3N1ZTEwQW1vdW50CQBrAwUHSVNTVUUxMAkAlgMBCQDMCAIJAGUCBQNub3cFD2xhc3RJc3N1ZTEwVGltZQkAzAgCAAAFA25pbAUGREFZX01TBBZtYXJrZXRpbmdJc3N1ZTEwQW1vdW50CQBrAwUNaXNzdWUxMEFtb3VudAURTUFSS0VUSU5HMTBfU0hBUkUFA002XwQRdGVhbUlzc3VlMTBBbW91bnQJAGsDBQ1pc3N1ZTEwQW1vdW50BQxURUFNMTBfU0hBUkUFA002XwQOdXNlcjEwSW50ZXJ2YWwJAJYDAQkAzAgCCQBlAgUDbm93CQCWAwEJAMwIAgURTkVXX1NUQUtJTkdfU1RBUlQJAMwIAgUMbGFzdFVzZXJUaW1lBQNuaWwJAMwIAgAABQNuaWwECnVzZXIxMHBhcnQDCQECIT0CCQCRAwIFA2VmZgUKaWR4VG90YWxGUAAACQBrAwkAawMJAGsDBQdJU1NVRTEwBQ51c2VyMTBJbnRlcnZhbAUGREFZX01TCQCRAwIFA2VmZgUJaWR4VXNlckZQCQCRAwIFA2VmZgUKaWR4VG90YWxGUAUPUExBWUVSUzEwX1NIQVJFBQNNNl8AAAQObmV3SXNzdWUxMFRpbWUJAJYDAQkAzAgCBRFORVdfU1RBS0lOR19TVEFSVAkAzAgCBQNub3cFA25pbAkAzAgCBQxpc3N1ZWRBbW91bnQJAMwIAgUGd2xnV2xnCQDMCAIJAGsDBQ10b3RhbEZ1bmRzVXNkBQNNOF8FDGlzc3VlZEFtb3VudAkAzAgCBQ10b3RhbEZ1bmRzVXNkCQDMCAIFB3Jlc3RVc2QJAMwIAgUJYWNyZXMyVXNkCQDMCAIFBndsZ1VzZAkAzAgCBQlwdXp6bGVVc2QJAMwIAgUJaXNzdWVUaW1lCQDMCAIFDGxhc3RUZWFtVGltZQkAzAgCBQl0ZWFtVG90YWwJAMwIAgUOdGVhbUFtb3VudExlZnQJAMwIAgUWdGVhbUFtb3VudEF2YWlsYWJsZU5vdwkAzAgCBQp0ZWFtV2xnb2xkCQDMCAIFCGFjdFRvdGFsCQDMCAIFDWFjdEFtb3VudExlZnQJAMwIAgUVYWN0QW1vdW50QXZhaWxhYmxlTm93CQDMCAIFCWFjdFdsZ29sZAkAzAgCBQljdXJQZXJpb2QJAMwIAgUPYW1vdW50TGVmdFRvdGFsCQDMCAIFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAzAgCBQxsYXN0VXNlclRpbWUJAMwIAgUPaW52ZXN0RnVuZFRvdGFsCQDMCAIFDHVucm9iYmVkVXNlcgkAzAgCBQtlZmZMYXN0VGltZQkAzAgCBQ1pc3N1ZTEwQW1vdW50CQDMCAIFFm1hcmtldGluZ0lzc3VlMTBBbW91bnQJAMwIAgURdGVhbUlzc3VlMTBBbW91bnQJAMwIAgUKdXNlcjEwcGFydAkAzAgCBQ5uZXdJc3N1ZTEwVGltZQUDbmlsAQ53YWxsZXRJbnRlcm5hbAEOdXNlckFkZHJlc3NPcHQEBGFkZHIJAKYIAQUOdXNlckFkZHJlc3NPcHQEB2JhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA7wcBCQEFdmFsdWUBBQRhZGRyCQEOQmFsYW5jZURldGFpbHMEAAAAAAAAAAAEC3VzZHRCYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAPAHAgkBBXZhbHVlAQUEYWRkcgULdXNkdEFzc2V0SWQAAAQNd2xnb2xkQmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDwBwIJAQV2YWx1ZQEFBGFkZHIFCndsZ0Fzc2V0SWQAAAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5hY3JlczJDb250cmFjdAkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQ51c2VyQWRkcmVzc09wdAUOdXNlckFkZHJlc3NPcHQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUOdXNlckFkZHJlc3NPcHQEBXJlZkJ5CQCdCAIFDmFjcmVzMkNvbnRyYWN0BQhyZWZCeUtleQQEcmVmcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5hY3JlczJDb250cmFjdAkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQ51c2VyQWRkcmVzc09wdAIABAhsYXN0VHhJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5hY3JlczJDb250cmFjdAkBEWtleUxhc3RUeElkQnlVc2VyAQUOdXNlckFkZHJlc3NPcHQCAAQMYWNyZXNCYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAPAHAgkBBXZhbHVlAQUEYWRkcgUMYWNyZXNBc3NldElkAAAEC3N0YWtlZEFjcmVzCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0CQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQ51c2VyQWRkcmVzc09wdAAABANsdmwJAQ9nZXRMZXZlbEJ5QWNyZXMBBQtzdGFrZWRBY3JlcwQCZnAJARBnZXRGYXJtaW5nUG93ZXJzAgUOdXNlckFkZHJlc3NPcHQFDmFjcmVzMkNvbnRyYWN0BA5hY3Jlc1RvTmV4dEx2bAMJAGcCBQNsdmwJAJADAQUKbGV2ZWxBY3JlcwAACQBlAgkAZAIJAJEDAgUKbGV2ZWxBY3JlcwUDbHZsAAEFC3N0YWtlZEFjcmVzCQDMCAIJAKwCAgISJXMlc19fY3VzdG9tTmFtZV9fBQpjdXN0b21OYW1lCQDMCAIJAKwCAgISJXMlc19fcmVmZXJyZWRCeV9fCQELdmFsdWVPckVsc2UCBQVyZWZCeQIACQDMCAIJAKwCAgIRJXMlc19fcmVmZXJyYWxzX18FBHJlZnMJAMwIAgkArAICAhAlcyVzX19sYXN0VHhJZF9fBQhsYXN0VHhJZAkAzAgCCQCsAgICFCVzJWRfX3dhdmVzQmFsYW5jZV9fCQCkAwEIBQdiYWxhbmNlCWF2YWlsYWJsZQkAzAgCCQCsAgICEyVzJWRfX3VzZHRCYWxhbmNlX18JAKQDAQULdXNkdEJhbGFuY2UJAMwIAgkArAICAhUlcyVkX193bGdvbGRCYWxhbmNlX18JAKQDAQUNd2xnb2xkQmFsYW5jZQkAzAgCCQCsAgICFCVzJWRfX2FjcmVzQmFsYW5jZV9fCQCkAwEFDGFjcmVzQmFsYW5jZQkAzAgCCQCsAgICEyVzJWRfX3N0YWtlZEFjcmVzX18JAKQDAQULc3Rha2VkQWNyZXMJAMwIAgkArAICAhIlcyVkX19jdXJyZW50THZsX18JAKQDAQUDbHZsCQDMCAIJAKwCAgIWJXMlZF9fYWNyZXNUb05leHRMdmxfXwkApAMBBQ5hY3Jlc1RvTmV4dEx2bAkAzAgCCQCsAgICGCVzJWRfX3VzZXJGYXJtaW5nUG93ZXJfXwkApAMBCQCRAwIFAmZwBQlpZHhVc2VyRlAJAMwIAgkArAICAhklcyVkX190b3RhbEZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUCZnAFCmlkeFRvdGFsRlAFA25pbAQBaQENY29uc3RydWN0b3JWMQEJY29udHJhY3RzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCgEKZGVzY3JpcHRvcgIDYWNjC2lnbm9yZWRJdGVtCQCsAgIFA2FjYwICJXMEBWRlc2NyCgACJGwFCWNvbnRyYWN0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZGVzY3JpcHRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5UmVzdENmZwAJALkJAgkAzAgCBQVkZXNjcgUJY29udHJhY3RzBQNTRVAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVJlc3QyQWRkcmVzcwAJAKUIAQUEdGhpcwUDbmlsAWkBEndhbGxldEluZm9SRUFET05MWQEOdXNlckFkZHJlc3NPcHQJAJQKAgUDbmlsCQEOd2FsbGV0SW50ZXJuYWwBBQ51c2VyQWRkcmVzc09wdAFpARZjb252ZXJzaW9uSW5mb1JFQURPTkxZAQ51c2VyQWRkcmVzc09wdAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ5hY3JlczJDb250cmFjdAUTb2xkQWNyZXNDb250cmFjdEtleQQLJHQwNDU0MjQ2NjQJAQxhc1R1cGxlMkludHMBCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIXdW5zdGFrZUFsbEFjcmVzUkVBRE9OTFkJAMwIAgUOdXNlckFkZHJlc3NPcHQFA25pbAUDbmlsBA11bnN0YWtlZEFjcmVzCAULJHQwNDU0MjQ2NjQCXzEEDGNsYWltZWRBY3JlcwgFCyR0MDQ1NDI0NjY0Al8yBAskdDA0NjY3NDgxNgkBDGFzVHVwbGU0SW50cwEJAPwHBAUOYWNyZXMyQ29udHJhY3QCFHVuc3Rha2VMYW5kc1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzT3B0BQNuaWwFA25pbAQPYWNyZXNGcm9tUGllY2VzCAULJHQwNDY2NzQ4MTYCXzEEDGFjcmVzRnJvbVJlcwgFCyR0MDQ2Njc0ODE2Al8yBAxhY3Jlc0Zyb21NYXQIBQskdDA0NjY3NDgxNgJfMwQNYWNyZXNGcm9tUHJvZAgFCyR0MDQ2Njc0ODE2Al80BBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUOdXNlckFkZHJlc3NPcHQCAAQLJHQwNDk5NDUyMTYDCQECIT0CBQtkdWNrQXNzZXRJZAIACQEMYXNUdXBsZTNJbnRzAQkA/AcEBRFvbGRTdGFraW5nQWRkcmVzcwITdW5zdGFrZUR1Y2tSRUFET05MWQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQ51c2VyQWRkcmVzc09wdAUDbmlsBQNuaWwJAJUKAwAAAAAAAAQQYWNyZXNGcm9tRHVja1JlcwgFCyR0MDQ5OTQ1MjE2Al8xBBBhY3Jlc0Zyb21EdWNrTWF0CAULJHQwNDk5NDUyMTYCXzIEEWFjcmVzRnJvbUR1Y2tQcm9kCAULJHQwNDk5NDUyMTYCXzMJAJQKAgUDbmlsCQDMCAIJAKwCAgIVJXMlZF9fdW5zdGFrZWRBY3Jlc19fCQCkAwEFDXVuc3Rha2VkQWNyZXMJAMwIAgkArAICAhQlcyVkX19jbGFpbWVkQWNyZXNfXwkApAMBBQxjbGFpbWVkQWNyZXMJAMwIAgkArAICAhclcyVkX19hY3Jlc0Zyb21QaWVjZXNfXwkApAMBBQ9hY3Jlc0Zyb21QaWVjZXMJAMwIAgkArAICAhQlcyVkX19hY3Jlc0Zyb21SZXNfXwkApAMBBQxhY3Jlc0Zyb21SZXMJAMwIAgkArAICAhQlcyVkX19hY3Jlc0Zyb21NYXRfXwkApAMBBQxhY3Jlc0Zyb21NYXQJAMwIAgkArAICAhUlcyVkX19hY3Jlc0Zyb21Qcm9kX18JAKQDAQUNYWNyZXNGcm9tUHJvZAkAzAgCCQCsAgICGCVzJWRfX2FjcmVzRnJvbUR1Y2tSZXNfXwkApAMBBRBhY3Jlc0Zyb21EdWNrUmVzCQDMCAIJAKwCAgIYJXMlZF9fYWNyZXNGcm9tRHVja01hdF9fCQCkAwEFEGFjcmVzRnJvbUR1Y2tNYXQJAMwIAgkArAICAhklcyVkX19hY3Jlc0Zyb21EdWNrUHJvZF9fCQCkAwEFEWFjcmVzRnJvbUR1Y2tQcm9kBQNuaWwBaQEQd2xnU3RhdHNSRUFET05MWQELdXNlckFkZHJPcHQECGN1clN0YXRzCQEMZ2V0V2xnU3RhdHMyBAULdXNlckFkZHJPcHQJAMwIAgUNcmVzdDJDb250cmFjdAkAzAgCBQ5hY3JlczJDb250cmFjdAkAzAgCBQt3bGdDb250cmFjdAkAzAgCBRJwdXp6bGVQb29sQ29udHJhY3QJAMwIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQNuaWwFC3VzZHRBc3NldElkAAAJAJQKAgUDbmlsCQDMCAIJAKwCAgIRJXMlZF9fd2xnQW1vdW50X18JAKQDAQkAkQMCBQhjdXJTdGF0cwULaXhXbGdBbW91bnQJAMwIAgkArAICAg4lcyVkX193bGdXbGdfXwkApAMBCQCRAwIFCGN1clN0YXRzBQhpeFdsZ1dsZwkAzAgCCQCsAgICECVzJWRfX3dsZ1ByaWNlX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUKaXhXbGdQcmljZQkAzAgCCQCsAgICESVzJWRfX3VzZHRGdW5kc19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFCml4V2xnRnVuZHMJAMwIAgkArAICAhQlcyVkX191c2R0QWN0aXZpdHlfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ1peFdsZ0FjdGl2aXR5CQDMCAIJAKwCAgITJXMlZF9fdXNkdFN0YWtpbmdfXwkApAMBCQCRAwIFCGN1clN0YXRzBQtpeFdsZ0FjcmVzMgkAzAgCCQCsAgICFSVzJWRfX3VzZHRBcmJpdHJhZ2VfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FyYml0cmFnZQkAzAgCCQCsAgICECVzJWRfX3VzZHRQb29sX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUJaXhXbGdQb29sCQDMCAIJAKwCAgIUJXMlZF9fd2xnSXNzdWVUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdJc3N1ZVRpbWUJAMwIAgkArAICAholcyVkX193bGdMYXN0VGVhbUFjdFRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRRpeFdsZ0xhc3RUZWFtQWN0VGltZQkAzAgCCQCsAgICFCVzJWRfX3dsZ1RlYW1Ub3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnVGVhbVRvdGFsCQDMCAIJAKwCAgIVJXMlZF9fd2xnVGVhbUFtTGVmdF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVGVhbUFtTGVmdAkAzAgCCQCsAgICGSVzJWRfX3dsZ1RlYW1BbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUTaXhXbGdUZWFtQW1BdmFpbE5vdwkAzAgCCQCsAgICFSVzJWRfX3dsZ1RlYW1XbGdvbGRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ9peFdsZ1RlYW1XbGdvbGQJAMwIAgkArAICAhMlcyVkX193bGdBY3RUb3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDWl4V2xnQWN0VG90YWwJAMwIAgkArAICAhQlcyVkX193bGdBY3RBbUxlZnRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdEFtTGVmdAkAzAgCCQCsAgICGCVzJWRfX3dsZ0FjdEFtQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRJpeFdsZ0FjdEFtQXZhaWxOb3cJAMwIAgkArAICAhQlcyVkX193bGdBY3RXbGdvbGRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdFdsZ29sZAkAzAgCCQCsAgICFCVzJWRfX3dsZ0N1clBlcmlvZF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnQ3VyUGVyaW9kCQDMCAIJAKwCAgIWJXMlZF9fd2xnQW1MZWZ0VG90YWxfXwkApAMBCQCRAwIFCGN1clN0YXRzBRBpeFdsZ0FtTGVmdFRvdGFsCQDMCAIJAKwCAgIgJXMlZF9fd2xnQ3VyUGVyaW9kRGlzdHJpYnV0aW9uX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUaaXhXbGdDdXJQZXJpb2REaXN0cmlidXRpb24JAMwIAgkArAICAhclcyVkX193bGdMYXN0VXNlclRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRFpeFdsZ0xhc3RVc2VyVGltZQkAzAgCCQCsAgICGiVzJWRfX3dsZ0ludmVzdEZ1bmRUb3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFWl4V2xnSW52ZXN0RnVuZEFtb3VudAkAzAgCCQCsAgICGSVzJWRfX3dsZ1VzZXJBbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUTaXhXbGdVc2VyQW1BdmFpbE5vdwkAzAgCCQCsAgICFiVzJWRfX3dsZ0VmZlVzZXJUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUQaXhXbGdFZmZVc2VyVGltZQkAzAgCCQCsAgICGiVzJWRfX3dsZ0lzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEml4V2xnSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICIyVzJWRfX3dsZ01hcmtldGluZ0lzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFG2l4V2xnTWFya2V0aW5nSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICHiVzJWRfX3dsZ1RlYW1Jc3N1ZTEwQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50CQDMCAIJAKwCAgIeJXMlZF9fd2xnVXNlcklzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVXNlcjEwcGFydAkAzAgCCQCsAgICGiVzJWRfX3dsZ0xhc3RJc3N1ZTEwVGltZV9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEGl4V2xnSXNzdWUxMFRpbWUFA25pbADq5VwS", "height": 3339686, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EPaYSMG7YzKz1HDkFALFPMjtnbAzt2TLnPSyDJBE7rW4 Next: FYK3Fp27r4ZKwRovrgG1AFJ6xnrU5rYAbzeCjK6HLKHi Diff:
OldNewDifferences
361361 let balance = if (isDefined(addr))
362362 then wavesBalance(value(addr))
363363 else BalanceDetails(0, 0, 0, 0)
364+ let usdtBalance = if (isDefined(addr))
365+ then assetBalance(value(addr), usdtAssetId)
366+ else 0
364367 let wlgoldBalance = if (isDefined(addr))
365368 then assetBalance(value(addr), wlgAssetId)
366369 else 0
378381 let acresToNextLvl = if ((lvl >= size(levelAcres)))
379382 then 0
380383 else ((levelAcres[lvl] + 1) - stakedAcres)
381-[("%s%s__customName__" + customName), ("%s%s__referredBy__" + valueOrElse(refBy, "")), ("%s%s__referrals__" + refs), ("%s%s__lastTxId__" + lastTxId), ("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__wlgoldBalance__" + toString(wlgoldBalance)), ("%s%d__acresBalance__" + toString(acresBalance)), ("%s%d__stakedAcres__" + toString(stakedAcres)), ("%s%d__currentLvl__" + toString(lvl)), ("%s%d__acresToNextLvl__" + toString(acresToNextLvl)), ("%s%d__userFarmingPower__" + toString(fp[idxUserFP])), ("%s%d__totalFarmingPower__" + toString(fp[idxTotalFP]))]
384+[("%s%s__customName__" + customName), ("%s%s__referredBy__" + valueOrElse(refBy, "")), ("%s%s__referrals__" + refs), ("%s%s__lastTxId__" + lastTxId), ("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__usdtBalance__" + toString(usdtBalance)), ("%s%d__wlgoldBalance__" + toString(wlgoldBalance)), ("%s%d__acresBalance__" + toString(acresBalance)), ("%s%d__stakedAcres__" + toString(stakedAcres)), ("%s%d__currentLvl__" + toString(lvl)), ("%s%d__acresToNextLvl__" + toString(acresToNextLvl)), ("%s%d__userFarmingPower__" + toString(fp[idxUserFP])), ("%s%d__totalFarmingPower__" + toString(fp[idxTotalFP]))]
382385 }
383386
384387
415418 @Callable(i)
416419 func conversionInfoREADONLY (userAddressOpt) = {
417420 let oldAcresAddress = addressFromStringValue(getStringValue(acres2Contract, oldAcresContractKey))
418- let $t043964518 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
419- let unstakedAcres = $t043964518._1
420- let claimedAcres = $t043964518._2
421- let $t045214670 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
422- let acresFromPieces = $t045214670._1
423- let acresFromRes = $t045214670._2
424- let acresFromMat = $t045214670._3
425- let acresFromProd = $t045214670._4
421+ let $t045424664 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
422+ let unstakedAcres = $t045424664._1
423+ let claimedAcres = $t045424664._2
424+ let $t046674816 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
425+ let acresFromPieces = $t046674816._1
426+ let acresFromRes = $t046674816._2
427+ let acresFromMat = $t046674816._3
428+ let acresFromProd = $t046674816._4
426429 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
427430 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(userAddressOpt)), "")
428- let $t048485070 = if ((duckAssetId != ""))
431+ let $t049945216 = if ((duckAssetId != ""))
429432 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckREADONLY", [duckAssetId, userAddressOpt], nil))
430433 else $Tuple3(0, 0, 0)
431- let acresFromDuckRes = $t048485070._1
432- let acresFromDuckMat = $t048485070._2
433- let acresFromDuckProd = $t048485070._3
434+ let acresFromDuckRes = $t049945216._1
435+ let acresFromDuckMat = $t049945216._2
436+ let acresFromDuckProd = $t049945216._3
434437 $Tuple2(nil, [("%s%d__unstakedAcres__" + toString(unstakedAcres)), ("%s%d__claimedAcres__" + toString(claimedAcres)), ("%s%d__acresFromPieces__" + toString(acresFromPieces)), ("%s%d__acresFromRes__" + toString(acresFromRes)), ("%s%d__acresFromMat__" + toString(acresFromMat)), ("%s%d__acresFromProd__" + toString(acresFromProd)), ("%s%d__acresFromDuckRes__" + toString(acresFromDuckRes)), ("%s%d__acresFromDuckMat__" + toString(acresFromDuckMat)), ("%s%d__acresFromDuckProd__" + toString(acresFromDuckProd))])
435438 }
436439
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let chain = take(drop(this.bytes, 1), 1)
77
88 let usdtAssetId = match chain {
99 case _ =>
1010 if ((base58'2W' == $match0))
1111 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1212 else if ((base58'2T' == $match0))
1313 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1414 else throw("Unknown chain")
1515 }
1616
1717 let defaultRest2AddressStr = match chain {
1818 case _ =>
1919 if ((base58'2W' == $match0))
2020 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
2121 else if ((base58'2T' == $match0))
2222 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
2323 else throw("Unknown chain")
2424 }
2525
2626 let oldStakingContractStr = match chain {
2727 case _ =>
2828 if ((base58'2W' == $match0))
2929 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
3030 else if ((base58'2T' == $match0))
3131 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
3232 else throw("Unknown chain")
3333 }
3434
3535 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
3636
3737
3838 let IdxCfgAcres2Dapp = 1
3939
4040 let IdxCfgWlgDapp = 2
4141
4242 let IdxCfgPuzzlePoolDapp = 4
4343
4444 let IdxCfgInvestFundDapp = 5
4545
4646 func keyRestCfg () = "%s__restConfig"
4747
4848
4949 func keyRest2Address () = "%s__rest2Addr"
5050
5151
5252 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
5353
5454
5555 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
5656
5757
5858 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
5959
6060 let rest2Cfg = readRestCfgOrFail(rest2Contract)
6161
6262 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
6363
6464 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
6565
6666 let puzzlePoolContract = getContractAddressOrFail(rest2Cfg, IdxCfgPuzzlePoolDapp)
6767
6868 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
6969
7070 let oldAcresContractKey = "oldAcresContract"
7171
7272 func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
7373
7474
7575 let wlgAssetIdKey = "wlg_assetId"
7676
7777 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
7878
7979 let acresAssetIdKey = "acresAssetId"
8080
8181 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
8282
8383 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
8484
8585
8686 func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
8787
8888
8989 func keyAddressRefBy (addr) = ("accRefBy_" + addr)
9090
9191
9292 func keyAddressReferrals (addr) = ("accReferrals_" + addr)
9393
9494
9595 func asTuple4Ints (val) = match val {
9696 case t: (Int, Int, Int, Int) =>
9797 t
9898 case _ =>
9999 throw("fail to cast into (Int, Int, Int, Int)")
100100 }
101101
102102
103103 func asTuple3Ints (val) = match val {
104104 case t: (Int, Int, Int) =>
105105 t
106106 case _ =>
107107 throw("fail to cast into (Int, Int, Int)")
108108 }
109109
110110
111111 func asTuple2Ints (val) = match val {
112112 case t: (Int, Int) =>
113113 t
114114 case _ =>
115115 throw("fail to cast into (Int, Int)")
116116 }
117117
118118
119119 let M6_ = 1000000
120120
121121 let M8_ = 100000000
122122
123123 let TEAM_SHARE = 200000
124124
125125 let ACTIVITY_SHARE = 100000
126126
127127 let PLAYER_SHARE = 400000
128128
129129 let YEAR_MILLIS = 31557600000
130130
131131 let DAY_MS = 86400000
132132
133133 let ISSUE10 = 1000000000
134134
135135 let PLAYERS10_SHARE = 800000
136136
137137 let MARKETING10_SHARE = 100000
138138
139139 let TEAM10_SHARE = 100000
140140
141141 let NEW_STAKING_START = 1727740800000
142142
143143 let teamAdrKey = "teamAddr"
144144
145145 let lastTeamTimKey = "lastClaimedTime_team"
146146
147147 let teamAmtLeftKey = "teamAmountLeft"
148148
149149 let lastActivitiesTimKey = "lastClaimedTime_activities"
150150
151151 let actAmtLeftKey = "activitiesAmountLeft"
152152
153153 let stakersAmtLeftKey = "stakersAmountLeft"
154154
155155 func keyLastClaimTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
156156
157157
158158 func distrByPeriod (issuedAmount,period) = fraction(issuedAmount, (PLAYER_SHARE * (period + 1)), (6 * M6_))
159159
160160
161161 let wlgIssue10TimeKey = "wlg_issue10Time"
162162
163163 let wlgIssueTimKey = "wlg_issueTime"
164164
165165 let wlgIssuedAmtKey = "wlg_issuedAmount"
166166
167167 let zbIssuedAmtKey = "zbill_issuedAmount"
168168
169169 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
170170
171171
172172 let totalFarmingPowerKey = "totalFarmingPower"
173173
174174 let dapp2Rest = 0
175175
176176 let dapp2Staking = 1
177177
178178 let dapp2Wlg = 2
179179
180180 let dapp2Puzzle = 3
181181
182182 let dapp2InvestFund = 4
183183
184184 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
185185
186186 func getLevelByAcres (acres) = {
187187 let acr = ((acres + 99999999) / M8_)
188188 func checker (acc,item) = if ((item >= acr))
189189 then acc
190190 else (acc + 1)
191191
192192 let $l = levelAcres
193193 let $s = size($l)
194194 let $acc0 = 0
195195 func $f0_1 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else checker($a, $l[$i])
198198
199199 func $f0_2 ($a,$i) = if (($i >= $s))
200200 then $a
201201 else throw("List size exceeds 10")
202202
203203 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
204204 }
205205
206206
207207 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
208208
209209
210210 func getFarmingPowers (userAddrStrOrEmpty,acres2Contract) = {
211211 let totalFP = valueOrElse(getInteger(acres2Contract, totalFarmingPowerKey), 0)
212212 let userAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddrStrOrEmpty)), 0)
213213 let userFP = getFarmingPowerByAcres(userAcres)
214214 [totalFP, userFP]
215215 }
216216
217217
218218 let idxTotalFP = 0
219219
220220 let idxUserFP = 1
221221
222222 let ixWlgAmount = 0
223223
224224 let ixWlgWlg = 1
225225
226226 let ixWlgPrice = 2
227227
228228 let ixWlgFunds = 3
229229
230230 let ixWlgActivity = 4
231231
232232 let ixWlgAcres2 = 5
233233
234234 let ixWlgArbitrage = 6
235235
236236 let ixWlgPool = 7
237237
238238 let ixWlgIssueTime = 8
239239
240240 let ixWlgLastTeamActTime = 9
241241
242242 let ixWlgTeamTotal = 10
243243
244244 let ixWlgTeamAmLeft = 11
245245
246246 let ixWlgTeamAmAvailNow = 12
247247
248248 let ixWlgTeamWlgold = 13
249249
250250 let ixWlgActTotal = 14
251251
252252 let ixWlgActAmLeft = 15
253253
254254 let ixWlgActAmAvailNow = 16
255255
256256 let ixWlgActWlgold = 17
257257
258258 let ixWlgCurPeriod = 18
259259
260260 let ixWlgAmLeftTotal = 19
261261
262262 let ixWlgCurPeriodDistribution = 20
263263
264264 let ixWlgLastUserTime = 21
265265
266266 let ixWlgInvestFundAmount = 22
267267
268268 let ixWlgUserAmAvailNow = 23
269269
270270 let ixWlgEffUserTime = 24
271271
272272 let ixWlgIssue10Amount = 25
273273
274274 let ixWlgMarketingIssue10Amount = 26
275275
276276 let ixWlgTeamIssue10Amount = 27
277277
278278 let ixWlgUser10part = 28
279279
280280 let ixWlgIssue10Time = 29
281281
282282 func getWlgStats2 (userAddrOpt,contracts,usdtId,usdtBalanceCorrection) = {
283283 let issuedAmount = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssuedAmtKey), "WLGOLD is not issued yet")
284284 let restUsd = assetBalance(contracts[dapp2Rest], usdtId)
285285 let wlgUsd = (assetBalance(contracts[dapp2Wlg], usdtId) - usdtBalanceCorrection)
286286 let puzzleUsd = assetBalance(contracts[dapp2Puzzle], usdtId)
287287 let acres2Usd = assetBalance(contracts[dapp2Staking], usdtId)
288288 let investFndContract = contracts[dapp2InvestFund]
289289 let investFundTotal = (assetBalance(investFndContract, usdtId) + valueOrElse(getInteger(investFndContract, zbIssuedAmtKey), 0))
290290 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
291291 let wlgId = valueOrErrorMessage(getBinary(contracts[dapp2Wlg], "wlg_assetId"), "Not initialized yet")
292292 let now = lastBlock.timestamp
293293 let issueTime = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssueTimKey), "Not initialized")
294294 let wlgWlg = assetBalance(contracts[dapp2Wlg], wlgId)
295295 let teamTotal = fraction(issuedAmount, TEAM_SHARE, M6_)
296296 let teamAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], teamAmtLeftKey), teamTotal)
297297 let lastTeamTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastTeamTimKey), issueTime)
298298 let teamAddr = addressFromStringValue(value(getString(contracts[dapp2Wlg], teamAdrKey)))
299299 let teamAmountAvailableNow = min([fraction(teamTotal, (now - lastTeamTime), (3 * YEAR_MILLIS)), teamAmountLeft])
300300 let teamWlgold = assetBalance(teamAddr, wlgId)
301301 let actTotal = fraction(issuedAmount, ACTIVITY_SHARE, M6_)
302302 let actAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], actAmtLeftKey), actTotal)
303303 let lastActivitiesTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastActivitiesTimKey), issueTime)
304304 let actAmountAvailableNow = min([fraction(actTotal, (now - lastActivitiesTime), (3 * YEAR_MILLIS)), actAmountLeft])
305305 let actWlgold = assetBalance(contracts[dapp2Rest], wlgId)
306306 let lastUserTime = valueOrElse(getInteger(contracts[dapp2Wlg], keyLastClaimTimeByUser(userAddrOpt)), issueTime)
307307 let lastUserPeriod = ((lastUserTime - issueTime) / YEAR_MILLIS)
308308 let nowLimited = min([now, (issueTime + (3 * YEAR_MILLIS))])
309309 let curPeriod = min([((now - issueTime) / YEAR_MILLIS), 2])
310310 let eff = getFarmingPowers(userAddrOpt, contracts[dapp2Staking])
311311 let curPeriodDistribution = distrByPeriod(issuedAmount, curPeriod)
312312 let $t079119 = if ((lastUserPeriod == curPeriod))
313313 then {
314314 let a0 = fraction(curPeriodDistribution, (nowLimited - lastUserTime), YEAR_MILLIS)
315315 let effTime = nowLimited
316316 $Tuple2(a0, effTime)
317317 }
318318 else if ((lastUserPeriod == (curPeriod - 1)))
319319 then {
320320 let a1 = fraction(distrByPeriod(issuedAmount, (curPeriod - 1)), ((issueTime + (YEAR_MILLIS * curPeriod)) - lastUserTime), YEAR_MILLIS)
321321 let a0 = fraction(curPeriodDistribution, (nowLimited - (issueTime + (YEAR_MILLIS * curPeriod))), YEAR_MILLIS)
322322 let avail = (a1 + a0)
323323 let effTime = if ((a1 >= avail))
324324 then (lastUserTime + fraction(YEAR_MILLIS, avail, distrByPeriod(issuedAmount, (curPeriod - 1))))
325325 else ((issueTime + (YEAR_MILLIS * curPeriod)) + fraction(YEAR_MILLIS, (avail - a1), curPeriodDistribution))
326326 $Tuple2(avail, effTime)
327327 }
328328 else {
329329 let a2 = fraction(distrByPeriod(issuedAmount, (curPeriod - 2)), ((issueTime + (YEAR_MILLIS * (curPeriod - 1))) - lastUserTime), YEAR_MILLIS)
330330 let a1 = distrByPeriod(issuedAmount, (curPeriod - 1))
331331 let a0 = fraction(curPeriodDistribution, (nowLimited - (issueTime + (YEAR_MILLIS * curPeriod))), YEAR_MILLIS)
332332 let avail = ((a2 + a1) + a0)
333333 let effTime = if ((a2 >= avail))
334334 then (lastUserTime + fraction(YEAR_MILLIS, avail, distrByPeriod(issuedAmount, (curPeriod - 2))))
335335 else if (((a2 + a1) >= avail))
336336 then ((issueTime + (YEAR_MILLIS * (curPeriod - 1))) + fraction(YEAR_MILLIS, (avail - a2), distrByPeriod(issuedAmount, (curPeriod - 1))))
337337 else ((issueTime + (YEAR_MILLIS * curPeriod)) + fraction(YEAR_MILLIS, ((avail - a2) - a1), curPeriodDistribution))
338338 $Tuple2(avail, effTime)
339339 }
340340 let userAvailable = $t079119._1
341341 let effLastTime = $t079119._2
342342 let amountLeftTotal = valueOrElse(getInteger(contracts[dapp2Wlg], stakersAmtLeftKey), 0)
343343 let unrobbedUser = if ((eff[idxTotalFP] != 0))
344344 then fraction(userAvailable, eff[idxUserFP], eff[idxTotalFP])
345345 else 0
346346 let lastIssue10Time = valueOrElse(getInteger(contracts[dapp2Wlg], wlgIssue10TimeKey), NEW_STAKING_START)
347347 let issue10Amount = fraction(ISSUE10, max([(now - lastIssue10Time), 0]), DAY_MS)
348348 let marketingIssue10Amount = fraction(issue10Amount, MARKETING10_SHARE, M6_)
349349 let teamIssue10Amount = fraction(issue10Amount, TEAM10_SHARE, M6_)
350350 let user10Interval = max([(now - max([NEW_STAKING_START, lastUserTime])), 0])
351351 let user10part = if ((eff[idxTotalFP] != 0))
352352 then fraction(fraction(fraction(ISSUE10, user10Interval, DAY_MS), eff[idxUserFP], eff[idxTotalFP]), PLAYERS10_SHARE, M6_)
353353 else 0
354354 let newIssue10Time = max([NEW_STAKING_START, now])
355355 [issuedAmount, wlgWlg, fraction(totalFundsUsd, M8_, issuedAmount), totalFundsUsd, restUsd, acres2Usd, wlgUsd, puzzleUsd, issueTime, lastTeamTime, teamTotal, teamAmountLeft, teamAmountAvailableNow, teamWlgold, actTotal, actAmountLeft, actAmountAvailableNow, actWlgold, curPeriod, amountLeftTotal, curPeriodDistribution, lastUserTime, investFundTotal, unrobbedUser, effLastTime, issue10Amount, marketingIssue10Amount, teamIssue10Amount, user10part, newIssue10Time]
356356 }
357357
358358
359359 func walletInternal (userAddressOpt) = {
360360 let addr = addressFromString(userAddressOpt)
361361 let balance = if (isDefined(addr))
362362 then wavesBalance(value(addr))
363363 else BalanceDetails(0, 0, 0, 0)
364+ let usdtBalance = if (isDefined(addr))
365+ then assetBalance(value(addr), usdtAssetId)
366+ else 0
364367 let wlgoldBalance = if (isDefined(addr))
365368 then assetBalance(value(addr), wlgAssetId)
366369 else 0
367370 let customName = valueOrElse(getString(acres2Contract, keyAddressToCustomName(userAddressOpt)), userAddressOpt)
368371 let refByKey = keyAddressRefBy(userAddressOpt)
369372 let refBy = getString(acres2Contract, refByKey)
370373 let refs = valueOrElse(getString(acres2Contract, keyAddressReferrals(userAddressOpt)), "")
371374 let lastTxId = valueOrElse(getString(acres2Contract, keyLastTxIdByUser(userAddressOpt)), "")
372375 let acresBalance = if (isDefined(addr))
373376 then assetBalance(value(addr), acresAssetId)
374377 else 0
375378 let stakedAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddressOpt)), 0)
376379 let lvl = getLevelByAcres(stakedAcres)
377380 let fp = getFarmingPowers(userAddressOpt, acres2Contract)
378381 let acresToNextLvl = if ((lvl >= size(levelAcres)))
379382 then 0
380383 else ((levelAcres[lvl] + 1) - stakedAcres)
381-[("%s%s__customName__" + customName), ("%s%s__referredBy__" + valueOrElse(refBy, "")), ("%s%s__referrals__" + refs), ("%s%s__lastTxId__" + lastTxId), ("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__wlgoldBalance__" + toString(wlgoldBalance)), ("%s%d__acresBalance__" + toString(acresBalance)), ("%s%d__stakedAcres__" + toString(stakedAcres)), ("%s%d__currentLvl__" + toString(lvl)), ("%s%d__acresToNextLvl__" + toString(acresToNextLvl)), ("%s%d__userFarmingPower__" + toString(fp[idxUserFP])), ("%s%d__totalFarmingPower__" + toString(fp[idxTotalFP]))]
384+[("%s%s__customName__" + customName), ("%s%s__referredBy__" + valueOrElse(refBy, "")), ("%s%s__referrals__" + refs), ("%s%s__lastTxId__" + lastTxId), ("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__usdtBalance__" + toString(usdtBalance)), ("%s%d__wlgoldBalance__" + toString(wlgoldBalance)), ("%s%d__acresBalance__" + toString(acresBalance)), ("%s%d__stakedAcres__" + toString(stakedAcres)), ("%s%d__currentLvl__" + toString(lvl)), ("%s%d__acresToNextLvl__" + toString(acresToNextLvl)), ("%s%d__userFarmingPower__" + toString(fp[idxUserFP])), ("%s%d__totalFarmingPower__" + toString(fp[idxTotalFP]))]
382385 }
383386
384387
385388 @Callable(i)
386389 func constructorV1 (contracts) = if ((i.caller != this))
387390 then throw("permissions denied")
388391 else {
389392 func descriptor (acc,ignoredItem) = (acc + "%s")
390393
391394 let descr = {
392395 let $l = contracts
393396 let $s = size($l)
394397 let $acc0 = ""
395398 func $f0_1 ($a,$i) = if (($i >= $s))
396399 then $a
397400 else descriptor($a, $l[$i])
398401
399402 func $f0_2 ($a,$i) = if (($i >= $s))
400403 then $a
401404 else throw("List size exceeds 10")
402405
403406 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
404407 }
405408 [StringEntry(keyRestCfg(), makeString(descr :: contracts, SEP)), StringEntry(keyRest2Address(), toString(this))]
406409 }
407410
408411
409412
410413 @Callable(i)
411414 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
412415
413416
414417
415418 @Callable(i)
416419 func conversionInfoREADONLY (userAddressOpt) = {
417420 let oldAcresAddress = addressFromStringValue(getStringValue(acres2Contract, oldAcresContractKey))
418- let $t043964518 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
419- let unstakedAcres = $t043964518._1
420- let claimedAcres = $t043964518._2
421- let $t045214670 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
422- let acresFromPieces = $t045214670._1
423- let acresFromRes = $t045214670._2
424- let acresFromMat = $t045214670._3
425- let acresFromProd = $t045214670._4
421+ let $t045424664 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
422+ let unstakedAcres = $t045424664._1
423+ let claimedAcres = $t045424664._2
424+ let $t046674816 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
425+ let acresFromPieces = $t046674816._1
426+ let acresFromRes = $t046674816._2
427+ let acresFromMat = $t046674816._3
428+ let acresFromProd = $t046674816._4
426429 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
427430 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(userAddressOpt)), "")
428- let $t048485070 = if ((duckAssetId != ""))
431+ let $t049945216 = if ((duckAssetId != ""))
429432 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckREADONLY", [duckAssetId, userAddressOpt], nil))
430433 else $Tuple3(0, 0, 0)
431- let acresFromDuckRes = $t048485070._1
432- let acresFromDuckMat = $t048485070._2
433- let acresFromDuckProd = $t048485070._3
434+ let acresFromDuckRes = $t049945216._1
435+ let acresFromDuckMat = $t049945216._2
436+ let acresFromDuckProd = $t049945216._3
434437 $Tuple2(nil, [("%s%d__unstakedAcres__" + toString(unstakedAcres)), ("%s%d__claimedAcres__" + toString(claimedAcres)), ("%s%d__acresFromPieces__" + toString(acresFromPieces)), ("%s%d__acresFromRes__" + toString(acresFromRes)), ("%s%d__acresFromMat__" + toString(acresFromMat)), ("%s%d__acresFromProd__" + toString(acresFromProd)), ("%s%d__acresFromDuckRes__" + toString(acresFromDuckRes)), ("%s%d__acresFromDuckMat__" + toString(acresFromDuckMat)), ("%s%d__acresFromDuckProd__" + toString(acresFromDuckProd))])
435438 }
436439
437440
438441
439442 @Callable(i)
440443 func wlgStatsREADONLY (userAddrOpt) = {
441444 let curStats = getWlgStats2(userAddrOpt, [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
442445 $Tuple2(nil, [("%s%d__wlgAmount__" + toString(curStats[ixWlgAmount])), ("%s%d__wlgWlg__" + toString(curStats[ixWlgWlg])), ("%s%d__wlgPrice__" + toString(curStats[ixWlgPrice])), ("%s%d__usdtFunds__" + toString(curStats[ixWlgFunds])), ("%s%d__usdtActivity__" + toString(curStats[ixWlgActivity])), ("%s%d__usdtStaking__" + toString(curStats[ixWlgAcres2])), ("%s%d__usdtArbitrage__" + toString(curStats[ixWlgArbitrage])), ("%s%d__usdtPool__" + toString(curStats[ixWlgPool])), ("%s%d__wlgIssueTime__" + toString(curStats[ixWlgIssueTime])), ("%s%d__wlgLastTeamActTime__" + toString(curStats[ixWlgLastTeamActTime])), ("%s%d__wlgTeamTotal__" + toString(curStats[ixWlgTeamTotal])), ("%s%d__wlgTeamAmLeft__" + toString(curStats[ixWlgTeamAmLeft])), ("%s%d__wlgTeamAmAvailNow__" + toString(curStats[ixWlgTeamAmAvailNow])), ("%s%d__wlgTeamWlgold__" + toString(curStats[ixWlgTeamWlgold])), ("%s%d__wlgActTotal__" + toString(curStats[ixWlgActTotal])), ("%s%d__wlgActAmLeft__" + toString(curStats[ixWlgActAmLeft])), ("%s%d__wlgActAmAvailNow__" + toString(curStats[ixWlgActAmAvailNow])), ("%s%d__wlgActWlgold__" + toString(curStats[ixWlgActWlgold])), ("%s%d__wlgCurPeriod__" + toString(curStats[ixWlgCurPeriod])), ("%s%d__wlgAmLeftTotal__" + toString(curStats[ixWlgAmLeftTotal])), ("%s%d__wlgCurPeriodDistribution__" + toString(curStats[ixWlgCurPeriodDistribution])), ("%s%d__wlgLastUserTime__" + toString(curStats[ixWlgLastUserTime])), ("%s%d__wlgInvestFundTotal__" + toString(curStats[ixWlgInvestFundAmount])), ("%s%d__wlgUserAmAvailNow__" + toString(curStats[ixWlgUserAmAvailNow])), ("%s%d__wlgEffUserTime__" + toString(curStats[ixWlgEffUserTime])), ("%s%d__wlgIssue10AvailNow__" + toString(curStats[ixWlgIssue10Amount])), ("%s%d__wlgMarketingIssue10AvailNow__" + toString(curStats[ixWlgMarketingIssue10Amount])), ("%s%d__wlgTeamIssue10AvailNow__" + toString(curStats[ixWlgTeamIssue10Amount])), ("%s%d__wlgUserIssue10AvailNow__" + toString(curStats[ixWlgUser10part])), ("%s%d__wlgLastIssue10Time__" + toString(curStats[ixWlgIssue10Time]))])
443446 }
444447
445448

github/deemru/w8io/169f3d6 
59.87 ms