tx · EivmKMNW77KNjnXFmVvugLjkvXtsjo8uyTjZ4Fmhk8oy

3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK:  -0.02500000 Waves

2022.07.19 19:38 [2146884] smart account 3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK > SELF 0.00000000 Waves

{ "type": 13, "id": "EivmKMNW77KNjnXFmVvugLjkvXtsjo8uyTjZ4Fmhk8oy", "fee": 2500000, "feeAssetId": null, "timestamp": 1658248627540, "version": 2, "chainId": 84, "sender": "3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK", "senderPublicKey": "AHY8zupoYc6HPJ5fh1gQiGE9bNZSeifFbcQQ89okxVug", "proofs": [ "LzyQV3Xa3Uv66L9oLkGu5ybxBFd7xdReZKuCUvvFpjwGKjAuUbHSMRRp5a6j8iZN3B7VQuVvp3WHPf3r1X2ycmM" ], "script": "base64:BgI1CAISABIAEgASABIDCgEBEgASAwoBARIAEgASAwoBCBIECgIBARIECgIBARIDCgEIEgMKAQgDAAtTdGFrZWRUb2tlbgEg+a5dhaqgwfNcHhVklvUuRcimKrmAG+DKV13AJarHD1AAC0dvdmVyblRva2VuASABbIXC10DGLlfEc7PFC2dO3zpcxegcWHrOz/9RkZaZLQAJZEFwcEFkbWluAiMzTXUzbnd4ekd6ZVFCR3hDS0x5SmNTREttUmlDZWE5RlFTSg4BaQELRGV2V2l0aGRyYXcABApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQAAAgUKY3VycmVudEtleQUJZEFwcEFkbWluBAxEZXZCb3hBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIGRGV2Qm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwkAZgIAAAUMRGV2Qm94QW1vdW50CQACAQISTm90IGVub3VnaCBiYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgZEZXZCb3gAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDERldkJveEFtb3VudAULR292ZXJuVG9rZW4FA25pbAkAAgECLFlvdSBjYW5ub3Qgd2l0aGRyYXcgYXMgeW91ciBhcmUgbm90IHRoZSBEZXYuAWkBFVdpdGhkcmF3V2Vla2x5RWFybmluZwAEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxNYXhEZXBvc2l0ZXIEByRtYXRjaDAJAJ0IAgUEdGhpcwIMTWF4RGVwb3NpdGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABBJVc2VyV2Vla2x5RWFybmluZ3MJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgxfV2Vla0Vhcm5pbmcEDFN0YWtlQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgxTdGFrZUJhbGFuY2UDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECW5ld0Ftb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyV2Vla2x5RWFybmluZ3MDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAADCQBmAgAABQluZXdBbW91bnQJAAIBAh5DYW4ndCB3aXRoZHJhdyBuZWdhdGl2ZSBhbW91bnQDCQBmAgAABQluZXdBbW91bnQJAAIBCQCsAgICQVVzZXIgY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBkZXBvc2l0ZWQgZnVuZHMsIFlvdXIgZGVwb3NpdCBpczogCQCkAwEJAGkCBQluZXdBbW91bnQAgMLXLwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlcldlZWtseUVhcm5pbmdzAAAJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpNYXhEZXBvc2l0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQluZXdBbW91bnQFC1N0YWtlZFRva2VuBQNuaWwBaQEKUHVzaFJld2FyZAAEDG1pblB1c2hCbG9jawAKBA1taW5TdGFrZUJsb2NrCQBoAgAHAKALBA5EZWxheUFmdGVyUHVzaAA8BAhXYWl0VGltZQkAaAIAoAsAAQQGbWlucmVmAAMEDkZpcnN0UHVzaFRpbWVyCQBoAgAHAKALBBd1c2VyV2FsbGV0R292ZXJuQmFsYW5jZQkA8AcCCQEHQWRkcmVzcwEICAUBaQZjYWxsZXIFYnl0ZXMFC0dvdmVyblRva2VuBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBRVc2VyTGFzdFB1c2hPbGRWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBQhVc2VyUHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLVXNlclJlZnNOdW0JAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgVfcmVmcwQQVXNlclJlZnNOdW1WYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBQtVc2VyUmVmc051bQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMJAGYCBRd1c2VyV2FsbGV0R292ZXJuQmFsYW5jZQgFA3BtdAZhbW91bnQDAwkAZgIJAGQCCAUDcG10BmFtb3VudAUUVXNlckxhc3RQdXNoT2xkVmFsdWUFEEhpZ2hlc3RQdXNoVmFsdWUJAAACCAUDcG10B2Fzc2V0SWQFC0dvdmVyblRva2VuBwQRVXNlckxhc3RQdXNoQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhJfVXNlckxhc3RQdXNoQmxvY2sEElVzZXJMYXN0U3Rha2VCbG9jawkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCE19Vc2VyTGFzdFN0YWtlQmxvY2sECVVzZXJTdGFrZQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBBpDb250cmFjdFdhbGxldFN0YWtlQmFsYW5jZQkA8AcCBQR0aGlzBQtTdGFrZWRUb2tlbgQMU3Rha2VCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMCDFN0YWtlQmFsYW5jZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLUHJpemVBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIHRnVuZEJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJIaWdoZXN0UHVzaEFkZHJlc3MEByRtYXRjaDAJAJoIAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBZVc2VyTGFzdFB1c2hCbG9ja1ZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFEVVzZXJMYXN0UHVzaEJsb2NrAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEDlVzZXJTdGFrZVZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCVVzZXJTdGFrZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQNRGV2Qm94QmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgZEZXZCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEDERldkJveEFtb3VudAkAZAIFDURldkJveEJhbGFuY2UJAGkCCQBoAggFA3BtdAZhbW91bnQABQDoBwQNVXNlclB1c2h2YWx1ZQkAZAIIBQNwbXQGYW1vdW50BRRVc2VyTGFzdFB1c2hPbGRWYWx1ZQQITmV3RGVsYXkDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHBQ5GaXJzdFB1c2hUaW1lcgkAZAIFC0FjdHVhbERlbGF5BQ5EZWxheUFmdGVyUHVzaAQXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQhOZXdEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHAgAFEkhpZ2hlc3RQdXNoQWRkcmVzcwQTUHJpemVIZWlnaHRWYWx1ZU5ldwMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFCE5ld0RlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFBmhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQMDCQBmAgUNVXNlclB1c2h2YWx1ZQAACQBmAgkAZQIFBmhlaWdodAUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUFDW1pblN0YWtlQmxvY2sHAwkAZgIJAGUCBQZoZWlnaHQFFlVzZXJMYXN0UHVzaEJsb2NrVmFsdWUFDG1pblB1c2hCbG9jawMJAGYCBQ5Vc2VyU3Rha2VWYWx1ZQAAAwkAZgIFDVVzZXJQdXNodmFsdWUFEEhpZ2hlc3RQdXNoVmFsdWUDCQBmAgULUHJpemVBbW91bnQAAAMDAwMJAGcCCQBkAgUTUHJpemVIZWlnaHRWYWx1ZU5ldwUITmV3RGVsYXkFBmhlaWdodAYJAGcCBQZoZWlnaHQJAGQCCQBkAgUTUHJpemVIZWlnaHRWYWx1ZU5ldwUITmV3RGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwYJAAACBRBIaWdoZXN0UHVzaFZhbHVlAAADCQBnAgUQVXNlclJlZnNOdW1WYWx1ZQUGbWlucmVmCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhVc2VyUHVzaAUNVXNlclB1c2h2YWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgILSGlnaGVzdFB1c2gFDVVzZXJQdXNodmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEVVzZXJMYXN0UHVzaEJsb2NrBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgVEZWxheQUITmV3RGVsYXkJAMwIAgkBDEludGVnZXJFbnRyeQICBkRldkJveAUMRGV2Qm94QW1vdW50BQNuaWwJAAIBCQCsAgIJAKwCAgIRWW91IGhhdmUgdG8gaGF2ZSAJAKQDAQUGbWlucmVmAjwgcmVmZXJyYWxzIGFscmVhZHkgc3Rha2luZyBmb3IgYSBtaW5pbXVtIG9mIDEwIGRheXMsIHRvIHB1c2gEA3R4dAMJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAACT1lvdSBjYW5ub3QgUHVzaCBhZnRlciByZXdhcmRpbmcgUHJpemUgYW5kIGJlZm9yZSBPbmUgZGF5IGhhcyBwYXNzZWQgYWZ0ZXIgYXdhcmQCEFVuZXhwZWN0ZWQgZXJyb3IJAAIBBQN0eHQJAAIBAk5Zb3UgY2Fubm90IHB1c2ggYmVmb3JlIHRoZSByZXdhcmQgaXMgdW5sb2NrZWQsIG5vIHJld2FyZCBoYXMgYmVlbiBkZXRlY3RlZCB5ZXQJAAIBAkNZb3VyIHB1c2ggaW4gdHJvaWthbiB0b2tlbiwgc2hvdWxkIGJlIEhpZ2hlciB0aGFuIGxhc3QgSGlnaGVzdCBQdXNoCQACAQJYVG8gYmUgYWJsZSB0byBwYXJ0aWNpcGF0ZSBpbiBQdXNoaW5nIGZvciB0aGUgcmV3YXJkIHlvdSBuZWVkIHRvIFN0YWtlIEFTSU1JcyBpbiB0aGUgZEFwcAkAAgECNVlvdSBoYXZlIHRvIHdhaXQgMTBtaW4gYmVmb3JlIHlvdSBjYW4gbWFrZSBhIG5ldyBQdXNoCQACAQkArAICAjpZb3VyIFB1c2ggZG90IG5vdCBjb21wbHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogAl0xLiBQb3NpdGl2ZSBWYWx1ZSBmb3IgUHVzaCBpbiBUcm9pa2FuIFRva2UKIDIuIE11c3QgU3Rha2VkIEFTSU1JIFRva2VuIGZvciBhIG1pbmltdW0gb2Ygd2VlayAJAAIBCQCsAgIJAKwCAgJ2Q2FuIGRlcG9zaXQgb25seSBwb3NpdGl2ZSBhbW91bnRzIG9mIFRyb2lrYW4gVG9rZW4sIG9yIENoZWNrIHlvdXIgV2FsbGV0IGJhbGFuY2UgaW4gVHJvaWthLCB5b3Ugc2hvdWxkIGhhdmUgbW9yZSB0aGFuIAkApAMBBRBIaWdoZXN0UHVzaFZhbHVlAgggdG8gcHVzaAkAAgECpAFZb3UgZG8gbm90IGhhdmUgZW5vdWdoIFRyb2lrYW4gVG9rZW5zIGluIHlvdXIgV2FsbGV0IEJhbGFuY2UsIFBsZWFzZSBIYXJ2ZXN0IGlmIHlvdSBoYXZlIGVhcm5lZCBUcm9pa2FuIHdhbGxldCBvciB0cmFuc2ZlciB0byB5b3VyIHdhbGxldCBuZWNlc3NhcnkgVHJvaWthbiBhbW91bnQgIQFpAQVTdGFrZQAECFdhaXRUaW1lCQBoAgCgCwABBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkAwMJAGYCCAUDcG10BmFtb3VudAAACQAAAggFA3BtdAdhc3NldElkBQtTdGFrZWRUb2tlbgcEH0dvdmVyblRva2VuU21hcnRDb250cmFjdEJhbGFuY2UJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4EB1VzZXJBUFkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgRfQVBZBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBJVc2VyU3Rha2VkVG9rZW5LZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAghfU3Rha2luZwQSVXNlckdvdmVyblRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIJX0Vhcm5pbmdzBBJVc2VyTGFzdFN0YWtlQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfVXNlckxhc3RTdGFrZUJsb2NrBBhVc2VyU3Rha2VUcmFuc2FjdGlvbnNLZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfU3Rha2VkVHJhbnNhY3Rpb25zBA1BZGRyZXNzSGVpZ2h0CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIMX1ByaXplSGVpZ2h0BBBVc2VyV2Vla0Vhcm5pbmdzCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIMX1dlZWtFYXJuaW5nBBVVc2VyU3Rha2VUcmFuc2FjdGlvbnMEByRtYXRjaDAJAJoIAgUEdGhpcwUYVXNlclN0YWtlVHJhbnNhY3Rpb25zS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAxNYXhEZXBvc2l0ZXIEByRtYXRjaDAJAJ0IAgUEdGhpcwIMTWF4RGVwb3NpdGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABA9NYXhEZXBvc2l0QmxvY2sEByRtYXRjaDAJAJoIAgUEdGhpcwIPTWF4RGVwb3NpdEJsb2NrAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABApNYXhEZXBvc2l0BAckbWF0Y2gwCQCaCAIFBHRoaXMCCk1heERlcG9zaXQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEU1heERlcG9zaXRlclZhbHVlAwkAZgIIBQNwbXQGYW1vdW50BQpNYXhEZXBvc2l0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFDE1heERlcG9zaXRlcgQPTWF4RGVwb3NpdFZhbHVlAwkAZgIIBQNwbXQGYW1vdW50BQpNYXhEZXBvc2l0CAUDcG10BmFtb3VudAUKTWF4RGVwb3NpdAQUTWF4RGVwb3NpdEJsb2NrVmFsdWUDCQBmAggFA3BtdAZhbW91bnQFCk1heERlcG9zaXQFBmhlaWdodAUPTWF4RGVwb3NpdEJsb2NrBA1Vc2VyUHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEGlVzZXJMYXN0U3Rha2VCbG9ja05ld1ZhbHVlAwkAAAIFF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlAAAFBmhlaWdodAUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUEGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwkAZAIFFVVzZXJTdGFrZVRyYW5zYWN0aW9ucwABBBhjdXJyZW50QW1vdW50U3Rha2VkVG9rZW4EByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlclN0YWtlZFRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBRuZXdBbW91bnRTdGFrZWRUb2tlbgkAZAIFGGN1cnJlbnRBbW91bnRTdGFrZWRUb2tlbggFA3BtdAZhbW91bnQEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJTdGFrZUJhbGFuY2VBbW91bnQJAGQCBQxTdGFrZUJhbGFuY2UIBQNwbXQGYW1vdW50BAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVVc2VyV2Vla0Vhcm5pbmdzVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwUQVXNlcldlZWtFYXJuaW5ncwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQYY3VycmVudEFtb3VudEdvdmVyblRva2VuBAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJHb3Zlcm5Ub2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBIaWdoZXN0UHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCC0hpZ2hlc3RQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJIaWdoZXN0UHVzaEFkZHJlc3MEByRtYXRjaDAJAJ0IAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABBdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcCAAUSSGlnaGVzdFB1c2hBZGRyZXNzBBNQcml6ZUhlaWdodFZhbHVlTmV3AwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwUGaGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlAwkAZgIAgMLXLwUfR292ZXJuVG9rZW5TbWFydENvbnRyYWN0QmFsYW5jZQkAAgECPk5vIGVub3VnaCBHb3Zlcm5Ub2tlbiBJbiBDb250cmFjdCwgUGxlYXNlIGRlcG9zaXQgR292ZXJuVG9rZW5zBAZSZXdhcmQDCQAAAgUMU3Rha2VCYWxhbmNlAAAAkE4DCQBmAgUYTmV3VXNlclN0YWtlVHJhbnNhY3Rpb25zAAoJAGgCCQBoAgCQTgUYTmV3VXNlclN0YWtlVHJhbnNhY3Rpb25zCQBkAgABCQBpAgUUbmV3QW1vdW50U3Rha2VkVG9rZW4FDFN0YWtlQmFsYW5jZQkAaAIAkE4JAGQCAAEJAGkCBRRuZXdBbW91bnRTdGFrZWRUb2tlbgUMU3Rha2VCYWxhbmNlBAxVc2VyQVBZVmFsdWUDCQBmAgUYY3VycmVudEFtb3VudEdvdmVyblRva2VuAAAJAGkCCQBoAgBkBQZSZXdhcmQFGGN1cnJlbnRBbW91bnRHb3Zlcm5Ub2tlbgAABBRuZXdBbW91bnRHb3Zlcm5Ub2tlbgkAZAIFGGN1cnJlbnRBbW91bnRHb3Zlcm5Ub2tlbgUGUmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyR292ZXJuVG9rZW5LZXkFFG5ld0Ftb3VudEdvdmVyblRva2VuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyU3Rha2VkVG9rZW5LZXkFFG5ld0Ftb3VudFN0YWtlZFRva2VuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhVc2VyU3Rha2VUcmFuc2FjdGlvbnNLZXkFGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgIMU3Rha2VCYWxhbmNlBRJTdGFrZUJhbGFuY2VBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdVc2VyQVBZBQxVc2VyQVBZVmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJMYXN0U3Rha2VCbG9jawUaVXNlckxhc3RTdGFrZUJsb2NrTmV3VmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFCFVzZXJQdXNoBQ1Vc2VyUHVzaFZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQICDE1heERlcG9zaXRlcgURTWF4RGVwb3NpdGVyVmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQICCk1heERlcG9zaXQFD01heERlcG9zaXRWYWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIPTWF4RGVwb3NpdEJsb2NrBRRNYXhEZXBvc2l0QmxvY2tWYWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MFF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBVc2VyV2Vla0Vhcm5pbmdzBRVVc2VyV2Vla0Vhcm5pbmdzVmFsdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZSZXdhcmQFC0dvdmVyblRva2VuBQNuaWwJAAIBAhtDYW4gZGVwb3NpdCBvbmx5IFN0YWtlVG9rZW4BaQETV2l0aGRyYXdTdGFrZWRGdW5kcwEGYW1vdW50BAhXYWl0VGltZQkAaAIAoAsAAQQSVXNlckxhc3RTdGFrZUJsb2NrCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwITX1VzZXJMYXN0U3Rha2VCbG9jawQSVXNlclN0YWtlZFRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIIX1N0YWtpbmcEElVzZXJHb3Zlcm5Ub2tlbktleQkArAICCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIBXwkA2AQBBQtHb3Zlcm5Ub2tlbgQaQ29udHJhY3RXYWxsZXRTdGFrZUJhbGFuY2UJAPAHAgUEdGhpcwULU3Rha2VkVG9rZW4EF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJMYXN0U3Rha2VCbG9jawMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQMU3Rha2VCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMCDFN0YWtlQmFsYW5jZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLUHJpemVBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIHRnVuZEJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtBY3R1YWxEZWxheQQHJG1hdGNoMAkAmggCBQR0aGlzAgVEZWxheQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABBJIaWdoZXN0UHVzaEFkZHJlc3MEByRtYXRjaDAJAJ0IAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABBdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcCAAUSSGlnaGVzdFB1c2hBZGRyZXNzBBNQcml6ZUhlaWdodFZhbHVlTmV3AwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwUGaGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlBApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlclN0YWtlZFRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAluZXdBbW91bnQJAGUCBQ1jdXJyZW50QW1vdW50BQZhbW91bnQEElN0YWtlQmFsYW5jZUFtb3VudAkAZQIFDFN0YWtlQmFsYW5jZQUGYW1vdW50BBpVc2VyTGFzdFN0YWtlQmxvY2tOZXdWYWx1ZQMJAAACBRJTdGFrZUJhbGFuY2VBbW91bnQAAAAABRdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQMJAGYCAAAFBmFtb3VudAkAAgECHkNhbid0IHdpdGhkcmF3IG5lZ2F0aXZlIGFtb3VudAMJAGYCAAAFCW5ld0Ftb3VudAkAAgEJAKwCAgJBVXNlciBjYW5ub3Qgd2l0aGRyYXcgbW9yZSB0aGFuIGRlcG9zaXRlZCBmdW5kcywgWW91ciBkZXBvc2l0IGlzOiAJAKQDAQkAaQIFDWN1cnJlbnRBbW91bnQAgMLXLwMJAGYCAIDC1y8JAPAHAgUEdGhpcwULR292ZXJuVG9rZW4JAAIBCQCsAgICH05vdCBlbm91Z2ggVHJvaWthIEluIENvbnRyYWN0OiAJAKQDAQkAaQIJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4AgMLXLwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlckdvdmVyblRva2VuS2V5AIDC1y8JAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJTdGFrZWRUb2tlbktleQUJbmV3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxTdGFrZUJhbGFuY2UFElN0YWtlQmFsYW5jZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQFE1ByaXplSGVpZ2h0VmFsdWVOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJMYXN0U3Rha2VCbG9jawUaVXNlckxhc3RTdGFrZUJsb2NrTmV3VmFsdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgISSGlnaGVzdFB1c2hBZGRyZXNzBRdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAgMLXLwULR292ZXJuVG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFC1N0YWtlZFRva2VuBQNuaWwBaQEWV2l0aGRyYXdCaWdTdGFrZVJld2FyZAAECFdhaXRUaW1lCQBoAgCgCwABBBhMYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhlfTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrBA9CaWdTdGFrZXJSZXdhcmQJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgpfQmlnU3Rha2VyBBJVc2VyR292ZXJuVG9rZW5LZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAglfRWFybmluZ3MEEkxpbWlXaXRoZHJhd1Jld2FyZAAKBBVVc2VyR292ZXJuVG9rZW5BbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlckdvdmVyblRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABB1MYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRhMYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEGUJpZ1N0YWtlclJld2FyZFRvdGFsVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwIUQmlnU3Rha2VyUmV3YXJkVG90YWwDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABAtBY3R1YWxEZWxheQQHJG1hdGNoMAkAmggCBQR0aGlzAgVEZWxheQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQSSGlnaGVzdFB1c2hBZGRyZXNzBAckbWF0Y2gwCQCdCAIFBHRoaXMCEkhpZ2hlc3RQdXNoQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAQXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHAgAFEkhpZ2hlc3RQdXNoQWRkcmVzcwQTUHJpemVIZWlnaHRWYWx1ZU5ldwMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFBmhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAZhbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUPQmlnU3Rha2VyUmV3YXJkAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJTdGFrZUJhbGFuY2VBbW91bnQJAGUCBRlCaWdTdGFrZXJSZXdhcmRUb3RhbFZhbHVlBQZhbW91bnQEEkJpZ1N0YWtlclJld2FyZFRheAMJAGYCAAAJAGgCCQBpAgUVVXNlckdvdmVyblRva2VuQW1vdW50AOgHCQBlAgDoBwkAaQIJAGgCAOgHCQBlAgUGaGVpZ2h0BR1MYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2tWYWx1ZQkAaAIFEkxpbWlXaXRoZHJhd1Jld2FyZACgCwkAaAIA6AcAgMLXLwkAaAIJAGkCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQA6AcJAGUCAOgHCQBpAgkAaAIA6AcJAGUCBQZoZWlnaHQFHUxhc3RCaWdTdGFrZXJSZXdhcmRCbG9ja1ZhbHVlCQBoAgUSTGltaVdpdGhkcmF3UmV3YXJkAKALAwkAZgIAAAUGYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIfQ2FuJ3Qgd2l0aGRyYXcgbmVnYXRpdmUgYW1vdW50IAkApAMBCQBlAgUVVXNlckdvdmVyblRva2VuQW1vdW50CQBoAgDoBwCAwtcvAgUgLi4uIAkApAMBBQZhbW91bnQDAwMJAGYCCQBoAgDoBwCAwtcvBRVVc2VyR292ZXJuVG9rZW5BbW91bnQGCQBmAgABBQZhbW91bnQGCQBmAgAACQBlAgUVVXNlckdvdmVyblRva2VuQW1vdW50BRJCaWdTdGFrZXJSZXdhcmRUYXgJAAIBCQCsAgICXE5vIEFTSU1JIHJld2FyZCBhdmFpbGFibGUsIG9yIE5vdCBlbm91Z2ggRWFybmVkIFRyb2lrYW4gVG9rZW5zIHRvIGRvIHRyYW5zYWN0aW9uLCB5b3UgaGF2ZTogCQCkAwEJAGkCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQAgMLXLwMJAGYCBRJTdGFrZUJhbGFuY2VBbW91bnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPQmlnU3Rha2VyUmV3YXJkAAAJAMwIAgkBDEludGVnZXJFbnRyeQICFEJpZ1N0YWtlclJld2FyZFRvdGFsBRJTdGFrZUJhbGFuY2VBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJHb3Zlcm5Ub2tlbktleQkAZQIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudAUSQmlnU3Rha2VyUmV3YXJkVGF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtQcml6ZUhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgISSGlnaGVzdFB1c2hBZGRyZXNzBRdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAULU3Rha2VkVG9rZW4FA25pbAkAAgECUkJhbGFuY2UgRXJyb3IsIFRvdGFsIEJpZyBTdGFrZXJzIGNhbm5vdCBiZSBuZWdhdGl2ZSwgT3BlcmF0aW9uIHdvbid0IGJlIGF1dGhvcml6ZWQBaQETSGFydmVzdEdvdmVyblRvaWtlbgEGYW1vdW50BBpDb250cmFjdFdhbGxldFN0YWtlQmFsYW5jZQkA8AcCBQR0aGlzBQtTdGFrZWRUb2tlbgQSVXNlckdvdmVyblRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIJX0Vhcm5pbmdzBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gEByRtYXRjaDAJAJoIAgUEdGhpcwILUHJpemVIZWlnaHQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEFByaXplSGVpZ2h0VmFsdWUDAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQAAAgULUHJpemVBbW91bnQAAAcAAAMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBQZoZWlnaHQDAwkBAiE9AgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJHb3Zlcm5Ub2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQJbmV3QW1vdW50CQBlAgUNY3VycmVudEFtb3VudAUGYW1vdW50AwkAZgIAAAUGYW1vdW50CQACAQIeQ2FuJ3Qgd2l0aGRyYXcgbmVnYXRpdmUgYW1vdW50AwkAZgIAAAUJbmV3QW1vdW50CQACAQkArAICAkFVc2VyIGNhbm5vdCB3aXRoZHJhdyBtb3JlIHRoYW4gZGVwb3NpdGVkIGZ1bmRzLCBZb3VyIGRlcG9zaXQgaXM6IAkApAMBCQBpAgUNY3VycmVudEFtb3VudACAwtcvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyR292ZXJuVG9rZW5LZXkFCW5ld0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQFEFByaXplSGVpZ2h0VmFsdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFC0dvdmVyblRva2VuBQNuaWwBaQEKZGVsYXlwcml6ZQAECURlbGF5RGF5cwkAaAIAoAsAAQQIV2FpdFRpbWUJAGgCAKALAAEEElVzZXJHb3Zlcm5Ub2tlbktleQkArAICCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIBXwkA2AQBBQtHb3Zlcm5Ub2tlbgQYVXNlcldhbGxldFNHb3Zlcm5CYWxhbmNlCQDwBwIJAQdBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwULR292ZXJuVG9rZW4EGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gEByRtYXRjaDAJAJoIAgUEdGhpcwILUHJpemVIZWlnaHQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEEEhpZ2hlc3RQdXNoVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwILSGlnaGVzdFB1c2gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEkhpZ2hlc3RQdXNoQWRkcmVzcwQHJG1hdGNoMAkAnQgCBQR0aGlzAhJIaWdoZXN0UHVzaEFkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgAEF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlAwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwIABRJIaWdoZXN0UHVzaEFkZHJlc3MEE1ByaXplSGVpZ2h0VmFsdWVOZXcDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHBQZoZWlnaHQFEFByaXplSGVpZ2h0VmFsdWUED0FjdHVhbERlbGF5Q29zdAQHJG1hdGNoMAkAmggCBQR0aGlzAglEZWxheUNvc3QDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAoEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECHEF0dGFjaGVkIHBheW1lbnQgaXMgcmVxdWlyZWQEDURldkJveEJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIGRGV2Qm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAACCAUDcG10B2Fzc2V0SWQFC0dvdmVyblRva2VuBwMJAGYCBQtQcml6ZUFtb3VudAAABBVVc2VyR292ZXJuVG9rZW5BbW91bnQIBQNwbXQGYW1vdW50BAxEZXZCb3hBbW91bnQJAGQCBQ1EZXZCb3hCYWxhbmNlCQBpAgkAaAIIBQNwbXQGYW1vdW50AAUA6AcEDE5ld0RlbGF5Q29zdAMJAAACBQ9BY3R1YWxEZWxheUNvc3QAAACAlOvcAwkAaAIAAgUPQWN0dWFsRGVsYXlDb3N0AwkAZwIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudAUMTmV3RGVsYXlDb3N0BAhOZXdEZWxheQkAZAIFC0FjdHVhbERlbGF5BQlEZWxheURheXMJAMwIAgkBDEludGVnZXJFbnRyeQICBURlbGF5BQhOZXdEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgIJRGVsYXlDb3N0BQxOZXdEZWxheUNvc3QJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgZEZXZCb3gFDERldkJveEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MFF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlBQNuaWwJAAIBCQCsAgIJAKwCAgJJVG8gZGVsYXkgdGhlIHJlbGVhc2Ugb2YgdGhlIHJld2FyZCBPTkUgREFZIGxhdGVyIHRoYW4gZXhwZWN0ZWQsIHlvdSBuZWVkIAkApAMBBQxOZXdEZWxheUNvc3QCB1RST0lLQXMJAAIBAl5Zb3UgY2Fubm90IGRlbGF5IHRoZSByZXdhcmQgYmVmb3JlIHJld2FyZCBpcyByZWNlaXZlZCEgUGxlYXNlIHdhaXQgdW50aWwgYSByZXdhcmQgaXMgYXZhaWxhYmxlCQACAQIpQ2FuIFVzZSBvbmx5IFRyb2lrYSBUb2tlbiB0byBEZWxheSBSZXdhcmQBaQEKQ2xhaW1Qcml6ZQAEElVzZXJTdGFrZWRUb2tlbktleQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBJVc2VyTGFzdFN0YWtlQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfVXNlckxhc3RTdGFrZUJsb2NrBA1taW5TdGFrZUJsb2NrCQBoAgCgCwAHBAZtaW5yZWYAAwQXQ29udHJhY3RHb3ZUb2tlbkJhbGFuY2UJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4EGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABA1Vc2VyUHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFVVzZXJTdGFrZWRUb2tlbkFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyU3Rha2VkVG9rZW5LZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZVdpbm5lcgQHJG1hdGNoMAkAnQgCBQR0aGlzAhJIaWdoZXN0UHVzaEFkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgAEC1ByaXplSGVpZ2h0BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBIaWdoZXN0UHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCC0hpZ2hlc3RQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtVc2VyUmVmc051bQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9yZWZzBBBVc2VyUmVmc051bVZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFC1VzZXJSZWZzTnVtAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwMJAAACBQtQcml6ZUFtb3VudAAABgkAZgIAgMivoCUFF0NvbnRyYWN0R292VG9rZW5CYWxhbmNlCQACAQJJTm8gcHJpemUgdG8gQ2xhaW0gb3IgTm90IGVub3VnaCBHb3Zlcm4gVG9rZW4gZW4gQ29udHJhY3QgKE1pbiAxMDAgVHJvaWthKQMJAQIhPQIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwULUHJpemVXaW5uZXIJAAIBAjZZb3UgYXJlIG5vdCB0aGUgd2lubmVyIGhlbmNlIGNhbm5vdCBjbGFpbSB0aGUgcmV3YXJkICADAwkAZgIAgMLXLwUVVXNlclN0YWtlZFRva2VuQW1vdW50CQBmAgUNbWluU3Rha2VCbG9jawUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUHCQACAQIuWW91IGhhdmUgdG8gU3Rha2UgQVNJTUkgVG9rZW4gdG8gY2xhaW0gcmV3YXJkIAMDCQBmAgUGaGVpZ2h0CQBkAgULUHJpemVIZWlnaHQFC0FjdHVhbERlbGF5CQBnAgUNVXNlclB1c2hWYWx1ZQUQSGlnaGVzdFB1c2hWYWx1ZQcDCQBnAgUQVXNlclJlZnNOdW1WYWx1ZQUGbWlucmVmCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtQcml6ZVdpbm5lcgULUHJpemVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQICB0Z1bmRCb3gAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgILSGlnaGVzdFB1c2gAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUIVXNlclB1c2gAAAkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MCAAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIFRGVsYXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJRGVsYXlDb3N0AAAJAMwIAgkBC1N0cmluZ0VudHJ5AgIKTGFzdFdpbm5lcgULUHJpemVXaW5uZXIJAMwIAgkBDEludGVnZXJFbnRyeQICCUxhc3RQcml6ZQULUHJpemVBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtQcml6ZUFtb3VudAULU3Rha2VkVG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAICU69wDBQtHb3Zlcm5Ub2tlbgUDbmlsCQACAQkArAICCQCsAgICEllvdSBoYXZlIHRvIGhhdmUgIAkApAMBBQZtaW5yZWYCRyAgcmVmZXJyYWxzIGFscmVhZHkgc3Rha2luZyBmb3IgYSBtaW5pbXVtIG9mIDEwIGRheXMgdG8gQ2xhaW0gdGhlIHByaXplCQACAQJhWW91IGhhdmUgdG8gYmUgdGhlIHVzZXIgd2l0aCB0aGUgaGlnaGVzdCBQdXNoIGFuZCB3YWl0IHRpbGwgY291bnRvd24gaXMgZmluaXNoZWQsIHRvIGNsYWltIFJld2FyZAFpAQlBZGRtZW50b3IBBk1lbnRvcgQRVXNlck1lbnRvckFkZHJlc3MJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgdfTWVudG9yAwkBAiE9AgUGTWVudG9yAgAJAMwIAgkBC1N0cmluZ0VudHJ5AgURVXNlck1lbnRvckFkZHJlc3MFBk1lbnRvcgUDbmlsCQACAQIgTWVudG9yJ3MgQWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkBaQEQVXBkYXRlVHdpdHRzQ29zdAIUTGlrZVBhY2thZ2VBU0lNSUNvc3QWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdAMJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFCWRBcHBBZG1pbgkAzAgCCQEMSW50ZWdlckVudHJ5AgIUTGlrZVBhY2thZ2VBU0lNSUNvc3QJAGgCBRRMaWtlUGFja2FnZUFTSU1JQ29zdACAwtcvCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZMaWtlUGFja2FnZVRST0lLQU5Db3N0CQBoAgUWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdACAwtcvBQNuaWwJAAIBAhhPbmx5IGF2YWlsYWJsZSBmb3IgQWRtaW4BaQEPR2V0TGlrZXNQYWNrYWdlAg1Ud2l0dGVyVXNlcklkB1R3aXR0SWQECkluZmx1ZW5jZXIJAKwCAgkArAICCQCkAwEFDVR3aXR0ZXJVc2VySWQCDF9Ud2l0dDJMaWtlXwkApAMBBQdUd2l0dElkBBtMaWtlUGFja2FnZVRST0lLQU5Db3N0VmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwIWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQZTGlrZVBhY2thZ2VBU0lNSUNvc3RWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAhRMaWtlUGFja2FnZUFTSU1JQ29zdAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgkAkQMCCAUBaQhwYXltZW50cwAACQACAQIcQXR0YWNoZWQgcGF5bWVudCBpcyByZXF1aXJlZAMDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQtTdGFrZWRUb2tlbgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAULR292ZXJuVG9rZW4HAwkAZwIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlAwkAZwIICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BRtMaWtlUGFja2FnZVRST0lLQU5Db3N0VmFsdWUEEUluZmx1ZW5jZXJCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCkluZmx1ZW5jZXIDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAADCQAAAgURSW5mbHVlbmNlckJhbGFuY2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKQDAQUNVHdpdHRlclVzZXJJZAIMX1R3aXR0Mkxpa2VfCQCkAwEFB1R3aXR0SWQJAGkCCQBoAgBfBRlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlAGQJAMwIAgkBDEludGVnZXJFbnRyeQICEExpa2VUd2l0dHNEZXZCb3gJAGkCCQBoAgAFBRlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlAGQFA25pbAkAAgECdUNhbm5vdCBhY3F1aXJlIGEgbmV3IHBhY2thZ2UsIHRoZSBwcmlvciBsaWtlIHBhY2thZ2UgZm9yIHRoaXMgdHdpdHQgaGFzIHRvIGJlIGRyYWluZWQgdG8gYmUgYWJsZSB0byBhY3F1aXJlIGEgbmV3IG9uZQkAAgEJAKwCAgIaVFJPSUtBTiBBbW91bnQgc2hvdWxkIGJlIDoJAKQDAQkAaQIFGUxpa2VQYWNrYWdlQVNJTUlDb3N0VmFsdWUAgMLXLwkAAgEJAKwCAgIYQVNJTUkgQW1vdW50IHNob3VsZCBiZSA6CQCkAwEJAGkCBRtMaWtlUGFja2FnZVRST0lLQU5Db3N0VmFsdWUAgMLXLwkAAgECMFBheW1lbnRzIHNob3VsZCBiZSBib3RoIEFTSU1JIGFuZCBUUk9JS0FOIHRva2VucwFpARdHZXRNeUxpa2VkVHdpdHRzUmV3YXJkcwEGVXNlcklkBBhVc2VyRWFybmVkTGlrZVR3aXR0QVNJTUkEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICBQZVc2VySWQCDF9MaWtlX0Ftb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQcVXNlckVhcm5lZGRBcHBSVFR3aXR0VFJPSUtBTgQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIFBlVzZXJJZAIWX1Ryb2lrYW5kQXBwX1JUX0Ftb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMDCQBnAgUYVXNlckVhcm5lZExpa2VUd2l0dEFTSU1JCQBoAgABAIDC1y8JAGcCBRxVc2VyRWFybmVkZEFwcFJUVHdpdHRUUk9JS0FOCQBoAgABAIDC1y8HCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBlVzZXJJZAIWX1Ryb2lrYW5kQXBwX1JUX0Ftb3VudAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBlVzZXJJZAIMX0xpa2VfQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRhVc2VyRWFybmVkTGlrZVR3aXR0QVNJTUkFC1N0YWtlZFRva2VuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUcVXNlckVhcm5lZGRBcHBSVFR3aXR0VFJPSUtBTgULR292ZXJuVG9rZW4FA25pbAkAAgECO01pbmltdW0gZWFybmluZ3MgdG8gd2l0aGRyYXcgYXJlOiAxMDAgQVNJTUkgYW5kIDUwIFRyb2lrYW5zAWkBFUxpbmtUd2l0dGVyQWNjMldhbGxldAENVHdpdHRlclVzZXJJZAQTVHdpdHRlckxpbmtlZFdhbGxldAQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIFDVR3aXR0ZXJVc2VySWQCB19XYWxsZXQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgROb25lAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUTVHdpdHRlckxpbmtlZFdhbGxldAkAAgECOllvdSBhbHJlYWR5IGhhdmUgeW91ciB3YWxsZXQgbGlua2VkIHRvIHRoZSBUd2l0dGVyIGFjY291bnQDAwkBAiE9AgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBRNUd2l0dGVyTGlua2VkV2FsbGV0CQECIT0CBRNUd2l0dGVyTGlua2VkV2FsbGV0AgROb25lBwkAAgECSVRoZSB3YWxsZXQgeW91IGFyZSB1c2luZyBpcyBub3QgdGhlIGxpbmtlZCBXYWxsZXQgdG8gdGhpcyBUd2l0dGVyIGFjY291bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQ1Ud2l0dGVyVXNlcklkAgdfV2FsbGV0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFA25pbABnOnRi", "height": 2146884, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6rQg5DHWU9t8EAY15LTu7yAviQR8Rs4h5mqJQRANrKwP Next: EDU3M2uBP4x1W5dAGZHs8KbGEujpoEB6fSGoTJffyj4L 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 dAppAdmin = "3Mu3nwxzGzeQBGxCKLyJcSDKmRiCea9FQSJ"
99
1010 @Callable(i)
1111 func DevWithdraw () = {
1212 let currentKey = toBase58String(i.caller.bytes)
1313 if ((currentKey == dAppAdmin))
1414 then {
1515 let DevBoxAmount = match getInteger(this, "DevBox") {
1616 case a: Int =>
1717 a
1818 case _ =>
1919 0
2020 }
2121 if ((0 > DevBoxAmount))
2222 then throw("Not enough balance")
2323 else [IntegerEntry("DevBox", 0), ScriptTransfer(i.caller, DevBoxAmount, GovernToken)]
2424 }
2525 else throw("You cannot withdraw as your are not the Dev.")
2626 }
2727
2828
2929
3030 @Callable(i)
3131 func WithdrawWeeklyEarning () = {
3232 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
3333 let MaxDepositer = match getString(this, "MaxDepositer") {
3434 case a: String =>
3535 a
3636 case _ =>
3737 ""
3838 }
3939 let UserWeeklyEarnings = (toBase58String(i.caller.bytes) + "_WeekEarning")
4040 let StakeBalance = match getInteger(this, "StakeBalance") {
4141 case a: Int =>
4242 a
4343 case _ =>
4444 0
4545 }
4646 let PrizeAmount = match getInteger(this, "FundBox") {
4747 case a: Int =>
4848 a
4949 case _ =>
5050 0
5151 }
5252 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
5353 case a: Int =>
5454 a
5555 case _ =>
5656 0
5757 }
5858 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
5959 then (PrizeAmount == 0)
6060 else false)
6161 then 0
6262 else if (if ((HeightTransactFundBox == 0))
6363 then (PrizeAmount != 0)
6464 else false)
6565 then height
6666 else if (if ((HeightTransactFundBox != 0))
6767 then (PrizeAmount != 0)
6868 else false)
6969 then HeightTransactFundBox
7070 else 0
7171 let currentKey = toBase58String(i.caller.bytes)
7272 let newAmount = match getInteger(this, UserWeeklyEarnings) {
7373 case a: Int =>
7474 a
7575 case _ =>
7676 0
7777 }
7878 if ((0 > newAmount))
7979 then throw("Can't withdraw negative amount")
8080 else if ((0 > newAmount))
8181 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((newAmount / 100000000))))
8282 else [IntegerEntry(UserWeeklyEarnings, 0), IntegerEntry("PrizeHeight", PrizeHeightValue), IntegerEntry("MaxDeposit", 0), ScriptTransfer(i.caller, newAmount, StakedToken)]
8383 }
8484
8585
8686
8787 @Callable(i)
8888 func PushReward () = {
8989 let minPushBlock = 10
9090 let minStakeBlock = (7 * 1440)
9191 let DelayAfterPush = 60
9292 let WaitTime = (1440 * 1)
9393 let minref = 3
9494 let FirstPushTimer = (7 * 1440)
9595 let userWalletGovernBalance = assetBalance(Address(i.caller.bytes), GovernToken)
9696 let pmt = if ((size(i.payments) == 1))
9797 then i.payments[0]
9898 else throw("Attached payment is required")
9999 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
100100 let UserLastPushOldValue = match getInteger(this, UserPush) {
101101 case a: Int =>
102102 a
103103 case _ =>
104104 0
105105 }
106106 let UserRefsNum = (toBase58String(i.caller.bytes) + "_refs")
107107 let UserRefsNumValue = match getInteger(this, UserRefsNum) {
108108 case a: Int =>
109109 a
110110 case _ =>
111111 0
112112 }
113113 let HighestPushValue = match getInteger(this, "HighestPush") {
114114 case a: Int =>
115115 a
116116 case _ =>
117117 0
118118 }
119119 if ((userWalletGovernBalance > pmt.amount))
120120 then if (if (((pmt.amount + UserLastPushOldValue) > HighestPushValue))
121121 then (pmt.assetId == GovernToken)
122122 else false)
123123 then {
124124 let UserLastPushBlock = (toBase58String(i.caller.bytes) + "_UserLastPushBlock")
125125 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
126126 let UserStake = (toBase58String(i.caller.bytes) + "_Staking")
127127 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
128128 let StakeBalance = match getInteger(this, "StakeBalance") {
129129 case a: Int =>
130130 a
131131 case _ =>
132132 0
133133 }
134134 let PrizeAmount = match getInteger(this, "FundBox") {
135135 case a: Int =>
136136 a
137137 case _ =>
138138 0
139139 }
140140 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
141141 case a: Int =>
142142 a
143143 case _ =>
144144 0
145145 }
146146 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
147147 then (PrizeAmount == 0)
148148 else false)
149149 then 0
150150 else if (if ((HeightTransactFundBox == 0))
151151 then (PrizeAmount != 0)
152152 else false)
153153 then height
154154 else if (if ((HeightTransactFundBox != 0))
155155 then (PrizeAmount != 0)
156156 else false)
157157 then HeightTransactFundBox
158158 else 0
159159 let ActualDelay = match getInteger(this, "Delay") {
160160 case a: Int =>
161161 a
162162 case _ =>
163163 0
164164 }
165165 let HighestPushAddress = match getInteger(this, "HighestPushAddress") {
166166 case a: Int =>
167167 a
168168 case _ =>
169169 0
170170 }
171171 let UserLastPushBlockValue = match getInteger(this, UserLastPushBlock) {
172172 case a: Int =>
173173 a
174174 case _ =>
175175 0
176176 }
177177 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
178178 case a: Int =>
179179 a
180180 case _ =>
181181 0
182182 }
183183 let UserStakeValue = match getInteger(this, UserStake) {
184184 case a: Int =>
185185 a
186186 case _ =>
187187 0
188188 }
189189 let DevBoxBalance = match getInteger(this, "DevBox") {
190190 case a: Int =>
191191 a
192192 case _ =>
193193 0
194194 }
195195 let DevBoxAmount = (DevBoxBalance + ((pmt.amount * 5) / 1000))
196196 let UserPushvalue = (pmt.amount + UserLastPushOldValue)
197197 let NewDelay = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
198198 then (HighestPushValue > 0)
199199 else false)
200200 then FirstPushTimer
201201 else (ActualDelay + DelayAfterPush)
202202 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + NewDelay) + WaitTime)))
203203 then (HighestPushValue > 0)
204204 else false)
205205 then ""
206206 else HighestPushAddress
207207 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + NewDelay) + WaitTime)))
208208 then (HighestPushValue > 0)
209209 else false)
210210 then height
211211 else PrizeHeightValue
212212 if (if ((UserPushvalue > 0))
213213 then ((height - UserLastStakeBlockValue) > minStakeBlock)
214214 else false)
215215 then if (((height - UserLastPushBlockValue) > minPushBlock))
216216 then if ((UserStakeValue > 0))
217217 then if ((UserPushvalue > HighestPushValue))
218218 then if ((PrizeAmount > 0))
219219 then if (if (if (if (((PrizeHeightValueNew + NewDelay) >= height))
220220 then true
221221 else (height >= ((PrizeHeightValueNew + NewDelay) + WaitTime)))
222222 then (HighestPushValue > 0)
223223 else false)
224224 then true
225225 else (HighestPushValue == 0))
226226 then if ((UserRefsNumValue >= minref))
227227 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)]
228228 else throw((("You have to have " + toString(minref)) + " referrals already staking for a minimum of 10 days, to push"))
229229 else {
230230 let txt = if ((HighestPushValue > 0))
231231 then "You cannot Push after rewarding Prize and before One day has passed after award"
232232 else "Unexpected error"
233233 throw(txt)
234234 }
235235 else throw("You cannot push before the reward is unlocked, no reward has been detected yet")
236236 else throw("Your push in troikan token, should be Higher than last Highest Push")
237237 else throw("To be able to participate in Pushing for the reward you need to Stake ASIMIs in the dApp")
238238 else throw("You have to wait 10min before you can make a new Push")
239239 else throw(("Your Push dot not comply one of the following conditions: " + "1. Positive Value for Push in Troikan Toke
240240 2. Must Staked ASIMI Token for a minimum of week "))
241241 }
242242 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"))
243243 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 !")
244244 }
245245
246246
247247
248248 @Callable(i)
249249 func Stake () = {
250250 let WaitTime = (1440 * 1)
251251 let pmt = if ((size(i.payments) == 1))
252252 then i.payments[0]
253253 else throw("Attached payment is required")
254254 if (if ((pmt.amount > 0))
255255 then (pmt.assetId == StakedToken)
256256 else false)
257257 then {
258258 let GovernTokenSmartContractBalance = assetBalance(this, GovernToken)
259259 let UserAPY = (toBase58String(i.caller.bytes) + "_APY")
260260 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
261261 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
262262 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
263263 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
264264 let UserStakeTransactionsKey = (toBase58String(i.caller.bytes) + "_StakedTransactions")
265265 let AddressHeight = (toBase58String(i.caller.bytes) + "_PrizeHeight")
266266 let UserWeekEarnings = (toBase58String(i.caller.bytes) + "_WeekEarning")
267267 let UserStakeTransactions = match getInteger(this, UserStakeTransactionsKey) {
268268 case a: Int =>
269269 a
270270 case _ =>
271271 0
272272 }
273273 let MaxDepositer = match getString(this, "MaxDepositer") {
274274 case a: String =>
275275 a
276276 case _ =>
277277 ""
278278 }
279279 let MaxDepositBlock = match getInteger(this, "MaxDepositBlock") {
280280 case a: Int =>
281281 a
282282 case _ =>
283283 0
284284 }
285285 let MaxDeposit = match getInteger(this, "MaxDeposit") {
286286 case a: Int =>
287287 a
288288 case _ =>
289289 0
290290 }
291291 let MaxDepositerValue = if ((pmt.amount > MaxDeposit))
292292 then toBase58String(i.caller.bytes)
293293 else MaxDepositer
294294 let MaxDepositValue = if ((pmt.amount > MaxDeposit))
295295 then pmt.amount
296296 else MaxDeposit
297297 let MaxDepositBlockValue = if ((pmt.amount > MaxDeposit))
298298 then height
299299 else MaxDepositBlock
300300 let UserPushValue = match getInteger(this, UserPush) {
301301 case a: Int =>
302302 a
303303 case _ =>
304304 0
305305 }
306306 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
307307 case a: Int =>
308308 a
309309 case _ =>
310310 0
311311 }
312312 let UserLastStakeBlockNewValue = if ((UserLastStakeBlockValue == 0))
313313 then height
314314 else UserLastStakeBlockValue
315315 let NewUserStakeTransactions = (UserStakeTransactions + 1)
316316 let currentAmountStakedToken = match getInteger(this, UserStakedTokenKey) {
317317 case a: Int =>
318318 a
319319 case _ =>
320320 0
321321 }
322322 let newAmountStakedToken = (currentAmountStakedToken + pmt.amount)
323323 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
324324 let StakeBalance = match getInteger(this, "StakeBalance") {
325325 case a: Int =>
326326 a
327327 case _ =>
328328 0
329329 }
330330 let StakeBalanceAmount = (StakeBalance + pmt.amount)
331331 let PrizeAmount = match getInteger(this, "FundBox") {
332332 case a: Int =>
333333 a
334334 case _ =>
335335 0
336336 }
337337 let UserWeekEarningsValue = match getInteger(this, UserWeekEarnings) {
338338 case a: Int =>
339339 a
340340 case _ =>
341341 0
342342 }
343343 let currentAmountGovernToken = match getInteger(this, UserGovernTokenKey) {
344344 case a: Int =>
345345 a
346346 case _ =>
347347 0
348348 }
349349 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
350350 case a: Int =>
351351 a
352352 case _ =>
353353 0
354354 }
355355 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
356356 then (PrizeAmount == 0)
357357 else false)
358358 then 0
359359 else if (if ((HeightTransactFundBox == 0))
360360 then (PrizeAmount != 0)
361361 else false)
362362 then height
363363 else if (if ((HeightTransactFundBox != 0))
364364 then (PrizeAmount != 0)
365365 else false)
366366 then HeightTransactFundBox
367367 else 0
368368 let ActualDelay = match getInteger(this, "Delay") {
369369 case a: Int =>
370370 a
371371 case _ =>
372372 0
373373 }
374374 let HighestPushValue = match getInteger(this, "HighestPush") {
375375 case a: Int =>
376376 a
377377 case _ =>
378378 0
379379 }
380380 let HighestPushAddress = match getString(this, "HighestPushAddress") {
381381 case a: String =>
382382 a
383383 case _ =>
384384 ""
385385 }
386386 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
387387 then (HighestPushValue > 0)
388388 else false)
389389 then ""
390390 else HighestPushAddress
391391 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
392392 then (HighestPushValue > 0)
393393 else false)
394394 then height
395395 else PrizeHeightValue
396396 if ((100000000 > GovernTokenSmartContractBalance))
397397 then throw("No enough GovernToken In Contract, Please deposit GovernTokens")
398398 else {
399399 let Reward = if ((StakeBalance == 0))
400400 then 10000
401401 else if ((NewUserStakeTransactions > 10))
402402 then ((10000 * NewUserStakeTransactions) * (1 + (newAmountStakedToken / StakeBalance)))
403403 else (10000 * (1 + (newAmountStakedToken / StakeBalance)))
404404 let UserAPYValue = if ((currentAmountGovernToken > 0))
405405 then ((100 * Reward) / currentAmountGovernToken)
406406 else 0
407407 let newAmountGovernToken = (currentAmountGovernToken + Reward)
408408 [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)]
409409 }
410410 }
411411 else throw("Can deposit only StakeToken")
412412 }
413413
414414
415415
416416 @Callable(i)
417417 func WithdrawStakedFunds (amount) = {
418418 let WaitTime = (1440 * 1)
419419 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
420420 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
421421 let UserGovernTokenKey = ((toBase58String(i.caller.bytes) + "_") + toBase58String(GovernToken))
422422 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
423423 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
424424 case a: Int =>
425425 a
426426 case _ =>
427427 0
428428 }
429429 let StakeBalance = match getInteger(this, "StakeBalance") {
430430 case a: Int =>
431431 a
432432 case _ =>
433433 0
434434 }
435435 let PrizeAmount = match getInteger(this, "FundBox") {
436436 case a: Int =>
437437 a
438438 case _ =>
439439 0
440440 }
441441 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
442442 case a: Int =>
443443 a
444444 case _ =>
445445 0
446446 }
447447 let ActualDelay = match getInteger(this, "Delay") {
448448 case a: Int =>
449449 a
450450 case _ =>
451451 0
452452 }
453453 let HighestPushValue = match getInteger(this, "HighestPush") {
454454 case a: Int =>
455455 a
456456 case _ =>
457457 0
458458 }
459459 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
460460 then (PrizeAmount == 0)
461461 else false)
462462 then 0
463463 else if (if ((HeightTransactFundBox == 0))
464464 then (PrizeAmount != 0)
465465 else false)
466466 then height
467467 else if (if ((HeightTransactFundBox != 0))
468468 then (PrizeAmount != 0)
469469 else false)
470470 then HeightTransactFundBox
471471 else 0
472472 let HighestPushAddress = match getString(this, "HighestPushAddress") {
473473 case a: String =>
474474 a
475475 case _ =>
476476 ""
477477 }
478478 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
479479 then (HighestPushValue > 0)
480480 else false)
481481 then ""
482482 else HighestPushAddress
483483 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
484484 then (HighestPushValue > 0)
485485 else false)
486486 then height
487487 else PrizeHeightValue
488488 let currentKey = toBase58String(i.caller.bytes)
489489 let currentAmount = match getInteger(this, UserStakedTokenKey) {
490490 case a: Int =>
491491 a
492492 case _ =>
493493 0
494494 }
495495 let newAmount = (currentAmount - amount)
496496 let StakeBalanceAmount = (StakeBalance - amount)
497497 let UserLastStakeBlockNewValue = if ((StakeBalanceAmount == 0))
498498 then 0
499499 else UserLastStakeBlockValue
500500 if ((0 > amount))
501501 then throw("Can't withdraw negative amount")
502502 else if ((0 > newAmount))
503503 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((currentAmount / 100000000))))
504504 else if ((100000000 > assetBalance(this, GovernToken)))
505505 then throw(("Not enough Troika In Contract: " + toString((assetBalance(this, GovernToken) / 100000000))))
506506 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)]
507507 }
508508
509509
510510
511511 @Callable(i)
512512 func WithdrawBigStakeReward () = {
513513 let WaitTime = (1440 * 1)
514514 let LastBigStakerRewardBlock = (toBase58String(i.caller.bytes) + "_LastBigStakerRewardBlock")
515515 let BigStakerReward = (toBase58String(i.caller.bytes) + "_BigStaker")
516516 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
517517 let LimiWithdrawReward = 10
518518 let UserGovernTokenAmount = match getInteger(this, UserGovernTokenKey) {
519519 case a: Int =>
520520 a
521521 case _ =>
522522 0
523523 }
524524 let LastBigStakerRewardBlockValue = match getInteger(this, LastBigStakerRewardBlock) {
525525 case a: Int =>
526526 a
527527 case _ =>
528528 0
529529 }
530530 let BigStakerRewardTotalValue = match getInteger(this, "BigStakerRewardTotal") {
531531 case a: Int =>
532532 a
533533 case _ =>
534534 0
535535 }
536536 let PrizeAmount = match getInteger(this, "FundBox") {
537537 case a: Int =>
538538 a
539539 case _ =>
540540 0
541541 }
542542 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
543543 case a: Int =>
544544 a
545545 case _ =>
546546 0
547547 }
548548 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
549549 then (PrizeAmount == 0)
550550 else false)
551551 then 0
552552 else if (if ((HeightTransactFundBox == 0))
553553 then (PrizeAmount != 0)
554554 else false)
555555 then height
556556 else if (if ((HeightTransactFundBox != 0))
557557 then (PrizeAmount != 0)
558558 else false)
559559 then HeightTransactFundBox
560560 else 0
561561 let ActualDelay = match getInteger(this, "Delay") {
562562 case a: Int =>
563563 a
564564 case _ =>
565565 0
566566 }
567567 let HighestPushValue = match getInteger(this, "HighestPush") {
568568 case a: Int =>
569569 a
570570 case _ =>
571571 0
572572 }
573573 let HighestPushAddress = match getString(this, "HighestPushAddress") {
574574 case a: String =>
575575 a
576576 case _ =>
577577 ""
578578 }
579579 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
580580 then (HighestPushValue > 0)
581581 else false)
582582 then ""
583583 else HighestPushAddress
584584 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
585585 then (HighestPushValue > 0)
586586 else false)
587587 then height
588588 else PrizeHeightValue
589589 let currentKey = toBase58String(i.caller.bytes)
590590 let amount = match getInteger(this, BigStakerReward) {
591591 case a: Int =>
592592 a
593593 case _ =>
594594 0
595595 }
596596 let StakeBalanceAmount = (BigStakerRewardTotalValue - amount)
597597 let BigStakerRewardTax = if ((0 > ((UserGovernTokenAmount / 1000) * (1000 - ((1000 * (height - LastBigStakerRewardBlockValue)) / (LimiWithdrawReward * 1440))))))
598598 then (1000 * 100000000)
599599 else ((UserGovernTokenAmount / 1000) * (1000 - ((1000 * (height - LastBigStakerRewardBlockValue)) / (LimiWithdrawReward * 1440))))
600600 if ((0 > amount))
601601 then throw(((("Can't withdraw negative amount " + toString((UserGovernTokenAmount - (1000 * 100000000)))) + " ... ") + toString(amount)))
602602 else if (if (if (((1000 * 100000000) > UserGovernTokenAmount))
603603 then true
604604 else (1 > amount))
605605 then true
606606 else (0 > (UserGovernTokenAmount - BigStakerRewardTax)))
607607 then throw(("No ASIMI reward available, or Not enough Earned Troikan Tokens to do transaction, you have: " + toString((UserGovernTokenAmount / 100000000))))
608608 else if ((StakeBalanceAmount > 0))
609609 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)]
610610 else throw("Balance Error, Total Big Stakers cannot be negative, Operation won't be authorized")
611611 }
612612
613613
614614
615615 @Callable(i)
616616 func HarvestGovernToiken (amount) = {
617617 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
618618 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
619619 let StakeBalance = match getInteger(this, "StakeBalance") {
620620 case a: Int =>
621621 a
622622 case _ =>
623623 0
624624 }
625625 let PrizeAmount = match getInteger(this, "FundBox") {
626626 case a: Int =>
627627 a
628628 case _ =>
629629 0
630630 }
631631 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
632632 case a: Int =>
633633 a
634634 case _ =>
635635 0
636636 }
637637 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
638638 then (PrizeAmount == 0)
639639 else false)
640640 then 0
641641 else if (if ((HeightTransactFundBox == 0))
642642 then (PrizeAmount != 0)
643643 else false)
644644 then height
645645 else if (if ((HeightTransactFundBox != 0))
646646 then (PrizeAmount != 0)
647647 else false)
648648 then HeightTransactFundBox
649649 else 0
650650 let currentKey = toBase58String(i.caller.bytes)
651651 let currentAmount = match getInteger(this, UserGovernTokenKey) {
652652 case a: Int =>
653653 a
654654 case _ =>
655655 0
656656 }
657657 let newAmount = (currentAmount - amount)
658658 if ((0 > amount))
659659 then throw("Can't withdraw negative amount")
660660 else if ((0 > newAmount))
661661 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((currentAmount / 100000000))))
662662 else [IntegerEntry(UserGovernTokenKey, newAmount), IntegerEntry("PrizeHeight", PrizeHeightValue), ScriptTransfer(i.caller, amount, GovernToken)]
663663 }
664664
665665
666666
667667 @Callable(i)
668668 func delayprize () = {
669669 let DelayDays = (1440 * 1)
670670 let WaitTime = (1440 * 1)
671671 let UserGovernTokenKey = ((toBase58String(i.caller.bytes) + "_") + toBase58String(GovernToken))
672672 let UserWalletSGovernBalance = assetBalance(Address(i.caller.bytes), GovernToken)
673673 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
674674 let StakeBalance = match getInteger(this, "StakeBalance") {
675675 case a: Int =>
676676 a
677677 case _ =>
678678 0
679679 }
680680 let PrizeAmount = match getInteger(this, "FundBox") {
681681 case a: Int =>
682682 a
683683 case _ =>
684684 0
685685 }
686686 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
687687 case a: Int =>
688688 a
689689 case _ =>
690690 0
691691 }
692692 let ActualDelay = match getInteger(this, "Delay") {
693693 case a: Int =>
694694 a
695695 case _ =>
696696 0
697697 }
698698 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
699699 then (PrizeAmount == 0)
700700 else false)
701701 then 0
702702 else if (if ((HeightTransactFundBox == 0))
703703 then (PrizeAmount != 0)
704704 else false)
705705 then height
706706 else if (if ((HeightTransactFundBox != 0))
707707 then (PrizeAmount != 0)
708708 else false)
709709 then HeightTransactFundBox
710710 else 0
711711 let HighestPushValue = match getInteger(this, "HighestPush") {
712712 case a: Int =>
713713 a
714714 case _ =>
715715 0
716716 }
717717 let HighestPushAddress = match getString(this, "HighestPushAddress") {
718718 case a: String =>
719719 a
720720 case _ =>
721721 ""
722722 }
723723 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
724724 then (HighestPushValue > 0)
725725 else false)
726726 then ""
727727 else HighestPushAddress
728728 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
729729 then (HighestPushValue > 0)
730730 else false)
731731 then height
732732 else PrizeHeightValue
733733 let ActualDelayCost = match getInteger(this, "DelayCost") {
734734 case a: Int =>
735735 a
736736 case _ =>
737737 10
738738 }
739739 let pmt = if ((size(i.payments) == 1))
740740 then i.payments[0]
741741 else throw("Attached payment is required")
742742 let DevBoxBalance = match getInteger(this, "DevBox") {
743743 case a: Int =>
744744 a
745745 case _ =>
746746 0
747747 }
748748 if (if (isDefined(pmt.assetId))
749749 then (pmt.assetId == GovernToken)
750750 else false)
751751 then if ((PrizeAmount > 0))
752752 then {
753753 let UserGovernTokenAmount = pmt.amount
754754 let DevBoxAmount = (DevBoxBalance + ((pmt.amount * 5) / 1000))
755755 let NewDelayCost = if ((ActualDelayCost == 0))
756756 then 1000000000
757757 else (2 * ActualDelayCost)
758758 if ((UserGovernTokenAmount >= NewDelayCost))
759759 then {
760760 let NewDelay = (ActualDelay + DelayDays)
761761 [IntegerEntry("Delay", NewDelay), IntegerEntry("DelayCost", NewDelayCost), IntegerEntry("PrizeHeight", PrizeHeightValueNew), IntegerEntry("DevBox", DevBoxAmount), StringEntry("HighestPushAddress", HighestPushAddressValue)]
762762 }
763763 else throw((("To delay the release of the reward ONE DAY later than expected, you need " + toString(NewDelayCost)) + "TROIKAs"))
764764 }
765765 else throw("You cannot delay the reward before reward is received! Please wait until a reward is available")
766766 else throw("Can Use only Troika Token to Delay Reward")
767767 }
768768
769769
770770
771771 @Callable(i)
772772 func ClaimPrize () = {
773773 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
774774 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
775775 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
776776 let minStakeBlock = (1440 * 7)
777777 let minref = 3
778778 let ContractGovTokenBalance = assetBalance(this, GovernToken)
779779 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
780780 let StakeBalance = match getInteger(this, "StakeBalance") {
781781 case a: Int =>
782782 a
783783 case _ =>
784784 0
785785 }
786786 let PrizeAmount = match getInteger(this, "FundBox") {
787787 case a: Int =>
788788 a
789789 case _ =>
790790 0
791791 }
792792 let UserPushValue = match getInteger(this, UserPush) {
793793 case a: Int =>
794794 a
795795 case _ =>
796796 0
797797 }
798798 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
799799 case a: Int =>
800800 a
801801 case _ =>
802802 0
803803 }
804804 let UserStakedTokenAmount = match getInteger(this, UserStakedTokenKey) {
805805 case a: Int =>
806806 a
807807 case _ =>
808808 0
809809 }
810810 let ActualDelay = match getInteger(this, "Delay") {
811811 case a: Int =>
812812 a
813813 case _ =>
814814 0
815815 }
816816 let PrizeWinner = match getString(this, "HighestPushAddress") {
817817 case a: String =>
818818 a
819819 case _ =>
820820 ""
821821 }
822822 let PrizeHeight = match getInteger(this, "PrizeHeight") {
823823 case a: Int =>
824824 a
825825 case _ =>
826826 0
827827 }
828828 let HighestPushValue = match getInteger(this, "HighestPush") {
829829 case a: Int =>
830830 a
831831 case _ =>
832832 0
833833 }
834834 let UserRefsNum = (toBase58String(i.caller.bytes) + "_refs")
835835 let UserRefsNumValue = match getInteger(this, UserRefsNum) {
836836 case a: Int =>
837837 a
838838 case _ =>
839839 0
840840 }
841841 if (if ((PrizeAmount == 0))
842842 then true
843843 else (10000000000 > ContractGovTokenBalance))
844844 then throw("No prize to Claim or Not enough Govern Token en Contract (Min 100 Troika)")
845845 else if ((toBase58String(i.caller.bytes) != PrizeWinner))
846846 then throw("You are not the winner hence cannot claim the reward ")
847847 else if (if ((100000000 > UserStakedTokenAmount))
848848 then (minStakeBlock > UserLastStakeBlockValue)
849849 else false)
850850 then throw("You have to Stake ASIMI Token to claim reward ")
851851 else if (if ((height > (PrizeHeight + ActualDelay)))
852852 then (UserPushValue >= HighestPushValue)
853853 else false)
854854 then if ((UserRefsNumValue >= minref))
855855 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)]
856856 else throw((("You have to have " + toString(minref)) + " referrals already staking for a minimum of 10 days to Claim the prize"))
857857 else throw("You have to be the user with the highest Push and wait till countown is finished, to claim Reward")
858858 }
859859
860860
861861
862862 @Callable(i)
863863 func Addmentor (Mentor) = {
864864 let UserMentorAddress = (toBase58String(i.caller.bytes) + "_Mentor")
865865 if ((Mentor != ""))
866866 then [StringEntry(UserMentorAddress, Mentor)]
867867 else throw("Mentor's Address cannot be empty")
868868 }
869869
870870
871871
872872 @Callable(i)
873873 func UpdateTwittsCost (LikePackageASIMICost,LikePackageTROIKANCost) = if ((toBase58String(i.caller.bytes) == dAppAdmin))
874874 then [IntegerEntry("LikePackageASIMICost", (LikePackageASIMICost * 100000000)), IntegerEntry("LikePackageTROIKANCost", (LikePackageTROIKANCost * 100000000))]
875875 else throw("Only available for Admin")
876876
877877
878878
879879 @Callable(i)
880880 func GetLikesPackage (TwitterUserId,TwittId) = {
881881 let Influencer = ((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId))
882882 let LikePackageTROIKANCostValue = match getInteger(this, "LikePackageTROIKANCost") {
883883 case a: Int =>
884884 a
885885 case _ =>
886886 0
887887 }
888888 let LikePackageASIMICostValue = match getInteger(this, "LikePackageASIMICost") {
889889 case a: Int =>
890890 a
891891 case _ =>
892892 0
893893 }
894894 let pmt = if ((size(i.payments) == 2))
895895 then i.payments[0]
896896 else throw("Attached payment is required")
897897 if (if ((i.payments[0].assetId == StakedToken))
898898 then (i.payments[1].assetId == GovernToken)
899899 else false)
900900 then if ((i.payments[0].amount >= LikePackageASIMICostValue))
901901 then if ((i.payments[1].amount >= LikePackageTROIKANCostValue))
902902 then {
903903 let InfluencerBalance = match getInteger(this, Influencer) {
904904 case a: Int =>
905905 a
906906 case _ =>
907907 0
908908 }
909909 if ((InfluencerBalance == 0))
910910 then [IntegerEntry(((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId)), ((95 * LikePackageASIMICostValue) / 100)), IntegerEntry("LikeTwittsDevBox", ((5 * LikePackageASIMICostValue) / 100))]
911911 else throw("Cannot acquire a new package, the prior like package for this twitt has to be drained to be able to acquire a new one")
912912 }
913913 else throw(("TROIKAN Amount should be :" + toString((LikePackageASIMICostValue / 100000000))))
914914 else throw(("ASIMI Amount should be :" + toString((LikePackageTROIKANCostValue / 100000000))))
915915 else throw("Payments should be both ASIMI and TROIKAN tokens")
916916 }
917917
918918
919919
920920 @Callable(i)
921921 func GetMyLikedTwittsRewards (UserId) = {
922922 let UserEarnedLikeTwittASIMI = match getInteger(this, (UserId + "_Like_Amount")) {
923923 case a: Int =>
924924 a
925925 case _ =>
926926 0
927927 }
928928 let UserEarneddAppRTTwittTROIKAN = match getInteger(this, (UserId + "_TroikandApp_RT_Amount")) {
929929 case a: Int =>
930930 a
931931 case _ =>
932932 0
933933 }
934934 if (if ((UserEarnedLikeTwittASIMI >= (1 * 100000000)))
935935 then (UserEarneddAppRTTwittTROIKAN >= (1 * 100000000))
936936 else false)
937937 then [IntegerEntry((UserId + "_TroikandApp_RT_Amount"), 0), IntegerEntry((UserId + "_Like_Amount"), 0), ScriptTransfer(i.caller, UserEarnedLikeTwittASIMI, StakedToken), ScriptTransfer(i.caller, UserEarneddAppRTTwittTROIKAN, GovernToken)]
938938 else throw("Minimum earnings to withdraw are: 100 ASIMI and 50 Troikans")
939939 }
940940
941941
942942
943943 @Callable(i)
944944 func LinkTwitterAcc2Wallet (TwitterUserId) = {
945945 let TwitterLinkedWallet = match getString(this, (TwitterUserId + "_Wallet")) {
946946 case a: String =>
947947 a
948948 case _ =>
949949 "None"
950950 }
951951 if ((toBase58String(i.caller.bytes) == TwitterLinkedWallet))
952952 then throw("You already have your wallet linked to the Twitter account")
953953 else if (if ((toBase58String(i.caller.bytes) != TwitterLinkedWallet))
954954 then (TwitterLinkedWallet != "None")
955955 else false)
956956 then throw("The wallet you are using is not the linked Wallet to this Twitter account")
957957 else [StringEntry((TwitterUserId + "_Wallet"), toBase58String(i.caller.bytes))]
958958 }
959959
960960

github/deemru/w8io/169f3d6 
70.37 ms