tx · GJKZ9F3aAnjj3dzt71c98cwobkn3otifNnvpgci5NaKY 3N6ALE8YyAYnRk9f38mdWRTvW77rFkg5hN1: -0.03200000 Waves 2024.02.09 14:32 [2968651] smart account 3N6ALE8YyAYnRk9f38mdWRTvW77rFkg5hN1 > SELF 0.00000000 Waves
{ "type": 13, "id": "GJKZ9F3aAnjj3dzt71c98cwobkn3otifNnvpgci5NaKY", "fee": 3200000, "feeAssetId": null, "timestamp": 1707478019233, "version": 2, "chainId": 84, "sender": "3N6ALE8YyAYnRk9f38mdWRTvW77rFkg5hN1", "senderPublicKey": "HMMF9zUpZPBGLAhpc1yDdcJNJychSarGHS79P2mGvq7J", "proofs": [ "5wvXECaKisH4aeMMtctydoWC3LcSXRZ6UMGCANSDcntJEoRh6zC9voGg359T7L4T76MhxWrpZfAb1MXWLKCHN9b9" ], "script": "base64:BgJTCAISBgoECAgICBIHCgUICAgICBIDCgEIEgMKAQESBgoECAEBARIECgIBARIDCgEIEgMKAQgSBAoCCAgSAwoBCBIDCgEIEgASABIDCgEIEgMKAQiDAQAJU0VQQVJBVE9SAgJfXwAFV0FWRVMCBVdBVkVTAAxLRVlfTVVMVElTSUcCCE1VTFRJU0lHAApLRVlfU1RBVFVTAgZTVEFUVVMACEtFWV9JTklUAgRJTklUAApLRVlfUEFVU0VEAgZQQVVTRUQACktFWV9QQVVTRVICBlBBVVNFUgALS0VZX01BTkFHRVICB01BTkFHRVIAC0tFWV9SRUZFUkVSAgdSRUZFUkVSAAxLRVlfRVhFQ1VUT1ICCEVYRUNVVE9SAApLRVlfT1JBQ0xFAgZPUkFDTEUAE0tFWV9DQUxMRVJfQ09OVFJBQ1QCD0NBTExFUl9DT05UUkFDVAAJS0VZX1BSSUNFAgVQUklDRQAPS0VZX1VOSVRTX0FTU0VUAgtVTklUU19BU1NFVAARS0VZX1VTRVJfUE9TSVRJT04CDVVTRVJfUE9TSVRJT04AFEtFWV9VU0VSX1VTRF9CQUxBTkNFAhBVU0VSX1VTRF9CQUxBTkNFACdLRVlfVVNFUl9VTklUU19QRVJfVVNEX0JBTEFOQ0VfSU5URUdSQUwCI1VTRVJfVU5JVFNfUEVSX1VTRF9CQUxBTkNFX0lOVEVHUkFMAClLRVlfVVNFUl9VTklUU19QRVJfUkVGRVJBTF9TSEFSRV9JTlRFR1JBTAIlVVNFUl9VTklUU19QRVJfUkVGRVJBTF9TSEFSRV9JTlRFR1JBTAAWS0VZX1VTRVJfQ0hFQ0tQT0lOVF9BVAISVVNFUl9DSEVDS1BPSU5UX0FUACJLRVlfVVNFUl9VTklUU19CQUxBTkNFX0RJU1RSSUJVVEVEAh5VU0VSX1VOSVRTX0JBTEFOQ0VfRElTVFJJQlVURUQAHUtFWV9VU0VSX1VOSVRTX1NIQVJFU19SRUZFUkFMAhlVU0VSX1VOSVRTX1NIQVJFU19SRUZFUkFMABdLRVlfVVNFUl9TSEFSRVNfUkVGRVJBTAITVVNFUl9TSEFSRVNfUkVGRVJBTAAPS0VZX1NUQVJUX0JMT0NLAgtTVEFSVF9CTE9DSwAQS0VZX0ZJTklTSF9CTE9DSwIMRklOSVNIX0JMT0NLABZLRVlfVE9UQUxfVU5JVFNfRk9SX0xQAhJUT1RBTF9VTklUU19GT1JfTFAAG0tFWV9UT1RBTF9VTklUU19GT1JfUkVGRVJBTAIXVE9UQUxfVU5JVFNfRk9SX1JFRkVSQUwAFUtFWV9UT1RBTF9VU0RfQkFMQU5DRQIRVE9UQUxfVVNEX0JBTEFOQ0UAIktFWV9VTklUU19QRVJfVVNEX0JBTEFOQ0VfSU5URUdSQUwCHlVOSVRTX1BFUl9VU0RfQkFMQU5DRV9JTlRFR1JBTAARS0VZX0NIRUNLUE9JTlRfQVQCDUNIRUNLUE9JTlRfQVQAHUtFWV9VTklUU19CQUxBTkNFX0RJU1RSSUJVVEVEAhlVTklUU19CQUxBTkNFX0RJU1RSSUJVVEVEABFLRVlfVE9LRU5fQkFMQU5DRQINVE9LRU5fQkFMQU5DRQAPS0VZX1VTRVJTX0NPVU5UAgtVU0VSU19DT1VOVAAkS0VZX1VOSVRTX1BFUl9SRUZFUkFMX1NIQVJFX0lOVEVHUkFMAiBVTklUU19QRVJfUkVGRVJBTF9TSEFSRV9JTlRFR1JBTAAYS0VZX1VOSVRTX1NIQVJFU19SRUZFUkFMAhRVTklUU19TSEFSRVNfUkVGRVJBTAAYS0VZX1RPVEFMX1NIQVJFU19SRUZFUkFMAhRUT1RBTF9TSEFSRVNfUkVGRVJBTAATS0VZX1NXQVZFU19DT05UUkFDVAIPU1dBVkVTX0NPTlRSQUNUABBLRVlfU1dBVkVTX0FTU0VUAgVBU1NFVAAMRlVOQ19ERVBPU0lUAgdkZXBvc2l0AA1GVU5DX0dFVF9SQVRFAgdnZXRSYXRlAA1GVU5DX1dJVEhEUkFXAgh3aXRoZHJhdwAHTUFYX0lOVAD//////////38ADlBFUkNFTlRfRkFDVE9SCQC2AgEAgKCUpY0dAAtaRVJPX0JJR0lOVAkAtgIBAAAACk9ORV9CSUdJTlQJALYCAQABABJTV0FWRVNfUkFURV9GQUNUT1IJALYCAQCAoJSljR0BEF92YWxpZGF0ZUFkZHJlc3MCCGFkZHJlc3NfBGVycl8EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYJAAIBBQRlcnJfAQxfdmFsaWRhdGVJbnQEBHZhbF8ObG93ZXJCb3VuZGFyeV8OdXBwZXJCb3VuZGFyeV8EZXJyXwMDCQBmAgUObG93ZXJCb3VuZGFyeV8FBHZhbF8GCQBmAgUEdmFsXwUOdXBwZXJCb3VuZGFyeV8JAAIBBQRlcnJfBgEPX3ZhbGlkYXRlQmlnSW50BAR2YWxfDmxvd2VyQm91bmRhcnlfDnVwcGVyQm91bmRhcnlfBGVycl8DAwkAvwICBQ5sb3dlckJvdW5kYXJ5XwUEdmFsXwYJAL8CAgUEdmFsXwUOdXBwZXJCb3VuZGFyeV8JAAIBBQRlcnJfBgEVX3ZhbGlkYXRlUGF5bWVudHNTaXplAwlwYXltZW50c18HdGFyZ2V0XwRlcnJfAwkBAiE9AgkAkAMBBQlwYXltZW50c18FB3RhcmdldF8JAAIBBQRlcnJfBgEVX3ZhbGlkYXRlV2F2ZXNQYXltZW50AghwYXltZW50XwRlcnJfBAckbWF0Y2gwCAUIcGF5bWVudF8HYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwCQACAQUEZXJyXwMJAAECBQckbWF0Y2gwAgRVbml0BgkAAgECC01hdGNoIGVycm9yARFfdmFsaWRhdGVFcUJpZ0ludAMFdmFsMV8FdmFsMl8EZXJyXwMJAQIhPQIFBXZhbDFfBQV2YWwyXwkAAgEFBGVycl8GAQ5fdmFsaWRhdGVBc3NldAIGYXNzZXRfBGVycl8EByRtYXRjaDAJAOwHAQkA2QQBBQZhc3NldF8DCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAGCQACAQUEZXJyXwEJX2xvYWRJbml0AAQHJG1hdGNoMAkAoAgBBQhLRVlfSU5JVAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEJX3NhdmVJbml0AQdpc0luaXRfCQDMCAIJAQxCb29sZWFuRW50cnkCBQhLRVlfSU5JVAUHaXNJbml0XwUDbmlsAQpfbG9hZFBhdXNlAAQHJG1hdGNoMAkAoAgBBQpLRVlfUEFVU0VEAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQpfc2F2ZVBhdXNlAQlpc1BhdXNlZF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCktFWV9QQVVTRUQFCWlzUGF1c2VkXwUDbmlsAQtfbG9hZFBhdXNlcgAEByRtYXRjaDAJAKIIAQUKS0VZX1BBVVNFUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQtfc2F2ZVBhdXNlcgEHcGF1c2VyXwkAzAgCCQELU3RyaW5nRW50cnkCBQpLRVlfUEFVU0VSCQClCAEFB3BhdXNlcl8FA25pbAENX2xvYWRNdWx0aXNpZwAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABDV9zYXZlTXVsdGlzaWcBCW11bHRpc2lnXwkAzAgCCQELU3RyaW5nRW50cnkCBQxLRVlfTVVMVElTSUcJAKUIAQUJbXVsdGlzaWdfBQNuaWwBDV9sb2FkRXhlY3V0b3IABAckbWF0Y2gwCQCiCAEFDEtFWV9FWEVDVVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZUV4ZWN1dG9yAQlleGVjdXRvcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX0VYRUNVVE9SCQClCAEFCWV4ZWN1dG9yXwUDbmlsAQtfbG9hZE9yYWNsZQAEByRtYXRjaDAJAKIIAQUKS0VZX09SQUNMRQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQtfc2F2ZU9yYWNsZQEHb3JhY2xlXwkAzAgCCQELU3RyaW5nRW50cnkCBQpLRVlfT1JBQ0xFCQClCAEFB29yYWNsZV8FA25pbAETX2xvYWRDYWxsZXJDb250cmFjdAAEByRtYXRjaDAJAKIIAQUTS0VZX0NBTExFUl9DT05UUkFDVAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAETX3NhdmVDYWxsZXJDb250cmFjdAEHY2FsbGVyXwkAzAgCCQELU3RyaW5nRW50cnkCBRNLRVlfQ0FMTEVSX0NPTlRSQUNUBQdjYWxsZXJfBQNuaWwBEV9sb2FkVXNlclBvc2l0aW9uAgZ0b2tlbl8FdXNlcl8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFEUtFWV9VU0VSX1BPU0lUSU9OCQDMCAIFBnRva2VuXwkAzAgCBQV1c2VyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBAZzdHJ1Y3QJAL0JAgUBYQUJU0VQQVJBVE9SCQCUCgIJAKcDAQkAkQMCBQZzdHJ1Y3QAAAkApwMBCQCRAwIFBnN0cnVjdAABCQCUCgIFC1pFUk9fQklHSU5UBQtaRVJPX0JJR0lOVAERX3NhdmVVc2VyUG9zaXRpb24DBnRva2VuXwV1c2VyXwlwb3NpdGlvbl8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFEUtFWV9VU0VSX1BPU0lUSU9OCQDMCAIFBnRva2VuXwkAzAgCBQV1c2VyXwUDbmlsBQlTRVBBUkFUT1IJALsJAgkAzAgCCQCmAwEIBQlwb3NpdGlvbl8CXzEJAMwIAgkApgMBCAUJcG9zaXRpb25fAl8yBQNuaWwFCVNFUEFSQVRPUgUDbmlsARNfbG9hZFVzZXJVU0RCYWxhbmNlAQV1c2VyXwQHJG1hdGNoMAkAoggBCQC5CQIJAMwIAgUUS0VZX1VTRVJfVVNEX0JBTEFOQ0UJAMwIAgUFdXNlcl8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAETX3NhdmVVc2VyVVNEQmFsYW5jZQIFdXNlcl8GdmFsdWVfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBRRLRVlfVVNFUl9VU0RfQkFMQU5DRQkAzAgCBQV1c2VyXwUDbmlsBQlTRVBBUkFUT1IJAKYDAQUGdmFsdWVfBQNuaWwBFl9sb2FkVXNlclNoYXJlc1JlZmVyYWwBBXVzZXJfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBRdLRVlfVVNFUl9TSEFSRVNfUkVGRVJBTAkAzAgCBQV1c2VyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UARZfc2F2ZVVzZXJTaGFyZXNSZWZlcmFsAgV1c2VyXwZ2YWx1ZV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFF0tFWV9VU0VSX1NIQVJFU19SRUZFUkFMCQDMCAIFBXVzZXJfBQNuaWwFCVNFUEFSQVRPUgkApgMBBQZ2YWx1ZV8FA25pbAEfX2xvYWRVbml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAAEByRtYXRjaDAJAKIIAQUiS0VZX1VOSVRTX1BFUl9VU0RfQkFMQU5DRV9JTlRFR1JBTAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJAKcDAQUBYQULWkVST19CSUdJTlQBH19zYXZlVW5pdHNQZXJVU0RCYWxhbmNlSW50ZWdyYWwBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBSJLRVlfVU5JVFNfUEVSX1VTRF9CQUxBTkNFX0lOVEVHUkFMCQCmAwEFBnZhbHVlXwUDbmlsASNfbG9hZFVzZXJVbml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAEFdXNlcl8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFJ0tFWV9VU0VSX1VOSVRTX1BFUl9VU0RfQkFMQU5DRV9JTlRFR1JBTAkAzAgCBQV1c2VyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UASNfc2F2ZVVzZXJVbml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAIFdXNlcl8GdmFsdWVfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBSdLRVlfVVNFUl9VTklUU19QRVJfVVNEX0JBTEFOQ0VfSU5URUdSQUwJAMwIAgUFdXNlcl8FA25pbAUJU0VQQVJBVE9SCQCmAwEFBnZhbHVlXwUDbmlsARFfbG9hZENoZWNrcG9pbnRBdAAEByRtYXRjaDAJAKIIAQURS0VZX0NIRUNLUE9JTlRfQVQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UARFfc2F2ZUNoZWNrcG9pbnRBdAEGdmFsdWVfCQDMCAIJAQtTdHJpbmdFbnRyeQIFEUtFWV9DSEVDS1BPSU5UX0FUCQCmAwEFBnZhbHVlXwUDbmlsARVfbG9hZFVzZXJDaGVja3BvaW50QXQBBXVzZXJfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBRZLRVlfVVNFUl9DSEVDS1BPSU5UX0FUCQDMCAIFBXVzZXJfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJAKcDAQUBYQULWkVST19CSUdJTlQBFV9zYXZlVXNlckNoZWNrcG9pbnRBdAIFdXNlcl8GdmFsdWVfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBRZLRVlfVVNFUl9DSEVDS1BPSU5UX0FUCQDMCAIFBXVzZXJfBQNuaWwFCVNFUEFSQVRPUgkApgMBBQZ2YWx1ZV8FA25pbAEPX2xvYWRVbml0c0Fzc2V0AAQHJG1hdGNoMAkAoggBBQ9LRVlfVU5JVFNfQVNTRVQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQDZBAEFAWEBAAEPX3NhdmVVbml0c0Fzc2V0AQZhc3NldF8JAMwIAgkBC1N0cmluZ0VudHJ5AgUPS0VZX1VOSVRTX0FTU0VUCQDYBAEFBmFzc2V0XwUDbmlsAQ9fbG9hZFN0YXJ0QmxvY2sABAckbWF0Y2gwCQCiCAEFD0tFWV9TVEFSVF9CTE9DSwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJAKcDAQUBYQULWkVST19CSUdJTlQBD19zYXZlU3RhcnRCbG9jawEGdmFsdWVfCQDMCAIJAQtTdHJpbmdFbnRyeQIFD0tFWV9TVEFSVF9CTE9DSwkApgMBBQZ2YWx1ZV8FA25pbAEQX2xvYWRGaW5pc2hCbG9jawAEByRtYXRjaDAJAKIIAQUQS0VZX0ZJTklTSF9CTE9DSwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJAKcDAQUBYQULWkVST19CSUdJTlQBEF9zYXZlRmluaXNoQmxvY2sBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBRBLRVlfRklOSVNIX0JMT0NLCQCmAwEFBnZhbHVlXwUDbmlsARxfbG9hZFVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkAAQHJG1hdGNoMAkAoggBBR1LRVlfVU5JVFNfQkFMQU5DRV9ESVNUUklCVVRFRAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJAKcDAQUBYQULWkVST19CSUdJTlQBHF9zYXZlVW5pdHNCYWxhbmNlRGlzdHJpYnV0ZWQBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBR1LRVlfVU5JVFNfQkFMQU5DRV9ESVNUUklCVVRFRAkApgMBBQZ2YWx1ZV8FA25pbAEgX2xvYWRVc2VyVW5pdHNCYWxhbmNlRGlzdHJpYnV0ZWQBBXVzZXJfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBSJLRVlfVVNFUl9VTklUU19CQUxBTkNFX0RJU1RSSUJVVEVECQDMCAIFBXVzZXJfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJAKcDAQUBYQULWkVST19CSUdJTlQBIF9zYXZlVXNlclVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkAgV1c2VyXwZ2YWx1ZV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFIktFWV9VU0VSX1VOSVRTX0JBTEFOQ0VfRElTVFJJQlVURUQJAMwIAgUFdXNlcl8FA25pbAUJU0VQQVJBVE9SCQCmAwEFBnZhbHVlXwUDbmlsARRfbG9hZFRvdGFsVVNEQmFsYW5jZQAEByRtYXRjaDAJAKIIAQUVS0VZX1RPVEFMX1VTRF9CQUxBTkNFAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAEUX3NhdmVUb3RhbFVTREJhbGFuY2UBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBRVLRVlfVE9UQUxfVVNEX0JBTEFOQ0UJAKYDAQUGdmFsdWVfBQNuaWwBE19sb2FkU1dhdmVzQ29udHJhY3QABAckbWF0Y2gwCQCiCAEFE0tFWV9TV0FWRVNfQ09OVFJBQ1QDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAETX3NhdmVTV2F2ZXNDb250cmFjdAEJY29udHJhY3RfCQDMCAIJAQtTdHJpbmdFbnRyeQIFE0tFWV9TV0FWRVNfQ09OVFJBQ1QJAKUIAQUJY29udHJhY3RfBQNuaWwBEF9sb2FkU1dhdmVzQXNzZXQBCWNvbnRyYWN0XwQHJG1hdGNoMAkAnQgCBQljb250cmFjdF8FEEtFWV9TV0FWRVNfQVNTRVQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQDZBAEFAWEJAAIBAhhfbG9hZFNXYXZlc0Fzc2V0OiByZXZlcnQBEV9sb2FkVG9rZW5CYWxhbmNlAQZ0b2tlbl8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFEUtFWV9UT0tFTl9CQUxBTkNFCQDMCAIFBnRva2VuXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UARFfc2F2ZVRva2VuQmFsYW5jZQIGdG9rZW5fBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCCQC5CQIJAMwIAgURS0VZX1RPS0VOX0JBTEFOQ0UJAMwIAgUGdG9rZW5fBQNuaWwFCVNFUEFSQVRPUgkApgMBBQZ2YWx1ZV8FA25pbAEPX2xvYWRVc2Vyc0NvdW50AAQHJG1hdGNoMAkAoggBBQ9LRVlfVVNFUlNfQ09VTlQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UAQ9fc2F2ZVVzZXJzQ291bnQBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBQ9LRVlfVVNFUlNfQ09VTlQJAKYDAQUGdmFsdWVfBQNuaWwBIV9sb2FkVW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAAEByRtYXRjaDAJAKIIAQUkS0VZX1VOSVRTX1BFUl9SRUZFUkFMX1NIQVJFX0lOVEVHUkFMAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAEhX3NhdmVVbml0c1BlclJlZmVyYWxTaGFyZUludGVncmFsAQZ2YWx1ZV8JAMwIAgkBC1N0cmluZ0VudHJ5AgUkS0VZX1VOSVRTX1BFUl9SRUZFUkFMX1NIQVJFX0lOVEVHUkFMCQCmAwEFBnZhbHVlXwUDbmlsARdfbG9hZFVuaXRzU2hhcmVzUmVmZXJhbAAEByRtYXRjaDAJAKIIAQUYS0VZX1VOSVRTX1NIQVJFU19SRUZFUkFMAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAEXX3NhdmVVbml0c1NoYXJlc1JlZmVyYWwBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBRhLRVlfVU5JVFNfU0hBUkVTX1JFRkVSQUwJAKYDAQUGdmFsdWVfBQNuaWwBFF9sb2FkVG90YWxVbml0c0ZvckxQAAQHJG1hdGNoMAkAoggBBRZLRVlfVE9UQUxfVU5JVFNfRk9SX0xQAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAEUX3NhdmVUb3RhbFVuaXRzRm9yTFABBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBRZLRVlfVE9UQUxfVU5JVFNfRk9SX0xQCQCmAwEFBnZhbHVlXwUDbmlsARlfbG9hZFRvdGFsVW5pdHNGb3JSZWZlcmFsAAQHJG1hdGNoMAkAoggBBRtLRVlfVE9UQUxfVU5JVFNfRk9SX1JFRkVSQUwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UARlfc2F2ZVRvdGFsVW5pdHNGb3JSZWZlcmFsAQZ2YWx1ZV8JAMwIAgkBC1N0cmluZ0VudHJ5AgUbS0VZX1RPVEFMX1VOSVRTX0ZPUl9SRUZFUkFMCQCmAwEFBnZhbHVlXwUDbmlsARdfbG9hZFRvdGFsU2hhcmVzUmVmZXJhbAAEByRtYXRjaDAJAKIIAQUYS0VZX1RPVEFMX1NIQVJFU19SRUZFUkFMAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAEXX3NhdmVUb3RhbFNoYXJlc1JlZmVyYWwBBnZhbHVlXwkAzAgCCQELU3RyaW5nRW50cnkCBRhLRVlfVE9UQUxfU0hBUkVTX1JFRkVSQUwJAKYDAQUGdmFsdWVfBQNuaWwBJV9sb2FkVXNlclVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwBBXVzZXJfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBSlLRVlfVVNFUl9VTklUU19QRVJfUkVGRVJBTF9TSEFSRV9JTlRFR1JBTAkAzAgCBQV1c2VyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UASVfc2F2ZVVzZXJVbml0c1BlclJlZmVyYWxTaGFyZUludGVncmFsAgV1c2VyXwZ2YWx1ZV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFKUtFWV9VU0VSX1VOSVRTX1BFUl9SRUZFUkFMX1NIQVJFX0lOVEVHUkFMCQDMCAIFBXVzZXJfBQNuaWwFCVNFUEFSQVRPUgkApgMBBQZ2YWx1ZV8FA25pbAEbX2xvYWRVc2VyVW5pdHNTaGFyZXNSZWZlcmFsAQV1c2VyXwQHJG1hdGNoMAkAoggBCQC5CQIJAMwIAgUdS0VZX1VTRVJfVU5JVFNfU0hBUkVTX1JFRkVSQUwJAMwIAgUFdXNlcl8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhBQtaRVJPX0JJR0lOVAEbX3NhdmVVc2VyVW5pdHNTaGFyZXNSZWZlcmFsAgV1c2VyXwZ2YWx1ZV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFHUtFWV9VU0VSX1VOSVRTX1NIQVJFU19SRUZFUkFMCQDMCAIFBXVzZXJfBQNuaWwFCVNFUEFSQVRPUgkApgMBBQZ2YWx1ZV8FA25pbAEMX2xvYWRNYW5hZ2VyAAQHJG1hdGNoMAkAoggBBQtLRVlfTUFOQUdFUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQxfc2F2ZU1hbmFnZXIBCG1hbmFnZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFC0tFWV9NQU5BR0VSCQClCAEFCG1hbmFnZXJfBQNuaWwBDF9sb2FkUmVmZXJlcgEJY29kZWhhc2hfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBQtLRVlfUkVGRVJFUgkAzAgCBQljb2RlaGFzaF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQkAAgECFF9sb2FkUmVmZXJlcjogcmV2ZXJ0AQxfc2F2ZVJlZmVyZXICCWNvZGVoYXNoXwhhZGRyZXNzXwkAzAgCCQELU3RyaW5nRW50cnkCCQC5CQIJAMwIAgULS0VZX1JFRkVSRVIJAMwIAgUJY29kZWhhc2hfBQNuaWwFCVNFUEFSQVRPUgUIYWRkcmVzc18FA25pbAEWX2NoZWNrUmVmZXJlckV4aXN0ZW5jZQEJY29kZWhhc2hfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBQtLRVlfUkVGRVJFUgkAzAgCBQljb2RlaGFzaF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAYHARFfb25seVRoaXNDb250cmFjdAEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8FBHRoaXMJAAIBAhlfb25seVRoaXNDb250cmFjdDogcmV2ZXJ0BgEQX3doZW5NdWx0aXNpZ1NldAADCQAAAgkBDV9sb2FkTXVsdGlzaWcACQEHQWRkcmVzcwEBAAkAAgECGF93aGVuTXVsdGlzaWdTZXQ6IHJldmVydAYBE193aGVuTm90SW5pdGlhbGl6ZWQAAwkBCV9sb2FkSW5pdAAJAAIBAhtfd2hlbk5vdEluaXRpYWxpemVkOiByZXZlcnQGARBfd2hlbkluaXRpYWxpemVkAAMJAQEhAQkBCV9sb2FkSW5pdAAJAAIBAhhfd2hlbkluaXRpYWxpemVkOiByZXZlcnQGAQ5fd2hlbk5vdFBhdXNlZAADCQEKX2xvYWRQYXVzZQAJAAIBAhZfd2hlbk5vdFBhdXNlZDogcmV2ZXJ0BgELX3doZW5QYXVzZWQAAwkBASEBCQEKX2xvYWRQYXVzZQAJAAIBAhNfd2hlblBhdXNlZDogcmV2ZXJ0BgELX29ubHlQYXVzZXIBB2NhbGxlcl8DCQECIT0CBQdjYWxsZXJfCQELX2xvYWRQYXVzZXIACQACAQITX29ubHlQYXVzZXI6IHJldmVydAYBDF9vbmx5TWFuYWdlcgEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8JAQxfbG9hZE1hbmFnZXIACQACAQIUX29ubHlNYW5hZ2VyOiByZXZlcnQGARFfdmFsaWRhdGVFeGVjdXRvcgIEdmFsXwRlcnJfAwkBAiE9AgUEdmFsXwkBDV9sb2FkRXhlY3V0b3IACQACAQUEZXJyXwYBD192YWxpZGF0ZUNhbGxlcgIEdmFsXwRlcnJfAwkBAiE9AgUEdmFsXwkBE19sb2FkQ2FsbGVyQ29udHJhY3QACQACAQUEZXJyXwYBDV9nZXRUb2tlblJhdGUBBnRva2VuXwQHJG1hdGNoMAkAnQgCCQELX2xvYWRPcmFjbGUACQC5CQIJAMwIAgUJS0VZX1BSSUNFCQDMCAIFBnRva2VuXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEJAAIBCQCsAgICIV9nZXRUb2tlblJhdGU6IG5vIHJhdGUgZm9yIHRva2VuPQUGdG9rZW5fAQtfY2hlY2twb2ludAAEHnByZXZVbml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAkBH19sb2FkVW5pdHNQZXJVU0RCYWxhbmNlSW50ZWdyYWwABBBwcmV2Q2hlY2twb2ludEF0CQCYAwEJAMwIAgkBD19sb2FkU3RhcnRCbG9jawAJAMwIAgkBEV9sb2FkQ2hlY2twb2ludEF0AAUDbmlsBBtwcmV2VW5pdHNCYWxhbmNlRGlzdHJpYnV0ZWQJARxfbG9hZFVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkAAQgcHJldlVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwJASFfbG9hZFVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwABBZwcmV2VW5pdHNTaGFyZXNSZWZlcmFsCQEXX2xvYWRVbml0c1NoYXJlc1JlZmVyYWwABAxjdXJyZW50QmxvY2sJAJkDAQkAzAgCCQC2AgEFBmhlaWdodAkAzAgCCQEQX2xvYWRGaW5pc2hCbG9jawAFA25pbAMJAMACAgUQcHJldkNoZWNrcG9pbnRBdAUMY3VycmVudEJsb2NrCQCVCgMFA25pbAUecHJldlVuaXRzUGVyVVNEQmFsYW5jZUludGVncmFsBSBwcmV2VW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAQYdW5pdHNCYWxhbmNlVG9EaXN0cmlidXRlCQC8AgMJALgCAgkBFF9sb2FkVG90YWxVbml0c0ZvckxQAAUbcHJldlVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkCQC4AgIFDGN1cnJlbnRCbG9jawUQcHJldkNoZWNrcG9pbnRBdAkAuAICCQEQX2xvYWRGaW5pc2hCbG9jawAFEHByZXZDaGVja3BvaW50QXQEGnVuaXRzUGVyVVNEQmFsYW5jZUludGVncmFsCQC3AgIJALoCAgkAuQICBQ5QRVJDRU5UX0ZBQ1RPUgUYdW5pdHNCYWxhbmNlVG9EaXN0cmlidXRlCQEUX2xvYWRUb3RhbFVTREJhbGFuY2UABR5wcmV2VW5pdHNQZXJVU0RCYWxhbmNlSW50ZWdyYWwEDSR0MDE3NzQ4MTgzMDEDCQC/AgIJARdfbG9hZFRvdGFsU2hhcmVzUmVmZXJhbAAFC1pFUk9fQklHSU5UBBJ1bml0c1NoYXJlc1JlZmVyYWwJALwCAwkAuAICCQEZX2xvYWRUb3RhbFVuaXRzRm9yUmVmZXJhbAAFFnByZXZVbml0c1NoYXJlc1JlZmVyYWwJALgCAgUMY3VycmVudEJsb2NrBRBwcmV2Q2hlY2twb2ludEF0CQC4AgIJARBfbG9hZEZpbmlzaEJsb2NrAAUQcHJldkNoZWNrcG9pbnRBdAQcdW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAkAtwICCQC6AgIJALkCAgUOUEVSQ0VOVF9GQUNUT1IFEnVuaXRzU2hhcmVzUmVmZXJhbAkBF19sb2FkVG90YWxTaGFyZXNSZWZlcmFsAAUgcHJldlVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwJAJQKAgUSdW5pdHNTaGFyZXNSZWZlcmFsBRx1bml0c1BlclJlZmVyYWxTaGFyZUludGVncmFsCQCUCgIFC1pFUk9fQklHSU5UBQtaRVJPX0JJR0lOVAQSdW5pdHNTaGFyZXNSZWZlcmFsCAUNJHQwMTc3NDgxODMwMQJfMQQcdW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAgFDSR0MDE3NzQ4MTgzMDECXzIJAJUKAwkAzggCCQDOCAIJAM4IAgkAzggCCQERX3NhdmVDaGVja3BvaW50QXQBBQxjdXJyZW50QmxvY2sJAR9fc2F2ZVVuaXRzUGVyVVNEQmFsYW5jZUludGVncmFsAQUadW5pdHNQZXJVU0RCYWxhbmNlSW50ZWdyYWwJARxfc2F2ZVVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkAQkAtwICBRh1bml0c0JhbGFuY2VUb0Rpc3RyaWJ1dGUFG3ByZXZVbml0c0JhbGFuY2VEaXN0cmlidXRlZAkBIV9zYXZlVW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAEFHHVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwJARdfc2F2ZVVuaXRzU2hhcmVzUmVmZXJhbAEJALcCAgUSdW5pdHNTaGFyZXNSZWZlcmFsBRZwcmV2VW5pdHNTaGFyZXNSZWZlcmFsBRp1bml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAUcdW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAEPX3VzZXJDaGVja3BvaW50AwV1c2VyXw91c2VyVVNEQmFsYW5jZV8SdXNlclNoYXJlc1JlZmVyYWxfBA0kdDAxODg4NzE4OTk5CQELX2NoZWNrcG9pbnQABBFjaGVja3BvaW50QWN0aW9ucwgFDSR0MDE4ODg3MTg5OTkCXzEEGnVuaXRzUGVyVVNEQmFsYW5jZUludGVncmFsCAUNJHQwMTg4ODcxODk5OQJfMgQcdW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAgFDSR0MDE4ODg3MTg5OTkCXzMEInByZXZVc2VyVW5pdHNQZXJVU0RCYWxhbmNlSW50ZWdyYWwJASNfbG9hZFVzZXJVbml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAEFBXVzZXJfBBRwcmV2VXNlckNoZWNrcG9pbnRBdAkAmAMBCQDMCAIJAQ9fbG9hZFN0YXJ0QmxvY2sACQDMCAIJARVfbG9hZFVzZXJDaGVja3BvaW50QXQBBQV1c2VyXwUDbmlsBB9wcmV2VXNlclVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkCQEgX2xvYWRVc2VyVW5pdHNCYWxhbmNlRGlzdHJpYnV0ZWQBBQV1c2VyXwQkcHJldlVzZXJVbml0c1BlclJlZmVyYWxTaGFyZUludGVncmFsCQElX2xvYWRVc2VyVW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAEFBXVzZXJfBBpwcmV2VXNlclVuaXRzU2hhcmVzUmVmZXJhbAkBG19sb2FkVXNlclVuaXRzU2hhcmVzUmVmZXJhbAEFBXVzZXJfBAxjdXJyZW50QmxvY2sJAJkDAQkAzAgCCQC2AgEFBmhlaWdodAkAzAgCCQEQX2xvYWRGaW5pc2hCbG9jawAFA25pbAMJAMACAgUUcHJldlVzZXJDaGVja3BvaW50QXQFDGN1cnJlbnRCbG9jawkAlQoDBRFjaGVja3BvaW50QWN0aW9ucwUfcHJldlVzZXJVbml0c0JhbGFuY2VEaXN0cmlidXRlZAUacHJldlVzZXJVbml0c1NoYXJlc1JlZmVyYWwEG3VzZXJVbml0c0JhbGFuY2VEaXN0cmlidXRlZAkAtwICCQC6AgIJALkCAgUPdXNlclVTREJhbGFuY2VfCQC4AgIFGnVuaXRzUGVyVVNEQmFsYW5jZUludGVncmFsBSJwcmV2VXNlclVuaXRzUGVyVVNEQmFsYW5jZUludGVncmFsBQ5QRVJDRU5UX0ZBQ1RPUgUfcHJldlVzZXJVbml0c0JhbGFuY2VEaXN0cmlidXRlZAQWdXNlclVuaXRzU2hhcmVzUmVmZXJhbAkAtwICCQC6AgIJALkCAgUSdXNlclNoYXJlc1JlZmVyYWxfCQC4AgIFHHVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwFJHByZXZVc2VyVW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAUOUEVSQ0VOVF9GQUNUT1IFGnByZXZVc2VyVW5pdHNTaGFyZXNSZWZlcmFsCQCVCgMJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCBRFjaGVja3BvaW50QWN0aW9ucwkBFV9zYXZlVXNlckNoZWNrcG9pbnRBdAIFBXVzZXJfBQxjdXJyZW50QmxvY2sJASNfc2F2ZVVzZXJVbml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAIFBXVzZXJfBRp1bml0c1BlclVTREJhbGFuY2VJbnRlZ3JhbAkBIF9zYXZlVXNlclVuaXRzQmFsYW5jZURpc3RyaWJ1dGVkAgUFdXNlcl8FG3VzZXJVbml0c0JhbGFuY2VEaXN0cmlidXRlZAkBJV9zYXZlVXNlclVuaXRzUGVyUmVmZXJhbFNoYXJlSW50ZWdyYWwCBQV1c2VyXwUcdW5pdHNQZXJSZWZlcmFsU2hhcmVJbnRlZ3JhbAkBG19zYXZlVXNlclVuaXRzU2hhcmVzUmVmZXJhbAIFBXVzZXJfBRZ1c2VyVW5pdHNTaGFyZXNSZWZlcmFsBRt1c2VyVW5pdHNCYWxhbmNlRGlzdHJpYnV0ZWQFFnVzZXJVbml0c1NoYXJlc1JlZmVyYWwPAWkBBGluaXQECWV4ZWN1dG9yXwdvcmFjbGVfB3BhdXNlcl8Pc1dhdmVzQ29udHJhY3RfBANlcnIDAwMDAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBE193aGVuTm90SW5pdGlhbGl6ZWQABwkBEF93aGVuTXVsdGlzaWdTZXQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQlleGVjdXRvcl8CFmluaXQ6IGludmFsaWQgZXhlY3V0b3IHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB29yYWNsZV8CFGluaXQ6IGludmFsaWQgb3JhY2xlBwkBEF92YWxpZGF0ZUFkZHJlc3MCBQdwYXVzZXJfAhRpbml0OiBpbnZhbGlkIHBhdXNlcgcJARBfdmFsaWRhdGVBZGRyZXNzAgUPc1dhdmVzQ29udHJhY3RfAhxpbml0OiBpbnZhbGlkIHNXYXZlc0NvbnRyYWN0BwMJAAACBQNlcnIFA2VycgkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQlfc2F2ZUluaXQBBgkBDV9zYXZlRXhlY3V0b3IBCQERQGV4dHJOYXRpdmUoMTA2MikBBQlleGVjdXRvcl8JAQtfc2F2ZU9yYWNsZQEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB29yYWNsZV8JAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8JARNfc2F2ZVNXYXZlc0NvbnRyYWN0AQkBEUBleHRyTmF0aXZlKDEwNjIpAQUPc1dhdmVzQ29udHJhY3RfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2RlcG9zaXQFD2NhbGxlckNvbnRyYWN0XwdzZW5kZXJfBnRva2VuXwdhbW91bnRfCXJlZmVycmVyXwQGYW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUHYW1vdW50XwIaZGVwb3NpdDogYW1vdW50IGlzIG5vdCBJbnQEA2VycgMDAwMJARBfd2hlbkluaXRpYWxpemVkAAkBDl93aGVuTm90UGF1c2VkAAcJARFfdmFsaWRhdGVFeGVjdXRvcgIIBQFpBmNhbGxlcgIZZGVwb3NpdDogaW52YWxpZCBleGVjdXRvcgcJAQ9fdmFsaWRhdGVDYWxsZXICBQ9jYWxsZXJDb250cmFjdF8CF2RlcG9zaXQ6IGludmFsaWQgY2FsbGVyBwkBDF92YWxpZGF0ZUludAQFBmFtb3VudAABBQdNQVhfSU5UAhdkZXBvc2l0OiBpbnZhbGlkIGFtb3VudAcDCQAAAgUDZXJyBQNlcnIEBHJhdGUJAQ1fZ2V0VG9rZW5SYXRlAQUGdG9rZW5fBA0kdDAyMTkyNjIyMDA4CQERX2xvYWRVc2VyUG9zaXRpb24CBQZ0b2tlbl8FB3NlbmRlcl8EEHVzZXJUb2tlbkJhbGFuY2UIBQ0kdDAyMTkyNjIyMDA4Al8xBBV1c2VyVG9rZW5CYWxhbmNlSW5VU0QIBQ0kdDAyMTkyNjIyMDA4Al8yBA51c2VyVVNEQmFsYW5jZQkBE19sb2FkVXNlclVTREJhbGFuY2UBBQdzZW5kZXJfBBF1c2VyU2hhcmVzUmVmZXJhbAkBFl9sb2FkVXNlclNoYXJlc1JlZmVyYWwBBQdzZW5kZXJfBA0kdDAyMjEyNzIyMjU0CQEPX3VzZXJDaGVja3BvaW50AwUHc2VuZGVyXwUOdXNlclVTREJhbGFuY2UFEXVzZXJTaGFyZXNSZWZlcmFsBBFjaGVja3BvaW50QWN0aW9ucwgFDSR0MDIyMTI3MjIyNTQCXzEEEHVzZXJVbml0c0JhbGFuY2UIBQ0kdDAyMjEyNzIyMjU0Al8yBBZ1c2VyVW5pdHNTaGFyZXNSZWZlcmFsCAUNJHQwMjIxMjcyMjI1NAJfMwQTbmV3VXNlclRva2VuQmFsYW5jZQkAtwICBRB1c2VyVG9rZW5CYWxhbmNlCQC2AgEFBmFtb3VudAQYbmV3VXNlclRva2VuQmFsYW5jZUluVVNECQC9AgQFE25ld1VzZXJUb2tlbkJhbGFuY2UFBHJhdGUFDlBFUkNFTlRfRkFDVE9SBQRET1dOBBFuZXdVc2VyVVNEQmFsYW5jZQkAtwICCQC4AgIFDnVzZXJVU0RCYWxhbmNlBRV1c2VyVG9rZW5CYWxhbmNlSW5VU0QFGG5ld1VzZXJUb2tlbkJhbGFuY2VJblVTRAQTdG90YWxCYWxhbmNlVXBkYXRlZAkAtwICCQC4AgIJARRfbG9hZFRvdGFsVVNEQmFsYW5jZQAFFXVzZXJUb2tlbkJhbGFuY2VJblVTRAUYbmV3VXNlclRva2VuQmFsYW5jZUluVVNEBAp1c2Vyc0NvdW50AwkAAAIFDnVzZXJVU0RCYWxhbmNlBQtaRVJPX0JJR0lOVAkAtwICCQEPX2xvYWRVc2Vyc0NvdW50AAUKT05FX0JJR0lOVAkBD19sb2FkVXNlcnNDb3VudAAEDnJlZmVyZXJBY3Rpb25zAwMJAGYCCQCxAgEFCXJlZmVycmVyXwAACQEWX2NoZWNrUmVmZXJlckV4aXN0ZW5jZQEFCXJlZmVycmVyXwcEDnJlZmVyZXJBZGRyZXNzCQEMX2xvYWRSZWZlcmVyAQUJcmVmZXJyZXJfBBJzaGFyZXNUb0Rpc3RyaWJ1dGUJAL0CBAkAtgIBBQZhbW91bnQFBHJhdGUFDlBFUkNFTlRfRkFDVE9SBQRET1dOBAxzaGFyZXNUb1VzZXIJAL0CBAUSc2hhcmVzVG9EaXN0cmlidXRlCQC2AgEAFAkAtgIBAGQFBERPV04ED3NoYXJlc1RvUmVmZXJlcgkAuAICBRJzaGFyZXNUb0Rpc3RyaWJ1dGUFDHNoYXJlc1RvVXNlcgQUbmV3VXNlclNoYXJlc1JlZmVyYWwJALcCAgURdXNlclNoYXJlc1JlZmVyYWwFDHNoYXJlc1RvVXNlcgQUcmVmZXJlclNoYXJlc1JlZmVyYWwJARZfbG9hZFVzZXJTaGFyZXNSZWZlcmFsAQUOcmVmZXJlckFkZHJlc3MEF25ld1JlZmVyZXJTaGFyZXNSZWZlcmFsCQC3AgIFFHJlZmVyZXJTaGFyZXNSZWZlcmFsBQ9zaGFyZXNUb1JlZmVyZXIEFW5ld1RvdGFsU2hhcmVzUmVmZXJhbAkAtwICCQEXX2xvYWRUb3RhbFNoYXJlc1JlZmVyYWwABRJzaGFyZXNUb0Rpc3RyaWJ1dGUEDSR0MDIzNTg3MjM3NTgJAQ9fdXNlckNoZWNrcG9pbnQDBQ5yZWZlcmVyQWRkcmVzcwkBE19sb2FkVXNlclVTREJhbGFuY2UBBQ5yZWZlcmVyQWRkcmVzcwUUcmVmZXJlclNoYXJlc1JlZmVyYWwEGHJlZmVyZXJDaGVja3BvaW50QWN0aW9ucwgFDSR0MDIzNTg3MjM3NTgCXzEEE3JlZmVyZXJVbml0c0JhbGFuY2UIBQ0kdDAyMzU4NzIzNzU4Al8yBBlyZWZlcmVyVW5pdHNTaGFyZXNSZWZlcmFsCAUNJHQwMjM1ODcyMzc1OAJfMwkAzggCCQDOCAIJAM4IAgUYcmVmZXJlckNoZWNrcG9pbnRBY3Rpb25zCQEWX3NhdmVVc2VyU2hhcmVzUmVmZXJhbAIFB3NlbmRlcl8FFG5ld1VzZXJTaGFyZXNSZWZlcmFsCQEWX3NhdmVVc2VyU2hhcmVzUmVmZXJhbAIFDnJlZmVyZXJBZGRyZXNzBRduZXdSZWZlcmVyU2hhcmVzUmVmZXJhbAkBF19zYXZlVG90YWxTaGFyZXNSZWZlcmFsAQUVbmV3VG90YWxTaGFyZXNSZWZlcmFsBQNuaWwJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgURY2hlY2twb2ludEFjdGlvbnMFDnJlZmVyZXJBY3Rpb25zCQEUX3NhdmVUb3RhbFVTREJhbGFuY2UBBRN0b3RhbEJhbGFuY2VVcGRhdGVkCQERX3NhdmVUb2tlbkJhbGFuY2UCBQZ0b2tlbl8JALcCAgkBEV9sb2FkVG9rZW5CYWxhbmNlAQUGdG9rZW5fCQC2AgEFBmFtb3VudAkBE19zYXZlVXNlclVTREJhbGFuY2UCBQdzZW5kZXJfBRFuZXdVc2VyVVNEQmFsYW5jZQkBD19zYXZlVXNlcnNDb3VudAEFCnVzZXJzQ291bnQJARFfc2F2ZVVzZXJQb3NpdGlvbgMFBnRva2VuXwUHc2VuZGVyXwkAlAoCBRNuZXdVc2VyVG9rZW5CYWxhbmNlBRhuZXdVc2VyVG9rZW5CYWxhbmNlSW5VU0QFEHVzZXJVbml0c0JhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMZGVwb3NpdFdhdmVzAQlyZWZlcnJlcl8EA2VycgMDAwMJARBfd2hlbkluaXRpYWxpemVkAAkBDl93aGVuTm90UGF1c2VkAAcJARVfdmFsaWRhdGVQYXltZW50c1NpemUDCAUBaQhwYXltZW50cwABAhhkZXBvc2l0V2F2ZXM6IG5vIHBheW1lbnQHCQEVX3ZhbGlkYXRlV2F2ZXNQYXltZW50AgkAkQMCCAUBaQhwYXltZW50cwAAAhtkZXBvc2l0V2F2ZXM6IGludmFsaWQgYXNzZXQHCQEMX3ZhbGlkYXRlSW50BAkAaQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AGQAAQUHTUFYX0lOVAIcZGVwb3NpdFdhdmVzOiBpbnZhbGlkIGFtb3VudAcDCQAAAgUDZXJyBQNlcnIEBmFtb3VudAkAaQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AGQEBnNlbmRlcgkApQgBCAUBaQZjYWxsZXIEBXRva2VuBQVXQVZFUwQEcmF0ZQkBDV9nZXRUb2tlblJhdGUBBQV0b2tlbgQNJHQwMjY2MzMyNjcxMwkBEV9sb2FkVXNlclBvc2l0aW9uAgUFdG9rZW4FBnNlbmRlcgQQdXNlclRva2VuQmFsYW5jZQgFDSR0MDI2NjMzMjY3MTMCXzEEFXVzZXJUb2tlbkJhbGFuY2VJblVTRAgFDSR0MDI2NjMzMjY3MTMCXzIEDnVzZXJVU0RCYWxhbmNlCQETX2xvYWRVc2VyVVNEQmFsYW5jZQEFBnNlbmRlcgQRdXNlclNoYXJlc1JlZmVyYWwJARZfbG9hZFVzZXJTaGFyZXNSZWZlcmFsAQUGc2VuZGVyBA0kdDAyNjgzMDI2OTU2CQEPX3VzZXJDaGVja3BvaW50AwUGc2VuZGVyBQ51c2VyVVNEQmFsYW5jZQURdXNlclNoYXJlc1JlZmVyYWwEEWNoZWNrcG9pbnRBY3Rpb25zCAUNJHQwMjY4MzAyNjk1NgJfMQQQdXNlclVuaXRzQmFsYW5jZQgFDSR0MDI2ODMwMjY5NTYCXzIEFnVzZXJVbml0c1NoYXJlc1JlZmVyYWwIBQ0kdDAyNjgzMDI2OTU2Al8zBBNuZXdVc2VyVG9rZW5CYWxhbmNlCQC3AgIFEHVzZXJUb2tlbkJhbGFuY2UJALYCAQUGYW1vdW50BBhuZXdVc2VyVG9rZW5CYWxhbmNlSW5VU0QJAL0CBAUTbmV3VXNlclRva2VuQmFsYW5jZQUEcmF0ZQUOUEVSQ0VOVF9GQUNUT1IFBERPV04EEW5ld1VzZXJVU0RCYWxhbmNlCQC3AgIJALgCAgUOdXNlclVTREJhbGFuY2UFFXVzZXJUb2tlbkJhbGFuY2VJblVTRAUYbmV3VXNlclRva2VuQmFsYW5jZUluVVNEBBN0b3RhbEJhbGFuY2VVcGRhdGVkCQC3AgIJALgCAgkBFF9sb2FkVG90YWxVU0RCYWxhbmNlAAUVdXNlclRva2VuQmFsYW5jZUluVVNEBRhuZXdVc2VyVG9rZW5CYWxhbmNlSW5VU0QECnVzZXJzQ291bnQDCQAAAgUOdXNlclVTREJhbGFuY2UFC1pFUk9fQklHSU5UCQC3AgIJAQ9fbG9hZFVzZXJzQ291bnQABQpPTkVfQklHSU5UCQEPX2xvYWRVc2Vyc0NvdW50AAQOcmVmZXJlckFjdGlvbnMDAwkAZgIJALECAQUJcmVmZXJyZXJfAAAJARZfY2hlY2tSZWZlcmVyRXhpc3RlbmNlAQUJcmVmZXJyZXJfBwQOcmVmZXJlckFkZHJlc3MJAQxfbG9hZFJlZmVyZXIBBQlyZWZlcnJlcl8EEnNoYXJlc1RvRGlzdHJpYnV0ZQkAvQIECQC2AgEFBmFtb3VudAUEcmF0ZQUOUEVSQ0VOVF9GQUNUT1IFBERPV04EDHNoYXJlc1RvVXNlcgkAvQIEBRJzaGFyZXNUb0Rpc3RyaWJ1dGUJALYCAQAUCQC2AgEAZAUERE9XTgQPc2hhcmVzVG9SZWZlcmVyCQC4AgIFEnNoYXJlc1RvRGlzdHJpYnV0ZQUMc2hhcmVzVG9Vc2VyBBRuZXdVc2VyU2hhcmVzUmVmZXJhbAkAtwICBRF1c2VyU2hhcmVzUmVmZXJhbAUMc2hhcmVzVG9Vc2VyBBRyZWZlcmVyU2hhcmVzUmVmZXJhbAkBFl9sb2FkVXNlclNoYXJlc1JlZmVyYWwBBQ5yZWZlcmVyQWRkcmVzcwQXbmV3UmVmZXJlclNoYXJlc1JlZmVyYWwJALcCAgUUcmVmZXJlclNoYXJlc1JlZmVyYWwFD3NoYXJlc1RvUmVmZXJlcgQVbmV3VG90YWxTaGFyZXNSZWZlcmFsCQC3AgIJARdfbG9hZFRvdGFsU2hhcmVzUmVmZXJhbAAFEnNoYXJlc1RvRGlzdHJpYnV0ZQQNJHQwMjgyODkyODQ2MAkBD191c2VyQ2hlY2twb2ludAMFDnJlZmVyZXJBZGRyZXNzCQETX2xvYWRVc2VyVVNEQmFsYW5jZQEFDnJlZmVyZXJBZGRyZXNzBRRyZWZlcmVyU2hhcmVzUmVmZXJhbAQYcmVmZXJlckNoZWNrcG9pbnRBY3Rpb25zCAUNJHQwMjgyODkyODQ2MAJfMQQTcmVmZXJlclVuaXRzQmFsYW5jZQgFDSR0MDI4Mjg5Mjg0NjACXzIEGXJlZmVyZXJVbml0c1NoYXJlc1JlZmVyYWwIBQ0kdDAyODI4OTI4NDYwAl8zCQDOCAIJAM4IAgkAzggCBRhyZWZlcmVyQ2hlY2twb2ludEFjdGlvbnMJARZfc2F2ZVVzZXJTaGFyZXNSZWZlcmFsAgUGc2VuZGVyBRRuZXdVc2VyU2hhcmVzUmVmZXJhbAkBFl9zYXZlVXNlclNoYXJlc1JlZmVyYWwCBQ5yZWZlcmVyQWRkcmVzcwUXbmV3UmVmZXJlclNoYXJlc1JlZmVyYWwJARdfc2F2ZVRvdGFsU2hhcmVzUmVmZXJhbAEFFW5ld1RvdGFsU2hhcmVzUmVmZXJhbAUDbmlsBAppbnZvY2F0aW9uCQD8BwQJARNfbG9hZFNXYXZlc0NvbnRyYWN0AAUMRlVOQ19ERVBPU0lUBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNuaWwDCQAAAgUKaW52b2NhdGlvbgUKaW52b2NhdGlvbgkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCBRFjaGVja3BvaW50QWN0aW9ucwUOcmVmZXJlckFjdGlvbnMJARRfc2F2ZVRvdGFsVVNEQmFsYW5jZQEFE3RvdGFsQmFsYW5jZVVwZGF0ZWQJARFfc2F2ZVRva2VuQmFsYW5jZQIFBVdBVkVTCQC3AgIJARFfbG9hZFRva2VuQmFsYW5jZQEFBVdBVkVTCQC2AgEFBmFtb3VudAkBE19zYXZlVXNlclVTREJhbGFuY2UCBQZzZW5kZXIFEW5ld1VzZXJVU0RCYWxhbmNlCQEPX3NhdmVVc2Vyc0NvdW50AQUKdXNlcnNDb3VudAkBEV9zYXZlVXNlclBvc2l0aW9uAwUFdG9rZW4FBnNlbmRlcgkAlAoCBRNuZXdVc2VyVG9rZW5CYWxhbmNlBRhuZXdVc2VyVG9rZW5CYWxhbmNlSW5VU0QFEHVzZXJVbml0c0JhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENd2l0aGRyYXdXYXZlcwEHYW1vdW50XwQDZXJyAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEMX3ZhbGlkYXRlSW50BAkAaQIFB2Ftb3VudF8AZAABBQdNQVhfSU5UAh13aXRoZHJhd1dhdmVzOiBpbnZhbGlkIGFtb3VudAcDCQDAAgIJARBfbG9hZEZpbmlzaEJsb2NrAAkAtgIBBQZoZWlnaHQJAAIBAhp3aXRoZHJhd1dhdmVzOiBub3QgYWxsb3dlZAYHAwkAAAIFA2VycgUDZXJyBA5pbnRlcm5hbEFtb3VudAkAaQIFB2Ftb3VudF8AZAQGc2VuZGVyCQClCAEIBQFpBmNhbGxlcgQFdG9rZW4FBVdBVkVTBARyYXRlCQENX2dldFRva2VuUmF0ZQEFBXRva2VuBA0kdDAyOTcyODI5ODA4CQERX2xvYWRVc2VyUG9zaXRpb24CBQV0b2tlbgUGc2VuZGVyBBB1c2VyVG9rZW5CYWxhbmNlCAUNJHQwMjk3MjgyOTgwOAJfMQQVdXNlclRva2VuQmFsYW5jZUluVVNECAUNJHQwMjk3MjgyOTgwOAJfMgQOdXNlclVTREJhbGFuY2UJARNfbG9hZFVzZXJVU0RCYWxhbmNlAQUGc2VuZGVyBBF1c2VyU2hhcmVzUmVmZXJhbAkBFl9sb2FkVXNlclNoYXJlc1JlZmVyYWwBBQZzZW5kZXIEDSR0MDI5OTI1MzAwNTEJAQ9fdXNlckNoZWNrcG9pbnQDBQZzZW5kZXIFDnVzZXJVU0RCYWxhbmNlBRF1c2VyU2hhcmVzUmVmZXJhbAQRY2hlY2twb2ludEFjdGlvbnMIBQ0kdDAyOTkyNTMwMDUxAl8xBBB1c2VyVW5pdHNCYWxhbmNlCAUNJHQwMjk5MjUzMDA1MQJfMgQWdXNlclVuaXRzU2hhcmVzUmVmZXJhbAgFDSR0MDI5OTI1MzAwNTECXzMEE25ld1VzZXJUb2tlbkJhbGFuY2UJALgCAgUQdXNlclRva2VuQmFsYW5jZQkAtgIBBQ5pbnRlcm5hbEFtb3VudAQEZXJyMQkBDF92YWxpZGF0ZUludAQJAKADAQUTbmV3VXNlclRva2VuQmFsYW5jZQAABQdNQVhfSU5UAih3aXRoZHJhd1dhdmVzOiBpbnN1ZmZpY2llbnQgdG9rZW4gYW1vdW50AwkAAAIFBGVycjEFBGVycjEEGG5ld1VzZXJUb2tlbkJhbGFuY2VJblVTRAkAvQIEBRNuZXdVc2VyVG9rZW5CYWxhbmNlBQRyYXRlBQ5QRVJDRU5UX0ZBQ1RPUgUERE9XTgQRbmV3VXNlclVTREJhbGFuY2UJALcCAgkAuAICBQ51c2VyVVNEQmFsYW5jZQUVdXNlclRva2VuQmFsYW5jZUluVVNEBRhuZXdVc2VyVG9rZW5CYWxhbmNlSW5VU0QEE3RvdGFsQmFsYW5jZVVwZGF0ZWQJALcCAgkAuAICCQEUX2xvYWRUb3RhbFVTREJhbGFuY2UABRV1c2VyVG9rZW5CYWxhbmNlSW5VU0QFGG5ld1VzZXJUb2tlbkJhbGFuY2VJblVTRAQOc1dhdmVzQ29udHJhY3QJARNfbG9hZFNXYXZlc0NvbnRyYWN0AAQLc1dhdmVzQXNzZXQJARBfbG9hZFNXYXZlc0Fzc2V0AQUOc1dhdmVzQ29udHJhY3QECmludm9jYXRpb24JAPwHBAUOc1dhdmVzQ29udHJhY3QFDUZVTkNfR0VUX1JBVEUFA25pbAUDbmlsBApzd2F2ZXNSYXRlBAckbWF0Y2gwBQppbnZvY2F0aW9uAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkApwMBBQFhCQACAQImd2l0aGRyYXdXYXZlczogc1dhdmVzIGdldFJhdGUoKSByZXZlcnQEEHNXYXZlc1RvV2l0aGRyYXcJAKADAQkAvQIECQC2AgEFB2Ftb3VudF8FElNXQVZFU19SQVRFX0ZBQ1RPUgUKc3dhdmVzUmF0ZQUHQ0VJTElORwQLaW52b2NhdGlvbjEJAPwHBAUOc1dhdmVzQ29udHJhY3QFDUZVTkNfV0lUSERSQVcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULc1dhdmVzQXNzZXQFEHNXYXZlc1RvV2l0aGRyYXcFA25pbAMJAAACBQtpbnZvY2F0aW9uMQULaW52b2NhdGlvbjEJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdhbW91bnRfBQR1bml0BQNuaWwFEWNoZWNrcG9pbnRBY3Rpb25zCQEUX3NhdmVUb3RhbFVTREJhbGFuY2UBBRN0b3RhbEJhbGFuY2VVcGRhdGVkCQERX3NhdmVUb2tlbkJhbGFuY2UCBQVXQVZFUwkAuAICCQERX2xvYWRUb2tlbkJhbGFuY2UBBQVXQVZFUwkAtgIBBQ5pbnRlcm5hbEFtb3VudAkBE19zYXZlVXNlclVTREJhbGFuY2UCBQZzZW5kZXIFEW5ld1VzZXJVU0RCYWxhbmNlCQERX3NhdmVVc2VyUG9zaXRpb24DBQV0b2tlbgUGc2VuZGVyCQCUCgIFE25ld1VzZXJUb2tlbkJhbGFuY2UFGG5ld1VzZXJUb2tlbkJhbGFuY2VJblVTRAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5zdGFydFJldHJvZHJvcAQLdW5pdHNBc3NldF8MYW1vdW50Rm9yTFBfEWFtb3VudEZvclJlZmVyYWxfCWJsb2Nrc0F0XwQDZXJyAwMDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEOX3doZW5Ob3RQYXVzZWQABwkBDl92YWxpZGF0ZUFzc2V0AgULdW5pdHNBc3NldF8CI3N0YXJ0UmV0cm9kcm9wOiBpbnZhbGlkIHVuaXRzIGFzc2V0BwkBDF92YWxpZGF0ZUludAQFDGFtb3VudEZvckxQXwAABQdNQVhfSU5UAiNzdGFydFJldHJvZHJvcDogaW52YWxpZCBhbW91bnRGb3JMUAcJAQxfdmFsaWRhdGVJbnQEBRFhbW91bnRGb3JSZWZlcmFsXwAABQdNQVhfSU5UAihzdGFydFJldHJvZHJvcDogaW52YWxpZCBhbW91bnRGb3JSZWZlcmFsBwkBDF92YWxpZGF0ZUludAQFCWJsb2Nrc0F0XwABBQdNQVhfSU5UAiBzdGFydFJldHJvZHJvcDogaW52YWxpZCBibG9ja3NBdAcJARFfdmFsaWRhdGVFcUJpZ0ludAMJAQ9fbG9hZFN0YXJ0QmxvY2sABQtaRVJPX0JJR0lOVAIfc3RhcnRSZXRyb2Ryb3A6IGFscmVhZHkgc3RhcnRlZAcDCQAAAgUDZXJyBQNlcnIEC3N0YXJ0SGVpZ2h0CQC2AgEFBmhlaWdodAQMZmluaXNoSGVpZ2h0CQC3AgIFC3N0YXJ0SGVpZ2h0CQC2AgEFCWJsb2Nrc0F0XwQEZXJyMQMJAGYCCQBkAgUMYW1vdW50Rm9yTFBfBRFhbW91bnRGb3JSZWZlcmFsXwkA8AcCBQR0aGlzCQDZBAEFC3VuaXRzQXNzZXRfCQACAQIic3RhcnRSZXRyb2Ryb3A6IGluc3VmZmljaWVudCBmdW5kcwYDCQAAAgUEZXJyMQUEZXJyMQkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ9fc2F2ZVVuaXRzQXNzZXQBCQDZBAEFC3VuaXRzQXNzZXRfCQEPX3NhdmVTdGFydEJsb2NrAQULc3RhcnRIZWlnaHQJARBfc2F2ZUZpbmlzaEJsb2NrAQUMZmluaXNoSGVpZ2h0CQEUX3NhdmVUb3RhbFVuaXRzRm9yTFABCQC2AgEFDGFtb3VudEZvckxQXwkBGV9zYXZlVG90YWxVbml0c0ZvclJlZmVyYWwBCQC2AgEFEWFtb3VudEZvclJlZmVyYWxfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2luY3JlYXNlVW5pdHNTdXBwbHkCDGFtb3VudEZvckxQXxFhbW91bnRGb3JSZWZlcmFsXwQDZXJyAwMDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEOX3doZW5Ob3RQYXVzZWQABwkBDF92YWxpZGF0ZUludAQFDGFtb3VudEZvckxQXwAABQdNQVhfSU5UAihpbmNyZWFzZVVuaXRzU3VwcGx5OiBpbnZhbGlkIGFtb3VudEZvckxQBwkBDF92YWxpZGF0ZUludAQFEWFtb3VudEZvclJlZmVyYWxfAAAFB01BWF9JTlQCLWluY3JlYXNlVW5pdHNTdXBwbHk6IGludmFsaWQgYW1vdW50Rm9yUmVmZXJhbAcJAQ9fdmFsaWRhdGVCaWdJbnQECQC2AgEFBmhlaWdodAkAtwICCQEPX2xvYWRTdGFydEJsb2NrAAUKT05FX0JJR0lOVAkAuAICCQEQX2xvYWRGaW5pc2hCbG9jawAFCk9ORV9CSUdJTlQCJGluY3JlYXNlVW5pdHNTdXBwbHk6IGRyb3Agbm90IGFjdGl2ZQcDCQAAAgUDZXJyBQNlcnIEDm5ld0Ftb3VudEZvckxQCQC3AgIJARRfbG9hZFRvdGFsVW5pdHNGb3JMUAAJALYCAQUMYW1vdW50Rm9yTFBfBBNuZXdBbW91bnRGb3JSZWZlcmFsCQC3AgIJARlfbG9hZFRvdGFsVW5pdHNGb3JSZWZlcmFsAAkAtgIBBRFhbW91bnRGb3JSZWZlcmFsXwQEZXJyMQMJAL8CAgkAtwICBQ5uZXdBbW91bnRGb3JMUAUTbmV3QW1vdW50Rm9yUmVmZXJhbAkAtgIBCQDwBwIFBHRoaXMJAQ9fbG9hZFVuaXRzQXNzZXQACQACAQInaW5jcmVhc2VVbml0c1N1cHBseTogaW5zdWZmaWNpZW50IGZ1bmRzBgMJAAACBQRlcnIxBQRlcnIxCQCUCgIJAM4IAgkBFF9zYXZlVG90YWxVbml0c0ZvckxQAQUObmV3QW1vdW50Rm9yTFAJARlfc2F2ZVRvdGFsVW5pdHNGb3JSZWZlcmFsAQUTbmV3QW1vdW50Rm9yUmVmZXJhbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjaGVja3BvaW50AQV1c2VyXwQNJHQwMzM4MjAzMzk1OQkBD191c2VyQ2hlY2twb2ludAMFBXVzZXJfCQETX2xvYWRVc2VyVVNEQmFsYW5jZQEFBXVzZXJfCQEWX2xvYWRVc2VyU2hhcmVzUmVmZXJhbAEFBXVzZXJfBAdhY3Rpb25zCAUNJHQwMzM4MjAzMzk1OQJfMQQQdXNlclVuaXRzQmFsYW5jZQgFDSR0MDMzODIwMzM5NTkCXzIEFnVzZXJVbml0c1NoYXJlc1JlZmVyYWwIBQ0kdDAzMzgyMDMzOTU5Al8zCQCUCgIFB2FjdGlvbnMJAJQKAgUQdXNlclVuaXRzQmFsYW5jZQUWdXNlclVuaXRzU2hhcmVzUmVmZXJhbAFpAQhnZXRVbml0cwEFdXNlcl8EDSR0MDM0MDcyMzQyMTEJAQ9fdXNlckNoZWNrcG9pbnQDBQV1c2VyXwkBE19sb2FkVXNlclVTREJhbGFuY2UBBQV1c2VyXwkBFl9sb2FkVXNlclNoYXJlc1JlZmVyYWwBBQV1c2VyXwQHYWN0aW9ucwgFDSR0MDM0MDcyMzQyMTECXzEEEHVzZXJVbml0c0JhbGFuY2UIBQ0kdDAzNDA3MjM0MjExAl8yBBZ1c2VyVW5pdHNTaGFyZXNSZWZlcmFsCAUNJHQwMzQwNzIzNDIxMQJfMwkAlAoCBQNuaWwJAJQKAgUQdXNlclVuaXRzQmFsYW5jZQUWdXNlclVuaXRzU2hhcmVzUmVmZXJhbAFpAQpzZXRSZWZlcmVyAgljb2RlaGFzaF8IYWRkcmVzc18EA2VycgMJAQxfb25seU1hbmFnZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDF9zYXZlUmVmZXJlcgIFCWNvZGVoYXNoXwUIYWRkcmVzc18FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0TWFuYWdlcgEIbWFuYWdlcl8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUIbWFuYWdlcl8CG3NldE1hbmFnZXI6IGludmFsaWQgbWFuYWdlcgcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDF9zYXZlTWFuYWdlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG1hbmFnZXJfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFHVwZGF0ZUNhbGxlckNvbnRyYWN0AQ9jYWxsZXJDb250cmFjdF8EA2VycgMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwMJAAACBQNlcnIFA2VycgkAlAoCCQETX3NhdmVDYWxsZXJDb250cmFjdAEFD2NhbGxlckNvbnRyYWN0XwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVwYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fd2hlbk5vdFBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5wYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQtfd2hlblBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQcFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMdXBkYXRlUGF1c2VyAQdwYXVzZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CHHVwZGF0ZVBhdXNlcjogaW52YWxpZCBwYXVzZXIHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc2V0TXVsdGlzaWcBCW11bHRpc2lnXwQDZXJyAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCW11bHRpc2lnXwIdc2V0TXVsdGlzaWc6IGludmFsaWQgbXVsdGlzaWcHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ1fc2F2ZU11bHRpc2lnAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbXVsdGlzaWdfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwkAuQkCCQDMCAIFCktFWV9TVEFUVVMJAMwIAgkApQgBBQR0aGlzCQDMCAIJANgEAQgFAnR4AmlkBQNuaWwFCVNFUEFSQVRPUgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXk6QwYV", "height": 2968651, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CgH4buDCd78U4f4CW2aVuTYT8RwtVwUhVKDNTGwy3BNy Next: none Diff:
Old | New | Differences | |
---|---|---|---|
761 | 761 | else false) | |
762 | 762 | then bZ(cC, "deposit: invalid caller") | |
763 | 763 | else false) | |
764 | - | then Y(cG, | |
764 | + | then Y(cG, 1, O, "deposit: invalid amount") | |
765 | 765 | else false | |
766 | 766 | if ((cB == cB)) | |
767 | 767 | then { | |
817 | 817 | else false) | |
818 | 818 | then ag(cz.payments[0], "depositWaves: invalid asset") | |
819 | 819 | else false) | |
820 | - | then Y((cz.payments[0].amount / 100), | |
820 | + | then Y((cz.payments[0].amount / 100), 1, O, "depositWaves: invalid amount") | |
821 | 821 | else false | |
822 | 822 | if ((cB == cB)) | |
823 | 823 | then { | |
875 | 875 | let cB = if (if (if (bT()) | |
876 | 876 | then bU() | |
877 | 877 | else false) | |
878 | - | then Y((cE / 100), | |
878 | + | then Y((cE / 100), 1, O, "withdrawWaves: invalid amount") | |
879 | 879 | else false) | |
880 | 880 | then if ((bf() >= toBigInt(height))) | |
881 | 881 | then throw("withdrawWaves: not allowed") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = "WAVES" | |
7 | 7 | ||
8 | 8 | let c = "MULTISIG" | |
9 | 9 | ||
10 | 10 | let d = "STATUS" | |
11 | 11 | ||
12 | 12 | let e = "INIT" | |
13 | 13 | ||
14 | 14 | let f = "PAUSED" | |
15 | 15 | ||
16 | 16 | let g = "PAUSER" | |
17 | 17 | ||
18 | 18 | let h = "MANAGER" | |
19 | 19 | ||
20 | 20 | let i = "REFERER" | |
21 | 21 | ||
22 | 22 | let j = "EXECUTOR" | |
23 | 23 | ||
24 | 24 | let k = "ORACLE" | |
25 | 25 | ||
26 | 26 | let l = "CALLER_CONTRACT" | |
27 | 27 | ||
28 | 28 | let m = "PRICE" | |
29 | 29 | ||
30 | 30 | let n = "UNITS_ASSET" | |
31 | 31 | ||
32 | 32 | let o = "USER_POSITION" | |
33 | 33 | ||
34 | 34 | let p = "USER_USD_BALANCE" | |
35 | 35 | ||
36 | 36 | let q = "USER_UNITS_PER_USD_BALANCE_INTEGRAL" | |
37 | 37 | ||
38 | 38 | let r = "USER_UNITS_PER_REFERAL_SHARE_INTEGRAL" | |
39 | 39 | ||
40 | 40 | let s = "USER_CHECKPOINT_AT" | |
41 | 41 | ||
42 | 42 | let t = "USER_UNITS_BALANCE_DISTRIBUTED" | |
43 | 43 | ||
44 | 44 | let u = "USER_UNITS_SHARES_REFERAL" | |
45 | 45 | ||
46 | 46 | let v = "USER_SHARES_REFERAL" | |
47 | 47 | ||
48 | 48 | let w = "START_BLOCK" | |
49 | 49 | ||
50 | 50 | let x = "FINISH_BLOCK" | |
51 | 51 | ||
52 | 52 | let y = "TOTAL_UNITS_FOR_LP" | |
53 | 53 | ||
54 | 54 | let z = "TOTAL_UNITS_FOR_REFERAL" | |
55 | 55 | ||
56 | 56 | let A = "TOTAL_USD_BALANCE" | |
57 | 57 | ||
58 | 58 | let B = "UNITS_PER_USD_BALANCE_INTEGRAL" | |
59 | 59 | ||
60 | 60 | let C = "CHECKPOINT_AT" | |
61 | 61 | ||
62 | 62 | let D = "UNITS_BALANCE_DISTRIBUTED" | |
63 | 63 | ||
64 | 64 | let E = "TOKEN_BALANCE" | |
65 | 65 | ||
66 | 66 | let F = "USERS_COUNT" | |
67 | 67 | ||
68 | 68 | let G = "UNITS_PER_REFERAL_SHARE_INTEGRAL" | |
69 | 69 | ||
70 | 70 | let H = "UNITS_SHARES_REFERAL" | |
71 | 71 | ||
72 | 72 | let I = "TOTAL_SHARES_REFERAL" | |
73 | 73 | ||
74 | 74 | let J = "SWAVES_CONTRACT" | |
75 | 75 | ||
76 | 76 | let K = "ASSET" | |
77 | 77 | ||
78 | 78 | let L = "deposit" | |
79 | 79 | ||
80 | 80 | let M = "getRate" | |
81 | 81 | ||
82 | 82 | let N = "withdraw" | |
83 | 83 | ||
84 | 84 | let O = 9223372036854775807 | |
85 | 85 | ||
86 | 86 | let P = toBigInt(1000000000000) | |
87 | 87 | ||
88 | 88 | let Q = toBigInt(0) | |
89 | 89 | ||
90 | 90 | let R = toBigInt(1) | |
91 | 91 | ||
92 | 92 | let S = toBigInt(1000000000000) | |
93 | 93 | ||
94 | 94 | func T (U,V) = { | |
95 | 95 | let W = addressFromString(U) | |
96 | 96 | if ($isInstanceOf(W, "Address")) | |
97 | 97 | then { | |
98 | 98 | let X = W | |
99 | 99 | true | |
100 | 100 | } | |
101 | 101 | else throw(V) | |
102 | 102 | } | |
103 | 103 | ||
104 | 104 | ||
105 | 105 | func Y (Z,aa,ab,V) = if (if ((aa > Z)) | |
106 | 106 | then true | |
107 | 107 | else (Z > ab)) | |
108 | 108 | then throw(V) | |
109 | 109 | else true | |
110 | 110 | ||
111 | 111 | ||
112 | 112 | func ac (Z,aa,ab,V) = if (if ((aa > Z)) | |
113 | 113 | then true | |
114 | 114 | else (Z > ab)) | |
115 | 115 | then throw(V) | |
116 | 116 | else true | |
117 | 117 | ||
118 | 118 | ||
119 | 119 | func ad (ae,af,V) = if ((size(ae) != af)) | |
120 | 120 | then throw(V) | |
121 | 121 | else true | |
122 | 122 | ||
123 | 123 | ||
124 | 124 | func ag (ah,V) = { | |
125 | 125 | let W = ah.assetId | |
126 | 126 | if ($isInstanceOf(W, "ByteVector")) | |
127 | 127 | then { | |
128 | 128 | let X = W | |
129 | 129 | throw(V) | |
130 | 130 | } | |
131 | 131 | else if ($isInstanceOf(W, "Unit")) | |
132 | 132 | then true | |
133 | 133 | else throw("Match error") | |
134 | 134 | } | |
135 | 135 | ||
136 | 136 | ||
137 | 137 | func ai (aj,ak,V) = if ((aj != ak)) | |
138 | 138 | then throw(V) | |
139 | 139 | else true | |
140 | 140 | ||
141 | 141 | ||
142 | 142 | func al (am,V) = { | |
143 | 143 | let W = assetInfo(fromBase58String(am)) | |
144 | 144 | if ($isInstanceOf(W, "Asset")) | |
145 | 145 | then { | |
146 | 146 | let X = W | |
147 | 147 | true | |
148 | 148 | } | |
149 | 149 | else throw(V) | |
150 | 150 | } | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func an () = { | |
154 | 154 | let W = getBoolean(e) | |
155 | 155 | if ($isInstanceOf(W, "Boolean")) | |
156 | 156 | then { | |
157 | 157 | let X = W | |
158 | 158 | X | |
159 | 159 | } | |
160 | 160 | else false | |
161 | 161 | } | |
162 | 162 | ||
163 | 163 | ||
164 | 164 | func ao (ap) = [BooleanEntry(e, ap)] | |
165 | 165 | ||
166 | 166 | ||
167 | 167 | func aq () = { | |
168 | 168 | let W = getBoolean(f) | |
169 | 169 | if ($isInstanceOf(W, "Boolean")) | |
170 | 170 | then { | |
171 | 171 | let X = W | |
172 | 172 | X | |
173 | 173 | } | |
174 | 174 | else false | |
175 | 175 | } | |
176 | 176 | ||
177 | 177 | ||
178 | 178 | func ar (as) = [BooleanEntry(f, as)] | |
179 | 179 | ||
180 | 180 | ||
181 | 181 | func at () = { | |
182 | 182 | let W = getString(g) | |
183 | 183 | if ($isInstanceOf(W, "String")) | |
184 | 184 | then { | |
185 | 185 | let X = W | |
186 | 186 | addressFromStringValue(X) | |
187 | 187 | } | |
188 | 188 | else Address(base58'') | |
189 | 189 | } | |
190 | 190 | ||
191 | 191 | ||
192 | 192 | func au (av) = [StringEntry(g, toString(av))] | |
193 | 193 | ||
194 | 194 | ||
195 | 195 | func aw () = { | |
196 | 196 | let W = getString(c) | |
197 | 197 | if ($isInstanceOf(W, "String")) | |
198 | 198 | then { | |
199 | 199 | let X = W | |
200 | 200 | addressFromStringValue(X) | |
201 | 201 | } | |
202 | 202 | else Address(base58'') | |
203 | 203 | } | |
204 | 204 | ||
205 | 205 | ||
206 | 206 | func ax (ay) = [StringEntry(c, toString(ay))] | |
207 | 207 | ||
208 | 208 | ||
209 | 209 | func az () = { | |
210 | 210 | let W = getString(j) | |
211 | 211 | if ($isInstanceOf(W, "String")) | |
212 | 212 | then { | |
213 | 213 | let X = W | |
214 | 214 | addressFromStringValue(X) | |
215 | 215 | } | |
216 | 216 | else Address(base58'') | |
217 | 217 | } | |
218 | 218 | ||
219 | 219 | ||
220 | 220 | func aA (aB) = [StringEntry(j, toString(aB))] | |
221 | 221 | ||
222 | 222 | ||
223 | 223 | func aC () = { | |
224 | 224 | let W = getString(k) | |
225 | 225 | if ($isInstanceOf(W, "String")) | |
226 | 226 | then { | |
227 | 227 | let X = W | |
228 | 228 | addressFromStringValue(X) | |
229 | 229 | } | |
230 | 230 | else Address(base58'') | |
231 | 231 | } | |
232 | 232 | ||
233 | 233 | ||
234 | 234 | func aD (aE) = [StringEntry(k, toString(aE))] | |
235 | 235 | ||
236 | 236 | ||
237 | 237 | func aF () = { | |
238 | 238 | let W = getString(l) | |
239 | 239 | if ($isInstanceOf(W, "String")) | |
240 | 240 | then { | |
241 | 241 | let X = W | |
242 | 242 | X | |
243 | 243 | } | |
244 | 244 | else "" | |
245 | 245 | } | |
246 | 246 | ||
247 | 247 | ||
248 | 248 | func aG (aH) = [StringEntry(l, aH)] | |
249 | 249 | ||
250 | 250 | ||
251 | 251 | func aI (aJ,aK) = { | |
252 | 252 | let W = getString(makeString([o, aJ, aK], a)) | |
253 | 253 | if ($isInstanceOf(W, "String")) | |
254 | 254 | then { | |
255 | 255 | let X = W | |
256 | 256 | let aL = split_51C(X, a) | |
257 | 257 | $Tuple2(parseBigIntValue(aL[0]), parseBigIntValue(aL[1])) | |
258 | 258 | } | |
259 | 259 | else $Tuple2(Q, Q) | |
260 | 260 | } | |
261 | 261 | ||
262 | 262 | ||
263 | 263 | func aM (aJ,aK,aN) = [StringEntry(makeString([o, aJ, aK], a), makeString_11C([toString(aN._1), toString(aN._2)], a))] | |
264 | 264 | ||
265 | 265 | ||
266 | 266 | func aO (aK) = { | |
267 | 267 | let W = getString(makeString([p, aK], a)) | |
268 | 268 | if ($isInstanceOf(W, "String")) | |
269 | 269 | then { | |
270 | 270 | let X = W | |
271 | 271 | parseBigIntValue(X) | |
272 | 272 | } | |
273 | 273 | else Q | |
274 | 274 | } | |
275 | 275 | ||
276 | 276 | ||
277 | 277 | func aP (aK,aQ) = [StringEntry(makeString([p, aK], a), toString(aQ))] | |
278 | 278 | ||
279 | 279 | ||
280 | 280 | func aR (aK) = { | |
281 | 281 | let W = getString(makeString([v, aK], a)) | |
282 | 282 | if ($isInstanceOf(W, "String")) | |
283 | 283 | then { | |
284 | 284 | let X = W | |
285 | 285 | parseBigIntValue(X) | |
286 | 286 | } | |
287 | 287 | else Q | |
288 | 288 | } | |
289 | 289 | ||
290 | 290 | ||
291 | 291 | func aS (aK,aQ) = [StringEntry(makeString([v, aK], a), toString(aQ))] | |
292 | 292 | ||
293 | 293 | ||
294 | 294 | func aT () = { | |
295 | 295 | let W = getString(B) | |
296 | 296 | if ($isInstanceOf(W, "String")) | |
297 | 297 | then { | |
298 | 298 | let X = W | |
299 | 299 | parseBigIntValue(X) | |
300 | 300 | } | |
301 | 301 | else Q | |
302 | 302 | } | |
303 | 303 | ||
304 | 304 | ||
305 | 305 | func aU (aQ) = [StringEntry(B, toString(aQ))] | |
306 | 306 | ||
307 | 307 | ||
308 | 308 | func aV (aK) = { | |
309 | 309 | let W = getString(makeString([q, aK], a)) | |
310 | 310 | if ($isInstanceOf(W, "String")) | |
311 | 311 | then { | |
312 | 312 | let X = W | |
313 | 313 | parseBigIntValue(X) | |
314 | 314 | } | |
315 | 315 | else Q | |
316 | 316 | } | |
317 | 317 | ||
318 | 318 | ||
319 | 319 | func aW (aK,aQ) = [StringEntry(makeString([q, aK], a), toString(aQ))] | |
320 | 320 | ||
321 | 321 | ||
322 | 322 | func aX () = { | |
323 | 323 | let W = getString(C) | |
324 | 324 | if ($isInstanceOf(W, "String")) | |
325 | 325 | then { | |
326 | 326 | let X = W | |
327 | 327 | parseBigIntValue(X) | |
328 | 328 | } | |
329 | 329 | else Q | |
330 | 330 | } | |
331 | 331 | ||
332 | 332 | ||
333 | 333 | func aY (aQ) = [StringEntry(C, toString(aQ))] | |
334 | 334 | ||
335 | 335 | ||
336 | 336 | func aZ (aK) = { | |
337 | 337 | let W = getString(makeString([s, aK], a)) | |
338 | 338 | if ($isInstanceOf(W, "String")) | |
339 | 339 | then { | |
340 | 340 | let X = W | |
341 | 341 | parseBigIntValue(X) | |
342 | 342 | } | |
343 | 343 | else Q | |
344 | 344 | } | |
345 | 345 | ||
346 | 346 | ||
347 | 347 | func ba (aK,aQ) = [StringEntry(makeString([s, aK], a), toString(aQ))] | |
348 | 348 | ||
349 | 349 | ||
350 | 350 | func bb () = { | |
351 | 351 | let W = getString(n) | |
352 | 352 | if ($isInstanceOf(W, "String")) | |
353 | 353 | then { | |
354 | 354 | let X = W | |
355 | 355 | fromBase58String(X) | |
356 | 356 | } | |
357 | 357 | else base58'' | |
358 | 358 | } | |
359 | 359 | ||
360 | 360 | ||
361 | 361 | func bc (am) = [StringEntry(n, toBase58String(am))] | |
362 | 362 | ||
363 | 363 | ||
364 | 364 | func bd () = { | |
365 | 365 | let W = getString(w) | |
366 | 366 | if ($isInstanceOf(W, "String")) | |
367 | 367 | then { | |
368 | 368 | let X = W | |
369 | 369 | parseBigIntValue(X) | |
370 | 370 | } | |
371 | 371 | else Q | |
372 | 372 | } | |
373 | 373 | ||
374 | 374 | ||
375 | 375 | func be (aQ) = [StringEntry(w, toString(aQ))] | |
376 | 376 | ||
377 | 377 | ||
378 | 378 | func bf () = { | |
379 | 379 | let W = getString(x) | |
380 | 380 | if ($isInstanceOf(W, "String")) | |
381 | 381 | then { | |
382 | 382 | let X = W | |
383 | 383 | parseBigIntValue(X) | |
384 | 384 | } | |
385 | 385 | else Q | |
386 | 386 | } | |
387 | 387 | ||
388 | 388 | ||
389 | 389 | func bg (aQ) = [StringEntry(x, toString(aQ))] | |
390 | 390 | ||
391 | 391 | ||
392 | 392 | func bh () = { | |
393 | 393 | let W = getString(D) | |
394 | 394 | if ($isInstanceOf(W, "String")) | |
395 | 395 | then { | |
396 | 396 | let X = W | |
397 | 397 | parseBigIntValue(X) | |
398 | 398 | } | |
399 | 399 | else Q | |
400 | 400 | } | |
401 | 401 | ||
402 | 402 | ||
403 | 403 | func bi (aQ) = [StringEntry(D, toString(aQ))] | |
404 | 404 | ||
405 | 405 | ||
406 | 406 | func bj (aK) = { | |
407 | 407 | let W = getString(makeString([t, aK], a)) | |
408 | 408 | if ($isInstanceOf(W, "String")) | |
409 | 409 | then { | |
410 | 410 | let X = W | |
411 | 411 | parseBigIntValue(X) | |
412 | 412 | } | |
413 | 413 | else Q | |
414 | 414 | } | |
415 | 415 | ||
416 | 416 | ||
417 | 417 | func bk (aK,aQ) = [StringEntry(makeString([t, aK], a), toString(aQ))] | |
418 | 418 | ||
419 | 419 | ||
420 | 420 | func bl () = { | |
421 | 421 | let W = getString(A) | |
422 | 422 | if ($isInstanceOf(W, "String")) | |
423 | 423 | then { | |
424 | 424 | let X = W | |
425 | 425 | parseBigIntValue(X) | |
426 | 426 | } | |
427 | 427 | else Q | |
428 | 428 | } | |
429 | 429 | ||
430 | 430 | ||
431 | 431 | func bm (aQ) = [StringEntry(A, toString(aQ))] | |
432 | 432 | ||
433 | 433 | ||
434 | 434 | func bn () = { | |
435 | 435 | let W = getString(J) | |
436 | 436 | if ($isInstanceOf(W, "String")) | |
437 | 437 | then { | |
438 | 438 | let X = W | |
439 | 439 | addressFromStringValue(X) | |
440 | 440 | } | |
441 | 441 | else Address(base58'') | |
442 | 442 | } | |
443 | 443 | ||
444 | 444 | ||
445 | 445 | func bo (bp) = [StringEntry(J, toString(bp))] | |
446 | 446 | ||
447 | 447 | ||
448 | 448 | func bq (bp) = { | |
449 | 449 | let W = getString(bp, K) | |
450 | 450 | if ($isInstanceOf(W, "String")) | |
451 | 451 | then { | |
452 | 452 | let X = W | |
453 | 453 | fromBase58String(X) | |
454 | 454 | } | |
455 | 455 | else throw("_loadSWavesAsset: revert") | |
456 | 456 | } | |
457 | 457 | ||
458 | 458 | ||
459 | 459 | func br (aJ) = { | |
460 | 460 | let W = getString(makeString([E, aJ], a)) | |
461 | 461 | if ($isInstanceOf(W, "String")) | |
462 | 462 | then { | |
463 | 463 | let X = W | |
464 | 464 | parseBigIntValue(X) | |
465 | 465 | } | |
466 | 466 | else Q | |
467 | 467 | } | |
468 | 468 | ||
469 | 469 | ||
470 | 470 | func bs (aJ,aQ) = [StringEntry(makeString([E, aJ], a), toString(aQ))] | |
471 | 471 | ||
472 | 472 | ||
473 | 473 | func bt () = { | |
474 | 474 | let W = getString(F) | |
475 | 475 | if ($isInstanceOf(W, "String")) | |
476 | 476 | then { | |
477 | 477 | let X = W | |
478 | 478 | parseBigIntValue(X) | |
479 | 479 | } | |
480 | 480 | else Q | |
481 | 481 | } | |
482 | 482 | ||
483 | 483 | ||
484 | 484 | func bu (aQ) = [StringEntry(F, toString(aQ))] | |
485 | 485 | ||
486 | 486 | ||
487 | 487 | func bv () = { | |
488 | 488 | let W = getString(G) | |
489 | 489 | if ($isInstanceOf(W, "String")) | |
490 | 490 | then { | |
491 | 491 | let X = W | |
492 | 492 | parseBigIntValue(X) | |
493 | 493 | } | |
494 | 494 | else Q | |
495 | 495 | } | |
496 | 496 | ||
497 | 497 | ||
498 | 498 | func bw (aQ) = [StringEntry(G, toString(aQ))] | |
499 | 499 | ||
500 | 500 | ||
501 | 501 | func bx () = { | |
502 | 502 | let W = getString(H) | |
503 | 503 | if ($isInstanceOf(W, "String")) | |
504 | 504 | then { | |
505 | 505 | let X = W | |
506 | 506 | parseBigIntValue(X) | |
507 | 507 | } | |
508 | 508 | else Q | |
509 | 509 | } | |
510 | 510 | ||
511 | 511 | ||
512 | 512 | func by (aQ) = [StringEntry(H, toString(aQ))] | |
513 | 513 | ||
514 | 514 | ||
515 | 515 | func bz () = { | |
516 | 516 | let W = getString(y) | |
517 | 517 | if ($isInstanceOf(W, "String")) | |
518 | 518 | then { | |
519 | 519 | let X = W | |
520 | 520 | parseBigIntValue(X) | |
521 | 521 | } | |
522 | 522 | else Q | |
523 | 523 | } | |
524 | 524 | ||
525 | 525 | ||
526 | 526 | func bA (aQ) = [StringEntry(y, toString(aQ))] | |
527 | 527 | ||
528 | 528 | ||
529 | 529 | func bB () = { | |
530 | 530 | let W = getString(z) | |
531 | 531 | if ($isInstanceOf(W, "String")) | |
532 | 532 | then { | |
533 | 533 | let X = W | |
534 | 534 | parseBigIntValue(X) | |
535 | 535 | } | |
536 | 536 | else Q | |
537 | 537 | } | |
538 | 538 | ||
539 | 539 | ||
540 | 540 | func bC (aQ) = [StringEntry(z, toString(aQ))] | |
541 | 541 | ||
542 | 542 | ||
543 | 543 | func bD () = { | |
544 | 544 | let W = getString(I) | |
545 | 545 | if ($isInstanceOf(W, "String")) | |
546 | 546 | then { | |
547 | 547 | let X = W | |
548 | 548 | parseBigIntValue(X) | |
549 | 549 | } | |
550 | 550 | else Q | |
551 | 551 | } | |
552 | 552 | ||
553 | 553 | ||
554 | 554 | func bE (aQ) = [StringEntry(I, toString(aQ))] | |
555 | 555 | ||
556 | 556 | ||
557 | 557 | func bF (aK) = { | |
558 | 558 | let W = getString(makeString([r, aK], a)) | |
559 | 559 | if ($isInstanceOf(W, "String")) | |
560 | 560 | then { | |
561 | 561 | let X = W | |
562 | 562 | parseBigIntValue(X) | |
563 | 563 | } | |
564 | 564 | else Q | |
565 | 565 | } | |
566 | 566 | ||
567 | 567 | ||
568 | 568 | func bG (aK,aQ) = [StringEntry(makeString([r, aK], a), toString(aQ))] | |
569 | 569 | ||
570 | 570 | ||
571 | 571 | func bH (aK) = { | |
572 | 572 | let W = getString(makeString([u, aK], a)) | |
573 | 573 | if ($isInstanceOf(W, "String")) | |
574 | 574 | then { | |
575 | 575 | let X = W | |
576 | 576 | parseBigIntValue(X) | |
577 | 577 | } | |
578 | 578 | else Q | |
579 | 579 | } | |
580 | 580 | ||
581 | 581 | ||
582 | 582 | func bI (aK,aQ) = [StringEntry(makeString([u, aK], a), toString(aQ))] | |
583 | 583 | ||
584 | 584 | ||
585 | 585 | func bJ () = { | |
586 | 586 | let W = getString(h) | |
587 | 587 | if ($isInstanceOf(W, "String")) | |
588 | 588 | then { | |
589 | 589 | let X = W | |
590 | 590 | addressFromStringValue(X) | |
591 | 591 | } | |
592 | 592 | else Address(base58'') | |
593 | 593 | } | |
594 | 594 | ||
595 | 595 | ||
596 | 596 | func bK (bL) = [StringEntry(h, toString(bL))] | |
597 | 597 | ||
598 | 598 | ||
599 | 599 | func bM (bN) = { | |
600 | 600 | let W = getString(makeString([i, bN], a)) | |
601 | 601 | if ($isInstanceOf(W, "String")) | |
602 | 602 | then { | |
603 | 603 | let X = W | |
604 | 604 | X | |
605 | 605 | } | |
606 | 606 | else throw("_loadReferer: revert") | |
607 | 607 | } | |
608 | 608 | ||
609 | 609 | ||
610 | 610 | func bO (bN,U) = [StringEntry(makeString([i, bN], a), U)] | |
611 | 611 | ||
612 | 612 | ||
613 | 613 | func bP (bN) = { | |
614 | 614 | let W = getString(makeString([i, bN], a)) | |
615 | 615 | if ($isInstanceOf(W, "String")) | |
616 | 616 | then { | |
617 | 617 | let X = W | |
618 | 618 | true | |
619 | 619 | } | |
620 | 620 | else false | |
621 | 621 | } | |
622 | 622 | ||
623 | 623 | ||
624 | 624 | func bQ (aH) = if ((aH != this)) | |
625 | 625 | then throw("_onlyThisContract: revert") | |
626 | 626 | else true | |
627 | 627 | ||
628 | 628 | ||
629 | 629 | func bR () = if ((aw() == Address(base58''))) | |
630 | 630 | then throw("_whenMultisigSet: revert") | |
631 | 631 | else true | |
632 | 632 | ||
633 | 633 | ||
634 | 634 | func bS () = if (an()) | |
635 | 635 | then throw("_whenNotInitialized: revert") | |
636 | 636 | else true | |
637 | 637 | ||
638 | 638 | ||
639 | 639 | func bT () = if (!(an())) | |
640 | 640 | then throw("_whenInitialized: revert") | |
641 | 641 | else true | |
642 | 642 | ||
643 | 643 | ||
644 | 644 | func bU () = if (aq()) | |
645 | 645 | then throw("_whenNotPaused: revert") | |
646 | 646 | else true | |
647 | 647 | ||
648 | 648 | ||
649 | 649 | func bV () = if (!(aq())) | |
650 | 650 | then throw("_whenPaused: revert") | |
651 | 651 | else true | |
652 | 652 | ||
653 | 653 | ||
654 | 654 | func bW (aH) = if ((aH != at())) | |
655 | 655 | then throw("_onlyPauser: revert") | |
656 | 656 | else true | |
657 | 657 | ||
658 | 658 | ||
659 | 659 | func bX (aH) = if ((aH != bJ())) | |
660 | 660 | then throw("_onlyManager: revert") | |
661 | 661 | else true | |
662 | 662 | ||
663 | 663 | ||
664 | 664 | func bY (Z,V) = if ((Z != az())) | |
665 | 665 | then throw(V) | |
666 | 666 | else true | |
667 | 667 | ||
668 | 668 | ||
669 | 669 | func bZ (Z,V) = if ((Z != aF())) | |
670 | 670 | then throw(V) | |
671 | 671 | else true | |
672 | 672 | ||
673 | 673 | ||
674 | 674 | func ca (aJ) = { | |
675 | 675 | let W = getString(aC(), makeString([m, aJ], a)) | |
676 | 676 | if ($isInstanceOf(W, "String")) | |
677 | 677 | then { | |
678 | 678 | let X = W | |
679 | 679 | parseBigIntValue(X) | |
680 | 680 | } | |
681 | 681 | else throw(("_getTokenRate: no rate for token=" + aJ)) | |
682 | 682 | } | |
683 | 683 | ||
684 | 684 | ||
685 | 685 | func cb () = { | |
686 | 686 | let cc = aT() | |
687 | 687 | let cd = max([bd(), aX()]) | |
688 | 688 | let ce = bh() | |
689 | 689 | let cf = bv() | |
690 | 690 | let cg = bx() | |
691 | 691 | let ch = min([toBigInt(height), bf()]) | |
692 | 692 | if ((cd >= ch)) | |
693 | 693 | then $Tuple3(nil, cc, cf) | |
694 | 694 | else { | |
695 | 695 | let ci = fraction((bz() - ce), (ch - cd), (bf() - cd)) | |
696 | 696 | let cj = (((P * ci) / bl()) + cc) | |
697 | 697 | let ck = if ((bD() > Q)) | |
698 | 698 | then { | |
699 | 699 | let cl = fraction((bB() - cg), (ch - cd), (bf() - cd)) | |
700 | 700 | let cm = (((P * cl) / bD()) + cf) | |
701 | 701 | $Tuple2(cl, cm) | |
702 | 702 | } | |
703 | 703 | else $Tuple2(Q, Q) | |
704 | 704 | let cl = ck._1 | |
705 | 705 | let cm = ck._2 | |
706 | 706 | $Tuple3(((((aY(ch) ++ aU(cj)) ++ bi((ci + ce))) ++ bw(cm)) ++ by((cl + cg))), cj, cm) | |
707 | 707 | } | |
708 | 708 | } | |
709 | 709 | ||
710 | 710 | ||
711 | 711 | func cn (aK,co,cp) = { | |
712 | 712 | let cq = cb() | |
713 | 713 | let cr = cq._1 | |
714 | 714 | let cj = cq._2 | |
715 | 715 | let cm = cq._3 | |
716 | 716 | let cs = aV(aK) | |
717 | 717 | let ct = max([bd(), aZ(aK)]) | |
718 | 718 | let cu = bj(aK) | |
719 | 719 | let cv = bF(aK) | |
720 | 720 | let cw = bH(aK) | |
721 | 721 | let ch = min([toBigInt(height), bf()]) | |
722 | 722 | if ((ct >= ch)) | |
723 | 723 | then $Tuple3(cr, cu, cw) | |
724 | 724 | else { | |
725 | 725 | let cx = (((co * (cj - cs)) / P) + cu) | |
726 | 726 | let cy = (((cp * (cm - cv)) / P) + cw) | |
727 | 727 | $Tuple3((((((cr ++ ba(aK, ch)) ++ aW(aK, cj)) ++ bk(aK, cx)) ++ bG(aK, cm)) ++ bI(aK, cy)), cx, cy) | |
728 | 728 | } | |
729 | 729 | } | |
730 | 730 | ||
731 | 731 | ||
732 | 732 | @Callable(cz) | |
733 | 733 | func init (aB,aE,av,cA) = { | |
734 | 734 | let cB = if (if (if (if (if (if (bQ(cz.caller)) | |
735 | 735 | then bS() | |
736 | 736 | else false) | |
737 | 737 | then bR() | |
738 | 738 | else false) | |
739 | 739 | then T(aB, "init: invalid executor") | |
740 | 740 | else false) | |
741 | 741 | then T(aE, "init: invalid oracle") | |
742 | 742 | else false) | |
743 | 743 | then T(av, "init: invalid pauser") | |
744 | 744 | else false) | |
745 | 745 | then T(cA, "init: invalid sWavesContract") | |
746 | 746 | else false | |
747 | 747 | if ((cB == cB)) | |
748 | 748 | then $Tuple2(((((ao(true) ++ aA(addressFromStringValue(aB))) ++ aD(addressFromStringValue(aE))) ++ au(addressFromStringValue(av))) ++ bo(addressFromStringValue(cA))), unit) | |
749 | 749 | else throw("Strict value is not equal to itself.") | |
750 | 750 | } | |
751 | 751 | ||
752 | 752 | ||
753 | 753 | ||
754 | 754 | @Callable(cz) | |
755 | 755 | func deposit (cC,cD,aJ,cE,cF) = { | |
756 | 756 | let cG = valueOrErrorMessage(parseInt(cE), "deposit: amount is not Int") | |
757 | 757 | let cB = if (if (if (if (bT()) | |
758 | 758 | then bU() | |
759 | 759 | else false) | |
760 | 760 | then bY(cz.caller, "deposit: invalid executor") | |
761 | 761 | else false) | |
762 | 762 | then bZ(cC, "deposit: invalid caller") | |
763 | 763 | else false) | |
764 | - | then Y(cG, | |
764 | + | then Y(cG, 1, O, "deposit: invalid amount") | |
765 | 765 | else false | |
766 | 766 | if ((cB == cB)) | |
767 | 767 | then { | |
768 | 768 | let cH = ca(aJ) | |
769 | 769 | let cI = aI(aJ, cD) | |
770 | 770 | let cJ = cI._1 | |
771 | 771 | let cK = cI._2 | |
772 | 772 | let cL = aO(cD) | |
773 | 773 | let cM = aR(cD) | |
774 | 774 | let cN = cn(cD, cL, cM) | |
775 | 775 | let cr = cN._1 | |
776 | 776 | let cO = cN._2 | |
777 | 777 | let cy = cN._3 | |
778 | 778 | let cP = (cJ + toBigInt(cG)) | |
779 | 779 | let cQ = fraction(cP, cH, P, DOWN) | |
780 | 780 | let cR = ((cL - cK) + cQ) | |
781 | 781 | let cS = ((bl() - cK) + cQ) | |
782 | 782 | let cT = if ((cL == Q)) | |
783 | 783 | then (bt() + R) | |
784 | 784 | else bt() | |
785 | 785 | let cU = if (if ((size(cF) > 0)) | |
786 | 786 | then bP(cF) | |
787 | 787 | else false) | |
788 | 788 | then { | |
789 | 789 | let cV = bM(cF) | |
790 | 790 | let cW = fraction(toBigInt(cG), cH, P, DOWN) | |
791 | 791 | let cX = fraction(cW, toBigInt(20), toBigInt(100), DOWN) | |
792 | 792 | let cY = (cW - cX) | |
793 | 793 | let cZ = (cM + cX) | |
794 | 794 | let da = aR(cV) | |
795 | 795 | let db = (da + cY) | |
796 | 796 | let dc = (bD() + cW) | |
797 | 797 | let dd = cn(cV, aO(cV), da) | |
798 | 798 | let de = dd._1 | |
799 | 799 | let df = dd._2 | |
800 | 800 | let dg = dd._3 | |
801 | 801 | (((de ++ aS(cD, cZ)) ++ aS(cV, db)) ++ bE(dc)) | |
802 | 802 | } | |
803 | 803 | else nil | |
804 | 804 | $Tuple2(((((((cr ++ cU) ++ bm(cS)) ++ bs(aJ, (br(aJ) + toBigInt(cG)))) ++ aP(cD, cR)) ++ bu(cT)) ++ aM(aJ, cD, $Tuple2(cP, cQ))), cO) | |
805 | 805 | } | |
806 | 806 | else throw("Strict value is not equal to itself.") | |
807 | 807 | } | |
808 | 808 | ||
809 | 809 | ||
810 | 810 | ||
811 | 811 | @Callable(cz) | |
812 | 812 | func depositWaves (cF) = { | |
813 | 813 | let cB = if (if (if (if (bT()) | |
814 | 814 | then bU() | |
815 | 815 | else false) | |
816 | 816 | then ad(cz.payments, 1, "depositWaves: no payment") | |
817 | 817 | else false) | |
818 | 818 | then ag(cz.payments[0], "depositWaves: invalid asset") | |
819 | 819 | else false) | |
820 | - | then Y((cz.payments[0].amount / 100), | |
820 | + | then Y((cz.payments[0].amount / 100), 1, O, "depositWaves: invalid amount") | |
821 | 821 | else false | |
822 | 822 | if ((cB == cB)) | |
823 | 823 | then { | |
824 | 824 | let cG = (cz.payments[0].amount / 100) | |
825 | 825 | let dh = toString(cz.caller) | |
826 | 826 | let di = b | |
827 | 827 | let cH = ca(di) | |
828 | 828 | let dj = aI(di, dh) | |
829 | 829 | let cJ = dj._1 | |
830 | 830 | let cK = dj._2 | |
831 | 831 | let cL = aO(dh) | |
832 | 832 | let cM = aR(dh) | |
833 | 833 | let dk = cn(dh, cL, cM) | |
834 | 834 | let cr = dk._1 | |
835 | 835 | let cO = dk._2 | |
836 | 836 | let cy = dk._3 | |
837 | 837 | let cP = (cJ + toBigInt(cG)) | |
838 | 838 | let cQ = fraction(cP, cH, P, DOWN) | |
839 | 839 | let cR = ((cL - cK) + cQ) | |
840 | 840 | let cS = ((bl() - cK) + cQ) | |
841 | 841 | let cT = if ((cL == Q)) | |
842 | 842 | then (bt() + R) | |
843 | 843 | else bt() | |
844 | 844 | let cU = if (if ((size(cF) > 0)) | |
845 | 845 | then bP(cF) | |
846 | 846 | else false) | |
847 | 847 | then { | |
848 | 848 | let cV = bM(cF) | |
849 | 849 | let cW = fraction(toBigInt(cG), cH, P, DOWN) | |
850 | 850 | let cX = fraction(cW, toBigInt(20), toBigInt(100), DOWN) | |
851 | 851 | let cY = (cW - cX) | |
852 | 852 | let cZ = (cM + cX) | |
853 | 853 | let da = aR(cV) | |
854 | 854 | let db = (da + cY) | |
855 | 855 | let dc = (bD() + cW) | |
856 | 856 | let dl = cn(cV, aO(cV), da) | |
857 | 857 | let de = dl._1 | |
858 | 858 | let df = dl._2 | |
859 | 859 | let dg = dl._3 | |
860 | 860 | (((de ++ aS(dh, cZ)) ++ aS(cV, db)) ++ bE(dc)) | |
861 | 861 | } | |
862 | 862 | else nil | |
863 | 863 | let dm = invoke(bn(), L, nil, [AttachedPayment(unit, cz.payments[0].amount)]) | |
864 | 864 | if ((dm == dm)) | |
865 | 865 | then $Tuple2(((((((cr ++ cU) ++ bm(cS)) ++ bs(b, (br(b) + toBigInt(cG)))) ++ aP(dh, cR)) ++ bu(cT)) ++ aM(di, dh, $Tuple2(cP, cQ))), cO) | |
866 | 866 | else throw("Strict value is not equal to itself.") | |
867 | 867 | } | |
868 | 868 | else throw("Strict value is not equal to itself.") | |
869 | 869 | } | |
870 | 870 | ||
871 | 871 | ||
872 | 872 | ||
873 | 873 | @Callable(cz) | |
874 | 874 | func withdrawWaves (cE) = { | |
875 | 875 | let cB = if (if (if (bT()) | |
876 | 876 | then bU() | |
877 | 877 | else false) | |
878 | - | then Y((cE / 100), | |
878 | + | then Y((cE / 100), 1, O, "withdrawWaves: invalid amount") | |
879 | 879 | else false) | |
880 | 880 | then if ((bf() >= toBigInt(height))) | |
881 | 881 | then throw("withdrawWaves: not allowed") | |
882 | 882 | else true | |
883 | 883 | else false | |
884 | 884 | if ((cB == cB)) | |
885 | 885 | then { | |
886 | 886 | let dn = (cE / 100) | |
887 | 887 | let dh = toString(cz.caller) | |
888 | 888 | let di = b | |
889 | 889 | let cH = ca(di) | |
890 | 890 | let do = aI(di, dh) | |
891 | 891 | let cJ = do._1 | |
892 | 892 | let cK = do._2 | |
893 | 893 | let cL = aO(dh) | |
894 | 894 | let cM = aR(dh) | |
895 | 895 | let dp = cn(dh, cL, cM) | |
896 | 896 | let cr = dp._1 | |
897 | 897 | let cO = dp._2 | |
898 | 898 | let cy = dp._3 | |
899 | 899 | let cP = (cJ - toBigInt(dn)) | |
900 | 900 | let dq = Y(toInt(cP), 0, O, "withdrawWaves: insufficient token amount") | |
901 | 901 | if ((dq == dq)) | |
902 | 902 | then { | |
903 | 903 | let cQ = fraction(cP, cH, P, DOWN) | |
904 | 904 | let cR = ((cL - cK) + cQ) | |
905 | 905 | let cS = ((bl() - cK) + cQ) | |
906 | 906 | let dr = bn() | |
907 | 907 | let ds = bq(dr) | |
908 | 908 | let dm = invoke(dr, M, nil, nil) | |
909 | 909 | let dt = { | |
910 | 910 | let W = dm | |
911 | 911 | if ($isInstanceOf(W, "String")) | |
912 | 912 | then { | |
913 | 913 | let X = W | |
914 | 914 | parseBigIntValue(X) | |
915 | 915 | } | |
916 | 916 | else throw("withdrawWaves: sWaves getRate() revert") | |
917 | 917 | } | |
918 | 918 | let du = toInt(fraction(toBigInt(cE), S, dt, CEILING)) | |
919 | 919 | let dv = invoke(dr, N, nil, [AttachedPayment(ds, du)]) | |
920 | 920 | if ((dv == dv)) | |
921 | 921 | then $Tuple2(((((([ScriptTransfer(cz.caller, cE, unit)] ++ cr) ++ bm(cS)) ++ bs(b, (br(b) - toBigInt(dn)))) ++ aP(dh, cR)) ++ aM(di, dh, $Tuple2(cP, cQ))), unit) | |
922 | 922 | else throw("Strict value is not equal to itself.") | |
923 | 923 | } | |
924 | 924 | else throw("Strict value is not equal to itself.") | |
925 | 925 | } | |
926 | 926 | else throw("Strict value is not equal to itself.") | |
927 | 927 | } | |
928 | 928 | ||
929 | 929 | ||
930 | 930 | ||
931 | 931 | @Callable(cz) | |
932 | 932 | func startRetrodrop (dw,dx,dy,dz) = { | |
933 | 933 | let cB = if (if (if (if (if (if (if (bQ(cz.caller)) | |
934 | 934 | then bT() | |
935 | 935 | else false) | |
936 | 936 | then bU() | |
937 | 937 | else false) | |
938 | 938 | then al(dw, "startRetrodrop: invalid units asset") | |
939 | 939 | else false) | |
940 | 940 | then Y(dx, 0, O, "startRetrodrop: invalid amountForLP") | |
941 | 941 | else false) | |
942 | 942 | then Y(dy, 0, O, "startRetrodrop: invalid amountForReferal") | |
943 | 943 | else false) | |
944 | 944 | then Y(dz, 1, O, "startRetrodrop: invalid blocksAt") | |
945 | 945 | else false) | |
946 | 946 | then ai(bd(), Q, "startRetrodrop: already started") | |
947 | 947 | else false | |
948 | 948 | if ((cB == cB)) | |
949 | 949 | then { | |
950 | 950 | let dA = toBigInt(height) | |
951 | 951 | let dB = (dA + toBigInt(dz)) | |
952 | 952 | let dq = if (((dx + dy) > assetBalance(this, fromBase58String(dw)))) | |
953 | 953 | then throw("startRetrodrop: insufficient funds") | |
954 | 954 | else true | |
955 | 955 | if ((dq == dq)) | |
956 | 956 | then $Tuple2(((((bc(fromBase58String(dw)) ++ be(dA)) ++ bg(dB)) ++ bA(toBigInt(dx))) ++ bC(toBigInt(dy))), unit) | |
957 | 957 | else throw("Strict value is not equal to itself.") | |
958 | 958 | } | |
959 | 959 | else throw("Strict value is not equal to itself.") | |
960 | 960 | } | |
961 | 961 | ||
962 | 962 | ||
963 | 963 | ||
964 | 964 | @Callable(cz) | |
965 | 965 | func increaseUnitsSupply (dx,dy) = { | |
966 | 966 | let cB = if (if (if (if (bT()) | |
967 | 967 | then bU() | |
968 | 968 | else false) | |
969 | 969 | then Y(dx, 0, O, "increaseUnitsSupply: invalid amountForLP") | |
970 | 970 | else false) | |
971 | 971 | then Y(dy, 0, O, "increaseUnitsSupply: invalid amountForReferal") | |
972 | 972 | else false) | |
973 | 973 | then ac(toBigInt(height), (bd() + R), (bf() - R), "increaseUnitsSupply: drop not active") | |
974 | 974 | else false | |
975 | 975 | if ((cB == cB)) | |
976 | 976 | then { | |
977 | 977 | let dC = (bz() + toBigInt(dx)) | |
978 | 978 | let dD = (bB() + toBigInt(dy)) | |
979 | 979 | let dq = if (((dC + dD) > toBigInt(assetBalance(this, bb())))) | |
980 | 980 | then throw("increaseUnitsSupply: insufficient funds") | |
981 | 981 | else true | |
982 | 982 | if ((dq == dq)) | |
983 | 983 | then $Tuple2((bA(dC) ++ bC(dD)), unit) | |
984 | 984 | else throw("Strict value is not equal to itself.") | |
985 | 985 | } | |
986 | 986 | else throw("Strict value is not equal to itself.") | |
987 | 987 | } | |
988 | 988 | ||
989 | 989 | ||
990 | 990 | ||
991 | 991 | @Callable(cz) | |
992 | 992 | func checkpoint (aK) = { | |
993 | 993 | let dE = cn(aK, aO(aK), aR(aK)) | |
994 | 994 | let dF = dE._1 | |
995 | 995 | let cO = dE._2 | |
996 | 996 | let cy = dE._3 | |
997 | 997 | $Tuple2(dF, $Tuple2(cO, cy)) | |
998 | 998 | } | |
999 | 999 | ||
1000 | 1000 | ||
1001 | 1001 | ||
1002 | 1002 | @Callable(cz) | |
1003 | 1003 | func getUnits (aK) = { | |
1004 | 1004 | let dG = cn(aK, aO(aK), aR(aK)) | |
1005 | 1005 | let dF = dG._1 | |
1006 | 1006 | let cO = dG._2 | |
1007 | 1007 | let cy = dG._3 | |
1008 | 1008 | $Tuple2(nil, $Tuple2(cO, cy)) | |
1009 | 1009 | } | |
1010 | 1010 | ||
1011 | 1011 | ||
1012 | 1012 | ||
1013 | 1013 | @Callable(cz) | |
1014 | 1014 | func setReferer (bN,U) = { | |
1015 | 1015 | let cB = if (bX(cz.caller)) | |
1016 | 1016 | then bT() | |
1017 | 1017 | else false | |
1018 | 1018 | if ((cB == cB)) | |
1019 | 1019 | then $Tuple2(bO(bN, U), unit) | |
1020 | 1020 | else throw("Strict value is not equal to itself.") | |
1021 | 1021 | } | |
1022 | 1022 | ||
1023 | 1023 | ||
1024 | 1024 | ||
1025 | 1025 | @Callable(cz) | |
1026 | 1026 | func setManager (bL) = { | |
1027 | 1027 | let cB = if (if (bQ(cz.caller)) | |
1028 | 1028 | then bT() | |
1029 | 1029 | else false) | |
1030 | 1030 | then T(bL, "setManager: invalid manager") | |
1031 | 1031 | else false | |
1032 | 1032 | if ((cB == cB)) | |
1033 | 1033 | then $Tuple2(bK(addressFromStringValue(bL)), unit) | |
1034 | 1034 | else throw("Strict value is not equal to itself.") | |
1035 | 1035 | } | |
1036 | 1036 | ||
1037 | 1037 | ||
1038 | 1038 | ||
1039 | 1039 | @Callable(cz) | |
1040 | 1040 | func updateCallerContract (cC) = { | |
1041 | 1041 | let cB = if (bQ(cz.caller)) | |
1042 | 1042 | then bT() | |
1043 | 1043 | else false | |
1044 | 1044 | if ((cB == cB)) | |
1045 | 1045 | then $Tuple2(aG(cC), unit) | |
1046 | 1046 | else throw("Strict value is not equal to itself.") | |
1047 | 1047 | } | |
1048 | 1048 | ||
1049 | 1049 | ||
1050 | 1050 | ||
1051 | 1051 | @Callable(cz) | |
1052 | 1052 | func pause () = { | |
1053 | 1053 | let cB = if (if (bW(cz.caller)) | |
1054 | 1054 | then bT() | |
1055 | 1055 | else false) | |
1056 | 1056 | then bU() | |
1057 | 1057 | else false | |
1058 | 1058 | if ((cB == cB)) | |
1059 | 1059 | then $Tuple2(ar(true), unit) | |
1060 | 1060 | else throw("Strict value is not equal to itself.") | |
1061 | 1061 | } | |
1062 | 1062 | ||
1063 | 1063 | ||
1064 | 1064 | ||
1065 | 1065 | @Callable(cz) | |
1066 | 1066 | func unpause () = { | |
1067 | 1067 | let cB = if (if (bW(cz.caller)) | |
1068 | 1068 | then bT() | |
1069 | 1069 | else false) | |
1070 | 1070 | then bV() | |
1071 | 1071 | else false | |
1072 | 1072 | if ((cB == cB)) | |
1073 | 1073 | then $Tuple2(ar(false), unit) | |
1074 | 1074 | else throw("Strict value is not equal to itself.") | |
1075 | 1075 | } | |
1076 | 1076 | ||
1077 | 1077 | ||
1078 | 1078 | ||
1079 | 1079 | @Callable(cz) | |
1080 | 1080 | func updatePauser (av) = { | |
1081 | 1081 | let cB = if (if (bQ(cz.caller)) | |
1082 | 1082 | then bT() | |
1083 | 1083 | else false) | |
1084 | 1084 | then T(av, "updatePauser: invalid pauser") | |
1085 | 1085 | else false | |
1086 | 1086 | if ((cB == cB)) | |
1087 | 1087 | then $Tuple2(au(addressFromStringValue(av)), unit) | |
1088 | 1088 | else throw("Strict value is not equal to itself.") | |
1089 | 1089 | } | |
1090 | 1090 | ||
1091 | 1091 | ||
1092 | 1092 | ||
1093 | 1093 | @Callable(cz) | |
1094 | 1094 | func setMultisig (ay) = { | |
1095 | 1095 | let cB = if (bQ(cz.caller)) | |
1096 | 1096 | then T(ay, "setMultisig: invalid multisig") | |
1097 | 1097 | else false | |
1098 | 1098 | if ((cB == cB)) | |
1099 | 1099 | then $Tuple2(ax(addressFromStringValue(ay)), unit) | |
1100 | 1100 | else throw("Strict value is not equal to itself.") | |
1101 | 1101 | } | |
1102 | 1102 | ||
1103 | 1103 | ||
1104 | 1104 | @Verifier(dH) | |
1105 | 1105 | func dI () = { | |
1106 | 1106 | let W = getString(c) | |
1107 | 1107 | if ($isInstanceOf(W, "String")) | |
1108 | 1108 | then { | |
1109 | 1109 | let dJ = W | |
1110 | 1110 | valueOrElse(getBoolean(addressFromStringValue(dJ), makeString([d, toString(this), toBase58String(dH.id)], a)), false) | |
1111 | 1111 | } | |
1112 | 1112 | else sigVerify(dH.bodyBytes, dH.proofs[0], dH.senderPublicKey) | |
1113 | 1113 | } | |
1114 | 1114 |
github/deemru/w8io/026f985 96.98 ms ◑