Overview
Max Total Supply
258,446,028.244634859830503806 PENDLE
Holders
41,975 ( 0.117%)
Market
Price
$5.29 @ 0.001736 ETH (-2.73%)
Onchain Market Cap
$1,367,179,489.41
Circulating Supply Market Cap
$865,666,264.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000001 PENDLEValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | Binance | PENDLE-USDT | $5.30 0.0017401 Eth | $43,091,592.00 8,066,283.600 PENDLE | 24.0494% |
2 | MEXC | PENDLE-USDT | $5.30 0.0017388 Eth | $15,151,604.00 2,856,651.610 PENDLE | 8.5170% |
3 | Gate.io | PENDLE-USDT | $5.30 0.0017384 Eth | $14,540,598.00 2,716,887.308 PENDLE | 8.1003% |
4 | Nami.Exchange | PENDLE-USDT | $5.31 0.0017433 Eth | $14,395,236.00 2,713,300.200 PENDLE | 8.0896% |
5 | Upbit | PENDLE-KRW | $5.28 0.0017325 Eth | $8,437,539.00 1,597,476.825 PENDLE | 4.7628% |
6 | HTX | PENDLE-USDT | $5.31 0.0017392 Eth | $8,247,081.00 1,549,766.082 PENDLE | 4.6206% |
7 | Hotcoin | PENDLE-USDT | $5.30 0.0017388 Eth | $6,042,451.00 1,139,230.900 PENDLE | 3.3966% |
8 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.32 0.0017452 Eth | $5,822,895.00 1,066,742.056 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 3.1805% |
9 | Bitunix | PENDLE-USDT | $5.32 0.0017438 Eth | $5,711,638.00 1,072,951.000 PENDLE | 3.1990% |
10 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.31 0.0017426 Eth | $5,272,963.00 965,632.668 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 2.8790% |
11 | Bybit | PENDLE-USDT | $5.31 0.0017408 Eth | $4,735,023.00 889,176.760 PENDLE | 2.6511% |
12 | WhiteBIT | PENDLE-USDT | $5.30 0.0017382 Eth | $4,101,271.00 773,845.309 PENDLE | 2.3072% |
13 | Slex | PENDLE-USDT | $5.29 0.0017361 Eth | $3,460,975.00 648,655.400 PENDLE | 1.9340% |
14 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XFD086BC7CD5C481DCC9C85EBE478A1C0B69FCBB9 | $5.33 0.0017472 Eth | $3,359,039.00 628,627.679 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 1.8742% |
15 | LBank | PENDLE-USDT | $5.31 0.0017408 Eth | $3,322,453.00 626,197.400 PENDLE | 1.8670% |
16 | Ourbit | PENDLE-USDT | $5.30 0.0017427 Eth | $2,624,457.00 491,583.730 PENDLE | 1.4656% |
17 | XT.COM | PENDLE-USDT | $5.32 0.0017422 Eth | $2,177,245.00 407,702.600 PENDLE | 1.2156% |
18 | BVOX | PENDLE-USDT | $5.31 0.0017405 Eth | $2,078,167.00 390,710.500 PENDLE | 1.1649% |
19 | Bitrue | PENDLE-USDT | $5.30 0.0017377 Eth | $1,943,047.00 366,773.700 PENDLE | 1.0935% |
20 | Pionex | PENDLE-USDT | $5.32 0.0017430 Eth | $1,936,766.00 362,408.200 PENDLE | 1.0805% |
21 | BTSE | PENDLE-USDT | $5.30 0.0017386 Eth | $1,670,142.00 314,897.297 PENDLE | 0.9389% |
22 | BitMart | PENDLE-USDT | $5.33 0.0017461 Eth | $1,597,221.00 299,847.952 PENDLE | 0.8940% |
23 | WEEX | PENDLE-USDT | $5.31 0.0017412 Eth | $1,504,007.00 282,988.331 PENDLE | 0.8437% |
24 | Binance | PENDLE-USDC | $5.30 0.0017376 Eth | $1,247,728.00 233,107.300 PENDLE | 0.6950% |
25 | Bithumb | PENDLE-KRW | $5.28 0.0017318 Eth | $1,190,463.00 225,390.088 PENDLE | 0.6720% |
26 | Camelot V3 | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.28 0.0017316 Eth | $976,929.00 179,448.368 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.5350% |
27 | FMCPAY | PENDLE-USDT | $5.32 0.0017440 Eth | $916,410.00 172,517.040 PENDLE | 0.5144% |
28 | Toobit | PENDLE-USDT | $5.31 0.0017403 Eth | $861,418.00 161,375.200 PENDLE | 0.4811% |
29 | OrangeX | PENDLE-USDT | $5.29 0.0017359 Eth | $802,702.00 150,444.500 PENDLE | 0.4485% |
30 | Trubit | PENDLE-USDT | $5.30 0.0017399 Eth | $756,275.00 142,598.200 PENDLE | 0.4252% |
31 | OKX | PENDLE-USDT | $5.31 0.0017413 Eth | $733,307.00 137,615.616 PENDLE | 0.4103% |
32 | Bitget | PENDLE-USDT | $5.30 0.0017395 Eth | $713,892.00 133,785.457 PENDLE | 0.3989% |
33 | Binance | PENDLE-BTC | $5.30 0.0017381 Eth | $678,915.00 127,728.900 PENDLE | 0.3808% |
34 | DeGate | 0X808507121B80C02388FAD14726482E061B8DA827-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48 | $5.32 0.0017418 Eth | $669,360.00 125,305.966 0X808507121B80C02388FAD14726482E061B8DA827 | 0.3736% |
35 | Azbit | PENDLE-USDT | $5.30 0.0017435 Eth | $594,387.00 111,818.440 PENDLE | 0.3334% |
36 | BingX | PENDLE-USDT | $5.31 0.0017405 Eth | $496,201.00 92,889.516 PENDLE | 0.2769% |
37 | Bitvavo | PENDLE-EUR | $5.33 0.0017477 Eth | $485,409.00 91,102.354 PENDLE | 0.2716% |
38 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XAF88D065E77C8CC2239327C5EDB3A432268E5831 | $5.32 0.0017453 Eth | $482,391.00 90,433.404 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.2696% |
39 | PointPay | PENDLE-USDT | $5.31 0.0017404 Eth | $481,239.00 90,151.309 PENDLE | 0.2688% |
40 | Binance | PENDLE-FDUSD | $5.30 0.0017393 Eth | $433,355.00 81,091.600 PENDLE | 0.2418% |
41 | Phemex | PENDLE-USDT | $5.30 0.0017441 Eth | $400,040.00 75,434.503 PENDLE | 0.2249% |
42 | DigiFinex | PENDLE-USDT | $5.30 0.0017385 Eth | $333,368.00 62,914.400 PENDLE | 0.1876% |
43 | CoinEx | PENDLE-USDT | $5.33 0.0017466 Eth | $306,329.00 57,488.212 PENDLE | 0.1714% |
44 | Bitazza | PENDLE-USDT | $5.28 0.0017324 Eth | $279,395.00 52,604.800 PENDLE | 0.1568% |
45 | KuCoin | PENDLE-USDT | $5.33 0.0017461 Eth | $276,477.00 51,906.085 PENDLE | 0.1548% |
46 | Binance | PENDLE-TRY | $5.32 0.0017461 Eth | $268,921.00 50,088.600 PENDLE | 0.1493% |
47 | Camelot | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.31 0.0017434 Eth | $220,958.00 40,505.568 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.1208% |
48 | CoinTR | PENDLE-USDT | $5.31 0.0017390 Eth | $216,659.00 40,745.500 PENDLE | 0.1215% |
49 | LCX Exchange | PENDLE-EUR | $5.31 0.0017407 Eth | $212,757.00 40,049.092 PENDLE | 0.1194% |
50 | Niza Global | PENDLE-USD | $5.31 0.0017427 Eth | $211,852.00 39,549.131 PENDLE | 0.1179% |
51 | Kraken | PENDLE-USD | $5.31 0.0017421 Eth | $210,184.00 39,575.305 PENDLE | 0.1180% |
52 | Mercado Bitcoin | PENDLE-BRL | $5.36 0.0017564 Eth | $195,578.00 36,487.355 PENDLE | 0.1088% |
53 | BloFin | PENDLE-USDT | $5.31 0.0017397 Eth | $194,339.00 36,476.200 PENDLE | 0.1088% |
54 | PancakeSwap V3 (BSC) | 0XB3ED0A426155B79B898849803E3B36552F7ED507-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $5.29 0.0017347 Eth | $191,751.00 35,778.398 0XB3ED0A426155B79B898849803E3B36552F7ED507 | 0.1067% |
55 | Crypto.com Exchange | PENDLE-USD | $5.32 0.0017461 Eth | $166,520.00 31,282.000 PENDLE | 0.0933% |
56 | LATOKEN | PENDLE-USDT | $5.30 0.0017383 Eth | $159,676.00 30,111.757 PENDLE | 0.0898% |
57 | BitDelta | PENDLE-USDT | $5.30 0.0017390 Eth | $145,905.00 27,401.200 PENDLE | 0.0817% |
58 | CoinTR | PENDLE-TRY | $5.33 0.0017485 Eth | $141,998.00 26,554.800 PENDLE | 0.0792% |
59 | AscendEX (BitMax) | PENDLE-USDT | $5.33 0.0017476 Eth | $141,618.00 26,566.000 PENDLE | 0.0792% |
60 | PointPay | PENDLE-USDC | $5.30 0.0017424 Eth | $136,808.00 25,563.252 PENDLE | 0.0762% |
61 | Balancer V2 | 0X808507121B80C02388FAD14726482E061B8DA827-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $5.44 0.0017840 Eth | $120,032.00 21,781.573 0X808507121B80C02388FAD14726482E061B8DA827 | 0.0649% |
62 | Cryptology | PENDLE-USDT | $5.30 0.0017401 Eth | $103,068.00 19,434.200 PENDLE | 0.0579% |
63 | PancakeSwap Stableswap (Arbitrum) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XB688BA096B7BB75D7841E47163CD12D18B36A5BF | $5.30 0.0017381 Eth | $102,711.00 19,270.903 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0575% |
64 | LFJ V2.1 (Arbitrum) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.29 0.0017341 Eth | $44,400.00 8,126.133 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0242% |
65 | Crypto.com Exchange | PENDLE-USDT | $5.31 0.0017423 Eth | $40,066.00 7,543.000 PENDLE | 0.0225% |
66 | Uniswap V3 (BSC) | 0XB3ED0A426155B79B898849803E3B36552F7ED507-0X2170ED0880AC9A755FD29B2688956BD959F933F8 | $5.29 0.0017347 Eth | $40,014.00 7,348.194 0XB3ED0A426155B79B898849803E3B36552F7ED507 | 0.0219% |
67 | NovaDAX | PENDLE-BRL | $5.33 0.0017490 Eth | $37,226.00 6,983.400 PENDLE | 0.0208% |
68 | PancakeSwap V3 (Arbitrum) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.32 0.0017429 Eth | $37,138.00 6,792.876 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0203% |
69 | Tapbit | PENDLE-USDT | $5.30 0.0017379 Eth | $28,860.00 5,418.400 PENDLE | 0.0162% |
70 | Velodrome Finance V2 (Optimism) | 0XBC7B1FF1C6989F006A1185318ED4E7B5796E66E1-0X1F32B1C2345538C0C6F582FCB022739C4A194EBB | $5.32 0.0017454 Eth | $26,275.00 4,848.297 0XBC7B1FF1C6989F006A1185318ED4E7B5796E66E1 | 0.0145% |
71 | Uniswap V3 (BSC) | 0XB3ED0A426155B79B898849803E3B36552F7ED507-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $5.29 0.0017347 Eth | $26,050.00 4,863.091 0XB3ED0A426155B79B898849803E3B36552F7ED507 | 0.0145% |
72 | PancakeSwap V3 (Arbitrum) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.32 0.0017436 Eth | $19,529.99 3,566.337 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0106% |
73 | TokoCrypto | PENDLE-USDT | $5.30 0.0017427 Eth | $18,394.02 3,470.580 PENDLE | 0.0103% |
74 | Coinone | PENDLE-KRW | $5.29 0.0017353 Eth | $15,387.25 2,909.325 PENDLE | 0.0087% |
75 | HashKey Global | PENDLE-USDT | $5.32 0.0017449 Eth | $14,901.29 2,798.850 PENDLE | 0.0083% |
76 | Ramses V2 | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.30 0.0017367 Eth | $10,992.65 2,013.826 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0060% |
77 | Sushiswap | 0X808507121B80C02388FAD14726482E061B8DA827-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $5.30 0.0017370 Eth | $9,778.89 1,792.840 0X808507121B80C02388FAD14726482E061B8DA827 | 0.0053% |
78 | Bitlo | PENDLE-TRY | $5.35 0.0017536 Eth | $6,878.37 1,281.694 PENDLE | 0.0038% |
79 | CoinEx | PENDLE-BTC | $5.30 0.0017379 Eth | $6,170.29 1,158.758 PENDLE | 0.0035% |
80 | CoinEx | PENDLE-USDC | $5.30 0.0017371 Eth | $5,095.68 953.813 PENDLE | 0.0028% |
81 | DeltaSwap | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XAF88D065E77C8CC2239327C5EDB3A432268E5831 | $5.32 0.0017434 Eth | $4,613.68 860.882 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0026% |
82 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X2F2A2543B76A4166549F7AAB2E75BEF0AEFC5B0F | $5.29 0.0017378 Eth | $3,085.37 576.354 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0017% |
83 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $5.30 0.0017343 Eth | $2,873.35 527.087 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0016% |
84 | Gate.io | PENDLE-USDC | $5.35 0.0017547 Eth | $2,740.49 514.830 PENDLE | 0.0015% |
85 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XAF88D065E77C8CC2239327C5EDB3A432268E5831 | $5.32 0.0017420 Eth | $1,853.33 344.372 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0010% |
86 | Gate.io | PENDLE-ETH | $5.30 0.0017369 Eth | $1,817.96 333.304 PENDLE | 0.0010% |
87 | Coins.ph | PENDLE-PHP | $5.30 0.0017369 Eth | $1,565.53 291.800 PENDLE | 0.0009% |
88 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X4CB9A7AE498CEDCBB5EAE9F25736AE7D428C9D66 | $5.31 0.0017403 Eth | $1,501.00 270.265 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0008% |
89 | Bittime | PENDLE-IDR | $5.32 0.0017444 Eth | $1,145.07 214.300 PENDLE | 0.0006% |
90 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X6985884C4392D348587B19CB9EAAF157F13271CD | $5.31 0.0017433 Eth | $1,078.48 200.827 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0006% |
91 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XFF970A61A04B1CA14834A43F5DE4533EBDDB5CC8 | $5.30 0.0017351 Eth | $1,034.18 194.081 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0006% |
92 | Uniswap V3 (Ethereum) | 0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48-0X808507121B80C02388FAD14726482E061B8DA827 | $5.29 0.0017329 Eth | $979.02 1,009.669 0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48 | 0.0030% |
93 | Uniswap V3 (Arbitrum One) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0X912CE59144191C1204E64559FE8253A0E49E6548 | $5.32 0.0017427 Eth | $925.67 170.960 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0005% |
94 | WOO X | PENDLE-USDT | $5.30 0.0017380 Eth | $636.74 120.100 PENDLE | 0.0004% |
95 | DeltaSwap | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XFF970A61A04B1CA14834A43F5DE4533EBDDB5CC8 | $5.34 0.0017520 Eth | $402.64 74.897 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0002% |
96 | HonorSwap | 0XB3ED0A426155B79B898849803E3B36552F7ED507-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $5.34 0.0017516 Eth | $269.00 49.900 0XB3ED0A426155B79B898849803E3B36552F7ED507 | 0.0001% |
97 | TokoCrypto | PENDLE-BTC | $5.30 0.0017388 Eth | $259.56 49.006 PENDLE | 0.0001% |
98 | Uniswap V3 (Optimism) | 0XBC7B1FF1C6989F006A1185318ED4E7B5796E66E1-0X4200000000000000000000000000000000000006 | $5.34 0.0017505 Eth | $163.88 30.090 0XBC7B1FF1C6989F006A1185318ED4E7B5796E66E1 | 0.0001% |
99 | Korbit | PENDLE-KRW | $5.36 0.0017588 Eth | $81.90 15.294 PENDLE | 0.0000% |
100 | Uniswap V2 (Arbitrum) | 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8-0XFF970A61A04B1CA14834A43F5DE4533EBDDB5CC8 | $5.34 0.0017509 Eth | $64.23 11.982 0X0C880F6761F1AF8D9AA9C466984B80DAB9A8C9E8 | 0.0000% |
Contract Name:
PENDLE
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Multiple files format)
/* solhint-disable const-name-snakecase*/ // SPDX-License-Identifier: MIT /* * MIT License * =========== * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ pragma solidity 0.7.6; pragma experimental ABIEncoderV2; import "./IPENDLE.sol"; import "./Permissions.sol"; import "./Withdrawable.sol"; import "./SafeMath.sol"; /** * @notice The mechanics for delegating votes to other accounts is adapted from Compound * https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol ***/ contract PENDLE is IPENDLE, Permissions, Withdrawable { using SafeMath for uint256; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } bool public constant override isPendleToken = true; string public constant name = "Pendle"; string public constant symbol = "PENDLE"; uint8 public constant decimals = 18; uint256 public override totalSupply; uint256 private constant TEAM_INVESTOR_ADVISOR_AMOUNT = 94917125 * 1e18; uint256 private constant ECOSYSTEM_FUND_TOKEN_AMOUNT = 46 * 1_000_000 * 1e18; uint256 private constant PUBLIC_SALES_TOKEN_AMOUNT = 16582875 * 1e18; uint256 private constant INITIAL_LIQUIDITY_EMISSION = 1200000 * 1e18; uint256 private constant CONFIG_DENOMINATOR = 1_000_000_000_000; uint256 private constant CONFIG_CHANGES_TIME_LOCK = 7 days; uint256 public override emissionRateMultiplierNumerator; uint256 public override terminalInflationRateNumerator; address public override liquidityIncentivesRecipient; bool public override isBurningAllowed; uint256 public override pendingEmissionRateMultiplierNumerator; uint256 public override pendingTerminalInflationRateNumerator; address public override pendingLiquidityIncentivesRecipient; bool public override pendingIsBurningAllowed; uint256 public override configChangesInitiated; uint256 public override startTime; uint256 public lastWeeklyEmission; uint256 public lastWeekEmissionSent; mapping(address => mapping(address => uint256)) internal allowances; mapping(address => uint256) internal balances; mapping(address => address) public delegates; /// @notice A record of votes checkpoints for each account, by index mapping(address => mapping(uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping(address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping(address => uint256) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged( address indexed delegator, address indexed fromDelegate, address indexed toDelegate ); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged( address indexed delegate, uint256 previousBalance, uint256 newBalance ); event PendingConfigChanges( uint256 pendingEmissionRateMultiplierNumerator, uint256 pendingTerminalInflationRateNumerator, address pendingLiquidityIncentivesRecipient, bool pendingIsBurningAllowed ); event ConfigsChanged( uint256 emissionRateMultiplierNumerator, uint256 terminalInflationRateNumerator, address liquidityIncentivesRecipient, bool isBurningAllowed ); /** * @notice Construct a new PENDLE token */ constructor( address _governance, address pendleTeamTokens, address pendleEcosystemFund, address salesMultisig, address _liquidityIncentivesRecipient ) Permissions(_governance) { require( pendleTeamTokens != address(0) && pendleEcosystemFund != address(0) && salesMultisig != address(0) && _liquidityIncentivesRecipient != address(0), "ZERO_ADDRESS" ); _mint(pendleTeamTokens, TEAM_INVESTOR_ADVISOR_AMOUNT); _mint(pendleEcosystemFund, ECOSYSTEM_FUND_TOKEN_AMOUNT); _mint(salesMultisig, PUBLIC_SALES_TOKEN_AMOUNT); _mint(_liquidityIncentivesRecipient, INITIAL_LIQUIDITY_EMISSION * 26); emissionRateMultiplierNumerator = (CONFIG_DENOMINATOR * 989) / 1000; // emission rate = 98.9% -> 1.1% decay terminalInflationRateNumerator = 379848538; // terminal inflation rate = 2% => weekly inflation = 0.0379848538% liquidityIncentivesRecipient = _liquidityIncentivesRecipient; startTime = block.timestamp; lastWeeklyEmission = INITIAL_LIQUIDITY_EMISSION; lastWeekEmissionSent = 26; // already done liquidity emissions for the first 26 weeks } /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved * @return Whether or not the approval succeeded **/ function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transfer(address dst, uint256 amount) external override returns (bool) { _transfer(msg.sender, dst, amount); return true; } /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transferFrom( address src, address dst, uint256 amount ) external override returns (bool) { _transfer(src, dst, amount); _approve( src, msg.sender, allowances[src][msg.sender].sub(amount, "TRANSFER_EXCEED_ALLOWANCE") ); return true; } /** * @dev Increases the allowance granted to spender by the caller. * @param spender The address to increase the allowance from. * @param addedValue The amount allowance to add. * @return returns true if allowance has increased, otherwise false **/ function increaseAllowance(address spender, uint256 addedValue) public override returns (bool) { _approve(msg.sender, spender, allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Decreases the allowance granted to spender by the caller. * @param spender The address to reduce the allowance from. * @param subtractedValue The amount allowance to subtract. * @return Returns true if allowance has decreased, otherwise false. **/ function decreaseAllowance(address spender, uint256 subtractedValue) public override returns (bool) { _approve( msg.sender, spender, allowances[msg.sender][spender].sub(subtractedValue, "NEGATIVE_ALLOWANCE") ); return true; } /** * @dev Burns an amount of tokens from the msg.sender * @param amount The amount to burn * @return Returns true if the operation is successful **/ function burn(uint256 amount) public override returns (bool) { require(isBurningAllowed, "BURNING_NOT_ALLOWED"); _burn(msg.sender, amount); return true; } /** * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` * @param account The address of the account holding the funds * @param spender The address of the account spending the funds * @return The number of tokens approved **/ function allowance(address account, address spender) external view override returns (uint256) { return allowances[account][spender]; } /** * @notice Get the number of tokens held by the `account` * @param account The address of the account to get the balance of * @return The number of tokens held */ function balanceOf(address account) external view override returns (uint256) { return balances[account]; } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) public { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) public { bytes32 domainSeparator = keccak256( abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)) ); bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "INVALID_SIGNATURE"); require(nonce == nonces[signatory]++, "INVALID_NONCE"); require(block.timestamp <= expiry, "SIGNATURE_EXPIRED"); return _delegate(signatory, delegatee); } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint256 blockNumber) public view override returns (uint256) { require(blockNumber < block.number, "NOT_YET_DETERMINED"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = delegates[delegator]; uint256 delegatorBalance = balances[delegator]; delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _transfer( address src, address dst, uint256 amount ) internal { require(src != address(0), "SENDER_ZERO_ADDR"); require(dst != address(0), "RECEIVER_ZERO_ADDR"); require(dst != address(this), "SEND_TO_TOKEN_CONTRACT"); balances[src] = balances[src].sub(amount, "TRANSFER_EXCEED_BALANCE"); balances[dst] = balances[dst].add(amount); emit Transfer(src, dst, amount); _moveDelegates(delegates[src], delegates[dst], amount); } function _approve( address src, address dst, uint256 amount ) internal virtual { require(src != address(0), "OWNER_ZERO_ADDR"); require(dst != address(0), "SPENDER_ZERO_ADDR"); allowances[src][dst] = amount; emit Approval(src, dst, amount); } function _moveDelegates( address srcRep, address dstRep, uint256 amount ) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "BLOCK_NUM_EXCEED_32_BITS"); if ( nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber ) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } function initiateConfigChanges( uint256 _emissionRateMultiplierNumerator, uint256 _terminalInflationRateNumerator, address _liquidityIncentivesRecipient, bool _isBurningAllowed ) external override onlyGovernance { require(_liquidityIncentivesRecipient != address(0), "ZERO_ADDRESS"); pendingEmissionRateMultiplierNumerator = _emissionRateMultiplierNumerator; pendingTerminalInflationRateNumerator = _terminalInflationRateNumerator; pendingLiquidityIncentivesRecipient = _liquidityIncentivesRecipient; pendingIsBurningAllowed = _isBurningAllowed; emit PendingConfigChanges( _emissionRateMultiplierNumerator, _terminalInflationRateNumerator, _liquidityIncentivesRecipient, _isBurningAllowed ); configChangesInitiated = block.timestamp; } function applyConfigChanges() external override { require(configChangesInitiated != 0, "UNINITIATED_CONFIG_CHANGES"); require( block.timestamp > configChangesInitiated + CONFIG_CHANGES_TIME_LOCK, "TIMELOCK_IS_NOT_OVER" ); _mintLiquidityEmissions(); // We must settle the pending liquidity emissions first, to make sure the weeks in the past follow the old configs emissionRateMultiplierNumerator = pendingEmissionRateMultiplierNumerator; terminalInflationRateNumerator = pendingTerminalInflationRateNumerator; liquidityIncentivesRecipient = pendingLiquidityIncentivesRecipient; isBurningAllowed = pendingIsBurningAllowed; configChangesInitiated = 0; emit ConfigsChanged( emissionRateMultiplierNumerator, terminalInflationRateNumerator, liquidityIncentivesRecipient, isBurningAllowed ); } function claimLiquidityEmissions() external override returns (uint256 totalEmissions) { require(msg.sender == liquidityIncentivesRecipient, "NOT_INCENTIVES_RECIPIENT"); totalEmissions = _mintLiquidityEmissions(); } function _mintLiquidityEmissions() internal returns (uint256 totalEmissions) { uint256 _currentWeek = _getCurrentWeek(); if (_currentWeek <= lastWeekEmissionSent) { return 0; } for (uint256 i = lastWeekEmissionSent + 1; i <= _currentWeek; i++) { if (i <= 259) { lastWeeklyEmission = lastWeeklyEmission.mul(emissionRateMultiplierNumerator).div( CONFIG_DENOMINATOR ); } else { lastWeeklyEmission = totalSupply.mul(terminalInflationRateNumerator).div( CONFIG_DENOMINATOR ); } _mint(liquidityIncentivesRecipient, lastWeeklyEmission); totalEmissions = totalEmissions.add(lastWeeklyEmission); } lastWeekEmissionSent = _currentWeek; } // get current 1-indexed week id function _getCurrentWeek() internal view returns (uint256 weekId) { weekId = (block.timestamp - startTime) / (7 days) + 1; } function _mint(address account, uint256 amount) internal { require(account != address(0), "MINT_TO_ZERO_ADDR"); totalSupply = totalSupply.add(amount); balances[account] = balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal { require(account != address(0), "BURN_FROM_ZERO_ADDRESS"); uint256 accountBalance = balances[account]; require(accountBalance >= amount, "BURN_EXCEED_BALANCE"); balances[account] = accountBalance.sub(amount); totalSupply = totalSupply.sub(amount); emit Transfer(account, address(0), amount); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT /* * MIT License * =========== * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ pragma solidity 0.7.6; import "./IERC20.sol"; interface IPENDLE is IERC20 { function initiateConfigChanges( uint256 _emissionRateMultiplierNumerator, uint256 _terminalInflationRateNumerator, address _liquidityIncentivesRecipient, bool _isBurningAllowed ) external; function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); function burn(uint256 amount) external returns (bool); function applyConfigChanges() external; function claimLiquidityEmissions() external returns (uint256 totalEmissions); function isPendleToken() external view returns (bool); function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256); function startTime() external view returns (uint256); function configChangesInitiated() external view returns (uint256); function emissionRateMultiplierNumerator() external view returns (uint256); function terminalInflationRateNumerator() external view returns (uint256); function liquidityIncentivesRecipient() external view returns (address); function isBurningAllowed() external view returns (bool); function pendingEmissionRateMultiplierNumerator() external view returns (uint256); function pendingTerminalInflationRateNumerator() external view returns (uint256); function pendingLiquidityIncentivesRecipient() external view returns (address); function pendingIsBurningAllowed() external view returns (bool); }
// SPDX-License-Identifier: MIT /* * MIT License * =========== * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ pragma solidity 0.7.6; import "./IERC20.sol"; abstract contract Permissions { address public governance; address public pendingGovernance; address internal initializer; event GovernanceClaimed(address newGovernance, address previousGovernance); event TransferGovernancePending(address pendingGovernance); constructor(address _governance) { require(_governance != address(0), "ZERO_ADDRESS"); initializer = msg.sender; governance = _governance; } modifier initialized() { require(initializer == address(0), "NOT_INITIALIZED"); _; } modifier onlyGovernance() { require(msg.sender == governance, "ONLY_GOVERNANCE"); _; } /** * @dev Allows the pendingGovernance address to finalize the change governance process. */ function claimGovernance() public { require(pendingGovernance == msg.sender, "WRONG_GOVERNANCE"); emit GovernanceClaimed(pendingGovernance, governance); governance = pendingGovernance; pendingGovernance = address(0); } /** * @dev Allows the current governance to set the pendingGovernance address. * @param _governance The address to transfer ownership to. */ function transferGovernance(address _governance) public onlyGovernance { require(_governance != address(0), "ZERO_ADDRESS"); pendingGovernance = _governance; emit TransferGovernancePending(pendingGovernance); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT /* * MIT License * =========== * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ pragma solidity 0.7.6; import "./IERC20.sol"; import "./SafeERC20.sol"; import "./Permissions.sol"; abstract contract Withdrawable is Permissions { using SafeERC20 for IERC20; event EtherWithdraw(uint256 amount, address sendTo); event TokenWithdraw(IERC20 token, uint256 amount, address sendTo); /** * @dev Allows governance to withdraw Ether in a Pendle contract * in case of accidental ETH transfer into the contract. * @param amount The amount of Ether to withdraw. * @param sendTo The recipient address. */ function withdrawEther(uint256 amount, address payable sendTo) external onlyGovernance { (bool success, ) = sendTo.call{value: amount}(""); require(success, "WITHDRAW_FAILED"); emit EtherWithdraw(amount, sendTo); } /** * @dev Allows governance to withdraw all IERC20 compatible tokens in a Pendle * contract in case of accidental token transfer into the contract. * @param token IERC20 The address of the token contract. * @param amount The amount of IERC20 tokens to withdraw. * @param sendTo The recipient address. */ function withdrawToken( IERC20 token, uint256 amount, address sendTo ) external onlyGovernance { token.safeTransfer(sendTo, amount); emit TokenWithdraw(token, amount, sendTo); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"pendleTeamTokens","type":"address"},{"internalType":"address","name":"pendleEcosystemFund","type":"address"},{"internalType":"address","name":"salesMultisig","type":"address"},{"internalType":"address","name":"_liquidityIncentivesRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"emissionRateMultiplierNumerator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"terminalInflationRateNumerator","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidityIncentivesRecipient","type":"address"},{"indexed":false,"internalType":"bool","name":"isBurningAllowed","type":"bool"}],"name":"ConfigsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newGovernance","type":"address"},{"indexed":false,"internalType":"address","name":"previousGovernance","type":"address"}],"name":"GovernanceClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pendingEmissionRateMultiplierNumerator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pendingTerminalInflationRateNumerator","type":"uint256"},{"indexed":false,"internalType":"address","name":"pendingLiquidityIncentivesRecipient","type":"address"},{"indexed":false,"internalType":"bool","name":"pendingIsBurningAllowed","type":"bool"}],"name":"PendingConfigChanges","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingGovernance","type":"address"}],"name":"TransferGovernancePending","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyConfigChanges","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLiquidityEmissions","outputs":[{"internalType":"uint256","name":"totalEmissions","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"configChangesInitiated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emissionRateMultiplierNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_emissionRateMultiplierNumerator","type":"uint256"},{"internalType":"uint256","name":"_terminalInflationRateNumerator","type":"uint256"},{"internalType":"address","name":"_liquidityIncentivesRecipient","type":"address"},{"internalType":"bool","name":"_isBurningAllowed","type":"bool"}],"name":"initiateConfigChanges","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBurningAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPendleToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastWeekEmissionSent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastWeeklyEmission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityIncentivesRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingEmissionRateMultiplierNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingIsBurningAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingLiquidityIncentivesRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTerminalInflationRateNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terminalInflationRateNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002acf38038062002acf83398101604081905262000034916200031f565b846001600160a01b03811662000080576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b60028054336001600160a01b031991821617909155600080549091166001600160a01b03928316179055841615801590620000c357506001600160a01b03831615155b8015620000d857506001600160a01b03821615155b8015620000ed57506001600160a01b03811615155b620001155760405162461bcd60e51b81526004016200010c906200038e565b60405180910390fd5b6200012c846a4e837ba813eac04cf40000620001c9565b62000143836a260ce0ff28d2b2ee000000620001c9565b6200015a826a0db78f747e56bf528c0000620001c9565b62000171816a19cedb639a935c6c000000620001c9565b6103e86603837d81aed000046004556316a4075a600555600680546001600160a01b0319166001600160a01b0392909216919091179055505042600b55505069fe1c215e8f838e000000600c55601a600d55620003e8565b6001600160a01b038216620001f25760405162461bcd60e51b81526004016200010c90620003b4565b6200020e81600354620002a060201b620012971790919060201c565b6003556001600160a01b0382166000908152600f60209081526040909120546200024391839062001297620002a0821b17901c565b6001600160a01b0383166000818152600f60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000294908590620003df565b60405180910390a35050565b600082820183811015620002fb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b80516001600160a01b03811681146200031a57600080fd5b919050565b600080600080600060a0868803121562000337578081fd5b620003428662000302565b9450620003526020870162000302565b9350620003626040870162000302565b9250620003726060870162000302565b9150620003826080870162000302565b90509295509295909350565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526011908201527026a4a72a2faa27afad22a927afa0a2222960791b604082015260600190565b90815260200190565b6126d780620003f86000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806370a0823111610151578063ce56c454116100c3578063e76af32e11610087578063e76af32e146104d3578063e7a324dc146104db578063ee87ab6b146104e3578063f1127ed8146104eb578063f39c38a01461050c578063ff552d771461051457610274565b8063ce56c4541461048a578063d38bfff41461049d578063dc23b265146104b0578063dd62ed3e146104b8578063e4a1ecb6146104cb57610274565b806395d89b411161011557806395d89b4114610423578063a457c2d71461042b578063a9059cbb1461043e578063acff6f7914610451578063b4b5ea5714610464578063c3cda5201461047757610274565b806370a08231146103da578063782d6fe1146103ed57806378e97925146104005780637ecebe0014610408578063924a23b41461041b57610274565b806339509351116101ea578063587cde1e116101ae578063587cde1e1461037c5780635aa6e6751461038f5780635c19a95c146103975780635d36b190146103aa5780635d587aea146103b25780636fcfff45146103ba57610274565b806339509351146103315780633ccdbb28146103445780634245a5801461035957806342966c68146103615780634cde84361461037457610274565b806320606b701161023c57806320606b70146102dc57806322d7bf8d146102e457806323b872dd146102ec5780632fac9cca146102ff578063313ce5671461031457806332c9c8341461032957610274565b806306fdde0314610279578063095ea7b3146102975780630d7a1c62146102b757806318160ddd146102cc5780631cb6a0e8146102d4575b600080fd5b61028161051c565b60405161028e9190612265565b60405180910390f35b6102aa6102a5366004612032565b61053e565b60405161028e91906121eb565b6102bf610555565b60405161028e91906121f6565b6102bf61055b565b6102bf610561565b6102bf610567565b6102bf61058b565b6102aa6102fa366004611ff2565b610591565b610307610619565b60405161028e91906121d7565b61031c610628565b60405161028e919061260d565b6102bf61062d565b6102aa61033f366004612032565b610633565b6103576103523660046120f2565b610669565b005b61035761071d565b6102aa61036f366004612133565b610810565b6102aa61084e565b61030761038a366004611f9e565b61085e565b610307610879565b6103576103a5366004611f9e565b610888565b610357610895565b6102bf61095a565b6103cd6103c8366004611f9e565b610994565b60405161028e91906125e6565b6102bf6103e8366004611f9e565b6109ac565b6102bf6103fb366004612032565b6109c7565b6102bf610bab565b6102bf610416366004611f9e565b610bb1565b6102aa610bc3565b610281610bc8565b6102aa610439366004612032565b610bea565b6102aa61044c366004612032565b610c4c565b61035761045f36600461216f565b610c59565b6102bf610472366004611f9e565b610d4e565b61035761048536600461205d565b610db1565b61035761049836600461214b565b610fb5565b6103576104ab366004611f9e565b6110e6565b6102bf6111db565b6102bf6104c6366004611fba565b6111e1565b6102bf61120c565b6102aa611212565b6102bf611222565b6102bf611246565b6104fe6104f93660046120bd565b61124c565b60405161028e9291906125f7565b610307611279565b610307611288565b6040518060400160405280600681526020016550656e646c6560d01b81525081565b600061054b3384846112f1565b5060015b92915050565b600d5481565b60035481565b60085481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60045481565b600061059e8484846113a5565b604080518082018252601981527f5452414e534645525f4558434545445f414c4c4f57414e4345000000000000006020808301919091526001600160a01b0387166000908152600e8252838120338083529252929092205461060e9287929091610609918790611535565b6112f1565b5060015b9392505050565b6009546001600160a01b031681565b601281565b600c5481565b336000818152600e602090815260408083206001600160a01b0387168452909152812054909161054b9185906106099086611297565b6000546001600160a01b031633146106ba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6106ce6001600160a01b03841682846115cc565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600a546107455760405162461bcd60e51b815260040161073c90612365565b60405180910390fd5b62093a80600a5401421161076b5760405162461bcd60e51b815260040161073c9061239c565b61077361161e565b50600754600481905560085460058190556009546006805460ff600160a01b80850482161515810260ff60a01b196001600160a01b03199094166001600160a01b03968716179390931692909217928390556000600a556040517f83564c1102f308ae821e2b1d74b5cafae42f89d7b2c57a73ad01810469fb2c99966108069690959094908116939004909116906125c0565b60405180910390a1565b600654600090600160a01b900460ff1661083c5760405162461bcd60e51b815260040161073c906123ca565b61084633836116e0565b506001919050565b600954600160a01b900460ff1681565b6010602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b61089233826117b0565b50565b6001546001600160a01b031633146108e7576040805162461bcd60e51b815260206004820152601060248201526f57524f4e475f474f5645524e414e434560801b604482015290519081900360640190fd5b600154600054604080516001600160a01b03938416815292909116602083015280517fb0758afd6736a6cb3153d002696dcdd7615f1ff7c626469b3daf3358286c1c249281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6006546000906001600160a01b031633146109875760405162461bcd60e51b815260040161073c906123f7565b61098f61161e565b905090565b60126020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600f602052604090205490565b60004382106109e85760405162461bcd60e51b815260040161073c906122e5565b6001600160a01b03831660009081526012602052604090205463ffffffff1680610a1657600091505061054f565b6001600160a01b038416600090815260116020908152604080832063ffffffff600019860181168552925290912054168310610a85576001600160a01b03841660009081526011602090815260408083206000199490940163ffffffff1683529290522060010154905061054f565b6001600160a01b038416600090815260116020908152604080832083805290915290205463ffffffff16831015610ac057600091505061054f565b600060001982015b8163ffffffff168163ffffffff161115610b74576000600263ffffffff848403166001600160a01b038916600090815260116020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452805490941680845260019094015490830152925090871415610b4f5760200151945061054f9350505050565b805163ffffffff16871115610b6657819350610b6d565b6001820392505b5050610ac8565b506001600160a01b038516600090815260116020908152604080832063ffffffff9094168352929052206001015491505092915050565b600b5481565b60136020526000908152604090205481565b600181565b6040518060400160405280600681526020016550454e444c4560d01b81525081565b60408051808201825260128152714e454741544956455f414c4c4f57414e434560701b602080830191909152336000818152600e83528481206001600160a01b038816825290925292812054909261054b929091869161060991908790611535565b600061054b3384846113a5565b6000546001600160a01b03163314610caa576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6001600160a01b038216610cd05760405162461bcd60e51b815260040161073c90612484565b60078490556008839055600980546001600160a01b0319166001600160a01b0384161760ff60a01b1916600160a01b831515021790556040517f01c0ca0e9ae895c3d36eca6824cc5bd60faa1048833ef3014f522ee5f1b2397090610d3c9086908690869086906125c0565b60405180910390a1505042600a555050565b6001600160a01b03811660009081526012602052604081205463ffffffff1680610d79576000610612565b6001600160a01b038316600090815260116020908152604080832063ffffffff60001986011684529091529020600101549392505050565b60408051808201909152600681526550656e646c6560d01b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fff2cde021cdee1d25b48654d14cc97c50a36ce29f880cb7d517933c7a82da0cf610e1b611830565b30604051602001610e2f9493929190612223565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610e8094939291906121ff565b60405160208183030381529060405280519060200120905060008282604051602001610ead9291906121bc565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610eea9493929190612247565b6020604051602081039080840390855afa158015610f0c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f3f5760405162461bcd60e51b815260040161073c9061242e565b6001600160a01b03811660009081526013602052604090208054600181019091558914610f7e5760405162461bcd60e51b815260040161073c9061252b565b87421115610f9e5760405162461bcd60e51b815260040161073c90612459565b610fa8818b6117b0565b505050505b505050505050565b6000546001600160a01b03163314611006576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611051576040519150601f19603f3d011682016040523d82523d6000602084013e611056565b606091505b505090508061109e576040805162461bcd60e51b815260206004820152600f60248201526e15d2551211149055d7d19052531151608a1b604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6000546001600160a01b03163314611137576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6001600160a01b038116611181576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f70f2dff90d8145da945114cc37c5ffde0eef9306ad5efbd39cae52dc28f9cbf3916020908290030190a150565b60055481565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b60075481565b600654600160a01b900460ff1681565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a5481565b60116020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6001546001600160a01b031681565b6006546001600160a01b031681565b600082820183811015610612576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166113175760405162461bcd60e51b815260040161073c90612311565b6001600160a01b03821661133d5760405162461bcd60e51b815260040161073c9061233a565b6001600160a01b038084166000818152600e602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906113989085906121f6565b60405180910390a3505050565b6001600160a01b0383166113cb5760405162461bcd60e51b815260040161073c906124aa565b6001600160a01b0382166113f15760405162461bcd60e51b815260040161073c906124d4565b6001600160a01b03821630141561141a5760405162461bcd60e51b815260040161073c90612582565b604080518082018252601781527f5452414e534645525f4558434545445f42414c414e43450000000000000000006020808301919091526001600160a01b0386166000908152600f9091529190912054611475918390611535565b6001600160a01b038085166000908152600f602052604080822093909355908416815220546114a49082611297565b6001600160a01b038084166000818152600f602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114f69085906121f6565b60405180910390a36001600160a01b0380841660009081526010602052604080822054858416835291205461153092918216911683611834565b505050565b600081848411156115c45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611589578181015183820152602001611571565b50505050905090810190601f1680156115b65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611530908490611971565b600080611629611a22565b9050600d54811161163e5760009150506116dd565b600d546001015b8181116116d85761010381116116835761167b64e8d4a51000611675600454600c54611a3d90919063ffffffff16565b90611a96565b600c556116a7565b6116a364e8d4a51000611675600554600354611a3d90919063ffffffff16565b600c555b600654600c546116c0916001600160a01b031690611afd565b600c546116ce908490611297565b9250600101611645565b50600d555b90565b6001600160a01b0382166117065760405162461bcd60e51b815260040161073c90612552565b6001600160a01b0382166000908152600f60205260409020548181101561173f5760405162461bcd60e51b815260040161073c906122b8565b6117498183611bb1565b6001600160a01b0384166000908152600f602052604090205560035461176f9083611bb1565b6003556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113989086906121f6565b6001600160a01b0380831660008181526010602081815260408084208054600f845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461182a828483611834565b50505050565b4690565b816001600160a01b0316836001600160a01b0316141580156118565750600081115b15611530576001600160a01b038316156118e8576001600160a01b03831660009081526012602052604081205463ffffffff1690816118965760006118c8565b6001600160a01b038516600090815260116020908152604080832063ffffffff60001987011684529091529020600101545b905060006118d68285611bb1565b90506118e486848484611c0e565b5050505b6001600160a01b03821615611530576001600160a01b03821660009081526012602052604081205463ffffffff169081611923576000611955565b6001600160a01b038416600090815260116020908152604080832063ffffffff60001987011684529091529020600101545b905060006119638285611297565b9050610fad85848484611c0e565b60006119c6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d909092919063ffffffff16565b805190915015611530578080602001905160208110156119e557600080fd5b50516115305760405162461bcd60e51b815260040180806020018281038252602a815260200180612678602a913960400191505060405180910390fd5b600062093a80600b54420381611a3457fe5b04600101905090565b600082611a4c5750600061054f565b82820282848281611a5957fe5b04146106125760405162461bcd60e51b81526004018080602001828103825260218152602001806126576021913960400191505060405180910390fd5b6000808211611aec576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611af557fe5b049392505050565b6001600160a01b038216611b235760405162461bcd60e51b815260040161073c90612500565b600354611b309082611297565b6003556001600160a01b0382166000908152600f6020526040902054611b569082611297565b6001600160a01b0383166000818152600f60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ba59085906121f6565b60405180910390a35050565b600082821115611c08576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611c4f436040518060400160405280601881526020017f424c4f434b5f4e554d5f4558434545445f33325f424954530000000000000000815250611da7565b905060008463ffffffff16118015611c9857506001600160a01b038516600090815260116020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611cd5576001600160a01b038516600090815260116020908152604080832063ffffffff60001989011684529091529020600101829055611d46565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152601184528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260129092529390208054928801909116919092161790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611d819291906125b2565b60405180910390a25050505050565b6060611d9f8484600085611dd7565b949350505050565b6000816401000000008410611dcf5760405162461bcd60e51b815260040161073c9190612265565b509192915050565b606082471015611e185760405162461bcd60e51b81526004018080602001828103825260268152602001806126316026913960400191505060405180910390fd5b611e2185611f32565b611e72576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611eb05780518252601f199092019160209182019101611e91565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b5091509150611f27828286611f38565b979650505050505050565b3b151590565b60608315611f47575081610612565b825115611f575782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315611589578181015183820152602001611571565b600060208284031215611faf578081fd5b81356106128161261b565b60008060408385031215611fcc578081fd5b8235611fd78161261b565b91506020830135611fe78161261b565b809150509250929050565b600080600060608486031215612006578081fd5b83356120118161261b565b925060208401356120218161261b565b929592945050506040919091013590565b60008060408385031215612044578182fd5b823561204f8161261b565b946020939093013593505050565b60008060008060008060c08789031215612075578182fd5b86356120808161261b565b95506020870135945060408701359350606087013560ff811681146120a3578283fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156120cf578182fd5b82356120da8161261b565b9150602083013563ffffffff81168114611fe7578182fd5b600080600060608486031215612106578283fd5b83356121118161261b565b92506020840135915060408401356121288161261b565b809150509250925092565b600060208284031215612144578081fd5b5035919050565b6000806040838503121561215d578182fd5b823591506020830135611fe78161261b565b60008060008060808587031215612184578384fd5b8435935060208501359250604085013561219d8161261b565b9150606085013580151581146121b1578182fd5b939692955090935050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561229157858101830151858201604001528201612275565b818111156122a25783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601390820152724255524e5f4558434545445f42414c414e434560681b604082015260600190565b6020808252601290820152711393d517d6515517d111551154935253915160721b604082015260600190565b6020808252600f908201526e27aba722a92fad22a927afa0a2222960891b604082015260600190565b60208082526011908201527029a822a72222a92fad22a927afa0a2222960791b604082015260600190565b6020808252601a908201527f554e494e495449415445445f434f4e4649475f4348414e474553000000000000604082015260600190565b6020808252601490820152732a24a6a2a627a1a5afa4a9afa727aa2fa7ab22a960611b604082015260600190565b60208082526013908201527210955493925391d7d393d517d0531313d5d151606a1b604082015260600190565b60208082526018908201527f4e4f545f494e43454e54495645535f524543495049454e540000000000000000604082015260600190565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b60208082526011908201527014d251d3905515549157d1561412549151607a1b604082015260600190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526010908201526f29a2a72222a92fad22a927afa0a2222960811b604082015260600190565b6020808252601290820152712922a1a2a4ab22a92fad22a927afa0a2222960711b604082015260600190565b60208082526011908201527026a4a72a2faa27afad22a927afa0a2222960791b604082015260600190565b6020808252600d908201526c494e56414c49445f4e4f4e434560981b604082015260600190565b6020808252601690820152754255524e5f46524f4d5f5a45524f5f4144445245535360501b604082015260600190565b60208082526016908201527514d1539117d513d7d513d2d15397d0d3d395149050d560521b604082015260600190565b918252602082015260400190565b93845260208401929092526001600160a01b031660408301521515606082015260800190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b6001600160a01b038116811461089257600080fdfe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d8df1688edf4bda330bf2e85c9b60e22ce80bd863ff001bd2cc00635fc238b8f64736f6c634300070600330000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee10000000000000000000000008849d0d4c35679aa78df1b5b4ceca358d57635df000000000000000000000000c21a74c7150fed22c7ca0bf9a15bbe0ddb4977cc0000000000000000000000009b26afff63e4139cb5a3ea9955903ffffcc1d79b000000000000000000000000e8d28e2ca24bb16fc7e6549ef937e05981d02606
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102745760003560e01c806370a0823111610151578063ce56c454116100c3578063e76af32e11610087578063e76af32e146104d3578063e7a324dc146104db578063ee87ab6b146104e3578063f1127ed8146104eb578063f39c38a01461050c578063ff552d771461051457610274565b8063ce56c4541461048a578063d38bfff41461049d578063dc23b265146104b0578063dd62ed3e146104b8578063e4a1ecb6146104cb57610274565b806395d89b411161011557806395d89b4114610423578063a457c2d71461042b578063a9059cbb1461043e578063acff6f7914610451578063b4b5ea5714610464578063c3cda5201461047757610274565b806370a08231146103da578063782d6fe1146103ed57806378e97925146104005780637ecebe0014610408578063924a23b41461041b57610274565b806339509351116101ea578063587cde1e116101ae578063587cde1e1461037c5780635aa6e6751461038f5780635c19a95c146103975780635d36b190146103aa5780635d587aea146103b25780636fcfff45146103ba57610274565b806339509351146103315780633ccdbb28146103445780634245a5801461035957806342966c68146103615780634cde84361461037457610274565b806320606b701161023c57806320606b70146102dc57806322d7bf8d146102e457806323b872dd146102ec5780632fac9cca146102ff578063313ce5671461031457806332c9c8341461032957610274565b806306fdde0314610279578063095ea7b3146102975780630d7a1c62146102b757806318160ddd146102cc5780631cb6a0e8146102d4575b600080fd5b61028161051c565b60405161028e9190612265565b60405180910390f35b6102aa6102a5366004612032565b61053e565b60405161028e91906121eb565b6102bf610555565b60405161028e91906121f6565b6102bf61055b565b6102bf610561565b6102bf610567565b6102bf61058b565b6102aa6102fa366004611ff2565b610591565b610307610619565b60405161028e91906121d7565b61031c610628565b60405161028e919061260d565b6102bf61062d565b6102aa61033f366004612032565b610633565b6103576103523660046120f2565b610669565b005b61035761071d565b6102aa61036f366004612133565b610810565b6102aa61084e565b61030761038a366004611f9e565b61085e565b610307610879565b6103576103a5366004611f9e565b610888565b610357610895565b6102bf61095a565b6103cd6103c8366004611f9e565b610994565b60405161028e91906125e6565b6102bf6103e8366004611f9e565b6109ac565b6102bf6103fb366004612032565b6109c7565b6102bf610bab565b6102bf610416366004611f9e565b610bb1565b6102aa610bc3565b610281610bc8565b6102aa610439366004612032565b610bea565b6102aa61044c366004612032565b610c4c565b61035761045f36600461216f565b610c59565b6102bf610472366004611f9e565b610d4e565b61035761048536600461205d565b610db1565b61035761049836600461214b565b610fb5565b6103576104ab366004611f9e565b6110e6565b6102bf6111db565b6102bf6104c6366004611fba565b6111e1565b6102bf61120c565b6102aa611212565b6102bf611222565b6102bf611246565b6104fe6104f93660046120bd565b61124c565b60405161028e9291906125f7565b610307611279565b610307611288565b6040518060400160405280600681526020016550656e646c6560d01b81525081565b600061054b3384846112f1565b5060015b92915050565b600d5481565b60035481565b60085481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60045481565b600061059e8484846113a5565b604080518082018252601981527f5452414e534645525f4558434545445f414c4c4f57414e4345000000000000006020808301919091526001600160a01b0387166000908152600e8252838120338083529252929092205461060e9287929091610609918790611535565b6112f1565b5060015b9392505050565b6009546001600160a01b031681565b601281565b600c5481565b336000818152600e602090815260408083206001600160a01b0387168452909152812054909161054b9185906106099086611297565b6000546001600160a01b031633146106ba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6106ce6001600160a01b03841682846115cc565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600a546107455760405162461bcd60e51b815260040161073c90612365565b60405180910390fd5b62093a80600a5401421161076b5760405162461bcd60e51b815260040161073c9061239c565b61077361161e565b50600754600481905560085460058190556009546006805460ff600160a01b80850482161515810260ff60a01b196001600160a01b03199094166001600160a01b03968716179390931692909217928390556000600a556040517f83564c1102f308ae821e2b1d74b5cafae42f89d7b2c57a73ad01810469fb2c99966108069690959094908116939004909116906125c0565b60405180910390a1565b600654600090600160a01b900460ff1661083c5760405162461bcd60e51b815260040161073c906123ca565b61084633836116e0565b506001919050565b600954600160a01b900460ff1681565b6010602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b61089233826117b0565b50565b6001546001600160a01b031633146108e7576040805162461bcd60e51b815260206004820152601060248201526f57524f4e475f474f5645524e414e434560801b604482015290519081900360640190fd5b600154600054604080516001600160a01b03938416815292909116602083015280517fb0758afd6736a6cb3153d002696dcdd7615f1ff7c626469b3daf3358286c1c249281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6006546000906001600160a01b031633146109875760405162461bcd60e51b815260040161073c906123f7565b61098f61161e565b905090565b60126020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600f602052604090205490565b60004382106109e85760405162461bcd60e51b815260040161073c906122e5565b6001600160a01b03831660009081526012602052604090205463ffffffff1680610a1657600091505061054f565b6001600160a01b038416600090815260116020908152604080832063ffffffff600019860181168552925290912054168310610a85576001600160a01b03841660009081526011602090815260408083206000199490940163ffffffff1683529290522060010154905061054f565b6001600160a01b038416600090815260116020908152604080832083805290915290205463ffffffff16831015610ac057600091505061054f565b600060001982015b8163ffffffff168163ffffffff161115610b74576000600263ffffffff848403166001600160a01b038916600090815260116020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452805490941680845260019094015490830152925090871415610b4f5760200151945061054f9350505050565b805163ffffffff16871115610b6657819350610b6d565b6001820392505b5050610ac8565b506001600160a01b038516600090815260116020908152604080832063ffffffff9094168352929052206001015491505092915050565b600b5481565b60136020526000908152604090205481565b600181565b6040518060400160405280600681526020016550454e444c4560d01b81525081565b60408051808201825260128152714e454741544956455f414c4c4f57414e434560701b602080830191909152336000818152600e83528481206001600160a01b038816825290925292812054909261054b929091869161060991908790611535565b600061054b3384846113a5565b6000546001600160a01b03163314610caa576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6001600160a01b038216610cd05760405162461bcd60e51b815260040161073c90612484565b60078490556008839055600980546001600160a01b0319166001600160a01b0384161760ff60a01b1916600160a01b831515021790556040517f01c0ca0e9ae895c3d36eca6824cc5bd60faa1048833ef3014f522ee5f1b2397090610d3c9086908690869086906125c0565b60405180910390a1505042600a555050565b6001600160a01b03811660009081526012602052604081205463ffffffff1680610d79576000610612565b6001600160a01b038316600090815260116020908152604080832063ffffffff60001986011684529091529020600101549392505050565b60408051808201909152600681526550656e646c6560d01b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fff2cde021cdee1d25b48654d14cc97c50a36ce29f880cb7d517933c7a82da0cf610e1b611830565b30604051602001610e2f9493929190612223565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610e8094939291906121ff565b60405160208183030381529060405280519060200120905060008282604051602001610ead9291906121bc565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610eea9493929190612247565b6020604051602081039080840390855afa158015610f0c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f3f5760405162461bcd60e51b815260040161073c9061242e565b6001600160a01b03811660009081526013602052604090208054600181019091558914610f7e5760405162461bcd60e51b815260040161073c9061252b565b87421115610f9e5760405162461bcd60e51b815260040161073c90612459565b610fa8818b6117b0565b505050505b505050505050565b6000546001600160a01b03163314611006576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611051576040519150601f19603f3d011682016040523d82523d6000602084013e611056565b606091505b505090508061109e576040805162461bcd60e51b815260206004820152600f60248201526e15d2551211149055d7d19052531151608a1b604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6000546001600160a01b03163314611137576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6001600160a01b038116611181576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f70f2dff90d8145da945114cc37c5ffde0eef9306ad5efbd39cae52dc28f9cbf3916020908290030190a150565b60055481565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b60075481565b600654600160a01b900460ff1681565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a5481565b60116020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6001546001600160a01b031681565b6006546001600160a01b031681565b600082820183811015610612576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166113175760405162461bcd60e51b815260040161073c90612311565b6001600160a01b03821661133d5760405162461bcd60e51b815260040161073c9061233a565b6001600160a01b038084166000818152600e602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906113989085906121f6565b60405180910390a3505050565b6001600160a01b0383166113cb5760405162461bcd60e51b815260040161073c906124aa565b6001600160a01b0382166113f15760405162461bcd60e51b815260040161073c906124d4565b6001600160a01b03821630141561141a5760405162461bcd60e51b815260040161073c90612582565b604080518082018252601781527f5452414e534645525f4558434545445f42414c414e43450000000000000000006020808301919091526001600160a01b0386166000908152600f9091529190912054611475918390611535565b6001600160a01b038085166000908152600f602052604080822093909355908416815220546114a49082611297565b6001600160a01b038084166000818152600f602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114f69085906121f6565b60405180910390a36001600160a01b0380841660009081526010602052604080822054858416835291205461153092918216911683611834565b505050565b600081848411156115c45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611589578181015183820152602001611571565b50505050905090810190601f1680156115b65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611530908490611971565b600080611629611a22565b9050600d54811161163e5760009150506116dd565b600d546001015b8181116116d85761010381116116835761167b64e8d4a51000611675600454600c54611a3d90919063ffffffff16565b90611a96565b600c556116a7565b6116a364e8d4a51000611675600554600354611a3d90919063ffffffff16565b600c555b600654600c546116c0916001600160a01b031690611afd565b600c546116ce908490611297565b9250600101611645565b50600d555b90565b6001600160a01b0382166117065760405162461bcd60e51b815260040161073c90612552565b6001600160a01b0382166000908152600f60205260409020548181101561173f5760405162461bcd60e51b815260040161073c906122b8565b6117498183611bb1565b6001600160a01b0384166000908152600f602052604090205560035461176f9083611bb1565b6003556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113989086906121f6565b6001600160a01b0380831660008181526010602081815260408084208054600f845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461182a828483611834565b50505050565b4690565b816001600160a01b0316836001600160a01b0316141580156118565750600081115b15611530576001600160a01b038316156118e8576001600160a01b03831660009081526012602052604081205463ffffffff1690816118965760006118c8565b6001600160a01b038516600090815260116020908152604080832063ffffffff60001987011684529091529020600101545b905060006118d68285611bb1565b90506118e486848484611c0e565b5050505b6001600160a01b03821615611530576001600160a01b03821660009081526012602052604081205463ffffffff169081611923576000611955565b6001600160a01b038416600090815260116020908152604080832063ffffffff60001987011684529091529020600101545b905060006119638285611297565b9050610fad85848484611c0e565b60006119c6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d909092919063ffffffff16565b805190915015611530578080602001905160208110156119e557600080fd5b50516115305760405162461bcd60e51b815260040180806020018281038252602a815260200180612678602a913960400191505060405180910390fd5b600062093a80600b54420381611a3457fe5b04600101905090565b600082611a4c5750600061054f565b82820282848281611a5957fe5b04146106125760405162461bcd60e51b81526004018080602001828103825260218152602001806126576021913960400191505060405180910390fd5b6000808211611aec576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611af557fe5b049392505050565b6001600160a01b038216611b235760405162461bcd60e51b815260040161073c90612500565b600354611b309082611297565b6003556001600160a01b0382166000908152600f6020526040902054611b569082611297565b6001600160a01b0383166000818152600f60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ba59085906121f6565b60405180910390a35050565b600082821115611c08576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611c4f436040518060400160405280601881526020017f424c4f434b5f4e554d5f4558434545445f33325f424954530000000000000000815250611da7565b905060008463ffffffff16118015611c9857506001600160a01b038516600090815260116020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611cd5576001600160a01b038516600090815260116020908152604080832063ffffffff60001989011684529091529020600101829055611d46565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152601184528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260129092529390208054928801909116919092161790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611d819291906125b2565b60405180910390a25050505050565b6060611d9f8484600085611dd7565b949350505050565b6000816401000000008410611dcf5760405162461bcd60e51b815260040161073c9190612265565b509192915050565b606082471015611e185760405162461bcd60e51b81526004018080602001828103825260268152602001806126316026913960400191505060405180910390fd5b611e2185611f32565b611e72576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611eb05780518252601f199092019160209182019101611e91565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b5091509150611f27828286611f38565b979650505050505050565b3b151590565b60608315611f47575081610612565b825115611f575782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315611589578181015183820152602001611571565b600060208284031215611faf578081fd5b81356106128161261b565b60008060408385031215611fcc578081fd5b8235611fd78161261b565b91506020830135611fe78161261b565b809150509250929050565b600080600060608486031215612006578081fd5b83356120118161261b565b925060208401356120218161261b565b929592945050506040919091013590565b60008060408385031215612044578182fd5b823561204f8161261b565b946020939093013593505050565b60008060008060008060c08789031215612075578182fd5b86356120808161261b565b95506020870135945060408701359350606087013560ff811681146120a3578283fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156120cf578182fd5b82356120da8161261b565b9150602083013563ffffffff81168114611fe7578182fd5b600080600060608486031215612106578283fd5b83356121118161261b565b92506020840135915060408401356121288161261b565b809150509250925092565b600060208284031215612144578081fd5b5035919050565b6000806040838503121561215d578182fd5b823591506020830135611fe78161261b565b60008060008060808587031215612184578384fd5b8435935060208501359250604085013561219d8161261b565b9150606085013580151581146121b1578182fd5b939692955090935050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561229157858101830151858201604001528201612275565b818111156122a25783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601390820152724255524e5f4558434545445f42414c414e434560681b604082015260600190565b6020808252601290820152711393d517d6515517d111551154935253915160721b604082015260600190565b6020808252600f908201526e27aba722a92fad22a927afa0a2222960891b604082015260600190565b60208082526011908201527029a822a72222a92fad22a927afa0a2222960791b604082015260600190565b6020808252601a908201527f554e494e495449415445445f434f4e4649475f4348414e474553000000000000604082015260600190565b6020808252601490820152732a24a6a2a627a1a5afa4a9afa727aa2fa7ab22a960611b604082015260600190565b60208082526013908201527210955493925391d7d393d517d0531313d5d151606a1b604082015260600190565b60208082526018908201527f4e4f545f494e43454e54495645535f524543495049454e540000000000000000604082015260600190565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b60208082526011908201527014d251d3905515549157d1561412549151607a1b604082015260600190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526010908201526f29a2a72222a92fad22a927afa0a2222960811b604082015260600190565b6020808252601290820152712922a1a2a4ab22a92fad22a927afa0a2222960711b604082015260600190565b60208082526011908201527026a4a72a2faa27afad22a927afa0a2222960791b604082015260600190565b6020808252600d908201526c494e56414c49445f4e4f4e434560981b604082015260600190565b6020808252601690820152754255524e5f46524f4d5f5a45524f5f4144445245535360501b604082015260600190565b60208082526016908201527514d1539117d513d7d513d2d15397d0d3d395149050d560521b604082015260600190565b918252602082015260400190565b93845260208401929092526001600160a01b031660408301521515606082015260800190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b6001600160a01b038116811461089257600080fdfe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d8df1688edf4bda330bf2e85c9b60e22ce80bd863ff001bd2cc00635fc238b8f64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee10000000000000000000000008849d0d4c35679aa78df1b5b4ceca358d57635df000000000000000000000000c21a74c7150fed22c7ca0bf9a15bbe0ddb4977cc0000000000000000000000009b26afff63e4139cb5a3ea9955903ffffcc1d79b000000000000000000000000e8d28e2ca24bb16fc7e6549ef937e05981d02606
-----Decoded View---------------
Arg [0] : _governance (address): 0x8119EC16F0573B7dAc7C0CB94EB504FB32456ee1
Arg [1] : pendleTeamTokens (address): 0x8849d0d4c35679aA78Df1b5B4CecA358d57635dF
Arg [2] : pendleEcosystemFund (address): 0xc21A74c7150fed22C7CA0Bf9A15BBe0DdB4977CC
Arg [3] : salesMultisig (address): 0x9B26AFff63E4139cb5a3Ea9955903ffffcC1D79b
Arg [4] : _liquidityIncentivesRecipient (address): 0xe8D28E2CA24BB16Fc7e6549eF937e05981d02606
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1
Arg [1] : 0000000000000000000000008849d0d4c35679aa78df1b5b4ceca358d57635df
Arg [2] : 000000000000000000000000c21a74c7150fed22c7ca0bf9a15bbe0ddb4977cc
Arg [3] : 0000000000000000000000009b26afff63e4139cb5a3ea9955903ffffcc1d79b
Arg [4] : 000000000000000000000000e8d28e2ca24bb16fc7e6549ef937e05981d02606
Deployed Bytecode Sourcemap
1539:19129:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6709:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3059:35::-;;;:::i;:::-;;;;;;;:::i;1975:::-;;;:::i;2747:61::-;;;:::i;3601:130::-;;;:::i;2457:55::-;;;:::i;7570:343::-;;;;;;:::i;:::-;;:::i;2814:59::-;;;:::i;:::-;;;;;;;:::i;1934:35::-;;;:::i;:::-;;;;;;;:::i;3020:33::-;;;:::i;8198:239::-;;;;;;:::i;:::-;;:::i;2288:225:7:-;;;;;;:::i;:::-;;:::i;:::-;;17732:953:3;;;:::i;9228:182::-;;;;;;:::i;:::-;;:::i;2879:44::-;;;:::i;3225:::-;;;;;;:::i;:::-;;:::i;1215:25:4:-;;;:::i;10723:100:3:-;;;;;;:::i;:::-;;:::i;1969:254:4:-;;;:::i;18691:234:3:-;;;:::i;3483:48::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10049:118::-;;;;;;:::i;:::-;;:::i;12514:1214::-;;;;;;:::i;:::-;;:::i;2981:33::-;;;:::i;4025:41::-;;;;;;:::i;:::-;;:::i;1788:50::-;;;:::i;1888:40::-;;;:::i;8731:317::-;;;;;;:::i;:::-;;:::i;7120:152::-;;;;;;:::i;:::-;;:::i;16839:887::-;;;;;;:::i;:::-;;:::i;10361:220::-;;;;;;:::i;:::-;;:::i;11246:831::-;;;;;;:::i;:::-;;:::i;1696:242:7:-;;;;;;:::i;:::-;;:::i;2389:239:4:-;;;;;;:::i;:::-;;:::i;2518:54:3:-;;;:::i;9707:146::-;;;;;;:::i;:::-;;:::i;2679:62::-;;;:::i;2636:37::-;;;:::i;3822:125::-;;;:::i;2929:46::-;;;:::i;3349:68::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1246:32:4:-;;;:::i;2578:52:3:-;;;:::i;1844:38::-;;;;;;;;;;;;;;-1:-1:-1;;;1844:38:3;;;;:::o;6709:158::-;6786:4;6802:37;6811:10;6823:7;6832:6;6802:8;:37::i;:::-;-1:-1:-1;6856:4:3;6709:158;;;;;:::o;3059:35::-;;;;:::o;1975:::-;;;;:::o;2747:61::-;;;;:::o;3601:130::-;3651:80;3601:130;:::o;2457:55::-;;;;:::o;7570:343::-;7691:4;7707:27;7717:3;7722;7727:6;7707:9;:27::i;:::-;7807:68;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7807:15:3;;-1:-1:-1;7807:15:3;;;:10;:15;;;;;7783:10;7807:27;;;;;;;;;;7744:141;;7766:3;;7783:10;;7807:68;;7839:6;;7807:31;:68::i;:::-;7744:8;:141::i;:::-;-1:-1:-1;7902:4:3;7570:343;;;;;;:::o;2814:59::-;;;-1:-1:-1;;;;;2814:59:3;;:::o;1934:35::-;1967:2;1934:35;:::o;3020:33::-;;;;:::o;8198:239::-;8340:10;8311:4;8361:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;8361:31:3;;;;;;;;;;8311:4;;8331:78;;8352:7;;8361:47;;8397:10;8361:35;:47::i;2288:225:7:-;1807:10:4;;-1:-1:-1;;;;;1807:10:4;1793;:24;1785:52;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;;;;2421:34:7::1;-1:-1:-1::0;;;;;2421:18:7;::::1;2440:6:::0;2448;2421:18:::1;:34::i;:::-;2470:36;::::0;;-1:-1:-1;;;;;2470:36:7;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;::::1;2288:225:::0;;;:::o;17732:953:3:-;17798:22;;17790:66;;;;-1:-1:-1;;;17790:66:3;;;;;;;:::i;:::-;;;;;;;;;2445:6;17905:22;;:49;17887:15;:67;17866:134;;;;-1:-1:-1;;;17866:134:3;;;;;;;:::i;:::-;18011:25;:23;:25::i;:::-;-1:-1:-1;18196:38:3;;18162:31;:72;;;18277:37;;18244:30;:70;;;18355:35;;18324:28;:66;;18419:23;-1:-1:-1;;;18419:23:3;;;;;18400:42;;;;-1:-1:-1;;;;;;;;;;18324:66:3;;;-1:-1:-1;;;;;18355:35:3;;;18324:66;18400:42;;;;;;;;;;;;-1:-1:-1;18452:22:3;:26;18493:185;;;;;;18196:38;;18277:37;;18610:28;;;;18652:16;;;;;;18493:185;:::i;:::-;;;;;;;;17732:953::o;9228:182::-;9307:16;;9283:4;;-1:-1:-1;;;9307:16:3;;;;9299:48;;;;-1:-1:-1;;;9299:48:3;;;;;;;:::i;:::-;9357:25;9363:10;9375:6;9357:5;:25::i;:::-;-1:-1:-1;9399:4:3;9228:182;;;:::o;2879:44::-;;;-1:-1:-1;;;2879:44:3;;;;;:::o;3225:::-;;;;;;;;;;;;-1:-1:-1;;;;;3225:44:3;;:::o;1215:25:4:-;;;-1:-1:-1;;;;;1215:25:4;;:::o;10723:100:3:-;10784:32;10794:10;10806:9;10784;:32::i;:::-;10723:100;:::o;1969:254:4:-;2021:17;;-1:-1:-1;;;;;2021:17:4;2042:10;2021:31;2013:60;;;;;-1:-1:-1;;;2013:60:4;;;;;;;;;;;;-1:-1:-1;;;2013:60:4;;;;;;;;;;;;;;;2106:17;;;2125:10;2088:48;;;-1:-1:-1;;;;;2106:17:4;;;2088:48;;2125:10;;;;2088:48;;;;;;;;;;;;;;;;2159:17;;;;2146:30;;-1:-1:-1;;;;;;2146:30:4;;;-1:-1:-1;;;;;2159:17:4;;2146:30;;;;2186;;;1969:254::o;18691:234:3:-;18809:28;;18753:22;;-1:-1:-1;;;;;18809:28:3;18795:10;:42;18787:79;;;;-1:-1:-1;;;18787:79:3;;;;;;;:::i;:::-;18893:25;:23;:25::i;:::-;18876:42;;18691:234;:::o;3483:48::-;;;;;;;;;;;;;;;:::o;10049:118::-;-1:-1:-1;;;;;10143:17:3;10117:7;10143:17;;;:8;:17;;;;;;;10049:118::o;12514:1214::-;12637:7;12682:12;12668:11;:26;12660:57;;;;-1:-1:-1;;;12660:57:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;12750:23:3;;12728:19;12750:23;;;:14;:23;;;;;;;;12787:17;12783:56;;12827:1;12820:8;;;;;12783:56;-1:-1:-1;;;;;12896:20:3;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12917:16:3;;12896:38;;;;;;;;;:48;;:63;-1:-1:-1;12892:145:3;;-1:-1:-1;;;;;12982:20:3;;;;;;:11;:20;;;;;;;;-1:-1:-1;;13003:16:3;;;;12982:38;;;;;;;;13018:1;12982:44;;;-1:-1:-1;12975:51:3;;12892:145;-1:-1:-1;;;;;13095:20:3;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;13091:86:3;;;13165:1;13158:8;;;;;13091:86;13187:12;-1:-1:-1;;13228:16:3;;13254:418;13269:5;13261:13;;:5;:13;;;13254:418;;;13290:13;13332:1;13314:19;13315:13;;;13314:19;-1:-1:-1;;;;;13397:20:3;;13374;13397;;;:11;:20;;;;;;;;13314:19;;;;13306:27;;13397:28;;;;;;;;;;;;;13374:51;;;;;;;;;;;;;;;;;;;;;;;;;13306:27;-1:-1:-1;13374:51:3;13443:27;;13439:223;;;13497:8;;;;-1:-1:-1;13490:15:3;;-1:-1:-1;;;;13490:15:3;13439:223;13530:12;;:26;;;-1:-1:-1;13526:136:3;;;13584:6;13576:14;;13526:136;;;13646:1;13637:6;:10;13629:18;;13526:136;13254:418;;;;;-1:-1:-1;;;;;;13688:20:3;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;12514:1214:3;;;;:::o;2981:33::-;;;;:::o;4025:41::-;;;;;;;;;;;;;:::o;1788:50::-;1834:4;1788:50;:::o;1888:40::-;;;;;;;;;;;;;;-1:-1:-1;;;1888:40:3;;;;:::o;8731:317::-;8936:74;;;;;;;;;;;-1:-1:-1;;;8936:74:3;;;;;;;;8891:10;8849:4;8936:22;;;:10;:22;;;;;-1:-1:-1;;;;;8936:31:3;;;;;;;;;;;8849:4;;8869:151;;8891:10;;8915:7;;8936:74;;:31;8972:15;;8936:35;:74::i;7120:152::-;7194:4;7210:34;7220:10;7232:3;7237:6;7210:9;:34::i;16839:887::-;1807:10:4;;-1:-1:-1;;;;;1807:10:4;1793;:24;1785:52;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;17105:43:3;::::1;17097:68;;;;-1:-1:-1::0;;;17097:68:3::1;;;;;;;:::i;:::-;17175:38;:73:::0;;;17258:37:::1;:71:::0;;;17339:35:::1;:67:::0;;-1:-1:-1;;;;;;17339:67:3::1;-1:-1:-1::0;;;;;17339:67:3;::::1;;-1:-1:-1::0;;;;17416:43:3::1;-1:-1:-1::0;;;17416:43:3;::::1;;;;::::0;;17474:195:::1;::::0;::::1;::::0;::::1;::::0;17175:73;;17258:71;;17339:67;;17416:43;;17474:195:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;17704:15:3::1;17679:22;:40:::0;-1:-1:-1;;16839:887:3:o;10361:220::-;-1:-1:-1;;;;;10467:23:3;;10426:7;10467:23;;;:14;:23;;;;;;;;10507:16;:67;;10573:1;10507:67;;;-1:-1:-1;;;;;10526:20:3;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;10547:16:3;;10526:38;;;;;;;;10562:1;10526:44;;10500:74;10361:220;-1:-1:-1;;;10361:220:3:o;11246:831::-;11530:4;;;;;;;;;;;;-1:-1:-1;;;11530:4:3;;;;;11421:23;3651:80;11514:22;11538:12;:10;:12::i;:::-;11560:4;11486:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11459:121;;;;;;11421:159;;11590:18;3876:71;11653:9;11664:5;11671:6;11621:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11611:68;;;;;;11590:89;;11689:14;11745:15;11762:10;11716:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11706:68;;;;;;11689:85;;11784:17;11804:26;11814:6;11822:1;11825;11828;11804:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11804:26:3;;-1:-1:-1;;11804:26:3;;;-1:-1:-1;;;;;;;11848:23:3;;11840:53;;;;-1:-1:-1;;;11840:53:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;11920:17:3;;;;;;:6;:17;;;;;:19;;;;;;;;11911:28;;11903:54;;;;-1:-1:-1;;;11903:54:3;;;;;;;:::i;:::-;11994:6;11975:15;:25;;11967:55;;;;-1:-1:-1;;;11967:55:3;;;;;;;:::i;:::-;12039:31;12049:9;12060;12039;:31::i;:::-;12032:38;;;;11246:831;;;;;;;:::o;1696:242:7:-;1807:10:4;;-1:-1:-1;;;;;1807:10:4;1793;:24;1785:52;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;;;;1812:30:7::1;::::0;1794:12:::1;::::0;-1:-1:-1;;;;;1812:11:7;::::1;::::0;1831:6;;1794:12;1812:30;1794:12;1812:30;1831:6;1812:11;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1793:49;;;1860:7;1852:35;;;::::0;;-1:-1:-1;;;1852:35:7;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1852:35:7;;;;;;;;;;;;;::::1;;1902:29;::::0;;;;;-1:-1:-1;;;;;1902:29:7;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;1847:1:4;1696:242:7::0;;:::o;2389:239:4:-;1807:10;;-1:-1:-1;;;;;1807:10:4;1793;:24;1785:52;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;-1:-1:-1;;;1785:52:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;2478:25:4;::::1;2470:50;;;::::0;;-1:-1:-1;;;2470:50:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2470:50:4;;;;;;;;;;;;;::::1;;2530:17;:31:::0;;-1:-1:-1;;;;;;2530:31:4::1;-1:-1:-1::0;;;;;2530:31:4;;::::1;::::0;;;::::1;::::0;;;;2577:44:::1;::::0;;2603:17;;;::::1;2577:44:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;2389:239:::0;:::o;2518:54:3:-;;;;:::o;9707:146::-;-1:-1:-1;;;;;9818:19:3;;;9792:7;9818:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;9707:146::o;2679:62::-;;;;:::o;2636:37::-;;;-1:-1:-1;;;2636:37:3;;;;;:::o;3822:125::-;3876:71;3822:125;:::o;2929:46::-;;;;:::o;3349:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1246:32:4:-;;;-1:-1:-1;;;;;1246:32:4;;:::o;2578:52:3:-;;;-1:-1:-1;;;;;2578:52:3;;:::o;2690:175:6:-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;;-1:-1:-1;;;2794:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;14636:307:3;-1:-1:-1;;;;;14761:17:3;;14753:45;;;;-1:-1:-1;;;14753:45:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;14816:17:3;;14808:47;;;;-1:-1:-1;;;14808:47:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;14866:15:3;;;;;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;;:29;;;14910:26;;;;;14889:6;;14910:26;:::i;:::-;;;;;;;;14636:307;;;:::o;14108:522::-;-1:-1:-1;;;;;14226:17:3;;14218:46;;;;-1:-1:-1;;;14218:46:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;14282:17:3;;14274:48;;;;-1:-1:-1;;;14274:48:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;14340:20:3;;14355:4;14340:20;;14332:55;;;;-1:-1:-1;;;14332:55:3;;;;;;;:::i;:::-;14414:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14414:13:3;;-1:-1:-1;14414:13:3;;;:8;:13;;;;;;;;:52;;14432:6;;14414:17;:52::i;:::-;-1:-1:-1;;;;;14398:13:3;;;;;;;:8;:13;;;;;;:68;;;;14492:13;;;;;;;:25;;14510:6;14492:17;:25::i;:::-;-1:-1:-1;;;;;14476:13:3;;;;;;;:8;:13;;;;;;;:41;;;;14532:26;;;;;;;;;;14551:6;;14532:26;:::i;:::-;;;;;;;;-1:-1:-1;;;;;14584:14:3;;;;;;;:9;:14;;;;;;;14600;;;;;;;;14569:54;;14584:14;;;;14600;14616:6;14569:14;:54::i;:::-;14108:522;;;:::o;5432:163:6:-;5518:7;5553:12;5545:6;;;;5537:29;;;;-1:-1:-1;;;5537:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5583:5:6;;;5432:163::o;685:175:5:-;794:58;;;-1:-1:-1;;;;;794:58:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;794:58:5;-1:-1:-1;;;794:58:5;;;767:86;;787:5;;767:19;:86::i;18931:855:3:-;18984:22;19018:20;19041:17;:15;:17::i;:::-;19018:40;;19088:20;;19072:12;:36;19068:75;;19131:1;19124:8;;;;;19068:75;19169:20;;19192:1;19169:24;19152:583;19200:12;19195:1;:17;19152:583;;19242:3;19237:1;:8;19233:354;;19286:117;2370:17;19286:55;19309:31;;19286:18;;:22;;:55;;;;:::i;:::-;:59;;:117::i;:::-;19265:18;:138;19233:354;;;19463:109;2370:17;19463:47;19479:30;;19463:11;;:15;;:47;;;;:::i;:109::-;19442:18;:130;19233:354;19606:28;;19636:18;;19600:55;;-1:-1:-1;;;;;19606:28:3;;19600:5;:55::i;:::-;19705:18;;19686:38;;:14;;:18;:38::i;:::-;19669:55;-1:-1:-1;19214:3:3;;19152:583;;;-1:-1:-1;19744:20:3;:35;18931:855;;:::o;20261:405::-;-1:-1:-1;;;;;20336:21:3;;20328:56;;;;-1:-1:-1;;;20328:56:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;20420:17:3;;20395:22;20420:17;;;:8;:17;;;;;;20455:24;;;;20447:56;;;;-1:-1:-1;;;20447:56:3;;;;;;;:::i;:::-;20533:26;:14;20552:6;20533:18;:26::i;:::-;-1:-1:-1;;;;;20513:17:3;;;;;;:8;:17;;;;;:46;20583:11;;:23;;20599:6;20583:15;:23::i;:::-;20569:11;:37;20622;;20648:1;;-1:-1:-1;;;;;20622:37:3;;;;;;;20652:6;;20622:37;:::i;13734:368::-;-1:-1:-1;;;;;13836:20:3;;;13810:23;13836:20;;;:9;:20;;;;;;;;;;13893:8;:19;;;;;;13922:20;;;;:32;;;-1:-1:-1;;;;;;13922:32:3;;;;;;;13970:54;;13836:20;;;;;13893:19;;13922:32;;13836:20;;;13970:54;;13810:23;13970:54;14035:60;14050:15;14067:9;14078:16;14035:14;:60::i;:::-;13734:368;;;;:::o;16661:172::-;16784:9;16661:172;:::o;14949:865::-;15084:6;-1:-1:-1;;;;;15074:16:3;:6;-1:-1:-1;;;;;15074:16:3;;;:30;;;;;15103:1;15094:6;:10;15074:30;15070:738;;;-1:-1:-1;;;;;15124:20:3;;;15120:332;;-1:-1:-1;;;;;15183:22:3;;15164:16;15183:22;;;:14;:22;;;;;;;;;15243:13;:60;;15302:1;15243:60;;;-1:-1:-1;;;;;15259:19:3;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;15279:13:3;;15259:34;;;;;;;;15291:1;15259:40;;15243:60;15223:80;-1:-1:-1;15321:17:3;15341:21;15223:80;15355:6;15341:13;:21::i;:::-;15321:41;;15380:57;15397:6;15405:9;15416;15427;15380:16;:57::i;:::-;15120:332;;;;-1:-1:-1;;;;;15470:20:3;;;15466:332;;-1:-1:-1;;;;;15529:22:3;;15510:16;15529:22;;;:14;:22;;;;;;;;;15589:13;:60;;15648:1;15589:60;;;-1:-1:-1;;;;;15605:19:3;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;15625:13:3;;15605:34;;;;;;;;15637:1;15605:40;;15589:60;15569:80;-1:-1:-1;15667:17:3;15687:21;15569:80;15701:6;15687:13;:21::i;:::-;15667:41;;15726:57;15743:6;15751:9;15762;15773;15726:16;:57::i;2948:751:5:-;3367:23;3393:69;3421:4;3393:69;;;;;;;;;;;;;;;;;3401:5;-1:-1:-1;;;;;3393:27:5;;;:69;;;;;:::i;:::-;3476:17;;3367:95;;-1:-1:-1;3476:21:5;3472:221;;3616:10;3605:30;;;;;;;;;;;;;;;-1:-1:-1;3605:30:5;3597:85;;;;-1:-1:-1;;;3597:85:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19829:136:3;19879:14;19947:6;19933:9;;19915:15;:27;19914:40;;;;;;19957:1;19914:44;19905:53;;19829:136;:::o;3538:215:6:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:6;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4217:150;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:6:o;19971:284:3:-;-1:-1:-1;;;;;20046:21:3;;20038:51;;;;-1:-1:-1;;;20038:51:3;;;;;;;:::i;:::-;20114:11;;:23;;20130:6;20114:15;:23::i;:::-;20100:11;:37;-1:-1:-1;;;;;20167:17:3;;;;;;:8;:17;;;;;;:29;;20189:6;20167:21;:29::i;:::-;-1:-1:-1;;;;;20147:17:3;;;;;;:8;:17;;;;;;:49;;;;20211:37;;20147:17;;;20211:37;;;;20241:6;;20211:37;:::i;:::-;;;;;;;;19971:284;;:::o;3136:155:6:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:6;;;3136:155::o;15820:668:3:-;15979:18;16000:48;16007:12;16000:48;;;;;;;;;;;;;;;;;:6;:48::i;:::-;15979:69;;16091:1;16076:12;:16;;;:85;;;;-1:-1:-1;;;;;;16096:22:3;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;16119:16:3;;16096:40;;;;;;;;;:50;:65;;;:50;;:65;16076:85;16059:356;;;-1:-1:-1;;;;;16186:22:3;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;16209:16:3;;16186:40;;;;;;;;16224:1;16186:46;:57;;;16059:356;;;16313:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16274:22:3;;-1:-1:-1;16274:22:3;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;-1:-1:-1;;16274:72:3;;;;;;;;;;;;;16360:25;;;:14;:25;;;;;;:44;;16388:16;;;16360:44;;;;;;;;;;16059:356;16451:9;-1:-1:-1;;;;;16430:51:3;;16462:8;16472;16430:51;;;;;;;:::i;:::-;;;;;;;;15820:668;;;;;:::o;3581:193:0:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;:::-;3708:59;3581:193;-1:-1:-1;;;;3581:193:0:o;16494:161:3:-;16572:6;16609:12;16602:5;16598:9;;16590:32;;;;-1:-1:-1;;;16590:32:3;;;;;;;;:::i;:::-;-1:-1:-1;16646:1:3;;16494:161;-1:-1:-1;;16494:161:3:o;4608:523:0:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;-1:-1:-1;;;4759:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;-1:-1:-1;;;4850:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;-1:-1:-1;;;;;5022:11:0;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5022:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:0:o;726:413::-;1086:20;1124:8;;;726:413::o;7091:725::-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:0;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;-1:-1:-1;;;7765:20:0;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:259:8;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:402::-;;;407:2;395:9;386:7;382:23;378:32;375:2;;;428:6;420;413:22;375:2;472:9;459:23;491:33;518:5;491:33;:::i;:::-;543:5;-1:-1:-1;600:2:8;585:18;;572:32;613:35;572:32;613:35;:::i;:::-;667:7;657:17;;;365:315;;;;;:::o;685:470::-;;;;831:2;819:9;810:7;806:23;802:32;799:2;;;852:6;844;837:22;799:2;896:9;883:23;915:33;942:5;915:33;:::i;:::-;967:5;-1:-1:-1;1024:2:8;1009:18;;996:32;1037:35;996:32;1037:35;:::i;:::-;789:366;;1091:7;;-1:-1:-1;;;1145:2:8;1130:18;;;;1117:32;;789:366::o;1160:327::-;;;1289:2;1277:9;1268:7;1264:23;1260:32;1257:2;;;1310:6;1302;1295:22;1257:2;1354:9;1341:23;1373:33;1400:5;1373:33;:::i;:::-;1425:5;1477:2;1462:18;;;;1449:32;;-1:-1:-1;;;1247:240:8:o;1492:709::-;;;;;;;1687:3;1675:9;1666:7;1662:23;1658:33;1655:2;;;1709:6;1701;1694:22;1655:2;1753:9;1740:23;1772:33;1799:5;1772:33;:::i;:::-;1824:5;-1:-1:-1;1876:2:8;1861:18;;1848:32;;-1:-1:-1;1927:2:8;1912:18;;1899:32;;-1:-1:-1;1983:2:8;1968:18;;1955:32;2031:4;2018:18;;2006:31;;1996:2;;2056:6;2048;2041:22;1996:2;1645:556;;;;-1:-1:-1;1645:556:8;;2138:3;2123:19;;2110:33;;2190:3;2175:19;;;2162:33;;-1:-1:-1;1645:556:8;-1:-1:-1;;1645:556:8:o;2206:441::-;;;2334:2;2322:9;2313:7;2309:23;2305:32;2302:2;;;2355:6;2347;2340:22;2302:2;2399:9;2386:23;2418:33;2445:5;2418:33;:::i;:::-;2470:5;-1:-1:-1;2527:2:8;2512:18;;2499:32;2575:10;2562:24;;2550:37;;2540:2;;2606:6;2598;2591:22;2652:484;;;;2812:2;2800:9;2791:7;2787:23;2783:32;2780:2;;;2833:6;2825;2818:22;2780:2;2877:9;2864:23;2896:33;2923:5;2896:33;:::i;:::-;2948:5;-1:-1:-1;3000:2:8;2985:18;;2972:32;;-1:-1:-1;3056:2:8;3041:18;;3028:32;3069:35;3028:32;3069:35;:::i;:::-;3123:7;3113:17;;;2770:366;;;;;:::o;3141:190::-;;3253:2;3241:9;3232:7;3228:23;3224:32;3221:2;;;3274:6;3266;3259:22;3221:2;-1:-1:-1;3302:23:8;;3211:120;-1:-1:-1;3211:120:8:o;3336:335::-;;;3473:2;3461:9;3452:7;3448:23;3444:32;3441:2;;;3494:6;3486;3479:22;3441:2;3535:9;3522:23;3512:33;;3595:2;3584:9;3580:18;3567:32;3608:33;3635:5;3608:33;:::i;3676:575::-;;;;;3836:3;3824:9;3815:7;3811:23;3807:33;3804:2;;;3858:6;3850;3843:22;3804:2;3899:9;3886:23;3876:33;;3956:2;3945:9;3941:18;3928:32;3918:42;;4010:2;3999:9;3995:18;3982:32;4023:33;4050:5;4023:33;:::i;:::-;4075:5;-1:-1:-1;4132:2:8;4117:18;;4104:32;4174:15;;4167:23;4155:36;;4145:2;;4210:6;4202;4195:22;4145:2;3794:457;;;;-1:-1:-1;3794:457:8;;-1:-1:-1;;3794:457:8:o;4256:392::-;-1:-1:-1;;;4514:27:8;;4566:1;4557:11;;4550:27;;;;4602:2;4593:12;;4586:28;4639:2;4630:12;;4504:144::o;4653:203::-;-1:-1:-1;;;;;4817:32:8;;;;4799:51;;4787:2;4772:18;;4754:102::o;4861:187::-;5026:14;;5019:22;5001:41;;4989:2;4974:18;;4956:92::o;5053:177::-;5199:25;;;5187:2;5172:18;;5154:76::o;5235:417::-;5466:25;;;-1:-1:-1;;;;;5527:32:8;;;;5522:2;5507:18;;5500:60;5591:2;5576:18;;5569:34;5634:2;5619:18;;5612:34;5453:3;5438:19;;5420:232::o;5657:417::-;5888:25;;;5944:2;5929:18;;5922:34;;;;5987:2;5972:18;;5965:34;-1:-1:-1;;;;;6035:32:8;6030:2;6015:18;;6008:60;5875:3;5860:19;;5842:232::o;6079:398::-;6306:25;;;6379:4;6367:17;;;;6362:2;6347:18;;6340:45;6416:2;6401:18;;6394:34;6459:2;6444:18;;6437:34;6293:3;6278:19;;6260:217::o;6482:603::-;;6623:2;6652;6641:9;6634:21;6684:6;6678:13;6727:6;6722:2;6711:9;6707:18;6700:34;6752:4;6765:140;6779:6;6776:1;6773:13;6765:140;;;6874:14;;;6870:23;;6864:30;6840:17;;;6859:2;6836:26;6829:66;6794:10;;6765:140;;;6923:6;6920:1;6917:13;6914:2;;;6993:4;6988:2;6979:6;6968:9;6964:22;6960:31;6953:45;6914:2;-1:-1:-1;7069:2:8;7048:15;-1:-1:-1;;7044:29:8;7029:45;;;;7076:2;7025:54;;6603:482;-1:-1:-1;;;6603:482:8:o;7090:343::-;7292:2;7274:21;;;7331:2;7311:18;;;7304:30;-1:-1:-1;;;7365:2:8;7350:18;;7343:49;7424:2;7409:18;;7264:169::o;7438:342::-;7640:2;7622:21;;;7679:2;7659:18;;;7652:30;-1:-1:-1;;;7713:2:8;7698:18;;7691:48;7771:2;7756:18;;7612:168::o;7785:339::-;7987:2;7969:21;;;8026:2;8006:18;;;7999:30;-1:-1:-1;;;8060:2:8;8045:18;;8038:45;8115:2;8100:18;;7959:165::o;8129:341::-;8331:2;8313:21;;;8370:2;8350:18;;;8343:30;-1:-1:-1;;;8404:2:8;8389:18;;8382:47;8461:2;8446:18;;8303:167::o;8475:350::-;8677:2;8659:21;;;8716:2;8696:18;;;8689:30;8755:28;8750:2;8735:18;;8728:56;8816:2;8801:18;;8649:176::o;8830:344::-;9032:2;9014:21;;;9071:2;9051:18;;;9044:30;-1:-1:-1;;;9105:2:8;9090:18;;9083:50;9165:2;9150:18;;9004:170::o;9179:343::-;9381:2;9363:21;;;9420:2;9400:18;;;9393:30;-1:-1:-1;;;9454:2:8;9439:18;;9432:49;9513:2;9498:18;;9353:169::o;9527:348::-;9729:2;9711:21;;;9768:2;9748:18;;;9741:30;9807:26;9802:2;9787:18;;9780:54;9866:2;9851:18;;9701:174::o;9880:341::-;10082:2;10064:21;;;10121:2;10101:18;;;10094:30;-1:-1:-1;;;10155:2:8;10140:18;;10133:47;10212:2;10197:18;;10054:167::o;10226:341::-;10428:2;10410:21;;;10467:2;10447:18;;;10440:30;-1:-1:-1;;;10501:2:8;10486:18;;10479:47;10558:2;10543:18;;10400:167::o;10572:336::-;10774:2;10756:21;;;10813:2;10793:18;;;10786:30;-1:-1:-1;;;10847:2:8;10832:18;;10825:42;10899:2;10884:18;;10746:162::o;10913:340::-;11115:2;11097:21;;;11154:2;11134:18;;;11127:30;-1:-1:-1;;;11188:2:8;11173:18;;11166:46;11244:2;11229:18;;11087:166::o;11258:342::-;11460:2;11442:21;;;11499:2;11479:18;;;11472:30;-1:-1:-1;;;11533:2:8;11518:18;;11511:48;11591:2;11576:18;;11432:168::o;11605:341::-;11807:2;11789:21;;;11846:2;11826:18;;;11819:30;-1:-1:-1;;;11880:2:8;11865:18;;11858:47;11937:2;11922:18;;11779:167::o;11951:337::-;12153:2;12135:21;;;12192:2;12172:18;;;12165:30;-1:-1:-1;;;12226:2:8;12211:18;;12204:43;12279:2;12264:18;;12125:163::o;12293:346::-;12495:2;12477:21;;;12534:2;12514:18;;;12507:30;-1:-1:-1;;;12568:2:8;12553:18;;12546:52;12630:2;12615:18;;12467:172::o;12644:346::-;12846:2;12828:21;;;12885:2;12865:18;;;12858:30;-1:-1:-1;;;12919:2:8;12904:18;;12897:52;12981:2;12966:18;;12818:172::o;13177:248::-;13351:25;;;13407:2;13392:18;;13385:34;13339:2;13324:18;;13306:119::o;13430:427::-;13655:25;;;13711:2;13696:18;;13689:34;;;;-1:-1:-1;;;;;13759:32:8;13754:2;13739:18;;13732:60;13835:14;13828:22;13823:2;13808:18;;13801:50;13642:3;13627:19;;13609:248::o;13862:192::-;14036:10;14024:23;;;;14006:42;;13994:2;13979:18;;13961:93::o;14059:263::-;14261:10;14249:23;;;;14231:42;;14304:2;14289:18;;14282:34;14219:2;14204:18;;14186:136::o;14327:184::-;14499:4;14487:17;;;;14469:36;;14457:2;14442:18;;14424:87::o;14516:133::-;-1:-1:-1;;;;;14593:31:8;;14583:42;;14573:2;;14639:1;14636;14629:12
Swarm Source
ipfs://d8df1688edf4bda330bf2e85c9b60e22ce80bd863ff001bd2cc00635fc238b8f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.