tx · HPTxCEFVU3Gzqtb7s1PS29Q9wtVbg8SAYJ37FcS5aUYR

3MqY3tM5bgwds1ugNQGJziL8VJVvjTiNccH:  -0.10000000 Waves

2020.04.02 05:16 [935922] smart account 3MqY3tM5bgwds1ugNQGJziL8VJVvjTiNccH > SELF 0.00000000 Waves

{ "type": 13, "id": "HPTxCEFVU3Gzqtb7s1PS29Q9wtVbg8SAYJ37FcS5aUYR", "fee": 10000000, "feeAssetId": null, "timestamp": 1585793790880, "version": 1, "sender": "3MqY3tM5bgwds1ugNQGJziL8VJVvjTiNccH", "senderPublicKey": "HRyg4YHsVLeXBvMTqFpWfyRMg57CCKwpad33v1c9dt31", "proofs": [ "4zwYewbYrSQpkMdWjJ7o8RXod2VZTCygVfJxUmy2F9Mn3rCnZ2Bd6YmgEDArKQ5EHvaEHSFrrwFStYQQfAJSV7f" ], "script": "base64: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AAAAAAAEAAAAAA9uZXV0cmlub0FkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQIAAAAsSjRoVTdWcUxzMkpBSlh3Rm5qaWNROTdYU2h5WkVxdDhSRUM4ZkpIa1RkS2QAAAAAEmxpcXVpZGF0aW9uQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABAgAAACxIRHFlZ2drTmk5NkdNenlHdjRBUU1RbXM0M253U3J2Z01qVER6bnlpdnQ4UgAAAAANbmV1dHJpbm9Bc3NldAkAAlkAAAABAgAAACxFeWl6cmRFcEI5eXVoNDVadjNmMlVmeEtMamNlY3JtdmNxNURTUDlmRXd1bQAAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAD25ldXRyaW5vQWRkcmVzcwIAAAAVYmFsYW5jZV9sb2NrX25ldXRyaW5vAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAAAAAAEndhdmVzTG9ja2VkQmFsYW5jZQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAA9uZXV0cmlub0FkZHJlc3MCAAAAEmJhbGFuY2VfbG9ja193YXZlcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAAAAAAdyZXNlcnZlCQAAZQAAAAIJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAA9uZXV0cmlub0FkZHJlc3MFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQAAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAA1uZXV0cmlub0Fzc2V0AAAACHF1YW50aXR5CQAD6wAAAAIFAAAAD25ldXRyaW5vQWRkcmVzcwUAAAANbmV1dHJpbm9Bc3NldAkAA+sAAAACBQAAABJsaXF1aWRhdGlvbkFkZHJlc3MFAAAADW5ldXRyaW5v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", "chainId": 84, "height": 935922, "spentComplexity": 0 } View: original | compacted Prev: 6sMdn3ab3SWAF9vRKhKes5kkSJYbzyKiD4s1UZrzg9aS Next: none Diff:
OldNewDifferences
293293 0
294294 } != 0))
295295 then throw("wait next block")
296- else if ((pubKeyOraclesList[(height % 5)] != toBase58String(i.callerPublicKey)))
297- then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + pubKeyOraclesList[(height % 5)]))
298- else {
299- let prices = [if ((price1 > 0))
300- then price1
301- else 0, if ((price2 > 0))
302- then price2
303- else 0, if ((price3 > 0))
304- then price3
305- else 0, if ((price4 > 0))
306- then price4
307- else 0, if ((price5 > 0))
308- then price5
309- else 0]
310- if (((1 + 1) > 3))
311- then throw("running here!")
312- else {
313- let pricesInRange = findPricesInRange(prices)
314- let priceProvidingCount = size(pricesInRange)
315- if ((3 > priceProvidingCount))
316- then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
296+ else {
297+ let prices = [if ((price1 > 0))
298+ then price1
299+ else 0, if ((price2 > 0))
300+ then price2
301+ else 0, if ((price3 > 0))
302+ then price3
303+ else 0, if ((price4 > 0))
304+ then price4
305+ else 0, if ((price5 > 0))
306+ then price5
307+ else 0]
308+ if (((1 + 1) > 3))
309+ then throw("running here!")
310+ else {
311+ let pricesInRange = findPricesInRange(prices)
312+ let priceProvidingCount = size(pricesInRange)
313+ if ((3 > priceProvidingCount))
314+ then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
317315 ") + pubKeyOraclesList[0]) + "=") + toString(prices[0])) + "
318316 ") + pubKeyOraclesList[1]) + "=") + toString(prices[1])) + "
319317 ") + pubKeyOraclesList[2]) + "=") + toString(prices[2])) + "
320318 ") + pubKeyOraclesList[3]) + "=") + toString(prices[3])) + "
321319 ") + pubKeyOraclesList[4]) + "=") + toString(prices[4])))
322- else {
323- let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
324- let sum2 = if ((priceProvidingCount >= 4))
325- then (sum1 + prices[pricesInRange[3]])
326- else sum1
327- let priceSum = if ((priceProvidingCount >= 5))
328- then (sum2 + prices[pricesInRange[4]])
329- else sum2
330- if ((priceProvidingCount >= 6))
331- then throw("Invalid pricesInRange creation")
332- else {
333- let newPrice = (priceSum / priceProvidingCount)
334- if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
335- then true
336- else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
337- then WriteSet([DataEntry("is_blocked", true), DataEntry((("black_swarm_price" + "_") + toString(height)), newPrice)])
338- else {
339- let newPriceIndex = (priceIndex + 1)
340- WriteSet([DataEntry("price", newPrice), DataEntry(("price_" + toString(height)), newPrice), DataEntry("price_index", newPriceIndex), DataEntry(("price_index_" + toString(newPriceIndex)), height), DataEntry(("deficit_" + toString(height)), deficit), DataEntry(("neutrinoSupply_" + toString(height)), neutrinoSupply), DataEntry(("deficit_percent_" + toString(height)), if ((neutrinoSupply != 0))
341- then ((deficit * 100) / neutrinoSupply)
342- else 0)])
343- }
344- }
345- }
346- }
347- }
320+ else {
321+ let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
322+ let sum2 = if ((priceProvidingCount >= 4))
323+ then (sum1 + prices[pricesInRange[3]])
324+ else sum1
325+ let priceSum = if ((priceProvidingCount >= 5))
326+ then (sum2 + prices[pricesInRange[4]])
327+ else sum2
328+ if ((priceProvidingCount >= 6))
329+ then throw("Invalid pricesInRange creation")
330+ else {
331+ let newPrice = (priceSum / priceProvidingCount)
332+ if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
333+ then true
334+ else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
335+ then WriteSet([DataEntry("is_blocked", true), DataEntry((("black_swarm_price" + "_") + toString(height)), newPrice)])
336+ else {
337+ let newPriceIndex = (priceIndex + 1)
338+ WriteSet([DataEntry("price", newPrice), DataEntry(("price_" + toString(height)), newPrice), DataEntry("price_index", newPriceIndex), DataEntry(("price_index_" + toString(newPriceIndex)), height), DataEntry(("deficit_" + toString(height)), deficit), DataEntry(("neutrinoSupply_" + toString(height)), neutrinoSupply), DataEntry(("deficit_percent_" + toString(height)), if ((neutrinoSupply != 0))
339+ then ((deficit * 100) / neutrinoSupply)
340+ else 0)])
341+ }
342+ }
343+ }
344+ }
345+ }
348346
349347
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, 100), 1000000, 100000000)
55
66
77 func getStringByKey (key) = match getString(this, key) {
88 case a: String =>
99 a
1010 case _ =>
1111 ""
1212 }
1313
1414
1515 func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
1616 case a: Int =>
1717 a
1818 case _ =>
1919 0
2020 }
2121
2222
2323 func getOracleProvideHeight (ownerPub,height) = match getInteger(addressFromPublicKey(ownerPub), ("price_" + toString(height))) {
2424 case a: Int =>
2525 a
2626 case _ =>
2727 0
2828 }
2929
3030
3131 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3232 case a: String =>
3333 a
3434 case _ =>
3535 ""
3636 }
3737
3838
3939 func dropElementInJsonArray (array,element) = {
4040 let splitedArray = split(array, element)
4141 if ((take(splitedArray[1], 1) == ","))
4242 then (splitedArray[0] + drop(splitedArray[1], 1))
4343 else (dropRight(splitedArray[0], 1) + splitedArray[1])
4444 }
4545
4646
4747 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
4848
4949
5050 let price = match getInteger(this, "price") {
5151 case a: Int =>
5252 a
5353 case _ =>
5454 0
5555 }
5656
5757 let priceIndex = match getInteger(this, "price_index") {
5858 case a: Int =>
5959 a
6060 case _ =>
6161 0
6262 }
6363
6464 let isBlocked = match getBoolean(this, "is_blocked") {
6565 case a: Boolean =>
6666 a
6767 case _ =>
6868 false
6969 }
7070
7171 let percentPriceOffset = 7
7272
7373 let pubKeyOracles = getStringByKey("oracles")
7474
7575 let pubKeyOraclesList = convertJsonArrayToList(pubKeyOracles)
7676
7777 let bftCoefficientOracle = 4
7878
7979 let neutrinoAddress = addressFromPublicKey(fromBase58String("J4hU7VqLs2JAJXwFnjicQ97XShyZEqt8REC8fJHkTdKd"))
8080
8181 let liquidationAddress = addressFromPublicKey(fromBase58String("HDqeggkNi96GMzyGv4AQMQms43nwSrvgMjTDznyivt8R"))
8282
8383 let neutrinoAsset = fromBase58String("EyizrdEpB9yuh45Zv3f2UfxKLjcecrmvcq5DSP9fEwum")
8484
8585 let neutrinoLockedBalance = match getInteger(neutrinoAddress, "balance_lock_neutrino") {
8686 case a: Int =>
8787 a
8888 case _ =>
8989 0
9090 }
9191
9292 let wavesLockedBalance = match getInteger(neutrinoAddress, "balance_lock_waves") {
9393 case a: Int =>
9494 a
9595 case _ =>
9696 0
9797 }
9898
9999 let reserve = (wavesBalance(neutrinoAddress) - wavesLockedBalance)
100100
101101 let neutrinoSupply = (((neutrinoLockedBalance + extract(assetInfo(neutrinoAsset)).quantity) - assetBalance(neutrinoAddress, neutrinoAsset)) - assetBalance(liquidationAddress, neutrinoAsset))
102102
103103 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, price))
104104
105105 func findPricesInRange (prices) = {
106106 let minPercentBound = 90
107107 let maxPercentBound = 110
108108 let p0 = prices[0]
109109 let check0 = if ((0 >= prices[0]))
110110 then [0]
111111 else {
112112 let p01 = ((prices[1] * 100) / p0)
113113 let p02 = ((prices[2] * 100) / p0)
114114 let p03 = ((prices[3] * 100) / p0)
115115 let p04 = ((prices[4] * 100) / p0)
116116 let array1 = if (if ((maxPercentBound > p01))
117117 then (p01 > minPercentBound)
118118 else false)
119119 then [1, 0]
120120 else [0]
121121 let array2 = if (if ((maxPercentBound > p02))
122122 then (p02 > minPercentBound)
123123 else false)
124124 then 2 :: array1
125125 else array1
126126 let array3 = if (if ((maxPercentBound > p03))
127127 then (p03 > minPercentBound)
128128 else false)
129129 then 3 :: array2
130130 else array2
131131 if (if ((maxPercentBound > p04))
132132 then (p04 > minPercentBound)
133133 else false)
134134 then 4 :: array3
135135 else array3
136136 }
137137 let check1 = if ((size(check0) >= 3))
138138 then check0
139139 else {
140140 let p1 = prices[1]
141141 if ((0 >= p1))
142142 then [1]
143143 else {
144144 let p10 = ((prices[0] * 100) / p1)
145145 let p12 = ((prices[2] * 100) / p1)
146146 let p13 = ((prices[3] * 100) / p1)
147147 let p14 = ((prices[4] * 100) / p1)
148148 let array1 = if (if ((maxPercentBound > p10))
149149 then (p10 > minPercentBound)
150150 else false)
151151 then [0, 1]
152152 else [1]
153153 let array2 = if (if ((maxPercentBound > p12))
154154 then (p12 > minPercentBound)
155155 else false)
156156 then 2 :: array1
157157 else array1
158158 let array3 = if (if ((maxPercentBound > p13))
159159 then (p13 > minPercentBound)
160160 else false)
161161 then 3 :: array2
162162 else array2
163163 if (if ((maxPercentBound > p14))
164164 then (p14 > minPercentBound)
165165 else false)
166166 then 4 :: array3
167167 else array3
168168 }
169169 }
170170 let check2 = if ((size(check1) >= 3))
171171 then check1
172172 else {
173173 let p2 = prices[2]
174174 if ((0 >= p2))
175175 then [2]
176176 else {
177177 let p20 = ((prices[0] * 100) / p2)
178178 let p21 = ((prices[1] * 100) / p2)
179179 let p23 = ((prices[3] * 100) / p2)
180180 let p24 = ((prices[4] * 100) / p2)
181181 let array1 = if (if ((maxPercentBound > p20))
182182 then (p20 > minPercentBound)
183183 else false)
184184 then [0, 2]
185185 else [2]
186186 let array2 = if (if ((maxPercentBound > p21))
187187 then (p21 > minPercentBound)
188188 else false)
189189 then 1 :: array1
190190 else array1
191191 let array3 = if (if ((maxPercentBound > p23))
192192 then (p23 > minPercentBound)
193193 else false)
194194 then 3 :: array2
195195 else array2
196196 if (if ((maxPercentBound > p24))
197197 then (p24 > minPercentBound)
198198 else false)
199199 then 4 :: array3
200200 else array3
201201 }
202202 }
203203 let check3 = if ((size(check2) >= 3))
204204 then check2
205205 else {
206206 let p3 = prices[3]
207207 if ((0 >= p3))
208208 then [3]
209209 else {
210210 let p30 = ((prices[0] * 100) / p3)
211211 let p31 = ((prices[1] * 100) / p3)
212212 let p32 = ((prices[2] * 100) / p3)
213213 let p34 = ((prices[4] * 100) / p3)
214214 let array1 = if (if ((maxPercentBound > p30))
215215 then (p30 > minPercentBound)
216216 else false)
217217 then [0, 3]
218218 else [3]
219219 let array2 = if (if ((maxPercentBound > p31))
220220 then (p31 > minPercentBound)
221221 else false)
222222 then 1 :: array1
223223 else array1
224224 let array3 = if (if ((maxPercentBound > p32))
225225 then (p32 > minPercentBound)
226226 else false)
227227 then 2 :: array2
228228 else array2
229229 if (if ((maxPercentBound > p34))
230230 then (p34 > minPercentBound)
231231 else false)
232232 then 4 :: array3
233233 else array3
234234 }
235235 }
236236 if ((size(check3) >= 3))
237237 then check3
238238 else {
239239 let p4 = prices[4]
240240 if ((0 >= p4))
241241 then [4]
242242 else {
243243 let p40 = ((prices[0] * 100) / p4)
244244 let p41 = ((prices[1] * 100) / p4)
245245 let p42 = ((prices[2] * 100) / p4)
246246 let p43 = ((prices[3] * 100) / p4)
247247 let array1 = if (if ((maxPercentBound > p40))
248248 then (p40 > minPercentBound)
249249 else false)
250250 then [0, 4]
251251 else [4]
252252 let array2 = if (if ((maxPercentBound > p41))
253253 then (p41 > minPercentBound)
254254 else false)
255255 then 1 :: array1
256256 else array1
257257 let array3 = if (if ((maxPercentBound > p42))
258258 then (p42 > minPercentBound)
259259 else false)
260260 then 2 :: array2
261261 else array2
262262 if (if ((maxPercentBound > p43))
263263 then (p43 > minPercentBound)
264264 else false)
265265 then 3 :: array3
266266 else array3
267267 }
268268 }
269269 }
270270
271271
272272 func formattingPriceMsg (price,height) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(price)))
273273
274274
275275 @Callable(i)
276276 func callEmergencyShutdown (reason) = {
277277 let AutoEmergencyOracleAddress = "3Mwho43kPZa9w1y91NJsAoYxgQpsg3JjGby"
278278 let callerAddress = toString(i.caller)
279279 if ((AutoEmergencyOracleAddress != callerAddress))
280280 then throw("caller must be one an emergency oracle")
281281 else WriteSet([DataEntry("is_blocked", true), DataEntry("is_blocked_caller", callerAddress), DataEntry("is_blocked_reason", reason)])
282282 }
283283
284284
285285
286286 @Callable(i)
287287 func finalizeCurrentPrice (price1,price2,price3,price4,price5) = if (isBlocked)
288288 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
289289 else if (( match getInteger(this, ("price_" + toString(height))) {
290290 case a: Int =>
291291 a
292292 case _ =>
293293 0
294294 } != 0))
295295 then throw("wait next block")
296- else if ((pubKeyOraclesList[(height % 5)] != toBase58String(i.callerPublicKey)))
297- then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + pubKeyOraclesList[(height % 5)]))
298- else {
299- let prices = [if ((price1 > 0))
300- then price1
301- else 0, if ((price2 > 0))
302- then price2
303- else 0, if ((price3 > 0))
304- then price3
305- else 0, if ((price4 > 0))
306- then price4
307- else 0, if ((price5 > 0))
308- then price5
309- else 0]
310- if (((1 + 1) > 3))
311- then throw("running here!")
312- else {
313- let pricesInRange = findPricesInRange(prices)
314- let priceProvidingCount = size(pricesInRange)
315- if ((3 > priceProvidingCount))
316- then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
296+ else {
297+ let prices = [if ((price1 > 0))
298+ then price1
299+ else 0, if ((price2 > 0))
300+ then price2
301+ else 0, if ((price3 > 0))
302+ then price3
303+ else 0, if ((price4 > 0))
304+ then price4
305+ else 0, if ((price5 > 0))
306+ then price5
307+ else 0]
308+ if (((1 + 1) > 3))
309+ then throw("running here!")
310+ else {
311+ let pricesInRange = findPricesInRange(prices)
312+ let priceProvidingCount = size(pricesInRange)
313+ if ((3 > priceProvidingCount))
314+ then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
317315 ") + pubKeyOraclesList[0]) + "=") + toString(prices[0])) + "
318316 ") + pubKeyOraclesList[1]) + "=") + toString(prices[1])) + "
319317 ") + pubKeyOraclesList[2]) + "=") + toString(prices[2])) + "
320318 ") + pubKeyOraclesList[3]) + "=") + toString(prices[3])) + "
321319 ") + pubKeyOraclesList[4]) + "=") + toString(prices[4])))
322- else {
323- let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
324- let sum2 = if ((priceProvidingCount >= 4))
325- then (sum1 + prices[pricesInRange[3]])
326- else sum1
327- let priceSum = if ((priceProvidingCount >= 5))
328- then (sum2 + prices[pricesInRange[4]])
329- else sum2
330- if ((priceProvidingCount >= 6))
331- then throw("Invalid pricesInRange creation")
332- else {
333- let newPrice = (priceSum / priceProvidingCount)
334- if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
335- then true
336- else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
337- then WriteSet([DataEntry("is_blocked", true), DataEntry((("black_swarm_price" + "_") + toString(height)), newPrice)])
338- else {
339- let newPriceIndex = (priceIndex + 1)
340- WriteSet([DataEntry("price", newPrice), DataEntry(("price_" + toString(height)), newPrice), DataEntry("price_index", newPriceIndex), DataEntry(("price_index_" + toString(newPriceIndex)), height), DataEntry(("deficit_" + toString(height)), deficit), DataEntry(("neutrinoSupply_" + toString(height)), neutrinoSupply), DataEntry(("deficit_percent_" + toString(height)), if ((neutrinoSupply != 0))
341- then ((deficit * 100) / neutrinoSupply)
342- else 0)])
343- }
344- }
345- }
346- }
347- }
320+ else {
321+ let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
322+ let sum2 = if ((priceProvidingCount >= 4))
323+ then (sum1 + prices[pricesInRange[3]])
324+ else sum1
325+ let priceSum = if ((priceProvidingCount >= 5))
326+ then (sum2 + prices[pricesInRange[4]])
327+ else sum2
328+ if ((priceProvidingCount >= 6))
329+ then throw("Invalid pricesInRange creation")
330+ else {
331+ let newPrice = (priceSum / priceProvidingCount)
332+ if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
333+ then true
334+ else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
335+ then WriteSet([DataEntry("is_blocked", true), DataEntry((("black_swarm_price" + "_") + toString(height)), newPrice)])
336+ else {
337+ let newPriceIndex = (priceIndex + 1)
338+ WriteSet([DataEntry("price", newPrice), DataEntry(("price_" + toString(height)), newPrice), DataEntry("price_index", newPriceIndex), DataEntry(("price_index_" + toString(newPriceIndex)), height), DataEntry(("deficit_" + toString(height)), deficit), DataEntry(("neutrinoSupply_" + toString(height)), neutrinoSupply), DataEntry(("deficit_percent_" + toString(height)), if ((neutrinoSupply != 0))
339+ then ((deficit * 100) / neutrinoSupply)
340+ else 0)])
341+ }
342+ }
343+ }
344+ }
345+ }
348346
349347

github/deemru/w8io/169f3d6 
66.86 ms