tx · 9MgEXhPo6fg71yoQqR3YgQWBiM3ZUGpUCbQAmRgd7rZe

3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK:  -0.02400000 Waves

2022.07.17 15:37 [2143759] smart account 3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK > SELF 0.00000000 Waves

{ "type": 13, "id": "9MgEXhPo6fg71yoQqR3YgQWBiM3ZUGpUCbQAmRgd7rZe", "fee": 2400000, "feeAssetId": null, "timestamp": 1658061434942, "version": 2, "chainId": 84, "sender": "3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK", "senderPublicKey": "AHY8zupoYc6HPJ5fh1gQiGE9bNZSeifFbcQQ89okxVug", "proofs": [ "5QWyCC5pct6P7FCFavn1rasbPDsKxzWRPqFimhbKJvh2UYLALbL3ckuhQd3UyvmtPSQifGyTJgbDVLcsM6LEYuJG" ], "script": "base64:BgIvCAISABIAEgASABIDCgEBEgASAwoBARIAEgASAwoBCBIECgIBARIDCgEBEgMKAQgEAAtTdGFrZWRUb2tlbgEg+a5dhaqgwfNcHhVklvUuRcimKrmAG+DKV13AJarHD1AAC0dvdmVyblRva2VuASABbIXC10DGLlfEc7PFC2dO3zpcxegcWHrOz/9RkZaZLQAUTGlrZVBhY2thZ2VBU0lNSUNvc3QJAGgCAAEAgMLXLwAWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdAkAaAIABQCAwtcvDQFpAQtEZXZXaXRoZHJhdwAECmN1cnJlbnRLZXkJANgEAQgIBQFpBmNhbGxlcgVieXRlcwMJAAACBQpjdXJyZW50S2V5AiMzUDc0YnVIdDk4Qm5vakZjYVJFSlp0Yjk4S0R5VW1aR2VtSgQMRGV2Qm94QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCBkRldkJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMJAGYCAAAFDERldkJveEFtb3VudAkAAgECEk5vdCBlbm91Z2ggYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIGRGV2Qm94AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxEZXZCb3hBbW91bnQFC0dvdmVyblRva2VuBQNuaWwJAAIBAixZb3UgY2Fubm90IHdpdGhkcmF3IGFzIHlvdXIgYXJlIG5vdCB0aGUgRGV2LgFpARVXaXRoZHJhd1dlZWtseUVhcm5pbmcABBpDb250cmFjdFdhbGxldFN0YWtlQmFsYW5jZQkA8AcCBQR0aGlzBQtTdGFrZWRUb2tlbgQMTWF4RGVwb3NpdGVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgxNYXhEZXBvc2l0ZXIEElVzZXJXZWVrbHlFYXJuaW5ncwkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCDF9XZWVrRWFybmluZwQMU3Rha2VCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMCDFN0YWtlQmFsYW5jZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLUHJpemVBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIHRnVuZEJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAECmN1cnJlbnRLZXkJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJbmV3QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJXZWVrbHlFYXJuaW5ncwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMJAGYCAAAFCW5ld0Ftb3VudAkAAgECHkNhbid0IHdpdGhkcmF3IG5lZ2F0aXZlIGFtb3VudAMJAGYCAAAFCW5ld0Ftb3VudAkAAgEJAKwCAgJBVXNlciBjYW5ub3Qgd2l0aGRyYXcgbW9yZSB0aGFuIGRlcG9zaXRlZCBmdW5kcywgWW91ciBkZXBvc2l0IGlzOiAJAKQDAQkAaQIFCW5ld0Ftb3VudACAwtcvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyV2Vla2x5RWFybmluZ3MAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQFEFByaXplSGVpZ2h0VmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQICCk1heERlcG9zaXQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCW5ld0Ftb3VudAULU3Rha2VkVG9rZW4FA25pbAFpAQpQdXNoUmV3YXJkAAQMbWluUHVzaEJsb2NrAAoEDW1pblN0YWtlQmxvY2sJAGgCAAcAoAsEDkRlbGF5QWZ0ZXJQdXNoADwECFdhaXRUaW1lCQBoAgCgCwABBAZtaW5yZWYAAwQORmlyc3RQdXNoVGltZXIJAGgCAAcAoAsEF3VzZXJXYWxsZXRHb3Zlcm5CYWxhbmNlCQDwBwIJAQdBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwULR292ZXJuVG9rZW4EA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECHEF0dGFjaGVkIHBheW1lbnQgaXMgcmVxdWlyZWQECFVzZXJQdXNoCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIFX1B1c2gEFFVzZXJMYXN0UHVzaE9sZFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtVc2VyUmVmc051bQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9yZWZzBBBVc2VyUmVmc051bVZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFC1VzZXJSZWZzTnVtAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBIaWdoZXN0UHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCC0hpZ2hlc3RQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwkAZgIFF3VzZXJXYWxsZXRHb3Zlcm5CYWxhbmNlCAUDcG10BmFtb3VudAMDCQBmAgkAZAIIBQNwbXQGYW1vdW50BRRVc2VyTGFzdFB1c2hPbGRWYWx1ZQUQSGlnaGVzdFB1c2hWYWx1ZQkAAAIIBQNwbXQHYXNzZXRJZAULR292ZXJuVG9rZW4HBBFVc2VyTGFzdFB1c2hCbG9jawkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCEl9Vc2VyTGFzdFB1c2hCbG9jawQSVXNlckxhc3RTdGFrZUJsb2NrCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwITX1VzZXJMYXN0U3Rha2VCbG9jawQJVXNlclN0YWtlCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIIX1N0YWtpbmcEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gEByRtYXRjaDAJAJoIAgUEdGhpcwILUHJpemVIZWlnaHQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEFByaXplSGVpZ2h0VmFsdWUDAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQAAAgULUHJpemVBbW91bnQAAAcAAAMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBQZoZWlnaHQDAwkBAiE9AgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAQLQWN0dWFsRGVsYXkEByRtYXRjaDAJAJoIAgUEdGhpcwIFRGVsYXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEkhpZ2hlc3RQdXNoQWRkcmVzcwQHJG1hdGNoMAkAmggCBQR0aGlzAhJIaWdoZXN0UHVzaEFkZHJlc3MDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFlVzZXJMYXN0UHVzaEJsb2NrVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwURVXNlckxhc3RQdXNoQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJMYXN0U3Rha2VCbG9jawMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQOVXNlclN0YWtlVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwUJVXNlclN0YWtlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABA1EZXZCb3hCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMCBkRldkJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQMRGV2Qm94QW1vdW50CQBkAgUNRGV2Qm94QmFsYW5jZQkAaQIJAGgCCAUDcG10BmFtb3VudAAFAOgHBA1Vc2VyUHVzaHZhbHVlCQBkAggFA3BtdAZhbW91bnQFFFVzZXJMYXN0UHVzaE9sZFZhbHVlBAhOZXdEZWxheQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFDkZpcnN0UHVzaFRpbWVyCQBkAgULQWN0dWFsRGVsYXkFDkRlbGF5QWZ0ZXJQdXNoBBdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFCE5ld0RlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcCAAUSSGlnaGVzdFB1c2hBZGRyZXNzBBNQcml6ZUhlaWdodFZhbHVlTmV3AwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQUITmV3RGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwUGaGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlAwMJAGYCBQ1Vc2VyUHVzaHZhbHVlAAAJAGYCCQBlAgUGaGVpZ2h0BRdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQUNbWluU3Rha2VCbG9jawcDCQBmAgkAZQIFBmhlaWdodAUWVXNlckxhc3RQdXNoQmxvY2tWYWx1ZQUMbWluUHVzaEJsb2NrAwkAZgIFDlVzZXJTdGFrZVZhbHVlAAADCQBmAgUNVXNlclB1c2h2YWx1ZQUQSGlnaGVzdFB1c2hWYWx1ZQMJAGYCBQtQcml6ZUFtb3VudAAAAwMDAwkAZwIJAGQCBRNQcml6ZUhlaWdodFZhbHVlTmV3BQhOZXdEZWxheQUGaGVpZ2h0BgkAZwIFBmhlaWdodAkAZAIJAGQCBRNQcml6ZUhlaWdodFZhbHVlTmV3BQhOZXdEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHBgkAAAIFEEhpZ2hlc3RQdXNoVmFsdWUAAAMJAGcCBRBVc2VyUmVmc051bVZhbHVlBQZtaW5yZWYJAMwIAgkBDEludGVnZXJFbnRyeQIFCFVzZXJQdXNoBQ1Vc2VyUHVzaHZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQICEkhpZ2hlc3RQdXNoQWRkcmVzcwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtIaWdoZXN0UHVzaAUNVXNlclB1c2h2YWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgURVXNlckxhc3RQdXNoQmxvY2sFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQFE1ByaXplSGVpZ2h0VmFsdWVOZXcJAMwIAgkBDEludGVnZXJFbnRyeQICBURlbGF5BQhOZXdEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgIGRGV2Qm94BQxEZXZCb3hBbW91bnQFA25pbAkAAgEJAKwCAgkArAICAhFZb3UgaGF2ZSB0byBoYXZlIAkApAMBBQZtaW5yZWYCPCByZWZlcnJhbHMgYWxyZWFkeSBzdGFraW5nIGZvciBhIG1pbmltdW0gb2YgMTAgZGF5cywgdG8gcHVzaAQDdHh0AwkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAJPWW91IGNhbm5vdCBQdXNoIGFmdGVyIHJld2FyZGluZyBQcml6ZSBhbmQgYmVmb3JlIE9uZSBkYXkgaGFzIHBhc3NlZCBhZnRlciBhd2FyZAIQVW5leHBlY3RlZCBlcnJvcgkAAgEFA3R4dAkAAgECTllvdSBjYW5ub3QgcHVzaCBiZWZvcmUgdGhlIHJld2FyZCBpcyB1bmxvY2tlZCwgbm8gcmV3YXJkIGhhcyBiZWVuIGRldGVjdGVkIHlldAkAAgECQ1lvdXIgcHVzaCBpbiB0cm9pa2FuIHRva2VuLCBzaG91bGQgYmUgSGlnaGVyIHRoYW4gbGFzdCBIaWdoZXN0IFB1c2gJAAIBAlhUbyBiZSBhYmxlIHRvIHBhcnRpY2lwYXRlIGluIFB1c2hpbmcgZm9yIHRoZSByZXdhcmQgeW91IG5lZWQgdG8gU3Rha2UgQVNJTUlzIGluIHRoZSBkQXBwCQACAQI1WW91IGhhdmUgdG8gd2FpdCAxMG1pbiBiZWZvcmUgeW91IGNhbiBtYWtlIGEgbmV3IFB1c2gJAAIBCQCsAgICOllvdXIgUHVzaCBkb3Qgbm90IGNvbXBseSBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiACXTEuIFBvc2l0aXZlIFZhbHVlIGZvciBQdXNoIGluIFRyb2lrYW4gVG9rZQogMi4gTXVzdCBTdGFrZWQgQVNJTUkgVG9rZW4gZm9yIGEgbWluaW11bSBvZiB3ZWVrIAkAAgEJAKwCAgkArAICAnZDYW4gZGVwb3NpdCBvbmx5IHBvc2l0aXZlIGFtb3VudHMgb2YgVHJvaWthbiBUb2tlbiwgb3IgQ2hlY2sgeW91ciBXYWxsZXQgYmFsYW5jZSBpbiBUcm9pa2EsIHlvdSBzaG91bGQgaGF2ZSBtb3JlIHRoYW4gCQCkAwEFEEhpZ2hlc3RQdXNoVmFsdWUCCCB0byBwdXNoCQACAQKkAVlvdSBkbyBub3QgaGF2ZSBlbm91Z2ggVHJvaWthbiBUb2tlbnMgaW4geW91ciBXYWxsZXQgQmFsYW5jZSwgUGxlYXNlIEhhcnZlc3QgaWYgeW91IGhhdmUgZWFybmVkIFRyb2lrYW4gd2FsbGV0IG9yIHRyYW5zZmVyIHRvIHlvdXIgd2FsbGV0IG5lY2Vzc2FyeSBUcm9pa2FuIGFtb3VudCAhAWkBBVN0YWtlAAQIV2FpdFRpbWUJAGgCAKALAAEEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECHEF0dGFjaGVkIHBheW1lbnQgaXMgcmVxdWlyZWQDAwkAZgIIBQNwbXQGYW1vdW50AAAJAAACCAUDcG10B2Fzc2V0SWQFC1N0YWtlZFRva2VuBwQfR292ZXJuVG9rZW5TbWFydENvbnRyYWN0QmFsYW5jZQkA8AcCBQR0aGlzBQtHb3Zlcm5Ub2tlbgQHVXNlckFQWQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBF9BUFkECFVzZXJQdXNoCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIFX1B1c2gEElVzZXJTdGFrZWRUb2tlbktleQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBBJVc2VyR292ZXJuVG9rZW5LZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAglfRWFybmluZ3MEElVzZXJMYXN0U3Rha2VCbG9jawkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCE19Vc2VyTGFzdFN0YWtlQmxvY2sEGFVzZXJTdGFrZVRyYW5zYWN0aW9uc0tleQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCE19TdGFrZWRUcmFuc2FjdGlvbnMEDUFkZHJlc3NIZWlnaHQJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgxfUHJpemVIZWlnaHQEEFVzZXJXZWVrRWFybmluZ3MJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgxfV2Vla0Vhcm5pbmcEFVVzZXJTdGFrZVRyYW5zYWN0aW9ucwQHJG1hdGNoMAkAmggCBQR0aGlzBRhVc2VyU3Rha2VUcmFuc2FjdGlvbnNLZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEDE1heERlcG9zaXRlcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIMTWF4RGVwb3NpdGVyBA9NYXhEZXBvc2l0QmxvY2sEByRtYXRjaDAJAJoIAgUEdGhpcwIPTWF4RGVwb3NpdEJsb2NrAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABApNYXhEZXBvc2l0BAckbWF0Y2gwCQCaCAIFBHRoaXMCCk1heERlcG9zaXQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEU1heERlcG9zaXRlclZhbHVlAwkAZgIIBQNwbXQGYW1vdW50BQpNYXhEZXBvc2l0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFDE1heERlcG9zaXRlcgQPTWF4RGVwb3NpdFZhbHVlAwkAZgIIBQNwbXQGYW1vdW50BQpNYXhEZXBvc2l0CAUDcG10BmFtb3VudAUKTWF4RGVwb3NpdAQUTWF4RGVwb3NpdEJsb2NrVmFsdWUDCQBmAggFA3BtdAZhbW91bnQFCk1heERlcG9zaXQFBmhlaWdodAUPTWF4RGVwb3NpdEJsb2NrBA1Vc2VyUHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEGlVzZXJMYXN0U3Rha2VCbG9ja05ld1ZhbHVlAwkAAAIFF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlAAAFBmhlaWdodAUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUEGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwkAZAIFFVVzZXJTdGFrZVRyYW5zYWN0aW9ucwABBBhjdXJyZW50QW1vdW50U3Rha2VkVG9rZW4EByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlclN0YWtlZFRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBRuZXdBbW91bnRTdGFrZWRUb2tlbgkAZAIFGGN1cnJlbnRBbW91bnRTdGFrZWRUb2tlbggFA3BtdAZhbW91bnQEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJTdGFrZUJhbGFuY2VBbW91bnQJAGQCBQxTdGFrZUJhbGFuY2UIBQNwbXQGYW1vdW50BAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVVc2VyV2Vla0Vhcm5pbmdzVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwUQVXNlcldlZWtFYXJuaW5ncwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQYY3VycmVudEFtb3VudEdvdmVyblRva2VuBAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJHb3Zlcm5Ub2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBIaWdoZXN0UHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCC0hpZ2hlc3RQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJIaWdoZXN0UHVzaEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCEkhpZ2hlc3RQdXNoQWRkcmVzcwQXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHAgAFEkhpZ2hlc3RQdXNoQWRkcmVzcwQTUHJpemVIZWlnaHRWYWx1ZU5ldwMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFBmhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQMJAGYCAIDC1y8FH0dvdmVyblRva2VuU21hcnRDb250cmFjdEJhbGFuY2UJAAIBAj5ObyBlbm91Z2ggR292ZXJuVG9rZW4gSW4gQ29udHJhY3QsIFBsZWFzZSBkZXBvc2l0IEdvdmVyblRva2VucwQGUmV3YXJkAwkAAAIFDFN0YWtlQmFsYW5jZQAAAJBOAwkAZgIFGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwAKCQBoAgkAaAIAkE4FGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwkAZAIAAQkAaQIFFG5ld0Ftb3VudFN0YWtlZFRva2VuBQxTdGFrZUJhbGFuY2UJAGgCAJBOCQBkAgABCQBpAgUUbmV3QW1vdW50U3Rha2VkVG9rZW4FDFN0YWtlQmFsYW5jZQQMVXNlckFQWVZhbHVlAwkAZgIFGGN1cnJlbnRBbW91bnRHb3Zlcm5Ub2tlbgAACQBpAgkAaAIAZAUGUmV3YXJkBRhjdXJyZW50QW1vdW50R292ZXJuVG9rZW4AAAQUbmV3QW1vdW50R292ZXJuVG9rZW4JAGQCBRhjdXJyZW50QW1vdW50R292ZXJuVG9rZW4FBlJld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlckdvdmVyblRva2VuS2V5BRRuZXdBbW91bnRHb3Zlcm5Ub2tlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlclN0YWtlZFRva2VuS2V5BRRuZXdBbW91bnRTdGFrZWRUb2tlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUYVXNlclN0YWtlVHJhbnNhY3Rpb25zS2V5BRhOZXdVc2VyU3Rha2VUcmFuc2FjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQICDFN0YWtlQmFsYW5jZQUSU3Rha2VCYWxhbmNlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtQcml6ZUhlaWdodAUTUHJpemVIZWlnaHRWYWx1ZU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUHVXNlckFQWQUMVXNlckFQWVZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyTGFzdFN0YWtlQmxvY2sFGlVzZXJMYXN0U3Rha2VCbG9ja05ld1ZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhVc2VyUHVzaAUNVXNlclB1c2hWYWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCAgxNYXhEZXBvc2l0ZXIFEU1heERlcG9zaXRlclZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpNYXhEZXBvc2l0BQ9NYXhEZXBvc2l0VmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQICD01heERlcG9zaXRCbG9jawUUTWF4RGVwb3NpdEJsb2NrVmFsdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgISSGlnaGVzdFB1c2hBZGRyZXNzBRdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQVXNlcldlZWtFYXJuaW5ncwUVVXNlcldlZWtFYXJuaW5nc1ZhbHVlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGUmV3YXJkBQtHb3Zlcm5Ub2tlbgUDbmlsCQACAQIbQ2FuIGRlcG9zaXQgb25seSBTdGFrZVRva2VuAWkBE1dpdGhkcmF3U3Rha2VkRnVuZHMBBmFtb3VudAQIV2FpdFRpbWUJAGgCAKALAAEEElVzZXJMYXN0U3Rha2VCbG9jawkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCE19Vc2VyTGFzdFN0YWtlQmxvY2sEElVzZXJTdGFrZWRUb2tlbktleQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBBJVc2VyR292ZXJuVG9rZW5LZXkJAKwCAgkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCAV8JANgEAQULR292ZXJuVG9rZW4EGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEDFN0YWtlQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgxTdGFrZUJhbGFuY2UDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLQWN0dWFsRGVsYXkEByRtYXRjaDAJAJoIAgUEdGhpcwIFRGVsYXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEEhpZ2hlc3RQdXNoVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwILSGlnaGVzdFB1c2gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEFByaXplSGVpZ2h0VmFsdWUDAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQAAAgULUHJpemVBbW91bnQAAAcAAAMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBQZoZWlnaHQDAwkBAiE9AgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAQSSGlnaGVzdFB1c2hBZGRyZXNzBAckbWF0Y2gwCQCdCAIFBHRoaXMCEkhpZ2hlc3RQdXNoQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAQXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHAgAFEkhpZ2hlc3RQdXNoQWRkcmVzcwQTUHJpemVIZWlnaHRWYWx1ZU5ldwMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFBmhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJTdGFrZWRUb2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQJbmV3QW1vdW50CQBlAgUNY3VycmVudEFtb3VudAUGYW1vdW50BBJTdGFrZUJhbGFuY2VBbW91bnQJAGUCBQxTdGFrZUJhbGFuY2UFBmFtb3VudAQaVXNlckxhc3RTdGFrZUJsb2NrTmV3VmFsdWUDCQAAAgUSU3Rha2VCYWxhbmNlQW1vdW50AAAAAAUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUDCQBmAgAABQZhbW91bnQJAAIBAh5DYW4ndCB3aXRoZHJhdyBuZWdhdGl2ZSBhbW91bnQDCQBmAgAABQluZXdBbW91bnQJAAIBCQCsAgICQVVzZXIgY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBkZXBvc2l0ZWQgZnVuZHMsIFlvdXIgZGVwb3NpdCBpczogCQCkAwEJAGkCBQ1jdXJyZW50QW1vdW50AIDC1y8DCQBmAgCAwtcvCQDwBwIFBHRoaXMFC0dvdmVyblRva2VuCQACAQkArAICAh9Ob3QgZW5vdWdoIFRyb2lrYSBJbiBDb250cmFjdDogCQCkAwEJAGkCCQDwBwIFBHRoaXMFC0dvdmVyblRva2VuAIDC1y8JAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJHb3Zlcm5Ub2tlbktleQCAwtcvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyU3Rha2VkVG9rZW5LZXkFCW5ld0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgIMU3Rha2VCYWxhbmNlBRJTdGFrZUJhbGFuY2VBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyTGFzdFN0YWtlQmxvY2sFGlVzZXJMYXN0U3Rha2VCbG9ja05ld1ZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQICEkhpZ2hlc3RQdXNoQWRkcmVzcwUXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAIDC1y8FC0dvdmVyblRva2VuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQtTdGFrZWRUb2tlbgUDbmlsAWkBFldpdGhkcmF3QmlnU3Rha2VSZXdhcmQABAhXYWl0VGltZQkAaAIAoAsAAQQYTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIZX0xhc3RCaWdTdGFrZXJSZXdhcmRCbG9jawQPQmlnU3Rha2VyUmV3YXJkCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIKX0JpZ1N0YWtlcgQSVXNlckdvdmVyblRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIJX0Vhcm5pbmdzBBJMaW1pV2l0aGRyYXdSZXdhcmQACgQVVXNlckdvdmVyblRva2VuQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJHb3Zlcm5Ub2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQdTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwUYTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBlCaWdTdGFrZXJSZXdhcmRUb3RhbFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCFEJpZ1N0YWtlclJld2FyZFRvdGFsAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gEByRtYXRjaDAJAJoIAgUEdGhpcwILUHJpemVIZWlnaHQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEFByaXplSGVpZ2h0VmFsdWUDAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQAAAgULUHJpemVBbW91bnQAAAcAAAMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBQZoZWlnaHQDAwkBAiE9AgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAQLQWN0dWFsRGVsYXkEByRtYXRjaDAJAJoIAgUEdGhpcwIFRGVsYXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEEhpZ2hlc3RQdXNoVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwILSGlnaGVzdFB1c2gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEkhpZ2hlc3RQdXNoQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzBBdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcCAAUSSGlnaGVzdFB1c2hBZGRyZXNzBBNQcml6ZUhlaWdodFZhbHVlTmV3AwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwUGaGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlBApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEBmFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBQ9CaWdTdGFrZXJSZXdhcmQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEElN0YWtlQmFsYW5jZUFtb3VudAkAZQIFGUJpZ1N0YWtlclJld2FyZFRvdGFsVmFsdWUFBmFtb3VudAQSQmlnU3Rha2VyUmV3YXJkVGF4AwkAZgIAAAkAaAIJAGkCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQA6AcJAGUCAOgHCQBpAgkAaAIA6AcJAGUCBQZoZWlnaHQFHUxhc3RCaWdTdGFrZXJSZXdhcmRCbG9ja1ZhbHVlCQBoAgUSTGltaVdpdGhkcmF3UmV3YXJkAKALCQBoAgDoBwCAwtcvCQBoAgkAaQIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudADoBwkAZQIA6AcJAGkCCQBoAgDoBwkAZQIFBmhlaWdodAUdTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrVmFsdWUJAGgCBRJMaW1pV2l0aGRyYXdSZXdhcmQAoAsDCQBmAgAABQZhbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAh9DYW4ndCB3aXRoZHJhdyBuZWdhdGl2ZSBhbW91bnQgCQCkAwEJAGUCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQJAGgCAOgHAIDC1y8CBSAuLi4gCQCkAwEFBmFtb3VudAMDAwkAZgIJAGgCAOgHAIDC1y8FFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudAYJAGYCAAEFBmFtb3VudAYJAGYCAAAJAGUCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQFEkJpZ1N0YWtlclJld2FyZFRheAkAAgEJAKwCAgJcTm8gQVNJTUkgcmV3YXJkIGF2YWlsYWJsZSwgb3IgTm90IGVub3VnaCBFYXJuZWQgVHJvaWthbiBUb2tlbnMgdG8gZG8gdHJhbnNhY3Rpb24sIHlvdSBoYXZlOiAJAKQDAQkAaQIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudACAwtcvAwkAZgIFElN0YWtlQmFsYW5jZUFtb3VudAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9CaWdTdGFrZXJSZXdhcmQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIUQmlnU3Rha2VyUmV3YXJkVG90YWwFElN0YWtlQmFsYW5jZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlckdvdmVyblRva2VuS2V5CQBlAgUVVXNlckdvdmVyblRva2VuQW1vdW50BRJCaWdTdGFrZXJSZXdhcmRUYXgJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhMYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2sFBmhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MFF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQtTdGFrZWRUb2tlbgUDbmlsCQACAQJSQmFsYW5jZSBFcnJvciwgVG90YWwgQmlnIFN0YWtlcnMgY2Fubm90IGJlIG5lZ2F0aXZlLCBPcGVyYXRpb24gd29uJ3QgYmUgYXV0aG9yaXplZAFpARNIYXJ2ZXN0R292ZXJuVG9pa2VuAQZhbW91bnQEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBBJVc2VyR292ZXJuVG9rZW5LZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAglfRWFybmluZ3MEDFN0YWtlQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgxTdGFrZUJhbGFuY2UDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlckdvdmVyblRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAluZXdBbW91bnQJAGUCBQ1jdXJyZW50QW1vdW50BQZhbW91bnQDCQBmAgAABQZhbW91bnQJAAIBAh5DYW4ndCB3aXRoZHJhdyBuZWdhdGl2ZSBhbW91bnQDCQBmAgAABQluZXdBbW91bnQJAAIBCQCsAgICQVVzZXIgY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBkZXBvc2l0ZWQgZnVuZHMsIFlvdXIgZGVwb3NpdCBpczogCQCkAwEJAGkCBQ1jdXJyZW50QW1vdW50AIDC1y8JAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJHb3Zlcm5Ub2tlbktleQUJbmV3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtQcml6ZUhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAULR292ZXJuVG9rZW4FA25pbAFpAQpkZWxheXByaXplAAQJRGVsYXlEYXlzCQBoAgCgCwABBAhXYWl0VGltZQkAaAIAoAsAAQQSVXNlckdvdmVyblRva2VuS2V5CQCsAgIJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgFfCQDYBAEFC0dvdmVyblRva2VuBBhVc2VyV2FsbGV0U0dvdmVybkJhbGFuY2UJAPAHAgkBB0FkZHJlc3MBCAgFAWkGY2FsbGVyBWJ5dGVzBQtHb3Zlcm5Ub2tlbgQaQ29udHJhY3RXYWxsZXRTdGFrZUJhbGFuY2UJAPAHAgUEdGhpcwULU3Rha2VkVG9rZW4EDFN0YWtlQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgxTdGFrZUJhbGFuY2UDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLQWN0dWFsRGVsYXkEByRtYXRjaDAJAJoIAgUEdGhpcwIFRGVsYXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEFByaXplSGVpZ2h0VmFsdWUDAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQAAAgULUHJpemVBbW91bnQAAAcAAAMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBQZoZWlnaHQDAwkBAiE9AgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQSSGlnaGVzdFB1c2hBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAhJIaWdoZXN0UHVzaEFkZHJlc3MEF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlAwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwIABRJIaWdoZXN0UHVzaEFkZHJlc3MEE1ByaXplSGVpZ2h0VmFsdWVOZXcDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHBQZoZWlnaHQFEFByaXplSGVpZ2h0VmFsdWUED0FjdHVhbERlbGF5Q29zdAQHJG1hdGNoMAkAmggCBQR0aGlzAglEZWxheUNvc3QDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAoEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECHEF0dGFjaGVkIHBheW1lbnQgaXMgcmVxdWlyZWQEDURldkJveEJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIGRGV2Qm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAACCAUDcG10B2Fzc2V0SWQFC0dvdmVyblRva2VuBwMJAGYCBQtQcml6ZUFtb3VudAAABBVVc2VyR292ZXJuVG9rZW5BbW91bnQIBQNwbXQGYW1vdW50BAxEZXZCb3hBbW91bnQJAGQCBQ1EZXZCb3hCYWxhbmNlCQBpAgkAaAIIBQNwbXQGYW1vdW50AAUA6AcEDE5ld0RlbGF5Q29zdAMJAAACBQ9BY3R1YWxEZWxheUNvc3QAAACAlOvcAwkAaAIAAgUPQWN0dWFsRGVsYXlDb3N0AwkAZwIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudAUMTmV3RGVsYXlDb3N0BAhOZXdEZWxheQkAZAIFC0FjdHVhbERlbGF5BQlEZWxheURheXMJAMwIAgkBDEludGVnZXJFbnRyeQICBURlbGF5BQhOZXdEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgIJRGVsYXlDb3N0BQxOZXdEZWxheUNvc3QJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgZEZXZCb3gFDERldkJveEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MFF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlBQNuaWwJAAIBCQCsAgIJAKwCAgJJVG8gZGVsYXkgdGhlIHJlbGVhc2Ugb2YgdGhlIHJld2FyZCBPTkUgREFZIGxhdGVyIHRoYW4gZXhwZWN0ZWQsIHlvdSBuZWVkIAkApAMBBQxOZXdEZWxheUNvc3QCB1RST0lLQXMJAAIBAl5Zb3UgY2Fubm90IGRlbGF5IHRoZSByZXdhcmQgYmVmb3JlIHJld2FyZCBpcyByZWNlaXZlZCEgUGxlYXNlIHdhaXQgdW50aWwgYSByZXdhcmQgaXMgYXZhaWxhYmxlCQACAQIpQ2FuIFVzZSBvbmx5IFRyb2lrYSBUb2tlbiB0byBEZWxheSBSZXdhcmQBaQEKQ2xhaW1Qcml6ZQAEElVzZXJTdGFrZWRUb2tlbktleQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBJVc2VyTGFzdFN0YWtlQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfVXNlckxhc3RTdGFrZUJsb2NrBA1taW5TdGFrZUJsb2NrCQBoAgCgCwAHBAZtaW5yZWYAAwQXQ29udHJhY3RHb3ZUb2tlbkJhbGFuY2UJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4EGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABA1Vc2VyUHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFVVzZXJTdGFrZWRUb2tlbkFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyU3Rha2VkVG9rZW5LZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZVdpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzBAtQcml6ZUhlaWdodAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLVXNlclJlZnNOdW0JAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgVfcmVmcwQQVXNlclJlZnNOdW1WYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBQtVc2VyUmVmc051bQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMDCQAAAgULUHJpemVBbW91bnQAAAYJAGYCAIDIr6AlBRdDb250cmFjdEdvdlRva2VuQmFsYW5jZQkAAgECSU5vIHByaXplIHRvIENsYWltIG9yIE5vdCBlbm91Z2ggR292ZXJuIFRva2VuIGVuIENvbnRyYWN0IChNaW4gMTAwIFRyb2lrYSkDCQECIT0CCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFC1ByaXplV2lubmVyCQACAQI2WW91IGFyZSBub3QgdGhlIHdpbm5lciBoZW5jZSBjYW5ub3QgY2xhaW0gdGhlIHJld2FyZCAgAwMJAGYCAIDC1y8FFVVzZXJTdGFrZWRUb2tlbkFtb3VudAkAZgIFDW1pblN0YWtlQmxvY2sFF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlBwkAAgECLllvdSBoYXZlIHRvIFN0YWtlIEFTSU1JIFRva2VuIHRvIGNsYWltIHJld2FyZCADAwkAZgIFBmhlaWdodAkAZAIFC1ByaXplSGVpZ2h0BQtBY3R1YWxEZWxheQkAZwIFDVVzZXJQdXNoVmFsdWUFEEhpZ2hlc3RQdXNoVmFsdWUHAwkAZwIFEFVzZXJSZWZzTnVtVmFsdWUFBm1pbnJlZgkAzAgCCQEMSW50ZWdlckVudHJ5AgULUHJpemVXaW5uZXIFC1ByaXplQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgdGdW5kQm94AAAJAMwIAgkBDEludGVnZXJFbnRyeQICC0hpZ2hlc3RQdXNoAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFCFVzZXJQdXNoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgISSGlnaGVzdFB1c2hBZGRyZXNzAgAJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0AAAJAMwIAgkBDEludGVnZXJFbnRyeQICBURlbGF5AAAJAMwIAgkBDEludGVnZXJFbnRyeQICCURlbGF5Q29zdAAACQDMCAIJAQtTdHJpbmdFbnRyeQICCkxhc3RXaW5uZXIFC1ByaXplV2lubmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglMYXN0UHJpemUFC1ByaXplQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULUHJpemVBbW91bnQFC1N0YWtlZFRva2VuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgCAlOvcAwULR292ZXJuVG9rZW4FA25pbAkAAgEJAKwCAgkArAICAhJZb3UgaGF2ZSB0byBoYXZlICAJAKQDAQUGbWlucmVmAkcgIHJlZmVycmFscyBhbHJlYWR5IHN0YWtpbmcgZm9yIGEgbWluaW11bSBvZiAxMCBkYXlzIHRvIENsYWltIHRoZSBwcml6ZQkAAgECYVlvdSBoYXZlIHRvIGJlIHRoZSB1c2VyIHdpdGggdGhlIGhpZ2hlc3QgUHVzaCBhbmQgd2FpdCB0aWxsIGNvdW50b3duIGlzIGZpbmlzaGVkLCB0byBjbGFpbSBSZXdhcmQBaQEJQWRkbWVudG9yAQZNZW50b3IEEVVzZXJNZW50b3JBZGRyZXNzCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIHX01lbnRvcgMJAQIhPQIFBk1lbnRvcgIACQDMCAIJAQtTdHJpbmdFbnRyeQIFEVVzZXJNZW50b3JBZGRyZXNzBQZNZW50b3IFA25pbAkAAgECIE1lbnRvcidzIEFkZHJlc3MgY2Fubm90IGJlIGVtcHR5AWkBD0dldExpa2VzUGFja2FnZQINVHdpdHRlclVzZXJJZAdUd2l0dElkBBtMaWtlUGFja2FnZVRST0lLQU5Db3N0VmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwIWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQZTGlrZVBhY2thZ2VBU0lNSUNvc3RWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAhRMaWtlUGFja2FnZUFTSU1JQ29zdAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgkAkQMCCAUBaQhwYXltZW50cwAACQACAQIcQXR0YWNoZWQgcGF5bWVudCBpcyByZXF1aXJlZAMDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQtTdGFrZWRUb2tlbgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAULR292ZXJuVG9rZW4HAwkAZwIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlAwkAZwIICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BRtMaWtlUGFja2FnZVRST0lLQU5Db3N0VmFsdWUECkluZmx1ZW5jZXIJAKwCAgkArAICCQCkAwEFDVR3aXR0ZXJVc2VySWQCDF9Ud2l0dDJMaWtlXwkApAMBBQdUd2l0dElkBBFJbmZsdWVuY2VyQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzBQpJbmZsdWVuY2VyAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwkAAAIFEUluZmx1ZW5jZXJCYWxhbmNlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCkAwEFDVR3aXR0ZXJVc2VySWQCDF9Ud2l0dDJMaWtlXwkApAMBBQdUd2l0dElkCQBpAgkAaAIAXwUUTGlrZVBhY2thZ2VBU0lNSUNvc3QAZAkAzAgCCQEMSW50ZWdlckVudHJ5AgIQTGlrZVR3aXR0c0RldkJveAkAaQIJAGgCAAUFFExpa2VQYWNrYWdlQVNJTUlDb3N0AGQFA25pbAkAAgECZkNhbm5vdCBhY3F1aXJlIGEgbmV3IHBhY2thZ2UsIHRoZSBwcmlvciBsaWtlIHBhY2thZ2UgaGFzIHRvIGJlIGRyYWluZWQgdG8gYmUgYWJsZSB0byBhY3F1aXJlIGEgbmV3IG9uZQkAAgEJAKwCAgIaVFJPSUtBTiBBbW91bnQgc2hvdWxkIGJlIDoJAKQDAQkAaQIFFExpa2VQYWNrYWdlQVNJTUlDb3N0AIDC1y8JAAIBCQCsAgICGEFTSU1JIEFtb3VudCBzaG91bGQgYmUgOgkApAMBCQBpAgUWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdACAwtcvCQACAQIwUGF5bWVudHMgc2hvdWxkIGJlIGJvdGggQVNJTUkgYW5kIFRST0lLQU4gdG9rZW5zAWkBF0dldE15TGlrZWRUd2l0dHNSZXdhcmRzAQZVc2VySWQEGFVzZXJFYXJuZWRMaWtlVHdpdHRBU0lNSQQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKQDAQUGVXNlcklkAgxfTGlrZV9BbW91bnQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEHFVzZXJFYXJuZWRkQXBwUlRUd2l0dFRST0lLQU4EByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCkAwEFBlVzZXJJZAIWX1Ryb2lrYW5kQXBwX1JUX0Ftb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMDCQBnAgUYVXNlckVhcm5lZExpa2VUd2l0dEFTSU1JCQBoAgABAIDC1y8JAGcCBRxVc2VyRWFybmVkZEFwcFJUVHdpdHRUUk9JS0FOCQBoAgABAIDC1y8HCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQUGVXNlcklkAhZfVHJvaWthbmRBcHBfUlRfQW1vdW50AAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQZVc2VySWQCDF9MaWtlX0Ftb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUYVXNlckVhcm5lZExpa2VUd2l0dEFTSU1JBQtTdGFrZWRUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFHFVzZXJFYXJuZWRkQXBwUlRUd2l0dFRST0lLQU4FC0dvdmVyblRva2VuBQNuaWwJAAIBAjtNaW5pbXVtIGVhcm5pbmdzIHRvIHdpdGhkcmF3IGFyZTogMTAwIEFTSU1JIGFuZCA1MCBUcm9pa2FucwFpARVMaW5rVHdpdHRlckFjYzJXYWxsZXQBDVR3aXR0ZXJVc2VySWQEE1R3aXR0ZXJMaW5rZWRXYWxsZXQEByRtYXRjaDAJAJ0IAgUEdGhpcwkArAICBQ1Ud2l0dGVyVXNlcklkAgdfV2FsbGV0AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIETm9uZQMJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFE1R3aXR0ZXJMaW5rZWRXYWxsZXQJAAIBAjpZb3UgYWxyZWFkeSBoYXZlIHlvdXIgd2FsbGV0IGxpbmtlZCB0byB0aGUgVHdpdHRlciBhY2NvdW50AwMJAQIhPQIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUTVHdpdHRlckxpbmtlZFdhbGxldAkBAiE9AgUTVHdpdHRlckxpbmtlZFdhbGxldAIETm9uZQcJAAIBAklUaGUgd2FsbGV0IHlvdSBhcmUgdXNpbmcgaXMgbm90IHRoZSBsaW5rZWQgV2FsbGV0IHRvIHRoaXMgVHdpdHRlciBhY2NvdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUNVHdpdHRlclVzZXJJZAIHX1dhbGxldAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwA99SFzw==", "height": 2143759, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CfFCYw52uCUTyS566Hop89TasfVZsi1zdhKmPyDnL7KU Next: GWBzu7anXvdwPSDwGmCTgugKK3DccgTfCMB8bcYAMmRA Diff:
OldNewDifferences
456456 else false)
457457 then HeightTransactFundBox
458458 else 0
459- let HighestPushAddress = getStringValue(this, "HighestPushAddress")
459+ let HighestPushAddress = match getString(this, "HighestPushAddress") {
460+ case a: String =>
461+ a
462+ case _ =>
463+ ""
464+ }
460465 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
461466 then (HighestPushValue > 0)
462467 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let StakedToken = base58'Hoej8L1ezqQY4Miex4Z4J7uJ33LCdcubV3DsubGHEqWP'
55
66 let GovernToken = base58'6ZPMzZseuYoMP4ByozJpVxbugXBobwJYF22zVjW5JjN'
77
88 let LikePackageASIMICost = (1 * 100000000)
99
1010 let LikePackageTROIKANCost = (5 * 100000000)
1111
1212 @Callable(i)
1313 func DevWithdraw () = {
1414 let currentKey = toBase58String(i.caller.bytes)
1515 if ((currentKey == "3P74buHt98BnojFcaREJZtb98KDyUmZGemJ"))
1616 then {
1717 let DevBoxAmount = match getInteger(this, "DevBox") {
1818 case a: Int =>
1919 a
2020 case _ =>
2121 0
2222 }
2323 if ((0 > DevBoxAmount))
2424 then throw("Not enough balance")
2525 else [IntegerEntry("DevBox", 0), ScriptTransfer(i.caller, DevBoxAmount, GovernToken)]
2626 }
2727 else throw("You cannot withdraw as your are not the Dev.")
2828 }
2929
3030
3131
3232 @Callable(i)
3333 func WithdrawWeeklyEarning () = {
3434 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
3535 let MaxDepositer = getStringValue(this, "MaxDepositer")
3636 let UserWeeklyEarnings = (toBase58String(i.caller.bytes) + "_WeekEarning")
3737 let StakeBalance = match getInteger(this, "StakeBalance") {
3838 case a: Int =>
3939 a
4040 case _ =>
4141 0
4242 }
4343 let PrizeAmount = match getInteger(this, "FundBox") {
4444 case a: Int =>
4545 a
4646 case _ =>
4747 0
4848 }
4949 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
5050 case a: Int =>
5151 a
5252 case _ =>
5353 0
5454 }
5555 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
5656 then (PrizeAmount == 0)
5757 else false)
5858 then 0
5959 else if (if ((HeightTransactFundBox == 0))
6060 then (PrizeAmount != 0)
6161 else false)
6262 then height
6363 else if (if ((HeightTransactFundBox != 0))
6464 then (PrizeAmount != 0)
6565 else false)
6666 then HeightTransactFundBox
6767 else 0
6868 let currentKey = toBase58String(i.caller.bytes)
6969 let newAmount = match getInteger(this, UserWeeklyEarnings) {
7070 case a: Int =>
7171 a
7272 case _ =>
7373 0
7474 }
7575 if ((0 > newAmount))
7676 then throw("Can't withdraw negative amount")
7777 else if ((0 > newAmount))
7878 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((newAmount / 100000000))))
7979 else [IntegerEntry(UserWeeklyEarnings, 0), IntegerEntry("PrizeHeight", PrizeHeightValue), IntegerEntry("MaxDeposit", 0), ScriptTransfer(i.caller, newAmount, StakedToken)]
8080 }
8181
8282
8383
8484 @Callable(i)
8585 func PushReward () = {
8686 let minPushBlock = 10
8787 let minStakeBlock = (7 * 1440)
8888 let DelayAfterPush = 60
8989 let WaitTime = (1440 * 1)
9090 let minref = 3
9191 let FirstPushTimer = (7 * 1440)
9292 let userWalletGovernBalance = assetBalance(Address(i.caller.bytes), GovernToken)
9393 let pmt = if ((size(i.payments) == 1))
9494 then i.payments[0]
9595 else throw("Attached payment is required")
9696 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
9797 let UserLastPushOldValue = match getInteger(this, UserPush) {
9898 case a: Int =>
9999 a
100100 case _ =>
101101 0
102102 }
103103 let UserRefsNum = (toBase58String(i.caller.bytes) + "_refs")
104104 let UserRefsNumValue = match getInteger(this, UserRefsNum) {
105105 case a: Int =>
106106 a
107107 case _ =>
108108 0
109109 }
110110 let HighestPushValue = match getInteger(this, "HighestPush") {
111111 case a: Int =>
112112 a
113113 case _ =>
114114 0
115115 }
116116 if ((userWalletGovernBalance > pmt.amount))
117117 then if (if (((pmt.amount + UserLastPushOldValue) > HighestPushValue))
118118 then (pmt.assetId == GovernToken)
119119 else false)
120120 then {
121121 let UserLastPushBlock = (toBase58String(i.caller.bytes) + "_UserLastPushBlock")
122122 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
123123 let UserStake = (toBase58String(i.caller.bytes) + "_Staking")
124124 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
125125 let StakeBalance = match getInteger(this, "StakeBalance") {
126126 case a: Int =>
127127 a
128128 case _ =>
129129 0
130130 }
131131 let PrizeAmount = match getInteger(this, "FundBox") {
132132 case a: Int =>
133133 a
134134 case _ =>
135135 0
136136 }
137137 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
138138 case a: Int =>
139139 a
140140 case _ =>
141141 0
142142 }
143143 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
144144 then (PrizeAmount == 0)
145145 else false)
146146 then 0
147147 else if (if ((HeightTransactFundBox == 0))
148148 then (PrizeAmount != 0)
149149 else false)
150150 then height
151151 else if (if ((HeightTransactFundBox != 0))
152152 then (PrizeAmount != 0)
153153 else false)
154154 then HeightTransactFundBox
155155 else 0
156156 let ActualDelay = match getInteger(this, "Delay") {
157157 case a: Int =>
158158 a
159159 case _ =>
160160 0
161161 }
162162 let HighestPushAddress = match getInteger(this, "HighestPushAddress") {
163163 case a: Int =>
164164 a
165165 case _ =>
166166 0
167167 }
168168 let UserLastPushBlockValue = match getInteger(this, UserLastPushBlock) {
169169 case a: Int =>
170170 a
171171 case _ =>
172172 0
173173 }
174174 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
175175 case a: Int =>
176176 a
177177 case _ =>
178178 0
179179 }
180180 let UserStakeValue = match getInteger(this, UserStake) {
181181 case a: Int =>
182182 a
183183 case _ =>
184184 0
185185 }
186186 let DevBoxBalance = match getInteger(this, "DevBox") {
187187 case a: Int =>
188188 a
189189 case _ =>
190190 0
191191 }
192192 let DevBoxAmount = (DevBoxBalance + ((pmt.amount * 5) / 1000))
193193 let UserPushvalue = (pmt.amount + UserLastPushOldValue)
194194 let NewDelay = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
195195 then (HighestPushValue > 0)
196196 else false)
197197 then FirstPushTimer
198198 else (ActualDelay + DelayAfterPush)
199199 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + NewDelay) + WaitTime)))
200200 then (HighestPushValue > 0)
201201 else false)
202202 then ""
203203 else HighestPushAddress
204204 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + NewDelay) + WaitTime)))
205205 then (HighestPushValue > 0)
206206 else false)
207207 then height
208208 else PrizeHeightValue
209209 if (if ((UserPushvalue > 0))
210210 then ((height - UserLastStakeBlockValue) > minStakeBlock)
211211 else false)
212212 then if (((height - UserLastPushBlockValue) > minPushBlock))
213213 then if ((UserStakeValue > 0))
214214 then if ((UserPushvalue > HighestPushValue))
215215 then if ((PrizeAmount > 0))
216216 then if (if (if (if (((PrizeHeightValueNew + NewDelay) >= height))
217217 then true
218218 else (height >= ((PrizeHeightValueNew + NewDelay) + WaitTime)))
219219 then (HighestPushValue > 0)
220220 else false)
221221 then true
222222 else (HighestPushValue == 0))
223223 then if ((UserRefsNumValue >= minref))
224224 then [IntegerEntry(UserPush, UserPushvalue), StringEntry("HighestPushAddress", toBase58String(i.caller.bytes)), IntegerEntry("HighestPush", UserPushvalue), IntegerEntry(UserLastPushBlock, height), IntegerEntry("PrizeHeight", PrizeHeightValueNew), IntegerEntry("Delay", NewDelay), IntegerEntry("DevBox", DevBoxAmount)]
225225 else throw((("You have to have " + toString(minref)) + " referrals already staking for a minimum of 10 days, to push"))
226226 else {
227227 let txt = if ((HighestPushValue > 0))
228228 then "You cannot Push after rewarding Prize and before One day has passed after award"
229229 else "Unexpected error"
230230 throw(txt)
231231 }
232232 else throw("You cannot push before the reward is unlocked, no reward has been detected yet")
233233 else throw("Your push in troikan token, should be Higher than last Highest Push")
234234 else throw("To be able to participate in Pushing for the reward you need to Stake ASIMIs in the dApp")
235235 else throw("You have to wait 10min before you can make a new Push")
236236 else throw(("Your Push dot not comply one of the following conditions: " + "1. Positive Value for Push in Troikan Toke
237237 2. Must Staked ASIMI Token for a minimum of week "))
238238 }
239239 else throw((("Can deposit only positive amounts of Troikan Token, or Check your Wallet balance in Troika, you should have more than " + toString(HighestPushValue)) + " to push"))
240240 else throw("You do not have enough Troikan Tokens in your Wallet Balance, Please Harvest if you have earned Troikan wallet or transfer to your wallet necessary Troikan amount !")
241241 }
242242
243243
244244
245245 @Callable(i)
246246 func Stake () = {
247247 let WaitTime = (1440 * 1)
248248 let pmt = if ((size(i.payments) == 1))
249249 then i.payments[0]
250250 else throw("Attached payment is required")
251251 if (if ((pmt.amount > 0))
252252 then (pmt.assetId == StakedToken)
253253 else false)
254254 then {
255255 let GovernTokenSmartContractBalance = assetBalance(this, GovernToken)
256256 let UserAPY = (toBase58String(i.caller.bytes) + "_APY")
257257 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
258258 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
259259 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
260260 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
261261 let UserStakeTransactionsKey = (toBase58String(i.caller.bytes) + "_StakedTransactions")
262262 let AddressHeight = (toBase58String(i.caller.bytes) + "_PrizeHeight")
263263 let UserWeekEarnings = (toBase58String(i.caller.bytes) + "_WeekEarning")
264264 let UserStakeTransactions = match getInteger(this, UserStakeTransactionsKey) {
265265 case a: Int =>
266266 a
267267 case _ =>
268268 0
269269 }
270270 let MaxDepositer = getStringValue(this, "MaxDepositer")
271271 let MaxDepositBlock = match getInteger(this, "MaxDepositBlock") {
272272 case a: Int =>
273273 a
274274 case _ =>
275275 0
276276 }
277277 let MaxDeposit = match getInteger(this, "MaxDeposit") {
278278 case a: Int =>
279279 a
280280 case _ =>
281281 0
282282 }
283283 let MaxDepositerValue = if ((pmt.amount > MaxDeposit))
284284 then toBase58String(i.caller.bytes)
285285 else MaxDepositer
286286 let MaxDepositValue = if ((pmt.amount > MaxDeposit))
287287 then pmt.amount
288288 else MaxDeposit
289289 let MaxDepositBlockValue = if ((pmt.amount > MaxDeposit))
290290 then height
291291 else MaxDepositBlock
292292 let UserPushValue = match getInteger(this, UserPush) {
293293 case a: Int =>
294294 a
295295 case _ =>
296296 0
297297 }
298298 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
299299 case a: Int =>
300300 a
301301 case _ =>
302302 0
303303 }
304304 let UserLastStakeBlockNewValue = if ((UserLastStakeBlockValue == 0))
305305 then height
306306 else UserLastStakeBlockValue
307307 let NewUserStakeTransactions = (UserStakeTransactions + 1)
308308 let currentAmountStakedToken = match getInteger(this, UserStakedTokenKey) {
309309 case a: Int =>
310310 a
311311 case _ =>
312312 0
313313 }
314314 let newAmountStakedToken = (currentAmountStakedToken + pmt.amount)
315315 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
316316 let StakeBalance = match getInteger(this, "StakeBalance") {
317317 case a: Int =>
318318 a
319319 case _ =>
320320 0
321321 }
322322 let StakeBalanceAmount = (StakeBalance + pmt.amount)
323323 let PrizeAmount = match getInteger(this, "FundBox") {
324324 case a: Int =>
325325 a
326326 case _ =>
327327 0
328328 }
329329 let UserWeekEarningsValue = match getInteger(this, UserWeekEarnings) {
330330 case a: Int =>
331331 a
332332 case _ =>
333333 0
334334 }
335335 let currentAmountGovernToken = match getInteger(this, UserGovernTokenKey) {
336336 case a: Int =>
337337 a
338338 case _ =>
339339 0
340340 }
341341 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
342342 case a: Int =>
343343 a
344344 case _ =>
345345 0
346346 }
347347 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
348348 then (PrizeAmount == 0)
349349 else false)
350350 then 0
351351 else if (if ((HeightTransactFundBox == 0))
352352 then (PrizeAmount != 0)
353353 else false)
354354 then height
355355 else if (if ((HeightTransactFundBox != 0))
356356 then (PrizeAmount != 0)
357357 else false)
358358 then HeightTransactFundBox
359359 else 0
360360 let ActualDelay = match getInteger(this, "Delay") {
361361 case a: Int =>
362362 a
363363 case _ =>
364364 0
365365 }
366366 let HighestPushValue = match getInteger(this, "HighestPush") {
367367 case a: Int =>
368368 a
369369 case _ =>
370370 0
371371 }
372372 let HighestPushAddress = getStringValue(this, "HighestPushAddress")
373373 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
374374 then (HighestPushValue > 0)
375375 else false)
376376 then ""
377377 else HighestPushAddress
378378 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
379379 then (HighestPushValue > 0)
380380 else false)
381381 then height
382382 else PrizeHeightValue
383383 if ((100000000 > GovernTokenSmartContractBalance))
384384 then throw("No enough GovernToken In Contract, Please deposit GovernTokens")
385385 else {
386386 let Reward = if ((StakeBalance == 0))
387387 then 10000
388388 else if ((NewUserStakeTransactions > 10))
389389 then ((10000 * NewUserStakeTransactions) * (1 + (newAmountStakedToken / StakeBalance)))
390390 else (10000 * (1 + (newAmountStakedToken / StakeBalance)))
391391 let UserAPYValue = if ((currentAmountGovernToken > 0))
392392 then ((100 * Reward) / currentAmountGovernToken)
393393 else 0
394394 let newAmountGovernToken = (currentAmountGovernToken + Reward)
395395 [IntegerEntry(UserGovernTokenKey, newAmountGovernToken), IntegerEntry(UserStakedTokenKey, newAmountStakedToken), IntegerEntry(UserStakeTransactionsKey, NewUserStakeTransactions), IntegerEntry("StakeBalance", StakeBalanceAmount), IntegerEntry("PrizeHeight", PrizeHeightValueNew), IntegerEntry(UserAPY, UserAPYValue), IntegerEntry(UserLastStakeBlock, UserLastStakeBlockNewValue), IntegerEntry(UserPush, UserPushValue), StringEntry("MaxDepositer", MaxDepositerValue), IntegerEntry("MaxDeposit", MaxDepositValue), IntegerEntry("MaxDepositBlock", MaxDepositBlockValue), StringEntry("HighestPushAddress", HighestPushAddressValue), IntegerEntry(UserWeekEarnings, UserWeekEarningsValue), ScriptTransfer(i.caller, Reward, GovernToken)]
396396 }
397397 }
398398 else throw("Can deposit only StakeToken")
399399 }
400400
401401
402402
403403 @Callable(i)
404404 func WithdrawStakedFunds (amount) = {
405405 let WaitTime = (1440 * 1)
406406 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
407407 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
408408 let UserGovernTokenKey = ((toBase58String(i.caller.bytes) + "_") + toBase58String(GovernToken))
409409 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
410410 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
411411 case a: Int =>
412412 a
413413 case _ =>
414414 0
415415 }
416416 let StakeBalance = match getInteger(this, "StakeBalance") {
417417 case a: Int =>
418418 a
419419 case _ =>
420420 0
421421 }
422422 let PrizeAmount = match getInteger(this, "FundBox") {
423423 case a: Int =>
424424 a
425425 case _ =>
426426 0
427427 }
428428 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
429429 case a: Int =>
430430 a
431431 case _ =>
432432 0
433433 }
434434 let ActualDelay = match getInteger(this, "Delay") {
435435 case a: Int =>
436436 a
437437 case _ =>
438438 0
439439 }
440440 let HighestPushValue = match getInteger(this, "HighestPush") {
441441 case a: Int =>
442442 a
443443 case _ =>
444444 0
445445 }
446446 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
447447 then (PrizeAmount == 0)
448448 else false)
449449 then 0
450450 else if (if ((HeightTransactFundBox == 0))
451451 then (PrizeAmount != 0)
452452 else false)
453453 then height
454454 else if (if ((HeightTransactFundBox != 0))
455455 then (PrizeAmount != 0)
456456 else false)
457457 then HeightTransactFundBox
458458 else 0
459- let HighestPushAddress = getStringValue(this, "HighestPushAddress")
459+ let HighestPushAddress = match getString(this, "HighestPushAddress") {
460+ case a: String =>
461+ a
462+ case _ =>
463+ ""
464+ }
460465 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
461466 then (HighestPushValue > 0)
462467 else false)
463468 then ""
464469 else HighestPushAddress
465470 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
466471 then (HighestPushValue > 0)
467472 else false)
468473 then height
469474 else PrizeHeightValue
470475 let currentKey = toBase58String(i.caller.bytes)
471476 let currentAmount = match getInteger(this, UserStakedTokenKey) {
472477 case a: Int =>
473478 a
474479 case _ =>
475480 0
476481 }
477482 let newAmount = (currentAmount - amount)
478483 let StakeBalanceAmount = (StakeBalance - amount)
479484 let UserLastStakeBlockNewValue = if ((StakeBalanceAmount == 0))
480485 then 0
481486 else UserLastStakeBlockValue
482487 if ((0 > amount))
483488 then throw("Can't withdraw negative amount")
484489 else if ((0 > newAmount))
485490 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((currentAmount / 100000000))))
486491 else if ((100000000 > assetBalance(this, GovernToken)))
487492 then throw(("Not enough Troika In Contract: " + toString((assetBalance(this, GovernToken) / 100000000))))
488493 else [IntegerEntry(UserGovernTokenKey, 100000000), IntegerEntry(UserStakedTokenKey, newAmount), IntegerEntry("StakeBalance", StakeBalanceAmount), IntegerEntry("PrizeHeight", PrizeHeightValueNew), IntegerEntry(UserLastStakeBlock, UserLastStakeBlockNewValue), StringEntry("HighestPushAddress", HighestPushAddressValue), ScriptTransfer(i.caller, 100000000, GovernToken), ScriptTransfer(i.caller, amount, StakedToken)]
489494 }
490495
491496
492497
493498 @Callable(i)
494499 func WithdrawBigStakeReward () = {
495500 let WaitTime = (1440 * 1)
496501 let LastBigStakerRewardBlock = (toBase58String(i.caller.bytes) + "_LastBigStakerRewardBlock")
497502 let BigStakerReward = (toBase58String(i.caller.bytes) + "_BigStaker")
498503 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
499504 let LimiWithdrawReward = 10
500505 let UserGovernTokenAmount = match getInteger(this, UserGovernTokenKey) {
501506 case a: Int =>
502507 a
503508 case _ =>
504509 0
505510 }
506511 let LastBigStakerRewardBlockValue = match getInteger(this, LastBigStakerRewardBlock) {
507512 case a: Int =>
508513 a
509514 case _ =>
510515 0
511516 }
512517 let BigStakerRewardTotalValue = match getInteger(this, "BigStakerRewardTotal") {
513518 case a: Int =>
514519 a
515520 case _ =>
516521 0
517522 }
518523 let PrizeAmount = match getInteger(this, "FundBox") {
519524 case a: Int =>
520525 a
521526 case _ =>
522527 0
523528 }
524529 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
525530 case a: Int =>
526531 a
527532 case _ =>
528533 0
529534 }
530535 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
531536 then (PrizeAmount == 0)
532537 else false)
533538 then 0
534539 else if (if ((HeightTransactFundBox == 0))
535540 then (PrizeAmount != 0)
536541 else false)
537542 then height
538543 else if (if ((HeightTransactFundBox != 0))
539544 then (PrizeAmount != 0)
540545 else false)
541546 then HeightTransactFundBox
542547 else 0
543548 let ActualDelay = match getInteger(this, "Delay") {
544549 case a: Int =>
545550 a
546551 case _ =>
547552 0
548553 }
549554 let HighestPushValue = match getInteger(this, "HighestPush") {
550555 case a: Int =>
551556 a
552557 case _ =>
553558 0
554559 }
555560 let HighestPushAddress = getStringValue(this, "HighestPushAddress")
556561 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
557562 then (HighestPushValue > 0)
558563 else false)
559564 then ""
560565 else HighestPushAddress
561566 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
562567 then (HighestPushValue > 0)
563568 else false)
564569 then height
565570 else PrizeHeightValue
566571 let currentKey = toBase58String(i.caller.bytes)
567572 let amount = match getInteger(this, BigStakerReward) {
568573 case a: Int =>
569574 a
570575 case _ =>
571576 0
572577 }
573578 let StakeBalanceAmount = (BigStakerRewardTotalValue - amount)
574579 let BigStakerRewardTax = if ((0 > ((UserGovernTokenAmount / 1000) * (1000 - ((1000 * (height - LastBigStakerRewardBlockValue)) / (LimiWithdrawReward * 1440))))))
575580 then (1000 * 100000000)
576581 else ((UserGovernTokenAmount / 1000) * (1000 - ((1000 * (height - LastBigStakerRewardBlockValue)) / (LimiWithdrawReward * 1440))))
577582 if ((0 > amount))
578583 then throw(((("Can't withdraw negative amount " + toString((UserGovernTokenAmount - (1000 * 100000000)))) + " ... ") + toString(amount)))
579584 else if (if (if (((1000 * 100000000) > UserGovernTokenAmount))
580585 then true
581586 else (1 > amount))
582587 then true
583588 else (0 > (UserGovernTokenAmount - BigStakerRewardTax)))
584589 then throw(("No ASIMI reward available, or Not enough Earned Troikan Tokens to do transaction, you have: " + toString((UserGovernTokenAmount / 100000000))))
585590 else if ((StakeBalanceAmount > 0))
586591 then [IntegerEntry(BigStakerReward, 0), IntegerEntry("BigStakerRewardTotal", StakeBalanceAmount), IntegerEntry(UserGovernTokenKey, (UserGovernTokenAmount - BigStakerRewardTax)), IntegerEntry("PrizeHeight", PrizeHeightValue), IntegerEntry(LastBigStakerRewardBlock, height), StringEntry("HighestPushAddress", HighestPushAddressValue), ScriptTransfer(i.caller, amount, StakedToken)]
587592 else throw("Balance Error, Total Big Stakers cannot be negative, Operation won't be authorized")
588593 }
589594
590595
591596
592597 @Callable(i)
593598 func HarvestGovernToiken (amount) = {
594599 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
595600 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
596601 let StakeBalance = match getInteger(this, "StakeBalance") {
597602 case a: Int =>
598603 a
599604 case _ =>
600605 0
601606 }
602607 let PrizeAmount = match getInteger(this, "FundBox") {
603608 case a: Int =>
604609 a
605610 case _ =>
606611 0
607612 }
608613 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
609614 case a: Int =>
610615 a
611616 case _ =>
612617 0
613618 }
614619 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
615620 then (PrizeAmount == 0)
616621 else false)
617622 then 0
618623 else if (if ((HeightTransactFundBox == 0))
619624 then (PrizeAmount != 0)
620625 else false)
621626 then height
622627 else if (if ((HeightTransactFundBox != 0))
623628 then (PrizeAmount != 0)
624629 else false)
625630 then HeightTransactFundBox
626631 else 0
627632 let currentKey = toBase58String(i.caller.bytes)
628633 let currentAmount = match getInteger(this, UserGovernTokenKey) {
629634 case a: Int =>
630635 a
631636 case _ =>
632637 0
633638 }
634639 let newAmount = (currentAmount - amount)
635640 if ((0 > amount))
636641 then throw("Can't withdraw negative amount")
637642 else if ((0 > newAmount))
638643 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((currentAmount / 100000000))))
639644 else [IntegerEntry(UserGovernTokenKey, newAmount), IntegerEntry("PrizeHeight", PrizeHeightValue), ScriptTransfer(i.caller, amount, GovernToken)]
640645 }
641646
642647
643648
644649 @Callable(i)
645650 func delayprize () = {
646651 let DelayDays = (1440 * 1)
647652 let WaitTime = (1440 * 1)
648653 let UserGovernTokenKey = ((toBase58String(i.caller.bytes) + "_") + toBase58String(GovernToken))
649654 let UserWalletSGovernBalance = assetBalance(Address(i.caller.bytes), GovernToken)
650655 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
651656 let StakeBalance = match getInteger(this, "StakeBalance") {
652657 case a: Int =>
653658 a
654659 case _ =>
655660 0
656661 }
657662 let PrizeAmount = match getInteger(this, "FundBox") {
658663 case a: Int =>
659664 a
660665 case _ =>
661666 0
662667 }
663668 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
664669 case a: Int =>
665670 a
666671 case _ =>
667672 0
668673 }
669674 let ActualDelay = match getInteger(this, "Delay") {
670675 case a: Int =>
671676 a
672677 case _ =>
673678 0
674679 }
675680 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
676681 then (PrizeAmount == 0)
677682 else false)
678683 then 0
679684 else if (if ((HeightTransactFundBox == 0))
680685 then (PrizeAmount != 0)
681686 else false)
682687 then height
683688 else if (if ((HeightTransactFundBox != 0))
684689 then (PrizeAmount != 0)
685690 else false)
686691 then HeightTransactFundBox
687692 else 0
688693 let HighestPushValue = match getInteger(this, "HighestPush") {
689694 case a: Int =>
690695 a
691696 case _ =>
692697 0
693698 }
694699 let HighestPushAddress = getStringValue(this, "HighestPushAddress")
695700 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
696701 then (HighestPushValue > 0)
697702 else false)
698703 then ""
699704 else HighestPushAddress
700705 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
701706 then (HighestPushValue > 0)
702707 else false)
703708 then height
704709 else PrizeHeightValue
705710 let ActualDelayCost = match getInteger(this, "DelayCost") {
706711 case a: Int =>
707712 a
708713 case _ =>
709714 10
710715 }
711716 let pmt = if ((size(i.payments) == 1))
712717 then i.payments[0]
713718 else throw("Attached payment is required")
714719 let DevBoxBalance = match getInteger(this, "DevBox") {
715720 case a: Int =>
716721 a
717722 case _ =>
718723 0
719724 }
720725 if (if (isDefined(pmt.assetId))
721726 then (pmt.assetId == GovernToken)
722727 else false)
723728 then if ((PrizeAmount > 0))
724729 then {
725730 let UserGovernTokenAmount = pmt.amount
726731 let DevBoxAmount = (DevBoxBalance + ((pmt.amount * 5) / 1000))
727732 let NewDelayCost = if ((ActualDelayCost == 0))
728733 then 1000000000
729734 else (2 * ActualDelayCost)
730735 if ((UserGovernTokenAmount >= NewDelayCost))
731736 then {
732737 let NewDelay = (ActualDelay + DelayDays)
733738 [IntegerEntry("Delay", NewDelay), IntegerEntry("DelayCost", NewDelayCost), IntegerEntry("PrizeHeight", PrizeHeightValueNew), IntegerEntry("DevBox", DevBoxAmount), StringEntry("HighestPushAddress", HighestPushAddressValue)]
734739 }
735740 else throw((("To delay the release of the reward ONE DAY later than expected, you need " + toString(NewDelayCost)) + "TROIKAs"))
736741 }
737742 else throw("You cannot delay the reward before reward is received! Please wait until a reward is available")
738743 else throw("Can Use only Troika Token to Delay Reward")
739744 }
740745
741746
742747
743748 @Callable(i)
744749 func ClaimPrize () = {
745750 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
746751 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
747752 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
748753 let minStakeBlock = (1440 * 7)
749754 let minref = 3
750755 let ContractGovTokenBalance = assetBalance(this, GovernToken)
751756 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
752757 let StakeBalance = match getInteger(this, "StakeBalance") {
753758 case a: Int =>
754759 a
755760 case _ =>
756761 0
757762 }
758763 let PrizeAmount = match getInteger(this, "FundBox") {
759764 case a: Int =>
760765 a
761766 case _ =>
762767 0
763768 }
764769 let UserPushValue = match getInteger(this, UserPush) {
765770 case a: Int =>
766771 a
767772 case _ =>
768773 0
769774 }
770775 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
771776 case a: Int =>
772777 a
773778 case _ =>
774779 0
775780 }
776781 let UserStakedTokenAmount = match getInteger(this, UserStakedTokenKey) {
777782 case a: Int =>
778783 a
779784 case _ =>
780785 0
781786 }
782787 let ActualDelay = match getInteger(this, "Delay") {
783788 case a: Int =>
784789 a
785790 case _ =>
786791 0
787792 }
788793 let PrizeWinner = getStringValue(this, "HighestPushAddress")
789794 let PrizeHeight = match getInteger(this, "PrizeHeight") {
790795 case a: Int =>
791796 a
792797 case _ =>
793798 0
794799 }
795800 let HighestPushValue = match getInteger(this, "HighestPush") {
796801 case a: Int =>
797802 a
798803 case _ =>
799804 0
800805 }
801806 let UserRefsNum = (toBase58String(i.caller.bytes) + "_refs")
802807 let UserRefsNumValue = match getInteger(this, UserRefsNum) {
803808 case a: Int =>
804809 a
805810 case _ =>
806811 0
807812 }
808813 if (if ((PrizeAmount == 0))
809814 then true
810815 else (10000000000 > ContractGovTokenBalance))
811816 then throw("No prize to Claim or Not enough Govern Token en Contract (Min 100 Troika)")
812817 else if ((toBase58String(i.caller.bytes) != PrizeWinner))
813818 then throw("You are not the winner hence cannot claim the reward ")
814819 else if (if ((100000000 > UserStakedTokenAmount))
815820 then (minStakeBlock > UserLastStakeBlockValue)
816821 else false)
817822 then throw("You have to Stake ASIMI Token to claim reward ")
818823 else if (if ((height > (PrizeHeight + ActualDelay)))
819824 then (UserPushValue >= HighestPushValue)
820825 else false)
821826 then if ((UserRefsNumValue >= minref))
822827 then [IntegerEntry(PrizeWinner, PrizeAmount), IntegerEntry("FundBox", 0), IntegerEntry("HighestPush", 0), IntegerEntry(UserPush, 0), StringEntry("HighestPushAddress", ""), IntegerEntry("PrizeHeight", 0), IntegerEntry("Delay", 0), IntegerEntry("DelayCost", 0), StringEntry("LastWinner", PrizeWinner), IntegerEntry("LastPrize", PrizeAmount), ScriptTransfer(i.caller, PrizeAmount, StakedToken), ScriptTransfer(i.caller, 1000000000, GovernToken)]
823828 else throw((("You have to have " + toString(minref)) + " referrals already staking for a minimum of 10 days to Claim the prize"))
824829 else throw("You have to be the user with the highest Push and wait till countown is finished, to claim Reward")
825830 }
826831
827832
828833
829834 @Callable(i)
830835 func Addmentor (Mentor) = {
831836 let UserMentorAddress = (toBase58String(i.caller.bytes) + "_Mentor")
832837 if ((Mentor != ""))
833838 then [StringEntry(UserMentorAddress, Mentor)]
834839 else throw("Mentor's Address cannot be empty")
835840 }
836841
837842
838843
839844 @Callable(i)
840845 func GetLikesPackage (TwitterUserId,TwittId) = {
841846 let LikePackageTROIKANCostValue = match getInteger(this, "LikePackageTROIKANCost") {
842847 case a: Int =>
843848 a
844849 case _ =>
845850 0
846851 }
847852 let LikePackageASIMICostValue = match getInteger(this, "LikePackageASIMICost") {
848853 case a: Int =>
849854 a
850855 case _ =>
851856 0
852857 }
853858 let pmt = if ((size(i.payments) == 2))
854859 then i.payments[0]
855860 else throw("Attached payment is required")
856861 if (if ((i.payments[0].assetId == StakedToken))
857862 then (i.payments[1].assetId == GovernToken)
858863 else false)
859864 then if ((i.payments[0].amount >= LikePackageASIMICostValue))
860865 then if ((i.payments[1].amount >= LikePackageTROIKANCostValue))
861866 then {
862867 let Influencer = ((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId))
863868 let InfluencerBalance = match getInteger(this, Influencer) {
864869 case a: Int =>
865870 a
866871 case _ =>
867872 0
868873 }
869874 if ((InfluencerBalance == 0))
870875 then [IntegerEntry(((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId)), ((95 * LikePackageASIMICost) / 100)), IntegerEntry("LikeTwittsDevBox", ((5 * LikePackageASIMICost) / 100))]
871876 else throw("Cannot acquire a new package, the prior like package has to be drained to be able to acquire a new one")
872877 }
873878 else throw(("TROIKAN Amount should be :" + toString((LikePackageASIMICost / 100000000))))
874879 else throw(("ASIMI Amount should be :" + toString((LikePackageTROIKANCost / 100000000))))
875880 else throw("Payments should be both ASIMI and TROIKAN tokens")
876881 }
877882
878883
879884
880885 @Callable(i)
881886 func GetMyLikedTwittsRewards (UserId) = {
882887 let UserEarnedLikeTwittASIMI = match getInteger(this, (toString(UserId) + "_Like_Amount")) {
883888 case a: Int =>
884889 a
885890 case _ =>
886891 0
887892 }
888893 let UserEarneddAppRTTwittTROIKAN = match getInteger(this, (toString(UserId) + "_TroikandApp_RT_Amount")) {
889894 case a: Int =>
890895 a
891896 case _ =>
892897 0
893898 }
894899 if (if ((UserEarnedLikeTwittASIMI >= (1 * 100000000)))
895900 then (UserEarneddAppRTTwittTROIKAN >= (1 * 100000000))
896901 else false)
897902 then [IntegerEntry((toString(UserId) + "_TroikandApp_RT_Amount"), 0), IntegerEntry((toString(UserId) + "_Like_Amount"), 0), ScriptTransfer(i.caller, UserEarnedLikeTwittASIMI, StakedToken), ScriptTransfer(i.caller, UserEarneddAppRTTwittTROIKAN, GovernToken)]
898903 else throw("Minimum earnings to withdraw are: 100 ASIMI and 50 Troikans")
899904 }
900905
901906
902907
903908 @Callable(i)
904909 func LinkTwitterAcc2Wallet (TwitterUserId) = {
905910 let TwitterLinkedWallet = match getString(this, (TwitterUserId + "_Wallet")) {
906911 case a: String =>
907912 a
908913 case _ =>
909914 "None"
910915 }
911916 if ((toBase58String(i.caller.bytes) == TwitterLinkedWallet))
912917 then throw("You already have your wallet linked to the Twitter account")
913918 else if (if ((toBase58String(i.caller.bytes) != TwitterLinkedWallet))
914919 then (TwitterLinkedWallet != "None")
915920 else false)
916921 then throw("The wallet you are using is not the linked Wallet to this Twitter account")
917922 else [StringEntry((TwitterUserId + "_Wallet"), toBase58String(i.caller.bytes))]
918923 }
919924
920925

github/deemru/w8io/026f985 
82.35 ms