tx · 2j7gy7rw2CUceu9g6zLXzBTW5gRXZdbwGZUpzF1fvKvC

3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV:  -0.03300000 Waves

2023.05.10 14:46 [3637210] smart account 3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV > SELF 0.00000000 Waves

{ "type": 13, "id": "2j7gy7rw2CUceu9g6zLXzBTW5gRXZdbwGZUpzF1fvKvC", "fee": 3300000, "feeAssetId": null, "timestamp": 1683719205722, "version": 2, "chainId": 87, "sender": "3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV", "senderPublicKey": "EAtbDa63mS5omrvW7Pfr7DKWEVLuReJtu72vfiBLRXsx", "proofs": [ "582Fv9Aay7g8TxVPK9rTJaGKGjk3dSHpqERBHyvQEnt8wuZ1pXmaFiZpahYEibn9pPdLUVkua8JtAxsvoZAT9YUM" ], "script": "base64:BgJcCAISAwoBCBIDCgEIEgASAwoBCBIECgIIARIGCgQCAQICEgMKAQgSAwoBCBIFCgMICAQSBgoEARgIGBIECgIYCBIECgIICBIECgIICBIDCgEIEgMKAQgSBAoCCAhjAAZTQ0FMRTgACAAFTVVMVDMA6AcABU1VTFQ4AIDC1y8AB1NDQUxFMTgAEgAGTVVMVDE4CQC2AgEAgICQu7rWrfANAANTRVACAl9fAA5QT09MV0VJR0hUTVVMVAUFTVVMVDgACnplcm9CaWdJbnQJALYCAQAAAAlvbmVCaWdJbnQJALYCAQABAQd3cmFwRXJyAQNtc2cJALkJAgkAzAgCAg1zdGFraW5nLnJpZGU6CQDMCAIJAKUIAQUEdGhpcwkAzAgCBQNtc2cFA25pbAIBIAEIdGhyb3dFcnIBA21zZwkAAgEJAQd3cmFwRXJyAQUDbXNnAQlhc0FueUxpc3QBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55THlzdAUHJG1hdGNoMAUKdmFsQW55THlzdAkBCHRocm93RXJyAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQVhc0ludAEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkBCHRocm93RXJyAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQhhc1N0cmluZwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZ2YWxTdHIFByRtYXRjaDAFBnZhbFN0cgkBCHRocm93RXJyAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQxhc0J5dGVWZWN0b3IBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEBnZhbEJpbgUHJG1hdGNoMAUGdmFsQmluCQEIdGhyb3dFcnIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICCQCsAgIJAKwCAgkArAICAgptYW5kYXRvcnkgCQClCAEFB2FkZHJlc3MCAS4FA2tleQIPIGlzIG5vdCBkZWZpbmVkAQxnZXRJbnRPclplcm8CB2FkZHJlc3MDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFB2FkZHJlc3MFA2tleQAAAQ9nZXRJbnRPckRlZmF1bHQDB2FkZHJlc3MDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUHYWRkcmVzcwUDa2V5BQpkZWZhdWx0VmFsAQxnZXRJbnRPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwUDa2V5CQEHd3JhcEVycgEJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FA2tleQIPIGlzIG5vdCBkZWZpbmVkARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgdhZGRyZXNzA2tleQkBBXZhbHVlAQkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFB2FkZHJlc3MFA2tleQIBMAEcZ2V0QmlnSW50RnJvbVN0cmluZ09yRGVmYXVsdAMHYWRkcmVzcwNrZXkKZGVmYXVsdFZhbAQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQEFdmFsdWUBCQCoAwEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUKZGVmYXVsdFZhbAkAAgECC01hdGNoIGVycm9yAQV0b1gxOAIHb3JpZ1ZhbA1vcmlnU2NhbGVNdWx0CQC8AgMJALYCAQUHb3JpZ1ZhbAUGTVVMVDE4CQC2AgEFDW9yaWdTY2FsZU11bHQBB2Zyb21YMTgCA3ZhbA9yZXN1bHRTY2FsZU11bHQJAKADAQkAvAIDBQN2YWwJALYCAQUPcmVzdWx0U2NhbGVNdWx0BQZNVUxUMTgBEWtleUZhY3RvcnlBZGRyZXNzAAIcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwEZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAACGiVzX192b3RpbmdFbWlzc2lvbkNvbnRyYWN0ABhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAAAQAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAACABRJZHhGYWN0b3J5Q2ZnSWRvRGFwcAADABVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAABAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAFABVJZHhGYWN0b3J5Q2ZnUmVzdERhcHAABgAZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcAAHAQ1rZXlGYWN0b3J5Q2ZnAAIRJXNfX2ZhY3RvcnlDb25maWcBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzARprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABEGtleUZhY3RvcnlMcExpc3QAAhAlc19fbHBUb2tlbnNMaXN0ASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABFGtleUZhY3RvcnlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCnBvb2xXZWlnaHQJAMwIAgUPY29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEKcmVhZExwTGlzdAEHZmFjdG9yeQkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFB2ZhY3RvcnkJARBrZXlGYWN0b3J5THBMaXN0AAIABQNTRVABFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAQdmYWN0b3J5CQC1CQIJARhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwCBQdmYWN0b3J5CQENa2V5RmFjdG9yeUNmZwAFA1NFUAEYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHABGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHABHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50AAIeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50ARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAIYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uARNrZXlFbWlzc2lvbkVuZEJsb2NrAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQ9rZXlTdGFrZWRCeVVzZXICDnVzZXJBZGRyZXNzU3RyDGxwQXNzZXRJZFN0cgkAuQkCCQDMCAICDiVzJXMlc19fc3Rha2VkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABDmtleVN0YWtlZFRvdGFsAQxscEFzc2V0SWRTdHIJAKwCAgIXJXMlcyVzX19zdGFrZWRfX3RvdGFsX18FDGxwQXNzZXRJZFN0cgEQa2V5Q2xhaW1lZEJ5VXNlcgIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCQC5CQIJAMwIAgIPJXMlcyVzX19jbGFpbWVkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABGWtleUNsYWltZWRCeVVzZXJNaW5SZXdhcmQCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgkAuQkCCQDMCAICGCVzJXMlc19fY2xhaW1lZE1pblJld2FyZAkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQxscEFzc2V0SWRTdHIFA25pbAUDU0VQARtrZXlDbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmQCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgkAuQkCCQDMCAICGiVzJXMlc19fY2xhaW1lZEJvb3N0UmV3YXJkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABD2tleUNsYWltZWRUb3RhbAEMbHBBc3NldElkU3RyCQC5CQIJAMwIAgIWJXMlcyVzX19jbGFpbWVkX190b3RhbAkAzAgCBQxscEFzc2V0SWRTdHIFA25pbAUDU0VQAQpyZWFkU3Rha2VkAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABFWtleUxhc3RUb3RhbExwQmFsYW5jZQEJbHBBc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgV0b3RhbAkAzAgCAgNiYWwFA25pbAUDU0VQARRrZXlMYXN0VXNlckxwQmFsYW5jZQIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgNiYWwFA25pbAUDU0VQARlrZXlUb3RhbExwQmFsYW5jZUludGVncmFsAQlscEFzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAICBXRvdGFsCQDMCAICBmJhbElOVAUDbmlsBQNTRVABGGtleVVzZXJMcEJhbGFuY2VJbnRlZ3JhbAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgZiYWxJTlQFA25pbAUDU0VQASZrZXlUb3RhbExwQmFsYW5jZUludGVncmFsTGFzdFVwZEhlaWdodAEJbHBBc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgV0b3RhbAkAzAgCAgdsYXN0VXBkBQNuaWwFA1NFUAEla2V5VXNlckxwQmFsYW5jZUludGVncmFsTGFzdFVwZEhlaWdodAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgdsYXN0VXBkBQNuaWwFA1NFUAESa2V5V3hQZXJMcEludGVncmFsAQlscEFzc2V0SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgIGY29tbW9uCQDMCAICBWxwSW50BQNuaWwFA1NFUAEfa2V5V3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAEJbHBBc3NldElkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAICBmNvbW1vbgkAzAgCAgZscEludEgFA25pbAUDU0VQARBrZXlXeFRvQ2xhaW1Vc2VyAglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgULdXNlckFkZHJlc3MJAMwIAgIFbHBJbnQFA25pbAUDU0VQASNrZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICBmxwSW50SAUDbmlsBQNTRVABCmtleVd4UGVyTHABCWxwQXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgd3eFBlckxwBQNuaWwFA1NFUAENa2V5V3hQZXJMcFgxOAEJbHBBc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgUJbHBBc3NldElkCQDMCAICCnd4UGVyTHBYMTgFA25pbAUDU0VQARprZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICBXVJbnRMBQNuaWwFA1NFUAEZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAMEdHlwZQt1c2VyQWRkcmVzcwZ0eElkNTgJALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQR0eXBlCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFBnR4SWQ1OAUDbmlsBQNTRVABE2Zvcm1hdEhpc3RvcnlSZWNvcmQEC3VzZXJBZGRyZXNzCWxwQXNzZXRJZAR0eXBlBmFtb3VudAkAuQkCCQDMCAICDCVzJXMlcyVkJWQlZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQlscEFzc2V0SWQJAMwIAgUEdHlwZQkAzAgCCQCkAwEFBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUGYW1vdW50BQNuaWwFA1NFUAEVT3BlcmF0aW9uSGlzdG9yeUVudHJ5BQR0eXBlC3VzZXJBZGRyZXNzCWxwQXNzZXRJZAZhbW91bnQEdHhJZAkBC1N0cmluZ0VudHJ5AgkBGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQDBQR0eXBlBQt1c2VyQWRkcmVzcwkA2AQBBQR0eElkCQETZm9ybWF0SGlzdG9yeVJlY29yZAQFC3VzZXJBZGRyZXNzBQlscEFzc2V0SWQFBHR5cGUFBmFtb3VudAAOZmFjdG9yeUFkZHJlc3MJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQERa2V5RmFjdG9yeUFkZHJlc3MAAA9mYWN0b3J5Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmZhY3RvcnlBZGRyZXNzAApmYWN0b3J5Q2ZnCQEUcmVhZEZhY3RvcnlDZmdPckZhaWwBBQ9mYWN0b3J5Q29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnABBib29zdGluZ0NvbnRyYWN0CQEYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAQUKZmFjdG9yeUNmZwAKYm9vc3RDb2VmZgoAAUAJAPwHBAUQZW1pc3Npb25Db250cmFjdAIVZ2V0Qm9vc3RDb2VmZlJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkAuQkCCQDMCAICAiVzCQDMCAICFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QFA25pbAUDU0VQCQEHd3JhcEVycgECLmxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcyBpcyB1bmRlZmluZWQJAQd3cmFwRXJyAQIpaW52YWxpZCBscF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MBC2tleU5leHRVc2VyAQlscEFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAghuZXh0VXNlcgUDbmlsBQNTRVABEGdldFVzZXJzTGlzdE5hbWUBCWxwQXNzZXRJZAkAuQkCCQDMCAICBXVzZXJzCQDMCAIFCWxwQXNzZXRJZAUDbmlsBQNTRVABC2tleUxpc3RIZWFkAQhsaXN0TmFtZQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQhsaXN0TmFtZQkAzAgCAgRoZWFkBQNuaWwFA1NFUAELa2V5TGlzdFNpemUBCGxpc3ROYW1lCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCGxpc3ROYW1lCQDMCAICBHNpemUFA25pbAUDU0VQAQtrZXlMaXN0UHJldgIIbGlzdE5hbWUCaWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQhsaXN0TmFtZQkAzAgCBQJpZAkAzAgCAgRwcmV2BQNuaWwFA1NFUAELa2V5TGlzdE5leHQCCGxpc3ROYW1lAmlkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUIbGlzdE5hbWUJAMwIAgUCaWQJAMwIAgIEbmV4dAUDbmlsBQNTRVABDGNvbnRhaW5zTm9kZQIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECnByZXZPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkBApuZXh0T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAMDCQAAAgUCaWQJAQt2YWx1ZU9yRWxzZQIFCmhlYWRPclVuaXQCAAYJAQIhPQIFCnByZXZPclVuaXQFBHVuaXQGCQECIT0CBQpuZXh0T3JVbml0BQR1bml0ARFpbnNlcnROb2RlQWN0aW9ucwIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECGxpc3RTaXplCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lAAAECWNoZWNrTm9kZQMJAQEhAQkBDGNvbnRhaW5zTm9kZQIFCGxpc3ROYW1lBQJpZAYJAQh0aHJvd0VycgECC05vZGUgZXhpc3RzAwkAAAIFCWNoZWNrTm9kZQUJY2hlY2tOb2RlCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleUxpc3RTaXplAQUIbGlzdE5hbWUJAGQCBQhsaXN0U2l6ZQABBQNuaWwDCQECIT0CBQpoZWFkT3JVbml0BQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAkBBXZhbHVlAQUKaGVhZE9yVW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQkBBXZhbHVlAQUKaGVhZE9yVW5pdAUCaWQFA25pbAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBQJpZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFkZWxldGVOb2RlQWN0aW9ucwIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECGxpc3RTaXplCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lAAAECnByZXZPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkBApuZXh0T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELa2V5TGlzdFNpemUBBQhsaXN0TmFtZQkAZQIFCGxpc3RTaXplAAEFA25pbAMDCQECIT0CBQpwcmV2T3JVbml0BQR1bml0CQECIT0CBQpuZXh0T3JVbml0BQR1bml0BwkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQkBBXZhbHVlAQUKcHJldk9yVW5pdAkBBXZhbHVlAQUKbmV4dE9yVW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQkBBXZhbHVlAQUKbmV4dE9yVW5pdAkBBXZhbHVlAQUKcHJldk9yVW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQUCaWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFAmlkBQNuaWwDCQECIT0CBQpuZXh0T3JVbml0BQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lCQEFdmFsdWUBBQpuZXh0T3JVbml0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQkBBXZhbHVlAQUKbmV4dE9yVW5pdAUDbmlsAwkBAiE9AgUKcHJldk9yVW5pdAUEdW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQUCaWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUJAQV2YWx1ZQEFCnByZXZPclVuaXQFA25pbAMJAAACBQJpZAkBC3ZhbHVlT3JFbHNlAgUKaGVhZE9yVW5pdAIACQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBQNuaWwJAQh0aHJvd0VycgEJAKwCAgkArAICCQCsAgICDmludmFsaWQgbm9kZTogBQhsaXN0TmFtZQIBLgUCaWQBG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAQMc3Rha2VkQnlVc2VyJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvEnd4UGVyTHBJbnRlZ3JhbE5ldxp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQMDCQAAAgUmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FCnplcm9CaWdJbnQJAL8CAgUMc3Rha2VkQnlVc2VyBQp6ZXJvQmlnSW50BwUKemVyb0JpZ0ludAMJAAACBQxzdGFrZWRCeVVzZXIFCnplcm9CaWdJbnQFEnd4UGVyTHBJbnRlZ3JhbE5ldwMDCQC/AgIFJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBQp6ZXJvQmlnSW50CQC/AgIFDHN0YWtlZEJ5VXNlcgUKemVyb0JpZ0ludAcJAQV2YWx1ZQEJAKgDAQkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQEIdGhyb3dFcnIBAi1jYWxjV3hQZXJMcEludGVncmFsVXNlckxhc3Q6IHVuZXhwZWN0ZWQgc3RhdGUBFHJlZnJlc2hQb29sSU5URUdSQUxTAwxscEFzc2V0SWRTdHIOcG9vbEFkZHJlc3NTdHINbHBEZWx0YUFtb3VudAQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQLc3Rha2VkVG90YWwJALYCAQkBCnJlYWRTdGFrZWQBBQ5zdGFrZWRUb3RhbEtFWQQSbm9uWmVyb1N0YWtlZFRvdGFsAwkAAAIFC3N0YWtlZFRvdGFsBQp6ZXJvQmlnSW50BQlvbmVCaWdJbnQFC3N0YWtlZFRvdGFsBApwb29sV2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9mYWN0b3J5Q29udHJhY3QJARRrZXlGYWN0b3J5UG9vbFdlaWdodAEFDnBvb2xBZGRyZXNzU3RyBBJlbWlzc2lvblN0YXJ0QmxvY2sJAQxnZXRJbnRPckZhaWwCBRBlbWlzc2lvbkNvbnRyYWN0CQEVa2V5RW1pc3Npb25TdGFydEJsb2NrAAQUd3hFbWlzc2lvblBlckJsb2NrWDMJAGgCCQEMZ2V0SW50T3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAFBU1VTFQzBBhwb29sV3hFbWlzc2lvblBlckJsb2NrWDMJAGsDBRR3eEVtaXNzaW9uUGVyQmxvY2tYMwUKcG9vbFdlaWdodAkAaAIFDlBPT0xXRUlHSFRNVUxUBQpib29zdENvZWZmBBJ3eFBlckxwSW50ZWdyYWxLRVkJARJrZXlXeFBlckxwSW50ZWdyYWwBBQxscEFzc2V0SWRTdHIEH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkJAR9rZXlXeFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0AQUMbHBBc3NldElkU3RyBAp3eFBlckxwS0VZCQEKa2V5V3hQZXJMcAEFDGxwQXNzZXRJZFN0cgQcd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAkBD2dldEludE9yRGVmYXVsdAMFBHRoaXMFH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkFEmVtaXNzaW9uU3RhcnRCbG9jawQPd3hQZXJMcEludGVncmFsCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMFEnd4UGVyTHBJbnRlZ3JhbEtFWQQPd3hQZXJMcE9yWmVyb1gzAAAEAmRoCQCWAwEJAMwIAgkAZQIFBmhlaWdodAUcd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAkAzAgCAAAFA25pbAQJd3hQZXJMcFgzAwkBAiE9AgUPd3hQZXJMcE9yWmVyb1gzAAAJALYCAQUPd3hQZXJMcE9yWmVyb1gzCQC8AgMJALYCAQUYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQC2AgEFBU1VTFQ4BRJub25aZXJvU3Rha2VkVG90YWwEDnN0YWtlZFRvdGFsTmV3CQC3AgIFC3N0YWtlZFRvdGFsCQC2AgEFDWxwRGVsdGFBbW91bnQEFW5vblplcm9TdGFrZWRUb3RhbE5ldwMJAAACBQ5zdGFrZWRUb3RhbE5ldwUKemVyb0JpZ0ludAUJb25lQmlnSW50BQ5zdGFrZWRUb3RhbE5ldwQSd3hQZXJMcEludGVncmFsTmV3CQC3AgIFD3d4UGVyTHBJbnRlZ3JhbAkAuQICBQl3eFBlckxwWDMJALYCAQUCZGgEDHd4UGVyTHBYM05ldwkAugICCQC2AgEFGHBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMwUVbm9uWmVyb1N0YWtlZFRvdGFsTmV3BB93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0TmV3BQZoZWlnaHQEBWRlYnVnCQC5CQIJAMwIAgkApgMBBRJ3eFBlckxwSW50ZWdyYWxOZXcJAMwIAgkApAMBBQJkaAkAzAgCCQCmAwEFCXd4UGVyTHBYMwkAzAgCCQCmAwEFC3N0YWtlZFRvdGFsCQDMCAIJAKQDAQUYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQDMCAIJAKQDAQUUd3hFbWlzc2lvblBlckJsb2NrWDMJAMwIAgkApAMBBQpwb29sV2VpZ2h0BQNuaWwCAjo6CQCVCgMFEnd4UGVyTHBJbnRlZ3JhbE5ldwkAzAgCCQELU3RyaW5nRW50cnkCBRJ3eFBlckxwSW50ZWdyYWxLRVkJAKYDAQUSd3hQZXJMcEludGVncmFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBR93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0S0VZBR93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0TmV3CQDMCAIJAQtTdHJpbmdFbnRyeQIFCnd4UGVyTHBLRVkJAKYDAQUMd3hQZXJMcFgzTmV3BQNuaWwFBWRlYnVnARByZWZyZXNoSU5URUdSQUxTBAxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIOcG9vbEFkZHJlc3NTdHINbHBEZWx0YUFtb3VudAQNJHQwMTQ4NzUxNDk5NwkBFHJlZnJlc2hQb29sSU5URUdSQUxTAwUMbHBBc3NldElkU3RyBQ5wb29sQWRkcmVzc1N0cgUNbHBEZWx0YUFtb3VudAQSd3hQZXJMcEludGVncmFsTmV3CAUNJHQwMTQ4NzUxNDk5NwJfMQQRcG9vbEludGVncmFsU1RBVEUIBQ0kdDAxNDg3NTE0OTk3Al8yBAlwb29sREVCVUcIBQ0kdDAxNDg3NTE0OTk3Al8zBA9zdGFrZWRCeVVzZXJLRVkJAQ9rZXlTdGFrZWRCeVVzZXICBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyBAxzdGFrZWRCeVVzZXIJAQpyZWFkU3Rha2VkAQUPc3Rha2VkQnlVc2VyS0VZBBB3eFRvQ2xhaW1Vc2VyS0VZCQEQa2V5V3hUb0NsYWltVXNlcgIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0S0VZCQEja2V5V3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHQCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBBp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQkBGmtleVd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0AgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQNd3hUb0NsYWltVXNlcgkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRB3eFRvQ2xhaW1Vc2VyS0VZBCZ3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE9yWmVybwkBDGdldEludE9yWmVybwIFBHRoaXMFI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0S0VZBBd3eFBlckxwSW50ZWdyYWxVc2VyTGFzdAkBG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAQJALYCAQUMc3Rha2VkQnlVc2VyCQC2AgEFJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBRJ3eFBlckxwSW50ZWdyYWxOZXcFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZBAZNVUxUMTEJAGgCBQVNVUxUOAUFTVVMVDMEEHd4VG9DbGFpbVVzZXJOZXcJAJgDAQkAzAgCCQC3AgIFDXd4VG9DbGFpbVVzZXIJALwCAwkAuAICBRJ3eFBlckxwSW50ZWdyYWxOZXcFF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQC2AgEFDHN0YWtlZEJ5VXNlcgkAtgIBBQZNVUxUMTEJAMwIAgUKemVyb0JpZ0ludAUDbmlsBBp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdE5ldwUSd3hQZXJMcEludGVncmFsTmV3BCN3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE5ldwUGaGVpZ2h0BAVkZWJ1ZwkAuQkCCQDMCAIJAKYDAQUNd3hUb0NsYWltVXNlcgkAzAgCCQCmAwEFF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQDMCAIJAKQDAQUMc3Rha2VkQnlVc2VyCQDMCAIFCXBvb2xERUJVRwkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgI6OgkAlQoDBRB3eFRvQ2xhaW1Vc2VyTmV3CQDOCAIFEXBvb2xJbnRlZ3JhbFNUQVRFCQDMCAIJAQtTdHJpbmdFbnRyeQIFEHd4VG9DbGFpbVVzZXJLRVkJAKYDAQUQd3hUb0NsYWltVXNlck5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkFI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0TmV3CQDMCAIJAQtTdHJpbmdFbnRyeQIFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQCmAwEFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0TmV3BQNuaWwFBWRlYnVnARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAFXBlcm1pc3Npb25EZW5pZWRFcnJvcgkBCHRocm93RXJyAQIRUGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgELbXVzdE1hbmFnZXIBAWkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUVcGVybWlzc2lvbkRlbmllZEVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgUVcGVybWlzc2lvbkRlbmllZEVycm9yCQACAQILTWF0Y2ggZXJyb3IBDHN0YWtlQWN0aW9ucwUBaQlscEFzc2V0SWQLcG9vbEFkZHJlc3MLdXNlckFkZHJlc3MGYW1vdW50BA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwQMbHBBc3NldElkU3RyCQDYBAEFCWxwQXNzZXRJZAQOcG9vbEFkZHJlc3NTdHIJAKUIAQULcG9vbEFkZHJlc3MED3N0YWtlZEJ5VXNlcktFWQkBD2tleVN0YWtlZEJ5VXNlcgIFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIEDnN0YWtlZFRvdGFsS0VZCQEOa2V5U3Rha2VkVG90YWwBBQxscEFzc2V0SWRTdHIEDHN0YWtlZEJ5VXNlcgkBCnJlYWRTdGFrZWQBBQ9zdGFrZWRCeVVzZXJLRVkEEXJlZnJlc2hTdGFrZWRWb3RlAwkAAAIFDHN0YWtlZEJ5VXNlcgAACQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCEm9uU3Rha2VkVm90ZVVwZGF0ZQkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgYFA25pbAUDbmlsBQR1bml0AwkAAAIFEXJlZnJlc2hTdGFrZWRWb3RlBRFyZWZyZXNoU3Rha2VkVm90ZQQLc3Rha2VkVG90YWwJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEDSR0MDE4MTUxMTgyNjgJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIFBmFtb3VudAQQd3hUb0NsYWltVXNlck5ldwgFDSR0MDE4MTUxMTgyNjgCXzEEDWludGVncmFsU1RBVEUIBQ0kdDAxODE1MTE4MjY4Al8yBAVkZWJ1ZwgFDSR0MDE4MTUxMTgyNjgCXzMECGxpc3ROYW1lCQEQZ2V0VXNlcnNMaXN0TmFtZQEFDGxwQXNzZXRJZFN0cgQLbGlzdEFjdGlvbnMDCQEMY29udGFpbnNOb2RlAgUIbGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyBQNuaWwJARFpbnNlcnROb2RlQWN0aW9ucwIFCGxpc3ROYW1lBQ51c2VyQWRkcmVzc1N0cgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFD3N0YWtlZEJ5VXNlcktFWQkAZAIFDHN0YWtlZEJ5VXNlcgUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5zdGFrZWRUb3RhbEtFWQkAZAIFC3N0YWtlZFRvdGFsBQZhbW91bnQJAMwIAgkBFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQUCBXN0YWtlBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyBQZhbW91bnQIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAUNaW50ZWdyYWxTVEFURQULbGlzdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDnVuc3Rha2VBY3Rpb25zBgFpCWxwQXNzZXRJZAtwb29sQWRkcmVzcwt1c2VyQWRkcmVzcxdscEFzc2V0UmVjaXBpZW50QWRkcmVzcwZhbW91bnQEDnVzZXJBZGRyZXNzU3RyCQClCAEFC3VzZXJBZGRyZXNzBAxscEFzc2V0SWRTdHIJANgEAQUJbHBBc3NldElkBA5wb29sQWRkcmVzc1N0cgkApQgBBQtwb29sQWRkcmVzcwQPc3Rha2VkQnlVc2VyS0VZCQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQMc3Rha2VkQnlVc2VyCQEKcmVhZFN0YWtlZAEFD3N0YWtlZEJ5VXNlcktFWQQLc3Rha2VkVG90YWwJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEDWludGVncmFsU1RBVEUICQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFDnBvb2xBZGRyZXNzU3RyCQEBLQEFBmFtb3VudAJfMgQIbGlzdE5hbWUJARBnZXRVc2Vyc0xpc3ROYW1lAQUMbHBBc3NldElkU3RyBAtsaXN0QWN0aW9ucwMDCQEMY29udGFpbnNOb2RlAgUIbGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyCQAAAgUGYW1vdW50BQxzdGFrZWRCeVVzZXIHCQERZGVsZXRlTm9kZUFjdGlvbnMCBQhsaXN0TmFtZQUOdXNlckFkZHJlc3NTdHIFA25pbAQRcmVmcmVzaFN0YWtlZFZvdGUDCQAAAgUGYW1vdW50BQxzdGFrZWRCeVVzZXIJAPwHBAUQYm9vc3RpbmdDb250cmFjdAISb25TdGFrZWRWb3RlVXBkYXRlCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBwUDbmlsBQNuaWwFBHVuaXQDCQAAAgURcmVmcmVzaFN0YWtlZFZvdGUFEXJlZnJlc2hTdGFrZWRWb3RlBBZjbGFpbWVkQnlVc2VyTWluUmV3YXJkCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMJARlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQQd3hUb0NsYWltVXNlck5ldwgJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIAAAJfMQQQYXZhaWxhYmxlVG9DbGFpbQkAuAICBRB3eFRvQ2xhaW1Vc2VyTmV3BRZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBBV0aHJvd0lmTm90aGluZ1RvQ2xhaW0GBAFyAwkAvwICBRBhdmFpbGFibGVUb0NsYWltBQp6ZXJvQmlnSW50CQD8BwQFBHRoaXMCD2NsYWltV3hJTlRFUk5BTAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUVdGhyb3dJZk5vdGhpbmdUb0NsYWltBQNuaWwFA25pbAUEdW5pdAMJAAACBQFyBQFyAwkAZgIFBmFtb3VudAUMc3Rha2VkQnlVc2VyCQEIdGhyb3dFcnIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnBhc3NlZCBhbW91bnQ9CQCkAwEFBmFtb3VudAIbIGlzIGdyZWF0ZXIgdGhhbiBhdmFpbGFibGU9CQCkAwEFDHN0YWtlZEJ5VXNlcgIMLiBscEFzc2V0SWQ9BQxscEFzc2V0SWRTdHICEi4gc3Rha2VkQnlVc2VyS0VZPQUPc3Rha2VkQnlVc2VyS0VZCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUPc3Rha2VkQnlVc2VyS0VZCQBlAgUMc3Rha2VkQnlVc2VyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDnN0YWtlZFRvdGFsS0VZCQBlAgULc3Rha2VkVG90YWwFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRdscEFzc2V0UmVjaXBpZW50QWRkcmVzcwUGYW1vdW50BQlscEFzc2V0SWQJAMwIAgkBFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQUCB3Vuc3Rha2UFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIFBmFtb3VudAgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsBQ1pbnRlZ3JhbFNUQVRFBQtsaXN0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLhABaQELY29uc3RydWN0b3IBEWZhY3RvcnlBZGRyZXNzU3RyBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUZhY3RvcnlBZGRyZXNzAAURZmFjdG9yeUFkZHJlc3NTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jb25zdHJ1Y3RvclYyARZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BAVjaGVrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQECIT0CCQCmCAEFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFBHVuaXQGAihpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzBQNuaWwDCQAAAgUFY2hla3MFBWNoZWtzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AAUWdm90aW5nRW1pc3Npb25Db250cmFjdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXN0YWtlAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkBCHRocm93RXJyAQI0aW52YWxpZCBwYXltZW50IC0gZXhhY3Qgb25lIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAECWxwQXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAxscEFzc2V0SWRTdHIJANgEAQUJbHBBc3NldElkBAZhbW91bnQIBQNwbXQGYW1vdW50BA5wb29sQWRkcmVzc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD2ZhY3RvcnlDb250cmFjdAkBGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAQUMbHBBc3NldElkU3RyCQEHd3JhcEVycgEJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQxscEFzc2V0SWRTdHIEC3Bvb2xBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5wb29sQWRkcmVzc1N0cgQLdXNlckFkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQtwb29sQWRkcmVzcwgFAWkMb3JpZ2luQ2FsbGVyCAUBaQZjYWxsZXIJAQxzdGFrZUFjdGlvbnMFBQFpBQlscEFzc2V0SWQFC3Bvb2xBZGRyZXNzBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBCHN0YWtlRm9yAQ51c2VyQWRkcmVzc1N0cgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkBCHRocm93RXJyAQI0aW52YWxpZCBwYXltZW50IC0gZXhhY3Qgb25lIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAECWxwQXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAxscEFzc2V0SWRTdHIJANgEAQUJbHBBc3NldElkBAZhbW91bnQIBQNwbXQGYW1vdW50BA5wb29sQWRkcmVzc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD2ZhY3RvcnlDb250cmFjdAkBGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAQUMbHBBc3NldElkU3RyCQEHd3JhcEVycgEJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQxscEFzc2V0SWRTdHIEC3Bvb2xBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5wb29sQWRkcmVzc1N0cgQLdXNlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQ51c2VyQWRkcmVzc1N0cgkBB3dyYXBFcnIBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwkBDHN0YWtlQWN0aW9ucwUFAWkFCWxwQXNzZXRJZAULcG9vbEFkZHJlc3MFC3VzZXJBZGRyZXNzBQZhbW91bnQBaQEHdW5zdGFrZQIMbHBBc3NldElkU3RyBmFtb3VudAQJbHBBc3NldElkCQDZBAEFDGxwQXNzZXRJZFN0cgQOcG9vbEFkZHJlc3NTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9mYWN0b3J5Q29udHJhY3QJARprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwEFDGxwQXNzZXRJZFN0cgkBB3dyYXBFcnIBCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyBAtwb29sQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOcG9vbEFkZHJlc3NTdHIECWNhbGxlclN0cgkApQgBCAUBaQZjYWxsZXIEC3VzZXJBZGRyZXNzAwkAAAIFCWNhbGxlclN0cgUOcG9vbEFkZHJlc3NTdHIIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyBBdscEFzc2V0UmVjaXBpZW50QWRkcmVzcwgFAWkGY2FsbGVyCQEOdW5zdGFrZUFjdGlvbnMGBQFpBQlscEFzc2V0SWQFC3Bvb2xBZGRyZXNzBQt1c2VyQWRkcmVzcwUXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MFBmFtb3VudAFpAQ91bnN0YWtlSU5URVJOQUwECWxwQXNzZXRJZAZhbW91bnQLdXNlckFkZHJlc3MXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MEDGxwQXNzZXRJZFN0cgkA2AQBBQlscEFzc2V0SWQEC3Bvb2xBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcBBQxscEFzc2V0SWRTdHIJAQd3cmFwRXJyAQkArAICAhV1bnN1cHBvcnRlZCBscCBhc3NldCAFDGxwQXNzZXRJZFN0cgQLY2hlY2tDYWxsZXIDCQAAAggFAWkGY2FsbGVyBQtwb29sQWRkcmVzcwYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAQ51bnN0YWtlQWN0aW9ucwYFAWkFCWxwQXNzZXRJZAULcG9vbEFkZHJlc3MJAQdBZGRyZXNzAQULdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdjbGFpbVd4AQxscEFzc2V0SWRTdHIEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQVdGhyb3dJZk5vdGhpbmdUb0NsYWltBgQGcmVzdWx0CQD8BwQFBHRoaXMCD2NsYWltV3hJTlRFUk5BTAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUVdGhyb3dJZk5vdGhpbmdUb0NsYWltBQNuaWwFA25pbAkAlAoCBQNuaWwFBnJlc3VsdAFpARFjbGFpbVd4RG9Ob3RUaHJvdwEMbHBBc3NldElkU3RyBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEFXRocm93SWZOb3RoaW5nVG9DbGFpbQcEBnJlc3VsdAkA/AcEBQR0aGlzAg9jbGFpbVd4SU5URVJOQUwJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFFXRocm93SWZOb3RoaW5nVG9DbGFpbQUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQBaQEPY2xhaW1XeElOVEVSTkFMAwxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIVdGhyb3dJZk5vdGhpbmdUb0NsYWltBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3VzZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUOdXNlckFkZHJlc3NTdHIJAQd3cmFwRXJyAQIlY2xhaW1XeElOVEVSTkFMOiBpbnZhbGlkIHVzZXIgYWRkcmVzcwQOcG9vbEFkZHJlc3NTdHIJARhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEFDGxwQXNzZXRJZFN0cgQQY2xhaW1lZEJ5VXNlcktFWQkBEGtleUNsYWltZWRCeVVzZXICBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBA9jbGFpbWVkVG90YWxLRVkJAQ9rZXlDbGFpbWVkVG90YWwBBQxscEFzc2V0SWRTdHIEGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJARlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQbY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkS0VZCQEba2V5Q2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQNY2xhaW1lZEJ5VXNlcgkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRBjbGFpbWVkQnlVc2VyS0VZBBZjbGFpbWVkQnlVc2VyTWluUmV3YXJkCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMFGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkEGGNsYWltZWRCeVVzZXJCb29zdFJld2FyZAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRLRVkEDGNsYWltZWRUb3RhbAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBQ9jbGFpbWVkVG90YWxLRVkEDSR0MDI1NDU5MjU1NzEJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIAAAQQd3hUb0NsYWltVXNlck5ldwgFDSR0MDI1NDU5MjU1NzECXzEEDWludGVncmFsU1RBVEUIBQ0kdDAyNTQ1OTI1NTcxAl8yBAVkZWJ1ZwgFDSR0MDI1NDU5MjU1NzECXzMEEGF2YWlsYWJsZVRvQ2xhaW0JAJgDAQkAzAgCCQC4AgIFEHd4VG9DbGFpbVVzZXJOZXcFFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQJAMwIAgUKemVyb0JpZ0ludAUDbmlsAwkAwAICBQp6ZXJvQmlnSW50BRBhdmFpbGFibGVUb0NsYWltAwUVdGhyb3dJZk5vdGhpbmdUb0NsYWltCQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltCQCUCgIFA25pbAAABBJ3eEFtb3VudEJvb3N0VG90YWwJAJYDAQkAzAgCCQEFYXNJbnQBCQCRAwIJAQlhc0FueUxpc3QBCQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCDGNsYWltV3hCb29zdAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIFA25pbAUDbmlsAAAJAMwIAgAABQNuaWwEDW1pblJld2FyZFBhcnQFEGF2YWlsYWJsZVRvQ2xhaW0ED2Jvb3N0UmV3YXJkUGFydAkAmQMBCQDMCAIJALkCAgUNbWluUmV3YXJkUGFydAkAtgIBCQBlAgUKYm9vc3RDb2VmZgABCQDMCAIJALYCAQUSd3hBbW91bnRCb29zdFRvdGFsBQNuaWwEC3RvdGFsUmV3YXJkCQC3AgIFDW1pblJld2FyZFBhcnQFD2Jvb3N0UmV3YXJkUGFydAQJd3hBc3NldElkCQEMYXNCeXRlVmVjdG9yAQkAkQMCCQEJYXNBbnlMaXN0AQkA/AcEBRBlbWlzc2lvbkNvbnRyYWN0AgRlbWl0CQDMCAIJAKADAQUNbWluUmV3YXJkUGFydAUDbmlsBQNuaWwAAAQJZW1pdEJvb3N0CQEJYXNBbnlMaXN0AQkA/AcEBRBlbWlzc2lvbkNvbnRyYWN0AgRlbWl0CQDMCAIJAKADAQUPYm9vc3RSZXdhcmRQYXJ0BQNuaWwFA25pbAMJAAACBQllbWl0Qm9vc3QFCWVtaXRCb29zdAQSY2xhaW1lZEJ5VXNlclZhbHVlCQC3AgIJALcCAgUNY2xhaW1lZEJ5VXNlcgUNbWluUmV3YXJkUGFydAUPYm9vc3RSZXdhcmRQYXJ0BB5jbGFpbWVkQnlVc2VyTWluUmV3YXJkUGx1c1BhcnQJALcCAgUWY2xhaW1lZEJ5VXNlck1pblJld2FyZAUNbWluUmV3YXJkUGFydAQrY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkUGx1c0Jvb3N0UmV3YXJkUGFydAkAtwICBRhjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmQFD2Jvb3N0UmV3YXJkUGFydAQgY2xhaW1lZFRvdGFsUGx1c0F2YWlsYWJsZVRvQ2xhaW0JALcCAgUMY2xhaW1lZFRvdGFsBRBhdmFpbGFibGVUb0NsYWltCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUQY2xhaW1lZEJ5VXNlcktFWQkApgMBBRJjbGFpbWVkQnlVc2VyVmFsdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUZY2xhaW1lZEJ5VXNlck1pblJld2FyZEtFWQkApgMBBR5jbGFpbWVkQnlVc2VyTWluUmV3YXJkUGx1c1BhcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUbY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkS0VZCQCmAwEFK2NsYWltZWRCeVVzZXJCb29zdFJld2FyZFBsdXNCb29zdFJld2FyZFBhcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPY2xhaW1lZFRvdGFsS0VZCQCmAwEFIGNsYWltZWRUb3RhbFBsdXNBdmFpbGFibGVUb0NsYWltCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzCQCgAwEFDW1pblJld2FyZFBhcnQFCXd4QXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwkAoAMBBQ9ib29zdFJld2FyZFBhcnQFCXd4QXNzZXRJZAkAzAgCCQEVT3BlcmF0aW9uSGlzdG9yeUVudHJ5BQIFY2xhaW0FDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIJAKADAQUQYXZhaWxhYmxlVG9DbGFpbQgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsCQCgAwEFC3RvdGFsUmV3YXJkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBG2NsYWltV3hCdWxrSW50ZXJuYWxSRUFET05MWQQLY3VycmVudEl0ZXIKbHBBc3NldElkcw51c2VyQWRkcmVzc1N0cgZyZXNBY2MDCQAAAgULY3VycmVudEl0ZXIJAJADAQUKbHBBc3NldElkcwkAlAoCBQNuaWwFBnJlc0FjYwQJbHBBc3NldElkCQCRAwIFCmxwQXNzZXRJZHMFC2N1cnJlbnRJdGVyBARpbmZvCQC1CQIKAAFACQD8BwQFBHRoaXMCD2NsYWltV3hSRUFET05MWQkAzAgCBQlscEFzc2V0SWQJAMwIAgUOdXNlckFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwUDU0VQBAl1bmNsYWltZWQJAJEDAgUEaW5mbwADBAdjbGFpbWVkCQCRAwIFBGluZm8ABAQRdXNlclZvdGVGaW5hbGl6ZWQKAAFACQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCHGdldFVzZXJWb3RlRmluYWxpemVkUkVBRE9OTFkJAMwIAgUJbHBBc3NldElkCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEA3JlcwkAzQgCBQZyZXNBY2MJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgUJdW5jbGFpbWVkCQDMCAIFB2NsYWltZWQJAMwIAgkApAMBBRF1c2VyVm90ZUZpbmFsaXplZAUDbmlsBQNTRVAEA2ludgoAAUAJAPwHBAUEdGhpcwIbY2xhaW1XeEJ1bGtJbnRlcm5hbFJFQURPTkxZCQDMCAIJAGQCBQtjdXJyZW50SXRlcgABCQDMCAIFCmxwQXNzZXRJZHMJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUDcmVzBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDaW52BQNpbnYJAJQKAgUDbmlsBQNpbnYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETY2xhaW1XeEJ1bGtSRUFET05MWQIKbHBBc3NldElkcw51c2VyQWRkcmVzc1N0cgQDcmVzCQD8BwQFBHRoaXMCG2NsYWltV3hCdWxrSW50ZXJuYWxSRUFET05MWQkAzAgCAAAJAMwIAgUKbHBBc3NldElkcwkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAUDcmVzAWkBD2NsYWltV3hSRUFET05MWQIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBA9zdGFrZWRCeVVzZXJLRVkJAQ9rZXlTdGFrZWRCeVVzZXICBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyBA5zdGFrZWRUb3RhbEtFWQkBDmtleVN0YWtlZFRvdGFsAQUMbHBBc3NldElkU3RyBBBjbGFpbWVkQnlVc2VyS0VZCQEQa2V5Q2xhaW1lZEJ5VXNlcgIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJARlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQMc3Rha2VkQnlVc2VyCQEKcmVhZFN0YWtlZAEFD3N0YWtlZEJ5VXNlcktFWQQLc3Rha2VkVG90YWwJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEDWNsYWltZWRCeVVzZXIJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwUQY2xhaW1lZEJ5VXNlcktFWQQWY2xhaW1lZEJ5VXNlck1pblJld2FyZAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRljbGFpbWVkQnlVc2VyTWluUmV3YXJkS0VZBA5wb29sQWRkcmVzc1N0cgkBGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAQUMbHBBc3NldElkU3RyBApwb29sV2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9mYWN0b3J5Q29udHJhY3QJARRrZXlGYWN0b3J5UG9vbFdlaWdodAEFDnBvb2xBZGRyZXNzU3RyBBJ3eEVtaXNzaW9uUGVyQmxvY2sJAQxnZXRJbnRPckZhaWwCBRBlbWlzc2lvbkNvbnRyYWN0CQEea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAQSZW1pc3Npb25TdGFydEJsb2NrCQEMZ2V0SW50T3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAkBFWtleUVtaXNzaW9uU3RhcnRCbG9jawAEDHBhc3NlZEJsb2NrcwMJAGYCBRJlbWlzc2lvblN0YXJ0QmxvY2sFBmhlaWdodAAACQBlAgUGaGVpZ2h0BRJlbWlzc2lvblN0YXJ0QmxvY2sEDnBvb2xXeEVtaXNzaW9uCQBrAwkAaAIFEnd4RW1pc3Npb25QZXJCbG9jawUMcGFzc2VkQmxvY2tzBQpwb29sV2VpZ2h0BQ5QT09MV0VJR0hUTVVMVAQMdXNlcld4UmV3YXJkCQBrAwUOcG9vbFd4RW1pc3Npb24FDHN0YWtlZEJ5VXNlcgULc3Rha2VkVG90YWwEDSR0MDI5NjIyMjk3MzQJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIAAAQQd3hUb0NsYWltVXNlck5ldwgFDSR0MDI5NjIyMjk3MzQCXzEEDWludGVncmFsU1RBVEUIBQ0kdDAyOTYyMjI5NzM0Al8yBAVkZWJ1ZwgFDSR0MDI5NjIyMjk3MzQCXzMEEGF2YWlsYWJsZVRvQ2xhaW0JAJgDAQkAzAgCCQC4AgIFEHd4VG9DbGFpbVVzZXJOZXcFFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQJAMwIAgUKemVyb0JpZ0ludAUDbmlsBA5ib29zdEludlJlc3VsdAkBCWFzQW55TGlzdAEJAPwHBAUQYm9vc3RpbmdDb250cmFjdAIUY2xhaW1XeEJvb3N0UkVBRE9OTFkJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAQSd3hBbW91bnRCb29zdFRvdGFsCQCWAwEJAMwIAgkBBWFzSW50AQkAkQMCBQ5ib29zdEludlJlc3VsdAAACQDMCAIAAAUDbmlsBApib29zdERlYnVnCQEIYXNTdHJpbmcBCQCRAwIFDmJvb3N0SW52UmVzdWx0AAEEDW1pblJld2FyZFBhcnQFEGF2YWlsYWJsZVRvQ2xhaW0ED2Jvb3N0UmV3YXJkUGFydAkAmQMBCQDMCAIJALkCAgUNbWluUmV3YXJkUGFydAkAtgIBCQBlAgUKYm9vc3RDb2VmZgABCQDMCAIJALYCAQUSd3hBbW91bnRCb29zdFRvdGFsBQNuaWwEC3RvdGFsUmV3YXJkCQC3AgIFDW1pblJld2FyZFBhcnQFD2Jvb3N0UmV3YXJkUGFydAkAlAoCBQNuaWwJALkJAgkAzAgCAg4lcyVzJWQlZCVkJWQlcwkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgkApgMBBQt0b3RhbFJld2FyZAkAzAgCCQCmAwEFDWNsYWltZWRCeVVzZXIJAMwIAgkApgMBBQ1taW5SZXdhcmRQYXJ0CQDMCAIJAKYDAQUPYm9vc3RSZXdhcmRQYXJ0CQDMCAICBHNvb24FA25pbAUDU0VQAWkBFHN0YWtlZEJ5VXNlclJFQURPTkxZAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEDHN0YWtlZEJ5VXNlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgAACQCUCgIFA25pbAUMc3Rha2VkQnlVc2VyAWkBE3N0YWtlZFRvdGFsUkVBRE9OTFkBDGxwQXNzZXRJZFN0cgQLc3Rha2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDmtleVN0YWtlZFRvdGFsAQUMbHBBc3NldElkU3RyAAAJAJQKAgUDbmlsBQtzdGFrZWRUb3RhbAFpARJ1c2Vyc0xpc3RUcmF2ZXJzYWwBCWxwQXNzZXRJZAQLY2hlY2tDYWxsZXIDCQAAAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AAIABgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIECGxpc3ROYW1lCQEQZ2V0VXNlcnNMaXN0TmFtZQEFCWxwQXNzZXRJZAQKdXNlck9yVW5pdAkAoggBCQELa2V5TmV4dFVzZXIBBQlscEFzc2V0SWQECmhlYWRPclVuaXQJAKIIAQkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUEByRtYXRjaDAFCnVzZXJPclVuaXQDCQABAgUHJG1hdGNoMAIEVW5pdAQHJG1hdGNoMQUKaGVhZE9yVW5pdAMJAAECBQckbWF0Y2gxAgRVbml0CQCUCgIFA25pbAcDCQABAgUHJG1hdGNoMQIGU3RyaW5nBARoZWFkBQckbWF0Y2gxCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleU5leHRVc2VyAQUJbHBBc3NldElkBQRoZWFkBQNuaWwGCQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAt1c2VyQWRkcmVzcwUHJG1hdGNoMAQWY2xhaW1lZEJ5VXNlck1pblJld2FyZAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzCQEZa2V5Q2xhaW1lZEJ5VXNlck1pblJld2FyZAIFCWxwQXNzZXRJZAULdXNlckFkZHJlc3MEC3Bvb2xBZGRyZXNzCQEYZ2V0U3RyaW5nQnlBZGRyZXNzT3JGYWlsAgUPZmFjdG9yeUNvbnRyYWN0CQEma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MBBQlscEFzc2V0SWQEEHd4VG9DbGFpbVVzZXJOZXcICQEQcmVmcmVzaElOVEVHUkFMUwQFCWxwQXNzZXRJZAULdXNlckFkZHJlc3MFC3Bvb2xBZGRyZXNzAAACXzEEEGF2YWlsYWJsZVRvQ2xhaW0JALgCAgUQd3hUb0NsYWltVXNlck5ldwUWY2xhaW1lZEJ5VXNlck1pblJld2FyZAQVdGhyb3dJZk5vdGhpbmdUb0NsYWltBgQBcgMJAL8CAgUQYXZhaWxhYmxlVG9DbGFpbQUKemVyb0JpZ0ludAkA/AcEBQR0aGlzAg9jbGFpbVd4SU5URVJOQUwJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFFXRocm93SWZOb3RoaW5nVG9DbGFpbQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUBcgUBcgQObmV4dFVzZXJPclVuaXQJAKIIAQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFC3VzZXJBZGRyZXNzBAckbWF0Y2gxBQ5uZXh0VXNlck9yVW5pdAMJAAECBQckbWF0Y2gxAgRVbml0CQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleU5leHRVc2VyAQUJbHBBc3NldElkBQNuaWwHAwkAAQIFByRtYXRjaDECBlN0cmluZwQIbmV4dFVzZXIFByRtYXRjaDEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TmV4dFVzZXIBBQlscEFzc2V0SWQFCG5leHRVc2VyBQNuaWwGCQACAQILTWF0Y2ggZXJyb3IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAgtNYXRjaCBlcnJvcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5vbk1vZGlmeVdlaWdodAIMbHBBc3NldElkU3RyDnBvb2xBZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyBQ9mYWN0b3J5Q29udHJhY3QJAQh0aHJvd0VycgECEnBlcm1pc3Npb25zIGRlbmllZAQNJHQwMzI1MjQzMjYzNAkBFHJlZnJlc2hQb29sSU5URUdSQUxTAwUMbHBBc3NldElkU3RyBQ5wb29sQWRkcmVzc1N0cgAABBJ3eFBlckxwSW50ZWdyYWxOZXcIBQ0kdDAzMjUyNDMyNjM0Al8xBBFwb29sSW50ZWdyYWxTVEFURQgFDSR0MDMyNTI0MzI2MzQCXzIECXBvb2xERUJVRwgFDSR0MDMyNTI0MzI2MzQCXzMFEXBvb2xJbnRlZ3JhbFNUQVRFAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5ikxY5Q==", "height": 3637210, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Gvc7HrXN2fRwSuvs5AX1Lyhne18f8gVuf4iwvNbUdauh Next: GzsahDLBHDHmN21UYyLY6ku6gjr8EAd5VR38B51FoEcU Diff:
OldNewDifferences
132132 func W () = "%s__managerPublicKey"
133133
134134
135-func X () = "%s__pendingManagerPublicKey"
135+func X () = "%s__managerVaultAddress"
136136
137137
138-func Y () = "%s__stablePoolAddonAddr"
138+func Y (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
139139
140140
141-func Z () = "%s__addonAddr"
141+func aa () = "%s__lpTokensList"
142142
143143
144-func aa (ab) = makeString(["%s%s%s", ab, "mappings__lpAsset2PoolContract"], f)
144+func ab (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
145145
146146
147-func ac () = "%s__lpTokensList"
147+func ac (ad) = makeString(["%s%s", "poolWeight", ad], f)
148148
149149
150-func ad (ab) = makeString(["%s%s%s", ab, "mappings__lpAsset2PoolContract"], f)
150+func ae (af) = split(valueOrElse(getString(af, aa()), ""), f)
151151
152152
153-func ae (af) = makeString(["%s%s", "poolWeight", af], f)
153+func ag (af) = split(z(af, V()), f)
154154
155155
156-func ag (ah) = split(valueOrElse(getString(ah, ac()), ""), f)
156+func ah (ai) = addressFromStringValue(ai[P])
157157
158158
159-func ai (ah) = split(z(ah, V()), f)
159+func aj (ai) = addressFromStringValue(ai[S])
160160
161161
162-func aj (ak) = addressFromStringValue(ak[P])
162+func ak (ai) = addressFromStringValue(ai[O])
163163
164164
165-func al (ak) = addressFromStringValue(ak[S])
166-
167-
168-func am (ak) = addressFromStringValue(ak[O])
169-
170-
171-func an () = "%s%s__ratePerBlock__current"
172-
173-
174-func ao () = "%s%s__ratePerBlockMax__current"
175-
176-
177-func ap () = "%s%s__emission__startBlock"
178-
179-
180-func aq () = "%s%s__emission__duration"
181-
182-
183-func ar () = "%s%s__emission__endBlock"
184-
185-
186-func as (at,au) = makeString(["%s%s%s__staked", at, au], f)
187-
188-
189-func av (au) = ("%s%s%s__staked__total__" + au)
190-
191-
192-func aw (au,at) = makeString(["%s%s%s__claimed", at, au], f)
193-
194-
195-func ax (au,at) = makeString(["%s%s%s__claimedMinReward", at, au], f)
196-
197-
198-func ay (au,at) = makeString(["%s%s%s__claimedBoostReward", at, au], f)
199-
200-
201-func az (au) = makeString(["%s%s%s__claimed__total", au], f)
202-
203-
204-func aA (y) = valueOrElse(getInteger(this, y), 0)
205-
206-
207-func aB (aC) = makeString(["%s%s%s", aC, "total", "bal"], f)
208-
209-
210-func aD (aC,aE) = makeString(["%s%s%s", aC, aE, "bal"], f)
211-
212-
213-func aF (aC) = makeString(["%s%s%s", aC, "total", "balINT"], f)
214-
215-
216-func aG (aC,aE) = makeString(["%s%s%s", aC, aE, "balINT"], f)
217-
218-
219-func aH (aC) = makeString(["%s%s%s", aC, "total", "lastUpd"], f)
220-
221-
222-func aI (aC,aE) = makeString(["%s%s%s", aC, aE, "lastUpd"], f)
223-
224-
225-func aJ (aC) = makeString(["%s%s%s%s", aC, "common", "lpInt"], f)
226-
227-
228-func aK (aC) = makeString(["%s%s%s%s", aC, "common", "lpIntH"], f)
229-
230-
231-func aL (aC,aE) = makeString(["%s%s%s%s", aC, aE, "lpInt"], f)
232-
233-
234-func aM (aC,aE) = makeString(["%s%s%s%s", aC, aE, "lpIntH"], f)
235-
236-
237-func aN (aC) = makeString(["%s", aC, "wxPerLp"], f)
238-
239-
240-func aO (aC) = makeString(["%s", aC, "wxPerLpX18"], f)
241-
242-
243-func aP (aC,aE) = makeString(["%s%s%s%s", aC, aE, "uIntL"], f)
244-
245-
246-func aQ (aR,aE,aS) = makeString(["%s%s%s%s__history", aR, aE, aS], f)
247-
248-
249-func aT (aE,aC,aR,aU) = makeString(["%s%s%s%d%d%d", aE, aC, aR, toString(height), toString(lastBlock.timestamp), toString(aU)], f)
250-
251-
252-func aV (aR,aE,aC,aU,aW) = StringEntry(aQ(aR, aE, toBase58String(aW)), aT(aE, aC, aR, aU))
253-
254-
255-let aX = w(this, M())
256-
257-let aY = addressFromStringValue(aX)
258-
259-let ak = ai(aY)
260-
261-let aZ = al(ak)
262-
263-let ba = aj(ak)
264-
265-let bb = {
266- let bc = invoke(aZ, "getBoostCoeffREADONLY", nil, nil)
267- if ($isInstanceOf(bc, "Int"))
268- then bc
269- else throw(($getType(bc) + " couldn't be cast to Int"))
270- }
271-
272-let bd = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], f)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
273-
274-func be (aC) = makeString(["%s%s", aC, "nextUser"], f)
275-
276-
277-func bf (aC) = makeString(["users", aC], f)
278-
279-
280-func bg (bh) = makeString(["%s%s%s", bh, "head"], f)
281-
282-
283-func bi (bh) = makeString(["%s%s%s", bh, "size"], f)
284-
285-
286-func bj (bh,bk) = makeString(["%s%s%s%s", bh, bk, "prev"], f)
287-
288-
289-func bl (bh,bk) = makeString(["%s%s%s%s", bh, bk, "next"], f)
290-
291-
292-func bm (bh,bk) = {
293- let bn = getString(this, bg(bh))
294- let bo = getString(this, bj(bh, bk))
295- let bp = getString(this, bl(bh, bk))
296- if (if ((bk == valueOrElse(bn, "")))
297- then true
298- else (bo != unit))
299- then true
300- else (bp != unit)
165+func al () = {
166+ let o = getString(X())
167+ if ($isInstanceOf(o, "String"))
168+ then {
169+ let G = o
170+ addressFromStringValue(G)
171+ }
172+ else this
301173 }
302174
303175
304-func bq (bh,bk) = {
305- let bn = getString(this, bg(bh))
306- let br = valueOrElse(getInteger(this, bi(bh)), 0)
307- let bs = if (!(bm(bh, bk)))
176+func am () = "%s%s__ratePerBlock__current"
177+
178+
179+func an () = "%s%s__ratePerBlockMax__current"
180+
181+
182+func ao () = "%s%s__emission__startBlock"
183+
184+
185+func ap () = "%s%s__emission__duration"
186+
187+
188+func aq () = "%s%s__emission__endBlock"
189+
190+
191+func ar (as,at) = makeString(["%s%s%s__staked", as, at], f)
192+
193+
194+func au (at) = ("%s%s%s__staked__total__" + at)
195+
196+
197+func av (at,as) = makeString(["%s%s%s__claimed", as, at], f)
198+
199+
200+func aw (at,as) = makeString(["%s%s%s__claimedMinReward", as, at], f)
201+
202+
203+func ax (at,as) = makeString(["%s%s%s__claimedBoostReward", as, at], f)
204+
205+
206+func ay (at) = makeString(["%s%s%s__claimed__total", at], f)
207+
208+
209+func az (y) = valueOrElse(getInteger(this, y), 0)
210+
211+
212+func aA (aB) = makeString(["%s%s%s", aB, "total", "bal"], f)
213+
214+
215+func aC (aB,aD) = makeString(["%s%s%s", aB, aD, "bal"], f)
216+
217+
218+func aE (aB) = makeString(["%s%s%s", aB, "total", "balINT"], f)
219+
220+
221+func aF (aB,aD) = makeString(["%s%s%s", aB, aD, "balINT"], f)
222+
223+
224+func aG (aB) = makeString(["%s%s%s", aB, "total", "lastUpd"], f)
225+
226+
227+func aH (aB,aD) = makeString(["%s%s%s", aB, aD, "lastUpd"], f)
228+
229+
230+func aI (aB) = makeString(["%s%s%s%s", aB, "common", "lpInt"], f)
231+
232+
233+func aJ (aB) = makeString(["%s%s%s%s", aB, "common", "lpIntH"], f)
234+
235+
236+func aK (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpInt"], f)
237+
238+
239+func aL (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpIntH"], f)
240+
241+
242+func aM (aB) = makeString(["%s", aB, "wxPerLp"], f)
243+
244+
245+func aN (aB) = makeString(["%s", aB, "wxPerLpX18"], f)
246+
247+
248+func aO (aB,aD) = makeString(["%s%s%s%s", aB, aD, "uIntL"], f)
249+
250+
251+func aP (aQ,aD,aR) = makeString(["%s%s%s%s__history", aQ, aD, aR], f)
252+
253+
254+func aS (aD,aB,aQ,aT) = makeString(["%s%s%s%d%d%d", aD, aB, aQ, toString(height), toString(lastBlock.timestamp), toString(aT)], f)
255+
256+
257+func aU (aQ,aD,aB,aT,aV) = StringEntry(aP(aQ, aD, toBase58String(aV)), aS(aD, aB, aQ, aT))
258+
259+
260+let aW = w(this, M())
261+
262+let aX = addressFromStringValue(aW)
263+
264+let ai = ag(aX)
265+
266+let aY = aj(ai)
267+
268+let aZ = ah(ai)
269+
270+let ba = {
271+ let bb = invoke(aY, "getBoostCoeffREADONLY", nil, nil)
272+ if ($isInstanceOf(bb, "Int"))
273+ then bb
274+ else throw(($getType(bb) + " couldn't be cast to Int"))
275+ }
276+
277+let bc = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], f)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
278+
279+func bd (aB) = makeString(["%s%s", aB, "nextUser"], f)
280+
281+
282+func be (aB) = makeString(["users", aB], f)
283+
284+
285+func bf (bg) = makeString(["%s%s%s", bg, "head"], f)
286+
287+
288+func bh (bg) = makeString(["%s%s%s", bg, "size"], f)
289+
290+
291+func bi (bg,bj) = makeString(["%s%s%s%s", bg, bj, "prev"], f)
292+
293+
294+func bk (bg,bj) = makeString(["%s%s%s%s", bg, bj, "next"], f)
295+
296+
297+func bl (bg,bj) = {
298+ let bm = getString(this, bf(bg))
299+ let bn = getString(this, bi(bg, bj))
300+ let bo = getString(this, bk(bg, bj))
301+ if (if ((bj == valueOrElse(bm, "")))
302+ then true
303+ else (bn != unit))
304+ then true
305+ else (bo != unit)
306+ }
307+
308+
309+func bp (bg,bj) = {
310+ let bm = getString(this, bf(bg))
311+ let bq = valueOrElse(getInteger(this, bh(bg)), 0)
312+ let br = if (!(bl(bg, bj)))
308313 then true
309314 else l("Node exists")
310- if ((bs == bs))
311- then (([IntegerEntry(bi(bh), (br + 1))] ++ (if ((bn != unit))
312- then [StringEntry(bl(bh, bk), value(bn)), StringEntry(bj(bh, value(bn)), bk)]
313- else nil)) ++ [StringEntry(bg(bh), bk)])
315+ if ((br == br))
316+ then (([IntegerEntry(bh(bg), (bq + 1))] ++ (if ((bm != unit))
317+ then [StringEntry(bk(bg, bj), value(bm)), StringEntry(bi(bg, value(bm)), bj)]
318+ else nil)) ++ [StringEntry(bf(bg), bj)])
314319 else throw("Strict value is not equal to itself.")
315320 }
316321
317322
318-func bt (bh,bk) = {
319- let bn = getString(this, bg(bh))
320- let br = valueOrElse(getInteger(this, bi(bh)), 0)
321- let bo = getString(this, bj(bh, bk))
322- let bp = getString(this, bl(bh, bk))
323- ([IntegerEntry(bi(bh), (br - 1))] ++ (if (if ((bo != unit))
324- then (bp != unit)
323+func bs (bg,bj) = {
324+ let bm = getString(this, bf(bg))
325+ let bq = valueOrElse(getInteger(this, bh(bg)), 0)
326+ let bn = getString(this, bi(bg, bj))
327+ let bo = getString(this, bk(bg, bj))
328+ ([IntegerEntry(bh(bg), (bq - 1))] ++ (if (if ((bn != unit))
329+ then (bo != unit)
325330 else false)
326- then [StringEntry(bl(bh, value(bo)), value(bp)), StringEntry(bj(bh, value(bp)), value(bo)), DeleteEntry(bj(bh, bk)), DeleteEntry(bl(bh, bk))]
327- else if ((bp != unit))
328- then [StringEntry(bg(bh), value(bp)), DeleteEntry(bl(bh, bk)), DeleteEntry(bj(bh, value(bp)))]
329- else if ((bo != unit))
330- then [DeleteEntry(bj(bh, bk)), DeleteEntry(bl(bh, value(bo)))]
331- else if ((bk == valueOrElse(bn, "")))
332- then [DeleteEntry(bg(bh))]
333- else l(((("invalid node: " + bh) + ".") + bk))))
331+ then [StringEntry(bk(bg, value(bn)), value(bo)), StringEntry(bi(bg, value(bo)), value(bn)), DeleteEntry(bi(bg, bj)), DeleteEntry(bk(bg, bj))]
332+ else if ((bo != unit))
333+ then [StringEntry(bf(bg), value(bo)), DeleteEntry(bk(bg, bj)), DeleteEntry(bi(bg, value(bo)))]
334+ else if ((bn != unit))
335+ then [DeleteEntry(bi(bg, bj)), DeleteEntry(bk(bg, value(bn)))]
336+ else if ((bj == valueOrElse(bm, "")))
337+ then [DeleteEntry(bf(bg))]
338+ else l(((("invalid node: " + bg) + ".") + bj))))
334339 }
335340
336341
337-func bu (bv,bw,bx,by) = if (if ((bw == h))
338- then (bv > h)
342+func bt (bu,bv,bw,bx) = if (if ((bv == h))
343+ then (bu > h)
339344 else false)
340345 then h
341- else if ((bv == h))
342- then bx
343- else if (if ((bw > h))
344- then (bv > h)
346+ else if ((bu == h))
347+ then bw
348+ else if (if ((bv > h))
349+ then (bu > h)
345350 else false)
346- then value(parseBigInt(w(this, by)))
351+ then value(parseBigInt(w(this, bx)))
347352 else l("calcWxPerLpIntegralUserLast: unexpected state")
348353
349354
350-func bz (au,bA,bB) = {
351- let bC = av(au)
352- let bD = toBigInt(aA(bC))
353- let bE = if ((bD == h))
355+func by (at,bz,bA) = {
356+ let bB = au(at)
357+ let bC = toBigInt(az(bB))
358+ let bD = if ((bC == h))
354359 then i
355- else bD
356- let bF = getIntegerValue(aY, ae(bA))
357- let bG = D(aZ, ap())
358- let bH = (D(aZ, an()) * b)
359- let bI = fraction(bH, bF, (g * bb))
360- let bJ = aJ(au)
361- let bK = aK(au)
362- let bL = aN(au)
363- let bM = B(this, bK, bG)
364- let bN = E(this, bJ)
365- let bO = 0
366- let bP = max([(height - bM), 0])
367- let bQ = if ((bO != 0))
368- then toBigInt(bO)
369- else fraction(toBigInt(bI), toBigInt(c), bE)
370- let bR = (bD + toBigInt(bB))
371- let bS = if ((bR == h))
360+ else bC
361+ let bE = getIntegerValue(aX, ac(bz))
362+ let bF = D(aY, ao())
363+ let bG = (D(aY, am()) * b)
364+ let bH = fraction(bG, bE, (g * ba))
365+ let bI = aI(at)
366+ let bJ = aJ(at)
367+ let bK = aM(at)
368+ let bL = B(this, bJ, bF)
369+ let bM = E(this, bI)
370+ let bN = 0
371+ let bO = max([(height - bL), 0])
372+ let bP = if ((bN != 0))
373+ then toBigInt(bN)
374+ else fraction(toBigInt(bH), toBigInt(c), bD)
375+ let bQ = (bC + toBigInt(bA))
376+ let bR = if ((bQ == h))
372377 then i
373- else bR
374- let bx = (bN + (bQ * toBigInt(bP)))
375- let bT = (toBigInt(bI) / bS)
376- let bU = height
377- let bV = makeString([toString(bx), toString(bP), toString(bQ), toString(bD), toString(bI), toString(bH), toString(bF)], "::")
378- $Tuple3(bx, [StringEntry(bJ, toString(bx)), IntegerEntry(bK, bU), StringEntry(bL, toString(bT))], bV)
378+ else bQ
379+ let bw = (bM + (bP * toBigInt(bO)))
380+ let bS = (toBigInt(bH) / bR)
381+ let bT = height
382+ let bU = makeString([toString(bw), toString(bO), toString(bP), toString(bC), toString(bH), toString(bG), toString(bE)], "::")
383+ $Tuple3(bw, [StringEntry(bI, toString(bw)), IntegerEntry(bJ, bT), StringEntry(bK, toString(bS))], bU)
379384 }
380385
381386
382-func bW (au,at,bA,bB) = {
383- let bX = bz(au, bA, bB)
384- let bx = bX._1
385- let bY = bX._2
386- let bZ = bX._3
387- let ca = as(at, au)
388- let bv = aA(ca)
389- let cb = aL(au, at)
390- let cc = aM(au, at)
391- let by = aP(au, at)
392- let cd = E(this, cb)
393- let bw = A(this, cc)
394- let ce = bu(toBigInt(bv), toBigInt(bw), bx, by)
395- let cf = (c * b)
396- let cg = max([(cd + fraction((bx - ce), toBigInt(bv), toBigInt(cf))), h])
397- let ch = bx
398- let ci = height
399- let bV = makeString([toString(cd), toString(ce), toString(bv), bZ, toString(height)], "::")
400- $Tuple3(cg, (bY ++ [StringEntry(cb, toString(cg)), IntegerEntry(cc, ci), StringEntry(by, toString(ch))]), bV)
387+func bV (at,as,bz,bA) = {
388+ let bW = by(at, bz, bA)
389+ let bw = bW._1
390+ let bX = bW._2
391+ let bY = bW._3
392+ let bZ = ar(as, at)
393+ let bu = az(bZ)
394+ let ca = aK(at, as)
395+ let cb = aL(at, as)
396+ let bx = aO(at, as)
397+ let cc = E(this, ca)
398+ let bv = A(this, cb)
399+ let cd = bt(toBigInt(bu), toBigInt(bv), bw, bx)
400+ let ce = (c * b)
401+ let cf = max([(cc + fraction((bw - cd), toBigInt(bu), toBigInt(ce))), h])
402+ let cg = bw
403+ let ch = height
404+ let bU = makeString([toString(cc), toString(cd), toString(bu), bY, toString(height)], "::")
405+ $Tuple3(cf, (bX ++ [StringEntry(ca, toString(cf)), IntegerEntry(cb, ch), StringEntry(bx, toString(cg))]), bU)
401406 }
402407
403408
404-func cj () = {
405- let o = getString(W())
409+func ci () = {
410+ let cj = al()
411+ let o = getString(cj, W())
406412 if ($isInstanceOf(o, "String"))
407413 then {
408414 let G = o
414420 }
415421
416422
417-func ck () = {
418- let o = getString(X())
419- if ($isInstanceOf(o, "String"))
423+let ck = l("Permission denied")
424+
425+func cl (cm) = if ((cm.caller == this))
426+ then true
427+ else ck
428+
429+
430+func cn (cm) = {
431+ let o = ci()
432+ if ($isInstanceOf(o, "ByteVector"))
420433 then {
421- let G = o
422- fromBase58String(G)
434+ let co = o
435+ if ((cm.callerPublicKey == co))
436+ then true
437+ else ck
423438 }
424439 else if ($isInstanceOf(o, "Unit"))
425- then unit
440+ then if ((cm.caller == this))
441+ then true
442+ else ck
426443 else throw("Match error")
427444 }
428445
429446
430-let cl = l("Permission denied")
431-
432-func cm (cn) = if ((cn.caller == this))
433- then true
434- else cl
435-
436-
437-func co (cn) = {
438- let o = cj()
439- if ($isInstanceOf(o, "ByteVector"))
447+func cp (cm,aB,cq,aD,aT) = {
448+ let as = toString(aD)
449+ let at = toBase58String(aB)
450+ let bz = toString(cq)
451+ let bZ = ar(as, at)
452+ let bB = au(at)
453+ let bu = az(bZ)
454+ let cr = if ((bu == 0))
455+ then invoke(aZ, "onStakedVoteUpdate", [at, as, true], nil)
456+ else unit
457+ if ((cr == cr))
440458 then {
441- let cp = o
442- if ((cn.callerPublicKey == cp))
443- then true
444- else cl
445- }
446- else if ($isInstanceOf(o, "Unit"))
447- then if ((cn.caller == this))
448- then true
449- else cl
450- else throw("Match error")
451- }
452-
453-
454-func cq (cn,aC,cr,aE,aU) = {
455- let at = toString(aE)
456- let au = toBase58String(aC)
457- let bA = toString(cr)
458- let ca = as(at, au)
459- let bC = av(au)
460- let bv = aA(ca)
461- let cs = if ((bv == 0))
462- then invoke(ba, "onStakedVoteUpdate", [au, at, true], nil)
463- else unit
464- if ((cs == cs))
465- then {
466- let bD = aA(bC)
467- let ct = bW(au, at, bA, aU)
468- let cg = ct._1
469- let cu = ct._2
470- let bV = ct._3
471- let bh = bf(au)
472- let cv = if (bm(bh, at))
459+ let bC = az(bB)
460+ let cs = bV(at, as, bz, aT)
461+ let cf = cs._1
462+ let ct = cs._2
463+ let bU = cs._3
464+ let bg = be(at)
465+ let cu = if (bl(bg, as))
473466 then nil
474- else bq(bh, at)
475- (([IntegerEntry(ca, (bv + aU)), IntegerEntry(bC, (bD + aU)), aV("stake", at, au, aU, cn.transactionId)] ++ cu) ++ cv)
467+ else bp(bg, as)
468+ (([IntegerEntry(bZ, (bu + aT)), IntegerEntry(bB, (bC + aT)), aU("stake", as, at, aT, cm.transactionId)] ++ ct) ++ cu)
476469 }
477470 else throw("Strict value is not equal to itself.")
478471 }
479472
480473
481-func cw (cn,aC,cr,aE,cx,aU) = {
482- let at = toString(aE)
483- let au = toBase58String(aC)
484- let bA = toString(cr)
485- let ca = as(at, au)
486- let bC = av(au)
487- let bv = aA(ca)
488- let bD = aA(bC)
489- let cu = bW(au, at, bA, -(aU))._2
490- let bh = bf(au)
491- let cv = if (if (bm(bh, at))
492- then (aU == bv)
474+func cv (cm,aB,cq,aD,cw,aT) = {
475+ let as = toString(aD)
476+ let at = toBase58String(aB)
477+ let bz = toString(cq)
478+ let bZ = ar(as, at)
479+ let bB = au(at)
480+ let bu = az(bZ)
481+ let bC = az(bB)
482+ let ct = bV(at, as, bz, -(aT))._2
483+ let bg = be(at)
484+ let cu = if (if (bl(bg, as))
485+ then (aT == bu)
493486 else false)
494- then bt(bh, at)
487+ then bs(bg, as)
495488 else nil
496- let cs = if ((aU == bv))
497- then invoke(ba, "onStakedVoteUpdate", [au, at, false], nil)
489+ let cr = if ((aT == bu))
490+ then invoke(aZ, "onStakedVoteUpdate", [at, as, false], nil)
498491 else unit
499- if ((cs == cs))
492+ if ((cr == cr))
500493 then {
501- let cy = E(this, ax(au, at))
502- let cg = bW(au, at, bA, 0)._1
503- let cz = (cg - cy)
504- let cA = true
505- let cB = if ((cz > h))
506- then invoke(this, "claimWxINTERNAL", [au, at, cA], nil)
494+ let cx = E(this, aw(at, as))
495+ let cf = bV(at, as, bz, 0)._1
496+ let cy = (cf - cx)
497+ let cz = true
498+ let cA = if ((cy > h))
499+ then invoke(this, "claimWxINTERNAL", [at, as, cz], nil)
507500 else unit
508- if ((cB == cB))
509- then if ((aU > bv))
510- then l(((((((("passed amount=" + toString(aU)) + " is greater than available=") + toString(bv)) + ". lpAssetId=") + au) + ". stakedByUserKEY=") + ca))
511- else (([IntegerEntry(ca, (bv - aU)), IntegerEntry(bC, (bD - aU)), ScriptTransfer(cx, aU, aC), aV("unstake", at, au, aU, cn.transactionId)] ++ cu) ++ cv)
501+ if ((cA == cA))
502+ then if ((aT > bu))
503+ then l(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bu)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bZ))
504+ else (([IntegerEntry(bZ, (bu - aT)), IntegerEntry(bB, (bC - aT)), ScriptTransfer(cw, aT, aB), aU("unstake", as, at, aT, cm.transactionId)] ++ ct) ++ cu)
512505 else throw("Strict value is not equal to itself.")
513506 }
514507 else throw("Strict value is not equal to itself.")
515508 }
516509
517510
518-@Callable(cn)
519-func constructor (cC) = {
520- let cD = co(cn)
521- if ((cD == cD))
522- then [StringEntry(M(), cC)]
511+@Callable(cm)
512+func constructor (cB) = {
513+ let cC = cn(cm)
514+ if ((cC == cC))
515+ then [StringEntry(M(), cB)]
523516 else throw("Strict value is not equal to itself.")
524517 }
525518
526519
527520
528-@Callable(cn)
529-func constructorV2 (cE) = {
530- let cF = [co(cn), if ((addressFromString(cE) != unit))
521+@Callable(cm)
522+func constructorV2 (cD) = {
523+ let cE = [cn(cm), if ((addressFromString(cD) != unit))
531524 then true
532525 else "invalid voting emission contract address"]
533- if ((cF == cF))
534- then [StringEntry(N(), cE)]
526+ if ((cE == cE))
527+ then [StringEntry(N(), cD)]
535528 else throw("Strict value is not equal to itself.")
536529 }
537530
538531
539532
540-@Callable(cn)
541-func setManager (cG) = {
542- let cD = co(cn)
543- if ((cD == cD))
544- then {
545- let cH = fromBase58String(cG)
546- if ((cH == cH))
547- then [StringEntry(X(), cG)]
548- else throw("Strict value is not equal to itself.")
549- }
533+@Callable(cm)
534+func stake () = if ((size(cm.payments) != 1))
535+ then l("invalid payment - exact one payment must be attached")
536+ else {
537+ let cF = cm.payments[0]
538+ let aB = value(cF.assetId)
539+ let at = toBase58String(aB)
540+ let aT = cF.amount
541+ let bz = valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at)))
542+ let cq = addressFromStringValue(bz)
543+ let aD = if ((cm.caller == cq))
544+ then cm.originCaller
545+ else cm.caller
546+ cp(cm, aB, cq, aD, aT)
547+ }
548+
549+
550+
551+@Callable(cm)
552+func stakeFor (as) = if ((size(cm.payments) != 1))
553+ then l("invalid payment - exact one payment must be attached")
554+ else {
555+ let cF = cm.payments[0]
556+ let aB = value(cF.assetId)
557+ let at = toBase58String(aB)
558+ let aT = cF.amount
559+ let bz = valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at)))
560+ let cq = addressFromStringValue(bz)
561+ let aD = valueOrErrorMessage(addressFromString(as), j("invalid user address"))
562+ cp(cm, aB, cq, aD, aT)
563+ }
564+
565+
566+
567+@Callable(cm)
568+func unstake (at,aT) = {
569+ let aB = fromBase58String(at)
570+ let bz = valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at)))
571+ let cq = addressFromStringValue(bz)
572+ let cG = toString(cm.caller)
573+ let aD = if ((cG == bz))
574+ then cm.originCaller
575+ else cm.caller
576+ let cw = cm.caller
577+ cv(cm, aB, cq, aD, cw, aT)
578+ }
579+
580+
581+
582+@Callable(cm)
583+func unstakeINTERNAL (aB,aT,aD,cw) = {
584+ let at = toBase58String(aB)
585+ let cq = addressFromStringValue(valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at))))
586+ let cC = if ((cm.caller == cq))
587+ then true
588+ else ck
589+ if ((cC == cC))
590+ then cv(cm, aB, cq, Address(aD), Address(cw), aT)
550591 else throw("Strict value is not equal to itself.")
551592 }
552593
553594
554595
555-@Callable(cn)
556-func confirmManager () = {
557- let cI = ck()
558- let cJ = if (isDefined(cI))
559- then true
560- else l("No pending manager")
561- if ((cJ == cJ))
562- then {
563- let cK = if ((cn.callerPublicKey == value(cI)))
564- then true
565- else l("You are not pending manager")
566- if ((cK == cK))
567- then [StringEntry(W(), toBase58String(value(cI))), DeleteEntry(X())]
568- else throw("Strict value is not equal to itself.")
569- }
570- else throw("Strict value is not equal to itself.")
596+@Callable(cm)
597+func claimWx (at) = {
598+ let as = toString(cm.caller)
599+ let cz = true
600+ let cH = invoke(this, "claimWxINTERNAL", [at, as, cz], nil)
601+ $Tuple2(nil, cH)
571602 }
572603
573604
574605
575-@Callable(cn)
576-func stake () = if ((size(cn.payments) != 1))
577- then l("invalid payment - exact one payment must be attached")
578- else {
579- let cL = cn.payments[0]
580- let aC = value(cL.assetId)
581- let au = toBase58String(aC)
582- let aU = cL.amount
583- let bA = valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au)))
584- let cr = addressFromStringValue(bA)
585- let aE = if ((cn.caller == cr))
586- then cn.originCaller
587- else cn.caller
588- cq(cn, aC, cr, aE, aU)
589- }
590-
591-
592-
593-@Callable(cn)
594-func stakeFor (at) = if ((size(cn.payments) != 1))
595- then l("invalid payment - exact one payment must be attached")
596- else {
597- let cL = cn.payments[0]
598- let aC = value(cL.assetId)
599- let au = toBase58String(aC)
600- let aU = cL.amount
601- let bA = valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au)))
602- let cr = addressFromStringValue(bA)
603- let aE = valueOrErrorMessage(addressFromString(at), j("invalid user address"))
604- cq(cn, aC, cr, aE, aU)
605- }
606-
607-
608-
609-@Callable(cn)
610-func unstake (au,aU) = {
611- let aC = fromBase58String(au)
612- let bA = valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au)))
613- let cr = addressFromStringValue(bA)
614- let cM = valueOrElse(getString(cr, Z()), bA)
615- let cN = toString(cn.caller)
616- let aE = if (if ((cN == bA))
617- then true
618- else (cN == cM))
619- then cn.originCaller
620- else cn.caller
621- let cx = cn.caller
622- cw(cn, aC, cr, aE, cx, aU)
606+@Callable(cm)
607+func claimWxDoNotThrow (at) = {
608+ let as = toString(cm.caller)
609+ let cz = false
610+ let cH = invoke(this, "claimWxINTERNAL", [at, as, cz], nil)
611+ $Tuple2(nil, cH)
623612 }
624613
625614
626615
627-@Callable(cn)
628-func unstakeINTERNAL (aC,aU,aE,cx) = {
629- let au = toBase58String(aC)
630- let cr = addressFromStringValue(valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au))))
631- let cD = if ((cn.caller == cr))
632- then true
633- else cl
634- if ((cD == cD))
635- then cw(cn, aC, cr, Address(aE), Address(cx), aU)
636- else throw("Strict value is not equal to itself.")
637- }
638-
639-
640-
641-@Callable(cn)
642-func claimWx (au) = {
643- let at = toString(cn.caller)
644- let cA = true
645- let cO = invoke(this, "claimWxINTERNAL", [au, at, cA], nil)
646- $Tuple2(nil, cO)
647- }
648-
649-
650-
651-@Callable(cn)
652-func claimWxDoNotThrow (au) = {
653- let at = toString(cn.caller)
654- let cA = false
655- let cO = invoke(this, "claimWxINTERNAL", [au, at, cA], nil)
656- $Tuple2(nil, cO)
657- }
658-
659-
660-
661-@Callable(cn)
662-func claimWxINTERNAL (au,at,cA) = {
663- let cD = cm(cn)
664- if ((cD == cD))
616+@Callable(cm)
617+func claimWxINTERNAL (at,as,cz) = {
618+ let cC = cl(cm)
619+ if ((cC == cC))
665620 then {
666- let aE = valueOrErrorMessage(addressFromString(at), j("claimWxINTERNAL: invalid user address"))
667- let bA = z(aY, ad(au))
668- let cP = aw(au, at)
669- let cQ = az(au)
670- let cR = ax(au, at)
671- let cS = ay(au, at)
672- let cT = E(this, cP)
673- let cy = E(this, cR)
674- let cU = E(this, cS)
675- let cV = E(this, cQ)
676- let cW = bW(au, at, bA, 0)
677- let cg = cW._1
678- let cu = cW._2
679- let bV = cW._3
680- let cz = max([(cg - cy), h])
681- if ((h >= cz))
682- then if (cA)
621+ let aD = valueOrErrorMessage(addressFromString(as), j("claimWxINTERNAL: invalid user address"))
622+ let bz = z(aX, ab(at))
623+ let cI = av(at, as)
624+ let cJ = ay(at)
625+ let cK = aw(at, as)
626+ let cL = ax(at, as)
627+ let cM = E(this, cI)
628+ let cx = E(this, cK)
629+ let cN = E(this, cL)
630+ let cO = E(this, cJ)
631+ let cP = bV(at, as, bz, 0)
632+ let cf = cP._1
633+ let ct = cP._2
634+ let bU = cP._3
635+ let cy = max([(cf - cx), h])
636+ if ((h >= cy))
637+ then if (cz)
683638 then l("nothing to claim")
684639 else $Tuple2(nil, 0)
685640 else {
686- let cX = max([q(m(invoke(ba, "claimWxBoost", [au, at], nil))[0]), 0])
687- let cY = cz
688- let cZ = min([(cY * toBigInt((bb - 1))), toBigInt(cX)])
689- let da = (cY + cZ)
690- let db = u(m(invoke(aZ, "emit", [toInt(cY)], nil))[0])
691- let dc = m(invoke(aZ, "emit", [toInt(cZ)], nil))
692- if ((dc == dc))
641+ let cQ = max([q(m(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
642+ let cR = cy
643+ let cS = min([(cR * toBigInt((ba - 1))), toBigInt(cQ)])
644+ let cT = (cR + cS)
645+ let cU = u(m(invoke(aY, "emit", [toInt(cR)], nil))[0])
646+ let cV = m(invoke(aY, "emit", [toInt(cS)], nil))
647+ if ((cV == cV))
693648 then {
694- let dd = ((cT + cY) + cZ)
695- let de = (cy + cY)
696- let df = (cU + cZ)
697- let dg = (cV + cz)
698- $Tuple2([StringEntry(cP, toString(dd)), StringEntry(cR, toString(de)), StringEntry(cS, toString(df)), StringEntry(cQ, toString(dg)), ScriptTransfer(aE, toInt(cY), db), ScriptTransfer(aE, toInt(cZ), db), aV("claim", at, au, toInt(cz), cn.transactionId)], toInt(da))
649+ let cW = ((cM + cR) + cS)
650+ let cX = (cx + cR)
651+ let cY = (cN + cS)
652+ let cZ = (cO + cy)
653+ $Tuple2([StringEntry(cI, toString(cW)), StringEntry(cK, toString(cX)), StringEntry(cL, toString(cY)), StringEntry(cJ, toString(cZ)), ScriptTransfer(aD, toInt(cR), cU), ScriptTransfer(aD, toInt(cS), cU), aU("claim", as, at, toInt(cy), cm.transactionId)], toInt(cT))
699654 }
700655 else throw("Strict value is not equal to itself.")
701656 }
705660
706661
707662
708-@Callable(cn)
709-func claimWxBulkInternalREADONLY (dh,di,at,dj) = if ((dh == size(di)))
710- then $Tuple2(nil, dj)
663+@Callable(cm)
664+func claimWxBulkInternalREADONLY (da,db,as,dc) = if ((da == size(db)))
665+ then $Tuple2(nil, dc)
711666 else {
712- let aC = di[dh]
713- let dk = split({
714- let bc = invoke(this, "claimWxREADONLY", [aC, at], nil)
715- if ($isInstanceOf(bc, "String"))
716- then bc
717- else throw(($getType(bc) + " couldn't be cast to String"))
667+ let aB = db[da]
668+ let dd = split({
669+ let bb = invoke(this, "claimWxREADONLY", [aB, as], nil)
670+ if ($isInstanceOf(bb, "String"))
671+ then bb
672+ else throw(($getType(bb) + " couldn't be cast to String"))
718673 }, f)
719- let dl = dk[3]
720- let dm = dk[4]
721- let dn = {
722- let bc = invoke(ba, "getUserVoteFinalizedREADONLY", [aC, at], nil)
723- if ($isInstanceOf(bc, "Int"))
724- then bc
725- else throw(($getType(bc) + " couldn't be cast to Int"))
674+ let de = dd[3]
675+ let df = dd[4]
676+ let dg = {
677+ let bb = invoke(aZ, "getUserVoteFinalizedREADONLY", [aB, as], nil)
678+ if ($isInstanceOf(bb, "Int"))
679+ then bb
680+ else throw(($getType(bb) + " couldn't be cast to Int"))
726681 }
727- let do = (dj :+ makeString(["%d%d%d", dl, dm, toString(dn)], f))
728- let dp = {
729- let bc = invoke(this, "claimWxBulkInternalREADONLY", [(dh + 1), di, at, do], nil)
730- if ($isInstanceOf(bc, "List[Any]"))
731- then bc
732- else throw(($getType(bc) + " couldn't be cast to List[Any]"))
682+ let dh = (dc :+ makeString(["%d%d%d", de, df, toString(dg)], f))
683+ let di = {
684+ let bb = invoke(this, "claimWxBulkInternalREADONLY", [(da + 1), db, as, dh], nil)
685+ if ($isInstanceOf(bb, "List[Any]"))
686+ then bb
687+ else throw(($getType(bb) + " couldn't be cast to List[Any]"))
733688 }
734- if ((dp == dp))
735- then $Tuple2(nil, dp)
689+ if ((di == di))
690+ then $Tuple2(nil, di)
736691 else throw("Strict value is not equal to itself.")
737692 }
738693
739694
740695
741-@Callable(cn)
742-func claimWxBulkREADONLY (di,at) = {
743- let do = invoke(this, "claimWxBulkInternalREADONLY", [0, di, at, nil], nil)
744- $Tuple2(nil, do)
696+@Callable(cm)
697+func claimWxBulkREADONLY (db,as) = {
698+ let dh = invoke(this, "claimWxBulkInternalREADONLY", [0, db, as, nil], nil)
699+ $Tuple2(nil, dh)
745700 }
746701
747702
748703
749-@Callable(cn)
750-func claimWxREADONLY (au,at) = {
751- let ca = as(at, au)
752- let bC = av(au)
753- let cP = aw(au, at)
754- let cR = ax(au, at)
755- let bv = aA(ca)
756- let bD = aA(bC)
757- let cT = E(this, cP)
758- let cy = E(this, cR)
759- let bA = z(aY, ad(au))
760- let bF = getIntegerValue(aY, ae(bA))
761- let dq = D(aZ, an())
762- let bG = D(aZ, ap())
763- let dr = if ((bG > height))
704+@Callable(cm)
705+func claimWxREADONLY (at,as) = {
706+ let bZ = ar(as, at)
707+ let bB = au(at)
708+ let cI = av(at, as)
709+ let cK = aw(at, as)
710+ let bu = az(bZ)
711+ let bC = az(bB)
712+ let cM = E(this, cI)
713+ let cx = E(this, cK)
714+ let bz = z(aX, ab(at))
715+ let bE = getIntegerValue(aX, ac(bz))
716+ let dj = D(aY, am())
717+ let bF = D(aY, ao())
718+ let dk = if ((bF > height))
764719 then 0
765- else (height - bG)
766- let ds = fraction((dq * dr), bF, g)
767- let dt = fraction(ds, bv, bD)
768- let du = bW(au, at, bA, 0)
769- let cg = du._1
770- let cu = du._2
771- let bV = du._3
772- let cz = max([(cg - cy), h])
773- let dv = m(invoke(ba, "claimWxBoostREADONLY", [au, at], nil))
774- let cX = max([q(dv[0]), 0])
775- let dw = s(dv[1])
776- let cY = cz
777- let cZ = min([(cY * toBigInt((bb - 1))), toBigInt(cX)])
778- let da = (cY + cZ)
779- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", au, at, toString(da), toString(cT), toString(cY), toString(cZ), "soon"], f))
720+ else (height - bF)
721+ let dl = fraction((dj * dk), bE, g)
722+ let dm = fraction(dl, bu, bC)
723+ let dn = bV(at, as, bz, 0)
724+ let cf = dn._1
725+ let ct = dn._2
726+ let bU = dn._3
727+ let cy = max([(cf - cx), h])
728+ let do = m(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
729+ let cQ = max([q(do[0]), 0])
730+ let dp = s(do[1])
731+ let cR = cy
732+ let cS = min([(cR * toBigInt((ba - 1))), toBigInt(cQ)])
733+ let cT = (cR + cS)
734+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cT), toString(cM), toString(cR), toString(cS), "soon"], f))
780735 }
781736
782737
783738
784-@Callable(cn)
785-func stakedByUserREADONLY (au,at) = {
786- let bv = valueOrElse(getInteger(as(at, au)), 0)
787- $Tuple2(nil, bv)
739+@Callable(cm)
740+func stakedByUserREADONLY (at,as) = {
741+ let bu = valueOrElse(getInteger(ar(as, at)), 0)
742+ $Tuple2(nil, bu)
788743 }
789744
790745
791746
792-@Callable(cn)
793-func stakedTotalREADONLY (au) = {
794- let bD = valueOrElse(getInteger(av(au)), 0)
795- $Tuple2(nil, bD)
747+@Callable(cm)
748+func stakedTotalREADONLY (at) = {
749+ let bC = valueOrElse(getInteger(au(at)), 0)
750+ $Tuple2(nil, bC)
796751 }
797752
798753
799754
800-@Callable(cn)
801-func usersListTraversal (aC) = {
802- let cD = if ((toBase58String(cn.caller.bytes) == valueOrElse(getString(this, N()), "")))
755+@Callable(cm)
756+func usersListTraversal (aB) = {
757+ let cC = if ((toBase58String(cm.caller.bytes) == valueOrElse(getString(this, N()), "")))
803758 then true
804- else co(cn)
805- if ((cD == cD))
759+ else cn(cm)
760+ if ((cC == cC))
806761 then {
807- let bh = bf(aC)
808- let dx = getString(be(aC))
809- let bn = getString(bg(bh))
810- let o = dx
762+ let bg = be(aB)
763+ let dq = getString(bd(aB))
764+ let bm = getString(bf(bg))
765+ let o = dq
811766 if ($isInstanceOf(o, "Unit"))
812767 then {
813- let dy = bn
814- if ($isInstanceOf(dy, "Unit"))
768+ let dr = bm
769+ if ($isInstanceOf(dr, "Unit"))
815770 then $Tuple2(nil, false)
816- else if ($isInstanceOf(dy, "String"))
771+ else if ($isInstanceOf(dr, "String"))
817772 then {
818- let dz = dy
819- $Tuple2([StringEntry(be(aC), dz)], true)
773+ let ds = dr
774+ $Tuple2([StringEntry(bd(aB), ds)], true)
820775 }
821776 else throw("Match error")
822777 }
823778 else if ($isInstanceOf(o, "String"))
824779 then {
825- let aE = o
826- let cy = E(this, ax(aC, aE))
827- let cr = z(aY, ad(aC))
828- let cg = bW(aC, aE, cr, 0)._1
829- let cz = (cg - cy)
830- let cA = true
831- let cB = if ((cz > h))
832- then invoke(this, "claimWxINTERNAL", [aC, aE, cA], nil)
780+ let aD = o
781+ let cx = E(this, aw(aB, aD))
782+ let cq = z(aX, ab(aB))
783+ let cf = bV(aB, aD, cq, 0)._1
784+ let cy = (cf - cx)
785+ let cz = true
786+ let cA = if ((cy > h))
787+ then invoke(this, "claimWxINTERNAL", [aB, aD, cz], nil)
833788 else unit
834- if ((cB == cB))
789+ if ((cA == cA))
835790 then {
836- let dA = getString(bl(bh, aE))
837- let dy = dA
838- if ($isInstanceOf(dy, "Unit"))
839- then $Tuple2([DeleteEntry(be(aC))], false)
840- else if ($isInstanceOf(dy, "String"))
791+ let dt = getString(bk(bg, aD))
792+ let dr = dt
793+ if ($isInstanceOf(dr, "Unit"))
794+ then $Tuple2([DeleteEntry(bd(aB))], false)
795+ else if ($isInstanceOf(dr, "String"))
841796 then {
842- let dB = dy
843- $Tuple2([StringEntry(be(aC), dB)], true)
797+ let du = dr
798+ $Tuple2([StringEntry(bd(aB), du)], true)
844799 }
845800 else throw("Match error")
846801 }
853808
854809
855810
856-@Callable(cn)
857-func onModifyWeight (au,bA) = if ((cn.caller != aY))
811+@Callable(cm)
812+func onModifyWeight (at,bz) = if ((cm.caller != aX))
858813 then l("permissions denied")
859814 else {
860- let dC = bz(au, bA, 0)
861- let bx = dC._1
862- let bY = dC._2
863- let bZ = dC._3
864- bY
815+ let dv = by(at, bz, 0)
816+ let bw = dv._1
817+ let bX = dv._2
818+ let bY = dv._3
819+ bX
865820 }
866821
867822
868-@Verifier(dD)
869-func dE () = {
870- let dF = {
871- let o = cj()
823+@Verifier(dw)
824+func dx () = {
825+ let dy = {
826+ let o = ci()
872827 if ($isInstanceOf(o, "ByteVector"))
873828 then {
874- let cp = o
875- cp
829+ let co = o
830+ co
876831 }
877832 else if ($isInstanceOf(o, "Unit"))
878- then dD.senderPublicKey
833+ then dw.senderPublicKey
879834 else throw("Match error")
880835 }
881- sigVerify(dD.bodyBytes, dD.proofs[0], dF)
836+ sigVerify(dw.bodyBytes, dw.proofs[0], dy)
882837 }
883838
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 1000
77
88 let c = 100000000
99
1010 let d = 18
1111
1212 let e = toBigInt(1000000000000000000)
1313
1414 let f = "__"
1515
1616 let g = c
1717
1818 let h = toBigInt(0)
1919
2020 let i = toBigInt(1)
2121
2222 func j (k) = makeString(["staking.ride:", toString(this), k], " ")
2323
2424
2525 func l (k) = throw(j(k))
2626
2727
2828 func m (n) = {
2929 let o = n
3030 if ($isInstanceOf(o, "List[Any]"))
3131 then {
3232 let p = o
3333 p
3434 }
3535 else l("fail to cast into List[Any]")
3636 }
3737
3838
3939 func q (n) = {
4040 let o = n
4141 if ($isInstanceOf(o, "Int"))
4242 then {
4343 let r = o
4444 r
4545 }
4646 else l("fail to cast into Int")
4747 }
4848
4949
5050 func s (n) = {
5151 let o = n
5252 if ($isInstanceOf(o, "String"))
5353 then {
5454 let t = o
5555 t
5656 }
5757 else l("fail to cast into Int")
5858 }
5959
6060
6161 func u (n) = {
6262 let o = n
6363 if ($isInstanceOf(o, "ByteVector"))
6464 then {
6565 let v = o
6666 v
6767 }
6868 else l("fail to cast into Int")
6969 }
7070
7171
7272 func w (x,y) = valueOrErrorMessage(getString(x, y), j((("mandatory this." + y) + " is not defined")))
7373
7474
7575 func z (x,y) = valueOrErrorMessage(getString(x, y), j((((("mandatory " + toString(x)) + ".") + y) + " is not defined")))
7676
7777
7878 func A (x,y) = valueOrElse(getInteger(x, y), 0)
7979
8080
8181 func B (x,y,C) = valueOrElse(getInteger(x, y), C)
8282
8383
8484 func D (x,y) = valueOrErrorMessage(getInteger(x, y), j((("mandatory this." + y) + " is not defined")))
8585
8686
8787 func E (x,y) = value(parseBigInt(valueOrElse(getString(x, y), "0")))
8888
8989
9090 func F (x,y,C) = {
9191 let o = getString(x, y)
9292 if ($isInstanceOf(o, "String"))
9393 then {
9494 let G = o
9595 value(parseBigInt(G))
9696 }
9797 else if ($isInstanceOf(o, "Unit"))
9898 then C
9999 else throw("Match error")
100100 }
101101
102102
103103 func H (I,J) = fraction(toBigInt(I), e, toBigInt(J))
104104
105105
106106 func K (n,L) = toInt(fraction(n, toBigInt(L), e))
107107
108108
109109 func M () = "%s%s__config__factoryAddress"
110110
111111
112112 func N () = "%s__votingEmissionContract"
113113
114114
115115 let O = 1
116116
117117 let P = 2
118118
119119 let Q = 3
120120
121121 let R = 4
122122
123123 let S = 5
124124
125125 let T = 6
126126
127127 let U = 7
128128
129129 func V () = "%s__factoryConfig"
130130
131131
132132 func W () = "%s__managerPublicKey"
133133
134134
135-func X () = "%s__pendingManagerPublicKey"
135+func X () = "%s__managerVaultAddress"
136136
137137
138-func Y () = "%s__stablePoolAddonAddr"
138+func Y (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
139139
140140
141-func Z () = "%s__addonAddr"
141+func aa () = "%s__lpTokensList"
142142
143143
144-func aa (ab) = makeString(["%s%s%s", ab, "mappings__lpAsset2PoolContract"], f)
144+func ab (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
145145
146146
147-func ac () = "%s__lpTokensList"
147+func ac (ad) = makeString(["%s%s", "poolWeight", ad], f)
148148
149149
150-func ad (ab) = makeString(["%s%s%s", ab, "mappings__lpAsset2PoolContract"], f)
150+func ae (af) = split(valueOrElse(getString(af, aa()), ""), f)
151151
152152
153-func ae (af) = makeString(["%s%s", "poolWeight", af], f)
153+func ag (af) = split(z(af, V()), f)
154154
155155
156-func ag (ah) = split(valueOrElse(getString(ah, ac()), ""), f)
156+func ah (ai) = addressFromStringValue(ai[P])
157157
158158
159-func ai (ah) = split(z(ah, V()), f)
159+func aj (ai) = addressFromStringValue(ai[S])
160160
161161
162-func aj (ak) = addressFromStringValue(ak[P])
162+func ak (ai) = addressFromStringValue(ai[O])
163163
164164
165-func al (ak) = addressFromStringValue(ak[S])
166-
167-
168-func am (ak) = addressFromStringValue(ak[O])
169-
170-
171-func an () = "%s%s__ratePerBlock__current"
172-
173-
174-func ao () = "%s%s__ratePerBlockMax__current"
175-
176-
177-func ap () = "%s%s__emission__startBlock"
178-
179-
180-func aq () = "%s%s__emission__duration"
181-
182-
183-func ar () = "%s%s__emission__endBlock"
184-
185-
186-func as (at,au) = makeString(["%s%s%s__staked", at, au], f)
187-
188-
189-func av (au) = ("%s%s%s__staked__total__" + au)
190-
191-
192-func aw (au,at) = makeString(["%s%s%s__claimed", at, au], f)
193-
194-
195-func ax (au,at) = makeString(["%s%s%s__claimedMinReward", at, au], f)
196-
197-
198-func ay (au,at) = makeString(["%s%s%s__claimedBoostReward", at, au], f)
199-
200-
201-func az (au) = makeString(["%s%s%s__claimed__total", au], f)
202-
203-
204-func aA (y) = valueOrElse(getInteger(this, y), 0)
205-
206-
207-func aB (aC) = makeString(["%s%s%s", aC, "total", "bal"], f)
208-
209-
210-func aD (aC,aE) = makeString(["%s%s%s", aC, aE, "bal"], f)
211-
212-
213-func aF (aC) = makeString(["%s%s%s", aC, "total", "balINT"], f)
214-
215-
216-func aG (aC,aE) = makeString(["%s%s%s", aC, aE, "balINT"], f)
217-
218-
219-func aH (aC) = makeString(["%s%s%s", aC, "total", "lastUpd"], f)
220-
221-
222-func aI (aC,aE) = makeString(["%s%s%s", aC, aE, "lastUpd"], f)
223-
224-
225-func aJ (aC) = makeString(["%s%s%s%s", aC, "common", "lpInt"], f)
226-
227-
228-func aK (aC) = makeString(["%s%s%s%s", aC, "common", "lpIntH"], f)
229-
230-
231-func aL (aC,aE) = makeString(["%s%s%s%s", aC, aE, "lpInt"], f)
232-
233-
234-func aM (aC,aE) = makeString(["%s%s%s%s", aC, aE, "lpIntH"], f)
235-
236-
237-func aN (aC) = makeString(["%s", aC, "wxPerLp"], f)
238-
239-
240-func aO (aC) = makeString(["%s", aC, "wxPerLpX18"], f)
241-
242-
243-func aP (aC,aE) = makeString(["%s%s%s%s", aC, aE, "uIntL"], f)
244-
245-
246-func aQ (aR,aE,aS) = makeString(["%s%s%s%s__history", aR, aE, aS], f)
247-
248-
249-func aT (aE,aC,aR,aU) = makeString(["%s%s%s%d%d%d", aE, aC, aR, toString(height), toString(lastBlock.timestamp), toString(aU)], f)
250-
251-
252-func aV (aR,aE,aC,aU,aW) = StringEntry(aQ(aR, aE, toBase58String(aW)), aT(aE, aC, aR, aU))
253-
254-
255-let aX = w(this, M())
256-
257-let aY = addressFromStringValue(aX)
258-
259-let ak = ai(aY)
260-
261-let aZ = al(ak)
262-
263-let ba = aj(ak)
264-
265-let bb = {
266- let bc = invoke(aZ, "getBoostCoeffREADONLY", nil, nil)
267- if ($isInstanceOf(bc, "Int"))
268- then bc
269- else throw(($getType(bc) + " couldn't be cast to Int"))
270- }
271-
272-let bd = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], f)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
273-
274-func be (aC) = makeString(["%s%s", aC, "nextUser"], f)
275-
276-
277-func bf (aC) = makeString(["users", aC], f)
278-
279-
280-func bg (bh) = makeString(["%s%s%s", bh, "head"], f)
281-
282-
283-func bi (bh) = makeString(["%s%s%s", bh, "size"], f)
284-
285-
286-func bj (bh,bk) = makeString(["%s%s%s%s", bh, bk, "prev"], f)
287-
288-
289-func bl (bh,bk) = makeString(["%s%s%s%s", bh, bk, "next"], f)
290-
291-
292-func bm (bh,bk) = {
293- let bn = getString(this, bg(bh))
294- let bo = getString(this, bj(bh, bk))
295- let bp = getString(this, bl(bh, bk))
296- if (if ((bk == valueOrElse(bn, "")))
297- then true
298- else (bo != unit))
299- then true
300- else (bp != unit)
165+func al () = {
166+ let o = getString(X())
167+ if ($isInstanceOf(o, "String"))
168+ then {
169+ let G = o
170+ addressFromStringValue(G)
171+ }
172+ else this
301173 }
302174
303175
304-func bq (bh,bk) = {
305- let bn = getString(this, bg(bh))
306- let br = valueOrElse(getInteger(this, bi(bh)), 0)
307- let bs = if (!(bm(bh, bk)))
176+func am () = "%s%s__ratePerBlock__current"
177+
178+
179+func an () = "%s%s__ratePerBlockMax__current"
180+
181+
182+func ao () = "%s%s__emission__startBlock"
183+
184+
185+func ap () = "%s%s__emission__duration"
186+
187+
188+func aq () = "%s%s__emission__endBlock"
189+
190+
191+func ar (as,at) = makeString(["%s%s%s__staked", as, at], f)
192+
193+
194+func au (at) = ("%s%s%s__staked__total__" + at)
195+
196+
197+func av (at,as) = makeString(["%s%s%s__claimed", as, at], f)
198+
199+
200+func aw (at,as) = makeString(["%s%s%s__claimedMinReward", as, at], f)
201+
202+
203+func ax (at,as) = makeString(["%s%s%s__claimedBoostReward", as, at], f)
204+
205+
206+func ay (at) = makeString(["%s%s%s__claimed__total", at], f)
207+
208+
209+func az (y) = valueOrElse(getInteger(this, y), 0)
210+
211+
212+func aA (aB) = makeString(["%s%s%s", aB, "total", "bal"], f)
213+
214+
215+func aC (aB,aD) = makeString(["%s%s%s", aB, aD, "bal"], f)
216+
217+
218+func aE (aB) = makeString(["%s%s%s", aB, "total", "balINT"], f)
219+
220+
221+func aF (aB,aD) = makeString(["%s%s%s", aB, aD, "balINT"], f)
222+
223+
224+func aG (aB) = makeString(["%s%s%s", aB, "total", "lastUpd"], f)
225+
226+
227+func aH (aB,aD) = makeString(["%s%s%s", aB, aD, "lastUpd"], f)
228+
229+
230+func aI (aB) = makeString(["%s%s%s%s", aB, "common", "lpInt"], f)
231+
232+
233+func aJ (aB) = makeString(["%s%s%s%s", aB, "common", "lpIntH"], f)
234+
235+
236+func aK (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpInt"], f)
237+
238+
239+func aL (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpIntH"], f)
240+
241+
242+func aM (aB) = makeString(["%s", aB, "wxPerLp"], f)
243+
244+
245+func aN (aB) = makeString(["%s", aB, "wxPerLpX18"], f)
246+
247+
248+func aO (aB,aD) = makeString(["%s%s%s%s", aB, aD, "uIntL"], f)
249+
250+
251+func aP (aQ,aD,aR) = makeString(["%s%s%s%s__history", aQ, aD, aR], f)
252+
253+
254+func aS (aD,aB,aQ,aT) = makeString(["%s%s%s%d%d%d", aD, aB, aQ, toString(height), toString(lastBlock.timestamp), toString(aT)], f)
255+
256+
257+func aU (aQ,aD,aB,aT,aV) = StringEntry(aP(aQ, aD, toBase58String(aV)), aS(aD, aB, aQ, aT))
258+
259+
260+let aW = w(this, M())
261+
262+let aX = addressFromStringValue(aW)
263+
264+let ai = ag(aX)
265+
266+let aY = aj(ai)
267+
268+let aZ = ah(ai)
269+
270+let ba = {
271+ let bb = invoke(aY, "getBoostCoeffREADONLY", nil, nil)
272+ if ($isInstanceOf(bb, "Int"))
273+ then bb
274+ else throw(($getType(bb) + " couldn't be cast to Int"))
275+ }
276+
277+let bc = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], f)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
278+
279+func bd (aB) = makeString(["%s%s", aB, "nextUser"], f)
280+
281+
282+func be (aB) = makeString(["users", aB], f)
283+
284+
285+func bf (bg) = makeString(["%s%s%s", bg, "head"], f)
286+
287+
288+func bh (bg) = makeString(["%s%s%s", bg, "size"], f)
289+
290+
291+func bi (bg,bj) = makeString(["%s%s%s%s", bg, bj, "prev"], f)
292+
293+
294+func bk (bg,bj) = makeString(["%s%s%s%s", bg, bj, "next"], f)
295+
296+
297+func bl (bg,bj) = {
298+ let bm = getString(this, bf(bg))
299+ let bn = getString(this, bi(bg, bj))
300+ let bo = getString(this, bk(bg, bj))
301+ if (if ((bj == valueOrElse(bm, "")))
302+ then true
303+ else (bn != unit))
304+ then true
305+ else (bo != unit)
306+ }
307+
308+
309+func bp (bg,bj) = {
310+ let bm = getString(this, bf(bg))
311+ let bq = valueOrElse(getInteger(this, bh(bg)), 0)
312+ let br = if (!(bl(bg, bj)))
308313 then true
309314 else l("Node exists")
310- if ((bs == bs))
311- then (([IntegerEntry(bi(bh), (br + 1))] ++ (if ((bn != unit))
312- then [StringEntry(bl(bh, bk), value(bn)), StringEntry(bj(bh, value(bn)), bk)]
313- else nil)) ++ [StringEntry(bg(bh), bk)])
315+ if ((br == br))
316+ then (([IntegerEntry(bh(bg), (bq + 1))] ++ (if ((bm != unit))
317+ then [StringEntry(bk(bg, bj), value(bm)), StringEntry(bi(bg, value(bm)), bj)]
318+ else nil)) ++ [StringEntry(bf(bg), bj)])
314319 else throw("Strict value is not equal to itself.")
315320 }
316321
317322
318-func bt (bh,bk) = {
319- let bn = getString(this, bg(bh))
320- let br = valueOrElse(getInteger(this, bi(bh)), 0)
321- let bo = getString(this, bj(bh, bk))
322- let bp = getString(this, bl(bh, bk))
323- ([IntegerEntry(bi(bh), (br - 1))] ++ (if (if ((bo != unit))
324- then (bp != unit)
323+func bs (bg,bj) = {
324+ let bm = getString(this, bf(bg))
325+ let bq = valueOrElse(getInteger(this, bh(bg)), 0)
326+ let bn = getString(this, bi(bg, bj))
327+ let bo = getString(this, bk(bg, bj))
328+ ([IntegerEntry(bh(bg), (bq - 1))] ++ (if (if ((bn != unit))
329+ then (bo != unit)
325330 else false)
326- then [StringEntry(bl(bh, value(bo)), value(bp)), StringEntry(bj(bh, value(bp)), value(bo)), DeleteEntry(bj(bh, bk)), DeleteEntry(bl(bh, bk))]
327- else if ((bp != unit))
328- then [StringEntry(bg(bh), value(bp)), DeleteEntry(bl(bh, bk)), DeleteEntry(bj(bh, value(bp)))]
329- else if ((bo != unit))
330- then [DeleteEntry(bj(bh, bk)), DeleteEntry(bl(bh, value(bo)))]
331- else if ((bk == valueOrElse(bn, "")))
332- then [DeleteEntry(bg(bh))]
333- else l(((("invalid node: " + bh) + ".") + bk))))
331+ then [StringEntry(bk(bg, value(bn)), value(bo)), StringEntry(bi(bg, value(bo)), value(bn)), DeleteEntry(bi(bg, bj)), DeleteEntry(bk(bg, bj))]
332+ else if ((bo != unit))
333+ then [StringEntry(bf(bg), value(bo)), DeleteEntry(bk(bg, bj)), DeleteEntry(bi(bg, value(bo)))]
334+ else if ((bn != unit))
335+ then [DeleteEntry(bi(bg, bj)), DeleteEntry(bk(bg, value(bn)))]
336+ else if ((bj == valueOrElse(bm, "")))
337+ then [DeleteEntry(bf(bg))]
338+ else l(((("invalid node: " + bg) + ".") + bj))))
334339 }
335340
336341
337-func bu (bv,bw,bx,by) = if (if ((bw == h))
338- then (bv > h)
342+func bt (bu,bv,bw,bx) = if (if ((bv == h))
343+ then (bu > h)
339344 else false)
340345 then h
341- else if ((bv == h))
342- then bx
343- else if (if ((bw > h))
344- then (bv > h)
346+ else if ((bu == h))
347+ then bw
348+ else if (if ((bv > h))
349+ then (bu > h)
345350 else false)
346- then value(parseBigInt(w(this, by)))
351+ then value(parseBigInt(w(this, bx)))
347352 else l("calcWxPerLpIntegralUserLast: unexpected state")
348353
349354
350-func bz (au,bA,bB) = {
351- let bC = av(au)
352- let bD = toBigInt(aA(bC))
353- let bE = if ((bD == h))
355+func by (at,bz,bA) = {
356+ let bB = au(at)
357+ let bC = toBigInt(az(bB))
358+ let bD = if ((bC == h))
354359 then i
355- else bD
356- let bF = getIntegerValue(aY, ae(bA))
357- let bG = D(aZ, ap())
358- let bH = (D(aZ, an()) * b)
359- let bI = fraction(bH, bF, (g * bb))
360- let bJ = aJ(au)
361- let bK = aK(au)
362- let bL = aN(au)
363- let bM = B(this, bK, bG)
364- let bN = E(this, bJ)
365- let bO = 0
366- let bP = max([(height - bM), 0])
367- let bQ = if ((bO != 0))
368- then toBigInt(bO)
369- else fraction(toBigInt(bI), toBigInt(c), bE)
370- let bR = (bD + toBigInt(bB))
371- let bS = if ((bR == h))
360+ else bC
361+ let bE = getIntegerValue(aX, ac(bz))
362+ let bF = D(aY, ao())
363+ let bG = (D(aY, am()) * b)
364+ let bH = fraction(bG, bE, (g * ba))
365+ let bI = aI(at)
366+ let bJ = aJ(at)
367+ let bK = aM(at)
368+ let bL = B(this, bJ, bF)
369+ let bM = E(this, bI)
370+ let bN = 0
371+ let bO = max([(height - bL), 0])
372+ let bP = if ((bN != 0))
373+ then toBigInt(bN)
374+ else fraction(toBigInt(bH), toBigInt(c), bD)
375+ let bQ = (bC + toBigInt(bA))
376+ let bR = if ((bQ == h))
372377 then i
373- else bR
374- let bx = (bN + (bQ * toBigInt(bP)))
375- let bT = (toBigInt(bI) / bS)
376- let bU = height
377- let bV = makeString([toString(bx), toString(bP), toString(bQ), toString(bD), toString(bI), toString(bH), toString(bF)], "::")
378- $Tuple3(bx, [StringEntry(bJ, toString(bx)), IntegerEntry(bK, bU), StringEntry(bL, toString(bT))], bV)
378+ else bQ
379+ let bw = (bM + (bP * toBigInt(bO)))
380+ let bS = (toBigInt(bH) / bR)
381+ let bT = height
382+ let bU = makeString([toString(bw), toString(bO), toString(bP), toString(bC), toString(bH), toString(bG), toString(bE)], "::")
383+ $Tuple3(bw, [StringEntry(bI, toString(bw)), IntegerEntry(bJ, bT), StringEntry(bK, toString(bS))], bU)
379384 }
380385
381386
382-func bW (au,at,bA,bB) = {
383- let bX = bz(au, bA, bB)
384- let bx = bX._1
385- let bY = bX._2
386- let bZ = bX._3
387- let ca = as(at, au)
388- let bv = aA(ca)
389- let cb = aL(au, at)
390- let cc = aM(au, at)
391- let by = aP(au, at)
392- let cd = E(this, cb)
393- let bw = A(this, cc)
394- let ce = bu(toBigInt(bv), toBigInt(bw), bx, by)
395- let cf = (c * b)
396- let cg = max([(cd + fraction((bx - ce), toBigInt(bv), toBigInt(cf))), h])
397- let ch = bx
398- let ci = height
399- let bV = makeString([toString(cd), toString(ce), toString(bv), bZ, toString(height)], "::")
400- $Tuple3(cg, (bY ++ [StringEntry(cb, toString(cg)), IntegerEntry(cc, ci), StringEntry(by, toString(ch))]), bV)
387+func bV (at,as,bz,bA) = {
388+ let bW = by(at, bz, bA)
389+ let bw = bW._1
390+ let bX = bW._2
391+ let bY = bW._3
392+ let bZ = ar(as, at)
393+ let bu = az(bZ)
394+ let ca = aK(at, as)
395+ let cb = aL(at, as)
396+ let bx = aO(at, as)
397+ let cc = E(this, ca)
398+ let bv = A(this, cb)
399+ let cd = bt(toBigInt(bu), toBigInt(bv), bw, bx)
400+ let ce = (c * b)
401+ let cf = max([(cc + fraction((bw - cd), toBigInt(bu), toBigInt(ce))), h])
402+ let cg = bw
403+ let ch = height
404+ let bU = makeString([toString(cc), toString(cd), toString(bu), bY, toString(height)], "::")
405+ $Tuple3(cf, (bX ++ [StringEntry(ca, toString(cf)), IntegerEntry(cb, ch), StringEntry(bx, toString(cg))]), bU)
401406 }
402407
403408
404-func cj () = {
405- let o = getString(W())
409+func ci () = {
410+ let cj = al()
411+ let o = getString(cj, W())
406412 if ($isInstanceOf(o, "String"))
407413 then {
408414 let G = o
409415 fromBase58String(G)
410416 }
411417 else if ($isInstanceOf(o, "Unit"))
412418 then unit
413419 else throw("Match error")
414420 }
415421
416422
417-func ck () = {
418- let o = getString(X())
419- if ($isInstanceOf(o, "String"))
423+let ck = l("Permission denied")
424+
425+func cl (cm) = if ((cm.caller == this))
426+ then true
427+ else ck
428+
429+
430+func cn (cm) = {
431+ let o = ci()
432+ if ($isInstanceOf(o, "ByteVector"))
420433 then {
421- let G = o
422- fromBase58String(G)
434+ let co = o
435+ if ((cm.callerPublicKey == co))
436+ then true
437+ else ck
423438 }
424439 else if ($isInstanceOf(o, "Unit"))
425- then unit
440+ then if ((cm.caller == this))
441+ then true
442+ else ck
426443 else throw("Match error")
427444 }
428445
429446
430-let cl = l("Permission denied")
431-
432-func cm (cn) = if ((cn.caller == this))
433- then true
434- else cl
435-
436-
437-func co (cn) = {
438- let o = cj()
439- if ($isInstanceOf(o, "ByteVector"))
447+func cp (cm,aB,cq,aD,aT) = {
448+ let as = toString(aD)
449+ let at = toBase58String(aB)
450+ let bz = toString(cq)
451+ let bZ = ar(as, at)
452+ let bB = au(at)
453+ let bu = az(bZ)
454+ let cr = if ((bu == 0))
455+ then invoke(aZ, "onStakedVoteUpdate", [at, as, true], nil)
456+ else unit
457+ if ((cr == cr))
440458 then {
441- let cp = o
442- if ((cn.callerPublicKey == cp))
443- then true
444- else cl
445- }
446- else if ($isInstanceOf(o, "Unit"))
447- then if ((cn.caller == this))
448- then true
449- else cl
450- else throw("Match error")
451- }
452-
453-
454-func cq (cn,aC,cr,aE,aU) = {
455- let at = toString(aE)
456- let au = toBase58String(aC)
457- let bA = toString(cr)
458- let ca = as(at, au)
459- let bC = av(au)
460- let bv = aA(ca)
461- let cs = if ((bv == 0))
462- then invoke(ba, "onStakedVoteUpdate", [au, at, true], nil)
463- else unit
464- if ((cs == cs))
465- then {
466- let bD = aA(bC)
467- let ct = bW(au, at, bA, aU)
468- let cg = ct._1
469- let cu = ct._2
470- let bV = ct._3
471- let bh = bf(au)
472- let cv = if (bm(bh, at))
459+ let bC = az(bB)
460+ let cs = bV(at, as, bz, aT)
461+ let cf = cs._1
462+ let ct = cs._2
463+ let bU = cs._3
464+ let bg = be(at)
465+ let cu = if (bl(bg, as))
473466 then nil
474- else bq(bh, at)
475- (([IntegerEntry(ca, (bv + aU)), IntegerEntry(bC, (bD + aU)), aV("stake", at, au, aU, cn.transactionId)] ++ cu) ++ cv)
467+ else bp(bg, as)
468+ (([IntegerEntry(bZ, (bu + aT)), IntegerEntry(bB, (bC + aT)), aU("stake", as, at, aT, cm.transactionId)] ++ ct) ++ cu)
476469 }
477470 else throw("Strict value is not equal to itself.")
478471 }
479472
480473
481-func cw (cn,aC,cr,aE,cx,aU) = {
482- let at = toString(aE)
483- let au = toBase58String(aC)
484- let bA = toString(cr)
485- let ca = as(at, au)
486- let bC = av(au)
487- let bv = aA(ca)
488- let bD = aA(bC)
489- let cu = bW(au, at, bA, -(aU))._2
490- let bh = bf(au)
491- let cv = if (if (bm(bh, at))
492- then (aU == bv)
474+func cv (cm,aB,cq,aD,cw,aT) = {
475+ let as = toString(aD)
476+ let at = toBase58String(aB)
477+ let bz = toString(cq)
478+ let bZ = ar(as, at)
479+ let bB = au(at)
480+ let bu = az(bZ)
481+ let bC = az(bB)
482+ let ct = bV(at, as, bz, -(aT))._2
483+ let bg = be(at)
484+ let cu = if (if (bl(bg, as))
485+ then (aT == bu)
493486 else false)
494- then bt(bh, at)
487+ then bs(bg, as)
495488 else nil
496- let cs = if ((aU == bv))
497- then invoke(ba, "onStakedVoteUpdate", [au, at, false], nil)
489+ let cr = if ((aT == bu))
490+ then invoke(aZ, "onStakedVoteUpdate", [at, as, false], nil)
498491 else unit
499- if ((cs == cs))
492+ if ((cr == cr))
500493 then {
501- let cy = E(this, ax(au, at))
502- let cg = bW(au, at, bA, 0)._1
503- let cz = (cg - cy)
504- let cA = true
505- let cB = if ((cz > h))
506- then invoke(this, "claimWxINTERNAL", [au, at, cA], nil)
494+ let cx = E(this, aw(at, as))
495+ let cf = bV(at, as, bz, 0)._1
496+ let cy = (cf - cx)
497+ let cz = true
498+ let cA = if ((cy > h))
499+ then invoke(this, "claimWxINTERNAL", [at, as, cz], nil)
507500 else unit
508- if ((cB == cB))
509- then if ((aU > bv))
510- then l(((((((("passed amount=" + toString(aU)) + " is greater than available=") + toString(bv)) + ". lpAssetId=") + au) + ". stakedByUserKEY=") + ca))
511- else (([IntegerEntry(ca, (bv - aU)), IntegerEntry(bC, (bD - aU)), ScriptTransfer(cx, aU, aC), aV("unstake", at, au, aU, cn.transactionId)] ++ cu) ++ cv)
501+ if ((cA == cA))
502+ then if ((aT > bu))
503+ then l(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bu)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bZ))
504+ else (([IntegerEntry(bZ, (bu - aT)), IntegerEntry(bB, (bC - aT)), ScriptTransfer(cw, aT, aB), aU("unstake", as, at, aT, cm.transactionId)] ++ ct) ++ cu)
512505 else throw("Strict value is not equal to itself.")
513506 }
514507 else throw("Strict value is not equal to itself.")
515508 }
516509
517510
518-@Callable(cn)
519-func constructor (cC) = {
520- let cD = co(cn)
521- if ((cD == cD))
522- then [StringEntry(M(), cC)]
511+@Callable(cm)
512+func constructor (cB) = {
513+ let cC = cn(cm)
514+ if ((cC == cC))
515+ then [StringEntry(M(), cB)]
523516 else throw("Strict value is not equal to itself.")
524517 }
525518
526519
527520
528-@Callable(cn)
529-func constructorV2 (cE) = {
530- let cF = [co(cn), if ((addressFromString(cE) != unit))
521+@Callable(cm)
522+func constructorV2 (cD) = {
523+ let cE = [cn(cm), if ((addressFromString(cD) != unit))
531524 then true
532525 else "invalid voting emission contract address"]
533- if ((cF == cF))
534- then [StringEntry(N(), cE)]
526+ if ((cE == cE))
527+ then [StringEntry(N(), cD)]
535528 else throw("Strict value is not equal to itself.")
536529 }
537530
538531
539532
540-@Callable(cn)
541-func setManager (cG) = {
542- let cD = co(cn)
543- if ((cD == cD))
544- then {
545- let cH = fromBase58String(cG)
546- if ((cH == cH))
547- then [StringEntry(X(), cG)]
548- else throw("Strict value is not equal to itself.")
549- }
533+@Callable(cm)
534+func stake () = if ((size(cm.payments) != 1))
535+ then l("invalid payment - exact one payment must be attached")
536+ else {
537+ let cF = cm.payments[0]
538+ let aB = value(cF.assetId)
539+ let at = toBase58String(aB)
540+ let aT = cF.amount
541+ let bz = valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at)))
542+ let cq = addressFromStringValue(bz)
543+ let aD = if ((cm.caller == cq))
544+ then cm.originCaller
545+ else cm.caller
546+ cp(cm, aB, cq, aD, aT)
547+ }
548+
549+
550+
551+@Callable(cm)
552+func stakeFor (as) = if ((size(cm.payments) != 1))
553+ then l("invalid payment - exact one payment must be attached")
554+ else {
555+ let cF = cm.payments[0]
556+ let aB = value(cF.assetId)
557+ let at = toBase58String(aB)
558+ let aT = cF.amount
559+ let bz = valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at)))
560+ let cq = addressFromStringValue(bz)
561+ let aD = valueOrErrorMessage(addressFromString(as), j("invalid user address"))
562+ cp(cm, aB, cq, aD, aT)
563+ }
564+
565+
566+
567+@Callable(cm)
568+func unstake (at,aT) = {
569+ let aB = fromBase58String(at)
570+ let bz = valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at)))
571+ let cq = addressFromStringValue(bz)
572+ let cG = toString(cm.caller)
573+ let aD = if ((cG == bz))
574+ then cm.originCaller
575+ else cm.caller
576+ let cw = cm.caller
577+ cv(cm, aB, cq, aD, cw, aT)
578+ }
579+
580+
581+
582+@Callable(cm)
583+func unstakeINTERNAL (aB,aT,aD,cw) = {
584+ let at = toBase58String(aB)
585+ let cq = addressFromStringValue(valueOrErrorMessage(getString(aX, Y(at)), j(("unsupported lp asset " + at))))
586+ let cC = if ((cm.caller == cq))
587+ then true
588+ else ck
589+ if ((cC == cC))
590+ then cv(cm, aB, cq, Address(aD), Address(cw), aT)
550591 else throw("Strict value is not equal to itself.")
551592 }
552593
553594
554595
555-@Callable(cn)
556-func confirmManager () = {
557- let cI = ck()
558- let cJ = if (isDefined(cI))
559- then true
560- else l("No pending manager")
561- if ((cJ == cJ))
562- then {
563- let cK = if ((cn.callerPublicKey == value(cI)))
564- then true
565- else l("You are not pending manager")
566- if ((cK == cK))
567- then [StringEntry(W(), toBase58String(value(cI))), DeleteEntry(X())]
568- else throw("Strict value is not equal to itself.")
569- }
570- else throw("Strict value is not equal to itself.")
596+@Callable(cm)
597+func claimWx (at) = {
598+ let as = toString(cm.caller)
599+ let cz = true
600+ let cH = invoke(this, "claimWxINTERNAL", [at, as, cz], nil)
601+ $Tuple2(nil, cH)
571602 }
572603
573604
574605
575-@Callable(cn)
576-func stake () = if ((size(cn.payments) != 1))
577- then l("invalid payment - exact one payment must be attached")
578- else {
579- let cL = cn.payments[0]
580- let aC = value(cL.assetId)
581- let au = toBase58String(aC)
582- let aU = cL.amount
583- let bA = valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au)))
584- let cr = addressFromStringValue(bA)
585- let aE = if ((cn.caller == cr))
586- then cn.originCaller
587- else cn.caller
588- cq(cn, aC, cr, aE, aU)
589- }
590-
591-
592-
593-@Callable(cn)
594-func stakeFor (at) = if ((size(cn.payments) != 1))
595- then l("invalid payment - exact one payment must be attached")
596- else {
597- let cL = cn.payments[0]
598- let aC = value(cL.assetId)
599- let au = toBase58String(aC)
600- let aU = cL.amount
601- let bA = valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au)))
602- let cr = addressFromStringValue(bA)
603- let aE = valueOrErrorMessage(addressFromString(at), j("invalid user address"))
604- cq(cn, aC, cr, aE, aU)
605- }
606-
607-
608-
609-@Callable(cn)
610-func unstake (au,aU) = {
611- let aC = fromBase58String(au)
612- let bA = valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au)))
613- let cr = addressFromStringValue(bA)
614- let cM = valueOrElse(getString(cr, Z()), bA)
615- let cN = toString(cn.caller)
616- let aE = if (if ((cN == bA))
617- then true
618- else (cN == cM))
619- then cn.originCaller
620- else cn.caller
621- let cx = cn.caller
622- cw(cn, aC, cr, aE, cx, aU)
606+@Callable(cm)
607+func claimWxDoNotThrow (at) = {
608+ let as = toString(cm.caller)
609+ let cz = false
610+ let cH = invoke(this, "claimWxINTERNAL", [at, as, cz], nil)
611+ $Tuple2(nil, cH)
623612 }
624613
625614
626615
627-@Callable(cn)
628-func unstakeINTERNAL (aC,aU,aE,cx) = {
629- let au = toBase58String(aC)
630- let cr = addressFromStringValue(valueOrErrorMessage(getString(aY, aa(au)), j(("unsupported lp asset " + au))))
631- let cD = if ((cn.caller == cr))
632- then true
633- else cl
634- if ((cD == cD))
635- then cw(cn, aC, cr, Address(aE), Address(cx), aU)
636- else throw("Strict value is not equal to itself.")
637- }
638-
639-
640-
641-@Callable(cn)
642-func claimWx (au) = {
643- let at = toString(cn.caller)
644- let cA = true
645- let cO = invoke(this, "claimWxINTERNAL", [au, at, cA], nil)
646- $Tuple2(nil, cO)
647- }
648-
649-
650-
651-@Callable(cn)
652-func claimWxDoNotThrow (au) = {
653- let at = toString(cn.caller)
654- let cA = false
655- let cO = invoke(this, "claimWxINTERNAL", [au, at, cA], nil)
656- $Tuple2(nil, cO)
657- }
658-
659-
660-
661-@Callable(cn)
662-func claimWxINTERNAL (au,at,cA) = {
663- let cD = cm(cn)
664- if ((cD == cD))
616+@Callable(cm)
617+func claimWxINTERNAL (at,as,cz) = {
618+ let cC = cl(cm)
619+ if ((cC == cC))
665620 then {
666- let aE = valueOrErrorMessage(addressFromString(at), j("claimWxINTERNAL: invalid user address"))
667- let bA = z(aY, ad(au))
668- let cP = aw(au, at)
669- let cQ = az(au)
670- let cR = ax(au, at)
671- let cS = ay(au, at)
672- let cT = E(this, cP)
673- let cy = E(this, cR)
674- let cU = E(this, cS)
675- let cV = E(this, cQ)
676- let cW = bW(au, at, bA, 0)
677- let cg = cW._1
678- let cu = cW._2
679- let bV = cW._3
680- let cz = max([(cg - cy), h])
681- if ((h >= cz))
682- then if (cA)
621+ let aD = valueOrErrorMessage(addressFromString(as), j("claimWxINTERNAL: invalid user address"))
622+ let bz = z(aX, ab(at))
623+ let cI = av(at, as)
624+ let cJ = ay(at)
625+ let cK = aw(at, as)
626+ let cL = ax(at, as)
627+ let cM = E(this, cI)
628+ let cx = E(this, cK)
629+ let cN = E(this, cL)
630+ let cO = E(this, cJ)
631+ let cP = bV(at, as, bz, 0)
632+ let cf = cP._1
633+ let ct = cP._2
634+ let bU = cP._3
635+ let cy = max([(cf - cx), h])
636+ if ((h >= cy))
637+ then if (cz)
683638 then l("nothing to claim")
684639 else $Tuple2(nil, 0)
685640 else {
686- let cX = max([q(m(invoke(ba, "claimWxBoost", [au, at], nil))[0]), 0])
687- let cY = cz
688- let cZ = min([(cY * toBigInt((bb - 1))), toBigInt(cX)])
689- let da = (cY + cZ)
690- let db = u(m(invoke(aZ, "emit", [toInt(cY)], nil))[0])
691- let dc = m(invoke(aZ, "emit", [toInt(cZ)], nil))
692- if ((dc == dc))
641+ let cQ = max([q(m(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
642+ let cR = cy
643+ let cS = min([(cR * toBigInt((ba - 1))), toBigInt(cQ)])
644+ let cT = (cR + cS)
645+ let cU = u(m(invoke(aY, "emit", [toInt(cR)], nil))[0])
646+ let cV = m(invoke(aY, "emit", [toInt(cS)], nil))
647+ if ((cV == cV))
693648 then {
694- let dd = ((cT + cY) + cZ)
695- let de = (cy + cY)
696- let df = (cU + cZ)
697- let dg = (cV + cz)
698- $Tuple2([StringEntry(cP, toString(dd)), StringEntry(cR, toString(de)), StringEntry(cS, toString(df)), StringEntry(cQ, toString(dg)), ScriptTransfer(aE, toInt(cY), db), ScriptTransfer(aE, toInt(cZ), db), aV("claim", at, au, toInt(cz), cn.transactionId)], toInt(da))
649+ let cW = ((cM + cR) + cS)
650+ let cX = (cx + cR)
651+ let cY = (cN + cS)
652+ let cZ = (cO + cy)
653+ $Tuple2([StringEntry(cI, toString(cW)), StringEntry(cK, toString(cX)), StringEntry(cL, toString(cY)), StringEntry(cJ, toString(cZ)), ScriptTransfer(aD, toInt(cR), cU), ScriptTransfer(aD, toInt(cS), cU), aU("claim", as, at, toInt(cy), cm.transactionId)], toInt(cT))
699654 }
700655 else throw("Strict value is not equal to itself.")
701656 }
702657 }
703658 else throw("Strict value is not equal to itself.")
704659 }
705660
706661
707662
708-@Callable(cn)
709-func claimWxBulkInternalREADONLY (dh,di,at,dj) = if ((dh == size(di)))
710- then $Tuple2(nil, dj)
663+@Callable(cm)
664+func claimWxBulkInternalREADONLY (da,db,as,dc) = if ((da == size(db)))
665+ then $Tuple2(nil, dc)
711666 else {
712- let aC = di[dh]
713- let dk = split({
714- let bc = invoke(this, "claimWxREADONLY", [aC, at], nil)
715- if ($isInstanceOf(bc, "String"))
716- then bc
717- else throw(($getType(bc) + " couldn't be cast to String"))
667+ let aB = db[da]
668+ let dd = split({
669+ let bb = invoke(this, "claimWxREADONLY", [aB, as], nil)
670+ if ($isInstanceOf(bb, "String"))
671+ then bb
672+ else throw(($getType(bb) + " couldn't be cast to String"))
718673 }, f)
719- let dl = dk[3]
720- let dm = dk[4]
721- let dn = {
722- let bc = invoke(ba, "getUserVoteFinalizedREADONLY", [aC, at], nil)
723- if ($isInstanceOf(bc, "Int"))
724- then bc
725- else throw(($getType(bc) + " couldn't be cast to Int"))
674+ let de = dd[3]
675+ let df = dd[4]
676+ let dg = {
677+ let bb = invoke(aZ, "getUserVoteFinalizedREADONLY", [aB, as], nil)
678+ if ($isInstanceOf(bb, "Int"))
679+ then bb
680+ else throw(($getType(bb) + " couldn't be cast to Int"))
726681 }
727- let do = (dj :+ makeString(["%d%d%d", dl, dm, toString(dn)], f))
728- let dp = {
729- let bc = invoke(this, "claimWxBulkInternalREADONLY", [(dh + 1), di, at, do], nil)
730- if ($isInstanceOf(bc, "List[Any]"))
731- then bc
732- else throw(($getType(bc) + " couldn't be cast to List[Any]"))
682+ let dh = (dc :+ makeString(["%d%d%d", de, df, toString(dg)], f))
683+ let di = {
684+ let bb = invoke(this, "claimWxBulkInternalREADONLY", [(da + 1), db, as, dh], nil)
685+ if ($isInstanceOf(bb, "List[Any]"))
686+ then bb
687+ else throw(($getType(bb) + " couldn't be cast to List[Any]"))
733688 }
734- if ((dp == dp))
735- then $Tuple2(nil, dp)
689+ if ((di == di))
690+ then $Tuple2(nil, di)
736691 else throw("Strict value is not equal to itself.")
737692 }
738693
739694
740695
741-@Callable(cn)
742-func claimWxBulkREADONLY (di,at) = {
743- let do = invoke(this, "claimWxBulkInternalREADONLY", [0, di, at, nil], nil)
744- $Tuple2(nil, do)
696+@Callable(cm)
697+func claimWxBulkREADONLY (db,as) = {
698+ let dh = invoke(this, "claimWxBulkInternalREADONLY", [0, db, as, nil], nil)
699+ $Tuple2(nil, dh)
745700 }
746701
747702
748703
749-@Callable(cn)
750-func claimWxREADONLY (au,at) = {
751- let ca = as(at, au)
752- let bC = av(au)
753- let cP = aw(au, at)
754- let cR = ax(au, at)
755- let bv = aA(ca)
756- let bD = aA(bC)
757- let cT = E(this, cP)
758- let cy = E(this, cR)
759- let bA = z(aY, ad(au))
760- let bF = getIntegerValue(aY, ae(bA))
761- let dq = D(aZ, an())
762- let bG = D(aZ, ap())
763- let dr = if ((bG > height))
704+@Callable(cm)
705+func claimWxREADONLY (at,as) = {
706+ let bZ = ar(as, at)
707+ let bB = au(at)
708+ let cI = av(at, as)
709+ let cK = aw(at, as)
710+ let bu = az(bZ)
711+ let bC = az(bB)
712+ let cM = E(this, cI)
713+ let cx = E(this, cK)
714+ let bz = z(aX, ab(at))
715+ let bE = getIntegerValue(aX, ac(bz))
716+ let dj = D(aY, am())
717+ let bF = D(aY, ao())
718+ let dk = if ((bF > height))
764719 then 0
765- else (height - bG)
766- let ds = fraction((dq * dr), bF, g)
767- let dt = fraction(ds, bv, bD)
768- let du = bW(au, at, bA, 0)
769- let cg = du._1
770- let cu = du._2
771- let bV = du._3
772- let cz = max([(cg - cy), h])
773- let dv = m(invoke(ba, "claimWxBoostREADONLY", [au, at], nil))
774- let cX = max([q(dv[0]), 0])
775- let dw = s(dv[1])
776- let cY = cz
777- let cZ = min([(cY * toBigInt((bb - 1))), toBigInt(cX)])
778- let da = (cY + cZ)
779- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", au, at, toString(da), toString(cT), toString(cY), toString(cZ), "soon"], f))
720+ else (height - bF)
721+ let dl = fraction((dj * dk), bE, g)
722+ let dm = fraction(dl, bu, bC)
723+ let dn = bV(at, as, bz, 0)
724+ let cf = dn._1
725+ let ct = dn._2
726+ let bU = dn._3
727+ let cy = max([(cf - cx), h])
728+ let do = m(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
729+ let cQ = max([q(do[0]), 0])
730+ let dp = s(do[1])
731+ let cR = cy
732+ let cS = min([(cR * toBigInt((ba - 1))), toBigInt(cQ)])
733+ let cT = (cR + cS)
734+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cT), toString(cM), toString(cR), toString(cS), "soon"], f))
780735 }
781736
782737
783738
784-@Callable(cn)
785-func stakedByUserREADONLY (au,at) = {
786- let bv = valueOrElse(getInteger(as(at, au)), 0)
787- $Tuple2(nil, bv)
739+@Callable(cm)
740+func stakedByUserREADONLY (at,as) = {
741+ let bu = valueOrElse(getInteger(ar(as, at)), 0)
742+ $Tuple2(nil, bu)
788743 }
789744
790745
791746
792-@Callable(cn)
793-func stakedTotalREADONLY (au) = {
794- let bD = valueOrElse(getInteger(av(au)), 0)
795- $Tuple2(nil, bD)
747+@Callable(cm)
748+func stakedTotalREADONLY (at) = {
749+ let bC = valueOrElse(getInteger(au(at)), 0)
750+ $Tuple2(nil, bC)
796751 }
797752
798753
799754
800-@Callable(cn)
801-func usersListTraversal (aC) = {
802- let cD = if ((toBase58String(cn.caller.bytes) == valueOrElse(getString(this, N()), "")))
755+@Callable(cm)
756+func usersListTraversal (aB) = {
757+ let cC = if ((toBase58String(cm.caller.bytes) == valueOrElse(getString(this, N()), "")))
803758 then true
804- else co(cn)
805- if ((cD == cD))
759+ else cn(cm)
760+ if ((cC == cC))
806761 then {
807- let bh = bf(aC)
808- let dx = getString(be(aC))
809- let bn = getString(bg(bh))
810- let o = dx
762+ let bg = be(aB)
763+ let dq = getString(bd(aB))
764+ let bm = getString(bf(bg))
765+ let o = dq
811766 if ($isInstanceOf(o, "Unit"))
812767 then {
813- let dy = bn
814- if ($isInstanceOf(dy, "Unit"))
768+ let dr = bm
769+ if ($isInstanceOf(dr, "Unit"))
815770 then $Tuple2(nil, false)
816- else if ($isInstanceOf(dy, "String"))
771+ else if ($isInstanceOf(dr, "String"))
817772 then {
818- let dz = dy
819- $Tuple2([StringEntry(be(aC), dz)], true)
773+ let ds = dr
774+ $Tuple2([StringEntry(bd(aB), ds)], true)
820775 }
821776 else throw("Match error")
822777 }
823778 else if ($isInstanceOf(o, "String"))
824779 then {
825- let aE = o
826- let cy = E(this, ax(aC, aE))
827- let cr = z(aY, ad(aC))
828- let cg = bW(aC, aE, cr, 0)._1
829- let cz = (cg - cy)
830- let cA = true
831- let cB = if ((cz > h))
832- then invoke(this, "claimWxINTERNAL", [aC, aE, cA], nil)
780+ let aD = o
781+ let cx = E(this, aw(aB, aD))
782+ let cq = z(aX, ab(aB))
783+ let cf = bV(aB, aD, cq, 0)._1
784+ let cy = (cf - cx)
785+ let cz = true
786+ let cA = if ((cy > h))
787+ then invoke(this, "claimWxINTERNAL", [aB, aD, cz], nil)
833788 else unit
834- if ((cB == cB))
789+ if ((cA == cA))
835790 then {
836- let dA = getString(bl(bh, aE))
837- let dy = dA
838- if ($isInstanceOf(dy, "Unit"))
839- then $Tuple2([DeleteEntry(be(aC))], false)
840- else if ($isInstanceOf(dy, "String"))
791+ let dt = getString(bk(bg, aD))
792+ let dr = dt
793+ if ($isInstanceOf(dr, "Unit"))
794+ then $Tuple2([DeleteEntry(bd(aB))], false)
795+ else if ($isInstanceOf(dr, "String"))
841796 then {
842- let dB = dy
843- $Tuple2([StringEntry(be(aC), dB)], true)
797+ let du = dr
798+ $Tuple2([StringEntry(bd(aB), du)], true)
844799 }
845800 else throw("Match error")
846801 }
847802 else throw("Strict value is not equal to itself.")
848803 }
849804 else throw("Match error")
850805 }
851806 else throw("Strict value is not equal to itself.")
852807 }
853808
854809
855810
856-@Callable(cn)
857-func onModifyWeight (au,bA) = if ((cn.caller != aY))
811+@Callable(cm)
812+func onModifyWeight (at,bz) = if ((cm.caller != aX))
858813 then l("permissions denied")
859814 else {
860- let dC = bz(au, bA, 0)
861- let bx = dC._1
862- let bY = dC._2
863- let bZ = dC._3
864- bY
815+ let dv = by(at, bz, 0)
816+ let bw = dv._1
817+ let bX = dv._2
818+ let bY = dv._3
819+ bX
865820 }
866821
867822
868-@Verifier(dD)
869-func dE () = {
870- let dF = {
871- let o = cj()
823+@Verifier(dw)
824+func dx () = {
825+ let dy = {
826+ let o = ci()
872827 if ($isInstanceOf(o, "ByteVector"))
873828 then {
874- let cp = o
875- cp
829+ let co = o
830+ co
876831 }
877832 else if ($isInstanceOf(o, "Unit"))
878- then dD.senderPublicKey
833+ then dw.senderPublicKey
879834 else throw("Match error")
880835 }
881- sigVerify(dD.bodyBytes, dD.proofs[0], dF)
836+ sigVerify(dw.bodyBytes, dw.proofs[0], dy)
882837 }
883838

github/deemru/w8io/3ef1775 
235.50 ms