tx · 7PtKSiaQ2zQvqbfNPJT2B3oDv3uaR76rG3B7NL1CZxRe 3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw: -0.04000000 Waves 2023.02.13 15:09 [3513423] smart account 3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw > SELF 0.00000000 Waves
{ "type": 13, "id": "7PtKSiaQ2zQvqbfNPJT2B3oDv3uaR76rG3B7NL1CZxRe", "fee": 4000000, "feeAssetId": null, "timestamp": 1676289945784, "version": 2, "chainId": 87, "sender": "3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw", "senderPublicKey": "B3jG1KiAb24bgwe28D9JKKkg9mtpiGTeEAYmQPrtHwQQ", "proofs": [ "", "5YaSYizL5HkFMb6TFSa6Ji4MKsVi1PBd11WHs57j4MGKbnqBCjGAPUCEPMHFkPukSLUYantCwAvcBL3eVi5AfvDM", "4jbL5ZPoztRhozUvrectUkf3AmoWidgeiimnLxuMueiMpLGBsM73BQZu5Atj2MuUiYxQ9ucfh1deuVGC7asP914s" ], "script": "base64:BgJiCAISAwoBCBIDCgEIEgMKAQgSBAoCCAESBQoDAggBEgUKAwgBARIECgIICBIECgIICBIECgIIARIFCgMCCAESAwoBCBIECgIIAhIDCgEIEgMKARgSAwoBGBIECgIICBIAEgBgAAdrQWN0aXZlAgZhY3RpdmUAC2tBY3RpdmVHbG9iAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAPa0RlcHJlY2F0ZWRQb29sAgtkZXByZWNhdGVkXwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkABtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCHl9wcmV2aW91c19wb29sX2ZyYWN0aW9uX3Jld2FyZAATa0hlaWdodFBvb2xGcmFjdGlvbgIaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAE2tSZXdhcmRVcGRhdGVIZWlnaHQCFHJld2FyZF91cGRhdGVfaGVpZ2h0ABZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAhRfc2hhcmVfdG9rZW5zX2xvY2tlZAAWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAIVX3NoYXJlX3Rva2Vuc19ibG9ja2VkABprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQIaX3NoYXJlX3Rva2Vuc19ibG9ja2VkX3R5cGUAHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQCHF9zaGFyZV90b2tlbnNfYmxvY2tlZF9oZWlnaHQAF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsAhVfc2hhcmVfdG9rZW5zX3ZpcnR1YWwAFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMCGl90b3RhbF9zaGFyZV90b2tlbnNfbG9ja2VkABNrU2hhcmVUb2tlbnNWaXJ0dWFsAhtfdG90YWxfc2hhcmVfdG9rZW5zX3ZpcnR1YWwAC2tMb2NrUGFyYW1zAgxfbG9ja19wYXJhbXMADWtMb2NrV2F2ZXNGZWUCDmxvY2tfd2F2ZXNfZmVlAA5rUG9vbEJvb3N0Q29lZgILX2Jvb3N0X2NvZWYAEWtGYXJtTGFzdEludGVyZXN0Ag5fbGFzdF9pbnRlcmVzdAAVa0Zhcm1Vc2VyTGFzdEludGVyZXN0Ag5fbGFzdF9pbnRlcmVzdAASa0Jvb3N0TGFzdEludGVyZXN0AhBfbGFzdF9pbnRlcmVzdF9iABZrQm9vc3RVc2VyTGFzdEludGVyZXN0AhJfbGFzdF9pbnRlcmVzdF91X2IAE2tMYXN0SW50ZXJlc3RIZWlnaHQCFV9sYXN0X2ludGVyZXN0X2hlaWdodAAHa1NXT1BpZAIHU1dPUF9pZAAOa0F2YWlsYWJsZVNXT1ACD19hdmFpbGFibGVfU1dPUAAQa0hhcnZlc3RQb29sVm90ZQIYX2hhcnZlc3RfcG9vbF92b3RlX2dTV09QAAlrUG9vbFZvdGUCEF9wb29sX3ZvdGVfZ1NXT1AADWtVc2VyUG9vbFZvdGUCEF91c2VyX3ZvdGVfZ1NXT1AACmtQb29sU3RydWMCC19wb29sX3N0cnVjAA5rVXNlclBvb2xTdHJ1YwIQX3VzZXJfcG9vbF9zdHJ1YwAUa0hhcnZlc3RVc2VyUG9vbFZvdGUCHV9oYXJ2ZXN0X3VzZXJfcG9vbF92b3RlX2dTV09QABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AhRmaXJzdF9oYXJ2ZXN0X2hlaWdodAANa1NoYXJlTGltaXRGSAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAATa1N0cmF0QkZhcm1JbnRlcmVzdAIWX3N0cmF0X2JfZmFybV9pbnRlcmVzdAANa0NwbW1Db250cmFjdAINY3BtbV9jb250cmFjdAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAAtrR292QWRkcmVzcwISZ292ZXJuYW5jZV9hZGRyZXNzABFrTFBGYXJtaW5nQWRkcmVzcwIKbHBfZmFybWluZwAUa0Zhcm1pbmdUcmVhc3VyZUFkZHICEGZhcm1pbmdfdHJlYXN1cmUABm9yYWNsZQkBB0FkZHJlc3MBARoBV4r/CGiaNbpAzWF08hI33qY38Po4zugeOAAOdG90YWxWb3RlU2hhcmUAgMivoCUAC3NjYWxlVmFsdWU4AIDC1y8AEmxvY2tCb29zdENvZWZTY2FsZQDoBwAQZGVmUG9vbEJvb3N0Q29lZgD0AwAOc3RhcnRFbWlzc2lvbkgA0Ni1AQAQc3dvcFllYXJFbWlzc2lvbgCAgOmDsd4WAA1ibG9ja3NQZXJZZWFyAPqPIAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEWFkbWluSW52b2tlUHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzABNmYXJtaW5nVHJlYXN1cmVBZGRyCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUUa0Zhcm1pbmdUcmVhc3VyZUFkZHIADGNwbW1Db250cmFjdAkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtDcG1tQ29udHJhY3QABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAEU1dPUAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrU1dPUGlkARZnZXRSZXdhcmRzUGVyQmxvY2tJbmZvAAQPZW1pc3Npb25QZXJpb2RzCQBpAgkAZQIFBmhlaWdodAUOc3RhcnRFbWlzc2lvbkgFDWJsb2Nrc1BlclllYXIKAQxjYWxjRW1pc3Npb24CA2FjYwFpBAskdDA0NzQ2NDc4MwUDYWNjBAtjdXJFbWlzc2lvbggFCyR0MDQ3NDY0NzgzAl8xBAxwcmV2RW1pc3Npb24IBQskdDA0NzQ2NDc4MwJfMgMJAGYCBQ9lbWlzc2lvblBlcmlvZHMFAWkJAJQKAgkAawMFC2N1ckVtaXNzaW9uAEsAZAULY3VyRW1pc3Npb24JAJQKAgULY3VyRW1pc3Npb24FDHByZXZFbWlzc2lvbgQLJHQwNDk0MTUxMDcKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFEHN3b3BZZWFyRW1pc3Npb24FEHN3b3BZZWFyRW1pc3Npb24KAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNhbGNFbWlzc2lvbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAtjdXJFbWlzc2lvbggFCyR0MDQ5NDE1MTA3Al8xBAxwcmV2RW1pc3Npb24IBQskdDA0OTQxNTEwNwJfMgkAlQoDCQBpAgULY3VyRW1pc3Npb24FDWJsb2Nrc1BlclllYXIJAGkCBQxwcmV2RW1pc3Npb24FDWJsb2Nrc1BlclllYXIJAGQCBQ5zdGFydEVtaXNzaW9uSAkAaAIFDWJsb2Nrc1BlclllYXIFD2VtaXNzaW9uUGVyaW9kcwEVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AAABFGdldEZIU2hhcmVMaW1pdFRva2VuAQRwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEcG9vbAUNa1NoYXJlTGltaXRGSAkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUNa1NoYXJlTGltaXRGSAESZ2V0VG90YWxTaGFyZVRva2VuAQRwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMBDGdldFBvb2xWb3RlZAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ12b3RpbmdBZGRyZXNzCQCsAgIFBHBvb2wFCWtQb29sVm90ZQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ12b3RpbmdBZGRyZXNzCQCsAgIFBHBvb2wFCmtQb29sU3RydWMCAAIBXwAAAAABEGdldFVzZXJQb29sVm90ZWQCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ12b3RpbmdBZGRyZXNzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQRwb29sBQ1rVXNlclBvb2xWb3RlCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFDmtVc2VyUG9vbFN0cnVjAgACAV8AAAAAAQ9nZXRTaGFyZUFzc2V0SWQBBHBvb2wJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBDmNhbGNTY2FsZVZhbHVlAghhc3NldElkMQhhc3NldElkMgQQYXNzZXRJZDFEZWNpbWFscwgJAQV2YWx1ZQEJAOwHAQUIYXNzZXRJZDEIZGVjaW1hbHMEEGFzc2V0SWQyRGVjaW1hbHMICQEFdmFsdWUBCQDsBwEFCGFzc2V0SWQyCGRlY2ltYWxzBAtzY2FsZURpZ2l0cwkAZAIJAGUCBRBhc3NldElkMkRlY2ltYWxzBRBhc3NldElkMURlY2ltYWxzAAgJAGwGAAoAAAULc2NhbGVEaWdpdHMAAAAABQRET1dOARF1c2VyQXZhaWxhYmxlU1dPUAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QAAABCnJld2FyZEluZm8BBHBvb2wECyR0MDY5MjI3MDM3CQEWZ2V0UmV3YXJkc1BlckJsb2NrSW5mbwAEGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50CAULJHQwNjkyMjcwMzcCXzEEG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwgFCyR0MDY5MjI3MDM3Al8yBBhsYXN0RW1pc3Npb25VcGRhdGVIZWlnaHQIBQskdDA2OTIyNzAzNwJfMwQZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAKwCAgkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQScmV3YXJkVXBkYXRlSGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUKZ292QWRkcmVzcwUTa1Jld2FyZFVwZGF0ZUhlaWdodAkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFE2tSZXdhcmRVcGRhdGVIZWlnaHQCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgUScmV3YXJkVXBkYXRlSGVpZ2h0BBpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzCQCsAgIJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBFyZXdhcmRQb29sQ3VycmVudAkAawMFGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BRlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50BQ50b3RhbFZvdGVTaGFyZQQScmV3YXJkUG9vbFByZXZpb3VzCQBrAwUadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQFGnJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzBQ50b3RhbFZvdGVTaGFyZQQVcmV3YXJkUG9vbFByZXZDdXJyZW50CQBrAwUbdG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzBRlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50BQ50b3RhbFZvdGVTaGFyZQQWcmV3YXJkUG9vbFByZXZQcmV2aW91cwkAawMFG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwUacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMFDnRvdGFsVm90ZVNoYXJlAwMJAGYCBRFyZXdhcmRQb29sQ3VycmVudAUadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQGCQBmAgUScmV3YXJkUG9vbFByZXZpb3VzBRt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAIBAmJyZXdhcmRQb29sQ3VycmVudCA+IHRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50IG9yIHJld2FyZFBvb2xQcmV2aW91cyA+IHRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkAmQoHBRFyZXdhcmRQb29sQ3VycmVudAUScmV3YXJkVXBkYXRlSGVpZ2h0BRJyZXdhcmRQb29sUHJldmlvdXMFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQFGGxhc3RFbWlzc2lvblVwZGF0ZUhlaWdodAUVcmV3YXJkUG9vbFByZXZDdXJyZW50BRZyZXdhcmRQb29sUHJldlByZXZpb3VzARNnZXRMYXN0SW50ZXJlc3RJbmZvAQRwb29sBAxmYXJtSW50ZXJlc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0CQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BA1ib29zdEludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0AAAEEmxhc3RJbnRlcmVzdEhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAlQoDBRJsYXN0SW50ZXJlc3RIZWlnaHQFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAELY2FsY0Zhcm1Sd2QCBHBvb2wOY3VyVG90YWxSZXdhcmQEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgkAawMFDmN1clRvdGFsUmV3YXJkBRJsb2NrQm9vc3RDb2VmU2NhbGUJAGQCBQ1wb29sQm9vc3RDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUBDGNhbGNCb29zdFJ3ZAIEcG9vbA5jdXJUb3RhbFJld2FyZAQNcG9vbEJvb3N0Q29lZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQm9vc3RDb2VmBRBkZWZQb29sQm9vc3RDb2VmCQBrAwUOY3VyVG90YWxSZXdhcmQFDXBvb2xCb29zdENvZWYJAGQCBQ1wb29sQm9vc3RDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUBDGNhbGNJbnRlcmVzdAwEcG9vbBJsYXN0SW50ZXJlc3RIZWlnaHQScmV3YXJkVXBkYXRlSGVpZ2h0FnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQMZmFybUludGVyZXN0DWJvb3N0SW50ZXJlc3QJcG9vbFZvdGVkFWN1cnJlbnRSZXdhcmRQZXJCbG9jaxBzaGFyZVRva2VuTG9ja2VkFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sKc2NhbGVWYWx1ZQh0b0hlaWdodAQNJHQwMTAwNTExMTIzNgMDAwkAZgIFEnJld2FyZFVwZGF0ZUhlaWdodAUIdG9IZWlnaHQJAAACBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHBgMJAGYCBQh0b0hlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0CQECIT0CBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHBAFyCQBoAgUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAZQIFCHRvSGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJUKAwUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0AwMDCQBmAgUIdG9IZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAAAIFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcJAGYCBRJsYXN0SW50ZXJlc3RIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAcEAXIJAGgCBRVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAGUCBQh0b0hlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0CQCVCgMFAXIFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAQJcndkQmZyVXBkCQBoAgUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAZQIFEnJld2FyZFVwZGF0ZUhlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0BAZmQmZyVXAJAGQCBQxmYXJtSW50ZXJlc3QJAGsDCQELY2FsY0Zhcm1Sd2QCBQRwb29sBQlyd2RCZnJVcGQFCnNjYWxlVmFsdWUFEHNoYXJlVG9rZW5Mb2NrZWQEBmJCZnJVcAkAZAIFDWJvb3N0SW50ZXJlc3QDCQBmAgUJcG9vbFZvdGVkAAAJAGsDCQEMY2FsY0Jvb3N0UndkAgUEcG9vbAUJcndkQmZyVXBkBQtzY2FsZVZhbHVlOAUJcG9vbFZvdGVkAAAEA3J3ZAkAaAIFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAZQIFCHRvSGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAJUKAwUDcndkBQZmQmZyVXAFBmJCZnJVcAQGcmV3YXJkCAUNJHQwMTAwNTExMTIzNgJfMQQOZmFybUludHJCZWZvcmUIBQ0kdDAxMDA1MTExMjM2Al8yBA9ib29zdEludHJCZWZvcmUIBQ0kdDAxMDA1MTExMjM2Al8zBA9uZXdGYXJtSW50ZXJlc3QJAGQCBQ5mYXJtSW50ckJlZm9yZQkAawMJAQtjYWxjRmFybVJ3ZAIFBHBvb2wFBnJld2FyZAUKc2NhbGVWYWx1ZQUQc2hhcmVUb2tlbkxvY2tlZAQQbmV3Qm9vc3RJbnRlcmVzdAkAZAIFD2Jvb3N0SW50ckJlZm9yZQMJAGYCBQlwb29sVm90ZWQAAAkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQZyZXdhcmQFC3NjYWxlVmFsdWU4BQlwb29sVm90ZWQAAAkAlAoCBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QBCWNsYWltQ2FsYwIEcG9vbAR1c2VyBApzY2FsZVZhbHVlCQEOY2FsY1NjYWxlVmFsdWUCBQRTV09QCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQJcG9vbFZvdGVkCQEMZ2V0UG9vbFZvdGVkAQUEcG9vbAQKdVBvb2xWb3RlZAkBEGdldFVzZXJQb29sVm90ZWQCBQRwb29sBQR1c2VyBApzaGFyZVRva2VuCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQpzaGFyZVRva2VuBBJzdHJhdEJGYXJtSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU3RyYXRCRmFybUludGVyZXN0AAAEDSR0MDEyMDc0MTIxNTUJARNnZXRMYXN0SW50ZXJlc3RJbmZvAQUEcG9vbAQSbGFzdEludGVyZXN0SGVpZ2h0CAUNJHQwMTIwNzQxMjE1NQJfMQQMZmFybUludGVyZXN0CAUNJHQwMTIwNzQxMjE1NQJfMgQNYm9vc3RJbnRlcmVzdAgFDSR0MDEyMDc0MTIxNTUCXzMEDSR0MDEyMTYwMTI0MTcJAQpyZXdhcmRJbmZvAQUEcG9vbAQVY3VycmVudFJld2FyZFBlckJsb2NrCAUNJHQwMTIxNjAxMjQxNwJfMQQScmV3YXJkVXBkYXRlSGVpZ2h0CAUNJHQwMTIxNjAxMjQxNwJfMgQWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFDSR0MDEyMTYwMTI0MTcCXzMEFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQ0kdDAxMjE2MDEyNDE3Al80BBRlbWlzc2lvblVwZGF0ZUhlaWdodAgFDSR0MDEyMTYwMTI0MTcCXzUEGXByZXZDdXJyZW50UmV3YXJkUGVyQmxvY2sIBQ0kdDAxMjE2MDEyNDE3Al82BBpwcmV2UHJldmlvdXNSZXdhcmRQZXJCbG9jawgFDSR0MDEyMTYwMTI0MTcCXzcEDXVGYXJtSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QEDnVCb29zdEludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QDAwkAZgIFEnN0cmF0QkZhcm1JbnRlcmVzdAUNdUZhcm1JbnRlcmVzdAkAZgIFCnVQb29sVm90ZWQAAAcAAAUNYm9vc3RJbnRlcmVzdAQSdVNoYXJlVG9rZW5zU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQQdVNoYXJlVG9rZW5zVmlydAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUSdVNoYXJlVG9rZW5zU3Rha2VkAwkAAAIFEXRvdGFsU2hhcmVWaXJ0dWFsAAAECnRvVHJlYXN1cnkDCQBmAgUUZW1pc3Npb25VcGRhdGVIZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAkAZAIJAGgCBRlwcmV2Q3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUUZW1pc3Npb25VcGRhdGVIZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAkAaAIFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAZQIFBmhlaWdodAUUZW1pc3Npb25VcGRhdGVIZWlnaHQJAGgCBRVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAGUCBQZoZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAkAlgoEBQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QAAAUKdG9UcmVhc3VyeQQNJHQwMTMzNzUxNDUxMgMJAGYCBRRlbWlzc2lvblVwZGF0ZUhlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0BA0kdDAxMzc4ODE0MzQ3CQEMY2FsY0ludGVyZXN0DAUEcG9vbAUSbGFzdEludGVyZXN0SGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAUJcG9vbFZvdGVkBRlwcmV2Q3VycmVudFJld2FyZFBlckJsb2NrBRF0b3RhbFNoYXJlVmlydHVhbAUacHJldlByZXZpb3VzUmV3YXJkUGVyQmxvY2sFCnNjYWxlVmFsdWUFFGVtaXNzaW9uVXBkYXRlSGVpZ2h0BBNwcmV2TmV3RmFybUludGVyZXN0CAUNJHQwMTM3ODgxNDM0NwJfMQQUcHJldk5ld0Jvb3N0SW50ZXJlc3QIBQ0kdDAxMzc4ODE0MzQ3Al8yCQCVCgMFE3ByZXZOZXdGYXJtSW50ZXJlc3QFFHByZXZOZXdCb29zdEludGVyZXN0BRRlbWlzc2lvblVwZGF0ZUhlaWdodAkAlQoDBQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QFEmxhc3RJbnRlcmVzdEhlaWdodAQQcHJldkZhcm1JbnRlcmVzdAgFDSR0MDEzMzc1MTQ1MTICXzEEEXByZXZCb29zdEludGVyZXN0CAUNJHQwMTMzNzUxNDUxMgJfMgQITElIZWlnaHQIBQ0kdDAxMzM3NTE0NTEyAl8zBA0kdDAxNDUyMTE0OTQ0CQEMY2FsY0ludGVyZXN0DAUEcG9vbAUITElIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAUQcHJldkZhcm1JbnRlcmVzdAURcHJldkJvb3N0SW50ZXJlc3QFCXBvb2xWb3RlZAUVY3VycmVudFJld2FyZFBlckJsb2NrBRF0b3RhbFNoYXJlVmlydHVhbAUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawUKc2NhbGVWYWx1ZQUGaGVpZ2h0BA9uZXdGYXJtSW50ZXJlc3QIBQ0kdDAxNDUyMTE0OTQ0Al8xBBBuZXdCb29zdEludGVyZXN0CAUNJHQwMTQ1MjExNDk0NAJfMgQHZmFybVJ3ZAkAawMFEHVTaGFyZVRva2Vuc1ZpcnQJAGUCBQ9uZXdGYXJtSW50ZXJlc3QFDXVGYXJtSW50ZXJlc3QFCnNjYWxlVmFsdWUEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgQLYm9vc3RSd2RNYXgJAGsDCQBrAwUQdVNoYXJlVG9rZW5zVmlydAkAZQIFD25ld0Zhcm1JbnRlcmVzdAkAlgMBCQDMCAIFDXVGYXJtSW50ZXJlc3QJAMwIAgUSc3RyYXRCRmFybUludGVyZXN0BQNuaWwFCnNjYWxlVmFsdWUFDXBvb2xCb29zdENvZWYFEmxvY2tCb29zdENvZWZTY2FsZQQLY3VyQm9vc3RSd2QJAGsDCQBlAgUQbmV3Qm9vc3RJbnRlcmVzdAUOdUJvb3N0SW50ZXJlc3QFCnVQb29sVm90ZWQFC3NjYWxlVmFsdWU4BAhib29zdFJ3ZAkAlwMBCQDMCAIFC2Jvb3N0UndkTWF4CQDMCAIFC2N1ckJvb3N0UndkBQNuaWwECnRvVHJlYXN1cnkJAGUCBQtib29zdFJ3ZE1heAUIYm9vc3RSd2QDCQBmAgAABQp0b1RyZWFzdXJ5CQACAQIOdG9UcmVhc3VyeSA8IDAJAJYKBAUPbmV3RmFybUludGVyZXN0BRBuZXdCb29zdEludGVyZXN0CQBkAgUHZmFybVJ3ZAUIYm9vc3RSd2QFCnRvVHJlYXN1cnkBG2F2YWlsYWJsZUNsYWltQ2FsY0FsbEJ5VXNlcgIFcG9vbHMEdXNlcgoBDWNhbGNBdmFpbGFibGUCA2FjYwRwb29sBA0kdDAxNTgxMzE1ODQyBQNhY2MECG5ld1Bvb2xzCAUNJHQwMTU4MTMxNTg0MgJfMQQHYW1vdW50cwgFDSR0MDE1ODEzMTU4NDICXzIEDSR0MDE1ODUxMTU5MDQJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAJmaQgFDSR0MDE1ODUxMTU5MDQCXzEEAmJpCAUNJHQwMTU4NTExNTkwNAJfMgQLY2xhaW1BbW91bnQIBQ0kdDAxNTg1MTE1OTA0Al8zBAJ0dAgFDSR0MDE1ODUxMTU5MDQCXzQEDWF2YWlsYWJsZUZ1bmQJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAlAoCCQDNCAIFCG5ld1Bvb2xzBQRwb29sCQDNCAIFB2Ftb3VudHMFDWF2YWlsYWJsZUZ1bmQKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1jYWxjQXZhaWxhYmxlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA2MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAEVY2FuTG9ja0luRmlyc3RIYXJ2ZXN0BQRwb29sBHVzZXIVdXNlclNoYXJlVG9rZW5zU3Rha2VkCXBtdEFtb3VudAhsb2NrVHlwZQMJAGYCCQEVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AQUEcG9vbAUGaGVpZ2h0BA90b3RhbFZvdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNdm90aW5nQWRkcmVzcwkArAICBQRwb29sBRBrSGFydmVzdFBvb2xWb3RlAAAEDnVzZXJWb3RlQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFFGtIYXJ2ZXN0VXNlclBvb2xWb3RlAAAEEUZIU2hhcmVUb2tlbkxpbWl0CQEUZ2V0RkhTaGFyZUxpbWl0VG9rZW4BCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBBVGSFNoYXJlVG9rZW5Vc2VyTGltaXQJAGUCCQBrAwURRkhTaGFyZVRva2VuTGltaXQFDnVzZXJWb3RlQW1vdW50BQ90b3RhbFZvdGVBbW91bnQFFXVzZXJTaGFyZVRva2Vuc1N0YWtlZAMJAGYCBQhsb2NrVHlwZQAACQACAQIyWW91IGNhbid0IGxvY2sgc2hhcmVUb2tlbnMgdGlsbCBmaXJzdCBoYXJ2ZXN0IGVuZC4DCQAAAgUOdXNlclZvdGVBbW91bnQAAAAAAwkAZwIFCXBtdEFtb3VudAUVRkhTaGFyZVRva2VuVXNlckxpbWl0CQBlAgUJcG10QW1vdW50BRVGSFNoYXJlVG9rZW5Vc2VyTGltaXQAAAAAAQ1nZXRMb2NrUGFyYW1zAQR0eXBlBApsb2NrUGFyYW1zCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKQDAQUEdHlwZQULa0xvY2tQYXJhbXMJAKwCAgIeVGhlcmUgYXJlIG5vIGtleSBmb3IgbG9jayB0eXBlCQCkAwEFBHR5cGUCAV8JAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY2tQYXJhbXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY2tQYXJhbXMAAQEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNQb29sQ2FsbAIBaQRwb29sAwMJAAACCQClCAEIBQFpBmNhbGxlcgUEcG9vbAYJAAACCAUBaQZjYWxsZXIFDGNwbW1Db250cmFjdAUEdW5pdAkAAgECIE9ubHkgcG9vbCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uARFnZXREZXByZWNhdGVkUG9vbAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUJAKwCAgUPa0RlcHJlY2F0ZWRQb29sBQRwb29sBwEQaXNEZXByZWNhdGVkUG9vbAEEcG9vbAMJAQEhAQkBEWdldERlcHJlY2F0ZWRQb29sAQUEcG9vbAUEdW5pdAkAAgECL1Bvb2wgaXMgZGVwcmVjYXRlZC4gT25seSB1bmxvY2sgYWN0aW9uIGFsbG93ZWQuAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BE2NhbGNMb2NrU2hhcmVUb2tlbnMEAWkGY2FsbGVyBHBvb2wIbG9ja1R5cGUEDHNoYXJlQXNzZXRJZAkBD2dldFNoYXJlQXNzZXRJZAEFBHBvb2wEBHVzZXIJAKUIAQUGY2FsbGVyBAp0b3RhbFNoYXJlCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQp0b3RhbFNoYXJlBBB1c2VyU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQPdXNlckxvY2tlZEhlaWd0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQAAAQQdXNlckxvY2tlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkAAAEEXVzZXJBbW91bnRWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRB1c2VyU3Rha2VkQW1vdW50BBR0b3RhbFVzZXJTaGFyZVRva2VucwkAZAIJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTg5NTMxOTAwNQkBDWdldExvY2tQYXJhbXMBBQhsb2NrVHlwZQQKbG9ja1BlcmlvZAgFDSR0MDE4OTUzMTkwMDUCXzEECGxvY2tDb2VmCAUNJHQwMTg5NTMxOTAwNQJfMgQMbG9ja1dhdmVzRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBAhtXcm9uZyBzaGFyZXRva2VuIGluIHBheW1lbnQDCQBnAgAACAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECJVBheW1lbnQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABQhsb2NrVHlwZQkAAgECFWxvY2tUeXBlIG11c3QgYmUgPj0gMAQVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQEVY2FuTG9ja0luRmlyc3RIYXJ2ZXN0BQUEcG9vbAUEdXNlcgUQdXNlclN0YWtlZEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGxvY2tUeXBlAwkAAAIFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZIBA0kdDAxOTQzMjIxMzY2AwkAAAIFCGxvY2tUeXBlAAAEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBlAgkAZAIFEXVzZXJBbW91bnRWaXJ0dWFsCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQJAGUCCQBkAgUQdXNlclN0YWtlZEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwJAGUCCQBkAgURdG90YWxTaGFyZVZpcnR1YWwICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsCQBlAgkAZAIFCnRvdGFsU2hhcmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgDAwkAAAIFD3VzZXJMb2NrZWRIZWlndAAAAwMJAGYCAAIJAJADAQgFAWkIcGF5bWVudHMGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQFBHVuaXQGCQBmAgUMbG9ja1dhdmVzRmVlCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAcJAAIBCQCsAgIJAKwCAgIrWW91IG5lZWQgdG8gcGF5IGFkZGl0aW9uYWwgd2F2ZXMgY29taXNzaW9uIAkApAMBBQxsb2NrV2F2ZXNGZWUCBVdBVkVTAwkAZgIFD3VzZXJMb2NrZWRIZWlndAkAZAIFBmhlaWdodAUKbG9ja1BlcmlvZAkAAgECT1lvdSBjYW5ub3QgbG9jayBzaGFyZXRva2VucyBmb3IgYSBwZXJpb2QgbGVzcyB0aGFuIHdoYXQgeW91IGhhdmUgYWxyZWFkeSBsb2NrZWQEE3VzZXJMb2NrZWRBbW91bnROZXcJAGQCBRB1c2VyTG9ja2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQSdXNlckxvY2tlZEhlaWd0TmV3CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kBBR1c2VyQW1vdW50VmlydHVhbE5ldwkAZAIJAGsDBRN1c2VyTG9ja2VkQW1vdW50TmV3BQhsb2NrQ29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlBRB1c2VyU3Rha2VkQW1vdW50CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQFE3VzZXJMb2NrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQFEnVzZXJMb2NrZWRIZWlndE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUFCGxvY2tUeXBlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZAIJAGUCBRF0b3RhbFNoYXJlVmlydHVhbAURdXNlckFtb3VudFZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3BQNuaWwJAGQCBQp0b3RhbFNoYXJlCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQLbG9ja0VudHJpZXMIBQ0kdDAxOTQzMjIxMzY2Al8xBA10b3RhbFNoYXJlTmV3CAUNJHQwMTk0MzIyMTM2NgJfMgMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQxzaGFyZUFzc2V0SWQFDXRvdGFsU2hhcmVOZXcJAAIBAjBCYWxhbmNlIG9mIHNoYXJlLXRva2VuIGlzIGxvd2VyIHRoYW4gdG90YWxBbW91bnQEDSR0MDIxNDkxMjE1NzMJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyMTQ5MTIxNTczAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMjE0OTEyMTU3MwJfMgQLY2xhaW1BbW91bnQIBQ0kdDAyMTQ5MTIxNTczAl8zBAp0b1RyZWFzdXJlCAUNJHQwMjE0OTEyMTU3MwJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAQEdXBscAMJAAACCQCdCAIJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgd2ZXJzaW9uAgUzLjAuMAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAhJ1cGRhdGVVc2VySW50ZXJlc3QJAMwIAgUEdXNlcgkAzAgCBQRwb29sCQDMCAIFFHRvdGFsVXNlclNoYXJlVG9rZW5zBQNuaWwFA25pbAAAAwkAAAIFBHVwbHAFBHVwbHAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMFDXRvdGFsU2hhcmVOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbAULbG9ja0VudHJpZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF2NhbGNXaXRoZHJhd1NoYXJlVG9rZW5zBAFpBmNhbGxlcgRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEA2ludgMJARFnZXREZXByZWNhdGVkUG9vbAEFBHBvb2wJAPwHBAUEdGhpcwIYdW5sb2NrVXNlckxvY2tEZXByZWNhdGVkCQDMCAIFBHBvb2wJAMwIAgkApQgBBQZjYWxsZXIFA25pbAUDbmlsAAADCQAAAgUDaW52BQNpbnYEDXNoYXJlVG9rZW5zSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAQEdXNlcgkApQgBBQZjYWxsZXIEDSR0MDIyODcwMjI5NTIJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyMjg3MDIyOTUyAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMjI4NzAyMjk1MgJfMgQLY2xhaW1BbW91bnQIBQ0kdDAyMjg3MDIyOTUyAl8zBAp0b1RyZWFzdXJlCAUNJHQwMjI4NzAyMjk1MgJfNAQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZQIFEHVzZXJTdGFrZWRBbW91bnQFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEEWF2YWlsYWJsZUZ1bmRzTmV3CQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQEEHRvdGFsU2hhcmVBbW91bnQJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFEHRvdGFsU2hhcmVBbW91bnQEE3RvdGFsU2hhcmVBbW91bnROZXcJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BBR0b3RhbFNoYXJlVmlydHVhbE5ldwkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BBR1c2VyQW1vdW50VmlydHVhbE5ldwkAZQIFEXVzZXJBbW91bnRWaXJ0dWFsBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AwkAZgIFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFEHVzZXJTdGFrZWRBbW91bnQJAAIBAixXaXRoZHJhdyBhbW91bnQgbW9yZSB0aGVuIHVzZXIgbG9ja2VkIGFtb3VudAMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQ1zaGFyZVRva2Vuc0lkBRB0b3RhbFNoYXJlQW1vdW50CQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50BAR1cGxwAwkAAAIJAJ0IAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3ZlcnNpb24CBTMuMC4wCQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCEnVwZGF0ZVVzZXJJbnRlcmVzdAkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQFA25pbAUDbmlsAAADCQAAAgUEdXBscAUEdXBscAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwUTdG90YWxTaGFyZUFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBRR0b3RhbFNoYXJlVmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFDXNoYXJlVG9rZW5zSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEJY2FsY0NsYWltAwFpBHBvb2wGY2FsbGVyBA1zaGFyZVRva2Vuc0lkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQV2YWx1ZQEJAKYIAQUEcG9vbAIOc2hhcmVfYXNzZXRfaWQEBHVzZXIJAKUIAQUGY2FsbGVyBBBzaGFyZVRva2VuTG9ja2VkCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQNJHQwMjU0NjMyNTU0NQkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDI1NDYzMjU1NDUCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAyNTQ2MzI1NTQ1Al8yBAtjbGFpbUFtb3VudAgFDSR0MDI1NDYzMjU1NDUCXzMECnRvVHJlYXN1cmUIBQ0kdDAyNTQ2MzI1NTQ1Al80BA1hdmFpbGFibGVGdW5kCQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQDCQBmAgkBDmFjY291bnRCYWxhbmNlAQUNc2hhcmVUb2tlbnNJZAUQc2hhcmVUb2tlbkxvY2tlZAkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAQGdVRyYW5zAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUNYXZhaWxhYmxlRnVuZAUEU1dPUAUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QAAAJAMwIAgkBB1JlaXNzdWUDBQRTV09QCQBkAgUKdG9UcmVhc3VyZQUNYXZhaWxhYmxlRnVuZAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsBQZ1VHJhbnMFDWF2YWlsYWJsZUZ1bmQBEnVubG9ja1VzZXJMb2NrQ2FsYwMBaQRwb29sBHVzZXIEEXRvdGFsU2hhcmVWaXJ0dWFsCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEE3VzZXJTdGFrZWRBbW91bnROZXcJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50BA0kdDAyNjk0ODI3MDMwCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMjY5NDgyNzAzMAJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDI2OTQ4MjcwMzACXzIEC2NsYWltQW1vdW50CAUNJHQwMjY5NDgyNzAzMAJfMwQKdG9UcmVhc3VyZQgFDSR0MDI2OTQ4MjcwMzACXzQEEWF2YWlsYWJsZUZ1bmRzTmV3CQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZAIJAGUCBRF0b3RhbFNoYXJlVmlydHVhbAURdXNlckFtb3VudFZpcnR1YWwFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwSAWkBBGluaXQBB2Vhcmx5TFADCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQdrU1dPUGlkCQACAQIYU1dPUCBhbHJlYWR5IGluaXRpYWxpemVkBAppbml0QW1vdW50AICA6YOx3hYECVNXT1Bpc3N1ZQkAwggFAgRTV09QAhNTV09QIHByb3RvY29sIHRva2VuBQppbml0QW1vdW50AAgGBAZTV09QaWQJALgIAQUJU1dPUGlzc3VlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQDCCAUCBFNXT1ACE1NXT1AgcHJvdG9jb2wgdG9rZW4FCmluaXRBbW91bnQACAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUHa1NXT1BpZAkA2AQBBQZTV09QaWQFA25pbAFpARRpbml0UG9vbFNoYXJlRmFybWluZwEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAFpARJ1cGRhdGVQb29sSW50ZXJlc3QBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCAUBaQZjYWxsZXIFCmdvdkFkZHJlc3MJAAIBAiZPbmx5IEdvdmVybmFuY2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQEdXNlcgkApQgBCQCnCAEFEWFkbWluSW52b2tlUHViS2V5BA0kdDAyOTE5NjI5MjcwCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMjkxOTYyOTI3MAJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDI5MTk2MjkyNzACXzIED2Jvb3N0TFBpbnRlcmVzdAgFDSR0MDI5MTk2MjkyNzACXzMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBaQEPbG9ja1NoYXJlVG9rZW5zAgRwb29sCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEQaXNEZXByZWNhdGVkUG9vbAEFBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJARNjYWxjTG9ja1NoYXJlVG9rZW5zBAUBaQgFAWkGY2FsbGVyBQRwb29sBQhsb2NrVHlwZQFpARdsb2NrU2hhcmVUb2tlbnNGcm9tUG9vbAMLY2FsbGVyQnl0ZXMEcG9vbAhsb2NrVHlwZQkBC3ZhbHVlT3JFbHNlAgkBEGlzRGVwcmVjYXRlZFBvb2wBBQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNQb29sQ2FsbAIFAWkFBHBvb2wJARNjYWxjTG9ja1NoYXJlVG9rZW5zBAUBaQkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwUEcG9vbAUIbG9ja1R5cGUBaQEVbG9ja1N0YWtlZFNoYXJlVG9rZW5zAwRwb29sCGxvY2tUeXBlCmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJARBpc0RlcHJlY2F0ZWRQb29sAQUEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQMc2hhcmVBc3NldElkCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECnRvdGFsU2hhcmUJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFCnRvdGFsU2hhcmUEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABA91c2VyTG9ja2VkSGVpZ3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEFHRvdGFsVXNlclNoYXJlVG9rZW5zCQBkAgUQdXNlclN0YWtlZEFtb3VudAUQdXNlckxvY2tlZEFtb3VudAQNJHQwMzA4OTkzMDk1MQkBDWdldExvY2tQYXJhbXMBBQhsb2NrVHlwZQQKbG9ja1BlcmlvZAgFDSR0MDMwODk5MzA5NTECXzEECGxvY2tDb2VmCAUNJHQwMzA4OTkzMDk1MQJfMgQMbG9ja1dhdmVzRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlAwkAZgIJARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBQRwb29sBQZoZWlnaHQJAAIBAjJZb3UgY2FuJ3QgbG9jayBzaGFyZVRva2VucyB0aWxsIGZpcnN0IGhhcnZlc3QgZW5kLgMJAGcCAAAFCGxvY2tUeXBlCQACAQIUbG9ja1R5cGUgbXVzdCBiZSA+IDADCQBmAgUKbG9ja0Ftb3VudAUQdXNlclN0YWtlZEFtb3VudAkAAgEJAKwCAgIZWW91IGNhbid0IGxvY2sgbW9yZSB0aGFuIAkApAMBBRB1c2VyU3Rha2VkQW1vdW50AwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDHNoYXJlQXNzZXRJZAUKdG90YWxTaGFyZQkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAADAwkAZgIAAQkAkAMBCAUBaQhwYXltZW50cwYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAYJAGYCBQxsb2NrV2F2ZXNGZWUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BwkAAgEJAKwCAgkArAICAitZb3UgbmVlZCB0byBwYXkgYWRkaXRpb25hbCB3YXZlcyBjb21pc3Npb24gCQCkAwEFDGxvY2tXYXZlc0ZlZQIFV0FWRVMDAwkAAAIFD3VzZXJMb2NrZWRIZWlndAAACQBnAgAABQpsb2NrQW1vdW50BwkAAgECIWxvY2tBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFCmxvY2tBbW91bnQJAAIBAhtsb2NrQW1vdW50IG11c3QgYmUgcG9zaXRpdmUDCQBmAgUPdXNlckxvY2tlZEhlaWd0CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kCQACAQJPWW91IGNhbm5vdCBsb2NrIHNoYXJldG9rZW5zIGZvciBhIHBlcmlvZCBsZXNzIHRoYW4gd2hhdCB5b3UgaGF2ZSBhbHJlYWR5IGxvY2tlZAQTdXNlckxvY2tlZEFtb3VudE5ldwkAZAIFEHVzZXJMb2NrZWRBbW91bnQFCmxvY2tBbW91bnQEE3VzZXJTdGFrZWRBbW91bnROZXcJAGUCBRB1c2VyU3Rha2VkQW1vdW50BQpsb2NrQW1vdW50BBJ1c2VyTG9ja2VkSGVpZ3ROZXcJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBkAgkAawMFE3VzZXJMb2NrZWRBbW91bnROZXcFCGxvY2tDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUFE3VzZXJTdGFrZWRBbW91bnROZXcEDSR0MDMyMjk3MzIzNzkJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAzMjI5NzMyMzc5Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMzIyOTczMjM3OQJfMgQLY2xhaW1BbW91bnQIBQ0kdDAzMjI5NzMyMzc5Al8zBAp0b1RyZWFzdXJlCAUNJHQwMzIyOTczMjM3OQJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAUTdXNlckxvY2tlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAUSdXNlckxvY2tlZEhlaWd0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQUIbG9ja1R5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsAWkBDnVubG9ja1VzZXJMb2NrAgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAED3VzZXJMb2NrZWRIZWlndAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgIRVGhlcmUgaXMgbm8gcG9vbCAFBHBvb2wCCSBvciB1c2VyIAUEdXNlcgIJd2l0aCBsb2NrAwkAZgIFD3VzZXJMb2NrZWRIZWlndAUGaGVpZ2h0CQACAQkArAICAiJZb3UgY2FuJ3QgdW5sb2NrIHNoYXJldG9rZW5zIHRpbGwgCQCkAwEFD3VzZXJMb2NrZWRIZWlndAkAzggCCQESdW5sb2NrVXNlckxvY2tDYWxjAwUBaQUEcG9vbAUEdXNlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUFBHVuaXQFA25pbAFpARh1bmxvY2tVc2VyTG9ja0RlcHJlY2F0ZWQCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpAwkBASEBCQERZ2V0RGVwcmVjYXRlZFBvb2wBBQRwb29sCQACAQIXUG9vbCBtdXN0IGJlIGRlcHJlY2F0ZWQDCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0CQDOCAIJARJ1bmxvY2tVc2VyTG9ja0NhbGMDBQFpBQRwb29sBQR1c2VyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa0xvY2tXYXZlc0ZlZQUEdW5pdAUDbmlsBQNuaWwBaQETd2l0aGRyYXdTaGFyZVRva2VucwIEcG9vbBlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQEXY2FsY1dpdGhkcmF3U2hhcmVUb2tlbnMEBQFpCAUBaQZjYWxsZXIFBHBvb2wFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQBaQEbd2l0aGRyYXdTaGFyZVRva2Vuc0Zyb21Qb29sAwtjYWxsZXJCeXRlcwRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc1Bvb2xDYWxsAgUBaQUEcG9vbAkBF2NhbGNXaXRoZHJhd1NoYXJlVG9rZW5zBAUBaQkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwUEcG9vbAUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAFpAQVjbGFpbQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQBcgkBCWNhbGNDbGFpbQMFAWkFBHBvb2wIBQFpBmNhbGxlcgMJAAACCAUBcgJfMgAACQACAQIZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAUBcgFpAQ1jbGFpbUludGVybmFsAgRwb29sBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpCQEJY2FsY0NsYWltAwUBaQUEcG9vbAkBB0FkZHJlc3MBBQZjYWxsZXIBaQENY2xhaW1BbmRTdGFrZQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQLY2xhaW1BbW91bnQKAAFACQD8BwQFBHRoaXMCDWNsYWltSW50ZXJuYWwJAMwIAgUEcG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULY2xhaW1BbW91bnQFC2NsYWltQW1vdW50AwkAAAIFC2NsYWltQW1vdW50AAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QBApzdGFrZVRvR292CQD8BwQFCmdvdkFkZHJlc3MCE2xvY2tTV09QRnJvbUZhcm1pbmcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEU1dPUAULY2xhaW1BbW91bnQFA25pbAMJAAACBQpzdGFrZVRvR292BQpzdGFrZVRvR292BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY2xhaW1BbGwBBXBvb2xzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACgEIY2xhaW1JbnYCCmNsYWltVG90YWwEcG9vbAQLY2xhaW1BbW91bnQKAAFACQD8BwQFBHRoaXMCDWNsYWltSW50ZXJuYWwJAMwIAgUEcG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULY2xhaW1BbW91bnQFC2NsYWltQW1vdW50CQBkAgUKY2xhaW1Ub3RhbAULY2xhaW1BbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECmNsYWltVG90YWwKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGNsYWltSW52AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA2MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAMJAAACBQpjbGFpbVRvdGFsAAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKY2xhaW1Ub3RhbAUEU1dPUAUDbmlsAWkBEGNsYWltQWxsQW5kU3Rha2UBBXBvb2xzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACgEIY2xhaW1JbnYCCmNsYWltVG90YWwEcG9vbAQLY2xhaW1BbW91bnQKAAFACQD8BwQFBHRoaXMCDWNsYWltSW50ZXJuYWwJAMwIAgUEcG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULY2xhaW1BbW91bnQFC2NsYWltQW1vdW50CQBkAgUKY2xhaW1Ub3RhbAULY2xhaW1BbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECmNsYWltVG90YWwKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGNsYWltSW52AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA2MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAMJAAACBQpjbGFpbVRvdGFsAAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QBApzdGFrZVRvR292CQD8BwQFCmdvdkFkZHJlc3MCE2xvY2tTV09QRnJvbUZhcm1pbmcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEU1dPUAUKY2xhaW1Ub3RhbAUDbmlsAwkAAAIFCnN0YWtlVG9Hb3YFCnN0YWtlVG9Hb3YFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARd1cGRhdGVVc2VyQm9vc3RJbnRlcmVzdAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AggFAWkGY2FsbGVyBQ12b3RpbmdBZGRyZXNzCQACAQIjT25seSB2b2l0aW5nIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24EDSR0MDM3MTI4MzcyMTAJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAzNzEyODM3MjEwAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMzcxMjgzNzIxMAJfMgQLY2xhaW1BbW91bnQIBQ0kdDAzNzEyODM3MjEwAl8zBAp0b1RyZWFzdXJlCAUNJHQwMzcxMjgzNzIxMAJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwBaQEIc2h1dGRvd24ACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBBQZhY3RpdmUJAAIBCQCsAgICIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa0NhdXNlAhp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAkBB3N1c3BlbmQBAg9QYXVzZWQgYnkgYWRtaW4BaQEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwUGYWN0aXZlCQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwBAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACqdeVXg==", "height": 3513423, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4wFZR8eisJpTh8CmikypBA8VNo3Fr9sYaGs3U2eerd9u Next: AUQbLFpXQ616chpogKqx7ajwcUqfERKeujfpDDMRaVyU Diff:
Old | New | Differences | |
---|---|---|---|
5 | 5 | ||
6 | 6 | let b = "active_all_contracts" | |
7 | 7 | ||
8 | - | let c = " | |
8 | + | let c = "deprecated_" | |
9 | 9 | ||
10 | - | let d = "_ | |
10 | + | let d = "shutdown_cause" | |
11 | 11 | ||
12 | - | let e = "_ | |
12 | + | let e = "_current_pool_fraction_reward" | |
13 | 13 | ||
14 | - | let f = "_pool_reward | |
14 | + | let f = "_previous_pool_fraction_reward" | |
15 | 15 | ||
16 | - | let g = "reward_update_height" | |
16 | + | let g = "_pool_reward_update_height" | |
17 | 17 | ||
18 | - | let h = "_ | |
18 | + | let h = "reward_update_height" | |
19 | 19 | ||
20 | - | let i = "_share_tokens_ | |
20 | + | let i = "_share_tokens_locked" | |
21 | 21 | ||
22 | - | let j = "_share_tokens_blocked | |
22 | + | let j = "_share_tokens_blocked" | |
23 | 23 | ||
24 | - | let k = "_share_tokens_blocked_ | |
24 | + | let k = "_share_tokens_blocked_type" | |
25 | 25 | ||
26 | - | let l = "_share_tokens_ | |
26 | + | let l = "_share_tokens_blocked_height" | |
27 | 27 | ||
28 | - | let m = "_ | |
28 | + | let m = "_share_tokens_virtual" | |
29 | 29 | ||
30 | - | let n = "_total_share_tokens_ | |
30 | + | let n = "_total_share_tokens_locked" | |
31 | 31 | ||
32 | - | let o = "_ | |
32 | + | let o = "_total_share_tokens_virtual" | |
33 | 33 | ||
34 | - | let p = "lock_ | |
34 | + | let p = "_lock_params" | |
35 | 35 | ||
36 | - | let q = "_ | |
36 | + | let q = "lock_waves_fee" | |
37 | 37 | ||
38 | - | let r = "_ | |
38 | + | let r = "_boost_coef" | |
39 | 39 | ||
40 | 40 | let s = "_last_interest" | |
41 | 41 | ||
42 | - | let t = "_last_interest | |
42 | + | let t = "_last_interest" | |
43 | 43 | ||
44 | - | let u = "_last_interest_ | |
44 | + | let u = "_last_interest_b" | |
45 | 45 | ||
46 | - | let v = "_last_interest_ | |
46 | + | let v = "_last_interest_u_b" | |
47 | 47 | ||
48 | - | let w = " | |
48 | + | let w = "_last_interest_height" | |
49 | 49 | ||
50 | - | let x = "_ | |
50 | + | let x = "SWOP_id" | |
51 | 51 | ||
52 | - | let y = "_ | |
52 | + | let y = "_available_SWOP" | |
53 | 53 | ||
54 | - | let z = "_pool_vote_gSWOP" | |
54 | + | let z = "_harvest_pool_vote_gSWOP" | |
55 | 55 | ||
56 | - | let A = "_ | |
56 | + | let A = "_pool_vote_gSWOP" | |
57 | 57 | ||
58 | - | let B = "_ | |
58 | + | let B = "_user_vote_gSWOP" | |
59 | 59 | ||
60 | - | let C = "_ | |
60 | + | let C = "_pool_struc" | |
61 | 61 | ||
62 | - | let D = "_ | |
62 | + | let D = "_user_pool_struc" | |
63 | 63 | ||
64 | - | let E = " | |
64 | + | let E = "_harvest_user_pool_vote_gSWOP" | |
65 | 65 | ||
66 | - | let F = " | |
66 | + | let F = "first_harvest_height" | |
67 | 67 | ||
68 | - | let G = "_ | |
68 | + | let G = "share_limit_on_first_harvest" | |
69 | 69 | ||
70 | - | let H = " | |
70 | + | let H = "_strat_b_farm_interest" | |
71 | 71 | ||
72 | - | let I = " | |
72 | + | let I = "cpmm_contract" | |
73 | 73 | ||
74 | - | let J = "admin_pub_ | |
74 | + | let J = "admin_pub_1" | |
75 | 75 | ||
76 | - | let K = "admin_pub_ | |
76 | + | let K = "admin_pub_2" | |
77 | 77 | ||
78 | - | let L = "admin_ | |
78 | + | let L = "admin_pub_3" | |
79 | 79 | ||
80 | - | let M = " | |
80 | + | let M = "admin_invoke_pub" | |
81 | 81 | ||
82 | - | let N = " | |
82 | + | let N = "money_box_address" | |
83 | 83 | ||
84 | - | let O = " | |
84 | + | let O = "voting_address" | |
85 | 85 | ||
86 | - | let P = " | |
86 | + | let P = "governance_address" | |
87 | 87 | ||
88 | - | let Q = "farming | |
88 | + | let Q = "lp_farming" | |
89 | 89 | ||
90 | - | let R = | |
90 | + | let R = "farming_treasure" | |
91 | 91 | ||
92 | - | let S = | |
92 | + | let S = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom') | |
93 | 93 | ||
94 | - | let T = | |
94 | + | let T = 10000000000 | |
95 | 95 | ||
96 | - | let U = | |
96 | + | let U = 100000000 | |
97 | 97 | ||
98 | - | let V = | |
98 | + | let V = 1000 | |
99 | 99 | ||
100 | - | let W = | |
100 | + | let W = 500 | |
101 | 101 | ||
102 | - | let X = | |
102 | + | let X = 2976848 | |
103 | 103 | ||
104 | - | let Y = | |
104 | + | let Y = 100000000000000 | |
105 | 105 | ||
106 | - | func Z (aa) = { | |
107 | - | let ab = getString(R, aa) | |
108 | - | if ($isInstanceOf(ab, "String")) | |
106 | + | let Z = 526330 | |
107 | + | ||
108 | + | func aa (ab) = { | |
109 | + | let ac = getString(S, ab) | |
110 | + | if ($isInstanceOf(ac, "String")) | |
109 | 111 | then { | |
110 | - | let | |
111 | - | fromBase58String( | |
112 | + | let ad = ac | |
113 | + | fromBase58String(ad) | |
112 | 114 | } | |
113 | 115 | else { | |
114 | - | let | |
115 | - | throw(( | |
116 | + | let ae = ac | |
117 | + | throw((ab + "is empty")) | |
116 | 118 | } | |
117 | 119 | } | |
118 | 120 | ||
119 | 121 | ||
120 | - | let | |
122 | + | let af = aa(J) | |
121 | 123 | ||
122 | - | let | |
124 | + | let ag = aa(K) | |
123 | 125 | ||
124 | - | let | |
126 | + | let ah = aa(L) | |
125 | 127 | ||
126 | - | let | |
128 | + | let ai = Address(aa(N)) | |
127 | 129 | ||
128 | - | let | |
130 | + | let aj = Address(aa(O)) | |
129 | 131 | ||
130 | - | let | |
132 | + | let ak = Address(aa(P)) | |
131 | 133 | ||
132 | - | let | |
134 | + | let al = aa(M) | |
133 | 135 | ||
134 | - | let | |
136 | + | let am = Address(aa(Q)) | |
135 | 137 | ||
136 | - | let | |
138 | + | let an = Address(aa(R)) | |
137 | 139 | ||
138 | - | let | |
140 | + | let ao = Address(aa(I)) | |
139 | 141 | ||
140 | - | let | |
142 | + | let ap = getBooleanValue(this, a) | |
141 | 143 | ||
142 | - | let | |
144 | + | let aq = valueOrElse(getBoolean(S, b), true) | |
143 | 145 | ||
144 | - | let | |
146 | + | let ar = fromBase58String(getStringValue(this, x)) | |
145 | 147 | ||
146 | - | func | |
147 | - | let | |
148 | - | func | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | if (( | |
153 | - | then $Tuple2(fraction( | |
154 | - | else $Tuple2( | |
148 | + | func as () = { | |
149 | + | let at = ((height - X) / Z) | |
150 | + | func au (av,aw) = { | |
151 | + | let ax = av | |
152 | + | let ay = ax._1 | |
153 | + | let az = ax._2 | |
154 | + | if ((at > aw)) | |
155 | + | then $Tuple2(fraction(ay, 75, 100), ay) | |
156 | + | else $Tuple2(ay, az) | |
155 | 157 | } | |
156 | 158 | ||
157 | - | let | |
158 | - | let | |
159 | - | let | |
160 | - | let | |
161 | - | func | |
162 | - | then | |
163 | - | else | |
159 | + | let aA = { | |
160 | + | let aB = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] | |
161 | + | let aC = size(aB) | |
162 | + | let aD = $Tuple2(Y, Y) | |
163 | + | func aE (aF,aG) = if ((aG >= aC)) | |
164 | + | then aF | |
165 | + | else au(aF, aB[aG]) | |
164 | 166 | ||
165 | - | func | |
166 | - | then | |
167 | + | func aH (aF,aG) = if ((aG >= aC)) | |
168 | + | then aF | |
167 | 169 | else throw("List size exceeds 20") | |
168 | 170 | ||
169 | - | | |
171 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
170 | 172 | } | |
171 | - | let | |
172 | - | let | |
173 | - | $Tuple3(( | |
173 | + | let ay = aA._1 | |
174 | + | let az = aA._2 | |
175 | + | $Tuple3((ay / Z), (az / Z), (X + (Z * at))) | |
174 | 176 | } | |
175 | 177 | ||
176 | 178 | ||
177 | - | func | |
179 | + | func aI (aJ) = valueOrElse(getInteger(Address(fromBase58String(aJ)), F), 0) | |
178 | 180 | ||
179 | 181 | ||
180 | - | func | |
182 | + | func aK (aJ) = valueOrErrorMessage(getInteger(aJ, G), ("No data on the key: " + G)) | |
181 | 183 | ||
182 | 184 | ||
183 | - | func | |
185 | + | func aL (aJ) = valueOrErrorMessage(getInteger(this, (aJ + n)), (("No data on the key: " + aJ) + n)) | |
184 | 186 | ||
185 | 187 | ||
186 | - | func | |
188 | + | func aM (aJ) = valueOrElse(getInteger(aj, (aJ + A)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (aJ + C)), ""), "_")[0]), 0)) | |
187 | 189 | ||
188 | 190 | ||
189 | - | func | |
191 | + | func aN (aJ,aO) = valueOrElse(getInteger(aj, (((aO + "_") + aJ) + B)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (((aO + "_") + aJ) + D)), ""), "_")[0]), 0)) | |
190 | 192 | ||
191 | 193 | ||
192 | - | func | |
194 | + | func aP (aJ) = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
193 | 195 | ||
194 | 196 | ||
195 | - | func | |
196 | - | let | |
197 | - | if ($isInstanceOf( | |
197 | + | func aQ (aR) = { | |
198 | + | let ac = aR | |
199 | + | if ($isInstanceOf(ac, "ByteVector")) | |
198 | 200 | then { | |
199 | - | let | |
200 | - | assetBalance(this, | |
201 | + | let aS = ac | |
202 | + | assetBalance(this, aS) | |
201 | 203 | } | |
202 | - | else if ($isInstanceOf( | |
204 | + | else if ($isInstanceOf(ac, "Unit")) | |
203 | 205 | then { | |
204 | - | let | |
206 | + | let aT = ac | |
205 | 207 | wavesBalance(this).available | |
206 | 208 | } | |
207 | 209 | else throw("Match error") | |
208 | 210 | } | |
209 | 211 | ||
210 | 212 | ||
211 | - | func aT (aU,aV) = { | |
212 | - | let aW = value(assetInfo(aU)).decimals | |
213 | + | func aU (aV,aW) = { | |
213 | 214 | let aX = value(assetInfo(aV)).decimals | |
214 | - | let aY = ((aX - aW) + 8) | |
215 | - | pow(10, 0, aY, 0, 0, DOWN) | |
215 | + | let aY = value(assetInfo(aW)).decimals | |
216 | + | let aZ = ((aY - aX) + 8) | |
217 | + | pow(10, 0, aZ, 0, 0, DOWN) | |
216 | 218 | } | |
217 | 219 | ||
218 | 220 | ||
219 | - | func | |
221 | + | func ba (aJ,aO) = valueOrElse(getInteger(this, (((aJ + "_") + aO) + y)), 0) | |
220 | 222 | ||
221 | 223 | ||
222 | - | func | |
223 | - | let | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | let | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | if (if (( | |
224 | + | func bb (aJ) = { | |
225 | + | let bc = as() | |
226 | + | let bd = bc._1 | |
227 | + | let be = bc._2 | |
228 | + | let bf = bc._3 | |
229 | + | let bg = valueOrErrorMessage(getInteger(ak, (aJ + e)), (((("No data on the key: " + aJ) + e) + " at address ") + toString(ak))) | |
230 | + | let bh = valueOrErrorMessage(getInteger(ak, h), ((("No data on the key: " + h) + " at address ") + toString(ak))) | |
231 | + | let bi = valueOrElse(getInteger(ak, (aJ + g)), bh) | |
232 | + | let bj = valueOrErrorMessage(getInteger(ak, (aJ + f)), (((("No data on the key: " + aJ) + f) + " at address ") + toString(ak))) | |
233 | + | let bk = fraction(bd, bg, T) | |
234 | + | let bl = fraction(bd, bj, T) | |
235 | + | let bm = fraction(be, bg, T) | |
236 | + | let bn = fraction(be, bj, T) | |
237 | + | if (if ((bk > bd)) | |
236 | 238 | then true | |
237 | - | else ( | |
239 | + | else (bl > be)) | |
238 | 240 | then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious") | |
239 | - | else $Tuple7( | |
241 | + | else $Tuple7(bk, bh, bl, bi, bf, bm, bn) | |
240 | 242 | } | |
241 | 243 | ||
242 | 244 | ||
243 | - | func | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | $Tuple3( | |
245 | + | func bo (aJ) = { | |
246 | + | let bp = valueOrErrorMessage(getInteger(this, (aJ + s)), (("No data on the key: " + aJ) + s)) | |
247 | + | let bq = valueOrElse(getInteger(this, (aJ + u)), 0) | |
248 | + | let br = valueOrElse(getInteger(this, (aJ + w)), height) | |
249 | + | $Tuple3(br, bp, bq) | |
248 | 250 | } | |
249 | 251 | ||
250 | 252 | ||
251 | - | func | |
252 | - | let | |
253 | - | fraction( | |
253 | + | func bs (aJ,bt) = { | |
254 | + | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
255 | + | fraction(bt, V, (bu + V)) | |
254 | 256 | } | |
255 | 257 | ||
256 | 258 | ||
257 | - | func | |
258 | - | let | |
259 | - | fraction( | |
259 | + | func bv (aJ,bt) = { | |
260 | + | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
261 | + | fraction(bt, bu, (bu + V)) | |
260 | 262 | } | |
261 | 263 | ||
262 | 264 | ||
263 | - | func | |
264 | - | let | |
265 | - | then ( | |
265 | + | func bw (aJ,br,bh,bi,bp,bq,bx,by,bz,bA,bB,bC) = { | |
266 | + | let bD = if (if (if ((bh > bC)) | |
267 | + | then (bh == bi) | |
266 | 268 | else false) | |
267 | 269 | then true | |
268 | - | else if (( | |
269 | - | then ( | |
270 | + | else if ((bC > bh)) | |
271 | + | then (bh != bi) | |
270 | 272 | else false) | |
271 | 273 | then { | |
272 | - | let | |
273 | - | $Tuple3( | |
274 | + | let bE = (bA * (bC - br)) | |
275 | + | $Tuple3(bE, bp, bq) | |
274 | 276 | } | |
275 | - | else if (if (if (( | |
276 | - | then ( | |
277 | + | else if (if (if ((bC > bh)) | |
278 | + | then (bh == bi) | |
277 | 279 | else false) | |
278 | - | then ( | |
280 | + | then (br > bh) | |
279 | 281 | else false) | |
280 | 282 | then { | |
281 | - | let | |
282 | - | $Tuple3( | |
283 | + | let bE = (by * (bC - br)) | |
284 | + | $Tuple3(bE, bp, bq) | |
283 | 285 | } | |
284 | 286 | else { | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | then fraction( | |
287 | + | let bF = (bA * (bh - br)) | |
288 | + | let bG = (bp + fraction(bs(aJ, bF), bB, bz)) | |
289 | + | let bH = (bq + (if ((bx > 0)) | |
290 | + | then fraction(bv(aJ, bF), U, bx) | |
289 | 291 | else 0)) | |
290 | - | let | |
291 | - | $Tuple3( | |
292 | + | let bI = (by * (bC - bh)) | |
293 | + | $Tuple3(bI, bG, bH) | |
292 | 294 | } | |
293 | - | let | |
294 | - | let | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | then fraction( | |
295 | + | let bJ = bD._1 | |
296 | + | let bK = bD._2 | |
297 | + | let bL = bD._3 | |
298 | + | let bM = (bK + fraction(bs(aJ, bJ), bB, bz)) | |
299 | + | let bN = (bL + (if ((bx > 0)) | |
300 | + | then fraction(bv(aJ, bJ), U, bx) | |
299 | 301 | else 0)) | |
300 | - | $Tuple2( | |
302 | + | $Tuple2(bM, bN) | |
301 | 303 | } | |
302 | 304 | ||
303 | 305 | ||
304 | - | func | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | then ( | |
306 | + | func bO (aJ,aO) = { | |
307 | + | let bB = aU(ar, aP(aJ)) | |
308 | + | let bx = aM(aJ) | |
309 | + | let bP = aN(aJ, aO) | |
310 | + | let bQ = aL(aJ) | |
311 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), bQ) | |
312 | + | let bS = valueOrElse(getInteger(this, (aJ + H)), 0) | |
313 | + | let bT = bo(aJ) | |
314 | + | let br = bT._1 | |
315 | + | let bp = bT._2 | |
316 | + | let bq = bT._3 | |
317 | + | let bU = bb(aJ) | |
318 | + | let by = bU._1 | |
319 | + | let bh = bU._2 | |
320 | + | let bA = bU._3 | |
321 | + | let bi = bU._4 | |
322 | + | let bV = bU._5 | |
323 | + | let bW = bU._6 | |
324 | + | let bX = bU._7 | |
325 | + | let bY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + t)), bp) | |
326 | + | let bZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + v)), if (if ((bS > bY)) | |
327 | + | then (bP > 0) | |
326 | 328 | else false) | |
327 | 329 | then 0 | |
328 | - | else | |
329 | - | let | |
330 | - | let | |
331 | - | if (( | |
330 | + | else bq) | |
331 | + | let ca = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
332 | + | let cb = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), ca) | |
333 | + | if ((bR == 0)) | |
332 | 334 | then { | |
333 | - | let | |
334 | - | then (( | |
335 | - | else ( | |
336 | - | $Tuple4( | |
335 | + | let cc = if ((bV > br)) | |
336 | + | then ((bW * (bV - br)) + (by * (height - bV))) | |
337 | + | else (by * (height - br)) | |
338 | + | $Tuple4(bp, bq, 0, cc) | |
337 | 339 | } | |
338 | 340 | else { | |
339 | - | let | |
341 | + | let cd = if ((bV > br)) | |
340 | 342 | then { | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | $Tuple3( | |
343 | + | let ce = bw(aJ, br, bh, bi, bp, bq, bx, bW, bR, bX, bB, bV) | |
344 | + | let cf = ce._1 | |
345 | + | let cg = ce._2 | |
346 | + | $Tuple3(cf, cg, bV) | |
345 | 347 | } | |
346 | - | else $Tuple3( | |
347 | - | let | |
348 | - | let | |
349 | - | let | |
350 | - | let | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | if ((0 > | |
348 | + | else $Tuple3(bp, bq, br) | |
349 | + | let ch = cd._1 | |
350 | + | let ci = cd._2 | |
351 | + | let cj = cd._3 | |
352 | + | let ck = bw(aJ, cj, bh, bi, ch, ci, bx, by, bR, bA, bB, height) | |
353 | + | let bM = ck._1 | |
354 | + | let bN = ck._2 | |
355 | + | let cl = fraction(cb, (bM - bY), bB) | |
356 | + | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
357 | + | let cm = fraction(fraction(cb, (bM - max([bY, bS])), bB), bu, V) | |
358 | + | let cn = fraction((bN - bZ), bP, U) | |
359 | + | let co = min([cm, cn]) | |
360 | + | let cc = (cm - co) | |
361 | + | if ((0 > cc)) | |
360 | 362 | then throw("toTreasury < 0") | |
361 | - | else $Tuple4( | |
363 | + | else $Tuple4(bM, bN, (cl + co), cc) | |
362 | 364 | } | |
363 | 365 | } | |
364 | 366 | ||
365 | 367 | ||
366 | - | func | |
367 | - | func | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
377 | - | $Tuple2(( | |
368 | + | func cp (cq,aO) = { | |
369 | + | func cr (av,aJ) = { | |
370 | + | let cs = av | |
371 | + | let ct = cs._1 | |
372 | + | let cu = cs._2 | |
373 | + | let cv = bO(aJ, aO) | |
374 | + | let cw = cv._1 | |
375 | + | let cx = cv._2 | |
376 | + | let cy = cv._3 | |
377 | + | let cz = cv._4 | |
378 | + | let cA = (ba(aJ, aO) + cy) | |
379 | + | $Tuple2((ct :+ aJ), (cu :+ cA)) | |
378 | 380 | } | |
379 | 381 | ||
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | func | |
384 | - | then | |
385 | - | else | |
382 | + | let aB = cq | |
383 | + | let aC = size(aB) | |
384 | + | let aD = $Tuple2(nil, nil) | |
385 | + | func aE (aF,aG) = if ((aG >= aC)) | |
386 | + | then aF | |
387 | + | else cr(aF, aB[aG]) | |
386 | 388 | ||
387 | - | func | |
388 | - | then | |
389 | + | func aH (aF,aG) = if ((aG >= aC)) | |
390 | + | then aF | |
389 | 391 | else throw("List size exceeds 60") | |
390 | 392 | ||
391 | - | | |
393 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
392 | 394 | } | |
393 | 395 | ||
394 | 396 | ||
395 | - | func | |
397 | + | func cB (aJ,aO,cC,cD,cE) = if ((aI(aJ) > height)) | |
396 | 398 | then { | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | if (( | |
399 | + | let cF = valueOrElse(getInteger(aj, (aJ + z)), 0) | |
400 | + | let cG = valueOrElse(getInteger(aj, (((aO + "_") + aJ) + E)), 0) | |
401 | + | let cH = aK(addressFromStringValue(aJ)) | |
402 | + | let cI = (fraction(cH, cG, cF) - cC) | |
403 | + | if ((cE > 0)) | |
402 | 404 | then throw("You can't lock shareTokens till first harvest end.") | |
403 | - | else if (( | |
405 | + | else if ((cG == 0)) | |
404 | 406 | then 0 | |
405 | - | else if (( | |
406 | - | then ( | |
407 | + | else if ((cD >= cI)) | |
408 | + | then (cD - cI) | |
407 | 409 | else 0 | |
408 | 410 | } | |
409 | 411 | else 0 | |
410 | 412 | ||
411 | 413 | ||
412 | - | func | |
413 | - | let | |
414 | - | $Tuple2(parseIntValue( | |
414 | + | func cJ (cK) = { | |
415 | + | let cL = split(valueOrErrorMessage(getString(this, (toString(cK) + p)), ("There are no key for lock type" + toString(cK))), "_") | |
416 | + | $Tuple2(parseIntValue(cL[0]), parseIntValue(cL[1])) | |
415 | 417 | } | |
416 | 418 | ||
417 | 419 | ||
418 | - | func | |
420 | + | func cM (cN) = [BooleanEntry(a, false), StringEntry(d, cN)] | |
419 | 421 | ||
420 | 422 | ||
421 | - | func | |
422 | - | then | |
423 | + | func cO () = if (if (ap) | |
424 | + | then aq | |
423 | 425 | else false) | |
424 | 426 | then unit | |
425 | 427 | else throw("DApp is inactive at this moment") | |
426 | 428 | ||
427 | 429 | ||
428 | - | func | |
430 | + | func cP (aw) = if (containsElement([af, ag, ah], aw.callerPublicKey)) | |
429 | 431 | then unit | |
430 | 432 | else throw("Only admin can call this function") | |
431 | 433 | ||
432 | 434 | ||
433 | - | func | |
435 | + | func cQ (aw,aJ) = if (if ((toString(aw.caller) == aJ)) | |
434 | 436 | then true | |
435 | - | else ( | |
437 | + | else (aw.caller == ao)) | |
436 | 438 | then unit | |
437 | 439 | else throw("Only pool can call this function") | |
438 | 440 | ||
439 | 441 | ||
440 | - | func cQ (av) = if ((av.caller == this)) | |
442 | + | func cR (aJ) = valueOrElse(getBoolean(S, (c + aJ)), false) | |
443 | + | ||
444 | + | ||
445 | + | func cS (aJ) = if (!(cR(aJ))) | |
446 | + | then unit | |
447 | + | else throw("Pool is deprecated. Only unlock action allowed.") | |
448 | + | ||
449 | + | ||
450 | + | func cT (aw) = if ((aw.caller == this)) | |
441 | 451 | then unit | |
442 | 452 | else throw("Only contract itself can call this function") | |
443 | 453 | ||
444 | 454 | ||
445 | - | func | |
446 | - | let | |
447 | - | let | |
448 | - | let | |
449 | - | let | |
450 | - | let | |
451 | - | let | |
452 | - | let | |
453 | - | let | |
454 | - | let | |
455 | - | let | |
456 | - | let | |
457 | - | let | |
458 | - | let | |
459 | - | if (( | |
455 | + | func cU (aw,cV,aJ,cE) = { | |
456 | + | let cW = aP(aJ) | |
457 | + | let aO = toString(cV) | |
458 | + | let cX = aL(aJ) | |
459 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), cX) | |
460 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
461 | + | let cZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + l)), 0) | |
462 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
463 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
464 | + | let dc = ((cY + da) + aw.payments[0].amount) | |
465 | + | let dd = cJ(cE) | |
466 | + | let de = dd._1 | |
467 | + | let df = dd._2 | |
468 | + | let dg = getIntegerValue(this, q) | |
469 | + | if ((aw.payments[0].assetId != cW)) | |
460 | 470 | then throw("Wrong sharetoken in payment") | |
461 | - | else if ((0 >= | |
471 | + | else if ((0 >= aw.payments[0].amount)) | |
462 | 472 | then throw("Payment amount must be greater than 0") | |
463 | - | else if ((0 > | |
473 | + | else if ((0 > cE)) | |
464 | 474 | then throw("lockType must be >= 0") | |
465 | 475 | else { | |
466 | - | let | |
467 | - | if (( | |
476 | + | let dh = cB(aJ, aO, cY, aw.payments[0].amount, cE) | |
477 | + | if ((dh == dh)) | |
468 | 478 | then { | |
469 | - | let | |
479 | + | let di = if ((cE == 0)) | |
470 | 480 | then { | |
471 | - | let | |
472 | - | $Tuple2([IntegerEntry(((( | |
481 | + | let dj = ((db + aw.payments[0].amount) - dh) | |
482 | + | $Tuple2([IntegerEntry((((aJ + "_") + aO) + i), ((cY + aw.payments[0].amount) - dh)), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR + aw.payments[0].amount) - dh)), ScriptTransfer(cV, dh, aw.payments[0].assetId)], ((cX + aw.payments[0].amount) - dh)) | |
473 | 483 | } | |
474 | - | else if (if (( | |
475 | - | then if (if ((2 > size( | |
484 | + | else if (if ((cZ == 0)) | |
485 | + | then if (if ((2 > size(aw.payments))) | |
476 | 486 | then true | |
477 | - | else ( | |
487 | + | else (aw.payments[1].assetId != unit)) | |
478 | 488 | then true | |
479 | - | else ( | |
489 | + | else (dg > aw.payments[1].amount) | |
480 | 490 | else false) | |
481 | - | then throw((("You need to pay additional waves comission " + toString( | |
482 | - | else if (( | |
491 | + | then throw((("You need to pay additional waves comission " + toString(dg)) + "WAVES")) | |
492 | + | else if ((cZ > (height + de))) | |
483 | 493 | then throw("You cannot lock sharetokens for a period less than what you have already locked") | |
484 | 494 | else { | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
488 | - | $Tuple2([IntegerEntry(((( | |
495 | + | let dk = (da + aw.payments[0].amount) | |
496 | + | let dl = (height + de) | |
497 | + | let dj = (fraction(dk, df, V) + cY) | |
498 | + | $Tuple2([IntegerEntry((((aJ + "_") + aO) + j), dk), IntegerEntry((((aJ + "_") + aO) + l), dl), IntegerEntry((((aJ + "_") + aO) + k), cE), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR - db) + dj))], (cX + aw.payments[0].amount)) | |
489 | 499 | } | |
490 | - | let | |
491 | - | let | |
492 | - | if (( | |
500 | + | let dm = di._1 | |
501 | + | let dn = di._2 | |
502 | + | if ((aQ(cW) > dn)) | |
493 | 503 | then throw("Balance of share-token is lower than totalAmount") | |
494 | 504 | else { | |
495 | - | let | |
496 | - | let | |
497 | - | let | |
498 | - | let | |
499 | - | let | |
500 | - | let | |
501 | - | let | |
502 | - | then invoke( | |
505 | + | let do = bO(aJ, aO) | |
506 | + | let bp = do._1 | |
507 | + | let bq = do._2 | |
508 | + | let cy = do._3 | |
509 | + | let dp = do._4 | |
510 | + | let dq = (ba(aJ, aO) + cy) | |
511 | + | let dr = if ((getString(Address(fromBase58String(aJ)), "version") == "3.0.0")) | |
512 | + | then invoke(am, "updateUserInterest", [aO, aJ, dc], nil) | |
503 | 513 | else 0 | |
504 | - | if (( | |
505 | - | then ([IntegerEntry(((( | |
514 | + | if ((dr == dr)) | |
515 | + | then ([IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((aJ + n), dn), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] ++ dm) | |
506 | 516 | else throw("Strict value is not equal to itself.") | |
507 | 517 | } | |
508 | 518 | } | |
511 | 521 | } | |
512 | 522 | ||
513 | 523 | ||
514 | - | func dp (av,cS,aI,dq) = valueOrElse(cN(), { | |
515 | - | let dr = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id")) | |
516 | - | let aN = toString(cS) | |
517 | - | let ds = bN(aI, aN) | |
518 | - | let bo = ds._1 | |
519 | - | let bp = ds._2 | |
520 | - | let cx = ds._3 | |
521 | - | let dm = ds._4 | |
522 | - | let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0) | |
523 | - | let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0) | |
524 | - | let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV) | |
525 | - | let dt = (cV - dq) | |
526 | - | let dn = (aZ(aI, aN) + cx) | |
527 | - | let du = aK(aI) | |
528 | - | let bQ = valueOrElse(getInteger(this, (aI + n)), du) | |
529 | - | let dv = (du - dq) | |
530 | - | let dw = (bQ - dq) | |
531 | - | let dg = (cY - dq) | |
532 | - | if ((dq > cV)) | |
533 | - | then throw("Withdraw amount more then user locked amount") | |
534 | - | else if ((aP(dr) > du)) | |
535 | - | then throw("Balance of share-token is lower than totalAmount") | |
536 | - | else { | |
537 | - | let do = if ((getString(Address(fromBase58String(aI)), "version") == "3.0.0")) | |
538 | - | then invoke(al, "updateUserInterest", [aN, aI, (cV + cX)], nil) | |
539 | - | else 0 | |
540 | - | if ((do == do)) | |
541 | - | then [IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + m), dv), IntegerEntry((aI + n), dw), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dq, dr)] | |
542 | - | else throw("Strict value is not equal to itself.") | |
543 | - | } | |
544 | - | }) | |
524 | + | func ds (aw,cV,aJ,dt) = { | |
525 | + | let du = if (cR(aJ)) | |
526 | + | then invoke(this, "unlockUserLockDeprecated", [aJ, toString(cV)], nil) | |
527 | + | else 0 | |
528 | + | if ((du == du)) | |
529 | + | then { | |
530 | + | let dv = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
531 | + | let aO = toString(cV) | |
532 | + | let dw = bO(aJ, aO) | |
533 | + | let bp = dw._1 | |
534 | + | let bq = dw._2 | |
535 | + | let cy = dw._3 | |
536 | + | let dp = dw._4 | |
537 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
538 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
539 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
540 | + | let dx = (cY - dt) | |
541 | + | let dq = (ba(aJ, aO) + cy) | |
542 | + | let dy = aL(aJ) | |
543 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), dy) | |
544 | + | let dz = (dy - dt) | |
545 | + | let dA = (bR - dt) | |
546 | + | let dj = (db - dt) | |
547 | + | if ((dt > cY)) | |
548 | + | then throw("Withdraw amount more then user locked amount") | |
549 | + | else if ((aQ(dv) > dy)) | |
550 | + | then throw("Balance of share-token is lower than totalAmount") | |
551 | + | else { | |
552 | + | let dr = if ((getString(Address(fromBase58String(aJ)), "version") == "3.0.0")) | |
553 | + | then invoke(am, "updateUserInterest", [aO, aJ, (cY + da)], nil) | |
554 | + | else 0 | |
555 | + | if ((dr == dr)) | |
556 | + | then [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + n), dz), IntegerEntry((aJ + o), dA), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar), ScriptTransfer(aw.caller, dt, dv)] | |
557 | + | else throw("Strict value is not equal to itself.") | |
558 | + | } | |
559 | + | } | |
560 | + | else throw("Strict value is not equal to itself.") | |
561 | + | } | |
545 | 562 | ||
546 | 563 | ||
547 | - | func | |
548 | - | let | |
549 | - | let | |
550 | - | let | |
551 | - | let | |
552 | - | let | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | if (( | |
564 | + | func dB (aw,aJ,cV) = { | |
565 | + | let dv = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
566 | + | let aO = toString(cV) | |
567 | + | let bz = aL(aJ) | |
568 | + | let dC = bO(aJ, aO) | |
569 | + | let bp = dC._1 | |
570 | + | let bq = dC._2 | |
571 | + | let cy = dC._3 | |
572 | + | let dp = dC._4 | |
573 | + | let cA = (ba(aJ, aO) + cy) | |
574 | + | if ((aQ(dv) > bz)) | |
558 | 575 | then throw("Balance of share-token is lower than totalAmount") | |
559 | 576 | else { | |
560 | - | let | |
561 | - | then [ScriptTransfer( | |
577 | + | let dD = if ((aw.caller != this)) | |
578 | + | then [ScriptTransfer(aw.caller, cA, ar)] | |
562 | 579 | else nil | |
563 | - | $Tuple2(([IntegerEntry(((( | |
580 | + | $Tuple2(([IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), 0), Reissue(ar, (dp + cA), true), ScriptTransfer(an, dp, ar)] ++ dD), cA) | |
564 | 581 | } | |
565 | 582 | } | |
566 | 583 | ||
567 | 584 | ||
568 | - | @Callable(av) | |
569 | - | func init (dA) = if (isDefined(getString(this, w))) | |
585 | + | func dE (aw,aJ,aO) = { | |
586 | + | let bR = getIntegerValue(this, (aJ + o)) | |
587 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
588 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
589 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
590 | + | let dx = (cY + da) | |
591 | + | let dF = bO(aJ, aO) | |
592 | + | let bp = dF._1 | |
593 | + | let bq = dF._2 | |
594 | + | let cy = dF._3 | |
595 | + | let dp = dF._4 | |
596 | + | let dq = (ba(aJ, aO) + cy) | |
597 | + | [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + m), dx), IntegerEntry((aJ + o), ((bR - db) + dx)), IntegerEntry((((aJ + "_") + aO) + y), dq), DeleteEntry((((aJ + "_") + aO) + j)), DeleteEntry((((aJ + "_") + aO) + l)), DeleteEntry((((aJ + "_") + aO) + k)), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
598 | + | } | |
599 | + | ||
600 | + | ||
601 | + | @Callable(aw) | |
602 | + | func init (dG) = if (isDefined(getString(this, x))) | |
570 | 603 | then throw("SWOP already initialized") | |
571 | 604 | else { | |
572 | - | let | |
573 | - | let | |
574 | - | let | |
575 | - | [BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", | |
605 | + | let dH = 100000000000000 | |
606 | + | let dI = Issue("SWOP", "SWOP protocol token", dH, 8, true) | |
607 | + | let dJ = calculateAssetId(dI) | |
608 | + | [BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dH, 8, true), StringEntry(x, toBase58String(dJ))] | |
576 | 609 | } | |
577 | 610 | ||
578 | 611 | ||
579 | 612 | ||
580 | - | @Callable( | |
581 | - | func initPoolShareFarming ( | |
613 | + | @Callable(aw) | |
614 | + | func initPoolShareFarming (aJ) = valueOrElse(cP(aw), [IntegerEntry((aJ + n), 0), IntegerEntry((aJ + s), 0), IntegerEntry((aJ + u), 0), IntegerEntry((aJ + w), height)]) | |
582 | 615 | ||
583 | 616 | ||
584 | 617 | ||
585 | - | @Callable( | |
586 | - | func updatePoolInterest ( | |
618 | + | @Callable(aw) | |
619 | + | func updatePoolInterest (aJ) = valueOrElse(cO(), if ((aw.caller != ak)) | |
587 | 620 | then throw("Only Governance can call this function") | |
588 | 621 | else { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | [IntegerEntry(( | |
622 | + | let aO = toString(addressFromPublicKey(al)) | |
623 | + | let dK = bO(aJ, aO) | |
624 | + | let bp = dK._1 | |
625 | + | let bq = dK._2 | |
626 | + | let dL = dK._3 | |
627 | + | [IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height)] | |
595 | 628 | }) | |
596 | 629 | ||
597 | 630 | ||
598 | 631 | ||
599 | - | @Callable( | |
600 | - | func lockShareTokens ( | |
632 | + | @Callable(aw) | |
633 | + | func lockShareTokens (aJ,cE) = valueOrElse(cS(aJ), valueOrElse(cO(), cU(aw, aw.caller, aJ, cE))) | |
601 | 634 | ||
602 | 635 | ||
603 | 636 | ||
604 | - | @Callable( | |
605 | - | func lockShareTokensFromPool ( | |
637 | + | @Callable(aw) | |
638 | + | func lockShareTokensFromPool (dM,aJ,cE) = valueOrElse(cS(aJ), valueOrElse(cO(), valueOrElse(cQ(aw, aJ), cU(aw, Address(dM), aJ, cE)))) | |
606 | 639 | ||
607 | 640 | ||
608 | 641 | ||
609 | - | @Callable( | |
610 | - | func lockStakedShareTokens ( | |
611 | - | let | |
612 | - | let | |
613 | - | let | |
614 | - | let | |
615 | - | let | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | let | |
621 | - | let | |
622 | - | let | |
623 | - | let | |
624 | - | if (( | |
642 | + | @Callable(aw) | |
643 | + | func lockStakedShareTokens (aJ,cE,dN) = valueOrElse(cS(aJ), valueOrElse(cO(), { | |
644 | + | let cW = aP(aJ) | |
645 | + | let aO = toString(aw.caller) | |
646 | + | let cX = aL(aJ) | |
647 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), cX) | |
648 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
649 | + | let cZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + l)), 0) | |
650 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
651 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
652 | + | let dc = (cY + da) | |
653 | + | let dO = cJ(cE) | |
654 | + | let de = dO._1 | |
655 | + | let df = dO._2 | |
656 | + | let dg = getIntegerValue(this, q) | |
657 | + | if ((aI(aJ) > height)) | |
625 | 658 | then throw("You can't lock shareTokens till first harvest end.") | |
626 | - | else if ((0 >= | |
659 | + | else if ((0 >= cE)) | |
627 | 660 | then throw("lockType must be > 0") | |
628 | - | else if (( | |
629 | - | then throw(("You can't lock more than " + toString( | |
630 | - | else if (( | |
661 | + | else if ((dN > cY)) | |
662 | + | then throw(("You can't lock more than " + toString(cY))) | |
663 | + | else if ((aQ(cW) > cX)) | |
631 | 664 | then throw("Balance of share-token is lower than totalAmount") | |
632 | - | else if (if (( | |
633 | - | then if (if ((1 > size( | |
665 | + | else if (if ((cZ == 0)) | |
666 | + | then if (if ((1 > size(aw.payments))) | |
634 | 667 | then true | |
635 | - | else ( | |
668 | + | else (aw.payments[0].assetId != unit)) | |
636 | 669 | then true | |
637 | - | else ( | |
670 | + | else (dg > aw.payments[0].amount) | |
638 | 671 | else false) | |
639 | - | then throw((("You need to pay additional waves comission " + toString( | |
640 | - | else if (if (( | |
641 | - | then (0 >= | |
672 | + | then throw((("You need to pay additional waves comission " + toString(dg)) + "WAVES")) | |
673 | + | else if (if ((cZ == 0)) | |
674 | + | then (0 >= dN) | |
642 | 675 | else false) | |
643 | 676 | then throw("lockAmount must be greater than 0") | |
644 | - | else if ((0 > | |
677 | + | else if ((0 > dN)) | |
645 | 678 | then throw("lockAmount must be positive") | |
646 | - | else if (( | |
679 | + | else if ((cZ > (height + de))) | |
647 | 680 | then throw("You cannot lock sharetokens for a period less than what you have already locked") | |
648 | 681 | else { | |
649 | - | let | |
650 | - | let | |
651 | - | let | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
656 | - | let | |
657 | - | let | |
658 | - | let | |
659 | - | [IntegerEntry(((( | |
682 | + | let dk = (da + dN) | |
683 | + | let dx = (cY - dN) | |
684 | + | let dl = (height + de) | |
685 | + | let dj = (fraction(dk, df, V) + dx) | |
686 | + | let dP = bO(aJ, aO) | |
687 | + | let bp = dP._1 | |
688 | + | let bq = dP._2 | |
689 | + | let cy = dP._3 | |
690 | + | let dp = dP._4 | |
691 | + | let dq = (ba(aJ, aO) + cy) | |
692 | + | [IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + j), dk), IntegerEntry((((aJ + "_") + aO) + l), dl), IntegerEntry((((aJ + "_") + aO) + k), cE), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR - db) + dj)), IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
660 | 693 | } | |
694 | + | })) | |
695 | + | ||
696 | + | ||
697 | + | ||
698 | + | @Callable(aw) | |
699 | + | func unlockUserLock (aJ,aO) = valueOrElse(cO(), { | |
700 | + | let cZ = valueOrErrorMessage(getInteger(this, (((aJ + "_") + aO) + l)), (((("There is no pool " + aJ) + " or user ") + aO) + "with lock")) | |
701 | + | if ((cZ > height)) | |
702 | + | then throw(("You can't unlock sharetokens till " + toString(cZ))) | |
703 | + | else (dE(aw, aJ, aO) ++ [ScriptTransfer(aw.caller, getIntegerValue(this, q), unit)]) | |
661 | 704 | }) | |
662 | 705 | ||
663 | 706 | ||
664 | 707 | ||
665 | - | @Callable(av) | |
666 | - | func unlockUserLock (aI,aN) = valueOrElse(cN(), { | |
667 | - | let dd = getIntegerValue(this, p) | |
668 | - | let cW = valueOrErrorMessage(getInteger(this, (((aI + "_") + aN) + k)), (((("There is no pool " + aI) + " or user ") + aN) + "with lock")) | |
669 | - | let bQ = getIntegerValue(this, (aI + n)) | |
670 | - | let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0) | |
671 | - | let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0) | |
672 | - | let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV) | |
673 | - | if ((cW > height)) | |
674 | - | then throw(("You can't unlock sharetokens till " + toString(cW))) | |
675 | - | else { | |
676 | - | let dt = (cV + cX) | |
677 | - | let dK = bN(aI, aN) | |
678 | - | let bo = dK._1 | |
679 | - | let bp = dK._2 | |
680 | - | let cx = dK._3 | |
681 | - | let dm = dK._4 | |
682 | - | let dn = (aZ(aI, aN) + cx) | |
683 | - | [IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dt), IntegerEntry((aI + n), ((bQ - cY) + dt)), IntegerEntry((((aI + "_") + aN) + x), dn), DeleteEntry((((aI + "_") + aN) + i)), DeleteEntry((((aI + "_") + aN) + k)), DeleteEntry((((aI + "_") + aN) + j)), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dd, unit)] | |
684 | - | } | |
708 | + | @Callable(aw) | |
709 | + | func unlockUserLockDeprecated (aJ,aO) = valueOrElse(cO(), valueOrElse(cT(aw), if (!(cR(aJ))) | |
710 | + | then throw("Pool must be deprecated") | |
711 | + | else if (isDefined(getInteger(this, (((aJ + "_") + aO) + l)))) | |
712 | + | then (dE(aw, aJ, aO) ++ [ScriptTransfer(ai, getIntegerValue(this, q), unit)]) | |
713 | + | else nil)) | |
714 | + | ||
715 | + | ||
716 | + | ||
717 | + | @Callable(aw) | |
718 | + | func withdrawShareTokens (aJ,dt) = valueOrElse(cO(), ds(aw, aw.caller, aJ, dt)) | |
719 | + | ||
720 | + | ||
721 | + | ||
722 | + | @Callable(aw) | |
723 | + | func withdrawShareTokensFromPool (dM,aJ,dt) = valueOrElse(cO(), valueOrElse(cQ(aw, aJ), ds(aw, Address(dM), aJ, dt))) | |
724 | + | ||
725 | + | ||
726 | + | ||
727 | + | @Callable(aw) | |
728 | + | func claim (aJ) = valueOrElse(cO(), { | |
729 | + | let bE = dB(aw, aJ, aw.caller) | |
730 | + | if ((bE._2 == 0)) | |
731 | + | then throw("You have 0 available SWOP") | |
732 | + | else bE | |
685 | 733 | }) | |
686 | 734 | ||
687 | 735 | ||
688 | 736 | ||
689 | - | @Callable( | |
690 | - | func | |
737 | + | @Callable(aw) | |
738 | + | func claimInternal (aJ,cV) = valueOrElse(cO(), valueOrElse(cT(aw), dB(aw, aJ, Address(cV)))) | |
691 | 739 | ||
692 | 740 | ||
693 | 741 | ||
694 | - | @Callable(av) | |
695 | - | func withdrawShareTokensFromPool (dG,aI,dq) = valueOrElse(cN(), valueOrElse(cP(av, aI), dp(av, Address(dG), aI, dq))) | |
696 | - | ||
697 | - | ||
698 | - | ||
699 | - | @Callable(av) | |
700 | - | func claim (aI) = valueOrElse(cN(), { | |
701 | - | let bD = dx(av, aI, av.caller) | |
702 | - | if ((bD._2 == 0)) | |
703 | - | then throw("You have 0 available SWOP") | |
704 | - | else bD | |
705 | - | }) | |
706 | - | ||
707 | - | ||
708 | - | ||
709 | - | @Callable(av) | |
710 | - | func claimInternal (aI,cS) = valueOrElse(cN(), valueOrElse(cQ(av), dx(av, aI, Address(cS)))) | |
711 | - | ||
712 | - | ||
713 | - | ||
714 | - | @Callable(av) | |
715 | - | func claimAndStake (aI) = valueOrElse(cN(), { | |
716 | - | let cx = { | |
717 | - | let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil) | |
718 | - | if ($isInstanceOf(dL, "Int")) | |
719 | - | then dL | |
720 | - | else throw(($getType(dL) + " couldn't be cast to Int")) | |
742 | + | @Callable(aw) | |
743 | + | func claimAndStake (aJ) = valueOrElse(cO(), { | |
744 | + | let cy = { | |
745 | + | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
746 | + | if ($isInstanceOf(dQ, "Int")) | |
747 | + | then dQ | |
748 | + | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
721 | 749 | } | |
722 | - | if (( | |
723 | - | then if (( | |
750 | + | if ((cy == cy)) | |
751 | + | then if ((cy == 0)) | |
724 | 752 | then throw("You have 0 available SWOP") | |
725 | 753 | else { | |
726 | - | let | |
727 | - | if (( | |
754 | + | let dR = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, cy)]) | |
755 | + | if ((dR == dR)) | |
728 | 756 | then nil | |
729 | 757 | else throw("Strict value is not equal to itself.") | |
730 | 758 | } | |
733 | 761 | ||
734 | 762 | ||
735 | 763 | ||
736 | - | @Callable( | |
737 | - | func claimAll ( | |
738 | - | func | |
739 | - | let | |
740 | - | let | |
741 | - | if ($isInstanceOf( | |
742 | - | then | |
743 | - | else throw(($getType( | |
764 | + | @Callable(aw) | |
765 | + | func claimAll (cq) = valueOrElse(cO(), { | |
766 | + | func dS (dT,aJ) = { | |
767 | + | let cy = { | |
768 | + | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
769 | + | if ($isInstanceOf(dQ, "Int")) | |
770 | + | then dQ | |
771 | + | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
744 | 772 | } | |
745 | - | if (( | |
746 | - | then ( | |
773 | + | if ((cy == cy)) | |
774 | + | then (dT + cy) | |
747 | 775 | else throw("Strict value is not equal to itself.") | |
748 | 776 | } | |
749 | 777 | ||
750 | - | let | |
751 | - | let | |
752 | - | let | |
753 | - | let | |
754 | - | func | |
755 | - | then | |
756 | - | else | |
778 | + | let dT = { | |
779 | + | let aB = cq | |
780 | + | let aC = size(aB) | |
781 | + | let aD = 0 | |
782 | + | func aE (aF,aG) = if ((aG >= aC)) | |
783 | + | then aF | |
784 | + | else dS(aF, aB[aG]) | |
757 | 785 | ||
758 | - | func | |
759 | - | then | |
786 | + | func aH (aF,aG) = if ((aG >= aC)) | |
787 | + | then aF | |
760 | 788 | else throw("List size exceeds 60") | |
761 | 789 | ||
762 | - | | |
790 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
763 | 791 | } | |
764 | - | if (( | |
792 | + | if ((dT == 0)) | |
765 | 793 | then throw("You have 0 available SWOP") | |
766 | - | else [ScriptTransfer( | |
794 | + | else [ScriptTransfer(aw.caller, dT, ar)] | |
767 | 795 | }) | |
768 | 796 | ||
769 | 797 | ||
770 | 798 | ||
771 | - | @Callable( | |
772 | - | func claimAllAndStake ( | |
773 | - | func | |
774 | - | let | |
775 | - | let | |
776 | - | if ($isInstanceOf( | |
777 | - | then | |
778 | - | else throw(($getType( | |
799 | + | @Callable(aw) | |
800 | + | func claimAllAndStake (cq) = valueOrElse(cO(), { | |
801 | + | func dS (dT,aJ) = { | |
802 | + | let cy = { | |
803 | + | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
804 | + | if ($isInstanceOf(dQ, "Int")) | |
805 | + | then dQ | |
806 | + | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
779 | 807 | } | |
780 | - | if (( | |
781 | - | then ( | |
808 | + | if ((cy == cy)) | |
809 | + | then (dT + cy) | |
782 | 810 | else throw("Strict value is not equal to itself.") | |
783 | 811 | } | |
784 | 812 | ||
785 | - | let | |
786 | - | let | |
787 | - | let | |
788 | - | let | |
789 | - | func | |
790 | - | then | |
791 | - | else | |
813 | + | let dT = { | |
814 | + | let aB = cq | |
815 | + | let aC = size(aB) | |
816 | + | let aD = 0 | |
817 | + | func aE (aF,aG) = if ((aG >= aC)) | |
818 | + | then aF | |
819 | + | else dS(aF, aB[aG]) | |
792 | 820 | ||
793 | - | func | |
794 | - | then | |
821 | + | func aH (aF,aG) = if ((aG >= aC)) | |
822 | + | then aF | |
795 | 823 | else throw("List size exceeds 60") | |
796 | 824 | ||
797 | - | | |
825 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
798 | 826 | } | |
799 | - | if (( | |
827 | + | if ((dT == 0)) | |
800 | 828 | then throw("You have 0 available SWOP") | |
801 | 829 | else { | |
802 | - | let | |
803 | - | if (( | |
830 | + | let dR = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, dT)]) | |
831 | + | if ((dR == dR)) | |
804 | 832 | then nil | |
805 | 833 | else throw("Strict value is not equal to itself.") | |
806 | 834 | } | |
808 | 836 | ||
809 | 837 | ||
810 | 838 | ||
811 | - | @Callable( | |
812 | - | func updateUserBoostInterest ( | |
839 | + | @Callable(aw) | |
840 | + | func updateUserBoostInterest (aJ,aO) = valueOrElse(cO(), if ((aw.caller != aj)) | |
813 | 841 | then throw("Only voiting can call this function") | |
814 | 842 | else { | |
815 | - | let | |
816 | - | let | |
817 | - | let | |
818 | - | let | |
819 | - | let | |
820 | - | let | |
821 | - | [IntegerEntry(((( | |
843 | + | let dU = bO(aJ, aO) | |
844 | + | let bp = dU._1 | |
845 | + | let bq = dU._2 | |
846 | + | let cy = dU._3 | |
847 | + | let dp = dU._4 | |
848 | + | let dq = (ba(aJ, aO) + cy) | |
849 | + | [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
822 | 850 | }) | |
823 | 851 | ||
824 | 852 | ||
825 | 853 | ||
826 | - | @Callable( | |
827 | - | func shutdown () = valueOrElse( | |
828 | - | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, | |
829 | - | else | |
854 | + | @Callable(aw) | |
855 | + | func shutdown () = valueOrElse(cP(aw), if (!(ap)) | |
856 | + | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified"))) | |
857 | + | else cM("Paused by admin")) | |
830 | 858 | ||
831 | 859 | ||
832 | 860 | ||
833 | - | @Callable( | |
834 | - | func activate () = valueOrElse( | |
861 | + | @Callable(aw) | |
862 | + | func activate () = valueOrElse(cP(aw), if (ap) | |
835 | 863 | then throw("DApp is already active") | |
836 | - | else [BooleanEntry(a, true), DeleteEntry( | |
864 | + | else [BooleanEntry(a, true), DeleteEntry(d)]) | |
837 | 865 | ||
838 | 866 | ||
839 | - | @Verifier( | |
840 | - | func | |
841 | - | let | |
842 | - | let | |
867 | + | @Verifier(dV) | |
868 | + | func dW () = { | |
869 | + | let ac = dV | |
870 | + | let dX = if (sigVerify(dV.bodyBytes, dV.proofs[0], af)) | |
843 | 871 | then 1 | |
844 | 872 | else 0 | |
845 | - | let | |
873 | + | let dY = if (sigVerify(dV.bodyBytes, dV.proofs[1], ag)) | |
846 | 874 | then 1 | |
847 | 875 | else 0 | |
848 | - | let | |
876 | + | let dZ = if (sigVerify(dV.bodyBytes, dV.proofs[2], ah)) | |
849 | 877 | then 1 | |
850 | 878 | else 0 | |
851 | - | ((( | |
879 | + | (((dX + dY) + dZ) >= 2) | |
852 | 880 | } | |
853 | 881 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "active" | |
5 | 5 | ||
6 | 6 | let b = "active_all_contracts" | |
7 | 7 | ||
8 | - | let c = " | |
8 | + | let c = "deprecated_" | |
9 | 9 | ||
10 | - | let d = "_ | |
10 | + | let d = "shutdown_cause" | |
11 | 11 | ||
12 | - | let e = "_ | |
12 | + | let e = "_current_pool_fraction_reward" | |
13 | 13 | ||
14 | - | let f = "_pool_reward | |
14 | + | let f = "_previous_pool_fraction_reward" | |
15 | 15 | ||
16 | - | let g = "reward_update_height" | |
16 | + | let g = "_pool_reward_update_height" | |
17 | 17 | ||
18 | - | let h = "_ | |
18 | + | let h = "reward_update_height" | |
19 | 19 | ||
20 | - | let i = "_share_tokens_ | |
20 | + | let i = "_share_tokens_locked" | |
21 | 21 | ||
22 | - | let j = "_share_tokens_blocked | |
22 | + | let j = "_share_tokens_blocked" | |
23 | 23 | ||
24 | - | let k = "_share_tokens_blocked_ | |
24 | + | let k = "_share_tokens_blocked_type" | |
25 | 25 | ||
26 | - | let l = "_share_tokens_ | |
26 | + | let l = "_share_tokens_blocked_height" | |
27 | 27 | ||
28 | - | let m = "_ | |
28 | + | let m = "_share_tokens_virtual" | |
29 | 29 | ||
30 | - | let n = "_total_share_tokens_ | |
30 | + | let n = "_total_share_tokens_locked" | |
31 | 31 | ||
32 | - | let o = "_ | |
32 | + | let o = "_total_share_tokens_virtual" | |
33 | 33 | ||
34 | - | let p = "lock_ | |
34 | + | let p = "_lock_params" | |
35 | 35 | ||
36 | - | let q = "_ | |
36 | + | let q = "lock_waves_fee" | |
37 | 37 | ||
38 | - | let r = "_ | |
38 | + | let r = "_boost_coef" | |
39 | 39 | ||
40 | 40 | let s = "_last_interest" | |
41 | 41 | ||
42 | - | let t = "_last_interest | |
42 | + | let t = "_last_interest" | |
43 | 43 | ||
44 | - | let u = "_last_interest_ | |
44 | + | let u = "_last_interest_b" | |
45 | 45 | ||
46 | - | let v = "_last_interest_ | |
46 | + | let v = "_last_interest_u_b" | |
47 | 47 | ||
48 | - | let w = " | |
48 | + | let w = "_last_interest_height" | |
49 | 49 | ||
50 | - | let x = "_ | |
50 | + | let x = "SWOP_id" | |
51 | 51 | ||
52 | - | let y = "_ | |
52 | + | let y = "_available_SWOP" | |
53 | 53 | ||
54 | - | let z = "_pool_vote_gSWOP" | |
54 | + | let z = "_harvest_pool_vote_gSWOP" | |
55 | 55 | ||
56 | - | let A = "_ | |
56 | + | let A = "_pool_vote_gSWOP" | |
57 | 57 | ||
58 | - | let B = "_ | |
58 | + | let B = "_user_vote_gSWOP" | |
59 | 59 | ||
60 | - | let C = "_ | |
60 | + | let C = "_pool_struc" | |
61 | 61 | ||
62 | - | let D = "_ | |
62 | + | let D = "_user_pool_struc" | |
63 | 63 | ||
64 | - | let E = " | |
64 | + | let E = "_harvest_user_pool_vote_gSWOP" | |
65 | 65 | ||
66 | - | let F = " | |
66 | + | let F = "first_harvest_height" | |
67 | 67 | ||
68 | - | let G = "_ | |
68 | + | let G = "share_limit_on_first_harvest" | |
69 | 69 | ||
70 | - | let H = " | |
70 | + | let H = "_strat_b_farm_interest" | |
71 | 71 | ||
72 | - | let I = " | |
72 | + | let I = "cpmm_contract" | |
73 | 73 | ||
74 | - | let J = "admin_pub_ | |
74 | + | let J = "admin_pub_1" | |
75 | 75 | ||
76 | - | let K = "admin_pub_ | |
76 | + | let K = "admin_pub_2" | |
77 | 77 | ||
78 | - | let L = "admin_ | |
78 | + | let L = "admin_pub_3" | |
79 | 79 | ||
80 | - | let M = " | |
80 | + | let M = "admin_invoke_pub" | |
81 | 81 | ||
82 | - | let N = " | |
82 | + | let N = "money_box_address" | |
83 | 83 | ||
84 | - | let O = " | |
84 | + | let O = "voting_address" | |
85 | 85 | ||
86 | - | let P = " | |
86 | + | let P = "governance_address" | |
87 | 87 | ||
88 | - | let Q = "farming | |
88 | + | let Q = "lp_farming" | |
89 | 89 | ||
90 | - | let R = | |
90 | + | let R = "farming_treasure" | |
91 | 91 | ||
92 | - | let S = | |
92 | + | let S = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom') | |
93 | 93 | ||
94 | - | let T = | |
94 | + | let T = 10000000000 | |
95 | 95 | ||
96 | - | let U = | |
96 | + | let U = 100000000 | |
97 | 97 | ||
98 | - | let V = | |
98 | + | let V = 1000 | |
99 | 99 | ||
100 | - | let W = | |
100 | + | let W = 500 | |
101 | 101 | ||
102 | - | let X = | |
102 | + | let X = 2976848 | |
103 | 103 | ||
104 | - | let Y = | |
104 | + | let Y = 100000000000000 | |
105 | 105 | ||
106 | - | func Z (aa) = { | |
107 | - | let ab = getString(R, aa) | |
108 | - | if ($isInstanceOf(ab, "String")) | |
106 | + | let Z = 526330 | |
107 | + | ||
108 | + | func aa (ab) = { | |
109 | + | let ac = getString(S, ab) | |
110 | + | if ($isInstanceOf(ac, "String")) | |
109 | 111 | then { | |
110 | - | let | |
111 | - | fromBase58String( | |
112 | + | let ad = ac | |
113 | + | fromBase58String(ad) | |
112 | 114 | } | |
113 | 115 | else { | |
114 | - | let | |
115 | - | throw(( | |
116 | + | let ae = ac | |
117 | + | throw((ab + "is empty")) | |
116 | 118 | } | |
117 | 119 | } | |
118 | 120 | ||
119 | 121 | ||
120 | - | let | |
122 | + | let af = aa(J) | |
121 | 123 | ||
122 | - | let | |
124 | + | let ag = aa(K) | |
123 | 125 | ||
124 | - | let | |
126 | + | let ah = aa(L) | |
125 | 127 | ||
126 | - | let | |
128 | + | let ai = Address(aa(N)) | |
127 | 129 | ||
128 | - | let | |
130 | + | let aj = Address(aa(O)) | |
129 | 131 | ||
130 | - | let | |
132 | + | let ak = Address(aa(P)) | |
131 | 133 | ||
132 | - | let | |
134 | + | let al = aa(M) | |
133 | 135 | ||
134 | - | let | |
136 | + | let am = Address(aa(Q)) | |
135 | 137 | ||
136 | - | let | |
138 | + | let an = Address(aa(R)) | |
137 | 139 | ||
138 | - | let | |
140 | + | let ao = Address(aa(I)) | |
139 | 141 | ||
140 | - | let | |
142 | + | let ap = getBooleanValue(this, a) | |
141 | 143 | ||
142 | - | let | |
144 | + | let aq = valueOrElse(getBoolean(S, b), true) | |
143 | 145 | ||
144 | - | let | |
146 | + | let ar = fromBase58String(getStringValue(this, x)) | |
145 | 147 | ||
146 | - | func | |
147 | - | let | |
148 | - | func | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | if (( | |
153 | - | then $Tuple2(fraction( | |
154 | - | else $Tuple2( | |
148 | + | func as () = { | |
149 | + | let at = ((height - X) / Z) | |
150 | + | func au (av,aw) = { | |
151 | + | let ax = av | |
152 | + | let ay = ax._1 | |
153 | + | let az = ax._2 | |
154 | + | if ((at > aw)) | |
155 | + | then $Tuple2(fraction(ay, 75, 100), ay) | |
156 | + | else $Tuple2(ay, az) | |
155 | 157 | } | |
156 | 158 | ||
157 | - | let | |
158 | - | let | |
159 | - | let | |
160 | - | let | |
161 | - | func | |
162 | - | then | |
163 | - | else | |
159 | + | let aA = { | |
160 | + | let aB = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] | |
161 | + | let aC = size(aB) | |
162 | + | let aD = $Tuple2(Y, Y) | |
163 | + | func aE (aF,aG) = if ((aG >= aC)) | |
164 | + | then aF | |
165 | + | else au(aF, aB[aG]) | |
164 | 166 | ||
165 | - | func | |
166 | - | then | |
167 | + | func aH (aF,aG) = if ((aG >= aC)) | |
168 | + | then aF | |
167 | 169 | else throw("List size exceeds 20") | |
168 | 170 | ||
169 | - | | |
171 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
170 | 172 | } | |
171 | - | let | |
172 | - | let | |
173 | - | $Tuple3(( | |
173 | + | let ay = aA._1 | |
174 | + | let az = aA._2 | |
175 | + | $Tuple3((ay / Z), (az / Z), (X + (Z * at))) | |
174 | 176 | } | |
175 | 177 | ||
176 | 178 | ||
177 | - | func | |
179 | + | func aI (aJ) = valueOrElse(getInteger(Address(fromBase58String(aJ)), F), 0) | |
178 | 180 | ||
179 | 181 | ||
180 | - | func | |
182 | + | func aK (aJ) = valueOrErrorMessage(getInteger(aJ, G), ("No data on the key: " + G)) | |
181 | 183 | ||
182 | 184 | ||
183 | - | func | |
185 | + | func aL (aJ) = valueOrErrorMessage(getInteger(this, (aJ + n)), (("No data on the key: " + aJ) + n)) | |
184 | 186 | ||
185 | 187 | ||
186 | - | func | |
188 | + | func aM (aJ) = valueOrElse(getInteger(aj, (aJ + A)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (aJ + C)), ""), "_")[0]), 0)) | |
187 | 189 | ||
188 | 190 | ||
189 | - | func | |
191 | + | func aN (aJ,aO) = valueOrElse(getInteger(aj, (((aO + "_") + aJ) + B)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (((aO + "_") + aJ) + D)), ""), "_")[0]), 0)) | |
190 | 192 | ||
191 | 193 | ||
192 | - | func | |
194 | + | func aP (aJ) = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
193 | 195 | ||
194 | 196 | ||
195 | - | func | |
196 | - | let | |
197 | - | if ($isInstanceOf( | |
197 | + | func aQ (aR) = { | |
198 | + | let ac = aR | |
199 | + | if ($isInstanceOf(ac, "ByteVector")) | |
198 | 200 | then { | |
199 | - | let | |
200 | - | assetBalance(this, | |
201 | + | let aS = ac | |
202 | + | assetBalance(this, aS) | |
201 | 203 | } | |
202 | - | else if ($isInstanceOf( | |
204 | + | else if ($isInstanceOf(ac, "Unit")) | |
203 | 205 | then { | |
204 | - | let | |
206 | + | let aT = ac | |
205 | 207 | wavesBalance(this).available | |
206 | 208 | } | |
207 | 209 | else throw("Match error") | |
208 | 210 | } | |
209 | 211 | ||
210 | 212 | ||
211 | - | func aT (aU,aV) = { | |
212 | - | let aW = value(assetInfo(aU)).decimals | |
213 | + | func aU (aV,aW) = { | |
213 | 214 | let aX = value(assetInfo(aV)).decimals | |
214 | - | let aY = ((aX - aW) + 8) | |
215 | - | pow(10, 0, aY, 0, 0, DOWN) | |
215 | + | let aY = value(assetInfo(aW)).decimals | |
216 | + | let aZ = ((aY - aX) + 8) | |
217 | + | pow(10, 0, aZ, 0, 0, DOWN) | |
216 | 218 | } | |
217 | 219 | ||
218 | 220 | ||
219 | - | func | |
221 | + | func ba (aJ,aO) = valueOrElse(getInteger(this, (((aJ + "_") + aO) + y)), 0) | |
220 | 222 | ||
221 | 223 | ||
222 | - | func | |
223 | - | let | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | let | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | if (if (( | |
224 | + | func bb (aJ) = { | |
225 | + | let bc = as() | |
226 | + | let bd = bc._1 | |
227 | + | let be = bc._2 | |
228 | + | let bf = bc._3 | |
229 | + | let bg = valueOrErrorMessage(getInteger(ak, (aJ + e)), (((("No data on the key: " + aJ) + e) + " at address ") + toString(ak))) | |
230 | + | let bh = valueOrErrorMessage(getInteger(ak, h), ((("No data on the key: " + h) + " at address ") + toString(ak))) | |
231 | + | let bi = valueOrElse(getInteger(ak, (aJ + g)), bh) | |
232 | + | let bj = valueOrErrorMessage(getInteger(ak, (aJ + f)), (((("No data on the key: " + aJ) + f) + " at address ") + toString(ak))) | |
233 | + | let bk = fraction(bd, bg, T) | |
234 | + | let bl = fraction(bd, bj, T) | |
235 | + | let bm = fraction(be, bg, T) | |
236 | + | let bn = fraction(be, bj, T) | |
237 | + | if (if ((bk > bd)) | |
236 | 238 | then true | |
237 | - | else ( | |
239 | + | else (bl > be)) | |
238 | 240 | then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious") | |
239 | - | else $Tuple7( | |
241 | + | else $Tuple7(bk, bh, bl, bi, bf, bm, bn) | |
240 | 242 | } | |
241 | 243 | ||
242 | 244 | ||
243 | - | func | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | $Tuple3( | |
245 | + | func bo (aJ) = { | |
246 | + | let bp = valueOrErrorMessage(getInteger(this, (aJ + s)), (("No data on the key: " + aJ) + s)) | |
247 | + | let bq = valueOrElse(getInteger(this, (aJ + u)), 0) | |
248 | + | let br = valueOrElse(getInteger(this, (aJ + w)), height) | |
249 | + | $Tuple3(br, bp, bq) | |
248 | 250 | } | |
249 | 251 | ||
250 | 252 | ||
251 | - | func | |
252 | - | let | |
253 | - | fraction( | |
253 | + | func bs (aJ,bt) = { | |
254 | + | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
255 | + | fraction(bt, V, (bu + V)) | |
254 | 256 | } | |
255 | 257 | ||
256 | 258 | ||
257 | - | func | |
258 | - | let | |
259 | - | fraction( | |
259 | + | func bv (aJ,bt) = { | |
260 | + | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
261 | + | fraction(bt, bu, (bu + V)) | |
260 | 262 | } | |
261 | 263 | ||
262 | 264 | ||
263 | - | func | |
264 | - | let | |
265 | - | then ( | |
265 | + | func bw (aJ,br,bh,bi,bp,bq,bx,by,bz,bA,bB,bC) = { | |
266 | + | let bD = if (if (if ((bh > bC)) | |
267 | + | then (bh == bi) | |
266 | 268 | else false) | |
267 | 269 | then true | |
268 | - | else if (( | |
269 | - | then ( | |
270 | + | else if ((bC > bh)) | |
271 | + | then (bh != bi) | |
270 | 272 | else false) | |
271 | 273 | then { | |
272 | - | let | |
273 | - | $Tuple3( | |
274 | + | let bE = (bA * (bC - br)) | |
275 | + | $Tuple3(bE, bp, bq) | |
274 | 276 | } | |
275 | - | else if (if (if (( | |
276 | - | then ( | |
277 | + | else if (if (if ((bC > bh)) | |
278 | + | then (bh == bi) | |
277 | 279 | else false) | |
278 | - | then ( | |
280 | + | then (br > bh) | |
279 | 281 | else false) | |
280 | 282 | then { | |
281 | - | let | |
282 | - | $Tuple3( | |
283 | + | let bE = (by * (bC - br)) | |
284 | + | $Tuple3(bE, bp, bq) | |
283 | 285 | } | |
284 | 286 | else { | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | then fraction( | |
287 | + | let bF = (bA * (bh - br)) | |
288 | + | let bG = (bp + fraction(bs(aJ, bF), bB, bz)) | |
289 | + | let bH = (bq + (if ((bx > 0)) | |
290 | + | then fraction(bv(aJ, bF), U, bx) | |
289 | 291 | else 0)) | |
290 | - | let | |
291 | - | $Tuple3( | |
292 | + | let bI = (by * (bC - bh)) | |
293 | + | $Tuple3(bI, bG, bH) | |
292 | 294 | } | |
293 | - | let | |
294 | - | let | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | then fraction( | |
295 | + | let bJ = bD._1 | |
296 | + | let bK = bD._2 | |
297 | + | let bL = bD._3 | |
298 | + | let bM = (bK + fraction(bs(aJ, bJ), bB, bz)) | |
299 | + | let bN = (bL + (if ((bx > 0)) | |
300 | + | then fraction(bv(aJ, bJ), U, bx) | |
299 | 301 | else 0)) | |
300 | - | $Tuple2( | |
302 | + | $Tuple2(bM, bN) | |
301 | 303 | } | |
302 | 304 | ||
303 | 305 | ||
304 | - | func | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | then ( | |
306 | + | func bO (aJ,aO) = { | |
307 | + | let bB = aU(ar, aP(aJ)) | |
308 | + | let bx = aM(aJ) | |
309 | + | let bP = aN(aJ, aO) | |
310 | + | let bQ = aL(aJ) | |
311 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), bQ) | |
312 | + | let bS = valueOrElse(getInteger(this, (aJ + H)), 0) | |
313 | + | let bT = bo(aJ) | |
314 | + | let br = bT._1 | |
315 | + | let bp = bT._2 | |
316 | + | let bq = bT._3 | |
317 | + | let bU = bb(aJ) | |
318 | + | let by = bU._1 | |
319 | + | let bh = bU._2 | |
320 | + | let bA = bU._3 | |
321 | + | let bi = bU._4 | |
322 | + | let bV = bU._5 | |
323 | + | let bW = bU._6 | |
324 | + | let bX = bU._7 | |
325 | + | let bY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + t)), bp) | |
326 | + | let bZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + v)), if (if ((bS > bY)) | |
327 | + | then (bP > 0) | |
326 | 328 | else false) | |
327 | 329 | then 0 | |
328 | - | else | |
329 | - | let | |
330 | - | let | |
331 | - | if (( | |
330 | + | else bq) | |
331 | + | let ca = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
332 | + | let cb = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), ca) | |
333 | + | if ((bR == 0)) | |
332 | 334 | then { | |
333 | - | let | |
334 | - | then (( | |
335 | - | else ( | |
336 | - | $Tuple4( | |
335 | + | let cc = if ((bV > br)) | |
336 | + | then ((bW * (bV - br)) + (by * (height - bV))) | |
337 | + | else (by * (height - br)) | |
338 | + | $Tuple4(bp, bq, 0, cc) | |
337 | 339 | } | |
338 | 340 | else { | |
339 | - | let | |
341 | + | let cd = if ((bV > br)) | |
340 | 342 | then { | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | $Tuple3( | |
343 | + | let ce = bw(aJ, br, bh, bi, bp, bq, bx, bW, bR, bX, bB, bV) | |
344 | + | let cf = ce._1 | |
345 | + | let cg = ce._2 | |
346 | + | $Tuple3(cf, cg, bV) | |
345 | 347 | } | |
346 | - | else $Tuple3( | |
347 | - | let | |
348 | - | let | |
349 | - | let | |
350 | - | let | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | if ((0 > | |
348 | + | else $Tuple3(bp, bq, br) | |
349 | + | let ch = cd._1 | |
350 | + | let ci = cd._2 | |
351 | + | let cj = cd._3 | |
352 | + | let ck = bw(aJ, cj, bh, bi, ch, ci, bx, by, bR, bA, bB, height) | |
353 | + | let bM = ck._1 | |
354 | + | let bN = ck._2 | |
355 | + | let cl = fraction(cb, (bM - bY), bB) | |
356 | + | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
357 | + | let cm = fraction(fraction(cb, (bM - max([bY, bS])), bB), bu, V) | |
358 | + | let cn = fraction((bN - bZ), bP, U) | |
359 | + | let co = min([cm, cn]) | |
360 | + | let cc = (cm - co) | |
361 | + | if ((0 > cc)) | |
360 | 362 | then throw("toTreasury < 0") | |
361 | - | else $Tuple4( | |
363 | + | else $Tuple4(bM, bN, (cl + co), cc) | |
362 | 364 | } | |
363 | 365 | } | |
364 | 366 | ||
365 | 367 | ||
366 | - | func | |
367 | - | func | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
377 | - | $Tuple2(( | |
368 | + | func cp (cq,aO) = { | |
369 | + | func cr (av,aJ) = { | |
370 | + | let cs = av | |
371 | + | let ct = cs._1 | |
372 | + | let cu = cs._2 | |
373 | + | let cv = bO(aJ, aO) | |
374 | + | let cw = cv._1 | |
375 | + | let cx = cv._2 | |
376 | + | let cy = cv._3 | |
377 | + | let cz = cv._4 | |
378 | + | let cA = (ba(aJ, aO) + cy) | |
379 | + | $Tuple2((ct :+ aJ), (cu :+ cA)) | |
378 | 380 | } | |
379 | 381 | ||
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | func | |
384 | - | then | |
385 | - | else | |
382 | + | let aB = cq | |
383 | + | let aC = size(aB) | |
384 | + | let aD = $Tuple2(nil, nil) | |
385 | + | func aE (aF,aG) = if ((aG >= aC)) | |
386 | + | then aF | |
387 | + | else cr(aF, aB[aG]) | |
386 | 388 | ||
387 | - | func | |
388 | - | then | |
389 | + | func aH (aF,aG) = if ((aG >= aC)) | |
390 | + | then aF | |
389 | 391 | else throw("List size exceeds 60") | |
390 | 392 | ||
391 | - | | |
393 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
392 | 394 | } | |
393 | 395 | ||
394 | 396 | ||
395 | - | func | |
397 | + | func cB (aJ,aO,cC,cD,cE) = if ((aI(aJ) > height)) | |
396 | 398 | then { | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | if (( | |
399 | + | let cF = valueOrElse(getInteger(aj, (aJ + z)), 0) | |
400 | + | let cG = valueOrElse(getInteger(aj, (((aO + "_") + aJ) + E)), 0) | |
401 | + | let cH = aK(addressFromStringValue(aJ)) | |
402 | + | let cI = (fraction(cH, cG, cF) - cC) | |
403 | + | if ((cE > 0)) | |
402 | 404 | then throw("You can't lock shareTokens till first harvest end.") | |
403 | - | else if (( | |
405 | + | else if ((cG == 0)) | |
404 | 406 | then 0 | |
405 | - | else if (( | |
406 | - | then ( | |
407 | + | else if ((cD >= cI)) | |
408 | + | then (cD - cI) | |
407 | 409 | else 0 | |
408 | 410 | } | |
409 | 411 | else 0 | |
410 | 412 | ||
411 | 413 | ||
412 | - | func | |
413 | - | let | |
414 | - | $Tuple2(parseIntValue( | |
414 | + | func cJ (cK) = { | |
415 | + | let cL = split(valueOrErrorMessage(getString(this, (toString(cK) + p)), ("There are no key for lock type" + toString(cK))), "_") | |
416 | + | $Tuple2(parseIntValue(cL[0]), parseIntValue(cL[1])) | |
415 | 417 | } | |
416 | 418 | ||
417 | 419 | ||
418 | - | func | |
420 | + | func cM (cN) = [BooleanEntry(a, false), StringEntry(d, cN)] | |
419 | 421 | ||
420 | 422 | ||
421 | - | func | |
422 | - | then | |
423 | + | func cO () = if (if (ap) | |
424 | + | then aq | |
423 | 425 | else false) | |
424 | 426 | then unit | |
425 | 427 | else throw("DApp is inactive at this moment") | |
426 | 428 | ||
427 | 429 | ||
428 | - | func | |
430 | + | func cP (aw) = if (containsElement([af, ag, ah], aw.callerPublicKey)) | |
429 | 431 | then unit | |
430 | 432 | else throw("Only admin can call this function") | |
431 | 433 | ||
432 | 434 | ||
433 | - | func | |
435 | + | func cQ (aw,aJ) = if (if ((toString(aw.caller) == aJ)) | |
434 | 436 | then true | |
435 | - | else ( | |
437 | + | else (aw.caller == ao)) | |
436 | 438 | then unit | |
437 | 439 | else throw("Only pool can call this function") | |
438 | 440 | ||
439 | 441 | ||
440 | - | func cQ (av) = if ((av.caller == this)) | |
442 | + | func cR (aJ) = valueOrElse(getBoolean(S, (c + aJ)), false) | |
443 | + | ||
444 | + | ||
445 | + | func cS (aJ) = if (!(cR(aJ))) | |
446 | + | then unit | |
447 | + | else throw("Pool is deprecated. Only unlock action allowed.") | |
448 | + | ||
449 | + | ||
450 | + | func cT (aw) = if ((aw.caller == this)) | |
441 | 451 | then unit | |
442 | 452 | else throw("Only contract itself can call this function") | |
443 | 453 | ||
444 | 454 | ||
445 | - | func | |
446 | - | let | |
447 | - | let | |
448 | - | let | |
449 | - | let | |
450 | - | let | |
451 | - | let | |
452 | - | let | |
453 | - | let | |
454 | - | let | |
455 | - | let | |
456 | - | let | |
457 | - | let | |
458 | - | let | |
459 | - | if (( | |
455 | + | func cU (aw,cV,aJ,cE) = { | |
456 | + | let cW = aP(aJ) | |
457 | + | let aO = toString(cV) | |
458 | + | let cX = aL(aJ) | |
459 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), cX) | |
460 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
461 | + | let cZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + l)), 0) | |
462 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
463 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
464 | + | let dc = ((cY + da) + aw.payments[0].amount) | |
465 | + | let dd = cJ(cE) | |
466 | + | let de = dd._1 | |
467 | + | let df = dd._2 | |
468 | + | let dg = getIntegerValue(this, q) | |
469 | + | if ((aw.payments[0].assetId != cW)) | |
460 | 470 | then throw("Wrong sharetoken in payment") | |
461 | - | else if ((0 >= | |
471 | + | else if ((0 >= aw.payments[0].amount)) | |
462 | 472 | then throw("Payment amount must be greater than 0") | |
463 | - | else if ((0 > | |
473 | + | else if ((0 > cE)) | |
464 | 474 | then throw("lockType must be >= 0") | |
465 | 475 | else { | |
466 | - | let | |
467 | - | if (( | |
476 | + | let dh = cB(aJ, aO, cY, aw.payments[0].amount, cE) | |
477 | + | if ((dh == dh)) | |
468 | 478 | then { | |
469 | - | let | |
479 | + | let di = if ((cE == 0)) | |
470 | 480 | then { | |
471 | - | let | |
472 | - | $Tuple2([IntegerEntry(((( | |
481 | + | let dj = ((db + aw.payments[0].amount) - dh) | |
482 | + | $Tuple2([IntegerEntry((((aJ + "_") + aO) + i), ((cY + aw.payments[0].amount) - dh)), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR + aw.payments[0].amount) - dh)), ScriptTransfer(cV, dh, aw.payments[0].assetId)], ((cX + aw.payments[0].amount) - dh)) | |
473 | 483 | } | |
474 | - | else if (if (( | |
475 | - | then if (if ((2 > size( | |
484 | + | else if (if ((cZ == 0)) | |
485 | + | then if (if ((2 > size(aw.payments))) | |
476 | 486 | then true | |
477 | - | else ( | |
487 | + | else (aw.payments[1].assetId != unit)) | |
478 | 488 | then true | |
479 | - | else ( | |
489 | + | else (dg > aw.payments[1].amount) | |
480 | 490 | else false) | |
481 | - | then throw((("You need to pay additional waves comission " + toString( | |
482 | - | else if (( | |
491 | + | then throw((("You need to pay additional waves comission " + toString(dg)) + "WAVES")) | |
492 | + | else if ((cZ > (height + de))) | |
483 | 493 | then throw("You cannot lock sharetokens for a period less than what you have already locked") | |
484 | 494 | else { | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
488 | - | $Tuple2([IntegerEntry(((( | |
495 | + | let dk = (da + aw.payments[0].amount) | |
496 | + | let dl = (height + de) | |
497 | + | let dj = (fraction(dk, df, V) + cY) | |
498 | + | $Tuple2([IntegerEntry((((aJ + "_") + aO) + j), dk), IntegerEntry((((aJ + "_") + aO) + l), dl), IntegerEntry((((aJ + "_") + aO) + k), cE), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR - db) + dj))], (cX + aw.payments[0].amount)) | |
489 | 499 | } | |
490 | - | let | |
491 | - | let | |
492 | - | if (( | |
500 | + | let dm = di._1 | |
501 | + | let dn = di._2 | |
502 | + | if ((aQ(cW) > dn)) | |
493 | 503 | then throw("Balance of share-token is lower than totalAmount") | |
494 | 504 | else { | |
495 | - | let | |
496 | - | let | |
497 | - | let | |
498 | - | let | |
499 | - | let | |
500 | - | let | |
501 | - | let | |
502 | - | then invoke( | |
505 | + | let do = bO(aJ, aO) | |
506 | + | let bp = do._1 | |
507 | + | let bq = do._2 | |
508 | + | let cy = do._3 | |
509 | + | let dp = do._4 | |
510 | + | let dq = (ba(aJ, aO) + cy) | |
511 | + | let dr = if ((getString(Address(fromBase58String(aJ)), "version") == "3.0.0")) | |
512 | + | then invoke(am, "updateUserInterest", [aO, aJ, dc], nil) | |
503 | 513 | else 0 | |
504 | - | if (( | |
505 | - | then ([IntegerEntry(((( | |
514 | + | if ((dr == dr)) | |
515 | + | then ([IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((aJ + n), dn), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] ++ dm) | |
506 | 516 | else throw("Strict value is not equal to itself.") | |
507 | 517 | } | |
508 | 518 | } | |
509 | 519 | else throw("Strict value is not equal to itself.") | |
510 | 520 | } | |
511 | 521 | } | |
512 | 522 | ||
513 | 523 | ||
514 | - | func dp (av,cS,aI,dq) = valueOrElse(cN(), { | |
515 | - | let dr = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id")) | |
516 | - | let aN = toString(cS) | |
517 | - | let ds = bN(aI, aN) | |
518 | - | let bo = ds._1 | |
519 | - | let bp = ds._2 | |
520 | - | let cx = ds._3 | |
521 | - | let dm = ds._4 | |
522 | - | let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0) | |
523 | - | let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0) | |
524 | - | let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV) | |
525 | - | let dt = (cV - dq) | |
526 | - | let dn = (aZ(aI, aN) + cx) | |
527 | - | let du = aK(aI) | |
528 | - | let bQ = valueOrElse(getInteger(this, (aI + n)), du) | |
529 | - | let dv = (du - dq) | |
530 | - | let dw = (bQ - dq) | |
531 | - | let dg = (cY - dq) | |
532 | - | if ((dq > cV)) | |
533 | - | then throw("Withdraw amount more then user locked amount") | |
534 | - | else if ((aP(dr) > du)) | |
535 | - | then throw("Balance of share-token is lower than totalAmount") | |
536 | - | else { | |
537 | - | let do = if ((getString(Address(fromBase58String(aI)), "version") == "3.0.0")) | |
538 | - | then invoke(al, "updateUserInterest", [aN, aI, (cV + cX)], nil) | |
539 | - | else 0 | |
540 | - | if ((do == do)) | |
541 | - | then [IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + m), dv), IntegerEntry((aI + n), dw), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dq, dr)] | |
542 | - | else throw("Strict value is not equal to itself.") | |
543 | - | } | |
544 | - | }) | |
524 | + | func ds (aw,cV,aJ,dt) = { | |
525 | + | let du = if (cR(aJ)) | |
526 | + | then invoke(this, "unlockUserLockDeprecated", [aJ, toString(cV)], nil) | |
527 | + | else 0 | |
528 | + | if ((du == du)) | |
529 | + | then { | |
530 | + | let dv = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
531 | + | let aO = toString(cV) | |
532 | + | let dw = bO(aJ, aO) | |
533 | + | let bp = dw._1 | |
534 | + | let bq = dw._2 | |
535 | + | let cy = dw._3 | |
536 | + | let dp = dw._4 | |
537 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
538 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
539 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
540 | + | let dx = (cY - dt) | |
541 | + | let dq = (ba(aJ, aO) + cy) | |
542 | + | let dy = aL(aJ) | |
543 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), dy) | |
544 | + | let dz = (dy - dt) | |
545 | + | let dA = (bR - dt) | |
546 | + | let dj = (db - dt) | |
547 | + | if ((dt > cY)) | |
548 | + | then throw("Withdraw amount more then user locked amount") | |
549 | + | else if ((aQ(dv) > dy)) | |
550 | + | then throw("Balance of share-token is lower than totalAmount") | |
551 | + | else { | |
552 | + | let dr = if ((getString(Address(fromBase58String(aJ)), "version") == "3.0.0")) | |
553 | + | then invoke(am, "updateUserInterest", [aO, aJ, (cY + da)], nil) | |
554 | + | else 0 | |
555 | + | if ((dr == dr)) | |
556 | + | then [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + n), dz), IntegerEntry((aJ + o), dA), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar), ScriptTransfer(aw.caller, dt, dv)] | |
557 | + | else throw("Strict value is not equal to itself.") | |
558 | + | } | |
559 | + | } | |
560 | + | else throw("Strict value is not equal to itself.") | |
561 | + | } | |
545 | 562 | ||
546 | 563 | ||
547 | - | func | |
548 | - | let | |
549 | - | let | |
550 | - | let | |
551 | - | let | |
552 | - | let | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | if (( | |
564 | + | func dB (aw,aJ,cV) = { | |
565 | + | let dv = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
566 | + | let aO = toString(cV) | |
567 | + | let bz = aL(aJ) | |
568 | + | let dC = bO(aJ, aO) | |
569 | + | let bp = dC._1 | |
570 | + | let bq = dC._2 | |
571 | + | let cy = dC._3 | |
572 | + | let dp = dC._4 | |
573 | + | let cA = (ba(aJ, aO) + cy) | |
574 | + | if ((aQ(dv) > bz)) | |
558 | 575 | then throw("Balance of share-token is lower than totalAmount") | |
559 | 576 | else { | |
560 | - | let | |
561 | - | then [ScriptTransfer( | |
577 | + | let dD = if ((aw.caller != this)) | |
578 | + | then [ScriptTransfer(aw.caller, cA, ar)] | |
562 | 579 | else nil | |
563 | - | $Tuple2(([IntegerEntry(((( | |
580 | + | $Tuple2(([IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), 0), Reissue(ar, (dp + cA), true), ScriptTransfer(an, dp, ar)] ++ dD), cA) | |
564 | 581 | } | |
565 | 582 | } | |
566 | 583 | ||
567 | 584 | ||
568 | - | @Callable(av) | |
569 | - | func init (dA) = if (isDefined(getString(this, w))) | |
585 | + | func dE (aw,aJ,aO) = { | |
586 | + | let bR = getIntegerValue(this, (aJ + o)) | |
587 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
588 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
589 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
590 | + | let dx = (cY + da) | |
591 | + | let dF = bO(aJ, aO) | |
592 | + | let bp = dF._1 | |
593 | + | let bq = dF._2 | |
594 | + | let cy = dF._3 | |
595 | + | let dp = dF._4 | |
596 | + | let dq = (ba(aJ, aO) + cy) | |
597 | + | [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + m), dx), IntegerEntry((aJ + o), ((bR - db) + dx)), IntegerEntry((((aJ + "_") + aO) + y), dq), DeleteEntry((((aJ + "_") + aO) + j)), DeleteEntry((((aJ + "_") + aO) + l)), DeleteEntry((((aJ + "_") + aO) + k)), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
598 | + | } | |
599 | + | ||
600 | + | ||
601 | + | @Callable(aw) | |
602 | + | func init (dG) = if (isDefined(getString(this, x))) | |
570 | 603 | then throw("SWOP already initialized") | |
571 | 604 | else { | |
572 | - | let | |
573 | - | let | |
574 | - | let | |
575 | - | [BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", | |
605 | + | let dH = 100000000000000 | |
606 | + | let dI = Issue("SWOP", "SWOP protocol token", dH, 8, true) | |
607 | + | let dJ = calculateAssetId(dI) | |
608 | + | [BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dH, 8, true), StringEntry(x, toBase58String(dJ))] | |
576 | 609 | } | |
577 | 610 | ||
578 | 611 | ||
579 | 612 | ||
580 | - | @Callable( | |
581 | - | func initPoolShareFarming ( | |
613 | + | @Callable(aw) | |
614 | + | func initPoolShareFarming (aJ) = valueOrElse(cP(aw), [IntegerEntry((aJ + n), 0), IntegerEntry((aJ + s), 0), IntegerEntry((aJ + u), 0), IntegerEntry((aJ + w), height)]) | |
582 | 615 | ||
583 | 616 | ||
584 | 617 | ||
585 | - | @Callable( | |
586 | - | func updatePoolInterest ( | |
618 | + | @Callable(aw) | |
619 | + | func updatePoolInterest (aJ) = valueOrElse(cO(), if ((aw.caller != ak)) | |
587 | 620 | then throw("Only Governance can call this function") | |
588 | 621 | else { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | [IntegerEntry(( | |
622 | + | let aO = toString(addressFromPublicKey(al)) | |
623 | + | let dK = bO(aJ, aO) | |
624 | + | let bp = dK._1 | |
625 | + | let bq = dK._2 | |
626 | + | let dL = dK._3 | |
627 | + | [IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height)] | |
595 | 628 | }) | |
596 | 629 | ||
597 | 630 | ||
598 | 631 | ||
599 | - | @Callable( | |
600 | - | func lockShareTokens ( | |
632 | + | @Callable(aw) | |
633 | + | func lockShareTokens (aJ,cE) = valueOrElse(cS(aJ), valueOrElse(cO(), cU(aw, aw.caller, aJ, cE))) | |
601 | 634 | ||
602 | 635 | ||
603 | 636 | ||
604 | - | @Callable( | |
605 | - | func lockShareTokensFromPool ( | |
637 | + | @Callable(aw) | |
638 | + | func lockShareTokensFromPool (dM,aJ,cE) = valueOrElse(cS(aJ), valueOrElse(cO(), valueOrElse(cQ(aw, aJ), cU(aw, Address(dM), aJ, cE)))) | |
606 | 639 | ||
607 | 640 | ||
608 | 641 | ||
609 | - | @Callable( | |
610 | - | func lockStakedShareTokens ( | |
611 | - | let | |
612 | - | let | |
613 | - | let | |
614 | - | let | |
615 | - | let | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | let | |
621 | - | let | |
622 | - | let | |
623 | - | let | |
624 | - | if (( | |
642 | + | @Callable(aw) | |
643 | + | func lockStakedShareTokens (aJ,cE,dN) = valueOrElse(cS(aJ), valueOrElse(cO(), { | |
644 | + | let cW = aP(aJ) | |
645 | + | let aO = toString(aw.caller) | |
646 | + | let cX = aL(aJ) | |
647 | + | let bR = valueOrElse(getInteger(this, (aJ + o)), cX) | |
648 | + | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
649 | + | let cZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + l)), 0) | |
650 | + | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
651 | + | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
652 | + | let dc = (cY + da) | |
653 | + | let dO = cJ(cE) | |
654 | + | let de = dO._1 | |
655 | + | let df = dO._2 | |
656 | + | let dg = getIntegerValue(this, q) | |
657 | + | if ((aI(aJ) > height)) | |
625 | 658 | then throw("You can't lock shareTokens till first harvest end.") | |
626 | - | else if ((0 >= | |
659 | + | else if ((0 >= cE)) | |
627 | 660 | then throw("lockType must be > 0") | |
628 | - | else if (( | |
629 | - | then throw(("You can't lock more than " + toString( | |
630 | - | else if (( | |
661 | + | else if ((dN > cY)) | |
662 | + | then throw(("You can't lock more than " + toString(cY))) | |
663 | + | else if ((aQ(cW) > cX)) | |
631 | 664 | then throw("Balance of share-token is lower than totalAmount") | |
632 | - | else if (if (( | |
633 | - | then if (if ((1 > size( | |
665 | + | else if (if ((cZ == 0)) | |
666 | + | then if (if ((1 > size(aw.payments))) | |
634 | 667 | then true | |
635 | - | else ( | |
668 | + | else (aw.payments[0].assetId != unit)) | |
636 | 669 | then true | |
637 | - | else ( | |
670 | + | else (dg > aw.payments[0].amount) | |
638 | 671 | else false) | |
639 | - | then throw((("You need to pay additional waves comission " + toString( | |
640 | - | else if (if (( | |
641 | - | then (0 >= | |
672 | + | then throw((("You need to pay additional waves comission " + toString(dg)) + "WAVES")) | |
673 | + | else if (if ((cZ == 0)) | |
674 | + | then (0 >= dN) | |
642 | 675 | else false) | |
643 | 676 | then throw("lockAmount must be greater than 0") | |
644 | - | else if ((0 > | |
677 | + | else if ((0 > dN)) | |
645 | 678 | then throw("lockAmount must be positive") | |
646 | - | else if (( | |
679 | + | else if ((cZ > (height + de))) | |
647 | 680 | then throw("You cannot lock sharetokens for a period less than what you have already locked") | |
648 | 681 | else { | |
649 | - | let | |
650 | - | let | |
651 | - | let | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
656 | - | let | |
657 | - | let | |
658 | - | let | |
659 | - | [IntegerEntry(((( | |
682 | + | let dk = (da + dN) | |
683 | + | let dx = (cY - dN) | |
684 | + | let dl = (height + de) | |
685 | + | let dj = (fraction(dk, df, V) + dx) | |
686 | + | let dP = bO(aJ, aO) | |
687 | + | let bp = dP._1 | |
688 | + | let bq = dP._2 | |
689 | + | let cy = dP._3 | |
690 | + | let dp = dP._4 | |
691 | + | let dq = (ba(aJ, aO) + cy) | |
692 | + | [IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + j), dk), IntegerEntry((((aJ + "_") + aO) + l), dl), IntegerEntry((((aJ + "_") + aO) + k), cE), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR - db) + dj)), IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
660 | 693 | } | |
694 | + | })) | |
695 | + | ||
696 | + | ||
697 | + | ||
698 | + | @Callable(aw) | |
699 | + | func unlockUserLock (aJ,aO) = valueOrElse(cO(), { | |
700 | + | let cZ = valueOrErrorMessage(getInteger(this, (((aJ + "_") + aO) + l)), (((("There is no pool " + aJ) + " or user ") + aO) + "with lock")) | |
701 | + | if ((cZ > height)) | |
702 | + | then throw(("You can't unlock sharetokens till " + toString(cZ))) | |
703 | + | else (dE(aw, aJ, aO) ++ [ScriptTransfer(aw.caller, getIntegerValue(this, q), unit)]) | |
661 | 704 | }) | |
662 | 705 | ||
663 | 706 | ||
664 | 707 | ||
665 | - | @Callable(av) | |
666 | - | func unlockUserLock (aI,aN) = valueOrElse(cN(), { | |
667 | - | let dd = getIntegerValue(this, p) | |
668 | - | let cW = valueOrErrorMessage(getInteger(this, (((aI + "_") + aN) + k)), (((("There is no pool " + aI) + " or user ") + aN) + "with lock")) | |
669 | - | let bQ = getIntegerValue(this, (aI + n)) | |
670 | - | let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0) | |
671 | - | let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0) | |
672 | - | let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV) | |
673 | - | if ((cW > height)) | |
674 | - | then throw(("You can't unlock sharetokens till " + toString(cW))) | |
675 | - | else { | |
676 | - | let dt = (cV + cX) | |
677 | - | let dK = bN(aI, aN) | |
678 | - | let bo = dK._1 | |
679 | - | let bp = dK._2 | |
680 | - | let cx = dK._3 | |
681 | - | let dm = dK._4 | |
682 | - | let dn = (aZ(aI, aN) + cx) | |
683 | - | [IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dt), IntegerEntry((aI + n), ((bQ - cY) + dt)), IntegerEntry((((aI + "_") + aN) + x), dn), DeleteEntry((((aI + "_") + aN) + i)), DeleteEntry((((aI + "_") + aN) + k)), DeleteEntry((((aI + "_") + aN) + j)), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dd, unit)] | |
684 | - | } | |
708 | + | @Callable(aw) | |
709 | + | func unlockUserLockDeprecated (aJ,aO) = valueOrElse(cO(), valueOrElse(cT(aw), if (!(cR(aJ))) | |
710 | + | then throw("Pool must be deprecated") | |
711 | + | else if (isDefined(getInteger(this, (((aJ + "_") + aO) + l)))) | |
712 | + | then (dE(aw, aJ, aO) ++ [ScriptTransfer(ai, getIntegerValue(this, q), unit)]) | |
713 | + | else nil)) | |
714 | + | ||
715 | + | ||
716 | + | ||
717 | + | @Callable(aw) | |
718 | + | func withdrawShareTokens (aJ,dt) = valueOrElse(cO(), ds(aw, aw.caller, aJ, dt)) | |
719 | + | ||
720 | + | ||
721 | + | ||
722 | + | @Callable(aw) | |
723 | + | func withdrawShareTokensFromPool (dM,aJ,dt) = valueOrElse(cO(), valueOrElse(cQ(aw, aJ), ds(aw, Address(dM), aJ, dt))) | |
724 | + | ||
725 | + | ||
726 | + | ||
727 | + | @Callable(aw) | |
728 | + | func claim (aJ) = valueOrElse(cO(), { | |
729 | + | let bE = dB(aw, aJ, aw.caller) | |
730 | + | if ((bE._2 == 0)) | |
731 | + | then throw("You have 0 available SWOP") | |
732 | + | else bE | |
685 | 733 | }) | |
686 | 734 | ||
687 | 735 | ||
688 | 736 | ||
689 | - | @Callable( | |
690 | - | func | |
737 | + | @Callable(aw) | |
738 | + | func claimInternal (aJ,cV) = valueOrElse(cO(), valueOrElse(cT(aw), dB(aw, aJ, Address(cV)))) | |
691 | 739 | ||
692 | 740 | ||
693 | 741 | ||
694 | - | @Callable(av) | |
695 | - | func withdrawShareTokensFromPool (dG,aI,dq) = valueOrElse(cN(), valueOrElse(cP(av, aI), dp(av, Address(dG), aI, dq))) | |
696 | - | ||
697 | - | ||
698 | - | ||
699 | - | @Callable(av) | |
700 | - | func claim (aI) = valueOrElse(cN(), { | |
701 | - | let bD = dx(av, aI, av.caller) | |
702 | - | if ((bD._2 == 0)) | |
703 | - | then throw("You have 0 available SWOP") | |
704 | - | else bD | |
705 | - | }) | |
706 | - | ||
707 | - | ||
708 | - | ||
709 | - | @Callable(av) | |
710 | - | func claimInternal (aI,cS) = valueOrElse(cN(), valueOrElse(cQ(av), dx(av, aI, Address(cS)))) | |
711 | - | ||
712 | - | ||
713 | - | ||
714 | - | @Callable(av) | |
715 | - | func claimAndStake (aI) = valueOrElse(cN(), { | |
716 | - | let cx = { | |
717 | - | let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil) | |
718 | - | if ($isInstanceOf(dL, "Int")) | |
719 | - | then dL | |
720 | - | else throw(($getType(dL) + " couldn't be cast to Int")) | |
742 | + | @Callable(aw) | |
743 | + | func claimAndStake (aJ) = valueOrElse(cO(), { | |
744 | + | let cy = { | |
745 | + | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
746 | + | if ($isInstanceOf(dQ, "Int")) | |
747 | + | then dQ | |
748 | + | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
721 | 749 | } | |
722 | - | if (( | |
723 | - | then if (( | |
750 | + | if ((cy == cy)) | |
751 | + | then if ((cy == 0)) | |
724 | 752 | then throw("You have 0 available SWOP") | |
725 | 753 | else { | |
726 | - | let | |
727 | - | if (( | |
754 | + | let dR = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, cy)]) | |
755 | + | if ((dR == dR)) | |
728 | 756 | then nil | |
729 | 757 | else throw("Strict value is not equal to itself.") | |
730 | 758 | } | |
731 | 759 | else throw("Strict value is not equal to itself.") | |
732 | 760 | }) | |
733 | 761 | ||
734 | 762 | ||
735 | 763 | ||
736 | - | @Callable( | |
737 | - | func claimAll ( | |
738 | - | func | |
739 | - | let | |
740 | - | let | |
741 | - | if ($isInstanceOf( | |
742 | - | then | |
743 | - | else throw(($getType( | |
764 | + | @Callable(aw) | |
765 | + | func claimAll (cq) = valueOrElse(cO(), { | |
766 | + | func dS (dT,aJ) = { | |
767 | + | let cy = { | |
768 | + | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
769 | + | if ($isInstanceOf(dQ, "Int")) | |
770 | + | then dQ | |
771 | + | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
744 | 772 | } | |
745 | - | if (( | |
746 | - | then ( | |
773 | + | if ((cy == cy)) | |
774 | + | then (dT + cy) | |
747 | 775 | else throw("Strict value is not equal to itself.") | |
748 | 776 | } | |
749 | 777 | ||
750 | - | let | |
751 | - | let | |
752 | - | let | |
753 | - | let | |
754 | - | func | |
755 | - | then | |
756 | - | else | |
778 | + | let dT = { | |
779 | + | let aB = cq | |
780 | + | let aC = size(aB) | |
781 | + | let aD = 0 | |
782 | + | func aE (aF,aG) = if ((aG >= aC)) | |
783 | + | then aF | |
784 | + | else dS(aF, aB[aG]) | |
757 | 785 | ||
758 | - | func | |
759 | - | then | |
786 | + | func aH (aF,aG) = if ((aG >= aC)) | |
787 | + | then aF | |
760 | 788 | else throw("List size exceeds 60") | |
761 | 789 | ||
762 | - | | |
790 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
763 | 791 | } | |
764 | - | if (( | |
792 | + | if ((dT == 0)) | |
765 | 793 | then throw("You have 0 available SWOP") | |
766 | - | else [ScriptTransfer( | |
794 | + | else [ScriptTransfer(aw.caller, dT, ar)] | |
767 | 795 | }) | |
768 | 796 | ||
769 | 797 | ||
770 | 798 | ||
771 | - | @Callable( | |
772 | - | func claimAllAndStake ( | |
773 | - | func | |
774 | - | let | |
775 | - | let | |
776 | - | if ($isInstanceOf( | |
777 | - | then | |
778 | - | else throw(($getType( | |
799 | + | @Callable(aw) | |
800 | + | func claimAllAndStake (cq) = valueOrElse(cO(), { | |
801 | + | func dS (dT,aJ) = { | |
802 | + | let cy = { | |
803 | + | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
804 | + | if ($isInstanceOf(dQ, "Int")) | |
805 | + | then dQ | |
806 | + | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
779 | 807 | } | |
780 | - | if (( | |
781 | - | then ( | |
808 | + | if ((cy == cy)) | |
809 | + | then (dT + cy) | |
782 | 810 | else throw("Strict value is not equal to itself.") | |
783 | 811 | } | |
784 | 812 | ||
785 | - | let | |
786 | - | let | |
787 | - | let | |
788 | - | let | |
789 | - | func | |
790 | - | then | |
791 | - | else | |
813 | + | let dT = { | |
814 | + | let aB = cq | |
815 | + | let aC = size(aB) | |
816 | + | let aD = 0 | |
817 | + | func aE (aF,aG) = if ((aG >= aC)) | |
818 | + | then aF | |
819 | + | else dS(aF, aB[aG]) | |
792 | 820 | ||
793 | - | func | |
794 | - | then | |
821 | + | func aH (aF,aG) = if ((aG >= aC)) | |
822 | + | then aF | |
795 | 823 | else throw("List size exceeds 60") | |
796 | 824 | ||
797 | - | | |
825 | + | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
798 | 826 | } | |
799 | - | if (( | |
827 | + | if ((dT == 0)) | |
800 | 828 | then throw("You have 0 available SWOP") | |
801 | 829 | else { | |
802 | - | let | |
803 | - | if (( | |
830 | + | let dR = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, dT)]) | |
831 | + | if ((dR == dR)) | |
804 | 832 | then nil | |
805 | 833 | else throw("Strict value is not equal to itself.") | |
806 | 834 | } | |
807 | 835 | }) | |
808 | 836 | ||
809 | 837 | ||
810 | 838 | ||
811 | - | @Callable( | |
812 | - | func updateUserBoostInterest ( | |
839 | + | @Callable(aw) | |
840 | + | func updateUserBoostInterest (aJ,aO) = valueOrElse(cO(), if ((aw.caller != aj)) | |
813 | 841 | then throw("Only voiting can call this function") | |
814 | 842 | else { | |
815 | - | let | |
816 | - | let | |
817 | - | let | |
818 | - | let | |
819 | - | let | |
820 | - | let | |
821 | - | [IntegerEntry(((( | |
843 | + | let dU = bO(aJ, aO) | |
844 | + | let bp = dU._1 | |
845 | + | let bq = dU._2 | |
846 | + | let cy = dU._3 | |
847 | + | let dp = dU._4 | |
848 | + | let dq = (ba(aJ, aO) + cy) | |
849 | + | [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
822 | 850 | }) | |
823 | 851 | ||
824 | 852 | ||
825 | 853 | ||
826 | - | @Callable( | |
827 | - | func shutdown () = valueOrElse( | |
828 | - | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, | |
829 | - | else | |
854 | + | @Callable(aw) | |
855 | + | func shutdown () = valueOrElse(cP(aw), if (!(ap)) | |
856 | + | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified"))) | |
857 | + | else cM("Paused by admin")) | |
830 | 858 | ||
831 | 859 | ||
832 | 860 | ||
833 | - | @Callable( | |
834 | - | func activate () = valueOrElse( | |
861 | + | @Callable(aw) | |
862 | + | func activate () = valueOrElse(cP(aw), if (ap) | |
835 | 863 | then throw("DApp is already active") | |
836 | - | else [BooleanEntry(a, true), DeleteEntry( | |
864 | + | else [BooleanEntry(a, true), DeleteEntry(d)]) | |
837 | 865 | ||
838 | 866 | ||
839 | - | @Verifier( | |
840 | - | func | |
841 | - | let | |
842 | - | let | |
867 | + | @Verifier(dV) | |
868 | + | func dW () = { | |
869 | + | let ac = dV | |
870 | + | let dX = if (sigVerify(dV.bodyBytes, dV.proofs[0], af)) | |
843 | 871 | then 1 | |
844 | 872 | else 0 | |
845 | - | let | |
873 | + | let dY = if (sigVerify(dV.bodyBytes, dV.proofs[1], ag)) | |
846 | 874 | then 1 | |
847 | 875 | else 0 | |
848 | - | let | |
876 | + | let dZ = if (sigVerify(dV.bodyBytes, dV.proofs[2], ah)) | |
849 | 877 | then 1 | |
850 | 878 | else 0 | |
851 | - | ((( | |
879 | + | (((dX + dY) + dZ) >= 2) | |
852 | 880 | } | |
853 | 881 |
github/deemru/w8io/3ef1775 341.34 ms ◑