tx · BRm8bE6438nAGhZAQ9FmCE6t2bXYfQXTVxQsvkpZsFQu

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.02300000 Waves

2022.12.06 09:10 [2348100] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "BRm8bE6438nAGhZAQ9FmCE6t2bXYfQXTVxQsvkpZsFQu", "fee": 2300000, "feeAssetId": null, "timestamp": 1670307051999, "version": 1, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "4B6uvFS8mdjLKZoeE3hbhpnbA6MNN2J1udmB4fxaKY2Yf4Fc3P9Qvehfd51bYLaYvDjSU9kiSXzvYDZnDL28Dyg" ], "script": "base64:BgLnJQgCEggKBggIAQEBCBIFCgMBCAISAwoBARIDCgEBEgQKAggIEgQKAggIEgMKAQgSAwoBCBIECgIIARIAEgMKAQgSACIDU0VQIgZTQ0FMRTgiBU1VTFQ4Ig5QT09MV0VJR0hUTVVMVCIEc3RyZiIHYWRkcmVzcyIDa2V5IgNpb3oiA2lvZCIKZGVmYXVsdFZhbCIDaW9mIgNhYnMiA3ZhbCIDYWFsIgckbWF0Y2gwIgp2YWxBbnlMeXN0IgJhaSIGdmFsSW50IhtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MiHnJlZmVycmFsc0NvbnRyYWN0QWRkcmVzc09yRmFpbCIWa2V5UmVmZXJyYWxQcm9ncmFtTmFtZSIacmVmZXJyYWxQcm9ncmFtTmFtZURlZmF1bHQiE3JlZmVycmFsUHJvZ3JhbU5hbWUiEWtleUZhY3RvcnlBZGRyZXNzIhhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAiGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAiFElkeEZhY3RvcnlDZmdJZG9EYXBwIhVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAiGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAiFUlkeEZhY3RvcnlDZmdSZXN0RGFwcCIZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcCIUSWR4RmFjdG9yeUNmZ0Rhb0RhcHAiGklkeEZhY3RvcnlDZmdNYXJrZXRpbmdEYXBwIhpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcCIWSWR4RmFjdG9yeUNmZ0JpcmRzRGFwcCINa2V5RmFjdG9yeUNmZyIaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmciCmxwQXNzZXRTdHIiEGtleUZhY3RvcnlMcExpc3QiJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzIhRrZXlGYWN0b3J5UG9vbFdlaWdodCIPY29udHJhY3RBZGRyZXNzIhtrZXlGYWN0b3J5UG9vbFdlaWdodEhpc3RvcnkiC3Bvb2xBZGRyZXNzIgNudW0iGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbCIKcmVhZExwTGlzdCIUcmVhZEZhY3RvcnlDZmdPckZhaWwiB2ZhY3RvcnkiGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbCIKZmFjdG9yeUNmZyIYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsIhdnZXRTdGFraW5nQWRkcmVzc09yRmFpbCIZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbCITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudCIha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50IhVrZXlFbWlzc2lvblN0YXJ0QmxvY2siG2tleUVtaXNzaW9uRHVyYXRpb25JbkJsb2NrcyITa2V5RW1pc3Npb25FbmRCbG9jayINa2V5TmV4dFBlcmlvZCIfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodCINSWR4Q2ZnQXNzZXRJZCITSWR4Q2ZnTWluTG9ja0Ftb3VudCIVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uIhVJZHhDZmdNYXhMb2NrRHVyYXRpb24iEklkeENmZ01hdGhDb250cmFjdCIJa2V5Q29uZmlnIhVyZWFkQ29uZmlnQXJyYXlPckZhaWwiDG1hdGhDb250cmFjdCINZm9ybWF0Q29uZmlnUyIHYXNzZXRJZCINbWluTG9ja0Ftb3VudCIPbWluTG9ja0R1cmF0aW9uIg9tYXhMb2NrRHVyYXRpb24iDGZvcm1hdENvbmZpZyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiDklkeExvY2tVc2VyTnVtIg1JZHhMb2NrQW1vdW50IgxJZHhMb2NrU3RhcnQiD0lkeExvY2tEdXJhdGlvbiINSWR4TG9ja1BhcmFtSyINSWR4TG9ja1BhcmFtQiITa2V5TG9ja1BhcmFtc1JlY29yZCILdXNlckFkZHJlc3MiGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsIhdmb3JtYXRMb2NrUGFyYW1zUmVjb3JkUyIHdXNlck51bSIGYW1vdW50IgVzdGFydCIIZHVyYXRpb24iBnBhcmFtSyIGcGFyYW1CIhBsYXN0VXBkVGltZXN0YW1wIglnd3hBbW91bnQiFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQiDmtleU5leHRVc2VyTnVtIhJrZXlVc2VyMk51bU1hcHBpbmciEmtleU51bTJVc2VyTWFwcGluZyIWa2V5TG9ja1BhcmFtVXNlckFtb3VudCIWa2V5TG9ja1BhcmFtU3RhcnRCbG9jayIUa2V5TG9ja1BhcmFtRHVyYXRpb24iDWtleUxvY2tQYXJhbUsiDWtleUxvY2tQYXJhbUIiFWtleUxvY2tQYXJhbUJ5UGVyaW9kSyIGcGVyaW9kIhVrZXlMb2NrUGFyYW1CeVBlcmlvZEIiF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50IiBrZXlTdGF0c0xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcyISa2V5U3RhdHNMb2Nrc0NvdW50IhJrZXlTdGF0c1VzZXJzQ291bnQiIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMIiJrZXlVc2VyTHBCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMIglscEFzc2V0SWQiF2tleVVzZXJNYXhCb29zdElOVEVHUkFMIhhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwiIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbCITa2V5VXNlckJvb3N0Q2xhaW1lZCIRa2V5VG90YWxDYWNoZWRHd3giG2tleVRvdGFsQ2FjaGVkR3d4Q29ycmVjdGl2ZSIPZmFjdG9yeUNvbnRyYWN0IhBlbWlzc2lvbkNvbnRyYWN0Ig9zdGFraW5nQ29udHJhY3QiEWd3eFJld2FyZENvbnRyYWN0IhFnZXRUb3RhbENhY2hlZEd3eCIHY29ycmVjdCIZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdCIWdm90aW5nRW1pc3Npb25Db250cmFjdCIRa2V5Q3VycmVudEVwb2NoVWkiDmN1cnJlbnRFcG9jaFVpIg5rZXlUYXJnZXRFcG9jaCIRdGFyZ2V0RXBvY2hPcHRpb24iEXRvdGFsQ2FjaGVkR3d4UmF3IhVpc0NvcnJlY3Rpb25BY3RpdmF0ZWQiCmNvcnJlY3RpdmUiDEhpc3RvcnlFbnRyeSIEdHlwZSIEdXNlciIJbG9ja1N0YXJ0IgFrIgFiIgpoaXN0b3J5S0VZIgtoaXN0b3J5REFUQSIKU3RhdHNFbnRyeSIOdG90YWxMb2NrZWRJbmMiC2R1cmF0aW9uSW5jIgxsb2NrQ291bnRJbmMiDXVzZXJzQ291bnRJbmMiG2xvY2tzRHVyYXRpb25TdW1JbkJsb2Nrc0tFWSINbG9ja3NDb3VudEtFWSINdXNlcnNDb3VudEtFWSIOdG90YWxBbW91bnRLRVkiGGxvY2tzRHVyYXRpb25TdW1JbkJsb2NrcyIKbG9ja3NDb3VudCIKdXNlcnNDb3VudCILdG90YWxBbW91bnQiDWNhbGNHd3hBbW91bnQiBGtSYXciBGJSYXciAWgiBVNDQUxFIg9Mb2NrUGFyYW1zRW50cnkiDXVzZXJBbW91bnRLRVkiDXN0YXJ0QmxvY2tLRVkiC2R1cmF0aW9uS0VZIgRrS0VZIgRiS0VZIgxrQnlQZXJpb2RLRVkiDGJCeVBlcmlvZEtFWSIiZXh0cmFjdE9wdGlvbmFsUGF5bWVudEFtb3VudE9yRmFpbCIPZXhwZWN0ZWRBc3NldElkIgNwbXQiGWNhbGNVc2VyR3d4QW1vdW50QXRIZWlnaHQiDHRhcmdldEhlaWdodCIFRU1QVFkiEnVzZXIyTnVtTWFwcGluZ0tFWSINZ3d4QW1vdW50Q2FsYyIUY2FsY0N1cnJlbnRHd3hBbW91bnQiFGludGVybmFsQ2xhaW1XeEJvb3N0IgxscEFzc2V0SWRTdHIiDnVzZXJBZGRyZXNzU3RyIghyZWFkT25seSIRdXNlclJlY29yZE9yRW1wdHkiD3VzZXJSZWNvcmRBcnJheSIKdXNlck51bVN0ciIcZ3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodCIIRU1QVFlTVFIiDSR0MDE0OTY1MTU1MzMiDnBvb2xBZGRyZXNzU3RyIgNwdzEiA3B3MCILcG9vbFdlaWdodDAiC3Bvb2xXZWlnaHQxIhJ3eEVtaXNzaW9uUGVyQmxvY2siDWVtaXNzaW9uU3RhcnQiC2VtaXNzaW9uRW5kIgJkaCIidXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWSIgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkiHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsIhVib29zdEVtaXNzaW9uSW50ZWdyYWwiGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwiA3VkaCIGdUxhc3RIIgR1ZGgwIgR1ZGgxIhd1c2VyTWF4Qm9vc3RJbnRlZ3JhbEtFWSIYdG90YWxNYXhCb29zdEludGVncmFsS0VZIg91c2VyTWF4Qm9vc3RJbnQiEHRvdGFsTWF4Qm9vc3RJbnQiF3RvdGFsQ2FjaGVkR3d4Q29ycmVjdGVkIgt1c2VyQ3Vyckd3eCIhdXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsS0VZIh51c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWwiGnVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwwIhp1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMSIecG9vbFVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwwIh5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDEiInVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldzAiInVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldzEiIXVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldyITdXNlckJvb3N0Q2xhaW1lZEtFWSIQdXNlckJvb3N0Q2xhaW1lZCISdXNlckJvb3N0QXZhaWxhYmxlIglkYXRhU3RhdGUiBWRlYnVnIgtsb2NrQWN0aW9ucyIIY2ZnQXJyYXkiCmFzc2V0SWRTdHIiCXBtdEFtb3VudCIObmV4dFVzZXJOdW1LRVkiDnVzZXJJc0V4aXN0aW5nIgdjb2VmZlg4Ig5nV3hBbW91bnRTdGFydCITZ1d4UGFyYW1zUmVzdWx0TGlzdCIDYXJyIhFmYWN0b3J5QWRkcmVzc1N0ciIObG9ja0Fzc2V0SWRTdHIiC21pbkR1cmF0aW9uIgttYXhEdXJhdGlvbiILY2hlY2tDYWxsZXIiD3JlZmVycmVyQWRkcmVzcyIJc2lnbmF0dXJlIg0kdDAyMzg5MjIzOTU3IhFsb2NrQWN0aW9uc1Jlc3VsdCIPcmVmZXJyYWxBZGRyZXNzIgZyZWZJbnYiEXVwZGF0ZVJlZkFjdGl2aXR5Ig0kdDAyNDQxNTI0NDgwIg1kZWx0YUR1cmF0aW9uIgp1c2VyQW1vdW50Igxsb2NrRHVyYXRpb24iB2xvY2tFbmQiEXJlbWFpbmluZ0R1cmF0aW9uIg11c2VyQW1vdW50TmV3Ig9sb2NrRHVyYXRpb25OZXciDGxvY2tTdGFydE5ldyILY3VyclVzZXJHd3giB2d3eERpZmYiEnVzZXJNYXhCb29zdEludE5ldyIYcmVtYWluaW5nVXNlck1heEJvb3N0SW50IhN1c2VyTWF4Qm9vc3RJbnREaWZmIg0kdDAyOTQ2MTI5NTYzIg0kdDAyOTY5NTI5Nzk2IhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleW4AAWECAl9fAAFiAAgAAWMAgMLXLwABZAUBYwEBZQIBZgFnCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUBZgUBZwkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBZwIPIGlzIG5vdCBkZWZpbmVkAQFoAgFmAWcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBZgUBZwAAAQFpAwFmAWcBagkBC3ZhbHVlT3JFbHNlAgkAmggCBQFmBQFnBQFqAQFrAgFmAWcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQFmBQFnCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFnAg8gaXMgbm90IGRlZmluZWQBAWwBAW0DCQBmAgAABQFtCQEBLQEFAW0FAW0BAW4BAW0EAW8FAW0DCQABAgUBbwIJTGlzdFtBbnldBAFwBQFvBQFwCQACAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQFxAQFtBAFvBQFtAwkAAQIFAW8CA0ludAQBcgUBbwUBcgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEBcwAJALkJAgkAzAgCAgQlcyVzCQDMCAICBmNvbmZpZwkAzAgCAhhyZWZlcnJhbHNDb250cmFjdEFkZHJlc3MFA25pbAUBYQABdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAWUCBQR0aGlzCQEBcwAAAXUJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICC3Byb2dyYW1OYW1lBQNuaWwFAWEAAXYCBnd4bG9jawABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQF1BQF2AQF4AAIcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwABeQABAAF6AAIAAUEAAwABQgAEAAFDAAUAAUQABgABRQAHAAFGAAgAAUcACQABSAAKAAFJAAsBAUoAAhElc19fZmFjdG9yeUNvbmZpZwEBSwEBTAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQFMCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQFhAQFNAAIQJXNfX2xwVG9rZW5zTGlzdAEBTgEBTAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQFMCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQFhAQFPAQFQCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgpwb29sV2VpZ2h0CQDMCAIFAVAFA25pbAUBYQEBUQIBUgFTCQCsAgIJAKwCAgkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAVICAl9fCQCkAwEFAVMBAVQACQERQGV4dHJOYXRpdmUoMTA2MikBCQEBZQIFBHRoaXMJAQF4AAEBVQAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCCQEBVAAJAQFNAAIABQFhAQFWAQFXCQC1CQIJAQFlAgUBVwkBAUoABQFhAQFYAQFZCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAVkFAXoBAVoBAVkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUBWQUBQwECYWEBAVkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUBWQUBeQECYWIBAVkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUBWQUBSAECYWMAAhQlc19fbWFuYWdlclB1YmxpY0tleQECYWQAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAmFlAAIbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQJhZgACHiVzJXNfX3JhdGVQZXJCbG9ja01heF9fY3VycmVudAECYWcAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawECYWgAAhglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BAmFpAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQJhagACDiVzX19uZXh0UGVyaW9kAQJhawACKCVzJXNfX2d3eFJld2FyZEVtaXNzaW9uUGFydF9fc3RhcnRIZWlnaHQAAmFsAAEAAmFtAAIAAmFuAAMAAmFvAAQAAmFwAAUBAmFxAAIKJXNfX2NvbmZpZwECYXIACQC1CQIJAQFlAgUEdGhpcwkBAmFxAAUBYQACYXMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgkBAmFyAAUCYXABAmF0BQJhdQJhdgJhdwJheAJhcwkAuQkCCQDMCAICCCVzJWQlZCVkCQDMCAIFAmF1CQDMCAIFAmF2CQDMCAIFAmF3CQDMCAIFAmF4CQDMCAIFAmFzBQNuaWwFAWEBAmF5BQJhdQJhdgJhdwJheAJhcwkBAmF0BQUCYXUJAKQDAQUCYXYJAKQDAQUCYXcJAKQDAQUCYXgFAmFzAQJhegAEAW8JAKIIAQkBAmFjAAMJAAECBQFvAgZTdHJpbmcEAmFBBQFvCQDZBAEFAmFBAwkAAQIFAW8CBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYUIABAFvCQCiCAEJAQJhZAADCQABAgUBbwIGU3RyaW5nBAJhQQUBbwkA2QQBBQJhQQMJAAECBQFvAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmFDAQJhRAQCYUUJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQBbwkBAmF6AAMJAAECBQFvAgpCeXRlVmVjdG9yBAJhRgUBbwMJAAACCAUCYUQPY2FsbGVyUHVibGljS2V5BQJhRgYFAmFFAwkAAQIFAW8CBFVuaXQDCQAAAggFAmFEBmNhbGxlcgUEdGhpcwYFAmFFCQACAQILTWF0Y2ggZXJyb3IAAmFHAAEAAmFIAAIAAmFJAAMAAmFKAAQAAmFLAAUAAmFMAAYBAmFNAQJhTgkAuQkCCQDMCAICCiVzJXNfX2xvY2sJAMwIAgUCYU4FA25pbAUBYQECYU8BAmFOCQC1CQIJAQFlAgUEdGhpcwkBAmFNAQUCYU4FAWEBAmFQCAJhUQJhUgJhUwJhVAJhVQJhVgJhVwJhWAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgUCYVEJAMwIAgUCYVIJAMwIAgUCYVMJAMwIAgUCYVQJAMwIAgUCYVUJAMwIAgUCYVYJAMwIAgUCYVcJAMwIAgUCYVgFA25pbAUBYQECYVkHAmFRAmFSAmFTAmFUAmFVAmFWAmFYCQECYVAIBQJhUQkApAMBBQJhUgkApAMBBQJhUwkApAMBBQJhVAkApAMBBQJhVQkApAMBBQJhVgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkApAMBBQJhWAECYVoAAg8lc19fbmV4dFVzZXJOdW0BAmJhAQJhTgkAuQkCCQDMCAICGSVzJXMlc19fbWFwcGluZ19fdXNlcjJudW0JAMwIAgUCYU4FA25pbAUBYQECYmIBAVMJALkJAgkAzAgCAhklcyVzJXNfX21hcHBpbmdfX251bTJ1c2VyCQDMCAIFAVMFA25pbAUBYQECYmMBAmFRCQC5CQIJAMwIAgIWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkAzAgCBQJhUQkAzAgCAgZhbW91bnQFA25pbAUBYQECYmQBAmFRCQC5CQIJAMwIAgIWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkAzAgCBQJhUQkAzAgCAgVzdGFydAUDbmlsBQFhAQJiZQECYVEJALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFAmFRCQDMCAICCGR1cmF0aW9uBQNuaWwFAWEBAmJmAQJhUQkAuQkCCQDMCAICFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAMwIAgUCYVEJAMwIAgIBawUDbmlsBQFhAQJiZwECYVEJALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFAmFRCQDMCAICAWIFA25pbAUBYQECYmgCAmFRAmJpCQC5CQIJAMwIAgIXJXMlZCVzJWRfX3BhcmFtQnlQZXJpb2QJAMwIAgUCYVEJAMwIAgIBawkAzAgCBQJiaQUDbmlsBQFhAQJiagICYVECYmkJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCBQJhUQkAzAgCAgFiCQDMCAIFAmJpBQNuaWwFAWEBAmJrAAIeJXMlc19fc3RhdHNfX2FjdGl2ZVRvdGFsTG9ja2VkAQJibAACJSVzJXNfX3N0YXRzX19sb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MBAmJtAAIXJXMlc19fc3RhdHNfX2xvY2tzQ291bnQBAmJuAAIdJXMlc19fc3RhdHNfX2FjdGl2ZVVzZXJzQ291bnQBAmJvAQJhUQkAuQkCCQDMCAICHiVzJWRfX3VzZXJCb29zdEVtaXNzaW9uTGFzdEludAkAzAgCBQJhUQUDbmlsBQFhAQJicAICYVECYnEJALkJAgkAzAgCAh4lcyVkX191c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnQJAMwIAgUCYVEJAMwIAgUCYnEFA25pbAUBYQECYnIBAmFRCQC5CQIJAMwIAgIRJXMlZF9fbWF4Qm9vc3RJbnQJAMwIAgUCYVEFA25pbAUBYQECYnMAAhglcyVzX19tYXhCb29zdEludF9fdG90YWwBAmJ0AQJhUQkAuQkCCQDMCAICJCVzJWRfX3VzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbAkAzAgCBQJhUQUDbmlsBQFhAQJidQECYVEJALkJAgkAzAgCAhYlcyVkX191c2VyQm9vc3RDbGFpbWVkCQDMCAIFAmFRBQNuaWwFAWEBAmJ2AAIWJXMlc19fZ3d4Q2FjaGVkX190b3RhbAECYncAAhwlc19fZ3d4Q2FjaGVkVG90YWxDb3JyZWN0aXZlAAJieAkBAVQAAAFZCQEBVgEFAmJ4AAJieQkBAVoBBQFZAAJiegkBAmFhAQUBWQACYkEJAQJhYgEFAVkBAmJCAQJiQwQCYkQJALkJAgkAzAgCAgIlcwkAzAgCAhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQNuaWwFAWEEAmJFCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQJieAUCYkQEAmJGCQC5CQIJAMwIAgICJXMJAMwIAgIOY3VycmVudEVwb2NoVWkFA25pbAUBYQQCYkcJARFAZXh0ck5hdGl2ZSgxMDUwKQIFAmJFBQJiRgQCYkgJALkJAgkAzAgCAgQlcyVzCQDMCAICKXRvdGFsQ2FjaGVkR3d4Q29ycmVjdGlvbl9fYWN0aXZhdGlvbkVwb2NoBQNuaWwFAWEEAmJJCQCaCAIFBHRoaXMFAmJIBAJiSgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYnYAAAAEAmJLAwkBCWlzRGVmaW5lZAEFAmJJCQBnAgUCYkcJAQV2YWx1ZQEFAmJJBwQCYkwDAwUCYksFAmJDBwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYncAAAAAAAkAlgMBCQDMCAIAAAkAzAgCCQBkAgUCYkoFAmJMBQNuaWwBAmJNCAJiTgJiTwJhUgJiUAJhVAJiUQJiUgJhRAQCYlMJALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQJiTgkAzAgCBQJiTwkAzAgCCQDYBAEIBQJhRA10cmFuc2FjdGlvbklkBQNuaWwFAWEEAmJUCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUCYVIJAMwIAgkApAMBBQJiUAkAzAgCCQCkAwEFAmFUCQDMCAIJAKQDAQUCYlEJAMwIAgkApAMBBQJiUgUDbmlsBQFhCQELU3RyaW5nRW50cnkCBQJiUwUCYlQBAmJVBAJiVgJiVwJiWAJiWQQCYloJAQJibAAEAmNhCQECYm0ABAJjYgkBAmJuAAQCY2MJAQJiawAEAmNkCQEBaAIFBHRoaXMFAmJaBAJjZQkBAWgCBQR0aGlzBQJjYQQCY2YJAQFoAgUEdGhpcwUCY2IEAmNnCQEBaAIFBHRoaXMFAmNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiWgkAZAIFAmNkBQJiVwkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY2EJAGQCBQJjZQUCYlgJAMwIAgkBDEludGVnZXJFbnRyeQIFAmNiCQBkAgUCY2YFAmJZCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjYwkAZAIFAmNnBQJiVgUDbmlsAQJjaAMCY2kCY2oCY2sEAmNsAOgHCQBpAgkAZAIJAGgCBQJjaQUCY2sFAmNqBQJjbAECY20IAmFOAmFRAmFSAmFTAmFUAmJRAmJSAmJpBAJjbgkBAmJjAQUCYVEEAmNvCQECYmQBBQJhUQQCY3AJAQJiZQEFAmFRBAJjcQkBAmJmAQUCYVEEAmNyCQECYmcBBQJhUQQCY3MJAQJiaAIFAmFRBQJiaQQCY3QJAQJiagIFAmFRBQJiaQQCYVgJAQJjaAMFAmJRBQJiUgUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjbgUCYVIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmNvBQJhUwkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3AFAmFUCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjcQUCYlEJAMwIAgkBDEludGVnZXJFbnRyeQIFAmNyBQJiUgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3MFAmJRCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjdAUCYlIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFNAQUCYU4JAQJhWQcFAmFRBQJhUgUCYVMFAmFUBQJiUQUCYlIFAmFYBQNuaWwBAmN1AgJhRAJjdgMJAGYCCQCQAwEIBQJhRAhwYXltZW50cwABCQACAQIbb25seSBvbmUgcGF5bWVudCBpcyBhbGxvd2VkAwkAAAIJAJADAQgFAmFECHBheW1lbnRzAAAAAAQCY3cJAJEDAggFAmFECHBheW1lbnRzAAADCQECIT0CCQEFdmFsdWUBCAUCY3cHYXNzZXRJZAUCY3YJAAIBAhtpbnZhbGlkIGFzc2V0IGlkIGluIHBheW1lbnQIBQJjdwZhbW91bnQBAmN4AgJhTgJjeQQCY3oCBWVtcHR5BAJjQQkBAmJhAQUCYU4EAmFRCQELdmFsdWVPckVsc2UCCQCiCAEFAmNBBQJjegQCYlEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmJmAQUCYVEAAAQCYlIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmJnAQUCYVEAAAQCY0IJAQJjaAMFAmJRBQJiUgUCY3kEAmFYAwkAZgIAAAUCY0IAAAUCY0IFAmFYAQJjQwECYU4JAQJjeAIFAmFOBQZoZWlnaHQBAmNEAwJjRQJjRgJjRwQCY3oCBUVNUFRZBAJjSAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQECYU0BBQJjRgUCY3oDCQAAAgUCY0gFAmN6CQCVCgMAAAUDbmlsAhV1c2VyUmVjb3JkOjppczo6ZW1wdHkEAmNJCQC1CQIFAmNIBQFhBAJjSgkAkQMCBQJjSQUCYUcEAmNLCQELdmFsdWVPckVsc2UCCQCaCAIFAmJBCQECYWsAAAAEAmNMAgVlbXB0eQQCY00DCQECIT0CBQJjRQUCY0wEAmNOCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYngJAQFLAQUCY0UJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQJjRQQCY08JARFAZXh0ck5hdGl2ZSgxMDUwKQIFAmJ4CQEBTwEFAmNOBAJjUAkBC3ZhbHVlT3JFbHNlAgkAmggCBQJieAkBAVECBQJjTgAABQJjTwkAlAoCBQJjUAUCY08DBQJjRwkAlAoCAAAAAAkAAgEJAKwCAgIobm90IHJlYWRvbmx5IG1vZGU6IHVuc3VwcG9ydGVkIGxwIGFzc2V0IAUCY0UEAmNRCAUCY00CXzEEAmNSCAUCY00CXzIEAmNTCQEBawIFAmJ5CQECYWUABAJjVAkBAWsCBQJieQkBAmFnAAQCY1UJAQFrAgUCYnkJAQJhaQAEAmNrAwkAZgIFBmhlaWdodAUCY1UFAmNVBQZoZWlnaHQEAmNWCQCWAwEJAMwIAgkAZQIFAmNrBQJjVAkAzAgCAAAFA25pbAQCY1cJAQJicAIFAmNKBQJjRQQCY1gJAQJibwEFAmNKBAJjWQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJjVwkBAWgCBQR0aGlzBQJjWAQCY1oJAGkCCQBoAgkAaAIFAmNTBQJjVgACAAMEAmRhCQBlAgUCY1oFAmNZBAJkYgkAawMFAmRhAAMJAGgCAAIFAmNTBAJkYwkAZQIFAmNrBQJkYgQCZGQJAJYDAQkAzAgCCQBlAgUCY0sFAmRjCQDMCAIAAAUDbmlsBAJkZQkAZQIJAGUCBQJjawUCZGMFAmRkAwMDCQBmAgAABQJkYwYJAGYCAAAFAmRlBgkAZwIJAQFsAQkAZQIJAGQCBQJkZAUCZGUFAmRiAAEJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFmludmFsaWQgdWRoIGNhbGM6IHVkaD0JAKQDAQUCZGICCCB1TGFzdEg9CQCkAwEFAmRjAgYgdWRoMD0JAKQDAQUCZGQCBiB1ZGgxPQkApAMBBQJkZQMJAGYCAAAFAmRhCQACAQISd3JvbmcgY2FsY3VsYXRpb25zBAJkZgkBAmJyAQUCY0oEAmRnCQECYnMABAJkaAkBAWgCBQR0aGlzBQJkZgQCZGkJAQFoAgUEdGhpcwUCZGcEAmRqCQECYkIBBgQCZGsJAQJjQwEFAmNGBAJkbAkBAmJ0AQUCY0oEAmRtCQEBaAIFBHRoaXMFAmRsBAJkbgMJAAACBQJkYgAAAAAJAGsDBQJkYQUCZGQFAmRiBAJkbwMJAAACBQJkYgAAAAAJAGsDBQJkYQUCZGUFAmRiBAJkcAkAawMFAmRuBQJjUQUBZAQCZHEJAGsDBQJkbwUCY1IFAWQEAmRyAwkAAAIFAmRqAAAAAAkAawMFAmRwBQJkawUCZGoEAmRzAwkAAAIFAmRqAAAAAAkAawMFAmRxBQJkawUCZGoEAmR0CQBkAgUCZHIFAmRzBAJkdQkBAmJ1AQUCY0oEAmR2CQEBaAIFBHRoaXMFAmR1BAJkdwkAZQIFAmR0BQJkdgQCZHgJAMwIAgkBDEludGVnZXJFbnRyeQIFAmNXBQJjWgUDbmlsBAJkeQkAuQkCCQDMCAIJAKQDAQUCY1kJAMwIAgkApAMBBQJkYQkAzAgCCQCkAwEFAmR2CQDMCAIJAKQDAQUCZHcJAMwIAgkApAMBBQJjUQkAzAgCCQCkAwEFAmNSCQDMCAIJAKQDAQUCY2sJAMwIAgkApAMBBQJkYgkAzAgCCQCkAwEFAmRjCQDMCAIJAKQDAQUCZGQJAMwIAgkApAMBBQJkZQkAzAgCCQCkAwEFAmRrCQDMCAIJAKQDAQUCZGoFA25pbAIBOgkAlQoDBQJkdAUCZHgFAmR5AQJkegICYUQCYVQEAmRBCQECYXIABAJkQgkAkQMCBQJkQQUCYWwEAmF1CQDZBAEFAmRCBAJhdgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRBBQJhbQQCYXcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkQQUCYW4EAmF4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZEEFAmFvAwkBAiE9AgkAkAMBCAUCYUQIcGF5bWVudHMAAQkAAgECNGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAmN3CQCRAwIIBQJhRAhwYXltZW50cwAABAJkQwgFAmN3BmFtb3VudAMJAQIhPQIFAmF1CQEFdmFsdWUBCAUCY3cHYXNzZXRJZAkAAgEJAKwCAgkArAICAh5pbnZhbGlkIGFzc2V0IGlzIGluIHBheW1lbnQgLSAFAmRCAgwgaXMgZXhwZWN0ZWQEAmRECQECYVoABAJjRgkApQgBCAUCYUQGY2FsbGVyBAJkRQkBCWlzRGVmaW5lZAEJAKIIAQkBAmJhAQUCY0YEAmNKAwUCZEUJAQV2YWx1ZQEJAKIIAQkBAmJhAQUCY0YJAKQDAQkBAWsCBQR0aGlzBQJkRAQCYVEJAQ1wYXJzZUludFZhbHVlAQUCY0oEAmJQBQZoZWlnaHQEAmNvCQECYmQBBQJjSgQCY3AJAQJiZQEFAmNKBAJjbgkBAmJjAQUCY0oDCQBmAgUCYXYFAmRDCQACAQkArAICAiJhbW91bnQgaXMgbGVzcyB0aGVuIG1pbkxvY2tBbW91bnQ9CQCkAwEFAmF2AwkAZgIFAmF3BQJhVAkAAgEJAKwCAgItcGFzc2VkIGR1cmF0aW9uIGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQCkAwEFAmF3AwkAZgIFAmFUBQJheAkAAgEJAKwCAgIwcGFzc2VkIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFAmF4AwMFAmRFCQBnAgkAZAIJAQFrAgUEdGhpcwUCY28JAQFrAgUEdGhpcwUCY3AFAmJQBwkAAgECNnRoZXJlIGlzIGFuIGFjdGl2ZSBsb2NrIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jawMJAGYCCQEBaAIFBHRoaXMFAmNuAAAJAAIBCQCsAgICNHRoZXJlIGFyZSBsb2NrZWQgV1hzIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jayAFAmNuBAJkRgkAawMFAmFUBQFjBQJheAQCZEcJAGsDBQJkQwUCZEYFAWMEAmRICQEBbgEJAPwHBAUCYXMCFWNhbGNHd3hQYXJhbXNSRUFET05MWQkAzAgCBQJkRwkAzAgCBQJiUAkAzAgCBQJhVAUDbmlsBQNuaWwEAmJRCQEBcQEJAJEDAgUCZEgAAAQCYlIJAQFxAQkAkQMCBQJkSAABBAJiaQkApAMBCQEBcQEJAJEDAgUCZEgAAgQCY1MJAQFrAgUCYnkJAQJhZQAEAmNUCQEBawIFAmJ5CQECYWcABAJjVQkBAWsCBQJieQkBAmFpAAQCY2sDCQBmAgUGaGVpZ2h0BQJjVQUCY1UFBmhlaWdodAQCY1YJAJYDAQkAzAgCCQBlAgUCY2sFAmNUCQDMCAIAAAUDbmlsBAJjWAkBAmJvAQUCY0oEAmNaCQBpAgkAaAIJAGgCBQJjUwUCY1YAAgADBAJkZgkBAmJyAQUCY0oEAmRnCQECYnMABAJkaAkAaQIJAGgCBQJkRwUCYVQAAgQCZGkJAQFoAgUEdGhpcwUCZGcEAmJKCQECYkIBBwQCZEkDBQJkRQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJkRAkAZAIFAmFRAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmJhAQUCY0YFAmNKCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiYgEFAmNKBQJjRgUDbmlsCQCUCgIJAM4IAgkAzQgCCQDOCAIJAM4IAgUCZEkJAQJjbQgFAmNGBQJjSgUCZEMFAmJQBQJhVAUCYlEFAmJSBQJiaQkBAmJVBAUCZEMFAmFUAAEDBQJkRQAAAAEJAQJiTQgCBGxvY2sFAmNGBQJkQwUCYlAFAmFUBQJiUQUCYlIFAmFECQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjWAUCY1oJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJidgAJAGQCBQJiSgUCZEcFA25pbAUCZEcMAmFEAQtjb25zdHJ1Y3RvcgYCZEoCZEsCYXYCZEwCZE0CYXMEAmROCQECYUMBBQJhRAMJAAACBQJkTgUCZE4JAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFaAAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcQAJAQJheQUFAmRLBQJhdgUCZEwFAmRNBQJhcwkAzAgCCQELU3RyaW5nRW50cnkCCQEBeAAFAmRKBQNuaWwJAQJiVQQAAAAAAAAAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhRAEHbG9ja1JlZgMCYVQCZE8CZFAEAmRRCQECZHoCBQJhRAUCYVQEAmRSCAUCZFECXzEEAmRHCAUCZFECXzIEAmRTCQClCAEIBQJhRAZjYWxsZXIEAmRUAwMJAAACBQJkTwIABgkAAAIFAmRQAQAFBHVuaXQJAPwHBAUBdAIKY3JlYXRlUGFpcgkAzAgCBQF3CQDMCAIFAmRPCQDMCAIFAmRTCQDMCAIFAmRQBQNuaWwFA25pbAMJAAACBQJkVAUCZFQEAmRVCQD8BwQFAmFzAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAmFEBmNhbGxlcgkAzAgCBQJkRwUDbmlsBQNuaWwDCQAAAgUCZFUFAmRVCQCUCgIFAmRSBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFEAQRsb2NrAQJhVAQCZFYJAQJkegIFAmFEBQJhVAQCZFIIBQJkVgJfMQQCZEcIBQJkVgJfMgQCZFUJAPwHBAUCYXMCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgkApQgBCAUCYUQGY2FsbGVyCQDMCAIFAmRHBQNuaWwFA25pbAMJAAACBQJkVQUCZFUJAJQKAgUCZFIFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYUQBDGluY3JlYXNlTG9jawECZFcEAmRBCQECYXIABAJkQgkAkQMCBQJkQQUCYWwEAmF1CQDZBAEFAmRCBAJhdwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRBBQJhbgQCYXgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkQQUCYW8EAmRDCQECY3UCBQJhRAUCYXUEAmNGCQClCAEIBQJhRAZjYWxsZXIEAmNJCQECYU8BBQJjRgQCY0oJAJEDAgUCY0kFAmFHBAJkWAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNJBQJhSAQCYlAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjSQUCYUkEAmRZCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY0kFAmFKBAJkWgkAZAIFAmJQBQJkWQQCZWEJAJYDAQkAzAgCCQBlAgUCZFoFBmhlaWdodAkAzAgCAAAFA25pbAQCZWIJAGQCBQJkWAUCZEMEAmVjCQBkAgUCZWEFAmRXAwkAZgIAAAUCZFcJAAIBAhpkdXJhdGlvbiBpcyBsZXNzIHRoZW4gemVybwMJAGYCBQJhdwUCZWMJAAIBCQCsAgICLWxvY2tEdXJhdGlvbk5ldyBpcyBsZXNzIHRoZW4gbWluTG9ja0R1cmF0aW9uPQkApAMBBQJhdwMJAGYCBQJlYwUCYXgJAAIBCQCsAgICRGRlbHRhRHVyYXRpb24gKyBleGlzdGVkTG9ja0R1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFAmF4BAJkRgkAawMFAmVjBQFjBQJheAQCZEcJAGsDBQJlYgUCZEYFAWMEAmRVCQD8BwQFAmFzAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAmFEBmNhbGxlcgkAzAgCBQJkRwUDbmlsBQNuaWwDCQAAAgUCZFUFAmRVBAJlZAUGaGVpZ2h0BAJkSAkBAW4BCQD8BwQFAmFzAhVjYWxjR3d4UGFyYW1zUkVBRE9OTFkJAMwIAgUCZEcJAMwIAgUCZWQJAMwIAgUCZWMFA25pbAUDbmlsBAJiUQkBAXEBCQCRAwIFAmRIAAAEAmJSCQEBcQEJAJEDAgUCZEgAAQQCYmkJAKQDAQkBAXEBCQCRAwIFAmRIAAIEAmNTCQEBawIFAmJ5CQECYWUABAJjVAkBAWsCBQJieQkBAmFnAAQCY1UJAQFrAgUCYnkJAQJhaQAEAmNrAwkAZgIFBmhlaWdodAUCY1UFAmNVBQZoZWlnaHQEAmNWCQCWAwEJAMwIAgkAZQIFAmNrBQJjVAkAzAgCAAAFA25pbAQCY1gJAQJibwEFAmNKBAJjWQkBAWgCBQR0aGlzBQJjWAQCY1oJAGkCCQBoAgkAaAIFAmNTBQJjVgACAAMEAmRhCQBlAgUCY1oFAmNZAwkAZgIAAAUCZGEJAAIBAhJ3cm9uZyBjYWxjdWxhdGlvbnMEAmRmCQECYnIBBQJjSgQCZGcJAQJicwAEAmRoCQEBaAIFBHRoaXMFAmRmBAJkaQkBAWgCBQR0aGlzBQJkZwQCZWUJAQJjQwEFAmNGBAJlZgkAZQIFAmRHBQJlZQMJAGYCAAAFAmVmCQACAQkArAICAhhnd3hEaWZmIGlzIGxlc3MgdGhlbiAwOiAJAKQDAQUCZWYEAmJKCQECYkIBBwQCZGoJAQJiQgEGBAJkbAkBAmJ0AQUCY0oEAmRtCQEBaAIFBHRoaXMFAmRsBAJkdAkAawMFAmRhBQJlZQUCZGoEAmVnCQBpAgkAaAIFAmRHBQJlYwACBAJlaAkAaQIJAGgCBQJlZQUCZWEAAgQCZWkJAGUCBQJlZwUCZWgJAM4IAgkAzQgCCQDOCAIJAQJjbQgFAmNGBQJjSgUCZWIFAmVkBQJlYwUCYlEFAmJSBQJiaQkBAmJVBAUCZEMFAmRXAAAAAAkBAmJNCAIEbG9jawUCY0YFAmRDBQJiUAUCZWMFAmJRBQJiUgUCYUQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJidgAJAGQCBQJiSgUCZWYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhRAEMY2xhaW1XeEJvb3N0AgJjRQJjRgMJAQIhPQIFAmJ6CAUCYUQGY2FsbGVyCQACAQIScGVybWlzc2lvbnMgZGVuaWVkBAJlagkBAmNEAwUCY0UFAmNGBwQCZHcIBQJlagJfMQQCZHgIBQJlagJfMgQCZHkIBQJlagJfMwkAlAoCBQJkeAkAzAgCBQJkdwUDbmlsAmFEARRjbGFpbVd4Qm9vc3RSRUFET05MWQICY0UCY0YEAmVrCQECY0QDBQJjRQUCY0YGBAJkdwgFAmVrAl8xBAJkeAgFAmVrAl8yBAJkeQgFAmVrAl8zCQCUCgIFA25pbAkAzAgCBQJkdwkAzAgCBQJkeQUDbmlsAmFEAQZ1bmxvY2sBAmFOBAJjSQkBAmFPAQUCYU4EAmNKCQCRAwIFAmNJBQJhRwQCZFgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjSQUCYUgEAmJQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY0kFAmFJBAJkWQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNJBQJhSgQCZFoJAGQCBQJiUAUCZFkEAmRBCQECYXIABAJhdQkA2QQBCQCRAwIFAmRBBQJhbAMJAGcCBQJkWgUGaGVpZ2h0CQACAQkArAICCQCsAgICBXdhaXQgCQCkAwEFAmRaAgogdG8gdW5sb2NrAwkAZwIAAAUCZFgJAAIBAhFub3RoaW5nIHRvIHVubG9jawQCYmkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUCYXMJAQJhagAAAAkAzQgCCQDNCAIJAM4IAgkBAmNtCAUCYU4FAmNKAAAFAmJQBQJkWQAAAAAJAKQDAQUCYmkJAQJiVQQJAQEtAQUCZFgAAAAAAP///////////wEJAQJiTQgCBnVubG9jawUCYU4FAmRYBQJiUAUCZFkAAAAABQJhRAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYU4FAmRYBQJhdQJhRAETZ3d4VXNlckluZm9SRUFET05MWQECYU4EAmFYCQECY0MBBQJhTgkAlAoCBQNuaWwJAMwIAgUCYVgFA25pbAJhRAEgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkCAmFOAmN5BAJhWAkBAmN4AgUCYU4FAmN5CQCUCgIFA25pbAUCYVgCYUQBGWdldFRvdGFsQ2FjaGVkR3d4UkVBRE9OTFkACQCUCgIFA25pbAkBAmJCAQYCYUQBCnNldE1hbmFnZXIBAmVsBAJkTgkBAmFDAQUCYUQDCQAAAgUCZE4FAmROBAJlbQkA2QQBBQJlbAMJAAACBQJlbQUCZW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAAUCZWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhRAEOY29uZmlybU1hbmFnZXIABAJlbgkBAmFCAAQCZW8DCQEJaXNEZWZpbmVkAQUCZW4GCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVvBQJlbwQCZXADCQAAAggFAmFED2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZW4GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVwBQJlcAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMACQDYBAEJAQV2YWx1ZQEFAmVuCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhZAAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXEBAmVyAAQCZXMEAW8JAQJhegADCQABAgUBbwIKQnl0ZVZlY3RvcgQCYUYFAW8FAmFGAwkAAQIFAW8CBFVuaXQIBQJlcQ9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCZXEJYm9keUJ5dGVzCQCRAwIIBQJlcQZwcm9vZnMAAAUCZXPDR9vj", "chainId": 84, "height": 2348100, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EvS19MJ1c8MwQMgqukanuya5LseYcrpydKs1X9vNTVuT Next: GAEfnfzGb8LnZGHuCjgmSrJoWtxRTdCANfy47j399rvb Diff:
OldNewDifferences
305305 func bv () = "%s%s__gwxCached__total"
306306
307307
308-let bw = T()
308+func bw () = "%s__gwxCachedTotalCorrective"
309309
310-let Y = V(bw)
311310
312-let bx = Z(Y)
311+let bx = T()
313312
314-let by = aa(Y)
313+let Y = V(bx)
315314
316-let bz = ab(Y)
315+let by = Z(Y)
317316
318-func bA (bB,bC,aR,bD,aT,bE,bF,aD) = {
319- let bG = makeString(["%s%s%s%s__history", bB, bC, toBase58String(aD.transactionId)], a)
320- let bH = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aR), toString(bD), toString(aT), toString(bE), toString(bF)], a)
321- StringEntry(bG, bH)
317+let bz = aa(Y)
318+
319+let bA = ab(Y)
320+
321+func bB (bC) = {
322+ let bD = makeString(["%s", "votingEmissionContract"], a)
323+ let bE = addressFromStringValue(getStringValue(bx, bD))
324+ let bF = makeString(["%s", "currentEpochUi"], a)
325+ let bG = getIntegerValue(bE, bF)
326+ let bH = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
327+ let bI = getInteger(this, bH)
328+ let bJ = valueOrElse(getInteger(this, bv()), 0)
329+ let bK = if (isDefined(bI))
330+ then (bG >= value(bI))
331+ else false
332+ let bL = if (if (bK)
333+ then bC
334+ else false)
335+ then valueOrElse(getInteger(this, bw()), 0)
336+ else 0
337+ max([0, (bJ + bL)])
322338 }
323339
324340
325-func bI (bJ,bK,bL,bM) = {
326- let bN = bl()
327- let bO = bm()
328- let bP = bn()
329- let bQ = bk()
330- let bR = h(this, bN)
331- let bS = h(this, bO)
332- let bT = h(this, bP)
333- let bU = h(this, bQ)
334-[IntegerEntry(bN, (bR + bK)), IntegerEntry(bO, (bS + bL)), IntegerEntry(bP, (bT + bM)), IntegerEntry(bQ, (bU + bJ))]
341+func bM (bN,bO,aR,bP,aT,bQ,bR,aD) = {
342+ let bS = makeString(["%s%s%s%s__history", bN, bO, toBase58String(aD.transactionId)], a)
343+ let bT = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aR), toString(bP), toString(aT), toString(bQ), toString(bR)], a)
344+ StringEntry(bS, bT)
335345 }
336346
337347
338-func bV (bW,bX,bY) = {
339- let bZ = 1000
340- (((bW * bY) + bX) / bZ)
348+func bU (bV,bW,bX,bY) = {
349+ let bZ = bl()
350+ let ca = bm()
351+ let cb = bn()
352+ let cc = bk()
353+ let cd = h(this, bZ)
354+ let ce = h(this, ca)
355+ let cf = h(this, cb)
356+ let cg = h(this, cc)
357+[IntegerEntry(bZ, (cd + bW)), IntegerEntry(ca, (ce + bX)), IntegerEntry(cb, (cf + bY)), IntegerEntry(cc, (cg + bV))]
341358 }
342359
343360
344-func ca (aN,aQ,aR,aS,aT,bE,bF,bi) = {
345- let cb = bc(aQ)
346- let cc = bd(aQ)
347- let cd = be(aQ)
348- let ce = bf(aQ)
349- let cf = bg(aQ)
350- let cg = bh(aQ, bi)
351- let ch = bj(aQ, bi)
352- let aX = bV(bE, bF, height)
353-[IntegerEntry(cb, aR), IntegerEntry(cc, aS), IntegerEntry(cd, aT), IntegerEntry(ce, bE), IntegerEntry(cf, bF), IntegerEntry(cg, bE), IntegerEntry(ch, bF), StringEntry(aM(aN), aY(aQ, aR, aS, aT, bE, bF, aX))]
361+func ch (ci,cj,ck) = {
362+ let cl = 1000
363+ (((ci * ck) + cj) / cl)
354364 }
355365
356366
357-func ci (aD,cj) = if ((size(aD.payments) > 1))
367+func cm (aN,aQ,aR,aS,aT,bQ,bR,bi) = {
368+ let cn = bc(aQ)
369+ let co = bd(aQ)
370+ let cp = be(aQ)
371+ let cq = bf(aQ)
372+ let cr = bg(aQ)
373+ let cs = bh(aQ, bi)
374+ let ct = bj(aQ, bi)
375+ let aX = ch(bQ, bR, height)
376+[IntegerEntry(cn, aR), IntegerEntry(co, aS), IntegerEntry(cp, aT), IntegerEntry(cq, bQ), IntegerEntry(cr, bR), IntegerEntry(cs, bQ), IntegerEntry(ct, bR), StringEntry(aM(aN), aY(aQ, aR, aS, aT, bQ, bR, aX))]
377+ }
378+
379+
380+func cu (aD,cv) = if ((size(aD.payments) > 1))
358381 then throw("only one payment is allowed")
359382 else if ((size(aD.payments) == 0))
360383 then 0
361384 else {
362- let ck = aD.payments[0]
363- if ((value(ck.assetId) != cj))
385+ let cw = aD.payments[0]
386+ if ((value(cw.assetId) != cv))
364387 then throw("invalid asset id in payment")
365- else ck.amount
388+ else cw.amount
366389 }
367390
368391
369-func cl (aN,cm) = {
370- let cn = "empty"
371- let co = ba(aN)
372- let aQ = valueOrElse(getString(co), cn)
373- let bE = valueOrElse(getInteger(bf(aQ)), 0)
374- let bF = valueOrElse(getInteger(bg(aQ)), 0)
375- let cp = bV(bE, bF, cm)
376- let aX = if ((0 > cp))
392+func cx (aN,cy) = {
393+ let cz = "empty"
394+ let cA = ba(aN)
395+ let aQ = valueOrElse(getString(cA), cz)
396+ let bQ = valueOrElse(getInteger(bf(aQ)), 0)
397+ let bR = valueOrElse(getInteger(bg(aQ)), 0)
398+ let cB = ch(bQ, bR, cy)
399+ let aX = if ((0 > cB))
377400 then 0
378- else cp
401+ else cB
379402 aX
380403 }
381404
382405
383-func cq (aN) = cl(aN, height)
406+func cC (aN) = cx(aN, height)
384407
385408
386-func cr (cs,ct,cu) = {
387- let cn = "EMPTY"
388- let cv = valueOrElse(getString(this, aM(ct)), cn)
389- if ((cv == cn))
409+func cD (cE,cF,cG) = {
410+ let cz = "EMPTY"
411+ let cH = valueOrElse(getString(this, aM(cF)), cz)
412+ if ((cH == cz))
390413 then $Tuple3(0, nil, "userRecord::is::empty")
391414 else {
392- let cw = split(cv, a)
393- let cx = cw[aG]
394- let cy = valueOrElse(getInteger(bz, ak()), 0)
395- let cz = "empty"
396- let cA = if ((cs != cz))
415+ let cI = split(cH, a)
416+ let cJ = cI[aG]
417+ let cK = valueOrElse(getInteger(bA, ak()), 0)
418+ let cL = "empty"
419+ let cM = if ((cE != cL))
397420 then {
398- let cB = valueOrErrorMessage(getString(bw, K(cs)), ("unsupported lp asset " + cs))
399- let cC = getIntegerValue(bw, O(cB))
400- let cD = valueOrElse(getInteger(bw, Q(cB, 0)), cC)
401- $Tuple2(cD, cC)
421+ let cN = valueOrErrorMessage(getString(bx, K(cE)), ("unsupported lp asset " + cE))
422+ let cO = getIntegerValue(bx, O(cN))
423+ let cP = valueOrElse(getInteger(bx, Q(cN, 0)), cO)
424+ $Tuple2(cP, cO)
402425 }
403- else if (cu)
426+ else if (cG)
404427 then $Tuple2(0, 0)
405- else throw(("not readonly mode: unsupported lp asset " + cs))
406- let cE = cA._1
407- let cF = cA._2
408- let cG = k(bx, ae())
409- let cH = k(bx, ag())
410- let cI = k(bx, ai())
411- let bY = if ((height > cI))
412- then cI
428+ else throw(("not readonly mode: unsupported lp asset " + cE))
429+ let cQ = cM._1
430+ let cR = cM._2
431+ let cS = k(by, ae())
432+ let cT = k(by, ag())
433+ let cU = k(by, ai())
434+ let ck = if ((height > cU))
435+ then cU
413436 else height
414- let cJ = max([(bY - cH), 0])
415- let cK = bp(cx, cs)
416- let cL = bo(cx)
417- let cM = valueOrElse(getInteger(this, cK), h(this, cL))
418- let cN = (((cG * cJ) * 2) / 3)
419- let cO = (cN - cM)
420- let cP = fraction(cO, 3, (2 * cG))
421- let cQ = (bY - cP)
422- let cR = max([(cy - cQ), 0])
423- let cS = ((bY - cQ) - cR)
424- if (if (if ((0 > cQ))
437+ let cV = max([(ck - cT), 0])
438+ let cW = bp(cJ, cE)
439+ let cX = bo(cJ)
440+ let cY = valueOrElse(getInteger(this, cW), h(this, cX))
441+ let cZ = (((cS * cV) * 2) / 3)
442+ let da = (cZ - cY)
443+ let db = fraction(da, 3, (2 * cS))
444+ let dc = (ck - db)
445+ let dd = max([(cK - dc), 0])
446+ let de = ((ck - dc) - dd)
447+ if (if (if ((0 > dc))
425448 then true
426- else (0 > cS))
449+ else (0 > de))
427450 then true
428- else (l(((cR + cS) - cP)) >= 1))
429- then throw(((((((("invalid udh calc: udh=" + toString(cP)) + " uLastH=") + toString(cQ)) + " udh0=") + toString(cR)) + " udh1=") + toString(cS)))
430- else if ((0 > cO))
451+ else (l(((dd + de) - db)) >= 1))
452+ then throw(((((((("invalid udh calc: udh=" + toString(db)) + " uLastH=") + toString(dc)) + " udh0=") + toString(dd)) + " udh1=") + toString(de)))
453+ else if ((0 > da))
431454 then throw("wrong calculations")
432455 else {
433- let cT = br(cx)
434- let cU = bs()
435- let cV = h(this, cT)
436- let cW = h(this, cU)
437- let cX = bv()
438- let cY = valueOrElse(getInteger(this, cX), 0)
439- let cZ = cq(ct)
440- let da = bt(cx)
441- let db = h(this, da)
442- let dc = if ((cP == 0))
456+ let df = br(cJ)
457+ let dg = bs()
458+ let dh = h(this, df)
459+ let di = h(this, dg)
460+ let dj = bB(true)
461+ let dk = cC(cF)
462+ let dl = bt(cJ)
463+ let dm = h(this, dl)
464+ let dn = if ((db == 0))
443465 then 0
444- else fraction(cO, cR, cP)
445- let dd = if ((cP == 0))
466+ else fraction(da, dd, db)
467+ let do = if ((db == 0))
446468 then 0
447- else fraction(cO, cS, cP)
448- let de = fraction(dc, cE, d)
449- let df = fraction(dd, cF, d)
450- let dg = if ((cY == 0))
469+ else fraction(da, de, db)
470+ let dp = fraction(dn, cQ, d)
471+ let dq = fraction(do, cR, d)
472+ let dr = if ((dj == 0))
451473 then 0
452- else fraction(de, cZ, cY)
453- let dh = if ((cY == 0))
474+ else fraction(dp, dk, dj)
475+ let ds = if ((dj == 0))
454476 then 0
455- else fraction(df, cZ, cY)
456- let di = (dg + dh)
457- let dj = bu(cx)
458- let dk = h(this, dj)
459- let dl = (di - dk)
460- let dm = [IntegerEntry(cK, cN)]
461- let dn = makeString([toString(cM), toString(cO), toString(dk), toString(dl), toString(cE), toString(cF), toString(bY), toString(cP), toString(cQ), toString(cR), toString(cS), toString(cZ), toString(cY)], ":")
462- $Tuple3(di, dm, dn)
477+ else fraction(dq, dk, dj)
478+ let dt = (dr + ds)
479+ let du = bu(cJ)
480+ let dv = h(this, du)
481+ let dw = (dt - dv)
482+ let dx = [IntegerEntry(cW, cZ)]
483+ let dy = makeString([toString(cY), toString(da), toString(dv), toString(dw), toString(cQ), toString(cR), toString(ck), toString(db), toString(dc), toString(dd), toString(de), toString(dk), toString(dj)], ":")
484+ $Tuple3(dt, dx, dy)
463485 }
464486 }
465487 }
466488
467489
468-func do (aD,aT) = {
469- let dp = ar()
470- let dq = dp[al]
471- let au = fromBase58String(dq)
472- let av = parseIntValue(dp[am])
473- let aw = parseIntValue(dp[an])
474- let ax = parseIntValue(dp[ao])
490+func dz (aD,aT) = {
491+ let dA = ar()
492+ let dB = dA[al]
493+ let au = fromBase58String(dB)
494+ let av = parseIntValue(dA[am])
495+ let aw = parseIntValue(dA[an])
496+ let ax = parseIntValue(dA[ao])
475497 if ((size(aD.payments) != 1))
476498 then throw("invalid payment - exact one payment must be attached")
477499 else {
478- let ck = aD.payments[0]
479- let dr = ck.amount
480- if ((au != value(ck.assetId)))
481- then throw((("invalid asset is in payment - " + dq) + " is expected"))
500+ let cw = aD.payments[0]
501+ let dC = cw.amount
502+ if ((au != value(cw.assetId)))
503+ then throw((("invalid asset is in payment - " + dB) + " is expected"))
482504 else {
483- let ds = aZ()
484- let ct = toString(aD.caller)
485- let dt = isDefined(getString(ba(ct)))
486- let cx = if (dt)
487- then value(getString(ba(ct)))
488- else toString(k(this, ds))
489- let aQ = parseIntValue(cx)
490- let bD = height
491- let cc = bd(cx)
492- let cd = be(cx)
493- let cb = bc(cx)
494- if ((av > dr))
505+ let dD = aZ()
506+ let cF = toString(aD.caller)
507+ let dE = isDefined(getString(ba(cF)))
508+ let cJ = if (dE)
509+ then value(getString(ba(cF)))
510+ else toString(k(this, dD))
511+ let aQ = parseIntValue(cJ)
512+ let bP = height
513+ let co = bd(cJ)
514+ let cp = be(cJ)
515+ let cn = bc(cJ)
516+ if ((av > dC))
495517 then throw(("amount is less then minLockAmount=" + toString(av)))
496518 else if ((aw > aT))
497519 then throw(("passed duration is less then minLockDuration=" + toString(aw)))
498520 else if ((aT > ax))
499521 then throw(("passed duration is greater then maxLockDuration=" + toString(ax)))
500- else if (if (dt)
501- then ((k(this, cc) + k(this, cd)) >= bD)
522+ else if (if (dE)
523+ then ((k(this, co) + k(this, cp)) >= bP)
502524 else false)
503525 then throw("there is an active lock - consider to use increaseLock")
504- else if ((h(this, cb) > 0))
505- then throw(("there are locked WXs - consider to use increaseLock " + cb))
526+ else if ((h(this, cn) > 0))
527+ then throw(("there are locked WXs - consider to use increaseLock " + cn))
506528 else {
507- let du = fraction(aT, c, ax)
508- let dv = fraction(dr, du, c)
509- let dw = n(invoke(as, "calcGwxParamsREADONLY", [dv, bD, aT], nil))
510- let bE = q(dw[0])
511- let bF = q(dw[1])
512- let bi = toString(q(dw[2]))
513- let cG = k(bx, ae())
514- let cH = k(bx, ag())
515- let cI = k(bx, ai())
516- let bY = if ((height > cI))
517- then cI
529+ let dF = fraction(aT, c, ax)
530+ let dG = fraction(dC, dF, c)
531+ let dH = n(invoke(as, "calcGwxParamsREADONLY", [dG, bP, aT], nil))
532+ let bQ = q(dH[0])
533+ let bR = q(dH[1])
534+ let bi = toString(q(dH[2]))
535+ let cS = k(by, ae())
536+ let cT = k(by, ag())
537+ let cU = k(by, ai())
538+ let ck = if ((height > cU))
539+ then cU
518540 else height
519- let cJ = max([(bY - cH), 0])
520- let cL = bo(cx)
521- let cN = (((cG * cJ) * 2) / 3)
522- let cT = br(cx)
523- let cU = bs()
524- let cV = ((dv * aT) / 2)
525- let cW = h(this, cU)
526- let cX = bv()
527- let cY = valueOrElse(getInteger(this, cX), 0)
528- let dx = if (dt)
541+ let cV = max([(ck - cT), 0])
542+ let cX = bo(cJ)
543+ let cZ = (((cS * cV) * 2) / 3)
544+ let df = br(cJ)
545+ let dg = bs()
546+ let dh = ((dG * aT) / 2)
547+ let di = h(this, dg)
548+ let bJ = bB(false)
549+ let dI = if (dE)
529550 then nil
530- else [IntegerEntry(ds, (aQ + 1)), StringEntry(ba(ct), cx), StringEntry(bb(cx), ct)]
531- $Tuple2(((((dx ++ ca(ct, cx, dr, bD, aT, bE, bF, bi)) ++ bI(dr, aT, 1, if (dt)
551+ else [IntegerEntry(dD, (aQ + 1)), StringEntry(ba(cF), cJ), StringEntry(bb(cJ), cF)]
552+ $Tuple2(((((dI ++ cm(cF, cJ, dC, bP, aT, bQ, bR, bi)) ++ bU(dC, aT, 1, if (dE)
532553 then 0
533- else 1)) :+ bA("lock", ct, dr, bD, aT, bE, bF, aD)) ++ [IntegerEntry(cL, cN), IntegerEntry(cX, (cY + dv))]), dv)
554+ else 1)) :+ bM("lock", cF, dC, bP, aT, bQ, bR, aD)) ++ [IntegerEntry(cX, cZ), IntegerEntry(bv(), (bJ + dG))]), dG)
534555 }
535556 }
536557 }
538559
539560
540561 @Callable(aD)
541-func constructor (dy,dz,av,dA,dB,as) = {
542- let dC = aC(aD)
543- if ((dC == dC))
544- then ([IntegerEntry(aZ(), 0), StringEntry(aq(), ay(dz, av, dA, dB, as)), StringEntry(x(), dy)] ++ bI(0, 0, 0, 0))
562+func constructor (dJ,dK,av,dL,dM,as) = {
563+ let dN = aC(aD)
564+ if ((dN == dN))
565+ then ([IntegerEntry(aZ(), 0), StringEntry(aq(), ay(dK, av, dL, dM, as)), StringEntry(x(), dJ)] ++ bU(0, 0, 0, 0))
545566 else throw("Strict value is not equal to itself.")
546567 }
547568
548569
549570
550571 @Callable(aD)
551-func lockRef (aT,dD,dE) = {
552- let dF = do(aD, aT)
553- let dG = dF._1
554- let dv = dF._2
555- let dH = toString(aD.caller)
556- let dI = if (if ((dD == ""))
572+func lockRef (aT,dO,dP) = {
573+ let dQ = dz(aD, aT)
574+ let dR = dQ._1
575+ let dG = dQ._2
576+ let dS = toString(aD.caller)
577+ let dT = if (if ((dO == ""))
557578 then true
558- else (dE == base58''))
579+ else (dP == base58''))
559580 then unit
560- else invoke(t, "createPair", [w, dD, dH, dE], nil)
561- if ((dI == dI))
581+ else invoke(t, "createPair", [w, dO, dS, dP], nil)
582+ if ((dT == dT))
562583 then {
563- let dJ = invoke(as, "updateReferralActivity", [toString(aD.caller), dv], nil)
564- if ((dJ == dJ))
565- then $Tuple2(dG, unit)
584+ let dU = invoke(as, "updateReferralActivity", [toString(aD.caller), dG], nil)
585+ if ((dU == dU))
586+ then $Tuple2(dR, unit)
566587 else throw("Strict value is not equal to itself.")
567588 }
568589 else throw("Strict value is not equal to itself.")
572593
573594 @Callable(aD)
574595 func lock (aT) = {
575- let dK = do(aD, aT)
576- let dG = dK._1
577- let dv = dK._2
578- let dJ = invoke(as, "updateReferralActivity", [toString(aD.caller), dv], nil)
579- if ((dJ == dJ))
580- then $Tuple2(dG, unit)
596+ let dV = dz(aD, aT)
597+ let dR = dV._1
598+ let dG = dV._2
599+ let dU = invoke(as, "updateReferralActivity", [toString(aD.caller), dG], nil)
600+ if ((dU == dU))
601+ then $Tuple2(dR, unit)
581602 else throw("Strict value is not equal to itself.")
582603 }
583604
584605
585606
586607 @Callable(aD)
587-func increaseLock (dL) = {
588- let dp = ar()
589- let dq = dp[al]
590- let au = fromBase58String(dq)
591- let aw = parseIntValue(dp[an])
592- let ax = parseIntValue(dp[ao])
593- let dr = ci(aD, au)
594- let ct = toString(aD.caller)
595- let cw = aO(ct)
596- let cx = cw[aG]
597- let dM = parseIntValue(cw[aH])
598- let bD = parseIntValue(cw[aI])
599- let dN = parseIntValue(cw[aJ])
600- let dO = (bD + dN)
601- let dP = max([(dO - height), 0])
602- let dQ = (dM + dr)
603- let dR = (dP + dL)
604- if ((0 > dL))
608+func increaseLock (dW) = {
609+ let dA = ar()
610+ let dB = dA[al]
611+ let au = fromBase58String(dB)
612+ let aw = parseIntValue(dA[an])
613+ let ax = parseIntValue(dA[ao])
614+ let dC = cu(aD, au)
615+ let cF = toString(aD.caller)
616+ let cI = aO(cF)
617+ let cJ = cI[aG]
618+ let dX = parseIntValue(cI[aH])
619+ let bP = parseIntValue(cI[aI])
620+ let dY = parseIntValue(cI[aJ])
621+ let dZ = (bP + dY)
622+ let ea = max([(dZ - height), 0])
623+ let eb = (dX + dC)
624+ let ec = (ea + dW)
625+ if ((0 > dW))
605626 then throw("duration is less then zero")
606- else if ((aw > dR))
627+ else if ((aw > ec))
607628 then throw(("lockDurationNew is less then minLockDuration=" + toString(aw)))
608- else if ((dR > ax))
629+ else if ((ec > ax))
609630 then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(ax)))
610631 else {
611- let du = fraction(dR, c, ax)
612- let dv = fraction(dQ, du, c)
613- let dJ = invoke(as, "updateReferralActivity", [toString(aD.caller), dv], nil)
614- if ((dJ == dJ))
632+ let dF = fraction(ec, c, ax)
633+ let dG = fraction(eb, dF, c)
634+ let dU = invoke(as, "updateReferralActivity", [toString(aD.caller), dG], nil)
635+ if ((dU == dU))
615636 then {
616- let dS = height
617- let dw = n(invoke(as, "calcGwxParamsREADONLY", [dv, dS, dR], nil))
618- let bE = q(dw[0])
619- let bF = q(dw[1])
620- let bi = toString(q(dw[2]))
621- let cG = k(bx, ae())
622- let cH = k(bx, ag())
623- let cI = k(bx, ai())
624- let bY = if ((height > cI))
625- then cI
637+ let ed = height
638+ let dH = n(invoke(as, "calcGwxParamsREADONLY", [dG, ed, ec], nil))
639+ let bQ = q(dH[0])
640+ let bR = q(dH[1])
641+ let bi = toString(q(dH[2]))
642+ let cS = k(by, ae())
643+ let cT = k(by, ag())
644+ let cU = k(by, ai())
645+ let ck = if ((height > cU))
646+ then cU
626647 else height
627- let cJ = max([(bY - cH), 0])
628- let cL = bo(cx)
629- let cM = h(this, cL)
630- let cN = (((cG * cJ) * 2) / 3)
631- let cO = (cN - cM)
632- if ((0 > cO))
648+ let cV = max([(ck - cT), 0])
649+ let cX = bo(cJ)
650+ let cY = h(this, cX)
651+ let cZ = (((cS * cV) * 2) / 3)
652+ let da = (cZ - cY)
653+ if ((0 > da))
633654 then throw("wrong calculations")
634655 else {
635- let cT = br(cx)
636- let cU = bs()
637- let cV = h(this, cT)
638- let cW = h(this, cU)
639- let dT = cq(ct)
640- let dU = (dv - dT)
641- if ((0 > dU))
642- then throw(("gwxDiff is less then 0: " + toString(dU)))
656+ let df = br(cJ)
657+ let dg = bs()
658+ let dh = h(this, df)
659+ let di = h(this, dg)
660+ let ee = cC(cF)
661+ let ef = (dG - ee)
662+ if ((0 > ef))
663+ then throw(("gwxDiff is less then 0: " + toString(ef)))
643664 else {
644- let cX = bv()
645- let cY = valueOrElse(getInteger(this, cX), 0)
646- let da = bt(cx)
647- let db = h(this, da)
648- let di = fraction(cO, dT, cY)
649- let dV = ((dv * dR) / 2)
650- let dW = ((dT * dP) / 2)
651- let dX = (dV - dW)
652- (((ca(ct, cx, dQ, dS, dR, bE, bF, bi) ++ bI(dr, dL, 0, 0)) :+ bA("lock", ct, dr, bD, dR, bE, bF, aD)) ++ [IntegerEntry(cX, (cY + dU))])
665+ let bJ = bB(false)
666+ let dj = bB(true)
667+ let dl = bt(cJ)
668+ let dm = h(this, dl)
669+ let dt = fraction(da, ee, dj)
670+ let eg = ((dG * ec) / 2)
671+ let eh = ((ee * ea) / 2)
672+ let ei = (eg - eh)
673+ (((cm(cF, cJ, eb, ed, ec, bQ, bR, bi) ++ bU(dC, dW, 0, 0)) :+ bM("lock", cF, dC, bP, ec, bQ, bR, aD)) ++ [IntegerEntry(bv(), (bJ + ef))])
653674 }
654675 }
655676 }
660681
661682
662683 @Callable(aD)
663-func claimWxBoost (cs,ct) = if ((by != aD.caller))
684+func claimWxBoost (cE,cF) = if ((bz != aD.caller))
664685 then throw("permissions denied")
665686 else {
666- let dY = cr(cs, ct, false)
667- let dl = dY._1
668- let dm = dY._2
669- let dn = dY._3
670- $Tuple2(dm, [dl])
687+ let ej = cD(cE, cF, false)
688+ let dw = ej._1
689+ let dx = ej._2
690+ let dy = ej._3
691+ $Tuple2(dx, [dw])
671692 }
672693
673694
674695
675696 @Callable(aD)
676-func claimWxBoostREADONLY (cs,ct) = {
677- let dZ = cr(cs, ct, true)
678- let dl = dZ._1
679- let dm = dZ._2
680- let dn = dZ._3
681- $Tuple2(nil, [dl, dn])
697+func claimWxBoostREADONLY (cE,cF) = {
698+ let ek = cD(cE, cF, true)
699+ let dw = ek._1
700+ let dx = ek._2
701+ let dy = ek._3
702+ $Tuple2(nil, [dw, dy])
682703 }
683704
684705
685706
686707 @Callable(aD)
687708 func unlock (aN) = {
688- let cw = aO(aN)
689- let cx = cw[aG]
690- let dM = parseIntValue(cw[aH])
691- let bD = parseIntValue(cw[aI])
692- let dN = parseIntValue(cw[aJ])
693- let dO = (bD + dN)
694- let dp = ar()
695- let au = fromBase58String(dp[al])
696- if ((dO >= height))
697- then throw((("wait " + toString(dO)) + " to unlock"))
698- else if ((0 >= dM))
709+ let cI = aO(aN)
710+ let cJ = cI[aG]
711+ let dX = parseIntValue(cI[aH])
712+ let bP = parseIntValue(cI[aI])
713+ let dY = parseIntValue(cI[aJ])
714+ let dZ = (bP + dY)
715+ let dA = ar()
716+ let au = fromBase58String(dA[al])
717+ if ((dZ >= height))
718+ then throw((("wait " + toString(dZ)) + " to unlock"))
719+ else if ((0 >= dX))
699720 then throw("nothing to unlock")
700721 else {
701722 let bi = valueOrElse(getInteger(as, aj()), 0)
702- (((ca(aN, cx, 0, bD, dN, 0, 0, toString(bi)) ++ bI(-(dM), 0, 0, -1)) :+ bA("unlock", aN, dM, bD, dN, 0, 0, aD)) :+ ScriptTransfer(addressFromStringValue(aN), dM, au))
723+ (((cm(aN, cJ, 0, bP, dY, 0, 0, toString(bi)) ++ bU(-(dX), 0, 0, -1)) :+ bM("unlock", aN, dX, bP, dY, 0, 0, aD)) :+ ScriptTransfer(addressFromStringValue(aN), dX, au))
703724 }
704725 }
705726
707728
708729 @Callable(aD)
709730 func gwxUserInfoREADONLY (aN) = {
710- let aX = cq(aN)
731+ let aX = cC(aN)
711732 $Tuple2(nil, [aX])
712733 }
713734
714735
715736
716737 @Callable(aD)
717-func getUserGwxAmountAtHeightREADONLY (aN,cm) = {
718- let aX = cl(aN, cm)
738+func getUserGwxAmountAtHeightREADONLY (aN,cy) = {
739+ let aX = cx(aN, cy)
719740 $Tuple2(nil, aX)
720741 }
721742
722743
723744
724745 @Callable(aD)
725-func setManager (ea) = {
726- let dC = aC(aD)
727- if ((dC == dC))
746+func getTotalCachedGwxREADONLY () = $Tuple2(nil, bB(true))
747+
748+
749+
750+@Callable(aD)
751+func setManager (el) = {
752+ let dN = aC(aD)
753+ if ((dN == dN))
728754 then {
729- let eb = fromBase58String(ea)
730- if ((eb == eb))
731- then [StringEntry(ad(), ea)]
755+ let em = fromBase58String(el)
756+ if ((em == em))
757+ then [StringEntry(ad(), el)]
732758 else throw("Strict value is not equal to itself.")
733759 }
734760 else throw("Strict value is not equal to itself.")
738764
739765 @Callable(aD)
740766 func confirmManager () = {
741- let ec = aB()
742- let ed = if (isDefined(ec))
767+ let en = aB()
768+ let eo = if (isDefined(en))
743769 then true
744770 else throw("No pending manager")
745- if ((ed == ed))
771+ if ((eo == eo))
746772 then {
747- let ee = if ((aD.callerPublicKey == value(ec)))
773+ let ep = if ((aD.callerPublicKey == value(en)))
748774 then true
749775 else throw("You are not pending manager")
750- if ((ee == ee))
751- then [StringEntry(ac(), toBase58String(value(ec))), DeleteEntry(ad())]
776+ if ((ep == ep))
777+ then [StringEntry(ac(), toBase58String(value(en))), DeleteEntry(ad())]
752778 else throw("Strict value is not equal to itself.")
753779 }
754780 else throw("Strict value is not equal to itself.")
755781 }
756782
757783
758-@Verifier(ef)
759-func eg () = {
760- let eh = {
784+@Verifier(eq)
785+func er () = {
786+ let es = {
761787 let o = az()
762788 if ($isInstanceOf(o, "ByteVector"))
763789 then {
765791 aF
766792 }
767793 else if ($isInstanceOf(o, "Unit"))
768- then ef.senderPublicKey
794+ then eq.senderPublicKey
769795 else throw("Match error")
770796 }
771- sigVerify(ef.bodyBytes, ef.proofs[0], eh)
797+ sigVerify(eq.bodyBytes, eq.proofs[0], es)
772798 }
773799
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = 100000000
99
1010 let d = c
1111
1212 func e (f,g) = valueOrErrorMessage(getString(f, g), (("mandatory this." + g) + " is not defined"))
1313
1414
1515 func h (f,g) = valueOrElse(getInteger(f, g), 0)
1616
1717
1818 func i (f,g,j) = valueOrElse(getInteger(f, g), j)
1919
2020
2121 func k (f,g) = valueOrErrorMessage(getInteger(f, g), (("mandatory this." + g) + " is not defined"))
2222
2323
2424 func l (m) = if ((0 > m))
2525 then -(m)
2626 else m
2727
2828
2929 func n (m) = {
3030 let o = m
3131 if ($isInstanceOf(o, "List[Any]"))
3232 then {
3333 let p = o
3434 p
3535 }
3636 else throw("fail to cast into List[Any]")
3737 }
3838
3939
4040 func q (m) = {
4141 let o = m
4242 if ($isInstanceOf(o, "Int"))
4343 then {
4444 let r = o
4545 r
4646 }
4747 else throw("fail to cast into Int")
4848 }
4949
5050
5151 func s () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5252
5353
5454 let t = addressFromStringValue(e(this, s()))
5555
5656 let u = makeString(["%s%s", "referral", "programName"], a)
5757
5858 let v = "wxlock"
5959
6060 let w = valueOrElse(getString(this, u), v)
6161
6262 func x () = "%s%s__config__factoryAddress"
6363
6464
6565 let y = 1
6666
6767 let z = 2
6868
6969 let A = 3
7070
7171 let B = 4
7272
7373 let C = 5
7474
7575 let D = 6
7676
7777 let E = 7
7878
7979 let F = 8
8080
8181 let G = 9
8282
8383 let H = 10
8484
8585 let I = 11
8686
8787 func J () = "%s__factoryConfig"
8888
8989
9090 func K (L) = makeString(["%s%s%s", L, "mappings__lpAsset2PoolContract"], a)
9191
9292
9393 func M () = "%s__lpTokensList"
9494
9595
9696 func N (L) = makeString(["%s%s%s", L, "mappings__lpAsset2PoolContract"], a)
9797
9898
9999 func O (P) = makeString(["%s%s", "poolWeight", P], a)
100100
101101
102102 func Q (R,S) = ((("%s%s__poolWeight__" + R) + "__") + toString(S))
103103
104104
105105 func T () = addressFromStringValue(e(this, x()))
106106
107107
108108 func U () = split(valueOrElse(getString(T(), M()), ""), a)
109109
110110
111111 func V (W) = split(e(W, J()), a)
112112
113113
114114 func X (Y) = addressFromStringValue(Y[z])
115115
116116
117117 func Z (Y) = addressFromStringValue(Y[C])
118118
119119
120120 func aa (Y) = addressFromStringValue(Y[y])
121121
122122
123123 func ab (Y) = addressFromStringValue(Y[H])
124124
125125
126126 func ac () = "%s__managerPublicKey"
127127
128128
129129 func ad () = "%s__pendingManagerPublicKey"
130130
131131
132132 func ae () = "%s%s__ratePerBlock__current"
133133
134134
135135 func af () = "%s%s__ratePerBlockMax__current"
136136
137137
138138 func ag () = "%s%s__emission__startBlock"
139139
140140
141141 func ah () = "%s%s__emission__duration"
142142
143143
144144 func ai () = "%s%s__emission__endBlock"
145145
146146
147147 func aj () = "%s__nextPeriod"
148148
149149
150150 func ak () = "%s%s__gwxRewardEmissionPart__startHeight"
151151
152152
153153 let al = 1
154154
155155 let am = 2
156156
157157 let an = 3
158158
159159 let ao = 4
160160
161161 let ap = 5
162162
163163 func aq () = "%s__config"
164164
165165
166166 func ar () = split(e(this, aq()), a)
167167
168168
169169 let as = addressFromStringValue(ar()[ap])
170170
171171 func at (au,av,aw,ax,as) = makeString(["%s%d%d%d", au, av, aw, ax, as], a)
172172
173173
174174 func ay (au,av,aw,ax,as) = at(au, toString(av), toString(aw), toString(ax), as)
175175
176176
177177 func az () = {
178178 let o = getString(ac())
179179 if ($isInstanceOf(o, "String"))
180180 then {
181181 let aA = o
182182 fromBase58String(aA)
183183 }
184184 else if ($isInstanceOf(o, "Unit"))
185185 then unit
186186 else throw("Match error")
187187 }
188188
189189
190190 func aB () = {
191191 let o = getString(ad())
192192 if ($isInstanceOf(o, "String"))
193193 then {
194194 let aA = o
195195 fromBase58String(aA)
196196 }
197197 else if ($isInstanceOf(o, "Unit"))
198198 then unit
199199 else throw("Match error")
200200 }
201201
202202
203203 func aC (aD) = {
204204 let aE = throw("Permission denied")
205205 let o = az()
206206 if ($isInstanceOf(o, "ByteVector"))
207207 then {
208208 let aF = o
209209 if ((aD.callerPublicKey == aF))
210210 then true
211211 else aE
212212 }
213213 else if ($isInstanceOf(o, "Unit"))
214214 then if ((aD.caller == this))
215215 then true
216216 else aE
217217 else throw("Match error")
218218 }
219219
220220
221221 let aG = 1
222222
223223 let aH = 2
224224
225225 let aI = 3
226226
227227 let aJ = 4
228228
229229 let aK = 5
230230
231231 let aL = 6
232232
233233 func aM (aN) = makeString(["%s%s__lock", aN], a)
234234
235235
236236 func aO (aN) = split(e(this, aM(aN)), a)
237237
238238
239239 func aP (aQ,aR,aS,aT,aU,aV,aW,aX) = makeString(["%d%d%d%d%d%d%d%d", aQ, aR, aS, aT, aU, aV, aW, aX], a)
240240
241241
242242 func aY (aQ,aR,aS,aT,aU,aV,aX) = aP(aQ, toString(aR), toString(aS), toString(aT), toString(aU), toString(aV), toString(lastBlock.timestamp), toString(aX))
243243
244244
245245 func aZ () = "%s__nextUserNum"
246246
247247
248248 func ba (aN) = makeString(["%s%s%s__mapping__user2num", aN], a)
249249
250250
251251 func bb (S) = makeString(["%s%s%s__mapping__num2user", S], a)
252252
253253
254254 func bc (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "amount"], a)
255255
256256
257257 func bd (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "start"], a)
258258
259259
260260 func be (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "duration"], a)
261261
262262
263263 func bf (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "k"], a)
264264
265265
266266 func bg (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "b"], a)
267267
268268
269269 func bh (aQ,bi) = makeString(["%s%d%s%d__paramByPeriod", aQ, "k", bi], a)
270270
271271
272272 func bj (aQ,bi) = makeString(["%s%d%s%d__paramByPeriod", aQ, "b", bi], a)
273273
274274
275275 func bk () = "%s%s__stats__activeTotalLocked"
276276
277277
278278 func bl () = "%s%s__stats__locksDurationSumInBlocks"
279279
280280
281281 func bm () = "%s%s__stats__locksCount"
282282
283283
284284 func bn () = "%s%s__stats__activeUsersCount"
285285
286286
287287 func bo (aQ) = makeString(["%s%d__userBoostEmissionLastInt", aQ], a)
288288
289289
290290 func bp (aQ,bq) = makeString(["%s%d__userBoostEmissionLastInt", aQ, bq], a)
291291
292292
293293 func br (aQ) = makeString(["%s%d__maxBoostInt", aQ], a)
294294
295295
296296 func bs () = "%s%s__maxBoostInt__total"
297297
298298
299299 func bt (aQ) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aQ], a)
300300
301301
302302 func bu (aQ) = makeString(["%s%d__userBoostClaimed", aQ], a)
303303
304304
305305 func bv () = "%s%s__gwxCached__total"
306306
307307
308-let bw = T()
308+func bw () = "%s__gwxCachedTotalCorrective"
309309
310-let Y = V(bw)
311310
312-let bx = Z(Y)
311+let bx = T()
313312
314-let by = aa(Y)
313+let Y = V(bx)
315314
316-let bz = ab(Y)
315+let by = Z(Y)
317316
318-func bA (bB,bC,aR,bD,aT,bE,bF,aD) = {
319- let bG = makeString(["%s%s%s%s__history", bB, bC, toBase58String(aD.transactionId)], a)
320- let bH = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aR), toString(bD), toString(aT), toString(bE), toString(bF)], a)
321- StringEntry(bG, bH)
317+let bz = aa(Y)
318+
319+let bA = ab(Y)
320+
321+func bB (bC) = {
322+ let bD = makeString(["%s", "votingEmissionContract"], a)
323+ let bE = addressFromStringValue(getStringValue(bx, bD))
324+ let bF = makeString(["%s", "currentEpochUi"], a)
325+ let bG = getIntegerValue(bE, bF)
326+ let bH = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
327+ let bI = getInteger(this, bH)
328+ let bJ = valueOrElse(getInteger(this, bv()), 0)
329+ let bK = if (isDefined(bI))
330+ then (bG >= value(bI))
331+ else false
332+ let bL = if (if (bK)
333+ then bC
334+ else false)
335+ then valueOrElse(getInteger(this, bw()), 0)
336+ else 0
337+ max([0, (bJ + bL)])
322338 }
323339
324340
325-func bI (bJ,bK,bL,bM) = {
326- let bN = bl()
327- let bO = bm()
328- let bP = bn()
329- let bQ = bk()
330- let bR = h(this, bN)
331- let bS = h(this, bO)
332- let bT = h(this, bP)
333- let bU = h(this, bQ)
334-[IntegerEntry(bN, (bR + bK)), IntegerEntry(bO, (bS + bL)), IntegerEntry(bP, (bT + bM)), IntegerEntry(bQ, (bU + bJ))]
341+func bM (bN,bO,aR,bP,aT,bQ,bR,aD) = {
342+ let bS = makeString(["%s%s%s%s__history", bN, bO, toBase58String(aD.transactionId)], a)
343+ let bT = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aR), toString(bP), toString(aT), toString(bQ), toString(bR)], a)
344+ StringEntry(bS, bT)
335345 }
336346
337347
338-func bV (bW,bX,bY) = {
339- let bZ = 1000
340- (((bW * bY) + bX) / bZ)
348+func bU (bV,bW,bX,bY) = {
349+ let bZ = bl()
350+ let ca = bm()
351+ let cb = bn()
352+ let cc = bk()
353+ let cd = h(this, bZ)
354+ let ce = h(this, ca)
355+ let cf = h(this, cb)
356+ let cg = h(this, cc)
357+[IntegerEntry(bZ, (cd + bW)), IntegerEntry(ca, (ce + bX)), IntegerEntry(cb, (cf + bY)), IntegerEntry(cc, (cg + bV))]
341358 }
342359
343360
344-func ca (aN,aQ,aR,aS,aT,bE,bF,bi) = {
345- let cb = bc(aQ)
346- let cc = bd(aQ)
347- let cd = be(aQ)
348- let ce = bf(aQ)
349- let cf = bg(aQ)
350- let cg = bh(aQ, bi)
351- let ch = bj(aQ, bi)
352- let aX = bV(bE, bF, height)
353-[IntegerEntry(cb, aR), IntegerEntry(cc, aS), IntegerEntry(cd, aT), IntegerEntry(ce, bE), IntegerEntry(cf, bF), IntegerEntry(cg, bE), IntegerEntry(ch, bF), StringEntry(aM(aN), aY(aQ, aR, aS, aT, bE, bF, aX))]
361+func ch (ci,cj,ck) = {
362+ let cl = 1000
363+ (((ci * ck) + cj) / cl)
354364 }
355365
356366
357-func ci (aD,cj) = if ((size(aD.payments) > 1))
367+func cm (aN,aQ,aR,aS,aT,bQ,bR,bi) = {
368+ let cn = bc(aQ)
369+ let co = bd(aQ)
370+ let cp = be(aQ)
371+ let cq = bf(aQ)
372+ let cr = bg(aQ)
373+ let cs = bh(aQ, bi)
374+ let ct = bj(aQ, bi)
375+ let aX = ch(bQ, bR, height)
376+[IntegerEntry(cn, aR), IntegerEntry(co, aS), IntegerEntry(cp, aT), IntegerEntry(cq, bQ), IntegerEntry(cr, bR), IntegerEntry(cs, bQ), IntegerEntry(ct, bR), StringEntry(aM(aN), aY(aQ, aR, aS, aT, bQ, bR, aX))]
377+ }
378+
379+
380+func cu (aD,cv) = if ((size(aD.payments) > 1))
358381 then throw("only one payment is allowed")
359382 else if ((size(aD.payments) == 0))
360383 then 0
361384 else {
362- let ck = aD.payments[0]
363- if ((value(ck.assetId) != cj))
385+ let cw = aD.payments[0]
386+ if ((value(cw.assetId) != cv))
364387 then throw("invalid asset id in payment")
365- else ck.amount
388+ else cw.amount
366389 }
367390
368391
369-func cl (aN,cm) = {
370- let cn = "empty"
371- let co = ba(aN)
372- let aQ = valueOrElse(getString(co), cn)
373- let bE = valueOrElse(getInteger(bf(aQ)), 0)
374- let bF = valueOrElse(getInteger(bg(aQ)), 0)
375- let cp = bV(bE, bF, cm)
376- let aX = if ((0 > cp))
392+func cx (aN,cy) = {
393+ let cz = "empty"
394+ let cA = ba(aN)
395+ let aQ = valueOrElse(getString(cA), cz)
396+ let bQ = valueOrElse(getInteger(bf(aQ)), 0)
397+ let bR = valueOrElse(getInteger(bg(aQ)), 0)
398+ let cB = ch(bQ, bR, cy)
399+ let aX = if ((0 > cB))
377400 then 0
378- else cp
401+ else cB
379402 aX
380403 }
381404
382405
383-func cq (aN) = cl(aN, height)
406+func cC (aN) = cx(aN, height)
384407
385408
386-func cr (cs,ct,cu) = {
387- let cn = "EMPTY"
388- let cv = valueOrElse(getString(this, aM(ct)), cn)
389- if ((cv == cn))
409+func cD (cE,cF,cG) = {
410+ let cz = "EMPTY"
411+ let cH = valueOrElse(getString(this, aM(cF)), cz)
412+ if ((cH == cz))
390413 then $Tuple3(0, nil, "userRecord::is::empty")
391414 else {
392- let cw = split(cv, a)
393- let cx = cw[aG]
394- let cy = valueOrElse(getInteger(bz, ak()), 0)
395- let cz = "empty"
396- let cA = if ((cs != cz))
415+ let cI = split(cH, a)
416+ let cJ = cI[aG]
417+ let cK = valueOrElse(getInteger(bA, ak()), 0)
418+ let cL = "empty"
419+ let cM = if ((cE != cL))
397420 then {
398- let cB = valueOrErrorMessage(getString(bw, K(cs)), ("unsupported lp asset " + cs))
399- let cC = getIntegerValue(bw, O(cB))
400- let cD = valueOrElse(getInteger(bw, Q(cB, 0)), cC)
401- $Tuple2(cD, cC)
421+ let cN = valueOrErrorMessage(getString(bx, K(cE)), ("unsupported lp asset " + cE))
422+ let cO = getIntegerValue(bx, O(cN))
423+ let cP = valueOrElse(getInteger(bx, Q(cN, 0)), cO)
424+ $Tuple2(cP, cO)
402425 }
403- else if (cu)
426+ else if (cG)
404427 then $Tuple2(0, 0)
405- else throw(("not readonly mode: unsupported lp asset " + cs))
406- let cE = cA._1
407- let cF = cA._2
408- let cG = k(bx, ae())
409- let cH = k(bx, ag())
410- let cI = k(bx, ai())
411- let bY = if ((height > cI))
412- then cI
428+ else throw(("not readonly mode: unsupported lp asset " + cE))
429+ let cQ = cM._1
430+ let cR = cM._2
431+ let cS = k(by, ae())
432+ let cT = k(by, ag())
433+ let cU = k(by, ai())
434+ let ck = if ((height > cU))
435+ then cU
413436 else height
414- let cJ = max([(bY - cH), 0])
415- let cK = bp(cx, cs)
416- let cL = bo(cx)
417- let cM = valueOrElse(getInteger(this, cK), h(this, cL))
418- let cN = (((cG * cJ) * 2) / 3)
419- let cO = (cN - cM)
420- let cP = fraction(cO, 3, (2 * cG))
421- let cQ = (bY - cP)
422- let cR = max([(cy - cQ), 0])
423- let cS = ((bY - cQ) - cR)
424- if (if (if ((0 > cQ))
437+ let cV = max([(ck - cT), 0])
438+ let cW = bp(cJ, cE)
439+ let cX = bo(cJ)
440+ let cY = valueOrElse(getInteger(this, cW), h(this, cX))
441+ let cZ = (((cS * cV) * 2) / 3)
442+ let da = (cZ - cY)
443+ let db = fraction(da, 3, (2 * cS))
444+ let dc = (ck - db)
445+ let dd = max([(cK - dc), 0])
446+ let de = ((ck - dc) - dd)
447+ if (if (if ((0 > dc))
425448 then true
426- else (0 > cS))
449+ else (0 > de))
427450 then true
428- else (l(((cR + cS) - cP)) >= 1))
429- then throw(((((((("invalid udh calc: udh=" + toString(cP)) + " uLastH=") + toString(cQ)) + " udh0=") + toString(cR)) + " udh1=") + toString(cS)))
430- else if ((0 > cO))
451+ else (l(((dd + de) - db)) >= 1))
452+ then throw(((((((("invalid udh calc: udh=" + toString(db)) + " uLastH=") + toString(dc)) + " udh0=") + toString(dd)) + " udh1=") + toString(de)))
453+ else if ((0 > da))
431454 then throw("wrong calculations")
432455 else {
433- let cT = br(cx)
434- let cU = bs()
435- let cV = h(this, cT)
436- let cW = h(this, cU)
437- let cX = bv()
438- let cY = valueOrElse(getInteger(this, cX), 0)
439- let cZ = cq(ct)
440- let da = bt(cx)
441- let db = h(this, da)
442- let dc = if ((cP == 0))
456+ let df = br(cJ)
457+ let dg = bs()
458+ let dh = h(this, df)
459+ let di = h(this, dg)
460+ let dj = bB(true)
461+ let dk = cC(cF)
462+ let dl = bt(cJ)
463+ let dm = h(this, dl)
464+ let dn = if ((db == 0))
443465 then 0
444- else fraction(cO, cR, cP)
445- let dd = if ((cP == 0))
466+ else fraction(da, dd, db)
467+ let do = if ((db == 0))
446468 then 0
447- else fraction(cO, cS, cP)
448- let de = fraction(dc, cE, d)
449- let df = fraction(dd, cF, d)
450- let dg = if ((cY == 0))
469+ else fraction(da, de, db)
470+ let dp = fraction(dn, cQ, d)
471+ let dq = fraction(do, cR, d)
472+ let dr = if ((dj == 0))
451473 then 0
452- else fraction(de, cZ, cY)
453- let dh = if ((cY == 0))
474+ else fraction(dp, dk, dj)
475+ let ds = if ((dj == 0))
454476 then 0
455- else fraction(df, cZ, cY)
456- let di = (dg + dh)
457- let dj = bu(cx)
458- let dk = h(this, dj)
459- let dl = (di - dk)
460- let dm = [IntegerEntry(cK, cN)]
461- let dn = makeString([toString(cM), toString(cO), toString(dk), toString(dl), toString(cE), toString(cF), toString(bY), toString(cP), toString(cQ), toString(cR), toString(cS), toString(cZ), toString(cY)], ":")
462- $Tuple3(di, dm, dn)
477+ else fraction(dq, dk, dj)
478+ let dt = (dr + ds)
479+ let du = bu(cJ)
480+ let dv = h(this, du)
481+ let dw = (dt - dv)
482+ let dx = [IntegerEntry(cW, cZ)]
483+ let dy = makeString([toString(cY), toString(da), toString(dv), toString(dw), toString(cQ), toString(cR), toString(ck), toString(db), toString(dc), toString(dd), toString(de), toString(dk), toString(dj)], ":")
484+ $Tuple3(dt, dx, dy)
463485 }
464486 }
465487 }
466488
467489
468-func do (aD,aT) = {
469- let dp = ar()
470- let dq = dp[al]
471- let au = fromBase58String(dq)
472- let av = parseIntValue(dp[am])
473- let aw = parseIntValue(dp[an])
474- let ax = parseIntValue(dp[ao])
490+func dz (aD,aT) = {
491+ let dA = ar()
492+ let dB = dA[al]
493+ let au = fromBase58String(dB)
494+ let av = parseIntValue(dA[am])
495+ let aw = parseIntValue(dA[an])
496+ let ax = parseIntValue(dA[ao])
475497 if ((size(aD.payments) != 1))
476498 then throw("invalid payment - exact one payment must be attached")
477499 else {
478- let ck = aD.payments[0]
479- let dr = ck.amount
480- if ((au != value(ck.assetId)))
481- then throw((("invalid asset is in payment - " + dq) + " is expected"))
500+ let cw = aD.payments[0]
501+ let dC = cw.amount
502+ if ((au != value(cw.assetId)))
503+ then throw((("invalid asset is in payment - " + dB) + " is expected"))
482504 else {
483- let ds = aZ()
484- let ct = toString(aD.caller)
485- let dt = isDefined(getString(ba(ct)))
486- let cx = if (dt)
487- then value(getString(ba(ct)))
488- else toString(k(this, ds))
489- let aQ = parseIntValue(cx)
490- let bD = height
491- let cc = bd(cx)
492- let cd = be(cx)
493- let cb = bc(cx)
494- if ((av > dr))
505+ let dD = aZ()
506+ let cF = toString(aD.caller)
507+ let dE = isDefined(getString(ba(cF)))
508+ let cJ = if (dE)
509+ then value(getString(ba(cF)))
510+ else toString(k(this, dD))
511+ let aQ = parseIntValue(cJ)
512+ let bP = height
513+ let co = bd(cJ)
514+ let cp = be(cJ)
515+ let cn = bc(cJ)
516+ if ((av > dC))
495517 then throw(("amount is less then minLockAmount=" + toString(av)))
496518 else if ((aw > aT))
497519 then throw(("passed duration is less then minLockDuration=" + toString(aw)))
498520 else if ((aT > ax))
499521 then throw(("passed duration is greater then maxLockDuration=" + toString(ax)))
500- else if (if (dt)
501- then ((k(this, cc) + k(this, cd)) >= bD)
522+ else if (if (dE)
523+ then ((k(this, co) + k(this, cp)) >= bP)
502524 else false)
503525 then throw("there is an active lock - consider to use increaseLock")
504- else if ((h(this, cb) > 0))
505- then throw(("there are locked WXs - consider to use increaseLock " + cb))
526+ else if ((h(this, cn) > 0))
527+ then throw(("there are locked WXs - consider to use increaseLock " + cn))
506528 else {
507- let du = fraction(aT, c, ax)
508- let dv = fraction(dr, du, c)
509- let dw = n(invoke(as, "calcGwxParamsREADONLY", [dv, bD, aT], nil))
510- let bE = q(dw[0])
511- let bF = q(dw[1])
512- let bi = toString(q(dw[2]))
513- let cG = k(bx, ae())
514- let cH = k(bx, ag())
515- let cI = k(bx, ai())
516- let bY = if ((height > cI))
517- then cI
529+ let dF = fraction(aT, c, ax)
530+ let dG = fraction(dC, dF, c)
531+ let dH = n(invoke(as, "calcGwxParamsREADONLY", [dG, bP, aT], nil))
532+ let bQ = q(dH[0])
533+ let bR = q(dH[1])
534+ let bi = toString(q(dH[2]))
535+ let cS = k(by, ae())
536+ let cT = k(by, ag())
537+ let cU = k(by, ai())
538+ let ck = if ((height > cU))
539+ then cU
518540 else height
519- let cJ = max([(bY - cH), 0])
520- let cL = bo(cx)
521- let cN = (((cG * cJ) * 2) / 3)
522- let cT = br(cx)
523- let cU = bs()
524- let cV = ((dv * aT) / 2)
525- let cW = h(this, cU)
526- let cX = bv()
527- let cY = valueOrElse(getInteger(this, cX), 0)
528- let dx = if (dt)
541+ let cV = max([(ck - cT), 0])
542+ let cX = bo(cJ)
543+ let cZ = (((cS * cV) * 2) / 3)
544+ let df = br(cJ)
545+ let dg = bs()
546+ let dh = ((dG * aT) / 2)
547+ let di = h(this, dg)
548+ let bJ = bB(false)
549+ let dI = if (dE)
529550 then nil
530- else [IntegerEntry(ds, (aQ + 1)), StringEntry(ba(ct), cx), StringEntry(bb(cx), ct)]
531- $Tuple2(((((dx ++ ca(ct, cx, dr, bD, aT, bE, bF, bi)) ++ bI(dr, aT, 1, if (dt)
551+ else [IntegerEntry(dD, (aQ + 1)), StringEntry(ba(cF), cJ), StringEntry(bb(cJ), cF)]
552+ $Tuple2(((((dI ++ cm(cF, cJ, dC, bP, aT, bQ, bR, bi)) ++ bU(dC, aT, 1, if (dE)
532553 then 0
533- else 1)) :+ bA("lock", ct, dr, bD, aT, bE, bF, aD)) ++ [IntegerEntry(cL, cN), IntegerEntry(cX, (cY + dv))]), dv)
554+ else 1)) :+ bM("lock", cF, dC, bP, aT, bQ, bR, aD)) ++ [IntegerEntry(cX, cZ), IntegerEntry(bv(), (bJ + dG))]), dG)
534555 }
535556 }
536557 }
537558 }
538559
539560
540561 @Callable(aD)
541-func constructor (dy,dz,av,dA,dB,as) = {
542- let dC = aC(aD)
543- if ((dC == dC))
544- then ([IntegerEntry(aZ(), 0), StringEntry(aq(), ay(dz, av, dA, dB, as)), StringEntry(x(), dy)] ++ bI(0, 0, 0, 0))
562+func constructor (dJ,dK,av,dL,dM,as) = {
563+ let dN = aC(aD)
564+ if ((dN == dN))
565+ then ([IntegerEntry(aZ(), 0), StringEntry(aq(), ay(dK, av, dL, dM, as)), StringEntry(x(), dJ)] ++ bU(0, 0, 0, 0))
545566 else throw("Strict value is not equal to itself.")
546567 }
547568
548569
549570
550571 @Callable(aD)
551-func lockRef (aT,dD,dE) = {
552- let dF = do(aD, aT)
553- let dG = dF._1
554- let dv = dF._2
555- let dH = toString(aD.caller)
556- let dI = if (if ((dD == ""))
572+func lockRef (aT,dO,dP) = {
573+ let dQ = dz(aD, aT)
574+ let dR = dQ._1
575+ let dG = dQ._2
576+ let dS = toString(aD.caller)
577+ let dT = if (if ((dO == ""))
557578 then true
558- else (dE == base58''))
579+ else (dP == base58''))
559580 then unit
560- else invoke(t, "createPair", [w, dD, dH, dE], nil)
561- if ((dI == dI))
581+ else invoke(t, "createPair", [w, dO, dS, dP], nil)
582+ if ((dT == dT))
562583 then {
563- let dJ = invoke(as, "updateReferralActivity", [toString(aD.caller), dv], nil)
564- if ((dJ == dJ))
565- then $Tuple2(dG, unit)
584+ let dU = invoke(as, "updateReferralActivity", [toString(aD.caller), dG], nil)
585+ if ((dU == dU))
586+ then $Tuple2(dR, unit)
566587 else throw("Strict value is not equal to itself.")
567588 }
568589 else throw("Strict value is not equal to itself.")
569590 }
570591
571592
572593
573594 @Callable(aD)
574595 func lock (aT) = {
575- let dK = do(aD, aT)
576- let dG = dK._1
577- let dv = dK._2
578- let dJ = invoke(as, "updateReferralActivity", [toString(aD.caller), dv], nil)
579- if ((dJ == dJ))
580- then $Tuple2(dG, unit)
596+ let dV = dz(aD, aT)
597+ let dR = dV._1
598+ let dG = dV._2
599+ let dU = invoke(as, "updateReferralActivity", [toString(aD.caller), dG], nil)
600+ if ((dU == dU))
601+ then $Tuple2(dR, unit)
581602 else throw("Strict value is not equal to itself.")
582603 }
583604
584605
585606
586607 @Callable(aD)
587-func increaseLock (dL) = {
588- let dp = ar()
589- let dq = dp[al]
590- let au = fromBase58String(dq)
591- let aw = parseIntValue(dp[an])
592- let ax = parseIntValue(dp[ao])
593- let dr = ci(aD, au)
594- let ct = toString(aD.caller)
595- let cw = aO(ct)
596- let cx = cw[aG]
597- let dM = parseIntValue(cw[aH])
598- let bD = parseIntValue(cw[aI])
599- let dN = parseIntValue(cw[aJ])
600- let dO = (bD + dN)
601- let dP = max([(dO - height), 0])
602- let dQ = (dM + dr)
603- let dR = (dP + dL)
604- if ((0 > dL))
608+func increaseLock (dW) = {
609+ let dA = ar()
610+ let dB = dA[al]
611+ let au = fromBase58String(dB)
612+ let aw = parseIntValue(dA[an])
613+ let ax = parseIntValue(dA[ao])
614+ let dC = cu(aD, au)
615+ let cF = toString(aD.caller)
616+ let cI = aO(cF)
617+ let cJ = cI[aG]
618+ let dX = parseIntValue(cI[aH])
619+ let bP = parseIntValue(cI[aI])
620+ let dY = parseIntValue(cI[aJ])
621+ let dZ = (bP + dY)
622+ let ea = max([(dZ - height), 0])
623+ let eb = (dX + dC)
624+ let ec = (ea + dW)
625+ if ((0 > dW))
605626 then throw("duration is less then zero")
606- else if ((aw > dR))
627+ else if ((aw > ec))
607628 then throw(("lockDurationNew is less then minLockDuration=" + toString(aw)))
608- else if ((dR > ax))
629+ else if ((ec > ax))
609630 then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(ax)))
610631 else {
611- let du = fraction(dR, c, ax)
612- let dv = fraction(dQ, du, c)
613- let dJ = invoke(as, "updateReferralActivity", [toString(aD.caller), dv], nil)
614- if ((dJ == dJ))
632+ let dF = fraction(ec, c, ax)
633+ let dG = fraction(eb, dF, c)
634+ let dU = invoke(as, "updateReferralActivity", [toString(aD.caller), dG], nil)
635+ if ((dU == dU))
615636 then {
616- let dS = height
617- let dw = n(invoke(as, "calcGwxParamsREADONLY", [dv, dS, dR], nil))
618- let bE = q(dw[0])
619- let bF = q(dw[1])
620- let bi = toString(q(dw[2]))
621- let cG = k(bx, ae())
622- let cH = k(bx, ag())
623- let cI = k(bx, ai())
624- let bY = if ((height > cI))
625- then cI
637+ let ed = height
638+ let dH = n(invoke(as, "calcGwxParamsREADONLY", [dG, ed, ec], nil))
639+ let bQ = q(dH[0])
640+ let bR = q(dH[1])
641+ let bi = toString(q(dH[2]))
642+ let cS = k(by, ae())
643+ let cT = k(by, ag())
644+ let cU = k(by, ai())
645+ let ck = if ((height > cU))
646+ then cU
626647 else height
627- let cJ = max([(bY - cH), 0])
628- let cL = bo(cx)
629- let cM = h(this, cL)
630- let cN = (((cG * cJ) * 2) / 3)
631- let cO = (cN - cM)
632- if ((0 > cO))
648+ let cV = max([(ck - cT), 0])
649+ let cX = bo(cJ)
650+ let cY = h(this, cX)
651+ let cZ = (((cS * cV) * 2) / 3)
652+ let da = (cZ - cY)
653+ if ((0 > da))
633654 then throw("wrong calculations")
634655 else {
635- let cT = br(cx)
636- let cU = bs()
637- let cV = h(this, cT)
638- let cW = h(this, cU)
639- let dT = cq(ct)
640- let dU = (dv - dT)
641- if ((0 > dU))
642- then throw(("gwxDiff is less then 0: " + toString(dU)))
656+ let df = br(cJ)
657+ let dg = bs()
658+ let dh = h(this, df)
659+ let di = h(this, dg)
660+ let ee = cC(cF)
661+ let ef = (dG - ee)
662+ if ((0 > ef))
663+ then throw(("gwxDiff is less then 0: " + toString(ef)))
643664 else {
644- let cX = bv()
645- let cY = valueOrElse(getInteger(this, cX), 0)
646- let da = bt(cx)
647- let db = h(this, da)
648- let di = fraction(cO, dT, cY)
649- let dV = ((dv * dR) / 2)
650- let dW = ((dT * dP) / 2)
651- let dX = (dV - dW)
652- (((ca(ct, cx, dQ, dS, dR, bE, bF, bi) ++ bI(dr, dL, 0, 0)) :+ bA("lock", ct, dr, bD, dR, bE, bF, aD)) ++ [IntegerEntry(cX, (cY + dU))])
665+ let bJ = bB(false)
666+ let dj = bB(true)
667+ let dl = bt(cJ)
668+ let dm = h(this, dl)
669+ let dt = fraction(da, ee, dj)
670+ let eg = ((dG * ec) / 2)
671+ let eh = ((ee * ea) / 2)
672+ let ei = (eg - eh)
673+ (((cm(cF, cJ, eb, ed, ec, bQ, bR, bi) ++ bU(dC, dW, 0, 0)) :+ bM("lock", cF, dC, bP, ec, bQ, bR, aD)) ++ [IntegerEntry(bv(), (bJ + ef))])
653674 }
654675 }
655676 }
656677 else throw("Strict value is not equal to itself.")
657678 }
658679 }
659680
660681
661682
662683 @Callable(aD)
663-func claimWxBoost (cs,ct) = if ((by != aD.caller))
684+func claimWxBoost (cE,cF) = if ((bz != aD.caller))
664685 then throw("permissions denied")
665686 else {
666- let dY = cr(cs, ct, false)
667- let dl = dY._1
668- let dm = dY._2
669- let dn = dY._3
670- $Tuple2(dm, [dl])
687+ let ej = cD(cE, cF, false)
688+ let dw = ej._1
689+ let dx = ej._2
690+ let dy = ej._3
691+ $Tuple2(dx, [dw])
671692 }
672693
673694
674695
675696 @Callable(aD)
676-func claimWxBoostREADONLY (cs,ct) = {
677- let dZ = cr(cs, ct, true)
678- let dl = dZ._1
679- let dm = dZ._2
680- let dn = dZ._3
681- $Tuple2(nil, [dl, dn])
697+func claimWxBoostREADONLY (cE,cF) = {
698+ let ek = cD(cE, cF, true)
699+ let dw = ek._1
700+ let dx = ek._2
701+ let dy = ek._3
702+ $Tuple2(nil, [dw, dy])
682703 }
683704
684705
685706
686707 @Callable(aD)
687708 func unlock (aN) = {
688- let cw = aO(aN)
689- let cx = cw[aG]
690- let dM = parseIntValue(cw[aH])
691- let bD = parseIntValue(cw[aI])
692- let dN = parseIntValue(cw[aJ])
693- let dO = (bD + dN)
694- let dp = ar()
695- let au = fromBase58String(dp[al])
696- if ((dO >= height))
697- then throw((("wait " + toString(dO)) + " to unlock"))
698- else if ((0 >= dM))
709+ let cI = aO(aN)
710+ let cJ = cI[aG]
711+ let dX = parseIntValue(cI[aH])
712+ let bP = parseIntValue(cI[aI])
713+ let dY = parseIntValue(cI[aJ])
714+ let dZ = (bP + dY)
715+ let dA = ar()
716+ let au = fromBase58String(dA[al])
717+ if ((dZ >= height))
718+ then throw((("wait " + toString(dZ)) + " to unlock"))
719+ else if ((0 >= dX))
699720 then throw("nothing to unlock")
700721 else {
701722 let bi = valueOrElse(getInteger(as, aj()), 0)
702- (((ca(aN, cx, 0, bD, dN, 0, 0, toString(bi)) ++ bI(-(dM), 0, 0, -1)) :+ bA("unlock", aN, dM, bD, dN, 0, 0, aD)) :+ ScriptTransfer(addressFromStringValue(aN), dM, au))
723+ (((cm(aN, cJ, 0, bP, dY, 0, 0, toString(bi)) ++ bU(-(dX), 0, 0, -1)) :+ bM("unlock", aN, dX, bP, dY, 0, 0, aD)) :+ ScriptTransfer(addressFromStringValue(aN), dX, au))
703724 }
704725 }
705726
706727
707728
708729 @Callable(aD)
709730 func gwxUserInfoREADONLY (aN) = {
710- let aX = cq(aN)
731+ let aX = cC(aN)
711732 $Tuple2(nil, [aX])
712733 }
713734
714735
715736
716737 @Callable(aD)
717-func getUserGwxAmountAtHeightREADONLY (aN,cm) = {
718- let aX = cl(aN, cm)
738+func getUserGwxAmountAtHeightREADONLY (aN,cy) = {
739+ let aX = cx(aN, cy)
719740 $Tuple2(nil, aX)
720741 }
721742
722743
723744
724745 @Callable(aD)
725-func setManager (ea) = {
726- let dC = aC(aD)
727- if ((dC == dC))
746+func getTotalCachedGwxREADONLY () = $Tuple2(nil, bB(true))
747+
748+
749+
750+@Callable(aD)
751+func setManager (el) = {
752+ let dN = aC(aD)
753+ if ((dN == dN))
728754 then {
729- let eb = fromBase58String(ea)
730- if ((eb == eb))
731- then [StringEntry(ad(), ea)]
755+ let em = fromBase58String(el)
756+ if ((em == em))
757+ then [StringEntry(ad(), el)]
732758 else throw("Strict value is not equal to itself.")
733759 }
734760 else throw("Strict value is not equal to itself.")
735761 }
736762
737763
738764
739765 @Callable(aD)
740766 func confirmManager () = {
741- let ec = aB()
742- let ed = if (isDefined(ec))
767+ let en = aB()
768+ let eo = if (isDefined(en))
743769 then true
744770 else throw("No pending manager")
745- if ((ed == ed))
771+ if ((eo == eo))
746772 then {
747- let ee = if ((aD.callerPublicKey == value(ec)))
773+ let ep = if ((aD.callerPublicKey == value(en)))
748774 then true
749775 else throw("You are not pending manager")
750- if ((ee == ee))
751- then [StringEntry(ac(), toBase58String(value(ec))), DeleteEntry(ad())]
776+ if ((ep == ep))
777+ then [StringEntry(ac(), toBase58String(value(en))), DeleteEntry(ad())]
752778 else throw("Strict value is not equal to itself.")
753779 }
754780 else throw("Strict value is not equal to itself.")
755781 }
756782
757783
758-@Verifier(ef)
759-func eg () = {
760- let eh = {
784+@Verifier(eq)
785+func er () = {
786+ let es = {
761787 let o = az()
762788 if ($isInstanceOf(o, "ByteVector"))
763789 then {
764790 let aF = o
765791 aF
766792 }
767793 else if ($isInstanceOf(o, "Unit"))
768- then ef.senderPublicKey
794+ then eq.senderPublicKey
769795 else throw("Match error")
770796 }
771- sigVerify(ef.bodyBytes, ef.proofs[0], eh)
797+ sigVerify(eq.bodyBytes, eq.proofs[0], es)
772798 }
773799

github/deemru/w8io/169f3d6 
196.44 ms