tx · ovpcsZnbKjoEq79eq2Ycohf1Zj8USiv3BW2zLRdw1PQ 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h: -0.01100000 Waves 2024.02.12 20:32 [2973341] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves
{ "type": 13, "id": "ovpcsZnbKjoEq79eq2Ycohf1Zj8USiv3BW2zLRdw1PQ", "fee": 1100000, "feeAssetId": null, "timestamp": 1707759135464, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "2wb9qkSTgFrj7a8UMiJ7nJqHqMq4tkAgh5UCSEwk4t8RFQEmQxNNxzgBdCkvbz2jAyR4WJMVjYbDMLYqq9RnGRgh" ], "script": "base64:BgIvCAISAwoBARIDCgEIEgMKAQgSBAoCCAgSAwoBCBIECgIIARIECgIIARIDCgEBEgAgAAxjb250cmFjdEZpbGUCEWwybXBfbGVhc2luZy5yaWRlAANTRVACAl9fAQh0aHJvd0VycgEDbXNnCQACAQkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFA21zZwAKa2V5QXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICB2Fzc2V0SWQFA25pbAUDU0VQABFrZXlQZXJpb2RPZmZzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICCG9mZnNldElkBQNuaWwFA1NFUAAVa2V5UGVyaW9kT2Zmc2V0SGVpZ2h0CQC5CQIJAMwIAgICJXMJAMwIAgIMb2Zmc2V0SGVpZ2h0BQNuaWwFA1NFUAAPa2V5UGVyaW9kTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgIMcGVyaW9kTGVuZ3RoBQNuaWwFA1NFUAAOcGVyaW9kT2Zmc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa2V5UGVyaW9kT2Zmc2V0SWQAAAAMcGVyaW9kTGVuZ3RoCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tleVBlcmlvZExlbmd0aACQTgAScGVyaW9kT2Zmc2V0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWtleVBlcmlvZE9mZnNldEhlaWdodAD///////////8BAA9jdXJyZW50UGVyaW9kSWQDAwkAZgIFBmhlaWdodAUScGVyaW9kT2Zmc2V0SGVpZ2h0CQECIT0CBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQcJAGQCCQBpAgkAZQIFBmhlaWdodAUScGVyaW9kT2Zmc2V0SGVpZ2h0BQxwZXJpb2RMZW5ndGgFDnBlcmlvZE9mZnNldElkCQCWAwEJAMwIAgAACQDMCAIJAGUCBQ5wZXJpb2RPZmZzZXRJZAABBQNuaWwAE2N1cnJlbnRQZXJpb2RIZWlnaHQJAGQCBRJwZXJpb2RPZmZzZXRIZWlnaHQJAGgCCQBlAgUPY3VycmVudFBlcmlvZElkBQ5wZXJpb2RPZmZzZXRJZAUMcGVyaW9kTGVuZ3RoABBuZXh0UGVyaW9kSGVpZ2h0CQBkAgUTY3VycmVudFBlcmlvZEhlaWdodAUMcGVyaW9kTGVuZ3RoARJrZXlMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzCQC5CQIJAMwIAgICJXMJAMwIAgULbm9kZUFkZHJlc3MFA25pbAUDU0VQAQ5rZXlVc2VyVG9DbGFpbQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB3RvQ2xhaW0JAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJWQJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgkApAMBBQZoZWlnaHQFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ0J5SGVpZ2h0Agtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlZAkAzAgCBQtub2RlQWRkcmVzcwkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCCQCkAwEFBmhlaWdodAUDbmlsBQNTRVAADWFzc2V0SWRTdHJpbmcJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUKa2V5QXNzZXRJZAIFV0FWRVMADGFzc2V0SWRCeXRlcwMJAAACBQ1hc3NldElkU3RyaW5nAgVXQVZFUwUEdW5pdAkA2QQBBQ1hc3NldElkU3RyaW5nAQ5pc1ZhbGlkQWRkcmVzcwEHYWRkcmVzcwQHJG1hdGNoMAkApggBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGBwETZ2V0TGVhc2luZ05vZGVFbnRyeQMLbm9kZUFkZHJlc3MNY3VycmVudExlYXNlZApuZXh0TGVhc2VkBAt2YWx1ZVN0cmluZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUTY3VycmVudFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFDWN1cnJlbnRMZWFzZWQJAMwIAgkApAMBBRBuZXh0UGVyaW9kSGVpZ2h0CQDMCAIJAKQDAQUKbmV4dExlYXNlZAUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJARJrZXlMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwULdmFsdWVTdHJpbmcBEmdldExlYXNpbmdOb2RlRGF0YQELbm9kZUFkZHJlc3MEGGxlYXNpbmdOb2RlRGF0YVN0cmluZ1JhdwkAnQgCBQR0aGlzCQESa2V5TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEByRtYXRjaDAFGGxlYXNpbmdOb2RlRGF0YVN0cmluZ1JhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBBFub2RlQ3VycmVudFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAEEEW5vZGVDdXJyZW50TGVhc2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAgQObm9kZU5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBA5ub2RlTmV4dExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDCQBmAgUObm9kZU5leHRQZXJpb2QFBmhlaWdodAkAlAoCBRFub2RlQ3VycmVudExlYXNlZAUObm9kZU5leHRMZWFzZWQJAJQKAgUObm9kZU5leHRMZWFzZWQFDm5vZGVOZXh0TGVhc2VkCQCUCgIAAAAAARNnZXRVc2VyTGVhc2luZ0VudHJ5BAtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcxF1c2VyQ3VycmVudExlYXNlZA51c2VyTmV4dExlYXNlZAQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBRF1c2VyQ3VycmVudExlYXNlZAkAzAgCCQCkAwEFEG5leHRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQ51c2VyTmV4dExlYXNlZAUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBQt2YWx1ZVN0cmluZwESZ2V0VXNlckxlYXNpbmdEYXRhAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwQYbGVhc2luZ1VzZXJEYXRhU3RyaW5nUmF3CQCdCAIFBHRoaXMJARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBAckbWF0Y2gwBRhsZWFzaW5nVXNlckRhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQRdXNlckN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBBF1c2VyQ3VycmVudExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIEDnVzZXJOZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQOdXNlck5leHRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwkAZgIFDnVzZXJOZXh0UGVyaW9kBQZoZWlnaHQJAJQKAgURdXNlckN1cnJlbnRMZWFzZWQFDnVzZXJOZXh0TGVhc2VkCQCUCgIFDnVzZXJOZXh0TGVhc2VkBQ51c2VyTmV4dExlYXNlZAkAlAoCAAAAAAETZ2V0VXNlclRvQ2xhaW1FbnRyeQMLdXNlckFkZHJlc3MHdG9DbGFpbQh0b1VubG9jawQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQd0b0NsYWltCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCHRvVW5sb2NrBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MFC3ZhbHVlU3RyaW5nARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBC3VzZXJBZGRyZXNzBBh1c2VyVG9DbGFpbURhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MEByRtYXRjaDAFGHVzZXJUb0NsYWltRGF0YVN0cmluZ1JhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBA1jdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQHdG9DbGFpbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIECm5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBAh0b1VubG9jawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDCQBmAgUKbmV4dFBlcmlvZAUGaGVpZ2h0CQCUCgIFB3RvQ2xhaW0FCHRvVW5sb2NrCQCUCgIJAGQCBQd0b0NsYWltBQh0b1VubG9jawAACQCUCgIAAAAAAQ9nZXRTdGFrZUFjdGlvbnMDC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzAWkEBmNoZWNrcwkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECIHBheW1lbnQgc2l6ZSBzaG91bGQgYmUgZXhhY3RseSAxCQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxhc3NldElkQnl0ZXMGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIacGF5bWVudCBhc3NldElkIHNob3VsZCBiZToJAMwIAgUNYXNzZXRJZFN0cmluZwUDbmlsAgEgCQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQtub2RlQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhpub2RlIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQtub2RlQWRkcmVzcwUDbmlsAgEgCQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhp1c2VyIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEEXVzZXJMZWFzaW5nQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQLJHQwNTc3NzU4NTAJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQRbm9kZUN1cnJlbnRMZWFzZWQIBQskdDA1Nzc3NTg1MAJfMQQObm9kZU5leHRMZWFzZWQIBQskdDA1Nzc3NTg1MAJfMgQQbmV3Tm9kZU5leHRMZWFzZQkAZAIFDm5vZGVOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAQLJHQwNTkxODYwMDQJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50TGVhc2VkCAULJHQwNTkxODYwMDQCXzEEDnVzZXJOZXh0TGVhc2VkCAULJHQwNTkxODYwMDQCXzIEEW5ld1VzZXJOZXh0TGVhc2VkCQBkAgUOdXNlck5leHRMZWFzZWQFEXVzZXJMZWFzaW5nQW1vdW50CQDMCAIJARNnZXRMZWFzaW5nTm9kZUVudHJ5AwULbm9kZUFkZHJlc3MFEW5vZGVDdXJyZW50TGVhc2VkBRBuZXdOb2RlTmV4dExlYXNlCQDMCAIJARNnZXRVc2VyTGVhc2luZ0VudHJ5BAULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRF1c2VyQ3VycmVudExlYXNlZAURbmV3VXNlck5leHRMZWFzZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQULbm9kZUFkZHJlc3MFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGVhc2luZ0J5SGVpZ2h0AgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRFuZXdVc2VyTmV4dExlYXNlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFnZXRVbnN0YWtlQWN0aW9ucwMLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MNdW5zdGFrZUFtb3VudAQLJHQwNjUxNjY1ODkJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQRbm9kZUN1cnJlbnRMZWFzZWQIBQskdDA2NTE2NjU4OQJfMQQObm9kZU5leHRMZWFzZWQIBQskdDA2NTE2NjU4OQJfMgQLJHQwNjU5NDY2ODAJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50TGVhc2VkCAULJHQwNjU5NDY2ODACXzEEDnVzZXJOZXh0TGVhc2VkCAULJHQwNjU5NDY2ODACXzIEBmNoZWNrcwkAzAgCAwkAZgIFDXVuc3Rha2VBbW91bnQAAAYJAQh0aHJvd0VycgECJ3Vuc3Rha2UgYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAZwIFDnVzZXJOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BgkBCHRocm93RXJyAQI5dW5zdGFrZSBhbW91bnQgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdXNlciBzdGFrZWQgYW1vdW50CQDMCAIDCQBnAgUObm9kZU5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQGCQEIdGhyb3dFcnIBAjl1bnN0YWtlIGFtb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCBub2RlIHN0YWtlZCBhbW91bnQJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC25vZGVBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGm5vZGUgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC25vZGVBZGRyZXNzBQNuaWwCASAJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnVzZXIgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQQbmV3Tm9kZU5leHRMZWFzZQkAZQIFDm5vZGVOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BBFuZXdVc2VyTmV4dExlYXNlZAkAZQIFDnVzZXJOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BAskdDA3MzczNzQ3OAkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBAd0b0NsYWltCAULJHQwNzM3Mzc0NzgCXzEECHRvVW5sb2NrCAULJHQwNzM3Mzc0NzgCXzIEC25ld1RvVW5sb2NrCQBkAgUIdG9VbmxvY2sFDXVuc3Rha2VBbW91bnQJAMwIAgkBE2dldExlYXNpbmdOb2RlRW50cnkDBQtub2RlQWRkcmVzcwURbm9kZUN1cnJlbnRMZWFzZWQFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBE2dldFVzZXJMZWFzaW5nRW50cnkEBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFEXVzZXJDdXJyZW50TGVhc2VkBRFuZXdVc2VyTmV4dExlYXNlZAkAzAgCCQETZ2V0VXNlclRvQ2xhaW1FbnRyeQMFC3VzZXJBZGRyZXNzBQd0b0NsYWltBQtuZXdUb1VubG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleU5vZGVMZWFzaW5nQnlIZWlnaHQBBQtub2RlQWRkcmVzcwUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVVzZXJMZWFzaW5nQnlIZWlnaHQCBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFEW5ld1VzZXJOZXh0TGVhc2VkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF2dldENsYWltVW5sb2NrZWRBY3Rpb25zAgt1c2VyQWRkcmVzcwtjbGFpbUFtb3VudAQLJHQwODAyMTgwODEJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDgwMjE4MDgxAl8xBAh0b1VubG9jawgFCyR0MDgwMjE4MDgxAl8yBAZjaGVja3MJAMwIAgMJAGYCBQtjbGFpbUFtb3VudAAABgkBCHRocm93RXJyAQIlY2xhaW0gYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAZwIFB3RvQ2xhaW0FC2NsYWltQW1vdW50BgkBCHRocm93RXJyAQI0Y2xhaW0gYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHVubG9ja2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApuZXdUb0NsYWltCQBlAgUHdG9DbGFpbQULY2xhaW1BbW91bnQJAMwIAgkBE2dldFVzZXJUb0NsYWltRW50cnkDBQt1c2VyQWRkcmVzcwUKbmV3VG9DbGFpbQUIdG9VbmxvY2sJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFC2NsYWltQW1vdW50BQxhc3NldElkQnl0ZXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEbZ2V0U3Rha2VGcm9tVW5sb2NrZWRBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcxF1c2VyTGVhc2luZ0Ftb3VudAQLJHQwODcyMTg3ODEJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDg3MjE4NzgxAl8xBAh0b1VubG9jawgFCyR0MDg3MjE4NzgxAl8yBAlhdmFpbGFibGUJAGQCBQh0b1VubG9jawUHdG9DbGFpbQQGY2hlY2tzCQDMCAIDCQBmAgURdXNlckxlYXNpbmdBbW91bnQAAAYJAQh0aHJvd0VycgECH2Ftb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAGcCBQlhdmFpbGFibGUFEXVzZXJMZWFzaW5nQW1vdW50BgkBCHRocm93RXJyAQIrYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIGF2YWlsYWJsZQkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA5MjU4OTMzMQkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudExlYXNlZAgFCyR0MDkyNTg5MzMxAl8xBA5ub2RlTmV4dExlYXNlZAgFCyR0MDkyNTg5MzMxAl8yBBBuZXdOb2RlTmV4dExlYXNlCQBkAgUObm9kZU5leHRMZWFzZWQFEXVzZXJMZWFzaW5nQW1vdW50BAskdDA5Mzk5OTQ4NQkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQRdXNlckN1cnJlbnRMZWFzZWQIBQskdDA5Mzk5OTQ4NQJfMQQOdXNlck5leHRMZWFzZWQIBQskdDA5Mzk5OTQ4NQJfMgQRbmV3VXNlck5leHRMZWFzZWQJAGQCBQ51c2VyTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQEC25ld1RvVW5sb2NrCQCWAwEJAMwIAgAACQDMCAIJAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAQKbmV3VG9DbGFpbQkAlwMBCQDMCAIFB3RvQ2xhaW0JAMwIAgkAZAIFB3RvQ2xhaW0JAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFCm5ld1RvQ2xhaW0FC25ld1RvVW5sb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5Tm9kZUxlYXNpbmdCeUhlaWdodAEFC25vZGVBZGRyZXNzBRBuZXdOb2RlTmV4dExlYXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxlYXNpbmdCeUhlaWdodAIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURbmV3VXNlck5leHRMZWFzZWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEcZ2V0U2V0TmV3UGVyaW9kTGVuZ3RoQWN0aW9ucwEPbmV3UGVyaW9kTGVuZ3RoBAVjaGVjawkAzAgCAwkAZgIFD25ld1BlcmlvZExlbmd0aAAABgkBCHRocm93RXJyAQImcGVyaW9kIGxlbmd0aCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAFA25pbAMJAAACBQVjaGVjawUFY2hlY2sDCQAAAgUScGVyaW9kT2Zmc2V0SGVpZ2h0AP///////////wEJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tleVBlcmlvZExlbmd0aAUPbmV3UGVyaW9kTGVuZ3RoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFBmhlaWdodAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrZXlQZXJpb2RPZmZzZXRJZAkAZAIFD2N1cnJlbnRQZXJpb2RJZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFEG5leHRQZXJpb2RIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tleVBlcmlvZExlbmd0aAUPbmV3UGVyaW9kTGVuZ3RoBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAWkBEnNldE5ld1BlcmlvZExlbmd0aAEPbmV3UGVyaW9kTGVuZ3RoCQEcZ2V0U2V0TmV3UGVyaW9kTGVuZ3RoQWN0aW9ucwEFD25ld1BlcmlvZExlbmd0aAFpARNnZXROb2RlRGF0YVJFQURPTkxZAQtub2RlQWRkcmVzcwQNJHQwMTA4ODAxMDk0NAkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBAxjdXJyZW50TGVhc2UIBQ0kdDAxMDg4MDEwOTQ0Al8xBApuZXh0TGVhc2VkCAUNJHQwMTA4ODAxMDk0NAJfMgkAlAoCBQNuaWwJAJcKBQUTY3VycmVudFBlcmlvZEhlaWdodAUMY3VycmVudExlYXNlBRBuZXh0UGVyaW9kSGVpZ2h0BQpuZXh0TGVhc2VkBQZoZWlnaHQBaQETZ2V0VXNlckRhdGFSRUFET05MWQELdXNlckFkZHJlc3MEDSR0MDExMTAwMTExNjAJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFDSR0MDExMTAwMTExNjACXzEECHRvVW5sb2NrCAUNJHQwMTExMDAxMTE2MAJfMgkAlAoCBQNuaWwJAJcKBQUTY3VycmVudFBlcmlvZEhlaWdodAUHdG9DbGFpbQUQbmV4dFBlcmlvZEhlaWdodAUIdG9VbmxvY2sFBmhlaWdodAFpAQhzdGFrZUZvcgILbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MJAQ9nZXRTdGFrZUFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFAWkBaQEFc3Rha2UBC25vZGVBZGRyZXNzBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJAQ9nZXRTdGFrZUFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFAWkBaQERc3Rha2VGcm9tVW5sb2NrZWQCC25vZGVBZGRyZXNzBmFtb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQEbZ2V0U3Rha2VGcm9tVW5sb2NrZWRBY3Rpb25zAwULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBQZhbW91bnQBaQEHdW5zdGFrZQILbm9kZUFkZHJlc3MGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARFnZXRVbnN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBBWNsYWltAQZhbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBF2dldENsYWltVW5sb2NrZWRBY3Rpb25zAgULdXNlckFkZHJlc3MFBmFtb3VudAFpAQhjbGFpbUFsbAAEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNJHQwMTIwNzgxMjEzOAkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBAd0b0NsYWltCAUNJHQwMTIwNzgxMjEzOAJfMQQIdG9VbmxvY2sIBQ0kdDAxMjA3ODEyMTM4Al8yBAZjaGVja3MJAMwIAgMJAGYCBQd0b0NsYWltAAAGCQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQd0b0NsYWltCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAGDhSn0=", "height": 2973341, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BnxhjRvsFxx5GWYAGufgqtCv1BbJxM2tH3hs67eYkZd7 Next: 4FG8tqN6QasBdHEH4Fac2CZDVHPaPL6rL9UUAPGMJCCK Diff:
Old | New | Differences | |
---|---|---|---|
41 | 41 | func s (r,p) = makeString(["%s%s", p, r], b) | |
42 | 42 | ||
43 | 43 | ||
44 | - | ||
44 | + | func t (p) = makeString(["%s%d", p, toString(height)], b) | |
45 | 45 | ||
46 | - | let u = if ((t == "WAVES")) | |
46 | + | ||
47 | + | func u (p,r) = makeString(["%s%s%d", p, r, toString(height)], b) | |
48 | + | ||
49 | + | ||
50 | + | let v = valueOrElse(getString(this, e), "WAVES") | |
51 | + | ||
52 | + | let w = if ((v == "WAVES")) | |
47 | 53 | then unit | |
48 | - | else fromBase58String( | |
54 | + | else fromBase58String(v) | |
49 | 55 | ||
50 | - | func | |
51 | - | let | |
52 | - | if ($isInstanceOf( | |
56 | + | func x (y) = { | |
57 | + | let z = addressFromString(y) | |
58 | + | if ($isInstanceOf(z, "Address")) | |
53 | 59 | then { | |
54 | - | let | |
60 | + | let A = z | |
55 | 61 | true | |
56 | 62 | } | |
57 | 63 | else false | |
58 | 64 | } | |
59 | 65 | ||
60 | 66 | ||
61 | - | func | |
62 | - | let | |
63 | - | StringEntry(o(p), | |
67 | + | func B (p,C,D) = { | |
68 | + | let E = makeString(["%d%d%d%d", toString(m), toString(C), toString(n), toString(D)], b) | |
69 | + | StringEntry(o(p), E) | |
64 | 70 | } | |
65 | 71 | ||
66 | 72 | ||
67 | - | func | |
68 | - | let | |
69 | - | let | |
70 | - | if ($isInstanceOf( | |
73 | + | func F (p) = { | |
74 | + | let G = getString(this, o(p)) | |
75 | + | let z = G | |
76 | + | if ($isInstanceOf(z, "String")) | |
71 | 77 | then { | |
72 | - | let | |
73 | - | let | |
74 | - | let | |
75 | - | let | |
76 | - | let | |
77 | - | let | |
78 | - | if (( | |
79 | - | then $Tuple2( | |
80 | - | else $Tuple2( | |
78 | + | let H = z | |
79 | + | let I = split(H, b) | |
80 | + | let J = parseIntValue(I[1]) | |
81 | + | let K = parseIntValue(I[2]) | |
82 | + | let L = parseIntValue(I[3]) | |
83 | + | let M = parseIntValue(I[4]) | |
84 | + | if ((L > height)) | |
85 | + | then $Tuple2(K, M) | |
86 | + | else $Tuple2(M, M) | |
81 | 87 | } | |
82 | 88 | else $Tuple2(0, 0) | |
83 | 89 | } | |
84 | 90 | ||
85 | 91 | ||
86 | - | func | |
87 | - | let | |
88 | - | StringEntry(s(r, p), | |
92 | + | func N (p,r,O,P) = { | |
93 | + | let E = makeString(["%d%d%d%d", toString(m), toString(O), toString(n), toString(P)], b) | |
94 | + | StringEntry(s(r, p), E) | |
89 | 95 | } | |
90 | 96 | ||
91 | 97 | ||
92 | - | func | |
93 | - | let | |
94 | - | let | |
95 | - | if ($isInstanceOf( | |
98 | + | func Q (p,r) = { | |
99 | + | let R = getString(this, s(r, p)) | |
100 | + | let z = R | |
101 | + | if ($isInstanceOf(z, "String")) | |
96 | 102 | then { | |
97 | - | let | |
98 | - | let | |
99 | - | let | |
100 | - | let | |
101 | - | let | |
102 | - | let | |
103 | - | if (( | |
104 | - | then $Tuple2( | |
105 | - | else $Tuple2( | |
103 | + | let H = z | |
104 | + | let I = split(H, b) | |
105 | + | let S = parseIntValue(I[1]) | |
106 | + | let O = parseIntValue(I[2]) | |
107 | + | let T = parseIntValue(I[3]) | |
108 | + | let P = parseIntValue(I[4]) | |
109 | + | if ((T > height)) | |
110 | + | then $Tuple2(O, P) | |
111 | + | else $Tuple2(P, P) | |
106 | 112 | } | |
107 | 113 | else $Tuple2(0, 0) | |
108 | 114 | } | |
109 | 115 | ||
110 | 116 | ||
111 | - | func | |
112 | - | let | |
113 | - | StringEntry(q(r), | |
117 | + | func U (r,V,W) = { | |
118 | + | let E = makeString(["%d%d%d%d", toString(m), toString(V), toString(n), toString(W)], b) | |
119 | + | StringEntry(q(r), E) | |
114 | 120 | } | |
115 | 121 | ||
116 | 122 | ||
117 | - | func | |
118 | - | let | |
119 | - | let | |
120 | - | if ($isInstanceOf( | |
123 | + | func X (r) = { | |
124 | + | let Y = getString(this, q(r)) | |
125 | + | let z = Y | |
126 | + | if ($isInstanceOf(z, "String")) | |
121 | 127 | then { | |
122 | - | let | |
123 | - | let | |
124 | - | let | |
125 | - | let | |
126 | - | let | |
127 | - | let | |
128 | - | if (( | |
129 | - | then $Tuple2( | |
130 | - | else $Tuple2(( | |
128 | + | let H = z | |
129 | + | let I = split(H, b) | |
130 | + | let Z = parseIntValue(I[1]) | |
131 | + | let V = parseIntValue(I[2]) | |
132 | + | let aa = parseIntValue(I[3]) | |
133 | + | let W = parseIntValue(I[4]) | |
134 | + | if ((aa > height)) | |
135 | + | then $Tuple2(V, W) | |
136 | + | else $Tuple2((V + W), 0) | |
131 | 137 | } | |
132 | 138 | else $Tuple2(0, 0) | |
133 | 139 | } | |
134 | 140 | ||
135 | 141 | ||
136 | - | func | |
137 | - | let | |
142 | + | func ab (p,r,ac) = { | |
143 | + | let ad = [if ((size(ac.payments) == 1)) | |
138 | 144 | then true | |
139 | - | else c("payment size should be exactly 1"), if (( | |
145 | + | else c("payment size should be exactly 1"), if ((ac.payments[0].assetId == w)) | |
140 | 146 | then true | |
141 | - | else c(makeString(["payment assetId should be:", | |
147 | + | else c(makeString(["payment assetId should be:", v], " ")), if (x(p)) | |
142 | 148 | then true | |
143 | - | else c(makeString(["node address is not valid:", p], " ")), if ( | |
149 | + | else c(makeString(["node address is not valid:", p], " ")), if (x(r)) | |
144 | 150 | then true | |
145 | 151 | else c(makeString(["user address is not valid:", r], " "))] | |
146 | - | if (( | |
152 | + | if ((ad == ad)) | |
147 | 153 | then { | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | let | |
153 | - | let | |
154 | - | let | |
155 | - | let | |
156 | - | let | |
157 | - | [ | |
154 | + | let ae = ac.payments[0].amount | |
155 | + | let af = F(p) | |
156 | + | let K = af._1 | |
157 | + | let M = af._2 | |
158 | + | let ag = (M + ae) | |
159 | + | let ah = Q(p, r) | |
160 | + | let O = ah._1 | |
161 | + | let P = ah._2 | |
162 | + | let ai = (P + ae) | |
163 | + | [B(p, K, ag), N(p, r, O, ai), IntegerEntry(t(p), ag), IntegerEntry(u(p, r), ai)] | |
158 | 164 | } | |
159 | 165 | else throw("Strict value is not equal to itself.") | |
160 | 166 | } | |
161 | 167 | ||
162 | 168 | ||
163 | - | func | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | let | |
168 | - | let | |
169 | - | let | |
170 | - | let | |
169 | + | func aj (p,r,ak) = { | |
170 | + | let al = F(p) | |
171 | + | let K = al._1 | |
172 | + | let M = al._2 | |
173 | + | let am = Q(p, r) | |
174 | + | let O = am._1 | |
175 | + | let P = am._2 | |
176 | + | let ad = [if ((ak > 0)) | |
171 | 177 | then true | |
172 | - | else c("unstake amount should be greater than 0"), if (( | |
178 | + | else c("unstake amount should be greater than 0"), if ((P >= ak)) | |
173 | 179 | then true | |
174 | - | else c("unstake amount should be less or equal user staked amount"), if (( | |
180 | + | else c("unstake amount should be less or equal user staked amount"), if ((M >= ak)) | |
175 | 181 | then true | |
176 | - | else c("unstake amount should be less or equal node staked amount"), if ( | |
182 | + | else c("unstake amount should be less or equal node staked amount"), if (x(p)) | |
177 | 183 | then true | |
178 | - | else c(makeString(["node address is not valid:", p], " ")), if ( | |
184 | + | else c(makeString(["node address is not valid:", p], " ")), if (x(r)) | |
179 | 185 | then true | |
180 | 186 | else c(makeString(["user address is not valid:", r], " "))] | |
181 | - | if (( | |
187 | + | if ((ad == ad)) | |
182 | 188 | then { | |
183 | - | let | |
184 | - | let | |
185 | - | let | |
186 | - | let | |
187 | - | let | |
188 | - | let | |
189 | - | [ | |
189 | + | let ag = (M - ak) | |
190 | + | let ai = (P - ak) | |
191 | + | let an = X(r) | |
192 | + | let V = an._1 | |
193 | + | let W = an._2 | |
194 | + | let ao = (W + ak) | |
195 | + | [B(p, K, ag), N(p, r, O, ai), U(r, V, ao), IntegerEntry(t(p), ag), IntegerEntry(u(p, r), ai)] | |
190 | 196 | } | |
191 | 197 | else throw("Strict value is not equal to itself.") | |
192 | 198 | } | |
193 | 199 | ||
194 | 200 | ||
195 | - | func | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | let | |
201 | + | func ap (r,aq) = { | |
202 | + | let ar = X(r) | |
203 | + | let V = ar._1 | |
204 | + | let W = ar._2 | |
205 | + | let ad = [if ((aq > 0)) | |
200 | 206 | then true | |
201 | - | else c("claim amount should be greater than 0"), if (( | |
207 | + | else c("claim amount should be greater than 0"), if ((V >= aq)) | |
202 | 208 | then true | |
203 | - | else c("claim amount should be less or equal unlocked amount"), if ( | |
209 | + | else c("claim amount should be less or equal unlocked amount"), if (x(r)) | |
204 | 210 | then true | |
205 | 211 | else c(makeString(["user address is not valid:", r], " "))] | |
206 | - | if (( | |
212 | + | if ((ad == ad)) | |
207 | 213 | then { | |
208 | - | let | |
209 | - | [ | |
214 | + | let as = (V - aq) | |
215 | + | [U(r, as, W), ScriptTransfer(addressFromStringValue(r), aq, w)] | |
210 | 216 | } | |
211 | 217 | else throw("Strict value is not equal to itself.") | |
212 | 218 | } | |
213 | 219 | ||
214 | 220 | ||
215 | - | func | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
220 | - | let | |
221 | + | func at (p,r,ae) = { | |
222 | + | let au = X(r) | |
223 | + | let V = au._1 | |
224 | + | let W = au._2 | |
225 | + | let av = (W + V) | |
226 | + | let ad = [if ((ae > 0)) | |
221 | 227 | then true | |
222 | - | else c("amount should be greater than 0"), if (( | |
228 | + | else c("amount should be greater than 0"), if ((av >= ae)) | |
223 | 229 | then true | |
224 | - | else c("amount should be less or equal to available"), if ( | |
230 | + | else c("amount should be less or equal to available"), if (x(p)) | |
225 | 231 | then true | |
226 | - | else c(makeString(["node address is not valid:", p], " ")), if ( | |
232 | + | else c(makeString(["node address is not valid:", p], " ")), if (x(r)) | |
227 | 233 | then true | |
228 | 234 | else c(makeString(["user address is not valid:", r], " "))] | |
229 | - | if (( | |
235 | + | if ((ad == ad)) | |
230 | 236 | then { | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | [ | |
237 | + | let aw = F(p) | |
238 | + | let K = aw._1 | |
239 | + | let M = aw._2 | |
240 | + | let ag = (M + ae) | |
241 | + | let ax = Q(p, r) | |
242 | + | let O = ax._1 | |
243 | + | let P = ax._2 | |
244 | + | let ai = (P + ae) | |
245 | + | let ao = max([0, (W - ae)]) | |
246 | + | let as = min([V, (V + (W - ae))]) | |
247 | + | [B(p, K, ag), N(p, r, O, ai), U(r, as, ao), IntegerEntry(t(p), ag), IntegerEntry(u(p, r), ai)] | |
242 | 248 | } | |
243 | 249 | else throw("Strict value is not equal to itself.") | |
244 | 250 | } | |
245 | 251 | ||
246 | 252 | ||
247 | - | func | |
248 | - | let | |
253 | + | func ay (az) = { | |
254 | + | let aA = [if ((az > 0)) | |
249 | 255 | then true | |
250 | 256 | else c("period length should be greater than 0")] | |
251 | - | if (( | |
257 | + | if ((aA == aA)) | |
252 | 258 | then if ((k == -1)) | |
253 | - | then [IntegerEntry(h, | |
254 | - | else [IntegerEntry(f, (l + 1)), IntegerEntry(g, n), IntegerEntry(h, | |
259 | + | then [IntegerEntry(h, az), IntegerEntry(g, height)] | |
260 | + | else [IntegerEntry(f, (l + 1)), IntegerEntry(g, n), IntegerEntry(h, az)] | |
255 | 261 | else throw("Strict value is not equal to itself.") | |
256 | 262 | } | |
257 | 263 | ||
258 | 264 | ||
259 | - | @Callable( | |
260 | - | func setNewPeriodLength ( | |
265 | + | @Callable(ac) | |
266 | + | func setNewPeriodLength (az) = ay(az) | |
261 | 267 | ||
262 | 268 | ||
263 | 269 | ||
264 | - | @Callable( | |
270 | + | @Callable(ac) | |
265 | 271 | func getNodeDataREADONLY (p) = { | |
266 | - | let | |
267 | - | let | |
268 | - | let | |
269 | - | $Tuple2(nil, $Tuple5(m, | |
272 | + | let aB = F(p) | |
273 | + | let aC = aB._1 | |
274 | + | let D = aB._2 | |
275 | + | $Tuple2(nil, $Tuple5(m, aC, n, D, height)) | |
270 | 276 | } | |
271 | 277 | ||
272 | 278 | ||
273 | 279 | ||
274 | - | @Callable( | |
280 | + | @Callable(ac) | |
275 | 281 | func getUserDataREADONLY (r) = { | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | $Tuple2(nil, $Tuple5(m, | |
282 | + | let aD = X(r) | |
283 | + | let V = aD._1 | |
284 | + | let W = aD._2 | |
285 | + | $Tuple2(nil, $Tuple5(m, V, n, W, height)) | |
280 | 286 | } | |
281 | 287 | ||
282 | 288 | ||
283 | 289 | ||
284 | - | @Callable( | |
285 | - | func stakeFor (p,r) = | |
290 | + | @Callable(ac) | |
291 | + | func stakeFor (p,r) = ab(p, r, ac) | |
286 | 292 | ||
287 | 293 | ||
288 | 294 | ||
289 | - | @Callable( | |
295 | + | @Callable(ac) | |
290 | 296 | func stake (p) = { | |
291 | - | let r = toString( | |
292 | - | | |
297 | + | let r = toString(ac.caller) | |
298 | + | ab(p, r, ac) | |
293 | 299 | } | |
294 | 300 | ||
295 | 301 | ||
296 | 302 | ||
297 | - | @Callable( | |
298 | - | func stakeFromUnlocked (p, | |
299 | - | let r = toString( | |
300 | - | | |
303 | + | @Callable(ac) | |
304 | + | func stakeFromUnlocked (p,aE) = { | |
305 | + | let r = toString(ac.caller) | |
306 | + | at(p, r, aE) | |
301 | 307 | } | |
302 | 308 | ||
303 | 309 | ||
304 | 310 | ||
305 | - | @Callable( | |
306 | - | func unstake (p, | |
307 | - | let r = toString( | |
308 | - | | |
311 | + | @Callable(ac) | |
312 | + | func unstake (p,aE) = { | |
313 | + | let r = toString(ac.caller) | |
314 | + | aj(p, r, aE) | |
309 | 315 | } | |
310 | 316 | ||
311 | 317 | ||
312 | 318 | ||
313 | - | @Callable( | |
314 | - | func claim ( | |
315 | - | let r = toString( | |
316 | - | | |
319 | + | @Callable(ac) | |
320 | + | func claim (aE) = { | |
321 | + | let r = toString(ac.caller) | |
322 | + | ap(r, aE) | |
317 | 323 | } | |
318 | 324 | ||
319 | 325 | ||
320 | 326 | ||
321 | - | @Callable( | |
327 | + | @Callable(ac) | |
322 | 328 | func claimAll () = { | |
323 | - | let r = toString( | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
329 | + | let r = toString(ac.caller) | |
330 | + | let aF = X(r) | |
331 | + | let V = aF._1 | |
332 | + | let W = aF._2 | |
333 | + | let ad = [if ((V > 0)) | |
328 | 334 | then true | |
329 | 335 | else c("nothing to claim")] | |
330 | - | if (( | |
331 | - | then | |
336 | + | if ((ad == ad)) | |
337 | + | then ap(r, V) | |
332 | 338 | else throw("Strict value is not equal to itself.") | |
333 | 339 | } | |
334 | 340 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "l2mp_leasing.ride" | |
5 | 5 | ||
6 | 6 | let b = "__" | |
7 | 7 | ||
8 | 8 | func c (d) = throw(((a + ": ") + d)) | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | let e = makeString(["%s", "assetId"], b) | |
12 | 12 | ||
13 | 13 | let f = makeString(["%s", "offsetId"], b) | |
14 | 14 | ||
15 | 15 | let g = makeString(["%s", "offsetHeight"], b) | |
16 | 16 | ||
17 | 17 | let h = makeString(["%s", "periodLength"], b) | |
18 | 18 | ||
19 | 19 | let i = valueOrElse(getInteger(this, f), 0) | |
20 | 20 | ||
21 | 21 | let j = valueOrElse(getInteger(this, h), 10000) | |
22 | 22 | ||
23 | 23 | let k = valueOrElse(getInteger(this, g), -1) | |
24 | 24 | ||
25 | 25 | let l = if (if ((height > k)) | |
26 | 26 | then (k != -1) | |
27 | 27 | else false) | |
28 | 28 | then (((height - k) / j) + i) | |
29 | 29 | else max([0, (i - 1)]) | |
30 | 30 | ||
31 | 31 | let m = (k + ((l - i) * j)) | |
32 | 32 | ||
33 | 33 | let n = (m + j) | |
34 | 34 | ||
35 | 35 | func o (p) = makeString(["%s", p], b) | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func q (r) = makeString(["%s%s", "toClaim", r], b) | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | func s (r,p) = makeString(["%s%s", p, r], b) | |
42 | 42 | ||
43 | 43 | ||
44 | - | ||
44 | + | func t (p) = makeString(["%s%d", p, toString(height)], b) | |
45 | 45 | ||
46 | - | let u = if ((t == "WAVES")) | |
46 | + | ||
47 | + | func u (p,r) = makeString(["%s%s%d", p, r, toString(height)], b) | |
48 | + | ||
49 | + | ||
50 | + | let v = valueOrElse(getString(this, e), "WAVES") | |
51 | + | ||
52 | + | let w = if ((v == "WAVES")) | |
47 | 53 | then unit | |
48 | - | else fromBase58String( | |
54 | + | else fromBase58String(v) | |
49 | 55 | ||
50 | - | func | |
51 | - | let | |
52 | - | if ($isInstanceOf( | |
56 | + | func x (y) = { | |
57 | + | let z = addressFromString(y) | |
58 | + | if ($isInstanceOf(z, "Address")) | |
53 | 59 | then { | |
54 | - | let | |
60 | + | let A = z | |
55 | 61 | true | |
56 | 62 | } | |
57 | 63 | else false | |
58 | 64 | } | |
59 | 65 | ||
60 | 66 | ||
61 | - | func | |
62 | - | let | |
63 | - | StringEntry(o(p), | |
67 | + | func B (p,C,D) = { | |
68 | + | let E = makeString(["%d%d%d%d", toString(m), toString(C), toString(n), toString(D)], b) | |
69 | + | StringEntry(o(p), E) | |
64 | 70 | } | |
65 | 71 | ||
66 | 72 | ||
67 | - | func | |
68 | - | let | |
69 | - | let | |
70 | - | if ($isInstanceOf( | |
73 | + | func F (p) = { | |
74 | + | let G = getString(this, o(p)) | |
75 | + | let z = G | |
76 | + | if ($isInstanceOf(z, "String")) | |
71 | 77 | then { | |
72 | - | let | |
73 | - | let | |
74 | - | let | |
75 | - | let | |
76 | - | let | |
77 | - | let | |
78 | - | if (( | |
79 | - | then $Tuple2( | |
80 | - | else $Tuple2( | |
78 | + | let H = z | |
79 | + | let I = split(H, b) | |
80 | + | let J = parseIntValue(I[1]) | |
81 | + | let K = parseIntValue(I[2]) | |
82 | + | let L = parseIntValue(I[3]) | |
83 | + | let M = parseIntValue(I[4]) | |
84 | + | if ((L > height)) | |
85 | + | then $Tuple2(K, M) | |
86 | + | else $Tuple2(M, M) | |
81 | 87 | } | |
82 | 88 | else $Tuple2(0, 0) | |
83 | 89 | } | |
84 | 90 | ||
85 | 91 | ||
86 | - | func | |
87 | - | let | |
88 | - | StringEntry(s(r, p), | |
92 | + | func N (p,r,O,P) = { | |
93 | + | let E = makeString(["%d%d%d%d", toString(m), toString(O), toString(n), toString(P)], b) | |
94 | + | StringEntry(s(r, p), E) | |
89 | 95 | } | |
90 | 96 | ||
91 | 97 | ||
92 | - | func | |
93 | - | let | |
94 | - | let | |
95 | - | if ($isInstanceOf( | |
98 | + | func Q (p,r) = { | |
99 | + | let R = getString(this, s(r, p)) | |
100 | + | let z = R | |
101 | + | if ($isInstanceOf(z, "String")) | |
96 | 102 | then { | |
97 | - | let | |
98 | - | let | |
99 | - | let | |
100 | - | let | |
101 | - | let | |
102 | - | let | |
103 | - | if (( | |
104 | - | then $Tuple2( | |
105 | - | else $Tuple2( | |
103 | + | let H = z | |
104 | + | let I = split(H, b) | |
105 | + | let S = parseIntValue(I[1]) | |
106 | + | let O = parseIntValue(I[2]) | |
107 | + | let T = parseIntValue(I[3]) | |
108 | + | let P = parseIntValue(I[4]) | |
109 | + | if ((T > height)) | |
110 | + | then $Tuple2(O, P) | |
111 | + | else $Tuple2(P, P) | |
106 | 112 | } | |
107 | 113 | else $Tuple2(0, 0) | |
108 | 114 | } | |
109 | 115 | ||
110 | 116 | ||
111 | - | func | |
112 | - | let | |
113 | - | StringEntry(q(r), | |
117 | + | func U (r,V,W) = { | |
118 | + | let E = makeString(["%d%d%d%d", toString(m), toString(V), toString(n), toString(W)], b) | |
119 | + | StringEntry(q(r), E) | |
114 | 120 | } | |
115 | 121 | ||
116 | 122 | ||
117 | - | func | |
118 | - | let | |
119 | - | let | |
120 | - | if ($isInstanceOf( | |
123 | + | func X (r) = { | |
124 | + | let Y = getString(this, q(r)) | |
125 | + | let z = Y | |
126 | + | if ($isInstanceOf(z, "String")) | |
121 | 127 | then { | |
122 | - | let | |
123 | - | let | |
124 | - | let | |
125 | - | let | |
126 | - | let | |
127 | - | let | |
128 | - | if (( | |
129 | - | then $Tuple2( | |
130 | - | else $Tuple2(( | |
128 | + | let H = z | |
129 | + | let I = split(H, b) | |
130 | + | let Z = parseIntValue(I[1]) | |
131 | + | let V = parseIntValue(I[2]) | |
132 | + | let aa = parseIntValue(I[3]) | |
133 | + | let W = parseIntValue(I[4]) | |
134 | + | if ((aa > height)) | |
135 | + | then $Tuple2(V, W) | |
136 | + | else $Tuple2((V + W), 0) | |
131 | 137 | } | |
132 | 138 | else $Tuple2(0, 0) | |
133 | 139 | } | |
134 | 140 | ||
135 | 141 | ||
136 | - | func | |
137 | - | let | |
142 | + | func ab (p,r,ac) = { | |
143 | + | let ad = [if ((size(ac.payments) == 1)) | |
138 | 144 | then true | |
139 | - | else c("payment size should be exactly 1"), if (( | |
145 | + | else c("payment size should be exactly 1"), if ((ac.payments[0].assetId == w)) | |
140 | 146 | then true | |
141 | - | else c(makeString(["payment assetId should be:", | |
147 | + | else c(makeString(["payment assetId should be:", v], " ")), if (x(p)) | |
142 | 148 | then true | |
143 | - | else c(makeString(["node address is not valid:", p], " ")), if ( | |
149 | + | else c(makeString(["node address is not valid:", p], " ")), if (x(r)) | |
144 | 150 | then true | |
145 | 151 | else c(makeString(["user address is not valid:", r], " "))] | |
146 | - | if (( | |
152 | + | if ((ad == ad)) | |
147 | 153 | then { | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | let | |
153 | - | let | |
154 | - | let | |
155 | - | let | |
156 | - | let | |
157 | - | [ | |
154 | + | let ae = ac.payments[0].amount | |
155 | + | let af = F(p) | |
156 | + | let K = af._1 | |
157 | + | let M = af._2 | |
158 | + | let ag = (M + ae) | |
159 | + | let ah = Q(p, r) | |
160 | + | let O = ah._1 | |
161 | + | let P = ah._2 | |
162 | + | let ai = (P + ae) | |
163 | + | [B(p, K, ag), N(p, r, O, ai), IntegerEntry(t(p), ag), IntegerEntry(u(p, r), ai)] | |
158 | 164 | } | |
159 | 165 | else throw("Strict value is not equal to itself.") | |
160 | 166 | } | |
161 | 167 | ||
162 | 168 | ||
163 | - | func | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | let | |
168 | - | let | |
169 | - | let | |
170 | - | let | |
169 | + | func aj (p,r,ak) = { | |
170 | + | let al = F(p) | |
171 | + | let K = al._1 | |
172 | + | let M = al._2 | |
173 | + | let am = Q(p, r) | |
174 | + | let O = am._1 | |
175 | + | let P = am._2 | |
176 | + | let ad = [if ((ak > 0)) | |
171 | 177 | then true | |
172 | - | else c("unstake amount should be greater than 0"), if (( | |
178 | + | else c("unstake amount should be greater than 0"), if ((P >= ak)) | |
173 | 179 | then true | |
174 | - | else c("unstake amount should be less or equal user staked amount"), if (( | |
180 | + | else c("unstake amount should be less or equal user staked amount"), if ((M >= ak)) | |
175 | 181 | then true | |
176 | - | else c("unstake amount should be less or equal node staked amount"), if ( | |
182 | + | else c("unstake amount should be less or equal node staked amount"), if (x(p)) | |
177 | 183 | then true | |
178 | - | else c(makeString(["node address is not valid:", p], " ")), if ( | |
184 | + | else c(makeString(["node address is not valid:", p], " ")), if (x(r)) | |
179 | 185 | then true | |
180 | 186 | else c(makeString(["user address is not valid:", r], " "))] | |
181 | - | if (( | |
187 | + | if ((ad == ad)) | |
182 | 188 | then { | |
183 | - | let | |
184 | - | let | |
185 | - | let | |
186 | - | let | |
187 | - | let | |
188 | - | let | |
189 | - | [ | |
189 | + | let ag = (M - ak) | |
190 | + | let ai = (P - ak) | |
191 | + | let an = X(r) | |
192 | + | let V = an._1 | |
193 | + | let W = an._2 | |
194 | + | let ao = (W + ak) | |
195 | + | [B(p, K, ag), N(p, r, O, ai), U(r, V, ao), IntegerEntry(t(p), ag), IntegerEntry(u(p, r), ai)] | |
190 | 196 | } | |
191 | 197 | else throw("Strict value is not equal to itself.") | |
192 | 198 | } | |
193 | 199 | ||
194 | 200 | ||
195 | - | func | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | let | |
201 | + | func ap (r,aq) = { | |
202 | + | let ar = X(r) | |
203 | + | let V = ar._1 | |
204 | + | let W = ar._2 | |
205 | + | let ad = [if ((aq > 0)) | |
200 | 206 | then true | |
201 | - | else c("claim amount should be greater than 0"), if (( | |
207 | + | else c("claim amount should be greater than 0"), if ((V >= aq)) | |
202 | 208 | then true | |
203 | - | else c("claim amount should be less or equal unlocked amount"), if ( | |
209 | + | else c("claim amount should be less or equal unlocked amount"), if (x(r)) | |
204 | 210 | then true | |
205 | 211 | else c(makeString(["user address is not valid:", r], " "))] | |
206 | - | if (( | |
212 | + | if ((ad == ad)) | |
207 | 213 | then { | |
208 | - | let | |
209 | - | [ | |
214 | + | let as = (V - aq) | |
215 | + | [U(r, as, W), ScriptTransfer(addressFromStringValue(r), aq, w)] | |
210 | 216 | } | |
211 | 217 | else throw("Strict value is not equal to itself.") | |
212 | 218 | } | |
213 | 219 | ||
214 | 220 | ||
215 | - | func | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
220 | - | let | |
221 | + | func at (p,r,ae) = { | |
222 | + | let au = X(r) | |
223 | + | let V = au._1 | |
224 | + | let W = au._2 | |
225 | + | let av = (W + V) | |
226 | + | let ad = [if ((ae > 0)) | |
221 | 227 | then true | |
222 | - | else c("amount should be greater than 0"), if (( | |
228 | + | else c("amount should be greater than 0"), if ((av >= ae)) | |
223 | 229 | then true | |
224 | - | else c("amount should be less or equal to available"), if ( | |
230 | + | else c("amount should be less or equal to available"), if (x(p)) | |
225 | 231 | then true | |
226 | - | else c(makeString(["node address is not valid:", p], " ")), if ( | |
232 | + | else c(makeString(["node address is not valid:", p], " ")), if (x(r)) | |
227 | 233 | then true | |
228 | 234 | else c(makeString(["user address is not valid:", r], " "))] | |
229 | - | if (( | |
235 | + | if ((ad == ad)) | |
230 | 236 | then { | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | [ | |
237 | + | let aw = F(p) | |
238 | + | let K = aw._1 | |
239 | + | let M = aw._2 | |
240 | + | let ag = (M + ae) | |
241 | + | let ax = Q(p, r) | |
242 | + | let O = ax._1 | |
243 | + | let P = ax._2 | |
244 | + | let ai = (P + ae) | |
245 | + | let ao = max([0, (W - ae)]) | |
246 | + | let as = min([V, (V + (W - ae))]) | |
247 | + | [B(p, K, ag), N(p, r, O, ai), U(r, as, ao), IntegerEntry(t(p), ag), IntegerEntry(u(p, r), ai)] | |
242 | 248 | } | |
243 | 249 | else throw("Strict value is not equal to itself.") | |
244 | 250 | } | |
245 | 251 | ||
246 | 252 | ||
247 | - | func | |
248 | - | let | |
253 | + | func ay (az) = { | |
254 | + | let aA = [if ((az > 0)) | |
249 | 255 | then true | |
250 | 256 | else c("period length should be greater than 0")] | |
251 | - | if (( | |
257 | + | if ((aA == aA)) | |
252 | 258 | then if ((k == -1)) | |
253 | - | then [IntegerEntry(h, | |
254 | - | else [IntegerEntry(f, (l + 1)), IntegerEntry(g, n), IntegerEntry(h, | |
259 | + | then [IntegerEntry(h, az), IntegerEntry(g, height)] | |
260 | + | else [IntegerEntry(f, (l + 1)), IntegerEntry(g, n), IntegerEntry(h, az)] | |
255 | 261 | else throw("Strict value is not equal to itself.") | |
256 | 262 | } | |
257 | 263 | ||
258 | 264 | ||
259 | - | @Callable( | |
260 | - | func setNewPeriodLength ( | |
265 | + | @Callable(ac) | |
266 | + | func setNewPeriodLength (az) = ay(az) | |
261 | 267 | ||
262 | 268 | ||
263 | 269 | ||
264 | - | @Callable( | |
270 | + | @Callable(ac) | |
265 | 271 | func getNodeDataREADONLY (p) = { | |
266 | - | let | |
267 | - | let | |
268 | - | let | |
269 | - | $Tuple2(nil, $Tuple5(m, | |
272 | + | let aB = F(p) | |
273 | + | let aC = aB._1 | |
274 | + | let D = aB._2 | |
275 | + | $Tuple2(nil, $Tuple5(m, aC, n, D, height)) | |
270 | 276 | } | |
271 | 277 | ||
272 | 278 | ||
273 | 279 | ||
274 | - | @Callable( | |
280 | + | @Callable(ac) | |
275 | 281 | func getUserDataREADONLY (r) = { | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | $Tuple2(nil, $Tuple5(m, | |
282 | + | let aD = X(r) | |
283 | + | let V = aD._1 | |
284 | + | let W = aD._2 | |
285 | + | $Tuple2(nil, $Tuple5(m, V, n, W, height)) | |
280 | 286 | } | |
281 | 287 | ||
282 | 288 | ||
283 | 289 | ||
284 | - | @Callable( | |
285 | - | func stakeFor (p,r) = | |
290 | + | @Callable(ac) | |
291 | + | func stakeFor (p,r) = ab(p, r, ac) | |
286 | 292 | ||
287 | 293 | ||
288 | 294 | ||
289 | - | @Callable( | |
295 | + | @Callable(ac) | |
290 | 296 | func stake (p) = { | |
291 | - | let r = toString( | |
292 | - | | |
297 | + | let r = toString(ac.caller) | |
298 | + | ab(p, r, ac) | |
293 | 299 | } | |
294 | 300 | ||
295 | 301 | ||
296 | 302 | ||
297 | - | @Callable( | |
298 | - | func stakeFromUnlocked (p, | |
299 | - | let r = toString( | |
300 | - | | |
303 | + | @Callable(ac) | |
304 | + | func stakeFromUnlocked (p,aE) = { | |
305 | + | let r = toString(ac.caller) | |
306 | + | at(p, r, aE) | |
301 | 307 | } | |
302 | 308 | ||
303 | 309 | ||
304 | 310 | ||
305 | - | @Callable( | |
306 | - | func unstake (p, | |
307 | - | let r = toString( | |
308 | - | | |
311 | + | @Callable(ac) | |
312 | + | func unstake (p,aE) = { | |
313 | + | let r = toString(ac.caller) | |
314 | + | aj(p, r, aE) | |
309 | 315 | } | |
310 | 316 | ||
311 | 317 | ||
312 | 318 | ||
313 | - | @Callable( | |
314 | - | func claim ( | |
315 | - | let r = toString( | |
316 | - | | |
319 | + | @Callable(ac) | |
320 | + | func claim (aE) = { | |
321 | + | let r = toString(ac.caller) | |
322 | + | ap(r, aE) | |
317 | 323 | } | |
318 | 324 | ||
319 | 325 | ||
320 | 326 | ||
321 | - | @Callable( | |
327 | + | @Callable(ac) | |
322 | 328 | func claimAll () = { | |
323 | - | let r = toString( | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
329 | + | let r = toString(ac.caller) | |
330 | + | let aF = X(r) | |
331 | + | let V = aF._1 | |
332 | + | let W = aF._2 | |
333 | + | let ad = [if ((V > 0)) | |
328 | 334 | then true | |
329 | 335 | else c("nothing to claim")] | |
330 | - | if (( | |
331 | - | then | |
336 | + | if ((ad == ad)) | |
337 | + | then ap(r, V) | |
332 | 338 | else throw("Strict value is not equal to itself.") | |
333 | 339 | } | |
334 | 340 | ||
335 | 341 |
github/deemru/w8io/169f3d6 119.67 ms ◑