tx · 7DKMhtu35oYkpwhoXoTqpWLNS8FFR3prF5U7Qih7yAS6

3MvtGRKQ5Eg4QtQBziZ1PY1Vvu7n8bxDTsZ:  -0.01000000 Waves

2020.08.17 17:17 [1136830] smart account 3MvtGRKQ5Eg4QtQBziZ1PY1Vvu7n8bxDTsZ > SELF 0.00000000 Waves

{ "type": 13, "id": "7DKMhtu35oYkpwhoXoTqpWLNS8FFR3prF5U7Qih7yAS6", "fee": 1000000, "feeAssetId": null, "timestamp": 1597673879528, "version": 1, "sender": "3MvtGRKQ5Eg4QtQBziZ1PY1Vvu7n8bxDTsZ", "senderPublicKey": "5g4zgFBjgF4azctmVC4KN7uqKQCxwFaJhJFesKyrJAgM", "proofs": [ "3qbPnbSJw4PALtMpF4qXKAh7HdMUCs4RWHx3gxxZcTrQFFDpktegAP1KL4pfnt8ZHBfv6jquy5beEzbMMV4LdfC4" ], "script": "base64:AAIDAAAAAAAAAAsIARIAEgASAwoBCAAAADoAAAAAC3BhcmFtUHJlZml4AgAAAAZwYXJhbV8AAAAAC2FkZHJlc3NCb29rCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUVoHUeTQTO77iaMaO0CyN+LlydsBXbwHeAAAAABN3aGl0ZWxpc3RBZGRyZXNzS2V5AgAAABB3aGl0ZWxpc3RBZGRyZXNzAAAAABdkQXBwV2hpdGVsaXN0QWRkcmVzc0tleQIAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MAAAAAEGJ1cm5lckFkZHJlc3NLZXkCAAAADWJ1cm5lckFkZHJlc3MAAAAAFGV4dHJhY3RlZEFkZHJlc3NCb29rCQEAAAAHZXh0cmFjdAAAAAEFAAAAC2FkZHJlc3NCb29rAQAAAA5nZXRTdHJpbmdQYXJhbQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAALcGFyYW1QcmVmaXgFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADW5vIHN0cmluZyBrZXkBAAAAC2dldEludFBhcmFtAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAtwYXJhbVByZWZpeAUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAKbm8gaW50IGtleQEAAAAPZ2V0Qm9vbGVhblBhcmFtAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAtwYXJhbVByZWZpeAUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADm5vIGJvb2xlYW4ga2V5AAAAAA1pc3N1ZXJBc3NldElkAQAAACCqQrEi7mIB/5UGd71YfhKxrobm2cYrlKi1pSAagtjkqgAAAAARaW52ZXN0bWVudEFzc2V0SWQBAAAABBOr2TMAAAAAGGludmVzdG1lbnRBc3NldElkSXNXYXZlcwYAAAAAEm93bmVyQWRkcmVzc1N0cmluZwkBAAAADmdldFN0cmluZ1BhcmFtAAAAAQIAAAAUaXNzdWVyQWNjb3VudEFkZHJlc3MAAAAADG93bmVyQWRkcmVzcwkBAAAAB2V4dHJhY3QAAAABCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABBQAAABJvd25lckFkZHJlc3NTdHJpbmcAAAAAE2Fzc2V0RGVjaW1hbHNPZmZzZXQAAAAAAAAAAAEAAAAAD3Rva2Vuc2FsZUFtb3VudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAAPdG9rZW5zYWxlQW1vdW50AAAAAAlzdGFydFRpbWUJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAACXN0YXJ0VGltZQAAAAAHZW5kVGltZQkBAAAAC2dldEludFBhcmFtAAAAAQIAAAAHZW5kVGltZQAAAAAFcHJpY2UJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAABXByaWNlAAAAAA1zb2Z0Q2FwQW1vdW50CQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAA1zb2Z0Q2FwQW1vdW50AAAAAAptaW5QYXltZW50CQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAptaW5QYXltZW50AAAAAAtzd2FwQXNzZXRJZAEAAAAAAAAAAApzd2FwQW1vdW50CQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAApzd2FwQW1vdW50AAAAAAlzd2FwUHJpY2UJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAACXN3YXBQcmljZQAAAAALY29tcGFueVR5cGUAAAAAAAAAAAAAAAAAC2lzVG9rZW5zYWxlAAAAAAAAAAAAAAAAAAZpc1N3YXAAAAAAAAAAAAEAAAAAEmlzVG9rZW5zYWxlQW5kU3dhcAAAAAAAAAAAAgAAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAIAAAAOc3dhcFN1bUFtb3VudCAAAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgCAAAADnN3YXBTdW1Bc3NldHMgAAAAABFzd2FwS2V5RGlzdEFzc2V0cwIAAAAKc3dhcEFzc2V0cwAAAAAWc3dhcEtleUNvbGxlY3RlZEFtb3VudAIAAAAKc3dhcEFtb3VudAAAAAASa2V5U3VtQW1vdW50UHJlZml4AgAAAApzdW1BbW91bnQgAAAAABZrZXlTdW1QYWlkQW1vdW50UHJlZml4AgAAAAtwYWlkQW1vdW50IAAAAAASa2V5U3VtQXNzZXRzUHJlZml4AgAAAApzdW1Bc3NldHMgAAAAABVrZXlBbGxvd0FjY291bnRQcmVmaXgCAAAABmFsbG93IAAAAAANa2V5RGlzdEFzc2V0cwIAAAAGYXNzZXRzAAAAABJrZXlDb2xsZWN0ZWRBbW91bnQCAAAABmFtb3VudAAAAAAJa2V5SXNzdWVyAgAAAAZpc3N1ZXIAAAAAA3ZlcgIAAAAFNS4wLjIAAAAACnZhbGlkU3RhdGUAAAAAAAAAA+gBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAAC2FkZHJlc3NCb29rBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAWEJAAACAAAAAQIAAAAGbm8ga2V5AAAAABB3aGl0ZWxpc3RBZGRyZXNzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQUAAAATd2hpdGVsaXN0QWRkcmVzc0tleQAAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABBQAAABdkQXBwV2hpdGVsaXN0QWRkcmVzc0tleQAAAAANYnVybmVyQWRkcmVzcwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEFAAAAEGJ1cm5lckFkZHJlc3NLZXkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAAAwkAAAAAAAACBQAAAAtjb21wYW55VHlwZQUAAAALaXNUb2tlbnNhbGUGCQAAAAAAAAIFAAAAC2NvbXBhbnlUeXBlBQAAABJpc1Rva2Vuc2FsZUFuZFN3YXABAAAAC2lzU3dhcEFsbG93AAAAAAMJAAAAAAAAAgUAAAALY29tcGFueVR5cGUFAAAABmlzU3dhcAYJAAAAAAAAAgUAAAALY29t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ZAEAAAAOZ2V0U3dhcFBheW1lbnQAAAABAAAAAWkEAAAAByRtYXRjaDAIBQAAAAFpAAAAB3BheW1lbnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAD0F0dGFjaGVkUGF5bWVudAQAAAABcAUAAAAHJG1hdGNoMAQAAAALaXNQYXltZW50T2sEAAAAByRtYXRjaDEIBQAAAAFwAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDECAAAACkJ5dGVWZWN0b3IEAAAAB2Fzc2V0SWQFAAAAByRtYXRjaDEJAAAAAAAAAgUAAAAHYXNzZXRJZAUAAAALc3dhcEFzc2V0SWQHAwUAAAALaXNQYXltZW50T2sDCQAAAAAAAAIFAAAAE2Fzc2V0RGVjaW1hbHNPZmZzZXQAAAAAAAAAAAEDCQAAAAAAAAIJAABqAAAAAggFAAAAAXAAAAAGYW1vdW50BQAAAAlzd2FwUHJpY2UAAAAAAAAAAAAIBQAAAAFwAAAABmFtb3VudAkAAAIAAAABAgAAADBwYXltZW50IGFtb3VudCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdG9rZW4gcHJpY2UIBQAAAAFwAAAABmFtb3VudAkAAAIAAAABAgAAAB5JbnZhbGlkIGFzc2V0IElEIG9mIGludmVzdG1lbnQJAAACAAAAAQIAAAAYUGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkAQAAAB9nZXRJbnZlc3RvckFkZHJlc3NGb3JXaXRoZHJhd2FsAAAAAgAAAAphcmdBZGRyZXNzAAAADWNhbGxlckFkZHJlc3MDCQAAZgAAAAIJAAExAAAAAQUAAAAKYXJnQWRkcmVzcwAAAAAAAAAACgUAAAAKYXJnQWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwAAAAMAAAABaQEAAAAHZGVwb3NpdAAAAAAEAAAADGN1cnJlbnRQcmljZQkBAAAAD2dldEN1cnJlbnRQcmljZQAAAAAEAAAADWFjY291bnRBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABBQAAABJrZXlDb2xsZWN0ZWRBbW91bnQEAAAACmRBcHBTdGF0dXMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MJAAQlAAAAAQUAAAAEdGhpcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAP////////wYAwkBAAAAASEAAAABCQEAAAAQaXNUb2tlbnNhbGVBbGxvdwAAAAAJAAACAAAAAQIAAAA5IzEwMDAgVGhpcyBkZXBvc2l0IG1ldGhvZCBpcyB1bnNvcHBlcnRlZCBmb3IgdGhpcyBjb21wYW55AwkBAAAAASEAAAABCQEAAAAKaGFzU3RhcnRlZAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAiIzAwMDEgVGhlIFRva2Vuc2FsZSB3b3JrcyBiZXR3ZWVuIAkAAaQAAAABBQAAAAlzdGFydFRpbWUCAAAABSBhbmQgCQABpAAAAAEFAAAAB2VuZFRpbWUDCQEAAAARdG9rZW5zYWxlSGFzRW5kZWQAAAAACQAAAgAAAAECAAAAbCMwMDAyIFRoZSByZXF1aXJlZCBhbW91bnQgaGFzIGFscmVhZHkgYmVlbiBhY2N1bXVsYXRlZC4gSWYgeW91IGFyZSBhbiBpbnZlc3RvciwgeW91IGNhbiB3aXRoZHJhdyB5b3VyIGZ1bmRzLgMJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwD////////8GAkAAAIAAAABAgAAACEjMDAxMCBUaGlzIGNvbXBhbnkgaXMgdW5zb3BwZXJ0ZWQEAAAAB3BheW1lbnQJAQAAAApnZXRQYXltZW50AAAAAQUAAAABaQQAAAAKY3VycmVudEtleQkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA5pc0FjY291bnRBbGxvdwQAAAAHJG1hdGNoMAkABBoAAAACBQAAABB3aGl0ZWxpc3RBZGRyZXNzBQAAAApjdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEA/////////wEDCQAAAAAAAAIFAAAACmN1cnJlbnRLZXkFAAAAEm93bmVyQWRkcmVzc1N0cmluZwkAAAIAAAABAgAAADAjMDAzMCBUaGUgaXNzdWVyIGNhbmB0IGludmVzdCBpbiBpdHMgb3duIGNvbXBhbnkDCQAAZgAAAAIFAAAACnZhbGlkU3RhdGUFAAAADmlzQWNjb3VudEFsbG93CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAMSMwMDIwIFlvdXIgYWNjb3VudCBoYXMgbm8gcmlnaHQgdG8gc2VuZCBmdW5kcy4gXyAFAAAACmN1cnJlbnRLZXkCAAAAASAFAAAAEm93bmVyQWRkcmVzc1N0cmluZwQAAAANYWNjb3VudEFzc2V0cwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA1rZXlEaXN0QXNzZXRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAAD3Rva2Vuc2FsZUFtb3VudAQAAAAKdG9rZW5zQ2FsYwkAAGsAAAADBQAAAAdwYXltZW50BQAAABNhc3NldERlY2ltYWxzT2Zmc2V0BQAAAAxjdXJyZW50UHJpY2UEAAAAEm1pblBheW1lbnRJbkFzc2V0cwkAAGsAAAADBQAAAAptaW5QYXltZW50BQAAABNhc3NldERlY2ltYWxzT2Zmc2V0BQAAAAxjdXJyZW50UHJpY2UDAwMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACBQAAAA1hY2NvdW50QXNzZXRzBQAAAAp0b2tlbnNDYWxjBgkAAGYAAAACBQAAABJtaW5QYXltZW50SW5Bc3NldHMFAAAACnRva2Vuc0NhbGMGAwkBAAAAAiE9AAAAAgUAAAAKdG9rZW5zQ2FsYwUAAAANYWNjb3VudEFzc2V0cwkAAGYAAAACBQAAAAp0b2tlbnNDYWxjCQAAZQAAAAIFAAAADWFjY291bnRBc3NldHMFAAAAEm1pblBheW1lbnRJbkFzc2V0cwcJAAACAAAAAQIAAAAfIzA0MDAgSW5jb3JyZWN0IHBheW1lbnQgYW1vdW50LgQAAAARbmV3SW52ZXN0b3JBbW91bnQJAABkAAAAAgkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5BQAAAAdwYXltZW50BAAAABFuZXdJbnZlc3RvckFzc2V0cwkAAGQAAAACCQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABJrZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAACnRva2Vuc0NhbGMEAAAAEG5ld0FjY291bnRBc3NldHMJAABlAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAAKdG9rZW5zQ2FsYwQAAAAQbmV3QWNjb3VudEFtb3VudAkAAGQAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAAdwYXltZW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQUAAAARbmV3SW52ZXN0b3JBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5BQAAABFuZXdJbnZlc3RvckFzc2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAANa2V5RGlzdEFzc2V0cwUAAAAQbmV3QWNjb3VudEFzc2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASa2V5Q29sbGVjdGVkQW1vdW50BQAAABBuZXdBY2NvdW50QW1vdW50BQAAAANuaWwAAAABaQEAAAALc3dhcERlcG9zaXQAAAAABAAAAAxjdXJyZW50UHJpY2UFAAAACXN3YXBQcmljZQQAAAANYWNjb3VudEFtb3VudAkBAAAACWdldEFtb3VudAAAAAEFAAAAFnN3YXBLZXlDb2xsZWN0ZWRBbW91bnQEAAAACmRBcHBTdGF0dXMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MJAAQlAAAAAQUAAAAEdGhpcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAP////////wYAwkBAAAAASEAAAABCQEAAAALaXNTd2FwQWxsb3cAAAAACQAAAgAAAAECAAAAPiMyMDAwIFRoaXMgc3dhcC1kZXBvc2l0IG1ldGhvZCBpcyB1bnNvcHBlcnRlZCBmb3IgdGhpcyBjb21wYW55AwkBAAAAASEAAAABCQEAAAAKaGFzU3RhcnRlZAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAcVGhlIFRva2Vuc2FsZSB3b3JrcyBiZXR3ZWVuIAkAAaQAAAABBQAAAAlzdGFydFRpbWUCAAAABSBhbmQgCQABpAAAAAEFAAAAB2VuZFRpbWUDCQEAAAAMc3dhcEhhc0VuZGVkAAAAAAkAAAIAAAABAgAAAGZUaGUgcmVxdWlyZWQgYW1vdW50IGhhcyBhbHJlYWR5IGJlZW4gYWNjdW11bGF0ZWQuIElmIHlvdSBhcmUgYW4gaW52ZXN0b3IsIHlvdSBjYW4gd2l0aGRyYXcgeW91ciBmdW5kcy4DCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMA/////////BgJAAACAAAAAQIAAAAhIzAwMTAgVGhpcyBjb21wYW55IGlzIHVuc3VwcG9ydGVkBAAAAAdwYXltZW50CQEAAAAOZ2V0U3dhcFBheW1lbnQAAAABBQAAAAFpBAAAAApjdXJyZW50S2V5CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADmlzQWNjb3VudEFsbG93BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAEHdoaXRlbGlzdEFkZHJlc3MFAAAACmN1cnJlbnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQD/////////AQMJAABmAAAAAgUAAAAKdmFsaWRTdGF0ZQUAAAAOaXNBY2NvdW50QWxsb3cJAAACAAAAAQIAAAAuIzAwMjAgWW91ciBhY2NvdW50IGhhcyBubyByaWdodCB0byBzZW5kIGZ1bmRzLgQAAAANYWNjb3VudEFzc2V0cwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABFzd2FwS2V5RGlzdEFzc2V0cwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAApzd2FwQW1vdW50BAAAAAp0b2tlbnNDYWxjCQAAawAAAAMFAAAAB3BheW1lbnQFAAAAE2Fzc2V0RGVjaW1hbHNPZmZzZXQFAAAADGN1cnJlbnRQcmljZQMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACBQAAAA1hY2NvdW50QXNzZXRzBQAAAAp0b2tlbnNDYWxjCQAAAgAAAAECAAAAGUluY29ycmVjdCBwYXltZW50IGFtb3VudC4EAAAAEW5ld0ludmVzdG9yQW1vdW50CQAAZAAAAAIJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAAB3BheW1lbnQEAAAAEW5ld0ludmVzdG9yQXNzZXRzCQAAZAAAAAIJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAACnRva2Vuc0NhbGMEAAAAEG5ld0FjY291bnRBc3NldHMJAABlAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAAKdG9rZW5zQ2FsYwQAAAAQbmV3QWNjb3VudEFtb3VudAkAAGQAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAAdwYXltZW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAAEW5ld0ludmVzdG9yQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAAEW5ld0ludmVzdG9yQXNzZXRzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFzd2FwS2V5RGlzdEFzc2V0cwUAAAAQbmV3QWNjb3VudEFzc2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAWc3dhcEtleUNvbGxlY3RlZEFtb3VudAUAAAAQbmV3QWNjb3VudEFtb3VudAUAAAADbmlsAAAAAWkBAAAACndpdGhkcmF3YWwAAAABAAAAB2FkZHJlc3MEAAAACmRBcHBTdGF0dXMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MJAAQlAAAAAQUAAAAEdGhpcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAwkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAAACQAAAgAAAAECAAAASCMwMDMwIFdpdGhkcmF3YWxzIGFyZSBub3QgYXZhaWxhYmxlIHVudGlsIHRoZSBpc3N1ZXIgcGFzc2VzIHZlcmlmaWNhdGlvbgQAAAAKY3VycmVudEtleQkBAAAAH2dldEludmVzdG9yQWRkcmVzc0ZvcldpdGhkcmF3YWwAAAACBQAAAAdhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAEWN1cnJlbnRLZXlBZGRyZXNzCQEAAAAHZXh0cmFjdAAAAAEJAQAAABFhZGRyZXNzRnJvbVN0cmluZwAAAAEFAAAACmN1cnJlbnRLZXkEAAAAFWN1cnJlbnRJbnZlc3RvckFzc2V0cwkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5BAAAABVjdXJyZW50SW52ZXN0b3JBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQQAAAAZY3VycmVudEludmVzdG9yU3dhcEFzc2V0cwkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQQAAAAZY3VycmVudEludmVzdG9yU3dhcEFtb3VudAkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQQAAAARYWNjb3VudFN3YXBBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABBQAAABZzd2FwS2V5Q29sbGVjdGVkQW1vdW50BAAAABFhY2NvdW50U3dhcEFzc2V0cwkBAAAACWdldEFtb3VudAAAAAEFAAAAEXN3YXBLZXlEaXN0QXNzZXRzBAAAAA1hY2NvdW50QW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQUAAAASa2V5Q29sbGVjdGVkQW1vdW50BAAAAA1hY2NvdW50QXNzZXRzCQEAAAAJZ2V0QW1vdW50AAAAAQUAAAANa2V5RGlzdEFzc2V0cwQAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgkBAAAAH2dldEludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIAAAACBQAAABhpbnZlc3RtZW50QXNzZXRJZElzV2F2ZXMFAAAAEWludmVzdG1lbnRBc3NldElkAwkBAAAAASEAAAABCQEAAAAPY29tcGFueUhhc0VuZGVkAAAAAAkAAAIAAAABAgAAACEjMDAwMyBUaGUgQ29tcGFueSBpcyBzdGlsbCBhY3RpdmUDAwkAAAAAAAACBQAAAApjdXJyZW50S2V5BQAAABJvd25lckFkZHJlc3NTdHJpbmcJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAQcEAAAAFWlzc3VlckFscmVhZHlHb3RGdW5kcwkBAAAACWdldEFtb3VudAAAAAEFAAAACWtleUlzc3VlcgMJAAAAAAAAAgUAAAAVaXNzdWVyQWxyZWFkeUdvdEZ1bmRzAAAAAAAAAAAAAwMJAQAAABBpc1Rva2Vuc2FsZUFsbG93AAAAAAkBAAAAC2lzU3dhcEFsbG93AAAAAAcDCQAAZwAAAAIFAAAADWFjY291bnRBbW91bnQFAAAADXNvZnRDYXBBbW91bnQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAlrZXlJc3N1ZXIAAAAAAAAAAAEFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADWFjY291bnRBbW91bnQFAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAABFhY2NvdW50U3dhcEFtb3VudAUAAAALc3dhcEFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACWtleUlzc3VlcgAAAAAAAAAAAQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAARYWNjb3VudFN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwDCQEAAAAQaXNUb2tlbnNhbGVBbGxvdwAAAAADCQAAZwAAAAIFAAAADWFjY291bnRBbW91bnQFAAAADXNvZnRDYXBBbW91bnQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAlrZXlJc3N1ZXIAAAAAAAAAAAEFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADWFjY291bnRBbW91bnQFAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIFAAAAA25pbAkAAAIAAAABAgAAABkjMDUwMCBObyBmdW5kcyBmb3IgaXNzdWVyCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAJa2V5SXNzdWVyAAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAABFhY2NvdW50U3dhcEFtb3VudAUAAAALc3dhcEFzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAAC0jMDcwMCBUaGUgaXNzdWVyIGhhcyBhbHJlYWR5IHRha2VuIGl0cyBzaGFyZSEDAwkAAAAAAAACBQAAABVjdXJyZW50SW52ZXN0b3JBbW91bnQAAAAAAAAAAAAJAAAAAAAAAgUAAAAZY3VycmVudEludmVzdG9yU3dhcEFtb3VudAAAAAAAAAAAAAcJAAACAAAAAQIAAAAWIzA2MDAgRG9uJ3QgaGF2ZSBtb25leQMDCQEAAAAQaXNUb2tlbnNhbGVBbGxvdwAAAAAJAQAAAAtpc1N3YXBBbGxvdwAAAAAHAwMJAABmAAAAAgUAAAANc29mdENhcEFtb3VudAUAAAANYWNjb3VudEFtb3VudAkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAABBwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAVY3VycmVudEludmVzdG9yQW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABljdXJyZW50SW52ZXN0b3JTd2FwQXNzZXRzBQAAAA1pc3N1ZXJBc3NldElkBQAAAANuaWwDCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMAAAAAAAAAAAEJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAFWN1cnJlbnRJbnZlc3RvckFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAZY3VycmVudEludmVzdG9yU3dhcEFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBbW91bnQFAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwDCQEAAAAQaXNUb2tlbnNhbGVBbGxvdwAAAAADAwkAAGcAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAA1zb2Z0Q2FwQW1vdW50CQAAAAAAAAIFAAAACmRBcHBTdGF0dXMAAAAAAAAAAAEHCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAFWN1cnJlbnRJbnZlc3RvckFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAFWN1cnJlbnRJbnZlc3RvckFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgUAAAADbmlsAwkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAABCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAZY3VycmVudEludmVzdG9yU3dhcEFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAZY3VycmVudEludmVzdG9yU3dhcEFtb3VudAUAAAALc3dhcEFzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9CdXJuVHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAASUmVpc3N1ZVRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwCQAAAAAAAAIIBQAAAAJ0eAAAAAlyZWNpcGllbnQFAAAADWJ1cm5lckFkZHJlc3MDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24GAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABlTZXRBc3NldFNjcmlwdFRyYW5zYWN0aW9uBgkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAACdHgFAAAAByRtYXRjaDAEAAAABHR4SWQJAAJYAAAAAQgFAAAAAnR4AAAAAmlkBAAAAAlwQWRkcmVzczEJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczEEAAAACXBBZGRyZXNzMgkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzMgQAAAAJcEFkZHJlc3MzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MzBAAAAAlwQWRkcmVzczQJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczQEAAAACXBBZGRyZXNzNQkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzNQQAAAAJcEFkZHJlc3M2CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M2BAAAAAlwQWRkcmVzczcJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczcEAAAACXBBZGRyZXNzOAkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzOAQAAAALcEtleTFTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczEFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXkyU2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3MyBQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5M1NpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzMwUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTRTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczQFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk1U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M1BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5NlNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzNgUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTdTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczcFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk4U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M4BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgUAAAALcEtleTFTaWduZWQFAAAAC3BLZXkyU2lnbmVkBQAAAAtwS2V5M1NpZ25lZAUAAAALcEtleTRTaWduZWQFAAAAC3BLZXk1U2lnbmVkBQAAAAtwS2V5NlNpZ25lZAUAAAALcEtleTdTaWduZWQFAAAAC3BLZXk4U2lnbmVkAAAAAAAAAAADB6O0RS4=", "chainId": 84, "height": 1136830, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let paramPrefix = "param_"
5+
6+let addressBook = Address(base58'3MwoVRAPfC2NKuuYJKHVAVtUFhq8MyTEfQh')
7+
8+let whitelistAddressKey = "whitelistAddress"
9+
10+let dAppWhitelistAddressKey = "dAppWhitelistAddress"
11+
12+let burnerAddressKey = "burnerAddress"
13+
14+let extractedAddressBook = extract(addressBook)
15+
16+func getStringParam (key) = match getString(this, (paramPrefix + key)) {
17+ case a: String =>
18+ a
19+ case _ =>
20+ throw("no string key")
21+}
22+
23+
24+func getIntParam (key) = match getInteger(this, (paramPrefix + key)) {
25+ case a: Int =>
26+ a
27+ case _ =>
28+ throw("no int key")
29+}
30+
31+
32+func getBooleanParam (key) = match getBoolean(this, (paramPrefix + key)) {
33+ case a: Boolean =>
34+ a
35+ case _ =>
36+ throw("no boolean key")
37+}
38+
39+
40+let issuerAssetId = base58'CTdHtxoMyo5URWsqXaFgV54xChMXtAPPmBeno9cETpdf'
41+
42+let investmentAssetId = base58'WAVES'
43+
44+let investmentAssetIdIsWaves = true
45+
46+let ownerAddressString = getStringParam("issuerAccountAddress")
47+
48+let ownerAddress = extract(addressFromString(ownerAddressString))
49+
50+let assetDecimalsOffset = 1
51+
52+let tokensaleAmount = getIntParam("tokensaleAmount")
53+
54+let startTime = getIntParam("startTime")
55+
56+let endTime = getIntParam("endTime")
57+
58+let price = getIntParam("price")
59+
60+let softCapAmount = getIntParam("softCapAmount")
61+
62+let minPayment = getIntParam("minPayment")
63+
64+let swapAssetId = base58''
65+
66+let swapAmount = getIntParam("swapAmount")
67+
68+let swapPrice = getIntParam("swapPrice")
69+
70+let companyType = 0
71+
72+let isTokensale = 0
73+
74+let isSwap = 1
75+
76+let isTokensaleAndSwap = 2
77+
78+let swapKeySumAmountPrefix = "swapSumAmount "
79+
80+let swapKeySumAssetsPrefix = "swapSumAssets "
81+
82+let swapKeyDistAssets = "swapAssets"
83+
84+let swapKeyCollectedAmount = "swapAmount"
85+
86+let keySumAmountPrefix = "sumAmount "
87+
88+let keySumPaidAmountPrefix = "paidAmount "
89+
90+let keySumAssetsPrefix = "sumAssets "
91+
92+let keyAllowAccountPrefix = "allow "
93+
94+let keyDistAssets = "assets"
95+
96+let keyCollectedAmount = "amount"
97+
98+let keyIssuer = "issuer"
99+
100+let ver = "5.0.2"
101+
102+let validState = 1000
103+
104+func getAddressFromBook (key) = match getString(addressBook, key) {
105+ case a: String =>
106+ Address(fromBase58String(a))
107+ case _ =>
108+ throw("no key")
109+}
110+
111+
112+let whitelistAddress = getAddressFromBook(whitelistAddressKey)
113+
114+let dAppWhitelistAddress = getAddressFromBook(dAppWhitelistAddressKey)
115+
116+let burnerAddress = getAddressFromBook(burnerAddressKey)
117+
118+func isTokensaleAllow () = if ((companyType == isTokensale))
119+ then true
120+ else (companyType == isTokensaleAndSwap)
121+
122+
123+func isSwapAllow () = if ((companyType == isSwap))
124+ then true
125+ else (companyType == isTokensaleAndSwap)
126+
127+
128+func getCurrentTime () = {
129+ let blockInfo = value(blockInfoByHeight(height))
130+ (blockInfo.timestamp / 1000)
131+ }
132+
133+
134+func getInvestmentAssetIdForTransfer (isWaves,assetId) = if ((isWaves == false))
135+ then assetId
136+ else unit
137+
138+
139+func getCurrentPrice () = price
140+
141+
142+func getAmount (key) = match getInteger(this, key) {
143+ case a: Int =>
144+ a
145+ case _ =>
146+ 0
147+}
148+
149+
150+func hasStarted () = (getCurrentTime() >= startTime)
151+
152+
153+func tokensaleHasEnded () = {
154+ let assets = match getInteger(this, keyDistAssets) {
155+ case a: Int =>
156+ a
157+ case _ =>
158+ tokensaleAmount
159+ }
160+ if ((getCurrentTime() > endTime))
161+ then true
162+ else (assets == 0)
163+ }
164+
165+
166+func swapHasEnded () = {
167+ let assets = match getInteger(this, swapKeyDistAssets) {
168+ case a: Int =>
169+ a
170+ case _ =>
171+ swapAmount
172+ }
173+ if ((getCurrentTime() > endTime))
174+ then true
175+ else (assets == 0)
176+ }
177+
178+
179+func companyHasEnded () = if (if (isSwapAllow())
180+ then isTokensaleAllow()
181+ else false)
182+ then if (tokensaleHasEnded())
183+ then swapHasEnded()
184+ else false
185+ else if (isTokensaleAllow())
186+ then tokensaleHasEnded()
187+ else if (isSwapAllow())
188+ then swapHasEnded()
189+ else false
190+
191+
192+func getPayment (i) = match i.payment {
193+ case p: AttachedPayment =>
194+ let isPaymentOk = match p.assetId {
195+ case assetId: ByteVector =>
196+ if (!(investmentAssetIdIsWaves))
197+ then (assetId == investmentAssetId)
198+ else false
199+ case _ =>
200+ (investmentAssetIdIsWaves == true)
201+ }
202+ if (isPaymentOk)
203+ then if ((assetDecimalsOffset == 1))
204+ then if (((p.amount % price) == 0))
205+ then p.amount
206+ else throw("#0300 payment amount must be a multiple of token price")
207+ else p.amount
208+ else throw("#0200 Invalid asset ID of investment")
209+ case _ =>
210+ throw("#0100 Payment must be attached")
211+}
212+
213+
214+func getSwapPayment (i) = match i.payment {
215+ case p: AttachedPayment =>
216+ let isPaymentOk = match p.assetId {
217+ case assetId: ByteVector =>
218+ (assetId == swapAssetId)
219+ case _ =>
220+ false
221+ }
222+ if (isPaymentOk)
223+ then if ((assetDecimalsOffset == 1))
224+ then if (((p.amount % swapPrice) == 0))
225+ then p.amount
226+ else throw("payment amount must be a multiple of token price")
227+ else p.amount
228+ else throw("Invalid asset ID of investment")
229+ case _ =>
230+ throw("Payment must be attached")
231+}
232+
233+
234+func getInvestorAddressForWithdrawal (argAddress,callerAddress) = if ((size(argAddress) > 10))
235+ then argAddress
236+ else callerAddress
237+
238+
239+@Callable(i)
240+func deposit () = {
241+ let currentPrice = getCurrentPrice()
242+ let accountAmount = getAmount(keyCollectedAmount)
243+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
244+ case a: Int =>
245+ a
246+ case _ =>
247+ -1000
248+ }
249+ if (!(isTokensaleAllow()))
250+ then throw("#1000 This deposit method is unsopperted for this company")
251+ else if (!(hasStarted()))
252+ then throw(((("#0001 The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime)))
253+ else if (tokensaleHasEnded())
254+ then throw("#0002 The required amount has already been accumulated. If you are an investor, you can withdraw your funds.")
255+ else if ((dAppStatus == -1000))
256+ then throw("#0010 This company is unsopperted")
257+ else {
258+ let payment = getPayment(i)
259+ let currentKey = toBase58String(i.caller.bytes)
260+ let isAccountAllow = match getInteger(whitelistAddress, currentKey) {
261+ case a: Int =>
262+ a
263+ case _ =>
264+ -255
265+ }
266+ if ((currentKey == ownerAddressString))
267+ then throw("#0030 The issuer can`t invest in its own company")
268+ else if ((validState > isAccountAllow))
269+ then throw(((("#0020 Your account has no right to send funds. _ " + currentKey) + " ") + ownerAddressString))
270+ else {
271+ let accountAssets = match getInteger(this, keyDistAssets) {
272+ case a: Int =>
273+ a
274+ case _ =>
275+ tokensaleAmount
276+ }
277+ let tokensCalc = fraction(payment, assetDecimalsOffset, currentPrice)
278+ let minPaymentInAssets = fraction(minPayment, assetDecimalsOffset, currentPrice)
279+ if (if (if ((0 > (accountAssets - tokensCalc)))
280+ then true
281+ else (minPaymentInAssets > tokensCalc))
282+ then true
283+ else if ((tokensCalc != accountAssets))
284+ then (tokensCalc > (accountAssets - minPaymentInAssets))
285+ else false)
286+ then throw("#0400 Incorrect payment amount.")
287+ else {
288+ let newInvestorAmount = (getAmount((keySumAmountPrefix + currentKey)) + payment)
289+ let newInvestorAssets = (getAmount((keySumAssetsPrefix + currentKey)) + tokensCalc)
290+ let newAccountAssets = (accountAssets - tokensCalc)
291+ let newAccountAmount = (accountAmount + payment)
292+ WriteSet([DataEntry((keySumAmountPrefix + currentKey), newInvestorAmount), DataEntry((keySumAssetsPrefix + currentKey), newInvestorAssets), DataEntry(keyDistAssets, newAccountAssets), DataEntry(keyCollectedAmount, newAccountAmount)])
293+ }
294+ }
295+ }
296+ }
297+
298+
299+
300+@Callable(i)
301+func swapDeposit () = {
302+ let currentPrice = swapPrice
303+ let accountAmount = getAmount(swapKeyCollectedAmount)
304+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
305+ case a: Int =>
306+ a
307+ case _ =>
308+ -1000
309+ }
310+ if (!(isSwapAllow()))
311+ then throw("#2000 This swap-deposit method is unsopperted for this company")
312+ else if (!(hasStarted()))
313+ then throw(((("The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime)))
314+ else if (swapHasEnded())
315+ then throw("The required amount has already been accumulated. If you are an investor, you can withdraw your funds.")
316+ else if ((dAppStatus == -1000))
317+ then throw("#0010 This company is unsupported")
318+ else {
319+ let payment = getSwapPayment(i)
320+ let currentKey = toBase58String(i.caller.bytes)
321+ let isAccountAllow = match getInteger(whitelistAddress, currentKey) {
322+ case a: Int =>
323+ a
324+ case _ =>
325+ -255
326+ }
327+ if ((validState > isAccountAllow))
328+ then throw("#0020 Your account has no right to send funds.")
329+ else {
330+ let accountAssets = match getInteger(this, swapKeyDistAssets) {
331+ case a: Int =>
332+ a
333+ case _ =>
334+ swapAmount
335+ }
336+ let tokensCalc = fraction(payment, assetDecimalsOffset, currentPrice)
337+ if ((0 > (accountAssets - tokensCalc)))
338+ then throw("Incorrect payment amount.")
339+ else {
340+ let newInvestorAmount = (getAmount((swapKeySumAmountPrefix + currentKey)) + payment)
341+ let newInvestorAssets = (getAmount((swapKeySumAssetsPrefix + currentKey)) + tokensCalc)
342+ let newAccountAssets = (accountAssets - tokensCalc)
343+ let newAccountAmount = (accountAmount + payment)
344+ WriteSet([DataEntry((swapKeySumAmountPrefix + currentKey), newInvestorAmount), DataEntry((swapKeySumAssetsPrefix + currentKey), newInvestorAssets), DataEntry(swapKeyDistAssets, newAccountAssets), DataEntry(swapKeyCollectedAmount, newAccountAmount)])
345+ }
346+ }
347+ }
348+ }
349+
350+
351+
352+@Callable(i)
353+func withdrawal (address) = {
354+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
355+ case a: Int =>
356+ a
357+ case _ =>
358+ 0
359+ }
360+ if ((dAppStatus == 0))
361+ then throw("#0030 Withdrawals are not available until the issuer passes verification")
362+ else {
363+ let currentKey = getInvestorAddressForWithdrawal(address, toBase58String(i.caller.bytes))
364+ let currentKeyAddress = extract(addressFromString(currentKey))
365+ let currentInvestorAssets = getAmount((keySumAssetsPrefix + currentKey))
366+ let currentInvestorAmount = getAmount((keySumAmountPrefix + currentKey))
367+ let currentInvestorSwapAssets = getAmount((swapKeySumAssetsPrefix + currentKey))
368+ let currentInvestorSwapAmount = getAmount((swapKeySumAmountPrefix + currentKey))
369+ let accountSwapAmount = getAmount(swapKeyCollectedAmount)
370+ let accountSwapAssets = getAmount(swapKeyDistAssets)
371+ let accountAmount = getAmount(keyCollectedAmount)
372+ let accountAssets = getAmount(keyDistAssets)
373+ let investmentAssetIdForTransfer = getInvestmentAssetIdForTransfer(investmentAssetIdIsWaves, investmentAssetId)
374+ if (!(companyHasEnded()))
375+ then throw("#0003 The Company is still active")
376+ else if (if ((currentKey == ownerAddressString))
377+ then (dAppStatus == 1)
378+ else false)
379+ then {
380+ let issuerAlreadyGotFunds = getAmount(keyIssuer)
381+ if ((issuerAlreadyGotFunds == 0))
382+ then if (if (isTokensaleAllow())
383+ then isSwapAllow()
384+ else false)
385+ then if ((accountAmount >= softCapAmount))
386+ then ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer), ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]))
387+ else ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]))
388+ else if (isTokensaleAllow())
389+ then if ((accountAmount >= softCapAmount))
390+ then ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer)]))
391+ else throw("#0500 No funds for issuer")
392+ else ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]))
393+ else throw("#0700 The issuer has already taken its share!")
394+ }
395+ else if (if ((currentInvestorAmount == 0))
396+ then (currentInvestorSwapAmount == 0)
397+ else false)
398+ then throw("#0600 Don't have money")
399+ else if (if (isTokensaleAllow())
400+ then isSwapAllow()
401+ else false)
402+ then if (if ((softCapAmount > accountAmount))
403+ then (dAppStatus == 1)
404+ else false)
405+ then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0), DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]))
406+ else if ((dAppStatus == 1))
407+ then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0), DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAssets, issuerAssetId), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]))
408+ else ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0), DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer), ScriptTransfer(currentKeyAddress, currentInvestorSwapAmount, swapAssetId)]))
409+ else if (isTokensaleAllow())
410+ then if (if ((accountAmount >= softCapAmount))
411+ then (dAppStatus == 1)
412+ else false)
413+ then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAssets, issuerAssetId)]))
414+ else ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer)]))
415+ else if ((dAppStatus == 1))
416+ then ScriptResult(WriteSet([DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]))
417+ else ScriptResult(WriteSet([DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorSwapAmount, swapAssetId)]))
418+ }
419+ }
420+
421+
422+@Verifier(tx)
423+func verify () = match tx {
424+ case tx: BurnTransaction =>
425+ true
426+ case tx: ReissueTransaction =>
427+ false
428+ case tx: TransferTransaction =>
429+ (tx.recipient == burnerAddress)
430+ case tx: DataTransaction|SetAssetScriptTransaction|SetScriptTransaction =>
431+ let txId = toBase58String(tx.id)
432+ let pAddress1 = getAddressFromBook("pAddress1")
433+ let pAddress2 = getAddressFromBook("pAddress2")
434+ let pAddress3 = getAddressFromBook("pAddress3")
435+ let pAddress4 = getAddressFromBook("pAddress4")
436+ let pAddress5 = getAddressFromBook("pAddress5")
437+ let pAddress6 = getAddressFromBook("pAddress6")
438+ let pAddress7 = getAddressFromBook("pAddress7")
439+ let pAddress8 = getAddressFromBook("pAddress8")
440+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
441+ then 1
442+ else 0
443+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
444+ then 1
445+ else 0
446+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
447+ then 1
448+ else 0
449+ let pKey4Signed = if (isDefined(getInteger(pAddress4, txId)))
450+ then 1
451+ else 0
452+ let pKey5Signed = if (isDefined(getInteger(pAddress5, txId)))
453+ then 1
454+ else 0
455+ let pKey6Signed = if (isDefined(getInteger(pAddress6, txId)))
456+ then 1
457+ else 0
458+ let pKey7Signed = if (isDefined(getInteger(pAddress7, txId)))
459+ then 1
460+ else 0
461+ let pKey8Signed = if (isDefined(getInteger(pAddress8, txId)))
462+ then 1
463+ else 0
464+ ((((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) + pKey7Signed) + pKey8Signed) >= 3)
465+ case _ =>
466+ false
467+}
468+

github/deemru/w8io/3ef1775 
41.92 ms