tx · DRzConXymnWdqEnH49UajVnV4tRy1to1PKL2SXRjDrVQ

3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv:  -0.01600000 Waves

2024.11.11 01:54 [3365978] smart account 3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv > SELF 0.00000000 Waves

{ "type": 13, "id": "DRzConXymnWdqEnH49UajVnV4tRy1to1PKL2SXRjDrVQ", "fee": 1600000, "feeAssetId": null, "timestamp": 1731279319521, "version": 2, "chainId": 84, "sender": "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv", "senderPublicKey": "2fNSk5gmWbXBDTkSYSKd66xSgVvAYzrJnP9YSAFNvTwC", "proofs": [ "5GJFmU9fC9WiGbPRfKwjcfTef6Jiaxar1hrukByf3NtXAQm6qnCrubemKadUvkFndMTg6Vxrs2oexyb3YZERAB1W" ], "script": "base64:BgIbCAISAwoBGBIDCgEIEgMKAQgSAwoBCBIDCgEIbAADU0VQAgJfXwAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRndZdGE4YmlFejMxenBlRmU1REpLOHdFNXRyU3BRVkY4AwkAAAIBAVQFByRtYXRjaDACIzNON1V1WWFyNjI2NFA1OEZCaFZXS1BRQWg0WXVhMmhnbmd2CQACAQINVW5rbm93biBjaGFpbgAVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUExuY1h0UzFVODNENmNRYkZEM0g4ckJIUExnenhTRktaMQMJAAACAQFUBQckbWF0Y2gwAiMzTkRDeUJHNXE4NUp1YVJpaWdVZUV0YWlueWpDUVQzWHBabQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABBJZHhDZmdBY3JlczJEYXBwAAEADUlkeENmZ1dsZ0RhcHAAAgAUSWR4Q2ZnUHV6emxlUG9vbERhcHAABAAUSWR4Q2ZnSW52ZXN0RnVuZERhcHAABQEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ9rZXlSZXN0MkFkZHJlc3MAAg0lc19fcmVzdDJBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIIcmVzdDJDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQhyZXN0MkNmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADXJlc3QyQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVJlc3QyQWRkcmVzcwAFFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIACHJlc3QyQ2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQ1yZXN0MkNvbnRyYWN0AA5hY3JlczJDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRBJZHhDZmdBY3JlczJEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBQ1JZHhDZmdXbGdEYXBwABJwdXp6bGVQb29sQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUUSWR4Q2ZnUHV6emxlUG9vbERhcHAAEmludmVzdEZ1bmRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAATb2xkQWNyZXNDb250cmFjdEtleQIQb2xkQWNyZXNDb250cmFjdAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5hY3JlczJDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEMYXNUdXBsZTRJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAhQoSW50LCBJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECJmZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50LCBJbnQpAQxhc1R1cGxlM0ludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACDyhJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECIWZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50KQEMYXNUdXBsZTJJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgooSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIcZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50KQADTTZfAMCEPQADTThfAIDC1y8AClRFQU1fU0hBUkUAwJoMAA5BQ1RJVklUWV9TSEFSRQCgjQYADFBMQVlFUl9TSEFSRQCAtRgAC1lFQVJfTUlMTElTAICG68d1AAZEQVlfTVMAgLiZKQAKREFZX0JMT0NLUwCgCwAHSVNTVUUxMACAlOvcAwAPUExBWUVSUzEwX1NIQVJFAIDqMAARTUFSS0VUSU5HMTBfU0hBUkUAoI0GAAxURUFNMTBfU0hBUkUAoI0GABFORVdfU1RBS0lOR19TVEFSVACA87jCsTIACnRlYW1BZHJLZXkCCHRlYW1BZGRyAA5sYXN0VGVhbVRpbUtleQIUbGFzdENsYWltZWRUaW1lX3RlYW0ADnRlYW1BbXRMZWZ0S2V5Ag50ZWFtQW1vdW50TGVmdAAUbGFzdEFjdGl2aXRpZXNUaW1LZXkCGmxhc3RDbGFpbWVkVGltZV9hY3Rpdml0aWVzAA1hY3RBbXRMZWZ0S2V5AhRhY3Rpdml0aWVzQW1vdW50TGVmdAARc3Rha2Vyc0FtdExlZnRLZXkCEXN0YWtlcnNBbW91bnRMZWZ0ARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQRhZGRyCQCsAgICFGxhc3RDbGFpbWVkVGltZVVzZXJfBQRhZGRyAQ1kaXN0ckJ5UGVyaW9kAgxpc3N1ZWRBbW91bnQGcGVyaW9kCQBrAwUMaXNzdWVkQW1vdW50CQBoAgUMUExBWUVSX1NIQVJFCQBkAgUGcGVyaW9kAAEJAGgCAAYFA002XwARd2xnSXNzdWUxMFRpbWVLZXkCD3dsZ19pc3N1ZTEwVGltZQAOd2xnSXNzdWVUaW1LZXkCDXdsZ19pc3N1ZVRpbWUAD3dsZ0lzc3VlZEFtdEtleQIQd2xnX2lzc3VlZEFtb3VudAAOemJJc3N1ZWRBbXRLZXkCEnpiaWxsX2lzc3VlZEFtb3VudAEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyABR0b3RhbEZhcm1pbmdQb3dlcktleQIRdG90YWxGYXJtaW5nUG93ZXIACWRhcHAyUmVzdAAAAAxkYXBwMlN0YWtpbmcAAQAIZGFwcDJXbGcAAgALZGFwcDJQdXp6bGUAAwAPZGFwcDJJbnZlc3RGdW5kAAQACmxldmVsQWNyZXMJAMwIAgAACQDMCAIACgkAzAgCABQJAMwIAgAoCQDMCAIAUAkAzAgCAJYBCQDMCAIA+gEJAMwIAgCQAwkAzAgCALwFCQDMCAIA6AcFA25pbAEPZ2V0TGV2ZWxCeUFjcmVzAQVhY3JlcwQDYWNyCQBpAgkAZAIFBWFjcmVzAP/B1y8FA004XwoBB2NoZWNrZXICA2FjYwRpdGVtAwkAZwIFBGl0ZW0FA2FjcgUDYWNjCQBkAgUDYWNjAAEKAAIkbAUKbGV2ZWxBY3JlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFYWNyZXMJAGgCCQBoAgUFYWNyZXMAFAkAZAIJAQ9nZXRMZXZlbEJ5QWNyZXMBBQVhY3JlcwAEARBnZXRGYXJtaW5nUG93ZXJzAhJ1c2VyQWRkclN0ck9yRW1wdHkOYWNyZXMyQ29udHJhY3QEB3RvdGFsRlAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QFFHRvdGFsRmFybWluZ1Bvd2VyS2V5AAAECXVzZXJBY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUSdXNlckFkZHJTdHJPckVtcHR5AAAEBnVzZXJGUAkBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBQl1c2VyQWNyZXMJAMwIAgUHdG90YWxGUAkAzAgCBQZ1c2VyRlAFA25pbAEKa2V5VXNlckJldAEEYWRkcgkArAICAgh1c2VyQmV0XwUEYWRkcgEOa2V5VXNlclRpY2tldHMBBGFkZHIJAKwCAgIMdXNlclRpY2tldHNfBQRhZGRyAA9rZXlUb3RhbFRpY2tldHMCDHRvdGFsVGlja2V0cwEKd2lubmluZ0JldAEDZGF5CQBqAgkAsQkBCQEFdmFsdWUBCAkBBXZhbHVlAQkA7QcBCQBoAgUDZGF5BQpEQVlfQkxPQ0tTA3ZyZgAEAAppZHhUb3RhbEZQAAAACWlkeFVzZXJGUAABAAtpeFdsZ0Ftb3VudAAAAAhpeFdsZ1dsZwABAAppeFdsZ1ByaWNlAAIACml4V2xnRnVuZHMAAwANaXhXbGdBY3Rpdml0eQAEAAtpeFdsZ0FjcmVzMgAFAA5peFdsZ0FyYml0cmFnZQAGAAlpeFdsZ1Bvb2wABwAOaXhXbGdJc3N1ZVRpbWUACAAUaXhXbGdMYXN0VGVhbUFjdFRpbWUACQAOaXhXbGdUZWFtVG90YWwACgAPaXhXbGdUZWFtQW1MZWZ0AAsAE2l4V2xnVGVhbUFtQXZhaWxOb3cADAAPaXhXbGdUZWFtV2xnb2xkAA0ADWl4V2xnQWN0VG90YWwADgAOaXhXbGdBY3RBbUxlZnQADwASaXhXbGdBY3RBbUF2YWlsTm93ABAADml4V2xnQWN0V2xnb2xkABEADml4V2xnQ3VyUGVyaW9kABIAEGl4V2xnQW1MZWZ0VG90YWwAEwAaaXhXbGdDdXJQZXJpb2REaXN0cmlidXRpb24AFAARaXhXbGdMYXN0VXNlclRpbWUAFQAVaXhXbGdJbnZlc3RGdW5kQW1vdW50ABYAE2l4V2xnVXNlckFtQXZhaWxOb3cAFwAQaXhXbGdFZmZVc2VyVGltZQAYABJpeFdsZ0lzc3VlMTBBbW91bnQAGQAbaXhXbGdNYXJrZXRpbmdJc3N1ZTEwQW1vdW50ABoAFml4V2xnVGVhbUlzc3VlMTBBbW91bnQAGwAPaXhXbGdVc2VyMTBwYXJ0ABwAEGl4V2xnSXNzdWUxMFRpbWUAHQAWaXhXbGdUb3RhbEZhcm1pbmdQb3dlcgAeAQxnZXRXbGdTdGF0czIEC3VzZXJBZGRyT3B0CWNvbnRyYWN0cwZ1c2R0SWQVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAxpc3N1ZWRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFD3dsZ0lzc3VlZEFtdEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAdyZXN0VXNkCQDwBwIJAJEDAgUJY29udHJhY3RzBQlkYXBwMlJlc3QFBnVzZHRJZAQGd2xnVXNkCQBlAgkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBnVzZHRJZAUVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAlwdXp6bGVVc2QJAPAHAgkAkQMCBQljb250cmFjdHMFC2RhcHAyUHV6emxlBQZ1c2R0SWQECWFjcmVzMlVzZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nBQZ1c2R0SWQEEWludmVzdEZuZENvbnRyYWN0CQCRAwIFCWNvbnRyYWN0cwUPZGFwcDJJbnZlc3RGdW5kBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEWludmVzdEZuZENvbnRyYWN0BQZ1c2R0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgURaW52ZXN0Rm5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDXRvdGFsRnVuZHNVc2QJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAQFd2xnSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcCC3dsZ19hc3NldElkAhNOb3QgaW5pdGlhbGl6ZWQgeWV0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlpc3N1ZVRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDndsZ0lzc3VlVGltS2V5Ag9Ob3QgaW5pdGlhbGl6ZWQEBndsZ1dsZwkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBXdsZ0lkBAl0ZWFtVG90YWwJAGsDBQxpc3N1ZWRBbW91bnQFClRFQU1fU0hBUkUFA002XwQOdGVhbUFtb3VudExlZnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ50ZWFtQW10TGVmdEtleQUJdGVhbVRvdGFsBAxsYXN0VGVhbVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ5sYXN0VGVhbVRpbUtleQUJaXNzdWVUaW1lBAh0ZWFtQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAnQgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFCnRlYW1BZHJLZXkEFnRlYW1BbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUJdGVhbVRvdGFsCQBlAgUDbm93BQxsYXN0VGVhbVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTCQDMCAIFDnRlYW1BbW91bnRMZWZ0BQNuaWwECnRlYW1XbGdvbGQJAPAHAgUIdGVhbUFkZHIFBXdsZ0lkBAhhY3RUb3RhbAkAawMFDGlzc3VlZEFtb3VudAUOQUNUSVZJVFlfU0hBUkUFA002XwQNYWN0QW1vdW50TGVmdAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDWFjdEFtdExlZnRLZXkFCGFjdFRvdGFsBBJsYXN0QWN0aXZpdGllc1RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRRsYXN0QWN0aXZpdGllc1RpbUtleQUJaXNzdWVUaW1lBBVhY3RBbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUIYWN0VG90YWwJAGUCBQNub3cFEmxhc3RBY3Rpdml0aWVzVGltZQkAaAIAAwULWUVBUl9NSUxMSVMJAMwIAgUNYWN0QW1vdW50TGVmdAUDbmlsBAlhY3RXbGdvbGQJAPAHAgkAkQMCBQljb250cmFjdHMFCWRhcHAyUmVzdAUFd2xnSWQEDGxhc3RVc2VyVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcJARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQULdXNlckFkZHJPcHQFCWlzc3VlVGltZQQObGFzdFVzZXJQZXJpb2QJAGkCCQBlAgUMbGFzdFVzZXJUaW1lBQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTBApub3dMaW1pdGVkCQCXAwEJAMwIAgUDbm93CQDMCAIJAGQCBQlpc3N1ZVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTBQNuaWwECWN1clBlcmlvZAkAlwMBCQDMCAIJAGkCCQBlAgUDbm93BQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTCQDMCAIAAgUDbmlsBANlZmYJARBnZXRGYXJtaW5nUG93ZXJzAgULdXNlckFkZHJPcHQJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcEFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQFCWN1clBlcmlvZAQNcHJldlBlcmlvZEVuZAkAZAIFCWlzc3VlVGltZQkAaAIFC1lFQVJfTUlMTElTBQljdXJQZXJpb2QEEXByZXZQcmV2UGVyaW9kRW5kCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMJAGUCBQljdXJQZXJpb2QAAQQCYTAJAGsDBRVjdXJQZXJpb2REaXN0cmlidXRpb24JAGUCBQpub3dMaW1pdGVkBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBA11c2VyQXZhaWxhYmxlAwkAAAIFDmxhc3RVc2VyUGVyaW9kBQljdXJQZXJpb2QFAmEwAwkAAAIFDmxhc3RVc2VyUGVyaW9kCQBlAgUJY3VyUGVyaW9kAAEEAmExCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZQIFDXByZXZQZXJpb2RFbmQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMJAGQCBQJhMQUCYTAEAmEyCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAgkAZQIFEXByZXZQcmV2UGVyaW9kRW5kBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBAJhMQkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZAIJAGQCBQJhMgUCYTEFAmEwBA9hbW91bnRMZWZ0VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRFzdGFrZXJzQW10TGVmdEtleQAABAp1c2VyQW1vdW50AwkBAiE9AgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAkAawMFDXVzZXJBdmFpbGFibGUJAJEDAgUDZWZmBQlpZHhVc2VyRlAJAJEDAgUDZWZmBQppZHhUb3RhbEZQAAAED2xhc3RJc3N1ZTEwVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFEXdsZ0lzc3VlMTBUaW1lS2V5BRFORVdfU1RBS0lOR19TVEFSVAQNaXNzdWUxMEFtb3VudAkAawMFB0lTU1VFMTAJAJYDAQkAzAgCCQBlAgUDbm93BQ9sYXN0SXNzdWUxMFRpbWUJAMwIAgAABQNuaWwFBkRBWV9NUwQWbWFya2V0aW5nSXNzdWUxMEFtb3VudAkAawMFDWlzc3VlMTBBbW91bnQFEU1BUktFVElORzEwX1NIQVJFBQNNNl8EEXRlYW1Jc3N1ZTEwQW1vdW50CQBrAwUNaXNzdWUxMEFtb3VudAUMVEVBTTEwX1NIQVJFBQNNNl8EDnVzZXIxMEludGVydmFsCQCWAwEJAMwIAgkAZQIFA25vdwkAlgMBCQDMCAIFEU5FV19TVEFLSU5HX1NUQVJUCQDMCAIFDGxhc3RVc2VyVGltZQUDbmlsCQDMCAIAAAUDbmlsBAp1c2VyMTBwYXJ0AwkBAiE9AgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAkAawMJAGsDCQBrAwUHSVNTVUUxMAUOdXNlcjEwSW50ZXJ2YWwFBkRBWV9NUwkAkQMCBQNlZmYFCWlkeFVzZXJGUAkAkQMCBQNlZmYFCmlkeFRvdGFsRlAFD1BMQVlFUlMxMF9TSEFSRQUDTTZfAAAEDm5ld0lzc3VlMTBUaW1lCQCWAwEJAMwIAgURTkVXX1NUQUtJTkdfU1RBUlQJAMwIAgUDbm93BQNuaWwJAMwIAgUMaXNzdWVkQW1vdW50CQDMCAIFBndsZ1dsZwkAzAgCCQBrAwUNdG90YWxGdW5kc1VzZAUDTThfBQxpc3N1ZWRBbW91bnQJAMwIAgUNdG90YWxGdW5kc1VzZAkAzAgCBQdyZXN0VXNkCQDMCAIFCWFjcmVzMlVzZAkAzAgCBQZ3bGdVc2QJAMwIAgUJcHV6emxlVXNkCQDMCAIFCWlzc3VlVGltZQkAzAgCBQxsYXN0VGVhbVRpbWUJAMwIAgUJdGVhbVRvdGFsCQDMCAIFDnRlYW1BbW91bnRMZWZ0CQDMCAIFFnRlYW1BbW91bnRBdmFpbGFibGVOb3cJAMwIAgUKdGVhbVdsZ29sZAkAzAgCBQhhY3RUb3RhbAkAzAgCBQ1hY3RBbW91bnRMZWZ0CQDMCAIFFWFjdEFtb3VudEF2YWlsYWJsZU5vdwkAzAgCBQlhY3RXbGdvbGQJAMwIAgUJY3VyUGVyaW9kCQDMCAIFD2Ftb3VudExlZnRUb3RhbAkAzAgCBRVjdXJQZXJpb2REaXN0cmlidXRpb24JAMwIAgUMbGFzdFVzZXJUaW1lCQDMCAIFD2ludmVzdEZ1bmRUb3RhbAkAzAgCBQp1c2VyQW1vdW50CQDMCAIFCm5vd0xpbWl0ZWQJAMwIAgUNaXNzdWUxMEFtb3VudAkAzAgCBRZtYXJrZXRpbmdJc3N1ZTEwQW1vdW50CQDMCAIFEXRlYW1Jc3N1ZTEwQW1vdW50CQDMCAIFCnVzZXIxMHBhcnQJAMwIAgUObmV3SXNzdWUxMFRpbWUJAMwIAgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAFA25pbAEOd2FsbGV0SW50ZXJuYWwBDnVzZXJBZGRyZXNzT3B0BARhZGRyCQCmCAEFDnVzZXJBZGRyZXNzT3B0BAdiYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAO8HAQkBBXZhbHVlAQUEYWRkcgkBDkJhbGFuY2VEZXRhaWxzBAAAAAAAAAAABAt1c2R0QmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDwBwIJAQV2YWx1ZQEFBGFkZHIFC3VzZHRBc3NldElkAAAEDXdsZ29sZEJhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA8AcCCQEFdmFsdWUBBQRhZGRyBQp3bGdBc3NldElkAAAECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUOdXNlckFkZHJlc3NPcHQFDnVzZXJBZGRyZXNzT3B0BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDnVzZXJBZGRyZXNzT3B0BAVyZWZCeQkAnQgCBQ5hY3JlczJDb250cmFjdAUIcmVmQnlLZXkEBHJlZnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUOdXNlckFkZHJlc3NPcHQCAAQIbGFzdFR4SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARFrZXlMYXN0VHhJZEJ5VXNlcgEFDnVzZXJBZGRyZXNzT3B0AgAEDGFjcmVzQmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDwBwIJAQV2YWx1ZQEFBGFkZHIFDGFjcmVzQXNzZXRJZAAABAtzdGFrZWRBY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUOdXNlckFkZHJlc3NPcHQAAAQDbHZsCQEPZ2V0TGV2ZWxCeUFjcmVzAQULc3Rha2VkQWNyZXMEAmZwCQEQZ2V0RmFybWluZ1Bvd2VycwIFDnVzZXJBZGRyZXNzT3B0BQ5hY3JlczJDb250cmFjdAQOYWNyZXNUb05leHRMdmwDCQBnAgUDbHZsCQCQAwEFCmxldmVsQWNyZXMAAAkAZQIJAGQCCQBoAgkAkQMCBQpsZXZlbEFjcmVzBQNsdmwFA004XwABBQtzdGFrZWRBY3JlcwkAzAgCCQCsAgICEiVzJXNfX2N1c3RvbU5hbWVfXwUKY3VzdG9tTmFtZQkAzAgCCQCsAgICEiVzJXNfX3JlZmVycmVkQnlfXwkBC3ZhbHVlT3JFbHNlAgUFcmVmQnkCAAkAzAgCCQCsAgICESVzJXNfX3JlZmVycmFsc19fBQRyZWZzCQDMCAIJAKwCAgIQJXMlc19fbGFzdFR4SWRfXwUIbGFzdFR4SWQJAMwIAgkArAICAhQlcyVkX193YXZlc0JhbGFuY2VfXwkApAMBCAUHYmFsYW5jZQlhdmFpbGFibGUJAMwIAgkArAICAhMlcyVkX191c2R0QmFsYW5jZV9fCQCkAwEFC3VzZHRCYWxhbmNlCQDMCAIJAKwCAgIVJXMlZF9fd2xnb2xkQmFsYW5jZV9fCQCkAwEFDXdsZ29sZEJhbGFuY2UJAMwIAgkArAICAhQlcyVkX19hY3Jlc0JhbGFuY2VfXwkApAMBBQxhY3Jlc0JhbGFuY2UJAMwIAgkArAICAhMlcyVkX19zdGFrZWRBY3Jlc19fCQCkAwEFC3N0YWtlZEFjcmVzCQDMCAIJAKwCAgISJXMlZF9fY3VycmVudEx2bF9fCQCkAwEFA2x2bAkAzAgCCQCsAgICFiVzJWRfX2FjcmVzVG9OZXh0THZsX18JAKQDAQUOYWNyZXNUb05leHRMdmwJAMwIAgkArAICAhglcyVkX191c2VyRmFybWluZ1Bvd2VyX18JAKQDAQkAkQMCBQJmcAUJaWR4VXNlckZQCQDMCAIJAKwCAgIZJXMlZF9fdG90YWxGYXJtaW5nUG93ZXJfXwkApAMBCQCRAwIFAmZwBQppZHhUb3RhbEZQBQNuaWwFAWkBDWNvbnN0cnVjdG9yVjEBCWNvbnRyYWN0cwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEnBlcm1pc3Npb25zIGRlbmllZAoBCmRlc2NyaXB0b3ICA2FjYwtpZ25vcmVkSXRlbQkArAICBQNhY2MCAiVzBAVkZXNjcgoAAiRsBQljb250cmFjdHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmRlc2NyaXB0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleVJlc3RDZmcACQC5CQIJAMwIAgUFZGVzY3IFCWNvbnRyYWN0cwUDU0VQCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlSZXN0MkFkZHJlc3MACQClCAEFBHRoaXMFA25pbAFpARJ3YWxsZXRJbmZvUkVBRE9OTFkBDnVzZXJBZGRyZXNzT3B0CQCUCgIFA25pbAkBDndhbGxldEludGVybmFsAQUOdXNlckFkZHJlc3NPcHQBaQEWY29udmVyc2lvbkluZm9SRUFET05MWQEOdXNlckFkZHJlc3NPcHQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUOYWNyZXMyQ29udHJhY3QFE29sZEFjcmVzQ29udHJhY3RLZXkECyR0MDQ1NDg0NjcwCQEMYXNUdXBsZTJJbnRzAQkA/AcEBQ9vbGRBY3Jlc0FkZHJlc3MCF3Vuc3Rha2VBbGxBY3Jlc1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzT3B0BQNuaWwFA25pbAQNdW5zdGFrZWRBY3JlcwgFCyR0MDQ1NDg0NjcwAl8xBAxjbGFpbWVkQWNyZXMIBQskdDA0NTQ4NDY3MAJfMgQLJHQwNDY3MzQ4MjIJAQxhc1R1cGxlNEludHMBCQD8BwQFDmFjcmVzMkNvbnRyYWN0AhR1bnN0YWtlTGFuZHNSRUFET05MWQkAzAgCBQ51c2VyQWRkcmVzc09wdAUDbmlsBQNuaWwED2FjcmVzRnJvbVBpZWNlcwgFCyR0MDQ2NzM0ODIyAl8xBAxhY3Jlc0Zyb21SZXMIBQskdDA0NjczNDgyMgJfMgQMYWNyZXNGcm9tTWF0CAULJHQwNDY3MzQ4MjICXzMEDWFjcmVzRnJvbVByb2QIBQskdDA0NjczNDgyMgJfNAQRb2xkU3Rha2luZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFW9sZFN0YWtpbmdDb250cmFjdFN0cgQLZHVja0Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgURb2xkU3Rha2luZ0FkZHJlc3MJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFDnVzZXJBZGRyZXNzT3B0AgAECyR0MDUwMDA1MjIyAwkBAiE9AgULZHVja0Fzc2V0SWQCAAkBDGFzVHVwbGUzSW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VEdWNrUkVBRE9OTFkJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUOdXNlckFkZHJlc3NPcHQFA25pbAUDbmlsCQCVCgMAAAAAAAAEEGFjcmVzRnJvbUR1Y2tSZXMIBQskdDA1MDAwNTIyMgJfMQQQYWNyZXNGcm9tRHVja01hdAgFCyR0MDUwMDA1MjIyAl8yBBFhY3Jlc0Zyb21EdWNrUHJvZAgFCyR0MDUwMDA1MjIyAl8zCQCUCgIFA25pbAkAzAgCCQCsAgICFSVzJWRfX3Vuc3Rha2VkQWNyZXNfXwkApAMBBQ11bnN0YWtlZEFjcmVzCQDMCAIJAKwCAgIUJXMlZF9fY2xhaW1lZEFjcmVzX18JAKQDAQUMY2xhaW1lZEFjcmVzCQDMCAIJAKwCAgIXJXMlZF9fYWNyZXNGcm9tUGllY2VzX18JAKQDAQUPYWNyZXNGcm9tUGllY2VzCQDMCAIJAKwCAgIUJXMlZF9fYWNyZXNGcm9tUmVzX18JAKQDAQUMYWNyZXNGcm9tUmVzCQDMCAIJAKwCAgIUJXMlZF9fYWNyZXNGcm9tTWF0X18JAKQDAQUMYWNyZXNGcm9tTWF0CQDMCAIJAKwCAgIVJXMlZF9fYWNyZXNGcm9tUHJvZF9fCQCkAwEFDWFjcmVzRnJvbVByb2QJAMwIAgkArAICAhglcyVkX19hY3Jlc0Zyb21EdWNrUmVzX18JAKQDAQUQYWNyZXNGcm9tRHVja1JlcwkAzAgCCQCsAgICGCVzJWRfX2FjcmVzRnJvbUR1Y2tNYXRfXwkApAMBBRBhY3Jlc0Zyb21EdWNrTWF0CQDMCAIJAKwCAgIZJXMlZF9fYWNyZXNGcm9tRHVja1Byb2RfXwkApAMBBRFhY3Jlc0Zyb21EdWNrUHJvZAUDbmlsAWkBEHdsZ1N0YXRzUkVBRE9OTFkBC3VzZXJBZGRyT3B0BAhjdXJTdGF0cwkBDGdldFdsZ1N0YXRzMgQFC3VzZXJBZGRyT3B0CQDMCAIFDXJlc3QyQ29udHJhY3QJAMwIAgUOYWNyZXMyQ29udHJhY3QJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUScHV6emxlUG9vbENvbnRyYWN0CQDMCAIFEmludmVzdEZ1bmRDb250cmFjdAUDbmlsBQt1c2R0QXNzZXRJZAAACQCUCgIFA25pbAkAzAgCCQCsAgICESVzJWRfX3dsZ0Ftb3VudF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFC2l4V2xnQW1vdW50CQDMCAIJAKwCAgIOJXMlZF9fd2xnV2xnX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUIaXhXbGdXbGcJAMwIAgkArAICAhAlcyVkX193bGdQcmljZV9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFCml4V2xnUHJpY2UJAMwIAgkArAICAhElcyVkX191c2R0RnVuZHNfXwkApAMBCQCRAwIFCGN1clN0YXRzBQppeFdsZ0Z1bmRzCQDMCAIJAKwCAgIUJXMlZF9fdXNkdEFjdGl2aXR5X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUNaXhXbGdBY3Rpdml0eQkAzAgCCQCsAgICEyVzJWRfX3VzZHRTdGFraW5nX18JAKQDAQkAkQMCBQhjdXJTdGF0cwULaXhXbGdBY3JlczIJAMwIAgkArAICAhUlcyVkX191c2R0QXJiaXRyYWdlX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdBcmJpdHJhZ2UJAMwIAgkArAICAhAlcyVkX191c2R0UG9vbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFCWl4V2xnUG9vbAkAzAgCCQCsAgICFCVzJWRfX3dsZ0lzc3VlVGltZV9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnSXNzdWVUaW1lCQDMCAIJAKwCAgIaJXMlZF9fd2xnTGFzdFRlYW1BY3RUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUUaXhXbGdMYXN0VGVhbUFjdFRpbWUJAMwIAgkArAICAhQlcyVkX193bGdUZWFtVG90YWxfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ1RlYW1Ub3RhbAkAzAgCCQCsAgICFSVzJWRfX3dsZ1RlYW1BbUxlZnRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ9peFdsZ1RlYW1BbUxlZnQJAMwIAgkArAICAhklcyVkX193bGdUZWFtQW1BdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFE2l4V2xnVGVhbUFtQXZhaWxOb3cJAMwIAgkArAICAhUlcyVkX193bGdUZWFtV2xnb2xkX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUPaXhXbGdUZWFtV2xnb2xkCQDMCAIJAKwCAgITJXMlZF9fd2xnQWN0VG90YWxfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ1peFdsZ0FjdFRvdGFsCQDMCAIJAKwCAgIUJXMlZF9fd2xnQWN0QW1MZWZ0X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdBY3RBbUxlZnQJAMwIAgkArAICAhglcyVkX193bGdBY3RBbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUSaXhXbGdBY3RBbUF2YWlsTm93CQDMCAIJAKwCAgIUJXMlZF9fd2xnQWN0V2xnb2xkX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdBY3RXbGdvbGQJAMwIAgkArAICAhQlcyVkX193bGdDdXJQZXJpb2RfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0N1clBlcmlvZAkAzAgCCQCsAgICFiVzJWRfX3dsZ0FtTGVmdFRvdGFsX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUQaXhXbGdBbUxlZnRUb3RhbAkAzAgCCQCsAgICICVzJWRfX3dsZ0N1clBlcmlvZERpc3RyaWJ1dGlvbl9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFGml4V2xnQ3VyUGVyaW9kRGlzdHJpYnV0aW9uCQDMCAIJAKwCAgIXJXMlZF9fd2xnTGFzdFVzZXJUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwURaXhXbGdMYXN0VXNlclRpbWUJAMwIAgkArAICAholcyVkX193bGdJbnZlc3RGdW5kVG90YWxfXwkApAMBCQCRAwIFCGN1clN0YXRzBRVpeFdsZ0ludmVzdEZ1bmRBbW91bnQJAMwIAgkArAICAhklcyVkX193bGdVc2VyQW1BdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFE2l4V2xnVXNlckFtQXZhaWxOb3cJAMwIAgkArAICAhYlcyVkX193bGdFZmZVc2VyVGltZV9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEGl4V2xnRWZmVXNlclRpbWUJAMwIAgkArAICAholcyVkX193bGdJc3N1ZTEwQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRJpeFdsZ0lzc3VlMTBBbW91bnQJAMwIAgkArAICAiMlcyVkX193bGdNYXJrZXRpbmdJc3N1ZTEwQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRtpeFdsZ01hcmtldGluZ0lzc3VlMTBBbW91bnQJAMwIAgkArAICAh4lcyVkX193bGdUZWFtSXNzdWUxMEF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUWaXhXbGdUZWFtSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICHiVzJWRfX3dsZ1VzZXJJc3N1ZTEwQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ9peFdsZ1VzZXIxMHBhcnQJAMwIAgkArAICAholcyVkX193bGdMYXN0SXNzdWUxMFRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRBpeFdsZ0lzc3VlMTBUaW1lCQDMCAIJAKwCAgIcJXMlZF9fd2xnVG90YWxGYXJtaW5nUG93ZXJfXwkApAMBCQCRAwIFCGN1clN0YXRzBRZpeFdsZ1RvdGFsRmFybWluZ1Bvd2VyBQNuaWwBaQEUbG90dGVyeVN0YXRzUkVBRE9OTFkBC3VzZXJBZGRyT3B0BAV0b2RheQkAaQIFBmhlaWdodAUKREFZX0JMT0NLUwQIdXNlcnNCZXQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgULd2xnQ29udHJhY3QJAQprZXlVc2VyQmV0AQULdXNlckFkZHJPcHQCAAkAlAoCBQNuaWwJAMwIAgkArAICAhQlcyVkX190b3RhbFRpY2tldHNfXwkApAMBCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0BQ9rZXlUb3RhbFRpY2tldHMAAAkAzAgCCQCsAgICEyVzJWRfX3VzZXJUaWNrZXRzX18JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBDmtleVVzZXJUaWNrZXRzAQULdXNlckFkZHJPcHQAAAkAzAgCCQCsAgICFSVzJWRfX2Jsb2NrY2hhaW5EYXlfXwkApAMBBQV0b2RheQkAzAgCCQCsAgICGCVzJWRfX2Jsb2NrY2hhaW5NaW51dGVfXwkApAMBCQBqAgUGaGVpZ2h0BQpEQVlfQkxPQ0tTCQDMCAIJAKwCAgIXJXMlZF9fd2lubmluZ0JldFRvZGF5X18JAKQDAQkBCndpbm5pbmdCZXQBBQV0b2RheQkAzAgCCQCsAgICECVzJXNfX3VzZXJzQmV0X18FCHVzZXJzQmV0BQNuaWwA2GrIZg==", "height": 3365978, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4wZ5xcUtxiW5q938YbfEeAp5sqbz59JcGzJve6E211sD Next: xsjLWP5SgtDKb6xuCRC3n8NX3TDb77Q6yYtBsGLgZZ5 Diff:
OldNewDifferences
140140
141141 let TEAM10_SHARE = 100000
142142
143-let NEW_STAKING_START = 1727740800000
143+let NEW_STAKING_START = 1731279600000
144144
145145 let teamAdrKey = "teamAddr"
146146
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 DAY_BLOCKS = 1440
134134
135135 let ISSUE10 = 1000000000
136136
137137 let PLAYERS10_SHARE = 800000
138138
139139 let MARKETING10_SHARE = 100000
140140
141141 let TEAM10_SHARE = 100000
142142
143-let NEW_STAKING_START = 1727740800000
143+let NEW_STAKING_START = 1731279600000
144144
145145 let teamAdrKey = "teamAddr"
146146
147147 let lastTeamTimKey = "lastClaimedTime_team"
148148
149149 let teamAmtLeftKey = "teamAmountLeft"
150150
151151 let lastActivitiesTimKey = "lastClaimedTime_activities"
152152
153153 let actAmtLeftKey = "activitiesAmountLeft"
154154
155155 let stakersAmtLeftKey = "stakersAmountLeft"
156156
157157 func keyLastClaimTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
158158
159159
160160 func distrByPeriod (issuedAmount,period) = fraction(issuedAmount, (PLAYER_SHARE * (period + 1)), (6 * M6_))
161161
162162
163163 let wlgIssue10TimeKey = "wlg_issue10Time"
164164
165165 let wlgIssueTimKey = "wlg_issueTime"
166166
167167 let wlgIssuedAmtKey = "wlg_issuedAmount"
168168
169169 let zbIssuedAmtKey = "zbill_issuedAmount"
170170
171171 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
172172
173173
174174 let totalFarmingPowerKey = "totalFarmingPower"
175175
176176 let dapp2Rest = 0
177177
178178 let dapp2Staking = 1
179179
180180 let dapp2Wlg = 2
181181
182182 let dapp2Puzzle = 3
183183
184184 let dapp2InvestFund = 4
185185
186186 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
187187
188188 func getLevelByAcres (acres) = {
189189 let acr = ((acres + 99999999) / M8_)
190190 func checker (acc,item) = if ((item >= acr))
191191 then acc
192192 else (acc + 1)
193193
194194 let $l = levelAcres
195195 let $s = size($l)
196196 let $acc0 = 0
197197 func $f0_1 ($a,$i) = if (($i >= $s))
198198 then $a
199199 else checker($a, $l[$i])
200200
201201 func $f0_2 ($a,$i) = if (($i >= $s))
202202 then $a
203203 else throw("List size exceeds 10")
204204
205205 $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)
206206 }
207207
208208
209209 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
210210
211211
212212 func getFarmingPowers (userAddrStrOrEmpty,acres2Contract) = {
213213 let totalFP = valueOrElse(getInteger(acres2Contract, totalFarmingPowerKey), 0)
214214 let userAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddrStrOrEmpty)), 0)
215215 let userFP = getFarmingPowerByAcres(userAcres)
216216 [totalFP, userFP]
217217 }
218218
219219
220220 func keyUserBet (addr) = ("userBet_" + addr)
221221
222222
223223 func keyUserTickets (addr) = ("userTickets_" + addr)
224224
225225
226226 let keyTotalTickets = "totalTickets"
227227
228228 func winningBet (day) = (toInt(value(value(blockInfoByHeight((day * DAY_BLOCKS))).vrf)) % 4)
229229
230230
231231 let idxTotalFP = 0
232232
233233 let idxUserFP = 1
234234
235235 let ixWlgAmount = 0
236236
237237 let ixWlgWlg = 1
238238
239239 let ixWlgPrice = 2
240240
241241 let ixWlgFunds = 3
242242
243243 let ixWlgActivity = 4
244244
245245 let ixWlgAcres2 = 5
246246
247247 let ixWlgArbitrage = 6
248248
249249 let ixWlgPool = 7
250250
251251 let ixWlgIssueTime = 8
252252
253253 let ixWlgLastTeamActTime = 9
254254
255255 let ixWlgTeamTotal = 10
256256
257257 let ixWlgTeamAmLeft = 11
258258
259259 let ixWlgTeamAmAvailNow = 12
260260
261261 let ixWlgTeamWlgold = 13
262262
263263 let ixWlgActTotal = 14
264264
265265 let ixWlgActAmLeft = 15
266266
267267 let ixWlgActAmAvailNow = 16
268268
269269 let ixWlgActWlgold = 17
270270
271271 let ixWlgCurPeriod = 18
272272
273273 let ixWlgAmLeftTotal = 19
274274
275275 let ixWlgCurPeriodDistribution = 20
276276
277277 let ixWlgLastUserTime = 21
278278
279279 let ixWlgInvestFundAmount = 22
280280
281281 let ixWlgUserAmAvailNow = 23
282282
283283 let ixWlgEffUserTime = 24
284284
285285 let ixWlgIssue10Amount = 25
286286
287287 let ixWlgMarketingIssue10Amount = 26
288288
289289 let ixWlgTeamIssue10Amount = 27
290290
291291 let ixWlgUser10part = 28
292292
293293 let ixWlgIssue10Time = 29
294294
295295 let ixWlgTotalFarmingPower = 30
296296
297297 func getWlgStats2 (userAddrOpt,contracts,usdtId,usdtBalanceCorrection) = {
298298 let issuedAmount = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssuedAmtKey), "WLGOLD is not issued yet")
299299 let restUsd = assetBalance(contracts[dapp2Rest], usdtId)
300300 let wlgUsd = (assetBalance(contracts[dapp2Wlg], usdtId) - usdtBalanceCorrection)
301301 let puzzleUsd = assetBalance(contracts[dapp2Puzzle], usdtId)
302302 let acres2Usd = assetBalance(contracts[dapp2Staking], usdtId)
303303 let investFndContract = contracts[dapp2InvestFund]
304304 let investFundTotal = (assetBalance(investFndContract, usdtId) + valueOrElse(getInteger(investFndContract, zbIssuedAmtKey), 0))
305305 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
306306 let wlgId = valueOrErrorMessage(getBinary(contracts[dapp2Wlg], "wlg_assetId"), "Not initialized yet")
307307 let now = lastBlock.timestamp
308308 let issueTime = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssueTimKey), "Not initialized")
309309 let wlgWlg = assetBalance(contracts[dapp2Wlg], wlgId)
310310 let teamTotal = fraction(issuedAmount, TEAM_SHARE, M6_)
311311 let teamAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], teamAmtLeftKey), teamTotal)
312312 let lastTeamTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastTeamTimKey), issueTime)
313313 let teamAddr = addressFromStringValue(value(getString(contracts[dapp2Wlg], teamAdrKey)))
314314 let teamAmountAvailableNow = min([fraction(teamTotal, (now - lastTeamTime), (3 * YEAR_MILLIS)), teamAmountLeft])
315315 let teamWlgold = assetBalance(teamAddr, wlgId)
316316 let actTotal = fraction(issuedAmount, ACTIVITY_SHARE, M6_)
317317 let actAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], actAmtLeftKey), actTotal)
318318 let lastActivitiesTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastActivitiesTimKey), issueTime)
319319 let actAmountAvailableNow = min([fraction(actTotal, (now - lastActivitiesTime), (3 * YEAR_MILLIS)), actAmountLeft])
320320 let actWlgold = assetBalance(contracts[dapp2Rest], wlgId)
321321 let lastUserTime = valueOrElse(getInteger(contracts[dapp2Wlg], keyLastClaimTimeByUser(userAddrOpt)), issueTime)
322322 let lastUserPeriod = ((lastUserTime - issueTime) / YEAR_MILLIS)
323323 let nowLimited = min([now, (issueTime + (3 * YEAR_MILLIS))])
324324 let curPeriod = min([((now - issueTime) / YEAR_MILLIS), 2])
325325 let eff = getFarmingPowers(userAddrOpt, contracts[dapp2Staking])
326326 let curPeriodDistribution = distrByPeriod(issuedAmount, curPeriod)
327327 let prevPeriodEnd = (issueTime + (YEAR_MILLIS * curPeriod))
328328 let prevPrevPeriodEnd = (issueTime + (YEAR_MILLIS * (curPeriod - 1)))
329329 let a0 = fraction(curPeriodDistribution, (nowLimited - lastUserTime), YEAR_MILLIS)
330330 let userAvailable = if ((lastUserPeriod == curPeriod))
331331 then a0
332332 else if ((lastUserPeriod == (curPeriod - 1)))
333333 then {
334334 let a1 = fraction(distrByPeriod(issuedAmount, (curPeriod - 1)), (prevPeriodEnd - lastUserTime), YEAR_MILLIS)
335335 (a1 + a0)
336336 }
337337 else {
338338 let a2 = fraction(distrByPeriod(issuedAmount, (curPeriod - 2)), (prevPrevPeriodEnd - lastUserTime), YEAR_MILLIS)
339339 let a1 = distrByPeriod(issuedAmount, (curPeriod - 1))
340340 ((a2 + a1) + a0)
341341 }
342342 let amountLeftTotal = valueOrElse(getInteger(contracts[dapp2Wlg], stakersAmtLeftKey), 0)
343343 let userAmount = 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, userAmount, nowLimited, issue10Amount, marketingIssue10Amount, teamIssue10Amount, user10part, newIssue10Time, eff[idxTotalFP]]
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)
364364 let usdtBalance = if (isDefined(addr))
365365 then assetBalance(value(addr), usdtAssetId)
366366 else 0
367367 let wlgoldBalance = if (isDefined(addr))
368368 then assetBalance(value(addr), wlgAssetId)
369369 else 0
370370 let customName = valueOrElse(getString(acres2Contract, keyAddressToCustomName(userAddressOpt)), userAddressOpt)
371371 let refByKey = keyAddressRefBy(userAddressOpt)
372372 let refBy = getString(acres2Contract, refByKey)
373373 let refs = valueOrElse(getString(acres2Contract, keyAddressReferrals(userAddressOpt)), "")
374374 let lastTxId = valueOrElse(getString(acres2Contract, keyLastTxIdByUser(userAddressOpt)), "")
375375 let acresBalance = if (isDefined(addr))
376376 then assetBalance(value(addr), acresAssetId)
377377 else 0
378378 let stakedAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddressOpt)), 0)
379379 let lvl = getLevelByAcres(stakedAcres)
380380 let fp = getFarmingPowers(userAddressOpt, acres2Contract)
381381 let acresToNextLvl = if ((lvl >= size(levelAcres)))
382382 then 0
383383 else (((levelAcres[lvl] * M8_) + 1) - stakedAcres)
384384 [("%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]))]
385385 }
386386
387387
388388 @Callable(i)
389389 func constructorV1 (contracts) = if ((i.caller != this))
390390 then throw("permissions denied")
391391 else {
392392 func descriptor (acc,ignoredItem) = (acc + "%s")
393393
394394 let descr = {
395395 let $l = contracts
396396 let $s = size($l)
397397 let $acc0 = ""
398398 func $f0_1 ($a,$i) = if (($i >= $s))
399399 then $a
400400 else descriptor($a, $l[$i])
401401
402402 func $f0_2 ($a,$i) = if (($i >= $s))
403403 then $a
404404 else throw("List size exceeds 10")
405405
406406 $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)
407407 }
408408 [StringEntry(keyRestCfg(), makeString(descr :: contracts, SEP)), StringEntry(keyRest2Address(), toString(this))]
409409 }
410410
411411
412412
413413 @Callable(i)
414414 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
415415
416416
417417
418418 @Callable(i)
419419 func conversionInfoREADONLY (userAddressOpt) = {
420420 let oldAcresAddress = addressFromStringValue(getStringValue(acres2Contract, oldAcresContractKey))
421421 let $t045484670 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
422422 let unstakedAcres = $t045484670._1
423423 let claimedAcres = $t045484670._2
424424 let $t046734822 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
425425 let acresFromPieces = $t046734822._1
426426 let acresFromRes = $t046734822._2
427427 let acresFromMat = $t046734822._3
428428 let acresFromProd = $t046734822._4
429429 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
430430 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(userAddressOpt)), "")
431431 let $t050005222 = if ((duckAssetId != ""))
432432 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckREADONLY", [duckAssetId, userAddressOpt], nil))
433433 else $Tuple3(0, 0, 0)
434434 let acresFromDuckRes = $t050005222._1
435435 let acresFromDuckMat = $t050005222._2
436436 let acresFromDuckProd = $t050005222._3
437437 $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))])
438438 }
439439
440440
441441
442442 @Callable(i)
443443 func wlgStatsREADONLY (userAddrOpt) = {
444444 let curStats = getWlgStats2(userAddrOpt, [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
445445 $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])), ("%s%d__wlgTotalFarmingPower__" + toString(curStats[ixWlgTotalFarmingPower]))])
446446 }
447447
448448
449449
450450 @Callable(i)
451451 func lotteryStatsREADONLY (userAddrOpt) = {
452452 let today = (height / DAY_BLOCKS)
453453 let usersBet = valueOrElse(getString(wlgContract, keyUserBet(userAddrOpt)), "")
454454 $Tuple2(nil, [("%s%d__totalTickets__" + toString(valueOrElse(getInteger(wlgContract, keyTotalTickets), 0))), ("%s%d__userTickets__" + toString(valueOrElse(getInteger(wlgContract, keyUserTickets(userAddrOpt)), 0))), ("%s%d__blockchainDay__" + toString(today)), ("%s%d__blockchainMinute__" + toString((height % DAY_BLOCKS))), ("%s%d__winningBetToday__" + toString(winningBet(today))), ("%s%s__usersBet__" + usersBet)])
455455 }
456456
457457

github/deemru/w8io/169f3d6 
60.21 ms