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