tx · 8Bh3TNMYuFa7qLbcdFpSNzL9oHCheTv7bEmKbXQZyihN 3PBbLJcBjLWUZZrFFUk5s53TdTUneHXDc7e: -0.01700000 Waves 2023.10.07 09:03 [3853650] smart account 3PBbLJcBjLWUZZrFFUk5s53TdTUneHXDc7e > SELF 0.00000000 Waves
{ "type": 13, "id": "8Bh3TNMYuFa7qLbcdFpSNzL9oHCheTv7bEmKbXQZyihN", "fee": 1700000, "feeAssetId": null, "timestamp": 1696658614314, "version": 2, "chainId": 87, "sender": "3PBbLJcBjLWUZZrFFUk5s53TdTUneHXDc7e", "senderPublicKey": "qv5sHFvV7GyNRm1A2r8BR9oX2nhkc1yNa1QfWLkaja8", "proofs": [ "49SA4MxnTxsfVyHjRUGBPeNadd1QG3xtm2TUESP9Ko77BeJXwfigpqe252eYzmK3iAb5T1GazBakcbBC4yHy7yrV" ], "script": "base64:BgIjCAISABIAEgASAwoBARIAEgASABIAEgASABIAEgASBAoCCAE7AQ10cnlHZXRJbnRlZ2VyAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAAAAmQ4AIDC1y8AA2QxNgkAaAIFAmQ4BQJkOAAQYnVybnh0blBQVHBvb2xJZAEaAVf1RmgngA1o304mdXq0odMoMeAJv/V5eTcADHByb2plY3RPd25lcgEaAVeOHeZRyjgjzsORw8RWi9WD02+IVv823QsAD3doaXJscG9vbFBvb2xJZAEaAVcJSFSomLX/zEpG2xL9S8mTGUY3Q5iH180ACXdoaXJscG9vbAEgWeON3MK1I7pKFNzE0K8UCeZk5gS+JQYLJk7lUG2XWccAD3doaXJscG9vbFN0cmluZwkA2AQBASBZ443cwrUjukoU3MTQrxQJ5mTmBL4lBgsmTuVQbZdZxwAEdGVzdAEgCc6A2qSEYQEDFtHChxRdJUyYFe25w8sijpje/5CtqUcABXdhdmVzAQQTq9kzAAd1c2R0ZXJjASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQAHdXNkY2VyYwEg8b90j2kCa66vzjuwb/Nd8MVKoTFsVrfc+ipKoeuRGkkAB3VzZHRic2MBIIeFKhRdvRvgacOk2tYbd0/cBQSbrAXfQbCvgMBJMOmiAAd1c2RjYnNjASAvN5TEMA7UHoYvTQ14Xf3kXkI8Q97mJBxq1GB3huvltQAHYnVybnh0bgEgJE91eWp+Mzm4+wz/hKlxXF7KLd4zoMRdafnqRBHsTFQAA2V0aAEgJR76/9ghyXCe+8C03j63q4aeBTtm79wH/FHj9agzKHIAA2JuYgEgS7ep4jwDLeZJ/TwoM/wRUkbi6v6x+mu9cBafRBfVHhwABHdidGMBIBKeo3EHNGSP6mN2enCiK9cwBs75vPQVGctmd0xybol/AARidGNiASDIlsraYoy6SPYFNHcPBbtsEP/v2GRaY5157d4CGOemoQAEZWFzdAEgVoJP4wutz64pn/F3h50Vd/r+QUj98n3dRjyfnx8R03QABnN0ZWFzdAEg4Tj7DL+1BlqSS0fgEtOD/O7RI9SQqBlxFRrcq0CylDYABnN3YXZlcwEgCB/I9xYw7VHCKRvsrBqP/JBxHFk4LeshgbA3QfBF0UoAC3Bvb2xib29zdFNDARoBV1+hRBbaqQHNFrLXSm/kpWLQp/1rM4gJMQAHUExfTWFpbgkBB0FkZHJlc3MBARoBVyCUXEqtz/RIOTuIQLO/2+6MUKCnas/a6AAHUExfRGVmaQkBB0FkZHJlc3MBARoBVxkLO48/zcX1AFJDuOumjMisvxQ5MT4kvgAGUExfTG93CQEHQWRkcmVzcwEBGgFXrmAU0mZwDPA/3HTF0nTmGr6p4FLB6guQAApFQVNUX3N0YWtlCQEHQWRkcmVzcwEBGgFXCHSp2cN38YJ996KDSPPrm7NP/Ig86xdvAA1XWF9XQVZFU19FQVNUCQEHQWRkcmVzcwEBGgFXtcI/53C/UBxRdbkKYmb09j7c3NWdpOjUAAxTV0FWRVNfc3Rha2UJAQdBZGRyZXNzAQEaAVd9yXuTFHn/51HxsUrHb/lqHYCVR89YI34ACWV0aEluUG9vbAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFEGJ1cm54dG5QUFRwb29sSWQJAKwCAgkArAICAgdnbG9iYWxfCQDYBAEFA2V0aAIIX2JhbGFuY2UAC3dhdmVzSW5Qb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUQYnVybnh0blBQVHBvb2xJZAkArAICCQCsAgICB2dsb2JhbF8JANgEAQUFd2F2ZXMCCF9iYWxhbmNlAAhldGhXYXZlcwkAawMFAmQ4BQt3YXZlc0luUG9vbAUJZXRoSW5Qb29sAAxwcm9qZWN0U3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBRBidXJueHRuUFBUcG9vbElkCQCsAgIJAKUIAQUEdGhpcwIMX2luZGV4U3Rha2VkAAp0b3RhbFN0YWtlCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUQYnVybnh0blBQVHBvb2xJZAIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQBCFBMX3ZhbHVlAgtkQXBwQWRkcmVzcwVhc3NldAkAawMJAQ10cnlHZXRJbnRlZ2VyAgULZEFwcEFkZHJlc3MJAKwCAgkArAICCQClCAEFBHRoaXMCCl9zdXBwbGllZF8JANgEAQUFYXNzZXQJAQ10cnlHZXRJbnRlZ2VyAgULZEFwcEFkZHJlc3MJAKwCAgkA2AQBBQVhc3NldAIGX3NSYXRlBQNkMTYBCF9sb2FkSW50AgRrZXlfCGRlZmF1bHRfBAckbWF0Y2gwCQCaCAIFDFNXQVZFU19zdGFrZQUEa2V5XwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEFCGRlZmF1bHRfAQtfbG9hZEJpZ0ludAIEa2V5XwhkZWZhdWx0XwQHJG1hdGNoMAkAnAgCBQxTV0FWRVNfc3Rha2UFBGtleV8DCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYQUHJG1hdGNoMAkAngMBBQFhBQhkZWZhdWx0XwAIbGFzdFJhdGUJAQtfbG9hZEJpZ0ludAICCUxBU1RfUkFURQkAtgIBAICglKWNHQALY3VycmVudFJhdGUJAQtfbG9hZEJpZ0ludAICDENVUlJFTlRfUkFURQkAtgIBAAAACmxhc3RIZWlnaHQJAQhfbG9hZEludAICC0xBU1RfSEVJR0hUAAAADHRhcmdldEhlaWdodAkAlwMBCQDMCAIJAQhfbG9hZEludAICDVRBUkdFVF9IRUlHSFQAAAkAzAgCBQZoZWlnaHQFA25pbAAPbGFzdFJhdGVVcGRhdGVkCQC3AgIFCGxhc3RSYXRlCQC5AgIFC2N1cnJlbnRSYXRlCQC2AgEJAGUCBQx0YXJnZXRIZWlnaHQFCmxhc3RIZWlnaHQACmJhc2VBbW91bnQJAKADAQkAvQIECQC2AgEJAPAHAgUNV1hfV0FWRVNfRUFTVAUGc3dhdmVzBQ9sYXN0UmF0ZVVwZGF0ZWQJALYCAQCAoJSljR0FBUZMT09SAAl3YXZlc0luV1gJAGQCCAkA7wcBBQ1XWF9XQVZFU19FQVNUB3JlZ3VsYXIFCmJhc2VBbW91bnQACGVhc3RJbldYCQDwBwIFDVdYX1dBVkVTX0VBU1QFBGVhc3QACXdhdmVzRWFzdAkAawMJAGgCBQJkOABkBQhlYXN0SW5XWAUJd2F2ZXNJbldYABB3YXZlc0luV2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQV3YXZlcwIIX2JhbGFuY2UAEHdoaXJsSW5XaGlybHBvb2wJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgkArAICAgdnbG9iYWxfBQ93aGlybHBvb2xTdHJpbmcCCF9iYWxhbmNlABFwcm9qZWN0U3Rha2VXaGlybAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAkArAICCQClCAEFBHRoaXMCDF9pbmRleFN0YWtlZAAPdG90YWxTdGFrZVdoaXJsCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAANc3RFYXN0SW5XYXZlcwkAaAIJAGsDCQBpAgkAbgQJAPAHAgUEdGhpcwUGc3RlYXN0CQENdHJ5R2V0SW50ZWdlcgIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAUCZDgFCXdhdmVzRWFzdABkAA1lYXN0SW5TdGFraW5nCQBpAgkAbgQJAPAHAgUEdGhpcwUGc3RlYXN0CQENdHJ5R2V0SW50ZWdlcgIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAAKdHZsSW5XYXZlcwkAZAIJAGQCCQBkAgkAawMJAGgCBQt3YXZlc0luUG9vbAAKBQxwcm9qZWN0U3Rha2UFCnRvdGFsU3Rha2UJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aFdhdmVzBQJkOAkAawMJAGgCBRB3YXZlc0luV2hpcmxwb29sAAoFEXByb2plY3RTdGFrZVdoaXJsBQ90b3RhbFN0YWtlV2hpcmwFDXN0RWFzdEluV2F2ZXMAD3doaXJscG9vbFN1cHBseQQHJG1hdGNoMAkA7AcBBQR0ZXN0AwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAAFcHJpY2UDCQBnAgkAZAIJAGsDCQBkAgUKdHZsSW5XYXZlcwkBDXRyeUdldEludGVnZXICBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sU3VwcGx5BQJkOAkBDXRyeUdldEludGVnZXICBQR0aGlzAiFXSElSTFBPT0wgaXNzdWUgcHJpY2UgaW4gd2F2ZWxldHMJAGQCCQBrAwkAZAIFCnR2bEluV2F2ZXMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwUCZDgFD3doaXJscG9vbFN1cHBseQUCZDgJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzARN3aXRoZHJhd0Ftb3VudFdhdmVzAQtkYXBwQWRkcmVzcwkAZQIJAQhQTF92YWx1ZQIFC2RhcHBBZGRyZXNzBQV3YXZlcwkAaQIJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5AAMBCHN1cHBseVBMAwtkYXBwQWRkcmVzcwdhc3NldElkDHN1cHBseUFtb3VudAkA/AcEBQtkYXBwQWRkcmVzcwIGc3VwcGx5BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFDHN1cHBseUFtb3VudAUDbmlsAQp3aXRoZHJhd1BMAwtkYXBwQWRkcmVzcwdhc3NldElkDndpdGhkcmF3QW1vdW50CQD8BwQFC2RhcHBBZGRyZXNzAgh3aXRoZHJhdwkAzAgCCQDYBAEFB2Fzc2V0SWQJAMwIAgUOd2l0aGRyYXdBbW91bnQFA25pbAUDbmlsAQtzd2FwVG9XYXZlcwIGcG9vbElkB2Fzc2V0SWQJAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQJAPAHAgUEdGhpcwUHYXNzZXRJZAUDbmlsDQFpARVidXlXSElSTFBPT0x3aXRoV0FWRVMAAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX6WYhKtIG4NwWiusIWpfUn51io3/3wlpMBwkAAgECIHNtYXJ0IGNvbnRyYWN0IHVuZGVyIG1haW50ZW5hbmNlBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHc3VycGx1cwkAawMJAGUCBQVwcmljZQUCZDgIBQNwbXQGYW1vdW50BQJkOAQLSXNzdWVBbW91bnQDCQBnAggFA3BtdAZhbW91bnQJAGsDCAUDcG10BmFtb3VudAUCZDgFBXByaWNlCQBrAwgFA3BtdAZhbW91bnQFAmQ4BQVwcmljZQkAAgECMHBsZWFzZSBjb250YWN0IHByb2plY3Qgb3duZXI6IGlzc3VlIGFtb3VudCBlcnJvcgQMc3VwcGx5QW1vdW50CQBpAgkAZQIIBQNwbXQGYW1vdW50BQdzdXJwbHVzAAMEDWNsZWFuQW1vdW50SW4JAGUCCAUDcG10BmFtb3VudAkAawMIBQNwbXQGYW1vdW50AMgBAJBOBAlBbW91bnRPdXQJAG4EBRB3aGlybEluV2hpcmxwb29sCQBlAgkAaAIFAmQ4BQJkOAkAoAMBCQB2BgkAvQIECQC2AgEFEHdhdmVzSW5XaGlybHBvb2wJALYCAQkAaAIFAmQ4BQJkOAkAtgIBCQBkAgUQd2F2ZXNJbldoaXJscG9vbAUNY2xlYW5BbW91bnRJbgUGSEFMRlVQABAJALYCAQkAawMAZACQTgCEBwAEABAFB0NFSUxJTkcJAGgCBQJkOAUCZDgFBERPV04DCQECIT0CCAUDcG10B2Fzc2V0SWQFBHVuaXQJAAIBAhdhdHRhY2ggV0FWRVMgdG9rZW4gb25seQQWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzBQl3aGlybHBvb2wDCQAAAgUWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQUWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQQDYnV5AwkAZgIFCUFtb3VudE91dAULSXNzdWVBbW91bnQJAPwHBAkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQCBHN3YXAJAMwIAgUPd2hpcmxwb29sU3RyaW5nCQDMCAIJAGQCBQtJc3N1ZUFtb3VudAABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQIBQNwbXQGYW1vdW50BQNuaWwFBHVuaXQDCQAAAgUDYnV5BQNidXkEFVdoaXJscG9vbEJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzBQl3aGlybHBvb2wDCQAAAgUVV2hpcmxwb29sQmFsYW5jZUFmdGVyBRVXaGlybHBvb2xCYWxhbmNlQWZ0ZXIEEVdoaXJscG9vbEZyb21Td2FwCQBlAgUWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQUVV2hpcmxwb29sQmFsYW5jZUFmdGVyAwkAAAIFEVdoaXJscG9vbEZyb21Td2FwBRFXaGlybHBvb2xGcm9tU3dhcAQEbWFpbgMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQEIc3VwcGx5UEwDBQdQTF9NYWluBQR1bml0BQxzdXBwbHlBbW91bnQFBHVuaXQDCQAAAgUEbWFpbgUEbWFpbgQEZGVmaQMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQEIc3VwcGx5UEwDBQdQTF9EZWZpBQR1bml0BQxzdXBwbHlBbW91bnQFBHVuaXQDCQAAAgUEZGVmaQUEZGVmaQQDbG93AwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAQhzdXBwbHlQTAMFBlBMX0xvdwUEdW5pdAUMc3VwcGx5QW1vdW50BQR1bml0AwkAAAIFA2xvdwUDbG93CQDMCAIJAQdSZWlzc3VlAwUEdGVzdAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAAABgkAzAgCAwkAZgIFCUFtb3VudE91dAULSXNzdWVBbW91bnQJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgURV2hpcmxwb29sRnJvbVN3YXAFCXdoaXJscG9vbAkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtJc3N1ZUFtb3VudAUEdGVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZAIIBQNwbXQGYW1vdW50CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQBkAgAACQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZAIJAGUCCAUDcG10BmFtb3VudAUHc3VycGx1cwkBDXRyeUdldEludGVnZXICBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkAAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnByaWNlU3VycGx1c1N1cHBseQAJAMwIAgkBDEludGVnZXJFbnRyeQICClBMIEJUIE1haW4JAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpQTCBCVCBEZWZpCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIJUEwgQlQgTG93CQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBQTCBiYXNlIHRyZWFzdXJ5CQBkAgkAZAIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIwc3VycGx1cyB0cmVhc3VyeSBCVVJOLVhUTiB4IFBlcGVUZWFtIGluIHdhdmVsZXRzCQBrAwkAaAIFC3dhdmVzSW5Qb29sAAoFDHByb2plY3RTdGFrZQUKdG90YWxTdGFrZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIZRVRIIFB1enpsZSBMZW5kIG1haW4gcG9vbAkBCFBMX3ZhbHVlAgUHUExfTWFpbgUDZXRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCAjZzdXJwbHVzIHRyZWFzdXJ5IEVUSCBQdXp6bGUgTGVuZCBtYWluIHBvb2wgaW4gd2F2ZWxldHMJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aFdhdmVzBQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgIqc3VycGx1cyB0cmVhc3VyeSBXSElSTFBPT0wgQU1NIGluIHdhdmVsZXRzCQBrAwkAaAIFEHdhdmVzSW5XaGlybHBvb2wACgURcHJvamVjdFN0YWtlV2hpcmwFD3RvdGFsU3Rha2VXaGlybAkAzAgCCQEMSW50ZWdlckVudHJ5AgISU1QgRUFTVCBpbiBzdGFraW5nBQ1lYXN0SW5TdGFraW5nCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhJTVCBzdEVBU1QgaW4gd2F2ZXMFDXN0RWFzdEluV2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICKFRvdGFsIHN1cnBsdXMgdHJlYXN1cnkgdmFsdWUgaW4gd2F2ZWxldHMFCnR2bEluV2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICIVdISVJMUE9PTCBpc3N1ZSBwcmljZSBpbiB3YXZlbGV0cwUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQICGldISVJMUE9PTCBtaWQgbWFya2V0IHByaWNlCQBrAwUCZDgJAGgCBRB3YXZlc0luV2hpcmxwb29sAAkFEHdoaXJsSW5XaGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICFldISVJMUE9PTCB0b3RhbCBzdXBwbHkFD3doaXJscG9vbFN1cHBseQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOVG90YWwgdHJlYXN1cnkJAGQCCQBkAgkAZAIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwUKdHZsSW5XYXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgINTkFWIFdISVJMUE9PTAkAawMFAmQ4CQBkAgkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMFCnR2bEluV2F2ZXMFD3doaXJscG9vbFN1cHBseQkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCHndhdmVsZXRzIHJlY2VpdmVkIGZvciB0cmVhc3VyeQkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICEFJPSSBiYXNpcyBwb2ludHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIQUk9JIGJhc2lzIHBvaW50cwUDbmlsAWkBE3Bvb2xPbmVUb2tlblN1cnBsdXMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQNc3VycGx1c0Ftb3VudAkBDXRyeUdldEludGVnZXICBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBBNQb29sT25lVG9rZW5TdXJwbHVzCQD8BwQJAQdBZGRyZXNzAQEaAVf9JcO9TmGUQe+6XhJjj8U5b0m1iDr16W0CIWdlbmVyYXRlSW5kZXhXaXRoT25lVG9rZW5BbmRTdGFrZQkAzAgCCQDYBAEFEGJ1cm54dG5QUFRwb29sSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUNc3VycGx1c0Ftb3VudAUDbmlsAwkAAAIFE1Bvb2xPbmVUb2tlblN1cnBsdXMFE1Bvb2xPbmVUb2tlblN1cnBsdXMJAMwIAgkBDEludGVnZXJFbnRyeQICHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAGUCCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMFDXN1cnBsdXNBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxib29zdFBvb2xBUFkBEndhdmVzQmFsYW5jZUJlZm9yZQMJAGYCCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBQZoZWlnaHQJAAIBCQCsAgICFldhaXQgdGlsbCBibG9ja2hlaWdodDoJAKQDAQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwQPd2F2ZXNEaWZmZXJlbmNlCQBlAggJAO8HAQUEdGhpcwlhdmFpbGFibGUFEndhdmVzQmFsYW5jZUJlZm9yZQMJAAACBQ93YXZlc0RpZmZlcmVuY2UFD3dhdmVzRGlmZmVyZW5jZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQDCQAAAgUQd2F2ZXNBbW91bnRCb29zdAUQd2F2ZXNBbW91bnRCb29zdAQLYW1vdW50Qm9vc3QJAGsDBQ93YXZlc0RpZmZlcmVuY2UAUABkAwkAAAIFC2Ftb3VudEJvb3N0BQthbW91bnRCb29zdAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkAwkAAAIFC2Ftb3VudE93bmVyBQthbW91bnRPd25lcgQFYm9vc3QJAPwHBAkBB0FkZHJlc3MBBQtwb29sYm9vc3RTQwILYWRkQm9vc3RpbmcJAMwIAgkA2AQBBQ93aGlybHBvb2xQb29sSWQJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdE93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwCQTgkBDXRyeUdldEludGVnZXICBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgMJAAACCAUBaQZjYWxsZXIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAIgQWN0aXZhdGVkIGJ5IGFueWJvZHkgYmxvY2toZWlnaHQFBmhlaWdodAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmJvb3N0UG9vbEFQWWJ1cm54dG5QUFQAAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFEGJ1cm54dG5QUFRwb29sSWQCEWNsYWltSW5kZXhSZXdhcmRzBQNuaWwFA25pbAMJAAACBQVjbGFpbQUFY2xhaW0EC3N3YXBidXJueHRuCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQdidXJueHRuAwkAAAIFC3N3YXBidXJueHRuBQtzd2FwYnVybnh0bgQLc3dhcHVzZHRlcmMJAQtzd2FwVG9XYXZlcwIFEGJ1cm54dG5QUFRwb29sSWQFB3VzZHRlcmMDCQAAAgULc3dhcHVzZHRlcmMFC3N3YXB1c2R0ZXJjBAtzd2FwdXNkdGJzYwkBC3N3YXBUb1dhdmVzAgUQYnVybnh0blBQVHBvb2xJZAUHdXNkdGJzYwMJAAACBQtzd2FwdXNkdGJzYwULc3dhcHVzZHRic2MEC3N3YXB1c2RjZXJjCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQd1c2RjZXJjAwkAAAIFC3N3YXB1c2RjZXJjBQtzd2FwdXNkY2VyYwQLc3dhcHVzZGNic2MJAQtzd2FwVG9XYXZlcwIFEGJ1cm54dG5QUFRwb29sSWQFB3VzZGNic2MDCQAAAgULc3dhcHVzZGNic2MFC3N3YXB1c2RjYnNjBAdzd2FwZXRoCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQNldGgDCQAAAgUHc3dhcGV0aAUHc3dhcGV0aAQHc3dhcGJuYgkBC3N3YXBUb1dhdmVzAgUQYnVybnh0blBQVHBvb2xJZAUDYm5iAwkAAAIFB3N3YXBibmIFB3N3YXBibmIECHN3YXB3YnRjCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQR3YnRjAwkAAAIFCHN3YXB3YnRjBQhzd2Fwd2J0YwQIc3dhcGJ0Y2IJAQtzd2FwVG9XYXZlcwIFEGJ1cm54dG5QUFRwb29sSWQFBGJ0Y2IDCQAAAgUIc3dhcGJ0Y2IFCHN3YXBidGNiBAVib29zdAkA/AcEBQR0aGlzAgxib29zdFBvb2xBUFkJAMwIAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBQNuaWwFA25pbAMJAAACBQVib29zdAUFYm9vc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRib29zdFBvb2xBUFl3RVRIbWFpbgADCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwUGaGVpZ2h0CQACAQkArAICAhZXYWl0IHRpbGwgYmxvY2toZWlnaHQ6CQCkAwEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsEEndhdmVzQmFsYW5jZUJlZm9yZQgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQAAAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBRJ3YXZlc0JhbGFuY2VCZWZvcmUEE2NhbGN1bGF0ZVRva2VuUmF0ZXMJAPwHBAUHUExfTWFpbgITY2FsY3VsYXRlVG9rZW5SYXRlcwkAzAgCBwUDbmlsBQNuaWwDCQAAAgUTY2FsY3VsYXRlVG9rZW5SYXRlcwUTY2FsY3VsYXRlVG9rZW5SYXRlcwQOd2l0aGRyYXdBbW91bnQJAGUCCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIMRVRIIHN1cHBsaWVkBAh3aXRoZHJhdwkBCndpdGhkcmF3UEwDBQdQTF9NYWluBQNldGgFDndpdGhkcmF3QW1vdW50AwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwQHc3dhcGV0aAkBC3N3YXBUb1dhdmVzAgUQYnVybnh0blBQVHBvb2xJZAUDZXRoAwkAAAIFB3N3YXBldGgFB3N3YXBldGgEBWJvb3N0CQD8BwQFBHRoaXMCDGJvb3N0UG9vbEFQWQkAzAgCBRJ3YXZlc0JhbGFuY2VCZWZvcmUFA25pbAUDbmlsAwkAAAIFBWJvb3N0BQVib29zdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmJvb3N0UG9vbEFQWXdXaGlybHBvb2wAAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIRY2xhaW1JbmRleFJld2FyZHMFA25pbAUDbmlsAwkAAAIFBWNsYWltBQVjbGFpbQQNc3dhcHdoaXJscG9vbAkBC3N3YXBUb1dhdmVzAgUPd2hpcmxwb29sUG9vbElkBQl3aGlybHBvb2wDCQAAAgUNc3dhcHdoaXJscG9vbAUNc3dhcHdoaXJscG9vbAQFYm9vc3QJAPwHBAUEdGhpcwIMYm9vc3RQb29sQVBZCQDMCAIFEndhdmVzQmFsYW5jZUJlZm9yZQUDbmlsBQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENc3VwcGx5RVRIbWFpbgADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAxzdXBwbHlBbW91bnQJAPAHAgUEdGhpcwUDZXRoAwkAAAIFDHN1cHBseUFtb3VudAUMc3VwcGx5QW1vdW50BARtYWluCQEIc3VwcGx5UEwDBQdQTF9NYWluBQNldGgFDHN1cHBseUFtb3VudAMJAAACBQRtYWluBQRtYWluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxFVEggc3VwcGxpZWQJAGQCBQxzdXBwbHlBbW91bnQJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIMRVRIIHN1cHBsaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhlFVEggUHV6emxlIExlbmQgbWFpbiBwb29sCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAMwIAgkBDEludGVnZXJFbnRyeQICNnN1cnBsdXMgdHJlYXN1cnkgRVRIIFB1enpsZSBMZW5kIG1haW4gcG9vbCBpbiB3YXZlbGV0cwkAawMJAQhQTF92YWx1ZQIFB1BMX01haW4FA2V0aAUIZXRoV2F2ZXMFAmQ4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESd2l0aGRyYXdXQVZFU19NYWluAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEDndpdGhkcmF3QW1vdW50CQETd2l0aGRyYXdBbW91bnRXYXZlcwEFB1BMX01haW4DCQAAAgUOd2l0aGRyYXdBbW91bnQFDndpdGhkcmF3QW1vdW50BAh3aXRoZHJhdwkBCndpdGhkcmF3UEwDBQdQTF9NYWluBQV3YXZlcwkBE3dpdGhkcmF3QW1vdW50V2F2ZXMBBQdQTF9NYWluAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUEwgQlQgTWFpbgkBCFBMX3ZhbHVlAgUHUExfTWFpbgUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICFXdpdGhkcmF3IEFtb3VudCBXYXZlcwUOd2l0aGRyYXdBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJ3aXRoZHJhd1dBVkVTX0RlZmkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQOd2l0aGRyYXdBbW91bnQJARN3aXRoZHJhd0Ftb3VudFdhdmVzAQUHUExfRGVmaQMJAAACBQ53aXRoZHJhd0Ftb3VudAUOd2l0aGRyYXdBbW91bnQECHdpdGhkcmF3CQEKd2l0aGRyYXdQTAMFB1BMX0RlZmkFBXdhdmVzCQETd2l0aGRyYXdBbW91bnRXYXZlcwEFB1BMX0RlZmkDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpQTCBCVCBEZWZpCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIVd2l0aGRyYXcgQW1vdW50IFdhdmVzBQ53aXRoZHJhd0Ftb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEXdpdGhkcmF3V0FWRVNfTG93AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEDndpdGhkcmF3QW1vdW50CQETd2l0aGRyYXdBbW91bnRXYXZlcwEFBlBMX0xvdwMJAAACBQ53aXRoZHJhd0Ftb3VudAUOd2l0aGRyYXdBbW91bnQECHdpdGhkcmF3CQEKd2l0aGRyYXdQTAMFBlBMX0xvdwUFd2F2ZXMJARN3aXRoZHJhd0Ftb3VudFdhdmVzAQUGUExfTG93AwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgIJUEwgQlQgTG93CQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhV3aXRoZHJhdyBBbW91bnQgV2F2ZXMFDndpdGhkcmF3QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJc3Rha2VFQVNUAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIECXN0YWtlRUFTVAkA/AcEBQpFQVNUX3N0YWtlAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRlYXN0CQDwBwIFBHRoaXMFBGVhc3QFA25pbAMJAAACBQlzdGFrZUVBU1QFCXN0YWtlRUFTVAkAzAgCCQEMSW50ZWdlckVudHJ5AgILRUFTVCBzdGFrZWQJAGQCCQDwBwIFBHRoaXMFBGVhc3QJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwILRUFTVCBzdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQICElNUIEVBU1QgaW4gc3Rha2luZwUNZWFzdEluU3Rha2luZwkAzAgCCQEMSW50ZWdlckVudHJ5AgISU1Qgc3RFQVNUIGluIHdhdmVzBQ1zdEVhc3RJbldhdmVzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESY2hhbmdlSW50ZWdlckVudHJ5AglrZXlTdHJpbmcHaW50ZWdlcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVN0cmluZwUHaW50ZWdlcgUDbmlsALbgwYQ=", "height": 3853650, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fvgmdd9dV55f3r4ERLRAi62wBYng16icxagx4uLRp5Rn Next: Drk9CDp8y2qn7ZTjQdLBhCnm5iP4m6uPXhsyeLtkyhMq Diff:
Old | New | Differences | |
---|---|---|---|
19 | 19 | ||
20 | 20 | let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY' | |
21 | 21 | ||
22 | + | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
23 | + | ||
22 | 24 | let whirlpoolString = toBase58String(base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi') | |
23 | 25 | ||
24 | - | let | |
26 | + | let test = base58'fHJWWsh2hZAc4Atv8VRhKy3jNbHLeMwQMsLpdaBY51Y' | |
25 | 27 | ||
26 | 28 | let waves = base58'WAVES' | |
27 | 29 | ||
124 | 126 | ||
125 | 127 | let tvlInWaves = (((fraction((wavesInPool * 10), projectStake, totalStake) + fraction(PL_value(PL_Main, eth), ethWaves, d8)) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + stEastInWaves) | |
126 | 128 | ||
127 | - | let whirlpoolSupply = match assetInfo( | |
129 | + | let whirlpoolSupply = match assetInfo(test) { | |
128 | 130 | case asset: Asset => | |
129 | 131 | asset.quantity | |
130 | 132 | case _ => | |
145 | 147 | ||
146 | 148 | ||
147 | 149 | func swapToWaves (poolId,assetId) = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(assetId, assetBalance(this, assetId))]) | |
148 | - | ||
149 | - | ||
150 | - | func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) { | |
151 | - | case b: Int => | |
152 | - | b | |
153 | - | case _ => | |
154 | - | 0 | |
155 | - | } | |
156 | - | ||
157 | - | ||
158 | - | func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) { | |
159 | - | case b: String => | |
160 | - | b | |
161 | - | case _ => | |
162 | - | "" | |
163 | - | } | |
164 | - | ||
165 | - | ||
166 | - | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
167 | - | then unit | |
168 | - | else fromBase58String(assetIdStr) | |
169 | - | ||
170 | - | ||
171 | - | func getAssetString (assetId) = match assetId { | |
172 | - | case b: ByteVector => | |
173 | - | toBase58String(b) | |
174 | - | case _ => | |
175 | - | "WAVES" | |
176 | - | } | |
177 | - | ||
178 | - | ||
179 | - | func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)]) | |
180 | - | ||
181 | - | ||
182 | - | func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))]) | |
183 | - | ||
184 | - | ||
185 | - | func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))]) | |
186 | - | ||
187 | - | ||
188 | - | func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))]) | |
189 | - | ||
190 | - | ||
191 | - | let T = tryGetIntegerP("static_tokensAmount") | |
192 | - | ||
193 | - | let assetIds = { | |
194 | - | let $l = split(tryGetStringP("static_tokenIds"), ",") | |
195 | - | let $s = size($l) | |
196 | - | let $acc0 = nil | |
197 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
198 | - | then $a | |
199 | - | else addAssetBytesToList($a, $l[$i]) | |
200 | - | ||
201 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
202 | - | then $a | |
203 | - | else throw("List size exceeds 10") | |
204 | - | ||
205 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
206 | - | } | |
207 | - | ||
208 | - | let AssetsWeights = { | |
209 | - | let $l = assetIds | |
210 | - | let $s = size($l) | |
211 | - | let $acc0 = nil | |
212 | - | func $f1_1 ($a,$i) = if (($i >= $s)) | |
213 | - | then $a | |
214 | - | else addAssetWeightToList($a, $l[$i]) | |
215 | - | ||
216 | - | func $f1_2 ($a,$i) = if (($i >= $s)) | |
217 | - | then $a | |
218 | - | else throw("List size exceeds 10") | |
219 | - | ||
220 | - | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
221 | - | } | |
222 | - | ||
223 | - | let Decimals = { | |
224 | - | let $l = assetIds | |
225 | - | let $s = size($l) | |
226 | - | let $acc0 = nil | |
227 | - | func $f2_1 ($a,$i) = if (($i >= $s)) | |
228 | - | then $a | |
229 | - | else addAssetDecimalsToList($a, $l[$i]) | |
230 | - | ||
231 | - | func $f2_2 ($a,$i) = if (($i >= $s)) | |
232 | - | then $a | |
233 | - | else throw("List size exceeds 10") | |
234 | - | ||
235 | - | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
236 | - | } | |
237 | - | ||
238 | - | let Scales = { | |
239 | - | let $l = assetIds | |
240 | - | let $s = size($l) | |
241 | - | let $acc0 = nil | |
242 | - | func $f3_1 ($a,$i) = if (($i >= $s)) | |
243 | - | then $a | |
244 | - | else addAssetScaleToList($a, $l[$i]) | |
245 | - | ||
246 | - | func $f3_2 ($a,$i) = if (($i >= $s)) | |
247 | - | then $a | |
248 | - | else throw("List size exceeds 10") | |
249 | - | ||
250 | - | $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
251 | - | } | |
252 | - | ||
253 | - | func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = { | |
254 | - | let IndexIn = value(indexOf(assetIds, assetIn)) | |
255 | - | let IndexOut = value(indexOf(assetIds, assetOut)) | |
256 | - | if ((IndexIn == IndexOut)) | |
257 | - | then AmountIn | |
258 | - | else fraction(BalanceOut, ((d8 * d8) - toInt(pow(fraction(toBigInt(BalanceIn), toBigInt((d8 * d8)), toBigInt((BalanceIn + AmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN) | |
259 | - | } | |
260 | 150 | ||
261 | 151 | ||
262 | 152 | @Callable(i) | |
304 | 194 | then supplyPL(PL_Low, unit, supplyAmount) | |
305 | 195 | else unit | |
306 | 196 | if ((low == low)) | |
307 | - | then [Reissue( | |
197 | + | then [Reissue(test, if ((IssueAmount >= AmountOut)) | |
308 | 198 | then IssueAmount | |
309 | 199 | else 0, true), if ((AmountOut > IssueAmount)) | |
310 | 200 | then ScriptTransfer(i.caller, WhirlpoolFromSwap, whirlpool) | |
311 | - | else ScriptTransfer(i.caller, IssueAmount, | |
201 | + | else ScriptTransfer(i.caller, IssueAmount, test), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut)) | |
312 | 202 | then (pmt.amount + tryGetInteger(this, "total WAVES received in wavelets")) | |
313 | 203 | else (0 + tryGetInteger(this, "total WAVES received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut)) | |
314 | 204 | then ((pmt.amount - surplus) + tryGetInteger(this, "wavelets received for treasury")) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func tryGetInteger (address,key) = match getInteger(address, key) { | |
5 | 5 | case b: Int => | |
6 | 6 | b | |
7 | 7 | case _ => | |
8 | 8 | 0 | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | let d8 = 100000000 | |
13 | 13 | ||
14 | 14 | let d16 = (d8 * d8) | |
15 | 15 | ||
16 | 16 | let burnxtnPPTpoolId = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx' | |
17 | 17 | ||
18 | 18 | let projectOwner = base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk' | |
19 | 19 | ||
20 | 20 | let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY' | |
21 | 21 | ||
22 | + | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
23 | + | ||
22 | 24 | let whirlpoolString = toBase58String(base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi') | |
23 | 25 | ||
24 | - | let | |
26 | + | let test = base58'fHJWWsh2hZAc4Atv8VRhKy3jNbHLeMwQMsLpdaBY51Y' | |
25 | 27 | ||
26 | 28 | let waves = base58'WAVES' | |
27 | 29 | ||
28 | 30 | let usdterc = base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
29 | 31 | ||
30 | 32 | let usdcerc = base58'HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW' | |
31 | 33 | ||
32 | 34 | let usdtbsc = base58'A81p1LTRyoq2rDR2TNxB2dWYxsiNwCSSi8sXef2SEkwb' | |
33 | 35 | ||
34 | 36 | let usdcbsc = base58'4BKKSp6NoNcrFHyorZogDyctq1fq6w7114Ym1pw6HUtC' | |
35 | 37 | ||
36 | 38 | let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
37 | 39 | ||
38 | 40 | let eth = base58'3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13' | |
39 | 41 | ||
40 | 42 | let bnb = base58'66a1br3BrkoaJgP7yEar9hJcSTvJPoH6PYBLqscXcMGo' | |
41 | 43 | ||
42 | 44 | let wbtc = base58'2Fge5HEBRD3XTeg7Xg3FW5yiB9HVJFQtMXiWMQo72Up6' | |
43 | 45 | ||
44 | 46 | let btcb = base58'EW1uGLVo21Wd9i2Rhq8o4VKDTCQTGCGXE8DqayHGrLg8' | |
45 | 47 | ||
46 | 48 | let east = base58'6phK22ztGBW127gUFmdMEHKB3CVd6ZhWox2WtwJkbqTq' | |
47 | 49 | ||
48 | 50 | let steast = base58'GAB8JowY9UANZ4TQy2TzJyhxjPqXX3DUrb2cdMWrrJus' | |
49 | 51 | ||
50 | 52 | let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7' | |
51 | 53 | ||
52 | 54 | let poolboostSC = base58'3PAeY7RgwuNUZNscGqahqJxFTFDkh7fbNwJ' | |
53 | 55 | ||
54 | 56 | let PL_Main = Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH') | |
55 | 57 | ||
56 | 58 | let PL_Defi = Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X') | |
57 | 59 | ||
58 | 60 | let PL_Low = Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH') | |
59 | 61 | ||
60 | 62 | let EAST_stake = Address(base58'3P2hbtheN5apNppqqUK7L7qAwmRFXy91CNa') | |
61 | 63 | ||
62 | 64 | let WX_WAVES_EAST = Address(base58'3PJVwjfi2fF5Jv9AauayU6xLxrYBn8bpGH1') | |
63 | 65 | ||
64 | 66 | let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV') | |
65 | 67 | ||
66 | 68 | let ethInPool = tryGetInteger(Address(burnxtnPPTpoolId), (("global_" + toBase58String(eth)) + "_balance")) | |
67 | 69 | ||
68 | 70 | let wavesInPool = tryGetInteger(Address(burnxtnPPTpoolId), (("global_" + toBase58String(waves)) + "_balance")) | |
69 | 71 | ||
70 | 72 | let ethWaves = fraction(d8, wavesInPool, ethInPool) | |
71 | 73 | ||
72 | 74 | let projectStake = tryGetInteger(Address(burnxtnPPTpoolId), (toString(this) + "_indexStaked")) | |
73 | 75 | ||
74 | 76 | let totalStake = tryGetInteger(Address(burnxtnPPTpoolId), "global_poolToken_amount") | |
75 | 77 | ||
76 | 78 | func PL_value (dAppAddress,asset) = fraction(tryGetInteger(dAppAddress, ((toString(this) + "_supplied_") + toBase58String(asset))), tryGetInteger(dAppAddress, (toBase58String(asset) + "_sRate")), d16) | |
77 | 79 | ||
78 | 80 | ||
79 | 81 | func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) { | |
80 | 82 | case a: Int => | |
81 | 83 | a | |
82 | 84 | case _ => | |
83 | 85 | default_ | |
84 | 86 | } | |
85 | 87 | ||
86 | 88 | ||
87 | 89 | func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) { | |
88 | 90 | case a: ByteVector => | |
89 | 91 | toBigInt(a) | |
90 | 92 | case _ => | |
91 | 93 | default_ | |
92 | 94 | } | |
93 | 95 | ||
94 | 96 | ||
95 | 97 | let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000)) | |
96 | 98 | ||
97 | 99 | let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0)) | |
98 | 100 | ||
99 | 101 | let lastHeight = _loadInt("LAST_HEIGHT", 0) | |
100 | 102 | ||
101 | 103 | let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height]) | |
102 | 104 | ||
103 | 105 | let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight)))) | |
104 | 106 | ||
105 | 107 | let baseAmount = toInt(fraction(toBigInt(assetBalance(WX_WAVES_EAST, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR)) | |
106 | 108 | ||
107 | 109 | let wavesInWX = (wavesBalance(WX_WAVES_EAST).regular + baseAmount) | |
108 | 110 | ||
109 | 111 | let eastInWX = assetBalance(WX_WAVES_EAST, east) | |
110 | 112 | ||
111 | 113 | let wavesEast = fraction((d8 * 100), eastInWX, wavesInWX) | |
112 | 114 | ||
113 | 115 | let wavesInWhirlpool = tryGetInteger(Address(whirlpoolPoolId), (("global_" + toBase58String(waves)) + "_balance")) | |
114 | 116 | ||
115 | 117 | let whirlInWhirlpool = tryGetInteger(Address(whirlpoolPoolId), (("global_" + whirlpoolString) + "_balance")) | |
116 | 118 | ||
117 | 119 | let projectStakeWhirl = tryGetInteger(Address(whirlpoolPoolId), (toString(this) + "_indexStaked")) | |
118 | 120 | ||
119 | 121 | let totalStakeWhirl = tryGetInteger(Address(whirlpoolPoolId), "global_poolToken_amount") | |
120 | 122 | ||
121 | 123 | let stEastInWaves = (fraction((fraction(assetBalance(this, steast), tryGetInteger(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100), d8, wavesEast) * 100) | |
122 | 124 | ||
123 | 125 | let eastInStaking = (fraction(assetBalance(this, steast), tryGetInteger(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100) | |
124 | 126 | ||
125 | 127 | let tvlInWaves = (((fraction((wavesInPool * 10), projectStake, totalStake) + fraction(PL_value(PL_Main, eth), ethWaves, d8)) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + stEastInWaves) | |
126 | 128 | ||
127 | - | let whirlpoolSupply = match assetInfo( | |
129 | + | let whirlpoolSupply = match assetInfo(test) { | |
128 | 130 | case asset: Asset => | |
129 | 131 | asset.quantity | |
130 | 132 | case _ => | |
131 | 133 | throw("Can't find asset") | |
132 | 134 | } | |
133 | 135 | ||
134 | 136 | let price = if (((fraction((tvlInWaves + tryGetInteger(this, "surplus received in wavelets")), d8, whirlpoolSupply) + d8) >= tryGetInteger(this, "WHIRLPOOL issue price in wavelets"))) | |
135 | 137 | then (fraction((tvlInWaves + tryGetInteger(this, "surplus received in wavelets")), d8, whirlpoolSupply) + d8) | |
136 | 138 | else tryGetInteger(this, "WHIRLPOOL issue price in wavelets") | |
137 | 139 | ||
138 | 140 | func withdrawAmountWaves (dappAddress) = (PL_value(dappAddress, waves) - (tryGetInteger(this, "wavelets received for treasury") / 3)) | |
139 | 141 | ||
140 | 142 | ||
141 | 143 | func supplyPL (dappAddress,assetId,supplyAmount) = invoke(dappAddress, "supply", nil, [AttachedPayment(assetId, supplyAmount)]) | |
142 | 144 | ||
143 | 145 | ||
144 | 146 | func withdrawPL (dappAddress,assetId,withdrawAmount) = invoke(dappAddress, "withdraw", [toBase58String(assetId), withdrawAmount], nil) | |
145 | 147 | ||
146 | 148 | ||
147 | 149 | func swapToWaves (poolId,assetId) = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(assetId, assetBalance(this, assetId))]) | |
148 | - | ||
149 | - | ||
150 | - | func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) { | |
151 | - | case b: Int => | |
152 | - | b | |
153 | - | case _ => | |
154 | - | 0 | |
155 | - | } | |
156 | - | ||
157 | - | ||
158 | - | func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) { | |
159 | - | case b: String => | |
160 | - | b | |
161 | - | case _ => | |
162 | - | "" | |
163 | - | } | |
164 | - | ||
165 | - | ||
166 | - | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
167 | - | then unit | |
168 | - | else fromBase58String(assetIdStr) | |
169 | - | ||
170 | - | ||
171 | - | func getAssetString (assetId) = match assetId { | |
172 | - | case b: ByteVector => | |
173 | - | toBase58String(b) | |
174 | - | case _ => | |
175 | - | "WAVES" | |
176 | - | } | |
177 | - | ||
178 | - | ||
179 | - | func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)]) | |
180 | - | ||
181 | - | ||
182 | - | func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))]) | |
183 | - | ||
184 | - | ||
185 | - | func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))]) | |
186 | - | ||
187 | - | ||
188 | - | func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))]) | |
189 | - | ||
190 | - | ||
191 | - | let T = tryGetIntegerP("static_tokensAmount") | |
192 | - | ||
193 | - | let assetIds = { | |
194 | - | let $l = split(tryGetStringP("static_tokenIds"), ",") | |
195 | - | let $s = size($l) | |
196 | - | let $acc0 = nil | |
197 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
198 | - | then $a | |
199 | - | else addAssetBytesToList($a, $l[$i]) | |
200 | - | ||
201 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
202 | - | then $a | |
203 | - | else throw("List size exceeds 10") | |
204 | - | ||
205 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
206 | - | } | |
207 | - | ||
208 | - | let AssetsWeights = { | |
209 | - | let $l = assetIds | |
210 | - | let $s = size($l) | |
211 | - | let $acc0 = nil | |
212 | - | func $f1_1 ($a,$i) = if (($i >= $s)) | |
213 | - | then $a | |
214 | - | else addAssetWeightToList($a, $l[$i]) | |
215 | - | ||
216 | - | func $f1_2 ($a,$i) = if (($i >= $s)) | |
217 | - | then $a | |
218 | - | else throw("List size exceeds 10") | |
219 | - | ||
220 | - | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
221 | - | } | |
222 | - | ||
223 | - | let Decimals = { | |
224 | - | let $l = assetIds | |
225 | - | let $s = size($l) | |
226 | - | let $acc0 = nil | |
227 | - | func $f2_1 ($a,$i) = if (($i >= $s)) | |
228 | - | then $a | |
229 | - | else addAssetDecimalsToList($a, $l[$i]) | |
230 | - | ||
231 | - | func $f2_2 ($a,$i) = if (($i >= $s)) | |
232 | - | then $a | |
233 | - | else throw("List size exceeds 10") | |
234 | - | ||
235 | - | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
236 | - | } | |
237 | - | ||
238 | - | let Scales = { | |
239 | - | let $l = assetIds | |
240 | - | let $s = size($l) | |
241 | - | let $acc0 = nil | |
242 | - | func $f3_1 ($a,$i) = if (($i >= $s)) | |
243 | - | then $a | |
244 | - | else addAssetScaleToList($a, $l[$i]) | |
245 | - | ||
246 | - | func $f3_2 ($a,$i) = if (($i >= $s)) | |
247 | - | then $a | |
248 | - | else throw("List size exceeds 10") | |
249 | - | ||
250 | - | $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
251 | - | } | |
252 | - | ||
253 | - | func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = { | |
254 | - | let IndexIn = value(indexOf(assetIds, assetIn)) | |
255 | - | let IndexOut = value(indexOf(assetIds, assetOut)) | |
256 | - | if ((IndexIn == IndexOut)) | |
257 | - | then AmountIn | |
258 | - | else fraction(BalanceOut, ((d8 * d8) - toInt(pow(fraction(toBigInt(BalanceIn), toBigInt((d8 * d8)), toBigInt((BalanceIn + AmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN) | |
259 | - | } | |
260 | 150 | ||
261 | 151 | ||
262 | 152 | @Callable(i) | |
263 | 153 | func buyWHIRLPOOLwithWAVES () = if (if ((i.caller != this)) | |
264 | 154 | then (i.caller != Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3')) | |
265 | 155 | else false) | |
266 | 156 | then throw("smart contract under maintenance") | |
267 | 157 | else { | |
268 | 158 | let pmt = value(i.payments[0]) | |
269 | 159 | let surplus = fraction((price - d8), pmt.amount, d8) | |
270 | 160 | let IssueAmount = if ((pmt.amount >= fraction(pmt.amount, d8, price))) | |
271 | 161 | then fraction(pmt.amount, d8, price) | |
272 | 162 | else throw("please contact project owner: issue amount error") | |
273 | 163 | let supplyAmount = ((pmt.amount - surplus) / 3) | |
274 | 164 | let cleanAmountIn = (pmt.amount - fraction(pmt.amount, 200, 10000)) | |
275 | 165 | let AmountOut = fraction(whirlInWhirlpool, ((d8 * d8) - toInt(pow(fraction(toBigInt(wavesInWhirlpool), toBigInt((d8 * d8)), toBigInt((wavesInWhirlpool + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(100, 10000, 900)), 4, 16, CEILING))), (d8 * d8), DOWN) | |
276 | 166 | if ((pmt.assetId != unit)) | |
277 | 167 | then throw("attach WAVES token only") | |
278 | 168 | else { | |
279 | 169 | let WhirlpoolBalanceBefore = assetBalance(this, whirlpool) | |
280 | 170 | if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore)) | |
281 | 171 | then { | |
282 | 172 | let buy = if ((AmountOut > IssueAmount)) | |
283 | 173 | then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolString, (IssueAmount + 1)], [AttachedPayment(unit, pmt.amount)]) | |
284 | 174 | else unit | |
285 | 175 | if ((buy == buy)) | |
286 | 176 | then { | |
287 | 177 | let WhirlpoolBalanceAfter = assetBalance(this, whirlpool) | |
288 | 178 | if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter)) | |
289 | 179 | then { | |
290 | 180 | let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter) | |
291 | 181 | if ((WhirlpoolFromSwap == WhirlpoolFromSwap)) | |
292 | 182 | then { | |
293 | 183 | let main = if ((IssueAmount >= AmountOut)) | |
294 | 184 | then supplyPL(PL_Main, unit, supplyAmount) | |
295 | 185 | else unit | |
296 | 186 | if ((main == main)) | |
297 | 187 | then { | |
298 | 188 | let defi = if ((IssueAmount >= AmountOut)) | |
299 | 189 | then supplyPL(PL_Defi, unit, supplyAmount) | |
300 | 190 | else unit | |
301 | 191 | if ((defi == defi)) | |
302 | 192 | then { | |
303 | 193 | let low = if ((IssueAmount >= AmountOut)) | |
304 | 194 | then supplyPL(PL_Low, unit, supplyAmount) | |
305 | 195 | else unit | |
306 | 196 | if ((low == low)) | |
307 | - | then [Reissue( | |
197 | + | then [Reissue(test, if ((IssueAmount >= AmountOut)) | |
308 | 198 | then IssueAmount | |
309 | 199 | else 0, true), if ((AmountOut > IssueAmount)) | |
310 | 200 | then ScriptTransfer(i.caller, WhirlpoolFromSwap, whirlpool) | |
311 | - | else ScriptTransfer(i.caller, IssueAmount, | |
201 | + | else ScriptTransfer(i.caller, IssueAmount, test), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut)) | |
312 | 202 | then (pmt.amount + tryGetInteger(this, "total WAVES received in wavelets")) | |
313 | 203 | else (0 + tryGetInteger(this, "total WAVES received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut)) | |
314 | 204 | then ((pmt.amount - surplus) + tryGetInteger(this, "wavelets received for treasury")) | |
315 | 205 | else 0)] | |
316 | 206 | else throw("Strict value is not equal to itself.") | |
317 | 207 | } | |
318 | 208 | else throw("Strict value is not equal to itself.") | |
319 | 209 | } | |
320 | 210 | else throw("Strict value is not equal to itself.") | |
321 | 211 | } | |
322 | 212 | else throw("Strict value is not equal to itself.") | |
323 | 213 | } | |
324 | 214 | else throw("Strict value is not equal to itself.") | |
325 | 215 | } | |
326 | 216 | else throw("Strict value is not equal to itself.") | |
327 | 217 | } | |
328 | 218 | else throw("Strict value is not equal to itself.") | |
329 | 219 | } | |
330 | 220 | } | |
331 | 221 | ||
332 | 222 | ||
333 | 223 | ||
334 | 224 | @Callable(i) | |
335 | 225 | func priceSurplusSupply () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesInPool * 10), projectStake, totalStake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethWaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)), IntegerEntry("ST EAST in staking", eastInStaking), IntegerEntry("ST stEAST in waves", stEastInWaves), IntegerEntry("Total surplus treasury value in wavelets", tvlInWaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesInWhirlpool * 9), whirlInWhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolSupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlInWaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlInWaves), whirlpoolSupply)), IntegerEntry("total WAVES received in wavelets", tryGetInteger(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", tryGetInteger(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", tryGetInteger(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", tryGetInteger(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", tryGetInteger(this, "ROI basis points"))] | |
336 | 226 | ||
337 | 227 | ||
338 | 228 | ||
339 | 229 | @Callable(i) | |
340 | 230 | func poolOneTokenSurplus () = if ((i.caller != this)) | |
341 | 231 | then throw("access only by project owner") | |
342 | 232 | else { | |
343 | 233 | let surplusAmount = tryGetInteger(this, "surplus received in wavelets") | |
344 | 234 | let PoolOneTokenSurplus = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(burnxtnPPTpoolId)], [AttachedPayment(unit, surplusAmount)]) | |
345 | 235 | if ((PoolOneTokenSurplus == PoolOneTokenSurplus)) | |
346 | 236 | then [IntegerEntry("surplus received in wavelets", (tryGetInteger(this, "surplus received in wavelets") - surplusAmount))] | |
347 | 237 | else throw("Strict value is not equal to itself.") | |
348 | 238 | } | |
349 | 239 | ||
350 | 240 | ||
351 | 241 | ||
352 | 242 | @Callable(i) | |
353 | 243 | func boostPoolAPY (wavesBalanceBefore) = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
354 | 244 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
355 | 245 | else { | |
356 | 246 | let wavesDifference = (wavesBalance(this).available - wavesBalanceBefore) | |
357 | 247 | if ((wavesDifference == wavesDifference)) | |
358 | 248 | then { | |
359 | 249 | let wavesAmountBoost = fraction(wavesDifference, 80, 100) | |
360 | 250 | if ((wavesAmountBoost == wavesAmountBoost)) | |
361 | 251 | then { | |
362 | 252 | let amountBoost = fraction(wavesDifference, 80, 100) | |
363 | 253 | if ((amountBoost == amountBoost)) | |
364 | 254 | then { | |
365 | 255 | let amountOwner = fraction(wavesDifference, 20, 100) | |
366 | 256 | if ((amountOwner == amountOwner)) | |
367 | 257 | then { | |
368 | 258 | let boost = invoke(Address(poolboostSC), "addBoosting", [toBase58String(whirlpoolPoolId), 7], [AttachedPayment(unit, amountBoost)]) | |
369 | 259 | if ((boost == boost)) | |
370 | 260 | then [ScriptTransfer(Address(projectOwner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + tryGetInteger(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(tryGetInteger(this, "total WAVES paid out in wavelets"), 10000, tryGetInteger(this, "total WAVES received in wavelets"))), IntegerEntry(if ((i.caller == this)) | |
371 | 261 | then "Activated blockheight" | |
372 | 262 | else "Activated by anybody blockheight", height)] | |
373 | 263 | else throw("Strict value is not equal to itself.") | |
374 | 264 | } | |
375 | 265 | else throw("Strict value is not equal to itself.") | |
376 | 266 | } | |
377 | 267 | else throw("Strict value is not equal to itself.") | |
378 | 268 | } | |
379 | 269 | else throw("Strict value is not equal to itself.") | |
380 | 270 | } | |
381 | 271 | else throw("Strict value is not equal to itself.") | |
382 | 272 | } | |
383 | 273 | ||
384 | 274 | ||
385 | 275 | ||
386 | 276 | @Callable(i) | |
387 | 277 | func boostPoolAPYburnxtnPPT () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
388 | 278 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
389 | 279 | else { | |
390 | 280 | let wavesBalanceBefore = wavesBalance(this).available | |
391 | 281 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
392 | 282 | then { | |
393 | 283 | let claim = invoke(Address(burnxtnPPTpoolId), "claimIndexRewards", nil, nil) | |
394 | 284 | if ((claim == claim)) | |
395 | 285 | then { | |
396 | 286 | let swapburnxtn = swapToWaves(burnxtnPPTpoolId, burnxtn) | |
397 | 287 | if ((swapburnxtn == swapburnxtn)) | |
398 | 288 | then { | |
399 | 289 | let swapusdterc = swapToWaves(burnxtnPPTpoolId, usdterc) | |
400 | 290 | if ((swapusdterc == swapusdterc)) | |
401 | 291 | then { | |
402 | 292 | let swapusdtbsc = swapToWaves(burnxtnPPTpoolId, usdtbsc) | |
403 | 293 | if ((swapusdtbsc == swapusdtbsc)) | |
404 | 294 | then { | |
405 | 295 | let swapusdcerc = swapToWaves(burnxtnPPTpoolId, usdcerc) | |
406 | 296 | if ((swapusdcerc == swapusdcerc)) | |
407 | 297 | then { | |
408 | 298 | let swapusdcbsc = swapToWaves(burnxtnPPTpoolId, usdcbsc) | |
409 | 299 | if ((swapusdcbsc == swapusdcbsc)) | |
410 | 300 | then { | |
411 | 301 | let swapeth = swapToWaves(burnxtnPPTpoolId, eth) | |
412 | 302 | if ((swapeth == swapeth)) | |
413 | 303 | then { | |
414 | 304 | let swapbnb = swapToWaves(burnxtnPPTpoolId, bnb) | |
415 | 305 | if ((swapbnb == swapbnb)) | |
416 | 306 | then { | |
417 | 307 | let swapwbtc = swapToWaves(burnxtnPPTpoolId, wbtc) | |
418 | 308 | if ((swapwbtc == swapwbtc)) | |
419 | 309 | then { | |
420 | 310 | let swapbtcb = swapToWaves(burnxtnPPTpoolId, btcb) | |
421 | 311 | if ((swapbtcb == swapbtcb)) | |
422 | 312 | then { | |
423 | 313 | let boost = invoke(this, "boostPoolAPY", [wavesBalanceBefore], nil) | |
424 | 314 | if ((boost == boost)) | |
425 | 315 | then nil | |
426 | 316 | else throw("Strict value is not equal to itself.") | |
427 | 317 | } | |
428 | 318 | else throw("Strict value is not equal to itself.") | |
429 | 319 | } | |
430 | 320 | else throw("Strict value is not equal to itself.") | |
431 | 321 | } | |
432 | 322 | else throw("Strict value is not equal to itself.") | |
433 | 323 | } | |
434 | 324 | else throw("Strict value is not equal to itself.") | |
435 | 325 | } | |
436 | 326 | else throw("Strict value is not equal to itself.") | |
437 | 327 | } | |
438 | 328 | else throw("Strict value is not equal to itself.") | |
439 | 329 | } | |
440 | 330 | else throw("Strict value is not equal to itself.") | |
441 | 331 | } | |
442 | 332 | else throw("Strict value is not equal to itself.") | |
443 | 333 | } | |
444 | 334 | else throw("Strict value is not equal to itself.") | |
445 | 335 | } | |
446 | 336 | else throw("Strict value is not equal to itself.") | |
447 | 337 | } | |
448 | 338 | else throw("Strict value is not equal to itself.") | |
449 | 339 | } | |
450 | 340 | ||
451 | 341 | ||
452 | 342 | ||
453 | 343 | @Callable(i) | |
454 | 344 | func boostPoolAPYwETHmain () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
455 | 345 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
456 | 346 | else { | |
457 | 347 | let wavesBalanceBefore = wavesBalance(this).available | |
458 | 348 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
459 | 349 | then { | |
460 | 350 | let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil) | |
461 | 351 | if ((calculateTokenRates == calculateTokenRates)) | |
462 | 352 | then { | |
463 | 353 | let withdrawAmount = (PL_value(PL_Main, eth) - tryGetInteger(this, "ETH supplied")) | |
464 | 354 | let withdraw = withdrawPL(PL_Main, eth, withdrawAmount) | |
465 | 355 | if ((withdraw == withdraw)) | |
466 | 356 | then { | |
467 | 357 | let swapeth = swapToWaves(burnxtnPPTpoolId, eth) | |
468 | 358 | if ((swapeth == swapeth)) | |
469 | 359 | then { | |
470 | 360 | let boost = invoke(this, "boostPoolAPY", [wavesBalanceBefore], nil) | |
471 | 361 | if ((boost == boost)) | |
472 | 362 | then nil | |
473 | 363 | else throw("Strict value is not equal to itself.") | |
474 | 364 | } | |
475 | 365 | else throw("Strict value is not equal to itself.") | |
476 | 366 | } | |
477 | 367 | else throw("Strict value is not equal to itself.") | |
478 | 368 | } | |
479 | 369 | else throw("Strict value is not equal to itself.") | |
480 | 370 | } | |
481 | 371 | else throw("Strict value is not equal to itself.") | |
482 | 372 | } | |
483 | 373 | ||
484 | 374 | ||
485 | 375 | ||
486 | 376 | @Callable(i) | |
487 | 377 | func boostPoolAPYwWhirlpool () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
488 | 378 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
489 | 379 | else { | |
490 | 380 | let wavesBalanceBefore = wavesBalance(this).available | |
491 | 381 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
492 | 382 | then { | |
493 | 383 | let claim = invoke(Address(whirlpoolPoolId), "claimIndexRewards", nil, nil) | |
494 | 384 | if ((claim == claim)) | |
495 | 385 | then { | |
496 | 386 | let swapwhirlpool = swapToWaves(whirlpoolPoolId, whirlpool) | |
497 | 387 | if ((swapwhirlpool == swapwhirlpool)) | |
498 | 388 | then { | |
499 | 389 | let boost = invoke(this, "boostPoolAPY", [wavesBalanceBefore], nil) | |
500 | 390 | if ((boost == boost)) | |
501 | 391 | then nil | |
502 | 392 | else throw("Strict value is not equal to itself.") | |
503 | 393 | } | |
504 | 394 | else throw("Strict value is not equal to itself.") | |
505 | 395 | } | |
506 | 396 | else throw("Strict value is not equal to itself.") | |
507 | 397 | } | |
508 | 398 | else throw("Strict value is not equal to itself.") | |
509 | 399 | } | |
510 | 400 | ||
511 | 401 | ||
512 | 402 | ||
513 | 403 | @Callable(i) | |
514 | 404 | func supplyETHmain () = if ((i.caller != this)) | |
515 | 405 | then throw("access only by project owner") | |
516 | 406 | else { | |
517 | 407 | let supplyAmount = assetBalance(this, eth) | |
518 | 408 | if ((supplyAmount == supplyAmount)) | |
519 | 409 | then { | |
520 | 410 | let main = supplyPL(PL_Main, eth, supplyAmount) | |
521 | 411 | if ((main == main)) | |
522 | 412 | then [IntegerEntry("ETH supplied", (supplyAmount + tryGetInteger(this, "ETH supplied"))), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethWaves, d8))] | |
523 | 413 | else throw("Strict value is not equal to itself.") | |
524 | 414 | } | |
525 | 415 | else throw("Strict value is not equal to itself.") | |
526 | 416 | } | |
527 | 417 | ||
528 | 418 | ||
529 | 419 | ||
530 | 420 | @Callable(i) | |
531 | 421 | func withdrawWAVES_Main () = if ((i.caller != this)) | |
532 | 422 | then throw("access only by project owner") | |
533 | 423 | else { | |
534 | 424 | let withdrawAmount = withdrawAmountWaves(PL_Main) | |
535 | 425 | if ((withdrawAmount == withdrawAmount)) | |
536 | 426 | then { | |
537 | 427 | let withdraw = withdrawPL(PL_Main, waves, withdrawAmountWaves(PL_Main)) | |
538 | 428 | if ((withdraw == withdraw)) | |
539 | 429 | then [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("withdraw Amount Waves", withdrawAmount)] | |
540 | 430 | else throw("Strict value is not equal to itself.") | |
541 | 431 | } | |
542 | 432 | else throw("Strict value is not equal to itself.") | |
543 | 433 | } | |
544 | 434 | ||
545 | 435 | ||
546 | 436 | ||
547 | 437 | @Callable(i) | |
548 | 438 | func withdrawWAVES_Defi () = if ((i.caller != this)) | |
549 | 439 | then throw("access only by project owner") | |
550 | 440 | else { | |
551 | 441 | let withdrawAmount = withdrawAmountWaves(PL_Defi) | |
552 | 442 | if ((withdrawAmount == withdrawAmount)) | |
553 | 443 | then { | |
554 | 444 | let withdraw = withdrawPL(PL_Defi, waves, withdrawAmountWaves(PL_Defi)) | |
555 | 445 | if ((withdraw == withdraw)) | |
556 | 446 | then [IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("withdraw Amount Waves", withdrawAmount)] | |
557 | 447 | else throw("Strict value is not equal to itself.") | |
558 | 448 | } | |
559 | 449 | else throw("Strict value is not equal to itself.") | |
560 | 450 | } | |
561 | 451 | ||
562 | 452 | ||
563 | 453 | ||
564 | 454 | @Callable(i) | |
565 | 455 | func withdrawWAVES_Low () = if ((i.caller != this)) | |
566 | 456 | then throw("access only by project owner") | |
567 | 457 | else { | |
568 | 458 | let withdrawAmount = withdrawAmountWaves(PL_Low) | |
569 | 459 | if ((withdrawAmount == withdrawAmount)) | |
570 | 460 | then { | |
571 | 461 | let withdraw = withdrawPL(PL_Low, waves, withdrawAmountWaves(PL_Low)) | |
572 | 462 | if ((withdraw == withdraw)) | |
573 | 463 | then [IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("withdraw Amount Waves", withdrawAmount)] | |
574 | 464 | else throw("Strict value is not equal to itself.") | |
575 | 465 | } | |
576 | 466 | else throw("Strict value is not equal to itself.") | |
577 | 467 | } | |
578 | 468 | ||
579 | 469 | ||
580 | 470 | ||
581 | 471 | @Callable(i) | |
582 | 472 | func stakeEAST () = if ((i.caller != this)) | |
583 | 473 | then throw("access only by project owner") | |
584 | 474 | else { | |
585 | 475 | let stakeEAST = invoke(EAST_stake, "stake", nil, [AttachedPayment(east, assetBalance(this, east))]) | |
586 | 476 | if ((stakeEAST == stakeEAST)) | |
587 | 477 | then [IntegerEntry("EAST staked", (assetBalance(this, east) + tryGetInteger(this, "EAST staked"))), IntegerEntry("ST EAST in staking", eastInStaking), IntegerEntry("ST stEAST in waves", stEastInWaves)] | |
588 | 478 | else throw("Strict value is not equal to itself.") | |
589 | 479 | } | |
590 | 480 | ||
591 | 481 | ||
592 | 482 | ||
593 | 483 | @Callable(i) | |
594 | 484 | func changeIntegerEntry (keyString,integer) = if ((i.caller != this)) | |
595 | 485 | then throw("access only by project owner") | |
596 | 486 | else [IntegerEntry(keyString, integer)] | |
597 | 487 | ||
598 | 488 |
github/deemru/w8io/873ac7e 126.76 ms ◑![]()