tx · AuGR23H1WV8mAjnRLoKH5dQnxjNH7SeF9ifWm75DfPFJ

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.02600000 Waves

2023.08.16 14:12 [2713052] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "AuGR23H1WV8mAjnRLoKH5dQnxjNH7SeF9ifWm75DfPFJ", "fee": 2600000, "feeAssetId": null, "timestamp": 1692184224408, "version": 2, "chainId": 84, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "2Pyw3gijmHDb2siDxBzz5dAqSHDWSDcNfM52sRFifePsVG7GWZtVdtPfQug3yh3kWTTDkDbZ1qcNUZ8SGguJKuw" ], "script": "base64:BgLOLQgCEggKBggIAQEBCBIFCgMBCAISAwoBARIECgIICBIECgIICBIDCgEIEgMKAQgSAwoBCBIECgIIARIDCgEIEgASABIFCgMICAQSAwoBCBIDCgEIEgQKAggIEgQKAggIIgNTRVAiBlNDQUxFOCIFTVVMVDgiDlBPT0xXRUlHSFRNVUxUIhBjb250cmFjdEZpbGVuYW1lIgdTQ0FMRTE4IgZNVUxUMTgiCE1VTFQxOEJJIhVkdXJhdGlvbk1vbnRoc0FsbG93ZWQiC2Jsb2Nrc0luRGF5Ig1ibG9ja3NJbk1vbnRoIgd3cmFwRXJyIgNtc2ciCHRocm93RXJyIg9nZXRTdHJpbmdPckZhaWwiB2FkZHJlc3MiA2tleSIMZ2V0SW50T3JaZXJvIg9nZXRJbnRPckRlZmF1bHQiCmRlZmF1bHRWYWwiDGdldEludE9yRmFpbCIDYWJzIgN2YWwiDmVuc3VyZVBvc2l0aXZlIgF2IgFtIhtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MiHnJlZmVycmFsc0NvbnRyYWN0QWRkcmVzc09yRmFpbCIWa2V5UmVmZXJyYWxQcm9ncmFtTmFtZSIacmVmZXJyYWxQcm9ncmFtTmFtZURlZmF1bHQiE3JlZmVycmFsUHJvZ3JhbU5hbWUiEWtleUZhY3RvcnlBZGRyZXNzIhhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAiGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAiFElkeEZhY3RvcnlDZmdJZG9EYXBwIhVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAiGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAiFUlkeEZhY3RvcnlDZmdSZXN0RGFwcCIZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcCIUSWR4RmFjdG9yeUNmZ0Rhb0RhcHAiGklkeEZhY3RvcnlDZmdNYXJrZXRpbmdEYXBwIhpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcCIWSWR4RmFjdG9yeUNmZ0JpcmRzRGFwcCINa2V5RmFjdG9yeUNmZyIma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MiCmxwQXNzZXRTdHIiFGtleUZhY3RvcnlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiG2tleUZhY3RvcnlQb29sV2VpZ2h0SGlzdG9yeSILcG9vbEFkZHJlc3MiA251bSIYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsIhRyZWFkRmFjdG9yeUNmZ09yRmFpbCIHZmFjdG9yeSIYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsIgpmYWN0b3J5Q2ZnIhhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwiF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsIhlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsIhNrZXlNYW5hZ2VyUHVibGljS2V5IhZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzIh5rZXlFbWlzc2lvblJhdGVQZXJCbG9ja0N1cnJlbnQiIWtleUVtaXNzaW9uUmF0ZVBlckJsb2NrTWF4Q3VycmVudCIVa2V5RW1pc3Npb25TdGFydEJsb2NrIh1rZXlCb29zdGluZ1YyTGFzdFVwZGF0ZUhlaWdodCIVa2V5Qm9vc3RpbmdWMkludGVncmFsIhtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MiE2tleUVtaXNzaW9uRW5kQmxvY2siDUlkeENmZ0Fzc2V0SWQiE0lkeENmZ01pbkxvY2tBbW91bnQiFUlkeENmZ01pbkxvY2tEdXJhdGlvbiIVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uIhJJZHhDZmdNYXRoQ29udHJhY3QiFElkeENmZ0Jsb2Nrc0luUGVyaW9kIglrZXlDb25maWciFXJlYWRDb25maWdBcnJheU9yRmFpbCIIY2ZnQXJyYXkiB2Fzc2V0SWQiDW1pbkxvY2tBbW91bnQiD21pbkxvY2tEdXJhdGlvbiIPbWF4TG9ja0R1cmF0aW9uIgxtYXRoQ29udHJhY3QiDmJsb2Nrc0luUGVyaW9kIg1mb3JtYXRDb25maWdTIgxmb3JtYXRDb25maWciHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMiByRtYXRjaDAiAXMiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiE21hbmFnZXJWYXVsdEFkZHJlc3MiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiDUlkeExvY2tBbW91bnQiDElkeExvY2tTdGFydCIPSWR4TG9ja0R1cmF0aW9uIhpJZHhMb2NrTGFzdFVwZGF0ZVRpbWVzdGFtcCIQSWR4TG9ja0d3eEFtb3VudCIQSWR4TG9ja1d4Q2xhaW1lZCITa2V5TG9ja1BhcmFtc1JlY29yZCILdXNlckFkZHJlc3MiBHR4SWQiAWIiGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsIhVrZXlVc2VyR3d4QW1vdW50VG90YWwiFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQiBmFtb3VudCIFc3RhcnQiCGR1cmF0aW9uIglnd3hBbW91bnQiCXd4Q2xhaW1lZCIOa2V5TmV4dFVzZXJOdW0iEmtleVVzZXIyTnVtTWFwcGluZyISa2V5TnVtMlVzZXJNYXBwaW5nIhdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudCIga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MiEmtleVN0YXRzTG9ja3NDb3VudCISa2V5U3RhdHNVc2Vyc0NvdW50IiBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTCIHdXNlck51bSIia2V5VXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTCIJbHBBc3NldElkIhdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTCIYa2V5VG90YWxNYXhCb29zdElOVEVHUkFMIiFrZXlVc2VyQm9vc3RBdmFsYWlibGVUb0NsYWltVG90YWwiE2tleVVzZXJCb29zdENsYWltZWQiC2tleUd3eFRvdGFsIgdrZXlWb3RlIg1hbW91bnRBc3NldElkIgxwcmljZUFzc2V0SWQiBWVwb2NoIhVrZXlTdGFydEhlaWdodEJ5RXBvY2giEWtleUN1cnJlbnRFcG9jaFVpIhVrZXlWb3RpbmdSZXN1bHRTdGFrZWQiDGxwQXNzZXRJZFN0ciIda2V5Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiJWtleVZvdGluZ1Jlc3VsdFN0YWtlZExhc3RVcGRhdGVIZWlnaHQiIWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdCIVa2V5Vm90ZVN0YWtlZEludGVncmFsIh1rZXlWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIZa2V5Vm90ZVN0YWtlZEludGVncmFsTGFzdCIPa2V5U3Rha2VkQnlVc2VyIg51c2VyQWRkcmVzc1N0ciIPZmFjdG9yeUNvbnRyYWN0IhBlbWlzc2lvbkNvbnRyYWN0Ig9zdGFraW5nQ29udHJhY3QiEWd3eFJld2FyZENvbnRyYWN0IhZscFN0YWtpbmdQb29sc0NvbnRyYWN0IhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0IhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0Ih1rZXlWb3RpbmdFbWlzc2lvblJhdGVDb250cmFjdCIKYm9vc3RDb2VmZiIBQCIZdXNlck51bWJlckJ5QWRkcmVzc09yRmFpbCIRZ2V0R3d4QW1vdW50VG90YWwiEmdldExvY2tlZEd3eEFtb3VudCIMZnVuY3Rpb25OYW1lIhp2b3RpbmdFbWlzc2lvblJhdGVDb250cmFjdCIYbG9ja2VkVm90aW5nRW1pc3Npb25SYXRlIhRsb2NrZWRWb3RpbmdFbWlzc2lvbiIGbG9ja2VkIgxIaXN0b3J5RW50cnkiBHR5cGUiBHVzZXIiCWxvY2tTdGFydCIKaGlzdG9yeUtFWSILaGlzdG9yeURBVEEiClN0YXRzRW50cnkiDnRvdGFsTG9ja2VkSW5jIgtkdXJhdGlvbkluYyIMbG9ja0NvdW50SW5jIg11c2Vyc0NvdW50SW5jIhtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkiDWxvY2tzQ291bnRLRVkiDXVzZXJzQ291bnRLRVkiDnRvdGFsQW1vdW50S0VZIhhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MiCmxvY2tzQ291bnQiCnVzZXJzQ291bnQiC3RvdGFsQW1vdW50Ig9Mb2NrUGFyYW1zRW50cnkiImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwiD2V4cGVjdGVkQXNzZXRJZCIDcG10IhVnZXRVc2VyR3d4QW1vdW50VG90YWwiGmdldFZvdGluZ0VtaXNzaW9uRXBvY2hJbmZvIg0kdDAxNTA1MTE1MzQxIg5jdXJyZW50RXBvY2hVaSISbGFzdEZpbmFsaXplZEVwb2NoIhdjdXJyZW50RXBvY2hTdGFydEhlaWdodCIYZ2V0UG9vbEFzc2V0c0J5THBBc3NldElkIhBpZHhBbW91bnRBc3NldElkIg9pZHhQcmljZUFzc2V0SWQiB3Bvb2xDZmciFGdldFVzZXJWb3RlRmluYWxpemVkIg0kdDAxNjAzMjE2MTEyIg0kdDAxNjExNTE2MTkwIgt1c2VyVm90ZUtleSIIdXNlclZvdGUiEWdldFVzZXJWb3RlU3Rha2VkIgxzdGFrZWRCeVVzZXIiFWdldFZvdGluZ1Jlc3VsdFN0YWtlZCINJHQwMTY3MzQxNjgxNCIXdm90aW5nUmVzdWx0U3Rha2VkU3RhcnQiEnZvdGluZ1Jlc3VsdFN0YWtlZCIdZ2V0Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiDSR0MDE3MTc2MTcyNTYiHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsUHJldiIidm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIcdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaCIadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiIXJlZnJlc2hWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbCIPc3Rha2VkVm90ZURlbHRhIg0kdDAxODA5MzE4MTczIhV2b3RpbmdSZXN1bHRTdGFrZWROZXciGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwiDSR0MDE4Nzg0MTg4NjQiDnVzZXJWb3RlU3Rha2VkIhp1c2VyVm90ZVN0YWtlZEludGVncmFsUHJldiIedXNlclZvdGVTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0Ihh1c2VyVm90ZVN0YWtlZEludGVncmFsRGgiFnVzZXJWb3RlU3Rha2VkSW50ZWdyYWwiGXJlZnJlc2hWb3RlU3Rha2VkSW50ZWdyYWwiBGVkZ2UiDSR0MDE5NjUyMTk3MzIiEXVzZXJWb3RlRmluYWxpemVkIgdhY3Rpb25zIhN2b3RpbmdSZXN1bHRBY3Rpb25zIgt2b3RlQWN0aW9ucyIbZ2V0U3Rha2VkVm90ZXNJbnRlZ3JhbHNEaWZmIg0kdDAyMDU4NjIwNjY2Ih11c2VyVm90ZVN0YWtlZEludGVncmFsTGFzdEtleSIadXNlclZvdGVTdGFrZWRJbnRlZ3JhbExhc3QiIXZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdEtleSIedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0Ihp1c2VyVm90ZVN0YWtlZEludGVncmFsRGlmZiIedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaWZmIhxyZWZyZXNoQm9vc3RFbWlzc2lvbkludGVncmFsIhJ3eEVtaXNzaW9uUGVyQmxvY2siIGJvb3N0aW5nVjJMYXN0VXBkYXRlSGVpZ2h0T3B0aW9uIhhib29zdGluZ1YySW5nZXJnYWxPcHRpb24iC2VtaXNzaW9uRW5kIgFoIgJkaCIQbGFzdFVwZGF0ZUhlaWdodCIVYm9vc3RFbWlzc2lvblBlckJsb2NrIhlib29zdEVtaXNzaW9uSW50ZWdyYWxQcmV2IhVib29zdEVtaXNzaW9uSW50ZWdyYWwiFGludGVybmFsQ2xhaW1XeEJvb3N0IghyZWFkT25seSIIRU1QVFlTVFIiCnBvb2xXZWlnaHQiDnBvb2xBZGRyZXNzU3RyIiJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZIiB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWSIddXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWwiGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwiDSR0MDI0MjA4MjQzNDciG3N0YWtlZFZvdGVzSW50ZWdyYWxzQWN0aW9ucyIUdXNlclZvdGVJbnRlZ3JhbERpZmYiFnRvdGFsVm90ZXNJbnRlZ3JhbERpZmYiHXBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsIiF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXciCWRhdGFTdGF0ZSIFZGVidWciC2xvY2tBY3Rpb25zIg5kdXJhdGlvbk1vbnRocyIKYXNzZXRJZFN0ciIJcG10QW1vdW50Ig5uZXh0VXNlck51bUtFWSIOdXNlcklzRXhpc3RpbmciCnVzZXJOdW1TdHIiDmdXeEFtb3VudFN0YXJ0Ig5nd3hBbW91bnRUb3RhbCISdXNlckd3eEFtb3VudFRvdGFsIgxnd3hSZXdhcmRJbnYiA2FyciIRZ2V0V3hXaXRoZHJhd2FibGUiCnR4SWRPcHRpb24iD3VzZXJSZWNvcmRBcnJheSIKdXNlckFtb3VudCIMbG9ja0R1cmF0aW9uIgdsb2NrRW5kIgF0IghleHBvbmVudCIOd3hXaXRoZHJhd2FibGUiEWZhY3RvcnlBZGRyZXNzU3RyIg5sb2NrQXNzZXRJZFN0ciILbWluRHVyYXRpb24iC21heER1cmF0aW9uIgtjaGVja0NhbGxlciIPcmVmZXJyZXJBZGRyZXNzIglzaWduYXR1cmUiDSR0MDI5MTU1MjkyMjAiEWxvY2tBY3Rpb25zUmVzdWx0Ig9yZWZlcnJhbEFkZHJlc3MiBnJlZkludiIRdXBkYXRlUmVmQWN0aXZpdHkiDSR0MDI5Njc4Mjk3NDMiDSR0MDMwMDUzMzAxNTUiEnVzZXJCb29zdEF2YWlsYWJsZSINJHQwMzAyODczMDM4OCIHdHhJZFN0ciIJZ3d4QnVybmVkIgxnd3hSZW1haW5pbmciD2xvY2tlZEd3eEFtb3VudCIVdXNlckd3eEFtb3VudFRvdGFsTmV3Igx0YXJnZXRIZWlnaHQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleY4BAAFhAgJfXwABYgAIAAFjAIDC1y8AAWQFAWMAAWUCDWJvb3N0aW5nLnJpZGUAAWYAEgABZwCAgJC7utat8A0AAWgJALYCAQUBZwABaQkAzAgCAAEJAMwIAgADCQDMCAIABgkAzAgCAAwJAMwIAgAYCQDMCAIAMAUDbmlsAAFqAKALAAFrAJjWAgEBbAEBbQkAuQkCCQDMCAIFAWUJAMwIAgICOiAJAMwIAgUBbQUDbmlsAgABAW4BAW0JAAIBCQEBbAEFAW0BAW8CAXABcQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAXAFAXEJAQFsAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBcQIPIGlzIG5vdCBkZWZpbmVkAQFyAgFwAXEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBcAUBcQAAAQFzAwFwAXEBdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQFwBQFxBQF0AQF1AgFwAXEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQFwBQFxCQEBbAEJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FAXECDyBpcyBub3QgZGVm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pAMBBQJhQwUCYUQBAmFIAAQCYUkJAKIIAQkBAmFpAAMJAAECBQJhSQIGU3RyaW5nBAJhSgUCYUkJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFKBQR0aGlzAQJhSwAEAmFMCQECYUgABAJhSQkAnQgCBQJhTAkBAmFoAAMJAAECBQJhSQIGU3RyaW5nBAJhSgUCYUkJANkEAQUCYUoDCQABAgUCYUkCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYU0BAmFOBAJhTwkBAW4BAhFQZXJtaXNzaW9uIGRlbmllZAQCYUkJAQJhSwADCQABAgUCYUkCCkJ5dGVWZWN0b3IEAmFQBQJhSQMJAAACCAUCYU4PY2FsbGVyUHVibGljS2V5BQJhUAYFAmFPAwkAAQIFAmFJAgRVbml0AwkAAAIIBQJhTgZjYWxsZXIFBHRoaXMGBQJhTwkAAgECC01hdGNoIGVycm9yAAJhUQABAAJhUgACAAJhUwADAAJhVAAEAAJhVQAFAAJhVgAGAQJhVwICYVgCYVkJALkJAgkAzAgCAgwlcyVzJXNfX2xvY2sJAMwIAgkApQgBBQJhWAkAzAgCBAJhSQUCYVkDCQABAgUCYUkCCkJ5dGVWZWN0b3IEAmFaBQJhSQkA2AQBBQJhWgMJAAECBQJhSQIEVW5pdAIGbGVnYWN5CQACAQILTWF0Y2ggZXJyb3IFA25pbAUBYQECYmECAmFYAmFZCQC1CQIJAQFvAgUEdGhpcwkBAmFXAgUCYVgFAmFZBQFhAQJiYgECYVgJALkJAgkAzAgCAhQlcyVzX19nd3hBbW91bnRUb3RhbAkAzAgCCQClCAEFAmFYBQNuaWwFAWEBAmJjBQJiZAJiZQJiZgJiZwJiaAkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJkCQDMCAIJAKQDAQUCYmUJAMwIAgkApAMBBQJiZgkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUCYmcJAMwIAgkApAMBBQJiaAUDbmlsBQFhAQJiaQACDyVzX19uZXh0VXNlck51bQECYmoBAmFYCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX191c2VyMm51bQkAzAgCBQJhWAUDbmlsBQFhAQJiawEBWQkAuQkCCQDMCAICGSVzJXMlc19fbWFwcGluZ19fbnVtMnVzZXIJAMwIAgUBWQUDbmlsBQFhAQJibAACHiVzJXNfX3N0YXRzX19hY3RpdmVUb3RhbExvY2tlZAECYm0AAiUlcyVzX19zdGF0c19fbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzAQJibgACFyVzJXNfX3N0YXRzX19sb2Nrc0NvdW50AQJibwACHSVzJXNfX3N0YXRzX19hY3RpdmVVc2Vyc0NvdW50AQJicAECYnEJALkJAgkAzAgCAiAlcyVkX191c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRWMgkAzAgCCQCkAwEFAmJxBQNuaWwFAWEBAmJyAgJicQJicwkAuQkCCQDMCAICICVzJWRfX3VzZXJCb29zdEVtaXNzaW9uTGFzdEludFYyCQDMCAIJAKQDAQUCYnEJAMwIAgUCYnMFA25pbAUBYQECYnQBAmJxCQC5CQIJAMwIAgIRJXMlZF9fbWF4Qm9vc3RJbnQJAMwIAgkApAMBBQJicQUDbmlsBQFhAQJidQACGCVzJXNfX21heEJvb3N0SW50X190b3RhbAECYnYBAmJxCQC5CQIJAMwIAgIkJXMlZF9fdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsCQDMCAIJAKQDAQUCYnEFA25pbAUBYQECYncBAmJxCQC5CQIJAMwIAgIWJXMlZF9fdXNlckJvb3N0Q2xhaW1lZAkAzAgCCQCkAwEFAmJxBQNuaWwFAWEBAmJ4AAIQJXMlc19fZ3d4X190b3RhbAECYnkEAmJ6AmJBAXACYkIJALkJAgkAzAgCAgolcyVzJXMlcyVkCQDMCAICBHZvdGUJAMwIAgUCYnoJAMwIAgUCYkEJAMwIAgkApQgBBQFwCQDMCAIJAKQDAQUCYkIFA25pbAUBYQECYkMBAmJCCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgtzdGFydEhlaWdodAkAzAgCCQCkAwEFAmJCBQNuaWwFAWEBAmJEAAkAuQkCCQDMCAICAiVzCQDMCAICDmN1cnJlbnRFcG9jaFVpBQNuaWwFAWEBAmJFAgJiRgJiQgkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAhJ2b3RpbmdSZXN1bHRTdGFrZWQJAMwIAgUCYkYJAMwIAgkApAMBBQJiQgUDbmlsBQFhAQJiRwICYkYCYkIJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAMwIAgUCYkYJAMwIAgkApAMBBQJiQgUDbmlsBQFhAQJiSAICYkYCYkIJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIqdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0VXBkYXRlSGVpZ2h0CQDMCAIFAmJGCQDMCAIJAKQDAQUCYkIFA25pbAUBYQECYkkDAmJGAXACYkIJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAh52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3QJAMwIAgUCYkYJAMwIAgkApQgBBQFwCQDMCAIJAKQDAQUCYkIFA25pbAUBYQECYkoDAmJGAXACYkIJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAhJ2b3RlU3Rha2VkSW50ZWdyYWwJAMwIAgUCYkYJAMwIAgkApQgBBQFwCQDMCAIJAKQDAQUCYkIFA25pbAUBYQECYksDAmJGAXACYkIJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAiJ2b3RlU3Rha2VkSW50ZWdyYWxMYXN0VXBkYXRlSGVpZ2h0CQDMCAIFAmJGCQDMCAIJAKUIAQUBcAkAzAgCCQCkAwEFAmJCBQNuaWwFAWEBAmJMAwJiRgFwAmJCCQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgIWdm90ZVN0YWtlZEludGVncmFsTGFzdAkAzAgCBQJiRgkAzAgCCQClCAEFAXAJAMwIAgkApAMBBQJiQgUDbmlsBQFhAQJiTQICYk4CYkYJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGc3Rha2VkCQDMCAIFAmJOCQDMCAIFAmJGBQNuaWwFAWEAAmJPCQEBWgAAAmFkCQECYWEBBQJiTwACYlAJAQJhZQEFAmFkAAJiUQkBAmFmAQUCYWQAAmJSCQECYWcBBQJhZAACYlMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkAuQkCCQDMCAICAiVzCQDMCAICFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QFA25pbAUBYQkBAWwBAi5scF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MgaXMgdW5kZWZpbmVkCQEBbAECKWludmFsaWQgbHBfc3Rha2luZ19wb29scyBjb250cmFjdCBhZGRyZXNzAAJiVAkAuQkCCQDMCAICAiVzCQDMCAICFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFA25pbAUBYQACYlUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFAmJPBQJiVAACYlYJALkJAgkAzAgCAgIlcwkAzAgCAhp2b3RpbmdFbWlzc2lvblJhdGVDb250cmFjdAUDbmlsBQFhAAJiVwoAAmJYCQD8BwQFAmJQAhVnZXRCb29zdENvZWZmUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAmJYAgNJbnQFAmJYCQACAQkArAICCQADAQUCYlgCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAECYlkBAmFYBAJhSQkAnQgCBQR0aGlzCQECYmoBCQClCAEFAmFYAwkAAQIFAmFJAgZTdHJpbmcEAmFKBQJhSQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFAmFKCQEBbAECE2ludmFsaWQgdXNlciBudW1iZXIDCQABAgUCYUkCBFVuaXQJAQFuAQIMaW52YWxpZCB1c2VyCQACAQILTWF0Y2ggZXJyb3IBAmJaAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYngAAAABAmNhAQJhWAQCY2ICEmdldExvY2tlZEd3eEFtb3VudAQCY2MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgQCYUkJAJ0IAgUCYlUFAmJWAwkAAQIFAmFJAgRVbml0BQR1bml0AwkAAQIFAmFJAgZTdHJpbmcEAmFKBQJhSQkApggBBQJhSgkAAgECC01hdGNoIGVycm9yCQEBbAECJGludmFsaWQgdm90aW5nIGVtaXNzaW9uIHJhdGUgYWRkcmVzcwQCY2QKAAJiWAkA/AcEBQJiVQUCY2IJAMwIAgkApQgBBQJhWAUDbmlsBQNuaWwDCQABAgUCYlgCA0ludAUCYlgJAAIBCQCsAgIJAAMBBQJiWAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJjZQoAAmJYCQD8BwQFAmNjBQJjYgkAzAgCCQClCAEFAmFYBQNuaWwFA25pbAMJAAECBQJiWAIDSW50BQJiWAkAAgEJAKwCAgkAAwEFAmJYAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEAmNmCQCWAwEJAMwIAgUCY2QJAMwIAgUCY2UFA25pbAUCY2YBAmNnBwJjaAJjaQJiZAJjagJiZgJiZwJhTgQCY2sJALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQJjaAkAzAgCBQJjaQkAzAgCCQDYBAEIBQJhTg10cmFuc2FjdGlvbklkBQNuaWwFAWEEAmNsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUCYmQJAMwIAgkApAMBBQJjagkAzAgCCQCkAwEFAmJmCQDMCAIJAKQDAQUCYmcFA25pbAUBYQkBC1N0cmluZ0VudHJ5AgUCY2sFAmNsAQJjbQQCY24CY28CY3ACY3EEAmNyCQECYm0ABAJjcwkBAmJuAAQCY3QJAQJibwAEAmN1CQECYmwABAJjdgkBAXICBQR0aGlzBQJjcgQCY3cJAQFyAgUEdGhpcwUCY3MEAmN4CQEBcgIFBHRoaXMFAmN0BAJjeQkBAXICBQR0aGlzBQJjdQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3IJAGQCBQJjdgUCY28JAMwIAgkBDEludGVnZXJFbnRyeQIFAmNzCQBkAgUCY3cFAmNwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjdAkAZAIFAmN4BQJjcQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3UJAGQCBQJjeQUCY24FA25pbAECY3oHAmFYAmFZAmJkAmJlAmJmAmJnAmJoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhVwIFAmFYBQJhWQkBAmJjBQUCYmQFAmJlBQJiZgUCYmcFAmJoBQNuaWwBAmNBAgJhTgJjQgMJAGYCCQCQAwEIBQJhTghwYXltZW50cwABCQEBbgECG29ubHkgb25lIHBheW1lbnQgaXMgYWxsb3dlZAMJAAACCQCQAwEIBQJhTghwYXltZW50cwAAAAAEAmNDCQCRAwIIBQJhTghwYXltZW50cwAAAwkBAiE9AgkBBXZhbHVlAQgFAmNDB2Fzc2V0SWQFAmNCCQEBbgECG2ludmFsaWQgYXNzZXQgaWQgaW4gcGF5bWVudAgFAmNDBmFtb3VudAECY0QBAmFYCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJiYgEFAmFYAAABAmNFAAQCY0YEAmNHCQEFdmFsdWUBCQCaCAIFAmJVCQECYkQABAJjSAkAZQIFAmNHAAEDCQBmAgAABQJjSAkBAW4BAg1pbnZhbGlkIGVwb2NoCQCUCgIFAmNHBQJjSAQCY0cIBQJjRgJfMQQCY0gIBQJjRgJfMgQCY0kJAQV2YWx1ZQEJAJoIAgUCYlUJAQJiQwEFAmNHCQCUCgIFAmNIBQJjSQECY0oBAmJGBAJjSwAEBAJjTAAFBAJjTQoAAmJYCQD8BwQFAmJPAiBnZXRQb29sQ29uZmlnQnlMcEFzc2V0SWRSRUFET05MWQkAzAgCBQJiRgUDbmlsBQNuaWwDCQABAgUCYlgCCUxpc3RbQW55XQUCYlgJAAIBCQCsAgIJAAMBBQJiWAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldBAJiegoAAmJYCQCRAwIFAmNNBQJjSwMJAAECBQJiWAIGU3RyaW5nBQJiWAkAAgEJAKwCAgkAAwEFAmJYAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcEAmJBCgACYlgJAJEDAgUCY00FAmNMAwkAAQIFAmJYAgZTdHJpbmcFAmJYCQACAQkArAICCQADAQUCYlgCGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAlAoCBQJiegUCYkEBAmNOAgJiRgJiTgQCYVgJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmJOBAJjTwkBAmNFAAQCY0gIBQJjTwJfMQQCY0kIBQJjTwJfMgQCY1AJAQJjSgEFAmJGBAJieggFAmNQAl8xBAJiQQgFAmNQAl8yBAJjUQkBAmJ5BAUCYnoFAmJBBQJhWAUCY0gEAmNSCQELdmFsdWVPckVsc2UCCQCaCAIFAmJVBQJjUQAABQJjUgECY1MCAmJGAmJOBAJjVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQJiUQkBAmJNAgUCYk4FAmJGAAAEAmNSCQECY04CBQJiRgUCYk4DCQAAAgUCY1QAAAAABQJjUgECY1UBAmJGBAJjVgkBAmNFAAQCY0gIBQJjVgJfMQQCY0kIBQJjVgJfMgQCY1cJAQt2YWx1ZU9yRWxzZQIJAJoIAgUCYlUJAQJiRQIFAmJGBQJjSAAABAJjWAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYkUCBQJiRgUCY0gFAmNXBQJjWAECY1kBAmJGBAJjWgkBAmNFAAQCY0gIBQJjWgJfMQQCY0kIBQJjWgJfMgQCY1gJAQJjVQEFAmJGBAJkYQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYkcCBQJiRgUCY0gAAAQCZGIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmJIAgUCYkYFAmNIBQJjSQQCZGMJAGUCBQZoZWlnaHQFAmRiBAJkZAkAZAIJAGgCBQJkYwUCY1gFAmRhBQJkZAECZGUCAmJGAmRmBAJkZwkBAmNFAAQCY0gIBQJkZwJfMQQCY0kIBQJkZwJfMgQCY1gJAQJjVQEFAmJGBAJkaAkAZAIFAmNYBQJkZgQCZGQJAQJjWQEFAmJGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYkUCBQJiRgUCY0gFAmRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYkgCBQJiRgUCY0gFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJHAgUCYkYFAmNIBQJkZAUDbmlsAQJkaQICYkYCYk4EAmRqCQECY0UABAJjSAgFAmRqAl8xBAJjSQgFAmRqAl8yBAJhWAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYk4EAmRrCQECY1MCBQJiRgUCYk4EAmRsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJiSgMFAmJGBQJhWAUCY0gAAAQCZG0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmJLAwUCYkYFAmFYBQJjSAUCY0kEAmRuCQBlAgUGaGVpZ2h0BQJkbQQCZG8JAGQCCQBoAgUCZG4FAmRrBQJkbAUCZG8BAmRwAwJiRgJiTgJkcQQCZHIJAQJjRQAEAmNICAUCZHICXzEEAmNJCAUCZHICXzIEAmFYCQERQGV4dHJOYXRpdmUoMTA2MikBBQJiTgQCZHMJAQJjTgIFAmJGBQJiTgQCZHQDCQAAAgUCZHMAAAUDbmlsBAJkZgMFAmRxBQJkcwkBAS0BBQJkcwQCZHUJAQJkZQIFAmJGBQJkZgQCZG8JAQJkaQIFAmJGBQJiTgQCZHYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiSwMFAmJGBQJhWAUCY0gFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJKAwUCYkYFAmFYBQJjSAUCZG8FA25pbAkAzggCBQJkdQUCZHYFAmR0AQJkdwICYkYCYk4EAmR4CQECY0UABAJjSAgFAmR4Al8xBAJjSQgFAmR4Al8yBAJhWAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYk4EAmR5CQECYkwDBQJiRgUCYVgFAmNIBAJkegkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJkeQAABAJkQQkBAmJJAwUCYkYFAmFYBQJjSAQCZEIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCZEEAAAQCZG8JAQJkaQIFAmJGBQJiTgQCZGQJAQJjWQEFAmJGBAJkQwkAZQIFAmRvBQJkegQCZEQJAGUCBQJkZAUCZEIJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUCZHkFAmRvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJkQQUCZGQFA25pbAUCZEMFAmREAQJkRQAEAmRGCQEBdQIFAmJQCQECYWoABAJkRwkAmggCBQR0aGlzCQECYW0ABAJkSAkAmggCBQR0aGlzCQECYW4ABAJkSQkBAXUCBQJiUAkBAmFwAAQCZEoDCQBmAgUGaGVpZ2h0BQJkSQUCZEkFBmhlaWdodAQCZEsEAmFJBQJkRwMJAAECBQJhSQIDSW50BAJkTAUCYUkJAJYDAQkAzAgCCQBlAgUCZEoFAmRMCQDMCAIAAAUDbmlsAwkAAQIFAmFJAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQCZE0JAGkCCQBoAgUCZEYJAGUCBQJiVwABBQJiVwQCZE4JAQt2YWx1ZU9yRWxzZQIFAmRIAAAEAmRPCQBkAgkAaAIFAmRNBQJkSwUCZE4JAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFuAAUCZE8JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbQAFBmhlaWdodAUDbmlsBQJkTwECZFADAmJGAmJOAmRRBAJhWAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAmJOCQEBbAECFGludmFsaWQgdXNlciBhZGRyZXNzBAJicQkBAmJZAQUCYVgDCQAAAgUCYnEFAmJxBAJkUgIFZW1wdHkEAmRTAwkBAiE9AgUCYkYFAmRSBAJkVAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmJPCQEBUwEFAmJGCQEBbAEJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQJiRgkBEUBleHRyTmF0aXZlKDEwNTApAgUCYk8JAQFVAQUCZFQDBQJkUQAACQEBbgEJAKwCAgIobm90IHJlYWRvbmx5IG1vZGU6IHVuc3VwcG9ydGVkIGxwIGFzc2V0IAUCYkYEAmRVCQECYnICBQJicQUCYkYEAmRWCQECYnABBQJicQQCZFcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCZFUJAQFyAgUEdGhpcwUCZFYEAmRPCAkBAmRFAAJfMgQCZFgJAGUCBQJkTwUCZFcDCQBmAgAABQJkWAkBAW4BAhJ3cm9uZyBjYWxjdWxhdGlvbnMEAmRZCQECZHcCBQJiRgUCYk4EAmRaCAUCZFkCXzEEAmVhCAUCZFkCXzIEAmViCAUCZFkCXzMEAmVjCQBrAwUCZFgFAmRTBQFkBAJlZAMJAAACBQJlYgAAAAAJAGsDBQJlYwUCZWEFAmViBAJlZQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJkVQUCZE8FA25pbAUCZFoEAmVmCQC5CQIJAMwIAgkApAMBBQJkVwkAzAgCCQCkAwEFAmRYCQDMCAIJAKQDAQUCZFMJAMwIAgkApAMBBQJlYQkAzAgCCQCkAwEFAmViBQNuaWwCAToJAJUKAwUCZWQFAmVlBQJlZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZWcCAmFOAmVoBAJiZgkAaAIFAmVoBQFrBAJlaQkA2AQBBQJhegMJAQIhPQIJAJADAQgFAmFOCHBheW1lbnRzAAEJAQFuAQI0aW52YWxpZCBwYXltZW50IC0gZXhhY3Qgb25lIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQCY0MJAJEDAggFAmFOCHBheW1lbnRzAAAEAmVqCAUCY0MGYW1vdW50AwkBAiE9AgUCYXoJAQV2YWx1ZQEIBQJjQwdhc3NldElkCQEBbgEJAKwCAgkArAICAh5pbnZhbGlkIGFzc2V0IGlzIGluIHBheW1lbnQgLSAFAmVpAgwgaXMgZXhwZWN0ZWQDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQFpBQJlaAkBAW4BAhBpbnZhbGlkIGR1cmF0aW9uBAJlawkBAmJpAAQCYVgIBQJhTgZjYWxsZXIEAmJOCQClCAEFAmFYBAJlbAkBCWlzRGVmaW5lZAEJAKIIAQkBAmJqAQUCYk4EAmVtAwUCZWwJAQV2YWx1ZQEJAKIIAQkBAmJqAQUCYk4JAKQDAQkBAXUCBQR0aGlzBQJlawQCYnEJAQ1wYXJzZUludFZhbHVlAQUCZW0EAmNqBQZoZWlnaHQDAwkAZgIFAmFBBQJlagkBAiE9AgUCYVgFAmJTBwkBAW4BCQCsAgICImFtb3VudCBpcyBsZXNzIHRoZW4gbWluTG9ja0Ftb3VudD0JAKQDAQUCYUEDCQBmAgUCYUIFAmJmCQEBbgEJAKwCAgItcGFzc2VkIGR1cmF0aW9uIGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQCkAwEFAmFCAwkAZgIFAmJmBQJhQwkBAW4BCQCsAgICMHBhc3NlZCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoZW4gbWF4TG9ja0R1cmF0aW9uPQkApAMBBQJhQwQCZW4JAGsDBQJlagUCYmYFAmFDBAJlbwkBAmJaAAQCZFYJAQJicAEFAmJxBAJkTwgJAQJkRQACXzIEAmVwCQECY0QBBQJhWAQCZXEJAP0HBAUCYlICEXJlZnJlc2hVc2VyUmV3YXJkCQDMCAIIBQJhWAVieXRlcwkAzAgCBQJicQUDbmlsBQNuaWwDCQAAAgUCZXEFAmVxBAJlcgMFAmVsBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFAmVrCQBkAgUCYnEAAQkAzAgCCQELU3RyaW5nRW50cnkCCQECYmoBBQJiTgUCZW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmJrAQUCZW0FAmJOBQNuaWwJAJQKAgkAzggCCQDNCAIJAM4IAgkAzggCBQJlcgkBAmN6BwUCYVgIBQJhTg10cmFuc2FjdGlvbklkBQJlagUCY2oFAmJmBQJlbgAACQECY20EBQJlagUCYmYAAQMFAmVsAAAAAQkBAmNnBwIEbG9jawUCYk4FAmVqBQJjagUCYmYFAmVuBQJhTgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCZFYFAmRPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYngACQBkAgUCZW8FAmVuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYmIBBQJhWAkAZAIFAmVwBQJlbgUDbmlsBQJlbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXMCAmFYAmV0BAJldQkBAmJhAgUCYVgFAmV0BAJldgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV1BQJhUQQCY2oJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldQUCYVIEAmV3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXUFAmFTBAJleAkAZAIFAmNqBQJldwQCYmgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldQUCYVYEAmV5CQBpAgkAZQIFBmhlaWdodAUCY2oFAmFFBAJlegkAvAIDCQC2AgEFAmV5CQC5AgIJALYCAQkAaAIACAUCYUUFAWgJALYCAQUCZXcEAmVBAwkAZgIFBmhlaWdodAUCZXgFAmV2CQBlAgkAoAMBCQC8AgMJALYCAQUCZXYJALgCAgUBaAkAdgYJALYCAQAFAAEFAmV6BQFmBQFmBQRET1dOBQFoBQJiaAUCZUERAmFOAQtjb25zdHJ1Y3RvcgYCZUICZUMCYUECZUQCZUUCYUQEAmVGCQECYU0BBQJhTgMJAAACBQJlRgUCZUYJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJpAAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhdwAJAQJhRwUFAmVDBQJhQQUCZUQFAmVFBQJhRAkAzAgCCQELU3RyaW5nRW50cnkCCQEBRgAFAmVCBQNuaWwJAQJjbQQAAAAAAAAAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTgEHbG9ja1JlZgMCYmYCZUcCZUgEAmVJCQECZWcCBQJhTgUCYmYEAmVKCAUCZUkCXzEEAmVuCAUCZUkCXzIEAmVLCQClCAEIBQJhTgZjYWxsZXIEAmVMAwMJAAACBQJlRwIABgkAAAIFAmVIAQAFBHVuaXQJAPwHBAUBQgIKY3JlYXRlUGFpcgkAzAgCBQFFCQDMCAIFAmVHCQDMCAIFAmVLCQDMCAIFAmVIBQNuaWwFA25pbAMJAAACBQJlTAUCZUwEAmVNCQD8BwQFAmFEAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAmFOBmNhbGxlcgkAzAgCBQJlbgUDbmlsBQNuaWwDCQAAAgUCZU0FAmVNCQCUCgIFAmVKBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFOAQRsb2NrAQJiZgQCZU4JAQJlZwIFAmFOBQJiZgQCZUoIBQJlTgJfMQQCZW4IBQJlTgJfMgQCZU0JAPwHBAUCYUQCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgkApQgBCAUCYU4GY2FsbGVyCQDMCAIFAmVuBQNuaWwFA25pbAMJAAACBQJlTQUCZU0JAJQKAgUCZUoFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU4BDGNsYWltV3hCb29zdAICYkYCYk4DCQECIT0CBQJiUQgFAmFOBmNhbGxlcgkBAW4BAhJwZXJtaXNzaW9ucyBkZW5pZWQEAmVPCQECZFADBQJiRgUCYk4HBAJlUAgFAmVPAl8xBAJlZQgFAmVPAl8yBAJlZggFAmVPAl8zCQCUCgIFAmVlCQDMCAIFAmVQBQNuaWwCYU4BFGNsYWltV3hCb29zdFJFQURPTkxZAgJiRgJiTgQCZVEJAQJkUAMFAmJGBQJiTgYEAmVQCAUCZVECXzEEAmVlCAUCZVECXzIEAmVmCAUCZVECXzMJAJQKAgUDbmlsCQDMCAIFAmVQCQDMCAIFAmVmBQNuaWwCYU4BBnVubG9jawECZVIEAmFYCAUCYU4GY2FsbGVyBAJiTgkApQgBBQJhWAQCYVkJANkEAQUCZVIEAmV1CQECYmECBQJhWAMJAAACBQJlUgIABQR1bml0BQJhWQQCZXYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldQUCYVEEAmNqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXUFAmFSBAJldwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV1BQJhUwQCYmgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldQUCYVYEAmJnCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXUFAmFVBAJleQkAaQIJAGUCBQZoZWlnaHQFAmNqBQJhRQQCZUEJAQJlcwIFAmFYAwkAAAIFAmVSAgAFBHVuaXQFAmFZBAJlbgkAawMFAmV2BQJldwUCYUMEAmVTCQCXAwEJAMwIAgkAawMJAGgCBQJleQUCYUUFAmVuBQJhQwkAzAgCBQJiZwUDbmlsBAJlVAkBAXgCCQBlAgUCYmcFAmVTAgxnd3hSZW1haW5pbmcEAmVVCQECY2EBBQJhWAMJAGcCAAAFAmV2CQEBbgECEW5vdGhpbmcgdG8gdW5sb2NrBAJlbwkBAmJaAAQCZXAJAQJjRAEFAmFYBAJlVgkBAXgCCQBlAgUCZXAFAmVTAhV1c2VyR3d4QW1vdW50VG90YWxOZXcDCQBmAgUCZVUFAmVWCQEBbgEJAKwCAgITbG9ja2VkIGd3eCBhbW91bnQ6IAkApAMBBQJlVQQCYnEJAQ1wYXJzZUludFZhbHVlAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAQJiagEFAmJOCQEBbAECE2ludmFsaWQgdXNlciBudW1iZXIEAmVxCQD9BwQFAmJSAhFyZWZyZXNoVXNlclJld2FyZAkAzAgCCAUCYVgFYnl0ZXMJAMwIAgUCYnEFA25pbAUDbmlsAwkAAAIFAmVxBQJlcQkAzggCCQDNCAIJAM0IAgkAzggCCQECY3oHBQJhWAUCYVkFAmV2BQJjagUCZXcFAmVUCQBkAgUCYmgFAmVBCQECY20ECQEBLQEFAmVBAAAAAAAACQECY2cHAgZ1bmxvY2sFAmJOBQJlQQUCY2oFAmV3BQJlUwUCYU4JAQ5TY3JpcHRUcmFuc2ZlcgMFAmFYBQJlQQUCYXoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJieAAJAQF4AgkAZQIFAmVvBQJlUwIIZ3d4VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiYgEFAmFYBQJlVgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFOARNnd3hVc2VySW5mb1JFQURPTkxZAQJiTgQCYVgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQJiTgkBAWwBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwQCYmcJAQJjRAEFAmFYCQCUCgIFA25pbAkAzAgCBQJiZwUDbmlsAmFOARd1c2VyTWF4RHVyYXRpb25SRUFET05MWQECYk4JAJQKAgUDbmlsCQCUCgICBGxvY2sFAmFDAmFOASBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQICYk4CZVcEAmFYCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUCYk4JAQFsAQIUaW52YWxpZCB1c2VyIGFkZHJlc3MEAmJnCQECY0QBBQJhWAkAlAoCBQNuaWwFAmJnAmFOARBnZXRVc2VyR3d4QW1vdW50AQJiTgQCYVgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQJiTgkBAWwBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwQCYmcJAQJjRAEFAmFYCQCUCgIFA25pbAUCYmcCYU4BE2dldEd3eFRvdGFsUkVBRE9OTFkACQCUCgIFA25pbAkBAmJaAAJhTgEVb25Cb29zdEVtaXNzaW9uVXBkYXRlAAQCZUYDCQAAAggFAmFOBmNhbGxlcgUCYlAGCQECYU0BBQJhTgMJAAACBQJlRgUCZUYJAQJkRQAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU4BEm9uU3Rha2VkVm90ZVVwZGF0ZQMCYkYCYk4CZHEEAmVGAwkAAAIIBQJhTgZjYWxsZXIFAmJRBgkBAmFNAQUCYU4DCQAAAgUCZUYFAmVGBAJkdAkBAmRwAwUCYkYFAmJOBQJkcQkAlAoCBQJkdAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTgEdZ2V0Vm90aW5nUmVzdWx0U3Rha2VkUkVBRE9OTFkBAmJGCQCUCgIFA25pbAkBAmNVAQUCYkYCYU4BJWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsUkVBRE9OTFkBAmJGCQCUCgIFA25pbAkBAmNZAQUCYkYCYU4BHGdldFVzZXJWb3RlRmluYWxpemVkUkVBRE9OTFkCAmJGAmJOCQCUCgIFA25pbAkBAmNOAgUCYkYFAmJOAmFOASFnZXRVc2VyVm90ZVN0YWtlZEludGVncmFsUkVBRE9OTFkCAmJGAmJOCQCUCgIFA25pbAkBAmRpAgUCYkYFAmJOAQJlWAECZVkABAJlWgQCYUkJAQJhSwADCQABAgUCYUkCCkJ5dGVWZWN0b3IEAmFQBQJhSQUCYVADCQABAgUCYUkCBFVuaXQIBQJlWA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCZVgJYm9keUJ5dGVzCQCRAwIIBQJlWAZwcm9vZnMAAAUCZVp1HjqP", "height": 2713052, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 319rJAAw9xqhiwHhkf2aoRxkpy2JsiWLU9sKv1ym55HG Next: D69Z5DoJ8y2c7My6s56dB7LJoKKvSwqd1SW8kvjhttMP Diff:
OldNewDifferences
99
1010 let d = c
1111
12-func e (f) = makeString(["boosting.ride:", f], " ")
12+let e = "boosting.ride"
13+
14+let f = 18
15+
16+let g = 1000000000000000000
17+
18+let h = toBigInt(g)
19+
20+let i = [1, 3, 6, 12, 24, 48]
21+
22+let j = 1440
23+
24+let k = 43800
25+
26+func l (m) = makeString([e, ": ", m], "")
1327
1428
15-func g (f) = throw(e(f))
29+func n (m) = throw(l(m))
1630
1731
18-func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
32+func o (p,q) = valueOrErrorMessage(getString(p, q), l((("mandatory this." + q) + " is not defined")))
1933
2034
21-func k (i,j) = valueOrElse(getInteger(i, j), 0)
35+func r (p,q) = valueOrElse(getInteger(p, q), 0)
2236
2337
24-func l (i,j,m) = valueOrElse(getInteger(i, j), m)
38+func s (p,q,t) = valueOrElse(getInteger(p, q), t)
2539
2640
27-func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
41+func u (p,q) = valueOrErrorMessage(getInteger(p, q), l((("mandatory this." + q) + " is not defined")))
2842
2943
30-func o (p) = if ((0 > p))
31- then -(p)
32- else p
44+func v (w) = if ((0 > w))
45+ then -(w)
46+ else w
3347
3448
35-func q (p) = {
36- let r = p
37- if ($isInstanceOf(r, "List[Any]"))
38- then {
39- let s = r
40- s
41- }
42- else g("fail to cast into List[Any]")
43- }
49+func x (y,z) = if ((y >= 0))
50+ then y
51+ else n((valueOrElse(z, "value") + " should be positive"))
4452
4553
46-func t (p) = {
47- let r = p
48- if ($isInstanceOf(r, "Int"))
49- then {
50- let u = r
51- u
52- }
53- else g("fail to cast into Int")
54- }
54+func A () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5555
5656
57-func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
57+let B = addressFromStringValue(o(this, A()))
58+
59+let C = makeString(["%s%s", "referral", "programName"], a)
60+
61+let D = "wxlock"
62+
63+let E = valueOrElse(getString(this, C), D)
64+
65+func F () = "%s%s__config__factoryAddress"
5866
5967
60-let w = addressFromStringValue(h(this, v()))
68+let G = 1
6169
62-let x = makeString(["%s%s", "referral", "programName"], a)
70+let H = 2
6371
64-let y = "wxlock"
72+let I = 3
6573
66-let z = valueOrElse(getString(this, x), y)
74+let J = 4
6775
68-func A () = "%s%s__config__factoryAddress"
76+let K = 5
77+
78+let L = 6
79+
80+let M = 7
81+
82+let N = 8
83+
84+let O = 9
85+
86+let P = 10
87+
88+let Q = 11
89+
90+func R () = "%s__factoryConfig"
6991
7092
71-let B = 1
72-
73-let C = 2
74-
75-let D = 3
76-
77-let E = 4
78-
79-let F = 5
80-
81-let G = 6
82-
83-let H = 7
84-
85-let I = 8
86-
87-let J = 9
88-
89-let K = 10
90-
91-let L = 11
92-
93-func M () = "%s__factoryConfig"
93+func S (T) = makeString(["%s%s%s", T, "mappings__lpAsset2PoolContract"], a)
9494
9595
96-func N () = "%s__lpTokensList"
96+func U (V) = makeString(["%s%s", "poolWeight", V], a)
9797
9898
99-func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
99+func W (X,Y) = ((("%s%s__poolWeight__" + X) + "__") + toString(Y))
100100
101101
102-func Q (R) = makeString(["%s%s", "poolWeight", R], a)
102+func Z () = addressFromStringValue(o(this, F()))
103103
104104
105-func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
105+func aa (ab) = split(o(ab, R()), a)
106106
107107
108-func V () = addressFromStringValue(h(this, A()))
108+func ac (ad) = addressFromStringValue(ad[H])
109109
110110
111-func W () = split(valueOrElse(getString(V(), N()), ""), a)
111+func ae (ad) = addressFromStringValue(ad[K])
112112
113113
114-func X (Y) = split(h(Y, M()), a)
114+func af (ad) = addressFromStringValue(ad[G])
115115
116116
117-func Z (aa) = addressFromStringValue(aa[C])
117+func ag (ad) = addressFromStringValue(ad[P])
118118
119119
120-func ab (aa) = addressFromStringValue(aa[F])
120+func ah () = "%s__managerPublicKey"
121121
122122
123-func ac (aa) = addressFromStringValue(aa[B])
123+func ai () = "%s__managerVaultAddress"
124124
125125
126-func ad (aa) = addressFromStringValue(aa[K])
126+func aj () = "%s%s__ratePerBlock__current"
127127
128128
129-func ae () = "%s__managerPublicKey"
129+func ak () = "%s%s__ratePerBlockMax__current"
130130
131131
132-func af () = "%s__managerVaultAddress"
132+func al () = "%s%s__emission__startBlock"
133133
134134
135-func ag () = "%s%s__ratePerBlock__current"
135+func am () = "%s%s__boostingV2__startBlock"
136136
137137
138-func ah () = "%s%s__ratePerBlockMax__current"
138+func an () = "%s%s__boostingV2__integral"
139139
140140
141-func ai () = "%s%s__emission__startBlock"
141+func ao () = "%s%s__emission__duration"
142142
143143
144-func aj () = "%s%s__boostingV2__startBlock"
144+func ap () = "%s%s__emission__endBlock"
145145
146146
147-func ak () = "%s%s__boostingV2__integral"
147+let aq = 1
148+
149+let ar = 2
150+
151+let as = 3
152+
153+let at = 4
154+
155+let au = 5
156+
157+let av = 6
158+
159+func aw () = "%s__config"
148160
149161
150-func al () = "%s%s__emission__duration"
162+func ax () = split(o(this, aw()), a)
151163
152164
153-func am () = "%s%s__emission__endBlock"
165+let ay = ax()
166+
167+let az = fromBase58String(ay[aq])
168+
169+let aA = valueOrErrorMessage(parseInt(ay[ar]), l("invalid min lock amount"))
170+
171+let aB = valueOrErrorMessage(parseInt(ay[as]), l("invalid min lock duration"))
172+
173+let aC = valueOrErrorMessage(parseInt(ay[at]), l("invalid max lock duration"))
174+
175+let aD = valueOrErrorMessage(addressFromString(ay[au]), l("invalid math contract address"))
176+
177+let aE = valueOrErrorMessage(parseInt(ay[av]), l("invalid blocks in period"))
178+
179+func aF (az,aA,aB,aC,aD) = makeString(["%s%d%d%d%s", az, aA, aB, aC, aD], a)
154180
155181
156-func an () = "%s__nextPeriod"
182+func aG (az,aA,aB,aC,aD) = aF(az, toString(aA), toString(aB), toString(aC), aD)
157183
158184
159-func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160-
161-
162-let ap = 1
163-
164-let aq = 2
165-
166-let ar = 3
167-
168-let as = 4
169-
170-let at = 5
171-
172-func au () = "%s__config"
173-
174-
175-func av () = split(h(this, au()), a)
176-
177-
178-let aw = addressFromStringValue(av()[at])
179-
180-func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181-
182-
183-func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184-
185-
186-func aD () = {
187- let r = getString(af())
188- if ($isInstanceOf(r, "String"))
185+func aH () = {
186+ let aI = getString(ai())
187+ if ($isInstanceOf(aI, "String"))
189188 then {
190- let aE = r
191- addressFromStringValue(aE)
189+ let aJ = aI
190+ addressFromStringValue(aJ)
192191 }
193192 else this
194193 }
195194
196195
197-func aF () = {
198- let aG = aD()
199- let r = getString(aG, ae())
200- if ($isInstanceOf(r, "String"))
196+func aK () = {
197+ let aL = aH()
198+ let aI = getString(aL, ah())
199+ if ($isInstanceOf(aI, "String"))
201200 then {
202- let aE = r
203- fromBase58String(aE)
201+ let aJ = aI
202+ fromBase58String(aJ)
204203 }
205- else if ($isInstanceOf(r, "Unit"))
204+ else if ($isInstanceOf(aI, "Unit"))
206205 then unit
207206 else throw("Match error")
208207 }
209208
210209
211-func aH (aI) = {
212- let aJ = g("Permission denied")
213- let r = aF()
214- if ($isInstanceOf(r, "ByteVector"))
210+func aM (aN) = {
211+ let aO = n("Permission denied")
212+ let aI = aK()
213+ if ($isInstanceOf(aI, "ByteVector"))
215214 then {
216- let aK = r
217- if ((aI.callerPublicKey == aK))
215+ let aP = aI
216+ if ((aN.callerPublicKey == aP))
218217 then true
219- else aJ
218+ else aO
220219 }
221- else if ($isInstanceOf(r, "Unit"))
222- then if ((aI.caller == this))
220+ else if ($isInstanceOf(aI, "Unit"))
221+ then if ((aN.caller == this))
223222 then true
224- else aJ
223+ else aO
225224 else throw("Match error")
226225 }
227226
228227
229-let aL = 1
228+let aQ = 1
230229
231-let aM = 2
230+let aR = 2
232231
233-let aN = 3
232+let aS = 3
234233
235-let aO = 4
234+let aT = 4
236235
237-let aP = 5
236+let aU = 5
238237
239-let aQ = 6
238+let aV = 6
240239
241-func aR (aS) = makeString(["%s%s__lock", aS], a)
240+func aW (aX,aY) = makeString(["%s%s%s__lock", toString(aX), {
241+ let aI = aY
242+ if ($isInstanceOf(aI, "ByteVector"))
243+ then {
244+ let aZ = aI
245+ toBase58String(aZ)
246+ }
247+ else if ($isInstanceOf(aI, "Unit"))
248+ then "legacy"
249+ else throw("Match error")
250+ }], a)
242251
243252
244-func aT (aS) = split(h(this, aR(aS)), a)
253+func ba (aX,aY) = split(o(this, aW(aX, aY)), a)
245254
246255
247-func aU (aV,aW,aX,aY,aZ,ba,bb,bc) = makeString(["%d%d%d%d%d%d%d%d", aV, aW, aX, aY, aZ, ba, bb, bc], a)
256+func bb (aX) = makeString(["%s%s__gwxAmountTotal", toString(aX)], a)
248257
249258
250-func bd (aV,aW,aX,aY,aZ,ba,bc) = aU(aV, toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(lastBlock.timestamp), toString(bc))
259+func bc (bd,be,bf,bg,bh) = makeString(["%d%d%d%d%d%d", toString(bd), toString(be), toString(bf), toString(lastBlock.timestamp), toString(bg), toString(bh)], a)
251260
252261
253-func be () = "%s__nextUserNum"
262+func bi () = "%s__nextUserNum"
254263
255264
256-func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
265+func bj (aX) = makeString(["%s%s%s__mapping__user2num", aX], a)
257266
258267
259-func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
268+func bk (Y) = makeString(["%s%s%s__mapping__num2user", Y], a)
260269
261270
262-func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
271+func bl () = "%s%s__stats__activeTotalLocked"
263272
264273
265-func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
274+func bm () = "%s%s__stats__locksDurationSumInBlocks"
266275
267276
268-func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
277+func bn () = "%s%s__stats__locksCount"
269278
270279
271-func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
280+func bo () = "%s%s__stats__activeUsersCount"
272281
273282
274-func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
283+func bp (bq) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq)], a)
275284
276285
277-func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
286+func br (bq,bs) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq), bs], a)
278287
279288
280-func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
289+func bt (bq) = makeString(["%s%d__maxBoostInt", toString(bq)], a)
281290
282291
283-func bp () = "%s%s__stats__activeTotalLocked"
292+func bu () = "%s%s__maxBoostInt__total"
284293
285294
286-func bq () = "%s%s__stats__locksDurationSumInBlocks"
295+func bv (bq) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(bq)], a)
287296
288297
289-func br () = "%s%s__stats__locksCount"
298+func bw (bq) = makeString(["%s%d__userBoostClaimed", toString(bq)], a)
290299
291300
292-func bs () = "%s%s__stats__activeUsersCount"
301+func bx () = "%s%s__gwx__total"
293302
294303
295-func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
304+func by (bz,bA,p,bB) = makeString(["%s%s%s%s%d", "vote", bz, bA, toString(p), toString(bB)], a)
296305
297306
298-func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
307+func bC (bB) = makeString(["%s%d", "startHeight", toString(bB)], a)
299308
300309
301-func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
310+func bD () = makeString(["%s", "currentEpochUi"], a)
302311
303312
304-func bx () = "%s%s__maxBoostInt__total"
313+func bE (bF,bB) = makeString(["%s%s%d", "votingResultStaked", bF, toString(bB)], a)
305314
306315
307-func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
316+func bG (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegral", bF, toString(bB)], a)
308317
309318
310-func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
319+func bH (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bF, toString(bB)], a)
311320
312321
313-func bA () = "%s%s__gwxCached__total"
322+func bI (bF,p,bB) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bF, toString(p), toString(bB)], a)
314323
315324
316-func bB () = "%s__gwxCachedTotalCorrective"
325+func bJ (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegral", bF, toString(p), toString(bB)], a)
317326
318327
319-func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
328+func bK (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bF, toString(p), toString(bB)], a)
320329
321330
322-func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
331+func bL (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bF, toString(p), toString(bB)], a)
323332
324333
325-func bH () = makeString(["%s", "currentEpochUi"], a)
334+func bM (bN,bF) = makeString(["%s%s%s", "staked", bN, bF], a)
326335
327336
328-func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
337+let bO = Z()
329338
339+let ad = aa(bO)
330340
331-func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
341+let bP = ae(ad)
332342
343+let bQ = af(ad)
333344
334-func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
345+let bR = ag(ad)
335346
347+let bS = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), l("lp_staking_pools contract address is undefined"))), l("invalid lp_staking_pools contract address"))
336348
337-func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
349+let bT = makeString(["%s", "votingEmissionContract"], a)
338350
351+let bU = addressFromStringValue(getStringValue(bO, bT))
339352
340-func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
353+let bV = makeString(["%s", "votingEmissionRateContract"], a)
341354
342-
343-func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344-
345-
346-func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347-
348-
349-func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350-
351-
352-let bS = V()
353-
354-let aa = X(bS)
355-
356-let bT = ab(aa)
357-
358-let bU = ac(aa)
359-
360-let bV = ad(aa)
361-
362-let bW = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), e("lp_staking_pools contract address is undefined"))), e("invalid lp_staking_pools contract address"))
363-
364-let bX = makeString(["%s", "votingEmissionContract"], a)
365-
366-let bY = addressFromStringValue(getStringValue(bS, bX))
367-
368-let bZ = {
369- let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370- if ($isInstanceOf(ca, "Int"))
371- then ca
372- else throw(($getType(ca) + " couldn't be cast to Int"))
355+let bW = {
356+ let bX = invoke(bP, "getBoostCoeffREADONLY", nil, nil)
357+ if ($isInstanceOf(bX, "Int"))
358+ then bX
359+ else throw(($getType(bX) + " couldn't be cast to Int"))
373360 }
374361
375-func cb (cc) = {
376- let cd = getIntegerValue(bY, bH())
377- let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378- let cf = getInteger(this, ce)
379- let cg = valueOrElse(getInteger(this, bA()), 0)
380- let ch = if (isDefined(cf))
381- then (cd >= value(cf))
382- else false
383- let ci = if (if (ch)
384- then cc
385- else false)
386- then valueOrElse(getInteger(this, bB()), 0)
387- else 0
388- max([0, (cg + ci)])
362+func bY (aX) = {
363+ let aI = getString(this, bj(toString(aX)))
364+ if ($isInstanceOf(aI, "String"))
365+ then {
366+ let aJ = aI
367+ valueOrErrorMessage(parseInt(aJ), l("invalid user number"))
368+ }
369+ else if ($isInstanceOf(aI, "Unit"))
370+ then n("invalid user")
371+ else throw("Match error")
389372 }
390373
391374
392-func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393- let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394- let cq = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aW), toString(cm), toString(aY), toString(cn), toString(co)], a)
395- StringEntry(cp, cq)
375+func bZ () = valueOrElse(getInteger(this, bx()), 0)
376+
377+
378+func ca (aX) = {
379+ let cb = "getLockedGwxAmount"
380+ let cc = valueOrErrorMessage({
381+ let aI = getString(bU, bV)
382+ if ($isInstanceOf(aI, "Unit"))
383+ then unit
384+ else if ($isInstanceOf(aI, "String"))
385+ then {
386+ let aJ = aI
387+ addressFromString(aJ)
388+ }
389+ else throw("Match error")
390+ }, l("invalid voting emission rate address"))
391+ let cd = {
392+ let bX = invoke(bU, cb, [toString(aX)], nil)
393+ if ($isInstanceOf(bX, "Int"))
394+ then bX
395+ else throw(($getType(bX) + " couldn't be cast to Int"))
396+ }
397+ let ce = {
398+ let bX = invoke(cc, cb, [toString(aX)], nil)
399+ if ($isInstanceOf(bX, "Int"))
400+ then bX
401+ else throw(($getType(bX) + " couldn't be cast to Int"))
402+ }
403+ let cf = max([cd, ce])
404+ cf
396405 }
397406
398407
399-func cr (cs,ct,cu,cv) = {
400- let cw = bq()
401- let cx = br()
402- let cy = bs()
403- let cz = bp()
404- let cA = k(this, cw)
405- let cB = k(this, cx)
406- let cC = k(this, cy)
407- let cD = k(this, cz)
408-[IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
408+func cg (ch,ci,bd,cj,bf,bg,aN) = {
409+ let ck = makeString(["%s%s%s%s__history", ch, ci, toBase58String(aN.transactionId)], a)
410+ let cl = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(bd), toString(cj), toString(bf), toString(bg)], a)
411+ StringEntry(ck, cl)
409412 }
410413
411414
412-func cE (cF,cG,cH) = {
413- let cI = 1000
414- (((cF * cH) + cG) / cI)
415+func cm (cn,co,cp,cq) = {
416+ let cr = bm()
417+ let cs = bn()
418+ let ct = bo()
419+ let cu = bl()
420+ let cv = r(this, cr)
421+ let cw = r(this, cs)
422+ let cx = r(this, ct)
423+ let cy = r(this, cu)
424+[IntegerEntry(cr, (cv + co)), IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cn))]
415425 }
416426
417427
418-func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419- let cK = bh(aV)
420- let cL = bi(aV)
421- let cM = bj(aV)
422- let cN = bk(aV)
423- let cO = bl(aV)
424- let cP = bm(aV, bn)
425- let cQ = bo(aV, bn)
426- let bc = cE(cn, co, height)
427-[IntegerEntry(cK, aW), IntegerEntry(cL, aX), IntegerEntry(cM, aY), IntegerEntry(cN, cn), IntegerEntry(cO, co), IntegerEntry(cP, cn), IntegerEntry(cQ, co), StringEntry(aR(aS), bd(aV, aW, aX, aY, cn, co, bc))]
428+func cz (aX,aY,bd,be,bf,bg,bh) = [StringEntry(aW(aX, aY), bc(bd, be, bf, bg, bh))]
429+
430+
431+func cA (aN,cB) = if ((size(aN.payments) > 1))
432+ then n("only one payment is allowed")
433+ else if ((size(aN.payments) == 0))
434+ then 0
435+ else {
436+ let cC = aN.payments[0]
437+ if ((value(cC.assetId) != cB))
438+ then n("invalid asset id in payment")
439+ else cC.amount
440+ }
441+
442+
443+func cD (aX) = valueOrElse(getInteger(this, bb(aX)), 0)
444+
445+
446+func cE () = {
447+ let cF = {
448+ let cG = value(getInteger(bU, bD()))
449+ let cH = (cG - 1)
450+ if ((0 > cH))
451+ then n("invalid epoch")
452+ else $Tuple2(cG, cH)
453+ }
454+ let cG = cF._1
455+ let cH = cF._2
456+ let cI = value(getInteger(bU, bC(cG)))
457+ $Tuple2(cH, cI)
428458 }
429459
430460
431-func cR (aI,cS) = if ((size(aI.payments) > 1))
432- then g("only one payment is allowed")
433- else if ((size(aI.payments) == 0))
434- then 0
435- else {
436- let cT = aI.payments[0]
437- if ((value(cT.assetId) != cS))
438- then g("invalid asset id in payment")
439- else cT.amount
440- }
441-
442-
443-func cU (aS,cV) = {
444- let cW = "empty"
445- let cX = bf(aS)
446- let aV = valueOrElse(getString(cX), cW)
447- let cn = valueOrElse(getInteger(bk(aV)), 0)
448- let co = valueOrElse(getInteger(bl(aV)), 0)
449- let cY = cE(cn, co, cV)
450- let bc = if ((0 > cY))
451- then 0
452- else cY
453- bc
461+func cJ (bF) = {
462+ let cK = 4
463+ let cL = 5
464+ let cM = {
465+ let bX = invoke(bO, "getPoolConfigByLpAssetIdREADONLY", [bF], nil)
466+ if ($isInstanceOf(bX, "List[Any]"))
467+ then bX
468+ else throw(($getType(bX) + " couldn't be cast to List[Any]"))
469+ }
470+ let bz = {
471+ let bX = cM[cK]
472+ if ($isInstanceOf(bX, "String"))
473+ then bX
474+ else throw(($getType(bX) + " couldn't be cast to String"))
475+ }
476+ let bA = {
477+ let bX = cM[cL]
478+ if ($isInstanceOf(bX, "String"))
479+ then bX
480+ else throw(($getType(bX) + " couldn't be cast to String"))
481+ }
482+ $Tuple2(bz, bA)
454483 }
455484
456485
457-func cZ (aS) = cU(aS, height)
458-
459-
460-func da () = {
461- let db = {
462- let cd = value(getInteger(bY, bH()))
463- let dc = (cd - 1)
464- if ((0 > dc))
465- then g("invalid epoch")
466- else $Tuple2(cd, dc)
467- }
468- let cd = db._1
469- let dc = db._2
470- let dd = value(getInteger(bY, bG(cd)))
471- $Tuple2(dc, dd)
486+func cN (bF,bN) = {
487+ let aX = addressFromStringValue(bN)
488+ let cO = cE()
489+ let cH = cO._1
490+ let cI = cO._2
491+ let cP = cJ(bF)
492+ let bz = cP._1
493+ let bA = cP._2
494+ let cQ = by(bz, bA, aX, cH)
495+ let cR = valueOrElse(getInteger(bU, cQ), 0)
496+ cR
472497 }
473498
474499
475-func de (bJ) = {
476- let df = 4
477- let dg = 5
478- let dh = {
479- let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480- if ($isInstanceOf(ca, "List[Any]"))
481- then ca
482- else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483- }
484- let bD = {
485- let ca = dh[df]
486- if ($isInstanceOf(ca, "String"))
487- then ca
488- else throw(($getType(ca) + " couldn't be cast to String"))
489- }
490- let bE = {
491- let ca = dh[dg]
492- if ($isInstanceOf(ca, "String"))
493- then ca
494- else throw(($getType(ca) + " couldn't be cast to String"))
495- }
496- $Tuple2(bD, bE)
500+func cS (bF,bN) = {
501+ let cT = valueOrElse(getInteger(bQ, bM(bN, bF)), 0)
502+ let cR = cN(bF, bN)
503+ if ((cT == 0))
504+ then 0
505+ else cR
497506 }
498507
499508
500-func di (bJ,bR) = {
501- let aS = addressFromStringValue(bR)
502- let dj = da()
503- let dc = dj._1
504- let dd = dj._2
505- let dk = de(bJ)
506- let bD = dk._1
507- let bE = dk._2
508- let dl = bC(bD, bE, aS, dc)
509- let dm = valueOrElse(getInteger(bY, dl), 0)
510- dm
509+func cU (bF) = {
510+ let cV = cE()
511+ let cH = cV._1
512+ let cI = cV._2
513+ let cW = valueOrElse(getInteger(bU, bE(bF, cH)), 0)
514+ let cX = valueOrElse(getInteger(this, bE(bF, cH)), cW)
515+ cX
511516 }
512517
513518
514-func dn (bJ,bR) = {
515- let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516- let dm = di(bJ, bR)
517- if ((do == 0))
518- then 0
519- else dm
519+func cY (bF) = {
520+ let cZ = cE()
521+ let cH = cZ._1
522+ let cI = cZ._2
523+ let cX = cU(bF)
524+ let da = valueOrElse(getInteger(this, bG(bF, cH)), 0)
525+ let db = valueOrElse(getInteger(this, bH(bF, cH)), cI)
526+ let dc = (height - db)
527+ let dd = ((dc * cX) + da)
528+ dd
520529 }
521530
522531
523-func dp (bJ) = {
524- let dq = da()
525- let dc = dq._1
526- let dd = dq._2
527- let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528- let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529- ds
532+func de (bF,df) = {
533+ let dg = cE()
534+ let cH = dg._1
535+ let cI = dg._2
536+ let cX = cU(bF)
537+ let dh = (cX + df)
538+ let dd = cY(bF)
539+[IntegerEntry(bE(bF, cH), dh), IntegerEntry(bH(bF, cH), height), IntegerEntry(bG(bF, cH), dd)]
530540 }
531541
532542
533-func dt (bJ) = {
534- let du = da()
535- let dc = du._1
536- let dd = du._2
537- let ds = dp(bJ)
538- let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539- let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540- let dx = (height - dw)
541- let dy = ((dx * ds) + dv)
542- dy
543+func di (bF,bN) = {
544+ let dj = cE()
545+ let cH = dj._1
546+ let cI = dj._2
547+ let aX = addressFromStringValue(bN)
548+ let dk = cS(bF, bN)
549+ let dl = valueOrElse(getInteger(this, bJ(bF, aX, cH)), 0)
550+ let dm = valueOrElse(getInteger(this, bK(bF, aX, cH)), cI)
551+ let dn = (height - dm)
552+ let do = ((dn * dk) + dl)
553+ do
543554 }
544555
545556
546-func dz (bJ,dA) = {
547- let dB = da()
548- let dc = dB._1
549- let dd = dB._2
550- let ds = dp(bJ)
551- let dC = (ds + dA)
552- let dy = dt(bJ)
553-[IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
557+func dp (bF,bN,dq) = {
558+ let dr = cE()
559+ let cH = dr._1
560+ let cI = dr._2
561+ let aX = addressFromStringValue(bN)
562+ let ds = cN(bF, bN)
563+ let dt = if ((ds == 0))
564+ then nil
565+ else {
566+ let df = if (dq)
567+ then ds
568+ else -(ds)
569+ let du = de(bF, df)
570+ let do = di(bF, bN)
571+ let dv = [IntegerEntry(bK(bF, aX, cH), height), IntegerEntry(bJ(bF, aX, cH), do)]
572+ (du ++ dv)
573+ }
574+ dt
554575 }
555576
556577
557-func dD (bJ,bR) = {
558- let dE = da()
559- let dc = dE._1
560- let dd = dE._2
561- let aS = addressFromStringValue(bR)
562- let dF = dn(bJ, bR)
563- let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564- let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565- let dI = (height - dH)
566- let dJ = ((dI * dF) + dG)
567- dJ
578+func dw (bF,bN) = {
579+ let dx = cE()
580+ let cH = dx._1
581+ let cI = dx._2
582+ let aX = addressFromStringValue(bN)
583+ let dy = bL(bF, aX, cH)
584+ let dz = valueOrElse(getInteger(this, dy), 0)
585+ let dA = bI(bF, aX, cH)
586+ let dB = valueOrElse(getInteger(this, dA), 0)
587+ let do = di(bF, bN)
588+ let dd = cY(bF)
589+ let dC = (do - dz)
590+ let dD = (dd - dB)
591+ $Tuple3([IntegerEntry(dy, do), IntegerEntry(dA, dd)], dC, dD)
568592 }
569593
570594
571-func dK (bJ,bR,dL) = {
572- let dM = da()
573- let dc = dM._1
574- let dd = dM._2
575- let aS = addressFromStringValue(bR)
576- let dN = di(bJ, bR)
577- let dO = if ((dN == 0))
578- then nil
579- else {
580- let dA = if (dL)
581- then dN
582- else -(dN)
583- let dP = dz(bJ, dA)
584- let dJ = dD(bJ, bR)
585- let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586- (dP ++ dQ)
587- }
588- dO
595+func dE () = {
596+ let dF = u(bP, aj())
597+ let dG = getInteger(this, am())
598+ let dH = getInteger(this, an())
599+ let dI = u(bP, ap())
600+ let dJ = if ((height > dI))
601+ then dI
602+ else height
603+ let dK = {
604+ let aI = dG
605+ if ($isInstanceOf(aI, "Int"))
606+ then {
607+ let dL = aI
608+ max([(dJ - dL), 0])
609+ }
610+ else if ($isInstanceOf(aI, "Unit"))
611+ then 0
612+ else throw("Match error")
613+ }
614+ let dM = ((dF * (bW - 1)) / bW)
615+ let dN = valueOrElse(dH, 0)
616+ let dO = ((dM * dK) + dN)
617+ $Tuple2([IntegerEntry(an(), dO), IntegerEntry(am(), height)], dO)
589618 }
590619
591620
592-func dR (bJ,bR) = {
593- let dS = da()
594- let dc = dS._1
595- let dd = dS._2
596- let aS = addressFromStringValue(bR)
597- let dT = bP(bJ, aS, dc)
598- let dU = valueOrElse(getInteger(this, dT), 0)
599- let dV = bM(bJ, aS, dc)
600- let dW = valueOrElse(getInteger(this, dV), 0)
601- let dJ = dD(bJ, bR)
602- let dy = dt(bJ)
603- let dX = (dJ - dU)
604- let dY = (dy - dW)
605- $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
621+func dP (bF,bN,dQ) = {
622+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
623+ let bq = bY(aX)
624+ if ((bq == bq))
625+ then {
626+ let dR = "empty"
627+ let dS = if ((bF != dR))
628+ then {
629+ let dT = valueOrErrorMessage(getString(bO, S(bF)), l(("unsupported lp asset " + bF)))
630+ getIntegerValue(bO, U(dT))
631+ }
632+ else if (dQ)
633+ then 0
634+ else n(("not readonly mode: unsupported lp asset " + bF))
635+ let dU = br(bq, bF)
636+ let dV = bp(bq)
637+ let dW = valueOrElse(getInteger(this, dU), r(this, dV))
638+ let dO = dE()._2
639+ let dX = (dO - dW)
640+ if ((0 > dX))
641+ then n("wrong calculations")
642+ else {
643+ let dY = dw(bF, bN)
644+ let dZ = dY._1
645+ let ea = dY._2
646+ let eb = dY._3
647+ let ec = fraction(dX, dS, d)
648+ let ed = if ((eb == 0))
649+ then 0
650+ else fraction(ec, ea, eb)
651+ let ee = ([IntegerEntry(dU, dO)] ++ dZ)
652+ let ef = makeString([toString(dW), toString(dX), toString(dS), toString(ea), toString(eb)], ":")
653+ $Tuple3(ed, ee, ef)
654+ }
655+ }
656+ else throw("Strict value is not equal to itself.")
606657 }
607658
608659
609-func dZ () = {
610- let ea = n(bT, ag())
611- let eb = getInteger(this, aj())
612- let ec = getInteger(this, ak())
613- let ed = n(bT, am())
614- let cH = if ((height > ed))
615- then ed
616- else height
617- let ee = {
618- let r = eb
619- if ($isInstanceOf(r, "Int"))
620- then {
621- let ef = r
622- max([(cH - ef), 0])
623- }
624- else if ($isInstanceOf(r, "Unit"))
625- then 0
626- else throw("Match error")
627- }
628- let eg = ((ea * (bZ - 1)) / bZ)
629- let eh = valueOrElse(ec, 0)
630- let ei = ((eg * ee) + eh)
631- $Tuple2([IntegerEntry(ak(), ei), IntegerEntry(aj(), height)], ei)
632- }
633-
634-
635-func ej (bJ,bR,ek) = {
636- let el = getString(this, aR(bR))
637- if ((el == unit))
638- then $Tuple3(0, nil, "userRecord::is::empty")
660+func eg (aN,eh) = {
661+ let bf = (eh * k)
662+ let ei = toBase58String(az)
663+ if ((size(aN.payments) != 1))
664+ then n("invalid payment - exact one payment must be attached")
639665 else {
640- let em = split(value(el), a)
641- let en = em[aL]
642- let eo = "empty"
643- let ep = if ((bJ != eo))
644- then {
645- let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646- getIntegerValue(bS, Q(eq))
647- }
648- else if (ek)
649- then 0
650- else g(("not readonly mode: unsupported lp asset " + bJ))
651- let er = bu(en, bJ)
652- let es = bt(en)
653- let et = valueOrElse(getInteger(this, er), k(this, es))
654- let ei = dZ()._2
655- let eu = (ei - et)
656- if ((0 > eu))
657- then g("wrong calculations")
658- else {
659- let ev = dR(bJ, bR)
660- let ew = ev._1
661- let ex = ev._2
662- let ey = ev._3
663- let ez = fraction(eu, ep, d)
664- let eA = if ((ey == 0))
665- then 0
666- else fraction(ez, ex, ey)
667- let eB = ([IntegerEntry(er, ei)] ++ ew)
668- let eC = makeString([toString(et), toString(eu), toString(ep), toString(ex), toString(ey)], ":")
669- $Tuple3(eA, eB, eC)
670- }
666+ let cC = aN.payments[0]
667+ let ej = cC.amount
668+ if ((az != value(cC.assetId)))
669+ then n((("invalid asset is in payment - " + ei) + " is expected"))
670+ else if (!(containsElement(i, eh)))
671+ then n("invalid duration")
672+ else {
673+ let ek = bi()
674+ let aX = aN.caller
675+ let bN = toString(aX)
676+ let el = isDefined(getString(bj(bN)))
677+ let em = if (el)
678+ then value(getString(bj(bN)))
679+ else toString(u(this, ek))
680+ let bq = parseIntValue(em)
681+ let cj = height
682+ if (if ((aA > ej))
683+ then (aX != bS)
684+ else false)
685+ then n(("amount is less then minLockAmount=" + toString(aA)))
686+ else if ((aB > bf))
687+ then n(("passed duration is less then minLockDuration=" + toString(aB)))
688+ else if ((bf > aC))
689+ then n(("passed duration is greater then maxLockDuration=" + toString(aC)))
690+ else {
691+ let en = fraction(ej, bf, aC)
692+ let eo = bZ()
693+ let dV = bp(bq)
694+ let dO = dE()._2
695+ let ep = cD(aX)
696+ let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes, bq], nil)
697+ if ((eq == eq))
698+ then {
699+ let er = if (el)
700+ then nil
701+ else [IntegerEntry(ek, (bq + 1)), StringEntry(bj(bN), em), StringEntry(bk(em), bN)]
702+ $Tuple2(((((er ++ cz(aX, aN.transactionId, ej, cj, bf, en, 0)) ++ cm(ej, bf, 1, if (el)
703+ then 0
704+ else 1)) :+ cg("lock", bN, ej, cj, bf, en, aN)) ++ [IntegerEntry(dV, dO), IntegerEntry(bx(), (eo + en)), IntegerEntry(bb(aX), (ep + en))]), en)
705+ }
706+ else throw("Strict value is not equal to itself.")
707+ }
708+ }
671709 }
672710 }
673711
674712
675-func eD (aI,aY) = {
676- let eE = av()
677- let eF = eE[ap]
678- let ay = fromBase58String(eF)
679- let az = parseIntValue(eE[aq])
680- let aA = parseIntValue(eE[ar])
681- let aB = parseIntValue(eE[as])
682- if ((size(aI.payments) != 1))
683- then g("invalid payment - exact one payment must be attached")
684- else {
685- let cT = aI.payments[0]
686- let eG = cT.amount
687- if ((ay != value(cT.assetId)))
688- then g((("invalid asset is in payment - " + eF) + " is expected"))
689- else {
690- let eH = be()
691- let bR = toString(aI.caller)
692- let eI = isDefined(getString(bf(bR)))
693- let en = if (eI)
694- then value(getString(bf(bR)))
695- else toString(n(this, eH))
696- let aV = parseIntValue(en)
697- let cm = height
698- let cL = bi(en)
699- let cM = bj(en)
700- let cK = bh(en)
701- if (if ((az > eG))
702- then (aI.caller != bW)
703- else false)
704- then g(("amount is less then minLockAmount=" + toString(az)))
705- else if ((aA > aY))
706- then g(("passed duration is less then minLockDuration=" + toString(aA)))
707- else if ((aY > aB))
708- then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709- else if (if (eI)
710- then ((n(this, cL) + n(this, cM)) >= cm)
711- else false)
712- then g("there is an active lock - consider to use increaseLock")
713- else if ((k(this, cK) > 0))
714- then g(("there are locked WXs - consider to use increaseLock " + cK))
715- else {
716- let eJ = fraction(aY, c, aB)
717- let eK = fraction(eG, eJ, c)
718- let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, cm, aY], nil))
719- let cn = t(eL[0])
720- let co = t(eL[1])
721- let bn = toString(t(eL[2]))
722- let cg = cb(false)
723- let es = bt(en)
724- let ei = dZ()._2
725- let eM = if (eI)
726- then nil
727- else [IntegerEntry(eH, (aV + 1)), StringEntry(bf(bR), en), StringEntry(bg(en), bR)]
728- $Tuple2(((((eM ++ cJ(bR, en, eG, cm, aY, cn, co, bn)) ++ cr(eG, aY, 1, if (eI)
729- then 0
730- else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731- }
732- }
733- }
713+func es (aX,et) = {
714+ let eu = ba(aX, et)
715+ let ev = parseIntValue(eu[aQ])
716+ let cj = parseIntValue(eu[aR])
717+ let ew = parseIntValue(eu[aS])
718+ let ex = (cj + ew)
719+ let bh = parseIntValue(eu[aV])
720+ let ey = ((height - cj) / aE)
721+ let ez = fraction(toBigInt(ey), (toBigInt((8 * aE)) * h), toBigInt(ew))
722+ let eA = if ((height > ex))
723+ then ev
724+ else (toInt(fraction(toBigInt(ev), (h - pow(toBigInt(5), 1, ez, f, f, DOWN)), h)) - bh)
725+ eA
734726 }
735727
736728
737-@Callable(aI)
738-func constructor (eN,eO,az,eP,eQ,aw) = {
739- let eR = aH(aI)
740- if ((eR == eR))
741- then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eO, az, eP, eQ, aw)), StringEntry(A(), eN)] ++ cr(0, 0, 0, 0))
729+@Callable(aN)
730+func constructor (eB,eC,aA,eD,eE,aD) = {
731+ let eF = aM(aN)
732+ if ((eF == eF))
733+ then ([IntegerEntry(bi(), 0), StringEntry(aw(), aG(eC, aA, eD, eE, aD)), StringEntry(F(), eB)] ++ cm(0, 0, 0, 0))
742734 else throw("Strict value is not equal to itself.")
743735 }
744736
745737
746738
747-@Callable(aI)
748-func lockRef (aY,eS,eT) = {
749- let eU = eD(aI, aY)
750- let eV = eU._1
751- let eK = eU._2
752- let eW = toString(aI.caller)
753- let eX = if (if ((eS == ""))
739+@Callable(aN)
740+func lockRef (bf,eG,eH) = {
741+ let eI = eg(aN, bf)
742+ let eJ = eI._1
743+ let en = eI._2
744+ let eK = toString(aN.caller)
745+ let eL = if (if ((eG == ""))
754746 then true
755- else (eT == base58''))
747+ else (eH == base58''))
756748 then unit
757- else invoke(w, "createPair", [z, eS, eW, eT], nil)
758- if ((eX == eX))
749+ else invoke(B, "createPair", [E, eG, eK, eH], nil)
750+ if ((eL == eL))
759751 then {
760- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761- if ((eY == eY))
762- then $Tuple2(eV, unit)
752+ let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
753+ if ((eM == eM))
754+ then $Tuple2(eJ, unit)
763755 else throw("Strict value is not equal to itself.")
764756 }
765757 else throw("Strict value is not equal to itself.")
767759
768760
769761
770-@Callable(aI)
771-func lock (aY) = {
772- let eZ = eD(aI, aY)
773- let eV = eZ._1
774- let eK = eZ._2
775- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
776- if ((eY == eY))
777- then $Tuple2(eV, unit)
762+@Callable(aN)
763+func lock (bf) = {
764+ let eN = eg(aN, bf)
765+ let eJ = eN._1
766+ let en = eN._2
767+ let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
768+ if ((eM == eM))
769+ then $Tuple2(eJ, unit)
778770 else throw("Strict value is not equal to itself.")
779771 }
780772
781773
782774
783-@Callable(aI)
784-func increaseLock (fa) = {
785- let eE = av()
786- let eF = eE[ap]
787- let ay = fromBase58String(eF)
788- let aA = parseIntValue(eE[ar])
789- let aB = parseIntValue(eE[as])
790- let eG = cR(aI, ay)
791- let bR = toString(aI.caller)
792- let em = aT(bR)
793- let en = em[aL]
794- let fb = parseIntValue(em[aM])
795- let cm = parseIntValue(em[aN])
796- let fc = parseIntValue(em[aO])
797- let fd = (cm + fc)
798- let fe = max([(fd - height), 0])
799- let ff = (fb + eG)
800- let fg = (fe + fa)
801- if ((0 > fa))
802- then g("duration is less then zero")
803- else if ((aA > fg))
804- then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805- else if ((fg > aB))
806- then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807- else {
808- let eJ = fraction(fg, c, aB)
809- let eK = fraction(ff, eJ, c)
810- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
811- if ((eY == eY))
812- then {
813- let fh = height
814- let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, fh, fg], nil))
815- let cn = t(eL[0])
816- let co = t(eL[1])
817- let bn = toString(t(eL[2]))
818- let fi = cZ(bR)
819- let fj = (eK - fi)
820- if ((0 > fj))
821- then g(("gwxDiff is less then 0: " + toString(fj)))
822- else {
823- let cg = cb(false)
824- let fk = cb(true)
825- (((cJ(bR, en, ff, fh, fg, cn, co, bn) ++ cr(eG, fa, 0, 0)) :+ cj("lock", bR, eG, cm, fg, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fj))])
826- }
827- }
828- else throw("Strict value is not equal to itself.")
829- }
775+@Callable(aN)
776+func claimWxBoost (bF,bN) = if ((bQ != aN.caller))
777+ then n("permissions denied")
778+ else {
779+ let eO = dP(bF, bN, false)
780+ let eP = eO._1
781+ let ee = eO._2
782+ let ef = eO._3
783+ $Tuple2(ee, [eP])
784+ }
785+
786+
787+
788+@Callable(aN)
789+func claimWxBoostREADONLY (bF,bN) = {
790+ let eQ = dP(bF, bN, true)
791+ let eP = eQ._1
792+ let ee = eQ._2
793+ let ef = eQ._3
794+ $Tuple2(nil, [eP, ef])
830795 }
831796
832797
833798
834-@Callable(aI)
835-func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836- then g("permissions denied")
837- else {
838- let fl = ej(bJ, bR, false)
839- let fm = fl._1
840- let eB = fl._2
841- let eC = fl._3
842- $Tuple2(eB, [fm])
843- }
844-
845-
846-
847-@Callable(aI)
848-func claimWxBoostREADONLY (bJ,bR) = {
849- let fn = ej(bJ, bR, true)
850- let fm = fn._1
851- let eB = fn._2
852- let eC = fn._3
853- $Tuple2(nil, [fm, eC])
854- }
855-
856-
857-
858-@Callable(aI)
859-func unlock (aS) = {
860- let em = aT(aS)
861- let en = em[aL]
862- let fb = parseIntValue(em[aM])
863- let cm = parseIntValue(em[aN])
864- let fc = parseIntValue(em[aO])
865- let fd = (cm + fc)
866- let eE = av()
867- let ay = fromBase58String(eE[ap])
868- if ((fd >= height))
869- then g((("wait " + toString(fd)) + " to unlock"))
870- else if ((0 >= fb))
871- then g("nothing to unlock")
872- else {
873- let bn = valueOrElse(getInteger(aw, an()), 0)
874- (((cJ(aS, en, 0, cm, fc, 0, 0, toString(bn)) ++ cr(-(fb), 0, 0, -1)) :+ cj("unlock", aS, fb, cm, fc, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fb, ay))
875- }
876- }
877-
878-
879-
880-@Callable(aI)
881-func gwxUserInfoREADONLY (aS) = {
882- let bc = cZ(aS)
883- $Tuple2(nil, [bc])
884- }
885-
886-
887-
888-@Callable(aI)
889-func userMaxDurationREADONLY (bR) = {
890- let eE = av()
891- let aB = parseIntValue(eE[as])
892- let el = getString(this, aR(bR))
893- if ((el == unit))
894- then $Tuple2(nil, $Tuple2("lock", aB))
799+@Callable(aN)
800+func unlock (eR) = {
801+ let aX = aN.caller
802+ let bN = toString(aX)
803+ let aY = fromBase58String(eR)
804+ let eu = ba(aX, if ((eR == ""))
805+ then unit
806+ else aY)
807+ let ev = parseIntValue(eu[aQ])
808+ let cj = parseIntValue(eu[aR])
809+ let ew = parseIntValue(eu[aS])
810+ let bh = parseIntValue(eu[aV])
811+ let bg = parseIntValue(eu[aU])
812+ let ey = ((height - cj) / aE)
813+ let eA = es(aX, if ((eR == ""))
814+ then unit
815+ else aY)
816+ let en = fraction(ev, ew, aC)
817+ let eS = min([fraction((ey * aE), en, aC), bg])
818+ let eT = x((bg - eS), "gwxRemaining")
819+ let eU = ca(aX)
820+ if ((0 >= ev))
821+ then n("nothing to unlock")
895822 else {
896- let em = split(value(el), a)
897- let cm = parseIntValue(em[aN])
898- let fc = parseIntValue(em[aO])
899- let fd = (cm + fc)
900- let fe = max([(fd - height), 0])
901- let fo = (aB - fe)
902- $Tuple2(nil, $Tuple2("increaseLock", fo))
823+ let eo = bZ()
824+ let ep = cD(aX)
825+ let eV = x((ep - eS), "userGwxAmountTotalNew")
826+ if ((eU > eV))
827+ then n(("locked gwx amount: " + toString(eU)))
828+ else {
829+ let bq = parseIntValue(valueOrErrorMessage(getString(bj(bN)), l("invalid user number")))
830+ let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes, bq], nil)
831+ if ((eq == eq))
832+ then ((((cz(aX, aY, ev, cj, ew, eT, (bh + eA)) ++ cm(-(eA), 0, 0, 0)) :+ cg("unlock", bN, eA, cj, ew, eS, aN)) :+ ScriptTransfer(aX, eA, az)) ++ [IntegerEntry(bx(), x((eo - eS), "gwxTotal")), IntegerEntry(bb(aX), eV)])
833+ else throw("Strict value is not equal to itself.")
834+ }
903835 }
904836 }
905837
906838
907839
908-@Callable(aI)
909-func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910- let bc = cU(aS, cV)
911- $Tuple2(nil, bc)
840+@Callable(aN)
841+func gwxUserInfoREADONLY (bN) = {
842+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
843+ let bg = cD(aX)
844+ $Tuple2(nil, [bg])
912845 }
913846
914847
915848
916-@Callable(aI)
917-func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
849+@Callable(aN)
850+func userMaxDurationREADONLY (bN) = $Tuple2(nil, $Tuple2("lock", aC))
918851
919852
920853
921-@Callable(aI)
854+@Callable(aN)
855+func getUserGwxAmountAtHeightREADONLY (bN,eW) = {
856+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
857+ let bg = cD(aX)
858+ $Tuple2(nil, bg)
859+ }
860+
861+
862+
863+@Callable(aN)
864+func getUserGwxAmount (bN) = {
865+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
866+ let bg = cD(aX)
867+ $Tuple2(nil, bg)
868+ }
869+
870+
871+
872+@Callable(aN)
873+func getGwxTotalREADONLY () = $Tuple2(nil, bZ())
874+
875+
876+
877+@Callable(aN)
922878 func onBoostEmissionUpdate () = {
923- let eR = if ((aI.caller == bT))
879+ let eF = if ((aN.caller == bP))
924880 then true
925- else aH(aI)
926- if ((eR == eR))
927- then dZ()
881+ else aM(aN)
882+ if ((eF == eF))
883+ then dE()
928884 else throw("Strict value is not equal to itself.")
929885 }
930886
931887
932888
933-@Callable(aI)
934-func onStakedVoteUpdate (bJ,bR,dL) = {
935- let eR = if ((aI.caller == bU))
889+@Callable(aN)
890+func onStakedVoteUpdate (bF,bN,dq) = {
891+ let eF = if ((aN.caller == bQ))
936892 then true
937- else aH(aI)
938- if ((eR == eR))
893+ else aM(aN)
894+ if ((eF == eF))
939895 then {
940- let dO = dK(bJ, bR, dL)
941- $Tuple2(dO, unit)
896+ let dt = dp(bF, bN, dq)
897+ $Tuple2(dt, unit)
942898 }
943899 else throw("Strict value is not equal to itself.")
944900 }
945901
946902
947903
948-@Callable(aI)
949-func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
904+@Callable(aN)
905+func getVotingResultStakedREADONLY (bF) = $Tuple2(nil, cU(bF))
950906
951907
952908
953-@Callable(aI)
954-func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
909+@Callable(aN)
910+func getVotingResultStakedIntegralREADONLY (bF) = $Tuple2(nil, cY(bF))
955911
956912
957913
958-@Callable(aI)
959-func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
914+@Callable(aN)
915+func getUserVoteFinalizedREADONLY (bF,bN) = $Tuple2(nil, cN(bF, bN))
960916
961917
962918
963-@Callable(aI)
964-func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
919+@Callable(aN)
920+func getUserVoteStakedIntegralREADONLY (bF,bN) = $Tuple2(nil, di(bF, bN))
965921
966922
967-@Verifier(fp)
968-func fq () = {
969- let fr = {
970- let r = aF()
971- if ($isInstanceOf(r, "ByteVector"))
923+@Verifier(eX)
924+func eY () = {
925+ let eZ = {
926+ let aI = aK()
927+ if ($isInstanceOf(aI, "ByteVector"))
972928 then {
973- let aK = r
974- aK
929+ let aP = aI
930+ aP
975931 }
976- else if ($isInstanceOf(r, "Unit"))
977- then fp.senderPublicKey
932+ else if ($isInstanceOf(aI, "Unit"))
933+ then eX.senderPublicKey
978934 else throw("Match error")
979935 }
980- sigVerify(fp.bodyBytes, fp.proofs[0], fr)
936+ sigVerify(eX.bodyBytes, eX.proofs[0], eZ)
981937 }
982938
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
12-func e (f) = makeString(["boosting.ride:", f], " ")
12+let e = "boosting.ride"
13+
14+let f = 18
15+
16+let g = 1000000000000000000
17+
18+let h = toBigInt(g)
19+
20+let i = [1, 3, 6, 12, 24, 48]
21+
22+let j = 1440
23+
24+let k = 43800
25+
26+func l (m) = makeString([e, ": ", m], "")
1327
1428
15-func g (f) = throw(e(f))
29+func n (m) = throw(l(m))
1630
1731
18-func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
32+func o (p,q) = valueOrErrorMessage(getString(p, q), l((("mandatory this." + q) + " is not defined")))
1933
2034
21-func k (i,j) = valueOrElse(getInteger(i, j), 0)
35+func r (p,q) = valueOrElse(getInteger(p, q), 0)
2236
2337
24-func l (i,j,m) = valueOrElse(getInteger(i, j), m)
38+func s (p,q,t) = valueOrElse(getInteger(p, q), t)
2539
2640
27-func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
41+func u (p,q) = valueOrErrorMessage(getInteger(p, q), l((("mandatory this." + q) + " is not defined")))
2842
2943
30-func o (p) = if ((0 > p))
31- then -(p)
32- else p
44+func v (w) = if ((0 > w))
45+ then -(w)
46+ else w
3347
3448
35-func q (p) = {
36- let r = p
37- if ($isInstanceOf(r, "List[Any]"))
38- then {
39- let s = r
40- s
41- }
42- else g("fail to cast into List[Any]")
43- }
49+func x (y,z) = if ((y >= 0))
50+ then y
51+ else n((valueOrElse(z, "value") + " should be positive"))
4452
4553
46-func t (p) = {
47- let r = p
48- if ($isInstanceOf(r, "Int"))
49- then {
50- let u = r
51- u
52- }
53- else g("fail to cast into Int")
54- }
54+func A () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5555
5656
57-func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
57+let B = addressFromStringValue(o(this, A()))
58+
59+let C = makeString(["%s%s", "referral", "programName"], a)
60+
61+let D = "wxlock"
62+
63+let E = valueOrElse(getString(this, C), D)
64+
65+func F () = "%s%s__config__factoryAddress"
5866
5967
60-let w = addressFromStringValue(h(this, v()))
68+let G = 1
6169
62-let x = makeString(["%s%s", "referral", "programName"], a)
70+let H = 2
6371
64-let y = "wxlock"
72+let I = 3
6573
66-let z = valueOrElse(getString(this, x), y)
74+let J = 4
6775
68-func A () = "%s%s__config__factoryAddress"
76+let K = 5
77+
78+let L = 6
79+
80+let M = 7
81+
82+let N = 8
83+
84+let O = 9
85+
86+let P = 10
87+
88+let Q = 11
89+
90+func R () = "%s__factoryConfig"
6991
7092
71-let B = 1
72-
73-let C = 2
74-
75-let D = 3
76-
77-let E = 4
78-
79-let F = 5
80-
81-let G = 6
82-
83-let H = 7
84-
85-let I = 8
86-
87-let J = 9
88-
89-let K = 10
90-
91-let L = 11
92-
93-func M () = "%s__factoryConfig"
93+func S (T) = makeString(["%s%s%s", T, "mappings__lpAsset2PoolContract"], a)
9494
9595
96-func N () = "%s__lpTokensList"
96+func U (V) = makeString(["%s%s", "poolWeight", V], a)
9797
9898
99-func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
99+func W (X,Y) = ((("%s%s__poolWeight__" + X) + "__") + toString(Y))
100100
101101
102-func Q (R) = makeString(["%s%s", "poolWeight", R], a)
102+func Z () = addressFromStringValue(o(this, F()))
103103
104104
105-func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
105+func aa (ab) = split(o(ab, R()), a)
106106
107107
108-func V () = addressFromStringValue(h(this, A()))
108+func ac (ad) = addressFromStringValue(ad[H])
109109
110110
111-func W () = split(valueOrElse(getString(V(), N()), ""), a)
111+func ae (ad) = addressFromStringValue(ad[K])
112112
113113
114-func X (Y) = split(h(Y, M()), a)
114+func af (ad) = addressFromStringValue(ad[G])
115115
116116
117-func Z (aa) = addressFromStringValue(aa[C])
117+func ag (ad) = addressFromStringValue(ad[P])
118118
119119
120-func ab (aa) = addressFromStringValue(aa[F])
120+func ah () = "%s__managerPublicKey"
121121
122122
123-func ac (aa) = addressFromStringValue(aa[B])
123+func ai () = "%s__managerVaultAddress"
124124
125125
126-func ad (aa) = addressFromStringValue(aa[K])
126+func aj () = "%s%s__ratePerBlock__current"
127127
128128
129-func ae () = "%s__managerPublicKey"
129+func ak () = "%s%s__ratePerBlockMax__current"
130130
131131
132-func af () = "%s__managerVaultAddress"
132+func al () = "%s%s__emission__startBlock"
133133
134134
135-func ag () = "%s%s__ratePerBlock__current"
135+func am () = "%s%s__boostingV2__startBlock"
136136
137137
138-func ah () = "%s%s__ratePerBlockMax__current"
138+func an () = "%s%s__boostingV2__integral"
139139
140140
141-func ai () = "%s%s__emission__startBlock"
141+func ao () = "%s%s__emission__duration"
142142
143143
144-func aj () = "%s%s__boostingV2__startBlock"
144+func ap () = "%s%s__emission__endBlock"
145145
146146
147-func ak () = "%s%s__boostingV2__integral"
147+let aq = 1
148+
149+let ar = 2
150+
151+let as = 3
152+
153+let at = 4
154+
155+let au = 5
156+
157+let av = 6
158+
159+func aw () = "%s__config"
148160
149161
150-func al () = "%s%s__emission__duration"
162+func ax () = split(o(this, aw()), a)
151163
152164
153-func am () = "%s%s__emission__endBlock"
165+let ay = ax()
166+
167+let az = fromBase58String(ay[aq])
168+
169+let aA = valueOrErrorMessage(parseInt(ay[ar]), l("invalid min lock amount"))
170+
171+let aB = valueOrErrorMessage(parseInt(ay[as]), l("invalid min lock duration"))
172+
173+let aC = valueOrErrorMessage(parseInt(ay[at]), l("invalid max lock duration"))
174+
175+let aD = valueOrErrorMessage(addressFromString(ay[au]), l("invalid math contract address"))
176+
177+let aE = valueOrErrorMessage(parseInt(ay[av]), l("invalid blocks in period"))
178+
179+func aF (az,aA,aB,aC,aD) = makeString(["%s%d%d%d%s", az, aA, aB, aC, aD], a)
154180
155181
156-func an () = "%s__nextPeriod"
182+func aG (az,aA,aB,aC,aD) = aF(az, toString(aA), toString(aB), toString(aC), aD)
157183
158184
159-func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160-
161-
162-let ap = 1
163-
164-let aq = 2
165-
166-let ar = 3
167-
168-let as = 4
169-
170-let at = 5
171-
172-func au () = "%s__config"
173-
174-
175-func av () = split(h(this, au()), a)
176-
177-
178-let aw = addressFromStringValue(av()[at])
179-
180-func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181-
182-
183-func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184-
185-
186-func aD () = {
187- let r = getString(af())
188- if ($isInstanceOf(r, "String"))
185+func aH () = {
186+ let aI = getString(ai())
187+ if ($isInstanceOf(aI, "String"))
189188 then {
190- let aE = r
191- addressFromStringValue(aE)
189+ let aJ = aI
190+ addressFromStringValue(aJ)
192191 }
193192 else this
194193 }
195194
196195
197-func aF () = {
198- let aG = aD()
199- let r = getString(aG, ae())
200- if ($isInstanceOf(r, "String"))
196+func aK () = {
197+ let aL = aH()
198+ let aI = getString(aL, ah())
199+ if ($isInstanceOf(aI, "String"))
201200 then {
202- let aE = r
203- fromBase58String(aE)
201+ let aJ = aI
202+ fromBase58String(aJ)
204203 }
205- else if ($isInstanceOf(r, "Unit"))
204+ else if ($isInstanceOf(aI, "Unit"))
206205 then unit
207206 else throw("Match error")
208207 }
209208
210209
211-func aH (aI) = {
212- let aJ = g("Permission denied")
213- let r = aF()
214- if ($isInstanceOf(r, "ByteVector"))
210+func aM (aN) = {
211+ let aO = n("Permission denied")
212+ let aI = aK()
213+ if ($isInstanceOf(aI, "ByteVector"))
215214 then {
216- let aK = r
217- if ((aI.callerPublicKey == aK))
215+ let aP = aI
216+ if ((aN.callerPublicKey == aP))
218217 then true
219- else aJ
218+ else aO
220219 }
221- else if ($isInstanceOf(r, "Unit"))
222- then if ((aI.caller == this))
220+ else if ($isInstanceOf(aI, "Unit"))
221+ then if ((aN.caller == this))
223222 then true
224- else aJ
223+ else aO
225224 else throw("Match error")
226225 }
227226
228227
229-let aL = 1
228+let aQ = 1
230229
231-let aM = 2
230+let aR = 2
232231
233-let aN = 3
232+let aS = 3
234233
235-let aO = 4
234+let aT = 4
236235
237-let aP = 5
236+let aU = 5
238237
239-let aQ = 6
238+let aV = 6
240239
241-func aR (aS) = makeString(["%s%s__lock", aS], a)
240+func aW (aX,aY) = makeString(["%s%s%s__lock", toString(aX), {
241+ let aI = aY
242+ if ($isInstanceOf(aI, "ByteVector"))
243+ then {
244+ let aZ = aI
245+ toBase58String(aZ)
246+ }
247+ else if ($isInstanceOf(aI, "Unit"))
248+ then "legacy"
249+ else throw("Match error")
250+ }], a)
242251
243252
244-func aT (aS) = split(h(this, aR(aS)), a)
253+func ba (aX,aY) = split(o(this, aW(aX, aY)), a)
245254
246255
247-func aU (aV,aW,aX,aY,aZ,ba,bb,bc) = makeString(["%d%d%d%d%d%d%d%d", aV, aW, aX, aY, aZ, ba, bb, bc], a)
256+func bb (aX) = makeString(["%s%s__gwxAmountTotal", toString(aX)], a)
248257
249258
250-func bd (aV,aW,aX,aY,aZ,ba,bc) = aU(aV, toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(lastBlock.timestamp), toString(bc))
259+func bc (bd,be,bf,bg,bh) = makeString(["%d%d%d%d%d%d", toString(bd), toString(be), toString(bf), toString(lastBlock.timestamp), toString(bg), toString(bh)], a)
251260
252261
253-func be () = "%s__nextUserNum"
262+func bi () = "%s__nextUserNum"
254263
255264
256-func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
265+func bj (aX) = makeString(["%s%s%s__mapping__user2num", aX], a)
257266
258267
259-func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
268+func bk (Y) = makeString(["%s%s%s__mapping__num2user", Y], a)
260269
261270
262-func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
271+func bl () = "%s%s__stats__activeTotalLocked"
263272
264273
265-func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
274+func bm () = "%s%s__stats__locksDurationSumInBlocks"
266275
267276
268-func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
277+func bn () = "%s%s__stats__locksCount"
269278
270279
271-func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
280+func bo () = "%s%s__stats__activeUsersCount"
272281
273282
274-func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
283+func bp (bq) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq)], a)
275284
276285
277-func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
286+func br (bq,bs) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq), bs], a)
278287
279288
280-func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
289+func bt (bq) = makeString(["%s%d__maxBoostInt", toString(bq)], a)
281290
282291
283-func bp () = "%s%s__stats__activeTotalLocked"
292+func bu () = "%s%s__maxBoostInt__total"
284293
285294
286-func bq () = "%s%s__stats__locksDurationSumInBlocks"
295+func bv (bq) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(bq)], a)
287296
288297
289-func br () = "%s%s__stats__locksCount"
298+func bw (bq) = makeString(["%s%d__userBoostClaimed", toString(bq)], a)
290299
291300
292-func bs () = "%s%s__stats__activeUsersCount"
301+func bx () = "%s%s__gwx__total"
293302
294303
295-func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
304+func by (bz,bA,p,bB) = makeString(["%s%s%s%s%d", "vote", bz, bA, toString(p), toString(bB)], a)
296305
297306
298-func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
307+func bC (bB) = makeString(["%s%d", "startHeight", toString(bB)], a)
299308
300309
301-func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
310+func bD () = makeString(["%s", "currentEpochUi"], a)
302311
303312
304-func bx () = "%s%s__maxBoostInt__total"
313+func bE (bF,bB) = makeString(["%s%s%d", "votingResultStaked", bF, toString(bB)], a)
305314
306315
307-func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
316+func bG (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegral", bF, toString(bB)], a)
308317
309318
310-func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
319+func bH (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bF, toString(bB)], a)
311320
312321
313-func bA () = "%s%s__gwxCached__total"
322+func bI (bF,p,bB) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bF, toString(p), toString(bB)], a)
314323
315324
316-func bB () = "%s__gwxCachedTotalCorrective"
325+func bJ (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegral", bF, toString(p), toString(bB)], a)
317326
318327
319-func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
328+func bK (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bF, toString(p), toString(bB)], a)
320329
321330
322-func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
331+func bL (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bF, toString(p), toString(bB)], a)
323332
324333
325-func bH () = makeString(["%s", "currentEpochUi"], a)
334+func bM (bN,bF) = makeString(["%s%s%s", "staked", bN, bF], a)
326335
327336
328-func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
337+let bO = Z()
329338
339+let ad = aa(bO)
330340
331-func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
341+let bP = ae(ad)
332342
343+let bQ = af(ad)
333344
334-func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
345+let bR = ag(ad)
335346
347+let bS = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), l("lp_staking_pools contract address is undefined"))), l("invalid lp_staking_pools contract address"))
336348
337-func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
349+let bT = makeString(["%s", "votingEmissionContract"], a)
338350
351+let bU = addressFromStringValue(getStringValue(bO, bT))
339352
340-func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
353+let bV = makeString(["%s", "votingEmissionRateContract"], a)
341354
342-
343-func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344-
345-
346-func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347-
348-
349-func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350-
351-
352-let bS = V()
353-
354-let aa = X(bS)
355-
356-let bT = ab(aa)
357-
358-let bU = ac(aa)
359-
360-let bV = ad(aa)
361-
362-let bW = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), e("lp_staking_pools contract address is undefined"))), e("invalid lp_staking_pools contract address"))
363-
364-let bX = makeString(["%s", "votingEmissionContract"], a)
365-
366-let bY = addressFromStringValue(getStringValue(bS, bX))
367-
368-let bZ = {
369- let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370- if ($isInstanceOf(ca, "Int"))
371- then ca
372- else throw(($getType(ca) + " couldn't be cast to Int"))
355+let bW = {
356+ let bX = invoke(bP, "getBoostCoeffREADONLY", nil, nil)
357+ if ($isInstanceOf(bX, "Int"))
358+ then bX
359+ else throw(($getType(bX) + " couldn't be cast to Int"))
373360 }
374361
375-func cb (cc) = {
376- let cd = getIntegerValue(bY, bH())
377- let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378- let cf = getInteger(this, ce)
379- let cg = valueOrElse(getInteger(this, bA()), 0)
380- let ch = if (isDefined(cf))
381- then (cd >= value(cf))
382- else false
383- let ci = if (if (ch)
384- then cc
385- else false)
386- then valueOrElse(getInteger(this, bB()), 0)
387- else 0
388- max([0, (cg + ci)])
362+func bY (aX) = {
363+ let aI = getString(this, bj(toString(aX)))
364+ if ($isInstanceOf(aI, "String"))
365+ then {
366+ let aJ = aI
367+ valueOrErrorMessage(parseInt(aJ), l("invalid user number"))
368+ }
369+ else if ($isInstanceOf(aI, "Unit"))
370+ then n("invalid user")
371+ else throw("Match error")
389372 }
390373
391374
392-func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393- let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394- let cq = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aW), toString(cm), toString(aY), toString(cn), toString(co)], a)
395- StringEntry(cp, cq)
375+func bZ () = valueOrElse(getInteger(this, bx()), 0)
376+
377+
378+func ca (aX) = {
379+ let cb = "getLockedGwxAmount"
380+ let cc = valueOrErrorMessage({
381+ let aI = getString(bU, bV)
382+ if ($isInstanceOf(aI, "Unit"))
383+ then unit
384+ else if ($isInstanceOf(aI, "String"))
385+ then {
386+ let aJ = aI
387+ addressFromString(aJ)
388+ }
389+ else throw("Match error")
390+ }, l("invalid voting emission rate address"))
391+ let cd = {
392+ let bX = invoke(bU, cb, [toString(aX)], nil)
393+ if ($isInstanceOf(bX, "Int"))
394+ then bX
395+ else throw(($getType(bX) + " couldn't be cast to Int"))
396+ }
397+ let ce = {
398+ let bX = invoke(cc, cb, [toString(aX)], nil)
399+ if ($isInstanceOf(bX, "Int"))
400+ then bX
401+ else throw(($getType(bX) + " couldn't be cast to Int"))
402+ }
403+ let cf = max([cd, ce])
404+ cf
396405 }
397406
398407
399-func cr (cs,ct,cu,cv) = {
400- let cw = bq()
401- let cx = br()
402- let cy = bs()
403- let cz = bp()
404- let cA = k(this, cw)
405- let cB = k(this, cx)
406- let cC = k(this, cy)
407- let cD = k(this, cz)
408-[IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
408+func cg (ch,ci,bd,cj,bf,bg,aN) = {
409+ let ck = makeString(["%s%s%s%s__history", ch, ci, toBase58String(aN.transactionId)], a)
410+ let cl = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(bd), toString(cj), toString(bf), toString(bg)], a)
411+ StringEntry(ck, cl)
409412 }
410413
411414
412-func cE (cF,cG,cH) = {
413- let cI = 1000
414- (((cF * cH) + cG) / cI)
415+func cm (cn,co,cp,cq) = {
416+ let cr = bm()
417+ let cs = bn()
418+ let ct = bo()
419+ let cu = bl()
420+ let cv = r(this, cr)
421+ let cw = r(this, cs)
422+ let cx = r(this, ct)
423+ let cy = r(this, cu)
424+[IntegerEntry(cr, (cv + co)), IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cn))]
415425 }
416426
417427
418-func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419- let cK = bh(aV)
420- let cL = bi(aV)
421- let cM = bj(aV)
422- let cN = bk(aV)
423- let cO = bl(aV)
424- let cP = bm(aV, bn)
425- let cQ = bo(aV, bn)
426- let bc = cE(cn, co, height)
427-[IntegerEntry(cK, aW), IntegerEntry(cL, aX), IntegerEntry(cM, aY), IntegerEntry(cN, cn), IntegerEntry(cO, co), IntegerEntry(cP, cn), IntegerEntry(cQ, co), StringEntry(aR(aS), bd(aV, aW, aX, aY, cn, co, bc))]
428+func cz (aX,aY,bd,be,bf,bg,bh) = [StringEntry(aW(aX, aY), bc(bd, be, bf, bg, bh))]
429+
430+
431+func cA (aN,cB) = if ((size(aN.payments) > 1))
432+ then n("only one payment is allowed")
433+ else if ((size(aN.payments) == 0))
434+ then 0
435+ else {
436+ let cC = aN.payments[0]
437+ if ((value(cC.assetId) != cB))
438+ then n("invalid asset id in payment")
439+ else cC.amount
440+ }
441+
442+
443+func cD (aX) = valueOrElse(getInteger(this, bb(aX)), 0)
444+
445+
446+func cE () = {
447+ let cF = {
448+ let cG = value(getInteger(bU, bD()))
449+ let cH = (cG - 1)
450+ if ((0 > cH))
451+ then n("invalid epoch")
452+ else $Tuple2(cG, cH)
453+ }
454+ let cG = cF._1
455+ let cH = cF._2
456+ let cI = value(getInteger(bU, bC(cG)))
457+ $Tuple2(cH, cI)
428458 }
429459
430460
431-func cR (aI,cS) = if ((size(aI.payments) > 1))
432- then g("only one payment is allowed")
433- else if ((size(aI.payments) == 0))
434- then 0
435- else {
436- let cT = aI.payments[0]
437- if ((value(cT.assetId) != cS))
438- then g("invalid asset id in payment")
439- else cT.amount
440- }
441-
442-
443-func cU (aS,cV) = {
444- let cW = "empty"
445- let cX = bf(aS)
446- let aV = valueOrElse(getString(cX), cW)
447- let cn = valueOrElse(getInteger(bk(aV)), 0)
448- let co = valueOrElse(getInteger(bl(aV)), 0)
449- let cY = cE(cn, co, cV)
450- let bc = if ((0 > cY))
451- then 0
452- else cY
453- bc
461+func cJ (bF) = {
462+ let cK = 4
463+ let cL = 5
464+ let cM = {
465+ let bX = invoke(bO, "getPoolConfigByLpAssetIdREADONLY", [bF], nil)
466+ if ($isInstanceOf(bX, "List[Any]"))
467+ then bX
468+ else throw(($getType(bX) + " couldn't be cast to List[Any]"))
469+ }
470+ let bz = {
471+ let bX = cM[cK]
472+ if ($isInstanceOf(bX, "String"))
473+ then bX
474+ else throw(($getType(bX) + " couldn't be cast to String"))
475+ }
476+ let bA = {
477+ let bX = cM[cL]
478+ if ($isInstanceOf(bX, "String"))
479+ then bX
480+ else throw(($getType(bX) + " couldn't be cast to String"))
481+ }
482+ $Tuple2(bz, bA)
454483 }
455484
456485
457-func cZ (aS) = cU(aS, height)
458-
459-
460-func da () = {
461- let db = {
462- let cd = value(getInteger(bY, bH()))
463- let dc = (cd - 1)
464- if ((0 > dc))
465- then g("invalid epoch")
466- else $Tuple2(cd, dc)
467- }
468- let cd = db._1
469- let dc = db._2
470- let dd = value(getInteger(bY, bG(cd)))
471- $Tuple2(dc, dd)
486+func cN (bF,bN) = {
487+ let aX = addressFromStringValue(bN)
488+ let cO = cE()
489+ let cH = cO._1
490+ let cI = cO._2
491+ let cP = cJ(bF)
492+ let bz = cP._1
493+ let bA = cP._2
494+ let cQ = by(bz, bA, aX, cH)
495+ let cR = valueOrElse(getInteger(bU, cQ), 0)
496+ cR
472497 }
473498
474499
475-func de (bJ) = {
476- let df = 4
477- let dg = 5
478- let dh = {
479- let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480- if ($isInstanceOf(ca, "List[Any]"))
481- then ca
482- else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483- }
484- let bD = {
485- let ca = dh[df]
486- if ($isInstanceOf(ca, "String"))
487- then ca
488- else throw(($getType(ca) + " couldn't be cast to String"))
489- }
490- let bE = {
491- let ca = dh[dg]
492- if ($isInstanceOf(ca, "String"))
493- then ca
494- else throw(($getType(ca) + " couldn't be cast to String"))
495- }
496- $Tuple2(bD, bE)
500+func cS (bF,bN) = {
501+ let cT = valueOrElse(getInteger(bQ, bM(bN, bF)), 0)
502+ let cR = cN(bF, bN)
503+ if ((cT == 0))
504+ then 0
505+ else cR
497506 }
498507
499508
500-func di (bJ,bR) = {
501- let aS = addressFromStringValue(bR)
502- let dj = da()
503- let dc = dj._1
504- let dd = dj._2
505- let dk = de(bJ)
506- let bD = dk._1
507- let bE = dk._2
508- let dl = bC(bD, bE, aS, dc)
509- let dm = valueOrElse(getInteger(bY, dl), 0)
510- dm
509+func cU (bF) = {
510+ let cV = cE()
511+ let cH = cV._1
512+ let cI = cV._2
513+ let cW = valueOrElse(getInteger(bU, bE(bF, cH)), 0)
514+ let cX = valueOrElse(getInteger(this, bE(bF, cH)), cW)
515+ cX
511516 }
512517
513518
514-func dn (bJ,bR) = {
515- let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516- let dm = di(bJ, bR)
517- if ((do == 0))
518- then 0
519- else dm
519+func cY (bF) = {
520+ let cZ = cE()
521+ let cH = cZ._1
522+ let cI = cZ._2
523+ let cX = cU(bF)
524+ let da = valueOrElse(getInteger(this, bG(bF, cH)), 0)
525+ let db = valueOrElse(getInteger(this, bH(bF, cH)), cI)
526+ let dc = (height - db)
527+ let dd = ((dc * cX) + da)
528+ dd
520529 }
521530
522531
523-func dp (bJ) = {
524- let dq = da()
525- let dc = dq._1
526- let dd = dq._2
527- let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528- let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529- ds
532+func de (bF,df) = {
533+ let dg = cE()
534+ let cH = dg._1
535+ let cI = dg._2
536+ let cX = cU(bF)
537+ let dh = (cX + df)
538+ let dd = cY(bF)
539+[IntegerEntry(bE(bF, cH), dh), IntegerEntry(bH(bF, cH), height), IntegerEntry(bG(bF, cH), dd)]
530540 }
531541
532542
533-func dt (bJ) = {
534- let du = da()
535- let dc = du._1
536- let dd = du._2
537- let ds = dp(bJ)
538- let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539- let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540- let dx = (height - dw)
541- let dy = ((dx * ds) + dv)
542- dy
543+func di (bF,bN) = {
544+ let dj = cE()
545+ let cH = dj._1
546+ let cI = dj._2
547+ let aX = addressFromStringValue(bN)
548+ let dk = cS(bF, bN)
549+ let dl = valueOrElse(getInteger(this, bJ(bF, aX, cH)), 0)
550+ let dm = valueOrElse(getInteger(this, bK(bF, aX, cH)), cI)
551+ let dn = (height - dm)
552+ let do = ((dn * dk) + dl)
553+ do
543554 }
544555
545556
546-func dz (bJ,dA) = {
547- let dB = da()
548- let dc = dB._1
549- let dd = dB._2
550- let ds = dp(bJ)
551- let dC = (ds + dA)
552- let dy = dt(bJ)
553-[IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
557+func dp (bF,bN,dq) = {
558+ let dr = cE()
559+ let cH = dr._1
560+ let cI = dr._2
561+ let aX = addressFromStringValue(bN)
562+ let ds = cN(bF, bN)
563+ let dt = if ((ds == 0))
564+ then nil
565+ else {
566+ let df = if (dq)
567+ then ds
568+ else -(ds)
569+ let du = de(bF, df)
570+ let do = di(bF, bN)
571+ let dv = [IntegerEntry(bK(bF, aX, cH), height), IntegerEntry(bJ(bF, aX, cH), do)]
572+ (du ++ dv)
573+ }
574+ dt
554575 }
555576
556577
557-func dD (bJ,bR) = {
558- let dE = da()
559- let dc = dE._1
560- let dd = dE._2
561- let aS = addressFromStringValue(bR)
562- let dF = dn(bJ, bR)
563- let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564- let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565- let dI = (height - dH)
566- let dJ = ((dI * dF) + dG)
567- dJ
578+func dw (bF,bN) = {
579+ let dx = cE()
580+ let cH = dx._1
581+ let cI = dx._2
582+ let aX = addressFromStringValue(bN)
583+ let dy = bL(bF, aX, cH)
584+ let dz = valueOrElse(getInteger(this, dy), 0)
585+ let dA = bI(bF, aX, cH)
586+ let dB = valueOrElse(getInteger(this, dA), 0)
587+ let do = di(bF, bN)
588+ let dd = cY(bF)
589+ let dC = (do - dz)
590+ let dD = (dd - dB)
591+ $Tuple3([IntegerEntry(dy, do), IntegerEntry(dA, dd)], dC, dD)
568592 }
569593
570594
571-func dK (bJ,bR,dL) = {
572- let dM = da()
573- let dc = dM._1
574- let dd = dM._2
575- let aS = addressFromStringValue(bR)
576- let dN = di(bJ, bR)
577- let dO = if ((dN == 0))
578- then nil
579- else {
580- let dA = if (dL)
581- then dN
582- else -(dN)
583- let dP = dz(bJ, dA)
584- let dJ = dD(bJ, bR)
585- let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586- (dP ++ dQ)
587- }
588- dO
595+func dE () = {
596+ let dF = u(bP, aj())
597+ let dG = getInteger(this, am())
598+ let dH = getInteger(this, an())
599+ let dI = u(bP, ap())
600+ let dJ = if ((height > dI))
601+ then dI
602+ else height
603+ let dK = {
604+ let aI = dG
605+ if ($isInstanceOf(aI, "Int"))
606+ then {
607+ let dL = aI
608+ max([(dJ - dL), 0])
609+ }
610+ else if ($isInstanceOf(aI, "Unit"))
611+ then 0
612+ else throw("Match error")
613+ }
614+ let dM = ((dF * (bW - 1)) / bW)
615+ let dN = valueOrElse(dH, 0)
616+ let dO = ((dM * dK) + dN)
617+ $Tuple2([IntegerEntry(an(), dO), IntegerEntry(am(), height)], dO)
589618 }
590619
591620
592-func dR (bJ,bR) = {
593- let dS = da()
594- let dc = dS._1
595- let dd = dS._2
596- let aS = addressFromStringValue(bR)
597- let dT = bP(bJ, aS, dc)
598- let dU = valueOrElse(getInteger(this, dT), 0)
599- let dV = bM(bJ, aS, dc)
600- let dW = valueOrElse(getInteger(this, dV), 0)
601- let dJ = dD(bJ, bR)
602- let dy = dt(bJ)
603- let dX = (dJ - dU)
604- let dY = (dy - dW)
605- $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
621+func dP (bF,bN,dQ) = {
622+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
623+ let bq = bY(aX)
624+ if ((bq == bq))
625+ then {
626+ let dR = "empty"
627+ let dS = if ((bF != dR))
628+ then {
629+ let dT = valueOrErrorMessage(getString(bO, S(bF)), l(("unsupported lp asset " + bF)))
630+ getIntegerValue(bO, U(dT))
631+ }
632+ else if (dQ)
633+ then 0
634+ else n(("not readonly mode: unsupported lp asset " + bF))
635+ let dU = br(bq, bF)
636+ let dV = bp(bq)
637+ let dW = valueOrElse(getInteger(this, dU), r(this, dV))
638+ let dO = dE()._2
639+ let dX = (dO - dW)
640+ if ((0 > dX))
641+ then n("wrong calculations")
642+ else {
643+ let dY = dw(bF, bN)
644+ let dZ = dY._1
645+ let ea = dY._2
646+ let eb = dY._3
647+ let ec = fraction(dX, dS, d)
648+ let ed = if ((eb == 0))
649+ then 0
650+ else fraction(ec, ea, eb)
651+ let ee = ([IntegerEntry(dU, dO)] ++ dZ)
652+ let ef = makeString([toString(dW), toString(dX), toString(dS), toString(ea), toString(eb)], ":")
653+ $Tuple3(ed, ee, ef)
654+ }
655+ }
656+ else throw("Strict value is not equal to itself.")
606657 }
607658
608659
609-func dZ () = {
610- let ea = n(bT, ag())
611- let eb = getInteger(this, aj())
612- let ec = getInteger(this, ak())
613- let ed = n(bT, am())
614- let cH = if ((height > ed))
615- then ed
616- else height
617- let ee = {
618- let r = eb
619- if ($isInstanceOf(r, "Int"))
620- then {
621- let ef = r
622- max([(cH - ef), 0])
623- }
624- else if ($isInstanceOf(r, "Unit"))
625- then 0
626- else throw("Match error")
627- }
628- let eg = ((ea * (bZ - 1)) / bZ)
629- let eh = valueOrElse(ec, 0)
630- let ei = ((eg * ee) + eh)
631- $Tuple2([IntegerEntry(ak(), ei), IntegerEntry(aj(), height)], ei)
632- }
633-
634-
635-func ej (bJ,bR,ek) = {
636- let el = getString(this, aR(bR))
637- if ((el == unit))
638- then $Tuple3(0, nil, "userRecord::is::empty")
660+func eg (aN,eh) = {
661+ let bf = (eh * k)
662+ let ei = toBase58String(az)
663+ if ((size(aN.payments) != 1))
664+ then n("invalid payment - exact one payment must be attached")
639665 else {
640- let em = split(value(el), a)
641- let en = em[aL]
642- let eo = "empty"
643- let ep = if ((bJ != eo))
644- then {
645- let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646- getIntegerValue(bS, Q(eq))
647- }
648- else if (ek)
649- then 0
650- else g(("not readonly mode: unsupported lp asset " + bJ))
651- let er = bu(en, bJ)
652- let es = bt(en)
653- let et = valueOrElse(getInteger(this, er), k(this, es))
654- let ei = dZ()._2
655- let eu = (ei - et)
656- if ((0 > eu))
657- then g("wrong calculations")
658- else {
659- let ev = dR(bJ, bR)
660- let ew = ev._1
661- let ex = ev._2
662- let ey = ev._3
663- let ez = fraction(eu, ep, d)
664- let eA = if ((ey == 0))
665- then 0
666- else fraction(ez, ex, ey)
667- let eB = ([IntegerEntry(er, ei)] ++ ew)
668- let eC = makeString([toString(et), toString(eu), toString(ep), toString(ex), toString(ey)], ":")
669- $Tuple3(eA, eB, eC)
670- }
666+ let cC = aN.payments[0]
667+ let ej = cC.amount
668+ if ((az != value(cC.assetId)))
669+ then n((("invalid asset is in payment - " + ei) + " is expected"))
670+ else if (!(containsElement(i, eh)))
671+ then n("invalid duration")
672+ else {
673+ let ek = bi()
674+ let aX = aN.caller
675+ let bN = toString(aX)
676+ let el = isDefined(getString(bj(bN)))
677+ let em = if (el)
678+ then value(getString(bj(bN)))
679+ else toString(u(this, ek))
680+ let bq = parseIntValue(em)
681+ let cj = height
682+ if (if ((aA > ej))
683+ then (aX != bS)
684+ else false)
685+ then n(("amount is less then minLockAmount=" + toString(aA)))
686+ else if ((aB > bf))
687+ then n(("passed duration is less then minLockDuration=" + toString(aB)))
688+ else if ((bf > aC))
689+ then n(("passed duration is greater then maxLockDuration=" + toString(aC)))
690+ else {
691+ let en = fraction(ej, bf, aC)
692+ let eo = bZ()
693+ let dV = bp(bq)
694+ let dO = dE()._2
695+ let ep = cD(aX)
696+ let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes, bq], nil)
697+ if ((eq == eq))
698+ then {
699+ let er = if (el)
700+ then nil
701+ else [IntegerEntry(ek, (bq + 1)), StringEntry(bj(bN), em), StringEntry(bk(em), bN)]
702+ $Tuple2(((((er ++ cz(aX, aN.transactionId, ej, cj, bf, en, 0)) ++ cm(ej, bf, 1, if (el)
703+ then 0
704+ else 1)) :+ cg("lock", bN, ej, cj, bf, en, aN)) ++ [IntegerEntry(dV, dO), IntegerEntry(bx(), (eo + en)), IntegerEntry(bb(aX), (ep + en))]), en)
705+ }
706+ else throw("Strict value is not equal to itself.")
707+ }
708+ }
671709 }
672710 }
673711
674712
675-func eD (aI,aY) = {
676- let eE = av()
677- let eF = eE[ap]
678- let ay = fromBase58String(eF)
679- let az = parseIntValue(eE[aq])
680- let aA = parseIntValue(eE[ar])
681- let aB = parseIntValue(eE[as])
682- if ((size(aI.payments) != 1))
683- then g("invalid payment - exact one payment must be attached")
684- else {
685- let cT = aI.payments[0]
686- let eG = cT.amount
687- if ((ay != value(cT.assetId)))
688- then g((("invalid asset is in payment - " + eF) + " is expected"))
689- else {
690- let eH = be()
691- let bR = toString(aI.caller)
692- let eI = isDefined(getString(bf(bR)))
693- let en = if (eI)
694- then value(getString(bf(bR)))
695- else toString(n(this, eH))
696- let aV = parseIntValue(en)
697- let cm = height
698- let cL = bi(en)
699- let cM = bj(en)
700- let cK = bh(en)
701- if (if ((az > eG))
702- then (aI.caller != bW)
703- else false)
704- then g(("amount is less then minLockAmount=" + toString(az)))
705- else if ((aA > aY))
706- then g(("passed duration is less then minLockDuration=" + toString(aA)))
707- else if ((aY > aB))
708- then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709- else if (if (eI)
710- then ((n(this, cL) + n(this, cM)) >= cm)
711- else false)
712- then g("there is an active lock - consider to use increaseLock")
713- else if ((k(this, cK) > 0))
714- then g(("there are locked WXs - consider to use increaseLock " + cK))
715- else {
716- let eJ = fraction(aY, c, aB)
717- let eK = fraction(eG, eJ, c)
718- let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, cm, aY], nil))
719- let cn = t(eL[0])
720- let co = t(eL[1])
721- let bn = toString(t(eL[2]))
722- let cg = cb(false)
723- let es = bt(en)
724- let ei = dZ()._2
725- let eM = if (eI)
726- then nil
727- else [IntegerEntry(eH, (aV + 1)), StringEntry(bf(bR), en), StringEntry(bg(en), bR)]
728- $Tuple2(((((eM ++ cJ(bR, en, eG, cm, aY, cn, co, bn)) ++ cr(eG, aY, 1, if (eI)
729- then 0
730- else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731- }
732- }
733- }
713+func es (aX,et) = {
714+ let eu = ba(aX, et)
715+ let ev = parseIntValue(eu[aQ])
716+ let cj = parseIntValue(eu[aR])
717+ let ew = parseIntValue(eu[aS])
718+ let ex = (cj + ew)
719+ let bh = parseIntValue(eu[aV])
720+ let ey = ((height - cj) / aE)
721+ let ez = fraction(toBigInt(ey), (toBigInt((8 * aE)) * h), toBigInt(ew))
722+ let eA = if ((height > ex))
723+ then ev
724+ else (toInt(fraction(toBigInt(ev), (h - pow(toBigInt(5), 1, ez, f, f, DOWN)), h)) - bh)
725+ eA
734726 }
735727
736728
737-@Callable(aI)
738-func constructor (eN,eO,az,eP,eQ,aw) = {
739- let eR = aH(aI)
740- if ((eR == eR))
741- then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eO, az, eP, eQ, aw)), StringEntry(A(), eN)] ++ cr(0, 0, 0, 0))
729+@Callable(aN)
730+func constructor (eB,eC,aA,eD,eE,aD) = {
731+ let eF = aM(aN)
732+ if ((eF == eF))
733+ then ([IntegerEntry(bi(), 0), StringEntry(aw(), aG(eC, aA, eD, eE, aD)), StringEntry(F(), eB)] ++ cm(0, 0, 0, 0))
742734 else throw("Strict value is not equal to itself.")
743735 }
744736
745737
746738
747-@Callable(aI)
748-func lockRef (aY,eS,eT) = {
749- let eU = eD(aI, aY)
750- let eV = eU._1
751- let eK = eU._2
752- let eW = toString(aI.caller)
753- let eX = if (if ((eS == ""))
739+@Callable(aN)
740+func lockRef (bf,eG,eH) = {
741+ let eI = eg(aN, bf)
742+ let eJ = eI._1
743+ let en = eI._2
744+ let eK = toString(aN.caller)
745+ let eL = if (if ((eG == ""))
754746 then true
755- else (eT == base58''))
747+ else (eH == base58''))
756748 then unit
757- else invoke(w, "createPair", [z, eS, eW, eT], nil)
758- if ((eX == eX))
749+ else invoke(B, "createPair", [E, eG, eK, eH], nil)
750+ if ((eL == eL))
759751 then {
760- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761- if ((eY == eY))
762- then $Tuple2(eV, unit)
752+ let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
753+ if ((eM == eM))
754+ then $Tuple2(eJ, unit)
763755 else throw("Strict value is not equal to itself.")
764756 }
765757 else throw("Strict value is not equal to itself.")
766758 }
767759
768760
769761
770-@Callable(aI)
771-func lock (aY) = {
772- let eZ = eD(aI, aY)
773- let eV = eZ._1
774- let eK = eZ._2
775- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
776- if ((eY == eY))
777- then $Tuple2(eV, unit)
762+@Callable(aN)
763+func lock (bf) = {
764+ let eN = eg(aN, bf)
765+ let eJ = eN._1
766+ let en = eN._2
767+ let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
768+ if ((eM == eM))
769+ then $Tuple2(eJ, unit)
778770 else throw("Strict value is not equal to itself.")
779771 }
780772
781773
782774
783-@Callable(aI)
784-func increaseLock (fa) = {
785- let eE = av()
786- let eF = eE[ap]
787- let ay = fromBase58String(eF)
788- let aA = parseIntValue(eE[ar])
789- let aB = parseIntValue(eE[as])
790- let eG = cR(aI, ay)
791- let bR = toString(aI.caller)
792- let em = aT(bR)
793- let en = em[aL]
794- let fb = parseIntValue(em[aM])
795- let cm = parseIntValue(em[aN])
796- let fc = parseIntValue(em[aO])
797- let fd = (cm + fc)
798- let fe = max([(fd - height), 0])
799- let ff = (fb + eG)
800- let fg = (fe + fa)
801- if ((0 > fa))
802- then g("duration is less then zero")
803- else if ((aA > fg))
804- then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805- else if ((fg > aB))
806- then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807- else {
808- let eJ = fraction(fg, c, aB)
809- let eK = fraction(ff, eJ, c)
810- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
811- if ((eY == eY))
812- then {
813- let fh = height
814- let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, fh, fg], nil))
815- let cn = t(eL[0])
816- let co = t(eL[1])
817- let bn = toString(t(eL[2]))
818- let fi = cZ(bR)
819- let fj = (eK - fi)
820- if ((0 > fj))
821- then g(("gwxDiff is less then 0: " + toString(fj)))
822- else {
823- let cg = cb(false)
824- let fk = cb(true)
825- (((cJ(bR, en, ff, fh, fg, cn, co, bn) ++ cr(eG, fa, 0, 0)) :+ cj("lock", bR, eG, cm, fg, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fj))])
826- }
827- }
828- else throw("Strict value is not equal to itself.")
829- }
775+@Callable(aN)
776+func claimWxBoost (bF,bN) = if ((bQ != aN.caller))
777+ then n("permissions denied")
778+ else {
779+ let eO = dP(bF, bN, false)
780+ let eP = eO._1
781+ let ee = eO._2
782+ let ef = eO._3
783+ $Tuple2(ee, [eP])
784+ }
785+
786+
787+
788+@Callable(aN)
789+func claimWxBoostREADONLY (bF,bN) = {
790+ let eQ = dP(bF, bN, true)
791+ let eP = eQ._1
792+ let ee = eQ._2
793+ let ef = eQ._3
794+ $Tuple2(nil, [eP, ef])
830795 }
831796
832797
833798
834-@Callable(aI)
835-func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836- then g("permissions denied")
837- else {
838- let fl = ej(bJ, bR, false)
839- let fm = fl._1
840- let eB = fl._2
841- let eC = fl._3
842- $Tuple2(eB, [fm])
843- }
844-
845-
846-
847-@Callable(aI)
848-func claimWxBoostREADONLY (bJ,bR) = {
849- let fn = ej(bJ, bR, true)
850- let fm = fn._1
851- let eB = fn._2
852- let eC = fn._3
853- $Tuple2(nil, [fm, eC])
854- }
855-
856-
857-
858-@Callable(aI)
859-func unlock (aS) = {
860- let em = aT(aS)
861- let en = em[aL]
862- let fb = parseIntValue(em[aM])
863- let cm = parseIntValue(em[aN])
864- let fc = parseIntValue(em[aO])
865- let fd = (cm + fc)
866- let eE = av()
867- let ay = fromBase58String(eE[ap])
868- if ((fd >= height))
869- then g((("wait " + toString(fd)) + " to unlock"))
870- else if ((0 >= fb))
871- then g("nothing to unlock")
872- else {
873- let bn = valueOrElse(getInteger(aw, an()), 0)
874- (((cJ(aS, en, 0, cm, fc, 0, 0, toString(bn)) ++ cr(-(fb), 0, 0, -1)) :+ cj("unlock", aS, fb, cm, fc, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fb, ay))
875- }
876- }
877-
878-
879-
880-@Callable(aI)
881-func gwxUserInfoREADONLY (aS) = {
882- let bc = cZ(aS)
883- $Tuple2(nil, [bc])
884- }
885-
886-
887-
888-@Callable(aI)
889-func userMaxDurationREADONLY (bR) = {
890- let eE = av()
891- let aB = parseIntValue(eE[as])
892- let el = getString(this, aR(bR))
893- if ((el == unit))
894- then $Tuple2(nil, $Tuple2("lock", aB))
799+@Callable(aN)
800+func unlock (eR) = {
801+ let aX = aN.caller
802+ let bN = toString(aX)
803+ let aY = fromBase58String(eR)
804+ let eu = ba(aX, if ((eR == ""))
805+ then unit
806+ else aY)
807+ let ev = parseIntValue(eu[aQ])
808+ let cj = parseIntValue(eu[aR])
809+ let ew = parseIntValue(eu[aS])
810+ let bh = parseIntValue(eu[aV])
811+ let bg = parseIntValue(eu[aU])
812+ let ey = ((height - cj) / aE)
813+ let eA = es(aX, if ((eR == ""))
814+ then unit
815+ else aY)
816+ let en = fraction(ev, ew, aC)
817+ let eS = min([fraction((ey * aE), en, aC), bg])
818+ let eT = x((bg - eS), "gwxRemaining")
819+ let eU = ca(aX)
820+ if ((0 >= ev))
821+ then n("nothing to unlock")
895822 else {
896- let em = split(value(el), a)
897- let cm = parseIntValue(em[aN])
898- let fc = parseIntValue(em[aO])
899- let fd = (cm + fc)
900- let fe = max([(fd - height), 0])
901- let fo = (aB - fe)
902- $Tuple2(nil, $Tuple2("increaseLock", fo))
823+ let eo = bZ()
824+ let ep = cD(aX)
825+ let eV = x((ep - eS), "userGwxAmountTotalNew")
826+ if ((eU > eV))
827+ then n(("locked gwx amount: " + toString(eU)))
828+ else {
829+ let bq = parseIntValue(valueOrErrorMessage(getString(bj(bN)), l("invalid user number")))
830+ let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes, bq], nil)
831+ if ((eq == eq))
832+ then ((((cz(aX, aY, ev, cj, ew, eT, (bh + eA)) ++ cm(-(eA), 0, 0, 0)) :+ cg("unlock", bN, eA, cj, ew, eS, aN)) :+ ScriptTransfer(aX, eA, az)) ++ [IntegerEntry(bx(), x((eo - eS), "gwxTotal")), IntegerEntry(bb(aX), eV)])
833+ else throw("Strict value is not equal to itself.")
834+ }
903835 }
904836 }
905837
906838
907839
908-@Callable(aI)
909-func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910- let bc = cU(aS, cV)
911- $Tuple2(nil, bc)
840+@Callable(aN)
841+func gwxUserInfoREADONLY (bN) = {
842+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
843+ let bg = cD(aX)
844+ $Tuple2(nil, [bg])
912845 }
913846
914847
915848
916-@Callable(aI)
917-func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
849+@Callable(aN)
850+func userMaxDurationREADONLY (bN) = $Tuple2(nil, $Tuple2("lock", aC))
918851
919852
920853
921-@Callable(aI)
854+@Callable(aN)
855+func getUserGwxAmountAtHeightREADONLY (bN,eW) = {
856+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
857+ let bg = cD(aX)
858+ $Tuple2(nil, bg)
859+ }
860+
861+
862+
863+@Callable(aN)
864+func getUserGwxAmount (bN) = {
865+ let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
866+ let bg = cD(aX)
867+ $Tuple2(nil, bg)
868+ }
869+
870+
871+
872+@Callable(aN)
873+func getGwxTotalREADONLY () = $Tuple2(nil, bZ())
874+
875+
876+
877+@Callable(aN)
922878 func onBoostEmissionUpdate () = {
923- let eR = if ((aI.caller == bT))
879+ let eF = if ((aN.caller == bP))
924880 then true
925- else aH(aI)
926- if ((eR == eR))
927- then dZ()
881+ else aM(aN)
882+ if ((eF == eF))
883+ then dE()
928884 else throw("Strict value is not equal to itself.")
929885 }
930886
931887
932888
933-@Callable(aI)
934-func onStakedVoteUpdate (bJ,bR,dL) = {
935- let eR = if ((aI.caller == bU))
889+@Callable(aN)
890+func onStakedVoteUpdate (bF,bN,dq) = {
891+ let eF = if ((aN.caller == bQ))
936892 then true
937- else aH(aI)
938- if ((eR == eR))
893+ else aM(aN)
894+ if ((eF == eF))
939895 then {
940- let dO = dK(bJ, bR, dL)
941- $Tuple2(dO, unit)
896+ let dt = dp(bF, bN, dq)
897+ $Tuple2(dt, unit)
942898 }
943899 else throw("Strict value is not equal to itself.")
944900 }
945901
946902
947903
948-@Callable(aI)
949-func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
904+@Callable(aN)
905+func getVotingResultStakedREADONLY (bF) = $Tuple2(nil, cU(bF))
950906
951907
952908
953-@Callable(aI)
954-func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
909+@Callable(aN)
910+func getVotingResultStakedIntegralREADONLY (bF) = $Tuple2(nil, cY(bF))
955911
956912
957913
958-@Callable(aI)
959-func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
914+@Callable(aN)
915+func getUserVoteFinalizedREADONLY (bF,bN) = $Tuple2(nil, cN(bF, bN))
960916
961917
962918
963-@Callable(aI)
964-func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
919+@Callable(aN)
920+func getUserVoteStakedIntegralREADONLY (bF,bN) = $Tuple2(nil, di(bF, bN))
965921
966922
967-@Verifier(fp)
968-func fq () = {
969- let fr = {
970- let r = aF()
971- if ($isInstanceOf(r, "ByteVector"))
923+@Verifier(eX)
924+func eY () = {
925+ let eZ = {
926+ let aI = aK()
927+ if ($isInstanceOf(aI, "ByteVector"))
972928 then {
973- let aK = r
974- aK
929+ let aP = aI
930+ aP
975931 }
976- else if ($isInstanceOf(r, "Unit"))
977- then fp.senderPublicKey
932+ else if ($isInstanceOf(aI, "Unit"))
933+ then eX.senderPublicKey
978934 else throw("Match error")
979935 }
980- sigVerify(fp.bodyBytes, fp.proofs[0], fr)
936+ sigVerify(eX.bodyBytes, eX.proofs[0], eZ)
981937 }
982938

github/deemru/w8io/026f985 
264.05 ms