tx · 3RcHvbUrvhacUkEbDF6sAbEsJWivQptXXP9H9oenS514 3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf: -0.04300000 Waves 2024.10.24 11:06 [3340644] smart account 3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf > SELF 0.00000000 Waves
{ "type": 13, "id": "3RcHvbUrvhacUkEbDF6sAbEsJWivQptXXP9H9oenS514", "fee": 4300000, "feeAssetId": null, "timestamp": 1729757216282, "version": 2, "chainId": 84, "sender": "3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf", "senderPublicKey": "62i1XasxLi9NJmrEaq9UaHEGfZaonGKUL6EmFaA7gosh", "proofs": [ "3UoCkntvwb91wNJQrbPZKM8iKw7nth7gjRngRHtxk4BKKjAJHEbFqQxAR2o2xqNgyWtnoyY5xMEEEPPz6sqDRRYT" ], "script": "base64:CAJCCAISBwoFCAgCCAESBwoFCAgCCAESCAoGCAgCAQgBEgYKBAgICAESAwoBCBIAEgMKAQgSBgoECBIBARIGCgQIAQgBTQAHSU5UX01BWAD//////////38ABVdBVkVTAIDC1y8AC01JTl9CQUxBTkNFCQBoAgCgnAEFBVdBVkVTAANTRVACASwAD0JMT0NLX0hBU0hfU0laRQAgABRQVUJMSUNfS0VZX0hBU0hfU0laRQAUAA5ST09UX0hBU0hfU0laRQAgABRXSVRIRFJBV19QUk9PRlNfU0laRQAKABRFVEhfQUREUkVTU19TVFJfU0laRQAoABZNQVhfQ0xfVE9fRUxfVFJBTlNGRVJTABAACXplcm9lc1N0cgKACDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAC29mZnNldHNfMTAwCQC8CQICZDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoCAAAMYWxsTWluZXJzS2V5AglhbGxNaW5lcnMADm1haW5DaGFpbklkS2V5AgttYWluQ2hhaW5JZAAObGFzdENoYWluSWRLZXkCC2xhc3RDaGFpbklkABdmaXJzdFZhbGlkQWx0Q2hhaW5JZEtleQIUZmlyc3RWYWxpZEFsdENoYWluSWQADm1pbmVyUmV3YXJkS2V5AgttaW5lclJld2FyZAAKYmxvY2tNZXRhSwIIYmxvY2tfMHgAEWZpbmFsaXplZEJsb2NrS2V5Ag5maW5hbGl6ZWRCbG9jawAKdG9rZW5JZEtleQIHdG9rZW5JZAASZWxCcmlkZ2VBZGRyZXNzS2V5Ag9lbEJyaWRnZUFkZHJlc3MAF25hdGl2ZVRyYW5zZmVyc0NvdW50S2V5AhRuYXRpdmVUcmFuc2ZlcnNDb3VudAANZGFvQWRkcmVzc0tleQIKZGFvQWRkcmVzcwAMZGFvUmV3YXJkS2V5AglkYW9SZXdhcmQBA3BhZAEBaQQBcwkApAMBBQFpBAckbWF0Y2gwCQCxAgEFAXMDCQAAAgABBQckbWF0Y2gwCQCsAgICBzAwMDAwMDAFAXMDCQAAAgACBQckbWF0Y2gwCQCsAgICBjAwMDAwMAUBcwMJAAACAAMFByRtYXRjaDAJAKwCAgIFMDAwMDAFAXMDCQAAAgAEBQckbWF0Y2gwCQCsAgICBDAwMDAFAXMDCQAAAgAFBQckbWF0Y2gwCQCsAgICAzAwMAUBcwMJAAACAAYFByRtYXRjaDAJAKwCAgICMDAFAXMDCQAAAgAHBQckbWF0Y2gwCQCsAgICATAFAXMFAXMBFGJsb2NrRTJDVHJhbnNmZXJzS2V5AQxibG9ja0hhc2hIZXgJAKwCAgISZWxUb0NsVHJhbnNmZXJzXzB4BQxibG9ja0hhc2hIZXgBDGVwb2NoTWV0YUtleQEFZXBvY2gJAKwCAgIGZXBvY2hfCQEDcGFkAQUFZXBvY2gBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQdjaGFpbklkCQCsAgIJAKwCAgIFY2hhaW4JAKQDAQUHY2hhaW5JZAIKRmlyc3RCbG9jawEMY2hhaW5NZXRhS2V5AQdjaGFpbklkCQCsAgICBmNoYWluXwkBA3BhZAEFB2NoYWluSWQBEmNoYWluTGFzdEhlaWdodEtleQIHY2hhaW5JZAVtaW5lcgkArAICCQCsAgIJAKwCAgIGY2hhaW5fCQEDcGFkAQUHY2hhaW5JZAIBXwkApQgBBQVtaW5lcgEUY2hhaW5Gb3JrZWRIZWlnaHRLZXkBB2NoYWluSWQJAKwCAgkArAICAgZjaGFpbl8JAQNwYWQBBQdjaGFpbklkAgxGb3JrZWRIZWlnaHQBDXN1cHBvcnRlcnNLZXkBB2NoYWluSWQJAKwCAgkArAICAgVjaGFpbgkApAMBBQdjaGFpbklkAgpTdXBwb3J0ZXJzARVtaW5lclJld2FyZEFkZHJlc3NLZXkBCW1pbmVyQWRkcgkArAICCQCsAgICBm1pbmVyXwUJbWluZXJBZGRyAg5fUmV3YXJkQWRkcmVzcwEKbWluZXJQa0tleQENcmV3YXJkQWRkcmVzcwkArAICCQCsAgICCG1pbmVyXzB4BQ1yZXdhcmRBZGRyZXNzAgNfUEsBD21pbmVyQ2hhaW5JZEtleQEFbWluZXIJAKwCAgkArAICAgZtaW5lcl8JAKUIAQUFbWluZXICCF9DaGFpbklkABRuYXRpdmVUcmFuc2ZlcnNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRduYXRpdmVUcmFuc2ZlcnNDb3VudEtleQAAARFuYXRpdmVUcmFuc2ZlcktleQEFaW5kZXgJAKwCAgIPbmF0aXZlVHJhbnNmZXJfCQCkAwEFBWluZGV4ARVta05hdGl2ZVRyYW5zZmVyRW50cnkDBWluZGV4EGRlc3RFbEFkZHJlc3NIZXgGYW1vdW50CQELU3RyaW5nRW50cnkCCQERbmF0aXZlVHJhbnNmZXJLZXkBBQVpbmRleAkArAICCQCsAgIJAKwCAgICMHgFEGRlc3RFbEFkZHJlc3NIZXgFA1NFUAkApAMBBQZhbW91bnQBFmVuc3VyZUNvcnJlY3RUcmFuc2ZlcnMDEHJlZlRyYW5zZmVySW5kZXgNdHJhbnNmZXJJbmRleAxleHBlY3RSZXdhcmQEDG1heFRyYW5zZmVycwMFDGV4cGVjdFJld2FyZAkAZQIFFk1BWF9DTF9UT19FTF9UUkFOU0ZFUlMAAQUWTUFYX0NMX1RPX0VMX1RSQU5TRkVSUwQPYWN0dWFsVHJhbnNmZXJzCQBlAgUNdHJhbnNmZXJJbmRleAUQcmVmVHJhbnNmZXJJbmRleAQLY2hlY2tOdW1iZXIDCQBmAgUPYWN0dWFsVHJhbnNmZXJzBQxtYXhUcmFuc2ZlcnMJAAIBCQCsAgIJAKwCAgkArAICAg1BbGxvd2VkIG9ubHkgCQCkAwEFDG1heFRyYW5zZmVycwIQIHRyYW5zZmVycywgZ290IAkApAMBBQ9hY3R1YWxUcmFuc2ZlcnMGAwkAAAIFC2NoZWNrTnVtYmVyBQtjaGVja051bWJlcgMJAGcCBQ10cmFuc2ZlckluZGV4BRRuYXRpdmVUcmFuc2ZlcnNDb3VudAkAAgEJAKwCAgkArAICCQCsAgICFUF0dGVtcHQgdG8gdHJhbnNmZXIgIwkApAMBBQ10cmFuc2ZlckluZGV4AhcuIEF2YWlsYWJsZSB0cmFuc2ZlcnM6IAkApAMBBRRuYXRpdmVUcmFuc2ZlcnNDb3VudAYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCmFtb3VudEd0RXEDAXQEZ3RFcQlxdWV1ZVNpemUDCQBnAggFAXQGYW1vdW50BQRndEVxBgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFFRyYW5zZmVycmluZyBhbW91bnQgCQCkAwEIBQF0BmFtb3VudAIOIHNob3VsZCBiZSA+PSAJAKQDAQUEZ3RFcQITIGZvciBxdWV1ZSBzaXplIG9mIAkApAMBBQlxdWV1ZVNpemUCFy4gVHJhbnNmZXIgbW9yZSBvciB3YWl0ARFnZW5lcmF0aW5nQmFsYW5jZQEHYWRkcmVzcwgJAO8HAQUHYWRkcmVzcwpnZW5lcmF0aW5nAQljaGFpbk1ldGEBB2NoYWluSWQEAXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQxjaGFpbk1ldGFLZXkBBQdjaGFpbklkBAVpdGVtcwkAtQkCBQFzBQNTRVAJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWl0ZW1zAAAJAJEDAgUFaXRlbXMAAQEQbWtDaGFpbk1ldGFFbnRyeQMHY2hhaW5JZA5uZXdDaGFpbkhlaWdodAxibG9ja0hhc2hIZXgJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQdjaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgAC21haW5DaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFDm1haW5DaGFpbklkS2V5AAAACyR0MDUyNDk1MzE1CQEJY2hhaW5NZXRhAQULbWFpbkNoYWluSWQAD21haW5DaGFpbkhlaWdodAgFCyR0MDUyNDk1MzE1Al8xABJtYWluQ2hhaW5MYXN0QmxvY2sIBQskdDA1MjQ5NTMxNQJfMgEJZXBvY2hNZXRhAQVlcG9jaAQHJG1hdGNoMAkAoggBCQEMZXBvY2hNZXRhS2V5AQUFZXBvY2gDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBAlmcmFnbWVudHMJALUJAgUBcwUDU0VQCQCVCgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUJZnJhZ21lbnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmcmFnbWVudHMAAQkAkQMCBQlmcmFnbWVudHMAAgUEdW5pdAALJHQwNTU0NjU2NzAEByRtYXRjaDAJAQllcG9jaE1ldGEBBQZoZWlnaHQDCQABAgUHJG1hdGNoMAIWKEFkZHJlc3MsIEludCwgU3RyaW5nKQQBbQUHJG1hdGNoMAUBbQkAlAoCBQR1bml0AAAADnRoaXNFcG9jaE1pbmVyCAULJHQwNTU0NjU2NzACXzEADHRoaXNFcG9jaFJlZggFCyR0MDU1NDY1NjcwAl8yAAxhbGxNaW5lcnNTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMYWxsTWluZXJzS2V5AgAACWFsbE1pbmVycwQHJG1hdGNoMAUMYWxsTWluZXJzU3RyAwkAAAICAAUHJG1hdGNoMAUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQDcmF3BQckbWF0Y2gwCQC8CQIFA3JhdwUDU0VQCQACAQILTWF0Y2ggZXJyb3IBCWJsb2NrTWV0YQEHYmxvY2tJZAQEbWV0YQkBEUBleHRyTmF0aXZlKDEwNTcpAQkArAICBQpibG9ja01ldGFLBQdibG9ja0lkBAhtZXRhU2l6ZQkAyAEBBQRtZXRhBAtibG9ja0hlaWdodAkAsQkBBQRtZXRhBApibG9ja0Vwb2NoCQCyCQIFBG1ldGEACAQLYmxvY2tQYXJlbnQJAMkBAgkAygECBQRtZXRhABAFD0JMT0NLX0hBU0hfU0laRQQHY2hhaW5JZAkAsgkCBQRtZXRhCQBkAgAQBQ9CTE9DS19IQVNIX1NJWkUECmJhc2VPZmZzZXQJAGQCABgFD0JMT0NLX0hBU0hfU0laRQQOcmVtYWluaW5nQnl0ZXMJAGUCBQhtZXRhU2l6ZQUKYmFzZU9mZnNldAQUZTJjVHJhbnNmZXJzUm9vdEhhc2gDCQBnAgUOcmVtYWluaW5nQnl0ZXMFDlJPT1RfSEFTSF9TSVpFCQDJAQIJAMoBAgUEbWV0YQUKYmFzZU9mZnNldAUOUk9PVF9IQVNIX1NJWkUBAAQUbGFzdEMyRVRyYW5zZmVySW5kZXgDAwkAAAIFDnJlbWFpbmluZ0J5dGVzAAgGCQBmAgUOcmVtYWluaW5nQnl0ZXMFDlJPT1RfSEFTSF9TSVpFCQCyCQIFBG1ldGEJAGQCBQpiYXNlT2Zmc2V0CQDIAQEFFGUyY1RyYW5zZmVyc1Jvb3RIYXNoAP///////////wEJAJgKBgULYmxvY2tIZWlnaHQFCmJsb2NrRXBvY2gFC2Jsb2NrUGFyZW50BQdjaGFpbklkBRRlMmNUcmFuc2ZlcnNSb290SGFzaAUUbGFzdEMyRVRyYW5zZmVySW5kZXgBEG1rQmxvY2tNZXRhRW50cnkGDGJsb2NrSGFzaEhleAtibG9ja0hlaWdodA5ibG9ja1BhcmVudEhleAdjaGFpbklkF2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4FGxhc3RDMkVUcmFuc2ZlckluZGV4BBllMmNUcmFuc2ZlcnNSb290SGFzaEJ5dGVzCQDdBAEFF2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4BBFyb290SGFzaEJ5dGVzU2l6ZQkAyAEBBRllMmNUcmFuc2ZlcnNSb290SGFzaEJ5dGVzBA1jaGVja1Jvb3RIYXNoAwMJAAACBRFyb290SGFzaEJ5dGVzU2l6ZQAABgkAAAIFEXJvb3RIYXNoQnl0ZXNTaXplBQ5ST09UX0hBU0hfU0laRQYJAAIBCQCsAgIJAKwCAgkArAICAiVUcmFuc2ZlcnMgcm9vdCBoYXNoIHNob3VsZCBoYXZlIDAgb3IgCQCkAwEFDlJPT1RfSEFTSF9TSVpFAgwgYnl0ZXMsIGdvdCAJAKQDAQURcm9vdEhhc2hCeXRlc1NpemUDCQAAAgUNY2hlY2tSb290SGFzaAUNY2hlY2tSb290SGFzaAQOYmxvY2tNZXRhQnl0ZXMJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQCaAwEFC2Jsb2NrSGVpZ2h0CQCaAwEFBmhlaWdodAkA3QQBBQ5ibG9ja1BhcmVudEhleAkAmgMBBQdjaGFpbklkBRllMmNUcmFuc2ZlcnNSb290SGFzaEJ5dGVzCQCaAwEFFGxhc3RDMkVUcmFuc2ZlckluZGV4CQELQmluYXJ5RW50cnkCCQCsAgIFCmJsb2NrTWV0YUsFDGJsb2NrSGFzaEhleAUOYmxvY2tNZXRhQnl0ZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDGxhc3RIZWlnaHRCeQIFbWluZXIHY2hhaW5JZAQHJG1hdGNoMAkAnwgBCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgUHY2hhaW5JZAUFbWluZXIDCQABAgUHJG1hdGNoMAIDSW50BAFoBQckbWF0Y2gwBQFoBAlibG9ja0hhc2gJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICCQCsAgICBWNoYWluCQCkAwEFB2NoYWluSWQCC0xhc3RNaW5lZEJ5CQClCAEFBW1pbmVyCAkBCWJsb2NrTWV0YQEFCWJsb2NrSGFzaAJfMQALJHQwNzcxMDg2NDUECWhpdFNvdXJjZQQHJG1hdGNoMAgFCWxhc3RCbG9jawN2cmYDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDdnJmBQckbWF0Y2gwBQN2cmYIBQlsYXN0QmxvY2sTZ2VuZXJhdGlvblNpZ25hdHVyZQoBDHByb2Nlc3NNaW5lcgIEcHJldgVtaW5lcgQLJHQwNzk3NzgwNDAFBHByZXYECXByZXZNaW5lcggFCyR0MDc5Nzc4MDQwAl8xBBBwcmV2VG90YWxCYWxhbmNlCAULJHQwNzk3NzgwNDACXzIECXByZXZEZWxheQgFCyR0MDc5Nzc4MDQwAl8zBApwcmV2TWluZXJzCAULJHQwNzk3NzgwNDACXzQEDG1pbmVyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUFbWluZXIED3dhdmVzR2VuQmFsYW5jZQgJAO8HAQUMbWluZXJBZGRyZXNzCmdlbmVyYXRpbmcEDG1pbmVyQmFsYW5jZQkBEWdlbmVyYXRpbmdCYWxhbmNlAQUMbWluZXJBZGRyZXNzAwMJAGYCBQtNSU5fQkFMQU5DRQUPd2F2ZXNHZW5CYWxhbmNlBgkAZwIAAAUMbWluZXJCYWxhbmNlBQRwcmV2BAluZXh0RGVsYXkJAIUHAgUMbWluZXJBZGRyZXNzBQxtaW5lckJhbGFuY2UDCQBmAgUJcHJldkRlbGF5BQluZXh0RGVsYXkJAJYKBAUFbWluZXIJAGQCBRBwcmV2VG90YWxCYWxhbmNlBQxtaW5lckJhbGFuY2UFCW5leHREZWxheQkAzQgCBQpwcmV2TWluZXJzBQVtaW5lcgkAlgoEBQlwcmV2TWluZXIJAGQCBRBwcmV2VG90YWxCYWxhbmNlBQxtaW5lckJhbGFuY2UFCXByZXZEZWxheQkAzQgCBQpwcmV2TWluZXJzBQVtaW5lcgoAAiRsBQlhbGxNaW5lcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQCAAAABQdJTlRfTUFYBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHByb2Nlc3NNaW5lcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyABFjb21wdXRlZEdlbmVyYXRvcggFCyR0MDc3MTA4NjQ1Al8xABRjb21wdXRlZFRvdGFsQmFsYW5jZQgFCyR0MDc3MTA4NjQ1Al8yAAskdDA4NjQ3ODcxMwkBCWJsb2NrTWV0YQEFEm1haW5DaGFpbkxhc3RCbG9jawAMbWNsYklnbm9yZWQxCAULJHQwODY0Nzg3MTMCXzEADm1haW5DaGFpbkVwb2NoCAULJHQwODY0Nzg3MTMCXzIBI2NhbGN1bGF0ZUZpbmFsaXplZEJsb2NrSGFzaEFuZEVwb2NoAwhjdXJNaW5lcgxjdXJQcmV2RXBvY2gQY3VyTGFzdEJsb2NrSGFzaAQLaGFsZkJhbGFuY2UJAGkCBRRjb21wdXRlZFRvdGFsQmFsYW5jZQACCgEEc3RlcAIEcHJldgRuZXh0BAskdDA4OTUxOTAyNAUEcHJldgQJdGhpc0Vwb2NoCAULJHQwODk1MTkwMjQCXzEEF21heWJlRmluYWxpemVkQmxvY2tIYXNoCAULJHQwODk1MTkwMjQCXzIEDHRvdGFsQmFsYW5jZQgFCyR0MDg5NTE5MDI0Al8zBApwcmV2TWluZXJzCAULJHQwODk1MTkwMjQCXzQEByRtYXRjaDAFF21heWJlRmluYWxpemVkQmxvY2tIYXNoAwkAAQIFByRtYXRjaDACBFVuaXQECyR0MDkwOTE5MjU3AwkAAAIFCXRoaXNFcG9jaAUGaGVpZ2h0CQCVCgMFCGN1ck1pbmVyBQxjdXJQcmV2RXBvY2gFEGN1ckxhc3RCbG9ja0hhc2gJAQV2YWx1ZQEJAQllcG9jaE1ldGEBBQl0aGlzRXBvY2gEBW1pbmVyCAULJHQwOTA5MTkyNTcCXzEECXByZXZFcG9jaAgFCyR0MDkwOTE5MjU3Al8yBA1sYXN0QmxvY2tIYXNoCAULJHQwOTA5MTkyNTcCXzMDAwkAAAIFCXByZXZFcG9jaAAABgkAZwIJAGUCBQZoZWlnaHQFCXRoaXNFcG9jaABkCQCWCgQFCXRoaXNFcG9jaAUNbGFzdEJsb2NrSGFzaAUMdG90YWxCYWxhbmNlBQlhbGxNaW5lcnMECyR0MDk0MTE5NjEzAwkBD2NvbnRhaW5zRWxlbWVudAIFCnByZXZNaW5lcnMFBW1pbmVyCQCUCgIFDHRvdGFsQmFsYW5jZQUKcHJldk1pbmVycwkAlAoCCQBkAgUMdG90YWxCYWxhbmNlCQERZ2VuZXJhdGluZ0JhbGFuY2UBBQVtaW5lcgkAzAgCBQVtaW5lcgUKcHJldk1pbmVycwQPbmV3VG90YWxCYWxhbmNlCAULJHQwOTQxMTk2MTMCXzEECW5ld01pbmVycwgFCyR0MDk0MTE5NjEzAl8yAwkAZgIFD25ld1RvdGFsQmFsYW5jZQULaGFsZkJhbGFuY2UJAJYKBAUJdGhpc0Vwb2NoBQ1sYXN0QmxvY2tIYXNoBQ9uZXdUb3RhbEJhbGFuY2UFCWFsbE1pbmVycwkAlgoEBQlwcmV2RXBvY2gFBHVuaXQFD25ld1RvdGFsQmFsYW5jZQUJbmV3TWluZXJzBQRwcmV2BAskdDA5ODQ2OTk0MwoAAiRsBQtvZmZzZXRzXzEwMAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUGaGVpZ2h0BQR1bml0AAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEc3RlcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQEDmZpbmFsaXplZEVwb2NoCAULJHQwOTg0Njk5NDMCXzEEFWZpbmFsaXplZEJsb2NrSGFzaE9wdAgFCyR0MDk4NDY5OTQzAl8yCQCUCgIEByRtYXRjaDAFFWZpbmFsaXplZEJsb2NrSGFzaE9wdAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEEmZpbmFsaXplZEJsb2NrSGFzaAUHJG1hdGNoMAUSZmluYWxpemVkQmxvY2tIYXNoCAkBBXZhbHVlAQkBCWVwb2NoTWV0YQEFDmZpbmFsaXplZEVwb2NoAl8zBQ5maW5hbGl6ZWRFcG9jaAERc3VwcG9ydGluZ0JhbGFuY2UBB2NoYWluSWQKAQphZGRCYWxhbmNlAgNhY2MMZ2VuZXJhdG9yU3RyBA0kdDAxMDIyNjEwMjYyBQNhY2MEDHRvdGFsQmFsYW5jZQgFDSR0MDEwMjI2MTAyNjICXzEECmdlbmVyYXRvcnMIBQ0kdDAxMDIyNjEwMjYyAl8yBAlnZW5lcmF0b3IJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDGdlbmVyYXRvclN0cgMJAQ9jb250YWluc0VsZW1lbnQCBQpnZW5lcmF0b3JzBQlnZW5lcmF0b3IFA2FjYwQHYmFsYW5jZQkBEWdlbmVyYXRpbmdCYWxhbmNlAQUJZ2VuZXJhdG9yCQCUCgIJAGQCBQx0b3RhbEJhbGFuY2UFB2JhbGFuY2UJAM0IAgUKZ2VuZXJhdG9ycwUJZ2VuZXJhdG9yBA1hbGxHZW5lcmF0b3JzCQC8CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAUDU0VQBANyZXMKAAIkbAUNYWxsR2VuZXJhdG9ycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmFkZEJhbGFuY2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCAUDcmVzAl8xAQ9pc0NvbnRyYWN0U2V0dXAACQEJaXNEZWZpbmVkAQkAnwgBBQ5taW5lclJld2FyZEtleQERZW5zdXJlTWluaW5nRXBvY2gBCWdlbmVyYXRvcgMJAQIhPQIJAKUIAQUJZ2VuZXJhdG9yBRFjb21wdXRlZEdlbmVyYXRvcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkA2AQBCAUJZ2VuZXJhdG9yBWJ5dGVzAhsgaXMgbm90IGFsbG93ZWQgdG8gbWluZSBpbiAJAKQDAQUGaGVpZ2h0AhEgZXBvY2guIEV4cGVjdGVkIAURY29tcHV0ZWRHZW5lcmF0b3IFBHVuaXQBEmlzUmVmZXJlbmNlQ29ycmVjdAIJcmVmZXJlbmNlCWxhc3RCbG9jawMJAAACBQlyZWZlcmVuY2UFCWxhc3RCbG9jawUEdW5pdAkAAgEJAKwCAgkArAICCQCsAgICMEV4cGVjdGVkIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGFpbiBsYXN0IGJsb2NrOiAweAUJbGFzdEJsb2NrAgkuIEdvdDogMHgFCXJlZmVyZW5jZQEPY2hhaW5Jc0luYWN0aXZlAQdjaGFpbklkBAxmaXJzdEJsb2NrSWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARRjaGFpbkZpcnN0QmxvY2tJZEtleQEFB2NoYWluSWQEFGZpcnN0VmFsaWRBbHRDaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFF2ZpcnN0VmFsaWRBbHRDaGFpbklkS2V5AAADCQBmAgUUZmlyc3RWYWxpZEFsdENoYWluSWQFB2NoYWluSWQGCQBmAggJAQlibG9ja01ldGEBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRFmaW5hbGl6ZWRCbG9ja0tleQJfMQgJAQlibG9ja01ldGEBBQxmaXJzdEJsb2NrSWQCXzEBDG1pbmVyQ2hhaW5JZAEFbWluZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBD21pbmVyQ2hhaW5JZEtleQEFBW1pbmVyCQCfCAEJAKwCAgIJY2hhaW5JZE9mCQClCAEFBW1pbmVyAR1lbnN1cmVFeHBlY3RlZE9ySW5hY3RpdmVDaGFpbgMJZ2VuZXJhdG9yD2V4cGVjdGVkQ2hhaW5JZBBjaGVja0hlaWdodEJsb2NrBA9oZWlnaHRJc0NvcnJlY3QEByRtYXRjaDAFEGNoZWNrSGVpZ2h0QmxvY2sDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAlibG9ja0hhc2gFByRtYXRjaDAEFGxhc3RNaW5lZEJsb2NrSGVpZ2h0CQEMbGFzdEhlaWdodEJ5AgUJZ2VuZXJhdG9yBQttYWluQ2hhaW5JZAkAZgIJAGQCCAkBCWJsb2NrTWV0YQEFCWJsb2NrSGFzaAJfMQABBRRsYXN0TWluZWRCbG9ja0hlaWdodAYEByRtYXRjaDAJAQxtaW5lckNoYWluSWQBBQlnZW5lcmF0b3IDCQABAgUHJG1hdGNoMAIDSW50BAljdXJyZW50SWQFByRtYXRjaDADAwkAAAIFCWN1cnJlbnRJZAUPZXhwZWN0ZWRDaGFpbklkBgMJAQ9jaGFpbklzSW5hY3RpdmUBBQljdXJyZW50SWQFD2hlaWdodElzQ29ycmVjdAcFBHVuaXQJAAIBCQCsAgICHG1pbmVyIGlzIG1pbmluZyBvdGhlciBjaGFpbiAJAKQDAQUJY3VycmVudElkBQR1bml0AAxoZWlnaHRTdHJpbmcJAKwCAgILIGF0IGhlaWdodCAJAKQDAQUGaGVpZ2h0AQV2cmZBdAEGaGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAO0HAQUGaGVpZ2h0CQCsAgICG2xhc3QgYmxvY2sgaXMgbm90IGF2YWlsYWJsZQUMaGVpZ2h0U3RyaW5nA3ZyZgkArAICAhRWUkYgaXMgbm90IGF2YWlsYWJsZQUMaGVpZ2h0U3RyaW5nARJlbnN1cmVDb3JyZWN0RXBvY2gBC2V4cGVjdGVkVlJGBAlhY3R1YWxWUkYJAQV2cmZBdAEFBmhlaWdodAMJAAACBQtleHBlY3RlZFZSRgUJYWN0dWFsVlJGBQR1bml0CQACAQkArAICCQCsAgIJAKwCAgkArAICAg1FeHBlY3RlZCBWUkYgCQDYBAEFC2V4cGVjdGVkVlJGAhcgZG9lcyBub3QgbWF0Y2ggYWN0dWFsIAkA2AQBBQlhY3R1YWxWUkYFDGhlaWdodFN0cmluZwEMYWRkU3VwcG9ydGVyAgdjaGFpbklkCWdlbmVyYXRvcgQNc3VwcG9ydGVyc1N0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBDXN1cHBvcnRlcnNLZXkBBQdjaGFpbklkBApzdXBwb3J0ZXJzCQC8CQIFDXN1cHBvcnRlcnNTdHIFA1NFUAMJAQ9jb250YWluc0VsZW1lbnQCBQpzdXBwb3J0ZXJzCQClCAEFCWdlbmVyYXRvcgUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAkArAICCQCsAgIFDXN1cHBvcnRlcnNTdHIFA1NFUAkApQgBBQlnZW5lcmF0b3IFA25pbAEJc2V0T3JGYWlsAgVmbGFncwVpbmRleAMJAGYCAAAFBWluZGV4CQACAQkArAICAiJDYW4ndCB3aXRoZHJhdyBhdCBuZWdhdGl2ZSBpbmRleDogCQCkAwEFBWluZGV4BAlmbGFnc1NpemUJALECAQUFZmxhZ3MDCQBnAgUFaW5kZXgFCWZsYWdzU2l6ZQQJYWRkWmVyb2VzCQBlAgUFaW5kZXgFCWZsYWdzU2l6ZQMJAGYCBQlhZGRaZXJvZXMJALECAQUJemVyb2VzU3RyCQACAQkArAICCQCsAgICCkNhbid0IGFkZCAJAKQDAQUJYWRkWmVyb2VzAiUgZW1wdHkgZmxhZ3MuIENvbnRhY3Qgd2l0aCBkZXZlbG9wZXJzCQCsAgIJAKwCAgUFZmxhZ3MJAK8CAgUJemVyb2VzU3RyBQlhZGRaZXJvZXMCATEEBHRhaWwJALACAgUFZmxhZ3MFBWluZGV4BAdhdEluZGV4CQCvAgIFBHRhaWwAAQMJAAACBQdhdEluZGV4AgEwCQCsAgIJAKwCAgkArwICBQVmbGFncwUFaW5kZXgCATEJALACAgUEdGFpbAABCQACAQkArAICCQCsAgICClRyYW5zZmVyICMJAKQDAQUFaW5kZXgCFyBoYXMgYmVlbiBhbHJlYWR5IHRha2VuARF2YWxpZGF0ZUJsb2NrSGFzaAEGaGV4U3RyBAxkZWNvZGVkQnl0ZXMJAN0EAQUGaGV4U3RyAwkBAiE9AgkAyAEBBQxkZWNvZGVkQnl0ZXMFD0JMT0NLX0hBU0hfU0laRQkAAgECF2ludmFsaWQgYmxvY2sgaWQgbGVuZ3RoBQZoZXhTdHIBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwZjYWxsZXIPbmV3QmxvY2tIYXNoSGV4CXByZXZFcG9jaAQVY3VyRmluYWxpemVkQmxvY2tNZXRhCQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkEDSR0MDE0MjczMTQzOTMJASNjYWxjdWxhdGVGaW5hbGl6ZWRCbG9ja0hhc2hBbmRFcG9jaAMFBmNhbGxlcgUJcHJldkVwb2NoBQ9uZXdCbG9ja0hhc2hIZXgEFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAgFDSR0MDE0MjczMTQzOTMCXzEEEW5ld0ZpbmFsaXplZEVwb2NoCAUNJHQwMTQyNzMxNDM5MwJfMgQNcmV3YXJkQWN0aW9ucwQHJG1hdGNoMAkAoggBBQ1kYW9BZGRyZXNzS2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQEYWRkcgUHJG1hdGNoMAMJAAACBRFuZXdGaW5hbGl6ZWRFcG9jaAgFFWN1ckZpbmFsaXplZEJsb2NrTWV0YQJfMgUDbmlsCgETY291bnROb25FbXB0eUVwb2NocwIDYWNjBG5leHQDCQAAAggFA2FjYwJfMQgFFWN1ckZpbmFsaXplZEJsb2NrTWV0YQJfMgUDYWNjBAckbWF0Y2gxCQEJZXBvY2hNZXRhAQgFA2FjYwJfMQMJAAECBQckbWF0Y2gxAhYoQWRkcmVzcywgSW50LCBTdHJpbmcpBAFtBQckbWF0Y2gxCQCUCgIIBQFtAl8yCQBkAggFA2FjYwJfMgABBQNhY2MEDnN0YXJ0RnJvbUVwb2NoAwkAAAIFEW5ld0ZpbmFsaXplZEVwb2NoBQZoZWlnaHQFCXByZXZFcG9jaAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBCWVwb2NoTWV0YQEFEW5ld0ZpbmFsaXplZEVwb2NoAhdubyBwcmV2IGVwb2NoIGZvciBzdGFydAJfMgQKZGFvUmV3YXJkcwoAAiRsBQtvZmZzZXRzXzEwMAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUOc3RhcnRGcm9tRXBvY2gAAQoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETY291bnROb25FbXB0eUVwb2NocwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQEDXJlaXNzdWVBbW91bnQJAGgCCAUKZGFvUmV3YXJkcwJfMgkBEUBleHRyTmF0aXZlKDEwNTUpAQUMZGFvUmV3YXJkS2V5BAd0b2tlbklkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFCnRva2VuSWRLZXkJAMwIAgkBB1JlaXNzdWUDBQd0b2tlbklkBQ1yZWlzc3VlQW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUEYWRkcgUNcmVpc3N1ZUFtb3VudAUHdG9rZW5JZAUDbmlsBQNuaWwJAM4IAgUNcmV3YXJkQWN0aW9ucwMDCQAAAgUVbmV3RmluYWxpemVkQmxvY2tIYXNoBQ9uZXdCbG9ja0hhc2hIZXgGCQBmAggJAQlibG9ja01ldGEBBRVuZXdGaW5hbGl6ZWRCbG9ja0hhc2gCXzEIBRVjdXJGaW5hbGl6ZWRCbG9ja01ldGECXzEJAMwIAgkBC1N0cmluZ0VudHJ5AgURZmluYWxpemVkQmxvY2tLZXkFFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAUDbmlsBQNuaWwJAWkBD2V4dGVuZE1haW5DaGFpbgUMYmxvY2tIYXNoSGV4DHJlZmVyZW5jZUhleAN2cmYXZTJjVHJhbnNmZXJzUm9vdEhhc2hIZXgUbGFzdEMyRVRyYW5zZmVySW5kZXgEDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUDdnJmAwkAAAIFCmNoZWNrRXBvY2gFCmNoZWNrRXBvY2gECmNoZWNrQ2hhaW4JAR1lbnN1cmVFeHBlY3RlZE9ySW5hY3RpdmVDaGFpbgMIBQFpDG9yaWdpbkNhbGxlcgULbWFpbkNoYWluSWQFBHVuaXQDCQAAAgUKY2hlY2tDaGFpbgUKY2hlY2tDaGFpbgQOY2hlY2tSZWZlcmVuY2UJARJpc1JlZmVyZW5jZUNvcnJlY3QCBQxyZWZlcmVuY2VIZXgFEm1haW5DaGFpbkxhc3RCbG9jawMJAAACBQ5jaGVja1JlZmVyZW5jZQUOY2hlY2tSZWZlcmVuY2UEDmNoZWNrVHJhbnNmZXJzCQEWZW5zdXJlQ29ycmVjdFRyYW5zZmVycwMICQEJYmxvY2tNZXRhAQUMcmVmZXJlbmNlSGV4Al82BRRsYXN0QzJFVHJhbnNmZXJJbmRleAYDCQAAAgUOY2hlY2tUcmFuc2ZlcnMFDmNoZWNrVHJhbnNmZXJzBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQ5tYWluQ2hhaW5FcG9jaAUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkAwkAAAIFDXRoaXNFcG9jaE1ldGEFDXRoaXNFcG9jaE1ldGEEDmNoZWNrR2VuZXJhdG9yCQERZW5zdXJlTWluaW5nRXBvY2gBCAUBaQxvcmlnaW5DYWxsZXIDCQAAAgUOY2hlY2tHZW5lcmF0b3IFDmNoZWNrR2VuZXJhdG9yBBR1cGRhdGVGaW5hbGl6ZWRCbG9jawkBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwgFAWkMb3JpZ2luQ2FsbGVyBQxibG9ja0hhc2hIZXgFDm1haW5DaGFpbkVwb2NoBA5uZXdDaGFpbkhlaWdodAkAZAIFD21haW5DaGFpbkhlaWdodAABCQDOCAIJAMwIAgkBEG1rQmxvY2tNZXRhRW50cnkGBQxibG9ja0hhc2hIZXgFDm5ld0NoYWluSGVpZ2h0BRJtYWluQ2hhaW5MYXN0QmxvY2sFC21haW5DaGFpbklkBRdlMmNUcmFuc2ZlcnNSb290SGFzaEhleAUUbGFzdEMyRVRyYW5zZmVySW5kZXgJAMwIAgkBEG1rQ2hhaW5NZXRhRW50cnkDBQttYWluQ2hhaW5JZAUObmV3Q2hhaW5IZWlnaHQFDGJsb2NrSGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD21pbmVyQ2hhaW5JZEtleQEIBQFpDG9yaWdpbkNhbGxlcgULbWFpbkNoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQttYWluQ2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAkAzAgCBQ10aGlzRXBvY2hNZXRhBQNuaWwFFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXN0YXJ0QWx0Q2hhaW4FDGJsb2NrSGFzaEhleAxyZWZlcmVuY2VIZXgDdnJmF2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4FGxhc3RDMkVUcmFuc2ZlckluZGV4BA5jaGVja0Jsb2NrSGFzaAkBEXZhbGlkYXRlQmxvY2tIYXNoAQUMYmxvY2tIYXNoSGV4AwkAAAIFDmNoZWNrQmxvY2tIYXNoBQ5jaGVja0Jsb2NrSGFzaAQKY2hlY2tFcG9jaAkBEmVuc3VyZUNvcnJlY3RFcG9jaAEFA3ZyZgMJAAACBQpjaGVja0Vwb2NoBQpjaGVja0Vwb2NoBA0kdDAxNzI5MDE3NDAzCQEJYmxvY2tNZXRhAQUMcmVmZXJlbmNlSGV4BA5yZWZDaGFpbkhlaWdodAgFDSR0MDE3MjkwMTc0MDMCXzEECHJlZkVwb2NoCAUNJHQwMTcyOTAxNzQwMwJfMgQLcmVmSWdub3JlZDEIBQ0kdDAxNzI5MDE3NDAzAl8zBAtyZWZJZ25vcmVkMggFDSR0MDE3MjkwMTc0MDMCXzQEC3JlZklnbm9yZWQzCAUNJHQwMTcyOTAxNzQwMwJfNQQQcmVmVHJhbnNmZXJJbmRleAgFDSR0MDE3MjkwMTc0MDMCXzYEDmZpbmFsaXplZEVwb2NoCAkBCWJsb2NrTWV0YQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEWZpbmFsaXplZEJsb2NrS2V5Al8yBAhlcG9jaFJlZgMJAGcCBQhyZWZFcG9jaAUOZmluYWxpemVkRXBvY2gFCHJlZkVwb2NoCQACAQkArAICCQCsAgIJAKwCAgkArAICAiNDYW4gbm90IHN0YXJ0IGFsdCBjaGFpbiBmcm9tIGVwb2NoIAkApAMBBQhyZWZFcG9jaAIILCBlcG9jaCAJAKQDAQUOZmluYWxpemVkRXBvY2gCDSBpcyBmaW5hbGl6ZWQECmNoZWNrQ2hhaW4JAR1lbnN1cmVFeHBlY3RlZE9ySW5hY3RpdmVDaGFpbgMIBQFpDG9yaWdpbkNhbGxlcgULbWFpbkNoYWluSWQFDHJlZmVyZW5jZUhleAMJAAACBQpjaGVja0NoYWluBQpjaGVja0NoYWluBA5jaGVja1RyYW5zZmVycwkBFmVuc3VyZUNvcnJlY3RUcmFuc2ZlcnMDBRByZWZUcmFuc2ZlckluZGV4BRRsYXN0QzJFVHJhbnNmZXJJbmRleAYDCQAAAgUOY2hlY2tUcmFuc2ZlcnMFDmNoZWNrVHJhbnNmZXJzBApuZXdDaGFpbklkCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5sYXN0Q2hhaW5JZEtleQAAAAEEDm5ld0NoYWluSGVpZ2h0CQBkAgUOcmVmQ2hhaW5IZWlnaHQAAQQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUIZXBvY2hSZWYFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IJAMwIAgUNdGhpc0Vwb2NoTWV0YQkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFDGJsb2NrSGFzaEhleAUObmV3Q2hhaW5IZWlnaHQFDHJlZmVyZW5jZUhleAUKbmV3Q2hhaW5JZAUXZTJjVHJhbnNmZXJzUm9vdEhhc2hIZXgFFGxhc3RDMkVUcmFuc2ZlckluZGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJARRjaGFpbkZpcnN0QmxvY2tJZEtleQEFCm5ld0NoYWluSWQFDGJsb2NrSGFzaEhleAkAzAgCCQEQbWtDaGFpbk1ldGFFbnRyeQMFCm5ld0NoYWluSWQFDm5ld0NoYWluSGVpZ2h0BQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFCm5ld0NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQpuZXdDaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDXN1cHBvcnRlcnNLZXkBBQpuZXdDaGFpbklkCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUObGFzdENoYWluSWRLZXkFCm5ld0NoYWluSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5leHRlbmRBbHRDaGFpbgYMYmxvY2tIYXNoSGV4DHJlZmVyZW5jZUhleAN2cmYHY2hhaW5JZBdlMmNUcmFuc2ZlcnNSb290SGFzaEhleBRsYXN0QzJFVHJhbnNmZXJJbmRleAQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gECmNoZWNrRXBvY2gJARJlbnN1cmVDb3JyZWN0RXBvY2gBBQN2cmYDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQTY2hhaW5GaXJzdEJsb2NrTWV0YQkBCWJsb2NrTWV0YQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARRjaGFpbkZpcnN0QmxvY2tJZEtleQEFB2NoYWluSWQECmNoZWNrQ2hhaW4JAR1lbnN1cmVFeHBlY3RlZE9ySW5hY3RpdmVDaGFpbgMIBQFpDG9yaWdpbkNhbGxlcgUHY2hhaW5JZAkA3AQBCAUTY2hhaW5GaXJzdEJsb2NrTWV0YQJfMwMJAAACBQpjaGVja0NoYWluBQpjaGVja0NoYWluBA0kdDAxOTcxNjE5NzcwCQEJY2hhaW5NZXRhAQUHY2hhaW5JZAQLY2hhaW5IZWlnaHQIBQ0kdDAxOTcxNjE5NzcwAl8xBA5jaGFpbkxhc3RCbG9jawgFDSR0MDE5NzE2MTk3NzACXzIEDmNoZWNrUmVmZXJlbmNlCQESaXNSZWZlcmVuY2VDb3JyZWN0AgUMcmVmZXJlbmNlSGV4BQ5jaGFpbkxhc3RCbG9jawMJAAACBQ5jaGVja1JlZmVyZW5jZQUOY2hlY2tSZWZlcmVuY2UEDmNoZWNrVHJhbnNmZXJzCQEWZW5zdXJlQ29ycmVjdFRyYW5zZmVycwMICQEJYmxvY2tNZXRhAQUMcmVmZXJlbmNlSGV4Al82BRRsYXN0QzJFVHJhbnNmZXJJbmRleAYDCQAAAgUOY2hlY2tUcmFuc2ZlcnMFDmNoZWNrVHJhbnNmZXJzBA5uZXdDaGFpbkhlaWdodAkAZAIFC2NoYWluSGVpZ2h0AAEECXByZXZFcG9jaAgJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgCXzIEE3VwZGF0ZU1haW5DaGFpbkRhdGEDCQBmAgkBEXN1cHBvcnRpbmdCYWxhbmNlAQUHY2hhaW5JZAkAaQIFFGNvbXB1dGVkVG90YWxCYWxhbmNlAAIEC2xhc3RDaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAEFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQEdZ2V0VXBkYXRlRmluYWxpemVkQmxvY2tBY3Rpb24DCAUBaQxvcmlnaW5DYWxsZXIFDGJsb2NrSGFzaEhleAUJcHJldkVwb2NoCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRjaGFpbkZvcmtlZEhlaWdodEtleQEFC21haW5DaGFpbklkCAUTY2hhaW5GaXJzdEJsb2NrTWV0YQJfMQkAzAgCCQEMSW50ZWdlckVudHJ5AgUObWFpbkNoYWluSWRLZXkFB2NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFF2ZpcnN0VmFsaWRBbHRDaGFpbklkS2V5CQBkAgULbGFzdENoYWluSWQAAQUDbmlsBRR1cGRhdGVGaW5hbGl6ZWRCbG9jawUDbmlsBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQlwcmV2RXBvY2gFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAMJAAACBQ10aGlzRXBvY2hNZXRhBQ10aGlzRXBvY2hNZXRhBA5jaGVja0dlbmVyYXRvcgkBEWVuc3VyZU1pbmluZ0Vwb2NoAQgFAWkMb3JpZ2luQ2FsbGVyAwkAAAIFDmNoZWNrR2VuZXJhdG9yBQ5jaGVja0dlbmVyYXRvcgQddXBkYXRlTWFpbkNoYWluTGFzdE1pbmVkQmxvY2sDAwkAAAIFE3VwZGF0ZU1haW5DaGFpbkRhdGEFA25pbAkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkBDG1pbmVyQ2hhaW5JZAEIBQFpDG9yaWdpbkNhbGxlcgAABQdjaGFpbklkBwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFC21haW5DaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8xBQNuaWwFA25pbAkAzggCCQDOCAIJAM4IAgkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFDGJsb2NrSGFzaEhleAUObmV3Q2hhaW5IZWlnaHQFDHJlZmVyZW5jZUhleAUHY2hhaW5JZAUXZTJjVHJhbnNmZXJzUm9vdEhhc2hIZXgFFGxhc3RDMkVUcmFuc2ZlckluZGV4CQDMCAIJARBta0NoYWluTWV0YUVudHJ5AwUHY2hhaW5JZAUObmV3Q2hhaW5IZWlnaHQFDGJsb2NrSGFzaEhleAkAzAgCBQ10aGlzRXBvY2hNZXRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPbWluZXJDaGFpbklkS2V5AQgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAUDbmlsBRN1cGRhdGVNYWluQ2hhaW5EYXRhCQEMYWRkU3VwcG9ydGVyAgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBR11cGRhdGVNYWluQ2hhaW5MYXN0TWluZWRCbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQthcHBlbmRCbG9jawQMYmxvY2tIYXNoSGV4DHJlZmVyZW5jZUhleBdlMmNUcmFuc2ZlcnNSb290SGFzaEhleBRsYXN0QzJFVHJhbnNmZXJJbmRleAQLY2hlY2tDYWxsZXIDCQAAAgUOdGhpc0Vwb2NoTWluZXIIBQFpDG9yaWdpbkNhbGxlcgYEByRtYXRjaDAFDnRoaXNFcG9jaE1pbmVyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MECmVwb2NoTWluZXIFByRtYXRjaDAJAAIBCQCsAgICOW5vdCBhbGxvd2VkIHRvIGZvcmdlIGJsb2NrcyBpbiB0aGlzIGVwb2NoLCBleHBlY3RlZCBmcm9tIAkApQgBBQplcG9jaE1pbmVyCQACAQJAbm90IGFsbG93ZWQgdG8gZm9yZ2UgYmxvY2tzIGluIHRoaXMgZXBvY2gsIGVwb2NoIG1pbmVyIGlzIGFic2VudAMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEB2NoYWluSWQJAQt2YWx1ZU9yRWxzZQIJAQxtaW5lckNoYWluSWQBCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBA0kdDAyMjExOTIyMTcwCQEJY2hhaW5NZXRhAQUHY2hhaW5JZAQLY2hhaW5IZWlnaHQIBQ0kdDAyMjExOTIyMTcwAl8xBAtsYXN0QmxvY2tJZAgFDSR0MDIyMTE5MjIxNzACXzIEDmNoZWNrUmVmZXJlbmNlCQESaXNSZWZlcmVuY2VDb3JyZWN0AgUMcmVmZXJlbmNlSGV4BQtsYXN0QmxvY2tJZAMJAAACBQ5jaGVja1JlZmVyZW5jZQUOY2hlY2tSZWZlcmVuY2UEDmNoZWNrVHJhbnNmZXJzCQEWZW5zdXJlQ29ycmVjdFRyYW5zZmVycwMICQEJYmxvY2tNZXRhAQUMcmVmZXJlbmNlSGV4Al82BRRsYXN0QzJFVHJhbnNmZXJJbmRleAcDCQAAAgUOY2hlY2tUcmFuc2ZlcnMFDmNoZWNrVHJhbnNmZXJzBA5uZXdDaGFpbkhlaWdodAkAZAIFC2NoYWluSGVpZ2h0AAEEDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoCQDMCAIJARBta0Jsb2NrTWV0YUVudHJ5BgUMYmxvY2tIYXNoSGV4BQ5uZXdDaGFpbkhlaWdodAULbGFzdEJsb2NrSWQFB2NoYWluSWQFF2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4BRRsYXN0QzJFVHJhbnNmZXJJbmRleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFB2NoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBEG1rQ2hhaW5NZXRhRW50cnkDBQdjaGFpbklkBQ5uZXdDaGFpbkhlaWdodAUMYmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCQEFdmFsdWUBBQ50aGlzRXBvY2hNaW5lcgUDU0VQCQCkAwEFDHRoaXNFcG9jaFJlZgUDU0VQBQxibG9ja0hhc2hIZXgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRqb2luARByZXdhcmRBZGRyZXNzSGV4CgEdZW5zdXJlTm90T3ZlcnJpZGVPdGhlck1pbmVyUGsBDGVsQWRkcmVzc0hleAQHJG1hdGNoMAkAoQgBCQEKbWluZXJQa0tleQEFDGVsQWRkcmVzc0hleAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACBQJwawgFAWkVb3JpZ2luQ2FsbGVyUHVibGljS2V5BQR1bml0CQACAQkArAICCQCsAgIJAKwCAgIRRUwgbWluZXIgYWRkcmVzcyAFDGVsQWRkcmVzc0hleAIYIGlzIGFscmVhZHkgbGlua2VkIHdpdGggCQDYBAEFAnBrBQR1bml0BAVwYXJ0cwkAtQkCBRByZXdhcmRBZGRyZXNzSGV4AgIweAQNcmV3YXJkQWRkcmVzcwkA3QQBCQCRAwIFBXBhcnRzCQBlAgkAkAMBBQVwYXJ0cwABAwkBASEBCQEPaXNDb250cmFjdFNldHVwAAkAAgECH1RoZSBjb250cmFjdCBoYXMgbm90IHlldCBzZXQgdXADCQBmAgULTUlOX0JBTEFOQ0UICQDvBwEIBQFpDG9yaWdpbkNhbGxlcgpnZW5lcmF0aW5nCQACAQkArAICCQCsAgIJAKwCAgIhSW5zdWZmaWNpZW50IGdlbmVyYXRpbmcgYmFsYW5jZTogCQCkAwEICQDvBwEIBQFpDG9yaWdpbkNhbGxlcgpnZW5lcmF0aW5nAgwuIFJlcXVpcmVkOiAJAKQDAQULTUlOX0JBTEFOQ0UDCQECIT0CCQDIAQEFDXJld2FyZEFkZHJlc3MAFAkAAgECJXJld2FyZEFkZHJlc3Mgc2hvdWxkIGJlIGFuIEwyIGFkZHJlc3MDCQBnAgkAkAMBBQlhbGxNaW5lcnMAMgkAAgECD3RvbyBtYW55IG1pbmVycwoBDmNoZWNrRXhpc3RlbmNlAgZleGlzdHMFbWluZXIDBQZleGlzdHMGCQAAAgUFbWluZXIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBA1hbHJlYWR5RXhpc3RzCgACJGwFCWFsbE1pbmVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5jaGVja0V4aXN0ZW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAwUNYWxyZWFkeUV4aXN0cwUDbmlsBAhuZXdNaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEFmxvd2VyY2FzZVJld2FyZEFkZHJlc3MJANwEAQUNcmV3YXJkQWRkcmVzcwQFY2hlY2sJAR1lbnN1cmVOb3RPdmVycmlkZU90aGVyTWluZXJQawEFFmxvd2VyY2FzZVJld2FyZEFkZHJlc3MDCQAAAgUFY2hlY2sFBWNoZWNrBAluZXdNaW5lcnMDCQAAAgkAkAMBBQlhbGxNaW5lcnMAAAUIbmV3TWluZXIJAKwCAgkArAICBQxhbGxNaW5lcnNTdHIFA1NFUAUIbmV3TWluZXIEGWRlbGV0ZVByZXZSZXdhcmRBZGRyZXNzUGsEByRtYXRjaDAJAKIIAQkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFCG5ld01pbmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQLcHJldkFkZHJlc3MFByRtYXRjaDADCQAAAgULcHJldkFkZHJlc3MJANwEAQUNcmV3YXJkQWRkcmVzcwUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEJAQptaW5lclBrS2V5AQULcHJldkFkZHJlc3MFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMYWxsTWluZXJzS2V5BQluZXdNaW5lcnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFCG5ld01pbmVyCQCsAgICAjB4BRZsb3dlcmNhc2VSZXdhcmRBZGRyZXNzCQDMCAIJAQtCaW5hcnlFbnRyeQIJAQptaW5lclBrS2V5AQUWbG93ZXJjYXNlUmV3YXJkQWRkcmVzcwgFAWkVb3JpZ2luQ2FsbGVyUHVibGljS2V5BQNuaWwFGWRlbGV0ZVByZXZSZXdhcmRBZGRyZXNzUGsJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFbGVhdmUABAxsZWF2aW5nTWluZXIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCgEQc2tpcExlYXZpbmdNaW5lcgIDYWNjBW1pbmVyAwkAAAIFBW1pbmVyBQxsZWF2aW5nTWluZXIFA2FjYwkAzQgCBQNhY2MFBW1pbmVyBA9yZW1haW5pbmdNaW5lcnMKAAIkbAUJYWxsTWluZXJzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARBza2lwTGVhdmluZ01pbmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIEDXJld2FyZEFkZHJLZXkJARVtaW5lclJld2FyZEFkZHJlc3NLZXkBBQxsZWF2aW5nTWluZXIEEXByZXZSZXdhcmRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUNcmV3YXJkQWRkcktleQIWbWluZXIgaGFzIG5ldmVyIGpvaW5lZAMJAAACBRFwcmV2UmV3YXJkQWRkcmVzcwURcHJldlJld2FyZEFkZHJlc3MDCQAAAgUOdGhpc0Vwb2NoTWluZXIIBQFpDG9yaWdpbkNhbGxlcgkAAgECHGRlc2lnbmF0ZWQgbWluZXIgY2FuJ3QgbGVhdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgUMYWxsTWluZXJzS2V5CQC6CQIFD3JlbWFpbmluZ01pbmVycwUDU0VQBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIdHJhbnNmZXIBEGRlc3RFbEFkZHJlc3NIZXgEDGNoZWNrQWRkcmVzcwMJAAACCQCxAgEFEGRlc3RFbEFkZHJlc3NIZXgFFEVUSF9BRERSRVNTX1NUUl9TSVpFCQDdBAEFEGRlc3RFbEFkZHJlc3NIZXgJAAIBCQCsAgIJAKwCAgkArAICAhRBZGRyZXNzIHNob3VsZCBoYXZlIAkApAMBBRRFVEhfQUREUkVTU19TVFJfU0laRQIRIGNoYXJhY3RlcnMsIGdvdCAJAKQDAQkAsQIBBRBkZXN0RWxBZGRyZXNzSGV4AwkAAAIFDGNoZWNrQWRkcmVzcwUMY2hlY2tBZGRyZXNzBAxjaGVja1BheW1lbnQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkAAgEJAKwCAgIvRXhwZWN0ZWQgb25lIHBheW1lbnQgYXMgYSB0cmFuc2ZlciBhbW91bnQsIGdvdCAJAKQDAQkAkAMBCAUBaQhwYXltZW50cwMJAAACBQxjaGVja1BheW1lbnQFDGNoZWNrUGF5bWVudAQKdG9rZW5JZFN0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQUKdG9rZW5JZEtleQQHdG9rZW5JZAkA2QQBBQp0b2tlbklkU3RyBAF0CQCRAwIIBQFpCHBheW1lbnRzAAAEDGNoZWNrQXNzZXRJZAQHJG1hdGNoMAgFAXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAdhc3NldElkBQckbWF0Y2gwAwkAAAIFB2Fzc2V0SWQFB3Rva2VuSWQGCQACAQkArAICCQCsAgIJAKwCAgIJRXhwZWN0ZWQgBQp0b2tlbklkU3RyAhUgaW4gdGhlIHBheW1lbnQsIGdvdCAJANgEAQUHYXNzZXRJZAkAAgEJAKwCAgkArAICAglFeHBlY3RlZCAFCnRva2VuSWRTdHICGiBpbiB0aGUgcGF5bWVudCwgZ290IFdhdmVzAwkAAAIFDGNoZWNrQXNzZXRJZAUMY2hlY2tBc3NldElkBAlsYXN0SW5kZXgICQEJYmxvY2tNZXRhAQUSbWFpbkNoYWluTGFzdEJsb2NrAl82BAlxdWV1ZVNpemUJAGUCBRRuYXRpdmVUcmFuc2ZlcnNDb3VudAUJbGFzdEluZGV4BA9jaGVja1F1ZXVlTGltaXQDCQBmAgCgAQUJcXVldWVTaXplCQEKYW1vdW50R3RFcQMFAXQAwIQ9BQlxdWV1ZVNpemUDCQBmAgDADAUJcXVldWVTaXplCQEKYW1vdW50R3RFcQMFAXQAgK3iBAUJcXVldWVTaXplAwkAZgIAgBkFCXF1ZXVlU2l6ZQkBCmFtb3VudEd0RXEDBQF0AIDC1y8FCXF1ZXVlU2l6ZQMJAGYCAIAyBQlxdWV1ZVNpemUJAQphbW91bnRHdEVxAwUBdACAlOvcAwUJcXVldWVTaXplCQACAQkArAICCQCsAgICI1RyYW5zZmVycyBkZW5pZWQgZm9yIHF1ZXVlIHNpemUgb2YgCQCkAwEFCXF1ZXVlU2l6ZQIoLiBXYWl0IHVudGlsIGN1cnJlbnQgdHJhbnNmZXJzIHByb2Nlc3NlZAMJAAACBQ9jaGVja1F1ZXVlTGltaXQFD2NoZWNrUXVldWVMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXbmF0aXZlVHJhbnNmZXJzQ291bnRLZXkJAGQCBRRuYXRpdmVUcmFuc2ZlcnNDb3VudAABCQDMCAIJARVta05hdGl2ZVRyYW5zZmVyRW50cnkDBRRuYXRpdmVUcmFuc2ZlcnNDb3VudAUQZGVzdEVsQWRkcmVzc0hleAgFAXQGYW1vdW50CQDMCAIJAQRCdXJuAgUHdG9rZW5JZAgFAXQGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcEDGJsb2NrSGFzaEhleAttZXJrbGVQcm9vZhR0cmFuc2ZlckluZGV4SW5CbG9jawZhbW91bnQEEXdpdGhkcmF3QmxvY2tNZXRhCQEJYmxvY2tNZXRhAQUMYmxvY2tIYXNoSGV4BBN3aXRoZHJhd0Jsb2NrSGVpZ2h0CAURd2l0aGRyYXdCbG9ja01ldGECXzEEFGZpbmFsaXplZEJsb2NrSGVpZ2h0CAkBCWJsb2NrTWV0YQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEWZpbmFsaXplZEJsb2NrS2V5Al8xBBhtYWluQ2hhaW5MYXN0QmxvY2tIZWlnaHQICQEJYmxvY2tNZXRhAQUSbWFpbkNoYWluTGFzdEJsb2NrAl8xAwkAZgIFE3dpdGhkcmF3QmxvY2tIZWlnaHQFFGZpbmFsaXplZEJsb2NrSGVpZ2h0CQACAQkArAICCQCsAgIJAKwCAgIKRUwgYmxvY2sgIwkApAMBBRN3aXRoZHJhd0Jsb2NrSGVpZ2h0Ai0gaXMgbm90IGZpbmFsaXplZC4gVGhlIGN1cnJlbnQgZmluYWxpemVkIGlzICMJAKQDAQUUZmluYWxpemVkQmxvY2tIZWlnaHQDCQECIT0CCQCQAwEFC21lcmtsZVByb29mBRRXSVRIRFJBV19QUk9PRlNfU0laRQkAAgEJAKwCAgkArAICCQCsAgICCUV4cGVjdGVkIAkApAMBBRRXSVRIRFJBV19QUk9PRlNfU0laRQINIHByb29mcywgZ290IAkApAMBCQCQAwEFC21lcmtsZVByb29mAwkAZgIAAAUUdHJhbnNmZXJJbmRleEluQmxvY2sJAAIBCQCsAgICM1RyYW5zZmVyIGluZGV4IGluIGJsb2NrIHNob3VsZCBiZSBub25uZWdhdGl2ZSwgZ290IAkApAMBBRR0cmFuc2ZlckluZGV4SW5CbG9jawMJAGcCAAAFBmFtb3VudAkAAgEJAKwCAgIfQW1vdW50IHNob3VsZCBiZSBwb3NpdGl2ZSwgZ290IAkApAMBBQZhbW91bnQEFHdpdGhkcmF3QmxvY2tDaGFpbklkCAURd2l0aGRyYXdCbG9ja01ldGECXzQEC2lzTWFpbkNoYWluCQAAAgUUd2l0aGRyYXdCbG9ja0NoYWluSWQFC21haW5DaGFpbklkBBJyZWxhdGVzVG9NYWluQ2hhaW4EByRtYXRjaDAJAJ8IAQkBFGNoYWluRm9ya2VkSGVpZ2h0S2V5AQUUd2l0aGRyYXdCbG9ja0NoYWluSWQDCQABAgUHJG1hdGNoMAIDSW50BAxmb3JrZWRIZWlnaHQFByRtYXRjaDAJAGYCBQxmb3JrZWRIZWlnaHQFE3dpdGhkcmF3QmxvY2tIZWlnaHQJAAIBCQCsAgIJAKwCAgkArAICBQxibG9ja0hhc2hIZXgCHSBpcyBvbiBhbiBhbHRlcm5hdGl2ZSBjaGFpbiAjCQCkAwEFFHdpdGhkcmF3QmxvY2tDaGFpbklkAjggdGhhdCB3YXMgbm90IGFwcHJvdmVkIGJ5IG1ham9yaXR5LiBXYWl0IGZvciBzb21lIGJsb2NrcwMDBQtpc01haW5DaGFpbgYFEnJlbGF0ZXNUb01haW5DaGFpbgQJcmVjaXBpZW50CAUBaQxvcmlnaW5DYWxsZXIED3JlY2lwaWVudFBrSGFzaAkAyQECCQDKAQIIBQlyZWNpcGllbnQFYnl0ZXMAAgUUUFVCTElDX0tFWV9IQVNIX1NJWkUED3plcm9BbW91bnRCeXRlcwEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2Ftb3VudEJ5dGVzCQCaAwEFBmFtb3VudAQLZWxFdmVudERhdGEJAMsBAgkAywECBQ9yZWNpcGllbnRQa0hhc2gJAMkBAgUPemVyb0Ftb3VudEJ5dGVzCQBlAgkAyAEBBQ96ZXJvQW1vdW50Qnl0ZXMJAMgBAQULYW1vdW50Qnl0ZXMFC2Ftb3VudEJ5dGVzBBFlbEV2ZW50RGF0YURpZ2VzdAkA8BUBBQtlbEV2ZW50RGF0YQQSY2FsY3VsYXRlZFJvb3RIYXNoCQC9BQMFC21lcmtsZVByb29mBRFlbEV2ZW50RGF0YURpZ2VzdAUUdHJhbnNmZXJJbmRleEluQmxvY2sEEGV4cGVjdGVkUm9vdEhhc2gIBRF3aXRoZHJhd0Jsb2NrTWV0YQJfNQMJAAACBRJjYWxjdWxhdGVkUm9vdEhhc2gFEGV4cGVjdGVkUm9vdEhhc2gEB3Rva2VuSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUKdG9rZW5JZEtleQQMdHJhbnNmZXJzS2V5CQEUYmxvY2tFMkNUcmFuc2ZlcnNLZXkBBQxibG9ja0hhc2hIZXgJAMwIAgkBB1JlaXNzdWUDBQd0b2tlbklkBQZhbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCXJlY2lwaWVudAUGYW1vdW50BQd0b2tlbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHRyYW5zZmVyc0tleQkBCXNldE9yRmFpbAIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMdHJhbnNmZXJzS2V5AgAFFHRyYW5zZmVySW5kZXhJbkJsb2NrBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhRFeHBlY3RlZCByb290IGhhc2g6IAkA3AQBBRBleHBlY3RlZFJvb3RIYXNoAgcsIGdvdDogCQDcBAEFEmNhbGN1bGF0ZWRSb290SGFzaAIVLiBFdmVudCBkYXRhIGRpZ2VzdDogCQDaBAEFEWVsRXZlbnREYXRhRGlnZXN0Ah8uIENoZWNrIHlvdXIgd2l0aGRyYXcgYXJndW1lbnRzCQACAQkArAICCQCsAgICCUV4cGVjdGVkIAUMYmxvY2tIYXNoSGV4Ai8gdG8gYmUgZWl0aGVyIG9uIHRoZSBtYWluIGNoYWluIG9yIHJlbGF0ZSB0byBpdAFpAQVzZXR1cAQTZ2VuZXNpc0Jsb2NrSGFzaEhleBFtaW5lclJld2FyZEluR3dlaQpkYW9BZGRyZXNzCWRhb1Jld2FyZAMJAQ9pc0NvbnRyYWN0U2V0dXAACQACAQIkVGhlIGNvbnRyYWN0IGhhcyBiZWVuIGFscmVhZHkgc2V0IHVwAwkAZgIAAAURbWluZXJSZXdhcmRJbkd3ZWkJAAIBAiRUaGUgbWluZXIgcmV3YXJkIG11c3QgYmUgbm9ubmVnYXRpdmUEEGdlbmVzaXNCbG9ja0hhc2gJAN0EAQUTZ2VuZXNpc0Jsb2NrSGFzaEhleAQZY2hlY2tHZW5lc2lzQmxvY2tIYXNoU2l6ZQMJAAACCQDIAQEFEGdlbmVzaXNCbG9ja0hhc2gFD0JMT0NLX0hBU0hfU0laRQYJAAIBAhhXcm9uZyBnZW5lc2lzIGJsb2NrIGhhc2gDCQAAAgUZY2hlY2tHZW5lc2lzQmxvY2tIYXNoU2l6ZQUZY2hlY2tHZW5lc2lzQmxvY2tIYXNoU2l6ZQQHZW1wdHlQawEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE2dlbmVzaXNNaW5lckFkZHJlc3MJAKcIAQUHZW1wdHlQawQXZ2VuZXNpc0V0aFJld2FyZEFkZHJlc3MBFAAAAAAAAAAAAAAAAAAAAAAAAAAABBlnZW5lc2lzQmxvY2tSZWZlcmVuY2VIYXNoAkAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBAVpc3N1ZQkAwggFAgVVTklUMAIMTmF0aXZlIHRva2VuAAAACAYEB3Rva2VuSWQJALgIAQUFaXNzdWUEEGdlbmVzaXNCbG9ja01ldGEJARBta0Jsb2NrTWV0YUVudHJ5BgUTZ2VuZXNpc0Jsb2NrSGFzaEhleAAABRlnZW5lc2lzQmxvY2tSZWZlcmVuY2VIYXNoAAAJANwEAQEAAP///////////wEECmRhb0VudHJpZXMDCQAAAgUKZGFvQWRkcmVzcwIABQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUNZGFvQWRkcmVzc0tleQkApQgBCQEHQWRkcmVzcwEJANkEAQUKZGFvQWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUMZGFvUmV3YXJkS2V5AwkAZgIFCWRhb1Jld2FyZAAABQlkYW9SZXdhcmQJAAIBAhlpbnZhbGlkIERBTyByZXdhcmQgYW1vdW50BQNuaWwJAM4IAgkAzAgCBRBnZW5lc2lzQmxvY2tNZXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRjaGFpbkZpcnN0QmxvY2tJZEtleQEAAAUTZ2VuZXNpc0Jsb2NrSGFzaEhleAkAzAgCCQEQbWtDaGFpbk1ldGFFbnRyeQMAAAAABRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5taW5lclJld2FyZEtleQURbWluZXJSZXdhcmRJbkd3ZWkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKUIAQUTZ2VuZXNpc01pbmVyQWRkcmVzcwIDLDAsBRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIFEWZpbmFsaXplZEJsb2NrS2V5BRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCnRva2VuSWRLZXkJANgEAQUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBRJlbEJyaWRnZUFkZHJlc3NLZXkCKjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmE3ZQUDbmlsBQpkYW9FbnRyaWVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAOKF2ww=", "height": 3340644, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 36fQejUN2YzRW7ooET6swSK1pmxdjwxwfafH8YBAXWyc Next: none Diff:
Old | New | Differences | |
---|---|---|---|
23 | 23 | ||
24 | 24 | let k = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
27 | 27 | ||
28 | - | let m = " | |
28 | + | let m = "allMiners" | |
29 | 29 | ||
30 | - | let n = " | |
30 | + | let n = "mainChainId" | |
31 | 31 | ||
32 | - | let o = " | |
32 | + | let o = "lastChainId" | |
33 | 33 | ||
34 | - | let p = " | |
34 | + | let p = "firstValidAltChainId" | |
35 | 35 | ||
36 | - | let q = " | |
36 | + | let q = "minerReward" | |
37 | 37 | ||
38 | - | let r = " | |
38 | + | let r = "block_0x" | |
39 | 39 | ||
40 | - | let s = " | |
40 | + | let s = "finalizedBlock" | |
41 | 41 | ||
42 | - | let t = " | |
42 | + | let t = "tokenId" | |
43 | 43 | ||
44 | - | let u = " | |
44 | + | let u = "elBridgeAddress" | |
45 | 45 | ||
46 | - | func v (w) = { | |
47 | - | let x = toString(w) | |
48 | - | let y = size(x) | |
49 | - | if ((1 == y)) | |
50 | - | then ("0000000" + x) | |
51 | - | else if ((2 == y)) | |
52 | - | then ("000000" + x) | |
53 | - | else if ((3 == y)) | |
54 | - | then ("00000" + x) | |
55 | - | else if ((4 == y)) | |
56 | - | then ("0000" + x) | |
57 | - | else if ((5 == y)) | |
58 | - | then ("000" + x) | |
59 | - | else if ((6 == y)) | |
60 | - | then ("00" + x) | |
61 | - | else if ((7 == y)) | |
62 | - | then ("0" + x) | |
63 | - | else x | |
46 | + | let v = "nativeTransfersCount" | |
47 | + | ||
48 | + | let w = "daoAddress" | |
49 | + | ||
50 | + | let x = "daoReward" | |
51 | + | ||
52 | + | func y (z) = { | |
53 | + | let A = toString(z) | |
54 | + | let B = size(A) | |
55 | + | if ((1 == B)) | |
56 | + | then ("0000000" + A) | |
57 | + | else if ((2 == B)) | |
58 | + | then ("000000" + A) | |
59 | + | else if ((3 == B)) | |
60 | + | then ("00000" + A) | |
61 | + | else if ((4 == B)) | |
62 | + | then ("0000" + A) | |
63 | + | else if ((5 == B)) | |
64 | + | then ("000" + A) | |
65 | + | else if ((6 == B)) | |
66 | + | then ("00" + A) | |
67 | + | else if ((7 == B)) | |
68 | + | then ("0" + A) | |
69 | + | else A | |
64 | 70 | } | |
65 | 71 | ||
66 | 72 | ||
67 | - | func | |
73 | + | func C (D) = ("elToClTransfers_0x" + D) | |
68 | 74 | ||
69 | 75 | ||
70 | - | func | |
76 | + | func E (F) = ("epoch_" + y(F)) | |
71 | 77 | ||
72 | 78 | ||
73 | - | func | |
79 | + | func G (H) = (("chain" + toString(H)) + "FirstBlock") | |
74 | 80 | ||
75 | 81 | ||
76 | - | func | |
82 | + | func I (H) = ("chain_" + y(H)) | |
77 | 83 | ||
78 | 84 | ||
79 | - | func | |
85 | + | func J (H,K) = ((("chain_" + y(H)) + "_") + toString(K)) | |
80 | 86 | ||
81 | 87 | ||
82 | - | func | |
88 | + | func L (H) = (("chain_" + y(H)) + "ForkedHeight") | |
83 | 89 | ||
84 | 90 | ||
85 | - | func | |
91 | + | func M (H) = (("chain" + toString(H)) + "Supporters") | |
86 | 92 | ||
87 | 93 | ||
88 | - | func | |
94 | + | func N (O) = (("miner_" + O) + "_RewardAddress") | |
89 | 95 | ||
90 | 96 | ||
91 | - | func | |
97 | + | func P (Q) = (("miner_0x" + Q) + "_PK") | |
92 | 98 | ||
93 | 99 | ||
94 | - | func | |
100 | + | func R (K) = (("miner_" + toString(K)) + "_ChainId") | |
95 | 101 | ||
96 | 102 | ||
97 | - | let | |
103 | + | let S = valueOrElse(getInteger(this, v), 0) | |
98 | 104 | ||
99 | - | func | |
105 | + | func T (U) = ("nativeTransfer_" + toString(U)) | |
100 | 106 | ||
101 | 107 | ||
102 | - | func | |
108 | + | func V (U,W,X) = StringEntry(T(U), ((("0x" + W) + d) + toString(X))) | |
103 | 109 | ||
104 | 110 | ||
105 | - | func | |
106 | - | let | |
111 | + | func Y (Z,aa,ab) = { | |
112 | + | let ac = if (ab) | |
107 | 113 | then (j - 1) | |
108 | 114 | else j | |
109 | - | let | |
110 | - | let | |
111 | - | then throw(((("Allowed only " + toString( | |
115 | + | let ad = (aa - Z) | |
116 | + | let ae = if ((ad > ac)) | |
117 | + | then throw(((("Allowed only " + toString(ac)) + " transfers, got ") + toString(ad))) | |
112 | 118 | else true | |
113 | - | if (( | |
114 | - | then if (( | |
115 | - | then throw(((("Attempt to transfer #" + toString( | |
119 | + | if ((ae == ae)) | |
120 | + | then if ((aa >= S)) | |
121 | + | then throw(((("Attempt to transfer #" + toString(aa)) + ". Available transfers: ") + toString(S))) | |
116 | 122 | else true | |
117 | 123 | else throw("Strict value is not equal to itself.") | |
118 | 124 | } | |
119 | 125 | ||
120 | 126 | ||
121 | - | func | |
127 | + | func af (ag,ah,ai) = if ((ag.amount >= ah)) | |
122 | 128 | then true | |
123 | - | else throw((((((("Transferring amount " + toString( | |
129 | + | else throw((((((("Transferring amount " + toString(ag.amount)) + " should be >= ") + toString(ah)) + " for queue size of ") + toString(ai)) + ". Transfer more or wait")) | |
124 | 130 | ||
125 | 131 | ||
126 | - | func | |
132 | + | func aj (ak) = wavesBalance(ak).generating | |
127 | 133 | ||
128 | 134 | ||
129 | - | func | |
130 | - | let | |
131 | - | let | |
132 | - | $Tuple2(parseIntValue( | |
135 | + | func al (H) = { | |
136 | + | let A = getStringValue(I(H)) | |
137 | + | let am = split(A, d) | |
138 | + | $Tuple2(parseIntValue(am[0]), am[1]) | |
133 | 139 | } | |
134 | 140 | ||
135 | 141 | ||
136 | - | func | |
142 | + | func an (H,ao,D) = StringEntry(I(H), ((toString(ao) + d) + D)) | |
137 | 143 | ||
138 | 144 | ||
139 | - | let | |
145 | + | let ap = valueOrElse(getInteger(n), 0) | |
140 | 146 | ||
141 | - | let | |
147 | + | let aq = al(ap) | |
142 | 148 | ||
143 | - | let | |
149 | + | let ar = aq._1 | |
144 | 150 | ||
145 | - | let | |
151 | + | let as = aq._2 | |
146 | 152 | ||
147 | - | func | |
148 | - | let | |
149 | - | if ($isInstanceOf( | |
153 | + | func at (F) = { | |
154 | + | let B = getString(E(F)) | |
155 | + | if ($isInstanceOf(B, "String")) | |
150 | 156 | then { | |
151 | - | let | |
152 | - | let | |
153 | - | $Tuple3(addressFromStringValue( | |
157 | + | let A = B | |
158 | + | let au = split(A, d) | |
159 | + | $Tuple3(addressFromStringValue(au[0]), parseIntValue(au[1]), au[2]) | |
154 | 160 | } | |
155 | 161 | else unit | |
156 | 162 | } | |
157 | 163 | ||
158 | 164 | ||
159 | - | let | |
160 | - | let | |
161 | - | if ($isInstanceOf( | |
165 | + | let av = { | |
166 | + | let B = at(height) | |
167 | + | if ($isInstanceOf(B, "(Address, Int, String)")) | |
162 | 168 | then { | |
163 | - | let | |
164 | - | | |
169 | + | let aw = B | |
170 | + | aw | |
165 | 171 | } | |
166 | 172 | else $Tuple2(unit, 0) | |
167 | 173 | } | |
168 | 174 | ||
169 | - | let | |
175 | + | let ax = av._1 | |
170 | 176 | ||
171 | - | let | |
177 | + | let ay = av._2 | |
172 | 178 | ||
173 | - | let | |
179 | + | let az = valueOrElse(getString(m), "") | |
174 | 180 | ||
175 | - | let | |
176 | - | let | |
177 | - | if (("" == | |
181 | + | let aA = { | |
182 | + | let B = az | |
183 | + | if (("" == B)) | |
178 | 184 | then nil | |
179 | - | else if ($isInstanceOf( | |
185 | + | else if ($isInstanceOf(B, "String")) | |
180 | 186 | then { | |
181 | - | let | |
182 | - | split_4C( | |
187 | + | let aB = B | |
188 | + | split_4C(aB, d) | |
183 | 189 | } | |
184 | 190 | else throw("Match error") | |
185 | 191 | } | |
186 | 192 | ||
187 | - | func | |
188 | - | let | |
189 | - | let | |
190 | - | let | |
191 | - | let | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | then take(drop( | |
193 | + | func aC (aD) = { | |
194 | + | let aE = getBinaryValue((r + aD)) | |
195 | + | let aF = size(aE) | |
196 | + | let aG = toInt(aE) | |
197 | + | let aH = toInt(aE, 8) | |
198 | + | let aI = take(drop(aE, 16), e) | |
199 | + | let H = toInt(aE, (16 + e)) | |
200 | + | let aJ = (24 + e) | |
201 | + | let aK = (aF - aJ) | |
202 | + | let aL = if ((aK >= g)) | |
203 | + | then take(drop(aE, aJ), g) | |
198 | 204 | else base58'' | |
199 | - | let | |
205 | + | let aM = if (if ((aK == 8)) | |
200 | 206 | then true | |
201 | - | else ( | |
202 | - | then toInt( | |
207 | + | else (aK > g)) | |
208 | + | then toInt(aE, (aJ + size(aL))) | |
203 | 209 | else -1 | |
204 | - | $Tuple6( | |
210 | + | $Tuple6(aG, aH, aI, H, aL, aM) | |
205 | 211 | } | |
206 | 212 | ||
207 | 213 | ||
208 | - | func | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
214 | + | func aN (D,aG,aO,H,aP,aM) = { | |
215 | + | let aQ = fromBase16String(aP) | |
216 | + | let aR = size(aQ) | |
217 | + | let aS = if (if ((aR == 0)) | |
212 | 218 | then true | |
213 | - | else ( | |
219 | + | else (aR == g)) | |
214 | 220 | then true | |
215 | - | else throw(((("Transfers root hash should have 0 or " + toString(g)) + " bytes, got ") + toString( | |
216 | - | if (( | |
221 | + | else throw(((("Transfers root hash should have 0 or " + toString(g)) + " bytes, got ") + toString(aR))) | |
222 | + | if ((aS == aS)) | |
217 | 223 | then { | |
218 | - | let | |
219 | - | BinaryEntry(( | |
224 | + | let aT = (((((toBytes(aG) + toBytes(height)) + fromBase16String(aO)) + toBytes(H)) + aQ) + toBytes(aM)) | |
225 | + | BinaryEntry((r + D), aT) | |
220 | 226 | } | |
221 | 227 | else throw("Strict value is not equal to itself.") | |
222 | 228 | } | |
223 | 229 | ||
224 | 230 | ||
225 | - | func | |
226 | - | let | |
227 | - | if ($isInstanceOf( | |
231 | + | func aU (K,H) = { | |
232 | + | let B = getInteger(J(H, K)) | |
233 | + | if ($isInstanceOf(B, "Int")) | |
228 | 234 | then { | |
229 | - | let | |
230 | - | | |
235 | + | let aV = B | |
236 | + | aV | |
231 | 237 | } | |
232 | 238 | else { | |
233 | - | let | |
234 | - | | |
239 | + | let aW = getStringValue(((("chain" + toString(H)) + "LastMinedBy") + toString(K))) | |
240 | + | aC(aW)._1 | |
235 | 241 | } | |
236 | 242 | } | |
237 | 243 | ||
238 | 244 | ||
239 | - | let | |
240 | - | let | |
241 | - | let | |
242 | - | if ($isInstanceOf( | |
245 | + | let aX = { | |
246 | + | let aY = { | |
247 | + | let B = lastBlock.vrf | |
248 | + | if ($isInstanceOf(B, "ByteVector")) | |
243 | 249 | then { | |
244 | - | let | |
245 | - | | |
250 | + | let aZ = B | |
251 | + | aZ | |
246 | 252 | } | |
247 | 253 | else lastBlock.generationSignature | |
248 | 254 | } | |
249 | - | func | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | if (if ((c > | |
255 | + | func ba (bb,K) = { | |
256 | + | let bc = bb | |
257 | + | let bd = bc._1 | |
258 | + | let be = bc._2 | |
259 | + | let bf = bc._3 | |
260 | + | let bg = bc._4 | |
261 | + | let bh = addressFromStringValue(K) | |
262 | + | let bi = wavesBalance(bh).generating | |
263 | + | let bj = aj(bh) | |
264 | + | if (if ((c > bi)) | |
259 | 265 | then true | |
260 | - | else (0 >= | |
261 | - | then | |
266 | + | else (0 >= bj)) | |
267 | + | then bb | |
262 | 268 | else { | |
263 | - | let | |
264 | - | if (( | |
265 | - | then $Tuple4( | |
266 | - | else $Tuple4( | |
269 | + | let bk = calculateDelay(bh, bj) | |
270 | + | if ((bf > bk)) | |
271 | + | then $Tuple4(K, (be + bj), bk, (bg :+ K)) | |
272 | + | else $Tuple4(bd, (be + bj), bf, (bg :+ K)) | |
267 | 273 | } | |
268 | 274 | } | |
269 | 275 | ||
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | func | |
274 | - | then | |
275 | - | else | |
276 | + | let bl = aA | |
277 | + | let bm = size(bl) | |
278 | + | let bn = $Tuple4("", 0, a, nil) | |
279 | + | func bo (bp,bq) = if ((bq >= bm)) | |
280 | + | then bp | |
281 | + | else ba(bp, bl[bq]) | |
276 | 282 | ||
277 | - | func | |
278 | - | then | |
283 | + | func br (bp,bq) = if ((bq >= bm)) | |
284 | + | then bp | |
279 | 285 | else throw("List size exceeds 50") | |
280 | 286 | ||
281 | - | bo( | |
287 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
282 | 288 | } | |
283 | 289 | ||
284 | - | let | |
290 | + | let bs = aX._1 | |
285 | 291 | ||
286 | - | let | |
292 | + | let bt = aX._2 | |
287 | 293 | ||
288 | - | let | |
294 | + | let bu = aC(as) | |
289 | 295 | ||
290 | - | let | |
296 | + | let bv = bu._1 | |
291 | 297 | ||
292 | - | let | |
298 | + | let bw = bu._2 | |
293 | 299 | ||
294 | - | func bu (bv,bw,bx) = { | |
295 | - | let by = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
296 | - | let bz = (bq / 2) | |
297 | - | func bA (aY,bB) = { | |
298 | - | let bC = aY | |
299 | - | let bD = bC._1 | |
300 | - | let bE = bC._2 | |
301 | - | let bF = bC._3 | |
302 | - | let bd = bC._4 | |
303 | - | let y = bE | |
304 | - | if ($isInstanceOf(y, "Unit")) | |
300 | + | func bx (by,bz,bA) = { | |
301 | + | let bB = (bt / 2) | |
302 | + | func bC (bb,bD) = { | |
303 | + | let bE = bb | |
304 | + | let bF = bE._1 | |
305 | + | let bG = bE._2 | |
306 | + | let bH = bE._3 | |
307 | + | let bg = bE._4 | |
308 | + | let B = bG | |
309 | + | if ($isInstanceOf(B, "Unit")) | |
305 | 310 | then { | |
306 | - | let | |
307 | - | then $Tuple3( | |
308 | - | else value( | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | if (if (( | |
311 | + | let bI = if ((bF == height)) | |
312 | + | then $Tuple3(by, bz, bA) | |
313 | + | else value(at(bF)) | |
314 | + | let K = bI._1 | |
315 | + | let bJ = bI._2 | |
316 | + | let bK = bI._3 | |
317 | + | if (if ((bJ == 0)) | |
313 | 318 | then true | |
314 | - | else ((height - | |
315 | - | then $Tuple4( | |
319 | + | else ((height - bF) >= 100)) | |
320 | + | then $Tuple4(bF, bK, bH, aA) | |
316 | 321 | else { | |
317 | - | let | |
318 | - | then $Tuple2( | |
319 | - | else $Tuple2(( | |
320 | - | let | |
321 | - | let | |
322 | - | if (( | |
323 | - | then $Tuple4( | |
324 | - | else $Tuple4( | |
322 | + | let bL = if (containsElement(bg, K)) | |
323 | + | then $Tuple2(bH, bg) | |
324 | + | else $Tuple2((bH + aj(K)), K :: bg) | |
325 | + | let bM = bL._1 | |
326 | + | let bN = bL._2 | |
327 | + | if ((bM > bB)) | |
328 | + | then $Tuple4(bF, bK, bM, aA) | |
329 | + | else $Tuple4(bJ, unit, bM, bN) | |
325 | 330 | } | |
326 | 331 | } | |
327 | - | else | |
332 | + | else bb | |
328 | 333 | } | |
329 | 334 | ||
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | func | |
335 | - | then | |
336 | - | else | |
335 | + | let bO = { | |
336 | + | let bl = l | |
337 | + | let bm = size(bl) | |
338 | + | let bn = $Tuple4(height, unit, 0, nil) | |
339 | + | func bo (bp,bq) = if ((bq >= bm)) | |
340 | + | then bp | |
341 | + | else bC(bp, bl[bq]) | |
337 | 342 | ||
338 | - | func | |
339 | - | then | |
343 | + | func br (bp,bq) = if ((bq >= bm)) | |
344 | + | then bp | |
340 | 345 | else throw("List size exceeds 100") | |
341 | 346 | ||
342 | - | bo( | |
347 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
343 | 348 | } | |
344 | - | let bN = bM._1 | |
345 | - | let bO = bM._2 | |
346 | - | let y = bO | |
347 | - | if ($isInstanceOf(y, "String")) | |
348 | - | then { | |
349 | - | let bP = y | |
350 | - | bP | |
351 | - | } | |
352 | - | else value(aq(bN))._3 | |
349 | + | let bP = bO._1 | |
350 | + | let bQ = bO._2 | |
351 | + | $Tuple2({ | |
352 | + | let B = bQ | |
353 | + | if ($isInstanceOf(B, "String")) | |
354 | + | then { | |
355 | + | let bR = B | |
356 | + | bR | |
357 | + | } | |
358 | + | else value(at(bP))._3 | |
359 | + | }, bP) | |
353 | 360 | } | |
354 | 361 | ||
355 | 362 | ||
356 | - | func | |
357 | - | func | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | let | |
362 | - | if (containsElement( | |
363 | - | then | |
363 | + | func bS (H) = { | |
364 | + | func bT (bU,bV) = { | |
365 | + | let bW = bU | |
366 | + | let bH = bW._1 | |
367 | + | let bX = bW._2 | |
368 | + | let bY = addressFromStringValue(bV) | |
369 | + | if (containsElement(bX, bY)) | |
370 | + | then bU | |
364 | 371 | else { | |
365 | - | let | |
366 | - | $Tuple2(( | |
372 | + | let bZ = aj(bY) | |
373 | + | $Tuple2((bH + bZ), (bX :+ bY)) | |
367 | 374 | } | |
368 | 375 | } | |
369 | 376 | ||
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | func | |
376 | - | then | |
377 | - | else | |
377 | + | let ca = split_4C(getStringValue(M(H)), d) | |
378 | + | let cb = { | |
379 | + | let bl = ca | |
380 | + | let bm = size(bl) | |
381 | + | let bn = $Tuple2(0, nil) | |
382 | + | func bo (bp,bq) = if ((bq >= bm)) | |
383 | + | then bp | |
384 | + | else bT(bp, bl[bq]) | |
378 | 385 | ||
379 | - | func | |
380 | - | then | |
386 | + | func br (bp,bq) = if ((bq >= bm)) | |
387 | + | then bp | |
381 | 388 | else throw("List size exceeds 100") | |
382 | 389 | ||
383 | - | bo( | |
390 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
384 | 391 | } | |
385 | - | let bX = bZ._1 | |
386 | - | let ca = bZ._2 | |
387 | - | bX | |
392 | + | cb._1 | |
388 | 393 | } | |
389 | 394 | ||
390 | 395 | ||
391 | - | func | |
396 | + | func cc () = isDefined(getInteger(q)) | |
392 | 397 | ||
393 | 398 | ||
394 | - | func | |
395 | - | then throw(((((toBase58String( | |
399 | + | func cd (bY) = if ((toString(bY) != bs)) | |
400 | + | then throw(((((toBase58String(bY.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bs)) | |
396 | 401 | else unit | |
397 | 402 | ||
398 | 403 | ||
399 | - | func | |
404 | + | func ce (cf,cg) = if ((cf == cg)) | |
400 | 405 | then unit | |
401 | - | else throw(((("Expected a reference to the chain last block: 0x" + | |
406 | + | else throw(((("Expected a reference to the chain last block: 0x" + cg) + ". Got: 0x") + cf)) | |
402 | 407 | ||
403 | 408 | ||
404 | - | func | |
405 | - | let | |
406 | - | let | |
407 | - | if (( | |
409 | + | func ch (H) = { | |
410 | + | let ci = getStringValue(G(H)) | |
411 | + | let cj = valueOrElse(getInteger(p), 0) | |
412 | + | if ((cj > H)) | |
408 | 413 | then true | |
409 | - | else ( | |
414 | + | else (aC(getStringValue(s))._1 > aC(ci)._1) | |
410 | 415 | } | |
411 | 416 | ||
412 | 417 | ||
413 | - | func | |
418 | + | func ck (K) = valueOrElse(getInteger(R(K)), getInteger(("chainIdOf" + toString(K)))) | |
414 | 419 | ||
415 | 420 | ||
416 | - | func | |
417 | - | let | |
418 | - | let | |
419 | - | if ($isInstanceOf( | |
421 | + | func cl (bY,cm,cn) = { | |
422 | + | let co = { | |
423 | + | let B = cn | |
424 | + | if ($isInstanceOf(B, "String")) | |
420 | 425 | then { | |
421 | - | let | |
422 | - | let | |
423 | - | (( | |
426 | + | let aW = B | |
427 | + | let cp = aU(bY, ap) | |
428 | + | ((aC(aW)._1 + 1) > cp) | |
424 | 429 | } | |
425 | 430 | else true | |
426 | 431 | } | |
427 | - | let | |
428 | - | if ($isInstanceOf( | |
432 | + | let B = ck(bY) | |
433 | + | if ($isInstanceOf(B, "Int")) | |
429 | 434 | then { | |
430 | - | let | |
431 | - | if (if (( | |
435 | + | let cq = B | |
436 | + | if (if ((cq == cm)) | |
432 | 437 | then true | |
433 | - | else if ( | |
434 | - | then | |
438 | + | else if (ch(cq)) | |
439 | + | then co | |
435 | 440 | else false) | |
436 | 441 | then unit | |
437 | - | else throw(("miner is mining other chain " + toString( | |
442 | + | else throw(("miner is mining other chain " + toString(cq))) | |
438 | 443 | } | |
439 | 444 | else unit | |
440 | 445 | } | |
441 | 446 | ||
442 | 447 | ||
443 | - | let | |
448 | + | let cr = (" at height " + toString(height)) | |
444 | 449 | ||
445 | - | func | |
450 | + | func cs (ct) = valueOrErrorMessage(valueOrErrorMessage(blockInfoByHeight(ct), ("last block is not available" + cr)).vrf, ("VRF is not available" + cr)) | |
446 | 451 | ||
447 | 452 | ||
448 | - | func | |
449 | - | let | |
450 | - | if (( | |
453 | + | func cu (cv) = { | |
454 | + | let cw = cs(height) | |
455 | + | if ((cv == cw)) | |
451 | 456 | then unit | |
452 | - | else throw((((("Expected VRF " + toBase58String( | |
457 | + | else throw((((("Expected VRF " + toBase58String(cv)) + " does not match actual ") + toBase58String(cw)) + cr)) | |
453 | 458 | } | |
454 | 459 | ||
455 | 460 | ||
456 | - | func | |
457 | - | let | |
458 | - | let | |
459 | - | if (containsElement( | |
461 | + | func cx (H,bY) = { | |
462 | + | let cy = getStringValue(M(H)) | |
463 | + | let cz = split_4C(cy, d) | |
464 | + | if (containsElement(cz, toString(bY))) | |
460 | 465 | then nil | |
461 | - | else [StringEntry( | |
466 | + | else [StringEntry(M(H), ((cy + d) + toString(bY)))] | |
462 | 467 | } | |
463 | 468 | ||
464 | 469 | ||
465 | - | func | |
466 | - | then throw(("Can't withdraw at negative index: " + toString( | |
470 | + | func cA (cB,U) = if ((0 > U)) | |
471 | + | then throw(("Can't withdraw at negative index: " + toString(U))) | |
467 | 472 | else { | |
468 | - | let | |
469 | - | if (( | |
473 | + | let cC = size(cB) | |
474 | + | if ((U >= cC)) | |
470 | 475 | then { | |
471 | - | let | |
472 | - | if (( | |
473 | - | then throw((("Can't add " + toString( | |
474 | - | else (( | |
476 | + | let cD = (U - cC) | |
477 | + | if ((cD > size(k))) | |
478 | + | then throw((("Can't add " + toString(cD)) + " empty flags. Contact with developers")) | |
479 | + | else ((cB + take(k, cD)) + "1") | |
475 | 480 | } | |
476 | 481 | else { | |
477 | - | let | |
478 | - | let | |
479 | - | if (( | |
480 | - | then ((take( | |
481 | - | else throw((("Transfer #" + toString( | |
482 | + | let cE = drop(cB, U) | |
483 | + | let cF = take(cE, 1) | |
484 | + | if ((cF == "0")) | |
485 | + | then ((take(cB, U) + "1") + drop(cE, 1)) | |
486 | + | else throw((("Transfer #" + toString(U)) + " has been already taken")) | |
482 | 487 | } | |
483 | 488 | } | |
484 | 489 | ||
485 | 490 | ||
486 | - | func | |
487 | - | let | |
488 | - | if ((size( | |
491 | + | func cG (cH) = { | |
492 | + | let cI = fromBase16String(cH) | |
493 | + | if ((size(cI) != e)) | |
489 | 494 | then throw("invalid block id length") | |
490 | - | else | |
495 | + | else cH | |
491 | 496 | } | |
492 | 497 | ||
493 | 498 | ||
494 | - | func cI (cJ,cK,bH) = { | |
495 | - | let cL = az(getStringValue(r))._1 | |
496 | - | let cM = bu(cJ, bH, cK) | |
497 | - | if (if ((cM == cK)) | |
499 | + | func cJ (cK,cL,bJ) = { | |
500 | + | let cM = aC(getStringValue(s)) | |
501 | + | let cN = bx(cK, bJ, cL) | |
502 | + | let cO = cN._1 | |
503 | + | let cP = cN._2 | |
504 | + | let cQ = { | |
505 | + | let B = getString(w) | |
506 | + | if ($isInstanceOf(B, "String")) | |
507 | + | then { | |
508 | + | let cR = B | |
509 | + | if ((cP == cM._2)) | |
510 | + | then nil | |
511 | + | else { | |
512 | + | func cS (bU,bD) = if ((bU._1 == cM._2)) | |
513 | + | then bU | |
514 | + | else { | |
515 | + | let cT = at(bU._1) | |
516 | + | if ($isInstanceOf(cT, "(Address, Int, String)")) | |
517 | + | then { | |
518 | + | let aw = cT | |
519 | + | $Tuple2(aw._2, (bU._2 + 1)) | |
520 | + | } | |
521 | + | else bU | |
522 | + | } | |
523 | + | ||
524 | + | let cU = if ((cP == height)) | |
525 | + | then bJ | |
526 | + | else valueOrErrorMessage(at(cP), "no prev epoch for start")._2 | |
527 | + | let cV = { | |
528 | + | let bl = l | |
529 | + | let bm = size(bl) | |
530 | + | let bn = $Tuple2(cU, 1) | |
531 | + | func bo (bp,bq) = if ((bq >= bm)) | |
532 | + | then bp | |
533 | + | else cS(bp, bl[bq]) | |
534 | + | ||
535 | + | func br (bp,bq) = if ((bq >= bm)) | |
536 | + | then bp | |
537 | + | else throw("List size exceeds 100") | |
538 | + | ||
539 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
540 | + | } | |
541 | + | let cW = (cV._2 * getIntegerValue(x)) | |
542 | + | let cX = fromBase58String(getStringValue(t)) | |
543 | + | [Reissue(cX, cW, true), ScriptTransfer(Address(fromBase58String(cR)), cW, cX)] | |
544 | + | } | |
545 | + | } | |
546 | + | else nil | |
547 | + | } | |
548 | + | (cQ ++ (if (if ((cO == cL)) | |
498 | 549 | then true | |
499 | - | else ( | |
500 | - | then [StringEntry( | |
501 | - | else nil | |
550 | + | else (aC(cO)._1 > cM._1)) | |
551 | + | then [StringEntry(s, cO)] | |
552 | + | else nil)) | |
502 | 553 | } | |
503 | 554 | ||
504 | 555 | ||
505 | - | @Callable( | |
506 | - | func extendMainChain ( | |
507 | - | let | |
508 | - | if (( | |
556 | + | @Callable(z) | |
557 | + | func extendMainChain (D,cY,aZ,aP,aM) = { | |
558 | + | let cZ = cG(D) | |
559 | + | if ((cZ == cZ)) | |
509 | 560 | then { | |
510 | - | let | |
511 | - | if (( | |
561 | + | let da = cu(aZ) | |
562 | + | if ((da == da)) | |
512 | 563 | then { | |
513 | - | let | |
514 | - | if (( | |
564 | + | let db = cl(z.originCaller, ap, unit) | |
565 | + | if ((db == db)) | |
515 | 566 | then { | |
516 | - | let | |
517 | - | if (( | |
567 | + | let dc = ce(cY, as) | |
568 | + | if ((dc == dc)) | |
518 | 569 | then { | |
519 | - | let | |
520 | - | if (( | |
570 | + | let dd = Y(aC(cY)._6, aM, true) | |
571 | + | if ((dd == dd)) | |
521 | 572 | then { | |
522 | - | let | |
523 | - | let | |
524 | - | if ($isInstanceOf( | |
525 | - | then StringEntry( | |
573 | + | let de = { | |
574 | + | let B = at(height) | |
575 | + | if ($isInstanceOf(B, "Unit")) | |
576 | + | then StringEntry(E(height), ((((toString(z.originCaller) + d) + toString(bw)) + d) + D)) | |
526 | 577 | else { | |
527 | - | let | |
578 | + | let df = B | |
528 | 579 | throw("Epoch already started") | |
529 | 580 | } | |
530 | 581 | } | |
531 | - | if (( | |
582 | + | if ((de == de)) | |
532 | 583 | then { | |
533 | - | let | |
534 | - | if (( | |
584 | + | let dg = cd(z.originCaller) | |
585 | + | if ((dg == dg)) | |
535 | 586 | then { | |
536 | - | let | |
537 | - | let | |
538 | - | ([ | |
587 | + | let dh = cJ(z.originCaller, D, bw) | |
588 | + | let ao = (ar + 1) | |
589 | + | ([aN(D, ao, as, ap, aP, aM), an(ap, ao, D), IntegerEntry(R(z.originCaller), ap), IntegerEntry(J(ap, z.originCaller), ao), de] ++ dh) | |
539 | 590 | } | |
540 | 591 | else throw("Strict value is not equal to itself.") | |
541 | 592 | } | |
554 | 605 | ||
555 | 606 | ||
556 | 607 | ||
557 | - | @Callable( | |
558 | - | func startAltChain ( | |
559 | - | let | |
560 | - | if (( | |
608 | + | @Callable(z) | |
609 | + | func startAltChain (D,cY,aZ,aP,aM) = { | |
610 | + | let cZ = cG(D) | |
611 | + | if ((cZ == cZ)) | |
561 | 612 | then { | |
562 | - | let | |
563 | - | if (( | |
613 | + | let da = cu(aZ) | |
614 | + | if ((da == da)) | |
564 | 615 | then { | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | let | |
569 | - | let | |
570 | - | let | |
571 | - | let | |
572 | - | let | |
573 | - | let | |
574 | - | then | |
575 | - | else throw((((("Can not start alt chain from epoch " + toString( | |
576 | - | let | |
577 | - | if (( | |
616 | + | let di = aC(cY) | |
617 | + | let dj = di._1 | |
618 | + | let dk = di._2 | |
619 | + | let dl = di._3 | |
620 | + | let dm = di._4 | |
621 | + | let dn = di._5 | |
622 | + | let Z = di._6 | |
623 | + | let bP = aC(getStringValue(s))._2 | |
624 | + | let do = if ((dk >= bP)) | |
625 | + | then dk | |
626 | + | else throw((((("Can not start alt chain from epoch " + toString(dk)) + ", epoch ") + toString(bP)) + " is finalized")) | |
627 | + | let db = cl(z.originCaller, ap, cY) | |
628 | + | if ((db == db)) | |
578 | 629 | then { | |
579 | - | let | |
580 | - | if (( | |
630 | + | let dd = Y(Z, aM, true) | |
631 | + | if ((dd == dd)) | |
581 | 632 | then { | |
582 | - | let | |
583 | - | let | |
584 | - | let | |
585 | - | let | |
586 | - | if ($isInstanceOf( | |
587 | - | then StringEntry( | |
633 | + | let dp = (valueOrElse(getInteger(o), 0) + 1) | |
634 | + | let ao = (dj + 1) | |
635 | + | let de = { | |
636 | + | let B = at(height) | |
637 | + | if ($isInstanceOf(B, "Unit")) | |
638 | + | then StringEntry(E(height), ((((toString(z.originCaller) + d) + toString(do)) + d) + D)) | |
588 | 639 | else { | |
589 | - | let | |
640 | + | let df = B | |
590 | 641 | throw("Epoch already started") | |
591 | 642 | } | |
592 | 643 | } | |
593 | - | let | |
594 | - | if (( | |
595 | - | then [ | |
644 | + | let dg = cd(z.originCaller) | |
645 | + | if ((dg == dg)) | |
646 | + | then [de, aN(D, ao, cY, dp, aP, aM), StringEntry(G(dp), D), an(dp, ao, D), IntegerEntry(R(z.originCaller), dp), IntegerEntry(J(dp, z.originCaller), ao), IntegerEntry(J(ap, z.originCaller), ao), StringEntry(M(dp), toString(z.originCaller)), IntegerEntry(o, dp)] | |
596 | 647 | else throw("Strict value is not equal to itself.") | |
597 | 648 | } | |
598 | 649 | else throw("Strict value is not equal to itself.") | |
606 | 657 | ||
607 | 658 | ||
608 | 659 | ||
609 | - | @Callable( | |
610 | - | func extendAltChain ( | |
611 | - | let | |
612 | - | if (( | |
660 | + | @Callable(z) | |
661 | + | func extendAltChain (D,cY,aZ,H,aP,aM) = { | |
662 | + | let cZ = cG(D) | |
663 | + | if ((cZ == cZ)) | |
613 | 664 | then { | |
614 | - | let | |
615 | - | if (( | |
665 | + | let da = cu(aZ) | |
666 | + | if ((da == da)) | |
616 | 667 | then { | |
617 | - | let | |
618 | - | let | |
619 | - | if (( | |
668 | + | let dq = aC(getStringValue(G(H))) | |
669 | + | let db = cl(z.originCaller, H, toBase16String(dq._3)) | |
670 | + | if ((db == db)) | |
620 | 671 | then { | |
621 | - | let | |
622 | - | let | |
623 | - | let | |
624 | - | let | |
625 | - | if (( | |
672 | + | let dr = al(H) | |
673 | + | let ds = dr._1 | |
674 | + | let dt = dr._2 | |
675 | + | let dc = ce(cY, dt) | |
676 | + | if ((dc == dc)) | |
626 | 677 | then { | |
627 | - | let | |
628 | - | if (( | |
678 | + | let dd = Y(aC(cY)._6, aM, true) | |
679 | + | if ((dd == dd)) | |
629 | 680 | then { | |
630 | - | let | |
631 | - | let | |
632 | - | let | |
681 | + | let ao = (ds + 1) | |
682 | + | let bJ = aC(cY)._2 | |
683 | + | let du = if ((bS(H) > (bt / 2))) | |
633 | 684 | then { | |
634 | - | let | |
635 | - | let | |
636 | - | ([IntegerEntry( | |
685 | + | let dv = valueOrElse(getInteger(o), 0) | |
686 | + | let dh = cJ(z.originCaller, D, bJ) | |
687 | + | ([IntegerEntry(L(ap), dq._1), IntegerEntry(n, H), IntegerEntry(p, (dv + 1))] ++ dh) | |
637 | 688 | } | |
638 | 689 | else nil | |
639 | - | let | |
640 | - | let | |
641 | - | if ($isInstanceOf( | |
642 | - | then StringEntry( | |
690 | + | let de = { | |
691 | + | let B = at(height) | |
692 | + | if ($isInstanceOf(B, "Unit")) | |
693 | + | then StringEntry(E(height), ((((toString(z.originCaller) + d) + toString(bJ)) + d) + D)) | |
643 | 694 | else { | |
644 | - | let | |
695 | + | let df = B | |
645 | 696 | throw("Epoch already started") | |
646 | 697 | } | |
647 | 698 | } | |
648 | - | if (( | |
699 | + | if ((de == de)) | |
649 | 700 | then { | |
650 | - | let | |
651 | - | if (( | |
701 | + | let dg = cd(z.originCaller) | |
702 | + | if ((dg == dg)) | |
652 | 703 | then { | |
653 | - | let | |
654 | - | then (valueOrElse( | |
704 | + | let dw = if (if ((du == nil)) | |
705 | + | then (valueOrElse(ck(z.originCaller), 0) != H) | |
655 | 706 | else false) | |
656 | - | then [IntegerEntry( | |
707 | + | then [IntegerEntry(J(ap, z.originCaller), dq._1)] | |
657 | 708 | else nil | |
658 | - | ((([ | |
709 | + | ((([aN(D, ao, cY, H, aP, aM), an(H, ao, D), de, IntegerEntry(R(z.originCaller), H), IntegerEntry(J(H, z.originCaller), ao)] ++ du) ++ cx(H, z.originCaller)) ++ dw) | |
659 | 710 | } | |
660 | 711 | else throw("Strict value is not equal to itself.") | |
661 | 712 | } | |
674 | 725 | ||
675 | 726 | ||
676 | 727 | ||
677 | - | @Callable( | |
678 | - | func appendBlock ( | |
679 | - | let | |
728 | + | @Callable(z) | |
729 | + | func appendBlock (D,cY,aP,aM) = { | |
730 | + | let dx = if ((ax == z.originCaller)) | |
680 | 731 | then true | |
681 | 732 | else { | |
682 | - | let | |
683 | - | if ($isInstanceOf( | |
733 | + | let B = ax | |
734 | + | if ($isInstanceOf(B, "Address")) | |
684 | 735 | then { | |
685 | - | let | |
686 | - | throw(("not allowed to forge blocks in this epoch, expected from " + toString( | |
736 | + | let dy = B | |
737 | + | throw(("not allowed to forge blocks in this epoch, expected from " + toString(dy))) | |
687 | 738 | } | |
688 | 739 | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
689 | 740 | } | |
690 | - | if (( | |
741 | + | if ((dx == dx)) | |
691 | 742 | then { | |
692 | - | let | |
693 | - | let | |
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | if (( | |
743 | + | let H = valueOrElse(ck(z.originCaller), ap) | |
744 | + | let dz = al(H) | |
745 | + | let ds = dz._1 | |
746 | + | let dA = dz._2 | |
747 | + | let dc = ce(cY, dA) | |
748 | + | if ((dc == dc)) | |
698 | 749 | then { | |
699 | - | let | |
700 | - | if (( | |
750 | + | let dd = Y(aC(cY)._6, aM, false) | |
751 | + | if ((dd == dd)) | |
701 | 752 | then { | |
702 | - | let | |
703 | - | let | |
704 | - | if (( | |
705 | - | then [ | |
753 | + | let ao = (ds + 1) | |
754 | + | let cZ = cG(D) | |
755 | + | if ((cZ == cZ)) | |
756 | + | then [aN(D, ao, dA, H, aP, aM), IntegerEntry(J(H, z.originCaller), ao), an(H, ao, D), StringEntry(E(height), ((((toString(value(ax)) + d) + toString(ay)) + d) + D))] | |
706 | 757 | else throw("Strict value is not equal to itself.") | |
707 | 758 | } | |
708 | 759 | else throw("Strict value is not equal to itself.") | |
714 | 765 | ||
715 | 766 | ||
716 | 767 | ||
717 | - | @Callable( | |
718 | - | func join ( | |
719 | - | func | |
720 | - | let | |
721 | - | if ($isInstanceOf( | |
768 | + | @Callable(z) | |
769 | + | func join (dB) = { | |
770 | + | func dC (dD) = { | |
771 | + | let B = getBinary(P(dD)) | |
772 | + | if ($isInstanceOf(B, "ByteVector")) | |
722 | 773 | then { | |
723 | - | let | |
724 | - | if (( | |
774 | + | let dE = B | |
775 | + | if ((dE == z.originCallerPublicKey)) | |
725 | 776 | then unit | |
726 | - | else throw(((("EL miner address " + | |
777 | + | else throw(((("EL miner address " + dD) + " is already linked with ") + toBase58String(dE))) | |
727 | 778 | } | |
728 | 779 | else unit | |
729 | 780 | } | |
730 | 781 | ||
731 | - | let | |
732 | - | let | |
733 | - | if (!( | |
782 | + | let dF = split(dB, "0x") | |
783 | + | let Q = fromBase16String(dF[(size(dF) - 1)]) | |
784 | + | if (!(cc())) | |
734 | 785 | then throw("The contract has not yet set up") | |
735 | - | else if ((c > wavesBalance( | |
736 | - | then throw(((("Insufficient generating balance: " + toString(wavesBalance( | |
737 | - | else if ((size( | |
786 | + | else if ((c > wavesBalance(z.originCaller).generating)) | |
787 | + | then throw(((("Insufficient generating balance: " + toString(wavesBalance(z.originCaller).generating)) + ". Required: ") + toString(c))) | |
788 | + | else if ((size(Q) != 20)) | |
738 | 789 | then throw("rewardAddress should be an L2 address") | |
739 | - | else if ((size( | |
790 | + | else if ((size(aA) >= 50)) | |
740 | 791 | then throw("too many miners") | |
741 | 792 | else { | |
742 | - | func | |
793 | + | func dG (dH,K) = if (dH) | |
743 | 794 | then true | |
744 | - | else ( | |
795 | + | else (K == toString(z.originCaller)) | |
745 | 796 | ||
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | let | |
750 | - | func | |
751 | - | then | |
752 | - | else | |
797 | + | let dI = { | |
798 | + | let bl = aA | |
799 | + | let bm = size(bl) | |
800 | + | let bn = false | |
801 | + | func bo (bp,bq) = if ((bq >= bm)) | |
802 | + | then bp | |
803 | + | else dG(bp, bl[bq]) | |
753 | 804 | ||
754 | - | func | |
755 | - | then | |
805 | + | func br (bp,bq) = if ((bq >= bm)) | |
806 | + | then bp | |
756 | 807 | else throw("List size exceeds 50") | |
757 | 808 | ||
758 | - | bo( | |
809 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
759 | 810 | } | |
760 | - | if ( | |
811 | + | if (dI) | |
761 | 812 | then nil | |
762 | 813 | else { | |
763 | - | let | |
764 | - | let | |
765 | - | let | |
766 | - | if (( | |
814 | + | let dJ = toString(z.originCaller) | |
815 | + | let dK = toBase16String(Q) | |
816 | + | let dL = dC(dK) | |
817 | + | if ((dL == dL)) | |
767 | 818 | then { | |
768 | - | let | |
769 | - | then | |
770 | - | else (( | |
771 | - | let | |
772 | - | let | |
773 | - | if ($isInstanceOf( | |
819 | + | let bN = if ((size(aA) == 0)) | |
820 | + | then dJ | |
821 | + | else ((az + d) + dJ) | |
822 | + | let dM = { | |
823 | + | let B = getString(N(dJ)) | |
824 | + | if ($isInstanceOf(B, "String")) | |
774 | 825 | then { | |
775 | - | let | |
776 | - | if (( | |
826 | + | let dN = B | |
827 | + | if ((dN == toBase16String(Q))) | |
777 | 828 | then nil | |
778 | - | else [DeleteEntry( | |
829 | + | else [DeleteEntry(P(dN))] | |
779 | 830 | } | |
780 | 831 | else nil | |
781 | 832 | } | |
782 | - | ([StringEntry( | |
833 | + | ([StringEntry(m, bN), StringEntry(N(dJ), ("0x" + dK)), BinaryEntry(P(dK), z.originCallerPublicKey)] ++ dM) | |
783 | 834 | } | |
784 | 835 | else throw("Strict value is not equal to itself.") | |
785 | 836 | } | |
788 | 839 | ||
789 | 840 | ||
790 | 841 | ||
791 | - | @Callable( | |
842 | + | @Callable(z) | |
792 | 843 | func leave () = { | |
793 | - | let | |
794 | - | func | |
795 | - | then | |
796 | - | else ( | |
844 | + | let dO = toString(z.originCaller) | |
845 | + | func dP (bU,K) = if ((K == dO)) | |
846 | + | then bU | |
847 | + | else (bU :+ K) | |
797 | 848 | ||
798 | - | let | |
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | func | |
803 | - | then | |
804 | - | else | |
849 | + | let dQ = { | |
850 | + | let bl = aA | |
851 | + | let bm = size(bl) | |
852 | + | let bn = nil | |
853 | + | func bo (bp,bq) = if ((bq >= bm)) | |
854 | + | then bp | |
855 | + | else dP(bp, bl[bq]) | |
805 | 856 | ||
806 | - | func | |
807 | - | then | |
857 | + | func br (bp,bq) = if ((bq >= bm)) | |
858 | + | then bp | |
808 | 859 | else throw("List size exceeds 50") | |
809 | 860 | ||
810 | - | bo( | |
861 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
811 | 862 | } | |
812 | - | let | |
813 | - | let | |
814 | - | if (( | |
815 | - | then if (( | |
863 | + | let dR = N(dO) | |
864 | + | let dS = valueOrErrorMessage(getString(this, dR), "miner has never joined") | |
865 | + | if ((dS == dS)) | |
866 | + | then if ((ax == z.originCaller)) | |
816 | 867 | then throw("designated miner can't leave") | |
817 | - | else [StringEntry( | |
868 | + | else [StringEntry(m, makeString_2C(dQ, d))] | |
818 | 869 | else throw("Strict value is not equal to itself.") | |
819 | 870 | } | |
820 | 871 | ||
821 | 872 | ||
822 | 873 | ||
823 | - | @Callable( | |
824 | - | func transfer ( | |
825 | - | let | |
826 | - | then fromBase16String( | |
827 | - | else throw(((("Address should have " + toString(i)) + " characters, got ") + toString(size( | |
828 | - | if (( | |
874 | + | @Callable(z) | |
875 | + | func transfer (W) = { | |
876 | + | let dT = if ((size(W) == i)) | |
877 | + | then fromBase16String(W) | |
878 | + | else throw(((("Address should have " + toString(i)) + " characters, got ") + toString(size(W)))) | |
879 | + | if ((dT == dT)) | |
829 | 880 | then { | |
830 | - | let | |
881 | + | let dU = if ((size(z.payments) == 1)) | |
831 | 882 | then true | |
832 | - | else throw(("Expected one payment as a transfer amount, got " + toString(size( | |
833 | - | if (( | |
883 | + | else throw(("Expected one payment as a transfer amount, got " + toString(size(z.payments)))) | |
884 | + | if ((dU == dU)) | |
834 | 885 | then { | |
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | let | |
839 | - | let | |
840 | - | if ($isInstanceOf( | |
886 | + | let dV = getStringValue(t) | |
887 | + | let cX = fromBase58String(dV) | |
888 | + | let ag = z.payments[0] | |
889 | + | let dW = { | |
890 | + | let B = ag.assetId | |
891 | + | if ($isInstanceOf(B, "ByteVector")) | |
841 | 892 | then { | |
842 | - | let | |
843 | - | if (( | |
893 | + | let dX = B | |
894 | + | if ((dX == cX)) | |
844 | 895 | then true | |
845 | - | else throw(((("Expected " + | |
896 | + | else throw(((("Expected " + dV) + " in the payment, got ") + toBase58String(dX))) | |
846 | 897 | } | |
847 | - | else throw((("Expected " + | |
898 | + | else throw((("Expected " + dV) + " in the payment, got Waves")) | |
848 | 899 | } | |
849 | - | if (( | |
900 | + | if ((dW == dW)) | |
850 | 901 | then { | |
851 | - | let | |
852 | - | let | |
853 | - | let | |
854 | - | then | |
855 | - | else if ((1600 > | |
856 | - | then | |
857 | - | else if ((3200 > | |
858 | - | then | |
859 | - | else if ((6400 > | |
860 | - | then | |
861 | - | else throw((("Transfers denied for queue size of " + toString( | |
862 | - | if (( | |
863 | - | then [IntegerEntry( | |
902 | + | let dY = aC(as)._6 | |
903 | + | let ai = (S - dY) | |
904 | + | let dZ = if ((160 > ai)) | |
905 | + | then af(ag, 1000000, ai) | |
906 | + | else if ((1600 > ai)) | |
907 | + | then af(ag, 10000000, ai) | |
908 | + | else if ((3200 > ai)) | |
909 | + | then af(ag, 100000000, ai) | |
910 | + | else if ((6400 > ai)) | |
911 | + | then af(ag, 1000000000, ai) | |
912 | + | else throw((("Transfers denied for queue size of " + toString(ai)) + ". Wait until current transfers processed")) | |
913 | + | if ((dZ == dZ)) | |
914 | + | then [IntegerEntry(v, (S + 1)), V(S, W, ag.amount), Burn(cX, ag.amount)] | |
864 | 915 | else throw("Strict value is not equal to itself.") | |
865 | 916 | } | |
866 | 917 | else throw("Strict value is not equal to itself.") | |
872 | 923 | ||
873 | 924 | ||
874 | 925 | ||
875 | - | @Callable( | |
876 | - | func withdraw ( | |
877 | - | let | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | if (( | |
882 | - | then throw(((("EL block #" + toString( | |
883 | - | else if ((size( | |
884 | - | then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size( | |
885 | - | else if ((0 > | |
886 | - | then throw(("Transfer index in block should be nonnegative, got " + toString( | |
887 | - | else if ((0 >= | |
888 | - | then throw(("Amount should be positive, got " + toString( | |
926 | + | @Callable(z) | |
927 | + | func withdraw (D,ea,eb,X) = { | |
928 | + | let ec = aC(D) | |
929 | + | let ed = ec._1 | |
930 | + | let ee = aC(getStringValue(s))._1 | |
931 | + | let ef = aC(as)._1 | |
932 | + | if ((ed > ee)) | |
933 | + | then throw(((("EL block #" + toString(ed)) + " is not finalized. The current finalized is #") + toString(ee))) | |
934 | + | else if ((size(ea) != h)) | |
935 | + | then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size(ea)))) | |
936 | + | else if ((0 > eb)) | |
937 | + | then throw(("Transfer index in block should be nonnegative, got " + toString(eb))) | |
938 | + | else if ((0 >= X)) | |
939 | + | then throw(("Amount should be positive, got " + toString(X))) | |
889 | 940 | else { | |
890 | - | let | |
891 | - | let | |
892 | - | let | |
893 | - | let | |
894 | - | if ($isInstanceOf( | |
941 | + | let eg = ec._4 | |
942 | + | let eh = (eg == ap) | |
943 | + | let ei = { | |
944 | + | let B = getInteger(L(eg)) | |
945 | + | if ($isInstanceOf(B, "Int")) | |
895 | 946 | then { | |
896 | - | let | |
897 | - | ( | |
947 | + | let ej = B | |
948 | + | (ej > ed) | |
898 | 949 | } | |
899 | - | else throw(((( | |
950 | + | else throw((((D + " is on an alternative chain #") + toString(eg)) + " that was not approved by majority. Wait for some blocks")) | |
900 | 951 | } | |
901 | - | if (if ( | |
952 | + | if (if (eh) | |
902 | 953 | then true | |
903 | - | else | |
954 | + | else ei) | |
904 | 955 | then { | |
905 | - | let | |
906 | - | let | |
907 | - | let | |
908 | - | let | |
909 | - | let | |
910 | - | let | |
911 | - | let | |
912 | - | let | |
913 | - | if (( | |
956 | + | let ek = z.originCaller | |
957 | + | let el = take(drop(ek.bytes, 2), f) | |
958 | + | let em = base58'11111111111111111111111111111111111111111111' | |
959 | + | let en = toBytes(X) | |
960 | + | let eo = ((el + take(em, (size(em) - size(en)))) + en) | |
961 | + | let ep = blake2b256_16Kb(eo) | |
962 | + | let eq = createMerkleRoot(ea, ep, eb) | |
963 | + | let er = ec._5 | |
964 | + | if ((eq == er)) | |
914 | 965 | then { | |
915 | - | let | |
916 | - | let | |
917 | - | [Reissue( | |
966 | + | let cX = fromBase58String(getStringValue(t)) | |
967 | + | let es = C(D) | |
968 | + | [Reissue(cX, X, true), ScriptTransfer(ek, X, cX), StringEntry(es, cA(valueOrElse(getString(es), ""), eb))] | |
918 | 969 | } | |
919 | - | else throw((((((("Expected root hash: " + toBase16String( | |
970 | + | else throw((((((("Expected root hash: " + toBase16String(er)) + ", got: ") + toBase16String(eq)) + ". Event data digest: ") + toBase64String(ep)) + ". Check your withdraw arguments")) | |
920 | 971 | } | |
921 | - | else throw((("Expected " + | |
972 | + | else throw((("Expected " + D) + " to be either on the main chain or relate to it")) | |
922 | 973 | } | |
923 | 974 | } | |
924 | 975 | ||
925 | 976 | ||
926 | 977 | ||
927 | - | @Callable( | |
928 | - | func setup ( | |
978 | + | @Callable(z) | |
979 | + | func setup (et,eu,ev,ew) = if (cc()) | |
929 | 980 | then throw("The contract has been already set up") | |
930 | - | else if ((0 > | |
981 | + | else if ((0 > eu)) | |
931 | 982 | then throw("The miner reward must be nonnegative") | |
932 | 983 | else { | |
933 | - | let | |
934 | - | let | |
984 | + | let ex = fromBase16String(et) | |
985 | + | let ey = if ((size(ex) == e)) | |
935 | 986 | then true | |
936 | 987 | else throw("Wrong genesis block hash") | |
937 | - | if (( | |
988 | + | if ((ey == ey)) | |
938 | 989 | then { | |
939 | - | let eo = base58'11111111111111111111111111111111' | |
940 | - | let ep = addressFromPublicKey(eo) | |
941 | - | let eq = base58'11111111111111111111' | |
942 | - | let er = "0000000000000000000000000000000000000000000000000000000000000000" | |
943 | - | let es = Issue("UNIT0", "Native token", 0, 8, true) | |
944 | - | let dM = calculateAssetId(es) | |
945 | - | let et = aK(ek, 0, er, 0, toBase16String(base58''), -1) | |
946 | - | [et, StringEntry(D(0), ek), ak(0, 0, ek), IntegerEntry(p, el), StringEntry(B(height), ((toString(ep) + ",0,") + ek)), StringEntry(r, ek), es, StringEntry(s, toBase58String(dM)), StringEntry(t, "0x0000000000000000000000000000000000006a7e")] | |
990 | + | let ez = base58'11111111111111111111111111111111' | |
991 | + | let eA = addressFromPublicKey(ez) | |
992 | + | let eB = base58'11111111111111111111' | |
993 | + | let eC = "0000000000000000000000000000000000000000000000000000000000000000" | |
994 | + | let eD = Issue("UNIT0", "Native token", 0, 8, true) | |
995 | + | let cX = calculateAssetId(eD) | |
996 | + | let eE = aN(et, 0, eC, 0, toBase16String(base58''), -1) | |
997 | + | let eF = if ((ev == "")) | |
998 | + | then nil | |
999 | + | else [StringEntry(w, toString(Address(fromBase58String(ev)))), IntegerEntry(x, if ((ew > 0)) | |
1000 | + | then ew | |
1001 | + | else throw("invalid DAO reward amount"))] | |
1002 | + | ([eE, StringEntry(G(0), et), an(0, 0, et), IntegerEntry(q, eu), StringEntry(E(height), ((toString(eA) + ",0,") + et)), StringEntry(s, et), eD, StringEntry(t, toBase58String(cX)), StringEntry(u, "0x0000000000000000000000000000000000006a7e")] ++ eF) | |
947 | 1003 | } | |
948 | 1004 | else throw("Strict value is not equal to itself.") | |
949 | 1005 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 8 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 9223372036854775807 | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = (20000 * b) | |
9 | 9 | ||
10 | 10 | let d = "," | |
11 | 11 | ||
12 | 12 | let e = 32 | |
13 | 13 | ||
14 | 14 | let f = 20 | |
15 | 15 | ||
16 | 16 | let g = 32 | |
17 | 17 | ||
18 | 18 | let h = 10 | |
19 | 19 | ||
20 | 20 | let i = 40 | |
21 | 21 | ||
22 | 22 | let j = 16 | |
23 | 23 | ||
24 | 24 | let k = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
27 | 27 | ||
28 | - | let m = " | |
28 | + | let m = "allMiners" | |
29 | 29 | ||
30 | - | let n = " | |
30 | + | let n = "mainChainId" | |
31 | 31 | ||
32 | - | let o = " | |
32 | + | let o = "lastChainId" | |
33 | 33 | ||
34 | - | let p = " | |
34 | + | let p = "firstValidAltChainId" | |
35 | 35 | ||
36 | - | let q = " | |
36 | + | let q = "minerReward" | |
37 | 37 | ||
38 | - | let r = " | |
38 | + | let r = "block_0x" | |
39 | 39 | ||
40 | - | let s = " | |
40 | + | let s = "finalizedBlock" | |
41 | 41 | ||
42 | - | let t = " | |
42 | + | let t = "tokenId" | |
43 | 43 | ||
44 | - | let u = " | |
44 | + | let u = "elBridgeAddress" | |
45 | 45 | ||
46 | - | func v (w) = { | |
47 | - | let x = toString(w) | |
48 | - | let y = size(x) | |
49 | - | if ((1 == y)) | |
50 | - | then ("0000000" + x) | |
51 | - | else if ((2 == y)) | |
52 | - | then ("000000" + x) | |
53 | - | else if ((3 == y)) | |
54 | - | then ("00000" + x) | |
55 | - | else if ((4 == y)) | |
56 | - | then ("0000" + x) | |
57 | - | else if ((5 == y)) | |
58 | - | then ("000" + x) | |
59 | - | else if ((6 == y)) | |
60 | - | then ("00" + x) | |
61 | - | else if ((7 == y)) | |
62 | - | then ("0" + x) | |
63 | - | else x | |
46 | + | let v = "nativeTransfersCount" | |
47 | + | ||
48 | + | let w = "daoAddress" | |
49 | + | ||
50 | + | let x = "daoReward" | |
51 | + | ||
52 | + | func y (z) = { | |
53 | + | let A = toString(z) | |
54 | + | let B = size(A) | |
55 | + | if ((1 == B)) | |
56 | + | then ("0000000" + A) | |
57 | + | else if ((2 == B)) | |
58 | + | then ("000000" + A) | |
59 | + | else if ((3 == B)) | |
60 | + | then ("00000" + A) | |
61 | + | else if ((4 == B)) | |
62 | + | then ("0000" + A) | |
63 | + | else if ((5 == B)) | |
64 | + | then ("000" + A) | |
65 | + | else if ((6 == B)) | |
66 | + | then ("00" + A) | |
67 | + | else if ((7 == B)) | |
68 | + | then ("0" + A) | |
69 | + | else A | |
64 | 70 | } | |
65 | 71 | ||
66 | 72 | ||
67 | - | func | |
73 | + | func C (D) = ("elToClTransfers_0x" + D) | |
68 | 74 | ||
69 | 75 | ||
70 | - | func | |
76 | + | func E (F) = ("epoch_" + y(F)) | |
71 | 77 | ||
72 | 78 | ||
73 | - | func | |
79 | + | func G (H) = (("chain" + toString(H)) + "FirstBlock") | |
74 | 80 | ||
75 | 81 | ||
76 | - | func | |
82 | + | func I (H) = ("chain_" + y(H)) | |
77 | 83 | ||
78 | 84 | ||
79 | - | func | |
85 | + | func J (H,K) = ((("chain_" + y(H)) + "_") + toString(K)) | |
80 | 86 | ||
81 | 87 | ||
82 | - | func | |
88 | + | func L (H) = (("chain_" + y(H)) + "ForkedHeight") | |
83 | 89 | ||
84 | 90 | ||
85 | - | func | |
91 | + | func M (H) = (("chain" + toString(H)) + "Supporters") | |
86 | 92 | ||
87 | 93 | ||
88 | - | func | |
94 | + | func N (O) = (("miner_" + O) + "_RewardAddress") | |
89 | 95 | ||
90 | 96 | ||
91 | - | func | |
97 | + | func P (Q) = (("miner_0x" + Q) + "_PK") | |
92 | 98 | ||
93 | 99 | ||
94 | - | func | |
100 | + | func R (K) = (("miner_" + toString(K)) + "_ChainId") | |
95 | 101 | ||
96 | 102 | ||
97 | - | let | |
103 | + | let S = valueOrElse(getInteger(this, v), 0) | |
98 | 104 | ||
99 | - | func | |
105 | + | func T (U) = ("nativeTransfer_" + toString(U)) | |
100 | 106 | ||
101 | 107 | ||
102 | - | func | |
108 | + | func V (U,W,X) = StringEntry(T(U), ((("0x" + W) + d) + toString(X))) | |
103 | 109 | ||
104 | 110 | ||
105 | - | func | |
106 | - | let | |
111 | + | func Y (Z,aa,ab) = { | |
112 | + | let ac = if (ab) | |
107 | 113 | then (j - 1) | |
108 | 114 | else j | |
109 | - | let | |
110 | - | let | |
111 | - | then throw(((("Allowed only " + toString( | |
115 | + | let ad = (aa - Z) | |
116 | + | let ae = if ((ad > ac)) | |
117 | + | then throw(((("Allowed only " + toString(ac)) + " transfers, got ") + toString(ad))) | |
112 | 118 | else true | |
113 | - | if (( | |
114 | - | then if (( | |
115 | - | then throw(((("Attempt to transfer #" + toString( | |
119 | + | if ((ae == ae)) | |
120 | + | then if ((aa >= S)) | |
121 | + | then throw(((("Attempt to transfer #" + toString(aa)) + ". Available transfers: ") + toString(S))) | |
116 | 122 | else true | |
117 | 123 | else throw("Strict value is not equal to itself.") | |
118 | 124 | } | |
119 | 125 | ||
120 | 126 | ||
121 | - | func | |
127 | + | func af (ag,ah,ai) = if ((ag.amount >= ah)) | |
122 | 128 | then true | |
123 | - | else throw((((((("Transferring amount " + toString( | |
129 | + | else throw((((((("Transferring amount " + toString(ag.amount)) + " should be >= ") + toString(ah)) + " for queue size of ") + toString(ai)) + ". Transfer more or wait")) | |
124 | 130 | ||
125 | 131 | ||
126 | - | func | |
132 | + | func aj (ak) = wavesBalance(ak).generating | |
127 | 133 | ||
128 | 134 | ||
129 | - | func | |
130 | - | let | |
131 | - | let | |
132 | - | $Tuple2(parseIntValue( | |
135 | + | func al (H) = { | |
136 | + | let A = getStringValue(I(H)) | |
137 | + | let am = split(A, d) | |
138 | + | $Tuple2(parseIntValue(am[0]), am[1]) | |
133 | 139 | } | |
134 | 140 | ||
135 | 141 | ||
136 | - | func | |
142 | + | func an (H,ao,D) = StringEntry(I(H), ((toString(ao) + d) + D)) | |
137 | 143 | ||
138 | 144 | ||
139 | - | let | |
145 | + | let ap = valueOrElse(getInteger(n), 0) | |
140 | 146 | ||
141 | - | let | |
147 | + | let aq = al(ap) | |
142 | 148 | ||
143 | - | let | |
149 | + | let ar = aq._1 | |
144 | 150 | ||
145 | - | let | |
151 | + | let as = aq._2 | |
146 | 152 | ||
147 | - | func | |
148 | - | let | |
149 | - | if ($isInstanceOf( | |
153 | + | func at (F) = { | |
154 | + | let B = getString(E(F)) | |
155 | + | if ($isInstanceOf(B, "String")) | |
150 | 156 | then { | |
151 | - | let | |
152 | - | let | |
153 | - | $Tuple3(addressFromStringValue( | |
157 | + | let A = B | |
158 | + | let au = split(A, d) | |
159 | + | $Tuple3(addressFromStringValue(au[0]), parseIntValue(au[1]), au[2]) | |
154 | 160 | } | |
155 | 161 | else unit | |
156 | 162 | } | |
157 | 163 | ||
158 | 164 | ||
159 | - | let | |
160 | - | let | |
161 | - | if ($isInstanceOf( | |
165 | + | let av = { | |
166 | + | let B = at(height) | |
167 | + | if ($isInstanceOf(B, "(Address, Int, String)")) | |
162 | 168 | then { | |
163 | - | let | |
164 | - | | |
169 | + | let aw = B | |
170 | + | aw | |
165 | 171 | } | |
166 | 172 | else $Tuple2(unit, 0) | |
167 | 173 | } | |
168 | 174 | ||
169 | - | let | |
175 | + | let ax = av._1 | |
170 | 176 | ||
171 | - | let | |
177 | + | let ay = av._2 | |
172 | 178 | ||
173 | - | let | |
179 | + | let az = valueOrElse(getString(m), "") | |
174 | 180 | ||
175 | - | let | |
176 | - | let | |
177 | - | if (("" == | |
181 | + | let aA = { | |
182 | + | let B = az | |
183 | + | if (("" == B)) | |
178 | 184 | then nil | |
179 | - | else if ($isInstanceOf( | |
185 | + | else if ($isInstanceOf(B, "String")) | |
180 | 186 | then { | |
181 | - | let | |
182 | - | split_4C( | |
187 | + | let aB = B | |
188 | + | split_4C(aB, d) | |
183 | 189 | } | |
184 | 190 | else throw("Match error") | |
185 | 191 | } | |
186 | 192 | ||
187 | - | func | |
188 | - | let | |
189 | - | let | |
190 | - | let | |
191 | - | let | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | then take(drop( | |
193 | + | func aC (aD) = { | |
194 | + | let aE = getBinaryValue((r + aD)) | |
195 | + | let aF = size(aE) | |
196 | + | let aG = toInt(aE) | |
197 | + | let aH = toInt(aE, 8) | |
198 | + | let aI = take(drop(aE, 16), e) | |
199 | + | let H = toInt(aE, (16 + e)) | |
200 | + | let aJ = (24 + e) | |
201 | + | let aK = (aF - aJ) | |
202 | + | let aL = if ((aK >= g)) | |
203 | + | then take(drop(aE, aJ), g) | |
198 | 204 | else base58'' | |
199 | - | let | |
205 | + | let aM = if (if ((aK == 8)) | |
200 | 206 | then true | |
201 | - | else ( | |
202 | - | then toInt( | |
207 | + | else (aK > g)) | |
208 | + | then toInt(aE, (aJ + size(aL))) | |
203 | 209 | else -1 | |
204 | - | $Tuple6( | |
210 | + | $Tuple6(aG, aH, aI, H, aL, aM) | |
205 | 211 | } | |
206 | 212 | ||
207 | 213 | ||
208 | - | func | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
214 | + | func aN (D,aG,aO,H,aP,aM) = { | |
215 | + | let aQ = fromBase16String(aP) | |
216 | + | let aR = size(aQ) | |
217 | + | let aS = if (if ((aR == 0)) | |
212 | 218 | then true | |
213 | - | else ( | |
219 | + | else (aR == g)) | |
214 | 220 | then true | |
215 | - | else throw(((("Transfers root hash should have 0 or " + toString(g)) + " bytes, got ") + toString( | |
216 | - | if (( | |
221 | + | else throw(((("Transfers root hash should have 0 or " + toString(g)) + " bytes, got ") + toString(aR))) | |
222 | + | if ((aS == aS)) | |
217 | 223 | then { | |
218 | - | let | |
219 | - | BinaryEntry(( | |
224 | + | let aT = (((((toBytes(aG) + toBytes(height)) + fromBase16String(aO)) + toBytes(H)) + aQ) + toBytes(aM)) | |
225 | + | BinaryEntry((r + D), aT) | |
220 | 226 | } | |
221 | 227 | else throw("Strict value is not equal to itself.") | |
222 | 228 | } | |
223 | 229 | ||
224 | 230 | ||
225 | - | func | |
226 | - | let | |
227 | - | if ($isInstanceOf( | |
231 | + | func aU (K,H) = { | |
232 | + | let B = getInteger(J(H, K)) | |
233 | + | if ($isInstanceOf(B, "Int")) | |
228 | 234 | then { | |
229 | - | let | |
230 | - | | |
235 | + | let aV = B | |
236 | + | aV | |
231 | 237 | } | |
232 | 238 | else { | |
233 | - | let | |
234 | - | | |
239 | + | let aW = getStringValue(((("chain" + toString(H)) + "LastMinedBy") + toString(K))) | |
240 | + | aC(aW)._1 | |
235 | 241 | } | |
236 | 242 | } | |
237 | 243 | ||
238 | 244 | ||
239 | - | let | |
240 | - | let | |
241 | - | let | |
242 | - | if ($isInstanceOf( | |
245 | + | let aX = { | |
246 | + | let aY = { | |
247 | + | let B = lastBlock.vrf | |
248 | + | if ($isInstanceOf(B, "ByteVector")) | |
243 | 249 | then { | |
244 | - | let | |
245 | - | | |
250 | + | let aZ = B | |
251 | + | aZ | |
246 | 252 | } | |
247 | 253 | else lastBlock.generationSignature | |
248 | 254 | } | |
249 | - | func | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | if (if ((c > | |
255 | + | func ba (bb,K) = { | |
256 | + | let bc = bb | |
257 | + | let bd = bc._1 | |
258 | + | let be = bc._2 | |
259 | + | let bf = bc._3 | |
260 | + | let bg = bc._4 | |
261 | + | let bh = addressFromStringValue(K) | |
262 | + | let bi = wavesBalance(bh).generating | |
263 | + | let bj = aj(bh) | |
264 | + | if (if ((c > bi)) | |
259 | 265 | then true | |
260 | - | else (0 >= | |
261 | - | then | |
266 | + | else (0 >= bj)) | |
267 | + | then bb | |
262 | 268 | else { | |
263 | - | let | |
264 | - | if (( | |
265 | - | then $Tuple4( | |
266 | - | else $Tuple4( | |
269 | + | let bk = calculateDelay(bh, bj) | |
270 | + | if ((bf > bk)) | |
271 | + | then $Tuple4(K, (be + bj), bk, (bg :+ K)) | |
272 | + | else $Tuple4(bd, (be + bj), bf, (bg :+ K)) | |
267 | 273 | } | |
268 | 274 | } | |
269 | 275 | ||
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | func | |
274 | - | then | |
275 | - | else | |
276 | + | let bl = aA | |
277 | + | let bm = size(bl) | |
278 | + | let bn = $Tuple4("", 0, a, nil) | |
279 | + | func bo (bp,bq) = if ((bq >= bm)) | |
280 | + | then bp | |
281 | + | else ba(bp, bl[bq]) | |
276 | 282 | ||
277 | - | func | |
278 | - | then | |
283 | + | func br (bp,bq) = if ((bq >= bm)) | |
284 | + | then bp | |
279 | 285 | else throw("List size exceeds 50") | |
280 | 286 | ||
281 | - | bo( | |
287 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
282 | 288 | } | |
283 | 289 | ||
284 | - | let | |
290 | + | let bs = aX._1 | |
285 | 291 | ||
286 | - | let | |
292 | + | let bt = aX._2 | |
287 | 293 | ||
288 | - | let | |
294 | + | let bu = aC(as) | |
289 | 295 | ||
290 | - | let | |
296 | + | let bv = bu._1 | |
291 | 297 | ||
292 | - | let | |
298 | + | let bw = bu._2 | |
293 | 299 | ||
294 | - | func bu (bv,bw,bx) = { | |
295 | - | let by = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
296 | - | let bz = (bq / 2) | |
297 | - | func bA (aY,bB) = { | |
298 | - | let bC = aY | |
299 | - | let bD = bC._1 | |
300 | - | let bE = bC._2 | |
301 | - | let bF = bC._3 | |
302 | - | let bd = bC._4 | |
303 | - | let y = bE | |
304 | - | if ($isInstanceOf(y, "Unit")) | |
300 | + | func bx (by,bz,bA) = { | |
301 | + | let bB = (bt / 2) | |
302 | + | func bC (bb,bD) = { | |
303 | + | let bE = bb | |
304 | + | let bF = bE._1 | |
305 | + | let bG = bE._2 | |
306 | + | let bH = bE._3 | |
307 | + | let bg = bE._4 | |
308 | + | let B = bG | |
309 | + | if ($isInstanceOf(B, "Unit")) | |
305 | 310 | then { | |
306 | - | let | |
307 | - | then $Tuple3( | |
308 | - | else value( | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | if (if (( | |
311 | + | let bI = if ((bF == height)) | |
312 | + | then $Tuple3(by, bz, bA) | |
313 | + | else value(at(bF)) | |
314 | + | let K = bI._1 | |
315 | + | let bJ = bI._2 | |
316 | + | let bK = bI._3 | |
317 | + | if (if ((bJ == 0)) | |
313 | 318 | then true | |
314 | - | else ((height - | |
315 | - | then $Tuple4( | |
319 | + | else ((height - bF) >= 100)) | |
320 | + | then $Tuple4(bF, bK, bH, aA) | |
316 | 321 | else { | |
317 | - | let | |
318 | - | then $Tuple2( | |
319 | - | else $Tuple2(( | |
320 | - | let | |
321 | - | let | |
322 | - | if (( | |
323 | - | then $Tuple4( | |
324 | - | else $Tuple4( | |
322 | + | let bL = if (containsElement(bg, K)) | |
323 | + | then $Tuple2(bH, bg) | |
324 | + | else $Tuple2((bH + aj(K)), K :: bg) | |
325 | + | let bM = bL._1 | |
326 | + | let bN = bL._2 | |
327 | + | if ((bM > bB)) | |
328 | + | then $Tuple4(bF, bK, bM, aA) | |
329 | + | else $Tuple4(bJ, unit, bM, bN) | |
325 | 330 | } | |
326 | 331 | } | |
327 | - | else | |
332 | + | else bb | |
328 | 333 | } | |
329 | 334 | ||
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | func | |
335 | - | then | |
336 | - | else | |
335 | + | let bO = { | |
336 | + | let bl = l | |
337 | + | let bm = size(bl) | |
338 | + | let bn = $Tuple4(height, unit, 0, nil) | |
339 | + | func bo (bp,bq) = if ((bq >= bm)) | |
340 | + | then bp | |
341 | + | else bC(bp, bl[bq]) | |
337 | 342 | ||
338 | - | func | |
339 | - | then | |
343 | + | func br (bp,bq) = if ((bq >= bm)) | |
344 | + | then bp | |
340 | 345 | else throw("List size exceeds 100") | |
341 | 346 | ||
342 | - | bo( | |
347 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
343 | 348 | } | |
344 | - | let bN = bM._1 | |
345 | - | let bO = bM._2 | |
346 | - | let y = bO | |
347 | - | if ($isInstanceOf(y, "String")) | |
348 | - | then { | |
349 | - | let bP = y | |
350 | - | bP | |
351 | - | } | |
352 | - | else value(aq(bN))._3 | |
349 | + | let bP = bO._1 | |
350 | + | let bQ = bO._2 | |
351 | + | $Tuple2({ | |
352 | + | let B = bQ | |
353 | + | if ($isInstanceOf(B, "String")) | |
354 | + | then { | |
355 | + | let bR = B | |
356 | + | bR | |
357 | + | } | |
358 | + | else value(at(bP))._3 | |
359 | + | }, bP) | |
353 | 360 | } | |
354 | 361 | ||
355 | 362 | ||
356 | - | func | |
357 | - | func | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | let | |
362 | - | if (containsElement( | |
363 | - | then | |
363 | + | func bS (H) = { | |
364 | + | func bT (bU,bV) = { | |
365 | + | let bW = bU | |
366 | + | let bH = bW._1 | |
367 | + | let bX = bW._2 | |
368 | + | let bY = addressFromStringValue(bV) | |
369 | + | if (containsElement(bX, bY)) | |
370 | + | then bU | |
364 | 371 | else { | |
365 | - | let | |
366 | - | $Tuple2(( | |
372 | + | let bZ = aj(bY) | |
373 | + | $Tuple2((bH + bZ), (bX :+ bY)) | |
367 | 374 | } | |
368 | 375 | } | |
369 | 376 | ||
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | func | |
376 | - | then | |
377 | - | else | |
377 | + | let ca = split_4C(getStringValue(M(H)), d) | |
378 | + | let cb = { | |
379 | + | let bl = ca | |
380 | + | let bm = size(bl) | |
381 | + | let bn = $Tuple2(0, nil) | |
382 | + | func bo (bp,bq) = if ((bq >= bm)) | |
383 | + | then bp | |
384 | + | else bT(bp, bl[bq]) | |
378 | 385 | ||
379 | - | func | |
380 | - | then | |
386 | + | func br (bp,bq) = if ((bq >= bm)) | |
387 | + | then bp | |
381 | 388 | else throw("List size exceeds 100") | |
382 | 389 | ||
383 | - | bo( | |
390 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
384 | 391 | } | |
385 | - | let bX = bZ._1 | |
386 | - | let ca = bZ._2 | |
387 | - | bX | |
392 | + | cb._1 | |
388 | 393 | } | |
389 | 394 | ||
390 | 395 | ||
391 | - | func | |
396 | + | func cc () = isDefined(getInteger(q)) | |
392 | 397 | ||
393 | 398 | ||
394 | - | func | |
395 | - | then throw(((((toBase58String( | |
399 | + | func cd (bY) = if ((toString(bY) != bs)) | |
400 | + | then throw(((((toBase58String(bY.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bs)) | |
396 | 401 | else unit | |
397 | 402 | ||
398 | 403 | ||
399 | - | func | |
404 | + | func ce (cf,cg) = if ((cf == cg)) | |
400 | 405 | then unit | |
401 | - | else throw(((("Expected a reference to the chain last block: 0x" + | |
406 | + | else throw(((("Expected a reference to the chain last block: 0x" + cg) + ". Got: 0x") + cf)) | |
402 | 407 | ||
403 | 408 | ||
404 | - | func | |
405 | - | let | |
406 | - | let | |
407 | - | if (( | |
409 | + | func ch (H) = { | |
410 | + | let ci = getStringValue(G(H)) | |
411 | + | let cj = valueOrElse(getInteger(p), 0) | |
412 | + | if ((cj > H)) | |
408 | 413 | then true | |
409 | - | else ( | |
414 | + | else (aC(getStringValue(s))._1 > aC(ci)._1) | |
410 | 415 | } | |
411 | 416 | ||
412 | 417 | ||
413 | - | func | |
418 | + | func ck (K) = valueOrElse(getInteger(R(K)), getInteger(("chainIdOf" + toString(K)))) | |
414 | 419 | ||
415 | 420 | ||
416 | - | func | |
417 | - | let | |
418 | - | let | |
419 | - | if ($isInstanceOf( | |
421 | + | func cl (bY,cm,cn) = { | |
422 | + | let co = { | |
423 | + | let B = cn | |
424 | + | if ($isInstanceOf(B, "String")) | |
420 | 425 | then { | |
421 | - | let | |
422 | - | let | |
423 | - | (( | |
426 | + | let aW = B | |
427 | + | let cp = aU(bY, ap) | |
428 | + | ((aC(aW)._1 + 1) > cp) | |
424 | 429 | } | |
425 | 430 | else true | |
426 | 431 | } | |
427 | - | let | |
428 | - | if ($isInstanceOf( | |
432 | + | let B = ck(bY) | |
433 | + | if ($isInstanceOf(B, "Int")) | |
429 | 434 | then { | |
430 | - | let | |
431 | - | if (if (( | |
435 | + | let cq = B | |
436 | + | if (if ((cq == cm)) | |
432 | 437 | then true | |
433 | - | else if ( | |
434 | - | then | |
438 | + | else if (ch(cq)) | |
439 | + | then co | |
435 | 440 | else false) | |
436 | 441 | then unit | |
437 | - | else throw(("miner is mining other chain " + toString( | |
442 | + | else throw(("miner is mining other chain " + toString(cq))) | |
438 | 443 | } | |
439 | 444 | else unit | |
440 | 445 | } | |
441 | 446 | ||
442 | 447 | ||
443 | - | let | |
448 | + | let cr = (" at height " + toString(height)) | |
444 | 449 | ||
445 | - | func | |
450 | + | func cs (ct) = valueOrErrorMessage(valueOrErrorMessage(blockInfoByHeight(ct), ("last block is not available" + cr)).vrf, ("VRF is not available" + cr)) | |
446 | 451 | ||
447 | 452 | ||
448 | - | func | |
449 | - | let | |
450 | - | if (( | |
453 | + | func cu (cv) = { | |
454 | + | let cw = cs(height) | |
455 | + | if ((cv == cw)) | |
451 | 456 | then unit | |
452 | - | else throw((((("Expected VRF " + toBase58String( | |
457 | + | else throw((((("Expected VRF " + toBase58String(cv)) + " does not match actual ") + toBase58String(cw)) + cr)) | |
453 | 458 | } | |
454 | 459 | ||
455 | 460 | ||
456 | - | func | |
457 | - | let | |
458 | - | let | |
459 | - | if (containsElement( | |
461 | + | func cx (H,bY) = { | |
462 | + | let cy = getStringValue(M(H)) | |
463 | + | let cz = split_4C(cy, d) | |
464 | + | if (containsElement(cz, toString(bY))) | |
460 | 465 | then nil | |
461 | - | else [StringEntry( | |
466 | + | else [StringEntry(M(H), ((cy + d) + toString(bY)))] | |
462 | 467 | } | |
463 | 468 | ||
464 | 469 | ||
465 | - | func | |
466 | - | then throw(("Can't withdraw at negative index: " + toString( | |
470 | + | func cA (cB,U) = if ((0 > U)) | |
471 | + | then throw(("Can't withdraw at negative index: " + toString(U))) | |
467 | 472 | else { | |
468 | - | let | |
469 | - | if (( | |
473 | + | let cC = size(cB) | |
474 | + | if ((U >= cC)) | |
470 | 475 | then { | |
471 | - | let | |
472 | - | if (( | |
473 | - | then throw((("Can't add " + toString( | |
474 | - | else (( | |
476 | + | let cD = (U - cC) | |
477 | + | if ((cD > size(k))) | |
478 | + | then throw((("Can't add " + toString(cD)) + " empty flags. Contact with developers")) | |
479 | + | else ((cB + take(k, cD)) + "1") | |
475 | 480 | } | |
476 | 481 | else { | |
477 | - | let | |
478 | - | let | |
479 | - | if (( | |
480 | - | then ((take( | |
481 | - | else throw((("Transfer #" + toString( | |
482 | + | let cE = drop(cB, U) | |
483 | + | let cF = take(cE, 1) | |
484 | + | if ((cF == "0")) | |
485 | + | then ((take(cB, U) + "1") + drop(cE, 1)) | |
486 | + | else throw((("Transfer #" + toString(U)) + " has been already taken")) | |
482 | 487 | } | |
483 | 488 | } | |
484 | 489 | ||
485 | 490 | ||
486 | - | func | |
487 | - | let | |
488 | - | if ((size( | |
491 | + | func cG (cH) = { | |
492 | + | let cI = fromBase16String(cH) | |
493 | + | if ((size(cI) != e)) | |
489 | 494 | then throw("invalid block id length") | |
490 | - | else | |
495 | + | else cH | |
491 | 496 | } | |
492 | 497 | ||
493 | 498 | ||
494 | - | func cI (cJ,cK,bH) = { | |
495 | - | let cL = az(getStringValue(r))._1 | |
496 | - | let cM = bu(cJ, bH, cK) | |
497 | - | if (if ((cM == cK)) | |
499 | + | func cJ (cK,cL,bJ) = { | |
500 | + | let cM = aC(getStringValue(s)) | |
501 | + | let cN = bx(cK, bJ, cL) | |
502 | + | let cO = cN._1 | |
503 | + | let cP = cN._2 | |
504 | + | let cQ = { | |
505 | + | let B = getString(w) | |
506 | + | if ($isInstanceOf(B, "String")) | |
507 | + | then { | |
508 | + | let cR = B | |
509 | + | if ((cP == cM._2)) | |
510 | + | then nil | |
511 | + | else { | |
512 | + | func cS (bU,bD) = if ((bU._1 == cM._2)) | |
513 | + | then bU | |
514 | + | else { | |
515 | + | let cT = at(bU._1) | |
516 | + | if ($isInstanceOf(cT, "(Address, Int, String)")) | |
517 | + | then { | |
518 | + | let aw = cT | |
519 | + | $Tuple2(aw._2, (bU._2 + 1)) | |
520 | + | } | |
521 | + | else bU | |
522 | + | } | |
523 | + | ||
524 | + | let cU = if ((cP == height)) | |
525 | + | then bJ | |
526 | + | else valueOrErrorMessage(at(cP), "no prev epoch for start")._2 | |
527 | + | let cV = { | |
528 | + | let bl = l | |
529 | + | let bm = size(bl) | |
530 | + | let bn = $Tuple2(cU, 1) | |
531 | + | func bo (bp,bq) = if ((bq >= bm)) | |
532 | + | then bp | |
533 | + | else cS(bp, bl[bq]) | |
534 | + | ||
535 | + | func br (bp,bq) = if ((bq >= bm)) | |
536 | + | then bp | |
537 | + | else throw("List size exceeds 100") | |
538 | + | ||
539 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
540 | + | } | |
541 | + | let cW = (cV._2 * getIntegerValue(x)) | |
542 | + | let cX = fromBase58String(getStringValue(t)) | |
543 | + | [Reissue(cX, cW, true), ScriptTransfer(Address(fromBase58String(cR)), cW, cX)] | |
544 | + | } | |
545 | + | } | |
546 | + | else nil | |
547 | + | } | |
548 | + | (cQ ++ (if (if ((cO == cL)) | |
498 | 549 | then true | |
499 | - | else ( | |
500 | - | then [StringEntry( | |
501 | - | else nil | |
550 | + | else (aC(cO)._1 > cM._1)) | |
551 | + | then [StringEntry(s, cO)] | |
552 | + | else nil)) | |
502 | 553 | } | |
503 | 554 | ||
504 | 555 | ||
505 | - | @Callable( | |
506 | - | func extendMainChain ( | |
507 | - | let | |
508 | - | if (( | |
556 | + | @Callable(z) | |
557 | + | func extendMainChain (D,cY,aZ,aP,aM) = { | |
558 | + | let cZ = cG(D) | |
559 | + | if ((cZ == cZ)) | |
509 | 560 | then { | |
510 | - | let | |
511 | - | if (( | |
561 | + | let da = cu(aZ) | |
562 | + | if ((da == da)) | |
512 | 563 | then { | |
513 | - | let | |
514 | - | if (( | |
564 | + | let db = cl(z.originCaller, ap, unit) | |
565 | + | if ((db == db)) | |
515 | 566 | then { | |
516 | - | let | |
517 | - | if (( | |
567 | + | let dc = ce(cY, as) | |
568 | + | if ((dc == dc)) | |
518 | 569 | then { | |
519 | - | let | |
520 | - | if (( | |
570 | + | let dd = Y(aC(cY)._6, aM, true) | |
571 | + | if ((dd == dd)) | |
521 | 572 | then { | |
522 | - | let | |
523 | - | let | |
524 | - | if ($isInstanceOf( | |
525 | - | then StringEntry( | |
573 | + | let de = { | |
574 | + | let B = at(height) | |
575 | + | if ($isInstanceOf(B, "Unit")) | |
576 | + | then StringEntry(E(height), ((((toString(z.originCaller) + d) + toString(bw)) + d) + D)) | |
526 | 577 | else { | |
527 | - | let | |
578 | + | let df = B | |
528 | 579 | throw("Epoch already started") | |
529 | 580 | } | |
530 | 581 | } | |
531 | - | if (( | |
582 | + | if ((de == de)) | |
532 | 583 | then { | |
533 | - | let | |
534 | - | if (( | |
584 | + | let dg = cd(z.originCaller) | |
585 | + | if ((dg == dg)) | |
535 | 586 | then { | |
536 | - | let | |
537 | - | let | |
538 | - | ([ | |
587 | + | let dh = cJ(z.originCaller, D, bw) | |
588 | + | let ao = (ar + 1) | |
589 | + | ([aN(D, ao, as, ap, aP, aM), an(ap, ao, D), IntegerEntry(R(z.originCaller), ap), IntegerEntry(J(ap, z.originCaller), ao), de] ++ dh) | |
539 | 590 | } | |
540 | 591 | else throw("Strict value is not equal to itself.") | |
541 | 592 | } | |
542 | 593 | else throw("Strict value is not equal to itself.") | |
543 | 594 | } | |
544 | 595 | else throw("Strict value is not equal to itself.") | |
545 | 596 | } | |
546 | 597 | else throw("Strict value is not equal to itself.") | |
547 | 598 | } | |
548 | 599 | else throw("Strict value is not equal to itself.") | |
549 | 600 | } | |
550 | 601 | else throw("Strict value is not equal to itself.") | |
551 | 602 | } | |
552 | 603 | else throw("Strict value is not equal to itself.") | |
553 | 604 | } | |
554 | 605 | ||
555 | 606 | ||
556 | 607 | ||
557 | - | @Callable( | |
558 | - | func startAltChain ( | |
559 | - | let | |
560 | - | if (( | |
608 | + | @Callable(z) | |
609 | + | func startAltChain (D,cY,aZ,aP,aM) = { | |
610 | + | let cZ = cG(D) | |
611 | + | if ((cZ == cZ)) | |
561 | 612 | then { | |
562 | - | let | |
563 | - | if (( | |
613 | + | let da = cu(aZ) | |
614 | + | if ((da == da)) | |
564 | 615 | then { | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | let | |
569 | - | let | |
570 | - | let | |
571 | - | let | |
572 | - | let | |
573 | - | let | |
574 | - | then | |
575 | - | else throw((((("Can not start alt chain from epoch " + toString( | |
576 | - | let | |
577 | - | if (( | |
616 | + | let di = aC(cY) | |
617 | + | let dj = di._1 | |
618 | + | let dk = di._2 | |
619 | + | let dl = di._3 | |
620 | + | let dm = di._4 | |
621 | + | let dn = di._5 | |
622 | + | let Z = di._6 | |
623 | + | let bP = aC(getStringValue(s))._2 | |
624 | + | let do = if ((dk >= bP)) | |
625 | + | then dk | |
626 | + | else throw((((("Can not start alt chain from epoch " + toString(dk)) + ", epoch ") + toString(bP)) + " is finalized")) | |
627 | + | let db = cl(z.originCaller, ap, cY) | |
628 | + | if ((db == db)) | |
578 | 629 | then { | |
579 | - | let | |
580 | - | if (( | |
630 | + | let dd = Y(Z, aM, true) | |
631 | + | if ((dd == dd)) | |
581 | 632 | then { | |
582 | - | let | |
583 | - | let | |
584 | - | let | |
585 | - | let | |
586 | - | if ($isInstanceOf( | |
587 | - | then StringEntry( | |
633 | + | let dp = (valueOrElse(getInteger(o), 0) + 1) | |
634 | + | let ao = (dj + 1) | |
635 | + | let de = { | |
636 | + | let B = at(height) | |
637 | + | if ($isInstanceOf(B, "Unit")) | |
638 | + | then StringEntry(E(height), ((((toString(z.originCaller) + d) + toString(do)) + d) + D)) | |
588 | 639 | else { | |
589 | - | let | |
640 | + | let df = B | |
590 | 641 | throw("Epoch already started") | |
591 | 642 | } | |
592 | 643 | } | |
593 | - | let | |
594 | - | if (( | |
595 | - | then [ | |
644 | + | let dg = cd(z.originCaller) | |
645 | + | if ((dg == dg)) | |
646 | + | then [de, aN(D, ao, cY, dp, aP, aM), StringEntry(G(dp), D), an(dp, ao, D), IntegerEntry(R(z.originCaller), dp), IntegerEntry(J(dp, z.originCaller), ao), IntegerEntry(J(ap, z.originCaller), ao), StringEntry(M(dp), toString(z.originCaller)), IntegerEntry(o, dp)] | |
596 | 647 | else throw("Strict value is not equal to itself.") | |
597 | 648 | } | |
598 | 649 | else throw("Strict value is not equal to itself.") | |
599 | 650 | } | |
600 | 651 | else throw("Strict value is not equal to itself.") | |
601 | 652 | } | |
602 | 653 | else throw("Strict value is not equal to itself.") | |
603 | 654 | } | |
604 | 655 | else throw("Strict value is not equal to itself.") | |
605 | 656 | } | |
606 | 657 | ||
607 | 658 | ||
608 | 659 | ||
609 | - | @Callable( | |
610 | - | func extendAltChain ( | |
611 | - | let | |
612 | - | if (( | |
660 | + | @Callable(z) | |
661 | + | func extendAltChain (D,cY,aZ,H,aP,aM) = { | |
662 | + | let cZ = cG(D) | |
663 | + | if ((cZ == cZ)) | |
613 | 664 | then { | |
614 | - | let | |
615 | - | if (( | |
665 | + | let da = cu(aZ) | |
666 | + | if ((da == da)) | |
616 | 667 | then { | |
617 | - | let | |
618 | - | let | |
619 | - | if (( | |
668 | + | let dq = aC(getStringValue(G(H))) | |
669 | + | let db = cl(z.originCaller, H, toBase16String(dq._3)) | |
670 | + | if ((db == db)) | |
620 | 671 | then { | |
621 | - | let | |
622 | - | let | |
623 | - | let | |
624 | - | let | |
625 | - | if (( | |
672 | + | let dr = al(H) | |
673 | + | let ds = dr._1 | |
674 | + | let dt = dr._2 | |
675 | + | let dc = ce(cY, dt) | |
676 | + | if ((dc == dc)) | |
626 | 677 | then { | |
627 | - | let | |
628 | - | if (( | |
678 | + | let dd = Y(aC(cY)._6, aM, true) | |
679 | + | if ((dd == dd)) | |
629 | 680 | then { | |
630 | - | let | |
631 | - | let | |
632 | - | let | |
681 | + | let ao = (ds + 1) | |
682 | + | let bJ = aC(cY)._2 | |
683 | + | let du = if ((bS(H) > (bt / 2))) | |
633 | 684 | then { | |
634 | - | let | |
635 | - | let | |
636 | - | ([IntegerEntry( | |
685 | + | let dv = valueOrElse(getInteger(o), 0) | |
686 | + | let dh = cJ(z.originCaller, D, bJ) | |
687 | + | ([IntegerEntry(L(ap), dq._1), IntegerEntry(n, H), IntegerEntry(p, (dv + 1))] ++ dh) | |
637 | 688 | } | |
638 | 689 | else nil | |
639 | - | let | |
640 | - | let | |
641 | - | if ($isInstanceOf( | |
642 | - | then StringEntry( | |
690 | + | let de = { | |
691 | + | let B = at(height) | |
692 | + | if ($isInstanceOf(B, "Unit")) | |
693 | + | then StringEntry(E(height), ((((toString(z.originCaller) + d) + toString(bJ)) + d) + D)) | |
643 | 694 | else { | |
644 | - | let | |
695 | + | let df = B | |
645 | 696 | throw("Epoch already started") | |
646 | 697 | } | |
647 | 698 | } | |
648 | - | if (( | |
699 | + | if ((de == de)) | |
649 | 700 | then { | |
650 | - | let | |
651 | - | if (( | |
701 | + | let dg = cd(z.originCaller) | |
702 | + | if ((dg == dg)) | |
652 | 703 | then { | |
653 | - | let | |
654 | - | then (valueOrElse( | |
704 | + | let dw = if (if ((du == nil)) | |
705 | + | then (valueOrElse(ck(z.originCaller), 0) != H) | |
655 | 706 | else false) | |
656 | - | then [IntegerEntry( | |
707 | + | then [IntegerEntry(J(ap, z.originCaller), dq._1)] | |
657 | 708 | else nil | |
658 | - | ((([ | |
709 | + | ((([aN(D, ao, cY, H, aP, aM), an(H, ao, D), de, IntegerEntry(R(z.originCaller), H), IntegerEntry(J(H, z.originCaller), ao)] ++ du) ++ cx(H, z.originCaller)) ++ dw) | |
659 | 710 | } | |
660 | 711 | else throw("Strict value is not equal to itself.") | |
661 | 712 | } | |
662 | 713 | else throw("Strict value is not equal to itself.") | |
663 | 714 | } | |
664 | 715 | else throw("Strict value is not equal to itself.") | |
665 | 716 | } | |
666 | 717 | else throw("Strict value is not equal to itself.") | |
667 | 718 | } | |
668 | 719 | else throw("Strict value is not equal to itself.") | |
669 | 720 | } | |
670 | 721 | else throw("Strict value is not equal to itself.") | |
671 | 722 | } | |
672 | 723 | else throw("Strict value is not equal to itself.") | |
673 | 724 | } | |
674 | 725 | ||
675 | 726 | ||
676 | 727 | ||
677 | - | @Callable( | |
678 | - | func appendBlock ( | |
679 | - | let | |
728 | + | @Callable(z) | |
729 | + | func appendBlock (D,cY,aP,aM) = { | |
730 | + | let dx = if ((ax == z.originCaller)) | |
680 | 731 | then true | |
681 | 732 | else { | |
682 | - | let | |
683 | - | if ($isInstanceOf( | |
733 | + | let B = ax | |
734 | + | if ($isInstanceOf(B, "Address")) | |
684 | 735 | then { | |
685 | - | let | |
686 | - | throw(("not allowed to forge blocks in this epoch, expected from " + toString( | |
736 | + | let dy = B | |
737 | + | throw(("not allowed to forge blocks in this epoch, expected from " + toString(dy))) | |
687 | 738 | } | |
688 | 739 | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
689 | 740 | } | |
690 | - | if (( | |
741 | + | if ((dx == dx)) | |
691 | 742 | then { | |
692 | - | let | |
693 | - | let | |
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | if (( | |
743 | + | let H = valueOrElse(ck(z.originCaller), ap) | |
744 | + | let dz = al(H) | |
745 | + | let ds = dz._1 | |
746 | + | let dA = dz._2 | |
747 | + | let dc = ce(cY, dA) | |
748 | + | if ((dc == dc)) | |
698 | 749 | then { | |
699 | - | let | |
700 | - | if (( | |
750 | + | let dd = Y(aC(cY)._6, aM, false) | |
751 | + | if ((dd == dd)) | |
701 | 752 | then { | |
702 | - | let | |
703 | - | let | |
704 | - | if (( | |
705 | - | then [ | |
753 | + | let ao = (ds + 1) | |
754 | + | let cZ = cG(D) | |
755 | + | if ((cZ == cZ)) | |
756 | + | then [aN(D, ao, dA, H, aP, aM), IntegerEntry(J(H, z.originCaller), ao), an(H, ao, D), StringEntry(E(height), ((((toString(value(ax)) + d) + toString(ay)) + d) + D))] | |
706 | 757 | else throw("Strict value is not equal to itself.") | |
707 | 758 | } | |
708 | 759 | else throw("Strict value is not equal to itself.") | |
709 | 760 | } | |
710 | 761 | else throw("Strict value is not equal to itself.") | |
711 | 762 | } | |
712 | 763 | else throw("Strict value is not equal to itself.") | |
713 | 764 | } | |
714 | 765 | ||
715 | 766 | ||
716 | 767 | ||
717 | - | @Callable( | |
718 | - | func join ( | |
719 | - | func | |
720 | - | let | |
721 | - | if ($isInstanceOf( | |
768 | + | @Callable(z) | |
769 | + | func join (dB) = { | |
770 | + | func dC (dD) = { | |
771 | + | let B = getBinary(P(dD)) | |
772 | + | if ($isInstanceOf(B, "ByteVector")) | |
722 | 773 | then { | |
723 | - | let | |
724 | - | if (( | |
774 | + | let dE = B | |
775 | + | if ((dE == z.originCallerPublicKey)) | |
725 | 776 | then unit | |
726 | - | else throw(((("EL miner address " + | |
777 | + | else throw(((("EL miner address " + dD) + " is already linked with ") + toBase58String(dE))) | |
727 | 778 | } | |
728 | 779 | else unit | |
729 | 780 | } | |
730 | 781 | ||
731 | - | let | |
732 | - | let | |
733 | - | if (!( | |
782 | + | let dF = split(dB, "0x") | |
783 | + | let Q = fromBase16String(dF[(size(dF) - 1)]) | |
784 | + | if (!(cc())) | |
734 | 785 | then throw("The contract has not yet set up") | |
735 | - | else if ((c > wavesBalance( | |
736 | - | then throw(((("Insufficient generating balance: " + toString(wavesBalance( | |
737 | - | else if ((size( | |
786 | + | else if ((c > wavesBalance(z.originCaller).generating)) | |
787 | + | then throw(((("Insufficient generating balance: " + toString(wavesBalance(z.originCaller).generating)) + ". Required: ") + toString(c))) | |
788 | + | else if ((size(Q) != 20)) | |
738 | 789 | then throw("rewardAddress should be an L2 address") | |
739 | - | else if ((size( | |
790 | + | else if ((size(aA) >= 50)) | |
740 | 791 | then throw("too many miners") | |
741 | 792 | else { | |
742 | - | func | |
793 | + | func dG (dH,K) = if (dH) | |
743 | 794 | then true | |
744 | - | else ( | |
795 | + | else (K == toString(z.originCaller)) | |
745 | 796 | ||
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | let | |
750 | - | func | |
751 | - | then | |
752 | - | else | |
797 | + | let dI = { | |
798 | + | let bl = aA | |
799 | + | let bm = size(bl) | |
800 | + | let bn = false | |
801 | + | func bo (bp,bq) = if ((bq >= bm)) | |
802 | + | then bp | |
803 | + | else dG(bp, bl[bq]) | |
753 | 804 | ||
754 | - | func | |
755 | - | then | |
805 | + | func br (bp,bq) = if ((bq >= bm)) | |
806 | + | then bp | |
756 | 807 | else throw("List size exceeds 50") | |
757 | 808 | ||
758 | - | bo( | |
809 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
759 | 810 | } | |
760 | - | if ( | |
811 | + | if (dI) | |
761 | 812 | then nil | |
762 | 813 | else { | |
763 | - | let | |
764 | - | let | |
765 | - | let | |
766 | - | if (( | |
814 | + | let dJ = toString(z.originCaller) | |
815 | + | let dK = toBase16String(Q) | |
816 | + | let dL = dC(dK) | |
817 | + | if ((dL == dL)) | |
767 | 818 | then { | |
768 | - | let | |
769 | - | then | |
770 | - | else (( | |
771 | - | let | |
772 | - | let | |
773 | - | if ($isInstanceOf( | |
819 | + | let bN = if ((size(aA) == 0)) | |
820 | + | then dJ | |
821 | + | else ((az + d) + dJ) | |
822 | + | let dM = { | |
823 | + | let B = getString(N(dJ)) | |
824 | + | if ($isInstanceOf(B, "String")) | |
774 | 825 | then { | |
775 | - | let | |
776 | - | if (( | |
826 | + | let dN = B | |
827 | + | if ((dN == toBase16String(Q))) | |
777 | 828 | then nil | |
778 | - | else [DeleteEntry( | |
829 | + | else [DeleteEntry(P(dN))] | |
779 | 830 | } | |
780 | 831 | else nil | |
781 | 832 | } | |
782 | - | ([StringEntry( | |
833 | + | ([StringEntry(m, bN), StringEntry(N(dJ), ("0x" + dK)), BinaryEntry(P(dK), z.originCallerPublicKey)] ++ dM) | |
783 | 834 | } | |
784 | 835 | else throw("Strict value is not equal to itself.") | |
785 | 836 | } | |
786 | 837 | } | |
787 | 838 | } | |
788 | 839 | ||
789 | 840 | ||
790 | 841 | ||
791 | - | @Callable( | |
842 | + | @Callable(z) | |
792 | 843 | func leave () = { | |
793 | - | let | |
794 | - | func | |
795 | - | then | |
796 | - | else ( | |
844 | + | let dO = toString(z.originCaller) | |
845 | + | func dP (bU,K) = if ((K == dO)) | |
846 | + | then bU | |
847 | + | else (bU :+ K) | |
797 | 848 | ||
798 | - | let | |
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | func | |
803 | - | then | |
804 | - | else | |
849 | + | let dQ = { | |
850 | + | let bl = aA | |
851 | + | let bm = size(bl) | |
852 | + | let bn = nil | |
853 | + | func bo (bp,bq) = if ((bq >= bm)) | |
854 | + | then bp | |
855 | + | else dP(bp, bl[bq]) | |
805 | 856 | ||
806 | - | func | |
807 | - | then | |
857 | + | func br (bp,bq) = if ((bq >= bm)) | |
858 | + | then bp | |
808 | 859 | else throw("List size exceeds 50") | |
809 | 860 | ||
810 | - | bo( | |
861 | + | br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
811 | 862 | } | |
812 | - | let | |
813 | - | let | |
814 | - | if (( | |
815 | - | then if (( | |
863 | + | let dR = N(dO) | |
864 | + | let dS = valueOrErrorMessage(getString(this, dR), "miner has never joined") | |
865 | + | if ((dS == dS)) | |
866 | + | then if ((ax == z.originCaller)) | |
816 | 867 | then throw("designated miner can't leave") | |
817 | - | else [StringEntry( | |
868 | + | else [StringEntry(m, makeString_2C(dQ, d))] | |
818 | 869 | else throw("Strict value is not equal to itself.") | |
819 | 870 | } | |
820 | 871 | ||
821 | 872 | ||
822 | 873 | ||
823 | - | @Callable( | |
824 | - | func transfer ( | |
825 | - | let | |
826 | - | then fromBase16String( | |
827 | - | else throw(((("Address should have " + toString(i)) + " characters, got ") + toString(size( | |
828 | - | if (( | |
874 | + | @Callable(z) | |
875 | + | func transfer (W) = { | |
876 | + | let dT = if ((size(W) == i)) | |
877 | + | then fromBase16String(W) | |
878 | + | else throw(((("Address should have " + toString(i)) + " characters, got ") + toString(size(W)))) | |
879 | + | if ((dT == dT)) | |
829 | 880 | then { | |
830 | - | let | |
881 | + | let dU = if ((size(z.payments) == 1)) | |
831 | 882 | then true | |
832 | - | else throw(("Expected one payment as a transfer amount, got " + toString(size( | |
833 | - | if (( | |
883 | + | else throw(("Expected one payment as a transfer amount, got " + toString(size(z.payments)))) | |
884 | + | if ((dU == dU)) | |
834 | 885 | then { | |
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | let | |
839 | - | let | |
840 | - | if ($isInstanceOf( | |
886 | + | let dV = getStringValue(t) | |
887 | + | let cX = fromBase58String(dV) | |
888 | + | let ag = z.payments[0] | |
889 | + | let dW = { | |
890 | + | let B = ag.assetId | |
891 | + | if ($isInstanceOf(B, "ByteVector")) | |
841 | 892 | then { | |
842 | - | let | |
843 | - | if (( | |
893 | + | let dX = B | |
894 | + | if ((dX == cX)) | |
844 | 895 | then true | |
845 | - | else throw(((("Expected " + | |
896 | + | else throw(((("Expected " + dV) + " in the payment, got ") + toBase58String(dX))) | |
846 | 897 | } | |
847 | - | else throw((("Expected " + | |
898 | + | else throw((("Expected " + dV) + " in the payment, got Waves")) | |
848 | 899 | } | |
849 | - | if (( | |
900 | + | if ((dW == dW)) | |
850 | 901 | then { | |
851 | - | let | |
852 | - | let | |
853 | - | let | |
854 | - | then | |
855 | - | else if ((1600 > | |
856 | - | then | |
857 | - | else if ((3200 > | |
858 | - | then | |
859 | - | else if ((6400 > | |
860 | - | then | |
861 | - | else throw((("Transfers denied for queue size of " + toString( | |
862 | - | if (( | |
863 | - | then [IntegerEntry( | |
902 | + | let dY = aC(as)._6 | |
903 | + | let ai = (S - dY) | |
904 | + | let dZ = if ((160 > ai)) | |
905 | + | then af(ag, 1000000, ai) | |
906 | + | else if ((1600 > ai)) | |
907 | + | then af(ag, 10000000, ai) | |
908 | + | else if ((3200 > ai)) | |
909 | + | then af(ag, 100000000, ai) | |
910 | + | else if ((6400 > ai)) | |
911 | + | then af(ag, 1000000000, ai) | |
912 | + | else throw((("Transfers denied for queue size of " + toString(ai)) + ". Wait until current transfers processed")) | |
913 | + | if ((dZ == dZ)) | |
914 | + | then [IntegerEntry(v, (S + 1)), V(S, W, ag.amount), Burn(cX, ag.amount)] | |
864 | 915 | else throw("Strict value is not equal to itself.") | |
865 | 916 | } | |
866 | 917 | else throw("Strict value is not equal to itself.") | |
867 | 918 | } | |
868 | 919 | else throw("Strict value is not equal to itself.") | |
869 | 920 | } | |
870 | 921 | else throw("Strict value is not equal to itself.") | |
871 | 922 | } | |
872 | 923 | ||
873 | 924 | ||
874 | 925 | ||
875 | - | @Callable( | |
876 | - | func withdraw ( | |
877 | - | let | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | if (( | |
882 | - | then throw(((("EL block #" + toString( | |
883 | - | else if ((size( | |
884 | - | then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size( | |
885 | - | else if ((0 > | |
886 | - | then throw(("Transfer index in block should be nonnegative, got " + toString( | |
887 | - | else if ((0 >= | |
888 | - | then throw(("Amount should be positive, got " + toString( | |
926 | + | @Callable(z) | |
927 | + | func withdraw (D,ea,eb,X) = { | |
928 | + | let ec = aC(D) | |
929 | + | let ed = ec._1 | |
930 | + | let ee = aC(getStringValue(s))._1 | |
931 | + | let ef = aC(as)._1 | |
932 | + | if ((ed > ee)) | |
933 | + | then throw(((("EL block #" + toString(ed)) + " is not finalized. The current finalized is #") + toString(ee))) | |
934 | + | else if ((size(ea) != h)) | |
935 | + | then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size(ea)))) | |
936 | + | else if ((0 > eb)) | |
937 | + | then throw(("Transfer index in block should be nonnegative, got " + toString(eb))) | |
938 | + | else if ((0 >= X)) | |
939 | + | then throw(("Amount should be positive, got " + toString(X))) | |
889 | 940 | else { | |
890 | - | let | |
891 | - | let | |
892 | - | let | |
893 | - | let | |
894 | - | if ($isInstanceOf( | |
941 | + | let eg = ec._4 | |
942 | + | let eh = (eg == ap) | |
943 | + | let ei = { | |
944 | + | let B = getInteger(L(eg)) | |
945 | + | if ($isInstanceOf(B, "Int")) | |
895 | 946 | then { | |
896 | - | let | |
897 | - | ( | |
947 | + | let ej = B | |
948 | + | (ej > ed) | |
898 | 949 | } | |
899 | - | else throw(((( | |
950 | + | else throw((((D + " is on an alternative chain #") + toString(eg)) + " that was not approved by majority. Wait for some blocks")) | |
900 | 951 | } | |
901 | - | if (if ( | |
952 | + | if (if (eh) | |
902 | 953 | then true | |
903 | - | else | |
954 | + | else ei) | |
904 | 955 | then { | |
905 | - | let | |
906 | - | let | |
907 | - | let | |
908 | - | let | |
909 | - | let | |
910 | - | let | |
911 | - | let | |
912 | - | let | |
913 | - | if (( | |
956 | + | let ek = z.originCaller | |
957 | + | let el = take(drop(ek.bytes, 2), f) | |
958 | + | let em = base58'11111111111111111111111111111111111111111111' | |
959 | + | let en = toBytes(X) | |
960 | + | let eo = ((el + take(em, (size(em) - size(en)))) + en) | |
961 | + | let ep = blake2b256_16Kb(eo) | |
962 | + | let eq = createMerkleRoot(ea, ep, eb) | |
963 | + | let er = ec._5 | |
964 | + | if ((eq == er)) | |
914 | 965 | then { | |
915 | - | let | |
916 | - | let | |
917 | - | [Reissue( | |
966 | + | let cX = fromBase58String(getStringValue(t)) | |
967 | + | let es = C(D) | |
968 | + | [Reissue(cX, X, true), ScriptTransfer(ek, X, cX), StringEntry(es, cA(valueOrElse(getString(es), ""), eb))] | |
918 | 969 | } | |
919 | - | else throw((((((("Expected root hash: " + toBase16String( | |
970 | + | else throw((((((("Expected root hash: " + toBase16String(er)) + ", got: ") + toBase16String(eq)) + ". Event data digest: ") + toBase64String(ep)) + ". Check your withdraw arguments")) | |
920 | 971 | } | |
921 | - | else throw((("Expected " + | |
972 | + | else throw((("Expected " + D) + " to be either on the main chain or relate to it")) | |
922 | 973 | } | |
923 | 974 | } | |
924 | 975 | ||
925 | 976 | ||
926 | 977 | ||
927 | - | @Callable( | |
928 | - | func setup ( | |
978 | + | @Callable(z) | |
979 | + | func setup (et,eu,ev,ew) = if (cc()) | |
929 | 980 | then throw("The contract has been already set up") | |
930 | - | else if ((0 > | |
981 | + | else if ((0 > eu)) | |
931 | 982 | then throw("The miner reward must be nonnegative") | |
932 | 983 | else { | |
933 | - | let | |
934 | - | let | |
984 | + | let ex = fromBase16String(et) | |
985 | + | let ey = if ((size(ex) == e)) | |
935 | 986 | then true | |
936 | 987 | else throw("Wrong genesis block hash") | |
937 | - | if (( | |
988 | + | if ((ey == ey)) | |
938 | 989 | then { | |
939 | - | let eo = base58'11111111111111111111111111111111' | |
940 | - | let ep = addressFromPublicKey(eo) | |
941 | - | let eq = base58'11111111111111111111' | |
942 | - | let er = "0000000000000000000000000000000000000000000000000000000000000000" | |
943 | - | let es = Issue("UNIT0", "Native token", 0, 8, true) | |
944 | - | let dM = calculateAssetId(es) | |
945 | - | let et = aK(ek, 0, er, 0, toBase16String(base58''), -1) | |
946 | - | [et, StringEntry(D(0), ek), ak(0, 0, ek), IntegerEntry(p, el), StringEntry(B(height), ((toString(ep) + ",0,") + ek)), StringEntry(r, ek), es, StringEntry(s, toBase58String(dM)), StringEntry(t, "0x0000000000000000000000000000000000006a7e")] | |
990 | + | let ez = base58'11111111111111111111111111111111' | |
991 | + | let eA = addressFromPublicKey(ez) | |
992 | + | let eB = base58'11111111111111111111' | |
993 | + | let eC = "0000000000000000000000000000000000000000000000000000000000000000" | |
994 | + | let eD = Issue("UNIT0", "Native token", 0, 8, true) | |
995 | + | let cX = calculateAssetId(eD) | |
996 | + | let eE = aN(et, 0, eC, 0, toBase16String(base58''), -1) | |
997 | + | let eF = if ((ev == "")) | |
998 | + | then nil | |
999 | + | else [StringEntry(w, toString(Address(fromBase58String(ev)))), IntegerEntry(x, if ((ew > 0)) | |
1000 | + | then ew | |
1001 | + | else throw("invalid DAO reward amount"))] | |
1002 | + | ([eE, StringEntry(G(0), et), an(0, 0, et), IntegerEntry(q, eu), StringEntry(E(height), ((toString(eA) + ",0,") + et)), StringEntry(s, et), eD, StringEntry(t, toBase58String(cX)), StringEntry(u, "0x0000000000000000000000000000000000006a7e")] ++ eF) | |
947 | 1003 | } | |
948 | 1004 | else throw("Strict value is not equal to itself.") | |
949 | 1005 | } | |
950 | 1006 | ||
951 | 1007 |
github/deemru/w8io/169f3d6 603.07 ms ◑