tx · EKSesAnP68WHkuQ7YVvgEicae27p2jtHiVbgJ3s3rZkg

3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX:  -0.14000000 Waves

2022.12.13 12:25 [2358366] smart account 3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX > SELF 0.00000000 Waves

{ "type": 13, "id": "EKSesAnP68WHkuQ7YVvgEicae27p2jtHiVbgJ3s3rZkg", "fee": 14000000, "feeAssetId": null, "timestamp": 1670923532203, "version": 2, "chainId": 84, "sender": "3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX", "senderPublicKey": "BjnLnkAMaJLYAK36vQqSepUNjGeMDHfZGfmdYwGcLbmg", "proofs": [ "2aZSTB5GeXBzBFJex6dD3bAz3pKHY9pviiCoAJBMVF6pHxavp7XNug23UaCP4rLfvhV77p3V7ZqkzoThps2CkNss", "q5ftxmMeZjGyeLBNr6ruSF1ys6TGZj1i6KFfmXYC4ub62e7T5eeGjKpAYBujkqrYgVVSunguGcyMwsMSDYksF3u" ], "script": "base64:BgJJCAISAwoBBBIECgIEARIGCgQBAQQBEgMKAQESBgoEAQgBARIECgIBARIDCgEBEgASABIAEgMKAQESBQoDBAEIEgASBAoCAQESAGoAB3ZlcnNpb24CBTIuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMACWtBc3NldElkQQIKQV9hc3NldF9pZAAJa0Fzc2V0SWRCAgpCX2Fzc2V0X2lkAAlrQmFsYW5jZUECD0FfYXNzZXRfYmFsYW5jZQAJa0JhbGFuY2VCAg9CX2Fzc2V0X2JhbGFuY2UADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkABFrU2hhcmVBc3NldFN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AARrRmVlAgpjb21taXNzaW9uAAprSW52YXJpYW50AglpbnZhcmlhbnQABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAxrRVVSTkFkZHJlc3MCFHN0YWtpbmdfZXVybl9hZGRyZXNzAAprRGlzY291bnRzAglkaXNjb3VudHMAD2tEaXNjb3VudFZhbHVlcwIPZGlzY291bnRfdmFsdWVzAA5rVXNlclN3b3BJbkdvdgIMX1NXT1BfYW1vdW50AA9rVXNlckdTd29wSW5Hb3YCDV9HU3dvcF9hbW91bnQADWtGaXJzdEhhcnZlc3QCDWZpcnN0X2hhcnZlc3QAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAtrU2hhcmVMaW1pdAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAAOa0RBcHBUaHJlc2hvbGQCDmRBcHBfdGhyZXNob2xkAA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zABJrQWRtaW5JbnZva2VQdWJLZXkCEGFkbWluX2ludm9rZV9wdWIAEGtNb25leUJveEFkZHJlc3MCEW1vbmV5X2JveF9hZGRyZXNzAAtrR292QWRkcmVzcwISZ292ZXJuYW5jZV9hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAAxrVVNETkFzc2V0SWQCDXVzZG5fYXNzZXRfaWQADmtTdGFraW5nQXNzZXRzAg5zdGFraW5nX2Fzc2V0cwAGb3JhY2xlCQEHQWRkcmVzcwEBGgFUSBOXDMDTM8wlMoC2KfenZGiAq+PMe0uZARNnZXRCYXNlNThGcm9tT3JhY2xlAQNrZXkEByRtYXRjaDAJAJ0IAgUGb3JhY2xlBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAJANkEAQUGc3RyaW5nBAdub3RoaW5nBQckbWF0Y2gwCQACAQkArAICBQNrZXkCCGlzIGVtcHR5AAxhZG1pblB1YktleTEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MQAMYWRtaW5QdWJLZXkyCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTIADGFkbWluUHViS2V5MwkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkzABFhZG1pblB1YktleUludm9rZQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRJrQWRtaW5JbnZva2VQdWJLZXkAD21vbmV5Qm94QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEGtNb25leUJveEFkZHJlc3MACmdvdkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrR292QWRkcmVzcwASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5BZGRyZXNzAA12b3RpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUOa1ZvdGluZ0FkZHJlc3MADmZhcm1pbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUPa0Zhcm1pbmdBZGRyZXNzAARVU0ROCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQXNzZXRJZAANc3Rha2luZ0Fzc2V0cwkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ5rU3Rha2luZ0Fzc2V0cwAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFC2tCYXNlUGVyaW9kAhFFbXB0eSBrQmFzZVBlcmlvZAALc3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQxrU3RhcnRIZWlnaHQCEkVtcHR5IGtTdGFydEhlaWdodAAMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUNa1BlcmlvZExlbmd0aAITRW1wdHkga1BlcmlvZExlbmd0aAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kCQBkAgkAZAIFCmJhc2VQZXJpb2QJAGkCCQBlAgUGaGVpZ2h0BQtzdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAMABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgALc3RyQXNzZXRJZEEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFCWtBc3NldElkQQALc3RyQXNzZXRJZEIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFCWtBc3NldElkQgAIYXNzZXRJZEEDCQAAAgULc3RyQXNzZXRJZEECBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRBAAhhc3NldElkQgMJAAACBQtzdHJBc3NldElkQgIFV0FWRVMFBHVuaXQJANkEAQULc3RyQXNzZXRJZEIACmFzc2V0TmFtZUEEByRtYXRjaDAFCGFzc2V0SWRBAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCAkBBXZhbHVlAQkA7AcBBQJpZARuYW1lAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAAphc3NldE5hbWVCBAckbWF0Y2gwBQhhc3NldElkQgMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAgJAQV2YWx1ZQEJAOwHAQUCaWQEbmFtZQMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgAIYmFsYW5jZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFCWtCYWxhbmNlQQAIYmFsYW5jZUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFCWtCYWxhbmNlQgAMc2hhcmVBc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDWtTaGFyZUFzc2V0SWQAEHNoYXJlQXNzZXRTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlpbnZhcmlhbnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFCmtJbnZhcmlhbnQAA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUEa0ZlZQANZmVlR292ZXJuYW5jZQkAawMFA2ZlZQAoAGQACWZlZVNjYWxlNgDAhD0ABnNjYWxlMwDoBwAGc2NhbGU4AIDC1y8AB3NjYWxlMTYAgICE/qbe4REAB2RpZ2l0czgACAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWluAIDokiYAFWV4Y2hhbmdlUmF0aW9MaW1pdE1heACAnJw5AAVhbHBoYQAyAAthbHBoYURpZ2l0cwACAARiZXRhAICA3q/P9ZUIAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAANc3Rha2VkQW1vdW50QQkBDHN0YWtlZEFtb3VudAEFCGFzc2V0SWRBAA1zdGFrZWRBbW91bnRCCQEMc3Rha2VkQW1vdW50AQUIYXNzZXRJZEIAEWF2YWlsYWJsZUJhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDXN0YWtlZEFtb3VudEEAEWF2YWlsYWJsZUJhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDXN0YWtlZEFtb3VudEIAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAGQCCQEOYWNjb3VudEJhbGFuY2UBBQhhc3NldElkQQUNc3Rha2VkQW1vdW50QQAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgkAZAIJAQ5hY2NvdW50QmFsYW5jZQEFCGFzc2V0SWRCBQ1zdGFrZWRBbW91bnRCABBoYXNFbm91Z2hCYWxhbmNlAwkAZwIFGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFCGJhbGFuY2VBCQBnAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUIYmFsYW5jZUIHAQhza2V3bmVzcwIBeAF5CQBpAgkAZAIJAGsDBQdzY2FsZTE2BQF4BQF5CQBrAwUHc2NhbGUxNgUBeQUBeAACAQ1pbnZhcmlhbnRDYWxjAgF4AXkEAnNrCQEIc2tld25lc3MCBQF4BQF5CQBkAgkAawMJAGQCBQF4BQF5BQdzY2FsZTE2CQBsBgUCc2sFB2RpZ2l0czgFBWFscGhhBQthbHBoYURpZ2l0cwUHZGlnaXRzOAUHQ0VJTElORwkAaAIAAgkAawMJAKADAQkAdgYJALwCAwkAtgIBBQF4CQC2AgEFAXkJALYCAQUGc2NhbGU4AAAJALYCAQAFAAEJAGkCBQdkaWdpdHM4AAIFBERPV04JAGwGCQBlAgUCc2sFBGJldGEFB2RpZ2l0czgFBWFscGhhBQthbHBoYURpZ2l0cwUHZGlnaXRzOAUERE9XTgUGc2NhbGU4ARNjYWxjdWxhdGVTZW5kQW1vdW50BxVhbW91bnRUb1NlbmRFc3RpbWF0ZWQVbWluVG9rZW5SZWNlaXZlQW1vdW50EnRva2VuUmVjZWl2ZUFtb3VudAd0b2tlbklkBWJhbGNBBWJhbGNCBmludkN1cgQdd29yc3RBbGxvd2VkTmV3SW52YXJpYW50UmF0aW8JAGUCBQdzY2FsZTE2CQBpAgkAaAIFB3NjYWxlMTYAAQCAreIEBB5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUJAGUCBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFFW1pblRva2VuUmVjZWl2ZUFtb3VudAQBeAkAZAIFBWJhbGNBBRJ0b2tlblJlY2VpdmVBbW91bnQEAXkJAGQCBQViYWxjQgUSdG9rZW5SZWNlaXZlQW1vdW50CgENZ2V0U3RlcEFtb3VudAIDYWNjBHN0ZXADCQAAAggFA2FjYwJfMQD///////////8BBAxhbW91bnRUb1NlbmQJAGUCBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQJAGkCCQBpAgkAaAIFBHN0ZXAFHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQADBQZzY2FsZTMEDXN0ZXBJbnZhcmlhbnQDCQAAAgUHdG9rZW5JZAUIYXNzZXRJZEEJAQ1pbnZhcmlhbnRDYWxjAgUBeAkAZQIFBWJhbGNCBQxhbW91bnRUb1NlbmQJAQ1pbnZhcmlhbnRDYWxjAgkAZQIFBWJhbGNBBQxhbW91bnRUb1NlbmQFAXkDCQBmAgUNc3RlcEludmFyaWFudAUGaW52Q3VyCQCUCgIFDGFtb3VudFRvU2VuZAUNc3RlcEludmFyaWFudAkAlAoCAP///////////wEAAAUDYWNjBA9hbW91bnRUb1NlbmRNaW4JAQ1nZXRTdGVwQW1vdW50AgkAlAoCAP///////////wEAAAC4FwMJAGYCAAAIBQ9hbW91bnRUb1NlbmRNaW4CXzEJAAIBAh9QcmljZSBpcyB3b3JzZSB0aGFuIG1pblJlY2VpdmVkBAxpbnZFc3RpbWF0ZWQDCQAAAgUHdG9rZW5JZAUIYXNzZXRJZEEJAQ1pbnZhcmlhbnRDYWxjAgUBeAkAZQIFBWJhbGNCBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQDCQAAAgUHdG9rZW5JZAUIYXNzZXRJZEIJAQ1pbnZhcmlhbnRDYWxjAgkAZQIFBWJhbGNBBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFAXkJAAIBAhZXcm9uZyBhc3NldCBpbiBwYXltZW50AwkAZgIFBmludkN1cgUMaW52RXN0aW1hdGVkAwkAZwIFHXdvcnN0QWxsb3dlZE5ld0ludmFyaWFudFJhdGlvCQBrAwUHc2NhbGUxNgUGaW52Q3VyBQxpbnZFc3RpbWF0ZWQJAAIBAjJUaGUgcmVxdWVzdGVkIHByaWNlIGlzIHRvbyBub3QgcHJvZml0YWJsZSBmb3IgdXNlcgQBYQoAAiRsCQDMCAIAGQkAzAgCAMgBCQDMCAIA9AMFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgD///////////8BAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWdldFN0ZXBBbW91bnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDMJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMDCQBmAgAACAUBYQJfMQgFD2Ftb3VudFRvU2VuZE1pbgJfMQgFAWECXzEEAWEKAAIkbAkAzAgCAIz8/////////wEJAMwIAgC4/v////////8BCQDMCAIA5///////////AQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAP///////////wEAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENZ2V0U3RlcEFtb3VudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwQPdHVwbGVTZW5kQmV0dGVyAwkAZgIAAAgFAWECXzEJAJQKAgUVYW1vdW50VG9TZW5kRXN0aW1hdGVkBQxpbnZFc3RpbWF0ZWQFAWEDCQBnAgUdd29yc3RBbGxvd2VkTmV3SW52YXJpYW50UmF0aW8JAGsDBQdzY2FsZTE2BQZpbnZDdXIIBQ90dXBsZVNlbmRCZXR0ZXICXzIJAAIBAjJUaGUgcmVxdWVzdGVkIHByaWNlIGlzIHRvbyBub3QgcHJvZml0YWJsZSBmb3IgdXNlcggFD3R1cGxlU2VuZEJldHRlcgJfMQEMZ2V0QXNzZXRJbmZvAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwBAhzdHJpbmdJZAkA2AQBBQJpZAQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmlkCQCsAgIJAKwCAgIGQXNzZXQgBQhzdHJpbmdJZAIOIGRvZXNuJ3QgZXhpc3QJAJUKAwUIc3RyaW5nSWQIBQRpbmZvBG5hbWUIBQRpbmZvCGRlY2ltYWxzAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCQCVCgMCBVdBVkVTAgVXQVZFUwAICQACAQILTWF0Y2ggZXJyb3IBB3N1c3BlbmQBBWNhdXNlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwkAzAgCCQELU3RyaW5nRW50cnkCBQZrQ2F1c2UFBWNhdXNlBQNuaWwBDXRocm93SXNBY3RpdmUACQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQt0aHJvd0Fzc2V0cwAJAAIBCQCsAgIJAKwCAgkArAICAiVJbmNvcnJlY3QgYXNzZXRzIGF0dGFjaGVkLiBFeHBlY3RlZDogBQtzdHJBc3NldElkQQIFIGFuZCAFC3N0ckFzc2V0SWRCAQ90aHJvd09uZVBheW1lbnQACQACAQIdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQBEXN1c3BlbmRTdXNwaWNpb3VzAAkBB3N1c3BlbmQBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiNTdXNwaWNpb3VzIHN0YXRlLiBBY3R1YWwgYmFsYW5jZXM6IAkApAMBBQhiYWxhbmNlQQIBIAUKYXNzZXROYW1lQQICLCAJAKQDAQUIYmFsYW5jZUICASAFCmFzc2V0TmFtZUICCS4gU3RhdGU6IAkApAMBCQEOYWNjb3VudEJhbGFuY2UBBQhhc3NldElkQQIBIAUKYXNzZXROYW1lQQICLCAJAKQDAQkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEICASAFCmFzc2V0TmFtZUIBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMDIwNzEwMjczCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDIwNzEwMjczAl8xBAtzdGFraW5nQWRkcggFDSR0MDEwMjA3MTAyNzMCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDEwMzU5MTA0MjUJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwMzU5MTA0MjUCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTAzNTkxMDQyNQJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUOa1VzZXJTd29wSW5Hb3YAAAQLZ1N3b3BBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUKZ292QWRkcmVzcwkArAICCQClCAEFCHVzZXJBZGRyBQ9rVXNlckdTd29wSW5Hb3YFCnN3b3BBbW91bnQEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAAJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAQMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgESY2hlY2tEQXBwVGhyZXNob2xkAwtuZXdCYWxhbmNlQQtuZXdCYWxhbmNlQgpwbXRBc3NldElkBA1kQXBwVGhyZXNob2xkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ5rREFwcFRocmVzaG9sZAQFcmF0aW8DAwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQBmAgULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCBwkAbgQFC25ld0JhbGFuY2VBAAEFC25ld0JhbGFuY2VCBQdDRUlMSU5HAwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQgkAZgIFC25ld0JhbGFuY2VCBQtuZXdCYWxhbmNlQQcJAG4EBQtuZXdCYWxhbmNlQgABBQtuZXdCYWxhbmNlQQUHQ0VJTElORwAAAwkAZgIFBXJhdGlvBQ1kQXBwVGhyZXNob2xkBA0kdDAxMjE3MDEyMjc4AwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQCUCgIFCmFzc2V0TmFtZUIFCmFzc2V0TmFtZUEJAJQKAgUKYXNzZXROYW1lQQUKYXNzZXROYW1lQgQGdG9rZW4xCAUNJHQwMTIxNzAxMjI3OAJfMQQGdG9rZW4yCAUNJHQwMTIxNzAxMjI3OAJfMgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIHQnV5aW5nIAUGdG9rZW4xAicgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZHVlIHRvIHRoZSAFBnRva2VuMgIGIGRlcGVnBgEacmVwbGVuaXNoV2l0aFR3b1Rva2Vuc0NhbGMDAWkMc3Rha2VGYXJtaW5nCGxvY2tUeXBlBAtwbXRBc3NldElkQQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtwbXRBc3NldElkQggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBBNyYXRpb1NoYXJlVG9rZW5zSW5BCQBrAwUGc2NhbGU4CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYmFsYW5jZUEEE3JhdGlvU2hhcmVUb2tlbnNJbkIJAGsDBQZzY2FsZTgICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQhiYWxhbmNlQgQNJHQwMTI3MzgxMjgxNQkBDGdldEFzc2V0SW5mbwEFC3BtdEFzc2V0SWRBBA5wbXRTdHJBc3NldElkQQgFDSR0MDEyNzM4MTI4MTUCXzEEDXBtdEFzc2V0TmFtZUEIBQ0kdDAxMjczODEyODE1Al8yBAxwbXREZWNpbWFsc0EIBQ0kdDAxMjczODEyODE1Al8zBA0kdDAxMjgyMDEyOTM3CQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEIEDnBtdFN0ckFzc2V0SWRCCAUNJHQwMTI4MjAxMjkzNwJfMQQNcG10QXNzZXROYW1lQggFDSR0MDEyODIwMTI5MzcCXzIEDHBtdERlY2ltYWxzQggFDSR0MDEyODIwMTI5MzcCXzMEDSR0MDEyOTQyMTM0NDYDCQBmAgUTcmF0aW9TaGFyZVRva2Vuc0luQgUTcmF0aW9TaGFyZVRva2Vuc0luQQQDcG10CQBuBAUIYmFsYW5jZUIFE3JhdGlvU2hhcmVUb2tlbnNJbkEFBnNjYWxlOAUHQ0VJTElORwkAlwoFCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDcG10CQBlAggJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA3BtdAULcG10QXNzZXRJZEIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAbgQFCGJhbGFuY2VBBRNyYXRpb1NoYXJlVG9rZW5zSW5CBQZzY2FsZTgFB0NFSUxJTkcJAJcKBQUDcG10CAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNwbXQFC3BtdEFzc2V0SWRBBRNyYXRpb1NoYXJlVG9rZW5zSW5CBApwbXRBbW91bnRBCAUNJHQwMTI5NDIxMzQ0NgJfMQQKcG10QW1vdW50QggFDSR0MDEyOTQyMTM0NDYCXzIEBmNoYW5nZQgFDSR0MDEyOTQyMTM0NDYCXzMEDWNoYW5nZUFzc2V0SWQIBQ0kdDAxMjk0MjEzNDQ2Al80BA9zaGFyZVRva2VuUmF0aW8IBQ0kdDAxMjk0MjEzNDQ2Al81BBVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGsDBQ9zaGFyZVRva2VuUmF0aW8FEHNoYXJlQXNzZXRTdXBwbHkFBnNjYWxlOAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAwcJAAIBAh5Ud28gb3IgdGhyZWUgcGF5bWVudHMgZXhwZWN0ZWQDAwkBAiE9AgULcG10QXNzZXRJZEEFCGFzc2V0SWRBBgkBAiE9AgULcG10QXNzZXRJZEIFCGFzc2V0SWRCCQELdGhyb3dBc3NldHMAAwkAAAIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAACQACAQIdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQBmAgAABQZjaGFuZ2UJAAIBAgpDaGFuZ2UgPCAwAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpwbXRBbW91bnRBBQtwbXRBc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCnBtdEFtb3VudEIFC3BtdEFzc2V0SWRCBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwAEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDnBtdFN0ckFzc2V0SWRBCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQpwbXRBbW91bnRBCQDMCAIFDnBtdFN0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQgkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QgkAzAgCBQ5wbXRTdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQNc2NyaXB0QWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQpwbXRBbW91bnRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFEHNoYXJlQXNzZXRTdXBwbHkFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAkBDWludmFyaWFudENhbGMCCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAGQCBQhiYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmNoYW5nZQUNY2hhbmdlQXNzZXRJZAUDbmlsAwUMc3Rha2VGYXJtaW5nBApzdFBheW1lbnRzCQDOCAIJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQNuaWwDCQAAAgkAkAMBCAUBaQhwYXltZW50cwADCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAIHYXNzZXRJZAEABQR1bml0CAkAkQMCCAUBaQhwYXltZW50cwACB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAIGYW1vdW50BQNuaWwFA25pbAQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUDbmlsBQNuaWwDCQAAAgUCcmUFAnJlBAFzCQD8BwQFDmZhcm1pbmdBZGRyZXNzAhdsb2NrU2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQhsb2NrVHlwZQUDbmlsBQpzdFBheW1lbnRzAwkAAAIFAXMFAXMFDXNjcmlwdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUMc2hhcmVBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFAWkTdmlydHVhbFN3YXBUb2tlblBheRN2aXJ0dWFsU3dhcFRva2VuR2V0DHN0YWtlRmFybWluZwhsb2NrVHlwZQQNJHQwMTU4MzYxNTkxMQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQ0kdDAxNTgzNjE1OTExAl8xBApwbXRBc3NldElkCAUNJHQwMTU4MzYxNTkxMQJfMgQNJHQwMTU5MTYxNTk4OQkBDGdldEFzc2V0SW5mbwEFCnBtdEFzc2V0SWQEDXBtdFN0ckFzc2V0SWQIBQ0kdDAxNTkxNjE1OTg5Al8xBAxwbXRBc3NldE5hbWUIBQ0kdDAxNTkxNjE1OTg5Al8yBAtwbXREZWNpbWFscwgFDSR0MDE1OTE2MTU5ODkCXzMED3BtdE1pblRocmVzaG9sZADAlrECBB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQCA4esXBAl0b2xlcmFuY2UDCQBmAgUddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UFCXBtdEFtb3VudACgjQYAAQQcc2xpcHBhZ2VWYWx1ZU1pbkZvclJlcGxlbmlzaAkAZQIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgFCXRvbGVyYW5jZQCAreIEBBxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQBkAgUGc2NhbGU4CQBpAgkAaAIFBnNjYWxlOAUJdG9sZXJhbmNlAICt4gQEF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQBlAgUGc2NhbGU4CQBpAgkAaAIFBnNjYWxlOAABAICt4gQDCQBmAgUPcG10TWluVGhyZXNob2xkBQlwbXRBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICD1BheW1lbnQgYW1vdW50IAkApAMBBQlwbXRBbW91bnQCJyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gYW1vdW50IG9mIAkApAMBBQ9wbXRNaW5UaHJlc2hvbGQCByB0b2tlbnMDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIHCQACAQIcT25lIG9yIHR3byBwYXltZW50cyBleHBlY3RlZAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwADAwkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCBwkBC3Rocm93QXNzZXRzAAQNJHQwMTY5OTExNzYzMwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAmAoGCQBlAgUJcG10QW1vdW50BRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0CQBkAgUIYmFsYW5jZUEFE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAGUCBQhiYWxhbmNlQgUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VBBQlwbXRBbW91bnQFCGJhbGFuY2VCCQCYCgYFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGUCBQlwbXRBbW91bnQFE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAGUCBQhiYWxhbmNlQQUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VCBRN2aXJ0dWFsU3dhcFRva2VuUGF5BQhiYWxhbmNlQQkAZAIFCGJhbGFuY2VCBQlwbXRBbW91bnQEEXZpcnR1YWxSZXBsZW5pc2hBCAUNJHQwMTY5OTExNzYzMwJfMQQRdmlydHVhbFJlcGxlbmlzaEIIBQ0kdDAxNjk5MTE3NjMzAl8yBBFiYWxhbmNlQWZ0ZXJTd2FwQQgFDSR0MDE2OTkxMTc2MzMCXzMEEWJhbGFuY2VBZnRlclN3YXBCCAUNJHQwMTY5OTExNzYzMwJfNAQLbmV3QmFsYW5jZUEIBQ0kdDAxNjk5MTE3NjMzAl81BAtuZXdCYWxhbmNlQggFDSR0MDE2OTkxMTc2MzMCXzYEDGludmFyaWFudE5ldwkBDWludmFyaWFudENhbGMCBRFiYWxhbmNlQWZ0ZXJTd2FwQQURYmFsYW5jZUFmdGVyU3dhcEIEJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gJAGkCCQBrAwUHc2NhbGUxNgURYmFsYW5jZUFmdGVyU3dhcEEFEWJhbGFuY2VBZnRlclN3YXBCCQBrAwUGc2NhbGU4BRF2aXJ0dWFsUmVwbGVuaXNoQQURdmlydHVhbFJlcGxlbmlzaEIDAwkAZwIFF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQBrAwUGc2NhbGU4BQlpbnZhcmlhbnQFDGludmFyaWFudE5ldwYJAGYCBQlpbnZhcmlhbnQFDGludmFyaWFudE5ldwkAAgECOkluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUDAwkAZgIFHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gFJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gGCQBmAgUlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAUcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAgECbFN3YXAgd2l0aCB2aXJ0dWFsU3dhcFRva2VuUGF5IGFuZCB2aXJ0dWFsU3dhcFRva2VuR2V0IGlzIHBvc3NpYmxlLCBidXQgcmF0aW8gYWZ0ZXIgdmlydHVhbCBzd2FwIGlzIGluY29ycmVjdAMJAQEhAQkBEmNoZWNrREFwcFRocmVzaG9sZAMFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgUKcG10QXNzZXRJZAkBBXRocm93AAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAawMFEXZpcnR1YWxSZXBsZW5pc2hBBQZzY2FsZTgFEWJhbGFuY2VBZnRlclN3YXBBBBNyYXRpb1NoYXJlVG9rZW5zSW5CCQBrAwURdmlydHVhbFJlcGxlbmlzaEIFBnNjYWxlOAURYmFsYW5jZUFmdGVyU3dhcEIEFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAawMJAJcDAQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5BCQDMCAIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFA25pbAUQc2hhcmVBc3NldFN1cHBseQUGc2NhbGU4BB1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAZQIFCWZlZVNjYWxlNgkAaQIFA2ZlZQACBQlmZWVTY2FsZTYEGnNoYXJlVG9rZW5Hb3Zlcm5hbmNlUmV3YXJkCQBrAwUVc2hhcmVUb2tlblRvUGF5QW1vdW50CQBpAgUNZmVlR292ZXJuYW5jZQACBQlmZWVTY2FsZTYEFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEJAGsDBRpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAGsDBRpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAUIYmFsYW5jZUIFEHNoYXJlQXNzZXRTdXBwbHkEDSR0MDE5Mzg0MTk2NjcDCQAAAgUNcG10U3RyQXNzZXRJZAULc3RyQXNzZXRJZEEJAJUKAwkAZQIFCXBtdEFtb3VudAUWZ292ZXJuYW5jZVJld2FyZFRva2VuQQUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgULc3RyQXNzZXRJZEIJAJUKAwkAZQIFCXBtdEFtb3VudAUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQQULc3RyQXNzZXRJZEEEC3N0YWtlQW1vdW50CAUNJHQwMTkzODQxOTY2NwJfMQQNdW5zdGFrZUFtb3VudAgFDSR0MDE5Mzg0MTk2NjcCXzIEDHVuc3Rha2VBc3NldAgFDSR0MDE5Mzg0MTk2NjcCXzMEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXBtdFN0ckFzc2V0SWQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFC3N0YWtlQW1vdW50CQDMCAIFDXBtdFN0ckFzc2V0SWQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDHVuc3Rha2VBc3NldAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgUNdW5zdGFrZUFtb3VudAkAzAgCBQx1bnN0YWtlQXNzZXQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIEDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGUCBQtuZXdCYWxhbmNlQgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBRBzaGFyZUFzc2V0U3VwcGx5BR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAkBDWludmFyaWFudENhbGMCCQBlAgULbmV3QmFsYW5jZUEFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEJAGUCBQtuZXdCYWxhbmNlQgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUIYXNzZXRJZEIFA25pbAMFDHN0YWtlRmFybWluZwQKc3RQYXltZW50cwkAzggCCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAEABQR1bml0CAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNuaWwFA25pbAQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwFA25pbAMJAAACBQJyZQUCcmUEAXMJAPwHBAUOZmFybWluZ0FkZHJlc3MCF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFCGxvY2tUeXBlBQNuaWwFCnN0UGF5bWVudHMDCQAAAgUBcwUBcwUNc2NyaXB0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQUMc2hhcmVBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHdpdGhkcmF3Q2FsYwIBaQx1bmxvY2tBbW91bnQEDSR0MDIxNTE2MjE4NTEDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkA2AQBBQxzaGFyZUFzc2V0SWQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAlAoCAAAFDHNoYXJlQXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMjE1MTYyMTg1MQJfMQQKcG10QXNzZXRJZAgFDSR0MDIxNTE2MjE4NTECXzIDCQEBIQEFEGhhc0Vub3VnaEJhbGFuY2UJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZ1bmxvY2sDCQBmAgUMdW5sb2NrQW1vdW50AAAJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQQUQc2hhcmVBc3NldFN1cHBseQQMYW1vdW50VG9QYXlCCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBNpbnZhcmlhbnRDYWxjdWxhdGVkCQENaW52YXJpYW50Q2FsYwIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBRBzaGFyZUFzc2V0U3VwcGx5BQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxhbW91bnRUb1BheUEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDwFpAQRpbml0AQxmaXJzdEhhcnZlc3QEDSR0MDIzNDAzMjM0ODAJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKcG10QW1vdW50QQgFDSR0MDIzNDAzMjM0ODACXzEEC3BtdEFzc2V0SWRBCAUNJHQwMjM0MDMyMzQ4MAJfMgQNJHQwMjM0ODUyMzU2MgkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBApwbXRBbW91bnRCCAUNJHQwMjM0ODUyMzU2MgJfMQQLcG10QXNzZXRJZEIIBQ0kdDAyMzQ4NTIzNTYyAl8yBA0kdDAyMzU2NzIzNjQ0CQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEEEDnBtdFN0ckFzc2V0SWRBCAUNJHQwMjM1NjcyMzY0NAJfMQQNcG10QXNzZXROYW1lQQgFDSR0MDIzNTY3MjM2NDQCXzIEDHBtdERlY2ltYWxzQQgFDSR0MDIzNTY3MjM2NDQCXzMEDSR0MDIzNjQ5MjM3MjYJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQ0kdDAyMzY0OTIzNzI2Al8xBA1wbXRBc3NldE5hbWVCCAUNJHQwMjM2NDkyMzcyNgJfMgQMcG10RGVjaW1hbHNCCAUNJHQwMjM2NDkyMzcyNgJfMwMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMFB2tBY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAMJAAACBQtwbXRBc3NldElkQQULcG10QXNzZXRJZEIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEEnNoYXJlSW5pdGlhbFN1cHBseQkAawMJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04JAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04JAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04ECnNoYXJlSXNzdWUJAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uBRJzaGFyZUluaXRpYWxTdXBwbHkFDXNoYXJlRGVjaW1hbHMGBAxzaGFyZUlzc3VlSWQJALgIAQUKc2hhcmVJc3N1ZQQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQpwbXRBbW91bnRBBQpwbXRBbW91bnRCBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEIJAMwIAgUOcG10U3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIECWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVyc2lvbgUHdmVyc2lvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRBBQ5wbXRTdHJBc3NldElkQQkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEIFDnBtdFN0ckFzc2V0SWRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rREFwcFRocmVzaG9sZAADCQDMCAIFCnNoYXJlSXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBBQxzaGFyZUlzc3VlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5BRJzaGFyZUluaXRpYWxTdXBwbHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRJzaGFyZUluaXRpYWxTdXBwbHkFDHNoYXJlSXNzdWVJZAUDbmlsAwUMZmlyc3RIYXJ2ZXN0CQDOCAIFCWJhc2VFbnRyeQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa0ZpcnN0SGFydmVzdAUMZmlyc3RIYXJ2ZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQJAGgCBRVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFDHBlcmlvZExlbmd0aAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYcmVwbGVuaXNoV2l0aFR3b1Rva2Vuc1YyAgxzdGFrZUZhcm1pbmcIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJARpyZXBsZW5pc2hXaXRoVHdvVG9rZW5zQ2FsYwMFAWkFDHN0YWtlRmFybWluZwUIbG9ja1R5cGUBaQEXcmVwbGVuaXNoV2l0aE9uZVRva2VuVjIEE3ZpcnR1YWxTd2FwVG9rZW5QYXkTdmlydHVhbFN3YXBUb2tlbkdldAxzdGFrZUZhcm1pbmcIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJARlyZXBsZW5pc2hXaXRoT25lVG9rZW5DYWxjBQUBaQUTdmlydHVhbFN3YXBUb2tlblBheQUTdmlydHVhbFN3YXBUb2tlbkdldAUMc3Rha2VGYXJtaW5nBQhsb2NrVHlwZQFpAQp3aXRoZHJhd1YyAQx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQx3aXRoZHJhd0NhbGMCBQFpBQx1bmxvY2tBbW91bnQBaQEQd2l0aGRyYXdPbmVUb2tlbgQMdW5sb2NrQW1vdW50DXdpdGhkcmF3QXNzZXQYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlEm1pbkFtb3VudFRvUmVjZWl2ZQkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQNJHQwMjcxNDEyNzQ3NgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCUCgIAAAUMc2hhcmVBc3NldElkBAlwbXRBbW91bnQIBQ0kdDAyNzE0MTI3NDc2Al8xBApwbXRBc3NldElkCAUNJHQwMjcxNDEyNzQ3NgJfMgQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAMDCQECIT0CBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBAiE9AgUNd2l0aGRyYXdBc3NldAULc3RyQXNzZXRJZEIHCQACAQIYSW5jb3JyZWN0IHdpdGhkcmF3IGFzc2V0AwkAZwIAAAUOd2l0aGRyYXdBbW91bnQJAAIBAiV3aXRoZHJhdyBhbW91bnQgbXVzdCBiZSBncmF0ZXIgdGhhbiAwAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzAAQGdW5sb2NrAwkAZgIFDHVubG9ja0Ftb3VudAAACQD8BwQFDmZhcm1pbmdBZGRyZXNzAht3aXRoZHJhd1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBAxhbW91bnRUb1BheUEJAGsDBQ53aXRoZHJhd0Ftb3VudAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEDGFtb3VudFRvUGF5QgkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQgUQc2hhcmVBc3NldFN1cHBseQQMbmV3VmlydEJhbGNBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQQMbmV3VmlydEJhbGNCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQFpDG9yaWdpbkNhbGxlcgQWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQMJAAACBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBE2NhbGN1bGF0ZVNlbmRBbW91bnQHBRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFEm1pbkFtb3VudFRvUmVjZWl2ZQUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJAQ1pbnZhcmlhbnRDYWxjAgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJARNjYWxjdWxhdGVTZW5kQW1vdW50BwUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBRJtaW5BbW91bnRUb1JlY2VpdmUFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCCQENaW52YXJpYW50Q2FsYwIFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCBAlnb3ZSZXdhcmQJAGsDBRZhbW91bnRFeGNoYW5nZWRXaXRoRmVlCQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA9hbW91bnRFeGNoYW5nZWQJAGsDBRZhbW91bnRFeGNoYW5nZWRXaXRoRmVlCQBlAgUJZmVlU2NhbGU2CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEDSR0MDI5MDc5Mjk0NDEDCQAAAgUNd2l0aGRyYXdBc3NldAULc3RyQXNzZXRJZEEJAJYKBAkAZAIFDGFtb3VudFRvUGF5QQUPYW1vdW50RXhjaGFuZ2VkCQBlAgkAZQIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBBQ9hbW91bnRFeGNoYW5nZWQFCWdvdlJld2FyZAUIYmFsYW5jZUIFCGFzc2V0SWRCCQCWCgQJAGQCBQxhbW91bnRUb1BheUIFD2Ftb3VudEV4Y2hhbmdlZAUIYmFsYW5jZUEJAGUCCQBlAgkAZQIFCGJhbGFuY2VCBQxhbW91bnRUb1BheUIFD2Ftb3VudEV4Y2hhbmdlZAUJZ292UmV3YXJkBQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAyOTA3OTI5NDQxAl8xBAtiYWxhbmNlQU5ldwgFDSR0MDI5MDc5Mjk0NDECXzIEC2JhbGFuY2VCTmV3CAUNJHQwMjkwNzkyOTQ0MQJfMwQLdmlydEFzc2V0SWQIBQ0kdDAyOTA3OTI5NDQxAl80AwkBASEBCQESY2hlY2tEQXBwVGhyZXNob2xkAwULYmFsYW5jZUFOZXcFC2JhbGFuY2VCTmV3BQt2aXJ0QXNzZXRJZAkBBXRocm93AAQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQtiYWxhbmNlQU5ldwULYmFsYW5jZUJOZXcEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXdpdGhkcmF3QXNzZXQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIJAGQCBQthbW91bnRUb1BheQUJZ292UmV3YXJkCQDMCAIFDXdpdGhkcmF3QXNzZXQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQULYmFsYW5jZUFOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgULYmFsYW5jZUJOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgUQc2hhcmVBc3NldFN1cHBseQUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQFE2ludmFyaWFudENhbGN1bGF0ZWQJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFDndpdGhkcmF3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYW1vdW50VG9QYXkJANkEAQUNd2l0aGRyYXdBc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFCWdvdlJld2FyZAkA2QQBBQ13aXRoZHJhd0Fzc2V0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZXhjaGFuZ2UCGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZRJtaW5BbW91bnRUb1JlY2VpdmUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDMwNDA0MzA0NzkJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMzA0MDQzMDQ3OQJfMQQKcG10QXNzZXRJZAgFDSR0MDMwNDA0MzA0NzkCXzIDCQBnAgAABRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAIBCQCsAgICK0VzdGltYXRlZCBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZS4gQWN0dWFsOiAJAKQDAQUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlAwkAZgIFEm1pbkFtb3VudFRvUmVjZWl2ZQUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQACAQIvTWluaW1hbCBhbW91bnQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGVzdGltYXRlZC4DCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAQ90aHJvd09uZVBheW1lbnQAAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzAAMDCQECIT0CBQpwbXRBc3NldElkBQhhc3NldElkQQkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEIHCQELdGhyb3dBc3NldHMAAwkAZgIAgK3iBAUJcG10QW1vdW50CQACAQIwT25seSBzd2FwIG9mIDEwLjAwMDAwMCBvciBtb3JlIHRva2VucyBpcyBhbGxvd2VkAwMJAGYCBRVleGNoYW5nZVJhdGlvTGltaXRNaW4JAGsDBQZzY2FsZTgFEm1pbkFtb3VudFRvUmVjZWl2ZQUJcG10QW1vdW50BgkAZgIJAGsDBQZzY2FsZTgFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUJcG10QW1vdW50BRVleGNoYW5nZVJhdGlvTGltaXRNYXgJAAIBAhxJbmNvcnJlY3QgYXJncyBhbmQgcG10IHJhdGlvBAtzZW5kQXNzZXRJZAMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQUIYXNzZXRJZEIFCGFzc2V0SWRBBAZhbW91bnQJARNjYWxjdWxhdGVTZW5kQW1vdW50BwUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBRJtaW5BbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUIYmFsYW5jZUEFCGJhbGFuY2VCBQlpbnZhcmlhbnQEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUBaQxvcmlnaW5DYWxsZXIEEGdvdmVybmFuY2VSZXdhcmQJAGsDBQZhbW91bnQJAG4EBQ1mZWVHb3Zlcm5hbmNlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEDmFtb3VudE1pbnVzRmVlCQBrAwUGYW1vdW50CQBlAgUJZmVlU2NhbGU2CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEDSR0MDMxOTYzMzIyMjUDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAJQKAgkAZAIFCGJhbGFuY2VBBQlwbXRBbW91bnQJAGUCCQBlAgUIYmFsYW5jZUIFDmFtb3VudE1pbnVzRmVlBRBnb3Zlcm5hbmNlUmV3YXJkCQCUCgIJAGUCCQBlAgUIYmFsYW5jZUEFDmFtb3VudE1pbnVzRmVlBRBnb3Zlcm5hbmNlUmV3YXJkCQBkAgUIYmFsYW5jZUIFCXBtdEFtb3VudAQLbmV3QmFsYW5jZUEIBQ0kdDAzMTk2MzMyMjI1Al8xBAtuZXdCYWxhbmNlQggFDSR0MDMxOTYzMzIyMjUCXzIDCQEBIQEJARJjaGVja0RBcHBUaHJlc2hvbGQDBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIFCnBtdEFzc2V0SWQJAQV0aHJvdwAEDSR0MDMyMzIzMzIzOTYJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMzIzMjMzMjM5NgJfMQQMcG10QXNzZXROYW1lCAUNJHQwMzIzMjMzMjM5NgJfMgQLcG10RGVjaW1hbHMIBQ0kdDAzMjMyMzMyMzk2Al8zBA0kdDAzMjQwNTMyNDgyCQEMZ2V0QXNzZXRJbmZvAQULc2VuZEFzc2V0SWQEDnNlbmRTdHJBc3NldElkCAUNJHQwMzI0MDUzMjQ4MgJfMQQNc2VuZEFzc2V0TmFtZQgFDSR0MDMyNDA1MzI0ODICXzIEDHNlbmREZWNpbWFscwgFDSR0MDMyNDA1MzI0ODICXzMEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXBtdFN0ckFzc2V0SWQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCXBtdEFtb3VudAkAzAgCBQ1wbXRTdHJBc3NldElkBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5zZW5kU3RyQXNzZXRJZAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIFDmFtb3VudE1pbnVzRmVlBRBnb3Zlcm5hbmNlUmV3YXJkCQDMCAIFDnNlbmRTdHJBc3NldElkBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQULbmV3QmFsYW5jZUEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgULbmV3QmFsYW5jZUIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQJAQ1pbnZhcmlhbnRDYWxjAgULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUOYW1vdW50TWludXNGZWUFC3NlbmRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUQZ292ZXJuYW5jZVJld2FyZAULc2VuZEFzc2V0SWQFA25pbAkAzAgCBQ5hbW91bnRNaW51c0ZlZQkAzAgCBQtzZW5kQXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEMcmVpc3N1ZVNoYXJlAQZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUDbXNnCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQZhbW91bnQGBQNuaWwBaQEIc2h1dGRvd24ACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBBQZhY3RpdmUJAAIBCQCsAgICIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa0NhdXNlAhp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAkBB3N1c3BlbmQBAg9QYXVzZWQgYnkgYWRtaW4BaQEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwUGYWN0aXZlCQENdGhyb3dJc0FjdGl2ZQAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtEZWxldGVFbnRyeQEFBmtDYXVzZQUDbmlsAWkBGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAVjbGFpbQMDCQAAAgUIYXNzZXRJZEEFBFVTRE4GCQAAAgUIYXNzZXRJZEIFBFVTRE4JAPwHBAUSc3Rha2luZ1VTRE5BZGRyZXNzAgxjbGFpbVJld2FyZHMFA25pbAUDbmlsAAADCQAAAgUFY2xhaW0FBWNsYWltBA1hbW91bnRFbnJvbGxBCQBlAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUIYmFsYW5jZUEEDWFtb3VudEVucm9sbEIJAGUCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQhiYWxhbmNlQgQMaW52YXJpYW50TmV3CQENaW52YXJpYW50Q2FsYwIJAGQCBQhiYWxhbmNlQQUNYW1vdW50RW5yb2xsQQkAZAIFCGJhbGFuY2VCBQ1hbW91bnRFbnJvbGxCAwkBAiE9AggFAWkGY2FsbGVyBQ9tb25leUJveEFkZHJlc3MJAAIBAilPbmx5IHRoZSBtb25leSBib3ggY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMDCQBmAgAABQ1hbW91bnRFbnJvbGxBBgkAZgIAAAUNYW1vdW50RW5yb2xsQgkBB3N1c3BlbmQBAhZFbnJvbGwgYW1vdW50IG5lZ2F0aXZlAwMJAAACBQ1hbW91bnRFbnJvbGxBAAAJAAACBQ1hbW91bnRFbnJvbGxCAAAHCQACAQIQTm8gbW9uZXkgdG8gdGFrZQQGc3Rha2UxAwMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRBCQBmAgUNYW1vdW50RW5yb2xsQQAABwkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUNYW1vdW50RW5yb2xsQQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRCCQBmAgUNYW1vdW50RW5yb2xsQgAABwkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUNYW1vdW50RW5yb2xsQgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUMaW52YXJpYW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEJAGQCBQhiYWxhbmNlQQUNYW1vdW50RW5yb2xsQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBkAgUIYmFsYW5jZUIFDWFtb3VudEVucm9sbEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QBCnNoYXJlTGltaXQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkJAMwIAgkBDEludGVnZXJFbnRyeQIFC2tTaGFyZUxpbWl0BQpzaGFyZUxpbWl0BQNuaWwBaQEMc3Rha2VVbnN0YWtlAwVzdGFrZQZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLU9ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbgQNJHQwMzU4NDUzNTk0OAkBEWNhbGNTdGFraW5nUGFyYW1zAwUFc3Rha2UFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMzU4NDUzNTk0OAJfMQQEYWRkcggFDSR0MDM1ODQ1MzU5NDgCXzIEBnBhcmFtcwgFDSR0MDM1ODQ1MzU5NDgCXzMECHBheW1lbnRzCAUNJHQwMzU4NDUzNTk0OAJfNAQDaW52CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBGnJlcGxlbmlzaFdpdGhUd29Ub2tlbnNDYWxjAwUBaQcAAAFpARVyZXBsZW5pc2hXaXRoT25lVG9rZW4CE3ZpcnR1YWxTd2FwVG9rZW5QYXkTdmlydHVhbFN3YXBUb2tlbkdldAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFBQFpBRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0BwAAAWkBCHdpdGhkcmF3AAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBDHdpdGhkcmF3Q2FsYwIFAWkAAAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5zgc0IzQ==", "height": 2358366, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AxEfEyEs8YwBVVDzHc6ehgNVkhK9mTwTX7Zx7cLsYXDg Next: 9NADwe7v2BerZDrNXTSVe7Fry5p5QAm4eFJLgmrV3XCt Diff:
OldNewDifferences
5151
5252 let y = "start_height"
5353
54-let z = "admin_pub_1"
54+let z = "dApp_threshold"
5555
56-let A = "admin_pub_2"
56+let A = "admin_pub_1"
5757
58-let B = "admin_pub_3"
58+let B = "admin_pub_2"
5959
60-let C = "admin_invoke_pub"
60+let C = "admin_pub_3"
6161
62-let D = "money_box_address"
62+let D = "admin_invoke_pub"
6363
64-let E = "governance_address"
64+let E = "money_box_address"
6565
66-let F = "farming_address"
66+let F = "governance_address"
6767
68-let G = "voting_address"
68+let G = "farming_address"
6969
70-let H = "usdn_asset_id"
70+let H = "voting_address"
7171
72-let I = "staking_assets"
72+let I = "usdn_asset_id"
7373
74-let J = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
74+let J = "staking_assets"
7575
76-func K (L) = {
77- let M = getString(J, L)
78- if ($isInstanceOf(M, "String"))
76+let K = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
77+
78+func L (M) = {
79+ let N = getString(K, M)
80+ if ($isInstanceOf(N, "String"))
7981 then {
80- let N = M
81- fromBase58String(N)
82+ let O = N
83+ fromBase58String(O)
8284 }
8385 else {
84- let O = M
85- throw((L + "is empty"))
86+ let P = N
87+ throw((M + "is empty"))
8688 }
8789 }
8890
8991
90-let P = K(z)
92+let Q = L(A)
9193
92-let Q = K(A)
94+let R = L(B)
9395
94-let R = K(B)
96+let S = L(C)
9597
96-let S = K(C)
98+let T = L(D)
9799
98-let T = Address(K(D))
100+let U = Address(L(E))
99101
100-let U = Address(K(E))
102+let V = Address(L(F))
101103
102-let V = Address(K(n))
104+let W = Address(L(n))
103105
104-let W = Address(K(G))
106+let X = Address(L(H))
105107
106-let X = Address(K(F))
108+let Y = Address(L(G))
107109
108-let Y = K(H)
110+let Z = L(I)
109111
110-let Z = getStringValue(J, I)
112+let aa = getStringValue(K, J)
111113
112-let aa = valueOrErrorMessage(getInteger(W, w), "Empty kBasePeriod")
114+let ab = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
113115
114-let ab = valueOrErrorMessage(getInteger(W, y), "Empty kStartHeight")
116+let ac = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
115117
116-let ac = valueOrErrorMessage(getInteger(W, x), "Empty kPeriodLength")
118+let ad = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
117119
118-let ad = ((aa + ((height - ab) / ac)) + 3)
120+let ae = ((ab + ((height - ac) / ad)) + 3)
119121
120-let ae = getBooleanValue(this, c)
122+let af = getBooleanValue(this, c)
121123
122-let af = valueOrElse(getBoolean(J, d), true)
124+let ag = valueOrElse(getBoolean(K, d), true)
123125
124-let ag = getStringValue(this, e)
126+let ah = getStringValue(this, e)
125127
126-let ah = getStringValue(this, f)
127-
128-let ai = if ((ag == "WAVES"))
129- then unit
130- else fromBase58String(ag)
128+let ai = getStringValue(this, f)
131129
132130 let aj = if ((ah == "WAVES"))
133131 then unit
134132 else fromBase58String(ah)
135133
136-let ak = {
137- let M = ai
138- if ($isInstanceOf(M, "ByteVector"))
134+let ak = if ((ai == "WAVES"))
135+ then unit
136+ else fromBase58String(ai)
137+
138+let al = {
139+ let N = aj
140+ if ($isInstanceOf(N, "ByteVector"))
139141 then {
140- let al = M
141- value(assetInfo(al)).name
142+ let am = N
143+ value(assetInfo(am)).name
142144 }
143- else if ($isInstanceOf(M, "Unit"))
145+ else if ($isInstanceOf(N, "Unit"))
144146 then {
145- let am = M
147+ let an = N
146148 "WAVES"
147149 }
148150 else throw("Match error")
149151 }
150152
151-let an = {
152- let M = aj
153- if ($isInstanceOf(M, "ByteVector"))
153+let ao = {
154+ let N = ak
155+ if ($isInstanceOf(N, "ByteVector"))
154156 then {
155- let al = M
156- value(assetInfo(al)).name
157+ let am = N
158+ value(assetInfo(am)).name
157159 }
158- else if ($isInstanceOf(M, "Unit"))
160+ else if ($isInstanceOf(N, "Unit"))
159161 then {
160- let am = M
162+ let an = N
161163 "WAVES"
162164 }
163165 else throw("Match error")
164166 }
165167
166-let ao = getIntegerValue(this, g)
168+let ap = getIntegerValue(this, g)
167169
168-let ap = getIntegerValue(this, h)
170+let aq = getIntegerValue(this, h)
169171
170-let aq = fromBase58String(getStringValue(this, i))
172+let ar = fromBase58String(getStringValue(this, i))
171173
172-let ar = getIntegerValue(this, j)
174+let as = getIntegerValue(this, j)
173175
174-let as = getIntegerValue(this, l)
176+let at = getIntegerValue(this, l)
175177
176-let at = getIntegerValue(this, k)
178+let au = getIntegerValue(this, k)
177179
178-let au = fraction(at, 40, 100)
180+let av = fraction(au, 40, 100)
179181
180-let av = 1000000
182+let aw = 1000000
181183
182-let aw = 1000
184+let ax = 1000
183185
184-let ax = 100000000
186+let ay = 100000000
185187
186-let ay = 10000000000000000
188+let az = 10000000000000000
187189
188-let az = 8
190+let aA = 8
189191
190-let aA = 50
192+let aB = 80000000
191193
192-let aB = 100
194+let aC = 120000000
193195
194-let aC = 90000000
196+let aD = 50
195197
196-let aD = 110000000
198+let aE = 2
197199
198-let aE = 50
200+let aF = 4600000000000000
199201
200-let aF = 2
201-
202-let aG = 4600000000000000
203-
204-func aH (aI) = {
205- let M = aI
206- if ($isInstanceOf(M, "ByteVector"))
202+func aG (aH) = {
203+ let N = aH
204+ if ($isInstanceOf(N, "ByteVector"))
207205 then {
208- let al = M
209- assetBalance(this, al)
206+ let am = N
207+ assetBalance(this, am)
210208 }
211- else if ($isInstanceOf(M, "Unit"))
209+ else if ($isInstanceOf(N, "Unit"))
212210 then {
213- let am = M
211+ let an = N
214212 wavesBalance(this).available
215213 }
216214 else throw("Match error")
217215 }
218216
219217
220-func aJ (aI) = {
221- let aK = {
222- let M = aI
223- if ($isInstanceOf(M, "ByteVector"))
218+func aI (aH) = {
219+ let aJ = {
220+ let N = aH
221+ if ($isInstanceOf(N, "ByteVector"))
224222 then {
225- let aL = M
226- if ((aL == Y))
227- then getInteger(V, ((("rpd_balance_" + toBase58String(aL)) + "_") + toString(this)))
223+ let aK = N
224+ if ((aK == Z))
225+ then getInteger(W, ((("rpd_balance_" + toBase58String(aK)) + "_") + toString(this)))
228226 else 0
229227 }
230- else if ($isInstanceOf(M, "Unit"))
228+ else if ($isInstanceOf(N, "Unit"))
231229 then 0
232230 else throw("Match error")
233231 }
234- let M = aK
235- if ($isInstanceOf(M, "Int"))
232+ let N = aJ
233+ if ($isInstanceOf(N, "Int"))
236234 then {
237- let aM = M
238- aM
235+ let aL = N
236+ aL
239237 }
240238 else 0
241239 }
242240
243241
244-let aN = aJ(ai)
242+let aM = aI(aj)
245243
246-let aO = aJ(aj)
244+let aN = aI(ak)
247245
248-let aP = (ao - aN)
246+let aO = (ap - aM)
249247
250-let aQ = (ap - aO)
248+let aP = (aq - aN)
251249
252-let aR = (aH(ai) + aN)
250+let aQ = (aG(aj) + aM)
253251
254-let aS = (aH(aj) + aO)
252+let aR = (aG(ak) + aN)
255253
256-let aT = if ((aR >= ao))
257- then (aS >= ap)
254+let aS = if ((aQ >= ap))
255+ then (aR >= aq)
258256 else false
259257
260-func aU (aV,aW) = ((fraction(ay, aV, aW) + fraction(ay, aW, aV)) / 2)
258+func aT (aU,aV) = ((fraction(az, aU, aV) + fraction(az, aV, aU)) / 2)
261259
262260
263-func aX (aV,aW) = {
264- let aY = aU(aV, aW)
265- (fraction((aV + aW), ay, pow(aY, az, aE, aF, az, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aV), toBigInt(aW), toBigInt(ax)), 0, toBigInt(5), 1, (az / 2), DOWN)), pow((aY - aG), az, aE, aF, az, DOWN), ax)))
261+func aW (aU,aV) = {
262+ let aX = aT(aU, aV)
263+ (fraction((aU + aV), az, pow(aX, aA, aD, aE, aA, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aU), toBigInt(aV), toBigInt(ay)), 0, toBigInt(5), 1, (aA / 2), DOWN)), pow((aX - aF), aA, aD, aE, aA, DOWN), ay)))
266264 }
267265
268266
269-func aZ (ba,bb,bc,bd,be,bf,bg) = {
270- let bh = (ay - ((ay * 1) / 10000000))
271- let bi = (ba - bb)
272- let aV = (be + bc)
273- let aW = (bf + bc)
274- func bj (bk,bl) = if ((bk._1 == -1))
267+func aY (aZ,ba,bb,bc,bd,be,bf) = {
268+ let bg = (az - ((az * 1) / 10000000))
269+ let bh = (aZ - ba)
270+ let aU = (bd + bb)
271+ let aV = (be + bb)
272+ func bi (bj,bk) = if ((bj._1 == -1))
275273 then {
276- let bm = (ba - (((bl * bi) / 3) / aw))
277- let bn = if ((bd == ai))
278- then aX(aV, (bf - bm))
279- else aX((be - bm), aW)
280- if ((bn > bg))
281- then $Tuple2(bm, bn)
274+ let bl = (aZ - (((bk * bh) / 3) / ax))
275+ let bm = if ((bc == aj))
276+ then aW(aU, (be - bl))
277+ else aW((bd - bl), aV)
278+ if ((bm > bf))
279+ then $Tuple2(bl, bm)
282280 else $Tuple2(-1, 0)
283281 }
284- else bk
282+ else bj
285283
286- let bo = bj($Tuple2(-1, 0), 3000)
287- if ((0 > bo._1))
284+ let bn = bi($Tuple2(-1, 0), 3000)
285+ if ((0 > bn._1))
288286 then throw("Price is worse than minReceived")
289287 else {
290- let bp = if ((bd == ai))
291- then aX(aV, (bf - ba))
292- else if ((bd == aj))
293- then aX((be - ba), aW)
288+ let bo = if ((bc == aj))
289+ then aW(aU, (be - aZ))
290+ else if ((bc == ak))
291+ then aW((bd - aZ), aV)
294292 else throw("Wrong asset in payment")
295- if ((bg > bp))
296- then if ((bh >= fraction(ay, bg, bp)))
293+ if ((bf > bo))
294+ then if ((bg >= fraction(az, bf, bo)))
297295 then throw("The requested price is too not profitable for user")
298296 else {
299- let bq = {
300- let br = [25, 200, 500]
301- let bs = size(br)
302- let bt = $Tuple2(-1, 0)
303- func bu (bv,bw) = if ((bw >= bs))
304- then bv
305- else bj(bv, br[bw])
297+ let bp = {
298+ let bq = [25, 200, 500]
299+ let br = size(bq)
300+ let bs = $Tuple2(-1, 0)
301+ func bt (bu,bv) = if ((bv >= br))
302+ then bu
303+ else bi(bu, bq[bv])
306304
307- func bx (bv,bw) = if ((bw >= bs))
308- then bv
305+ func bw (bu,bv) = if ((bv >= br))
306+ then bu
309307 else throw("List size exceeds 3")
310308
311- bx(bu(bu(bu(bt, 0), 1), 2), 3)
309+ bw(bt(bt(bt(bs, 0), 1), 2), 3)
312310 }
313- if ((0 > bq._1))
314- then bo._1
315- else bq._1
311+ if ((0 > bp._1))
312+ then bn._1
313+ else bp._1
316314 }
317315 else {
318- let bq = {
319- let br = [-500, -200, -25]
320- let bs = size(br)
321- let bt = $Tuple2(-1, 0)
322- func bu (bv,bw) = if ((bw >= bs))
323- then bv
324- else bj(bv, br[bw])
316+ let bp = {
317+ let bq = [-500, -200, -25]
318+ let br = size(bq)
319+ let bs = $Tuple2(-1, 0)
320+ func bt (bu,bv) = if ((bv >= br))
321+ then bu
322+ else bi(bu, bq[bv])
325323
326- func bx (bv,bw) = if ((bw >= bs))
327- then bv
324+ func bw (bu,bv) = if ((bv >= br))
325+ then bu
328326 else throw("List size exceeds 3")
329327
330- bx(bu(bu(bu(bt, 0), 1), 2), 3)
328+ bw(bt(bt(bt(bs, 0), 1), 2), 3)
331329 }
332- let by = if ((0 > bq._1))
333- then $Tuple2(ba, bp)
334- else bq
335- if ((bh >= fraction(ay, bg, by._2)))
330+ let bx = if ((0 > bp._1))
331+ then $Tuple2(aZ, bo)
332+ else bp
333+ if ((bg >= fraction(az, bf, bx._2)))
336334 then throw("The requested price is too not profitable for user")
337- else by._1
335+ else bx._1
338336 }
339337 }
340338 }
341339
342340
343-func bz (aI) = {
344- let M = aI
345- if ($isInstanceOf(M, "ByteVector"))
341+func by (aH) = {
342+ let N = aH
343+ if ($isInstanceOf(N, "ByteVector"))
346344 then {
347- let al = M
348- let bA = toBase58String(al)
349- let bB = valueOrErrorMessage(assetInfo(al), (("Asset " + bA) + " doesn't exist"))
350- $Tuple3(bA, bB.name, bB.decimals)
345+ let am = N
346+ let bz = toBase58String(am)
347+ let bA = valueOrErrorMessage(assetInfo(am), (("Asset " + bz) + " doesn't exist"))
348+ $Tuple3(bz, bA.name, bA.decimals)
351349 }
352- else if ($isInstanceOf(M, "Unit"))
350+ else if ($isInstanceOf(N, "Unit"))
353351 then {
354- let am = M
352+ let an = N
355353 $Tuple3("WAVES", "WAVES", 8)
356354 }
357355 else throw("Match error")
358356 }
359357
360358
361-func bC (bD) = [BooleanEntry(c, false), StringEntry(m, bD)]
359+func bB (bC) = [BooleanEntry(c, false), StringEntry(m, bC)]
362360
363361
364-func bE () = throw("DApp is already active")
362+func bD () = throw("DApp is already active")
365363
366364
367-func bF () = if (if (ae)
368- then af
365+func bE () = if (if (af)
366+ then ag
369367 else false)
370368 then unit
371369 else throw("DApp is inactive at this moment")
372370
373371
374-func bG (aM) = if (containsElement([P, Q, R], aM.callerPublicKey))
372+func bF (aL) = if (containsElement([Q, R, S], aL.callerPublicKey))
375373 then unit
376374 else throw("Only admin can call this function")
377375
378376
379-func bH (aM) = if ((this == aM.caller))
377+func bG (aL) = if ((this == aL.caller))
380378 then unit
381379 else throw("Only contract itself can call this function")
382380
383381
384-func bI () = throw(((("Incorrect assets attached. Expected: " + ag) + " and ") + ah))
382+func bH () = throw(((("Incorrect assets attached. Expected: " + ah) + " and ") + ai))
385383
386384
387-func bJ () = throw("One attached payment expected")
385+func bI () = throw("One attached payment expected")
388386
389387
390-func bK (bL,bM,bN) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bL)) + ": ") + toString(bM)) + " ") + ak) + ", ") + toString(bN)) + " ") + an))
388+func bJ () = bB(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + al) + ", ") + toString(aq)) + " ") + ao) + ". State: ") + toString(aG(aj))) + " ") + al) + ", ") + toString(aG(ak))) + " ") + ao))
391389
392390
393-func bO () = bC(((((((((((((((("Suspicious state. Actual balances: " + toString(ao)) + " ") + ak) + ", ") + toString(ap)) + " ") + an) + ". State: ") + toString(aH(ai))) + " ") + ak) + ", ") + toString(aH(aj))) + " ") + an))
391+func bK (bL,aH) = if (bL)
392+ then $Tuple2("lockNeutrino", W)
393+ else $Tuple2("unlockNeutrino", W)
394394
395395
396-func bP (bQ,aI) = if (bQ)
397- then $Tuple2("lockNeutrino", V)
398- else $Tuple2("unlockNeutrino", V)
399-
400-
401-func bR (bQ,bS,aI) = if (bQ)
396+func bM (bL,bN,aH) = if (bL)
402397 then {
403- let bT = bP(bQ, aI)
404- let bU = bT._1
405- let bV = bT._2
406- $Tuple4(bU, bV, nil, [AttachedPayment(aI, bS)])
398+ let bO = bK(bL, aH)
399+ let bP = bO._1
400+ let bQ = bO._2
401+ $Tuple4(bP, bQ, nil, [AttachedPayment(aH, bN)])
407402 }
408403 else {
409- let bW = bP(bQ, aI)
410- let bU = bW._1
411- let bV = bW._2
412- $Tuple4(bU, bV, [bS, toBase58String(aI)], nil)
404+ let bR = bK(bL, aH)
405+ let bP = bR._1
406+ let bQ = bR._2
407+ $Tuple4(bP, bQ, [bN, toBase58String(aH)], nil)
413408 }
414409
415410
416-func bX (bY) = {
417- let bZ = valueOrElse(getInteger(U, (toString(bY) + r)), 0)
418- let ca = valueOrElse(getInteger(U, (toString(bY) + s)), bZ)
419- let cb = split(getStringValue(J, q), ",")
420- let cc = split(getStringValue(J, p), ",")
421- if (if ((ca >= parseIntValue(cb[0])))
422- then (parseIntValue(cb[1]) > ca)
411+func bS (bT) = {
412+ let bU = valueOrElse(getInteger(V, (toString(bT) + r)), 0)
413+ let bV = valueOrElse(getInteger(V, (toString(bT) + s)), bU)
414+ let bW = split(getStringValue(K, q), ",")
415+ let bX = split(getStringValue(K, p), ",")
416+ if (if ((bV >= parseIntValue(bW[0])))
417+ then (parseIntValue(bW[1]) > bV)
423418 else false)
424- then (av - parseIntValue(cc[0]))
425- else if (if ((ca >= parseIntValue(cb[1])))
426- then (parseIntValue(cb[2]) > ca)
419+ then (aw - parseIntValue(bX[0]))
420+ else if (if ((bV >= parseIntValue(bW[1])))
421+ then (parseIntValue(bW[2]) > bV)
427422 else false)
428- then (av - parseIntValue(cc[1]))
429- else if (if ((ca >= parseIntValue(cb[2])))
430- then (parseIntValue(cb[3]) > ca)
423+ then (aw - parseIntValue(bX[1]))
424+ else if (if ((bV >= parseIntValue(bW[2])))
425+ then (parseIntValue(bW[3]) > bV)
431426 else false)
432- then (av - parseIntValue(cc[2]))
433- else if (if ((ca >= parseIntValue(cb[3])))
434- then (parseIntValue(cb[4]) > ca)
427+ then (aw - parseIntValue(bX[2]))
428+ else if (if ((bV >= parseIntValue(bW[3])))
429+ then (parseIntValue(bW[4]) > bV)
435430 else false)
436- then (av - parseIntValue(cc[3]))
437- else if ((ca >= parseIntValue(cb[4])))
438- then (av - parseIntValue(cc[4]))
439- else av
431+ then (aw - parseIntValue(bX[3]))
432+ else if ((bV >= parseIntValue(bW[4])))
433+ then (aw - parseIntValue(bX[4]))
434+ else aw
440435 }
441436
442437
443-func cd (aM,ce,cf) = {
444- let cg = aM.payments[0].assetId
445- let ch = aM.payments[1].assetId
446- let ci = fraction(ax, aM.payments[0].amount, ao)
447- let cj = fraction(ax, aM.payments[1].amount, ap)
448- let ck = bz(cg)
449- let cl = ck._1
450- let cm = ck._2
451- let cn = ck._3
452- let co = bz(ch)
438+func bY (bZ,ca,cb) = {
439+ let cc = getIntegerValue(this, z)
440+ let cd = if (if ((cb == aj))
441+ then (bZ > ca)
442+ else false)
443+ then fraction(bZ, 1, ca, CEILING)
444+ else if (if ((cb == ak))
445+ then (ca > bZ)
446+ else false)
447+ then fraction(ca, 1, bZ, CEILING)
448+ else 0
449+ if ((cd > cc))
450+ then {
451+ let ce = if ((cb == aj))
452+ then $Tuple2(ao, al)
453+ else $Tuple2(al, ao)
454+ let cf = ce._1
455+ let cg = ce._2
456+ throw((((("Buying " + cf) + " is temporarily unavailable due to the ") + cg) + " depeg"))
457+ }
458+ else true
459+ }
460+
461+
462+func ch (aL,ci,cj) = {
463+ let ck = aL.payments[0].assetId
464+ let cl = aL.payments[1].assetId
465+ let cm = fraction(ay, aL.payments[0].amount, ap)
466+ let cn = fraction(ay, aL.payments[1].amount, aq)
467+ let co = by(ck)
453468 let cp = co._1
454469 let cq = co._2
455470 let cr = co._3
456- let cs = if ((cj > ci))
471+ let cs = by(cl)
472+ let ct = cs._1
473+ let cu = cs._2
474+ let cv = cs._3
475+ let cw = if ((cn > cm))
457476 then {
458- let ct = fraction(ap, ci, ax, CEILING)
459- $Tuple5(aM.payments[0].amount, ct, (aM.payments[1].amount - ct), ch, ci)
477+ let cx = fraction(aq, cm, ay, CEILING)
478+ $Tuple5(aL.payments[0].amount, cx, (aL.payments[1].amount - cx), cl, cm)
460479 }
461480 else {
462- let ct = fraction(ao, cj, ax, CEILING)
463- $Tuple5(ct, aM.payments[1].amount, (aM.payments[0].amount - ct), cg, cj)
481+ let cx = fraction(ap, cn, ay, CEILING)
482+ $Tuple5(cx, aL.payments[1].amount, (aL.payments[0].amount - cx), ck, cn)
464483 }
465- let cu = cs._1
466- let cv = cs._2
467- let cw = cs._3
468- let cx = cs._4
469- let cy = cs._5
470- let cz = fraction(cy, ar, ax)
471- if (if ((size(aM.payments) != 2))
472- then (size(aM.payments) != 3)
484+ let cy = cw._1
485+ let cz = cw._2
486+ let cA = cw._3
487+ let cB = cw._4
488+ let cC = cw._5
489+ let cD = fraction(cC, as, ay)
490+ if (if ((size(aL.payments) != 2))
491+ then (size(aL.payments) != 3)
473492 else false)
474493 then throw("Two or three payments expected")
475- else if (if ((cg != ai))
494+ else if (if ((ck != aj))
476495 then true
477- else (ch != aj))
478- then bI()
479- else if ((cz == 0))
496+ else (cl != ak))
497+ then bH()
498+ else if ((cD == 0))
480499 then throw("Too small amount to replenish")
481- else if ((0 > cw))
500+ else if ((0 > cA))
482501 then throw("Change < 0")
483- else if (!(aT))
484- then ([ScriptTransfer(aM.caller, cu, cg), ScriptTransfer(aM.caller, cv, ch)] ++ bO())
502+ else if (!(aS))
503+ then ([ScriptTransfer(aL.caller, cy, ck), ScriptTransfer(aL.caller, cz, cl)] ++ bJ())
485504 else {
486- let cA = if (contains(Z, cl))
487- then invoke(this, "stakeUnstake", [true, cu, cl], nil)
505+ let cE = if (contains(aa, cp))
506+ then invoke(this, "stakeUnstake", [true, cy, cp], nil)
488507 else 0
489- if ((cA == cA))
508+ if ((cE == cE))
490509 then {
491- let cB = if (contains(Z, cp))
492- then invoke(this, "stakeUnstake", [true, cv, cp], nil)
510+ let cF = if (contains(aa, ct))
511+ then invoke(this, "stakeUnstake", [true, cz, ct], nil)
493512 else 0
494- if ((cB == cB))
513+ if ((cF == cF))
495514 then {
496- let cC = [IntegerEntry(g, (ao + cu)), IntegerEntry(h, (ap + cv)), IntegerEntry(j, (ar + cz)), IntegerEntry(l, aX((ao + cu), (ap + cv))), ScriptTransfer(aM.caller, cw, cx)]
497- if (ce)
515+ let cG = [IntegerEntry(g, (ap + cy)), IntegerEntry(h, (aq + cz)), IntegerEntry(j, (as + cD)), IntegerEntry(l, aW((ap + cy), (aq + cz))), ScriptTransfer(aL.caller, cA, cB)]
516+ if (ci)
498517 then {
499- let cD = ([AttachedPayment(aq, cz)] ++ (if ((size(aM.payments) == 3))
500- then [AttachedPayment(if ((aM.payments[2].assetId == base58''))
518+ let cH = ([AttachedPayment(ar, cD)] ++ (if ((size(aL.payments) == 3))
519+ then [AttachedPayment(if ((aL.payments[2].assetId == base58''))
501520 then unit
502- else aM.payments[2].assetId, aM.payments[2].amount)]
521+ else aL.payments[2].assetId, aL.payments[2].amount)]
503522 else nil))
504- let cE = invoke(this, "reissueShare", [cz], nil)
505- if ((cE == cE))
523+ let cI = invoke(this, "reissueShare", [cD], nil)
524+ if ((cI == cI))
506525 then {
507- let cF = invoke(X, "lockShareTokensFromPool", [aM.caller.bytes, toString(this), cf], cD)
508- if ((cF == cF))
509- then cC
526+ let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
527+ if ((cJ == cJ))
528+ then cG
510529 else throw("Strict value is not equal to itself.")
511530 }
512531 else throw("Strict value is not equal to itself.")
513532 }
514- else (cC ++ [Reissue(aq, cz, true), ScriptTransfer(aM.caller, cz, aq)])
533+ else (cG ++ [Reissue(ar, cD, true), ScriptTransfer(aL.caller, cD, ar)])
515534 }
516535 else throw("Strict value is not equal to itself.")
517536 }
520539 }
521540
522541
523-func cG (aM,cH,cI,ce,cf) = {
524- let cJ = $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
525- let cK = cJ._1
526- let cL = cJ._2
527- let cM = bz(cL)
528- let cN = cM._1
529- let cO = cM._2
530- let cP = cM._3
531- let cQ = 5000000
532- let cR = 50000000
533- let cS = if ((cR > cK))
542+func cK (aL,cL,cM,ci,cj) = {
543+ let cN = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
544+ let cO = cN._1
545+ let cb = cN._2
546+ let cP = by(cb)
547+ let cQ = cP._1
548+ let cR = cP._2
549+ let cS = cP._3
550+ let cT = 5000000
551+ let cU = 50000000
552+ let cV = if ((cU > cO))
534553 then 100000
535554 else 1
536- let cT = (ax - ((ax * cS) / 10000000))
537- let cU = (ax + ((ax * cS) / 10000000))
538- let cV = (ax - ((ax * 1) / 10000000))
539- if ((cQ > cK))
540- then throw((((("Payment amount " + toString(cK)) + " does not exceed the minimum amount of ") + toString(cQ)) + " tokens"))
541- else if (if ((size(aM.payments) != 1))
542- then (size(aM.payments) != 2)
555+ let cW = (ay - ((ay * cV) / 10000000))
556+ let cX = (ay + ((ay * cV) / 10000000))
557+ let cY = (ay - ((ay * 1) / 10000000))
558+ if ((cT > cO))
559+ then throw((((("Payment amount " + toString(cO)) + " does not exceed the minimum amount of ") + toString(cT)) + " tokens"))
560+ else if (if ((size(aL.payments) != 1))
561+ then (size(aL.payments) != 2)
543562 else false)
544563 then throw("One or two payments expected")
545- else if (!(aT))
546- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
547- else if (if ((cL != ai))
548- then (cL != aj)
564+ else if (!(aS))
565+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
566+ else if (if ((cb != aj))
567+ then (cb != ak)
549568 else false)
550- then bI()
569+ then bH()
551570 else {
552- let cW = if ((cL == ai))
553- then $Tuple6((cK - cH), cI, (ao + cH), (ap - cI), (ao + cK), ap)
554- else $Tuple6(cI, (cK - cH), (ao - cI), (ap + cH), ao, (ap + cK))
555- let cX = cW._1
556- let cY = cW._2
557- let cZ = cW._3
558- let da = cW._4
559- let db = cW._5
560- let dc = cW._6
561- let dd = aX(cZ, da)
562- let de = (fraction(ay, cZ, da) / fraction(ax, cX, cY))
563- let df = fraction((db + dc), aA, (2 * aB))
564- if (if ((cV >= fraction(ax, as, dd)))
571+ let cZ = if ((cb == aj))
572+ then $Tuple6((cO - cL), cM, (ap + cL), (aq - cM), (ap + cO), aq)
573+ else $Tuple6(cM, (cO - cL), (ap - cM), (aq + cL), ap, (aq + cO))
574+ let da = cZ._1
575+ let db = cZ._2
576+ let dc = cZ._3
577+ let dd = cZ._4
578+ let bZ = cZ._5
579+ let ca = cZ._6
580+ let de = aW(dc, dd)
581+ let df = (fraction(az, dc, dd) / fraction(ay, da, db))
582+ if (if ((cY >= fraction(ay, at, de)))
565583 then true
566- else (as > dd))
584+ else (at > de))
567585 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
568- else if (if ((cT > de))
586+ else if (if ((cW > df))
569587 then true
570- else (de > cU))
588+ else (df > cX))
571589 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
572- else if (if ((df > db))
573- then true
574- else (df > dc))
575- then bK(df, db, dc)
590+ else if (!(bY(bZ, ca, cb)))
591+ then throw()
576592 else {
577- let ci = fraction(cX, ax, cZ)
578- let cj = fraction(cY, ax, da)
579- let cz = fraction(min([ci, cj]), ar, ax)
580- let dg = fraction(cz, (av - (at / 2)), av)
581- let dh = fraction(cz, (au / 2), av)
582- let di = fraction(dh, ao, ar)
583- let dj = fraction(dh, ap, ar)
584- let dk = if ((cN == ag))
585- then $Tuple3((cK - di), dj, ah)
586- else $Tuple3((cK - dj), di, ag)
593+ let cm = fraction(da, ay, dc)
594+ let cn = fraction(db, ay, dd)
595+ let cD = fraction(min([cm, cn]), as, ay)
596+ let dg = fraction(cD, (aw - (au / 2)), aw)
597+ let dh = fraction(cD, (av / 2), aw)
598+ let di = fraction(dh, ap, as)
599+ let dj = fraction(dh, aq, as)
600+ let dk = if ((cQ == ah))
601+ then $Tuple3((cO - di), dj, ai)
602+ else $Tuple3((cO - dj), di, ah)
587603 let dl = dk._1
588604 let dm = dk._2
589605 let dn = dk._3
590- let cA = if (contains(Z, cN))
591- then invoke(this, "stakeUnstake", [true, dl, cN], nil)
606+ let cE = if (contains(aa, cQ))
607+ then invoke(this, "stakeUnstake", [true, dl, cQ], nil)
592608 else 0
593- if ((cA == cA))
609+ if ((cE == cE))
594610 then {
595- let cB = if (contains(Z, dn))
611+ let cF = if (contains(aa, dn))
596612 then invoke(this, "stakeUnstake", [false, dm, dn], nil)
597613 else 0
598- if ((cB == cB))
614+ if ((cF == cF))
599615 then {
600- let cC = [IntegerEntry(g, (db - di)), IntegerEntry(h, (dc - dj)), IntegerEntry(j, (ar + dg)), IntegerEntry(l, aX((db - di), (dc - dj))), ScriptTransfer(T, di, ai), ScriptTransfer(T, dj, aj)]
601- if (ce)
616+ let cG = [IntegerEntry(g, (bZ - di)), IntegerEntry(h, (ca - dj)), IntegerEntry(j, (as + dg)), IntegerEntry(l, aW((bZ - di), (ca - dj))), ScriptTransfer(U, di, aj), ScriptTransfer(U, dj, ak)]
617+ if (ci)
602618 then {
603- let cD = ([AttachedPayment(aq, dg)] ++ (if ((size(aM.payments) == 2))
604- then [AttachedPayment(if ((aM.payments[1].assetId == base58''))
619+ let cH = ([AttachedPayment(ar, dg)] ++ (if ((size(aL.payments) == 2))
620+ then [AttachedPayment(if ((aL.payments[1].assetId == base58''))
605621 then unit
606- else aM.payments[1].assetId, aM.payments[1].amount)]
622+ else aL.payments[1].assetId, aL.payments[1].amount)]
607623 else nil))
608- let cE = invoke(this, "reissueShare", [dg], nil)
609- if ((cE == cE))
624+ let cI = invoke(this, "reissueShare", [dg], nil)
625+ if ((cI == cI))
610626 then {
611- let cF = invoke(X, "lockShareTokensFromPool", [aM.caller.bytes, toString(this), cf], cD)
612- if ((cF == cF))
613- then cC
627+ let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
628+ if ((cJ == cJ))
629+ then cG
614630 else throw("Strict value is not equal to itself.")
615631 }
616632 else throw("Strict value is not equal to itself.")
617633 }
618- else (cC ++ [Reissue(aq, dg, true), ScriptTransfer(aM.caller, dg, aq)])
634+ else (cG ++ [Reissue(ar, dg, true), ScriptTransfer(aL.caller, dg, ar)])
619635 }
620636 else throw("Strict value is not equal to itself.")
621637 }
625641 }
626642
627643
628-func do (aM,dp) = {
629- let dq = if ((size(aM.payments) == 1))
630- then if ((aM.payments[0].assetId != aq))
631- then throw(("Incorrect asset attached. Expected: " + toBase58String(aq)))
632- else $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
633- else $Tuple2(0, aq)
634- let cK = dq._1
635- let cL = dq._2
636- if (!(aT))
637- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
644+func do (aL,dp) = {
645+ let dq = if ((size(aL.payments) == 1))
646+ then if ((aL.payments[0].assetId != ar))
647+ then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
648+ else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
649+ else $Tuple2(0, ar)
650+ let cO = dq._1
651+ let cb = dq._2
652+ if (!(aS))
653+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
638654 else {
639655 let dr = if ((dp > 0))
640- then invoke(X, "withdrawShareTokensFromPool", [aM.caller.bytes, toString(this), dp], nil)
656+ then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
641657 else 0
642658 if ((dr == dr))
643659 then {
644- let ds = (cK + dp)
645- let dt = fraction(ds, ao, ar)
646- let du = fraction(ds, ap, ar)
647- let dv = aX((ao - dt), (ap - du))
648- let cA = if (contains(Z, ag))
649- then invoke(this, "stakeUnstake", [false, dt, ag], nil)
660+ let ds = (cO + dp)
661+ let dt = fraction(ds, ap, as)
662+ let du = fraction(ds, aq, as)
663+ let dv = aW((ap - dt), (aq - du))
664+ let cE = if (contains(aa, ah))
665+ then invoke(this, "stakeUnstake", [false, dt, ah], nil)
650666 else 0
651- if ((cA == cA))
667+ if ((cE == cE))
652668 then {
653- let cB = if (contains(Z, ah))
654- then invoke(this, "stakeUnstake", [false, du, ah], nil)
669+ let cF = if (contains(aa, ai))
670+ then invoke(this, "stakeUnstake", [false, du, ai], nil)
655671 else 0
656- if ((cB == cB))
657- then [IntegerEntry(g, (ao - dt)), IntegerEntry(h, (ap - du)), IntegerEntry(j, (ar - ds)), IntegerEntry(l, dv), Burn(aq, ds), ScriptTransfer(aM.caller, dt, ai), ScriptTransfer(aM.caller, du, aj)]
672+ if ((cF == cF))
673+ then [IntegerEntry(g, (ap - dt)), IntegerEntry(h, (aq - du)), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dt, aj), ScriptTransfer(aL.caller, du, ak)]
658674 else throw("Strict value is not equal to itself.")
659675 }
660676 else throw("Strict value is not equal to itself.")
664680 }
665681
666682
667-@Callable(aM)
683+@Callable(aL)
668684 func init (dw) = {
669- let dx = $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
670- let cu = dx._1
671- let cg = dx._2
672- let dy = $Tuple2(aM.payments[1].amount, aM.payments[1].assetId)
673- let cv = dy._1
674- let ch = dy._2
675- let dz = bz(cg)
676- let cl = dz._1
677- let cm = dz._2
678- let cn = dz._3
679- let dA = bz(ch)
680- let cp = dA._1
681- let cq = dA._2
682- let cr = dA._3
685+ let dx = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
686+ let cy = dx._1
687+ let ck = dx._2
688+ let dy = $Tuple2(aL.payments[1].amount, aL.payments[1].assetId)
689+ let cz = dy._1
690+ let cl = dy._2
691+ let dz = by(ck)
692+ let cp = dz._1
693+ let cq = dz._2
694+ let cr = dz._3
695+ let dA = by(cl)
696+ let ct = dA._1
697+ let cu = dA._2
698+ let cv = dA._3
683699 if (isDefined(getBoolean(this, c)))
684- then bE()
685- else if ((cg == ch))
700+ then bD()
701+ else if ((ck == cl))
686702 then throw("Assets must be different")
687703 else {
688- let dB = ((("s" + take(cm, 7)) + "_") + take(cq, 7))
689- let dC = ((((("ShareToken of SwopFi protocol for " + cm) + " and ") + cq) + " at address ") + toString(this))
690- let dD = ((cn + cr) / 2)
691- let dE = fraction(pow(cu, cn, 5, 1, cn, DOWN), pow(cv, cr, 5, 1, cr, DOWN), pow(10, 0, dD, 0, 0, DOWN))
704+ let dB = ((("s" + take(cq, 7)) + "_") + take(cu, 7))
705+ let dC = ((((("ShareToken of SwopFi protocol for " + cq) + " and ") + cu) + " at address ") + toString(this))
706+ let dD = ((cr + cv) / 2)
707+ let dE = fraction(pow(cy, cr, 5, 1, cr, DOWN), pow(cz, cv, 5, 1, cv, DOWN), pow(10, 0, dD, 0, 0, DOWN))
692708 let dF = Issue(dB, dC, dE, dD, true)
693709 let dG = calculateAssetId(dF)
694- let dv = aX(cu, cv)
695- let cA = if (contains(Z, cl))
696- then invoke(this, "stakeUnstake", [true, cu, cl], nil)
710+ let dv = aW(cy, cz)
711+ let cE = if (contains(aa, cp))
712+ then invoke(this, "stakeUnstake", [true, cy, cp], nil)
697713 else 0
698- if ((cA == cA))
714+ if ((cE == cE))
699715 then {
700- let cB = if (contains(Z, cp))
701- then invoke(this, "stakeUnstake", [true, cv, cp], nil)
716+ let cF = if (contains(aa, ct))
717+ then invoke(this, "stakeUnstake", [true, cz, ct], nil)
702718 else 0
703- if ((cB == cB))
719+ if ((cF == cF))
704720 then {
705- let dH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, cl), StringEntry(f, cp), IntegerEntry(g, cu), IntegerEntry(h, cv), IntegerEntry(l, dv), IntegerEntry(k, getIntegerValue(J, "base_fee_flat")), dF, StringEntry(i, toBase58String(dG)), IntegerEntry(j, dE), ScriptTransfer(aM.caller, dE, dG)]
721+ let dH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, cp), StringEntry(f, ct), IntegerEntry(g, cy), IntegerEntry(h, cz), IntegerEntry(l, dv), IntegerEntry(k, getIntegerValue(K, "base_fee_flat")), IntegerEntry(z, 3), dF, StringEntry(i, toBase58String(dG)), IntegerEntry(j, dE), ScriptTransfer(aL.caller, dE, dG)]
706722 if (dw)
707- then (dH ++ [BooleanEntry(t, dw), IntegerEntry(u, (ab + (ad * ac)))])
723+ then (dH ++ [BooleanEntry(t, dw), IntegerEntry(u, (ac + (ae * ad)))])
708724 else dH
709725 }
710726 else throw("Strict value is not equal to itself.")
715731
716732
717733
718-@Callable(aM)
719-func replenishWithTwoTokensV2 (ce,cf) = valueOrElse(bF(), cd(aM, ce, cf))
734+@Callable(aL)
735+func replenishWithTwoTokensV2 (ci,cj) = valueOrElse(bE(), ch(aL, ci, cj))
720736
721737
722738
723-@Callable(aM)
724-func replenishWithOneTokenV2 (cH,cI,ce,cf) = valueOrElse(bF(), cG(aM, cH, cI, ce, cf))
739+@Callable(aL)
740+func replenishWithOneTokenV2 (cL,cM,ci,cj) = valueOrElse(bE(), cK(aL, cL, cM, ci, cj))
725741
726742
727743
728-@Callable(aM)
729-func withdrawV2 (dp) = valueOrElse(bF(), do(aM, dp))
744+@Callable(aL)
745+func withdrawV2 (dp) = valueOrElse(bE(), do(aL, dp))
730746
731747
732748
733-@Callable(aM)
734-func withdrawOneToken (dp,dI,dJ,dK) = valueOrElse(bF(), {
735- let dL = if ((size(aM.payments) == 1))
736- then if ((aM.payments[0].assetId != aq))
737- then throw(("Incorrect asset attached. Expected: " + toBase58String(aq)))
738- else $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
739- else $Tuple2(0, aq)
740- let cK = dL._1
741- let cL = dL._2
742- let ds = (cK + dp)
743- if (if ((dI != ag))
744- then (dI != ah)
749+@Callable(aL)
750+func withdrawOneToken (dp,dI,dJ,dK) = valueOrElse(bE(), {
751+ let dL = if ((size(aL.payments) == 1))
752+ then if ((aL.payments[0].assetId != ar))
753+ then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
754+ else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
755+ else $Tuple2(0, ar)
756+ let cO = dL._1
757+ let cb = dL._2
758+ let ds = (cO + dp)
759+ if (if ((dI != ah))
760+ then (dI != ai)
745761 else false)
746762 then throw("Incorrect withdraw asset")
747763 else if ((0 >= ds))
748764 then throw("withdraw amount must be grater than 0")
749- else if (!(aT))
750- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
765+ else if (!(aS))
766+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
751767 else {
752768 let dr = if ((dp > 0))
753- then invoke(X, "withdrawShareTokensFromPool", [aM.caller.bytes, toString(this), dp], nil)
769+ then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
754770 else 0
755771 if ((dr == dr))
756772 then {
757- let dt = fraction(ds, ao, ar)
758- let du = fraction(ds, ap, ar)
759- let dM = (ao - dt)
760- let dN = (ap - du)
761- let dO = bX(aM.originCaller)
762- let dP = if ((dI == ag))
763- then aZ(dJ, dK, du, aj, dM, dN, aX(dM, dN))
764- else aZ(dJ, dK, dt, ai, dM, dN, aX(dM, dN))
765- let dQ = fraction(dP, fraction(au, dO, av, CEILING), av)
766- let dR = fraction(dP, (av - fraction(at, dO, av, CEILING)), av)
767- let dS = if ((dI == ag))
768- then $Tuple3((dt + dR), (((ao - dt) - dR) - dQ), ap)
769- else $Tuple3((du + dR), ao, (((ap - du) - dR) - dQ))
773+ let dt = fraction(ds, ap, as)
774+ let du = fraction(ds, aq, as)
775+ let dM = (ap - dt)
776+ let dN = (aq - du)
777+ let dO = bS(aL.originCaller)
778+ let dP = if ((dI == ah))
779+ then aY(dJ, dK, du, ak, dM, dN, aW(dM, dN))
780+ else aY(dJ, dK, dt, aj, dM, dN, aW(dM, dN))
781+ let dQ = fraction(dP, fraction(av, dO, aw, CEILING), aw)
782+ let dR = fraction(dP, (aw - fraction(au, dO, aw, CEILING)), aw)
783+ let dS = if ((dI == ah))
784+ then $Tuple4((dt + dR), (((ap - dt) - dR) - dQ), aq, ak)
785+ else $Tuple4((du + dR), ap, (((aq - du) - dR) - dQ), aj)
770786 let dT = dS._1
771787 let dU = dS._2
772788 let dV = dS._3
773- let dv = aX(dU, dV)
774- let cA = if (contains(Z, dI))
775- then invoke(this, "stakeUnstake", [false, (dT + dQ), dI], nil)
776- else 0
777- if ((cA == cA))
778- then [IntegerEntry(g, dU), IntegerEntry(h, dV), IntegerEntry(j, (ar - ds)), IntegerEntry(l, dv), Burn(aq, ds), ScriptTransfer(aM.caller, dT, fromBase58String(dI)), ScriptTransfer(T, dQ, fromBase58String(dI))]
779- else throw("Strict value is not equal to itself.")
789+ let dW = dS._4
790+ if (!(bY(dU, dV, dW)))
791+ then throw()
792+ else {
793+ let dv = aW(dU, dV)
794+ let cE = if (contains(aa, dI))
795+ then invoke(this, "stakeUnstake", [false, (dT + dQ), dI], nil)
796+ else 0
797+ if ((cE == cE))
798+ then [IntegerEntry(g, dU), IntegerEntry(h, dV), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dT, fromBase58String(dI)), ScriptTransfer(U, dQ, fromBase58String(dI))]
799+ else throw("Strict value is not equal to itself.")
800+ }
780801 }
781802 else throw("Strict value is not equal to itself.")
782803 }
784805
785806
786807
787-@Callable(aM)
788-func exchange (dJ,dK) = valueOrElse(bF(), {
789- let dW = $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
790- let cK = dW._1
791- let cL = dW._2
808+@Callable(aL)
809+func exchange (dJ,dK) = valueOrElse(bE(), {
810+ let dX = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
811+ let cO = dX._1
812+ let cb = dX._2
792813 if ((0 >= dJ))
793814 then throw(("Estimated amount must be positive. Actual: " + toString(dJ)))
794815 else if ((dK > dJ))
795816 then throw("Minimal amount can't be greater than estimated.")
796- else if ((size(aM.payments) != 1))
797- then bJ()
798- else if (!(aT))
799- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
800- else if (if ((cL != ai))
801- then (cL != aj)
817+ else if ((size(aL.payments) != 1))
818+ then bI()
819+ else if (!(aS))
820+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
821+ else if (if ((cb != aj))
822+ then (cb != ak)
802823 else false)
803- then bI()
804- else if ((10000000 > cK))
824+ then bH()
825+ else if ((10000000 > cO))
805826 then throw("Only swap of 10.000000 or more tokens is allowed")
806- else if (if ((aC > fraction(ax, dK, cK)))
827+ else if (if ((aB > fraction(ay, dK, cO)))
807828 then true
808- else (fraction(ax, dJ, cK) > aD))
829+ else (fraction(ay, dJ, cO) > aC))
809830 then throw("Incorrect args and pmt ratio")
810831 else {
811- let dX = if ((cL == ai))
812- then aj
813- else ai
814- let bS = aZ(dJ, dK, cK, cL, ao, ap, as)
815- let dO = bX(aM.originCaller)
816- let dY = fraction(bS, fraction(au, dO, av, CEILING), av)
817- let dZ = fraction(bS, (av - fraction(at, dO, av, CEILING)), av)
818- let ea = if ((cL == ai))
819- then $Tuple2((ao + cK), ((ap - dZ) - dY))
820- else $Tuple2(((ao - dZ) - dY), (ap + cK))
821- let db = ea._1
822- let dc = ea._2
823- let df = fraction((db + dc), aA, (2 * aB))
824- if (if ((df > db))
825- then true
826- else (df > dc))
827- then bK(df, db, dc)
832+ let dY = if ((cb == aj))
833+ then ak
834+ else aj
835+ let bN = aY(dJ, dK, cO, cb, ap, aq, at)
836+ let dO = bS(aL.originCaller)
837+ let dZ = fraction(bN, fraction(av, dO, aw, CEILING), aw)
838+ let ea = fraction(bN, (aw - fraction(au, dO, aw, CEILING)), aw)
839+ let eb = if ((cb == aj))
840+ then $Tuple2((ap + cO), ((aq - ea) - dZ))
841+ else $Tuple2(((ap - ea) - dZ), (aq + cO))
842+ let bZ = eb._1
843+ let ca = eb._2
844+ if (!(bY(bZ, ca, cb)))
845+ then throw()
828846 else {
829- let eb = bz(cL)
830- let cN = eb._1
831- let cO = eb._2
832- let cP = eb._3
833- let ec = bz(dX)
834- let ed = ec._1
835- let ee = ec._2
836- let ef = ec._3
837- let cA = if (contains(Z, cN))
838- then invoke(this, "stakeUnstake", [true, cK, cN], nil)
847+ let ec = by(cb)
848+ let cQ = ec._1
849+ let cR = ec._2
850+ let cS = ec._3
851+ let ed = by(dY)
852+ let ee = ed._1
853+ let ef = ed._2
854+ let eg = ed._3
855+ let cE = if (contains(aa, cQ))
856+ then invoke(this, "stakeUnstake", [true, cO, cQ], nil)
839857 else 0
840- if ((cA == cA))
858+ if ((cE == cE))
841859 then {
842- let cB = if (contains(Z, ed))
843- then invoke(this, "stakeUnstake", [false, (dZ + dY), ed], nil)
860+ let cF = if (contains(aa, ee))
861+ then invoke(this, "stakeUnstake", [false, (ea + dZ), ee], nil)
844862 else 0
845- if ((cB == cB))
846- then $Tuple2([IntegerEntry(g, db), IntegerEntry(h, dc), IntegerEntry(l, aX(db, dc)), ScriptTransfer(aM.caller, dZ, dX), ScriptTransfer(T, dY, dX)], [dZ, dX])
863+ if ((cF == cF))
864+ then $Tuple2([IntegerEntry(g, bZ), IntegerEntry(h, ca), IntegerEntry(l, aW(bZ, ca)), ScriptTransfer(aL.caller, ea, dY), ScriptTransfer(U, dZ, dY)], [ea, dY])
847865 else throw("Strict value is not equal to itself.")
848866 }
849867 else throw("Strict value is not equal to itself.")
853871
854872
855873
856-@Callable(eg)
857-func reissueShare (bS) = valueOrElse(bH(eg), [Reissue(aq, bS, true)])
874+@Callable(eh)
875+func reissueShare (bN) = valueOrElse(bG(eh), [Reissue(ar, bN, true)])
858876
859877
860878
861-@Callable(aM)
862-func shutdown () = valueOrElse(bG(aM), if (!(ae))
879+@Callable(aL)
880+func shutdown () = valueOrElse(bF(aL), if (!(af))
863881 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
864- else bC("Paused by admin"))
882+ else bB("Paused by admin"))
865883
866884
867885
868-@Callable(aM)
869-func activate () = valueOrElse(bG(aM), if (ae)
870- then bE()
886+@Callable(aL)
887+func activate () = valueOrElse(bF(aL), if (af)
888+ then bD()
871889 else [BooleanEntry(c, true), DeleteEntry(m)])
872890
873891
874892
875-@Callable(aM)
876-func takeIntoAccountExtraFunds () = valueOrElse(bF(), {
877- let eh = (aR - ao)
878- let ei = (aS - ap)
879- let dd = aX((ao + eh), (ap + ei))
880- if ((aM.caller != T))
881- then throw("Only the money box can call this function")
882- else if (if ((0 > eh))
883- then true
884- else (0 > ei))
885- then bC("Enroll amount negative")
886- else if (if ((eh == 0))
887- then (ei == 0)
888- else false)
889- then throw("No money to take")
890- else {
891- let cA = if (if (contains(Z, ag))
892- then (eh > 0)
893+@Callable(aL)
894+func takeIntoAccountExtraFunds () = valueOrElse(bE(), {
895+ let ei = if (if ((aj == Z))
896+ then true
897+ else (ak == Z))
898+ then invoke(W, "claimRewards", nil, nil)
899+ else 0
900+ if ((ei == ei))
901+ then {
902+ let ej = (aQ - ap)
903+ let ek = (aR - aq)
904+ let de = aW((ap + ej), (aq + ek))
905+ if ((aL.caller != U))
906+ then throw("Only the money box can call this function")
907+ else if (if ((0 > ej))
908+ then true
909+ else (0 > ek))
910+ then bB("Enroll amount negative")
911+ else if (if ((ej == 0))
912+ then (ek == 0)
893913 else false)
894- then invoke(this, "stakeUnstake", [true, eh, ag], nil)
895- else 0
896- if ((cA == cA))
897- then {
898- let cB = if (if (contains(Z, ah))
899- then (ei > 0)
914+ then throw("No money to take")
915+ else {
916+ let cE = if (if (contains(aa, ah))
917+ then (ej > 0)
900918 else false)
901- then invoke(this, "stakeUnstake", [true, ei, ah], nil)
919+ then invoke(this, "stakeUnstake", [true, ej, ah], nil)
902920 else 0
903- if ((cB == cB))
904- then [IntegerEntry(l, dd), IntegerEntry(g, (ao + eh)), IntegerEntry(h, (ap + ei))]
921+ if ((cE == cE))
922+ then {
923+ let cF = if (if (contains(aa, ai))
924+ then (ek > 0)
925+ else false)
926+ then invoke(this, "stakeUnstake", [true, ek, ai], nil)
927+ else 0
928+ if ((cF == cF))
929+ then [IntegerEntry(l, de), IntegerEntry(g, (ap + ej)), IntegerEntry(h, (aq + ek))]
930+ else throw("Strict value is not equal to itself.")
931+ }
905932 else throw("Strict value is not equal to itself.")
906933 }
907- else throw("Strict value is not equal to itself.")
908- }
934+ }
935+ else throw("Strict value is not equal to itself.")
909936 })
910937
911938
912939
913-@Callable(aM)
914-func keepLimitForFirstHarvest (ej) = valueOrElse(bF(), valueOrElse(bG(aM), [IntegerEntry(v, ej)]))
940+@Callable(aL)
941+func keepLimitForFirstHarvest (el) = valueOrElse(bE(), valueOrElse(bF(aL), [IntegerEntry(v, el)]))
915942
916943
917944
918-@Callable(aM)
919-func stakeUnstake (bQ,bS,ek) = if ((aM.caller != this))
945+@Callable(aL)
946+func stakeUnstake (bL,bN,em) = if ((aL.caller != this))
920947 then throw("Only contract itself can invoke this function")
921948 else {
922- let el = bR(bQ, bS, fromBase58String(ek))
923- let bU = el._1
924- let em = el._2
925- let en = el._3
926- let eo = el._4
927- let ep = invoke(em, bU, en, eo)
928- if ((ep == ep))
949+ let en = bM(bL, bN, fromBase58String(em))
950+ let bP = en._1
951+ let eo = en._2
952+ let ep = en._3
953+ let eq = en._4
954+ let er = invoke(eo, bP, ep, eq)
955+ if ((er == er))
929956 then nil
930957 else throw("Strict value is not equal to itself.")
931958 }
932959
933960
934961
935-@Callable(aM)
936-func replenishWithTwoTokens () = valueOrElse(bF(), cd(aM, false, 0))
962+@Callable(aL)
963+func replenishWithTwoTokens () = valueOrElse(bE(), ch(aL, false, 0))
937964
938965
939966
940-@Callable(aM)
941-func replenishWithOneToken (cH,cI) = valueOrElse(bF(), cG(aM, cH, cI, false, 0))
967+@Callable(aL)
968+func replenishWithOneToken (cL,cM) = valueOrElse(bE(), cK(aL, cL, cM, false, 0))
942969
943970
944971
945-@Callable(aM)
946-func withdraw () = valueOrElse(bF(), do(aM, 0))
972+@Callable(aL)
973+func withdraw () = valueOrElse(bE(), do(aL, 0))
947974
948975
949-@Verifier(eq)
950-func er () = {
951- let es = {
952- let et = if (sigVerify(eq.bodyBytes, eq.proofs[0], P))
976+@Verifier(es)
977+func et () = {
978+ let eu = {
979+ let ev = if (sigVerify(es.bodyBytes, es.proofs[0], Q))
953980 then 1
954981 else 0
955- let eu = if (sigVerify(eq.bodyBytes, eq.proofs[1], Q))
982+ let ew = if (sigVerify(es.bodyBytes, es.proofs[1], R))
956983 then 1
957984 else 0
958- let ev = if (sigVerify(eq.bodyBytes, eq.proofs[2], R))
985+ let ex = if (sigVerify(es.bodyBytes, es.proofs[2], S))
959986 then 1
960987 else 0
961- (((et + eu) + ev) >= 2)
988+ (((ev + ew) + ex) >= 2)
962989 }
963- let M = eq
964- if ($isInstanceOf(M, "InvokeScriptTransaction"))
990+ let N = es
991+ if ($isInstanceOf(N, "InvokeScriptTransaction"))
965992 then {
966- let ep = M
967- let ew = if ((ep.dApp == this))
968- then (ep.function == "takeIntoAccountExtraFunds")
993+ let er = N
994+ let ey = if ((er.dApp == this))
995+ then (er.function == "takeIntoAccountExtraFunds")
969996 else false
970- let ex = if (if (if (sigVerify(eq.bodyBytes, eq.proofs[0], P))
997+ let ez = if (if (if (sigVerify(es.bodyBytes, es.proofs[0], Q))
971998 then true
972- else sigVerify(eq.bodyBytes, eq.proofs[0], Q))
999+ else sigVerify(es.bodyBytes, es.proofs[0], R))
9731000 then true
974- else sigVerify(eq.bodyBytes, eq.proofs[0], R))
1001+ else sigVerify(es.bodyBytes, es.proofs[0], S))
9751002 then true
976- else sigVerify(eq.bodyBytes, eq.proofs[0], S)
977- if (if (ew)
978- then ex
1003+ else sigVerify(es.bodyBytes, es.proofs[0], T)
1004+ if (if (ey)
1005+ then ez
9791006 else false)
9801007 then true
981- else es
1008+ else eu
9821009 }
983- else es
1010+ else eu
9841011 }
9851012
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "active_all_contracts"
1111
1212 let e = "A_asset_id"
1313
1414 let f = "B_asset_id"
1515
1616 let g = "A_asset_balance"
1717
1818 let h = "B_asset_balance"
1919
2020 let i = "share_asset_id"
2121
2222 let j = "share_asset_supply"
2323
2424 let k = "commission"
2525
2626 let l = "invariant"
2727
2828 let m = "shutdown_cause"
2929
3030 let n = "staking_usdnnsbt_address"
3131
3232 let o = "staking_eurn_address"
3333
3434 let p = "discounts"
3535
3636 let q = "discount_values"
3737
3838 let r = "_SWOP_amount"
3939
4040 let s = "_GSwop_amount"
4141
4242 let t = "first_harvest"
4343
4444 let u = "first_harvest_height"
4545
4646 let v = "share_limit_on_first_harvest"
4747
4848 let w = "base_period"
4949
5050 let x = "period_length"
5151
5252 let y = "start_height"
5353
54-let z = "admin_pub_1"
54+let z = "dApp_threshold"
5555
56-let A = "admin_pub_2"
56+let A = "admin_pub_1"
5757
58-let B = "admin_pub_3"
58+let B = "admin_pub_2"
5959
60-let C = "admin_invoke_pub"
60+let C = "admin_pub_3"
6161
62-let D = "money_box_address"
62+let D = "admin_invoke_pub"
6363
64-let E = "governance_address"
64+let E = "money_box_address"
6565
66-let F = "farming_address"
66+let F = "governance_address"
6767
68-let G = "voting_address"
68+let G = "farming_address"
6969
70-let H = "usdn_asset_id"
70+let H = "voting_address"
7171
72-let I = "staking_assets"
72+let I = "usdn_asset_id"
7373
74-let J = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
74+let J = "staking_assets"
7575
76-func K (L) = {
77- let M = getString(J, L)
78- if ($isInstanceOf(M, "String"))
76+let K = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
77+
78+func L (M) = {
79+ let N = getString(K, M)
80+ if ($isInstanceOf(N, "String"))
7981 then {
80- let N = M
81- fromBase58String(N)
82+ let O = N
83+ fromBase58String(O)
8284 }
8385 else {
84- let O = M
85- throw((L + "is empty"))
86+ let P = N
87+ throw((M + "is empty"))
8688 }
8789 }
8890
8991
90-let P = K(z)
92+let Q = L(A)
9193
92-let Q = K(A)
94+let R = L(B)
9395
94-let R = K(B)
96+let S = L(C)
9597
96-let S = K(C)
98+let T = L(D)
9799
98-let T = Address(K(D))
100+let U = Address(L(E))
99101
100-let U = Address(K(E))
102+let V = Address(L(F))
101103
102-let V = Address(K(n))
104+let W = Address(L(n))
103105
104-let W = Address(K(G))
106+let X = Address(L(H))
105107
106-let X = Address(K(F))
108+let Y = Address(L(G))
107109
108-let Y = K(H)
110+let Z = L(I)
109111
110-let Z = getStringValue(J, I)
112+let aa = getStringValue(K, J)
111113
112-let aa = valueOrErrorMessage(getInteger(W, w), "Empty kBasePeriod")
114+let ab = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
113115
114-let ab = valueOrErrorMessage(getInteger(W, y), "Empty kStartHeight")
116+let ac = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
115117
116-let ac = valueOrErrorMessage(getInteger(W, x), "Empty kPeriodLength")
118+let ad = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
117119
118-let ad = ((aa + ((height - ab) / ac)) + 3)
120+let ae = ((ab + ((height - ac) / ad)) + 3)
119121
120-let ae = getBooleanValue(this, c)
122+let af = getBooleanValue(this, c)
121123
122-let af = valueOrElse(getBoolean(J, d), true)
124+let ag = valueOrElse(getBoolean(K, d), true)
123125
124-let ag = getStringValue(this, e)
126+let ah = getStringValue(this, e)
125127
126-let ah = getStringValue(this, f)
127-
128-let ai = if ((ag == "WAVES"))
129- then unit
130- else fromBase58String(ag)
128+let ai = getStringValue(this, f)
131129
132130 let aj = if ((ah == "WAVES"))
133131 then unit
134132 else fromBase58String(ah)
135133
136-let ak = {
137- let M = ai
138- if ($isInstanceOf(M, "ByteVector"))
134+let ak = if ((ai == "WAVES"))
135+ then unit
136+ else fromBase58String(ai)
137+
138+let al = {
139+ let N = aj
140+ if ($isInstanceOf(N, "ByteVector"))
139141 then {
140- let al = M
141- value(assetInfo(al)).name
142+ let am = N
143+ value(assetInfo(am)).name
142144 }
143- else if ($isInstanceOf(M, "Unit"))
145+ else if ($isInstanceOf(N, "Unit"))
144146 then {
145- let am = M
147+ let an = N
146148 "WAVES"
147149 }
148150 else throw("Match error")
149151 }
150152
151-let an = {
152- let M = aj
153- if ($isInstanceOf(M, "ByteVector"))
153+let ao = {
154+ let N = ak
155+ if ($isInstanceOf(N, "ByteVector"))
154156 then {
155- let al = M
156- value(assetInfo(al)).name
157+ let am = N
158+ value(assetInfo(am)).name
157159 }
158- else if ($isInstanceOf(M, "Unit"))
160+ else if ($isInstanceOf(N, "Unit"))
159161 then {
160- let am = M
162+ let an = N
161163 "WAVES"
162164 }
163165 else throw("Match error")
164166 }
165167
166-let ao = getIntegerValue(this, g)
168+let ap = getIntegerValue(this, g)
167169
168-let ap = getIntegerValue(this, h)
170+let aq = getIntegerValue(this, h)
169171
170-let aq = fromBase58String(getStringValue(this, i))
172+let ar = fromBase58String(getStringValue(this, i))
171173
172-let ar = getIntegerValue(this, j)
174+let as = getIntegerValue(this, j)
173175
174-let as = getIntegerValue(this, l)
176+let at = getIntegerValue(this, l)
175177
176-let at = getIntegerValue(this, k)
178+let au = getIntegerValue(this, k)
177179
178-let au = fraction(at, 40, 100)
180+let av = fraction(au, 40, 100)
179181
180-let av = 1000000
182+let aw = 1000000
181183
182-let aw = 1000
184+let ax = 1000
183185
184-let ax = 100000000
186+let ay = 100000000
185187
186-let ay = 10000000000000000
188+let az = 10000000000000000
187189
188-let az = 8
190+let aA = 8
189191
190-let aA = 50
192+let aB = 80000000
191193
192-let aB = 100
194+let aC = 120000000
193195
194-let aC = 90000000
196+let aD = 50
195197
196-let aD = 110000000
198+let aE = 2
197199
198-let aE = 50
200+let aF = 4600000000000000
199201
200-let aF = 2
201-
202-let aG = 4600000000000000
203-
204-func aH (aI) = {
205- let M = aI
206- if ($isInstanceOf(M, "ByteVector"))
202+func aG (aH) = {
203+ let N = aH
204+ if ($isInstanceOf(N, "ByteVector"))
207205 then {
208- let al = M
209- assetBalance(this, al)
206+ let am = N
207+ assetBalance(this, am)
210208 }
211- else if ($isInstanceOf(M, "Unit"))
209+ else if ($isInstanceOf(N, "Unit"))
212210 then {
213- let am = M
211+ let an = N
214212 wavesBalance(this).available
215213 }
216214 else throw("Match error")
217215 }
218216
219217
220-func aJ (aI) = {
221- let aK = {
222- let M = aI
223- if ($isInstanceOf(M, "ByteVector"))
218+func aI (aH) = {
219+ let aJ = {
220+ let N = aH
221+ if ($isInstanceOf(N, "ByteVector"))
224222 then {
225- let aL = M
226- if ((aL == Y))
227- then getInteger(V, ((("rpd_balance_" + toBase58String(aL)) + "_") + toString(this)))
223+ let aK = N
224+ if ((aK == Z))
225+ then getInteger(W, ((("rpd_balance_" + toBase58String(aK)) + "_") + toString(this)))
228226 else 0
229227 }
230- else if ($isInstanceOf(M, "Unit"))
228+ else if ($isInstanceOf(N, "Unit"))
231229 then 0
232230 else throw("Match error")
233231 }
234- let M = aK
235- if ($isInstanceOf(M, "Int"))
232+ let N = aJ
233+ if ($isInstanceOf(N, "Int"))
236234 then {
237- let aM = M
238- aM
235+ let aL = N
236+ aL
239237 }
240238 else 0
241239 }
242240
243241
244-let aN = aJ(ai)
242+let aM = aI(aj)
245243
246-let aO = aJ(aj)
244+let aN = aI(ak)
247245
248-let aP = (ao - aN)
246+let aO = (ap - aM)
249247
250-let aQ = (ap - aO)
248+let aP = (aq - aN)
251249
252-let aR = (aH(ai) + aN)
250+let aQ = (aG(aj) + aM)
253251
254-let aS = (aH(aj) + aO)
252+let aR = (aG(ak) + aN)
255253
256-let aT = if ((aR >= ao))
257- then (aS >= ap)
254+let aS = if ((aQ >= ap))
255+ then (aR >= aq)
258256 else false
259257
260-func aU (aV,aW) = ((fraction(ay, aV, aW) + fraction(ay, aW, aV)) / 2)
258+func aT (aU,aV) = ((fraction(az, aU, aV) + fraction(az, aV, aU)) / 2)
261259
262260
263-func aX (aV,aW) = {
264- let aY = aU(aV, aW)
265- (fraction((aV + aW), ay, pow(aY, az, aE, aF, az, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aV), toBigInt(aW), toBigInt(ax)), 0, toBigInt(5), 1, (az / 2), DOWN)), pow((aY - aG), az, aE, aF, az, DOWN), ax)))
261+func aW (aU,aV) = {
262+ let aX = aT(aU, aV)
263+ (fraction((aU + aV), az, pow(aX, aA, aD, aE, aA, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aU), toBigInt(aV), toBigInt(ay)), 0, toBigInt(5), 1, (aA / 2), DOWN)), pow((aX - aF), aA, aD, aE, aA, DOWN), ay)))
266264 }
267265
268266
269-func aZ (ba,bb,bc,bd,be,bf,bg) = {
270- let bh = (ay - ((ay * 1) / 10000000))
271- let bi = (ba - bb)
272- let aV = (be + bc)
273- let aW = (bf + bc)
274- func bj (bk,bl) = if ((bk._1 == -1))
267+func aY (aZ,ba,bb,bc,bd,be,bf) = {
268+ let bg = (az - ((az * 1) / 10000000))
269+ let bh = (aZ - ba)
270+ let aU = (bd + bb)
271+ let aV = (be + bb)
272+ func bi (bj,bk) = if ((bj._1 == -1))
275273 then {
276- let bm = (ba - (((bl * bi) / 3) / aw))
277- let bn = if ((bd == ai))
278- then aX(aV, (bf - bm))
279- else aX((be - bm), aW)
280- if ((bn > bg))
281- then $Tuple2(bm, bn)
274+ let bl = (aZ - (((bk * bh) / 3) / ax))
275+ let bm = if ((bc == aj))
276+ then aW(aU, (be - bl))
277+ else aW((bd - bl), aV)
278+ if ((bm > bf))
279+ then $Tuple2(bl, bm)
282280 else $Tuple2(-1, 0)
283281 }
284- else bk
282+ else bj
285283
286- let bo = bj($Tuple2(-1, 0), 3000)
287- if ((0 > bo._1))
284+ let bn = bi($Tuple2(-1, 0), 3000)
285+ if ((0 > bn._1))
288286 then throw("Price is worse than minReceived")
289287 else {
290- let bp = if ((bd == ai))
291- then aX(aV, (bf - ba))
292- else if ((bd == aj))
293- then aX((be - ba), aW)
288+ let bo = if ((bc == aj))
289+ then aW(aU, (be - aZ))
290+ else if ((bc == ak))
291+ then aW((bd - aZ), aV)
294292 else throw("Wrong asset in payment")
295- if ((bg > bp))
296- then if ((bh >= fraction(ay, bg, bp)))
293+ if ((bf > bo))
294+ then if ((bg >= fraction(az, bf, bo)))
297295 then throw("The requested price is too not profitable for user")
298296 else {
299- let bq = {
300- let br = [25, 200, 500]
301- let bs = size(br)
302- let bt = $Tuple2(-1, 0)
303- func bu (bv,bw) = if ((bw >= bs))
304- then bv
305- else bj(bv, br[bw])
297+ let bp = {
298+ let bq = [25, 200, 500]
299+ let br = size(bq)
300+ let bs = $Tuple2(-1, 0)
301+ func bt (bu,bv) = if ((bv >= br))
302+ then bu
303+ else bi(bu, bq[bv])
306304
307- func bx (bv,bw) = if ((bw >= bs))
308- then bv
305+ func bw (bu,bv) = if ((bv >= br))
306+ then bu
309307 else throw("List size exceeds 3")
310308
311- bx(bu(bu(bu(bt, 0), 1), 2), 3)
309+ bw(bt(bt(bt(bs, 0), 1), 2), 3)
312310 }
313- if ((0 > bq._1))
314- then bo._1
315- else bq._1
311+ if ((0 > bp._1))
312+ then bn._1
313+ else bp._1
316314 }
317315 else {
318- let bq = {
319- let br = [-500, -200, -25]
320- let bs = size(br)
321- let bt = $Tuple2(-1, 0)
322- func bu (bv,bw) = if ((bw >= bs))
323- then bv
324- else bj(bv, br[bw])
316+ let bp = {
317+ let bq = [-500, -200, -25]
318+ let br = size(bq)
319+ let bs = $Tuple2(-1, 0)
320+ func bt (bu,bv) = if ((bv >= br))
321+ then bu
322+ else bi(bu, bq[bv])
325323
326- func bx (bv,bw) = if ((bw >= bs))
327- then bv
324+ func bw (bu,bv) = if ((bv >= br))
325+ then bu
328326 else throw("List size exceeds 3")
329327
330- bx(bu(bu(bu(bt, 0), 1), 2), 3)
328+ bw(bt(bt(bt(bs, 0), 1), 2), 3)
331329 }
332- let by = if ((0 > bq._1))
333- then $Tuple2(ba, bp)
334- else bq
335- if ((bh >= fraction(ay, bg, by._2)))
330+ let bx = if ((0 > bp._1))
331+ then $Tuple2(aZ, bo)
332+ else bp
333+ if ((bg >= fraction(az, bf, bx._2)))
336334 then throw("The requested price is too not profitable for user")
337- else by._1
335+ else bx._1
338336 }
339337 }
340338 }
341339
342340
343-func bz (aI) = {
344- let M = aI
345- if ($isInstanceOf(M, "ByteVector"))
341+func by (aH) = {
342+ let N = aH
343+ if ($isInstanceOf(N, "ByteVector"))
346344 then {
347- let al = M
348- let bA = toBase58String(al)
349- let bB = valueOrErrorMessage(assetInfo(al), (("Asset " + bA) + " doesn't exist"))
350- $Tuple3(bA, bB.name, bB.decimals)
345+ let am = N
346+ let bz = toBase58String(am)
347+ let bA = valueOrErrorMessage(assetInfo(am), (("Asset " + bz) + " doesn't exist"))
348+ $Tuple3(bz, bA.name, bA.decimals)
351349 }
352- else if ($isInstanceOf(M, "Unit"))
350+ else if ($isInstanceOf(N, "Unit"))
353351 then {
354- let am = M
352+ let an = N
355353 $Tuple3("WAVES", "WAVES", 8)
356354 }
357355 else throw("Match error")
358356 }
359357
360358
361-func bC (bD) = [BooleanEntry(c, false), StringEntry(m, bD)]
359+func bB (bC) = [BooleanEntry(c, false), StringEntry(m, bC)]
362360
363361
364-func bE () = throw("DApp is already active")
362+func bD () = throw("DApp is already active")
365363
366364
367-func bF () = if (if (ae)
368- then af
365+func bE () = if (if (af)
366+ then ag
369367 else false)
370368 then unit
371369 else throw("DApp is inactive at this moment")
372370
373371
374-func bG (aM) = if (containsElement([P, Q, R], aM.callerPublicKey))
372+func bF (aL) = if (containsElement([Q, R, S], aL.callerPublicKey))
375373 then unit
376374 else throw("Only admin can call this function")
377375
378376
379-func bH (aM) = if ((this == aM.caller))
377+func bG (aL) = if ((this == aL.caller))
380378 then unit
381379 else throw("Only contract itself can call this function")
382380
383381
384-func bI () = throw(((("Incorrect assets attached. Expected: " + ag) + " and ") + ah))
382+func bH () = throw(((("Incorrect assets attached. Expected: " + ah) + " and ") + ai))
385383
386384
387-func bJ () = throw("One attached payment expected")
385+func bI () = throw("One attached payment expected")
388386
389387
390-func bK (bL,bM,bN) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bL)) + ": ") + toString(bM)) + " ") + ak) + ", ") + toString(bN)) + " ") + an))
388+func bJ () = bB(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + al) + ", ") + toString(aq)) + " ") + ao) + ". State: ") + toString(aG(aj))) + " ") + al) + ", ") + toString(aG(ak))) + " ") + ao))
391389
392390
393-func bO () = bC(((((((((((((((("Suspicious state. Actual balances: " + toString(ao)) + " ") + ak) + ", ") + toString(ap)) + " ") + an) + ". State: ") + toString(aH(ai))) + " ") + ak) + ", ") + toString(aH(aj))) + " ") + an))
391+func bK (bL,aH) = if (bL)
392+ then $Tuple2("lockNeutrino", W)
393+ else $Tuple2("unlockNeutrino", W)
394394
395395
396-func bP (bQ,aI) = if (bQ)
397- then $Tuple2("lockNeutrino", V)
398- else $Tuple2("unlockNeutrino", V)
399-
400-
401-func bR (bQ,bS,aI) = if (bQ)
396+func bM (bL,bN,aH) = if (bL)
402397 then {
403- let bT = bP(bQ, aI)
404- let bU = bT._1
405- let bV = bT._2
406- $Tuple4(bU, bV, nil, [AttachedPayment(aI, bS)])
398+ let bO = bK(bL, aH)
399+ let bP = bO._1
400+ let bQ = bO._2
401+ $Tuple4(bP, bQ, nil, [AttachedPayment(aH, bN)])
407402 }
408403 else {
409- let bW = bP(bQ, aI)
410- let bU = bW._1
411- let bV = bW._2
412- $Tuple4(bU, bV, [bS, toBase58String(aI)], nil)
404+ let bR = bK(bL, aH)
405+ let bP = bR._1
406+ let bQ = bR._2
407+ $Tuple4(bP, bQ, [bN, toBase58String(aH)], nil)
413408 }
414409
415410
416-func bX (bY) = {
417- let bZ = valueOrElse(getInteger(U, (toString(bY) + r)), 0)
418- let ca = valueOrElse(getInteger(U, (toString(bY) + s)), bZ)
419- let cb = split(getStringValue(J, q), ",")
420- let cc = split(getStringValue(J, p), ",")
421- if (if ((ca >= parseIntValue(cb[0])))
422- then (parseIntValue(cb[1]) > ca)
411+func bS (bT) = {
412+ let bU = valueOrElse(getInteger(V, (toString(bT) + r)), 0)
413+ let bV = valueOrElse(getInteger(V, (toString(bT) + s)), bU)
414+ let bW = split(getStringValue(K, q), ",")
415+ let bX = split(getStringValue(K, p), ",")
416+ if (if ((bV >= parseIntValue(bW[0])))
417+ then (parseIntValue(bW[1]) > bV)
423418 else false)
424- then (av - parseIntValue(cc[0]))
425- else if (if ((ca >= parseIntValue(cb[1])))
426- then (parseIntValue(cb[2]) > ca)
419+ then (aw - parseIntValue(bX[0]))
420+ else if (if ((bV >= parseIntValue(bW[1])))
421+ then (parseIntValue(bW[2]) > bV)
427422 else false)
428- then (av - parseIntValue(cc[1]))
429- else if (if ((ca >= parseIntValue(cb[2])))
430- then (parseIntValue(cb[3]) > ca)
423+ then (aw - parseIntValue(bX[1]))
424+ else if (if ((bV >= parseIntValue(bW[2])))
425+ then (parseIntValue(bW[3]) > bV)
431426 else false)
432- then (av - parseIntValue(cc[2]))
433- else if (if ((ca >= parseIntValue(cb[3])))
434- then (parseIntValue(cb[4]) > ca)
427+ then (aw - parseIntValue(bX[2]))
428+ else if (if ((bV >= parseIntValue(bW[3])))
429+ then (parseIntValue(bW[4]) > bV)
435430 else false)
436- then (av - parseIntValue(cc[3]))
437- else if ((ca >= parseIntValue(cb[4])))
438- then (av - parseIntValue(cc[4]))
439- else av
431+ then (aw - parseIntValue(bX[3]))
432+ else if ((bV >= parseIntValue(bW[4])))
433+ then (aw - parseIntValue(bX[4]))
434+ else aw
440435 }
441436
442437
443-func cd (aM,ce,cf) = {
444- let cg = aM.payments[0].assetId
445- let ch = aM.payments[1].assetId
446- let ci = fraction(ax, aM.payments[0].amount, ao)
447- let cj = fraction(ax, aM.payments[1].amount, ap)
448- let ck = bz(cg)
449- let cl = ck._1
450- let cm = ck._2
451- let cn = ck._3
452- let co = bz(ch)
438+func bY (bZ,ca,cb) = {
439+ let cc = getIntegerValue(this, z)
440+ let cd = if (if ((cb == aj))
441+ then (bZ > ca)
442+ else false)
443+ then fraction(bZ, 1, ca, CEILING)
444+ else if (if ((cb == ak))
445+ then (ca > bZ)
446+ else false)
447+ then fraction(ca, 1, bZ, CEILING)
448+ else 0
449+ if ((cd > cc))
450+ then {
451+ let ce = if ((cb == aj))
452+ then $Tuple2(ao, al)
453+ else $Tuple2(al, ao)
454+ let cf = ce._1
455+ let cg = ce._2
456+ throw((((("Buying " + cf) + " is temporarily unavailable due to the ") + cg) + " depeg"))
457+ }
458+ else true
459+ }
460+
461+
462+func ch (aL,ci,cj) = {
463+ let ck = aL.payments[0].assetId
464+ let cl = aL.payments[1].assetId
465+ let cm = fraction(ay, aL.payments[0].amount, ap)
466+ let cn = fraction(ay, aL.payments[1].amount, aq)
467+ let co = by(ck)
453468 let cp = co._1
454469 let cq = co._2
455470 let cr = co._3
456- let cs = if ((cj > ci))
471+ let cs = by(cl)
472+ let ct = cs._1
473+ let cu = cs._2
474+ let cv = cs._3
475+ let cw = if ((cn > cm))
457476 then {
458- let ct = fraction(ap, ci, ax, CEILING)
459- $Tuple5(aM.payments[0].amount, ct, (aM.payments[1].amount - ct), ch, ci)
477+ let cx = fraction(aq, cm, ay, CEILING)
478+ $Tuple5(aL.payments[0].amount, cx, (aL.payments[1].amount - cx), cl, cm)
460479 }
461480 else {
462- let ct = fraction(ao, cj, ax, CEILING)
463- $Tuple5(ct, aM.payments[1].amount, (aM.payments[0].amount - ct), cg, cj)
481+ let cx = fraction(ap, cn, ay, CEILING)
482+ $Tuple5(cx, aL.payments[1].amount, (aL.payments[0].amount - cx), ck, cn)
464483 }
465- let cu = cs._1
466- let cv = cs._2
467- let cw = cs._3
468- let cx = cs._4
469- let cy = cs._5
470- let cz = fraction(cy, ar, ax)
471- if (if ((size(aM.payments) != 2))
472- then (size(aM.payments) != 3)
484+ let cy = cw._1
485+ let cz = cw._2
486+ let cA = cw._3
487+ let cB = cw._4
488+ let cC = cw._5
489+ let cD = fraction(cC, as, ay)
490+ if (if ((size(aL.payments) != 2))
491+ then (size(aL.payments) != 3)
473492 else false)
474493 then throw("Two or three payments expected")
475- else if (if ((cg != ai))
494+ else if (if ((ck != aj))
476495 then true
477- else (ch != aj))
478- then bI()
479- else if ((cz == 0))
496+ else (cl != ak))
497+ then bH()
498+ else if ((cD == 0))
480499 then throw("Too small amount to replenish")
481- else if ((0 > cw))
500+ else if ((0 > cA))
482501 then throw("Change < 0")
483- else if (!(aT))
484- then ([ScriptTransfer(aM.caller, cu, cg), ScriptTransfer(aM.caller, cv, ch)] ++ bO())
502+ else if (!(aS))
503+ then ([ScriptTransfer(aL.caller, cy, ck), ScriptTransfer(aL.caller, cz, cl)] ++ bJ())
485504 else {
486- let cA = if (contains(Z, cl))
487- then invoke(this, "stakeUnstake", [true, cu, cl], nil)
505+ let cE = if (contains(aa, cp))
506+ then invoke(this, "stakeUnstake", [true, cy, cp], nil)
488507 else 0
489- if ((cA == cA))
508+ if ((cE == cE))
490509 then {
491- let cB = if (contains(Z, cp))
492- then invoke(this, "stakeUnstake", [true, cv, cp], nil)
510+ let cF = if (contains(aa, ct))
511+ then invoke(this, "stakeUnstake", [true, cz, ct], nil)
493512 else 0
494- if ((cB == cB))
513+ if ((cF == cF))
495514 then {
496- let cC = [IntegerEntry(g, (ao + cu)), IntegerEntry(h, (ap + cv)), IntegerEntry(j, (ar + cz)), IntegerEntry(l, aX((ao + cu), (ap + cv))), ScriptTransfer(aM.caller, cw, cx)]
497- if (ce)
515+ let cG = [IntegerEntry(g, (ap + cy)), IntegerEntry(h, (aq + cz)), IntegerEntry(j, (as + cD)), IntegerEntry(l, aW((ap + cy), (aq + cz))), ScriptTransfer(aL.caller, cA, cB)]
516+ if (ci)
498517 then {
499- let cD = ([AttachedPayment(aq, cz)] ++ (if ((size(aM.payments) == 3))
500- then [AttachedPayment(if ((aM.payments[2].assetId == base58''))
518+ let cH = ([AttachedPayment(ar, cD)] ++ (if ((size(aL.payments) == 3))
519+ then [AttachedPayment(if ((aL.payments[2].assetId == base58''))
501520 then unit
502- else aM.payments[2].assetId, aM.payments[2].amount)]
521+ else aL.payments[2].assetId, aL.payments[2].amount)]
503522 else nil))
504- let cE = invoke(this, "reissueShare", [cz], nil)
505- if ((cE == cE))
523+ let cI = invoke(this, "reissueShare", [cD], nil)
524+ if ((cI == cI))
506525 then {
507- let cF = invoke(X, "lockShareTokensFromPool", [aM.caller.bytes, toString(this), cf], cD)
508- if ((cF == cF))
509- then cC
526+ let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
527+ if ((cJ == cJ))
528+ then cG
510529 else throw("Strict value is not equal to itself.")
511530 }
512531 else throw("Strict value is not equal to itself.")
513532 }
514- else (cC ++ [Reissue(aq, cz, true), ScriptTransfer(aM.caller, cz, aq)])
533+ else (cG ++ [Reissue(ar, cD, true), ScriptTransfer(aL.caller, cD, ar)])
515534 }
516535 else throw("Strict value is not equal to itself.")
517536 }
518537 else throw("Strict value is not equal to itself.")
519538 }
520539 }
521540
522541
523-func cG (aM,cH,cI,ce,cf) = {
524- let cJ = $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
525- let cK = cJ._1
526- let cL = cJ._2
527- let cM = bz(cL)
528- let cN = cM._1
529- let cO = cM._2
530- let cP = cM._3
531- let cQ = 5000000
532- let cR = 50000000
533- let cS = if ((cR > cK))
542+func cK (aL,cL,cM,ci,cj) = {
543+ let cN = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
544+ let cO = cN._1
545+ let cb = cN._2
546+ let cP = by(cb)
547+ let cQ = cP._1
548+ let cR = cP._2
549+ let cS = cP._3
550+ let cT = 5000000
551+ let cU = 50000000
552+ let cV = if ((cU > cO))
534553 then 100000
535554 else 1
536- let cT = (ax - ((ax * cS) / 10000000))
537- let cU = (ax + ((ax * cS) / 10000000))
538- let cV = (ax - ((ax * 1) / 10000000))
539- if ((cQ > cK))
540- then throw((((("Payment amount " + toString(cK)) + " does not exceed the minimum amount of ") + toString(cQ)) + " tokens"))
541- else if (if ((size(aM.payments) != 1))
542- then (size(aM.payments) != 2)
555+ let cW = (ay - ((ay * cV) / 10000000))
556+ let cX = (ay + ((ay * cV) / 10000000))
557+ let cY = (ay - ((ay * 1) / 10000000))
558+ if ((cT > cO))
559+ then throw((((("Payment amount " + toString(cO)) + " does not exceed the minimum amount of ") + toString(cT)) + " tokens"))
560+ else if (if ((size(aL.payments) != 1))
561+ then (size(aL.payments) != 2)
543562 else false)
544563 then throw("One or two payments expected")
545- else if (!(aT))
546- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
547- else if (if ((cL != ai))
548- then (cL != aj)
564+ else if (!(aS))
565+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
566+ else if (if ((cb != aj))
567+ then (cb != ak)
549568 else false)
550- then bI()
569+ then bH()
551570 else {
552- let cW = if ((cL == ai))
553- then $Tuple6((cK - cH), cI, (ao + cH), (ap - cI), (ao + cK), ap)
554- else $Tuple6(cI, (cK - cH), (ao - cI), (ap + cH), ao, (ap + cK))
555- let cX = cW._1
556- let cY = cW._2
557- let cZ = cW._3
558- let da = cW._4
559- let db = cW._5
560- let dc = cW._6
561- let dd = aX(cZ, da)
562- let de = (fraction(ay, cZ, da) / fraction(ax, cX, cY))
563- let df = fraction((db + dc), aA, (2 * aB))
564- if (if ((cV >= fraction(ax, as, dd)))
571+ let cZ = if ((cb == aj))
572+ then $Tuple6((cO - cL), cM, (ap + cL), (aq - cM), (ap + cO), aq)
573+ else $Tuple6(cM, (cO - cL), (ap - cM), (aq + cL), ap, (aq + cO))
574+ let da = cZ._1
575+ let db = cZ._2
576+ let dc = cZ._3
577+ let dd = cZ._4
578+ let bZ = cZ._5
579+ let ca = cZ._6
580+ let de = aW(dc, dd)
581+ let df = (fraction(az, dc, dd) / fraction(ay, da, db))
582+ if (if ((cY >= fraction(ay, at, de)))
565583 then true
566- else (as > dd))
584+ else (at > de))
567585 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
568- else if (if ((cT > de))
586+ else if (if ((cW > df))
569587 then true
570- else (de > cU))
588+ else (df > cX))
571589 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
572- else if (if ((df > db))
573- then true
574- else (df > dc))
575- then bK(df, db, dc)
590+ else if (!(bY(bZ, ca, cb)))
591+ then throw()
576592 else {
577- let ci = fraction(cX, ax, cZ)
578- let cj = fraction(cY, ax, da)
579- let cz = fraction(min([ci, cj]), ar, ax)
580- let dg = fraction(cz, (av - (at / 2)), av)
581- let dh = fraction(cz, (au / 2), av)
582- let di = fraction(dh, ao, ar)
583- let dj = fraction(dh, ap, ar)
584- let dk = if ((cN == ag))
585- then $Tuple3((cK - di), dj, ah)
586- else $Tuple3((cK - dj), di, ag)
593+ let cm = fraction(da, ay, dc)
594+ let cn = fraction(db, ay, dd)
595+ let cD = fraction(min([cm, cn]), as, ay)
596+ let dg = fraction(cD, (aw - (au / 2)), aw)
597+ let dh = fraction(cD, (av / 2), aw)
598+ let di = fraction(dh, ap, as)
599+ let dj = fraction(dh, aq, as)
600+ let dk = if ((cQ == ah))
601+ then $Tuple3((cO - di), dj, ai)
602+ else $Tuple3((cO - dj), di, ah)
587603 let dl = dk._1
588604 let dm = dk._2
589605 let dn = dk._3
590- let cA = if (contains(Z, cN))
591- then invoke(this, "stakeUnstake", [true, dl, cN], nil)
606+ let cE = if (contains(aa, cQ))
607+ then invoke(this, "stakeUnstake", [true, dl, cQ], nil)
592608 else 0
593- if ((cA == cA))
609+ if ((cE == cE))
594610 then {
595- let cB = if (contains(Z, dn))
611+ let cF = if (contains(aa, dn))
596612 then invoke(this, "stakeUnstake", [false, dm, dn], nil)
597613 else 0
598- if ((cB == cB))
614+ if ((cF == cF))
599615 then {
600- let cC = [IntegerEntry(g, (db - di)), IntegerEntry(h, (dc - dj)), IntegerEntry(j, (ar + dg)), IntegerEntry(l, aX((db - di), (dc - dj))), ScriptTransfer(T, di, ai), ScriptTransfer(T, dj, aj)]
601- if (ce)
616+ let cG = [IntegerEntry(g, (bZ - di)), IntegerEntry(h, (ca - dj)), IntegerEntry(j, (as + dg)), IntegerEntry(l, aW((bZ - di), (ca - dj))), ScriptTransfer(U, di, aj), ScriptTransfer(U, dj, ak)]
617+ if (ci)
602618 then {
603- let cD = ([AttachedPayment(aq, dg)] ++ (if ((size(aM.payments) == 2))
604- then [AttachedPayment(if ((aM.payments[1].assetId == base58''))
619+ let cH = ([AttachedPayment(ar, dg)] ++ (if ((size(aL.payments) == 2))
620+ then [AttachedPayment(if ((aL.payments[1].assetId == base58''))
605621 then unit
606- else aM.payments[1].assetId, aM.payments[1].amount)]
622+ else aL.payments[1].assetId, aL.payments[1].amount)]
607623 else nil))
608- let cE = invoke(this, "reissueShare", [dg], nil)
609- if ((cE == cE))
624+ let cI = invoke(this, "reissueShare", [dg], nil)
625+ if ((cI == cI))
610626 then {
611- let cF = invoke(X, "lockShareTokensFromPool", [aM.caller.bytes, toString(this), cf], cD)
612- if ((cF == cF))
613- then cC
627+ let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
628+ if ((cJ == cJ))
629+ then cG
614630 else throw("Strict value is not equal to itself.")
615631 }
616632 else throw("Strict value is not equal to itself.")
617633 }
618- else (cC ++ [Reissue(aq, dg, true), ScriptTransfer(aM.caller, dg, aq)])
634+ else (cG ++ [Reissue(ar, dg, true), ScriptTransfer(aL.caller, dg, ar)])
619635 }
620636 else throw("Strict value is not equal to itself.")
621637 }
622638 else throw("Strict value is not equal to itself.")
623639 }
624640 }
625641 }
626642
627643
628-func do (aM,dp) = {
629- let dq = if ((size(aM.payments) == 1))
630- then if ((aM.payments[0].assetId != aq))
631- then throw(("Incorrect asset attached. Expected: " + toBase58String(aq)))
632- else $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
633- else $Tuple2(0, aq)
634- let cK = dq._1
635- let cL = dq._2
636- if (!(aT))
637- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
644+func do (aL,dp) = {
645+ let dq = if ((size(aL.payments) == 1))
646+ then if ((aL.payments[0].assetId != ar))
647+ then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
648+ else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
649+ else $Tuple2(0, ar)
650+ let cO = dq._1
651+ let cb = dq._2
652+ if (!(aS))
653+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
638654 else {
639655 let dr = if ((dp > 0))
640- then invoke(X, "withdrawShareTokensFromPool", [aM.caller.bytes, toString(this), dp], nil)
656+ then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
641657 else 0
642658 if ((dr == dr))
643659 then {
644- let ds = (cK + dp)
645- let dt = fraction(ds, ao, ar)
646- let du = fraction(ds, ap, ar)
647- let dv = aX((ao - dt), (ap - du))
648- let cA = if (contains(Z, ag))
649- then invoke(this, "stakeUnstake", [false, dt, ag], nil)
660+ let ds = (cO + dp)
661+ let dt = fraction(ds, ap, as)
662+ let du = fraction(ds, aq, as)
663+ let dv = aW((ap - dt), (aq - du))
664+ let cE = if (contains(aa, ah))
665+ then invoke(this, "stakeUnstake", [false, dt, ah], nil)
650666 else 0
651- if ((cA == cA))
667+ if ((cE == cE))
652668 then {
653- let cB = if (contains(Z, ah))
654- then invoke(this, "stakeUnstake", [false, du, ah], nil)
669+ let cF = if (contains(aa, ai))
670+ then invoke(this, "stakeUnstake", [false, du, ai], nil)
655671 else 0
656- if ((cB == cB))
657- then [IntegerEntry(g, (ao - dt)), IntegerEntry(h, (ap - du)), IntegerEntry(j, (ar - ds)), IntegerEntry(l, dv), Burn(aq, ds), ScriptTransfer(aM.caller, dt, ai), ScriptTransfer(aM.caller, du, aj)]
672+ if ((cF == cF))
673+ then [IntegerEntry(g, (ap - dt)), IntegerEntry(h, (aq - du)), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dt, aj), ScriptTransfer(aL.caller, du, ak)]
658674 else throw("Strict value is not equal to itself.")
659675 }
660676 else throw("Strict value is not equal to itself.")
661677 }
662678 else throw("Strict value is not equal to itself.")
663679 }
664680 }
665681
666682
667-@Callable(aM)
683+@Callable(aL)
668684 func init (dw) = {
669- let dx = $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
670- let cu = dx._1
671- let cg = dx._2
672- let dy = $Tuple2(aM.payments[1].amount, aM.payments[1].assetId)
673- let cv = dy._1
674- let ch = dy._2
675- let dz = bz(cg)
676- let cl = dz._1
677- let cm = dz._2
678- let cn = dz._3
679- let dA = bz(ch)
680- let cp = dA._1
681- let cq = dA._2
682- let cr = dA._3
685+ let dx = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
686+ let cy = dx._1
687+ let ck = dx._2
688+ let dy = $Tuple2(aL.payments[1].amount, aL.payments[1].assetId)
689+ let cz = dy._1
690+ let cl = dy._2
691+ let dz = by(ck)
692+ let cp = dz._1
693+ let cq = dz._2
694+ let cr = dz._3
695+ let dA = by(cl)
696+ let ct = dA._1
697+ let cu = dA._2
698+ let cv = dA._3
683699 if (isDefined(getBoolean(this, c)))
684- then bE()
685- else if ((cg == ch))
700+ then bD()
701+ else if ((ck == cl))
686702 then throw("Assets must be different")
687703 else {
688- let dB = ((("s" + take(cm, 7)) + "_") + take(cq, 7))
689- let dC = ((((("ShareToken of SwopFi protocol for " + cm) + " and ") + cq) + " at address ") + toString(this))
690- let dD = ((cn + cr) / 2)
691- let dE = fraction(pow(cu, cn, 5, 1, cn, DOWN), pow(cv, cr, 5, 1, cr, DOWN), pow(10, 0, dD, 0, 0, DOWN))
704+ let dB = ((("s" + take(cq, 7)) + "_") + take(cu, 7))
705+ let dC = ((((("ShareToken of SwopFi protocol for " + cq) + " and ") + cu) + " at address ") + toString(this))
706+ let dD = ((cr + cv) / 2)
707+ let dE = fraction(pow(cy, cr, 5, 1, cr, DOWN), pow(cz, cv, 5, 1, cv, DOWN), pow(10, 0, dD, 0, 0, DOWN))
692708 let dF = Issue(dB, dC, dE, dD, true)
693709 let dG = calculateAssetId(dF)
694- let dv = aX(cu, cv)
695- let cA = if (contains(Z, cl))
696- then invoke(this, "stakeUnstake", [true, cu, cl], nil)
710+ let dv = aW(cy, cz)
711+ let cE = if (contains(aa, cp))
712+ then invoke(this, "stakeUnstake", [true, cy, cp], nil)
697713 else 0
698- if ((cA == cA))
714+ if ((cE == cE))
699715 then {
700- let cB = if (contains(Z, cp))
701- then invoke(this, "stakeUnstake", [true, cv, cp], nil)
716+ let cF = if (contains(aa, ct))
717+ then invoke(this, "stakeUnstake", [true, cz, ct], nil)
702718 else 0
703- if ((cB == cB))
719+ if ((cF == cF))
704720 then {
705- let dH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, cl), StringEntry(f, cp), IntegerEntry(g, cu), IntegerEntry(h, cv), IntegerEntry(l, dv), IntegerEntry(k, getIntegerValue(J, "base_fee_flat")), dF, StringEntry(i, toBase58String(dG)), IntegerEntry(j, dE), ScriptTransfer(aM.caller, dE, dG)]
721+ let dH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, cp), StringEntry(f, ct), IntegerEntry(g, cy), IntegerEntry(h, cz), IntegerEntry(l, dv), IntegerEntry(k, getIntegerValue(K, "base_fee_flat")), IntegerEntry(z, 3), dF, StringEntry(i, toBase58String(dG)), IntegerEntry(j, dE), ScriptTransfer(aL.caller, dE, dG)]
706722 if (dw)
707- then (dH ++ [BooleanEntry(t, dw), IntegerEntry(u, (ab + (ad * ac)))])
723+ then (dH ++ [BooleanEntry(t, dw), IntegerEntry(u, (ac + (ae * ad)))])
708724 else dH
709725 }
710726 else throw("Strict value is not equal to itself.")
711727 }
712728 else throw("Strict value is not equal to itself.")
713729 }
714730 }
715731
716732
717733
718-@Callable(aM)
719-func replenishWithTwoTokensV2 (ce,cf) = valueOrElse(bF(), cd(aM, ce, cf))
734+@Callable(aL)
735+func replenishWithTwoTokensV2 (ci,cj) = valueOrElse(bE(), ch(aL, ci, cj))
720736
721737
722738
723-@Callable(aM)
724-func replenishWithOneTokenV2 (cH,cI,ce,cf) = valueOrElse(bF(), cG(aM, cH, cI, ce, cf))
739+@Callable(aL)
740+func replenishWithOneTokenV2 (cL,cM,ci,cj) = valueOrElse(bE(), cK(aL, cL, cM, ci, cj))
725741
726742
727743
728-@Callable(aM)
729-func withdrawV2 (dp) = valueOrElse(bF(), do(aM, dp))
744+@Callable(aL)
745+func withdrawV2 (dp) = valueOrElse(bE(), do(aL, dp))
730746
731747
732748
733-@Callable(aM)
734-func withdrawOneToken (dp,dI,dJ,dK) = valueOrElse(bF(), {
735- let dL = if ((size(aM.payments) == 1))
736- then if ((aM.payments[0].assetId != aq))
737- then throw(("Incorrect asset attached. Expected: " + toBase58String(aq)))
738- else $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
739- else $Tuple2(0, aq)
740- let cK = dL._1
741- let cL = dL._2
742- let ds = (cK + dp)
743- if (if ((dI != ag))
744- then (dI != ah)
749+@Callable(aL)
750+func withdrawOneToken (dp,dI,dJ,dK) = valueOrElse(bE(), {
751+ let dL = if ((size(aL.payments) == 1))
752+ then if ((aL.payments[0].assetId != ar))
753+ then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
754+ else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
755+ else $Tuple2(0, ar)
756+ let cO = dL._1
757+ let cb = dL._2
758+ let ds = (cO + dp)
759+ if (if ((dI != ah))
760+ then (dI != ai)
745761 else false)
746762 then throw("Incorrect withdraw asset")
747763 else if ((0 >= ds))
748764 then throw("withdraw amount must be grater than 0")
749- else if (!(aT))
750- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
765+ else if (!(aS))
766+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
751767 else {
752768 let dr = if ((dp > 0))
753- then invoke(X, "withdrawShareTokensFromPool", [aM.caller.bytes, toString(this), dp], nil)
769+ then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
754770 else 0
755771 if ((dr == dr))
756772 then {
757- let dt = fraction(ds, ao, ar)
758- let du = fraction(ds, ap, ar)
759- let dM = (ao - dt)
760- let dN = (ap - du)
761- let dO = bX(aM.originCaller)
762- let dP = if ((dI == ag))
763- then aZ(dJ, dK, du, aj, dM, dN, aX(dM, dN))
764- else aZ(dJ, dK, dt, ai, dM, dN, aX(dM, dN))
765- let dQ = fraction(dP, fraction(au, dO, av, CEILING), av)
766- let dR = fraction(dP, (av - fraction(at, dO, av, CEILING)), av)
767- let dS = if ((dI == ag))
768- then $Tuple3((dt + dR), (((ao - dt) - dR) - dQ), ap)
769- else $Tuple3((du + dR), ao, (((ap - du) - dR) - dQ))
773+ let dt = fraction(ds, ap, as)
774+ let du = fraction(ds, aq, as)
775+ let dM = (ap - dt)
776+ let dN = (aq - du)
777+ let dO = bS(aL.originCaller)
778+ let dP = if ((dI == ah))
779+ then aY(dJ, dK, du, ak, dM, dN, aW(dM, dN))
780+ else aY(dJ, dK, dt, aj, dM, dN, aW(dM, dN))
781+ let dQ = fraction(dP, fraction(av, dO, aw, CEILING), aw)
782+ let dR = fraction(dP, (aw - fraction(au, dO, aw, CEILING)), aw)
783+ let dS = if ((dI == ah))
784+ then $Tuple4((dt + dR), (((ap - dt) - dR) - dQ), aq, ak)
785+ else $Tuple4((du + dR), ap, (((aq - du) - dR) - dQ), aj)
770786 let dT = dS._1
771787 let dU = dS._2
772788 let dV = dS._3
773- let dv = aX(dU, dV)
774- let cA = if (contains(Z, dI))
775- then invoke(this, "stakeUnstake", [false, (dT + dQ), dI], nil)
776- else 0
777- if ((cA == cA))
778- then [IntegerEntry(g, dU), IntegerEntry(h, dV), IntegerEntry(j, (ar - ds)), IntegerEntry(l, dv), Burn(aq, ds), ScriptTransfer(aM.caller, dT, fromBase58String(dI)), ScriptTransfer(T, dQ, fromBase58String(dI))]
779- else throw("Strict value is not equal to itself.")
789+ let dW = dS._4
790+ if (!(bY(dU, dV, dW)))
791+ then throw()
792+ else {
793+ let dv = aW(dU, dV)
794+ let cE = if (contains(aa, dI))
795+ then invoke(this, "stakeUnstake", [false, (dT + dQ), dI], nil)
796+ else 0
797+ if ((cE == cE))
798+ then [IntegerEntry(g, dU), IntegerEntry(h, dV), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dT, fromBase58String(dI)), ScriptTransfer(U, dQ, fromBase58String(dI))]
799+ else throw("Strict value is not equal to itself.")
800+ }
780801 }
781802 else throw("Strict value is not equal to itself.")
782803 }
783804 })
784805
785806
786807
787-@Callable(aM)
788-func exchange (dJ,dK) = valueOrElse(bF(), {
789- let dW = $Tuple2(aM.payments[0].amount, aM.payments[0].assetId)
790- let cK = dW._1
791- let cL = dW._2
808+@Callable(aL)
809+func exchange (dJ,dK) = valueOrElse(bE(), {
810+ let dX = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
811+ let cO = dX._1
812+ let cb = dX._2
792813 if ((0 >= dJ))
793814 then throw(("Estimated amount must be positive. Actual: " + toString(dJ)))
794815 else if ((dK > dJ))
795816 then throw("Minimal amount can't be greater than estimated.")
796- else if ((size(aM.payments) != 1))
797- then bJ()
798- else if (!(aT))
799- then ([ScriptTransfer(aM.caller, cK, cL)] ++ bO())
800- else if (if ((cL != ai))
801- then (cL != aj)
817+ else if ((size(aL.payments) != 1))
818+ then bI()
819+ else if (!(aS))
820+ then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
821+ else if (if ((cb != aj))
822+ then (cb != ak)
802823 else false)
803- then bI()
804- else if ((10000000 > cK))
824+ then bH()
825+ else if ((10000000 > cO))
805826 then throw("Only swap of 10.000000 or more tokens is allowed")
806- else if (if ((aC > fraction(ax, dK, cK)))
827+ else if (if ((aB > fraction(ay, dK, cO)))
807828 then true
808- else (fraction(ax, dJ, cK) > aD))
829+ else (fraction(ay, dJ, cO) > aC))
809830 then throw("Incorrect args and pmt ratio")
810831 else {
811- let dX = if ((cL == ai))
812- then aj
813- else ai
814- let bS = aZ(dJ, dK, cK, cL, ao, ap, as)
815- let dO = bX(aM.originCaller)
816- let dY = fraction(bS, fraction(au, dO, av, CEILING), av)
817- let dZ = fraction(bS, (av - fraction(at, dO, av, CEILING)), av)
818- let ea = if ((cL == ai))
819- then $Tuple2((ao + cK), ((ap - dZ) - dY))
820- else $Tuple2(((ao - dZ) - dY), (ap + cK))
821- let db = ea._1
822- let dc = ea._2
823- let df = fraction((db + dc), aA, (2 * aB))
824- if (if ((df > db))
825- then true
826- else (df > dc))
827- then bK(df, db, dc)
832+ let dY = if ((cb == aj))
833+ then ak
834+ else aj
835+ let bN = aY(dJ, dK, cO, cb, ap, aq, at)
836+ let dO = bS(aL.originCaller)
837+ let dZ = fraction(bN, fraction(av, dO, aw, CEILING), aw)
838+ let ea = fraction(bN, (aw - fraction(au, dO, aw, CEILING)), aw)
839+ let eb = if ((cb == aj))
840+ then $Tuple2((ap + cO), ((aq - ea) - dZ))
841+ else $Tuple2(((ap - ea) - dZ), (aq + cO))
842+ let bZ = eb._1
843+ let ca = eb._2
844+ if (!(bY(bZ, ca, cb)))
845+ then throw()
828846 else {
829- let eb = bz(cL)
830- let cN = eb._1
831- let cO = eb._2
832- let cP = eb._3
833- let ec = bz(dX)
834- let ed = ec._1
835- let ee = ec._2
836- let ef = ec._3
837- let cA = if (contains(Z, cN))
838- then invoke(this, "stakeUnstake", [true, cK, cN], nil)
847+ let ec = by(cb)
848+ let cQ = ec._1
849+ let cR = ec._2
850+ let cS = ec._3
851+ let ed = by(dY)
852+ let ee = ed._1
853+ let ef = ed._2
854+ let eg = ed._3
855+ let cE = if (contains(aa, cQ))
856+ then invoke(this, "stakeUnstake", [true, cO, cQ], nil)
839857 else 0
840- if ((cA == cA))
858+ if ((cE == cE))
841859 then {
842- let cB = if (contains(Z, ed))
843- then invoke(this, "stakeUnstake", [false, (dZ + dY), ed], nil)
860+ let cF = if (contains(aa, ee))
861+ then invoke(this, "stakeUnstake", [false, (ea + dZ), ee], nil)
844862 else 0
845- if ((cB == cB))
846- then $Tuple2([IntegerEntry(g, db), IntegerEntry(h, dc), IntegerEntry(l, aX(db, dc)), ScriptTransfer(aM.caller, dZ, dX), ScriptTransfer(T, dY, dX)], [dZ, dX])
863+ if ((cF == cF))
864+ then $Tuple2([IntegerEntry(g, bZ), IntegerEntry(h, ca), IntegerEntry(l, aW(bZ, ca)), ScriptTransfer(aL.caller, ea, dY), ScriptTransfer(U, dZ, dY)], [ea, dY])
847865 else throw("Strict value is not equal to itself.")
848866 }
849867 else throw("Strict value is not equal to itself.")
850868 }
851869 }
852870 })
853871
854872
855873
856-@Callable(eg)
857-func reissueShare (bS) = valueOrElse(bH(eg), [Reissue(aq, bS, true)])
874+@Callable(eh)
875+func reissueShare (bN) = valueOrElse(bG(eh), [Reissue(ar, bN, true)])
858876
859877
860878
861-@Callable(aM)
862-func shutdown () = valueOrElse(bG(aM), if (!(ae))
879+@Callable(aL)
880+func shutdown () = valueOrElse(bF(aL), if (!(af))
863881 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
864- else bC("Paused by admin"))
882+ else bB("Paused by admin"))
865883
866884
867885
868-@Callable(aM)
869-func activate () = valueOrElse(bG(aM), if (ae)
870- then bE()
886+@Callable(aL)
887+func activate () = valueOrElse(bF(aL), if (af)
888+ then bD()
871889 else [BooleanEntry(c, true), DeleteEntry(m)])
872890
873891
874892
875-@Callable(aM)
876-func takeIntoAccountExtraFunds () = valueOrElse(bF(), {
877- let eh = (aR - ao)
878- let ei = (aS - ap)
879- let dd = aX((ao + eh), (ap + ei))
880- if ((aM.caller != T))
881- then throw("Only the money box can call this function")
882- else if (if ((0 > eh))
883- then true
884- else (0 > ei))
885- then bC("Enroll amount negative")
886- else if (if ((eh == 0))
887- then (ei == 0)
888- else false)
889- then throw("No money to take")
890- else {
891- let cA = if (if (contains(Z, ag))
892- then (eh > 0)
893+@Callable(aL)
894+func takeIntoAccountExtraFunds () = valueOrElse(bE(), {
895+ let ei = if (if ((aj == Z))
896+ then true
897+ else (ak == Z))
898+ then invoke(W, "claimRewards", nil, nil)
899+ else 0
900+ if ((ei == ei))
901+ then {
902+ let ej = (aQ - ap)
903+ let ek = (aR - aq)
904+ let de = aW((ap + ej), (aq + ek))
905+ if ((aL.caller != U))
906+ then throw("Only the money box can call this function")
907+ else if (if ((0 > ej))
908+ then true
909+ else (0 > ek))
910+ then bB("Enroll amount negative")
911+ else if (if ((ej == 0))
912+ then (ek == 0)
893913 else false)
894- then invoke(this, "stakeUnstake", [true, eh, ag], nil)
895- else 0
896- if ((cA == cA))
897- then {
898- let cB = if (if (contains(Z, ah))
899- then (ei > 0)
914+ then throw("No money to take")
915+ else {
916+ let cE = if (if (contains(aa, ah))
917+ then (ej > 0)
900918 else false)
901- then invoke(this, "stakeUnstake", [true, ei, ah], nil)
919+ then invoke(this, "stakeUnstake", [true, ej, ah], nil)
902920 else 0
903- if ((cB == cB))
904- then [IntegerEntry(l, dd), IntegerEntry(g, (ao + eh)), IntegerEntry(h, (ap + ei))]
921+ if ((cE == cE))
922+ then {
923+ let cF = if (if (contains(aa, ai))
924+ then (ek > 0)
925+ else false)
926+ then invoke(this, "stakeUnstake", [true, ek, ai], nil)
927+ else 0
928+ if ((cF == cF))
929+ then [IntegerEntry(l, de), IntegerEntry(g, (ap + ej)), IntegerEntry(h, (aq + ek))]
930+ else throw("Strict value is not equal to itself.")
931+ }
905932 else throw("Strict value is not equal to itself.")
906933 }
907- else throw("Strict value is not equal to itself.")
908- }
934+ }
935+ else throw("Strict value is not equal to itself.")
909936 })
910937
911938
912939
913-@Callable(aM)
914-func keepLimitForFirstHarvest (ej) = valueOrElse(bF(), valueOrElse(bG(aM), [IntegerEntry(v, ej)]))
940+@Callable(aL)
941+func keepLimitForFirstHarvest (el) = valueOrElse(bE(), valueOrElse(bF(aL), [IntegerEntry(v, el)]))
915942
916943
917944
918-@Callable(aM)
919-func stakeUnstake (bQ,bS,ek) = if ((aM.caller != this))
945+@Callable(aL)
946+func stakeUnstake (bL,bN,em) = if ((aL.caller != this))
920947 then throw("Only contract itself can invoke this function")
921948 else {
922- let el = bR(bQ, bS, fromBase58String(ek))
923- let bU = el._1
924- let em = el._2
925- let en = el._3
926- let eo = el._4
927- let ep = invoke(em, bU, en, eo)
928- if ((ep == ep))
949+ let en = bM(bL, bN, fromBase58String(em))
950+ let bP = en._1
951+ let eo = en._2
952+ let ep = en._3
953+ let eq = en._4
954+ let er = invoke(eo, bP, ep, eq)
955+ if ((er == er))
929956 then nil
930957 else throw("Strict value is not equal to itself.")
931958 }
932959
933960
934961
935-@Callable(aM)
936-func replenishWithTwoTokens () = valueOrElse(bF(), cd(aM, false, 0))
962+@Callable(aL)
963+func replenishWithTwoTokens () = valueOrElse(bE(), ch(aL, false, 0))
937964
938965
939966
940-@Callable(aM)
941-func replenishWithOneToken (cH,cI) = valueOrElse(bF(), cG(aM, cH, cI, false, 0))
967+@Callable(aL)
968+func replenishWithOneToken (cL,cM) = valueOrElse(bE(), cK(aL, cL, cM, false, 0))
942969
943970
944971
945-@Callable(aM)
946-func withdraw () = valueOrElse(bF(), do(aM, 0))
972+@Callable(aL)
973+func withdraw () = valueOrElse(bE(), do(aL, 0))
947974
948975
949-@Verifier(eq)
950-func er () = {
951- let es = {
952- let et = if (sigVerify(eq.bodyBytes, eq.proofs[0], P))
976+@Verifier(es)
977+func et () = {
978+ let eu = {
979+ let ev = if (sigVerify(es.bodyBytes, es.proofs[0], Q))
953980 then 1
954981 else 0
955- let eu = if (sigVerify(eq.bodyBytes, eq.proofs[1], Q))
982+ let ew = if (sigVerify(es.bodyBytes, es.proofs[1], R))
956983 then 1
957984 else 0
958- let ev = if (sigVerify(eq.bodyBytes, eq.proofs[2], R))
985+ let ex = if (sigVerify(es.bodyBytes, es.proofs[2], S))
959986 then 1
960987 else 0
961- (((et + eu) + ev) >= 2)
988+ (((ev + ew) + ex) >= 2)
962989 }
963- let M = eq
964- if ($isInstanceOf(M, "InvokeScriptTransaction"))
990+ let N = es
991+ if ($isInstanceOf(N, "InvokeScriptTransaction"))
965992 then {
966- let ep = M
967- let ew = if ((ep.dApp == this))
968- then (ep.function == "takeIntoAccountExtraFunds")
993+ let er = N
994+ let ey = if ((er.dApp == this))
995+ then (er.function == "takeIntoAccountExtraFunds")
969996 else false
970- let ex = if (if (if (sigVerify(eq.bodyBytes, eq.proofs[0], P))
997+ let ez = if (if (if (sigVerify(es.bodyBytes, es.proofs[0], Q))
971998 then true
972- else sigVerify(eq.bodyBytes, eq.proofs[0], Q))
999+ else sigVerify(es.bodyBytes, es.proofs[0], R))
9731000 then true
974- else sigVerify(eq.bodyBytes, eq.proofs[0], R))
1001+ else sigVerify(es.bodyBytes, es.proofs[0], S))
9751002 then true
976- else sigVerify(eq.bodyBytes, eq.proofs[0], S)
977- if (if (ew)
978- then ex
1003+ else sigVerify(es.bodyBytes, es.proofs[0], T)
1004+ if (if (ey)
1005+ then ez
9791006 else false)
9801007 then true
981- else es
1008+ else eu
9821009 }
983- else es
1010+ else eu
9841011 }
9851012

github/deemru/w8io/873ac7e 
445.27 ms