tx · 2aHiTM93eoXBAJnpwC9aJS21Cd9ADmT53cs6neZdKAT7 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h: -0.02100000 Waves 2024.09.17 11:07 [3287404] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves
{ "type": 13, "id": "2aHiTM93eoXBAJnpwC9aJS21Cd9ADmT53cs6neZdKAT7", "fee": 2100000, "feeAssetId": null, "timestamp": 1726560436624, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "4pecaPdCWvHq1AcbteKCDwcPK9prPtpBcLu8dshKgBbGuK9qLNb6indmWBBgNWk8T2PG8EgrCnZsWcB5bfbhGgsg" ], "script": "base64:BgI/CAISAwoBARIDCgEEEgMKAQgSBAoCCAgSAwoBCBIECgIICBIDCgEIEgQKAggBEgQKAggBEgMKAQESABIDCgEINgAMY29udHJhY3RGaWxlAhFsMm1wX2xlYXNpbmcucmlkZQADU0VQAgJfXwEIdGhyb3dFcnIBA21zZwkAAgEJAKwCAgkArAICBQxjb250cmFjdEZpbGUCAjogBQNtc2cACmtleUFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAgdhc3NldElkBQNuaWwFA1NFUAAMa2V5Rm9yY2VTdG9wCQC5CQIJAMwIAgICJXMJAMwIAgIJZm9yY2VTdG9wBQNuaWwFA1NFUAARa2V5UGVyaW9kT2Zmc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAghvZmZzZXRJZAUDbmlsBQNTRVAAFWtleVBlcmlvZE9mZnNldEhlaWdodAkAuQkCCQDMCAICAiVzCQDMCAICDG9mZnNldEhlaWdodAUDbmlsBQNTRVAAD2tleVBlcmlvZExlbmd0aAkAuQkCCQDMCAICAiVzCQDMCAICDHBlcmlvZExlbmd0aAUDbmlsBQNTRVAADnBlcmlvZE9mZnNldElkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtleVBlcmlvZE9mZnNldElkAAAADHBlcmlvZExlbmd0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ9rZXlQZXJpb2RMZW5ndGgAkE4AEnBlcmlvZE9mZnNldEhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQA////////////AQAPY3VycmVudFBlcmlvZElkAwMJAGYCBQZoZWlnaHQFEnBlcmlvZE9mZnNldEhlaWdodAkBAiE9AgUScGVyaW9kT2Zmc2V0SGVpZ2h0AP///////////wEHCQBkAgkAaQIJAGUCBQZoZWlnaHQFEnBlcmlvZE9mZnNldEhlaWdodAUMcGVyaW9kTGVuZ3RoBQ5wZXJpb2RPZmZzZXRJZAkAlgMBCQDMCAIAAAkAzAgCCQBlAgUOcGVyaW9kT2Zmc2V0SWQAAQUDbmlsABNjdXJyZW50UGVyaW9kSGVpZ2h0AwMJAAACBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQYDCQAAAgUPY3VycmVudFBlcmlvZElkAAAJAGYCBRJwZXJpb2RPZmZzZXRIZWlnaHQFBmhlaWdodAcAAAkAZAIFEnBlcmlvZE9mZnNldEhlaWdodAkAaAIJAGUCBQ9jdXJyZW50UGVyaW9kSWQFDnBlcmlvZE9mZnNldElkBQxwZXJpb2RMZW5ndGgAEG5leHRQZXJpb2RIZWlnaHQDAwkAAAIFEnBlcmlvZE9mZnNldEhlaWdodAD///////////8BBgMJAAACBQ9jdXJyZW50UGVyaW9kSWQAAAkAZgIFEnBlcmlvZE9mZnNldEhlaWdodAUGaGVpZ2h0BwAACQBkAgUTY3VycmVudFBlcmlvZEhlaWdodAUMcGVyaW9kTGVuZ3RoARJrZXlMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzCQC5CQIJAMwIAgICJXMJAMwIAgULbm9kZUFkZHJlc3MFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQAQ5rZXlVc2VyVG9DbGFpbQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB3RvQ2xhaW0JAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARJrZXlVc2VyVG90YWxMb2NrZWQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg91c2VyVG90YWxMb2NrZWQJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQtub2RlQWRkcmVzcwQBaAMJAAACBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQAABQZoZWlnaHQJALkJAgkAzAgCAgQlcyVkCQDMCAIFC25vZGVBZGRyZXNzCQDMCAIJAKQDAQUBaAUDbmlsBQNTRVABFmtleVVzZXJMZWFzaW5nQnlIZWlnaHQCC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzBAFoAwkAAAIFEnBlcmlvZE9mZnNldEhlaWdodAD///////////8BAAAFBmhlaWdodAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCBQtub2RlQWRkcmVzcwkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCCQCkAwEFAWgFA25pbAUDU0VQAA1hc3NldElkU3RyaW5nCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCmtleUFzc2V0SWQCBVdBVkVTAAxhc3NldElkQnl0ZXMDCQAAAgUNYXNzZXRJZFN0cmluZwIFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwALaXNGb3JjZVN0b3AJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUMa2V5Rm9yY2VTdG9wBwEOaXNWYWxpZEFkZHJlc3MBB2FkZHJlc3MEByRtYXRjaDAJAKYIAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcAD0FETUlOX0xJU1RfU0laRQAFAAZRVU9SVU0AAwARVFhJRF9CWVRFU19MRU5HVEgAIAEYa2V5QWxsb3dlZFR4SWRWb3RlUHJlZml4AQR0eElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICCWFsbG93VHhJZAkAzAgCBQR0eElkBQNuaWwFA1NFUAEQa2V5RnVsbEFkbWluVm90ZQIGcHJlZml4DGFkbWluQWRkcmVzcwkAuQkCCQDMCAIFBnByZWZpeAkAzAgCBQxhZG1pbkFkZHJlc3MFA25pbAUDU0VQARNrZXlBZG1pbkFkZHJlc3NMaXN0AAkAuQkCCQDMCAICAiVzCQDMCAICEGFkbWluQWRkcmVzc0xpc3QFA25pbAUDU0VQAQ5rZXlBbGxvd2VkVHhJZAAJALkJAgkAzAgCAgIlcwkAzAgCAgR0eElkBQNuaWwFA1NFUAEMZ2V0QWRtaW5Wb3RlAgZwcmVmaXgFYWRtaW4EB3ZvdGVLZXkJARBrZXlGdWxsQWRtaW5Wb3RlAgUGcHJlZml4BQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd2b3RlS2V5AAABDWdldEFkbWluc0xpc3QABAckbWF0Y2gwCQCdCAIFBHRoaXMJARNrZXlBZG1pbkFkZHJlc3NMaXN0AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJALUJAgUBcwUDU0VQBQNuaWwBDWlzSW5BZG1pbkxpc3QBB2FkZHJlc3MJAQ9jb250YWluc0VsZW1lbnQCCQENZ2V0QWRtaW5zTGlzdAAFB2FkZHJlc3MBEmdlblZvdGVzS2V5c0hlbHBlcgIBYQxhZG1pbkFkZHJlc3MECyR0MDM1NjIzNTg2BQFhBAZyZXN1bHQIBQskdDAzNTYyMzU4NgJfMQQGcHJlZml4CAULJHQwMzU2MjM1ODYCXzIJAJQKAgkAzQgCBQZyZXN1bHQJARBrZXlGdWxsQWRtaW5Wb3RlAgUGcHJlZml4BQxhZG1pbkFkZHJlc3MFBnByZWZpeAEMZ2VuVm90ZXNLZXlzAQlrZXlQcmVmaXgECWFkbWluTGlzdAkBE2tleUFkbWluQWRkcmVzc0xpc3QABAskdDAzNzMzMzgxNwoAAiRsCQENZ2V0QWRtaW5zTGlzdAAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUJa2V5UHJlZml4CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARJnZW5Wb3Rlc0tleXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBAZyZXN1bHQIBQskdDAzNzMzMzgxNwJfMQQGcHJlZml4CAULJHQwMzczMzM4MTcCXzIFBnJlc3VsdAEQY291bnRWb3Rlc0hlbHBlcgIGcmVzdWx0B3ZvdGVLZXkJAGQCBQZyZXN1bHQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdm90ZUtleQAAAQpjb3VudFZvdGVzAQZwcmVmaXgEBXZvdGVzCQEMZ2VuVm90ZXNLZXlzAQUGcHJlZml4CgACJGwFBXZvdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARBjb3VudFZvdGVzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQEQY2xlYXJWb3Rlc0hlbHBlcgIGcmVzdWx0A2tleQkAzQgCBQZyZXN1bHQJAQtEZWxldGVFbnRyeQEFA2tleQETZ2V0Q2xlYXJWb3RlRW50cmllcwEGcHJlZml4BAV2b3RlcwkBDGdlblZvdGVzS2V5cwEFBnByZWZpeAoAAiRsBQV2b3RlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQY2xlYXJWb3Rlc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUBDHZvdGVJTlRFUk5BTAQTY2FsbGVyQWRkcmVzc1N0cmluZwlrZXlQcmVmaXgIbWluVm90ZXMKdm90ZVJlc3VsdAQHdm90ZUtleQkBEGtleUZ1bGxBZG1pblZvdGUCBQlrZXlQcmVmaXgFE2NhbGxlckFkZHJlc3NTdHJpbmcEEGFkbWluQ3VycmVudFZvdGUJAQxnZXRBZG1pblZvdGUCBQlrZXlQcmVmaXgFE2NhbGxlckFkZHJlc3NTdHJpbmcEA2VycgMJAQEhAQkBDWlzSW5BZG1pbkxpc3QBBRNjYWxsZXJBZGRyZXNzU3RyaW5nCQEIdGhyb3dFcnIBCQCsAgIJAKwCAgIJQWRkcmVzczogBRNjYWxsZXJBZGRyZXNzU3RyaW5nAhIgbm90IGluIEFkbWluIGxpc3QDCQAAAgUQYWRtaW5DdXJyZW50Vm90ZQABCQEIdGhyb3dFcnIBCQCsAgIFB3ZvdGVLZXkCEiB5b3UgYWxyZWFkeSB2b3RlZAUEdW5pdAMJAAACBQNlcnIFA2VycgQFdm90ZXMJAQpjb3VudFZvdGVzAQUJa2V5UHJlZml4AwkAZwIJAGQCBQV2b3RlcwABBQhtaW5Wb3RlcwQQY2xlYXJWb3RlRW50cmllcwkBE2dldENsZWFyVm90ZUVudHJpZXMBBQlrZXlQcmVmaXgJAM4IAgUQY2xlYXJWb3RlRW50cmllcwUKdm90ZVJlc3VsdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdm90ZUtleQABBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BE2dldExlYXNpbmdOb2RlRW50cnkDC25vZGVBZGRyZXNzDWN1cnJlbnRMZWFzZWQKbmV4dExlYXNlZAQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQ1jdXJyZW50TGVhc2VkCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCm5leHRMZWFzZWQFA25pbAUDU0VQCQELU3RyaW5nRW50cnkCCQESa2V5TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MFC3ZhbHVlU3RyaW5nARJnZXRMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzBBhsZWFzaW5nTm9kZURhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBEmtleUxlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBAckbWF0Y2gwBRhsZWFzaW5nTm9kZURhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQRbm9kZUN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBBFub2RlQ3VycmVudExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIEDm5vZGVOZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQObm9kZU5leHRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwMJAGYCBQ5ub2RlTmV4dFBlcmlvZAUGaGVpZ2h0BgkAAAIFEnBlcmlvZE9mZnNldEhlaWdodAD///////////8BCQCUCgIFEW5vZGVDdXJyZW50TGVhc2VkBQ5ub2RlTmV4dExlYXNlZAkAlAoCBQ5ub2RlTmV4dExlYXNlZAUObm9kZU5leHRMZWFzZWQJAJQKAgAAAAABE2dldFVzZXJMZWFzaW5nRW50cnkEC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzEXVzZXJDdXJyZW50TGVhc2VkDnVzZXJOZXh0TGVhc2VkBAt2YWx1ZVN0cmluZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUTY3VycmVudFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFEXVzZXJDdXJyZW50TGVhc2VkCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFDnVzZXJOZXh0TGVhc2VkBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgkBFmtleVVzZXJMZWFzaW5nTm9kZURhdGECBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MFC3ZhbHVlU3RyaW5nARJnZXRVc2VyTGVhc2luZ0RhdGECC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzBBhsZWFzaW5nVXNlckRhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBFmtleVVzZXJMZWFzaW5nTm9kZURhdGECBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MEByRtYXRjaDAFGGxlYXNpbmdVc2VyRGF0YVN0cmluZ1JhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBBF1c2VyQ3VycmVudFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAEEEXVzZXJDdXJyZW50TGVhc2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAgQOdXNlck5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBA51c2VyTmV4dExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDAwkAZgIFDnVzZXJOZXh0UGVyaW9kBQZoZWlnaHQGCQAAAgUScGVyaW9kT2Zmc2V0SGVpZ2h0AP///////////wEJAJQKAgURdXNlckN1cnJlbnRMZWFzZWQFDnVzZXJOZXh0TGVhc2VkCQCUCgIFDnVzZXJOZXh0TGVhc2VkBQ51c2VyTmV4dExlYXNlZAkAlAoCAAAAAAETZ2V0VXNlclRvQ2xhaW1FbnRyeQMLdXNlckFkZHJlc3MHdG9DbGFpbQh0b1VubG9jawQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQd0b0NsYWltCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCHRvVW5sb2NrBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MFC3ZhbHVlU3RyaW5nARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBC3VzZXJBZGRyZXNzBBh1c2VyVG9DbGFpbURhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MEByRtYXRjaDAFGHVzZXJUb0NsYWltRGF0YVN0cmluZ1JhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBA1jdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQHdG9DbGFpbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIECm5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBAh0b1VubG9jawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDAwkAZgIFCm5leHRQZXJpb2QFBmhlaWdodAYJAAACBQ9jdXJyZW50UGVyaW9kSWQAAAkAlAoCBQd0b0NsYWltBQh0b1VubG9jawkAlAoCCQBkAgUHdG9DbGFpbQUIdG9VbmxvY2sAAAkAlAoCAAAAAAEXZ2V0VXNlclRvdGFsTG9ja2VkRW50cnkCC3VzZXJBZGRyZXNzD3VzZXJUb3RhbExvY2tlZAkBDEludGVnZXJFbnRyeQIJARJrZXlVc2VyVG90YWxMb2NrZWQBBQt1c2VyQWRkcmVzcwUPdXNlclRvdGFsTG9ja2VkARJnZXRVc2VyVG90YWxMb2NrZWQBC3VzZXJBZGRyZXNzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJrZXlVc2VyVG90YWxMb2NrZWQBBQt1c2VyQWRkcmVzcwAAARFnZXRVbnN0YWtlQWN0aW9ucwMLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MNdW5zdGFrZUFtb3VudAQLJHQwODg1Nzg5MzAJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQRbm9kZUN1cnJlbnRMZWFzZWQIBQskdDA4ODU3ODkzMAJfMQQObm9kZU5leHRMZWFzZWQIBQskdDA4ODU3ODkzMAJfMgQLJHQwODkzNTkwMjEJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50TGVhc2VkCAULJHQwODkzNTkwMjECXzEEDnVzZXJOZXh0TGVhc2VkCAULJHQwODkzNTkwMjECXzIEBmNoZWNrcwkAzAgCAwkBASEBBQtpc0ZvcmNlU3RvcAYJAQh0aHJvd0VycgECHWNvbnRyYWN0IGlzIHRlbXBvcmFyeSBzdG9wcGVkCQDMCAIDCQBmAgUNdW5zdGFrZUFtb3VudAAABgkBCHRocm93RXJyAQIndW5zdGFrZSBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUOdXNlck5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQGCQEIdGhyb3dFcnIBAjl1bnN0YWtlIGFtb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB1c2VyIHN0YWtlZCBhbW91bnQJAMwIAgMJAGcCBQ5ub2RlTmV4dExlYXNlZAUNdW5zdGFrZUFtb3VudAYJAQh0aHJvd0VycgECOXVuc3Rha2UgYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIG5vZGUgc3Rha2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBBuZXdOb2RlTmV4dExlYXNlCQBlAgUObm9kZU5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQEEW5ld1VzZXJOZXh0TGVhc2VkCQBlAgUOdXNlck5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQECyR0MDk4MzQ5ODk0CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQskdDA5ODM0OTg5NAJfMQQIdG9VbmxvY2sIBQskdDA5ODM0OTg5NAJfMgQLbmV3VG9VbmxvY2sJAGQCBQh0b1VubG9jawUNdW5zdGFrZUFtb3VudAQPdXNlclRvdGFsTG9ja2VkCQESZ2V0VXNlclRvdGFsTG9ja2VkAQULdXNlckFkZHJlc3MEEm5ld1VzZXJUb3RhbExvY2tlZAkAZQIFD3VzZXJUb3RhbExvY2tlZAUNdW5zdGFrZUFtb3VudAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFB3RvQ2xhaW0FC25ld1RvVW5sb2NrCQDMCAIJARdnZXRVc2VyVG90YWxMb2NrZWRFbnRyeQIFC3VzZXJBZGRyZXNzBRJuZXdVc2VyVG90YWxMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQULbm9kZUFkZHJlc3MFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGVhc2luZ0J5SGVpZ2h0AgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRFuZXdVc2VyTmV4dExlYXNlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwILdXNlckFkZHJlc3MLY2xhaW1BbW91bnQEDSR0MDEwNjIzMTA2ODMJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFDSR0MDEwNjIzMTA2ODMCXzEECHRvVW5sb2NrCAUNJHQwMTA2MjMxMDY4MwJfMgQGY2hlY2tzCQDMCAIDCQEBIQEFC2lzRm9yY2VTdG9wBgkBCHRocm93RXJyAQIdY29udHJhY3QgaXMgdGVtcG9yYXJ5IHN0b3BwZWQJAMwIAgMJAGYCBQtjbGFpbUFtb3VudAAABgkBCHRocm93RXJyAQIlY2xhaW0gYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAZwIFB3RvQ2xhaW0FC2NsYWltQW1vdW50BgkBCHRocm93RXJyAQI0Y2xhaW0gYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHVubG9ja2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApuZXdUb0NsYWltCQBlAgUHdG9DbGFpbQULY2xhaW1BbW91bnQJAMwIAgkBE2dldFVzZXJUb0NsYWltRW50cnkDBQt1c2VyQWRkcmVzcwUKbmV3VG9DbGFpbQUIdG9VbmxvY2sJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFC2NsYWltQW1vdW50BQxhc3NldElkQnl0ZXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEPZ2V0U3Rha2VBY3Rpb25zBAtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcxF1c2VyTGVhc2luZ0Ftb3VudAFpBA0kdDAxMTQ0NDExNTA0CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQ0kdDAxMTQ0NDExNTA0Al8xBAh0b1VubG9jawgFDSR0MDExNDQ0MTE1MDQCXzIEDXBheW1lbnRBbW91bnQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAAAAAICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAlhdmFpbGFibGUJAGQCCQBkAgUIdG9VbmxvY2sFB3RvQ2xhaW0FDXBheW1lbnRBbW91bnQEBmNoZWNrcwkAzAgCAwkBASEBBQtpc0ZvcmNlU3RvcAYJAQh0aHJvd0VycgECHWNvbnRyYWN0IGlzIHRlbXBvcmFyeSBzdG9wcGVkCQDMCAIDCQBnAgABCQCQAwEIBQFpCHBheW1lbnRzBgkBCHRocm93RXJyAQIRbWF4aW11bSAxIHBheW1lbnQJAMwIAgMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAABgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnBheW1lbnQgYXNzZXRJZCBzaG91bGQgYmU6CQDMCAIFDWFzc2V0SWRTdHJpbmcFA25pbAIBIAkAzAgCAwkAZgIFEXVzZXJMZWFzaW5nQW1vdW50AAAGCQEIdGhyb3dFcnIBAh9hbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUJYXZhaWxhYmxlBRF1c2VyTGVhc2luZ0Ftb3VudAYJAQh0aHJvd0VycgECO2Ftb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCAocGF5bWVudCArIGF2YWlsYWJsZSkgYW1vdW50CQDMCAIDCQBnAgURdXNlckxlYXNpbmdBbW91bnQFDXBheW1lbnRBbW91bnQGCQACAQIwYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHBheW1lbnQgYW1vdW50CQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQtub2RlQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhpub2RlIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQtub2RlQWRkcmVzcwUDbmlsAgEgCQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhp1c2VyIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDSR0MDEyNTc1MTI2NDgJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQRbm9kZUN1cnJlbnRMZWFzZWQIBQ0kdDAxMjU3NTEyNjQ4Al8xBA5ub2RlTmV4dExlYXNlZAgFDSR0MDEyNTc1MTI2NDgCXzIEEG5ld05vZGVOZXh0TGVhc2UJAGQCBQ5ub2RlTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQEDSR0MDEyNzE2MTI4MDIJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50TGVhc2VkCAUNJHQwMTI3MTYxMjgwMgJfMQQOdXNlck5leHRMZWFzZWQIBQ0kdDAxMjcxNjEyODAyAl8yBBFuZXdVc2VyTmV4dExlYXNlZAkAZAIFDnVzZXJOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAQSZnJvbVVubG9ja2VkQW1vdW50CQBlAgURdXNlckxlYXNpbmdBbW91bnQFDXBheW1lbnRBbW91bnQEC25ld1RvVW5sb2NrCQCWAwEJAMwIAgAACQDMCAIJAGUCBQh0b1VubG9jawUSZnJvbVVubG9ja2VkQW1vdW50BQNuaWwECm5ld1RvQ2xhaW0JAJcDAQkAzAgCBQd0b0NsYWltCQDMCAIJAGQCBQd0b0NsYWltCQBlAgUIdG9VbmxvY2sFEmZyb21VbmxvY2tlZEFtb3VudAUDbmlsBA91c2VyVG90YWxMb2NrZWQJARJnZXRVc2VyVG90YWxMb2NrZWQBBQt1c2VyQWRkcmVzcwQSbmV3VXNlclRvdGFsTG9ja2VkCQBkAgUPdXNlclRvdGFsTG9ja2VkBRF1c2VyTGVhc2luZ0Ftb3VudAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFCm5ld1RvQ2xhaW0FC25ld1RvVW5sb2NrCQDMCAIJARdnZXRVc2VyVG90YWxMb2NrZWRFbnRyeQIFC3VzZXJBZGRyZXNzBRJuZXdVc2VyVG90YWxMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQULbm9kZUFkZHJlc3MFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGVhc2luZ0J5SGVpZ2h0AgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRFuZXdVc2VyTmV4dExlYXNlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARpnZXRTdGFrZUZyb21QYXltZW50QWN0aW9ucwMLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MBaQQGY2hlY2tzCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIgcGF5bWVudCBzaXplIHNob3VsZCBiZSBleGFjdGx5IDEFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkBD2dldFN0YWtlQWN0aW9ucwQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BHGdldFNldE5ld1BlcmlvZExlbmd0aEFjdGlvbnMBD25ld1BlcmlvZExlbmd0aAQFY2hlY2sJAMwIAgMJAGYCBQ9uZXdQZXJpb2RMZW5ndGgAAAYJAQh0aHJvd0VycgECJnBlcmlvZCBsZW5ndGggc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrAwkAAAIFEnBlcmlvZE9mZnNldEhlaWdodAD///////////8BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rZXlQZXJpb2RMZW5ndGgFD25ld1BlcmlvZExlbmd0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa2V5UGVyaW9kT2Zmc2V0SGVpZ2h0BQZoZWlnaHQFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5UGVyaW9kT2Zmc2V0SWQJAGQCBQ9jdXJyZW50UGVyaW9kSWQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa2V5UGVyaW9kT2Zmc2V0SGVpZ2h0BRBuZXh0UGVyaW9kSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rZXlQZXJpb2RMZW5ndGgFD25ld1BlcmlvZExlbmd0aAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDAFpARJzZXROZXdQZXJpb2RMZW5ndGgBD25ld1BlcmlvZExlbmd0aAQGY2hlY2tzCQDMCAIDCQENaXNJbkFkbWluTGlzdAEJAKUIAQgFAWkGY2FsbGVyBgkBCHRocm93RXJyAQIaY2FsbGVyIGlzIG5vdCBpbiBhZG1pbkxpc3QFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkBHGdldFNldE5ld1BlcmlvZExlbmd0aEFjdGlvbnMBBQ9uZXdQZXJpb2RMZW5ndGgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQc2V0Rm9yY2VTdG9wRmxhZwEEc3RvcAQFY2hlY2sJAMwIAgMJAQ1pc0luQWRtaW5MaXN0AQkApQgBCAUBaQZjYWxsZXIGCQEIdGhyb3dFcnIBAhpjYWxsZXIgaXMgbm90IGluIGFkbWluTGlzdAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkAzAgCCQEMQm9vbGVhbkVudHJ5AgUMa2V5Rm9yY2VTdG9wBQRzdG9wBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETZ2V0Tm9kZURhdGFSRUFET05MWQELbm9kZUFkZHJlc3MEDSR0MDE1MjQ1MTUzMDkJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQMY3VycmVudExlYXNlCAUNJHQwMTUyNDUxNTMwOQJfMQQKbmV4dExlYXNlZAgFDSR0MDE1MjQ1MTUzMDkCXzIJAJQKAgUDbmlsCQCXCgUFE2N1cnJlbnRQZXJpb2RIZWlnaHQFDGN1cnJlbnRMZWFzZQUQbmV4dFBlcmlvZEhlaWdodAUKbmV4dExlYXNlZAUGaGVpZ2h0AWkBGmdldFVzZXJMZWFzaW5nRGF0YVJFQURPTkxZAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwQNJHQwMTU2NzkxNTc1NgkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQMY3VycmVudExlYXNlCAUNJHQwMTU2NzkxNTc1NgJfMQQKbmV4dExlYXNlZAgFDSR0MDE1Njc5MTU3NTYCXzIJAJQKAgUDbmlsCQCXCgUFE2N1cnJlbnRQZXJpb2RIZWlnaHQFDGN1cnJlbnRMZWFzZQUQbmV4dFBlcmlvZEhlaWdodAUKbmV4dExlYXNlZAUGaGVpZ2h0AWkBE2dldFVzZXJEYXRhUkVBRE9OTFkBC3VzZXJBZGRyZXNzBA0kdDAxNjExOTE2MTc5CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQ0kdDAxNjExOTE2MTc5Al8xBAh0b1VubG9jawgFDSR0MDE2MTE5MTYxNzkCXzIED3VzZXJUb3RhbExvY2tlZAkBEmdldFVzZXJUb3RhbExvY2tlZAEFC3VzZXJBZGRyZXNzCQCUCgIFA25pbAkAmAoGBRNjdXJyZW50UGVyaW9kSGVpZ2h0BQd0b0NsYWltBRBuZXh0UGVyaW9kSGVpZ2h0BQh0b1VubG9jawUPdXNlclRvdGFsTG9ja2VkBQZoZWlnaHQBaQEObGVhc2VCeUFkZHJlc3MCC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzCQEaZ2V0U3Rha2VGcm9tUGF5bWVudEFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFAWkBaQEFbGVhc2UBC25vZGVBZGRyZXNzBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARpnZXRTdGFrZUZyb21QYXltZW50QWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpAQ9sZWFzZUZyb21Mb2NrZWQCC25vZGVBZGRyZXNzBmFtb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQEPZ2V0U3Rha2VBY3Rpb25zBAULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBQZhbW91bnQFAWkBaQELY2FuY2VsTGVhc2UCC25vZGVBZGRyZXNzBmFtb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQERZ2V0VW5zdGFrZUFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFBmFtb3VudAFpAQVjbGFpbQEGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQZhbW91bnQBaQEIY2xhaW1BbGwABAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDSR0MDE3MTkzMTcyNTMJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFDSR0MDE3MTkzMTcyNTMCXzEECHRvVW5sb2NrCAUNJHQwMTcxOTMxNzI1MwJfMgQGY2hlY2tzCQDMCAIDCQBmAgUHdG9DbGFpbQAABgkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQEXZ2V0Q2xhaW1VbmxvY2tlZEFjdGlvbnMCBQt1c2VyQWRkcmVzcwUHdG9DbGFpbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt2b3RlRm9yVHhJZAEEdHhJZAQTY2FsbGVyQWRkcmVzc1N0cmluZwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAlrZXlQcmVmaXgJARhrZXlBbGxvd2VkVHhJZFZvdGVQcmVmaXgBBQR0eElkBAZyZXN1bHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUFsbG93ZWRUeElkAAUEdHhJZAUDbmlsBBFhbGxvd2VkVHhJZE9wdGlvbgkAnQgCBQR0aGlzCQEOa2V5QWxsb3dlZFR4SWQABANlcnIJAMwIAgMJAAACCQDIAQEJANkEAQUEdHhJZAURVFhJRF9CWVRFU19MRU5HVEgGCQEIdGhyb3dFcnIBCQCsAgIFBHR4SWQCEiBpcyBub3QgdmFsaWQgdHhJZAkAzAgCAwMJAAACBRFhbGxvd2VkVHhJZE9wdGlvbgUEdW5pdAYJAQIhPQIJAQV2YWx1ZQEFEWFsbG93ZWRUeElkT3B0aW9uBQR0eElkBgkBCHRocm93RXJyAQkArAICBQR0eElkAhMgaXMgYWxyZWFkeSBhbGxvd2VkBQNuaWwDCQAAAgUDZXJyBQNlcnIJAQx2b3RlSU5URVJOQUwEBRNjYWxsZXJBZGRyZXNzU3RyaW5nBQlrZXlQcmVmaXgFBlFVT1JVTQUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQIYnlBZG1pbnMJAAACCAUCdHgCaWQJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5QWxsb3dlZFR4SWQAAgAEB2J5T3duZXIDCQBnAgkAkAMBCQENZ2V0QWRtaW5zTGlzdAAFBlFVT1JVTQcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkDBQhieUFkbWlucwYFB2J5T3duZXJHASw9", "height": 3287404, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5xUjWKDszSkm11CKLqrnpLNkHBYLMDJQEGhwgH9AXmQg Next: FoDgahN94S9LP76DLx2JtwEovakdu2j9T8RJbqA5BtK7 Diff:
Old | New | Differences | |
---|---|---|---|
12 | 12 | ||
13 | 13 | let f = makeString(["%s", "forceStop"], b) | |
14 | 14 | ||
15 | - | let g = makeString(["%s", " | |
15 | + | let g = makeString(["%s", "offsetId"], b) | |
16 | 16 | ||
17 | - | let h = makeString(["%s", " | |
17 | + | let h = makeString(["%s", "offsetHeight"], b) | |
18 | 18 | ||
19 | - | let i = makeString(["%s", " | |
19 | + | let i = makeString(["%s", "periodLength"], b) | |
20 | 20 | ||
21 | - | let j = | |
21 | + | let j = valueOrElse(getInteger(this, g), 0) | |
22 | 22 | ||
23 | - | let k = valueOrElse(getInteger(this, | |
23 | + | let k = valueOrElse(getInteger(this, i), 10000) | |
24 | 24 | ||
25 | - | let l = valueOrElse(getInteger(this, | |
25 | + | let l = valueOrElse(getInteger(this, h), -1) | |
26 | 26 | ||
27 | - | let m = valueOrElse(getInteger(this, i), -1) | |
27 | + | let m = if (if ((height > l)) | |
28 | + | then (l != -1) | |
29 | + | else false) | |
30 | + | then (((height - l) / k) + j) | |
31 | + | else max([0, (j - 1)]) | |
28 | 32 | ||
29 | - | let n = if (if ((height > m)) | |
30 | - | then (m != -1) | |
31 | - | else false) | |
32 | - | then (((height - m) / l) + k) | |
33 | - | else max([0, (k - 1)]) | |
34 | - | ||
35 | - | let o = if (if ((m == -1)) | |
33 | + | let n = if (if ((l == -1)) | |
36 | 34 | then true | |
37 | - | else if (( | |
38 | - | then ( | |
35 | + | else if ((m == 0)) | |
36 | + | then (l > height) | |
39 | 37 | else false) | |
40 | 38 | then 0 | |
41 | - | else ( | |
39 | + | else (l + ((m - j) * k)) | |
42 | 40 | ||
43 | - | let | |
41 | + | let o = if (if ((l == -1)) | |
44 | 42 | then true | |
45 | - | else if (( | |
46 | - | then ( | |
43 | + | else if ((m == 0)) | |
44 | + | then (l > height) | |
47 | 45 | else false) | |
48 | 46 | then 0 | |
49 | - | else ( | |
47 | + | else (n + k) | |
50 | 48 | ||
51 | - | func | |
49 | + | func p (q) = makeString(["%s", q], b) | |
52 | 50 | ||
53 | 51 | ||
54 | - | func | |
52 | + | func r (s,q) = makeString(["%s%s", q, s], b) | |
55 | 53 | ||
56 | 54 | ||
57 | - | func | |
55 | + | func t (s) = makeString(["%s%s", "toClaim", s], b) | |
58 | 56 | ||
59 | 57 | ||
60 | - | func | |
58 | + | func u (s) = makeString(["%s%s", "userTotalLocked", s], b) | |
61 | 59 | ||
62 | 60 | ||
63 | - | func | |
64 | - | let | |
61 | + | func v (q) = { | |
62 | + | let w = if ((l == -1)) | |
65 | 63 | then 0 | |
66 | 64 | else height | |
67 | - | makeString(["%s%d", | |
65 | + | makeString(["%s%d", q, toString(w)], b) | |
68 | 66 | } | |
69 | 67 | ||
70 | 68 | ||
71 | - | func | |
72 | - | let | |
69 | + | func x (q,s) = { | |
70 | + | let w = if ((l == -1)) | |
73 | 71 | then 0 | |
74 | 72 | else height | |
75 | - | makeString(["%s%s%d", | |
73 | + | makeString(["%s%s%d", q, s, toString(w)], b) | |
76 | 74 | } | |
77 | 75 | ||
78 | 76 | ||
79 | - | let | |
77 | + | let y = valueOrElse(getString(this, e), "WAVES") | |
80 | 78 | ||
81 | - | let | |
79 | + | let z = if ((y == "WAVES")) | |
82 | 80 | then unit | |
83 | - | else fromBase58String( | |
81 | + | else fromBase58String(y) | |
84 | 82 | ||
85 | - | let | |
83 | + | let A = valueOrElse(getBoolean(this, f), false) | |
86 | 84 | ||
87 | - | let C = valueOrElse(getBoolean(this, g), false) | |
88 | - | ||
89 | - | func D (E) = { | |
90 | - | let F = addressFromString(E) | |
91 | - | if ($isInstanceOf(F, "Address")) | |
85 | + | func B (C) = { | |
86 | + | let D = addressFromString(C) | |
87 | + | if ($isInstanceOf(D, "Address")) | |
92 | 88 | then { | |
93 | - | let | |
89 | + | let E = D | |
94 | 90 | true | |
95 | 91 | } | |
96 | 92 | else false | |
97 | 93 | } | |
98 | 94 | ||
99 | 95 | ||
100 | - | let | |
96 | + | let F = 5 | |
101 | 97 | ||
102 | - | let | |
98 | + | let G = 3 | |
103 | 99 | ||
104 | - | let | |
100 | + | let H = 32 | |
105 | 101 | ||
106 | - | func | |
102 | + | func I (J) = makeString(["%s%s%s", "allowTxId", J], b) | |
107 | 103 | ||
108 | 104 | ||
109 | - | func | |
105 | + | func K (L,M) = makeString([L, M], b) | |
110 | 106 | ||
111 | 107 | ||
112 | - | func | |
108 | + | func N () = makeString(["%s", "adminAddressList"], b) | |
113 | 109 | ||
114 | 110 | ||
115 | - | func | |
111 | + | func O () = makeString(["%s", "txId"], b) | |
116 | 112 | ||
117 | 113 | ||
118 | - | func | |
119 | - | let | |
120 | - | valueOrElse(getInteger( | |
114 | + | func P (L,Q) = { | |
115 | + | let R = K(L, Q) | |
116 | + | valueOrElse(getInteger(R), 0) | |
121 | 117 | } | |
122 | 118 | ||
123 | 119 | ||
124 | - | func | |
125 | - | let | |
126 | - | if ($isInstanceOf( | |
120 | + | func S () = { | |
121 | + | let D = getString(this, N()) | |
122 | + | if ($isInstanceOf(D, "String")) | |
127 | 123 | then { | |
128 | - | let | |
129 | - | split( | |
124 | + | let T = D | |
125 | + | split(T, b) | |
130 | 126 | } | |
131 | 127 | else nil | |
132 | 128 | } | |
133 | 129 | ||
134 | 130 | ||
135 | - | func | |
131 | + | func U (C) = containsElement(S(), C) | |
136 | 132 | ||
137 | 133 | ||
138 | - | func | |
139 | - | let | |
140 | - | let | |
141 | - | let | |
142 | - | $Tuple2(( | |
134 | + | func V (E,M) = { | |
135 | + | let W = E | |
136 | + | let X = W._1 | |
137 | + | let L = W._2 | |
138 | + | $Tuple2((X :+ K(L, M)), L) | |
143 | 139 | } | |
144 | 140 | ||
145 | 141 | ||
146 | - | func | |
147 | - | let | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | func | |
153 | - | then | |
154 | - | else | |
142 | + | func Y (Z) = { | |
143 | + | let aa = N() | |
144 | + | let ab = { | |
145 | + | let ac = S() | |
146 | + | let ad = size(ac) | |
147 | + | let ae = $Tuple2(nil, Z) | |
148 | + | func af (ag,ah) = if ((ah >= ad)) | |
149 | + | then ag | |
150 | + | else V(ag, ac[ah]) | |
155 | 151 | ||
156 | - | func | |
157 | - | then | |
152 | + | func ai (ag,ah) = if ((ah >= ad)) | |
153 | + | then ag | |
158 | 154 | else throw("List size exceeds 5") | |
159 | 155 | ||
160 | - | | |
156 | + | ai(af(af(af(af(af(ae, 0), 1), 2), 3), 4), 5) | |
161 | 157 | } | |
162 | - | let | |
163 | - | let | |
164 | - | | |
158 | + | let X = ab._1 | |
159 | + | let L = ab._2 | |
160 | + | X | |
165 | 161 | } | |
166 | 162 | ||
167 | 163 | ||
168 | - | func | |
164 | + | func aj (X,R) = (X + valueOrElse(getInteger(R), 0)) | |
169 | 165 | ||
170 | 166 | ||
171 | - | func | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | func | |
177 | - | then | |
178 | - | else | |
167 | + | func ak (L) = { | |
168 | + | let al = Y(L) | |
169 | + | let ac = al | |
170 | + | let ad = size(ac) | |
171 | + | let ae = 0 | |
172 | + | func af (ag,ah) = if ((ah >= ad)) | |
173 | + | then ag | |
174 | + | else aj(ag, ac[ah]) | |
179 | 175 | ||
180 | - | func | |
181 | - | then | |
176 | + | func ai (ag,ah) = if ((ah >= ad)) | |
177 | + | then ag | |
182 | 178 | else throw("List size exceeds 5") | |
183 | 179 | ||
184 | - | | |
180 | + | ai(af(af(af(af(af(ae, 0), 1), 2), 3), 4), 5) | |
185 | 181 | } | |
186 | 182 | ||
187 | 183 | ||
188 | - | func | |
184 | + | func am (X,an) = (X :+ DeleteEntry(an)) | |
189 | 185 | ||
190 | 186 | ||
191 | - | func | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | func | |
197 | - | then | |
198 | - | else | |
187 | + | func ao (L) = { | |
188 | + | let al = Y(L) | |
189 | + | let ac = al | |
190 | + | let ad = size(ac) | |
191 | + | let ae = nil | |
192 | + | func af (ag,ah) = if ((ah >= ad)) | |
193 | + | then ag | |
194 | + | else am(ag, ac[ah]) | |
199 | 195 | ||
200 | - | func | |
201 | - | then | |
196 | + | func ai (ag,ah) = if ((ah >= ad)) | |
197 | + | then ag | |
202 | 198 | else throw("List size exceeds 5") | |
203 | 199 | ||
204 | - | | |
200 | + | ai(af(af(af(af(af(ae, 0), 1), 2), 3), 4), 5) | |
205 | 201 | } | |
206 | 202 | ||
207 | 203 | ||
208 | - | func | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | then c((("Address: " + | |
213 | - | else if (( | |
214 | - | then c(( | |
204 | + | func ap (aq,Z,ar,as) = { | |
205 | + | let R = K(Z, aq) | |
206 | + | let at = P(Z, aq) | |
207 | + | let au = if (!(U(aq))) | |
208 | + | then c((("Address: " + aq) + " not in Admin list")) | |
209 | + | else if ((at == 1)) | |
210 | + | then c((R + " you already voted")) | |
215 | 211 | else unit | |
216 | - | if (( | |
212 | + | if ((au == au)) | |
217 | 213 | then { | |
218 | - | let | |
219 | - | if ((( | |
214 | + | let al = ak(Z) | |
215 | + | if (((al + 1) >= ar)) | |
220 | 216 | then { | |
221 | - | let | |
222 | - | ( | |
217 | + | let av = ao(Z) | |
218 | + | (av ++ as) | |
223 | 219 | } | |
224 | - | else [IntegerEntry( | |
220 | + | else [IntegerEntry(R, 1)] | |
225 | 221 | } | |
226 | 222 | else throw("Strict value is not equal to itself.") | |
227 | 223 | } | |
228 | 224 | ||
229 | 225 | ||
230 | - | func | |
231 | - | let | |
232 | - | StringEntry(q | |
226 | + | func aw (q,ax,ay) = { | |
227 | + | let az = makeString(["%d%d%d%d", toString(n), toString(ax), toString(o), toString(ay)], b) | |
228 | + | StringEntry(p(q), az) | |
233 | 229 | } | |
234 | 230 | ||
235 | 231 | ||
236 | - | func | |
237 | - | let | |
238 | - | let | |
239 | - | if ($isInstanceOf( | |
232 | + | func aA (q) = { | |
233 | + | let aB = getString(this, p(q)) | |
234 | + | let D = aB | |
235 | + | if ($isInstanceOf(D, "String")) | |
240 | 236 | then { | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | if (if (( | |
237 | + | let aC = D | |
238 | + | let aD = split(aC, b) | |
239 | + | let aE = parseIntValue(aD[1]) | |
240 | + | let aF = parseIntValue(aD[2]) | |
241 | + | let aG = parseIntValue(aD[3]) | |
242 | + | let aH = parseIntValue(aD[4]) | |
243 | + | if (if ((aG > height)) | |
248 | 244 | then true | |
249 | - | else ( | |
250 | - | then $Tuple2( | |
251 | - | else $Tuple2( | |
245 | + | else (l == -1)) | |
246 | + | then $Tuple2(aF, aH) | |
247 | + | else $Tuple2(aH, aH) | |
252 | 248 | } | |
253 | 249 | else $Tuple2(0, 0) | |
254 | 250 | } | |
255 | 251 | ||
256 | 252 | ||
257 | - | func | |
258 | - | let | |
259 | - | StringEntry(s | |
253 | + | func aI (q,s,aJ,aK) = { | |
254 | + | let az = makeString(["%d%d%d%d", toString(n), toString(aJ), toString(o), toString(aK)], b) | |
255 | + | StringEntry(r(s, q), az) | |
260 | 256 | } | |
261 | 257 | ||
262 | 258 | ||
263 | - | func | |
264 | - | let | |
265 | - | let | |
266 | - | if ($isInstanceOf( | |
259 | + | func aL (q,s) = { | |
260 | + | let aM = getString(this, r(s, q)) | |
261 | + | let D = aM | |
262 | + | if ($isInstanceOf(D, "String")) | |
267 | 263 | then { | |
268 | - | let | |
269 | - | let | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | if (if (( | |
264 | + | let aC = D | |
265 | + | let aD = split(aC, b) | |
266 | + | let aN = parseIntValue(aD[1]) | |
267 | + | let aJ = parseIntValue(aD[2]) | |
268 | + | let aO = parseIntValue(aD[3]) | |
269 | + | let aK = parseIntValue(aD[4]) | |
270 | + | if (if ((aO > height)) | |
275 | 271 | then true | |
276 | - | else ( | |
277 | - | then $Tuple2( | |
278 | - | else $Tuple2( | |
272 | + | else (l == -1)) | |
273 | + | then $Tuple2(aJ, aK) | |
274 | + | else $Tuple2(aK, aK) | |
279 | 275 | } | |
280 | 276 | else $Tuple2(0, 0) | |
281 | 277 | } | |
282 | 278 | ||
283 | 279 | ||
284 | - | func | |
285 | - | let | |
286 | - | StringEntry( | |
280 | + | func aP (s,aQ,aR) = { | |
281 | + | let az = makeString(["%d%d%d%d", toString(n), toString(aQ), toString(o), toString(aR)], b) | |
282 | + | StringEntry(t(s), az) | |
287 | 283 | } | |
288 | 284 | ||
289 | 285 | ||
290 | - | func | |
291 | - | let | |
292 | - | let | |
293 | - | if ($isInstanceOf( | |
286 | + | func aS (s) = { | |
287 | + | let aT = getString(this, t(s)) | |
288 | + | let D = aT | |
289 | + | if ($isInstanceOf(D, "String")) | |
294 | 290 | then { | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | let | |
301 | - | if (if (( | |
291 | + | let aC = D | |
292 | + | let aD = split(aC, b) | |
293 | + | let aU = parseIntValue(aD[1]) | |
294 | + | let aQ = parseIntValue(aD[2]) | |
295 | + | let aV = parseIntValue(aD[3]) | |
296 | + | let aR = parseIntValue(aD[4]) | |
297 | + | if (if ((aV > height)) | |
302 | 298 | then true | |
303 | - | else ( | |
304 | - | then $Tuple2( | |
305 | - | else $Tuple2(( | |
299 | + | else (m == 0)) | |
300 | + | then $Tuple2(aQ, aR) | |
301 | + | else $Tuple2((aQ + aR), 0) | |
306 | 302 | } | |
307 | 303 | else $Tuple2(0, 0) | |
308 | 304 | } | |
309 | 305 | ||
310 | 306 | ||
311 | - | func | |
307 | + | func aW (s,aX) = IntegerEntry(u(s), aX) | |
312 | 308 | ||
313 | 309 | ||
314 | - | func | |
310 | + | func aY (s) = valueOrElse(getInteger(this, u(s)), 0) | |
315 | 311 | ||
316 | 312 | ||
317 | - | func | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
313 | + | func aZ (q,s,ba) = { | |
314 | + | let bb = aA(q) | |
315 | + | let aF = bb._1 | |
316 | + | let aH = bb._2 | |
317 | + | let bc = aL(q, s) | |
318 | + | let aJ = bc._1 | |
319 | + | let aK = bc._2 | |
320 | + | let bd = [if (!(A)) | |
325 | 321 | then true | |
326 | - | else c("contract is temporary stopped"), if ( | |
322 | + | else c("contract is temporary stopped"), if ((ba > 0)) | |
327 | 323 | then true | |
328 | - | else c("unstake | |
324 | + | else c("unstake amount should be greater than 0"), if ((aK >= ba)) | |
329 | 325 | then true | |
330 | - | else c("unstake amount should be | |
326 | + | else c("unstake amount should be less or equal user staked amount"), if ((aH >= ba)) | |
331 | 327 | then true | |
332 | - | else c("unstake amount should be less or equal | |
328 | + | else c("unstake amount should be less or equal node staked amount"), if (B(q)) | |
333 | 329 | then true | |
334 | - | else c(" | |
330 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
335 | 331 | then true | |
336 | - | else c(makeString(["node address is not valid:", r], " ")), if (D(t)) | |
337 | - | then true | |
338 | - | else c(makeString(["user address is not valid:", t], " "))] | |
339 | - | if ((bf == bf)) | |
332 | + | else c(makeString(["user address is not valid:", s], " "))] | |
333 | + | if ((bd == bd)) | |
340 | 334 | then { | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | [ | |
335 | + | let be = (aH - ba) | |
336 | + | let bf = (aK - ba) | |
337 | + | let bg = aS(s) | |
338 | + | let aQ = bg._1 | |
339 | + | let aR = bg._2 | |
340 | + | let bh = (aR + ba) | |
341 | + | let aX = aY(s) | |
342 | + | let bi = (aX - ba) | |
343 | + | [aw(q, aF, be), aI(q, s, aJ, bf), aP(s, aQ, bh), aW(s, bi), IntegerEntry(v(q), be), IntegerEntry(x(q, s), bf)] | |
350 | 344 | } | |
351 | 345 | else throw("Strict value is not equal to itself.") | |
352 | 346 | } | |
353 | 347 | ||
354 | 348 | ||
355 | - | func | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
349 | + | func bj (s,bk) = { | |
350 | + | let bl = aS(s) | |
351 | + | let aQ = bl._1 | |
352 | + | let aR = bl._2 | |
353 | + | let bd = [if (!(A)) | |
360 | 354 | then true | |
361 | - | else c("contract is temporary stopped"), if ( | |
355 | + | else c("contract is temporary stopped"), if ((bk > 0)) | |
362 | 356 | then true | |
363 | - | else c("claim | |
357 | + | else c("claim amount should be greater than 0"), if ((aQ >= bk)) | |
364 | 358 | then true | |
365 | - | else c("claim amount should be | |
359 | + | else c("claim amount should be less or equal unlocked amount"), if (B(s)) | |
366 | 360 | then true | |
367 | - | else c("claim amount should be less or equal unlocked amount"), if (D(t)) | |
368 | - | then true | |
369 | - | else c(makeString(["user address is not valid:", t], " "))] | |
370 | - | if ((bf == bf)) | |
361 | + | else c(makeString(["user address is not valid:", s], " "))] | |
362 | + | if ((bd == bd)) | |
371 | 363 | then { | |
372 | - | let | |
373 | - | [ | |
364 | + | let bm = (aQ - bk) | |
365 | + | [aP(s, bm, aR), ScriptTransfer(addressFromStringValue(s), bk, z)] | |
374 | 366 | } | |
375 | 367 | else throw("Strict value is not equal to itself.") | |
376 | 368 | } | |
377 | 369 | ||
378 | 370 | ||
379 | - | func | |
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
371 | + | func bn (q,s,bo,bp) = { | |
372 | + | let bq = aS(s) | |
373 | + | let aQ = bq._1 | |
374 | + | let aR = bq._2 | |
375 | + | let br = if ((size(bp.payments) == 0)) | |
384 | 376 | then 0 | |
385 | - | else | |
386 | - | let | |
387 | - | let | |
377 | + | else bp.payments[0].amount | |
378 | + | let bs = ((aR + aQ) + br) | |
379 | + | let bd = [if (!(A)) | |
388 | 380 | then true | |
389 | - | else c("contract is temporary stopped"), if ((1 >= size( | |
381 | + | else c("contract is temporary stopped"), if ((1 >= size(bp.payments))) | |
390 | 382 | then true | |
391 | - | else c("maximum 1 payment"), if (if ((size( | |
383 | + | else c("maximum 1 payment"), if (if ((size(bp.payments) == 0)) | |
392 | 384 | then true | |
393 | - | else ( | |
385 | + | else (bp.payments[0].assetId == z)) | |
394 | 386 | then true | |
395 | - | else c(makeString(["payment assetId should be:", | |
387 | + | else c(makeString(["payment assetId should be:", y], " ")), if ((bo > 0)) | |
396 | 388 | then true | |
397 | - | else c("amount should be greater than 0"), if (( | |
389 | + | else c("amount should be greater than 0"), if ((bs >= bo)) | |
398 | 390 | then true | |
399 | - | else c("amount should be less or equal (payment + available) amount"), if (( | |
391 | + | else c("amount should be less or equal (payment + available) amount"), if ((bo >= br)) | |
400 | 392 | then true | |
401 | - | else throw("amount should be greater or equal payment amount"), if ( | |
393 | + | else throw("amount should be greater or equal payment amount"), if (B(q)) | |
402 | 394 | then true | |
403 | - | else c(makeString(["node address is not valid:", | |
395 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
404 | 396 | then true | |
405 | - | else c(makeString(["user address is not valid:", | |
406 | - | if (( | |
397 | + | else c(makeString(["user address is not valid:", s], " "))] | |
398 | + | if ((bd == bd)) | |
407 | 399 | then { | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | let | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
416 | - | let | |
417 | - | let | |
418 | - | let | |
419 | - | let | |
420 | - | let | |
421 | - | [ | |
400 | + | let bt = aA(q) | |
401 | + | let aF = bt._1 | |
402 | + | let aH = bt._2 | |
403 | + | let be = (aH + bo) | |
404 | + | let bu = aL(q, s) | |
405 | + | let aJ = bu._1 | |
406 | + | let aK = bu._2 | |
407 | + | let bf = (aK + bo) | |
408 | + | let bv = (bo - br) | |
409 | + | let bh = max([0, (aR - bv)]) | |
410 | + | let bm = min([aQ, (aQ + (aR - bv))]) | |
411 | + | let aX = aY(s) | |
412 | + | let bi = (aX + bo) | |
413 | + | [aw(q, aF, be), aI(q, s, aJ, bf), aP(s, bm, bh), aW(s, bi), IntegerEntry(v(q), be), IntegerEntry(x(q, s), bf)] | |
422 | 414 | } | |
423 | 415 | else throw("Strict value is not equal to itself.") | |
424 | 416 | } | |
425 | 417 | ||
426 | 418 | ||
427 | - | func | |
428 | - | let | |
419 | + | func bw (q,s,bp) = { | |
420 | + | let bd = [if ((size(bp.payments) == 1)) | |
429 | 421 | then true | |
430 | 422 | else c("payment size should be exactly 1")] | |
431 | - | if (( | |
432 | - | then | |
423 | + | if ((bd == bd)) | |
424 | + | then bn(q, s, bp.payments[0].amount, bp) | |
433 | 425 | else throw("Strict value is not equal to itself.") | |
434 | 426 | } | |
435 | 427 | ||
436 | 428 | ||
437 | - | func | |
438 | - | let | |
429 | + | func bx (by) = { | |
430 | + | let bz = [if ((by > 0)) | |
439 | 431 | then true | |
440 | 432 | else c("period length should be greater than 0")] | |
441 | - | if (( | |
442 | - | then if (( | |
443 | - | then [IntegerEntry( | |
444 | - | else [IntegerEntry( | |
433 | + | if ((bz == bz)) | |
434 | + | then if ((l == -1)) | |
435 | + | then [IntegerEntry(i, by), IntegerEntry(h, height)] | |
436 | + | else [IntegerEntry(g, (m + 1)), IntegerEntry(h, o), IntegerEntry(i, by)] | |
445 | 437 | else throw("Strict value is not equal to itself.") | |
446 | 438 | } | |
447 | 439 | ||
448 | 440 | ||
449 | - | @Callable( | |
450 | - | func setNewPeriodLength ( | |
451 | - | let | |
441 | + | @Callable(bp) | |
442 | + | func setNewPeriodLength (by) = { | |
443 | + | let bd = [if (U(toString(bp.caller))) | |
452 | 444 | then true | |
453 | 445 | else c("caller is not in adminList")] | |
454 | - | if (( | |
455 | - | then | |
446 | + | if ((bd == bd)) | |
447 | + | then bx(by) | |
456 | 448 | else throw("Strict value is not equal to itself.") | |
457 | 449 | } | |
458 | 450 | ||
459 | 451 | ||
460 | 452 | ||
461 | - | @Callable( | |
462 | - | func setForceStopFlag ( | |
463 | - | let | |
453 | + | @Callable(bp) | |
454 | + | func setForceStopFlag (bA) = { | |
455 | + | let bz = [if (U(toString(bp.caller))) | |
464 | 456 | then true | |
465 | 457 | else c("caller is not in adminList")] | |
466 | - | if (( | |
467 | - | then [BooleanEntry(f, | |
458 | + | if ((bz == bz)) | |
459 | + | then [BooleanEntry(f, bA)] | |
468 | 460 | else throw("Strict value is not equal to itself.") | |
469 | 461 | } | |
470 | 462 | ||
471 | 463 | ||
472 | 464 | ||
473 | - | @Callable(br) | |
474 | - | func setForceOutStopFlag (bC) = { | |
475 | - | let bB = [if (W(toString(br.caller))) | |
465 | + | @Callable(bp) | |
466 | + | func getNodeDataREADONLY (q) = { | |
467 | + | let bB = aA(q) | |
468 | + | let bC = bB._1 | |
469 | + | let ay = bB._2 | |
470 | + | $Tuple2(nil, $Tuple5(n, bC, o, ay, height)) | |
471 | + | } | |
472 | + | ||
473 | + | ||
474 | + | ||
475 | + | @Callable(bp) | |
476 | + | func getUserLeasingDataREADONLY (q,s) = { | |
477 | + | let bD = aL(q, s) | |
478 | + | let bC = bD._1 | |
479 | + | let ay = bD._2 | |
480 | + | $Tuple2(nil, $Tuple5(n, bC, o, ay, height)) | |
481 | + | } | |
482 | + | ||
483 | + | ||
484 | + | ||
485 | + | @Callable(bp) | |
486 | + | func getUserDataREADONLY (s) = { | |
487 | + | let bE = aS(s) | |
488 | + | let aQ = bE._1 | |
489 | + | let aR = bE._2 | |
490 | + | let aX = aY(s) | |
491 | + | $Tuple2(nil, $Tuple6(n, aQ, o, aR, aX, height)) | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | ||
496 | + | @Callable(bp) | |
497 | + | func leaseByAddress (q,s) = bw(q, s, bp) | |
498 | + | ||
499 | + | ||
500 | + | ||
501 | + | @Callable(bp) | |
502 | + | func lease (q) = { | |
503 | + | let s = toString(bp.caller) | |
504 | + | bw(q, s, bp) | |
505 | + | } | |
506 | + | ||
507 | + | ||
508 | + | ||
509 | + | @Callable(bp) | |
510 | + | func leaseFromLocked (q,bF) = { | |
511 | + | let s = toString(bp.caller) | |
512 | + | bn(q, s, bF, bp) | |
513 | + | } | |
514 | + | ||
515 | + | ||
516 | + | ||
517 | + | @Callable(bp) | |
518 | + | func cancelLease (q,bF) = { | |
519 | + | let s = toString(bp.caller) | |
520 | + | aZ(q, s, bF) | |
521 | + | } | |
522 | + | ||
523 | + | ||
524 | + | ||
525 | + | @Callable(bp) | |
526 | + | func claim (bF) = { | |
527 | + | let s = toString(bp.caller) | |
528 | + | bj(s, bF) | |
529 | + | } | |
530 | + | ||
531 | + | ||
532 | + | ||
533 | + | @Callable(bp) | |
534 | + | func claimAll () = { | |
535 | + | let s = toString(bp.caller) | |
536 | + | let bG = aS(s) | |
537 | + | let aQ = bG._1 | |
538 | + | let aR = bG._2 | |
539 | + | let bd = [if ((aQ > 0)) | |
476 | 540 | then true | |
477 | - | else c(" | |
478 | - | if (( | |
479 | - | then | |
541 | + | else c("nothing to claim")] | |
542 | + | if ((bd == bd)) | |
543 | + | then bj(s, aQ) | |
480 | 544 | else throw("Strict value is not equal to itself.") | |
481 | 545 | } | |
482 | 546 | ||
483 | 547 | ||
484 | 548 | ||
485 | - | @Callable(br) | |
486 | - | func getNodeDataREADONLY (r) = { | |
487 | - | let bD = aC(r) | |
488 | - | let bE = bD._1 | |
489 | - | let aA = bD._2 | |
490 | - | $Tuple2(nil, $Tuple5(o, bE, p, aA, height)) | |
491 | - | } | |
492 | - | ||
493 | - | ||
494 | - | ||
495 | - | @Callable(br) | |
496 | - | func getUserLeasingDataREADONLY (r,t) = { | |
497 | - | let bF = aN(r, t) | |
498 | - | let bE = bF._1 | |
499 | - | let aA = bF._2 | |
500 | - | $Tuple2(nil, $Tuple5(o, bE, p, aA, height)) | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | ||
505 | - | @Callable(br) | |
506 | - | func getUserDataREADONLY (t) = { | |
507 | - | let bG = aU(t) | |
508 | - | let aS = bG._1 | |
509 | - | let aT = bG._2 | |
510 | - | let aZ = ba(t) | |
511 | - | $Tuple2(nil, $Tuple6(o, aS, p, aT, aZ, height)) | |
512 | - | } | |
513 | - | ||
514 | - | ||
515 | - | ||
516 | - | @Callable(br) | |
517 | - | func leaseByAddress (r,t) = by(r, t, br) | |
518 | - | ||
519 | - | ||
520 | - | ||
521 | - | @Callable(br) | |
522 | - | func lease (r) = { | |
523 | - | let t = toString(br.caller) | |
524 | - | by(r, t, br) | |
525 | - | } | |
526 | - | ||
527 | - | ||
528 | - | ||
529 | - | @Callable(br) | |
530 | - | func leaseFromLocked (r,bH) = { | |
531 | - | let t = toString(br.caller) | |
532 | - | bp(r, t, bH, br) | |
533 | - | } | |
534 | - | ||
535 | - | ||
536 | - | ||
537 | - | @Callable(br) | |
538 | - | func cancelLease (r,bH) = { | |
539 | - | let t = toString(br.caller) | |
540 | - | bb(r, t, bH) | |
541 | - | } | |
542 | - | ||
543 | - | ||
544 | - | ||
545 | - | @Callable(br) | |
546 | - | func claim (bH) = { | |
547 | - | let t = toString(br.caller) | |
548 | - | bl(t, bH) | |
549 | - | } | |
550 | - | ||
551 | - | ||
552 | - | ||
553 | - | @Callable(br) | |
554 | - | func claimAll () = { | |
555 | - | let t = toString(br.caller) | |
556 | - | let bI = aU(t) | |
557 | - | let aS = bI._1 | |
558 | - | let aT = bI._2 | |
559 | - | let bf = [if ((aS > 0)) | |
549 | + | @Callable(bp) | |
550 | + | func voteForTxId (J) = { | |
551 | + | let aq = toBase58String(bp.caller.bytes) | |
552 | + | let Z = I(J) | |
553 | + | let X = [StringEntry(O(), J)] | |
554 | + | let bH = getString(this, O()) | |
555 | + | let au = [if ((size(fromBase58String(J)) == H)) | |
560 | 556 | then true | |
561 | - | else c("nothing to claim")] | |
562 | - | if ((bf == bf)) | |
563 | - | then bl(t, aS) | |
557 | + | else c((J + " is not valid txId")), if (if ((bH == unit)) | |
558 | + | then true | |
559 | + | else (value(bH) != J)) | |
560 | + | then true | |
561 | + | else c((J + " is already allowed"))] | |
562 | + | if ((au == au)) | |
563 | + | then ap(aq, Z, G, X) | |
564 | 564 | else throw("Strict value is not equal to itself.") | |
565 | 565 | } | |
566 | 566 | ||
567 | 567 | ||
568 | - | ||
569 | - | @Callable(br) | |
570 | - | func voteForTxId (L) = { | |
571 | - | let as = toBase58String(br.caller.bytes) | |
572 | - | let ab = K(L) | |
573 | - | let Z = [StringEntry(Q(), L)] | |
574 | - | let bJ = getString(this, Q()) | |
575 | - | let aw = [if ((size(fromBase58String(L)) == J)) | |
568 | + | @Verifier(bI) | |
569 | + | func bJ () = { | |
570 | + | let bK = (bI.id == fromBase58String(valueOrElse(getString(this, O()), ""))) | |
571 | + | let bL = if ((size(S()) >= G)) | |
572 | + | then false | |
573 | + | else sigVerify(bI.bodyBytes, bI.proofs[0], bI.senderPublicKey) | |
574 | + | if (bK) | |
576 | 575 | then true | |
577 | - | else c((L + " is not valid txId")), if (if ((bJ == unit)) | |
578 | - | then true | |
579 | - | else (value(bJ) != L)) | |
580 | - | then true | |
581 | - | else c((L + " is already allowed"))] | |
582 | - | if ((aw == aw)) | |
583 | - | then ar(as, ab, I, Z) | |
584 | - | else throw("Strict value is not equal to itself.") | |
585 | - | } | |
586 | - | ||
587 | - | ||
588 | - | @Verifier(bK) | |
589 | - | func bL () = { | |
590 | - | let bM = (bK.id == fromBase58String(valueOrElse(getString(this, Q()), ""))) | |
591 | - | let bN = if ((size(U()) >= I)) | |
592 | - | then false | |
593 | - | else sigVerify(bK.bodyBytes, bK.proofs[0], bK.senderPublicKey) | |
594 | - | if (bM) | |
595 | - | then true | |
596 | - | else bN | |
576 | + | else bL | |
597 | 577 | } | |
598 | 578 |
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", "forceStop"], b) | |
14 | 14 | ||
15 | - | let g = makeString(["%s", " | |
15 | + | let g = makeString(["%s", "offsetId"], b) | |
16 | 16 | ||
17 | - | let h = makeString(["%s", " | |
17 | + | let h = makeString(["%s", "offsetHeight"], b) | |
18 | 18 | ||
19 | - | let i = makeString(["%s", " | |
19 | + | let i = makeString(["%s", "periodLength"], b) | |
20 | 20 | ||
21 | - | let j = | |
21 | + | let j = valueOrElse(getInteger(this, g), 0) | |
22 | 22 | ||
23 | - | let k = valueOrElse(getInteger(this, | |
23 | + | let k = valueOrElse(getInteger(this, i), 10000) | |
24 | 24 | ||
25 | - | let l = valueOrElse(getInteger(this, | |
25 | + | let l = valueOrElse(getInteger(this, h), -1) | |
26 | 26 | ||
27 | - | let m = valueOrElse(getInteger(this, i), -1) | |
27 | + | let m = if (if ((height > l)) | |
28 | + | then (l != -1) | |
29 | + | else false) | |
30 | + | then (((height - l) / k) + j) | |
31 | + | else max([0, (j - 1)]) | |
28 | 32 | ||
29 | - | let n = if (if ((height > m)) | |
30 | - | then (m != -1) | |
31 | - | else false) | |
32 | - | then (((height - m) / l) + k) | |
33 | - | else max([0, (k - 1)]) | |
34 | - | ||
35 | - | let o = if (if ((m == -1)) | |
33 | + | let n = if (if ((l == -1)) | |
36 | 34 | then true | |
37 | - | else if (( | |
38 | - | then ( | |
35 | + | else if ((m == 0)) | |
36 | + | then (l > height) | |
39 | 37 | else false) | |
40 | 38 | then 0 | |
41 | - | else ( | |
39 | + | else (l + ((m - j) * k)) | |
42 | 40 | ||
43 | - | let | |
41 | + | let o = if (if ((l == -1)) | |
44 | 42 | then true | |
45 | - | else if (( | |
46 | - | then ( | |
43 | + | else if ((m == 0)) | |
44 | + | then (l > height) | |
47 | 45 | else false) | |
48 | 46 | then 0 | |
49 | - | else ( | |
47 | + | else (n + k) | |
50 | 48 | ||
51 | - | func | |
49 | + | func p (q) = makeString(["%s", q], b) | |
52 | 50 | ||
53 | 51 | ||
54 | - | func | |
52 | + | func r (s,q) = makeString(["%s%s", q, s], b) | |
55 | 53 | ||
56 | 54 | ||
57 | - | func | |
55 | + | func t (s) = makeString(["%s%s", "toClaim", s], b) | |
58 | 56 | ||
59 | 57 | ||
60 | - | func | |
58 | + | func u (s) = makeString(["%s%s", "userTotalLocked", s], b) | |
61 | 59 | ||
62 | 60 | ||
63 | - | func | |
64 | - | let | |
61 | + | func v (q) = { | |
62 | + | let w = if ((l == -1)) | |
65 | 63 | then 0 | |
66 | 64 | else height | |
67 | - | makeString(["%s%d", | |
65 | + | makeString(["%s%d", q, toString(w)], b) | |
68 | 66 | } | |
69 | 67 | ||
70 | 68 | ||
71 | - | func | |
72 | - | let | |
69 | + | func x (q,s) = { | |
70 | + | let w = if ((l == -1)) | |
73 | 71 | then 0 | |
74 | 72 | else height | |
75 | - | makeString(["%s%s%d", | |
73 | + | makeString(["%s%s%d", q, s, toString(w)], b) | |
76 | 74 | } | |
77 | 75 | ||
78 | 76 | ||
79 | - | let | |
77 | + | let y = valueOrElse(getString(this, e), "WAVES") | |
80 | 78 | ||
81 | - | let | |
79 | + | let z = if ((y == "WAVES")) | |
82 | 80 | then unit | |
83 | - | else fromBase58String( | |
81 | + | else fromBase58String(y) | |
84 | 82 | ||
85 | - | let | |
83 | + | let A = valueOrElse(getBoolean(this, f), false) | |
86 | 84 | ||
87 | - | let C = valueOrElse(getBoolean(this, g), false) | |
88 | - | ||
89 | - | func D (E) = { | |
90 | - | let F = addressFromString(E) | |
91 | - | if ($isInstanceOf(F, "Address")) | |
85 | + | func B (C) = { | |
86 | + | let D = addressFromString(C) | |
87 | + | if ($isInstanceOf(D, "Address")) | |
92 | 88 | then { | |
93 | - | let | |
89 | + | let E = D | |
94 | 90 | true | |
95 | 91 | } | |
96 | 92 | else false | |
97 | 93 | } | |
98 | 94 | ||
99 | 95 | ||
100 | - | let | |
96 | + | let F = 5 | |
101 | 97 | ||
102 | - | let | |
98 | + | let G = 3 | |
103 | 99 | ||
104 | - | let | |
100 | + | let H = 32 | |
105 | 101 | ||
106 | - | func | |
102 | + | func I (J) = makeString(["%s%s%s", "allowTxId", J], b) | |
107 | 103 | ||
108 | 104 | ||
109 | - | func | |
105 | + | func K (L,M) = makeString([L, M], b) | |
110 | 106 | ||
111 | 107 | ||
112 | - | func | |
108 | + | func N () = makeString(["%s", "adminAddressList"], b) | |
113 | 109 | ||
114 | 110 | ||
115 | - | func | |
111 | + | func O () = makeString(["%s", "txId"], b) | |
116 | 112 | ||
117 | 113 | ||
118 | - | func | |
119 | - | let | |
120 | - | valueOrElse(getInteger( | |
114 | + | func P (L,Q) = { | |
115 | + | let R = K(L, Q) | |
116 | + | valueOrElse(getInteger(R), 0) | |
121 | 117 | } | |
122 | 118 | ||
123 | 119 | ||
124 | - | func | |
125 | - | let | |
126 | - | if ($isInstanceOf( | |
120 | + | func S () = { | |
121 | + | let D = getString(this, N()) | |
122 | + | if ($isInstanceOf(D, "String")) | |
127 | 123 | then { | |
128 | - | let | |
129 | - | split( | |
124 | + | let T = D | |
125 | + | split(T, b) | |
130 | 126 | } | |
131 | 127 | else nil | |
132 | 128 | } | |
133 | 129 | ||
134 | 130 | ||
135 | - | func | |
131 | + | func U (C) = containsElement(S(), C) | |
136 | 132 | ||
137 | 133 | ||
138 | - | func | |
139 | - | let | |
140 | - | let | |
141 | - | let | |
142 | - | $Tuple2(( | |
134 | + | func V (E,M) = { | |
135 | + | let W = E | |
136 | + | let X = W._1 | |
137 | + | let L = W._2 | |
138 | + | $Tuple2((X :+ K(L, M)), L) | |
143 | 139 | } | |
144 | 140 | ||
145 | 141 | ||
146 | - | func | |
147 | - | let | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | func | |
153 | - | then | |
154 | - | else | |
142 | + | func Y (Z) = { | |
143 | + | let aa = N() | |
144 | + | let ab = { | |
145 | + | let ac = S() | |
146 | + | let ad = size(ac) | |
147 | + | let ae = $Tuple2(nil, Z) | |
148 | + | func af (ag,ah) = if ((ah >= ad)) | |
149 | + | then ag | |
150 | + | else V(ag, ac[ah]) | |
155 | 151 | ||
156 | - | func | |
157 | - | then | |
152 | + | func ai (ag,ah) = if ((ah >= ad)) | |
153 | + | then ag | |
158 | 154 | else throw("List size exceeds 5") | |
159 | 155 | ||
160 | - | | |
156 | + | ai(af(af(af(af(af(ae, 0), 1), 2), 3), 4), 5) | |
161 | 157 | } | |
162 | - | let | |
163 | - | let | |
164 | - | | |
158 | + | let X = ab._1 | |
159 | + | let L = ab._2 | |
160 | + | X | |
165 | 161 | } | |
166 | 162 | ||
167 | 163 | ||
168 | - | func | |
164 | + | func aj (X,R) = (X + valueOrElse(getInteger(R), 0)) | |
169 | 165 | ||
170 | 166 | ||
171 | - | func | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | func | |
177 | - | then | |
178 | - | else | |
167 | + | func ak (L) = { | |
168 | + | let al = Y(L) | |
169 | + | let ac = al | |
170 | + | let ad = size(ac) | |
171 | + | let ae = 0 | |
172 | + | func af (ag,ah) = if ((ah >= ad)) | |
173 | + | then ag | |
174 | + | else aj(ag, ac[ah]) | |
179 | 175 | ||
180 | - | func | |
181 | - | then | |
176 | + | func ai (ag,ah) = if ((ah >= ad)) | |
177 | + | then ag | |
182 | 178 | else throw("List size exceeds 5") | |
183 | 179 | ||
184 | - | | |
180 | + | ai(af(af(af(af(af(ae, 0), 1), 2), 3), 4), 5) | |
185 | 181 | } | |
186 | 182 | ||
187 | 183 | ||
188 | - | func | |
184 | + | func am (X,an) = (X :+ DeleteEntry(an)) | |
189 | 185 | ||
190 | 186 | ||
191 | - | func | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | func | |
197 | - | then | |
198 | - | else | |
187 | + | func ao (L) = { | |
188 | + | let al = Y(L) | |
189 | + | let ac = al | |
190 | + | let ad = size(ac) | |
191 | + | let ae = nil | |
192 | + | func af (ag,ah) = if ((ah >= ad)) | |
193 | + | then ag | |
194 | + | else am(ag, ac[ah]) | |
199 | 195 | ||
200 | - | func | |
201 | - | then | |
196 | + | func ai (ag,ah) = if ((ah >= ad)) | |
197 | + | then ag | |
202 | 198 | else throw("List size exceeds 5") | |
203 | 199 | ||
204 | - | | |
200 | + | ai(af(af(af(af(af(ae, 0), 1), 2), 3), 4), 5) | |
205 | 201 | } | |
206 | 202 | ||
207 | 203 | ||
208 | - | func | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | then c((("Address: " + | |
213 | - | else if (( | |
214 | - | then c(( | |
204 | + | func ap (aq,Z,ar,as) = { | |
205 | + | let R = K(Z, aq) | |
206 | + | let at = P(Z, aq) | |
207 | + | let au = if (!(U(aq))) | |
208 | + | then c((("Address: " + aq) + " not in Admin list")) | |
209 | + | else if ((at == 1)) | |
210 | + | then c((R + " you already voted")) | |
215 | 211 | else unit | |
216 | - | if (( | |
212 | + | if ((au == au)) | |
217 | 213 | then { | |
218 | - | let | |
219 | - | if ((( | |
214 | + | let al = ak(Z) | |
215 | + | if (((al + 1) >= ar)) | |
220 | 216 | then { | |
221 | - | let | |
222 | - | ( | |
217 | + | let av = ao(Z) | |
218 | + | (av ++ as) | |
223 | 219 | } | |
224 | - | else [IntegerEntry( | |
220 | + | else [IntegerEntry(R, 1)] | |
225 | 221 | } | |
226 | 222 | else throw("Strict value is not equal to itself.") | |
227 | 223 | } | |
228 | 224 | ||
229 | 225 | ||
230 | - | func | |
231 | - | let | |
232 | - | StringEntry(q | |
226 | + | func aw (q,ax,ay) = { | |
227 | + | let az = makeString(["%d%d%d%d", toString(n), toString(ax), toString(o), toString(ay)], b) | |
228 | + | StringEntry(p(q), az) | |
233 | 229 | } | |
234 | 230 | ||
235 | 231 | ||
236 | - | func | |
237 | - | let | |
238 | - | let | |
239 | - | if ($isInstanceOf( | |
232 | + | func aA (q) = { | |
233 | + | let aB = getString(this, p(q)) | |
234 | + | let D = aB | |
235 | + | if ($isInstanceOf(D, "String")) | |
240 | 236 | then { | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | if (if (( | |
237 | + | let aC = D | |
238 | + | let aD = split(aC, b) | |
239 | + | let aE = parseIntValue(aD[1]) | |
240 | + | let aF = parseIntValue(aD[2]) | |
241 | + | let aG = parseIntValue(aD[3]) | |
242 | + | let aH = parseIntValue(aD[4]) | |
243 | + | if (if ((aG > height)) | |
248 | 244 | then true | |
249 | - | else ( | |
250 | - | then $Tuple2( | |
251 | - | else $Tuple2( | |
245 | + | else (l == -1)) | |
246 | + | then $Tuple2(aF, aH) | |
247 | + | else $Tuple2(aH, aH) | |
252 | 248 | } | |
253 | 249 | else $Tuple2(0, 0) | |
254 | 250 | } | |
255 | 251 | ||
256 | 252 | ||
257 | - | func | |
258 | - | let | |
259 | - | StringEntry(s | |
253 | + | func aI (q,s,aJ,aK) = { | |
254 | + | let az = makeString(["%d%d%d%d", toString(n), toString(aJ), toString(o), toString(aK)], b) | |
255 | + | StringEntry(r(s, q), az) | |
260 | 256 | } | |
261 | 257 | ||
262 | 258 | ||
263 | - | func | |
264 | - | let | |
265 | - | let | |
266 | - | if ($isInstanceOf( | |
259 | + | func aL (q,s) = { | |
260 | + | let aM = getString(this, r(s, q)) | |
261 | + | let D = aM | |
262 | + | if ($isInstanceOf(D, "String")) | |
267 | 263 | then { | |
268 | - | let | |
269 | - | let | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | if (if (( | |
264 | + | let aC = D | |
265 | + | let aD = split(aC, b) | |
266 | + | let aN = parseIntValue(aD[1]) | |
267 | + | let aJ = parseIntValue(aD[2]) | |
268 | + | let aO = parseIntValue(aD[3]) | |
269 | + | let aK = parseIntValue(aD[4]) | |
270 | + | if (if ((aO > height)) | |
275 | 271 | then true | |
276 | - | else ( | |
277 | - | then $Tuple2( | |
278 | - | else $Tuple2( | |
272 | + | else (l == -1)) | |
273 | + | then $Tuple2(aJ, aK) | |
274 | + | else $Tuple2(aK, aK) | |
279 | 275 | } | |
280 | 276 | else $Tuple2(0, 0) | |
281 | 277 | } | |
282 | 278 | ||
283 | 279 | ||
284 | - | func | |
285 | - | let | |
286 | - | StringEntry( | |
280 | + | func aP (s,aQ,aR) = { | |
281 | + | let az = makeString(["%d%d%d%d", toString(n), toString(aQ), toString(o), toString(aR)], b) | |
282 | + | StringEntry(t(s), az) | |
287 | 283 | } | |
288 | 284 | ||
289 | 285 | ||
290 | - | func | |
291 | - | let | |
292 | - | let | |
293 | - | if ($isInstanceOf( | |
286 | + | func aS (s) = { | |
287 | + | let aT = getString(this, t(s)) | |
288 | + | let D = aT | |
289 | + | if ($isInstanceOf(D, "String")) | |
294 | 290 | then { | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | let | |
301 | - | if (if (( | |
291 | + | let aC = D | |
292 | + | let aD = split(aC, b) | |
293 | + | let aU = parseIntValue(aD[1]) | |
294 | + | let aQ = parseIntValue(aD[2]) | |
295 | + | let aV = parseIntValue(aD[3]) | |
296 | + | let aR = parseIntValue(aD[4]) | |
297 | + | if (if ((aV > height)) | |
302 | 298 | then true | |
303 | - | else ( | |
304 | - | then $Tuple2( | |
305 | - | else $Tuple2(( | |
299 | + | else (m == 0)) | |
300 | + | then $Tuple2(aQ, aR) | |
301 | + | else $Tuple2((aQ + aR), 0) | |
306 | 302 | } | |
307 | 303 | else $Tuple2(0, 0) | |
308 | 304 | } | |
309 | 305 | ||
310 | 306 | ||
311 | - | func | |
307 | + | func aW (s,aX) = IntegerEntry(u(s), aX) | |
312 | 308 | ||
313 | 309 | ||
314 | - | func | |
310 | + | func aY (s) = valueOrElse(getInteger(this, u(s)), 0) | |
315 | 311 | ||
316 | 312 | ||
317 | - | func | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
313 | + | func aZ (q,s,ba) = { | |
314 | + | let bb = aA(q) | |
315 | + | let aF = bb._1 | |
316 | + | let aH = bb._2 | |
317 | + | let bc = aL(q, s) | |
318 | + | let aJ = bc._1 | |
319 | + | let aK = bc._2 | |
320 | + | let bd = [if (!(A)) | |
325 | 321 | then true | |
326 | - | else c("contract is temporary stopped"), if ( | |
322 | + | else c("contract is temporary stopped"), if ((ba > 0)) | |
327 | 323 | then true | |
328 | - | else c("unstake | |
324 | + | else c("unstake amount should be greater than 0"), if ((aK >= ba)) | |
329 | 325 | then true | |
330 | - | else c("unstake amount should be | |
326 | + | else c("unstake amount should be less or equal user staked amount"), if ((aH >= ba)) | |
331 | 327 | then true | |
332 | - | else c("unstake amount should be less or equal | |
328 | + | else c("unstake amount should be less or equal node staked amount"), if (B(q)) | |
333 | 329 | then true | |
334 | - | else c(" | |
330 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
335 | 331 | then true | |
336 | - | else c(makeString(["node address is not valid:", r], " ")), if (D(t)) | |
337 | - | then true | |
338 | - | else c(makeString(["user address is not valid:", t], " "))] | |
339 | - | if ((bf == bf)) | |
332 | + | else c(makeString(["user address is not valid:", s], " "))] | |
333 | + | if ((bd == bd)) | |
340 | 334 | then { | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | [ | |
335 | + | let be = (aH - ba) | |
336 | + | let bf = (aK - ba) | |
337 | + | let bg = aS(s) | |
338 | + | let aQ = bg._1 | |
339 | + | let aR = bg._2 | |
340 | + | let bh = (aR + ba) | |
341 | + | let aX = aY(s) | |
342 | + | let bi = (aX - ba) | |
343 | + | [aw(q, aF, be), aI(q, s, aJ, bf), aP(s, aQ, bh), aW(s, bi), IntegerEntry(v(q), be), IntegerEntry(x(q, s), bf)] | |
350 | 344 | } | |
351 | 345 | else throw("Strict value is not equal to itself.") | |
352 | 346 | } | |
353 | 347 | ||
354 | 348 | ||
355 | - | func | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
349 | + | func bj (s,bk) = { | |
350 | + | let bl = aS(s) | |
351 | + | let aQ = bl._1 | |
352 | + | let aR = bl._2 | |
353 | + | let bd = [if (!(A)) | |
360 | 354 | then true | |
361 | - | else c("contract is temporary stopped"), if ( | |
355 | + | else c("contract is temporary stopped"), if ((bk > 0)) | |
362 | 356 | then true | |
363 | - | else c("claim | |
357 | + | else c("claim amount should be greater than 0"), if ((aQ >= bk)) | |
364 | 358 | then true | |
365 | - | else c("claim amount should be | |
359 | + | else c("claim amount should be less or equal unlocked amount"), if (B(s)) | |
366 | 360 | then true | |
367 | - | else c("claim amount should be less or equal unlocked amount"), if (D(t)) | |
368 | - | then true | |
369 | - | else c(makeString(["user address is not valid:", t], " "))] | |
370 | - | if ((bf == bf)) | |
361 | + | else c(makeString(["user address is not valid:", s], " "))] | |
362 | + | if ((bd == bd)) | |
371 | 363 | then { | |
372 | - | let | |
373 | - | [ | |
364 | + | let bm = (aQ - bk) | |
365 | + | [aP(s, bm, aR), ScriptTransfer(addressFromStringValue(s), bk, z)] | |
374 | 366 | } | |
375 | 367 | else throw("Strict value is not equal to itself.") | |
376 | 368 | } | |
377 | 369 | ||
378 | 370 | ||
379 | - | func | |
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
371 | + | func bn (q,s,bo,bp) = { | |
372 | + | let bq = aS(s) | |
373 | + | let aQ = bq._1 | |
374 | + | let aR = bq._2 | |
375 | + | let br = if ((size(bp.payments) == 0)) | |
384 | 376 | then 0 | |
385 | - | else | |
386 | - | let | |
387 | - | let | |
377 | + | else bp.payments[0].amount | |
378 | + | let bs = ((aR + aQ) + br) | |
379 | + | let bd = [if (!(A)) | |
388 | 380 | then true | |
389 | - | else c("contract is temporary stopped"), if ((1 >= size( | |
381 | + | else c("contract is temporary stopped"), if ((1 >= size(bp.payments))) | |
390 | 382 | then true | |
391 | - | else c("maximum 1 payment"), if (if ((size( | |
383 | + | else c("maximum 1 payment"), if (if ((size(bp.payments) == 0)) | |
392 | 384 | then true | |
393 | - | else ( | |
385 | + | else (bp.payments[0].assetId == z)) | |
394 | 386 | then true | |
395 | - | else c(makeString(["payment assetId should be:", | |
387 | + | else c(makeString(["payment assetId should be:", y], " ")), if ((bo > 0)) | |
396 | 388 | then true | |
397 | - | else c("amount should be greater than 0"), if (( | |
389 | + | else c("amount should be greater than 0"), if ((bs >= bo)) | |
398 | 390 | then true | |
399 | - | else c("amount should be less or equal (payment + available) amount"), if (( | |
391 | + | else c("amount should be less or equal (payment + available) amount"), if ((bo >= br)) | |
400 | 392 | then true | |
401 | - | else throw("amount should be greater or equal payment amount"), if ( | |
393 | + | else throw("amount should be greater or equal payment amount"), if (B(q)) | |
402 | 394 | then true | |
403 | - | else c(makeString(["node address is not valid:", | |
395 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
404 | 396 | then true | |
405 | - | else c(makeString(["user address is not valid:", | |
406 | - | if (( | |
397 | + | else c(makeString(["user address is not valid:", s], " "))] | |
398 | + | if ((bd == bd)) | |
407 | 399 | then { | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | let | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
416 | - | let | |
417 | - | let | |
418 | - | let | |
419 | - | let | |
420 | - | let | |
421 | - | [ | |
400 | + | let bt = aA(q) | |
401 | + | let aF = bt._1 | |
402 | + | let aH = bt._2 | |
403 | + | let be = (aH + bo) | |
404 | + | let bu = aL(q, s) | |
405 | + | let aJ = bu._1 | |
406 | + | let aK = bu._2 | |
407 | + | let bf = (aK + bo) | |
408 | + | let bv = (bo - br) | |
409 | + | let bh = max([0, (aR - bv)]) | |
410 | + | let bm = min([aQ, (aQ + (aR - bv))]) | |
411 | + | let aX = aY(s) | |
412 | + | let bi = (aX + bo) | |
413 | + | [aw(q, aF, be), aI(q, s, aJ, bf), aP(s, bm, bh), aW(s, bi), IntegerEntry(v(q), be), IntegerEntry(x(q, s), bf)] | |
422 | 414 | } | |
423 | 415 | else throw("Strict value is not equal to itself.") | |
424 | 416 | } | |
425 | 417 | ||
426 | 418 | ||
427 | - | func | |
428 | - | let | |
419 | + | func bw (q,s,bp) = { | |
420 | + | let bd = [if ((size(bp.payments) == 1)) | |
429 | 421 | then true | |
430 | 422 | else c("payment size should be exactly 1")] | |
431 | - | if (( | |
432 | - | then | |
423 | + | if ((bd == bd)) | |
424 | + | then bn(q, s, bp.payments[0].amount, bp) | |
433 | 425 | else throw("Strict value is not equal to itself.") | |
434 | 426 | } | |
435 | 427 | ||
436 | 428 | ||
437 | - | func | |
438 | - | let | |
429 | + | func bx (by) = { | |
430 | + | let bz = [if ((by > 0)) | |
439 | 431 | then true | |
440 | 432 | else c("period length should be greater than 0")] | |
441 | - | if (( | |
442 | - | then if (( | |
443 | - | then [IntegerEntry( | |
444 | - | else [IntegerEntry( | |
433 | + | if ((bz == bz)) | |
434 | + | then if ((l == -1)) | |
435 | + | then [IntegerEntry(i, by), IntegerEntry(h, height)] | |
436 | + | else [IntegerEntry(g, (m + 1)), IntegerEntry(h, o), IntegerEntry(i, by)] | |
445 | 437 | else throw("Strict value is not equal to itself.") | |
446 | 438 | } | |
447 | 439 | ||
448 | 440 | ||
449 | - | @Callable( | |
450 | - | func setNewPeriodLength ( | |
451 | - | let | |
441 | + | @Callable(bp) | |
442 | + | func setNewPeriodLength (by) = { | |
443 | + | let bd = [if (U(toString(bp.caller))) | |
452 | 444 | then true | |
453 | 445 | else c("caller is not in adminList")] | |
454 | - | if (( | |
455 | - | then | |
446 | + | if ((bd == bd)) | |
447 | + | then bx(by) | |
456 | 448 | else throw("Strict value is not equal to itself.") | |
457 | 449 | } | |
458 | 450 | ||
459 | 451 | ||
460 | 452 | ||
461 | - | @Callable( | |
462 | - | func setForceStopFlag ( | |
463 | - | let | |
453 | + | @Callable(bp) | |
454 | + | func setForceStopFlag (bA) = { | |
455 | + | let bz = [if (U(toString(bp.caller))) | |
464 | 456 | then true | |
465 | 457 | else c("caller is not in adminList")] | |
466 | - | if (( | |
467 | - | then [BooleanEntry(f, | |
458 | + | if ((bz == bz)) | |
459 | + | then [BooleanEntry(f, bA)] | |
468 | 460 | else throw("Strict value is not equal to itself.") | |
469 | 461 | } | |
470 | 462 | ||
471 | 463 | ||
472 | 464 | ||
473 | - | @Callable(br) | |
474 | - | func setForceOutStopFlag (bC) = { | |
475 | - | let bB = [if (W(toString(br.caller))) | |
465 | + | @Callable(bp) | |
466 | + | func getNodeDataREADONLY (q) = { | |
467 | + | let bB = aA(q) | |
468 | + | let bC = bB._1 | |
469 | + | let ay = bB._2 | |
470 | + | $Tuple2(nil, $Tuple5(n, bC, o, ay, height)) | |
471 | + | } | |
472 | + | ||
473 | + | ||
474 | + | ||
475 | + | @Callable(bp) | |
476 | + | func getUserLeasingDataREADONLY (q,s) = { | |
477 | + | let bD = aL(q, s) | |
478 | + | let bC = bD._1 | |
479 | + | let ay = bD._2 | |
480 | + | $Tuple2(nil, $Tuple5(n, bC, o, ay, height)) | |
481 | + | } | |
482 | + | ||
483 | + | ||
484 | + | ||
485 | + | @Callable(bp) | |
486 | + | func getUserDataREADONLY (s) = { | |
487 | + | let bE = aS(s) | |
488 | + | let aQ = bE._1 | |
489 | + | let aR = bE._2 | |
490 | + | let aX = aY(s) | |
491 | + | $Tuple2(nil, $Tuple6(n, aQ, o, aR, aX, height)) | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | ||
496 | + | @Callable(bp) | |
497 | + | func leaseByAddress (q,s) = bw(q, s, bp) | |
498 | + | ||
499 | + | ||
500 | + | ||
501 | + | @Callable(bp) | |
502 | + | func lease (q) = { | |
503 | + | let s = toString(bp.caller) | |
504 | + | bw(q, s, bp) | |
505 | + | } | |
506 | + | ||
507 | + | ||
508 | + | ||
509 | + | @Callable(bp) | |
510 | + | func leaseFromLocked (q,bF) = { | |
511 | + | let s = toString(bp.caller) | |
512 | + | bn(q, s, bF, bp) | |
513 | + | } | |
514 | + | ||
515 | + | ||
516 | + | ||
517 | + | @Callable(bp) | |
518 | + | func cancelLease (q,bF) = { | |
519 | + | let s = toString(bp.caller) | |
520 | + | aZ(q, s, bF) | |
521 | + | } | |
522 | + | ||
523 | + | ||
524 | + | ||
525 | + | @Callable(bp) | |
526 | + | func claim (bF) = { | |
527 | + | let s = toString(bp.caller) | |
528 | + | bj(s, bF) | |
529 | + | } | |
530 | + | ||
531 | + | ||
532 | + | ||
533 | + | @Callable(bp) | |
534 | + | func claimAll () = { | |
535 | + | let s = toString(bp.caller) | |
536 | + | let bG = aS(s) | |
537 | + | let aQ = bG._1 | |
538 | + | let aR = bG._2 | |
539 | + | let bd = [if ((aQ > 0)) | |
476 | 540 | then true | |
477 | - | else c(" | |
478 | - | if (( | |
479 | - | then | |
541 | + | else c("nothing to claim")] | |
542 | + | if ((bd == bd)) | |
543 | + | then bj(s, aQ) | |
480 | 544 | else throw("Strict value is not equal to itself.") | |
481 | 545 | } | |
482 | 546 | ||
483 | 547 | ||
484 | 548 | ||
485 | - | @Callable(br) | |
486 | - | func getNodeDataREADONLY (r) = { | |
487 | - | let bD = aC(r) | |
488 | - | let bE = bD._1 | |
489 | - | let aA = bD._2 | |
490 | - | $Tuple2(nil, $Tuple5(o, bE, p, aA, height)) | |
491 | - | } | |
492 | - | ||
493 | - | ||
494 | - | ||
495 | - | @Callable(br) | |
496 | - | func getUserLeasingDataREADONLY (r,t) = { | |
497 | - | let bF = aN(r, t) | |
498 | - | let bE = bF._1 | |
499 | - | let aA = bF._2 | |
500 | - | $Tuple2(nil, $Tuple5(o, bE, p, aA, height)) | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | ||
505 | - | @Callable(br) | |
506 | - | func getUserDataREADONLY (t) = { | |
507 | - | let bG = aU(t) | |
508 | - | let aS = bG._1 | |
509 | - | let aT = bG._2 | |
510 | - | let aZ = ba(t) | |
511 | - | $Tuple2(nil, $Tuple6(o, aS, p, aT, aZ, height)) | |
512 | - | } | |
513 | - | ||
514 | - | ||
515 | - | ||
516 | - | @Callable(br) | |
517 | - | func leaseByAddress (r,t) = by(r, t, br) | |
518 | - | ||
519 | - | ||
520 | - | ||
521 | - | @Callable(br) | |
522 | - | func lease (r) = { | |
523 | - | let t = toString(br.caller) | |
524 | - | by(r, t, br) | |
525 | - | } | |
526 | - | ||
527 | - | ||
528 | - | ||
529 | - | @Callable(br) | |
530 | - | func leaseFromLocked (r,bH) = { | |
531 | - | let t = toString(br.caller) | |
532 | - | bp(r, t, bH, br) | |
533 | - | } | |
534 | - | ||
535 | - | ||
536 | - | ||
537 | - | @Callable(br) | |
538 | - | func cancelLease (r,bH) = { | |
539 | - | let t = toString(br.caller) | |
540 | - | bb(r, t, bH) | |
541 | - | } | |
542 | - | ||
543 | - | ||
544 | - | ||
545 | - | @Callable(br) | |
546 | - | func claim (bH) = { | |
547 | - | let t = toString(br.caller) | |
548 | - | bl(t, bH) | |
549 | - | } | |
550 | - | ||
551 | - | ||
552 | - | ||
553 | - | @Callable(br) | |
554 | - | func claimAll () = { | |
555 | - | let t = toString(br.caller) | |
556 | - | let bI = aU(t) | |
557 | - | let aS = bI._1 | |
558 | - | let aT = bI._2 | |
559 | - | let bf = [if ((aS > 0)) | |
549 | + | @Callable(bp) | |
550 | + | func voteForTxId (J) = { | |
551 | + | let aq = toBase58String(bp.caller.bytes) | |
552 | + | let Z = I(J) | |
553 | + | let X = [StringEntry(O(), J)] | |
554 | + | let bH = getString(this, O()) | |
555 | + | let au = [if ((size(fromBase58String(J)) == H)) | |
560 | 556 | then true | |
561 | - | else c("nothing to claim")] | |
562 | - | if ((bf == bf)) | |
563 | - | then bl(t, aS) | |
557 | + | else c((J + " is not valid txId")), if (if ((bH == unit)) | |
558 | + | then true | |
559 | + | else (value(bH) != J)) | |
560 | + | then true | |
561 | + | else c((J + " is already allowed"))] | |
562 | + | if ((au == au)) | |
563 | + | then ap(aq, Z, G, X) | |
564 | 564 | else throw("Strict value is not equal to itself.") | |
565 | 565 | } | |
566 | 566 | ||
567 | 567 | ||
568 | - | ||
569 | - | @Callable(br) | |
570 | - | func voteForTxId (L) = { | |
571 | - | let as = toBase58String(br.caller.bytes) | |
572 | - | let ab = K(L) | |
573 | - | let Z = [StringEntry(Q(), L)] | |
574 | - | let bJ = getString(this, Q()) | |
575 | - | let aw = [if ((size(fromBase58String(L)) == J)) | |
568 | + | @Verifier(bI) | |
569 | + | func bJ () = { | |
570 | + | let bK = (bI.id == fromBase58String(valueOrElse(getString(this, O()), ""))) | |
571 | + | let bL = if ((size(S()) >= G)) | |
572 | + | then false | |
573 | + | else sigVerify(bI.bodyBytes, bI.proofs[0], bI.senderPublicKey) | |
574 | + | if (bK) | |
576 | 575 | then true | |
577 | - | else c((L + " is not valid txId")), if (if ((bJ == unit)) | |
578 | - | then true | |
579 | - | else (value(bJ) != L)) | |
580 | - | then true | |
581 | - | else c((L + " is already allowed"))] | |
582 | - | if ((aw == aw)) | |
583 | - | then ar(as, ab, I, Z) | |
584 | - | else throw("Strict value is not equal to itself.") | |
585 | - | } | |
586 | - | ||
587 | - | ||
588 | - | @Verifier(bK) | |
589 | - | func bL () = { | |
590 | - | let bM = (bK.id == fromBase58String(valueOrElse(getString(this, Q()), ""))) | |
591 | - | let bN = if ((size(U()) >= I)) | |
592 | - | then false | |
593 | - | else sigVerify(bK.bodyBytes, bK.proofs[0], bK.senderPublicKey) | |
594 | - | if (bM) | |
595 | - | then true | |
596 | - | else bN | |
576 | + | else bL | |
597 | 577 | } | |
598 | 578 |
github/deemru/w8io/169f3d6 299.23 ms ◑