tx · EJyzmvU9wyzKFvUzVAr2ZNteMXwdKA3JepBmaqovpSBm

3N98Ngyaszw66EakvWRCiZ771ja2RDgNaxV:  -0.02900000 Waves

2023.01.13 12:52 [2403024] smart account 3N98Ngyaszw66EakvWRCiZ771ja2RDgNaxV > SELF 0.00000000 Waves

{ "type": 13, "id": "EJyzmvU9wyzKFvUzVAr2ZNteMXwdKA3JepBmaqovpSBm", "fee": 2900000, "feeAssetId": null, "timestamp": 1673603573026, "version": 1, "sender": "3N98Ngyaszw66EakvWRCiZ771ja2RDgNaxV", "senderPublicKey": "F4oaTkX67vt2MEsXLJJ8a7gaURGjW7x8fkvGfdEiH5oy", "proofs": [ "gXUFMjLpsqjBKVEXZcmLfuqjxa7fguc4tNDu8WFDsfrMpxa1yKXaZXFRJVAcegXreQxTuyFk4RwNPWdY35hrGdV" ], "script": "base64:BgIzCAISAwoBCBIAEgQKAgIBEgQKAgIBEgcKBQgICAgIEgASBAoCCAgSABIECgIICBIDCgEIQQAJc2VwYXJhdG9yAgJfXwASc2hhcmVBc3NldERlY2ltYWxzAAgAC3dhdmVzU3RyaW5nAgVXQVZFUwAHc2NhbGUxOACAgJC7utat8A0ADXNjYWxlMThCaWdJbnQJALYCAQUHc2NhbGUxOAEHd3JhcEVycgEDbXNnCQC5CQIJAMwIAgIWbHBfc3Rha2luZ19wb29scy5yaWRlOgkAzAgCBQNtc2cFA25pbAIBIAEIdGhyb3dFcnIBA21zZwkAAgEJAQd3cmFwRXJyAQUDbXNnARJlcnJLZXlJc05vdERlZmluZWQCB2FkZHJlc3MDa2V5CQEHd3JhcEVycgEJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRTdHJPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQESZXJyS2V5SXNOb3REZWZpbmVkAgUHYWRkcmVzcwUDa2V5AQxnZXRJbnRPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwUDa2V5CQESZXJyS2V5SXNOb3REZWZpbmVkAgUHYWRkcmVzcwUDa2V5AQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBDmVuc3VyZVBvc2l0aXZlAQF2AwkAZwIFAXYAAAUBdgkBCHRocm93RXJyAQIYdmFsdWUgc2hvdWxkIGJlIHBvc2l0aXZlARJrZXlGYWN0b3J5Q29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgIPZmFjdG9yeUNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgEUa2V5THBTdGFraW5nQ29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgIRbHBTdGFraW5nQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yARJrZXlTdGFraW5nQ29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgIPc3Rha2luZ0NvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgETa2V5Qm9vc3RpbmdDb250cmFjdAAJALkJAgkAzAgCAgIlcwkAzAgCAhBib29zdGluZ0NvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgEPa2V5U3dhcENvbnRyYWN0AAkAuQkCCQDMCAICAiVzCQDMCAICDHN3YXBDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IBFmtleUFzc2V0c1N0b3JlQ29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgITYXNzZXRzU3RvcmVDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IBDmtleVVzZG5Bc3NldElkAAkAuQkCCQDMCAICAiVzCQDMCAICC3VzZG5Bc3NldElkBQNuaWwFCXNlcGFyYXRvcgEMa2V5V3hBc3NldElkAAkAuQkCCQDMCAICAiVzCQDMCAICCXd4QXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBC2tleVNodXRkb3duAAkAuQkCCQDMCAICAiVzCQDMCAICCHNodXRkb3duBQNuaWwFCXNlcGFyYXRvcgELa2V5TWluRGVsYXkACQC5CQIJAMwIAgICJXMJAMwIAgIIbWluRGVsYXkFA25pbAUJc2VwYXJhdG9yAQ9rZXlMb2NrRnJhY3Rpb24ACQC5CQIJAMwIAgICJXMJAMwIAgIMbG9ja0ZyYWN0aW9uBQNuaWwFCXNlcGFyYXRvcgEPa2V5U2hhcmVBc3NldElkAQtiYXNlQXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICDHNoYXJlQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBDmtleUJhc2VBc3NldElkAQxzaGFyZUFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQxzaGFyZUFzc2V0SWQJAMwIAgILYmFzZUFzc2V0SWQFA25pbAUJc2VwYXJhdG9yAQlrZXlQZXJpb2QBC2Jhc2VBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIGcGVyaW9kBQNuaWwFCXNlcGFyYXRvcgEUa2V5UGVyaW9kU3RhcnRIZWlnaHQCC2Jhc2VBc3NldElkBnBlcmlvZAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIRcGVyaW9kU3RhcnRIZWlnaHQJAMwIAgkApAMBBQZwZXJpb2QFA25pbAUJc2VwYXJhdG9yARtrZXlCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQBC2Jhc2VBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIYYmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0BQNuaWwFCXNlcGFyYXRvcgEca2V5U2hhcmVBc3NldEFtb3VudFRvQ29udmVydAELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAhlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0BQNuaWwFCXNlcGFyYXRvcgEfa2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAILYmFzZUFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIYYmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0BQNuaWwFCXNlcGFyYXRvcgEla2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAILYmFzZUFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCAhhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQJAMwIAgIGcGVyaW9kBQNuaWwFCXNlcGFyYXRvcgEga2V5VXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQCC2Jhc2VBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFA25pbAUJc2VwYXJhdG9yASZrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAILYmFzZUFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCAhlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0CQDMCAICBnBlcmlvZAUDbmlsBQlzZXBhcmF0b3IBDmtleVByaWNlUGVyaW9kAgtiYXNlQXNzZXRJZAZwZXJpb2QJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICBXByaWNlCQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFCXNlcGFyYXRvcgEPa2V5UHJpY2VIaXN0b3J5AQtiYXNlQXNzZXRJZAkAuQkCCQDMCAICCiVzJXMlcyVkJWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICBXByaWNlCQDMCAICB2hpc3RvcnkJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwFCXNlcGFyYXRvcgERa2V5UHJpY2VQZXJpb2RQdXQCC2Jhc2VBc3NldElkBnBlcmlvZAkAuQkCCQDMCAICCCVzJXMlZCVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAgVwcmljZQkAzAgCCQCkAwEFBnBlcmlvZAkAzAgCAgNwdXQFA25pbAUJc2VwYXJhdG9yARJrZXlQcmljZVB1dEhpc3RvcnkBC2Jhc2VBc3NldElkCQC5CQIJAMwIAgIMJXMlcyVzJXMlZCVkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAgVwcmljZQkAzAgCAgdoaXN0b3J5CQDMCAICA3B1dAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAFA25pbAUJc2VwYXJhdG9yARFrZXlQcmljZVBlcmlvZEdldAILYmFzZUFzc2V0SWQGcGVyaW9kCQC5CQIJAMwIAgIIJXMlcyVkJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICBXByaWNlCQDMCAIJAKQDAQUGcGVyaW9kCQDMCAICA2dldAUDbmlsBQlzZXBhcmF0b3IBEmtleVByaWNlR2V0SGlzdG9yeQELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgwlcyVzJXMlcyVkJWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICBXByaWNlCQDMCAICB2hpc3RvcnkJAMwIAgIDZ2V0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsBQlzZXBhcmF0b3IBD2tleUhpc3RvcnlFbnRyeQULYmFzZUFzc2V0SWQJb3BlcmF0aW9uBnBlcmlvZAt1c2VyQWRkcmVzcwR0eElkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIHaGlzdG9yeQkAzAgCBQlvcGVyYXRpb24JAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCCQDYBAEFBHR4SWQJAMwIAgkApAMBBQZoZWlnaHQFA25pbAUJc2VwYXJhdG9yARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5ARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQETa2V5TWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAFXBlcm1pc3Npb25EZW5pZWRFcnJvcgkAAgECEVBlcm1pc3Npb24gZGVuaWVkAQhtdXN0VGhpcwEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBRVwZXJtaXNzaW9uRGVuaWVkRXJyb3IBC211c3RNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDADCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0CQEIbXVzdFRoaXMBBQFpCQACAQILTWF0Y2ggZXJyb3IACHNodXRkb3duCQELdmFsdWVPckVsc2UCCQCgCAEJAQtrZXlTaHV0ZG93bgAHAQ1zaHV0ZG93bkNoZWNrAQFpAwMJAQEhAQUIc2h1dGRvd24GCQELbXVzdE1hbmFnZXIBBQFpBgkAAgECFW9wZXJhdGlvbiBpcyBkaXNhYmxlZAAPZmFjdG9yeUNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwkBEmtleUZhY3RvcnlDb250cmFjdAAAEWxwU3Rha2luZ0NvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwkBFGtleUxwU3Rha2luZ0NvbnRyYWN0AAAPc3Rha2luZ0NvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwkBEmtleVN0YWtpbmdDb250cmFjdAAAEGJvb3N0aW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQETa2V5Qm9vc3RpbmdDb250cmFjdAAADHN3YXBDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDGdldFN0ck9yRmFpbAIFBHRoaXMJAQ9rZXlTd2FwQ29udHJhY3QAABNhc3NldHNTdG9yZUNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwkBFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAt1c2RuQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQEOa2V5VXNkbkFzc2V0SWQAAAl3eEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwkBDGtleVd4QXNzZXRJZAAAD21pbkRlbGF5RGVmYXVsdACgCwAIbWluRGVsYXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBC2tleU1pbkRlbGF5AAUPbWluRGVsYXlEZWZhdWx0ABZsb2NrRnJhY3Rpb25NdWx0aXBsaWVyAIDC1y8AE2xvY2tGcmFjdGlvbkRlZmF1bHQJAGsDAAEFFmxvY2tGcmFjdGlvbk11bHRpcGxpZXIAAgAMbG9ja0ZyYWN0aW9uCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ9rZXlMb2NrRnJhY3Rpb24ABRNsb2NrRnJhY3Rpb25EZWZhdWx0AQtnZXRQb29sSW5mbwENYW1vdW50QXNzZXRJZAQQYW1vdW50QXNzZXRJZFN0cgkBD2Fzc2V0SWRUb1N0cmluZwEFDWFtb3VudEFzc2V0SWQED3ByaWNlQXNzZXRJZFN0cgkBD2Fzc2V0SWRUb1N0cmluZwEFC3VzZG5Bc3NldElkBA5wb29sSW5mb09wdGlvbgoAAUAJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AhBwb29sSW5mb1JFQURPTkxZCQDMCAIFEGFtb3VudEFzc2V0SWRTdHIJAMwIAgUPcHJpY2VBc3NldElkU3RyBQNuaWwFA25pbAMJAAECBQFAAhUoQWRkcmVzcywgQnl0ZVZlY3RvcikFAUAFBHVuaXQFDnBvb2xJbmZvT3B0aW9uAQljYWxjUHJpY2UCCWxwQXNzZXRJZAxzaGFyZUFzc2V0SWQEDnNoYXJlQXNzZXRJbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUMc2hhcmVBc3NldElkAh5mYWlsZWQgdG8gZ2V0IHNoYXJlIGFzc2V0IGluZm8EEnNoYXJlQXNzZXRFbWlzc2lvbggFDnNoYXJlQXNzZXRJbmZvCHF1YW50aXR5BAxzdGFrZWRBbW91bnQJAQ5lbnN1cmVQb3NpdGl2ZQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRzdGFrZWRCeVVzZXJSRUFET05MWQkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUJbHBBc3NldElkCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFABQR1bml0CQEHd3JhcEVycgECI2ludmFsaWQgc3Rha2VkQnlVc2VyUkVBRE9OTFkgcmVzdWx0BAVwcmljZQMJAAACBRJzaGFyZUFzc2V0RW1pc3Npb24AAAUNc2NhbGUxOEJpZ0ludAkAvQIECQC2AgEFDHN0YWtlZEFtb3VudAUNc2NhbGUxOEJpZ0ludAkAtgIBBRJzaGFyZUFzc2V0RW1pc3Npb24FBUZMT09SBQVwcmljZQoBaQEKc2V0TWFuYWdlcgEXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDZBAEFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAIFFWNoZWNrTWFuYWdlclB1YmxpY0tleQUVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY29uZmlybU1hbmFnZXIABAJwbQkBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQFaGFzUE0DCQEJaXNEZWZpbmVkAQUCcG0GCQEIdGhyb3dFcnIBAhJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQEIdGhyb3dFcnIBAht5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TWFuYWdlclB1YmxpY0tleQAJANgEAQkBBXZhbHVlAQUCcG0JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGVtaXQCB2Fzc2V0SWQGYW1vdW50BAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEDGlzUmVpc3N1YWJsZQYJAJQKAgkAzAgCCQEHUmVpc3N1ZQMFB2Fzc2V0SWQFBmFtb3VudAUMaXNSZWlzc3VhYmxlBQNuaWwFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRidXJuAgdhc3NldElkBmFtb3VudAQLY2hlY2tDYWxsZXIJAQhtdXN0VGhpcwEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQCUCgIJAMwIAgkBBEJ1cm4CBQdhc3NldElkBQZhbW91bnQFA25pbAUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBmNyZWF0ZQUOYmFzZUFzc2V0SWRTdHIPc2hhcmVBc3NldElkU3RyDnNoYXJlQXNzZXROYW1lFXNoYXJlQXNzZXREZXNjcmlwdGlvbg5zaGFyZUFzc2V0TG9nbwQPc2hhcmVBc3NldExhYmVsAhBMUF9TVEFLSU5HX1BPT0xTBAtiYXNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFDmJhc2VBc3NldElkU3RyBAZjaGVja3MJAMwIAgkBC211c3RNYW5hZ2VyAQUBaQkAzAgCAwkBCWlzRGVmaW5lZAEJAQtnZXRQb29sSW5mbwEFC2Jhc2VBc3NldElkBgkBCHRocm93RXJyAQISaW52YWxpZCBiYXNlIGFzc2V0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEC2NvbW1vblN0YXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5UGVyaW9kAQULYmFzZUFzc2V0SWQAAAUDbmlsAwkAAAIFD3NoYXJlQXNzZXRJZFN0cgIABBVzaGFyZUFzc2V0SXNzdWVBbW91bnQAAQQVc2hhcmVBc3NldElzc3VlQWN0aW9uCQDCCAUFDnNoYXJlQXNzZXROYW1lBRVzaGFyZUFzc2V0RGVzY3JpcHRpb24FFXNoYXJlQXNzZXRJc3N1ZUFtb3VudAUSc2hhcmVBc3NldERlY2ltYWxzBgQWY2FsY3VsYXRlZFNoYXJlQXNzZXRJZAkAuAgBBRVzaGFyZUFzc2V0SXNzdWVBY3Rpb24EFHNoYXJlQXNzZXRCdXJuQWN0aW9uCQEEQnVybgIFFmNhbGN1bGF0ZWRTaGFyZUFzc2V0SWQFFXNoYXJlQXNzZXRJc3N1ZUFtb3VudAQZY2FsY3VsYXRlZFNoYXJlQXNzZXRJZFN0cgkA2AQBBRZjYWxjdWxhdGVkU2hhcmVBc3NldElkBA5jcmVhdGVPclVwZGF0ZQkA/AcEBRNhc3NldHNTdG9yZUNvbnRyYWN0Ag5jcmVhdGVPclVwZGF0ZQkAzAgCBRljYWxjdWxhdGVkU2hhcmVBc3NldElkU3RyCQDMCAIFDnNoYXJlQXNzZXRMb2dvCQDMCAIHBQNuaWwFA25pbAMJAAACBQ5jcmVhdGVPclVwZGF0ZQUOY3JlYXRlT3JVcGRhdGUECGFkZExhYmVsCQD8BwQFE2Fzc2V0c1N0b3JlQ29udHJhY3QCCGFkZExhYmVsCQDMCAIFGWNhbGN1bGF0ZWRTaGFyZUFzc2V0SWRTdHIJAMwIAgUPc2hhcmVBc3NldExhYmVsBQNuaWwFA25pbAMJAAACBQhhZGRMYWJlbAUIYWRkTGFiZWwJAJQKAgkAzggCBQtjb21tb25TdGF0ZQkAzAgCBRVzaGFyZUFzc2V0SXNzdWVBY3Rpb24JAMwIAgUUc2hhcmVBc3NldEJ1cm5BY3Rpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVNoYXJlQXNzZXRJZAEFC2Jhc2VBc3NldElkBRljYWxjdWxhdGVkU2hhcmVBc3NldElkU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlCYXNlQXNzZXRJZAEFFmNhbGN1bGF0ZWRTaGFyZUFzc2V0SWQFDmJhc2VBc3NldElkU3RyBQNuaWwFGWNhbGN1bGF0ZWRTaGFyZUFzc2V0SWRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDHNoYXJlQXNzZXRJZAkA2QQBBQ9zaGFyZUFzc2V0SWRTdHIEDnNoYXJlQXNzZXRJbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUMc2hhcmVBc3NldElkCQEHd3JhcEVycgECFmludmFsaWQgc2hhcmUgYXNzZXQgaWQEC2NoZWNrSXNzdWVyAwkAAAIIBQ5zaGFyZUFzc2V0SW5mbwZpc3N1ZXIFEWxwU3Rha2luZ0NvbnRyYWN0BgkBCHRocm93RXJyAQIdaW52YWxpZCBzaGFyZSBhc3NldCBpZCBpc3N1ZXIDCQAAAgULY2hlY2tJc3N1ZXIFC2NoZWNrSXNzdWVyCQCUCgIJAM4IAgULY29tbW9uU3RhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVNoYXJlQXNzZXRJZAEFC2Jhc2VBc3NldElkBQ9zaGFyZUFzc2V0SWRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVNoYXJlQXNzZXRJZAEFDHNoYXJlQXNzZXRJZAUOYmFzZUFzc2V0SWRTdHIFA25pbAUPc2hhcmVBc3NldElkU3RyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBA3B1dAAEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkBCHRocm93RXJyAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEC2Jhc2VBc3NldElkCAUDcG10B2Fzc2V0SWQEC3VzZXJBZGRyZXNzCAUBaQZjYWxsZXIEBmNoZWNrcwkAzAgCCQENc2h1dGRvd25DaGVjawEFAWkJAMwIAgMJAQlpc0RlZmluZWQBCQCiCAEJAQ9rZXlTaGFyZUFzc2V0SWQBBQtiYXNlQXNzZXRJZAYJAQh0aHJvd0VycgECDWludmFsaWQgYXNzZXQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTE2NDYxMTc0OQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQELZ2V0UG9vbEluZm8BBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAg1pbnZhbGlkIGFzc2V0BAtwb29sQWRkcmVzcwgFDSR0MDExNjQ2MTE3NDkCXzEECWxwQXNzZXRJZAgFDSR0MDExNjQ2MTE3NDkCXzIEBnBlcmlvZAkBBXZhbHVlAQkAnwgBCQEJa2V5UGVyaW9kAQULYmFzZUFzc2V0SWQEKHVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2RPcHRpb24JAJ8IAQkBJWtleVVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MEGWNsYWltU2hhcmVBc3NldEludm9jYXRpb24DCQAAAgUodXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZE9wdGlvbgUEdW5pdAUEdW5pdAQidXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAkBBXZhbHVlAQUodXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZE9wdGlvbgMJAAACBSJ1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kBQZwZXJpb2QFBHVuaXQJAPwHBAUEdGhpcwIPY2xhaW1TaGFyZUFzc2V0CQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCCQClCAEFC3VzZXJBZGRyZXNzBQNuaWwFA25pbAMJAAACBRljbGFpbVNoYXJlQXNzZXRJbnZvY2F0aW9uBRljbGFpbVNoYXJlQXNzZXRJbnZvY2F0aW9uBBhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBG2tleUJhc2VBc3NldEFtb3VudFRvQ29udmVydAEFC2Jhc2VBc3NldElkAAAEHHVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBH2tleVVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MAAAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5QmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AQULYmFzZUFzc2V0SWQJAGQCBRhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEfa2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwkAZAIFHHVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwUGcGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5SGlzdG9yeUVudHJ5BQULYmFzZUFzc2V0SWQCA3B1dAUGcGVyaW9kBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAgFA3BtdAZhbW91bnQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9jbGFpbVNoYXJlQXNzZXQCDmJhc2VBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBAZjaGVja3MJAMwIAgkBDXNodXRkb3duQ2hlY2sBBQFpBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEC3VzZXJBZGRyZXNzAwkAAAIFDnVzZXJBZGRyZXNzU3RyAgAIBQFpBmNhbGxlcgQLY2hlY2tDYWxsZXIJAQhtdXN0VGhpcwEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUOdXNlckFkZHJlc3NTdHIJAQd3cmFwRXJyAQIUaW52YWxpZCB1c2VyIGFkZHJlc3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgULdXNlckFkZHJlc3MFC3VzZXJBZGRyZXNzBAtiYXNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFDmJhc2VBc3NldElkU3RyBAxzaGFyZUFzc2V0SWQJAQV2YWx1ZQEJAQxwYXJzZUFzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBD2tleVNoYXJlQXNzZXRJZAEFC2Jhc2VBc3NldElkCQEHd3JhcEVycgECFWludmFsaWQgYmFzZSBhc3NldCBpZAMJAAACBQxzaGFyZUFzc2V0SWQFDHNoYXJlQXNzZXRJZAQGcGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBCWtleVBlcmlvZAEFC2Jhc2VBc3NldElkCQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kAwkAAAIFBnBlcmlvZAUGcGVyaW9kBBx1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0CQELdmFsdWVPckVsc2UCCQCfCAEJAR9rZXlVc2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzAAAEFGNoZWNrQW1vdW50VG9Db252ZXJ0AwkAZgIFHHVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQAAAYJAQh0aHJvd0VycgECEG5vdGhpbmcgdG8gY2xhaW0DCQAAAgUUY2hlY2tBbW91bnRUb0NvbnZlcnQFFGNoZWNrQW1vdW50VG9Db252ZXJ0BCJ1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBJWtleVVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MJAQd3cmFwRXJyAQIUZmFpbGVkIHRvIGdldCBwZXJpb2QEC2NoZWNrUGVyaW9kAwkAZgIFBnBlcmlvZAUidXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAYJAQh0aHJvd0VycgECDmludmFsaWQgcGVyaW9kAwkAAAIFC2NoZWNrUGVyaW9kBQtjaGVja1BlcmlvZAQFcHJpY2UJAJ4DAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQChCAEJARFrZXlQcmljZVBlcmlvZFB1dAIFC2Jhc2VBc3NldElkBSJ1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kCQEHd3JhcEVycgECE2ZhaWxlZCB0byBnZXQgcHJpY2UEEHNoYXJlQXNzZXRBbW91bnQJAKADAQkAvAIDCQC2AgEFHHVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQFDXNjYWxlMThCaWdJbnQFBXByaWNlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAR9rZXlVc2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFEHNoYXJlQXNzZXRBbW91bnQFDHNoYXJlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleUhpc3RvcnlFbnRyeQUFC2Jhc2VBc3NldElkAg9jbGFpbVNoYXJlQXNzZXQFBnBlcmlvZAULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFEHNoYXJlQXNzZXRBbW91bnQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQNnZXQABAZjaGVja3MJAMwIAgkBDXNodXRkb3duQ2hlY2sBBQFpBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkBCHRocm93RXJyAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEDHNoYXJlQXNzZXRJZAgFA3BtdAdhc3NldElkBAtiYXNlQXNzZXRJZAkBBXZhbHVlAQkBDHBhcnNlQXNzZXRJZAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEOa2V5QmFzZUFzc2V0SWQBBQxzaGFyZUFzc2V0SWQJAQd3cmFwRXJyAQIWaW52YWxpZCBzaGFyZSBhc3NldCBpZAMJAAACBQtiYXNlQXNzZXRJZAULYmFzZUFzc2V0SWQEC3VzZXJBZGRyZXNzCAUBaQZjYWxsZXIEDSR0MDE1NDUwMTU1NTMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBC2dldFBvb2xJbmZvAQULYmFzZUFzc2V0SWQJAQd3cmFwRXJyAQINaW52YWxpZCBhc3NldAQLcG9vbEFkZHJlc3MIBQ0kdDAxNTQ1MDE1NTUzAl8xBAlscEFzc2V0SWQIBQ0kdDAxNTQ1MDE1NTUzAl8yBAZwZXJpb2QJAQV2YWx1ZQEJAJ8IAQkBCWtleVBlcmlvZAEFC2Jhc2VBc3NldElkBCl1c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZE9wdGlvbgkAnwgBCQEma2V5VXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MEGGNsYWltQmFzZUFzc2V0SW52b2NhdGlvbgMJAAACBSl1c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZE9wdGlvbgUEdW5pdAUEdW5pdAQjdXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QJAQV2YWx1ZQEFKXVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kT3B0aW9uAwkAAAIFI3VzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kBQZwZXJpb2QFBHVuaXQJAPwHBAUEdGhpcwIOY2xhaW1CYXNlQXNzZXQJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDbmlsAwkAAAIFGGNsYWltQmFzZUFzc2V0SW52b2NhdGlvbgUYY2xhaW1CYXNlQXNzZXRJbnZvY2F0aW9uBBlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0CQELdmFsdWVPckVsc2UCCQCfCAEJARxrZXlTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AQULYmFzZUFzc2V0SWQAAAQddXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleVVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzAAAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGtleVNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAkAZAIFGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEga2V5VXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MJAGQCBR11c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJASZrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwUGcGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5SGlzdG9yeUVudHJ5BQULYmFzZUFzc2V0SWQCA2dldAUGcGVyaW9kBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAgFA3BtdAZhbW91bnQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jbGFpbUJhc2VBc3NldAIOYmFzZUFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEBmNoZWNrcwkAzAgCCQENc2h1dGRvd25DaGVjawEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLdXNlckFkZHJlc3MDCQAAAgUOdXNlckFkZHJlc3NTdHICAAgFAWkGY2FsbGVyBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQ51c2VyQWRkcmVzc1N0cgkBB3dyYXBFcnIBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQt1c2VyQWRkcmVzcwULdXNlckFkZHJlc3MEC2Jhc2VBc3NldElkCQEMcGFyc2VBc3NldElkAQUOYmFzZUFzc2V0SWRTdHIEDHNoYXJlQXNzZXRJZAkBBXZhbHVlAQkBDHBhcnNlQXNzZXRJZAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEPa2V5U2hhcmVBc3NldElkAQULYmFzZUFzc2V0SWQJAQd3cmFwRXJyAQIVaW52YWxpZCBiYXNlIGFzc2V0IGlkAwkAAAIFDHNoYXJlQXNzZXRJZAUMc2hhcmVBc3NldElkBAZwZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEJa2V5UGVyaW9kAQULYmFzZUFzc2V0SWQJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QDCQAAAgUGcGVyaW9kBQZwZXJpb2QEHXVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0CQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwAABBRjaGVja0Ftb3VudFRvQ29udmVydAMJAGYCBR11c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAAABgkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQMJAAACBRRjaGVja0Ftb3VudFRvQ29udmVydAUUY2hlY2tBbW91bnRUb0NvbnZlcnQEI3VzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBJmtleVVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kAgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzCQEHd3JhcEVycgECFGZhaWxlZCB0byBnZXQgcGVyaW9kBAtjaGVja1BlcmlvZAMJAGYCBQZwZXJpb2QFI3VzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kBgkBCHRocm93RXJyAQIOaW52YWxpZCBwZXJpb2QDCQAAAgULY2hlY2tQZXJpb2QFC2NoZWNrUGVyaW9kBAVwcmljZQkAngMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKEIAQkBEWtleVByaWNlUGVyaW9kR2V0AgULYmFzZUFzc2V0SWQFI3VzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kCQEHd3JhcEVycgECE2ZhaWxlZCB0byBnZXQgcHJpY2UED2Jhc2VBc3NldEFtb3VudAkAoAMBCQC8AgMJALYCAQUddXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFBXByaWNlBQ1zY2FsZTE4QmlnSW50CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJASBrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQ9iYXNlQXNzZXRBbW91bnQFC2Jhc2VBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5SGlzdG9yeUVudHJ5BQULYmFzZUFzc2V0SWQCDmNsYWltQmFzZUFzc2V0BQZwZXJpb2QFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkBQ9iYXNlQXNzZXRBbW91bnQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhmaW5hbGl6ZQEOYmFzZUFzc2V0SWRTdHIEBmNoZWNrcwkAzAgCCQENc2h1dGRvd25DaGVjawEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLYmFzZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ5iYXNlQXNzZXRJZFN0cgQMc2hhcmVBc3NldElkCQEFdmFsdWUBCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAQ9rZXlTaGFyZUFzc2V0SWQBBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAhVpbnZhbGlkIGJhc2UgYXNzZXQgaWQDCQAAAgUMc2hhcmVBc3NldElkBQxzaGFyZUFzc2V0SWQEDnNoYXJlQXNzZXRJbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUMc2hhcmVBc3NldElkCQEHd3JhcEVycgECFmludmFsaWQgc2hhcmUgYXNzZXQgaWQEBnBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJAQlrZXlQZXJpb2QBBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAMJAAACBQZwZXJpb2QFBnBlcmlvZAQXcGVyaW9kU3RhcnRIZWlnaHRPcHRpb24JAJ8IAQkBFGtleVBlcmlvZFN0YXJ0SGVpZ2h0AgULYmFzZUFzc2V0SWQFBnBlcmlvZAQKY2hlY2tEZWxheQMJAAACBRdwZXJpb2RTdGFydEhlaWdodE9wdGlvbgUEdW5pdAUEdW5pdAQFZGVsYXkJAGUCBQZoZWlnaHQJAQV2YWx1ZQEFF3BlcmlvZFN0YXJ0SGVpZ2h0T3B0aW9uBAxibG9ja3NUb1dhaXQJAJYDAQkAzAgCAAAJAMwIAgkAZQIFCG1pbkRlbGF5BQVkZWxheQUDbmlsAwkAAAIFDGJsb2Nrc1RvV2FpdAAABQR1bml0CQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIhZmluYWxpemF0aW9uIHdpbGwgYmUgcG9zc2libGUgaW4gCQDMCAIJAKQDAQUMYmxvY2tzVG9XYWl0CQDMCAICByBibG9ja3MFA25pbAIAAwkAAAIFCmNoZWNrRGVsYXkFCmNoZWNrRGVsYXkEDSR0MDE5NTk5MTk3ODAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBC2dldFBvb2xJbmZvAQULYmFzZUFzc2V0SWQJAQd3cmFwRXJyAQINaW52YWxpZCBhc3NldAQLcG9vbEFkZHJlc3MIBQ0kdDAxOTU5OTE5NzgwAl8xBAlscEFzc2V0SWQIBQ0kdDAxOTU5OTE5NzgwAl8yBA1zdGFraW5nUmV3YXJkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQD8BwQFD3N0YWtpbmdDb250cmFjdAIRY2xhaW1XeERvTm90VGhyb3cJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFCWxwQXNzZXRJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFABQR1bml0CQEHd3JhcEVycgECFmludmFsaWQgY2xhaW1XeCByZXN1bHQDCQAAAgUNc3Rha2luZ1Jld2FyZAUNc3Rha2luZ1Jld2FyZAQYYmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0CQELdmFsdWVPckVsc2UCCQCfCAEJARtrZXlCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAAABBlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0CQELdmFsdWVPckVsc2UCCQCfCAEJARxrZXlTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AQULYmFzZUFzc2V0SWQAAAQbY2hlY2tGaW5hbGl6YXRpb25Jc1JlcXVpcmVkBBZpc0ZpbmFsaXphdGlvblJlcXVpcmVkAwMJAGYCBQ1zdGFraW5nUmV3YXJkAAAGCQBmAgUYYmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AAAGCQBmAgUZc2hhcmVBc3NldEFtb3VudFRvQ29udmVydAAAAwUWaXNGaW5hbGl6YXRpb25SZXF1aXJlZAYJAQh0aHJvd0VycgECE25vdGhpbmcgdG8gZmluYWxpemUDCQAAAgUbY2hlY2tGaW5hbGl6YXRpb25Jc1JlcXVpcmVkBRtjaGVja0ZpbmFsaXphdGlvbklzUmVxdWlyZWQEEHVzZVN0YWtpbmdSZXdhcmQDCQBmAgUNc3Rha2luZ1Jld2FyZAAABAhsb2NrUGFydAkAawMFDXN0YWtpbmdSZXdhcmQFDGxvY2tGcmFjdGlvbgUWbG9ja0ZyYWN0aW9uTXVsdGlwbGllcgQLY29udmVydFBhcnQJAGUCBQ1zdGFraW5nUmV3YXJkBQhsb2NrUGFydAQBcgkA/AcEBRBib29zdGluZ0NvbnRyYWN0Ahd1c2VyTWF4RHVyYXRpb25SRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsBARsb2NrAwkAZgIFCGxvY2tQYXJ0AAAEByRtYXRjaDAFAXIDAwMJAAECCAUHJG1hdGNoMAJfMQIGU3RyaW5nCQABAggFByRtYXRjaDACXzICA0ludAcJAAECBQckbWF0Y2gwAg0oU3RyaW5nLCBJbnQpBwQIZnVuY3Rpb24IBQckbWF0Y2gwAl8xBAhkdXJhdGlvbggFByRtYXRjaDACXzIDCQBmAgUIbG9ja1BhcnQAAAkA/AcEBRBib29zdGluZ0NvbnRyYWN0BQhmdW5jdGlvbgkAzAgCBQhkdXJhdGlvbgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQl3eEFzc2V0SWQFCGxvY2tQYXJ0BQNuaWwFBHVuaXQJAQh0aHJvd0VycgECE2ludmFsaWQgbG9jayBwYXJhbXMFBHVuaXQDCQAAAgUEbG9jawUEbG9jawQPY29udmVydGVkQW1vdW50AwkAZgIFC2NvbnZlcnRQYXJ0AAAECWluQXNzZXRJZAUJd3hBc3NldElkBBBtaW5pbXVtVG9SZWNlaXZlAAAEDW91dEFzc2V0SWRTdHIJAQ9hc3NldElkVG9TdHJpbmcBBQt1c2RuQXNzZXRJZAQNdGFyZ2V0QWRkcmVzcwIACQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQD8BwQFDHN3YXBDb250cmFjdAIEc3dhcAkAzAgCBRBtaW5pbXVtVG9SZWNlaXZlCQDMCAIFDW91dEFzc2V0SWRTdHIJAMwIAgUNdGFyZ2V0QWRkcmVzcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlpbkFzc2V0SWQFC2NvbnZlcnRQYXJ0BQNuaWwDCQABAgUBQAIDSW50BQFABQR1bml0CQEHd3JhcEVycgECE2ludmFsaWQgc3dhcCByZXN1bHQAAAMJAAACBQ9jb252ZXJ0ZWRBbW91bnQFD2NvbnZlcnRlZEFtb3VudAQNbHBBc3NldEFtb3VudAMJAGYCBQ9jb252ZXJ0ZWRBbW91bnQAAAQMbWluT3V0QW1vdW50AAAECWF1dG9TdGFrZQYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAULcG9vbEFkZHJlc3MCC3B1dE9uZVRrblYyCQDMCAIFDG1pbk91dEFtb3VudAkAzAgCBQlhdXRvU3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkbkFzc2V0SWQFD2NvbnZlcnRlZEFtb3VudAUDbmlsAwkAAQIFAUACA0ludAUBQAUEdW5pdAkBB3dyYXBFcnIBAhppbnZhbGlkIHB1dE9uZVRrblYyIHJlc3VsdAAAAwkAAAIFDWxwQXNzZXRBbW91bnQFDWxwQXNzZXRBbW91bnQFDWxwQXNzZXRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FBHVuaXQDCQAAAgUQdXNlU3Rha2luZ1Jld2FyZAUQdXNlU3Rha2luZ1Jld2FyZAQKZ2V0QWN0aW9ucwMJAGYCBRlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AAAEBXByaWNlCQEJY2FsY1ByaWNlAgUJbHBBc3NldElkBQxzaGFyZUFzc2V0SWQDCQAAAgUFcHJpY2UFBXByaWNlBA11bnN0YWtlQW1vdW50CQCgAwEJAL0CBAkAtgIBBRlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0BQVwcmljZQUNc2NhbGUxOEJpZ0ludAUFRkxPT1IED2Jhc2VBc3NldEFtb3VudAQKb3V0QXNzZXRJZAULYmFzZUFzc2V0SWQEDG1pbk91dEFtb3VudAAACQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQD8BwQFC3Bvb2xBZGRyZXNzAhV1bnN0YWtlQW5kR2V0T25lVGtuVjIJAMwIAgUNdW5zdGFrZUFtb3VudAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUKb3V0QXNzZXRJZAkAzAgCBQxtaW5PdXRBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAUEdW5pdAkBB3dyYXBFcnIBAiRpbnZhbGlkIHVuc3Rha2VBbmRHZXRPbmVUa25WMiByZXN1bHQDCQAAAgUPYmFzZUFzc2V0QW1vdW50BQ9iYXNlQXNzZXRBbW91bnQEDnNoYXJlQXNzZXRCdXJuAwkAAAIIBQ5zaGFyZUFzc2V0SW5mbwZpc3N1ZXIFBHRoaXMJAPwHBAUEdGhpcwIEYnVybgkAzAgCBQxzaGFyZUFzc2V0SWQJAMwIAgUZc2hhcmVBc3NldEFtb3VudFRvQ29udmVydAUDbmlsBQNuaWwDCQAAAggFDnNoYXJlQXNzZXRJbmZvBmlzc3VlcgURbHBTdGFraW5nQ29udHJhY3QJAPwHBAURbHBTdGFraW5nQ29udHJhY3QCBGJ1cm4JAMwIAgUMc2hhcmVBc3NldElkCQDMCAIFGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFA25pbAUDbmlsCQEIdGhyb3dFcnIBAhppbnZhbGlkIHNoYXJlIGFzc2V0IGlzc3VlcgMJAAACBQ5zaGFyZUFzc2V0QnVybgUOc2hhcmVBc3NldEJ1cm4ECHByaWNlR2V0CQC9AgQJALYCAQUPYmFzZUFzc2V0QW1vdW50BQ1zY2FsZTE4QmlnSW50CQC2AgEFGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFBUZMT09SBBVwcmljZUdldFVwZGF0ZUFjdGlvbnMJAMwIAgkBC0JpbmFyeUVudHJ5AgkBEWtleVByaWNlUGVyaW9kR2V0AgULYmFzZUFzc2V0SWQFBnBlcmlvZAkAnQMBBQhwcmljZUdldAkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5UHJpY2VHZXRIaXN0b3J5AQULYmFzZUFzc2V0SWQJAKYDAQUIcHJpY2VHZXQFA25pbAUVcHJpY2VHZXRVcGRhdGVBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUKZ2V0QWN0aW9ucwUKZ2V0QWN0aW9ucwQKcHV0QWN0aW9ucwMJAGYCBRhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQAAAQNbHBBc3NldEFtb3VudAQMbWluT3V0QW1vdW50AAAECWF1dG9TdGFrZQYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAULcG9vbEFkZHJlc3MCC3B1dE9uZVRrblYyCQDMCAIFDG1pbk91dEFtb3VudAkAzAgCBQlhdXRvU3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULYmFzZUFzc2V0SWQFGGJhc2VBc3NldEFtb3VudFRvQ29udmVydAUDbmlsAwkAAQIFAUACA0ludAUBQAUEdW5pdAkBB3dyYXBFcnIBAhppbnZhbGlkIHB1dE9uZVRrblYyIHJlc3VsdAMJAAACBQ1scEFzc2V0QW1vdW50BQ1scEFzc2V0QW1vdW50BAVwcmljZQkBCWNhbGNQcmljZQIFCWxwQXNzZXRJZAUMc2hhcmVBc3NldElkAwkAAAIFBXByaWNlBQVwcmljZQQQc2hhcmVBc3NldEFtb3VudAkAoAMBCQC9AgQJALYCAQUNbHBBc3NldEFtb3VudAUNc2NhbGUxOEJpZ0ludAUFcHJpY2UFBUZMT09SBBFzaGFyZUFzc2V0UmVpc3N1ZQMJAAACCAUOc2hhcmVBc3NldEluZm8GaXNzdWVyBQR0aGlzCQD8BwQFBHRoaXMCBGVtaXQJAMwIAgUMc2hhcmVBc3NldElkCQDMCAIFEHNoYXJlQXNzZXRBbW91bnQFA25pbAUDbmlsAwkAAAIIBQ5zaGFyZUFzc2V0SW5mbwZpc3N1ZXIFEWxwU3Rha2luZ0NvbnRyYWN0CQD8BwQFEWxwU3Rha2luZ0NvbnRyYWN0AgRlbWl0CQDMCAIFDHNoYXJlQXNzZXRJZAkAzAgCBRBzaGFyZUFzc2V0QW1vdW50BQNuaWwFA25pbAkBCHRocm93RXJyAQIaaW52YWxpZCBzaGFyZSBhc3NldCBpc3N1ZXIDCQAAAgURc2hhcmVBc3NldFJlaXNzdWUFEXNoYXJlQXNzZXRSZWlzc3VlBAhwcmljZVB1dAkAvAIDCQC2AgEFGGJhc2VBc3NldEFtb3VudFRvQ29udmVydAUNc2NhbGUxOEJpZ0ludAkAtgIBBRBzaGFyZUFzc2V0QW1vdW50BBVwcmljZVB1dFVwZGF0ZUFjdGlvbnMJAMwIAgkBC0JpbmFyeUVudHJ5AgkBEWtleVByaWNlUGVyaW9kUHV0AgULYmFzZUFzc2V0SWQFBnBlcmlvZAkAnQMBBQhwcmljZVB1dAkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5UHJpY2VQdXRIaXN0b3J5AQULYmFzZUFzc2V0SWQJAKYDAQUIcHJpY2VQdXQFA25pbAUVcHJpY2VQdXRVcGRhdGVBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUKcHV0QWN0aW9ucwUKcHV0QWN0aW9ucwQJbmV3UGVyaW9kCQBkAgUGcGVyaW9kAAEECWxhc3RQcmljZQkBCWNhbGNQcmljZQIFCWxwQXNzZXRJZAUMc2hhcmVBc3NldElkBAdhY3Rpb25zCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVBlcmlvZAEFC2Jhc2VBc3NldElkBQluZXdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlQZXJpb2RTdGFydEhlaWdodAIFC2Jhc2VBc3NldElkBQluZXdQZXJpb2QFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGtleVNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5QmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AQULYmFzZUFzc2V0SWQAAAkAzAgCCQELQmluYXJ5RW50cnkCCQEOa2V5UHJpY2VQZXJpb2QCBQtiYXNlQXNzZXRJZAUGcGVyaW9kCQCdAwEFCWxhc3RQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UHJpY2VIaXN0b3J5AQULYmFzZUFzc2V0SWQJAKYDAQUJbGFzdFByaWNlBQNuaWwFCnB1dEFjdGlvbnMFCmdldEFjdGlvbnMJAJQKAgUHYWN0aW9ucwkAnQMBBQlsYXN0UHJpY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXnwo/mk", "chainId": 84, "height": 2403024, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7BdaSHDCRUgc7XzSuat1P1rDJWjVzZCNdvVY9DkzqanA Next: GRmwVoE47idkiEzX845B8XUnpK2vGHmmYvKx1CJ25ovy Diff:
OldNewDifferences
279279
280280
281281 @Callable(ai)
282-func create (aS,aT,aU,aV,aW) = {
283- let aX = "LP_STAKING_POOLS"
284- let E = n(aS)
285- let aY = [aj(ai), if (isDefined(aA(E)))
282+func emit (aS,aT) = {
283+ let aN = ah(ai)
284+ if ((aN == aN))
285+ then {
286+ let aU = true
287+ $Tuple2([Reissue(aS, aT, aU)], aT)
288+ }
289+ else throw("Strict value is not equal to itself.")
290+ }
291+
292+
293+
294+@Callable(ai)
295+func burn (aS,aT) = {
296+ let aN = ah(ai)
297+ if ((aN == aN))
298+ then $Tuple2([Burn(aS, aT)], aT)
299+ else throw("Strict value is not equal to itself.")
300+ }
301+
302+
303+
304+@Callable(ai)
305+func create (aV,aW,aX,aY,aZ) = {
306+ let ba = "LP_STAKING_POOLS"
307+ let E = n(aV)
308+ let bb = [aj(ai), if (isDefined(aA(E)))
286309 then true
287310 else h("invalid base asset")]
288- if ((aY == aY))
311+ if ((bb == bb))
289312 then {
290- let aZ = [IntegerEntry(H(E), 0)]
291- if ((aT == ""))
313+ let bc = [IntegerEntry(H(E), 0)]
314+ if ((aW == ""))
292315 then {
293- let ba = 1
294- let bb = Issue(aU, aV, ba, b, true)
295- let bc = calculateAssetId(bb)
296- let bd = Burn(bc, ba)
297- let be = toBase58String(bc)
298- let bf = invoke(as, "createOrUpdate", [be, aW, false], nil)
299- if ((bf == bf))
316+ let bd = 1
317+ let be = Issue(aX, aY, bd, b, true)
318+ let bf = calculateAssetId(be)
319+ let bg = Burn(bf, bd)
320+ let bh = toBase58String(bf)
321+ let bi = invoke(as, "createOrUpdate", [bh, aZ, false], nil)
322+ if ((bi == bi))
300323 then {
301- let bg = invoke(as, "addLabel", [be, aX], nil)
302- if ((bg == bg))
303- then $Tuple2((aZ ++ [bb, bd, StringEntry(D(E), be), StringEntry(F(bc), aS)]), be)
324+ let bj = invoke(as, "addLabel", [bh, ba], nil)
325+ if ((bj == bj))
326+ then $Tuple2((bc ++ [be, bg, StringEntry(D(E), bh), StringEntry(F(bf), aV)]), bh)
304327 else throw("Strict value is not equal to itself.")
305328 }
306329 else throw("Strict value is not equal to itself.")
307330 }
308331 else {
309- let G = fromBase58String(aT)
332+ let G = fromBase58String(aW)
310333 let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
311- let bh = if ((aI.issuer == ao))
334+ let bk = if ((aI.issuer == ao))
312335 then true
313336 else h("invalid share asset id issuer")
314- if ((bh == bh))
315- then $Tuple2((aZ ++ [StringEntry(D(E), aT), StringEntry(D(G), aS)]), aT)
337+ if ((bk == bk))
338+ then $Tuple2((bc ++ [StringEntry(D(E), aW), StringEntry(D(G), aV)]), aW)
316339 else throw("Strict value is not equal to itself.")
317340 }
318341 }
323346
324347 @Callable(ai)
325348 func put () = {
326- let bi = if ((size(ai.payments) == 1))
349+ let bl = if ((size(ai.payments) == 1))
327350 then ai.payments[0]
328351 else h("exactly 1 payment is expected")
329- let E = bi.assetId
352+ let E = bl.assetId
330353 let N = ai.caller
331- let aY = [am(ai), if (isDefined(getString(D(E))))
354+ let bb = [am(ai), if (isDefined(getString(D(E))))
332355 then true
333356 else h("invalid asset")]
334- if ((aY == aY))
357+ if ((bb == bb))
335358 then {
336- let bj = valueOrErrorMessage(aA(E), f("invalid asset"))
337- let bk = bj._1
338- let aH = bj._2
359+ let bm = valueOrErrorMessage(aA(E), f("invalid asset"))
360+ let bn = bm._1
361+ let aH = bm._2
339362 let J = value(getInteger(H(E)))
340- let bl = getInteger(O(E, N))
341- let bm = if ((bl == unit))
363+ let bo = getInteger(O(E, N))
364+ let bp = if ((bo == unit))
342365 then unit
343366 else {
344- let bn = value(bl)
345- if ((bn == J))
367+ let bq = value(bo)
368+ if ((bq == J))
346369 then unit
347370 else invoke(this, "claimShareAsset", [p(E), toString(N)], nil)
348371 }
349- if ((bm == bm))
372+ if ((bp == bp))
350373 then {
351- let bo = valueOrElse(getInteger(K(E)), 0)
352- let bp = valueOrElse(getInteger(M(E, N)), 0)
353- $Tuple2([IntegerEntry(K(E), (bo + bi.amount)), IntegerEntry(M(E, N), (bp + bi.amount)), IntegerEntry(O(E, N), J), IntegerEntry(X(E, "put", J, N, ai.transactionId), bi.amount)], unit)
374+ let br = valueOrElse(getInteger(K(E)), 0)
375+ let bs = valueOrElse(getInteger(M(E, N)), 0)
376+ $Tuple2([IntegerEntry(K(E), (br + bl.amount)), IntegerEntry(M(E, N), (bs + bl.amount)), IntegerEntry(O(E, N), J), IntegerEntry(X(E, "put", J, N, ai.transactionId), bl.amount)], unit)
354377 }
355378 else throw("Strict value is not equal to itself.")
356379 }
360383
361384
362385 @Callable(ai)
363-func claimShareAsset (aS,bq) = {
364- let aY = [am(ai)]
365- if ((aY == aY))
386+func claimShareAsset (aV,bt) = {
387+ let bb = [am(ai)]
388+ if ((bb == bb))
366389 then {
367- let N = if ((bq == ""))
390+ let N = if ((bt == ""))
368391 then ai.caller
369392 else {
370393 let aN = ah(ai)
371394 if ((aN == aN))
372- then valueOrErrorMessage(addressFromString(bq), f("invalid user address"))
395+ then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
373396 else throw("Strict value is not equal to itself.")
374397 }
375398 if ((N == N))
376399 then {
377- let E = n(aS)
400+ let E = n(aV)
378401 let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
379402 if ((G == G))
380403 then {
381404 let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
382405 if ((J == J))
383406 then {
384- let bp = valueOrElse(getInteger(M(E, N)), 0)
385- let br = if ((bp > 0))
407+ let bs = valueOrElse(getInteger(M(E, N)), 0)
408+ let bu = if ((bs > 0))
386409 then true
387410 else h("nothing to claim")
388- if ((br == br))
411+ if ((bu == bu))
389412 then {
390- let bn = valueOrErrorMessage(getInteger(O(E, N)), f("failed to get period"))
391- let bs = if ((J > bn))
413+ let bq = valueOrErrorMessage(getInteger(O(E, N)), f("failed to get period"))
414+ let bv = if ((J > bq))
392415 then true
393416 else h("invalid period")
394- if ((bs == bs))
417+ if ((bv == bv))
395418 then {
396- let aL = toBigInt(valueOrErrorMessage(getBinary(T(E, bn)), f("failed to get price")))
397- let bt = toInt(fraction(toBigInt(bp), e, aL))
398- $Tuple2([IntegerEntry(M(E, N), 0), ScriptTransfer(N, bt, G), IntegerEntry(X(E, "claimShareAsset", J, N, ai.transactionId), bt)], unit)
419+ let aL = toBigInt(valueOrErrorMessage(getBinary(T(E, bq)), f("failed to get price")))
420+ let bw = toInt(fraction(toBigInt(bs), e, aL))
421+ $Tuple2([IntegerEntry(M(E, N), 0), ScriptTransfer(N, bw, G), IntegerEntry(X(E, "claimShareAsset", J, N, ai.transactionId), bw)], unit)
399422 }
400423 else throw("Strict value is not equal to itself.")
401424 }
414437
415438 @Callable(ai)
416439 func get () = {
417- let aY = [am(ai)]
418- if ((aY == aY))
440+ let bb = [am(ai)]
441+ if ((bb == bb))
419442 then {
420- let bi = if ((size(ai.payments) == 1))
443+ let bl = if ((size(ai.payments) == 1))
421444 then ai.payments[0]
422445 else h("exactly 1 payment is expected")
423- let G = bi.assetId
446+ let G = bl.assetId
424447 let E = value(n(valueOrErrorMessage(getString(F(G)), f("invalid share asset id"))))
425448 if ((E == E))
426449 then {
427450 let N = ai.caller
428- let bu = valueOrErrorMessage(aA(E), f("invalid asset"))
429- let bk = bu._1
430- let aH = bu._2
451+ let bx = valueOrErrorMessage(aA(E), f("invalid asset"))
452+ let bn = bx._1
453+ let aH = bx._2
431454 let J = value(getInteger(H(E)))
432- let bv = getInteger(Q(E, N))
433- let bw = if ((bv == unit))
455+ let by = getInteger(Q(E, N))
456+ let bz = if ((by == unit))
434457 then unit
435458 else {
436- let bx = value(bv)
437- if ((bx == J))
459+ let bA = value(by)
460+ if ((bA == J))
438461 then unit
439462 else invoke(this, "claimBaseAsset", [N], nil)
440463 }
441- if ((bw == bw))
464+ if ((bz == bz))
442465 then {
443- let by = valueOrElse(getInteger(L(E)), 0)
444- let bz = valueOrElse(getInteger(P(E, N)), 0)
445- $Tuple2([IntegerEntry(L(E), (by + bi.amount)), IntegerEntry(P(E, N), (bz + bi.amount)), IntegerEntry(Q(E, N), J), IntegerEntry(X(E, "get", J, N, ai.transactionId), bi.amount)], unit)
466+ let bB = valueOrElse(getInteger(L(E)), 0)
467+ let bC = valueOrElse(getInteger(P(E, N)), 0)
468+ $Tuple2([IntegerEntry(L(E), (bB + bl.amount)), IntegerEntry(P(E, N), (bC + bl.amount)), IntegerEntry(Q(E, N), J), IntegerEntry(X(E, "get", J, N, ai.transactionId), bl.amount)], unit)
446469 }
447470 else throw("Strict value is not equal to itself.")
448471 }
454477
455478
456479 @Callable(ai)
457-func claimBaseAsset (aS,bq) = {
458- let aY = [am(ai)]
459- if ((aY == aY))
480+func claimBaseAsset (aV,bt) = {
481+ let bb = [am(ai)]
482+ if ((bb == bb))
460483 then {
461- let N = if ((bq == ""))
484+ let N = if ((bt == ""))
462485 then ai.caller
463486 else {
464487 let aN = ah(ai)
465488 if ((aN == aN))
466- then valueOrErrorMessage(addressFromString(bq), f("invalid user address"))
489+ then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
467490 else throw("Strict value is not equal to itself.")
468491 }
469492 if ((N == N))
470493 then {
471- let E = n(aS)
494+ let E = n(aV)
472495 let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
473496 if ((G == G))
474497 then {
475498 let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
476499 if ((J == J))
477500 then {
478- let bz = valueOrElse(getInteger(P(E, N)), 0)
479- let br = if ((bz > 0))
501+ let bC = valueOrElse(getInteger(P(E, N)), 0)
502+ let bu = if ((bC > 0))
480503 then true
481504 else h("nothing to claim")
482- if ((br == br))
505+ if ((bu == bu))
483506 then {
484- let bx = valueOrErrorMessage(getInteger(Q(E, N)), f("failed to get period"))
485- let bs = if ((J > bx))
507+ let bA = valueOrErrorMessage(getInteger(Q(E, N)), f("failed to get period"))
508+ let bv = if ((J > bA))
486509 then true
487510 else h("invalid period")
488- if ((bs == bs))
511+ if ((bv == bv))
489512 then {
490- let aL = toBigInt(valueOrErrorMessage(getBinary(V(E, bx)), f("failed to get price")))
491- let bA = toInt(fraction(toBigInt(bz), aL, e))
492- $Tuple2([IntegerEntry(P(E, N), 0), ScriptTransfer(N, bA, E), IntegerEntry(X(E, "claimBaseAsset", J, N, ai.transactionId), bA)], unit)
513+ let aL = toBigInt(valueOrErrorMessage(getBinary(V(E, bA)), f("failed to get price")))
514+ let bD = toInt(fraction(toBigInt(bC), aL, e))
515+ $Tuple2([IntegerEntry(P(E, N), 0), ScriptTransfer(N, bD, E), IntegerEntry(X(E, "claimBaseAsset", J, N, ai.transactionId), bD)], unit)
493516 }
494517 else throw("Strict value is not equal to itself.")
495518 }
507530
508531
509532 @Callable(ai)
510-func finalize (aS) = {
511- let aY = [am(ai)]
512- if ((aY == aY))
533+func finalize (aV) = {
534+ let bb = [am(ai)]
535+ if ((bb == bb))
513536 then {
514- let E = n(aS)
537+ let E = n(aV)
515538 let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
516539 if ((G == G))
517540 then {
541+ let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
518542 let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
519543 if ((J == J))
520544 then {
521- let bB = getInteger(I(E, J))
522- let bC = if ((bB == unit))
545+ let bE = getInteger(I(E, J))
546+ let bF = if ((bE == unit))
523547 then unit
524548 else {
525- let bD = (height - value(bB))
526- let bE = max([0, (aw - bD)])
527- if ((bE == 0))
549+ let bG = (height - value(bE))
550+ let bH = max([0, (aw - bG)])
551+ if ((bH == 0))
528552 then unit
529- else h(makeString(["finalization will be possible in ", toString(bE), " blocks"], ""))
553+ else h(makeString(["finalization will be possible in ", toString(bH), " blocks"], ""))
530554 }
531- if ((bC == bC))
555+ if ((bF == bF))
532556 then {
533- let bF = valueOrErrorMessage(aA(E), f("invalid asset"))
534- let bk = bF._1
535- let aH = bF._2
536- let bG = valueOrErrorMessage({
557+ let bI = valueOrErrorMessage(aA(E), f("invalid asset"))
558+ let bn = bI._1
559+ let aH = bI._2
560+ let bJ = valueOrErrorMessage({
537561 let aF = invoke(ap, "claimWxDoNotThrow", [p(aH)], nil)
538562 if ($isInstanceOf(aF, "Int"))
539563 then aF
540564 else unit
541565 }, f("invalid claimWx result"))
542- if ((bG == bG))
566+ if ((bJ == bJ))
543567 then {
544- let bo = valueOrElse(getInteger(K(E)), 0)
545- let by = valueOrElse(getInteger(L(E)), 0)
546- let bH = {
547- let bI = if (if ((bG > 0))
568+ let br = valueOrElse(getInteger(K(E)), 0)
569+ let bB = valueOrElse(getInteger(L(E)), 0)
570+ let bK = {
571+ let bL = if (if ((bJ > 0))
548572 then true
549- else (bo > 0))
573+ else (br > 0))
550574 then true
551- else (by > 0)
552- if (bI)
575+ else (bB > 0)
576+ if (bL)
553577 then true
554578 else h("nothing to finalize")
555579 }
556- if ((bH == bH))
580+ if ((bK == bK))
557581 then {
558- let bJ = if ((bG > 0))
582+ let bM = if ((bJ > 0))
559583 then {
560- let bK = fraction(bG, az, ax)
561- let bL = (bG - bK)
562- let bM = invoke(aq, "userMaxDurationREADONLY", [toString(this)], nil)
563- let bN = if ((bK > 0))
584+ let bN = fraction(bJ, az, ax)
585+ let bO = (bJ - bN)
586+ let bP = invoke(aq, "userMaxDurationREADONLY", [toString(this)], nil)
587+ let bQ = if ((bN > 0))
564588 then {
565- let ad = bM
589+ let ad = bP
566590 if (if (if ($isInstanceOf(ad._1, "String"))
567591 then $isInstanceOf(ad._2, "Int")
568592 else false)
569593 then $isInstanceOf(ad, "(String, Int)")
570594 else false)
571595 then {
572- let bO = ad._1
573- let bP = ad._2
574- if ((bK > 0))
575- then invoke(aq, bO, [bP], [AttachedPayment(au, bK)])
596+ let bR = ad._1
597+ let bS = ad._2
598+ if ((bN > 0))
599+ then invoke(aq, bR, [bS], [AttachedPayment(au, bN)])
576600 else unit
577601 }
578602 else h("invalid lock params")
579603 }
580604 else unit
581- if ((bN == bN))
605+ if ((bQ == bQ))
582606 then {
583- let bQ = if ((bL > 0))
607+ let bT = if ((bO > 0))
584608 then {
585- let bR = au
586- let bS = 0
587- let bT = p(at)
588- let bU = ""
609+ let bU = au
610+ let bV = 0
611+ let bW = p(at)
612+ let bX = ""
589613 valueOrErrorMessage({
590- let aF = invoke(ar, "swap", [bS, bT, bU], [AttachedPayment(bR, bL)])
614+ let aF = invoke(ar, "swap", [bV, bW, bX], [AttachedPayment(bU, bO)])
591615 if ($isInstanceOf(aF, "Int"))
592616 then aF
593617 else unit
594618 }, f("invalid swap result"))
595619 }
596620 else 0
597- if ((bQ == bQ))
621+ if ((bT == bT))
598622 then {
599- let bV = if ((bQ > 0))
623+ let bY = if ((bT > 0))
600624 then {
601- let bW = 0
602- let bX = true
625+ let bZ = 0
626+ let ca = true
603627 valueOrErrorMessage({
604- let aF = invoke(bk, "putOneTknV2", [bW, bX], [AttachedPayment(at, bQ)])
628+ let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(at, bT)])
605629 if ($isInstanceOf(aF, "Int"))
606630 then aF
607631 else unit
608632 }, f("invalid putOneTknV2 result"))
609633 }
610634 else 0
611- if ((bV == bV))
612- then bV
635+ if ((bY == bY))
636+ then bY
613637 else throw("Strict value is not equal to itself.")
614638 }
615639 else throw("Strict value is not equal to itself.")
617641 else throw("Strict value is not equal to itself.")
618642 }
619643 else unit
620- if ((bJ == bJ))
644+ if ((bM == bM))
621645 then {
622- let bY = if ((by > 0))
646+ let cb = if ((bB > 0))
623647 then {
624648 let aL = aG(aH, G)
625649 if ((aL == aL))
626650 then {
627- let bZ = toInt(fraction(toBigInt(by), aL, e, FLOOR))
628- let bA = {
629- let ca = E
630- let bW = 0
651+ let cc = toInt(fraction(toBigInt(bB), aL, e, FLOOR))
652+ let bD = {
653+ let cd = E
654+ let bZ = 0
631655 valueOrErrorMessage({
632- let aF = invoke(bk, "unstakeAndGetOneTknV2", [bZ, p(ca), bW], nil)
656+ let aF = invoke(bn, "unstakeAndGetOneTknV2", [cc, p(cd), bZ], nil)
633657 if ($isInstanceOf(aF, "Int"))
634658 then aF
635659 else unit
636660 }, f("invalid unstakeAndGetOneTknV2 result"))
637661 }
638- if ((bA == bA))
662+ if ((bD == bD))
639663 then {
640- let cb = [Burn(G, by)]
641- let cc = fraction(toBigInt(bA), e, toBigInt(by), FLOOR)
642- let cd = [BinaryEntry(V(E, J), toBytes(cc)), StringEntry(W(E), toString(cc))]
643- (cb ++ cd)
664+ let ce = if ((aI.issuer == this))
665+ then invoke(this, "burn", [G, bB], nil)
666+ else if ((aI.issuer == ao))
667+ then invoke(ao, "burn", [G, bB], nil)
668+ else h("invalid share asset issuer")
669+ if ((ce == ce))
670+ then {
671+ let cf = fraction(toBigInt(bD), e, toBigInt(bB), FLOOR)
672+ let cg = [BinaryEntry(V(E, J), toBytes(cf)), StringEntry(W(E), toString(cf))]
673+ cg
674+ }
675+ else throw("Strict value is not equal to itself.")
644676 }
645677 else throw("Strict value is not equal to itself.")
646678 }
647679 else throw("Strict value is not equal to itself.")
648680 }
649681 else nil
650- let ce = if ((bo > 0))
682+ if ((cb == cb))
651683 then {
652- let bV = {
653- let bW = 0
654- let bX = true
655- valueOrErrorMessage({
656- let aF = invoke(bk, "putOneTknV2", [bW, bX], [AttachedPayment(E, bo)])
657- if ($isInstanceOf(aF, "Int"))
658- then aF
659- else unit
660- }, f("invalid putOneTknV2 result"))
661- }
662- if ((bV == bV))
684+ let ch = if ((br > 0))
663685 then {
664- let aL = aG(aH, G)
665- if ((aL == aL))
686+ let bY = {
687+ let bZ = 0
688+ let ca = true
689+ valueOrErrorMessage({
690+ let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(E, br)])
691+ if ($isInstanceOf(aF, "Int"))
692+ then aF
693+ else unit
694+ }, f("invalid putOneTknV2 result"))
695+ }
696+ if ((bY == bY))
666697 then {
667- let bt = toInt(fraction(toBigInt(bV), e, aL, FLOOR))
668- let cf = true
669- let cg = [Reissue(G, bt, cf)]
670- let ch = fraction(toBigInt(bo), e, toBigInt(bt))
671- let ci = [BinaryEntry(T(E, J), toBytes(ch)), StringEntry(U(E), toString(ch))]
672- (cg ++ ci)
698+ let aL = aG(aH, G)
699+ if ((aL == aL))
700+ then {
701+ let bw = toInt(fraction(toBigInt(bY), e, aL, FLOOR))
702+ let ci = if ((aI.issuer == this))
703+ then invoke(this, "emit", [G, bw], nil)
704+ else if ((aI.issuer == ao))
705+ then invoke(ao, "emit", [G, bw], nil)
706+ else h("invalid share asset issuer")
707+ if ((ci == ci))
708+ then {
709+ let cj = fraction(toBigInt(br), e, toBigInt(bw))
710+ let ck = [BinaryEntry(T(E, J), toBytes(cj)), StringEntry(U(E), toString(cj))]
711+ ck
712+ }
713+ else throw("Strict value is not equal to itself.")
714+ }
715+ else throw("Strict value is not equal to itself.")
673716 }
674717 else throw("Strict value is not equal to itself.")
675718 }
719+ else nil
720+ if ((ch == ch))
721+ then {
722+ let cl = (J + 1)
723+ let cm = aG(aH, G)
724+ let cn = (([IntegerEntry(H(E), cl), IntegerEntry(I(E, cl), height), IntegerEntry(L(E), 0), IntegerEntry(K(E), 0), BinaryEntry(R(E, J), toBytes(cm)), StringEntry(S(E), toString(cm))] ++ ch) ++ cb)
725+ $Tuple2(cn, toBytes(cm))
726+ }
676727 else throw("Strict value is not equal to itself.")
677728 }
678- else nil
679- let cj = (J + 1)
680- let ck = aG(aH, G)
681- let cl = (([IntegerEntry(H(E), cj), IntegerEntry(I(E, cj), height), IntegerEntry(L(E), 0), IntegerEntry(K(E), 0), BinaryEntry(R(E, J), toBytes(ck)), StringEntry(S(E), toString(ck))] ++ ce) ++ bY)
682- $Tuple2(cl, toBytes(ck))
729+ else throw("Strict value is not equal to itself.")
683730 }
684731 else throw("Strict value is not equal to itself.")
685732 }
697744 }
698745
699746
700-@Verifier(cm)
701-func cn () = {
702- let co = {
747+@Verifier(co)
748+func cp () = {
749+ let cq = {
703750 let ad = ac()
704751 if ($isInstanceOf(ad, "ByteVector"))
705752 then {
707754 ak
708755 }
709756 else if ($isInstanceOf(ad, "Unit"))
710- then cm.senderPublicKey
757+ then co.senderPublicKey
711758 else throw("Match error")
712759 }
713- sigVerify(cm.bodyBytes, cm.proofs[0], co)
760+ sigVerify(co.bodyBytes, co.proofs[0], cq)
714761 }
715762
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = "WAVES"
99
1010 let d = 1000000000000000000
1111
1212 let e = toBigInt(d)
1313
1414 func f (g) = makeString(["lp_staking_pools.ride:", g], " ")
1515
1616
1717 func h (g) = throw(f(g))
1818
1919
2020 func i (j,k) = f(makeString(["mandatory ", toString(j), ".", k, " is not defined"], ""))
2121
2222
2323 func l (j,k) = valueOrErrorMessage(getString(j, k), i(j, k))
2424
2525
2626 func m (j,k) = valueOrErrorMessage(getInteger(j, k), i(j, k))
2727
2828
2929 func n (o) = if ((o == c))
3030 then unit
3131 else fromBase58String(o)
3232
3333
3434 func p (o) = if ((o == unit))
3535 then c
3636 else toBase58String(value(o))
3737
3838
3939 func q (r) = if ((r >= 0))
4040 then r
4141 else h("value should be positive")
4242
4343
4444 func s () = makeString(["%s", "factoryContract"], a)
4545
4646
4747 func t () = makeString(["%s", "lpStakingContract"], a)
4848
4949
5050 func u () = makeString(["%s", "stakingContract"], a)
5151
5252
5353 func v () = makeString(["%s", "boostingContract"], a)
5454
5555
5656 func w () = makeString(["%s", "swapContract"], a)
5757
5858
5959 func x () = makeString(["%s", "assetsStoreContract"], a)
6060
6161
6262 func y () = makeString(["%s", "usdnAssetId"], a)
6363
6464
6565 func z () = makeString(["%s", "wxAssetId"], a)
6666
6767
6868 func A () = makeString(["%s", "shutdown"], a)
6969
7070
7171 func B () = makeString(["%s", "minDelay"], a)
7272
7373
7474 func C () = makeString(["%s", "lockFraction"], a)
7575
7676
7777 func D (E) = makeString(["%s%s", p(E), "shareAssetId"], a)
7878
7979
8080 func F (G) = makeString(["%s%s", p(G), "baseAssetId"], a)
8181
8282
8383 func H (E) = makeString(["%s%s", p(E), "period"], a)
8484
8585
8686 func I (E,J) = makeString(["%s%s%d", p(E), "periodStartHeight", toString(J)], a)
8787
8888
8989 func K (E) = makeString(["%s%s", p(E), "baseAssetAmountToConvert"], a)
9090
9191
9292 func L (E) = makeString(["%s%s", p(E), "shareAssetAmountToConvert"], a)
9393
9494
9595 func M (E,N) = makeString(["%s%s%s", p(E), toString(N), "baseAssetAmountToConvert"], a)
9696
9797
9898 func O (E,N) = makeString(["%s%s%s%s", p(E), toString(N), "baseAssetAmountToConvert", "period"], a)
9999
100100
101101 func P (E,N) = makeString(["%s%s%s", p(E), toString(N), "shareAssetAmountToConvert"], a)
102102
103103
104104 func Q (E,N) = makeString(["%s%s%s%s", p(E), toString(N), "shareAssetAmountToConvert", "period"], a)
105105
106106
107107 func R (E,J) = makeString(["%s%s%d", p(E), "price", toString(J)], a)
108108
109109
110110 func S (E) = makeString(["%s%s%s%d%d", p(E), "price", "history", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
111111
112112
113113 func T (E,J) = makeString(["%s%s%d%s", p(E), "price", toString(J), "put"], a)
114114
115115
116116 func U (E) = makeString(["%s%s%s%s%d%d", p(E), "price", "history", "put", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
117117
118118
119119 func V (E,J) = makeString(["%s%s%d%s", p(E), "price", toString(J), "get"], a)
120120
121121
122122 func W (E) = makeString(["%s%s%s%s%d%d", p(E), "price", "history", "get", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
123123
124124
125125 func X (E,Y,J,N,Z) = makeString(["%s%s%s%s", "history", Y, toString(N), toBase58String(Z), toString(height)], a)
126126
127127
128128 func aa () = "%s__managerPublicKey"
129129
130130
131131 func ab () = "%s__pendingManagerPublicKey"
132132
133133
134134 func ac () = {
135135 let ad = getString(aa())
136136 if ($isInstanceOf(ad, "String"))
137137 then {
138138 let ae = ad
139139 fromBase58String(ae)
140140 }
141141 else if ($isInstanceOf(ad, "Unit"))
142142 then unit
143143 else throw("Match error")
144144 }
145145
146146
147147 func af () = {
148148 let ad = getString(ab())
149149 if ($isInstanceOf(ad, "String"))
150150 then {
151151 let ae = ad
152152 fromBase58String(ae)
153153 }
154154 else if ($isInstanceOf(ad, "Unit"))
155155 then unit
156156 else throw("Match error")
157157 }
158158
159159
160160 let ag = throw("Permission denied")
161161
162162 func ah (ai) = if ((ai.caller == this))
163163 then true
164164 else ag
165165
166166
167167 func aj (ai) = {
168168 let ad = ac()
169169 if ($isInstanceOf(ad, "ByteVector"))
170170 then {
171171 let ak = ad
172172 if ((ai.callerPublicKey == ak))
173173 then true
174174 else ag
175175 }
176176 else if ($isInstanceOf(ad, "Unit"))
177177 then ah(ai)
178178 else throw("Match error")
179179 }
180180
181181
182182 let al = valueOrElse(getBoolean(A()), false)
183183
184184 func am (ai) = if (if (!(al))
185185 then true
186186 else aj(ai))
187187 then true
188188 else throw("operation is disabled")
189189
190190
191191 let an = addressFromStringValue(l(this, s()))
192192
193193 let ao = addressFromStringValue(l(this, t()))
194194
195195 let ap = addressFromStringValue(l(this, u()))
196196
197197 let aq = addressFromStringValue(l(this, v()))
198198
199199 let ar = addressFromStringValue(l(this, w()))
200200
201201 let as = addressFromStringValue(l(this, x()))
202202
203203 let at = n(l(this, y()))
204204
205205 let au = n(l(this, z()))
206206
207207 let av = 1440
208208
209209 let aw = valueOrElse(getInteger(this, B()), av)
210210
211211 let ax = 100000000
212212
213213 let ay = fraction(1, ax, 2)
214214
215215 let az = valueOrElse(getInteger(this, C()), ay)
216216
217217 func aA (aB) = {
218218 let aC = p(aB)
219219 let aD = p(at)
220220 let aE = {
221221 let aF = invoke(an, "poolInfoREADONLY", [aC, aD], nil)
222222 if ($isInstanceOf(aF, "(Address, ByteVector)"))
223223 then aF
224224 else unit
225225 }
226226 aE
227227 }
228228
229229
230230 func aG (aH,G) = {
231231 let aI = valueOrErrorMessage(assetInfo(G), "failed to get share asset info")
232232 let aJ = aI.quantity
233233 let aK = q(valueOrErrorMessage({
234234 let aF = invoke(ap, "stakedByUserREADONLY", [p(aH), toString(this)], nil)
235235 if ($isInstanceOf(aF, "Int"))
236236 then aF
237237 else unit
238238 }, f("invalid stakedByUserREADONLY result")))
239239 let aL = if ((aJ == 0))
240240 then e
241241 else fraction(toBigInt(aK), e, toBigInt(aJ), FLOOR)
242242 aL
243243 }
244244
245245
246246 @Callable(ai)
247247 func setManager (aM) = {
248248 let aN = aj(ai)
249249 if ((aN == aN))
250250 then {
251251 let aO = fromBase58String(aM)
252252 if ((aO == aO))
253253 then [StringEntry(ab(), aM)]
254254 else throw("Strict value is not equal to itself.")
255255 }
256256 else throw("Strict value is not equal to itself.")
257257 }
258258
259259
260260
261261 @Callable(ai)
262262 func confirmManager () = {
263263 let aP = af()
264264 let aQ = if (isDefined(aP))
265265 then true
266266 else h("no pending manager")
267267 if ((aQ == aQ))
268268 then {
269269 let aR = if ((ai.callerPublicKey == value(aP)))
270270 then true
271271 else h("you are not pending manager")
272272 if ((aR == aR))
273273 then [StringEntry(aa(), toBase58String(value(aP))), DeleteEntry(ab())]
274274 else throw("Strict value is not equal to itself.")
275275 }
276276 else throw("Strict value is not equal to itself.")
277277 }
278278
279279
280280
281281 @Callable(ai)
282-func create (aS,aT,aU,aV,aW) = {
283- let aX = "LP_STAKING_POOLS"
284- let E = n(aS)
285- let aY = [aj(ai), if (isDefined(aA(E)))
282+func emit (aS,aT) = {
283+ let aN = ah(ai)
284+ if ((aN == aN))
285+ then {
286+ let aU = true
287+ $Tuple2([Reissue(aS, aT, aU)], aT)
288+ }
289+ else throw("Strict value is not equal to itself.")
290+ }
291+
292+
293+
294+@Callable(ai)
295+func burn (aS,aT) = {
296+ let aN = ah(ai)
297+ if ((aN == aN))
298+ then $Tuple2([Burn(aS, aT)], aT)
299+ else throw("Strict value is not equal to itself.")
300+ }
301+
302+
303+
304+@Callable(ai)
305+func create (aV,aW,aX,aY,aZ) = {
306+ let ba = "LP_STAKING_POOLS"
307+ let E = n(aV)
308+ let bb = [aj(ai), if (isDefined(aA(E)))
286309 then true
287310 else h("invalid base asset")]
288- if ((aY == aY))
311+ if ((bb == bb))
289312 then {
290- let aZ = [IntegerEntry(H(E), 0)]
291- if ((aT == ""))
313+ let bc = [IntegerEntry(H(E), 0)]
314+ if ((aW == ""))
292315 then {
293- let ba = 1
294- let bb = Issue(aU, aV, ba, b, true)
295- let bc = calculateAssetId(bb)
296- let bd = Burn(bc, ba)
297- let be = toBase58String(bc)
298- let bf = invoke(as, "createOrUpdate", [be, aW, false], nil)
299- if ((bf == bf))
316+ let bd = 1
317+ let be = Issue(aX, aY, bd, b, true)
318+ let bf = calculateAssetId(be)
319+ let bg = Burn(bf, bd)
320+ let bh = toBase58String(bf)
321+ let bi = invoke(as, "createOrUpdate", [bh, aZ, false], nil)
322+ if ((bi == bi))
300323 then {
301- let bg = invoke(as, "addLabel", [be, aX], nil)
302- if ((bg == bg))
303- then $Tuple2((aZ ++ [bb, bd, StringEntry(D(E), be), StringEntry(F(bc), aS)]), be)
324+ let bj = invoke(as, "addLabel", [bh, ba], nil)
325+ if ((bj == bj))
326+ then $Tuple2((bc ++ [be, bg, StringEntry(D(E), bh), StringEntry(F(bf), aV)]), bh)
304327 else throw("Strict value is not equal to itself.")
305328 }
306329 else throw("Strict value is not equal to itself.")
307330 }
308331 else {
309- let G = fromBase58String(aT)
332+ let G = fromBase58String(aW)
310333 let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
311- let bh = if ((aI.issuer == ao))
334+ let bk = if ((aI.issuer == ao))
312335 then true
313336 else h("invalid share asset id issuer")
314- if ((bh == bh))
315- then $Tuple2((aZ ++ [StringEntry(D(E), aT), StringEntry(D(G), aS)]), aT)
337+ if ((bk == bk))
338+ then $Tuple2((bc ++ [StringEntry(D(E), aW), StringEntry(D(G), aV)]), aW)
316339 else throw("Strict value is not equal to itself.")
317340 }
318341 }
319342 else throw("Strict value is not equal to itself.")
320343 }
321344
322345
323346
324347 @Callable(ai)
325348 func put () = {
326- let bi = if ((size(ai.payments) == 1))
349+ let bl = if ((size(ai.payments) == 1))
327350 then ai.payments[0]
328351 else h("exactly 1 payment is expected")
329- let E = bi.assetId
352+ let E = bl.assetId
330353 let N = ai.caller
331- let aY = [am(ai), if (isDefined(getString(D(E))))
354+ let bb = [am(ai), if (isDefined(getString(D(E))))
332355 then true
333356 else h("invalid asset")]
334- if ((aY == aY))
357+ if ((bb == bb))
335358 then {
336- let bj = valueOrErrorMessage(aA(E), f("invalid asset"))
337- let bk = bj._1
338- let aH = bj._2
359+ let bm = valueOrErrorMessage(aA(E), f("invalid asset"))
360+ let bn = bm._1
361+ let aH = bm._2
339362 let J = value(getInteger(H(E)))
340- let bl = getInteger(O(E, N))
341- let bm = if ((bl == unit))
363+ let bo = getInteger(O(E, N))
364+ let bp = if ((bo == unit))
342365 then unit
343366 else {
344- let bn = value(bl)
345- if ((bn == J))
367+ let bq = value(bo)
368+ if ((bq == J))
346369 then unit
347370 else invoke(this, "claimShareAsset", [p(E), toString(N)], nil)
348371 }
349- if ((bm == bm))
372+ if ((bp == bp))
350373 then {
351- let bo = valueOrElse(getInteger(K(E)), 0)
352- let bp = valueOrElse(getInteger(M(E, N)), 0)
353- $Tuple2([IntegerEntry(K(E), (bo + bi.amount)), IntegerEntry(M(E, N), (bp + bi.amount)), IntegerEntry(O(E, N), J), IntegerEntry(X(E, "put", J, N, ai.transactionId), bi.amount)], unit)
374+ let br = valueOrElse(getInteger(K(E)), 0)
375+ let bs = valueOrElse(getInteger(M(E, N)), 0)
376+ $Tuple2([IntegerEntry(K(E), (br + bl.amount)), IntegerEntry(M(E, N), (bs + bl.amount)), IntegerEntry(O(E, N), J), IntegerEntry(X(E, "put", J, N, ai.transactionId), bl.amount)], unit)
354377 }
355378 else throw("Strict value is not equal to itself.")
356379 }
357380 else throw("Strict value is not equal to itself.")
358381 }
359382
360383
361384
362385 @Callable(ai)
363-func claimShareAsset (aS,bq) = {
364- let aY = [am(ai)]
365- if ((aY == aY))
386+func claimShareAsset (aV,bt) = {
387+ let bb = [am(ai)]
388+ if ((bb == bb))
366389 then {
367- let N = if ((bq == ""))
390+ let N = if ((bt == ""))
368391 then ai.caller
369392 else {
370393 let aN = ah(ai)
371394 if ((aN == aN))
372- then valueOrErrorMessage(addressFromString(bq), f("invalid user address"))
395+ then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
373396 else throw("Strict value is not equal to itself.")
374397 }
375398 if ((N == N))
376399 then {
377- let E = n(aS)
400+ let E = n(aV)
378401 let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
379402 if ((G == G))
380403 then {
381404 let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
382405 if ((J == J))
383406 then {
384- let bp = valueOrElse(getInteger(M(E, N)), 0)
385- let br = if ((bp > 0))
407+ let bs = valueOrElse(getInteger(M(E, N)), 0)
408+ let bu = if ((bs > 0))
386409 then true
387410 else h("nothing to claim")
388- if ((br == br))
411+ if ((bu == bu))
389412 then {
390- let bn = valueOrErrorMessage(getInteger(O(E, N)), f("failed to get period"))
391- let bs = if ((J > bn))
413+ let bq = valueOrErrorMessage(getInteger(O(E, N)), f("failed to get period"))
414+ let bv = if ((J > bq))
392415 then true
393416 else h("invalid period")
394- if ((bs == bs))
417+ if ((bv == bv))
395418 then {
396- let aL = toBigInt(valueOrErrorMessage(getBinary(T(E, bn)), f("failed to get price")))
397- let bt = toInt(fraction(toBigInt(bp), e, aL))
398- $Tuple2([IntegerEntry(M(E, N), 0), ScriptTransfer(N, bt, G), IntegerEntry(X(E, "claimShareAsset", J, N, ai.transactionId), bt)], unit)
419+ let aL = toBigInt(valueOrErrorMessage(getBinary(T(E, bq)), f("failed to get price")))
420+ let bw = toInt(fraction(toBigInt(bs), e, aL))
421+ $Tuple2([IntegerEntry(M(E, N), 0), ScriptTransfer(N, bw, G), IntegerEntry(X(E, "claimShareAsset", J, N, ai.transactionId), bw)], unit)
399422 }
400423 else throw("Strict value is not equal to itself.")
401424 }
402425 else throw("Strict value is not equal to itself.")
403426 }
404427 else throw("Strict value is not equal to itself.")
405428 }
406429 else throw("Strict value is not equal to itself.")
407430 }
408431 else throw("Strict value is not equal to itself.")
409432 }
410433 else throw("Strict value is not equal to itself.")
411434 }
412435
413436
414437
415438 @Callable(ai)
416439 func get () = {
417- let aY = [am(ai)]
418- if ((aY == aY))
440+ let bb = [am(ai)]
441+ if ((bb == bb))
419442 then {
420- let bi = if ((size(ai.payments) == 1))
443+ let bl = if ((size(ai.payments) == 1))
421444 then ai.payments[0]
422445 else h("exactly 1 payment is expected")
423- let G = bi.assetId
446+ let G = bl.assetId
424447 let E = value(n(valueOrErrorMessage(getString(F(G)), f("invalid share asset id"))))
425448 if ((E == E))
426449 then {
427450 let N = ai.caller
428- let bu = valueOrErrorMessage(aA(E), f("invalid asset"))
429- let bk = bu._1
430- let aH = bu._2
451+ let bx = valueOrErrorMessage(aA(E), f("invalid asset"))
452+ let bn = bx._1
453+ let aH = bx._2
431454 let J = value(getInteger(H(E)))
432- let bv = getInteger(Q(E, N))
433- let bw = if ((bv == unit))
455+ let by = getInteger(Q(E, N))
456+ let bz = if ((by == unit))
434457 then unit
435458 else {
436- let bx = value(bv)
437- if ((bx == J))
459+ let bA = value(by)
460+ if ((bA == J))
438461 then unit
439462 else invoke(this, "claimBaseAsset", [N], nil)
440463 }
441- if ((bw == bw))
464+ if ((bz == bz))
442465 then {
443- let by = valueOrElse(getInteger(L(E)), 0)
444- let bz = valueOrElse(getInteger(P(E, N)), 0)
445- $Tuple2([IntegerEntry(L(E), (by + bi.amount)), IntegerEntry(P(E, N), (bz + bi.amount)), IntegerEntry(Q(E, N), J), IntegerEntry(X(E, "get", J, N, ai.transactionId), bi.amount)], unit)
466+ let bB = valueOrElse(getInteger(L(E)), 0)
467+ let bC = valueOrElse(getInteger(P(E, N)), 0)
468+ $Tuple2([IntegerEntry(L(E), (bB + bl.amount)), IntegerEntry(P(E, N), (bC + bl.amount)), IntegerEntry(Q(E, N), J), IntegerEntry(X(E, "get", J, N, ai.transactionId), bl.amount)], unit)
446469 }
447470 else throw("Strict value is not equal to itself.")
448471 }
449472 else throw("Strict value is not equal to itself.")
450473 }
451474 else throw("Strict value is not equal to itself.")
452475 }
453476
454477
455478
456479 @Callable(ai)
457-func claimBaseAsset (aS,bq) = {
458- let aY = [am(ai)]
459- if ((aY == aY))
480+func claimBaseAsset (aV,bt) = {
481+ let bb = [am(ai)]
482+ if ((bb == bb))
460483 then {
461- let N = if ((bq == ""))
484+ let N = if ((bt == ""))
462485 then ai.caller
463486 else {
464487 let aN = ah(ai)
465488 if ((aN == aN))
466- then valueOrErrorMessage(addressFromString(bq), f("invalid user address"))
489+ then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
467490 else throw("Strict value is not equal to itself.")
468491 }
469492 if ((N == N))
470493 then {
471- let E = n(aS)
494+ let E = n(aV)
472495 let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
473496 if ((G == G))
474497 then {
475498 let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
476499 if ((J == J))
477500 then {
478- let bz = valueOrElse(getInteger(P(E, N)), 0)
479- let br = if ((bz > 0))
501+ let bC = valueOrElse(getInteger(P(E, N)), 0)
502+ let bu = if ((bC > 0))
480503 then true
481504 else h("nothing to claim")
482- if ((br == br))
505+ if ((bu == bu))
483506 then {
484- let bx = valueOrErrorMessage(getInteger(Q(E, N)), f("failed to get period"))
485- let bs = if ((J > bx))
507+ let bA = valueOrErrorMessage(getInteger(Q(E, N)), f("failed to get period"))
508+ let bv = if ((J > bA))
486509 then true
487510 else h("invalid period")
488- if ((bs == bs))
511+ if ((bv == bv))
489512 then {
490- let aL = toBigInt(valueOrErrorMessage(getBinary(V(E, bx)), f("failed to get price")))
491- let bA = toInt(fraction(toBigInt(bz), aL, e))
492- $Tuple2([IntegerEntry(P(E, N), 0), ScriptTransfer(N, bA, E), IntegerEntry(X(E, "claimBaseAsset", J, N, ai.transactionId), bA)], unit)
513+ let aL = toBigInt(valueOrErrorMessage(getBinary(V(E, bA)), f("failed to get price")))
514+ let bD = toInt(fraction(toBigInt(bC), aL, e))
515+ $Tuple2([IntegerEntry(P(E, N), 0), ScriptTransfer(N, bD, E), IntegerEntry(X(E, "claimBaseAsset", J, N, ai.transactionId), bD)], unit)
493516 }
494517 else throw("Strict value is not equal to itself.")
495518 }
496519 else throw("Strict value is not equal to itself.")
497520 }
498521 else throw("Strict value is not equal to itself.")
499522 }
500523 else throw("Strict value is not equal to itself.")
501524 }
502525 else throw("Strict value is not equal to itself.")
503526 }
504527 else throw("Strict value is not equal to itself.")
505528 }
506529
507530
508531
509532 @Callable(ai)
510-func finalize (aS) = {
511- let aY = [am(ai)]
512- if ((aY == aY))
533+func finalize (aV) = {
534+ let bb = [am(ai)]
535+ if ((bb == bb))
513536 then {
514- let E = n(aS)
537+ let E = n(aV)
515538 let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
516539 if ((G == G))
517540 then {
541+ let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
518542 let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
519543 if ((J == J))
520544 then {
521- let bB = getInteger(I(E, J))
522- let bC = if ((bB == unit))
545+ let bE = getInteger(I(E, J))
546+ let bF = if ((bE == unit))
523547 then unit
524548 else {
525- let bD = (height - value(bB))
526- let bE = max([0, (aw - bD)])
527- if ((bE == 0))
549+ let bG = (height - value(bE))
550+ let bH = max([0, (aw - bG)])
551+ if ((bH == 0))
528552 then unit
529- else h(makeString(["finalization will be possible in ", toString(bE), " blocks"], ""))
553+ else h(makeString(["finalization will be possible in ", toString(bH), " blocks"], ""))
530554 }
531- if ((bC == bC))
555+ if ((bF == bF))
532556 then {
533- let bF = valueOrErrorMessage(aA(E), f("invalid asset"))
534- let bk = bF._1
535- let aH = bF._2
536- let bG = valueOrErrorMessage({
557+ let bI = valueOrErrorMessage(aA(E), f("invalid asset"))
558+ let bn = bI._1
559+ let aH = bI._2
560+ let bJ = valueOrErrorMessage({
537561 let aF = invoke(ap, "claimWxDoNotThrow", [p(aH)], nil)
538562 if ($isInstanceOf(aF, "Int"))
539563 then aF
540564 else unit
541565 }, f("invalid claimWx result"))
542- if ((bG == bG))
566+ if ((bJ == bJ))
543567 then {
544- let bo = valueOrElse(getInteger(K(E)), 0)
545- let by = valueOrElse(getInteger(L(E)), 0)
546- let bH = {
547- let bI = if (if ((bG > 0))
568+ let br = valueOrElse(getInteger(K(E)), 0)
569+ let bB = valueOrElse(getInteger(L(E)), 0)
570+ let bK = {
571+ let bL = if (if ((bJ > 0))
548572 then true
549- else (bo > 0))
573+ else (br > 0))
550574 then true
551- else (by > 0)
552- if (bI)
575+ else (bB > 0)
576+ if (bL)
553577 then true
554578 else h("nothing to finalize")
555579 }
556- if ((bH == bH))
580+ if ((bK == bK))
557581 then {
558- let bJ = if ((bG > 0))
582+ let bM = if ((bJ > 0))
559583 then {
560- let bK = fraction(bG, az, ax)
561- let bL = (bG - bK)
562- let bM = invoke(aq, "userMaxDurationREADONLY", [toString(this)], nil)
563- let bN = if ((bK > 0))
584+ let bN = fraction(bJ, az, ax)
585+ let bO = (bJ - bN)
586+ let bP = invoke(aq, "userMaxDurationREADONLY", [toString(this)], nil)
587+ let bQ = if ((bN > 0))
564588 then {
565- let ad = bM
589+ let ad = bP
566590 if (if (if ($isInstanceOf(ad._1, "String"))
567591 then $isInstanceOf(ad._2, "Int")
568592 else false)
569593 then $isInstanceOf(ad, "(String, Int)")
570594 else false)
571595 then {
572- let bO = ad._1
573- let bP = ad._2
574- if ((bK > 0))
575- then invoke(aq, bO, [bP], [AttachedPayment(au, bK)])
596+ let bR = ad._1
597+ let bS = ad._2
598+ if ((bN > 0))
599+ then invoke(aq, bR, [bS], [AttachedPayment(au, bN)])
576600 else unit
577601 }
578602 else h("invalid lock params")
579603 }
580604 else unit
581- if ((bN == bN))
605+ if ((bQ == bQ))
582606 then {
583- let bQ = if ((bL > 0))
607+ let bT = if ((bO > 0))
584608 then {
585- let bR = au
586- let bS = 0
587- let bT = p(at)
588- let bU = ""
609+ let bU = au
610+ let bV = 0
611+ let bW = p(at)
612+ let bX = ""
589613 valueOrErrorMessage({
590- let aF = invoke(ar, "swap", [bS, bT, bU], [AttachedPayment(bR, bL)])
614+ let aF = invoke(ar, "swap", [bV, bW, bX], [AttachedPayment(bU, bO)])
591615 if ($isInstanceOf(aF, "Int"))
592616 then aF
593617 else unit
594618 }, f("invalid swap result"))
595619 }
596620 else 0
597- if ((bQ == bQ))
621+ if ((bT == bT))
598622 then {
599- let bV = if ((bQ > 0))
623+ let bY = if ((bT > 0))
600624 then {
601- let bW = 0
602- let bX = true
625+ let bZ = 0
626+ let ca = true
603627 valueOrErrorMessage({
604- let aF = invoke(bk, "putOneTknV2", [bW, bX], [AttachedPayment(at, bQ)])
628+ let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(at, bT)])
605629 if ($isInstanceOf(aF, "Int"))
606630 then aF
607631 else unit
608632 }, f("invalid putOneTknV2 result"))
609633 }
610634 else 0
611- if ((bV == bV))
612- then bV
635+ if ((bY == bY))
636+ then bY
613637 else throw("Strict value is not equal to itself.")
614638 }
615639 else throw("Strict value is not equal to itself.")
616640 }
617641 else throw("Strict value is not equal to itself.")
618642 }
619643 else unit
620- if ((bJ == bJ))
644+ if ((bM == bM))
621645 then {
622- let bY = if ((by > 0))
646+ let cb = if ((bB > 0))
623647 then {
624648 let aL = aG(aH, G)
625649 if ((aL == aL))
626650 then {
627- let bZ = toInt(fraction(toBigInt(by), aL, e, FLOOR))
628- let bA = {
629- let ca = E
630- let bW = 0
651+ let cc = toInt(fraction(toBigInt(bB), aL, e, FLOOR))
652+ let bD = {
653+ let cd = E
654+ let bZ = 0
631655 valueOrErrorMessage({
632- let aF = invoke(bk, "unstakeAndGetOneTknV2", [bZ, p(ca), bW], nil)
656+ let aF = invoke(bn, "unstakeAndGetOneTknV2", [cc, p(cd), bZ], nil)
633657 if ($isInstanceOf(aF, "Int"))
634658 then aF
635659 else unit
636660 }, f("invalid unstakeAndGetOneTknV2 result"))
637661 }
638- if ((bA == bA))
662+ if ((bD == bD))
639663 then {
640- let cb = [Burn(G, by)]
641- let cc = fraction(toBigInt(bA), e, toBigInt(by), FLOOR)
642- let cd = [BinaryEntry(V(E, J), toBytes(cc)), StringEntry(W(E), toString(cc))]
643- (cb ++ cd)
664+ let ce = if ((aI.issuer == this))
665+ then invoke(this, "burn", [G, bB], nil)
666+ else if ((aI.issuer == ao))
667+ then invoke(ao, "burn", [G, bB], nil)
668+ else h("invalid share asset issuer")
669+ if ((ce == ce))
670+ then {
671+ let cf = fraction(toBigInt(bD), e, toBigInt(bB), FLOOR)
672+ let cg = [BinaryEntry(V(E, J), toBytes(cf)), StringEntry(W(E), toString(cf))]
673+ cg
674+ }
675+ else throw("Strict value is not equal to itself.")
644676 }
645677 else throw("Strict value is not equal to itself.")
646678 }
647679 else throw("Strict value is not equal to itself.")
648680 }
649681 else nil
650- let ce = if ((bo > 0))
682+ if ((cb == cb))
651683 then {
652- let bV = {
653- let bW = 0
654- let bX = true
655- valueOrErrorMessage({
656- let aF = invoke(bk, "putOneTknV2", [bW, bX], [AttachedPayment(E, bo)])
657- if ($isInstanceOf(aF, "Int"))
658- then aF
659- else unit
660- }, f("invalid putOneTknV2 result"))
661- }
662- if ((bV == bV))
684+ let ch = if ((br > 0))
663685 then {
664- let aL = aG(aH, G)
665- if ((aL == aL))
686+ let bY = {
687+ let bZ = 0
688+ let ca = true
689+ valueOrErrorMessage({
690+ let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(E, br)])
691+ if ($isInstanceOf(aF, "Int"))
692+ then aF
693+ else unit
694+ }, f("invalid putOneTknV2 result"))
695+ }
696+ if ((bY == bY))
666697 then {
667- let bt = toInt(fraction(toBigInt(bV), e, aL, FLOOR))
668- let cf = true
669- let cg = [Reissue(G, bt, cf)]
670- let ch = fraction(toBigInt(bo), e, toBigInt(bt))
671- let ci = [BinaryEntry(T(E, J), toBytes(ch)), StringEntry(U(E), toString(ch))]
672- (cg ++ ci)
698+ let aL = aG(aH, G)
699+ if ((aL == aL))
700+ then {
701+ let bw = toInt(fraction(toBigInt(bY), e, aL, FLOOR))
702+ let ci = if ((aI.issuer == this))
703+ then invoke(this, "emit", [G, bw], nil)
704+ else if ((aI.issuer == ao))
705+ then invoke(ao, "emit", [G, bw], nil)
706+ else h("invalid share asset issuer")
707+ if ((ci == ci))
708+ then {
709+ let cj = fraction(toBigInt(br), e, toBigInt(bw))
710+ let ck = [BinaryEntry(T(E, J), toBytes(cj)), StringEntry(U(E), toString(cj))]
711+ ck
712+ }
713+ else throw("Strict value is not equal to itself.")
714+ }
715+ else throw("Strict value is not equal to itself.")
673716 }
674717 else throw("Strict value is not equal to itself.")
675718 }
719+ else nil
720+ if ((ch == ch))
721+ then {
722+ let cl = (J + 1)
723+ let cm = aG(aH, G)
724+ let cn = (([IntegerEntry(H(E), cl), IntegerEntry(I(E, cl), height), IntegerEntry(L(E), 0), IntegerEntry(K(E), 0), BinaryEntry(R(E, J), toBytes(cm)), StringEntry(S(E), toString(cm))] ++ ch) ++ cb)
725+ $Tuple2(cn, toBytes(cm))
726+ }
676727 else throw("Strict value is not equal to itself.")
677728 }
678- else nil
679- let cj = (J + 1)
680- let ck = aG(aH, G)
681- let cl = (([IntegerEntry(H(E), cj), IntegerEntry(I(E, cj), height), IntegerEntry(L(E), 0), IntegerEntry(K(E), 0), BinaryEntry(R(E, J), toBytes(ck)), StringEntry(S(E), toString(ck))] ++ ce) ++ bY)
682- $Tuple2(cl, toBytes(ck))
729+ else throw("Strict value is not equal to itself.")
683730 }
684731 else throw("Strict value is not equal to itself.")
685732 }
686733 else throw("Strict value is not equal to itself.")
687734 }
688735 else throw("Strict value is not equal to itself.")
689736 }
690737 else throw("Strict value is not equal to itself.")
691738 }
692739 else throw("Strict value is not equal to itself.")
693740 }
694741 else throw("Strict value is not equal to itself.")
695742 }
696743 else throw("Strict value is not equal to itself.")
697744 }
698745
699746
700-@Verifier(cm)
701-func cn () = {
702- let co = {
747+@Verifier(co)
748+func cp () = {
749+ let cq = {
703750 let ad = ac()
704751 if ($isInstanceOf(ad, "ByteVector"))
705752 then {
706753 let ak = ad
707754 ak
708755 }
709756 else if ($isInstanceOf(ad, "Unit"))
710- then cm.senderPublicKey
757+ then co.senderPublicKey
711758 else throw("Match error")
712759 }
713- sigVerify(cm.bodyBytes, cm.proofs[0], co)
760+ sigVerify(co.bodyBytes, co.proofs[0], cq)
714761 }
715762

github/deemru/w8io/fabc49c 
260.98 ms