tx · CZHRW83L3jrKgPjrDp9UJ1zCjV27zQSKPpuoHnoTfvMn

3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs:  -0.14000000 Waves

2022.10.19 16:58 [2279358] smart account 3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs > SELF 0.00000000 Waves

{ "type": 13, "id": "CZHRW83L3jrKgPjrDp9UJ1zCjV27zQSKPpuoHnoTfvMn", "fee": 14000000, "feeAssetId": null, "timestamp": 1666187990653, "version": 2, "chainId": 84, "sender": "3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs", "senderPublicKey": "2EDucEDvqYfn6hdx4PbvykQFRoNgPMWX6SiVPjM8AyxM", "proofs": [ "35BR14HSBfd1zGMq9z3UZrcBBQhZAbrWF1FqkVUEb7daDJ18SyBL2gZkqUtN1vocXr2qKrBuqBPCi5iwJDf5stqg", "228i2eGzgJ8KxDNPTSKZ89Z7oThjv2UkcDxXrhLUVmuL7ZgsknMPzSq9ajKpvZY6ppX9JZJGr1jqg4m9KKvXPF5x" ], "script": "base64:BgIiCAISAwoBCBIAEgASAwoBARIAEgASABIGCgQYEQEBEgASAFsAB2tBY3RpdmUCBmFjdGl2ZQALa0FjdGl2ZUdsb2ICFGFjdGl2ZV9hbGxfY29udHJhY3RzAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rTGFzdEludGVyZXN0Ag1sYXN0X2ludGVyZXN0ABFrVXNlckxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAD2tVc2VyU1dPUExvY2tlZAIMX1NXT1BfYW1vdW50ABBrVG90YWxTV09QTG9ja2VkAhF0b3RhbF9TV09QX2Ftb3VudAAVa1VzZXJTd29wVW5sb2NrSGVpZ2h0AhNfU1dPUF91bmxvY2tfaGVpZ2h0ABBrVXNlckdTd29wTG9ja2VkAg1fR1N3b3BfYW1vdW50ABFrVG90YWxHU3dvcExvY2tlZAISdG90YWxfR1N3b3BfYW1vdW50ABJrVXNlclRvdGFsVm90ZVNXT1ACFl91c2VyX3RvdGFsX3ZvdGVfZ1NXT1AAFmtVc2VyQXZhaWxhYmxlRm9yQ2xhaW0CGV91c2VyX2F2YWlsYWJsZV9mb3JfY2xhaW0AGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50Ah1fY3VycmVudF9wb29sX2ZyYWN0aW9uX3Jld2FyZAAba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAh5fcHJldmlvdXNfcG9vbF9mcmFjdGlvbl9yZXdhcmQAE2tIZWlnaHRQb29sRnJhY3Rpb24CGl9wb29sX3Jld2FyZF91cGRhdGVfaGVpZ2h0ABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhRyZXdhcmRfdXBkYXRlX2hlaWdodAAia1Jld2FyZFVwZGF0ZUZpcnN0UGFnaW5hdGlvbkhlaWdodAIlcmV3YXJkX3VwZGF0ZV9oZWlnaHRfZmlyc3RfcGFnaW5hdGlvbgATa05vVm90aW5nRm9yTmV3UG9vbAIIX3ZvdGVfbm8AFGtZZXNWb3RpbmdGb3JOZXdQb29sAglfdm90ZV95ZXMAGWtTdGF0dXNPZlZvdGluZ0Zvck5ld1Bvb2wCB19zdGF0dXMAHWtIZWlnaHRPZlBvb2xWb3RpbmdGb3JOZXdQb29sAg5fZmluaXNoX2hlaWdodAAPYWN0aXZlVm90ZUZpcnN0AhR2b3RpbmdfYWN0aXZlX2NlbGxfMQAQYWN0aXZlVm90ZVNlY29uZAIUdm90aW5nX2FjdGl2ZV9jZWxsXzIAD2FjdGl2ZVZvdGVUaGlyZAIUdm90aW5nX2FjdGl2ZV9jZWxsXzMAC2tUZW1wQ3VyU3VtAhJzdW1fcmV3YXJkX2N1cnJlbnQAF2tMYXVuY2hwYWRCb3VnaHRUaWNrZXRzAg9fYm91Z2h0X3RpY2tldHMAGGtMYXVuY2hwYWRTd29wUGVyVGlja2V0cwIQX3N3b3BfcGVyX3RpY2tldAASa0xhdW5jaHBhZEFjdGl2ZUlkAhNsYXVuY2hwYWRfYWN0aXZlX2lkABJrTGF1bmNocGFkRHVyYXRpb24CCV9kdXJhdGlvbgAVa0xhdW5jaHBhZFN0YXJ0SGVpZ2h0Ag1fc3RhcnRfaGVpZ2h0AAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAA9rVXNlclRvdGFsU3RydWMCEV91c2VyX3RvdGFsX3N0cnVjABprTGF1Y2hwYWRGcmVlelN3b3BEdXJhdGlvbgIVX2ZyZWV6ZV9zd29wX2R1cmF0aW9uAAdrU1dPUGlkAgdTV09QX2lkAAtrQWlyZHJvcEZlZQILYWlyZHJvcF9mZWUADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAD2tNb25leUJveFB1YktleQIRbW9uZXlfYm94X3B1Yl9rZXkADGtGYXJtaW5nQWRkcgIPZmFybWluZ19hZGRyZXNzAAtrVm90aW5nQWRkcgIOdm90aW5nX2FkZHJlc3MAEmtWb3RpbmdOZXdQb29sQWRkcgIXdm90aW5nX25ld19wb29sX2FkZHJlc3MADmtMYXVuY2hwYWRBZGRyAhFsYXVuY2hwYWRfYWRkcmVzcwAUa0FpcmRyb3BNb25leUJveEFkZHICFWFpcmRyb3BfZmVlX21vbmV5X2JveAALa09yYWNsZVBvb2wCBXBvb2xfAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMADm1vbmV5Qm94UHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tNb25leUJveFB1YktleQALZmFybWluZ0FkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrRmFybWluZ0FkZHIACnZvdGluZ0FkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrVm90aW5nQWRkcgARdm90aW5nTmV3UG9vbEFkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRJrVm90aW5nTmV3UG9vbEFkZHIADWxhdW5jaHBhZEFkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rTGF1bmNocGFkQWRkcgATYWlyZHJvcE1vbmV5Qm94QWRkcgkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFFGtBaXJkcm9wTW9uZXlCb3hBZGRyABRsb2NrU3dvcEJsb2Nrc0Ftb3VudAkAaAIA9k4ABAAEU1dPUAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQtmYXJtaW5nQWRkcgUHa1NXT1BpZAAKc2NhbGVWYWx1ZQCAwtcvAA50b3RhbFZvdGVTaGFyZQCAyK+gJQAJZmVlU2FjbGU2AMCEPQAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCnZvdGluZ0FkZHIFC2tCYXNlUGVyaW9kAiRFbXB0eSBrQmFzZVBlcmlvZCBhdCB2b3RpbmcgY29udHJhY3QAC3N0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUKdm90aW5nQWRkcgUMa1N0YXJ0SGVpZ2h0AiVFbXB0eSBrU3RhcnRIZWlnaHQgYXQgdm90aW5nIGNvbnRyYWN0AAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQp2b3RpbmdBZGRyBQ1rUGVyaW9kTGVuZ3RoAiZFbXB0eSBrUGVyaW9kTGVuZ3RoIGF0IHZvdGluZyBjb250cmFjdAAPZmlyc3RBY3RpdmVWb3RlCQELdmFsdWVPckVsc2UCCQCdCAIFEXZvdGluZ05ld1Bvb2xBZGRyBQ9hY3RpdmVWb3RlRmlyc3QCAAAQc2Vjb25kQWN0aXZlVm90ZQkBC3ZhbHVlT3JFbHNlAgkAnQgCBRF2b3RpbmdOZXdQb29sQWRkcgUQYWN0aXZlVm90ZVNlY29uZAIAAA90aGlyZEFjdGl2ZVZvdGUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgURdm90aW5nTmV3UG9vbEFkZHIFD2FjdGl2ZVZvdGVUaGlyZAIAAAZhY3RpdmUJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUHa0FjdGl2ZQYACmFjdGl2ZUdsb2IJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlBQtrQWN0aXZlR2xvYgYACmFpcmRyb3BGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQULa0FpcmRyb3BGZWUAEGN1cnJWb3RpbmdQZXJpb2QJAGQCBQpiYXNlUGVyaW9kCQBpAgkAZQIFBmhlaWdodAULc3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgETZ2V0TGFzdEludGVyZXN0SW5mbwAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUNa0xhc3RJbnRlcmVzdAAAARJnZXRUb3RhbExvY2tlZEluZm8ABA90b3RhbFN3b3BMb2NrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUQa1RvdGFsU1dPUExvY2tlZAAABBB0b3RhbEdTd29wTG9ja2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtUb3RhbEdTd29wTG9ja2VkBQ90b3RhbFN3b3BMb2NrZWQJAJQKAgUPdG90YWxTd29wTG9ja2VkBRB0b3RhbEdTd29wTG9ja2VkARFnZXRVc2VyTG9ja2VkSW5mbwEEdXNlcgQOdXNlclN3b3BMb2NrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ9rVXNlclNXT1BMb2NrZWQAAAQPdXNlckdTd29wTG9ja2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJHU3dvcExvY2tlZAUOdXNlclN3b3BMb2NrZWQJAJQKAgUOdXNlclN3b3BMb2NrZWQFD3VzZXJHU3dvcExvY2tlZAETZ2V0VXNlckludGVyZXN0SW5mbwIEdXNlcgxsYXN0SW50ZXJlc3QECyR0MDUwMzY1MDk5CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUEFtb3VudAgFCyR0MDUwMzY1MDk5Al8xBA91c2VyR1N3b3BBbW91bnQIBQskdDA1MDM2NTA5OQJfMgQQdXNlckxhc3RJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEWtVc2VyTGFzdEludGVyZXN0BQxsYXN0SW50ZXJlc3QJAJUKAwUQdXNlckxhc3RJbnRlcmVzdAUOdXNlclNXT1BBbW91bnQFD3VzZXJHU3dvcEFtb3VudAEYZ2V0VXNlckF2YWlsYWJsZUZvckNsYWltAQR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUWa1VzZXJBdmFpbGFibGVGb3JDbGFpbQAAASBnZXRVc2VyVG90YWxWb3RlQW1vdW50Rm9yT25lUG9vbAIEcG9vbAR1c2VyBAZ2b3RpbmcJAQt2YWx1ZU9yRWxzZQIJAJoIAgURdm90aW5nTmV3UG9vbEFkZHIFBHBvb2wA////////////AQQOaGVpZ2h0T2ZWb3RpbmcJAQt2YWx1ZU9yRWxzZQIJAJoIAgURdm90aW5nTmV3UG9vbEFkZHIJAKwCAgkApAMBBQZ2b3RpbmcFHWtIZWlnaHRPZlBvb2xWb3RpbmdGb3JOZXdQb29sAAAEDnN0YXR1c09mVm90aW5nCQELdmFsdWVPckVsc2UCCQCbCAIFEXZvdGluZ05ld1Bvb2xBZGRyCQCsAgIJAKQDAQUGdm90aW5nBRlrU3RhdHVzT2ZWb3RpbmdGb3JOZXdQb29sBgQNY3VycmVudEhlaWdodAUGaGVpZ2h0AwkAZgIAAAUGdm90aW5nAAADCQEBIQEFDnN0YXR1c09mVm90aW5nAAADCQBmAgUOaGVpZ2h0T2ZWb3RpbmcFDWN1cnJlbnRIZWlnaHQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFEXZvdGluZ05ld1Bvb2xBZGRyCQCsAgIJAKwCAgkArAICCQClCAEFBHVzZXICAV8JAKQDAQUGdm90aW5nBRRrWWVzVm90aW5nRm9yTmV3UG9vbAAACQELdmFsdWVPckVsc2UCCQCaCAIFEXZvdGluZ05ld1Bvb2xBZGRyCQCsAgIJAKwCAgkArAICCQClCAEFBHVzZXICAV8JAKQDAQUGdm90aW5nBRNrTm9Wb3RpbmdGb3JOZXdQb29sAAAAAAEgZ2V0VXNlclRvdGFsVm90ZUZvck5ld1Bvb2xBbW91bnQBBHVzZXIEDGxpc3RPZlZvdGluZwkAzAgCCQEgZ2V0VXNlclRvdGFsVm90ZUFtb3VudEZvck9uZVBvb2wCBQ9maXJzdEFjdGl2ZVZvdGUFBHVzZXIJAMwIAgkBIGdldFVzZXJUb3RhbFZvdGVBbW91bnRGb3JPbmVQb29sAgUQc2Vjb25kQWN0aXZlVm90ZQUEdXNlcgkAzAgCCQEgZ2V0VXNlclRvdGFsVm90ZUFtb3VudEZvck9uZVBvb2wCBQ90aGlyZEFjdGl2ZVZvdGUFBHVzZXIFA25pbAkAlgMBBQxsaXN0T2ZWb3RpbmcBGGdldFVzZXJCbG9ja2VkSW5MYXVjaHBhZAEEdXNlcgQKbGF1Y2hwYWRJZAkApAMBCQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIFEmtMYXVuY2hwYWRBY3RpdmVJZAAAAwkAAAIFCmxhdWNocGFkSWQCATAAAAQMbFN0YXJ0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIJAKwCAgUKbGF1Y2hwYWRJZAUVa0xhdW5jaHBhZFN0YXJ0SGVpZ2h0AAAECWxEdXJhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1sYXVuY2hwYWRBZGRyCQCsAgIFCmxhdWNocGFkSWQFEmtMYXVuY2hwYWREdXJhdGlvbgAABBNsRnJlZXplU3dvcER1cmF0aW9uCQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIJAKwCAgUKbGF1Y2hwYWRJZAUaa0xhdWNocGFkRnJlZXpTd29wRHVyYXRpb24AAAQOYmxvY2tFbmRIZWlnaHQJAGQCCQBkAgUMbFN0YXJ0SGVpZ2h0BQlsRHVyYXRpb24FE2xGcmVlemVTd29wRHVyYXRpb24DCQBmAgUGaGVpZ2h0BQ5ibG9ja0VuZEhlaWdodAAABA1ib3VnaHRUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIJAKwCAgkArAICCQCsAgIJAKUIAQUEdXNlcgIBXwUKbGF1Y2hwYWRJZAUXa0xhdW5jaHBhZEJvdWdodFRpY2tldHMAAAQNc3dvcFBlclRpY2tldAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1sYXVuY2hwYWRBZGRyCQCsAgIFCmxhdWNocGFkSWQFGGtMYXVuY2hwYWRTd29wUGVyVGlja2V0cwAACQBoAgUNYm91Z2h0VGlja2V0cwUNc3dvcFBlclRpY2tldAEPZ2V0VXNlclZvdGVJbmZvAQR1c2VyBAskdDA3NDYzNzk5NgMJAQlpc0RlZmluZWQBCQCdCAIFCnZvdGluZ0FkZHIJAKwCAgkApQgBBQR1c2VyBQ9rVXNlclRvdGFsU3RydWMEBGRhdGEJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCnZvdGluZ0FkZHIJAKwCAgkApQgBBQR1c2VyBQ9rVXNlclRvdGFsU3RydWMCFUVtcHR5IGtVc2VyVG90YWxTdHJ1YwIBXwkAlQoDCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQACBA51UG9vbFRvdGFsU1dPUAkBC3ZhbHVlT3JFbHNlAgkAmggCBQp2b3RpbmdBZGRyCQCsAgIJAKUIAQUEdXNlcgUSa1VzZXJUb3RhbFZvdGVTV09QAAAJAJUKAwUOdVBvb2xUb3RhbFNXT1AAAAUQY3VyclZvdGluZ1BlcmlvZAQRdXNlclRvdGFsVm90ZVNXT1AIBQskdDA3NDYzNzk5NgJfMQQLdXNlclVudm90ZWQIBQskdDA3NDYzNzk5NgJfMgQRdXNlclVudm90ZWRQZXJpb2QIBQskdDA3NDYzNzk5NgJfMwQRdXNlclVudm90ZWRBY3R1YWwDCQAAAgURdXNlclVudm90ZWRQZXJpb2QFEGN1cnJWb3RpbmdQZXJpb2QFC3VzZXJVbnZvdGVkAAAJAJQKAgURdXNlclRvdGFsVm90ZVNXT1AFEXVzZXJVbnZvdGVkQWN0dWFsARNnZXRQb29sVXBkYXRlSGVpZ2h0AQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgAAARhpc0RlZmluZVBvb2xVcGRhdGVIZWlnaHQBBHBvb2wJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgEQZ2V0Q3VyUG9vbFdlaWdodAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AAABEWdldFByZXZQb29sV2VpZ2h0AQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAAABCWNsYWltQ2FsYwEEdXNlcgQMbGFzdEludGVyZXN0CQETZ2V0TGFzdEludGVyZXN0SW5mbwAECyR0MDg4NzA4OTY3CQETZ2V0VXNlckludGVyZXN0SW5mbwIFBHVzZXIFDGxhc3RJbnRlcmVzdAQQdXNlckxhc3RJbnRlcmVzdAgFCyR0MDg4NzA4OTY3Al8xBA51c2VyU1dPUExvY2tlZAgFCyR0MDg4NzA4OTY3Al8yBA91c2VyR1N3b3BBbW91bnQIBQskdDA4ODcwODk2NwJfMwQLY2xhaW1BbW91bnQJAGsDBQ91c2VyR1N3b3BBbW91bnQJAGUCBQxsYXN0SW50ZXJlc3QFEHVzZXJMYXN0SW50ZXJlc3QFCnNjYWxlVmFsdWUED3VzZXJOZXdJbnRlcmVzdAUMbGFzdEludGVyZXN0CQCUCgIFD3VzZXJOZXdJbnRlcmVzdAULY2xhaW1BbW91bnQBDGlzT3JhY2xlUG9vbAELcG9vbEFkZHJlc3MDCQEJaXNEZWZpbmVkAQkAnQgCBQZvcmFjbGUJAKwCAgULa09yYWNsZVBvb2wFC3Bvb2xBZGRyZXNzBQR1bml0CQACAQIbREFwcCBpcyBub3QgcmVnaXN0ZXJlZCBwb29sCgFpAQdhZGRQb29sAQtwb29sQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEFC3Bvb2xBZGRyZXNzAwkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICBQtwb29sQWRkcmVzcwUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAAIBAhpQb29sIGFscmVhZHkgaW4gZ292ZXJuYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQtwb29sQWRkcmVzcwUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQtwb29sQWRkcmVzcwUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgULcG9vbEFkZHJlc3MFE2tIZWlnaHRQb29sRnJhY3Rpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFE2tSZXdhcmRVcGRhdGVIZWlnaHQFA25pbAFpAQdhaXJEcm9wAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQLJHQwOTg2Njk5NDEJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwOTg2Njk5NDECXzEECnBtdEFzc2V0SWQIBQskdDA5ODY2OTk0MQJfMgMJAQIhPQIFCnBtdEFzc2V0SWQFBFNXT1AJAAIBAhRJbmNvcnJlY3QgcG10QXNzZXRJZAQQYWlyZHJvcEZlZUFtb3VudAkAbgQFCXBtdEFtb3VudAUKYWlyZHJvcEZlZQUJZmVlU2FjbGU2BQdDRUlMSU5HBA0kdDAxMDExNDEwMTc2CQESZ2V0VG90YWxMb2NrZWRJbmZvAAQPdG90YWxTV09QTG9ja2VkCAUNJHQwMTAxMTQxMDE3NgJfMQQQdG90YWxHU3dvcExvY2tlZAgFDSR0MDEwMTE0MTAxNzYCXzIEDGxhc3RJbnRlcmVzdAkBE2dldExhc3RJbnRlcmVzdEluZm8ABAtpbnRlcmVzdE5ldwkAZAIFDGxhc3RJbnRlcmVzdAkAawMJAGUCBQlwbXRBbW91bnQFEGFpcmRyb3BGZWVBbW91bnQFCnNjYWxlVmFsdWUFEHRvdGFsR1N3b3BMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtMYXN0SW50ZXJlc3QFC2ludGVyZXN0TmV3CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2FpcmRyb3BNb25leUJveEFkZHIFEGFpcmRyb3BGZWVBbW91bnQFBFNXT1AFA25pbAFpAQhsb2NrU1dPUAAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDEwNTU0MTA2MjkJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTA1NTQxMDYyOQJfMQQKcG10QXNzZXRJZAgFDSR0MDEwNTU0MTA2MjkCXzIDCQECIT0CBQpwbXRBc3NldElkBQRTV09QCQACAQIUSW5jb3JyZWN0IHBtdEFzc2V0SWQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAxsYXN0SW50ZXJlc3QJARNnZXRMYXN0SW50ZXJlc3RJbmZvAAQNJHQwMTA3ODAxMDg0MwkBEWdldFVzZXJMb2NrZWRJbmZvAQUEdXNlcgQOdXNlclNXT1BMb2NrZWQIBQ0kdDAxMDc4MDEwODQzAl8xBA91c2VyR1N3b3BMb2NrZWQIBQ0kdDAxMDc4MDEwODQzAl8yBA0kdDAxMDg0ODEwOTA5CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAUNJHQwMTA4NDgxMDkwOQJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQ0kdDAxMDg0ODEwOTA5Al8yBBFhdmFpbGFibGVGb3JDbGFpbQkBGGdldFVzZXJBdmFpbGFibGVGb3JDbGFpbQEFBHVzZXIEFGF2YWlsYWJsZUZvckNsYWltTmV3CQBkAgURYXZhaWxhYmxlRm9yQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlBBF1c2VyU1dPUExvY2tlZE5ldwkAZAIFDnVzZXJTV09QTG9ja2VkBQlwbXRBbW91bnQEEnVzZXJHU3dvcExvY2tlZE5ldwkAZAIFD3VzZXJHU3dvcExvY2tlZAUJcG10QW1vdW50BA0kdDAxMTE1NzExMjE5CQESZ2V0VG90YWxMb2NrZWRJbmZvAAQPdG90YWxTV09QTG9ja2VkCAUNJHQwMTExNTcxMTIxOQJfMQQQdG90YWxHU3dvcExvY2tlZAgFDSR0MDExMTU3MTEyMTkCXzIEEnRvdGFsU1dPUExvY2tlZE5ldwkAZAIFD3RvdGFsU1dPUExvY2tlZAUJcG10QW1vdW50BBN0b3RhbEdTd29wTG9ja2VkTmV3CQBkAgUQdG90YWxHU3dvcExvY2tlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFWtVc2VyU3dvcFVubG9ja0hlaWdodAkAZAIFBmhlaWdodAUUbG9ja1N3b3BCbG9ja3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgURa1VzZXJMYXN0SW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ9rVXNlclNXT1BMb2NrZWQFEXVzZXJTV09QTG9ja2VkTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyR1N3b3BMb2NrZWQFEnVzZXJHU3dvcExvY2tlZE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrVXNlckF2YWlsYWJsZUZvckNsYWltBRRhdmFpbGFibGVGb3JDbGFpbU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa1RvdGFsU1dPUExvY2tlZAUSdG90YWxTV09QTG9ja2VkTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrVG90YWxHU3dvcExvY2tlZAUTdG90YWxHU3dvcExvY2tlZE5ldwUDbmlsAWkBDHdpdGhkcmF3U1dPUAEOd2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAx1bmxvY2tIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRVrVXNlclN3b3BVbmxvY2tIZWlnaHQAAAMJAGcCAAAFDndpdGhkcmF3QW1vdW50CQACAQITd2l0aGRyYXdBbW91bnQgPD0gMAMJAGYCBQx1bmxvY2tIZWlnaHQFBmhlaWdodAkAAgEJAKwCAgIYWW91IGNhbid0IHdpdGhkcmF3IHRpbGwgCQCkAwEFDHVubG9ja0hlaWdodAQNJHQwMTIxOTcxMjI1OQkBEmdldFRvdGFsTG9ja2VkSW5mbwAED3RvdGFsU1dPUExvY2tlZAgFDSR0MDEyMTk3MTIyNTkCXzEEEHRvdGFsR1N3b3BMb2NrZWQIBQ0kdDAxMjE5NzEyMjU5Al8yBA0kdDAxMjI2NDEyMzI3CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUExvY2tlZAgFDSR0MDEyMjY0MTIzMjcCXzEED3VzZXJHU3dvcExvY2tlZAgFDSR0MDEyMjY0MTIzMjcCXzIEDSR0MDEyMzMyMTIzOTMJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQ0kdDAxMjMzMjEyMzkzAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFDSR0MDEyMzMyMTIzOTMCXzIEDSR0MDEyMzk4MTI0NjQJAQ9nZXRVc2VyVm90ZUluZm8BCAUBaQZjYWxsZXIEDnVzZXJWb3RlQW1vdW50CAUNJHQwMTIzOTgxMjQ2NAJfMQQQdXNlclVudm90ZUFtb3VudAgFDSR0MDEyMzk4MTI0NjQCXzIEGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbAkBIGdldFVzZXJUb3RhbFZvdGVGb3JOZXdQb29sQW1vdW50AQgFAWkGY2FsbGVyBBJibG9ja2VkSW5MYXVuY2hwYWQJARhnZXRVc2VyQmxvY2tlZEluTGF1Y2hwYWQBCAUBaQZjYWxsZXIDAwMJAGYCAAAFEHVzZXJVbnZvdGVBbW91bnQGCQBmAgAABQ51c2VyVm90ZUFtb3VudAYJAGYCAAAFGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbAkAAgECSnVzZXJVbnZvdGVBbW91bnQgPCAwIHx8IHVzZXJWb3RlQW1vdW50IDwgMCB8fCB1c2VyVm90ZUFtb3VudEZvck5ld1Bvb2wgPCAwBBJhdmFpbGFibGVUb1Vuc3Rha2UJAGUCBQ51c2VyU1dPUExvY2tlZAkAlgMBCQDMCAIFGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbAkAzAgCCQBkAgUOdXNlclZvdGVBbW91bnQFEHVzZXJVbnZvdGVBbW91bnQJAMwIAgUSYmxvY2tlZEluTGF1bmNocGFkBQNuaWwDCQBmAgUOd2l0aGRyYXdBbW91bnQFEmF2YWlsYWJsZVRvVW5zdGFrZQkAAgECI3dpdGhkcmF3QW1vdW50ID4gYXZhaWxhYmxlVG9VbnN0YWtlBBFhdmFpbGFibGVGb3JDbGFpbQkBGGdldFVzZXJBdmFpbGFibGVGb3JDbGFpbQEFBHVzZXIEFGF2YWlsYWJsZUZvckNsYWltTmV3CQBkAgURYXZhaWxhYmxlRm9yQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlBBJ0b3RhbFNXT1BMb2NrZWROZXcJAGUCBQ90b3RhbFNXT1BMb2NrZWQFDndpdGhkcmF3QW1vdW50BBF1c2VyU1dPUEFtb3VudE5ldwkAZQIFDnVzZXJTV09QTG9ja2VkBQ53aXRoZHJhd0Ftb3VudAQTdG90YWxHU3dvcExvY2tlZE5ldwkAZAIJAGUCBRB0b3RhbEdTd29wTG9ja2VkBQ91c2VyR1N3b3BMb2NrZWQFEXVzZXJTV09QQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtVc2VyTGFzdEludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUPa1VzZXJTV09QTG9ja2VkBRF1c2VyU1dPUEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlckdTd29wTG9ja2VkBRF1c2VyU1dPUEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrVXNlckF2YWlsYWJsZUZvckNsYWltBRRhdmFpbGFibGVGb3JDbGFpbU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa1RvdGFsU1dPUExvY2tlZAUSdG90YWxTV09QTG9ja2VkTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrVG90YWxHU3dvcExvY2tlZAUTdG90YWxHU3dvcExvY2tlZE5ldwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDndpdGhkcmF3QW1vdW50BQRTV09QBQNuaWwBaQEUY2xhaW1BbmRXaXRoZHJhd1NXT1AACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQRYXZhaWxhYmxlRm9yQ2xhaW0JARhnZXRVc2VyQXZhaWxhYmxlRm9yQ2xhaW0BBQR1c2VyBA0kdDAxMzk4MzE0MDM1CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAUNJHQwMTM5ODMxNDAzNQJfMQQLY2xhaW1BbW91bnQIBQ0kdDAxMzk4MzE0MDM1Al8yBA91c2VyQ2xhaW1BbW91bnQJAGQCBRFhdmFpbGFibGVGb3JDbGFpbQULY2xhaW1BbW91bnQDCQAAAgUPdXNlckNsYWltQW1vdW50AAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtVc2VyTGFzdEludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUWa1VzZXJBdmFpbGFibGVGb3JDbGFpbQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUPdXNlckNsYWltQW1vdW50BQRTV09QBQNuaWwBaQERY2xhaW1BbmRTdGFrZVNXT1AACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTQ0NjUxNDUyNwkBEmdldFRvdGFsTG9ja2VkSW5mbwAED3RvdGFsU1dPUExvY2tlZAgFDSR0MDE0NDY1MTQ1MjcCXzEEEHRvdGFsR1N3b3BMb2NrZWQIBQ0kdDAxNDQ2NTE0NTI3Al8yBA0kdDAxNDUzMjE0NTk1CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUExvY2tlZAgFDSR0MDE0NTMyMTQ1OTUCXzEED3VzZXJHU3dvcExvY2tlZAgFDSR0MDE0NTMyMTQ1OTUCXzIEEWF2YWlsYWJsZUZvckNsYWltCQEYZ2V0VXNlckF2YWlsYWJsZUZvckNsYWltAQUEdXNlcgQNJHQwMTQ2NTkxNDcxMAkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFDSR0MDE0NjU5MTQ3MTACXzEEC2NsYWltQW1vdW50CAUNJHQwMTQ2NTkxNDcxMAJfMgQPdXNlckNsYWltQW1vdW50CQBkAgURYXZhaWxhYmxlRm9yQ2xhaW0FC2NsYWltQW1vdW50BBF1c2VyU1dPUExvY2tlZE5ldwkAZAIFDnVzZXJTV09QTG9ja2VkBQ91c2VyQ2xhaW1BbW91bnQEEnVzZXJHU3dvcExvY2tlZE5ldwkAZAIFD3VzZXJHU3dvcExvY2tlZAkAaAIFD3VzZXJDbGFpbUFtb3VudAACBBJ0b3RhbFNXT1BMb2NrZWROZXcJAGQCBQ90b3RhbFNXT1BMb2NrZWQFD3VzZXJDbGFpbUFtb3VudAQTdG90YWxHU3dvcExvY2tlZE5ldwkAZAIFEHRvdGFsR1N3b3BMb2NrZWQJAGgCBQ91c2VyQ2xhaW1BbW91bnQAAgMJAAACBQ91c2VyQ2xhaW1BbW91bnQAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFFWtVc2VyU3dvcFVubG9ja0hlaWdodAkAZAIFBmhlaWdodAUUbG9ja1N3b3BCbG9ja3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFEWtVc2VyTGFzdEludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtUb3RhbFNXT1BMb2NrZWQFEnRvdGFsU1dPUExvY2tlZE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1RvdGFsR1N3b3BMb2NrZWQFE3RvdGFsR1N3b3BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFD2tVc2VyU1dPUExvY2tlZAURdXNlclNXT1BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFEGtVc2VyR1N3b3BMb2NrZWQFEnVzZXJHU3dvcExvY2tlZE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrVXNlckF2YWlsYWJsZUZvckNsYWltAAAFA25pbAFpARNsb2NrU1dPUEZyb21GYXJtaW5nAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQNJHQwMTU3MDYxNTc4MQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQ0kdDAxNTcwNjE1NzgxAl8xBApwbXRBc3NldElkCAUNJHQwMTU3MDYxNTc4MQJfMgMJAQIhPQIIBQFpBmNhbGxlcgULZmFybWluZ0FkZHIJAAIBAiNPbmx5IGZhcm1pbmcgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQIhPQIFCnBtdEFzc2V0SWQFBFNXT1AJAAIBAhRJbmNvcnJlY3QgcG10QXNzZXRJZAQEdXNlcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEDGxhc3RJbnRlcmVzdAkBE2dldExhc3RJbnRlcmVzdEluZm8ABA0kdDAxNjAyNDE2MDg3CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUExvY2tlZAgFDSR0MDE2MDI0MTYwODcCXzEED3VzZXJHU3dvcExvY2tlZAgFDSR0MDE2MDI0MTYwODcCXzIEDSR0MDE2MDkyMTYxNTMJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQ0kdDAxNjA5MjE2MTUzAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFDSR0MDE2MDkyMTYxNTMCXzIEEWF2YWlsYWJsZUZvckNsYWltCQEYZ2V0VXNlckF2YWlsYWJsZUZvckNsYWltAQUEdXNlcgQUYXZhaWxhYmxlRm9yQ2xhaW1OZXcJAGQCBRFhdmFpbGFibGVGb3JDbGFpbQUUY2xhaW1BbW91bnRBdmFpbGFibGUEEXVzZXJTV09QTG9ja2VkTmV3CQBkAgUOdXNlclNXT1BMb2NrZWQFCXBtdEFtb3VudAQSdXNlckdTd29wTG9ja2VkTmV3CQBkAgUPdXNlckdTd29wTG9ja2VkCQBoAgUJcG10QW1vdW50AAIEDSR0MDE2NDA1MTY0NjcJARJnZXRUb3RhbExvY2tlZEluZm8ABA90b3RhbFNXT1BMb2NrZWQIBQ0kdDAxNjQwNTE2NDY3Al8xBBB0b3RhbEdTd29wTG9ja2VkCAUNJHQwMTY0MDUxNjQ2NwJfMgQSdG90YWxTV09QTG9ja2VkTmV3CQBkAgUPdG90YWxTV09QTG9ja2VkBQlwbXRBbW91bnQEE3RvdGFsR1N3b3BMb2NrZWROZXcJAGQCBRB0b3RhbEdTd29wTG9ja2VkCQBoAgUJcG10QW1vdW50AAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUVa1VzZXJTd29wVW5sb2NrSGVpZ2h0CQBkAgUGaGVpZ2h0BRRsb2NrU3dvcEJsb2Nrc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRFrVXNlckxhc3RJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFD2tVc2VyU1dPUExvY2tlZAURdXNlclNXT1BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJHU3dvcExvY2tlZAUPdXNlckdTd29wTG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtVc2VyQXZhaWxhYmxlRm9yQ2xhaW0FFGF2YWlsYWJsZUZvckNsYWltTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrVG90YWxTV09QTG9ja2VkBRJ0b3RhbFNXT1BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtUb3RhbEdTd29wTG9ja2VkBRN0b3RhbEdTd29wTG9ja2VkTmV3BQNuaWwBaQENdXBkYXRlV2VpZ2h0cwQMY3VycmVudFBvb2xzDmN1cnJlbnRSZXdhcmRzEnJld2FyZFVwZGF0ZUhlaWdodApwYWdpbmF0aW9uCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAthbW91bnRQb29scwAKBBd0b3RhbFJld2FyZFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRNrUmV3YXJkVXBkYXRlSGVpZ2h0AAADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzCQDMCAIFDm1vbmV5Qm94UHViS2V5BQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAGYCCQCQAwEFDGN1cnJlbnRQb29scwULYW1vdW50UG9vbHMJAAIBCQCsAgICFk1heCBhbW91bnQgb2YgcG9vbCBpcyAJAKQDAQULYW1vdW50UG9vbHMDCQBnAgUXdG90YWxSZXdhcmRVcGRhdGVIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAAgECLXJld2FyZFVwZGF0ZUhlaWdodCA8PSB0b3RhbFJld2FyZFVwZGF0ZUhlaWdodAMJAGcCBQZoZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAAgECHGhlaWdodCA+PSByZXdhcmRVcGRhdGVIZWlnaHQDCQBnAgAABRJyZXdhcmRVcGRhdGVIZWlnaHQJAAIBAhgwID49IHJld2FyZFVwZGF0ZUhlaWdodCAKAQNzdW0CAWEBYgkAZAIFAWEFAWIKARljaGFuZ2VQcmV2aW91c1Jld2FyZEVudHJ5AgthY2N1bXVsYXRlZARwb29sBBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CQETZ2V0UG9vbFVwZGF0ZUhlaWdodAEFBHBvb2wDAwkBASEBCQEYaXNEZWZpbmVQb29sVXBkYXRlSGVpZ2h0AQUEcG9vbAYDCQECIT0CBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQJAAACBRZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BRd0b3RhbFJld2FyZFVwZGF0ZUhlaWdodAcECnBvb2xSZXdhcmQJARBnZXRDdXJQb29sV2VpZ2h0AQUEcG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMFCnBvb2xSZXdhcmQFC2FjY3VtdWxhdGVkBApwb29sUmV3YXJkCQERZ2V0UHJldlBvb2xXZWlnaHQBBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFG2tSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwUKcG9vbFJld2FyZAULYWNjdW11bGF0ZWQKARhjaGFuZ2VDdXJyZW50UmV3YXJkRW50cnkCC2FjY3VtdWxhdGVkBHBvb2wECXBvb2xJbmRleAkBBXZhbHVlAQkAzwgCBQxjdXJyZW50UG9vbHMFBHBvb2wECnBvb2xSZXdhcmQJAJEDAgUOY3VycmVudFJld2FyZHMFCXBvb2xJbmRleAMJAGYCAAAFCnBvb2xSZXdhcmQJAAIBAg5Qb29sUmV3YXJkIDwgMAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRprUmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAUKcG9vbFJld2FyZAULYWNjdW11bGF0ZWQKARFjaGFuZ2VIZWlnaHRFbnRyeQILYWNjdW11bGF0ZWQEcG9vbAQKcG9vbEhlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0BAd1cFVJbnRyCQD8BwQFC2Zhcm1pbmdBZGRyAhJ1cGRhdGVQb29sSW50ZXJlc3QJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUHdXBVSW50cgUHdXBVSW50cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrSGVpZ2h0UG9vbEZyYWN0aW9uBQpwb29sSGVpZ2h0BQthY2N1bXVsYXRlZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgoBDGdldFN1bVJld2FyZAIKY3VyVGVtcFN1bQpwYWdpbmF0aW9uAwkAAAIFCnBhZ2luYXRpb24AAAMJAGYCBQpjdXJUZW1wU3VtBQ50b3RhbFZvdGVTaGFyZQkAAgEJAKwCAgkArAICCQCsAgICSnN1bVJld2FyZFByZXZpb3VzID4gdG90YWxWb3RlU2hhcmUgb3Igc3VtUmV3YXJkQ3VycmVudCA+IHRvdGFsVm90ZVNoYXJlIC0gCQCkAwEFCnBhZ2luYXRpb24CASAJAKQDAQUKY3VyVGVtcFN1bQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrVGVtcEN1clN1bQUKY3VyVGVtcFN1bQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSJrUmV3YXJkVXBkYXRlRmlyc3RQYWdpbmF0aW9uSGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFA25pbAMJAAACBQpwYWdpbmF0aW9uAAEEEWN1clRlbXBTdW1Gcm9tS2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tUZW1wQ3VyU3VtAAAEJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFImtSZXdhcmRVcGRhdGVGaXJzdFBhZ2luYXRpb25IZWlnaHQAAAMJAGYCCQBkAgUKY3VyVGVtcFN1bQURY3VyVGVtcFN1bUZyb21LZXkFDnRvdGFsVm90ZVNoYXJlCQACAQkArAICCQCsAgIJAKwCAgJKc3VtUmV3YXJkUHJldmlvdXMgPiB0b3RhbFZvdGVTaGFyZSBvciBzdW1SZXdhcmRDdXJyZW50ID4gdG90YWxWb3RlU2hhcmUgLSAJAKQDAQUKcGFnaW5hdGlvbgIBIAkApAMBCQBkAgUKY3VyVGVtcFN1bQURY3VyVGVtcFN1bUZyb21LZXkDCQECIT0CBSZyZXdhcmRVcGRhdGVIZWlnaHRGaXJzdFBhZ2luYXRpb25FbnRyeQUScmV3YXJkVXBkYXRlSGVpZ2h0CQACAQJEY3VycmVudCByZXdhcmRVcGRhdGVIZWlnaHQgIT0gcmV3YXJkVXBkYXRlSGVpZ2h0Rmlyc3RQYWdpbmF0aW9uRW50cnkJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1RlbXBDdXJTdW0JAGQCBQpjdXJUZW1wU3VtBRFjdXJUZW1wU3VtRnJvbUtleQUDbmlsBQNuaWwDCQAAAgUKcGFnaW5hdGlvbgACBAZjdXJTdW0JAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tUZW1wQ3VyU3VtAAAFCmN1clRlbXBTdW0EJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFImtSZXdhcmRVcGRhdGVGaXJzdFBhZ2luYXRpb25IZWlnaHQAAAMJAQIhPQIFBmN1clN1bQUOdG90YWxWb3RlU2hhcmUJAAIBAklzdW1SZXdhcmRQcmV2aW91cyAhPSB0b3RhbFZvdGVTaGFyZSBvciBzdW1SZXdhcmRDdXJyZW50ICE9IHRvdGFsVm90ZVNoYXJlAwkBAiE9AgUmcmV3YXJkVXBkYXRlSGVpZ2h0Rmlyc3RQYWdpbmF0aW9uRW50cnkFEnJld2FyZFVwZGF0ZUhlaWdodAkAAgECRGN1cnJlbnQgcmV3YXJkVXBkYXRlSGVpZ2h0ICE9IHJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFC2tUZW1wQ3VyU3VtBQZjdXJTdW0FA25pbAUDbmlsCQACAQIUSW5jb3JyZWN0IHBhZ2luYXRpb24EFnByZXZpb3VzUmV3YXJkRW50cnlOZXcKAAIkbAUMY3VycmVudFBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARljaGFuZ2VQcmV2aW91c1Jld2FyZEVudHJ5AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBBVjdXJyZW50UmV3YXJkRW50cnlOZXcKAAIkbAUMY3VycmVudFBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARhjaGFuZ2VDdXJyZW50UmV3YXJkRW50cnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEEWhlaWdodEVudHJ5TmV3Q3VyCgACJGwFDGN1cnJlbnRQb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2hhbmdlSGVpZ2h0RW50cnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEFHN1bVJld2FyZEN1cnJlbnRUZW1wCgACJGwFDmN1cnJlbnRSZXdhcmRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYzXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNzdW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjNfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYzXzICCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDSR0MDIxNDg4MjE1OTkJAQxnZXRTdW1SZXdhcmQCBRRzdW1SZXdhcmRDdXJyZW50VGVtcAUKcGFnaW5hdGlvbgQQc3VtUmV3YXJkQ3VycmVudAgFDSR0MDIxNDg4MjE1OTkCXzEEJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CAUNJHQwMjE0ODgyMTU5OQJfMgQXcmV3YXJkVXBkYXRlSGVpZ2h0RW50cnkDCQAAAgUKcGFnaW5hdGlvbgACCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrUmV3YXJkVXBkYXRlSGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFA25pbAUDbmlsAwkAZgIFBmhlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0CQACAQIbcmV3YXJkVXBkYXRlSGVpZ2h0IDwgaGVpZ2h0CQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgUWcHJldmlvdXNSZXdhcmRFbnRyeU5ldwUVY3VycmVudFJld2FyZEVudHJ5TmV3BRFoZWlnaHRFbnRyeU5ld0N1cgUQc3VtUmV3YXJkQ3VycmVudAUXcmV3YXJkVXBkYXRlSGVpZ2h0RW50cnkFJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5AWkBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMFBmFjdGl2ZQkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtEZWxldGVFbnRyeQEFBmtDYXVzZQUDbmlsAQJ0eAEGdmVyaWZ5AAQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACLy++PQ==", "height": 2279358, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DUg3371WqvKdHqXYPo6PGFt8PPWKGKBNPRSqTTLwGgqb Next: EHYDiRDmTfBPmLcejzEMHuQ3iGqnPppZham6mRg8hwrN Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let kActive = "active"
5+
6+let kActiveGlob = "active_all_contracts"
57
68 let kCause = "shutdown_cause"
79
9193
9294 let kAirdropMoneyBoxAddr = "airdrop_fee_money_box"
9395
96+let kOraclePool = "pool_"
97+
9498 let oracle = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9599
96100 func getBase58FromOracle (key) = match getString(oracle, key) {
143147
144148 let active = valueOrElse(getBoolean(this, kActive), true)
145149
150+let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
151+
146152 let airdropFee = getIntegerValue(oracle, kAirdropFee)
147153
148154 let currVotingPeriod = (basePeriod + ((height - startHeight) / periodLength))
150156 func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
151157
152158
153-func isActive () = if (active)
159+func isActive () = if (if (active)
160+ then activeGlob
161+ else false)
154162 then unit
155163 else throw("DApp is inactive at this moment")
156164
178186
179187
180188 func getUserInterestInfo (user,lastInterest) = {
181- let $t048874950 = getUserLockedInfo(user)
182- let userSWOPAmount = $t048874950._1
183- let userGSwopAmount = $t048874950._2
189+ let $t050365099 = getUserLockedInfo(user)
190+ let userSWOPAmount = $t050365099._1
191+ let userGSwopAmount = $t050365099._2
184192 let userLastInterest = valueOrElse(getInteger(this, (user + kUserLastInterest)), lastInterest)
185193 $Tuple3(userLastInterest, userSWOPAmount, userGSwopAmount)
186194 }
231239
232240
233241 func getUserVoteInfo (user) = {
234- let $t073147847 = if (isDefined(getString(votingAddr, (toString(user) + kUserTotalStruc))))
242+ let $t074637996 = if (isDefined(getString(votingAddr, (toString(user) + kUserTotalStruc))))
235243 then {
236244 let data = split(valueOrErrorMessage(getString(votingAddr, (toString(user) + kUserTotalStruc)), "Empty kUserTotalStruc"), "_")
237245 $Tuple3(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]))
240248 let uPoolTotalSWOP = valueOrElse(getInteger(votingAddr, (toString(user) + kUserTotalVoteSWOP)), 0)
241249 $Tuple3(uPoolTotalSWOP, 0, currVotingPeriod)
242250 }
243- let userTotalVoteSWOP = $t073147847._1
244- let userUnvoted = $t073147847._2
245- let userUnvotedPeriod = $t073147847._3
251+ let userTotalVoteSWOP = $t074637996._1
252+ let userUnvoted = $t074637996._2
253+ let userUnvotedPeriod = $t074637996._3
246254 let userUnvotedActual = if ((userUnvotedPeriod == currVotingPeriod))
247255 then userUnvoted
248256 else 0
264272
265273 func claimCalc (user) = {
266274 let lastInterest = getLastInterestInfo()
267- let $t087218818 = getUserInterestInfo(user, lastInterest)
268- let userLastInterest = $t087218818._1
269- let userSWOPLocked = $t087218818._2
270- let userGSwopAmount = $t087218818._3
275+ let $t088708967 = getUserInterestInfo(user, lastInterest)
276+ let userLastInterest = $t088708967._1
277+ let userSWOPLocked = $t088708967._2
278+ let userGSwopAmount = $t088708967._3
271279 let claimAmount = fraction(userGSwopAmount, (lastInterest - userLastInterest), scaleValue)
272280 let userNewInterest = lastInterest
273281 $Tuple2(userNewInterest, claimAmount)
274282 }
275283
276284
285+func isOraclePool (poolAddress) = if (isDefined(getString(oracle, (kOraclePool + poolAddress))))
286+ then unit
287+ else throw("DApp is not registered pool")
288+
289+
290+@Callable(i)
291+func addPool (poolAddress) = valueOrElse(isAdminCall(i), valueOrElse(isActive(), valueOrElse(isOraclePool(poolAddress), if (isDefined(getInteger(this, (poolAddress + kRewardPoolFractionCurrent))))
292+ then throw("Pool already in governance")
293+ else [IntegerEntry((poolAddress + kRewardPoolFractionCurrent), 0), IntegerEntry((poolAddress + kRewardPoolFractionPrevious), 0), IntegerEntry((poolAddress + kHeightPoolFraction), getIntegerValue(this, kRewardUpdateHeight))])))
294+
295+
296+
277297 @Callable(i)
278298 func airDrop () = valueOrElse(isActive(), {
279- let $t090489123 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
280- let pmtAmount = $t090489123._1
281- let pmtAssetId = $t090489123._2
299+ let $t098669941 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
300+ let pmtAmount = $t098669941._1
301+ let pmtAssetId = $t098669941._2
282302 if ((pmtAssetId != SWOP))
283303 then throw("Incorrect pmtAssetId")
284304 else {
285305 let airdropFeeAmount = fraction(pmtAmount, airdropFee, feeSacle6, CEILING)
286- let $t092969358 = getTotalLockedInfo()
287- let totalSWOPLocked = $t092969358._1
288- let totalGSwopLocked = $t092969358._2
306+ let $t01011410176 = getTotalLockedInfo()
307+ let totalSWOPLocked = $t01011410176._1
308+ let totalGSwopLocked = $t01011410176._2
289309 let lastInterest = getLastInterestInfo()
290310 let interestNew = (lastInterest + fraction((pmtAmount - airdropFeeAmount), scaleValue, totalGSwopLocked))
291311 [IntegerEntry(kLastInterest, interestNew), ScriptTransfer(airdropMoneyBoxAddr, airdropFeeAmount, SWOP)]
296316
297317 @Callable(i)
298318 func lockSWOP () = valueOrElse(isActive(), {
299- let $t097369811 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
300- let pmtAmount = $t097369811._1
301- let pmtAssetId = $t097369811._2
319+ let $t01055410629 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
320+ let pmtAmount = $t01055410629._1
321+ let pmtAssetId = $t01055410629._2
302322 if ((pmtAssetId != SWOP))
303323 then throw("Incorrect pmtAssetId")
304324 else {
305325 let user = toString(i.caller)
306326 let lastInterest = getLastInterestInfo()
307- let $t0996210025 = getUserLockedInfo(user)
308- let userSWOPLocked = $t0996210025._1
309- let userGSwopLocked = $t0996210025._2
310- let $t01003010091 = claimCalc(user)
311- let userNewInterest = $t01003010091._1
312- let claimAmountAvailable = $t01003010091._2
327+ let $t01078010843 = getUserLockedInfo(user)
328+ let userSWOPLocked = $t01078010843._1
329+ let userGSwopLocked = $t01078010843._2
330+ let $t01084810909 = claimCalc(user)
331+ let userNewInterest = $t01084810909._1
332+ let claimAmountAvailable = $t01084810909._2
313333 let availableForClaim = getUserAvailableForClaim(user)
314334 let availableForClaimNew = (availableForClaim + claimAmountAvailable)
315335 let userSWOPLockedNew = (userSWOPLocked + pmtAmount)
316336 let userGSwopLockedNew = (userGSwopLocked + pmtAmount)
317- let $t01033910401 = getTotalLockedInfo()
318- let totalSWOPLocked = $t01033910401._1
319- let totalGSwopLocked = $t01033910401._2
337+ let $t01115711219 = getTotalLockedInfo()
338+ let totalSWOPLocked = $t01115711219._1
339+ let totalGSwopLocked = $t01115711219._2
320340 let totalSWOPLockedNew = (totalSWOPLocked + pmtAmount)
321341 let totalGSwopLockedNew = (totalGSwopLocked + pmtAmount)
322342 [IntegerEntry((user + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((user + kUserGSwopLocked), userGSwopLockedNew), IntegerEntry((user + kUserAvailableForClaim), availableForClaimNew), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew)]
334354 else if ((unlockHeight > height))
335355 then throw(("You can't withdraw till " + toString(unlockHeight)))
336356 else {
337- let $t01137911441 = getTotalLockedInfo()
338- let totalSWOPLocked = $t01137911441._1
339- let totalGSwopLocked = $t01137911441._2
340- let $t01144611509 = getUserLockedInfo(user)
341- let userSWOPLocked = $t01144611509._1
342- let userGSwopLocked = $t01144611509._2
343- let $t01151411575 = claimCalc(user)
344- let userNewInterest = $t01151411575._1
345- let claimAmountAvailable = $t01151411575._2
346- let $t01158011646 = getUserVoteInfo(i.caller)
347- let userVoteAmount = $t01158011646._1
348- let userUnvoteAmount = $t01158011646._2
357+ let $t01219712259 = getTotalLockedInfo()
358+ let totalSWOPLocked = $t01219712259._1
359+ let totalGSwopLocked = $t01219712259._2
360+ let $t01226412327 = getUserLockedInfo(user)
361+ let userSWOPLocked = $t01226412327._1
362+ let userGSwopLocked = $t01226412327._2
363+ let $t01233212393 = claimCalc(user)
364+ let userNewInterest = $t01233212393._1
365+ let claimAmountAvailable = $t01233212393._2
366+ let $t01239812464 = getUserVoteInfo(i.caller)
367+ let userVoteAmount = $t01239812464._1
368+ let userUnvoteAmount = $t01239812464._2
349369 let userVoteAmountForNewPool = getUserTotalVoteForNewPoolAmount(i.caller)
350370 let blockedInLaunchpad = getUserBlockedInLauchpad(i.caller)
351371 if (if (if ((0 > userUnvoteAmount))
376396 func claimAndWithdrawSWOP () = valueOrElse(isActive(), {
377397 let user = toString(i.caller)
378398 let availableForClaim = getUserAvailableForClaim(user)
379- let $t01316513217 = claimCalc(user)
380- let userNewInterest = $t01316513217._1
381- let claimAmount = $t01316513217._2
399+ let $t01398314035 = claimCalc(user)
400+ let userNewInterest = $t01398314035._1
401+ let claimAmount = $t01398314035._2
382402 let userClaimAmount = (availableForClaim + claimAmount)
383403 if ((userClaimAmount == 0))
384404 then throw("You have 0 available SWOP")
385- else [IntegerEntry((user + kUserLastInterest), userNewInterest), ScriptTransfer(i.caller, userClaimAmount, SWOP)]
405+ else [IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserAvailableForClaim), 0), ScriptTransfer(i.caller, userClaimAmount, SWOP)]
386406 })
387407
388408
390410 @Callable(i)
391411 func claimAndStakeSWOP () = valueOrElse(isActive(), {
392412 let user = toString(i.caller)
393- let $t01359013652 = getTotalLockedInfo()
394- let totalSWOPLocked = $t01359013652._1
395- let totalGSwopLocked = $t01359013652._2
396- let $t01365713720 = getUserLockedInfo(user)
397- let userSWOPLocked = $t01365713720._1
398- let userGSwopLocked = $t01365713720._2
413+ let $t01446514527 = getTotalLockedInfo()
414+ let totalSWOPLocked = $t01446514527._1
415+ let totalGSwopLocked = $t01446514527._2
416+ let $t01453214595 = getUserLockedInfo(user)
417+ let userSWOPLocked = $t01453214595._1
418+ let userGSwopLocked = $t01453214595._2
399419 let availableForClaim = getUserAvailableForClaim(user)
400- let $t01378413835 = claimCalc(user)
401- let userNewInterest = $t01378413835._1
402- let claimAmount = $t01378413835._2
420+ let $t01465914710 = claimCalc(user)
421+ let userNewInterest = $t01465914710._1
422+ let claimAmount = $t01465914710._2
403423 let userClaimAmount = (availableForClaim + claimAmount)
404424 let userSWOPLockedNew = (userSWOPLocked + userClaimAmount)
405425 let userGSwopLockedNew = (userGSwopLocked + (userClaimAmount * 2))
407427 let totalGSwopLockedNew = (totalGSwopLocked + (userClaimAmount * 2))
408428 if ((userClaimAmount == 0))
409429 then throw("You have 0 available SWOP")
410- else [IntegerEntry((toString(i.caller) + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((toString(i.caller) + kUserLastInterest), userNewInterest), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew), IntegerEntry((toString(i.caller) + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((toString(i.caller) + kUserGSwopLocked), userGSwopLockedNew)]
430+ else [IntegerEntry((toString(i.caller) + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((toString(i.caller) + kUserLastInterest), userNewInterest), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew), IntegerEntry((toString(i.caller) + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((toString(i.caller) + kUserGSwopLocked), userGSwopLockedNew), IntegerEntry((user + kUserAvailableForClaim), 0)]
411431 })
412432
413433
414434
415435 @Callable(i)
416436 func lockSWOPFromFarming () = valueOrElse(isActive(), {
417- let $t01477514850 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
418- let pmtAmount = $t01477514850._1
419- let pmtAssetId = $t01477514850._2
437+ let $t01570615781 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
438+ let pmtAmount = $t01570615781._1
439+ let pmtAssetId = $t01570615781._2
420440 if ((i.caller != farmingAddr))
421441 then throw("Only farming can call this function")
422442 else if ((pmtAssetId != SWOP))
424444 else {
425445 let user = toString(i.originCaller)
426446 let lastInterest = getLastInterestInfo()
427- let $t01509315156 = getUserLockedInfo(user)
428- let userSWOPLocked = $t01509315156._1
429- let userGSwopLocked = $t01509315156._2
430- let $t01516115222 = claimCalc(user)
431- let userNewInterest = $t01516115222._1
432- let claimAmountAvailable = $t01516115222._2
447+ let $t01602416087 = getUserLockedInfo(user)
448+ let userSWOPLocked = $t01602416087._1
449+ let userGSwopLocked = $t01602416087._2
450+ let $t01609216153 = claimCalc(user)
451+ let userNewInterest = $t01609216153._1
452+ let claimAmountAvailable = $t01609216153._2
433453 let availableForClaim = getUserAvailableForClaim(user)
434454 let availableForClaimNew = (availableForClaim + claimAmountAvailable)
435455 let userSWOPLockedNew = (userSWOPLocked + pmtAmount)
436456 let userGSwopLockedNew = (userGSwopLocked + (pmtAmount * 2))
437- let $t01547415536 = getTotalLockedInfo()
438- let totalSWOPLocked = $t01547415536._1
439- let totalGSwopLocked = $t01547415536._2
457+ let $t01640516467 = getTotalLockedInfo()
458+ let totalSWOPLocked = $t01640516467._1
459+ let totalGSwopLocked = $t01640516467._2
440460 let totalSWOPLockedNew = (totalSWOPLocked + pmtAmount)
441461 let totalGSwopLockedNew = (totalGSwopLocked + (pmtAmount * 2))
442462 [IntegerEntry((user + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((user + kUserGSwopLocked), userGSwopLocked), IntegerEntry((user + kUserAvailableForClaim), availableForClaimNew), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew)]
577597
578598 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
579599 }
580- let $t02055720668 = getSumReward(sumRewardCurrentTemp, pagination)
581- let sumRewardCurrent = $t02055720668._1
582- let rewardUpdateHeightFirstPaginationEntry = $t02055720668._2
600+ let $t02148821599 = getSumReward(sumRewardCurrentTemp, pagination)
601+ let sumRewardCurrent = $t02148821599._1
602+ let rewardUpdateHeightFirstPaginationEntry = $t02148821599._2
583603 let rewardUpdateHeightEntry = if ((pagination == 2))
584604 then [IntegerEntry(kRewardUpdateHeight, rewardUpdateHeight)]
585605 else nil
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let kActive = "active"
5+
6+let kActiveGlob = "active_all_contracts"
57
68 let kCause = "shutdown_cause"
79
810 let kLastInterest = "last_interest"
911
1012 let kUserLastInterest = "_last_interest"
1113
1214 let kUserSWOPLocked = "_SWOP_amount"
1315
1416 let kTotalSWOPLocked = "total_SWOP_amount"
1517
1618 let kUserSwopUnlockHeight = "_SWOP_unlock_height"
1719
1820 let kUserGSwopLocked = "_GSwop_amount"
1921
2022 let kTotalGSwopLocked = "total_GSwop_amount"
2123
2224 let kUserTotalVoteSWOP = "_user_total_vote_gSWOP"
2325
2426 let kUserAvailableForClaim = "_user_available_for_claim"
2527
2628 let kRewardPoolFractionCurrent = "_current_pool_fraction_reward"
2729
2830 let kRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
2931
3032 let kHeightPoolFraction = "_pool_reward_update_height"
3133
3234 let kRewardUpdateHeight = "reward_update_height"
3335
3436 let kRewardUpdateFirstPaginationHeight = "reward_update_height_first_pagination"
3537
3638 let kNoVotingForNewPool = "_vote_no"
3739
3840 let kYesVotingForNewPool = "_vote_yes"
3941
4042 let kStatusOfVotingForNewPool = "_status"
4143
4244 let kHeightOfPoolVotingForNewPool = "_finish_height"
4345
4446 let activeVoteFirst = "voting_active_cell_1"
4547
4648 let activeVoteSecond = "voting_active_cell_2"
4749
4850 let activeVoteThird = "voting_active_cell_3"
4951
5052 let kTempCurSum = "sum_reward_current"
5153
5254 let kLaunchpadBoughtTickets = "_bought_tickets"
5355
5456 let kLaunchpadSwopPerTickets = "_swop_per_ticket"
5557
5658 let kLaunchpadActiveId = "launchpad_active_id"
5759
5860 let kLaunchpadDuration = "_duration"
5961
6062 let kLaunchpadStartHeight = "_start_height"
6163
6264 let kStartHeight = "start_height"
6365
6466 let kBasePeriod = "base_period"
6567
6668 let kPeriodLength = "period_length"
6769
6870 let kUserTotalStruc = "_user_total_struc"
6971
7072 let kLauchpadFreezSwopDuration = "_freeze_swop_duration"
7173
7274 let kSWOPid = "SWOP_id"
7375
7476 let kAirdropFee = "airdrop_fee"
7577
7678 let kAdminPubKey1 = "admin_pub_1"
7779
7880 let kAdminPubKey2 = "admin_pub_2"
7981
8082 let kAdminPubKey3 = "admin_pub_3"
8183
8284 let kMoneyBoxPubKey = "money_box_pub_key"
8385
8486 let kFarmingAddr = "farming_address"
8587
8688 let kVotingAddr = "voting_address"
8789
8890 let kVotingNewPoolAddr = "voting_new_pool_address"
8991
9092 let kLaunchpadAddr = "launchpad_address"
9193
9294 let kAirdropMoneyBoxAddr = "airdrop_fee_money_box"
9395
96+let kOraclePool = "pool_"
97+
9498 let oracle = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9599
96100 func getBase58FromOracle (key) = match getString(oracle, key) {
97101 case string: String =>
98102 fromBase58String(string)
99103 case nothing =>
100104 throw((key + "is empty"))
101105 }
102106
103107
104108 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
105109
106110 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
107111
108112 let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
109113
110114 let moneyBoxPubKey = getBase58FromOracle(kMoneyBoxPubKey)
111115
112116 let farmingAddr = Address(getBase58FromOracle(kFarmingAddr))
113117
114118 let votingAddr = Address(getBase58FromOracle(kVotingAddr))
115119
116120 let votingNewPoolAddr = Address(getBase58FromOracle(kVotingNewPoolAddr))
117121
118122 let launchpadAddr = Address(getBase58FromOracle(kLaunchpadAddr))
119123
120124 let airdropMoneyBoxAddr = Address(getBase58FromOracle(kAirdropMoneyBoxAddr))
121125
122126 let lockSwopBlocksAmount = (10102 * 4)
123127
124128 let SWOP = fromBase58String(getStringValue(farmingAddr, kSWOPid))
125129
126130 let scaleValue = 100000000
127131
128132 let totalVoteShare = 10000000000
129133
130134 let feeSacle6 = 1000000
131135
132136 let basePeriod = valueOrErrorMessage(getInteger(votingAddr, kBasePeriod), "Empty kBasePeriod at voting contract")
133137
134138 let startHeight = valueOrErrorMessage(getInteger(votingAddr, kStartHeight), "Empty kStartHeight at voting contract")
135139
136140 let periodLength = valueOrErrorMessage(getInteger(votingAddr, kPeriodLength), "Empty kPeriodLength at voting contract")
137141
138142 let firstActiveVote = valueOrElse(getString(votingNewPoolAddr, activeVoteFirst), "")
139143
140144 let secondActiveVote = valueOrElse(getString(votingNewPoolAddr, activeVoteSecond), "")
141145
142146 let thirdActiveVote = valueOrElse(getString(votingNewPoolAddr, activeVoteThird), "")
143147
144148 let active = valueOrElse(getBoolean(this, kActive), true)
145149
150+let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
151+
146152 let airdropFee = getIntegerValue(oracle, kAirdropFee)
147153
148154 let currVotingPeriod = (basePeriod + ((height - startHeight) / periodLength))
149155
150156 func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
151157
152158
153-func isActive () = if (active)
159+func isActive () = if (if (active)
160+ then activeGlob
161+ else false)
154162 then unit
155163 else throw("DApp is inactive at this moment")
156164
157165
158166 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
159167 then unit
160168 else throw("Only admin can call this function")
161169
162170
163171 func getLastInterestInfo () = valueOrElse(getInteger(this, kLastInterest), 0)
164172
165173
166174 func getTotalLockedInfo () = {
167175 let totalSwopLocked = valueOrElse(getInteger(this, kTotalSWOPLocked), 0)
168176 let totalGSwopLocked = valueOrElse(getInteger(this, kTotalGSwopLocked), totalSwopLocked)
169177 $Tuple2(totalSwopLocked, totalGSwopLocked)
170178 }
171179
172180
173181 func getUserLockedInfo (user) = {
174182 let userSwopLocked = valueOrElse(getInteger(this, (user + kUserSWOPLocked)), 0)
175183 let userGSwopLocked = valueOrElse(getInteger(this, (user + kUserGSwopLocked)), userSwopLocked)
176184 $Tuple2(userSwopLocked, userGSwopLocked)
177185 }
178186
179187
180188 func getUserInterestInfo (user,lastInterest) = {
181- let $t048874950 = getUserLockedInfo(user)
182- let userSWOPAmount = $t048874950._1
183- let userGSwopAmount = $t048874950._2
189+ let $t050365099 = getUserLockedInfo(user)
190+ let userSWOPAmount = $t050365099._1
191+ let userGSwopAmount = $t050365099._2
184192 let userLastInterest = valueOrElse(getInteger(this, (user + kUserLastInterest)), lastInterest)
185193 $Tuple3(userLastInterest, userSWOPAmount, userGSwopAmount)
186194 }
187195
188196
189197 func getUserAvailableForClaim (user) = valueOrElse(getInteger(this, (user + kUserAvailableForClaim)), 0)
190198
191199
192200 func getUserTotalVoteAmountForOnePool (pool,user) = {
193201 let voting = valueOrElse(getInteger(votingNewPoolAddr, pool), -1)
194202 let heightOfVoting = valueOrElse(getInteger(votingNewPoolAddr, (toString(voting) + kHeightOfPoolVotingForNewPool)), 0)
195203 let statusOfVoting = valueOrElse(getBoolean(votingNewPoolAddr, (toString(voting) + kStatusOfVotingForNewPool)), true)
196204 let currentHeight = height
197205 if ((0 > voting))
198206 then 0
199207 else if (!(statusOfVoting))
200208 then 0
201209 else if ((heightOfVoting > currentHeight))
202210 then (valueOrElse(getInteger(votingNewPoolAddr, (((toString(user) + "_") + toString(voting)) + kYesVotingForNewPool)), 0) + valueOrElse(getInteger(votingNewPoolAddr, (((toString(user) + "_") + toString(voting)) + kNoVotingForNewPool)), 0))
203211 else 0
204212 }
205213
206214
207215 func getUserTotalVoteForNewPoolAmount (user) = {
208216 let listOfVoting = [getUserTotalVoteAmountForOnePool(firstActiveVote, user), getUserTotalVoteAmountForOnePool(secondActiveVote, user), getUserTotalVoteAmountForOnePool(thirdActiveVote, user)]
209217 max(listOfVoting)
210218 }
211219
212220
213221 func getUserBlockedInLauchpad (user) = {
214222 let lauchpadId = toString(valueOrElse(getInteger(launchpadAddr, kLaunchpadActiveId), 0))
215223 if ((lauchpadId == "0"))
216224 then 0
217225 else {
218226 let lStartHeight = valueOrElse(getInteger(launchpadAddr, (lauchpadId + kLaunchpadStartHeight)), 0)
219227 let lDuration = valueOrElse(getInteger(launchpadAddr, (lauchpadId + kLaunchpadDuration)), 0)
220228 let lFreezeSwopDuration = valueOrElse(getInteger(launchpadAddr, (lauchpadId + kLauchpadFreezSwopDuration)), 0)
221229 let blockEndHeight = ((lStartHeight + lDuration) + lFreezeSwopDuration)
222230 if ((height > blockEndHeight))
223231 then 0
224232 else {
225233 let boughtTickets = valueOrElse(getInteger(launchpadAddr, (((toString(user) + "_") + lauchpadId) + kLaunchpadBoughtTickets)), 0)
226234 let swopPerTicket = valueOrElse(getInteger(launchpadAddr, (lauchpadId + kLaunchpadSwopPerTickets)), 0)
227235 (boughtTickets * swopPerTicket)
228236 }
229237 }
230238 }
231239
232240
233241 func getUserVoteInfo (user) = {
234- let $t073147847 = if (isDefined(getString(votingAddr, (toString(user) + kUserTotalStruc))))
242+ let $t074637996 = if (isDefined(getString(votingAddr, (toString(user) + kUserTotalStruc))))
235243 then {
236244 let data = split(valueOrErrorMessage(getString(votingAddr, (toString(user) + kUserTotalStruc)), "Empty kUserTotalStruc"), "_")
237245 $Tuple3(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]))
238246 }
239247 else {
240248 let uPoolTotalSWOP = valueOrElse(getInteger(votingAddr, (toString(user) + kUserTotalVoteSWOP)), 0)
241249 $Tuple3(uPoolTotalSWOP, 0, currVotingPeriod)
242250 }
243- let userTotalVoteSWOP = $t073147847._1
244- let userUnvoted = $t073147847._2
245- let userUnvotedPeriod = $t073147847._3
251+ let userTotalVoteSWOP = $t074637996._1
252+ let userUnvoted = $t074637996._2
253+ let userUnvotedPeriod = $t074637996._3
246254 let userUnvotedActual = if ((userUnvotedPeriod == currVotingPeriod))
247255 then userUnvoted
248256 else 0
249257 $Tuple2(userTotalVoteSWOP, userUnvotedActual)
250258 }
251259
252260
253261 func getPoolUpdateHeight (pool) = valueOrElse(getInteger(this, (pool + kHeightPoolFraction)), 0)
254262
255263
256264 func isDefinePoolUpdateHeight (pool) = isDefined(getInteger(this, (pool + kHeightPoolFraction)))
257265
258266
259267 func getCurPoolWeight (pool) = valueOrElse(getInteger(this, (pool + kRewardPoolFractionCurrent)), 0)
260268
261269
262270 func getPrevPoolWeight (pool) = valueOrElse(getInteger(this, (pool + kRewardPoolFractionPrevious)), 0)
263271
264272
265273 func claimCalc (user) = {
266274 let lastInterest = getLastInterestInfo()
267- let $t087218818 = getUserInterestInfo(user, lastInterest)
268- let userLastInterest = $t087218818._1
269- let userSWOPLocked = $t087218818._2
270- let userGSwopAmount = $t087218818._3
275+ let $t088708967 = getUserInterestInfo(user, lastInterest)
276+ let userLastInterest = $t088708967._1
277+ let userSWOPLocked = $t088708967._2
278+ let userGSwopAmount = $t088708967._3
271279 let claimAmount = fraction(userGSwopAmount, (lastInterest - userLastInterest), scaleValue)
272280 let userNewInterest = lastInterest
273281 $Tuple2(userNewInterest, claimAmount)
274282 }
275283
276284
285+func isOraclePool (poolAddress) = if (isDefined(getString(oracle, (kOraclePool + poolAddress))))
286+ then unit
287+ else throw("DApp is not registered pool")
288+
289+
290+@Callable(i)
291+func addPool (poolAddress) = valueOrElse(isAdminCall(i), valueOrElse(isActive(), valueOrElse(isOraclePool(poolAddress), if (isDefined(getInteger(this, (poolAddress + kRewardPoolFractionCurrent))))
292+ then throw("Pool already in governance")
293+ else [IntegerEntry((poolAddress + kRewardPoolFractionCurrent), 0), IntegerEntry((poolAddress + kRewardPoolFractionPrevious), 0), IntegerEntry((poolAddress + kHeightPoolFraction), getIntegerValue(this, kRewardUpdateHeight))])))
294+
295+
296+
277297 @Callable(i)
278298 func airDrop () = valueOrElse(isActive(), {
279- let $t090489123 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
280- let pmtAmount = $t090489123._1
281- let pmtAssetId = $t090489123._2
299+ let $t098669941 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
300+ let pmtAmount = $t098669941._1
301+ let pmtAssetId = $t098669941._2
282302 if ((pmtAssetId != SWOP))
283303 then throw("Incorrect pmtAssetId")
284304 else {
285305 let airdropFeeAmount = fraction(pmtAmount, airdropFee, feeSacle6, CEILING)
286- let $t092969358 = getTotalLockedInfo()
287- let totalSWOPLocked = $t092969358._1
288- let totalGSwopLocked = $t092969358._2
306+ let $t01011410176 = getTotalLockedInfo()
307+ let totalSWOPLocked = $t01011410176._1
308+ let totalGSwopLocked = $t01011410176._2
289309 let lastInterest = getLastInterestInfo()
290310 let interestNew = (lastInterest + fraction((pmtAmount - airdropFeeAmount), scaleValue, totalGSwopLocked))
291311 [IntegerEntry(kLastInterest, interestNew), ScriptTransfer(airdropMoneyBoxAddr, airdropFeeAmount, SWOP)]
292312 }
293313 })
294314
295315
296316
297317 @Callable(i)
298318 func lockSWOP () = valueOrElse(isActive(), {
299- let $t097369811 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
300- let pmtAmount = $t097369811._1
301- let pmtAssetId = $t097369811._2
319+ let $t01055410629 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
320+ let pmtAmount = $t01055410629._1
321+ let pmtAssetId = $t01055410629._2
302322 if ((pmtAssetId != SWOP))
303323 then throw("Incorrect pmtAssetId")
304324 else {
305325 let user = toString(i.caller)
306326 let lastInterest = getLastInterestInfo()
307- let $t0996210025 = getUserLockedInfo(user)
308- let userSWOPLocked = $t0996210025._1
309- let userGSwopLocked = $t0996210025._2
310- let $t01003010091 = claimCalc(user)
311- let userNewInterest = $t01003010091._1
312- let claimAmountAvailable = $t01003010091._2
327+ let $t01078010843 = getUserLockedInfo(user)
328+ let userSWOPLocked = $t01078010843._1
329+ let userGSwopLocked = $t01078010843._2
330+ let $t01084810909 = claimCalc(user)
331+ let userNewInterest = $t01084810909._1
332+ let claimAmountAvailable = $t01084810909._2
313333 let availableForClaim = getUserAvailableForClaim(user)
314334 let availableForClaimNew = (availableForClaim + claimAmountAvailable)
315335 let userSWOPLockedNew = (userSWOPLocked + pmtAmount)
316336 let userGSwopLockedNew = (userGSwopLocked + pmtAmount)
317- let $t01033910401 = getTotalLockedInfo()
318- let totalSWOPLocked = $t01033910401._1
319- let totalGSwopLocked = $t01033910401._2
337+ let $t01115711219 = getTotalLockedInfo()
338+ let totalSWOPLocked = $t01115711219._1
339+ let totalGSwopLocked = $t01115711219._2
320340 let totalSWOPLockedNew = (totalSWOPLocked + pmtAmount)
321341 let totalGSwopLockedNew = (totalGSwopLocked + pmtAmount)
322342 [IntegerEntry((user + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((user + kUserGSwopLocked), userGSwopLockedNew), IntegerEntry((user + kUserAvailableForClaim), availableForClaimNew), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew)]
323343 }
324344 })
325345
326346
327347
328348 @Callable(i)
329349 func withdrawSWOP (withdrawAmount) = valueOrElse(isActive(), {
330350 let user = toString(i.caller)
331351 let unlockHeight = valueOrElse(getInteger(this, (user + kUserSwopUnlockHeight)), 0)
332352 if ((0 >= withdrawAmount))
333353 then throw("withdrawAmount <= 0")
334354 else if ((unlockHeight > height))
335355 then throw(("You can't withdraw till " + toString(unlockHeight)))
336356 else {
337- let $t01137911441 = getTotalLockedInfo()
338- let totalSWOPLocked = $t01137911441._1
339- let totalGSwopLocked = $t01137911441._2
340- let $t01144611509 = getUserLockedInfo(user)
341- let userSWOPLocked = $t01144611509._1
342- let userGSwopLocked = $t01144611509._2
343- let $t01151411575 = claimCalc(user)
344- let userNewInterest = $t01151411575._1
345- let claimAmountAvailable = $t01151411575._2
346- let $t01158011646 = getUserVoteInfo(i.caller)
347- let userVoteAmount = $t01158011646._1
348- let userUnvoteAmount = $t01158011646._2
357+ let $t01219712259 = getTotalLockedInfo()
358+ let totalSWOPLocked = $t01219712259._1
359+ let totalGSwopLocked = $t01219712259._2
360+ let $t01226412327 = getUserLockedInfo(user)
361+ let userSWOPLocked = $t01226412327._1
362+ let userGSwopLocked = $t01226412327._2
363+ let $t01233212393 = claimCalc(user)
364+ let userNewInterest = $t01233212393._1
365+ let claimAmountAvailable = $t01233212393._2
366+ let $t01239812464 = getUserVoteInfo(i.caller)
367+ let userVoteAmount = $t01239812464._1
368+ let userUnvoteAmount = $t01239812464._2
349369 let userVoteAmountForNewPool = getUserTotalVoteForNewPoolAmount(i.caller)
350370 let blockedInLaunchpad = getUserBlockedInLauchpad(i.caller)
351371 if (if (if ((0 > userUnvoteAmount))
352372 then true
353373 else (0 > userVoteAmount))
354374 then true
355375 else (0 > userVoteAmountForNewPool))
356376 then throw("userUnvoteAmount < 0 || userVoteAmount < 0 || userVoteAmountForNewPool < 0")
357377 else {
358378 let availableToUnstake = (userSWOPLocked - max([userVoteAmountForNewPool, (userVoteAmount + userUnvoteAmount), blockedInLaunchpad]))
359379 if ((withdrawAmount > availableToUnstake))
360380 then throw("withdrawAmount > availableToUnstake")
361381 else {
362382 let availableForClaim = getUserAvailableForClaim(user)
363383 let availableForClaimNew = (availableForClaim + claimAmountAvailable)
364384 let totalSWOPLockedNew = (totalSWOPLocked - withdrawAmount)
365385 let userSWOPAmountNew = (userSWOPLocked - withdrawAmount)
366386 let totalGSwopLockedNew = ((totalGSwopLocked - userGSwopLocked) + userSWOPAmountNew)
367387 [IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserSWOPLocked), userSWOPAmountNew), IntegerEntry((user + kUserGSwopLocked), userSWOPAmountNew), IntegerEntry((user + kUserAvailableForClaim), availableForClaimNew), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew), ScriptTransfer(i.caller, withdrawAmount, SWOP)]
368388 }
369389 }
370390 }
371391 })
372392
373393
374394
375395 @Callable(i)
376396 func claimAndWithdrawSWOP () = valueOrElse(isActive(), {
377397 let user = toString(i.caller)
378398 let availableForClaim = getUserAvailableForClaim(user)
379- let $t01316513217 = claimCalc(user)
380- let userNewInterest = $t01316513217._1
381- let claimAmount = $t01316513217._2
399+ let $t01398314035 = claimCalc(user)
400+ let userNewInterest = $t01398314035._1
401+ let claimAmount = $t01398314035._2
382402 let userClaimAmount = (availableForClaim + claimAmount)
383403 if ((userClaimAmount == 0))
384404 then throw("You have 0 available SWOP")
385- else [IntegerEntry((user + kUserLastInterest), userNewInterest), ScriptTransfer(i.caller, userClaimAmount, SWOP)]
405+ else [IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserAvailableForClaim), 0), ScriptTransfer(i.caller, userClaimAmount, SWOP)]
386406 })
387407
388408
389409
390410 @Callable(i)
391411 func claimAndStakeSWOP () = valueOrElse(isActive(), {
392412 let user = toString(i.caller)
393- let $t01359013652 = getTotalLockedInfo()
394- let totalSWOPLocked = $t01359013652._1
395- let totalGSwopLocked = $t01359013652._2
396- let $t01365713720 = getUserLockedInfo(user)
397- let userSWOPLocked = $t01365713720._1
398- let userGSwopLocked = $t01365713720._2
413+ let $t01446514527 = getTotalLockedInfo()
414+ let totalSWOPLocked = $t01446514527._1
415+ let totalGSwopLocked = $t01446514527._2
416+ let $t01453214595 = getUserLockedInfo(user)
417+ let userSWOPLocked = $t01453214595._1
418+ let userGSwopLocked = $t01453214595._2
399419 let availableForClaim = getUserAvailableForClaim(user)
400- let $t01378413835 = claimCalc(user)
401- let userNewInterest = $t01378413835._1
402- let claimAmount = $t01378413835._2
420+ let $t01465914710 = claimCalc(user)
421+ let userNewInterest = $t01465914710._1
422+ let claimAmount = $t01465914710._2
403423 let userClaimAmount = (availableForClaim + claimAmount)
404424 let userSWOPLockedNew = (userSWOPLocked + userClaimAmount)
405425 let userGSwopLockedNew = (userGSwopLocked + (userClaimAmount * 2))
406426 let totalSWOPLockedNew = (totalSWOPLocked + userClaimAmount)
407427 let totalGSwopLockedNew = (totalGSwopLocked + (userClaimAmount * 2))
408428 if ((userClaimAmount == 0))
409429 then throw("You have 0 available SWOP")
410- else [IntegerEntry((toString(i.caller) + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((toString(i.caller) + kUserLastInterest), userNewInterest), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew), IntegerEntry((toString(i.caller) + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((toString(i.caller) + kUserGSwopLocked), userGSwopLockedNew)]
430+ else [IntegerEntry((toString(i.caller) + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((toString(i.caller) + kUserLastInterest), userNewInterest), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew), IntegerEntry((toString(i.caller) + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((toString(i.caller) + kUserGSwopLocked), userGSwopLockedNew), IntegerEntry((user + kUserAvailableForClaim), 0)]
411431 })
412432
413433
414434
415435 @Callable(i)
416436 func lockSWOPFromFarming () = valueOrElse(isActive(), {
417- let $t01477514850 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
418- let pmtAmount = $t01477514850._1
419- let pmtAssetId = $t01477514850._2
437+ let $t01570615781 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
438+ let pmtAmount = $t01570615781._1
439+ let pmtAssetId = $t01570615781._2
420440 if ((i.caller != farmingAddr))
421441 then throw("Only farming can call this function")
422442 else if ((pmtAssetId != SWOP))
423443 then throw("Incorrect pmtAssetId")
424444 else {
425445 let user = toString(i.originCaller)
426446 let lastInterest = getLastInterestInfo()
427- let $t01509315156 = getUserLockedInfo(user)
428- let userSWOPLocked = $t01509315156._1
429- let userGSwopLocked = $t01509315156._2
430- let $t01516115222 = claimCalc(user)
431- let userNewInterest = $t01516115222._1
432- let claimAmountAvailable = $t01516115222._2
447+ let $t01602416087 = getUserLockedInfo(user)
448+ let userSWOPLocked = $t01602416087._1
449+ let userGSwopLocked = $t01602416087._2
450+ let $t01609216153 = claimCalc(user)
451+ let userNewInterest = $t01609216153._1
452+ let claimAmountAvailable = $t01609216153._2
433453 let availableForClaim = getUserAvailableForClaim(user)
434454 let availableForClaimNew = (availableForClaim + claimAmountAvailable)
435455 let userSWOPLockedNew = (userSWOPLocked + pmtAmount)
436456 let userGSwopLockedNew = (userGSwopLocked + (pmtAmount * 2))
437- let $t01547415536 = getTotalLockedInfo()
438- let totalSWOPLocked = $t01547415536._1
439- let totalGSwopLocked = $t01547415536._2
457+ let $t01640516467 = getTotalLockedInfo()
458+ let totalSWOPLocked = $t01640516467._1
459+ let totalGSwopLocked = $t01640516467._2
440460 let totalSWOPLockedNew = (totalSWOPLocked + pmtAmount)
441461 let totalGSwopLockedNew = (totalGSwopLocked + (pmtAmount * 2))
442462 [IntegerEntry((user + kUserSwopUnlockHeight), (height + lockSwopBlocksAmount)), IntegerEntry((user + kUserLastInterest), userNewInterest), IntegerEntry((user + kUserSWOPLocked), userSWOPLockedNew), IntegerEntry((user + kUserGSwopLocked), userGSwopLocked), IntegerEntry((user + kUserAvailableForClaim), availableForClaimNew), IntegerEntry(kTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry(kTotalGSwopLocked, totalGSwopLockedNew)]
443463 }
444464 })
445465
446466
447467
448468 @Callable(i)
449469 func updateWeights (currentPools,currentRewards,rewardUpdateHeight,pagination) = valueOrElse(isActive(), {
450470 let amountPools = 10
451471 let totalRewardUpdateHeight = valueOrElse(getInteger(this, kRewardUpdateHeight), 0)
452472 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, moneyBoxPubKey], i.callerPublicKey)))
453473 then throw("Only admin can call this function")
454474 else if ((size(currentPools) > amountPools))
455475 then throw(("Max amount of pool is " + toString(amountPools)))
456476 else if ((totalRewardUpdateHeight >= rewardUpdateHeight))
457477 then throw("rewardUpdateHeight <= totalRewardUpdateHeight")
458478 else if ((height >= rewardUpdateHeight))
459479 then throw("height >= rewardUpdateHeight")
460480 else if ((0 >= rewardUpdateHeight))
461481 then throw("0 >= rewardUpdateHeight ")
462482 else {
463483 func sum (a,b) = (a + b)
464484
465485 func changePreviousRewardEntry (accumulated,pool) = {
466486 let poolRewardUpdateHeight = getPoolUpdateHeight(pool)
467487 if (if (!(isDefinePoolUpdateHeight(pool)))
468488 then true
469489 else if ((rewardUpdateHeight != poolRewardUpdateHeight))
470490 then (poolRewardUpdateHeight == totalRewardUpdateHeight)
471491 else false)
472492 then {
473493 let poolReward = getCurPoolWeight(pool)
474494 IntegerEntry((pool + kRewardPoolFractionPrevious), poolReward) :: accumulated
475495 }
476496 else {
477497 let poolReward = getPrevPoolWeight(pool)
478498 IntegerEntry((pool + kRewardPoolFractionPrevious), poolReward) :: accumulated
479499 }
480500 }
481501
482502 func changeCurrentRewardEntry (accumulated,pool) = {
483503 let poolIndex = value(indexOf(currentPools, pool))
484504 let poolReward = currentRewards[poolIndex]
485505 if ((0 > poolReward))
486506 then throw("PoolReward < 0")
487507 else IntegerEntry((pool + kRewardPoolFractionCurrent), poolReward) :: accumulated
488508 }
489509
490510 func changeHeightEntry (accumulated,pool) = {
491511 let poolHeight = rewardUpdateHeight
492512 let upUIntr = invoke(farmingAddr, "updatePoolInterest", [pool], nil)
493513 if ((upUIntr == upUIntr))
494514 then IntegerEntry((pool + kHeightPoolFraction), poolHeight) :: accumulated
495515 else throw("Strict value is not equal to itself.")
496516 }
497517
498518 func getSumReward (curTempSum,pagination) = if ((pagination == 0))
499519 then if ((curTempSum > totalVoteShare))
500520 then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(pagination)) + " ") + toString(curTempSum)))
501521 else $Tuple2([IntegerEntry(kTempCurSum, curTempSum)], [IntegerEntry(kRewardUpdateFirstPaginationHeight, rewardUpdateHeight)])
502522 else if ((pagination == 1))
503523 then {
504524 let curTempSumFromKey = valueOrElse(getInteger(this, kTempCurSum), 0)
505525 let rewardUpdateHeightFirstPaginationEntry = valueOrElse(getInteger(this, kRewardUpdateFirstPaginationHeight), 0)
506526 if (((curTempSum + curTempSumFromKey) > totalVoteShare))
507527 then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(pagination)) + " ") + toString((curTempSum + curTempSumFromKey))))
508528 else if ((rewardUpdateHeightFirstPaginationEntry != rewardUpdateHeight))
509529 then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
510530 else $Tuple2([IntegerEntry(kTempCurSum, (curTempSum + curTempSumFromKey))], nil)
511531 }
512532 else if ((pagination == 2))
513533 then {
514534 let curSum = (valueOrElse(getInteger(this, kTempCurSum), 0) + curTempSum)
515535 let rewardUpdateHeightFirstPaginationEntry = valueOrElse(getInteger(this, kRewardUpdateFirstPaginationHeight), 0)
516536 if ((curSum != totalVoteShare))
517537 then throw("sumRewardPrevious != totalVoteShare or sumRewardCurrent != totalVoteShare")
518538 else if ((rewardUpdateHeightFirstPaginationEntry != rewardUpdateHeight))
519539 then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
520540 else $Tuple2([IntegerEntry(kTempCurSum, curSum)], nil)
521541 }
522542 else throw("Incorrect pagination")
523543
524544 let previousRewardEntryNew = {
525545 let $l = currentPools
526546 let $s = size($l)
527547 let $acc0 = nil
528548 func $f0_1 ($a,$i) = if (($i >= $s))
529549 then $a
530550 else changePreviousRewardEntry($a, $l[$i])
531551
532552 func $f0_2 ($a,$i) = if (($i >= $s))
533553 then $a
534554 else throw("List size exceeds 10")
535555
536556 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
537557 }
538558 let currentRewardEntryNew = {
539559 let $l = currentPools
540560 let $s = size($l)
541561 let $acc0 = nil
542562 func $f1_1 ($a,$i) = if (($i >= $s))
543563 then $a
544564 else changeCurrentRewardEntry($a, $l[$i])
545565
546566 func $f1_2 ($a,$i) = if (($i >= $s))
547567 then $a
548568 else throw("List size exceeds 10")
549569
550570 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
551571 }
552572 let heightEntryNewCur = {
553573 let $l = currentPools
554574 let $s = size($l)
555575 let $acc0 = nil
556576 func $f2_1 ($a,$i) = if (($i >= $s))
557577 then $a
558578 else changeHeightEntry($a, $l[$i])
559579
560580 func $f2_2 ($a,$i) = if (($i >= $s))
561581 then $a
562582 else throw("List size exceeds 10")
563583
564584 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
565585 }
566586 let sumRewardCurrentTemp = {
567587 let $l = currentRewards
568588 let $s = size($l)
569589 let $acc0 = 0
570590 func $f3_1 ($a,$i) = if (($i >= $s))
571591 then $a
572592 else sum($a, $l[$i])
573593
574594 func $f3_2 ($a,$i) = if (($i >= $s))
575595 then $a
576596 else throw("List size exceeds 10")
577597
578598 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
579599 }
580- let $t02055720668 = getSumReward(sumRewardCurrentTemp, pagination)
581- let sumRewardCurrent = $t02055720668._1
582- let rewardUpdateHeightFirstPaginationEntry = $t02055720668._2
600+ let $t02148821599 = getSumReward(sumRewardCurrentTemp, pagination)
601+ let sumRewardCurrent = $t02148821599._1
602+ let rewardUpdateHeightFirstPaginationEntry = $t02148821599._2
583603 let rewardUpdateHeightEntry = if ((pagination == 2))
584604 then [IntegerEntry(kRewardUpdateHeight, rewardUpdateHeight)]
585605 else nil
586606 if ((height > rewardUpdateHeight))
587607 then throw("rewardUpdateHeight < height")
588608 else (((((previousRewardEntryNew ++ currentRewardEntryNew) ++ heightEntryNewCur) ++ sumRewardCurrent) ++ rewardUpdateHeightEntry) ++ rewardUpdateHeightFirstPaginationEntry)
589609 }
590610 })
591611
592612
593613
594614 @Callable(i)
595615 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
596616 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, kCause), "the cause wasn't specified")))
597617 else suspend("Paused by admin"))
598618
599619
600620
601621 @Callable(i)
602622 func activate () = valueOrElse(isAdminCall(i), if (active)
603623 then throw("DApp is already active")
604624 else [BooleanEntry(kActive, true), DeleteEntry(kCause)])
605625
606626
607627 @Verifier(tx)
608628 func verify () = {
609629 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
610630 then 1
611631 else 0
612632 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
613633 then 1
614634 else 0
615635 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
616636 then 1
617637 else 0
618638 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
619639 }
620640

github/deemru/w8io/026f985 
129.64 ms