tx · 3gLzePKnKakjx6wEoChSkoRTwCsN88rXd372fZrkhZi2

3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk:  -0.04100000 Waves

2023.10.12 15:34 [3861264] smart account 3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk > SELF 0.00000000 Waves

{ "type": 13, "id": "3gLzePKnKakjx6wEoChSkoRTwCsN88rXd372fZrkhZi2", "fee": 4100000, "feeAssetId": null, "timestamp": 1697114052146, "version": 2, "chainId": 87, "sender": "3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk", "senderPublicKey": "46pxd1r6gmScNqdp82uEJMs2AZ1F9q2z1VtXZPFAtHYy", "proofs": [ "44kxdkmozmZuDBZt5nJeYYM3nMQzsvbZJVUWMBMWR8AdbBBCMduQcc7oRmvjyFc6u2o3vFwK4uTYfD47dc6tysrG" ], "script": "base64:BgICCAI0AAVXYXZlcwIFV0FWRVMABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAlTY2FsZThCaWcJALYCAQCAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2AICAhP6m3uERAApTY2FsZTE2QmlnCQC2AgEAgICE/qbe4REACWRheUJsb2NrcwCgCwAKeWVhckJsb2NrcwCgiiAADXllYXJCbG9ja3NCaWcJALYCAQCgiiAAC3Jlc2VydmVGdW5kABQABWFycjEyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwACXVzZHRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kACXVzZGNJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8AC2F4bHlBZGRyZXNzCQEHQWRkcmVzcwEBGgFXz8h13gt2/Imb93uvCUhEZwkqUEc/D0ItAAdheGx5TFBzCQDMCAICLDdLWmJKclZvcHdKaGtkd2JlMWVGREJiZXg0ZGtZNjNNeGpUTmpxWHRyemoxCQDMCAICLEJ0dzNHMWo0d1FnZHA0OVBUeGFGa052bjc1ZFF0cUdETTdlalFwcEhuV0MxCQDMCAICLEJpU3pGZThuU0w3OG9aYWViZm9pbjV2Qlo1UHplNmQ3a2FlaWpMcXI1eFplCQDMCAICLEYyQUtrQTUxM2s1eUhFSmtMc1U2dld4Q1lZazgxMUdwakxod0V2MldHd1o5CQDMCAICLDRDUTVDUEdMWExiV0JVczJKQmpLVWFScUY0OUNtS0hrd3p2UGdTdlFwQVFWCQDMCAICLDZpTUI2TEtTcmd2OXdhRXZFbk42WWR5eDdkZnhQbkdjVHc4MzE4V1ZtNWJSBQNuaWwBDGdldFJhdGVDdXJ2ZQIKYXNzZXRJZFN0cgltYXJrZXRTdHIEByRtYXRjaDAFCW1hcmtldFN0cgMJAAACAiMzUDR1QTVldG5aaTRBbUJhYktpbnEyYk1pV1U4S2NuSFpkSAUHJG1hdGNoMAQHJG1hdGNoMQUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCAlfUqAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMQkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDEJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gxCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgMJAAACAiMzUDRESzVWekR3TDN2ZmM1YWhVRWh0b2U1QnlaTnlhY0ozWAUHJG1hdGNoMAQHJG1hdGNoMQUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMQkAlgoEAAAAgOHrFwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMQkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDEJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gxCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgMJAAACAiMzUEhwdVFVUFZVb1IzQVl6RmVKemVXSmZZTHNMVG1Xc3NWSAUHJG1hdGNoMAkAlgoEAIDaxAkAgMLXLwCAjs4cAICI3r4BAwkAAAICIzNQOERmMmI3eXdIdExCSEJlOFBCVlFZZDNBNU1kRUVKQW91BQckbWF0Y2gwBAckbWF0Y2gxBQphc3NldElkU3RyAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEhHZ2FiVHFVUzhXdFZGVUp6Zm1yVERNZ0VjY0p1WkxCUGhGZ1FGeHZuc29XBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDZYdEhqcFhiczlSUkpQMlNyOUdVeVZxekFDY2J5OVRrVGhIWG5qVkM1Q0RKBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEFqc282blRUanB0dTJVSEx4NmhmU1hWdEhGdFJCSkNrS1lkNVNBeWo3emY1BQckbWF0Y2gxCQCWCgQAgIl6AIC0iRMAgOiSJgCAo8NHAwkAAAICLEhFQjhRYXc5eHJXcFdzOHRIc2lBVFlHQldEQnRQMlM3a2NQQUxyTXU0M0FTBQckbWF0Y2gxCQCWCgQAAACAwtcvAIDokiYAgIjevgEDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDEJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMQkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDEJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gxCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDEJAJYKBACAiXoAgIenDgCA6JImAIDokiYDCQAAAgIFV0FWRVMFByRtYXRjaDEJAJYKBACAiXoAgOHrFwCA6JImAIDC1y8JAJYKBACA2sQJAIDC1y8AgI7OHACAiN6+AQMJAAACAiMzUEFkOUFxZzNjUVN6dTI2TUZZV1FZY2pTWFBWQ0p0dWY1VgUHJG1hdGNoMAQHJG1hdGNoMQUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMQkAlgoEAAAAgNrECQCA6JImAIC0iRMDCQAAAgIFV0FWRVMFByRtYXRjaDEJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDEJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMQkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDEJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gxCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDEJAJYKBACAiXoAgIenDgCA6JImAIDokiYJAJYKBAAAAIDaxAkAgOiSJgCA6JImCQACAQIOVW5rbm93biBtYXJrZXQBA3N1bQIEc2l6ZQRkYXRhCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQRzaXplBQVhY2N1bQkAZAIFBWFjY3VtCQCRAwIFBGRhdGEFBG5leHQKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQ5nZXRTZXR1cFRva2VucwENbWFya2V0QWRkcmVzcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgxzZXR1cF90b2tlbnMCASwBDWdldFRva2VuUHJpY2UBCmFzc2V0SWRTdHIDAwkAAAIFCmFzc2V0SWRTdHIFCXVzZHRJZFN0cgYJAAACBQphc3NldElkU3RyBQl1c2RjSWRTdHIAwIQ9AwkBD2NvbnRhaW5zRWxlbWVudAIFB2F4bHlMUHMFCmFzc2V0SWRTdHIKAAFACQD8BwQFC2F4bHlBZGRyZXNzAhpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQkAzAgCBQphc3NldElkU3RyBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1vcmFjbGVBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB190d2FwNUIFBXByaWNlAQ1nZXRBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOARFnZXRMYXN0UmF0ZUhlaWdodAENbWFya2V0QWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzAg5sYXN0UmF0ZUhlaWdodAAAARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwINbWFya2V0QWRkcmVzcwphc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyAAABEGdldE91dGRhdGVkU1JhdGUCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQAAARBnZXRPdXRkYXRlZEJSYXRlAg1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICBQphc3NldElkU3RyAgZfYlJhdGUAAAENZ2V0T3V0ZGF0ZWRVcgQTb3V0ZGF0ZWRUb3RhbFN1cHBseRNvdXRkYXRlZFRvdGFsQm9ycm93DW91dGRhdGVkU1JhdGUNb3V0ZGF0ZWRCUmF0ZQQEZG93bgkAawMFE291dGRhdGVkVG90YWxTdXBwbHkFDW91dGRhdGVkU1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDBRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZEJSYXRlBQdTY2FsZTE2BQRkb3duAQdnZXRSYXRlAwpvdXRkYXRlZFVyCmFzc2V0SWRTdHIJbWFya2V0U3RyBAVjdXJ2ZQkBDGdldFJhdGVDdXJ2ZQIFCmFzc2V0SWRTdHIFCW1hcmtldFN0cgkAZAIIBQVjdXJ2ZQJfMQMJAGcCCAUFY3VydmUCXzMFCm91dGRhdGVkVXIJAGsDBQpvdXRkYXRlZFVyCAUFY3VydmUCXzIIBQVjdXJ2ZQJfMwkAZAIIBQVjdXJ2ZQJfMgkAawMJAGUCBQpvdXRkYXRlZFVyCAUFY3VydmUCXzMIBQVjdXJ2ZQJfNAkAZQIAgMLXLwgFBWN1cnZlAl8zAQtnZXRJbnRlcmVzdAEEcmF0ZQkAlgMBCQDMCAIJAGsDBQRyYXRlBQZTY2FsZTgFCnllYXJCbG9ja3MJAMwIAgABBQNuaWwBDWdldEFzc2V0SW5kZXgCC3NldHVwVG9rZW5zCmFzc2V0SWRTdHIJAQV2YWx1ZQEJAM8IAgULc2V0dXBUb2tlbnMFCmFzc2V0SWRTdHIBEWdldEFzc2V0UGFyYW10ZXJzAhBtYXJrZXRQYXJhbWV0ZXJzCmFzc2V0SW5kZXgJAJUKAwkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMQUKYXNzZXRJbmRleAkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMgUKYXNzZXRJbmRleAkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMwUKYXNzZXRJbmRleAETZ2V0TWFya2V0UGFyYW1ldGVycwINbWFya2V0QWRkcmVzcwtzZXR1cFRva2VucwQHc2V0dXBDZgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgpzZXR1cF9sdHZzAgEsBAdzZXR1cEx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCXNldHVwX2x0cwIBLAQMc2V0dXBQZW5hbHR5CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCD3NldHVwX3BlbmFsdGllcwIBLAQKdG9rZW5zU2l6ZQkAkAMBBQtzZXR1cFRva2VucwoBBGZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUKdG9rZW5zU2l6ZQUFYWNjdW0JAJUKAwkAzQgCCAUFYWNjdW0CXzEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cENmBQRuZXh0CQDNCAIIBQVhY2N1bQJfMgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFBG5leHQJAM0IAggFBWFjY3VtAl8zCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMc2V0dXBQZW5hbHR5BQRuZXh0CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAEMZ2V0TWF4U3VwcGx5Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQ1wYXJzZUludFZhbHVlAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1tYXJrZXRBZGRyZXNzCQCsAgICEHNldHVwX21heFN1cHBseV8FCmFzc2V0SWRTdHICATABDmdldEFjdHVhbFNSYXRlBA5sYXN0UmF0ZUhlaWdodAhpbnRlcmVzdApvdXRkYXRlZFVyDW91dGRhdGVkU1JhdGUECWxhc3RTUmF0ZQkAlgMBCQDMCAIFDW91dGRhdGVkU1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUObGFzdFJhdGVIZWlnaHQJAGsDBQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkBQhuZXdTUmF0ZQEOZ2V0QWN0dWFsQlJhdGUDDmxhc3RSYXRlSGVpZ2h0CGludGVyZXN0DW91dGRhdGVkQlJhdGUECWxhc3RCUmF0ZQkAlgMBCQDMCAIFDW91dGRhdGVkQlJhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdCUmF0ZQkAZAIFCWxhc3RCUmF0ZQkAaAIJAGUCBQZoZWlnaHQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUIbmV3QlJhdGUBC2dldEFjdHVhbFVyAgxhY3R1YWxTdXBwbHkMYWN0dWFsQm9ycm93CQBrAwUMYWN0dWFsQm9ycm93BQZTY2FsZTgFDGFjdHVhbFN1cHBseQEPZ2V0QWN0dWFsQW1vdW50Ag5vdXRkYXRlZEFtb3VudAphY3R1YWxSYXRlCQBrAwUOb3V0ZGF0ZWRBbW91bnQFCmFjdHVhbFJhdGUFB1NjYWxlMTYBCGdldEluVXNkAwxhY3R1YWxBbW91bnQKYXNzZXRTY2FsZQVwcmljZQkAawMFDGFjdHVhbEFtb3VudAUFcHJpY2UFCmFzc2V0U2NhbGUBDGdldFN1cHBseUFweQIEcmF0ZQhhY3R1YWxVcgQKc3VwcGx5UmF0ZQkAawMJAGsDBQRyYXRlAFAAZAUIYWN0dWFsVXIFBlNjYWxlOAkAZQIJAKADAQkAdgYJALcCAgUKU2NhbGUxNkJpZwkAvAIDCQC2AgEFCnN1cHBseVJhdGUFCVNjYWxlOEJpZwUNeWVhckJsb2Nrc0JpZwAQBQ15ZWFyQmxvY2tzQmlnAAAACAUERE9XTgUGU2NhbGU4AQxnZXRCb3Jyb3dBcHkBBHJhdGUJAGUCCQCgAwEJAHYGCQC3AgIFClNjYWxlMTZCaWcJALwCAwkAtgIBBQRyYXRlBQlTY2FsZThCaWcFDXllYXJCbG9ja3NCaWcAEAUNeWVhckJsb2Nrc0JpZwAAAAgFBERPV04FBlNjYWxlOAEPZ2V0V2FsbGV0U3VwcGx5BA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0C2FjdHVhbFNSYXRlBBRvdXRkYXRlZFdhbGxldFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgUGd2FsbGV0Agpfc3VwcGxpZWRfBQphc3NldElkU3RyAAAJAQ9nZXRBY3R1YWxBbW91bnQCBRRvdXRkYXRlZFdhbGxldFN1cHBseQULYWN0dWFsU1JhdGUBD2dldFdhbGxldEJvcnJvdwQNbWFya2V0QWRkcmVzcwphc3NldElkU3RyBndhbGxldAthY3R1YWxCUmF0ZQQUb3V0ZGF0ZWRXYWxsZXRCb3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICCQCsAgIFBndhbGxldAIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgAACQEPZ2V0QWN0dWFsQW1vdW50AgUUb3V0ZGF0ZWRXYWxsZXRCb3Jyb3cFC2FjdHVhbEJSYXRlARBnZXREYWlseVBlcmNlbnRzAgNhcHkIcXVhbnRpdHkJAGsDCQBrAwkAZQIJAKADAQkAdgYJALcCAgUJU2NhbGU4QmlnCQC2AgEFA2FweQAICQC6AgIFClNjYWxlMTZCaWcFDXllYXJCbG9ja3NCaWcAEAAQBQRET1dOBQdTY2FsZTE2BQlkYXlCbG9ja3MFBlNjYWxlOAUIcXVhbnRpdHkFBlNjYWxlOAEQZ2V0QWNjb3VudEhlYWx0aAIbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAMJAAACBRt0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QAAAUGU2NhbGU4CQBlAgUGU2NhbGU4CQBrAwUbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkBQZTY2FsZTgFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAEJZ2V0TmV0QXB5AxZ0b3RhbFdhbGxldFN1cHBseUluVXNkFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QWdG90YWxXYWxsZXRNYXJnaW5JblVzZAMJAAACBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkAAAAAAMJAGYCBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkAAAJAGsDBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkBQZTY2FsZTgFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QJAGsDBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkBQZTY2FsZTgFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QBC2Fzc2V0VG9Kc29uAgphc3NldElkU3RyCHF1YW50aXR5BA0kdDAxNjIyMzE2NDM4AwkAAAIFCmFzc2V0SWRTdHIFBVdhdmVzCQCUCgIACAIFV0FWRVMEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cgkAlAoCCAUFYXNzZXQIZGVjaW1hbHMIBQVhc3NldARuYW1lBAhkZWNpbWFscwgFDSR0MDE2MjIzMTY0MzgCXzEEBG5hbWUIBQ0kdDAxNjIyMzE2NDM4Al8yCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMeyJxdWFudGl0eSI6CQCkAwEFCHF1YW50aXR5AgwsImRlY2ltYWxzIjoJAKQDAQUIZGVjaW1hbHMCCSwibmFtZSI6IgUEbmFtZQIIIiwiaWQiOiIFCmFzc2V0SWRTdHICAiJ9AQ9hbW91bnRUb0RlY2ltYWwCBmFtb3VudAhkZWNpbWFscwkArAICCQCsAgIJAKwCAgkArAICAgx7InF1YW50aXR5IjoJAKQDAQUGYW1vdW50AgwsImRlY2ltYWxzIjoJAKQDAQUIZGVjaW1hbHMCEywibmFtZSI6IiIsImlkIjoiIn0BDWdldE1hcmtldEpzb24DCW1hcmtldFN0cgZ3YWxsZXQFZGVidWcEDW1hcmtldEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW1hcmtldFN0cgQLbWFya2V0SW5kZXgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAKwCAgIHbWFya2V0XwUJbWFya2V0U3RyBAptYXJrZXROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICDG1hcmtldF9uYW1lXwUJbWFya2V0U3RyBAZhY3RpdmUJAQt2YWx1ZU9yRWxzZQIJAJsIAgUNbWFya2V0QWRkcmVzcwIMc2V0dXBfYWN0aXZlBgQLc2V0dXBUb2tlbnMJAQ5nZXRTZXR1cFRva2VucwEFDW1hcmtldEFkZHJlc3MEC2Fzc2V0c0NvdW50CQCQAwEFC3NldHVwVG9rZW5zBA5sYXN0UmF0ZUhlaWdodAkBEWdldExhc3RSYXRlSGVpZ2h0AQUNbWFya2V0QWRkcmVzcwoBCmFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAULYXNzZXRzQ291bnQFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFC3NldHVwVG9rZW5zBQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQMFCm91dGRhdGVkVXIFCmFzc2V0SWRTdHIFCW1hcmtldFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFBHJhdGUEBXNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFCm91dGRhdGVkVXIFDW91dGRhdGVkU1JhdGUEBWJSYXRlCQEOZ2V0QWN0dWFsQlJhdGUDBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFDW91dGRhdGVkQlJhdGUEBnN1cHBseQkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxTdXBwbHkFBXNSYXRlBAZib3Jyb3cJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsQm9ycm93BQViUmF0ZQQLc3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFBnN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEC2JvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQZib3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBAhyZXNlcnZlcwkAZQIFBnN1cHBseQUGYm9ycm93BA1yZXNlcnZlc0luVXNkCQEIZ2V0SW5Vc2QDBQhyZXNlcnZlcwUKYXNzZXRTY2FsZQUFcHJpY2UEAnVyCQELZ2V0QWN0dWFsVXICBQZzdXBwbHkFBmJvcnJvdwQJc3VwcGx5QXB5CQEMZ2V0U3VwcGx5QXB5AgUEcmF0ZQUCdXIECWJvcnJvd0FweQkBDGdldEJvcnJvd0FweQEFBHJhdGUED21hcmtldEFzc2V0SnNvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7Agkic3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFBnN1cHBseQIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFC3N1cHBseUluVXNkAgosImJvcnJvdyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQZib3Jyb3cCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQtib3Jyb3dJblVzZAIMLCJyZXNlcnZlcyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQhyZXNlcnZlcwIRLCJyZXNlcnZlc0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUNcmVzZXJ2ZXNJblVzZAIJLCJwcmljZSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFBXByaWNlAg0sInN1cHBseUFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUJc3VwcGx5QXB5AAgCDSwiYm9ycm93QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQlib3Jyb3dBcHkACAIULCJ1dGlsaXphdGlvblJhdGlvIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQJ1cgAIAgksInNSYXRlIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQVzUmF0ZQAQAgksImJSYXRlIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQViUmF0ZQAQAgF9CQCWCgQJAGQCCAUFYWNjdW0CXzEFC3N1cHBseUluVXNkCQBkAggFBWFjY3VtAl8yBQtib3Jyb3dJblVzZAkAZAIIBQVhY2N1bQJfMwUNcmVzZXJ2ZXNJblVzZAkAzQgCCAUFYWNjdW0CXzQFD21hcmtldEFzc2V0SnNvbgQNJHQwMTk2NjQxOTc3MgoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQphc3NldHNGb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAQLc3VwcGx5SW5Vc2QIBQ0kdDAxOTY2NDE5NzcyAl8xBAtib3Jyb3dJblVzZAgFDSR0MDE5NjY0MTk3NzICXzIEDXJlc2VydmVzSW5Vc2QIBQ0kdDAxOTY2NDE5NzcyAl8zBBBtYXJrZXRBc3NldHNKc29uCAUNJHQwMTk2NjQxOTc3MgJfNAQMbWFya2V0c0NvdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBAgdtYXJrZXRzCgELbWFya2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUMbWFya2V0c0NvdW50BQVhY2N1bQQXY3VycmVudE1hcmtldEFkZHJlc3NTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIHbWFya2V0XwkApAMBBQRuZXh0BBFjdXJyZW50TWFya2V0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgxtYXJrZXRfbmFtZV8FF2N1cnJlbnRNYXJrZXRBZGRyZXNzU3RyBApzaW1wbGVKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIIIm5hbWUiOiIFEWN1cnJlbnRNYXJrZXROYW1lAgEiAg8sInN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgAAAhEsImFjY291bnRIZWFsdGgiOgkBD2Ftb3VudFRvRGVjaW1hbAIAAAAIAgF9AwkAAAIFBndhbGxldAIACQDNCAIFBWFjY3VtBQpzaW1wbGVKc29uBBRjdXJyZW50TWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUXY3VycmVudE1hcmtldEFkZHJlc3NTdHIEEmN1cnJlbnRTZXR1cFRva2VucwkBDmdldFNldHVwVG9rZW5zAQUUY3VycmVudE1hcmtldEFkZHJlc3MEEmN1cnJlbnRBc3NldHNDb3VudAkAkAMBBRJjdXJyZW50U2V0dXBUb2tlbnMEFmN1cnJlbnRNYXJrZXRTaG9ydE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIRbWFya2V0X3Nob3J0bmFtZV8FF2N1cnJlbnRNYXJrZXRBZGRyZXNzU3RyBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzAgpzZXR1cF9sdHZzAgEsBAdzZXR1cEx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzAglzZXR1cF9sdHMCASwEFWN1cnJlbnRMYXN0UmF0ZUhlaWdodAkBEWdldExhc3RSYXRlSGVpZ2h0AQUUY3VycmVudE1hcmtldEFkZHJlc3MKARBtYXJrZXRBc3NldHNGb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFEmN1cnJlbnRBc3NldHNDb3VudAUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgUSY3VycmVudFNldHVwVG9rZW5zBQRuZXh0BAJjZgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFBG5leHQEAmx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUEbmV4dAQFcHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQKYXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsU3VwcGx5CQEWZ2V0T3V0ZGF0ZWRUb3RhbFN1cHBseQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsQm9ycm93CQEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZEJSYXRlCQEQZ2V0T3V0ZGF0ZWRCUmF0ZQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAwUKb3V0ZGF0ZWRVcgUKYXNzZXRJZFN0cgUJbWFya2V0U3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQFc1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFFWN1cnJlbnRMYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFCm91dGRhdGVkVXIFDW91dGRhdGVkU1JhdGUEBWJSYXRlCQEOZ2V0QWN0dWFsQlJhdGUDBRVjdXJyZW50TGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQ1vdXRkYXRlZEJSYXRlBAx3YWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQVzUmF0ZQQRd2FsbGV0U3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldFN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEDHdhbGxldEJvcnJvdwkBD2dldFdhbGxldEJvcnJvdwQFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBWJSYXRlBBF3YWxsZXRCb3Jyb3dJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0Qm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQWd2FsbGV0Qm9ycm93TGltaXRJblVzZAkAawMFEXdhbGxldFN1cHBseUluVXNkBQJjZgUGU2NhbGU4BBZ3YWxsZXRCb3Jyb3dVc2FnZUluVXNkCQBrAwURd2FsbGV0Qm9ycm93SW5Vc2QFBlNjYWxlOAUCbHQJAJYKBAkAZAIIBQVhY2N1bQJfMQURd2FsbGV0U3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFEXdhbGxldEJvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBRZ3YWxsZXRCb3Jyb3dMaW1pdEluVXNkCQBkAggFBWFjY3VtAl80BRZ3YWxsZXRCb3Jyb3dVc2FnZUluVXNkBA0kdDAyMjg2NDIzMDI0CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAAAAAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEG1hcmtldEFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBZ0b3RhbFdhbGxldFN1cHBseUluVXNkCAUNJHQwMjI4NjQyMzAyNAJfMQQWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAgFDSR0MDIyODY0MjMwMjQCXzIEG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAgFDSR0MDIyODY0MjMwMjQCXzMEG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAgFDSR0MDIyODY0MjMwMjQCXzQEDWFjY291bnRIZWFsdGgJARBnZXRBY2NvdW50SGVhbHRoAgUbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkBRt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QECGZ1bGxKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AggiaW5kZXgiOgkApAMBBQRuZXh0AgksIm5hbWUiOiIFFmN1cnJlbnRNYXJrZXRTaG9ydE5hbWUCASICDywic3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkAg8sImJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAIRLCJhY2NvdW50SGVhbHRoIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQ1hY2NvdW50SGVhbHRoAAgCAX0JAM0IAgUFYWNjdW0FCGZ1bGxKc29uBAttYXJrZXRzSnNvbgoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELbWFya2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIIImluZGV4IjoJAKQDAQULbWFya2V0SW5kZXgCCSwibmFtZSI6IgUKbWFya2V0TmFtZQIBIgIKLCJhY3RpdmUiOgkApQMBBQZhY3RpdmUCDywic3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQtzdXBwbHlJblVzZAIPLCJib3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFC2JvcnJvd0luVXNkAhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQ1yZXNlcnZlc0luVXNkAgssImFzc2V0cyI6WwkAuwkCBRBtYXJrZXRBc3NldHNKc29uAgEsAgFdAgwsIm1hcmtldHMiOlsJALsJAgULbWFya2V0c0pzb24CASwCAV0CAX0DBQVkZWJ1ZwkAAgEFBGpzb24FBGpzb24BC2dldE1lbnVKc29uAQVkZWJ1ZwQMbWFya2V0c0NvdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBAgdtYXJrZXRzCgELbWFya2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUMbWFya2V0c0NvdW50BQVhY2N1bQQJbWFya2V0U3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICB21hcmtldF8JAKQDAQUEbmV4dAQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAtzZXR1cFRva2VucwkBDmdldFNldHVwVG9rZW5zAQUNbWFya2V0QWRkcmVzcwQLYXNzZXRzQ291bnQJAJADAQULc2V0dXBUb2tlbnMEDmxhc3RSYXRlSGVpZ2h0CQERZ2V0TGFzdFJhdGVIZWlnaHQBBQ1tYXJrZXRBZGRyZXNzCgEKYXNzZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQthc3NldHNDb3VudAUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgULc2V0dXBUb2tlbnMFBG5leHQEBXByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ1nZXRBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbFN1cHBseQkBFmdldE91dGRhdGVkVG90YWxTdXBwbHkCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsQm9ycm93CQEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkU1JhdGUJARBnZXRPdXRkYXRlZFNSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRCUmF0ZQkBEGdldE91dGRhdGVkQlJhdGUCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAwUKb3V0ZGF0ZWRVcgUKYXNzZXRJZFN0cgUJbWFya2V0U3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQFc1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQFYlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQGc3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEBmJvcnJvdwkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAtzdXBwbHlJblVzZAkBCGdldEluVXNkAwUGc3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQLYm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFBmJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UECHJlc2VydmVzCQBlAgUGc3VwcGx5BQZib3Jyb3cEDXJlc2VydmVzSW5Vc2QJAQhnZXRJblVzZAMFCHJlc2VydmVzBQphc3NldFNjYWxlBQVwcmljZQQPbWFya2V0QXNzZXRKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AggiYXNzZXQiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgAAAgksInByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUFcHJpY2UCCSwic1JhdGUiOgkBD2Ftb3VudFRvRGVjaW1hbAIFBXNSYXRlABACCSwiYlJhdGUiOgkBD2Ftb3VudFRvRGVjaW1hbAIFBWJSYXRlABACAX0JAJYKBAkAZAIIBQVhY2N1bQJfMQULc3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFC2JvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBQ1yZXNlcnZlc0luVXNkCQDNCAIIBQVhY2N1bQJfNAUPbWFya2V0QXNzZXRKc29uBA0kdDAyNjU1NTI2NjYzCgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBAtzdXBwbHlJblVzZAgFDSR0MDI2NTU1MjY2NjMCXzEEC2JvcnJvd0luVXNkCAUNJHQwMjY1NTUyNjY2MwJfMgQNcmVzZXJ2ZXNJblVzZAgFDSR0MDI2NTU1MjY2NjMCXzMEEG1hcmtldEFzc2V0c0pzb24IBQ0kdDAyNjU1NTI2NjYzAl80BAptYXJrZXRKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCyJhZGRyZXNzIjoiBQltYXJrZXRTdHICASICCywiYXNzZXRzIjpbCQC7CQIFEG1hcmtldEFzc2V0c0pzb24CASwCAV0CAX0JAJYKBAkAZAIIBQVhY2N1bQJfMQULc3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFC2JvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBQ1yZXNlcnZlc0luVXNkCQDNCAIIBQVhY2N1bQJfNAUKbWFya2V0SnNvbgQNJHQwMjcwMTEyNzEzMAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQttYXJrZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEEHRvdGFsU3VwcGx5SW5Vc2QIBQ0kdDAyNzAxMTI3MTMwAl8xBBB0b3RhbEJvcnJvd0luVXNkCAUNJHQwMjcwMTEyNzEzMAJfMgQSdG90YWxSZXNlcnZlc0luVXNkCAUNJHQwMjcwMTEyNzEzMAJfMwQLbWFya2V0c0pzb24IBQ0kdDAyNzAxMTI3MTMwAl80BARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCDiJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEHRvdGFsU3VwcGx5SW5Vc2QCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRB0b3RhbEJvcnJvd0luVXNkAhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRJ0b3RhbFJlc2VydmVzSW5Vc2QCDCwibWFya2V0cyI6WwkAuwkCBQttYXJrZXRzSnNvbgIBLAIBXQIBfQMFBWRlYnVnCQACAQUEanNvbgUEanNvbgENZ2V0V2FsbGV0SnNvbgMJbWFya2V0U3RyBndhbGxldAVkZWJ1ZwQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAttYXJrZXRJbmRleAkBEUBleHRyTmF0aXZlKDEwNTUpAQkArAICAgdtYXJrZXRfBQltYXJrZXRTdHIECm1hcmtldE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIMbWFya2V0X25hbWVfBQltYXJrZXRTdHIEDG1hcmtldHNDb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQIHbWFya2V0cwoBC21hcmtldHNGb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFDG1hcmtldHNDb3VudAUFYWNjdW0EF2N1cnJlbnRNYXJrZXRBZGRyZXNzU3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICB21hcmtldF8JAKQDAQUEbmV4dAQRY3VycmVudE1hcmtldE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIMbWFya2V0X25hbWVfBRdjdXJyZW50TWFya2V0QWRkcmVzc1N0cgQUY3VycmVudE1hcmtldEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFF2N1cnJlbnRNYXJrZXRBZGRyZXNzU3RyBBJjdXJyZW50U2V0dXBUb2tlbnMJAQ5nZXRTZXR1cFRva2VucwEFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBBJjdXJyZW50QXNzZXRzQ291bnQJAJADAQUSY3VycmVudFNldHVwVG9rZW5zBBZjdXJyZW50TWFya2V0U2hvcnROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICEW1hcmtldF9zaG9ydG5hbWVfBRdjdXJyZW50TWFya2V0QWRkcmVzc1N0cgQHc2V0dXBDZgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBRRjdXJyZW50TWFya2V0QWRkcmVzcwIKc2V0dXBfbHR2cwIBLAQHc2V0dXBMdAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBRRjdXJyZW50TWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBBVjdXJyZW50TGFzdFJhdGVIZWlnaHQJARFnZXRMYXN0UmF0ZUhlaWdodAEFFGN1cnJlbnRNYXJrZXRBZGRyZXNzCgEQbWFya2V0QXNzZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BRJjdXJyZW50QXNzZXRzQ291bnQFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFEmN1cnJlbnRTZXR1cFRva2VucwUEbmV4dAQCY2YJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cENmBQRuZXh0BAJsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFBG5leHQEBXByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ1nZXRBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbFN1cHBseQkBFmdldE91dGRhdGVkVG90YWxTdXBwbHkCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRTUmF0ZQkBEGdldE91dGRhdGVkU1JhdGUCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRCUmF0ZQkBEGdldE91dGRhdGVkQlJhdGUCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQMFCm91dGRhdGVkVXIFCmFzc2V0SWRTdHIFCW1hcmtldFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFBHJhdGUEBXNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBRVjdXJyZW50TGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQpvdXRkYXRlZFVyBQ1vdXRkYXRlZFNSYXRlBAViUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUVY3VycmVudExhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQGc3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEBmJvcnJvdwkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAJ1cgkBC2dldEFjdHVhbFVyAgUGc3VwcGx5BQZib3Jyb3cECXN1cHBseUFweQkBDGdldFN1cHBseUFweQIFBHJhdGUFAnVyBAlib3Jyb3dBcHkJAQxnZXRCb3Jyb3dBcHkBBQRyYXRlBAx3YWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQVzUmF0ZQQRd2FsbGV0U3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldFN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEDHdhbGxldEJvcnJvdwkBD2dldFdhbGxldEJvcnJvdwQFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBWJSYXRlBBF3YWxsZXRCb3Jyb3dJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0Qm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQWd2FsbGV0Qm9ycm93TGltaXRJblVzZAkAawMFEXdhbGxldFN1cHBseUluVXNkBQJjZgUGU2NhbGU4BBZ3YWxsZXRCb3Jyb3dVc2FnZUluVXNkCQBrAwURd2FsbGV0Qm9ycm93SW5Vc2QFBlNjYWxlOAUCbHQEEXdhbGxldERhaWx5SW5jb21lCQEQZ2V0RGFpbHlQZXJjZW50cwIFCXN1cHBseUFweQUMd2FsbGV0U3VwcGx5BBZ3YWxsZXREYWlseUluY29tZUluVXNkCQEIZ2V0SW5Vc2QDBRF3YWxsZXREYWlseUluY29tZQUKYXNzZXRTY2FsZQUFcHJpY2UEF3dhbGxldERhaWx5TG9hbkludGVyZXN0CQEQZ2V0RGFpbHlQZXJjZW50cwIFCWJvcnJvd0FweQUMd2FsbGV0Qm9ycm93BBx3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkCQEIZ2V0SW5Vc2QDBRd3YWxsZXREYWlseUxvYW5JbnRlcmVzdAUKYXNzZXRTY2FsZQUFcHJpY2UEEXdhbGxldE1hcmdpbkluVXNkCQBlAgkAawMFEXdhbGxldFN1cHBseUluVXNkBQlzdXBwbHlBcHkFBlNjYWxlOAkAawMFEXdhbGxldEJvcnJvd0luVXNkBQlib3Jyb3dBcHkFBlNjYWxlOAkAmQoHCQBkAggFBWFjY3VtAl8xBRF3YWxsZXRTdXBwbHlJblVzZAkAZAIIBQVhY2N1bQJfMgURd2FsbGV0Qm9ycm93SW5Vc2QJAGQCCAUFYWNjdW0CXzMFFndhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAGQCCAUFYWNjdW0CXzQFFndhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAGQCCAUFYWNjdW0CXzUFFndhbGxldERhaWx5SW5jb21lSW5Vc2QJAGQCCAUFYWNjdW0CXzYFHHdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QJAGQCCAUFYWNjdW0CXzcFEXdhbGxldE1hcmdpbkluVXNkBA0kdDAzMTU4MzMxOTM3CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmQoHAAAAAAAAAAAAAAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEG1hcmtldEFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBZ0b3RhbFdhbGxldFN1cHBseUluVXNkCAUNJHQwMzE1ODMzMTkzNwJfMQQWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAgFDSR0MDMxNTgzMzE5MzcCXzIEG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAgFDSR0MDMxNTgzMzE5MzcCXzMEG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAgFDSR0MDMxNTgzMzE5MzcCXzQEG3RvdGFsV2FsbGV0RGFpbHlJbmNvbWVJblVzZAgFDSR0MDMxNTgzMzE5MzcCXzUEIXRvdGFsV2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZAgFDSR0MDMxNTgzMzE5MzcCXzYEFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QIBQ0kdDAzMTU4MzMxOTM3Al83BBd0b3RhbFdhbGxldEJhZERlYnRJblVzZAMJAGYCBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkCQBlAgUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAAABA1hY2NvdW50SGVhbHRoCQEQZ2V0QWNjb3VudEhlYWx0aAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAUbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkBAZuZXRBcHkJAQlnZXROZXRBcHkDBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkBAttYXJrZXRzSnNvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIIImluZGV4IjoJAKQDAQUEbmV4dAIJLCJuYW1lIjoiBRZjdXJyZW50TWFya2V0U2hvcnROYW1lAgEiAg8sInN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAIPLCJib3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QCESwiYWNjb3VudEhlYWx0aCI6CQEPYW1vdW50VG9EZWNpbWFsAgUNYWNjb3VudEhlYWx0aAAIAgF9CgEQd2FsbGV0QXNzZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BRJjdXJyZW50QXNzZXRzQ291bnQFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFEmN1cnJlbnRTZXR1cFRva2VucwUEbmV4dAQFcHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQKYXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsU3VwcGx5CQEWZ2V0T3V0ZGF0ZWRUb3RhbFN1cHBseQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsQm9ycm93CQEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZEJSYXRlCQEQZ2V0T3V0ZGF0ZWRCUmF0ZQIFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAwUKb3V0ZGF0ZWRVcgUKYXNzZXRJZFN0cgUJbWFya2V0U3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQFc1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFFWN1cnJlbnRMYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFCm91dGRhdGVkVXIFDW91dGRhdGVkU1JhdGUEBWJSYXRlCQEOZ2V0QWN0dWFsQlJhdGUDBRVjdXJyZW50TGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQ1vdXRkYXRlZEJSYXRlBAZzdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsU3VwcGx5BQVzUmF0ZQQGYm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUFYlJhdGUEAnVyCQELZ2V0QWN0dWFsVXICBQZzdXBwbHkFBmJvcnJvdwQJc3VwcGx5QXB5CQEMZ2V0U3VwcGx5QXB5AgUEcmF0ZQUCdXIECWJvcnJvd0FweQkBDGdldEJvcnJvd0FweQEFBHJhdGUEDHdhbGxldFN1cHBseQkBD2dldFdhbGxldFN1cHBseQQFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBXNSYXRlBBF3YWxsZXRTdXBwbHlJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0U3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQMd2FsbGV0Qm9ycm93CQEPZ2V0V2FsbGV0Qm9ycm93BAUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIFBndhbGxldAUFYlJhdGUEEXdhbGxldEJvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQx3YWxsZXRCb3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBBF3YWxsZXREYWlseUluY29tZQkBEGdldERhaWx5UGVyY2VudHMCBQlzdXBwbHlBcHkFDHdhbGxldFN1cHBseQQWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAkBCGdldEluVXNkAwURd2FsbGV0RGFpbHlJbmNvbWUFCmFzc2V0U2NhbGUFBXByaWNlBBd3YWxsZXREYWlseUxvYW5JbnRlcmVzdAkBEGdldERhaWx5UGVyY2VudHMCBQlib3Jyb3dBcHkFDHdhbGxldEJvcnJvdwQcd2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZAkBCGdldEluVXNkAwUXd2FsbGV0RGFpbHlMb2FuSW50ZXJlc3QFCmFzc2V0U2NhbGUFBXByaWNlBBBzdXBwbHlBc3NldHNKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCSJhbW91bnQiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgUMd2FsbGV0U3VwcGx5Ag8sImFtb3VudEluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgURd2FsbGV0U3VwcGx5SW5Vc2QCCSwicHJpY2UiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQVwcmljZQIHLCJhcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIFCXN1cHBseUFweQAIAhEsImRhaWx5UGVyY2VudHMiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgURd2FsbGV0RGFpbHlJbmNvbWUCFiwiZGFpbHlQZXJjZW50c0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAIBfQQQYm9ycm93QXNzZXRzSnNvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AgkiYW1vdW50IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFDHdhbGxldEJvcnJvdwIPLCJhbW91bnRJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEXdhbGxldEJvcnJvd0luVXNkAgksInByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUFcHJpY2UCBywiYXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQlib3Jyb3dBcHkACAIRLCJkYWlseVBlcmNlbnRzIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFF3dhbGxldERhaWx5TG9hbkludGVyZXN0AhYsImRhaWx5UGVyY2VudHNJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFHHdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QCAX0JAJQKAgkAzQgCCAUFYWNjdW0CXzEFEHN1cHBseUFzc2V0c0pzb24JAM0IAggFBWFjY3VtAl8yBRBib3Jyb3dBc3NldHNKc29uBA0kdDAzNTkwNTM1OTkxCgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQd2FsbGV0QXNzZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEEHN1cHBseUFzc2V0c0pzb24IBQ0kdDAzNTkwNTM1OTkxAl8xBBBib3Jyb3dBc3NldHNKc29uCAUNJHQwMzU5MDUzNTk5MQJfMgMJAAACBQttYXJrZXRJbmRleAUEbmV4dAkAoQoPCQBkAggFBWFjY3VtAl8xBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkCQBkAggFBWFjY3VtAl8yBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBRd0b3RhbFdhbGxldEJhZERlYnRJblVzZAkAZAIIBQVhY2N1bQJfNAUbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkCQBkAggFBWFjY3VtAl81BSF0b3RhbFdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QFF3RvdGFsV2FsbGV0QmFkRGVidEluVXNkBRt0b3RhbFdhbGxldERhaWx5SW5jb21lSW5Vc2QFIXRvdGFsV2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZAUNYWNjb3VudEhlYWx0aAUGbmV0QXB5CQDNCAIIBQVhY2N1bQNfMTMFC21hcmtldHNKc29uBRBzdXBwbHlBc3NldHNKc29uBRBib3Jyb3dBc3NldHNKc29uCQChCg8JAGQCCAUFYWNjdW0CXzEFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QJAGQCCAUFYWNjdW0CXzMFF3RvdGFsV2FsbGV0QmFkRGVidEluVXNkCQBkAggFBWFjY3VtAl80BRt0b3RhbFdhbGxldERhaWx5SW5jb21lSW5Vc2QJAGQCCAUFYWNjdW0CXzUFIXRvdGFsV2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZAgFBWFjY3VtAl82CAUFYWNjdW0CXzcIBQVhY2N1bQJfOAgFBWFjY3VtAl85CAUFYWNjdW0DXzEwCAUFYWNjdW0DXzExCAUFYWNjdW0DXzEyCQDNCAIIBQVhY2N1bQNfMTMFC21hcmtldHNKc29uCAUFYWNjdW0DXzE0CAUFYWNjdW0DXzE1BA0kdDAzNzE3NDM3NzE4CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAoQoPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQNuaWwFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQttYXJrZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QIBQ0kdDAzNzE3NDM3NzE4Al8xBBZ0b3RhbFdhbGxldEJvcnJvd0luVXNkCAUNJHQwMzcxNzQzNzcxOAJfMgQXdG90YWxXYWxsZXRCYWREZWJ0SW5Vc2QIBQ0kdDAzNzE3NDM3NzE4Al8zBBt0b3RhbFdhbGxldERhaWx5SW5jb21lSW5Vc2QIBQ0kdDAzNzE3NDM3NzE4Al80BCF0b3RhbFdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QIBQ0kdDAzNzE3NDM3NzE4Al81BBF3YWxsZXRTdXBwbHlJblVzZAgFDSR0MDM3MTc0Mzc3MTgCXzYEEXdhbGxldEJvcnJvd0luVXNkCAUNJHQwMzcxNzQzNzcxOAJfNwQSd2FsbGV0QmFkRGVidEluVXNkCAUNJHQwMzcxNzQzNzcxOAJfOAQWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAgFDSR0MDM3MTc0Mzc3MTgCXzkEHHdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QIBQ0kdDAzNzE3NDM3NzE4A18xMAQTd2FsbGV0QWNjb3VudEhlYWx0aAgFDSR0MDM3MTc0Mzc3MTgDXzExBAx3YWxsZXROZXRBcHkIBQ0kdDAzNzE3NDM3NzE4A18xMgQLbWFya2V0c0pzb24IBQ0kdDAzNzE3NDM3NzE4A18xMwQQc3VwcGx5QXNzZXRzSnNvbggFDSR0MDM3MTc0Mzc3MTgDXzE0BBBib3Jyb3dBc3NldHNKc29uCAUNJHQwMzcxNzQzNzcxOANfMTUEBGpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCDiJtYXJrZXRJbmRleCI6CQCkAwEFC21hcmtldEluZGV4AgksIm5hbWUiOiIFCm1hcmtldE5hbWUCASICFCwidG90YWxTdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QCFCwidG90YWxCb3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QCFSwidG90YWxCYWREZWJ0SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRd0b3RhbFdhbGxldEJhZERlYnRJblVzZAIZLCJ0b3RhbERhaWx5SW5jb21lSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRt0b3RhbFdhbGxldERhaWx5SW5jb21lSW5Vc2QCHywidG90YWxEYWlseUxvYW5JbnRlcmVzdEluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUhdG90YWxXYWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkAg8sInN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgURd2FsbGV0U3VwcGx5SW5Vc2QCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRF3YWxsZXRCb3Jyb3dJblVzZAIQLCJiYWREZWJ0SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRJ3YWxsZXRCYWREZWJ0SW5Vc2QCFCwiZGFpbHlJbmNvbWVJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFndhbGxldERhaWx5SW5jb21lSW5Vc2QCGiwiZGFpbHlMb2FuSW50ZXJlc3RJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFHHdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QCESwiYWNjb3VudEhlYWx0aCI6CQEPYW1vdW50VG9EZWNpbWFsAgUTd2FsbGV0QWNjb3VudEhlYWx0aAAIAgosIm5ldEFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUMd2FsbGV0TmV0QXB5AAgCESwic3VwcGx5QXNzZXRzIjpbCQC7CQIFEHN1cHBseUFzc2V0c0pzb24CASwCAV0CESwiYm9ycm93QXNzZXRzIjpbCQC7CQIFEGJvcnJvd0Fzc2V0c0pzb24CASwCAV0CDCwibWFya2V0cyI6WwkAuwkCBQttYXJrZXRzSnNvbgIBLAIBXQIBfQMFBWRlYnVnCQACAQUEanNvbgUEanNvbgEXZ2V0V2FsbGV0T3BlcmF0aW9uc0pzb24ECW1hcmtldFN0cgphc3NldElkU3RyBndhbGxldAVkZWJ1ZwQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAttYXJrZXRJbmRleAkBEUBleHRyTmF0aXZlKDEwNTUpAQkArAICAgdtYXJrZXRfBQltYXJrZXRTdHIECm1hcmtldE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIMbWFya2V0X25hbWVfBQltYXJrZXRTdHIEBmFjdGl2ZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ1tYXJrZXRBZGRyZXNzAgxzZXR1cF9hY3RpdmUGBAtzZXR1cFRva2VucwkBDmdldFNldHVwVG9rZW5zAQUNbWFya2V0QWRkcmVzcwQHc2V0dXBDZgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgpzZXR1cF9sdHZzAgEsBAdzZXR1cEx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCXNldHVwX2x0cwIBLAQMc2V0dXBQZW5hbHR5CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCD3NldHVwX3BlbmFsdGllcwIBLAQKYXNzZXRJbmRleAkBDWdldEFzc2V0SW5kZXgCBQtzZXR1cFRva2VucwUKYXNzZXRJZFN0cgQCY2YJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cENmBQphc3NldEluZGV4BAJsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFCmFzc2V0SW5kZXgEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxzZXR1cFBlbmFsdHkFCmFzc2V0SW5kZXgEC2Fzc2V0c0NvdW50CQCQAwEFC3NldHVwVG9rZW5zBA5sYXN0UmF0ZUhlaWdodAkBEWdldExhc3RSYXRlSGVpZ2h0AQUNbWFya2V0QWRkcmVzcwQFcHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQKYXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsU3VwcGx5CQEWZ2V0T3V0ZGF0ZWRUb3RhbFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxCb3Jyb3cJARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRTUmF0ZQkBEGdldE91dGRhdGVkU1JhdGUCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZEJSYXRlCQEQZ2V0T3V0ZGF0ZWRCUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIECm91dGRhdGVkVXIJAQ1nZXRPdXRkYXRlZFVyBAUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUNb3V0ZGF0ZWRTUmF0ZQUNb3V0ZGF0ZWRCUmF0ZQQEcmF0ZQkBB2dldFJhdGUDBQpvdXRkYXRlZFVyBQphc3NldElkU3RyBQltYXJrZXRTdHIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQRyYXRlBAVzUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQpvdXRkYXRlZFVyBQ1vdXRkYXRlZFNSYXRlBAViUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQ1vdXRkYXRlZEJSYXRlBAZzdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsU3VwcGx5BQVzUmF0ZQQGYm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUFYlJhdGUEC3N1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQZzdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBAtib3Jyb3dJblVzZAkBCGdldEluVXNkAwUGYm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQIcmVzZXJ2ZXMJAGUCBQZzdXBwbHkFBmJvcnJvdwQNcmVzZXJ2ZXNJblVzZAkBCGdldEluVXNkAwUIcmVzZXJ2ZXMFCmFzc2V0U2NhbGUFBXByaWNlBAJ1cgkBC2dldEFjdHVhbFVyAgUGc3VwcGx5BQZib3Jyb3cECXN1cHBseUFweQkBDGdldFN1cHBseUFweQIFBHJhdGUFAnVyBAlib3Jyb3dBcHkJAQxnZXRCb3Jyb3dBcHkBBQRyYXRlBAltYXhTdXBwbHkJAQxnZXRNYXhTdXBwbHkCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBAx3YWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBXNSYXRlBBF3YWxsZXRTdXBwbHlJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0U3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQRd2FsbGV0RGFpbHlJbmNvbWUJARBnZXREYWlseVBlcmNlbnRzAgUJc3VwcGx5QXB5BQx3YWxsZXRTdXBwbHkEFndhbGxldERhaWx5SW5jb21lSW5Vc2QJAQhnZXRJblVzZAMFEXdhbGxldERhaWx5SW5jb21lBQphc3NldFNjYWxlBQVwcmljZQQMd2FsbGV0Qm9ycm93CQEPZ2V0V2FsbGV0Qm9ycm93BAUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQViUmF0ZQQRd2FsbGV0Qm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldEJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UEF3dhbGxldERhaWx5TG9hblBlcmNlbnRzCQEQZ2V0RGFpbHlQZXJjZW50cwIFCWJvcnJvd0FweQUMd2FsbGV0Qm9ycm93BBx3YWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkCQEIZ2V0SW5Vc2QDBRd3YWxsZXREYWlseUxvYW5QZXJjZW50cwUKYXNzZXRTY2FsZQUFcHJpY2UKAQphc3NldHNGb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFC2Fzc2V0c0NvdW50BQVhY2N1bQQRY3VycmVudEFzc2V0SWRTdHIJAJEDAgULc2V0dXBUb2tlbnMFBG5leHQECWN1cnJlbnRDZgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFBG5leHQECWN1cnJlbnRMdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFBG5leHQEDGN1cnJlbnRQcmljZQkBDWdldFRva2VuUHJpY2UBBRFjdXJyZW50QXNzZXRJZFN0cgQRY3VycmVudEFzc2V0U2NhbGUJAQ1nZXRBc3NldFNjYWxlAQURY3VycmVudEFzc2V0SWRTdHIEGmN1cnJlbnRPdXRkYXRlZFRvdGFsU3VwcGx5CQEWZ2V0T3V0ZGF0ZWRUb3RhbFN1cHBseQIFDW1hcmtldEFkZHJlc3MFEWN1cnJlbnRBc3NldElkU3RyBBpjdXJyZW50T3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBRFjdXJyZW50QXNzZXRJZFN0cgQUY3VycmVudE91dGRhdGVkU1JhdGUJARBnZXRPdXRkYXRlZFNSYXRlAgUNbWFya2V0QWRkcmVzcwURY3VycmVudEFzc2V0SWRTdHIEFGN1cnJlbnRPdXRkYXRlZEJSYXRlCQEQZ2V0T3V0ZGF0ZWRCUmF0ZQIFDW1hcmtldEFkZHJlc3MFEWN1cnJlbnRBc3NldElkU3RyBBFjdXJyZW50T3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRpjdXJyZW50T3V0ZGF0ZWRUb3RhbFN1cHBseQUaY3VycmVudE91dGRhdGVkVG90YWxCb3Jyb3cFFGN1cnJlbnRPdXRkYXRlZFNSYXRlBRRjdXJyZW50T3V0ZGF0ZWRCUmF0ZQQLY3VycmVudFJhdGUJAQdnZXRSYXRlAwURY3VycmVudE91dGRhdGVkVXIFEWN1cnJlbnRBc3NldElkU3RyBQltYXJrZXRTdHIED2N1cnJlbnRJbnRlcmVzdAkBC2dldEludGVyZXN0AQULY3VycmVudFJhdGUEDGN1cnJlbnRTUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUObGFzdFJhdGVIZWlnaHQFD2N1cnJlbnRJbnRlcmVzdAURY3VycmVudE91dGRhdGVkVXIFFGN1cnJlbnRPdXRkYXRlZFNSYXRlBAxjdXJyZW50QlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFDmxhc3RSYXRlSGVpZ2h0BQ9jdXJyZW50SW50ZXJlc3QFFGN1cnJlbnRPdXRkYXRlZEJSYXRlBA1jdXJyZW50U3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUaY3VycmVudE91dGRhdGVkVG90YWxTdXBwbHkFBXNSYXRlBA1jdXJyZW50Qm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUaY3VycmVudE91dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAljdXJyZW50VXIJAQtnZXRBY3R1YWxVcgIFDWN1cnJlbnRTdXBwbHkFDWN1cnJlbnRCb3Jyb3cEEGN1cnJlbnRTdXBwbHlBcHkJAQxnZXRTdXBwbHlBcHkCBQtjdXJyZW50UmF0ZQUJY3VycmVudFVyBBBjdXJyZW50Qm9ycm93QXB5CQEMZ2V0Qm9ycm93QXB5AQULY3VycmVudFJhdGUEE2N1cnJlbnRXYWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBQ1tYXJrZXRBZGRyZXNzBRFjdXJyZW50QXNzZXRJZFN0cgUGd2FsbGV0BQxjdXJyZW50U1JhdGUEGGN1cnJlbnRXYWxsZXRTdXBwbHlJblVzZAkBCGdldEluVXNkAwUTY3VycmVudFdhbGxldFN1cHBseQURY3VycmVudEFzc2V0U2NhbGUFDGN1cnJlbnRQcmljZQQTY3VycmVudFdhbGxldEJvcnJvdwkBD2dldFdhbGxldEJvcnJvdwQFDW1hcmtldEFkZHJlc3MFEWN1cnJlbnRBc3NldElkU3RyBQZ3YWxsZXQFDGN1cnJlbnRCUmF0ZQQYY3VycmVudFdhbGxldEJvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBRNjdXJyZW50V2FsbGV0Qm9ycm93BRFjdXJyZW50QXNzZXRTY2FsZQUMY3VycmVudFByaWNlBB1jdXJyZW50V2FsbGV0Qm9ycm93TGltaXRJblVzZAkAawMFGGN1cnJlbnRXYWxsZXRTdXBwbHlJblVzZAUJY3VycmVudENmBQZTY2FsZTgEHWN1cnJlbnRXYWxsZXRCb3Jyb3dVc2FnZUluVXNkCQBrAwUYY3VycmVudFdhbGxldEJvcnJvd0luVXNkBQZTY2FsZTgFCWN1cnJlbnRMdAQRd2FsbGV0TWFyZ2luSW5Vc2QJAGUCCQBrAwUYY3VycmVudFdhbGxldFN1cHBseUluVXNkBRBjdXJyZW50U3VwcGx5QXB5BQZTY2FsZTgJAGsDBRhjdXJyZW50V2FsbGV0Qm9ycm93SW5Vc2QFEGN1cnJlbnRCb3Jyb3dBcHkFBlNjYWxlOAkAlwoFCQBkAggFBWFjY3VtAl8xBRhjdXJyZW50V2FsbGV0U3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFGGN1cnJlbnRXYWxsZXRCb3Jyb3dJblVzZAkAZAIIBQVhY2N1bQJfMwUdY3VycmVudFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAGQCCAUFYWNjdW0CXzQFHWN1cnJlbnRXYWxsZXRCb3Jyb3dVc2FnZUluVXNkCQBkAggFBWFjY3VtAl81BRF3YWxsZXRNYXJnaW5JblVzZAQNJHQwNDQ1NjM0NDc0NAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJcKBQAAAAAAAAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBZ0b3RhbFdhbGxldFN1cHBseUluVXNkCAUNJHQwNDQ1NjM0NDc0NAJfMQQWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAgFDSR0MDQ0NTYzNDQ3NDQCXzIEG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAgFDSR0MDQ0NTYzNDQ3NDQCXzMEG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAgFDSR0MDQ0NTYzNDQ3NDQCXzQEFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QIBQ0kdDA0NDU2MzQ0NzQ0Al81BA1hY2NvdW50SGVhbHRoCQEQZ2V0QWNjb3VudEhlYWx0aAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAUbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkBAZuZXRBcHkJAQlnZXROZXRBcHkDBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkBARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7Ag4ibWFya2V0SW5kZXgiOgkApAMBBQttYXJrZXRJbmRleAILLCJtYXJrZXQiOiIFCm1hcmtldE5hbWUCASICDiwiYXNzZXRQcmljZSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFBXByaWNlAgosInN1cHBseSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQZzdXBwbHkCDywic3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQtzdXBwbHlJblVzZAINLCJzdXBwbHlBcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIFCXN1cHBseUFweQAIAgosImJvcnJvdyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQZib3Jyb3cCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQtib3Jyb3dJblVzZAINLCJib3Jyb3dBcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIFCWJvcnJvd0FweQAIAgwsInJlc2VydmVzIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFCHJlc2VydmVzAhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQ1yZXNlcnZlc0luVXNkAhQsInV0aWxpemF0aW9uUmF0aW8iOgkBD2Ftb3VudFRvRGVjaW1hbAIFAnVyAAgCFCwiY29sbGF0ZXJhbEZhY3RvciI6CQEPYW1vdW50VG9EZWNpbWFsAgUCY2YACAIYLCJsaXF1aWRhdGlvblRocmVzaG9sZCI6CQEPYW1vdW50VG9EZWNpbWFsAgUCbHQACAIWLCJsaXF1aWRhdGlvblBlbmFsdHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIFB3BlbmFsdHkACAINLCJtYXhTdXBwbHkiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQltYXhTdXBwbHkCECwid2FsbGV0U3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFDHdhbGxldFN1cHBseQIVLCJ3YWxsZXRTdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEXdhbGxldFN1cHBseUluVXNkAhUsIndhbGxldERhaWx5SW5jb21lIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFEXdhbGxldERhaWx5SW5jb21lAhosIndhbGxldERhaWx5SW5jb21lSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ3YWxsZXREYWlseUluY29tZUluVXNkAhAsIndhbGxldEJvcnJvdyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQx3YWxsZXRCb3Jyb3cCFSwid2FsbGV0Qm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRF3YWxsZXRCb3Jyb3dJblVzZAIbLCJ3YWxsZXREYWlseUxvYW5JbnRlcmVzdCI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBRd3YWxsZXREYWlseUxvYW5QZXJjZW50cwIgLCJ3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUcd2FsbGV0RGFpbHlMb2FuUGVyY2VudHNJblVzZAIRLCJhY2NvdW50SGVhbHRoIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQ1hY2NvdW50SGVhbHRoAAgCCiwibmV0QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQZuZXRBcHkACAIBfQMFBWRlYnVnCQACAQUEanNvbgUEanNvbgAA452org==", "height": 3861264, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Hk3uxBsvSzn1pa9RhdmQcMaqNrq4GKgkeZxQTAuhw4AF Next: 69ruVcmzcZDiVFzi2iEddjoRQPnypXPjwTfrkGWmuhfN Diff:
OldNewDifferences
3535
3636 let axlyLPs = ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", "Btw3G1j4wQgdp49PTxaFkNvn75dQtqGDM7ejQppHnWC1", "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe", "F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", "4CQ5CPGLXLbWBUs2JBjKUaRqF49CmKHkwzvPgSvQpAQV", "6iMB6LKSrgv9waEvEnN6Ydyx7dfxPnGcTw8318WVm5bR"]
3737
38-func getRateCurve (assetIdStr) = match assetIdStr {
38+func getRateCurve (assetIdStr,marketStr) = match marketStr {
3939 case _ =>
40- if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
41- then $Tuple4(2000000, 25000000, 80000000, 100000000)
42- else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match0))
43- then $Tuple4(2000000, 25000000, 80000000, 100000000)
44- else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
45- then $Tuple4(2000000, 25000000, 80000000, 100000000)
46- else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
40+ if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0))
41+ then match assetIdStr {
42+ case _ =>
43+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
4744 then $Tuple4(2000000, 25000000, 80000000, 100000000)
48- else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match0))
45+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
4946 then $Tuple4(2000000, 25000000, 80000000, 100000000)
50- else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match0))
51- then $Tuple4(2000000, 40000000, 80000000, 150000000)
52- else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match0))
53- then $Tuple4(0, 100000000, 80000000, 400000000)
54- else if (("WAVES" == $match0))
55- then $Tuple4(2000000, 30000000, 80000000, 90000000)
56- else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match0))
57- then $Tuple4(0, 20000000, 80000000, 40000000)
58- else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match0))
59- then $Tuple4(0, 20000000, 80000000, 100000000)
60- else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match0))
61- then $Tuple4(0, 30000000, 80000000, 40000000)
62- else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match0))
63- then $Tuple4(0, 25000000, 80000000, 40000000)
64- else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
65- then $Tuple4(2000000, 30000000, 80000000, 50000000)
66- else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
67- then $Tuple4(2000000, 30000000, 80000000, 50000000)
68- else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match0))
47+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
48+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
49+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
50+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
51+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
52+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
53+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
54+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
55+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
56+ then $Tuple4(0, 100000000, 80000000, 400000000)
57+ else if (("WAVES" == $match1))
58+ then $Tuple4(2000000, 30000000, 80000000, 90000000)
59+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
60+ then $Tuple4(0, 20000000, 80000000, 40000000)
61+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
62+ then $Tuple4(0, 20000000, 80000000, 100000000)
63+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
64+ then $Tuple4(0, 30000000, 80000000, 40000000)
65+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
66+ then $Tuple4(0, 25000000, 80000000, 40000000)
67+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
68+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
69+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
70+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
71+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
72+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
73+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
74+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
75+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
76+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
77+ else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
78+ then $Tuple4(0, 50000000, 80000000, 200000000)
79+ else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
80+ then $Tuple4(0, 100000000, 80000000, 400000000)
81+ else $Tuple4(0, 20000000, 80000000, 80000000)
82+ }
83+ else if (("3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X" == $match0))
84+ then match assetIdStr {
85+ case _ =>
86+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
87+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
88+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
89+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
90+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
91+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
92+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
93+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
94+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
95+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
96+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
97+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
98+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
99+ then $Tuple4(0, 50000000, 80000000, 400000000)
100+ else if (("WAVES" == $match1))
101+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
102+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
103+ then $Tuple4(0, 20000000, 80000000, 40000000)
104+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
105+ then $Tuple4(0, 20000000, 80000000, 100000000)
106+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
107+ then $Tuple4(0, 30000000, 80000000, 40000000)
108+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
109+ then $Tuple4(0, 25000000, 80000000, 40000000)
110+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
111+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
112+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
113+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
114+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
115+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
116+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
117+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
118+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
119+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
120+ else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
121+ then $Tuple4(0, 50000000, 80000000, 200000000)
122+ else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
123+ then $Tuple4(0, 100000000, 80000000, 400000000)
124+ else $Tuple4(0, 20000000, 80000000, 80000000)
125+ }
126+ else if (("3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH" == $match0))
127+ then $Tuple4(20000000, 100000000, 60000000, 400000000)
128+ else if (("3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou" == $match0))
129+ then match assetIdStr {
130+ case _ =>
131+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
132+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
133+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
134+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
135+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
136+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
137+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
138+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
139+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
140+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
141+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
142+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
143+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
144+ then $Tuple4(0, 100000000, 80000000, 400000000)
145+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
146+ then $Tuple4(0, 20000000, 80000000, 40000000)
147+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
148+ then $Tuple4(0, 20000000, 80000000, 100000000)
149+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
150+ then $Tuple4(0, 30000000, 80000000, 40000000)
151+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
152+ then $Tuple4(0, 25000000, 80000000, 40000000)
153+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
154+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
155+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
156+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
157+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
158+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
159+ else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
160+ then $Tuple4(0, 50000000, 80000000, 200000000)
161+ else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
162+ then $Tuple4(0, 100000000, 80000000, 400000000)
163+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
164+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
165+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
166+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
167+ else if (("WAVES" == $match1))
168+ then $Tuple4(2000000, 50000000, 80000000, 100000000)
169+ else $Tuple4(20000000, 100000000, 60000000, 400000000)
170+ }
171+ else if (("3PAd9Aqg3cQSzu26MFYWQYcjSXPVCJtuf5V" == $match0))
172+ then match assetIdStr {
173+ case _ =>
174+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
175+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
176+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
177+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
178+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
179+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
180+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
181+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
182+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
183+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
184+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
185+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
186+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
187+ then $Tuple4(0, 20000000, 80000000, 40000000)
188+ else if (("WAVES" == $match1))
69189 then $Tuple4(2000000, 30000000, 80000000, 50000000)
70- else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match0))
71- then $Tuple4(2000000, 40000000, 80000000, 100000000)
72- else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match0))
73- then $Tuple4(2000000, 30000000, 80000000, 80000000)
74- else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
75- then $Tuple4(0, 50000000, 80000000, 200000000)
76- else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match0))
77- then $Tuple4(0, 100000000, 80000000, 400000000)
78- else $Tuple4(0, 20000000, 80000000, 80000000)
190+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
191+ then $Tuple4(0, 20000000, 80000000, 40000000)
192+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
193+ then $Tuple4(0, 20000000, 80000000, 100000000)
194+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
195+ then $Tuple4(0, 30000000, 80000000, 40000000)
196+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
197+ then $Tuple4(0, 25000000, 80000000, 40000000)
198+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
199+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
200+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
201+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
202+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
203+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
204+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
205+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
206+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
207+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
208+ else $Tuple4(0, 20000000, 80000000, 80000000)
209+ }
210+ else throw("Unknown market")
79211 }
80212
81213
150282 }
151283
152284
153-func getRate (outdatedUr,assetIdStr) = {
154- let curve = getRateCurve(assetIdStr)
285+func getRate (outdatedUr,assetIdStr,marketStr) = {
286+ let curve = getRateCurve(assetIdStr, marketStr)
155287 (curve._1 + (if ((curve._3 >= outdatedUr))
156288 then fraction(outdatedUr, curve._2, curve._3)
157289 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
254386
255387
256388 func assetToJson (assetIdStr,quantity) = {
257- let $t092269441 = if ((assetIdStr == Waves))
389+ let $t01622316438 = if ((assetIdStr == Waves))
258390 then $Tuple2(8, "WAVES")
259391 else {
260392 let asset = value(assetInfo(fromBase58String(assetIdStr)))
261393 $Tuple2(asset.decimals, asset.name)
262394 }
263- let decimals = $t092269441._1
264- let name = $t092269441._2
395+ let decimals = $t01622316438._1
396+ let name = $t01622316438._2
265397 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
266398 }
267399
288420 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
289421 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
290422 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
291- let rate = getRate(outdatedUr, assetIdStr)
423+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
292424 let interest = getInterest(rate)
293425 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
294426 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
305437 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
306438 }
307439
308- let $t01265612764 = {
440+ let $t01966419772 = {
309441 let $l = arr12
310442 let $s = size($l)
311443 let $acc0 = $Tuple4(0, 0, 0, nil)
319451
320452 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
321453 }
322- let supplyInUsd = $t01265612764._1
323- let borrowInUsd = $t01265612764._2
324- let reservesInUsd = $t01265612764._3
325- let marketAssetsJson = $t01265612764._4
454+ let supplyInUsd = $t01966419772._1
455+ let borrowInUsd = $t01966419772._2
456+ let reservesInUsd = $t01966419772._3
457+ let marketAssetsJson = $t01966419772._4
326458 let marketsCount = getIntegerValue("markets")
327459 func marketsFold (accum,next) = if ((next >= marketsCount))
328460 then accum
353485 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
354486 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
355487 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
356- let rate = getRate(outdatedUr, assetIdStr)
488+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
357489 let interest = getInterest(rate)
358490 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
359491 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
366498 $Tuple4((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd))
367499 }
368500
369- let $t01584516005 = {
501+ let $t02286423024 = {
370502 let $l = arr12
371503 let $s = size($l)
372504 let $acc0 = $Tuple4(0, 0, 0, 0)
380512
381513 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
382514 }
383- let totalWalletSupplyInUsd = $t01584516005._1
384- let totalWalletBorrowInUsd = $t01584516005._2
385- let totalWalletBorrowLimitInUsd = $t01584516005._3
386- let totalWalletBorrowUsageInUsd = $t01584516005._4
515+ let totalWalletSupplyInUsd = $t02286423024._1
516+ let totalWalletBorrowInUsd = $t02286423024._2
517+ let totalWalletBorrowLimitInUsd = $t02286423024._3
518+ let totalWalletBorrowUsageInUsd = $t02286423024._4
387519 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
388520 let fullJson = (((((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketShortName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + "}")
389521 (accum :+ fullJson)
432564 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
433565 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
434566 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
435- let rate = getRate(outdatedUr, assetIdStr)
567+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
436568 let interest = getInterest(rate)
437569 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
438570 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
446578 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
447579 }
448580
449- let $t01952519633 = {
581+ let $t02655526663 = {
450582 let $l = arr12
451583 let $s = size($l)
452584 let $acc0 = $Tuple4(0, 0, 0, nil)
460592
461593 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
462594 }
463- let supplyInUsd = $t01952519633._1
464- let borrowInUsd = $t01952519633._2
465- let reservesInUsd = $t01952519633._3
466- let marketAssetsJson = $t01952519633._4
595+ let supplyInUsd = $t02655526663._1
596+ let borrowInUsd = $t02655526663._2
597+ let reservesInUsd = $t02655526663._3
598+ let marketAssetsJson = $t02655526663._4
467599 let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + "}")
468600 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
469601 }
470602
471- let $t01998120100 = {
603+ let $t02701127130 = {
472604 let $l = arr12
473605 let $s = size($l)
474606 let $acc0 = $Tuple4(0, 0, 0, nil)
482614
483615 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
484616 }
485- let totalSupplyInUsd = $t01998120100._1
486- let totalBorrowInUsd = $t01998120100._2
487- let totalReservesInUsd = $t01998120100._3
488- let marketsJson = $t01998120100._4
617+ let totalSupplyInUsd = $t02701127130._1
618+ let totalBorrowInUsd = $t02701127130._2
619+ let totalReservesInUsd = $t02701127130._3
620+ let marketsJson = $t02701127130._4
489621 let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
490622 if (debug)
491623 then throw(json)
523655 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
524656 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
525657 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
526- let rate = getRate(outdatedUr, assetIdStr)
658+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
527659 let interest = getInterest(rate)
528660 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
529661 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
546678 $Tuple7((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd), (accum._5 + walletDailyIncomeInUsd), (accum._6 + walletDailyLoanInterestInUsd), (accum._7 + walletMarginInUsd))
547679 }
548680
549- let $t02454224896 = {
681+ let $t03158331937 = {
550682 let $l = arr12
551683 let $s = size($l)
552684 let $acc0 = $Tuple7(0, 0, 0, 0, 0, 0, 0)
560692
561693 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
562694 }
563- let totalWalletSupplyInUsd = $t02454224896._1
564- let totalWalletBorrowInUsd = $t02454224896._2
565- let totalWalletBorrowLimitInUsd = $t02454224896._3
566- let totalWalletBorrowUsageInUsd = $t02454224896._4
567- let totalWalletDailyIncomeInUsd = $t02454224896._5
568- let totalWalletDailyLoanInterestInUsd = $t02454224896._6
569- let totalWalletMarginInUsd = $t02454224896._7
695+ let totalWalletSupplyInUsd = $t03158331937._1
696+ let totalWalletBorrowInUsd = $t03158331937._2
697+ let totalWalletBorrowLimitInUsd = $t03158331937._3
698+ let totalWalletBorrowUsageInUsd = $t03158331937._4
699+ let totalWalletDailyIncomeInUsd = $t03158331937._5
700+ let totalWalletDailyLoanInterestInUsd = $t03158331937._6
701+ let totalWalletMarginInUsd = $t03158331937._7
570702 let totalWalletBadDebtInUsd = if ((totalWalletBorrowInUsd > totalWalletSupplyInUsd))
571703 then (totalWalletBorrowInUsd - totalWalletSupplyInUsd)
572704 else 0
584716 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
585717 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
586718 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
587- let rate = getRate(outdatedUr, assetIdStr)
719+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
588720 let interest = getInterest(rate)
589721 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
590722 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
606738 $Tuple2((accum._1 :+ supplyAssetsJson), (accum._2 :+ borrowAssetsJson))
607739 }
608740
609- let $t02885328939 = {
741+ let $t03590535991 = {
610742 let $l = arr12
611743 let $s = size($l)
612744 let $acc0 = $Tuple2(nil, nil)
620752
621753 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
622754 }
623- let supplyAssetsJson = $t02885328939._1
624- let borrowAssetsJson = $t02885328939._2
755+ let supplyAssetsJson = $t03590535991._1
756+ let borrowAssetsJson = $t03590535991._2
625757 if ((marketIndex == next))
626758 then $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletBadDebtInUsd, totalWalletDailyIncomeInUsd, totalWalletDailyLoanInterestInUsd, accountHealth, netApy, (accum._13 :+ marketsJson), supplyAssetsJson, borrowAssetsJson)
627759 else $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), accum._6, accum._7, accum._8, accum._9, accum._10, accum._11, accum._12, (accum._13 :+ marketsJson), accum._14, accum._15)
628760 }
629761
630- let $t03012230666 = {
762+ let $t03717437718 = {
631763 let $l = arr12
632764 let $s = size($l)
633765 let $acc0 = $Tuple15(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil)
641773
642774 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
643775 }
644- let totalWalletSupplyInUsd = $t03012230666._1
645- let totalWalletBorrowInUsd = $t03012230666._2
646- let totalWalletBadDebtInUsd = $t03012230666._3
647- let totalWalletDailyIncomeInUsd = $t03012230666._4
648- let totalWalletDailyLoanInterestInUsd = $t03012230666._5
649- let walletSupplyInUsd = $t03012230666._6
650- let walletBorrowInUsd = $t03012230666._7
651- let walletBadDebtInUsd = $t03012230666._8
652- let walletDailyIncomeInUsd = $t03012230666._9
653- let walletDailyLoanInterestInUsd = $t03012230666._10
654- let walletAccountHealth = $t03012230666._11
655- let walletNetApy = $t03012230666._12
656- let marketsJson = $t03012230666._13
657- let supplyAssetsJson = $t03012230666._14
658- let borrowAssetsJson = $t03012230666._15
776+ let totalWalletSupplyInUsd = $t03717437718._1
777+ let totalWalletBorrowInUsd = $t03717437718._2
778+ let totalWalletBadDebtInUsd = $t03717437718._3
779+ let totalWalletDailyIncomeInUsd = $t03717437718._4
780+ let totalWalletDailyLoanInterestInUsd = $t03717437718._5
781+ let walletSupplyInUsd = $t03717437718._6
782+ let walletBorrowInUsd = $t03717437718._7
783+ let walletBadDebtInUsd = $t03717437718._8
784+ let walletDailyIncomeInUsd = $t03717437718._9
785+ let walletDailyLoanInterestInUsd = $t03717437718._10
786+ let walletAccountHealth = $t03717437718._11
787+ let walletNetApy = $t03717437718._12
788+ let marketsJson = $t03717437718._13
789+ let supplyAssetsJson = $t03717437718._14
790+ let borrowAssetsJson = $t03717437718._15
659791 let json = ((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"name\":\"") + marketName) + "\"") + ",\"totalSupplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"totalBorrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"totalBadDebtInUsd\":") + assetToJson(usdtIdStr, totalWalletBadDebtInUsd)) + ",\"totalDailyIncomeInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyIncomeInUsd)) + ",\"totalDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyLoanInterestInUsd)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"badDebtInUsd\":") + assetToJson(usdtIdStr, walletBadDebtInUsd)) + ",\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"dailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanInterestInUsd)) + ",\"accountHealth\":") + amountToDecimal(walletAccountHealth, 8)) + ",\"netApy\":") + amountToDecimal(walletNetApy, 8)) + ",\"supplyAssets\":[") + makeString_11C(supplyAssetsJson, ",")) + "]") + ",\"borrowAssets\":[") + makeString_11C(borrowAssetsJson, ",")) + "]") + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
660792 if (debug)
661793 then throw(json)
685817 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
686818 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
687819 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
688- let rate = getRate(outdatedUr, assetIdStr)
820+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
689821 let interest = getInterest(rate)
690822 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
691823 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
720852 let currentOutdatedSRate = getOutdatedSRate(marketAddress, currentAssetIdStr)
721853 let currentOutdatedBRate = getOutdatedBRate(marketAddress, currentAssetIdStr)
722854 let currentOutdatedUr = getOutdatedUr(currentOutdatedTotalSupply, currentOutdatedTotalBorrow, currentOutdatedSRate, currentOutdatedBRate)
723- let currentRate = getRate(currentOutdatedUr, currentAssetIdStr)
855+ let currentRate = getRate(currentOutdatedUr, currentAssetIdStr, marketStr)
724856 let currentInterest = getInterest(currentRate)
725857 let currentSRate = getActualSRate(lastRateHeight, currentInterest, currentOutdatedUr, currentOutdatedSRate)
726858 let currentBRate = getActualBRate(lastRateHeight, currentInterest, currentOutdatedBRate)
739871 $Tuple5((accum._1 + currentWalletSupplyInUsd), (accum._2 + currentWalletBorrowInUsd), (accum._3 + currentWalletBorrowLimitInUsd), (accum._4 + currentWalletBorrowUsageInUsd), (accum._5 + walletMarginInUsd))
740872 }
741873
742- let $t03748937670 = {
874+ let $t04456344744 = {
743875 let $l = arr12
744876 let $s = size($l)
745877 let $acc0 = $Tuple5(0, 0, 0, 0, 0)
753885
754886 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
755887 }
756- let totalWalletSupplyInUsd = $t03748937670._1
757- let totalWalletBorrowInUsd = $t03748937670._2
758- let totalWalletBorrowLimitInUsd = $t03748937670._3
759- let totalWalletBorrowUsageInUsd = $t03748937670._4
760- let totalWalletMarginInUsd = $t03748937670._5
888+ let totalWalletSupplyInUsd = $t04456344744._1
889+ let totalWalletBorrowInUsd = $t04456344744._2
890+ let totalWalletBorrowLimitInUsd = $t04456344744._3
891+ let totalWalletBorrowUsageInUsd = $t04456344744._4
892+ let totalWalletMarginInUsd = $t04456344744._5
761893 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
762894 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
763895 let json = (((((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"market\":\"") + marketName) + "\"") + ",\"assetPrice\":") + assetToJson(usdtIdStr, price)) + ",\"supply\":") + assetToJson(assetIdStr, supply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, 8)) + ",\"borrow\":") + assetToJson(assetIdStr, borrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, 8)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"utilizationRatio\":") + amountToDecimal(ur, 8)) + ",\"collateralFactor\":") + amountToDecimal(cf, 8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, 8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, 8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"walletSupply\":") + assetToJson(assetIdStr, walletSupply)) + ",\"walletSupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"walletDailyIncome\":") + assetToJson(assetIdStr, walletDailyIncome)) + ",\"walletDailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"walletBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"walletBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"walletDailyLoanInterest\":") + assetToJson(assetIdStr, walletDailyLoanPercents)) + ",\"walletDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanPercentsInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + ",\"netApy\":") + amountToDecimal(netApy, 8)) + "}")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Waves = "WAVES"
55
66 let Scale6 = 1000000
77
88 let Scale8 = 100000000
99
1010 let Scale8Big = toBigInt(100000000)
1111
1212 let Scale10 = 10000000000
1313
1414 let Scale16 = 10000000000000000
1515
1616 let Scale16Big = toBigInt(10000000000000000)
1717
1818 let dayBlocks = 1440
1919
2020 let yearBlocks = 525600
2121
2222 let yearBlocksBig = toBigInt(525600)
2323
2424 let reserveFund = 20
2525
2626 let arr12 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
2727
2828 let usdtIdStr = "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"
2929
3030 let usdcIdStr = "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"
3131
3232 let oracleAddress = Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')
3333
3434 let axlyAddress = Address(base58'3PLsYkBw7taejV1J3qWPCN2yeyVRu31d5HW')
3535
3636 let axlyLPs = ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", "Btw3G1j4wQgdp49PTxaFkNvn75dQtqGDM7ejQppHnWC1", "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe", "F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", "4CQ5CPGLXLbWBUs2JBjKUaRqF49CmKHkwzvPgSvQpAQV", "6iMB6LKSrgv9waEvEnN6Ydyx7dfxPnGcTw8318WVm5bR"]
3737
38-func getRateCurve (assetIdStr) = match assetIdStr {
38+func getRateCurve (assetIdStr,marketStr) = match marketStr {
3939 case _ =>
40- if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
41- then $Tuple4(2000000, 25000000, 80000000, 100000000)
42- else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match0))
43- then $Tuple4(2000000, 25000000, 80000000, 100000000)
44- else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
45- then $Tuple4(2000000, 25000000, 80000000, 100000000)
46- else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
40+ if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0))
41+ then match assetIdStr {
42+ case _ =>
43+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
4744 then $Tuple4(2000000, 25000000, 80000000, 100000000)
48- else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match0))
45+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
4946 then $Tuple4(2000000, 25000000, 80000000, 100000000)
50- else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match0))
51- then $Tuple4(2000000, 40000000, 80000000, 150000000)
52- else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match0))
53- then $Tuple4(0, 100000000, 80000000, 400000000)
54- else if (("WAVES" == $match0))
55- then $Tuple4(2000000, 30000000, 80000000, 90000000)
56- else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match0))
57- then $Tuple4(0, 20000000, 80000000, 40000000)
58- else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match0))
59- then $Tuple4(0, 20000000, 80000000, 100000000)
60- else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match0))
61- then $Tuple4(0, 30000000, 80000000, 40000000)
62- else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match0))
63- then $Tuple4(0, 25000000, 80000000, 40000000)
64- else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
65- then $Tuple4(2000000, 30000000, 80000000, 50000000)
66- else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
67- then $Tuple4(2000000, 30000000, 80000000, 50000000)
68- else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match0))
47+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
48+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
49+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
50+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
51+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
52+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
53+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
54+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
55+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
56+ then $Tuple4(0, 100000000, 80000000, 400000000)
57+ else if (("WAVES" == $match1))
58+ then $Tuple4(2000000, 30000000, 80000000, 90000000)
59+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
60+ then $Tuple4(0, 20000000, 80000000, 40000000)
61+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
62+ then $Tuple4(0, 20000000, 80000000, 100000000)
63+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
64+ then $Tuple4(0, 30000000, 80000000, 40000000)
65+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
66+ then $Tuple4(0, 25000000, 80000000, 40000000)
67+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
68+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
69+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
70+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
71+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
72+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
73+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
74+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
75+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
76+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
77+ else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
78+ then $Tuple4(0, 50000000, 80000000, 200000000)
79+ else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
80+ then $Tuple4(0, 100000000, 80000000, 400000000)
81+ else $Tuple4(0, 20000000, 80000000, 80000000)
82+ }
83+ else if (("3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X" == $match0))
84+ then match assetIdStr {
85+ case _ =>
86+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
87+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
88+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
89+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
90+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
91+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
92+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
93+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
94+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
95+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
96+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
97+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
98+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
99+ then $Tuple4(0, 50000000, 80000000, 400000000)
100+ else if (("WAVES" == $match1))
101+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
102+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
103+ then $Tuple4(0, 20000000, 80000000, 40000000)
104+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
105+ then $Tuple4(0, 20000000, 80000000, 100000000)
106+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
107+ then $Tuple4(0, 30000000, 80000000, 40000000)
108+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
109+ then $Tuple4(0, 25000000, 80000000, 40000000)
110+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
111+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
112+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
113+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
114+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
115+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
116+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
117+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
118+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
119+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
120+ else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
121+ then $Tuple4(0, 50000000, 80000000, 200000000)
122+ else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
123+ then $Tuple4(0, 100000000, 80000000, 400000000)
124+ else $Tuple4(0, 20000000, 80000000, 80000000)
125+ }
126+ else if (("3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH" == $match0))
127+ then $Tuple4(20000000, 100000000, 60000000, 400000000)
128+ else if (("3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou" == $match0))
129+ then match assetIdStr {
130+ case _ =>
131+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
132+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
133+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
134+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
135+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
136+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
137+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
138+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
139+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
140+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
141+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
142+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
143+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
144+ then $Tuple4(0, 100000000, 80000000, 400000000)
145+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
146+ then $Tuple4(0, 20000000, 80000000, 40000000)
147+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
148+ then $Tuple4(0, 20000000, 80000000, 100000000)
149+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
150+ then $Tuple4(0, 30000000, 80000000, 40000000)
151+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
152+ then $Tuple4(0, 25000000, 80000000, 40000000)
153+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
154+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
155+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
156+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
157+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
158+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
159+ else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
160+ then $Tuple4(0, 50000000, 80000000, 200000000)
161+ else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
162+ then $Tuple4(0, 100000000, 80000000, 400000000)
163+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
164+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
165+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
166+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
167+ else if (("WAVES" == $match1))
168+ then $Tuple4(2000000, 50000000, 80000000, 100000000)
169+ else $Tuple4(20000000, 100000000, 60000000, 400000000)
170+ }
171+ else if (("3PAd9Aqg3cQSzu26MFYWQYcjSXPVCJtuf5V" == $match0))
172+ then match assetIdStr {
173+ case _ =>
174+ if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
175+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
176+ else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
177+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
178+ else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
179+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
180+ else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
181+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
182+ else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
183+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
184+ else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
185+ then $Tuple4(2000000, 40000000, 80000000, 150000000)
186+ else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
187+ then $Tuple4(0, 20000000, 80000000, 40000000)
188+ else if (("WAVES" == $match1))
69189 then $Tuple4(2000000, 30000000, 80000000, 50000000)
70- else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match0))
71- then $Tuple4(2000000, 40000000, 80000000, 100000000)
72- else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match0))
73- then $Tuple4(2000000, 30000000, 80000000, 80000000)
74- else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
75- then $Tuple4(0, 50000000, 80000000, 200000000)
76- else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match0))
77- then $Tuple4(0, 100000000, 80000000, 400000000)
78- else $Tuple4(0, 20000000, 80000000, 80000000)
190+ else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
191+ then $Tuple4(0, 20000000, 80000000, 40000000)
192+ else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
193+ then $Tuple4(0, 20000000, 80000000, 100000000)
194+ else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
195+ then $Tuple4(0, 30000000, 80000000, 40000000)
196+ else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
197+ then $Tuple4(0, 25000000, 80000000, 40000000)
198+ else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
199+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
200+ else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
201+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
202+ else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
203+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
204+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
205+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
206+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
207+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
208+ else $Tuple4(0, 20000000, 80000000, 80000000)
209+ }
210+ else throw("Unknown market")
79211 }
80212
81213
82214 func sum (size,data) = {
83215 func fold (accum,next) = if ((next >= size))
84216 then accum
85217 else (accum + data[next])
86218
87219 let $l = arr12
88220 let $s = size($l)
89221 let $acc0 = 0
90222 func $f0_1 ($a,$i) = if (($i >= $s))
91223 then $a
92224 else fold($a, $l[$i])
93225
94226 func $f0_2 ($a,$i) = if (($i >= $s))
95227 then $a
96228 else throw("List size exceeds 12")
97229
98230 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
99231 }
100232
101233
102234 func getSetupTokens (marketAddress) = split(getStringValue(marketAddress, "setup_tokens"), ",")
103235
104236
105237 func getTokenPrice (assetIdStr) = if (if ((assetIdStr == usdtIdStr))
106238 then true
107239 else (assetIdStr == usdcIdStr))
108240 then 1000000
109241 else if (containsElement(axlyLPs, assetIdStr))
110242 then {
111243 let @ = invoke(axlyAddress, "getShareAssetPriceREADONLY", [assetIdStr], nil)
112244 if ($isInstanceOf(@, "Int"))
113245 then @
114246 else throw(($getType(@) + " couldn't be cast to Int"))
115247 }
116248 else {
117249 let price = getIntegerValue(oracleAddress, (assetIdStr + "_twap5B"))
118250 price
119251 }
120252
121253
122254 func getAssetScale (assetIdStr) = {
123255 let decimals = if ((assetIdStr == "WAVES"))
124256 then 8
125257 else value(assetInfo(fromBase58String(assetIdStr))).decimals
126258 pow(10, 0, decimals, 0, 0, DOWN)
127259 }
128260
129261
130262 func getLastRateHeight (marketAddress) = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
131263
132264
133265 func getOutdatedTotalSupply (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_supplied_" + assetIdStr)), 0)
134266
135267
136268 func getOutdatedTotalBorrow (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_borrowed_" + assetIdStr)), 0)
137269
138270
139271 func getOutdatedSRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_sRate")), 0)
140272
141273
142274 func getOutdatedBRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_bRate")), 0)
143275
144276
145277 func getOutdatedUr (outdatedTotalSupply,outdatedTotalBorrow,outdatedSRate,outdatedBRate) = {
146278 let down = fraction(outdatedTotalSupply, outdatedSRate, Scale16)
147279 if ((down == 0))
148280 then 0
149281 else fraction(Scale8, fraction(outdatedTotalBorrow, outdatedBRate, Scale16), down)
150282 }
151283
152284
153-func getRate (outdatedUr,assetIdStr) = {
154- let curve = getRateCurve(assetIdStr)
285+func getRate (outdatedUr,assetIdStr,marketStr) = {
286+ let curve = getRateCurve(assetIdStr, marketStr)
155287 (curve._1 + (if ((curve._3 >= outdatedUr))
156288 then fraction(outdatedUr, curve._2, curve._3)
157289 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
158290 }
159291
160292
161293 func getInterest (rate) = max([fraction(rate, Scale8, yearBlocks), 1])
162294
163295
164296 func getAssetIndex (setupTokens,assetIdStr) = value(indexOf(setupTokens, assetIdStr))
165297
166298
167299 func getAssetParamters (marketParameters,assetIndex) = $Tuple3(marketParameters._1[assetIndex], marketParameters._2[assetIndex], marketParameters._3[assetIndex])
168300
169301
170302 func getMarketParameters (marketAddress,setupTokens) = {
171303 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
172304 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
173305 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
174306 let tokensSize = size(setupTokens)
175307 func fold (accum,next) = if ((next >= tokensSize))
176308 then accum
177309 else $Tuple3((accum._1 :+ parseIntValue(setupCf[next])), (accum._2 :+ parseIntValue(setupLt[next])), (accum._3 :+ parseIntValue(setupPenalty[next])))
178310
179311 let $l = arr12
180312 let $s = size($l)
181313 let $acc0 = $Tuple3(nil, nil, nil)
182314 func $f0_1 ($a,$i) = if (($i >= $s))
183315 then $a
184316 else fold($a, $l[$i])
185317
186318 func $f0_2 ($a,$i) = if (($i >= $s))
187319 then $a
188320 else throw("List size exceeds 12")
189321
190322 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
191323 }
192324
193325
194326 func getMaxSupply (marketAddress,assetIdStr) = parseIntValue(valueOrElse(getString(marketAddress, ("setup_maxSupply_" + assetIdStr)), "0"))
195327
196328
197329 func getActualSRate (lastRateHeight,interest,outdatedUr,outdatedSRate) = {
198330 let lastSRate = max([outdatedSRate, Scale16])
199331 let newSRate = (lastSRate + ((((height - lastRateHeight) * fraction(interest, outdatedUr, Scale8)) * (100 - reserveFund)) / 100))
200332 newSRate
201333 }
202334
203335
204336 func getActualBRate (lastRateHeight,interest,outdatedBRate) = {
205337 let lastBRate = max([outdatedBRate, Scale16])
206338 let newBRate = (lastBRate + ((height - lastRateHeight) * interest))
207339 newBRate
208340 }
209341
210342
211343 func getActualUr (actualSupply,actualBorrow) = fraction(actualBorrow, Scale8, actualSupply)
212344
213345
214346 func getActualAmount (outdatedAmount,actualRate) = fraction(outdatedAmount, actualRate, Scale16)
215347
216348
217349 func getInUsd (actualAmount,assetScale,price) = fraction(actualAmount, price, assetScale)
218350
219351
220352 func getSupplyApy (rate,actualUr) = {
221353 let supplyRate = fraction(fraction(rate, 80, 100), actualUr, Scale8)
222354 (toInt(pow((Scale16Big + fraction(toBigInt(supplyRate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
223355 }
224356
225357
226358 func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
227359
228360
229361 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
230362 let outdatedWalletSupply = valueOrElse(getInteger(marketAddress, ((wallet + "_supplied_") + assetIdStr)), 0)
231363 getActualAmount(outdatedWalletSupply, actualSRate)
232364 }
233365
234366
235367 func getWalletBorrow (marketAddress,assetIdStr,wallet,actualBRate) = {
236368 let outdatedWalletBorrow = valueOrElse(getInteger(marketAddress, ((wallet + "_borrowed_") + assetIdStr)), 0)
237369 getActualAmount(outdatedWalletBorrow, actualBRate)
238370 }
239371
240372
241373 func getDailyPercents (apy,quantity) = fraction(fraction((toInt(pow((Scale8Big + toBigInt(apy)), 8, (Scale16Big / yearBlocksBig), 16, 16, DOWN)) - Scale16), dayBlocks, Scale8), quantity, Scale8)
242374
243375
244376 func getAccountHealth (totalWalletBorrowLimitInUsd,totalWalletBorrowUsageInUsd) = if ((totalWalletBorrowLimitInUsd == 0))
245377 then Scale8
246378 else (Scale8 - fraction(totalWalletBorrowUsageInUsd, Scale8, totalWalletBorrowLimitInUsd))
247379
248380
249381 func getNetApy (totalWalletSupplyInUsd,totalWalletBorrowInUsd,totalWalletMarginInUsd) = if ((totalWalletMarginInUsd == 0))
250382 then 0
251383 else if ((totalWalletMarginInUsd > 0))
252384 then fraction(totalWalletMarginInUsd, Scale8, totalWalletSupplyInUsd)
253385 else fraction(totalWalletMarginInUsd, Scale8, totalWalletBorrowInUsd)
254386
255387
256388 func assetToJson (assetIdStr,quantity) = {
257- let $t092269441 = if ((assetIdStr == Waves))
389+ let $t01622316438 = if ((assetIdStr == Waves))
258390 then $Tuple2(8, "WAVES")
259391 else {
260392 let asset = value(assetInfo(fromBase58String(assetIdStr)))
261393 $Tuple2(asset.decimals, asset.name)
262394 }
263- let decimals = $t092269441._1
264- let name = $t092269441._2
395+ let decimals = $t01622316438._1
396+ let name = $t01622316438._2
265397 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
266398 }
267399
268400
269401 func amountToDecimal (amount,decimals) = (((("{\"quantity\":" + toString(amount)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"\",\"id\":\"\"}")
270402
271403
272404 func getMarketJson (marketStr,wallet,debug) = {
273405 let marketAddress = addressFromStringValue(marketStr)
274406 let marketIndex = getIntegerValue(("market_" + marketStr))
275407 let marketName = getStringValue(("market_name_" + marketStr))
276408 let active = valueOrElse(getBoolean(marketAddress, "setup_active"), true)
277409 let setupTokens = getSetupTokens(marketAddress)
278410 let assetsCount = size(setupTokens)
279411 let lastRateHeight = getLastRateHeight(marketAddress)
280412 func assetsFold (accum,next) = if ((next >= assetsCount))
281413 then accum
282414 else {
283415 let assetIdStr = setupTokens[next]
284416 let price = getTokenPrice(assetIdStr)
285417 let assetScale = getAssetScale(assetIdStr)
286418 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
287419 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
288420 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
289421 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
290422 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
291- let rate = getRate(outdatedUr, assetIdStr)
423+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
292424 let interest = getInterest(rate)
293425 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
294426 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
295427 let supply = getActualAmount(outdatedTotalSupply, sRate)
296428 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
297429 let supplyInUsd = getInUsd(supply, assetScale, price)
298430 let borrowInUsd = getInUsd(borrow, assetScale, price)
299431 let reserves = (supply - borrow)
300432 let reservesInUsd = getInUsd(reserves, assetScale, price)
301433 let ur = getActualUr(supply, borrow)
302434 let supplyApy = getSupplyApy(rate, ur)
303435 let borrowApy = getBorrowApy(rate)
304436 let marketAssetJson = ((((((((((((((((((((((((("{" + "\"supply\":") + assetToJson(assetIdStr, supply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"borrow\":") + assetToJson(assetIdStr, borrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, 8)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, 8)) + ",\"utilizationRatio\":") + amountToDecimal(ur, 8)) + ",\"sRate\":") + amountToDecimal(sRate, 16)) + ",\"bRate\":") + amountToDecimal(bRate, 16)) + "}")
305437 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
306438 }
307439
308- let $t01265612764 = {
440+ let $t01966419772 = {
309441 let $l = arr12
310442 let $s = size($l)
311443 let $acc0 = $Tuple4(0, 0, 0, nil)
312444 func $f0_1 ($a,$i) = if (($i >= $s))
313445 then $a
314446 else assetsFold($a, $l[$i])
315447
316448 func $f0_2 ($a,$i) = if (($i >= $s))
317449 then $a
318450 else throw("List size exceeds 12")
319451
320452 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
321453 }
322- let supplyInUsd = $t01265612764._1
323- let borrowInUsd = $t01265612764._2
324- let reservesInUsd = $t01265612764._3
325- let marketAssetsJson = $t01265612764._4
454+ let supplyInUsd = $t01966419772._1
455+ let borrowInUsd = $t01966419772._2
456+ let reservesInUsd = $t01966419772._3
457+ let marketAssetsJson = $t01966419772._4
326458 let marketsCount = getIntegerValue("markets")
327459 func marketsFold (accum,next) = if ((next >= marketsCount))
328460 then accum
329461 else {
330462 let currentMarketAddressStr = getStringValue(("market_" + toString(next)))
331463 let currentMarketName = getStringValue(("market_name_" + currentMarketAddressStr))
332464 let simpleJson = (((((((("{" + "\"name\":\"") + currentMarketName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, 0)) + ",\"accountHealth\":") + amountToDecimal(0, 8)) + "}")
333465 if ((wallet == ""))
334466 then (accum :+ simpleJson)
335467 else {
336468 let currentMarketAddress = addressFromStringValue(currentMarketAddressStr)
337469 let currentSetupTokens = getSetupTokens(currentMarketAddress)
338470 let currentAssetsCount = size(currentSetupTokens)
339471 let currentMarketShortName = getStringValue(("market_shortname_" + currentMarketAddressStr))
340472 let setupCf = split(getStringValue(currentMarketAddress, "setup_ltvs"), ",")
341473 let setupLt = split(getStringValue(currentMarketAddress, "setup_lts"), ",")
342474 let currentLastRateHeight = getLastRateHeight(currentMarketAddress)
343475 func marketAssetsFold (accum,next) = if ((next >= currentAssetsCount))
344476 then accum
345477 else {
346478 let assetIdStr = currentSetupTokens[next]
347479 let cf = parseIntValue(setupCf[next])
348480 let lt = parseIntValue(setupLt[next])
349481 let price = getTokenPrice(assetIdStr)
350482 let assetScale = getAssetScale(assetIdStr)
351483 let outdatedTotalSupply = getOutdatedTotalSupply(currentMarketAddress, assetIdStr)
352484 let outdatedTotalBorrow = getOutdatedTotalBorrow(currentMarketAddress, assetIdStr)
353485 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
354486 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
355487 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
356- let rate = getRate(outdatedUr, assetIdStr)
488+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
357489 let interest = getInterest(rate)
358490 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
359491 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
360492 let walletSupply = getWalletSupply(currentMarketAddress, assetIdStr, wallet, sRate)
361493 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
362494 let walletBorrow = getWalletBorrow(currentMarketAddress, assetIdStr, wallet, bRate)
363495 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
364496 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
365497 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
366498 $Tuple4((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd))
367499 }
368500
369- let $t01584516005 = {
501+ let $t02286423024 = {
370502 let $l = arr12
371503 let $s = size($l)
372504 let $acc0 = $Tuple4(0, 0, 0, 0)
373505 func $f1_1 ($a,$i) = if (($i >= $s))
374506 then $a
375507 else marketAssetsFold($a, $l[$i])
376508
377509 func $f1_2 ($a,$i) = if (($i >= $s))
378510 then $a
379511 else throw("List size exceeds 12")
380512
381513 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
382514 }
383- let totalWalletSupplyInUsd = $t01584516005._1
384- let totalWalletBorrowInUsd = $t01584516005._2
385- let totalWalletBorrowLimitInUsd = $t01584516005._3
386- let totalWalletBorrowUsageInUsd = $t01584516005._4
515+ let totalWalletSupplyInUsd = $t02286423024._1
516+ let totalWalletBorrowInUsd = $t02286423024._2
517+ let totalWalletBorrowLimitInUsd = $t02286423024._3
518+ let totalWalletBorrowUsageInUsd = $t02286423024._4
387519 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
388520 let fullJson = (((((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketShortName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + "}")
389521 (accum :+ fullJson)
390522 }
391523 }
392524
393525 let marketsJson = {
394526 let $l = arr12
395527 let $s = size($l)
396528 let $acc0 = nil
397529 func $f1_1 ($a,$i) = if (($i >= $s))
398530 then $a
399531 else marketsFold($a, $l[$i])
400532
401533 func $f1_2 ($a,$i) = if (($i >= $s))
402534 then $a
403535 else throw("List size exceeds 12")
404536
405537 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
406538 }
407539 let json = (((((((((((((((((((("{" + "\"index\":") + toString(marketIndex)) + ",\"name\":\"") + marketName) + "\"") + ",\"active\":") + toString(active)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
408540 if (debug)
409541 then throw(json)
410542 else json
411543 }
412544
413545
414546 func getMenuJson (debug) = {
415547 let marketsCount = getIntegerValue("markets")
416548 func marketsFold (accum,next) = if ((next >= marketsCount))
417549 then accum
418550 else {
419551 let marketStr = getStringValue(("market_" + toString(next)))
420552 let marketAddress = addressFromStringValue(marketStr)
421553 let setupTokens = getSetupTokens(marketAddress)
422554 let assetsCount = size(setupTokens)
423555 let lastRateHeight = getLastRateHeight(marketAddress)
424556 func assetsFold (accum,next) = if ((next >= assetsCount))
425557 then accum
426558 else {
427559 let assetIdStr = setupTokens[next]
428560 let price = getTokenPrice(assetIdStr)
429561 let assetScale = getAssetScale(assetIdStr)
430562 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
431563 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
432564 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
433565 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
434566 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
435- let rate = getRate(outdatedUr, assetIdStr)
567+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
436568 let interest = getInterest(rate)
437569 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
438570 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
439571 let supply = getActualAmount(outdatedTotalSupply, sRate)
440572 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
441573 let supplyInUsd = getInUsd(supply, assetScale, price)
442574 let borrowInUsd = getInUsd(borrow, assetScale, price)
443575 let reserves = (supply - borrow)
444576 let reservesInUsd = getInUsd(reserves, assetScale, price)
445577 let marketAssetJson = ((((((((("{" + "\"asset\":") + assetToJson(assetIdStr, 0)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"sRate\":") + amountToDecimal(sRate, 16)) + ",\"bRate\":") + amountToDecimal(bRate, 16)) + "}")
446578 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
447579 }
448580
449- let $t01952519633 = {
581+ let $t02655526663 = {
450582 let $l = arr12
451583 let $s = size($l)
452584 let $acc0 = $Tuple4(0, 0, 0, nil)
453585 func $f0_1 ($a,$i) = if (($i >= $s))
454586 then $a
455587 else assetsFold($a, $l[$i])
456588
457589 func $f0_2 ($a,$i) = if (($i >= $s))
458590 then $a
459591 else throw("List size exceeds 12")
460592
461593 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
462594 }
463- let supplyInUsd = $t01952519633._1
464- let borrowInUsd = $t01952519633._2
465- let reservesInUsd = $t01952519633._3
466- let marketAssetsJson = $t01952519633._4
595+ let supplyInUsd = $t02655526663._1
596+ let borrowInUsd = $t02655526663._2
597+ let reservesInUsd = $t02655526663._3
598+ let marketAssetsJson = $t02655526663._4
467599 let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + "}")
468600 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
469601 }
470602
471- let $t01998120100 = {
603+ let $t02701127130 = {
472604 let $l = arr12
473605 let $s = size($l)
474606 let $acc0 = $Tuple4(0, 0, 0, nil)
475607 func $f0_1 ($a,$i) = if (($i >= $s))
476608 then $a
477609 else marketsFold($a, $l[$i])
478610
479611 func $f0_2 ($a,$i) = if (($i >= $s))
480612 then $a
481613 else throw("List size exceeds 12")
482614
483615 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
484616 }
485- let totalSupplyInUsd = $t01998120100._1
486- let totalBorrowInUsd = $t01998120100._2
487- let totalReservesInUsd = $t01998120100._3
488- let marketsJson = $t01998120100._4
617+ let totalSupplyInUsd = $t02701127130._1
618+ let totalBorrowInUsd = $t02701127130._2
619+ let totalReservesInUsd = $t02701127130._3
620+ let marketsJson = $t02701127130._4
489621 let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
490622 if (debug)
491623 then throw(json)
492624 else json
493625 }
494626
495627
496628 func getWalletJson (marketStr,wallet,debug) = {
497629 let marketAddress = addressFromStringValue(marketStr)
498630 let marketIndex = getIntegerValue(("market_" + marketStr))
499631 let marketName = getStringValue(("market_name_" + marketStr))
500632 let marketsCount = getIntegerValue("markets")
501633 func marketsFold (accum,next) = if ((next >= marketsCount))
502634 then accum
503635 else {
504636 let currentMarketAddressStr = getStringValue(("market_" + toString(next)))
505637 let currentMarketName = getStringValue(("market_name_" + currentMarketAddressStr))
506638 let currentMarketAddress = addressFromStringValue(currentMarketAddressStr)
507639 let currentSetupTokens = getSetupTokens(currentMarketAddress)
508640 let currentAssetsCount = size(currentSetupTokens)
509641 let currentMarketShortName = getStringValue(("market_shortname_" + currentMarketAddressStr))
510642 let setupCf = split(getStringValue(currentMarketAddress, "setup_ltvs"), ",")
511643 let setupLt = split(getStringValue(currentMarketAddress, "setup_lts"), ",")
512644 let currentLastRateHeight = getLastRateHeight(currentMarketAddress)
513645 func marketAssetsFold (accum,next) = if ((next >= currentAssetsCount))
514646 then accum
515647 else {
516648 let assetIdStr = currentSetupTokens[next]
517649 let cf = parseIntValue(setupCf[next])
518650 let lt = parseIntValue(setupLt[next])
519651 let price = getTokenPrice(assetIdStr)
520652 let assetScale = getAssetScale(assetIdStr)
521653 let outdatedTotalSupply = getOutdatedTotalSupply(currentMarketAddress, assetIdStr)
522654 let outdatedTotalBorrow = getOutdatedTotalBorrow(currentMarketAddress, assetIdStr)
523655 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
524656 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
525657 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
526- let rate = getRate(outdatedUr, assetIdStr)
658+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
527659 let interest = getInterest(rate)
528660 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
529661 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
530662 let supply = getActualAmount(outdatedTotalSupply, sRate)
531663 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
532664 let ur = getActualUr(supply, borrow)
533665 let supplyApy = getSupplyApy(rate, ur)
534666 let borrowApy = getBorrowApy(rate)
535667 let walletSupply = getWalletSupply(currentMarketAddress, assetIdStr, wallet, sRate)
536668 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
537669 let walletBorrow = getWalletBorrow(currentMarketAddress, assetIdStr, wallet, bRate)
538670 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
539671 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
540672 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
541673 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
542674 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
543675 let walletDailyLoanInterest = getDailyPercents(borrowApy, walletBorrow)
544676 let walletDailyLoanInterestInUsd = getInUsd(walletDailyLoanInterest, assetScale, price)
545677 let walletMarginInUsd = (fraction(walletSupplyInUsd, supplyApy, Scale8) - fraction(walletBorrowInUsd, borrowApy, Scale8))
546678 $Tuple7((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd), (accum._5 + walletDailyIncomeInUsd), (accum._6 + walletDailyLoanInterestInUsd), (accum._7 + walletMarginInUsd))
547679 }
548680
549- let $t02454224896 = {
681+ let $t03158331937 = {
550682 let $l = arr12
551683 let $s = size($l)
552684 let $acc0 = $Tuple7(0, 0, 0, 0, 0, 0, 0)
553685 func $f0_1 ($a,$i) = if (($i >= $s))
554686 then $a
555687 else marketAssetsFold($a, $l[$i])
556688
557689 func $f0_2 ($a,$i) = if (($i >= $s))
558690 then $a
559691 else throw("List size exceeds 12")
560692
561693 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
562694 }
563- let totalWalletSupplyInUsd = $t02454224896._1
564- let totalWalletBorrowInUsd = $t02454224896._2
565- let totalWalletBorrowLimitInUsd = $t02454224896._3
566- let totalWalletBorrowUsageInUsd = $t02454224896._4
567- let totalWalletDailyIncomeInUsd = $t02454224896._5
568- let totalWalletDailyLoanInterestInUsd = $t02454224896._6
569- let totalWalletMarginInUsd = $t02454224896._7
695+ let totalWalletSupplyInUsd = $t03158331937._1
696+ let totalWalletBorrowInUsd = $t03158331937._2
697+ let totalWalletBorrowLimitInUsd = $t03158331937._3
698+ let totalWalletBorrowUsageInUsd = $t03158331937._4
699+ let totalWalletDailyIncomeInUsd = $t03158331937._5
700+ let totalWalletDailyLoanInterestInUsd = $t03158331937._6
701+ let totalWalletMarginInUsd = $t03158331937._7
570702 let totalWalletBadDebtInUsd = if ((totalWalletBorrowInUsd > totalWalletSupplyInUsd))
571703 then (totalWalletBorrowInUsd - totalWalletSupplyInUsd)
572704 else 0
573705 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
574706 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
575707 let marketsJson = (((((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketShortName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + "}")
576708 func walletAssetsFold (accum,next) = if ((next >= currentAssetsCount))
577709 then accum
578710 else {
579711 let assetIdStr = currentSetupTokens[next]
580712 let price = getTokenPrice(assetIdStr)
581713 let assetScale = getAssetScale(assetIdStr)
582714 let outdatedTotalSupply = getOutdatedTotalSupply(currentMarketAddress, assetIdStr)
583715 let outdatedTotalBorrow = getOutdatedTotalBorrow(currentMarketAddress, assetIdStr)
584716 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
585717 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
586718 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
587- let rate = getRate(outdatedUr, assetIdStr)
719+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
588720 let interest = getInterest(rate)
589721 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
590722 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
591723 let supply = getActualAmount(outdatedTotalSupply, sRate)
592724 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
593725 let ur = getActualUr(supply, borrow)
594726 let supplyApy = getSupplyApy(rate, ur)
595727 let borrowApy = getBorrowApy(rate)
596728 let walletSupply = getWalletSupply(currentMarketAddress, assetIdStr, wallet, sRate)
597729 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
598730 let walletBorrow = getWalletBorrow(currentMarketAddress, assetIdStr, wallet, bRate)
599731 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
600732 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
601733 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
602734 let walletDailyLoanInterest = getDailyPercents(borrowApy, walletBorrow)
603735 let walletDailyLoanInterestInUsd = getInUsd(walletDailyLoanInterest, assetScale, price)
604736 let supplyAssetsJson = ((((((((((((("{" + "\"amount\":") + assetToJson(assetIdStr, walletSupply)) + ",\"amountInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"apy\":") + amountToDecimal(supplyApy, 8)) + ",\"dailyPercents\":") + assetToJson(assetIdStr, walletDailyIncome)) + ",\"dailyPercentsInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + "}")
605737 let borrowAssetsJson = ((((((((((((("{" + "\"amount\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"amountInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"apy\":") + amountToDecimal(borrowApy, 8)) + ",\"dailyPercents\":") + assetToJson(assetIdStr, walletDailyLoanInterest)) + ",\"dailyPercentsInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanInterestInUsd)) + "}")
606738 $Tuple2((accum._1 :+ supplyAssetsJson), (accum._2 :+ borrowAssetsJson))
607739 }
608740
609- let $t02885328939 = {
741+ let $t03590535991 = {
610742 let $l = arr12
611743 let $s = size($l)
612744 let $acc0 = $Tuple2(nil, nil)
613745 func $f1_1 ($a,$i) = if (($i >= $s))
614746 then $a
615747 else walletAssetsFold($a, $l[$i])
616748
617749 func $f1_2 ($a,$i) = if (($i >= $s))
618750 then $a
619751 else throw("List size exceeds 12")
620752
621753 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
622754 }
623- let supplyAssetsJson = $t02885328939._1
624- let borrowAssetsJson = $t02885328939._2
755+ let supplyAssetsJson = $t03590535991._1
756+ let borrowAssetsJson = $t03590535991._2
625757 if ((marketIndex == next))
626758 then $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletBadDebtInUsd, totalWalletDailyIncomeInUsd, totalWalletDailyLoanInterestInUsd, accountHealth, netApy, (accum._13 :+ marketsJson), supplyAssetsJson, borrowAssetsJson)
627759 else $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), accum._6, accum._7, accum._8, accum._9, accum._10, accum._11, accum._12, (accum._13 :+ marketsJson), accum._14, accum._15)
628760 }
629761
630- let $t03012230666 = {
762+ let $t03717437718 = {
631763 let $l = arr12
632764 let $s = size($l)
633765 let $acc0 = $Tuple15(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil)
634766 func $f0_1 ($a,$i) = if (($i >= $s))
635767 then $a
636768 else marketsFold($a, $l[$i])
637769
638770 func $f0_2 ($a,$i) = if (($i >= $s))
639771 then $a
640772 else throw("List size exceeds 12")
641773
642774 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
643775 }
644- let totalWalletSupplyInUsd = $t03012230666._1
645- let totalWalletBorrowInUsd = $t03012230666._2
646- let totalWalletBadDebtInUsd = $t03012230666._3
647- let totalWalletDailyIncomeInUsd = $t03012230666._4
648- let totalWalletDailyLoanInterestInUsd = $t03012230666._5
649- let walletSupplyInUsd = $t03012230666._6
650- let walletBorrowInUsd = $t03012230666._7
651- let walletBadDebtInUsd = $t03012230666._8
652- let walletDailyIncomeInUsd = $t03012230666._9
653- let walletDailyLoanInterestInUsd = $t03012230666._10
654- let walletAccountHealth = $t03012230666._11
655- let walletNetApy = $t03012230666._12
656- let marketsJson = $t03012230666._13
657- let supplyAssetsJson = $t03012230666._14
658- let borrowAssetsJson = $t03012230666._15
776+ let totalWalletSupplyInUsd = $t03717437718._1
777+ let totalWalletBorrowInUsd = $t03717437718._2
778+ let totalWalletBadDebtInUsd = $t03717437718._3
779+ let totalWalletDailyIncomeInUsd = $t03717437718._4
780+ let totalWalletDailyLoanInterestInUsd = $t03717437718._5
781+ let walletSupplyInUsd = $t03717437718._6
782+ let walletBorrowInUsd = $t03717437718._7
783+ let walletBadDebtInUsd = $t03717437718._8
784+ let walletDailyIncomeInUsd = $t03717437718._9
785+ let walletDailyLoanInterestInUsd = $t03717437718._10
786+ let walletAccountHealth = $t03717437718._11
787+ let walletNetApy = $t03717437718._12
788+ let marketsJson = $t03717437718._13
789+ let supplyAssetsJson = $t03717437718._14
790+ let borrowAssetsJson = $t03717437718._15
659791 let json = ((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"name\":\"") + marketName) + "\"") + ",\"totalSupplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"totalBorrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"totalBadDebtInUsd\":") + assetToJson(usdtIdStr, totalWalletBadDebtInUsd)) + ",\"totalDailyIncomeInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyIncomeInUsd)) + ",\"totalDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyLoanInterestInUsd)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"badDebtInUsd\":") + assetToJson(usdtIdStr, walletBadDebtInUsd)) + ",\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"dailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanInterestInUsd)) + ",\"accountHealth\":") + amountToDecimal(walletAccountHealth, 8)) + ",\"netApy\":") + amountToDecimal(walletNetApy, 8)) + ",\"supplyAssets\":[") + makeString_11C(supplyAssetsJson, ",")) + "]") + ",\"borrowAssets\":[") + makeString_11C(borrowAssetsJson, ",")) + "]") + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
660792 if (debug)
661793 then throw(json)
662794 else json
663795 }
664796
665797
666798 func getWalletOperationsJson (marketStr,assetIdStr,wallet,debug) = {
667799 let marketAddress = addressFromStringValue(marketStr)
668800 let marketIndex = getIntegerValue(("market_" + marketStr))
669801 let marketName = getStringValue(("market_name_" + marketStr))
670802 let active = valueOrElse(getBoolean(marketAddress, "setup_active"), true)
671803 let setupTokens = getSetupTokens(marketAddress)
672804 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
673805 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
674806 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
675807 let assetIndex = getAssetIndex(setupTokens, assetIdStr)
676808 let cf = parseIntValue(setupCf[assetIndex])
677809 let lt = parseIntValue(setupLt[assetIndex])
678810 let penalty = parseIntValue(setupPenalty[assetIndex])
679811 let assetsCount = size(setupTokens)
680812 let lastRateHeight = getLastRateHeight(marketAddress)
681813 let price = getTokenPrice(assetIdStr)
682814 let assetScale = getAssetScale(assetIdStr)
683815 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
684816 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
685817 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
686818 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
687819 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
688- let rate = getRate(outdatedUr, assetIdStr)
820+ let rate = getRate(outdatedUr, assetIdStr, marketStr)
689821 let interest = getInterest(rate)
690822 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
691823 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
692824 let supply = getActualAmount(outdatedTotalSupply, sRate)
693825 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
694826 let supplyInUsd = getInUsd(supply, assetScale, price)
695827 let borrowInUsd = getInUsd(borrow, assetScale, price)
696828 let reserves = (supply - borrow)
697829 let reservesInUsd = getInUsd(reserves, assetScale, price)
698830 let ur = getActualUr(supply, borrow)
699831 let supplyApy = getSupplyApy(rate, ur)
700832 let borrowApy = getBorrowApy(rate)
701833 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
702834 let walletSupply = getWalletSupply(marketAddress, assetIdStr, wallet, sRate)
703835 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
704836 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
705837 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
706838 let walletBorrow = getWalletBorrow(marketAddress, assetIdStr, wallet, bRate)
707839 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
708840 let walletDailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
709841 let walletDailyLoanPercentsInUsd = getInUsd(walletDailyLoanPercents, assetScale, price)
710842 func assetsFold (accum,next) = if ((next >= assetsCount))
711843 then accum
712844 else {
713845 let currentAssetIdStr = setupTokens[next]
714846 let currentCf = parseIntValue(setupCf[next])
715847 let currentLt = parseIntValue(setupLt[next])
716848 let currentPrice = getTokenPrice(currentAssetIdStr)
717849 let currentAssetScale = getAssetScale(currentAssetIdStr)
718850 let currentOutdatedTotalSupply = getOutdatedTotalSupply(marketAddress, currentAssetIdStr)
719851 let currentOutdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, currentAssetIdStr)
720852 let currentOutdatedSRate = getOutdatedSRate(marketAddress, currentAssetIdStr)
721853 let currentOutdatedBRate = getOutdatedBRate(marketAddress, currentAssetIdStr)
722854 let currentOutdatedUr = getOutdatedUr(currentOutdatedTotalSupply, currentOutdatedTotalBorrow, currentOutdatedSRate, currentOutdatedBRate)
723- let currentRate = getRate(currentOutdatedUr, currentAssetIdStr)
855+ let currentRate = getRate(currentOutdatedUr, currentAssetIdStr, marketStr)
724856 let currentInterest = getInterest(currentRate)
725857 let currentSRate = getActualSRate(lastRateHeight, currentInterest, currentOutdatedUr, currentOutdatedSRate)
726858 let currentBRate = getActualBRate(lastRateHeight, currentInterest, currentOutdatedBRate)
727859 let currentSupply = getActualAmount(currentOutdatedTotalSupply, sRate)
728860 let currentBorrow = getActualAmount(currentOutdatedTotalBorrow, bRate)
729861 let currentUr = getActualUr(currentSupply, currentBorrow)
730862 let currentSupplyApy = getSupplyApy(currentRate, currentUr)
731863 let currentBorrowApy = getBorrowApy(currentRate)
732864 let currentWalletSupply = getWalletSupply(marketAddress, currentAssetIdStr, wallet, currentSRate)
733865 let currentWalletSupplyInUsd = getInUsd(currentWalletSupply, currentAssetScale, currentPrice)
734866 let currentWalletBorrow = getWalletBorrow(marketAddress, currentAssetIdStr, wallet, currentBRate)
735867 let currentWalletBorrowInUsd = getInUsd(currentWalletBorrow, currentAssetScale, currentPrice)
736868 let currentWalletBorrowLimitInUsd = fraction(currentWalletSupplyInUsd, currentCf, Scale8)
737869 let currentWalletBorrowUsageInUsd = fraction(currentWalletBorrowInUsd, Scale8, currentLt)
738870 let walletMarginInUsd = (fraction(currentWalletSupplyInUsd, currentSupplyApy, Scale8) - fraction(currentWalletBorrowInUsd, currentBorrowApy, Scale8))
739871 $Tuple5((accum._1 + currentWalletSupplyInUsd), (accum._2 + currentWalletBorrowInUsd), (accum._3 + currentWalletBorrowLimitInUsd), (accum._4 + currentWalletBorrowUsageInUsd), (accum._5 + walletMarginInUsd))
740872 }
741873
742- let $t03748937670 = {
874+ let $t04456344744 = {
743875 let $l = arr12
744876 let $s = size($l)
745877 let $acc0 = $Tuple5(0, 0, 0, 0, 0)
746878 func $f0_1 ($a,$i) = if (($i >= $s))
747879 then $a
748880 else assetsFold($a, $l[$i])
749881
750882 func $f0_2 ($a,$i) = if (($i >= $s))
751883 then $a
752884 else throw("List size exceeds 12")
753885
754886 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
755887 }
756- let totalWalletSupplyInUsd = $t03748937670._1
757- let totalWalletBorrowInUsd = $t03748937670._2
758- let totalWalletBorrowLimitInUsd = $t03748937670._3
759- let totalWalletBorrowUsageInUsd = $t03748937670._4
760- let totalWalletMarginInUsd = $t03748937670._5
888+ let totalWalletSupplyInUsd = $t04456344744._1
889+ let totalWalletBorrowInUsd = $t04456344744._2
890+ let totalWalletBorrowLimitInUsd = $t04456344744._3
891+ let totalWalletBorrowUsageInUsd = $t04456344744._4
892+ let totalWalletMarginInUsd = $t04456344744._5
761893 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
762894 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
763895 let json = (((((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"market\":\"") + marketName) + "\"") + ",\"assetPrice\":") + assetToJson(usdtIdStr, price)) + ",\"supply\":") + assetToJson(assetIdStr, supply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, 8)) + ",\"borrow\":") + assetToJson(assetIdStr, borrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, 8)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"utilizationRatio\":") + amountToDecimal(ur, 8)) + ",\"collateralFactor\":") + amountToDecimal(cf, 8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, 8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, 8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"walletSupply\":") + assetToJson(assetIdStr, walletSupply)) + ",\"walletSupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"walletDailyIncome\":") + assetToJson(assetIdStr, walletDailyIncome)) + ",\"walletDailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"walletBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"walletBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"walletDailyLoanInterest\":") + assetToJson(assetIdStr, walletDailyLoanPercents)) + ",\"walletDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanPercentsInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + ",\"netApy\":") + amountToDecimal(netApy, 8)) + "}")
764896 if (debug)
765897 then throw(json)
766898 else json
767899 }
768900
769901
770902

github/deemru/w8io/3ef1775 
129.94 ms