tx · B6MPnqNvu7YTFn7hsqwrvLDpeFPSCuAviNf7nNM4z4x9

3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK:  -0.02500000 Waves

2022.07.19 19:09 [2146854] smart account 3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK > SELF 0.00000000 Waves

{ "type": 13, "id": "B6MPnqNvu7YTFn7hsqwrvLDpeFPSCuAviNf7nNM4z4x9", "fee": 2500000, "feeAssetId": null, "timestamp": 1658246960437, "version": 2, "chainId": 84, "sender": "3N9evuqxGecMq9hBmpdJu2VkMzdR5VNVrvK", "senderPublicKey": "AHY8zupoYc6HPJ5fh1gQiGE9bNZSeifFbcQQ89okxVug", "proofs": [ "4gpRsru355rL9QCiub58nURNPH86ACb77PGrMVM1To8kf32EKpEaqmpBryPxUexdcTUciBHCSrnxUuyZ99bo5HzP" ], "script": "base64:BgI1CAISABIAEgASABIDCgEBEgASAwoBARIAEgASAwoBCBIECgIBARIECgIBARIDCgEIEgMKAQgDAAtTdGFrZWRUb2tlbgEg+a5dhaqgwfNcHhVklvUuRcimKrmAG+DKV13AJarHD1AAC0dvdmVyblRva2VuASABbIXC10DGLlfEc7PFC2dO3zpcxegcWHrOz/9RkZaZLQAJZEFwcEFkbWluAiMzUDc0YnVIdDk4Qm5vakZjYVJFSlp0Yjk4S0R5VW1aR2VtSg4BaQELRGV2V2l0aGRyYXcABApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQAAAgUKY3VycmVudEtleQUJZEFwcEFkbWluBAxEZXZCb3hBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIGRGV2Qm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwkAZgIAAAUMRGV2Qm94QW1vdW50CQACAQISTm90IGVub3VnaCBiYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgZEZXZCb3gAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDERldkJveEFtb3VudAULR292ZXJuVG9rZW4FA25pbAkAAgECLFlvdSBjYW5ub3Qgd2l0aGRyYXcgYXMgeW91ciBhcmUgbm90IHRoZSBEZXYuAWkBFVdpdGhkcmF3V2Vla2x5RWFybmluZwAEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxNYXhEZXBvc2l0ZXIEByRtYXRjaDAJAJ0IAgUEdGhpcwIMTWF4RGVwb3NpdGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABBJVc2VyV2Vla2x5RWFybmluZ3MJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgxfV2Vla0Vhcm5pbmcEDFN0YWtlQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgxTdGFrZUJhbGFuY2UDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECW5ld0Ftb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyV2Vla2x5RWFybmluZ3MDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAADCQBmAgAABQluZXdBbW91bnQJAAIBAh5DYW4ndCB3aXRoZHJhdyBuZWdhdGl2ZSBhbW91bnQDCQBmAgAABQluZXdBbW91bnQJAAIBCQCsAgICQVVzZXIgY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBkZXBvc2l0ZWQgZnVuZHMsIFlvdXIgZGVwb3NpdCBpczogCQCkAwEJAGkCBQluZXdBbW91bnQAgMLXLwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlcldlZWtseUVhcm5pbmdzAAAJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpNYXhEZXBvc2l0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQluZXdBbW91bnQFC1N0YWtlZFRva2VuBQNuaWwBaQEKUHVzaFJld2FyZAAEDG1pblB1c2hCbG9jawAKBA1taW5TdGFrZUJsb2NrCQBoAgAHAKALBA5EZWxheUFmdGVyUHVzaAA8BAhXYWl0VGltZQkAaAIAoAsAAQQGbWlucmVmAAMEDkZpcnN0UHVzaFRpbWVyCQBoAgAHAKALBBd1c2VyV2FsbGV0R292ZXJuQmFsYW5jZQkA8AcCCQEHQWRkcmVzcwEICAUBaQZjYWxsZXIFYnl0ZXMFC0dvdmVyblRva2VuBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBRVc2VyTGFzdFB1c2hPbGRWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBQhVc2VyUHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLVXNlclJlZnNOdW0JAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgVfcmVmcwQQVXNlclJlZnNOdW1WYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBQtVc2VyUmVmc051bQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMJAGYCBRd1c2VyV2FsbGV0R292ZXJuQmFsYW5jZQgFA3BtdAZhbW91bnQDAwkAZgIJAGQCCAUDcG10BmFtb3VudAUUVXNlckxhc3RQdXNoT2xkVmFsdWUFEEhpZ2hlc3RQdXNoVmFsdWUJAAACCAUDcG10B2Fzc2V0SWQFC0dvdmVyblRva2VuBwQRVXNlckxhc3RQdXNoQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhJfVXNlckxhc3RQdXNoQmxvY2sEElVzZXJMYXN0U3Rha2VCbG9jawkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCE19Vc2VyTGFzdFN0YWtlQmxvY2sECVVzZXJTdGFrZQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBBpDb250cmFjdFdhbGxldFN0YWtlQmFsYW5jZQkA8AcCBQR0aGlzBQtTdGFrZWRUb2tlbgQMU3Rha2VCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMCDFN0YWtlQmFsYW5jZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLUHJpemVBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIHRnVuZEJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJIaWdoZXN0UHVzaEFkZHJlc3MEByRtYXRjaDAJAJoIAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBZVc2VyTGFzdFB1c2hCbG9ja1ZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFEVVzZXJMYXN0UHVzaEJsb2NrAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEDlVzZXJTdGFrZVZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCVVzZXJTdGFrZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQNRGV2Qm94QmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzAgZEZXZCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEDERldkJveEFtb3VudAkAZAIFDURldkJveEJhbGFuY2UJAGkCCQBoAggFA3BtdAZhbW91bnQABQDoBwQNVXNlclB1c2h2YWx1ZQkAZAIIBQNwbXQGYW1vdW50BRRVc2VyTGFzdFB1c2hPbGRWYWx1ZQQITmV3RGVsYXkDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHBQ5GaXJzdFB1c2hUaW1lcgkAZAIFC0FjdHVhbERlbGF5BQ5EZWxheUFmdGVyUHVzaAQXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQhOZXdEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHAgAFEkhpZ2hlc3RQdXNoQWRkcmVzcwQTUHJpemVIZWlnaHRWYWx1ZU5ldwMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFCE5ld0RlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFBmhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQMDCQBmAgUNVXNlclB1c2h2YWx1ZQAACQBmAgkAZQIFBmhlaWdodAUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUFDW1pblN0YWtlQmxvY2sHAwkAZgIJAGUCBQZoZWlnaHQFFlVzZXJMYXN0UHVzaEJsb2NrVmFsdWUFDG1pblB1c2hCbG9jawMJAGYCBQ5Vc2VyU3Rha2VWYWx1ZQAAAwkAZgIFDVVzZXJQdXNodmFsdWUFEEhpZ2hlc3RQdXNoVmFsdWUDCQBmAgULUHJpemVBbW91bnQAAAMDAwMJAGcCCQBkAgUTUHJpemVIZWlnaHRWYWx1ZU5ldwUITmV3RGVsYXkFBmhlaWdodAYJAGcCBQZoZWlnaHQJAGQCCQBkAgUTUHJpemVIZWlnaHRWYWx1ZU5ldwUITmV3RGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwYJAAACBRBIaWdoZXN0UHVzaFZhbHVlAAADCQBnAgUQVXNlclJlZnNOdW1WYWx1ZQUGbWlucmVmCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhVc2VyUHVzaAUNVXNlclB1c2h2YWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgILSGlnaGVzdFB1c2gFDVVzZXJQdXNodmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEVVzZXJMYXN0UHVzaEJsb2NrBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgVEZWxheQUITmV3RGVsYXkJAMwIAgkBDEludGVnZXJFbnRyeQICBkRldkJveAUMRGV2Qm94QW1vdW50BQNuaWwJAAIBCQCsAgIJAKwCAgIRWW91IGhhdmUgdG8gaGF2ZSAJAKQDAQUGbWlucmVmAjwgcmVmZXJyYWxzIGFscmVhZHkgc3Rha2luZyBmb3IgYSBtaW5pbXVtIG9mIDEwIGRheXMsIHRvIHB1c2gEA3R4dAMJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAACT1lvdSBjYW5ub3QgUHVzaCBhZnRlciByZXdhcmRpbmcgUHJpemUgYW5kIGJlZm9yZSBPbmUgZGF5IGhhcyBwYXNzZWQgYWZ0ZXIgYXdhcmQCEFVuZXhwZWN0ZWQgZXJyb3IJAAIBBQN0eHQJAAIBAk5Zb3UgY2Fubm90IHB1c2ggYmVmb3JlIHRoZSByZXdhcmQgaXMgdW5sb2NrZWQsIG5vIHJld2FyZCBoYXMgYmVlbiBkZXRlY3RlZCB5ZXQJAAIBAkNZb3VyIHB1c2ggaW4gdHJvaWthbiB0b2tlbiwgc2hvdWxkIGJlIEhpZ2hlciB0aGFuIGxhc3QgSGlnaGVzdCBQdXNoCQACAQJYVG8gYmUgYWJsZSB0byBwYXJ0aWNpcGF0ZSBpbiBQdXNoaW5nIGZvciB0aGUgcmV3YXJkIHlvdSBuZWVkIHRvIFN0YWtlIEFTSU1JcyBpbiB0aGUgZEFwcAkAAgECNVlvdSBoYXZlIHRvIHdhaXQgMTBtaW4gYmVmb3JlIHlvdSBjYW4gbWFrZSBhIG5ldyBQdXNoCQACAQkArAICAjpZb3VyIFB1c2ggZG90IG5vdCBjb21wbHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogAl0xLiBQb3NpdGl2ZSBWYWx1ZSBmb3IgUHVzaCBpbiBUcm9pa2FuIFRva2UKIDIuIE11c3QgU3Rha2VkIEFTSU1JIFRva2VuIGZvciBhIG1pbmltdW0gb2Ygd2VlayAJAAIBCQCsAgIJAKwCAgJ2Q2FuIGRlcG9zaXQgb25seSBwb3NpdGl2ZSBhbW91bnRzIG9mIFRyb2lrYW4gVG9rZW4sIG9yIENoZWNrIHlvdXIgV2FsbGV0IGJhbGFuY2UgaW4gVHJvaWthLCB5b3Ugc2hvdWxkIGhhdmUgbW9yZSB0aGFuIAkApAMBBRBIaWdoZXN0UHVzaFZhbHVlAgggdG8gcHVzaAkAAgECpAFZb3UgZG8gbm90IGhhdmUgZW5vdWdoIFRyb2lrYW4gVG9rZW5zIGluIHlvdXIgV2FsbGV0IEJhbGFuY2UsIFBsZWFzZSBIYXJ2ZXN0IGlmIHlvdSBoYXZlIGVhcm5lZCBUcm9pa2FuIHdhbGxldCBvciB0cmFuc2ZlciB0byB5b3VyIHdhbGxldCBuZWNlc3NhcnkgVHJvaWthbiBhbW91bnQgIQFpAQVTdGFrZQAECFdhaXRUaW1lCQBoAgCgCwABBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkAwMJAGYCCAUDcG10BmFtb3VudAAACQAAAggFA3BtdAdhc3NldElkBQtTdGFrZWRUb2tlbgcEH0dvdmVyblRva2VuU21hcnRDb250cmFjdEJhbGFuY2UJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4EB1VzZXJBUFkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgRfQVBZBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBJVc2VyU3Rha2VkVG9rZW5LZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAghfU3Rha2luZwQSVXNlckdvdmVyblRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIJX0Vhcm5pbmdzBBJVc2VyTGFzdFN0YWtlQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfVXNlckxhc3RTdGFrZUJsb2NrBBhVc2VyU3Rha2VUcmFuc2FjdGlvbnNLZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfU3Rha2VkVHJhbnNhY3Rpb25zBA1BZGRyZXNzSGVpZ2h0CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIMX1ByaXplSGVpZ2h0BBBVc2VyV2Vla0Vhcm5pbmdzCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIMX1dlZWtFYXJuaW5nBBVVc2VyU3Rha2VUcmFuc2FjdGlvbnMEByRtYXRjaDAJAJoIAgUEdGhpcwUYVXNlclN0YWtlVHJhbnNhY3Rpb25zS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAxNYXhEZXBvc2l0ZXIEByRtYXRjaDAJAJ0IAgUEdGhpcwIMTWF4RGVwb3NpdGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABA9NYXhEZXBvc2l0QmxvY2sEByRtYXRjaDAJAJoIAgUEdGhpcwIPTWF4RGVwb3NpdEJsb2NrAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABApNYXhEZXBvc2l0BAckbWF0Y2gwCQCaCAIFBHRoaXMCCk1heERlcG9zaXQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEU1heERlcG9zaXRlclZhbHVlAwkAZgIIBQNwbXQGYW1vdW50BQpNYXhEZXBvc2l0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFDE1heERlcG9zaXRlcgQPTWF4RGVwb3NpdFZhbHVlAwkAZgIIBQNwbXQGYW1vdW50BQpNYXhEZXBvc2l0CAUDcG10BmFtb3VudAUKTWF4RGVwb3NpdAQUTWF4RGVwb3NpdEJsb2NrVmFsdWUDCQBmAggFA3BtdAZhbW91bnQFCk1heERlcG9zaXQFBmhlaWdodAUPTWF4RGVwb3NpdEJsb2NrBA1Vc2VyUHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEGlVzZXJMYXN0U3Rha2VCbG9ja05ld1ZhbHVlAwkAAAIFF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlAAAFBmhlaWdodAUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUEGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwkAZAIFFVVzZXJTdGFrZVRyYW5zYWN0aW9ucwABBBhjdXJyZW50QW1vdW50U3Rha2VkVG9rZW4EByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlclN0YWtlZFRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBRuZXdBbW91bnRTdGFrZWRUb2tlbgkAZAIFGGN1cnJlbnRBbW91bnRTdGFrZWRUb2tlbggFA3BtdAZhbW91bnQEGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJTdGFrZUJhbGFuY2VBbW91bnQJAGQCBQxTdGFrZUJhbGFuY2UIBQNwbXQGYW1vdW50BAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVVc2VyV2Vla0Vhcm5pbmdzVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwUQVXNlcldlZWtFYXJuaW5ncwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQYY3VycmVudEFtb3VudEdvdmVyblRva2VuBAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJHb3Zlcm5Ub2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBIaWdoZXN0UHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCC0hpZ2hlc3RQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJIaWdoZXN0UHVzaEFkZHJlc3MEByRtYXRjaDAJAJ0IAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABBdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcCAAUSSGlnaGVzdFB1c2hBZGRyZXNzBBNQcml6ZUhlaWdodFZhbHVlTmV3AwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwUGaGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlAwkAZgIAgMLXLwUfR292ZXJuVG9rZW5TbWFydENvbnRyYWN0QmFsYW5jZQkAAgECPk5vIGVub3VnaCBHb3Zlcm5Ub2tlbiBJbiBDb250cmFjdCwgUGxlYXNlIGRlcG9zaXQgR292ZXJuVG9rZW5zBAZSZXdhcmQDCQAAAgUMU3Rha2VCYWxhbmNlAAAAkE4DCQBmAgUYTmV3VXNlclN0YWtlVHJhbnNhY3Rpb25zAAoJAGgCCQBoAgCQTgUYTmV3VXNlclN0YWtlVHJhbnNhY3Rpb25zCQBkAgABCQBpAgUUbmV3QW1vdW50U3Rha2VkVG9rZW4FDFN0YWtlQmFsYW5jZQkAaAIAkE4JAGQCAAEJAGkCBRRuZXdBbW91bnRTdGFrZWRUb2tlbgUMU3Rha2VCYWxhbmNlBAxVc2VyQVBZVmFsdWUDCQBmAgUYY3VycmVudEFtb3VudEdvdmVyblRva2VuAAAJAGkCCQBoAgBkBQZSZXdhcmQFGGN1cnJlbnRBbW91bnRHb3Zlcm5Ub2tlbgAABBRuZXdBbW91bnRHb3Zlcm5Ub2tlbgkAZAIFGGN1cnJlbnRBbW91bnRHb3Zlcm5Ub2tlbgUGUmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyR292ZXJuVG9rZW5LZXkFFG5ld0Ftb3VudEdvdmVyblRva2VuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyU3Rha2VkVG9rZW5LZXkFFG5ld0Ftb3VudFN0YWtlZFRva2VuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhVc2VyU3Rha2VUcmFuc2FjdGlvbnNLZXkFGE5ld1VzZXJTdGFrZVRyYW5zYWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgIMU3Rha2VCYWxhbmNlBRJTdGFrZUJhbGFuY2VBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdVc2VyQVBZBQxVc2VyQVBZVmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJMYXN0U3Rha2VCbG9jawUaVXNlckxhc3RTdGFrZUJsb2NrTmV3VmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFCFVzZXJQdXNoBQ1Vc2VyUHVzaFZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQICDE1heERlcG9zaXRlcgURTWF4RGVwb3NpdGVyVmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQICCk1heERlcG9zaXQFD01heERlcG9zaXRWYWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIPTWF4RGVwb3NpdEJsb2NrBRRNYXhEZXBvc2l0QmxvY2tWYWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MFF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBVc2VyV2Vla0Vhcm5pbmdzBRVVc2VyV2Vla0Vhcm5pbmdzVmFsdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZSZXdhcmQFC0dvdmVyblRva2VuBQNuaWwJAAIBAhtDYW4gZGVwb3NpdCBvbmx5IFN0YWtlVG9rZW4BaQETV2l0aGRyYXdTdGFrZWRGdW5kcwEGYW1vdW50BAhXYWl0VGltZQkAaAIAoAsAAQQSVXNlckxhc3RTdGFrZUJsb2NrCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwITX1VzZXJMYXN0U3Rha2VCbG9jawQSVXNlclN0YWtlZFRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIIX1N0YWtpbmcEElVzZXJHb3Zlcm5Ub2tlbktleQkArAICCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIBXwkA2AQBBQtHb3Zlcm5Ub2tlbgQaQ29udHJhY3RXYWxsZXRTdGFrZUJhbGFuY2UJAPAHAgUEdGhpcwULU3Rha2VkVG9rZW4EF1VzZXJMYXN0U3Rha2VCbG9ja1ZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJMYXN0U3Rha2VCbG9jawMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQMU3Rha2VCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMCDFN0YWtlQmFsYW5jZQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQLUHJpemVBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwIHRnVuZEJveAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVSGVpZ2h0VHJhbnNhY3RGdW5kQm94BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtBY3R1YWxEZWxheQQHJG1hdGNoMAkAmggCBQR0aGlzAgVEZWxheQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABBJIaWdoZXN0UHVzaEFkZHJlc3MEByRtYXRjaDAJAJ0IAgUEdGhpcwISSGlnaGVzdFB1c2hBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIABBdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcCAAUSSGlnaGVzdFB1c2hBZGRyZXNzBBNQcml6ZUhlaWdodFZhbHVlTmV3AwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwUGaGVpZ2h0BRBQcml6ZUhlaWdodFZhbHVlBApjdXJyZW50S2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlclN0YWtlZFRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAluZXdBbW91bnQJAGUCBQ1jdXJyZW50QW1vdW50BQZhbW91bnQEElN0YWtlQmFsYW5jZUFtb3VudAkAZQIFDFN0YWtlQmFsYW5jZQUGYW1vdW50BBpVc2VyTGFzdFN0YWtlQmxvY2tOZXdWYWx1ZQMJAAACBRJTdGFrZUJhbGFuY2VBbW91bnQAAAAABRdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQMJAGYCAAAFBmFtb3VudAkAAgECHkNhbid0IHdpdGhkcmF3IG5lZ2F0aXZlIGFtb3VudAMJAGYCAAAFCW5ld0Ftb3VudAkAAgEJAKwCAgJBVXNlciBjYW5ub3Qgd2l0aGRyYXcgbW9yZSB0aGFuIGRlcG9zaXRlZCBmdW5kcywgWW91ciBkZXBvc2l0IGlzOiAJAKQDAQkAaQIFDWN1cnJlbnRBbW91bnQAgMLXLwMJAGYCAIDC1y8JAPAHAgUEdGhpcwULR292ZXJuVG9rZW4JAAIBCQCsAgICH05vdCBlbm91Z2ggVHJvaWthIEluIENvbnRyYWN0OiAJAKQDAQkAaQIJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4AgMLXLwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSVXNlckdvdmVyblRva2VuS2V5AIDC1y8JAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJTdGFrZWRUb2tlbktleQUJbmV3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxTdGFrZUJhbGFuY2UFElN0YWtlQmFsYW5jZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQFE1ByaXplSGVpZ2h0VmFsdWVOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJMYXN0U3Rha2VCbG9jawUaVXNlckxhc3RTdGFrZUJsb2NrTmV3VmFsdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgISSGlnaGVzdFB1c2hBZGRyZXNzBRdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAgMLXLwULR292ZXJuVG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFC1N0YWtlZFRva2VuBQNuaWwBaQEWV2l0aGRyYXdCaWdTdGFrZVJld2FyZAAECFdhaXRUaW1lCQBoAgCgCwABBBhMYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhlfTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrBA9CaWdTdGFrZXJSZXdhcmQJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgpfQmlnU3Rha2VyBBJVc2VyR292ZXJuVG9rZW5LZXkJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAglfRWFybmluZ3MEEkxpbWlXaXRoZHJhd1Jld2FyZAAKBBVVc2VyR292ZXJuVG9rZW5BbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUSVXNlckdvdmVyblRva2VuS2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABB1MYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRhMYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEGUJpZ1N0YWtlclJld2FyZFRvdGFsVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwIUQmlnU3Rha2VyUmV3YXJkVG90YWwDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC1ByaXplQW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMCB0Z1bmRCb3gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFUhlaWdodFRyYW5zYWN0RnVuZEJveAQHJG1hdGNoMAkAmggCBQR0aGlzAgtQcml6ZUhlaWdodAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQUHJpemVIZWlnaHRWYWx1ZQMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAAACBQtQcml6ZUFtb3VudAAABwAAAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFBmhlaWdodAMDCQECIT0CBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkBAiE9AgULUHJpemVBbW91bnQAAAcFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAABAtBY3R1YWxEZWxheQQHJG1hdGNoMAkAmggCBQR0aGlzAgVEZWxheQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQSGlnaGVzdFB1c2hWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAgtIaWdoZXN0UHVzaAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQSSGlnaGVzdFB1c2hBZGRyZXNzBAckbWF0Y2gwCQCdCAIFBHRoaXMCEkhpZ2hlc3RQdXNoQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAQXSGlnaGVzdFB1c2hBZGRyZXNzVmFsdWUDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHAgAFEkhpZ2hlc3RQdXNoQWRkcmVzcwQTUHJpemVIZWlnaHRWYWx1ZU5ldwMDCQBmAgUGaGVpZ2h0CQBkAgkAZAIFEFByaXplSGVpZ2h0VmFsdWUFC0FjdHVhbERlbGF5BQhXYWl0VGltZQkAZgIFEEhpZ2hlc3RQdXNoVmFsdWUAAAcFBmhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAZhbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUPQmlnU3Rha2VyUmV3YXJkAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBJTdGFrZUJhbGFuY2VBbW91bnQJAGUCBRlCaWdTdGFrZXJSZXdhcmRUb3RhbFZhbHVlBQZhbW91bnQEEkJpZ1N0YWtlclJld2FyZFRheAMJAGYCAAAJAGgCCQBpAgUVVXNlckdvdmVyblRva2VuQW1vdW50AOgHCQBlAgDoBwkAaQIJAGgCAOgHCQBlAgUGaGVpZ2h0BR1MYXN0QmlnU3Rha2VyUmV3YXJkQmxvY2tWYWx1ZQkAaAIFEkxpbWlXaXRoZHJhd1Jld2FyZACgCwkAaAIA6AcAgMLXLwkAaAIJAGkCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQA6AcJAGUCAOgHCQBpAgkAaAIA6AcJAGUCBQZoZWlnaHQFHUxhc3RCaWdTdGFrZXJSZXdhcmRCbG9ja1ZhbHVlCQBoAgUSTGltaVdpdGhkcmF3UmV3YXJkAKALAwkAZgIAAAUGYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIfQ2FuJ3Qgd2l0aGRyYXcgbmVnYXRpdmUgYW1vdW50IAkApAMBCQBlAgUVVXNlckdvdmVyblRva2VuQW1vdW50CQBoAgDoBwCAwtcvAgUgLi4uIAkApAMBBQZhbW91bnQDAwMJAGYCCQBoAgDoBwCAwtcvBRVVc2VyR292ZXJuVG9rZW5BbW91bnQGCQBmAgABBQZhbW91bnQGCQBmAgAACQBlAgUVVXNlckdvdmVyblRva2VuQW1vdW50BRJCaWdTdGFrZXJSZXdhcmRUYXgJAAIBCQCsAgICXE5vIEFTSU1JIHJld2FyZCBhdmFpbGFibGUsIG9yIE5vdCBlbm91Z2ggRWFybmVkIFRyb2lrYW4gVG9rZW5zIHRvIGRvIHRyYW5zYWN0aW9uLCB5b3UgaGF2ZTogCQCkAwEJAGkCBRVVc2VyR292ZXJuVG9rZW5BbW91bnQAgMLXLwMJAGYCBRJTdGFrZUJhbGFuY2VBbW91bnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPQmlnU3Rha2VyUmV3YXJkAAAJAMwIAgkBDEludGVnZXJFbnRyeQICFEJpZ1N0YWtlclJld2FyZFRvdGFsBRJTdGFrZUJhbGFuY2VBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFElVzZXJHb3Zlcm5Ub2tlbktleQkAZQIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudAUSQmlnU3Rha2VyUmV3YXJkVGF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtQcml6ZUhlaWdodAUQUHJpemVIZWlnaHRWYWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYTGFzdEJpZ1N0YWtlclJld2FyZEJsb2NrBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgISSGlnaGVzdFB1c2hBZGRyZXNzBRdIaWdoZXN0UHVzaEFkZHJlc3NWYWx1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAULU3Rha2VkVG9rZW4FA25pbAkAAgECUkJhbGFuY2UgRXJyb3IsIFRvdGFsIEJpZyBTdGFrZXJzIGNhbm5vdCBiZSBuZWdhdGl2ZSwgT3BlcmF0aW9uIHdvbid0IGJlIGF1dGhvcml6ZWQBaQETSGFydmVzdEdvdmVyblRvaWtlbgEGYW1vdW50BBpDb250cmFjdFdhbGxldFN0YWtlQmFsYW5jZQkA8AcCBQR0aGlzBQtTdGFrZWRUb2tlbgQSVXNlckdvdmVyblRva2VuS2V5CQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIJX0Vhcm5pbmdzBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gEByRtYXRjaDAJAJoIAgUEdGhpcwILUHJpemVIZWlnaHQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEFByaXplSGVpZ2h0VmFsdWUDAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQAAAgULUHJpemVBbW91bnQAAAcAAAMDCQAAAgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBQZoZWlnaHQDAwkBAiE9AgUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAJAQIhPQIFC1ByaXplQW1vdW50AAAHBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFElVzZXJHb3Zlcm5Ub2tlbktleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQJbmV3QW1vdW50CQBlAgUNY3VycmVudEFtb3VudAUGYW1vdW50AwkAZgIAAAUGYW1vdW50CQACAQIeQ2FuJ3Qgd2l0aGRyYXcgbmVnYXRpdmUgYW1vdW50AwkAZgIAAAUJbmV3QW1vdW50CQACAQkArAICAkFVc2VyIGNhbm5vdCB3aXRoZHJhdyBtb3JlIHRoYW4gZGVwb3NpdGVkIGZ1bmRzLCBZb3VyIGRlcG9zaXQgaXM6IAkApAMBCQBpAgUNY3VycmVudEFtb3VudACAwtcvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJVc2VyR292ZXJuVG9rZW5LZXkFCW5ld0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQFEFByaXplSGVpZ2h0VmFsdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFC0dvdmVyblRva2VuBQNuaWwBaQEKZGVsYXlwcml6ZQAECURlbGF5RGF5cwkAaAIAoAsAAQQIV2FpdFRpbWUJAGgCAKALAAEEElVzZXJHb3Zlcm5Ub2tlbktleQkArAICCQCsAgIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwIBXwkA2AQBBQtHb3Zlcm5Ub2tlbgQYVXNlcldhbGxldFNHb3Zlcm5CYWxhbmNlCQDwBwIJAQdBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwULR292ZXJuVG9rZW4EGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gEByRtYXRjaDAJAJoIAgUEdGhpcwILUHJpemVIZWlnaHQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBQcml6ZUhlaWdodFZhbHVlAwMJAAACBRVIZWlnaHRUcmFuc2FjdEZ1bmRCb3gAAAkAAAIFC1ByaXplQW1vdW50AAAHAAADAwkAAAIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUGaGVpZ2h0AwMJAQIhPQIFFUhlaWdodFRyYW5zYWN0RnVuZEJveAAACQECIT0CBQtQcml6ZUFtb3VudAAABwUVSGVpZ2h0VHJhbnNhY3RGdW5kQm94AAAEEEhpZ2hlc3RQdXNoVmFsdWUEByRtYXRjaDAJAJoIAgUEdGhpcwILSGlnaGVzdFB1c2gDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEEkhpZ2hlc3RQdXNoQWRkcmVzcwQHJG1hdGNoMAkAnQgCBQR0aGlzAhJIaWdoZXN0UHVzaEFkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgAEF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlAwMJAGYCBQZoZWlnaHQJAGQCCQBkAgUQUHJpemVIZWlnaHRWYWx1ZQULQWN0dWFsRGVsYXkFCFdhaXRUaW1lCQBmAgUQSGlnaGVzdFB1c2hWYWx1ZQAABwIABRJIaWdoZXN0UHVzaEFkZHJlc3MEE1ByaXplSGVpZ2h0VmFsdWVOZXcDAwkAZgIFBmhlaWdodAkAZAIJAGQCBRBQcml6ZUhlaWdodFZhbHVlBQtBY3R1YWxEZWxheQUIV2FpdFRpbWUJAGYCBRBIaWdoZXN0UHVzaFZhbHVlAAAHBQZoZWlnaHQFEFByaXplSGVpZ2h0VmFsdWUED0FjdHVhbERlbGF5Q29zdAQHJG1hdGNoMAkAmggCBQR0aGlzAglEZWxheUNvc3QDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAoEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECHEF0dGFjaGVkIHBheW1lbnQgaXMgcmVxdWlyZWQEDURldkJveEJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIGRGV2Qm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAACCAUDcG10B2Fzc2V0SWQFC0dvdmVyblRva2VuBwMJAGYCBQtQcml6ZUFtb3VudAAABBVVc2VyR292ZXJuVG9rZW5BbW91bnQIBQNwbXQGYW1vdW50BAxEZXZCb3hBbW91bnQJAGQCBQ1EZXZCb3hCYWxhbmNlCQBpAgkAaAIIBQNwbXQGYW1vdW50AAUA6AcEDE5ld0RlbGF5Q29zdAMJAAACBQ9BY3R1YWxEZWxheUNvc3QAAACAlOvcAwkAaAIAAgUPQWN0dWFsRGVsYXlDb3N0AwkAZwIFFVVzZXJHb3Zlcm5Ub2tlbkFtb3VudAUMTmV3RGVsYXlDb3N0BAhOZXdEZWxheQkAZAIFC0FjdHVhbERlbGF5BQlEZWxheURheXMJAMwIAgkBDEludGVnZXJFbnRyeQICBURlbGF5BQhOZXdEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgIJRGVsYXlDb3N0BQxOZXdEZWxheUNvc3QJAMwIAgkBDEludGVnZXJFbnRyeQICC1ByaXplSGVpZ2h0BRNQcml6ZUhlaWdodFZhbHVlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgZEZXZCb3gFDERldkJveEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MFF0hpZ2hlc3RQdXNoQWRkcmVzc1ZhbHVlBQNuaWwJAAIBCQCsAgIJAKwCAgJJVG8gZGVsYXkgdGhlIHJlbGVhc2Ugb2YgdGhlIHJld2FyZCBPTkUgREFZIGxhdGVyIHRoYW4gZXhwZWN0ZWQsIHlvdSBuZWVkIAkApAMBBQxOZXdEZWxheUNvc3QCB1RST0lLQXMJAAIBAl5Zb3UgY2Fubm90IGRlbGF5IHRoZSByZXdhcmQgYmVmb3JlIHJld2FyZCBpcyByZWNlaXZlZCEgUGxlYXNlIHdhaXQgdW50aWwgYSByZXdhcmQgaXMgYXZhaWxhYmxlCQACAQIpQ2FuIFVzZSBvbmx5IFRyb2lrYSBUb2tlbiB0byBEZWxheSBSZXdhcmQBaQEKQ2xhaW1Qcml6ZQAEElVzZXJTdGFrZWRUb2tlbktleQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCCF9TdGFraW5nBAhVc2VyUHVzaAkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9QdXNoBBJVc2VyTGFzdFN0YWtlQmxvY2sJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAhNfVXNlckxhc3RTdGFrZUJsb2NrBA1taW5TdGFrZUJsb2NrCQBoAgCgCwAHBAZtaW5yZWYAAwQXQ29udHJhY3RHb3ZUb2tlbkJhbGFuY2UJAPAHAgUEdGhpcwULR292ZXJuVG9rZW4EGkNvbnRyYWN0V2FsbGV0U3Rha2VCYWxhbmNlCQDwBwIFBHRoaXMFC1N0YWtlZFRva2VuBAxTdGFrZUJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwIMU3Rha2VCYWxhbmNlAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZUFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzAgdGdW5kQm94AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABA1Vc2VyUHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCFVzZXJQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBdVc2VyTGFzdFN0YWtlQmxvY2tWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyTGFzdFN0YWtlQmxvY2sDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFVVzZXJTdGFrZWRUb2tlbkFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBRJVc2VyU3Rha2VkVG9rZW5LZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEC0FjdHVhbERlbGF5BAckbWF0Y2gwCQCaCAIFBHRoaXMCBURlbGF5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtQcml6ZVdpbm5lcgQHJG1hdGNoMAkAnQgCBQR0aGlzAhJIaWdoZXN0UHVzaEFkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgAEC1ByaXplSGVpZ2h0BAckbWF0Y2gwCQCaCAIFBHRoaXMCC1ByaXplSGVpZ2h0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBIaWdoZXN0UHVzaFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCC0hpZ2hlc3RQdXNoAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAtVc2VyUmVmc051bQkArAICCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMCBV9yZWZzBBBVc2VyUmVmc051bVZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMFC1VzZXJSZWZzTnVtAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwMJAAACBQtQcml6ZUFtb3VudAAABgkAZgIAgMivoCUFF0NvbnRyYWN0R292VG9rZW5CYWxhbmNlCQACAQJJTm8gcHJpemUgdG8gQ2xhaW0gb3IgTm90IGVub3VnaCBHb3Zlcm4gVG9rZW4gZW4gQ29udHJhY3QgKE1pbiAxMDAgVHJvaWthKQMJAQIhPQIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwULUHJpemVXaW5uZXIJAAIBAjZZb3UgYXJlIG5vdCB0aGUgd2lubmVyIGhlbmNlIGNhbm5vdCBjbGFpbSB0aGUgcmV3YXJkICADAwkAZgIAgMLXLwUVVXNlclN0YWtlZFRva2VuQW1vdW50CQBmAgUNbWluU3Rha2VCbG9jawUXVXNlckxhc3RTdGFrZUJsb2NrVmFsdWUHCQACAQIuWW91IGhhdmUgdG8gU3Rha2UgQVNJTUkgVG9rZW4gdG8gY2xhaW0gcmV3YXJkIAMDCQBmAgUGaGVpZ2h0CQBkAgULUHJpemVIZWlnaHQFC0FjdHVhbERlbGF5CQBnAgUNVXNlclB1c2hWYWx1ZQUQSGlnaGVzdFB1c2hWYWx1ZQcDCQBnAgUQVXNlclJlZnNOdW1WYWx1ZQUGbWlucmVmCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtQcml6ZVdpbm5lcgULUHJpemVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQICB0Z1bmRCb3gAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgILSGlnaGVzdFB1c2gAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUIVXNlclB1c2gAAAkAzAgCCQELU3RyaW5nRW50cnkCAhJIaWdoZXN0UHVzaEFkZHJlc3MCAAkAzAgCCQEMSW50ZWdlckVudHJ5AgILUHJpemVIZWlnaHQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIFRGVsYXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJRGVsYXlDb3N0AAAJAMwIAgkBC1N0cmluZ0VudHJ5AgIKTGFzdFdpbm5lcgULUHJpemVXaW5uZXIJAMwIAgkBDEludGVnZXJFbnRyeQICCUxhc3RQcml6ZQULUHJpemVBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtQcml6ZUFtb3VudAULU3Rha2VkVG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAICU69wDBQtHb3Zlcm5Ub2tlbgUDbmlsCQACAQkArAICCQCsAgICEllvdSBoYXZlIHRvIGhhdmUgIAkApAMBBQZtaW5yZWYCRyAgcmVmZXJyYWxzIGFscmVhZHkgc3Rha2luZyBmb3IgYSBtaW5pbXVtIG9mIDEwIGRheXMgdG8gQ2xhaW0gdGhlIHByaXplCQACAQJhWW91IGhhdmUgdG8gYmUgdGhlIHVzZXIgd2l0aCB0aGUgaGlnaGVzdCBQdXNoIGFuZCB3YWl0IHRpbGwgY291bnRvd24gaXMgZmluaXNoZWQsIHRvIGNsYWltIFJld2FyZAFpAQlBZGRtZW50b3IBBk1lbnRvcgQRVXNlck1lbnRvckFkZHJlc3MJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAgdfTWVudG9yAwkBAiE9AgUGTWVudG9yAgAJAMwIAgkBC1N0cmluZ0VudHJ5AgURVXNlck1lbnRvckFkZHJlc3MFBk1lbnRvcgUDbmlsCQACAQIgTWVudG9yJ3MgQWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkBaQEQVXBkYXRlVHdpdHRzQ29zdAIUTGlrZVBhY2thZ2VBU0lNSUNvc3QWTGlrZVBhY2thZ2VUUk9JS0FOQ29zdAMJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFCWRBcHBBZG1pbgkAzAgCCQEMSW50ZWdlckVudHJ5AgIUTGlrZVBhY2thZ2VBU0lNSUNvc3QFFExpa2VQYWNrYWdlQVNJTUlDb3N0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZMaWtlUGFja2FnZVRST0lLQU5Db3N0BRZMaWtlUGFja2FnZVRST0lLQU5Db3N0BQNuaWwJAAIBAhhPbmx5IGF2YWlsYWJsZSBmb3IgQWRtaW4BaQEPR2V0TGlrZXNQYWNrYWdlAg1Ud2l0dGVyVXNlcklkB1R3aXR0SWQEG0xpa2VQYWNrYWdlVFJPSUtBTkNvc3RWYWx1ZQQHJG1hdGNoMAkAmggCBQR0aGlzAhZMaWtlUGFja2FnZVRST0lLQU5Db3N0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlBAckbWF0Y2gwCQCaCAIFBHRoaXMCFExpa2VQYWNrYWdlQVNJTUlDb3N0AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkAwMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFC1N0YWtlZFRva2VuCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBQtHb3Zlcm5Ub2tlbgcDCQBnAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFGUxpa2VQYWNrYWdlQVNJTUlDb3N0VmFsdWUDCQBnAggJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFG0xpa2VQYWNrYWdlVFJPSUtBTkNvc3RWYWx1ZQQKSW5mbHVlbmNlcgkArAICCQCsAgIJAKQDAQUNVHdpdHRlclVzZXJJZAIMX1R3aXR0Mkxpa2VfCQCkAwEFB1R3aXR0SWQEEUluZmx1ZW5jZXJCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMFCkluZmx1ZW5jZXIDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAADCQAAAgURSW5mbHVlbmNlckJhbGFuY2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKQDAQUNVHdpdHRlclVzZXJJZAIMX1R3aXR0Mkxpa2VfCQCkAwEFB1R3aXR0SWQJAGkCCQBoAgBfBRlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlAGQJAMwIAgkBDEludGVnZXJFbnRyeQICEExpa2VUd2l0dHNEZXZCb3gJAGkCCQBoAgAFBRlMaWtlUGFja2FnZUFTSU1JQ29zdFZhbHVlAGQFA25pbAkAAgECZkNhbm5vdCBhY3F1aXJlIGEgbmV3IHBhY2thZ2UsIHRoZSBwcmlvciBsaWtlIHBhY2thZ2UgaGFzIHRvIGJlIGRyYWluZWQgdG8gYmUgYWJsZSB0byBhY3F1aXJlIGEgbmV3IG9uZQkAAgEJAKwCAgIaVFJPSUtBTiBBbW91bnQgc2hvdWxkIGJlIDoJAKQDAQkAaQIFGUxpa2VQYWNrYWdlQVNJTUlDb3N0VmFsdWUAgMLXLwkAAgEJAKwCAgIYQVNJTUkgQW1vdW50IHNob3VsZCBiZSA6CQCkAwEJAGkCBRtMaWtlUGFja2FnZVRST0lLQU5Db3N0VmFsdWUAgMLXLwkAAgECMFBheW1lbnRzIHNob3VsZCBiZSBib3RoIEFTSU1JIGFuZCBUUk9JS0FOIHRva2VucwFpARdHZXRNeUxpa2VkVHdpdHRzUmV3YXJkcwEGVXNlcklkBBhVc2VyRWFybmVkTGlrZVR3aXR0QVNJTUkEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICBQZVc2VySWQCDF9MaWtlX0Ftb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQcVXNlckVhcm5lZGRBcHBSVFR3aXR0VFJPSUtBTgQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIFBlVzZXJJZAIWX1Ryb2lrYW5kQXBwX1JUX0Ftb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAMDCQBnAgUYVXNlckVhcm5lZExpa2VUd2l0dEFTSU1JCQBoAgABAIDC1y8JAGcCBRxVc2VyRWFybmVkZEFwcFJUVHdpdHRUUk9JS0FOCQBoAgABAIDC1y8HCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBlVzZXJJZAIWX1Ryb2lrYW5kQXBwX1JUX0Ftb3VudAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBlVzZXJJZAIMX0xpa2VfQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRhVc2VyRWFybmVkTGlrZVR3aXR0QVNJTUkFC1N0YWtlZFRva2VuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUcVXNlckVhcm5lZGRBcHBSVFR3aXR0VFJPSUtBTgULR292ZXJuVG9rZW4FA25pbAkAAgECO01pbmltdW0gZWFybmluZ3MgdG8gd2l0aGRyYXcgYXJlOiAxMDAgQVNJTUkgYW5kIDUwIFRyb2lrYW5zAWkBFUxpbmtUd2l0dGVyQWNjMldhbGxldAENVHdpdHRlclVzZXJJZAQTVHdpdHRlckxpbmtlZFdhbGxldAQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIFDVR3aXR0ZXJVc2VySWQCB19XYWxsZXQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgROb25lAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUTVHdpdHRlckxpbmtlZFdhbGxldAkAAgECOllvdSBhbHJlYWR5IGhhdmUgeW91ciB3YWxsZXQgbGlua2VkIHRvIHRoZSBUd2l0dGVyIGFjY291bnQDAwkBAiE9AgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBRNUd2l0dGVyTGlua2VkV2FsbGV0CQECIT0CBRNUd2l0dGVyTGlua2VkV2FsbGV0AgROb25lBwkAAgECSVRoZSB3YWxsZXQgeW91IGFyZSB1c2luZyBpcyBub3QgdGhlIGxpbmtlZCBXYWxsZXQgdG8gdGhpcyBUd2l0dGVyIGFjY291bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQ1Ud2l0dGVyVXNlcklkAgdfV2FsbGV0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFA25pbACfNYIx", "height": 2146854, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7db296TdSDtxQ1aGsiUKGe6d1ajzxETUwyGbtqQDs644 Next: QezNWzwaroNcHwRVJK6jFzFMWYwfTtyErcF8cXepTnT Diff:
OldNewDifferences
55
66 let GovernToken = base58'6ZPMzZseuYoMP4ByozJpVxbugXBobwJYF22zVjW5JjN'
77
8-let LikePackageASIMICost = (1 * 100000000)
9-
10-let LikePackageTROIKANCost = (5 * 100000000)
8+let dAppAdmin = "3P74buHt98BnojFcaREJZtb98KDyUmZGemJ"
119
1210 @Callable(i)
1311 func DevWithdraw () = {
1412 let currentKey = toBase58String(i.caller.bytes)
15- if ((currentKey == "3P74buHt98BnojFcaREJZtb98KDyUmZGemJ"))
13+ if ((currentKey == dAppAdmin))
1614 then {
1715 let DevBoxAmount = match getInteger(this, "DevBox") {
1816 case a: Int =>
872870
873871
874872 @Callable(i)
873+func UpdateTwittsCost (LikePackageASIMICost,LikePackageTROIKANCost) = if ((toBase58String(i.caller.bytes) == dAppAdmin))
874+ then [IntegerEntry("LikePackageASIMICost", LikePackageASIMICost), IntegerEntry("LikePackageTROIKANCost", LikePackageTROIKANCost)]
875+ else throw("Only available for Admin")
876+
877+
878+
879+@Callable(i)
875880 func GetLikesPackage (TwitterUserId,TwittId) = {
876881 let LikePackageTROIKANCostValue = match getInteger(this, "LikePackageTROIKANCost") {
877882 case a: Int =>
902907 0
903908 }
904909 if ((InfluencerBalance == 0))
905- then [IntegerEntry(((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId)), ((95 * LikePackageASIMICost) / 100)), IntegerEntry("LikeTwittsDevBox", ((5 * LikePackageASIMICost) / 100))]
910+ then [IntegerEntry(((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId)), ((95 * LikePackageASIMICostValue) / 100)), IntegerEntry("LikeTwittsDevBox", ((5 * LikePackageASIMICostValue) / 100))]
906911 else throw("Cannot acquire a new package, the prior like package has to be drained to be able to acquire a new one")
907912 }
908- else throw(("TROIKAN Amount should be :" + toString((LikePackageASIMICost / 100000000))))
909- else throw(("ASIMI Amount should be :" + toString((LikePackageTROIKANCost / 100000000))))
913+ else throw(("TROIKAN Amount should be :" + toString((LikePackageASIMICostValue / 100000000))))
914+ else throw(("ASIMI Amount should be :" + toString((LikePackageTROIKANCostValue / 100000000))))
910915 else throw("Payments should be both ASIMI and TROIKAN tokens")
911916 }
912917
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
8-let LikePackageASIMICost = (1 * 100000000)
9-
10-let LikePackageTROIKANCost = (5 * 100000000)
8+let dAppAdmin = "3P74buHt98BnojFcaREJZtb98KDyUmZGemJ"
119
1210 @Callable(i)
1311 func DevWithdraw () = {
1412 let currentKey = toBase58String(i.caller.bytes)
15- if ((currentKey == "3P74buHt98BnojFcaREJZtb98KDyUmZGemJ"))
13+ if ((currentKey == dAppAdmin))
1614 then {
1715 let DevBoxAmount = match getInteger(this, "DevBox") {
1816 case a: Int =>
1917 a
2018 case _ =>
2119 0
2220 }
2321 if ((0 > DevBoxAmount))
2422 then throw("Not enough balance")
2523 else [IntegerEntry("DevBox", 0), ScriptTransfer(i.caller, DevBoxAmount, GovernToken)]
2624 }
2725 else throw("You cannot withdraw as your are not the Dev.")
2826 }
2927
3028
3129
3230 @Callable(i)
3331 func WithdrawWeeklyEarning () = {
3432 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
3533 let MaxDepositer = match getString(this, "MaxDepositer") {
3634 case a: String =>
3735 a
3836 case _ =>
3937 ""
4038 }
4139 let UserWeeklyEarnings = (toBase58String(i.caller.bytes) + "_WeekEarning")
4240 let StakeBalance = match getInteger(this, "StakeBalance") {
4341 case a: Int =>
4442 a
4543 case _ =>
4644 0
4745 }
4846 let PrizeAmount = match getInteger(this, "FundBox") {
4947 case a: Int =>
5048 a
5149 case _ =>
5250 0
5351 }
5452 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
5553 case a: Int =>
5654 a
5755 case _ =>
5856 0
5957 }
6058 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
6159 then (PrizeAmount == 0)
6260 else false)
6361 then 0
6462 else if (if ((HeightTransactFundBox == 0))
6563 then (PrizeAmount != 0)
6664 else false)
6765 then height
6866 else if (if ((HeightTransactFundBox != 0))
6967 then (PrizeAmount != 0)
7068 else false)
7169 then HeightTransactFundBox
7270 else 0
7371 let currentKey = toBase58String(i.caller.bytes)
7472 let newAmount = match getInteger(this, UserWeeklyEarnings) {
7573 case a: Int =>
7674 a
7775 case _ =>
7876 0
7977 }
8078 if ((0 > newAmount))
8179 then throw("Can't withdraw negative amount")
8280 else if ((0 > newAmount))
8381 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((newAmount / 100000000))))
8482 else [IntegerEntry(UserWeeklyEarnings, 0), IntegerEntry("PrizeHeight", PrizeHeightValue), IntegerEntry("MaxDeposit", 0), ScriptTransfer(i.caller, newAmount, StakedToken)]
8583 }
8684
8785
8886
8987 @Callable(i)
9088 func PushReward () = {
9189 let minPushBlock = 10
9290 let minStakeBlock = (7 * 1440)
9391 let DelayAfterPush = 60
9492 let WaitTime = (1440 * 1)
9593 let minref = 3
9694 let FirstPushTimer = (7 * 1440)
9795 let userWalletGovernBalance = assetBalance(Address(i.caller.bytes), GovernToken)
9896 let pmt = if ((size(i.payments) == 1))
9997 then i.payments[0]
10098 else throw("Attached payment is required")
10199 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
102100 let UserLastPushOldValue = match getInteger(this, UserPush) {
103101 case a: Int =>
104102 a
105103 case _ =>
106104 0
107105 }
108106 let UserRefsNum = (toBase58String(i.caller.bytes) + "_refs")
109107 let UserRefsNumValue = match getInteger(this, UserRefsNum) {
110108 case a: Int =>
111109 a
112110 case _ =>
113111 0
114112 }
115113 let HighestPushValue = match getInteger(this, "HighestPush") {
116114 case a: Int =>
117115 a
118116 case _ =>
119117 0
120118 }
121119 if ((userWalletGovernBalance > pmt.amount))
122120 then if (if (((pmt.amount + UserLastPushOldValue) > HighestPushValue))
123121 then (pmt.assetId == GovernToken)
124122 else false)
125123 then {
126124 let UserLastPushBlock = (toBase58String(i.caller.bytes) + "_UserLastPushBlock")
127125 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
128126 let UserStake = (toBase58String(i.caller.bytes) + "_Staking")
129127 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
130128 let StakeBalance = match getInteger(this, "StakeBalance") {
131129 case a: Int =>
132130 a
133131 case _ =>
134132 0
135133 }
136134 let PrizeAmount = match getInteger(this, "FundBox") {
137135 case a: Int =>
138136 a
139137 case _ =>
140138 0
141139 }
142140 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
143141 case a: Int =>
144142 a
145143 case _ =>
146144 0
147145 }
148146 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
149147 then (PrizeAmount == 0)
150148 else false)
151149 then 0
152150 else if (if ((HeightTransactFundBox == 0))
153151 then (PrizeAmount != 0)
154152 else false)
155153 then height
156154 else if (if ((HeightTransactFundBox != 0))
157155 then (PrizeAmount != 0)
158156 else false)
159157 then HeightTransactFundBox
160158 else 0
161159 let ActualDelay = match getInteger(this, "Delay") {
162160 case a: Int =>
163161 a
164162 case _ =>
165163 0
166164 }
167165 let HighestPushAddress = match getInteger(this, "HighestPushAddress") {
168166 case a: Int =>
169167 a
170168 case _ =>
171169 0
172170 }
173171 let UserLastPushBlockValue = match getInteger(this, UserLastPushBlock) {
174172 case a: Int =>
175173 a
176174 case _ =>
177175 0
178176 }
179177 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
180178 case a: Int =>
181179 a
182180 case _ =>
183181 0
184182 }
185183 let UserStakeValue = match getInteger(this, UserStake) {
186184 case a: Int =>
187185 a
188186 case _ =>
189187 0
190188 }
191189 let DevBoxBalance = match getInteger(this, "DevBox") {
192190 case a: Int =>
193191 a
194192 case _ =>
195193 0
196194 }
197195 let DevBoxAmount = (DevBoxBalance + ((pmt.amount * 5) / 1000))
198196 let UserPushvalue = (pmt.amount + UserLastPushOldValue)
199197 let NewDelay = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
200198 then (HighestPushValue > 0)
201199 else false)
202200 then FirstPushTimer
203201 else (ActualDelay + DelayAfterPush)
204202 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + NewDelay) + WaitTime)))
205203 then (HighestPushValue > 0)
206204 else false)
207205 then ""
208206 else HighestPushAddress
209207 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + NewDelay) + WaitTime)))
210208 then (HighestPushValue > 0)
211209 else false)
212210 then height
213211 else PrizeHeightValue
214212 if (if ((UserPushvalue > 0))
215213 then ((height - UserLastStakeBlockValue) > minStakeBlock)
216214 else false)
217215 then if (((height - UserLastPushBlockValue) > minPushBlock))
218216 then if ((UserStakeValue > 0))
219217 then if ((UserPushvalue > HighestPushValue))
220218 then if ((PrizeAmount > 0))
221219 then if (if (if (if (((PrizeHeightValueNew + NewDelay) >= height))
222220 then true
223221 else (height >= ((PrizeHeightValueNew + NewDelay) + WaitTime)))
224222 then (HighestPushValue > 0)
225223 else false)
226224 then true
227225 else (HighestPushValue == 0))
228226 then if ((UserRefsNumValue >= minref))
229227 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)]
230228 else throw((("You have to have " + toString(minref)) + " referrals already staking for a minimum of 10 days, to push"))
231229 else {
232230 let txt = if ((HighestPushValue > 0))
233231 then "You cannot Push after rewarding Prize and before One day has passed after award"
234232 else "Unexpected error"
235233 throw(txt)
236234 }
237235 else throw("You cannot push before the reward is unlocked, no reward has been detected yet")
238236 else throw("Your push in troikan token, should be Higher than last Highest Push")
239237 else throw("To be able to participate in Pushing for the reward you need to Stake ASIMIs in the dApp")
240238 else throw("You have to wait 10min before you can make a new Push")
241239 else throw(("Your Push dot not comply one of the following conditions: " + "1. Positive Value for Push in Troikan Toke
242240 2. Must Staked ASIMI Token for a minimum of week "))
243241 }
244242 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"))
245243 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 !")
246244 }
247245
248246
249247
250248 @Callable(i)
251249 func Stake () = {
252250 let WaitTime = (1440 * 1)
253251 let pmt = if ((size(i.payments) == 1))
254252 then i.payments[0]
255253 else throw("Attached payment is required")
256254 if (if ((pmt.amount > 0))
257255 then (pmt.assetId == StakedToken)
258256 else false)
259257 then {
260258 let GovernTokenSmartContractBalance = assetBalance(this, GovernToken)
261259 let UserAPY = (toBase58String(i.caller.bytes) + "_APY")
262260 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
263261 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
264262 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
265263 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
266264 let UserStakeTransactionsKey = (toBase58String(i.caller.bytes) + "_StakedTransactions")
267265 let AddressHeight = (toBase58String(i.caller.bytes) + "_PrizeHeight")
268266 let UserWeekEarnings = (toBase58String(i.caller.bytes) + "_WeekEarning")
269267 let UserStakeTransactions = match getInteger(this, UserStakeTransactionsKey) {
270268 case a: Int =>
271269 a
272270 case _ =>
273271 0
274272 }
275273 let MaxDepositer = match getString(this, "MaxDepositer") {
276274 case a: String =>
277275 a
278276 case _ =>
279277 ""
280278 }
281279 let MaxDepositBlock = match getInteger(this, "MaxDepositBlock") {
282280 case a: Int =>
283281 a
284282 case _ =>
285283 0
286284 }
287285 let MaxDeposit = match getInteger(this, "MaxDeposit") {
288286 case a: Int =>
289287 a
290288 case _ =>
291289 0
292290 }
293291 let MaxDepositerValue = if ((pmt.amount > MaxDeposit))
294292 then toBase58String(i.caller.bytes)
295293 else MaxDepositer
296294 let MaxDepositValue = if ((pmt.amount > MaxDeposit))
297295 then pmt.amount
298296 else MaxDeposit
299297 let MaxDepositBlockValue = if ((pmt.amount > MaxDeposit))
300298 then height
301299 else MaxDepositBlock
302300 let UserPushValue = match getInteger(this, UserPush) {
303301 case a: Int =>
304302 a
305303 case _ =>
306304 0
307305 }
308306 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
309307 case a: Int =>
310308 a
311309 case _ =>
312310 0
313311 }
314312 let UserLastStakeBlockNewValue = if ((UserLastStakeBlockValue == 0))
315313 then height
316314 else UserLastStakeBlockValue
317315 let NewUserStakeTransactions = (UserStakeTransactions + 1)
318316 let currentAmountStakedToken = match getInteger(this, UserStakedTokenKey) {
319317 case a: Int =>
320318 a
321319 case _ =>
322320 0
323321 }
324322 let newAmountStakedToken = (currentAmountStakedToken + pmt.amount)
325323 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
326324 let StakeBalance = match getInteger(this, "StakeBalance") {
327325 case a: Int =>
328326 a
329327 case _ =>
330328 0
331329 }
332330 let StakeBalanceAmount = (StakeBalance + pmt.amount)
333331 let PrizeAmount = match getInteger(this, "FundBox") {
334332 case a: Int =>
335333 a
336334 case _ =>
337335 0
338336 }
339337 let UserWeekEarningsValue = match getInteger(this, UserWeekEarnings) {
340338 case a: Int =>
341339 a
342340 case _ =>
343341 0
344342 }
345343 let currentAmountGovernToken = match getInteger(this, UserGovernTokenKey) {
346344 case a: Int =>
347345 a
348346 case _ =>
349347 0
350348 }
351349 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
352350 case a: Int =>
353351 a
354352 case _ =>
355353 0
356354 }
357355 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
358356 then (PrizeAmount == 0)
359357 else false)
360358 then 0
361359 else if (if ((HeightTransactFundBox == 0))
362360 then (PrizeAmount != 0)
363361 else false)
364362 then height
365363 else if (if ((HeightTransactFundBox != 0))
366364 then (PrizeAmount != 0)
367365 else false)
368366 then HeightTransactFundBox
369367 else 0
370368 let ActualDelay = match getInteger(this, "Delay") {
371369 case a: Int =>
372370 a
373371 case _ =>
374372 0
375373 }
376374 let HighestPushValue = match getInteger(this, "HighestPush") {
377375 case a: Int =>
378376 a
379377 case _ =>
380378 0
381379 }
382380 let HighestPushAddress = match getString(this, "HighestPushAddress") {
383381 case a: String =>
384382 a
385383 case _ =>
386384 ""
387385 }
388386 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
389387 then (HighestPushValue > 0)
390388 else false)
391389 then ""
392390 else HighestPushAddress
393391 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
394392 then (HighestPushValue > 0)
395393 else false)
396394 then height
397395 else PrizeHeightValue
398396 if ((100000000 > GovernTokenSmartContractBalance))
399397 then throw("No enough GovernToken In Contract, Please deposit GovernTokens")
400398 else {
401399 let Reward = if ((StakeBalance == 0))
402400 then 10000
403401 else if ((NewUserStakeTransactions > 10))
404402 then ((10000 * NewUserStakeTransactions) * (1 + (newAmountStakedToken / StakeBalance)))
405403 else (10000 * (1 + (newAmountStakedToken / StakeBalance)))
406404 let UserAPYValue = if ((currentAmountGovernToken > 0))
407405 then ((100 * Reward) / currentAmountGovernToken)
408406 else 0
409407 let newAmountGovernToken = (currentAmountGovernToken + Reward)
410408 [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)]
411409 }
412410 }
413411 else throw("Can deposit only StakeToken")
414412 }
415413
416414
417415
418416 @Callable(i)
419417 func WithdrawStakedFunds (amount) = {
420418 let WaitTime = (1440 * 1)
421419 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
422420 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
423421 let UserGovernTokenKey = ((toBase58String(i.caller.bytes) + "_") + toBase58String(GovernToken))
424422 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
425423 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
426424 case a: Int =>
427425 a
428426 case _ =>
429427 0
430428 }
431429 let StakeBalance = match getInteger(this, "StakeBalance") {
432430 case a: Int =>
433431 a
434432 case _ =>
435433 0
436434 }
437435 let PrizeAmount = match getInteger(this, "FundBox") {
438436 case a: Int =>
439437 a
440438 case _ =>
441439 0
442440 }
443441 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
444442 case a: Int =>
445443 a
446444 case _ =>
447445 0
448446 }
449447 let ActualDelay = match getInteger(this, "Delay") {
450448 case a: Int =>
451449 a
452450 case _ =>
453451 0
454452 }
455453 let HighestPushValue = match getInteger(this, "HighestPush") {
456454 case a: Int =>
457455 a
458456 case _ =>
459457 0
460458 }
461459 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
462460 then (PrizeAmount == 0)
463461 else false)
464462 then 0
465463 else if (if ((HeightTransactFundBox == 0))
466464 then (PrizeAmount != 0)
467465 else false)
468466 then height
469467 else if (if ((HeightTransactFundBox != 0))
470468 then (PrizeAmount != 0)
471469 else false)
472470 then HeightTransactFundBox
473471 else 0
474472 let HighestPushAddress = match getString(this, "HighestPushAddress") {
475473 case a: String =>
476474 a
477475 case _ =>
478476 ""
479477 }
480478 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
481479 then (HighestPushValue > 0)
482480 else false)
483481 then ""
484482 else HighestPushAddress
485483 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
486484 then (HighestPushValue > 0)
487485 else false)
488486 then height
489487 else PrizeHeightValue
490488 let currentKey = toBase58String(i.caller.bytes)
491489 let currentAmount = match getInteger(this, UserStakedTokenKey) {
492490 case a: Int =>
493491 a
494492 case _ =>
495493 0
496494 }
497495 let newAmount = (currentAmount - amount)
498496 let StakeBalanceAmount = (StakeBalance - amount)
499497 let UserLastStakeBlockNewValue = if ((StakeBalanceAmount == 0))
500498 then 0
501499 else UserLastStakeBlockValue
502500 if ((0 > amount))
503501 then throw("Can't withdraw negative amount")
504502 else if ((0 > newAmount))
505503 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((currentAmount / 100000000))))
506504 else if ((100000000 > assetBalance(this, GovernToken)))
507505 then throw(("Not enough Troika In Contract: " + toString((assetBalance(this, GovernToken) / 100000000))))
508506 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)]
509507 }
510508
511509
512510
513511 @Callable(i)
514512 func WithdrawBigStakeReward () = {
515513 let WaitTime = (1440 * 1)
516514 let LastBigStakerRewardBlock = (toBase58String(i.caller.bytes) + "_LastBigStakerRewardBlock")
517515 let BigStakerReward = (toBase58String(i.caller.bytes) + "_BigStaker")
518516 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
519517 let LimiWithdrawReward = 10
520518 let UserGovernTokenAmount = match getInteger(this, UserGovernTokenKey) {
521519 case a: Int =>
522520 a
523521 case _ =>
524522 0
525523 }
526524 let LastBigStakerRewardBlockValue = match getInteger(this, LastBigStakerRewardBlock) {
527525 case a: Int =>
528526 a
529527 case _ =>
530528 0
531529 }
532530 let BigStakerRewardTotalValue = match getInteger(this, "BigStakerRewardTotal") {
533531 case a: Int =>
534532 a
535533 case _ =>
536534 0
537535 }
538536 let PrizeAmount = match getInteger(this, "FundBox") {
539537 case a: Int =>
540538 a
541539 case _ =>
542540 0
543541 }
544542 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
545543 case a: Int =>
546544 a
547545 case _ =>
548546 0
549547 }
550548 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
551549 then (PrizeAmount == 0)
552550 else false)
553551 then 0
554552 else if (if ((HeightTransactFundBox == 0))
555553 then (PrizeAmount != 0)
556554 else false)
557555 then height
558556 else if (if ((HeightTransactFundBox != 0))
559557 then (PrizeAmount != 0)
560558 else false)
561559 then HeightTransactFundBox
562560 else 0
563561 let ActualDelay = match getInteger(this, "Delay") {
564562 case a: Int =>
565563 a
566564 case _ =>
567565 0
568566 }
569567 let HighestPushValue = match getInteger(this, "HighestPush") {
570568 case a: Int =>
571569 a
572570 case _ =>
573571 0
574572 }
575573 let HighestPushAddress = match getString(this, "HighestPushAddress") {
576574 case a: String =>
577575 a
578576 case _ =>
579577 ""
580578 }
581579 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
582580 then (HighestPushValue > 0)
583581 else false)
584582 then ""
585583 else HighestPushAddress
586584 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
587585 then (HighestPushValue > 0)
588586 else false)
589587 then height
590588 else PrizeHeightValue
591589 let currentKey = toBase58String(i.caller.bytes)
592590 let amount = match getInteger(this, BigStakerReward) {
593591 case a: Int =>
594592 a
595593 case _ =>
596594 0
597595 }
598596 let StakeBalanceAmount = (BigStakerRewardTotalValue - amount)
599597 let BigStakerRewardTax = if ((0 > ((UserGovernTokenAmount / 1000) * (1000 - ((1000 * (height - LastBigStakerRewardBlockValue)) / (LimiWithdrawReward * 1440))))))
600598 then (1000 * 100000000)
601599 else ((UserGovernTokenAmount / 1000) * (1000 - ((1000 * (height - LastBigStakerRewardBlockValue)) / (LimiWithdrawReward * 1440))))
602600 if ((0 > amount))
603601 then throw(((("Can't withdraw negative amount " + toString((UserGovernTokenAmount - (1000 * 100000000)))) + " ... ") + toString(amount)))
604602 else if (if (if (((1000 * 100000000) > UserGovernTokenAmount))
605603 then true
606604 else (1 > amount))
607605 then true
608606 else (0 > (UserGovernTokenAmount - BigStakerRewardTax)))
609607 then throw(("No ASIMI reward available, or Not enough Earned Troikan Tokens to do transaction, you have: " + toString((UserGovernTokenAmount / 100000000))))
610608 else if ((StakeBalanceAmount > 0))
611609 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)]
612610 else throw("Balance Error, Total Big Stakers cannot be negative, Operation won't be authorized")
613611 }
614612
615613
616614
617615 @Callable(i)
618616 func HarvestGovernToiken (amount) = {
619617 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
620618 let UserGovernTokenKey = (toBase58String(i.caller.bytes) + "_Earnings")
621619 let StakeBalance = match getInteger(this, "StakeBalance") {
622620 case a: Int =>
623621 a
624622 case _ =>
625623 0
626624 }
627625 let PrizeAmount = match getInteger(this, "FundBox") {
628626 case a: Int =>
629627 a
630628 case _ =>
631629 0
632630 }
633631 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
634632 case a: Int =>
635633 a
636634 case _ =>
637635 0
638636 }
639637 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
640638 then (PrizeAmount == 0)
641639 else false)
642640 then 0
643641 else if (if ((HeightTransactFundBox == 0))
644642 then (PrizeAmount != 0)
645643 else false)
646644 then height
647645 else if (if ((HeightTransactFundBox != 0))
648646 then (PrizeAmount != 0)
649647 else false)
650648 then HeightTransactFundBox
651649 else 0
652650 let currentKey = toBase58String(i.caller.bytes)
653651 let currentAmount = match getInteger(this, UserGovernTokenKey) {
654652 case a: Int =>
655653 a
656654 case _ =>
657655 0
658656 }
659657 let newAmount = (currentAmount - amount)
660658 if ((0 > amount))
661659 then throw("Can't withdraw negative amount")
662660 else if ((0 > newAmount))
663661 then throw(("User cannot withdraw more than deposited funds, Your deposit is: " + toString((currentAmount / 100000000))))
664662 else [IntegerEntry(UserGovernTokenKey, newAmount), IntegerEntry("PrizeHeight", PrizeHeightValue), ScriptTransfer(i.caller, amount, GovernToken)]
665663 }
666664
667665
668666
669667 @Callable(i)
670668 func delayprize () = {
671669 let DelayDays = (1440 * 1)
672670 let WaitTime = (1440 * 1)
673671 let UserGovernTokenKey = ((toBase58String(i.caller.bytes) + "_") + toBase58String(GovernToken))
674672 let UserWalletSGovernBalance = assetBalance(Address(i.caller.bytes), GovernToken)
675673 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
676674 let StakeBalance = match getInteger(this, "StakeBalance") {
677675 case a: Int =>
678676 a
679677 case _ =>
680678 0
681679 }
682680 let PrizeAmount = match getInteger(this, "FundBox") {
683681 case a: Int =>
684682 a
685683 case _ =>
686684 0
687685 }
688686 let HeightTransactFundBox = match getInteger(this, "PrizeHeight") {
689687 case a: Int =>
690688 a
691689 case _ =>
692690 0
693691 }
694692 let ActualDelay = match getInteger(this, "Delay") {
695693 case a: Int =>
696694 a
697695 case _ =>
698696 0
699697 }
700698 let PrizeHeightValue = if (if ((HeightTransactFundBox == 0))
701699 then (PrizeAmount == 0)
702700 else false)
703701 then 0
704702 else if (if ((HeightTransactFundBox == 0))
705703 then (PrizeAmount != 0)
706704 else false)
707705 then height
708706 else if (if ((HeightTransactFundBox != 0))
709707 then (PrizeAmount != 0)
710708 else false)
711709 then HeightTransactFundBox
712710 else 0
713711 let HighestPushValue = match getInteger(this, "HighestPush") {
714712 case a: Int =>
715713 a
716714 case _ =>
717715 0
718716 }
719717 let HighestPushAddress = match getString(this, "HighestPushAddress") {
720718 case a: String =>
721719 a
722720 case _ =>
723721 ""
724722 }
725723 let HighestPushAddressValue = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
726724 then (HighestPushValue > 0)
727725 else false)
728726 then ""
729727 else HighestPushAddress
730728 let PrizeHeightValueNew = if (if ((height > ((PrizeHeightValue + ActualDelay) + WaitTime)))
731729 then (HighestPushValue > 0)
732730 else false)
733731 then height
734732 else PrizeHeightValue
735733 let ActualDelayCost = match getInteger(this, "DelayCost") {
736734 case a: Int =>
737735 a
738736 case _ =>
739737 10
740738 }
741739 let pmt = if ((size(i.payments) == 1))
742740 then i.payments[0]
743741 else throw("Attached payment is required")
744742 let DevBoxBalance = match getInteger(this, "DevBox") {
745743 case a: Int =>
746744 a
747745 case _ =>
748746 0
749747 }
750748 if (if (isDefined(pmt.assetId))
751749 then (pmt.assetId == GovernToken)
752750 else false)
753751 then if ((PrizeAmount > 0))
754752 then {
755753 let UserGovernTokenAmount = pmt.amount
756754 let DevBoxAmount = (DevBoxBalance + ((pmt.amount * 5) / 1000))
757755 let NewDelayCost = if ((ActualDelayCost == 0))
758756 then 1000000000
759757 else (2 * ActualDelayCost)
760758 if ((UserGovernTokenAmount >= NewDelayCost))
761759 then {
762760 let NewDelay = (ActualDelay + DelayDays)
763761 [IntegerEntry("Delay", NewDelay), IntegerEntry("DelayCost", NewDelayCost), IntegerEntry("PrizeHeight", PrizeHeightValueNew), IntegerEntry("DevBox", DevBoxAmount), StringEntry("HighestPushAddress", HighestPushAddressValue)]
764762 }
765763 else throw((("To delay the release of the reward ONE DAY later than expected, you need " + toString(NewDelayCost)) + "TROIKAs"))
766764 }
767765 else throw("You cannot delay the reward before reward is received! Please wait until a reward is available")
768766 else throw("Can Use only Troika Token to Delay Reward")
769767 }
770768
771769
772770
773771 @Callable(i)
774772 func ClaimPrize () = {
775773 let UserStakedTokenKey = (toBase58String(i.caller.bytes) + "_Staking")
776774 let UserPush = (toBase58String(i.caller.bytes) + "_Push")
777775 let UserLastStakeBlock = (toBase58String(i.caller.bytes) + "_UserLastStakeBlock")
778776 let minStakeBlock = (1440 * 7)
779777 let minref = 3
780778 let ContractGovTokenBalance = assetBalance(this, GovernToken)
781779 let ContractWalletStakeBalance = assetBalance(this, StakedToken)
782780 let StakeBalance = match getInteger(this, "StakeBalance") {
783781 case a: Int =>
784782 a
785783 case _ =>
786784 0
787785 }
788786 let PrizeAmount = match getInteger(this, "FundBox") {
789787 case a: Int =>
790788 a
791789 case _ =>
792790 0
793791 }
794792 let UserPushValue = match getInteger(this, UserPush) {
795793 case a: Int =>
796794 a
797795 case _ =>
798796 0
799797 }
800798 let UserLastStakeBlockValue = match getInteger(this, UserLastStakeBlock) {
801799 case a: Int =>
802800 a
803801 case _ =>
804802 0
805803 }
806804 let UserStakedTokenAmount = match getInteger(this, UserStakedTokenKey) {
807805 case a: Int =>
808806 a
809807 case _ =>
810808 0
811809 }
812810 let ActualDelay = match getInteger(this, "Delay") {
813811 case a: Int =>
814812 a
815813 case _ =>
816814 0
817815 }
818816 let PrizeWinner = match getString(this, "HighestPushAddress") {
819817 case a: String =>
820818 a
821819 case _ =>
822820 ""
823821 }
824822 let PrizeHeight = match getInteger(this, "PrizeHeight") {
825823 case a: Int =>
826824 a
827825 case _ =>
828826 0
829827 }
830828 let HighestPushValue = match getInteger(this, "HighestPush") {
831829 case a: Int =>
832830 a
833831 case _ =>
834832 0
835833 }
836834 let UserRefsNum = (toBase58String(i.caller.bytes) + "_refs")
837835 let UserRefsNumValue = match getInteger(this, UserRefsNum) {
838836 case a: Int =>
839837 a
840838 case _ =>
841839 0
842840 }
843841 if (if ((PrizeAmount == 0))
844842 then true
845843 else (10000000000 > ContractGovTokenBalance))
846844 then throw("No prize to Claim or Not enough Govern Token en Contract (Min 100 Troika)")
847845 else if ((toBase58String(i.caller.bytes) != PrizeWinner))
848846 then throw("You are not the winner hence cannot claim the reward ")
849847 else if (if ((100000000 > UserStakedTokenAmount))
850848 then (minStakeBlock > UserLastStakeBlockValue)
851849 else false)
852850 then throw("You have to Stake ASIMI Token to claim reward ")
853851 else if (if ((height > (PrizeHeight + ActualDelay)))
854852 then (UserPushValue >= HighestPushValue)
855853 else false)
856854 then if ((UserRefsNumValue >= minref))
857855 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)]
858856 else throw((("You have to have " + toString(minref)) + " referrals already staking for a minimum of 10 days to Claim the prize"))
859857 else throw("You have to be the user with the highest Push and wait till countown is finished, to claim Reward")
860858 }
861859
862860
863861
864862 @Callable(i)
865863 func Addmentor (Mentor) = {
866864 let UserMentorAddress = (toBase58String(i.caller.bytes) + "_Mentor")
867865 if ((Mentor != ""))
868866 then [StringEntry(UserMentorAddress, Mentor)]
869867 else throw("Mentor's Address cannot be empty")
870868 }
871869
872870
873871
874872 @Callable(i)
873+func UpdateTwittsCost (LikePackageASIMICost,LikePackageTROIKANCost) = if ((toBase58String(i.caller.bytes) == dAppAdmin))
874+ then [IntegerEntry("LikePackageASIMICost", LikePackageASIMICost), IntegerEntry("LikePackageTROIKANCost", LikePackageTROIKANCost)]
875+ else throw("Only available for Admin")
876+
877+
878+
879+@Callable(i)
875880 func GetLikesPackage (TwitterUserId,TwittId) = {
876881 let LikePackageTROIKANCostValue = match getInteger(this, "LikePackageTROIKANCost") {
877882 case a: Int =>
878883 a
879884 case _ =>
880885 0
881886 }
882887 let LikePackageASIMICostValue = match getInteger(this, "LikePackageASIMICost") {
883888 case a: Int =>
884889 a
885890 case _ =>
886891 0
887892 }
888893 let pmt = if ((size(i.payments) == 2))
889894 then i.payments[0]
890895 else throw("Attached payment is required")
891896 if (if ((i.payments[0].assetId == StakedToken))
892897 then (i.payments[1].assetId == GovernToken)
893898 else false)
894899 then if ((i.payments[0].amount >= LikePackageASIMICostValue))
895900 then if ((i.payments[1].amount >= LikePackageTROIKANCostValue))
896901 then {
897902 let Influencer = ((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId))
898903 let InfluencerBalance = match getInteger(this, Influencer) {
899904 case a: Int =>
900905 a
901906 case _ =>
902907 0
903908 }
904909 if ((InfluencerBalance == 0))
905- then [IntegerEntry(((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId)), ((95 * LikePackageASIMICost) / 100)), IntegerEntry("LikeTwittsDevBox", ((5 * LikePackageASIMICost) / 100))]
910+ then [IntegerEntry(((toString(TwitterUserId) + "_Twitt2Like_") + toString(TwittId)), ((95 * LikePackageASIMICostValue) / 100)), IntegerEntry("LikeTwittsDevBox", ((5 * LikePackageASIMICostValue) / 100))]
906911 else throw("Cannot acquire a new package, the prior like package has to be drained to be able to acquire a new one")
907912 }
908- else throw(("TROIKAN Amount should be :" + toString((LikePackageASIMICost / 100000000))))
909- else throw(("ASIMI Amount should be :" + toString((LikePackageTROIKANCost / 100000000))))
913+ else throw(("TROIKAN Amount should be :" + toString((LikePackageASIMICostValue / 100000000))))
914+ else throw(("ASIMI Amount should be :" + toString((LikePackageTROIKANCostValue / 100000000))))
910915 else throw("Payments should be both ASIMI and TROIKAN tokens")
911916 }
912917
913918
914919
915920 @Callable(i)
916921 func GetMyLikedTwittsRewards (UserId) = {
917922 let UserEarnedLikeTwittASIMI = match getInteger(this, (UserId + "_Like_Amount")) {
918923 case a: Int =>
919924 a
920925 case _ =>
921926 0
922927 }
923928 let UserEarneddAppRTTwittTROIKAN = match getInteger(this, (UserId + "_TroikandApp_RT_Amount")) {
924929 case a: Int =>
925930 a
926931 case _ =>
927932 0
928933 }
929934 if (if ((UserEarnedLikeTwittASIMI >= (1 * 100000000)))
930935 then (UserEarneddAppRTTwittTROIKAN >= (1 * 100000000))
931936 else false)
932937 then [IntegerEntry((UserId + "_TroikandApp_RT_Amount"), 0), IntegerEntry((UserId + "_Like_Amount"), 0), ScriptTransfer(i.caller, UserEarnedLikeTwittASIMI, StakedToken), ScriptTransfer(i.caller, UserEarneddAppRTTwittTROIKAN, GovernToken)]
933938 else throw("Minimum earnings to withdraw are: 100 ASIMI and 50 Troikans")
934939 }
935940
936941
937942
938943 @Callable(i)
939944 func LinkTwitterAcc2Wallet (TwitterUserId) = {
940945 let TwitterLinkedWallet = match getString(this, (TwitterUserId + "_Wallet")) {
941946 case a: String =>
942947 a
943948 case _ =>
944949 "None"
945950 }
946951 if ((toBase58String(i.caller.bytes) == TwitterLinkedWallet))
947952 then throw("You already have your wallet linked to the Twitter account")
948953 else if (if ((toBase58String(i.caller.bytes) != TwitterLinkedWallet))
949954 then (TwitterLinkedWallet != "None")
950955 else false)
951956 then throw("The wallet you are using is not the linked Wallet to this Twitter account")
952957 else [StringEntry((TwitterUserId + "_Wallet"), toBase58String(i.caller.bytes))]
953958 }
954959
955960

github/deemru/w8io/169f3d6 
152.85 ms