tx · DVX22nRt1mjPq68jUi8X8J8fbnrfJexJP7uER6eTwRns 3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH: -0.01400000 Waves 2021.03.29 11:37 [1458803] smart account 3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH > SELF 0.00000000 Waves
{ "type": 13, "id": "DVX22nRt1mjPq68jUi8X8J8fbnrfJexJP7uER6eTwRns", "fee": 1400000, "feeAssetId": null, "timestamp": 1617007115061, "version": 1, "sender": "3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH", "senderPublicKey": "HoEvP2nFKMAsffQ9PUyAm6auWisyHgusY9HxDeMASrzZ", "proofs": [ "CQvGrT6XSy1GTc9oL911vFBXeZ3jcJhFyGmo5QTXSwYhnVDUnPLBWUe53bEgttMGqBLnEe5THXZr2CnJKtXfcsW" ], "script": "base64:AAIEAAAAAAAAADsIAhIQCg4ICAgBCAEBAQgBAQEBCBIDCgEBEgASABIFCgMICAgSBQoDCAgIEgMKAQgSBAoCCAESAwoBCAAAAEsAAAAAA1NFUAIAAAACX18BAAAAD2dldFN0cmluZ09yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAICAAAAFU5vIGRhdGEgZm9yIHRoaXMua2V5PQUAAAADa2V5AQAAABBnZXRCb29sZWFuT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAADGdldEludE9yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAICAAAAFU5vIGRhdGEgZm9yIHRoaXMua2V5PQUAAAADa2V5AQAAAA5mYWlsRXhlY3V0ZUdldAAAAAUAAAADbXNnAAAADGJhc2VBc3NldFN0cgAAAA51c2VyQWRkcmVzc1N0cgAAAA1zdWJtaXRUeElkU3RyAAAADW9wZXJhdGlvblR5cGUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAA21zZwIAAAAPOiBiYXNlQXNzZXRTdHI9BQAAAAxiYXNlQXNzZXRTdHICAAAAECB1c2VyQWRkcmVzc1N0cj0FAAAADnVzZXJBZGRyZXNzU3RyAgAAAA8gc3VibWl0VHhJZFN0cj0FAAAADXN1Ym1pdFR4SWRTdHICAAAADyBvcGVyYXRpb25UeXBlPQUAAAANb3BlcmF0aW9uVHlwZQEAAAAXZmFpbFN1Ym1pdExpbWl0c0V4Y2VlZHMAAAAEAAAADXJlbWFpbmluZ0Jhc2UAAAAOcmVtYWluaW5nU2hhcmUAAAAQbmV3UmVtYWluaW5nQmFzZQAAABFuZXdSZW1haW5pbmdTaGFyZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAArc3VibWl0IG9wZXJhdGlvbiBsaW1pdHMgaGF2ZSBiZWVuIHJlYWNoZWQ6IAIAAAAPIHJlbWFpbmluZ0Jhc2U9CQABpAAAAAEFAAAADXJlbWFpbmluZ0Jhc2UCAAAAECByZW1haW5pbmdTaGFyZT0JAAGkAAAAAQUAAAAOcmVtYWluaW5nU2hhcmUCAAAAEiBuZXdSZW1haW5pbmdCYXNlPQkAAaQAAAABBQAAABBuZXdSZW1haW5pbmdCYXNlAgAAABMgbmV3UmVtYWluaW5nU2hhcmU9CQABpAAAAAEFAAAAEW5ld1JlbWFpbmluZ1NoYXJlAQAAABRmYWlsVG9wdXBNYW5hZ2VyT25seQAAAAEAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAjb3BlcnRpb24gZGVuaWVkOiBvbmx5IHRvcFVwTWFuYWdlcj0FAAAAE3RvcHVwTWFuYWdlckFkZHJlc3MCAAAAGyBjYW4gc2VuZCBzdWNoIHRyYW5zYWN0aW9ucwEAAAARY29udmVydFNoYXJlMkJhc2UAAAADAAAAC3NoYXJlQW1vdW50AAAABXByaWNlAAAACXByaWNlTXVsdAkAAGsAAAADBQAAAAtzaGFyZUFtb3VudAUAAAAFcHJpY2UFAAAACXByaWNlTXVsdAEAAAARY29udmVydEJhc2UyU2hhcmUAAAADAAAACmJhc2VBbW91bnQAAAAFcHJpY2UAAAAJcHJpY2VNdWx0CQAAawAAAAMFAAAACmJhc2VBbW91bnQFAAAACXByaWNlTXVsdAUAAAAFcHJpY2UBAAAAC2tleUFzc2V0Q2ZnAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAXJXMlcyVzX19jb25maWdfX2Fzc2V0X18FAAAADGJhc2VBc3NldFN0cgEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAAxrZXlQcmljZUxhc3QAAAABAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkAASwAAAACAgAAABUlcyVzJWRfX3ByaWNlX19sYXN0X18FAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgEAAAALa2V5UHJpY2VBVEgAAAABAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkAASwAAAACAgAAABQlcyVzJWRfX3ByaWNlX19hdGhfXwUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAQAAABJrZXlQcmljZUJ5VG9wVXBJZHgAAAACAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAACHRvcFVwSWR4CQAEuQAAAAIJAARMAAAAAgIAAAAbJXMlcyVkJWRfX3ByaWNlX19ieVRvcFVwSWR4CQAETAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAETAAAAAIJAAGkAAAAAQUAAAAIdG9wVXBJZHgFAAAAA25pbAUAAAADU0VQAQAAAA9rZXlQcmljZUhpc3RvcnkAAAADAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgAAAAFoAAAACXRpbWVzdGFtcAkABLkAAAACCQAETAAAAAICAAAAGiVzJXMlZCVkJWRfX3ByaWNlX19oaXN0b3J5CQAETAAAAAIFAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkABEwAAAACCQABpAAAAAEFAAAAAWgJAARMAAAAAgkAAaQAAAABBQAAAAl0aW1lc3RhbXAFAAAAA25pbAUAAAADU0VQAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQABLAAAAAICAAAAFyVzJXMlZF9fdG90YWxfX2xvY2tlZF9fBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIBAAAAFGtleVRvdGFsTG9ja2VkQnlVc2VyAAAAAgAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAA51c2VyQWRkcmVzc1N0cgkABLkAAAACCQAETAAAAAICAAAAFyVzJXMlZCVzX190b3RhbF9fbG9ja2VkCQAETAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAETAAAAAIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAANuaWwFAAAAA1NFUAEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEAAAARaW50ZXJuYWxCYXNlQXNzZXQJAAEsAAAAAgIAAAAoJXMlcyVkX19tYXBwaW5nc19faW50ZXJuYWwyYmFzZUFzc2V0SWRfXwkAAaQAAAABBQAAABFpbnRlcm5hbEJhc2VBc3NldAEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAMYmFzZUFzc2V0U3RyCQABLAAAAAICAAAAKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAAAADGJhc2VBc3NldFN0cgEAAAAca2V5TWFwcGluZ3NTaGFyZTJiYXNlQXNzZXRJZAAAAAEAAAANc2hhcmVBc3NldFN0cgkAASwAAAACAgAAACUlcyVzJXNfX21hcHBpbmdzX19zaGFyZTJiYXNlQXNzZXRJZF9fBQAAAA1zaGFyZUFzc2V0U3RyAQAAABxrZXlNYXBwaW5nc0Jhc2VBc3NldDJzaGFyZUlkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAlJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MnNoYXJlSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAABdrZXlTaHV0ZG93blB1dE9wZXJhdGlvbgAAAAEAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAXJXMlcyVkX19zaHV0ZG93bl9fcHV0X18FAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAQAAABJrZXlTaHV0ZG93bk1hbmFnZXIAAAABAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABLAAAAAICAAAAGyVzJXMlZF9fc2h1dGRvd25fX21hbmFnZXJfXwUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIBAAAAEmtleVRvcFVwQ3VycmVudElkeAAAAAEAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAbJXMlcyVkX190b3B1cF9fY3VycmVudElkeF9fBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgEAAAASa2V5VG9wVXBMYXN0SGVpZ2h0AAAAAgAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIAAAAGc2VuZGVyCQAEuQAAAAIJAARMAAAAAgIAAAAfJXMlcyVzJWQlc19fdG9wdXBfX2xhc3RfX2hlaWdodAkABEwAAAACBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAARMAAAAAgUAAAAGc2VuZGVyBQAAAANuaWwFAAAAA1NFUAEAAAAOa2V5VG9wdXBNdXRleHQAAAABAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkAASwAAAACAgAAABYlcyVzJWRfX3RvcHVwX19tdXRleF9fBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIBAAAAD2tleVRvcHVwSGlzdG9yeQAAAAIAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAAAACHRvcHVwSWR4CQAEuQAAAAIJAARMAAAAAgIAAAAYJXMlcyVkJWRfX3RvcHVwX19oaXN0b3J5CQAETAAAAAIFAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkABEwAAAACCQABpAAAAAEFAAAACHRvcHVwSWR4BQAAAANuaWwFAAAAA1NFUAEAAAASa2V5TGltaXRzUmVtYWluaW5nAAAAAQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAAEsAAAAAgIAAAAbJXMlcyVkX19saW1pdHNfX3JlbWFpbmluZ19fBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIAAAAAEklkeENmZ1NoYXJlQXNzZXRJZAAAAAAAAAAAAQAAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQAAAAAAAAAAAIAAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhBc3NldHMAAAAAAAAAAAMAAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlAAAAAAAAAAAEAAAAABRJZHhDZmdHZXREZWxheUJsb2NrcwAAAAAAAAAABQAAAAAbSWR4Q2ZnVG9wdXBJbnRlcnZhbEluQmxvY2tzAAAAAAAAAAAGAAAAABpJZHhDZmdUb3B1cE1heE5lZ2F0aXZlUGFydAAAAAAAAAAABwAAAAAZSWR4Q2ZnVG9wdXBNYW5hZ2VyQWRkcmVzcwAAAAAAAAAACAAAAAAZSWR4Q2ZnU3VibWl0TGltaXRzQmFzZU1heAAAAAAAAAAACQAAAAAbSWR4Q2ZnU3VibWl0TGltaXRzQmFzZVJlc2V0AAAAAAAAAAAKAAAAABpJZHhDZmdTdWJtaXRMaW1pdHNTaGFyZU1heAAAAAAAAAAACwAAAAAcSWR4Q2ZnU3VibWl0TGltaXRzU2hhcmVSZXNldAAAAAAAAAAADAAAAAASSWR4Q2ZnQWRtaW5BZGRyZXNzAAAAAAAAAAANAQAAAAxkYXRhQXNzZXRDZmcAAAANAAAADXNoYXJlQXNzZXRTdHIAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwAAABFkZWNpbWFsc011bHRQcmljZQAAABBnZXREZWxheUluQmxvY2tzAAAAFXRvcHVwSW50ZXJ2YWxJbkJsb2NrcwAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAAAABN0b3B1cE1hbmFnZXJBZGRyZXNzAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgAAAAVc3VibWl0TGltaXRzQmFzZVJlc2V0AAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4AAAAFnN1Ym1pdExpbWl0c1NoYXJlUmVzZXQAAAAMYWRtaW5BZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAYJXMlZCVkJWQlZCVkJWQlcyVkJWQlZCVkCQAETAAAAAIFAAAADXNoYXJlQXNzZXRTdHIJAARMAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQAETAAAAAIJAAGkAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABBnZXREZWxheUluQmxvY2tzCQAETAAAAAIJAAGkAAAAAQUAAAAVdG9wdXBJbnRlcnZhbEluQmxvY2tzCQAETAAAAAIJAAGkAAAAAQUAAAAUdG9wdXBNYXhOZWdhdGl2ZVBhcnQJAARMAAAAAgUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwkABEwAAAACCQABpAAAAAEFAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgJAARMAAAAAgkAAaQAAAABBQAAABVzdWJtaXRMaW1pdHNCYXNlUmVzZXQJAARMAAAAAgkAAaQAAAABBQAAABRzdWJtaXRMaW1pdHNTaGFyZU1heAkABEwAAAACCQABpAAAAAEFAAAAFnN1Ym1pdExpbWl0c1NoYXJlUmVzZXQJAARMAAAAAgUAAAAMYWRtaW5BZGRyZXNzBQAAAANuaWwFAAAAA1NFUAAAAAAVSWR4VG90YWxMb2NrZWRJblNoYXJlAAAAAAAAAAABAAAAABVJZHhUb3RhbExvY2tlZE91dEJhc2UAAAAAAAAAAAIAAAAAFElkeFRvdGFsTG9ja2VkSW5CYXNlAAAAAAAAAAADAAAAABZJZHhUb3RhbExvY2tlZE91dFNoYXJlAAAAAAAAAAAEAQAAAA9kYXRhVG90YWxMb2NrZWQAAAAEAAAADWluU2hhcmVBbW91bnQAAAANb3V0QmFzZUFtb3VudAAAAAxpbkJhc2VBbW91bnQAAAAOb3V0U2hhcmVBbW91bnQJAAS5AAAAAgkABEwAAAACAgAAAAglZCVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAADWluU2hhcmVBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA1vdXRCYXNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAMaW5CYXNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAOb3V0U2hhcmVBbW91bnQFAAAAA25pbAUAAAADU0VQAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEAAAADWluU2hhcmVBbW91bnQAAAANb3V0QmFzZUFtb3VudAAAAAxpbkJhc2VBbW91bnQAAAAOb3V0U2hhcmVBbW91bnQJAARMAAAAAgD//////////wkABEwAAAACBQAAAA1pblNoYXJlQW1vdW50CQAETAAAAAIFAAAADW91dEJhc2VBbW91bnQJAARMAAAAAgUAAAAMaW5CYXNlQW1vdW50CQAETAAAAAIFAAAADm91dFNoYXJlQW1vdW50BQAAAANuaWwBAAAAD3JlYWRUb3RhbExvY2tlZAAAAAEAAAADa2V5BAAAABB0b3RhbExvY2tlZEFycmF5CQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAAPZGF0YVRvdGFsTG9ja2VkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAADU0VQCQEAAAASZGF0YVRvdGFsTG9ja2VkSW50AAAABAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFUlkeFRvdGFsTG9ja2VkT3V0QmFzZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFElkeFRvdGFsTG9ja2VkSW5CYXNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQUAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQEAAAATY2FsY1RvdGFsTG9ja2VkRGlmZgAAAAgAAAAJZGlyZWN0aW9uAAAADW9wZXJhdGlvblR5cGUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAACGluQW1vdW50AAAAC2Jhc2VBc3NldElkAAAADHNoYXJlQXNzZXRJZAQAAAABdAkAASwAAAACBQAAAAlkaXJlY3Rpb24FAAAADW9wZXJhdGlvblR5cGUDCQAAAAAAAAIFAAAAAXQCAAAAB3N1Ym1pdFAEAAAACXRvdGFsRGlmZgkBAAAAEmRhdGFUb3RhbExvY2tlZEludAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAFAAAACGluQW1vdW50AAAAAAAAAAAABAAAAAh1c2VyRGlmZgUAAAAJdG90YWxEaWZmCQAFFgAAAAQFAAAACXRvdGFsRGlmZgUAAAAIdXNlckRpZmYAAAAAAAAAAAAJAAJZAAAAAQIAAAAAAwkAAAAAAAACBQAAAAF0AgAAAAdzdWJtaXRHBAAAAAl0b3RhbERpZmYJAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEBQAAAAhpbkFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIdXNlckRpZmYFAAAACXRvdGFsRGlmZgkABRYAAAAEBQAAAAl0b3RhbERpZmYFAAAACHVzZXJEaWZmAAAAAAAAAAAACQACWQAAAAECAAAAAAMJAAAAAAAAAgUAAAABdAIAAAAIZXhlY3V0ZVAEAAAACW91dEFtb3VudAkBAAAAEWNvbnZlcnRCYXNlMlNoYXJlAAAAAwUAAAAIaW5BbW91bnQFAAAABXByaWNlBQAAAAlwcmljZU11bHQEAAAACXRvdGFsRGlmZgkBAAAAEmRhdGFUb3RhbExvY2tlZEludAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACW91dEFtb3VudAQAAAAIdXNlckRpZmYJAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEAAAAAAAAAAAAAAAAAAAAAAAABQAAAAhpbkFtb3VudAAAAAAAAAAAAAkABRYAAAAEBQAAAAl0b3RhbERpZmYFAAAACHVzZXJEaWZmBQAAAAlvdXRBbW91bnQFAAAADHNoYXJlQXNzZXRJZAMJAAAAAAAAAgUAAAABdAIAAAAIZXhlY3V0ZUcEAAAACW91dEFtb3VudAkBAAAAEWNvbnZlcnRTaGFyZTJCYXNlAAAAAwUAAAAIaW5BbW91bnQFAAAABXByaWNlBQAAAAlwcmljZU11bHQEAAAACXRvdGFsRGlmZgkBAAAAEmRhdGFUb3RhbExvY2tlZEludAAAAAQAAAAAAAAAAAAFAAAACW91dEFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIdXNlckRpZmYJAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEBQAAAAhpbkFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABRYAAAAEBQAAAAl0b3RhbERpZmYFAAAACHVzZXJEaWZmBQAAAAlvdXRBbW91bnQFAAAAC2Jhc2VBc3NldElkAwkAAAAAAAACBQAAAAF0AgAAAAV0b3B1cAQAAAAQdG90YWxMb2NrZWRBcnJheQkBAAAAD3JlYWRUb3RhbExvY2tlZAAAAAEJAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBAAAABd0b3RhbExvY2tlZEluQmFzZUFtb3VudAkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABRJZHhUb3RhbExvY2tlZEluQmFzZQQAAAAYdG90YWxMb2NrZWRJblNoYXJlQW1vdW50CQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQQAAAAJdG90YWxEaWZmCQEAAAASZGF0YVRvdGFsTG9ja2VkSW50AAAABAUAAAAYdG90YWxMb2NrZWRJblNoYXJlQW1vdW50CQAAaAAAAAIA//////////8JAQAAABFjb252ZXJ0U2hhcmUyQmFzZQAAAAMFAAAAGHRvdGFsTG9ja2VkSW5TaGFyZUFtb3VudAUAAAAFcHJpY2UFAAAACXByaWNlTXVsdAUAAAAXdG90YWxMb2NrZWRJbkJhc2VBbW91bnQJAABoAAAAAgD//////////wkBAAAAEWNvbnZlcnRCYXNlMlNoYXJlAAAAAwUAAAAXdG90YWxMb2NrZWRJbkJhc2VBbW91bnQFAAAABXByaWNlBQAAAAlwcmljZU11bHQJAAUWAAAABAUAAAAJdG90YWxEaWZmBQAAAANuaWwAAAAAAAAAAAAJAAJZAAAAAQIAAAAACQAAAgAAAAEJAAEsAAAAAgIAAAARVW5zdXBwb3J0ZWQgVHlwZSAFAAAAAXQBAAAAFlRvdGFsTG9ja2VkU3RyaW5nRW50cnkAAAADAAAABmFjdGlvbgAAAANrZXkAAAAEZGlmZgoBAAAABlVQREFURQAAAAIAAAABYQAAAAFiAwkAAAAAAAACBQAAAAZhY3Rpb24CAAAACUlOQ1JFTUVOVAkAAGQAAAACBQAAAAFhBQAAAAFiAwkAAAAAAAACBQAAAAZhY3Rpb24CAAAACURFQ1JFTUVOVAkAAGUAAAACBQAAAAFhBQAAAAFiCQAAAgAAAAEJAAEsAAAAAgIAAAATVW5zdXBwb3J0ZWQgYWN0aW9uIAUAAAAGYWN0aW9uBAAAAAlkYXRhQXJyYXkJAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABBQAAAANrZXkJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQkBAAAAD2RhdGFUb3RhbExvY2tlZAAAAAQJAQAAAAZVUERBVEUAAAACCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAAVSWR4VG90YWxMb2NrZWRJblNoYXJlCQABkQAAAAIFAAAABGRpZmYFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQkBAAAABlVQREFURQAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABVJZHhUb3RhbExvY2tlZE91dEJhc2UJAAGRAAAAAgUAAAAEZGlmZgUAAAAVSWR4VG90YWxMb2NrZWRPdXRCYXNlCQEAAAAGVVBEQVRFAAAAAgkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAFElkeFRvdGFsTG9ja2VkSW5CYXNlCQABkQAAAAIFAAAABGRpZmYFAAAAFElkeFRvdGFsTG9ja2VkSW5CYXNlCQEAAAAGVVBEQVRFAAAAAgkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAFklkeFRvdGFsTG9ja2VkT3V0U2hhcmUJAAGRAAAAAgUAAAAEZGlmZgUAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQEAAAAMa2V5T3BlcmF0aW9uAAAABAAAAA1vcGVyYXRpb25UeXBlAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAAC3VzZXJBZGRyZXNzAAAABHR4SWQJAAS5AAAAAgkABEwAAAACAgAAAAglcyVkJXMlcwkABEwAAAACBQAAAA1vcGVyYXRpb25UeXBlCQAETAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAIFAAAABHR4SWQFAAAAA25pbAUAAAADU0VQAAAAAA1JZHhPcGVyU3RhdHVzAAAAAAAAAAABAAAAAA9JZHhPcGVySW5BbW91bnQAAAAAAAAAAAIAAAAADElkeE9wZXJQcmljZQAAAAAAAAAAAwAAAAAQSWR4T3Blck91dEFtb3VudAAAAAAAAAAABAAAAAASSWR4T3BlclN0YXJ0SGVpZ2h0AAAAAAAAAAAFAAAAABVJZHhPcGVyU3RhcnRUaW1lc3RhbXAAAAAAAAAAAAYAAAAAEElkeE9wZXJFbmRIZWlnaHQAAAAAAAAAAAcAAAAAE0lkeE9wZXJFbmRUaW1lc3RhbXAAAAAAAAAAAAgAAAAAFUlkeE9wZXJUb3B1cFVubG9ja0lkeAAAAAAAAAAACQEAAAAecHJpdmF0ZURhdGFPcGVyYXRpb25BbGxTdHJpbmdzAAAACQAAAAZzdGF0dXMAAAANaW5Bc3NldEFtb3VudAAAAAVwcmljZQAAAA5vdXRBc3NldEFtb3VudAAAAAtzdGFydEhlaWdodAAAAA5zdGFydFRpbWVzdGFtcAAAAAllbmRIZWlnaHQAAAAMZW5kVGltZXN0YW1wAAAABGxvY2sJAAS5AAAAAgkABEwAAAACAgAAABIlcyVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgUAAAAGc3RhdHVzCQAETAAAAAIFAAAADWluQXNzZXRBbW91bnQJAARMAAAAAgUAAAAFcHJpY2UJAARMAAAAAgUAAAAOb3V0QXNzZXRBbW91bnQJAARMAAAAAgUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgUAAAAOc3RhcnRUaW1lc3RhbXAJAARMAAAAAgUAAAAJZW5kSGVpZ2h0CQAETAAAAAIFAAAADGVuZFRpbWVzdGFtcAkABEwAAAACBQAAAARsb2NrBQAAAANuaWwFAAAAA1NFUAEAAAANZGF0YU9wZXJhdGlvbgAAAAkAAAAGc3RhdHVzAAAADWluQXNzZXRBbW91bnQAAAAFcHJpY2UAAAAOb3V0QXNzZXRBbW91bnQAAAALc3RhcnRIZWlnaHQAAAAOc3RhcnRUaW1lc3RhbXAAAAAJZW5kSGVpZ2h0AAAADGVuZFRpbWVzdGFtcAAAAA50b3B1cFVubG9ja0lkeAkBAAAAHnByaXZhdGVEYXRhT3BlcmF0aW9uQWxsU3RyaW5ncwAAAAkFAAAABnN0YXR1cwkAAaQAAAABBQAAAA1pbkFzc2V0QW1vdW50CQABpAAAAAEFAAAABXByaWNlCQABpAAAAAEFAAAADm91dEFzc2V0QW1vdW50CQABpAAAAAEFAAAAC3N0YXJ0SGVpZ2h0CQABpAAAAAEFAAAADnN0YXJ0VGltZXN0YW1wCQABpAAAAAEFAAAACWVuZEhlaWdodAkAAaQAAAABBQAAAAxlbmRUaW1lc3RhbXAJAAGkAAAAAQUAAAAOdG9wdXBVbmxvY2tJZHgBAAAAHGRhdGFPcGVyYXRpb25FeGVjdXRpb25VcGRhdGUAAAAEAAAADWN1cnJPcGVyQXJyYXkAAAAJbmV3U3RhdHVzAAAACG5ld1ByaWNlAAAADG5ld091dEFtb3VudAkBAAAAHnByaXZhdGVEYXRhT3BlcmF0aW9uQWxsU3RyaW5ncwAAAAkFAAAACW5ld1N0YXR1cwkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAAA9JZHhPcGVySW5BbW91bnQJAAGkAAAAAQUAAAAIbmV3UHJpY2UJAAGkAAAAAQUAAAAMbmV3T3V0QW1vdW50CQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAAEklkeE9wZXJTdGFydEhlaWdodAkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAABVJZHhPcGVyU3RhcnRUaW1lc3RhbXAJAAGkAAAAAQUAAAAGaGVpZ2h0CQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAAFUlkeE9wZXJUb3B1cFVubG9ja0lkeAEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQAAAAxiYXNlQXNzZXRTdHIEAAAAA2tleQkBAAAAC2tleUFzc2V0Q2ZnAAAAAQUAAAAMYmFzZUFzc2V0U3RyCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAAANrZXkFAAAAA1NFUAAAAAAWSWR4TGltaXRzUmVtYWluaW5nQmFzZQAAAAAAAAAAAQAAAAAXSWR4TGltaXRzUmVtYWluaW5nU2hhcmUAAAAAAAAAAAIBAAAAGlJlbWFpbmluZ0xpbWl0c1N0cmluZ0VudHJ5AAAAAwAAAANrZXkAAAASYmFzZVJlbWFpbmluZ0xpbWl0AAAAE3NoYXJlUmVtYWluaW5nTGltaXQJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQkABLkAAAACCQAETAAAAAICAAAABCVkJWQJAARMAAAAAgkAAaQAAAABBQAAABJiYXNlUmVtYWluaW5nTGltaXQJAARMAAAAAgkAAaQAAAABBQAAABNzaGFyZVJlbWFpbmluZ0xpbWl0BQAAAANuaWwFAAAAA1NFUAEAAAASVG9wdXBNdXRleEludEVudHJ5AAAAAgAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAA5hY3F1aXJlZEhlaWdodAkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA5rZXlUb3B1cE11dGV4dAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA5hY3F1aXJlZEhlaWdodAEAAAARVG9wdXBIaXN0b3J5RW50cnkAAAACAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAACHRvcHVwSWR4AgAAAAABAAAAEGdlbmVyaWNDYWxjUHJpY2UAAAAFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAAC2Jhc2VBc3NldElkAAAAD3RvcFVwQmFzZUFtb3VudAAAAAxzaGFyZUFzc2V0SWQAAAARZGVjaW1hbHNNdWx0UHJpY2UEAAAAEHRvdGFsTG9ja2VkQXJyYXkJAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAYdG90YWxMb2NrZWRPdXRCYXNlQW1vdW50CQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFUlkeFRvdGFsTG9ja2VkT3V0QmFzZQQAAAAZY3Vyckl0ZXJUb3RhbEluQmFzZUFtb3VudAkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABRJZHhUb3RhbExvY2tlZEluQmFzZQQAAAAQYmFzZUFzc2V0QmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAAtiYXNlQXNzZXRJZAQAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwkAAGUAAAACCQAAZQAAAAIJAABkAAAAAgUAAAAQYmFzZUFzc2V0QmFsYW5jZQUAAAAPdG9wVXBCYXNlQW1vdW50BQAAABljdXJySXRlclRvdGFsSW5CYXNlQW1vdW50BQAAABh0b3RhbExvY2tlZE91dEJhc2VBbW91bnQEAAAAGXRvdGFsTG9ja2VkT3V0U2hhcmVBbW91bnQJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQUAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQQAAAAaY3Vyckl0ZXJUb3RhbEluU2hhcmVBbW91bnQJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQUAAAAVSWR4VG90YWxMb2NrZWRJblNoYXJlBAAAAA1zaGFyZUVtaXNzaW9uCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAxzaGFyZUFzc2V0SWQAAAAIcXVhbnRpdHkDCQAAZgAAAAIAAAAAAAAAAAAFAAAAE2Jhc2VBc3NldEJhbGFuY2VXQ08JAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAqYmFzZUFzc2V0QmFsYW5jZVdDTyA8IDA6IGJhc2VBc3NldEJhbGFuY2U9CQABpAAAAAEFAAAAEGJhc2VBc3NldEJhbGFuY2UCAAAAFSBiYXNlQXNzZXRCYWxhbmNlV0NPPQkAAaQAAAABBQAAABNiYXNlQXNzZXRCYWxhbmNlV0NPBAAAAAlsYXN0UHJpY2UJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAAMa2V5UHJpY2VMYXN0AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAABXByaWNlAwkAAAAAAAACBQAAAA1zaGFyZUVtaXNzaW9uAAAAAAAAAAAABQAAAAlsYXN0UHJpY2UJAABrAAAAAwUAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwUAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAADXNoYXJlRW1pc3Npb24JAAUbAAAACQUAAAAFcHJpY2UFAAAAEGJhc2VBc3NldEJhbGFuY2UA//////////8FAAAAE2Jhc2VBc3NldEJhbGFuY2VXQ08FAAAADXNoYXJlRW1pc3Npb24FAAAAGWN1cnJJdGVyVG90YWxJbkJhc2VBbW91bnQFAAAAGmN1cnJJdGVyVG90YWxJblNoYXJlQW1vdW50BQAAABh0b3RhbExvY2tlZE91dEJhc2VBbW91bnQFAAAAGXRvdGFsTG9ja2VkT3V0U2hhcmVBbW91bnQBAAAACWNhbGNQcmljZQAAAAQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAALYmFzZUFzc2V0SWQAAAAMc2hhcmVBc3NldElkAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAAQZ2VuZXJpY0NhbGNQcmljZQAAAAUFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAtiYXNlQXNzZXRJZAAAAAAAAAAAAAUAAAAMc2hhcmVBc3NldElkBQAAABFkZWNpbWFsc011bHRQcmljZQEAAAAGc3VibWl0AAAABQAAAA1vcGVyYXRpb25UeXBlAAAAAWkAAAAIaW5BbW91bnQAAAAJaW5Bc3NldElkAAAADGJhc2VBc3NldFN0cgQAAAAKaW5Bc3NldFN0cgkAAlgAAAABBQAAAAlpbkFzc2V0SWQEAAAADnVzZXJBZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALYmFzZUFzc2V0SWQJAAJZAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAAhjZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAANc2hhcmVBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnU2hhcmVBc3NldElkBAAAAAxzaGFyZUFzc2V0SWQJAAJZAAAAAQUAAAANc2hhcmVBc3NldFN0cgQAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoQXNzZXRzBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAACWxpbWl0c0tFWQkBAAAAEmtleUxpbWl0c1JlbWFpbmluZwAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBAAAAA5saW1pdHNDZmdBcnJheQkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAJbGltaXRzS0VZBQAAAANTRVAEAAAAE2xpbWl0c1JlbWFpbmluZ0Jhc2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA5saW1pdHNDZmdBcnJheQUAAAAWSWR4TGltaXRzUmVtYWluaW5nQmFzZQQAAAAUbGltaXRzUmVtYWluaW5nU2hhcmUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA5saW1pdHNDZmdBcnJheQUAAAAXSWR4TGltaXRzUmVtYWluaW5nU2hhcmUEAAAADGlzUHV0QmxvY2tlZAkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABCQEAAAAXa2V5U2h1dGRvd25QdXRPcGVyYXRpb24AAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgMFAAAADGlzUHV0QmxvY2tlZAkAAAIAAAABAgAAABhwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQEAAAAD29wZXJhdGlvbnNNdXRleAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAOa2V5VG9wdXBNdXRleHQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAAAAAAAAAMJAABmAAAAAgkAAGQAAAACBQAAAA9vcGVyYXRpb25zTXV0ZXgAAAAAAAAAADwFAAAABmhlaWdodAkAAAIAAAABAgAAAC5zdWJtaXQgb3BlcmF0aW9ucyBhcmUgYmxvY2tlZCBieSB0b3B1cCBtYW5hZ2VyBAAAAAlkaWZmVHVwbGUJAQAAABNjYWxjVG90YWxMb2NrZWREaWZmAAAACAIAAAAGc3VibWl0BQAAAA1vcGVyYXRpb25UeXBlBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAAAAAAAAAAAAAAAAAAAAAUAAAAIaW5BbW91bnQFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQEAAAAFmxpbWl0c1JlbWFpbmluZ0Jhc2VOZXcJAABlAAAAAgUAAAATbGltaXRzUmVtYWluaW5nQmFzZQkAAZEAAAACCAUAAAAJZGlmZlR1cGxlAAAAAl8yBQAAABRJZHhUb3RhbExvY2tlZEluQmFzZQQAAAAXbGltaXRzUmVtYWluaW5nU2hhcmVOZXcJAABlAAAAAgUAAAAUbGltaXRzUmVtYWluaW5nU2hhcmUJAAGRAAAAAggFAAAACWRpZmZUdXBsZQAAAAJfMgUAAAAVSWR4VG90YWxMb2NrZWRJblNoYXJlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAWbGltaXRzUmVtYWluaW5nQmFzZU5ldwYJAABmAAAAAgAAAAAAAAAAAAUAAAAXbGltaXRzUmVtYWluaW5nU2hhcmVOZXcJAQAAABdmYWlsU3VibWl0TGltaXRzRXhjZWVkcwAAAAQFAAAAE2xpbWl0c1JlbWFpbmluZ0Jhc2UFAAAAFGxpbWl0c1JlbWFpbmluZ1NoYXJlBQAAABZsaW1pdHNSZW1haW5pbmdCYXNlTmV3BQAAABdsaW1pdHNSZW1haW5pbmdTaGFyZU5ldwQAAAAPdG9wVXBDdXJyZW50SWR4CQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAEmtleVRvcFVwQ3VycmVudElkeAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlPcGVyYXRpb24AAAAEBQAAAA1vcGVyYXRpb25UeXBlBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAkBAAAADWRhdGFPcGVyYXRpb24AAAAJAgAAAAdQRU5ESU5HBQAAAAhpbkFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAAAAAAAAAAAAAAAAAAkAAGQAAAACBQAAAA90b3BVcEN1cnJlbnRJZHgAAAAAAAAAAAEFAAAAA25pbAkBAAAAFlRvdGFsTG9ja2VkU3RyaW5nRW50cnkAAAADAgAAAAlJTkNSRU1FTlQJAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCAUAAAAJZGlmZlR1cGxlAAAAAl8xCQEAAAAWVG90YWxMb2NrZWRTdHJpbmdFbnRyeQAAAAMCAAAACUlOQ1JFTUVOVAkBAAAAFGtleVRvdGFsTG9ja2VkQnlVc2VyAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyCAUAAAAJZGlmZlR1cGxlAAAAAl8yCQEAAAAaUmVtYWluaW5nTGltaXRzU3RyaW5nRW50cnkAAAADBQAAAAlsaW1pdHNLRVkFAAAAFmxpbWl0c1JlbWFpbmluZ0Jhc2VOZXcFAAAAF2xpbWl0c1JlbWFpbmluZ1NoYXJlTmV3AQAAAAdleGVjdXRlAAAABAAAAA1vcGVyYXRpb25UeXBlAAAADGJhc2VBc3NldFN0cgAAAA51c2VyQWRkcmVzc1N0cgAAAA1zdWJtaXRUeElkU3RyBAAAAAt1c2VyQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIEAAAADWFzc2V0Q2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAMb3BlcmF0aW9uS2V5CQEAAAAMa2V5T3BlcmF0aW9uAAAABAUAAAANb3BlcmF0aW9uVHlwZQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAA1zdWJtaXRUeElkU3RyBAAAAA5vcGVyYXRpb25BcnJheQkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAMb3BlcmF0aW9uS2V5BQAAAANTRVAEAAAABnN0YXR1cwkAAZEAAAACBQAAAA5vcGVyYXRpb25BcnJheQUAAAANSWR4T3BlclN0YXR1cwQAAAAIaW5BbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA5vcGVyYXRpb25BcnJheQUAAAAPSWR4T3BlckluQW1vdW50BAAAAA50b3B1cFVubG9ja0lkeAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADm9wZXJhdGlvbkFycmF5BQAAABVJZHhPcGVyVG9wdXBVbmxvY2tJZHgEAAAADGN1cnJUb3BVcElkeAkBAAAADGdldEludE9yRmFpbAAAAAEJAQAAABJrZXlUb3BVcEN1cnJlbnRJZHgAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAOcHJpY2VCeVRvcFVwSWQJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAASa2V5UHJpY2VCeVRvcFVwSWR4AAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAADGN1cnJUb3BVcElkeAMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwIAAAAHUEVORElORwkBAAAADmZhaWxFeGVjdXRlR2V0AAAABQIAAAAVU3RhdHVzIGlzIG5vdCBQRU5ESU5HBQAAAAxiYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAA1zdWJtaXRUeElkU3RyBQAAAA1vcGVyYXRpb25UeXBlAwkAAGYAAAACBQAAAA50b3B1cFVubG9ja0lkeAUAAAAMY3VyclRvcFVwSWR4CQEAAAAOZmFpbEV4ZWN1dGVHZXQAAAAFCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAlPcGVyTG9ja1sJAAGkAAAAAQUAAAAOdG9wdXBVbmxvY2tJZHgCAAAABF0gPiAJAAGkAAAAAQUAAAAMY3VyclRvcFVwSWR4BQAAAAxiYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAA1zdWJtaXRUeElkU3RyBQAAAA1vcGVyYXRpb25UeXBlBAAAAAlkaWZmVHVwbGUJAQAAABNjYWxjVG90YWxMb2NrZWREaWZmAAAACAIAAAAHZXhlY3V0ZQUAAAANb3BlcmF0aW9uVHlwZQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAADnByaWNlQnlUb3BVcElkBQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAIaW5BbW91bnQFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQEAAAACW91dEFtb3VudAgFAAAACWRpZmZUdXBsZQAAAAJfMwQAAAAPb3V0VHJhbnNmZXJEYXRhAwkAAAAAAAACCAUAAAAJZGlmZlR1cGxlAAAAAl80BQAAAAtiYXNlQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwUAAAAJb3V0QW1vdW50BQAAAAtiYXNlQXNzZXRJZAUAAAADbmlsCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAAlvdXRBbW91bnQFAAAADHNoYXJlQXNzZXRJZAUAAAADbmlsCQAETQAAAAIJAARNAAAAAgkABE0AAAACBQAAAA9vdXRUcmFuc2ZlckRhdGEJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADG9wZXJhdGlvbktleQkBAAAAHGRhdGFPcGVyYXRpb25FeGVjdXRpb25VcGRhdGUAAAAEBQAAAA5vcGVyYXRpb25BcnJheQIAAAAIRklOSVNIRUQFAAAADnByaWNlQnlUb3BVcElkBQAAAAlvdXRBbW91bnQJAQAAABZUb3RhbExvY2tlZFN0cmluZ0VudHJ5AAAAAwIAAAAJREVDUkVNRU5UCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cggFAAAACWRpZmZUdXBsZQAAAAJfMQkBAAAAFlRvdGFsTG9ja2VkU3RyaW5nRW50cnkAAAADAgAAAAlERUNSRU1FTlQJAQAAABRrZXlUb3RhbExvY2tlZEJ5VXNlcgAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cggFAAAACWRpZmZUdXBsZQAAAAJfMgEAAAAbcHJpdmF0ZUN1cnJlbnRTeXNQYXJhbXNSRVNUAAAAAQAAAAxiYXNlQXNzZXRTdHIEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAIY2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADXNoYXJlQXNzZXRTdHIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAMc2hhcmVBc3NldElkCQACWQAAAAEFAAAADXNoYXJlQXNzZXRTdHIEAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aEFzc2V0cwQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABdJZHhDZmdJbnRlcm5hbEJhc2VBc3NldAQAAAALcHJpY2VBdGhLRVkJAQAAAAtrZXlQcmljZUFUSAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBAAAAAhwcmljZUFUSAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAtwcmljZUF0aEtFWQAAAAAAAAAAAAQAAAAMcHJpY2VMYXN0S0VZCQEAAAAMa2V5UHJpY2VMYXN0AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAACXByaWNlTGFzdAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAxwcmljZUxhc3RLRVkAAAAAAAAAAAAEAAAACHN5c1N0YXRlCQEAAAAJY2FsY1ByaWNlAAAABAUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAFHwAAAA0JAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAVwcmljZQgFAAAACHN5c1N0YXRlAAAAAl8xCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQYmFzZUFzc2V0QmFsYW5jZQgFAAAACHN5c1N0YXRlAAAAAl8yCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAACLTEIBQAAAAhzeXNTdGF0ZQAAAAJfMwkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE2Jhc2VBc3NldEJhbGFuY2VXQ08IBQAAAAhzeXNTdGF0ZQAAAAJfNAkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADXNoYXJlRW1pc3Npb24IBQAAAAhzeXNTdGF0ZQAAAAJfNQkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGWN1cnJJdGVyVG90YWxJbkJhc2VBbW91bnQIBQAAAAhzeXNTdGF0ZQAAAAJfNgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGmN1cnJJdGVyVG90YWxJblNoYXJlQW1vdW50CAUAAAAIc3lzU3RhdGUAAAACXzcJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABh0b3RhbExvY2tlZE91dEJhc2VBbW91bnQIBQAAAAhzeXNTdGF0ZQAAAAJfOAkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGXRvdGFsTG9ja2VkT3V0U2hhcmVBbW91bnQIBQAAAAhzeXNTdGF0ZQAAAAJfOQkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAhwcmljZUFUSAUAAAAIcHJpY2VBVEgJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAlwcmljZUxhc3QFAAAACXByaWNlTGFzdAAAAAkAAAABaQEAAAASYWRtaW5SZWdpc3RlckFzc2V0AAAADgAAAAxiYXNlQXNzZXRTdHIAAAAOc2hhcmVBc3NldE5hbWUAAAAPc2hhcmVBc3NldERlc2NyAAAAEGdldERlbGF5aW5CbG9ja3MAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwAAAApzdGFydFByaWNlAAAAFXRvcHVwSW50ZXJ2YWxJbkJsb2NrcwAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAAAABN0b3B1cE1hbmFnZXJBZGRyZXNzAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgAAAAVc3VibWl0TGltaXRzQmFzZVJlc2V0AAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4AAAAFnN1Ym1pdExpbWl0c1NoYXJlUmVzZXQAAAAMYWRtaW5BZGRyZXNzBAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAACGRlY2ltYWxzCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAtiYXNlQXNzZXRJZAAAAAhkZWNpbWFscwQAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoBAAAABh0b3B1cE1heE5lZ2F0aXZlUGVyY2VudHMJAABrAAAAAwUAAAAUdG9wdXBNYXhOZWdhdGl2ZVBhcnQAAAAAAAAAAGQFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMEAAAAEGJhc2VBc3NldEJhbGFuY2UJAAPwAAAAAgUAAAAEdGhpcwUAAAALYmFzZUFzc2V0SWQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkAAAAAAAACBQAAABBiYXNlQXNzZXRCYWxhbmNlAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEFAAAABHRoaXMCAAAAIiBtdXN0IGhhdmUgYW55IGluaXRpYWwgYmFsYW5jZSBvZiAFAAAADGJhc2VBc3NldFN0cgMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAAtrZXlBc3NldENmZwAAAAEFAAAADGJhc2VBc3NldFN0cgkAAAIAAAABCQABLAAAAAIFAAAADGJhc2VBc3NldFN0cgIAAAAcIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZAMJAQAAAAIhPQAAAAIJAAQlAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwUAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkAAAIAAAABAgAAAB5pbnZhbGlkIHNodXRkb3duTWFuYWdlckFkZHJlc3MDCQEAAAACIT0AAAACCQAEJQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAE3RvcHVwTWFuYWdlckFkZHJlc3MFAAAAE3RvcHVwTWFuYWdlckFkZHJlc3MJAAACAAAAAQIAAAAbaW52YWxpZCB0b3B1cE1hbmFnZXJBZGRyZXNzAwkAAGYAAAACAAAAAAAAAAAABQAAABBnZXREZWxheWluQmxvY2tzCQAAAgAAAAEJAAEsAAAAAgIAAAAZaW52YWxpZCBnZXREZWxheWluQmxvY2tzPQkAAaQAAAABBQAAABBnZXREZWxheWluQmxvY2tzAwMJAABnAAAAAgAAAAAAAAAAAAUAAAAYdG9wdXBNYXhOZWdhdGl2ZVBlcmNlbnRzBgkAAGcAAAACBQAAABh0b3B1cE1heE5lZ2F0aXZlUGVyY2VudHMAAAAAAAAAAGMJAAACAAAAAQIAAAAmaW52YWxpZCB0b3B1cE1heE5lZ2F0aXZlUGFydCBwYXJhbWV0ZXIEAAAAD3NoYXJlSW5pdEFtb3VudAkBAAAAEWNvbnZlcnRCYXNlMlNoYXJlAAAAAwUAAAAQYmFzZUFzc2V0QmFsYW5jZQUAAAAKc3RhcnRQcmljZQUAAAARZGVjaW1hbHNNdWx0UHJpY2UEAAAAFXNoYXJlQXNzZXRJc3N1ZUFjdGlvbgkABEIAAAAFBQAAAA5zaGFyZUFzc2V0TmFtZQUAAAAPc2hhcmVBc3NldERlc2NyBQAAAA9zaGFyZUluaXRBbW91bnQFAAAACGRlY2ltYWxzBgQAAAAMc2hhcmVBc3NldElkCQAEOAAAAAEFAAAAFXNoYXJlQXNzZXRJc3N1ZUFjdGlvbgQAAAANc2hhcmVBc3NldFN0cgkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQEAAAAE2ludGVybmFsQmFzZUFzc2V0SWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmtleU5leHRJbnRlcm5hbEFzc2V0SWQAAAAAAAAAAAAAAAAABAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAaQAAAABBQAAABNpbnRlcm5hbEJhc2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlBc3NldENmZwAAAAEFAAAADGJhc2VBc3NldFN0cgkBAAAADGRhdGFBc3NldENmZwAAAA0FAAAADXNoYXJlQXNzZXRTdHIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzBQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAQZ2V0RGVsYXlpbkJsb2NrcwUAAAAVdG9wdXBJbnRlcnZhbEluQmxvY2tzBQAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwUAAAATc3VibWl0TGltaXRzQmFzZU1heAUAAAAVc3VibWl0TGltaXRzQmFzZVJlc2V0BQAAABRzdWJtaXRMaW1pdHNTaGFyZU1heAUAAAAWc3VibWl0TGltaXRzU2hhcmVSZXNldAUAAAAMYWRtaW5BZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAUAAAAMYmFzZUFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAca2V5TWFwcGluZ3NTaGFyZTJiYXNlQXNzZXRJZAAAAAEFAAAADXNoYXJlQXNzZXRTdHIFAAAADGJhc2VBc3NldFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAca2V5TWFwcGluZ3NCYXNlQXNzZXQyc2hhcmVJZAAAAAEFAAAADGJhc2VBc3NldFN0cgUAAAANc2hhcmVBc3NldFN0cgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlTaHV0ZG93bk1hbmFnZXIAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleU5leHRJbnRlcm5hbEFzc2V0SWQAAAAACQAAZAAAAAIFAAAAE2ludGVybmFsQmFzZUFzc2V0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAKc3RhcnRQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAMFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAApzdGFydFByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5VG9wVXBDdXJyZW50SWR4AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAAAAAAAAAJAARMAAAAAgkBAAAAGlJlbWFpbmluZ0xpbWl0c1N0cmluZ0VudHJ5AAAAAwkBAAAAEmtleUxpbWl0c1JlbWFpbmluZwAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABNzdWJtaXRMaW1pdHNCYXNlTWF4BQAAABRzdWJtaXRMaW1pdHNTaGFyZU1heAkABEwAAAACBQAAABVzaGFyZUFzc2V0SXNzdWVBY3Rpb24JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwUAAAAPc2hhcmVJbml0QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAtzaHV0ZG93blB1dAAAAAEAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAQAAAAWaW50ZXJuYWxCYXNlQXNzZXRJZFN0cgkAAaQAAAABBQAAABNpbnRlcm5hbEJhc2VBc3NldElkBAAAAA5iYXNlQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAQAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABJrZXlTaHV0ZG93bk1hbmFnZXIAAAABBQAAABZpbnRlcm5hbEJhc2VBc3NldElkU3RyAwkAAGYAAAACAAAAAAAAAAABCQABMQAAAAEFAAAADmJhc2VBc3NldElkU3RyCQAAAgAAAAECAAAAG2ludmFsaWQgaW50ZXJuYWxCYXNlQXNzZXRJZAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQAAAgAAAAECAAAADWFjY2VzcyBkZW5pZWQJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABdrZXlTaHV0ZG93blB1dE9wZXJhdGlvbgAAAAEJAAGkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAYFAAAAA25pbAAAAAFpAQAAAAlzdWJtaXRQdXQAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAACGluQW1vdW50CAUAAAADcG10AAAABmFtb3VudAQAAAAJaW5Bc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADGJhc2VBc3NldFN0cgkAAlgAAAABBQAAAAlpbkFzc2V0SWQJAQAAAAZzdWJtaXQAAAAFAgAAAAFQBQAAAAFpBQAAAAhpbkFtb3VudAUAAAAJaW5Bc3NldElkBQAAAAxiYXNlQXNzZXRTdHIAAAABaQEAAAAJc3VibWl0R2V0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAhpbkFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAACWluQXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA1zaGFyZUFzc2V0U3RyCQACWAAAAAEFAAAACWluQXNzZXRJZAQAAAAMYmFzZUFzc2V0U3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAHGtleU1hcHBpbmdzU2hhcmUyYmFzZUFzc2V0SWQAAAABBQAAAA1zaGFyZUFzc2V0U3RyCQEAAAAGc3VibWl0AAAABQIAAAABRwUAAAABaQUAAAAIaW5BbW91bnQFAAAACWluQXNzZXRJZAUAAAAMYmFzZUFzc2V0U3RyAAAAAWkBAAAACmV4ZWN1dGVQdXQAAAADAAAADGJhc2VBc3NldFN0cgAAAA51c2VyQWRkcmVzc1N0cgAAAA1zdWJtaXRUeElkU3RyCQEAAAAHZXhlY3V0ZQAAAAQCAAAAAVAFAAAADGJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADXN1Ym1pdFR4SWRTdHIAAAABaQEAAAAKZXhlY3V0ZUdldAAAAAMAAAAMYmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyAAAADXN1Ym1pdFR4SWRTdHIJAQAAAAdleGVjdXRlAAAABAIAAAABRwUAAAAMYmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAANc3VibWl0VHhJZFN0cgAAAAFpAQAAAA9vcGVyYXRpb25zTXV0ZXgAAAABAAAADGJhc2VBc3NldFN0cgQAAAANYXNzZXRDZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAWdG9wVXBNYW5hZ2VyQWRkcmVzc1N0cgkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABlJZHhDZmdUb3B1cE1hbmFnZXJBZGRyZXNzBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABdJZHhDZmdJbnRlcm5hbEJhc2VBc3NldAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQEAAAAUZmFpbFRvcHVwTWFuYWdlck9ubHkAAAABBQAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQAETAAAAAIJAQAAABJUb3B1cE11dGV4SW50RW50cnkAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAGaGVpZ2h0BQAAAANuaWwAAAABaQEAAAAMdG9wVXBCYWxhbmNlAAAAAgAAAAxiYXNlQXNzZXRTdHIAAAAGYW1vdW50BAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADWFzc2V0Q2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAJcHJpY2VNdWx0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAADWJvdGhBc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoQXNzZXRzBAAAABV0b3B1cEludGVydmFsSW5CbG9ja3MJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABtJZHhDZmdUb3B1cEludGVydmFsSW5CbG9ja3MEAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAaSWR4Q2ZnVG9wdXBNYXhOZWdhdGl2ZVBhcnQEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAGUlkeENmZ1RvcHVwTWFuYWdlckFkZHJlc3MEAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABlJZHhDZmdTdWJtaXRMaW1pdHNCYXNlTWF4BAAAABRzdWJtaXRMaW1pdHNTaGFyZU1heAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAGklkeENmZ1N1Ym1pdExpbWl0c1NoYXJlTWF4BAAAABJ0b3BVcEN1cnJlbnRJZHhLRVkJAQAAABJrZXlUb3BVcEN1cnJlbnRJZHgAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAMcHJldlRvcFVwSWR4CQEAAAAMZ2V0SW50T3JGYWlsAAAAAQUAAAASdG9wVXBDdXJyZW50SWR4S0VZBAAAAA9jdXJyZW50VG9wVXBJZHgJAABkAAAAAgUAAAAMcHJldlRvcFVwSWR4AAAAAAAAAAABBAAAAAV2YWxpZAMJAABmAAAAAgUAAAAGYW1vdW50AAAAAAAAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAACnBtdEFzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAMJAQAAAAIhPQAAAAIFAAAAC2Jhc2VBc3NldElkBQAAAApwbXRBc3NldElkCQAAAgAAAAECAAAAPmF0dGFjaGVkIHBheW1lbnQncyBhc3NldCBpZCBpcyBOT1QgbWF0Y2hlZCBwYXNzZWQgYmFzZUFzc2V0U3RyAwkAAGYAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAIG9ubHkgb25lIHBheW1lbnQgY2FuIGJlIGF0dGFjaGVkAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAABmFtb3VudAkAAAIAAAABAgAAAD1hdHRhY2hlZCBwYXltZW50LmFtb3VudCBpcyBOT1QgbWF0Y2hlZCBwYXNzZWQgYW1vdW50IGFyZ3VtZW50BgMJAABmAAAAAgAAAAAAAAAAAAUAAAAGYW1vdW50BAAAAAtiYXNlQmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAAtiYXNlQXNzZXRJZAQAAAANYWxsb3dlZEFtb3VudAkAAGsAAAADBQAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAUAAAALYmFzZUJhbGFuY2UFAAAADWJvdGhBc3NldE11bHQDCQAAZgAAAAIJAQAAAAEtAAAAAQUAAAAGYW1vdW50BQAAAA1hbGxvd2VkQW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAAAvdG9wdXAgbmVnYXRpdmUgYW1vdW50IGNvdWxkbid0IGJlIGdyZWF0ZXIgdGhhbiAJAAGkAAAAAQUAAAANYWxsb3dlZEFtb3VudAYJAAACAAAAAQIAAAAaemVybyBhbW91bnQgaXMgbm90IGFsbG93ZWQEAAAAEnRvcFVwTGFzdEhlaWdodEtFWQkBAAAAEmtleVRvcFVwTGFzdEhlaWdodAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPdG9wVXBMYXN0SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEnRvcFVwTGFzdEhlaWdodEtFWQAAAAAAAAAAAAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQEAAAAUZmFpbFRvcHVwTWFuYWdlck9ubHkAAAABBQAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyAwkBAAAAASEAAAABBQAAAAV2YWxpZAkAAAIAAAABAgAAABF2YWxpZGF0aW9uIGZhaWxlZAMJAABmAAAAAgUAAAAVdG9wdXBJbnRlcnZhbEluQmxvY2tzCQAAZQAAAAIFAAAABmhlaWdodAUAAAAPdG9wVXBMYXN0SGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAwxIHRvcHVwIHBlciAJAAGkAAAAAQUAAAAVdG9wdXBJbnRlcnZhbEluQmxvY2tzAgAAACggYmxvY2tzIGZyb20gdGhlIHNhbWUgYWRkcmVzcyBpcyBhbGxvd2VkBAAAAAVwcmljZQgJAQAAABBnZW5lcmljQ2FsY1ByaWNlAAAABQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAC2Jhc2VBc3NldElkBQAAAAZhbW91bnQFAAAADHNoYXJlQXNzZXRJZAUAAAAJcHJpY2VNdWx0AAAAAl8xBAAAAAlkaWZmVHVwbGUJAQAAABNjYWxjVG90YWxMb2NrZWREaWZmAAAACAIAAAAFdG9wdXACAAAAAAUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAABXByaWNlBQAAAAlwcmljZU11bHQAAAAAAAAAAAAFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQEAAAADnRvcHVwVG90YWxEaWZmCAUAAAAJZGlmZlR1cGxlAAAAAl8xBAAAAAtwcmljZUF0aEtFWQkBAAAAC2tleVByaWNlQVRIAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAADHByZXZQcmljZUFUSAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAtwcmljZUF0aEtFWQAAAAAAAAAAAAkABE4AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleVByaWNlTGFzdAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAMFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmtleVByaWNlQnlUb3BVcElkeAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA9jdXJyZW50VG9wVXBJZHgFAAAABXByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJ0b3BVcEN1cnJlbnRJZHhLRVkFAAAAD2N1cnJlbnRUb3BVcElkeAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALcHJpY2VBdGhLRVkDCQAAZgAAAAIFAAAABXByaWNlBQAAAAxwcmV2UHJpY2VBVEgFAAAABXByaWNlBQAAAAxwcmV2UHJpY2VBVEgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEnRvcFVwTGFzdEhlaWdodEtFWQUAAAAGaGVpZ2h0BQAAAANuaWwJAQAAABZUb3RhbExvY2tlZFN0cmluZ0VudHJ5AAAAAwIAAAAJREVDUkVNRU5UCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdG9wdXBUb3RhbERpZmYJAQAAABJUb3B1cE11dGV4SW50RW50cnkAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAAAAAAAAAkBAAAAGlJlbWFpbmluZ0xpbWl0c1N0cmluZ0VudHJ5AAAAAwkBAAAAEmtleUxpbWl0c1JlbWFpbmluZwAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABNzdWJtaXRMaW1pdHNCYXNlTWF4BQAAABRzdWJtaXRMaW1pdHNTaGFyZU1heAkBAAAABEJ1cm4AAAACBQAAAAxzaGFyZUFzc2V0SWQJAAGRAAAAAgUAAAAOdG9wdXBUb3RhbERpZmYFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQJAQAAAAEtAAAAAQkAAZEAAAACBQAAAA50b3B1cFRvdGFsRGlmZgUAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQYDCQAAZgAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAQAAAAEtAAAAAQUAAAAGYW1vdW50BQAAAAtiYXNlQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAABaQEAAAAUY3VycmVudFN5c1BhcmFtc1JFU1QAAAABAAAADGJhc2VBc3NldFN0cgQAAAANc3lzU3RhdGVUdXBsZQkBAAAAG3ByaXZhdGVDdXJyZW50U3lzUGFyYW1zUkVTVAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAFcHJpY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMQAAAAV2YWx1ZQQAAAARZGVjaW1hbHNNdWx0UHJpY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMgAAAAV2YWx1ZQQAAAAQYmFzZUFzc2V0QmFsYW5jZQgIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl8zAAAABXZhbHVlBAAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfNAAAAAV2YWx1ZQQAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwgIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl81AAAABXZhbHVlBAAAAA1zaGFyZUVtaXNzaW9uCAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzYAAAAFdmFsdWUEAAAAGWN1cnJJdGVyVG90YWxJbkJhc2VBbW91bnQICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfNwAAAAV2YWx1ZQQAAAAaY3Vyckl0ZXJUb3RhbEluU2hhcmVBbW91bnQICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfOAAAAAV2YWx1ZQQAAAAYdG90YWxMb2NrZWRPdXRCYXNlQW1vdW50CAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzkAAAAFdmFsdWUEAAAAGXRvdGFsTG9ja2VkT3V0U2hhcmVBbW91bnQICAUAAAANc3lzU3RhdGVUdXBsZQAAAANfMTAAAAAFdmFsdWUEAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMICAUAAAANc3lzU3RhdGVUdXBsZQAAAANfMTEAAAAFdmFsdWUEAAAACHByaWNlQVRICAgFAAAADXN5c1N0YXRlVHVwbGUAAAADXzEyAAAABXZhbHVlBAAAAAlwcmljZUxhc3QICAUAAAANc3lzU3RhdGVUdXBsZQAAAANfMTMAAAAFdmFsdWUEAAAACHJlc3REYXRhCQAEuQAAAAIJAARMAAAAAgIAAAAZc3RhcnRDdXJyZW50U3lzUGFyYW1zUkVTVAkABEwAAAACCQABpAAAAAEFAAAABXByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABBiYXNlQXNzZXRCYWxhbmNlCQAETAAAAAIJAAGkAAAAAQUAAAAVdG90YWxMb2NrZWRCYXNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwkABEwAAAACCQABpAAAAAEFAAAADXNoYXJlRW1pc3Npb24JAARMAAAAAgkAAaQAAAABBQAAABljdXJySXRlclRvdGFsSW5CYXNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAaY3Vyckl0ZXJUb3RhbEluU2hhcmVBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAABh0b3RhbExvY2tlZE91dEJhc2VBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAABl0b3RhbExvY2tlZE91dFNoYXJlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwkABEwAAAACCQABpAAAAAEFAAAACHByaWNlQVRICQAETAAAAAIJAAGkAAAAAQUAAAAJcHJpY2VMYXN0CQAETAAAAAICAAAAF2VuZEN1cnJlbnRTeXNQYXJhbXNSRVNUBQAAAANuaWwFAAAAA1NFUAkAAAIAAAABBQAAAAhyZXN0RGF0YQAAAADr69MZ", "chainId": 84, "height": 1458803, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 24w2yoHRoB44ajZVdmtj6acdRUA8Vhf5Xr9niZFGveAw Next: Es5keHQxj8Temxf8TjGc9o6nuZjG1QDJmFBsCGDEc7FE Diff:
Old | New | Differences | |
---|---|---|---|
108 | 108 | ||
109 | 109 | let al = 12 | |
110 | 110 | ||
111 | - | func am (P,E,an,ao,ap,aq,ar,r,as,at,au,av) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", P, E, toString(an), toString(ao), toString(ap), toString(aq), toString(ar), r, toString(as), toString(at), toString(au), toString(av)], a) | |
111 | + | let am = 13 | |
112 | + | ||
113 | + | func an (P,E,ao,ap,aq,ar,as,r,at,au,av,aw,ax) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", P, E, toString(ao), toString(ap), toString(aq), toString(ar), toString(as), r, toString(at), toString(au), toString(av), toString(aw), ax], a) | |
112 | 114 | ||
113 | 115 | ||
114 | - | let | |
116 | + | let ay = 1 | |
115 | 117 | ||
116 | - | let | |
118 | + | let az = 2 | |
117 | 119 | ||
118 | - | let | |
120 | + | let aA = 3 | |
119 | 121 | ||
120 | - | let | |
122 | + | let aB = 4 | |
121 | 123 | ||
122 | - | func | |
124 | + | func aC (aD,aE,aF,aG) = makeString(["%d%d%d%d", toString(aD), toString(aE), toString(aF), toString(aG)], a) | |
123 | 125 | ||
124 | 126 | ||
125 | - | func | |
127 | + | func aH (aD,aE,aF,aG) = [-1, aD, aE, aF, aG] | |
126 | 128 | ||
127 | 129 | ||
128 | - | func | |
129 | - | let | |
130 | - | | |
130 | + | func aI (c) = { | |
131 | + | let aJ = split(valueOrElse(getString(this, c), aC(0, 0, 0, 0)), a) | |
132 | + | aH(parseIntValue(aJ[ay]), parseIntValue(aJ[az]), parseIntValue(aJ[aA]), parseIntValue(aJ[aB])) | |
131 | 133 | } | |
132 | 134 | ||
133 | 135 | ||
134 | - | func | |
135 | - | let | |
136 | - | if (( | |
136 | + | func aK (aL,k,E,u,v,aM,aN,aO) = { | |
137 | + | let aP = (aL + k) | |
138 | + | if ((aP == "submitP")) | |
137 | 139 | then { | |
138 | - | let | |
139 | - | let | |
140 | - | $Tuple4( | |
140 | + | let aQ = aH(0, 0, aM, 0) | |
141 | + | let aR = aQ | |
142 | + | $Tuple4(aQ, aR, 0, fromBase58String("")) | |
141 | 143 | } | |
142 | - | else if (( | |
144 | + | else if ((aP == "submitG")) | |
143 | 145 | then { | |
144 | - | let | |
145 | - | let | |
146 | - | $Tuple4( | |
146 | + | let aQ = aH(aM, 0, 0, 0) | |
147 | + | let aR = aQ | |
148 | + | $Tuple4(aQ, aR, 0, fromBase58String("")) | |
147 | 149 | } | |
148 | - | else if (( | |
150 | + | else if ((aP == "executeP")) | |
149 | 151 | then { | |
150 | - | let | |
151 | - | let | |
152 | - | let | |
153 | - | $Tuple4( | |
152 | + | let aS = w(aM, u, v) | |
153 | + | let aQ = aH(0, 0, 0, aS) | |
154 | + | let aR = aH(0, 0, aM, 0) | |
155 | + | $Tuple4(aQ, aR, aS, aO) | |
154 | 156 | } | |
155 | - | else if (( | |
157 | + | else if ((aP == "executeG")) | |
156 | 158 | then { | |
157 | - | let | |
158 | - | let | |
159 | - | let | |
160 | - | $Tuple4( | |
159 | + | let aS = s(aM, u, v) | |
160 | + | let aQ = aH(0, aS, 0, 0) | |
161 | + | let aR = aH(aM, 0, 0, 0) | |
162 | + | $Tuple4(aQ, aR, aS, aN) | |
161 | 163 | } | |
162 | - | else if (( | |
164 | + | else if ((aP == "topup")) | |
163 | 165 | then { | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | let | |
168 | - | $Tuple4( | |
166 | + | let aJ = aI(J(E)) | |
167 | + | let aT = aJ[aA] | |
168 | + | let aU = aJ[ay] | |
169 | + | let aQ = aH(aU, (-1 * s(aU, u, v)), aT, (-1 * w(aT, u, v))) | |
170 | + | $Tuple4(aQ, nil, 0, fromBase58String("")) | |
169 | 171 | } | |
170 | - | else throw(("Unsupported Type " + | |
172 | + | else throw(("Unsupported Type " + aP)) | |
171 | 173 | } | |
172 | 174 | ||
173 | 175 | ||
174 | - | func | |
175 | - | func | |
176 | - | then ( | |
177 | - | else if (( | |
178 | - | then ( | |
179 | - | else throw(("Unsupported action " + | |
176 | + | func aV (aW,c,aX) = { | |
177 | + | func aY (aZ,ba) = if ((aW == "INCREMENT")) | |
178 | + | then (aZ + ba) | |
179 | + | else if ((aW == "DECREMENT")) | |
180 | + | then (aZ - ba) | |
181 | + | else throw(("Unsupported action " + aW)) | |
180 | 182 | ||
181 | - | let | |
182 | - | StringEntry(c, | |
183 | + | let bb = aI(c) | |
184 | + | StringEntry(c, aC(aY(bb[ay], aX[ay]), aY(bb[az], aX[az]), aY(bb[aA], aX[aA]), aY(bb[aB], aX[aB]))) | |
183 | 185 | } | |
184 | 186 | ||
185 | 187 | ||
186 | - | func | |
188 | + | func bc (k,E,bd,be) = makeString(["%s%d%s%s", k, E, bd, be], a) | |
187 | 189 | ||
188 | 190 | ||
189 | - | let | |
191 | + | let bf = 1 | |
190 | 192 | ||
191 | - | let | |
193 | + | let bg = 2 | |
192 | 194 | ||
193 | - | let | |
195 | + | let bh = 3 | |
194 | 196 | ||
195 | - | let | |
197 | + | let bi = 4 | |
196 | 198 | ||
197 | - | let | |
199 | + | let bj = 5 | |
198 | 200 | ||
199 | - | let | |
201 | + | let bk = 6 | |
200 | 202 | ||
201 | - | let | |
203 | + | let bl = 7 | |
202 | 204 | ||
203 | - | let | |
205 | + | let bm = 8 | |
204 | 206 | ||
205 | - | let | |
207 | + | let bn = 9 | |
206 | 208 | ||
207 | - | func | |
209 | + | func bo (bp,bq,u,br,bs,bt,bu,bv,bw) = makeString(["%s%d%d%d%d%d%d%d%d", bp, bq, u, br, bs, bt, bu, bv, bw], a) | |
208 | 210 | ||
209 | 211 | ||
210 | - | func | |
212 | + | func bx (bp,bq,u,br,bs,bt,bu,bv,by) = bo(bp, toString(bq), toString(u), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(by)) | |
211 | 213 | ||
212 | 214 | ||
213 | - | func | |
215 | + | func bz (bA,bB,bC,bD) = bo(bB, bA[bg], toString(bC), toString(bD), bA[bj], bA[bk], toString(height), toString(lastBlock.timestamp), bA[bn]) | |
214 | 216 | ||
215 | 217 | ||
216 | - | func | |
218 | + | func bE (h) = { | |
217 | 219 | let c = y(h) | |
218 | 220 | split(b(c), a) | |
219 | 221 | } | |
220 | 222 | ||
221 | 223 | ||
222 | - | let | |
224 | + | let bF = 1 | |
223 | 225 | ||
224 | - | let | |
226 | + | let bG = 2 | |
225 | 227 | ||
226 | - | func | |
228 | + | func bH (c,bI,bJ) = StringEntry(c, makeString(["%d%d", toString(bI), toString(bJ)], a)) | |
227 | 229 | ||
228 | 230 | ||
229 | - | func | |
231 | + | func bK (E,bL) = IntegerEntry(W(E), bL) | |
230 | 232 | ||
231 | 233 | ||
232 | - | func | |
234 | + | func bM (E,Y) = "" | |
233 | 235 | ||
234 | 236 | ||
235 | - | func | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | if ((0 > | |
245 | - | then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString( | |
237 | + | func bN (E,aN,bO,aO,ap) = { | |
238 | + | let aJ = aI(J(E)) | |
239 | + | let bP = aJ[az] | |
240 | + | let bQ = aJ[aA] | |
241 | + | let bR = assetBalance(this, aN) | |
242 | + | let bS = (((bR + bO) - bQ) - bP) | |
243 | + | let bT = aJ[aB] | |
244 | + | let bU = aJ[ay] | |
245 | + | let bV = value(assetInfo(aO)).quantity | |
246 | + | if ((0 > bS)) | |
247 | + | then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString(bR)) + " baseAssetBalanceWCO=") + toString(bS))) | |
246 | 248 | else { | |
247 | - | let | |
248 | - | let u = if (( | |
249 | - | then | |
250 | - | else fraction( | |
251 | - | $Tuple9(u, | |
249 | + | let bW = e(A(E)) | |
250 | + | let u = if ((bV == 0)) | |
251 | + | then bW | |
252 | + | else fraction(bS, ap, bV) | |
253 | + | $Tuple9(u, bR, -1, bS, bV, bQ, bU, bP, bT) | |
252 | 254 | } | |
253 | 255 | } | |
254 | 256 | ||
255 | 257 | ||
256 | - | func | |
258 | + | func bX (E,aN,aO,ap) = bN(E, aN, 0, aO, ap) | |
257 | 259 | ||
258 | 260 | ||
259 | - | func | |
260 | - | let | |
261 | - | let i = toString( | |
262 | - | let | |
263 | - | let | |
264 | - | let P = | |
265 | - | let | |
266 | - | let | |
267 | - | let E = | |
268 | - | let | |
269 | - | let | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | if ( | |
261 | + | func bY (k,bZ,aM,ca,h) = { | |
262 | + | let cb = toBase58String(ca) | |
263 | + | let i = toString(bZ.caller) | |
264 | + | let aN = fromBase58String(h) | |
265 | + | let cc = bE(h) | |
266 | + | let P = cc[aa] | |
267 | + | let aO = fromBase58String(P) | |
268 | + | let ao = parseIntValue(cc[ac]) | |
269 | + | let E = cc[ab] | |
270 | + | let cd = Z(E) | |
271 | + | let ce = split(b(cd), a) | |
272 | + | let cf = parseIntValue(ce[bF]) | |
273 | + | let cg = parseIntValue(ce[bG]) | |
274 | + | let ch = d(R(E)) | |
275 | + | if (ch) | |
274 | 276 | then throw("put operation is blocked") | |
275 | 277 | else { | |
276 | - | let | |
277 | - | if ((( | |
278 | + | let ci = valueOrElse(getInteger(this, W(E)), 0) | |
279 | + | if (((ci + 60) > height)) | |
278 | 280 | then throw("submit operations are blocked by topup manager") | |
279 | 281 | else { | |
280 | - | let | |
281 | - | let | |
282 | - | let | |
283 | - | if (if ((0 > | |
282 | + | let cj = aK("submit", k, E, 0, 0, aM, aN, aO) | |
283 | + | let ck = (cf - cj._2[aA]) | |
284 | + | let cl = (cg - cj._2[ay]) | |
285 | + | if (if ((0 > ck)) | |
284 | 286 | then true | |
285 | - | else (0 > | |
286 | - | then l( | |
287 | + | else (0 > cl)) | |
288 | + | then l(cf, cg, ck, cl) | |
287 | 289 | else { | |
288 | - | let | |
289 | - | ((([StringEntry( | |
290 | + | let cm = e(T(E)) | |
291 | + | ((([StringEntry(bc(k, E, i, toBase58String(bZ.transactionId)), bx("PENDING", aM, 0, 0, height, lastBlock.timestamp, 0, 0, (cm + 1)))] :+ aV("INCREMENT", J(E), cj._1)) :+ aV("INCREMENT", K(E, i), cj._2)) :+ bH(cd, ck, cl)) | |
290 | 292 | } | |
291 | 293 | } | |
292 | 294 | } | |
293 | 295 | } | |
294 | 296 | ||
295 | 297 | ||
296 | - | func | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | let E = | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | if (( | |
298 | + | func cn (k,h,i,j) = { | |
299 | + | let bd = addressFromStringValue(i) | |
300 | + | let co = bE(h) | |
301 | + | let aO = fromBase58String(co[aa]) | |
302 | + | let E = co[ab] | |
303 | + | let ap = parseIntValue(co[ad]) | |
304 | + | let aN = fromBase58String(h) | |
305 | + | let cp = bc(k, E, i, j) | |
306 | + | let cq = split(b(cp), a) | |
307 | + | let bp = cq[bf] | |
308 | + | let aM = parseIntValue(cq[bg]) | |
309 | + | let by = parseIntValue(cq[bn]) | |
310 | + | let cr = e(T(E)) | |
311 | + | let cs = e(D(E, cr)) | |
312 | + | if ((bp != "PENDING")) | |
311 | 313 | then f("Status is not PENDING", h, i, j, k) | |
312 | - | else if (( | |
313 | - | then f(((("OperLock[" + toString( | |
314 | + | else if ((by > cr)) | |
315 | + | then f(((("OperLock[" + toString(by)) + "] > ") + toString(cr)), h, i, j, k) | |
314 | 316 | else { | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | then [ScriptTransfer( | |
319 | - | else [ScriptTransfer( | |
320 | - | ((( | |
317 | + | let cj = aK("execute", k, E, cs, ap, aM, aN, aO) | |
318 | + | let aS = cj._3 | |
319 | + | let ct = if ((cj._4 == aN)) | |
320 | + | then [ScriptTransfer(bd, aS, aN)] | |
321 | + | else [ScriptTransfer(bd, aS, aO)] | |
322 | + | (((ct :+ StringEntry(cp, bz(cq, "FINISHED", cs, aS))) :+ aV("DECREMENT", J(E), cj._1)) :+ aV("DECREMENT", K(E, i), cj._2)) | |
321 | 323 | } | |
322 | 324 | } | |
323 | 325 | ||
324 | 326 | ||
325 | - | func cs (h) = { | |
326 | - | let aL = fromBase58String(h) | |
327 | - | let ca = bC(h) | |
328 | - | let P = ca[aa] | |
329 | - | let aM = fromBase58String(P) | |
330 | - | let an = parseIntValue(ca[ac]) | |
331 | - | let ao = parseIntValue(ca[ad]) | |
332 | - | let E = ca[ab] | |
333 | - | let ct = C(E) | |
334 | - | let cu = valueOrElse(getInteger(this, ct), 0) | |
335 | - | let cv = bV(E, aL, aM, ao) | |
336 | - | $Tuple12(IntegerEntry("price", cv._1), IntegerEntry("decimalsMultPrice", ao), IntegerEntry("baseAssetBalance", cv._2), IntegerEntry("-1", cv._3), IntegerEntry("baseAssetBalanceWCO", cv._4), IntegerEntry("shareEmission", cv._5), IntegerEntry("currIterTotalInBaseAmount", cv._6), IntegerEntry("currIterTotalInShareAmount", cv._7), IntegerEntry("totalLockedOutBaseAmount", cv._8), IntegerEntry("totalLockedOutShareAmount", cv._9), IntegerEntry("decimalsMultBothAssets", an), IntegerEntry("priceATH", cu)) | |
327 | + | func cu (h) = { | |
328 | + | let aN = fromBase58String(h) | |
329 | + | let cc = bE(h) | |
330 | + | let P = cc[aa] | |
331 | + | let aO = fromBase58String(P) | |
332 | + | let ao = parseIntValue(cc[ac]) | |
333 | + | let ap = parseIntValue(cc[ad]) | |
334 | + | let E = cc[ab] | |
335 | + | let cv = C(E) | |
336 | + | let cw = valueOrElse(getInteger(this, cv), 0) | |
337 | + | let cx = A(E) | |
338 | + | let cy = valueOrElse(getInteger(this, cx), 0) | |
339 | + | let cz = bX(E, aN, aO, ap) | |
340 | + | $Tuple13(IntegerEntry("price", cz._1), IntegerEntry("decimalsMultPrice", ap), IntegerEntry("baseAssetBalance", cz._2), IntegerEntry("-1", cz._3), IntegerEntry("baseAssetBalanceWCO", cz._4), IntegerEntry("shareEmission", cz._5), IntegerEntry("currIterTotalInBaseAmount", cz._6), IntegerEntry("currIterTotalInShareAmount", cz._7), IntegerEntry("totalLockedOutBaseAmount", cz._8), IntegerEntry("totalLockedOutShareAmount", cz._9), IntegerEntry("decimalsMultBothAssets", ao), IntegerEntry("priceATH", cw), IntegerEntry("priceLast", cy)) | |
337 | 341 | } | |
338 | 342 | ||
339 | 343 | ||
340 | - | @Callable( | |
341 | - | func adminRegisterAsset (h, | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | if (( | |
344 | + | @Callable(bZ) | |
345 | + | func adminRegisterAsset (h,cA,cB,cC,cD,cE,ar,as,r,at,au,av,aw,ax) = { | |
346 | + | let aN = fromBase58String(h) | |
347 | + | let cF = value(assetInfo(aN)).decimals | |
348 | + | let ao = pow(10, 0, cF, 0, 0, DOWN) | |
349 | + | let ap = ((100 * 1000) * 1000) | |
350 | + | let cG = fraction(as, 100, ao) | |
351 | + | let bR = assetBalance(this, aN) | |
352 | + | if ((bZ.caller != this)) | |
349 | 353 | then throw("permissions denied") | |
350 | - | else if (( | |
354 | + | else if ((bR == 0)) | |
351 | 355 | then throw(((toString(this) + " must have any initial balance of ") + h)) | |
352 | 356 | else if (isDefined(getString(this, y(h)))) | |
353 | 357 | then throw((h + " has been already registered")) | |
354 | - | else if ((toString(addressFromStringValue( | |
358 | + | else if ((toString(addressFromStringValue(cD)) != cD)) | |
355 | 359 | then throw("invalid shutdownManagerAddress") | |
356 | 360 | else if ((toString(addressFromStringValue(r)) != r)) | |
357 | 361 | then throw("invalid topupManagerAddress") | |
358 | - | else if ((0 > | |
359 | - | then throw(("invalid getDelayinBlocks=" + toString( | |
360 | - | else if (if ((0 >= | |
362 | + | else if ((0 > cC)) | |
363 | + | then throw(("invalid getDelayinBlocks=" + toString(cC))) | |
364 | + | else if (if ((0 >= cG)) | |
361 | 365 | then true | |
362 | - | else ( | |
366 | + | else (cG >= 99)) | |
363 | 367 | then throw("invalid topupMaxNegativePart parameter") | |
364 | 368 | else { | |
365 | - | let | |
366 | - | let | |
367 | - | let | |
368 | - | let P = toBase58String( | |
369 | - | let | |
370 | - | let E = toString( | |
371 | - | [StringEntry(y(h), | |
369 | + | let cH = w(bR, cE, ap) | |
370 | + | let cI = Issue(cA, cB, cH, cF, true) | |
371 | + | let aO = calculateAssetId(cI) | |
372 | + | let P = toBase58String(aO) | |
373 | + | let cJ = valueOrElse(getInteger(this, z()), 0) | |
374 | + | let E = toString(cJ) | |
375 | + | [StringEntry(y(h), an(P, E, ao, ap, cC, ar, as, r, at, au, av, aw, ax)), StringEntry(L(cJ), h), StringEntry(N(h), E), StringEntry(O(P), h), StringEntry(Q(h), P), BooleanEntry(R(E), false), StringEntry(S(E), cD), IntegerEntry(z(), (cJ + 1)), IntegerEntry(A(E), cE), IntegerEntry(G(E, height, lastBlock.timestamp), cE), IntegerEntry(T(E), 0), bH(Z(E), at, av), cI, ScriptTransfer(addressFromStringValue(r), cH, aO)] | |
372 | 376 | } | |
373 | 377 | } | |
374 | 378 | ||
375 | 379 | ||
376 | 380 | ||
377 | - | @Callable( | |
378 | - | func shutdownPut ( | |
379 | - | let | |
380 | - | let | |
381 | - | let | |
382 | - | if ((1 > size( | |
381 | + | @Callable(bZ) | |
382 | + | func shutdownPut (cJ) = { | |
383 | + | let cK = toString(cJ) | |
384 | + | let cL = b(L(cJ)) | |
385 | + | let cD = b(S(cK)) | |
386 | + | if ((1 > size(cL))) | |
383 | 387 | then throw("invalid internalBaseAssetId") | |
384 | - | else if ((toString( | |
388 | + | else if ((toString(bZ.caller) != cD)) | |
385 | 389 | then throw("access denied") | |
386 | - | else [BooleanEntry(R(toString( | |
390 | + | else [BooleanEntry(R(toString(cJ)), true)] | |
387 | 391 | } | |
388 | 392 | ||
389 | 393 | ||
390 | 394 | ||
391 | - | @Callable( | |
395 | + | @Callable(bZ) | |
392 | 396 | func submitPut () = { | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let h = toBase58String( | |
397 | - | | |
397 | + | let cM = value(bZ.payments[0]) | |
398 | + | let aM = cM.amount | |
399 | + | let ca = value(cM.assetId) | |
400 | + | let h = toBase58String(ca) | |
401 | + | bY("P", bZ, aM, ca, h) | |
398 | 402 | } | |
399 | 403 | ||
400 | 404 | ||
401 | 405 | ||
402 | - | @Callable( | |
406 | + | @Callable(bZ) | |
403 | 407 | func submitGet () = { | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | let P = toBase58String( | |
408 | + | let cM = value(bZ.payments[0]) | |
409 | + | let aM = cM.amount | |
410 | + | let ca = value(cM.assetId) | |
411 | + | let P = toBase58String(ca) | |
408 | 412 | let h = b(O(P)) | |
409 | - | | |
413 | + | bY("G", bZ, aM, ca, h) | |
410 | 414 | } | |
411 | 415 | ||
412 | 416 | ||
413 | 417 | ||
414 | - | @Callable( | |
415 | - | func executePut (h,i,j) = | |
418 | + | @Callable(bZ) | |
419 | + | func executePut (h,i,j) = cn("P", h, i, j) | |
416 | 420 | ||
417 | 421 | ||
418 | 422 | ||
419 | - | @Callable( | |
420 | - | func executeGet (h,i,j) = | |
423 | + | @Callable(bZ) | |
424 | + | func executeGet (h,i,j) = cn("G", h, i, j) | |
421 | 425 | ||
422 | 426 | ||
423 | 427 | ||
424 | - | @Callable( | |
428 | + | @Callable(bZ) | |
425 | 429 | func operationsMutex (h) = { | |
426 | - | let | |
427 | - | let | |
428 | - | let E = | |
429 | - | if ((toString( | |
430 | - | then q( | |
431 | - | else [ | |
430 | + | let co = bE(h) | |
431 | + | let cN = co[ah] | |
432 | + | let E = co[ab] | |
433 | + | if ((toString(bZ.caller) != cN)) | |
434 | + | then q(cN) | |
435 | + | else [bK(E, height)] | |
432 | 436 | } | |
433 | 437 | ||
434 | 438 | ||
435 | 439 | ||
436 | - | @Callable(bX) | |
437 | - | func topUpBalance (h,cK) = { | |
438 | - | let aL = fromBase58String(h) | |
439 | - | let cm = bC(h) | |
440 | - | let aM = fromBase58String(cm[aa]) | |
441 | - | let v = parseIntValue(cm[ad]) | |
442 | - | let cL = parseIntValue(cm[ac]) | |
443 | - | let aq = parseIntValue(cm[af]) | |
444 | - | let ar = parseIntValue(cm[ag]) | |
445 | - | let E = cm[ab] | |
446 | - | let cJ = cm[ah] | |
447 | - | let cM = T(E) | |
448 | - | let cN = e(cM) | |
449 | - | let cO = (cN + 1) | |
450 | - | let cP = if ((cK > 0)) | |
440 | + | @Callable(bZ) | |
441 | + | func topUpBalance (h,cO) = { | |
442 | + | let aN = fromBase58String(h) | |
443 | + | let co = bE(h) | |
444 | + | let aO = fromBase58String(co[aa]) | |
445 | + | let v = parseIntValue(co[ad]) | |
446 | + | let cP = parseIntValue(co[ac]) | |
447 | + | let ar = parseIntValue(co[af]) | |
448 | + | let as = parseIntValue(co[ag]) | |
449 | + | let E = co[ab] | |
450 | + | let cN = co[ah] | |
451 | + | let at = parseIntValue(co[ai]) | |
452 | + | let av = parseIntValue(co[ak]) | |
453 | + | let cQ = T(E) | |
454 | + | let cR = e(cQ) | |
455 | + | let cS = (cR + 1) | |
456 | + | let cT = if ((cO > 0)) | |
451 | 457 | then { | |
452 | - | let | |
453 | - | let | |
454 | - | if (( | |
458 | + | let cM = value(bZ.payments[0]) | |
459 | + | let cU = value(cM.assetId) | |
460 | + | if ((aN != cU)) | |
455 | 461 | then throw("attached payment's asset id is NOT matched passed baseAssetStr") | |
456 | - | else if ((size( | |
462 | + | else if ((size(bZ.payments) > 1)) | |
457 | 463 | then throw("only one payment can be attached") | |
458 | - | else if (( | |
464 | + | else if ((cM.amount != cO)) | |
459 | 465 | then throw("attached payment.amount is NOT matched passed amount argument") | |
460 | 466 | else true | |
461 | 467 | } | |
462 | - | else if ((0 > | |
468 | + | else if ((0 > cO)) | |
463 | 469 | then { | |
464 | - | let | |
465 | - | let | |
466 | - | if ((-( | |
467 | - | then throw(("topup negative amount couldn't be greater than " + toString( | |
470 | + | let cV = assetBalance(this, aN) | |
471 | + | let cW = fraction(as, cV, cP) | |
472 | + | if ((-(cO) > cW)) | |
473 | + | then throw(("topup negative amount couldn't be greater than " + toString(cW))) | |
468 | 474 | else true | |
469 | 475 | } | |
470 | 476 | else throw("zero amount is not allowed") | |
471 | - | let | |
472 | - | let | |
473 | - | if ((toString( | |
474 | - | then q( | |
475 | - | else if (!( | |
477 | + | let cX = U(E, toString(bZ.caller)) | |
478 | + | let cY = valueOrElse(getInteger(this, cX), 0) | |
479 | + | if ((toString(bZ.caller) != cN)) | |
480 | + | then q(cN) | |
481 | + | else if (!(cT)) | |
476 | 482 | then throw("validation failed") | |
477 | - | else if (( | |
478 | - | then throw((("1 topup per " + toString( | |
483 | + | else if ((ar > (height - cY))) | |
484 | + | then throw((("1 topup per " + toString(ar)) + " blocks from the same address is allowed")) | |
479 | 485 | else { | |
480 | - | let u = | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | ((((([IntegerEntry(A(E), u), IntegerEntry(G(E, height, lastBlock.timestamp), u), IntegerEntry(D(E, | |
486 | + | let u = bN(E, aN, cO, aO, v)._1 | |
487 | + | let cj = aK("topup", "", E, u, v, 0, aN, aO) | |
488 | + | let cZ = cj._1 | |
489 | + | let cv = C(E) | |
490 | + | let da = valueOrElse(getInteger(this, cv), 0) | |
491 | + | (((((([IntegerEntry(A(E), u), IntegerEntry(G(E, height, lastBlock.timestamp), u), IntegerEntry(D(E, cS), u), IntegerEntry(cQ, cS), IntegerEntry(cv, if ((u > da)) | |
486 | 492 | then u | |
487 | - | else | |
488 | - | then [ScriptTransfer( | |
493 | + | else da), IntegerEntry(cX, height)] :+ aV("DECREMENT", J(E), cZ)) :+ bK(E, 0)) :+ bH(Z(E), at, av)) :+ Burn(aO, cZ[ay])) :+ Reissue(aO, -(cZ[aB]), true)) ++ (if ((0 > cO)) | |
494 | + | then [ScriptTransfer(bZ.caller, -(cO), aN)] | |
489 | 495 | else nil)) | |
490 | 496 | } | |
491 | 497 | } | |
492 | 498 | ||
493 | 499 | ||
494 | 500 | ||
495 | - | @Callable( | |
501 | + | @Callable(bZ) | |
496 | 502 | func currentSysParamsREST (h) = { | |
497 | - | let cX = cs(h) | |
498 | - | let u = cX._1.value | |
499 | - | let ao = cX._2.value | |
500 | - | let bP = cX._3.value | |
501 | - | let cY = cX._4.value | |
502 | - | let bQ = cX._5.value | |
503 | - | let bT = cX._6.value | |
504 | - | let bO = cX._7.value | |
505 | - | let bS = cX._8.value | |
506 | - | let bN = cX._9.value | |
507 | - | let bR = cX._10.value | |
508 | - | let an = cX._11.value | |
509 | - | let cu = cX._12.value | |
510 | - | let cZ = makeString(["startCurrentSysParamsREST", toString(u), toString(ao), toString(bP), toString(cY), toString(bQ), toString(bT), toString(bO), toString(bS), toString(bN), toString(bR), toString(an), toString(cu), "endCurrentSysParamsREST"], a) | |
511 | - | throw(cZ) | |
503 | + | let db = cu(h) | |
504 | + | let u = db._1.value | |
505 | + | let ap = db._2.value | |
506 | + | let bR = db._3.value | |
507 | + | let dc = db._4.value | |
508 | + | let bS = db._5.value | |
509 | + | let bV = db._6.value | |
510 | + | let bQ = db._7.value | |
511 | + | let bU = db._8.value | |
512 | + | let bP = db._9.value | |
513 | + | let bT = db._10.value | |
514 | + | let ao = db._11.value | |
515 | + | let cw = db._12.value | |
516 | + | let cy = db._13.value | |
517 | + | let dd = makeString(["startCurrentSysParamsREST", toString(u), toString(ap), toString(bR), toString(dc), toString(bS), toString(bV), toString(bQ), toString(bU), toString(bP), toString(bT), toString(ao), toString(cw), toString(cy), "endCurrentSysParamsREST"], a) | |
518 | + | throw(dd) | |
512 | 519 | } | |
513 | 520 | ||
514 | 521 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | func b (c) = valueOrErrorMessage(getString(this, c), ("No data for this.key=" + c)) | |
7 | 7 | ||
8 | 8 | ||
9 | 9 | func d (c) = valueOrErrorMessage(getBoolean(this, c), ("No data for this.key=" + c)) | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func e (c) = valueOrErrorMessage(getInteger(this, c), ("No data for this.key=" + c)) | |
13 | 13 | ||
14 | 14 | ||
15 | 15 | func f (g,h,i,j,k) = throw(((((((((g + ": baseAssetStr=") + h) + " userAddressStr=") + i) + " submitTxIdStr=") + j) + " operationType=") + k)) | |
16 | 16 | ||
17 | 17 | ||
18 | 18 | func l (m,n,o,p) = throw((((((((("submit operation limits have been reached: " + " remainingBase=") + toString(m)) + " remainingShare=") + toString(n)) + " newRemainingBase=") + toString(o)) + " newRemainingShare=") + toString(p))) | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func q (r) = throw((("opertion denied: only topUpManager=" + r) + " can send such transactions")) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func s (t,u,v) = fraction(t, u, v) | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func w (x,u,v) = fraction(x, v, u) | |
28 | 28 | ||
29 | 29 | ||
30 | 30 | func y (h) = ("%s%s%s__config__asset__" + h) | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | func z () = "%s__nextInternalAssetId" | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func A (B) = ("%s%s%d__price__last__" + B) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func C (B) = ("%s%s%d__price__ath__" + B) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func D (E,F) = makeString(["%s%s%d%d__price__byTopUpIdx", E, toString(F)], a) | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func G (B,H,I) = makeString(["%s%s%d%d%d__price__history", B, toString(H), toString(I)], a) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func J (B) = ("%s%s%d__total__locked__" + B) | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func K (E,i) = makeString(["%s%s%d%s__total__locked", E, i], a) | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func L (M) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(M)) | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func N (h) = ("%s%s%s__mappings__baseAsset2internalId__" + h) | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func O (P) = ("%s%s%s__mappings__share2baseAssetId__" + P) | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func Q (h) = ("%s%s%s__mappings__baseAsset2shareId__" + h) | |
64 | 64 | ||
65 | 65 | ||
66 | 66 | func R (E) = ("%s%s%d__shutdown__put__" + E) | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | func S (E) = ("%s%s%d__shutdown__manager__" + E) | |
70 | 70 | ||
71 | 71 | ||
72 | 72 | func T (E) = ("%s%s%d__topup__currentIdx__" + E) | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | func U (B,V) = makeString(["%s%s%s%d%s__topup__last__height", B, V], a) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func W (B) = ("%s%s%d__topup__mutex__" + B) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func X (B,Y) = makeString(["%s%s%d%d__topup__history", B, toString(Y)], a) | |
82 | 82 | ||
83 | 83 | ||
84 | 84 | func Z (B) = ("%s%s%d__limits__remaining__" + B) | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | let aa = 1 | |
88 | 88 | ||
89 | 89 | let ab = 2 | |
90 | 90 | ||
91 | 91 | let ac = 3 | |
92 | 92 | ||
93 | 93 | let ad = 4 | |
94 | 94 | ||
95 | 95 | let ae = 5 | |
96 | 96 | ||
97 | 97 | let af = 6 | |
98 | 98 | ||
99 | 99 | let ag = 7 | |
100 | 100 | ||
101 | 101 | let ah = 8 | |
102 | 102 | ||
103 | 103 | let ai = 9 | |
104 | 104 | ||
105 | 105 | let aj = 10 | |
106 | 106 | ||
107 | 107 | let ak = 11 | |
108 | 108 | ||
109 | 109 | let al = 12 | |
110 | 110 | ||
111 | - | func am (P,E,an,ao,ap,aq,ar,r,as,at,au,av) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", P, E, toString(an), toString(ao), toString(ap), toString(aq), toString(ar), r, toString(as), toString(at), toString(au), toString(av)], a) | |
111 | + | let am = 13 | |
112 | + | ||
113 | + | func an (P,E,ao,ap,aq,ar,as,r,at,au,av,aw,ax) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", P, E, toString(ao), toString(ap), toString(aq), toString(ar), toString(as), r, toString(at), toString(au), toString(av), toString(aw), ax], a) | |
112 | 114 | ||
113 | 115 | ||
114 | - | let | |
116 | + | let ay = 1 | |
115 | 117 | ||
116 | - | let | |
118 | + | let az = 2 | |
117 | 119 | ||
118 | - | let | |
120 | + | let aA = 3 | |
119 | 121 | ||
120 | - | let | |
122 | + | let aB = 4 | |
121 | 123 | ||
122 | - | func | |
124 | + | func aC (aD,aE,aF,aG) = makeString(["%d%d%d%d", toString(aD), toString(aE), toString(aF), toString(aG)], a) | |
123 | 125 | ||
124 | 126 | ||
125 | - | func | |
127 | + | func aH (aD,aE,aF,aG) = [-1, aD, aE, aF, aG] | |
126 | 128 | ||
127 | 129 | ||
128 | - | func | |
129 | - | let | |
130 | - | | |
130 | + | func aI (c) = { | |
131 | + | let aJ = split(valueOrElse(getString(this, c), aC(0, 0, 0, 0)), a) | |
132 | + | aH(parseIntValue(aJ[ay]), parseIntValue(aJ[az]), parseIntValue(aJ[aA]), parseIntValue(aJ[aB])) | |
131 | 133 | } | |
132 | 134 | ||
133 | 135 | ||
134 | - | func | |
135 | - | let | |
136 | - | if (( | |
136 | + | func aK (aL,k,E,u,v,aM,aN,aO) = { | |
137 | + | let aP = (aL + k) | |
138 | + | if ((aP == "submitP")) | |
137 | 139 | then { | |
138 | - | let | |
139 | - | let | |
140 | - | $Tuple4( | |
140 | + | let aQ = aH(0, 0, aM, 0) | |
141 | + | let aR = aQ | |
142 | + | $Tuple4(aQ, aR, 0, fromBase58String("")) | |
141 | 143 | } | |
142 | - | else if (( | |
144 | + | else if ((aP == "submitG")) | |
143 | 145 | then { | |
144 | - | let | |
145 | - | let | |
146 | - | $Tuple4( | |
146 | + | let aQ = aH(aM, 0, 0, 0) | |
147 | + | let aR = aQ | |
148 | + | $Tuple4(aQ, aR, 0, fromBase58String("")) | |
147 | 149 | } | |
148 | - | else if (( | |
150 | + | else if ((aP == "executeP")) | |
149 | 151 | then { | |
150 | - | let | |
151 | - | let | |
152 | - | let | |
153 | - | $Tuple4( | |
152 | + | let aS = w(aM, u, v) | |
153 | + | let aQ = aH(0, 0, 0, aS) | |
154 | + | let aR = aH(0, 0, aM, 0) | |
155 | + | $Tuple4(aQ, aR, aS, aO) | |
154 | 156 | } | |
155 | - | else if (( | |
157 | + | else if ((aP == "executeG")) | |
156 | 158 | then { | |
157 | - | let | |
158 | - | let | |
159 | - | let | |
160 | - | $Tuple4( | |
159 | + | let aS = s(aM, u, v) | |
160 | + | let aQ = aH(0, aS, 0, 0) | |
161 | + | let aR = aH(aM, 0, 0, 0) | |
162 | + | $Tuple4(aQ, aR, aS, aN) | |
161 | 163 | } | |
162 | - | else if (( | |
164 | + | else if ((aP == "topup")) | |
163 | 165 | then { | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | let | |
168 | - | $Tuple4( | |
166 | + | let aJ = aI(J(E)) | |
167 | + | let aT = aJ[aA] | |
168 | + | let aU = aJ[ay] | |
169 | + | let aQ = aH(aU, (-1 * s(aU, u, v)), aT, (-1 * w(aT, u, v))) | |
170 | + | $Tuple4(aQ, nil, 0, fromBase58String("")) | |
169 | 171 | } | |
170 | - | else throw(("Unsupported Type " + | |
172 | + | else throw(("Unsupported Type " + aP)) | |
171 | 173 | } | |
172 | 174 | ||
173 | 175 | ||
174 | - | func | |
175 | - | func | |
176 | - | then ( | |
177 | - | else if (( | |
178 | - | then ( | |
179 | - | else throw(("Unsupported action " + | |
176 | + | func aV (aW,c,aX) = { | |
177 | + | func aY (aZ,ba) = if ((aW == "INCREMENT")) | |
178 | + | then (aZ + ba) | |
179 | + | else if ((aW == "DECREMENT")) | |
180 | + | then (aZ - ba) | |
181 | + | else throw(("Unsupported action " + aW)) | |
180 | 182 | ||
181 | - | let | |
182 | - | StringEntry(c, | |
183 | + | let bb = aI(c) | |
184 | + | StringEntry(c, aC(aY(bb[ay], aX[ay]), aY(bb[az], aX[az]), aY(bb[aA], aX[aA]), aY(bb[aB], aX[aB]))) | |
183 | 185 | } | |
184 | 186 | ||
185 | 187 | ||
186 | - | func | |
188 | + | func bc (k,E,bd,be) = makeString(["%s%d%s%s", k, E, bd, be], a) | |
187 | 189 | ||
188 | 190 | ||
189 | - | let | |
191 | + | let bf = 1 | |
190 | 192 | ||
191 | - | let | |
193 | + | let bg = 2 | |
192 | 194 | ||
193 | - | let | |
195 | + | let bh = 3 | |
194 | 196 | ||
195 | - | let | |
197 | + | let bi = 4 | |
196 | 198 | ||
197 | - | let | |
199 | + | let bj = 5 | |
198 | 200 | ||
199 | - | let | |
201 | + | let bk = 6 | |
200 | 202 | ||
201 | - | let | |
203 | + | let bl = 7 | |
202 | 204 | ||
203 | - | let | |
205 | + | let bm = 8 | |
204 | 206 | ||
205 | - | let | |
207 | + | let bn = 9 | |
206 | 208 | ||
207 | - | func | |
209 | + | func bo (bp,bq,u,br,bs,bt,bu,bv,bw) = makeString(["%s%d%d%d%d%d%d%d%d", bp, bq, u, br, bs, bt, bu, bv, bw], a) | |
208 | 210 | ||
209 | 211 | ||
210 | - | func | |
212 | + | func bx (bp,bq,u,br,bs,bt,bu,bv,by) = bo(bp, toString(bq), toString(u), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(by)) | |
211 | 213 | ||
212 | 214 | ||
213 | - | func | |
215 | + | func bz (bA,bB,bC,bD) = bo(bB, bA[bg], toString(bC), toString(bD), bA[bj], bA[bk], toString(height), toString(lastBlock.timestamp), bA[bn]) | |
214 | 216 | ||
215 | 217 | ||
216 | - | func | |
218 | + | func bE (h) = { | |
217 | 219 | let c = y(h) | |
218 | 220 | split(b(c), a) | |
219 | 221 | } | |
220 | 222 | ||
221 | 223 | ||
222 | - | let | |
224 | + | let bF = 1 | |
223 | 225 | ||
224 | - | let | |
226 | + | let bG = 2 | |
225 | 227 | ||
226 | - | func | |
228 | + | func bH (c,bI,bJ) = StringEntry(c, makeString(["%d%d", toString(bI), toString(bJ)], a)) | |
227 | 229 | ||
228 | 230 | ||
229 | - | func | |
231 | + | func bK (E,bL) = IntegerEntry(W(E), bL) | |
230 | 232 | ||
231 | 233 | ||
232 | - | func | |
234 | + | func bM (E,Y) = "" | |
233 | 235 | ||
234 | 236 | ||
235 | - | func | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | if ((0 > | |
245 | - | then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString( | |
237 | + | func bN (E,aN,bO,aO,ap) = { | |
238 | + | let aJ = aI(J(E)) | |
239 | + | let bP = aJ[az] | |
240 | + | let bQ = aJ[aA] | |
241 | + | let bR = assetBalance(this, aN) | |
242 | + | let bS = (((bR + bO) - bQ) - bP) | |
243 | + | let bT = aJ[aB] | |
244 | + | let bU = aJ[ay] | |
245 | + | let bV = value(assetInfo(aO)).quantity | |
246 | + | if ((0 > bS)) | |
247 | + | then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString(bR)) + " baseAssetBalanceWCO=") + toString(bS))) | |
246 | 248 | else { | |
247 | - | let | |
248 | - | let u = if (( | |
249 | - | then | |
250 | - | else fraction( | |
251 | - | $Tuple9(u, | |
249 | + | let bW = e(A(E)) | |
250 | + | let u = if ((bV == 0)) | |
251 | + | then bW | |
252 | + | else fraction(bS, ap, bV) | |
253 | + | $Tuple9(u, bR, -1, bS, bV, bQ, bU, bP, bT) | |
252 | 254 | } | |
253 | 255 | } | |
254 | 256 | ||
255 | 257 | ||
256 | - | func | |
258 | + | func bX (E,aN,aO,ap) = bN(E, aN, 0, aO, ap) | |
257 | 259 | ||
258 | 260 | ||
259 | - | func | |
260 | - | let | |
261 | - | let i = toString( | |
262 | - | let | |
263 | - | let | |
264 | - | let P = | |
265 | - | let | |
266 | - | let | |
267 | - | let E = | |
268 | - | let | |
269 | - | let | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | if ( | |
261 | + | func bY (k,bZ,aM,ca,h) = { | |
262 | + | let cb = toBase58String(ca) | |
263 | + | let i = toString(bZ.caller) | |
264 | + | let aN = fromBase58String(h) | |
265 | + | let cc = bE(h) | |
266 | + | let P = cc[aa] | |
267 | + | let aO = fromBase58String(P) | |
268 | + | let ao = parseIntValue(cc[ac]) | |
269 | + | let E = cc[ab] | |
270 | + | let cd = Z(E) | |
271 | + | let ce = split(b(cd), a) | |
272 | + | let cf = parseIntValue(ce[bF]) | |
273 | + | let cg = parseIntValue(ce[bG]) | |
274 | + | let ch = d(R(E)) | |
275 | + | if (ch) | |
274 | 276 | then throw("put operation is blocked") | |
275 | 277 | else { | |
276 | - | let | |
277 | - | if ((( | |
278 | + | let ci = valueOrElse(getInteger(this, W(E)), 0) | |
279 | + | if (((ci + 60) > height)) | |
278 | 280 | then throw("submit operations are blocked by topup manager") | |
279 | 281 | else { | |
280 | - | let | |
281 | - | let | |
282 | - | let | |
283 | - | if (if ((0 > | |
282 | + | let cj = aK("submit", k, E, 0, 0, aM, aN, aO) | |
283 | + | let ck = (cf - cj._2[aA]) | |
284 | + | let cl = (cg - cj._2[ay]) | |
285 | + | if (if ((0 > ck)) | |
284 | 286 | then true | |
285 | - | else (0 > | |
286 | - | then l( | |
287 | + | else (0 > cl)) | |
288 | + | then l(cf, cg, ck, cl) | |
287 | 289 | else { | |
288 | - | let | |
289 | - | ((([StringEntry( | |
290 | + | let cm = e(T(E)) | |
291 | + | ((([StringEntry(bc(k, E, i, toBase58String(bZ.transactionId)), bx("PENDING", aM, 0, 0, height, lastBlock.timestamp, 0, 0, (cm + 1)))] :+ aV("INCREMENT", J(E), cj._1)) :+ aV("INCREMENT", K(E, i), cj._2)) :+ bH(cd, ck, cl)) | |
290 | 292 | } | |
291 | 293 | } | |
292 | 294 | } | |
293 | 295 | } | |
294 | 296 | ||
295 | 297 | ||
296 | - | func | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | let E = | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | if (( | |
298 | + | func cn (k,h,i,j) = { | |
299 | + | let bd = addressFromStringValue(i) | |
300 | + | let co = bE(h) | |
301 | + | let aO = fromBase58String(co[aa]) | |
302 | + | let E = co[ab] | |
303 | + | let ap = parseIntValue(co[ad]) | |
304 | + | let aN = fromBase58String(h) | |
305 | + | let cp = bc(k, E, i, j) | |
306 | + | let cq = split(b(cp), a) | |
307 | + | let bp = cq[bf] | |
308 | + | let aM = parseIntValue(cq[bg]) | |
309 | + | let by = parseIntValue(cq[bn]) | |
310 | + | let cr = e(T(E)) | |
311 | + | let cs = e(D(E, cr)) | |
312 | + | if ((bp != "PENDING")) | |
311 | 313 | then f("Status is not PENDING", h, i, j, k) | |
312 | - | else if (( | |
313 | - | then f(((("OperLock[" + toString( | |
314 | + | else if ((by > cr)) | |
315 | + | then f(((("OperLock[" + toString(by)) + "] > ") + toString(cr)), h, i, j, k) | |
314 | 316 | else { | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | then [ScriptTransfer( | |
319 | - | else [ScriptTransfer( | |
320 | - | ((( | |
317 | + | let cj = aK("execute", k, E, cs, ap, aM, aN, aO) | |
318 | + | let aS = cj._3 | |
319 | + | let ct = if ((cj._4 == aN)) | |
320 | + | then [ScriptTransfer(bd, aS, aN)] | |
321 | + | else [ScriptTransfer(bd, aS, aO)] | |
322 | + | (((ct :+ StringEntry(cp, bz(cq, "FINISHED", cs, aS))) :+ aV("DECREMENT", J(E), cj._1)) :+ aV("DECREMENT", K(E, i), cj._2)) | |
321 | 323 | } | |
322 | 324 | } | |
323 | 325 | ||
324 | 326 | ||
325 | - | func cs (h) = { | |
326 | - | let aL = fromBase58String(h) | |
327 | - | let ca = bC(h) | |
328 | - | let P = ca[aa] | |
329 | - | let aM = fromBase58String(P) | |
330 | - | let an = parseIntValue(ca[ac]) | |
331 | - | let ao = parseIntValue(ca[ad]) | |
332 | - | let E = ca[ab] | |
333 | - | let ct = C(E) | |
334 | - | let cu = valueOrElse(getInteger(this, ct), 0) | |
335 | - | let cv = bV(E, aL, aM, ao) | |
336 | - | $Tuple12(IntegerEntry("price", cv._1), IntegerEntry("decimalsMultPrice", ao), IntegerEntry("baseAssetBalance", cv._2), IntegerEntry("-1", cv._3), IntegerEntry("baseAssetBalanceWCO", cv._4), IntegerEntry("shareEmission", cv._5), IntegerEntry("currIterTotalInBaseAmount", cv._6), IntegerEntry("currIterTotalInShareAmount", cv._7), IntegerEntry("totalLockedOutBaseAmount", cv._8), IntegerEntry("totalLockedOutShareAmount", cv._9), IntegerEntry("decimalsMultBothAssets", an), IntegerEntry("priceATH", cu)) | |
327 | + | func cu (h) = { | |
328 | + | let aN = fromBase58String(h) | |
329 | + | let cc = bE(h) | |
330 | + | let P = cc[aa] | |
331 | + | let aO = fromBase58String(P) | |
332 | + | let ao = parseIntValue(cc[ac]) | |
333 | + | let ap = parseIntValue(cc[ad]) | |
334 | + | let E = cc[ab] | |
335 | + | let cv = C(E) | |
336 | + | let cw = valueOrElse(getInteger(this, cv), 0) | |
337 | + | let cx = A(E) | |
338 | + | let cy = valueOrElse(getInteger(this, cx), 0) | |
339 | + | let cz = bX(E, aN, aO, ap) | |
340 | + | $Tuple13(IntegerEntry("price", cz._1), IntegerEntry("decimalsMultPrice", ap), IntegerEntry("baseAssetBalance", cz._2), IntegerEntry("-1", cz._3), IntegerEntry("baseAssetBalanceWCO", cz._4), IntegerEntry("shareEmission", cz._5), IntegerEntry("currIterTotalInBaseAmount", cz._6), IntegerEntry("currIterTotalInShareAmount", cz._7), IntegerEntry("totalLockedOutBaseAmount", cz._8), IntegerEntry("totalLockedOutShareAmount", cz._9), IntegerEntry("decimalsMultBothAssets", ao), IntegerEntry("priceATH", cw), IntegerEntry("priceLast", cy)) | |
337 | 341 | } | |
338 | 342 | ||
339 | 343 | ||
340 | - | @Callable( | |
341 | - | func adminRegisterAsset (h, | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | if (( | |
344 | + | @Callable(bZ) | |
345 | + | func adminRegisterAsset (h,cA,cB,cC,cD,cE,ar,as,r,at,au,av,aw,ax) = { | |
346 | + | let aN = fromBase58String(h) | |
347 | + | let cF = value(assetInfo(aN)).decimals | |
348 | + | let ao = pow(10, 0, cF, 0, 0, DOWN) | |
349 | + | let ap = ((100 * 1000) * 1000) | |
350 | + | let cG = fraction(as, 100, ao) | |
351 | + | let bR = assetBalance(this, aN) | |
352 | + | if ((bZ.caller != this)) | |
349 | 353 | then throw("permissions denied") | |
350 | - | else if (( | |
354 | + | else if ((bR == 0)) | |
351 | 355 | then throw(((toString(this) + " must have any initial balance of ") + h)) | |
352 | 356 | else if (isDefined(getString(this, y(h)))) | |
353 | 357 | then throw((h + " has been already registered")) | |
354 | - | else if ((toString(addressFromStringValue( | |
358 | + | else if ((toString(addressFromStringValue(cD)) != cD)) | |
355 | 359 | then throw("invalid shutdownManagerAddress") | |
356 | 360 | else if ((toString(addressFromStringValue(r)) != r)) | |
357 | 361 | then throw("invalid topupManagerAddress") | |
358 | - | else if ((0 > | |
359 | - | then throw(("invalid getDelayinBlocks=" + toString( | |
360 | - | else if (if ((0 >= | |
362 | + | else if ((0 > cC)) | |
363 | + | then throw(("invalid getDelayinBlocks=" + toString(cC))) | |
364 | + | else if (if ((0 >= cG)) | |
361 | 365 | then true | |
362 | - | else ( | |
366 | + | else (cG >= 99)) | |
363 | 367 | then throw("invalid topupMaxNegativePart parameter") | |
364 | 368 | else { | |
365 | - | let | |
366 | - | let | |
367 | - | let | |
368 | - | let P = toBase58String( | |
369 | - | let | |
370 | - | let E = toString( | |
371 | - | [StringEntry(y(h), | |
369 | + | let cH = w(bR, cE, ap) | |
370 | + | let cI = Issue(cA, cB, cH, cF, true) | |
371 | + | let aO = calculateAssetId(cI) | |
372 | + | let P = toBase58String(aO) | |
373 | + | let cJ = valueOrElse(getInteger(this, z()), 0) | |
374 | + | let E = toString(cJ) | |
375 | + | [StringEntry(y(h), an(P, E, ao, ap, cC, ar, as, r, at, au, av, aw, ax)), StringEntry(L(cJ), h), StringEntry(N(h), E), StringEntry(O(P), h), StringEntry(Q(h), P), BooleanEntry(R(E), false), StringEntry(S(E), cD), IntegerEntry(z(), (cJ + 1)), IntegerEntry(A(E), cE), IntegerEntry(G(E, height, lastBlock.timestamp), cE), IntegerEntry(T(E), 0), bH(Z(E), at, av), cI, ScriptTransfer(addressFromStringValue(r), cH, aO)] | |
372 | 376 | } | |
373 | 377 | } | |
374 | 378 | ||
375 | 379 | ||
376 | 380 | ||
377 | - | @Callable( | |
378 | - | func shutdownPut ( | |
379 | - | let | |
380 | - | let | |
381 | - | let | |
382 | - | if ((1 > size( | |
381 | + | @Callable(bZ) | |
382 | + | func shutdownPut (cJ) = { | |
383 | + | let cK = toString(cJ) | |
384 | + | let cL = b(L(cJ)) | |
385 | + | let cD = b(S(cK)) | |
386 | + | if ((1 > size(cL))) | |
383 | 387 | then throw("invalid internalBaseAssetId") | |
384 | - | else if ((toString( | |
388 | + | else if ((toString(bZ.caller) != cD)) | |
385 | 389 | then throw("access denied") | |
386 | - | else [BooleanEntry(R(toString( | |
390 | + | else [BooleanEntry(R(toString(cJ)), true)] | |
387 | 391 | } | |
388 | 392 | ||
389 | 393 | ||
390 | 394 | ||
391 | - | @Callable( | |
395 | + | @Callable(bZ) | |
392 | 396 | func submitPut () = { | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let h = toBase58String( | |
397 | - | | |
397 | + | let cM = value(bZ.payments[0]) | |
398 | + | let aM = cM.amount | |
399 | + | let ca = value(cM.assetId) | |
400 | + | let h = toBase58String(ca) | |
401 | + | bY("P", bZ, aM, ca, h) | |
398 | 402 | } | |
399 | 403 | ||
400 | 404 | ||
401 | 405 | ||
402 | - | @Callable( | |
406 | + | @Callable(bZ) | |
403 | 407 | func submitGet () = { | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | let P = toBase58String( | |
408 | + | let cM = value(bZ.payments[0]) | |
409 | + | let aM = cM.amount | |
410 | + | let ca = value(cM.assetId) | |
411 | + | let P = toBase58String(ca) | |
408 | 412 | let h = b(O(P)) | |
409 | - | | |
413 | + | bY("G", bZ, aM, ca, h) | |
410 | 414 | } | |
411 | 415 | ||
412 | 416 | ||
413 | 417 | ||
414 | - | @Callable( | |
415 | - | func executePut (h,i,j) = | |
418 | + | @Callable(bZ) | |
419 | + | func executePut (h,i,j) = cn("P", h, i, j) | |
416 | 420 | ||
417 | 421 | ||
418 | 422 | ||
419 | - | @Callable( | |
420 | - | func executeGet (h,i,j) = | |
423 | + | @Callable(bZ) | |
424 | + | func executeGet (h,i,j) = cn("G", h, i, j) | |
421 | 425 | ||
422 | 426 | ||
423 | 427 | ||
424 | - | @Callable( | |
428 | + | @Callable(bZ) | |
425 | 429 | func operationsMutex (h) = { | |
426 | - | let | |
427 | - | let | |
428 | - | let E = | |
429 | - | if ((toString( | |
430 | - | then q( | |
431 | - | else [ | |
430 | + | let co = bE(h) | |
431 | + | let cN = co[ah] | |
432 | + | let E = co[ab] | |
433 | + | if ((toString(bZ.caller) != cN)) | |
434 | + | then q(cN) | |
435 | + | else [bK(E, height)] | |
432 | 436 | } | |
433 | 437 | ||
434 | 438 | ||
435 | 439 | ||
436 | - | @Callable(bX) | |
437 | - | func topUpBalance (h,cK) = { | |
438 | - | let aL = fromBase58String(h) | |
439 | - | let cm = bC(h) | |
440 | - | let aM = fromBase58String(cm[aa]) | |
441 | - | let v = parseIntValue(cm[ad]) | |
442 | - | let cL = parseIntValue(cm[ac]) | |
443 | - | let aq = parseIntValue(cm[af]) | |
444 | - | let ar = parseIntValue(cm[ag]) | |
445 | - | let E = cm[ab] | |
446 | - | let cJ = cm[ah] | |
447 | - | let cM = T(E) | |
448 | - | let cN = e(cM) | |
449 | - | let cO = (cN + 1) | |
450 | - | let cP = if ((cK > 0)) | |
440 | + | @Callable(bZ) | |
441 | + | func topUpBalance (h,cO) = { | |
442 | + | let aN = fromBase58String(h) | |
443 | + | let co = bE(h) | |
444 | + | let aO = fromBase58String(co[aa]) | |
445 | + | let v = parseIntValue(co[ad]) | |
446 | + | let cP = parseIntValue(co[ac]) | |
447 | + | let ar = parseIntValue(co[af]) | |
448 | + | let as = parseIntValue(co[ag]) | |
449 | + | let E = co[ab] | |
450 | + | let cN = co[ah] | |
451 | + | let at = parseIntValue(co[ai]) | |
452 | + | let av = parseIntValue(co[ak]) | |
453 | + | let cQ = T(E) | |
454 | + | let cR = e(cQ) | |
455 | + | let cS = (cR + 1) | |
456 | + | let cT = if ((cO > 0)) | |
451 | 457 | then { | |
452 | - | let | |
453 | - | let | |
454 | - | if (( | |
458 | + | let cM = value(bZ.payments[0]) | |
459 | + | let cU = value(cM.assetId) | |
460 | + | if ((aN != cU)) | |
455 | 461 | then throw("attached payment's asset id is NOT matched passed baseAssetStr") | |
456 | - | else if ((size( | |
462 | + | else if ((size(bZ.payments) > 1)) | |
457 | 463 | then throw("only one payment can be attached") | |
458 | - | else if (( | |
464 | + | else if ((cM.amount != cO)) | |
459 | 465 | then throw("attached payment.amount is NOT matched passed amount argument") | |
460 | 466 | else true | |
461 | 467 | } | |
462 | - | else if ((0 > | |
468 | + | else if ((0 > cO)) | |
463 | 469 | then { | |
464 | - | let | |
465 | - | let | |
466 | - | if ((-( | |
467 | - | then throw(("topup negative amount couldn't be greater than " + toString( | |
470 | + | let cV = assetBalance(this, aN) | |
471 | + | let cW = fraction(as, cV, cP) | |
472 | + | if ((-(cO) > cW)) | |
473 | + | then throw(("topup negative amount couldn't be greater than " + toString(cW))) | |
468 | 474 | else true | |
469 | 475 | } | |
470 | 476 | else throw("zero amount is not allowed") | |
471 | - | let | |
472 | - | let | |
473 | - | if ((toString( | |
474 | - | then q( | |
475 | - | else if (!( | |
477 | + | let cX = U(E, toString(bZ.caller)) | |
478 | + | let cY = valueOrElse(getInteger(this, cX), 0) | |
479 | + | if ((toString(bZ.caller) != cN)) | |
480 | + | then q(cN) | |
481 | + | else if (!(cT)) | |
476 | 482 | then throw("validation failed") | |
477 | - | else if (( | |
478 | - | then throw((("1 topup per " + toString( | |
483 | + | else if ((ar > (height - cY))) | |
484 | + | then throw((("1 topup per " + toString(ar)) + " blocks from the same address is allowed")) | |
479 | 485 | else { | |
480 | - | let u = | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | ((((([IntegerEntry(A(E), u), IntegerEntry(G(E, height, lastBlock.timestamp), u), IntegerEntry(D(E, | |
486 | + | let u = bN(E, aN, cO, aO, v)._1 | |
487 | + | let cj = aK("topup", "", E, u, v, 0, aN, aO) | |
488 | + | let cZ = cj._1 | |
489 | + | let cv = C(E) | |
490 | + | let da = valueOrElse(getInteger(this, cv), 0) | |
491 | + | (((((([IntegerEntry(A(E), u), IntegerEntry(G(E, height, lastBlock.timestamp), u), IntegerEntry(D(E, cS), u), IntegerEntry(cQ, cS), IntegerEntry(cv, if ((u > da)) | |
486 | 492 | then u | |
487 | - | else | |
488 | - | then [ScriptTransfer( | |
493 | + | else da), IntegerEntry(cX, height)] :+ aV("DECREMENT", J(E), cZ)) :+ bK(E, 0)) :+ bH(Z(E), at, av)) :+ Burn(aO, cZ[ay])) :+ Reissue(aO, -(cZ[aB]), true)) ++ (if ((0 > cO)) | |
494 | + | then [ScriptTransfer(bZ.caller, -(cO), aN)] | |
489 | 495 | else nil)) | |
490 | 496 | } | |
491 | 497 | } | |
492 | 498 | ||
493 | 499 | ||
494 | 500 | ||
495 | - | @Callable( | |
501 | + | @Callable(bZ) | |
496 | 502 | func currentSysParamsREST (h) = { | |
497 | - | let cX = cs(h) | |
498 | - | let u = cX._1.value | |
499 | - | let ao = cX._2.value | |
500 | - | let bP = cX._3.value | |
501 | - | let cY = cX._4.value | |
502 | - | let bQ = cX._5.value | |
503 | - | let bT = cX._6.value | |
504 | - | let bO = cX._7.value | |
505 | - | let bS = cX._8.value | |
506 | - | let bN = cX._9.value | |
507 | - | let bR = cX._10.value | |
508 | - | let an = cX._11.value | |
509 | - | let cu = cX._12.value | |
510 | - | let cZ = makeString(["startCurrentSysParamsREST", toString(u), toString(ao), toString(bP), toString(cY), toString(bQ), toString(bT), toString(bO), toString(bS), toString(bN), toString(bR), toString(an), toString(cu), "endCurrentSysParamsREST"], a) | |
511 | - | throw(cZ) | |
503 | + | let db = cu(h) | |
504 | + | let u = db._1.value | |
505 | + | let ap = db._2.value | |
506 | + | let bR = db._3.value | |
507 | + | let dc = db._4.value | |
508 | + | let bS = db._5.value | |
509 | + | let bV = db._6.value | |
510 | + | let bQ = db._7.value | |
511 | + | let bU = db._8.value | |
512 | + | let bP = db._9.value | |
513 | + | let bT = db._10.value | |
514 | + | let ao = db._11.value | |
515 | + | let cw = db._12.value | |
516 | + | let cy = db._13.value | |
517 | + | let dd = makeString(["startCurrentSysParamsREST", toString(u), toString(ap), toString(bR), toString(dc), toString(bS), toString(bV), toString(bQ), toString(bU), toString(bP), toString(bT), toString(ao), toString(cw), toString(cy), "endCurrentSysParamsREST"], a) | |
518 | + | throw(dd) | |
512 | 519 | } | |
513 | 520 | ||
514 | 521 |
github/deemru/w8io/169f3d6 163.40 ms ◑